[
  {
    "path": ".cargo/config.toml",
    "content": "[build]\ntarget-dir = \".cargo/garaga_rs/target\"\n"
  },
  {
    "path": ".claude/commands/bump-version.md",
    "content": "# Bump Garaga Version\n\nBump the garaga version across the entire codebase (Python, Rust, Cairo, TypeScript, docs).\n\n## Arguments\n\nThe user provides:\n- **NEW_VERSION**: The new garaga version (e.g. `1.0.2`)\n\n## Procedure\n\n### Step 0: Detect current version\n\nRead `tools/make/constants.json` and extract `release_info.garaga_version`. This is the OLD version that will be replaced everywhere.\n\nPresent the current version to the user and confirm the target version before proceeding. If the user already provided an explicit version number as an argument, skip the proposal and use it directly.\n\n### Step 1: Update `tools/make/constants.json`\n\nUpdate `release_info.garaga_version` to the new version.\n\n### Step 2: Run `generate_constants.py`\n\nRun `make constants` from the project root.\n\nThis auto-regenerates the constants files AND updates version references in:\n- `hydra/garaga/starknet/constants.py`\n- `tools/garaga_rs/src/constants.rs`\n- `tools/npm/garaga_ts/src/constants.ts`\n- `pyproject.toml` (package version)\n- `tools/garaga_rs/Cargo.toml` (package version)\n- `tools/npm/garaga_ts/package.json` (package version)\n- `docs/PYPI_README.md` (pip install version)\n- `tools/npm/garaga_ts/README.md` (API doc link)\n- `docs/gitbook/smart-contract-generators/noir.md` (Garaga CLI version line only)\n\nIf the script fails, fall back to manually editing each of these files.\n\n### Step 3: Update `src/Scarb.toml`\n\nUpdate the `version = \"OLD\"` field (line near the top, under `[package]`) to the new version.\n\n### Step 4: Update `Cargo.lock`\n\nRun `cargo update -p garaga_rs` from the project root to sync the lock file with the new Cargo.toml version.\n\n### Step 5: Run `make rewrite`\n\nRun `make rewrite` from the project root. This regenerates all autogenerated contracts under `src/contracts/autogenerated/` which embed the garaga version in comments and Scarb.toml files.\n\nThis takes a few minutes. The makefile activates the venv automatically. If it fails, report the error.\n\n### Step 6: Update documentation\n\nReplace ALL occurrences of the old garaga version with the new one in these documentation files:\n- `docs/gitbook/README.md`\n- `docs/gitbook/installation/README.md`\n- `docs/gitbook/installation/cairo-library.md`\n- `docs/gitbook/installation/npm-package.md`\n- `docs/gitbook/installation/python-package.md`\n- `docs/gitbook/installation/rust-crate.md`\n- `docs/gitbook/maintained-smart-contracts/README.md`\n- `docs/gitbook/maintained-smart-contracts/risczero.md`\n- `docs/gitbook/security.md`\n- `docs/gitbook/smart-contract-generators/groth16/generate-and-deploy-your-verifier-contract.md`\n- `docs/gitbook/using-garaga-libraries-in-your-cairo-project/README.md`\n- `docs/gitbook/using-garaga-libraries-in-your-cairo-project/ec-multi-scalar-multiplication.md`\n\nVersion appears in several forms that must ALL be updated:\n- Bare version: `1.0.1` (in Scarb.toml examples, pip install, npm install, class hash headers)\n- Prefixed with `v`: `v1.0.1` (in git tags, release links, Cargo.toml git tag references)\n- Prefixed with `==`: `==1.0.1` (pip install commands)\n- Prefixed with `@`: `@1.0.1` (npm/scarb add commands)\n\nBe thorough: read each file, find all old version occurrences, and replace them. Do NOT change version numbers that belong to other tools (Cairo, Scarb, Noir, Barretenberg, RiscZero, SP1, Starknet Foundry).\n\n### Step 7: Verify\n\nRun a grep for the old version across the repo:\n```\ngrep -r \"OLD_VERSION\" --include=\"*.toml\" --include=\"*.yml\" --include=\"*.json\" --include=\"*.py\" --include=\"*.rs\" --include=\"*.ts\" --include=\"*.md\" --include=\"*.sh\" .\n```\n\nReport any remaining references. Some may be intentional (e.g. changelogs, historical references). Flag anything that looks like it should have been updated.\n\n## Notes\n\n- The `generate_constants.py` script handles: constants files (Python/Rust/TS), `pyproject.toml`, `Cargo.toml`, `package.json`, `PYPI_README.md`, `npm README.md`, and Noir docs version line. Everything else must be updated manually.\n- `make rewrite` regenerates everything under `src/contracts/autogenerated/`. Never manually edit those files.\n- The `src/Scarb.toml` version must be updated manually (Step 3) as `generate_constants.py` does not touch it.\n- Documentation (Step 6) is the most labor-intensive part. Be careful to only replace the garaga version, not versions of other tools.\n"
  },
  {
    "path": ".claude/commands/upgrade-cairo.md",
    "content": "# Upgrade Cairo Version\n\nUpgrade the Cairo/Scarb version (and optionally the Starknet Foundry version) across the entire codebase.\n\n## Arguments\n\nThe user provides:\n- **NEW_CAIRO_VERSION**: The new Cairo/Scarb version (e.g. `2.16.0`)\n- **NEW_FOUNDRY_VERSION** (optional): The new Starknet Foundry version (e.g. `0.58.0`). If not provided, keep the current Foundry version unchanged.\n\n## Procedure\n\n### Step 0: Detect current versions and propose latest available\n\nRead `tools/make/constants.json` to extract the current `cairo_version` and `starknet_foundry_version`. These are the OLD versions that will be replaced everywhere.\n\nThen query asdf for the latest available versions:\n- Run `asdf list all scarb` and pick the latest stable version (no `-rc`, `-alpha`, `-beta`, `-nightly` suffixes).\n- Run `asdf list all starknet-foundry` and pick the latest stable version.\n\nPresent the current and latest available versions to the user, e.g.:\n```\nCurrent:  scarb 2.14.0, starknet-foundry 0.53.0\nLatest:   scarb 2.16.1, starknet-foundry 0.58.0\n```\n\nAsk the user to confirm the target versions before proceeding. If the user already provided explicit version numbers as arguments, skip the proposal and use those directly.\n\n### Step 1: Update `tools/make/constants.json`\n\nUpdate `release_info.cairo_version` to the new Cairo version.\nIf a new Foundry version was provided, also update `release_info.starknet_foundry_version`.\n\n### Step 2: Run `generate_constants.py`\n\nRun `make constants` from the project root (the makefile activates the venv automatically).\nThis auto-regenerates:\n- `hydra/garaga/starknet/constants.py` (CAIRO_VERSION, STARKNET_FOUNDRY_VERSION)\n- `tools/garaga_rs/src/constants.rs`\n- `tools/npm/garaga_ts/src/constants.ts`\n\nIf the script fails (e.g. missing dependencies), fall back to manually editing `hydra/garaga/starknet/constants.py` to update `CAIRO_VERSION` and `STARKNET_FOUNDRY_VERSION`.\n\n### Step 3: Update root `Scarb.toml`\n\nUpdate `[workspace.dependencies]`:\n- `cairo_test = \"OLD\"` → `\"NEW_CAIRO_VERSION\"`\n- `starknet = \"OLD\"` → `\"NEW_CAIRO_VERSION\"`\n\n### Step 4: Update `src/Scarb.toml`\n\nUpdate:\n- `starknet = \"...\"` → `\"NEW_CAIRO_VERSION\"` (in `[dependencies]`)\n- `assert_macros = \"...\"` → `\"NEW_CAIRO_VERSION\"` (in `[dev-dependencies]`)\n- `cairo_execute = \"...\"` → `\"NEW_CAIRO_VERSION\"` (in `[dev-dependencies]`)\n- If new Foundry version provided: `snforge_std = \"...\"` → `\"NEW_FOUNDRY_VERSION\"` (in `[dev-dependencies]`)\n\n### Step 5: Update `src/corelib_imports/Scarb.toml`\n\nUpdate `cairo_test = \"...\"` → `\"NEW_CAIRO_VERSION\"` (in `[dev-dependencies]`).\n\n### Step 6: Update `.tool-versions` files\n\nUpdate the root `.tool-versions`:\n- `scarb OLD` → `scarb NEW_CAIRO_VERSION`\n- If new Foundry version: `starknet-foundry OLD` → `starknet-foundry NEW_FOUNDRY_VERSION`\n\nUpdate `src/.tool-versions`:\n- `scarb OLD` → `scarb NEW_CAIRO_VERSION`\n- If new Foundry version: `starknet-foundry OLD` → `starknet-foundry NEW_FOUNDRY_VERSION`\n\nAfter updating both `.tool-versions` files, run `asdf install` from the project root to install the new tool versions. Report the output to the user. If asdf is not available or fails, tell the user to manually install the required scarb and starknet-foundry versions.\n\n### Step 7: Update manual (non-autogenerated) contract `Scarb.toml` files\n\nThe following contract directories are NOT auto-generated by `make rewrite` and must be updated manually:\n- `src/contracts/drand_quicknet/Scarb.toml`\n- `src/contracts/drand_decrypt_quicknet/Scarb.toml`\n- `src/contracts/mutator_set/Scarb.toml`\n- `src/contracts/universal_ecip/Scarb.toml`\n- `src/contracts/risc0_sample_app/fibonacci_sequencer/Scarb.toml`\n\nIn each, update:\n- `starknet = \"OLD_CAIRO\"` → `\"NEW_CAIRO_VERSION\"`\n- `assert_macros = \"OLD_CAIRO\"` → `\"NEW_CAIRO_VERSION\"` (if present)\n- If new Foundry version: `snforge_std = \"OLD_FOUNDRY\"` → `\"NEW_FOUNDRY_VERSION\"` (if present)\n\nAlso update any `.tool-versions` files in these directories (currently only `src/contracts/drand_quicknet/.tool-versions` and `src/contracts/mutator_set/.tool-versions` exist).\n\n**DO NOT** manually edit files under `src/contracts/autogenerated/` — those are regenerated by `make rewrite` in the next step.\n\n### Step 8: Run `make rewrite`\n\nRun `make rewrite` from the project root. This regenerates:\n- All `src/contracts/autogenerated/*/Scarb.toml` (using CAIRO_VERSION from constants.py)\n- All `src/contracts/autogenerated/*/.tool-versions` (using CAIRO_VERSION and STARKNET_FOUNDRY_VERSION from constants.py)\n- All Cairo circuit files under `src/src/circuits/`\n- All autogenerated contract source code and tests\n\nThis takes a few minutes. The makefile activates the venv automatically. If it fails, report the error — the user may need to run `make setup` first.\n\n### Step 9: Update CI workflows\n\nUpdate `scarb-version: \"OLD\"` → `\"NEW_CAIRO_VERSION\"` in:\n- `.github/workflows/e2e.yml`\n- `.github/workflows/hydra.yml`\n- `.github/workflows/maturin.yml`\n- `.github/workflows/wasm.yml`\n\nOnly update lines that contain `scarb-version:`.\n\n### Step 10: Update `tools/make/setup.sh`\n\nReplace all occurrences of the old Cairo version with the new one in the Scarb version check block near the end of the file (the `grep -q` line and the two echo lines that mention the version).\n\n### Step 11: Update documentation\n\nUpdate the old Cairo/Scarb version string to the new one in:\n- `README.md`\n- `docs/gitbook/installation/developer-setup.md`\n- `docs/gitbook/maintained-smart-contracts/risczero.md`\n- `docs/CONTRIBUTING.md`\n\nOnly change lines that reference Scarb version numbers. If new Foundry version provided, also update any Foundry version references in these docs.\n\n### Step 12: Update hardcoded class hashes\n\nThe Cairo compiler version affects compiled Sierra output, so all hardcoded class hashes must be recomputed.\n\n**ECIP class hash** — used by all Groth16 verifier contracts:\n1. `cd src/contracts/universal_ecip && scarb build`\n2. `sncast utils class-hash --contract-name UniversalECIP` → copy the hash (strip leading zeros after `0x`)\n3. Update `ECIP_OPS_CLASS_HASH` in `hydra/garaga/starknet/groth16_contract_generator/generator.py`\n4. Re-run `make rewrite` to regenerate autogenerated contracts with the new hash\n\n**RISC0 verifier class hash** — used by the fibonacci_sequencer sample app:\nRun `make update-risc0-class-hash` (this builds, computes, and patches automatically).\n\n### Step 13: Verify\n\nRun `grep -r \"OLD_CAIRO_VERSION\" --include=\"*.toml\" --include=\"*.yml\" --include=\"*.json\" --include=\"*.py\" --include=\"*.sh\" --include=\"*.md\" .` to check for any remaining references to the old version. Report any stragglers found (some may be intentional, e.g. changelogs).\n\n### Step 14: Test compilation\n\nRun `cd src && scarb build` to verify the new version compiles. If it fails with type errors on `const` declarations (e.g. `E2126: Constant type must not depend on its value`), the Cairo version may require explicit generic type parameters. Update the Python generators in `hydra/garaga/starknet/groth16_contract_generator/` and `hydra/garaga/starknet/honk_contract_generator/` to emit the required generics (e.g. `Groth16VerifyingKey<u288>`, `G2Line<u288>`), then fix the generated `.cairo` files and re-run `make rewrite`.\n\n### Step 15: Run black formatting check\n\nRun `source venv/bin/activate && black --target-version py310 --check hydra/` to verify Python formatting passes. The pre-commit hook and CI both use `--target-version py310` to avoid formatting differences across Python versions. If files need reformatting, run `black --target-version py310 hydra/` and include the changes.\n\n## Notes\n\n- This procedure does NOT modify Cairo source code. If the new Cairo version introduces breaking language changes, those must be handled separately.\n- The `generate_constants.py` script propagates constants from `constants.json` into Python/Rust/TS constants files — it does NOT touch Scarb.toml or .tool-versions files.\n- `make rewrite` auto-generates everything under `src/contracts/autogenerated/` and `src/src/circuits/`. Never manually edit those — they will be overwritten.\n- Manual contracts (`drand_quicknet`, `drand_decrypt_quicknet`, `mutator_set`, `universal_ecip`, `fibonacci_sequencer`) must be updated by hand since they are not regenerated.\n- The pre-commit hook uses black from `.pre-commit-config.yaml` (must match the version in `tools/make/requirements.txt`). If they diverge, formatting will pass locally but fail in CI.\n"
  },
  {
    "path": ".claude/skills/benchmarking-cairo/SKILL.md",
    "content": "---\nname: benchmarking-cairo\ndescription: Use when profiling Cairo functions, measuring step counts, analyzing resource usage, generating call-graph PNGs, or launching pprof to visualize Cairo execution traces\n---\n\n# Benchmarking Cairo\n\n## Overview\n\nProfile Cairo function execution to identify hotspots by steps, calls, range checks, and other builtins. Works with both `scarb execute` (standalone programs) and `snforge test` (Starknet Foundry tests).\n\nIf tools are missing, see `installation.md` in this skill directory. The CLI script is `profile.py` in this skill directory.\n\n## REQUIRED: Use the CLI\n\n**Always use `python3 profile.py profile` (from this skill directory) for profiling.** Do NOT run snforge/cairo-profiler/pprof manually — the CLI handles the full pipeline deterministically (trace generation, profile building, PNG export, naming).\n\n### snforge mode (test functions)\n\n```bash\npython3 profile.py profile \\\n  --mode snforge \\\n  --package falcon \\\n  --test test_ntt_zknox_vs_felt252 \\\n  --name ntt-zknox-reduced \\\n  --metric steps\n```\n\n### scarb mode (standalone executables)\n\n```bash\npython3 profile.py profile \\\n  --mode scarb \\\n  --package falcon \\\n  --executable bench_ntt \\\n  --args-file tests/data/ntt_input_512.json \\\n  --name ntt-felt252 \\\n  --metric steps\n```\n\n### CLI arguments\n\n| Argument | Required | Description |\n|----------|----------|-------------|\n| `--mode` | yes | `snforge` or `scarb` |\n| `--package` | yes | Scarb package name (e.g. `falcon`) |\n| `--name` | yes | Human-friendly profile label (e.g. `ntt-zknox-reduced`) |\n| `--test` | snforge | Test filter passed to `snforge test` |\n| `--executable` | scarb | Executable name for `scarb execute` |\n| `--args-file` | no | Arguments file for `scarb execute` |\n| `--metric` | no | `steps` (default), `rc`, `sierra-gas`, `l2-gas` |\n| `--output` | no | Output directory (default: `profiles/`) |\n| `--nodefraction` | no | Hide PNG nodes below this fraction of total (default: `0.005`). Use `0` to show all nodes. |\n| `--edgefraction` | no | Hide PNG edges below this fraction of total (default: `0.001`). Use `0` to show all edges. |\n\n### CLI exit codes — act on errors\n\n| Code | Meaning | What to do |\n|------|---------|------------|\n| 0 | Success | Read the PNG path from output |\n| 1 | Argument error | Fix the CLI invocation |\n| 2 | snforge/scarb failed | Check compilation errors, test failures |\n| 3 | Trace file not found | Test must PASS to produce a trace. Check test name matches exactly. |\n| 4 | cairo-profiler failed | Check trace JSON is valid |\n| 5 | pprof PNG export failed | Check graphviz is installed (`apt install graphviz`) |\n| 6 | Missing tool | Install the missing tool (see `installation.md`) |\n\n### Output\n\nThe CLI produces two files in `profiles/`:\n```\nprofiles/YY-MM-DD-HH:MM_<package>_<name>_<metric>_<commit>.pb.gz\nprofiles/YY-MM-DD-HH:MM_<package>_<name>_<metric>_<commit>.png\n```\n\nAfter running the CLI, **always read the PNG** to verify the profile shows the expected functions.\n\n## Pitfalls\n\n### Stale trace files\n\n`snfoundry_trace/` keeps old traces. If you change code and re-profile, you MUST re-run `snforge test --save-trace-data` (the CLI does this automatically). **Never build a profile from a trace that predates your code change.**\n\n### Missing functions in the PNG\n\nIf a function doesn't appear in the PNG, it may be below the `--nodefraction` threshold. Use `--nodefraction 0` to show all nodes. You can also check the text output (printed by the CLI) — functions with 0 flat steps but high cumulative steps are wrappers that delegate all work to callees.\n\n### Timestamp mismatch between pb.gz and png\n\nWhen running steps manually, the pb.gz and png may get different timestamps if they cross a minute boundary. The CLI computes the timestamp once so both files always match.\n\n## Manual profiling (advanced)\n\nFor interactive exploration beyond what the CLI provides:\n\n```bash\n# Launch web UI for interactive flame graphs\npprof -http=:8080 profiles/<name>.pb.gz\n\n# View specific sample in terminal\ncairo-profiler view profiles/<name>.pb.gz --sample steps --limit 20\n\n# List available samples\ncairo-profiler view profiles/<name>.pb.gz --list-samples\n```\n\n## Metric reference\n\n| `--metric` | tracked-resource | Samples in profile |\n|------------|------------------|--------------------|\n| `steps` | `cairo-steps` | steps, calls, range check builtin, memory holes, casm size |\n| `rc` | `cairo-steps` | (same as steps, PNG shows range check builtin) |\n| `sierra-gas` | `sierra-gas` | sierra gas, calls, casm size |\n| `l2-gas` | `sierra-gas` | l2 gas (requires `enable-gas = true` + dispatcher pattern) |\n\n## L2 Gas profiling (snforge)\n\nL2 gas requires **all three**:\n\n1. `[cairo] enable-gas = true` in Scarb.toml\n2. `--metric l2-gas` (uses sierra-gas tracking)\n3. **Dispatcher pattern** — profiled code must run inside a deployed contract\n\n```cairo\n#[starknet::interface]\ntrait IBench<TContractState> {\n    fn my_function(self: @TContractState) -> felt252;\n}\n\n#[starknet::contract]\nmod bench { /* ... */ }\n\n// Test using dispatcher\n#[test]\nfn bench_my_function() {\n    let contract = declare(\"bench\").unwrap().contract_class();\n    let (addr, _) = contract.deploy(@array![]).unwrap();\n    let dispatcher = IBenchDispatcher { contract_address: addr };\n    dispatcher.my_function();\n}\n```\n\n**Known limitation:** Syscall execution costs (secp256r1, keccak, etc.) are not attributed in the l2 gas profile. Use snforge test output for total gas; use profiler for relative hotspot analysis within Cairo code.\n"
  },
  {
    "path": ".claude/skills/benchmarking-cairo/installation.md",
    "content": "# Tool Installation for Cairo Benchmarking\n\n## Scarb (Cairo build tool & package manager)\n\n```bash\n# Via asdf (recommended)\nasdf plugin add scarb\nasdf install scarb latest\nasdf global scarb latest\n\n# Or via installer\ncurl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh\n```\n\nVerify: `scarb --version`\n\n## Starknet Foundry (snforge)\n\n```bash\n# Via snfoundryup installer\ncurl -L https://raw.githubusercontent.com/foundry-rs/starknet-foundry/master/scripts/install.sh | sh\nsnfoundryup\n\n# Or via asdf\nasdf plugin add starknet-foundry\nasdf install starknet-foundry latest\nasdf global starknet-foundry latest\n```\n\nVerify: `snforge --version`\n\n## cairo-profiler\n\n```bash\n# Via curl (Linux/macOS)\ncurl -L https://raw.githubusercontent.com/software-mansion/cairo-profiler/main/scripts/install.sh | sh\n\n# Or via asdf\nasdf plugin add cairo-profiler\nasdf install cairo-profiler latest\nasdf global cairo-profiler latest\n```\n\nVerify: `cairo-profiler --version`\n\nGitHub: https://github.com/software-mansion/cairo-profiler\n\n## pprof (Google profiling visualization)\n\nRequires Go toolchain:\n\n```bash\n# Install Go (if not present)\n# See https://go.dev/doc/install\n\n# Install pprof\ngo install github.com/google/pprof@latest\n```\n\nEnsure `$(go env GOPATH)/bin` is in your `PATH`.\n\nVerify: `pprof -h`\n\n## Graphviz (required by pprof for PNG/SVG/PDF output)\n\n```bash\n# Debian/Ubuntu\nsudo apt-get install graphviz\n\n# macOS\nbrew install graphviz\n\n# Fedora\nsudo dnf install graphviz\n```\n\nVerify: `dot -V`\n"
  },
  {
    "path": ".claude/skills/benchmarking-cairo/profile.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nCairo profiling CLI — deterministic pipeline for generating profiles.\n\nUsage:\n    # snforge mode (run test, build profile, export PNG)\n    python3 profile.py profile \\\n        --mode snforge \\\n        --package falcon \\\n        --test test_ntt_zknox_vs_felt252 \\\n        --name ntt-zknox-reduced \\\n        --metric steps\n\n    # scarb execute mode\n    python3 profile.py profile \\\n        --mode scarb \\\n        --package falcon \\\n        --executable bench_ntt \\\n        --args-file tests/data/ntt_input_512.json \\\n        --name ntt-felt252 \\\n        --metric steps\n\nExit codes:\n    0  Success\n    1  Argument error\n    2  snforge/scarb execution failed\n    3  Trace file not found after execution\n    4  cairo-profiler build failed\n    5  pprof PNG export failed\n    6  Missing external tool (snforge, scarb, cairo-profiler, pprof)\n\"\"\"\n\nimport argparse\nimport glob\nimport os\nimport subprocess\nimport sys\nfrom datetime import datetime\nfrom pathlib import Path\n\n# ---------------------------------------------------------------------------\n# Helpers\n# ---------------------------------------------------------------------------\n\n\ndef _check_tool(name: str) -> str:\n    \"\"\"Return path to tool or exit with code 6.\"\"\"\n    import shutil\n\n    path = shutil.which(name)\n    if path is None:\n        _fail(6, f\"Required tool '{name}' not found on PATH. See installation.md.\")\n    return path\n\n\ndef _fail(code: int, msg: str) -> None:\n    \"\"\"Print error and exit.\"\"\"\n    print(f\"ERROR [{code}]: {msg}\", file=sys.stderr)\n    sys.exit(code)\n\n\ndef _run(\n    cmd: list[str], cwd: str | None = None, timeout: int = 600\n) -> subprocess.CompletedProcess:\n    \"\"\"Run a command, printing it first. Returns CompletedProcess.\"\"\"\n    print(f\"  $ {' '.join(cmd)}\")\n    return subprocess.run(cmd, cwd=cwd, timeout=timeout, capture_output=False)\n\n\ndef _git_short_hash(repo_root: str) -> str:\n    \"\"\"Return short git hash or 'unknown'.\"\"\"\n    try:\n        result = subprocess.run(\n            [\"git\", \"rev-parse\", \"--short\", \"HEAD\"],\n            cwd=repo_root,\n            capture_output=True,\n            text=True,\n            timeout=5,\n        )\n        return result.stdout.strip() if result.returncode == 0 else \"unknown\"\n    except Exception:\n        return \"unknown\"\n\n\ndef _profile_filename(\n    output_dir: str, package: str, name: str, metric: str, commit: str, ext: str\n) -> str:\n    \"\"\"Generate deterministic profile filename.\"\"\"\n    ts = datetime.now().strftime(\"%y-%m-%d-%H:%M\")\n    return os.path.join(output_dir, f\"{ts}_{package}_{name}_{metric}_{commit}.{ext}\")\n\n\n# ---------------------------------------------------------------------------\n# Metric → sample mapping\n# ---------------------------------------------------------------------------\n\nMETRIC_CONFIG = {\n    \"steps\": {\n        \"tracked_resource\": \"cairo-steps\",\n        \"sample_name\": \"steps\",\n        \"pprof_sample_index\": \"steps\",\n    },\n    \"rc\": {\n        \"tracked_resource\": \"cairo-steps\",\n        \"sample_name\": \"range check builtin\",\n        \"pprof_sample_index\": \"range_check_builtin\",\n    },\n    \"sierra-gas\": {\n        \"tracked_resource\": \"sierra-gas\",\n        \"sample_name\": \"sierra gas\",\n        \"pprof_sample_index\": \"sierra_gas\",\n    },\n    \"l2-gas\": {\n        \"tracked_resource\": \"sierra-gas\",\n        \"sample_name\": \"l2 gas\",\n        \"pprof_sample_index\": \"l2_gas\",\n    },\n}\n\n\n# ---------------------------------------------------------------------------\n# Pipeline steps\n# ---------------------------------------------------------------------------\n\n\ndef _find_package_dir(repo_root: str, package: str) -> str:\n    \"\"\"Resolve package directory from workspace.\"\"\"\n    pkg_dir = os.path.join(repo_root, \"packages\", package)\n    if os.path.isdir(pkg_dir) and os.path.isfile(os.path.join(pkg_dir, \"Scarb.toml\")):\n        return pkg_dir\n    # Maybe it's a top-level package\n    if os.path.isfile(os.path.join(repo_root, \"Scarb.toml\")):\n        return repo_root\n    _fail(\n        1,\n        f\"Cannot find package '{package}'. Looked in packages/{package}/ and repo root.\",\n    )\n    return \"\"  # unreachable\n\n\ndef _step_snforge(pkg_dir: str, test_filter: str, tracked_resource: str) -> None:\n    \"\"\"Run snforge test with trace generation.\"\"\"\n    _check_tool(\"snforge\")\n    print(\n        f\"\\n[1/4] Running snforge test (filter: {test_filter}, resource: {tracked_resource})\"\n    )\n    result = _run(\n        [\n            \"snforge\",\n            \"test\",\n            test_filter,\n            \"--save-trace-data\",\n            \"--tracked-resource\",\n            tracked_resource,\n        ],\n        cwd=pkg_dir,\n        timeout=600,\n    )\n    if result.returncode != 0:\n        _fail(2, f\"snforge test failed with exit code {result.returncode}\")\n\n\ndef _step_scarb(pkg_dir: str, executable: str, args_file: str) -> None:\n    \"\"\"Run scarb execute with trace generation.\"\"\"\n    _check_tool(\"scarb\")\n    print(f\"\\n[1/4] Running scarb execute (executable: {executable})\")\n    cmd = [\n        \"scarb\",\n        \"execute\",\n        \"--executable-name\",\n        executable,\n        \"--print-resource-usage\",\n        \"--save-profiler-trace-data\",\n    ]\n    if args_file:\n        cmd.extend([\"--arguments-file\", args_file])\n    result = _run(cmd, cwd=pkg_dir, timeout=600)\n    if result.returncode != 0:\n        _fail(2, f\"scarb execute failed with exit code {result.returncode}\")\n\n\ndef _find_trace_snforge(pkg_dir: str, test_filter: str) -> str:\n    \"\"\"Find the trace JSON generated by snforge.\"\"\"\n    trace_dir = os.path.join(pkg_dir, \"snfoundry_trace\")\n    if not os.path.isdir(trace_dir):\n        # In workspace setups, snforge may create trace in a member subdir.\n        # Search for snfoundry_trace under pkg_dir.\n        for root, dirs, _files in os.walk(pkg_dir):\n            if \"snfoundry_trace\" in dirs:\n                trace_dir = os.path.join(root, \"snfoundry_trace\")\n                break\n        else:\n            _fail(\n                3,\n                f\"Trace directory not found: {os.path.join(pkg_dir, 'snfoundry_trace')}\\n\"\n                f\"  Also searched subdirectories of {pkg_dir}\\n\"\n                f\"  Did snforge run successfully? Check that the test passed.\",\n            )\n\n    # snforge names traces like: <package>_<test_module>_<test_name>.json\n    # It replaces \"::\" with \"_\" in filenames, so normalize the filter.\n    filter_normalized = test_filter.replace(\"::\", \"_\")\n    pattern = os.path.join(trace_dir, f\"*{filter_normalized}*.json\")\n    matches = sorted(glob.glob(pattern), key=os.path.getmtime, reverse=True)\n    if not matches:\n        # Also try the original filter in case naming convention differs\n        pattern = os.path.join(trace_dir, f\"*{test_filter}*.json\")\n        matches = sorted(glob.glob(pattern), key=os.path.getmtime, reverse=True)\n\n    if not matches:\n        # List what IS there for debugging\n        all_traces = glob.glob(os.path.join(trace_dir, \"*.json\"))\n        available = (\n            \"\\n  \".join(os.path.basename(f) for f in all_traces)\n            if all_traces\n            else \"(none)\"\n        )\n        _fail(\n            3,\n            f\"No trace file matching '*{test_filter}*' in {trace_dir}/\\n\"\n            f\"  Available traces:\\n  {available}\\n\"\n            f\"  Hint: The test must PASS to generate a trace. Failing/filtered tests produce no trace.\",\n        )\n\n    if len(matches) > 1:\n        print(f\"  Warning: Multiple traces match '{test_filter}', using most recent:\")\n        for m in matches:\n            print(f\"    {os.path.basename(m)}\")\n\n    trace = matches[0]\n    print(f\"  Trace: {os.path.basename(trace)}\")\n    return trace\n\n\ndef _find_trace_scarb(pkg_dir: str, package: str) -> str:\n    \"\"\"Find the trace JSON generated by scarb execute.\"\"\"\n    # Standard location: target/execute/<package>/execution1/cairo_profiler_trace.json\n    trace = os.path.join(\n        pkg_dir, \"target\", \"execute\", package, \"execution1\", \"cairo_profiler_trace.json\"\n    )\n    if not os.path.isfile(trace):\n        _fail(\n            3,\n            f\"Trace file not found: {trace}\\n\"\n            f\"  Expected at: target/execute/{package}/execution1/cairo_profiler_trace.json\\n\"\n            f\"  Did scarb execute succeed? Check --save-profiler-trace-data was used.\",\n        )\n    print(f\"  Trace: {trace}\")\n    return trace\n\n\ndef _step_build_profile(trace_path: str, output_path: str) -> None:\n    \"\"\"Build pprof profile from trace JSON.\"\"\"\n    _check_tool(\"cairo-profiler\")\n    print(f\"\\n[3/4] Building profile: {os.path.basename(output_path)}\")\n    result = _run(\n        [\n            \"cairo-profiler\",\n            \"build-profile\",\n            trace_path,\n            \"--show-libfuncs\",\n            \"--output-path\",\n            output_path,\n        ]\n    )\n    if result.returncode != 0:\n        _fail(\n            4,\n            f\"cairo-profiler build-profile failed with exit code {result.returncode}\\n\"\n            f\"  Trace: {trace_path}\",\n        )\n    if not os.path.isfile(output_path):\n        _fail(4, f\"cairo-profiler completed but output file not found: {output_path}\")\n\n\ndef _step_view_profile(profile_path: str, sample_name: str) -> None:\n    \"\"\"Print top-20 functions by the chosen sample.\"\"\"\n    print(f\"\\n  Top functions by {sample_name}:\")\n    _run(\n        [\n            \"cairo-profiler\",\n            \"view\",\n            profile_path,\n            \"--sample\",\n            sample_name,\n            \"--limit\",\n            \"20\",\n        ]\n    )\n\n\ndef _step_export_png(\n    profile_path: str,\n    png_path: str,\n    pprof_sample_index: str,\n    nodefraction: float = 0.005,\n    edgefraction: float = 0.001,\n) -> None:\n    \"\"\"Export PNG call graph via pprof.\"\"\"\n    _check_tool(\"pprof\")\n    print(f\"\\n[4/4] Exporting PNG: {os.path.basename(png_path)}\")\n    result = _run(\n        [\n            \"pprof\",\n            \"-png\",\n            f\"-sample_index={pprof_sample_index}\",\n            f\"-nodefraction={nodefraction}\",\n            f\"-edgefraction={edgefraction}\",\n            \"-output\",\n            png_path,\n            profile_path,\n        ]\n    )\n    if result.returncode != 0:\n        _fail(\n            5,\n            f\"pprof PNG export failed with exit code {result.returncode}\\n\"\n            f\"  Profile: {profile_path}\\n\"\n            f\"  Hint: Is graphviz (dot) installed? Run: apt install graphviz\",\n        )\n    if not os.path.isfile(png_path):\n        _fail(5, f\"pprof completed but PNG not found: {png_path}\")\n\n\n# ---------------------------------------------------------------------------\n# Main\n# ---------------------------------------------------------------------------\n\n\ndef build_parser() -> argparse.ArgumentParser:\n    parser = argparse.ArgumentParser(\n        prog=\"profile.py\",\n        description=\"Cairo profiling CLI — run tests, build profiles, export PNGs.\",\n    )\n    sub = parser.add_subparsers(dest=\"command\")\n\n    p = sub.add_parser(\"profile\", help=\"Full profiling pipeline\")\n    p.add_argument(\n        \"--mode\",\n        required=True,\n        choices=[\"snforge\", \"scarb\"],\n        help=\"Execution mode: snforge (test) or scarb (executable)\",\n    )\n    p.add_argument(\"--package\", required=True, help=\"Scarb package name (e.g. falcon)\")\n    p.add_argument(\n        \"--name\",\n        required=True,\n        help=\"Human-friendly profile name (e.g. ntt-zknox-reduced)\",\n    )\n    p.add_argument(\n        \"--metric\",\n        default=\"steps\",\n        choices=list(METRIC_CONFIG.keys()),\n        help=\"Metric to profile (default: steps)\",\n    )\n    p.add_argument(\n        \"--output\", default=\"profiles\", help=\"Output directory (default: profiles/)\"\n    )\n\n    # snforge-specific\n    p.add_argument(\n        \"--test\",\n        default=None,\n        help=\"[snforge] Test filter (e.g. test_ntt_zknox_vs_felt252)\",\n    )\n\n    # scarb-specific\n    p.add_argument(\"--executable\", default=None, help=\"[scarb] Executable name\")\n    p.add_argument(\"--args-file\", default=None, help=\"[scarb] Arguments file path\")\n\n    # pprof display options\n    p.add_argument(\n        \"--nodefraction\",\n        type=float,\n        default=0.005,\n        help=\"Hide nodes below this fraction of total (default: 0.005). Use 0 to show all.\",\n    )\n    p.add_argument(\n        \"--edgefraction\",\n        type=float,\n        default=0.001,\n        help=\"Hide edges below this fraction of total (default: 0.001). Use 0 to show all.\",\n    )\n\n    return parser\n\n\ndef main() -> int:\n    parser = build_parser()\n    args = parser.parse_args()\n\n    if args.command != \"profile\":\n        parser.print_help()\n        return 1\n\n    # Validate mode-specific args\n    if args.mode == \"snforge\" and not args.test:\n        _fail(\n            1,\n            \"--test is required for snforge mode.\\n\"\n            \"  Example: --test test_ntt_zknox_vs_felt252\",\n        )\n    if args.mode == \"scarb\" and not args.executable:\n        _fail(\n            1,\n            \"--executable is required for scarb mode.\\n\"\n            \"  Example: --executable bench_ntt\",\n        )\n\n    # Resolve paths\n    repo_root = _find_repo_root()\n    pkg_dir = _find_package_dir(repo_root, args.package)\n    output_dir = os.path.join(repo_root, args.output)\n    os.makedirs(output_dir, exist_ok=True)\n\n    commit = _git_short_hash(repo_root)\n    metric_cfg = METRIC_CONFIG[args.metric]\n\n    # Generate output filenames\n    pb_path = _profile_filename(\n        output_dir, args.package, args.name, args.metric, commit, \"pb.gz\"\n    )\n    png_path = _profile_filename(\n        output_dir, args.package, args.name, args.metric, commit, \"png\"\n    )\n\n    print(f\"Cairo Profiling Pipeline\")\n    print(f\"  Mode:    {args.mode}\")\n    print(f\"  Package: {args.package} ({pkg_dir})\")\n    print(f\"  Name:    {args.name}\")\n    print(f\"  Metric:  {args.metric} (sample: {metric_cfg['sample_name']})\")\n    print(f\"  Commit:  {commit}\")\n    print(f\"  Output:  {os.path.basename(pb_path)}\")\n    sys.stdout.flush()\n\n    # Step 1: Run test/executable\n    if args.mode == \"snforge\":\n        _step_snforge(pkg_dir, args.test, metric_cfg[\"tracked_resource\"])\n    else:\n        _step_scarb(pkg_dir, args.executable, args.args_file)\n\n    # Step 2: Find trace\n    print(f\"\\n[2/4] Locating trace file\")\n    if args.mode == \"snforge\":\n        trace_path = _find_trace_snforge(pkg_dir, args.test)\n    else:\n        trace_path = _find_trace_scarb(pkg_dir, args.package)\n\n    # Step 3: Build profile\n    _step_build_profile(trace_path, pb_path)\n    _step_view_profile(pb_path, metric_cfg[\"sample_name\"])\n\n    # Step 4: Export PNG\n    _step_export_png(\n        pb_path,\n        png_path,\n        metric_cfg[\"pprof_sample_index\"],\n        nodefraction=args.nodefraction,\n        edgefraction=args.edgefraction,\n    )\n\n    # Summary\n    print(f\"\\n{'='*60}\")\n    print(f\"Profile: {pb_path}\")\n    print(f\"PNG:     {png_path}\")\n    print(f\"{'='*60}\")\n\n    return 0\n\n\ndef _find_repo_root() -> str:\n    \"\"\"Walk up from cwd to find the git repo root.\"\"\"\n    path = Path.cwd()\n    while path != path.parent:\n        if (path / \".git\").exists():\n            return str(path)\n        path = path.parent\n    # Fallback to cwd\n    return str(Path.cwd())\n\n\nif __name__ == \"__main__\":\n    sys.exit(main())\n"
  },
  {
    "path": ".claude/skills/cairo-coding/SKILL.md",
    "content": "---\nname: cairo-coding\ndescription: Use when writing or optimizing Cairo functions — fixing slow loops, expensive arithmetic, integer splitting or limb assembly, modular reduction, storage slot packing, or BoundedInt type bounds\n---\n\n# Coding Cairo\n\nRules and patterns for writing efficient Cairo code. Sourced from audit findings and production profiling.\n\n## When to Use\n\n- Implementing arithmetic (modular, parity checks, quotient/remainder)\n- Optimizing loops (slow iteration, repeated `.len()` calls, index-based access)\n- Splitting or assembling integer limbs (u256 → u128, u32s → u128, felt252 → u96)\n- Packing struct fields into storage slots\n- Using `BoundedInt` for zero-overhead arithmetic with compile-time bounds\n- Choosing integer types (u128 vs u256, BoundedInt vs native types)\n\n**Not for:** Profiling/benchmarking (use benchmarking-cairo)\n\n## Quick Reference — All Rules\n\n| # | Rule | Instead of | Use |\n|---|------|-----------|-----|\n| 1 | Combined quotient+remainder | `x / m` + `x % m` | `DivRem::div_rem(x, m)` |\n| 2 | Cheap loop conditions | `while i < n` | `while i != n` |\n| 3 | Constant powers of 2 | `2_u32.pow(k)` | `match`-based lookup table |\n| 4 | Pointer-based iteration | `*data.at(i)` in index loop | `pop_front` / `for` / `multi_pop_front` |\n| 5 | Cache array length | `.len()` in loop condition | `let n = data.len();` before loop |\n| 6 | Pointer-based slicing | Manual loop extraction | `span.slice(start, length)` |\n| 7 | Cheap parity/halving | `index & 1`, `index / 2` | `DivRem::div_rem(index, 2)` |\n| 8 | Smallest integer type | `u256` when range < 2^128 | `u128` (type encodes constraint) |\n| 9 | Storage slot packing | One slot per field | `StorePacking` trait |\n| 10 | BoundedInt for limbs | Bitwise ops / raw u128 math | `bounded_int::{div_rem, mul, add}` |\n| 11 | Fast 2-input Poseidon | `poseidon_hash_span([x,y])` | `hades_permutation(x, y, 2)` |\n| 12 | Bulk felt252→BoundedInt | `downcast` / `try_into` (4 steps) | `u128s_from_felt252` + `upcast` (2 steps) |\n\n## Always / Never Rules\n\n### 1. Always use `DivRem::div_rem` — never separate `%` and `/`\n\nCairo computes quotient and remainder in a single operation. Using both `%` and `/` on the same value doubles the cost.\n\n```cairo\n// BAD\nlet q = x / m;\nlet r = x % m;\n\n// GOOD\nlet (q, r) = DivRem::div_rem(x, m);\n```\n\n### 2. Never use `<` or `>` in while loop conditions — use `!=`\n\nEquality checks are cheaper than comparisons in Cairo.\n\n```cairo\n// BAD\nwhile i < n { ... i += 1; }\n\n// GOOD\nwhile i != n { ... i += 1; }\n```\n\n### 3. Never compute `2^k` with `pow()` — use a lookup table\n\n`u32::pow()` is expensive. Use a `match` lookup for known ranges.\n\n```cairo\n// BAD\nlet p = 2_u32.pow(depth.into());\n\n// GOOD — match-based lookup\nfn pow2(n: u32) -> u32 {\n    match n {\n        0 => 1, 1 => 2, 2 => 4, 3 => 8, 4 => 16, 5 => 32,\n        6 => 64, 7 => 128, 8 => 256, 9 => 512, 10 => 1024,\n        // extend as needed\n        _ => core::panic_with_felt252('pow2 out of range'),\n    }\n}\n```\n\n### 4. Always iterate arrays with `pop_front` / `for` / `multi_pop_front` — never index-loop\n\nIndex-based access (`array.at(i)`) is more expensive than pointer-based iteration.\n\n```cairo\n// BAD\nlet mut i = 0;\nwhile i != data.len() {\n    let val = *data.at(i);\n    i += 1;\n}\n\n// GOOD — pop_front\nwhile let Option::Some(val) = data.pop_front() { ... }\n\n// GOOD — for loop (equivalent)\nfor val in data { ... }\n\n// GOOD — batch iteration\nwhile let Option::Some(chunk) = data.multi_pop_front::<4>() { ... }\n```\n\n### 5. Never call `.len()` inside a loop condition — cache it\n\n`.len()` recomputes every iteration. Store it once.\n\n```cairo\n// BAD\nwhile i != data.len() { ... i += 1; }\n\n// GOOD\nlet n = data.len();\nwhile i != n { ... i += 1; }\n```\n\n### 6. Always use `span.slice()` instead of manual loop extraction\n\n`slice()` manipulates pointers directly — no element-by-element copying.\n\n```cairo\n// BAD\nlet mut result: Array<felt252> = array![];\nlet mut i = 0;\nwhile i != length {\n    result.append(*data.at(start + i));\n    i += 1;\n}\n\n// GOOD\nlet result = data.slice(start, length);\n```\n\n### 7. Always use `DivRem` for parity checks — never use bitwise ops\n\nBitwise AND is more expensive than `div_rem` in Cairo. Use `DivRem::div_rem(x, 2)` to get both the halved value and parity in one operation.\n\n```cairo\n// BAD\nlet is_odd = (index & 1) == 1;\nindex = index / 2;\n\n// GOOD\nlet (q, r) = DivRem::div_rem(index, 2);\nif r == 1 { /* odd branch */ }\nindex = q;\n```\n\n### 8. Always use the smallest integer type that fits the value range\n\n`u128` instead of `u256` when the range is known. Adds clarity, prevents intermediate overflow.\n\n```cairo\n// BAD — u256 for a value known to be < 2^128\nfn deposit(value: u256) { assert(value < MAX_U128, '...'); ... }\n\n// GOOD — type encodes the constraint\nfn deposit(value: u128) { ... }\n```\n\n### 9. Always use `StorePacking` to pack small fields into one storage slot\n\nMultiple small fields (basis points, flags, bounded amounts) can share a single `felt252` slot.\n\n```cairo\nuse starknet::storage_access::StorePacking;\n\nconst POW_2_128: felt252 = 0x100000000000000000000000000000000;\n\nimpl MyStorePacking of StorePacking<MyStruct, felt252> {\n    fn pack(value: MyStruct) -> felt252 {\n        value.amount.into() + value.fee_bps.into() * POW_2_128\n    }\n    fn unpack(value: felt252) -> MyStruct {\n        let u256 { low, high } = value.into();\n        MyStruct { amount: low, fee_bps: high.try_into().unwrap() }\n    }\n}\n```\n\n### 10. Always use BoundedInt for byte cutting, limb assembly, and type conversions\n\nNever use bitwise ops (`&`, `|`, shifts) or raw `u128`/`u256` arithmetic for splitting or combining integer limbs. Use `bounded_int::div_rem` to extract parts and `bounded_int::mul` + `bounded_int::add` to assemble them. BoundedInt tracks bounds at compile time, eliminating overflow checks.\n\n**Assembling limbs** (e.g., 4 x u32 → u128):\n\n```cairo\n// BAD — direct u128 arithmetic (28,340 gas)\nfn u32s_to_u128(d0: u32, d1: u32, d2: u32, d3: u32) -> u128 {\n    d0.into() + d1.into() * POW_2_32 + d2.into() * POW_2_64 + d3.into() * POW_2_96\n}\n\n// GOOD — BoundedInt (13,840 gas, 2x faster)\nfn u32s_to_u128(d0: u32, d1: u32, d2: u32, d3: u32) -> u128 {\n    let d0_bi: u32_bi = upcast(d0);\n    let d1_bi: u32_bi = upcast(d1);\n    let d2_bi: u32_bi = upcast(d2);\n    let d3_bi: u32_bi = upcast(d3);\n    let r: u128_bi = add(add(add(d0_bi, mul(d1_bi, POW_32_UI)), mul(d2_bi, POW_64_UI)), mul(d3_bi, POW_96_UI));\n    upcast(r)\n}\n```\n\n**Splitting values** (e.g., felt252 → two u96 limbs):\n\n```cairo\n// GOOD — div_rem to split, mul+add to reassemble\nfn felt252_to_two_u96(value: felt252) -> (u96, u96) {\n    match u128s_from_felt252(value) {\n        U128sFromFelt252Result::Narrow(low) => {\n            let (hi32, lo96) = bounded_int::div_rem(low, NZ_POW96_TYPED);\n            (lo96, upcast(hi32))\n        },\n        U128sFromFelt252Result::Wide((high, low)) => {\n            let (lo_hi32, lo96) = bounded_int::div_rem(low, NZ_POW96_TYPED);\n            let hi64: BoundedInt<0, { POW64 - 1 }> = downcast(high).unwrap();\n            (lo96, bounded_int::add(bounded_int::mul(hi64, POW32_TYPED), lo_hi32))\n        },\n    }\n}\n```\n\n**Extracting bits** (e.g., building a 4-bit selector):\n\n```cairo\n// GOOD — div_rem by 2 extracts LSB, quotient is right-shifted value\nlet (qu1, bit0) = bounded_int::div_rem(u1, TWO_NZ);  // bit0 in {0,1}\nlet (qu2, bit1) = bounded_int::div_rem(u2, TWO_NZ);\nlet selector = add(bit0, mul(bit1, TWO_UI));  // selector in {0..3}\n```\n\nSee [garaga/selectors.cairo](https://github.com/keep-starknet-strange/garaga/blob/main/src/src/ec/selectors.cairo) and [cairo-perfs-snippets](https://github.com/feltroidprime/cairo-perfs-snippets) for production examples.\n\n## Code Quality\n\n- **DRY:** Extract repeated validation into helper functions. If two functions validate-then-write the same struct, extract a shared `_set_config()`.\n- **`scarb fmt`:** Run before every commit.\n- **`.tool-versions`:** Pin Scarb and Starknet Foundry versions with ASDF for reproducible builds.\n- **Keep dependencies updated:** Newer Scarb/Foundry versions include gas optimizations and compiler improvements.\n\n---\n\n## BoundedInt Optimization\n\n`BoundedInt<MIN, MAX>` encodes value constraints in the type system, eliminating runtime overflow checks. Use the CLI tool to compute bounds — do NOT calculate manually.\n\n### Critical Architecture Decision: Avoid Downcast\n\n**The #1 optimization pitfall:** Converting between `u16`/`u32`/`u64` and `BoundedInt` at function boundaries.\n\n#### The Problem\n\nIf your functions take `u16` and return `u16`, you must:\n1. `downcast` input to `BoundedInt` (expensive — requires range check)\n2. Do bounded arithmetic (cheap)\n3. `upcast` result back to `u16` (cheap but wasteful)\n\nThe `downcast` operation adds a range check that **dominates the savings** from bounded arithmetic. In profiling:\n- `downcast`: 161,280 steps (18.86%)\n- `bounded_int_div_rem`: 204,288 steps (23.89%)\n- Total bounded approach: worse than original!\n\n#### The Solution: BoundedInt Throughout\n\n**Use `BoundedInt` types as function inputs AND outputs.** This eliminates downcast entirely.\n\n```cairo\n// BAD: Converts at every call (downcast overhead kills performance)\npub fn add_mod(a: u16, b: u16) -> u16 {\n    let a: Zq = downcast(a).expect('overflow');  // EXPENSIVE\n    let b: Zq = downcast(b).expect('overflow');  // EXPENSIVE\n    let sum: ZqSum = add(a, b);\n    let (_q, rem) = bounded_int_div_rem(sum, nz_q);\n    upcast(rem)\n}\n\n// GOOD: BoundedInt in, BoundedInt out (no downcast)\npub fn add_mod(a: Zq, b: Zq) -> Zq {\n    let sum: ZqSum = add(a, b);\n    let (_q, rem) = bounded_int_div_rem(sum, nz_q);\n    rem\n}\n```\n\n#### Refactoring Strategy\n\nWhen optimizing existing code:\n1. **Identify the hot path** — profile to find which functions use modular arithmetic heavily\n2. **Change signatures** — update function inputs/outputs to use `BoundedInt` types\n3. **Propagate types outward** — callers must also use `BoundedInt`\n4. **Downcast only at boundaries** — convert from u16/u32 only at system entry points (e.g., deserialization)\n\n#### Type Conversion Rules\n\n| From | To | Operation | Cost |\n|------|-----|-----------|------|\n| `u16` | `BoundedInt<0, 65535>` | `upcast` | Free (superset) |\n| `u16` | `BoundedInt<0, 12288>` | `downcast` | **Expensive** (range check) |\n| `BoundedInt<0, 12288>` | `u16` | `upcast` | Free (subset) |\n| `BoundedInt<A, B>` | `BoundedInt<C, D>` where [A,B] ⊆ [C,D] | `upcast` | Free |\n| `BoundedInt<A, B>` | `BoundedInt<C, D>` where [A,B] ⊄ [C,D] | `downcast` | **Expensive** |\n\n**Key insight:** `upcast` only works when target range is a **superset** of source range. You cannot upcast `u32` to `BoundedInt<0, 150994944>` because `u32` max (4294967295) > 150994944.\n\n### Prerequisites\n\n```toml\n# Scarb.toml\n[dependencies]\ncorelib_imports = \"0.1.3\"\n```\n\n```cairo\n// CORRECT imports — copy exactly\nuse corelib_imports::bounded_int::{\n    BoundedInt, upcast, downcast, bounded_int_div_rem,\n    AddHelper, MulHelper, DivRemHelper, UnitInt,\n};\nuse corelib_imports::bounded_int::bounded_int::{SubHelper, add, sub, mul};\n```\n\n### Copy-Paste Template\n\nWorking example for modular arithmetic mod 100:\n\n```cairo\nuse corelib_imports::bounded_int::{\n    BoundedInt, upcast, downcast, bounded_int_div_rem,\n    AddHelper, MulHelper, DivRemHelper, UnitInt,\n};\nuse corelib_imports::bounded_int::bounded_int::{SubHelper, add, sub, mul};\n\ntype Val = BoundedInt<0, 99>;           // [0, 99]\ntype ValSum = BoundedInt<0, 198>;       // [0, 198]\ntype ValConst = UnitInt<100>;           // singleton {100}\n\nimpl AddValImpl of AddHelper<Val, Val> {\n    type Result = ValSum;\n}\n\nimpl DivRemValImpl of DivRemHelper<ValSum, ValConst> {\n    type DivT = BoundedInt<0, 1>;\n    type RemT = Val;\n}\n\nfn add_mod_100(a: Val, b: Val) -> Val {\n    let sum: ValSum = add(a, b);\n    let nz_100: NonZero<ValConst> = 100;\n    let (_q, rem) = bounded_int_div_rem(sum, nz_100);\n    rem\n}\n```\n\n### CLI Tool\n\nUse `bounded_int_calc.py` in this skill directory. **Always use CLI — never calculate manually.**\n\n```bash\n# Addition: [a_lo, a_hi] + [b_lo, b_hi]\npython3 bounded_int_calc.py add 0 12288 0 12288\n# -> BoundedInt<0, 24576>\n\n# Subtraction: [a_lo, a_hi] - [b_lo, b_hi]\npython3 bounded_int_calc.py sub 0 12288 0 12288\n# -> BoundedInt<-12288, 12288>\n\n# Multiplication\npython3 bounded_int_calc.py mul 0 12288 0 12288\n# -> BoundedInt<0, 150994944>\n\n# Division: quotient and remainder bounds\npython3 bounded_int_calc.py div 0 24576 12289 12289\n# -> DivT: BoundedInt<0, 1>, RemT: BoundedInt<0, 12288>\n\n# Custom impl name\npython3 bounded_int_calc.py mul 0 12288 0 12288 --name MulZqImpl\n```\n\n### BoundedInt Bounds Quick Reference\n\n| Operation | Formula |\n|-----------|---------|\n| Add | `[a_lo + b_lo, a_hi + b_hi]` |\n| Sub | `[a_lo - b_hi, a_hi - b_lo]` |\n| Mul (unsigned) | `[a_lo * b_lo, a_hi * b_hi]` |\n| Div quotient | `[a_lo / b_hi, a_hi / b_lo]` |\n| Div remainder | `[0, b_hi - 1]` |\n\n### Negative Dividends: SHIFT Pattern\n\n`bounded_int_div_rem` doesn't support negative lower bounds. When a subtraction produces a negative-bounded result that needs reduction, add a multiple of the modulus first:\n\n```cairo\n// sub_mod: (a - b) mod Q via SHIFT\npub fn sub_mod(a: Zq, b: Zq) -> Zq {\n    let a_plus_q: BoundedInt<12289, 24577> = add(a, Q_CONST);  // shift by +Q\n    let diff: BoundedInt<1, 24577> = sub(a_plus_q, b);           // now non-negative\n    let (_q, rem) = bounded_int_div_rem(diff, nz_q());\n    rem\n}\n\n// fused_sub_mul_mod: a - (b*c) mod Q via large SHIFT\n// OFFSET = 12288 * Q = 151007232 (smallest multiple of Q >= max product)\npub fn fused_sub_mul_mod(a: Zq, b: Zq, c: Zq) -> Zq {\n    let prod: ZqProd = mul(b, c);\n    let a_offset: BoundedInt<151007232, 151019520> = add(a, OFFSET_CONST);\n    let diff: BoundedInt<12288, 151019520> = sub(a_offset, prod);\n    let (_q, rem) = bounded_int_div_rem(diff, nz_q());\n    rem\n}\n```\n\nRule: SHIFT = `ceil(|min_possible_value| / modulus) * modulus`. Adding SHIFT preserves the result mod Q (since SHIFT ≡ 0 mod Q) while making all values non-negative.\n\n### felt252 → BoundedInt: Prefer u128 Decomposition Over Downcast\n\n`u128s_from_felt252` is a native VM operation (2 steps/call). `downcast` (used by `try_into()`) performs a range check (4 steps/call). When converting many felt252 values to BoundedInt, decompose to u128 first, then upcast to `BoundedInt<0, u128_max>`. You lose tight compile-time bounds but save 2 steps per conversion — significant at scale.\n\nBenchmarked per-call costs (isolated loop, 512 iterations, varying input):\n\n| Libfunc | Steps/call | Source |\n|---------|-----------|--------|\n| `u128s_from_felt252` | 2 | 1,024 flat / 512 calls |\n| `downcast` (try_into) | 4 | 2,048 flat / 512 calls |\n| `bounded_int_div_rem` | 7 | 3,584 flat / 512 calls (same both) |\n\n| Approach | Per-conversion cost | Sierra bloat | Notes |\n|----------|-------------------|--------------|-------|\n| `try_into().unwrap()` | 4 steps (downcast) | **O(N^2)** — panic drops all live vars | Never in unrolled code |\n| `match try_into() { Some/None }` | 4 steps (downcast) | OK | No panic but pays downcast cost |\n| `u128s_from_felt252` + `upcast` | 2 steps | OK | **Preferred** — native decomposition |\n\nEnd-to-end impact (512-point NTT verify): u128 approach saves 1,024 steps / ~1.6M L2 gas (4.4%) vs match-based downcast.\n\n```cairo\nuse corelib_imports::integer::{U128sFromFelt252Result, u128s_from_felt252};\n\ntype U128AsBounded = BoundedInt<0, 340282366920938463463374607431768211455>;\n\n#[inline(always)]\nfn felt252_as_u128(x: felt252) -> u128 {\n    match u128s_from_felt252(x) {\n        U128sFromFelt252Result::Narrow(low) => low,\n        U128sFromFelt252Result::Wide((_, low)) => low,\n    }\n}\n\n// Convert felt252 to BoundedInt via u128 (no range-check overhead)\nlet r: U128AsBounded = upcast(felt252_as_u128(value + SHIFT));\nlet (_, r) = bounded_int_div_rem(r, NZ_Q);  // DivRemHelper<U128AsBounded, QConst>\n```\n\n**Trade-off:** `U128AsBounded` has max=2^128-1 instead of the tight shifted bound. The `DivRemHelper` quotient type is wider, but `bounded_int_div_rem` cost is the same. Fine for most cases — only matters if downstream code needs tight bounds on the quotient.\n\n**When to use which:**\n- **Bulk conversions (generated/unrolled code):** Always `u128s_from_felt252` + `upcast`\n- **One-off boundary conversions (deserialization):** `downcast` is fine — per-call overhead negligible\n- **Never in hot paths:** `try_into().unwrap()` — panic path causes quadratic Sierra bloat\n\n### Common BoundedInt Mistakes\n\n- **Downcast at every function call** — the biggest performance killer. Use `BoundedInt` types throughout, not just inside arithmetic functions.\n- **Trying to upcast to a narrower type** — `upcast(val: u32)` to `BoundedInt<0, 150994944>` fails because u32 max > 150994944.\n- **Wrong imports** — use exact imports from Prerequisites section above.\n- **Wrong subtraction bounds** — it's `[a_lo - b_hi, a_hi - b_lo]`, NOT `[a_lo - b_lo, a_hi - b_hi]`.\n- **Negative dividend in `bounded_int_div_rem`** — div_rem doesn't support negative lower bounds. Add a SHIFT (multiple of modulus) before reducing. See SHIFT pattern above.\n- **Missing intermediate types** — always annotate: `let sum: ZqSum = add(a, b);`\n- **Division quotient off-by-one** — integer division floors: `24576 / 12289 = 1`, not 2.\n- **Using `UnitInt` vs `BoundedInt` for constants** — use `UnitInt<N>` for singleton constants like divisors.\n- **Using `div_rem` vs `bounded_int_div_rem`** — the function is `bounded_int_div_rem`, not `div_rem`.\n- **Bounds exceed u128::max** — BoundedInt bounds are hard-capped at 2^128. Larger values crash the Sierra specializer: 'Provided generic argument is unsupported.'\n- **Using `downcast`/`try_into` for bulk felt252 → BoundedInt** — use `u128s_from_felt252` + `upcast` instead (2 vs 4 steps/call). See \"felt252 → BoundedInt\" section above.\n"
  },
  {
    "path": ".claude/skills/cairo-coding/bounded_int_calc.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nBounded Integer Implementation Calculator\n\nComputes exact type bounds for Cairo BoundedInt helper trait implementations.\nOutputs ready-to-paste Cairo code.\n\nUsage:\n    python3 bounded_int_calc.py add <a_lo> <a_hi> <b_lo> <b_hi> [--name NAME]\n    python3 bounded_int_calc.py sub <a_lo> <a_hi> <b_lo> <b_hi> [--name NAME]\n    python3 bounded_int_calc.py mul <a_lo> <a_hi> <b_lo> <b_hi> [--name NAME]\n    python3 bounded_int_calc.py div <a_lo> <a_hi> <b_lo> <b_hi> [--name NAME]\n\"\"\"\n\nimport argparse\nimport sys\n\n# felt252 prime (for validation)\nFELT252_PRIME = 0x800000000000011000000000000000000000000000000000000000000000001\n\n\ndef validate_felt252(value: int, name: str) -> None:\n    \"\"\"Warn if value exceeds felt252 range.\"\"\"\n    if value < 0:\n        # Negative values are represented as P - |value| in felt252\n        if abs(value) >= FELT252_PRIME:\n            print(f\"WARNING: {name} = {value} exceeds felt252 range!\", file=sys.stderr)\n    elif value >= FELT252_PRIME:\n        print(f\"WARNING: {name} = {value} exceeds felt252 range!\", file=sys.stderr)\n\n\ndef format_bound(value: int) -> str:\n    \"\"\"Format a bound value, handling negatives.\"\"\"\n    if value < 0:\n        return str(value)\n    return str(value)\n\n\ndef calc_add(a_lo: int, a_hi: int, b_lo: int, b_hi: int) -> tuple[int, int]:\n    \"\"\"Calculate addition bounds: [a_lo + b_lo, a_hi + b_hi]\"\"\"\n    result_lo = a_lo + b_lo\n    result_hi = a_hi + b_hi\n    return result_lo, result_hi\n\n\ndef calc_sub(a_lo: int, a_hi: int, b_lo: int, b_hi: int) -> tuple[int, int]:\n    \"\"\"Calculate subtraction bounds: [a_lo - b_hi, a_hi - b_lo]\"\"\"\n    result_lo = a_lo - b_hi\n    result_hi = a_hi - b_lo\n    return result_lo, result_hi\n\n\ndef calc_mul(a_lo: int, a_hi: int, b_lo: int, b_hi: int) -> tuple[int, int]:\n    \"\"\"\n    Calculate multiplication bounds.\n    For unsigned: [a_lo * b_lo, a_hi * b_hi]\n    For signed/mixed: evaluate all corners.\n    \"\"\"\n    corners = [\n        a_lo * b_lo,\n        a_lo * b_hi,\n        a_hi * b_lo,\n        a_hi * b_hi,\n    ]\n    return min(corners), max(corners)\n\n\ndef calc_div(\n    a_lo: int, a_hi: int, b_lo: int, b_hi: int\n) -> tuple[tuple[int, int], tuple[int, int]]:\n    \"\"\"\n    Calculate division bounds.\n    Quotient: [a_lo // b_hi, a_hi // b_lo]\n    Remainder: [0, b_hi - 1]\n\n    Note: Cairo's bounded_int_div_rem requires non-negative dividends.\n    \"\"\"\n    if b_lo <= 0:\n        print(\"ERROR: Divisor lower bound must be positive!\", file=sys.stderr)\n        sys.exit(1)\n\n    if a_lo < 0:\n        print(\n            \"ERROR: Dividend lower bound must be non-negative! Cairo's bounded_int_div_rem does not support negative dividends.\",\n            file=sys.stderr,\n        )\n        sys.exit(1)\n\n    quot_lo = a_lo // b_hi\n    quot_hi = a_hi // b_lo\n    rem_lo = 0\n    rem_hi = b_hi - 1\n\n    return (quot_lo, quot_hi), (rem_lo, rem_hi)\n\n\ndef generate_add_impl(a_lo: int, a_hi: int, b_lo: int, b_hi: int, name: str) -> str:\n    result_lo, result_hi = calc_add(a_lo, a_hi, b_lo, b_hi)\n\n    validate_felt252(result_lo, \"Result min\")\n    validate_felt252(result_hi, \"Result max\")\n\n    return f\"\"\"impl {name} of AddHelper<BoundedInt<{format_bound(a_lo)}, {format_bound(a_hi)}>, BoundedInt<{format_bound(b_lo)}, {format_bound(b_hi)}>> {{\n    type Result = BoundedInt<{format_bound(result_lo)}, {format_bound(result_hi)}>;\n}}\"\"\"\n\n\ndef generate_sub_impl(a_lo: int, a_hi: int, b_lo: int, b_hi: int, name: str) -> str:\n    result_lo, result_hi = calc_sub(a_lo, a_hi, b_lo, b_hi)\n\n    validate_felt252(result_lo, \"Result min\")\n    validate_felt252(result_hi, \"Result max\")\n\n    return f\"\"\"impl {name} of SubHelper<BoundedInt<{format_bound(a_lo)}, {format_bound(a_hi)}>, BoundedInt<{format_bound(b_lo)}, {format_bound(b_hi)}>> {{\n    type Result = BoundedInt<{format_bound(result_lo)}, {format_bound(result_hi)}>;\n}}\"\"\"\n\n\ndef generate_mul_impl(a_lo: int, a_hi: int, b_lo: int, b_hi: int, name: str) -> str:\n    result_lo, result_hi = calc_mul(a_lo, a_hi, b_lo, b_hi)\n\n    validate_felt252(result_lo, \"Result min\")\n    validate_felt252(result_hi, \"Result max\")\n\n    return f\"\"\"impl {name} of MulHelper<BoundedInt<{format_bound(a_lo)}, {format_bound(a_hi)}>, BoundedInt<{format_bound(b_lo)}, {format_bound(b_hi)}>> {{\n    type Result = BoundedInt<{format_bound(result_lo)}, {format_bound(result_hi)}>;\n}}\"\"\"\n\n\ndef generate_div_impl(a_lo: int, a_hi: int, b_lo: int, b_hi: int, name: str) -> str:\n    (quot_lo, quot_hi), (rem_lo, rem_hi) = calc_div(a_lo, a_hi, b_lo, b_hi)\n\n    validate_felt252(quot_lo, \"Quotient min\")\n    validate_felt252(quot_hi, \"Quotient max\")\n    validate_felt252(rem_lo, \"Remainder min\")\n    validate_felt252(rem_hi, \"Remainder max\")\n\n    return f\"\"\"impl {name} of DivRemHelper<BoundedInt<{format_bound(a_lo)}, {format_bound(a_hi)}>, BoundedInt<{format_bound(b_lo)}, {format_bound(b_hi)}>> {{\n    type DivT = BoundedInt<{format_bound(quot_lo)}, {format_bound(quot_hi)}>;\n    type RemT = BoundedInt<{format_bound(rem_lo)}, {format_bound(rem_hi)}>;\n}}\"\"\"\n\n\ndef main():\n    parser = argparse.ArgumentParser(\n        description=\"Calculate BoundedInt helper trait implementations\",\n        formatter_class=argparse.RawDescriptionHelpFormatter,\n        epilog=\"\"\"\nExamples:\n    # Addition: [0, 12288] + [0, 12288]\n    python3 bounded_int_calc.py add 0 12288 0 12288\n\n    # Subtraction: [0, 12288] - [0, 12288]\n    python3 bounded_int_calc.py sub 0 12288 0 12288\n\n    # Multiplication: [0, 12288] * [0, 12288]\n    python3 bounded_int_calc.py mul 0 12288 0 12288\n\n    # Division: [128, 255] / [3, 8]\n    python3 bounded_int_calc.py div 128 255 3 8\n\n    # Custom impl name\n    python3 bounded_int_calc.py mul 0 12288 0 12288 --name Zq12289MulHelper\n        \"\"\",\n    )\n\n    subparsers = parser.add_subparsers(dest=\"operation\", required=True)\n\n    # Add command\n    add_parser = subparsers.add_parser(\n        \"add\", help=\"Addition: [a_lo, a_hi] + [b_lo, b_hi]\"\n    )\n    add_parser.add_argument(\"a_lo\", type=int, help=\"Lower bound of first operand\")\n    add_parser.add_argument(\"a_hi\", type=int, help=\"Upper bound of first operand\")\n    add_parser.add_argument(\"b_lo\", type=int, help=\"Lower bound of second operand\")\n    add_parser.add_argument(\"b_hi\", type=int, help=\"Upper bound of second operand\")\n    add_parser.add_argument(\"--name\", default=\"AddImpl\", help=\"Name for the impl\")\n\n    # Sub command\n    sub_parser = subparsers.add_parser(\n        \"sub\", help=\"Subtraction: [a_lo, a_hi] - [b_lo, b_hi]\"\n    )\n    sub_parser.add_argument(\"a_lo\", type=int, help=\"Lower bound of first operand\")\n    sub_parser.add_argument(\"a_hi\", type=int, help=\"Upper bound of first operand\")\n    sub_parser.add_argument(\"b_lo\", type=int, help=\"Lower bound of second operand\")\n    sub_parser.add_argument(\"b_hi\", type=int, help=\"Upper bound of second operand\")\n    sub_parser.add_argument(\"--name\", default=\"SubImpl\", help=\"Name for the impl\")\n\n    # Mul command\n    mul_parser = subparsers.add_parser(\n        \"mul\", help=\"Multiplication: [a_lo, a_hi] * [b_lo, b_hi]\"\n    )\n    mul_parser.add_argument(\"a_lo\", type=int, help=\"Lower bound of first operand\")\n    mul_parser.add_argument(\"a_hi\", type=int, help=\"Upper bound of first operand\")\n    mul_parser.add_argument(\"b_lo\", type=int, help=\"Lower bound of second operand\")\n    mul_parser.add_argument(\"b_hi\", type=int, help=\"Upper bound of second operand\")\n    mul_parser.add_argument(\"--name\", default=\"MulImpl\", help=\"Name for the impl\")\n\n    # Div command\n    div_parser = subparsers.add_parser(\n        \"div\", help=\"Division: [a_lo, a_hi] / [b_lo, b_hi]\"\n    )\n    div_parser.add_argument(\"a_lo\", type=int, help=\"Lower bound of dividend\")\n    div_parser.add_argument(\"a_hi\", type=int, help=\"Upper bound of dividend\")\n    div_parser.add_argument(\n        \"b_lo\", type=int, help=\"Lower bound of divisor (must be > 0)\"\n    )\n    div_parser.add_argument(\"b_hi\", type=int, help=\"Upper bound of divisor\")\n    div_parser.add_argument(\"--name\", default=\"DivRemImpl\", help=\"Name for the impl\")\n\n    args = parser.parse_args()\n\n    if args.operation == \"add\":\n        print(generate_add_impl(args.a_lo, args.a_hi, args.b_lo, args.b_hi, args.name))\n    elif args.operation == \"sub\":\n        print(generate_sub_impl(args.a_lo, args.a_hi, args.b_lo, args.b_hi, args.name))\n    elif args.operation == \"mul\":\n        print(generate_mul_impl(args.a_lo, args.a_hi, args.b_lo, args.b_hi, args.name))\n    elif args.operation == \"div\":\n        print(generate_div_impl(args.a_lo, args.a_hi, args.b_lo, args.b_hi, args.name))\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": ".github/.all-contributorsrc",
    "content": "{\n  \"projectName\": \"garaga\",\n  \"projectOwner\": \"keep-starknet-strange\",\n  \"repoType\": \"github\",\n  \"repoHost\": \"https://github.com\",\n  \"files\": [\n    \"README.md\"\n  ],\n  \"imageSize\": 100,\n  \"commit\": true,\n  \"commitConvention\": \"gitmoji\",\n  \"contributors\": [\n    {\n      \"login\": \"feltroidprime\",\n      \"name\": \"Feltroid Prime\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/96737978?v=4\",\n      \"profile\": \"https://github.com/feltroidprime\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"abdelhamidbakhta\",\n      \"name\": \"Abdel @ StarkWare \",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/45264458?v=4\",\n      \"profile\": \"https://github.com/abdelhamidbakhta\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"tekkac\",\n      \"name\": \"Tarik K.\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/98529704?v=4\",\n      \"profile\": \"https://github.com/tekkac\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"bacharif\",\n      \"name\": \"Bachir Arif\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/22233193?v=4\",\n      \"profile\": \"https://github.com/bacharif\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"rdubois-crypto\",\n      \"name\": \"Renaud Dubois\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/103030189?v=4\",\n      \"profile\": \"https://github.com/rdubois-crypto\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"raugfer\",\n      \"name\": \"Rodrigo Ferreira\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/725060?v=4\",\n      \"profile\": \"https://raugfer.com/\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"luiz-lvj\",\n      \"name\": \"Luiz Vasconcelos Júnior\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/64055364?v=4\",\n      \"profile\": \"https://github.com/luiz-lvj\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"shramee\",\n      \"name\": \"Shramee Srivastav\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/11048263?v=4\",\n      \"profile\": \"http://shramee.me/\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"akinovak\",\n      \"name\": \"Andrija Novakovic\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/28649205?v=4\",\n      \"profile\": \"https://github.com/akinovak\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Liam-Eagen\",\n      \"name\": \"Liam Eagen\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/5618692?v=4\",\n      \"profile\": \"https://github.com/Liam-Eagen\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"petscheit\",\n      \"name\": \"Paul Etscheit\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/10947187?v=4\",\n      \"profile\": \"https://github.com/petscheit\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"stefanMadzharov\",\n      \"name\": \"stefanMadzharov\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/83451593?v=4\",\n      \"profile\": \"https://github.com/stefanMadzharov\",\n      \"contributions\": [\n        \"code\"\n      ]\n    }\n  ],\n  \"contributorsPerLine\": 7,\n  \"linkToUsage\": true\n}\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "content": "* @abdelhamidbakhta @feltroidprime\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/01_BUG_REPORT.md",
    "content": "---\nname: Bug Report\nabout: Create a report to help Garaga to improve\ntitle: \"bug: \"\nlabels: \"bug\"\nassignees: \"\"\n---\n\n# Bug Report\n\n**Garaga version:**\n\n<!-- Please specify commit or tag version. -->\n\n**Current behavior:**\n\n<!-- Describe how the bug manifests. -->\n\n**Expected behavior:**\n\n<!-- Describe what you expect the behavior to be without the bug. -->\n\n**Steps to reproduce:**\n\n<!-- Explain the steps required to duplicate the issue, especially if you are able to provide a sample application. -->\n\n**Related code:**\n\n<!-- If you are able to illustrate the bug or feature request with an example, please provide it here. -->\n\n```\ninsert short code snippets here\n```\n\n**Other information:**\n\n<!-- List any other information that is relevant to your issue. Related issues, suggestions on how to fix, Stack Overflow links, forum links, etc. -->\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/02_FEATURE_REQUEST.md",
    "content": "---\nname: Feature Request\nabout: Suggest an idea for this project\ntitle: \"feat: \"\nlabels: \"enhancement\"\nassignees: \"\"\n---\n\n# Feature Request\n\n**Describe the Feature Request**\n\n<!-- A clear and concise description of what the feature request is. Please include if your feature request is related to a problem. -->\n\n**Describe Preferred Solution**\n\n<!-- A clear and concise description of what you want to happen. -->\n\n**Describe Alternatives**\n\n<!-- A clear and concise description of any alternative solutions or features you've considered. -->\n\n**Related Code**\n\n<!-- If you are able to illustrate the bug or feature request with an example, please provide it here. -->\n\n**Additional Context**\n\n<!-- List any other information that is relevant to your issue. Stack traces, related issues, suggestions on how to add, use case, Stack Overflow links, forum links, screenshots, OS if applicable, etc. -->\n\n**If the feature request is approved, would you be willing to submit a PR?**\n_(Help can be provided if you need assistance submitting a PR)_\n\n- [ ] Yes\n- [ ] No\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/03_CODEBASE_IMPROVEMENT.md",
    "content": "---\nname: Codebase improvement\nabout: Provide your feedback for the existing codebase. Suggest a better solution for algorithms, development tools, etc.\ntitle: \"dev: \"\nlabels: \"enhancement\"\nassignees: \"\"\n---\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "---\nblank_issues_enabled: false\ncontact_links:\n  - name: Garaga Community Support\n    url: https://github.com/keep-starknet-strange/garaga/discussions\n    about: Please ask and answer questions here.\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "<!--- Please provide a general summary of your changes in the title above -->\n\n# Pull Request type\n\n<!-- Please try to limit your pull request to one type; submit multiple pull requests if needed. -->\n\nPlease check the type of change your PR introduces:\n\n- [ ] Bugfix\n- [ ] Feature\n- [ ] Code style update (formatting, renaming)\n- [ ] Refactoring (no functional changes, no API changes)\n- [ ] Build-related changes\n- [ ] Documentation content changes\n- [ ] Testing\n- [ ] Other (please describe):\n\n# What is the current behavior?\n\n<!-- Please describe the current behavior that you are modifying, or link to a relevant issue. -->\n\nIssue Number: N/A\n\n# What is the new behavior?\n\n<!-- Please describe the behavior or changes that are being added by this PR. -->\n\n-\n-\n-\n\n# Does this introduce a breaking change?\n\n- [ ] Yes\n- [ ] No\n\n<!-- If this does introduce a breaking change, please describe the impact and migration path for existing applications below. -->\n\n# Other information\n\n<!-- Any other information that is important to this PR, such as screenshots of how the component looks before and after the change. -->\n"
  },
  {
    "path": ".github/labels.yml",
    "content": "---\n- name: \"breaking-change\"\n  color: ee0701\n  description: \"A change that changes the API or breaks backward compatibility for users.\"\n- name: \"bugfix\"\n  color: ee0701\n  description: \"Inconsistencies or issues which will cause a problem for users or implementors.\"\n- name: \"documentation\"\n  color: 0052cc\n  description: \"Solely about the documentation of the project.\"\n- name: \"enhancement\"\n  color: 1d76db\n  description: \"Enhancement of the code, not introducing new features.\"\n- name: \"refactor\"\n  color: 1d76db\n  description: \"Updating the code with simpler, easier to understand or more efficient syntax or methods, but not introducing new features.\"\n- name: \"performance\"\n  color: 1d76db\n  description: \"Improving performance of the project, not introducing new features.\"\n- name: \"new-feature\"\n  color: 0e8a16\n  description: \"New features or options.\"\n- name: \"maintenance\"\n  color: 2af79e\n  description: \"Generic maintenance tasks.\"\n- name: \"ci\"\n  color: 1d76db\n  description: \"Work that improves the continuous integration.\"\n- name: \"dependencies\"\n  color: 1d76db\n  description: \"Change in project dependencies.\"\n\n- name: \"in-progress\"\n  color: fbca04\n  description: \"Issue is currently being worked on by a developer.\"\n- name: \"stale\"\n  color: fef2c0\n  description: \"No activity for quite some time.\"\n- name: \"no-stale\"\n  color: fef2c0\n  description: \"This is exempt from the stale bot.\"\n\n- name: \"security\"\n  color: ee0701\n  description: \"Addressing a vulnerability or security risk in this project.\"\n- name: \"incomplete\"\n  color: fef2c0\n  description: \"Missing information.\"\n- name: \"invalid\"\n  color: fef2c0\n  description: \"This is off-topic, spam, or otherwise doesn't apply to this project.\"\n\n- name: \"beginner-friendly\"\n  color: 0e8a16\n  description: \"Good first issue for people wanting to contribute to this project.\"\n- name: \"help-wanted\"\n  color: 0e8a16\n  description: \"We need some extra helping hands or expertise in order to resolve this!\"\n\n- name: \"priority-critical\"\n  color: ee0701\n  description: \"Must be addressed as soon as possible.\"\n- name: \"priority-high\"\n  color: b60205\n  description: \"After critical issues are fixed, these should be dealt with before any further issues.\"\n- name: \"priority-medium\"\n  color: 0e8a16\n  description: \"This issue may be useful, and needs some attention.\"\n- name: \"priority-low\"\n  color: e4ea8a\n  description: \"Nice addition, maybe... someday...\"\n\n- name: \"major\"\n  color: b60205\n  description: \"This PR causes a major bump in the version number.\"\n- name: \"minor\"\n  color: 0e8a16\n  description: \"This PR causes a minor bump in the version number.\"\n"
  },
  {
    "path": ".github/scripts/declare_maintained_contracts.py",
    "content": "import asyncio\nimport os\nfrom enum import Enum\nfrom pathlib import Path\n\nimport dotenv\nfrom starknet_py.net.account.account import Account\nfrom starknet_py.net.full_node_client import FullNodeClient\nfrom starknet_py.net.models import StarknetChainId\nfrom starknet_py.net.signer.stark_curve_signer import KeyPair\n\nfrom garaga.hints.io import to_int\nfrom garaga.starknet.cli.smart_contract_project import SmartContractProject\nfrom garaga.starknet.tests_and_calldata_generators.drand_calldata import (\n    generate_drand_decrypt_constants,\n)\n\ndotenv.load_dotenv(\".secrets\")\n\nCONTRACTS_PATH = Path(\"src/contracts\")\n\n\nclass Network(Enum):\n    SEPOLIA = \"sepolia\"\n    MAINNET = \"mainnet\"\n\n    def to_starknet_chain_id(self):\n        if self == Network.SEPOLIA:\n            return StarknetChainId.SEPOLIA\n        elif self == Network.MAINNET:\n            return StarknetChainId.MAINNET\n        else:\n            raise ValueError(f\"Unknown network: {self}\")\n\n\ndef get_account(network: Network):\n    rpc_url = os.getenv(f\"{network.value.upper()}_RPC_URL\")\n    account_address = os.getenv(f\"{network.value.upper()}_ACCOUNT_ADDRESS\")\n    account_private_key = os.getenv(f\"{network.value.upper()}_ACCOUNT_PRIVATE_KEY\")\n\n    client = FullNodeClient(node_url=rpc_url)\n    account = Account(\n        address=account_address,\n        client=client,\n        key_pair=KeyPair.from_private_key(to_int(account_private_key)),\n        chain=network.to_starknet_chain_id(),\n    )\n    return account\n\n\nasync def declare_contract_from_path(path: Path, network: Network):\n    contract = SmartContractProject(smart_contract_folder=path)\n    account = get_account(network)\n    await contract.declare_class_hash(account=account)\n\n\nasync def declare_contract_from_path_both_networks(path: Path):\n    await declare_contract_from_path(path, Network.SEPOLIA)\n    await asyncio.sleep(0.3)\n    await declare_contract_from_path(path, Network.MAINNET)\n\n\nasync def main():\n    await declare_contract_from_path_both_networks(CONTRACTS_PATH / \"universal_ecip\")\n    await asyncio.sleep(0.3)\n    await declare_contract_from_path_both_networks(CONTRACTS_PATH / \"drand_quicknet\")\n    await asyncio.sleep(0.3)\n\n    # Generate verifier class hash into decrypt constants, then declare\n    verifier = SmartContractProject(\n        smart_contract_folder=CONTRACTS_PATH / \"drand_quicknet\"\n    )\n    generate_drand_decrypt_constants(\n        verifier.get_sierra_class_hash(),\n        CONTRACTS_PATH / \"drand_decrypt_quicknet\",\n    )\n    await declare_contract_from_path_both_networks(\n        CONTRACTS_PATH / \"drand_decrypt_quicknet\"\n    )\n    await asyncio.sleep(0.3)\n\n    await declare_contract_from_path_both_networks(\n        CONTRACTS_PATH / \"autogenerated\" / \"risc0_verifier_bn254\"\n    )\n    await asyncio.sleep(0.3)\n    await declare_contract_from_path_both_networks(\n        CONTRACTS_PATH / \"autogenerated\" / \"sp1_verifier_bn254\"\n    )\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n"
  },
  {
    "path": ".github/scripts/verify_contracts.py",
    "content": "import ast\nimport asyncio\nimport os\nimport sys\nfrom enum import Enum\nfrom pathlib import Path\n\nimport dotenv\nfrom starknet_py.net.full_node_client import FullNodeClient\n\nimport garaga.hints.io as io\nfrom garaga.starknet.cli.smart_contract_project import SmartContractProject\n\ndotenv.load_dotenv(\".secrets\")\n\n\nclass Network(Enum):\n    SEPOLIA = \"sepolia\"\n    MAINNET = \"mainnet\"\n\n    def get_rpc_url(self):\n        return os.getenv(f\"{self.value.upper()}_RPC_URL\")\n\n\ndef get_class_hash_from_generator():\n    try:\n        with open(\n            \"hydra/garaga/starknet/groth16_contract_generator/generator.py\", \"r\"\n        ) as f:\n            tree = ast.parse(f.read())\n            for node in ast.walk(tree):\n                if isinstance(node, ast.Assign) and len(node.targets) == 1:\n                    if getattr(node.targets[0], \"id\", None) == \"ECIP_OPS_CLASS_HASH\":\n                        return hex(node.value.value)\n        raise ValueError(\"ECIP_OPS_CLASS_HASH not found in generator.py\")\n    except Exception as e:\n        print(f\"Error parsing generator.py: {str(e)}\", file=sys.stderr)\n        sys.exit(1)\n\n\nasync def verify_network(network: Network, class_hash: str):\n    class_hash = io.to_hex_str(class_hash)\n    print(f\"\\nVerifying class hash {class_hash} on {network.value}...\")\n    rpc_url = network.get_rpc_url()\n\n    print(f\"Using RPC URL: {rpc_url}\")\n    client = FullNodeClient(rpc_url)\n    try:\n        result = await client.get_class_by_hash(class_hash)\n        if not result:\n            print(f\"Error: Contract not declared on {network.value}\", file=sys.stderr)\n            sys.exit(1)\n        print(f\"✓ Contract verified on {network.value}\")\n    except Exception as e:\n        print(f\"Error checking {network.value}: {str(e)}\", file=sys.stderr)\n        sys.exit(1)\n\n\nasync def verify_ecip_contract():\n    class_hash = get_class_hash_from_generator()\n    print(f\"Verifying ECIP contract using class hash: {class_hash}\")\n\n    await verify_network(Network.SEPOLIA, class_hash)\n    await verify_network(Network.MAINNET, class_hash)\n\n    print(\"\\n✓ Contract verified on both networks\")\n\n\nasync def verify_contract_from_path(path: Path):\n    contract = SmartContractProject(smart_contract_folder=path)\n    class_hash = contract.get_sierra_class_hash()\n    print(f\"Verifying contract {path} with class hash {io.to_hex_str(class_hash)}\")\n    await verify_network(Network.SEPOLIA, class_hash)\n    await verify_network(Network.MAINNET, class_hash)\n\n\nif __name__ == \"__main__\":\n    asyncio.run(verify_ecip_contract())\n    asyncio.run(verify_contract_from_path(Path(\"src/contracts/drand_quicknet\")))\n    asyncio.run(verify_contract_from_path(Path(\"src/contracts/drand_decrypt_quicknet\")))\n    asyncio.run(\n        verify_contract_from_path(\n            Path(\"src/contracts/autogenerated/risc0_verifier_bn254\")\n        )\n    )\n    asyncio.run(\n        verify_contract_from_path(\n            Path(\"src/contracts/autogenerated/sp1_verifier_bn254\")\n        )\n    )\n"
  },
  {
    "path": ".github/workflows/cairo.yml",
    "content": "name: Cairo Workflow / publish\n\non:\n  push:\n    branches: [main]\n  pull_request:\n  workflow_dispatch:\n\njobs:\n  pre_job:\n    # continue-on-error: true # Uncomment once integration is finished\n    runs-on: ubuntu-latest\n    # Map a step output to a job output\n    outputs:\n      should_skip: ${{ steps.skip_check.outputs.should_skip }}\n    steps:\n      - id: skip_check\n        uses: fkirc/skip-duplicate-actions@v5\n        with:\n          concurrent_skipping: 'never'\n          paths: '[\"src/**\", \".github/workflows/cairo.yml\"]'\n\n\n  test-cairo:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ubuntu-latest\n    steps:\n      # Checkout the repository\n      - name: Checkout\n        uses: actions/checkout@v3\n      - name: Set up Rust\n        uses: actions-rs/toolchain@v1\n        with:\n          toolchain: stable\n          override: true\n          profile: minimal\n          components: rustfmt\n\n      - name: Setup Starknet Foundry\n        uses: foundry-rs/setup-snfoundry@v4\n      - name: Setup Scarb\n        uses: software-mansion/setup-scarb@v1\n        with:\n          scarb-lock: ./src/Scarb.lock\n\n      - name: Run scarb fmt check in src\n        working-directory: src/\n        run: scarb fmt --check\n      - name: Run scarb test in src\n        working-directory: src/\n        run: scarb test\n\n      - name: Run scarb fmt check in mutator_set\n        working-directory: src/contracts/mutator_set\n        run: scarb fmt --check\n      - name: Run snforge test in mutator_set\n        working-directory: src/contracts/mutator_set\n        run: snforge test\n      - name: Run scarb test for all autogenerated contracts\n        run: ./tools/make/test_contracts.sh\n\n      - name: Run scarb fmt check in risc0_sample_app\n        working-directory: src/contracts/risc0_sample_app/fibonacci_sequencer\n        run: scarb fmt --check\n      # Conflicting with the e2e test : we don't want to dedeploy the verifier at each commit.\n      # - name: Run snforge test in risc0_sample_app\n      #   working-directory: src/contracts/risc0_sample_app/fibonacci_sequencer\n      #   run: snforge test\n\n      - name: Publish to Scarb Registry\n        if: startsWith(github.ref, 'refs/tags/')\n        working-directory: src/\n        env:\n          SCARB_REGISTRY_AUTH_TOKEN: ${{ secrets.SCARB_REGISTRY_AUTH_TOKEN }}\n        run: scarb publish\n"
  },
  {
    "path": ".github/workflows/docs-sync.yml",
    "content": "# .github/workflows/docs-sync.yml\n#\n# Keep GitBook docs (docs/gitbook) and source code in sync.\n#  ├─ create-docs-pr  : docs  ➜  main   (PR auto-merges if docs-only)\n#  └─ sync-main-to-docs : main  ➜  docs  (keeps non-docs files identical to main)\n\nname: Documentation Sync\n\npermissions:\n  contents: write        # allow pushing branches / squash-merge\n  pull-requests: write   # allow opening / merging PRs\n  issues: write            # create & apply labels\n\non:\n  push:\n    branches: [ main, docs ]          # run on every push to either branch\ndefaults:\n  run:\n    shell: bash                      # strict mode added in scripts\n\nconcurrency:\n  group: docs-sync-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  #───────────────────────────────────────────────────────────────────────────────\n  #  A. docs ➜ main  – single rolling PR on branch: docs-sync\n  #───────────────────────────────────────────────────────────────────────────────\n  create-docs-pr:\n    if: >-\n      github.event.ref == 'refs/heads/docs' &&\n      ( github.actor == 'gitbook-com[bot]' ||\n        github.actor == 'gitbook-io[bot]'  ||\n        contains(github.event.head_commit.message, '[gitbook]') )\n    runs-on: ubuntu-latest\n\n    steps:\n      # 1️⃣  Check out the latest MAIN in a clean worktree\n      - uses: actions/checkout@v4\n        with:\n          ref: main\n          fetch-depth: 0\n          persist-credentials: false\n\n      - run: |\n          git config user.name  \"GitBook Docs Bot\"\n          git config user.email \"docs-bot@garaga.dev\"\n\n      # 2️⃣  Overlay docs/gitbook from the docs branch\n      - name: Sync docs/gitbook from docs branch\n        run: |\n          set -euo pipefail\n          git fetch --quiet origin docs\n          git checkout origin/docs -- docs/gitbook\n\n          # Exit early if nothing changed (check staged changes since git checkout stages them)\n          if git diff --cached --quiet; then\n            echo \"No documentation changes — skipping PR.\"\n            echo \"SKIP_PR=true\" >>\"$GITHUB_ENV\"\n          fi\n\n      # 3️⃣  Commit the changes (only if any)\n      - name: Commit docs update\n        if: env.SKIP_PR != 'true'\n        run: |\n          set -euo pipefail\n          # Changes are already staged by git checkout, just commit them\n          git commit -m \"📚 Sync docs/gitbook @ ${{ github.sha }}\"\n\n      # 4️⃣  Create / update the rolling PR on branch docs-sync\n      - uses: peter-evans/create-pull-request@v7\n        if: env.SKIP_PR != 'true'\n        id: cpr\n        with:\n          token: ${{ secrets.DOCS_SYNC_PAT }}\n          branch: docs-sync            # ← single, reusable branch\n          base: main\n          title: \"📚 Update documentation from GitBook\"\n          commit-message: \"📚 docs(branch=docs) → main @ ${{ github.sha }}\"\n          labels: documentation,auto-generated\n          delete-branch: true          # auto-delete after you squash-merge\n\n      # 5️⃣  Add an extra label & comment if non-docs files slipped in\n      - name: Flag mixed-content PRs\n        if: env.SKIP_PR != 'true'\n        env:\n          GH_TOKEN: ${{ secrets.DOCS_SYNC_PAT }}\n        run: |\n          set -euo pipefail\n          # If *any* file outside docs/gitbook changed, add label + comment\n          if git diff --name-only origin/main | grep -vqE '^docs/gitbook/'; then\n            gh pr edit \"${{ steps.cpr.outputs.pull-request-number }}\" \\\n              --add-label \"needs-review\"\n            gh pr comment \"${{ steps.cpr.outputs.pull-request-number }}\" \\\n              --body \"⚠️ *Mixed content* – this PR touches files outside \\`docs/gitbook\\`. Please review.\"\n          fi\n\n  #───────────────────────────────────────────────────────────────────────────────\n  #  B.  main ➜ docs  – keep non-docs files identical to main\n  #───────────────────────────────────────────────────────────────────────────────\n  sync-main-to-docs:\n    if: >-\n      github.event.ref == 'refs/heads/main' &&\n      !contains(github.event.head_commit.message, '[gitbook]') &&\n      github.actor != 'gitbook-com[bot]' &&\n      github.actor != 'gitbook-io[bot]'\n    runs-on: ubuntu-latest\n\n    steps:\n      # 1) Check out docs branch (create it if it doesn't exist)\n      - uses: actions/checkout@v4\n        with:\n          ref: docs\n          fetch-depth: 0\n          token: ${{ secrets.DOCS_SYNC_PAT }}\n\n      - name: Configure Git\n        run: |\n          git config user.name  \"GitHub Docs Sync\"\n          git config user.email \"docs-sync@garaga.dev\"\n          git fetch origin main --tags --prune\n\n      # 2) Bring EVERYTHING (including docs/gitbook) up to date with main\n      - name: Sync repo from main\n        run: |\n          set -euo pipefail\n          git fetch origin main --tags --prune\n\n          # Overwrite the working tree with the state of main\n          git checkout origin/main -- .\n\n          # Stage everything and commit only if something changed\n          git add -A\n          if git diff --cached --quiet; then\n            echo \"No updates required – docs branch already matches main.\"\n            exit 0\n          fi\n\n          git commit -m \"🔄 Sync all files from main @ ${{ github.sha }}\"\n\n      # ─── 3) Open (or update) a PR towards docs ─────────────────────────────\n      - uses: peter-evans/create-pull-request@v7\n        id: cpr\n        with:\n          token: ${{ secrets.DOCS_SYNC_PAT }}\n          # the current HEAD contains the commit we just made\n          branch: main-sync-${{ github.sha }}-${{ github.run_id }}\n          base: docs\n          commit-message: \"🔄 Sync non-docs files from main @ ${{ github.sha }}\"\n          title: \"🔄 Sync main → docs (non-docs files)\"\n          body: |\n            This PR keeps the **docs** branch in sync with **main**.\n\n            Source commit: ${{ github.sha }}\n\n            > 🤖 _docs-sync workflow_\n          labels: documentation,auto-generated,auto-merge\n          delete-branch: true\n          draft: false   # open as a normal PR\n\n      # ─── 4) Enable auto-merge; will complete when checks are green ─────────\n      - name: Enable auto-merge\n        if: steps.cpr.outputs.pull-request-number\n        env:\n          GH_TOKEN: ${{ secrets.DOCS_SYNC_PAT }}\n        run: |\n          gh pr merge ${{ steps.cpr.outputs.pull-request-number }} \\\n            --auto --squash --delete-branch --repo \"$GITHUB_REPOSITORY\" || \\\n            echo \"Auto-merge pending required checks.\"\n"
  },
  {
    "path": ".github/workflows/e2e.yml",
    "content": "name: E2E-devnet\n\non:\n  push:\n    branches: [main]\n  pull_request:\n\njobs:\n  pre_job:\n    # continue-on-error: true # Uncomment once integration is finished\n    runs-on: ubuntu-latest\n    # Map a step output to a job output\n    outputs:\n      should_skip: ${{ steps.skip_check.outputs.should_skip }}\n    steps:\n      - id: skip_check\n        uses: fkirc/skip-duplicate-actions@v5\n        with:\n          concurrent_skipping: 'never'\n          paths_ignore: '[\"**/README.md\", \"**/docs/**\"]'\n\n  devnet-test-matrix:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        python-version: ['3.10', '3.14']\n      fail-fast: false\n\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v5\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Set up Rust\n        uses: actions-rs/toolchain@v1\n        with:\n          toolchain: 1.87.0\n          override: true\n          profile: minimal\n      - name: Setup Scarb\n        uses: software-mansion/setup-scarb@v1\n        with:\n          scarb-version: \"2.16.1\"\n      - name: Install dependencies\n        run: make setup\n        env:\n          PYTHON_VERSION: ${{ matrix.python-version }}\n\n      - name: Install devnet\n        run: ./tests/contracts_e2e/install_devnet.sh\n\n      - name: Run tests\n        run: source venv/bin/activate && pytest -n auto -s -x tests/contracts_e2e/e2e_test.py\n\n  # Summary job for branch protection (matrix jobs have version suffix in name)\n  devnet-test:\n    needs: [pre_job, devnet-test-matrix]\n    if: always()\n    runs-on: ubuntu-latest\n    steps:\n      - name: Check matrix job status\n        run: |\n          if [ \"${{ needs.pre_job.outputs.should_skip }}\" == \"true\" ]; then\n            echo \"Tests skipped\"\n            exit 0\n          fi\n          if [ \"${{ needs.devnet-test-matrix.result }}\" != \"success\" ]; then\n            echo \"Matrix tests failed\"\n            exit 1\n          fi\n          echo \"All tests passed\"\n"
  },
  {
    "path": ".github/workflows/hydra.yml",
    "content": "name: Hydra backend test\n\non:\n  push:\n    branches: [main]\n  pull_request:\n\njobs:\n  pre_job:\n    # continue-on-error: true # Uncomment once integration is finished\n    runs-on: ubuntu-latest\n    # Map a step output to a job output\n    outputs:\n      should_skip: ${{ steps.skip_check.outputs.should_skip }}\n    steps:\n      - id: skip_check\n        uses: fkirc/skip-duplicate-actions@v5\n        with:\n          concurrent_skipping: 'never'\n          paths_ignore: '[\"**/README.md\", \"**/docs/**\"]'\n\n\n  test-hydra-matrix:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        python-version: ['3.10', '3.12', '3.14']\n      fail-fast: false\n\n    steps:\n      - name: Set up Rust\n        uses: actions-rs/toolchain@v1\n        with:\n          toolchain: stable\n          override: true\n          profile: minimal\n          components: rustfmt\n\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v5\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Install dependencies\n        run: make setup\n        env:\n          PYTHON_VERSION: ${{ matrix.python-version }}\n\n      - name: Check Black formatting\n        run: source venv/bin/activate && black --check .\n\n      - name: Test garaga_rs\n        run: |\n          source venv/bin/activate\n          (cd tools/garaga_rs && cargo fmt --check && cargo test)\n      - name: Run pytest\n        run: |\n          source venv/bin/activate\n          pytest -n auto\n      - name: Set up Scarb\n        uses: software-mansion/setup-scarb@v1\n        with:\n          scarb-version: \"2.16.1\"\n      - name: Run make rewrite and check for unstaged changes\n        if: matrix.python-version == '3.14'\n        run: |\n          source venv/bin/activate\n          if ! make rewrite; then\n            echo \"Error: 'make rewrite' command failed\"\n            exit 1\n          fi\n          if [[ -n $(git status --porcelain) ]]; then\n            echo \"Error: Unstaged changes detected after running 'make rewrite'\"\n            git status\n            exit 1\n          fi\n      - name: Check bytecode size limits\n        if: matrix.python-version == '3.14'\n        run: |\n          source venv/bin/activate\n          make check-max-log-n\n        continue-on-error: false\n\n  # Summary job for branch protection (matrix jobs have version suffix in name)\n  test-hydra:\n    needs: [pre_job, test-hydra-matrix]\n    if: always()\n    runs-on: ubuntu-latest\n    steps:\n      - name: Check matrix job status\n        run: |\n          if [ \"${{ needs.pre_job.outputs.should_skip }}\" == \"true\" ]; then\n            echo \"Tests skipped\"\n            exit 0\n          fi\n          if [ \"${{ needs.test-hydra-matrix.result }}\" != \"success\" ]; then\n            echo \"Matrix tests failed\"\n            exit 1\n          fi\n          echo \"All tests passed\"\n"
  },
  {
    "path": ".github/workflows/labels.yml",
    "content": "---\nname: Sync labels\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - .github/labels.yml\n\njobs:\n  labels:\n    name: ♻️ Sync labels\n    runs-on: ubuntu-latest\n    steps:\n      - name: ⤵️ Check out code from GitHub\n        uses: actions/checkout@v2\n      - name: 🚀 Run Label Syncer\n        uses: micnncim/action-label-syncer@v1.2.0\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/maturin.yml",
    "content": "name: Maturin\non:\n  push:\n    tags:\n      - '*'\n  workflow_dispatch:\n\npermissions:\n  contents: read\n\njobs:\n  pre_job:\n    # continue-on-error: true # Uncomment once integration is finished\n    runs-on: ubuntu-latest\n    # Map a step output to a job output\n    outputs:\n      should_skip: ${{ steps.skip_check.outputs.should_skip }}\n    steps:\n      - id: skip_check\n        uses: fkirc/skip-duplicate-actions@v5\n        with:\n          concurrent_skipping: 'never'\n          paths_ignore: '[\"**/README.md\", \"**/docs/**\"]'\n\n  linux:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ${{ matrix.platform.runner }}\n    strategy:\n      matrix:\n        platform:\n          - runner: ubuntu-latest\n            target: x86_64\n          - runner: ubuntu-latest\n            target: x86\n          - runner: ubuntu-latest\n            target: aarch64\n          - runner: ubuntu-latest\n            target: armv7\n          - runner: ubuntu-latest\n            target: s390x\n          - runner: ubuntu-latest\n            target: ppc64le\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: |\n            3.10\n            3.11\n            3.12\n            3.13\n            3.14\n      - name: Build wheels\n        uses: PyO3/maturin-action@v1\n        with:\n          target: ${{ matrix.platform.target }}\n          args: --release --out dist --find-interpreter --features python\n          sccache: 'true'\n          manylinux: auto\n      - name: Upload wheels\n        uses: actions/upload-artifact@v4\n        with:\n          name: wheels-linux-${{ matrix.platform.target }}\n          path: dist\n\n  musllinux:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ${{ matrix.platform.runner }}\n    strategy:\n      matrix:\n        platform:\n          - runner: ubuntu-latest\n            target: x86_64\n          - runner: ubuntu-latest\n            target: x86\n          - runner: ubuntu-latest\n            target: aarch64\n          - runner: ubuntu-latest\n            target: armv7\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: |\n            3.10\n            3.11\n            3.12\n            3.13\n            3.14\n      - name: Build wheels\n        uses: PyO3/maturin-action@v1\n        with:\n          target: ${{ matrix.platform.target }}\n          args: --release --out dist --find-interpreter --features python\n          sccache: 'true'\n          manylinux: musllinux_1_2\n      - name: Upload wheels\n        uses: actions/upload-artifact@v4\n        with:\n          name: wheels-musllinux-${{ matrix.platform.target }}\n          path: dist\n\n  windows:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ${{ matrix.platform.runner }}\n    strategy:\n      matrix:\n        platform:\n          - runner: windows-latest\n            target: x64\n          - runner: windows-latest\n            target: x86\n        python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: ${{ matrix.python-version }}\n          architecture: ${{ matrix.platform.target }}\n      - name: Build wheels\n        uses: PyO3/maturin-action@v1\n        with:\n          target: ${{ matrix.platform.target }}\n          args: --release --out dist --features python\n          sccache: 'true'\n      - name: Upload wheels\n        uses: actions/upload-artifact@v4\n        with:\n          name: wheels-windows-${{ matrix.platform.target }}-py${{ matrix.python-version }}\n          path: dist\n\n  macos:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ${{ matrix.platform.runner }}\n    strategy:\n      matrix:\n        platform:\n          - runner: macos-14\n            target: x86_64\n          - runner: macos-14\n            target: aarch64\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: |\n            3.10\n            3.11\n            3.12\n            3.13\n            3.14\n      - name: Build wheels\n        uses: PyO3/maturin-action@v1\n        with:\n          target: ${{ matrix.platform.target }}\n          args: --release --out dist --find-interpreter --features python\n          sccache: 'true'\n      - name: Upload wheels\n        uses: actions/upload-artifact@v4\n        with:\n          name: wheels-macos-${{ matrix.platform.target }}\n          path: dist\n\n  sdist:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - name: Build sdist\n        uses: PyO3/maturin-action@v1\n        with:\n          command: sdist\n          args: --out dist\n      - name: Upload sdist\n        uses: actions/upload-artifact@v4\n        with:\n          name: wheels-sdist\n          path: dist\n\n  release:\n    name: Release\n    runs-on: ubuntu-latest\n    if: \"startsWith(github.ref, 'refs/tags/')\"  # Only run on tag pushes\n    needs: [linux, musllinux, windows, macos, sdist]\n    steps:\n      - uses: actions/checkout@v4\n      - name: Set up Rust\n        uses: actions-rs/toolchain@v1\n        with:\n          toolchain: stable\n          override: true\n          profile: minimal\n          components: rustfmt\n\n      - uses: software-mansion/setup-scarb@v1\n        with:\n          scarb-version: \"2.16.1\"\n      - name: Set up Python 3.10\n        uses: actions/setup-python@v5\n        with:\n          python-version: \"3.10.x\"\n      - name: Install dependencies\n        run: make setup\n      - name: Verify Contract Declaration\n        env:\n          SEPOLIA_RPC_URL: ${{ secrets.SEPOLIA_RPC_URL }}\n          MAINNET_RPC_URL: ${{ secrets.MAINNET_RPC_URL }}\n        run: source venv/bin/activate && python .github/scripts/verify_contracts.py\n      - uses: actions/download-artifact@v4\n      - name: Publish to PyPI\n        uses: PyO3/maturin-action@v1\n        env:\n          MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}\n        with:\n          command: upload\n          args: --non-interactive --skip-existing wheels-*/*\n"
  },
  {
    "path": ".github/workflows/node.yml",
    "content": "name: NODE tests\n\non:\n  push:\n    branches:\n      - main\n      - master\n    tags:\n      - '*'\n  pull_request:\n  workflow_dispatch:\n\njobs:\n  pre_job:\n    # continue-on-error: true # Uncomment once integration is finished\n    runs-on: ubuntu-latest\n    # Map a step output to a job output\n    outputs:\n      should_skip: ${{ steps.skip_check.outputs.should_skip }}\n    steps:\n      - id: skip_check\n        uses: fkirc/skip-duplicate-actions@v5\n        with:\n          concurrent_skipping: 'never'\n          paths: '[\"tools/**\"]'\n\n  npm-test:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    name: NPM Test\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 'lts/*'\n      - name: Run npm test in garaga_ts\n        working-directory: tools/npm/garaga_ts\n        run: |\n          npm ci\n          npm test\n"
  },
  {
    "path": ".github/workflows/setup.yml",
    "content": "name: Test make setup (cross-platform)\n\non:\n  push:\n    branches: [main]\n    paths:\n      - 'tools/make/setup.sh'\n      - '.github/workflows/setup.yml'\n  pull_request:\n    paths:\n      - 'tools/make/setup.sh'\n      - '.github/workflows/setup.yml'\n\njobs:\n  pre_job:\n    runs-on: ubuntu-latest\n    outputs:\n      should_skip: ${{ steps.skip_check.outputs.should_skip }}\n    steps:\n      - id: skip_check\n        uses: fkirc/skip-duplicate-actions@v5\n        with:\n          concurrent_skipping: 'never'\n\n  shellcheck:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - name: Run ShellCheck\n        # SC2016: single-quoted strings intentionally prevent expansion (activate script)\n        # SC1091: sourced files (venv/bin/activate) don't exist at lint time\n        run: shellcheck -s bash -e SC2016,SC1091 tools/make/setup.sh\n\n  test-setup:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        include:\n          - os: ubuntu-latest\n            name: Linux x86_64\n          - os: macos-14\n            name: macOS arm64\n      fail-fast: false\n    name: setup (${{ matrix.name }})\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Set up Rust\n        uses: actions-rs/toolchain@v1\n        with:\n          toolchain: stable\n          override: true\n          profile: minimal\n\n      - name: Run make setup\n        run: make setup\n\n      - name: Verify venv\n        run: |\n          source venv/bin/activate\n          python --version\n\n  test-setup-fedora:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    runs-on: ubuntu-latest\n    container: fedora:latest\n    name: setup (Fedora dnf)\n    steps:\n      - name: Install base tools\n        run: dnf install -y git curl gcc g++ make perl-FindBin\n\n      - uses: actions/checkout@v4\n\n      - name: Mark workspace as safe for git\n        run: git config --global --add safe.directory \"$GITHUB_WORKSPACE\"\n\n      - name: Install Rust\n        run: |\n          curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y\n          echo \"$HOME/.cargo/bin\" >> \"$GITHUB_PATH\"\n\n      - name: Run make setup\n        run: |\n          source \"$HOME/.cargo/env\"\n          make setup\n\n      - name: Verify venv\n        run: |\n          source \"$HOME/.cargo/env\"\n          source venv/bin/activate\n          python --version\n"
  },
  {
    "path": ".github/workflows/wasm.yml",
    "content": "name: WASM npm publish\n\non:\n  push:\n    branches:\n      - main\n      - master\n    tags:\n      - '*'\n  pull_request:\n  workflow_dispatch:\n\njobs:\n  pre_job:\n    # continue-on-error: true # Uncomment once integration is finished\n    runs-on: ubuntu-latest\n    # Map a step output to a job output\n    outputs:\n      should_skip: ${{ steps.skip_check.outputs.should_skip }}\n    steps:\n      - id: skip_check\n        uses: fkirc/skip-duplicate-actions@v5\n        with:\n          concurrent_skipping: 'never'\n          paths: '[\"tools/**\"]'\n\n  test-wasm:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    name: test-wasm\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 'lts/*'\n      - uses: dtolnay/rust-toolchain@stable\n      - run: cargo install wasm-pack\n      - name: Run wasm specific tests\n        working-directory: tools/garaga_rs\n        run: RUSTFLAGS='--cfg getrandom_backend=\"wasm_js\"' wasm-pack test --node --release --no-default-features --features wasm\n\n  build-wasm:\n    needs: pre_job\n    if: needs.pre_job.outputs.should_skip != 'true'\n    name: build-wasm\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - name: Build and check for changes in generated code\n        working-directory: tools/npm/garaga_ts\n        run: |\n          docker compose up --build --exit-code-from app\n          git status --porcelain\n          [[ -z $(git status --porcelain ) ]]\n      - name: Upload package file as artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: npm-package\n          path: tools/npm/garaga_ts/*.tgz\n          if-no-files-found: error\n\n  test-integration:\n    needs: [pre_job, build-wasm]\n    if: needs.pre_job.outputs.should_skip != 'true'\n    name: test-integration\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 'lts/*'\n      - name: Install Puppeteer dependencies\n        run: |\n          sudo apt-get update\n          sudo apt-get install -y \\\n            libnss3 libxss1 libasound2t64 libatk-bridge2.0-0 libatk1.0-0 \\\n            libcups2 libxcomposite1 libxdamage1 libxrandr2 libgbm1 \\\n            libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libgtk-3-0\n      - name: Download package file as artifact\n        uses: actions/download-artifact@v4\n        with:\n          name: npm-package\n          path: tools/npm/garaga_ts\n      - name: Build and tests integration test packages\n        working-directory: tools/npm/integration-test-suite\n        run: |\n          cp ../garaga_ts/garaga-*.tgz garaga.tgz\n          npm i\n          npm run build\n          npx puppeteer browsers install\n          npm run test\n\n  release:\n    name: Release\n    runs-on: ubuntu-latest\n    if: \"startsWith(github.ref, 'refs/tags/')\"  # Only run on tag pushes\n    needs: [build-wasm, test-wasm, test-integration]\n    steps:\n      - uses: actions/checkout@v4\n      - name: Set up Rust\n        uses: actions-rs/toolchain@v1\n        with:\n          toolchain: stable\n          override: true\n          profile: minimal\n          components: rustfmt\n\n      - uses: software-mansion/setup-scarb@v1\n        with:\n          scarb-version: \"2.16.1\"\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: \"3.10\"\n      - name: Install dependencies\n        run: make setup\n      - name: Verify Contract Declaration\n        env:\n          SEPOLIA_RPC_URL: ${{ secrets.SEPOLIA_RPC_URL }}\n          MAINNET_RPC_URL: ${{ secrets.MAINNET_RPC_URL }}\n        run: source venv/bin/activate && python .github/scripts/verify_contracts.py\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 'lts/*'\n          registry-url: 'https://registry.npmjs.org'\n      - name: Download package file as artifact\n        uses: actions/download-artifact@v4\n        with:\n          name: npm-package\n      - name: Publish to npm\n        run: |\n          npm publish --access=public *.tgz\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_API_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "*.json\n!*_input.json\n!*Proof.json\n!frobenius_*.json\n!*test_vectors.json\n__pycache__\nvenv\n*.env\n*profiling*\n*.o\n*.c\n*.so\n*.html\n*.sage.py\n*.idea\n*.secrets\n*.pb.gz\n.cargo/hypothesis/\n*.go\n\ntools/garaga_rs/target/\ntools/make/requirements.txt\n.prev_tests_failed\n\nsrc/cairo/target/\n*target*\nScarb.lock\ntests/contracts_e2e/devnet/*\n\n# Foundry artifacts for Solidity testing\ntools/noir/hello/lib/\ntools/noir/hello/out/\ntools/noir/hello/cache/\ntools/noir/hello/test/\ntools/noir/hello/foundry.toml\n\n!hydra/garaga/starknet/groth16_contract_generator/examples/*.json\n!docs/benchmarks/test_summary.json\n*snfoundry_cache\n!tools/npm/garaga_rs/*.json\n!tools/make/constants.json\n\n# Benchmarks and profiling data\n.cargo/benchmarks/*/\nsrc/profile/\n/profiles/\n**/.snfoundry_trace/**\n\n# Worktrees\n.worktrees/\n.stignore\n.claude/worktrees/\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "repos:\n-   repo: https://github.com/PyCQA/autoflake\n    rev: v2.3.1\n    hooks:\n    -   id: autoflake\n        args: [\"--in-place\", \"--remove-all-unused-imports\"]\n        files: \\.py$\n-   repo: https://github.com/pycqa/isort\n    rev: 5.13.2\n    hooks:\n    -   id: isort\n        args: [\"--profile\", \"black\"]\n        files: \\.py$\n-   repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v4.4.0\n    hooks:\n    -   id: trailing-whitespace\n        exclude: ^tools/npm/garaga_ts/src/wasm/pkg/\n    -   id: end-of-file-fixer\n        exclude: (\\.cairo$|^tools/npm/garaga_ts/src/wasm/pkg/)\n    -   id: check-yaml\n    -   id: check-toml\n-   repo: https://github.com/psf/black\n    rev: 26.1.0\n    hooks:\n    -   id: black\n        args: [\"--target-version\", \"py310\"]\n        files: \\.py$\n-   repo: local\n    hooks:\n    -   id: scarb-fmt\n        name: scarb fmt\n        entry: bash -c 'cd src && scarb fmt'\n        language: system\n        files: \\.cairo$\n        pass_filenames: false\n    -   id: cargo-fmt\n        name: cargo fmt\n        entry: bash -c 'cd tools/garaga_rs && cargo fmt'\n        language: system\n        files: ^tools/garaga_rs/.*\\.rs$\n        pass_filenames: false\n"
  },
  {
    "path": ".secrets.template",
    "content": "SEPOLIA_RPC_URL=\"https://rpc.starknet-testnet.lava.build:443\"\nSEPOLIA_ACCOUNT_PRIVATE_KEY=0x1\nSEPOLIA_ACCOUNT_ADDRESS=0x2\n\nMAINNET_RPC_URL=\"https://\"\nMAINNET_ACCOUNT_PRIVATE_KEY=0x3\nMAINNET_ACCOUNT_ADDRESS=0x4\n"
  },
  {
    "path": ".tool-versions",
    "content": "scarb 2.16.1\nstarknet-foundry 0.57.0\nstarknet-devnet 0.5.1\ncairo-profiler 0.14.0\n"
  },
  {
    "path": "CLAUDE.md",
    "content": "# Garaga\n\n## Project layout\n- `src/` — Cairo contracts and library (Scarb workspace, `snforge test`)\n- `tools/garaga_rs/` — Rust core (`cargo test -p garaga_rs`, `cargo clippy`)\n- `tools/garaga_rs/src/python_bindings/` — PyO3 bindings (`make maturin`)\n- `tools/garaga_rs/src/wasm_bindings.rs` — WASM bindings (`make wasm`, Docker-based)\n- `tools/npm/garaga_ts/` — TypeScript wrappers + WASM pkg\n- `hydra/` — Python calldata builders and helpers\n- `tests/` — E2E and integration tests\n\n## Build commands\n| What | Command |\n|------|---------|\n| Rust tests | `cargo test -p garaga_rs` |\n| Rust lint | `cargo clippy --workspace` |\n| Python bindings | `make maturin` |\n| WASM + TS + npm | `make wasm` (Docker) |\n| Cairo tests | `snforge test -p garaga` |\n| Format | `make fmt` (scarb fmt + cargo fmt) |\n\n## Critical invariants\n\n**Rust/Python parity**: Every calldata builder has both a Python and Rust path via `use_rust` flag. Parity is enforced by pytest asserting `calldata_py == calldata_rs` byte-for-byte. Use `fixed_sigma` or equivalent for determinism.\n\n**WASM regeneration**: After any change to Rust source in `tools/garaga_rs/src/` (except `python_bindings/`) or `Cargo.toml`, run `make wasm` and commit regenerated files in `tools/npm/garaga_ts/src/wasm/pkg/`. CI will fail if out of sync.\n\n**TypeScript coverage**: Every WASM binding needs a typed wrapper in `tools/npm/garaga_ts/src/node/api.ts`, a Jest test, and coverage across all 4 integration suites (Node CJS, Node ESM, Webpack, React).\n\n**E2E tests**: Deploy on starknet-devnet via `SmartContractProject.declare_class_hash()`, generate calldata via Python, invoke contract, assert via `wait_for_acceptance()`.\n\n**Cairo circuits**: Never include unused values in circuit output tuples (`extend_struct_output`) — each output enlarges the circuit's generic tuple and can trigger CASM `Offset overflow` when the tuple exceeds stdlib `CircuitDefinition` bounds. Prefer `#[inline(always)]` on circuit functions and loops over repeated calls to keep AP offsets scoped per iteration.\n"
  },
  {
    "path": "Cargo.toml",
    "content": "[workspace]\nresolver = \"2\"\nmembers = [\n    \"tools/garaga_rs\"\n]\n\n[profile.release]\nlto = true\ndebug = false\nopt-level = 3\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Keep StarkNet Strange\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Makefile",
    "content": "SHELL := /bin/bash\nACTIVATE := source venv/bin/activate &&\n\n.PHONY: build test coverage run run-profile generate-constants profile-test benchmarks update-risc0-class-hash\n\nconstants:\n\t$(ACTIVATE) python tools/make/generate_constants.py\n\nsetup:\n\t./tools/make/setup.sh\n\nbytecode-check:\n\t./tools/make/bytecode_check.sh\n\ncheck-max-log-n:\n\t./tools/make/bytecode_check_max_log_n.sh\n\nrewrite:\n\t$(ACTIVATE) ./tools/make/rewrite.sh\n\nrewrite-no-tests:\n\t$(ACTIVATE) ./tools/make/rewrite.sh no-tests\n\nregen:\n\tcd src/contracts/mutator_set && make regen\n\nupdate-risc0-class-hash:\n\t./tools/make/update_risc0_class_hash.sh\n\nsteps:\n\t./tools/make/steps.sh\n\nfmt:\n\tscarb fmt && cargo fmt\n\n# Profile a specific test and generate performance visualizations\n# Usage: make profile-test [TEST=<test_name_filter>] [JOBS=<parallel_jobs>]\n# Each job takes ~3GB of ram\nDEFAULT_JOBS := 8\n\nprofile-test:\n\t@JOBS_VAL=$${JOBS:-$(DEFAULT_JOBS)}; \\\n\tif [ -z \"$(TEST)\" ]; then \\\n\t\techo \"Running all tests with profiling ($$JOBS_VAL jobs)...\"; \\\n\t\t$(ACTIVATE) python tools/profile_tests.py --all --parallel-jobs $$JOBS_VAL --generate-benchmarks; \\\n\telse \\\n\t\techo \"Running tests with filter: $(TEST) ($$JOBS_VAL jobs)\"; \\\n\t\t$(ACTIVATE) python tools/profile_tests.py $(TEST) --parallel-jobs $$JOBS_VAL --generate-benchmarks; \\\n\tfi\n\nbenchmarks:\n\t@echo \"Generating Cairo benchmarks from existing test data...\"\n\t$(ACTIVATE) python tools/profile_tests.py --benchmarks-only\n\nci-e2e:\n\t./tools/make/ci_e2e.sh\n\nci-hydra:\n\t./tools/make/ci_hydra.sh\n\nci-cairo:\n\t./tools/make/ci_cairo.sh\n\nci-wasm:\n\t./tools/make/ci_wasm.sh\n\nwasm:\n\t./tools/make/wasm.sh\n\nwasm-test-gen:\n\t./tools/make/wasm-test-gen.sh\n\nmaturin:\n\t$(ACTIVATE) maturin develop --release --features python\n\nclean:\n\tsudo rm -rf build/\n\tmkdir -p build/\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n  <h1>Garaga</h1>\n  <img src=\"docs/images/logo.png\" height=\"200\">\n  <br />\n  <a href=\"https://github.com/keep-starknet-strange/garaga/issues/new?assignees=&labels=bug&template=01_BUG_REPORT.md&title=bug%3A+\">Report a Bug</a>\n  -\n  <a href=\"https://github.com/keep-starknet-strange/garaga/issues/new?assignees=&labels=enhancement&template=02_FEATURE_REQUEST.md&title=feat%3A+\">Request a Feature</a>\n  -\n  <a href=\"https://github.com/keep-starknet-strange/garaga/discussions\">Ask a Question</a>\n</div>\n\n<div align=\"center\">\n<br />\n\n[![CI Status](https://img.shields.io/github/checks-status/keep-starknet-strange/garaga/main?label=All%20Workflows)](https://github.com/keep-starknet-strange/garaga/actions)\n[![Project license](https://img.shields.io/github/license/keep-starknet-strange/garaga.svg?style=flat-square)](LICENSE)\n[![Pull Requests welcome](https://img.shields.io/badge/PRs-welcome-ff69b4.svg?style=flat-square)](https://github.com/keep-starknet-strange/garaga/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)\n\n[![Exploration_Team](https://img.shields.io/badge/Exploration_Team-29296E.svg?&style=for-the-badge&logo=data:image/svg%2bxml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJhIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxODEgMTgxIj48ZGVmcz48c3R5bGU+LmJ7ZmlsbDojZmZmO308L3N0eWxlPjwvZGVmcz48cGF0aCBjbGFzcz0iYiIgZD0iTTE3Ni43Niw4OC4xOGwtMzYtMzcuNDNjLTEuMzMtMS40OC0zLjQxLTIuMDQtNS4zMS0xLjQybC0xMC42MiwyLjk4LTEyLjk1LDMuNjNoLjc4YzUuMTQtNC41Nyw5LjktOS41NSwxNC4yNS0xNC44OSwxLjY4LTEuNjgsMS44MS0yLjcyLDAtNC4yN0w5Mi40NSwuNzZxLTEuOTQtMS4wNC00LjAxLC4xM2MtMTIuMDQsMTIuNDMtMjMuODMsMjQuNzQtMzYsMzcuNjktMS4yLDEuNDUtMS41LDMuNDQtLjc4LDUuMThsNC4yNywxNi41OGMwLDIuNzIsMS40Miw1LjU3LDIuMDcsOC4yOS00LjczLTUuNjEtOS43NC0xMC45Ny0xNS4wMi0xNi4wNi0xLjY4LTEuODEtMi41OS0xLjgxLTQuNCwwTDQuMzksODguMDVjLTEuNjgsMi4zMy0xLjgxLDIuMzMsMCw0LjUzbDM1Ljg3LDM3LjNjMS4zNiwxLjUzLDMuNSwyLjEsNS40NCwxLjQybDExLjQtMy4xMSwxMi45NS0zLjYzdi45MWMtNS4yOSw0LjE3LTEwLjIyLDguNzYtMTQuNzYsMTMuNzNxLTMuNjMsMi45OC0uNzgsNS4zMWwzMy40MSwzNC44NGMyLjIsMi4yLDIuOTgsMi4yLDUuMTgsMGwzNS40OC0zNy4xN2MxLjU5LTEuMzgsMi4xNi0zLjYsMS40Mi01LjU3LTEuNjgtNi4wOS0zLjI0LTEyLjMtNC43OS0xOC4zOS0uNzQtMi4yNy0xLjIyLTQuNjItMS40Mi02Ljk5LDQuMyw1LjkzLDkuMDcsMTEuNTIsMTQuMjUsMTYuNzEsMS42OCwxLjY4LDIuNzIsMS42OCw0LjQsMGwzNC4zMi0zNS43NHExLjU1LTEuODEsMC00LjAxWm0tNzIuMjYsMTUuMTVjLTMuMTEtLjc4LTYuMDktMS41NS05LjE5LTIuNTktMS43OC0uMzQtMy42MSwuMy00Ljc5LDEuNjhsLTEyLjk1LDEzLjg2Yy0uNzYsLjg1LTEuNDUsMS43Ni0yLjA3LDIuNzJoLS42NWMxLjMtNS4zMSwyLjcyLTEwLjYyLDQuMDEtMTUuOGwxLjY4LTYuNzNjLjg0LTIuMTgsLjE1LTQuNjUtMS42OC02LjA5bC0xMi45NS0xNC4xMmMtLjY0LS40NS0xLjE0LTEuMDgtMS40Mi0xLjgxbDE5LjA0LDUuMTgsMi41OSwuNzhjMi4wNCwuNzYsNC4zMywuMTQsNS43LTEuNTVsMTIuOTUtMTQuMzhzLjc4LTEuMDQsMS42OC0xLjE3Yy0xLjgxLDYuNi0yLjk4LDE0LjEyLTUuNDQsMjAuNDYtMS4wOCwyLjk2LS4wOCw2LjI4LDIuNDYsOC4xNiw0LjI3LDQuMTQsOC4yOSw4LjU1LDEyLjk1LDEyLjk1LDAsMCwxLjMsLjkxLDEuNDIsMi4wN2wtMTMuMzQtMy42M1oiLz48L3N2Zz4=)](https://github.com/keep-starknet-strange)\n</div>\n\n\n</details>\n\n## About\n\n> State-of-the-art Elliptic Curve tooling and SNARKS verification for Cairo & Starknet 🐺.\n\nGaraga enables efficient elliptic curve operations on Starknet.\nIt achieves state of the art performance by\n-  using a dedicated builtin made by Starkware for emulated modular arithmetic\n- using a suite of non-deterministic techniques for extension field multiplication, pairings, and multi scalar multiplication to reduce the number of steps to verify results.\n\nGaraga currently supports:\n- Scalar & Multi-scalar multiplication for any Weirstrass curve, including BN254, BLS12_381, SECP256/R1, and ED25519. You can add the one you need by specifying the curve parameters.\n- Pairing operations for BN254 and BLS12_381.\n- Groth16 smart contract verifiers generators for BN254 and BLS12_381.\n- Noir smart contract verifiers generators for ultra keccak honk flavour.\n\n\n## Architecture overview\n![Architecture Overview](docs/images/architecture_overview.svg)\n\nGaraga consists of a Pythonic backend with Rust bindings and CairoZero / Cairo libraries.\n- The Pythonic backend is here to define emulated modular arithmetic circuits that can be compiled to Cairo or Cairo1 code.\n    It also handles witnesses generation for the non-deterministic computations, smart contract contract generation for a given proof system and elliptic curve, and calldata generation from a given proof.\n- The CairoZero / Starknet interfaces are responsible for composing and calling the circuits, as well as adding all the extra logic needed to make the algorithms work (Fiat-Shamir heuristic, SNARKS verifiers algorithms, etc).\n\n## Quickstart : deploying a SNARK verifier on Starknet\n\nCurrently, only Groth16 on BN254 and BLS12_381 is supported with automatic support for json files coming from SnarkJS and Gnark.\n\n1. Create a new directory for you project, and bring the jsons files for verification key, proof file and public inputs inside it.\n2. Install the garaga pip package with `pip install garaga`. Python 3.10+ is required and a virtual environment is recommended. Enter `garaga` in your terminal to get started.\n3. Run the `garaga gen` command in your terminal to generate the code for the SNARK verifier given your verification key.\n4. Edit the generated smart contract to fit the needs of your dapp.\n\n5. Create an environment file `.secrets` following  the `.secrets.template` file in the root of this repository, containing the Starkner RPC url, your account address, and the private key.\n6. Run the `garaga declare` command in your terminal to declare the smart contract on Starknet and obtain its class hash. Note that this is an expensive operation.\n7. Run the `garaga deploy` command in your terminal using the class hash obtained in the previous step to get the contract address.\n\n8. Run the `garaga verify-onchain` command in your terminal using the contract address, the verification key, the proof and the public inputs to verify the proof against the SNARK verifier contract.\n\nFor more details, please refer to the [documentation](https://garaga.gitbook.io/garaga/).\n\n## Developer setup\n\nTo get started with Garaga, you'll need to have some tools and dependencies installed. Here's everything you need:\n\n### Prerequisites\n\nEnsure you have the following installed:\n- [Rust](https://www.rust-lang.org/tools/install) - Required for building the `garaga_rs` extension.\n- [Scarb 2.16.1](https://docs.swmansion.com/scarb/download.html) - The Cairo package manager. Comes with Cairo inside.\n\nPython 3.10-3.14 is used for development but does **not** need to be installed manually — `make setup` will auto-install it via [uv](https://docs.astral.sh/uv/) if it's not already available. Make sure you have GMP installed for the `fastecdsa` python package. See [here](https://pypi.org/project/fastecdsa/#installing) for linux and [here](https://github.com/AntonKueltz/fastecdsa/issues/74) for macos.\n\n##### Optionally :\n\n- [pprof](https://github.com/google/pprof) - A tool for visualization and analysis of profiling data. Requires [Go](https://go.dev/).\n- [graphviz](https://graphviz.org/download/) - Necessary for generating graphical representations of profiling data.\n\n\n### Setup\n\nClone the repository and run the setup command from the root:\n\n```bash\nmake setup\n```\n\nThis will automatically:\n- Install [uv](https://docs.astral.sh/uv/) if not present\n- Install Python 3.14 via uv if no compatible version (3.10-3.14) is found\n- Create a virtual environment and install all dependencies\n- Build the Rust extension\n\nThe setup is idempotent — running it again will update dependencies without recreating the virtual environment.\n\nBefore proceeding, activate the virtual environment by running `source venv/bin/activate`.\n\n## Cairo Benchmarks\n\n📊 **Click on any section below to expand and view detailed benchmark tables with test performance metrics.**\n\n**Note:** Click on the test name to view the profiling image. Resources shown in the table for contracts include extra costs due to the foundry logic.\nCheck the profile file for more details.\n\n<details>\n<summary><strong>contracts</strong></summary>\n\n<details>\n<summary><strong>└── groth16_example_bls12_381_integrationtest::test_contract</strong></summary>\n\n| Test Name                                                                                      | Steps   | Range Check   | Range Check 96   |   Poseidon | Add Mod   | Mul Mod   | Sierra Gas   |\n|------------------------------------------------------------------------------------------------|---------|---------------|------------------|------------|-----------|-----------|--------------|\n| [test_verify_groth16_proof_bls12_381](docs/benchmarks/test_verify_groth16_proof_bls12_381.png) | 353,527 | 10,972        | 90,280           |        586 | 7,506     | 10,868    | 49,754,798   |\n\n</details>\n\n<details>\n<summary><strong>└── groth16_example_bn254_integrationtest::test_contract</strong></summary>\n\n| Test Name                                                                              | Steps   | Range Check   | Range Check 96   |   Poseidon | Add Mod   | Mul Mod   | Sierra Gas   |\n|----------------------------------------------------------------------------------------|---------|---------------|------------------|------------|-----------|-----------|--------------|\n| [test_verify_groth16_proof_bn254](docs/benchmarks/test_verify_groth16_proof_bn254.png) | 228,557 | 9,785         | 67,149           |        509 | 5,401     | 8,754     | 34,080,559   |\n\n</details>\n\n<details>\n<summary><strong>└── noir_ultra_keccak_honk_example_integrationtest::test_contract</strong></summary>\n\n| Test Name                                                                                      | Steps     | Range Check   | Range Check 96   | Bitwise   |   Poseidon | Add Mod   | Mul Mod   | Sierra Gas   |\n|------------------------------------------------------------------------------------------------|-----------|---------------|------------------|-----------|------------|-----------|-----------|--------------|\n| [test_verify_ultra_keccak_honk_proof](docs/benchmarks/test_verify_ultra_keccak_honk_proof.png) | 1,213,031 | 65,539        | 412,656          | 3,180     |        461 | 45,756    | 43,585    | 187,929,077  |\n\n</details>\n\n<details>\n<summary><strong>└── noir_ultra_keccak_zk_honk_example_integrationtest::test_contract</strong></summary>\n\n| Test Name                                                                                            | Steps     | Range Check   | Range Check 96   | Bitwise   |   Poseidon | Add Mod   | Mul Mod   | Sierra Gas   |\n|------------------------------------------------------------------------------------------------------|-----------|---------------|------------------|-----------|------------|-----------|-----------|--------------|\n| [test_verify_ultra_keccak_zk_honk_proof](docs/benchmarks/test_verify_ultra_keccak_zk_honk_proof.png) | 1,306,049 | 70,398        | 451,651          | 3,476     |        461 | 49,914    | 47,993    | 203,546,067  |\n\n</details>\n\n<details>\n<summary><strong>└── noir_ultra_starknet_honk_example_integrationtest::test_contract</strong></summary>\n\n| Test Name                                                                                          | Steps     | Range Check   | Range Check 96   |   Poseidon | Add Mod   | Mul Mod   | Sierra Gas   |\n|----------------------------------------------------------------------------------------------------|-----------|---------------|------------------|------------|-----------|-----------|--------------|\n| [test_verify_ultra_starknet_honk_proof](docs/benchmarks/test_verify_ultra_starknet_honk_proof.png) | 1,127,871 | 61,433        | 412,522          |        992 | 45,742    | 43,569    | 177,512,050  |\n\n</details>\n\n<details>\n<summary><strong>└── noir_ultra_starknet_zk_honk_example_integrationtest::test_contract</strong></summary>\n\n| Test Name                                                                                                | Steps     | Range Check   | Range Check 96   | Poseidon   | Add Mod   | Mul Mod   | Sierra Gas   |\n|----------------------------------------------------------------------------------------------------------|-----------|---------------|------------------|------------|-----------|-----------|--------------|\n| [test_verify_ultra_starknet_zk_honk_proof](docs/benchmarks/test_verify_ultra_starknet_zk_honk_proof.png) | 1,221,360 | 66,173        | 451,576          | 1,044      | 49,911    | 47,987    | 193,032,648  |\n\n</details>\n\n<details>\n<summary><strong>└── risc0_verifier_bn254_integrationtest::test_contract</strong></summary>\n\n| Test Name                                                                                    | Steps   | Range Check   | Range Check 96   | Bitwise   |   Poseidon | Add Mod   | Mul Mod   | Sierra Gas   |\n|----------------------------------------------------------------------------------------------|---------|---------------|------------------|-----------|------------|-----------|-----------|--------------|\n| [test_verify_r0_groth16_proof_bn254](docs/benchmarks/test_verify_r0_groth16_proof_bn254.png) | 264,545 | 12,069        | 74,896           | 6,698     |        509 | 6,303     | 9,541     | 42,860,813   |\n\n</details>\n\n<details>\n<summary><strong>└── sp1_verifier_bn254_integrationtest::test_contract</strong></summary>\n\n| Test Name                                                                                      | Steps   | Range Check   | Range Check 96   | Bitwise   |   Poseidon | Add Mod   | Mul Mod   | Sierra Gas   |\n|------------------------------------------------------------------------------------------------|---------|---------------|------------------|-----------|------------|-----------|-----------|--------------|\n| [test_verify_sp1_groth16_proof_bn254](docs/benchmarks/test_verify_sp1_groth16_proof_bn254.png) | 244,680 | 11,127        | 75,027           | 2,230     |        509 | 6,314     | 9,555     | 38,221,851   |\n\n</details>\n\n\n</details>\n\n<details>\n<summary><strong>garaga</strong></summary>\n\n<details open>\n<summary><strong>└── apps</strong></summary>\n\n<details>\n<summary><strong>│   └── drand::tests</strong></summary>\n\n| Test Name                                                                            | Steps   | Range Check   | Range Check 96   | Bitwise   | Add Mod   | Mul Mod   | Sierra Gas   |\n|--------------------------------------------------------------------------------------|---------|---------------|------------------|-----------|-----------|-----------|--------------|\n| [test_decrypt_at_round](docs/benchmarks/test_decrypt_at_round.png)                   | 289,447 | 3,919         | 385,790          | 14,506    | 57,320    | 28,871    | 89,901,952   |\n| [test_hash_to_curve](docs/benchmarks/test_hash_to_curve.png)                         | 26,526  | 971           | 4,559            | 12,289    | 422       | 602       | 10,601,029   |\n| [test_hash_to_two_bls_felts](docs/benchmarks/test_hash_to_two_bls_felts.png)         | 23,557  | 900           | 74               | 12,289    | 2         | 8         | 9,592,623    |\n| [test_drand_quicknet_public_key](docs/benchmarks/test_drand_quicknet_public_key.png) | 12,861  | 68            | 14,864           | 0         | 1,490     | 1,674     | 3,477,040    |\n| [test_isogeny](docs/benchmarks/test_isogeny.png)                                     | 1,844   | 58            | 878              | 0         | 51        | 111       | 316,402      |\n| [test_map_to_curve](docs/benchmarks/test_map_to_curve.png)                           | 647     | 11            | 264              | 0         | 6         | 39        | 105,190      |\n\n</details>\n\n<details open>\n<summary><strong>│   └── noir</strong></summary>\n\n<details>\n<summary><strong>│   │   └── honk_transcript::tests</strong></summary>\n\n| Test Name                                                                | Steps   | Range Check   | Bitwise   |   Poseidon | Sierra Gas   |\n|--------------------------------------------------------------------------|---------|---------------|-----------|------------|--------------|\n| [test_transcript_keccak](docs/benchmarks/test_transcript_keccak.png)     | 71,084  | 5,035         | 3,180     |          1 | 9,315,281    |\n| [test_transcript_starknet](docs/benchmarks/test_transcript_starknet.png) | 19,758  | 1,103         | 0         |        532 | 2,314,222    |\n\n</details>\n\n<details>\n<summary><strong>│   │   └── zk_honk_transcript::tests</strong></summary>\n\n| Test Name                                                                      | Steps   | Range Check   | Bitwise   |   Poseidon | Sierra Gas   |\n|--------------------------------------------------------------------------------|---------|---------------|-----------|------------|--------------|\n| [test_zk_transcript_keccak](docs/benchmarks/test_zk_transcript_keccak.png)     | 73,392  | 5,241         | 3,476     |          1 | 9,733,069    |\n| [test_zk_transcript_starknet](docs/benchmarks/test_zk_transcript_starknet.png) | 21,173  | 1,185         | 0         |        584 | 2,486,994    |\n\n</details>\n\n\n</details>\n\n<details>\n<summary><strong>│   └── risc0::risc0_utils_tests</strong></summary>\n\n| Test Name                                                    | Steps   |   Range Check | Bitwise   | Sierra Gas   |\n|--------------------------------------------------------------|---------|---------------|-----------|--------------|\n| [test_receipt_claim](docs/benchmarks/test_receipt_claim.png) | 11,117  |           433 | 5,591     | 4,401,563    |\n| [test_output_digest](docs/benchmarks/test_output_digest.png) | 4,424   |           171 | 2,230     | 1,754,460    |\n\n</details>\n\n<details>\n<summary><strong>│   └── sp1::tests</strong></summary>\n\n| Test Name                                                                |   Steps |   Range Check | Sierra Gas   |\n|--------------------------------------------------------------------------|---------|---------------|--------------|\n| [test_convert_u32_to_u128](docs/benchmarks/test_convert_u32_to_u128.png) |      58 |             3 | 6,010        |\n\n</details>\n\n\n</details>\n\n<details>\n<summary><strong>└── crypto::mmr::tests</strong></summary>\n\n| Test Name                                                    |   Steps |   Range Check | Sierra Gas   |\n|--------------------------------------------------------------|---------|---------------|--------------|\n| [test_trailing_ones](docs/benchmarks/test_trailing_ones.png) |     441 |            51 | 47,670       |\n\n</details>\n\n<details>\n<summary><strong>└── ec::ec_ops_g2::tests</strong></summary>\n\n| Test Name                                            | Steps   | Range Check   | Range Check 96   | Add Mod   | Mul Mod   | Sierra Gas   |\n|------------------------------------------------------|---------|---------------|------------------|-----------|-----------|--------------|\n| [test_ec_mul_g2](docs/benchmarks/test_ec_mul_g2.png) | 105,060 | 1,074         | 87,664           | 8,551     | 9,755     | 23,349,114   |\n\n</details>\n\n<details>\n<summary><strong>└── hashes::poseidon_bn254::tests</strong></summary>\n\n| Test Name                                                                                        | Steps   |   Range Check | Range Check 96   |   Add Mod |   Mul Mod | Sierra Gas   |\n|--------------------------------------------------------------------------------------------------|---------|---------------|------------------|-----------|-----------|--------------|\n| [test_run_poseidon_grumpkin_circuit_1](docs/benchmarks/test_run_poseidon_grumpkin_circuit_1.png) | 9,913   |           327 | 6,393            |       353 |       919 | 2,008,464    |\n\n</details>\n\n<details open>\n<summary><strong>└── tests</strong></summary>\n\n<details open>\n<summary><strong>│   └── autogenerated</strong></summary>\n\n<details>\n<summary><strong>│   │   └── ecdsa_tests</strong></summary>\n\n| Test Name                                                        | Steps   | Range Check   | Range Check 96   | Add Mod   | Mul Mod   | Sierra Gas   |\n|------------------------------------------------------------------|---------|---------------|------------------|-----------|-----------|--------------|\n| [test_ecdsa_SECP256R1](docs/benchmarks/test_ecdsa_SECP256R1.png) | 14,099  | 1,072         | 20,022           | 2,367     | 2,184     | 4,469,718    |\n| [test_ecdsa_SECP256K1](docs/benchmarks/test_ecdsa_SECP256K1.png) | 18,723  | 2,082         | 15,629           | 1,810     | 1,592     | 4,271,132    |\n\n</details>\n\n<details>\n<summary><strong>│   │   └── eddsa_tests</strong></summary>\n\n| Test Name                                                  | Steps   | Range Check   | Range Check 96   | Bitwise   | Add Mod   | Mul Mod   | Sierra Gas   |\n|------------------------------------------------------------|---------|---------------|------------------|-----------|-----------|-----------|--------------|\n| [test_eddsa_32_64B](docs/benchmarks/test_eddsa_32_64B.png) | 88,025  | 13,786        | 20,762           | 3,288     | 2,412     | 2,276     | 14,776,560   |\n| [test_eddsa_16_32B](docs/benchmarks/test_eddsa_16_32B.png) | 52,391  | 7,643         | 20,840           | 1,656     | 2,418     | 2,284     | 9,842,274    |\n| [test_eddsa_0_0B](docs/benchmarks/test_eddsa_0_0B.png)     | 51,814  | 7,549         | 20,865           | 1,656     | 2,419     | 2,286     | 9,780,832    |\n\n</details>\n\n<details>\n<summary><strong>│   │   └── msm_tests</strong></summary>\n\n| Test Name                                                          | Steps   | Range Check   | Range Check 96   | Add Mod   | Mul Mod   | Sierra Gas   |\n|--------------------------------------------------------------------|---------|---------------|------------------|-----------|-----------|--------------|\n| [test_msm_SECP256R1_3P](docs/benchmarks/test_msm_SECP256R1_3P.png) | 20,115  | 1,576         | 29,835           | 3,546     | 3,252     | 6,572,368    |\n| [test_msm_SECP256K1_3P](docs/benchmarks/test_msm_SECP256K1_3P.png) | 26,954  | 3,087         | 23,194           | 2,707     | 2,359     | 6,257,800    |\n| [test_msm_SECP256R1_2P](docs/benchmarks/test_msm_SECP256R1_2P.png) | 13,465  | 1,053         | 19,865           | 2,363     | 2,166     | 4,384,404    |\n| [test_msm_SECP256K1_2P](docs/benchmarks/test_msm_SECP256K1_2P.png) | 17,919  | 2,061         | 15,369           | 1,799     | 1,564     | 4,155,260    |\n| [test_msm_SECP256R1_1P](docs/benchmarks/test_msm_SECP256R1_1P.png) | 6,991   | 530           | 9,945            | 1,182     | 1,084     | 2,219,716    |\n| [test_msm_SECP256K1_1P](docs/benchmarks/test_msm_SECP256K1_1P.png) | 9,221   | 1,037         | 7,697            | 900       | 783       | 2,105,654    |\n\n</details>\n\n<details>\n<summary><strong>│   │   └── pairing_tests</strong></summary>\n\n| Test Name                                                                                                                                    | Steps   |   Range Check | Range Check 96   |   Poseidon | Add Mod   | Mul Mod   | Sierra Gas   |\n|----------------------------------------------------------------------------------------------------------------------------------------------|---------|---------------|------------------|------------|-----------|-----------|--------------|\n| [test_BN254_mpcheck_3P_2F_with_extra_miller_loop_result](docs/benchmarks/test_BN254_mpcheck_3P_2F_with_extra_miller_loop_result.png)         | 59,916  |           472 | 59,008           |        509 | 4,469     | 7,922     | 15,391,765   |\n| [test_BLS12_381_mpcheck_3P_2F_with_extra_miller_loop_result](docs/benchmarks/test_BLS12_381_mpcheck_3P_2F_with_extra_miller_loop_result.png) | 54,316  |           356 | 44,885           |        586 | 3,482     | 5,791     | 12,556,430   |\n| [test_BN254_mpcheck_2P_2F](docs/benchmarks/test_BN254_mpcheck_2P_2F.png)                                                                     | 47,930  |           393 | 33,047           |        460 | 1,731     | 4,665     | 10,112,792   |\n| [test_BLS12_381_mpcheck_2P_2F](docs/benchmarks/test_BLS12_381_mpcheck_2P_2F.png)                                                             | 45,132  |           308 | 25,250           |        544 | 1,420     | 3,340     | 8,559,824    |\n\n</details>\n\n<details>\n<summary><strong>│   │   └── schnorr_tests</strong></summary>\n\n| Test Name                                                            | Steps   | Range Check   | Range Check 96   | Add Mod   | Mul Mod   | Sierra Gas   |\n|----------------------------------------------------------------------|---------|---------------|------------------|-----------|-----------|--------------|\n| [test_schnorr_SECP256K1](docs/benchmarks/test_schnorr_SECP256K1.png) | 18,321  | 2,082         | 15,512           | 1,808     | 1,580     | 4,216,672    |\n\n</details>\n\n<details>\n<summary><strong>│   │   └── tower_pairing_tests</strong></summary>\n\n| Test Name                                                                              | Steps   |   Range Check | Range Check 96   | Add Mod   | Mul Mod   | Sierra Gas   |\n|----------------------------------------------------------------------------------------|---------|---------------|------------------|-----------|-----------|--------------|\n| [test_tower_pairing_BN254_3P](docs/benchmarks/test_tower_pairing_BN254_3P.png)         | 268,869 |           474 | 626,255          | 94,555    | 50,514    | 114,248,466  |\n| [test_tower_pairing_BLS12_381_3P](docs/benchmarks/test_tower_pairing_BLS12_381_3P.png) | 248,951 |           556 | 538,321          | 86,187    | 37,849    | 97,763,802   |\n| [test_tower_pairing_BN254_2P](docs/benchmarks/test_tower_pairing_BN254_2P.png)         | 219,367 |           398 | 486,548          | 73,494    | 38,661    | 89,466,112   |\n| [test_tower_pairing_BLS12_381_2P](docs/benchmarks/test_tower_pairing_BLS12_381_2P.png) | 207,121 |           493 | 422,516          | 67,911    | 28,926    | 77,498,340   |\n| [test_tower_pairing_BN254_1P](docs/benchmarks/test_tower_pairing_BN254_1P.png)         | 169,865 |           322 | 346,841          | 52,433    | 26,808    | 64,683,758   |\n| [test_tower_pairing_BLS12_381_1P](docs/benchmarks/test_tower_pairing_BLS12_381_1P.png) | 165,291 |           430 | 306,711          | 49,635    | 20,003    | 57,232,878   |\n| [test_tower_final_exp_BN254](docs/benchmarks/test_tower_final_exp_BN254.png)           | 120,363 |           246 | 207,134          | 31,372    | 14,955    | 39,901,404   |\n| [test_tower_final_exp_BLS12_381](docs/benchmarks/test_tower_final_exp_BLS12_381.png)   | 123,509 |           367 | 190,906          | 31,359    | 11,080    | 36,972,216   |\n\n</details>\n\n\n</details>\n\n<details>\n<summary><strong>│   └── calldata_tests</strong></summary>\n\n| Test Name                                                                                                                | Steps   | Range Check   | Sierra Gas   |\n|--------------------------------------------------------------------------------------------------------------------------|---------|---------------|--------------|\n| [test_deserialize_full_proof_with_hints_bls12_381](docs/benchmarks/test_deserialize_full_proof_with_hints_bls12_381.png) | 22,272  | 4,714         | 2,557,180    |\n\n</details>\n\n<details>\n<summary><strong>│   └── sha512_tests</strong></summary>\n\n| Test Name                                                              | Steps   | Range Check   | Bitwise   | Sierra Gas   |\n|------------------------------------------------------------------------|---------|---------------|-----------|--------------|\n| [test_sha512_lorem_ipsum](docs/benchmarks/test_sha512_lorem_ipsum.png) | 102,856 | 18,169        | 4,904     | 14,416,462   |\n| [test_size_zero](docs/benchmarks/test_size_zero.png)                   | 37,579  | 6,404         | 1,640     | 5,162,300    |\n| [test_sha512_size_one](docs/benchmarks/test_sha512_size_one.png)       | 37,564  | 6,403         | 1,640     | 5,160,730    |\n\n</details>\n\n\n</details>\n\n<details>\n<summary><strong>└── utils::neg_3::tests</strong></summary>\n\n| Test Name                                                                    | Steps   |   Range Check | Sierra Gas   |\n|------------------------------------------------------------------------------|---------|---------------|--------------|\n| [test_scalar_to_epns](docs/benchmarks/test_scalar_to_epns.png)               | 6,103   |           928 | 675,260      |\n| [test_scalar_to_epns_single](docs/benchmarks/test_scalar_to_epns_single.png) | 1,940   |           297 | 214,790      |\n\n</details>\n\n\n</details>\n\n---\n🔄 **To regenerate these benchmarks:** Run `make profile-test` from the project root.\n\n## Support & How to Contribute\n\nWe warmly welcome contributions and support from the community! Here's how you can help Garaga grow and improve:\n\n### Reporting Issues & Requesting Features\n\n- **Spot a bug? Have a feature request?** Check out our [issues page](https://github.com/keep-starknet-strange/garaga/issues) to see if it's already been reported or to open a new issue.\n\n### Contributing to Garaga\n\n- **Interested in contributing?** Please take a moment to read our [contribution guidelines](docs/CONTRIBUTING.md) for details on how to get started. Your contributions make the open-source community an incredible place for learning, inspiration, and creation.\n\n### Showing Support\n\n- **Love Garaga?** Give us a [star on GitHub](https://github.com/keep-starknet-strange/garaga) to show your support.\n- **Spread the word:** Share your excitement about Garaga on social platforms like Twitter, [Dev.to](https://dev.to/), [Medium](https://medium.com/), or your personal blog.\n- **Join the conversation:** Connect with us and other Garaga enthusiasts on our [Telegram group](https://t.me/GaragaPairingCairo).\n\nEvery contribution, whether it's code, feedback, or spreading the word, greatly benefits everyone and is deeply appreciated. Thank you for being a part of Garaga's journey!\n\n\n## Security\n\nGaraga follows good practices of security, but 100% security cannot be assured.\nGaraga is provided **\"as is\"** without any **warranty**. Use at your own risk.\n\n_For more information and to report security issues, please refer to our\n[security documentation](docs/SECURITY.md)._\n\n## License\n\nThis project is licensed under the **MIT license**.\n\nSee [LICENSE](LICENSE) for more information.\n\n## Acknowledgements\n\n- Huge props to [tekkac](https://github.com/tekkac) and [feltroidprime](https://github.com/feltroidprime) for their initial work on provable pairing-based cryptography in StarkNet.\n- Credits to [Nethermind](https://github.com/NethermindEth/) for their [initial work on optimized modular arithmetic](https://github.com/NethermindEth/research-basic-Cairo-operations-big-integers/tree/main/lib).\n- [Herodotus](https://www.herodotus.dev/) for supporting this project.\n- [Gnark project](https://github.com/ConsenSys/gnark-crypto) and team, especially [yelhousni](https://github.com/yelhousni) for his amazing knowledge and support.\n- [OnlyDust](https://www.onlydust.xyz/) and [Starkware](https://starkware.co/).\n- Liam Eagen and Andrija Novakovic for their support and amazing research.\n## Resources\n- Craig Costello, [Pairing for beginners](https://static1.squarespace.com/static/5fdbb09f31d71c1227082339/t/5ff394720493bd28278889c6/1609798774687/PairingsForBeginners.pdf)\n- Y. El Housni, \"Pairings in Rank-1 Constraint Systems,\" Cryptology ePrint Archive, Report 2022/1162, 2022. Available: [https://eprint.iacr.org/2022/1162](https://eprint.iacr.org/2022/1162).\n- feltroidprime. \"Faster Extension Field multiplications for Emulated Pairing Circuits.\" HackMD, [https://hackmd.io/@feltroidprime/B1eyHHXNT](https://hackmd.io/@feltroidprime/B1eyHHXNT).\n- Liam Eagen, \"Zero Knowledge Proofs of Elliptic Curve Inner Products from Principal Divisors and Weil Reciprocity,\" Cryptology ePrint Archive, Report 2022/596, 2022. Available: [https://eprint.iacr.org/2022/596](https://eprint.iacr.org/2022/596)\n- Andrija Novakovic and Liam Eagen, \"On Proving Pairings,\" Cryptology ePrint Archive, Paper 2024/640, 2024. Available: [https://eprint.iacr.org/2024/640](https://eprint.iacr.org/2024/640)\n- Liam Eagen, Youssef El Housni, Simon Masson, and Thomas Piellard, \"Fast elliptic curve scalar multiplications in SN(T)ARK circuits,\" Cryptology ePrint Archive, Paper 2025/933, 2025. Available: [https://eprint.iacr.org/2025/933](https://eprint.iacr.org/2025/933)\n\n\n> **Note:** This list is not exhaustive, and is not intended to be.\n\n\n## Contributors\nFor a full list of all authors and contributors, see\n[the contributors page](https://github.com/keep-starknet-strange/garaga/contributors).\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/feltroidprime\"><img src=\"https://avatars.githubusercontent.com/u/96737978?v=4?s=100\" width=\"100px;\" alt=\"Feltroid Prime\"/><br /><sub><b>Feltroid Prime</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=feltroidprime\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/abdelhamidbakhta\"><img src=\"https://avatars.githubusercontent.com/u/45264458?v=4?s=100\" width=\"100px;\" alt=\"Abdel @ StarkWare \"/><br /><sub><b>Abdel @ StarkWare </b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=abdelhamidbakhta\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tekkac\"><img src=\"https://avatars.githubusercontent.com/u/98529704?v=4?s=100\" width=\"100px;\" alt=\"Tarik K.\"/><br /><sub><b>Tarik K.</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=tekkac\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bacharif\"><img src=\"https://avatars.githubusercontent.com/u/22233193?v=4?s=100\" width=\"100px;\" alt=\"Bachir Arif\"/><br /><sub><b>Bachir Arif</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=bacharif\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rdubois-crypto\"><img src=\"https://avatars.githubusercontent.com/u/103030189?v=4?s=100\" width=\"100px;\" alt=\"Renaud Dubois\"/><br /><sub><b>Renaud Dubois</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=rdubois-crypto\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://raugfer.com/\"><img src=\"https://avatars.githubusercontent.com/u/725060?v=4?s=100\" width=\"100px;\" alt=\"Rodrigo Ferreira\"/><br /><sub><b>Rodrigo Ferreira</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=raugfer\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luiz-lvj\"><img src=\"https://avatars.githubusercontent.com/u/64055364?v=4?s=100\" width=\"100px;\" alt=\"Luiz Vasconcelos Júnior\"/><br /><sub><b>Luiz Vasconcelos Júnior</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=luiz-lvj\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://shramee.me/\"><img src=\"https://avatars.githubusercontent.com/u/11048263?v=4?s=100\" width=\"100px;\" alt=\"Shramee Srivastav\"/><br /><sub><b>Shramee Srivastav</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=shramee\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/akinovak\"><img src=\"https://avatars.githubusercontent.com/u/28649205?v=4?s=100\" width=\"100px;\" alt=\"Andrija Novakovic\"/><br /><sub><b>Andrija Novakovic</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=akinovak\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Liam-Eagen\"><img src=\"https://avatars.githubusercontent.com/u/5618692?v=4?s=100\" width=\"100px;\" alt=\"Liam Eagen\"/><br /><sub><b>Liam Eagen</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=Liam-Eagen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/petscheit\"><img src=\"https://avatars.githubusercontent.com/u/10947187?v=4?s=100\" width=\"100px;\" alt=\"Paul Etscheit\"/><br /><sub><b>Paul Etscheit</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=petscheit\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/stefanMadzharov\"><img src=\"https://avatars.githubusercontent.com/u/83451593?v=4?s=100\" width=\"100px;\" alt=\"stefanMadzharov\"/><br /><sub><b>stefanMadzharov</b></sub></a><br /><a href=\"https://github.com/keep-starknet-strange/garaga/commits?author=stefanMadzharov\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n  <tfoot>\n    <tr>\n      <td align=\"center\" size=\"13px\" colspan=\"7\">\n        <img src=\"https://raw.githubusercontent.com/all-contributors/all-contributors-cli/1b8533af435da9854653492b1327a23a4dbd0a10/assets/logo-small.svg\">\n          <a href=\"https://all-contributors.js.org/docs/en/bot/usage\">Add your contributions</a>\n        </img>\n      </td>\n    </tr>\n  </tfoot>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n"
  },
  {
    "path": "Scarb.toml",
    "content": "[workspace]\nmembers = [\n    \"src/\",\n    \"src/corelib_imports\",\n]\n\n[workspace.dependencies]\ncairo_test = \"2.16.1\"\nstarknet = \"2.16.1\"\n\n[workspace.scripts]\ntest = \"snforge test -p garaga --include-ignored\"\n\n[cairo]\nsierra-replace-ids = false\n"
  },
  {
    "path": "docs/CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies within all project spaces, and it also applies when an individual is representing the project or its community in public spaces. Examples of representing a project or community include using an official project email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project maintainer using any of the [private contact addresses](https://github.com/keep-starknet-strange/garaga#support). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 1.4, available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>\n\nFor answers to common questions about this code of conduct, see <https://www.contributor-covenant.org/faq>\n"
  },
  {
    "path": "docs/CONTRIBUTING.md",
    "content": "# Contributing\n\nWhen contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.\nPlease note we have a [code of conduct](CODE_OF_CONDUCT.md), please follow it in all your interactions with the project.\n\n## Development environment setup\n\n> **[?]**\n> Proceed to describe how to setup local development environment.\n> e.g:\n\nTo set up a development environment, please follow these steps:\n\n1. Clone the repo and run setup (Python 3.10-3.14 and [uv](https://docs.astral.sh/uv/) are installed automatically if needed):\n\n   ```sh\n   git clone https://github.com/keep-starknet-strange/garaga\n   cd garaga\n   make setup\n   source venv/bin/activate\n   ```\n\n2. You also need [Rust](https://www.rust-lang.org/tools/install) and [Scarb 2.16.1](https://docs.swmansion.com/scarb/download.html) installed.\n\n## Issues and feature requests\n\nYou've found a bug in the source code, a mistake in the documentation or maybe you'd like a new feature?Take a look at [GitHub Discussions](https://github.com/keep-starknet-strange/garaga/discussions) to see if it's already being discussed.  You can help us by [submitting an issue on GitHub](https://github.com/keep-starknet-strange/garaga/issues). Before you create an issue, make sure to search the issue archive -- your issue may have already been addressed!\n\nPlease try to create bug reports that are:\n\n- _Reproducible._ Include steps to reproduce the problem.\n- _Specific._ Include as much detail as possible: which version, what environment, etc.\n- _Unique._ Do not duplicate existing opened issues.\n- _Scoped to a Single Bug._ One bug per report.\n\n**Even better: Submit a pull request with a fix or new feature!**\n\n### How to submit a Pull Request\n\n1. Search our repository for open or closed\n   [Pull Requests](https://github.com/keep-starknet-strange/garaga/pulls)\n   that relate to your submission. You don't want to duplicate effort.\n2. Fork the project\n3. Create your feature branch (`git checkout -b feat/amazing_feature`)\n4. Commit your changes (`git commit -m 'feat: add amazing_feature'`)\n5. Push to the branch (`git push origin feat/amazing_feature`)\n6. [Open a Pull Request](https://github.com/keep-starknet-strange/garaga/compare?expand=1)\n"
  },
  {
    "path": "docs/PYPI_README.md",
    "content": "# Garaga 🐺\n\nState-of-the-art Elliptic Curve operations and SNARKS verification for Cairo & Starknet.\n\n## Quick Start\n\n```bash\npip install garaga\n```\n\n**Requirements:** Python 3.10 through 3.14\n\n## What is Garaga?\n\nGaraga provides optimized cryptographic primitives for:\n- **Elliptic Curve Operations** - High-performance curve arithmetic\n- **SNARK Verification** - Groth16, Honk, and other proof systems\n- **Pairing-Based Cryptography** - BN254, BLS12-381 curves\n- **Cairo/Starknet Integration** - Native integration with Starknet ecosystem\n\n## CLI Usage\n\nAfter installation, access the CLI:\n\n```bash\ngaraga --help\n```\n\nGenerate SNARK verifier contracts:\n```bash\ngaraga gen\n```\n\n## Key Features\n\n✅ **Multi-Curve Support** - BN254, BLS12-381, and more\n✅ **SNARK Verifiers** - Groth16, Noir Honk proof verification\n✅ **Cairo Integration** - Seamless Starknet development\n✅ **Rust Performance** - Optimized core operations\n\n## Documentation & Links\n\n- 📖 **Documentation**: [garaga.gitbook.io](https://garaga.gitbook.io/)\n- 🔧 **GitHub**: [github.com/keep-starknet-strange/garaga](https://github.com/keep-starknet-strange/garaga)\n- 🐛 **Issues**: [Report bugs](https://github.com/keep-starknet-strange/garaga/issues)\n\n## Version Management\n\nInstall specific version:\n```bash\npip install garaga==1.1.0\n```\n\nInstall from Git commit:\n```bash\npip install git+https://github.com/keep-starknet-strange/garaga.git@COMMIT_HASH\n```\n\n## License\n\nMIT License - see [LICENSE](https://github.com/keep-starknet-strange/garaga/blob/main/LICENSE)\n"
  },
  {
    "path": "docs/SECURITY.md",
    "content": "# Security Policy\n\n## Reporting a Vulnerability\n\nIf there are any vulnerabilities in **Garaga**, don't hesitate to _report them_.\n\n1. Use any of the [private contact addresses](https://github.com/keep-starknet-strange/garaga#support).\n2. Describe the vulnerability.\n\n   If you have a fix, that is most welcome -- please attach or summarize it in your message!\n\n3. We will evaluate the vulnerability and, if necessary, release a fix or mitigating steps to address it. We will contact you to let you know the outcome, and will credit you in the report.\n\n   Please **do not disclose the vulnerability publicly** until a fix is released!\n\n4. Once we have either a) published a fix, or b) declined to address the vulnerability for whatever reason, you are free to publicly disclose it.\n"
  },
  {
    "path": "docs/benchmarks/test_summary.json",
    "content": "{\n  \"test_trailing_ones\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::crypto::mmr::tests::test_trailing_ones\",\n      \"test_name\": \"test_trailing_ones\",\n      \"steps\": 441,\n      \"sierra_gas\": 47670,\n      \"image_path\": \"docs/benchmarks/test_trailing_ones.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 51,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_receipt_claim\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::risc0::risc0_utils_tests::test_receipt_claim\",\n      \"test_name\": \"test_receipt_claim\",\n      \"steps\": 11117,\n      \"sierra_gas\": 4401563,\n      \"image_path\": \"docs/benchmarks/test_receipt_claim.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 433,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 5591,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_zk_transcript_keccak\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::noir::zk_honk_transcript::tests::test_zk_transcript_keccak\",\n      \"test_name\": \"test_zk_transcript_keccak\",\n      \"steps\": 73392,\n      \"sierra_gas\": 9733069,\n      \"image_path\": \"docs/benchmarks/test_zk_transcript_keccak.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 5241,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 3476,\n      \"ecop\": 0,\n      \"poseidon\": 1,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_output_digest\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::risc0::risc0_utils_tests::test_output_digest\",\n      \"test_name\": \"test_output_digest\",\n      \"steps\": 4424,\n      \"sierra_gas\": 1754460,\n      \"image_path\": \"docs/benchmarks/test_output_digest.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 171,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 2230,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_ecdsa_SECP256R1\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::ecdsa_tests::test_ecdsa_SECP256R1\",\n      \"test_name\": \"test_ecdsa_SECP256R1\",\n      \"steps\": 14099,\n      \"sierra_gas\": 4469718,\n      \"image_path\": \"docs/benchmarks/test_ecdsa_SECP256R1.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 1072,\n      \"range_check96\": 20022,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 2367,\n      \"mul_mod\": 2184\n    }\n  },\n  \"test_scalar_to_epns\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::utils::neg_3::tests::test_scalar_to_epns\",\n      \"test_name\": \"test_scalar_to_epns\",\n      \"steps\": 6103,\n      \"sierra_gas\": 675260,\n      \"image_path\": \"docs/benchmarks/test_scalar_to_epns.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 928,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_run_poseidon_grumpkin_circuit_1\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::hashes::poseidon_bn254::tests::test_run_poseidon_grumpkin_circuit_1\",\n      \"test_name\": \"test_run_poseidon_grumpkin_circuit_1\",\n      \"steps\": 9913,\n      \"sierra_gas\": 2008464,\n      \"image_path\": \"docs/benchmarks/test_run_poseidon_grumpkin_circuit_1.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 327,\n      \"range_check96\": 6393,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 353,\n      \"mul_mod\": 919\n    }\n  },\n  \"test_hash_to_curve\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::drand::tests::test_hash_to_curve\",\n      \"test_name\": \"test_hash_to_curve\",\n      \"steps\": 26526,\n      \"sierra_gas\": 10601029,\n      \"image_path\": \"docs/benchmarks/test_hash_to_curve.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 971,\n      \"range_check96\": 4559,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 12289,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 422,\n      \"mul_mod\": 602\n    }\n  },\n  \"test_transcript_keccak\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::noir::honk_transcript::tests::test_transcript_keccak\",\n      \"test_name\": \"test_transcript_keccak\",\n      \"steps\": 71084,\n      \"sierra_gas\": 9315281,\n      \"image_path\": \"docs/benchmarks/test_transcript_keccak.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 5035,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 3180,\n      \"ecop\": 0,\n      \"poseidon\": 1,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_zk_transcript_starknet\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::noir::zk_honk_transcript::tests::test_zk_transcript_starknet\",\n      \"test_name\": \"test_zk_transcript_starknet\",\n      \"steps\": 21173,\n      \"sierra_gas\": 2486994,\n      \"image_path\": \"docs/benchmarks/test_zk_transcript_starknet.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 1185,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 584,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_convert_u32_to_u128\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::sp1::tests::test_convert_u32_to_u128\",\n      \"test_name\": \"test_convert_u32_to_u128\",\n      \"steps\": 58,\n      \"sierra_gas\": 6010,\n      \"image_path\": \"docs/benchmarks/test_convert_u32_to_u128.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 3,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_ecdsa_SECP256K1\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::ecdsa_tests::test_ecdsa_SECP256K1\",\n      \"test_name\": \"test_ecdsa_SECP256K1\",\n      \"steps\": 18723,\n      \"sierra_gas\": 4271132,\n      \"image_path\": \"docs/benchmarks/test_ecdsa_SECP256K1.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 2082,\n      \"range_check96\": 15629,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 1810,\n      \"mul_mod\": 1592\n    }\n  },\n  \"test_drand_quicknet_public_key\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::drand::tests::test_drand_quicknet_public_key\",\n      \"test_name\": \"test_drand_quicknet_public_key\",\n      \"steps\": 12861,\n      \"sierra_gas\": 3477040,\n      \"image_path\": \"docs/benchmarks/test_drand_quicknet_public_key.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 68,\n      \"range_check96\": 14864,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 1490,\n      \"mul_mod\": 1674\n    }\n  },\n  \"test_scalar_to_epns_single\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::utils::neg_3::tests::test_scalar_to_epns_single\",\n      \"test_name\": \"test_scalar_to_epns_single\",\n      \"steps\": 1940,\n      \"sierra_gas\": 214790,\n      \"image_path\": \"docs/benchmarks/test_scalar_to_epns_single.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 297,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_hash_to_two_bls_felts\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::drand::tests::test_hash_to_two_bls_felts\",\n      \"test_name\": \"test_hash_to_two_bls_felts\",\n      \"steps\": 23557,\n      \"sierra_gas\": 9592623,\n      \"image_path\": \"docs/benchmarks/test_hash_to_two_bls_felts.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 900,\n      \"range_check96\": 74,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 12289,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 2,\n      \"mul_mod\": 8\n    }\n  },\n  \"test_transcript_starknet\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::noir::honk_transcript::tests::test_transcript_starknet\",\n      \"test_name\": \"test_transcript_starknet\",\n      \"steps\": 19758,\n      \"sierra_gas\": 2314222,\n      \"image_path\": \"docs/benchmarks/test_transcript_starknet.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 1103,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 532,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_size_zero\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::sha512_tests::test_size_zero\",\n      \"test_name\": \"test_size_zero\",\n      \"steps\": 37579,\n      \"sierra_gas\": 5162300,\n      \"image_path\": \"docs/benchmarks/test_size_zero.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 6404,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 1640,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_isogeny\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::drand::tests::test_isogeny\",\n      \"test_name\": \"test_isogeny\",\n      \"steps\": 1844,\n      \"sierra_gas\": 316402,\n      \"image_path\": \"docs/benchmarks/test_isogeny.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 58,\n      \"range_check96\": 878,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 51,\n      \"mul_mod\": 111\n    }\n  },\n  \"test_sha512_lorem_ipsum\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::sha512_tests::test_sha512_lorem_ipsum\",\n      \"test_name\": \"test_sha512_lorem_ipsum\",\n      \"steps\": 102856,\n      \"sierra_gas\": 14416462,\n      \"image_path\": \"docs/benchmarks/test_sha512_lorem_ipsum.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 18169,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 4904,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_sha512_size_one\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::sha512_tests::test_sha512_size_one\",\n      \"test_name\": \"test_sha512_size_one\",\n      \"steps\": 37564,\n      \"sierra_gas\": 5160730,\n      \"image_path\": \"docs/benchmarks/test_sha512_size_one.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 6403,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 1640,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_map_to_curve\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::drand::tests::test_map_to_curve\",\n      \"test_name\": \"test_map_to_curve\",\n      \"steps\": 647,\n      \"sierra_gas\": 105190,\n      \"image_path\": \"docs/benchmarks/test_map_to_curve.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 11,\n      \"range_check96\": 264,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 6,\n      \"mul_mod\": 39\n    }\n  },\n  \"test_schnorr_SECP256K1\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::schnorr_tests::test_schnorr_SECP256K1\",\n      \"test_name\": \"test_schnorr_SECP256K1\",\n      \"steps\": 18321,\n      \"sierra_gas\": 4216672,\n      \"image_path\": \"docs/benchmarks/test_schnorr_SECP256K1.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 2082,\n      \"range_check96\": 15512,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 1808,\n      \"mul_mod\": 1580\n    }\n  },\n  \"test_ec_mul_g2\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::ec::ec_ops_g2::tests::test_ec_mul_g2\",\n      \"test_name\": \"test_ec_mul_g2\",\n      \"steps\": 105060,\n      \"sierra_gas\": 23349114,\n      \"image_path\": \"docs/benchmarks/test_ec_mul_g2.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 1074,\n      \"range_check96\": 87664,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 8551,\n      \"mul_mod\": 9755\n    }\n  },\n  \"test_decrypt_at_round\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::apps::drand::tests::test_decrypt_at_round\",\n      \"test_name\": \"test_decrypt_at_round\",\n      \"steps\": 289447,\n      \"sierra_gas\": 89901952,\n      \"image_path\": \"docs/benchmarks/test_decrypt_at_round.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 3919,\n      \"range_check96\": 385790,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 14506,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 57320,\n      \"mul_mod\": 28871\n    }\n  },\n  \"test_verify_groth16_proof_bn254\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"groth16_example_bn254_integrationtest::test_contract::test_verify_groth16_proof_bn254\",\n      \"test_name\": \"test_verify_groth16_proof_bn254\",\n      \"steps\": 228557,\n      \"sierra_gas\": 34080559,\n      \"image_path\": \"docs/benchmarks/test_verify_groth16_proof_bn254.png\",\n      \"category\": \"contracts\",\n      \"range_check\": 9785,\n      \"range_check96\": 67149,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 509,\n      \"add_mod\": 5401,\n      \"mul_mod\": 8754\n    }\n  },\n  \"test_verify_ultra_keccak_honk_proof\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"noir_ultra_keccak_honk_example_integrationtest::test_contract::test_verify_ultra_keccak_honk_proof\",\n      \"test_name\": \"test_verify_ultra_keccak_honk_proof\",\n      \"steps\": 1213031,\n      \"sierra_gas\": 187929077,\n      \"image_path\": \"docs/benchmarks/test_verify_ultra_keccak_honk_proof.png\",\n      \"category\": \"contracts\",\n      \"range_check\": 65539,\n      \"range_check96\": 412656,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 3180,\n      \"ecop\": 0,\n      \"poseidon\": 461,\n      \"add_mod\": 45756,\n      \"mul_mod\": 43585\n    }\n  },\n  \"test_msm_SECP256K1_3P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::msm_tests::test_msm_SECP256K1_3P\",\n      \"test_name\": \"test_msm_SECP256K1_3P\",\n      \"steps\": 26954,\n      \"sierra_gas\": 6257800,\n      \"image_path\": \"docs/benchmarks/test_msm_SECP256K1_3P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 3087,\n      \"range_check96\": 23194,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 2707,\n      \"mul_mod\": 2359\n    }\n  },\n  \"test_msm_SECP256R1_2P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::msm_tests::test_msm_SECP256R1_2P\",\n      \"test_name\": \"test_msm_SECP256R1_2P\",\n      \"steps\": 13465,\n      \"sierra_gas\": 4384404,\n      \"image_path\": \"docs/benchmarks/test_msm_SECP256R1_2P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 1053,\n      \"range_check96\": 19865,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 2363,\n      \"mul_mod\": 2166\n    }\n  },\n  \"test_BN254_mpcheck_3P_2F_with_extra_miller_loop_result\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::pairing_tests::test_BN254_mpcheck_3P_2F_with_extra_miller_loop_result\",\n      \"test_name\": \"test_BN254_mpcheck_3P_2F_with_extra_miller_loop_result\",\n      \"steps\": 59916,\n      \"sierra_gas\": 15391765,\n      \"image_path\": \"docs/benchmarks/test_BN254_mpcheck_3P_2F_with_extra_miller_loop_result.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 472,\n      \"range_check96\": 59008,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 509,\n      \"add_mod\": 4469,\n      \"mul_mod\": 7922\n    }\n  },\n  \"test_BLS12_381_mpcheck_2P_2F\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::pairing_tests::test_BLS12_381_mpcheck_2P_2F\",\n      \"test_name\": \"test_BLS12_381_mpcheck_2P_2F\",\n      \"steps\": 45132,\n      \"sierra_gas\": 8559824,\n      \"image_path\": \"docs/benchmarks/test_BLS12_381_mpcheck_2P_2F.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 308,\n      \"range_check96\": 25250,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 544,\n      \"add_mod\": 1420,\n      \"mul_mod\": 3340\n    }\n  },\n  \"test_BLS12_381_mpcheck_3P_2F_with_extra_miller_loop_result\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::pairing_tests::test_BLS12_381_mpcheck_3P_2F_with_extra_miller_loop_result\",\n      \"test_name\": \"test_BLS12_381_mpcheck_3P_2F_with_extra_miller_loop_result\",\n      \"steps\": 54316,\n      \"sierra_gas\": 12556430,\n      \"image_path\": \"docs/benchmarks/test_BLS12_381_mpcheck_3P_2F_with_extra_miller_loop_result.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 356,\n      \"range_check96\": 44885,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 586,\n      \"add_mod\": 3482,\n      \"mul_mod\": 5791\n    }\n  },\n  \"test_eddsa_0_0B\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::eddsa_tests::test_eddsa_0_0B\",\n      \"test_name\": \"test_eddsa_0_0B\",\n      \"steps\": 51814,\n      \"sierra_gas\": 9780832,\n      \"image_path\": \"docs/benchmarks/test_eddsa_0_0B.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 7549,\n      \"range_check96\": 20865,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 1656,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 2419,\n      \"mul_mod\": 2286\n    }\n  },\n  \"test_tower_final_exp_BN254\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::tower_pairing_tests::test_tower_final_exp_BN254\",\n      \"test_name\": \"test_tower_final_exp_BN254\",\n      \"steps\": 120363,\n      \"sierra_gas\": 39901404,\n      \"image_path\": \"docs/benchmarks/test_tower_final_exp_BN254.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 246,\n      \"range_check96\": 207134,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 31372,\n      \"mul_mod\": 14955\n    }\n  },\n  \"test_tower_final_exp_BLS12_381\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::tower_pairing_tests::test_tower_final_exp_BLS12_381\",\n      \"test_name\": \"test_tower_final_exp_BLS12_381\",\n      \"steps\": 123509,\n      \"sierra_gas\": 36972216,\n      \"image_path\": \"docs/benchmarks/test_tower_final_exp_BLS12_381.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 367,\n      \"range_check96\": 190906,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 31359,\n      \"mul_mod\": 11080\n    }\n  },\n  \"test_msm_SECP256K1_2P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::msm_tests::test_msm_SECP256K1_2P\",\n      \"test_name\": \"test_msm_SECP256K1_2P\",\n      \"steps\": 17919,\n      \"sierra_gas\": 4155260,\n      \"image_path\": \"docs/benchmarks/test_msm_SECP256K1_2P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 2061,\n      \"range_check96\": 15369,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 1799,\n      \"mul_mod\": 1564\n    }\n  },\n  \"test_BN254_mpcheck_2P_2F\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::pairing_tests::test_BN254_mpcheck_2P_2F\",\n      \"test_name\": \"test_BN254_mpcheck_2P_2F\",\n      \"steps\": 47930,\n      \"sierra_gas\": 10112792,\n      \"image_path\": \"docs/benchmarks/test_BN254_mpcheck_2P_2F.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 393,\n      \"range_check96\": 33047,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 460,\n      \"add_mod\": 1731,\n      \"mul_mod\": 4665\n    }\n  },\n  \"test_msm_SECP256K1_1P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::msm_tests::test_msm_SECP256K1_1P\",\n      \"test_name\": \"test_msm_SECP256K1_1P\",\n      \"steps\": 9221,\n      \"sierra_gas\": 2105654,\n      \"image_path\": \"docs/benchmarks/test_msm_SECP256K1_1P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 1037,\n      \"range_check96\": 7697,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 900,\n      \"mul_mod\": 783\n    }\n  },\n  \"test_deserialize_full_proof_with_hints_bls12_381\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::calldata_tests::test_deserialize_full_proof_with_hints_bls12_381\",\n      \"test_name\": \"test_deserialize_full_proof_with_hints_bls12_381\",\n      \"steps\": 22272,\n      \"sierra_gas\": 2557180,\n      \"image_path\": \"docs/benchmarks/test_deserialize_full_proof_with_hints_bls12_381.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 4714,\n      \"range_check96\": 0,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 0,\n      \"mul_mod\": 0\n    }\n  },\n  \"test_eddsa_16_32B\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::eddsa_tests::test_eddsa_16_32B\",\n      \"test_name\": \"test_eddsa_16_32B\",\n      \"steps\": 52391,\n      \"sierra_gas\": 9842274,\n      \"image_path\": \"docs/benchmarks/test_eddsa_16_32B.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 7643,\n      \"range_check96\": 20840,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 1656,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 2418,\n      \"mul_mod\": 2284\n    }\n  },\n  \"test_eddsa_32_64B\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::eddsa_tests::test_eddsa_32_64B\",\n      \"test_name\": \"test_eddsa_32_64B\",\n      \"steps\": 88025,\n      \"sierra_gas\": 14776560,\n      \"image_path\": \"docs/benchmarks/test_eddsa_32_64B.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 13786,\n      \"range_check96\": 20762,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 3288,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 2412,\n      \"mul_mod\": 2276\n    }\n  },\n  \"test_msm_SECP256R1_1P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::msm_tests::test_msm_SECP256R1_1P\",\n      \"test_name\": \"test_msm_SECP256R1_1P\",\n      \"steps\": 6991,\n      \"sierra_gas\": 2219716,\n      \"image_path\": \"docs/benchmarks/test_msm_SECP256R1_1P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 530,\n      \"range_check96\": 9945,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 1182,\n      \"mul_mod\": 1084\n    }\n  },\n  \"test_msm_SECP256R1_3P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::msm_tests::test_msm_SECP256R1_3P\",\n      \"test_name\": \"test_msm_SECP256R1_3P\",\n      \"steps\": 20115,\n      \"sierra_gas\": 6572368,\n      \"image_path\": \"docs/benchmarks/test_msm_SECP256R1_3P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 1576,\n      \"range_check96\": 29835,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 3546,\n      \"mul_mod\": 3252\n    }\n  },\n  \"test_verify_groth16_proof_bls12_381\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"groth16_example_bls12_381_integrationtest::test_contract::test_verify_groth16_proof_bls12_381\",\n      \"test_name\": \"test_verify_groth16_proof_bls12_381\",\n      \"steps\": 353527,\n      \"sierra_gas\": 49754798,\n      \"image_path\": \"docs/benchmarks/test_verify_groth16_proof_bls12_381.png\",\n      \"category\": \"contracts\",\n      \"range_check\": 10972,\n      \"range_check96\": 90280,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 586,\n      \"add_mod\": 7506,\n      \"mul_mod\": 10868\n    }\n  },\n  \"test_verify_ultra_keccak_zk_honk_proof\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"noir_ultra_keccak_zk_honk_example_integrationtest::test_contract::test_verify_ultra_keccak_zk_honk_proof\",\n      \"test_name\": \"test_verify_ultra_keccak_zk_honk_proof\",\n      \"steps\": 1306049,\n      \"sierra_gas\": 203546067,\n      \"image_path\": \"docs/benchmarks/test_verify_ultra_keccak_zk_honk_proof.png\",\n      \"category\": \"contracts\",\n      \"range_check\": 70398,\n      \"range_check96\": 451651,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 3476,\n      \"ecop\": 0,\n      \"poseidon\": 461,\n      \"add_mod\": 49914,\n      \"mul_mod\": 47993\n    }\n  },\n  \"test_verify_ultra_starknet_honk_proof\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"noir_ultra_starknet_honk_example_integrationtest::test_contract::test_verify_ultra_starknet_honk_proof\",\n      \"test_name\": \"test_verify_ultra_starknet_honk_proof\",\n      \"steps\": 1127871,\n      \"sierra_gas\": 177512050,\n      \"image_path\": \"docs/benchmarks/test_verify_ultra_starknet_honk_proof.png\",\n      \"category\": \"contracts\",\n      \"range_check\": 61433,\n      \"range_check96\": 412522,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 992,\n      \"add_mod\": 45742,\n      \"mul_mod\": 43569\n    }\n  },\n  \"test_tower_pairing_BN254_1P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::tower_pairing_tests::test_tower_pairing_BN254_1P\",\n      \"test_name\": \"test_tower_pairing_BN254_1P\",\n      \"steps\": 169865,\n      \"sierra_gas\": 64683758,\n      \"image_path\": \"docs/benchmarks/test_tower_pairing_BN254_1P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 322,\n      \"range_check96\": 346841,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 52433,\n      \"mul_mod\": 26808\n    }\n  },\n  \"test_tower_pairing_BLS12_381_1P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::tower_pairing_tests::test_tower_pairing_BLS12_381_1P\",\n      \"test_name\": \"test_tower_pairing_BLS12_381_1P\",\n      \"steps\": 165291,\n      \"sierra_gas\": 57232878,\n      \"image_path\": \"docs/benchmarks/test_tower_pairing_BLS12_381_1P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 430,\n      \"range_check96\": 306711,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 49635,\n      \"mul_mod\": 20003\n    }\n  },\n  \"test_tower_pairing_BLS12_381_3P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::tower_pairing_tests::test_tower_pairing_BLS12_381_3P\",\n      \"test_name\": \"test_tower_pairing_BLS12_381_3P\",\n      \"steps\": 248951,\n      \"sierra_gas\": 97763802,\n      \"image_path\": \"docs/benchmarks/test_tower_pairing_BLS12_381_3P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 556,\n      \"range_check96\": 538321,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 86187,\n      \"mul_mod\": 37849\n    }\n  },\n  \"test_verify_ultra_starknet_zk_honk_proof\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"noir_ultra_starknet_zk_honk_example_integrationtest::test_contract::test_verify_ultra_starknet_zk_honk_proof\",\n      \"test_name\": \"test_verify_ultra_starknet_zk_honk_proof\",\n      \"steps\": 1221360,\n      \"sierra_gas\": 193032648,\n      \"image_path\": \"docs/benchmarks/test_verify_ultra_starknet_zk_honk_proof.png\",\n      \"category\": \"contracts\",\n      \"range_check\": 66173,\n      \"range_check96\": 451576,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 1044,\n      \"add_mod\": 49911,\n      \"mul_mod\": 47987\n    }\n  },\n  \"test_tower_pairing_BLS12_381_2P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::tower_pairing_tests::test_tower_pairing_BLS12_381_2P\",\n      \"test_name\": \"test_tower_pairing_BLS12_381_2P\",\n      \"steps\": 207121,\n      \"sierra_gas\": 77498340,\n      \"image_path\": \"docs/benchmarks/test_tower_pairing_BLS12_381_2P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 493,\n      \"range_check96\": 422516,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 67911,\n      \"mul_mod\": 28926\n    }\n  },\n  \"test_tower_pairing_BN254_3P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::tower_pairing_tests::test_tower_pairing_BN254_3P\",\n      \"test_name\": \"test_tower_pairing_BN254_3P\",\n      \"steps\": 268869,\n      \"sierra_gas\": 114248466,\n      \"image_path\": \"docs/benchmarks/test_tower_pairing_BN254_3P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 474,\n      \"range_check96\": 626255,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 94555,\n      \"mul_mod\": 50514\n    }\n  },\n  \"test_tower_pairing_BN254_2P\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"garaga::tests::autogenerated::tower_pairing_tests::test_tower_pairing_BN254_2P\",\n      \"test_name\": \"test_tower_pairing_BN254_2P\",\n      \"steps\": 219367,\n      \"sierra_gas\": 89466112,\n      \"image_path\": \"docs/benchmarks/test_tower_pairing_BN254_2P.png\",\n      \"category\": \"garaga\",\n      \"range_check\": 398,\n      \"range_check96\": 486548,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 0,\n      \"ecop\": 0,\n      \"poseidon\": 0,\n      \"add_mod\": 73494,\n      \"mul_mod\": 38661\n    }\n  },\n  \"test_verify_r0_groth16_proof_bn254\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"risc0_verifier_bn254_integrationtest::test_contract::test_verify_r0_groth16_proof_bn254\",\n      \"test_name\": \"test_verify_r0_groth16_proof_bn254\",\n      \"steps\": 264545,\n      \"sierra_gas\": 42860813,\n      \"image_path\": \"docs/benchmarks/test_verify_r0_groth16_proof_bn254.png\",\n      \"category\": \"contracts\",\n      \"range_check\": 12069,\n      \"range_check96\": 74896,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 6698,\n      \"ecop\": 0,\n      \"poseidon\": 509,\n      \"add_mod\": 6303,\n      \"mul_mod\": 9541\n    }\n  },\n  \"test_verify_sp1_groth16_proof_bn254\": {\n    \"last_updated\": \"2025-10-30T15:26:00.944704\",\n    \"latest_metrics\": {\n      \"test_name_hierarchical\": \"sp1_verifier_bn254_integrationtest::test_contract::test_verify_sp1_groth16_proof_bn254\",\n      \"test_name\": \"test_verify_sp1_groth16_proof_bn254\",\n      \"steps\": 244680,\n      \"sierra_gas\": 38221851,\n      \"image_path\": \"docs/benchmarks/test_verify_sp1_groth16_proof_bn254.png\",\n      \"category\": \"contracts\",\n      \"range_check\": 11127,\n      \"range_check96\": 75027,\n      \"keccak\": 0,\n      \"pedersen\": 0,\n      \"bitwise\": 2230,\n      \"ecop\": 0,\n      \"poseidon\": 509,\n      \"add_mod\": 6314,\n      \"mul_mod\": 9555\n    }\n  }\n}\n"
  },
  {
    "path": "docs/gitbook/README.md",
    "content": "# Garaga\n\n<figure><img src=\".gitbook/assets/logo.png\" alt=\"Garaga Logo\" width=\"200\"><figcaption></figcaption></figure>\n\n## State-of-the-Art Elliptic Curve Tooling & ZK Proof Verification for Starknet\n\nGaraga enables **efficient verification of zero-knowledge proofs** and **cryptographic operations** on Starknet. It achieves state-of-the-art performance through:\n\n* A **dedicated builtin** from StarkWare for emulated modular arithmetic\n* **Non-deterministic techniques** for extension field multiplication, pairings, and multi-scalar multiplication\n* **Precomputed verification hints** that dramatically reduce on-chain computation\n\n***\n\n## What Can You Build?\n\n<table data-view=\"cards\"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>🛡️ ZK Proof Verification</strong></td><td>Verify Groth16 and Honk proofs on-chain with production-ready verifier contracts.</td><td><a href=\"smart-contract-generators/\">Learn more →</a></td></tr><tr><td><strong>🔗 zkVM Integration</strong></td><td>Verify proofs from RISC Zero and SP1 using maintained, audited contracts.</td><td><a href=\"maintained-smart-contracts/\">Learn more →</a></td></tr><tr><td><strong>✍️ Signature Verification</strong></td><td>ECDSA, Schnorr, and EdDSA verification across multiple elliptic curves.</td><td><a href=\"using-garaga-libraries-in-your-cairo-project/ec-signatures.md\">Learn more →</a></td></tr><tr><td><strong>🎲 Randomness & Time-Lock Encryption</strong></td><td>On-chain drand verification for provably fair randomness, plus tlock encryption that only decrypts after a future time.</td><td><a href=\"maintained-smart-contracts/drand.md\">Learn more →</a></td></tr><tr><td><strong>🧮 Elliptic Curve Operations</strong></td><td>Multi-scalar multiplication on 6 curves, pairing operations for BN254/BLS12-381.</td><td><a href=\"using-garaga-libraries-in-your-cairo-project/ec-multi-scalar-multiplication.md\">Learn more →</a></td></tr><tr><td><strong>🔒 Privacy-Preserving dApps</strong></td><td>Build applications with Noir/Honk circuits for complex privacy logic.</td><td><a href=\"smart-contract-generators/noir.md\">Learn more →</a></td></tr></tbody></table>\n\n***\n\n## Architecture Overview\n\n```\n┌──────────────────────────────────────────────────────────────────────────────┐\n│                           YOUR STARKNET DAPP                                 │\n├──────────────────────────────────────────────────────────────────────────────┤\n│                                                                              │\n│   Smart Contract Generators          │       Cairo Libraries                 │\n│   ─────────────────────────          │       ───────────────                 │\n│   • Groth16 Verifier (BN254/BLS)     │       • EC Operations (MSM)           │\n│   • Noir/Honk Verifier               │       • Signatures (ECDSA/Schnorr)    │\n│   • Custom circuit verifiers         │       • Pairing Checks                │\n│                                      │       • Hashing (SHA-512, Poseidon)   │\n│                                                                              │\n├──────────────────────────────────────────────────────────────────────────────┤\n│                       Maintained Contracts (Declared on Mainnet)             │\n│   ─────────────────────────────────────────────────────────────              │\n│   • Universal ECIP (MSM)  • RISC Zero  • SP1  • Drand Verifier  • Drand tlock │\n│                                                                              │\n├──────────────────────────────────────────────────────────────────────────────┤\n│                         SDK (Python / Rust / TypeScript)                     │\n│   ─────────────────────────────────────────────────────────────              │\n│   Calldata generation • Proof preprocessing • Contract generation            │\n│                                                                              │\n├──────────────────────────────────────────────────────────────────────────────┤\n│  Supported Curves                                                            │\n│  ────────────────                                                            │\n│  BN254 │ BLS12-381 │ SECP256K1 │ SECP256R1 │ ED25519 │ GRUMPKIN             │\n│                                                                              │\n└──────────────────────────────────────────────────────────────────────────────┘\n```\n\n***\n\n## Performance\n\nGaraga achieves remarkable efficiency through optimized Cairo implementations. See the [full benchmark suite](https://github.com/keep-starknet-strange/garaga#cairo-benchmarks) for detailed metrics on all operations including:\n\n* Groth16 verification (BN254 & BLS12-381)\n* Honk/Noir proof verification\n* RISC Zero & SP1 proof verification\n* Signature verification (ECDSA, Schnorr, EdDSA)\n* Multi-scalar multiplication\n* Pairing operations\n\n***\n\n## Version Compatibility\n\n{% hint style=\"warning\" %}\n**Important:** Garaga SDK versions (Python, Rust, npm) must match across your toolchain to ensure calldata is correctly formatted for on-chain verification.\n\n* **For generated contracts** (Groth16, Noir): Use the same SDK version that generated your verifier contract\n* **For maintained contracts** (RISC Zero, SP1, drand): Use the SDK version matching the Garaga release that declared the contract class hashes\n\nAll packages are released together with matching version numbers (e.g., `pip install garaga==1.1.0` + `garaga = \"1.1.0\"` in Scarb.toml + `garaga_rs` tag `v1.1.0` + `npm install garaga@1.1.0`).\n{% endhint %}\n\n***\n\n## Quick Start\n\n### 1. Install\n\n{% tabs %}\n{% tab title=\"Python (Recommended)\" %}\n```bash\npip install garaga\n```\n{% endtab %}\n\n{% tab title=\"Cairo Library\" %}\n```bash\nscarb add garaga\n```\n\nOr add to `Scarb.toml`:\n\n```toml\n[dependencies]\ngaraga = \"1.1.0\"\n```\n{% endtab %}\n\n{% tab title=\"Rust\" %}\n```bash\ncargo add garaga_rs\n```\n{% endtab %}\n\n{% tab title=\"npm\" %}\n```bash\nnpm install garaga\n```\n{% endtab %}\n{% endtabs %}\n\n### 2. Generate a Verifier Contract\n\n```bash\n# Generate a Groth16 verifier from your verification key\ngaraga gen --system groth16 --vk your_vk.json\n\n# Or generate a Noir/Honk verifier\ngaraga gen --system ultra_keccak_honk --vk target/vk\n```\n\n### 3. Deploy & Verify\n\n```bash\n# Declare and deploy your contract\ngaraga declare\ngaraga deploy --class-hash <CLASS_HASH>\n\n# Verify a proof on-chain\ngaraga verify-onchain --address <CONTRACT_ADDRESS> \\\n  --vk your_vk.json --proof proof.json --public-inputs inputs.json\n```\n\n***\n\n## Production Ready\n\nGaraga is used in production by teams building:\n\n* **Validity rollups** and L2 solutions\n* **Cross-chain bridges** with ZK verification\n* **Privacy-preserving applications**\n* **Verifiable computation** platforms\n\n### Security\n\n* ✅ [**Audited**](https://github.com/keep-starknet-strange/garaga/blob/main/docs/Garaga-audit-report-v2.pdf) by [CryptoExperts](https://www.cryptoexperts.com/)\n* ✅ **Battle-tested** on Starknet mainnet\n* ✅ **Open source** under MIT license\n\n***\n\n## Resources\n\n* **GitHub**: [github.com/keep-starknet-strange/garaga](https://github.com/keep-starknet-strange/garaga)\n* **Telegram**: [t.me/GaragaPairingCairo](https://t.me/GaragaPairingCairo)\n* **Academic Papers**: See [References](./#references) below\n\n***\n\n## References\n\nGaraga's cryptographic implementations are based on peer-reviewed research:\n\n1. **Groth16**: Groth, J. \"On the Size of Pairing-Based Non-interactive Arguments.\" EUROCRYPT 2016. [ePrint 2016/260](https://eprint.iacr.org/2016/260)\n2. **Efficient Pairings**: El Housni, Y. \"Pairings in Rank-1 Constraint Systems.\" [ePrint 2022/1162](https://eprint.iacr.org/2022/1162)\n3. **ECIP**: Eagen, L. \"Zero Knowledge Proofs of Elliptic Curve Inner Products.\" [ePrint 2022/596](https://eprint.iacr.org/2022/596)\n4. **On Proving Pairings**: Novakovic, A. & Eagen, L. [ePrint 2024/640](https://eprint.iacr.org/2024/640)\n5. **Fast EC Scalar Multiplications**: Eagen, L., El Housni, Y., Masson, S., Piellard, T. [ePrint 2025/933](https://eprint.iacr.org/2025/933)\n"
  },
  {
    "path": "docs/gitbook/SUMMARY.md",
    "content": "# Table of contents\n\n* [Garaga](README.md)\n* [Building Powerful Applications](building-powerful-applications.md)\n* [Security](security.md)\n* [Installation](installation/README.md)\n  * [Python package](installation/python-package.md)\n  * [Cairo Library](installation/cairo-library.md)\n  * [Rust Crate](installation/rust-crate.md)\n  * [Npm package](installation/npm-package.md)\n* [Developer setup & guides](developer-setup-and-guides/README.md)\n  * [Working with auto-generated Cairo Code](developer-setup-and-guides/working-with-auto-generated-cairo-code.md)\n  * [garaga-rs crate](developer-setup-and-guides/garaga-rs-crate/README.md)\n    * [Rust -> Python bindings](developer-setup-and-guides/garaga-rs-crate/rust-greater-than-python-bindings.md)\n    * [Rust -> Wasm bindings](developer-setup-and-guides/garaga-rs-crate/rust-greater-than-wasm-bindings.md)\n* [Using garaga libraries in your Cairo project](using-garaga-libraries-in-your-cairo-project/README.md)\n  * [EC (Multi)-Scalar Multiplication](using-garaga-libraries-in-your-cairo-project/ec-multi-scalar-multiplication.md)\n  * [ECDSA, Schnorr & EdDSA Signatures](using-garaga-libraries-in-your-cairo-project/ec-signatures.md)\n  * [RSA-2048 Signatures](using-garaga-libraries-in-your-cairo-project/rsa-signatures.md)\n  * [Hashing functions](using-garaga-libraries-in-your-cairo-project/hashing-functions.md)\n* [Smart Contract Generators](smart-contract-generators/README.md)\n  * [Groth16 Verifier](smart-contract-generators/groth16/README.md)\n    * [Generate and deploy your verifier contract](smart-contract-generators/groth16/generate-and-deploy-your-verifier-contract.md)\n    * [Generating calldata from a proof and using your deployed contract](smart-contract-generators/groth16/generating-calldata-from-a-proof-and-using-your-deployed-contract/README.md)\n      * [Using Python/Garaga CLI](smart-contract-generators/groth16/generating-calldata-from-a-proof-and-using-your-deployed-contract/using-python-garaga-cli.md)\n      * [Using Rust](smart-contract-generators/groth16/generating-calldata-from-a-proof-and-using-your-deployed-contract/using-rust.md)\n      * [Using Typescript](smart-contract-generators/groth16/generating-calldata-from-a-proof-and-using-your-deployed-contract/using-typescript.md)\n  * [Noir Verifier](smart-contract-generators/noir.md)\n* [Maintained Smart Contracts](maintained-smart-contracts/README.md)\n  * [RiscZero](maintained-smart-contracts/risczero.md)\n  * [SP1](maintained-smart-contracts/sp1.md)\n  * [Drand](maintained-smart-contracts/drand.md)\n* [Support](support.md)\n* [Updating these docs](updating-these-docs.md)\n"
  },
  {
    "path": "docs/gitbook/building-powerful-applications.md",
    "content": "---\nicon: rocket\n---\n\n# Building Powerful Applications\n\nGaraga's cryptographic primitives enable a wide range of powerful applications on Starknet. This page showcases what you can build and links to production-ready implementations.\n\n***\n\n## Validity Rollups & L2 Solutions\n\nVerify SNARK proofs on Starknet to build trustless bridges and rollup solutions.\n\n### How It Works\n\n1. **Off-chain**: Execute computation and generate a ZK proof (Groth16 or Honk)\n2. **On-chain**: Verify the proof using Garaga's optimized verifier contracts\n3. **Result**: Trustless verification of arbitrary computation\n\n### Example: Cross-Chain Bridge\n\n```rust\nuse garaga::groth16::{Groth16Proof, verify_groth16_proof};\n\n#[starknet::contract]\nmod Bridge {\n    #[storage]\n    struct Storage {\n        processed_proofs: LegacyMap<felt252, bool>,\n    }\n\n    #[external(v0)]\n    fn process_deposit(\n        ref self: ContractState,\n        proof_with_hints: Span<felt252>,\n        deposit_hash: felt252,\n    ) -> Result<(), felt252> {\n        // Verify the proof that a deposit occurred on the source chain\n        let public_inputs = verify_groth16_proof(proof_with_hints)?;\n\n        // Check the deposit hash matches\n        assert(*public_inputs.at(0) == deposit_hash, 'Invalid deposit');\n\n        // Process the deposit...\n        Result::Ok(())\n    }\n}\n```\n\n{% hint style=\"info\" %}\n**Real-world usage**: Teams use Garaga to verify proofs from RISC Zero and SP1 zkVMs, enabling trustless verification of arbitrary Rust programs on Starknet.\n{% endhint %}\n\n***\n\n## Privacy-Preserving Applications\n\nBuild applications where users can prove statements without revealing underlying data.\n\n### Use Cases\n\n| Application                | What's Proven             | What's Hidden      |\n| -------------------------- | ------------------------- | ------------------ |\n| **Private Voting**         | Vote is valid and counted | Who voted for whom |\n| **Anonymous Credentials**  | User meets criteria       | User's identity    |\n| **Confidential Transfers** | Balance is sufficient     | Transfer amount    |\n| **Private Auctions**       | Bid is valid              | Bid amount         |\n\n### Implementation with Noir\n\nNoir makes it easy to write privacy-preserving circuits:\n\n```rust\n// circuit.nr - Private voting circuit\nfn main(\n    // Private inputs (not revealed on-chain)\n    private_key: Field,\n    vote_choice: Field,\n\n    // Public inputs (verified on-chain)\n    public_key_hash: pub Field,\n    merkle_root: pub Field,\n    nullifier: pub Field,\n) {\n    // Prove ownership of private key\n    let computed_hash = std::hash::pedersen([private_key]);\n    assert(computed_hash == public_key_hash);\n\n    // Prove membership in voter set (merkle proof)\n    // ... merkle verification ...\n\n    // Generate unique nullifier to prevent double voting\n    let computed_nullifier = std::hash::pedersen([private_key, vote_choice]);\n    assert(computed_nullifier == nullifier);\n}\n```\n\nThen verify on Starknet with a single function call.\n\n***\n\n## Verifiable Randomness (drand)\n\nGenerate provably fair random numbers using the [drand](https://drand.love) distributed randomness beacon.\n\n### Why drand?\n\n* **Unpredictable**: Random values can't be known before they're generated\n* **Unbiasable**: No single party can influence the output\n* **Publicly verifiable**: Anyone can verify the randomness is legitimate\n\n### Example: On-Chain Lottery\n\nUse the maintained drand verifier contract via library call:\n\n```rust\nuse starknet::{SyscallResultTrait, syscalls};\n\nconst DRAND_QUICKNET_CLASS_HASH: felt252 =\n    0x1628f8e2d8ad8c26aea873b13703e4421f2c01a57c0c4974e599490ee30677d;\n\n#[starknet::contract]\nmod Lottery {\n    use starknet::storage::{Map, StorageMapReadAccess, StoragePointerReadAccess};\n    use super::{DRAND_QUICKNET_CLASS_HASH, SyscallResultTrait, syscalls};\n\n    #[storage]\n    struct Storage {\n        participants: Map<u32, ContractAddress>,\n        participant_count: u32,\n        target_round: u64,\n    }\n\n    #[external(v0)]\n    fn draw_winner(\n        ref self: ContractState,\n        full_proof_with_hints: Span<felt252>,\n    ) -> ContractAddress {\n        // Serialize calldata for library call\n        let mut call_data: Array<felt252> = array![];\n        Serde::serialize(@full_proof_with_hints, ref call_data);\n\n        // Verify drand signature via library call to maintained contract\n        let mut result = syscalls::library_call_syscall(\n            DRAND_QUICKNET_CLASS_HASH.try_into().unwrap(),\n            selector!(\"verify_round\"),\n            call_data.span(),\n        ).unwrap_syscall();\n\n        let round_result: Result<u64, felt252> = Serde::deserialize(ref result).unwrap();\n        let verified_round = round_result.unwrap();\n\n        // Ensure we're using the correct round\n        assert!(verified_round == self.target_round.read(), \"Wrong round\");\n\n        // Retrieve randomness for the verified round\n        let mut rand_call_data: Array<felt252> = array![];\n        Serde::serialize(@verified_round, ref rand_call_data);\n\n        let mut rand_result = syscalls::library_call_syscall(\n            DRAND_QUICKNET_CLASS_HASH.try_into().unwrap(),\n            selector!(\"get_randomness_for_round\"),\n            rand_call_data.span(),\n        ).unwrap_syscall();\n\n        let randomness: Result<felt252, felt252> = Serde::deserialize(ref rand_result).unwrap();\n\n        // Use randomness to select winner\n        let count: u256 = self.participant_count.read().into();\n        let winner_index: u32 = (randomness.unwrap().into() % count).try_into().unwrap();\n        self.participants.read(winner_index)\n    }\n}\n```\n\n{% hint style=\"success\" %}\n**Production contract available**: Use the [maintained drand verifier](maintained-smart-contracts/drand.md) via library call - no deployment needed!\n{% endhint %}\n\n***\n\n## Signature Verification at Scale\n\nVerify signatures from external systems (Bitcoin, Ethereum, Solana) on Starknet.\n\n### Supported Signature Schemes\n\n| Scheme      | Curves                                 | Use Case                      |\n| ----------- | -------------------------------------- | ----------------------------- |\n| **ECDSA**   | SECP256K1, SECP256R1, BN254, BLS12-381 | Bitcoin, Ethereum, WebAuthn   |\n| **Schnorr** | All Weierstrass curves                 | BIP340 (Taproot), general use |\n| **EdDSA**   | Ed25519                                | Solana, general use           |\n\n### Example: Multi-Chain Message Verification\n\n```rust\nuse garaga::signatures::ecdsa::{ECDSASignatureWithHint, is_valid_ecdsa_signature_assuming_hash};\nuse garaga::definitions::G1Point;\n\nfn verify_ethereum_message(\n    signature_with_hints: ECDSASignatureWithHint,\n    public_key: G1Point,\n    message_hash: u256,\n) -> bool {\n    // curve_id 2 = SECP256K1 (Ethereum's curve)\n    is_valid_ecdsa_signature_assuming_hash(signature_with_hints, public_key, 2)\n}\n\nfn verify_webauthn_signature(\n    signature_with_hints: ECDSASignatureWithHint,\n    public_key: G1Point,\n    message_hash: u256,\n) -> bool {\n    // curve_id 3 = SECP256R1 (WebAuthn/Passkeys)\n    is_valid_ecdsa_signature_assuming_hash(signature_with_hints, public_key, 3)\n}\n```\n\n***\n\n## zkVM Proof Verification\n\nVerify proofs from zkVMs like RISC Zero and SP1 to enable trustless execution of arbitrary programs.\n\n### Architecture\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                    Off-Chain (zkVM)                         │\n│  ┌─────────────────────────────────────────────────────┐   │\n│  │  Your Rust Program                                   │   │\n│  │  - Complex business logic                            │   │\n│  │  - State transitions                                 │   │\n│  │  - Any computation you can write in Rust             │   │\n│  └─────────────────────────────────────────────────────┘   │\n│                          ↓                                  │\n│  ┌─────────────────────────────────────────────────────┐   │\n│  │  zkVM (RISC Zero / SP1)                              │   │\n│  │  - Executes program                                  │   │\n│  │  - Generates Groth16 proof                           │   │\n│  └─────────────────────────────────────────────────────┘   │\n└─────────────────────────────────────────────────────────────┘\n                          ↓ proof\n┌─────────────────────────────────────────────────────────────┐\n│                    On-Chain (Starknet)                      │\n│  ┌─────────────────────────────────────────────────────┐   │\n│  │  Garaga Verifier Contract                            │   │\n│  │  - Verifies Groth16 proof                            │   │\n│  │  - Returns public outputs                            │   │\n│  └─────────────────────────────────────────────────────┘   │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### Getting Started\n\nSee the maintained contracts:\n\n* [RISC Zero Integration](maintained-smart-contracts/risczero.md)\n* [SP1 Integration](maintained-smart-contracts/sp1.md)\n\n***\n\n## Time-Lock Encryption (tlock)\n\nEncrypt data that can only be decrypted at a specific future time, using drand's distributed randomness beacon. Decryption can happen entirely on-chain.\n\n### How It Works\n\n1. **Encrypt** a 16-byte message for a future drand round `N` using the SDK (Python, Rust, or TypeScript)\n2. **Wait** for drand to publish round `N`\n3. **Decrypt on-chain** by verifying the drand signature and using it to recover the message\n\n### Use Cases\n\n* **Sealed-bid auctions**: Bids are encrypted until the auction ends\n* **Scheduled reveals**: Information released at a predetermined time\n* **Fair launches**: Token distributions with time-locked claiming\n* **Commit-reveal schemes**: Players commit encrypted moves, revealed together\n\n### Example: Encrypt Off-Chain, Decrypt On-Chain\n\n{% tabs %}\n{% tab title=\"Python\" %}\n```python\nfrom garaga.starknet.tests_and_calldata_generators.drand_calldata import (\n    drand_encrypt_to_calldata,\n)\n\n# Encrypt a 16-byte message for a future round\nmessage = b\"secret message!!\"  # exactly 16 bytes\ncalldata = drand_encrypt_to_calldata(round_number=100000, message=message)\n# Submit calldata to the decrypt contract once the round is published\n```\n{% endtab %}\n\n{% tab title=\"TypeScript\" %}\n```typescript\nimport * as garaga from 'garaga';\nawait garaga.init();\n\nconst message = new Uint8Array(16);\nmessage.set(new TextEncoder().encode('secret message!!'));\nconst randomness = crypto.getRandomValues(new Uint8Array(16));\n\nconst calldata = garaga.encryptToDrandRoundAndGetCallData(100000, message, randomness);\n```\n{% endtab %}\n{% endtabs %}\n\n{% hint style=\"success\" %}\n**Production contracts available**: Use the [maintained drand decrypt contract](maintained-smart-contracts/drand.md) for on-chain tlock decryption. See the [full tlock documentation](maintained-smart-contracts/drand.md#time-lock-encryption-tlock) for details.\n{% endhint %}\n\n***\n\n## Build Your Own\n\nThe primitives above can be combined to create novel applications:\n\n| Combination                | Application                                    |\n| -------------------------- | ---------------------------------------------- |\n| Groth16 + Signatures       | Cross-chain asset bridges                      |\n| Noir + drand               | Private lotteries with verifiable randomness   |\n| tlock + Noir               | Sealed-bid auctions with private bid amounts   |\n| zkVM + MSM                 | Verifiable ML inference                        |\n| EdDSA + Groth16            | Solana → Starknet bridges                      |\n\n**Need help?** Join our [Telegram community](https://t.me/GaragaPairingCairo) to discuss your use case.\n"
  },
  {
    "path": "docs/gitbook/developer-setup-and-guides/README.md",
    "content": "---\nicon: wrench\n---\n\n# Developer setup & guides\n\n### Installation\n\nTo work with Garaga, you need the following dependencies :\n\n* [Rust](https://www.rust-lang.org/tools/install)\n* [Scarb](https://docs.swmansion.com/scarb/download.html) with the version specified in [https://github.com/keep-starknet-strange/garaga/blob/main/src/.tool-versions](https://github.com/keep-starknet-strange/garaga/blob/main/src/.tool-versions)\n\nPython 3.10-3.14 is used for development but does **not** need to be installed manually — `make setup` will auto-install it via [uv](https://docs.astral.sh/uv/) if it's not already available.\n\nSimply clone the [repository](https://github.com/keep-starknet-strange/garaga) :\n\nUsing git:\n\n```bash\ngit clone https://github.com/keep-starknet-strange/garaga.git\n```\n\nUsing [github cli ](https://cli.github.com/):\n\n```bash\ngh repo clone keep-starknet-strange/garaga\n```\n\nAfter that, go into the root of the directory and run the command :\n\n```bash\nmake setup\n```\n\nThis will automatically install [uv](https://docs.astral.sh/uv/) and Python 3.14 if needed, create a virtual environment, install all dependencies, and build the Rust extension. The setup is idempotent — running it again updates dependencies without recreating the venv.\n\nPay attention to any message indicating failure. Contact us on Garaga telegram if you have any trouble at this point.\n\nIf everything succeeded, you're good to go!\n\n{% hint style=\"info\" %}\nMake sure to activate the virtual environment created with this setup, using `source venv/bin/activate`\n{% endhint %}\n\n---\n\n## Project Architecture\n\nUnderstanding the Garaga codebase structure:\n\n```\ngaraga/\n├── hydra/garaga/           # Python SDK and circuit generators\n│   ├── starknet/cli/       # CLI commands (gen, declare, deploy, verify)\n│   ├── precompiled_circuits/  # Circuit definitions\n│   └── hints/              # Cryptographic hints for Cairo\n├── src/                    # Cairo code\n│   ├── src/                # Main Cairo library (garaga package)\n│   └── contracts/          # Example smart contracts\n├── tools/\n│   ├── garaga_rs/          # Rust crate (Python/WASM bindings)\n│   ├── npm/garaga_ts/      # TypeScript SDK\n│   └── make/               # Build scripts\n└── tests/                  # Python and E2E tests\n```\n\n### Key Components\n\n| Component | Location | Purpose |\n|-----------|----------|---------|\n| Python SDK | `hydra/garaga/` | CLI, circuit generation, proof processing |\n| Rust Crate | `tools/garaga_rs/` | Performance-critical operations |\n| Cairo Library | `src/src/` | On-chain verification |\n| TypeScript SDK | `tools/npm/garaga_ts/` | Browser/Node.js integration |\n\n---\n\n## Common Commands\n\n### Development\n\n```bash\n# Format code\nmake fmt\n\n# Regenerate Cairo code from Python circuits\nmake rewrite\n\n# Run Python tests\npytest -n auto\n\n# Run Cairo tests\nscarb test\n\n# Run Rust tests\ncargo test -p garaga_rs\n```\n\n### Building\n\n```bash\n# Build Python package with Rust extension\nmaturin develop --release --features python\n\n# Build WASM package\nmake wasm\n```\n\n### Profiling\n\n```bash\n# Profile a specific test\nmake profile-test TEST=<test_name>\n\n# Generate benchmarks\nmake benchmarks\n```\n\n---\n\n## Next Steps\n\n- [Working with auto-generated Cairo Code](working-with-auto-generated-cairo-code.md)\n- [garaga-rs crate](garaga-rs-crate/) — Rust library and bindings\n"
  },
  {
    "path": "docs/gitbook/developer-setup-and-guides/garaga-rs-crate/README.md",
    "content": "---\nicon: crab\n---\n\n# garaga-rs crate\n\nThe `garaga_rs` crate is the performance-critical Rust library that powers Garaga's cryptographic operations. It provides high-performance implementations of elliptic curve operations, pairing computations, and proof serialization, with bindings to both Python (via PyO3) and WebAssembly (via wasm-bindgen).\n\n## Overview\n\nThe crate serves as the computational backend for Garaga, accelerating operations that would be too slow in pure Python:\n\n- **Elliptic curve operations**: Point addition, scalar multiplication, multi-scalar multiplication (MSM)\n- **Pairing computations**: Miller loop, final exponentiation, multi-pairing checks\n- **Proof serialization**: Calldata generation for Groth16, Honk, and signature verification\n- **Cryptographic hints**: GLV decomposition, ECIP protocol, Frobenius maps\n\n## Module Structure\n\n```\ntools/garaga_rs/src/\n├── lib.rs                 # Crate entry point\n├── definitions.rs         # Curve definitions (6 curves)\n├── io.rs                  # Field element serialization\n├── algebra/               # EC operations\n│   ├── g1point.rs         # G1 point arithmetic\n│   ├── g2point.rs         # G2 point arithmetic\n│   ├── polynomial.rs      # Polynomial operations\n│   └── extf_mul.rs        # Extension field multiplication\n├── calldata/              # Proof serialization\n│   ├── msm_calldata.rs    # MSM calldata generation\n│   ├── mpc_calldata.rs    # Multi-pairing check calldata\n│   └── full_proof_with_hints/\n│       ├── groth16.rs     # Groth16 (+ RISC0, SP1)\n│       └── zk_honk.rs     # ZK Honk calldata\n├── pairing/               # Pairing operations\n│   ├── multi_miller_loop.rs\n│   └── final_exp_witness/\n├── ecip/                  # ECIP protocol\n│   ├── core.rs            # ECIP hint generation\n│   └── ff.rs              # Function field arithmetic\n├── hints/                 # Cryptographic hints\n│   ├── fake_glv.rs        # GLV decomposition\n│   └── eisenstein.rs      # Eisenstein integers\n├── crypto/                # Hash functions\n│   ├── poseidon_bn254.rs  # Poseidon hash\n│   └── mmr/               # Merkle Mountain Range\n├── python_bindings/       # PyO3 bindings\n└── wasm_bindings.rs       # WASM bindings\n```\n\n## Supported Curves\n\n| ID | Curve | Use Cases |\n|----|-------|-----------|\n| 0 | BN254 | Groth16, Honk, RISC0, SP1 |\n| 1 | BLS12-381 | Groth16, drand signatures |\n| 2 | SECP256K1 | Bitcoin/Ethereum ECDSA |\n| 3 | SECP256R1 | NIST P-256, WebAuthn |\n| 4 | X25519/ED25519 | EdDSA signatures |\n| 5 | GRUMPKIN | Noir circuits |\n\n## Feature Flags\n\nThe crate uses feature flags to control which bindings are compiled:\n\n```toml\n[features]\ndefault = []           # Pure Rust library\npython = [\"pyo3\"]      # Python bindings via PyO3\nwasm = [\"wasm-bindgen\", \"js-sys\"]  # WASM bindings\n```\n\n## Key Exports\n\n### Python Bindings\n\nWhen compiled with `--features python`, the following functions are available:\n\n```python\nfrom garaga import garaga_rs\n\n# G2 operations\ngaraga_rs.g2_add(...)\ngaraga_rs.g2_scalar_mul(...)\n\n# Pairing operations\ngaraga_rs.multi_pairing(...)\ngaraga_rs.multi_miller_loop(...)\ngaraga_rs.final_exp(...)\n\n# Hint generation\ngaraga_rs.get_final_exp_witness(...)\ngaraga_rs.zk_ecip_hint(...)\n\n# Calldata builders\ngaraga_rs.msm_calldata_builder(...)\ngaraga_rs.mpc_calldata_builder(...)\ngaraga_rs.get_groth16_calldata(...)\ngaraga_rs.get_zk_honk_calldata(...)\n\n# Signatures\ngaraga_rs.schnorr_calldata_builder(...)\ngaraga_rs.ecdsa_calldata_builder(...)\ngaraga_rs.eddsa_calldata_builder(...)\n\n# Hashing\ngaraga_rs.poseidon_hash_bn254(...)\ngaraga_rs.hades_permutation(...)\n\n# Extension field\ngaraga_rs.nondeterministic_extension_field_mul_divmod(...)\n\n# drand\ngaraga_rs.drand_calldata_builder(...)\n```\n\n### WASM Bindings\n\nWhen compiled with `--features wasm`, similar functions are exported for JavaScript/TypeScript use via `wasm-bindgen`.\n\n## Building\n\n### For Python (via maturin)\n\n```bash\ncd tools/garaga_rs\nmaturin develop --release --features python\n```\n\n### For WASM\n\n```bash\ncd tools/garaga_rs\nwasm-pack build --target web --release --no-default-features --features wasm\n```\n\n### Docker build (reproducible)\n\n```bash\ncd tools/npm/garaga_ts\ndocker compose up --build\n```\n\n## Testing\n\n```bash\ncd tools/garaga_rs\ncargo test\n```\n\n## Dependencies\n\nKey external crates:\n\n- **lambdaworks-math/crypto**: Field arithmetic and cryptographic primitives\n- **num-bigint**: Arbitrary precision integers\n- **pyo3**: Python bindings (optional)\n- **wasm-bindgen**: WASM bindings (optional)\n- **sha2/sha3**: Hash functions\n- **rayon**: Parallel computation\n\n## Next Steps\n\n- [Rust -> Python bindings](rust-greater-than-python-bindings.md) — Adding new Python bindings\n- [Rust -> WASM bindings](rust-greater-than-wasm-bindings.md) — Adding new WASM bindings\n"
  },
  {
    "path": "docs/gitbook/developer-setup-and-guides/garaga-rs-crate/rust-greater-than-python-bindings.md",
    "content": "# Rust -> Python bindings\n\nThis guide explains how to add new Python bindings for Rust functions in the `garaga_rs` crate.\n\n## Overview\n\nThe Python bindings are implemented using PyO3, which provides a safe and ergonomic way to create Python extensions in Rust. The bindings are located in the `tools/garaga_rs/src/python_bindings` directory.\n\n## Adding a new binding\n\n1. Create a new file in `tools/garaga_rs/src/python_bindings/` for your binding\n2. Add the module to `mod.rs`\n3. Implement your binding function\n4. Register the function in the `garaga_rs` module\n\n## Type Conversions\n\n### Common Type Conversions\n\n1. **Python Int -> Rust BigUint**\n```rust\nlet py_int: &Bound<'_, PyInt> = ...;\nlet biguint: BigUint = py_int.extract()?;\n```\n\n2. **Rust BigUint -> Python Int**\n```rust\nlet biguint: BigUint = ...;\nOk(biguint.into_pyobject(py)?.into())\n```\n\n3. **Python List -> Rust Vec**\n```rust\nlet py_list: &Bound<'_, PyList> = ...;\nlet values: Vec<BigUint> = py_list\n    .into_iter()\n    .map(|x| x.extract())\n    .collect::<Result<Vec<BigUint>, _>>()?;\n```\n\n4. **Python Bytes -> Rust Bytes**\n```rust\nlet py_bytes: &Bound<'_, PyBytes> = ...;\nlet bytes = py_bytes.as_bytes();\n```\n\n5. **Field Elements**\n```rust\n// Python Int -> Field Element\nlet fe = element_from_biguint::<YourField>(&biguint);\n\n// Field Element -> Python Int\nlet biguint = element_to_biguint(&fe);\n```\n\n### Error Handling\n\n1. **Converting Rust Errors to Python**\n```rust\n// For custom errors\n.map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n// For simple error propagation\n.map_err(|e| PyErr::new::<pyo3::exceptions::PyValueError, _>(e.to_string()))?\n```\n\n2. **Enum Conversion**\n```rust\nlet value = YourEnum::try_from(py_value)\n    .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n```\n\n### Common Patterns\n\n1. **Function Declaration**\n```rust\n#[pyfunction]\n#[allow(clippy::too_many_arguments)]  // If needed for complex functions\npub fn your_function(\n    py: Python,\n    // ... parameters ...\n) -> PyResult<PyObject> {\n    // Implementation\n}\n```\n\n2. **Returning Results**\n```rust\n// For single values\nOk(result.into_pyobject(py)?.into())\n\n// For lists\nlet py_list = PyList::new(py, result);\nOk(py_list?.into())\n\n// For tuples\nOk(PyTuple::new(py, &[x, y]).into())\n```\n\n## Example Implementation\n\nHere's a complete example showing common patterns:\n\n```rust\nuse pyo3::prelude::*;\nuse pyo3::types::{PyInt, PyList, PyBytes};\nuse num_bigint::BigUint;\n\n#[pyfunction]\npub fn example_function(\n    py: Python,\n    input_int: &Bound<'_, PyInt>,\n    input_list: &Bound<'_, PyList>,\n    input_bytes: &Bound<'_, PyBytes>,\n) -> PyResult<PyObject> {\n    // Convert Python int to BigUint\n    let value: BigUint = input_int.extract()?;\n\n    // Convert Python list to Vec\n    let values: Vec<BigUint> = input_list\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n\n    // Get bytes\n    let bytes = input_bytes.as_bytes();\n\n    // Do your computation\n    let result = process_data(&value, &values, bytes)\n        .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    // Return as Python list\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n```\n\n## Registering Your Function\n\nAdd your function to the `garaga_rs` module in `mod.rs`:\n\n```rust\n#[pymodule]\nfn garaga_rs(m: &Bound<'_, PyModule>) -> PyResult<()> {\n    m.add_function(wrap_pyfunction!(your_function, m)?)?;\n    Ok(())\n}\n```\n\n## Using the Bindings\n\nAfter implementing and registering your binding, you can use it in Python like this:\n\n```python\nfrom garaga import garaga_rs\n\n# For simple integer operations\nresult = garaga_rs.example_function(\n    input_int=42,\n    input_list=[1, 2, 3],\n    input_bytes=b\"some bytes\"\n)\n```\n\n## Testing\n\n1. Add Python tests in `tests/hydra/`\n2. Test both successful and error cases\n3. Test edge cases (empty lists, zero values)\n\n## Common Pitfalls\n\n1. Always use `PyResult` for error handling\n2. Remember to propagate errors with `?`\n3. Handle edge cases (e.g., zero values, maximum values)\n4. Be careful with memory management for large data structures\n\n## Available Utilities\n\nThe following utilities are available in the codebase:\n\n- `element_from_biguint`: Convert BigUint to Field Element\n- `element_to_biguint`: Convert Field Element to BigUint\n- `biguint_to_u256`: Convert BigUint to u256\n\n## Building and Testing\n\n1. Build/Update the Rust extension:\n```bash\nmaturin develop --release --features python\n```\n\n2. Run tests:\n```bash\npytest -xs\n```\n\n## Best Practices\n\n1. Keep bindings simple and focused\n2. Use appropriate error handling\n3. Test edge cases thoroughly\n4. Follow existing patterns in the codebase\n"
  },
  {
    "path": "docs/gitbook/developer-setup-and-guides/garaga-rs-crate/rust-greater-than-wasm-bindings.md",
    "content": "# Rust -> Wasm bindings\n\nThis guide explains how to add new WASM bindings for Rust functions in the `garaga_rs` crate.\n\n## Overview\n\nThe WASM bindings are implemented using `wasm-bindgen`, which provides a way to expose Rust functions to JavaScript/TypeScript. The bindings are located in `tools/garaga_rs/src/wasm_bindings.rs`.\n\n## Adding a New Binding\n\n1. Add your function to `tools/garaga_rs/src/wasm_bindings.rs`\n2. Use the `#[wasm_bindgen]` attribute to expose the function\n3. Rebuild the WASM package\n\n### Example Implementation\n\n```rust\nuse wasm_bindgen::prelude::*;\nuse num_bigint::BigUint;\n\n#[wasm_bindgen]\npub fn your_function(\n    input_hex: &str,           // Hex string input\n    input_array: Vec<JsValue>, // Array of values\n) -> Result<JsValue, JsError> {\n    // Parse hex string to BigUint\n    let value = jsvalue_to_biguint(&JsValue::from_str(input_hex))?;\n\n    // Process array elements\n    let values: Vec<BigUint> = input_array\n        .iter()\n        .map(|v| jsvalue_to_biguint(v))\n        .collect::<Result<Vec<_>, _>>()?;\n\n    // Perform computation\n    let result = compute_something(&value, &values)\n        .map_err(|e| JsError::new(&e.to_string()))?;\n\n    // Return result as BigInt string\n    Ok(biguint_to_jsvalue(&result))\n}\n```\n\n### Type Conversions\n\nCommon conversion patterns for WASM bindings:\n\n```rust\n// JsValue (hex string) -> BigUint\nlet biguint = jsvalue_to_biguint(&js_value)?;\n\n// BigUint -> JsValue (string)\nlet js_value = biguint_to_jsvalue(&biguint);\n\n// Parse G1 point from JS object\nlet point = parse_g1_point(&js_object)?;\n\n// Parse G2 point from JS object\nlet point = parse_g2_point(&js_object)?;\n```\n\n### Error Handling\n\nUse `JsError` for errors that should be visible in JavaScript:\n\n```rust\n.map_err(|e| JsError::new(&e.to_string()))?\n```\n\n## Available Functions\n\nThe following functions are currently exposed via WASM:\n\n| Function | Description |\n|----------|-------------|\n| `msm_calldata_builder` | Generate MSM calldata |\n| `mpc_calldata_builder` | Generate multi-pairing check calldata |\n| `get_groth16_calldata` | Generate Groth16 proof calldata |\n| `get_zk_honk_calldata` | Generate ZK Honk proof calldata |\n| `schnorr_calldata_builder` | Schnorr signature calldata |\n| `ecdsa_calldata_builder` | ECDSA signature calldata |\n| `eddsa_calldata_builder` | EdDSA signature calldata |\n| `drand_calldata_builder` | drand verification calldata |\n| `poseidon_hash` | Poseidon hash (BN254) |\n| `to_weirstrass` | Convert Ed25519 to Weierstrass form |\n| `to_twistededwards` | Convert Weierstrass to Twisted Edwards |\n\n## TypeScript Wrapper\n\nThe TypeScript API in `tools/npm/garaga_ts/src/node/api.ts` provides a friendlier interface over the raw WASM bindings:\n\n```typescript\nimport { init, msmCalldataBuilder } from 'garaga';\n\n// Initialize WASM module (required once)\nawait init();\n\n// Use the API\nconst calldata = msmCalldataBuilder(\n  points,    // Array of {x, y} objects\n  scalars,   // Array of bigint or hex strings\n  curveId,   // 0=BN254, 1=BLS12-381, etc.\n  { includePointsAndScalars: true }\n);\n```\n\n## Development notes\n\nThe Garaga NPM package is a mixed package. It is implemented in TypeScript but also reuses Rust code targeted to WebAssembly (WASM) with the help of [`wasm-pack`](https://rustwasm.github.io/wasm-pack/).\n\nThe `src` folder is organized into two subfolders: `node` which contains the implementation in TypeScript; and `wasm` which has the interoperabilty code produced by `wasm-pack`.\n\nChanges to the TypeScript library should only be made to files under the `node` subfolder. Changes to the Rust implementation requires regenerating files under the `wasm` subfolder.\n\nOnces changes are in place they can be made permanent into the repository by committing the contents of both folders. Here is the bulk of the process:\n\n1. Open your terminal or command prompt.\n2.  Use `git` to clone the repository:\n\n    ```bash\n    git clone https://github.com/keep-starknet-strange/garaga.git\n    cd tools/npm/garaga_ts\n    npm ci\n    ```\n3.  If you make TypeScript only changes, you can quickly rebuild the package using the `build:node` NPM script:\n\n    ```bash\n    npm run build:node\n    npm pack\n    ```\n4.  If instead you make Rust changes, it is necessary to generate the WASM interoperability code using the `build` NPM script:\n\n    ```bash\n    npm run build\n    npm pack\n    ```\n5.  However, before commiting changes, it is necessary to generate the WASM interoperability code in a reproducible manner using docker:\n\n    ```bash\n    docker compose up --build\n    git commit .\n    ```\n\n### How `wasm-pack` is used to achieve interoperability\n\nInternaly the `build` NPM script uses `wasm-pack` to produce the WASM interoperability code. This is achieved by running\n\n````\n```bash\ncd tools/garaga_rs && wasm-pack build --target web --out-dir ../npm/garaga_ts/src/wasm/pkg --release --no-default-features --features wasm\ncd tools/npm/garaga_ts && node patch.wasm.cjs\n```\n````\n\nLet's unpack it.\n\nIn the Rust source folder we run `wasm-pack` in `--target web` mode. This generates TypeScript code targeting web pages. The `--release` option is required to minimize the size of the WASM module. The `--no-default-features` ensures we start with a clean slate (no bindings), and `--features wasm` explicitly enables only the WASM bindings we need.\n\nOnce the `wasm-pack` is done, the code is generated under the folder `src/wasm/pkg` of garaga\\_ts that houses the TypeScript source code.\n\nWe then run a custom script `patch.wasm.cjs` which makes minimal changes to the code generated by wasm-pack to facilitate seamless support of the WASM module in both the browser and Node.js. Basically it converts the WASM module to a [Base64](https://en.wikipedia.org/wiki/Base64) string that can be loaded in a portable way in both environments, amongst other minor tweaks.\n\n(It is important to note that the use of a custom script is only required so long `wasm-pack` itself does not provide a more portable/universal target mode.)\n"
  },
  {
    "path": "docs/gitbook/developer-setup-and-guides/working-with-auto-generated-cairo-code.md",
    "content": "---\nicon: wand-sparkles\n---\n\n# Working with auto-generated Cairo Code\n\n### Developer workflow\n\nIf working with the python - auto generated cairo code, the main script to work with is `make rewrite` \\\n\n\n{% code title=\"tools/make/rewrite.sh\" %}\n```bash\nrm -rf src/src/tests/*\nrm -rf src/src/circuits/*\nrm -rf src/contracts/groth16_example_bls12_381/*\nrm -rf src/contracts/groth16_example_bn254/*\nrm -rf src/contracts/risc0_verifier_bn254/*\n\nset -e  # Exit immediately if a command exits with a non-zero status\n\npython hydra/garaga/precompiled_circuits/all_circuits.py || { echo \"Error in all_circuits.py\"; exit 1; }\npython hydra/garaga/starknet/tests_and_calldata_generators/test_writer.py || { echo \"Error in test_writer.py\"; exit 1; }\npython hydra/garaga/starknet/groth16_contract_generator/generator.py || { echo \"Error in generator.py\"; exit 1; }\npython hydra/garaga/starknet/groth16_contract_generator/generator_risc0.py || { echo \"Error in generator_risc0.py\"; exit 1; }\n```\n{% endcode %}\n\n\\\nAs you can see this will :&#x20;\n\n* Rewrite all the auto-generated cairo code in `src/src/circuits/` (with the `all_circuits.py` script)\n* Rewrite all the auto-generated cairo tests in `src/src/tests/` (with the `test_writer.py` script)\n* Rewrite the Groth16 verifiers smart contract templates examples in `src/contracts/` (with the `generator.py` and `generator_risc0.py` scripts)\n\n\n\n## Creating auto-generated circuits.&#x20;\n\nWhile it's relatively easy to write Cairo circuits yourself if their size is small, it starts to be quite time consuming if you need to build a large amount of them, parametrize them, and the circuits themselves are quite large.\n\n{% hint style=\"info\" %}\nExamples of small hand-made small circuits can be found in [https://github.com/keep-starknet-strange/garaga/blob/main/src/src/basic\\_field\\_ops.cairo](https://github.com/keep-starknet-strange/garaga/blob/main/src/src/basic\\_field\\_ops.cairo)\n{% endhint %}\n\n\\\nIf you want to write a new auto-generated circuit to `src/src/circuits`, you can define them with python code, and register them to the `all_circuits.py` file. \\\n\\\nBelow we show a basic tutorial for a non-parametrized circuit.&#x20;\n\n### Simple isolated example\n\n<pre class=\"language-python\"><code class=\"lang-python\"><strong>import garaga.modulo_circuit_structs as structs\n</strong>from garaga.definitions import CurveID, get_base_field\nfrom garaga.modulo_circuit import PyFelt, ModuloCircuit\n\n\ncurve_id = CurveID.BN254 # BN254\nfield = get_base_field(curve_id) # Use with field(int) or field.random().\n\nCOMPILATION_MODE = 1 # 1 for Cairo, 0 for CairoZero.\n\ncircuit = ModuloCircuit(\n    name=f\"dummy_{curve_id.name.lower()},\n    curve_id.value,\n    generic_circuit=False,\n    compilation_mode=COMPILATION_MODE,\n)\n# All \"structs\" expect a name (replicated in the signature) and a list of elements.\nx, y = circuit.write_struct(structs.u384Span(\"xy\", [field.random(), field.random()]))\n# All \"structs\" written with write_struct will be expected in the Cairo\n# function signature of the given type.\nz = circuit.write_struct(structs.u384(\"z\", [field(42)]))\n\n# With this configuration,\n# the signature will be fn(xy: Span&#x3C;u384>, z:u384).\n# More structs and arbitrary ones are supported as well.\n\n# To write constants, use set_or_get_constant.\none = circuit.set_or_get_constant(1)\n\n# Here happens the core circuit logic.\n# The core operations are add, sub, mul, inv.\n# However, more high level methods are available that translate to\n# a sequence of the core operations (ex: div &#x3C;=> inv then mul)\na = circuit.add(x, y)\nb = circuit.sub(a, one)\nc = circuit.mul(b, z)\nd = circuit.inv(c)\nf = circuit.div(d, z)\n\n# Define the output of the function using structs as well.\ncircuit.extend_struct_output(structs.u384Span(\"abc\", [a, b, c]))\ncircuit.extend_struct_output(structs.u384(\"f\", [f]))\n\n# Compile and print the compiled cairo circuit :\nheader = compilation_mode_to_file_header(1) # Cairo 1\ncompiled_code, function_name = circuit.compile_circuit()\n# Note: some imports are unused in the header,\n# we should make the compiler aware of the structs used ;)\nprint(header)\nprint(compiled_code)\n</code></pre>\n\nTo obtain the corresponding Cairo code, you can do it like this&#x20;\n\nThe obtained Cairo code will be&#x20;\n\n```rust\nuse core::circuit::{\n    RangeCheck96, AddMod, MulMod, u384, u96, CircuitElement, CircuitInput, circuit_add, circuit_sub,\n    circuit_mul, circuit_inverse, EvalCircuitResult, EvalCircuitTrait, CircuitOutputsTrait,\n    CircuitModulus, AddInputResultTrait, CircuitInputs, CircuitDefinition,\n    CircuitData, CircuitInputAccumulator\n};\nuse garaga::core::circuit::AddInputResultTrait2;\nuse core::circuit::CircuitElement as CE;\nuse core::circuit::CircuitInput as CI;\nuse garaga::definitions::{get_a, get_b, get_p, get_g, get_min_one, G1Point, G2Point, E12D, u288, G1G2Pair, BNProcessedPair, BLSProcessedPair, MillerLoopResultScalingFactor, G2Line, get_BLS12_381_modulus,get_BN254_modulus};\nuse garaga::ec_ops::{SlopeInterceptOutput, FunctionFeltEvaluations, FunctionFelt};\nuse core::option::Option;\n\n\n#[inline(always)]\nfn run_dummy_bn254_circuit(xy: Span<u384>, z: u384) -> (Span<u384>, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x1\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let t0 = circuit_add(in1, in2);\n    let t1 = circuit_sub(t0, in0);\n    let t2 = circuit_mul(t1, in3);\n    let t3 = circuit_inverse(t2);\n    let t4 = circuit_inverse(in3);\n    let t5 = circuit_mul(t3, t4);\n\n    let modulus = get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t0, t1, t2, t5,).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    let mut xy = xy;\n    while let Option::Some(val) = xy.pop_front() {\n        circuit_inputs = circuit_inputs.next_2(*val);\n    };\n    // in1 - in2\n    circuit_inputs = circuit_inputs.next_2(z); // in3\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let abc: Span<u384> = array![\n        outputs.get_output(t0), outputs.get_output(t1), outputs.get_output(t2)\n    ]\n        .span();\n    let f: u384 = outputs.get_output(t5);\n    return (abc, f);\n}\n```\n\nNote that the compiler will adapt the signature of the Cairo function depending on the `generic_circuit` parameter, and retrieve the corresponding modulus inside the function code.&#x20;\n\n{% code title=\"https://github.com/keep-starknet-strange/garaga/blob/584cad66d067aa6c04447fe06a00c7be99bc2445/hydra/garaga/modulo_circuit.py#L1068-L1071\" %}\n```python\nif self.generic_circuit:\n    code = f\"#[inline(always)]\\nfn {function_name}({signature_input}, curve_index:usize)->{signature_output} {{\\n\"\nelse:\n    code = f\"#[inline(always)]\\nfn {function_name}({signature_input})->{signature_output} {{\\n\"\n```\n{% endcode %}\n\n### Using parameterization (docs in progress :construction:)&#x20;\n\n#### The base class\n\nCurrently, the way we deal with parameterization is encapsulating the earlier `ModuloCircuit` class into a [BaseModuloCircuit](https://github.com/keep-starknet-strange/garaga/blob/584cad66d067aa6c04447fe06a00c7be99bc2445/hydra/garaga/precompiled\\_circuits/compilable\\_circuits/base.py#L12C7-L12C25)  class, and adding keyword arguments to the class deriving it.\n\n```python\nclass BaseModuloCircuit(ABC):\n    \"\"\"\n    Base class for all modulo circuits that will be compiled to Cairo code.\n    Parameters:\n    - name: str, the name of the circuit\n    - curve_id: int, the id of the curve\n    - auto_run: bool, whether to run the circuit automatically at initialization.\n                When compiling, this flag must be set to true so the ModuloCircuit class inside the\n                 \".circuit\" member of this class holds the necessary metadata\n                about the operations that will be compiled.\n                For CairoZero, this flag will be set to False in the Python hint, so that\n                BaseModuloCircuit.run_circuit() can be called on a segment parsed from the\n                CairoZero VM.\n    - compilation mode: 0 (CairoZero) or 1 (Cairo)\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 0,\n```\n\nAll Cairo function must inherit from the base abstract class \\\nThe abstract methods to implement are : \\\n\n\n*   `build_input`\n\n    ```python\n    def build_input(self) -> list[PyFelt]:\n    \"\"\"\n    This method is used to create the necessary inputs that will be written to the ModuloCircuit.\n    It works in pair with the _run_circuit_inner function, where the _run_circuit_inner will use the output of\n    the build_input function to \"deserialize\" the list of elements and \"write\" them to the ModuloCircuit class.\n    \"\"\"\n    ```\n*   `_run_circuit_inner`\n\n    ```python\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n    \"\"\"\n    This method is responsible for\n    - deserializing the input list of elements,\n    - creating a ModuloCircuit class (or class that derives from ModuloCircuit)\n    - \"writing\" the inputs to the ModuloCircuit class to obtain ModuloCircuitElements\n    - using the methods add, sub, mul, inv (or higher level methods) of the ModuloCircuit class\n        to define the list of operations on the given inputs.\n    - Returning the ModuloCircuit class in a state where the circuit has been run, and therefore holding\n        the metadata so that its instructions can be compiled to Cairo code.\n\n    \"\"\"\n    ```\n\n\n\nAt initialization, you must choose a name for the circuit. \\\nPay attention to the parameter `generic_circuit` passed to the `ModuloCircuit` class inside `_run_circuit_inner`\n\n<pre class=\"language-python\"><code class=\"lang-python\"><strong>import garaga.modulo_circuit_structs as structs\n</strong>from garaga.definitions import CurveID\nfrom garaga.precompiled_circuits.compilable_circuits.base import BaseModuloCircuit\nfrom garaga.modulo_circuit import PyFelt, ModuloCircuit\n\nclass FixedExpCircuit(BaseModuloCircuit):\n    def __init__(\n        self, curve_id: int, auto_run: bool = True, compilation_mode: int = 1, n:int=1\n\n    ) -> None:\n        super().__init__(\n            name=f\"fixed_exp_circuit_{CurveID(curve_id).name.lower()}_{n}\",\n<strong>            curve_id=curve_id,\n</strong>            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n        self.n = n\n\n    def build_input(self) -> list[PyFelt]:\n        return [self.field.random()]\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ModuloCircuit(\n            self.name,\n            self.curve_id,\n            generic_circuit=True,\n            compilation_mode=self.compilation_mode,\n        )\n\n        z = circuit.write_struct(structs.u384(\"z\", [input[2]]), WriteOps.INPUT)\n        res = z\n        for i in range(n):\n            res = circuit.mul(res, z)\n        circuit.extend_struct_output(structs.u384(\"res\", [res]))\n\n        return circuit\n\n</code></pre>\n"
  },
  {
    "path": "docs/gitbook/installation/README.md",
    "content": "---\nicon: gear\n---\n\n# Installation\n\nGaraga is available in multiple formats for different use cases:\n\n| Package | Use Case | Install Command |\n|---------|----------|-----------------|\n| [**Python package**](python-package.md) | CLI for generating verifiers, deployment, calldata generation | `pip install garaga` |\n| [**Cairo Library**](cairo-library.md) | Use Garaga's Cairo primitives in your smart contracts | `scarb add garaga` |\n| [**Rust Crate**](rust-crate.md) | Rust applications, calldata generation | `cargo add garaga_rs` |\n| [**npm package**](npm-package.md) | Browser dApps, frontend integration | `npm install garaga` |\n\n## Quick Start\n\n{% tabs %}\n{% tab title=\"Python\" %}\n```bash\npip install garaga\ngaraga --help\n```\n{% endtab %}\n\n{% tab title=\"Cairo\" %}\n```bash\nscarb add garaga\n```\nOr in `Scarb.toml`:\n```toml\n[dependencies]\ngaraga = \"1.1.0\"\n```\n{% endtab %}\n\n{% tab title=\"Rust\" %}\n```toml\n[dependencies]\ngaraga_rs = { git = \"https://github.com/keep-starknet-strange/garaga.git\", tag = \"v1.1.0\" }\n```\n{% endtab %}\n\n{% tab title=\"npm\" %}\n```bash\nnpm install garaga\n```\n{% endtab %}\n{% endtabs %}\n\n## Version Compatibility\n\nAll Garaga packages are released together with matching version numbers. When using multiple packages, ensure they all use the same version to guarantee compatibility.\n\nFor example, when using version 1.1.0:\n- Python: `pip install garaga==1.1.0`\n- Cairo: `garaga = \"1.1.0\"` in Scarb.toml\n- Rust: `tag = \"v1.1.0\"` in Cargo.toml\n- npm: `npm install garaga@1.1.0`\n\n## Developer Setup\n\nFor contributing to Garaga or advanced development workflows, see the [Developer Setup & Guides](../developer-setup-and-guides/README.md).\n"
  },
  {
    "path": "docs/gitbook/installation/cairo-library.md",
    "content": "---\nicon: sparkles\n---\n\n# Cairo Library\n\nThe Garaga Cairo library is available on the [scarbs.xyz registry](https://scarbs.xyz/packages/garaga), the official package registry for Cairo/Scarb projects.\n\n## Quick Install\n\nThe recommended way to add Garaga to your Cairo project:\n\n```bash\nscarb add garaga\n```\n\nThis will add the latest version to your `Scarb.toml`.\n\n## Manual Installation\n\nAlternatively, add Garaga directly to your `Scarb.toml`:\n\n```toml\n[dependencies]\ngaraga = \"1.1.0\"\n\n[cairo]\nsierra-replace-ids = false  # Required for Garaga\n```\n\n{% hint style=\"warning\" %}\n**Important:** The `sierra-replace-ids = false` setting is required for Garaga to compile correctly.\n{% endhint %}\n\n## Installing a Specific Version\n\nTo install a specific version:\n\n```bash\nscarb add garaga@1.1.0\n```\n\nOr in `Scarb.toml`:\n\n```toml\n[dependencies]\ngaraga = \"=1.1.0\"  # Exact version\n```\n\n## Installing from Git\n\nIf you need an unreleased version or a specific commit:\n\n```toml\n[dependencies]\ngaraga = { git = \"https://github.com/keep-starknet-strange/garaga.git\", tag = \"v1.1.0\" }\n```\n\nOr from a specific branch/commit:\n\n```toml\n[dependencies]\ngaraga = { git = \"https://github.com/keep-starknet-strange/garaga.git\", branch = \"main\" }\n```\n\n{% hint style=\"info\" %}\nFor more information on managing dependencies with Scarb, see the [Scarb documentation](https://docs.swmansion.com/scarb/docs/guides/dependencies.html).\n{% endhint %}\n\n## Version Compatibility\n\n{% hint style=\"warning\" %}\n**Version Matching:** When using Garaga SDKs (Python, Rust, npm) to generate calldata, ensure the Cairo library version matches the SDK version. Mismatched versions may produce incompatible calldata.\n\nFor example, if using `pip install garaga==1.1.0`, use `garaga = \"1.1.0\"` in your `Scarb.toml`.\n{% endhint %}\n\n## Usage\n\nAfter installation, you can import Garaga modules:\n\n```cairo\nuse garaga::definitions::{G1Point, u384};\nuse garaga::ec_ops::msm_g1;\nuse garaga::signatures::ecdsa::{ECDSASignatureWithHint, is_valid_ecdsa_signature_assuming_hash};\n```\n\nSee [Using Garaga Libraries](../using-garaga-libraries-in-your-cairo-project/) for detailed usage documentation.\n\n## Registry Links\n\n* **Package Page:** [scarbs.xyz/packages/garaga](https://scarbs.xyz/packages/garaga)\n* **Source Code:** [github.com/keep-starknet-strange/garaga](https://github.com/keep-starknet-strange/garaga)\n"
  },
  {
    "path": "docs/gitbook/installation/developer-setup.md",
    "content": "---\nicon: wrench\n---\n\n# Developer setup\n\nTo work with Garaga, you need the following dependencies :&#x20;\n\n* [Rust](https://www.rust-lang.org/tools/install)\n* [Scarb](https://docs.swmansion.com/scarb/download.html) v2.16.1\n\nPython 3.10-3.14 is used for development but does **not** need to be installed manually — `make setup` will auto-install it via [uv](https://docs.astral.sh/uv/) if it's not already available.\n\nSimply clone the [repository](https://github.com/keep-starknet-strange/garaga) :\n\nUsing git:\n\n```bash\ngit clone https://github.com/keep-starknet-strange/garaga.git\n```\n\nUsing [github cli ](https://cli.github.com/) :\n\n```bash\ngh repo clone keep-starknet-strange/garaga\n```\n\nAfter that, go into the root of the directory and run the command :&#x20;\n\n```bash\nmake setup\n```\n\nThis will automatically install [uv](https://docs.astral.sh/uv/) and Python 3.14 if needed, create a virtual environment, install all dependencies, and build the Rust extension. The setup is idempotent — running it again updates dependencies without recreating the venv.\n\nPay attention to any message indicating failure. Contact us on Garaga telegram if you have any trouble at this point.&#x20;\n\nIf everything succeeded, you're good to go!\n\n{% hint style=\"info\" %}\nMake sure to activate the virtual environment created with this setup, using `source venv/bin/activate`\n{% endhint %}\n"
  },
  {
    "path": "docs/gitbook/installation/npm-package.md",
    "content": "---\nicon: js\n---\n\n# Npm package\n\nGaraga is available as an npm package, making it easy to integrate into your Node.js projects. This guide will help you get started with installation and usage.\n\n## Quick Start\n\nThe recommended way to install Garaga is through the npm registry:\n\n```bash\nnpm install garaga\n```\n\n{% hint style=\"warning\" %}\n**Version Compatibility:** Use the same version as your pip package (`garaga==X.Y.Z` → `garaga@X.Y.Z`) to ensure calldata compatibility with generated verifiers and maintained contracts.\n{% endhint %}\n\nOr if you prefer using Yarn:\n\n```bash\nyarn add garaga\n```\n\n## Available Functions\n\nThe package exports several functions that you can use in your project. For a complete list of available functions and their usage, check out the [API Reference](https://github.com/keep-starknet-strange/garaga/blob/v1.1.0/tools/npm/garaga_ts/src/node/api.ts). This file contains all the exported functions and their TypeScript definitions.\n\n## Package Details\n\n- **NPM Registry**: [garaga on npmjs.com](https://www.npmjs.com/package/garaga)\n- **Source Code**: [GitHub Repository](https://github.com/keep-starknet-strange/garaga/tree/main/tools/npm/garaga_ts)\n\n## Building from Source\n\nIf you need to build the package from source (e.g., for development or custom modifications), follow these steps:\n\n### Prerequisites\n\n- [Rust](https://www.rust-lang.org/tools/install)\n- [Node.js](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs)\n- [wasm-pack](https://drager.github.io/wasm-pack/installer/)\n\n### Manual Build\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/keep-starknet-strange/garaga.git\n   cd tools/npm/garaga_ts\n   ```\n\n2. Install dependencies and build:\n   ```bash\n   npm ci\n   npm run build\n   npm pack\n   ```\n\n3. Install the generated package:\n   ```bash\n   npm install ./garaga-<version>.tgz\n   ```\n\n### Docker Build (Recommended)\n\nFor reproducible builds, use Docker:\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/keep-starknet-strange/garaga.git\n   cd tools/npm/garaga_ts\n   ```\n\n2. Build using Docker:\n   ```bash\n   docker compose up --build\n   ```\n\n3. Install the generated package:\n   ```bash\n   npm install ./garaga-<version>.tgz\n   ```\n\n## Troubleshooting\n\nIf you encounter any issues during installation:\n\n1. Ensure you have the latest version of Node.js installed\n2. Clear your npm cache: `npm cache clean --force`\n3. Delete `node_modules` and `package-lock.json`, then run `npm install` again\n4. For build issues, make sure you have the latest version of Rust and wasm-pack\n\n## Support\n\nFor additional help or to report issues:\n\nSee [support.md](../support.md \"mention\")\n"
  },
  {
    "path": "docs/gitbook/installation/python-package.md",
    "content": "---\nicon: python\n---\n\n# Python package\n\n## Install the latest released version of the CLI\n\n{% hint style=\"info\" %}\nPyPi link : [https://pypi.org/project/garaga/](https://pypi.org/project/garaga/)\n{% endhint %}\n\nThe easiest way to install Garaga is via `pip`, which will fetch and install the pre-built binary wheels for your platform.\n\n1. Open your terminal or command prompt.\n2. (Optional) If you're using a [virtual environment (venv)](https://docs.python.org/3/library/venv.html), simply activate your venv.\n3.  Run the following command to install latest release version:\n\n    ```bash\n    pip install garaga\n    ```\n4.  Once the package is successfully installed, the CLI will be accessible via the command line:\n\n    ```bash\n    garaga\n    ```\n\n{% hint style=\"info\" %}\n**Garaga supports Python 3.10 through 3.14.** If you need to install a specific Python version, you can use [uv](https://docs.astral.sh/uv/):\n```bash\nuv python install 3.14  # or 3.13, 3.12, 3.11, 3.10\n```\n{% endhint %}\n\n{% hint style=\"info\" %}\nPlease, ensure that the directory containing Python's executable files is included in your system's `PATH` environment variable. If you're using a venv, the necessary paths are automatically managed, so simply activate your venv before running the CLI.\n{% endhint %}\n\n{% hint style=\"info\" %}\nIf your Python installation is not supported by one of the pre-built binary wheels, `pip` will attempt to install Garaga from its source distribution. In that case, please make sure to have [Rust installed](https://www.rust-lang.org/tools/install) and available.\n{% endhint %}\n\n## Install a specific version or from a specific commit / from source\n\nTo install a specific version, use :\n\n```bash\npip install --force-reinstall garaga==1.1.0\n\n```\n\nTo install a version at specific commit, pick a commit hash from the [github history](https://github.com/keep-starknet-strange/garaga/commits/main/) and use :\n\n```bash\npip install git+https://github.com/keep-starknet-strange/garaga.git@COMMIT_HASH\n```\n\n{% hint style=\"warning\" %}\n**Version Compatibility:** When installing from a specific commit, ensure all Garaga components match:\n- The `garaga` Cairo dependency in `Scarb.toml` should use the same version (e.g., `garaga = \"1.1.0\"` or the same git tag)\n- If using Rust/npm SDKs, use the same version for those as well\n\nSee the [main documentation](../README.md#version-compatibility) for details on why version matching matters.\n{% endhint %}\n\n## Installation troubleshooting\n\nYou might have some dependencies issues on Linux or MacOs related to some packages that uses C code.&#x20;\n\nRefer to the installations notes of Starknet.py [https://starknetpy.readthedocs.io/en/latest/installation.html](https://starknetpy.readthedocs.io/en/latest/installation.html)  to fix those issues.&#x20;\n"
  },
  {
    "path": "docs/gitbook/installation/rust-crate.md",
    "content": "---\nicon: rust\n---\n\n# Rust Crate\n\nTo use the [`garaga_rs`](https://github.com/keep-starknet-strange/garaga/tree/main/tools/garaga_rs) crate in your project, add the following to your `Cargo.toml`\n\n```toml\n[dependencies]\ngaraga_rs = { git = \"https://github.com/keep-starknet-strange/garaga.git\"}\n```\n\n{% hint style=\"warning\" %}\n**Version Compatibility:** Use the latest [release tag](https://github.com/keep-starknet-strange/garaga/releases) (e.g., `v1.1.0`) to match the declared [maintained smart contracts](../maintained-smart-contracts/ \"mention\") and ensure compatibility with the pip package that generated your verifiers.\n{% endhint %}\n\n```toml\n[dependencies]\ngaraga_rs = { git = \"https://github.com/keep-starknet-strange/garaga.git\", tag = \"v1.1.0\" }\n```\n\n## Features\n\nThe `garaga_rs` crate provides optional features for different use cases:\n\n- **No features (default)**: Pure Rust library without any bindings\n- **`python` feature**: Enables Python bindings via PyO3 (for use with maturin)\n- **`wasm` feature**: Enables WebAssembly bindings via wasm-bindgen (for use with wasm-pack)\n\nFor example, if you're building a Python extension:\n```toml\n[dependencies]\ngaraga_rs = { git = \"https://github.com/keep-starknet-strange/garaga.git\", tag = \"v1.1.0\", features = [\"python\"] }\n```\n"
  },
  {
    "path": "docs/gitbook/maintained-smart-contracts/README.md",
    "content": "---\nicon: file-lock\n---\n\n# Maintained Smart Contracts\n\nWe declare & maintain Smart Contracts for the community so they can be used as library calls.\n\n\\\nThose contracts:\n\n* Are _declared_ **both** Starknet Sepolia **and** Mainnet.\n* Those contracts are re-deployed at each release, so their code correspond to the release commit.\n* The source code is always available in the main garaga repository under `src/contracts`\n* The contracts are only declared and not deployed, their expected usage is through [library syscalls.](https://book.cairo-lang.org/ch15-03-executing-code-from-another-class.html#library-calls), so their usage is done through their class hashes and not their contract address (which don't exist unless you deploy them yourself)\n\n### Class hashes for Garaga v1.1.0.\n\n| Contract                                                                                                                         | Class hash                                                        | Description                                                                                                   |\n| -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |\n| [Universal ECIP](https://github.com/keep-starknet-strange/garaga/tree/main/src/contracts/universal_ecip)                         | 0x396d5915ecf475aab117bb25a0272b261e9e25ffe1c0ce05a51a3f77489c89e | A contract allowing to compute elliptic curve multi scalar multiplication for all supported curve identifiers |\n| [RiscZero Verifier](https://github.com/keep-starknet-strange/garaga/tree/main/src/contracts/autogenerated/risc0_verifier_bn254)  | 0x41d5e111b93acbf1afb531253e0bc64d43f90a8a99290361e851ec0c4968ab1 | A verifier for RiscZero Groth16-wrapped proofs.                                                               |\n| [Drand Quicknet Verifier](https://github.com/keep-starknet-strange/garaga/tree/main/src/contracts/drand_quicknet)                | 0x86bf4360e082cd786bd785d3345df32777db89cd26b761f3e85b1993addfd0  | A contract to verify Drand BLS signatures and store them on-chain for randomness and tlock decryption.        |\n| [Drand Decrypt Quicknet](https://github.com/keep-starknet-strange/garaga/tree/main/src/contracts/drand_decrypt_quicknet)         | 0x68e2381aa99c02aabe2a0fec18d9fb7cde6138b588dc0bcf0135a26d8ae7e22 | A contract for on-chain tlock decryption using drand. Wraps the verifier via library call.                    |\n| [SP1 Groth16 Verifier](https://github.com/keep-starknet-strange/garaga/tree/main/src/contracts/autogenerated/sp1_verifier_bn254) | 0x230d8612bd464979000193e4eaa73489da965a6593fb563dd2244e0b6e0443a | A verifier for SP1 Groth16-wrapped proofs.                                                                    |\n\n{% hint style=\"warning\" %}\n**Version Compatibility:** When generating calldata for these contracts, use the **same Garaga SDK version** as the release that declared the class hashes. For v1.1.0 contracts above, use `garaga==1.1.0` (pip), `garaga_rs` tag `v1.1.0`, or `garaga@1.1.0` (npm).\n\nThe SDK generates hints that are specific to each contract version. Mismatched versions will cause verification to fail.\n{% endhint %}\n\n{% hint style=\"info\" %}\nIn case you need to obtain class hashes for different versions of Garaga or declare them yourself if they do not exist, you can checkout the Garaga repo at a particular commit and run `python .github/scripts/declare_maintained_contracts.py` or `python .github/scripts/verify_contracts.py`.\n\nAt each release tag, the CI ensures all contracts are declared before publishing packages.\n{% endhint %}\n"
  },
  {
    "path": "docs/gitbook/maintained-smart-contracts/drand.md",
    "content": "---\nicon: dice\n---\n\n# Drand\n\nGaraga provides maintained contracts for the [drand](https://drand.love) distributed randomness beacon. These enable:\n\n- **On-chain signature verification** of drand rounds for verifiable randomness\n- **Time-lock encryption (tlock)**: encrypt data that can only be decrypted after a specific drand round is published\n\n## What is drand?\n\ndrand is a distributed randomness beacon that provides:\n\n- **Unpredictable randomness**: Values cannot be known before generation\n- **Unbiasable output**: No single party can influence results\n- **Public verifiability**: Anyone can verify the randomness is legitimate\n- **Regular intervals**: New randomness every 3 seconds (quicknet)\n\n## What is tlock?\n\nTime-lock encryption (tlock) leverages drand's BLS threshold signatures to create an identity-based encryption (IBE) scheme where the \"identity\" is a future drand round number. A message encrypted for round `N` can only be decrypted once drand publishes the signature for round `N`. No single party can decrypt early.\n\n### Use Cases\n\n| Application | How tlock helps |\n|---|---|\n| **Sealed-bid auctions** | Bids encrypted until auction close (a specific drand round) |\n| **Scheduled reveals** | Information released at a predetermined time |\n| **Fair launches** | Token distributions with time-locked claiming |\n| **Commit-reveal schemes** | Players commit encrypted moves, revealed together after a round |\n\n## Contracts\n\n### Drand Quicknet Verifier\n\nVerifies drand BLS signatures and stores them on-chain.\n\n| Network | Class Hash |\n|---------|------------|\n| **Mainnet** | `0x86bf4360e082cd786bd785d3345df32777db89cd26b761f3e85b1993addfd0` |\n| **Sepolia** | `0x86bf4360e082cd786bd785d3345df32777db89cd26b761f3e85b1993addfd0` |\n\n```cairo\n#[starknet::interface]\ntrait IDrandQuicknet<TContractState> {\n    /// Verify a drand round BLS signature and store it on-chain.\n    fn verify_round(\n        ref self: TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<u64, felt252>;\n\n    /// Look up the stored signature for a previously verified round.\n    fn get_signature_for_round(\n        self: @TContractState, round_number: u64,\n    ) -> Result<G1Point, felt252>;\n\n    /// Look up the randomness (poseidon_hash(signature)) for a previously verified round.\n    fn get_randomness_for_round(\n        self: @TContractState, round_number: u64,\n    ) -> Result<felt252, felt252>;\n}\n```\n\n### Drand Decrypt Quicknet\n\nWraps the verifier to add on-chain tlock decryption. Deploy this contract yourself and point it at the verifier class hash.\n\n```cairo\n#[starknet::interface]\ntrait IDrandDecryptQuicknet<TContractState> {\n    /// Verify a drand round BLS signature via library_call to the verifier class.\n    fn verify_round(\n        ref self: TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<u64, felt252>;\n\n    /// Read the stored signature for a previously verified round.\n    fn get_signature_for_round(\n        self: @TContractState, round_number: u64,\n    ) -> Result<G1Point, felt252>;\n\n    /// Get poseidon_hash(signature) for a previously verified round.\n    fn get_randomness_for_round(\n        self: @TContractState, round_number: u64,\n    ) -> Result<felt252, felt252>;\n\n    /// Decrypt a tlock ciphertext for a given round.\n    /// If the round signature is not yet stored, a DrandHint must follow in the calldata.\n    fn decrypt_cipher_text(\n        ref self: TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u8>, felt252>;\n}\n```\n\n{% hint style=\"info\" %}\nThe verifier contract is designed for **library calls** and does not need to be deployed. The decrypt contract wraps it and **must be deployed** since it stores signatures in its own storage.\n{% endhint %}\n\n## Quicknet Configuration\n\nBoth contracts are configured for drand's **quicknet** network:\n\n| Parameter | Value |\n|-----------|-------|\n| **Chain Hash** | `52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971` |\n| **Public Key** | G2 point on BLS12-381 (hardcoded in contract) |\n| **Period** | 3 seconds |\n| **Genesis** | 1692803367 (Aug 23, 2023) |\n\n---\n\n## Verifiable Randomness\n\n### Fetching drand Randomness\n\nFirst, fetch randomness from drand's HTTP API:\n\n```bash\n# Get the latest round\ncurl https://api.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971/public/latest\n\n# Get a specific round\ncurl https://api.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971/public/12345\n```\n\nResponse:\n```json\n{\n  \"round\": 12345,\n  \"randomness\": \"8b9c...\",\n  \"signature\": \"a1b2...\"\n}\n```\n\n### Generating Verification Calldata\n\nUse the Garaga SDK to generate the `full_proof_with_hints` calldata from the drand response:\n\n{% tabs %}\n{% tab title=\"Python\" %}\n```python\nfrom garaga.starknet.tests_and_calldata_generators.drand_calldata import (\n    drand_round_to_calldata,\n)\n\n# Generate calldata for a specific round (fetches from drand API automatically)\ncalldata = drand_round_to_calldata(round_number=12345)\n# Returns list[int] ready for on-chain verification\n\n# Use the Rust backend for better performance\ncalldata = drand_round_to_calldata(round_number=12345, use_rust=True)\n```\n{% endtab %}\n\n{% tab title=\"TypeScript\" %}\n```typescript\nimport * as garaga from 'garaga';\n\nawait garaga.init();\n\n// Fetch drand randomness and build calldata\nconst drandData = await garaga.fetchDrandRandomness(12345);\nconst calldata = garaga.getDrandCallData(drandData);\n```\n{% endtab %}\n{% endtabs %}\n\n### On-Chain Verification with Library Call\n\nUse `library_call_syscall` to call the drand verifier contract:\n\n```cairo\nuse starknet::{SyscallResultTrait, syscalls};\nuse garaga::definitions::G1Point;\n\nconst DRAND_QUICKNET_CLASS_HASH: felt252 =\n    0x86bf4360e082cd786bd785d3345df32777db89cd26b761f3e85b1993addfd0;\n\nfn verify_drand_round(full_proof_with_hints: Span<felt252>) -> u64 {\n    let mut call_data: Array<felt252> = array![];\n    Serde::serialize(@full_proof_with_hints, ref call_data);\n\n    let mut result = syscalls::library_call_syscall(\n        DRAND_QUICKNET_CLASS_HASH.try_into().unwrap(),\n        selector!(\"verify_round\"),\n        call_data.span(),\n    ).unwrap_syscall();\n\n    let round: Result<u64, felt252> = Serde::deserialize(ref result).unwrap();\n    round.unwrap()\n}\n```\n\n---\n\n## Time-Lock Encryption (tlock)\n\n### How It Works\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                        ENCRYPTION (off-chain)                    │\n│                                                                  │\n│   1. Choose a future drand round number N                        │\n│   2. Encrypt 16-byte message using drand's public key + round N  │\n│   3. Produces CipherText { U: G2Point, V: [u8;16], W: [u8;16] } │\n│   4. Store ciphertext on-chain or off-chain                      │\n│                                                                  │\n└──────────────────────────────┬──────────────────────────────────┘\n                               │\n                          time passes...\n                               │\n                               ▼\n┌─────────────────────────────────────────────────────────────────┐\n│              drand publishes round N signature                   │\n└──────────────────────────────┬──────────────────────────────────┘\n                               │\n                               ▼\n┌─────────────────────────────────────────────────────────────────┐\n│                       DECRYPTION (on-chain)                      │\n│                                                                  │\n│   1. Verify the drand signature for round N (BLS pairing check)  │\n│   2. Use signature to decrypt: e(signature, U) recovers key      │\n│   3. XOR-decrypt to recover the original 16-byte message         │\n│   4. Verify ciphertext integrity (U = r·G₂ check)               │\n│                                                                  │\n└─────────────────────────────────────────────────────────────────┘\n```\n\n{% hint style=\"info\" %}\n**Message size**: tlock encrypts a 16-byte (128-bit) message. For larger payloads, encrypt a symmetric key with tlock and use it to encrypt the larger data off-chain.\n{% endhint %}\n\n### Encrypting a Message (Off-Chain)\n\nUse the Garaga SDK to encrypt a message for a future drand round:\n\n{% tabs %}\n{% tab title=\"Python\" %}\n```python\nfrom garaga.starknet.tests_and_calldata_generators.drand_calldata import (\n    drand_encrypt_to_calldata,\n)\n\n# Encrypt a 16-byte message for a future round\nmessage = b\"secret message!!\"  # exactly 16 bytes\nround_number = 100000  # a future drand round\n\n# Generate calldata containing the encrypted ciphertext\ncalldata = drand_encrypt_to_calldata(round_number, message)\n\n# Use the Rust backend for better performance\ncalldata = drand_encrypt_to_calldata(round_number, message, use_rust=True)\n```\n{% endtab %}\n\n{% tab title=\"TypeScript\" %}\n```typescript\nimport * as garaga from 'garaga';\n\nawait garaga.init();\n\n// Prepare 16-byte message and randomness\nconst message = new Uint8Array(16);\nmessage.set(new TextEncoder().encode('secret message!!'));\n\nconst randomness = crypto.getRandomValues(new Uint8Array(16));\n\n// Encrypt for a specific future round\nconst calldata = garaga.encryptToDrandRoundAndGetCallData(\n  100000,     // round number\n  message,    // 16-byte message\n  randomness, // 16-byte randomness\n);\n```\n{% endtab %}\n\n{% tab title=\"Rust\" %}\n```rust\nuse garaga_rs::calldata::drand_tlock_calldata::drand_tlock_encrypt_calldata_builder;\nuse num_bigint::BigUint;\n\nlet round_number = 100000u64;\nlet message: [u8; 16] = *b\"secret message!!\";\nlet randomness: [u8; 16] = rand::random();\n\nlet values = vec![\n    BigUint::from(round_number),\n    BigUint::from_bytes_be(&message),\n    BigUint::from_bytes_be(&randomness),\n];\n\nlet calldata = drand_tlock_encrypt_calldata_builder(&values).unwrap();\n```\n{% endtab %}\n{% endtabs %}\n\n### Decrypting On-Chain\n\nThe `decrypt_cipher_text` function on the decrypt contract handles two scenarios:\n\n1. **Round already verified**: If the drand signature for the round is already stored, only the ciphertext calldata is needed.\n2. **Round not yet verified**: The ciphertext calldata is followed by the drand verification hint, and both verification and decryption happen in a single transaction.\n\n#### Scenario 1: Verify first, then decrypt\n\n```python\nfrom garaga.starknet.tests_and_calldata_generators.drand_calldata import (\n    drand_round_to_calldata,\n    drand_encrypt_to_calldata,\n)\n\n# Step 1: Verify the round (stores the signature)\nverify_calldata = drand_round_to_calldata(round_number=12345)\n# Call contract.verify_round(verify_calldata)\n\n# Step 2: Decrypt (uses stored signature)\ndecrypt_calldata = drand_encrypt_to_calldata(12345, message)\n# Call contract.decrypt_cipher_text(decrypt_calldata)\n```\n\n#### Scenario 2: Verify and decrypt in one transaction\n\n```python\n# Combine encryption calldata + verification calldata\nencrypt_cd = drand_encrypt_to_calldata(round_number, message)\nverify_cd = drand_round_to_calldata(round_number)\n\n# Strip the length prefix from each, combine, and add new length prefix.\n# This works because decrypt_cipher_text deserializes the DrandDecryptHint\n# (round + ciphertext) first, then passes the remaining bytes to verify_round.\ncombined_data = encrypt_cd[1:] + verify_cd[1:]\ncombined_calldata = [len(combined_data)] + combined_data\n# Call contract.decrypt_cipher_text(combined_calldata)\n```\n\n### Cairo: CipherText Struct\n\nThe tlock ciphertext is defined in `garaga::apps::drand`:\n\n```cairo\nuse garaga::apps::drand::CipherText;\nuse garaga::definitions::G2Point;\n\n/// The result of a timelock encryption over drand quicknet.\nstruct CipherText {\n    U: G2Point,   // r·G₂ — the ephemeral public key\n    V: [u8; 16],  // sigma XOR H₂(r·e(H(round), pk))\n    W: [u8; 16],  // message XOR H₄(sigma)\n}\n```\n\n### Cairo: Direct Decryption in Your Contract\n\nIf you want to call the `decrypt_at_round` function directly from the garaga library:\n\n```cairo\nuse garaga::apps::drand::{CipherText, decrypt_at_round};\nuse garaga::definitions::G1Point;\n\nfn my_decrypt(signature: G1Point, ciphertext: CipherText) -> [u8; 16] {\n    // Performs: miller loop, final exponentiation, XOR decryption, and U = r·G₂ check\n    decrypt_at_round(signature, ciphertext)\n}\n```\n\n{% hint style=\"warning\" %}\n`decrypt_at_round` verifies ciphertext integrity (`U = r·G₂`) but does **not** verify that the provided signature is a valid drand BLS signature. You must verify the signature separately via `verify_round` or perform your own pairing check before calling this function.\n{% endhint %}\n\n---\n\n## Example: On-Chain Lottery\n\n```cairo\n#[starknet::contract]\nmod Lottery {\n    use starknet::ContractAddress;\n    use starknet::storage::{\n        Map, StorageMapReadAccess, StorageMapWriteAccess,\n        StoragePointerReadAccess, StoragePointerWriteAccess,\n    };\n    use starknet::{SyscallResultTrait, syscalls};\n\n    const DRAND_QUICKNET_CLASS_HASH: felt252 =\n        0x86bf4360e082cd786bd785d3345df32777db89cd26b761f3e85b1993addfd0;\n\n    #[storage]\n    struct Storage {\n        participants: Map<u32, ContractAddress>,\n        participant_count: u32,\n        target_round: u64,\n        is_open: bool,\n    }\n\n    #[external(v0)]\n    fn enter_lottery(ref self: ContractState) {\n        assert!(self.is_open.read(), \"Lottery closed\");\n        let count = self.participant_count.read();\n        self.participants.write(count, starknet::get_caller_address());\n        self.participant_count.write(count + 1);\n    }\n\n    #[external(v0)]\n    fn draw_winner(\n        ref self: ContractState,\n        full_proof_with_hints: Span<felt252>,\n    ) -> ContractAddress {\n        let mut call_data: Array<felt252> = array![];\n        Serde::serialize(@full_proof_with_hints, ref call_data);\n\n        let mut result = syscalls::library_call_syscall(\n            DRAND_QUICKNET_CLASS_HASH.try_into().unwrap(),\n            selector!(\"verify_round\"),\n            call_data.span(),\n        ).unwrap_syscall();\n\n        let round_result: Result<u64, felt252> = Serde::deserialize(ref result).unwrap();\n        let verified_round = round_result.unwrap();\n\n        assert!(verified_round == self.target_round.read(), \"Wrong round\");\n\n        let count: u256 = self.participant_count.read().into();\n        // Retrieve randomness from the verified round\n        let mut rand_call_data: Array<felt252> = array![];\n        Serde::serialize(@verified_round, ref rand_call_data);\n\n        let mut rand_result = syscalls::library_call_syscall(\n            DRAND_QUICKNET_CLASS_HASH.try_into().unwrap(),\n            selector!(\"get_randomness_for_round\"),\n            rand_call_data.span(),\n        ).unwrap_syscall();\n\n        let randomness: Result<felt252, felt252> = Serde::deserialize(ref rand_result).unwrap();\n        let winner_index: u32 = (randomness.unwrap().into() % count).try_into().unwrap();\n\n        self.participants.read(winner_index)\n    }\n}\n```\n\n## Example: Sealed-Bid Auction with tlock\n\nA sketch of how tlock enables sealed-bid auctions. Bids are encrypted for a future reveal round. Once drand publishes that round, bids can be decrypted on-chain.\n\n```\n1. Auction opens — bidders encrypt their bids for reveal_round using tlock\n2. Bidders submit a hash of their ciphertext on-chain (commitment)\n3. Auction closes — no more bids accepted\n4. drand publishes reveal_round signature\n5. Anyone calls decrypt_cipher_text to reveal each bid on-chain\n6. Contract determines the winner from the decrypted bids\n```\n\nThe ciphertext itself (a `G2Point` + 32 bytes) can be stored off-chain (e.g., IPFS) with only a commitment hash on-chain, or submitted directly in the decryption transaction.\n\n## Helper Functions\n\nThe `garaga::apps::drand` module provides utilities for working with drand rounds:\n\n```cairo\nuse garaga::apps::drand::{timestamp_to_round, round_to_timestamp};\n\n// Convert a Unix timestamp to a drand round number\nlet round = timestamp_to_round(1692803370);  // returns 2\n\n// Convert a drand round number to a Unix timestamp\nlet timestamp = round_to_timestamp(2);  // returns 1692803370\n```\n\n## Security Considerations\n\n- **Round timing**: Ensure you're using the correct round for your application's timing requirements. Use `timestamp_to_round` to map wall-clock time to drand rounds.\n- **Message size**: tlock encrypts exactly 16 bytes. Use it to encrypt a symmetric key for larger payloads.\n- **Ciphertext integrity**: The `decrypt_at_round` function verifies `U = r·G₂` to ensure the ciphertext was formed correctly. Tampered ciphertexts will be rejected.\n- **Finality**: Once a drand round is published, the signature is permanent. The ciphertext becomes decryptable by anyone with the round signature.\n- **Fallback**: Consider implementing fallback mechanisms if drand becomes unavailable.\n\n## Resources\n\n- [drand Website](https://drand.love)\n- [drand API Documentation](https://drand.love/developer/http-api/)\n- [Quicknet Information](https://drand.love/blog/2023/07/03/quicknet-is-live/)\n- [tlock Paper](https://eprint.iacr.org/2023/189) — \"tlock: Practical Timelock Encryption from Threshold BLS\"\n- [Verifier Source Code](https://github.com/keep-starknet-strange/garaga/tree/main/src/contracts/drand_quicknet)\n- [Decrypt Contract Source Code](https://github.com/keep-starknet-strange/garaga/tree/main/src/contracts/drand_decrypt_quicknet)\n"
  },
  {
    "path": "docs/gitbook/maintained-smart-contracts/risczero.md",
    "content": "---\nicon: microchip\n---\n\n# RiscZero\n\nRiscZero is a Zero-Knowledge Proof system designed to enable efficient and scalable construction of computational proofs based on the RISC-V architecture. It is Groth16-based and works over the BN254 elliptic curve.\n\nGaraga provides the tools and makes it possible to verify such proofs on-chain in a Starknet/Cairo smart contract.\n\nA Zero-Knowledge proof is a mathematical construct that guarantees that a given value is the output of a predefined computation where some of the inputs are private and must not be disclosed.\n\nThis is achieved in two steps:\n\n1- A Prover performs the computation and constructs the proof artifact. The proof artifact contains the computational journal which is, in simple terms, the list of public inputs and the output value. The proof artifact attests the integrity of the computation, which means the prover ran the computation properly and the output value registered in the journal corresponds to the result of such computation given the public inputs, also registered in the jornal, an some undisclosed private inputs. Here the Prover is a RiscZero user-defined program that implements the desired computation and is augmented to produce the desired proof artifact.\n\n2- Given the proof artifact, a Verifier must check its integrity before processing the output as valid. Here the Verifier is a Starknet smart contract written in Cairo and Garaga acts as a library to which the verification is delegated to.\n\n### Setting up the development environment\n\nBefore starting development we need to install all the software prerequisites for building either or both the Prover and Verifier components.\n\nBelow we provide general installation instructions for a Linux-based system. Depending on your setup you may already have some of the software installed, in which case you can skip the associated sections. But if you need additional help for a specific set up, please follow the links provided.\\\n\\\nIn order to implement the Prover one needs to install the tooling required by RiscZero:\n\n1. Install Rust/Cargo using [`rustup`](https://rustup.rs/) (default version 1.8.3)\n\n```bash\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y\nexport PATH=\"$HOME/.cargo/bin:$PATH\"\n```\n\n2. Install the RiscZero tool-chain using [`rzup`](https://dev.risczero.com/api/zkvm/install) (default version 1.2.0)\n\n```bash\ncurl -L https://risczero.com/install | bash\nexport PATH=\"$HOME/.risc0/bin:$PATH\"\nrzup install\n```\n\n_Important: Make sure the RiscZero version installed matches the version supported by Garaga. For RiscZero v2.2.2 use Garaga 1.1.0. Check [constants.json](https://github.com/keep-starknet-strange/garaga/blob/main/tools/make/constants.json) for the latest supported versions._\n\n3. Install RiscZero additional/custom dependencies\n\nA C compiler, such as `gcc`, `pkg-config` and OpenSSL development libraries (`libssl-dev)` are necessary to build a RiscZero project. You should refer to your system documentation on how to install those. Here is a quick reference for Debian compatible systems\n\n```bash\nsudo apt install -y gcc libssl-dev pkg-config\n```\n\nOptionally, if you intend to have the Prover generate the contract call data explicitly, Garaga requires that Python is available in your environment. If necessary, check their [documentation](https://docs.python.org/3/using/index.html) for installation instructions for your system. Again, here is a quick reference for Debian compatible systems\n\n```bash\nsudo apt install -y python3\n```\n\nIn order to implement the Verifier one needs to install the tooling for Cairo development and Garaga:\n\n4. Install the Starknet/Cairo bundler tool [`scarb`](https://docs.swmansion.com/scarb/download#install-via-installation-script) (default version 2.16.1)\n\n```bash\ncurl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | bash\nexport PATH=\"$HOME/.local/bin:$PATH\"\n```\n\n5. Install Starknet Foundry using [`snfoundryup`](https://foundry-rs.github.io/starknet-foundry/getting-started/installation.html) (default version 0.57.0)\n\n```bash\ncurl -L https://raw.githubusercontent.com/foundry-rs/starknet-foundry/master/scripts/install.sh | bash\nexport PATH=\"$HOME/.local/bin:$PATH\"\nsnfoundryup\n```\n\n### Create or configure the RiscZero project\n\n1. If you are setting up a new RiscZero project, run the command below, it will create a new project folder and define the Guest program name. The Guest program is the program that is compiled to and will run in the RiscZero VM. The project setup also creates a Host program that runs outside the RiscZero VM and interacts with the Guest, providing inputs and collecting outputs, to produce the ZK proof. Here we set up a sample project called `fibonacci_prover` with a Guest called `fibonacci_guest` (for reference, the complete RiscZero app presented here is available in [Garaga's GitHub repository](https://github.com/keep-starknet-strange/garaga/tree/main/src/contracts/risc0_sample_app))\n\n```\ncargo risczero new fibonacci_prover --guest-name fibonacci_guest\n```\n\nIf you already have a RiscZero project set up, make sure the RiscZero version configured as dependencies is consistent with the RiscZero toolchain installed in the previous steps.\n\n2. Next we need to modify the RiscZero Host program to output the proof artifact in the desired JSON format. Add the following dependencies to `host/Cargo.toml`\n\n```toml\n[dependencies]\nrisc0-ethereum-contracts = { version = \"1.2.0\" }\nhex = \"0.4\"\n...\n```\n\nOptionally, if you intend to explicitly generate and handle the call-data, also add the following dependency to `host/Cargo.toml`. Make sure to use a Garaga version tag that is consistent with your setup.\n\n<pre class=\"language-toml\"><code class=\"lang-toml\">[dependencies]\n<strong>garaga_rs = { git = \"https://github.com/keep-starknet-strange/garaga.git\", tag = \"v1.1.0\" }\n</strong>...\n</code></pre>\n\nThen we modify the Host program `host/src/main.rs` to generate the JSON file containing the proof artifact. We start by adding the required imports\n\n```rust\nuse risc0_zkvm::{\n    compute_image_id, default_prover, ExecutorEnv, ProverOpts, VerifierContext\n};\nuse risc0_ethereum_contracts::encode_seal;\n```\n\nOptionally, if you intend to generate the call-data explicitly, add the following imports\n\n```rust\nuse garaga_rs::definitions::CurveID;\nuse garaga_rs::calldata::full_proof_with_hints::groth16::{\n    get_groth16_calldata, Groth16Proof\n};\nuse garaga_rs::calldata::full_proof_with_hints::groth16::risc0_utils::get_risc0_vk;\n```\n\nNext we need to modify the Host main function.\n\nIf you are starting a fresh RiscZero project, you will need to setup the environment for the computation. This is basically the set of inputs that will be used by the Guest program to perform the computation.\n\nBelow is an example for the `fibonacci_prover`. In this example, we want to compute the number at position `n` of the Fibonacci sequence. However we do not want to reveal `n`, but instead show that `n` lies in a given interval defined by a lower bound `l` and an upper bound `u`.\n\n```rust\nlet l: u32 = 3; // public lower bound for n\nlet u: u32 = 8; // public upper bound for n\nlet n: u32 = 6; // private n for which we will compute fibonacci(n)\nlet env = ExecutorEnv::builder()\n    .write(&l)\n    .unwrap()\n    .write(&u)\n    .unwrap()\n    .write(&n)\n    .unwrap()\n    .build()\n    .unwrap();\n```\n\n_As a note, the sample app provided here exists only to demonstrate how to setup a ZK project using Garaga/RiscZero. It is clear that datatype `u32` is not appropriate datatype to host a secret Fibonacci number as it can be easily discovered by brute force checking all possibilities between the bounds._\n\nNext we modify the default Prover setup to explicitly use Groth16\n\n```rust\nlet prove_info = prover\n    .prove_with_ctx(\n        env,\n        &VerifierContext::default(),\n        FIBONACCI_GUEST_ELF,\n        &ProverOpts::groth16()\n    )\n    .unwrap();\n```\n\nFinally, as the last step of the Host program, we extract and print the proof artifact JSON to the standard output\n\n<pre class=\"language-rust\"><code class=\"lang-rust\"><strong>let receipt = prove_info.receipt;\n</strong>let seal = to_bytes(encode_seal(&#x26;receipt).unwrap());\nlet image_id = to_bytes(compute_image_id(&#x26;FIBONACCI_GUEST_ELF).unwrap());\nlet journal = to_bytes(receipt.journal);\nprintln!(\n    \"{{\\\"seal\\\": \\\"0x{}\\\", \\\"image_id\\\": \\\"0x{}\\\", \\\"journal\\\": \\\"0x{}\\\"}}\",\n    hex::encode(&#x26;seal),\n    hex::encode(&#x26;image_id),\n    hex::encode(&#x26;journal)\n);\n\n// helper function to convert objects to array of bytes\nfn to_bytes&#x3C;T: AsRef&#x3C;[u8]>>(obj: T) -> Vec&#x3C;u8> {\n    obj.as_ref().to_vec()\n}\n</code></pre>\n\nOptionally, if you also intend to handle the call-data explicitly, it can be computed and output as a JSON as well. This produces a large array that encodes the full RiscZero proof wih hints\n\n```rust\nlet proof = Groth16Proof::from_risc0(seal, image_id, journal);\nlet calldata = get_groth16_calldata(&proof, &get_risc0_vk(), CurveID::BN254).unwrap();\nprintln!(\"[{}]\", calldata.iter().skip(1).map(|v| format!(\"\\\"{}\\\"\", v)).collect::<Vec<_>>().join(\", \"));\n```\n\nNow we need to set up the Guest program that performs the computation required by our use case.\n\nIf you started a fresh RiscZero project, then you will need to write the Guest program that performs the computation. It is done by modifying the main function of the Guest source file at `methods/guest/src/main.rs`\n\nIn our example, here is what the Guest code looks like for the `fibonacci_guest`\n\n```rust\n// reads the public bounds and private n provided by the Host\nlet l: u32 = env::read();\nlet u: u32 = env::read();\nlet n: u32 = env::read();\n\n// sanity check for the bounds\nassert!(l <= n && n < u);\n\n// performs the computation\nlet fib_n: u32 = fibonacci(n);\n\nfn fibonacci(n: u32) -> u32 {\n    let mut a = 0;\n    let mut b = 1;\n    for _ in 0..n {\n        (a, b) = (b, a + b);\n    }\n    a\n}\n\n// writes the public inputs and output to the journal\nenv::commit(&l);\nenv::commit(&u);\nenv::commit(&fib_n);\n```\n\n### RiscZero Proof Generation\n\nRiscZero provides some options when it comes to proof generation. Please refer to their [documentation](https://dev.risczero.com/api/generating-proofs/proving-options) in case you need to in depth information on that. The easiest and most convenient way is to use the provided [Bonsai](https://www.bonsai.xyz/) service, which works fine for many purposes. In that case, an API key for the service is required.\n\n_It is important to note that, if your computation has private inputs, you should definitely protect them from being exposed to external services like Bonsai by performing the proof generation locally._\n\nHere is the command to run the Prover via Bonsai\n\n```\nBONSAI_API_KEY=<YOUR_API_KEY> BONSAI_API_URL=<BONSAI_URL> RISC0_DEV_MODE=0 \\\n    cargo run --release\n```\n\n### Developing the RiscZero Verifier smart contract\n\nThere are different ways one can choose to develop a Cairo smart contract, we recommend using Staknet Foundry. A fresh new project can be created by issuing the following command\n\n```bash\nsnforge new fibonacci_sequencer\n```\n\nThis will output a template for a smart contract along with the necessary tooling configuration to build and test it. In this case we are creating a contract called `fibonacci_sequencer`, that will process and update its state with a new number in the Fibonacci sequence that is guaranteed to have an index `n` in the sequence that is higher than the last one currently registered by the contract, although that exact index `n` is never revealed publicly.\n\nGaraga already provides a smart contract to verify RiscZero proofs. To make use of that functionality, one just has to call a predefined library function from the client smart contract. In order to do that, one needs to declare the interface of the RiscZero verifying library function in `src/lib.cairo`:\n\n```rust\n#[starknet::interface]\ntrait IRisc0Groth16VerifierBN254<TContractState> {\n    fn verify_groth16_proof_bn254(\n        self: @TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Option<Span<u8>>;\n}\n```\n\nThe `verify_groth16_proof_bn254` function takes the call data that encodes the proof with hints as a list of integers of type `felt252` and returns the journal (as a list of bytes) on proof verification success, or nothing if the verification fails.\n\nHere is how to verify the RiscZero proof and update the smart contract state for our Fibonacci sequencer example:\n\n```rust\nfn verify_and_submit_fibonacci_number(ref self: ContractState, full_proof_with_hints: Span<felt252>) {\n    // sets the class hash for the RiscZero verifier already declared on-chain\n    // by the Garaga team\n    let class_hash: ClassHash = RISC_ZERO_VERIFIER_CLASS_HASH.try_into().unwrap();\n\n    // instantiate a library dispatcher to perform the library call\n    // to the RiscZero verifier class, given that verifying a proof is\n    // a read-only operation\n    let dispatcher = IRisc0Groth16VerifierBN254LibraryDispatcher { class_hash };\n\n    // calls the RiscZero verifier passing along the proof artifact and\n    // checks whether the proof is valid or not, aborting the transaction if not\n    let optional_journal = dispatcher.verify_groth16_proof_bn254(full_proof_with_hints);\n    assert(optional_journal != Option::None, 'Invalid proof');\n\n    // parses the public inputs and output from the journal\n    let mut journal = optional_journal.unwrap();\n    let l = pop_front_u32_le(ref journal);\n    let u = pop_front_u32_le(ref journal);\n    let fib_n = pop_front_u32_le(ref journal);\n\n    // performs the necessary state update check, updates the state,\n    // and emits an event with the new fibnoacci number submitted\n    // the smart contract invariant guarantees that every fiboacci number\n    // accepted comes later in the fibonacci sequence without revealing\n    // its index, which is trivial for monotonic sequences like fibnacci,\n    // but would also work as expected also for non-monotonic ones\n    let b = self.lower_bound.read();\n    assert(l >= b, 'Invalid lower bound');\n    self.lower_bound.write(u);\n    self.emit(FibonnacciNumberSubmitted { n: fib_n });\n    self.emit(LowerBoundUpdated { n: u });\n}\n```\n\nAlong with the `verify_and_submit_fibonacci_number` contract method, we need to define the RiscZero Verifier class hash, which can be obtained [here](./)\n\n```rust\nuse core::starknet::ClassHash;\n\npub const RISC_ZERO_VERIFIER_CLASS_HASH: felt252 =\n    0x41d5e111b93acbf1afb531253e0bc64d43f90a8a99290361e851ec0c4968ab1;\n```\n\nThe contract state which stores the current lower bound which gets updated whenever a new Fibonacci number is submitted\n\n```rust\n#[storage]\nstruct Storage {\n    lower_bound: u32,\n}\n```\n\nAnd also the helper function used to decode the journal values\n\n```rust\nfn pop_front_u32_le(ref bytes: Span<u8>) -> u32 {\n    let [b0, b1, b2, b3] = (*bytes.multi_pop_front::<4>().unwrap()).unbox();\n    let b0: u32 = b0.into();\n    let b1: u32 = b1.into();\n    let b2: u32 = b2.into();\n    let b3: u32 = b3.into();\n    b0 + 256 * (b1 + 256 * (b2 + 256 * b3))\n}\n```\n\nFor completeness, we also provide the definition of the events emitted by the operation\n\n```rust\n#[event]\n#[derive(Drop, starknet::Event)]\nenum Event {\n    FibonnacciNumberSubmitted: FibonnacciNumberSubmitted,\n    LowerBoundUpdated: LowerBoundUpdated,\n}\n\n#[derive(Drop, starknet::Event)]\nstruct FibonnacciNumberSubmitted {\n    #[key]\n    n: u32,\n}\n\n#[derive(Drop, starknet::Event)]\nstruct LowerBoundUpdated {\n    #[key]\n    n: u32,\n}\n```\n\nIt is important to note that the `verify_and_submit_fibonacci_number` function defined in this sample contract has a signature that takes a single argument: the proof artifact. This is useful because we can then submit the transaction to the blockchain directly, simply using the Garaga CLI passing along the JSON file output by the RiscZero Host program. This avoids the need to encode the proof as a customized call data. It also spares us from dealing with the transaction submission details which is handled internally by the Garaga CLI.\n\nThis is an approach that makes sense when all the information required to validate and update the smart contract state can be extracted from the journal, exempting us from the need of passing additional parameters to the function which would deem it incompatible with the interface expected by the CLI. The CLI also requires the contract method processing the proof (referred to as endpoint) to have the word `verify` as part of it.\n\nOnce the Cairo smart contract is ready, it can be deployed in three steps:\n\n*   Declare\n\n    ```bash\n    sncast --profile <PROFILE_NAME> declare --contract-name <CAIRO_MOD_NAME>\n    ```\n\n    This will declare the smart contract class and return its hash.\n*   Deploy\n\n    ```bash\n    sncast --profile <PROFILE_NAME> deploy --class-hash <CLASS_HASH>\n    ```\n\n    This will deploy the smart contract instance and return its address.\n*   Verify (Optional)\n\n    ```bash\n    sncast --profile <PROFILE_NAME> verify \\\n        --network <MAINNET_OR_SEPOLIA> \\\n        --contract-name <CAIRO_MOD_NAME> \\\n        --contract-address <CONTRACT_ADDRESS>\n    ```\n\n    This will match the deployed code with the smart contract source code and make it available on Starknet block explorers.\n\nBefore running any of the commands above, one has to configure foundry to add the desired profile name. That is achieved by editing the `snfoundry.toml` file. Here is a sample configuration as reference\n\n```toml\n[sncast.sepolia]\naccount = \"deployer\"\naccounts-file = \"./accounts.json\"\nurl = \"https://starknet-sepolia.public.blastapi.io/rpc/v0_7\"\n```\n\nThis requires an `accounts.json` file. One such a way to generate it is using the following command\n\n```bash\nsncast account import \\\n    --name deployer \\\n    --type <ACCOUNT_TYPE> \\\n    --address <ACCOUNT_ADDRESS> \\\n    --private-key <ACCOUNT_PRIVATE_KEY>\n```\n\nOne can setup an [ArgentX](https://www.argent.xyz/) or [Braavos](https://braavos.app/) wallet, fund it, and export its private key.\n\n### Submitting the proof to the blockchain using the Garaga CLI\n\nOnce the smart contract is published on the blockchain network, users can interact with it. In our case, one such interaction would be to perform a computation off-chain with RiscZero and submit it to the smart contract.\n\nAs mentioned before, the JSON proof artifact generated by the RiscZero execution can be submitted to the blockchain using Garaga CLI:\n\n```bash\ngaraga verify-onchain \\\n  --system risc0_groth16 \\\n  --network <mainnet_OR_sepolia> \\\n  --contract-address <CONTRACT_ADDRESS> \\\n  --endpoint <SMART_CONTRACT_FUNCTION_NAME> \\\n  --proof <PATH_TO_PROOF_ARTIFACT_JSON>\n```\n\nIn order to run the Garaga `verify-onchain` command you will need to provide a .`secrets` file in the current folder, or elsewhere using the `--env-file` option. Here is the format for the `.secrets` file\n\n```\nSEPOLIA_RPC_URL=\"https://starknet-sepolia.public.blastapi.io/rpc/v0_7\"\nSEPOLIA_ACCOUNT_PRIVATE_KEY=\nSEPOLIA_ACCOUNT_ADDRESS=\n\nMAINNET_RPC_URL=\"https://starknet-mainnet.public.blastapi.io/rpc/v0_7\"\nMAINNET_ACCOUNT_PRIVATE_KEY=\nMAINNET_ACCOUNT_ADDRESS=\n```\n\nPlease make sure to provide RPC endpoints that supports version 0.7 of the Starknet JSON API\n"
  },
  {
    "path": "docs/gitbook/maintained-smart-contracts/sp1.md",
    "content": "---\nicon: microchip\n---\n\n# SP1\n\nTo use the SP1 Groth16 verifier on Starknet, you can follow code snippets from the [SP1 documentation](https://docs.succinct.xyz/docs/sp1/introduction) to generate a proof.\\\n\\\nThe version of SP1 expected by Garaga is defined in the file [constants.json](https://github.com/keep-starknet-strange/garaga/blob/main/tools/make/constants.json) .\\\n\\\nA template modeled after [Succinct's official one](https://github.com/succinctlabs/sp1-project-template/) for solidity and EVM is available in [this repository](https://github.com/feltroidprime/SP1-starknet-garaga-template/)\\\nPlease follow the instructions there to get you started.&#x20;\n"
  },
  {
    "path": "docs/gitbook/security.md",
    "content": "---\nicon: shield-check\n---\n\n# Security\n\nGaraga is designed with security as a primary concern. This page documents our security practices, audit history, and important considerations for users.\n\n---\n\n## Audit Status\n\n### ✅ Audited by CryptoExperts\n\nGaraga has undergone a comprehensive security audit:\n\n| Audit | Auditor | Date | Report |\n|-------|---------|------|--------|\n| **Garaga v1.1.0** | [CryptoExperts](https://www.cryptoexperts.com/) | June 27, 2025 | [View Report (PDF)](https://github.com/keep-starknet-strange/garaga/blob/main/docs/Garaga-audit-report-v2.pdf) |\n\n{% hint style=\"success\" %}\nThe audit covered core cryptographic operations including pairing checks, multi-scalar multiplication, and the Groth16 verifier implementation.\n{% endhint %}\n\n---\n\n## Security Considerations\n\n### Signature Verification\n\n{% hint style=\"warning\" %}\n**Hash Computation Responsibility**\n\nThe functions `is_valid_ecdsa_signature_assuming_hash` and `is_valid_schnorr_signature_assuming_hash` verify signature equations but **do not hash the message**. The caller is responsible for:\n\n1. Correctly computing the message hash\n2. Using the appropriate hash function for the signature scheme\n3. Ensuring the hash is computed over the correct message\n\n**Incorrect hash computation will result in invalid signatures being accepted or valid signatures being rejected.**\n{% endhint %}\n\n### EdDSA (Ed25519) Specific\n\nThe EdDSA implementation includes protections against common attacks:\n\n- ✅ **Small-order point rejection**: Explicitly rejects points in small subgroups\n- ✅ **Cofactor handling**: Properly handles the Ed25519 cofactor\n- ✅ **Canonical encoding**: Enforces canonical point encoding\n\n### Curve Selection\n\nWhen using Garaga's curve-agnostic APIs, ensure you:\n\n1. Use the correct `curve_id` for your application\n2. Understand the security properties of your chosen curve\n3. Use appropriate key sizes and parameters\n\n| Curve | Security Level | Notes |\n|-------|----------------|-------|\n| BN254 | ~100 bits | Widely used in Ethereum ecosystem |\n| BLS12-381 | ~128 bits | Recommended for new applications |\n| SECP256K1 | ~128 bits | Bitcoin/Ethereum compatibility |\n| SECP256R1 | ~128 bits | WebAuthn/TLS compatibility |\n| ED25519 | ~128 bits | High performance EdDSA |\n\n---\n\n## Responsible Disclosure\n\nIf you discover a security vulnerability in Garaga:\n\n1. **Do NOT** open a public GitHub issue\n2. **DO** email the maintainers privately\n3. **DO** provide detailed information about the vulnerability\n4. **DO** allow reasonable time for a fix before public disclosure\n\nSee our [Security Policy](https://github.com/keep-starknet-strange/garaga/blob/main/docs/SECURITY.md) for contact information.\n\n---\n\n## Cryptographic References\n\nGaraga's implementations are based on peer-reviewed cryptographic research. We recommend understanding these papers if you're building security-critical applications:\n\n### Zero-Knowledge Proofs\n\n| Paper | Authors | Reference |\n|-------|---------|-----------|\n| **Groth16** | Jens Groth | \"On the Size of Pairing-Based Non-interactive Arguments\" EUROCRYPT 2016. [ePrint 2016/260](https://eprint.iacr.org/2016/260) |\n| **PLONK** | Gabizon, Williamson, Ciobotaru | \"PLONK: Permutations over Lagrange-bases for Oecumenical Noninteractive arguments of Knowledge\" [ePrint 2019/953](https://eprint.iacr.org/2019/953) |\n\n### Elliptic Curves & Pairings\n\n| Paper | Authors | Reference |\n|-------|---------|-----------|\n| **Efficient Pairings** | Youssef El Housni | \"Pairings in Rank-1 Constraint Systems\" [ePrint 2022/1162](https://eprint.iacr.org/2022/1162) |\n| **ECIP** | Liam Eagen | \"Zero Knowledge Proofs of Elliptic Curve Inner Products from Principal Divisors and Weil Reciprocity\" [ePrint 2022/596](https://eprint.iacr.org/2022/596) |\n| **On Proving Pairings** | Novakovic & Eagen | [ePrint 2024/640](https://eprint.iacr.org/2024/640) |\n| **Fast EC Scalar Multiplications** | Eagen, El Housni, Masson, Piellard | [ePrint 2025/933](https://eprint.iacr.org/2025/933) |\n| **Pairing for Beginners** | Craig Costello | [PDF](https://static1.squarespace.com/static/5fdbb09f31d71c1227082339/t/5ff394720493bd28278889c6/1609798774687/PairingsForBeginners.pdf) |\n\n### Signatures\n\n| Paper | Authors | Reference |\n|-------|---------|-----------|\n| **EdDSA** | Bernstein et al. | \"High-speed high-security signatures\" [ed25519.cr.yp.to](https://ed25519.cr.yp.to/) |\n| **Taming EdDSAs** | Chalkias, Garillot, Nikolaenko | \"Taming the Many EdDSAs\" SSR 2020. [ACM DL](https://dl.acm.org/doi/abs/10.1007/978-3-030-64357-7_4) |\n| **BIP340** | Wuille, Nick, Towns | \"Schnorr Signatures for secp256k1\" [BIP340](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki) |\n\n### Randomness\n\n| Paper | Authors | Reference |\n|-------|---------|-----------|\n| **drand** | Syta et al. | \"Scalable Bias-Resistant Distributed Randomness\" IEEE S&P 2017 |\n| **Time-Lock Encryption** | Gailly, Melissaris, Romailler | \"tlock: Practical Timelock Encryption from Threshold BLS\" [ePrint 2023/189](https://eprint.iacr.org/2023/189) |\n\n---\n\n## Disclaimer\n\n{% hint style=\"danger\" %}\n**USE AT YOUR OWN RISK**\n\nGaraga is provided \"as is\" without any warranty. While we strive for correctness and security:\n\n- 100% security cannot be assured\n- Cryptographic software is inherently complex\n- Always perform your own security review for production use\n- Consider additional audits for high-value applications\n\nSee the [MIT License](https://github.com/keep-starknet-strange/garaga/blob/main/LICENSE) for full terms.\n{% endhint %}\n\n---\n\n## Security Checklist\n\nBefore deploying to production:\n\n- [ ] Understand the cryptographic assumptions\n- [ ] Test thoroughly on testnet first\n- [ ] Use the latest stable release\n- [ ] Monitor for security advisories\n- [ ] Consider additional application-level audits\n"
  },
  {
    "path": "docs/gitbook/smart-contract-generators/README.md",
    "content": "---\nicon: monero\n---\n\n# Deploy your own SNARK verifier on Starknet\n\nSupported verifiers:\n\n* [groth16](groth16/ \"mention\")\n* [noir.md](noir.md \"mention\")\n"
  },
  {
    "path": "docs/gitbook/smart-contract-generators/groth16/README.md",
    "content": "---\nicon: bat\n---\n\n# Groth16\n\n"
  },
  {
    "path": "docs/gitbook/smart-contract-generators/groth16/generate-and-deploy-your-verifier-contract.md",
    "content": "---\nicon: file-lock\n---\n\n# Generate and deploy your verifier contract\n\n## Prepare your Groth16 verifying key\n\n{% hint style=\"info\" %}\nPairing operations over BLS12-381 are cheaper than BN254 on Garaga, so if possible, prefer using BLS12-381. The security of this curve is also much closer to 128 bits than BN254.&#x20;\n{% endhint %}\n\n\\\nTo deploy a groth16 verifier, you need the associated verifying key in `.json` format. Both BN254 and BLS12-381 are supported.&#x20;\n\n[Snarkjs](https://github.com/iden3/snarkjs?tab=readme-ov-file#22-export-the-verification-key) and [Gnark](https://docs.gnark.consensys.io/HowTo/serialize) jsons output are supported out of the box.&#x20;\n\nYou can find a bunch of example of verifying keys that will work directly in the [`hydra/garaga/starknet/groth16_contract_generator/examples`](https://github.com/keep-starknet-strange/garaga/tree/main/hydra/garaga/starknet/groth16\\_contract\\_generator/examples) folder.\n\nWhile Snarkjs jsons export are easy and working well, the gnark documentation is a bit outdated. Below we show a quick example on how to export the verifying key from your Gnark circuit .\n\n\n\n<details>\n\n<summary>Gnark export to json example</summary>\n\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"os\"\n\n\t\"github.com/consensys/gnark-crypto/ecc\"\n\t\"github.com/consensys/gnark/backend/groth16\"\n\t\"github.com/consensys/gnark/frontend\"\n\t\"github.com/consensys/gnark/frontend/cs/r1cs\"\n)\n\n// CubicCircuit defines a simple circuit\n// x**3 + x + 5 == y\ntype CubicCircuit struct {\n\t// struct tags on a variable is optional\n\t// default uses variable name and secret visibility.\n\tX frontend.Variable `gnark:\"x\"`\n\tY frontend.Variable `gnark:\",public\"`\n\tB frontend.Variable\n\tA frontend.Variable `gnark:\",public\"`\n}\n\n// Define declares the circuit constraints\n// x**3 + x + 5 == y\nfunc (circuit *CubicCircuit) Define(api frontend.API) error {\n\tx3 := api.Mul(circuit.X, circuit.X, circuit.X)\n\tapi.AssertIsEqual(circuit.Y, api.Add(x3, circuit.X, 5))\n\tapi.AssertIsEqual(circuit.B, circuit.A)\n\treturn nil\n}\n\nfunc main() {\n\t// compiles our circuit into a R1CS\n\tvar circuit CubicCircuit\n\tccs, _ := frontend.Compile(ecc.BN254.ScalarField(), r1cs.NewBuilder, &circuit)\n\n\t// groth16 zkSNARK: Setup\n\tpk, vk, _ := groth16.Setup(ccs)\n\n\t// witness definition\n\tassignment := CubicCircuit{X: 3, Y: 35, A: 3, B: 3}\n\twitness, _ := frontend.NewWitness(&assignment, ecc.BN254.ScalarField())\n\tpublicWitness, _ := witness.Public()\n\n\t// groth16: Prove & Verify\n\tproof, _ := groth16.Prove(ccs, pk, witness)\n\n\tgroth16.Verify(proof, vk, publicWitness)\n\tvk.ExportSolidity(os.Stdout)\n\t// Export to JSON:\n\tschema, _ := frontend.NewSchema(&circuit)\n\tpubWitnessJSON, _ := publicWitness.ToJSON(schema)\n\n\tSaveToJSON(\"gnark_vk_bn254.json\", vk)\n\tSaveToJSON(\"gnark_proof_bn254.json\", proof)\n\tos.WriteFile(\"gnark_public_bn254.json\", pubWitnessJSON, 0644)\n\n}\n\nfunc SaveToJSON(filePath string, v interface{}) error {\n\tjsonData, err := json.MarshalIndent(v, \"\", \"  \")\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = os.WriteFile(filePath, jsonData, 0644)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n```\n\n</details>\n\n## Generate the Smart contract code\n\n\\\nUsing the [developer-setup-and-guides](../../developer-setup-and-guides/ \"mention\") or the [python-package.md](../../installation/python-package.md \"mention\"), you should now have access to the Garaga CLI from your terminal, using the command `garaga`\n\n```bash\ngaraga\n```\n\nOnce your verifying key is ready, you can use the following command :&#x20;\n\n```\ngaraga gen --system groth16 --vk vk.json\n```\n\nYou should see an output like this :\n\n```bash\n(venv) :~/garaga-flow garaga gen --system groth16 --vk vk_bls.json\nPlease enter the name of your project. Press enter for default name. [my_project]:\nDetected curve: CurveID.BLS12_381\n⠧ Generating Smart Contract project for ProofSystem.Groth16 using vk_bls.json...\nDone!\nSmart Contract project created:\n/home/garaga-flow/my_project/\n├── Scarb.lock\n├── Scarb.toml\n├── src/\n│   ├── groth16_verifier.cairo\n│   ├── groth16_verifier_constants.cairo\n│   └── lib.cairo\n└── target/\n    └── dev/\n        ├── groth16_example_bls12_381.starknet_artifacts.json\n        ├── groth16_example_bls12_381_Groth16VerifierBLS12_381.compiled_contract\n        │   _class.json\n        └── groth16_example_bls12_381_Groth16VerifierBLS12_381.contract_class.js\n            on\nYou can now modify the groth16_verifier.cairo file to adapt the verifier to your\nuse case.\n\n```\n\nThe curve identifier is automatically detected from the content of your verifying key.&#x20;\n\n## Build your contract\n\n{% hint style=\"info\" %}\nThe generated verifier contract only verifies a proof and returns the public inputs on success. You can extend it to add your dapp logic, or use it as a library call from another contract.\n{% endhint %}\n\nThe generated template is as follows. The main endpoint is `verify_groth16_proof_[curve_name]`.\n\nThe function takes a single `full_proof_with_hints: Span<felt252>` parameter (generated using the `garaga calldata` command or the SDK) and returns:\n- `Result::Ok(public_inputs)` if the proof is valid\n- `Result::Err(error)` if the proof is invalid\n\n{% code title=\"groth16_verifier.cairo\" %}\n```rust\n// Generated by Garaga version 1.1.0\n\nuse super::groth16_verifier_constants::{N_PUBLIC_INPUTS, ic, precomputed_lines, vk};\n\n#[starknet::interface]\npub trait IGroth16VerifierBLS12_381<TContractState> {\n    fn verify_groth16_proof_bls12_381(\n        self: @TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u256>, felt252>;\n}\n\n#[starknet::contract]\nmod Groth16VerifierBLS12_381 {\n    use garaga::definitions::{G1G2Pair, G1Point};\n    use garaga::ec_ops::{G1PointTrait, ec_safe_add};\n    use garaga::groth16::{\n        Groth16ProofRawTrait, multi_pairing_check_bls12_381_3P_2F_with_extra_miller_loop_result,\n    };\n    use garaga::utils::calldata::deserialize_full_proof_with_hints_bls12_381;\n    use starknet::SyscallResultTrait;\n    use super::{N_PUBLIC_INPUTS, ic, precomputed_lines, vk};\n\n    const ECIP_OPS_CLASS_HASH: felt252 =\n        0x312d1dd5f967eaf6f86965e3fa7acbc9d0fbd979066a17721dd913736af2f5e;\n\n    #[storage]\n    struct Storage {}\n\n    #[abi(embed_v0)]\n    impl IGroth16VerifierBLS12_381 of super::IGroth16VerifierBLS12_381<ContractState> {\n        fn verify_groth16_proof_bls12_381(\n            self: @ContractState, full_proof_with_hints: Span<felt252>,\n        ) -> Result<Span<u256>, felt252> {\n            // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n            // This function returns Result::Ok(public_inputs) if the proof is valid.\n            // If the proof is invalid, it returns Result::Err(error).\n            // Read the documentation to learn how to generate the full_proof_with_hints array given\n            // a proof and a verifying key.\n            let fph = deserialize_full_proof_with_hints_bls12_381(full_proof_with_hints);\n            let groth16_proof = fph.groth16_proof;\n            let mpcheck_hint = fph.mpcheck_hint;\n            let msm_hint = fph.msm_hint;\n\n            groth16_proof.raw.check_proof_points(1);\n\n            let ic = ic.span();\n\n            let vk_x: G1Point = match ic.len() {\n                0 => panic!(\"Malformed VK\"),\n                1 => *ic.at(0),\n                _ => {\n                    // Start serialization with the hint array directly to avoid copying it.\n                    let mut msm_calldata: Array<felt252> = array![];\n                    // Add the points from VK and public inputs to the proof.\n                    Serde::serialize(@ic.slice(1, N_PUBLIC_INPUTS), ref msm_calldata);\n                    Serde::serialize(@groth16_proof.public_inputs, ref msm_calldata);\n                    // Complete with the curve indentifier (1 for BLS12_381):\n                    msm_calldata.append(1);\n                    // Add the hint array.\n                    for x in msm_hint {\n                        msm_calldata.append(*x);\n                    }\n\n                    // Call the multi scalar multiplication endpoint on the Garaga ECIP ops contract\n                    // to obtain vk_x.\n                    let mut _vx_x_serialized = starknet::syscalls::library_call_syscall(\n                        ECIP_OPS_CLASS_HASH.try_into().unwrap(),\n                        selector!(\"msm_g1\"),\n                        msm_calldata.span(),\n                    )\n                        .unwrap_syscall();\n\n                    ec_safe_add(\n                        Serde::<G1Point>::deserialize(ref _vx_x_serialized).unwrap(), *ic.at(0), 1,\n                    )\n                },\n            };\n            // Perform the pairing check.\n            let check = multi_pairing_check_bls12_381_3P_2F_with_extra_miller_loop_result(\n                G1G2Pair { p: vk_x, q: vk.gamma_g2 },\n                G1G2Pair { p: groth16_proof.raw.c, q: vk.delta_g2 },\n                G1G2Pair { p: groth16_proof.raw.a.negate(1), q: groth16_proof.raw.b },\n                vk.alpha_beta_miller_loop_result,\n                precomputed_lines.span(),\n                mpcheck_hint,\n            );\n            match check {\n                Result::Ok(_) => Result::Ok(groth16_proof.public_inputs),\n                Result::Err(error) => Result::Err(error),\n            }\n        }\n    }\n}\n```\n{% endcode %}\n\n## Declare and deploy your contract\n\nWhen you are satisfied with your contract it's time to send it to Starknet!\n\nThe CLI provides utilities to simplify the process. Otherwise, it is a similar process than for every other contracts, please refer to [Starknet documentation](https://docs.starknet.io/quick-start/declare-a-smart-contract/).\\\n\\\nYou will to create a file containing the following variables, depending on if you want to declare & deploy on Starknet Sepolia or Starknet Mainnet. \\\nCreate the following file and update its content.&#x20;\n\n{% code title=\".secrets\" %}\n```\nSEPOLIA_RPC_URL=\"https://free-rpc.nethermind.io/sepolia-juno\"\nSEPOLIA_ACCOUNT_PRIVATE_KEY=0x1\nSEPOLIA_ACCOUNT_ADDRESS=0x2\n\nMAINNET_RPC_URL=\"https://\"\nMAINNET_ACCOUNT_PRIVATE_KEY=0x3\nMAINNET_ACCOUNT_ADDRESS=0x4\n```\n{% endcode %}\n\nThen, you can run the command `garaga declare`, which will build the contract and declare it to Starknet. If the class hash is already deployed, it will return it as well. Declaring the contract involves sending all its bytecode and it is quite an expensive operation. Make sure you dapp is properly tested before!\n\n```bash\n Usage: garaga declare [OPTIONS]\n\n Declare your smart contract to Starknet. Obtain its class hash and a explorer link.\n\n╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ --project-path          DIRECTORY          Path to the Cairo project holding the Scarb.toml file to declare                         │\n│                                            [default: /home/felt/garaga-flow/my_project/]                            │\n│ --env-file              FILE               Path to the environment file                                                             │\n│                                            [default: /home/felt/garaga-flow/my_project/.secrets]                    │\n│ --network               [sepolia|mainnet]  Starknet network [default: sepolia]                                                      │\n│ --fee                   TEXT               Fee token type [eth, strk] [default: eth]                                                │\n│ --help          -h                         Show this message and exit.                                                              │\n╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n```\n\n```bash\ngaraga declare --project-path my_project/ --env-file .secrets --network sepolia --fee strk\n```\n\nThis command will return the class hash, used in the next step.\\\n\\\nFinally, to deploy the contract, a use `garaga deploy` :\n\n```bash\n Usage: garaga deploy [OPTIONS]\n\n Deploy an instance of a smart contract class hash to Starknet. Obtain its address, the available endpoints and a explorer link.\n\n╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ *  --class-hash          TEXT               Contract class hash to deploy. Can be decimal or hex string [default: None] [required]  │\n│    --env-file            FILE               Path to the environment file containing rpc, address, private_key                       │\n│                                             [default: /home/felt/garaga-flow/my_project/.secrets]                   │\n│    --network             [sepolia|mainnet]  Starknet network [default: sepolia]                                                     │\n│    --fee                 TEXT               Fee token type [eth, strk] [default: strk]                                              │\n│    --help        -h                         Show this message and exit.                                                             │\n╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n```\n\nThe contract address will be prompted. Be sure to save it! \\\n"
  },
  {
    "path": "docs/gitbook/smart-contract-generators/groth16/generating-calldata-from-a-proof-and-using-your-deployed-contract/README.md",
    "content": "---\nicon: microchip\n---\n\n# Generating calldata from a proof and using your deployed contract\n\n{% hint style=\"warning\" %}\n**Version Compatibility:** Use the same Garaga SDK version (pip/npm/Rust) that generated your verifier contract. Mismatched versions produce incompatible calldata and cause verification to fail.\n{% endhint %}\n\n\n\nOnce your groth16 contract is deployed and you have its address, you will need to call its main endpoint `verify_groth16_proof_bn254`, or `verify_groth16_proof_bls12_381`. \\\n\\\nThe Groth16 proof needs pre-processing and extra computation to allow efficient verification. \\\n\\\nThe Garaga CLI takes care of converting your proof to the correct calldata and calling your contract.\\\nTo do this, use the garaga `verify-onchain` command.&#x20;\n\n```bash\n Usage: garaga verify-onchain [OPTIONS]\n\n Invoke a SNARK verifier on Starknet given a contract address, a proof and a verification key.\n\n╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\n│ *  --system                    [groth16]          Proof system [default: None] [required]                                           │\n│ *  --contract-address          TEXT               Starknet contract address [default: None] [required]                              │\n│ *  --vk                        FILE               Path to the verification key JSON file [default: None] [required]                 │\n│ *  --proof                     FILE               Path to the proof JSON file [default: None] [required]                            │\n│    --public-inputs             FILE               Path to the public inputs JSON file [default: None]                               │\n│    --endpoint                  TEXT               Smart contract function name. If not provided, the default                        │\n│                                                   'verify_[proof_system]_proof_[curve_name]' will be used.                          │\n│    --env-file                  FILE               Path to the environment file containing rpc, address, private_key                 │\n│                                                   [default: /home/felt/PycharmProjects/garaga-flow/my_project/target/.secrets]      │\n│    --network                   [sepolia|mainnet]  Starknet network [default: sepolia]                                               │\n│    --help              -h                         Show this message and exit.                                                       │\n╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\n```\n\nAs for the verifying key, both Snarkjs and Gnark `proof.json` and `public.json` are supported out of the box. See the example in the [generate-and-deploy-your-verifier-contract.md](../generate-and-deploy-your-verifier-contract.md \"mention\") for Gnark export.\n\nAlternatively, the `--public-inputs` parameter can be omitted if your proof include everything at once, as below.\n\n<pre class=\"language-json\" data-title=\"my_proof.json\"><code class=\"lang-json\">{\n    \"eliptic_curve_id\": \"bn254\",\n    \"proof\": {\n        \"a\": {\n            \"x\": \"0x2abaae3dd6e4c662f5e071bca525a26d21e2400d01d02c87bce2e8363285990a\",\n            \"y\": \"0x24211ff0aa742a6dd1651aadce6f72757beb89de2cff83a6162de7c15674c2\"\n        },\n        \"b\": {\n            \"x\": [\n                \"0x2335f1564c154d7a2ec5d11faf6d991a205bef2858f1687976d0a46502f5224a\",\n                \"0x223af0bb0912d8ebc535ed489d06cd01fcf4a8ab4596cc28164edf9041d97080\"\n            ],\n            \"y\": [\n                \"0x182e8fd86a44983de1d1d9dc4f12f134535b75d39f7aeb21adbf57e1a32ee603\",\n                \"0xecb11668a0dd5d5031b0837e62ba14222b45718dc101c1278f44a9ed823c16b\"\n            ]\n        },\n        \"c\": {\n            \"x\": \"0x290243624a4c11868e7cb0c0f7cfd690dac08e4205d19795b0a8f686dddcdfd6\",\n            \"y\": \"0x15de00cc8af159fbdbdc802592e83e1ac61a8026b97e8889b8c5def59ec50b16\"\n        }\n    },\n    \"public_inputs\": [\n        \"0x1e17db88c1d2e83e49f692cce4bb8169309de90afb2b141156243106aa34b474\"\n    ]\n<strong>}\n</strong></code></pre>\n\nThe command should look like this:\n\n{% code overflow=\"wrap\" %}\n```\ngaraga verify-onchain --system groth16 --contract-address 0x1234... --vk vk.json --proof proof.json --public-inputs public.json --env-file .secrets --network sepolia\n```\n{% endcode %}\n\nIf everything is good, the command will output the transaction hash along with an explorer link. \\\nCongrats!\n"
  },
  {
    "path": "docs/gitbook/smart-contract-generators/groth16/generating-calldata-from-a-proof-and-using-your-deployed-contract/using-python-garaga-cli.md",
    "content": "# Using Python/Garaga CLI\n\nUsing the `garaga calldata` command from the CLI, you can generate the calldata needed to verify a proof for the `verify_groth16_proof_[curve_name]`.\n\nFirst, ensure that:\n\n* Your circuit is compiled and the verification key `verification_key.json` is created\n* The public input file `public.json` and the associated proof `proof.json` are created\n\nThe call the following command by replacing the parameters with your data:\n\n```bash\ngaraga calldata --system groth16 --vk verification_key.json --proof proof.json --public-inputs public.json\n2789 41983001825546257095993508953 3045291465937026073442547681 1840582864647114302 0 69020349870260156176548317333 16784567729677911275297018120 1865382613176499468 0 51545988015561248414407597558 44248521764831362261757723052 8850086 ...\n```\n\n## `starkli` usage\n\nUsing the command option `--format starkli`,\\\nyou can directly pipe the generated calldata to `starkli` to invoke a transaction on your deployed contract.\n\nThe proof must be the last parameter of your contract's method.\n\n```bash\ngaraga calldata --system groth16 --vk verification_key.json --proof proof.json --public-inputs public.json --format starkli | xargs starkli invoke --keystore-password $KEYSTORE_PASSWORD --watch $YOUR_CONTRACT your_verify_method YOUR_PARAMETERS\n```\n\n## Cairo code usage\n\nUse the command option `--format array` to generate calldata in array format to be used in your smart-contract tests.\n\n```bash\ngaraga calldata --system groth16 --vk verification_key.json --proof proof.json --public-inputs public.json --format array\n[2789, 41983001825546257095993508953, 3045291465937026073442547681, 1840582864647114302, 0, 69020349870260156176548317333, 16784567729677911275297018120, 1865382613176499468, 0, 51545988015561248414407597558, 44248521764831362261757723052, 88500861247646845, 0, ... ]\n```\n"
  },
  {
    "path": "docs/gitbook/smart-contract-generators/groth16/generating-calldata-from-a-proof-and-using-your-deployed-contract/using-rust.md",
    "content": "# Using Rust\n\nAdd the [rust-crate.md](../../../installation/rust-crate.md \"mention\") to your project.\n\n```rust\n// Version must match the pip package that generated the verifier\nuse garaga_rs::calldata::full_proof_with_hints::groth16::{\n    get_groth16_calldata, Groth16Proof, Groth16VerifyingKey,\n};\nuse garaga_rs::definitions::CurveID;\nuse std::fs;\n\nfn main() -> Result<(), String> {\n    // 1. Load and parse verification key from JSON\n    let vk_json = fs::read_to_string(\"verification_key.json\").map_err(|e| e.to_string())?;\n    let vk = Groth16VerifyingKey::from_json(&vk_json)?;\n\n    // 2. Load and parse proof from JSON\n    let proof_json = fs::read_to_string(\"proof.json\").map_err(|e| e.to_string())?;\n    let public_inputs_json = fs::read_to_string(\"public.json\").map_err(|e| e.to_string())?;\n    let proof = Groth16Proof::from_json(&proof_json, &public_inputs_json)?;\n\n    // 3. Generate calldata (curve is auto-detected from vk)\n    let calldata = get_groth16_calldata(&proof, &vk, CurveID::BN254)?;\n\n    println!(\"Calldata length: {}\", calldata.len());\n\n    // The calldata can now be used to call your deployed verifier contract\n    Ok(())\n}\n```\n\n{% hint style=\"info\" %}\nThe `CurveID` should match your verifying key's curve: `CurveID::BN254` or `CurveID::BLS12_381`.\n{% endhint %}\n\n## Alternative: Using JSON files directly\n\nIf your proof and public inputs are in separate Snarkjs-style JSON files:\n\n```rust\nuse garaga_rs::calldata::full_proof_with_hints::groth16::{\n    get_groth16_calldata, Groth16Proof, Groth16VerifyingKey,\n};\nuse garaga_rs::definitions::CurveID;\n\n// Parse verification key\nlet vk = Groth16VerifyingKey::from_json(&vk_json_string)?;\n\n// Parse proof with separate public inputs\nlet proof = Groth16Proof::from_json(&proof_json_string, &public_inputs_json_string)?;\n\n// Generate calldata\nlet calldata = get_groth16_calldata(&proof, &vk, CurveID::BN254)?;\n```\n\nSee the [Rust crate documentation](https://github.com/keep-starknet-strange/garaga/tree/main/tools/garaga_rs) for more details.\n"
  },
  {
    "path": "docs/gitbook/smart-contract-generators/groth16/generating-calldata-from-a-proof-and-using-your-deployed-contract/using-typescript.md",
    "content": "# Using Typescript\n\nUsing the `garaga` [npm-package.md](../../../installation/npm-package.md \"mention\")\n\n## Node.js (with file reading)\n\n```typescript\nimport * as garaga from 'garaga';\nimport { CurveId } from 'garaga';\nimport { readFileSync } from 'fs';\n\nawait garaga.init();\n\n// Parse from file paths (Node.js only)\nconst vk = garaga.parseGroth16VerifyingKeyFromJson('verification_key.json');\nconst proof = garaga.parseGroth16ProofFromJson('proof.json', 'public.json');\n\nconst calldata = garaga.getGroth16CallData(proof, vk, CurveId.BN254);\n```\n\n## From JSON objects (Node.js and Browser)\n\n```typescript\nimport * as garaga from 'garaga';\nimport { CurveId } from 'garaga';\n\nawait garaga.init();\n\n// Parse from already-loaded JSON objects\nconst vkJson = { /* verification key JSON */ };\nconst proofJson = { /* proof JSON */ };\nconst publicInputs = [/* public inputs as bigint[] */];\n\nconst vk = garaga.parseGroth16VerifyingKeyFromObject(vkJson);\nconst proof = garaga.parseGroth16ProofFromObject(proofJson, publicInputs);\n\nconst calldata = garaga.getGroth16CallData(proof, vk, CurveId.BN254);\n```\n\n{% hint style=\"info\" %}\nThe `CurveId` should match your verifying key's curve: `CurveId.BN254` or `CurveId.BLS12_381`.\n{% endhint %}\n\n## Browser Usage\n\nUse `parseGroth16*FromObject` functions in the browser (no filesystem access):\n\n```typescript\nimport * as garaga from 'garaga';\nimport { CurveId } from 'garaga';\n\nasync function generateCalldata(vkJson: object, proofJson: object, publicInputs?: bigint[]) {\n    await garaga.init();\n\n    const vk = garaga.parseGroth16VerifyingKeyFromObject(vkJson);\n    const proof = garaga.parseGroth16ProofFromObject(proofJson, publicInputs);\n\n    return garaga.getGroth16CallData(proof, vk, CurveId.BN254);\n}\n```\n"
  },
  {
    "path": "docs/gitbook/smart-contract-generators/noir.md",
    "content": "---\nicon: octopus\n---\n\n# Noir\n\n## Requirements (read carefully to avoid 99% of issues!)\n\n* Garaga CLI [python-package.md](../installation/python-package.md \"mention\") version 1.1.0 (install with `pip install garaga==1.1.0`)\n* Noir 1.0.0-beta.16 (install with `noirup --version 1.0.0-beta.16` or `npm i @noir-lang/noir_js@1.0.0-beta.16`)\n* Barretenberg 3.0.0-nightly.20251104 (install with `bbup --version 3.0.0-nightly.20251104` or `npm i @aztec/bb.js@3.0.0-nightly.20251104`)\n\nTo install `noirup` and `bbup`, follow the [quickstart guide from aztec](https://noir-lang.org/docs/getting_started/quick_start).\n\n## Generate a Starknet smart contract for your Noir program\n\nFirst, create a new Noir project and compile it with `nargo build`.\n\n```bash\nnargo new hello\ncd hello\nnargo build\n```\n\nThis will create a json file in `hello/target/hello.json`\n\nNow, generate the corresponding verifying key `vk` using barretenberg:\n\n```bash\nbb write_vk -s ultra_honk --oracle_hash keccak -b target/hello.json -o target/vk\n```\n\n{% hint style=\"info\" %}\nNote: ZK mode is enabled by default in barretenberg. The verification key is the same whether you generate a ZK proof or not.\n{% endhint %}\n\nFinally, generate a smart contract from the verifying key using the garaga CLI.\n\n```bash\ngaraga gen --system ultra_keccak_zk_honk --vk target/vk\n```\n\nThis will create a smart contract folder with the following structure.\n\n```\nGenerating Smart Contract project for ProofSystem.UltraKeccakZKHonk using vk...\nDone!\nSmart Contract project created:\n/noir/hello/my_project/\n├── .tools-versions\n├── Scarb.toml\n└── src/\n    ├── honk_verifier.cairo\n    ├── honk_verifier_circuits.cairo\n    ├── honk_verifier_constants.cairo\n    └── lib.cairo\n```\n\nThe main function of interest is located in `honk_verifier.cairo`\n\nThe contract interface will be\n\n```rust\n#[starknet::interface]\npub trait IUltraKeccakZKHonkVerifier<TContractState> {\n    fn verify_ultra_keccak_zk_honk_proof(\n        self: @TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u256>, felt252>; // Returns Ok(public_inputs) on success, Err on failure.\n}\n```\n\nIn order to interact with the endpoint, we need to generate the `full_proof_with_hints` array.\n\nTo do so, we need a specific proof for your program. But first, Noir requires to specify the inputs of the program in `hello/Prover.toml`\n\n```toml\n// The \"hello\" program simply proves that x!=y, with x being private and y public.\nx = \"1\"\ny = \"2\"\n```\n\nNow, generate a proof with barretenberg:\n\n```bash\nnargo execute witness\nbb prove -s ultra_honk --oracle_hash keccak -b target/hello.json -w target/witness.gz -o target/\n```\n\nThis creates two files in the `target/` directory:\n- `target/proof` - the ZK proof\n- `target/public_inputs` - the public inputs\n\n{% hint style=\"info\" %}\nZK mode is enabled by default. Use `--disable_zk` flag if you want to generate a non-ZK proof (not recommended for production).\n{% endhint %}\n\n## Generating the calldata (`full_proof_with_hints` array)\n\n{% hint style=\"warning\" %}\n**Version Compatibility:** Use the same Garaga SDK version (pip/npm/Rust) that generated your verifier contract. Mismatched versions produce incompatible calldata and cause verification to fail.\n{% endhint %}\n\n{% tabs %}\n{% tab title=\"CLI\" %}\nFinalizing the above CLI example, you can obtain the `full_proof_with_hints` array using the garaga CLI. From within the \"hello\" directory:\n\n```bash\ngaraga calldata --system ultra_keccak_zk_honk --proof target/proof --vk target/vk --public-inputs target/public_inputs\n```\n\n{% hint style=\"info\" %}\nUsing `garaga calldata` with the `--format array` lets you paste this array in cairo code for unit tests by doing `let proof: Array<felt252> = [...];`. The `--format starkli` has a formatting which is composable with starkli in the command line and also prepends the length of the array so that it can be deserialized by starknet. The `--format snforge` (default) creates a file that can be used with snforge.\n{% endhint %}\n{% endtab %}\n\n{% tab title=\"Rust\" %}\nAdd the [rust-crate.md](../installation/rust-crate.md \"mention\") to your project.\n\n```rust\n// Version must match the pip package that generated the verifier\nuse garaga_rs::calldata::full_proof_with_hints::zk_honk::{\n    get_zk_honk_calldata, HonkVerificationKey, ZKHonkProof,\n};\nuse std::fs;\n\nfn main() -> Result<(), String> {\n    // 1. Load your verification key\n    let vk_bytes = fs::read(\"target/vk\").map_err(|e| e.to_string())?;\n    let vk = HonkVerificationKey::from_bytes(&vk_bytes)?;\n\n    // 2. Load the proof file\n    let proof_bytes = fs::read(\"target/proof\").map_err(|e| e.to_string())?;\n\n    // 3. Load public inputs file\n    let pub_inputs_bytes = fs::read(\"target/public_inputs\").map_err(|e| e.to_string())?;\n\n    // 4. Parse the proof (requires log_circuit_size from vk)\n    let proof = ZKHonkProof::from_bytes(&proof_bytes, &pub_inputs_bytes, vk.log_circuit_size)?;\n\n    // 5. Generate calldata\n    let calldata = get_zk_honk_calldata(&proof, &vk)?;\n\n    println!(\"Calldata length: {}\", calldata.len());\n    Ok(())\n}\n```\n{% endtab %}\n\n{% tab title=\"Typescript\" %}\nUsing the `garaga` [npm-package.md](../installation/npm-package.md \"mention\")\n\n```typescript\n// Version must match the pip package that generated the verifier\nimport * as garaga from 'garaga';\nimport { readFileSync } from 'fs';\n\n// 1. Initialize the WASM module (required before using any garaga functions)\nawait garaga.init();\n\n// 2. Load your proof, public inputs, and verification key as Uint8Array\nconst vk = new Uint8Array(readFileSync('target/vk'));\nconst proof = new Uint8Array(readFileSync('target/proof'));\nconst publicInputs = new Uint8Array(readFileSync('target/public_inputs'));\n\n// 3. Generate calldata for ZK Honk proofs\nconst calldata: bigint[] = garaga.getZKHonkCallData(proof, publicInputs, vk);\n\nconsole.log('Calldata length:', calldata.length);\n```\n{% endtab %}\n\n{% tab title=\"Python\" %}\nUsing the `garaga` [python-package.md](../installation/python-package.md \"mention\")\n\n```python\n# Version must match the pip package that generated the verifier\nfrom garaga.precompiled_circuits.zk_honk import HonkVk, ZKHonkProof\nfrom garaga.starknet.honk_contract_generator.calldata import (\n    get_ultra_flavor_honk_calldata_from_vk_and_proof\n)\n\n# 1. Load your verification key\nvk = HonkVk.from_bytes(open('target/vk', 'rb').read())\n\n# 2. Load proof and public inputs\nproof_bytes = open('target/proof', 'rb').read()\npublic_inputs_bytes = open('target/public_inputs', 'rb').read()\n\n# 3. Parse the proof\nproof = ZKHonkProof.from_bytes(proof_bytes, public_inputs_bytes, vk)\n\n# 4. Generate calldata\ncalldata: list[int] = get_ultra_flavor_honk_calldata_from_vk_and_proof(vk=vk, proof=proof)\n\nprint(f'Calldata length: {len(calldata)}')\n```\n{% endtab %}\n{% endtabs %}\n\n## BB CLI Reference\n\n{% hint style=\"info\" %}\nUse `bb write_vk --help` and `bb prove --help` to see all available options.\n{% endhint %}\n\n**Verification Key Generation:**\n\n```bash\nbb write_vk -s ultra_honk --oracle_hash keccak -b target/hello.json -o target/vk\n```\n\n**Proof Generation (ZK mode is default):**\n\n```bash\nbb prove -s ultra_honk --oracle_hash keccak -b target/hello.json -w target/witness.gz -o target/\n```\n\n**Proof Verification (optional, for local testing):**\n\n```bash\nbb verify -s ultra_honk --oracle_hash keccak -p target/proof -k target/vk -i target/public_inputs\n```\n\n## Complete dApp Tutorial\n\nFollow the [Scaffold‑Garaga repository](https://github.com/m-kus/scaffold-garaga). This starter kit combines **Noir**, **Garaga**, and **Starknet** with in‑browser proving to help you ship a privacy‑preserving dApp fast.\n\n#### What you'll learn\n\n1. **Generate & deploy an UltraHonk proof verifier** to a local Starknet devnet.\n2. **Add on‑chain state** to your privacy‑preserving app.\n3. **Connect a wallet and deploy to a public testnet**.\n\n---\n\nNeed [support.md](../support.md \"mention\") ?\n"
  },
  {
    "path": "docs/gitbook/support.md",
    "content": "---\nicon: message-question\n---\n\n# Support\n\n* Is something unclear ?&#x20;\n* Spotted a bug ?&#x20;\n* Need help on a specific subject or additional documentation ?&#x20;\n\nFeel free to ask questions on the Garaga telegram [group](https://t.me/GaragaStarknet), or [raise an issue](https://github.com/keep-starknet-strange/garaga/issues/new/choose) on the github repository, it will help us making this documentation better and enhancing Garaga!&#x20;\n"
  },
  {
    "path": "docs/gitbook/updating-these-docs.md",
    "content": "---\nicon: file-doc\n---\n\n# Updating these docs\n\n### Overview\n\nGitbook website is synced with the `docs` branch.\n\nDocumentation updates are handled through an automated bidirectional sync between the `main` and `docs` branches:\n\n* **GitBook edits** → `docs` branch → automated PR to `main`\n* **Code changes** → `main` branch → automated sync to `docs` branch\n\n### Making Documentation Changes\n\n#### For Contributors: PR to Main (Recommended)\n\n1. Create a branch from `main`\n2. Edit files in `docs/gitbook/` folder\n3. PR directly to `main` branch\n4. Changes will automatically sync to `docs` branch after merge and reflected on the website.\n\n#### For Maintainers: GitBook Interface\n\nRepo maintainers and selected contributors can edit directly in GitBook - changes automatically sync to the `docs` branch and create a PR to `main`.\n\n### Automated Workflow\n\n* **Documentation-only changes**: Auto-labeled and ready for review\n* **Mixed changes** (docs + code): Flagged for manual review with `needs-review` label\n* **Code changes on main**: Non-docs files automatically sync to `docs` branch\n* All PRs use squash & merge to maintain clean history\n\nThe GitBook website updates automatically when changes reach the `docs` branch.\n"
  },
  {
    "path": "docs/gitbook/using-garaga-libraries-in-your-cairo-project/README.md",
    "content": "---\nicon: arrow-down-to-bracket\n---\n\n# Using Garaga Libraries in Your Cairo Project\n\nGaraga provides a powerful Cairo library for elliptic curve operations, signature verification, and cryptographic primitives. The library is designed to work **uniformly across all supported curves**—the same functions, the same patterns, just change the curve identifier.\n\n## Installation\n\nGaraga is available on the [scarbs.xyz registry](https://scarbs.xyz/packages/garaga). Add it to your project using `scarb add`:\n\n```bash\nscarb add garaga\n```\n\nOr add it manually to your `Scarb.toml`:\n\n{% code title=\"Scarb.toml\" %}\n```toml\n[dependencies]\ngaraga = \"1.1.0\"\n\n[cairo]\nsierra-replace-ids = false # Required to avoid compilation errors\n```\n{% endcode %}\n\n{% hint style=\"info\" %}\nUsing the registry is the recommended approach. For more details on managing dependencies, see the [Scarb documentation](https://docs.swmansion.com/scarb/docs/guides/dependencies.html).\n{% endhint %}\n\n{% hint style=\"warning\" %}\n**Important**: The `sierra-replace-ids = false` setting is required. See [issue #198](https://github.com/keep-starknet-strange/garaga/issues/198) for details about using Garaga with workspaces.\n{% endhint %}\n\n### Installing from Git (alternative)\n\nIf you need a specific commit or unreleased version, you can install from Git:\n\n```toml\n[dependencies]\ngaraga = { git = \"https://github.com/keep-starknet-strange/garaga.git\", tag = \"v1.1.0\" }\n```\n\n---\n\n## Generic Over Any Curve\n\nOne of Garaga's key architectural decisions is that **all operations work uniformly across any supported curve**. This means:\n\n- ✅ The same `msm_g1` function works for BN254, BLS12-381, SECP256K1, and more\n- ✅ The same signature verification patterns apply to all curves\n- ✅ Switching curves requires only changing the `curve_id` parameter\n- ✅ Future curves can be added without changing your code\n\n### Example: Curve-Agnostic MSM\n\n```cairo\nuse garaga::ec_ops::msm_g1;\nuse garaga::definitions::{G1Point, u384};\n\n// This exact same function works for ANY supported curve\nfn compute_msm(\n    points: Span<G1Point>,\n    scalars: Span<u256>,\n    curve_id: usize,  // Just change this to switch curves!\n    hints: Span<felt252>,\n) -> G1Point {\n    msm_g1(points, scalars, hints, curve_id)\n}\n\n// Usage:\n// compute_msm(points, scalars, 0, hints)  // BN254\n// compute_msm(points, scalars, 2, hints)  // SECP256K1\n// compute_msm(points, scalars, 3, hints)  // SECP256R1\n```\n\nThis design enables maximum code reuse and flexibility across your applications.\n\n---\n\n## Supported Elliptic Curves\n\n| Curve ID | Curve | Common Use Cases |\n|----------|-------|------------------|\n| **0** | BN254 | Ethereum zkSNARKs, Groth16 |\n| **1** | BLS12-381 | Ethereum 2.0, Zcash, drand |\n| **2** | SECP256K1 | Bitcoin, Ethereum ECDSA |\n| **3** | SECP256R1 | WebAuthn, TLS, P-256 |\n| **4** | ED25519 | Solana, SSH, general EdDSA |\n| **5** | GRUMPKIN | Noir circuits, Aztec |\n\n{% hint style=\"info\" %}\nThese curve identifiers are consistent across **all** Garaga code—Cairo, Python, Rust, and TypeScript. Use the same ID everywhere.\n{% endhint %}\n\n---\n\n## Available Operations\n\n### Elliptic Curve Operations\n\n| Operation | Description | Curves |\n|-----------|-------------|--------|\n| **Multi-Scalar Multiplication (MSM)** | Compute `∑ sᵢ·Pᵢ` efficiently | All |\n| **Scalar Multiplication** | Compute `s·P` for a single point | All |\n| **Point Addition** | Add two elliptic curve points | All |\n| **Pairing Check** | Verify pairing equations | BN254, BLS12-381 |\n\n[→ EC Operations Documentation](ec-multi-scalar-multiplication.md)\n\n### Signature Verification\n\n| Scheme | Description | Curves |\n|--------|-------------|--------|\n| **ECDSA** | Standard elliptic curve signatures | SECP256K1, SECP256R1, BN254, BLS12-381 |\n| **Schnorr** | BIP340-compatible Schnorr signatures | All Weierstrass curves |\n| **EdDSA** | Edwards-curve signatures | ED25519 |\n\n[→ Signatures Documentation](ec-signatures.md)\n\n### Hashing Functions\n\n| Function | Description | Use Case |\n|----------|-------------|----------|\n| **SHA-512** | Standard SHA-512 | EdDSA, general hashing |\n| **Poseidon (BN254)** | ZK-friendly hash | Grumpkin circuits |\n\n[→ Hashing Documentation](hashing-functions.md)\n\n---\n\n## Performance Characteristics\n\nGaraga achieves efficiency through **precomputed hints**. The SDK (Python/Rust/TypeScript) generates these hints off-chain, and the Cairo code verifies them on-chain. This means:\n\n1. **Off-chain**: Complex computations happen in the SDK\n2. **On-chain**: Cairo only verifies the results are correct\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│  Off-chain (SDK)                                            │\n│  - Compute MSM/signature verification                       │\n│  - Generate verification hints                              │\n│  - Serialize as calldata                                    │\n└───────────────────────────┬─────────────────────────────────┘\n                            │ calldata with hints\n                            ▼\n┌─────────────────────────────────────────────────────────────┐\n│  On-chain (Cairo)                                           │\n│  - Deserialize calldata                                     │\n│  - Verify hints are correct                                 │\n│  - Return result (success/failure)                          │\n└─────────────────────────────────────────────────────────────┘\n```\n\nThis architecture enables operations that would otherwise be prohibitively expensive on-chain.\n\n---\n\n## Next Steps\n\n- [**EC Multi-Scalar Multiplication**](ec-multi-scalar-multiplication.md) — Compute MSMs on any curve\n- [**Signature Verification**](ec-signatures.md) — ECDSA, Schnorr, and EdDSA\n- [**Hashing Functions**](hashing-functions.md) — SHA-512 and Poseidon\n"
  },
  {
    "path": "docs/gitbook/using-garaga-libraries-in-your-cairo-project/ec-multi-scalar-multiplication.md",
    "content": "---\nhidden: true\nicon: florin-sign\n---\n\n# EC (Multi)-Scalar Multiplication\n\nFor a given elliptic curve, scalar multiplication consists of adding a point `P` to itself `s` times, where `P` is a point satisfying the curve equation and `s` a scalar.\\\n\\\n`k.P = P+P+P+...+P (k times)`\\\n\\\n\\\nMulti scalar multiplication consists of the sum of `n` scalar multiplication with different points and scalars :\n\n$$\n\\sum_{i=1}^{n} k_i \\times P_i\n$$\n\nA single `msm_g1` function in Garaga computes the multi-scalar multiplication for a given set of points and scalars for a given elliptic curve. Since it also works with `n=1`, it is also able to compute a single scalar multiplication.\n\n```toml\n[package]\nname = \"my_package_that_needs_ec_scalar_mul\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n[dependencies]\ngaraga = \"1.1.0\"\n\n[cairo]\nsierra-replace-ids = false\n```\n\n{% hint style=\"info\" %}\nYou can also add the dependency using `scarb add garaga`. See the [installation guide](README.md#installation) for more options.\n{% endhint %}\n\nThe function will be importable using\n\n```rust\nuse garaga::ec_ops::msm_g1;\nuse garaga::definitions::G1Point;\n```\n\n```rust\nfn msm_g1(\n    points: Span<G1Point>,\n    scalars: Span<u256>,\n    curve_index: usize,\n    msm_hint: Span<felt252>,\n) -> G1Point {\n```\n\nAs you can see, this function not only needs points and scalars, but also additional information, to perform the computation much more efficiently.\\\n\\\nUnder `hydra/garaga/starknet/tests_and_calldata_generators/`, you will find in the file [`msm.py`](https://github.com/keep-starknet-strange/garaga/blob/main/hydra/garaga/starknet/tests_and_calldata_generators/msm.py) some tools to generate a cairo test (using `MSMCalldataBuilder.to_cairo_1_test()`) for this function given some points and scalars, or directly the raw calldata for starknet usage (using `MSMCalldataBuilder.serialize_to_calldata()`).\n\n### Generating and using calldata\n\n\\\nAn example contract is already [deployed](https://sepolia.voyager.online/contract/0x012686bdb4ca3f22ffc93dfe1e24d72294aac38a4f6b997b456fb4368fb3390b#readContract) on sepolia, solely holding an endpoint to this function.\\\nThe source code to the contract is [here](https://github.com/keep-starknet-strange/garaga/blob/main/src/contracts/universal_ecip/src/lib.cairo) .\\\n\\\nYou can try this deployed contract on any supported curves modifying the [`msm.py`](https://github.com/keep-starknet-strange/garaga/blob/main/hydra/garaga/starknet/tests_and_calldata_generators/msm.py) script at the end :\n\n```python\nif __name__ == \"__main__\":\n    import random\n\n    c = CurveID.SECP256K1\n    order = CURVES[c.value].n\n    msm = MSMCalldataBuilder(\n        curve_id=c,\n        points=[G1Point.gen_random_point(c) for _ in range(1)],\n        scalars=[random.randint(0, order) for _ in range(1)],\n    )\n    cd = msm.serialize_to_calldata(\n        include_points_and_scalars=True,\n        serialize_as_pure_felt252_array=False,\n    )\n    print(cd)\n    print(len(cd))\n```\n\nThe options are :\n\n* `include_points_and_scalars` : If set to `False`, the input points, scalars, and `curve_index` will not be part of the calldata.\n* `serialize_as_pure_felt252_array` : If set to `True`, preprend the total length of the calldata at the beginning. \\\\\n\nThese options are only useful when you want to use points and scalars from another source than the calldata.\\\n\\\nFor example, checkout the [groth16 verifier contracts](https://github.com/keep-starknet-strange/garaga/blob/main/src/contracts/autogenerated/groth16_example_bn254/src/groth16_verifier.cairo). It makes a delegated call to the endpoint `msm_g1` using the already declared contract's class hash, and pushes the (fixed) points from the hardcoded verifying key, and the scalars from the groth16 proof. :\n\n```rust\nimpl IGroth16VerifierBN254 of super::IGroth16VerifierBN254<ContractState> {\n    fn verify_groth16_proof_bn254(\n        ref self: ContractState,\n        groth16_proof: Groth16Proof,\n        mpcheck_hint: MPCheckHintBN254,\n        msm_hint: Array<felt252>,\n    ) -> bool {\n        groth16_proof.a.assert_on_curve(0);\n        groth16_proof.b.assert_on_curve(0);\n        groth16_proof.c.assert_on_curve(0);\n\n\n        let ic = ic.span();\n\n\n        let vk_x: G1Point = match ic.len() {\n            0 => panic!(\"Malformed VK\"),\n            1 => *ic.at(0),\n            _ => {\n                // Start serialization with the hint array directly to avoid copying it.\n                let mut msm_calldata: Array<felt252> = msm_hint;\n                // Add the points from VK and public inputs to the proof.\n                Serde::serialize(@ic.slice(1, N_PUBLIC_INPUTS), ref msm_calldata);\n                Serde::serialize(@groth16_proof.public_inputs, ref msm_calldata);\n                // Complete with the curve indentifier (0 for BN254):\n                msm_calldata.append(0);\n\n\n                // Call the multi scalar multiplication endpoint on the Garaga ECIP ops contract\n                // to obtain vk_x.\n                let mut _vx_x_serialized = core::starknet::syscalls::library_call_syscall(\n                    ECIP_OPS_CLASS_HASH.try_into().unwrap(),\n                    selector!(\"msm_g1\"),\n                    msm_calldata.span()\n                )\n                    .unwrap_syscall();\n\n\n                ec_safe_add(\n                    Serde::<G1Point>::deserialize(ref _vx_x_serialized).unwrap(), *ic.at(0), 0\n                )\n            }\n        };\n```\n\nHere the `msm_hint` is used with `include_points_and_scalars=False` and `serialize_as_pure_felt252_array=True`\\\n\\\nThen the points from `ic` are pushed to the array, and the scalars from the groth16 proof's public inputs. Finally the curve identifier is pushed as well.\\\n\\\nIn our example, we'll leave the default parameters that will include everything for a direct endpoint call.\\\nSimply run :\n\n```\npython hydra/garaga/starknet/tests_and_calldata_generators/msm.py\n```\n\nAnd copy paste the array in voyager to see!\n\n<figure><img src=\"../.gitbook/assets/ezgif-7-46048b79f9.gif\" alt=\"\"><figcaption></figcaption></figure>\n"
  },
  {
    "path": "docs/gitbook/using-garaga-libraries-in-your-cairo-project/ec-signatures.md",
    "content": "---\nicon: pen-field\n---\n\n# ECDSA, Schnorr & EdDSA Signatures\n\nAll three signature schemes follow a similar pattern with a Cairo struct containing the signature data and hints for efficient verification. Garaga provides tooling in Python/Rust/JavaScript to generate the full expected Cairo struct given signature information.\n\nAll signature verification schemes work with all [#supported-elliptic-curves](./#supported-elliptic-curves \"mention\") in Garaga (except EdDSA which is specific to Ed25519), using the corresponding curve identifier.\n\n## Cairo Verification Functions\n\nVerification functions take the public key as a **separate parameter**:\n- `is_valid_ecdsa_signature_assuming_hash(signature, public_key, curve_id) -> bool`\n- `is_valid_schnorr_signature_assuming_hash(signature, public_key, curve_id) -> bool`\n- `is_valid_eddsa_signature(signature, Py_twisted) -> bool`\n\n{% hint style=\"warning\" %}\n**Important:** The ECDSA and Schnorr verification functions assume that the message hash has been correctly computed by the caller. They verify the signature equation but do not hash the message themselves.\n{% endhint %}\n\n## Public Key Handling\n\nThe public key is always passed as a **separate parameter** to the verification function. This allows you to:\n\n1. **Hardcode the public key** in your contract if it's known at compile time\n2. **Provide the public key dynamically** at runtime\n\nWhen generating calldata with the SDK, use the `prepend_public_key` parameter:\n- `prepend_public_key=True` (default): The public key is included in the serialized calldata, allowing you to deserialize both the signature and public key from the same array\n- `prepend_public_key=False`: Only the signature is serialized; you must provide the public key separately (useful when the public key is hardcoded in your contract)\n\n---\n\n## ECDSA Signature Verification\n\n### Cairo Structs\n\n```rust\nuse garaga::signatures::ecdsa::{ECDSASignature, ECDSASignatureWithHint, is_valid_ecdsa_signature_assuming_hash};\nuse garaga::definitions::{G1Point, u384};\n\n/// Core signature data\nstruct ECDSASignature {\n    rx: u384,   // r component (R.x mod n)\n    s: u256,    // s component\n    v: bool,    // Parity of R.y (false if even, true if odd)\n    z: u256,    // Message hash (assumed correctly computed by caller)\n}\n\n/// Signature bundled with verification hints\nstruct ECDSASignatureWithHint {\n    signature: ECDSASignature,\n    msm_hint: Span<felt252>,\n}\n```\n\n### Usage Example\n\n```rust\nuse garaga::signatures::ecdsa::{ECDSASignatureWithHint, is_valid_ecdsa_signature_assuming_hash};\nuse garaga::definitions::{G1Point, u384};\n\nfn verify_ecdsa_signature(\n    serialized_signature: Span<felt252>,\n    public_key: G1Point,\n    curve_id: usize,\n) -> bool {\n    // Deserialize the signature with hints\n    let mut data = serialized_signature;\n    let signature_with_hints = Serde::<ECDSASignatureWithHint>::deserialize(ref data).unwrap();\n\n    // Verify the signature\n    // curve_id: 0=BN254, 1=BLS12_381, 2=SECP256K1, 3=SECP256R1, 5=GRUMPKIN\n    is_valid_ecdsa_signature_assuming_hash(signature_with_hints, public_key, curve_id)\n}\n```\n\n### Calldata Generation\n\n{% tabs %}\n{% tab title=\"Python\" %}\n```python\nfrom garaga.starknet.tests_and_calldata_generators.signatures import ECDSASignature\nfrom garaga.definitions import CurveID\n\n# Create signature object with all required fields\nsig = ECDSASignature(\n    r=0x...,              # r component of signature\n    s=0x...,              # s component of signature\n    v=0,                  # 0 if R.y is even, 1 if odd\n    px=0x...,             # Public key x-coordinate\n    py=0x...,             # Public key y-coordinate\n    z=0x...,              # Message hash\n    curve_id=CurveID.SECP256K1\n)\n\n# Generate calldata with public key included (for dynamic public key)\ncalldata = sig.serialize_with_hints(prepend_public_key=True)\n\n# Generate calldata without public key (for hardcoded public key in contract)\ncalldata_no_pk = sig.serialize_with_hints(prepend_public_key=False)\n```\n{% endtab %}\n\n{% tab title=\"Rust\" %}\n```rust\nuse garaga_rs::calldata::signatures::ecdsa_calldata_builder;\nuse garaga_rs::definitions::CurveID;\n\n// Generate calldata with public key included\nlet calldata = ecdsa_calldata_builder(\n    r,              // r component\n    s,              // s component\n    v,              // recovery parameter (0 or 1)\n    px,             // public key x\n    py,             // public key y\n    z,              // message hash\n    true,           // prepend_public_key\n    CurveID::SECP256K1 as usize,\n)?;\n\n// Generate calldata without public key (for hardcoded public key)\nlet calldata_no_pk = ecdsa_calldata_builder(r, s, v, px, py, z, false, CurveID::SECP256K1 as usize)?;\n```\n{% endtab %}\n\n{% tab title=\"TypeScript\" %}\n```typescript\nimport { ecdsaCalldataBuilder, CurveId } from 'garaga';\n\n// Generate calldata with public key included\nconst calldata = ecdsaCalldataBuilder(\n    r,              // r component (bigint)\n    s,              // s component (bigint)\n    v,              // recovery parameter (0 or 1)\n    px,             // public key x (bigint)\n    py,             // public key y (bigint)\n    z,              // message hash (bigint)\n    true,           // prependPublickey\n    CurveId.SECP256K1\n);\n\n// Generate calldata without public key (for hardcoded public key)\nconst calldataNoKey = ecdsaCalldataBuilder(r, s, v, px, py, z, false, CurveId.SECP256K1);\n```\n{% endtab %}\n{% endtabs %}\n\n---\n\n## Schnorr Signature Verification\n\n### Cairo Structs\n\n```rust\nuse garaga::signatures::schnorr::{SchnorrSignature, SchnorrSignatureWithHint, is_valid_schnorr_signature_assuming_hash};\nuse garaga::definitions::{G1Point, u384};\n\n/// Core signature data\nstruct SchnorrSignature {\n    rx: u384,   // x-coordinate of R point\n    s: u256,    // s component\n    e: u256,    // Challenge hash (assumed correctly computed by caller)\n}\n\n/// Signature bundled with verification hints\nstruct SchnorrSignatureWithHint {\n    signature: SchnorrSignature,\n    msm_hint: Span<felt252>,\n}\n```\n\n{% hint style=\"info\" %}\n**BIP340 Requirement:** The public key's y-coordinate must be even. The verification function will return `false` if the public key has an odd y-coordinate.\n{% endhint %}\n\n### Usage Example\n\n```rust\nuse garaga::signatures::schnorr::{SchnorrSignatureWithHint, is_valid_schnorr_signature_assuming_hash};\nuse garaga::definitions::{G1Point, u384};\n\nfn verify_schnorr_signature(\n    serialized_signature: Span<felt252>,\n    public_key: G1Point,\n    curve_id: usize,\n) -> bool {\n    // Deserialize the signature with hints\n    let mut data = serialized_signature;\n    let signature_with_hints = Serde::<SchnorrSignatureWithHint>::deserialize(ref data).unwrap();\n\n    // Verify the signature\n    // Note: public_key.y must be even (BIP340 requirement)\n    is_valid_schnorr_signature_assuming_hash(signature_with_hints, public_key, curve_id)\n}\n```\n\n### Calldata Generation\n\n{% tabs %}\n{% tab title=\"Python\" %}\n```python\nfrom garaga.starknet.tests_and_calldata_generators.signatures import SchnorrSignature\nfrom garaga.definitions import CurveID\n\n# Create signature object (py must be even)\nsig = SchnorrSignature(\n    rx=0x...,             # x-coordinate of R point\n    s=0x...,              # s component\n    e=0x...,              # Challenge hash\n    px=0x...,             # Public key x-coordinate\n    py=0x...,             # Public key y-coordinate (must be even!)\n    curve_id=CurveID.BN254\n)\n\n# Generate calldata with public key included\ncalldata = sig.serialize_with_hints(prepend_public_key=True)\n\n# Generate calldata without public key (for hardcoded public key)\ncalldata_no_pk = sig.serialize_with_hints(prepend_public_key=False)\n```\n{% endtab %}\n\n{% tab title=\"Rust\" %}\n```rust\nuse garaga_rs::calldata::signatures::schnorr_calldata_builder;\nuse garaga_rs::definitions::CurveID;\n\n// Generate calldata with public key included\nlet calldata = schnorr_calldata_builder(\n    rx,             // R.x coordinate\n    s,              // s component\n    e,              // challenge hash\n    px,             // public key x\n    py,             // public key y (must be even!)\n    true,           // prepend_public_key\n    CurveID::BN254 as usize,\n)?;\n\n// Generate calldata without public key\nlet calldata_no_pk = schnorr_calldata_builder(rx, s, e, px, py, false, CurveID::BN254 as usize)?;\n```\n{% endtab %}\n\n{% tab title=\"TypeScript\" %}\n```typescript\nimport { schnorrCalldataBuilder, CurveId } from 'garaga';\n\n// Generate calldata with public key included\nconst calldata = schnorrCalldataBuilder(\n    rx,             // R.x coordinate (bigint)\n    s,              // s component (bigint)\n    e,              // challenge hash (bigint)\n    px,             // public key x (bigint)\n    py,             // public key y (bigint, must be even!)\n    true,           // prependPublickey\n    CurveId.BN254\n);\n\n// Generate calldata without public key\nconst calldataNoKey = schnorrCalldataBuilder(rx, s, e, px, py, false, CurveId.BN254);\n```\n{% endtab %}\n{% endtabs %}\n\n---\n\n## EdDSA Signature Verification (Ed25519)\n\nEdDSA signatures use the Ed25519 curve following RFC 8032. The implementation explicitly rejects small-order points to prevent key-compromise and signature-malleability attacks.\n\n### Cairo Structs\n\n```rust\nuse garaga::signatures::eddsa_25519::{EdDSASignature, EdDSASignatureWithHint, is_valid_eddsa_signature};\n\n/// Core signature data\nstruct EdDSASignature {\n    Ry_twisted: u256,    // Compressed R point y-coordinate (little-endian)\n    s: u256,             // Signature scalar\n    msg: Span<u8>,       // Original message bytes\n}\n\n/// Signature bundled with verification hints\nstruct EdDSASignatureWithHint {\n    signature: EdDSASignature,\n    msm_hint: Span<felt252>,\n    sqrt_Rx_hint: u256,  // Hint for R point decompression\n    sqrt_Px_hint: u256,  // Hint for public key decompression\n}\n```\n\n{% hint style=\"info\" %}\n**Note:** EdDSA takes the raw message bytes, not a hash. The verification function computes `SHA-512(R || A || msg)` internally as per RFC 8032.\n{% endhint %}\n\n### Usage Example\n\n```rust\nuse garaga::signatures::eddsa_25519::{EdDSASignatureWithHint, is_valid_eddsa_signature};\n\nfn verify_eddsa_signature(\n    serialized_signature: Span<felt252>,\n    Py_twisted: u256,  // Compressed public key y-coordinate (little-endian)\n) -> bool {\n    // Deserialize the signature with hints\n    let mut data = serialized_signature;\n    let signature_with_hints = Serde::<EdDSASignatureWithHint>::deserialize(ref data).unwrap();\n\n    // Verify the signature\n    is_valid_eddsa_signature(signature_with_hints, Py_twisted)\n}\n```\n\n### Calldata Generation\n\n{% tabs %}\n{% tab title=\"Python\" %}\n```python\nfrom garaga.starknet.tests_and_calldata_generators.signatures import EdDSA25519Signature\n\n# Create signature object\nsig = EdDSA25519Signature(\n    Ry_twisted=0x...,     # Compressed R point (little-endian integer)\n    s=0x...,              # Signature scalar\n    Py_twisted=0x...,     # Compressed public key (little-endian integer)\n    msg=b\"Hello, World!\"  # Raw message bytes\n)\n\n# Generate calldata with public key included\ncalldata = sig.serialize_with_hints(prepend_public_key=True)\n\n# Generate calldata without public key (for hardcoded public key)\ncalldata_no_pk = sig.serialize_with_hints(prepend_public_key=False)\n```\n{% endtab %}\n\n{% tab title=\"Rust\" %}\n```rust\nuse garaga_rs::calldata::signatures::eddsa_calldata_builder;\n\nlet message = b\"Hello, World!\".to_vec();\n\n// Generate calldata with public key included\nlet calldata = eddsa_calldata_builder(\n    ry_twisted,     // Compressed R point y-coordinate\n    s,              // Signature scalar\n    py_twisted,     // Compressed public key y-coordinate\n    message.clone(),\n    true,           // prepend_public_key\n)?;\n\n// Generate calldata without public key\nlet calldata_no_pk = eddsa_calldata_builder(ry_twisted, s, py_twisted, message, false)?;\n```\n{% endtab %}\n\n{% tab title=\"TypeScript\" %}\n```typescript\nimport { eddsaCalldataBuilder } from 'garaga';\n\nconst message = new TextEncoder().encode(\"Hello, World!\");\n\n// Generate calldata with public key included\nconst calldata = eddsaCalldataBuilder(\n    ry_twisted_le,  // Compressed R point (bigint, little-endian)\n    s,              // Signature scalar (bigint)\n    py_twisted_le,  // Compressed public key (bigint, little-endian)\n    message,        // Uint8Array\n    true            // prependPublickey\n);\n\n// Generate calldata without public key\nconst calldataNoKey = eddsaCalldataBuilder(ry_twisted_le, s, py_twisted_le, message, false);\n```\n{% endtab %}\n{% endtabs %}\n\n---\n\n## Curve Identifiers\n\n| Curve ID | Value | Notes |\n|----------|-------|-------|\n| BN254 | 0 | - |\n| BLS12_381 | 1 | - |\n| SECP256K1 | 2 | Bitcoin/Ethereum |\n| SECP256R1 | 3 | P-256/NIST |\n| ED25519 | 4 | Only for EdDSA |\n| GRUMPKIN | 5 | - |\n"
  },
  {
    "path": "docs/gitbook/using-garaga-libraries-in-your-cairo-project/hashing-functions.md",
    "content": "---\nicon: binary-circle-check\n---\n\n# Hashing functions\n\nGaraga provides implementations of common hash functions optimized for Cairo.\n\n***\n\n## SHA-512\n\nA pure Cairo implementation of SHA-512 following [RFC-6234](https://datatracker.ietf.org/doc/html/rfc6234). This is used internally for EdDSA signature verification but is also available for general use.\n\n### Usage\n\n```rust\nuse garaga::hashes::sha_512::sha512;\n\nfn hash_message() {\n    // Hash a single byte\n    let input: Array<u8> = array![49]; // ASCII '1'\n    let hash: Array<u8> = sha512(input);\n\n    // hash is a 64-byte (512-bit) array\n    assert!(hash.len() == 64);\n}\n\nfn hash_empty() {\n    // Hash empty input\n    let empty: Array<u8> = array![];\n    let hash = sha512(empty);\n\n    // SHA-512 of empty string\n    assert!(\n        hash.span() == array![\n            0xcf, 0x83, 0xe1, 0x35, 0x7e, 0xef, 0xb8, 0xbd,\n            0xf1, 0x54, 0x28, 0x50, 0xd6, 0x6d, 0x80, 0x07,\n            0xd6, 0x20, 0xe4, 0x05, 0x0b, 0x57, 0x15, 0xdc,\n            0x83, 0xf4, 0xa9, 0x21, 0xd3, 0x6c, 0xe9, 0xce,\n            0x47, 0xd0, 0xd1, 0x3c, 0x5d, 0x85, 0xf2, 0xb0,\n            0xff, 0x83, 0x18, 0xd2, 0x87, 0x7e, 0xec, 0x2f,\n            0x63, 0xb9, 0x31, 0xbd, 0x47, 0x41, 0x7a, 0x81,\n            0xa5, 0x38, 0x32, 0x7a, 0xf9, 0x27, 0xda, 0x3e,\n        ].span()\n    );\n}\n\nfn hash_text() {\n    // Hash arbitrary text\n    let msg: Array<u8> = array![\n        0x4C, 0x6F, 0x72, 0x65, 0x6D, 0x20, 0x69, 0x70,\n        0x73, 0x75, 0x6D  // \"Lorem ipsum\"\n    ];\n    let hash = sha512(msg);\n    // Returns 64-byte hash\n}\n```\n\n### Function Signature\n\n```rust\npub fn sha512(data: Array<u8>) -> Array<u8>\n```\n\n* **Input**: `Array<u8>` - The message bytes to hash\n* **Output**: `Array<u8>` - 64-byte (512-bit) hash result\n\n***\n\n## Poseidon (BN254 Scalar Field)\n\nA ZK-friendly hash function operating on the BN254 scalar field. This implementation is compatible with:\n\n* [Circom Poseidon](https://github.com/iden3/circomlib/blob/252f8130105a66c8ae8b4a23c7f5662e17458f3f/circuits/poseidon.circom#L198-L208) (`nInputs=2`)\n* [Noir Poseidon](https://noir-lang.org/docs/noir/standard_library/cryptographic_primitives/hashes#poseidon) (`std::hash::poseidon::hash::hash_2`)\n\n### Cross-Language Example\n\nThe same hash computed in Noir and Cairo:\n\n{% tabs %}\n{% tab title=\"Noir\" %}\n```rust\n// For nargo < 1.0.0-beta.4:\nuse std::hash::poseidon::bn254::hash_2;\n\n// For nargo >= 1.0.0-beta.4: (poseidon has been moved to a separate package)\n// Add to Nargo.toml:\n// [dependencies]\n// poseidon = { tag = \"v0.1.1\", git = \"https://github.com/noir-lang/poseidon\" }\nuse poseidon::poseidon::bn254::hash_2;\n\nfn main(x: Field, y: pub Field) {\n    let x1 = [x, y];\n    let z = hash_2(x1);\n    assert(z == 7853200120776062878684798364095072458815029376092732009249414926327459813530);\n}\n\n#[test]\nfn test_main() {\n    main(1, 2);\n}\n```\n{% endtab %}\n\n{% tab title=\"Cairo\" %}\n```rust\nuse garaga::hashes::poseidon_hash_2_bn254;\nuse garaga::definitions::u384;\n\nfn test_poseidon_bn254() {\n    let x: u384 = u384 { limb0: 1, limb1: 0, limb2: 0, limb3: 0 };\n    let y: u384 = u384 { limb0: 2, limb1: 0, limb2: 0, limb3: 0 };\n    let expected: u384 =\n        7853200120776062878684798364095072458815029376092732009249414926327459813530_u256\n        .into();\n\n    assert_eq!(poseidon_hash_2_bn254(x, y), expected);\n}\n```\n{% endtab %}\n{% endtabs %}\n\n### Function Signature\n\n```rust\npub fn poseidon_hash_2_bn254(x: u384, y: u384) -> u384\n```\n\n* **Input**: Two `u384` field elements\n* **Output**: `u384` - The Poseidon hash result\n\n{% hint style=\"info\" %}\nThis hash function is particularly useful when building circuits in Noir that need to verify hashes computed on Starknet, or vice versa.\n{% endhint %}\n"
  },
  {
    "path": "docs/gitbook/using-garaga-libraries-in-your-cairo-project/rsa-signatures.md",
    "content": "---\nicon: key\n---\n\n# RSA-2048 Signature Verification\n\nGaraga provides on-chain RSA-2048 signature verification using multi-channel Residue Number System (RNS) arithmetic. The verifier checks that `s^{65537} ≡ m (mod n)` without native 2048-bit arithmetic by decomposing the exponentiation into 17 certified modular reductions verified through 11 independent RNS channels.\n\n{% hint style=\"warning\" %}\n**Important:** The verification function `is_valid_rsa2048_signature_assuming_encoded_message` assumes the expected message `m` is already in its final encoded form (e.g., PKCS#1 v1.5 padded). The caller is responsible for constructing `m` from the message hash. A helper `pkcs1_v1_5_encode_sha256` is provided in the Python SDK.\n{% endhint %}\n\n## How It Works\n\n1. **RNS representation**: 2048-bit integers are decomposed into 6 chunks of 384 bits (top chunk: 128 bits), then evaluated modulo 11 pairwise coprime ~384-bit primes.\n2. **Square-and-multiply**: For `e = 65537 = 2^16 + 1`, the chain consists of 16 squarings + 1 final multiplication = 17 reductions.\n3. **CRT exactness**: Each reduction `a·b = q·n + r` is checked in all 11 RNS channels. Since the product of the channel primes exceeds the maximum deviation, channel congruences imply integer equality.\n\n## Cairo Structs\n\n```rust\nuse garaga::signatures::rsa::{\n    RSA2048PublicKey,\n    RSA2048SignatureWithHint,\n    is_valid_rsa2048_signature_assuming_encoded_message,\n};\nuse garaga::definitions::{RSA2048Chunks, RSA2048ReductionWitness};\n\n/// RSA-2048 public key (the modulus n)\nstruct RSA2048PublicKey {\n    modulus: RSA2048Chunks,  // 6 chunks × 4 × u96 = 24 felt252\n}\n\n/// Core signature data\nstruct RSA2048Signature {\n    signature: RSA2048Chunks,          // s: the RSA signature\n    expected_message: RSA2048Chunks,   // m: the expected encoded message\n}\n\n/// Signature bundled with 17 reduction witnesses\nstruct RSA2048SignatureWithHint {\n    signature: RSA2048Signature,\n    reductions_hint: Span<felt252>,  // 17 × (quotient + remainder) = 17 × 48 = 816 felt252\n}\n```\n\n## Usage Example\n\n```rust\nuse garaga::signatures::rsa::{\n    RSA2048PublicKey,\n    RSA2048SignatureWithHint,\n    is_valid_rsa2048_signature_assuming_encoded_message,\n};\n\nfn verify_rsa_signature(\n    serialized: Span<felt252>,\n    public_key: RSA2048PublicKey,\n) -> bool {\n    let mut data = serialized;\n    let sig = Serde::<RSA2048SignatureWithHint>::deserialize(ref data).unwrap();\n    is_valid_rsa2048_signature_assuming_encoded_message(@sig, @public_key)\n}\n```\n\n## Calldata Generation\n\n{% tabs %}\n{% tab title=\"Python\" %}\n```python\nfrom garaga.starknet.tests_and_calldata_generators.signatures import RSA2048Signature\nfrom garaga.rsa_rns import generate_rsa2048_witness, generate_rsa2048_sha256_witness\n\n# From pre-computed witness (raw expected_message)\nbundle = generate_rsa2048_witness(seed=0)\nsig = RSA2048Signature.from_bundle(bundle)\n\n# From SHA-256 message digest (PKCS#1 v1.5 encoded)\nbundle = generate_rsa2048_sha256_witness(b\"hello\", seed=0)\nsig = RSA2048Signature.from_bundle(bundle)\n\n# Generate calldata (Python path)\ncalldata = sig.serialize_with_hints(prepend_public_key=True)\n\n# Generate calldata (Rust path, byte-for-byte identical)\ncalldata = sig.serialize_with_hints(use_rust=True, prepend_public_key=True)\n\n# Without public key (when modulus is hardcoded in contract)\ncalldata_no_pk = sig.serialize_with_hints(prepend_public_key=False)\n```\n{% endtab %}\n\n{% tab title=\"Rust\" %}\n```rust\nuse garaga_rs::calldata::signatures::rsa_2048_calldata_builder;\n\n// signature, expected_message, modulus are BigUint values\nlet calldata = rsa_2048_calldata_builder(\n    signature,          // s value\n    expected_message,   // m = s^65537 mod n (PKCS#1 v1.5 encoded)\n    modulus,            // RSA-2048 modulus n\n    true,               // prepend_public_key\n)?;\n```\n{% endtab %}\n\n{% tab title=\"TypeScript\" %}\n```typescript\nimport { rsa2048CalldataBuilder } from 'garaga';\n\nconst calldata = rsa2048CalldataBuilder(\n    signature,        // RSA signature (bigint)\n    expectedMessage,  // PKCS#1 v1.5 encoded message (bigint)\n    modulus,          // RSA-2048 modulus (bigint)\n    true              // prependPublicKey\n);\n```\n{% endtab %}\n{% endtabs %}\n\n## Calldata Layout\n\n| Section | Elements | Description |\n|---------|----------|-------------|\n| Public key (optional) | 24 | Modulus `n` as 6 chunks × 4 words |\n| Signature | 24 | `s` as 6 chunks × 4 words |\n| Expected message | 24 | `m` as 6 chunks × 4 words |\n| Reduction witnesses | 816 | 17 × (quotient 24 + remainder 24) |\n| **Total** | **888** (with key) / **864** (without) | |\n\n## Full SHA-256 Verification\n\nFor end-to-end verification where the raw message is provided and SHA-256 + PKCS#1 v1.5 encoding is computed on-chain, use `is_valid_rsa2048_sha256_signature`:\n\n```rust\nuse garaga::signatures::rsa::{\n    RSA2048PublicKey,\n    RSA2048SignatureWithHint,\n    is_valid_rsa2048_sha256_signature,\n};\n\nfn verify_rsa_sha256(\n    serialized: Span<felt252>,\n    public_key: RSA2048PublicKey,\n) -> bool {\n    let mut data = serialized;\n    let sig = Serde::<RSA2048SignatureWithHint>::deserialize(ref data).unwrap();\n    let message = Serde::<ByteArray>::deserialize(ref data).unwrap();\n    is_valid_rsa2048_sha256_signature(@sig, @public_key, @message)\n}\n```\n\nThis function:\n1. Computes `SHA-256(message)` on-chain\n2. Constructs the PKCS#1 v1.5 encoded message\n3. Asserts it matches the `expected_message` hint\n4. Verifies `s^{65537} ≡ m (mod n)` via RNS arithmetic\n\n### SHA-256 Calldata Generation\n\n{% tabs %}\n{% tab title=\"Python\" %}\n```python\nfrom garaga.starknet.tests_and_calldata_generators.signatures import RSA2048Signature\n\n# Create signature from raw message\nsig = RSA2048Signature.from_sha256_message(b\"hello garaga\", seed=0)\n\n# Generate calldata (Python path)\ncalldata = sig.serialize_sha256_with_hints(\n    message=b\"hello garaga\", prepend_public_key=True\n)\n\n# Generate calldata (Rust path, byte-for-byte identical)\ncalldata = sig.serialize_sha256_with_hints(\n    message=b\"hello garaga\", use_rust=True, prepend_public_key=True\n)\n```\n{% endtab %}\n\n{% tab title=\"Rust\" %}\n```rust\nuse garaga_rs::calldata::signatures::rsa_2048_sha256_calldata_builder;\n\nlet calldata = rsa_2048_sha256_calldata_builder(\n    signature,  // RSA signature s\n    b\"hello\",   // raw message bytes\n    modulus,    // RSA-2048 modulus n\n    true,       // prepend_public_key\n)?;\n```\n{% endtab %}\n\n{% tab title=\"TypeScript\" %}\n```typescript\nimport { rsa2048Sha256CalldataBuilder } from 'garaga';\n\nconst message = new TextEncoder().encode(\"hello garaga\");\nconst calldata = rsa2048Sha256CalldataBuilder(\n    signature,  // RSA signature (bigint)\n    message,    // raw message (Uint8Array)\n    modulus,    // RSA-2048 modulus (bigint)\n    true        // prependPublicKey\n);\n```\n{% endtab %}\n{% endtabs %}\n\n### SHA-256 Calldata Layout\n\n| Section | Elements | Description |\n|---------|----------|-------------|\n| Public key (optional) | 24 | Modulus `n` as 6 chunks × 4 words |\n| Signature | 24 | `s` as 6 chunks × 4 words |\n| Expected message | 24 | `m` (PKCS#1 v1.5 encoded) as 6 chunks × 4 words |\n| Reduction witnesses | 816 | 17 × (quotient 24 + remainder 24) |\n| ByteArray message | variable | Cairo ByteArray serde format |\n| **Total** | **888 + ByteArray** (with key) | |\n\n## PKCS#1 v1.5 Encoding\n\nFor standard RSA signature verification with SHA-256, the expected message must be PKCS#1 v1.5 encoded (RFC 8017, Section 9.2):\n\n```\n0x00 || 0x01 || PS(0xFF × 202) || 0x00 || DigestInfo(19 bytes) || SHA-256(msg)(32 bytes)\n```\n\nThe Python SDK provides `pkcs1_v1_5_encode_sha256`:\n\n```python\nfrom garaga.rsa_rns import pkcs1_v1_5_encode_sha256\nimport hashlib\n\nmessage_hash = hashlib.sha256(b\"hello\").digest()\nencoded_message = pkcs1_v1_5_encode_sha256(message_hash)\n# encoded_message is a 2048-bit integer ready for RSA verification\n```\n\n## Performance\n\nRSA-2048 verification costs approximately **~11.8M Sierra gas** (L2 gas) on Starknet. For comparison:\n\n| Scheme | Sierra Gas |\n|--------|-----------|\n| ECDSA (SECP256R1) | ~4.5M |\n| Schnorr (SECP256K1) | ~4.2M |\n| EdDSA (Ed25519, short msg) | ~9.8M |\n| **RSA-2048** | **~11.8M** |\n"
  },
  {
    "path": "hydra/garaga/algebra.py",
    "content": "from __future__ import annotations\n\nimport random\nfrom dataclasses import dataclass\nfrom typing import Generic, TypeVar\n\nfrom sympy import legendre_symbol, sqrt_mod\n\nT = TypeVar(\"T\", \"PyFelt\", \"Fp2\")\n\n\n@dataclass(slots=True)\nclass PyFelt:\n    \"\"\"\n    Represents an element of a finite field. The dataclass decorator automatically provides implementations for __init__, __repr__, __eq__, and __hash__ methods.\n    Supports the following operations through magic methods:\n    - Addition ((PyFelt | int) + (PyFelt | int))\n    - Subtraction ((PyFelt | int) - (PyFelt | int))\n    - Multiplication ((PyFelt | int) * (PyFelt | int))\n    - Division (PyFelt / PyFelt)\n    - Negation (-PyFelt)\n    - Inversion (inv(PyFelt))\n    - Exponentiation (PyFelt ** int)\n    - Equality (PyFelt == PyFelt)\n    - Inequality (PyFelt != PyFelt)\n    \"\"\"\n\n    value: int\n    p: int\n\n    @property\n    def felt(self) -> PyFelt:\n        return self\n\n    def __repr__(self) -> str:\n        p_str = f\"0x{self.p:0x}\"\n        if len(p_str) > 10:\n            p_str = f\"{p_str[:6]}...{p_str[-4:]}\"\n        return f\"PyFelt({self.value}, {p_str})\"\n\n    def __add__(self, right: PyFelt | int) -> PyFelt:\n        p = self.p\n        if isinstance(right, PyFelt):\n            return PyFelt((self.value + right.value) % p, p)\n        if isinstance(right, int):\n            return PyFelt((self.value + right) % p, p)\n        raise TypeError(f\"Cannot add PyFelt and {type(right)}\")\n\n    def __neg__(self) -> PyFelt:\n        p = self.p\n        return PyFelt((-self.value) % p, p)\n\n    def __sub__(self, right: PyFelt | int) -> PyFelt:\n        p = self.p\n        if isinstance(right, PyFelt):\n            return PyFelt((self.value - right.value) % p, p)\n        if isinstance(right, int):\n            return PyFelt((self.value - right) % p, p)\n        raise TypeError(f\"Cannot subtract PyFelt and {type(right)}\")\n\n    def __mul__(self, right: PyFelt | int) -> PyFelt:\n        p = self.p\n        if isinstance(right, PyFelt):\n            return PyFelt((self.value * right.value) % p, p)\n        if isinstance(right, int):\n            return PyFelt((self.value * right) % p, p)\n        raise TypeError(f\"Cannot multiply PyFelt and {type(right)}\")\n\n    def __rmul__(self, left: PyFelt | int) -> PyFelt:\n        return self.__mul__(left)\n\n    def __inv__(self) -> PyFelt:\n        try:\n            inv = pow(self.value, -1, self.p)\n        except ValueError:\n            raise ValueError(f\"Cannot invert {self.value} modulo {self.p}\")\n        return PyFelt(inv, self.p)\n\n    def __truediv__(self, right: PyFelt) -> PyFelt:\n        assert isinstance(self, PyFelt) and isinstance(\n            right, PyFelt\n        ), f\"Cannot divide {type(self)} by {type(right)}\"\n        return self * right.__inv__()\n\n    def __pow__(self, exponent: int) -> PyFelt:\n        return PyFelt(pow(self.value, exponent, self.p), self.p)\n\n    def __eq__(self, other: object) -> bool:\n        if isinstance(other, PyFelt):\n            return self.value == other.value\n        if isinstance(other, int):\n            return self.value == other\n        raise TypeError(f\"Cannot compare PyFelt and {type(other)}\")\n\n    def __lt__(self, other: PyFelt | int) -> bool:\n        if isinstance(other, PyFelt):\n            return self.value < other.value\n        if isinstance(other, int):\n            return self.value < other\n        raise TypeError(f\"Cannot compare PyFelt and {type(other)}\")\n\n    def __le__(self, other: PyFelt | int) -> bool:\n        if isinstance(other, PyFelt):\n            return self.value <= other.value\n        if isinstance(other, int):\n            return self.value <= other\n        raise TypeError(f\"Cannot compare PyFelt and {type(other)}\")\n\n    def __gt__(self, other: PyFelt | int) -> bool:\n        if isinstance(other, PyFelt):\n            return self.value > other.value\n        if isinstance(other, int):\n            return self.value > other\n        raise TypeError(f\"Cannot compare PyFelt and {type(other)}\")\n\n    def __ge__(self, other: PyFelt | int) -> bool:\n        if isinstance(other, PyFelt):\n            return self.value >= other.value\n        if isinstance(other, int):\n            return self.value >= other\n        raise TypeError(f\"Cannot compare PyFelt and {type(other)}\")\n\n    def __rlt__(self, left: int) -> bool:\n        return left < self.value\n\n    def __rle__(self, left: int) -> bool:\n        return left <= self.value\n\n    def __rgt__(self, left: int) -> bool:\n        return left > self.value\n\n    def __rge__(self, left: int) -> bool:\n        return left >= self.value\n\n    def __ne__(self, other: object) -> bool:\n        return not self.__eq__(other)\n\n    def __radd__(self, left: PyFelt | int) -> PyFelt:\n        return self.__add__(left)\n\n    def __rsub__(self, left: PyFelt | int) -> PyFelt:\n        return -self.__sub__(left)\n\n    def __rtruediv__(self, left: PyFelt | int) -> PyFelt:\n        return self.__inv__().__mul__(left)\n\n    def is_quad_residue(self) -> bool:\n        if self.value == 0:\n            return True\n        return legendre_symbol(self.value, self.p) == 1\n\n    def sqrt(self, min_root: bool = True) -> PyFelt:\n        if not self.is_quad_residue():\n            raise ValueError(\"Cannot square root a non-quadratic residue\")\n        roots = sqrt_mod(self.value, self.p, all_roots=True)\n        if min_root:\n            return PyFelt(min(roots), self.p)\n        else:\n            return PyFelt(max(roots), self.p)\n\n\n@dataclass(slots=True)\nclass Fp2:\n    a0: PyFelt\n    a1: PyFelt\n\n    def __post_init__(self):\n        assert self.a0.p == self.a1.p, \"Fields must be the same\"\n\n    @property\n    def p(self) -> int:\n        return self.a0.p\n\n    @property\n    def value(self) -> tuple[int, int]:\n        return self.a0.value, self.a1.value\n\n    @staticmethod\n    def random(p: int, max_value: int = None) -> Fp2:\n        if max_value is None:\n            max_value = p - 1\n\n        rnd1 = random.randint(0, max_value)\n        rnd2 = random.randint(0, max_value)\n        return Fp2(\n            PyFelt(rnd1, p),\n            PyFelt(rnd2, p),\n        )\n\n    @staticmethod\n    def one(p: int) -> Fp2:\n        return Fp2(PyFelt(1, p), PyFelt(0, p))\n\n    @staticmethod\n    def zero(p: int) -> Fp2:\n        return Fp2(PyFelt(0, p), PyFelt(0, p))\n\n    def __repr__(self) -> str:\n        return f\"Fp2({self.a0}, {self.a1})\"\n\n    def __add__(self, other: Fp2) -> Fp2:\n        if isinstance(other, Fp2):\n            return Fp2(self.a0 + other.a0, self.a1 + other.a1)\n        else:\n            raise TypeError(f\"Cannot add Fp2 and {type(other)}\")\n\n    def __eq__(self, other: object) -> bool:\n        if isinstance(other, Fp2):\n            return self.a0 == other.a0 and self.a1 == other.a1 and self.p == other.p\n        else:\n            raise TypeError(f\"Cannot compare Fp2 and {type(other)}\")\n\n    def __neg__(self) -> Fp2:\n        return Fp2(-self.a0, -self.a1)\n\n    def __sub__(self, other: Fp2) -> Fp2:\n        return self.__add__(-other)\n\n    def __mul__(self, other: Fp2 | PyFelt | int) -> Fp2:\n        if isinstance(other, PyFelt):\n            assert other.p == self.a0.p, \"Fields must be the same\"\n            return Fp2(self.a0 * other, self.a1 * other)\n        elif isinstance(other, int):\n            return Fp2(self.a0 * other, self.a1 * other)\n        elif isinstance(other, Fp2):\n            # (a0 + a1 * i) * (b0 + b1 * i) = a0 * b0 - a1 * b1 + (a0 * b1 + a1 * b0) * i\n            return Fp2(\n                self.a0 * other.a0 - self.a1 * other.a1,\n                self.a0 * other.a1 + self.a1 * other.a0,\n            )\n        else:\n            raise TypeError(f\"Cannot multiply Fp2 and {type(other)}\")\n\n    def __rmul__(self, other):\n        return self.__mul__(other)\n\n    def __truediv__(self, other):\n        if isinstance(other, Fp2):\n            return self * other.__inv__()\n        elif isinstance(other, int):\n            return self * pow(other, -1, self.p)\n\n        return NotImplemented\n\n    def __rtruediv__(self, other) -> Fp2:\n        if isinstance(other, Fp2):\n            return other * self.__inv__()\n        elif isinstance(other, int):\n            return other * self.__inv__()\n\n        return NotImplemented\n\n    def __inv__(self) -> Fp2:\n        t0, t1 = (self.a0 * self.a0, self.a1 * self.a1)\n        t0 = t0 + t1\n        t1 = pow(t0.value, -1, self.p)\n        return Fp2(self.a0 * t1, -(self.a1 * t1))\n\n    def __pow__(self, p: int) -> Fp2:\n        \"\"\"\n        Compute x**p in F_p^2 using square-and-multiply algorithm.\n        Args:\n        p: The exponent, a non-negative integer.\n        Returns:\n        x**p in F_p^2, represented similarly as x.\n        \"\"\"\n        assert isinstance(p, int) and p >= 0\n\n        # Handle the easy cases.\n        if p == 0:\n            # x**0 = 1, where 1 is the multiplicative identity in F_p^2.\n            return Fp2(PyFelt(1, self.p), PyFelt(0, self.p))\n        elif p == 1:\n            # x**1 = x.\n            return self\n\n        # Start the computation.\n        result = self.one(\n            self.p\n        )  # Initialize result as the multiplicative identity in F_p^2.\n        temp = self  # Initialize temp as self.\n\n        # Loop through each bit of the exponent p.\n        for bit in reversed(bin(p)[2:]):  # [2:] to strip the \"0b\" prefix.\n            if bit == \"1\":\n                result = result * temp\n            temp = temp * temp\n\n        return result\n\n    def norm(self) -> PyFelt:\n        return self.a0 * self.a0 + self.a1 * self.a1\n\n    def legendre(self) -> int:\n        norm = self.norm()\n        return legendre_symbol(norm.value, self.p)\n\n    def is_quad_residue(self) -> bool:\n        return self.legendre() == 1\n\n    def sqrt(self) -> Fp2:\n        if not self.is_quad_residue():\n            raise ValueError(\"Cannot square root a non-quadratic residue\")\n        assert self.p % 4 == 3, \"p must be 3 mod 4 to use this sqrt\"\n        min_one = Fp2(PyFelt(-1 % self.p, self.p), PyFelt(0, self.p))\n\n        a = self\n        a1 = a ** ((self.p - 3) // 4)\n        alpha = a1 * a1 * a\n        a0 = alpha**self.p * alpha\n        if a0 == min_one:\n            return ValueError(\"Cannot square root a non-quadratic residue\")\n\n        x0 = a1 * a\n        if alpha == min_one:\n            i = Fp2(PyFelt(0, self.p), PyFelt(1, self.p))\n            x = i * x0\n        else:\n            b = (Fp2.one(self.p) + alpha) ** ((self.p - 1) // 2)\n            x = b * x0\n\n        # Return the root as is, without forcing a specific sign\n        return x\n\n    def lexicographically_largest(self) -> bool:\n        \"\"\"Check if this Fp2 element is lexicographically largest.\"\"\"\n        if self.a1.value > (self.p - 1) // 2:\n            return True\n        if self.a1.value < (self.p - 1) // 2:\n            return False\n        return self.a0.value > (self.p - 1) // 2\n\n\n@dataclass(slots=True)\nclass BaseField:\n    p: int\n\n    def __call__(self, integer: int) -> PyFelt:\n        return PyFelt(integer % self.p, self.p)\n\n    def zero(self) -> PyFelt:\n        return PyFelt(0, self.p)\n\n    def one(self) -> PyFelt:\n        return PyFelt(1, self.p)\n\n    def random(self, max_value: int = None) -> PyFelt:\n        if max_value is None:\n            max_value = self.p - 1\n        return PyFelt(random.randint(0, max_value), self.p)\n\n    @property\n    def type(self) -> type[PyFelt]:\n        return PyFelt\n\n\n@dataclass(slots=True)\nclass BaseFp2Field:\n    p: int\n\n    def __call__(self, a: tuple[int, int] | int) -> Fp2:\n        if isinstance(a, tuple):\n            a0, a1 = a\n        else:\n            a0, a1 = a, 0\n        return Fp2(PyFelt(a0 % self.p, self.p), PyFelt(a1 % self.p, self.p))\n\n    def zero(self) -> Fp2:\n        return Fp2(PyFelt(0, self.p), PyFelt(0, self.p))\n\n    def one(self) -> Fp2:\n        return Fp2(PyFelt(1, self.p), PyFelt(0, self.p))\n\n    def random(self) -> Fp2:\n        return Fp2.random(self.p)\n\n    @property\n    def type(self) -> type[Fp2]:\n        return Fp2\n\n\n@dataclass(slots=True)\nclass ModuloCircuitElement:\n    \"\"\"\n    Represents an element within a modulo circuit with its associated offset.\n\n    Attributes:\n        emulated_felt (PyFelt): The emulated field element in the modulo circuit\n        offset (int): The offset in the values segment within the modulo circuit where the element is stored.\n    \"\"\"\n\n    emulated_felt: PyFelt\n    offset: int\n\n    __repr__ = lambda self: f\"ModuloCircuitElement({hex(self.value)}, {self.offset})\"\n\n    @property\n    def value(self) -> int:\n        return self.emulated_felt.value\n\n    @property\n    def p(self) -> int:\n        return self.emulated_felt.p\n\n    @property\n    def felt(self) -> PyFelt:\n        return self.emulated_felt\n\n\nclass Polynomial(Generic[T]):\n    \"\"\"\n    Represents a polynomial with coefficients in a finite field.\n\n    Parameters :\n    coefficients (list[PyFelt | ModuloCircuitElement]): A list of coefficients for the polynomial.\n\n    Magic Methods Summary:\n    - __init__: Initializes a polynomial with a list of coefficients.\n    - __add__: (Polynomial + Polynomial) Adds two polynomials.\n    - __neg__: (-Polynomial) Negates the polynomial.\n    - __sub__: (Polynomial - Polynomial) Subtracts one polynomial from another.\n    - __mul__: (Polynomial * PyFelt|Polynomial) Multiplies the polynomial by either a field element or another polynomial.\n    - __truediv__: (Polynomial / Polynomial) Divides one polynomial by another, asserting no remainder.\n    - __floordiv__: (Polynomial // Polynomial) Performs floor division on two polynomials.\n    - __mod__: (Polynomial % Polynomial) Finds the remainder of polynomial division.\n    - __divmod__: Divides one polynomial by another, returning both quotient and remainder.\n    - __eq__: (Polynomial == Polynomial) Checks if two polynomials are equal.\n    - __neq__: (Polynomial != Polynomial) Checks if two polynomials are not equal.\n    - __str__: Returns a string representation of the polynomial.\n    - __pow__: (Polynomial ** int) Raises the polynomial to a power.\n    \"\"\"\n\n    __slots__ = [\n        \"coefficients\",\n        \"coeff_type\",\n        \"p\",\n        \"field\",\n        \"zero_field\",\n        \"zero_field_value\",\n    ]\n\n    def __init__(self, coefficients: list[T], raw_init: tuple = None):\n        if raw_init is not None:\n            self._raw_init(coefficients, *raw_init)\n        else:\n            coeffs_types = {type(c) for c in coefficients}\n            if coeffs_types == {PyFelt}:\n                self._initialize(coefficients, PyFelt, BaseField)\n            elif coeffs_types == {ModuloCircuitElement}:\n                self._initialize([c.felt for c in coefficients], PyFelt, BaseField)\n            elif coeffs_types == {Fp2}:\n                self._initialize(coefficients, Fp2, BaseFp2Field)\n            else:\n                raise TypeError(\n                    f\"All elements in the list must be of the same type, either ModuloCircuitElement, PyFelt or Fp2., got {coeffs_types}\"\n                )\n\n    def _raw_init(\n        self,\n        coefficients: list[T],\n        coeff_type: type[T],\n        p: int,\n        field,\n        zero_field,\n        zero_field_value,\n    ) -> None:\n        self.coefficients = coefficients\n        self.coeff_type = coeff_type\n        self.p = p\n        self.field = field\n        self.zero_field = zero_field\n        self.zero_field_value = zero_field_value\n\n    def _initialize(\n        self, coefficients: list[T], coeff_type: type[T], field_class: type\n    ):\n        self.coefficients: list[T] = coefficients\n        self.coeff_type = coeff_type\n        self.p = coefficients[0].p\n        self.field = field_class(self.p)\n        self.zero_field = self.field.zero()\n        self.zero_field_value = self.zero_field.value\n\n    def __repr__(self) -> str:\n        if self.coeff_type == PyFelt:\n            return f\"Polynomial({[x.value for x in self.get_coeffs()]})\"\n        elif self.coeff_type == Fp2:\n            return f\"Polynomial({[x for x in self.get_coeffs()]})\"\n\n    def print_as_sage_poly(self, var_name: str = \"z\", as_hex: bool = False) -> str:\n        \"\"\"\n        Prints the polynomial ready to be used in SageMath.\n        \"\"\"\n        if self.is_zero():\n            return \"\"\n        coeffs = self.get_coeffs()\n        string = \"\"\n        zero = self.zero_field\n        for i, coeff in enumerate(coeffs[::-1]):\n            if coeff == zero:\n                continue\n            else:\n                if self.coeff_type == PyFelt:\n                    coeff_str = hex(coeff.value) if as_hex else str(coeff.value)\n                elif self.coeff_type == Fp2:\n                    coeff_str = f\"({coeff.a1.value} * i + {coeff.a0.value})\"\n\n                if i == len(coeffs) - 1:\n\n                    string += f\"{coeff_str}\"\n                elif i == len(coeffs) - 2:\n                    string += f\"{coeff_str}*{var_name} + \"\n                else:\n                    string += f\"{coeff_str}*{var_name}^{len(coeffs) - 1 - i} + \"\n        return string\n\n    def __getitem__(self, i: int) -> PyFelt:\n        try:\n            return self.coefficients[i]\n        except IndexError:\n            return self.zero_field\n\n    def __len__(self) -> int:\n        return len(self.coefficients)\n\n    def degree(self) -> int:\n        for i, coeff in enumerate(self.coefficients[::-1]):\n            if coeff.value != self.zero_field_value:\n                return len(self.coefficients) - 1 - i\n        return -1\n\n    def get_coeffs(self) -> list[T]:\n        coeffs = self.coefficients[:]\n        while len(coeffs) > 0 and coeffs[-1].value == self.zero_field_value:\n            coeffs.pop()\n        if coeffs == []:\n            return [self.zero_field]\n        return coeffs\n\n    def get_value_coeffs(self) -> list[int]:\n        if self.coeff_type == PyFelt:\n            return [c.value for c in self.get_coeffs()]\n        elif self.coeff_type == Fp2:\n            raise NotImplementedError(\"Fp2 not implemented\")\n\n    def differentiate(self) -> \"Polynomial\":\n        \"\"\"\n        Differentiates the polynomial with respect to x.\n\n        Returns:\n        Polynomial: The derivative of the polynomial.\n        \"\"\"\n        if len(self.coefficients) <= 1:\n            return Polynomial([self.zero_field])\n\n        derivative_coeffs = [\n            self.coefficients[i] * i for i in range(1, len(self.coefficients))\n        ]\n        return Polynomial(\n            derivative_coeffs,\n            raw_init=(\n                self.coeff_type,\n                self.p,\n                self.field,\n                self.zero_field,\n                self.zero_field_value,\n            ),\n        )\n\n    def __add__(self, other: Polynomial) -> Polynomial:\n        if self.coeff_type != other.coeff_type:\n            raise TypeError(\n                f\"Cannot add Polynomial of type {self.coeff_type} and {other.coeff_type} \\n self: {self} \\n other: {other}\"\n            )\n\n        ns, no = len(self.coefficients), len(other.coefficients)\n        if ns >= no:\n            coeffs = self.coefficients[:]\n            for i in range(no):\n                coeffs[i] += other.coefficients[i]\n        else:\n            coeffs = other.coefficients[:]\n            for i in range(ns):\n                coeffs[i] += self.coefficients[i]\n\n        return Polynomial(\n            coeffs,\n            raw_init=(\n                self.coeff_type,\n                self.p,\n                self.field,\n                self.zero_field,\n                self.zero_field_value,\n            ),\n        )\n\n    def __neg__(self) -> \"Polynomial\":\n        return Polynomial(\n            [-c for c in self.coefficients],\n            raw_init=(\n                self.coeff_type,\n                self.p,\n                self.field,\n                self.zero_field,\n                self.zero_field_value,\n            ),\n        )\n\n    def __sub__(self, other: Polynomial) -> Polynomial:\n        if self.coeff_type != other.coeff_type:\n            raise TypeError(\n                f\"Cannot add Polynomial of type {self.coeff_type} and {other.coeff_type} \\n self: {self} \\n other: {other}\"\n            )\n\n        ns, no = len(self.coefficients), len(other.coefficients)\n        coeffs = self.coefficients[:]\n        if ns >= no:\n            for i in range(no):\n                coeffs[i] -= other.coefficients[i]\n        else:\n            for i in range(ns):\n                coeffs[i] -= other.coefficients[i]\n            for i in range(ns, no):\n                coeffs.append(-other.coefficients[i])\n\n        return Polynomial(\n            coeffs,\n            raw_init=(\n                self.coeff_type,\n                self.p,\n                self.field,\n                self.zero_field,\n                self.zero_field_value,\n            ),\n        )\n\n    def __mul__(\n        self, other: \"Polynomial\" | PyFelt | ModuloCircuitElement\n    ) -> \"Polynomial\":\n        if isinstance(other, (PyFelt, ModuloCircuitElement)):\n            return Polynomial(\n                [c * other.felt for c in self.coefficients],\n                raw_init=(\n                    self.coeff_type,\n                    self.p,\n                    self.field,\n                    self.zero_field,\n                    self.zero_field_value,\n                ),\n            )\n        elif isinstance(other, Fp2):\n            return Polynomial(\n                [c * other for c in self.coefficients],\n                raw_init=(\n                    self.coeff_type,\n                    self.p,\n                    self.field,\n                    self.zero_field,\n                    self.zero_field_value,\n                ),\n            )\n        if self.coeff_type != other.coeff_type:\n            raise TypeError(\n                f\"Cannot multiply polynomial of type {self.coeff_type} by polynomial of type {other.type}\"\n            )\n\n        len_self = len(self.coefficients)\n        len_other = len(other.coefficients)\n        buf = [self.zero_field] * (len_self + len_other - 1)\n        for i in range(len_self):\n            if self.coefficients[i].value == self.zero_field_value:\n                continue  # optimization for sparse polynomials\n            for j in range(len_other):\n                buf[i + j] += self.coefficients[i] * other.coefficients[j]\n\n        while len(buf) > 0 and buf[-1].value == self.zero_field_value:\n            buf.pop()\n        if buf == []:\n            return Polynomial(\n                [self.zero_field],\n                raw_init=(\n                    self.coeff_type,\n                    self.p,\n                    self.field,\n                    self.zero_field,\n                    self.zero_field_value,\n                ),\n            )\n\n        return Polynomial(\n            buf,\n            raw_init=(\n                self.coeff_type,\n                self.p,\n                self.field,\n                self.zero_field,\n                self.zero_field_value,\n            ),\n        )\n\n    def __rmul__(\n        self, other: \"Polynomial\" | PyFelt | ModuloCircuitElement\n    ) -> \"Polynomial\":\n        return self.__mul__(other)\n\n    def __truediv__(self, other):\n        quo, rem = Polynomial.__divmod__(self, other)\n        assert (\n            rem.is_zero()\n        ), \"cannot perform polynomial division because remainder is not zero\"\n        return quo\n\n    def __floordiv__(self, other: \"Polynomial\") -> \"Polynomial\":\n        quo, _ = Polynomial.__divmod__(self, other)\n        return quo\n\n    def __mod__(self, other: \"Polynomial\") -> \"Polynomial\":\n        _, rem = Polynomial.__divmod__(self, other)\n        return rem\n\n    def __divmod__(self, denominator: \"Polynomial\") -> tuple[Polynomial, Polynomial]:\n        den_deg = denominator.degree()\n        if den_deg == -1:\n            raise ValueError(\"Cannot divide by zero polynomial\")\n        num_deg = self.degree()\n        if num_deg < den_deg:\n            return (Polynomial.zero(self.p, self.coeff_type), self)\n\n        remainder = Polynomial(\n            self.coefficients[:],\n            raw_init=(\n                self.coeff_type,\n                self.p,\n                self.field,\n                self.zero_field,\n                self.zero_field_value,\n            ),\n        )\n        quotient_coefficients = [self.zero_field] * (num_deg - den_deg + 1)\n\n        denom_lead_inv = denominator[den_deg].__inv__()\n\n        rem_deg = num_deg\n        while rem_deg >= den_deg:\n            shift = rem_deg - den_deg\n            coefficient = remainder[rem_deg] * denom_lead_inv\n            quotient_coefficients[shift] = coefficient\n\n            subtractee = (\n                Polynomial(\n                    [self.zero_field] * shift + [coefficient],\n                    raw_init=(\n                        self.coeff_type,\n                        self.p,\n                        self.field,\n                        self.zero_field,\n                        self.zero_field_value,\n                    ),\n                )\n                * denominator\n            )\n            remainder = remainder - subtractee\n            rem_deg = remainder.degree()\n\n        quotient = Polynomial(\n            quotient_coefficients,\n            raw_init=(\n                self.coeff_type,\n                self.p,\n                self.field,\n                self.zero_field,\n                self.zero_field_value,\n            ),\n        )\n        return quotient, remainder\n\n    def __eq__(self, other: object) -> bool:\n        if not isinstance(other, Polynomial):\n            raise TypeError(f\"Cannot compare Polynomial with {type(other)}\")\n\n        if self.degree() != other.degree():\n            return False\n\n        if self.degree() == -1:\n            return True\n\n        return self.get_coeffs() == other.get_coeffs()\n\n    def __neq__(self, other: object) -> bool:\n        return not self.__eq__(other)\n\n    def leading_coefficient(self) -> PyFelt:\n        return self.coefficients[self.degree()]\n\n    def is_zero(self) -> bool:\n        if not self.coefficients:\n            return True\n        for c in self.coefficients:\n            if c != self.zero_field:\n                return False\n        return True\n\n    @staticmethod\n    def zero(p: int, type: type[T] = PyFelt) -> \"Polynomial[T]\":\n        if type == PyFelt:\n            return Polynomial([PyFelt(0, p)])\n        elif type == Fp2:\n            return Polynomial([Fp2.zero(p)])\n        else:\n            raise ValueError(f\"Unknown type {type}\")\n\n    @staticmethod\n    def one(p: int, type: type[T] = PyFelt) -> \"Polynomial[T]\":\n        if type == PyFelt:\n            return Polynomial([PyFelt(1, p)])\n        elif type == Fp2:\n            return Polynomial([Fp2.one(p)])\n        else:\n            raise ValueError(f\"Unknown type {type}\")\n\n    def evaluate(self, point: PyFelt | Fp2) -> PyFelt | Fp2:\n        assert isinstance(\n            point, self.coeff_type\n        ), f\"point type must match polynomial type {self.coeff_type}\"\n        xi = self.field.one()\n        value = self.zero_field\n        for c in self.coefficients:\n            value = value + c * xi\n            xi = xi * point\n        return value\n\n    def __pow__(self, exponent: int) -> \"Polynomial\":\n        if exponent == 0:\n            return Polynomial([self.field.one()])\n        acc = Polynomial([self.field.one()])\n        for i in reversed(range(len(bin(exponent)[2:]))):\n            acc = acc * acc\n            if (1 << i) & exponent != 0:\n                acc = acc * self\n        return acc\n\n    def pow(self, exponent: int, modulo_poly: \"Polynomial\") -> \"Polynomial\":\n        if self.coeff_type != modulo_poly.coeff_type:\n            raise TypeError(\n                f\"Cannot pow polynomial of type {self.coeff_type} modulo a polynomial of type {modulo_poly.coeff_type}\"\n            )\n        one = Polynomial.one(self.p, self.coeff_type)\n        if exponent == 0:\n            return one\n        acc = one\n        for i in reversed(range(len(bin(exponent)[2:]))):\n            acc = acc * acc % modulo_poly\n            if (1 << i) & exponent != 0:\n                acc = (acc * self) % modulo_poly\n        return acc % modulo_poly\n\n    def inv(self, modulo_poly: \"Polynomial\") -> \"Polynomial\":\n        \"\"\"\n        Inverts a polynomial modulo another polynomial over a finite field.\n\n        Parameters:\n        modulo_poly Polynomial: The polynomial to invert modulo.\n\n        Returns:\n        Polynomial: The inverted polynomial.\n        \"\"\"\n        if self.is_zero():\n            raise ValueError(\"Cannot invert zero polynomial\")\n        inv, _, gcd = Polynomial.xgcd(self, modulo_poly)\n        assert (\n            gcd.degree() == 0 and gcd.coefficients[0] == 1\n        ), f\"Polynomial {self} is not invertible modulo {modulo_poly}\"\n        return inv\n\n    @staticmethod\n    def xgcd(x: Polynomial, y: Polynomial) -> tuple[Polynomial, Polynomial, Polynomial]:\n        \"\"\"\n        Extended Euclidean Algorithm for polynomials.\n\n        This method computes the extended greatest common divisor (GCD) of two polynomials x and y.\n        It returns a tuple of three elements: (a, b, g) such that a * x + b * y = g, where g is the\n        greatest common divisor of x and y. This is particularly useful in contexts like\n        computational algebra or number theory where the coefficients of the polynomials are in a field.\n\n        Parameters:\n        x (Polynomial): The first polynomial.\n        y (Polynomial): The second polynomial.\n\n        Returns:\n        tuple: A tuple (a, b, g) where:\n            a (Polynomial): A polynomial such that a * x + b * y = g.\n            b (Polynomial): A polynomial such that a * x + b * y = g.\n            g (Polynomial): The greatest common divisor of x and y.\n        \"\"\"\n        one = Polynomial.one(x.p, x.coeff_type)\n        zero = Polynomial.zero(x.p, x.coeff_type)\n        old_r, r = (x, y)\n        old_s, s = (one, zero)\n        old_t, t = (zero, one)\n\n        while not r.is_zero():\n            quotient = old_r // r\n            old_r, r = (r, old_r - quotient * r)\n            old_s, s = (s, old_s - quotient * s)\n            old_t, t = (t, old_t - quotient * t)\n\n        lcinv = old_r.leading_coefficient().__inv__()\n\n        # a, b, g\n        raw_init = (x.coeff_type, x.p, x.field, x.zero_field, x.zero_field_value)\n        return (\n            Polynomial([c * lcinv for c in old_s.coefficients], raw_init=raw_init),\n            Polynomial([c * lcinv for c in old_t.coefficients], raw_init=raw_init),\n            Polynomial([c * lcinv for c in old_r.coefficients], raw_init=raw_init),\n        )\n\n    @staticmethod\n    def lagrange_interpolation(\n        p: int, domain: list[PyFelt], values: list[PyFelt]\n    ) -> Polynomial:\n        \"\"\"\n        Performs Lagrange interpolation on a set of points.\n\n        Parameters:\n        p (int): The prime modulus for the field.\n        domain (list[PyFelt]): The domain of the interpolation.\n        values (list[PyFelt]): The values corresponding to the domain.\n\n        Returns:\n        Polynomial: The interpolated polynomial.\n        \"\"\"\n        assert len(domain) == len(\n            values\n        ), \"number of elements in domain does not match number of values -- cannot interpolate\"\n        assert len(domain) > 0, \"cannot interpolate between zero points\"\n        field = BaseField(p)\n        X = Polynomial([field.zero(), field.one()])\n        acc = Polynomial([field.zero()])\n        for i in range(len(domain)):\n            prod = Polynomial([values[i]])\n            for j in range(len(domain)):\n                if j == i:\n                    continue\n                prod = (\n                    prod\n                    * (X - Polynomial([domain[j]]))\n                    * Polynomial([(domain[i] - domain[j]).__inv__()])\n                )\n            acc = acc + prod\n        return acc\n\n    def sparsity(self) -> list[int]:\n        return get_sparsity(self.coefficients)\n\n\ndef get_sparsity(X: list[PyFelt | ModuloCircuitElement]) -> list[int]:\n    \"\"\"\n    Determines the sparsity of polynomial coefficients.\n\n    This function evaluates a list of polynomial coefficients (`X`) and categorizes each based on its value:\n    - 2: The coefficient is 1, indicating a direct representation of a polynomial power.\n    - 1: The coefficient is non-zero but not 1, indicating a contributing non-zero coefficient.\n    - 0: The coefficient is 0, indicating no contribution to the polynomial.\n\n    Parameters:\n    - X (list[PyFelt | ModuloCircuitElement]): Coefficients to evaluate.\n\n    Returns:\n    - list[int]: Sparsity categories for each coefficient in `X`.\n    \"\"\"\n    return [2 if x.value == 1 else 1 if x.value != 0 else 0 for x in X]\n\n\n@dataclass(slots=True)\nclass RationalFunction(Generic[T]):\n    numerator: Polynomial[T]\n    denominator: Polynomial[T]\n\n    @property\n    def field(self) -> BaseField | BaseFp2Field:\n        return self.numerator.field\n\n    @classmethod\n    def zero(cls, p: int, type: type[T] = PyFelt) -> \"RationalFunction[T]\":\n        return cls(Polynomial.zero(p, type), Polynomial.one(p, type))\n\n    @classmethod\n    def one(cls, p: int, type: type[T] = PyFelt) -> \"RationalFunction[T]\":\n        return cls(Polynomial.one(p, type), Polynomial.one(p, type))\n\n    def simplify(self) -> \"RationalFunction\":\n        _, _, gcd = Polynomial.xgcd(self.numerator, self.denominator)\n        num_simplified = self.numerator // gcd\n        den_simplified = self.denominator // gcd\n        return RationalFunction(\n            num_simplified * self.denominator.leading_coefficient().__inv__(),\n            den_simplified * den_simplified.leading_coefficient().__inv__(),\n        )\n\n    def __add__(self, other: \"RationalFunction\") -> \"RationalFunction\":\n        return RationalFunction(\n            self.numerator * other.denominator + other.numerator * self.denominator,\n            self.denominator * other.denominator,\n        ).simplify()\n\n    def __mul__(self, other: int | PyFelt) -> \"RationalFunction\":\n        if isinstance(other, int):\n            other = self.field(other)\n        elif isinstance(other, PyFelt):\n            other = self.field(other.value)\n        else:\n            raise TypeError(f\"Cannot multiply RationalFunction with {type(other)}\")\n        return RationalFunction(self.numerator * other, self.denominator)\n\n    def evaluate(self, x: PyFelt | Fp2) -> PyFelt | Fp2:\n        return self.numerator.evaluate(x) / self.denominator.evaluate(x)\n\n    def degrees_infos(self) -> dict[str, int]:\n        return {\n            \"numerator\": self.numerator.degree(),\n            \"denominator\": self.denominator.degree(),\n        }\n\n\n@dataclass(slots=True)\nclass FunctionFelt(Generic[T]):\n    # f = a(x) + yb(x)\n    a: RationalFunction[T]\n    b: RationalFunction[T]\n\n    @property\n    def field(self) -> BaseField | BaseFp2Field:\n        return self.a.numerator.field\n\n    @classmethod\n    def zero(cls, p: int, type: type[T] = PyFelt) -> \"FunctionFelt[T]\":\n        return cls(RationalFunction.zero(p, type), RationalFunction.zero(p, type))\n\n    @classmethod\n    def one(cls, p: int, type: type[T] = PyFelt) -> \"FunctionFelt[T]\":\n        return cls(RationalFunction.one(p, type), RationalFunction.zero(p, type))\n\n    def simplify(self) -> \"FunctionFelt\":\n        return FunctionFelt(self.a.simplify(), self.b.simplify())\n\n    def __add__(self, other: \"FunctionFelt\") -> \"FunctionFelt\":\n        return FunctionFelt(self.a + other.a, self.b + other.b)\n\n    def __mul__(self, other: PyFelt | int) -> \"FunctionFelt\":\n        return FunctionFelt(self.a * other, self.b * other)\n\n    def __rmul__(self, other: PyFelt | int) -> \"FunctionFelt\":\n        return self.__mul__(other)\n\n    def evaluate(self, x: PyFelt | Fp2, y: PyFelt | Fp2) -> PyFelt | Fp2:\n        assert (\n            isinstance(x, self.field.type) and x.p == self.field.p\n        ), f\"x type must match field {self.field.type}, got {type(x)} over {hex(x.p)}\"\n        assert (\n            isinstance(y, self.field.type) and y.p == self.field.p\n        ), f\"y type must match field {self.field.type}, got {type(y)} over {hex(y.p)}\"\n\n        return self.a.evaluate(x) + y * self.b.evaluate(x)\n\n    def degrees_infos(self) -> dict[str, dict[str, int]]:\n        return {\n            \"a\": self.a.degrees_infos(),\n            \"b\": self.b.degrees_infos(),\n        }\n\n    def validate_degrees(self, msm_size: int, batched: bool = True) -> bool:\n        degrees = self.degrees_infos()\n        if batched:\n            extra = 2\n        else:\n            extra = 0\n        assert degrees[\"a\"][\"numerator\"] <= msm_size + 1 + extra\n        assert degrees[\"a\"][\"denominator\"] <= msm_size + 2 + extra\n        assert degrees[\"b\"][\"numerator\"] <= msm_size + 2 + extra\n        assert degrees[\"b\"][\"denominator\"] <= msm_size + 5 + extra\n        return True\n\n    def print_as_sage_poly(self, var: str = \"x\", as_hex: bool = False) -> str:\n        return f\"(({self.b.numerator.print_as_sage_poly(var, as_hex)}) / ({self.b.denominator.print_as_sage_poly(var, as_hex)}) * y + ({self.a.numerator.print_as_sage_poly(var, as_hex)} / ({self.a.denominator.print_as_sage_poly(var, as_hex)})\"\n"
  },
  {
    "path": "hydra/garaga/curves.py",
    "content": "from dataclasses import dataclass\nfrom enum import Enum\nfrom typing import TypeAlias\n\nfrom garaga.algebra import BaseField, BaseFp2Field, Fp2, Polynomial, PyFelt\nfrom garaga.hints.io import bigint_split, int_to_u256, int_to_u384\n\nN_LIMBS = 4\nBASE = 2**96\nSTARK = 0x800000000000011000000000000000000000000000000000000000000000001\nBN254_ID = 0\nBLS12_381_ID = 1\nSECP256K1_ID = 2\nSECP256R1_ID = 3\nED25519_ID = 4\nGRUMPKIN_ID = 5\n\n\nclass ProofSystem(Enum):\n    Groth16 = \"groth16\"  # Works for Generic Groth16 (BN254/BLS12-381), Risc0 Groth16 (BN254), and SP1 Groth16 (BN254)\n    UltraKeccakZKHonk = \"ultra_keccak_zk_honk\"\n    # UltraStarknetZKHonk = \"ultra_starknet_zk_honk\" # Disabled.\n\n    @property\n    def supported_curves(self) -> set[int]:\n        if self == ProofSystem.Groth16:\n            return {BN254_ID, BLS12_381_ID}\n        if self == ProofSystem.UltraKeccakHonk:\n            return {BN254_ID}\n        if self == ProofSystem.UltraStarknetHonk:\n            return {BN254_ID}\n        if self == ProofSystem.UltraKeccakZKHonk:\n            return {BN254_ID}\n        if self == ProofSystem.UltraStarknetZKHonk:\n            return {BN254_ID}\n        return set()\n\n\nclass CurveID(Enum):\n    BN254 = 0\n    BLS12_381 = 1\n    SECP256K1 = 2\n    SECP256R1 = 3\n    ED25519 = 4\n    GRUMPKIN = 5\n\n    @staticmethod\n    def from_str(s: str) -> \"CurveID\":\n        return CurveID(CurveID.find_value_in_string(s))\n\n    @property\n    def p(self) -> int:\n        return CURVES[self.value].p\n\n    @staticmethod\n    def find_value_in_string(s: str) -> int | None:\n        \"\"\"\n        Find the value of the curve ID in the string.\n        \"\"\"\n        if s.lower() == \"bn128\":\n            return CurveID.BN254.value\n        if s.lower() == \"bls12381\":\n            return CurveID.BLS12_381.value\n        for member in CurveID:\n            if s.lower() in member.name.lower() or member.name.lower() in s.lower():\n                return member.value\n        return None\n\n    @staticmethod\n    def get_proving_system_curve(\n        curve_id: int, proving_system: ProofSystem\n    ) -> \"CurveID\":\n        \"\"\"\n        Get the curve ID for proving systems. Only curves supported by the given proving system are valid.\n        \"\"\"\n        if curve_id not in CurveID._value2member_map_:\n            raise ValueError(\n                f\"Invalid curve ID: {curve_id}. Supported curves are: {', '.join([f'{c.name} (ID: {c.value})' for c in CurveID])}\"\n            )\n        if curve_id not in proving_system.supported_curves:\n            supported_curves = \", \".join(\n                f\"{CurveID(c).name} (ID: {c})\" for c in proving_system.supported_curves\n            )\n            raise ValueError(\n                f\"Invalid curve ID for {proving_system.name}. Supported curves are: {supported_curves}\"\n            )\n        return CurveID(curve_id)\n\n\n@dataclass\nclass SWUParams:\n    A: int\n    B: int\n    Z: int\n\n\n@dataclass(slots=True, frozen=True)\nclass WeierstrassCurve:\n    cairo_zero_namespace_name: str\n    id: int\n    p: int\n    n: int  # order\n    h: int  # cofactor\n    a: int  # y^2 = x^3 + ax + b\n    b: int\n    fp_generator: int  # A generator of the field of the curve. To verify it, use is_generator function.\n    Gx: int  # x-coordinate of the generator point\n    Gy: int  # y-coordinate of the generator point\n    swu_params: SWUParams\n    eigen_value: int | None  # Endomorphism eigenvalue\n    third_root_of_unity: int | None  # Endomorphism image\n\n    def is_endomorphism_available(self) -> bool:\n        return self.eigen_value is not None and self.third_root_of_unity is not None\n\n    def to_cairo_zero(self) -> str:\n        code = f\"namespace {self.cairo_zero_namespace_name} {{\\n\"\n        code += f\"const CURVE_ID = {self.id};\\n\"\n        p = bigint_split(self.p, N_LIMBS, BASE)\n        n = bigint_split(self.n, N_LIMBS, BASE)\n        a = bigint_split(self.a, N_LIMBS, BASE)\n        b = bigint_split(self.b, N_LIMBS, BASE)\n        g = bigint_split(self.fp_generator, N_LIMBS, BASE)\n        min_one = bigint_split(-1 % self.p, N_LIMBS, BASE)\n        for i, limb in enumerate(p):\n            code += f\"const P{i} = {hex(limb)};\\n\"\n        for i, limb in enumerate(n):\n            code += f\"const N{i} = {hex(limb)};\\n\"\n        for i, limb in enumerate(a):\n            code += f\"const A{i} = {hex(limb)};\\n\"\n        for i, limb in enumerate(b):\n            code += f\"const B{i} = {hex(limb)};\\n\"\n        for i, limb in enumerate(g):\n            code += f\"const G{i} = {hex(limb)};\\n\"\n        for i, limb in enumerate(min_one):\n            code += f\"const MIN_ONE_D{i} = {hex(limb)};\\n\"\n        code += \"}\\n\"\n        return code\n\n    def to_cairo_one(self) -> str:\n        code = f\"const {self.cairo_zero_namespace_name.upper()}:Curve = \\n\"\n        code += \"Curve {\\n\"\n        code += f\"p:{int_to_u384(self.p)},\\n\"\n        code += f\"n:{int_to_u256(self.n)},\\n\"\n        code += f\"a:{int_to_u384(self.a)},\\n\"\n        code += f\"b:{int_to_u384(self.b)},\\n\"\n        code += f\"g:{int_to_u384(self.fp_generator)},\\n\"\n        code += f\"min_one:{int_to_u384(-1%self.p)},\\n\"\n        code += f\"G: {G1Point(self.Gx, self.Gy, CurveID(self.id)).to_cairo_1()},\\n\"\n        code += \"};\\n\"\n        return code\n\n\n@dataclass(slots=True, frozen=True)\nclass TwistedEdwardsCurve(WeierstrassCurve):\n    \"\"\"\n    Twisted Edwards curve is a curve of the form ax^2 + y^2 = 1 + dx^2y^2.\n    Equivalent to a Weierstrass curve of the form y^2 = x^3 + ax + b.\n    Automatic conversion of parameters is done in the constructor.\n    \"\"\"\n\n    a_twisted: int  # Twisted Edwards curve parameter\n    d_twisted: int  # Twisted Edwards curve parameter\n\n    def __init__(\n        self,\n        cairo_zero_namespace_name: str,\n        id: int,\n        p: int,\n        n: int,\n        h: int,\n        d_twisted: int,\n        a_twisted: int,\n        fp_generator: int,\n        Gx: int,\n        Gy: int,\n        swu_params: SWUParams,\n        eigen_value: int | None = None,\n        third_root_of_unity: int | None = None,\n    ):\n        assert a_twisted != 0 and d_twisted != 0 and a_twisted != d_twisted\n        # Set attributes\n        object.__setattr__(self, \"d_twisted\", d_twisted)\n        object.__setattr__(self, \"a_twisted\", a_twisted)\n        object.__setattr__(self, \"p\", p)\n        object.__setattr__(self, \"swu_params\", swu_params)\n        object.__setattr__(self, \"eigen_value\", eigen_value)\n        object.__setattr__(self, \"third_root_of_unity\", third_root_of_unity)\n        # Calculate Weierstrass parameters\n        a = (\n            -1\n            * pow(48, -1, p)\n            * (a_twisted**2 + 14 * a_twisted * d_twisted + d_twisted**2)\n            % p\n        )\n        b = (\n            pow(864, -1, p)\n            * (a_twisted + d_twisted)\n            * (-(a_twisted**2) + 34 * a_twisted * d_twisted - d_twisted**2)\n            % p\n        )\n\n        WeierstrassCurve.__init__(\n            self,\n            cairo_zero_namespace_name,\n            id,\n            p,\n            n,\n            h,\n            a,\n            b,\n            fp_generator,\n            *(self.to_weierstrass(Gx, Gy)),\n            swu_params,\n            eigen_value,\n            third_root_of_unity,\n        )\n\n    def to_weierstrass(self, x_twisted, y_twisted):\n        a = self.a_twisted\n        d = self.d_twisted\n        return (\n            (5 * a + a * y_twisted - 5 * d * y_twisted - d)\n            * pow(12 - 12 * y_twisted, -1, self.p)\n            % self.p,\n            (a + a * y_twisted - d * y_twisted - d)\n            * pow(4 * x_twisted - 4 * x_twisted * y_twisted, -1, self.p)\n            % self.p,\n        )\n\n    def to_twistededwards(self, x_weirstrass: int, y_weirstrass: int):\n        a = self.a_twisted\n        d = self.d_twisted\n        y = (\n            (5 * a - 12 * x_weirstrass - d)\n            * pow(-12 * x_weirstrass - a + 5 * d, -1, self.p)\n            % self.p\n        )\n        x = (\n            (a + a * y - d * y - d)\n            * pow(4 * y_weirstrass - 4 * y_weirstrass * y, -1, self.p)\n            % self.p\n        )\n        return (x, y)\n\n\n@dataclass(slots=True, frozen=True)\nclass PairingCurve(WeierstrassCurve):\n    x: int  # curve x parameter\n    irreducible_polys: dict[int, list[int]]\n    nr_a0: int  # E2 non residue\n    nr_a1: int\n    b20: int\n    b21: int  # E2: b is (b20, b21)\n    loop_counter: list[int]\n    line_function_sparsity: list[\n        int\n    ]  # 0: ==0, 1: !=0, 2: ==1.. L(x) = Σ(sparsity[i] * coeff[i] * x^i )\n    final_exp_cofactor: int\n    G2x: tuple[int, int]\n    G2y: tuple[int, int]\n\n\ndef NAF(x):\n    if x == 0:\n        return []\n    z = 0 if x % 2 == 0 else 2 - (x % 4)\n    return NAF((x - z) // 2) + [z]\n\n\ndef jy00(value: int) -> list[int]:\n    \"\"\"\n    This is a minimum-Hamming-Weight left-to-right recoding.\n    It outputs signed {-1, 0, 1} bits from MSB to LSB\n    with minimal Hamming Weight to minimize operations\n    in Miller Loops and vartime scalar multiplications\n\n    - Optimal Left-to-Right Binary Signed-Digit Recoding\n      Joye, Yen, 2000\n      https://marcjoye.github.io/papers/JY00sd2r.pdf\n    \"\"\"\n\n    def bit(value, index):\n        return (value >> index) & 1\n\n    bi, bi1, ri, ri1, ri2 = 0, 0, 0, 0, 0\n    bits = value.bit_length()\n    recoded = []\n\n    for i in range(bits, -1, -1):\n        if i == bits:\n            ri1, ri2 = bit(value, bits - 1), bit(value, bits - 2)\n        else:\n            bi, ri = bi1, ri1\n            ri1, ri2 = ri2, bit(value, i - 2) if i >= 2 else 0\n\n        bi1 = (bi + ri1 + ri2) >> 1\n        recoded.append(-2 * bi + ri + bi1)\n\n    return recoded\n\n\nGARAGA_RS_SUPPORTED_CURVES = {BN254_ID, BLS12_381_ID}\n\nCurve: TypeAlias = WeierstrassCurve\n\nCURVES: dict[int, WeierstrassCurve] = {\n    BN254_ID: PairingCurve(\n        cairo_zero_namespace_name=\"bn\",\n        id=BN254_ID,\n        p=0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD47,\n        n=0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000001,\n        x=0x44E992B44A6909F1,\n        h=1,\n        irreducible_polys={\n            6: [82, 0, 0, -18, 0, 0, 1],\n            12: [82, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 1],\n        },\n        nr_a0=9,\n        nr_a1=1,\n        a=0,\n        b=3,\n        b20=0x2B149D40CEB8AAAE81BE18991BE06AC3B5B4C5E559DBEFA33267E6DC24A138E5,\n        b21=0x9713B03AF0FED4CD2CAFADEED8FDF4A74FA084E52D1852E4A2BD0685C315D2,\n        loop_counter=jy00(6 * 0x44E992B44A6909F1 + 2)[::-1],\n        line_function_sparsity=[\n            2,\n            1,\n            0,\n            1,\n            0,\n            0,\n            0,\n            1,\n            0,\n            1,\n            0,\n            0,\n        ],\n        final_exp_cofactor=1469306990098747947464455738335385361638823152381947992820,  # cofactor = 2 * x0 * (6 * x0**2 + 3 * x0 + 1)\n        fp_generator=3,\n        Gx=0x1,\n        Gy=0x2,\n        G2x=(\n            0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED,\n            0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2,\n        ),\n        G2y=(\n            0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA,\n            0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B,\n        ),\n        swu_params=None,\n        eigen_value=0xB3C4D79D41A917585BFC41088D8DAAA78B17EA66B99C90DD,\n        third_root_of_unity=0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE,\n    ),\n    BLS12_381_ID: PairingCurve(\n        cairo_zero_namespace_name=\"bls\",\n        id=BLS12_381_ID,\n        p=0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAB,\n        n=0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001,\n        x=-0xD201000000010000,\n        h=0x396C8C005555E1568C00AAAB0000AAAB,\n        irreducible_polys={\n            6: [2, 0, 0, -2, 0, 0, 1],\n            12: [2, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 1],\n        },\n        nr_a0=1,\n        nr_a1=1,\n        a=0,\n        b=4,\n        b20=4,\n        b21=4,\n        loop_counter=[int(x) for x in bin(0xD201000000010000)[2:][::-1]],\n        line_function_sparsity=[\n            1,\n            0,\n            1,\n            2,\n            0,\n            0,\n            1,\n            0,\n            1,\n            0,\n            0,\n            0,\n        ],\n        final_exp_cofactor=3,\n        fp_generator=3,\n        Gx=0x17F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB,\n        Gy=0x08B3F481E3AAA0F1A09E30ED741D8AE4FCF5E095D5D00AF600DB18CB2C04B3EDD03CC744A2888AE40CAA232946C5E7E1,\n        G2x=(\n            0x24AA2B2F08F0A91260805272DC51051C6E47AD4FA403B02B4510B647AE3D1770BAC0326A805BBEFD48056C8C121BDB8,\n            0x13E02B6052719F607DACD3A088274F65596BD0D09920B61AB5DA61BBDC7F5049334CF11213945D57E5AC7D055D042B7E,\n        ),\n        G2y=(\n            0xCE5D527727D6E118CC9CDC6DA2E351AADFD9BAA8CBDD3A76D429A695160D12C923AC9CC3BACA289E193548608B82801,\n            0x606C4A02EA734CC32ACD2B02BC28B99CB3E287E85A763AF267492AB572E99AB3F370D275CEC1DA1AAA9075FF05F79BE,\n        ),\n        swu_params=SWUParams(\n            A=0x144698A3B8E9433D693A02C96D4982B0EA985383EE66A8D8E8981AEFD881AC98936F8DA0E0F97F5CF428082D584C1D,\n            B=0x12E2908D11688030018B12E8753EEE3B2016C1F0F24F4070A0B9C14FCEF35EF55A23215A316CEAA5D1CC48E98E172BE0,\n            Z=11,\n        ),\n        eigen_value=0xAC45A4010001A40200000000FFFFFFFF,\n        third_root_of_unity=0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC,\n    ),\n    SECP256K1_ID: WeierstrassCurve(\n        cairo_zero_namespace_name=\"secp256k1\",\n        id=SECP256K1_ID,\n        p=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F,\n        n=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141,\n        h=1,\n        a=0,\n        b=7,\n        fp_generator=3,\n        Gx=0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,\n        Gy=0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8,\n        swu_params=None,\n        eigen_value=0x5363AD4CC05C30E0A5261C028812645A122E22EA20816678DF02967C1B23BD72,\n        third_root_of_unity=0x7AE96A2B657C07106E64479EAC3434E99CF0497512F58995C1396C28719501EE,\n    ),\n    SECP256R1_ID: WeierstrassCurve(\n        cairo_zero_namespace_name=\"secp256r1\",\n        id=SECP256R1_ID,\n        p=0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF,\n        n=0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551,\n        h=1,\n        a=0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC,\n        b=0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B,\n        fp_generator=6,\n        Gx=0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296,\n        Gy=0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5,\n        swu_params=None,\n        eigen_value=None,\n        third_root_of_unity=None,\n    ),\n    ED25519_ID: TwistedEdwardsCurve(\n        cairo_zero_namespace_name=\"ED25519\",  # See https://neuromancer.sk/std/other/Ed25519\n        id=ED25519_ID,\n        p=0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED,\n        n=0x1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3ED,\n        h=8,\n        d_twisted=0x52036CEE2B6FFE738CC740797779E89800700A4D4141D8AB75EB4DCA135978A3,\n        a_twisted=0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC,\n        fp_generator=6,\n        Gx=0x216936D3CD6E53FEC0A4E231FDD6DC5C692CC7609525A7B2C9562D608F25D51A,\n        Gy=0x6666666666666666666666666666666666666666666666666666666666666658,\n        swu_params=None,\n        eigen_value=None,\n        third_root_of_unity=None,\n    ),\n    GRUMPKIN_ID: WeierstrassCurve(\n        cairo_zero_namespace_name=\"grumpkin\",\n        id=GRUMPKIN_ID,\n        p=0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000001,\n        n=0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD47,\n        h=1,\n        a=0,\n        b=-17 % 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000001,\n        fp_generator=5,\n        Gx=0x1,\n        Gy=0x2CF135E7506A45D632D270D45F1181294833FC48D823F272C,\n        swu_params=None,\n        eigen_value=None,\n        third_root_of_unity=None,\n    ),\n}\n\n\ndef is_generator(g: int, p: int) -> bool:\n    \"\"\"\n    Checks if a given integer g is a generator of the multiplicative group of integers modulo p.\n\n    Parameters:\n    g (int): The integer to check.\n    p (int): The prime number defining the finite field Fp.\n\n    Returns:\n    bool: True if g is a generator, False otherwise.\n\n    Raises:\n    ValueError: If p is not a prime number.\n\n    Detailed Explanation:\n    1. The order of an element g in the multiplicative group Fp* must divide p-1.\n       - The multiplicative group Fp* consists of all non-zero elements of the finite field Fp.\n       - The group has p-1 elements because there are p-1 non-zero elements in Fp.\n       - By Lagrange's theorem, the order of any element in a finite group must divide the order of the group.\n       - Therefore, the order of any element g in Fp* must divide p-1.\n    2. If g is a generator, its order must be exactly p-1.\n    3. To verify that g has order p-1, we need to ensure that g does not have any smaller order that divides p-1.\n    4. The prime factorization of p-1 gives us all the possible divisors of p-1.\n    5. By checking g^((p-1)/q) for each prime factor q of p-1, we ensure that g does not have an order that is a proper divisor of p-1.\n    6. If g passes all these checks, it must have the full order p-1, making it a generator.\n    7. This method is efficient because it reduces the problem to checking a few exponentiations rather than testing all possible orders.\n\n    Example:\n    - Let p = 7, then p-1 = 6.\n    - The prime factors of 6 are 2 and 3.\n    - To check if g is a generator, we test:\n      - g^(6/2) = g^3\n      - g^(6/3) = g^2\n    - If neither g^3 ≡ 1 (mod 7) nor g^2 ≡ 1 (mod 7), then g is a generator.\n    - This ensures that g has the full order 6, covering all elements of F7*.\n    \"\"\"\n    import sympy\n\n    # Ensure that p is a prime number\n    if not sympy.isprime(p):\n        raise ValueError(\"p must be a prime number.\")\n\n    # Calculate p - 1, which is the order of the multiplicative group of integers modulo p\n    p_minus_1 = p - 1\n\n    # Factorize p - 1 to get its prime factors and their exponents\n    # This is necessary because we will use these factors to test if g is a generator\n    factors = sympy.factorint(p_minus_1)\n\n    # Check if g is a generator\n    for q in factors.keys():\n        # For each prime factor q of p - 1, check if g^((p-1)/q) ≡ 1 (mod p)\n        # If g^((p-1)/q) ≡ 1 (mod p), then g is not a generator because it does not have the full order p-1\n        # This is based on the fact that if g is a generator, its order must be exactly p-1\n        # If g^((p-1)/q) ≡ 1 (mod p), it means the order of g divides (p-1)/q, which is less than p-1\n        if pow(g, p_minus_1 // q, p) == 1:\n            return False\n\n    # If g^((p-1)/q) ≠ 1 (mod p) for all prime factors q, then g is a generator\n    # This means g has the full order p-1 and can generate all elements of the multiplicative group\n    return True\n\n\ndef get_base_field(\n    curve_id: int | CurveID, field_type: type[PyFelt] | type[Fp2] = PyFelt\n) -> BaseField | BaseFp2Field:\n    \"\"\"\n    Returns the base field for a given elliptic curve.\n\n    Parameters:\n    curve_id (int | CurveID): The ID of the elliptic curve.\n    field_type (PyFelt | Fp2): The type of the field (default is PyFelt).\n\n    Returns:\n    BaseField | BaseFp2Field: The base field corresponding to the curve and field type.\n\n    Raises:\n    ValueError: If the field_type is invalid.\n    \"\"\"\n    if isinstance(curve_id, CurveID):\n        curve_id = curve_id.value\n\n    curve = CURVES[curve_id]\n    if field_type == PyFelt:\n        return BaseField(curve.p)\n    elif field_type == Fp2:\n        assert isinstance(curve, PairingCurve)\n        return BaseFp2Field(curve.p)\n    else:\n        raise ValueError(f\"Invalid field type: {field_type}. Expected PyFelt or Fp2.\")\n\n\ndef get_irreducible_poly(curve_id: int | CurveID, extension_degree: int) -> Polynomial:\n    if isinstance(curve_id, CurveID):\n        curve_id = curve_id.value\n    curve = CURVES[curve_id]\n    assert isinstance(curve, PairingCurve)\n    field = get_base_field(curve_id)\n    return Polynomial(\n        coefficients=[field(x) for x in curve.irreducible_polys[extension_degree]]\n    )\n\n\ndef replace_consecutive_zeros(lst):\n    result = []\n    i = 0\n    while i < len(lst):\n        if i < len(lst) - 1 and lst[i] == 0 and lst[i + 1] == 0:\n            result.append(3)  # Replace consecutive zeros with 3\n            i += 2\n        elif lst[i] == -1:\n            result.append(2)  # Replace -1 with 2\n            i += 1\n        else:\n            result.append(lst[i])\n            i += 1\n    return result\n\n\ndef recode_naf_bits(lst):\n    result = []\n    i = 0\n    while i < len(lst):\n        if i < len(lst) - 1 and lst[i] == 0 and (lst[i + 1] == 1 or lst[i + 1] == -1):\n            # \"01\" or \"0-1\"\n            if lst[i + 1] == 1:\n                result.append(3)  # Replace \"01\" with 3\n            else:\n                result.append(4)  # Replace \"0-1\" with 4\n            i += 2\n        elif i < len(lst) - 1 and (lst[i] == 1 or lst[i] == -1) and lst[i + 1] == 0:\n            # \"10\" or \"-10\"\n            if lst[i] == 1:\n                result.append(1)  # Replace 10 with 6\n            else:\n                result.append(2)  # Replace -10 with 7\n            i += 2\n        elif i < len(lst) - 1 and lst[i] == 0 and lst[i + 1] == 0:\n            result.append(0)  # Replace consecutive zeros with 0\n            i += 2\n        else:\n            raise ValueError(f\"Unexpected bit sequence at index {i}\")\n    return result\n\n\nif __name__ == \"__main__\":\n    from garaga.points import G1Point\n\n    r = recode_naf_bits(jy00(6 * 0x44E992B44A6909F1 + 2)[2:])\n    print(r, len(r))\n    from garaga.hints.io import int_to_u384\n\n    # bls = [int(x) for x in bin(0xD201000000010000)[2:]][2:]\n    # recode_naf_bits(bls)\n\n    def print_nbits_and_nG_glv_fake_glv():\n        for curve_id in CURVES:\n            curve: WeierstrassCurve = CURVES[curve_id]\n            if curve.is_endomorphism_available():\n                nbits = curve.n.bit_length() // 4 + 9\n                print(\n                    f\"Curve {curve_id}: {nbits}, {G1Point.get_nG(CurveID(curve_id), 2 ** (nbits - 1)).to_cairo_1()}\"\n                )\n\n    print_nbits_and_nG_glv_fake_glv()\n\n    def print_min_one_order():\n        for curve_id in CURVES:\n            curve: WeierstrassCurve = CURVES[curve_id]\n            print(f\"Curve {curve_id}: min_one_order: {int_to_u384(-1 % curve.n)}\")\n\n    print_min_one_order()\n\n    print()\n\n    def print_third_root_of_unity():\n        for curve_id in CURVES:\n            curve: WeierstrassCurve = CURVES[curve_id]\n            if curve.is_endomorphism_available():\n                print(\n                    f\"Curve {curve_id}: third_root_of_unity: {int_to_u384(curve.third_root_of_unity)}\"\n                )\n\n    print_third_root_of_unity()\n"
  },
  {
    "path": "hydra/garaga/drand/client.py",
    "content": "import binascii\nimport functools\nimport hashlib\nimport random\nfrom dataclasses import dataclass\nfrom enum import Enum\nfrom typing import List, Optional, Union\n\nimport requests\nfrom requests.exceptions import RequestException\n\nfrom garaga.curves import CurveID, Fp2, get_base_field\nfrom garaga.hints import io\nfrom garaga.points import G1Point, G2Point\n\n\nclass DrandNetwork(Enum):\n    default = \"8990e7a9aaed2ffed73dbd7092123d6f289930540d7651336225dc172e51b2ce\"\n    quicknet = \"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971\"\n\n\ndef digest_func(round_number: int) -> bytes:\n    assert isinstance(round_number, int)\n    assert 0 <= round_number < 2**64\n    h = hashlib.sha256()\n    h.update(round_number.to_bytes(8, byteorder=\"big\"))\n    return h.digest()\n\n\n@dataclass\nclass NetworkInfo:\n    public_key: Union[G1Point, G2Point]\n    period: int\n    genesis_time: int\n    hash: str\n    group_hash: str\n    scheme_id: str\n    beacon_id: Optional[str] = None\n\n\n@dataclass\nclass RandomnessBeacon:\n    round_number: int\n    randomness: int\n    signature: str\n    previous_signature: Optional[str] = None\n\n    @property\n    def signature_point(self) -> G1Point | G2Point:\n        return deserialize_bls_point(bytes.fromhex(self.signature))\n\n\nBASE_URLS = [\n    \"https://drand.cloudflare.com\",\n    \"https://api.drand.sh\",\n    \"https://api2.drand.sh\",\n    \"https://api3.drand.sh\",\n]\n\n\ndef make_request(endpoint: str) -> requests.Response:\n    # Create a copy and shuffle instead of random.choice for better distribution\n    base_urls = BASE_URLS.copy()\n    random.shuffle(base_urls)\n\n    last_error = None\n    for url in base_urls:\n        try:\n            response = requests.get(f\"{url}{endpoint}\", timeout=5)  # Add timeout\n            response.raise_for_status()\n            return response\n        except Exception as e:\n            print(f\"Request to {url} failed: {str(e)}\")\n            last_error = e\n            continue\n\n    raise RequestException(f\"All URLs failed. Last error: {last_error}\")\n\n\ndef deserialize_bls_point(s_string: bytes) -> Union[G1Point, G2Point]:\n    m_byte = s_string[0] & 0xE0\n    if m_byte in (0x20, 0x60, 0xE0):\n        raise ValueError(\"Invalid encoding\")\n\n    C_bit = (m_byte & 0x80) >> 7  # Compression bit\n    I_bit = (m_byte & 0x40) >> 6  # Infinity bit\n    S_bit = (m_byte & 0x20) >> 5  # Sign bit\n\n    s_string = bytes([s_string[0] & 0x1F]) + s_string[1:]\n\n    if I_bit == 1:\n        if any(b != 0 for b in s_string):\n            raise ValueError(\"Invalid encoding for point at infinity\")\n        return (\n            G1Point.infinity(CurveID.BLS12_381)\n            if len(s_string) in (48, 96)\n            else G2Point.infinity(CurveID.BLS12_381)\n        )\n\n    if C_bit == 0:\n        if len(s_string) == 96:  # G1 point (uncompressed)\n            x = int.from_bytes(s_string[:48], \"big\")\n            y = int.from_bytes(s_string[48:], \"big\")\n            return G1Point(x, y, CurveID.BLS12_381)\n        elif len(s_string) == 192:  # G2 point (uncompressed)\n            x0 = int.from_bytes(s_string[:48], \"big\")\n            x1 = int.from_bytes(s_string[48:96], \"big\")\n            y0 = int.from_bytes(s_string[96:144], \"big\")\n            y1 = int.from_bytes(s_string[144:], \"big\")\n            return G2Point((x0, x1), (y0, y1), CurveID.BLS12_381)\n        else:\n            raise ValueError(f\"Invalid length for uncompressed point: {len(s_string)}\")\n    else:  # C_bit == 1\n        x = int.from_bytes(s_string, \"big\")\n        if len(s_string) == 48:  # G1 point (compressed)\n            field = get_base_field(CurveID.BLS12_381)\n            y2 = field(x**3 + 4)\n            if S_bit == 1:\n                y = y2.sqrt(min_root=False)\n            else:\n                y = y2.sqrt(min_root=True)\n            return G1Point(x, y.value, CurveID.BLS12_381)\n        elif len(s_string) == 96:  # G2 point (compressed)\n            field = get_base_field(CurveID.BLS12_381, Fp2)\n            x = field((x & ((1 << 384) - 1), x >> 384))\n            y2 = x**3 + field((4, 4))\n            y = y2.sqrt()\n\n            if S_bit == 1:\n                # Choose largest root\n                # print(\"choose largest\")\n                if not y.lexicographically_largest():\n                    # print(\"root was not largest, negating\")\n                    y = -y\n            else:\n                # Choose smallest root\n                # print(\"choose smallest\")\n                if y.lexicographically_largest():\n                    # print(\"root was largest, negating\")\n                    y = -y\n\n            return G2Point(\n                (x.a0.value, x.a1.value),\n                (y.a0.value, y.a1.value),\n                CurveID.BLS12_381,\n            )\n        else:\n            raise ValueError(f\"Invalid length for compressed point: {len(s_string)}\")\n\n\ndef get_chains() -> List[str]:\n    response = make_request(\"/chains\")\n    all_chains = response.json()\n    # only keep chains present in DrandNetwork enum\n    chains = [\n        chain\n        for chain in all_chains\n        if chain in [network.value for network in DrandNetwork]\n    ]\n    return chains\n\n\ndef get_chain_info(chain_hash: str) -> NetworkInfo:\n    response = make_request(f\"/{chain_hash}/info\")\n    data = response.json()\n\n    # Parse the public key\n    public_key_hex = data[\"public_key\"]\n    public_key_bytes = binascii.unhexlify(public_key_hex)\n\n    try:\n        public_key = deserialize_bls_point(public_key_bytes)\n    except Exception as e:\n        public_key = G2Point.infinity(CurveID.BLS12_381)\n\n    return NetworkInfo(\n        public_key=public_key,\n        period=data[\"period\"],\n        genesis_time=data[\"genesis_time\"],\n        hash=data[\"hash\"],\n        group_hash=data[\"groupHash\"],\n        scheme_id=data[\"schemeID\"],\n        beacon_id=data.get(\"metadata\", {}).get(\"beaconID\"),\n    )\n\n\ndef get_latest_randomness(chain_hash: str) -> RandomnessBeacon:\n    response = make_request(f\"/{chain_hash}/public/latest\")\n    return _parse_randomness_beacon(response.json())\n\n\ndef get_randomness(chain_hash: str, round_number: int) -> RandomnessBeacon:\n    response = make_request(f\"/{chain_hash}/public/{round_number}\")\n    return _parse_randomness_beacon(response.json())\n\n\ndef _parse_randomness_beacon(data: dict) -> RandomnessBeacon:\n    return RandomnessBeacon(\n        round_number=io.to_int(data[\"round\"]),\n        randomness=int(data[\"randomness\"], 16),\n        signature=data[\"signature\"],\n        previous_signature=data.get(\"previous_signature\"),\n    )\n\n\n@functools.lru_cache(maxsize=None)\ndef print_all_chain_info() -> dict[DrandNetwork, NetworkInfo]:\n    # Try multiple times to get chains\n    max_retries = 3\n    for attempt in range(max_retries):\n        try:\n            chains = get_chains()\n            if not chains:\n                raise ValueError(\"No chains returned\")\n\n            print(f\"Found {len(chains)} chains: {chains}\")\n            print(\"-\" * 40)\n\n            chain_infos = {}\n            expected_networks = set(DrandNetwork)\n\n            for chain_hash in chains:\n                try:\n                    info = get_chain_info(chain_hash)\n                    try:\n                        network = DrandNetwork(chain_hash)\n                        chain_infos[network] = info\n                        expected_networks.remove(network)\n\n                        print(f\"Chain: {chain_hash}\")\n                        print(f\"  Public Key: {info.public_key}\")\n                        print(f\"  Period: {info.period} seconds\")\n                        print(f\"  Genesis Time: {info.genesis_time}\")\n                        print(f\"  Hash: {info.hash}\")\n                        print(f\"  Group Hash: {info.group_hash}\")\n                        print(f\"  Scheme ID: {info.scheme_id}\")\n                        if info.beacon_id:\n                            print(f\"  Beacon ID: {info.beacon_id}\")\n                        print(\"-\" * 40)\n                    except ValueError:\n                        print(f\"Unknown chain hash: {chain_hash}\")\n                        continue\n                except Exception as e:\n                    print(f\"Error fetching info for chain {chain_hash}: {str(e)}\")\n                    continue\n\n            # If we found all expected networks, return the results\n            if not expected_networks:\n                return chain_infos\n\n            print(f\"Missing networks: {[n.name for n in expected_networks]}\")\n\n        except Exception as e:\n            print(f\"Attempt {attempt + 1}/{max_retries} failed: {str(e)}\")\n            if attempt < max_retries - 1:\n                print(\"Retrying...\")\n                continue\n\n    raise RuntimeError(\n        f\"Failed to get complete chain info after {max_retries} attempts\"\n    )\n\n\n# Example usage\nif __name__ == \"__main__\":\n    chain_infos = print_all_chain_info()\n    from garaga.modulo_circuit_structs import StructArray\n    from garaga.signature import hash_to_curve\n\n    # latest_randomness = get_latest_randomness(chain_infos[DrandNetwork.default].hash)\n    # print(\"Latest randomness:\", latest_randomness)\n    network = DrandNetwork.quicknet\n    chain = chain_infos[network]\n    print(chain.public_key)\n    print(-chain.public_key)\n\n    round = get_randomness(chain.hash, 1000)\n    print(\"Randomness for round 1000:\", round)\n    sha256 = hashlib.sha256()\n    sha256.update(bytes.fromhex(round.signature))\n    print(\"randomness\", sha256.hexdigest())\n    print(\"random beacon\", hex(round.randomness))\n\n    msg_point = hash_to_curve(\n        digest_func(round.round_number), CurveID.BLS12_381, \"sha256\"\n    )\n    print(\"message\", msg_point)\n\n    from garaga.modulo_circuit_structs import G2Line, StructArray\n    from garaga.points import G1G2Pair\n    from garaga.precompiled_circuits.multi_miller_loop import precompute_lines\n\n    print(\n        \"pairing\",\n        G1G2Pair.pair(\n            [\n                G1G2Pair(\n                    p=round.signature_point, q=G2Point.get_nG(CurveID.BLS12_381, 1)\n                ),\n                G1G2Pair(p=msg_point, q=-chain.public_key),\n            ],\n            curve_id=CurveID.BLS12_381,\n        ).value_coeffs,\n    )\n\n    lines = precompute_lines([G2Point.get_nG(CurveID.BLS12_381, 1), -chain.public_key])\n    precomputed_lines = StructArray(\n        name=\"lines\",\n        elmts=[\n            G2Line(name=f\"line{i}\", elmts=lines[i : i + 4])\n            for i in range(0, len(lines), 4)\n        ],\n    )\n\n    def generate_precomputed_lines_code(precomputed_lines: StructArray) -> str:\n        return f\"pub const precomputed_lines: [G2Line<u384>; {len(precomputed_lines)//4}] = {precomputed_lines.serialize(raw=True, const=True)};\"\n\n    # print(generate_precomputed_lines_code(precomputed_lines))\n"
  },
  {
    "path": "hydra/garaga/drand/tlock.py",
    "content": "import hashlib\nimport secrets\nfrom dataclasses import dataclass\nfrom typing import Optional\n\nfrom garaga.curves import CURVES, CurveID\nfrom garaga.drand.client import DrandNetwork, digest_func\nfrom garaga.hints import io\nfrom garaga.hints.tower_backup import E12\nfrom garaga.points import G1G2Pair, G1Point, G2Point\nfrom garaga.signature import hash_to_curve\n\n\n@dataclass\nclass CipherText:\n    U: G2Point\n    V: bytes\n    W: bytes\n\n    def __post_init__(self):\n        assert len(self.V) == len(self.W) == 16\n\n    def serialize_to_cairo(self):\n        code = f\"\"\"CipherText {{\n        U: {self.U.serialize_to_cairo(name=\"U\", raw=True)},\n        V: [{', '.join(f'0x{b:02x}' for b in self.V)}],\n        W: [{', '.join(f'0x{b:02x}' for b in self.W)}],\n        }}\n        \"\"\"\n        return code\n\n    def serialize_to_calldata(self) -> list[int]:\n        cd = []\n        cd.extend(io.bigint_split(self.U.x[0]))\n        cd.extend(io.bigint_split(self.U.x[1]))\n        cd.extend(io.bigint_split(self.U.y[0]))\n        cd.extend(io.bigint_split(self.U.y[1]))\n        for b in self.V:\n            cd.append(b)\n        for b in self.W:\n            cd.append(b)\n        return cd\n\n\ndef encrypt_for_round(\n    drand_public_key: G2Point,\n    round: int,\n    message: bytes,\n    debug: bool = False,\n    fixed_sigma: Optional[bytes] = None,\n) -> CipherText:\n    assert len(message) == 16, f\"Message should be 16 bytes: {len(message)}\"\n    assert (\n        fixed_sigma is None or len(fixed_sigma) == 16\n    ), f\"Fixed sigma should be 16 bytes: {len(fixed_sigma)}\"\n\n    msg_at_round = digest_func(round)\n    # print(f\"msg_at_round list of ints: {list(msg_at_round)}\")\n    pt_at_round = hash_to_curve(msg_at_round, CurveID.BLS12_381)\n\n    gid: E12 = G1G2Pair.pair([G1G2Pair(p=pt_at_round, q=drand_public_key)])\n\n    if debug:\n        # Use a fixed sigma for debugging:\n        sigma = b\"0000000000000000\" if fixed_sigma is None else fixed_sigma\n    else:\n        sigma: bytes = secrets.token_bytes(16)\n\n    assert len(sigma) == 16\n\n    hasher = hashlib.sha256()\n    hasher.update(b\"IBE-H3\")\n    hasher.update(sigma)\n    hasher.update(message)\n    r = int.from_bytes(expand_message_drand(hasher.digest(), 32), \"little\")\n    # print(f\"r list of ints: {r}\")\n    r = r % CURVES[CurveID.BLS12_381.value].n\n\n    # U = r * G2\n    U = G2Point.get_nG(CurveID.BLS12_381, r)\n\n    # print(f\"U: {U}\")\n    # V = sigma XOR H (rGid)\n    rGid: E12 = gid**r\n\n    # print(f\"rGid: {rGid.value_coeffs}\")\n\n    rgid_serialized = rGid.serialize()\n    # Print bytes as hex strings:\n    # print(f\"rGid hex : {rgid_serialized.hex()}\")\n    # print(f\"rGid serialized: {list(rgid_serialized)} len: {len(rgid_serialized)}\")\n    rgid_hash = hashlib.sha256()\n    rgid_hash.update(b\"IBE-H2\")\n    rgid_hash.update(rgid_serialized)\n    rgid_hash = rgid_hash.digest()\n    # Take first 16 bytes only :\n    rgid_hash = rgid_hash[:16]\n    # print(f\"rgid_hash hex: {rgid_hash.hex()}\")\n\n    V = bytes([a ^ b for a, b in zip(sigma, rgid_hash)])\n    # print(f\"V hex: {V.hex()}\")\n\n    # 6. Compute W = M XOR H(sigma)\n    W = bytes([a ^ b for a, b in zip(message, rgid_hash)])\n    sigma_hash = hashlib.sha256()\n    sigma_hash.update(b\"IBE-H4\")\n    sigma_hash.update(sigma)\n    sigma_hash = sigma_hash.digest()[:16]  # First 16 bytes only\n    # print(f\"sigma_hash hex: {sigma_hash.hex()}\")\n    W = bytes([a ^ b for a, b in zip(message, sigma_hash)])\n    # print(f\"W hex: {W.hex()}\")\n\n    return CipherText(U, V, W)\n\n\ndef decrypt_at_round(signature_at_round: G1Point, c: CipherText):\n    # 1. Compute sigma = V XOR H2(e(rP,Sig))\n\n    r_gid: E12 = G1G2Pair.pair([G1G2Pair(p=signature_at_round, q=c.U)])\n    # for i, v in enumerate(r_gid.value_coeffs):\n    #     print(f\"rgid_{i}: {io.int_to_u384(v, as_hex=False)}\")\n    r_gid_serialized = r_gid.serialize()\n    rgid_hash = hashlib.sha256()\n\n    pre_image = bytearray(b\"IBE-H2\")\n    pre_image.extend(r_gid_serialized)\n    rgid_hash.update(pre_image)\n\n    # for i in range(0, len(pre_image), 4):\n    #     print(f\"pre_image[{i}:{i+4}]: {pre_image[i:i+4].hex()}\")\n\n    rgid_hash = rgid_hash.digest()\n\n    rgid_hash = rgid_hash[:16]  # First 16 bytes only\n\n    sigma = bytes([a ^ b for a, b in zip(c.V, rgid_hash)])\n\n    # print(f\"sigma hex: {sigma.hex()}\")\n\n    # 2. Compute Msg = W XOR H4(sigma)\n    sigma_hash = hashlib.sha256()\n    sigma_hash.update(b\"IBE-H4\")\n    sigma_hash.update(sigma)\n    sigma_hash = sigma_hash.digest()[:16]  # First 16 bytes only\n\n    message = bytes([a ^ b for a, b in zip(c.W, sigma_hash)])\n    # print(f\"message utf-8: {message.decode('utf-8')}\")\n\n    # 3. Check U = G^r\n\n    rh = hashlib.sha256()\n    rh.update(b\"IBE-H3\")\n    rh.update(sigma)\n    rh.update(message)\n    rh = rh.digest()\n    rh = expand_message_drand(rh, 32)\n\n    r = int.from_bytes(rh, \"little\")\n    r = r % CURVES[CurveID.BLS12_381.value].n\n    U = G2Point.get_nG(CurveID.BLS12_381, r)\n    assert U == c.U\n    return message\n\n\ndef expand_message_drand(msg: bytes, buf_size: int) -> bytes:\n    BITS_TO_MASK_FOR_BLS12381 = 1\n    order = CURVES[CurveID.BLS12_381.value].n\n    for i in range(1, 65536):  # u16::MAX is 65535\n        # Hash iteratively: H(i || msg)\n        h = hashlib.sha256()\n        pre_image = bytearray(i.to_bytes(2, byteorder=\"little\"))\n        pre_image.extend(msg)\n        h.update(pre_image)\n        hash_result = bytearray(h.digest())\n        # Mask the first byte\n        hash_result[0] >>= BITS_TO_MASK_FOR_BLS12381\n\n        reversed_hash = hash_result[::-1]\n\n        scalar = int.from_bytes(reversed_hash, \"little\") % order\n        if scalar != 0:\n            return reversed_hash[:buf_size]\n\n    raise ValueError(\n        \"You are insanely unlucky and should have been hit by a meteor before now\"\n    )\n\n\ndef write_cairo1_test(msg: bytes, round: int, network: DrandNetwork):\n    chain_infos = print_all_chain_info()\n    chain = chain_infos[network]\n    master = chain.public_key\n    ciphertext: CipherText = encrypt_for_round(master, round, msg, debug=True)\n\n    signature_at_round = get_randomness(chain.hash, round).signature_point\n    _ = decrypt_at_round(signature_at_round, ciphertext)\n\n    comment_with_params_used = f\"\"\"\n    // msg: {msg}\n    // round: {round}\n    // network: {network}\n    \"\"\"\n    code = f\"\"\"\n    #[test]\n    fn test_decrypt_at_round() {{\n    {comment_with_params_used}\n    {signature_at_round.serialize_to_cairo(name=\"signature_at_round\")}\n    let ciph = {ciphertext.serialize_to_cairo()};\n    let msg_decrypted = decrypt_at_round(signature_at_round, ciph);\n    assert(msg_decrypted.span() == [{', '.join(f'0x{b:02x}' for b in msg)}].span(), 'wrong msg');\n    }}\n    \"\"\"\n    return code\n\n\nif __name__ == \"__main__\":\n    from garaga.drand.client import DrandNetwork, get_randomness, print_all_chain_info\n\n    # chain_infos = print_all_chain_info()\n    network = DrandNetwork.quicknet\n    # chain = chain_infos[network]\n\n    # master = chain.public_key\n\n    round = 128\n\n    msg = b\"hello\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00abc\"\n    # ciph = encrypt_for_round(master, round, msg)\n\n    # # print(f\"CipherText: {ciph}\")\n\n    # # print(f\"V : {list(ciph.V)}\")\n    # # print(f\"W : {list(ciph.W)}\")\n\n    # chain = chain_infos[network]\n    # beacon = get_randomness(chain.hash, round)\n    # signature_at_round = beacon.signature_point\n\n    # print(f\"signature_at_round: {signature_at_round}\")\n    # msg_decrypted = decrypt_at_round(signature_at_round, ciph)\n    # assert msg_decrypted == msg\n\n    # print(f\"msg utf-8: {msg.decode('utf-8')}\")\n    # print(f\"msg_decrypted utf-8: {msg_decrypted.decode('utf-8')}\")\n\n    code = write_cairo1_test(msg, round, network)\n\n    print(code)\n"
  },
  {
    "path": "hydra/garaga/extension_field_modulo_circuit.py",
    "content": "from dataclasses import dataclass, field\nfrom enum import Enum\n\nfrom garaga.algebra import Polynomial, PyFelt\nfrom garaga.curves import N_LIMBS, get_irreducible_poly\nfrom garaga.hints.extf_mul import (\n    nondeterministic_extension_field_div,\n    nondeterministic_extension_field_mul_divmod,\n)\nfrom garaga.modulo_circuit import BATCH_SIZE, ModuloCircuitElement, WriteOps\nfrom garaga.poseidon_transcript import CairoPoseidonTranscript\nfrom garaga.precompiled_circuits.fp2 import Fp2Circuits\n\nPOSEIDON_BUILTIN_SIZE = 6\nPOSEIDON_OUTPUT_S1_INDEX = 4\n\n\n# Represents the state of the accumulation of the equation\n#  c_i * Π(Pi(z)) = c_i*Q_i*P + c_i*R_i inside the circuit.\n# Only store ci*Π(Pi(z)) (as Emulated Field Element) and ci*R_i (as Polynomial)\n@dataclass(slots=True)\nclass EuclideanPolyAccumulator:\n    lhs: ModuloCircuitElement\n    R: list[ModuloCircuitElement]\n    R_evaluated: ModuloCircuitElement\n\n\nclass AccPolyInstructionType(Enum):\n    MUL = \"MUL\"\n    DIV = \"DIV\"\n    SQUARE_TORUS = \"SQUARE_TORUS\"\n\n\n@dataclass(slots=True)\nclass AccumulatePolyInstructions:\n    Pis: list[list[list[ModuloCircuitElement]]] = field(default_factory=list)\n    Qis: list[Polynomial] = field(default_factory=list)\n    Ris: list[list[ModuloCircuitElement]] = field(default_factory=list)\n    Ps_sparsities: list[None | list[list[int]]] = field(default_factory=list)\n    r_sparsities: list[None | list[int]] = field(default_factory=list)\n    types: list[AccPolyInstructionType] = field(default_factory=list)\n    n: int = field(default=0)\n    rlc_coeffs: list[ModuloCircuitElement] = field(default_factory=list)\n    Pis_of_Z: list[ModuloCircuitElement] = field(default_factory=list)\n\n    def append(\n        self,\n        type: AccPolyInstructionType,\n        Pis: list[list[ModuloCircuitElement]],\n        Q: Polynomial,\n        R: list[ModuloCircuitElement],\n        Ps_sparsities: None | list[list[int] | None] = None,\n        r_sparsity: None | list[int] = None,\n    ):\n        if type != AccPolyInstructionType.MUL:\n            assert len(Pis) == 2\n        self.types.append(type)\n        self.Pis.append(Pis)\n        self.Qis.append(Q)\n        self.Ris.append(R)\n        self.Ps_sparsities.append(Ps_sparsities)\n        self.r_sparsities.append(r_sparsity)\n        self.n += 1\n\n\nclass ExtensionFieldModuloCircuit(Fp2Circuits):\n    def __init__(\n        self,\n        name: str,\n        curve_id: int,\n        extension_degree: int,\n        init_hash: int = None,\n        hash_input: bool = True,\n        compilation_mode: int = 0,\n        generic_circuit: bool = False,\n    ) -> None:\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            compilation_mode=compilation_mode,\n            generic_circuit=generic_circuit,\n        )\n        self.class_name = \"ExtensionFieldModuloCircuit\"\n        self.extension_degree = extension_degree\n        self.z_powers: list[ModuloCircuitElement] = []\n        self.acc: list[EuclideanPolyAccumulator] = [\n            self._init_accumulator(self.extension_degree),\n            self._init_accumulator(self.extension_degree * 2),\n        ]\n        self.hash_input = hash_input\n        self.transcript: CairoPoseidonTranscript = CairoPoseidonTranscript(\n            init_hash=(\n                int.from_bytes(self.name.encode(), \"big\")\n                if init_hash is None\n                else init_hash\n            )\n        )\n        self.z_powers: list[ModuloCircuitElement] = []\n        self.ops_counter = {\n            \"Circuit\": self.name,\n            \"EXTF_SQUARE\": 0,\n            \"EXTF_MUL_DENSE\": 0,\n            # \"EXTF_DIV\": 0,\n        }\n        self.accumulate_poly_instructions: list[AccumulatePolyInstructions] = [\n            AccumulatePolyInstructions(),\n            AccumulatePolyInstructions(),\n        ]\n\n    def _init_accumulator(self, extension_degree: int = None):\n        extension_degree = extension_degree or self.extension_degree\n        # Todo : Add compilation mode 1 support\n        if self.compilation_mode == 1:\n            return EuclideanPolyAccumulator(\n                lhs=None,\n                R=[None] * extension_degree,\n                R_evaluated=None,\n            )\n        else:\n            return EuclideanPolyAccumulator(\n                lhs=self.set_or_get_constant(0),\n                R=[None] * extension_degree,\n                R_evaluated=self.set_or_get_constant(0),\n            )\n\n    @property\n    def commitments(self):\n        return [\n            self.values_segment.segment_stacks[WriteOps.COMMIT][offset].felt\n            for offset in sorted(self.values_segment.segment_stacks[WriteOps.COMMIT])\n        ]\n\n    @property\n    def circuit_input(self):\n        return [\n            self.values_segment.segment_stacks[WriteOps.INPUT][offset].felt\n            for offset in sorted(self.values_segment.segment_stacks[WriteOps.INPUT])\n        ]\n\n    def create_lines_z_powers(self, z: PyFelt, add_extf_power: bool = False):\n        \"\"\"\n        Create powers of z for the evaluation of lines functions and the irreducible polynomial if add_extf_power is True.\n        \"\"\"\n        powers = [z]  # z^1 at index 0\n        if self.curve_id == 0:\n            powers.append(self.square(z, \"compute z^2\"))  # z^2 at index 1\n            powers.append(self.mul(powers[-1], z, \"compute z^3\"))  # z^3 at index 2\n            powers.append(None)  # No z^4 at index 3\n            powers.append(None)  # No z^5 at index 4\n            powers.append(self.square(powers[2], \"compute z^6\"))  # z^6 at index 5\n            powers.append(self.mul(powers[5], z, \"compute z^7\"))  # z^7 at index 6\n            powers.append(None)  # No z^8 at index 7\n            powers.append(\n                self.mul(powers[6], powers[1], \"compute z^9\")\n            )  # z^9 at index 8\n            if add_extf_power:\n                # Need to add z^12 :\n                # z^12 = z^9 * z^3\n                powers.append(None)  # No z^10 at index 9\n                powers.append(None)  # No z^11 at index 10\n                powers.append(self.mul(powers[8], powers[2], \"compute z^12\"))\n            self.z_powers = powers\n\n        elif self.curve_id == 1:\n            # Need z^2, z^3, z^6, Z^8:\n            powers.append(self.square(z, \"compute z^2\"))  # z^2 at index 1\n            powers.append(self.mul(powers[-1], z, \"compute z^3\"))  # z^3 at index 2\n            powers.append(None)  # No z^4 at index 3\n            powers.append(None)  # No z^5 at index 4\n            powers.append(self.square(powers[2], \"compute z^6\"))  # z^6 at index 5\n            powers.append(None)  # No z^7 at index 6\n            powers.append(\n                self.mul(powers[5], powers[1], \"compute z^8\")\n            )  # z^8 at index 7\n            self.z_powers = powers\n            if add_extf_power:\n                # Need to add z^12 :\n                # z^12 = z^7 * z^5\n                powers.append(None)  # No z^9 at index 8\n                powers.append(None)  # No z^10 at index 9\n                powers.append(None)  # No z^11 at index 10\n                powers.append(self.mul(powers[7], powers[4], \"compute z^12\"))\n        else:\n            raise ValueError(f\"Invalid curve id: {self.curve_id}\")\n\n    def create_powers_of_Z(\n        self,\n        Z: PyFelt | ModuloCircuitElement,\n        max_degree: int = None,\n    ) -> list[ModuloCircuitElement]:\n        if max_degree is None:\n            max_degree = self.extension_degree\n        if isinstance(Z, PyFelt):\n            Z = self.write_cairo_native_felt(Z)\n        elif isinstance(Z, int):\n            Z = self.write_cairo_native_felt(self.field(Z))\n        elif isinstance(Z, ModuloCircuitElement):\n            pass\n        else:\n            raise ValueError(f\"Invalid type for Z: {type(Z)}\")\n        powers = [Z]\n\n        for i in range(2, max_degree + 1):\n            powers.append(self.mul(powers[-1], powers[0], comment=f\"Compute z^{i}\"))\n\n        self.z_powers = powers\n        return powers\n\n    def eval_poly_in_precomputed_Z(\n        self,\n        X: list[ModuloCircuitElement],\n        sparsity: list[int] = None,\n        poly_name: str = None,\n    ) -> ModuloCircuitElement:\n        \"\"\"\n        Evaluates a polynomial with coefficients `X` at precomputed powers of z.\n        X(z) = X_0 + X_1 * z + X_2 * z^2 + ... + X_n * z^n\n\n        If a `sparsity` list is provided, it is used to optimize the evaluation by skipping\n        zero coefficients and applying special handling based on sparsity values:\n        - A sparsity value of 0 indicates that the corresponding coefficient X_i is zero and should be skipped.\n        - A sparsity value of 1 indicates that the corresponding coefficient X_i is non-zero and should be included in the evaluation.\n        - A sparsity value of 2 indicates a special case where the term is directly a power of z, implying the coefficient X_i is 1 in this case.\n\n        Parameters:\n        - X: list[ModuloCircuitElement] - The coefficients of the polynomial to be evaluated.\n        - sparsity: list[int] (optional) - A list indicating the sparsity of the polynomial. If None, the polynomial is treated as fully dense.\n\n        Returns:\n        - ModuloCircuitElement: The result of evaluating the polynomial at the precomputed powers of z.\n        \"\"\"\n        if poly_name is None:\n            poly_name = \"UnnamedPoly\"\n\n        if sparsity:\n            first_non_zero_idx = next(\n                (i for i, x in enumerate(sparsity) if x != 0), None\n            )\n            if first_non_zero_idx == 0:\n                match sparsity[0]:\n                    case 0:\n                        X_of_z = self.set_or_get_constant(0)\n                    case 1:\n                        X_of_z = X[0]\n                    case 2:\n                        X_of_z = self.set_or_get_constant(1)\n                    case _:\n                        raise ValueError(f\"Invalid sparsity value: {sparsity[0]}\")\n            else:\n                match sparsity[first_non_zero_idx]:\n                    case 0:\n                        X_of_z = self.set_or_get_constant(0)\n                    case 1:\n                        X_of_z = self.mul(\n                            X[first_non_zero_idx],\n                            self.z_powers[first_non_zero_idx - 1],\n                            comment=f\"Eval sparse poly {poly_name} step coeff_{first_non_zero_idx} * z^{first_non_zero_idx}\",\n                        )\n                    case 2:\n                        X_of_z = self.z_powers[first_non_zero_idx - 1]\n                    case _:\n                        raise ValueError(f\"Invalid sparsity value: {sparsity[0]}\")\n\n            for i in range(first_non_zero_idx + 1, len(X)):\n                match sparsity[i]:\n                    case 1:\n                        term = self.mul(\n                            X[i],\n                            self.z_powers[i - 1],\n                            comment=f\"Eval sparse poly {poly_name} step coeff_{i} * z^{i}\",\n                        )\n                        add_comment = (\n                            f\"Eval sparse poly {poly_name} step + coeff_{i} * z^{i}\"\n                        )\n                    case 2:\n                        term = self.z_powers[\n                            i - 1\n                        ]  # In this case, sparsity[i] == 2 => X[i] = 1\n                        add_comment = f\"Eval sparse poly {poly_name} step + 1*z^{i}\"\n                    case 0:\n                        continue\n                    case _:\n                        raise ValueError(f\"Invalid sparsity value: {sparsity[i]}\")\n                X_of_z = self.add(\n                    X_of_z,\n                    term,\n                    comment=add_comment,\n                )\n        else:\n            X_of_z = self.eval_poly(X, self.z_powers, poly_name, \"z\")\n\n        return X_of_z\n\n    def extf_mul(\n        self,\n        Ps: list[list[ModuloCircuitElement]],\n        extension_degree: int,\n        Ps_sparsities: list[list[int] | None] = None,\n        r_sparsity: list[int] = None,\n        acc_index: int = 0,\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Multiply in the extension field X * Y mod irreducible_poly\n        Commit to R and add an EvalPolyInstruction to the accumulator.\n        \"\"\"\n        assert (\n            extension_degree > 2\n        ), f\"extension_degree={extension_degree} <= 2. Use self.mul or self.fp2_square instead.\"\n\n        if Ps_sparsities is None:\n            Ps_sparsities = [None] * len(Ps)\n        assert len(Ps_sparsities) == len(\n            Ps\n        ), f\"len(Ps_sparsities)={len(Ps_sparsities)} != len(Ps)={len(Ps)}\"\n\n        Q, R = nondeterministic_extension_field_mul_divmod(\n            Ps, self.curve_id, extension_degree\n        )\n\n        R = self.write_elements(R, WriteOps.COMMIT, r_sparsity)\n\n        if not any(sparsity for sparsity in Ps_sparsities) or not r_sparsity:\n            self.ops_counter[\"EXTF_MUL_DENSE\"] += 1\n\n        self.accumulate_poly_instructions[acc_index].append(\n            AccPolyInstructionType.MUL,\n            Ps,\n            Polynomial(Q),\n            R,\n            Ps_sparsities,\n            r_sparsity,\n        )\n        return R\n\n    def extf_div(\n        self,\n        X: list[ModuloCircuitElement],\n        Y: list[ModuloCircuitElement],\n        extension_degree: int,\n        acc_index: int = 0,\n    ) -> list[ModuloCircuitElement]:\n        x_over_y = nondeterministic_extension_field_div(\n            X, Y, self.curve_id, extension_degree\n        )\n        x_over_y = self.write_elements(x_over_y, WriteOps.COMMIT)\n\n        Q, _ = nondeterministic_extension_field_mul_divmod(\n            [x_over_y, Y], self.curve_id, extension_degree\n        )\n        # R should be X\n        Q = Polynomial(Q)\n        self.accumulate_poly_instructions[acc_index].append(\n            AccPolyInstructionType.DIV, Pis=[x_over_y, Y], Q=Q, R=X\n        )\n        return x_over_y\n\n    def extf_inv(\n        self,\n        Y: list[ModuloCircuitElement],\n        extension_degree: int,\n        acc_index: int = 0,\n    ) -> list[ModuloCircuitElement]:\n        one = [ModuloCircuitElement(self.field(1), -1)] + [\n            ModuloCircuitElement(self.field(0), -1)\n        ] * (extension_degree - 1)\n        y_inv = nondeterministic_extension_field_div(\n            one,\n            Y,\n            self.curve_id,\n            extension_degree,\n        )\n        y_inv = self.write_elements(y_inv, WriteOps.COMMIT)\n\n        Q, _ = nondeterministic_extension_field_mul_divmod(\n            [y_inv, Y], self.curve_id, extension_degree\n        )\n        # R should be One. Passed at mocked modulo circuits element since fully determined by its sparsity.\n        Q = Polynomial(Q)\n        self.accumulate_poly_instructions[acc_index].append(\n            AccPolyInstructionType.DIV,\n            Pis=[y_inv, Y],\n            Q=Q,\n            R=one,\n            r_sparsity=[2] + [0] * (extension_degree - 1),\n        )\n        return y_inv\n\n    def conjugate_e12d(\n        self, e12d: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        assert len(e12d) == 12\n        return [\n            e12d[0],\n            self.neg(e12d[1]),\n            e12d[2],\n            self.neg(e12d[3]),\n            e12d[4],\n            self.neg(e12d[5]),\n            e12d[6],\n            self.neg(e12d[7]),\n            e12d[8],\n            self.neg(e12d[9]),\n            e12d[10],\n            self.neg(e12d[11]),\n        ]\n\n    def update_LHS_state(\n        self,\n        s1: PyFelt,\n        Ps: list[list[ModuloCircuitElement]],\n        Ps_sparsities: list[list[int] | None] = None,\n        acc_index: int = 0,\n    ):\n        # Sanity checks for sparsities\n        Ps_sparsities = Ps_sparsities or [None] * len(Ps)\n        assert len(Ps_sparsities) == len(\n            Ps\n        ), f\"len(Ps_sparsities)={len(Ps_sparsities)} != len(Ps)={len(Ps)}\"\n        for i, sparsity in enumerate(Ps_sparsities):\n            if sparsity:\n                assert all(\n                    Ps[i][j].value == 0 for j in range(len(Ps[i])) if sparsity[j] == 0\n                )\n                assert all(\n                    Ps[i][j].value == 1 for j in range(len(Ps[i])) if sparsity[j] == 2\n                )\n\n        # Evaluate LHS = Π(Pi(z)) inside circuit.\n        # i=0\n        LHS = self.eval_poly_in_precomputed_Z(Ps[0], Ps_sparsities[0])\n        LHS_current_eval = LHS\n        # Keep P0(z)\n        self.accumulate_poly_instructions[acc_index].Pis_of_Z.append([])\n        self.accumulate_poly_instructions[acc_index].Pis_of_Z[-1].append(LHS)\n        for i in range(1, len(Ps)):\n            if Ps[i - 1] == Ps[i]:\n                # Consecutives elements are the same : retrieve previous evaluation.\n                LHS_current_eval = self.accumulate_poly_instructions[\n                    acc_index\n                ].Pis_of_Z[-1][-1]\n\n                # Todo : support smarter analysis to save a few muls\n\n            else:\n                LHS_current_eval = self.eval_poly_in_precomputed_Z(\n                    Ps[i], Ps_sparsities[i]\n                )\n            # Keep Pi(z)\n            self.accumulate_poly_instructions[acc_index].Pis_of_Z[-1].append(\n                LHS_current_eval\n            )\n            # Update LHS\n            LHS = self.mul(LHS, LHS_current_eval)\n\n        ci_XY_of_z = self.mul(s1, LHS, \"ci_XY_of_z\")\n\n        LHS_acc = self.add(self.acc[acc_index].lhs, ci_XY_of_z, \"LHS_acc\")\n\n        # Update LHS only.\n        self.acc[acc_index] = EuclideanPolyAccumulator(\n            lhs=LHS_acc,\n            R=self.acc[acc_index].R,\n            R_evaluated=self.acc[acc_index].R_evaluated,\n        )\n\n        return\n\n    def update_RHS_state(\n        self,\n        type: AccPolyInstructionType,\n        s1: ModuloCircuitElement,\n        R: list[ModuloCircuitElement],\n        r_sparsity: list[int] = None,\n        acc_index: int = 0,\n        instruction_index: int = 0,\n    ):\n\n        # Find if R_of_z is already computed in the first Pi of the next instruction.\n        # In this case we avoid accumulating R as polynomial and can use directly R_of_z with the correct s1.\n        if type != AccPolyInstructionType.SQUARE_TORUS:\n            if instruction_index + 1 < self.accumulate_poly_instructions[acc_index].n:\n                if (\n                    self.accumulate_poly_instructions[acc_index].Pis[\n                        instruction_index + 1\n                    ][0]\n                    == R\n                ):\n                    already_computed_R_of_z = self.accumulate_poly_instructions[\n                        acc_index\n                    ].Pis_of_Z[instruction_index + 1][0]\n\n                    # Update direclty Rhs_evaluted\n                    self.acc[acc_index] = EuclideanPolyAccumulator(\n                        lhs=self.acc[acc_index].lhs,\n                        R=self.acc[acc_index].R,\n                        R_evaluated=self.add(\n                            self.acc[acc_index].R_evaluated,\n                            self.mul(s1, already_computed_R_of_z),\n                        ),\n                    )\n                    return\n\n        # If not found, computes R_acc = R_acc + s1 * R as a Polynomial inside circuit\n        if r_sparsity:\n            if type != AccPolyInstructionType.SQUARE_TORUS:\n                # Sanity check is already done in square_torus function.\n                # If the instruction is SQUARE_TORUS, then R is fully determined by its sparsity, R(x) = x.\n                # Actual R value here is the SQ TORUS result.\n                # See square torus function for this edge case.\n                assert all(R[i].value == 0 for i in range(len(R)) if r_sparsity[i] == 0)\n            R_acc = []\n            for i, (r_acc, r) in enumerate(zip(self.acc[acc_index].R, R)):\n                match r_sparsity[i]:\n                    case 1:\n                        R_acc.append(self.add(r_acc, self.mul(s1, r)))\n                    case 2:\n                        R_acc.append(self.add(r_acc, s1))\n                    case _:\n                        R_acc.append(r_acc)\n\n        else:\n            # Computes R_acc = R_acc + s1 * R without sparsity info.\n            R_acc = [\n                self.add(r_acc, self.mul(s1, r))\n                for r_acc, r in zip(self.acc[acc_index].R, R)\n            ]\n        # Update accumulator state\n        self.acc[acc_index] = EuclideanPolyAccumulator(\n            lhs=self.acc[acc_index].lhs,\n            R=R_acc,\n            R_evaluated=self.acc[acc_index].R_evaluated,\n        )\n        return\n\n    def finalize_circuit(\n        self,\n        extension_degree: int = None,\n    ):\n        ######### Flags #########\n        extension_degree = extension_degree or self.extension_degree\n        double_extension = self.accumulate_poly_instructions[1].n > 0\n        acc_indexes = [0, 1] if double_extension else [0]\n        #########################\n\n        ################ Get base rlc coefficient c0 ################\n        if self.hash_input:\n            self.transcript.hash_limbs_multi(self.circuit_input)\n        self.transcript.hash_limbs_multi(self.commitments)\n\n        c0 = self.write_cairo_native_felt(self.field(self.transcript.s1))\n        ##################################################################\n        ################ Compute Qs ################\n        Qs = [Polynomial([self.field.zero()]) for _ in range(2)]\n\n        for acc_index in acc_indexes:\n            self.accumulate_poly_instructions[acc_index].rlc_coeffs.append(c0)\n            # Computes Q = Σ(ci * Qi)\n            Qs[acc_index] = self.accumulate_poly_instructions[acc_index].Qis[0] * c0\n            for i in range(1, self.accumulate_poly_instructions[acc_index].n):\n                self.accumulate_poly_instructions[acc_index].rlc_coeffs.append(\n                    self.mul(\n                        self.accumulate_poly_instructions[acc_index].rlc_coeffs[i - 1],\n                        c0,\n                    )\n                )\n                Qs[acc_index] += (\n                    self.accumulate_poly_instructions[acc_index].Qis[i]\n                    * self.accumulate_poly_instructions[acc_index].rlc_coeffs[i]\n                )\n            Qs[acc_index] = Qs[acc_index].get_coeffs()\n            # Extend Q with zeros if needed to match the minimal expected degree.\n            Qs[acc_index] = Qs[acc_index] + [self.field.zero()] * (\n                (acc_index + 1) * extension_degree - 1 - len(Qs[acc_index])\n            )\n        ##################################################################\n\n        Q = [self.write_elements(Qs[0], WriteOps.COMMIT)]\n\n        compute_z_up_to = max(max(len(Qs[0]), len(Qs[1])) - 1, extension_degree)\n        self.big_q_len = len(Q[0])\n\n        self.transcript.hash_limbs_multi(Q[0])\n        if double_extension:\n            Q.append(self.write_elements(Qs[1], WriteOps.COMMIT))\n            self.transcript.hash_limbs_multi(Q[1])\n            compute_z_up_to = max(compute_z_up_to, extension_degree * 2)\n            self.big_q_len = self.big_q_len + len(Q[1])\n\n        z = self.transcript.continuable_hash\n\n        self.create_powers_of_Z(z, max_degree=compute_z_up_to)\n\n        for acc_index in acc_indexes:\n            for i in range(self.accumulate_poly_instructions[acc_index].n):\n                self.update_LHS_state(\n                    s1=self.accumulate_poly_instructions[acc_index].rlc_coeffs[i],\n                    Ps=self.accumulate_poly_instructions[acc_index].Pis[i],\n                    Ps_sparsities=self.accumulate_poly_instructions[\n                        acc_index\n                    ].Ps_sparsities[i],\n                    acc_index=acc_index,\n                )\n\n            for i in range(self.accumulate_poly_instructions[acc_index].n):\n                self.update_RHS_state(\n                    type=self.accumulate_poly_instructions[acc_index].types[i],\n                    s1=self.accumulate_poly_instructions[acc_index].rlc_coeffs[i],\n                    R=self.accumulate_poly_instructions[acc_index].Ris[i],\n                    r_sparsity=self.accumulate_poly_instructions[\n                        acc_index\n                    ].r_sparsities[i],\n                    acc_index=acc_index,\n                    instruction_index=i,\n                )\n\n            Q_of_Z = self.eval_poly_in_precomputed_Z(Q[acc_index])\n            P, P_sparsity = self.write_sparse_constant_elements(\n                get_irreducible_poly(\n                    self.curve_id, (acc_index + 1) * extension_degree\n                ).get_coeffs(),\n            )\n            P_of_z = self.eval_poly_in_precomputed_Z(P, P_sparsity)\n            R = self.acc[acc_index].R\n            R_of_Z = self.eval_poly_in_precomputed_Z(R)\n\n            lhs = self.acc[acc_index].lhs\n            rhs = self.add(\n                self.mul(Q_of_Z, P_of_z),\n                self.add(R_of_Z, self.acc[acc_index].R_evaluated),\n            )\n            assert lhs.value == rhs.value, f\"{lhs.value} != {rhs.value}, {acc_index}\"\n            if self.compilation_mode == 0:\n                self.sub_and_assert(\n                    lhs, rhs, self.set_or_get_constant(self.field.zero())\n                )\n            else:\n                eq_check = self.sub(rhs, lhs)\n                self.extend_output([eq_check])\n        return True\n\n    def summarize(self):\n        add_count, mul_count, assert_eq_count = self.values_segment.summarize()\n        summary = {\n            \"circuit\": self.name,\n            \"MULMOD\": mul_count,\n            \"ADDMOD\": add_count,\n            \"ASSERT_EQ\": assert_eq_count,\n            \"POSEIDON\": (\n                self.transcript.permutations_count\n                if self.transcript.permutations_count > 1\n                else 0\n            ),\n            \"RLC\": self.accumulate_poly_instructions[0].n\n            + self.accumulate_poly_instructions[1].n,\n        }\n\n        return summary\n\n    def compile_circuit_cairo_zero(\n        self,\n        function_name: str = None,\n        returns: dict[str] = {\n            \"felt*\": [\n                \"constants_ptr\",\n                \"add_offsets_ptr\",\n                \"mul_offsets_ptr\",\n                \"output_offsets_ptr\",\n            ],\n            \"felt\": [\n                \"constants_ptr_len\",\n                \"input_len\",\n                \"commitments_len\",\n                \"big_Q_len\",\n                \"witnesses_len\",\n                \"output_len\",\n                \"continuous_output\",\n                \"add_mod_n\",\n                \"mul_mod_n\",\n                \"n_assert_eq\",\n                \"N_Euclidean_equations\",\n                \"name\",\n                \"curve_id\",\n            ],\n        },\n    ) -> str:\n        dw_arrays = self.values_segment.get_dw_lookups()\n        name = function_name or self.values_segment.name\n        function_name = f\"get_{name}_circuit\"\n        code = f\"func {function_name}()->(circuit:{self.class_name}*)\" + \"{\" + \"\\n\"\n\n        code += \"alloc_locals;\\n\"\n        code += \"let (__fp__, _) = get_fp_and_pc();\\n\"\n\n        for dw_array_name in returns[\"felt*\"]:\n            code += f\"let ({dw_array_name}:felt*) = get_label_location({dw_array_name}_loc);\\n\"\n\n        code += f\"let constants_ptr_len = {len(dw_arrays['constants_ptr'])};\\n\"\n        code += f\"let input_len = {len(self.values_segment.segment_stacks[WriteOps.INPUT])*N_LIMBS};\\n\"\n        code += f\"let commitments_len = {len(self.commitments)*N_LIMBS};\\n\"\n        code += f\"let witnesses_len = {len(self.values_segment.segment_stacks[WriteOps.WITNESS])*N_LIMBS};\\n\"\n        code += f\"let big_Q_len = {self.big_q_len*N_LIMBS};\\n\"\n        code += f\"let output_len = {len(self.output)*N_LIMBS};\\n\"\n        continuous_output = self.continuous_output\n        code += f\"let continuous_output = {1 if continuous_output else 0};\\n\"\n        code += f\"let add_mod_n = {len(dw_arrays['add_offsets_ptr'])};\\n\"\n        code += f\"let mul_mod_n = {len(dw_arrays['mul_offsets_ptr'])};\\n\"\n        code += (\n            f\"let n_assert_eq = {len(self.values_segment.assert_eq_instructions)};\\n\"\n        )\n        code += (\n            f\"let N_Euclidean_equations = {len(dw_arrays['poseidon_indexes_ptr'])};\\n\"\n        )\n        code += f\"let name = '{self.name}';\\n\"\n        code += f\"let curve_id = {self.curve_id};\\n\"\n\n        code += f\"local circuit:ExtensionFieldModuloCircuit = ExtensionFieldModuloCircuit({', '.join(returns['felt*'])}, {', '.join(returns['felt'])});\\n\"\n        code += \"return (&circuit,);\\n\"\n\n        for dw_array_name in returns[\"felt*\"]:\n            dw_values = dw_arrays[dw_array_name]\n            code += f\"\\t {dw_array_name}_loc:\\n\"\n            if dw_array_name == \"constants_ptr\":\n                for bigint in dw_values:\n                    for limb in bigint:\n                        code += f\"\\t dw {limb};\\n\"\n                code += \"\\n\"\n\n            elif dw_array_name in [\"add_offsets_ptr\", \"mul_offsets_ptr\"]:\n                num_instructions = len(dw_values)\n                instructions_needed = (\n                    BATCH_SIZE - (num_instructions % BATCH_SIZE)\n                ) % BATCH_SIZE\n                for left, right, result, comment in dw_values:\n                    code += (\n                        f\"\\t dw {left}; // {comment}\\n\"\n                        + f\"\\t dw {right};\\n\"\n                        + f\"\\t dw {result};\\n\"\n                    )\n                if instructions_needed > 0:\n                    first_triplet = dw_values[0]\n                    for _ in range(instructions_needed):\n                        code += (\n                            f\"\\t dw {first_triplet[0]};\\n\"\n                            + f\"\\t dw {first_triplet[1]};\\n\"\n                            + f\"\\t dw {first_triplet[2]};\\n\"\n                        )\n                code += \"\\n\"\n            elif dw_array_name in [\"output_offsets_ptr\"]:\n                if continuous_output:\n                    code += f\"\\t dw {dw_values[0]};\\n\"\n                else:\n                    for val in dw_values:\n                        code += f\"\\t dw {val};\\n\"\n\n        code += \"\\n\"\n        code += \"}\\n\"\n        return code\n\n\nif __name__ == \"__main__\":\n    pass\n"
  },
  {
    "path": "hydra/garaga/hints/bls.py",
    "content": "from math import gcd\n\nfrom garaga.curves import CURVES, CurveID\nfrom garaga.hints.tower_backup import E12\n\n\"\"\"\nThe goal of this script is to provide aux witness for efficient proving that Miller loop outputs of BLS12-381 curve are λ residues.\nCo-factor h = 27 * p * h3 and λ = r * 3 * p^2.\nWe know that when pairings are equal multi Miller loop output is always r-th residue,\nbut it is λ residue only when it is a cube and p-th residue too.\nThis happens with a very small probability (1/3*p), but both 27th and p-th roots of unity are in the subfields of Fp12, Fp3 and Fp respectively.\nThus we can simply clear their contribution and not affect he soundness of the method.\n\nNote that gcd(27*p, h3) = 1, therefore we do the following:\n\ni := inverse_mod(h3, 27*p)\ns := -i % 27*p\n\nThen given the Miller loop output x, computing w = (x^h3)^s gives exactly the inverse of 27*p-th root of unity contribution in x.\nBy computing x_sh = w * x we are left with an element that is of order exactly h3.\n\nSince gcd(h1, λ) = 1 computing λ root of x_sh can be simply done by just raising x_sh^e where e = inverse_mod(h3, λ)\n\"\"\"\n\n# Bls\n\nx = CURVES[CurveID.BLS12_381.value].x\nk = 12\nr = x**4 - x**2 + 1\nq = ((x - 1) ** 2) // 3 * r + x\nh = (q**k - 1) // r\n\nlam = -x + q\nm = lam // r\n\np = 5044125407647214251\nh3 = h // (27 * p)\n\ne = pow(lam, -1, h3)\ns = (-1 * pow(h3, -1, p * 27)) % (p * 27)\n\n\nassert h % (27 * p) == 0\nassert m == 3 * p**2\n\nassert gcd(3, h3) == 1\nassert gcd(p**2, h3) == 1\nassert gcd(3, h3) == 1\nassert gcd(p, h3) == 1\nassert gcd(p, 27 * h3) == 1\nassert gcd(27, p * h3) == 1\n\nONE = E12.one(curve_id=1)\n\nassert (q**3 - 1) % 27 == 0\n\n\ndef get_root_and_scaling_factor_bls(mlo: E12) -> tuple[E12, E12]:\n    \"\"\"\n    Takes a miller loop output and returns root, shift such that\n    root**lam = shift * mlo, if and only if mlo**h == 1.\n    \"\"\"\n    x = mlo**h3\n    shift = x**s\n    root = (shift * mlo) ** e\n    return root, shift\n"
  },
  {
    "path": "hydra/garaga/hints/ecip.py",
    "content": "from __future__ import annotations\n\nimport functools\nfrom dataclasses import dataclass\n\nfrom garaga import garaga_rs\nfrom garaga.algebra import Fp2, FunctionFelt, Polynomial, PyFelt, RationalFunction, T\nfrom garaga.curves import CURVES, CurveID, get_base_field\nfrom garaga.hints.neg_3 import (\n    construct_digit_vectors,\n    neg_3_base_le,\n    positive_negative_multiplicities,\n)\nfrom garaga.points import G1Point, G2Point\nfrom garaga.poseidon_transcript import hades_permutation\n\n\ndef get_field_type_from_ec_point(P: G1Point | G2Point) -> type[T]:\n    \"\"\"\n    Maps an elliptic curve point to the type of the field it belongs to.\n    G1Point -> PyFelt\n    G2Point -> Fp2\n    \"\"\"\n    if isinstance(P, G1Point):\n        return PyFelt\n    elif isinstance(P, G2Point):\n        return Fp2\n    else:\n        raise ValueError(f\"Invalid point type {type(P)}\")\n\n\ndef get_ec_group_class_from_ec_point(P: G1Point | G2Point) -> type[G1Point | G2Point]:\n    \"\"\"\n    Maps an elliptic curve point to the class of the elliptic curve group it belongs to.\n    G1Point -> G1Point\n    G2Point -> G2Point\n    \"\"\"\n    if isinstance(P, G1Point):\n        return G1Point\n    elif isinstance(P, G2Point):\n        return G2Point\n    else:\n        raise ValueError(f\"Invalid point type {type(P)}\")\n\n\ndef derive_ec_point_from_X(\n    x: PyFelt | int | Fp2, curve_id: CurveID\n) -> tuple[PyFelt, PyFelt, list[PyFelt]] | tuple[Fp2, Fp2, list[Fp2]]:\n    \"\"\"\n    From a \"random\" x coordinate (in practice obtained via the Cairo Poseidon252 hash), finds via a\n    \"try-and-increment\" algorithm a point on the curve for a given curveID.\n    Works for curves over base field (\"PyFelt\") or degree 2 extension field (\"Fp2\")\n    Returns :\n    - x (PyFelt or Fp2) - x coordinate of the obtained point after the try-and-increment\n    - y (PyFelt or Fp2) - y coordinate of the obtained point after the try-and-increment\n    - g_rhs_roots (list of PyFelt of Fp2). A list of square roots over the given field.\n\n    At each attempt, if rhs(x) = x^3 + ax + b is not a quad residue (ie: the point is not on the curve),\n    x is updated by hashing it with the attempt : new_x = poseidon(x, attempt)\n\n    Since in a finite field, if z is not a quad residue, g*z is a quad residue (alternatively), at each attempt,\n    the square root of g*x is stored in the g*rhs_roots array.\n\n    This is used to verify the existence of the square roots in Cairo.\n    See the derive_ec_point_from_X cairo function in ec_ops.cairo.\n    \"\"\"\n    field = get_base_field(curve_id.value)\n    if isinstance(x, int):\n        x = field(x)\n\n    def rhs_compute(x: PyFelt | Fp2) -> PyFelt | Fp2:\n        \"\"\"\n        Compute the right hand side of the Weirstrass equation.\n        rhs(x) = x^3 + ax + b\n        \"\"\"\n        if isinstance(x, Fp2):\n            return (\n                x**3\n                + x * field(CURVES[curve_id.value].a)\n                + Fp2(\n                    field(CURVES[curve_id.value].b20), field(CURVES[curve_id.value].b21)\n                )\n            )\n        else:\n            return (\n                x**3\n                + field(CURVES[curve_id.value].a) * x\n                + field(CURVES[curve_id.value].b)\n            )\n\n    if isinstance(x, Fp2):\n        g = Fp2(\n            field(CURVES[curve_id.value].nr_a0),\n            field(CURVES[curve_id.value].nr_a1),\n        )\n    else:\n        g = field(CURVES[curve_id.value].fp_generator)\n\n    rhs = rhs_compute(x)\n    g_rhs_roots = []\n    attempt = 0\n    while not rhs.is_quad_residue():\n        g_rhs = rhs * g\n        g_rhs_roots.append(g_rhs.sqrt())\n        if isinstance(x, Fp2):\n            _s0, _, _ = hades_permutation(x.a0.value, x.a1.value, 2)\n            _x0, _x1, _ = hades_permutation(_s0, attempt, 2)\n            x = Fp2(field(_x0), field(_x1))\n        else:\n            _x, _, _ = hades_permutation(x.value, attempt, 2)\n            x = field(_x)\n\n        rhs = rhs_compute(x)\n        attempt += 1\n\n    y = rhs.sqrt()\n    assert y**2 == rhs\n    return x, y, g_rhs_roots\n\n\ndef zk_ecip_hint(\n    Bs: list[G1Point] | list[G2Point], scalars: list[int], use_rust: bool = True\n) -> tuple[G1Point | G2Point, FunctionFelt[T]]:\n    \"\"\"\n    Inputs:\n    - Bs: list of points on the curve\n    - scalars: list of scalars\n    Returns:\n    - Q: MSM of Bs by scalars contained in dss matrix\n    - sum_dlog: sum of the logarithmic derivatives of the functions in Ds\n\n    Use this to verify equation 3 in https://eprint.iacr.org/2022/596.pdf\n    Partial Ref : https://gist.github.com/Liam-Eagen/666d0771f4968adccd6087465b8c5bd4\n    Full algo verifying it in the function verify_ecip below.\n    \"\"\"\n    assert len(Bs) == len(scalars)\n\n    ec_group_class = get_ec_group_class_from_ec_point(Bs[0])\n    if ec_group_class == G1Point and use_rust:\n        pts = []\n        c_id = Bs[0].curve_id\n        for pt in Bs:\n            pts.extend([pt.x, pt.y])\n        field_type = get_field_type_from_ec_point(Bs[0])\n        field = get_base_field(c_id.value, field_type)\n\n        q, a_num, a_den, b_num, b_den = garaga_rs.zk_ecip_hint(\n            pts, list(scalars), c_id.value\n        )\n\n        a_num = [field(f) for f in a_num] if len(a_num) > 0 else [field.zero()]\n        a_den = [field(f) for f in a_den] if len(a_den) > 0 else [field.one()]\n        b_num = [field(f) for f in b_num] if len(b_num) > 0 else [field.zero()]\n        b_den = [field(f) for f in b_den] if len(b_den) > 0 else [field.one()]\n\n        Q = G1Point(q[0], q[1], c_id)\n        sum_dlog = FunctionFelt(\n            RationalFunction(Polynomial(a_num), Polynomial(a_den)),\n            RationalFunction(Polynomial(b_num), Polynomial(b_den)),\n        )\n    else:\n        dss = construct_digit_vectors(scalars)\n        Q, Ds = ecip_functions(Bs, dss)\n        dlogs = [dlog(D) for D in Ds]\n        sum_dlog = dlogs[0]\n        field = get_base_field(Q.curve_id.value, PyFelt)\n        for i in range(1, len(dlogs)):\n            sum_dlog = sum_dlog + (-3) ** i * dlogs[i]\n    return Q, sum_dlog\n\n\ndef verify_ecip(\n    Bs: list[G1Point] | list[G2Point],\n    scalars: list[int],\n    Q: G1Point | G2Point = None,\n    sum_dlog: FunctionFelt[T] = None,\n    A0: G1Point | G2Point = None,\n    use_rust: bool = True,\n) -> bool:\n    \"\"\"\n    Verifies the zk-ecip hint.\n    If Q, sum_dlog are not provided from a previous computation of the zk_ecip_hint, it will compute them.\n    If the random point A0 is not provided for verifying the hint, a random one will be sampled.\n    \"\"\"\n    # Prover :\n    if Q is None or sum_dlog is None:\n        Q, sum_dlog = zk_ecip_hint(Bs, scalars, use_rust)\n    else:\n        Q = Q\n        sum_dlog = sum_dlog\n    # Verifier :\n    assert sum_dlog.validate_degrees(len(Bs))\n    epns = [\n        positive_negative_multiplicities(neg_3_base_le(scalar)) for scalar in scalars\n    ]\n\n    c_id = Q.curve_id.value\n    ec_group_class = get_ec_group_class_from_ec_point(Q)\n    field_type = get_field_type_from_ec_point(Q)\n\n    field = get_base_field(Q.curve_id.value, field_type)\n\n    # Verifier must derive a random point A0.\n    # In non-interactive context, hash public inputs (Bs, scalars) and prover info (Q, sum_dlog) then map the resulting field element to a point.\n    if A0 is None:\n        A0 = ec_group_class.gen_random_point(Q.curve_id)\n    else:\n        A0 = A0\n\n    A2 = A0.scalar_mul(-2)\n\n    xA0 = field(A0.x)\n    yA0 = field(A0.y)\n\n    xA2 = field(A2.x)\n    yA2 = field(A2.y)\n\n    mA0, bA0 = slope_intercept(A0, A0)\n    mA0A2, _ = slope_intercept(A2, A0)\n\n    coeff2 = (2 * yA2 * (xA0 - xA2)) / (\n        3 * xA2**2 + field(CURVES[c_id].a) - 2 * mA0A2 * yA2\n    )\n    coeff0 = coeff2 + 2 * mA0A2\n\n    basis_sum = field.zero()\n    for i, (P, (ep, en)) in enumerate(zip(Bs, epns)):\n        if P.is_infinity():\n            # print(\"skipping infinity\")\n            continue\n        if ep - en == 0:\n            # print(\"skipping 0\")\n            continue\n        basis_sum += eval_point_challenge_signed(P, xA0, mA0, bA0, ep, en)\n        # print(f\"rhs_acc {i}: {basis_sum.value}\")\n\n    if Q.is_infinity():\n        RHS = basis_sum\n    else:\n        RHS = eval_point_challenge(-Q, xA0, mA0, bA0, 1) + basis_sum\n\n    LHS = coeff0 * sum_dlog.evaluate(xA0, yA0) - coeff2 * sum_dlog.evaluate(xA2, yA2)\n\n    # Verifier must check that LHS = RHS.\n    assert LHS == RHS, f\"LHS: {LHS}, RHS: {RHS}\"\n\n    #########\n    assert Q == ec_group_class.msm(\n        Bs, scalars\n    )  # Sanity check. Not part of the verification.\n    ##########\n    return True\n\n\ndef slope_intercept(\n    P: G1Point | G2Point, Q: G1Point | G2Point\n) -> tuple[PyFelt, PyFelt] | tuple[Fp2, Fp2]:\n    \"\"\"\n    Returns the slope and intercept of the line passing through points P and Q.\n    y = mx + b\n    \"\"\"\n    field = get_base_field(P.curve_id.value, get_field_type_from_ec_point(P))\n    if P == Q:\n        px, py = field(P.x), field(P.y)\n        m = (3 * px**2 + field(CURVES[P.curve_id.value].a)) / (2 * py)\n        b = py - m * px\n        return (m, b)\n    else:\n        px, py = field(P.x), field(P.y)\n        qx, qy = field(Q.x), field(Q.y)\n        m = (py - qy) / (px - qx)\n        b = qy - m * qx\n        return (m, b)\n\n\ndef eval_point_challenge(\n    P: G1Point | G2Point, xA0, mA0, bA0, multiplicity: int\n) -> PyFelt | Fp2:\n    field_type = get_field_type_from_ec_point(P)\n    field = get_base_field(P.curve_id.value, field_type)\n\n    xP, yP = field(P.x), field(P.y)\n    num = xA0 - xP\n    den = yP - mA0 * xP - bA0\n    res = multiplicity * num / den\n    assert isinstance(res, field_type), f\"Expected {field_type}, got {type(res)}\"\n    return res\n\n\ndef eval_point_challenge_signed(\n    P: G1Point | G2Point, xA0, mA0, bA0, ep: int, en: int\n) -> PyFelt | Fp2:\n    return eval_point_challenge(P, xA0, mA0, bA0, ep) + eval_point_challenge(\n        -P, xA0, mA0, bA0, en\n    )\n\n\ndef line(P: G1Point | G2Point, Q: G1Point | G2Point) -> FF[T]:\n    \"\"\"\n    Returns line function passing through points, works for all points and returns 1 for O + O = O\n    \"\"\"\n    assert (\n        P.curve_id == Q.curve_id\n    ), f\"Points must be on the same curve, got {P.curve_id} and {Q.curve_id}\"\n    assert isinstance(\n        P, type(Q)\n    ), f\"Points must be in the same group, got {type(P)} and {type(Q)}\"\n\n    if isinstance(P, G1Point):\n        field_type = PyFelt\n    elif isinstance(P, G2Point):\n        field_type = Fp2\n    else:\n        raise ValueError(f\"Invalid point type {type(P)}\")\n\n    field = get_base_field(P.curve_id.value, field_type)\n\n    if P.is_infinity():\n        if Q.is_infinity():\n            return FF([Polynomial([field.one()])], P.curve_id)\n        else:\n            Qx = field(Q.x)\n            return FF([Polynomial([-Qx, field.one()])], P.curve_id)\n    if Q.is_infinity():\n        Px = field(P.x)\n        return FF([Polynomial([-Px, field.one()])], P.curve_id)\n\n    Px, Py = field(P.x), field(P.y)\n\n    if P == Q:\n        m = (3 * Px**2 + field(CURVES[P.curve_id.value].a)) / (2 * Py)\n        b = Py - m * Px\n        # -m*x + y -b\n        return FF([Polynomial([-b, -m]), Polynomial([field.one()])], P.curve_id)\n\n    if P == -Q:\n        return FF([Polynomial([-Px, field.one()])], P.curve_id)\n\n    Qx, Qy = field(Q.x), field(Q.y)\n\n    m = (Py - Qy) / (Px - Qx)\n    b = Qy - m * Qx\n    return FF([Polynomial([-b, -m]), Polynomial([field.one()])], P.curve_id)\n\n\n@dataclass\nclass FF:\n    \"\"\"\n    Represents a polynomial over F_p[x] or F_p^2[x]\n    Example : F(x, y) = c0(x) + c1(x) * y + c2(x) * y^2 + ...\n    where c0, c1, c2, ... are polynomials over F_p[x] or F_p^2[x]\n    Used to represent a subset of the Function Field where coefficients are polynomials instead of rational functions.\n    \"\"\"\n\n    coeffs: list[Polynomial[T]]\n    y2: Polynomial[T]  # = x^3 + ax + b, where a, b are the curve parameters\n    p: int\n    curve_id: CurveID\n    type: type[T]  # PyFelt or Fp2\n\n    def __init__(self, coeffs: list[Polynomial[T]], curve_id: CurveID):\n        self.coeffs = coeffs\n        self.p = coeffs[0][0].p\n        self.field = get_base_field(curve_id.value, type(coeffs[0][0]))\n        self.curve_id = curve_id\n        self.type = type(coeffs[0][0])\n        a = self.field(CURVES[curve_id.value].a)\n        if self.type == PyFelt:\n            b = self.field(CURVES[curve_id.value].b)\n        else:\n            b = self.field((CURVES[curve_id.value].b20, CURVES[curve_id.value].b21))\n\n        # y² = x³ + ax + b\n        self.y2 = Polynomial([b, a, self.field.zero(), self.field.one()])\n\n    def degree(self) -> int:\n        return len(self.coeffs) - 1\n\n    def __getitem__(self, i: int) -> Polynomial:\n        try:\n            return self.coeffs[i]\n        except IndexError:\n            return Polynomial.zero(self.p, self.type)\n\n    def __add__(self, other: FF) -> FF:\n        if not isinstance(other, FF):\n            raise TypeError(f\"Cannot add FF and {type(other)}\")\n\n        ns, no = len(self.coeffs), len(other.coeffs)\n        if ns >= no:\n            coeffs = self.coeffs[:]\n            for i in range(no):\n                coeffs[i] = coeffs[i] + other.coeffs[i]\n        else:\n            coeffs = other.coeffs[:]\n            for i in range(ns):\n                coeffs[i] = coeffs[i] + self.coeffs[i]\n\n        return FF(coeffs, self.curve_id)\n\n    def __mul__(self, other: \"FF\" | Polynomial | PyFelt) -> \"FF\":\n        if isinstance(other, (PyFelt, Polynomial)):\n            return FF([c * other for c in self.coeffs], self.curve_id)\n        elif not isinstance(other, FF):\n            raise TypeError(\n                f\"Cannot multiply polynomial by type {type(other)}, must be PyFelt, Polynomial, or FF\"\n            )\n\n        if self.coeffs == [] or other.coeffs == []:\n            return FF([Polynomial([self.field.zero()])], self.curve_id)\n\n        zero = Polynomial.zero(self.p, self.type)\n\n        buf = [zero] * (len(self.coeffs) + len(other.coeffs) - 1)\n        for i in range(len(self.coeffs)):\n            if self.coeffs[i].is_zero():\n                continue  # optimization for sparse polynomials\n            for j in range(len(other.coeffs)):\n                buf[i + j] = buf[i + j] + self.coeffs[i] * other.coeffs[j]\n        res = FF(buf, self.curve_id)\n        return res\n\n    def neg_y(self) -> \"FF\":\n        \"\"\"Keeps all the coefficients the same but negate the degree 1 coeff\"\"\"\n        if len(self.coeffs) < 2:\n            return self\n        coeffs = self.coeffs[:]\n        coeffs[1] = -coeffs[1]\n        return FF(coeffs, self.curve_id)\n\n    def reduce(self) -> \"FF\":\n        \"\"\"\n        Reduces the polynomial modulo y² = x³ + ax + b\n        Replaces y² with x³ + ax + b and reduces the degree of the polynomial\n        Always returns a polynomial of at most degree 1.\n        Enforce it has 2 coefficients (padding with zero polynomials if needed)\n        \"\"\"\n        if len(self.coeffs) <= 2:\n            while len(self.coeffs) < 2:\n                self.coeffs.append(Polynomial.zero(self.p, self.type))\n            return self\n        y2 = self.y2\n        deg_0_coeff = self.coeffs[0]\n        deg_1_coeff = self.coeffs[1]\n        for i, poly in enumerate(self.coeffs):\n            if i == 0 or i == 1:\n                continue\n            if i % 2 == 0:\n                deg_0_coeff = deg_0_coeff + poly * y2\n            else:\n                deg_1_coeff = deg_1_coeff + poly * y2\n                y2 = y2 * y2\n        return FF([deg_0_coeff, deg_1_coeff], self.curve_id)\n\n    def to_poly(self) -> Polynomial[T]:\n        \"\"\"\n        \"Downcasts\" the FF to a Polynomial iff the FF is of degree 1.\n        \"\"\"\n        assert len(self.coeffs) == 1\n        return self.coeffs[0]\n\n    def div_by_poly(self, poly: Polynomial[T]) -> \"FF\":\n        return FF([c // poly for c in self.coeffs], self.curve_id)\n\n    def normalize(self) -> \"FF\":\n        \"\"\"\n        Normalize the polynomial by dividing all coefficients by the first one\n        \"\"\"\n        coeff = self.coeffs[0][0]\n        return FF([c * coeff.__inv__() for c in self.coeffs], self.curve_id)\n\n\nclass EmptyListOfPoints(Exception):\n    pass\n\n\ndef construct_function(Ps: list[G1Point] | list[G2Point]) -> FF:\n    \"\"\"\n    Returns a function field element (class FF) exactly interpolating the points Ps.\n    \"\"\"\n    if len(Ps) == 0:\n        raise EmptyListOfPoints(\n            \"Cannot construct a function from an empty list of points\"\n        )\n    xs = [(P, line(P, -P)) for P in Ps]\n\n    while len(xs) != 1:\n        xs2 = []\n\n        if len(xs) & 1:\n            x0 = xs[0]\n            xs = xs[1:]\n        else:\n            x0 = None\n\n        for n in range(0, len(xs) // 2):\n            A, aNum = xs[2 * n]\n            B, bNum = xs[2 * n + 1]\n            aNum_bNum = aNum * bNum\n            line_AB = line(A, B)\n            product = aNum_bNum * line_AB\n            num = product.reduce()\n            den = (line(A, -A) * line(B, -B)).to_poly()\n            D = num.div_by_poly(den)\n            xs2.append((A.add(B), D))\n\n        if x0 is not None:\n            xs2.append(x0)\n\n        xs = xs2\n\n    assert xs[0][0].is_infinity()\n\n    return xs[-1][1].normalize()\n\n\ndef row_function(\n    ds: list[int], Ps: list[G1Point] | list[G2Point], Q: G1Point | G2Point\n) -> tuple[FF, G1Point | G2Point]:\n    ec_group_class = G1Point if isinstance(Q, G1Point) else G2Point\n    infinity = ec_group_class.infinity(Q.curve_id)\n\n    digits_points = [\n        P if d == 1 else -P if d == -1 else infinity for d, P in zip(ds, Ps)\n    ]\n    sum_digits_points = functools.reduce(lambda x, y: x.add(y), digits_points)\n    Q2 = Q.scalar_mul(-3).add(sum_digits_points)\n    Q_neg = -Q\n    div_ = [Q_neg, Q_neg, Q_neg, -Q2] + digits_points\n    div = [P for P in div_ if not P.is_infinity()]\n    try:\n        D = construct_function(div)\n    except EmptyListOfPoints:\n        field_type = get_field_type_from_ec_point(div_[0])\n        # Returning 1 so that dLog(D) = 0 and doesn't contribute to the sum.\n        D = FF(\n            [Polynomial.one(get_base_field(Q.curve_id, field_type).p, field_type)],\n            Q.curve_id,\n        )\n\n    return (D, Q2)\n\n\ndef ecip_functions(\n    Bs: list[G1Point] | list[G2Point], dss: list[list[int]]\n) -> tuple[G1Point | G2Point, list[FF]]:\n    dss.reverse()\n    ec_group_class = G1Point if isinstance(Bs[0], G1Point) else G2Point\n    Q = ec_group_class.infinity(Bs[0].curve_id)\n    Ds = []\n    for i, ds in enumerate(dss):\n        D, Q = row_function(ds, Bs, Q)\n        Ds.append(D)\n\n    Ds.reverse()\n    return (Q, Ds)\n\n\ndef dlog(d: FF) -> FunctionFelt:\n    \"\"\"\n    Compute the logarithmic derivative of a FunctionFieldElement (class FF),\n    Returns a FunctionFelt such that F = a(x) + b(x) * y with a, b RationalFunctions\n\n    Ref https://gist.github.com/Liam-Eagen/666d0771f4968adccd6087465b8c5bd4 (cell #12)\n\n    Example values:\n    D: (3*x + 11)*y + x^2 + x + 1\n    Dx: 3*y + 2*x + 1\n    Dy: 3*x + 11\n    Dz_tmp: (9*x^3 + 33*x^2)/(2*y)\n    Dz: (6*y^2 + (4*x + 2)*y + 9*x^3 + 33*x^2)/(2*y)\n    U=2*y*Dz: 6*y^2 + (4*x + 2)*y + 9*x^3 + 33*x^2\n    V=2*y*D: (6*x + 22)*y^2 + (2*x^2 + 2*x + 2)*y\n\n    \"\"\"\n    field = d.field\n\n    d: FF = d.reduce()\n    assert len(d.coeffs) == 2, f\"D has {len(d.coeffs)} coeffs: {d.coeffs}\"\n\n    Dx = FF([d[0].differentiate(), d[1].differentiate()], d.curve_id)\n    Dy: Polynomial = d[1]  # B(x)\n\n    TWO_Y: FF = FF(\n        [Polynomial.zero(field.p, d.type), Polynomial([field(2)])], d.curve_id\n    )\n    U: FF = Dx * TWO_Y + FF(\n        [\n            Dy\n            * Polynomial(\n                [\n                    field(CURVES[d.curve_id.value].a),\n                    field.zero(),\n                    field(3),\n                ]  # 3x^2 + A\n            ),\n            Polynomial.zero(field.p, d.type),\n        ],\n        d.curve_id,\n    )\n\n    V: FF = TWO_Y * d\n\n    # print(f\"U: {print_ff(U)}\")\n    # print(f\"V: {print_ff(V)}\")\n\n    Num: FF = (U * V.neg_y()).reduce()\n    Den_FF: FF = (V * V.neg_y()).reduce()\n\n    # print(f\"Num: {print_ff(Num)}\")\n    # print(f\"Den: {print_ff(Den_FF)}\")\n\n    assert Den_FF[\n        1\n    ].is_zero(), f\"Den[1] is not zero: {Den_FF[1].print_as_sage_poly('x')}\"\n\n    Den: Polynomial = Den_FF[0]\n\n    _, _, gcd_0 = Polynomial.xgcd(Num[0], Den)\n    # print(f\"GCD_0: {gcd_0.print_as_sage_poly('x')}\")\n    _, _, gcd_1 = Polynomial.xgcd(Num[1], Den)\n    # print(f\"GCD_1: {gcd_1.print_as_sage_poly('x')}\")\n\n    # Simplify the numerator and denominator by dividing by the gcd\n\n    a_num = Num[0] // gcd_0\n    a_den = Den // gcd_0\n    b_num = Num[1] // gcd_1\n    b_den = Den // gcd_1\n\n    # Normalize to obtain exactly Sage's coeffs.\n    res = FunctionFelt(\n        a=RationalFunction(\n            a_num * Den.leading_coefficient().__inv__(),\n            a_den * a_den.leading_coefficient().__inv__(),\n        ),\n        b=RationalFunction(\n            b_num * Den.leading_coefficient().__inv__(),\n            b_den * b_den.leading_coefficient().__inv__(),\n        ),\n    )\n    # print(f\"res: {res.print_as_sage_poly()}\\n\")\n    return res\n\n\ndef print_ff(ff: FF):\n    string = \"\"\n    coeffs = ff.coeffs\n    for i, p in enumerate(coeffs[::-1]):\n        coeff_str = p.print_as_sage_poly(var_name=\"x\", as_hex=True)\n\n        if i == len(coeffs) - 1:\n            if coeff_str == \"\":\n                string = string[:-2]\n            else:\n                string += f\"{coeff_str}\"\n        elif i == len(coeffs) - 2:\n            string += f\"({coeff_str})*y + \"\n        else:\n            string += f\"({coeff_str})*y^{len(coeffs) - i - 1} + \"\n    # print(string)\n    return string\n\n\ndef n_points_from_n_coeffs(n_coeffs: int, batched: bool) -> int:\n    if batched:\n        extra = 4 * 2\n    else:\n        extra = 0\n\n    # n_coeffs = 10 + 4n_points => 4n_points = n_coeffs - 10\n    assert n_coeffs >= 10 + extra\n    assert (n_coeffs - 10 - extra) % 4 == 0\n    return (n_coeffs - 10 - extra) // 4\n\n\ndef n_coeffs_from_n_points(n_points: int, batched: bool) -> tuple[int, int, int, int]:\n    if batched:\n        extra = 2\n    else:\n        extra = 0\n\n    return (\n        1 + n_points + extra,\n        1 + n_points + 1 + extra,\n        1 + n_points + 1 + extra,\n        1 + n_points + 4 + extra,\n    )\n\n\nif __name__ == \"__main__\":\n    import random\n\n    from garaga.curves import STARK\n    from garaga.hints.io import int_array_to_u384_array, int_to_u384\n\n    random.seed(0)\n\n    def build_cairo1_tests_derive_ec_point_from_X(x: int, curve_id: CurveID, idx: int):\n        x_f, y, roots = derive_ec_point_from_X(x, curve_id)\n\n        code = f\"\"\"\n        #[test]\n            fn derive_ec_point_from_X_{CurveID(curve_id).name}_{idx}() {{\n                let x: felt252 = {x%STARK};\n                let y: u384 = {int_to_u384(y)};\n                let grhs_roots:Array<u384> = {int_array_to_u384_array(roots)};\n                let result = derive_ec_point_from_X(x, y, grhs_roots, {curve_id.value});\n                assert!(result.x == {int_to_u384(x_f)});\n                assert!(result.y == y);\n            }}\n            \"\"\"\n        return code\n\n    # codes = \"\\n\".join(\n    #     [\n    #         build_cairo1_tests_derive_ec_point_from_X(x, curve_id, idx)\n    #         for idx, x in enumerate([random.randint(0, STARK - 1) for _ in range(2)])\n    #         for curve_id in CurveID\n    #     ]\n    # )\n\n    # print(codes)\n\n    # average_n_roots = 0\n    # max_n_roots = 0\n    # n = 10000\n    # for i in range(n):\n    #     x, y, roots = derive_ec_point_from_X(\n    #         Fp2.random(CURVES[0].p, max_value=STARK), CurveID(0)\n    #     )\n    #     # print(f\"x: {x}, y: {y}, roots: {roots}\")\n    #     max_n_roots = max(max_n_roots, len(roots))\n    #     average_n_roots += len(roots)\n    # print(f\"Average number of roots: {average_n_roots / n}\")\n    # print(f\"Max number of roots: {max_n_roots}\")\n\n    # verify_ecip([G1Point.gen_random_point(CurveID.SECP256K1)], scalars=[-1])\n\n    import time\n\n    order = CURVES[CurveID.BN254.value].n\n    n = 50\n    Bs = [G1Point.gen_random_point(CurveID.BN254) for _ in range(n)]\n    ss = [random.randint(1, order) for _ in range(n)]\n\n    t0 = time.time()\n    ZZ = zk_ecip_hint(Bs, ss, use_rust=False)\n    time_taken_py = time.time() - t0\n    print(f\"Time taken py : {time_taken_py}\")\n\n    t0 = time.time()\n    ZZ_rs = zk_ecip_hint(Bs, ss, use_rust=True)\n    time_taken_rs = time.time() - t0\n    print(f\"Time taken rs : {time_taken_rs}\")\n\n    print(f\"Ratio: {time_taken_py / time_taken_rs}\")\n\n    assert ZZ == ZZ_rs\n"
  },
  {
    "path": "hydra/garaga/hints/eisenstein.py",
    "content": "\"\"\"\n-----------------------------------------------------------------------------\nε – Eisenstein integers in pure Python (fully commented)\n-----------------------------------------------------------------------------\nA **beginner‑friendly walk‑through**\n-----------------------------------------------------------------------------\nThis file implements three things:\n\n  • an *Eisenstein integer* class  z = a0 + a1·ω  with  ω = e^{2πi/3}\n  • an *exact* Euclidean division  quo_rem()  in the ring ℤ[ω]\n  • the *Half‑GCD* algorithm, one of the fastest ways to compute a greatest\n    common divisor when the inputs are very large\n\"\"\"\n\nfrom __future__ import annotations  # ► allow the class to refer to itself in type hints\n\nimport math\nfrom typing import Tuple\n\n# ---------------------------------------------------------------------------\n# 1.  Tiny helper for the Euclidean division in ℤ[ω]\n# ---------------------------------------------------------------------------\n\n#  The six **unit directions** of the hexagonal lattice.  Graphically:\n#     ↑ (0,1)\n#  ↖       ↗\n# (-1,1)   (1,0)\n#  ↙       ↘\n# (-1,0)   (1,-1)\n#     ↓ (0,-1)\n_NEIGHBOURS = ((1, 0), (0, 1), (-1, 1), (-1, 0), (0, -1), (1, -1))\n\n\ndef _round_nearest(z: int, d: int) -> int:\n    \"\"\"Symmetric integer rounding  ——  ⌊ (z + d/2) / d ⌋ for *any* sign of *z*.\n\n    • *d* is strictly positive (we only call this with norms, which are > 0).\n    • For   z ≥ 0   the formula above already works.\n    • For   z <  0   we cannot add  +d/2  (would move us the wrong way),\n      so we flip the sign, apply the positive rule, then flip back.\n    \"\"\"\n    half = d >> 1  # bit‑shift right by 1  ⇒  divide by 2 (fast, exact)\n    return (z + half) // d if z >= 0 else -((-z + half) // d)\n\n\n# ---------------------------------------------------------------------------\n# 2.  The EisensteinInteger class\n# ---------------------------------------------------------------------------\n\n\nclass EisensteinInteger:\n    \"\"\"Eisenstein integers:  *hexagonal* analogue of Gaussian integers.\n\n    Definition\n    ----------\n    ω  (pronounced \"omega\") is the complex cube‑root of 1 with positive\n    imaginary part:  ω = e^{2πi/3} = −½ + i·√3/2.\n    It satisfies  ω² + ω + 1 = 0  and  |ω| = 1.\n\n    Every element of  ℤ[ω]  can be written uniquely as\n        z = a₀ + a₁·ω,    with  a₀, a₁ ∈ ℤ.\n    The pair (a₀, a₁) are the *hex‑coordinates* in the triangular lattice.\n\n    In code we store just those two integers.\n    \"\"\"\n\n    # Class‑level constants (created *after* the class body below)\n    ZERO: \"EisensteinInteger\"  # 0 + 0·ω\n    ONE: \"EisensteinInteger\"  # 1 + 0·ω\n\n    # ────────────────────────────────────────────────────────────────────\n    #  Construction & basic utilities\n    # ────────────────────────────────────────────────────────────────────\n    def __init__(self, a0: int = 0, a1: int = 0):\n        if not isinstance(a0, int) or not isinstance(a1, int):\n            raise TypeError(\"Coefficients a0 and a1 must be integers\")\n        self.a0 = a0\n        self.a1 = a1\n\n    def copy(self) -> \"EisensteinInteger\":\n        \"\"\"Clone *self* (handy for algorithms that mutate a temporary copy).\"\"\"\n        return EisensteinInteger(self.a0, self.a1)\n\n    def is_zero(self) -> bool:\n        return self.a0 == 0 and self.a1 == 0\n\n    def __str__(self) -> str:\n        \"\"\"Pretty print   3 + 2·ω,   −ω,  0,  …\"\"\"\n        if self.a1 == 0:\n            return str(self.a0)\n\n        a0_part = f\"{self.a0}\" if self.a0 != 0 else \"\"\n        # coefficient of ω\n        if self.a1 == 1:\n            a1_part = \"ω\"\n        elif self.a1 == -1:\n            a1_part = \"-ω\"\n        else:\n            a1_part = f\"{self.a1}*ω\"\n\n        if a0_part == \"\":\n            return a1_part\n        sign = \" + \" if self.a1 > 0 else \" - \"\n        abs_a1_part = \"ω\" if abs(self.a1) == 1 else f\"{abs(self.a1)}*ω\"\n        return f\"{a0_part}{sign}{abs_a1_part}\"\n\n    def __repr__(self) -> str:\n        \"\"\"Unambiguous form so that  eval(repr(z)) == z  (useful in a REPL).\"\"\"\n        return f\"EisensteinInteger({self.a0}, {self.a1})\"\n\n    # ────────────────────────────────────────────────────────────────────\n    #  Equality & negation\n    # ────────────────────────────────────────────────────────────────────\n    def __eq__(self, other: object) -> bool:  # called by  z1 == z2\n        return (\n            isinstance(other, EisensteinInteger)\n            and self.a0 == other.a0\n            and self.a1 == other.a1\n        )\n\n    def __neg__(self) -> \"EisensteinInteger\":  # −z\n        return EisensteinInteger(-self.a0, -self.a1)\n\n    # ────────────────────────────────────────────────────────────────────\n    #  Conjugation\n    # ────────────────────────────────────────────────────────────────────\n    def conjugate(self) -> \"EisensteinInteger\":\n        \"\"\"Field automorphism  ω ↦ ω²  (complex conjugation).\n        Algebraically:  conj(a₀ + a₁·ω) = (a₀ − a₁) − a₁·ω.\n        \"\"\"\n        return EisensteinInteger(self.a0 - self.a1, -self.a1)\n\n    # ────────────────────────────────────────────────────────────────────\n    #  Addition, subtraction, multiplication\n    # ────────────────────────────────────────────────────────────────────\n    def __add__(self, other: \"EisensteinInteger\") -> \"EisensteinInteger\":\n        return EisensteinInteger(self.a0 + other.a0, self.a1 + other.a1)\n\n    def __sub__(self, other: \"EisensteinInteger\") -> \"EisensteinInteger\":\n        return EisensteinInteger(self.a0 - other.a0, self.a1 - other.a1)\n\n    def __mul__(self, other: object) -> \"EisensteinInteger\":\n        \"\"\"Product formula derived from  (x₀ + x₁ω)(y₀ + y₁ω).\n        Expand and use  ω² = −1 − ω.\n        \"\"\"\n        if isinstance(other, EisensteinInteger):\n            x0, x1, y0, y1 = self.a0, self.a1, other.a0, other.a1\n            return EisensteinInteger(\n                x0 * y0 - x1 * y1,  # coefficient of 1\n                x0 * y1 + x1 * y0 - x1 * y1,  # coefficient of ω\n            )\n        elif isinstance(other, int):\n            return EisensteinInteger(self.a0 * other, self.a1 * other)\n        return NotImplemented\n\n    # Support  int * EisensteinInteger  (commutative)\n    __rmul__ = __mul__\n\n    # ────────────────────────────────────────────────────────────────────\n    #  Norm (always a *plain* integer)\n    # ────────────────────────────────────────────────────────────────────\n    def norm(self) -> int:\n        \"\"\"N(a₀ + a₁·ω)  =  a₀² + a₁² − a₀·a₁   ≥ 0\n        Proof: treat ω as  −½ + i·√3/2  and compute |z|².\n        \"\"\"\n        return self.a0 * self.a0 + self.a1 * self.a1 - self.a0 * self.a1\n\n    # -------------------------------------------------------------------\n    #  Euclidean division  ——  the heart of arithmetic in ℤ[ω]\n    # -------------------------------------------------------------------\n    def quo_rem(\n        self, y: \"EisensteinInteger\"\n    ) -> Tuple[\"EisensteinInteger\", \"EisensteinInteger\"]:\n        \"\"\"Return  (q, r)  such that   self = q·y + r   with  N(r) < N(y).\n\n        Strategy (all integer‑only):\n          1. Multiply by the *conjugate* of y to get an element of the\n             lattice that is colinear with y – this is the usual trick to\n             mimic complex division without leaving the ring.\n          2. Divide the two coordinates by the *positive* norm N(y) and\n             apply symmetric rounding to obtain a *first guess* q.\n          3. If this guess does not yet satisfy the Euclidean inequality\n             N(r) < N(y), walk at most two unit steps in the hex lattice\n             until it does.\n\n        Because ℤ[ω] is a Euclidean domain, this procedure is guaranteed\n        to terminate and the while‑loop never needs more than two laps.\n        \"\"\"\n        if y.is_zero():\n            raise ZeroDivisionError(\"division by zero EisensteinInteger\")\n\n        nrm = y.norm()  # denominator of the coordinates ( > 0 )\n        num = self * y.conjugate()  # numerator in the same lattice line\n\n        # --- 1st approximation by independent rounding -----------------\n        q0 = _round_nearest(num.a0, nrm)\n        q1 = _round_nearest(num.a1, nrm)\n        q = EisensteinInteger(q0, q1)\n        r = self - q * y\n\n        # --- Improve the quotient until Euclidean property holds --------\n        while r.norm() >= nrm:  # very rarely true (≈ 1 in 12 cases)\n            best_q, best_r, best_norm = None, None, r.norm()\n            # test the 6 neighbours\n            for dp, dq in _NEIGHBOURS:\n                cand_q = EisensteinInteger(q0 + dp, q1 + dq)\n                cand_r = self - cand_q * y\n                cand_norm = cand_r.norm()\n                if cand_norm < best_norm:\n                    best_q, best_r, best_norm = cand_q, cand_r, cand_norm\n            # move to the better neighbour (Euclidean property assures one exists)\n            q, r = best_q, best_r\n            q0, q1 = q.a0, q.a1  # update centre for the *next* neighbour pass\n        return q, r\n\n    # Allow the syntactic sugar  z // y   and  z % y -------------------------\n    def __floordiv__(self, other: \"EisensteinInteger\") -> \"EisensteinInteger\":\n        return self.quo_rem(other)[0]\n\n    def __mod__(self, other: \"EisensteinInteger\") -> \"EisensteinInteger\":\n        return self.quo_rem(other)[1]\n\n\n# -------- class constants (must be assigned *after* the class is complete) ---\nEisensteinInteger.ZERO = EisensteinInteger(0, 0)\nEisensteinInteger.ONE = EisensteinInteger(1, 0)\n\n# ---------------------------------------------------------------------------\n# 3.  Half‑GCD  ——  sub‑quadratic gcd via size halving\n# ---------------------------------------------------------------------------\n\n\ndef half_gcd(\n    a: EisensteinInteger,\n    b: EisensteinInteger,\n) -> Tuple[EisensteinInteger, EisensteinInteger, EisensteinInteger]:\n    \"\"\"Return  (w, v, u)  with  w = a·u + b·v  and  N(w) < √N(a).\n\n    Why is that useful?  The classical Euclidean gcd repeatedly replaces the\n    *larger* input by its remainder modulo the smaller one – this shrinks one\n    argument at every step, but only by a *constant* factor, so it needs\n    O(log N) iterations.\n\n    **Half‑GCD** knocks out *half* the size (in bits) at every major step and\n    therefore runs in roughly O(log N / log log N) time.\n\n    The idea is to run the Euclidean algorithm *just long enough* for the\n    remainder’s norm to dip below √N(a).  The output coefficients u, v let us\n    continue assembling the gcd later (the full gcd algorithm calls half_gcd\n    recursively on smaller and smaller inputs).\n    \"\"\"\n    if not isinstance(a, EisensteinInteger) or not isinstance(b, EisensteinInteger):\n        raise TypeError(\"Inputs must be EisensteinInteger instances\")\n\n    # Extended Euclidean bookkeeping matrices\n    a_run, b_run = a.copy(), b.copy()\n    u, v = EisensteinInteger.ONE.copy(), EisensteinInteger.ZERO.copy()\n    u_, v_ = EisensteinInteger.ZERO.copy(), EisensteinInteger.ONE.copy()\n    # Invariants throughout the loop:\n    #     a_run =  a·u  + b·v\n    #     b_run =  a·u_ + b·v_\n\n    limit = math.isqrt(a.norm())  # √N(a)  (integer square root)\n\n    # Safety valve: more than ~2e5 iterations would imply a bug\n    for _ in range(200_000):\n        if b_run.norm() < limit or b_run.is_zero():\n            break\n        q, r = a_run.quo_rem(b_run)\n\n        # update (a_run, b_run)  and the coefficient matrix simultaneously\n        a_run, b_run = b_run, r\n        u, u_ = u_, u - q * u_\n        v, v_ = v_, v - q * v_\n    else:\n        raise RuntimeError(\"Half‑GCD failed to converge – too many steps\")\n\n    # *Return order* follows the classic Half‑GCD papers:  (w, v, u)\n    return b_run, v_, u_\n\n\nif __name__ == \"__main__\":\n    z1 = EisensteinInteger(3, 2)  # 3 + 2ω\n    z2 = EisensteinInteger(1, -1)  # 1 - ω\n\n    print(f\"z1 = {z1}\")\n    print(f\"z2 = {z2}\")\n    print(f\"z1 + z2 = {z1 + z2}\")\n    print(f\"z1 - z2 = {z1 - z2}\")\n    print(f\"z1 * z2 = {z1 * z2}\")\n    print(f\"Norm(z1) = {z1.norm()}\")\n    print(f\"Conj(z1) = {z1.conjugate()}\")\n    print(f\"-z1 = {-z1}\")\n\n    q, r = z1.quo_rem(z2)\n    print(f\"z1 // z2 = {q}\")\n    print(f\"z1 % z2 = {r}\")\n    print(f\"Check: z2 * q + r = {z2 * q + r}, Expected: {z1}\")\n\n    # Half GCD example\n    a = EisensteinInteger(10, 3)\n    b = EisensteinInteger(3, 1)\n    print(f\"\\nHalf GCD for a = {a}, b = {b}\")\n    w, v_res, u_res = half_gcd(a, b)\n    print(f\"  w = {w}\")\n    print(f\"  v = {v_res}\")\n    print(f\"  u = {u_res}\")\n    check = a * u_res + b * v_res\n    print(f\"  Check: a*u + b*v = {check}, Expected w: {w}\")\n    print(f\"  Norm(w) = {w.norm()}, Limit = {math.isqrt(a.norm())}\")\n\n    # a = EisensteinInteger(8+7j * (math.sqrt(3)/2 + 0.5j)) # Approximate large number\n    a_int = EisensteinInteger(13, 14)  # Example large int coeffs\n    b_int = EisensteinInteger(5, 3)\n    print(f\"\\nHalf GCD for a = {a_int}, b = {b_int}\")\n    w, v_res, u_res = half_gcd(a_int, b_int)\n    print(f\"  w = {w}\")\n    print(f\"  v = {v_res}\")\n    print(f\"  u = {u_res}\")\n    check = a_int * u_res + b_int * v_res\n    print(f\"  Check: a*u + b*v = {check}, Expected w: {w}\")\n    print(f\"  Norm(w) = {w.norm()}, Limit = {math.isqrt(a_int.norm())}\")\n"
  },
  {
    "path": "hydra/garaga/hints/extf_mul.py",
    "content": "from garaga import garaga_rs\nfrom garaga.algebra import ModuloCircuitElement, Polynomial, PyFelt\nfrom garaga.hints.tower_backup import E6, get_tower_object\nfrom garaga.points import (\n    direct_to_tower,\n    get_base_field,\n    get_irreducible_poly,\n    tower_to_direct,\n)\n\n\ndef nondeterministic_extension_field_mul_divmod(\n    Ps: list[list[PyFelt | ModuloCircuitElement]],\n    curve_id: int,\n    extension_degree: int,\n) -> tuple[list[PyFelt], list[PyFelt]]:\n    \"\"\"\n    From a list of Polynomials Ps = [P1, ..., Pn]\n    Returns (Q(X), R(X)) such that Π(Pi)(X) = Q(X) * P_irr(X) + R(X), for a given curve and extension degree.\n    R(X) is the result of the multiplication in the extension field.\n    Q(X) is used for verification.\n    \"\"\"\n    field = get_base_field(curve_id)\n    ps = [[c.value for c in P] for P in Ps]\n    q, r = garaga_rs.nondeterministic_extension_field_mul_divmod(\n        curve_id, extension_degree, ps\n    )\n    z_polyq_coeffs = [field(c) for c in q] if len(q) > 0 else [field.zero()]\n    z_polyr_coeffs = [field(c) for c in r] if len(r) > 0 else [field.zero()]\n    return (z_polyq_coeffs, z_polyr_coeffs)\n\n\ndef nondeterministic_square_torus(\n    A: list[PyFelt | ModuloCircuitElement],\n    curve_id: int,\n    biject_from_direct: bool = True,\n) -> list[PyFelt]:\n    \"\"\"\n    Computes 1/2 * (A(x) + x/A(x))\n    Deprecated usage as Torus based arithmetic is not used anymore with the final exp witness.\n    \"\"\"\n    A = direct_to_tower(A, curve_id, 6) if biject_from_direct else A\n    A = E6(A, curve_id)\n    SQ: list[PyFelt] = A.square_torus().felt_coeffs\n    return tower_to_direct(SQ, curve_id, 6) if biject_from_direct else SQ\n\n\ndef nondeterministic_extension_field_div(\n    A: list[PyFelt | ModuloCircuitElement],\n    B: list[PyFelt | ModuloCircuitElement],\n    curve_id: int,\n    extension_degree: int = 6,\n) -> tuple[list[PyFelt], list[PyFelt]]:\n    \"\"\"\n    From two Polynomials A and B\n    Returns (A/B)(X) mod P_irr(X)\n    Converts back and forth to tower representaion for faster inversion.\n    \"\"\"\n\n    A = direct_to_tower(A, curve_id, extension_degree)\n    B = direct_to_tower(B, curve_id, extension_degree)\n\n    A = get_tower_object(A, curve_id, extension_degree)\n    B = get_tower_object(B, curve_id, extension_degree)\n\n    DIV = A.div(B).felt_coeffs\n    return tower_to_direct(DIV, curve_id, extension_degree)\n\n\nif __name__ == \"__main__\":\n    from random import randint as rint\n\n    from garaga.curves import (\n        BLS12_381_ID,\n        BN254_ID,\n        get_base_field,\n        get_irreducible_poly,\n    )\n\n    field = get_base_field(BN254_ID)\n    p = field.p\n    # ins = [rint(0, p - 1) for _ in range(6)]\n    # sq = nondeterministic_square_torus(\n    #     [field_bn254(x) for x in ins],\n    #     BN254_ID,\n    # )\n\n    # two_e6 = E6([2, 0, 0, 0, 0, 0], BN254_ID)\n    # sq = E6(sq, BN254_ID)\n    # x = E6(ins, BN254_ID)\n\n    # print(f\"Should be V : \", x * (two_e6 * sq - x))\n\n    A = [field(rint(0, p - 1)) for _ in range(12)]\n    Q, R = nondeterministic_extension_field_mul_divmod([A, A, A], BN254_ID, 12)\n    Q, R = Polynomial(Q), Polynomial(R)\n\n    z = field(rint(0, p - 1))\n\n    P_irr = get_irreducible_poly(BN254_ID, 12)\n\n    lhs = Polynomial(A).evaluate(z)\n    lhs = lhs * lhs * lhs\n    rhs = Q.evaluate(z) * P_irr.evaluate(z) + R.evaluate(z)\n    assert lhs == rhs\n\n    # Test BLS12-381\n    field = get_base_field(BLS12_381_ID)\n    p = field.p\n    A = [field(rint(0, p - 1)) for _ in range(12)]\n    Q, R = nondeterministic_extension_field_mul_divmod([A, A], BLS12_381_ID, 12)\n    Q, R = Polynomial(Q), Polynomial(R)\n\n    def print_as_sage_poly(X: Polynomial, var_name=\"z\"):\n        coeffs = X.get_value_coeffs()\n        string = \"\"\n        for coeff in coeffs[::-1]:\n            string += f\"{hex(coeff)}*{var_name}^{coeffs.index(coeff)} + \"\n        print(string[:-3])\n\n    print_as_sage_poly(Polynomial(A))\n    print_as_sage_poly(R)\n"
  },
  {
    "path": "hydra/garaga/hints/fake_glv.py",
    "content": "#!/usr/bin/env python3\n\nimport math\nfrom dataclasses import dataclass\nfrom typing import List, Tuple\n\nimport garaga.hints.eisenstein as eisenstein\nfrom garaga.curves import CURVES, CurveID\nfrom garaga.points import G1Point\n\n\n@dataclass\nclass Lattice:\n    \"\"\"Represents a 2D lattice basis (V1, V2) derived from GLV decomposition.\n\n    Attributes:\n        V1: First basis vector [v11, v12].\n        V2: Second basis vector [v21, v22], chosen to be short.\n        Det: Determinant of the lattice basis (v11*v22 - v12*v21).\n        b1: Rounding coefficient derived from V2, used in scalar decomposition.\n        b2: Rounding coefficient derived from V1, used in scalar decomposition.\n    \"\"\"\n\n    V1: Tuple[int, int]\n    V2: Tuple[int, int]\n    Det: int\n    b1: int\n    b2: int\n\n\ndef half_gcd(mod: int, input_val: int) -> Tuple[int, int]:\n    \"\"\"\n    Computes the first vector of a GLV lattice basis for a given modulus and input.\n\n    This is a Python adaptation of a Go function likely used for cryptographic\n    scalar multiplication optimizations (GLV method).\n\n    Args:\n        mod (int): The modulus (often the group order `r`).\n        input_val (int): The input value (often the eigenvalue `lambda`).\n\n    Returns:\n        Tuple[int, int]: The components (v11, |v12|) of the first basis vector V1.\n    \"\"\"\n    lattice = precompute_lattice(mod, input_val)\n    output0 = lattice.V1[0]\n    output1 = lattice.V1[1]\n\n    # The GLV decomposition often requires the absolute value of the second component.\n    return output0, abs(output1)\n\n\ndef precompute_lattice(r: int, lam: int) -> Lattice:\n    \"\"\"\n    Computes a short 2D lattice basis related to parameters (r, lambda).\n\n    Uses a variant of the Extended Euclidean Algorithm to find short vectors\n    (v1, v2) such that v1 = [a, b] and v2 = [c, d] satisfy\n    a + b*lambda = 0 (mod r) and c + d*lambda = 0 (mod r).\n    See https://www.iacr.org/archive/crypto2001/21390189.pdf (Algorithm 3.7)\n\n    Args:\n        r (int): The modulus.\n        lam (int): The lambda value (e.g., eigenvalue in GLV).\n\n    Returns:\n        Lattice: An object containing the lattice basis vectors (V1, V2),\n                 determinant (Det), and rounding coefficients (b1, b2).\n\n    Raises:\n        ValueError: If intermediate steps lead to division by zero (e.g., lam=0 mod r)\n                    or if the final determinant is zero.\n    \"\"\"\n    # Extended Euclidean Algorithm State: [[value, s_coeff, t_coeff], ...]\n    # We maintain two states [ri, si, ti] such that ri = si*r + ti*lambda\n    euclidean_state: List[List[int]] = [\n        [r, 1, 0],  # Corresponds to r = 1*r + 0*lambda\n        [lam, 0, 1],  # Corresponds to lam = 0*r + 1*lambda\n    ]\n\n    # Compute the integer square root of r as the termination threshold\n    sqrt_r: int = int(math.isqrt(r))\n\n    # Run Euclidean algorithm until the remainder (state[1][0]) is smaller than sqrt(r)\n    while abs(euclidean_state[1][0]) >= sqrt_r:\n        current_rem, s_curr, t_curr = euclidean_state[1]\n        prev_rem, s_prev, t_prev = euclidean_state[0]\n\n        if current_rem == 0:\n            # This occurs if lambda is a multiple of r or lambda is 0.\n            raise ValueError(\n                \"Division by zero in Euclidean algorithm. Check inputs r and lam.\"\n            )\n\n        quotient: int = prev_rem // current_rem\n        next_rem: int = prev_rem % current_rem\n\n        # Update coefficients using the identity: R_next = R_prev - q * R_curr\n        # where R represents [rem, s, t]\n        s_next = s_prev - s_curr * quotient\n        t_next = t_prev - t_curr * quotient\n\n        # Shift states: current becomes previous, new becomes current\n        euclidean_state[0] = [current_rem, s_curr, t_curr]\n        euclidean_state[1] = [next_rem, s_next, t_next]\n\n    # One final step to potentially find a shorter vector combination\n    current_rem, s_curr, t_curr = euclidean_state[1]\n    prev_rem, s_prev, t_prev = euclidean_state[0]\n\n    if current_rem == 0:\n        raise ValueError(\n            \"Division by zero in Euclidean algorithm final step. Check inputs r and lam.\"\n        )\n\n    quotient = prev_rem // current_rem\n    # Calculate the next potential remainder and t-coefficient\n    final_rem = prev_rem % current_rem\n    final_t = t_prev - t_curr * quotient\n\n    # First basis vector: V1 = [current_rem, -t_curr]\n    # Satisfies current_rem + (-t_curr)*lambda = 0 mod r (since current_rem = s_curr*r + t_curr*lambda)\n    V1_list: List[int] = [current_rem, -t_curr]\n\n    # Candidate vectors for the second basis vector V2\n    # Candidate 1: [prev_rem, -t_prev]\n    cand1 = (prev_rem, -t_prev)\n    # Candidate 2: [final_rem, -final_t]\n    cand2 = (final_rem, -final_t)\n\n    # Choose the shorter candidate vector based on squared Euclidean norm (||v||^2 = x^2 + y^2)\n    norm1_sq: int = cand1[0] ** 2 + cand1[1] ** 2\n    norm2_sq: int = cand2[0] ** 2 + cand2[1] ** 2\n\n    if norm1_sq > norm2_sq:\n        V2_list: List[int] = list(cand2)\n    else:\n        V2_list = list(cand1)\n\n    # Calculate the determinant of the chosen basis {V1, V2}\n    det: int = V1_list[0] * V2_list[1] - V1_list[1] * V2_list[0]\n\n    if det == 0:\n        # Basis vectors are linearly dependent, which shouldn't happen for typical inputs.\n        raise ValueError(\n            \"Lattice determinant is zero. Input parameters might be unsuitable.\"\n        )\n\n    def round_half_away_from_zero(a: int, b: int) -> int:\n        \"\"\"Computes round(a / b), rounding ties away from zero.\n\n        Equivalent to standard mathematical rounding, differs from Python's\n        default round() which rounds ties to the nearest even number.\n        Needed to potentially match specific Go implementation behavior.\n        \"\"\"\n        if b == 0:\n            raise ValueError(\"Division by zero in rounding.\")\n        # Perform division using absolute values\n        quotient, remainder = divmod(abs(a), abs(b))\n        # Check if the remainder is large enough to round up (away from zero)\n        if remainder * 2 >= abs(b):\n            quotient += 1\n        # Restore the sign based on the original signs of a and b\n        if (a < 0) != (b < 0):\n            return -quotient  # Result is negative\n        else:\n            return quotient  # Result is positive\n\n    # Compute rounding coefficients b1, b2 used in scalar decomposition\n    # n is calculated to ensure 2^n is sufficiently larger than |det|,\n    # potentially matching Go's fixed-size integer/word alignment logic.\n    # The `+ 32 >> 6 << 6` part aligns the bit length to a multiple of 64.\n    n_bit_length = max(\n        1, det\n    ).bit_length()  # Use max(1,...) for robustness if det=0 (though checked above)\n    n: int = 2 * (((n_bit_length + 32) >> 6) << 6)\n\n    # Calculate b1 = round(2^n * V2[1] / det)\n    b1: int = round_half_away_from_zero(V2_list[1] << n, det)\n    # Calculate b2 = round(2^n * V1[1] / det)\n    b2: int = round_half_away_from_zero(V1_list[1] << n, det)\n\n    # Return the results structured in the Lattice dataclass\n    return Lattice(V1=tuple(V1_list), V2=tuple(V2_list), Det=det, b1=b1, b2=b2)\n\n\ndef split_scalar(s: int, l: Lattice) -> Tuple[int, int]:\n    \"\"\"Splits a scalar s into components (u, v) using a precomputed GLV lattice.\n\n    Based on the approach described in https://www.iacr.org/archive/crypto2001/21390189.pdf,\n    this function finds a vector (u, v) such that s = u + v*lambda (mod r),\n    where lambda and r are the parameters used to generate the lattice l.\n    The vector (u, v) is typically chosen such that u and v have smaller magnitudes than s.\n\n    Args:\n        s: The scalar to split.\n        l: The precomputed Lattice object containing basis V1, V2, determinant Det,\n           and rounding coefficients b1, b2.\n\n    Returns:\n        A tuple (u, v) representing the scalar decomposition.\n    \"\"\"\n    # Calculate intermediate values k1, k2 using the scalar and rounding coefficients\n    k1 = s * l.b1\n    k2 = -(s * l.b2)\n\n    # Determine the shift amount 'n' used during lattice precomputation\n    # This should match the logic in precompute_lattice\n    n_bit_length = max(1, l.Det).bit_length()\n    n = 2 * (((n_bit_length + 32) >> 6) << 6)\n\n    # Right-shift k1 and k2 to effectively divide by 2^n,\n    # approximating division by the determinant Det.\n    # This gives the integer coefficients for the closest lattice vector approximation.\n    k1 >>= n\n    k2 >>= n\n\n    # Calculate the lattice vector w = k1*V1 + k2*V2\n    w_vec0 = k1 * l.V1[0] + k2 * l.V2[0]\n    w_vec1 = k1 * l.V1[1] + k2 * l.V2[1]\n\n    # Calculate the final decomposition (u, v)\n    # u = s - w[0]\n    # v = -w[1]\n    u = s - w_vec0\n    v = -w_vec1\n\n    return u, v\n\n\ndef half_gcd_eisenstein_hint(\n    modulus: int, scalar: int, eigen_value: int\n) -> Tuple[int, int, int, int]:\n    glv_basis = precompute_lattice(modulus, eigen_value)\n    r = eisenstein.EisensteinInteger(glv_basis.V1[0], glv_basis.V1[1])\n    if scalar % modulus == modulus - 1:\n        scalar = 1\n    # print(f\"SPLIT SCALAR INPUT: {scalar}\")\n    sp = split_scalar(scalar, glv_basis)\n    s = eisenstein.EisensteinInteger(sp[0], sp[1])\n    # in-circuit we check that Q - [s]P = 0 or equivalently Q + [-s]P = 0\n    # so here we return -s instead of s.\n    s = -s\n    # print(f\"r: {r}, \\ns: {s}\")\n    w, v_res, _ = eisenstein.half_gcd(r, s)\n\n    # Note : outputs can be negative.\n    return w.a0, w.a1, v_res.a0, v_res.a1\n\n\nfrom garaga.hints.io import bigint_split\n\n\ndef split(x):\n    return bigint_split(x, 4, 2**64)\n\n\ndef get_glv_fake_glv_hint(\n    point: G1Point, scalar: int\n) -> tuple[G1Point, int, int, int, int]:\n    curve = CURVES[point.curve_id.value]\n    assert (\n        curve.is_endomorphism_available()\n    ), f\"Curve {point.curve_id} does not have an endomorphism, use get_fake_glv_hint instead\"\n    eigen_value = curve.eigen_value\n    u1, u2, v1, v2 = encode_glv_fake_glv_hint(\n        *half_gcd_eisenstein_hint(curve.n, scalar, eigen_value)\n    )\n    Q = point.scalar_mul(scalar)\n    return Q, u1, u2, v1, v2\n\n\ndef encode(value: int) -> int:\n    return abs(value) + 2**128 if value < 0 else value\n\n\ndef encode_glv_fake_glv_hint(\n    u1: int, u2: int, v1: int, v2: int\n) -> tuple[int, int, int, int]:\n\n    return encode(u1), encode(u2), encode(v1), encode(v2)\n\n\ndef get_fake_glv_hint(point: G1Point, scalar: int) -> tuple[G1Point, int, int]:\n    curve = CURVES[point.curve_id.value]\n    if scalar == 0:\n        scalar = 1\n    assert (\n        not curve.is_endomorphism_available()\n    ), f\"Curve {point.curve_id} has an endomorphism, use get_glv_fake_glv_hint instead\"\n    glv_basis = precompute_lattice(curve.n, scalar)\n    s1, s2 = glv_basis.V1[0], glv_basis.V1[1]\n    assert (s1 + scalar * s2) % curve.n == 0\n    assert 0 < s1 and s2 != 0\n    Q = point.scalar_mul(scalar)\n    return Q, s1, encode(s2)\n\n\ndef scalar_mul_glv_and_fake_glv(point: G1Point, scalar: int) -> G1Point:\n    curve = CURVES[point.curve_id.value]\n    assert scalar % curve.n != 0, f\"Scalar is 0 for point {point}\"\n    assert point.is_infinity() == False, f\"Point is infinity for scalar {scalar}\"\n\n    curve_id = point.curve_id\n    if not curve.is_endomorphism_available():\n        raise ValueError(\n            \"Endomorphism not available for this curve. Use fake GLV instead.\"\n        )\n\n    eigen_value = curve.eigen_value\n    third_root_of_unity = curve.third_root_of_unity\n\n    # %{ Hint :\n    u1, u2, v1, v2 = half_gcd_eisenstein_hint(curve.n, scalar, eigen_value)\n    Q = point.scalar_mul(scalar)\n    # print(f\"Q: {Q}\")\n    # %} #\n    if scalar % curve.n == curve.n - 1:\n        _scalar = 1\n        Q = G1Point.get_nG(curve_id, 2)\n    else:\n        _scalar = scalar\n\n    # print(f\"Q: {split(Q.x)}, {split(Q.y)}\")\n    # print(f\"u1: {u1}, u2: {u2}, v1: {v1}, v2: {v2}\")\n\n    # print(f\"encoded hint: {encode_glv_fake_glv_hint(u1, u2, v1, v2)}\")\n    # Verifier :\n    # We need to check that:\n    # \t\ts*(v1 + λ*v2) + u1 + λ*u2 = 0\n    assert (\n        _scalar * (v1 + eigen_value * v2) + u1 + eigen_value * u2\n    ) % curve.n == 0, f\"Wrong decomposition for scalar {scalar}\"\n\n    # Precompute -P, -Φ(P), Φ(P):\n    table_P = [None, None]\n    if u1 < 0:\n        table_P[1] = -point\n        table_P[0] = point\n    else:\n        table_P[1] = point\n        table_P[0] = -point\n\n    table_Phi_P = [None, None]\n    if u2 < 0:\n        table_Phi_P[1] = G1Point(point.x * third_root_of_unity, -point.y, curve_id)\n        table_Phi_P[0] = G1Point(point.x * third_root_of_unity, point.y, curve_id)\n    else:\n        table_Phi_P[1] = G1Point(point.x * third_root_of_unity, point.y, curve_id)\n        table_Phi_P[0] = G1Point(point.x * third_root_of_unity, -point.y, curve_id)\n\n    # precompute -Q, -Φ(Q), Φ(Q)\n    table_Q = [None, None]\n    if v1 < 0:\n        table_Q[1] = -Q\n        table_Q[0] = Q\n    else:\n        table_Q[1] = Q\n        table_Q[0] = -Q\n\n    table_Phi_Q = [None, None]\n    if v2 < 0:\n        table_Phi_Q[1] = G1Point(Q.x * third_root_of_unity, -Q.y, curve_id)\n        table_Phi_Q[0] = G1Point(Q.x * third_root_of_unity, Q.y, curve_id)\n    else:\n        table_Phi_Q[1] = G1Point(Q.x * third_root_of_unity, Q.y, curve_id)\n        table_Phi_Q[0] = G1Point(Q.x * third_root_of_unity, -Q.y, curve_id)\n\n    # precompute -P-Q, P+Q, P-Q, -P+Q, -Φ(P)-Φ(Q), Φ(P)+Φ(Q), Φ(P)-Φ(Q), -Φ(P)+Φ(Q)\n\n    table_S = [None, None, None, None]\n    table_Phi_S = [None, None, None, None]\n\n    table_S[0] = table_P[0].add(table_Q[0])  # -P-Q\n    table_S[1] = -table_S[0]  # P+Q\n    table_S[2] = table_P[1].add(table_Q[0])  # P-Q\n    table_S[3] = -table_S[2]  # -P+Q\n\n    # for i in range(4):\n    #     print(f\"\\nS{i}: {table_S[i].to_cairo_1(as_hex=False)}\\n\")\n\n    # print(f\"table_Phi_P[0]: {split(table_Phi_P[0].x)}, {split(table_Phi_P[0].y)}\")\n    # print(f\"table_Phi_Q[0]: {split(table_Phi_Q[0].x)}, {split(table_Phi_Q[0].y)}\")\n    table_Phi_S[0] = table_Phi_P[0].add(table_Phi_Q[0])  # -Φ(P)-Φ(Q)\n    table_Phi_S[1] = -table_Phi_S[0]  # Φ(P)+Φ(Q)\n    table_Phi_S[2] = table_Phi_P[1].add(table_Phi_Q[0])  # Φ(P)-Φ(Q)\n    table_Phi_S[3] = -table_Phi_S[2]  # -Φ(P)+Φ(Q)\n\n    # we suppose that the first bits of the sub-scalars are 1 and set:\n    # \t\tAcc = P + Q + Φ(P) + Φ(Q)\n    Acc = table_S[1].add(table_Phi_S[1])\n    B1 = Acc\n    # print(f\"B1: {B1.to_cairo_1(as_hex=False)}\")\n    # print(f\"B1: {split(B1.x)}, {split(B1.y)}\")\n\n    # then we add G (the base point) to Acc to avoid incomplete additions in\n    # the loop, because when doing doubleAndAdd(Acc, Bi) as (Acc+Bi)+Acc it\n    # might happen that Acc==Bi or Acc==-Bi. But now we force Acc to be\n    # different than the stored Bi. However, at the end, Acc will not be the\n    # point at infinity but [2^nbits]G.\n    #\n    # N.B.: Acc cannot be equal to G, otherwise this means G = -Φ²([s+1]P)\n    Acc = Acc.add(G1Point.get_nG(point.curve_id, 1))\n\n    # \t// u1, u2, v1, v2 < r^{1/4} (up to a constant factor).\n    # // We prove that the factor is log_(3/sqrt(3)))(r).\n    # // so we need to add 9 bits to r^{1/4}.nbits().\n    # nbits := st.Modulus().BitLen()>>2 + 9\n\n    n_bits = curve.n.bit_length() // 4 + 9\n    # n_bits = 73\n\n    def to_bits_le(x: int) -> List[int]:\n        \"\"\"\n        ToBits returns the bit representation of the Element in little-endian (LSB\n        first) order.\n        \"\"\"\n        # Convert to binary string, remove '0b' prefix, pad with zeros, and reverse\n        bits_be = bin(x)[2:].zfill(n_bits)\n        # print(bits_be)\n        return [int(b) for b in bits_be[::-1]]\n\n    u1_bits = to_bits_le(abs(u1))\n    u2_bits = to_bits_le(abs(u2))\n    v1_bits = to_bits_le(abs(v1))\n    v2_bits = to_bits_le(abs(v2))\n\n    # print(f\"length of u1_bits: {len(u1_bits)}\")\n\n    # // At each iteration we look up the point Bi from:\n    # // \t\tB1  = +P + Q + Φ(P) + Φ(Q)\n    # // \t\tB2  = +P + Q + Φ(P) - Φ(Q)\n\n    # At each iteration we look up the point Bi from:\n    # \t\tB1  = +P + Q + Φ(P) + Φ(Q)\n    # \t\tB2  = +P + Q + Φ(P) - Φ(Q)\n\n    B2 = table_S[1].add(table_Phi_S[2])\n    # \t\tB3  = +P + Q - Φ(P) + Φ(Q)\n    B3 = table_S[1].add(table_Phi_S[3])\n    # \t\tB4  = +P + Q - Φ(P) - Φ(Q)\n    B4 = table_S[1].add(table_Phi_S[0])\n    # \t\tB5  = +P - Q + Φ(P) + Φ(Q)\n    B5 = table_S[2].add(table_Phi_S[1])\n    # \t\tB6  = +P - Q + Φ(P) - Φ(Q)\n    B6 = table_S[2].add(table_Phi_S[2])\n    # \t\tB7  = +P - Q - Φ(P) + Φ(Q)\n    B7 = table_S[2].add(table_Phi_S[3])\n    # \t\tB8  = +P - Q - Φ(P) - Φ(Q)\n    B8 = table_S[2].add(table_Phi_S[0])\n    # \t\tB9  = -P + Q + Φ(P) + Φ(Q)\n    B9 = -B8\n    # \t\tB10 = -P + Q + Φ(P) - Φ(Q)\n    B10 = -B7\n    # \t\tB11 = -P + Q - Φ(P) + Φ(Q)\n    B11 = -B6\n    # \t\tB12 = -P + Q - Φ(P) - Φ(Q)\n    B12 = -B5\n    # \t\tB13 = -P - Q + Φ(P) + Φ(Q)\n    B13 = -B4\n    # \t\tB14 = -P - Q + Φ(P) - Φ(Q)\n    B14 = -B3\n    # \t\tB15 = -P - Q - Φ(P) + Φ(Q)\n    B15 = -B2\n    # \t\tB16 = -P - Q - Φ(P) - Φ(Q)\n    B16 = -B1\n\n    # print(f\"B1: {split(B1.x)}, {split(B1.y)}\")\n    # print(f\"B2: {split(B2.x)}, {split(B2.y)}\")\n    # print(f\"B3: {split(B3.x)}, {split(B3.y)}\")\n    # print(f\"B4: {split(B4.x)}, {split(B4.y)}\")\n    # print(f\"B5: {split(B5.x)}, {split(B5.y)}\")\n    # print(f\"B6: {split(B6.x)}, {split(B6.y)}\")\n    # print(f\"B7: {split(B7.x)}, {split(B7.y)}\")\n    # print(f\"B8: {split(B8.x)}, {split(B8.y)}\")\n    # print(f\"B9: {split(B9.x)}, {split(B9.y)}\")\n    # print(f\"B10: {split(B10.x)}, {split(B10.y)}\")\n    # print(f\"B11: {split(B11.x)}, {split(B11.y)}\")\n    # print(f\"B12: {split(B12.x)}, {split(B12.y)}\")\n    # print(f\"B13: {split(B13.x)}, {split(B13.y)}\")\n    # print(f\"B14: {split(B14.x)}, {split(B14.y)}\")\n    # print(f\"B15: {split(B15.x)}, {split(B15.y)}\")\n    # print(f\"B16: {split(B16.x)}, {split(B16.y)}\")\n\n    # note that half the points are negatives of the other half,\n    # hence have the same X coordinates.\n\n    Bs = [B16, B8, B14, B6, B12, B4, B10, B2, B15, B7, B13, B5, B11, B3, B9, B1]\n    # for i := nbits - 1; i > 0; i-- {\n    # print(f\"Acc; {Acc.to_cairo_1(as_hex=False)}\")\n    for i in range(n_bits - 1, 0, -1):\n        # // selectorY takes values in [0,15]\n\n        selector_y = u1_bits[i] + 2 * u2_bits[i] + 4 * v1_bits[i] + 8 * v2_bits[i]\n        # print(f\"selector_y_{i}: {selector_y}\")\n        # // selectorX takes values in [0,7] s.t.:\n        # \t\t- when selectorY < 8: selectorX = selectorY\n        # \t\t- when selectorY >= 8: selectorX = 15 - selectorY\n\n        if selector_y < 8:\n            selector_x = selector_y\n        else:\n            selector_x = 15 - selector_y\n        # print(f\"selector_x_{i}: {selector_x}\")\n        Bi = G1Point(Bs[selector_x].x, Bs[selector_y].y, point.curve_id)\n\n        # // Acc = [2]Acc + Bi\n\n        Acc = Acc.add(Acc)\n        Acc = Acc.add(Bi)\n\n    # print(\"Acc final: \", Acc.to_cairo_1(as_hex=False))\n    # i = 0\n    #\n    # // i = 0\n    # // subtract the P, Q, Φ(P), Φ(Q) if the first bits are 0\n    # tableP[0] = c.Add(tableP[0], Acc)\n    # Acc = c.Select(u1bits[0], Acc, tableP[0])\n    # tablePhiP[0] = c.Add(tablePhiP[0], Acc)\n    # Acc = c.Select(u2bits[0], Acc, tablePhiP[0])\n    # tableQ[0] = c.Add(tableQ[0], Acc)\n    # Acc = c.Select(v1bits[0], Acc, tableQ[0])\n    # tablePhiQ[0] = c.Add(tablePhiQ[0], Acc)\n    # Acc = c.Select(v2bits[0], Acc, tablePhiQ[0])\n\n    if u1_bits[0] == 0:\n        Acc = Acc.add(table_P[0])\n    if u2_bits[0] == 0:\n        Acc = Acc.add(table_Phi_P[0])\n    if v1_bits[0] == 0:\n        Acc = Acc.add(table_Q[0])\n    if v2_bits[0] == 0:\n        Acc = Acc.add(table_Phi_Q[0])\n\n    # Acc should be now equal to [2^nbits]G\n\n    gm = G1Point.get_nG(point.curve_id, 2 ** (n_bits - 1))\n    # print(f\"gm: {split(gm.x)}, {split(gm.y)}\")\n    if scalar % curve.n == curve.n - 1:\n        gm = Acc\n    assert Acc == gm, f\"Acc is not equal to [2^nbits]G, {Acc} != {gm}\"\n\n    return Q\n\n\ndef _to_bits_le(value: int, length: int) -> List[int]:\n    if value < 0:\n        raise ValueError(\"Input value for _to_bits_le must be non-negative.\")\n    if length < 0:  # zfill requires non-negative width\n        length = 0\n    return [int(b) for b in bin(value)[2:].zfill(length)][::-1]\n\n\ndef scalar_mul_fake_glv(point: G1Point, scalar: int) -> G1Point:\n    curve = CURVES[point.curve_id.value]\n    assert (\n        not curve.is_endomorphism_available()\n    ), f\"Curve {point.curve_id} has an endomorphism; this function is for curves without it.\"\n\n    # Handle scalar multiple of curve order n: result is infinity.\n    if scalar % curve.n == 0:\n        return G1Point.infinity(point.curve_id)\n    if point.is_infinity():\n        return G1Point.infinity(point.curve_id)\n\n    # === Step 2: Handle Edge Cases & Initial Q_hinted ===\n    # Q_hinted is the actual result [scalar]P. We compute it first.\n    # Verification steps below will ensure this computation was correct.\n    # Handles point=infinity correctly via G1Point.scalar_mul.\n    Q_hinted = point.scalar_mul(scalar)\n\n    # Use scalar for decomposition. scalar=0 is handled above.\n    scalar_for_decomposition = scalar\n\n    # === Step 3: Scalar Decomposition ===\n    # Decompose scalar into s1, s2 such that s1 + scalar*s2 = 0 mod n\n    glv_basis = precompute_lattice(curve.n, scalar_for_decomposition)\n    s1 = glv_basis.V1[0]\n    s2 = glv_basis.V1[1]  # Note: s2 can be negative\n    assert (\n        s1 + scalar_for_decomposition * s2\n    ) % curve.n == 0, f\"Decomposition failed: {(s1 + scalar_for_decomposition * s2)=} % {curve.n=} != 0\"\n    assert (\n        s2 != 0\n    ), \"s2 from decomposition should not be zero (required for verification logic).\"\n\n    # === Step 5: Prepare for Verification Loop ===\n    # Target bit length for decomposition components\n    nbits = 128\n    assert (\n        nbits >= (curve.n.bit_length() + 1) // 2\n    ), f\"nbits must be at least {(curve.n.bit_length() + 1) // 2}\"\n\n    s1_bits = _to_bits_le(abs(s1), nbits)\n    s2_bits = _to_bits_le(abs(s2), nbits)\n    s2_is_negative = s2 < 0\n\n    # === Step 6: Precomputation Tables for Verification ===\n    P_verify = point  # Use the original input point for verification\n\n    # Helper for tripling a point P -> P.add(P.add(P))\n    def _triple(p: G1Point) -> G1Point:\n        if p.is_infinity():\n            return p\n        p_doubled = p.add(p)\n        return p_doubled.add(p)\n\n    # Table for P_verify: [-P, P, 3P]\n    table_P_verify = [-P_verify, P_verify, _triple(P_verify)]\n\n    # Base point for R verification table is Q_hinted, potentially negated if s2 is negative.\n    R_verify_base = Q_hinted\n    R_signed_verify = -R_verify_base if s2_is_negative else R_verify_base\n\n    # Table for R_signed_verify: [-R_signed, R_signed, 3R_signed]\n    table_R_verify = [-R_signed_verify, R_signed_verify, _triple(R_signed_verify)]\n\n    # === Step 7: Accumulator Initialization ===\n    # Initialize accumulator for the verification loop.\n    # Acc = P_verify + R_signed_verify\n    Acc = table_P_verify[1].add(table_R_verify[1])\n\n    # === Step 8: Precompute T_i Points for Merged Window ===\n    # These points are combinations of table_P_verify and table_R_verify elements\n    # used in the optimized main loop (4*Acc + T computation).\n    T1 = table_P_verify[2].add(table_R_verify[2])\n    T2 = Acc  # T2 is the initial Accumulator value P + R_signed\n    T3 = table_P_verify[2].add(table_R_verify[1])\n    T4 = table_P_verify[1].add(table_R_verify[2])\n    T5 = -T2\n    T6 = -T1\n    T7 = -T4\n    T8 = -T3\n    T9 = table_P_verify[2].add(table_R_verify[0])\n    _neg_table_R_verify_2 = -table_R_verify[2]\n    T10 = table_P_verify[1].add(_neg_table_R_verify_2)\n    T11 = table_P_verify[2].add(_neg_table_R_verify_2)\n    T12 = table_R_verify[0].add(table_P_verify[1])\n    T13 = -T10\n    T14 = -T9\n    T15 = -T12\n    T16 = -T11\n\n    # selector_y maps directly to this 16-element list.\n    T_mux_candidates_original = [\n        \"T6\",\n        \"T10\",\n        \"T14\",\n        \"T2\",\n        \"T7\",\n        \"T11\",\n        \"T15\",\n        \"T3\",\n        \"T8\",\n        \"T12\",\n        \"T16\",\n        \"T4\",\n        \"T5\",\n        \"T9\",\n        \"T13\",\n        \"T1\",\n    ]\n\n    T_mux_candidates_new = [\n        \"T6\",\n        \"T7\",\n        \"T10\",\n        \"T11\",\n        \"T8\",\n        \"T5\",\n        \"T12\",\n        \"T9\",\n        \"T14\",\n        \"T15\",\n        \"T2\",\n        \"T3\",\n        \"T16\",\n        \"T13\",\n        \"T4\",\n        \"T1\",\n    ]\n\n    # ['T6', 'T7', 'T10', 'T11', 'T8', 'T5', 'T12', 'T9', 'T14', 'T15', 'T2', 'T3', 'T16', 'T13', 'T4', 'T1']\n    T_mux_candidates = [\n        T6,  # 0\n        T7,  # 1\n        T10,  # 2\n        T11,  # 3\n        T8,  # 4\n        T5,  # 5\n        T12,  # 6\n        T9,  # 7\n        T14,  # 8\n        T15,  # 9\n        T2,  # 10\n        T3,  # 11\n        T16,  # 12\n        T13,  # 13\n        T4,  # 14\n        T1,  # 15\n    ]\n\n    # for i, pt in enumerate(T_mux_candidates):\n    #     print(f\"{i} {T_mux_candidates_new[i]}: {pt.to_cairo_1(as_hex=False)}\")\n\n    # === Step 9: Main Verification Loop ===\n\n    # Handle first iteration separately if nbits is even.\n    assert nbits % 2 == 0 and nbits >= 2\n\n    # Inline the logic of _lookup2_point based on top two bits (MSB)\n    b0 = s1_bits[nbits - 1]\n    b1 = s2_bits[nbits - 1]\n    # print(f\"b0: {b0}, b1: {b1}\")\n    if not b0 and not b1:  # 00\n        _T_current = T5\n    elif b0 and not b1:  # 10\n        _T_current = T12\n    elif not b0 and b1:  # 01\n        _T_current = T15\n    else:  # b0 and b1: # 11\n        _T_current = T2\n\n    # assert _T_current == T12, f\"_T_current: {_T_current.to_cairo_1(as_hex=False)} != T2: {T2.to_cairo_1(as_hex=False)}\"\n    # Acc = 2*Acc + _T_current\n    # print(f\"Acc before first iteration: {Acc.to_cairo_1(as_hex=False)}\")\n    # print(f\"_T_current: {_T_current.to_cairo_1(as_hex=False)}\")\n    Acc = Acc.add(Acc)  # Double Acc\n    Acc = Acc.add(_T_current)\n    # print(f\"Acc before loop: {Acc.to_cairo_1(as_hex=False)}\")\n    _loop_start_idx = nbits - 2  # Start main loop from next lower index pair\n\n    # Main loop: process bits in pairs using merged additions (4*Acc + T)\n    iteration = 1\n    for i in range(_loop_start_idx, 2, -2):  # Process indices i and i-1\n        # selector_y (0-15) encodes the 4 bits: (s1[i], s2[i], s1[i-1], s2[i-1])\n        selector_y = (\n            s1_bits[i]\n            + (s2_bits[i] << 1)\n            + (s1_bits[i - 1] << 2)\n            + (s2_bits[i - 1] << 3)\n        )\n\n        selector_old = T_mux_candidates_original[selector_y]\n\n        selector_y = (\n            s1_bits[i - 1] + 2 * s1_bits[i] + 4 * (s2_bits[i - 1] + 2 * s2_bits[i])\n        )\n\n        # print(f\"selector_{iteration-1}: {selector_y}\")\n\n        selector_new = T_mux_candidates_new[selector_y]\n\n        assert (\n            selector_old == selector_new\n        ), f\"selector_old: {selector_old} != selector_new: {selector_new}\"\n\n        # Select the appropriate T point based on the 4 bits using the selectors\n        _T_current = T_mux_candidates[selector_y]\n\n        # Acc = 4*Acc + _T_current\n        Acc = Acc.add(Acc)  # Double Acc\n        Acc = Acc.add(Acc)  # Double Acc again\n        Acc = Acc.add(_T_current)\n        # print(f\"i: {i}\")\n        # if iteration % 9 == 0:\n        #     print(f\"Acc after iteration {iteration//9}: {Acc.to_cairo_1(as_hex=False)}\")\n        iteration += 1\n\n    # === Step 10: Last Merged Iteration ===\n    # Handles bits 2 and 1, with a final adjustment.\n    if nbits >= 3:\n        selector_y = (\n            s1_bits[2] + (s2_bits[2] << 1) + (s1_bits[1] << 2) + (s2_bits[1] << 3)\n        )\n        selector_y = s1_bits[1] + 2 * s1_bits[2] + 4 * (s2_bits[1] + 2 * s2_bits[2])\n\n        _T_current = T_mux_candidates[selector_y]\n\n        # Add the final adjustment term from table_R\n        _T_current = _T_current.add(table_R_verify[2])\n        # print(f\"last_selector_pt_corrected: {_T_current.to_cairo_1(as_hex=False)}\")\n        # Acc = 4*Acc + _T_current_adjusted\n        Acc = Acc.add(Acc)  # Double Acc\n        Acc = Acc.add(Acc)  # Double Acc again\n        Acc = Acc.add(_T_current)\n\n    # print(f\"Acc after loop: {Acc.to_cairo_1(as_hex=False)}\")\n    # === Step 11: Final Additions Based on Bit 0 ===\n    # Adjust Acc based on the least significant bits s1[0] and s2[0].\n    if nbits >= 1:\n        if s1_bits[0] == 0:\n            Acc = table_P_verify[0].add(Acc)  # Add -P_verify\n        if s2_bits[0] == 0:\n            Acc = table_R_verify[0].add(Acc)  # Add -R_signed_verify\n\n    # === Step 12: Final Assertion ===\n    # The final accumulator value should equal table_R_verify[2] (which is [3]R_signed_verify).\n    AccToAssert = Acc\n\n    # print(f\"AccToAssert: {AccToAssert.to_cairo_1(as_hex=False)}\")\n    # print(f\"R[2]: {table_R_verify[2].to_cairo_1(as_hex=False)}\")\n    assert (\n        AccToAssert == table_R_verify[2]\n    ), f\"Verification failed: {AccToAssert} != {table_R_verify[2]}. Scalar: {scalar}, Point Inf: {point.is_infinity()}\"\n\n    # === Step 13: Return Value ===\n    # Return the originally computed Q_hinted = [scalar]P\n    return Q_hinted\n\n\nif __name__ == \"__main__\":\n    pass\n\n    pt = G1Point(\n        x=41688611208562472964299242833\n        + 2**96 * 17729154263670546193656586433\n        + 2 ** (96 * 2) * 573097972700812243,\n        y=17058526127824350916476358273\n        + 2**96 * 14653894641525928814918228506\n        + 2 ** (96 * 2) * 711563577730354681,\n        curve_id=CurveID.GRUMPKIN,\n    )\n    scalar = (\n        77864287393115290533831713130\n        + 2**96 * 47687594959966383440346360609\n        + 2 ** (96 * 2) * 677739838819293451\n    )\n\n    _res = scalar_mul_fake_glv(pt, scalar)\n    # random.seed(0)\n    # s = 111793196543967404139194827996419963236210979610743141064269745943111491389390\n    # print(f\"scalar: {s}\")\n\n    # g = G1Point.get_nG(CurveID.SECP256K1, 1)\n    # res = scalar_mul_glv_and_fake_glv(g, s)\n\n    # # print(g.to_cairo_1())\n    # # print(res.to_cairo_1())\n\n    # from garaga.curves import *\n\n    # for curve_id in CURVES:\n    #     curve: WeierstrassCurve = CURVES[curve_id]\n    #     if curve.is_endomorphism_available():\n    #         nbits = curve.n.bit_length() // 4 + 9\n    #         used_nbits = 73\n    #         assert (\n    #             used_nbits >= nbits\n    #         ), f\"Curve {curve_id} has {nbits} bits, but used {used_nbits} bits\"\n    #         print(\n    #             f\"Curve {curve_id}: {nbits}, {G1Point.get_nG(CurveID(curve_id), 2 ** (used_nbits -1)).to_cairo_1()}\"\n    #         )\n\n    # T_mux_candidates = [\n    #     \"T6\",\n    #     \"T10\",\n    #     \"T14\",\n    #     \"T2\",\n    #     \"T7\",\n    #     \"T11\",\n    #     \"T15\",\n    #     \"T3\",\n    #     \"T8\",\n    #     \"T12\",\n    #     \"T16\",\n    #     \"T4\",\n    #     \"T5\",\n    #     \"T9\",\n    #     \"T13\",\n    #     \"T1\",\n    # ]\n    # set_original = []\n    # set_new = []\n    # map_original = {\n    #     (u, u_min_1, v, v_min_1): \"\"\n    #     for u in [0, 1]\n    #     for u_min_1 in [0, 1]\n    #     for v in [0, 1]\n    #     for v_min_1 in [0, 1]\n    # }\n    # new_T_mux_candidates = [None] * 16\n    # for bit_u in [0, 1]:\n    #     for bit_u_min_1 in [0, 1]:\n    #         for bit_v in [0, 1]:\n    #             for bit_v_min_1 in [0, 1]:\n    #                 selector_y = bit_u + 2 * bit_v + 4 * bit_u_min_1 + 8 * bit_v_min_1\n    #                 set_original.append(selector_y)\n    #                 wanted = T_mux_candidates[selector_y]\n    #                 map_original[(bit_u, bit_u_min_1, bit_v, bit_v_min_1)] = wanted\n\n    #                 needed_bit = bit_u_min_1 + 2*bit_u + 4 * (bit_v_min_1 + 2 * bit_v)\n    #                 new_T_mux_candidates[needed_bit] = wanted\n    #                 set_new.append(needed_bit)\n    #                 print(\n    #                     f\"{bit_u}, {bit_u_min_1}, {bit_v}, {bit_v_min_1} -> {selector_y} || {needed_bit} -> {wanted}\"\n    #                 )\n    # print(f\"set_original: {sorted(set_original)}\")\n    # print(f\"set_new: {sorted(set_new)}\")\n    # assert sorted(set_original) == sorted(\n    #     set_new\n    # ), \"set_original and set_new are not equal\"\n\n    # print(T_mux_candidates)\n    # print(new_T_mux_candidates)\n"
  },
  {
    "path": "hydra/garaga/hints/frobenius.py",
    "content": "from functools import lru_cache\n\nfrom garaga.algebra import BaseField, Polynomial, PyFelt\nfrom garaga.curves import CURVES, CurveID, get_irreducible_poly\nfrom garaga.hints.tower_backup import E6, E12\n\n# Cache directory path\nCACHE_DIR = \"build/frobenius_cache\"\n\n\n@lru_cache(maxsize=32)\ndef get_p_powers_of_V(curve_id: int, extension_degree: int, k: int) -> list[Polynomial]:\n    \"\"\"\n    Computes V^(i*p^k) for i in range(extension_degree), where V is the polynomial V(X) = X.\n\n    Args:\n        curve_id (int): Identifier for the curve.\n        extension_degree (int): Degree of the field extension.\n        k (int): Exponent in p^k, must be 1, 2, or 3.\n\n    Returns:\n        list[Polynomial]: List of polynomials representing V^(i*p^k) for i in range(extension_degree).\n    \"\"\"\n    assert k in [1, 2, 3], f\"Supported k values are 1, 2, 3. Received: {k}\"\n\n    field = BaseField(CURVES[curve_id].p)\n\n    V = Polynomial(\n        [field.zero() if i != 1 else field.one() for i in range(extension_degree)]\n    )\n    if extension_degree == 12:\n        V_tower = E12.from_poly(V, curve_id)\n    elif extension_degree == 6:\n        V_tower = E6.from_poly(V, curve_id)\n    else:\n        raise ValueError(f\"Unsupported extension degree: {extension_degree}\")\n\n    V_pow_E12 = [V_tower ** (i * field.p**k) for i in range(extension_degree)]\n\n    V_pow = [v.to_poly() for v in V_pow_E12]\n    return V_pow\n\n\n@lru_cache(maxsize=32)\ndef get_V_torus_powers(curve_id: int, extension_degree: int, k: int) -> Polynomial:\n    \"\"\"\n    Computes 1/V^((p^k - 1) // 2) where V is the polynomial V(X) = X.\n    This is used to compute the Frobenius automorphism in the Torus.\n    Usage is deprecated since torus arithmetic is not used anymore with the final exp witness.\n\n    Args:\n        curve_id (int): Identifier for the curve.\n        extension_degree (int): Degree of the field extension.\n        k (int): Exponent in p^k, must be 1, 2, or 3.\n\n    Returns:\n        list[Polynomial]: List of polynomials representing V^(i*p^k) for i in range(extension_degree).\n    \"\"\"\n    assert k in [1, 2, 3], f\"Supported k values are 1, 2, 3. Received: {k}\"\n\n    field = BaseField(CURVES[curve_id].p)\n    irr = get_irreducible_poly(curve_id, extension_degree)\n\n    V = Polynomial(\n        [field.zero() if i != 1 else field.one() for i in range(extension_degree)]\n    )\n\n    V_pow = V.pow((field.p**k - 1) // 2, irr)\n    inverse, _, _ = Polynomial.xgcd(V_pow, irr)\n    return inverse\n\n\ndef frobenius(\n    F: list[PyFelt], V_pow: list[Polynomial], p: int, frob_power: int, irr: Polynomial\n) -> Polynomial:\n    \"\"\"\n    Applies the Frobenius automorphism to a polynomial in a direct extension field.\n\n    Args:\n        F (list[PyFelt]): Coefficients of the polynomial.\n        V_pow (list[Polynomial]): Precomputed powers of V (using get_p_powers_of_V).\n        p (int): Prime number of the base field.\n        frob_power (int): Power of the Frobenius automorphism.\n        irr (Polynomial): Irreducible polynomial for the field extension.\n\n    Returns:\n        Polynomial: Result of applying Frobenius automorphism.\n    \"\"\"\n    assert len(F) == len(V_pow), \"Mismatch in lengths of F and V_pow.\"\n    acc = Polynomial([PyFelt(0, p)])\n    for i, f in enumerate(F):\n        acc += V_pow[i] * f\n    assert acc == (\n        Polynomial(F).pow(p**frob_power, irr)\n    ), \"Mismatch in expected result.\"\n    return acc\n\n\n@lru_cache(maxsize=32)\ndef generate_frobenius_maps(\n    curve_id, extension_degree: int, frob_power: int\n) -> tuple[list[str], list[list[tuple[int, int]]]]:\n    \"\"\"\n    Generates symbolic expressions for Frobenius map coefficients and a list of tuples with constants.\n\n    Args:\n        curve_id (CurveID): Identifier for the curve.\n        extension_degree (int): Degree of the field extension.\n        frob_power (int): Power of the Frobenius automorphism.\n\n    Returns:\n        tuple[list[str], list[list[tuple[int, int]]]]: Symbolic expressions for each coefficient and a list of tuples with constants.\n    \"\"\"\n    curve_id = curve_id if isinstance(curve_id, int) else curve_id.value\n\n    V_pow = get_p_powers_of_V(curve_id, extension_degree, frob_power)\n\n    k_expressions = [\"\" for _ in range(extension_degree)]\n    constants_list = [[] for _ in range(extension_degree)]\n    for i in range(extension_degree):\n        for f_index, poly in enumerate(V_pow):\n            if poly[i] != 0:\n                hex_value = f\"0x{poly[i].value:x}\"\n                compact_hex = (\n                    f\"{hex_value[:6]}...{hex_value[-4:]}\"\n                    if len(hex_value) > 10\n                    else hex_value\n                )\n                k_expressions[i] += f\" + {compact_hex} * f_{f_index}\"\n                constants_list[i].append([f_index, poly[i].value])\n\n    return k_expressions, constants_list\n\n\ndef get_frobenius_maps(curve_id, extension_degree, frob_power):\n    res = FROBENIUS_MAPS[curve_id][extension_degree][frob_power]\n    return res[\"k_expressions\"], res[\"constants_list\"]\n\n\nFROBENIUS_MAPS = {\n    CurveID.BN254.value: {\n        6: {\n            1: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0 + 0x12 * f_3\",\n                    \" + 0x242b...21a7 * f_1 + 0x3598...2536 * f_4\",\n                    \" + 0x2c84...048b * f_2 + 0xc33b...a7b5 * f_5\",\n                    \" + 0x3064...fd46 * f_3\",\n                    \" + 0x16c9...cba2 * f_1 + 0xc38d...dba0 * f_4\",\n                    \" + 0x2c14...8126 * f_2 + 0x3df9...f8bc * f_5\",\n                ],\n                \"constants_list\": [\n                    [[0, 0x1], [3, 0x12]],\n                    [\n                        [\n                            1,\n                            0x242B719062F6737B8481D22C6934CE844D72F250FD28D102C0D147B2F4D521A7,\n                        ],\n                        [\n                            4,\n                            0x359809094BD5C8E1B9C22D81246FFC2E794E17643AC198484B8D9094AA82536,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0x2C84BBAD27C3671562B7ADEFD44038AB3C0BBAD96FC008E7D6998C82F7FC048B,\n                        ],\n                        [\n                            5,\n                            0xC33B1C70E4FD11B6D1EAB6FCD18B99AD4AFD096A8697E0C9C36D8CA3339A7B5,\n                        ],\n                    ],\n                    [\n                        [\n                            3,\n                            0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46,\n                        ]\n                    ],\n                    [\n                        [\n                            1,\n                            0x16C9E55061EBAE204BA4CC8BD75A079432AE2A1D0B7C9DCE1665D51C640FCBA2,\n                        ],\n                        [\n                            4,\n                            0xC38DCE27E3B2CAE33CE738A184C89D94A0E78406B48F98A7B4F4463E3A7DBA0,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0x2C145EDBE7FD8AEE9F3A80B03B0B1C923685D2EA1BDEC763C13B4711CD2B8126,\n                        ],\n                        [\n                            5,\n                            0x3DF92C5B96E3914559897C6AD411FB25B75AFB7F8B1C1A56586FF93E080F8BC,\n                        ],\n                    ],\n                ],\n            },\n            2: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0\",\n                    \" + 0x3064...fd48 * f_1\",\n                    \" + 0x59e2...fffe * f_2\",\n                    \" + 0x1 * f_3\",\n                    \" + 0x3064...fd48 * f_4\",\n                    \" + 0x59e2...fffe * f_5\",\n                ],\n                \"constants_list\": [\n                    [[0, 0x1]],\n                    [\n                        [\n                            1,\n                            0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48,\n                        ]\n                    ],\n                    [[2, 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE]],\n                    [[3, 0x1]],\n                    [\n                        [\n                            4,\n                            0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48,\n                        ]\n                    ],\n                    [[5, 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE]],\n                ],\n            },\n            3: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0 + 0x12 * f_3\",\n                    \" + 0xc3a5...3ae6 * f_1 + 0x2ce0...77f4 * f_4\",\n                    \" + 0x1bfe...9cc0 * f_2 + 0x697b...2fbd * f_5\",\n                    \" + 0x3064...fd46 * f_3\",\n                    \" + 0x4f1d...86de * f_1 + 0x2429...c261 * f_4\",\n                    \" + 0x23d5...239f * f_2 + 0x1465...6087 * f_5\",\n                ],\n                \"constants_list\": [\n                    [[0, 0x1], [3, 0x12]],\n                    [\n                        [\n                            1,\n                            0xC3A5E9C462A654779C3E050C9CA2A428908A81264E2B5A5BF22F67654883AE6,\n                        ],\n                        [\n                            4,\n                            0x2CE02AA5F9BF8CD65BDD2055C255CF9D9E08C1D9345582CC92FD973C74BD77F4,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0x1BFE7B214C0294242FB81A8DCCD8A9B4441D64F34150A79753FB0CD31CC99CC0,\n                        ],\n                        [\n                            5,\n                            0x697B9C523E0390ED15DA0EC97A9B8346513297B9EFAF0F0F1A228F0D5662FBD,\n                        ],\n                    ],\n                    [\n                        [\n                            3,\n                            0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46,\n                        ]\n                    ],\n                    [\n                        [\n                            1,\n                            0x4F1DE41B3D1766FA9F30E6DEC26094F0FDF31BF98FF2631380CAB2BAAA586DE,\n                        ],\n                        [\n                            4,\n                            0x2429EFD69B073AE23E8C6565B7B72E1B0E78C27F038F14E77CFD95A083F4C261,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0x23D5E999E1910A12FEB0F6EF0CD21D04A44A9E08737F96E55FE3ED9D730C239F,\n                        ],\n                        [\n                            5,\n                            0x1465D351952F0C0588982B28B4A8AEA95364059E272122F5E8257F43BBB36087,\n                        ],\n                    ],\n                ],\n            },\n        },\n        12: {\n            1: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0 + 0x12 * f_6\",\n                    \" + 0x1d8c...5955 * f_1 + 0x217e...a71a * f_7\",\n                    \" + 0x242b...21a7 * f_2 + 0x3598...2536 * f_8\",\n                    \" + 0x2143...d5ed * f_3 + 0x1885...f771 * f_9\",\n                    \" + 0x2c84...048b * f_4 + 0xc33b...a7b5 * f_10\",\n                    \" + 0x1b00...cfa8 * f_5 + 0x215d...3977 * f_11\",\n                    \" + 0x3064...fd46 * f_6\",\n                    \" + 0x2469...62ac * f_1 + 0x12d7...a3f2 * f_7\",\n                    \" + 0x16c9...cba2 * f_2 + 0xc38d...dba0 * f_8\",\n                    \" + 0x7c03...b0e3 * f_3 + 0xf20e...275a * f_9\",\n                    \" + 0x2c14...8126 * f_4 + 0x3df9...f8bc * f_10\",\n                    \" + 0x12ac...2c4b * f_5 + 0x1563...2d9f * f_11\",\n                ],\n                \"constants_list\": [\n                    [[0, 0x1], [6, 0x12]],\n                    [\n                        [\n                            1,\n                            0x1D8C8DAEF3EEE1E81B2522EC5EB28DED6895E1CDFDE6A43F5DAA971F3FA65955,\n                        ],\n                        [\n                            7,\n                            0x217E400DC9351E774E34E2AC06EAD4000D14D1E242B29C567E9C385CE480A71A,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0x242B719062F6737B8481D22C6934CE844D72F250FD28D102C0D147B2F4D521A7,\n                        ],\n                        [\n                            8,\n                            0x359809094BD5C8E1B9C22D81246FFC2E794E17643AC198484B8D9094AA82536,\n                        ],\n                    ],\n                    [\n                        [\n                            3,\n                            0x21436D48FCB50CC60DD4EF1E69A0C1F0DD2949FA6DF7B44CBB259EF7CB58D5ED,\n                        ],\n                        [\n                            9,\n                            0x18857A58F3B5BB3038A4311A86919D9C7C6C15F88A4F4F0831364CF35F78F771,\n                        ],\n                    ],\n                    [\n                        [\n                            4,\n                            0x2C84BBAD27C3671562B7ADEFD44038AB3C0BBAD96FC008E7D6998C82F7FC048B,\n                        ],\n                        [\n                            10,\n                            0xC33B1C70E4FD11B6D1EAB6FCD18B99AD4AFD096A8697E0C9C36D8CA3339A7B5,\n                        ],\n                    ],\n                    [\n                        [\n                            5,\n                            0x1B007294A55ACCCE13FE08BEA73305FF6BDAC77C5371C546D428780A6E3DCFA8,\n                        ],\n                        [\n                            11,\n                            0x215D42E7AC7BD17CEFE88DD8E6965B3ADAE92C974F501FE811493D72543A3977,\n                        ],\n                    ],\n                    [\n                        [\n                            6,\n                            0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46,\n                        ]\n                    ],\n                    [\n                        [\n                            1,\n                            0x246996F3B4FAE7E6A6327CFE12150B8E747992778EEEC7E5CA5CF05F80F362AC,\n                        ],\n                        [\n                            7,\n                            0x12D7C0C3ED42BE419D2B22CA22CECA702EEB88C36A8B264DDE75F4F798D6A3F2,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0x16C9E55061EBAE204BA4CC8BD75A079432AE2A1D0B7C9DCE1665D51C640FCBA2,\n                        ],\n                        [\n                            8,\n                            0xC38DCE27E3B2CAE33CE738A184C89D94A0E78406B48F98A7B4F4463E3A7DBA0,\n                        ],\n                    ],\n                    [\n                        [\n                            3,\n                            0x7C03CBCAC41049A0704B5A7EC796F2B21807DC98FA25BD282D37F632623B0E3,\n                        ],\n                        [\n                            9,\n                            0xF20E129E47C9363AA7B569817E0966CBA582096FA7A164080FAED1F0D24275A,\n                        ],\n                    ],\n                    [\n                        [\n                            4,\n                            0x2C145EDBE7FD8AEE9F3A80B03B0B1C923685D2EA1BDEC763C13B4711CD2B8126,\n                        ],\n                        [\n                            10,\n                            0x3DF92C5B96E3914559897C6AD411FB25B75AFB7F8B1C1A56586FF93E080F8BC,\n                        ],\n                    ],\n                    [\n                        [\n                            5,\n                            0x12ACF2CA76FD0675A27FB246C7729F7DB080CB99678E2AC024C6B8EE6E0C2C4B,\n                        ],\n                        [\n                            11,\n                            0x1563DBDE3BD6D35BA4523CF7DA4E525E2BA6A3151500054667F8140C6A3F2D9F,\n                        ],\n                    ],\n                ],\n            },\n            2: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0\",\n                    \" + 0x3064...fd49 * f_1\",\n                    \" + 0x3064...fd48 * f_2\",\n                    \" + 0x3064...fd46 * f_3\",\n                    \" + 0x59e2...fffe * f_4\",\n                    \" + 0x59e2...ffff * f_5\",\n                    \" + 0x1 * f_6\",\n                    \" + 0x3064...fd49 * f_7\",\n                    \" + 0x3064...fd48 * f_8\",\n                    \" + 0x3064...fd46 * f_9\",\n                    \" + 0x59e2...fffe * f_10\",\n                    \" + 0x59e2...ffff * f_11\",\n                ],\n                \"constants_list\": [\n                    [[0, 0x1]],\n                    [\n                        [\n                            1,\n                            0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD49,\n                        ]\n                    ],\n                    [\n                        [\n                            2,\n                            0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48,\n                        ]\n                    ],\n                    [\n                        [\n                            3,\n                            0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46,\n                        ]\n                    ],\n                    [[4, 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE]],\n                    [[5, 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFF]],\n                    [[6, 0x1]],\n                    [\n                        [\n                            7,\n                            0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD49,\n                        ]\n                    ],\n                    [\n                        [\n                            8,\n                            0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48,\n                        ]\n                    ],\n                    [\n                        [\n                            9,\n                            0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46,\n                        ]\n                    ],\n                    [[10, 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE]],\n                    [[11, 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFF]],\n                ],\n            },\n            3: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0 + 0x12 * f_6\",\n                    \" + 0x13d0...dd76 * f_1 + 0x18a0...7a66 * f_7\",\n                    \" + 0xc3a5...3ae6 * f_2 + 0x2ce0...77f4 * f_8\",\n                    \" + 0xf20e...275a * f_3 + 0x17de...05d6 * f_9\",\n                    \" + 0x1bfe...9cc0 * f_4 + 0x697b...2fbd * f_10\",\n                    \" + 0x7a0e...c6fe * f_5 + 0x1b76...267f * f_11\",\n                    \" + 0x3064...fd46 * f_6\",\n                    \" + 0xabf8...c101 * f_1 + 0x1c93...1fd1 * f_7\",\n                    \" + 0x4f1d...86de * f_2 + 0x2429...c261 * f_8\",\n                    \" + 0x28a4...4c64 * f_3 + 0x2143...d5ed * f_9\",\n                    \" + 0x23d5...239f * f_4 + 0x1465...6087 * f_10\",\n                    \" + 0x16db...2499 * f_5 + 0x28c3...3649 * f_11\",\n                ],\n                \"constants_list\": [\n                    [[0, 0x1], [6, 0x12]],\n                    [\n                        [\n                            1,\n                            0x13D0C369615F7BB0B2BDFA8FEF85FA07122BDE8D67DFC8FABD3581AD840DDD76,\n                        ],\n                        [\n                            7,\n                            0x18A0F4219F4FDFF6FC2BF531EB331A053A35744CAC285AF5685D3F90EACF7A66,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0xC3A5E9C462A654779C3E050C9CA2A428908A81264E2B5A5BF22F67654883AE6,\n                        ],\n                        [\n                            8,\n                            0x2CE02AA5F9BF8CD65BDD2055C255CF9D9E08C1D9345582CC92FD973C74BD77F4,\n                        ],\n                    ],\n                    [\n                        [\n                            3,\n                            0xF20E129E47C9363AA7B569817E0966CBA582096FA7A164080FAED1F0D24275A,\n                        ],\n                        [\n                            9,\n                            0x17DED419ED7BE4F97FAC149BFAEFBAC11B155498DE227B850AEA3F23790405D6,\n                        ],\n                    ],\n                    [\n                        [\n                            4,\n                            0x1BFE7B214C0294242FB81A8DCCD8A9B4441D64F34150A79753FB0CD31CC99CC0,\n                        ],\n                        [\n                            10,\n                            0x697B9C523E0390ED15DA0EC97A9B8346513297B9EFAF0F0F1A228F0D5662FBD,\n                        ],\n                    ],\n                    [\n                        [\n                            5,\n                            0x7A0E052F2B1C443B5186D6AC4C723B85D3F78A3182D2DB0C413901C32B0C6FE,\n                        ],\n                        [\n                            11,\n                            0x1B76A37FBA85F3CD5DC79824A3792597356C892C39C0D06B220500933945267F,\n                        ],\n                    ],\n                    [\n                        [\n                            6,\n                            0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46,\n                        ]\n                    ],\n                    [\n                        [\n                            1,\n                            0xABF8B60BE77D7306CBEEE33576139D7F03A5E397D439EC7694AA2BF4C0C101,\n                        ],\n                        [\n                            7,\n                            0x1C938B097FD2247905924B2691FB5E5685558C04009201927EEB0A69546F1FD1,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0x4F1DE41B3D1766FA9F30E6DEC26094F0FDF31BF98FF2631380CAB2BAAA586DE,\n                        ],\n                        [\n                            8,\n                            0x2429EFD69B073AE23E8C6565B7B72E1B0E78C27F038F14E77CFD95A083F4C261,\n                        ],\n                    ],\n                    [\n                        [\n                            3,\n                            0x28A411B634F09B8FB14B900E9507E9327600ECC7D8CF6EBAB94D0CB3B2594C64,\n                        ],\n                        [\n                            9,\n                            0x21436D48FCB50CC60DD4EF1E69A0C1F0DD2949FA6DF7B44CBB259EF7CB58D5ED,\n                        ],\n                    ],\n                    [\n                        [\n                            4,\n                            0x23D5E999E1910A12FEB0F6EF0CD21D04A44A9E08737F96E55FE3ED9D730C239F,\n                        ],\n                        [\n                            10,\n                            0x1465D351952F0C0588982B28B4A8AEA95364059E272122F5E8257F43BBB36087,\n                        ],\n                    ],\n                    [\n                        [\n                            5,\n                            0x16DB366A59B1DD0B9FB1B2282A48633D3E2DDAEA200280211F25041384282499,\n                        ],\n                        [\n                            11,\n                            0x28C36E1FEE7FDBE60337D84BBCBA34A53A41F1EE50449CDC780CFBFAA5CC3649,\n                        ],\n                    ],\n                ],\n            },\n        },\n    },\n    CurveID.BLS12_381.value: {\n        6: {\n            1: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0 + 0x2 * f_3\",\n                    \" + 0x5f19...ffff * f_1\",\n                    \" + 0x1a01...aaad * f_2 + 0x1a01...aaaf * f_5\",\n                    \" + 0x1a01...aaaa * f_3\",\n                    \" + 0x1a01...aaac * f_1 + 0x1a01...aaac * f_4\",\n                    \" + 0x5f19...fffe * f_5\",\n                ],\n                \"constants_list\": [\n                    [[0x0, 0x1], [0x3, 0x2]],\n                    [\n                        [\n                            0x1,\n                            0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF,\n                        ]\n                    ],\n                    [\n                        [\n                            0x2,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD,\n                        ],\n                        [\n                            0x5,\n                            0x1A0111EA397FE6998CE8D956845E1033EFA3BF761F6622E9ABC9802928BFC912627C4FD7ED3FFFFB5DFB00000001AAAF,\n                        ],\n                    ],\n                    [\n                        [\n                            0x3,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA,\n                        ]\n                    ],\n                    [\n                        [\n                            0x1,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC,\n                        ],\n                        [\n                            0x4,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC,\n                        ],\n                    ],\n                    [\n                        [\n                            0x5,\n                            0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE,\n                        ]\n                    ],\n                ],\n            },\n            2: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0\",\n                    \" + 0x5f19...fffe * f_1\",\n                    \" + 0x1a01...aaac * f_2\",\n                    \" + 0x1 * f_3\",\n                    \" + 0x5f19...fffe * f_4\",\n                    \" + 0x1a01...aaac * f_5\",\n                ],\n                \"constants_list\": [\n                    [[0x0, 0x1]],\n                    [\n                        [\n                            0x1,\n                            0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE,\n                        ]\n                    ],\n                    [\n                        [\n                            0x2,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC,\n                        ]\n                    ],\n                    [[0x3, 0x1]],\n                    [\n                        [\n                            0x4,\n                            0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE,\n                        ]\n                    ],\n                    [\n                        [\n                            0x5,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC,\n                        ]\n                    ],\n                ],\n            },\n            3: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0 + 0x2 * f_3\",\n                    \" + 0x1a01...aaaa * f_1\",\n                    \" + 0x1a01...aaaa * f_2 + 0x1a01...aaa9 * f_5\",\n                    \" + 0x1a01...aaaa * f_3\",\n                    \" + 0x1 * f_1 + 0x1 * f_4\",\n                    \" + 0x1 * f_5\",\n                ],\n                \"constants_list\": [\n                    [[0, 0x1], [3, 0x2]],\n                    [\n                        [\n                            1,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA,\n                        ]\n                    ],\n                    [\n                        [\n                            2,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA,\n                        ],\n                        [\n                            5,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAA9,\n                        ],\n                    ],\n                    [\n                        [\n                            3,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA,\n                        ]\n                    ],\n                    [[1, 0x1], [4, 0x1]],\n                    [[5, 0x1]],\n                ],\n            },\n        },\n        12: {\n            1: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0 + 0x2 * f_6\",\n                    \" + 0x1808...14c5 * f_1 + 0x1808...14c5 * f_7\",\n                    \" + 0x5f19...ffff * f_2\",\n                    \" + 0xd5e1...9812 * f_9\",\n                    \" + 0x1a01...aaad * f_4 + 0x1a01...aaaf * f_10\",\n                    \" + 0xb659...022c * f_5 + 0xb659...022c * f_11\",\n                    \" + 0x1a01...aaaa * f_6\",\n                    \" + 0xfc3e...4af3 * f_1 + 0x1f87...95e6 * f_7\",\n                    \" + 0x1a01...aaac * f_2 + 0x1a01...aaac * f_8\",\n                    \" + 0x6af0...cc09 * f_3\",\n                    \" + 0x5f19...fffe * f_10\",\n                    \" + 0x144e...2995 * f_5 + 0xe9b7...a87f * f_11\",\n                ],\n                \"constants_list\": [\n                    [[0, 0x1], [6, 0x2]],\n                    [\n                        [\n                            1,\n                            0x18089593CBF626353947D5B1FD0C6D66BB34BC7585F5ABDF8F17B50E12C47D65CE514A7C167B027B600FEBDB244714C5,\n                        ],\n                        [\n                            7,\n                            0x18089593CBF626353947D5B1FD0C6D66BB34BC7585F5ABDF8F17B50E12C47D65CE514A7C167B027B600FEBDB244714C5,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF,\n                        ]\n                    ],\n                    [\n                        [\n                            9,\n                            0xD5E1C086FFE8016D063C6DAD7A2FFFC9072BB5785A686BCEFEEDC2E0124838BDCCF325EE5D80BE9902109F7DBC79812,\n                        ]\n                    ],\n                    [\n                        [\n                            4,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD,\n                        ],\n                        [\n                            10,\n                            0x1A0111EA397FE6998CE8D956845E1033EFA3BF761F6622E9ABC9802928BFC912627C4FD7ED3FFFFB5DFB00000001AAAF,\n                        ],\n                    ],\n                    [\n                        [\n                            5,\n                            0xB659FB20274BFB1BE8FF4D69163C08BE7302C4818171FDD17D5BE9B1D380ACD8C747CDC4AFF0E653631F5D3000F022C,\n                        ],\n                        [\n                            11,\n                            0xB659FB20274BFB1BE8FF4D69163C08BE7302C4818171FDD17D5BE9B1D380ACD8C747CDC4AFF0E653631F5D3000F022C,\n                        ],\n                    ],\n                    [\n                        [\n                            6,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA,\n                        ]\n                    ],\n                    [\n                        [\n                            1,\n                            0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3,\n                        ],\n                        [\n                            7,\n                            0x1F87C566D89C06511D3D204463F3F70A9428F0F6D8F66DFD8191D92E3EC78BE505AB5829AD8FD8459EF1424DBB895E6,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC,\n                        ],\n                        [\n                            8,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC,\n                        ],\n                    ],\n                    [\n                        [\n                            3,\n                            0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09,\n                        ]\n                    ],\n                    [\n                        [\n                            10,\n                            0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE,\n                        ]\n                    ],\n                    [\n                        [\n                            5,\n                            0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995,\n                        ],\n                        [\n                            11,\n                            0xE9B7238370B26E88C8BB2DFB1E7EC4B7D471F3CDB6DF2E24F5B1405D978EB56923783226654F19A83CD0A2CFFF0A87F,\n                        ],\n                    ],\n                ],\n            },\n            2: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0\",\n                    \" + 0x5f19...ffff * f_1\",\n                    \" + 0x5f19...fffe * f_2\",\n                    \" + 0x1a01...aaaa * f_3\",\n                    \" + 0x1a01...aaac * f_4\",\n                    \" + 0x1a01...aaad * f_5\",\n                    \" + 0x1 * f_6\",\n                    \" + 0x5f19...ffff * f_7\",\n                    \" + 0x5f19...fffe * f_8\",\n                    \" + 0x1a01...aaaa * f_9\",\n                    \" + 0x1a01...aaac * f_10\",\n                    \" + 0x1a01...aaad * f_11\",\n                ],\n                \"constants_list\": [\n                    [[0, 0x1]],\n                    [\n                        [\n                            1,\n                            0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF,\n                        ]\n                    ],\n                    [\n                        [\n                            2,\n                            0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE,\n                        ]\n                    ],\n                    [\n                        [\n                            3,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA,\n                        ]\n                    ],\n                    [\n                        [\n                            4,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC,\n                        ]\n                    ],\n                    [\n                        [\n                            5,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD,\n                        ]\n                    ],\n                    [[6, 0x1]],\n                    [\n                        [\n                            7,\n                            0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF,\n                        ]\n                    ],\n                    [\n                        [\n                            8,\n                            0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE,\n                        ]\n                    ],\n                    [\n                        [\n                            9,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA,\n                        ]\n                    ],\n                    [\n                        [\n                            10,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC,\n                        ]\n                    ],\n                    [\n                        [\n                            11,\n                            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD,\n                        ]\n                    ],\n                ],\n            },\n            3: {\n                \"k_expressions\": [\n                    \" + 0x1 * f_0 + 0x2 * f_6\",\n                    \" + 0xca2f...1299 * f_1 + 0xca2f...1299 * f_7\",\n                    \" + 0x1a01...aaaa * f_2\",\n                    \" + 0xca2f...1299 * f_9\",\n                    \" + 0x1a01...aaaa * f_4 + 0x1a01...aaa9 * f_10\",\n                    \" + 0xd5e1...9812 * f_5 + 0xd5e1...9812 * f_11\",\n                    \" + 0x1a01...aaaa * f_6\",\n                    \" + 0x6af0...cc09 * f_1 + 0xd5e1...9812 * f_7\",\n                    \" + 0x1 * f_2 + 0x1 * f_8\",\n                    \" + 0x1352...dea2 * f_3\",\n                    \" + 0x1 * f_10\",\n                    \" + 0x1352...dea2 * f_5 + 0xca2f...1299 * f_11\",\n                ],\n                \"constants_list\": [\n                    [[0, 0x1], [6, 0x2]],\n                    [\n                        [\n                            1,\n                            0xCA2F5E1C98166837AB7E0DB6BA8ACDAD404902D6DDE8C027741F672F58C729841DCCD9FCB7BF41629DDF60824381299,\n                        ],\n                        [\n                            7,\n                            0xCA2F5E1C98166837AB7E0DB6BA8ACDAD404902D6DDE8C027741F672F58C729841DCCD9FCB7BF41629DDF60824381299,\n                        ],\n                    ],\n                    [\n                        [\n                            2,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA,\n                        ]\n                    ],\n                    [\n                        [\n                            9,\n                            0xCA2F5E1C98166837AB7E0DB6BA8ACDAD404902D6DDE8C027741F672F58C729841DCCD9FCB7BF41629DDF60824381299,\n                        ]\n                    ],\n                    [\n                        [\n                            4,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA,\n                        ],\n                        [\n                            10,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAA9,\n                        ],\n                    ],\n                    [\n                        [\n                            5,\n                            0xD5E1C086FFE8016D063C6DAD7A2FFFC9072BB5785A686BCEFEEDC2E0124838BDCCF325EE5D80BE9902109F7DBC79812,\n                        ],\n                        [\n                            11,\n                            0xD5E1C086FFE8016D063C6DAD7A2FFFC9072BB5785A686BCEFEEDC2E0124838BDCCF325EE5D80BE9902109F7DBC79812,\n                        ],\n                    ],\n                    [\n                        [\n                            6,\n                            0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA,\n                        ]\n                    ],\n                    [\n                        [\n                            1,\n                            0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09,\n                        ],\n                        [\n                            7,\n                            0xD5E1C086FFE8016D063C6DAD7A2FFFC9072BB5785A686BCEFEEDC2E0124838BDCCF325EE5D80BE9902109F7DBC79812,\n                        ],\n                    ],\n                    [[2, 0x1], [8, 0x1]],\n                    [\n                        [\n                            3,\n                            0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2,\n                        ]\n                    ],\n                    [[10, 0x1]],\n                    [\n                        [\n                            5,\n                            0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2,\n                        ],\n                        [\n                            11,\n                            0xCA2F5E1C98166837AB7E0DB6BA8ACDAD404902D6DDE8C027741F672F58C729841DCCD9FCB7BF41629DDF60824381299,\n                        ],\n                    ],\n                ],\n            },\n        },\n    },\n}\n\n\nif __name__ == \"__main__\":\n    from random import randint\n\n    # Frobenius maps\n    def test_frobenius_maps():\n        constants_lists = {}\n        for extension_degree in [6, 12]:\n            for curve_id in [CurveID.BN254, CurveID.BLS12_381]:\n                if curve_id.name not in constants_lists:\n                    constants_lists[curve_id.name] = {}\n                if extension_degree not in constants_lists[curve_id.name]:\n                    constants_lists[curve_id.name][extension_degree] = {}\n                p = CURVES[curve_id.value].p\n                for frob_power in [1, 2, 3]:\n                    print(\n                        f\"\\nFrobenius^{frob_power} for {curve_id.name} Fp{extension_degree}\"\n                    )\n                    irr = get_irreducible_poly(curve_id.value, extension_degree)\n\n                    V_pow = get_p_powers_of_V(\n                        curve_id.value, extension_degree, frob_power\n                    )\n                    # print(\n                    #     f\"Torus Inv: {get_V_torus_powers(curve_id.value, extension_degree, frob_power).get_value_coeffs()}\"\n                    # )\n                    F = [PyFelt(randint(0, p - 1), p) for _ in range(extension_degree)]\n                    _ = frobenius(F, V_pow, p, frob_power, irr)\n\n                    k_expressions, constants_list = generate_frobenius_maps(\n                        curve_id, extension_degree, frob_power\n                    )\n                    print(\n                        f\"f = f0 + f1v + ... + f{extension_degree-1}v^{extension_degree-1}\"\n                    )\n                    print(\n                        f\"Frob(f) = f^p = f0 + f1v^(p^{frob_power}) + f2v^(2p^{frob_power}) + ... + f{extension_degree-1}*v^(({extension_degree-1})p^{frob_power})\"\n                    )\n                    print(\n                        f\"Frob(f) = k0 + k1v + ... + k{extension_degree-1}v^{extension_degree-1}\"\n                    )\n                    for i, expr in enumerate(k_expressions):\n                        print(f\"k_{i} = {expr}\")\n                        print(f\"Constants: {constants_list[i]}\")\n                    constants_lists[curve_id.name][extension_degree][\n                        frob_power\n                    ] = constants_list\n        return constants_lists\n\n    frobs = test_frobenius_maps()\n\n    from garaga.hints.tower_backup import E12\n\n    x = E12.random(1)\n    frobenius(\n        x.to_poly().get_coeffs(),\n        get_p_powers_of_V(1, 12, 1),\n        CURVES[1].p,\n        1,\n        get_irreducible_poly(1, 12),\n    )\n"
  },
  {
    "path": "hydra/garaga/hints/io.py",
    "content": "import functools\n\nfrom garaga.algebra import FunctionFelt, ModuloCircuitElement, PyFelt\n\nPRIME = 2**251 + 17 * 2**192 + 1  # STARK prime\n\n\ndef assert_integer(val):\n    \"\"\"\n    Asserts that the input is an integer (and not relocatable value).\n    \"\"\"\n    assert isinstance(val, int), f\"Expected integer, found: {val}.\"\n\n\ndef as_int(val, prime):\n    \"\"\"\n    Returns the lift of the given field element, val, as an integer in the range\n    (-prime/2, prime/2).\n    \"\"\"\n    assert_integer(val)\n    return val if val < prime // 2 else val - prime\n\n\ndef to_hex_str(value: str | int):\n    if isinstance(value, str):\n        value = value.strip()  # Trim whitespaces\n        if value.lower().startswith(\"0x\"):\n            try:\n                # Validate hexadecimal and return in lowercase\n                return \"0x\" + hex(int(value, 16))[2:].lower()\n            except ValueError:\n                raise ValueError(f\"Invalid hexadecimal value: {value}\")\n        else:\n            try:\n                # Convert decimal string to int then to hex\n                return hex(int(value)).lower()\n            except ValueError:\n                raise ValueError(f\"Invalid decimal value: {value}\")\n    elif isinstance(value, int):\n        return hex(value).lower()\n    else:\n        raise TypeError(f\"Expected str or int, got {type(value).__name__}\")\n\n\n# Split a bigint into its limbs.\n# Accepts int, ModuloCircuitElement, PyFelt, or bytes.\n# Returns the limbs in little-endian order.\n# Ie : x = d0 + d1 * base + d2 * base^2 + ... + dn * base^n\n# Returns the coefficients [d0, d1, d2, ..., dn]\ndef bigint_split(\n    x: int | ModuloCircuitElement | PyFelt | bytes, n_limbs: int = 4, base: int = 2**96\n) -> list[int]:\n    if isinstance(x, int):\n        pass\n    elif isinstance(x, (ModuloCircuitElement, PyFelt)):\n        x = x.value\n    elif isinstance(x, bytes):\n        x = int.from_bytes(x, byteorder=\"big\")\n    else:\n        raise ValueError(f\"Invalid type for bigint_split: {type(x)}\")\n\n    coeffs = []\n    degree = n_limbs - 1\n    for n in range(degree, 0, -1):\n        q, r = divmod(x, base**n)\n        coeffs.append(q)\n        x = r\n    coeffs.append(x)\n    return coeffs[::-1]\n\n\ndef bytes_to_u32_array(bytes_array: bytes, name: str) -> str:\n    code = f\"const {name}: [u32; {((len(bytes_array) + 3) // 4)}] = [\"\n\n    for i in range(0, len(bytes_array), 4):\n        chunk = bytes_array[i : i + 4]\n\n        u32_value = int.from_bytes(chunk, \"big\")\n        code += f\"{hex(u32_value)}, \"\n\n    code += \"];\"\n    return code\n\n\ndef to_int(value: str | int | bytes) -> int:\n    \"\"\"\n    Convert a string or integer to an integer. Supports hexadecimal and decimal strings.\n    \"\"\"\n    if isinstance(value, str):\n        value = value.strip()  # Trim whitespaces\n        if value.lower().startswith(\"0x\"):\n            try:\n                return int(value, 16)\n            except ValueError:\n                raise ValueError(f\"Invalid hexadecimal value: {value}\")\n        else:\n            try:\n                return int(value)\n            except ValueError:\n                raise ValueError(f\"Invalid decimal value: {value}\")\n    elif isinstance(value, int):\n        return value\n    elif isinstance(value, bytes):\n        return int.from_bytes(value, byteorder=\"big\")\n    else:\n        raise TypeError(f\"Expected str, int, or bytes, got {type(value).__name__}\")\n\n\ndef int_to_u2XX(x: int | PyFelt, curve_id: int = 0, as_hex=True) -> str:\n    if curve_id == 1:\n        return int_to_u384(x, as_hex)\n    else:\n        return int_to_u288(x, as_hex)\n\n\ndef int_to_u288(x: int | PyFelt, as_hex=True) -> str:\n    limbs = bigint_split(x, 3, 2**96)\n    if as_hex:\n        return f\"u288{{limb0:{hex(limbs[0])}, limb1:{hex(limbs[1])}, limb2:{hex(limbs[2])}}}\"\n    else:\n        return f\"u288{{limb0:{limbs[0]}, limb1:{limbs[1]}, limb2:{limbs[2]}}}\"\n\n\ndef int_to_u384(x: int | PyFelt, as_hex=True) -> str:\n    limbs = bigint_split(x, 4, 2**96)\n    if as_hex:\n        return f\"u384{{limb0:{hex(limbs[0])}, limb1:{hex(limbs[1])}, limb2:{hex(limbs[2])}, limb3:{hex(limbs[3])}}}\"\n    else:\n        return f\"u384{{limb0:{limbs[0]}, limb1:{limbs[1]}, limb2:{limbs[2]}, limb3:{limbs[3]}}}\"\n\n\ndef int_to_u256(x: int | PyFelt) -> str:\n    assert 0 <= x < 2**256, f\"Value {x} is too large to fit in a u256\"\n    limbs = bigint_split(x, 2, 2**128)\n    return f\"u256{{low:{hex(limbs[0])}, high:{hex(limbs[1])}}}\"\n\n\ndef int_to_u128(x: int | PyFelt) -> str:\n    assert 0 <= x < 2**128, f\"Value {x} is too large to fit in a u128\"\n    return hex(x)\n\n\ndef int_array_to_u256_array(x: list[int] | list[PyFelt]) -> str:\n    return f\"array![{', '.join([int_to_u256(i) for i in x])}]\"\n\n\ndef int_array_to_u128_array(x: list[int] | list[PyFelt]) -> str:\n    return f\"array![{', '.join([int_to_u128(i) for i in x])}]\"\n\n\ndef int_array_to_u384_array(x: list[int] | list[PyFelt], const=False) -> str:\n    if const:\n        return f\"[{', '.join([int_to_u384(i) for i in x])}]\"\n    else:\n        return f\"array![{', '.join([int_to_u384(i) for i in x])}]\"\n\n\ndef int_array_to_u288_array(x: list[int] | list[PyFelt], const=False) -> str:\n    if const:\n        return f\"[{', '.join([int_to_u288(i) for i in x])}]\"\n    else:\n        return f\"array![{', '.join([int_to_u288(i) for i in x])}]\"\n\n\ndef int_array_to_u2XX_array(\n    x: list[int] | list[PyFelt], curve_id: int, const=False\n) -> str:\n    if curve_id == 1:\n        return int_array_to_u384_array(x, const)\n    else:\n        return int_array_to_u288_array(x, const)\n\n\ndef bigint_pack(x: object, n_limbs: int, base: int) -> int:\n    val = 0\n    for i in range(n_limbs):\n        val += as_int(getattr(x, f\"d{i}\"), PRIME) * base**i\n    return val\n\n\ndef bigint_pack_ptr(memory: object, ptr: object, n_limbs: int, base: int) -> int:\n    val = 0\n    for i in range(n_limbs):\n        val += as_int(memory[ptr + i], PRIME) * base**i\n    return val\n\n\ndef pack_e12d(x: object, n_limbs: int, base: int):\n    val = []\n    for i in range(12):\n        val.append(bigint_pack(getattr(x, f\"w{i}\"), n_limbs, base))\n    return val\n\n\ndef pack_e6d(x: object, n_limbs, base):\n    val = []\n    for i in range(6):\n        val.append(bigint_pack(getattr(x, f\"v{i}\"), n_limbs, base))\n    return val\n\n\n# ptr : Uint384*\ndef pack_bigint_array(\n    ptr: object, n_limbs: int, base: int, n_elements: int, offset: int = 0\n):\n    val = []\n    for i in range(n_elements):\n        val.append(bigint_pack(ptr[offset + i], n_limbs, base))\n    return val\n\n\ndef pack_felt_ptr(memory: object, ptr: object, n_elements: int):\n    val = []\n    for i in range(n_elements):\n        val.append(memory[ptr + i])\n    return val\n\n\ndef pack_bigint_ptr(\n    memory: object,\n    ptr: object,\n    n_limbs: int,\n    base: int,\n    n_elements: int,\n):\n    val = []\n    for i in range(n_elements):\n        val.append(bigint_pack_ptr(memory, ptr + i * n_limbs, n_limbs, base))\n    return val\n\n\n#### WRITE HINTS\n\n\ndef bigint_fill(x: int, ids: object, n_limbs: int, base: int):\n    xs = bigint_split(x, n_limbs, base)\n    for i in range(n_limbs):\n        setattr(ids, f\"d{i}\", xs[i])\n    return\n\n\ndef fill_felt_ptr(x: list, memory: object, address: int):\n    for i in range(len(x)):\n        memory[address + i] = x[i]\n\n\ndef fill_limbs(limbs: list, ids: object):\n    \"\"\"\n    limbs: list of integers\n    ids: reference to Cairo object\n    \"\"\"\n    for i, limb in enumerate(limbs):\n        setattr(ids, f\"d{i}\", limb)\n    return\n\n\ndef bigint_split_array(\n    x: list[int | PyFelt | ModuloCircuitElement],\n    n_limbs: int = 4,\n    base: int = 2**96,\n    prepend_length=False,\n) -> list[int]:\n    xs = []\n    if prepend_length:\n        xs.append(len(x))\n    for e in x:\n        xs.extend(bigint_split(e, n_limbs, base))\n    return xs\n\n\ndef fill_bigint_array_into_felt_ptr(\n    x: list, memory: object, address: int, base: int, n_limbs: int\n):\n    felts = []\n    for val in x:\n        felts.extend(bigint_split(val, n_limbs, base))\n    fill_felt_ptr(felts, memory, address)\n\n\ndef fill_e6d(x: list, ids: object, n_limbs: int, base: int):\n    for i in range(6):\n        bigint_fill(x[i], getattr(ids, f\"v{i}\"), n_limbs, base)\n    return\n\n\ndef fill_e12d(x: list, ids: object, n_limbs: int, base: int):\n    for i in range(12):\n        bigint_fill(x[i], getattr(ids, f\"w{i}\"), n_limbs, base)\n    return\n\n\ndef fill_uint256(x: int, ids: object):\n    x0, x1 = split_128(x)\n    setattr(ids, \"low\", x0)\n    setattr(ids, \"high\", x1)\n    return\n\n\ndef padd_function_felt(\n    f: FunctionFelt, n: int, py_felt: bool = False, batched: bool = False\n) -> tuple[list[int], list[int], list[int], list[int]]:\n    a_num = f.a.numerator.get_coeffs() if py_felt else f.a.numerator.get_value_coeffs()\n    a_den = (\n        f.a.denominator.get_coeffs() if py_felt else f.a.denominator.get_value_coeffs()\n    )\n    b_num = f.b.numerator.get_coeffs() if py_felt else f.b.numerator.get_value_coeffs()\n    b_den = (\n        f.b.denominator.get_coeffs() if py_felt else f.b.denominator.get_value_coeffs()\n    )\n    assert len(a_num) <= n + 1 + (\n        2 if batched else 0\n    ), f\"a_num has {len(a_num)} limbs, expected at most {n + 1 + (2 if batched else 0)}\"\n    assert len(a_den) <= n + 2 + (\n        2 if batched else 0\n    ), f\"a_den has {len(a_den)} limbs, expected at most {n + 2 + (2 if batched else 0)}\"\n    assert len(b_num) <= n + 2 + (\n        2 if batched else 0\n    ), f\"b_num has {len(b_num)} limbs, expected at most {n + 2 + (2 if batched else 0)}\"\n    assert len(b_den) <= n + 5 + (\n        2 if batched else 0\n    ), f\"b_den has {len(b_den)} limbs, expected at most {n + 5 + (2 if batched else 0)}\"\n    zero = [f.a.numerator.field.zero()] if py_felt else [0]\n    a_num = a_num + zero * (n + 1 + (2 if batched else 0) - len(a_num))\n    a_den = a_den + zero * (n + 2 + (2 if batched else 0) - len(a_den))\n    b_num = b_num + zero * (n + 2 + (2 if batched else 0) - len(b_num))\n    b_den = b_den + zero * (n + 5 + (2 if batched else 0) - len(b_den))\n    return (a_num, a_den, b_num, b_den)\n\n\ndef fill_sum_dlog_div(f: FunctionFelt, n: int, ref: object, segments: object):\n    a_num, a_den, b_num, b_den = padd_function_felt(f, n)\n\n    ref.a_num = segments.gen_arg(bigint_split_array(a_num, 4, 2**96))\n    ref.a_den = segments.gen_arg(bigint_split_array(a_den, 4, 2**96))\n    ref.b_num = segments.gen_arg(bigint_split_array(b_num, 4, 2**96))\n    ref.b_den = segments.gen_arg(bigint_split_array(b_den, 4, 2**96))\n\n\ndef fill_g1_point(p: tuple[int, int], ref: object):\n    bigint_fill(p[0], ref.x, 4, 2**96)\n    bigint_fill(p[1], ref.y, 4, 2**96)\n    return\n\n\n### OTHERS\n\n\ndef flatten(t):\n    result = []\n    for item in t:\n        if isinstance(item, (tuple, list)):\n            result.extend(flatten(item))\n        else:\n            result.append(item)\n    return result\n\n\ndef split_128(a: int) -> tuple[int, int]:\n    assert (\n        0 <= a < 2**256\n    ), f\"Value {hex(a)} {a.bit_length()}bits is too large to fit in a u256\"\n    \"\"\"Takes in value, returns uint256-ish tuple (low, high).\"\"\"\n    return (a & ((1 << 128) - 1), a >> 128)\n\n\ndef rgetattr(obj, attr, *args):\n    def _getattr(obj, attr):\n        return getattr(obj, attr, *args)\n\n    return functools.reduce(_getattr, [obj] + attr.split(\".\"))\n\n\ndef rsetattr(obj, attr, val):\n    pre, _, post = attr.rpartition(\".\")\n    return setattr(rgetattr(obj, pre) if pre else obj, post, val)\n"
  },
  {
    "path": "hydra/garaga/hints/keccak256.py",
    "content": "from copy import deepcopy\nfrom functools import reduce\nfrom math import log\nfrom operator import xor\n\n# The Keccak-f round constants.\nRoundConstants = [\n    0x0000000000000001,\n    0x0000000000008082,\n    0x800000000000808A,\n    0x8000000080008000,\n    0x000000000000808B,\n    0x0000000080000001,\n    0x8000000080008081,\n    0x8000000000008009,\n    0x000000000000008A,\n    0x0000000000000088,\n    0x0000000080008009,\n    0x000000008000000A,\n    0x000000008000808B,\n    0x800000000000008B,\n    0x8000000000008089,\n    0x8000000000008003,\n    0x8000000000008002,\n    0x8000000000000080,\n    0x000000000000800A,\n    0x800000008000000A,\n    0x8000000080008081,\n    0x8000000000008080,\n    0x0000000080000001,\n    0x8000000080008008,\n]\n\nRotationConstants = [\n    [0, 1, 62, 28, 27],\n    [36, 44, 6, 55, 20],\n    [3, 10, 43, 25, 39],\n    [41, 45, 15, 21, 8],\n    [18, 2, 61, 56, 14],\n]\n\nMasks = [(1 << i) - 1 for i in range(65)]\n\n\ndef bits2bytes(x):\n    return (int(x) + 7) // 8\n\n\ndef rol(value, left, bits):\n    \"\"\"\n    Circularly rotate 'value' to the left,\n    treating it as a quantity of the given size in bits.\n    \"\"\"\n    top = value >> (bits - left)\n    bot = (value & Masks[bits - left]) << left\n    return bot | top\n\n\ndef multirate_padding(used_bytes, align_bytes):\n    \"\"\"\n    The Keccak padding function.\n    \"\"\"\n    padlen = align_bytes - used_bytes\n    if padlen == 0:\n        padlen = align_bytes\n    # note: padding done in 'internal bit ordering', wherein LSB is leftmost\n    if padlen == 1:\n        return [0x81]\n    else:\n        return [0x01] + ([0x00] * (padlen - 2)) + [0x80]\n\n\ndef keccak_f(state):\n    \"\"\"\n    This is Keccak-f permutation.  It operates on and\n    mutates the passed-in KeccakState.  It returns nothing.\n    \"\"\"\n\n    def keccak_round(a, rc):\n        w, h = state.W, state.H\n        rangew, rangeh = state.rangeW, state.rangeH\n        lanew = state.lanew\n        zero = state.zero\n\n        # theta\n        c = [reduce(xor, a[x]) for x in rangew]\n        d = [0] * w\n        for x in rangew:\n            d[x] = c[(x - 1) % w] ^ rol(c[(x + 1) % w], 1, lanew)\n            for y in rangeh:\n                a[x][y] ^= d[x]\n\n        # rho and pi\n        b = zero()\n        for x in rangew:\n            for y in rangeh:\n                b[y % w][(2 * x + 3 * y) % h] = rol(\n                    a[x][y], RotationConstants[y][x], lanew\n                )\n\n        # chi\n        for x in rangew:\n            for y in rangeh:\n                a[x][y] = b[x][y] ^ ((~b[(x + 1) % w][y]) & b[(x + 2) % w][y])\n\n        # iota\n        a[0][0] ^= rc\n\n    nr = 12 + 2 * int(log(state.lanew, 2))\n\n    for ir in range(nr):\n        keccak_round(state.s, RoundConstants[ir])\n\n\nclass KeccakState:\n    \"\"\"\n    A keccak state container.\n\n    The state is stored as a 5x5 table of integers.\n    \"\"\"\n\n    W = 5\n    H = 5\n\n    rangeW = range(W)\n    rangeH = range(H)\n\n    @staticmethod\n    def zero():\n        \"\"\"\n        Returns an zero state table.\n        \"\"\"\n        return [[0] * KeccakState.W for _ in KeccakState.rangeH]\n\n    @staticmethod\n    def format(st):\n        \"\"\"\n        Formats the given state as hex, in natural byte order.\n        \"\"\"\n        rows = []\n\n        def fmt(stx):\n            return \"%016x\" % stx\n\n        for y in KeccakState.rangeH:\n            row = []\n            for x in KeccakState.rangeW:\n                row.append(fmt(st[x][y]))\n            rows.append(\" \".join(row))\n        return \"\\n\".join(rows)\n\n    @staticmethod\n    def lane2bytes(s, w):\n        \"\"\"\n        Converts the lane s to a sequence of byte values,\n        assuming a lane is w bits.\n        \"\"\"\n        o = []\n        for b in range(0, w, 8):\n            o.append((s >> b) & 0xFF)\n        return o\n\n    @staticmethod\n    def bytes2lane(bb):\n        \"\"\"\n        Converts a sequence of byte values to a lane.\n        \"\"\"\n        r = 0\n        for b in reversed(bb):\n            r = r << 8 | b\n        return r\n\n    @staticmethod\n    def ilist2bytes(bb):\n        \"\"\"\n        Converts a sequence of byte values to a bytestring.\n        \"\"\"\n        return bytes(bb)\n\n    @staticmethod\n    def bytes2ilist(ss):\n        \"\"\"\n        Converts a string or bytestring to a sequence of byte values.\n        \"\"\"\n        return map(ord, ss) if isinstance(ss, str) else list(ss)\n\n    def __init__(self, bitrate, b):\n        self.bitrate = bitrate\n        self.b = b\n\n        # only byte-aligned\n        assert self.bitrate % 8 == 0\n        self.bitrate_bytes = bits2bytes(self.bitrate)\n\n        assert self.b % 25 == 0\n        self.lanew = self.b // 25\n\n        self.s = KeccakState.zero()\n\n    def __str__(self):\n        return KeccakState.format(self.s)\n\n    def absorb(self, bb):\n        \"\"\"\n        Mixes in the given bitrate-length string to the state.\n        \"\"\"\n        assert len(bb) == self.bitrate_bytes\n\n        bb += [0] * bits2bytes(self.b - self.bitrate)\n        i = 0\n\n        for y in self.rangeH:\n            for x in self.rangeW:\n                self.s[x][y] ^= KeccakState.bytes2lane(bb[i : i + 8])\n                i += 8\n\n    def squeeze(self):\n        \"\"\"\n        Returns the bitrate-length prefix of the state to be output.\n        \"\"\"\n        return self.get_bytes()[: self.bitrate_bytes]\n\n    def get_bytes(self):\n        \"\"\"\n        Convert whole state to a byte string.\n        \"\"\"\n        out = [0] * bits2bytes(self.b)\n        i = 0\n        for y in self.rangeH:\n            for x in self.rangeW:\n                v = KeccakState.lane2bytes(self.s[x][y], self.lanew)\n                out[i : i + 8] = v\n                i += 8\n        return out\n\n    def set_bytes(self, bb):\n        \"\"\"\n        Set whole state from byte string, which is assumed\n        to be the correct length.\n        \"\"\"\n        i = 0\n        for y in self.rangeH:\n            for x in self.rangeW:\n                self.s[x][y] = KeccakState.bytes2lane(bb[i : i + 8])\n                i += 8\n\n\nclass KeccakSponge:\n    def __init__(self, bitrate, width, padfn, permfn):\n        self.state = KeccakState(bitrate, width)\n        self.padfn = padfn\n        self.permfn = permfn\n        self.buffer = []\n\n    def copy(self):\n        return deepcopy(self)\n\n    def absorb_block(self, bb):\n        assert len(bb) == self.state.bitrate_bytes\n        self.state.absorb(bb)\n        self.permfn(self.state)\n\n    def absorb(self, s):\n        self.buffer += s\n\n        while len(self.buffer) >= self.state.bitrate_bytes:\n            self.absorb_block(self.buffer[: self.state.bitrate_bytes])\n            self.buffer = self.buffer[self.state.bitrate_bytes :]\n\n    def absorb_final(self):\n        padded = self.buffer + self.padfn(len(self.buffer), self.state.bitrate_bytes)\n        self.absorb_block(padded)\n        self.buffer = []\n\n    def squeeze_once(self):\n        rc = self.state.squeeze()\n        self.permfn(self.state)\n        return rc\n\n    def squeeze(self, l):\n        z = self.squeeze_once()\n        while len(z) < l:\n            z += self.squeeze_once()\n        return z[:l]\n\n\nclass KeccakHash:\n    \"\"\"\n    The Keccak hash function, with a hashlib-compatible interface.\n    \"\"\"\n\n    def __init__(self, bitrate_bits, capacity_bits, output_bits):\n        # our in-absorption sponge. this is never given padding\n        assert bitrate_bits + capacity_bits in (25, 50, 100, 200, 400, 800, 1600)\n        self.sponge = KeccakSponge(\n            bitrate_bits, bitrate_bits + capacity_bits, multirate_padding, keccak_f\n        )\n\n        # hashlib interface members\n        assert output_bits % 8 == 0\n        self.digest_size = bits2bytes(output_bits)\n        self.block_size = bits2bytes(bitrate_bits)\n\n    def __repr__(self):\n        inf = (\n            self.sponge.state.bitrate,\n            self.sponge.state.b - self.sponge.state.bitrate,\n            self.digest_size * 8,\n        )\n        return \"<KeccakHash with r=%d, c=%d, image=%d>\" % inf\n\n    def copy(self):\n        return deepcopy(self)\n\n    def update(self, s):\n        self.sponge.absorb(s)\n\n    def digest(self):\n        finalised = self.sponge.copy()\n        finalised.absorb_final()\n        digest = finalised.squeeze(self.digest_size)\n        return KeccakState.ilist2bytes(digest)\n\n    def hexdigest(self):\n        return self.digest().hex()\n\n    @staticmethod\n    def preset(bitrate_bits, capacity_bits, output_bits):\n        \"\"\"\n        Returns a factory function for the given bitrate, sponge capacity and output length.\n        The function accepts an optional initial input, ala hashlib.\n        \"\"\"\n\n        def create(initial_input=None):\n            h = KeccakHash(bitrate_bits, capacity_bits, output_bits)\n            if initial_input is not None:\n                h.update(initial_input)\n            return h\n\n        return create\n\n\n# Keccak parameter presets\nkeccak_256 = KeccakHash.preset(1088, 512, 256)\n"
  },
  {
    "path": "hydra/garaga/hints/multi_miller_witness.py",
    "content": "import math\n\nfrom garaga import garaga_rs\nfrom garaga.algebra import PyFelt\nfrom garaga.curves import CURVES, CurveID\nfrom garaga.hints.bls import get_root_and_scaling_factor_bls\nfrom garaga.hints.tower_backup import E12\nfrom garaga.points import G1G2Pair, G1Point, G2Point\n\n\ndef get_final_exp_witness(\n    curve_id: int, f: E12, use_rust: bool = True\n) -> tuple[E12, E12]:\n    \"\"\"\n    From a miller loop output f of a given curve ID such that f^h == 1,\n    Returns the witnesses c, w for the final exponentiation step, such that\n    - f*w = c^lambda\n    - w lies in a subfield of Fq12.\n    \"\"\"\n    if curve_id != CurveID.BN254.value and curve_id != CurveID.BLS12_381.value:\n        raise ValueError(f\"Curve ID {curve_id} not supported\")\n\n    curve = CURVES[curve_id]\n    f_values = f.value_coeffs\n\n    if use_rust:\n        c_values, wi_values = garaga_rs.get_final_exp_witness(curve_id, f_values)\n        c = E12([PyFelt(v, curve.p) for v in c_values], curve_id)\n        wi = E12([PyFelt(v, curve.p) for v in wi_values], curve_id)\n    else:\n        if curve_id == CurveID.BN254.value:\n            c, wi = find_c_e12(f, get_27th_bn254_root())\n        elif curve_id == CurveID.BLS12_381.value:\n            c, wi = get_root_and_scaling_factor_bls(f)\n        else:\n            raise ValueError(f\"Curve ID {curve_id} not supported\")\n\n    return c, wi\n\n\ndef get_lambda(curve_id: CurveID) -> int:\n    x = CURVES[curve_id.value].x\n    q = CURVES[curve_id.value].p\n    if curve_id == CurveID.BN254:\n        λ = (\n            6 * x + 2 + q - q**2 + q**3\n        )  # https://eprint.iacr.org/2008/096.pdf See section 4 for BN curves.\n        return λ\n    elif curve_id == CurveID.BLS12_381:\n        λ = -x + q\n        return λ\n    else:\n        raise ValueError(f\"Curve ID {curve_id} not supported\")\n\n\ndef get_m_dash_root(f: E12) -> E12:\n    assert f.curve_id == CurveID.BN254.value\n\n    q = CURVES[f.curve_id].p\n    x = CURVES[f.curve_id].x\n    r = CURVES[f.curve_id].n\n\n    h = (q**12 - 1) // r  # = 3^3 · l # where gcd(l, 3) = 1\n    assert math.gcd(r, h) == 1\n    base = 3\n    k, l = decompose_scalar_into_b_powers_and_remainder(h, base)\n    assert base**k * l == h, f\"{base}^k * l should be h\"\n    assert h % (base**k) == 0, f\"h should be a multiple of {base}^k\"\n    assert math.gcd(l, base) == 1, f\"l should be coprime with {base}\"\n\n    λ = (\n        6 * x + 2 + q - q**2 + q**3\n    )  # https://eprint.iacr.org/2008/096.pdf See section 4 for BN curves.\n\n    assert λ % r == 0, \"λ should be a multiple of r. See section 4.2.2\"\n    m = λ // r\n    d = math.gcd(m, h)\n\n    assert m % d == 0, \"m should be a multiple of d\"\n    m_dash = m // d  # m' = m/d\n    assert m_dash % h != 0\n    \"m/d should not divide h. See section 4.2.2 Theorem 2.\"\n    assert d * r * m_dash == λ, \"incorrect parameters\"  # sanity check\n    assert math.gcd(λ, q**12 - 1) == d * r\n    assert (\n        math.gcd(m_dash, q**12 - 1) == 1\n    ), \"m_dash should be coprime with q**12 - 1 'by construction'. See 4.3.2 computing m-th root\"\n    m_d_inv = pow(m_dash, -1, h)\n\n    return f**m_d_inv\n\n\ndef decompose_scalar_into_b_powers_and_remainder(scalar: int, b: int):\n    \"\"\"\n    Decompose scalar into b^k * l, where l is not divisible by b.\n    \"\"\"\n\n    k = 0\n    l = scalar\n\n    while l % b == 0:\n        l //= b\n        k += 1\n    assert l % b != 0, \"l should not be divisible by b\"\n    assert scalar == b**k * l, \"scalar should be the product of b^k * l\"\n    return k, l\n\n\ndef pow_3_ord(a: E12):\n    t = 0\n    FP12_ONE = E12.one(a.curve_id)\n    while a != FP12_ONE:\n        t += 1\n        a = a**3\n    return t\n\n\ndef find_cube_root(a: E12, w: E12, q: int) -> E12:\n    # Algorithm 4: Modified Tonelli-Shanks for cube roots\n    # Input: Cube residue a, cube non residue w and write p − 1 = 3^r · s such that 3 ∤ s\n    # Output: x such that x^3 = a\n    # 1 exp = (s + 1)/3\n    _, s = decompose_scalar_into_b_powers_and_remainder(q**12 - 1, 3)\n    exp: int = (s + 1) // 3\n    a_inv = a.__inv__()\n    # 2 x ← a^exp\n    x = a**exp\n    # 3 3^t ← ord((x^3)/a)\n    t = pow_3_ord(x**3 * a_inv)\n    # 4 while t != 0 do\n    while t != 0:\n        # 5 exp = (s + 1)/3\n        # 6 x ← x · w^exp\n        x = x * w**exp\n        # 7 3^t ← ord(x^3/a)\n        t = pow_3_ord(x**3 * a_inv)\n    # 8 end\n    # 9 return x\n    return x\n\n\ndef find_c_e12(f: E12, w: E12) -> tuple[E12, E12]:\n    # Algorithm 5: Algorithm for computing λ residues over BN curve\n    # Input: Output of a Miller loop f and fixed 27-th root of unity w\n    # Output: (c, wi) such that c**λ = f · wi\n    # 1 s = 0\n    s = 0\n    q = CURVES[f.curve_id].p\n    exp = (q**12 - 1) // 3\n    FP12_ONE = E12.one(f.curve_id)\n    # 2 if f**(q**k-1)/3 = 1 then\n    if f**exp == FP12_ONE:\n        # 3 continue\n        # 4 end\n        # 5 else if (f · w)**(q**k-1)/3 = 1 then\n        c = f\n    elif (f * w) ** exp == FP12_ONE:\n        # 6 s = 1\n        s = 1\n        # 7 f ← f · w\n        c = f * w\n    # 8 end\n    # 9 else\n    else:\n        # 10 s = 2\n        s = 2\n        # 11 f ← f · w**2\n        c = f * w * w\n    # 12 end\n    # 13 c ← f**r′\n    c = get_rth_root(c)\n    # 14 c ← c**m′′\n    c = get_m_dash_root(c)\n    # 15 c ← c**1/3 (by using modified Tonelli-Shanks 4)\n    c = find_cube_root(c, w, q)\n    # 16 return (c, ws)\n    return c, w**s\n\n\ndef get_rth_root(f: E12) -> E12:\n    \"\"\"\n    Computes x such that x^r = f\n    \"\"\"\n    r = CURVES[f.curve_id].n\n    h = (CURVES[f.curve_id].p ** 12 - 1) // r\n    r_inv = pow(r, -1, h)\n    res = f**r_inv\n    # assert res**r == f, \"res**r should be f\"\n    return res\n\n\ndef get_27th_bn254_root():\n    \"\"\"\n    Retrieve a 27th root of unity over BN254 Fp^12 that isn't a 9th root of unity.\n    \"\"\"\n    root_27th = E12(\n        [\n            0,\n            0,\n            0,\n            0,\n            8204864362109909869166472767738877274689483185363591877943943203703805152849,\n            17912368812864921115467448876996876278487602260484145953989158612875588124088,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n        ],\n        CurveID.BN254.value,\n    )\n    FP12_ONE = E12.one(CurveID.BN254.value)\n    assert root_27th**27 == FP12_ONE, \"root_27th**27 should be one\"\n    assert root_27th**9 != FP12_ONE, \"root_27th**9 should not be one\"\n    return root_27th\n\n\ndef get_miller_loop_output(curve_id: CurveID, will_be_one: bool = True) -> E12:\n    \"\"\"\n    Returns a random miller loop output f such that f**h = 1\n    \"\"\"\n    g1, g2 = G1Point.gen_random_point(curve_id), G2Point.gen_random_point(curve_id)\n    if will_be_one:\n        # Miller (-g1, g2) * Miller (g1, g2)\n        f = G1G2Pair.miller([G1G2Pair(-g1, g2), G1G2Pair(g1, g2)])\n        h = (CURVES[curve_id.value].p ** 12 - 1) // CURVES[curve_id.value].n\n        assert f**h == E12.one(curve_id.value), \"f**h should be one\"\n    else:\n        f = G1G2Pair.miller([G1G2Pair(g1, g2)])\n\n    return f\n\n\nif __name__ == \"__main__\":\n\n    def test_bn254():\n        f = get_miller_loop_output(CurveID.BN254)\n        x = CURVES[CurveID.BN254.value].x\n        q = CURVES[CurveID.BN254.value].p\n        λ = (\n            6 * x + 2 + q - q**2 + q**3\n        )  # https://eprint.iacr.org/2008/096.pdf See section 4 for BN curves.\n\n        c, wi = find_c_e12(f, get_27th_bn254_root())\n        print(f\"wi: {wi.value_coeffs}\")\n        c_inv = c.__inv__()\n        result = c_inv**λ * f * wi\n        assert result == E12.one(CurveID.BN254.value), \"pairing not 1\"\n\n    for i in range(10):\n        test_bn254()\n        print(f\"Test {i} passed\")\n"
  },
  {
    "path": "hydra/garaga/hints/neg_3.py",
    "content": "def neg_3_base_le(scalar: int) -> list[int]:\n    \"\"\"\n    Decomposes a scalar into base -3 representation.\n    :param scalar: The integer to be decomposed.\n    :return: A list of coefficients in base -3 representation. (Least significant bit first),\n    with digits [-1, 0, 1] such that scalar = sum((-3) ** i * d for (i, d) in enumerate(digits))\n    \"\"\"\n    if scalar == 0:\n        return [0]\n    digits = []\n    while scalar != 0:\n        remainder = scalar % 3\n        if (\n            remainder == 2\n        ):  # if the remainder is 2, we set it to -1 and add 1 to the next digit\n            remainder = -1\n            scalar += 1\n        # For remainder 1 and 0, no change is required\n        digits.append(remainder)\n        scalar = -(scalar // 3)  # divide by -3 for the next digit\n\n    return digits\n\n\ndef construct_digit_vectors(es: list[int]) -> list[list[int]]:\n    dss_ = [neg_3_base_le(e) for e in es]  # Base -3 digits\n    max_len = max(len(ds) for ds in dss_)\n    dss_ = [ds + [0] * (max_len - len(ds)) for ds in dss_]\n    # Transposing the matrix\n    dss = [[dss_[row][col] for row in range(len(dss_))] for col in range(max_len)]\n    return dss\n\n\ndef positive_negative_multiplicities(digits: list[int]) -> tuple[int, int]:\n\n    sum_p = sum((-3) ** i for (i, d) in enumerate(digits) if d == 1)\n    sum_n = sum((-3) ** i for (i, d) in enumerate(digits) if d == -1)\n\n    return (sum_p, sum_n)\n\n\ndef scalar_to_base_neg3_le(u128: int) -> tuple[int, int, int, int]:\n    def sign(felt252: int) -> int:\n        # In cairo, the felt252 :\n        # - is considered positive if it is in [0, STARK//2[\n        # - is considered negative if it is in ]STARK//2, STARK[\n        # Where STARK = 2**251+ 17* 2**192 + 1\n        # Note :  value being exactly STARK//2 will not happen in the construction here.\n        if felt252 > 0:\n            return 1\n        elif felt252 < 0:\n            return -1\n        else:\n            # Note : the case where the input is 0, the sign does not matter.\n            # Any value could be returned, so choose whatever is more performant in implementation.\n            return 0\n\n    digits = neg_3_base_le(u128)\n\n    # Even if input is u128, both sum_p and sum_n might be larger and negative. Output of positive_negative_multiplicities should be felt252.\n\n    sum_p, sum_n = positive_negative_multiplicities(digits)\n\n    # return type : felt252, felt252, felt252, felt252\n    return (abs(sum_p), abs(sum_n), sign(sum_p), sign(sum_n))\n\n\nif __name__ == \"__main__\":\n    print(positive_negative_multiplicities(neg_3_base_le(2**128)))\n"
  },
  {
    "path": "hydra/garaga/hints/tower_backup.py",
    "content": "\"\"\"\nTower based arithmetic for BN254 and BLS12-381 on Fq2, Fq6, Fq12.\n\"\"\"\n\nimport random\nfrom dataclasses import dataclass\n\nfrom garaga import garaga_rs\nfrom garaga.algebra import ModuloCircuitElement, Polynomial, PyFelt\nfrom garaga.curves import CURVES, get_base_field\nfrom garaga.points import direct_to_tower, tower_to_direct\n\n\n@dataclass(slots=True)\nclass E2:\n    a0: int\n    a1: int\n    p: int\n\n    def __str__(self) -> str:\n        return f\"({(self.a0)} + {self.a1}*u)\"\n\n    def __eq__(self, other):\n        return self.a0 == other.a0 and self.a1 == other.a1\n\n    @staticmethod\n    def zero(p: int):\n        return E2(0, 0, p)\n\n    @staticmethod\n    def one(p: int):\n        return E2(1, 0, p)\n\n    @staticmethod\n    def random(p: int):\n        return E2(random.randint(0, p - 1), random.randint(0, p - 1), p)\n\n    @property\n    def felt_coeffs(self) -> list[PyFelt]:\n        return [PyFelt(self.a0, self.p), PyFelt(self.a1, self.p)]\n\n    def __add__(self, other):\n        a0 = (self.a0 + other.a0) % self.p\n        a1 = (self.a1 + other.a1) % self.p\n        return E2(a0, a1, self.p)\n\n    def __radd__(self, other):\n        return self.__add__(other)\n\n    def __sub__(self, other):\n        if isinstance(other, E2):\n            a0 = (self.a0 - other.a0) % self.p\n            a1 = (self.a1 - other.a1) % self.p\n            return E2(a0, a1, self.p)\n        elif isinstance(other, int):\n            return E2((self.a0 - other) % self.p, (self.a1 - other) % self.p, self.p)\n        return NotImplemented\n\n    def __rsub__(self, other):\n        return self.__neg__().__add__(other)\n\n    def __mul__(self, other):\n        if isinstance(other, E2):\n            a = (self.a0 + self.a1) * (other.a0 + other.a1) % self.p\n            b, c = self.a0 * other.a0 % self.p, self.a1 * other.a1 % self.p\n            return E2((b - c) % self.p, (a - b - c) % self.p, self.p)\n        elif isinstance(other, int):\n            return E2(self.a0 * other % self.p, self.a1 * other % self.p, self.p)\n        return NotImplemented\n\n    def __rmul__(self, other):\n        return self.__mul__(other)\n\n    def __inv__(self):\n        t0, t1 = (self.a0 * self.a0 % self.p, self.a1 * self.a1 % self.p)\n        t0 = (t0 + t1) % self.p\n        t1 = pow(t0, -1, self.p)\n        return E2(self.a0 * t1 % self.p, -(self.a1 * t1) % self.p, self.p)\n\n    def div(self, other):\n        if isinstance(other, E2):\n            return self * other.__inv__()\n        return NotImplemented\n\n    def __pow__(self, p: int):\n        \"\"\"\n        Compute x**p in F_p^2 using square-and-multiply algorithm.\n        Args:\n        p: The exponent, a non-negative integer.\n        Returns:\n        x**p in F_p^2, represented similarly as x.\n        \"\"\"\n        assert isinstance(p, int) and p >= 0\n\n        # Handle the easy cases.\n        if p == 0:\n            # x**0 = 1, where 1 is the multiplicative identity in F_p^2.\n            return E2(1, 0, self.p)\n        elif p == 1:\n            # x**1 = x.\n            return self\n\n        # Start the computation.\n        result = self.one(\n            self.p\n        )  # Initialize result as the multiplicative identity in F_p^2.\n        temp = self  # Initialize temp as self.\n\n        # Loop through each bit of the exponent p.\n        for bit in reversed(bin(p)[2:]):  # [2:] to strip the \"0b\" prefix.\n            if bit == \"1\":\n                result = result * temp\n            temp = temp * temp\n\n        return result\n\n    def __truediv__(self, other):\n        if isinstance(other, E2):\n            return self * other.__inv__()\n        elif isinstance(other, int):\n            return self * pow(other, -1, self.p)\n\n        return NotImplemented\n\n    def __rtruediv__(self, other):\n        if isinstance(other, E2):\n            return other * self.__inv__()\n        elif isinstance(other, int):\n            return other * self.__inv__()\n\n        return NotImplemented\n\n    def __neg__(self):\n        return E2(-self.a0 % self.p, -self.a1 % self.p, self.p)\n\n    def conjugate(self):\n        return E2(self.a0, -self.a1 % self.p, self.p)\n\n\n@dataclass(slots=True, init=False)\nclass E6:\n    b0: E2\n    b1: E2\n    b2: E2\n    curve_id: int\n    non_residue: E2\n\n    def __init__(self, x: list[int | PyFelt | E2], curve_id: int):\n        curve = CURVES[curve_id]\n        self.curve_id = curve_id\n        self.non_residue = E2(curve.nr_a0, curve.nr_a1, curve.p)\n        if isinstance(x[0], int):\n            self.b0 = E2(x[0], x[1], curve.p)\n            self.b1 = E2(x[2], x[3], curve.p)\n            self.b2 = E2(x[4], x[5], curve.p)\n        elif isinstance(x[0], E2):\n            self.b0 = x[0]\n            self.b1 = x[1]\n            self.b2 = x[2]\n        elif isinstance(x[0], PyFelt):\n            self.b0 = E2(x[0].value, x[1].value, curve.p)\n            self.b1 = E2(x[2].value, x[3].value, curve.p)\n            self.b2 = E2(x[4].value, x[5].value, curve.p)\n        else:\n            raise ValueError(f\"Invalid type {type(x[0])}\")\n\n    @property\n    def coeffs(self) -> list[int]:\n        return [self.b0.a0, self.b0.a1, self.b1.a0, self.b1.a1, self.b2.a0, self.b2.a1]\n\n    @property\n    def felt_coeffs(self) -> list[PyFelt]:\n        return [PyFelt(c, self.b0.p) for c in self.coeffs]\n\n    @property\n    def value_coeffs(self) -> list[int]:\n        return [\n            self.b0.a0,\n            self.b0.a1,\n            self.b1.a0,\n            self.b1.a1,\n            self.b2.a0,\n            self.b2.a1,\n        ]\n\n    @staticmethod\n    def from_poly(poly: Polynomial, curve_id: int):\n        field = get_base_field(curve_id)\n        coeffs = poly.get_coeffs()\n        coeffs = coeffs + [field(0)] * (6 - len(coeffs))\n        coeffs = direct_to_tower(coeffs, curve_id, 6)\n        return E6(coeffs, curve_id)\n\n    def to_poly(self) -> Polynomial:\n        field = get_base_field(self.curve_id)\n        coeffs = [field(c) for c in self.value_coeffs]\n        coeffs = tower_to_direct(coeffs, self.curve_id, 6)\n        return Polynomial(coeffs)\n\n    @staticmethod\n    def zero(curve_id: int):\n        p = CURVES[curve_id].p\n        return E6([E2.zero(p), E2.zero(p), E2.zero(p)], curve_id)\n\n    @staticmethod\n    def one(curve_id: int):\n        p = CURVES[curve_id].p\n        return E6([E2.one(p), E2.zero(p), E2.zero(p)], curve_id)\n\n    @staticmethod\n    def random(curve_id: int):\n        p = CURVES[curve_id].p\n        return E6([E2.random(p), E2.random(p), E2.random(p)], curve_id)\n\n    def __str__(self) -> str:\n        return f\"{self.b0} + {self.b1}*v + {self.b2}*v^2\"\n\n    def __add__(self, other):\n        if isinstance(other, E6):\n            return E6(\n                [self.b0 + other.b0, self.b1 + other.b1, self.b2 + other.b2],\n                self.curve_id,\n            )\n        raise NotImplementedError\n\n    def __sub__(self, other):\n        if isinstance(other, E6):\n            return E6(\n                [self.b0 - other.b0, self.b1 - other.b1, self.b2 - other.b2],\n                self.curve_id,\n            )\n        raise NotImplementedError\n\n    def __neg__(self):\n        return E6([-self.b0, -self.b1, -self.b2], self.curve_id)\n\n    def __mul__(self, other):\n        x0, x1, x2 = self.b0, self.b1, self.b2\n        y0, y1, y2 = other.b0, other.b1, other.b2\n\n        t0 = x0 * y0\n        t1 = x1 * y1\n        t2 = x2 * y2\n\n        c0 = t0 + self.non_residue * ((x1 + x2) * (y1 + y2) - t1 - t2)\n        c1 = (x0 + x1) * (y0 + y1) - t0 - t1 + self.non_residue * t2\n        c2 = (x0 + x2) * (y0 + y2) - t0 - t2 + t1\n        return E6([c0, c1, c2], self.curve_id)\n\n    def __rmul__(self, other):\n        return self.__mul__(other)\n\n    def __inv__(self):\n        t0, t1, t2 = self.b0 * self.b0, self.b1 * self.b1, self.b2 * self.b2\n        t3, t4, t5 = self.b0 * self.b1, self.b0 * self.b2, self.b1 * self.b2\n        c0 = t0 - self.non_residue * t5\n        c1 = self.non_residue * t2 - t3\n        c2 = t1 - t4\n        t6 = self.b0 * c0\n        d1 = self.b2 * c1\n        d2 = self.b1 * c2\n        d1 = self.non_residue * (d1 + d2)\n        t6 = t6 + d1\n        t6 = t6.__inv__()\n        return E6([c0 * t6, c1 * t6, c2 * t6], self.curve_id)\n\n    def mul_by_non_residue(self):\n        return E6([self.non_residue * self.b2, self.b0, self.b1], self.curve_id)\n\n    def square_torus(self):\n        # SQ = 1/2(x+ v/x) <=> v = x (2SQ - x)\n        one_over_2 = E6([pow(2, -1, self.b0.p), 0, 0, 0, 0, 0], self.curve_id)\n        v = E6([0, 0, 1, 0, 0, 0], self.curve_id)\n        x_inv = self.__inv__()\n        v_x_inv = v * x_inv\n        sq = one_over_2 * (self + v_x_inv)\n        return sq\n\n    def div(self, other):\n        if isinstance(other, E6):\n            return self * other.__inv__()\n        return NotImplementedError\n\n    def __pow__(self, p: int):\n        \"\"\"\n        Compute x**p in F_p^6 using square-and-multiply algorithm.\n        Args:\n        p: The exponent, a non-negative integer.\n        Returns:\n        x**p in F_p^6, represented similarly as x.\n        \"\"\"\n        assert isinstance(p, int), f\"Invalid exponent {p=}\"\n\n        # Handle the easy cases.\n        if p == 0:\n            # x**0 = 1, where 1 is the multiplicative identity in F_p^2.\n            return self.one(self.curve_id)\n        elif p == 1:\n            # x**1 = x.\n            return self\n        elif p < 0:\n            return self.__inv__() ** (-p)\n\n        # Start the computation.\n        result = self.one(\n            self.curve_id\n        )  # Initialize result as the multiplicative identity in F_p^2.\n        temp = self  # Initialize temp as self.\n\n        # Loop through each bit of the exponent p.\n        for bit in reversed(bin(p)[2:]):  # [2:] to strip the \"0b\" prefix.\n            if bit == \"1\":\n                result = result * temp\n            temp = temp * temp\n\n        return result\n\n\n@dataclass(slots=True, init=False)\nclass E12:\n    c0: E6\n    c1: E6\n    curve_id: int\n\n    def __init__(self, x: list[PyFelt | int | E6], curve_id: int):\n        self.curve_id = curve_id\n        if isinstance(x[0], (PyFelt, int)) and len(x) == 12:\n            self.c0 = E6(x=x[0:6], curve_id=curve_id)\n            self.c1 = E6(x=x[6:12], curve_id=curve_id)\n        elif type(x[0] == E6 and len(x) == 2):\n            self.c0 = x[0]\n            self.c1 = x[1]\n        else:\n            raise ValueError\n\n    def __hash__(self):\n        return hash((tuple(self.value_coeffs), self.curve_id))\n\n    @property\n    def value_coeffs(self) -> list[int]:\n        return [\n            self.c0.b0.a0,\n            self.c0.b0.a1,\n            self.c0.b1.a0,\n            self.c0.b1.a1,\n            self.c0.b2.a0,\n            self.c0.b2.a1,\n            self.c1.b0.a0,\n            self.c1.b0.a1,\n            self.c1.b1.a0,\n            self.c1.b1.a1,\n            self.c1.b2.a0,\n            self.c1.b2.a1,\n        ]\n\n    def print_as_sage_poly(self, var_name: str = \"x\"):\n        field = get_base_field(self.curve_id)\n        coeffs = [field(c) for c in self.value_coeffs]\n        coeffs = tower_to_direct(coeffs, self.curve_id, 12)\n        return Polynomial(coeffs).print_as_sage_poly(var_name)\n\n    @staticmethod\n    def from_poly(poly: Polynomial, curve_id: int):\n        field = get_base_field(curve_id)\n        coeffs = poly.get_coeffs()\n        coeffs = coeffs + [field(0)] * (12 - len(coeffs))\n        coeffs = direct_to_tower(coeffs, curve_id, 12)\n        return E12(coeffs, curve_id)\n\n    @staticmethod\n    def from_direct(coeffs: list[PyFelt | ModuloCircuitElement], curve_id: int):\n        coeffs = direct_to_tower([c.felt for c in coeffs], curve_id, 12)\n        return E12(coeffs, curve_id)\n\n    def to_poly(self) -> Polynomial:\n        field = get_base_field(self.curve_id)\n        coeffs = [field(c) for c in self.value_coeffs]\n        coeffs = tower_to_direct(coeffs, self.curve_id, 12)\n        return Polynomial(coeffs)\n\n    def to_direct(self) -> list[PyFelt]:\n        field = get_base_field(self.curve_id)\n        coeffs = [field(c) for c in self.value_coeffs]\n        coeffs = tower_to_direct(coeffs, self.curve_id, 12)\n        return coeffs\n\n    @property\n    def order(self):\n        return self.c0.b0.p**12\n\n    @property\n    def felt_coeffs(self) -> list[PyFelt]:\n        return [PyFelt(c, self.c0.b0.p) for c in self.value_coeffs]\n\n    @staticmethod\n    def one(curve_id: int):\n        return E12([E6.one(curve_id), E6.zero(curve_id)], curve_id)\n\n    @staticmethod\n    def zero(curve_id: int):\n        return E12([E6.zero(curve_id), E6.zero(curve_id)], curve_id)\n\n    @staticmethod\n    def random(curve_id: int):\n        field = get_base_field(curve_id)\n        return E12([field(random.randint(0, field.p - 1)) for _ in range(12)], curve_id)\n\n    def __mul__(self, other):\n        a = self.c0 + self.c1\n        b = other.c0 + other.c1\n        a = a * b\n        b = self.c0 * other.c0\n        c = self.c1 * other.c1\n        z1 = a - b - c\n        c = c.mul_by_non_residue()\n        z0 = c + b\n        return E12([z0, z1], self.curve_id)\n\n    def conjugate(self):\n        return E12([self.c0, -self.c1], self.curve_id)\n\n    def square(self):\n        c0 = self.c0 - self.c1\n        c3 = -(self.c1.mul_by_non_residue()) + self.c0\n        c2 = self.c0 * self.c1\n        c0 = (c0 * c3) + c2\n        c1 = c2 + c2\n        c2 = c2.mul_by_non_residue()\n        c0 = c0 + c2\n        return E12([c0, c1], self.curve_id)\n\n    def __inv__(self):\n        t0, t1 = self.c0 * self.c0, self.c1 * self.c1\n        tmp = t1.mul_by_non_residue()\n        t0 = t0 - tmp\n        t1 = t0.__inv__()\n        c0 = self.c0 * t1\n        c1 = -self.c1 * t1\n        return E12([c0, c1], curve_id=self.curve_id)\n\n    def div(self, other):\n        if isinstance(other, E12):\n            return self * other.__inv__()\n        raise NotImplementedError\n\n    def __pow__(self, p: int):\n        \"\"\"\n        Compute x**p in F_p^12 using square-and-multiply algorithm.\n        Args:\n        p: The exponent, a non-negative integer.\n        Returns:\n        x**p in F_p^12, represented similarly as x.\n        \"\"\"\n        assert isinstance(p, int), f\"Invalid exponent {p=}\"\n\n        # Handle the easy cases.\n        if p == 0:\n            # x**0 = 1, where 1 is the multiplicative identity in F_p^2.\n            return self.one(self.curve_id)\n        elif p == 1:\n            # x**1 = x.\n            return self\n        elif p < 0:\n            return self.__inv__() ** (-p)\n\n        # Start the computation.\n        result = self.one(\n            self.curve_id\n        )  # Initialize result as the multiplicative identity in F_p^2.\n        temp = self  # Initialize temp as self.\n\n        # Loop through each bit of the exponent p.\n        for bit in reversed(bin(p)[2:]):  # [2:] to strip the \"0b\" prefix.\n            if bit == \"1\":\n                result = result * temp\n            temp = temp.square()\n\n        return result\n\n    def final_exp(self, use_rust: bool = True):\n        if use_rust:\n            coeffs = garaga_rs.final_exp(self.curve_id, self.value_coeffs)\n            return E12(coeffs, self.curve_id)\n        else:\n            cofactor = CURVES[self.curve_id].final_exp_cofactor\n            h = (\n                cofactor\n                * (CURVES[self.curve_id].p ** 12 - 1)\n                // CURVES[self.curve_id].n\n            )\n            return self**h\n\n    def serialize(self) -> bytes:\n        # Implement serialization like ark-ff:\n        serialized = bytearray()\n        bit_size = CURVES[self.curve_id].p.bit_length()\n        byte_size = (bit_size + 7) // 8\n        for c in self.value_coeffs[::-1]:\n            serialized.extend(c.to_bytes(byte_size, byteorder=\"big\"))\n\n        return bytes(serialized)\n\n\ndef get_tower_object(x: list[PyFelt], curve_id: int, extension_degree: int):\n    if extension_degree == 2:\n        return E2(x[0].value, x[1].value, x[0].p)\n\n    if extension_degree == 6:\n        return E6(x, curve_id)\n    elif extension_degree == 12:\n        return E12(x, curve_id)\n    else:\n        raise ValueError\n"
  },
  {
    "path": "hydra/garaga/modulo_circuit.py",
    "content": "from dataclasses import dataclass, field\nfrom enum import Enum, auto\nfrom typing import List, Union\n\nfrom garaga.algebra import BaseField, ModuloCircuitElement, PyFelt, get_sparsity\nfrom garaga.curves import BASE, CURVES, N_LIMBS, STARK, CurveID\nfrom garaga.hints.io import bigint_split\nfrom garaga.modulo_circuit_structs import (\n    Cairo1SerializableStruct,\n    GenericT,\n    u128,\n    u256,\n    u384,\n)\n\nBATCH_SIZE = 1  # Batch Size, only used in cairo 0 mode.\n\n\nclass WriteOps(Enum):\n    \"\"\"\n    Enum for the source of a write operation in the value segment.\n    -CONSTANT | INPUT: The value was written by coping N_LIMBS from the allocation pointer to the value segment.\n    -COMMIT: The value was written as a result of a hint value from the prover, and needs to be hashed.\n    -WITNESS: Same as COMMIT, but do not need to be hashed.\n    -FELT: The value was written by coping N_LIMBS from the allocation pointer,\n           as a result of a non-deterministic felt252 to UInt384 decomposition.\n           In CairoZero, the value segment is increased by 1 due to an extra range check needed.\n    -BUILTIN: The value was written by the modulo builtin as result of a ADD or MUL instruction.\n    \"\"\"\n\n    CONSTANT = auto()\n    INPUT = auto()\n    COMMIT = auto()\n    WITNESS = auto()\n    FELT = auto()\n    BUILTIN = auto()\n\n\nclass ModBuiltinOps(Enum):\n    \"\"\"\n    Enum for the modulo builtin operations.\n    \"\"\"\n\n    ADD = \"+\"\n    MUL = \"*\"\n\n\nclass CairoVMOps(Enum):\n    ASSERT_EQ = \"==\"\n\n\n@dataclass(slots=True, frozen=True)\nclass ModuloCircuitInstruction:\n    operation: ModBuiltinOps\n    left_offset: int\n    right_offset: int\n    result_offset: int\n    comment: str | None\n\n\n@dataclass(slots=True, frozen=True)\nclass ValueSegmentItem:\n    emulated_felt: PyFelt\n    write_source: WriteOps\n    instruction: None | ModuloCircuitInstruction\n\n    @property\n    def value(self) -> int:\n        return self.emulated_felt.value\n\n    @property\n    def p(self):\n        return self.emulated_felt.p\n\n    @property\n    def felt(self):\n        return self.emulated_felt\n\n\n@dataclass(slots=True, init=False)\nclass ValueSegment:\n    segment: dict[int, ValueSegmentItem]\n    assert_eq_instructions: list[ModuloCircuitInstruction]\n    offset: int\n    n_limbs: int\n    debug: bool\n    name: str\n    output: list[ModuloCircuitElement]\n    segment_stacks: dict[WriteOps, dict[int, ValueSegmentItem]]\n    output_structs: list[Cairo1SerializableStruct] | None\n\n    def __init__(self, name: str, debug: bool = False, compilation_mode: int = 0):\n        self.segment: dict[int, ValueSegmentItem] = dict()\n        self.assert_eq_instructions: list[ModuloCircuitInstruction] = []\n        self.output: list[ModuloCircuitElement] = []\n        self.offset = 0\n        self.n_limbs = N_LIMBS\n        self.debug = debug\n        self.name = name\n        self.segment_stacks = {key: dict() for key in WriteOps}\n        self.output_structs = None if compilation_mode == 0 else []\n\n    def __len__(self) -> int:\n        return len(self.segment)\n\n    def __getitem__(self, key: int) -> ValueSegmentItem:\n        return self.segment[key]\n\n    @property\n    def input(self) -> list[ModuloCircuitElement]:\n        combined_items = [\n            (offset, item)\n            for stack in [\n                WriteOps.INPUT,\n                WriteOps.COMMIT,\n                WriteOps.WITNESS,\n                WriteOps.FELT,\n            ]\n            for offset, item in self.segment_stacks[stack].items()\n        ]\n        combined_items.sort(key=lambda x: x[0])  # Sort by offset\n\n        return [\n            ModuloCircuitElement(item.emulated_felt, offset)\n            for offset, item in combined_items\n        ]\n\n    def write_to_segment(self, item: ValueSegmentItem) -> int:\n        offset = self.offset\n        self.segment[offset] = item\n        self.segment_stacks[item.write_source][offset] = item\n        self.offset += N_LIMBS\n        if item.write_source == WriteOps.FELT:\n            self.offset += 1\n        return offset\n\n    def non_interactive_transform(self) -> \"ValueSegment\":\n        \"\"\"\n        Rebuild a new ValueSegment by re-ordering the current one in this order:\n        CONSTANT\n        INPUT\n        COMMIT\n        WITNESS\n        FELT\n        BUILTIN\n        Order matters!\n        \"\"\"\n        res = ValueSegment(self.name)\n        offset_map = {}\n        for stacks_key in [\n            WriteOps.CONSTANT,\n            WriteOps.INPUT,\n            WriteOps.COMMIT,\n            WriteOps.WITNESS,\n            WriteOps.FELT,\n            WriteOps.BUILTIN,\n        ]:\n            if self.debug:\n                print(stacks_key, len(self.segment_stacks[stacks_key]))\n            for old_offset, item in self.segment_stacks[stacks_key].items():\n                # print(offset_map)\n                if item.instruction is None:\n                    new_offset = res.write_to_segment(item)\n                else:\n                    # print(item.instruction)\n                    new_offset = res.write_to_segment(\n                        ValueSegmentItem(\n                            item.emulated_felt,\n                            item.write_source,\n                            ModuloCircuitInstruction(\n                                operation=item.instruction.operation,\n                                left_offset=offset_map.get(\n                                    item.instruction.left_offset, res.offset\n                                ),\n                                right_offset=offset_map.get(\n                                    item.instruction.right_offset, res.offset\n                                ),\n                                result_offset=offset_map.get(\n                                    item.instruction.result_offset, res.offset\n                                ),\n                                comment=item.instruction.comment,\n                            ),\n                        )\n                    )\n\n                offset_map[old_offset] = new_offset\n        # Those are builtins instructions that did not create any new value.\n        for assert_eq_instruction in self.assert_eq_instructions:\n            res.assert_eq_instructions.append(\n                ModuloCircuitInstruction(\n                    operation=assert_eq_instruction.operation,\n                    left_offset=offset_map[assert_eq_instruction.left_offset],\n                    right_offset=offset_map[assert_eq_instruction.right_offset],\n                    result_offset=offset_map[assert_eq_instruction.result_offset],\n                    comment=assert_eq_instruction.comment,\n                )\n            )\n        new_output = []\n        new_output_structs = None if self.output_structs is None else []\n        for elmt in self.output:\n            new_output.append(ModuloCircuitElement(elmt.felt, offset_map[elmt.offset]))\n\n        if self.output_structs is not None:\n            for struct in self.output_structs:\n                new_output_structs.append(\n                    struct.__class__(\n                        struct.name,\n                        [\n                            ModuloCircuitElement(elt.felt, offset_map[elt.offset])\n                            for elt in struct.elmts\n                        ],\n                    )\n                )\n\n        res.output = new_output\n        res.output_structs = new_output_structs\n        return res\n\n    def get_dw_lookups(self) -> dict:\n        \"\"\"\n        Returns the DW arrays for the compiled circuit.\n        Only relevant in Cairo 0 mode.\n        \"\"\"\n        dw_arrays = {\n            \"constants_ptr\": [],\n            \"add_offsets_ptr\": [],\n            \"mul_offsets_ptr\": [],\n            \"output_offsets_ptr\": [],\n            \"poseidon_indexes_ptr\": [],\n        }\n        for _, item in self.segment_stacks[WriteOps.CONSTANT].items():\n            dw_arrays[\"constants_ptr\"].append(\n                bigint_split(item.value, self.n_limbs, BASE)\n            )\n        for write_op in [WriteOps.BUILTIN, WriteOps.WITNESS]:\n            for result_offset, item in self.segment_stacks[write_op].items():\n                if not item.instruction:\n                    continue\n                # print(item.instruction)\n                dw_arrays[\n                    item.instruction.operation.name.lower() + \"_offsets_ptr\"\n                ].append(\n                    (\n                        item.instruction.left_offset,\n                        item.instruction.right_offset,\n                        item.instruction.result_offset,\n                        item.instruction.comment,\n                    )\n                )\n        for assert_eq_instruction in self.assert_eq_instructions:\n            dw_arrays[\n                assert_eq_instruction.operation.name.lower() + \"_offsets_ptr\"\n            ].append(\n                (\n                    assert_eq_instruction.left_offset,\n                    assert_eq_instruction.right_offset,\n                    assert_eq_instruction.result_offset,\n                    assert_eq_instruction.comment,\n                )\n            )\n        for output_elmt in self.output:\n            dw_arrays[\"output_offsets_ptr\"].append(output_elmt.offset)\n\n        # print(\"dw_arrays[add_offsets_ptr]\", dw_arrays[\"add_offsets_ptr\"])\n        return dw_arrays\n\n    def print(self):\n        # ANSI escape codes for some colors\n        RED = \"\\033[31m\"  # Red text\n        GREEN = \"\\033[32m\"  # Green text\n        BLUE = \"\\033[34m\"  # Blue text\n        ORANGE = \"\\033[33m\"  # Orange text\n        RESET = \"\\033[0m\"  # Reset to default color\n\n        # print(f\"{RED}This will be red!{RESET}\")\n        # print(f\"{GREEN}This will be green!{RESET}\")\n\n        for i, (offset, val) in enumerate(self.segment.items()):\n            row = \"\"\n            row += f\"{BLUE}{'['+str(i)+']':^7}{RESET}|{ORANGE}{'['+str(offset)+']':^7}{RESET}|\"\n            if val.instruction:\n                row += f\"{str(val.instruction.left_offset)+str(val.instruction.operation.value)+str(val.instruction.right_offset)+'='+str(val.instruction.result_offset):^9}|\"\n            else:\n                row += f\"{'_':^9}|\"\n            row += f\"{val.write_source.name:^8}|\"\n            import numpy as np\n\n            row += f\"\\t{RED}{np.base_repr(val.emulated_felt.value, base=36)}{RESET} {val.instruction.comment if val.instruction else ''}\"\n\n            print(row)\n\n    def summarize(self):\n        all_instructions = {\n            item.instruction for item in self.segment.values() if item.instruction\n        }\n        all_assert_eq_instructions = set(self.assert_eq_instructions)\n\n        all_instructions_except_assert_eq = (\n            all_instructions - all_assert_eq_instructions\n        )\n        add_count: int = 0\n        mul_count: int = 0\n        for instruction in all_instructions_except_assert_eq:\n            if instruction.operation.name == \"ADD\":\n                add_count += 1\n            elif instruction.operation.name == \"MUL\":\n                mul_count += 1\n        return add_count, mul_count, len(all_assert_eq_instructions)\n\n\nclass ModuloCircuit:\n    \"\"\"\n    Represents a modulo circuit capable of performing arithmetic operations on base field elements,\n    storing constants, and caching powers of base field elements.\n\n    Attributes:\n        circuit_name (str): The name of the circuit.\n        last_offset (int): The last used offset in the circuit's memory.\n        N_LIMBS (int): The number of limbs used in the circuit.\n        values_segment (dict[int, BaseFieldElement]): A dictionary mapping offsets to base field elements.\n        add_offsets (list[tuple]): A list of tuples representing the offsets involved in addition operations.\n        mul_offsets (list[tuple]): A list of tuples representing the offsets involved in multiplication operations.\n        constants (dict[str, ModuloElement]): A dictionary mapping constant names to their ModuloElement representations.\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        curve_id: int,\n        generic_circuit: bool = False,\n        generic_modulus: bool = False,\n        compilation_mode: int = 0,\n    ) -> None:\n        assert (\n            len(name) <= 31\n        ), f\"Name '{name}' is too long to fit in a felt252, size is: {len(name)}\"\n        self.name = name\n        self.class_name = \"ModuloCircuit\"\n        self.curve_id = curve_id\n        self.field = BaseField(CURVES[curve_id].p)\n        self.N_LIMBS = 4\n        self.values_segment: ValueSegment = ValueSegment(\n            name=name, compilation_mode=compilation_mode\n        )\n        self.constants: dict[int, ModuloCircuitElement] = dict()\n        self.generic_circuit = generic_circuit\n        self.generic_modulus = (\n            generic_modulus  # Generic modulus has precedence over generic_circuit\n        )\n        self.compilation_mode = compilation_mode\n        self.exact_output_refs_needed = None\n        self.input_structs: list[Cairo1SerializableStruct] = []\n        self.do_not_inline = False\n\n    @property\n    def values_offset(self) -> int:\n        return self.values_segment.offset\n\n    @property\n    def output(self) -> list[ModuloCircuitElement]:\n        return self.values_segment.output\n\n    @property\n    def input(self) -> list[ModuloCircuitElement]:\n        return self.values_segment.input\n\n    @property\n    def output_structs(self) -> list[Cairo1SerializableStruct]:\n        return self.values_segment.output_structs\n\n    @property\n    def continuous_output(self) -> bool:\n        # Only useful in cairo 0 mode.\n        return all(\n            self.output[i + 1].offset - self.output[i].offset == N_LIMBS\n            for i in range(len(self.output) - 1)\n        )\n\n    @property\n    def witnesses(self) -> list[PyFelt]:\n        # Only useful in cairo 0 mode.\n        return [\n            self.values_segment.segment_stacks[WriteOps.WITNESS][offset].felt\n            for offset in sorted(self.values_segment.segment_stacks[WriteOps.WITNESS])\n        ]\n\n    def is_empty_circuit(self) -> bool:\n        return len(self.values_segment.segment_stacks[WriteOps.BUILTIN]) == 0\n\n    def write_element(\n        self,\n        elmt: PyFelt | int,\n        write_source: WriteOps = WriteOps.INPUT,\n        instruction: ModuloCircuitInstruction | None = None,\n    ) -> ModuloCircuitElement:\n        \"\"\"\n        Register an emulated field element to the circuit given its value and the write source.\n        Returns a ModuloCircuitElement representing the written element with its offset as identifier.\n        \"\"\"\n        assert isinstance(elmt, PyFelt) or isinstance(\n            elmt, int\n        ), f\"Expected PyFelt or int, got {type(elmt)}\"\n        if isinstance(elmt, int):\n            elmt = self.field(elmt)\n        value_offset = self.values_segment.write_to_segment(\n            ValueSegmentItem(\n                elmt,\n                write_source,\n                instruction,\n            )\n        )\n        res = ModuloCircuitElement(elmt, value_offset)\n        return res\n\n    def write_struct(\n        self,\n        struct: Cairo1SerializableStruct,\n        write_source: WriteOps = WriteOps.INPUT,\n    ) -> Union[\n        ModuloCircuitElement,\n        List[ModuloCircuitElement],\n        List[List[Union[ModuloCircuitElement, List[ModuloCircuitElement]]]],\n    ]:\n        all_pyfelt = all(type(elmt) == PyFelt for elmt in struct.elmts)\n        all_cairo1serializablestruct = all(\n            isinstance(elmt, Cairo1SerializableStruct) for elmt in struct.elmts\n        )\n        assert (\n            all_pyfelt or all_cairo1serializablestruct\n        ), f\"Expected list of PyFelt or Cairo1SerializableStruct, got {[type(elmt) for elmt in struct.elmts]}\"\n\n        if all_pyfelt:\n            self.input_structs.append(struct)\n            if len(struct) == 1 and isinstance(struct, (u384, u256, u128, GenericT)):\n                return self.write_element(struct.elmts[0], write_source)\n            else:\n                return self.write_elements(struct.elmts, write_source)\n        elif all_cairo1serializablestruct:\n            result = [self.write_struct(elmt, write_source) for elmt in struct.elmts]\n            # Ensure only the larger struct is appended\n            self.input_structs = [\n                s for s in self.input_structs if s not in struct.elmts\n            ]\n            self.input_structs.append(struct)\n            return result\n\n    def write_elements(\n        self,\n        elmts: list[PyFelt],\n        operation: WriteOps = WriteOps.INPUT,\n        sparsity: list[int] = None,\n    ) -> list[ModuloCircuitElement]:\n        if sparsity is not None:\n            assert len(sparsity) == len(\n                elmts\n            ), f\"Expected sparsity of length {len(elmts)}, got {len(sparsity)}\"\n            vals = [\n                (\n                    self.write_element(elmt, operation)\n                    if sparsity[i] != 0\n                    else self.set_or_get_constant(0)\n                )\n                for i, elmt in enumerate(elmts)\n            ]\n        else:\n            vals = [self.write_element(elmt, operation, None) for elmt in elmts]\n        return vals\n\n    def write_cairo_native_felt(self, native_felt: PyFelt):\n        assert (\n            self.compilation_mode == 0\n        ), \"write_cairo_native_felt is not supported in cairo 1 mode\"\n        assert isinstance(\n            native_felt, PyFelt\n        ), f\"Expected PyFelt, got {type(native_felt)}\"\n        assert 0 <= native_felt.value < STARK\n        res = self.write_element(elmt=native_felt, write_source=WriteOps.FELT)\n        return res\n\n    def write_sparse_constant_elements(\n        self, elmts: list[PyFelt]\n    ) -> tuple[list[ModuloCircuitElement], list[int]]:\n        sparsity = get_sparsity(elmts)\n        elements = []\n        for elmt, s in zip(elmts, sparsity):\n            match s:\n                case 0:\n                    # Mocked 0 element not written to the circuit. Be careful to pass sparsity when evaluating.\n                    elements.append(ModuloCircuitElement(self.field.zero(), -1))\n                case 2:\n                    # Mocked 1 element not written to the circuit. Be careful to pass sparsity when evaluating.\n                    elements.append(ModuloCircuitElement(self.field.one(), -1))\n                case _:\n                    elements.append(self.set_or_get_constant(elmt.value))\n        return elements, sparsity\n\n    def set_or_get_constant(self, val: PyFelt | int) -> ModuloCircuitElement:\n        if isinstance(val, int):\n            val = self.field(val)\n        if val.value in self.constants:\n            # print((f\"/!\\ Constant '{hex(val.value)}' already exists.\"))\n            return self.constants[val.value]\n        self.constants[val.value] = self.write_element(val, WriteOps.CONSTANT)\n        return self.constants[val.value]\n\n    def add(\n        self,\n        a: ModuloCircuitElement,\n        b: ModuloCircuitElement,\n        comment: str | None = None,\n    ) -> ModuloCircuitElement:\n        if a is None and isinstance(b, ModuloCircuitElement):\n            return b\n        elif b is None and isinstance(a, ModuloCircuitElement):\n            return a\n        else:\n            assert isinstance(a, ModuloCircuitElement) and isinstance(\n                b, ModuloCircuitElement\n            ), f\"Expected ModuloElement, got {type(a)}, {a} and {type(b)}, {b}\"\n\n            instruction = ModuloCircuitInstruction(\n                ModBuiltinOps.ADD, a.offset, b.offset, self.values_offset, comment\n            )\n            return self.write_element(\n                a.emulated_felt + b.emulated_felt, WriteOps.BUILTIN, instruction\n            )\n\n    def sum(self, args: list[ModuloCircuitElement], comment: str | None = None):\n        if not args:\n            raise ValueError(\"The 'args' list cannot be empty.\")\n        assert all(isinstance(elmt, ModuloCircuitElement) for elmt in args)\n        result = args[0]\n        for elmt in args[1:]:\n            result = self.add(result, elmt, comment)\n        return result\n\n    def product(self, args: list[ModuloCircuitElement], comment: str | None = None):\n        if not args:\n            raise ValueError(\"The 'args' list cannot be empty.\")\n        assert all(isinstance(elmt, ModuloCircuitElement) for elmt in args)\n        result = args[0]\n        for elmt in args[1:]:\n            result = self.mul(result, elmt, comment)\n        return result\n\n    def double(self, a: ModuloCircuitElement) -> ModuloCircuitElement:\n        return self.add(a, a)\n\n    def mul(\n        self,\n        a: ModuloCircuitElement,\n        b: ModuloCircuitElement,\n        comment: str | None = None,\n    ) -> ModuloCircuitElement:\n        if a is None and isinstance(b, ModuloCircuitElement):\n            return self.set_or_get_constant(0)\n        elif b is None and isinstance(a, ModuloCircuitElement):\n            return self.set_or_get_constant(0)\n        assert isinstance(a, ModuloCircuitElement) and isinstance(\n            b, ModuloCircuitElement\n        ), f\"Expected ModuloElement, got lhs {type(a)}, {a} and rhs {type(b)}, {b}\"\n        instruction = ModuloCircuitInstruction(\n            ModBuiltinOps.MUL, a.offset, b.offset, self.values_offset, comment\n        )\n        return self.write_element(\n            a.emulated_felt * b.emulated_felt, WriteOps.BUILTIN, instruction\n        )\n\n    def square(\n        self, a: ModuloCircuitElement, comment: str | None = None\n    ) -> ModuloCircuitElement:\n        return self.mul(a, a, comment)\n\n    def neg(\n        self, a: ModuloCircuitElement, comment: str | None = None\n    ) -> ModuloCircuitElement:\n        assert (\n            type(a) == ModuloCircuitElement\n        ), f\"Expected ModuloElement, got {type(a)}, {a}\"\n        res = self.sub(self.set_or_get_constant(self.field.zero()), a, comment)\n        return res\n\n    def sub(\n        self,\n        a: ModuloCircuitElement,\n        b: ModuloCircuitElement,\n        comment: str | None = None,\n    ):\n        assert isinstance(a, ModuloCircuitElement) and isinstance(\n            b, ModuloCircuitElement\n        ), f\"Expected ModuloElement, got {type(a)}, {a} and {type(b)}, {b}\"\n        instruction = ModuloCircuitInstruction(\n            ModBuiltinOps.ADD, b.offset, self.values_offset, a.offset, comment\n        )\n        return self.write_element(a.felt - b.felt, WriteOps.BUILTIN, instruction)\n\n    def inv(\n        self,\n        a: ModuloCircuitElement,\n        comment: str | None = None,\n    ):\n        assert isinstance(\n            a, ModuloCircuitElement\n        ), f\"Expected ModuloElement, got {type(a)}, {a}\"\n        if self.compilation_mode == 0:\n            one = self.set_or_get_constant(\n                1\n            )  # Write one before accessing its offset so self.values_offset is correctly updated.\n\n            instruction = ModuloCircuitInstruction(\n                ModBuiltinOps.MUL,\n                a.offset,\n                self.values_offset,\n                one.offset,\n                comment,\n            )\n        elif self.compilation_mode == 1:\n            instruction = ModuloCircuitInstruction(\n                ModBuiltinOps.MUL,\n                a.offset,\n                None,\n                None,\n                comment,\n            )\n\n        return self.write_element(a.felt.__inv__(), WriteOps.BUILTIN, instruction)\n\n    def div(\n        self,\n        a: ModuloCircuitElement,\n        b: ModuloCircuitElement,\n        comment: str | None = None,\n    ):\n        assert isinstance(a, ModuloCircuitElement) and isinstance(\n            b, ModuloCircuitElement\n        ), f\"Expected ModuloElement, got {type(a)}, {a} and {type(b)}, {b}\"\n        if self.compilation_mode == 0:\n            instruction = ModuloCircuitInstruction(\n                ModBuiltinOps.MUL, b.offset, self.values_offset, a.offset, comment\n            )\n            return self.write_element(\n                a.felt * b.felt.__inv__(), WriteOps.BUILTIN, instruction\n            )\n        else:\n            return self.mul(a, self.inv(b))\n\n    def fp_sqrt(self, element: ModuloCircuitElement) -> ModuloCircuitElement:\n        \"\"\"\n        Computes \"a\" square root of a field element.\n        /!\\ Warning : This circuit is non deterministic /!\\\n        /!\\ Two square roots exist for any non-zero element, and no constraint is enforced to select any of them /!\\\n        Raises ValueError if the element is not a quadratic residue.\n        \"\"\"\n        assert self.compilation_mode == 0, \"fp_sqrt is not supported in cairo 1 mode\"\n\n        root = element.felt.sqrt(min_root=False)\n\n        # Write the root as a witness and verify it\n        root = self.write_element(root, WriteOps.WITNESS)\n        self.mul_and_assert(root, root, element, comment=\"Fp sqrt\")\n        return root\n\n    def fp_is_non_zero(self, a: ModuloCircuitElement) -> ModuloCircuitElement:\n        \"\"\"\n        Returns 1 if a != 0, 0 if a == 0.\n        Enforces soundness by forcing `flag` to be a true indicator of whether 'a' is non-zero.\n\n        Main Constraints:\n        1) flag * (1 - flag) = 0\n           - Ensures that `flag` ∈ {0,1}, i.e., it's a binary indicator.\n        2) Prover supplies a_inv as a “would-be” inverse of `a`.\n           - If a != 0, a_inv should be the genuine inverse, i.e. a * a_inv = 1.\n           - If a == 0, a_inv is irrelevant and effectively ignored.\n        3) flag*(a * a_inv) + (1 - flag)*(a + 1) == 1\n           - If a == 0 → the only way is flag=0, so:\n                 0 * (0 * a_inv) + 1 * (0 + 1) = 1\n             which is satisfied.\n           - If a != 0 → the only way is flag=1, so:\n                 1 * (a * a_inv) + 0 * (a + 1) = 1\n             forcing a_inv to be a true inverse of a.\n\n        Consequently:\n          • When a == 0, the circuit forces flag=0 and ignores a_inv.\n          • When a != 0, the circuit forces flag=1 and requires a_inv to be the correct inverse.\n\n        Overall, this design prevents cheating (e.g. claiming a != 0 when it's actually 0, or supplying a bogus inverse) because the single equation in step (3) couples a, a_inv, and flag in a way that only the correct assignments can satisfy all constraints.\n        \"\"\"\n\n        assert (\n            self.compilation_mode == 0\n        ), \"`fp_is_non_zero_flag` is only supported in cairo 0 mode.\"\n\n        # Step 1: Prover declares a boolean-labeled witness: 1 if a != 0, else 0\n        is_non_zero_python_bool = int(a.value != 0)\n        flag = self.write_element(is_non_zero_python_bool, WriteOps.WITNESS)\n\n        # Step 2: Force the flag to be a single bit: flag * (1 - flag) == 0\n\n        one_minus_flag = self.sub(self.set_or_get_constant(1), flag)\n        self.mul_and_assert(\n            flag,\n            one_minus_flag,\n            self.set_or_get_constant(0),\n            comment=\"flag ∈ {0,1}\",\n        )\n\n        # Step 3: The prover supplies a_inv as a witness.\n        #          If flag=1 (a != 0), a_inv must be the real inverse: a*a_inv = 1.\n        #          If flag=0 (a == 0), a_inv is irrelevant.\n        a_inv_val = 0\n        if is_non_zero_python_bool:\n            a_inv_val = a.felt.__inv__().value\n        a_inv = self.write_element(a_inv_val, WriteOps.WITNESS)\n\n        # Step 4: Combine them with the core check:\n        #         flag*(a*a_inv) + (1 - flag)*(a+1) == 1\n        #         => forces correct assignments for (flag, a_inv)\n        flag_eq_0_branch = self.add(a, self.set_or_get_constant(1))\n        flag_eq_1_branch = self.mul(a, a_inv)\n\n        self.add_and_assert(\n            self.mul(flag, flag_eq_1_branch),\n            self.mul(one_minus_flag, flag_eq_0_branch),\n            self.set_or_get_constant(1),\n        )\n\n        # Return the final flag: 1 if a != 0, 0 if a == 0\n        return flag\n\n    def vector_sub(\n        self, X: list[ModuloCircuitElement], Y: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        return [\n            self.sub(x, y, comment=f\"Fp{len(X)} sub coeff {i}/{len(X)-1}\")\n            for i, (x, y) in enumerate(zip(X, Y))\n        ]\n\n    def vector_scale(\n        self, X: list[ModuloCircuitElement], c: ModuloCircuitElement\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Multiplies a polynomial with coefficients `X` by a scalar `c`.\n        Input : I(x) = i0 + i1*x + i2*x^2 + ... + in-1*x^n-1\n        Output : O(x) = ci0 + ci1*x + ci2*x^2 + ... + cin-1*x^n-1.\n        This is done in the circuit.\n        \"\"\"\n        assert isinstance(c, ModuloCircuitElement), \"c must be a ModuloCircuitElement\"\n        return [\n            self.mul(x_i, c, comment=f\"Fp{len(X)} scalar mul coeff {i}/{len(X)-1}\")\n            for i, x_i in enumerate(X)\n        ]\n\n    def vector_add(\n        self, X: list[ModuloCircuitElement], Y: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Adds two polynomials with coefficients `X` and `Y`.\n        Returns R = [x0 + y0, x1 + y1, x2 + y2, ... + xn-1 + yn-1] mod p\n        \"\"\"\n        assert len(X) == len(Y), f\"len(X)={len(X)} != len(Y)={len(Y)}\"\n        return [\n            self.add(x_i, y_i, comment=f\"Fp{len(X)} add coeff {i}/{len(X)-1}\")\n            for i, (x_i, y_i) in enumerate(zip(X, Y))\n        ]\n\n    def vector_neg(self, X: list[ModuloCircuitElement]) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Negates a polynomial with coefficients `X`.\n        Returns R = [-x0, -x1, -x2, ... -xn-1] mod p\n        \"\"\"\n        return [\n            self.neg(x_i, comment=f\"Fp{len(X)} neg coeff {i}/{len(X)-1}\")\n            for i, x_i in enumerate(X)\n        ]\n\n    def sub_and_assert(\n        self,\n        a: ModuloCircuitElement,\n        b: ModuloCircuitElement,\n        c: ModuloCircuitElement,\n        comment: str | None = None,\n    ):\n        \"\"\"\n        Subtracts b from a and asserts that the result is equal to c.\n        In practice, it checks that c + b = a [mod p].\n        All three values are expected to be already in the value segment, no new value is created.\n        Costs 2 Steps.\n        \"\"\"\n        assert (\n            self.compilation_mode == 0\n        ), \"sub_and_assert is not supported in cairo 1 mode\"\n        instruction = ModuloCircuitInstruction(\n            ModBuiltinOps.ADD, c.offset, b.offset, a.offset, comment\n        )\n        self.values_segment.assert_eq_instructions.append(instruction)\n        return c\n\n    def add_and_assert(\n        self,\n        a: ModuloCircuitElement,\n        b: ModuloCircuitElement,\n        c: ModuloCircuitElement,\n        comment: str | None = None,\n    ):\n        \"\"\"\n        Adds a and b and asserts that the result is equal to c.\n        In practice, it only checks that a + b = c [mod p].\n        All three values are expected to be already in the value segment, no new value is created.\n        Costs 2 Steps.\n        \"\"\"\n        assert (\n            self.compilation_mode == 0\n        ), \"add_and_assert is not supported in cairo 1 mode\"\n        instruction = ModuloCircuitInstruction(\n            ModBuiltinOps.ADD, a.offset, b.offset, c.offset, comment\n        )\n        self.values_segment.assert_eq_instructions.append(instruction)\n        return c\n\n    def mul_and_assert(\n        self,\n        a: ModuloCircuitElement,\n        b: ModuloCircuitElement,\n        c: ModuloCircuitElement,\n        comment: str | None = None,\n    ):\n        assert (\n            self.compilation_mode == 0\n        ), \"mul_and_assert is not supported in cairo 1 mode\"\n\n        instruction = ModuloCircuitInstruction(\n            ModBuiltinOps.MUL, a.offset, b.offset, c.offset, comment\n        )\n        self.values_segment.assert_eq_instructions.append(instruction)\n        return c\n\n    def eval_horner(\n        self,\n        poly: list[ModuloCircuitElement],\n        z: ModuloCircuitElement,\n        poly_name: str = None,\n        var_name: str = \"z\",\n    ):\n        \"\"\"\n        Evaluates a polynomial at point z using Horner's method.\n        Assumes that the polynomial is in the form a0 + a1*z + a2*z^2 + ... + an*z^n, indexed with the constant coefficient first.\n        \"\"\"\n        if poly_name is None:\n            poly_name = \"UnnamedPoly\"\n\n        # Regular Horner evaluation\n        acc = poly[-1]  # Start with the highest degree coefficient\n        for i in range(len(poly) - 2, -1, -1):\n            acc = self.add(\n                poly[i],\n                self.mul(\n                    acc,\n                    z,\n                    comment=f\"Eval {poly_name} Horner step: multiply by {var_name}\",\n                ),\n                comment=f\"Eval {poly_name} Horner step: add coefficient_{i}\",\n            )\n\n        return acc\n\n    def eval_poly(\n        self,\n        poly: list[ModuloCircuitElement],\n        X_powers: list[ModuloCircuitElement],\n        poly_name: str = None,\n        var_name: str = \"x\",\n    ):\n        \"\"\"\n        Evaluates a polynomial at precomputed powers of X.\n        Assumes that the polynomial is in the form a0 + a1*x + a2*x^2 + ... + an*x^n, indexed with the constant coefficient first.\n        Assumes that X_powers is a list of powers of X, such that X_powers[i] = X^(i+1).\n        \"\"\"\n        if poly_name is None:\n            poly_name = \"UnnamedPoly\"\n        assert len(poly) - 1 <= len(\n            X_powers\n        ), f\"Expected at least {len(poly) - 1} powers of X to evaluate P, got {len(X_powers)}\"\n\n        acc = poly[0]\n        for i in range(1, len(poly)):\n            acc = self.add(\n                acc,\n                self.mul(\n                    poly[i],\n                    X_powers[i - 1],\n                    comment=f\"Eval {poly_name} step coeff_{i} * {var_name}^{i}\",\n                ),\n                comment=f\"Eval {poly_name} step + (coeff_{i} * {var_name}^{i})\",\n            )\n        return acc\n\n    def extend_output(self, elmts: list[ModuloCircuitElement]):\n        \"\"\"\n        Adds elements to the output of the circuit.\n        \"\"\"\n        assert isinstance(elmts, (list, tuple))\n        assert all(isinstance(x, ModuloCircuitElement) for x in elmts)\n        self.output.extend(elmts)\n        return\n\n    def extend_struct_output(self, struct: Cairo1SerializableStruct):\n        \"\"\"\n        Adds elements to the output of the circuit in struct form.\n        \"\"\"\n        assert isinstance(struct, Cairo1SerializableStruct)\n        if self.compilation_mode == 0:\n            self.extend_output(struct.elmts)\n        else:\n            self.values_segment.output_structs.append(struct)\n            self.extend_output(struct.elmts)\n        return\n\n    def print_value_segment(self):\n        self.values_segment.print()\n\n    def compile_circuit(\n        self,\n        function_name: str = None,\n        pub: bool = True,\n        inline: bool = True,\n        generic_modulus: bool = False,\n    ):\n        if self.is_empty_circuit():\n            return \"\", \"\"\n        self.values_segment = self.values_segment.non_interactive_transform()\n        inline = inline and not self.do_not_inline\n        if self.compilation_mode == 0:\n            return self.compile_circuit_cairo_zero(function_name), None\n        elif self.compilation_mode == 1:\n            return self.compile_circuit_cairo_1(\n                function_name, pub, inline, generic_modulus\n            )\n\n    def compile_circuit_cairo_zero(\n        self,\n        function_name: str = None,\n        returns: dict[str] = {\n            \"felt*\": [\n                \"constants_ptr\",\n                \"add_offsets_ptr\",\n                \"mul_offsets_ptr\",\n                \"output_offsets_ptr\",\n            ],\n            \"felt\": [\n                \"constants_ptr_len\",\n                \"input_len\",\n                \"witnesses_len\",\n                \"output_len\",\n                \"continuous_output\",\n                \"add_mod_n\",\n                \"mul_mod_n\",\n                \"n_assert_eq\",\n                \"name\",\n                \"curve_id\",\n            ],\n        },\n    ) -> str:\n        dw_arrays = self.values_segment.get_dw_lookups()\n        name = function_name or self.values_segment.name\n        function_name = f\"get_{name}_circuit\"\n        if self.generic_circuit:\n            code = (\n                f\"func {function_name}(curve_id:felt)->(circuit:{self.class_name}*)\"\n                + \"{\"\n                + \"\\n\"\n            )\n        else:\n            code = f\"func {function_name}()->(circuit:{self.class_name}*)\" + \"{\" + \"\\n\"\n\n        code += \"alloc_locals;\\n\"\n        code += \"let (__fp__, _) = get_fp_and_pc();\\n\"\n\n        for dw_array_name in returns[\"felt*\"]:\n            code += f\"let ({dw_array_name}:felt*) = get_label_location({dw_array_name}_loc);\\n\"\n\n        code += f\"let constants_ptr_len = {len(dw_arrays['constants_ptr'])};\\n\"\n        code += f\"let input_len = {len(self.values_segment.segment_stacks[WriteOps.INPUT])*N_LIMBS};\\n\"\n        code += f\"let witnesses_len = {len(self.values_segment.segment_stacks[WriteOps.WITNESS])*N_LIMBS};\\n\"\n        code += f\"let output_len = {len(self.output)*N_LIMBS};\\n\"\n        continuous_output = self.continuous_output\n        code += f\"let continuous_output = {1 if continuous_output else 0};\\n\"\n        code += f\"let add_mod_n = {len(dw_arrays['add_offsets_ptr'])};\\n\"\n        code += f\"let mul_mod_n = {len(dw_arrays['mul_offsets_ptr'])};\\n\"\n        code += (\n            f\"let n_assert_eq = {len(self.values_segment.assert_eq_instructions)};\\n\"\n        )\n        code += f\"let name = '{self.name}';\\n\"\n        code += (\n            f\"let curve_id = {'curve_id' if self.generic_circuit else self.curve_id};\\n\"\n        )\n\n        code += f\"local circuit:{self.class_name} = {self.class_name}({', '.join(returns['felt*'])}, {', '.join(returns['felt'])});\\n\"\n        code += \"return (&circuit,);\\n\"\n\n        for dw_array_name in returns[\"felt*\"]:\n            dw_values = dw_arrays[dw_array_name]\n            code += f\"\\t {dw_array_name}_loc:\\n\"\n            if dw_array_name == \"constants_ptr\":\n                for bigint in dw_values:\n                    for limb in bigint:\n                        code += f\"\\t dw {limb};\\n\"\n                code += \"\\n\"\n\n            elif dw_array_name in [\"add_offsets_ptr\", \"mul_offsets_ptr\"]:\n                num_instructions = len(dw_values)\n                instructions_needed = (\n                    BATCH_SIZE - (num_instructions % BATCH_SIZE)\n                ) % BATCH_SIZE  # Must be a multiple of 8 (currently)\n                for left, right, result, comment in dw_values:\n                    code += (\n                        f\"\\t dw {left}; // {comment}\\n\"\n                        + f\"\\t dw {right};\\n\"\n                        + f\"\\t dw {result};\\n\"\n                    )\n                if instructions_needed > 0:\n                    first_triplet = dw_values[0]\n                    for _ in range(instructions_needed):\n                        code += (\n                            f\"\\t dw {first_triplet[0]};\\n\"\n                            + f\"\\t dw {first_triplet[1]};\\n\"\n                            + f\"\\t dw {first_triplet[2]};\\n\"\n                        )\n                code += \"\\n\"\n            elif dw_array_name in [\"output_offsets_ptr\"]:\n                if continuous_output:\n                    code += f\"\\t dw {dw_values[0]};\\n\"\n                else:\n                    for val in dw_values:\n                        code += f\"\\t dw {val};\\n\"\n\n        code += \"\\n\"\n        code += \"}\\n\"\n        return code\n\n    def write_cairo1_input_stack(\n        self,\n        write_ops: WriteOps,\n        code: str,\n        offset_to_reference_map: dict[int, str],\n        start_index: int,\n    ) -> tuple:\n        \"\"\"\n        Defines the inputs for the compiled Cairo 1 circuit.\n        \"\"\"\n        len_stack = len(self.values_segment.segment_stacks[write_ops])\n        if len_stack > 0:\n            code += f\"\\n // {write_ops.name} stack\\n\"\n            offsets = list(self.values_segment.segment_stacks[write_ops].keys())\n            i = 0\n            while i < len_stack:\n                if write_ops == WriteOps.CONSTANT:\n                    val = self.values_segment.segment[offsets[i]].value\n                    if 0 < -val % self.field.p <= 100:\n                        comment = f\"// -{hex(-val%self.field.p)} % p\"\n                    else:\n                        comment = f\"// {hex(val)}\"\n                    code += f\"\\t let in{start_index+i} = CE::<CI<{start_index+i}>> {{}}; {comment}\\n\"\n                    offset_to_reference_map[offsets[i]] = f\"in{start_index+i}\"\n                    i += 1\n                else:\n                    if i + 2 < len_stack:\n                        code += f\"\\t let (in{start_index+i}, in{start_index+i+1}, in{start_index+i+2}) = (CE::<CI<{start_index+i}>> {{}}, CE::<CI<{start_index+i+1}>> {{}}, CE::<CI<{start_index+i+2}>> {{}});\\n\"\n                        offset_to_reference_map[offsets[i]] = f\"in{start_index+i}\"\n                        offset_to_reference_map[offsets[i + 1]] = f\"in{start_index+i+1}\"\n                        offset_to_reference_map[offsets[i + 2]] = f\"in{start_index+i+2}\"\n                        i += 3\n                    elif i + 1 < len_stack:\n                        code += f\"\\t let (in{start_index+i}, in{start_index+i+1}) = (CE::<CI<{start_index+i}>> {{}}, CE::<CI<{start_index+i+1}>> {{}});\\n\"\n                        offset_to_reference_map[offsets[i]] = f\"in{start_index+i}\"\n                        offset_to_reference_map[offsets[i + 1]] = f\"in{start_index+i+1}\"\n                        i += 2\n                    else:\n                        code += f\"\\t let in{start_index+i} = CE::<CI<{start_index+i}>> {{}};\\n\"\n                        offset_to_reference_map[offsets[i]] = f\"in{start_index+i}\"\n                        i += 1\n            return (\n                code,\n                offset_to_reference_map,\n                start_index + len_stack,\n            )\n        else:\n            return code, offset_to_reference_map, start_index\n\n    def fill_cairo_1_constants(self) -> tuple[str, str]:\n        \"\"\"\n        Return the part of the code that fills the constants to the circuit, and the constants array\n        if there are more than 8 constants. In that case, .next_span() is used to save bytecode and\n        the constants are stored in a const array.\n        \"\"\"\n        constants_ints = [\n            self.values_segment.segment[offset].value\n            for offset in self.values_segment.segment_stacks[WriteOps.CONSTANT].keys()\n        ]\n        if len(constants_ints) < 8:\n            constants_split = [bigint_split(x, N_LIMBS, BASE) for x in constants_ints]\n            constants_filled = \"\\n\".join(\n                f\"circuit_inputs = circuit_inputs.next_2([{','.join(hex(x) for x in constants_split[i])}]); // in{i}\"\n                for i in range(len(constants_ints))\n            )\n            return constants_filled, None\n        else:\n            import garaga.hints.io as io\n\n            const_name = (\n                self.name.upper()\n                + \"_\"\n                + CurveID(self.curve_id).name.upper()\n                + \"_CONSTANTS\"\n            )\n            constants_filled = f\"\"\"\n            circuit_inputs = circuit_inputs.next_span({const_name}.span()); // in{0} - in{len(constants_ints)-1}\n            \"\"\"\n\n            const_array = f\"const {const_name}: [u384; {len(constants_ints)}] = {io.int_array_to_u384_array(constants_ints, const=True)};\"\n        return constants_filled, const_array\n\n    def write_cairo1_circuit(self, offset_to_reference_map: dict[int, str]) -> str:\n        \"\"\"\n        Defines the arithmetic instructions for the compiled Cairo 1 circuit.\n        \"\"\"\n        code = \"\"\n        for i, (offset, vs_item) in enumerate(\n            self.values_segment.segment_stacks[WriteOps.BUILTIN].items()\n        ):\n            op = vs_item.instruction.operation\n            left_offset = vs_item.instruction.left_offset\n            right_offset = vs_item.instruction.right_offset\n            result_offset = vs_item.instruction.result_offset\n            comment = vs_item.instruction.comment or \"\"\n\n            # print(i, op, left_offset, right_offset, result_offset)\n            match op:\n                case ModBuiltinOps.ADD:\n                    if right_offset > result_offset:\n                        # Case sub\n                        code += f\"let t{i} = circuit_sub({offset_to_reference_map[result_offset]}, {offset_to_reference_map[left_offset]}); {'// '+comment if comment else ''}\\n\"\n                        offset_to_reference_map[offset] = f\"t{i}\"\n                        assert offset == right_offset\n                    else:\n                        code += f\"let t{i} = circuit_add({offset_to_reference_map[left_offset]}, {offset_to_reference_map[right_offset]}); {'// '+comment if comment else ''}\\n\"\n                        offset_to_reference_map[offset] = f\"t{i}\"\n                        assert offset == result_offset\n\n                case ModBuiltinOps.MUL:\n                    if right_offset == result_offset == offset:\n                        # Case inv\n                        # print(f\"\\t INV {left_offset} {right_offset} {result_offset}\")\n                        code += f\"let t{i} = circuit_inverse({offset_to_reference_map[left_offset]}); {'// '+comment if comment else ''}\\n\"\n                        offset_to_reference_map[offset] = f\"t{i}\"\n                    else:\n                        # print(f\"MUL {left_offset} {right_offset} {result_offset}\")\n                        code += f\"let t{i} = circuit_mul({offset_to_reference_map[left_offset]}, {offset_to_reference_map[right_offset]}); {'// '+comment if comment else ''}\\n\"\n                        offset_to_reference_map[offset] = f\"t{i}\"\n                        assert offset == result_offset\n        return code\n\n    def compile_circuit_cairo_1(\n        self,\n        function_name: str = None,\n        pub: bool = False,\n        inline: bool = True,\n        generic_modulus: bool = False,\n    ) -> tuple[str, str]:\n        \"\"\"\n        Defines the Cairo 1 function code for the compiled circuit.\n        \"\"\"\n        name = function_name or self.values_segment.name\n        function_name = f\"run_{name}_circuit\"\n        curve_index = CurveID.find_value_in_string(name)\n        return_is_struct = False\n        input_is_struct = False\n        if self.output_structs:\n            if sum([len(x.elmts) for x in self.output_structs]) == len(self.output):\n                return_is_struct = True\n                signature_output = (\n                    f\"({','.join([x.struct_name for x in self.output_structs])}\"\n                )\n\n                signature_output += \",)\" if len(self.output_structs) == 1 else \")\"\n            else:\n                raise ValueError(\n                    f\"Output structs must have the same number of elements as the output: {len(self.output_structs)=} != {len(self.output)=}\"\n                )\n        else:\n            signature_output = \"Array<u384>\"\n\n        if self.input_structs:\n            if sum([len(x) for x in self.input_structs]) == len(self.input):\n                input_is_struct = True\n                signature_input = f\"{','.join([x.serialize_input_signature() for x in self.input_structs])}\"\n            else:\n                raise ValueError(\n                    f\"Input structs must have the same number of elements as the input: {sum([len(x) for x in self.input_structs])=} != {len(self.input)=}\"\n                )\n        else:\n            signature_input = \"mut input: Array<u384>\"\n        if \"<T>\" in signature_input or \":T,\" in signature_input:\n            generic_input = \"<T, +IntoCircuitInputValue<T>, +Drop<T>, +Copy<T>>\"\n        else:\n            generic_input = \"\"\n        if pub:\n            prefix = \"pub \"\n        else:\n            prefix = \"\"\n        if inline:\n            if generic_input == \"\":\n                attribute = \"#[inline(always)]\"\n            else:\n                attribute = \"#[inline]\"\n        else:\n            attribute = \"\"\n        generic_modulus = generic_modulus or self.generic_modulus\n        if generic_modulus:\n            code = f\"{attribute}\\n{prefix}fn {function_name}{generic_input}({signature_input}, modulus:core::circuit::CircuitModulus)->{signature_output} {{\\n\"\n        elif self.generic_circuit:\n            code = f\"{attribute}\\n{prefix}fn {function_name}{generic_input}({signature_input}, curve_index:usize)->{signature_output} {{\\n\"\n        else:\n            code = f\"{attribute}\\n{prefix}fn {function_name}{generic_input}({signature_input})->{signature_output} {{\\n\"\n\n        # Define the input for the circuit.\n        code, offset_to_reference_map, start_index = self.write_cairo1_input_stack(\n            WriteOps.CONSTANT, code, {}, 0\n        )\n        (\n            code,\n            offset_to_reference_map,\n            commit_start_index,\n        ) = self.write_cairo1_input_stack(\n            WriteOps.INPUT, code, offset_to_reference_map, start_index\n        )\n        code, offset_to_reference_map, commit_end_index = self.write_cairo1_input_stack(\n            WriteOps.COMMIT, code, offset_to_reference_map, commit_start_index\n        )\n        code, offset_to_reference_map, start_index = self.write_cairo1_input_stack(\n            WriteOps.WITNESS, code, offset_to_reference_map, commit_end_index\n        )\n        code, offset_to_reference_map, start_index = self.write_cairo1_input_stack(\n            WriteOps.FELT, code, offset_to_reference_map, start_index\n        )\n\n        code += self.write_cairo1_circuit(offset_to_reference_map)\n\n        outputs_refs = []\n        for out in self.output:\n            if self.values_segment[out.offset].write_source == WriteOps.BUILTIN:\n                outputs_refs.append(offset_to_reference_map[out.offset])\n            else:\n                continue\n        if self.exact_output_refs_needed:\n            outputs_refs_needed = [\n                offset_to_reference_map[out.offset]\n                for out in self.exact_output_refs_needed\n            ]\n        else:\n            outputs_refs_needed = outputs_refs\n\n        if generic_modulus:\n            code += \"\\nlet modulus = modulus;\\n\"\n        elif curve_index is not None:\n            code += f\"\"\"\n    let modulus = crate::definitions::get_{CurveID(self.curve_id).name}_modulus(); // {CurveID(self.curve_id).name} prime field modulus\n        \"\"\"\n        else:\n            code += \"\"\"\n    let modulus = crate::definitions::get_modulus(curve_index);\n        \"\"\"\n\n        code += f\"\"\"\n    let mut circuit_inputs = ({','.join(outputs_refs_needed)},).new_inputs();\n    // Prefill constants:\n    \"\"\"\n\n        tmp, const_array = self.fill_cairo_1_constants()\n        code += tmp\n        code += \"\"\"\n        // Fill inputs:\n        \"\"\"\n\n        acc_len = len(self.values_segment.segment_stacks[WriteOps.CONSTANT])\n        if input_is_struct:\n            for struct in self.input_structs:\n                struct_code = struct.dump_to_circuit_input()\n                struct_code_lines = [\n                    line for line in struct_code.split(\"\\n\") if line.strip()\n                ]\n                if \"while let\" not in struct_code and \"for val in\" not in struct_code:\n                    struct_code_with_counter = \"\\n\".join(\n                        f\"{line} // in{i+acc_len}\"\n                        for i, line in enumerate(struct_code_lines)\n                    )\n                else:\n                    struct_code_with_counter = (\n                        struct_code + f\" // in{acc_len} - in{acc_len+len(struct)-1}\\n\"\n                    )\n                acc_len += len(struct)\n                code += struct_code_with_counter + \"\\n\"\n        else:\n            code += \"\"\"\n    let mut input = input;\n    while let Option::Some(val) = input.pop_front() {\n        circuit_inputs = circuit_inputs.next_2(val);\n    };\n    \"\"\"\n        code += \"\"\"\n        let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n\"\"\"\n        if return_is_struct:\n            code += \"\\n\".join(\n                [\n                    struct.extract_from_circuit_output(offset_to_reference_map)\n                    for struct in self.output_structs\n                ]\n            )\n            code += (\n                f\"return ({','.join([struct.name for struct in self.output_structs])}\"\n            )\n            code += \",);\\n}\" if len(self.output_structs) == 1 else \");\\n}\"\n        else:\n            code += f\"let res=array![{','.join([f'outputs.get_output({ref})' for ref in outputs_refs])}];\\n\"\n            code += \"return res;\\n\"\n            code += \"}\\n\"\n\n        if const_array:\n            # Add the constants outside of the function if they are more than 8.\n            code += \"\\n\"\n            code += const_array\n        return code, function_name\n\n    def summarize(self):\n        add_count, mul_count, assert_eq_count = self.values_segment.summarize()\n        summary = {\n            \"circuit\": self.name,\n            \"MULMOD\": mul_count,\n            \"ADDMOD\": add_count,\n            \"ASSERT_EQ\": assert_eq_count,\n            \"POSEIDON\": 0,\n            \"RLC\": 0,\n        }\n\n        return summary\n\n\nif __name__ == \"__main__\":\n    from garaga.algebra import BaseField\n\n    field = BaseField(256)\n    circuit = ModuloCircuit(\"test_circuit\", 0)\n    a = circuit.write_element(field(1))\n    b = circuit.write_element(field(2))\n    c = circuit.add(a, b)\n    d = circuit.mul(c, b)\n\n    print(c)\n\n    print(d)\n\n    circuit = ModuloCircuit(\"test_empty_circuit\", curve_id=0, compilation_mode=1)\n    print(circuit.compile_circuit())\n"
  },
  {
    "path": "hydra/garaga/modulo_circuit_structs.py",
    "content": "from __future__ import annotations\n\nfrom abc import ABC, abstractmethod\nfrom dataclasses import dataclass\nfrom typing import Generic, TypeVar\n\nfrom garaga.algebra import FunctionFelt, ModuloCircuitElement, PyFelt\nfrom garaga.curves import STARK, get_base_field\nfrom garaga.hints import io\nfrom garaga.hints.io import (\n    int_array_to_u384_array,\n    int_to_u2XX,\n    int_to_u256,\n    int_to_u384,\n)\nfrom garaga.points import G1Point, G2Point\n\nT = TypeVar(\"T\", bound=\"Cairo1SerializableStruct\")\n\nfrom enum import Enum\n\n\nclass CairoOption(Enum):\n    SOME = 0\n    NONE = 1\n    VOID = 2  # Special case to serialize nothing at all.\n\n\n@dataclass(slots=True)\nclass Cairo1SerializableStruct(ABC):\n    name: str\n    elmts: list[ModuloCircuitElement | PyFelt | \"Cairo1SerializableStruct\"]\n\n    def __post_init__(self):\n        assert type(self.name) == str\n        if isinstance(self.elmts, (list, tuple)):\n            if len(self.elmts) > 0:\n                if isinstance(self.elmts[0], Cairo1SerializableStruct):\n                    assert all(\n                        isinstance(elmt, self.elmts[0].__class__) for elmt in self.elmts\n                    ), f\"All elements of {self.name} must be of the same type\"\n\n                else:\n                    assert all(\n                        isinstance(elmt, (ModuloCircuitElement, PyFelt))\n                        for elmt in self.elmts\n                    ), f\"All elements of {self.name} must be of type ModuloCircuitElement or PyFelt, got {type(self.elmts[0])}\"\n        else:\n            assert self.elmts is None, f\"Elmts must be a list or None, got {self.elmts}\"\n\n    @property\n    def struct_name(self) -> str:\n        return self.__class__.__name__\n\n    @property\n    def bits(self) -> int:\n        return self.elmts[0].p.bit_length()\n\n    def serialize_input_signature(self) -> str:\n        return f\"{self.name}:{self.struct_name}\"\n\n    @abstractmethod\n    def serialize(self, raw: bool = False) -> str:\n        pass\n\n    @abstractmethod\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        pass\n\n    @abstractmethod\n    def dump_to_circuit_input(self) -> str:\n        pass\n\n    @abstractmethod\n    def __len__(self) -> int:\n        pass\n\n    def _serialize_to_calldata(self) -> list[int]:\n        pass\n\n    def serialize_to_calldata(self, *args, **kwargs) -> list[int]:\n        data = self._serialize_to_calldata(*args, **kwargs)\n        # print(\n        #     f\"\\nSerializing {self.name} {self.struct_name} to calldata: {data} {len(data)}\"\n        # )\n        return data\n\n\nclass StructArray(Cairo1SerializableStruct, Generic[T]):\n    elmts: list[T]\n\n    @property\n    def struct_name(self) -> str:\n        return \"Array<\" + self.elmts[0].struct_name + \">\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for struct in self.elmts:\n            code += struct.dump_to_circuit_input()\n        return code\n\n    def __len__(self) -> int:\n        return sum(len(struct) for struct in self.elmts)\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError\n\n    def serialize(self, raw: bool = False, const: bool = False) -> str:\n        if const:\n            raw_struct = \"[\"\n        else:\n            raw_struct = \"array![\"\n\n        for struct in self.elmts:\n            raw_struct += struct.serialize(raw=True) + \",\"\n        raw_struct += \"]\\n\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def serialize_to_calldata(self) -> list[int]:\n        cd = [len(self)]\n        for elmt in self.elmts:\n            cd.extend(elmt.serialize_to_calldata())\n        return cd\n\n\nclass Struct(Cairo1SerializableStruct):\n    elmts: list[Cairo1SerializableStruct]\n\n    def __init__(\n        self, struct_name: str, name: str, elmts: list[Cairo1SerializableStruct]\n    ):\n        super().__init__(name, elmts)\n        self._struct_name = struct_name\n\n    @property\n    def struct_name(self) -> str:\n        return self._struct_name\n\n    def __post_init__(self):\n        assert all(isinstance(elmt, Cairo1SerializableStruct) for elmt in self.elmts)\n\n    def dump_to_circuit_input(self) -> str:\n        return NotImplementedError\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError\n\n    def serialize(self, raw: bool = False) -> str:\n        if raw:\n            code = f\"{self.struct_name} {{\"\n        else:\n            code = f\"let {self.name} = {self.struct_name} {{\"\n        for struct in self.elmts:\n            code += f\"{struct.name}: {struct.serialize(raw=True)},\"\n        if raw:\n            code += \"}\"\n        else:\n            code += \"};\"\n        return code\n\n    def __len__(self) -> int:\n        return sum(len(elmt) for elmt in self.elmts)\n\n    def _serialize_to_calldata(self) -> list[int]:\n        cd = []\n        for elmt in self.elmts:\n            cd.extend(elmt.serialize_to_calldata())\n        return cd\n\n\nclass StructSpan(Cairo1SerializableStruct, Generic[T]):\n    elmts: list[T]\n\n    @property\n    def struct_name(self) -> str:\n        return \"Span<\" + self.elmts[0].struct_name + \">\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = f\"let mut {self.name} = {self.name};\\n\"\n        code += f\"for val in {self.name} {{\\n\"\n\n        self.elmts[0].name = \"*val\"\n        code += self.elmts[0].dump_to_circuit_input()\n        code += \"};\\n\"\n        return code\n\n    def __len__(self) -> int:\n        return sum(len(struct) for struct in self.elmts)\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError\n\n    def serialize(self, raw: bool = False, is_option: bool = False) -> str:\n        if self.elmts is None:\n            raw_struct = \"Option::None\"\n            if raw:\n                return raw_struct\n            else:\n                return f\"let {self.name} = {raw_struct};\\n\"\n        else:\n            raw_struct = \"array![\"\n            for struct in self.elmts:\n                raw_struct += struct.serialize(raw=True) + \",\"\n            raw_struct += \"].span()\"\n            if is_option:\n                raw_struct = f\"Option::Some({raw_struct})\"\n            if raw:\n                return raw_struct\n            else:\n                return f\"let {self.name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(\n        self, option: CairoOption = None, as_pure_felt252_array: bool = False\n    ) -> list[int]:\n        cd = []\n        if option:\n            if option == CairoOption.SOME:\n                cd.append(0)\n            elif option == CairoOption.NONE:\n                cd.append(1)\n                return cd\n            elif option == CairoOption.VOID:\n                return cd\n            else:\n                raise ValueError(f\"Invalid option: {option}\")\n\n        cd.append(len(self.elmts))\n        for elmt in self.elmts:\n            cd.extend(elmt._serialize_to_calldata())\n\n        if as_pure_felt252_array:\n            cd[0] = len(cd) - 1\n        return cd\n\n\n# class u288(Cairo1SerializableStruct):\n#     def serialize(self, raw: bool = False) -> str:\n#         assert len(self.elmts) == 1\n#         raw_struct = f\"{int_to_u288(self.elmts[0].value)}\"\n#         if raw:\n#             return raw_struct\n#         else:\n#             return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n#     def _serialize_to_calldata(self) -> list[int]:\n#         assert len(self.elmts) == 1\n#         return io.bigint_split_array(self.elmts, n_limbs=3, prepend_length=False)\n\n#     def extract_from_circuit_output(\n#         self, offset_to_reference_map: dict[int, str]\n#     ) -> str:\n#         assert len(self.elmts) == 1\n#         return f\"let {self.name}:{self.struct_name} = outputs.get_output({offset_to_reference_map[self.elmts[0].offset]});\"\n\n#     def dump_to_circuit_input(self) -> str:\n#         return f\"circuit_inputs = circuit_inputs.next_u288({self.name});\\n\"\n\n#     def __len__(self) -> int:\n#         if self.elmts is not None:\n#             assert len(self.elmts) == 1\n#             return 1\n#         else:\n#             return 1\n\n\nclass u384(Cairo1SerializableStruct):\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 1\n        raw_struct = f\"{int_to_u384(self.elmts[0].value)}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        assert len(self.elmts) == 1\n        return io.bigint_split_array(self.elmts, prepend_length=False)\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 1\n        return f\"let {self.name}:{self.struct_name} = outputs.get_output({offset_to_reference_map[self.elmts[0].offset]});\"\n\n    def dump_to_circuit_input(self) -> str:\n        return f\"circuit_inputs = circuit_inputs.next_2({self.name});\\n\"\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 1\n            return 1\n        else:\n            return 1\n\n\nclass RSA2048Chunks(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\"w0\", \"w1\", \"w2\", \"w3\", \"w4\", \"w5\")\n\n    @property\n    def struct_name(self) -> str:\n        return \"RSA2048Chunks\"\n\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 6\n        raw_struct = (\n            f\"{self.struct_name} {{\"\n            + \",\".join(\n                f\"{self.members_names[i]}: {int_to_u384(self.elmts[i].value)}\"\n                for i in range(6)\n            )\n            + \"}\"\n        )\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        assert len(self.elmts) == 6\n        return io.bigint_split_array(self.elmts, prepend_length=False)\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 6\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{ {','.join([f'{self.members_names[i]}: outputs.get_output({offset_to_reference_map[self.elmts[i].offset]})' for i in range(6)])} }};\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for mem_name in self.members_names:\n            code += f\"circuit_inputs = circuit_inputs.next_2({self.name}.{mem_name});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 6\n            return 6\n        else:\n            return 6\n\n\nclass RSA2048ReductionWitness(Cairo1SerializableStruct):\n    \"\"\"Composite struct: quotient (6 u384) + remainder (6 u384) = 12 elements.\"\"\"\n\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.chunk_names = (\"w0\", \"w1\", \"w2\", \"w3\", \"w4\", \"w5\")\n\n    @property\n    def struct_name(self) -> str:\n        return \"RSA2048ReductionWitness\"\n\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 12\n        quot = \", \".join(\n            f\"{self.chunk_names[i]}: {int_to_u384(self.elmts[i].value)}\"\n            for i in range(6)\n        )\n        rem = \", \".join(\n            f\"{self.chunk_names[i]}: {int_to_u384(self.elmts[6 + i].value)}\"\n            for i in range(6)\n        )\n        raw_struct = f\"{self.struct_name} {{ quotient: RSA2048Chunks {{ {quot} }}, remainder: RSA2048Chunks {{ {rem} }} }}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        assert len(self.elmts) == 12\n        return io.bigint_split_array(self.elmts, prepend_length=False)\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError(\"RSA2048ReductionWitness is input-only\")\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for member in (\"quotient\", \"remainder\"):\n            for chunk in self.chunk_names:\n                code += f\"circuit_inputs = circuit_inputs.next_2({self.name}.{member}.{chunk});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        return 12\n\n\nclass GenericT(Cairo1SerializableStruct):\n    # <T> => u384 or u288\n\n    @property\n    def struct_name(self) -> str:\n        return \"T\"\n\n    def serialize(self, raw: bool = False) -> str:\n        if self.bits <= 288:\n            curve_id = 0\n        else:\n            curve_id = 1\n        assert len(self.elmts) == 1\n        raw_struct = f\"{int_to_u2XX(self.elmts[0].value, curve_id)}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        assert len(self.elmts) == 1\n        if self.bits <= 288:\n            return io.bigint_split_array(self.elmts, prepend_length=False)\n        else:\n            return io.bigint_split_array(self.elmts, n_limbs=3, prepend_length=False)\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError\n\n    def dump_to_circuit_input(self) -> str:\n        return f\"circuit_inputs = circuit_inputs.next_2({self.name});\\n\"\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 1\n            return 1\n        else:\n            return 1\n\n\nclass u256(Cairo1SerializableStruct):\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 1\n        raw_struct = f\"{int_to_u256(self.elmts[0].value)}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        assert len(self.elmts) == 1\n        return list(io.split_128(self.elmts[0].value))\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError\n\n    def dump_to_circuit_input(self) -> str:\n        raise NotImplementedError\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 1\n            return 1\n        else:\n            return 1\n\n\nclass u256Span(Cairo1SerializableStruct):\n    @property\n    def struct_name(self) -> str:\n        return \"Span<u256>\"\n\n    def serialize(self, raw: bool = False) -> str:\n        raw_struct = f\"{io.int_array_to_u256_array(self.elmts)}.span()\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        return io.bigint_split_array(\n            self.elmts, n_limbs=2, base=2**128, prepend_length=True\n        )\n\n    def dump_to_circuit_input(self) -> str:\n        code = f\"\"\"\n    for val in {self.name} {{\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    }};\"\"\"\n        return code\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            return len(self.elmts)\n        else:\n            return None\n\n\nclass u128(Cairo1SerializableStruct):\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 1\n        assert 0 <= self.elmts[0].value < 2**128\n        raw_struct = f\"{hex(self.elmts[0].value)}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        assert len(self.elmts) == 1\n        assert 0 <= self.elmts[0].value < 2**128\n        return [self.elmts[0].value]\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError\n\n    def dump_to_circuit_input(self) -> str:\n        return f\"circuit_inputs = circuit_inputs.next_u128({self.name});\\n\"\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 1\n            return 1\n        else:\n            return 1\n\n\nclass u128Span(Cairo1SerializableStruct):\n    @property\n    def struct_name(self) -> str:\n        return \"Span<u128>\"\n\n    def serialize(self, raw: bool = False) -> str:\n        raw_struct = f\"{io.int_array_to_u128_array(self.elmts)}.span()\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        return io.bigint_split_array(\n            self.elmts, n_limbs=1, base=2**128, prepend_length=True\n        )\n\n    def dump_to_circuit_input(self) -> str:\n        code = f\"\"\"\n    for val in {self.name} {{\n        circuit_inputs = circuit_inputs.next_u128(*val);\n    }};\"\"\"\n        return code\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            return len(self.elmts)\n        else:\n            return None\n\n\nclass Tuple(Cairo1SerializableStruct):\n    elmts: list[Cairo1SerializableStruct]\n\n    def __init__(self, name: str, elmts: list[Cairo1SerializableStruct]):\n        super().__init__(name, elmts)\n        self.members_names = [member.name for member in elmts]\n\n    @property\n    def struct_name(self) -> str:\n        return f\"({','.join([elmt.struct_name for elmt in self.elmts])})\"\n\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) > 0\n        raw_struct = f\"({','.join([elmt.serialize(raw=True) for elmt in self.elmts])})\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let ({','.join([elmt.name for elmt in self.elmts])}):{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        cd = []\n        for elmt in self.elmts:\n            cd.extend(elmt._serialize_to_calldata())\n        return cd\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        # Need to unpack the tuple  :\n        code = f\"let ({','.join([self.members_names[i] for i in range(len(self.elmts))])}) = {self.name};\\n\"\n        # Now call dump_to_circuit_input for each member\n        # Names must correspond to the members names\n        for i, elmt in enumerate(self.elmts):\n            assert (\n                elmt.name == self.members_names[i]\n            ), f\"Tuple member {i} has name {elmt.name} instead of {self.members_names[i]}\"\n            code += elmt.dump_to_circuit_input()\n        return code\n\n    def __len__(self) -> int:\n        return sum(len(elmt) for elmt in self.elmts)\n\n\nclass felt252(Cairo1SerializableStruct):\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 1\n        raw_struct = f\"{hex(self.elmts[0].value)}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        assert len(self.elmts) == 1\n        return [self.elmts[0].value % STARK]\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError\n\n    def dump_to_circuit_input(self) -> str:\n        code = f\"let {self.name}_384:u384 = {self.name}.into();\\n\"\n        code += f\"circuit_inputs = circuit_inputs.next_2({self.name}_384);\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 1\n            return 1\n        else:\n            return 1\n\n\nclass u384Array(Cairo1SerializableStruct):\n    def serialize(self, raw: bool = False) -> str:\n        if len(self.elmts) == 0:\n            raw_struct = \"array![]\"\n        else:\n            bits = self.bits\n            if self.name == \"g_rhs_sqrt\":\n                # Temp fix before we change the MSMHint and G1Points to depend on the curve id\n                # Todo : remove this\n                curve_id = 1\n            else:\n                curve_id = 0 if bits <= 288 else 1\n\n            raw_struct = f\"{io.int_array_to_u2XX_array(self.elmts, curve_id=curve_id)}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        if len(self.elmts) == 0:\n            return [0]\n        bits = self.bits\n        if bits <= 288 and self.name != \"g_rhs_sqrt\":\n            return io.bigint_split_array(self.elmts, n_limbs=3, prepend_length=True)\n        else:\n            return io.bigint_split_array(self.elmts, n_limbs=4, prepend_length=True)\n\n    @property\n    def struct_name(self) -> str:\n        bits = self.bits\n        if bits <= 288:\n            return \"Array<u288>\"\n        elif bits <= 384:\n            return \"Array<u384>\"\n        else:\n            raise ValueError(f\"Unsupported bit length for u384Array: {bits}\")\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        return f\"let {self.name} = array![{','.join([f'outputs.get_output({offset_to_reference_map[elmt.offset]})' for elmt in self.elmts])}];\"\n\n    def dump_to_circuit_input(self) -> str:\n        next_fn = \"next_2\"\n        code = f\"\"\"\n    for val in {self.name}.span() {{\n        circuit_inputs = circuit_inputs.{next_fn}(*val);\n    }};\"\"\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            return len(self.elmts)\n        else:\n            return None\n\n\nclass FunctionFeltCircuit(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[u384Span]):\n        super().__init__(name, elmts)\n        self.members_names = (\"a_num\", \"a_den\", \"b_num\", \"b_den\")\n\n    @property\n    def a_num(self) -> list[ModuloCircuitElement | PyFelt]:\n        return self.elmts[0].elmts\n\n    @property\n    def a_den(self) -> list[ModuloCircuitElement | PyFelt]:\n        return self.elmts[1].elmts\n\n    @property\n    def b_num(self) -> list[ModuloCircuitElement | PyFelt]:\n        return self.elmts[2].elmts\n\n    @property\n    def b_den(self) -> list[ModuloCircuitElement | PyFelt]:\n        return self.elmts[3].elmts\n\n    @property\n    def struct_name(self) -> str:\n        return \"FunctionFelt\"\n\n    @staticmethod\n    def from_FunctionFelt(\n        name: str, f: FunctionFelt, msm_size: int, batched: bool = False\n    ) -> \"FunctionFeltCircuit\":\n        _a_num, _a_den, _b_num, _b_den = io.padd_function_felt(\n            f, msm_size, py_felt=True, batched=batched\n        )\n        return FunctionFeltCircuit(\n            name=name,\n            elmts=[\n                u384Span(\"a_num\", _a_num),\n                u384Span(\"a_den\", _a_den),\n                u384Span(\"b_num\", _b_num),\n                u384Span(\"b_den\", _b_den),\n            ],\n        )\n\n    def _serialize_to_calldata(self) -> list[int]:\n        cd = []\n        assert len(self.elmts) == 4\n        bits = self.elmts[0].bits\n        if bits <= 288:\n            for elmt in self.elmts:\n                cd.extend(\n                    io.bigint_split_array(elmt.elmts, n_limbs=3, prepend_length=True)\n                )\n        else:\n            for elmt in self.elmts:\n                cd.extend(\n                    io.bigint_split_array(elmt.elmts, n_limbs=4, prepend_length=True)\n                )\n        return cd\n\n    def serialize_input_signature(self) -> str:\n        return f\"{self.name}:FunctionFelt<T>\"\n\n    def serialize(self, raw: bool = False) -> str:\n        raw_struct = f\"FunctionFelt {{ {','.join([f'{self.members_names[i]}: {self.elmts[i].serialize(raw=True)}' for i in range(4)])} }}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for mem_name in self.members_names:\n            code += f\"\"\"\n            for val in {self.name}.{mem_name} {{\n                circuit_inputs = circuit_inputs.next_2(*val);\n            }};\n            \"\"\"\n        return code\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{ {','.join([f'{self.members_names[i]}: {self.elmts[i].extract_from_circuit_output(offset_to_reference_map)}' for i in range(4)])} }};\"\n\n    def __len__(self) -> int:\n        return sum(len(elmt) for elmt in self.elmts)\n\n\nclass u384Span(Cairo1SerializableStruct):\n    def serialize(self, raw: bool = False) -> str:\n        raw_struct = f\"{int_array_to_u384_array(self.elmts)}.span()\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        return io.bigint_split_array(self.elmts, prepend_length=True)\n\n    @property\n    def struct_name(self) -> str:\n        return \"Span<u384>\"\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        return f\"let {self.name}:{self.struct_name} = array![{','.join([f'outputs.get_output({offset_to_reference_map[elmt.offset]})' for elmt in self.elmts])}].span();\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = f\"\"\"let mut {self.name} = {self.name};\n    for val in {self.name} {{\n        circuit_inputs = circuit_inputs.next_2(*val);\n    }};\n    \"\"\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            return len(self.elmts)\n        else:\n            return None\n\n\nclass BLSProcessedPair(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\"yInv\", \"xNegOverY\")\n\n    @property\n    def struct_name(self) -> str:\n        return \"BLSProcessedPair\"\n\n    def serialize(self) -> str:\n        assert len(self.elmts) == 2\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{yInv: {int_to_u384(self.elmts[0].value)}, xNegOverY: {int_to_u384(self.elmts[1].value)}}};\"\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 2\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{ {','.join([f'{self.members_names[i]}: outputs.get_output({offset_to_reference_map[self.elmts[i].offset]})' for i in range(2)])} }};\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for mem_name in self.members_names:\n            code += f\"circuit_inputs = circuit_inputs.next_2({self.name}.{mem_name});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 2\n            return 2\n        else:\n            return 2\n\n\nclass BNProcessedPair(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\"yInv\", \"xNegOverY\", \"QyNeg0\", \"QyNeg1\")\n\n    @property\n    def struct_name(self) -> str:\n        return \"BNProcessedPair\"\n\n    def serialize(self) -> str:\n        assert len(self.elmts) == 4\n        members = \", \".join(\n            [\n                f\"{name}: {int_to_u384(self.elmts[i].value)}\"\n                for i, name in enumerate(self.members_names)\n            ]\n        )\n        return (\n            f\"let {self.name}:{self.struct_name} = {self.struct_name} {{{members}}};\\n\"\n        )\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 4\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{ {','.join([f'{self.members_names[i]}: outputs.get_output({offset_to_reference_map[self.elmts[i].offset]})' for i in range(4)])} }};\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for mem_name in self.members_names:\n            code += f\"circuit_inputs = circuit_inputs.next_2({self.name}.{mem_name});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 4\n            return 4\n        else:\n            return 4\n\n\nclass G1PointCircuit(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\"x\", \"y\")\n\n    @staticmethod\n    def from_G1Point(name: str, point: G1Point) -> \"G1PointCircuit\":\n        field = get_base_field(point.curve_id)\n        return G1PointCircuit(name=name, elmts=[field(point.x), field(point.y)])\n\n    @property\n    def struct_name(self) -> str:\n        return \"G1Point\"\n\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 2\n        raw_struct = f\"{self.struct_name} {{x: {int_to_u384(self.elmts[0].value)}, y: {int_to_u384(self.elmts[1].value)}}}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        return io.bigint_split_array(self.elmts, prepend_length=False)\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 2\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{ {','.join([f'{self.members_names[i]}: outputs.get_output({offset_to_reference_map[self.elmts[i].offset]})' for i in range(2)])} }};\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for mem_name in self.members_names:\n            code += f\"circuit_inputs = circuit_inputs.next_2({self.name}.{mem_name});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 2\n            return 2\n        else:\n            return 2\n\n\nclass G2PointCircuit(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\"x0\", \"x1\", \"y0\", \"y1\")\n\n    @staticmethod\n    def from_G2Point(name: str, point: G2Point) -> \"G2PointCircuit\":\n        field = get_base_field(point.curve_id)\n        return G2PointCircuit(\n            name=name,\n            elmts=[\n                field(point.x[0]),\n                field(point.x[1]),\n                field(point.y[0]),\n                field(point.y[1]),\n            ],\n        )\n\n    @property\n    def struct_name(self) -> str:\n        return \"G2Point\"\n\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 4\n        raw_struct = f\"{self.struct_name} {{x0: {int_to_u384(self.elmts[0].value)}, x1: {int_to_u384(self.elmts[1].value)}, y0: {int_to_u384(self.elmts[2].value)}, y1: {int_to_u384(self.elmts[3].value)}}}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 4\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{ {','.join([f'{self.members_names[i]}: outputs.get_output({offset_to_reference_map[self.elmts[i].offset]})' for i in range(4)])} }};\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for mem_name in self.members_names:\n            code += f\"circuit_inputs = circuit_inputs.next_2({self.name}.{mem_name});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 4\n            return 4\n        else:\n            return 4\n\n\nclass G2Line(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\"r0a0\", \"r0a1\", \"r1a0\", \"r1a1\")\n\n    def serialize_input_signature(self) -> str:\n        bits = self.bits\n        if bits <= 288:\n            return f\"{self.name}:G2Line<u288>\"\n        else:\n            return f\"{self.name}:G2Line<u384>\"\n\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 4\n        bits = self.bits\n        if bits <= 288:\n            curve_id = 0\n        else:\n            curve_id = 1\n\n        raw_struct = f\"{self.struct_name} {{r0a0: {int_to_u2XX(self.elmts[0].value, curve_id=curve_id)}, r0a1: {int_to_u2XX(self.elmts[1].value, curve_id=curve_id)}, r1a0: {int_to_u2XX(self.elmts[2].value, curve_id=curve_id)}, r1a1: {int_to_u2XX(self.elmts[3].value, curve_id=curve_id)}}}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.struct_name} = {raw_struct};\\n\"\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 4\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{ {','.join([f'{self.members_names[i]}: outputs.get_output({offset_to_reference_map[self.elmts[i].offset]})' for i in range(4)])} }};\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        next_fn = \"next_2\"\n        for mem_name in self.members_names:\n            code += (\n                f\"circuit_inputs = circuit_inputs.{next_fn}({self.name}.{mem_name});\\n\"\n            )\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 4\n            return 4\n        else:\n            return 4\n\n\nclass FunctionFeltEvaluations(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\"a_num\", \"a_den\", \"b_num\", \"b_den\")\n\n    def serialize(self) -> str:\n        assert len(self.elmts) == 4\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{a_num: {int_to_u384(self.elmts[0].value)}, a_den: {int_to_u384(self.elmts[1].value)}, b_num: {int_to_u384(self.elmts[2].value)}, b_den: {int_to_u384(self.elmts[3].value)}}};\\n\"\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 4\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{ {','.join([f'{self.members_names[i]}: outputs.get_output({offset_to_reference_map[self.elmts[i].offset]})' for i in range(4)])} }};\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for mem_name in self.members_names:\n            code += f\"circuit_inputs = circuit_inputs.next_2({self.name}.{mem_name});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 4\n            return 4\n        else:\n            return 4\n\n\nclass G1G2PairCircuit(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\"p.x\", \"p.y\", \"q.x0\", \"q.x1\", \"q.y0\", \"q.y1\")\n\n    @property\n    def struct_name(self) -> str:\n        return \"G1G2Pair\"\n\n    def serialize(self) -> str:\n        return (\n            f\"let {self.name}:{self.struct_name} = {self.struct_name} {{\"\n            f\"p: G1Point{{ x:{int_to_u384(self.elmts[0].value)}, y: {int_to_u384(self.elmts[1].value)}}}, \"\n            f\"q: G2Point{{ x0:{int_to_u384(self.elmts[2].value)}, x1: {int_to_u384(self.elmts[3].value)}, y0: {int_to_u384(self.elmts[4].value)}, y1: {int_to_u384(self.elmts[5].value)}}}}};\\n\"\n        )\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 6\n        return f\"let {self.name}:{self.struct_name} = {self.struct_name} {{ {','.join([f'{self.members_names[i]}: outputs.get_output({offset_to_reference_map[self.elmts[i].offset]})' for i in range(6)])} }};\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for mem_name in self.members_names:\n            code += f\"circuit_inputs = circuit_inputs.next_2({self.name}.{mem_name});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 6\n            return 6\n        else:\n            return 6\n\n\nclass E12D(Cairo1SerializableStruct):\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 12\n        code = (\n            f\"let {self.name}:{self.__class__.__name__} = {self.__class__.__name__}{{\\n\"\n        )\n        for i, elmt in enumerate(self.elmts):\n            code += (\n                f\"w{i}:outputs.get_output({offset_to_reference_map[elmt.offset]}),\\n\"\n            )\n        code += \"};\"\n        return code\n\n    @property\n    def struct_name(self) -> str:\n        p = self.elmts[0].p\n        if p.bit_length() <= 288:\n            return \"E12D<u288>\"\n        else:\n            return \"E12D<u384>\"\n\n    def serialize(self, raw: bool = False, is_option: bool = False) -> str:\n        if self.elmts is None:\n            raw_struct = \"Option::None\"\n            if raw:\n                return raw_struct\n            else:\n                return f\"let {self.name}:Option<{self.__class__.__name__}> = {raw_struct};\\n\"\n        else:\n            assert len(self.elmts) == 12\n            bits: int = self.elmts[0].p.bit_length()\n            if bits <= 288:\n                curve_id = 0\n            else:\n                curve_id = 1\n\n            raw_struct = (\n                f\"{self.__class__.__name__}{{\"\n                + f\"{','.join([f'w{i}: {int_to_u2XX(self.elmts[i].value, curve_id=curve_id)}' for i in range(len(self))])}}}\"\n            )\n            if is_option:\n                raw_struct = f\"Option::Some({raw_struct})\"\n            if raw:\n                return raw_struct\n            else:\n                return f\"let {self.name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        bits: int = self.bits\n        if bits <= 288:\n            return io.bigint_split_array(self.elmts, n_limbs=3, prepend_length=False)\n        elif bits <= 384:\n            return io.bigint_split_array(self.elmts, n_limbs=4, prepend_length=False)\n        else:\n            raise ValueError(f\"Unsupported bit length for E12D: {bits}\")\n\n    def dump_to_circuit_input(self) -> str:\n        bits: int = self.elmts[0].p.bit_length()\n        code = \"\"\n        next_fn = \"next_2\"\n        for i in range(len(self)):\n            code += f\"circuit_inputs = circuit_inputs.{next_fn}({self.name}.w{i});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 12\n            return 12\n        else:\n            return 12\n\n\nclass E12T(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\n            \"c0b0a0\",\n            \"c0b0a1\",\n            \"c0b1a0\",\n            \"c0b1a1\",\n            \"c0b2a0\",\n            \"c0b2a1\",\n            \"c1b0a0\",\n            \"c1b0a1\",\n            \"c1b1a0\",\n            \"c1b1a1\",\n            \"c1b2a0\",\n            \"c1b2a1\",\n        )\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 12\n        code = (\n            f\"let {self.name}:{self.__class__.__name__} = {self.__class__.__name__}{{\\n\"\n        )\n        for i, elmt in enumerate(self.elmts):\n            code += f\"{self.members_names[i]}:outputs.get_output({offset_to_reference_map[elmt.offset]}),\\n\"\n        code += \"};\"\n        return code\n\n    def serialize(self, raw: bool = False, is_option: bool = False) -> str:\n        if self.elmts is None:\n            raw_struct = \"Option::None\"\n            if raw:\n                return raw_struct\n            else:\n                return f\"let {self.name}:Option<{self.__class__.__name__}> = {raw_struct};\\n\"\n        else:\n            assert len(self.elmts) == 12\n\n            raw_struct = (\n                f\"{self.__class__.__name__}{{\"\n                + f\"{','.join([f'{self.members_names[i]}: {int_to_u384(self.elmts[i].value)}' for i in range(len(self))])}}}\"\n            )\n            if is_option:\n                raw_struct = f\"Option::Some({raw_struct})\"\n            if raw:\n                return raw_struct\n            else:\n                return f\"let {self.name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        return io.bigint_split_array(self.elmts, n_limbs=4, prepend_length=False)\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for i in range(len(self)):\n            code += f\"circuit_inputs = circuit_inputs.next_2({self.name}.{self.members_names[i]});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 12\n            return 12\n        else:\n            return 12\n\n\nclass E12DMulQuotient(Cairo1SerializableStruct):\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 11\n        code = (\n            f\"let {self.name}:{self.__class__.__name__} = {self.__class__.__name__}{{\\n\"\n        )\n        for i, elmt in enumerate(self.elmts):\n            code += (\n                f\"w{i}:outputs.get_output({offset_to_reference_map[elmt.offset]}),\\n\"\n            )\n        code += \"};\"\n        return code\n\n    @property\n    def struct_name(self) -> str:\n        p = self.elmts[0].p\n        if p.bit_length() <= 288:\n            return \"E12DMulQuotient<u288>\"\n        else:\n            return \"E12DMulQuotient<u384>\"\n\n    def serialize(self, raw: bool = False, is_option: bool = False) -> str:\n        if self.elmts is None:\n            raw_struct = \"Option::None\"\n            if raw:\n                return raw_struct\n            else:\n                return f\"let {self.name}:Option<{self.__class__.__name__}> = {raw_struct};\\n\"\n        else:\n            assert len(self.elmts) == 11\n            bits: int = self.elmts[0].p.bit_length()\n            if bits <= 288:\n                curve_id = 0\n            else:\n                curve_id = 1\n\n            raw_struct = (\n                f\"{self.__class__.__name__}{{\"\n                + f\"{','.join([f'w{i}: {int_to_u2XX(self.elmts[i].value, curve_id=curve_id)}' for i in range(len(self))])}}}\"\n            )\n            if is_option:\n                raw_struct = f\"Option::Some({raw_struct})\"\n            if raw:\n                return raw_struct\n            else:\n                return f\"let {self.name} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        bits: int = self.bits\n        if bits <= 288:\n            return io.bigint_split_array(self.elmts, n_limbs=3, prepend_length=False)\n        elif bits <= 384:\n            return io.bigint_split_array(self.elmts, n_limbs=4, prepend_length=False)\n        else:\n            raise ValueError(f\"Unsupported bit length for E12D: {bits}\")\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        next_fn = \"next_2\"\n        for i in range(len(self)):\n            code += f\"circuit_inputs = circuit_inputs.{next_fn}({self.name}.w{i});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 11\n            return 11\n        else:\n            return 11\n\n\nclass MillerLoopResultScalingFactor(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\"w0\", \"w2\", \"w4\", \"w6\", \"w8\", \"w10\")\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        raise NotImplementedError(\"Never used in practice\")\n\n    def serialize_input_signature(self) -> str:\n        bits = self.bits\n        if bits <= 288:\n            return f\"{self.name}:MillerLoopResultScalingFactor<u288>\"\n        else:\n            return f\"{self.name}:MillerLoopResultScalingFactor<u384>\"\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        next_fn = \"next_2\"\n        for mem_name in self.members_names:\n            code += (\n                f\"circuit_inputs = circuit_inputs.{next_fn}({self.name}.{mem_name});\\n\"\n            )\n        return code\n\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 6\n        bits = self.bits\n        if bits <= 288:\n            curve_id = 0\n        else:\n            curve_id = 1\n        raw_struct = f\"{self.__class__.__name__}{{{','.join([f'{self.members_names[i]}: {int_to_u2XX(self.elmts[i].value, curve_id=curve_id)}' for i in range(len(self))])}}}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.__class__.__name__} = {raw_struct};\\n\"\n\n    def _serialize_to_calldata(self) -> list[int]:\n        bits = self.bits\n        if bits <= 288:\n            return io.bigint_split_array(self.elmts, n_limbs=3, prepend_length=False)\n        else:\n            return io.bigint_split_array(self.elmts, n_limbs=4, prepend_length=False)\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 6\n            return 6\n        else:\n            return 6\n\n\nclass SlopeInterceptOutput(Cairo1SerializableStruct):\n    def __init__(self, name: str, elmts: list[ModuloCircuitElement]):\n        super().__init__(name, elmts)\n        self.members_names = (\"m_A0\", \"b_A0\", \"x_A2\", \"y_A2\", \"coeff0\", \"coeff2\")\n\n    def serialize(self, raw: bool = False) -> str:\n        assert len(self.elmts) == 6\n        raw_struct = f\"{self.__class__.__name__}{{{','.join([f'{self.members_names[i]}: {int_to_u384(self.elmts[i].value)}' for i in range(len(self))])}}}\"\n        if raw:\n            return raw_struct\n        else:\n            return f\"let {self.name}:{self.__class__.__name__} = {raw_struct};\\n\"\n\n    def extract_from_circuit_output(\n        self, offset_to_reference_map: dict[int, str]\n    ) -> str:\n        assert len(self.elmts) == 6\n        code = (\n            f\"let {self.name}:{self.__class__.__name__} = {self.__class__.__name__}{{\\n\"\n        )\n        for mem_name, elmt in zip(self.members_names, self.elmts):\n            code += f\"{mem_name}: outputs.get_output({offset_to_reference_map[elmt.offset]}),\\n\"\n        code += \"};\"\n        return code\n\n    def dump_to_circuit_input(self) -> str:\n        code = \"\"\n        for mem_name in self.members_names:\n            code += f\"circuit_inputs = circuit_inputs.next_2({self.name}.{mem_name});\\n\"\n        return code\n\n    def __len__(self) -> int:\n        if self.elmts is not None:\n            assert len(self.elmts) == 6\n            return 6\n        else:\n            return 6\n"
  },
  {
    "path": "hydra/garaga/points.py",
    "content": "import functools\nimport random\nfrom dataclasses import dataclass\n\nfrom fastecdsa import curvemath\n\nfrom garaga.algebra import Fp2, ModuloCircuitElement, Polynomial, PyFelt, get_sparsity\nfrom garaga.curves import (\n    CURVES,\n    GARAGA_RS_SUPPORTED_CURVES,\n    CurveID,\n    PairingCurve,\n    get_base_field,\n    get_irreducible_poly,\n)\nfrom garaga.hints.io import int_to_u384\n\n\n@dataclass(slots=True)\nclass G1Point:\n    \"\"\"\n    Represents a point on G1, the group of rational points on an elliptic curve over the base field.\n\n    Attributes:\n        x (int): The x-coordinate of the point.\n        y (int): The y-coordinate of the point.\n        curve_id (CurveID): The identifier of the elliptic curve.\n    \"\"\"\n\n    x: int\n    y: int\n    curve_id: CurveID\n    iso_point: bool = False\n\n    def __repr__(self) -> str:\n        return f\"G1Point({hex(self.x)}, {hex(self.y)}) on {self.curve_id.value}\"\n\n    def __str__(self) -> str:\n        return f\"G1Point({self.x}, {self.y}) on curve {self.curve_id}\"\n\n    def __hash__(self):\n        return hash((self.x, self.y, self.curve_id, self.iso_point))\n\n    def __eq__(self, other: object) -> bool:\n        \"\"\"\n        Checks if two G1Point instances are equal.\n\n        Args:\n            other (G1Point): The other point to compare.\n\n        Returns:\n            bool: True if the points are equal, False otherwise.\n        \"\"\"\n        if not isinstance(other, G1Point):\n            raise ValueError(f\"Cannot compare G1Point with {type(other)}\")\n        return (\n            self.x == other.x\n            and self.y == other.y\n            and self.curve_id.value == other.curve_id.value\n            and self.iso_point == other.iso_point\n        )\n\n    def __post_init__(self):\n        \"\"\"\n        Post-initialization checks to ensure the point is valid.\n        \"\"\"\n        if self.is_infinity():\n            return\n        if not self.is_on_curve():\n            raise ValueError(f\"Point {self} is not on the curve {self.curve_id}\")\n\n    @staticmethod\n    def infinity(curve_id: CurveID) -> \"G1Point\":\n        \"\"\"\n        Returns the point at infinity for the given curve.\n\n        Args:\n            curve_id (CurveID): The identifier of the elliptic curve.\n\n        Returns:\n            G1Point: The point at infinity.\n        \"\"\"\n        return G1Point(0, 0, curve_id)\n\n    def is_infinity(self) -> bool:\n        \"\"\"\n        Checks if the point is the point at infinity.\n\n        Returns:\n            bool: True if the point is at infinity, False otherwise.\n        \"\"\"\n        return self.x == 0 and self.y == 0\n\n    def to_cairo_1(self, as_hex: bool = True) -> str:\n        \"\"\"\n        Converts the point to a Cairo 1 representation.\n\n        Returns:\n            str: The Cairo 1 representation of the point.\n        \"\"\"\n        return f\"G1Point{{x: {int_to_u384(self.x, as_hex)}, y: {int_to_u384(self.y, as_hex)}}}\"\n\n    @staticmethod\n    def gen_random_point_not_in_subgroup(\n        curve_id: CurveID, force_gen: bool = False\n    ) -> \"G1Point\":\n        \"\"\"\n        Generates a random point not in the prime order subgroup.\n\n        Args:\n            curve_id (CurveID): The identifier of the elliptic curve.\n            force_gen (bool): Force generation even if the cofactor is 1.\n\n        Returns:\n            G1Point: A random point not in the prime order subgroup.\n\n        Raises:\n            ValueError: If the cofactor is 1 and force_gen is False.\n        \"\"\"\n        curve_idx = curve_id.value\n        if CURVES[curve_idx].h == 1:\n            if force_gen:\n                return G1Point.gen_random_point(curve_id)\n            else:\n                raise ValueError(\n                    \"Cofactor is 1, cannot generate a point not in the subgroup\"\n                )\n        else:\n            field = get_base_field(curve_idx)\n            while True:\n                x = field.random()\n                y2 = x**3 + CURVES[curve_idx].a * x + CURVES[curve_idx].b\n                try:\n                    tentative_point = G1Point(x.value, y2.sqrt().value, curve_id)\n                except ValueError:\n                    continue\n                if not tentative_point.is_in_prime_order_subgroup_generic():\n                    return tentative_point\n\n    def is_in_prime_order_subgroup_generic(self) -> bool:\n        \"\"\"\n        Checks if the point is in the prime order subgroup.\n\n        Returns:\n            bool: True if the point is in the prime order subgroup, False otherwise.\n        \"\"\"\n        return self.scalar_mul(CURVES[self.curve_id.value].n).is_infinity()\n\n    def is_in_prime_order_subgroup(self) -> bool:\n        if CURVES[self.curve_id.value].h == 1:\n            # Cofactor is 1 : points on the curve <=> points in the prime order subgroup\n            return self.is_on_curve() or self.is_infinity()\n        else:\n            if self.curve_id == CurveID.BLS12_381:\n                # we check that p+x²ϕ(p)\n                # is the infinity.\n                third_root_of_unity = 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC\n                phi_p = G1Point(\n                    self.x * third_root_of_unity % CURVES[self.curve_id.value].p,\n                    self.y,\n                    self.curve_id,\n                )\n                x_seed_sq = (CURVES[self.curve_id.value].x) ** 2\n                return phi_p.scalar_mul(x_seed_sq).add(self).is_infinity()\n            else:\n                return self.is_in_prime_order_subgroup_generic()\n\n    def is_on_curve(self) -> bool:\n        \"\"\"\n        Checks if the point is on the curve using the curve equation y^2 = x^3 + ax + b.\n\n        Returns:\n            bool: True if the point is on the curve, False otherwise.\n        \"\"\"\n        if self.iso_point:\n            a = CURVES[self.curve_id.value].swu_params.A\n            b = CURVES[self.curve_id.value].swu_params.B\n        else:\n            a = CURVES[self.curve_id.value].a\n            b = CURVES[self.curve_id.value].b\n\n        p = CURVES[self.curve_id.value].p\n        lhs = self.y**2 % p\n        rhs = (self.x**3 + a * self.x + b) % p\n        return lhs == rhs\n\n    @staticmethod\n    def gen_random_point(curve_id: CurveID) -> \"G1Point\":\n        \"\"\"\n        Generates a random point on a given curve.\n\n        Args:\n            curve_id (CurveID): The identifier of the elliptic curve.\n\n        Returns:\n            G1Point: A random point on the curve.\n        \"\"\"\n        scalar = random.randint(1, CURVES[curve_id.value].n - 1)\n\n        return G1Point.get_nG(curve_id, scalar)\n\n    @staticmethod\n    def get_nG(curve_id: CurveID, n: int) -> \"G1Point\":\n        \"\"\"\n        Returns the scalar multiplication of the generator point on a given curve by the scalar n.\n\n        Args:\n            curve_id (CurveID): The identifier of the elliptic curve.\n            n (int): The scalar to multiply by.\n\n        Returns:\n            G1Point: The resulting point after scalar multiplication.\n\n        Raises:\n            AssertionError: If n is not less than the order of the curve.\n        \"\"\"\n        assert (\n            n < CURVES[curve_id.value].n\n        ), \"n must be less than the order of the curve\"\n\n        gen = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n        return gen.scalar_mul(n)\n\n    @staticmethod\n    def msm(points: list[\"G1Point\"], scalars: list[int]) -> \"G1Point\":\n        \"\"\"\n        Performs multi-scalar multiplication (MSM) on a list of points and scalars.\n\n        Args:\n            points (list[G1Point]): The list of points.\n            scalars (list[int]): The list of scalars.\n\n        Returns:\n            G1Point: The resulting point after MSM.\n        \"\"\"\n        assert len(points) == len(\n            scalars\n        ), f\"Points and scalar length mismatch: {len(points)} points and {len(scalars)} scalars\"\n        muls = [P.scalar_mul(s) for P, s in zip(points, scalars)]\n        scalar_mul = functools.reduce(lambda acc, p: acc.add(p), muls)\n        return scalar_mul\n\n    def scalar_mul(self, scalar: int) -> \"G1Point\":\n        \"\"\"\n        Performs scalar multiplication on the point.\n\n        Args:\n            scalar (int): The scalar to multiply by. abs(scalar) should be less than the order of the curve.\n\n        Returns:\n            G1Point: The resulting point after scalar multiplication.\n        \"\"\"\n        if self.is_infinity():\n            return self\n        if scalar == 0:\n            return G1Point(0, 0, self.curve_id, self.iso_point)\n        if self.iso_point:\n            a = CURVES[self.curve_id.value].swu_params.A\n            b = CURVES[self.curve_id.value].swu_params.B\n        else:\n            a = CURVES[self.curve_id.value].a\n            b = CURVES[self.curve_id.value].b\n        # Fastecdsa C binding.\n        x, y = curvemath.mul(\n            str(self.x),\n            str(self.y),\n            str(abs(scalar)),\n            str(CURVES[self.curve_id.value].p),\n            str(a),\n            str(b),\n            str(CURVES[self.curve_id.value].n),\n            str(CURVES[self.curve_id.value].Gx),\n            str(CURVES[self.curve_id.value].Gy),\n        )\n        # Fastecdsa already returns (0, 0) for the identity element.\n        if scalar < 0:\n            return -G1Point(int(x), int(y), self.curve_id, self.iso_point)\n        else:\n            return G1Point(int(x), int(y), self.curve_id, self.iso_point)\n\n    def add(self, other: \"G1Point\") -> \"G1Point\":\n        \"\"\"\n        Adds two points on the elliptic curve.\n\n        Args:\n            other (G1Point): The other point to add.\n\n        Returns:\n            G1Point: The resulting point after addition.\n\n        Raises:\n            ValueError: If the points are not on the same curve.\n        \"\"\"\n        if self.is_infinity():\n            return other\n        if other.is_infinity():\n            return self\n        if self.curve_id != other.curve_id:\n            raise ValueError(\"Points are not on the same curve\")\n        if self.iso_point != other.iso_point:\n            raise ValueError(\"Points are not on the same curve\")\n        if self.iso_point:\n            a = CURVES[self.curve_id.value].swu_params.A\n            b = CURVES[self.curve_id.value].swu_params.B\n        else:\n            a = CURVES[self.curve_id.value].a\n            b = CURVES[self.curve_id.value].b\n\n        x, y = curvemath.add(\n            str(self.x),\n            str(self.y),\n            str(other.x),\n            str(other.y),\n            str(CURVES[self.curve_id.value].p),\n            str(a),\n            str(b),\n            str(CURVES[self.curve_id.value].n),\n            str(CURVES[self.curve_id.value].Gx),\n            str(CURVES[self.curve_id.value].Gy),\n        )\n        # NB : Fastecdsa returns (0, 0) for the identity element.\n        return G1Point(int(x), int(y), self.curve_id, self.iso_point)\n\n    def __neg__(self) -> \"G1Point\":\n        \"\"\"\n        Negates the point on the elliptic curve.\n\n        Returns:\n            G1Point: The negated point.\n        \"\"\"\n        return G1Point(\n            self.x,\n            -self.y % CURVES[self.curve_id.value].p,\n            self.curve_id,\n            self.iso_point,\n        )\n\n    def to_pyfelt_list(self) -> list[PyFelt]:\n        field = get_base_field(self.curve_id.value)\n        return [field(self.x), field(self.y)]\n\n    def serialize_to_cairo(self, name: str, raw: bool = False) -> str:\n        import garaga.modulo_circuit_structs as structs\n\n        return structs.G1PointCircuit(name=name, elmts=self.to_pyfelt_list()).serialize(\n            raw\n        )\n\n\n@dataclass(frozen=True)\nclass G2Point:\n    \"\"\"\n    Represents a point on G2, the group of rational points on an elliptic curve over an extension field.\n    \"\"\"\n\n    x: tuple[int, int]\n    y: tuple[int, int]\n    curve_id: CurveID\n\n    def __repr__(self):\n        return f\"G2Point({hex(self.x[0])}, {hex(self.x[1])}, {hex(self.y[0])}, {hex(self.y[1])}, {self.curve_id})\"\n\n    def __post_init__(self):\n        assert isinstance(CURVES[self.curve_id.value], PairingCurve)\n        if self.is_infinity():\n            return\n        if not self.is_on_curve():\n            raise ValueError(f\"G2 Point is not on the curve {self.curve_id}\")\n\n    @staticmethod\n    def infinity(curve_id: CurveID) -> \"G2Point\":\n        return G2Point((0, 0), (0, 0), curve_id)\n\n    def __eq__(self, other: \"G2Point\") -> bool:\n        return (\n            self.x[0] == other.x[0]\n            and self.x[1] == other.x[1]\n            and self.y[0] == other.y[0]\n            and self.y[1] == other.y[1]\n            and self.curve_id == other.curve_id\n        )\n\n    def is_infinity(self) -> bool:\n        return self.x == (0, 0) and self.y == (0, 0)\n\n    def is_on_curve(self) -> bool:\n        \"\"\"\n        Check if the point is on the curve using the curve equation y^2 = x^3 + ax + b in the extension field.\n        \"\"\"\n        from garaga.hints.tower_backup import E2\n\n        curve = CURVES[self.curve_id.value]\n        assert isinstance(curve, PairingCurve)\n        a = curve.a\n        p = curve.p\n        b = E2(curve.b20, curve.b21, p)\n        y = E2(*self.y, p)\n        x = E2(*self.x, p)\n        return y**2 == x**3 + a * x + b\n\n    @staticmethod\n    def gen_random_point(curve_id: CurveID) -> \"G2Point\":\n        \"\"\"\n        Generates a random point on a given curve.\n        \"\"\"\n        from garaga import garaga_rs\n\n        curve = CURVES[curve_id.value]\n        assert isinstance(curve, PairingCurve)\n        scalar = random.randint(1, curve.n - 1)\n        a = (curve.G2x[0], curve.G2x[1], curve.G2y[0], curve.G2y[1])\n        b = garaga_rs.g2_scalar_mul(curve_id.value, a, scalar)\n        return G2Point((b[0], b[1]), (b[2], b[3]), curve_id)\n\n    def is_in_prime_order_subgroup_generic(self) -> bool:\n        return self.scalar_mul(CURVES[self.curve_id.value].n).is_infinity()\n\n    def is_in_prime_order_subgroup(self) -> bool:\n        if CURVES[self.curve_id.value].h == 1:\n            # Cofactor is 1 : points on the curve <=> points in the prime order subgroup\n            return self.is_on_curve() or self.is_infinity()\n        else:\n            if self.curve_id == CurveID.BLS12_381:\n                # https://github.com/Consensys/gnark/blob/9ed0eab21e8935cb180d1f75713cd2c29c91a3c9/std/algebra/emulated/sw_bls12381/g2.go\n                field = get_base_field(self.curve_id.value)\n                seed_Q = self.scalar_mul(\n                    -CURVES[self.curve_id.value].x\n                )  # Note the negative sign.\n                u1 = 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD\n                v = Fp2(\n                    field(\n                        0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2\n                    ),\n                    field(\n                        0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09\n                    ),\n                )\n\n                psi_Qx = (\n                    (field(self.x[1]) * u1).value,\n                    (field(self.x[0]) * u1).value,\n                )  # Note the reversal of x and y\n\n                psi_Qy = Fp2(field(self.y[0]), -field(self.y[1])) * v\n\n                psi_Qy = (psi_Qy.a0.value, psi_Qy.a1.value)\n\n                psi_Q = G2Point(psi_Qx, psi_Qy, self.curve_id)\n\n                # [r]Q == 0 <==>  ψ(Q) == [x₀]Q <=> ψ(Q) + [-x₀]Q = 0\n\n                return psi_Q.add(seed_Q).is_infinity()\n            else:\n                return self.is_in_prime_order_subgroup_generic()\n\n    @staticmethod\n    def gen_random_point_not_in_subgroup(\n        curve_id: CurveID, force_gen: bool = False\n    ) -> \"G2Point\":\n        \"\"\"\n        Generates a random point not in the prime order subgroup.\n\n        Args:\n            curve_id (CurveID): The identifier of the elliptic curve.\n            force_gen (bool): Force generation even if the cofactor is 1.\n\n        Returns:\n            G2Point: A random point not in the prime order subgroup.\n\n        Raises:\n            ValueError: If the cofactor is 1 and force_gen is False.\n        \"\"\"\n        curve_idx = curve_id.value\n        if CURVES[curve_idx].h == 1:\n            if force_gen:\n                return G2Point.gen_random_point(curve_id)\n            else:\n                raise ValueError(\n                    \"Cofactor is 1, cannot generate a point not in the subgroup\"\n                )\n        else:\n            field = get_base_field(curve_idx)\n            while True:\n                x = field.random()\n                y2 = x**3 + CURVES[curve_idx].a * x + CURVES[curve_idx].b\n                try:\n                    tentative_point = G1Point(x.value, y2.sqrt().value, curve_id)\n                except ValueError:\n                    continue\n                if not tentative_point.is_in_prime_order_subgroup_generic():\n                    return tentative_point\n\n    @staticmethod\n    def get_nG(curve_id: CurveID, n: int) -> \"G2Point\":\n        \"\"\"\n        Returns the scalar multiplication of the generator point on a given curve by the scalar n.\n        \"\"\"\n        from garaga import garaga_rs\n\n        assert (\n            n < CURVES[curve_id.value].n\n        ), \"n must be less than the order of the curve\"\n\n        if curve_id.value in GARAGA_RS_SUPPORTED_CURVES:\n            curve = CURVES[curve_id.value]\n            a = (curve.G2x[0], curve.G2x[1], curve.G2y[0], curve.G2y[1])\n            b = garaga_rs.g2_scalar_mul(curve_id.value, a, n)\n            return G2Point((b[0], b[1]), (b[2], b[3]), curve_id)\n        else:\n            raise NotImplementedError(\n                \"G2Point.get_nG is not implemented for this curve\"\n            )\n\n    def scalar_mul(self, scalar: int) -> \"G2Point\":\n        if self.is_infinity():\n            return self\n        if scalar == 0:\n            return G2Point((0, 0), (0, 0), self.curve_id)\n        if scalar < 0:\n            return -self.scalar_mul(-scalar)\n        if self.curve_id.value in GARAGA_RS_SUPPORTED_CURVES:\n            from garaga import garaga_rs\n\n            a = (self.x[0], self.x[1], self.y[0], self.y[1])\n            b = garaga_rs.g2_scalar_mul(self.curve_id.value, a, scalar)\n            return G2Point((b[0], b[1]), (b[2], b[3]), self.curve_id)\n        else:\n            raise NotImplementedError(\n                \"G2Point.scalar_mul is not implemented for this curve\"\n            )\n\n    def add(self, other: \"G2Point\") -> \"G2Point\":\n        if self.is_infinity():\n            return other\n        if other.is_infinity():\n            return self\n        if self.curve_id != other.curve_id:\n            raise ValueError(\"Points are not on the same curve\")\n        if self.curve_id.value in GARAGA_RS_SUPPORTED_CURVES:\n            from garaga import garaga_rs\n\n            a = (self.x[0], self.x[1], self.y[0], self.y[1])\n            b = (other.x[0], other.x[1], other.y[0], other.y[1])\n            c = garaga_rs.g2_add(self.curve_id.value, a, b)\n            return G2Point((c[0], c[1]), (c[2], c[3]), self.curve_id)\n        else:\n            raise NotImplementedError(\"G2Point.add is not implemented for this curve\")\n\n    def __neg__(self) -> \"G2Point\":\n        p = CURVES[self.curve_id.value].p\n        return G2Point(\n            (self.x[0], self.x[1]), (-self.y[0] % p, -self.y[1] % p), self.curve_id\n        )\n\n    @staticmethod\n    def msm(points: list[\"G2Point\"], scalars: list[int]) -> \"G2Point\":\n        assert all(isinstance(p, G2Point) for p in points)\n        assert len(points) == len(scalars)\n        muls = [P.scalar_mul(s) for P, s in zip(points, scalars)]\n        scalar_mul = functools.reduce(lambda acc, p: acc.add(p), muls)\n        return scalar_mul\n\n    def to_pyfelt_list(self) -> list[PyFelt]:\n        field = get_base_field(self.curve_id.value)\n        return [field(x) for x in self.x + self.y]\n\n    def serialize_to_cairo(self, name: str, raw: bool = False) -> str:\n        import garaga.modulo_circuit_structs as structs\n\n        return structs.G2PointCircuit(name=name, elmts=self.to_pyfelt_list()).serialize(\n            raw\n        )\n\n\n@dataclass(slots=True)\nclass G1G2Pair:\n    p: G1Point\n    q: G2Point\n    curve_id: CurveID = None\n\n    def __hash__(self):\n        return hash((self.p, self.q, self.curve_id))\n\n    def __post_init__(self):\n        if self.p.curve_id != self.q.curve_id:\n            raise ValueError(\"Points are not on the same curve\")\n        self.curve_id = self.p.curve_id\n\n    def to_pyfelt_list(self) -> list[PyFelt]:\n        field = get_base_field(self.curve_id.value)\n        return [\n            field(x)\n            for x in [\n                self.p.x,\n                self.p.y,\n                self.q.x[0],\n                self.q.x[1],\n                self.q.y[0],\n                self.q.y[1],\n            ]\n        ]\n\n    @staticmethod\n    def pair(pairs: list[\"G1G2Pair\"], curve_id: CurveID = None):\n        from garaga.hints.tower_backup import E12  # avoids cycle\n\n        if curve_id is None:\n            if len(pairs) == 0:\n                raise ValueError(\"Unspecified curve\")\n            curve_id = pairs[0].curve_id\n        if curve_id.value in GARAGA_RS_SUPPORTED_CURVES:\n            from garaga import garaga_rs\n\n            args = []\n            for pair in pairs:\n                if pair.curve_id != curve_id:\n                    raise ValueError(\"Pairs are not on the same curve\")\n                args.append(pair.p.x)\n                args.append(pair.p.y)\n                args.append(pair.q.x[0])\n                args.append(pair.q.x[1])\n                args.append(pair.q.y[0])\n                args.append(pair.q.y[1])\n            res = garaga_rs.multi_pairing(curve_id.value, args)\n            return E12(res, curve_id.value)\n        else:\n            raise NotImplementedError(\"G1G2Pair.pair is not implemented for this curve\")\n\n    @staticmethod\n    def miller(pairs: list[\"G1G2Pair\"], curve_id: CurveID = None):\n        from garaga.hints.tower_backup import E12  # avoids cycle\n\n        if curve_id is None:\n            if len(pairs) == 0:\n                raise ValueError(\"Unspecified curve\")\n            curve_id = pairs[0].curve_id\n        if curve_id.value in GARAGA_RS_SUPPORTED_CURVES:\n            from garaga import garaga_rs\n\n            args = []\n            for pair in pairs:\n                if pair.curve_id != curve_id:\n                    raise ValueError(\"Pairs are not on the same curve\")\n                args.append(pair.p.x)\n                args.append(pair.p.y)\n                args.append(pair.q.x[0])\n                args.append(pair.q.x[1])\n                args.append(pair.q.y[0])\n                args.append(pair.q.y[1])\n            res = garaga_rs.multi_miller_loop(curve_id.value, args)\n            return E12(res, curve_id.value)\n        else:\n            raise NotImplementedError(\n                \"G1G2Pair.miller is not implemented for this curve\"\n            )\n\n\n# v^6 - 18v^3 + 82\n# w^12 - 18w^6 + 82\n# v^6 - 2v^3 + 2\n# w^12 - 2w^6 + 2\n\n\ndef tower_to_direct(\n    X: list[PyFelt], curve_id: int, extension_degree: int\n) -> list[PyFelt]:\n    \"\"\"\n    Convert Tower to Direct extension field representation:\n    T(u,v) = t0+t1u + (t2+t3u)v + (t4+t5u)v^2\n    D(v) = d0+d1v+d2v^2+d3v^3+d4v^4+d5v^5\n\n    Only tested with BN254 and BLS12_381 6th and 12th towers defined in this file.\n    They were computed by hand then abstracted away with no guarantee of genericity under different tower constructions.\n    \"\"\"\n    assert len(X) == extension_degree and isinstance(\n        X[0], PyFelt\n    ), f\"len(X)={len(X)}, type(X[0])={type(X[0])}\"\n    if extension_degree == 2:\n        return X\n    if extension_degree == 6:\n        return TD6(X, curve_id)\n    elif extension_degree == 12:\n        return TD12(X, curve_id)\n    else:\n        raise ValueError(f\"Unsupported extension degree {extension_degree}\")\n\n\ndef direct_to_tower(\n    X: list[PyFelt | ModuloCircuitElement], curve_id: int, extension_degree: int\n) -> list[PyFelt]:\n    \"\"\"\n    Convert Direct to Tower extension field representation:\n    Input : D(v) = d0+d1v+d2v^2+d3v^3+d4v^4+d5v^5\n    Output: T(u,v) = t0+t1u + (t2+t3u)v + (t4+t5u)v^2\n\n    Only tested with BN254 and BLS12_381 6th and 12th towers defined in this file.\n    They were computed by hand then abstracted away with no guarantee of genericity under different tower constructions.\n    \"\"\"\n    assert len(X) == extension_degree and isinstance(\n        X[0], (PyFelt, ModuloCircuitElement)\n    ), f\"{type(X[0])}, len(X)={len(X)}\"\n    X = [x.felt for x in X]\n    if extension_degree == 2:\n        return X\n    if extension_degree == 6:\n        return DT6(X, curve_id)\n    elif extension_degree == 12:\n        return DT12(X, curve_id)\n    else:\n        raise ValueError(f\"Unsupported extension degree {extension_degree}\")\n\n\ndef TD6(X: list[PyFelt], curve_id: int) -> list[PyFelt]:\n    curve = CURVES[curve_id]\n    assert isinstance(curve, PairingCurve)\n    nr_a0 = curve.nr_a0\n    return [\n        X[0] - nr_a0 * X[1],\n        X[2] - nr_a0 * X[3],\n        X[4] - nr_a0 * X[5],\n        X[1],\n        X[3],\n        X[5],\n    ]\n\n\ndef DT6(X: list[PyFelt], curve_id: int) -> list[PyFelt]:\n    curve = CURVES[curve_id]\n    assert isinstance(curve, PairingCurve)\n    nr_a0 = curve.nr_a0\n    return [\n        X[0] + nr_a0 * X[3],\n        X[3],\n        X[1] + nr_a0 * X[4],\n        X[4],\n        X[2] + nr_a0 * X[5],\n        X[5],\n    ]\n\n\ndef TD12(X: list[PyFelt], curve_id: int) -> list[PyFelt]:\n    curve = CURVES[curve_id]\n    assert isinstance(curve, PairingCurve)\n    nr_a0 = curve.nr_a0\n    return [\n        X[0] - nr_a0 * X[1],\n        X[6] - nr_a0 * X[7],\n        X[2] - nr_a0 * X[3],\n        X[8] - nr_a0 * X[9],\n        X[4] - nr_a0 * X[5],\n        X[10] - nr_a0 * X[11],\n        X[1],\n        X[7],\n        X[3],\n        X[9],\n        X[5],\n        X[11],\n    ]\n\n\ndef DT12(X: list[PyFelt], curve_id: int) -> list[PyFelt]:\n    X += (12 - len(X)) * [0]\n    curve = CURVES[curve_id]\n    assert isinstance(curve, PairingCurve)\n    nr_a0 = curve.nr_a0\n    return [\n        X[0] + nr_a0 * X[6],\n        X[6],\n        X[2] + nr_a0 * X[8],\n        X[8],\n        X[4] + nr_a0 * X[10],\n        X[10],\n        X[1] + nr_a0 * X[7],\n        X[7],\n        X[3] + nr_a0 * X[9],\n        X[9],\n        X[5] + nr_a0 * X[11],\n        X[11],\n    ]\n\n\ndef precompute_lineline_sparsity(curve_id: int):\n    curve = CURVES[curve_id]\n    assert isinstance(curve, PairingCurve)\n    field = get_base_field(curve_id)\n    line_sparsity = curve.line_function_sparsity\n    line = Polynomial([field(x) for x in line_sparsity])\n    ll = line * line % get_irreducible_poly(curve_id, 12)\n    ll_sparsity = get_sparsity(ll.coefficients)\n    return ll_sparsity[0:12]\n"
  },
  {
    "path": "hydra/garaga/poseidon_transcript.py",
    "content": "from typing import Iterable\n\nfrom garaga import garaga_rs\nfrom garaga.algebra import ModuloCircuitElement, PyFelt\nfrom garaga.curves import BASE, N_LIMBS, STARK\nfrom garaga.hints.io import bigint_split\n\n\ndef hades_permutation(s0: int, s1: int, s2: int) -> tuple[int, int, int]:\n    r0, r1, r2 = garaga_rs.hades_permutation(\n        (s0 % STARK).to_bytes(32, \"big\"),\n        (s1 % STARK).to_bytes(32, \"big\"),\n        (s2 % STARK).to_bytes(32, \"big\"),\n    )\n    return (\n        int.from_bytes(r0, \"big\"),\n        int.from_bytes(r1, \"big\"),\n        int.from_bytes(r2, \"big\"),\n    )\n\n\nclass CairoPoseidonTranscript:\n    \"\"\"\n    The CairoPoseidonTranscript class mimics the behaviour of the Cairo functions hashing\n    an array of u384 elements.\n    \"\"\"\n\n    def __init__(self, init_hash: int, three_limbs_only: bool = False) -> None:\n        self.init_hash = init_hash\n        self.s0, self.s1, self.s2 = hades_permutation(\n            0,\n            0,\n            init_hash,\n        )\n        self.permutations_count = 1\n        self.poseidon_ptr_indexes = []\n        self.z = None\n        self.three_limbs_only = three_limbs_only\n\n    @property\n    def continuable_hash(self) -> int:\n        return self.s0\n\n    @property\n    def RLC_coeff(self):\n        \"\"\"\n        A function to retrieve the random linear combination coefficient after a permutation.\n        Stores the index of the last permutation in the poseidon_ptr_indexes list, to be used to retrieve RLC coefficients later.\n        \"\"\"\n        self.poseidon_ptr_indexes.append(self.permutations_count - 1)\n        return self.s1\n\n    def update_sponge_state(self, x, y):\n        self.s0, self.s1, self.s2 = hades_permutation(self.s0 + x, self.s1 + y, self.s2)\n\n    def hash_element(self, x: PyFelt | ModuloCircuitElement, debug: bool = False):\n        # print(f\"Will Hash PYTHON {hex(x.value)}\")\n        limbs = bigint_split(x, N_LIMBS, BASE)\n        if debug:\n            print(f\"limbs : {limbs}\")\n        self.s0, self.s1, self.s2 = hades_permutation(\n            self.s0 + limbs[0] + (BASE) * limbs[1],\n            self.s1 + limbs[2] + (BASE) * limbs[3],\n            self.s2,\n        )\n        self.permutations_count += 1\n\n        return self.s0, self.s1\n\n    def hash_quadruple_u288(\n        self, x: Iterable[PyFelt | ModuloCircuitElement], debug: bool = False\n    ):\n        assert len(x) == 4\n        x = [bigint_split(xi, 3, BASE) for xi in x]\n        self.s0, self.s1, self.s2 = hades_permutation(\n            self.s0 + x[0][0] + (BASE) * x[0][1],\n            self.s1 + x[0][2] + (BASE) * x[1][0],\n            self.s2,\n        )\n        self.s0, self.s1, self.s2 = hades_permutation(\n            self.s0 + x[1][1] + (BASE) * x[1][2],\n            self.s1 + x[2][0] + (BASE) * x[2][1],\n            self.s2,\n        )\n\n        self.s0, self.s1, self.s2 = hades_permutation(\n            self.s0 + x[2][2] + (BASE) * x[3][0],\n            self.s1 + x[3][1] + (BASE) * x[3][2],\n            self.s2,\n        )\n\n        self.permutations_count += 3\n        return self.s0, self.s1\n\n    def hash_u256(self, x: PyFelt | int):\n        assert isinstance(x, (PyFelt, int))\n        if isinstance(x, PyFelt):\n            x = x.value\n        assert 0 <= x < 2**256\n        low, high = bigint_split(x, 2, 2**128)\n        self.s0, self.s1, self.s2 = hades_permutation(\n            self.s0 + low, self.s1 + high, self.s2\n        )\n        self.permutations_count += 1\n        return self.s0\n\n    def hash_u128(self, x: PyFelt | int):\n        assert isinstance(x, (PyFelt, int))\n        if isinstance(x, PyFelt):\n            x = x.value\n        assert 0 <= x < 2**128\n        self.s0, self.s1, self.s2 = hades_permutation(self.s0 + x, self.s1, self.s2)\n        self.permutations_count += 1\n        return self.s0\n\n    def hash_u256_multi(self, X: list[PyFelt | int]):\n        for x in X:\n            self.hash_u256(x)\n        return self.s0\n\n    def hash_limbs_multi(\n        self,\n        X: list[PyFelt | ModuloCircuitElement],\n        sparsity: list[int] | None = None,\n        debug: bool = False,\n        three_limbs_only: bool = None,\n    ):\n        if three_limbs_only in [True, False]:\n            three_limbs_only = three_limbs_only\n        else:\n            three_limbs_only = self.three_limbs_only\n        if sparsity:\n            X = [x for i, x in enumerate(X) if sparsity[i] != 0]\n        if not three_limbs_only:\n            for X_elem in X:\n                if debug:\n                    print(f\"\\t s0 : {self.s0}\")\n                self.hash_element(X_elem, debug=debug)\n        else:\n            n_quadruples, rest = divmod(len(X), 4)\n            for i in range(n_quadruples):\n                self.hash_quadruple_u288(X[i * 4 : (i + 1) * 4], debug=debug)\n            for i in range(rest):\n                self.hash_element(X[n_quadruples * 4 + i], debug=debug)\n        return None\n\n\nif __name__ == \"__main__\":\n    import random\n\n    random.seed(0)\n\n    def gen_cairo_test_vectors(n_elmts: int):\n        elmts = [PyFelt(random.randint(0, 2**384 - 1), 2**384) for _ in range(n_elmts)]\n        transcript = CairoPoseidonTranscript(init_hash=0)\n        for elmt in elmts:\n            transcript.hash_element(elmt)\n        expected_res = transcript.continuable_hash\n\n        code = f\"\"\"\n    #[test]\n    fn test_hash_u384_{n_elmts}() {{\n    \"\"\"\n        code += \"// Auto-generated from garaga/poseidon_transcript.py\\n\"\n        code += \"let transcript: Array<u384> = array![\"\n        for elmt in elmts:\n            limbs = bigint_split(elmt.value, N_LIMBS, BASE)\n            code += f\"u384 {{ limb0: {limbs[0]}, limb1: {limbs[1]}, limb2: {limbs[2]}, limb3: {limbs[3]} }},\"\n        code += \"];\\n\"\n        code += f\"let expected_res: felt252 = {expected_res};\\n\"\n        code += \"let res = hash_u384_transcript(transcript.span(), 0);\\n\"\n        code += \"assert_eq!(res, expected_res);\\n\"\n        code += \"}\\n\\n\"\n        return code\n\n    print(gen_cairo_test_vectors(1))\n    print(gen_cairo_test_vectors(2))\n    print(gen_cairo_test_vectors(3))\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/all_circuits.py",
    "content": "from enum import Enum\nfrom pathlib import Path\n\nfrom garaga.curves import CurveID\nfrom garaga.precompiled_circuits.compilable_circuits.apply_isogeny import (\n    ApplyIsogenyCircuit,\n)\nfrom garaga.precompiled_circuits.compilable_circuits.base import (\n    cairo1_tests_header,\n    collect_struct_dependencies,\n    compilation_mode_to_file_header,\n    compile_circuit,\n    create_cairo1_test,\n    format_cairo_files_in_parallel,\n)\nfrom garaga.precompiled_circuits.compilable_circuits.cairo1_mpcheck_circuits import (\n    EvalE12D,\n    FixedG2MPCheckBit0,\n    FixedG2MPCheckBit00,\n    FixedG2MPCheckBit1,\n    FixedG2MPCheckBit01,\n    FixedG2MPCheckBit10,\n    FixedG2MPCheckInitBit,\n    InitializeMPCheck,\n    MPCheckFinalizeBLS,\n    MPCheckFinalizeBN,\n    MPCheckPreparePairs,\n)\nfrom garaga.precompiled_circuits.compilable_circuits.cairo1_tower_pairing import (\n    E12TCyclotomicSquareCircuit,\n    E12TCyclotomicSquareCompressedCircuit,\n    E12TDecompressKarabinaPtIICircuit,\n    E12TDecompressKarabinaPtINZCircuit,\n    E12TDecompressKarabinaPtIZCircuit,\n    E12TFrobeniusCircuit,\n    E12TFrobeniusCubeCircuit,\n    E12TFrobeniusSquareCircuit,\n    E12TInverseCircuit,\n    E12TMulCircuit,\n    FP6NegCircuit,\n    TowerMillerBit0,\n    TowerMillerBit1,\n    TowerMillerFinalizeBN,\n    TowerMillerInitBit,\n)\nfrom garaga.precompiled_circuits.compilable_circuits.common_cairo_fustat_circuits import (\n    AddECPointCircuit,\n    AddECPointsG2Circuit,\n    ClearCofactorBLS12_381Circuit,\n    DoubleAndAddECPointsG2Circuit,\n    DoubleECPointCircuit,\n    DoubleECPointG2AEq0Circuit,\n    DummyCircuit,\n    IsOnCurveG1Circuit,\n    IsOnCurveG1G2Circuit,\n    IsOnCurveG2Circuit,\n    PrepareFakeGLVPtsCircuit,\n    PrepareGLVFakeGLVPtsCircuit,\n    PsiG2BLS12_381Circuit,\n    QuadrupleAndAdd9Circuit,\n)\nfrom garaga.precompiled_circuits.compilable_circuits.rsa import (\n    RSAFullVerificationCircuit,\n)\nfrom garaga.starknet.cli.utils import create_directory\n\nSTARKNET_DIR = Path(__file__).parent.parent / \"starknet\"\n\n\nclass CircuitID(Enum):\n    DUMMY = int.from_bytes(b\"dummy\", \"big\")\n    FP12_MUL = int.from_bytes(b\"fp12_mul\", \"big\")\n    FP12_SUB = int.from_bytes(b\"fp12_sub\", \"big\")\n    FINAL_EXP_PART_1 = int.from_bytes(b\"final_exp_part_1\", \"big\")\n    FINAL_EXP_PART_2 = int.from_bytes(b\"final_exp_part_2\", \"big\")\n    MULTI_MILLER_LOOP = int.from_bytes(b\"multi_miller_loop\", \"big\")\n    MULTI_PAIRING_CHECK = int.from_bytes(b\"multi_pairing_check\", \"big\")\n    IS_ON_CURVE_G1_G2 = int.from_bytes(b\"is_on_curve_g1_g2\", \"big\")\n    IS_ON_CURVE_G1 = int.from_bytes(b\"is_on_curve_g1\", \"big\")\n    IS_ON_CURVE_G2 = int.from_bytes(b\"is_on_curve_g2\", \"big\")\n    CLEAR_COFACTOR_BLS12_381 = int.from_bytes(b\"clear_cofactor_bls12_381\", \"big\")\n    ADD_EC_POINT = int.from_bytes(b\"add_ec_point\", \"big\")\n    DOUBLE_EC_POINT = int.from_bytes(b\"double_ec_point\", \"big\")\n    PREPARE_GLV_FAKE_GLV_PTS = int.from_bytes(b\"prepare_glv_fake_glv_pts\", \"big\")\n    PREPARE_FAKE_GLV_PTS = int.from_bytes(b\"prepare_fake_glv_pts\", \"big\")\n    QUADRUPLE_AND_ADD_9 = int.from_bytes(b\"quadruple_and_add_9\", \"big\")\n    MP_CHECK_BIT0_LOOP = int.from_bytes(b\"mp_check_bit0_loop\", \"big\")\n    MP_CHECK_BIT00_LOOP = int.from_bytes(b\"mp_check_bit00_loop\", \"big\")\n    MP_CHECK_BIT1_LOOP = int.from_bytes(b\"mp_check_bit1_loop\", \"big\")\n    MP_CHECK_BIT01_LOOP = int.from_bytes(b\"mp_check_bit01_loop\", \"big\")\n    MP_CHECK_BIT10_LOOP = int.from_bytes(b\"mp_check_bit10_loop\", \"big\")\n    MP_CHECK_PREPARE_PAIRS = int.from_bytes(b\"mp_check_prepare_pairs\", \"big\")\n    MP_CHECK_INITIALIZE = int.from_bytes(b\"mp_check_initialize\", \"big\")\n    MP_CHECK_INIT_BIT = int.from_bytes(b\"mp_check_init_bit\", \"big\")\n    MP_CHECK_FINALIZE_BN = int.from_bytes(b\"mp_check_finalize_bn\", \"big\")\n    MP_CHECK_FINALIZE_BLS = int.from_bytes(b\"mp_check_finalize_bls\", \"big\")\n    FP12_MUL_ASSERT_ONE = int.from_bytes(b\"fp12_mul_assert_one\", \"big\")\n    EVAL_E12D = int.from_bytes(b\"eval_e12d\", \"big\")\n    APPLY_ISOGENY = int.from_bytes(b\"apply_isogeny\", \"big\")\n    HONK_SUMCHECK_CIRCUIT = int.from_bytes(b\"honk_sumcheck_circuit\", \"big\")\n    HONK_PREPARE_SCALARS_CIRCUIT = int.from_bytes(\n        b\"honk_prepare_scalars_circuit\", \"big\"\n    )\n    TOWER_MILLER_BIT0 = int.from_bytes(b\"tower_miller_bit0\", \"big\")\n    TOWER_MILLER_BIT1 = int.from_bytes(b\"tower_miller_bit1\", \"big\")\n    TOWER_MILLER_INIT_BIT = int.from_bytes(b\"tower_miller_init_bit\", \"big\")\n    TOWER_MILLER_FINALIZE_BN = int.from_bytes(b\"tower_miller_finalize_bn\", \"big\")\n    E12T_MUL = int.from_bytes(b\"e12t_mul\", \"big\")\n    E12T_CYCLOTOMIC_SQUARE = int.from_bytes(b\"e12t_cyclotomic_square\", \"big\")\n    E12T_FROBENIUS_SQUARE = int.from_bytes(b\"e12t_frobenius_square\", \"big\")\n    FP6_NEG = int.from_bytes(b\"fp6_neg\", \"big\")\n    E12T_INVERSE = int.from_bytes(b\"e12t_inverse\", \"big\")\n    E12T_FROBENIUS = int.from_bytes(b\"e12t_frobenius\", \"big\")\n    E12T_FROBENIUS_CUBE = int.from_bytes(b\"e12t_frobenius_cube\", \"big\")\n    E12T_CYCLOTOMIC_SQUARE_COMPRESSED = int.from_bytes(\n        b\"e12t_cyclotomic_square_compressed\", \"big\"\n    )\n    E12T_DECOMPRESS_KARABINA_PT_INZ = int.from_bytes(\n        b\"e12t_decompress_karabina_pt_inz\", \"big\"\n    )\n    E12T_DECOMPRESS_KARABINA_PT_IZ = int.from_bytes(\n        b\"e12t_decompress_karabina_pt_iz\", \"big\"\n    )\n    E12T_DECOMPRESS_KARABINA_PT_II = int.from_bytes(\n        b\"e12t_decompress_karabina_pt_ii\", \"big\"\n    )\n    ADD_EC_POINT_G2 = int.from_bytes(b\"add_ec_point_g2\", \"big\")\n    DOUBLE_EC_POINT_G2 = int.from_bytes(b\"double_ec_point_g2\", \"big\")\n    DOUBLE_AND_ADD_EC_POINT_G2 = int.from_bytes(b\"double_and_add_ec_point_g2\", \"big\")\n    PSI_G2_BLS12_381 = int.from_bytes(b\"psi_g2_bls12_381\", \"big\")\n    FULL_ECIP_BATCHED = int.from_bytes(b\"full_ecip__batched\", \"big\")\n    RSA_FULL_VERIFICATION = int.from_bytes(b\"rsa_full_verif\", \"big\")\n\n\nALL_CAIRO_CIRCUITS = {\n    CircuitID.DUMMY: {\"class\": DummyCircuit, \"params\": None, \"filename\": \"dummy\"},\n    CircuitID.IS_ON_CURVE_G1_G2: {\n        \"class\": IsOnCurveG1G2Circuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.IS_ON_CURVE_G1: {\n        \"class\": IsOnCurveG1Circuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.IS_ON_CURVE_G2: {\n        \"class\": IsOnCurveG2Circuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.CLEAR_COFACTOR_BLS12_381: {\n        \"class\": ClearCofactorBLS12_381Circuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.ADD_EC_POINT: {\n        \"class\": AddECPointCircuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.DOUBLE_EC_POINT: {\n        \"class\": DoubleECPointCircuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.PREPARE_GLV_FAKE_GLV_PTS: {\n        \"class\": PrepareGLVFakeGLVPtsCircuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.PREPARE_FAKE_GLV_PTS: {\n        \"class\": PrepareFakeGLVPtsCircuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.QUADRUPLE_AND_ADD_9: {\n        \"class\": QuadrupleAndAdd9Circuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.ADD_EC_POINT_G2: {\n        \"class\": AddECPointsG2Circuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.DOUBLE_EC_POINT_G2: {\n        \"class\": DoubleECPointG2AEq0Circuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.DOUBLE_AND_ADD_EC_POINT_G2: {\n        \"class\": DoubleAndAddECPointsG2Circuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n    },\n    CircuitID.PSI_G2_BLS12_381: {\n        \"class\": PsiG2BLS12_381Circuit,\n        \"params\": None,\n        \"filename\": \"ec\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.RSA_FULL_VERIFICATION: {\n        \"class\": RSAFullVerificationCircuit,\n        \"params\": None,\n        \"filename\": \"rsa\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.MP_CHECK_BIT0_LOOP: {\n        \"class\": FixedG2MPCheckBit0,\n        \"params\": [\n            {\"n_pairs\": 2, \"n_fixed_g2\": 2},  # BLS SIG / KZG Verif\n            {\"n_pairs\": 3, \"n_fixed_g2\": 2},  # Groth16\n        ],\n        \"filename\": \"multi_pairing_check\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.MP_CHECK_BIT00_LOOP: {\n        \"class\": FixedG2MPCheckBit00,\n        \"params\": [\n            {\"n_pairs\": 2, \"n_fixed_g2\": 2},  # BLS SIG / KZG Verif\n            {\"n_pairs\": 3, \"n_fixed_g2\": 2},  # Groth16\n        ],\n        \"filename\": \"multi_pairing_check\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.MP_CHECK_BIT1_LOOP: {\n        \"class\": FixedG2MPCheckBit1,\n        \"params\": [\n            {\"n_pairs\": 2, \"n_fixed_g2\": 2},  # BLS SIG / KZG Verif\n            {\"n_pairs\": 3, \"n_fixed_g2\": 2},  # Groth16\n        ],\n        \"filename\": \"multi_pairing_check\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.MP_CHECK_BIT01_LOOP: {\n        \"class\": FixedG2MPCheckBit01,\n        \"params\": [\n            {\"n_pairs\": 2, \"n_fixed_g2\": 2},  # BLS SIG / KZG Verif\n            {\"n_pairs\": 3, \"n_fixed_g2\": 2},  # Groth16\n        ],\n        \"filename\": \"multi_pairing_check\",\n        \"curve_ids\": [CurveID.BN254],\n    },\n    CircuitID.MP_CHECK_BIT10_LOOP: {\n        \"class\": FixedG2MPCheckBit10,\n        \"params\": [\n            {\"n_pairs\": 2, \"n_fixed_g2\": 2},  # BLS SIG / KZG Verif\n            {\"n_pairs\": 3, \"n_fixed_g2\": 2},  # Groth16\n        ],\n        \"filename\": \"multi_pairing_check\",\n        \"curve_ids\": [CurveID.BN254],\n    },\n    CircuitID.MP_CHECK_PREPARE_PAIRS: {\n        \"class\": MPCheckPreparePairs,\n        \"params\": [{\"n_pairs\": k} for k in [1, 2, 3]],\n        \"filename\": \"multi_pairing_check\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.MP_CHECK_INITIALIZE: {\n        \"class\": InitializeMPCheck,\n        \"params\": [\n            {\"extra_miller_loop_result\": False},\n            {\"extra_miller_loop_result\": True},\n        ],\n        \"filename\": \"multi_pairing_check\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.MP_CHECK_INIT_BIT: {\n        \"class\": FixedG2MPCheckInitBit,\n        \"params\": [\n            {\"n_pairs\": 2, \"n_fixed_g2\": 2},  # BLS SIG / KZG Verif\n            {\"n_pairs\": 3, \"n_fixed_g2\": 2},  # Groth16\n        ],\n        \"filename\": \"multi_pairing_check\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.MP_CHECK_FINALIZE_BN: {\n        \"class\": MPCheckFinalizeBN,\n        \"params\": [\n            {\n                \"n_pairs\": 2,\n                \"n_fixed_g2\": 2,\n                \"extra_miller_loop_result\": False,\n            },  # BLS SIG / KZG Verif\n            {\n                \"n_pairs\": 3,\n                \"n_fixed_g2\": 2,\n                \"extra_miller_loop_result\": True,\n            },  # Groth16\n        ],\n        \"filename\": \"multi_pairing_check\",\n        \"curve_ids\": [CurveID.BN254],\n    },\n    CircuitID.MP_CHECK_FINALIZE_BLS: {\n        \"class\": MPCheckFinalizeBLS,\n        \"params\": [\n            {\"n_pairs\": 2, \"extra_miller_loop_result\": False},\n            {\"n_pairs\": 3, \"extra_miller_loop_result\": True},\n        ],\n        \"filename\": \"multi_pairing_check\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.EVAL_E12D: {\n        \"class\": EvalE12D,\n        \"params\": None,\n        \"filename\": \"extf_mul\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.APPLY_ISOGENY: {\n        \"class\": ApplyIsogenyCircuit,\n        \"params\": None,\n        \"filename\": \"isogeny\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.TOWER_MILLER_BIT0: {\n        \"class\": TowerMillerBit0,\n        \"params\": [{\"n_pairs\": k} for k in [1]],\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.TOWER_MILLER_BIT1: {\n        \"class\": TowerMillerBit1,\n        \"params\": [{\"n_pairs\": k} for k in [1]],\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.TOWER_MILLER_INIT_BIT: {\n        \"class\": TowerMillerInitBit,\n        \"params\": [{\"n_pairs\": k} for k in [1]],\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.TOWER_MILLER_FINALIZE_BN: {\n        \"class\": TowerMillerFinalizeBN,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BN254],\n    },\n    CircuitID.E12T_MUL: {\n        \"class\": E12TMulCircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.E12T_CYCLOTOMIC_SQUARE: {\n        \"class\": E12TCyclotomicSquareCircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.E12T_FROBENIUS_SQUARE: {\n        \"class\": E12TFrobeniusSquareCircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.FP6_NEG: {\n        \"class\": FP6NegCircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.E12T_INVERSE: {\n        \"class\": E12TInverseCircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.E12T_FROBENIUS: {\n        \"class\": E12TFrobeniusCircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.E12T_FROBENIUS_CUBE: {\n        \"class\": E12TFrobeniusCubeCircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BN254, CurveID.BLS12_381],\n    },\n    CircuitID.E12T_CYCLOTOMIC_SQUARE_COMPRESSED: {\n        \"class\": E12TCyclotomicSquareCompressedCircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.E12T_DECOMPRESS_KARABINA_PT_INZ: {\n        \"class\": E12TDecompressKarabinaPtINZCircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.E12T_DECOMPRESS_KARABINA_PT_IZ: {\n        \"class\": E12TDecompressKarabinaPtIZCircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    CircuitID.E12T_DECOMPRESS_KARABINA_PT_II: {\n        \"class\": E12TDecompressKarabinaPtIICircuit,\n        \"params\": None,\n        \"filename\": \"tower_circuits\",\n        \"curve_ids\": [CurveID.BLS12_381],\n    },\n    # CircuitID.HONK_SUMCHECK_CIRCUIT: {\n    #     \"class\": SumCheckCircuit,\n    #     \"params\": [\n    #         {\n    #             \"vk\": HonkVk.from_bytes(\n    #                 open(\n    #                     f\"{STARKNET_DIR}/honk_contract_generator/examples/vk_ultra_keccak.bin\",\n    #                     \"rb\",\n    #                 ).read()\n    #             )\n    #         }\n    #     ],\n    #     \"filename\": \"honk_circuits\",\n    #     \"curve_ids\": [CurveID.GRUMPKIN],\n    # },\n    # CircuitID.HONK_PREPARE_SCALARS_CIRCUIT: {\n    #     \"class\": PrepareScalarsCircuit,\n    #     \"params\": [\n    #         {\n    #             \"vk\": HonkVk.from_bytes(\n    #                 open(\n    #                     f\"{STARKNET_DIR}/honk_contract_generator/examples/vk_ultra_keccak.bin\",\n    #                     \"rb\",\n    #                 ).read()\n    #             )\n    #         }\n    #     ],\n    #     \"filename\": \"honk_circuits\",\n    #     \"curve_ids\": [CurveID.GRUMPKIN],\n    # },\n    # CircuitID.FULL_ECIP_BATCHED: {\n    #     \"class\": FullECIPCircuitBatched,\n    #     \"params\": [{\"n_points\": k} for k in [1]],\n    #     \"filename\": \"ec_batched\",\n    #     \"curve_ids\": [CurveID.BN254],\n    # },\n}\n\n\ndef initialize_compilation(\n    PRECOMPILED_CIRCUITS_DIR: str, CIRCUITS_TO_COMPILE: dict\n) -> tuple[\n    set[str],\n    dict[str, set[str]],\n    dict[str, set[str]],\n    dict[str, set[str]],\n    dict[str, open],\n]:\n    \"\"\"\n    Initialize the compilation process by creating the necessary directories and files.\n    Returns :\n        - filenames_used: set of all filenames that will be used\n        - codes: dict of sets of strings, where each set contains the compiled circuits for a given filename\n        - cairo1_tests_functions: dict of sets of strings, where each set contains the cairo1 tests for a given filename\n        - cairo1_full_function_names: dict of sets of strings, where each set contains the full function names for a given filename\n        - files: dict of open files, where each file is for a given filename\n    \"\"\"\n    create_directory(PRECOMPILED_CIRCUITS_DIR)\n    filenames_used = set([v[\"filename\"] for v in CIRCUITS_TO_COMPILE.values()])\n    codes = {filename: set() for filename in filenames_used}\n    cairo1_tests_functions = {filename: set() for filename in filenames_used}\n    cairo1_full_function_names = {filename: set() for filename in filenames_used}\n    files = {\n        f: open(f\"{PRECOMPILED_CIRCUITS_DIR}{f}.cairo\", \"w\") for f in filenames_used\n    }\n    return (\n        filenames_used,\n        codes,\n        cairo1_tests_functions,\n        cairo1_full_function_names,\n        files,\n    )\n\n\ndef write_headers(\n    files: dict[str, open],\n    compilation_mode: int,\n    output_sizes_exceeding_limit: dict[str, set[int]],\n    file_curve_ids: dict[str, set[CurveID]],\n    file_struct_dependencies: dict[str, set[str]],\n) -> None:\n    \"\"\"\n    Write the header to the files. Add a specific header if max output length exceeds the limit.\n    \"\"\"\n\n    for filename, curve_ids in file_curve_ids.items():\n        required_structs = file_struct_dependencies.get(filename, set())\n        HEADER = compilation_mode_to_file_header(\n            compilation_mode, curve_ids, required_structs\n        )\n        files[filename].write(HEADER)\n\n    TEMPLATE = \"\"\"\nimpl CircuitDefinition{num_outputs}<\n    {elements}\n> of core::circuit::CircuitDefinition<\n    (\n        {ce_elements}\n    )\n> {{\n    type CircuitType =\n        core::circuit::Circuit<\n            ({elements_tuple},)\n        >;\n}}\nimpl MyDrp_{num_outputs}<\n    {elements}\n> of Drop<\n    (\n        {ce_elements}\n    )\n>;\n\"\"\"\n\n    for filename, file in files.items():\n\n        # Then write the template for each unique output size exceeding the limit\n        for num_outputs in sorted(output_sizes_exceeding_limit[filename]):\n            elements = \", \".join(f\"E{i}\" for i in range(num_outputs))\n            ce_elements = \", \".join(f\"CE<E{i}>\" for i in range(num_outputs))\n            elements_tuple = \", \".join(f\"E{i}\" for i in range(num_outputs))\n            file.write(\n                TEMPLATE.format(\n                    num_outputs=num_outputs,\n                    elements=elements,\n                    ce_elements=ce_elements,\n                    elements_tuple=elements_tuple,\n                )\n            )\n\n\ndef compile_circuits(\n    CIRCUITS_TO_COMPILE: dict,\n    compilation_mode: int,\n    codes: dict[str, set[str]],\n    cairo1_full_function_names: dict[str, set[str]],\n    cairo1_tests_functions: dict[str, set[str]],\n    output_sizes_exceeding_limit: dict[str, set[int]],\n    file_struct_dependencies: dict[str, set[str]],\n    limit: int,\n) -> None:\n    \"\"\"\n    Compile the circuits and write them to the files.\n    \"\"\"\n    for circuit_id, circuit_info in CIRCUITS_TO_COMPILE.items():\n        for curve_id in circuit_info.get(\n            \"curve_ids\", [CurveID.BN254, CurveID.BLS12_381]\n        ):\n            filename_key = circuit_info[\"filename\"]\n            compiled_circuits, full_function_names, circuit_instances = compile_circuit(\n                curve_id,\n                circuit_info[\"class\"],\n                circuit_info[\"params\"],\n                compilation_mode,\n            )\n            codes[filename_key].update(compiled_circuits)\n\n            # Collect struct dependencies for this file if compilation_mode == 1\n            if compilation_mode == 1:\n                struct_deps = collect_struct_dependencies(circuit_instances)\n                if filename_key not in file_struct_dependencies:\n                    file_struct_dependencies[filename_key] = set()\n                file_struct_dependencies[filename_key].update(struct_deps)\n\n            for circuit_instance in circuit_instances:\n                output_length = len(circuit_instance.circuit.output)\n                if (\n                    output_length > limit\n                    and circuit_instance.circuit.exact_output_refs_needed is None\n                ):\n                    output_sizes_exceeding_limit[filename_key].add(output_length)\n\n            if compilation_mode == 1:\n                cairo1_full_function_names[filename_key].update(full_function_names)\n                generate_cairo1_tests(\n                    circuit_instances,\n                    full_function_names,\n                    curve_id,\n                    cairo1_tests_functions,\n                    filename_key,\n                )\n\n\ndef generate_cairo1_tests(\n    circuit_instances,\n    full_function_names,\n    curve_id,\n    cairo1_tests_functions,\n    filename_key,\n):\n    for circuit_instance, full_function_name in zip(\n        circuit_instances, full_function_names\n    ):\n        circuit_input = circuit_instance.full_input_cairo1\n        circuit_output = (\n            circuit_instance.circuit.output_structs\n            if sum([len(x.elmts) for x in circuit_instance.circuit.output_structs])\n            == len(circuit_instance.circuit.output)\n            else circuit_instance.circuit.output\n        )\n        cairo1_tests_functions[filename_key].add(\n            create_cairo1_test(\n                full_function_name,\n                circuit_input,\n                circuit_output,\n                curve_id.value,\n            )\n        )\n\n\ndef write_compiled_circuits(\n    files: dict[str, open],\n    codes: dict[str, set[str]],\n    cairo1_full_function_names: dict[str, set[str]],\n    cairo1_tests_functions: dict[str, set[str]],\n    compilation_mode: int,\n) -> None:\n    \"\"\"\n    Write the compiled circuits and the cairo1 tests to the files.\n    \"\"\"\n    print(\"Writing circuits and selectors to .cairo files...\")\n    for filename, file in files.items():\n        for compiled_circuit in sorted(codes[filename]):\n            file.write(compiled_circuit + \"\\n\")\n\n        # if compilation_mode == 1:\n        #     write_cairo1_tests(\n        #         file, filename, cairo1_full_function_names, cairo1_tests_functions\n        #     )\n\n\ndef write_cairo1_tests(\n    file: open,\n    filename: str,\n    cairo1_full_function_names: dict[str, set[str]],\n    cairo1_tests_functions: dict[str, set[str]],\n) -> None:\n    file.write(cairo1_tests_header() + \"\\n\")\n    fns_to_import = sorted(cairo1_full_function_names[filename])\n    if \"\" in fns_to_import:\n        fns_to_import.remove(\"\")\n    file.write(f\"use super::{{{','.join(fns_to_import)}}};\\n\")\n    for cairo1_test in sorted(cairo1_tests_functions[filename]):\n        file.write(cairo1_test + \"\\n\")\n    file.write(\"}\\n\")\n\n\ndef main(\n    PRECOMPILED_CIRCUITS_DIR: str,\n    CIRCUITS_TO_COMPILE: dict[CircuitID, dict],\n    compilation_mode: int = 1,\n):\n    \"\"\"Compiles and writes all circuits to .cairo files\"\"\"\n    filenames_used, codes, cairo1_tests_functions, cairo1_full_function_names, files = (\n        initialize_compilation(PRECOMPILED_CIRCUITS_DIR, CIRCUITS_TO_COMPILE)\n    )\n    file_curve_ids = {filename: set() for filename in filenames_used}\n    file_struct_dependencies = {filename: set() for filename in filenames_used}\n\n    # Populate file_curve_ids with curve IDs\n    for circuit_info in CIRCUITS_TO_COMPILE.values():\n        filename = circuit_info[\"filename\"]\n        curve_ids = circuit_info.get(\"curve_ids\", [CurveID.BN254, CurveID.BLS12_381])\n        file_curve_ids[filename].update(curve_ids)\n\n    output_sizes_exceeding_limit = {filename: set() for filename in filenames_used}\n    limit = 16\n    compile_circuits(\n        CIRCUITS_TO_COMPILE,\n        compilation_mode,\n        codes,\n        cairo1_full_function_names,\n        cairo1_tests_functions,\n        output_sizes_exceeding_limit,\n        file_struct_dependencies,\n        limit,\n    )\n    write_headers(\n        files,\n        compilation_mode,\n        output_sizes_exceeding_limit,\n        file_curve_ids,\n        file_struct_dependencies,\n    )\n    write_compiled_circuits(\n        files,\n        codes,\n        cairo1_full_function_names,\n        cairo1_tests_functions,\n        compilation_mode,\n    )\n\n    for file in files.values():\n        file.close()\n\n    format_cairo_files_in_parallel(\n        filenames_used, compilation_mode, PRECOMPILED_CIRCUITS_DIR\n    )\n    return None\n\n\nif __name__ == \"__main__\":\n    import random\n\n    random.seed(0)\n    print(\"Compiling Cairo 1 circuits...\")\n    main(\n        PRECOMPILED_CIRCUITS_DIR=\"src/src/circuits/\",\n        CIRCUITS_TO_COMPILE=ALL_CAIRO_CIRCUITS,\n        compilation_mode=1,\n    )\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/cofactor_clearing.py",
    "content": "from garaga.algebra import ModuloCircuitElement\nfrom garaga.curves import CurveID\nfrom garaga.precompiled_circuits.ec import BasicEC, BasicECG2\n\n\nclass SlowG2CofactorClearing(BasicECG2):\n    \"\"\"\n    Implements cofactor clearing for G2 points on BLS12-381 curve.\n    Based on Teku's implementation of BLS signatures.\n    \"\"\"\n\n    def h2_chain(\n        self, P: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]\n    ):\n        \"\"\"\n        Addition chain for multiplication by the E2 cofactor.\n\n        Reference implementation:\n        https://github.com/Consensys/teku/blob/55d04f87b422112312f79c1b4d662b3d58e3ca74/bls/src/main/java/tech/pegasys/teku/bls/impl/mikuli/hash2g2/Chains.java#L569\n        \"\"\"\n        assert (\n            self.curve_id == CurveID.BLS12_381.value\n        ), \"This circuit is only supported for BLS12-381\"\n\n        # Initial point is t0 = P\n        t0 = P\n\n        t1 = self.double_point_a_eq_0(t0)\n        t4 = self.add_points(t1, t0)\n        t2 = self.add_points(t4, t1)\n        t3 = self.add_points(t2, t1)\n        t11 = self.add_points(t3, t1)\n        t9 = self.add_points(t11, t1)\n        t10 = self.add_points(t9, t1)\n        t5 = self.add_points(t10, t1)\n        t7 = self.add_points(t5, t1)\n        t15 = self.add_points(t7, t1)\n        t13 = self.add_points(t15, t1)\n        t6 = self.add_points(t13, t1)\n        t14 = self.add_points(t6, t1)\n        t12 = self.add_points(t14, t1)\n        t8 = self.add_points(t12, t1)\n\n        # Start the main computation chain\n        t1 = self.double_point_a_eq_0(t6)  # t6.dbl()\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t13)  # .add(t13)\n        t1 = self.double_n_times(t1, 2)  # .dbls(2)\n        t1 = self.add_points(t1, t0)  # .add(t0)\n        t1 = self.double_n_times(t1, 9)  # .dbls(9)\n        t1 = self.add_points(t1, t8)  # .add(t8)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t11)  # .add(t11)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t13)  # .add(t13)\n        t1 = self.double_n_times(t1, 8)  # .dbls(8)\n        t1 = self.add_points(t1, t2)  # .add(t2)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t5)  # .add(t5)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t0)  # .add(t0)\n        t1 = self.double_n_times(t1, 8)  # .dbls(8)\n        t1 = self.add_points(t1, t11)  # .add(t11)\n        t1 = self.double_n_times(t1, 8)  # .dbls(8)\n        t1 = self.add_points(t1, t8)  # .add(t8)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t2)  # .add(t2)\n        t1 = self.double_n_times(t1, 9)  # .dbls(9)\n        t1 = self.add_points(t1, t5)  # .add(t5)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t11)  # .add(t11)\n        t1 = self.double_n_times(t1, 2)  # .dbls(2)\n        t1 = self.add_points(t1, t0)  # .add(t0)\n        t1 = self.double_n_times(t1, 9)  # .dbls(9)\n        t1 = self.add_points(t1, t8)  # .add(t8)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t13)  # .add(t13)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t0)  # .add(t0)\n        t1 = self.double_n_times(t1, 11)  # .dbls(11)\n        t1 = self.add_points(t1, t9)  # .add(t9)\n        t1 = self.double_n_times(t1, 7)  # .dbls(7)\n        t1 = self.add_points(t1, t12)  # .add(t12)\n        t1 = self.double_n_times(t1, 7)  # .dbls(7)\n        t1 = self.add_points(t1, t7)  # .add(t7)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t12)  # .add(t12)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t14)  # .add(t14)\n        t1 = self.double_n_times(t1, 8)  # .dbls(8)\n        t1 = self.add_points(t1, t13)  # .add(t13)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t0)  # .add(t0)\n        t1 = self.double_n_times(t1, 8)  # .dbls(8)\n        t1 = self.add_points(t1, t9)  # .add(t9)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t13)  # .add(t13)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t10)  # .add(t10)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t2)  # .add(t2)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t10)  # .add(t10)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t2)  # .add(t2)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t0)  # .add(t0)\n        t1 = self.double_n_times(t1, 10)  # .dbls(10)\n        t1 = self.add_points(t1, t9)  # .add(t9)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t14)  # .add(t14)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t9)  # .add(t9)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t15)  # .add(t15)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t8)  # .add(t8)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t12)  # .add(t12)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t5)  # .add(t5)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t15)  # .add(t15)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t2)  # .add(t2)\n        t1 = self.double_n_times(t1, 7)  # .dbls(7)\n        t1 = self.add_points(t1, t5)  # .add(t5)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t9)  # .add(t9)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t15)  # .add(t15)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t14)  # .add(t14)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t8)  # .add(t8)\n        t1 = self.double_n_times(t1, 10)  # .dbls(10)\n        t1 = self.add_points(t1, t6)  # .add(t6)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t5)  # .add(t5)\n        t1 = self.double_n_times(t1, 3)  # .dbls(3)\n        t1 = self.add_points(t1, t0)  # .add(t0)\n        t1 = self.double_n_times(t1, 9)  # .dbls(9)\n        t1 = self.add_points(t1, t13)  # .add(t13)\n        t1 = self.double_n_times(t1, 7)  # .dbls(7)\n        t1 = self.add_points(t1, t12)  # .add(t12)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t5)  # .add(t5)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t2)  # .add(t2)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t11)  # .add(t11)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t10)  # .add(t10)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t4)  # .add(t4)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t10)  # .add(t10)\n        t1 = self.double_n_times(t1, 7)  # .dbls(7)\n        t1 = self.add_points(t1, t7)  # .add(t7)\n        t1 = self.double_n_times(t1, 3)  # .dbls(3)\n        t1 = self.add_points(t1, t2)  # .add(t2)\n        t1 = self.double_n_times(t1, 4)  # .dbls(4)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 8)  # .dbls(8)\n        t1 = self.add_points(t1, t9)  # .add(t9)\n        t1 = self.double_n_times(t1, 8)  # .dbls(8)\n        t1 = self.add_points(t1, t9)  # .add(t9)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t8)  # .add(t8)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t7)  # .add(t7)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t6)  # .add(t6)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t5)  # .add(t5)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t4)  # .add(t4)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t5)  # .add(t5)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t4)  # .add(t4)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t4)  # .add(t4)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t5)  # .add(t5)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 7)  # .dbls(7)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t4)  # .add(t4)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 3)  # .dbls(3)\n        t1 = self.add_points(t1, t0)  # .add(t0)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 6)  # .dbls(6)\n        t1 = self.add_points(t1, t3)  # .add(t3)\n        t1 = self.double_n_times(t1, 5)  # .dbls(5)\n        t1 = self.add_points(t1, t2)  # .add(t2)\n\n        return t1\n\n    def mx_chain(self, P):\n        \"\"\"\n        Addition chain for multiplication by 0xd201000000010000 == -x,\n        where x is the BLS parameter.\n        \"\"\"\n        q = self.double_point_a_eq_0(P)\n\n        # Sequence of doubles and adds as per Java implementation\n        ndoubles = [2, 3, 9, 32, 16]\n        for n in ndoubles:\n            q = self.add_points(q, P)\n            for _ in range(n):\n                q = self.double_point_a_eq_0(q)\n\n        return q\n\n    def clear_cofactor(self, P):\n        \"\"\"\n        Complete cofactor clearing implementation following Teku's approach.\n\n        This implements an optimized cofactor clearing method for BLS12-381 G2 that avoids\n        patent-encumbered endomorphism techniques. Instead of directly multiplying by the G2\n        cofactor, it uses an efficient addition chain to compute an equivalent operation.\n\n        The method follows the approach specified in draft-irtf-cfrg-hash-to-curve-05 section 8.9.2,\n        which breaks down the operation into:\n        1. Apply h2 chain\n        2. Multiply by 3\n        3. Apply mx chain twice (z^2)\n        4. Subtract 3 * h2 result\n\n        This gives the same result as multiplying by the effective cofactor, but is more\n        computationally efficient due to the optimized addition chain implementation.\n\n        Args:\n            P: The point to clear the cofactor from\n\n        Returns:\n            A point in the correct subgroup after cofactor clearing\n        \"\"\"\n        assert (\n            self.curve_id == CurveID.BLS12_381.value\n        ), \"This circuit is only supported for BLS12-381\"\n\n        # Step 1: Apply h2 chain\n        work = self.h2_chain(P)\n\n        # Step 2: Multiply by 3 (add + double)\n        work3 = self.add_points(work, self.double_point_a_eq_0(work))\n\n        # Step 3: Apply mx chain twice (z^2)\n        work = self.mx_chain(work3)  # First z\n        work = self.mx_chain(work)  # Second z\n\n        # Step 4: Subtract 3 * h2\n        neg_work3 = self.negate_point(work3)\n        final = self.add_points(work, neg_work3)\n\n        return final\n\n\nclass FastG2CofactorClearing(BasicECG2):\n    \"\"\"\n    Implements an efficient cofactor clearing method for G2 points on BLS12-381 curve\n    using endomorphisms. This implementation avoids expensive scalar multiplications\n    by utilizing the Frobenius endomorphism (ψ) and efficient addition chains.\n\n    The cofactor clearing ensures that points are in the correct order-r subgroup of G2,\n    which is essential for cryptographic operations like BLS signatures.\n\n    Key operations:\n    - ψ (psi): Frobenius endomorphism\n    - ψ² (psi²): Double application of Frobenius\n    - mul_by_x: Multiplication by BLS parameter x\n    \"\"\"\n\n    def psi(\n        self, P: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]\n    ) -> tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]:\n        \"\"\"\n        Implements the ψ (Frobenius endomorphism) map for BLS12-381 G₂ points.\n\n        The Frobenius endomorphism ψ is defined as:\n        ψ(P) = π(P) · [1/(u+1)^((p-1)/3), 1/(u+1)^((p-1)/2)]\n        where π is the p-power Frobenius map that conjugates coordinates in Fp2.\n\n        Args:\n            P: A G2 point represented as ((x0, x1), (y0, y1)) where each coordinate\n               is in Fp and (x0, x1) and (y0, y1) represent elements in Fp2\n\n        Returns:\n            A new G2 point after applying the Frobenius endomorphism\n        \"\"\"\n        assert (\n            self.curve_id == CurveID.BLS12_381.value\n        ), \"This circuit is only supported for BLS12-381\"\n\n        x, y = P  # x and y are lists [x0, x1] representing elements in Fp²\n\n        # Apply the Frobenius map (conjugation in Fp2)\n        x_frob = self.fp2_frobenius_map(x)\n        y_frob = self.fp2_frobenius_map(y)\n\n        # Constants for scaling after Frobenius map\n        # PSI_X = 1/(u+1)^((p-1)/3)\n        psi_coeff_x = [\n            self.set_or_get_constant(self.field(0)),\n            self.set_or_get_constant(\n                self.field(\n                    0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD\n                )\n            ),\n        ]\n\n        # PSI_Y = 1/(u+1)^((p-1)/2)\n        psi_coeff_y = [\n            self.set_or_get_constant(\n                self.field(\n                    0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2\n                )\n            ),\n            self.set_or_get_constant(\n                self.field(\n                    0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09\n                )\n            ),\n        ]\n\n        # Scale the coordinates with the appropriate constants\n        psi_x = self.fp2_mul(x_frob, psi_coeff_x)\n        psi_y = self.fp2_mul(y_frob, psi_coeff_y)\n\n        return (psi_x, psi_y)\n\n    def mul_by_x(\n        self, P: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]\n    ) -> tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]:\n        \"\"\"\n        Multiplies a point by x = -0xd201000000010001 (BLS parameter) using double-and-add.\n\n        The binary representation of x is:\n        1101 0010 0000 0001 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000\n\n        Args:\n            P: A G2 point to be multiplied by x\n\n        Returns:\n            [-x]P: The point multiplied by the negation of x\n        \"\"\"\n        assert (\n            self.curve_id == CurveID.BLS12_381.value\n        ), \"This circuit is only supported for BLS12-381\"\n\n        result = P  # 1: Start with P. As a result we skip the first bit.\n        result = self.double_point_a_eq_0(result)  # 1: Double and add\n        result = self.add_points(result, P)  # 2: Double and add\n        result = self.double_point_a_eq_0(result)  # 0: Double\n        result = self.double_point_a_eq_0(result)  # 1: Double and add\n        result = self.add_points(result, P)\n        result = self.double_n_times(result, 2)  # 2x 0: Double\n        result = self.double_point_a_eq_0(result)  # 1: Double and add\n        result = self.add_points(result, P)\n        result = self.double_n_times(result, 8)  # 8x 0: Double\n        result = self.double_point_a_eq_0(result)  # 1: Double and add\n        result = self.add_points(result, P)\n        result = self.double_n_times(result, 31)  # 31x 0: Double\n        result = self.double_point_a_eq_0(result)  # 1: Double and add\n        result = self.add_points(result, P)\n        result = self.double_n_times(result, 16)  # 16x 0: Double\n\n        return self.negate_point(result)\n\n    def double_psi(\n        self, P: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]\n    ) -> tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]:\n        \"\"\"\n        Implements ψ² (double Frobenius endomorphism) by applying psi twice.\n\n        For BLS12-381, ψ² is a much cheaper operation than scalar multiplication\n        and is used to optimize the cofactor clearing operation.\n\n        Args:\n            P: A G2 point\n\n        Returns:\n            ψ²(P): The point after applying the Frobenius endomorphism twice\n        \"\"\"\n        return self.psi(self.psi(P))\n\n    def clear_cofactor(\n        self, P: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]\n    ) -> tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]:\n        \"\"\"\n        Clears the cofactor of a G2 point using an optimized endomorphism-based method.\n\n        This implementation follows the efficient approach described in:\n        https://eprint.iacr.org/2017/419.pdf\n\n        The formula implemented is:\n        [h(ψ)]P = [x²-x-1]P + [x-1]ψ(P) + ψ²(2P)\n        where x is the BLS parameter = -0xd201000000010000\n\n        This method is more efficient than the traditional scalar multiplication\n        by the cofactor h, as it uses the efficiently computable endomorphism ψ\n        and optimized multiplication by x.\n\n        Args:\n            P: A G2 point to clear the cofactor from\n\n        Returns:\n            A point in the correct order-r subgroup of G2\n        \"\"\"\n        # Calculate [-x]P\n        t1 = self.mul_by_x(P)\n\n        # Calculate ψ(P)\n        t2 = self.psi(P)\n\n        # Calculate 2P and ψ²(2P)\n        t3 = self.double_point_a_eq_0(P)  # 2P\n        t3 = self.double_psi(t3)  # ψ²(2P)\n\n        # Following steps compute: [x²-x-1]P + [x-1]ψ(P) + ψ²(2P)\n        t3 = self.add_points(t3, self.negate_point(t2))  # ψ²(2P) - ψ(P)\n        t2 = self.add_points(t1, t2)  # [-x]P + ψ(P)\n        t2 = self.mul_by_x(t2)  # [x²]P - [x]ψ(P)\n        t3 = self.add_points(t3, t2)  # ψ²(2P) - ψ(P) + [x²]P - [x]ψ(P)\n        t3 = self.add_points(t3, self.negate_point(t1))  # Add [x]P\n        final = self.add_points(t3, self.negate_point(P))  # Subtract P\n\n        return final\n\n\nclass G1CofactorClearing(BasicEC):\n\n    def mul_by_x(\n        self, P: tuple[ModuloCircuitElement, ModuloCircuitElement]\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"\n        Multiplies a point by x = 0xd201000000010000 (BLS parameter) using double-and-add.\n\n        The binary representation of x is:\n        1101 0010 0000 0001 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000\n\n        Args:\n            P: A G1 point to be multiplied by x\n\n        Returns:\n            [x]P: The point multiplied by x\n        \"\"\"\n\n        # Todo : Incude automatic addition chain for any number computed at runtime ?\n        assert (\n            self.curve_id == CurveID.BLS12_381.value\n        ), \"This circuit is only supported for BLS12-381\"\n\n        result = P  # 1: Start with P. As a result we skip the first bit.\n        result = self.double_point_a_eq_0(result)  # 1: Double and add\n        result = self.add_points(result, P)  # 2: Double and add\n        result = self.double_point_a_eq_0(result)  # 0: Double\n        result = self.double_point_a_eq_0(result)  # 1: Double and add\n        result = self.add_points(result, P)\n        result = self.double_n_times(result, 2)  # 2x 0: Double\n        result = self.double_point_a_eq_0(result)  # 1: Double and add\n        result = self.add_points(result, P)\n        result = self.double_n_times(result, 8)  # 8x 0: Double\n        result = self.double_point_a_eq_0(result)  # 1: Double and add\n        result = self.add_points(result, P)\n        result = self.double_n_times(result, 31)  # 31x 0: Double\n        result = self.double_point_a_eq_0(result)  # 1: Double and add\n        result = self.add_points(result, P)\n        return self.double_n_times(result, 16)  # 16x 0: Double\n\n    def clear_cofactor(\n        self, P: tuple[ModuloCircuitElement, ModuloCircuitElement]\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"\n        Clears the cofactor of a G1 point using an efficient scalar multiplication method.\n\n        Implementation follows the approach from:\n        https://eprint.iacr.org/2019/403\n\n        The formula is: h_eff(P) = P - [-x]P = P + [x]P\n        where x is the BLS parameter = -0xd201000000010000\n\n        This method is more efficient than multiplying by the full cofactor h,\n        as it uses an optimized addition chain for multiplication by x.\n\n        Args:\n            P: A G1 point to clear the cofactor from\n\n        Returns:\n            A point in the correct order-r subgroup of G1\n        \"\"\"\n        assert (\n            self.curve_id == CurveID.BLS12_381.value\n        ), \"This circuit is only supported for BLS12-381\"\n\n        # Calculate [x]P using the existing mul_by_x method\n        # As shown below, we can save negation\n        xP = self.mul_by_x(P)\n\n        # Return P - [-x]P = P + [x]P\n        return self.add_points(P, xP)\n\n\nif __name__ == \"__main__\":\n    circuit = G1CofactorClearing(name=\"cofactor_clearing\", curve_id=1)\n    val_x = circuit.write_element(\n        circuit.field(\n            3789617024712504402204306620295003375951143917889162928515122476381982967144814366712031831841518399614182231387665\n        )\n    )\n\n    val_y = circuit.write_element(\n        circuit.field(\n            1292375129422168617658520396283100687686347104559592203462491249161639006037671760603453326853098986903549775136448\n        )\n    )\n\n    print(circuit.clear_cofactor((val_x, val_y)))\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/compilable_circuits/apply_isogeny.py",
    "content": "import garaga.modulo_circuit_structs as structs\nfrom garaga.curves import CurveID\nfrom garaga.precompiled_circuits.compilable_circuits.base import (\n    BaseModuloCircuit,\n    ModuloCircuit,\n    PyFelt,\n)\nfrom garaga.precompiled_circuits.isogeny import IsogenyG1\n\n\nclass ApplyIsogenyCircuit(BaseModuloCircuit):\n    def __init__(\n        self, curve_id: int, auto_run: bool = True, compilation_mode: int = 1\n    ) -> None:\n        super().__init__(\n            name=f\"apply_isogeny_{CurveID(curve_id).name.lower()}\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        return [self.field(44), self.field(4)]\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n\n        circuit = IsogenyG1(self.name, self.curve_id, self.compilation_mode)\n\n        px, py = circuit.write_struct(structs.G1PointCircuit(name=\"pt\", elmts=input))\n\n        x_affine, y_affine = circuit.run_isogeny(px, py)\n\n        circuit.extend_struct_output(\n            structs.G1PointCircuit(name=\"res\", elmts=[x_affine, y_affine])\n        )\n\n        return circuit\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/compilable_circuits/base.py",
    "content": "import re\nimport subprocess\nfrom abc import ABC, abstractmethod\nfrom concurrent.futures import ProcessPoolExecutor\nfrom typing import Type\n\nfrom garaga.curves import CurveID, get_base_field\nfrom garaga.hints.io import int_array_to_u384_array\nfrom garaga.modulo_circuit import ModuloCircuit, ModuloCircuitElement, PyFelt\nfrom garaga.modulo_circuit_structs import Cairo1SerializableStruct\n\n\ndef get_circuit_definition_impl_template(num_outputs: int):\n    TEMPLATE = \"\"\"\\n\n    impl CircuitDefinition{num_outputs}<\n        {elements}\n    > of core::circuit::CircuitDefinition<\n        (\n            {ce_elements}\n        )\n    > {{\n        type CircuitType =\n            core::circuit::Circuit<\n                ({elements_tuple},)\n            >;\n    }}\n    impl MyDrp_{num_outputs}<\n        {elements}\n    > of Drop<\n        (\n            {ce_elements}\n        )\n    >;\n    \"\"\"\n    elements = \", \".join(f\"E{i}\" for i in range(num_outputs))\n    ce_elements = \", \".join(f\"CE<E{i}>\" for i in range(num_outputs))\n    elements_tuple = \", \".join(f\"E{i}\" for i in range(num_outputs))\n    return TEMPLATE.format(\n        num_outputs=num_outputs,\n        elements=elements,\n        ce_elements=ce_elements,\n        elements_tuple=elements_tuple,\n    )\n\n\nclass BaseModuloCircuit(ABC):\n    \"\"\"\n    Base class for all modulo circuits that will be compiled to Cairo code.\n    Parameters:\n    - name: str, the name of the circuit\n    - curve_id: int, the id of the curve\n    - auto_run: bool, whether to run the circuit automatically at initialization.\n                When compiling, this flag is set to true so the ModuloCircuit class inside the\n                 \".circuit\" member of this class holds the necessary metadata\n                about the operations that will be compiled.\n                For CairoZero, this flag will be set to False in the Python hint, so that\n                BaseModuloCircuit.run_circuit() can be called on a segment parsed from the\n                CairoZero VM.\n    - compilation mode: 0 (CairoZero) or 1 (Cairo)\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 0,\n    ) -> None:\n        self.name = name\n        self.curve_id = curve_id\n        self.field = get_base_field(curve_id)\n        self.init_hash = None\n        self.generic_over_curve = False\n        self.compilation_mode = compilation_mode\n        if auto_run:\n            self.input = self.build_input()\n            self.circuit: ModuloCircuit = self._run_circuit_inner(self.input.copy())\n\n    @abstractmethod\n    def build_input(self) -> list[PyFelt]:\n        \"\"\"\n        This method is used to create the necessary inputs that will be written to the ModuloCircuit.\n        It works in pair with the _run_circuit_inner function, where the _run_circuit_inner will use the output of\n        the build_input function to \"deserialize\" the list of elements and write them to the ModuloCircuit class.\n        \"\"\"\n\n    @property\n    def full_input_cairo1(self) -> list[PyFelt] | list[Cairo1SerializableStruct]:\n        if self.circuit is None:\n            raise ValueError(\"Circuit not run yet\")\n        if self.circuit.input_structs:\n            return self.circuit.input_structs\n        else:\n            res = self.input + self.circuit.witnesses\n        return res\n\n    @abstractmethod\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        \"\"\"\n        This method is responsible for\n        - deserializing the input list of elements,\n        - creating a ModuloCircuit class (or class that derives from ModuloCircuit)\n        - \"writing\" the inputs to the ModuloCircuit class to obtain ModuloCircuitElements\n        - using the methods add, sub, mul, inv (or higher level methods) of the ModuloCircuit class\n            to define the list of operations on the given inputs\n        - Returning the ModuloCircuit class in a state where the circuit has been run, and therefore holding\n            the metadata so that its instructions can be compiled to Cairo code.\n\n        \"\"\"\n\n    def run_circuit(self, input: list[int]) -> ModuloCircuit:\n        \"\"\"\n        A simple wrapper around _run_circuit_inner that converts the input as a list of ints to a list of PyFelt.\n        Used in CairoZero hint.\n        \"\"\"\n        # print(\n        #     f\"Running circuit for {self.name} with CurveID {CurveID(self.curve_id).name}...\"\n        # )\n        circuit_input = [self.field(x) for x in input]\n        return self._run_circuit_inner(circuit_input)\n\n\nclass BaseEXTFCircuit(BaseModuloCircuit):\n    \"\"\"\n    A extension of the BaseModuloCircuit class that holds an init_hash, used for CairoZero.\n    Not relevant for Cairo1 circuits.\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(name, curve_id, auto_run, compilation_mode)\n        self.init_hash = init_hash\n\n\ndef compilation_mode_to_file_header(\n    mode: int, curve_ids: set[CurveID], required_structs: set[str] = None\n) -> str:\n    if mode == 0:\n        return \"\"\"\nfrom starkware.cairo.common.registers import get_fp_and_pc, get_label_location\nfrom modulo_circuit import ExtensionFieldModuloCircuit, ModuloCircuit, get_void_modulo_circuit, get_void_extension_field_modulo_circuit\nfrom definitions import bn, bls\n\"\"\"\n    elif mode == 1:\n\n        # Default structs (always included for backward compatibility if no required_structs specified)\n        default_structs = [\n            \"G1Point\",\n            \"G2Point\",\n            \"E12D\",\n            \"u288\",\n            \"G1G2Pair\",\n            \"BNProcessedPair\",\n            \"BLSProcessedPair\",\n            \"MillerLoopResultScalingFactor\",\n            \"G2Line\",\n            \"E12T\",\n        ]\n\n        # Use required_structs if provided, otherwise use default structs\n        # If required_structs is an empty set, that means no structs are needed\n        if required_structs is not None:\n            structs_to_import = list(sorted(required_structs))\n        else:\n            structs_to_import = default_structs.copy()\n\n        # remove u384 from structs_to_import list if it exists\n        if \"u384\" in structs_to_import:\n            structs_to_import.remove(\"u384\")\n\n        # Combine all definitions\n        all_definitions = structs_to_import\n        definitions_import = \"\"\n        if all_definitions:\n            definitions_import = (\n                f\"use garaga::definitions::{{{', '.join(all_definitions)}}};\"\n            )\n\n        return f\"\"\"\nuse core::circuit::{{\n    u384, circuit_add, circuit_sub,\n    circuit_mul, circuit_inverse, EvalCircuitTrait, CircuitOutputsTrait,\n    CircuitInputs,\n    }};\nuse garaga::core::circuit::{{AddInputResultTrait2, u288IntoCircuitInputValue}};\nuse core::circuit::CircuitElement as CE;\nuse core::circuit::CircuitInput as CI;\n{definitions_import}\n\"\"\"\n\n\ndef cairo1_tests_header() -> str:\n    return \"\"\"\n#[cfg(test)]\nmod tests {\n    use core::traits::TryInto;\n\n    use core::circuit::{\n        RangeCheck96, AddMod, MulMod, CircuitElement, CircuitInput, circuit_add, circuit_sub,\n        circuit_mul, circuit_inverse, EvalCircuitResult, EvalCircuitTrait, u384,\n        CircuitOutputsTrait, CircuitModulus, AddInputResultTrait, CircuitInputs\n    };\n    use garaga::definitions::{G1Point, G2Point, E12D, G1G2Pair, BNProcessedPair, BLSProcessedPair, MillerLoopResultScalingFactor, G2Line};\n\n\"\"\"\n\n\ndef parse_struct_name(struct_name: str) -> list[str]:\n    \"\"\"\n    Parse struct names and extract the types that need to be imported.\n\n    Rules:\n    - Span<T> or Array<T> -> only add T\n    - Struct<T> -> add Struct and T separately\n    - Other structs -> add as is\n\n    Returns:\n        list[str]: List of struct names to import\n    \"\"\"\n    import re\n\n    # Handle Span<T> and Array<T> - only add T\n    span_array_match = re.match(r\"^(Span|Array)<(.+)>$\", struct_name)\n    if span_array_match:\n        inner_type = span_array_match.group(2)\n        return [inner_type]\n\n    # Handle other generic types like Struct<T> - add both Struct and T\n    generic_match = re.match(r\"^([^<]+)<(.+)>$\", struct_name)\n    if generic_match:\n        base_struct = generic_match.group(1)\n        inner_type = generic_match.group(2)\n        return [base_struct, inner_type]\n\n    # Non-generic struct - add as is\n    return [struct_name]\n\n\ndef collect_struct_dependencies(circuit_instances: list[BaseModuloCircuit]) -> set[str]:\n    \"\"\"\n    Collect all Cairo1SerializableStruct types used in the input_structs and output_structs\n    of the given circuit instances.\n\n    Returns:\n        set[str]: Set of struct class names that need to be imported\n    \"\"\"\n    struct_types = set()\n\n    def add_struct_types(struct):\n        \"\"\"Helper function to add struct types recursively\"\"\"\n        struct_name = struct.struct_name\n        parsed_types = parse_struct_name(struct_name)\n        struct_types.update(parsed_types)\n\n        # Also add nested struct types if they exist\n        if hasattr(struct, \"elmts\") and struct.elmts:\n            for elmt in struct.elmts:\n                if isinstance(elmt, Cairo1SerializableStruct):\n                    add_struct_types(elmt)\n\n    for circuit_instance in circuit_instances:\n        # Collect from input_structs\n        if (\n            hasattr(circuit_instance.circuit, \"input_structs\")\n            and circuit_instance.circuit.input_structs\n        ):\n            for struct in circuit_instance.circuit.input_structs:\n                add_struct_types(struct)\n\n        # Collect from output_structs\n        if (\n            hasattr(circuit_instance.circuit, \"output_structs\")\n            and circuit_instance.circuit.output_structs\n        ):\n            for struct in circuit_instance.circuit.output_structs:\n                add_struct_types(struct)\n\n    return struct_types\n\n\ndef to_snake_case(s: str) -> str:\n    return re.sub(r\"(?<=[a-z])(?=[A-Z])|[^a-zA-Z0-9]\", \"_\", s).lower()\n\n\ndef create_circuit_instances(\n    circuit_class: Type[BaseModuloCircuit],\n    curve_id: CurveID,\n    params: list[dict],\n    compilation_mode: int,\n) -> list[BaseModuloCircuit]:\n    \"\"\"\n    Create a list of circuit instances from a given circuit class, curve id, params and compilation mode.\n    \"\"\"\n    circuits = []\n    if params is None:\n        circuit_instance = circuit_class(\n            curve_id=curve_id.value, compilation_mode=compilation_mode, auto_run=True\n        )\n        circuits.append(circuit_instance)\n    else:\n        for param in params:\n            circuit_instance = circuit_class(\n                curve_id=curve_id.value,\n                compilation_mode=compilation_mode,\n                auto_run=True,\n                **param,\n            )\n            circuits.append(circuit_instance)\n    return circuits\n\n\ndef compile_single_circuit(\n    circuit_instance: BaseModuloCircuit,\n) -> tuple[ModuloCircuit, str]:\n    \"\"\"\n    Compile a single circuit instance to Cairo code.\n    Returns the compiled circuit and the full function name.\n    \"\"\"\n    curve_id = CurveID(circuit_instance.curve_id)\n    function_name = (\n        f\"{circuit_instance.name.upper()}\"\n        if circuit_instance.circuit.generic_circuit\n        else f\"{curve_id.name}_{circuit_instance.name.upper()}\"\n    )\n    compiled_circuit, full_function_name = circuit_instance.circuit.compile_circuit(\n        function_name=function_name\n    )\n    return compiled_circuit, full_function_name\n\n\ndef compile_circuit(\n    curve_id: CurveID,\n    circuit_class: BaseModuloCircuit,\n    params: list[dict],\n    compilation_mode: int,\n) -> tuple[list[str], list[str], list[BaseModuloCircuit]]:\n    \"\"\"\n    Compile a list of circuit instances to Cairo code.\n    Returns :\n    - compiled_circuits: list of compiled circuits as strings\n    - full_function_names: list of full function names as strings\n    - circuit_instances: list of circuit instances that have been compiled\n    \"\"\"\n    circuits = create_circuit_instances(\n        circuit_class, curve_id, params, compilation_mode\n    )\n    compiled_circuits = []\n    full_function_names = []\n\n    for circuit_instance in circuits:\n        compiled_circuit, full_function_name = compile_single_circuit(circuit_instance)\n        compiled_circuits.append(compiled_circuit)\n        full_function_names.append(full_function_name)\n\n    return compiled_circuits, full_function_names, circuits\n\n\ndef create_cairo1_test(function_name: str, input: list, output: list, curve_id: int):\n    return \"\"\n    if function_name == \"\":\n        # print(f\"passing test\")\n        return \"\"\n    include_curve_id = CurveID.find_value_in_string(function_name) == None\n    if all(isinstance(i, Cairo1SerializableStruct) for i in input):\n        input_code = \"\\n\".join([i.serialize() for i in input])\n        input_params = \",\".join([f\"{i.name}\" for i in input])\n    elif all(isinstance(i, PyFelt) for i in input):\n        input_code = f\"let input = {int_array_to_u384_array(input)};\"\n        input_params = \"input\"\n    else:\n        raise ValueError(\n            f\"Invalid input type for Cairo1 test : {[type(i) for i in input]}\"\n        )\n    if all(isinstance(i, Cairo1SerializableStruct) for i in output):\n        output_code = f\"let ({', '.join([i.name+'_result' for i in output])}) = {function_name}({input_params}{', ' + str(curve_id) if include_curve_id else ''});\"\n        output_code += \"\\n\".join([i.serialize() for i in output])\n        for struct in output:\n            output_code += f\"assert_eq!({struct.name}_result, {struct.name});\"\n    elif all(isinstance(i, ModuloCircuitElement) for i in output):\n        output_code = f\"let got = {function_name}({input_params}{', ' + str(curve_id) if include_curve_id else ''});\"\n        output_code += f\"let exp = {int_array_to_u384_array(output)};\"\n        output_code += \"assert_eq!(got.len(), exp.len());\"\n        output_code += \"assert_eq!(got, exp);\"\n    else:\n        raise ValueError(\n            f\"Invalid output type for Cairo1 test : {[type(i) for i in output]}\"\n        )\n    code = f\"\"\"\n    #[test]\n    fn test_{function_name}_{CurveID(curve_id).name}() {{\n        {input_code}\n        {output_code}\n    }}\n    \"\"\"\n\n    return code\n\n\ndef format_cairo_files_in_parallel(\n    filenames, compilation_mode, precompiled_circuits_dir\n):\n    if compilation_mode == 0:\n        print(\"Formatting .cairo zero files in parallel...\")\n        cairo_files = [f\"{precompiled_circuits_dir}{f}.cairo\" for f in filenames]\n        with ProcessPoolExecutor() as executor:\n            futures = [\n                executor.submit(\n                    subprocess.run, [\"cairo-format\", file, \"-i\"], check=True\n                )\n                for file in cairo_files\n            ]\n            for future in futures:\n                future.result()  # Wait for all formatting tasks to complete\n        print(\"Done!\")\n    elif compilation_mode == 1:\n        subprocess.run([\"scarb\", \"fmt\", f\"{precompiled_circuits_dir}\"], check=True)\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/compilable_circuits/cairo1_mpcheck_circuits.py",
    "content": "from abc import ABC, abstractmethod\nfrom typing import Dict, List, Optional, Tuple, Type, Union\n\nimport garaga.modulo_circuit_structs as structs\nfrom garaga.curves import BLS12_381_ID, BN254_ID, get_irreducible_poly\nfrom garaga.extension_field_modulo_circuit import ExtensionFieldModuloCircuit, PyFelt\nfrom garaga.modulo_circuit import ModuloCircuit\nfrom garaga.modulo_circuit_structs import (\n    E12D,\n    BLSProcessedPair,\n    BNProcessedPair,\n    Cairo1SerializableStruct,\n    G1PointCircuit,\n    G2Line,\n    G2PointCircuit,\n    MillerLoopResultScalingFactor,\n    u384,\n    u384Array,\n)\nfrom garaga.precompiled_circuits import multi_pairing_check\nfrom garaga.precompiled_circuits.compilable_circuits.base import BaseEXTFCircuit\n\n\ndef split_4_sized_object_into_tuple_of_2_size(\n    input: Union[List[PyFelt], Tuple[PyFelt, PyFelt, PyFelt, PyFelt]],\n) -> Optional[Tuple[List[PyFelt], List[PyFelt]]]:\n    if input is None:\n        return None\n    assert len(input) == 4, f\"Expected input of length 4, got {len(input)}\"\n    return (list(input[0:2]), list(input[2:4]))\n\n\ndef parse_precomputed_g1_consts_and_g2_points(\n    circuit: multi_pairing_check.MultiPairingCheckCircuit,\n    vars: dict,\n    n_pairs: int,\n    bit_1: bool = False,\n) -> list[tuple[list[PyFelt], list[PyFelt]]]:\n    current_points = []\n    q_or_q_neg_points = [] if bit_1 else None\n    for i in range(n_pairs):\n        circuit.yInv.append(vars[f\"yInv_{i}\"])\n        circuit.xNegOverY.append(vars[f\"xNegOverY_{i}\"])\n        current_points.append(\n            split_4_sized_object_into_tuple_of_2_size(vars.get(f\"Q_{i}\", None))\n        )  # Return empty list if not present\n        if bit_1:\n            q_or_q_neg_points.append(\n                split_4_sized_object_into_tuple_of_2_size(\n                    vars.get(f\"Q_or_Q_neg_{i}\", None)\n                )  # Return empty list if not present\n            )\n\n    return current_points, q_or_q_neg_points\n\n\nclass BaseFixedG2PointsMPCheck(BaseEXTFCircuit, ABC):\n    def __init__(\n        self,\n        name,\n        curve_id,\n        n_pairs: int,\n        n_fixed_g2: int,\n        auto_run=True,\n        compilation_mode=1,\n    ):\n        assert compilation_mode == 1, \"Compilation mode 1 is required for this circuit\"\n        if n_pairs and \"mp_check_prepare_pairs\" not in name:\n            assert (\n                2 <= n_pairs\n            ), f\"Multi-pairing check requires at least 2 pairs, got {n_pairs}\"\n\n        if n_fixed_g2:\n            assert (\n                0 <= n_fixed_g2 <= n_pairs\n            ), f\"Number of fixed G2 points must be between 0 and {n_pairs}, got {n_fixed_g2}\"\n\n        self.n_pairs = n_pairs\n        self.n_fixed_g2 = n_fixed_g2\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n        self.generic_over_curve = True\n\n    def _initialize_circuit(self):\n        return multi_pairing_check.MultiPairingCheckCircuit(\n            self.name,\n            self.curve_id,\n            n_pairs=self.n_pairs,\n            hash_input=False,\n            compilation_mode=self.compilation_mode,\n            precompute_lines=True,\n            n_points_precomputed_lines=self.n_fixed_g2,\n        )\n\n    @property\n    @abstractmethod\n    def input_map(\n        self,\n    ) -> Dict[\n        str,\n        Union[\n            Type[Cairo1SerializableStruct], Tuple[Type[Cairo1SerializableStruct], int]\n        ],\n    ]:\n        \"\"\"\n        Define the input map for the circuit in a dict.\n        The key will be the name of the input variable, also used in the signature of the compiled Cairo code.\n        The value will be either a Cairo1SerializableStruct type (which defines the struct in the Cairo code),\n            or a tuple of the type and its size (for Array-like types).\n        The reason behind this is that each Cairo1SerializableStruct defines the __len__ method, but for the\n        array-like structs we need to specify the size in advance.\n        \"\"\"\n\n    def _base_input_map(self, bit_type: str) -> dict:\n        \"\"\"\n        Base input map for the bit 0, 1, 00, 01, and 10 cases.\n        \"\"\"\n        input_map = {}\n\n        # Add pair inputs\n        for k in range(self.n_fixed_g2):\n            input_map[f\"yInv_{k}\"] = u384\n            input_map[f\"xNegOverY_{k}\"] = u384\n            input_map[f\"G2_line_dbl_{k}\"] = G2Line\n            if bit_type in (\"1\"):\n                input_map[f\"G2_line_add_{k}\"] = G2Line\n            if bit_type == \"10\":\n                input_map[f\"G2_line_add_1_{k}\"] = G2Line\n                input_map[f\"G2_line_dbl_0_{k}\"] = G2Line\n            if bit_type == \"01\":\n                input_map[f\"G2_line_dbl_1{k}\"] = G2Line\n                input_map[f\"G2_line_add_1{k}\"] = G2Line\n            if bit_type == \"00\":\n                input_map[f\"G2_line_2nd_0_{k}\"] = G2Line\n\n        for k in range(self.n_fixed_g2, self.n_pairs):\n            input_map[f\"yInv_{k}\"] = u384\n            input_map[f\"xNegOverY_{k}\"] = u384\n            input_map[f\"Q_{k}\"] = G2PointCircuit\n            if bit_type in (\"1\", \"01\", \"10\"):\n                input_map[f\"Q_or_Q_neg_{k}\"] = G2PointCircuit\n\n        # Add common inputs\n        input_map[\"lhs_i\"] = u384\n        input_map[\"f_i_of_z\"] = u384\n        input_map[\"f_i_plus_one_of_z\"] = u384\n\n        # Add bit-specific inputs\n        if bit_type in (\"1\", \"01\", \"10\"):\n            input_map[\"c_or_cinv_of_z\"] = u384\n\n        input_map[\"z\"] = u384\n        input_map[\"c1\"] = u384\n\n        return input_map\n\n    def _process_input(\n        self, circuit: multi_pairing_check.MultiPairingCheckCircuit, input: list[PyFelt]\n    ) -> dict:\n        \"\"\"\n        Method responsible for deserializing the input list of elements into the variables in the input map,\n        and writing them to the circuit.\n        The input list is expected to be in the same order as the input map.\n        Since we use Python 3.10, the input map dict is ordered.\n        Returns a vars dict with the same keys as the input map, but with the values being the instances of the structs,\n        each struct holding ModuloCircuitElement(s).\n        \"\"\"\n        vars = {}\n        for name, struct_info in self.input_map.items():\n            if isinstance(struct_info, tuple) and struct_info[0] == u384Array:\n                # Handle u384Array with specified size\n                struct_type, size = struct_info\n                vars[name] = circuit.write_struct(\n                    struct_type(name, elmts=[input.pop(0) for _ in range(size)])\n                )\n            elif struct_info == G2Line:\n                # Internally appended to the precomputed_lines flattened list\n                circuit.precomputed_lines.extend(\n                    circuit.write_struct(\n                        G2Line(name, elmts=[input.pop(0) for _ in range(4)])\n                    )\n                )\n            else:\n                struct_type = struct_info\n                # For other types, create a temporary instance to get its length\n                temp_instance = struct_type(\n                    name, None\n                )  # Temporary instance with a dummy element\n                size = len(temp_instance)\n                if size == 1:\n                    vars[name] = circuit.write_struct(\n                        struct_type(name, elmts=[input.pop(0)])\n                    )\n                else:\n                    # Convert to tuple so that it is Hashable\n                    vars[name] = tuple(\n                        circuit.write_struct(\n                            struct_type(name, elmts=[input.pop(0) for _ in range(size)])\n                        )\n                    )\n        assert len(input) == 0, f\"Expected input of length 0, got {len(input)}\"\n        # Create the precomputed lines generator\n        circuit._precomputed_lines_generator = (\n            circuit._create_precomputed_lines_generator()\n        )\n        return vars\n\n    def build_input(self) -> list[PyFelt]:\n        \"\"\"\n        Extends the base method of BaseModuloCircuit, by reading the input map and returning a list of random elements of the total expected size.\n        \"\"\"\n        total_elements = 0\n        for name, struct_info in self.input_map.items():\n            if isinstance(struct_info, tuple):\n                # Array-like case\n                _, size = struct_info\n                total_elements += size\n            else:\n                # For other structs, create a temporary instance to get its length\n                temp_instance = struct_info(name, None)\n                total_elements += len(temp_instance)\n\n        return [self.field.random() for _ in range(total_elements)]\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = self._initialize_circuit()\n\n        vars = self._process_input(circuit, input)\n        return self._execute_circuit_logic(circuit, vars)\n\n    @abstractmethod\n    def _execute_circuit_logic(self, circuit, vars) -> ModuloCircuit:\n        \"\"\"\n        Implement the circuit logic using the processed input variables.\n        \"\"\"\n\n    def _execute_circuit_bit_logic_base(self, circuit: ModuloCircuit, vars, bit_type):\n        n_pairs = self.n_pairs\n        assert n_pairs >= 2, f\"n_pairs must be >= 2, got {n_pairs}\"\n\n        current_points, q_or_q_neg_points = parse_precomputed_g1_consts_and_g2_points(\n            circuit,\n            vars,\n            n_pairs,\n            bit_1=(bit_type == \"1\" or bit_type == \"01\" or bit_type == \"10\"),\n        )\n\n        circuit.create_lines_z_powers(vars[\"z\"])\n\n        sum_i_prod_k_P = circuit.mul(\n            vars[\"f_i_of_z\"],\n            vars[\"f_i_of_z\"],\n            \"Square f evaluation in Z, the result of previous bit.\",\n        )\n\n        new_points, sum_i_prod_k_P = self._process_points(\n            circuit, current_points, q_or_q_neg_points, sum_i_prod_k_P, bit_type\n        )\n\n        if bit_type in (\"1\", \"01\"):\n            sum_i_prod_k_P = circuit.mul(sum_i_prod_k_P, vars[\"c_or_cinv_of_z\"])\n        elif bit_type == \"10\":\n            sum_i_prod_k_P = circuit.mul(\n                sum_i_prod_k_P, circuit.square(vars[\"c_or_cinv_of_z\"])\n            )\n\n        f_i_plus_one_of_z = vars[\"f_i_plus_one_of_z\"]\n\n        new_lhs = circuit.sub(\n            sum_i_prod_k_P, f_i_plus_one_of_z, \"(Π(i,k) (Pk(z))) - Ri(z)\"\n        )\n\n        lhs_i_plus_one = circuit.add(\n            circuit.mul(vars[\"c1\"], vars[\"lhs_i\"]),\n            new_lhs,\n            \"LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\",\n        )\n\n        self._extend_output(circuit, new_points, lhs_i_plus_one)\n\n        return circuit\n\n    def _process_points(\n        self,\n        circuit: multi_pairing_check.MultiPairingCheckCircuit,\n        current_points,\n        q_or_q_neg_points,\n        sum_i_prod_k_P,\n        bit_type,\n    ):\n        new_points = []\n        if bit_type == \"00\":\n            for k in range(self.n_pairs):\n                T1, line_poly_1 = circuit.double_step(current_points[k], k)\n                sum_i_prod_k_P = self._multiply_line_evaluations(\n                    circuit, sum_i_prod_k_P, [line_poly_1], k\n                )\n                new_points.append(T1)\n\n            sum_i_prod_k_P = circuit.mul(\n                sum_i_prod_k_P,\n                sum_i_prod_k_P,\n                \"Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\",\n            )\n\n            new_new_points = []\n            for k in range(self.n_pairs):\n                T, line_poly_2 = circuit.double_step(new_points[k], k)\n                sum_i_prod_k_P = self._multiply_line_evaluations(\n                    circuit, sum_i_prod_k_P, [line_poly_2], k\n                )\n                new_new_points.append(T)\n            return new_new_points, sum_i_prod_k_P\n        elif bit_type == \"01\":\n            for k in range(self.n_pairs):\n                T, line_poly_1 = circuit.double_step(current_points[k], k)\n                sum_i_prod_k_P = self._multiply_line_evaluations(\n                    circuit, sum_i_prod_k_P, [line_poly_1], k\n                )\n                new_points.append(T)\n\n            sum_i_prod_k_P = circuit.mul(\n                sum_i_prod_k_P,\n                sum_i_prod_k_P,\n                \"Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\",\n            )\n\n            new_new_points = []\n            for k in range(self.n_pairs):\n                T, line_poly_1, line_poly_2 = circuit.double_and_add_step(\n                    new_points[k], q_or_q_neg_points[k], k\n                )\n                sum_i_prod_k_P = self._multiply_line_evaluations(\n                    circuit, sum_i_prod_k_P, [line_poly_1, line_poly_2], k\n                )\n                new_new_points.append(T)\n\n            return new_new_points, sum_i_prod_k_P\n\n        elif bit_type == \"10\":\n            for k in range(self.n_pairs):\n                T, line_poly_1, line_poly_2 = circuit.double_and_add_step(\n                    current_points[k], q_or_q_neg_points[k], k\n                )\n                sum_i_prod_k_P = self._multiply_line_evaluations(\n                    circuit, sum_i_prod_k_P, [line_poly_1, line_poly_2], k\n                )\n                new_points.append(T)\n\n            sum_i_prod_k_P = circuit.mul(\n                sum_i_prod_k_P,\n                sum_i_prod_k_P,\n                \"Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\",\n            )\n            new_new_points = []\n            for k in range(self.n_pairs):\n                T, line_poly_1 = circuit.double_step(new_points[k], k)\n                sum_i_prod_k_P = self._multiply_line_evaluations(\n                    circuit, sum_i_prod_k_P, [line_poly_1], k\n                )\n                new_new_points.append(T)\n            return new_new_points, sum_i_prod_k_P\n        elif bit_type == \"0\":\n            for k in range(self.n_pairs):\n                T, line_poly_1 = circuit.double_step(current_points[k], k)\n                sum_i_prod_k_P = self._multiply_line_evaluations(\n                    circuit, sum_i_prod_k_P, [line_poly_1], k\n                )\n                new_points.append(T)\n        elif bit_type == \"1\":\n            for k in range(self.n_pairs):\n                T, line_poly_1, line_poly_2 = circuit.double_and_add_step(\n                    current_points[k], q_or_q_neg_points[k], k\n                )\n                sum_i_prod_k_P = self._multiply_line_evaluations(\n                    circuit, sum_i_prod_k_P, [line_poly_1, line_poly_2], k\n                )\n                new_points.append(T)\n\n        else:\n            raise ValueError(f\"Invalid bit type: {bit_type}\")\n        return new_points, sum_i_prod_k_P\n\n    def _multiply_line_evaluations(\n        self,\n        circuit: multi_pairing_check.MultiPairingCheckCircuit,\n        sum_i_prod_k_P,\n        line_polynomials,\n        k,\n    ):\n        for i, line_poly in enumerate(line_polynomials):\n            sum_i_prod_k_P = circuit.mul(\n                sum_i_prod_k_P,\n                circuit.eval_poly_in_precomputed_Z(\n                    line_poly, circuit.line_sparsity, f\"line_{k}p_{i+1}\"\n                ),\n                f\"Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_{k}(z)\",\n            )\n        return sum_i_prod_k_P\n\n    def _extend_output(self, circuit, new_points, lhs_i_plus_one):\n\n        last_points = (\n            new_points[-(self.n_pairs - self.n_fixed_g2) :]\n            if self.n_pairs != self.n_fixed_g2\n            else []\n        )\n        for i, point in enumerate(last_points):\n            circuit.extend_struct_output(\n                G2PointCircuit(\n                    name=f\"Q{i}\",\n                    elmts=[\n                        point[0][0],\n                        point[0][1],\n                        point[1][0],\n                        point[1][1],\n                    ],\n                )\n            )\n        circuit.extend_struct_output(\n            u384(name=\"lhs_i_plus_one\", elmts=[lhs_i_plus_one])\n        )\n\n\nclass FixedG2MPCheckBitBase(BaseFixedG2PointsMPCheck):\n    \"\"\"Base class for bit checking circuits with default parameters.\"\"\"\n\n    BIT_TYPE = None  # Override in subclasses\n    DEFAULT_PAIRS = 3\n    DEFAULT_FIXED_G2 = 2\n\n    def __init__(\n        self,\n        curve_id: int,\n        n_pairs: int = None,\n        n_fixed_g2: int = None,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ):\n        assert compilation_mode == 1, \"Compilation mode 1 is required for this circuit\"\n        n_pairs = n_pairs if n_pairs is not None else self.DEFAULT_PAIRS\n        n_fixed_g2 = n_fixed_g2 if n_fixed_g2 is not None else self.DEFAULT_FIXED_G2\n\n        super().__init__(\n            name=f\"mp_check_bit{self.BIT_TYPE}_{n_pairs}P_{n_fixed_g2}F\",\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            n_fixed_g2=n_fixed_g2,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    @property\n    def input_map(self):\n        return self._base_input_map(self.BIT_TYPE)\n\n    def _execute_circuit_logic(self, circuit, vars) -> ModuloCircuit:\n        return self._execute_circuit_bit_logic_base(circuit, vars, self.BIT_TYPE)\n\n\nclass FixedG2MPCheckBit0(FixedG2MPCheckBitBase):\n    BIT_TYPE = \"0\"\n\n\nclass FixedG2MPCheckBit00(FixedG2MPCheckBitBase):\n    BIT_TYPE = \"00\"\n\n\nclass FixedG2MPCheckBit1(FixedG2MPCheckBitBase):\n    BIT_TYPE = \"1\"\n\n\nclass FixedG2MPCheckBit01(FixedG2MPCheckBitBase):\n    BIT_TYPE = \"01\"\n\n\nclass FixedG2MPCheckBit10(FixedG2MPCheckBitBase):\n    BIT_TYPE = \"10\"\n\n\nclass FixedG2MPCheckInitBit(BaseFixedG2PointsMPCheck):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n        n_pairs: int = 3,\n        n_fixed_g2: int = 2,\n    ):\n        super().__init__(\n            name=f\"mp_check_init_bit_{n_pairs}P_{n_fixed_g2}F\",\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            n_fixed_g2=n_fixed_g2,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    @property\n    def input_map(self):\n        input_map = {}\n        for i in range(self.n_fixed_g2):\n            input_map[f\"yInv_{i}\"] = u384\n            input_map[f\"xNegOverY_{i}\"] = u384\n            input_map[f\"G2_line_{i}\"] = G2Line\n            if self.curve_id == BLS12_381_ID:\n                input_map[f\"G2_line_{i}_2\"] = G2Line\n\n        for i in range(self.n_fixed_g2, self.n_pairs):\n            input_map[f\"yInv_{i}\"] = u384\n            input_map[f\"xNegOverY_{i}\"] = u384\n            input_map[f\"Q_{i}\"] = G2PointCircuit\n\n        input_map.update(\n            {\n                \"R_i_of_z\": u384,\n                \"z\": u384,\n                \"c_inv_of_z\": u384,\n            }\n        )\n        if self.curve_id == BN254_ID:\n            input_map[\"c1\"] = u384\n            input_map[\"previous_lhs\"] = u384\n\n        return input_map\n\n    def _execute_circuit_logic(self, circuit, vars) -> ModuloCircuit:\n        n_pairs = self.n_pairs\n        current_points, _ = parse_precomputed_g1_consts_and_g2_points(\n            circuit, vars, n_pairs\n        )\n\n        z = vars[\"z\"]\n        c_inv_of_z = vars[\"c_inv_of_z\"]\n        circuit.create_lines_z_powers(z)\n\n        f_i_plus_one_of_z = vars[\"R_i_of_z\"]\n\n        sum_i_prod_k_P_of_z = circuit.mul(\n            c_inv_of_z, c_inv_of_z\n        )  # At initialisation, f=1/c so f^2 = 1/c^2\n        new_points = []\n        if self.curve_id == BN254_ID:\n            # c_i = circuit.mul(\n            #     c0, c0\n            # )  # Second relation for BN at init bit, need to update c_i.\n            for k in range(n_pairs):\n                T, line_poly_1 = circuit.double_step(current_points[k], k)\n                sum_i_prod_k_P_of_z = circuit.mul(\n                    sum_i_prod_k_P_of_z,\n                    circuit.eval_poly_in_precomputed_Z(\n                        line_poly_1, circuit.line_sparsity, f\"line_{k}p_1\"\n                    ),\n                )\n                new_points.append(T)\n        elif self.curve_id == BLS12_381_ID:\n            # bit +1:  multiply f^2 by 1/c\n            sum_i_prod_k_P_of_z = circuit.mul(c_inv_of_z, sum_i_prod_k_P_of_z)\n            for k in range(n_pairs):\n                T, line_poly_1, line_poly_2 = circuit.triple_step(current_points[k], k)\n                sum_i_prod_k_P_of_z = circuit.mul(\n                    sum_i_prod_k_P_of_z,\n                    circuit.eval_poly_in_precomputed_Z(\n                        line_poly_1, circuit.line_sparsity, f\"line_{k}p_1\"\n                    ),\n                )\n                sum_i_prod_k_P_of_z = circuit.mul(\n                    sum_i_prod_k_P_of_z,\n                    circuit.eval_poly_in_precomputed_Z(\n                        line_poly_2, circuit.line_sparsity, f\"line_{k}p_2\"\n                    ),\n                )\n                new_points.append(T)\n\n        new_lhs = circuit.sub(\n            sum_i_prod_k_P_of_z, f_i_plus_one_of_z, comment=\"((Π(i,k) (Pk(z)) - Ri(z))\"\n        )\n\n        if self.curve_id == BLS12_381_ID:\n            pass\n        elif self.curve_id == BN254_ID:\n            c1 = vars[\"c1\"]\n            previous_lhs = vars[\"previous_lhs\"]\n            new_lhs = circuit.add(new_lhs, circuit.mul(c1, previous_lhs))\n\n        # OUTPUT\n        last_points = (\n            new_points[-(self.n_pairs - self.n_fixed_g2) :]\n            if self.n_fixed_g2 != self.n_pairs\n            else []\n        )\n        for i, point in enumerate(last_points):\n            circuit.extend_struct_output(\n                G2PointCircuit(\n                    name=f\"Q{i}\",\n                    elmts=[\n                        point[0][0],\n                        point[0][1],\n                        point[1][0],\n                        point[1][1],\n                    ],\n                )\n            )\n        circuit.extend_struct_output(u384(\"new_lhs\", elmts=[new_lhs]))\n\n        return circuit\n\n\nclass MPCheckFinalizeBN(BaseFixedG2PointsMPCheck):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        n_pairs: int = 3,\n        n_fixed_g2: int = 2,\n        compilation_mode: int = 1,\n        extra_miller_loop_result: bool = False,\n    ):\n        self.max_q_degree = multi_pairing_check.get_max_Q_degree(curve_id, n_pairs)\n        self.extra_miller_loop_result: bool = extra_miller_loop_result\n        if extra_miller_loop_result:\n            name = f\"mp_check_finalize_{n_pairs}P_{n_fixed_g2}F_EXT_MLR\"\n        else:\n            name = f\"mp_check_finalize_{n_pairs}P_{n_fixed_g2}F\"\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            n_fixed_g2=n_fixed_g2,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    @property\n    def input_map(self):\n        if self.curve_id == BLS12_381_ID:\n            return {}\n        input_map = {}\n        for i in range(self.n_fixed_g2):\n            input_map[f\"yInv_{i}\"] = u384\n            input_map[f\"xNegOverY_{i}\"] = u384\n            input_map[f\"line_1_{i}\"] = G2Line\n            input_map[f\"line_2_{i}\"] = G2Line\n\n        for i in range(self.n_fixed_g2, self.n_pairs):\n            input_map[f\"original_Q{i}\"] = G2PointCircuit\n            input_map[f\"yInv_{i}\"] = u384\n            input_map[f\"xNegOverY_{i}\"] = u384\n            input_map[f\"Q_{i}\"] = G2PointCircuit\n\n        input_map.update(\n            {\n                \"R_n_minus_2_of_z\": u384,\n                \"R_n_minus_1_of_z\": u384,\n                \"c_0\": u384,\n                \"w_of_z\": u384,\n                \"z\": u384,\n                \"c_inv_frob_1_of_z\": u384,\n                \"c_frob_2_of_z\": u384,\n                \"c_inv_frob_3_of_z\": u384,\n                \"previous_lhs\": u384,\n                \"R_n_minus_3_of_z\": u384,\n                \"Q\": (structs.u384Array, self.max_q_degree + 1),\n            }\n        )\n        if self.extra_miller_loop_result:\n            input_map[\"precomputed_miller_loop_result_of_z\"] = u384\n\n        return input_map\n\n    def _execute_circuit_logic(\n        self, circuit: multi_pairing_check.MultiPairingCheckCircuit, vars\n    ):\n        if self.curve_id == BLS12_381_ID:\n            return circuit\n\n        n_pairs = self.n_pairs\n        current_points = []\n        for k in range(n_pairs):\n            circuit.Q.append(\n                split_4_sized_object_into_tuple_of_2_size(\n                    vars.get(f\"original_Q{k}\", None)\n                )\n            )\n            circuit.yInv.append(vars[f\"yInv_{k}\"])\n            circuit.xNegOverY.append(vars[f\"xNegOverY_{k}\"])\n            current_points.append(\n                split_4_sized_object_into_tuple_of_2_size(vars.get(f\"Q_{k}\", None))\n            )\n\n        circuit.create_lines_z_powers(vars[\"z\"], add_extf_power=True)\n\n        c_0 = vars[\"c_0\"]\n\n        R_n_minus_2_of_z = vars[\"R_n_minus_2_of_z\"]\n        R_n_minus_1_of_z = vars[\"R_n_minus_1_of_z\"]\n\n        # Relation n-2 : f * line polynomials\n        prod_k_P_of_z_n_minus_2 = vars[\"R_n_minus_3_of_z\"]  # Init\n\n        line_polynomials = circuit.bn254_finalize_step(current_points)\n        for idx, line_poly in enumerate(line_polynomials):\n            prod_k_P_of_z_n_minus_2 = circuit.mul(\n                prod_k_P_of_z_n_minus_2,\n                circuit.eval_poly_in_precomputed_Z(\n                    line_poly, circuit.line_sparsity, f\"line_{idx}\"\n                ),\n            )\n\n        lhs_n_minus_2 = circuit.sub(\n            prod_k_P_of_z_n_minus_2,\n            R_n_minus_2_of_z,\n            comment=\"((Π(n-2,k) (Pk(z)) - R_n_minus_2(z))\",\n        )\n\n        # Relation n-1 (last one) : f * w * c_inv_frob_1 * c_frob_2 * c_inv_frob_3\n        # If groth16 mode : * precomputed_miller_loop_result\n        prod_k_P_of_z_n_minus_1 = circuit.product(\n            [\n                R_n_minus_2_of_z,\n                vars[\"c_inv_frob_1_of_z\"],\n                vars[\"c_frob_2_of_z\"],\n                vars[\"c_inv_frob_3_of_z\"],\n                vars[\"w_of_z\"],\n            ],\n        )\n\n        if self.extra_miller_loop_result:\n            prod_k_P_of_z_n_minus_1 = circuit.mul(\n                prod_k_P_of_z_n_minus_1, vars[\"precomputed_miller_loop_result_of_z\"]\n            )\n\n        lhs_n_minus_1 = circuit.sub(\n            prod_k_P_of_z_n_minus_1,\n            R_n_minus_1_of_z,\n            comment=\"((Π(n-1,k) (Pk(z)) - R_n_minus_1(z))\",\n        )\n\n        _final_lhs = circuit.add(circuit.mul(c_0, vars[\"previous_lhs\"]), lhs_n_minus_2)\n        final_lhs = circuit.add(circuit.mul(c_0, _final_lhs), lhs_n_minus_1)\n\n        Q_of_z = circuit.eval_horner(vars[\"Q\"], z=vars[\"z\"], poly_name=\"big_Q\")\n        P_irr, P_irr_sparsity = circuit.write_sparse_constant_elements(\n            get_irreducible_poly(self.curve_id, 12).get_coeffs(),\n        )\n        P_of_z = circuit.eval_poly_in_precomputed_Z(\n            P_irr, P_irr_sparsity, poly_name=\"P_irr\"\n        )\n        check = circuit.sub(final_lhs, circuit.mul(Q_of_z, P_of_z))\n\n        circuit.extend_struct_output(u384(\"final_check\", elmts=[check]))\n        return circuit\n\n\nclass MPCheckFinalizeBLS(BaseFixedG2PointsMPCheck):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n        n_pairs: int = 3,\n        extra_miller_loop_result: bool = False,\n    ):\n        self.max_q_degree = multi_pairing_check.get_max_Q_degree(curve_id, n_pairs)\n        self.extra_miller_loop_result: bool = extra_miller_loop_result\n        if extra_miller_loop_result:\n            name = f\"mp_check_finalize_{n_pairs}P_EXT_MLR\"\n        else:\n            name = f\"mp_check_finalize_{n_pairs}P\"\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            n_fixed_g2=None,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    @property\n    def input_map(self):\n        input_map = {\n            \"R_n_minus_1_of_z\": u384,\n            \"c_1\": u384,\n            \"w_of_z\": u384,\n            \"z\": u384,\n            \"c_inv_frob_1_of_z\": u384,\n            \"previous_lhs\": u384,\n            \"R_n_minus_2\": E12D,\n            \"Q\": (u384Array, self.max_q_degree + 1),\n        }\n        if self.extra_miller_loop_result:\n            input_map[\"precomputed_miller_loop_result_of_z\"] = u384\n        return input_map\n\n    def _execute_circuit_logic(self, circuit: ModuloCircuit, vars) -> ModuloCircuit:\n        if self.curve_id == BN254_ID:\n            return circuit\n\n        circuit.create_powers_of_Z(vars[\"z\"], max_degree=12)\n\n        c_1 = vars[\"c_1\"]\n        R_n_minus_1_of_z = vars[\"R_n_minus_1_of_z\"]\n\n        # Relation n-1 (last one) : f * w * c_inv_frob_1\n        R_n_minus_2 = vars[\"R_n_minus_2\"]\n        R_n_minus_2_conjugate = circuit.conjugate_e12d(R_n_minus_2)\n        R_n_minus_2_conjugate_of_z = circuit.eval_poly_in_precomputed_Z(\n            R_n_minus_2_conjugate, poly_name=\"R_n_minus_2_conjugate\"\n        )\n        prod_k_P_of_z_n_minus_1 = circuit.product(\n            [R_n_minus_2_conjugate_of_z, vars[\"c_inv_frob_1_of_z\"], vars[\"w_of_z\"]]\n        )\n\n        if self.extra_miller_loop_result:\n            prod_k_P_of_z_n_minus_1 = circuit.mul(\n                prod_k_P_of_z_n_minus_1, vars[\"precomputed_miller_loop_result_of_z\"]\n            )\n\n        lhs_n_minus_1 = circuit.sub(\n            prod_k_P_of_z_n_minus_1,\n            R_n_minus_1_of_z,\n            comment=\"(Π(n-1,k) (Pk(z)) - R_n_minus_1(z))\",\n        )\n\n        final_lhs = circuit.add(\n            circuit.mul(c_1, vars[\"previous_lhs\"]),\n            lhs_n_minus_1,\n            comment=\"c_1 * previous_lhs + lhs_n_minus_1\",\n        )\n        P_irr, P_irr_sparsity = circuit.write_sparse_constant_elements(\n            get_irreducible_poly(self.curve_id, 12).get_coeffs()\n        )\n        P_of_z = circuit.eval_poly_in_precomputed_Z(\n            P_irr, P_irr_sparsity, poly_name=\"P_irr\"\n        )\n        Q_of_z = circuit.eval_horner(vars[\"Q\"], vars[\"z\"], poly_name=\"big_Q\")\n\n        check = circuit.sub(\n            final_lhs,\n            circuit.mul(Q_of_z, P_of_z, comment=\"Q(z) * P(z)\"),\n            comment=\"final_lhs - Q(z) * P(z)\",\n        )\n\n        circuit.extend_struct_output(u384(\"final_check\", elmts=[check]))\n        return circuit\n\n\nclass MPCheckPreparePairs(BaseFixedG2PointsMPCheck):\n    \"\"\"\n    This circuit is used to prepare points for the multi-pairing check.\n    For BN curve, it will compute yInv and xNegOverY for each point + negate the y of the G2 point.\n    For BLS curve, it will only compute yInv and xNegOverY for each point.\n    \"\"\"\n\n    def __init__(\n        self,\n        curve_id: int,\n        n_pairs: int = 0,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ):\n        assert compilation_mode == 1, \"Compilation mode 1 is required for this circuit\"\n        self.n_pairs = n_pairs\n        super().__init__(\n            name=f\"mp_check_prepare_pairs_{n_pairs}P\",\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            n_fixed_g2=None,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n        self.generic_over_curve = True\n\n    @property\n    def input_map(self):\n        input_map = {}\n        for i in range(self.n_pairs):\n            input_map[f\"p_{i}\"] = G1PointCircuit\n            if self.curve_id == BN254_ID:\n                input_map[f\"Qy0_{i}\"] = u384\n                input_map[f\"Qy1_{i}\"] = u384\n        return input_map\n\n    def _initialize_circuit(self):\n        return multi_pairing_check.MultiMillerLoopCircuit(\n            self.name,\n            self.curve_id,\n            n_pairs=self.n_pairs,\n            compilation_mode=self.compilation_mode,\n        )\n\n    def _execute_circuit_logic(self, circuit, vars) -> ModuloCircuit:\n        n_pairs = self.n_pairs\n        for i in range(n_pairs):\n            p = vars[f\"p_{i}\"]\n            x, y = p\n            yInv = circuit.inv(y)\n            xNegOverY = circuit.neg(circuit.mul(x, yInv))\n\n            if self.curve_id == BN254_ID:\n                Qy0 = vars[f\"Qy0_{i}\"]\n                Qy1 = vars[f\"Qy1_{i}\"]\n                Qyneg0 = circuit.neg(Qy0)\n                Qyneg1 = circuit.neg(Qy1)\n                circuit.extend_struct_output(\n                    BNProcessedPair(\n                        name=f\"p_{i}\", elmts=[yInv, xNegOverY, Qyneg0, Qyneg1]\n                    )\n                )\n            else:\n                circuit.extend_struct_output(\n                    BLSProcessedPair(name=f\"p_{i}\", elmts=[yInv, xNegOverY])\n                )\n\n        return circuit\n\n\nclass InitializeMPCheck(BaseFixedG2PointsMPCheck):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n        extra_miller_loop_result: bool = False,\n    ):\n        assert compilation_mode == 1, \"Compilation mode 1 is required for this circuit\"\n        self.extra_miller_loop_result: bool = extra_miller_loop_result\n        if extra_miller_loop_result:\n            name = \"initialize_mpcheck_ext_mlr\"\n        else:\n            name = \"initialize_mpcheck\"\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            n_pairs=2,  # Mocked value, not used in practice.\n            n_fixed_g2=None,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    @property\n    def input_map(self):\n        input_map = {\n            \"lambda_root\" if self.curve_id == BN254_ID else \"lambda_root_inverse\": E12D,\n            \"z\": u384,\n            \"scaling_factor\": MillerLoopResultScalingFactor,\n        }\n        if self.curve_id == BN254_ID:\n            input_map.update(\n                {\n                    \"c_inv\": E12D,\n                }\n            )\n        if self.extra_miller_loop_result:\n            input_map[\"precomputed_miller_loop_result\"] = E12D\n        return input_map\n\n    def _execute_circuit_logic(\n        self, circuit: multi_pairing_check.MultiPairingCheckCircuit, vars\n    ):\n        circuit.create_powers_of_Z(Z=vars[\"z\"], max_degree=11)\n\n        if self.curve_id == BLS12_381_ID:\n            self._execute_bls12_381_logic(circuit, vars)\n        elif self.curve_id == BN254_ID:\n            self._execute_bn254_logic(circuit, vars)\n\n        # Handle shared scaling factor computation (always executed after curve-specific c/c_inv logic)\n        self._execute_shared_logic(circuit, vars)\n\n        # Continue with curve-specific frobenius operations\n        if self.curve_id == BLS12_381_ID:\n            self._execute_bls12_381_frobenius_logic(circuit, vars)\n        elif self.curve_id == BN254_ID:\n            self._execute_bn254_frobenius_logic(circuit, vars)\n\n        if self.extra_miller_loop_result:\n            precomputed_miller_loop_result = vars[\"precomputed_miller_loop_result\"]\n            precomputed_miller_loop_result_of_z = circuit.eval_poly_in_precomputed_Z(\n                precomputed_miller_loop_result,\n                poly_name=\"precomputed_miller_loop_result\",\n            )\n            circuit.extend_struct_output(\n                u384(\n                    \"precomputed_miller_loop_result_of_z\",\n                    elmts=[precomputed_miller_loop_result_of_z],\n                )\n            )\n\n        return circuit\n\n    def _execute_bls12_381_logic(\n        self, circuit: multi_pairing_check.MultiPairingCheckCircuit, vars\n    ):\n        \"\"\"Handle BLS12-381 specific logic with c_inverse - first part.\"\"\"\n        # Get lambda_root_inverse (c_inverse for BLS12-381)\n        lambda_root_inverse = vars[\"lambda_root_inverse\"]\n\n        # Conjugate c_inverse for BLS12-381\n        self.c_inv = circuit.conjugate_e12d(lambda_root_inverse)\n\n        # Evaluate c_inverse polynomial at z\n        c_inv_of_z = circuit.eval_poly_in_precomputed_Z(self.c_inv, poly_name=\"C_inv\")\n\n        circuit.extend_struct_output(u384(name=\"c_inv_of_z\", elmts=[c_inv_of_z]))\n\n    def _execute_bn254_logic(\n        self, circuit: multi_pairing_check.MultiPairingCheckCircuit, vars\n    ):\n        \"\"\"Handle BN254 specific logic with c (lambda_root) - first part.\"\"\"\n        # Get lambda_root (c for BN254)\n        lambda_root = vars[\"lambda_root\"]\n        self.c = lambda_root\n\n        # Evaluate c polynomial at z\n        self.c_of_z = circuit.eval_poly_in_precomputed_Z(self.c, poly_name=\"C\")\n\n        circuit.extend_struct_output(u384(name=\"c_of_z\", elmts=[self.c_of_z]))\n\n    def _execute_shared_logic(\n        self, circuit: multi_pairing_check.MultiPairingCheckCircuit, vars\n    ):\n        \"\"\"Handle shared scaling factor computation for both curves.\"\"\"\n        scaling_factor_sparsity = [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0]\n        scaling_factor_compressed = vars[\"scaling_factor\"]\n        scaling_factor = [\n            scaling_factor_compressed[0],\n            None,\n            scaling_factor_compressed[1],\n            None,\n            scaling_factor_compressed[2],\n            None,\n            scaling_factor_compressed[3],\n            None,\n            scaling_factor_compressed[4],\n            None,\n            scaling_factor_compressed[5],\n            None,\n        ]\n\n        scaling_factor_of_z = circuit.eval_poly_in_precomputed_Z(\n            scaling_factor, sparsity=scaling_factor_sparsity, poly_name=\"W\"\n        )\n\n        circuit.extend_struct_output(\n            u384(\"scaling_factor_of_z\", elmts=[scaling_factor_of_z])\n        )\n\n    def _execute_bls12_381_frobenius_logic(\n        self, circuit: multi_pairing_check.MultiPairingCheckCircuit, vars\n    ):\n        \"\"\"Handle BLS12-381 specific frobenius logic - second part.\"\"\"\n        # Compute frobenius of c_inverse\n        c_inv_frob_1 = circuit.frobenius(self.c_inv, 1)\n        c_inv_frob_1_conjugate = circuit.conjugate_e12d(c_inv_frob_1)\n        c_inv_frob_1_conjugate_of_z = circuit.eval_poly_in_precomputed_Z(\n            c_inv_frob_1_conjugate, poly_name=\"C_inv_frob_1\"\n        )\n        circuit.extend_struct_output(\n            u384(\"c_inv_frob_1_conjugate_of_z\", elmts=[c_inv_frob_1_conjugate_of_z])\n        )\n\n    def _execute_bn254_frobenius_logic(\n        self, circuit: multi_pairing_check.MultiPairingCheckCircuit, vars\n    ):\n        \"\"\"Handle BN254 specific frobenius logic - second part.\"\"\"\n        # Additional BN254-specific variables\n        c_inv = vars[\"c_inv\"]\n\n        # Evaluate c_inverse polynomial at z\n        c_inv_of_z = circuit.eval_poly_in_precomputed_Z(c_inv, poly_name=\"C_inv\")\n        circuit.extend_struct_output(u384(name=\"c_inv_of_z\", elmts=[c_inv_of_z]))\n\n        # Compute lhs = c^0 * (c_of_z * c_inv_of_z - 1) (c^0=1)\n        lhs = circuit.sub(\n            circuit.mul(self.c_of_z, c_inv_of_z),\n            circuit.set_or_get_constant(1),\n            comment=\"c_of_z * c_inv_of_z - 1\",\n        )\n        circuit.extend_struct_output(u384(\"lhs\", elmts=[lhs]))\n\n        # Compute frobenius operations for BN254\n        c_inv_frob_1 = circuit.frobenius(c_inv, 1)\n        c_frob_2 = circuit.frobenius(self.c, 2)\n        c_inv_frob_3 = circuit.frobenius(c_inv, 3)\n\n        c_inv_frob_1_of_z = circuit.eval_poly_in_precomputed_Z(\n            c_inv_frob_1, poly_name=\"C_inv_frob_1\"\n        )\n        c_frob_2_of_z = circuit.eval_poly_in_precomputed_Z(\n            c_frob_2, poly_name=\"C_frob_2\"\n        )\n        c_inv_frob_3_of_z = circuit.eval_poly_in_precomputed_Z(\n            c_inv_frob_3, poly_name=\"C_inv_frob_3\"\n        )\n\n        circuit.extend_struct_output(\n            u384(\"c_inv_frob_1_of_z\", elmts=[c_inv_frob_1_of_z])\n        )\n        circuit.extend_struct_output(u384(\"c_frob_2_of_z\", elmts=[c_frob_2_of_z]))\n        circuit.extend_struct_output(\n            u384(\"c_inv_frob_3_of_z\", elmts=[c_inv_frob_3_of_z])\n        )\n\n\nclass FP12MulAssertOne(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            \"fp12_mul_assert_one\", curve_id, auto_run, init_hash, compilation_mode\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(12)])  # X\n        input.extend([self.field.random() for _ in range(12)])  # Y\n        input.extend([self.field.random() for _ in range(11)])  # Q\n        # R is known to be 1.\n        input.append(self.field.random())  # z\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ExtensionFieldModuloCircuit:\n        circuit = ExtensionFieldModuloCircuit(\n            self.name,\n            self.curve_id,\n            extension_degree=12,\n            init_hash=self.init_hash,\n            compilation_mode=self.compilation_mode,\n        )\n        X = circuit.write_struct(E12D(\"X\", elmts=[input.pop(0) for _ in range(12)]))\n        Y = circuit.write_struct(E12D(\"Y\", elmts=[input.pop(0) for _ in range(12)]))\n        Q = circuit.write_struct(\n            structs.E12DMulQuotient(\"Q\", elmts=[input.pop(0) for _ in range(11)])\n        )\n        assert len(input) == 1\n        z = circuit.write_struct(u384(\"z\", elmts=[input.pop(0)]))\n        assert len(input) == 0\n        circuit.create_powers_of_Z(z, max_degree=12)\n        P_irr, P_irr_sparsity = circuit.write_sparse_constant_elements(\n            get_irreducible_poly(self.curve_id, 12).get_coeffs(),\n        )\n        P_of_z = circuit.eval_poly_in_precomputed_Z(\n            P_irr, P_irr_sparsity, poly_name=\"P_irr\"\n        )\n        Q_of_z = circuit.eval_poly_in_precomputed_Z(Q, poly_name=\"Q\")\n        R_of_z = circuit.set_or_get_constant(1)\n\n        X_of_z = circuit.eval_poly_in_precomputed_Z(X, poly_name=\"X\")\n        Y_of_z = circuit.eval_poly_in_precomputed_Z(Y, poly_name=\"Y\")\n        check = circuit.sub(\n            circuit.mul(X_of_z, Y_of_z, comment=\"X(z) * Y(z)\"),\n            circuit.mul(Q_of_z, P_of_z, comment=\"Q(z) * P(z)\"),\n            comment=\"(X(z) * Y(z)) - (Q(z) * P(z))\",\n        )\n        check = circuit.sub(check, R_of_z, comment=\"(X(z) * Y(z) - Q(z) * P(z)) - 1\")\n        circuit.extend_struct_output(u384(\"check\", elmts=[check]))\n\n        return circuit\n\n\nclass EvalE12D(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\"eval_e12d\", curve_id, auto_run, init_hash, compilation_mode)\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(12)])  # X\n        input.append(self.field.random())  # z\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ExtensionFieldModuloCircuit:\n        circuit = ExtensionFieldModuloCircuit(\n            self.name,\n            self.curve_id,\n            extension_degree=12,\n            init_hash=self.init_hash,\n            compilation_mode=self.compilation_mode,\n        )\n        X = circuit.write_struct(E12D(\"f\", elmts=[input.pop(0) for _ in range(12)]))\n        z = circuit.write_struct(u384(\"z\", elmts=[input.pop(0)]))\n        X_of_z = circuit.eval_horner(X, z, poly_name=\"X\")\n        circuit.extend_struct_output(u384(\"f_of_z\", elmts=[X_of_z]))\n        return circuit\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/compilable_circuits/cairo1_tower_pairing.py",
    "content": "from abc import ABC, abstractmethod\nfrom typing import Dict, List, Optional, Tuple, Type, Union\n\nimport garaga.modulo_circuit_structs as structs\nfrom garaga.curves import BLS12_381_ID\nfrom garaga.modulo_circuit import ModuloCircuit, PyFelt\nfrom garaga.modulo_circuit_structs import (\n    Cairo1SerializableStruct,\n    G2Line,\n    G2PointCircuit,\n    u384,\n    u384Array,\n)\nfrom garaga.precompiled_circuits.compilable_circuits.base import (\n    BaseEXTFCircuit,\n    BaseModuloCircuit,\n)\nfrom garaga.precompiled_circuits.miller_tower import MillerTowerCircuit\n\n\ndef split_4_sized_object_into_tuple_of_2_size(\n    input: Union[List[PyFelt], Tuple[PyFelt, PyFelt, PyFelt, PyFelt]],\n) -> Optional[Tuple[List[PyFelt], List[PyFelt]]]:\n    if input is None:\n        return None\n    assert len(input) == 4, f\"Expected input of length 4, got {len(input)}\"\n    return (list(input[0:2]), list(input[2:4]))\n\n\ndef parse_precomputed_g1_consts_and_g2_points(\n    circuit: MillerTowerCircuit,\n    vars: dict,\n    n_pairs: int,\n    bit_1: bool = False,\n) -> list[tuple[list[PyFelt], list[PyFelt]]]:\n    current_points = []\n    q_or_q_neg_points = [] if bit_1 else None\n    for i in range(n_pairs):\n        circuit.yInv.append(vars[f\"yInv_{i}\"])\n        circuit.xNegOverY.append(vars[f\"xNegOverY_{i}\"])\n        current_points.append(\n            split_4_sized_object_into_tuple_of_2_size(vars.get(f\"Q_{i}\", None))\n        )  # Return empty list if not present\n        if bit_1:\n            q_or_q_neg_points.append(\n                split_4_sized_object_into_tuple_of_2_size(\n                    vars.get(f\"Q_or_Q_neg_{i}\", None)\n                )  # Return empty list if not present\n            )\n\n    return current_points, q_or_q_neg_points\n\n\nclass BaseTowerMillerLoop(BaseEXTFCircuit, ABC):\n    def __init__(\n        self,\n        name,\n        curve_id,\n        auto_run=True,\n        compilation_mode=1,\n        n_pairs: int = 1,\n    ):\n        assert compilation_mode == 1, \"Compilation mode 1 is required for this circuit\"\n        self.n_pairs = n_pairs\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n        self.generic_over_curve = True\n\n    def _initialize_circuit(self):\n        return MillerTowerCircuit(\n            self.name,\n            self.curve_id,\n            n_pairs=self.n_pairs,\n            compilation_mode=self.compilation_mode,\n        )\n\n    @property\n    @abstractmethod\n    def input_map(\n        self,\n    ) -> Dict[\n        str,\n        Union[\n            Type[Cairo1SerializableStruct], Tuple[Type[Cairo1SerializableStruct], int]\n        ],\n    ]:\n        \"\"\"\n        Define the input map for the circuit in a dict.\n        The key will be the name of the input variable, also used in the signature of the compiled Cairo code.\n        The value will be either a Cairo1SerializableStruct type (which defines the struct in the Cairo code),\n            or a tuple of the type and its size (for Array-like types).\n        The reason behind this is that each Cairo1SerializableStruct defines the __len__ method, but for the\n        array-like structs we need to specify the size in advance.\n        \"\"\"\n\n    def _base_input_map(self, bit_type: str) -> dict:\n        \"\"\"\n        Base input map for the bit 0 and 1\n        \"\"\"\n        input_map = {}\n\n        for k in range(self.n_pairs):\n            input_map[f\"yInv_{k}\"] = u384\n            input_map[f\"xNegOverY_{k}\"] = u384\n            input_map[f\"Q_{k}\"] = G2PointCircuit\n            if bit_type == \"1\":\n                input_map[f\"Q_or_Q_neg_{k}\"] = G2PointCircuit\n\n        # Add common inputs\n        input_map[\"M_i\"] = structs.E12T\n\n        return input_map\n\n    def _process_input(self, circuit: MillerTowerCircuit, input: list[PyFelt]) -> dict:\n        \"\"\"\n        Method responsible for deserializing the input list of elements into the variables in the input map,\n        and writing them to the circuit.\n        The input list is expected to be in the same order as the input map.\n        Since we use Python 3.10, the input map dict is ordered.\n        Returns a vars dict with the same keys as the input map, but with the values being the instances of the structs,\n        each struct holding ModuloCircuitElement(s).\n        \"\"\"\n        vars = {}\n        for name, struct_info in self.input_map.items():\n            if isinstance(struct_info, tuple) and struct_info[0] == u384Array:\n                # Handle u384Array with specified size\n                struct_type, size = struct_info\n                vars[name] = circuit.write_struct(\n                    struct_type(name, elmts=[input.pop(0) for _ in range(size)])\n                )\n            elif struct_info == G2Line:\n                # Internally appended to the precomputed_lines flattened list\n                circuit.precomputed_lines.extend(\n                    circuit.write_struct(\n                        G2Line(name, elmts=[input.pop(0) for _ in range(4)])\n                    )\n                )\n            else:\n                struct_type = struct_info\n                # For other types, create a temporary instance to get its length\n                temp_instance = struct_type(\n                    name, None\n                )  # Temporary instance with a dummy element\n                size = len(temp_instance)\n                if size == 1:\n                    vars[name] = circuit.write_struct(\n                        struct_type(name, elmts=[input.pop(0)])\n                    )\n                else:\n                    # Convert to tuple so that it is Hashable\n                    vars[name] = tuple(\n                        circuit.write_struct(\n                            struct_type(name, elmts=[input.pop(0) for _ in range(size)])\n                        )\n                    )\n        assert len(input) == 0, f\"Expected input of length 0, got {len(input)}\"\n        # Create the precomputed lines generator\n        circuit._precomputed_lines_generator = (\n            circuit._create_precomputed_lines_generator()\n        )\n        return vars\n\n    def build_input(self) -> list[PyFelt]:\n        \"\"\"\n        Extends the base method of BaseModuloCircuit, by reading the input map and returning a list of random elements of the total expected size.\n        \"\"\"\n        total_elements = 0\n        for name, struct_info in self.input_map.items():\n            if isinstance(struct_info, tuple):\n                # Array-like case\n                _, size = struct_info\n                total_elements += size\n            else:\n                # For other structs, create a temporary instance to get its length\n                temp_instance = struct_info(name, None)\n                total_elements += len(temp_instance)\n\n        return [self.field.random() for _ in range(total_elements)]\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = self._initialize_circuit()\n\n        vars = self._process_input(circuit, input)\n        return self._execute_circuit_logic(circuit, vars)\n\n    @abstractmethod\n    def _execute_circuit_logic(self, circuit, vars) -> ModuloCircuit:\n        \"\"\"\n        Implement the circuit logic using the processed input variables.\n        \"\"\"\n\n    def _execute_circuit_bit_logic_base(\n        self, circuit: MillerTowerCircuit, vars, bit_type\n    ):\n        n_pairs = self.n_pairs\n        assert n_pairs >= 1, f\"n_pairs must be >= 1, got {n_pairs}\"\n\n        current_points, q_or_q_neg_points = parse_precomputed_g1_consts_and_g2_points(\n            circuit, vars, n_pairs, bit_1=(bit_type == \"1\")\n        )\n\n        Mi_sq = circuit.fp12_square(vars[\"M_i\"])\n\n        new_points, Mi_plus_one = self._process_points(\n            circuit, current_points, q_or_q_neg_points, Mi_sq, bit_type\n        )\n\n        self._extend_output(circuit, new_points, Mi_plus_one)\n\n        return circuit\n\n    def _process_points(\n        self,\n        circuit: MillerTowerCircuit,\n        current_points,\n        q_or_q_neg_points,\n        sum_i_prod_k_P,\n        bit_type,\n    ):\n        new_points = []\n        if bit_type == \"0\":\n            for k in range(self.n_pairs):\n                T, (lineR0, lineR1) = circuit._double(current_points[k], k)\n                line = circuit.eval_tower_line(\n                    lineR0 + lineR1, circuit.yInv[k], circuit.xNegOverY[k]\n                )\n                sum_i_prod_k_P = self._multiply_line_evaluations(\n                    circuit, sum_i_prod_k_P, [line], k\n                )\n                new_points.append(T)\n        elif bit_type == \"1\":\n            for k in range(self.n_pairs):\n                # T, l1, l2 = circuit.double_and_add_step(\n                #     current_points[k], q_or_q_neg_points[k], k\n                # )\n                T, (line1R0, line1R1), (line2R0, line2R1) = circuit._double_and_add(\n                    current_points[k], q_or_q_neg_points[k], k\n                )\n                line1 = circuit.eval_tower_line(\n                    line1R0 + line1R1, circuit.yInv[k], circuit.xNegOverY[k]\n                )\n                line2 = circuit.eval_tower_line(\n                    line2R0 + line2R1, circuit.yInv[k], circuit.xNegOverY[k]\n                )\n                sum_i_prod_k_P = self._multiply_line_evaluations(\n                    circuit, sum_i_prod_k_P, [line1, line2], k\n                )\n                new_points.append(T)\n\n        return new_points, sum_i_prod_k_P\n\n    def _multiply_line_evaluations(\n        self,\n        circuit: MillerTowerCircuit,\n        sum_i_prod_k_P,\n        lines,\n        k,\n    ):\n        for i, l in enumerate(lines):\n            sum_i_prod_k_P = circuit.mul_by_line_tower(sum_i_prod_k_P, l)\n        return sum_i_prod_k_P\n\n    def _extend_output(self, circuit: ModuloCircuit, new_points, Mi_plus_one):\n        circuit.exact_output_refs_needed = []\n        for i, point in enumerate(new_points):\n            sum_coords = circuit.sum(\n                [point[0][0], point[0][1], point[1][0], point[1][1]]\n            )\n            circuit.exact_output_refs_needed.append(sum_coords)\n\n            circuit.extend_struct_output(\n                G2PointCircuit(\n                    name=f\"Q{i}\",\n                    elmts=[\n                        point[0][0],\n                        point[0][1],\n                        point[1][0],\n                        point[1][1],\n                    ],\n                )\n            )\n\n        circuit.extend_struct_output(\n            structs.E12T(name=\"Mi_plus_one\", elmts=Mi_plus_one)\n        )\n        circuit.exact_output_refs_needed.extend(Mi_plus_one)\n\n\nclass TowerMillerBit0(BaseTowerMillerLoop):\n    def __init__(\n        self,\n        curve_id: int,\n        n_pairs: int,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ):\n        super().__init__(\n            name=f\"tower_miller_bit0_{n_pairs}P\",\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    @property\n    def input_map(self):\n        return self._base_input_map(\"0\")\n\n    def _execute_circuit_logic(self, circuit, vars) -> ModuloCircuit:\n        return self._execute_circuit_bit_logic_base(circuit, vars, \"0\")\n\n\nclass TowerMillerBit1(BaseTowerMillerLoop):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        n_pairs: int = 1,\n        compilation_mode: int = 1,\n    ):\n        assert compilation_mode == 1, \"Compilation mode 1 is required for this circuit\"\n        super().__init__(\n            name=f\"tower_miller_bit1_{n_pairs}P\",\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    @property\n    def input_map(self):\n        return self._base_input_map(\"1\")\n\n    def _execute_circuit_logic(self, circuit, vars) -> ModuloCircuit:\n        return self._execute_circuit_bit_logic_base(circuit, vars, \"1\")\n\n\nclass TowerMillerInitBit(BaseTowerMillerLoop):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n        n_pairs: int = 3,\n    ):\n        super().__init__(\n            name=f\"tower_miller_init_bit_{n_pairs}P\",\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    @property\n    def input_map(self):\n        if self.curve_id == BLS12_381_ID:\n            input_map = {}\n            for k in range(self.n_pairs):\n                input_map[f\"yInv_{k}\"] = u384\n                input_map[f\"xNegOverY_{k}\"] = u384\n                input_map[f\"Q_{k}\"] = G2PointCircuit\n            return input_map\n        else:\n            raise NotImplementedError(f\"Curve {self.curve_id} not implemented\")\n\n    def _execute_circuit_logic(\n        self, circuit: MillerTowerCircuit, vars\n    ) -> ModuloCircuit:\n        n_pairs = self.n_pairs\n        assert n_pairs == 1, f\"Only implemented for 1 pair for now, got {n_pairs}\"\n\n        current_points, q_or_q_neg_points = parse_precomputed_g1_consts_and_g2_points(\n            circuit, vars, n_pairs, bit_1=False\n        )\n\n        new_points = []\n        for k in range(self.n_pairs):\n            T, (line1R0, line1R1), (line2R0, line2R1) = circuit._triple(\n                current_points[k], k\n            )\n\n            line1 = circuit.eval_tower_line(\n                line1R0 + line1R1, circuit.yInv[k], circuit.xNegOverY[k]\n            )\n            line2 = circuit.eval_tower_line(\n                line2R0 + line2R1, circuit.yInv[k], circuit.xNegOverY[k]\n            )\n            # result.C0.B0 = prodLines[0]\n            # \t\tresult.C0.B1 = prodLines[1]\n            # \t\tresult.C0.B2 = prodLines[2]\n            # \t\tresult.C1.B1 = prodLines[3]\n            # \t\tresult.C1.B2 = prodLines[4]\n            ll = circuit.mul_line_by_line_tower(line1, line2)\n\n            new_points.append(T)\n\n        for i, point in enumerate(new_points):\n            circuit.extend_struct_output(\n                G2PointCircuit(\n                    name=f\"Q{i}\",\n                    elmts=[\n                        point[0][0],\n                        point[0][1],\n                        point[1][0],\n                        point[1][1],\n                    ],\n                )\n            )\n\n        circuit.extend_struct_output(structs.u384(name=\"c0b0a0\", elmts=[ll[0]]))\n        circuit.extend_struct_output(structs.u384(name=\"c0b0a1\", elmts=[ll[1]]))\n        circuit.extend_struct_output(structs.u384(name=\"c0b1a0\", elmts=[ll[2]]))\n        circuit.extend_struct_output(structs.u384(name=\"c0b1a1\", elmts=[ll[3]]))\n        circuit.extend_struct_output(structs.u384(name=\"c0b2a0\", elmts=[ll[4]]))\n        circuit.extend_struct_output(structs.u384(name=\"c0b2a1\", elmts=[ll[5]]))\n        circuit.extend_struct_output(structs.u384(name=\"c1b1a0\", elmts=[ll[6]]))\n        circuit.extend_struct_output(structs.u384(name=\"c1b1a1\", elmts=[ll[7]]))\n        circuit.extend_struct_output(structs.u384(name=\"c1b2a0\", elmts=[ll[8]]))\n        circuit.extend_struct_output(structs.u384(name=\"c1b2a1\", elmts=[ll[9]]))\n\n        return circuit\n\n\nclass TowerMillerFinalizeBN(BaseTowerMillerLoop):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        n_pairs: int = 1,\n        compilation_mode: int = 1,\n    ):\n\n        super().__init__(\n            name=f\"tower_miller_finalize_bn_{n_pairs}P\",\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    @property\n    def input_map(self):\n        if self.curve_id == BLS12_381_ID:\n            return {}\n        input_map = {}\n\n        for i in range(self.n_pairs):\n            input_map[f\"original_Q{i}\"] = G2PointCircuit\n            input_map[f\"yInv_{i}\"] = u384\n            input_map[f\"xNegOverY_{i}\"] = u384\n            input_map[f\"Q_{i}\"] = G2PointCircuit\n\n        input_map[\"Mi\"] = structs.E12T\n\n        return input_map\n\n    def _execute_circuit_logic(self, circuit: MillerTowerCircuit, vars):\n        if self.curve_id == BLS12_381_ID:\n            return circuit\n\n        n_pairs = self.n_pairs\n        current_points = []\n        for k in range(n_pairs):\n            circuit.Q.append(\n                split_4_sized_object_into_tuple_of_2_size(\n                    vars.get(f\"original_Q{k}\", None)\n                )\n            )\n            circuit.yInv.append(vars[f\"yInv_{k}\"])\n            circuit.xNegOverY.append(vars[f\"xNegOverY_{k}\"])\n            current_points.append(\n                split_4_sized_object_into_tuple_of_2_size(vars.get(f\"Q_{k}\", None))\n            )\n\n        Mi = vars[\"Mi\"]\n\n        lines = circuit._bn254_finalize_step(current_points)\n\n        for l in lines:\n            (l1r0, l1r1), (l2r0, l2r1) = l\n\n            l1_eval = circuit.eval_tower_line(\n                l1r0 + l1r1, circuit.yInv[k], circuit.xNegOverY[k]\n            )\n            l2_eval = circuit.eval_tower_line(\n                l2r0 + l2r1, circuit.yInv[k], circuit.xNegOverY[k]\n            )\n\n            ll = circuit.mul_line_by_line_tower(l1_eval, l2_eval)\n\n            ll_full = ll + [\n                circuit.set_or_get_constant(0),\n                circuit.set_or_get_constant(0),\n            ]\n\n            Mi = circuit.fp12_mul(Mi, ll_full)\n\n        circuit.extend_struct_output(structs.E12T(\"Mi\", elmts=Mi))\n        return circuit\n\n\nclass E12TMulCircuit(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\"e12t_mul\", curve_id, auto_run, init_hash, compilation_mode)\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(12)])  # X\n        input.extend([self.field.random() for _ in range(12)])  # Y\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> MillerTowerCircuit:\n        circuit = MillerTowerCircuit(self.name, self.curve_id, n_pairs=None)\n        X = circuit.write_struct(\n            structs.E12T(\"X\", elmts=[input.pop(0) for _ in range(12)])\n        )\n        Y = circuit.write_struct(\n            structs.E12T(\"Y\", elmts=[input.pop(0) for _ in range(12)])\n        )\n        res = circuit.fp12_mul(X, Y)\n        circuit.extend_struct_output(structs.E12T(\"res\", elmts=res))\n\n        return circuit\n\n\nclass FP6NegCircuit(BaseModuloCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ):\n        super().__init__(\"fp6_neg\", curve_id, auto_run, compilation_mode)\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(6)])\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ModuloCircuit(\n            self.name,\n            self.curve_id,\n            generic_circuit=True,\n            compilation_mode=self.compilation_mode,\n        )\n\n        fp6 = [\n            circuit.write_struct(structs.u384(name=\"b0a0\", elmts=[input.pop(0)])),\n            circuit.write_struct(structs.u384(name=\"b0a1\", elmts=[input.pop(0)])),\n            circuit.write_struct(structs.u384(name=\"b1a0\", elmts=[input.pop(0)])),\n            circuit.write_struct(structs.u384(name=\"b1a1\", elmts=[input.pop(0)])),\n            circuit.write_struct(structs.u384(name=\"b2a0\", elmts=[input.pop(0)])),\n            circuit.write_struct(structs.u384(name=\"b2a1\", elmts=[input.pop(0)])),\n        ]\n\n        res = [circuit.neg(fp6[i]) for i in range(6)]\n\n        circuit.extend_struct_output(structs.u384(name=\"r0\", elmts=[res[0]]))\n        circuit.extend_struct_output(structs.u384(name=\"r1\", elmts=[res[1]]))\n        circuit.extend_struct_output(structs.u384(name=\"r2\", elmts=[res[2]]))\n        circuit.extend_struct_output(structs.u384(name=\"r3\", elmts=[res[3]]))\n        circuit.extend_struct_output(structs.u384(name=\"r4\", elmts=[res[4]]))\n        circuit.extend_struct_output(structs.u384(name=\"r5\", elmts=[res[5]]))\n\n        return circuit\n\n\nclass E12TInverseCircuit(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            \"e12t_inverse\", curve_id, auto_run, init_hash, compilation_mode\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(12)])  # M\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = MillerTowerCircuit(self.name, self.curve_id, n_pairs=None)\n        M = circuit.write_struct(\n            structs.E12T(\"M\", elmts=[input.pop(0) for _ in range(12)])\n        )\n        res = circuit.fp12_inverse(M)\n        circuit.extend_struct_output(structs.E12T(\"res\", elmts=res))\n\n        return circuit\n\n\nclass E12TFrobeniusCircuit(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 1,\n    ):\n        super().__init__(\n            \"e12t_frobenius\", curve_id, auto_run, init_hash, compilation_mode\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(12)])  # M\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = MillerTowerCircuit(self.name, self.curve_id, n_pairs=None)\n        M = circuit.write_struct(\n            structs.E12T(\"M\", elmts=[input.pop(0) for _ in range(12)])\n        )\n        res = circuit.fp12_frob(M)\n        circuit.extend_struct_output(structs.E12T(\"res\", elmts=res))\n\n        return circuit\n\n\nclass E12TFrobeniusSquareCircuit(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            \"e12t_frobenius_square\", curve_id, auto_run, init_hash, compilation_mode\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(12)])  # M\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = MillerTowerCircuit(self.name, self.curve_id, n_pairs=None)\n        M = circuit.write_struct(\n            structs.E12T(\"M\", elmts=[input.pop(0) for _ in range(12)])\n        )\n        res = circuit.fp12_frob_square(M)\n        circuit.extend_struct_output(structs.E12T(\"res\", elmts=res))\n\n        return circuit\n\n\nclass E12TFrobeniusCubeCircuit(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            \"e12t_frobenius_cube\", curve_id, auto_run, init_hash, compilation_mode\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(12)])  # M\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = MillerTowerCircuit(self.name, self.curve_id, n_pairs=None)\n        M = circuit.write_struct(\n            structs.E12T(\"M\", elmts=[input.pop(0) for _ in range(12)])\n        )\n        res = circuit.fp12_frob_cube(M)\n        circuit.extend_struct_output(structs.E12T(\"res\", elmts=res))\n\n        return circuit\n\n\nclass E12TCyclotomicSquareCircuit(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            \"e12t_cyclotomic_square\", curve_id, auto_run, init_hash, compilation_mode\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(12)])  # M\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = MillerTowerCircuit(self.name, self.curve_id, n_pairs=None)\n        M = circuit.write_struct(\n            structs.E12T(\"M\", elmts=[input.pop(0) for _ in range(12)])\n        )\n        res = circuit.fp12_cyclotomic_square(M)\n        circuit.extend_struct_output(structs.E12T(\"res\", elmts=res))\n\n        return circuit\n\n\nclass E12TCyclotomicSquareCompressedCircuit(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            \"e12t_cyclo_square_compressed\",\n            curve_id,\n            auto_run,\n            init_hash,\n            compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(8)])\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = MillerTowerCircuit(self.name, self.curve_id, n_pairs=None)\n        xc0b1a0 = circuit.write_struct(\n            structs.u384(name=\"xc0b1a0\", elmts=[input.pop(0)])\n        )\n        xc0b1a1 = circuit.write_struct(\n            structs.u384(name=\"xc0b1a1\", elmts=[input.pop(0)])\n        )\n        xc0b2a0 = circuit.write_struct(\n            structs.u384(name=\"xc0b2a0\", elmts=[input.pop(0)])\n        )\n        xc0b2a1 = circuit.write_struct(\n            structs.u384(name=\"xc0b2a1\", elmts=[input.pop(0)])\n        )\n        xc1b0a0 = circuit.write_struct(\n            structs.u384(name=\"xc1b0a0\", elmts=[input.pop(0)])\n        )\n        xc1b0a1 = circuit.write_struct(\n            structs.u384(name=\"xc1b0a1\", elmts=[input.pop(0)])\n        )\n        xc1b2a0 = circuit.write_struct(\n            structs.u384(name=\"xc1b2a0\", elmts=[input.pop(0)])\n        )\n        xc1b2a1 = circuit.write_struct(\n            structs.u384(name=\"xc1b2a1\", elmts=[input.pop(0)])\n        )\n        res = circuit.fp12_cyclotomic_square_compressed(\n            [xc0b1a0, xc0b1a1],\n            [xc0b2a0, xc0b2a1],\n            [xc1b0a0, xc1b0a1],\n            [xc1b2a0, xc1b2a1],\n        )\n        assert len(res) == 8\n        circuit.extend_struct_output(structs.u384(name=\"xc0b1a0\", elmts=[res[0]]))\n        circuit.extend_struct_output(structs.u384(name=\"xc0b1a1\", elmts=[res[1]]))\n        circuit.extend_struct_output(structs.u384(name=\"xc0b2a0\", elmts=[res[2]]))\n        circuit.extend_struct_output(structs.u384(name=\"xc0b2a1\", elmts=[res[3]]))\n        circuit.extend_struct_output(structs.u384(name=\"xc1b0a0\", elmts=[res[4]]))\n        circuit.extend_struct_output(structs.u384(name=\"xc1b0a1\", elmts=[res[5]]))\n        circuit.extend_struct_output(structs.u384(name=\"xc1b2a0\", elmts=[res[6]]))\n        circuit.extend_struct_output(structs.u384(name=\"xc1b2a1\", elmts=[res[7]]))\n\n        return circuit\n\n\nclass E12TDecompressKarabinaPtIZCircuit(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            \"e12t_decomp_karabina_I_Z\", curve_id, auto_run, init_hash, compilation_mode\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(4)])\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = MillerTowerCircuit(self.name, self.curve_id, n_pairs=None)\n        xc0b1a0 = circuit.write_struct(\n            structs.u384(name=\"xc0b1a0\", elmts=[input.pop(0)])\n        )\n        xc0b1a1 = circuit.write_struct(\n            structs.u384(name=\"xc0b1a1\", elmts=[input.pop(0)])\n        )\n        xc1b2a0 = circuit.write_struct(\n            structs.u384(name=\"xc1b2a0\", elmts=[input.pop(0)])\n        )\n        xc1b2a1 = circuit.write_struct(\n            structs.u384(name=\"xc1b2a1\", elmts=[input.pop(0)])\n        )\n        res = circuit.fp12_decompress_karabina_pt_I_c1b2_Z(\n            [xc0b1a0, xc0b1a1], [xc1b2a0, xc1b2a1]\n        )\n        circuit.extend_struct_output(structs.u384(name=\"res0\", elmts=[res[0]]))\n        circuit.extend_struct_output(structs.u384(name=\"res1\", elmts=[res[1]]))\n\n        return circuit\n\n\nclass E12TDecompressKarabinaPtINZCircuit(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            \"e12t_decomp_karabina_I_NZ\", curve_id, auto_run, init_hash, compilation_mode\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(8)])\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = MillerTowerCircuit(self.name, self.curve_id, n_pairs=None)\n        xc0b1a0 = circuit.write_struct(\n            structs.u384(name=\"xc0b1a0\", elmts=[input.pop(0)])\n        )\n        xc0b1a1 = circuit.write_struct(\n            structs.u384(name=\"xc0b1a1\", elmts=[input.pop(0)])\n        )\n        xc0b2a0 = circuit.write_struct(\n            structs.u384(name=\"xc0b2a0\", elmts=[input.pop(0)])\n        )\n        xc0b2a1 = circuit.write_struct(\n            structs.u384(name=\"xc0b2a1\", elmts=[input.pop(0)])\n        )\n        xc1b0a0 = circuit.write_struct(\n            structs.u384(name=\"xc1b0a0\", elmts=[input.pop(0)])\n        )\n        xc1b0a1 = circuit.write_struct(\n            structs.u384(name=\"xc1b0a1\", elmts=[input.pop(0)])\n        )\n        xc1b2a0 = circuit.write_struct(\n            structs.u384(name=\"xc1b2a0\", elmts=[input.pop(0)])\n        )\n        xc1b2a1 = circuit.write_struct(\n            structs.u384(name=\"xc1b2a1\", elmts=[input.pop(0)])\n        )\n\n        t0, t1 = circuit.fp12_decompress_karabina_pt_I_c1b2_NZ(\n            [xc0b1a0, xc0b1a1],\n            [xc0b2a0, xc0b2a1],\n            [xc1b0a0, xc1b0a1],\n            [xc1b2a0, xc1b2a1],\n        )\n        circuit.extend_struct_output(structs.u384(name=\"t0a0\", elmts=[t0[0]]))\n        circuit.extend_struct_output(structs.u384(name=\"t0a1\", elmts=[t0[1]]))\n        circuit.extend_struct_output(structs.u384(name=\"t1a0\", elmts=[t1[0]]))\n        circuit.extend_struct_output(structs.u384(name=\"t1a1\", elmts=[t1[1]]))\n\n        return circuit\n\n\nclass E12TDecompressKarabinaPtIICircuit(BaseEXTFCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            \"e12t_decomp_karabina_II\", curve_id, auto_run, init_hash, compilation_mode\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(12)])\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = MillerTowerCircuit(self.name, self.curve_id, n_pairs=None)\n        t0a0 = circuit.write_struct(structs.u384(name=\"t0a0\", elmts=[input.pop(0)]))\n        t0a1 = circuit.write_struct(structs.u384(name=\"t0a1\", elmts=[input.pop(0)]))\n        t1a0 = circuit.write_struct(structs.u384(name=\"t1a0\", elmts=[input.pop(0)]))\n        t1a1 = circuit.write_struct(structs.u384(name=\"t1a1\", elmts=[input.pop(0)]))\n        xc0b1a0 = circuit.write_struct(\n            structs.u384(name=\"xc0b1a0\", elmts=[input.pop(0)])\n        )\n        xc0b1a1 = circuit.write_struct(\n            structs.u384(name=\"xc0b1a1\", elmts=[input.pop(0)])\n        )\n        xc0b2a0 = circuit.write_struct(\n            structs.u384(name=\"xc0b2a0\", elmts=[input.pop(0)])\n        )\n        xc0b2a1 = circuit.write_struct(\n            structs.u384(name=\"xc0b2a1\", elmts=[input.pop(0)])\n        )\n        xc1b0a0 = circuit.write_struct(\n            structs.u384(name=\"xc1b0a0\", elmts=[input.pop(0)])\n        )\n        xc1b0a1 = circuit.write_struct(\n            structs.u384(name=\"xc1b0a1\", elmts=[input.pop(0)])\n        )\n        xc1b2a0 = circuit.write_struct(\n            structs.u384(name=\"xc1b2a0\", elmts=[input.pop(0)])\n        )\n        xc1b2a1 = circuit.write_struct(\n            structs.u384(name=\"xc1b2a1\", elmts=[input.pop(0)])\n        )\n\n        zc0b0, zc1b1 = circuit.fp12_decompress_karabina_pt_II(\n            [t0a0, t0a1],\n            [t1a0, t1a1],\n            [xc0b1a0, xc0b1a1],\n            [xc0b2a0, xc0b2a1],\n            [xc1b0a0, xc1b0a1],\n            [xc1b2a0, xc1b2a1],\n        )\n        circuit.extend_struct_output(structs.u384(name=\"zc0b0a0\", elmts=[zc0b0[0]]))\n        circuit.extend_struct_output(structs.u384(name=\"zc0b0a1\", elmts=[zc0b0[1]]))\n        circuit.extend_struct_output(structs.u384(name=\"zc1b1a0\", elmts=[zc1b1[0]]))\n        circuit.extend_struct_output(structs.u384(name=\"zc1b1a1\", elmts=[zc1b1[1]]))\n\n        return circuit\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/compilable_circuits/common_cairo_fustat_circuits.py",
    "content": "from random import randint\n\nimport garaga.modulo_circuit_structs as structs\nfrom garaga.curves import CURVES, CurveID\nfrom garaga.hints import neg_3\nfrom garaga.hints.ecip import (\n    n_coeffs_from_n_points,\n    n_points_from_n_coeffs,\n    slope_intercept,\n)\nfrom garaga.modulo_circuit import WriteOps\nfrom garaga.modulo_circuit_structs import G1PointCircuit, G2PointCircuit, u384\nfrom garaga.points import G1Point, G2Point\nfrom garaga.precompiled_circuits.cofactor_clearing import G1CofactorClearing\nfrom garaga.precompiled_circuits.compilable_circuits.base import (\n    BaseModuloCircuit,\n    ModuloCircuit,\n    PyFelt,\n)\nfrom garaga.precompiled_circuits.ec import (\n    BasicEC,\n    BasicECG2,\n    ECIPCircuits,\n    FakeGLVCircuits,\n    IsOnCurveCircuit,\n)\n\n\nclass DummyCircuit(BaseModuloCircuit):\n    def __init__(\n        self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0\n    ) -> None:\n        super().__init__(\n            name=\"dummy\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        return [self.field(44), self.field(4)]\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ModuloCircuit(\n            self.name,\n            self.curve_id,\n            generic_circuit=True,\n            compilation_mode=self.compilation_mode,\n        )\n        x, y = circuit.write_elements(input, WriteOps.INPUT)\n        r = circuit.sub(x, y)  # 40\n        z = circuit.div(x, y)  # 4\n        c = circuit.add(r, z)  # 44\n        d = circuit.sub(r, z)  # 36\n        e = circuit.mul(r, z)  # 120\n        f = circuit.div(r, z)  # 8\n        circuit.extend_output([r, z, c, d, e, f])\n\n        return circuit\n\n\nclass IsOnCurveG1G2Circuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"is_on_curve_g1_g2\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        curve_id = CurveID(self.curve_id)\n        order = CURVES[self.curve_id].n\n        input = []\n        n1, n2 = randint(1, order), randint(1, order)\n        p1, p2 = G1Point.get_nG(curve_id, n1), G2Point.get_nG(curve_id, n2)\n        pair = [p1.x, p1.y, p2.x[0], p2.x[1], p2.y[0], p2.y[1]]\n        input.extend([self.field(x) for x in pair])\n        input.append(self.field(CURVES[self.curve_id].a))\n        input.append(self.field(CURVES[self.curve_id].b))\n        input.append(self.field(CURVES[self.curve_id].b20))\n        input.append(self.field(CURVES[self.curve_id].b21))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit: IsOnCurveCircuit = IsOnCurveCircuit(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        assert len(input) == 6 + 4, f\"got {input} of len {len(input)}\"\n        p = circuit.write_struct(G1PointCircuit(\"p\", input[0:2]), WriteOps.INPUT)\n        q = circuit.write_struct(G2PointCircuit(\"q\", input[2:6]), WriteOps.INPUT)\n        a = circuit.write_struct(u384(\"a\", [input[6]]), WriteOps.INPUT)\n        b = circuit.write_struct(u384(\"b\", [input[7]]), WriteOps.INPUT)\n        b20 = circuit.write_struct(u384(\"b20\", [input[8]]), WriteOps.INPUT)\n        b21 = circuit.write_struct(u384(\"b21\", [input[9]]), WriteOps.INPUT)\n\n        circuit.set_consts(a, b, b20, b21)\n        lhs, rhs = circuit._is_on_curve_G1(*p)\n        lhs2, rhs2 = circuit._is_on_curve_G2(*q)\n        zero_check = circuit.sub(lhs, rhs)\n        zero_check_2 = [circuit.sub(lhs2[0], rhs2[0]), circuit.sub(lhs2[1], rhs2[1])]\n\n        circuit.extend_struct_output(u384(\"zero_check_0\", [zero_check]))\n        circuit.extend_struct_output(u384(\"zero_check_1\", [zero_check_2[0]]))\n        circuit.extend_struct_output(u384(\"zero_check_2\", [zero_check_2[1]]))\n\n        return circuit\n\n\nclass IsOnCurveG1Circuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"is_on_curve_g1\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        random_point = G1Point.gen_random_point(CurveID(self.curve_id))\n        input.append(self.field(random_point.x))\n        input.append(self.field(random_point.y))\n        input.append(self.field(CURVES[self.curve_id].a))\n        input.append(self.field(CURVES[self.curve_id].b))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = BasicEC(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        px, py = circuit.write_struct(G1PointCircuit(\"p\", input[0:2]), WriteOps.INPUT)\n        a = circuit.write_struct(u384(\"a\", [input[2]]), WriteOps.INPUT)\n        b = circuit.write_struct(u384(\"b\", [input[3]]), WriteOps.INPUT)\n\n        lhs, rhs = circuit._is_on_curve_G1_weirstrass(px, py, a, b)\n        zero_check = circuit.sub(lhs, rhs)\n        circuit.extend_struct_output(u384(\"zero_check\", [zero_check]))\n\n        return circuit\n\n\nclass IsOnCurveG2Circuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"is_on_curve_g2\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        random_point = G2Point.gen_random_point(CurveID(self.curve_id))\n        input.append(self.field(random_point.x[0]))\n        input.append(self.field(random_point.x[1]))\n        input.append(self.field(random_point.y[0]))\n        input.append(self.field(random_point.y[1]))\n        input.append(self.field(CURVES[self.curve_id].a))\n        input.append(self.field(CURVES[self.curve_id].b20))\n        input.append(self.field(CURVES[self.curve_id].b21))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = BasicECG2(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        x0, x1, y0, y1 = circuit.write_struct(\n            G2PointCircuit(\"p\", input[0:4]), WriteOps.INPUT\n        )\n        a = circuit.write_struct(u384(\"a\", [input[4]]), WriteOps.INPUT)\n        b20 = circuit.write_struct(u384(\"b20\", [input[5]]), WriteOps.INPUT)\n        b21 = circuit.write_struct(u384(\"b21\", [input[6]]), WriteOps.INPUT)\n\n        lhs, rhs = circuit._is_on_curve_G2_weirstrass(x0, x1, y0, y1, a, b20, b21)\n        zero_check = [circuit.sub(lhs[0], rhs[0]), circuit.sub(lhs[1], rhs[1])]\n        circuit.extend_struct_output(u384(\"zero_check_0\", [zero_check[0]]))\n        circuit.extend_struct_output(u384(\"zero_check_1\", [zero_check[1]]))\n\n        return circuit\n\n\nclass AddECPointsG2Circuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"add_ec_points_g2\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        P = G2Point.gen_random_point(CurveID(self.curve_id))\n        Q = G2Point.gen_random_point(CurveID(self.curve_id))\n        input.append(self.field(P.x[0]))\n        input.append(self.field(P.x[1]))\n        input.append(self.field(P.y[0]))\n        input.append(self.field(P.y[1]))\n        input.append(self.field(Q.x[0]))\n        input.append(self.field(Q.x[1]))\n        input.append(self.field(Q.y[0]))\n        input.append(self.field(Q.y[1]))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = BasicECG2(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        circuit.generic_modulus = True\n        px0, px1, py0, py1 = circuit.write_struct(\n            G2PointCircuit(\"p\", input[0:4]), WriteOps.INPUT\n        )\n        qx0, qx1, qy0, qy1 = circuit.write_struct(\n            G2PointCircuit(\"q\", input[4:8]), WriteOps.INPUT\n        )\n\n        (nx0, nx1), (ny0, ny1) = circuit.add_points(\n            ((px0, px1), (py0, py1)), ((qx0, qx1), (qy0, qy1))\n        )\n        circuit.extend_struct_output(G2PointCircuit(\"result\", [nx0, nx1, ny0, ny1]))\n\n        return circuit\n\n\nclass DoubleECPointG2AEq0Circuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"double_ec_point_g2_a_eq_0\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        P = G2Point.gen_random_point(CurveID(self.curve_id))\n        input.append(self.field(P.x[0]))\n        input.append(self.field(P.x[1]))\n        input.append(self.field(P.y[0]))\n        input.append(self.field(P.y[1]))\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = BasicECG2(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        circuit.generic_modulus = True\n        px0, px1, py0, py1 = circuit.write_struct(\n            G2PointCircuit(\"p\", input[0:4]), WriteOps.INPUT\n        )\n\n        (nx0, nx1), (ny0, ny1) = circuit.double_point_a_eq_0(((px0, px1), (py0, py1)))\n        circuit.extend_struct_output(G2PointCircuit(\"result\", [nx0, nx1, ny0, ny1]))\n\n        return circuit\n\n\nclass DoubleAndAddECPointsG2Circuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"double_and_add_ec_points_g2\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        P = G2Point.gen_random_point(CurveID(self.curve_id))\n        Q = G2Point.gen_random_point(CurveID(self.curve_id))\n        input.append(self.field(P.x[0]))\n        input.append(self.field(P.x[1]))\n        input.append(self.field(P.y[0]))\n        input.append(self.field(P.y[1]))\n        input.append(self.field(Q.x[0]))\n        input.append(self.field(Q.x[1]))\n        input.append(self.field(Q.y[0]))\n        input.append(self.field(Q.y[1]))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = BasicECG2(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        circuit.generic_modulus = True\n        px0, px1, py0, py1 = circuit.write_struct(\n            G2PointCircuit(\"p\", input[0:4]), WriteOps.INPUT\n        )\n        qx0, qx1, qy0, qy1 = circuit.write_struct(\n            G2PointCircuit(\"q\", input[4:8]), WriteOps.INPUT\n        )\n\n        (nx0, nx1), (ny0, ny1) = circuit.double_and_add(\n            ((px0, px1), (py0, py1)), ((qx0, qx1), (qy0, qy1))\n        )\n        circuit.extend_struct_output(G2PointCircuit(\"result\", [nx0, nx1, ny0, ny1]))\n\n        return circuit\n\n\nclass PsiG2BLS12_381Circuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"psi_g2_bls12_381\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        P = G2Point.gen_random_point(CurveID(self.curve_id))\n        input.append(self.field(P.x[0]))\n        input.append(self.field(P.x[1]))\n        input.append(self.field(P.y[0]))\n        input.append(self.field(P.y[1]))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = BasicECG2(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        circuit.generic_modulus = True\n        px0, px1, py0, py1 = circuit.write_struct(\n            G2PointCircuit(\"p\", input[0:4]), WriteOps.INPUT\n        )\n        # https://github.com/Consensys/gnark/blob/9ed0eab21e8935cb180d1f75713cd2c29c91a3c9/std/algebra/emulated/sw_bls12381/g2.go\n        u1 = circuit.set_or_get_constant(\n            0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD\n        )\n        v0 = circuit.set_or_get_constant(\n            0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2\n        )\n        v1 = circuit.set_or_get_constant(\n            0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09\n        )\n\n        psi_Qx = (circuit.mul(px1, u1), circuit.mul(px0, u1))\n        psi_Qy = circuit.fp2_mul([py0, circuit.neg(py1)], [v0, v1])\n\n        circuit.extend_struct_output(\n            G2PointCircuit(\"result\", [psi_Qx[0], psi_Qx[1], psi_Qy[0], psi_Qy[1]])\n        )\n\n        return circuit\n\n\nclass SlopeInterceptSamePointCircuit(BaseModuloCircuit):\n    def __init__(\n        self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0\n    ) -> None:\n        super().__init__(\n            name=\"slope_intercept_same_point\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        random_point = G1Point.gen_random_point(CurveID(self.curve_id))\n        input.append(self.field(random_point.x))\n        input.append(self.field(random_point.y))\n        input.append(self.field(CURVES[self.curve_id].a))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ECIPCircuits(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        px, py = circuit.write_struct(G1PointCircuit(\"p\", input[0:2]), WriteOps.INPUT)\n        a = circuit.write_struct(u384(\"a\", [input[2]]), WriteOps.INPUT)\n        m_A0, b_A0, xA0, yA0, xA2, yA2, coeff0, coeff2 = (\n            circuit._slope_intercept_same_point((px, py), a)\n        )\n        if self.compilation_mode == 0:\n            # In Cairo0, xA0 and yA0 are copied from the input\n            circuit.extend_output([m_A0, b_A0, xA0, yA0, xA2, yA2, coeff0, coeff2])\n        else:\n            # In Cairo1, xA0 and yA0 are not copied from the input\n            circuit.extend_struct_output(\n                structs.SlopeInterceptOutput(\n                    \"mb\", [m_A0, b_A0, xA2, yA2, coeff0, coeff2]\n                )\n            )\n\n        return circuit\n\n\nclass AccumulateEvalPointChallengeSignedCircuit(BaseModuloCircuit):\n    def __init__(\n        self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0\n    ) -> None:\n        super().__init__(\n            name=\"acc_eval_point_challenge_signed\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        A0 = G1Point.gen_random_point(CurveID(self.curve_id))\n        m_A0, b_A0 = slope_intercept(A0, A0)\n        input = []\n        random_point = G1Point.gen_random_point(CurveID(self.curve_id))\n        scalar = randint(0, 2**127)\n        ep, en = neg_3.positive_negative_multiplicities(neg_3.neg_3_base_le(scalar))\n        input.append(self.field(randint(0, CURVES[self.curve_id].p - 1)))\n        input.append(self.field(m_A0.value))\n        input.append(self.field(b_A0.value))\n        input.append(self.field(A0.x))\n        input.append(self.field(random_point.x))\n        input.append(self.field(random_point.y))\n        input.append(self.field(abs(ep)))\n        input.append(self.field(abs(en)))\n        input.append(self.field(1 if ep >= 0 else -1))\n        input.append(self.field(1 if en >= 0 else -1))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ECIPCircuits(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        # acc, m, b, xA, px, py, ep, en, sp, sn = circuit.write_elements(\n        #     input[0:10], WriteOps.INPUT\n        # )\n        acc, m, b, xA = (\n            circuit.write_struct(u384(\"acc\", [input[0]]), WriteOps.INPUT),\n            circuit.write_struct(u384(\"m\", [input[1]]), WriteOps.INPUT),\n            circuit.write_struct(u384(\"b\", [input[2]]), WriteOps.INPUT),\n            circuit.write_struct(u384(\"xA\", [input[3]]), WriteOps.INPUT),\n        )\n        px, py = circuit.write_struct(G1PointCircuit(\"p\", input[4:6]), WriteOps.INPUT)\n        ep = circuit.write_struct(u384(\"ep\", [input[6]]), WriteOps.INPUT)\n        en = circuit.write_struct(u384(\"en\", [input[7]]), WriteOps.INPUT)\n        sp = circuit.write_struct(u384(\"sp\", [input[8]]), WriteOps.INPUT)\n        sn = circuit.write_struct(u384(\"sn\", [input[9]]), WriteOps.INPUT)\n\n        res_acc = circuit._accumulate_eval_point_challenge_signed_same_point(\n            acc, (m, b), xA, (px, py), ep, en, sp, sn\n        )\n        circuit.extend_struct_output(u384(\"res_acc\", [res_acc]))\n\n        return circuit\n\n\nclass RHSFinalizeAccCircuit(BaseModuloCircuit):\n    def __init__(\n        self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0\n    ) -> None:\n        super().__init__(\n            name=\"rhs_finalize_acc\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        A0 = G1Point.gen_random_point(CurveID(self.curve_id))\n        m_A0, b_A0 = slope_intercept(A0, A0)\n        input = []\n        Q = G1Point.gen_random_point(CurveID(self.curve_id))\n        input.append(self.field(randint(0, CURVES[self.curve_id].p - 1)))\n        input.append(self.field(m_A0.value))\n        input.append(self.field(b_A0.value))\n        input.append(self.field(A0.x))\n        input.append(self.field(Q.x))\n        input.append(self.field(Q.y))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ECIPCircuits(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        # acc, m, b, xA, Qx, Qy = circuit.write_elements(input[0:6], WriteOps.INPUT)\n        acc, m, b, xA = (\n            circuit.write_struct(u384(\"acc\", [input[0]]), WriteOps.INPUT),\n            circuit.write_struct(u384(\"m\", [input[1]]), WriteOps.INPUT),\n            circuit.write_struct(u384(\"b\", [input[2]]), WriteOps.INPUT),\n            circuit.write_struct(u384(\"xA\", [input[3]]), WriteOps.INPUT),\n        )\n        Qx, Qy = circuit.write_struct(\n            G1PointCircuit(\"Q_result\", input[4:6]), WriteOps.INPUT\n        )\n        res_acc = circuit._RHS_finalize_acc(acc, (m, b), xA, (Qx, Qy))\n        circuit.extend_struct_output(u384(\"rhs\", [res_acc]))\n\n        return circuit\n\n\nclass EvalFunctionChallengeSingleCircuit(BaseModuloCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        n_points: int = 1,\n        auto_run: bool = True,\n        compilation_mode: int = 0,\n        batched: bool = False,\n        generic_circuit: bool = True,\n    ) -> None:\n        self.n_points = n_points\n        self.batched = batched\n        self.generic_circuit = generic_circuit\n        super().__init__(\n            name=f\"eval_fn_challenge_sing_{n_points}P\" + (\"_rlc\" if batched else \"\"),\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        circuit = SlopeInterceptSamePointCircuit(self.curve_id, auto_run=False)\n        xA, _yA, _A = circuit.build_input()\n        m_A0, b_A0, xA0, yA0, xA2, yA2, coeff0, coeff2 = circuit._run_circuit_inner(\n            [xA, _yA, _A]\n        ).output\n        input.extend([xA0.felt, _yA.felt, coeff0.felt])\n        n_coeffs = n_coeffs_from_n_points(self.n_points, self.batched)\n        for _ in range(sum(n_coeffs)):\n            input.append(self.field(randint(0, CURVES[self.curve_id].p - 1)))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ECIPCircuits(\n            self.name,\n            self.curve_id,\n            compilation_mode=self.compilation_mode,\n            generic_circuit=self.generic_circuit,\n        )\n\n        xA0, yA0 = circuit.write_struct(\n            G1PointCircuit(\"A\", [input[0], input[1]]), WriteOps.INPUT\n        )\n        coeff0 = circuit.write_struct(u384(\"coeff\", [input[2]]), WriteOps.INPUT)\n\n        all_coeffs = input[3:]\n\n        def split_list(input_list, lengths):\n            start_idx, result = 0, []\n            for length in lengths:\n                result.append(input_list[start_idx : start_idx + length])\n                start_idx += length\n            return result\n\n        n_points = n_points_from_n_coeffs(len(all_coeffs), self.batched)\n        _log_div_a_num, _log_div_a_den, _log_div_b_num, _log_div_b_den = split_list(\n            all_coeffs, n_coeffs_from_n_points(n_points, self.batched)\n        )\n        log_div_a_num, log_div_a_den, log_div_b_num, log_div_b_den = (\n            circuit.write_struct(\n                structs.FunctionFeltCircuit(\n                    name=\"SumDlogDiv\" + (\"Batched\" if self.batched else \"\"),\n                    elmts=[\n                        structs.u384Span(\"log_div_a_num\", _log_div_a_num),\n                        structs.u384Span(\"log_div_a_den\", _log_div_a_den),\n                        structs.u384Span(\"log_div_b_num\", _log_div_b_num),\n                        structs.u384Span(\"log_div_b_den\", _log_div_b_den),\n                    ],\n                ),\n                WriteOps.INPUT,\n            )\n        )\n\n        res = circuit._eval_function_challenge_single(\n            (xA0, yA0),\n            coeff0,\n            log_div_a_num,\n            log_div_a_den,\n            log_div_b_num,\n            log_div_b_den,\n        )\n        circuit.extend_struct_output(u384(\"res\", [res]))\n\n        return circuit\n\n\nclass EvalFunctionChallengeDuplCircuit(BaseModuloCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        n_points: int = 1,\n        auto_run: bool = True,\n        compilation_mode: int = 0,\n        batched: bool = False,\n        generic_circuit: bool = True,\n    ) -> None:\n        self.n_points = n_points\n        self.batched = batched\n        self.generic_circuit = generic_circuit\n        super().__init__(\n            name=f\"eval_fn_challenge_dupl_{n_points}P\" + (\"_rlc\" if batched else \"\"),\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        circuit = SlopeInterceptSamePointCircuit(self.curve_id, auto_run=False)\n        xA, _yA, _A = circuit.build_input()\n        m_A0, b_A0, xA0, yA0, xA2, yA2, coeff0, coeff2 = circuit._run_circuit_inner(\n            [xA, _yA, _A]\n        ).output\n        input.extend([xA0.felt, _yA.felt, xA2.felt, yA2.felt, coeff0.felt, coeff2.felt])\n        n_coeffs = n_coeffs_from_n_points(self.n_points, self.batched)\n        for _ in range(sum(n_coeffs)):\n            input.append(self.field(randint(0, CURVES[self.curve_id].p - 1)))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ECIPCircuits(\n            self.name,\n            self.curve_id,\n            compilation_mode=self.compilation_mode,\n            generic_circuit=self.generic_circuit,\n        )\n\n        xA0, yA0 = circuit.write_struct(\n            G1PointCircuit(\"A0\", [input[0], input[1]]), WriteOps.INPUT\n        )\n        xA2, yA2 = circuit.write_struct(\n            G1PointCircuit(\"A2\", [input[2], input[3]]), WriteOps.INPUT\n        )\n        coeff0 = circuit.write_struct(u384(\"coeff0\", [input[4]]), WriteOps.INPUT)\n        coeff2 = circuit.write_struct(u384(\"coeff2\", [input[5]]), WriteOps.INPUT)\n\n        all_coeffs = input[6:]\n\n        def split_list(input_list, lengths):\n            start_idx, result = 0, []\n            for length in lengths:\n                result.append(input_list[start_idx : start_idx + length])\n                start_idx += length\n            return result\n\n        n_points = n_points_from_n_coeffs(len(all_coeffs), self.batched)\n        _log_div_a_num, _log_div_a_den, _log_div_b_num, _log_div_b_den = split_list(\n            all_coeffs, n_coeffs_from_n_points(n_points, self.batched)\n        )\n        log_div_a_num, log_div_a_den, log_div_b_num, log_div_b_den = (\n            circuit.write_struct(\n                structs.FunctionFeltCircuit(\n                    name=\"SumDlogDiv\" + (\"Batched\" if self.batched else \"\"),\n                    elmts=[\n                        structs.u384Span(\"log_div_a_num\", _log_div_a_num),\n                        structs.u384Span(\"log_div_a_den\", _log_div_a_den),\n                        structs.u384Span(\"log_div_b_num\", _log_div_b_num),\n                        structs.u384Span(\"log_div_b_den\", _log_div_b_den),\n                    ],\n                ),\n                WriteOps.INPUT,\n            )\n        )\n\n        res = circuit._eval_function_challenge_dupl(\n            (xA0, yA0),\n            (xA2, yA2),\n            coeff0,\n            coeff2,\n            log_div_a_num,\n            log_div_a_den,\n            log_div_b_num,\n            log_div_b_den,\n        )\n        circuit.extend_struct_output(u384(\"res\", [res]))\n\n        return circuit\n\n\nclass InitFunctionChallengeDuplCircuit(BaseModuloCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        n_points: int = 1,\n        auto_run: bool = True,\n        batched: bool = False,\n        compilation_mode: int = 0,\n    ) -> None:\n        self.n_points = n_points\n        self.batched = batched\n        super().__init__(\n            name=f\"init_fn_challenge_dupl_{n_points}P\" + (\"_rlc\" if batched else \"\"),\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random(), self.field.random()])  # xA0, xA2\n        n_coeffs = n_coeffs_from_n_points(self.n_points, self.batched)\n        for _ in range(sum(n_coeffs)):\n            input.append(self.field(randint(0, CURVES[self.curve_id].p - 1)))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ECIPCircuits(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        xA0 = circuit.write_struct(u384(\"xA0\", [input[0]]), WriteOps.INPUT)\n        xA2 = circuit.write_struct(u384(\"xA2\", [input[1]]), WriteOps.INPUT)\n\n        all_coeffs = input[2:]\n\n        def split_list(input_list, lengths):\n            start_idx, result = 0, []\n            for length in lengths:\n                result.append(input_list[start_idx : start_idx + length])\n                start_idx += length\n            return result\n\n        n_points = n_points_from_n_coeffs(len(all_coeffs), self.batched)\n        _log_div_a_num, _log_div_a_den, _log_div_b_num, _log_div_b_den = split_list(\n            all_coeffs, n_coeffs_from_n_points(n_points, self.batched)\n        )\n\n        log_div_a_num, log_div_a_den, log_div_b_num, log_div_b_den = (\n            circuit.write_struct(\n                structs.FunctionFeltCircuit(\n                    name=\"SumDlogDiv\",\n                    elmts=[\n                        structs.u384Span(\"log_div_a_num\", _log_div_a_num),\n                        structs.u384Span(\"log_div_a_den\", _log_div_a_den),\n                        structs.u384Span(\"log_div_b_num\", _log_div_b_num),\n                        structs.u384Span(\"log_div_b_den\", _log_div_b_den),\n                    ],\n                ),\n                WriteOps.INPUT,\n            )\n        )\n\n        res = circuit._init_function_challenge_dupl(\n            xA0, xA2, log_div_a_num, log_div_a_den, log_div_b_num, log_div_b_den\n        )\n        circuit.extend_struct_output(\n            structs.FunctionFeltEvaluations(\"A0_evals\", res[0:4])\n        )\n        circuit.extend_struct_output(\n            structs.FunctionFeltEvaluations(\"A2_evals\", res[4:8])\n        )\n        circuit.extend_struct_output(u384(\"xA0_power\", [res[8]]))\n        circuit.extend_struct_output(u384(\"xA2_power\", [res[9]]))\n        return circuit\n\n\nclass AccumulateFunctionChallengeDuplCircuit(BaseModuloCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            name=\"acc_function_challenge_dupl\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend(\n            [self.field.random() for _ in range(8)]\n        )  # a_num, a_den, b_num, b_den accumulation evals * 2\n        input.extend([self.field.random(), self.field.random()])  # xA0, xA2\n        input.extend(\n            [self.field.random(), self.field.random()]\n        )  # xA0_power, xA2_power, corresponding the max degree of a_den or b_num of the previous accumulator\n        input.extend(\n            [self.field.random() for _ in range(4)]\n        )  # next coefficients of a_num, a_den, b_num, b_den\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ECIPCircuits(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n\n        f_a0_accs = circuit.write_struct(\n            structs.FunctionFeltEvaluations(\"f_a0_accs\", input[0:4]), WriteOps.INPUT\n        )\n        f_a1_accs = circuit.write_struct(\n            structs.FunctionFeltEvaluations(\"f_a1_accs\", input[4:8]), WriteOps.INPUT\n        )\n        xA0 = circuit.write_struct(u384(\"xA0\", [input[8]]), WriteOps.INPUT)\n        xA2 = circuit.write_struct(u384(\"xA2\", [input[9]]), WriteOps.INPUT)\n        xA0_power = circuit.write_struct(u384(\"xA0_power\", [input[10]]), WriteOps.INPUT)\n        xA2_power = circuit.write_struct(u384(\"xA2_power\", [input[11]]), WriteOps.INPUT)\n        next_a_num_coeff = circuit.write_struct(\n            structs.GenericT(\"next_a_num_coeff\", [input[12]]), WriteOps.INPUT\n        )\n        next_a_den_coeff = circuit.write_struct(\n            structs.GenericT(\"next_a_den_coeff\", [input[13]]), WriteOps.INPUT\n        )\n        next_b_num_coeff = circuit.write_struct(\n            structs.GenericT(\"next_b_num_coeff\", [input[14]]), WriteOps.INPUT\n        )\n        next_b_den_coeff = circuit.write_struct(\n            structs.GenericT(\"next_b_den_coeff\", [input[15]]), WriteOps.INPUT\n        )\n\n        res = circuit._accumulate_function_challenge_dupl(\n            *f_a0_accs,\n            *f_a1_accs,\n            xA0,\n            xA2,\n            xA0_power,\n            xA2_power,\n            next_a_num_coeff,\n            next_a_den_coeff,\n            next_b_num_coeff,\n            next_b_den_coeff,\n        )\n\n        circuit.extend_struct_output(\n            structs.FunctionFeltEvaluations(\"next_f_a0_accs\", res[0:4])\n        )\n        circuit.extend_struct_output(\n            structs.FunctionFeltEvaluations(\"next_f_a1_accs\", res[4:8])\n        )\n        circuit.extend_struct_output(u384(\"next_xA0_power\", [res[8]]))\n        circuit.extend_struct_output(u384(\"next_xA2_power\", [res[9]]))\n        return circuit\n\n\nclass FinalizeFunctionChallengeDuplCircuit(BaseModuloCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            name=\"finalize_fn_challenge_dupl\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.extend([self.field.random() for _ in range(8)])  # f_a0_accs, f_a1_accs\n        input.extend([self.field.random() for _ in range(2)])  # yA0, yA2\n        input.extend([self.field.random() for _ in range(2)])  # coeff_A0, coeff_A2\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ECIPCircuits(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        f_a0_accs = circuit.write_struct(\n            structs.FunctionFeltEvaluations(\"f_a0_accs\", input[0:4]), WriteOps.INPUT\n        )\n        f_a1_accs = circuit.write_struct(\n            structs.FunctionFeltEvaluations(\"f_a1_accs\", input[4:8]), WriteOps.INPUT\n        )\n        yA0 = circuit.write_struct(u384(\"yA0\", [input[8]]), WriteOps.INPUT)\n        yA2 = circuit.write_struct(u384(\"yA2\", [input[9]]), WriteOps.INPUT)\n        coeff_A0 = circuit.write_struct(u384(\"coeff_A0\", [input[10]]), WriteOps.INPUT)\n        coeff_A2 = circuit.write_struct(u384(\"coeff_A2\", [input[11]]), WriteOps.INPUT)\n\n        res = circuit._finalize_function_challenge_dupl(\n            *f_a0_accs, *f_a1_accs, yA0, yA2, coeff_A0, coeff_A2\n        )\n\n        circuit.extend_struct_output(u384(\"res\", [res]))\n        return circuit\n\n\nclass AddECPointCircuit(BaseModuloCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            name=\"add_ec_point\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        P = G1Point.gen_random_point(CurveID(self.curve_id))\n        Q = G1Point.gen_random_point(CurveID(self.curve_id))\n        input.append(self.field(P.x))\n        input.append(self.field(P.y))\n        input.append(self.field(Q.x))\n        input.append(self.field(Q.y))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = BasicEC(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        circuit.generic_modulus = True\n        xP, yP = circuit.write_struct(G1PointCircuit(\"p\", input[0:2]), WriteOps.INPUT)\n        xQ, yQ = circuit.write_struct(G1PointCircuit(\"q\", input[2:4]), WriteOps.INPUT)\n        xR, yR = circuit.add_points((xP, yP), (xQ, yQ))\n        circuit.extend_struct_output(G1PointCircuit(\"r\", [xR, yR]))\n\n        return circuit\n\n\nclass DoubleECPointCircuit(BaseModuloCircuit):\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            name=\"double_ec_point\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        P = G1Point.gen_random_point(CurveID(self.curve_id))\n        input.append(self.field(P.x))\n        input.append(self.field(P.y))\n        input.append(self.field(CURVES[self.curve_id].a))\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = BasicEC(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        circuit.generic_modulus = True\n        xP, yP = circuit.write_struct(G1PointCircuit(\"p\", input[0:2]), WriteOps.INPUT)\n        A = circuit.write_struct(u384(\"A_weirstrass\", [input[2]]))\n        xR, yR = circuit.double_point((xP, yP), A)\n        circuit.extend_struct_output(G1PointCircuit(\"r\", [xR, yR]))\n\n        return circuit\n\n\nclass PrepareGLVFakeGLVPtsCircuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"prepare_glv_fake_glv_pts\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.append(self.field.random())  # Px\n        input.append(self.field.random())  # P0y\n        input.append(self.field.random())  # P1y\n        input.append(self.field.random())  # Qx\n        input.append(self.field.random())  # Q0y\n        input.append(self.field.random())  # Phi_P0y\n        input.append(self.field.random())  # Phi_P1y\n        input.append(self.field.random())  # Phi_Q0y\n        input.append(self.field.random())  # Gen_x\n        input.append(self.field.random())  # Gen_y\n        input.append(self.field.random())  # third_root\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = FakeGLVCircuits(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        circuit.generic_modulus = True\n        Px = circuit.write_struct(u384(\"Px\", [input[0]]), WriteOps.INPUT)\n        P0y = circuit.write_struct(u384(\"P0y\", [input[1]]), WriteOps.INPUT)\n        P1y = circuit.write_struct(u384(\"P1y\", [input[2]]), WriteOps.INPUT)\n        Qx = circuit.write_struct(u384(\"Qx\", [input[3]]), WriteOps.INPUT)\n        Q0y = circuit.write_struct(u384(\"Q0y\", [input[4]]), WriteOps.INPUT)\n        Phi_P0y = circuit.write_struct(u384(\"Phi_P0y\", [input[5]]), WriteOps.INPUT)\n        Phi_P1y = circuit.write_struct(u384(\"Phi_P1y\", [input[6]]), WriteOps.INPUT)\n        Phi_Q0y = circuit.write_struct(u384(\"Phi_Q0y\", [input[7]]), WriteOps.INPUT)\n        Gen = circuit.write_struct(\n            G1PointCircuit(\"Gen\", [input[8], input[9]]), WriteOps.INPUT\n        )\n        third_root = circuit.write_struct(\n            u384(\"third_root\", [input[10]]), WriteOps.INPUT\n        )\n\n        (\n            B1,\n            B2,\n            B3,\n            B4,\n            B5,\n            B6,\n            B7,\n            B8,\n            B9y,\n            B10y,\n            B11y,\n            B12y,\n            B13y,\n            B14y,\n            B15y,\n            B16y,\n            Phi_P0x,\n            Phi_Q0x,\n            Acc,\n        ) = circuit.prepare_points_glv_fake_glv(\n            Px, P0y, P1y, Qx, Q0y, Phi_P0y, Phi_P1y, Phi_Q0y, Gen, third_root\n        )\n        # circuit.exact_output_refs_needed = [B2[0], B3[0], B4[0], B5[0], B6[0], B7[0], B8[0], B10y, B11y, B12y, B13y, B14y, B15y, B16y, Acc[0], Acc[1]]\n        circuit.extend_struct_output(G1PointCircuit(\"B1\", [B1[0], B1[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"B2\", [B2[0], B2[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"B3\", [B3[0], B3[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"B4\", [B4[0], B4[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"B5\", [B5[0], B5[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"B6\", [B6[0], B6[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"B7\", [B7[0], B7[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"B8\", [B8[0], B8[1]]))\n        circuit.extend_struct_output(u384(\"B9y\", [B9y]))\n        circuit.extend_struct_output(u384(\"B10y\", [B10y]))\n        circuit.extend_struct_output(u384(\"B11y\", [B11y]))\n        circuit.extend_struct_output(u384(\"B12y\", [B12y]))\n        circuit.extend_struct_output(u384(\"B13y\", [B13y]))\n        circuit.extend_struct_output(u384(\"B14y\", [B14y]))\n        circuit.extend_struct_output(u384(\"B15y\", [B15y]))\n        circuit.extend_struct_output(u384(\"B16y\", [B16y]))\n        circuit.extend_struct_output(u384(\"Phi_P0x\", [Phi_P0x]))\n        circuit.extend_struct_output(u384(\"Phi_Q0x\", [Phi_Q0x]))\n        circuit.extend_struct_output(G1PointCircuit(\"Acc\", [Acc[0], Acc[1]]))\n        return circuit\n\n\nclass PrepareFakeGLVPtsCircuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"prepare_fake_glv_pts\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.append(self.field.random())  # Px\n        input.append(self.field.random())  # Py\n        input.append(self.field.random())  # Qx\n        input.append(self.field.random())  # Qy\n        input.append(self.field.random())  # s2_sign\n        input.append(self.field.random())  # A_weirstrass\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = FakeGLVCircuits(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        circuit.generic_modulus = True\n        P = circuit.write_struct(\n            G1PointCircuit(\"P\", [input[0], input[1]]), WriteOps.INPUT\n        )\n        Q = circuit.write_struct(\n            G1PointCircuit(\"Q\", [input[2], input[3]]), WriteOps.INPUT\n        )\n        s2_sign = circuit.write_struct(u384(\"s2_sign\", [input[4]]), WriteOps.INPUT)\n        A_weirstrass = circuit.write_struct(\n            u384(\"A_weirstrass\", [input[5]]), WriteOps.INPUT\n        )\n\n        (\n            T1,\n            T2,\n            T3,\n            T4,\n            T5y,\n            T6y,\n            T7y,\n            T8y,\n            T9,\n            T10,\n            T11,\n            T12,\n            T13y,\n            T14y,\n            T15y,\n            T16y,\n            R2,\n            R0y,\n        ) = circuit.prepare_points_fake_glv(P, Q, s2_sign, A_weirstrass)\n        # circuit.exact_output_refs_needed = [B2[0], B3[0], B4[0], B5[0], B6[0], B7[0], B8[0], B10y, B11y, B12y, B13y, B14y, B15y, B16y, Acc[0], Acc[1]]\n        circuit.extend_struct_output(G1PointCircuit(\"T1\", [T1[0], T1[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"T2\", [T2[0], T2[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"T3\", [T3[0], T3[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"T4\", [T4[0], T4[1]]))\n        circuit.extend_struct_output(u384(\"T5y\", [T5y]))\n        circuit.extend_struct_output(u384(\"T6y\", [T6y]))\n        circuit.extend_struct_output(u384(\"T7y\", [T7y]))\n        circuit.extend_struct_output(u384(\"T8y\", [T8y]))\n        circuit.extend_struct_output(G1PointCircuit(\"T9\", [T9[0], T9[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"T10\", [T10[0], T10[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"T11\", [T11[0], T11[1]]))\n        circuit.extend_struct_output(G1PointCircuit(\"T12\", [T12[0], T12[1]]))\n        circuit.extend_struct_output(u384(\"T13y\", [T13y]))\n        circuit.extend_struct_output(u384(\"T14y\", [T14y]))\n        circuit.extend_struct_output(u384(\"T15y\", [T15y]))\n        circuit.extend_struct_output(u384(\"T16y\", [T16y]))\n        circuit.extend_struct_output(G1PointCircuit(\"R2\", [R2[0], R2[1]]))\n        circuit.extend_struct_output(u384(\"R0y\", [R0y]))\n        return circuit\n\n\nclass QuadrupleAndAdd9Circuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"quadruple_and_add_9\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.append(self.field.random())  # Px\n        input.append(self.field.random())  # Py\n        for _ in range(9):\n            input.append(self.field.random())  # Qx\n            input.append(self.field.random())  # Qy\n        input.append(self.field.random())  # A_weirstrass\n\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = BasicEC(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        circuit.generic_modulus = True\n        P = circuit.write_struct(\n            G1PointCircuit(\"P\", [input[0], input[1]]), WriteOps.INPUT\n        )\n        Qs = []\n        for i in range(2, len(input) - 1, 2):\n            Qs.append(\n                circuit.write_struct(\n                    G1PointCircuit(f\"Q_{i//2}\", [input[i], input[i + 1]]),\n                    WriteOps.INPUT,\n                )\n            )\n\n        A_weirstrass = circuit.write_struct(\n            u384(\"A_weirstrass\", [input[len(input) - 1]]), WriteOps.INPUT\n        )\n\n        Rx, Ry = circuit.n_quadruple_and_add(P, Qs, A_weirstrass)\n        circuit.extend_struct_output(G1PointCircuit(\"R\", [Rx, Ry]))\n        return circuit\n\n\nclass ClearCofactorBLS12_381Circuit(BaseModuloCircuit):\n    def __init__(self, curve_id: int, auto_run: bool = True, compilation_mode: int = 0):\n        super().__init__(\n            name=\"clear_cofactor_bls12_381\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        input = []\n        input.append(self.field.random())  # Px\n        input.append(self.field.random())  # Py\n        return input\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = G1CofactorClearing(\n            self.name, self.curve_id, compilation_mode=self.compilation_mode\n        )\n        circuit.generic_modulus = True\n        P = circuit.write_struct(\n            G1PointCircuit(\"P\", [input[0], input[1]]), WriteOps.INPUT\n        )\n\n        res = circuit.clear_cofactor(P)\n        circuit.extend_struct_output(G1PointCircuit(\"res\", [res[0], res[1]]))\n        return circuit\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/compilable_circuits/rsa.py",
    "content": "from random import randrange\n\nfrom garaga.modulo_circuit import ModuloCircuit, WriteOps\nfrom garaga.modulo_circuit_structs import RSA2048Chunks, RSA2048ReductionWitness, u384\nfrom garaga.precompiled_circuits.compilable_circuits.base import (\n    BaseModuloCircuit,\n    PyFelt,\n)\n\nRSA2048_N_CHUNKS = 6\nRSA2048_TOP_CHUNK_BITS = 128\nRSA2048_N_STEPS = 17\n\n\nclass RSAFullVerificationCircuit(BaseModuloCircuit):\n    \"\"\"RNS channel circuit for RSA-2048 modular exponentiation verification.\n\n    Verifies all 17 reduction steps (16 squarings + 1 final multiply) of the\n    square-and-multiply chain s^{65537} mod n within a single RNS channel.\n    Each step a*b = q*n + r is checked by Horner evaluation of chunk\n    polynomials at the channel's evaluation point alpha, asserting\n    a(alpha)*b(alpha) - q(alpha)*n(alpha) - r(alpha) = 0.\n\n    Inputs (217): n(6) + s(6) + 17 x (q_i(6) + r_i(6)) + alpha(1)\n    Outputs (17): differences delta_i (zero iff all reductions are valid)\n    \"\"\"\n\n    def __init__(\n        self,\n        curve_id: int,\n        auto_run: bool = True,\n        compilation_mode: int = 0,\n    ) -> None:\n        super().__init__(\n            name=\"rsa_full_verification\",\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def build_input(self) -> list[PyFelt]:\n        # mod_chunks (6) + sig_chunks (6) + 17*(quot(6)+rem(6)) + step(1) = 217\n        mod_chunks = [self.field.random() for _ in range(RSA2048_N_CHUNKS - 1)]\n        mod_chunks.append(self.field(randrange(1 << RSA2048_TOP_CHUNK_BITS)))\n        sig_chunks = [self.field.random() for _ in range(RSA2048_N_CHUNKS - 1)]\n        sig_chunks.append(self.field(randrange(1 << RSA2048_TOP_CHUNK_BITS)))\n        witness_chunks = []\n        for _ in range(RSA2048_N_STEPS):\n            quot = [self.field.random() for _ in range(RSA2048_N_CHUNKS - 1)]\n            quot.append(self.field(randrange(1 << RSA2048_TOP_CHUNK_BITS)))\n            rem = [self.field.random() for _ in range(RSA2048_N_CHUNKS - 1)]\n            rem.append(self.field(randrange(1 << RSA2048_TOP_CHUNK_BITS)))\n            witness_chunks.extend(quot + rem)\n        step = [self.field.random()]\n        return mod_chunks + sig_chunks + witness_chunks + step\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = ModuloCircuit(\n            self.name,\n            self.curve_id,\n            generic_circuit=True,\n            generic_modulus=True,\n            compilation_mode=self.compilation_mode,\n        )\n\n        mod_chunks = circuit.write_struct(\n            RSA2048Chunks(\n                \"mod_chunks\",\n                [input.pop(0) for _ in range(RSA2048_N_CHUNKS)],\n            ),\n            WriteOps.INPUT,\n        )\n        sig_chunks = circuit.write_struct(\n            RSA2048Chunks(\n                \"sig_chunks\",\n                [input.pop(0) for _ in range(RSA2048_N_CHUNKS)],\n            ),\n            WriteOps.INPUT,\n        )\n\n        all_quot_chunks = []\n        all_rem_chunks = []\n        for i in range(RSA2048_N_STEPS):\n            witness_elmts = [input.pop(0) for _ in range(2 * RSA2048_N_CHUNKS)]\n            witness = circuit.write_struct(\n                RSA2048ReductionWitness(f\"w_{i}\", witness_elmts),\n                WriteOps.INPUT,\n            )\n            all_quot_chunks.append(witness[:RSA2048_N_CHUNKS])\n            all_rem_chunks.append(witness[RSA2048_N_CHUNKS:])\n\n        step = circuit.write_struct(u384(\"step\", [input.pop(0)]), WriteOps.INPUT)\n        assert len(input) == 0, f\"Expected empty input, got {len(input)} elements left\"\n\n        mod_res = circuit.eval_horner(\n            mod_chunks, step, poly_name=\"mod_chunks\", var_name=\"STEP\"\n        )\n        sig_res = circuit.eval_horner(\n            sig_chunks, step, poly_name=\"sig_chunks\", var_name=\"STEP\"\n        )\n\n        current = sig_res  # first step squares sig_res\n        diffs = []\n        for i in range(RSA2048_N_STEPS):\n            q_res = circuit.eval_horner(\n                all_quot_chunks[i], step, poly_name=f\"quot_{i}\", var_name=\"STEP\"\n            )\n            r_res = circuit.eval_horner(\n                all_rem_chunks[i], step, poly_name=f\"rem_{i}\", var_name=\"STEP\"\n            )\n            if i < RSA2048_N_STEPS - 1:\n                ab = circuit.mul(current, current, comment=f\"square_{i}\")\n            else:\n                ab = circuit.mul(current, sig_res, comment=\"final_multiply\")\n            qn = circuit.mul(q_res, mod_res, comment=f\"quot*mod_{i}\")\n            diff = circuit.sub(ab, qn, comment=f\"ab-qn_{i}\")\n            diff = circuit.sub(diff, r_res, comment=f\"ab-qn-rem_{i}\")\n            diffs.append(diff)\n            current = r_res\n\n        for i, diff in enumerate(diffs):\n            circuit.extend_struct_output(u384(f\"diff_{i}\", [diff]))\n        return circuit\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/compilable_circuits/ultra_honk.py",
    "content": "from abc import abstractmethod\nfrom typing import Dict, Tuple, Type, Union\n\nimport garaga.modulo_circuit_structs as structs\nimport garaga.precompiled_circuits.zk_honk as hk\nfrom garaga.curves import CurveID\nfrom garaga.modulo_circuit import ModuloCircuitElement\nfrom garaga.modulo_circuit_structs import u384\nfrom garaga.precompiled_circuits.compilable_circuits.base import (\n    BaseModuloCircuit,\n    ModuloCircuit,\n    PyFelt,\n)\nfrom garaga.precompiled_circuits.zk_honk import (\n    PAIRING_POINT_OBJECT_LENGTH,\n    ZK_BATCHED_RELATION_PARTIAL_LENGTH,\n    HonkVk,\n    Wire,\n    ZKHonkVerifierCircuits,\n)\nfrom garaga.starknet.honk_contract_generator.calldata import filter_msm_scalars\n\n\nclass BaseUltraHonkCircuit(BaseModuloCircuit):\n    def __init__(\n        self,\n        name: str,\n        log_n: int,\n        curve_id: CurveID.GRUMPKIN.value,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ) -> None:\n        self.log_n = log_n\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def _initialize_circuit(self) -> ZKHonkVerifierCircuits:\n        return ZKHonkVerifierCircuits(\n            name=self.name,\n            log_n=self.log_n,\n            curve_id=self.curve_id,\n        )\n\n    def _process_input(\n        self, circuit: ZKHonkVerifierCircuits, input: list[PyFelt]\n    ) -> dict:\n        \"\"\"\n        Method responsible for deserializing the input list of elements into the variables in the input map,\n        and writing them to the circuit.\n        The input list is expected to be in the same order as the input map.\n        Since we use Python 3.10, the input map dict is ordered.\n        Returns a vars dict with the same keys as the input map, but with the values being the instances of the structs,\n        each struct holding ModuloCircuitElement(s).\n        \"\"\"\n        vars = {}\n        for name, struct_info in self.input_map.items():\n            if name == \"sumcheck_evaluations\":\n                # Edge case, TABLE_SHIFTS are not used. Replace with mocked non part of circuit values.\n                struct_type, size = struct_info\n                assert size == len(Wire) - len(Wire.unused_indexes())\n                elements = circuit.write_struct(\n                    struct_type(name, elmts=[input.pop(0) for _ in range(size)])\n                )\n                elements = Wire.insert_unused_indexes_with_nones(elements)\n                assert len(elements) == len(Wire)\n                vars[name] = elements\n\n            elif isinstance(struct_info, tuple) and struct_info[0] in [\n                structs.u256Span,\n                structs.u384Array,\n                structs.u128Span,\n            ]:\n                # Handle u384Array with specified size\n                struct_type, size = struct_info\n                vars[name] = circuit.write_struct(\n                    struct_type(name, elmts=[input.pop(0) for _ in range(size)])\n                )\n\n            else:\n                struct_type = struct_info\n                # For other types, create a temporary instance to get its length\n                temp_instance = struct_type(\n                    name, None\n                )  # Temporary instance with a dummy element\n                size = len(temp_instance)\n                if size == 1:\n                    vars[name] = circuit.write_struct(\n                        struct_type(name, elmts=[input.pop(0)])\n                    )\n                else:\n                    # Convert to tuple so that it is Hashable\n                    vars[name] = tuple(\n                        circuit.write_struct(\n                            struct_type(name, elmts=[input.pop(0) for _ in range(size)])\n                        )\n                    )\n        assert len(input) == 0, f\"Expected input of length 0, got {len(input)}\"\n\n        return vars\n\n    @property\n    @abstractmethod\n    def input_map(\n        self,\n    ) -> Dict[\n        str,\n        Union[\n            Type[structs.Cairo1SerializableStruct],\n            Tuple[Type[structs.Cairo1SerializableStruct], int],\n        ],\n    ]:\n        \"\"\"\n        Define the input map for the circuit in a dict.\n        The key will be the name of the input variable, also used in the signature of the compiled Cairo code.\n        The value will be either a Cairo1SerializableStruct type (which defines the struct in the Cairo code),\n            or a tuple of the type and its size (for Array-like types).\n        The reason behind this is that each Cairo1SerializableStruct defines the __len__ method, but for the\n        array-like structs we need to specify the size in advance.\n        \"\"\"\n\n    def build_input(self) -> list[PyFelt]:\n        \"\"\"\n        Extends the base method of BaseModuloCircuit, by reading the input map and returning a list of random elements of the total expected size.\n        \"\"\"\n        total_elements = 0\n        for name, struct_info in self.input_map.items():\n            if isinstance(struct_info, tuple):\n                # Array-like case\n                _, size = struct_info\n                total_elements += size\n            else:\n                # For other structs, create a temporary instance to get its length\n                temp_instance = struct_info(name, None)\n                total_elements += len(temp_instance)\n\n        # print(f\"Total elements: {total_elements}\")\n        return [self.field.random() for _ in range(total_elements)]\n\n    def _run_circuit_inner(self, input: list[PyFelt]) -> ModuloCircuit:\n        circuit = self._initialize_circuit()\n\n        vars = self._process_input(circuit, input)\n        return self._execute_circuit_logic(circuit, vars)\n\n    @abstractmethod\n    def _execute_circuit_logic(self, circuit, vars) -> ModuloCircuit:\n        \"\"\"\n        Implement the circuit logic using the processed input variables.\n        \"\"\"\n\n\nclass ZKBaseUltraHonkCircuit(BaseUltraHonkCircuit):\n    def __init__(\n        self,\n        name: str,\n        log_n: int,\n        curve_id: CurveID.GRUMPKIN.value,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ) -> None:\n        super().__init__(\n            name=name,\n            log_n=log_n,\n            curve_id=curve_id,\n            auto_run=auto_run,\n            compilation_mode=compilation_mode,\n        )\n\n    def _initialize_circuit(self) -> ZKHonkVerifierCircuits:\n        return ZKHonkVerifierCircuits(\n            name=self.name,\n            log_n=self.log_n,\n            curve_id=self.curve_id,\n        )\n\n\nclass ZKSumCheckCircuit(ZKBaseUltraHonkCircuit):\n    def __init__(\n        self,\n        vk: HonkVk,\n        curve_id: int = CurveID.GRUMPKIN.value,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ) -> None:\n        assert (\n            vk.public_inputs_size >= PAIRING_POINT_OBJECT_LENGTH\n        ), f\"vk.public_inputs_size: {vk.public_inputs_size}, PAIRING_POINT_OBJECT_LENGTH: {PAIRING_POINT_OBJECT_LENGTH}\"\n        name = (\n            f\"zk_honk_sumcheck_size_{vk.log_circuit_size}_pub_{vk.public_inputs_size}\"\n        )\n        self.vk = vk\n\n        super().__init__(\n            name, vk.log_circuit_size, curve_id, auto_run, compilation_mode\n        )\n\n    @property\n    def input_map(self) -> dict:\n        imap = {}\n\n        imap[\"p_public_inputs\"] = (\n            structs.u256Span,\n            self.vk.public_inputs_size - PAIRING_POINT_OBJECT_LENGTH,\n        )\n        imap[\"p_pairing_point_object\"] = (structs.u256Span, PAIRING_POINT_OBJECT_LENGTH)\n\n        imap[\"libra_sum\"] = structs.u384\n\n        imap[\"sumcheck_univariates_flat\"] = (\n            structs.u256Span,\n            self.vk.log_circuit_size * ZK_BATCHED_RELATION_PARTIAL_LENGTH,\n        )\n\n        imap[\"sumcheck_evaluations\"] = (\n            structs.u256Span,\n            hk.NUMBER_OF_ENTITIES - len(Wire.unused_indexes()),\n        )\n\n        imap[\"libra_evaluation\"] = structs.u384\n\n        imap[\"tp_sum_check_u_challenges\"] = (\n            structs.u128Span,\n            self.vk.log_circuit_size,\n        )\n        imap[\"tp_gate_challenge\"] = structs.u128\n\n        imap[\"tp_eta_1\"] = structs.u384\n        imap[\"tp_eta_2\"] = structs.u384\n        imap[\"tp_eta_3\"] = structs.u384\n        imap[\"tp_beta\"] = structs.u384\n        imap[\"tp_gamma\"] = structs.u384\n        imap[\"tp_base_rlc\"] = structs.u384\n        imap[\"tp_alpha\"] = structs.u128\n        imap[\"tp_libra_challenge\"] = structs.u384\n        return imap\n\n    def _execute_circuit_logic(\n        self, circuit: ZKHonkVerifierCircuits, vars: dict\n    ) -> ModuloCircuit:\n\n        tp_delta = circuit.compute_public_input_delta(\n            vars[\"p_public_inputs\"],\n            vars[\"p_pairing_point_object\"],\n            vars[\"tp_beta\"],\n            vars[\"tp_gamma\"],\n        )\n\n        sumcheck_univariates_flat = vars[\"sumcheck_univariates_flat\"]\n        sumcheck_univariates = []\n        for i in range(self.vk.log_circuit_size):\n            sumcheck_univariates.append(\n                sumcheck_univariates_flat[\n                    i\n                    * ZK_BATCHED_RELATION_PARTIAL_LENGTH : (i + 1)\n                    * ZK_BATCHED_RELATION_PARTIAL_LENGTH\n                ]\n            )\n\n        assert len(sumcheck_univariates) == self.vk.log_circuit_size\n        assert len(sumcheck_univariates[0]) == ZK_BATCHED_RELATION_PARTIAL_LENGTH\n\n        assert len(vars[\"sumcheck_evaluations\"]) == len(Wire)\n\n        check_rlc, check = circuit.verify_sum_check(\n            vars[\"libra_sum\"],\n            sumcheck_univariates,\n            vars[\"sumcheck_evaluations\"],\n            vars[\"libra_evaluation\"],\n            vars[\"tp_beta\"],\n            vars[\"tp_gamma\"],\n            tp_delta,\n            vars[\"tp_eta_1\"],\n            vars[\"tp_eta_2\"],\n            vars[\"tp_eta_3\"],\n            vars[\"tp_libra_challenge\"],\n            vars[\"tp_sum_check_u_challenges\"],\n            vars[\"tp_gate_challenge\"],\n            vars[\"tp_alpha\"],\n            self.vk.log_circuit_size,\n            vars[\"tp_base_rlc\"],\n        )\n\n        assert type(check_rlc) == ModuloCircuitElement\n        assert type(check) == ModuloCircuitElement\n\n        circuit.extend_struct_output(u384(\"check_rlc\", elmts=[check_rlc]))\n        circuit.extend_struct_output(u384(\"check\", elmts=[check]))\n        return circuit\n\n\nclass ZKPrepareScalarsCircuit(ZKBaseUltraHonkCircuit):\n    def __init__(\n        self,\n        vk: HonkVk,\n        curve_id: int = CurveID.GRUMPKIN.value,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ) -> None:\n        name = f\"zkhonk_prep_msm_scalars_size_{vk.log_circuit_size}\"\n        self.vk = vk\n        self.scalar_indexes = []\n        super().__init__(\n            name, vk.log_circuit_size, curve_id, auto_run, compilation_mode\n        )\n\n    @property\n    def input_map(self) -> dict:\n        imap = {}\n\n        imap[\"p_sumcheck_evaluations\"] = (structs.u256Span, hk.NUMBER_OF_ENTITIES)\n        imap[\"p_gemini_masking_eval\"] = structs.u384\n        imap[\"p_gemini_a_evaluations\"] = (structs.u256Span, self.vk.log_circuit_size)\n        imap[\"p_libra_poly_evals\"] = (structs.u256Span, 4)\n        imap[\"tp_gemini_r\"] = structs.u384\n        imap[\"tp_rho\"] = structs.u384\n        imap[\"tp_shplonk_z\"] = structs.u384\n        imap[\"tp_shplonk_nu\"] = structs.u384\n        imap[\"tp_sum_check_u_challenges\"] = (\n            structs.u128Span,\n            self.vk.log_circuit_size,\n        )\n\n        return imap\n\n    def _execute_circuit_logic(\n        self, circuit: ZKHonkVerifierCircuits, vars: dict\n    ) -> ModuloCircuit:\n\n        assert len(vars[\"p_sumcheck_evaluations\"]) == len(Wire)\n\n        scalars = circuit.compute_shplemini_msm_scalars(\n            vars[\"p_sumcheck_evaluations\"],\n            vars[\"p_gemini_masking_eval\"],\n            vars[\"p_gemini_a_evaluations\"],\n            vars[\"p_libra_poly_evals\"],\n            vars[\"tp_gemini_r\"],\n            vars[\"tp_rho\"],\n            vars[\"tp_shplonk_z\"],\n            vars[\"tp_shplonk_nu\"],\n            vars[\"tp_sum_check_u_challenges\"],\n        )\n\n        scalars_filtered_no_nones = filter_msm_scalars(\n            scalars, self.vk.log_circuit_size\n        )\n        # Remove shplonk_z (last scalar) (included in transcript)\n        scalars_filtered_no_nones = scalars_filtered_no_nones[:-1]\n        self.msm_len = len(scalars_filtered_no_nones) + 1\n\n        # For each filtered scalar, find its original index by matching offset\n        self.scalar_indexes = []\n        for scalar in scalars_filtered_no_nones:\n            original_index = next(\n                i\n                for i, orig_scalar in enumerate(scalars)\n                if orig_scalar is not None and orig_scalar.offset == scalar.offset\n            )\n            self.scalar_indexes.append(original_index)\n            circuit.extend_struct_output(\n                u384(f\"scalar_{original_index}\", elmts=[scalar])\n            )\n\n        self.msm_len = len(scalars_filtered_no_nones) + 1\n\n        return circuit\n\n\nclass ZKEvalsConsistencyCircuit(ZKBaseUltraHonkCircuit):\n    def __init__(\n        self,\n        vk: HonkVk,\n        curve_id: int = CurveID.GRUMPKIN.value,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ) -> None:\n        name = f\"zk_honk_evals_consist_size_{vk.log_circuit_size}\"\n        self.vk = vk\n        super().__init__(\n            name, vk.log_circuit_size, curve_id, auto_run, compilation_mode\n        )\n\n    @property\n    def input_map(self) -> dict:\n        imap = {}\n\n        imap[\"p_libra_evaluation\"] = structs.u384\n        imap[\"p_libra_poly_evals\"] = (structs.u256Span, 4)\n        imap[\"tp_gemini_r\"] = structs.u384\n        imap[\"tp_sum_check_u_challenges\"] = (\n            structs.u128Span,\n            hk.CONST_PROOF_SIZE_LOG_N,\n        )\n\n        return imap\n\n    def _execute_circuit_logic(\n        self, circuit: ZKHonkVerifierCircuits, vars: dict\n    ) -> ModuloCircuit:\n\n        vanishing_check, diff_check = circuit.check_evals_consistency(\n            vars[\"p_libra_evaluation\"],\n            vars[\"p_libra_poly_evals\"],\n            vars[\"tp_gemini_r\"],\n            vars[\"tp_sum_check_u_challenges\"],\n        )\n\n        assert type(vanishing_check) == ModuloCircuitElement\n        assert type(diff_check) == ModuloCircuitElement\n\n        circuit.extend_struct_output(u384(\"vanishing_check\", elmts=[vanishing_check]))\n        circuit.extend_struct_output(u384(\"diff_check\", elmts=[diff_check]))\n        return circuit\n\n\nclass ZKEvalsConsistencyInitCircuit(ZKBaseUltraHonkCircuit):\n    def __init__(\n        self,\n        vk: HonkVk,\n        curve_id: int = CurveID.GRUMPKIN.value,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ) -> None:\n        name = f\"zk_honk_evals_cons_init_size_{vk.log_circuit_size}\"\n        self.vk = vk\n        super().__init__(\n            name, vk.log_circuit_size, curve_id, auto_run, compilation_mode\n        )\n\n    @property\n    def input_map(self) -> dict:\n        imap = {}\n\n        imap[\"tp_gemini_r\"] = structs.u384\n\n        return imap\n\n    def _execute_circuit_logic(\n        self, circuit: ZKHonkVerifierCircuits, vars: dict\n    ) -> ModuloCircuit:\n\n        challenge_poly_eval, root_power_times_tp_gemini_r = (\n            circuit._check_evals_consistency_init(\n                vars[\"tp_gemini_r\"],\n            )\n        )\n\n        assert type(challenge_poly_eval) == ModuloCircuitElement\n        assert type(root_power_times_tp_gemini_r) == ModuloCircuitElement\n\n        circuit.extend_struct_output(\n            u384(\"challenge_poly_eval\", elmts=[challenge_poly_eval])\n        )\n        circuit.extend_struct_output(\n            u384(\"root_power_times_tp_gemini_r\", elmts=[root_power_times_tp_gemini_r])\n        )\n        return circuit\n\n\nclass ZKEvalsConsistencyLoopCircuit(ZKBaseUltraHonkCircuit):\n    def __init__(\n        self,\n        vk: HonkVk,\n        curve_id: int = CurveID.GRUMPKIN.value,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ) -> None:\n        name = f\"zk_honk_evals_cons_loop_size_{vk.log_circuit_size}\"\n        self.vk = vk\n        super().__init__(\n            name, vk.log_circuit_size, curve_id, auto_run, compilation_mode\n        )\n\n    @property\n    def input_map(self) -> dict:\n        imap = {}\n\n        imap[\"challenge_poly_eval\"] = structs.u384\n        imap[\"root_power_times_tp_gemini_r\"] = structs.u384\n        imap[\"tp_sumcheck_u_challenge\"] = structs.u384\n\n        return imap\n\n    def _execute_circuit_logic(\n        self, circuit: ZKHonkVerifierCircuits, vars: dict\n    ) -> ModuloCircuit:\n\n        challenge_poly_eval, root_power_times_tp_gemini_r = (\n            circuit._check_evals_consistency_loop(\n                vars[\"challenge_poly_eval\"],\n                vars[\"root_power_times_tp_gemini_r\"],\n                vars[\"tp_sumcheck_u_challenge\"],\n            )\n        )\n\n        assert type(challenge_poly_eval) == ModuloCircuitElement\n        assert type(root_power_times_tp_gemini_r) == ModuloCircuitElement\n\n        circuit.extend_struct_output(\n            u384(\"challenge_poly_eval\", elmts=[challenge_poly_eval])\n        )\n        circuit.extend_struct_output(\n            u384(\"root_power_times_tp_gemini_r\", elmts=[root_power_times_tp_gemini_r])\n        )\n        return circuit\n\n\nclass ZKEvalsConsistencyDoneCircuit(ZKBaseUltraHonkCircuit):\n    def __init__(\n        self,\n        vk: HonkVk,\n        curve_id: int = CurveID.GRUMPKIN.value,\n        auto_run: bool = True,\n        compilation_mode: int = 1,\n    ) -> None:\n        name = f\"zk_honk_evals_cons_done_size_{vk.log_circuit_size}\"\n        self.vk = vk\n        super().__init__(\n            name, vk.log_circuit_size, curve_id, auto_run, compilation_mode\n        )\n\n    @property\n    def input_map(self) -> dict:\n        imap = {}\n\n        imap[\"p_libra_evaluation\"] = structs.u384\n        imap[\"p_libra_poly_evals\"] = (structs.u256Span, 4)\n        imap[\"tp_gemini_r\"] = structs.u384\n        imap[\"challenge_poly_eval\"] = structs.u384\n        imap[\"root_power_times_tp_gemini_r\"] = structs.u384\n\n        return imap\n\n    def _execute_circuit_logic(\n        self, circuit: ZKHonkVerifierCircuits, vars: dict\n    ) -> ModuloCircuit:\n\n        vanishing_check, diff_check = circuit._check_evals_consistency_done(\n            vars[\"p_libra_evaluation\"],\n            vars[\"p_libra_poly_evals\"],\n            vars[\"tp_gemini_r\"],\n            vars[\"challenge_poly_eval\"],\n            vars[\"root_power_times_tp_gemini_r\"],\n        )\n\n        assert type(vanishing_check) == ModuloCircuitElement\n        assert type(diff_check) == ModuloCircuitElement\n\n        circuit.extend_struct_output(u384(\"vanishing_check\", elmts=[vanishing_check]))\n        circuit.extend_struct_output(u384(\"diff_check\", elmts=[diff_check]))\n        return circuit\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/ec.py",
    "content": "import sympy\n\nfrom garaga.curves import CURVES\nfrom garaga.modulo_circuit import ModuloCircuit, ModuloCircuitElement, PyFelt, WriteOps\nfrom garaga.precompiled_circuits.fp2 import Fp2Circuits\n\n\ndef is_quad_residue(n, p):\n    \"\"\"\n    Returns True if n is a quadratic residue mod p.\n    \"\"\"\n    return sympy.ntheory.residue_ntheory.is_quad_residue(n, p)\n\n\ndef sqrt_mod_p(n, p):\n    \"\"\"\n    Finds the minimum non-negative integer m such that (m*m) % p == n.\n    \"\"\"\n    return min(sympy.ntheory.residue_ntheory.sqrt_mod(n, p, all_roots=True))\n\n\nclass IsOnCurveCircuit(Fp2Circuits):\n    def __init__(self, name: str, curve_id: int, compilation_mode: int = 0):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            compilation_mode=compilation_mode,\n            generic_circuit=True,\n        )\n        self.curve = CURVES[curve_id]\n\n    def set_consts(\n        self,\n        a: PyFelt | ModuloCircuitElement,\n        b: PyFelt | ModuloCircuitElement,\n        b20: PyFelt | ModuloCircuitElement,\n        b21: PyFelt | ModuloCircuitElement,\n    ):\n        self.a = self.write_element(a) if isinstance(a, PyFelt) else a\n        self.b = self.write_element(b) if isinstance(b, PyFelt) else b\n        self.b20 = self.write_element(b20) if isinstance(b20, PyFelt) else b20\n        self.b21 = self.write_element(b21) if isinstance(b21, PyFelt) else b21\n\n    def _is_on_curve_G1(\n        self, x: ModuloCircuitElement, y: ModuloCircuitElement\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        # y^2 = x^3 + ax + b\n        a = self.a\n        b = self.b\n\n        y2 = self.mul(y, y)\n        x3 = self.mul(x, self.mul(x, x))\n\n        if a.value != 0:\n            ax = self.mul(a, x)\n            x3_ax_b = self.add(x3, self.add(ax, b))\n        else:\n            x3_ax_b = self.add(x3, b)\n\n        return y2, x3_ax_b\n\n    def _is_on_curve_G2(\n        self,\n        x0: ModuloCircuitElement,\n        x1: ModuloCircuitElement,\n        y0: ModuloCircuitElement,\n        y1: ModuloCircuitElement,\n    ):\n        # y^2 = x^3 + ax + b [Fp2]\n        a = self.a\n        b0 = self.b20\n        b1 = self.b21\n\n        y2 = self.fp2_square([y0, y1])\n        x2 = self.fp2_square([x0, x1])\n        x3 = self.fp2_mul([x0, x1], x2)\n\n        ax = [self.mul(a, x0), self.mul(a, x1)]\n        ax_b = [self.add(ax[0], b0), self.add(ax[1], b1)]\n\n        x3_ax_b = [self.add(x3[0], ax_b[0]), self.add(x3[1], ax_b[1])]\n\n        return y2, x3_ax_b\n\n\nclass DerivePointFromX(ModuloCircuit):\n    def __init__(self, name: str, curve_id: int, compilation_mode: int = 0):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            generic_circuit=True,\n            compilation_mode=compilation_mode,\n        )\n        self.curve = CURVES[curve_id]\n\n    def _derive_point_from_x(\n        self,\n        x: ModuloCircuitElement,\n        a: ModuloCircuitElement,\n        b: ModuloCircuitElement,\n        g: ModuloCircuitElement,\n    ) -> list[ModuloCircuitElement]:\n        # y^2 = x^3 + ax + b\n        # Assumes a == 0.\n        x3 = self.mul(x, self.mul(x, x))\n        rhs = self.add(x3, self.add(self.mul(a, x), b))\n\n        grhs = self.mul(g, rhs)\n\n        # WRITE g*rhs and rhs \"square roots\" to circuit.\n        # If rhs is a square, write zero to gx and the square root of rhs to x3_ax_b_sqrt.\n        # Otherwise, write the square root of gx to gx_sqrt and zero to x3_ax_b_sqrt.\n        ## %{\n        if is_quad_residue(rhs.value, self.field.p):\n            rhs_sqrt = self.write_element(\n                self.field(sqrt_mod_p(rhs.value, self.field.p)),\n                WriteOps.WITNESS,\n            )\n            grhs_sqrt = self.write_element(self.field.zero(), WriteOps.WITNESS)\n\n        else:\n            assert is_quad_residue(grhs.value, self.field.p)  # Sanity check.\n            rhs_sqrt = self.write_element(self.field.zero(), WriteOps.WITNESS)\n\n            grhs_sqrt = self.write_element(\n                self.field(sqrt_mod_p(grhs.value, self.field.p)),\n                WriteOps.WITNESS,\n            )\n\n        ## %}\n        should_be_rhs = self.mul(rhs_sqrt, rhs_sqrt)\n\n        should_be_grhs = self.mul(grhs_sqrt, grhs_sqrt)\n\n        return (rhs, grhs, should_be_rhs, should_be_grhs, rhs_sqrt)\n\n\nclass DecompressG1Point(ModuloCircuit):\n    \"\"\"\n    A class to decompress a G1 point on an elliptic curve given the x-coordinate.\n\n    This class is a specialized ModuloCircuit that uses the curve parameters to compute the y-coordinate\n    from a given x-coordinate, ensuring that the point lies on the curve. The y-coordinate is determined\n    using the s_bit, which is extracted from the compressed G1 point. The s_bit indicates which of the two\n    possible y-coordinates (positive or negative) should be selected.\n    \"\"\"\n\n    def __init__(self, name: str, curve_id: int, compilation_mode: int = 0):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            generic_circuit=True,\n            compilation_mode=compilation_mode,\n        )\n        self.curve = CURVES[curve_id]\n\n    def derive_y_from_x(\n        self,\n        b: ModuloCircuitElement,\n        x: ModuloCircuitElement,\n    ) -> ModuloCircuitElement:\n        \"\"\"\n        Derive the two possible y-coordinates from the given x-coordinate on the elliptic curve.\n        Ensures that the point lies on the curve.\n        Assumes that the curve equation is y^2 = x^3 + b.\n\n        :param x: The x-coordinate as a ModuloCircuitElement.\n        :param b: The curve parameter b as a ModuloCircuitElement.\n        :return: The two possible y-coordinates as a ModuloCircuitElement.\n                    No assumption on the order of the two y-coordinates.\n        :raises AssertionError: If the x-coordinate does not lie on the curve.\n        \"\"\"\n\n        assert (\n            CURVES[self.curve_id].a == 0\n        ), \"This circuit is only supported for curves with a = 0\"\n        assert (\n            self.compilation_mode == 0\n        ), \"This circuit is only supported for CairoZero\"\n\n        # y^2 = x^3 + b\n        x3 = self.mul(x, self.mul(x, x))\n        rhs = self.add(x3, b)\n\n        y = self.fp_sqrt(rhs)\n        neg_y = self.neg(y)\n\n        return (y, neg_y)\n\n\nclass ECIPCircuits(ModuloCircuit):\n    def __init__(\n        self,\n        name: str,\n        curve_id: int,\n        compilation_mode: int = 0,\n        generic_circuit: bool = True,\n    ):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            generic_circuit=generic_circuit,\n            compilation_mode=compilation_mode,\n        )\n        self.curve = CURVES[curve_id]\n\n    def _slope_intercept_same_point(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        A_weirstrass: ModuloCircuitElement,\n    ):\n        # Compute doubling slope m = (3x^2 + A) / 2y\n\n        xA0, yA0 = P\n        three = self.set_or_get_constant(self.field(3))\n\n        mA0_num = self.add(\n            self.mul(three, self.mul(xA0, xA0)),\n            A_weirstrass,\n        )\n        mA0_den = self.add(yA0, yA0)\n        m_A0 = self.div(mA0_num, mA0_den)\n\n        # Compute intercept b = y - x*m\n        b_A0 = self.sub(yA0, self.mul(xA0, m_A0))\n\n        # Compute A2 = -(2*P)\n        xA2 = self.sub(self.mul(m_A0, m_A0), self.add(xA0, xA0))\n        yA2 = self.sub(self.mul(m_A0, self.sub(xA0, xA2)), yA0)\n        yA2 = self.neg(yA2)\n\n        # Compute slope between A0 and A2\n        mA0A2_num = self.sub(yA2, yA0)\n        mA0A2_den = self.sub(xA2, xA0)\n        m_A0A2 = self.div(mA0A2_num, mA0A2_den)\n\n        #   coeff2 = (2 * yA2) * (xA0 - xA2) / (3 * xA2^2 + A - 2 * m * yA2)\n        m_yA2 = self.mul(m_A0A2, yA2)\n\n        coeff2 = self.div(\n            self.mul(self.add(yA2, yA2), self.sub(xA0, xA2)),\n            self.add(\n                self.mul(three, self.mul(xA2, xA2)),\n                self.sub(A_weirstrass, self.add(m_yA2, m_yA2)),\n            ),\n        )\n        coeff0 = self.add(coeff2, self.add(m_A0A2, m_A0A2))\n\n        # Return slope intercept of A0 (for RHS) and coeff0/2 for LHS\n        return (\n            m_A0,\n            b_A0,\n            xA0,\n            yA0,\n            xA2,\n            yA2,\n            coeff0,\n            coeff2,\n        )\n\n    def _accumulate_eval_point_challenge_signed_same_point(\n        self,\n        eval_accumulator: ModuloCircuitElement,\n        slope_intercept: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        xA: ModuloCircuitElement,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        ep: ModuloCircuitElement,\n        en: ModuloCircuitElement,\n        sign_ep: ModuloCircuitElement,\n        sign_en: ModuloCircuitElement,\n    ) -> ModuloCircuitElement:\n        assert isinstance(ep, ModuloCircuitElement) and isinstance(\n            en, ModuloCircuitElement\n        )\n        assert isinstance(sign_ep, ModuloCircuitElement) and isinstance(\n            sign_en, ModuloCircuitElement\n        )\n        m, b = slope_intercept\n        xP, yP = P\n        num = self.sub(xA, xP)\n\n        # den_tmp = m*xP + b\n        den_tmp = self.add(self.mul(m, xP), b)\n\n        # den_pos = yP - (m*xP + b) = yP - m*xP - b\n        den_pos = self.sub(yP, den_tmp)\n\n        # den_neg = -yP - m*xP -b\n        den_neg = self.sub(self.neg(yP), den_tmp)\n\n        eval_pos = self.mul(self.mul(sign_ep, ep), self.div(num, den_pos))\n        eval_neg = self.mul(self.mul(sign_en, en), self.div(num, den_neg))\n\n        eval_signed = self.add(eval_pos, eval_neg)\n        res = self.add(eval_accumulator, eval_signed)\n        return res\n\n    def _RHS_finalize_acc(\n        self,\n        eval_accumulator: ModuloCircuitElement,\n        slope_intercept: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        xA: ModuloCircuitElement,\n        Q: tuple[ModuloCircuitElement, ModuloCircuitElement],\n    ):\n        m, b = slope_intercept\n        xQ, yQ = Q\n        num = self.sub(xA, xQ)\n\n        # den_tmp = m*xQ + b\n        den_tmp = self.add(self.mul(m, xQ), b)\n\n        # den_neg = -yQ - m*xQ -b\n\n        den_neg = self.sub(self.neg(yQ), den_tmp)\n\n        eval_neg = self.div(num, den_neg)\n\n        res = self.add(eval_accumulator, eval_neg)\n        return res\n\n    def _eval_function_challenge_single(\n        self,\n        A: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        coeff: ModuloCircuitElement,\n        log_div_a_num: list[ModuloCircuitElement],\n        log_div_a_den: list[ModuloCircuitElement],\n        log_div_b_num: list[ModuloCircuitElement],\n        log_div_b_den: list[ModuloCircuitElement],\n        var_name: str = \"xA\",\n    ) -> ModuloCircuitElement:\n        xA, yA = A\n        F_A = self.add(\n            self.div(\n                self.eval_horner(\n                    log_div_a_num, xA, poly_name=\"sumdlogdiv_a_num\", var_name=var_name\n                ),\n                self.eval_horner(\n                    log_div_a_den, xA, poly_name=\"sumdlogdiv_a_den\", var_name=var_name\n                ),\n            ),\n            self.mul(\n                yA,\n                self.div(\n                    self.eval_horner(\n                        log_div_b_num,\n                        xA,\n                        poly_name=\"sumdlogdiv_b_num\",\n                        var_name=var_name,\n                    ),\n                    self.eval_horner(\n                        log_div_b_den,\n                        xA,\n                        poly_name=\"sumdlogdiv_b_den\",\n                        var_name=var_name,\n                    ),\n                ),\n            ),\n        )\n        return self.mul(coeff, F_A)\n\n    def _eval_function_challenge_dupl(\n        self,\n        A0: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        A2: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        coeff0: ModuloCircuitElement,\n        coeff2: ModuloCircuitElement,\n        log_div_a_num: list[ModuloCircuitElement],\n        log_div_a_den: list[ModuloCircuitElement],\n        log_div_b_num: list[ModuloCircuitElement],\n        log_div_b_den: list[ModuloCircuitElement],\n    ) -> ModuloCircuitElement:\n\n        # F = a(x) + y*b(x), a and b being rational functions.\n        # computes coeff0*F(A0) - coeff2*F(A2)\n\n        xA0, yA0 = A0\n        xA2, yA2 = A2\n\n        F_A0 = self._eval_function_challenge_single(\n            A0,\n            coeff0,\n            log_div_a_num,\n            log_div_a_den,\n            log_div_b_num,\n            log_div_b_den,\n            var_name=\"xA0\",\n        )\n        F_A2 = self._eval_function_challenge_single(\n            A2,\n            coeff2,\n            log_div_a_num,\n            log_div_a_den,\n            log_div_b_num,\n            log_div_b_den,\n            var_name=\"xA2\",\n        )\n\n        # return coeff0*F(A0) - coeff2*F(A2)\n\n        res = self.sub(F_A0, F_A2)\n\n        return res\n\n    def _init_function_challenge_dupl(\n        self,\n        xA0: ModuloCircuitElement,\n        xA2: ModuloCircuitElement,\n        log_div_a_num: list[ModuloCircuitElement],\n        log_div_a_den: list[ModuloCircuitElement],\n        log_div_b_num: list[ModuloCircuitElement],\n        log_div_b_den: list[ModuloCircuitElement],\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n\n        # F = a(x) + y*b(x), a and b being rational functions.\n        # computes F(A0) and F(A2)\n\n        # Precompute powers of xA0 and xA2 for evaluating the polynomials.\n        xA0_powers = [xA0]\n        xA2_powers = [xA2]\n        for i in range(len(log_div_b_den) - 2):\n            xA0_powers.append(self.mul(xA0_powers[-1], xA0, comment=f\"xA0^{i+2}\"))\n            xA2_powers.append(self.mul(xA2_powers[-1], xA2, comment=f\"xA2^{i+2}\"))\n\n        A_NUM_A0 = self.eval_poly(\n            log_div_a_num, xA0_powers, poly_name=\"sumdlogdiv_a_num\", var_name=\"xA0\"\n        )\n        A_DEN_A0 = self.eval_poly(\n            log_div_a_den, xA0_powers, poly_name=\"sumdlogdiv_a_den\", var_name=\"xA0\"\n        )\n        B_NUM_A0 = self.eval_poly(\n            log_div_b_num, xA0_powers, poly_name=\"sumdlogdiv_b_num\", var_name=\"xA0\"\n        )\n        B_DEN_A0 = self.eval_poly(\n            log_div_b_den, xA0_powers, poly_name=\"sumdlogdiv_b_den\", var_name=\"xA0\"\n        )\n\n        A_NUM_A2 = self.eval_poly(\n            log_div_a_num, xA2_powers, poly_name=\"sumdlogdiv_a_num\", var_name=\"xA2\"\n        )\n        A_DEN_A2 = self.eval_poly(\n            log_div_a_den, xA2_powers, poly_name=\"sumdlogdiv_a_den\", var_name=\"xA2\"\n        )\n        B_NUM_A2 = self.eval_poly(\n            log_div_b_num, xA2_powers, poly_name=\"sumdlogdiv_b_num\", var_name=\"xA2\"\n        )\n        B_DEN_A2 = self.eval_poly(\n            log_div_b_den, xA2_powers, poly_name=\"sumdlogdiv_b_den\", var_name=\"xA2\"\n        )\n\n        # return F(A0) and F(A2), and the last power of xA0 and xA2 used in a_den (also equal to b_num)\n\n        a_den_degree = len(log_div_a_den) - 1\n        assert a_den_degree == len(log_div_b_num) - 1\n\n        return (\n            A_NUM_A0,\n            A_DEN_A0,\n            B_NUM_A0,\n            B_DEN_A0,\n            A_NUM_A2,\n            A_DEN_A2,\n            B_NUM_A2,\n            B_DEN_A2,\n            xA0_powers[a_den_degree - 1],\n            xA2_powers[a_den_degree - 1],\n        )\n\n    def _accumulate_function_challenge_dupl(\n        self,\n        a_num_acc_A0: ModuloCircuitElement,\n        a_den_acc_A0: ModuloCircuitElement,\n        b_num_acc_A0: ModuloCircuitElement,\n        b_den_acc_A0: ModuloCircuitElement,\n        a_num_acc_A2: ModuloCircuitElement,\n        a_den_acc_A2: ModuloCircuitElement,\n        b_num_acc_A2: ModuloCircuitElement,\n        b_den_acc_A2: ModuloCircuitElement,\n        xA0: ModuloCircuitElement,\n        xA2: ModuloCircuitElement,\n        xA0_power: ModuloCircuitElement,\n        xA2_power: ModuloCircuitElement,\n        next_a_num_coeff: ModuloCircuitElement,\n        next_a_den_coeff: ModuloCircuitElement,\n        next_b_num_coeff: ModuloCircuitElement,\n        next_b_den_coeff: ModuloCircuitElement,\n    ):\n        # Update accumulators for A0\n        new_a_num_acc_A0 = self.add(a_num_acc_A0, self.mul(next_a_num_coeff, xA0_power))\n        next_xA0_power = self.mul(xA0_power, xA0)\n        new_a_den_acc_A0 = self.add(\n            a_den_acc_A0, self.mul(next_a_den_coeff, next_xA0_power)\n        )\n        new_b_num_acc_A0 = self.add(\n            b_num_acc_A0, self.mul(next_b_num_coeff, next_xA0_power)\n        )\n        next_b_den_A0_power = self.mul(next_xA0_power, xA0)\n        for _ in range(2):\n            next_b_den_A0_power = self.mul(next_b_den_A0_power, xA0)\n        new_b_den_acc_A0 = self.add(\n            b_den_acc_A0, self.mul(next_b_den_coeff, next_b_den_A0_power)\n        )\n\n        # Update accumulators for A2\n        new_a_num_acc_A2 = self.add(a_num_acc_A2, self.mul(next_a_num_coeff, xA2_power))\n        next_xA2_power = self.mul(xA2_power, xA2)\n        new_a_den_acc_A2 = self.add(\n            a_den_acc_A2, self.mul(next_a_den_coeff, next_xA2_power)\n        )\n        new_b_num_acc_A2 = self.add(\n            b_num_acc_A2, self.mul(next_b_num_coeff, next_xA2_power)\n        )\n        next_b_den_A2_power = next_xA2_power\n        for _ in range(3):\n            next_b_den_A2_power = self.mul(next_b_den_A2_power, xA2)\n        new_b_den_acc_A2 = self.add(\n            b_den_acc_A2, self.mul(next_b_den_coeff, next_b_den_A2_power)\n        )\n\n        return (\n            new_a_num_acc_A0,\n            new_a_den_acc_A0,\n            new_b_num_acc_A0,\n            new_b_den_acc_A0,\n            new_a_num_acc_A2,\n            new_a_den_acc_A2,\n            new_b_num_acc_A2,\n            new_b_den_acc_A2,\n            next_xA0_power,\n            next_xA2_power,\n        )\n\n    def _finalize_function_challenge_dupl(\n        self,\n        a_num_acc_A0: ModuloCircuitElement,\n        a_den_acc_A0: ModuloCircuitElement,\n        b_num_acc_A0: ModuloCircuitElement,\n        b_den_acc_A0: ModuloCircuitElement,\n        a_num_acc_A2: ModuloCircuitElement,\n        a_den_acc_A2: ModuloCircuitElement,\n        b_num_acc_A2: ModuloCircuitElement,\n        b_den_acc_A2: ModuloCircuitElement,\n        yA0: ModuloCircuitElement,\n        yA2: ModuloCircuitElement,\n        coeff_A0: ModuloCircuitElement,\n        coeff_A2: ModuloCircuitElement,\n    ):\n        F_A0 = self.add(\n            self.div(a_num_acc_A0, a_den_acc_A0),\n            self.mul(yA0, self.div(b_num_acc_A0, b_den_acc_A0)),\n            comment=\"a(x0) + y0 b(x0)\",\n        )\n        F_A2 = self.add(\n            self.div(a_num_acc_A2, a_den_acc_A2),\n            self.mul(yA2, self.div(b_num_acc_A2, b_den_acc_A2)),\n            comment=\"a(x2) + y2 b(x2)\",\n        )\n\n        # return coeff0*F(A0) - coeff2*F(A2)\n        res = self.sub(self.mul(coeff_A0, F_A0), self.mul(coeff_A2, F_A2))\n        return res\n\n\nclass BasicEC(ModuloCircuit):\n    def __init__(self, name: str, curve_id: int, compilation_mode: int = 0):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            generic_circuit=True,\n            compilation_mode=compilation_mode,\n        )\n        self.curve = CURVES[curve_id]\n\n    def _compute_adding_slope(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        Q: tuple[ModuloCircuitElement, ModuloCircuitElement],\n    ):\n        xP, yP = P\n        xQ, yQ = Q\n        slope = self.div(self.sub(yP, yQ), self.sub(xP, xQ))\n        return slope\n\n    def _compute_doubling_slope(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        A: ModuloCircuitElement,\n    ):\n\n        xP, yP = P\n        # Compute doubling slope m = (3x^2 + A) / 2y\n        three = self.set_or_get_constant(self.field(3))\n\n        m_num = self.add(\n            self.mul(three, self.mul(xP, xP)),\n            A,\n        )\n        m_den = self.add(yP, yP)\n        m = self.div(m_num, m_den)\n        return m\n\n    def add_points(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        Q: tuple[ModuloCircuitElement, ModuloCircuitElement],\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        xP, yP = P\n        xQ, yQ = Q\n        slope = self._compute_adding_slope(P, Q)\n        slope_sqr = self.mul(slope, slope)\n        nx = self.sub(self.sub(slope_sqr, xP), xQ)\n        ny = self.sub(self.mul(slope, self.sub(xP, nx)), yP)\n        return (nx, ny)\n\n    def double_point(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        A: ModuloCircuitElement,\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        xP, yP = P\n        slope = self._compute_doubling_slope(P, A)\n        slope_sqr = self.mul(slope, slope)\n        nx = self.sub(self.sub(slope_sqr, xP), xP)\n        ny = self.sub(self.mul(slope, self.sub(xP, nx)), yP)\n        return (nx, ny)\n\n    def scalar_mul_2_pow_k(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        A: ModuloCircuitElement,\n        k: int,\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        for _ in range(k):\n            P = self.double_point(P, A)\n        return P\n\n    def _is_on_curve_G1_weirstrass(\n        self,\n        x: ModuloCircuitElement,\n        y: ModuloCircuitElement,\n        A: ModuloCircuitElement,\n        b: ModuloCircuitElement,\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        # y^2 = x^3 + ax + b\n        y2 = self.mul(y, y)\n        x3 = self.mul(x, self.mul(x, x))\n        ax = self.mul(A, x)\n        x3_ax_b = self.add(x3, self.add(ax, b))\n        return y2, x3_ax_b\n\n    def negate_point(\n        self, P: tuple[ModuloCircuitElement, ModuloCircuitElement]\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"Negate a point in G1.\"\"\"\n        x, y = P\n        return (x, self.neg(y))\n\n    def add_points(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        Q: tuple[ModuloCircuitElement, ModuloCircuitElement],\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"Add two points in G1.\"\"\"\n        xP, yP = P\n        xQ, yQ = Q\n        slope = self._compute_adding_slope(P, Q)\n        slope_sqr = self.mul(slope, slope)\n        nx = self.sub(self.sub(slope_sqr, xP), xQ)\n        ny = self.sub(self.mul(slope, self.sub(xP, nx)), yP)\n        return (nx, ny)\n\n    def double_point_a_eq_0(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"Double a point in G1 when curve parameter a=0.\"\"\"\n        xP, yP = P\n        three = self.set_or_get_constant(self.field(3))\n        slope = self.div(\n            self.mul(three, self.mul(xP, xP)), self.add(yP, yP)  # 3x^2  # 2y\n        )\n        slope_sqr = self.mul(slope, slope)\n        nx = self.sub(self.sub(slope_sqr, xP), xP)\n        ny = self.sub(self.mul(slope, self.sub(xP, nx)), yP)\n        return (nx, ny)\n\n    def triple_point(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        A: ModuloCircuitElement,\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"Triple a point in G1.\"\"\"\n        xP, yP = P\n        # compute λ1 = (3p.x²+a)/2p.y,\n        xx = self.square(xP)\n        three_xx = self.sum([xx, xx, xx])\n        m_num = self.add(three_xx, A)\n        λ1 = self.div(m_num, self.double(yP))\n\n        # xr = λ1²-2p.x\n        x2 = self.sub(self.square(λ1), self.add(xP, xP))\n\n        # omit y2 computation, and\n        # compute λ2 = 2p.y/(x2 − p.x) − λ1.\n        x1x2 = self.sub(xP, x2)\n        λ2 = self.div(self.double(yP), x1x2)\n        λ2 = self.sub(λ2, λ1)\n\n        # xr = λ²-p.x-x2\n        xr = self.sub(self.square(λ2), self.add(xP, x2))\n\n        # yr = λ(p.x-xr) - p.y\n        yr = self.sub(self.mul(λ2, self.sub(xP, xr)), yP)\n\n        return (xr, yr)\n\n    def double_n_times(\n        self, P: tuple[ModuloCircuitElement, ModuloCircuitElement], n: int\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"Double a point n times in G1.\"\"\"\n        Q = P\n        for _ in range(n):\n            Q = self.double_point_a_eq_0(Q)\n        return Q\n\n    def n_quadruple_and_add(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        adds: list[tuple[ModuloCircuitElement, ModuloCircuitElement]],\n        A_weirstrass: ModuloCircuitElement,\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"Quadruple a point n times and add it to the point.\"\"\"\n        Q = P\n        for add in adds:\n            Q = self.double_point(Q, A_weirstrass)\n            Q = self.double_and_add(Q, add)\n        return Q\n\n    def double_and_add(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        add: tuple[ModuloCircuitElement, ModuloCircuitElement],\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"Double a point and add it to the point.\"\"\"\n        Px, Py = P\n        Qx, Qy = add\n        # compute λ1 = (q.y-p.y)/(q.x-p.x)\n        yqyp = self.sub(Qy, Py)\n        xqxp = self.sub(Qx, Px)\n        λ1 = self.div(yqyp, xqxp)\n\n        # compute x2 = λ1²-p.x-q.x\n        x2 = self.sub(self.square(λ1), self.add(Px, Qx))\n\n        # omit y2 computation\n\n        # compute -λ2 = λ1+2*p.y/(x2-p.x)\n        ypyp = self.double(Py)\n        x2xp = self.sub(x2, Px)\n        λ2 = self.div(ypyp, x2xp)\n        λ2 = self.add(λ1, λ2)\n\n        # compute x3 = (-λ2)²-p.x-x2\n        x3 = self.sub(self.square(λ2), self.add(Px, x2))\n\n        # compute y3 = -λ2*(x3 - p.x)-p.y\n        y3 = self.sub(self.mul(λ2, self.sub(x3, Px)), Py)\n\n        return (x3, y3)\n\n\nclass BasicECG2(Fp2Circuits):\n    def __init__(self, name: str, curve_id: int, compilation_mode: int = 0):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            generic_circuit=True,\n            compilation_mode=compilation_mode,\n        )\n        self.curve = CURVES[curve_id]\n\n    def _is_on_curve_G2_weirstrass(\n        self,\n        x0: ModuloCircuitElement,\n        x1: ModuloCircuitElement,\n        y0: ModuloCircuitElement,\n        y1: ModuloCircuitElement,\n        a: ModuloCircuitElement,\n        b0: ModuloCircuitElement,\n        b1: ModuloCircuitElement,\n    ):\n        # y^2 = x^3 + ax + b [Fp2]\n\n        y2 = self.fp2_square([y0, y1])\n        x2 = self.fp2_square([x0, x1])\n        x3 = self.fp2_mul([x0, x1], x2)\n\n        ax = [self.mul(a, x0), self.mul(a, x1)]\n        ax_b = [self.add(ax[0], b0), self.add(ax[1], b1)]\n\n        x3_ax_b = [self.add(x3[0], ax_b[0]), self.add(x3[1], ax_b[1])]\n\n        return y2, x3_ax_b\n\n    def _compute_adding_slope(\n        self,\n        P: tuple[\n            tuple[ModuloCircuitElement, ModuloCircuitElement],\n            tuple[ModuloCircuitElement, ModuloCircuitElement],\n        ],\n        Q: tuple[\n            tuple[ModuloCircuitElement, ModuloCircuitElement],\n            tuple[ModuloCircuitElement, ModuloCircuitElement],\n        ],\n    ):\n        xP, yP = P\n        xQ, yQ = Q\n        slope = self.fp2_div(self.vector_sub(yP, yQ), self.vector_sub(xP, xQ))\n        return slope\n\n    def _compute_doubling_slope_a_eq_0(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n    ):\n\n        xP, yP = P\n        # Compute doubling slope m = (3x^2 + A) / 2y\n        three = self.set_or_get_constant(self.field(3))\n\n        m_num = self.vector_scale(self.fp2_square(xP), three)\n        m_den = self.vector_add(yP, yP)\n        m = self.fp2_div(m_num, m_den)\n        return m\n\n    def add_points(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        Q: tuple[ModuloCircuitElement, ModuloCircuitElement],\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        xP, yP = P\n        xQ, yQ = Q\n        slope = self._compute_adding_slope(P, Q)\n        slope_sqr = self.fp2_square(slope)\n        nx = self.vector_sub(self.vector_sub(slope_sqr, xP), xQ)\n        ny = self.vector_sub(self.fp2_mul(slope, self.vector_sub(xP, nx)), yP)\n        return (nx, ny)\n\n    def double_point_a_eq_0(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        xP, yP = P\n        slope = self._compute_doubling_slope_a_eq_0(P)\n        slope_sqr = self.fp2_square(slope)\n        nx = self.vector_sub(self.vector_sub(slope_sqr, xP), xP)\n        ny = self.vector_sub(self.fp2_mul(slope, self.vector_sub(xP, nx)), yP)\n        return (nx, ny)\n\n    def double_n_times(self, P, n):\n        Q = P\n        for _ in range(n):\n            Q = self.double_point_a_eq_0(Q)\n        return Q\n\n    def negate_point(\n        self, P: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]\n    ) -> tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]:\n        x, y = P\n        return (x, self.vector_neg(y))\n\n    def double_and_add(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        add: tuple[ModuloCircuitElement, ModuloCircuitElement],\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"Double a point and add it to the point.\"\"\"\n        Px, Py = P\n        Qx, Qy = add\n        # compute λ1 = (q.y-p.y)/(q.x-p.x)\n        yqyp = self.vector_sub(Qy, Py)\n        xqxp = self.vector_sub(Qx, Px)\n        λ1 = self.fp2_div(yqyp, xqxp)\n\n        # compute x2 = λ1²-p.x-q.x\n        x2 = self.vector_sub(self.fp2_square(λ1), self.vector_add(Px, Qx))\n\n        # omit y2 computation\n\n        # compute -λ2 = λ1+2*p.y/(x2-p.x)\n        ypyp = self.vector_add(Py, Py)\n        x2xp = self.vector_sub(x2, Px)\n        λ2 = self.fp2_div(ypyp, x2xp)\n        λ2 = self.vector_add(λ1, λ2)\n\n        # compute x3 = (-λ2)²-p.x-x2\n        x3 = self.vector_sub(self.fp2_square(λ2), self.vector_add(Px, x2))\n\n        # compute y3 = -λ2*(x3 - p.x)-p.y\n        y3 = self.vector_sub(self.fp2_mul(λ2, self.vector_sub(x3, Px)), Py)\n\n        return (x3, y3)\n\n\nclass FakeGLVCircuits(BasicEC):\n    def __init__(self, name: str, curve_id: int, compilation_mode: int = 0):\n        super().__init__(name, curve_id, compilation_mode)\n\n    def prepare_points_glv_fake_glv(\n        self, Px, P0y, P1y, Qx, Q0y, Phi_P0y, Phi_P1y, Phi_Q0y, Gen, third_root\n    ):\n        P0 = (Px, P0y)\n        P1 = (Px, P1y)\n        Q0 = (Qx, Q0y)\n\n        S0 = self.add_points(P0, Q0)\n        S1 = (S0[0], self.neg(S0[1]))\n\n        S2 = self.add_points(P1, Q0)\n\n        Phi_P0x = self.mul(Px, third_root)\n\n        Phi_P0 = (Phi_P0x, Phi_P0y)\n        Phi_P1 = (Phi_P0x, Phi_P1y)\n\n        Phi_Q0x = self.mul(Q0[0], third_root)\n        Phi_Q0 = (Phi_Q0x, Phi_Q0y)\n\n        Phi_S0 = self.add_points(Phi_P0, Phi_Q0)\n        Phi_S1 = (Phi_S0[0], self.neg(Phi_S0[1]))\n\n        Phi_S2 = self.add_points(Phi_P1, Phi_Q0)\n        Phi_S3 = (Phi_S2[0], self.neg(Phi_S2[1]))\n\n        B1 = self.add_points(S1, Phi_S1)  #  P + Q + Φ(P) + Φ(Q)\n        B2 = self.add_points(S1, Phi_S2)  #  P + Q + Φ(P) - Φ(Q)\n        B3 = self.add_points(S1, Phi_S3)  #  P + Q - Φ(P) + Φ(Q)\n        B4 = self.add_points(S1, Phi_S0)  #  P + Q - Φ(P) - Φ(Q)\n        B5 = self.add_points(S2, Phi_S1)  #  P - Q + Φ(P) + Φ(Q)\n        B6 = self.add_points(S2, Phi_S2)  #  P - Q + Φ(P) - Φ(Q)\n        B7 = self.add_points(S2, Phi_S3)  #  P - Q - Φ(P) + Φ(Q)\n        B8 = self.add_points(S2, Phi_S0)  #  P - Q - Φ(P) - Φ(Q)\n\n        B9y = self.neg(B8[1])  # -P + Q + Φ(P) + Φ(Q)\n        B10y = self.neg(B7[1])  #  -P + Q + Φ(P) - Φ(Q)\n        B11y = self.neg(B6[1])  #  -P + Q - Φ(P) + Φ(Q)\n        B12y = self.neg(B5[1])  #  -P + Q - Φ(P) - Φ(Q)\n        B13y = self.neg(B4[1])  #  -P - Q + Φ(P) + Φ(Q)\n        B14y = self.neg(B3[1])  #  -P - Q + Φ(P) - Φ(Q)\n        B15y = self.neg(B2[1])  #  -P - Q - Φ(P) + Φ(Q)\n        B16y = self.neg(B1[1])  #  -P - Q - Φ(P) - Φ(Q)\n\n        Acc = self.add_points(B1, Gen)\n\n        return (\n            B1,\n            B2,\n            B3,\n            B4,\n            B5,\n            B6,\n            B7,\n            B8,\n            B9y,\n            B10y,\n            B11y,\n            B12y,\n            B13y,\n            B14y,\n            B15y,\n            B16y,\n            Phi_P0x,\n            Phi_Q0x,\n            Acc,\n        )\n\n    def prepare_points_fake_glv(\n        self,\n        P: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        Q: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        s2_sign: ModuloCircuitElement,\n        A_weirstrass: ModuloCircuitElement,\n    ):\n        P = (P[0], P[1])\n        Q = (Q[0], Q[1])\n\n        table_P = [None, None, None]\n        # table_P[0] = (P[0], self.neg(P[0])) # Unused\n        table_P[1] = P\n        table_P[2] = self.triple_point(P, A_weirstrass)\n\n        table_R = [None, None, None]\n        R_signed = [Q[0], self.mul(s2_sign, Q[1])]\n        table_R[0] = self.negate_point(R_signed)\n        table_R[1] = R_signed\n        table_R[2] = self.triple_point(R_signed, A_weirstrass)\n\n        T1 = self.add_points(table_P[2], table_R[2])\n        T2 = Acc = self.add_points(table_P[1], table_R[1])\n        T3 = self.add_points(table_P[2], table_R[1])\n        T4 = self.add_points(table_P[1], table_R[2])\n        T5y = self.neg(T2[1])\n        T6y = self.neg(T1[1])\n        T7y = self.neg(T4[1])\n        T8y = self.neg(T3[1])\n\n        T9 = self.add_points(table_P[2], table_R[0])\n        _neg_table_R_verify_2 = self.negate_point(table_R[2])\n        T10 = self.add_points(table_P[1], _neg_table_R_verify_2)\n        T11 = self.add_points(table_P[2], _neg_table_R_verify_2)\n        T12 = self.add_points(table_R[0], table_P[1])\n\n        T13y = self.neg(T10[1])\n        T14y = self.neg(T9[1])\n        T15y = self.neg(T12[1])\n        T16y = self.neg(T11[1])\n\n        # P0y = table_P[0][1]\n        return (\n            T1,\n            T2,\n            T3,\n            T4,\n            T5y,\n            T6y,\n            T7y,\n            T8y,\n            T9,\n            T10,\n            T11,\n            T12,\n            T13y,\n            T14y,\n            T15y,\n            T16y,\n            table_R[2],\n            table_R[0][1],  # R0y\n        )\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/final_exp.py",
    "content": "\"\"\"\nDeprecated Final Exp Circuits since we now use the final exp witness.\nKept for reference/in case we need it in the future.\n\"\"\"\n\nimport copy\nfrom random import randint\n\nfrom garaga.algebra import get_sparsity\nfrom garaga.curves import BLS12_381_ID, BN254_ID, CURVES, CurveID\nfrom garaga.extension_field_modulo_circuit import (\n    AccPolyInstructionType,\n    ExtensionFieldModuloCircuit,\n    ModuloCircuitElement,\n    Polynomial,\n    PyFelt,\n)\nfrom garaga.hints.extf_mul import (\n    nondeterministic_extension_field_mul_divmod,\n    nondeterministic_square_torus,\n)\nfrom garaga.hints.frobenius import get_frobenius_maps, get_V_torus_powers\nfrom garaga.modulo_circuit import WriteOps\nfrom garaga.poseidon_transcript import CairoPoseidonTranscript\n\n\nclass FinalExpTorusCircuit(ExtensionFieldModuloCircuit):\n    def __init__(\n        self, name: str, curve_id: int, extension_degree: int, hash_input: bool = True\n    ):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            extension_degree=extension_degree,\n            hash_input=hash_input,\n        )\n        self.frobenius_maps = {}\n        self.v_torus_powers_inv = {}\n        for i in [1, 2, 3]:\n            _, self.frobenius_maps[i] = get_frobenius_maps(\n                curve_id=curve_id, extension_degree=extension_degree, frob_power=i\n            )\n            self.v_torus_powers_inv[i] = get_V_torus_powers(\n                curve_id, extension_degree, i\n            ).get_coeffs()\n\n            # Write to circuit. Note : add_constant will return existing circuit constant if it already exists.\n            self.v_torus_powers_inv[i] = [\n                self.set_or_get_constant(v) for v in self.v_torus_powers_inv[i]\n            ]\n        self.ops_counter.update({\"MUL_TORUS\": 0, \"SQUARE_TORUS\": 0})\n        self.set_or_get_constant(self.field(-1))\n\n    def final_exp_part1(self, X: list[PyFelt]) -> list[ModuloCircuitElement]:\n        return NotImplementedError\n\n    def square_torus(\n        self: ExtensionFieldModuloCircuit, X: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Computes the square of an element X in Torus Based Arithmetic\n        SQ = 1/2(X+ v/X) <=> v = X (2SQ - X)\n        Use hint to avoid v/X inversion.\n        From SQ and X, compute v = X (2SQ - X).\n        \"\"\"\n        self.ops_counter[\"SQUARE_TORUS\"] += 1\n        SQ: list[PyFelt] = nondeterministic_square_torus(\n            X, self.curve_id, biject_from_direct=True\n        )\n        SQ = self.write_elements(SQ, WriteOps.COMMIT)\n        two_SQ = self.vector_add(SQ, SQ)\n        two_SQ_min_X = self.vector_sub(two_SQ, X)\n\n        # %{\n        Q, V = nondeterministic_extension_field_mul_divmod(\n            [X, two_SQ_min_X], self.curve_id, self.extension_degree\n        )\n        Q = Polynomial(Q)\n        # Sanity check : ensure V is indeed V(x) = 1*x.\n        assert all([v.value == 0 for i, v in enumerate(V) if i != 1])\n        assert V[1].value == 1, f\"V(x) = {V[1].value}\"\n        # %}\n\n        # Hacky way to pass SQ as R so that it is hashed.\n        # Result is known in advance to be V, and not SQ.\n        # R_sparsity encoded as this bypasses the usage of R coefficients.\n        # Essentially, r_sparsity encodes R=V direcly by its static sparsity.\n\n        self.accumulate_poly_instructions[0].append(\n            AccPolyInstructionType.SQUARE_TORUS,\n            Pis=[X, two_SQ_min_X],\n            Q=Q,\n            R=SQ,\n            r_sparsity=[0, 2] + [0] * (self.extension_degree - 2),\n        )\n\n        return SQ\n\n    def n_square_torus(self, X: list[PyFelt], n: int) -> list[PyFelt]:\n        result = self.square_torus(X)\n        for _ in range(n - 1):\n            result = self.square_torus(result)\n        return result\n\n    def mul_torus(\n        self, X: list[ModuloCircuitElement], Y: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Computes Mul(X,Y) = (X*Y + v)/(X+Y)\n        \"\"\"\n        self.ops_counter[\"MUL_TORUS\"] += 1\n        xy = self.extf_mul([X, Y], self.extension_degree)\n\n        num = copy.deepcopy(xy)\n        num[1] = self.add(xy[1], self.set_or_get_constant(1))\n\n        den = self.vector_add(X, Y)\n        return self.extf_div(num, den, self.extension_degree)\n\n    def inverse_torus(self, X: list[ModuloCircuitElement]):\n        return [self.neg(x) for x in X]\n\n    def decompress_torus(\n        self, X: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Returns (X + w) / (X - w). Size is doubled.\n        \"\"\"\n        zero = self.set_or_get_constant(0)\n        num = [\n            X[0],\n            self.set_or_get_constant(1),\n            X[1],\n            zero,\n            X[2],\n            zero,\n            X[3],\n            zero,\n            X[4],\n            zero,\n            X[5],\n            zero,\n        ]\n        den = num.copy()\n        den[1] = self.set_or_get_constant(-1)\n\n        return self.extf_div(num, den, 2 * self.extension_degree, acc_index=1)\n\n    def frobenius_torus(\n        self, X: list[ModuloCircuitElement], frob_power: int\n    ) -> list[ModuloCircuitElement]:\n        frob = [None] * self.extension_degree\n        for i, list_op in enumerate(self.frobenius_maps[frob_power]):\n            list_op_result = []\n            for index, constant in list_op:\n                if constant == 1:\n                    list_op_result.append(X[index])\n                else:\n                    list_op_result.append(\n                        self.mul(\n                            X[index], self.set_or_get_constant(self.field(constant))\n                        )\n                    )\n            frob[i] = list_op_result[0]\n            for op_res in list_op_result[1:]:\n                frob[i] = self.add(frob[i], op_res)\n\n        if len(self.v_torus_powers_inv[frob_power]) == 1:\n            return self.vector_scale(frob, self.v_torus_powers_inv[frob_power][0])\n        else:\n            Y = [\n                self.set_or_get_constant(v) for v in self.v_torus_powers_inv[frob_power]\n            ]\n            return self.extf_mul(\n                Ps=[frob, Y],\n                extension_degree=self.extension_degree,\n                Ps_sparsities=[None, get_sparsity(Y)],\n            )\n\n    def easy_part(\n        self, num: list[PyFelt], den: list[PyFelt]\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Computes the easy part of the final exponentiation.\n        \"\"\"\n\n        assert len(num) == 6, f\"Expected 6 elements in num, got {len(num)}\"\n        assert len(den) == 6, f\"Expected 6 elements in den, got {len(den)}\"\n\n        num = self.write_elements(num, operation=WriteOps.INPUT)\n        num = self.vector_neg(num)\n        den = self.write_elements(den, WriteOps.INPUT)\n\n        c = self.extf_div(num, den, self.extension_degree)\n        t0 = self.frobenius_torus(c, 2)\n        c = self.mul_torus(t0, c)\n        return c\n\n    def final_exp_finalize(self, t0: list[PyFelt], t2: list[PyFelt]):\n        # Computes Decompress Torus(MulTorus(t0, t2)).\n        # Only valid if (t0 + t2) != 0.\n        t0 = self.write_elements(t0, WriteOps.INPUT)\n        t2 = self.write_elements(t2, WriteOps.INPUT)\n\n        # for x in t0:\n        #     print(f\"T0 input {hex(x.value)}\")\n        # for x in t2:\n        #     print(f\"T2 input {hex(x.value)}\")\n\n        mul = self.mul_torus(t0, t2)\n\n        res = self.decompress_torus(mul)\n        self.finalize_circuit()\n        return res\n\n\nclass GaragaBLS12_381FinalExp(FinalExpTorusCircuit):\n    def __init__(\n        self, name: str = None, hash_input: bool = True, init_hash: int = None\n    ):\n        super().__init__(\n            name=name or \"Final Exp BLS12_381\",\n            curve_id=BLS12_381_ID,\n            extension_degree=6,\n            hash_input=hash_input,\n        )\n        if init_hash is not None:\n            self.transcript = CairoPoseidonTranscript(init_hash)\n\n    def expt_half_torus(self, X: list[ModuloCircuitElement]):\n        z = self.square_torus(X)\n        z = self.mul_torus(X, z)\n        z = self.square_torus(z)\n        z = self.square_torus(z)\n        z = self.mul_torus(X, z)\n        z = self.n_square_torus(z, 3)\n        z = self.mul_torus(X, z)\n        z = self.n_square_torus(z, 9)\n        z = self.mul_torus(X, z)\n        z = self.n_square_torus(z, 32)\n        z = self.mul_torus(X, z)\n        z = self.n_square_torus(z, 15)\n        z = self.inverse_torus(z)\n        return z\n\n    def expt_torus(self, X):\n        z = self.expt_half_torus(X)\n        return self.square_torus(z)\n\n    def final_exp_part1(self, num: list[PyFelt], den: list[PyFelt]) -> list[PyFelt]:\n        \"\"\"\n        X is a list of 12 elements in the tower of extension fields.\n        \"\"\"\n        c = self.easy_part(num, den)\n\n        # 2. Hard part (up to permutation)\n        # 3(p⁴-p²+1)/r\n        # Daiki Hayashida, Kenichiro Hayasaka and Tadanori Teruya\n        # https://eprint.iacr.org/2020/875.pdf\n        # performed in torus compressed form\n        t0_0 = self.square_torus(c)\n        t1 = self.expt_half_torus(t0_0)\n        t2 = self.inverse_torus(c)\n        t1 = self.mul_torus(t1, t2)\n        t2 = self.expt_torus(t1)\n        t1 = self.inverse_torus(t1)\n        t1 = self.mul_torus(t1, t2)\n        t2 = self.expt_torus(t1)\n        t1 = self.frobenius_torus(t1, 1)\n        t1 = self.mul_torus(t1, t2)\n        t0 = self.expt_torus(t1)\n        t2 = self.expt_torus(t0)\n        t0 = self.frobenius_torus(t1, 2)\n        t1 = self.inverse_torus(t1)\n        t1 = self.mul_torus(t1, t2)\n\n        # Output in fixed order (t0, c, _sum):\n        t1 = self.mul_torus(t1, t0)\n        self.extend_output(t1)\n        c = self.mul_torus(c, t0_0)\n        self.extend_output(c)\n        # The final exp result is DecompressTorus(MulTorus(c, t1)\n        # MulTorus(t1, c) = (t1*c + v)/(t1 + c).\n        # (t1+c = 0) ==> MulTorus(t1, c) is E12.One() in the Torus.\n        _sum = self.vector_add(t1, c)\n        self.extend_output(_sum)\n        # From this case we can conclude the result is 1 or !=1 without decompression.\n        # In case we want to decompress to get the result in GT,\n        # we might need to decompress with another circuit, if the result is not 1 (_sum!=0).\n        return t1, c, _sum\n\n\nclass GaragaBN254FinalExp(FinalExpTorusCircuit):\n    def __init__(\n        self, name: str = None, hash_input: bool = True, init_hash: int = None\n    ):\n        super().__init__(\n            name=name or \"Final Exp BN254\",\n            curve_id=BN254_ID,\n            extension_degree=6,\n            hash_input=hash_input,\n        )\n        if init_hash is not None:\n            self.transcript = CairoPoseidonTranscript(init_hash)\n\n    def expt_torus(self, X: list[PyFelt]):\n        t3 = self.square_torus(X)\n        t5 = self.square_torus(t3)\n        result = self.square_torus(t5)\n        t0 = self.square_torus(result)\n        t2 = self.mul_torus(X, t0)\n        t0 = self.mul_torus(t3, t2)\n        t1 = self.mul_torus(X, t0)\n        t4 = self.mul_torus(result, t2)\n        t6 = self.square_torus(t2)\n        t1 = self.mul_torus(t0, t1)\n        t0 = self.mul_torus(t3, t1)\n        t6 = self.n_square_torus(t6, 6)\n        t5 = self.mul_torus(t5, t6)\n        t5 = self.mul_torus(t4, t5)\n        t5 = self.n_square_torus(t5, 7)\n        t4 = self.mul_torus(t4, t5)\n        t4 = self.n_square_torus(t4, 8)\n        t4 = self.mul_torus(t0, t4)\n        t3 = self.mul_torus(t3, t4)\n        t3 = self.n_square_torus(t3, 6)\n        t2 = self.mul_torus(t2, t3)\n        t2 = self.n_square_torus(t2, 8)\n        t2 = self.mul_torus(t0, t2)\n        t2 = self.n_square_torus(t2, 6)\n        t2 = self.mul_torus(t0, t2)\n        t2 = self.n_square_torus(t2, 10)\n        t1 = self.mul_torus(t1, t2)\n        t1 = self.n_square_torus(t1, 6)\n        t0 = self.mul_torus(t0, t1)\n        z = self.mul_torus(result, t0)\n        return z\n\n    def final_exp_part1(\n        self, num: list[PyFelt], den: list[PyFelt]\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        single pairing -> unsafe = True = 1\n        double pairing -> unsafe = False = 0\n        \"\"\"\n        c = self.easy_part(num, den)\n\n        # 2. Hard part (up to permutation)\n        # 2x₀(6x₀²+3x₀+1)(p⁴-p²+1)/r\n        # Duquesne and Ghammam\n        # https://eprint.iacr.org/2015/192.pdf\n        # Fuentes et al. (alg. 6)\n        # performed in torus compressed form\n        t0 = self.expt_torus(c)\n        t0 = self.inverse_torus(t0)\n        t0 = self.square_torus(t0)\n        t1 = self.square_torus(t0)\n        t1 = self.mul_torus(t0, t1)\n        t2 = self.expt_torus(t1)\n        t2 = self.inverse_torus(t2)\n        t3 = self.inverse_torus(t1)\n        t1 = self.mul_torus(t2, t3)\n        t3 = self.square_torus(t2)\n        t4 = self.expt_torus(t3)\n        t4 = self.mul_torus(t1, t4)\n        t3 = self.mul_torus(t0, t4)\n        t0 = self.mul_torus(t2, t4)\n        t0 = self.mul_torus(c, t0)\n        t2 = self.frobenius_torus(t3, 1)\n        t0 = self.mul_torus(t2, t0)\n        t2_tmp = self.frobenius_torus(t4, 2)\n        t2 = self.inverse_torus(c)\n        t2 = self.mul_torus(t2, t3)\n\n        # Output in fixed order (t0, t2, _sum):\n        t0 = self.mul_torus(t0, t2_tmp)\n        self.extend_output(t0)\n        t2 = self.frobenius_torus(t2, 3)\n        self.extend_output(t2)\n        # The final exp result is DecompressTorus(MulTorus(t0, t2)).\n        # MulTorus(t0, t2) = (t0*t2 + v)/(t0 + t2).\n        # (T0+T2 = 0) ==> MulTorus(t0, t2) is one in the Torus.\n        _sum = self.vector_add(t0, t2)\n        self.extend_output(_sum)\n        # From this case we can conclude the result is 1 or !=1 without decompression.\n        # In case we want to decompress to get the result in GT,\n        # we might need to decompress with another circuit, if the result is not 1 (_sum!=0).\n\n        return t0, t2, _sum\n\n\nGaragaFinalExp = {\n    CurveID.BN254: GaragaBN254FinalExp,\n    CurveID.BLS12_381: GaragaBLS12_381FinalExp,\n}\n\n\ndef test_final_exp(curve_id: CurveID):\n    from garaga.points import G1G2Pair, G1Point, G2Point, tower_to_direct\n\n    order = CURVES[curve_id.value].n\n    pairs = []\n    n_pairs = 1\n    unsafe = True if n_pairs == 1 else False\n    for _ in range(n_pairs):\n        n1, n2 = randint(1, order), randint(1, order)\n        p1, p2 = G1Point.get_nG(curve_id, n1), G2Point.get_nG(curve_id, n2)\n        pairs.append(G1G2Pair(p1, p2))\n\n    base_class = GaragaFinalExp[curve_id]\n    part1 = base_class(hash_input=False)\n    field = part1.field\n\n    XT: list[int] = G1G2Pair.miller(pairs).value_coeffs\n    ET: list[int] = G1G2Pair.pair(pairs).value_coeffs\n\n    XT = [part1.field(x) for x in XT]\n    ET = [part1.field(x) for x in ET]\n\n    XD = tower_to_direct(XT, curve_id.value, 12)\n    ED = tower_to_direct(ET, curve_id.value, 12)\n\n    num_indexes = [0, 2, 4, 6, 8, 10]\n    den_indexes = [1, 3, 5, 7, 9, 11]\n    num = [XD[i] for i in num_indexes]\n\n    if unsafe:\n        den = [XD[i] for i in den_indexes]\n    else:\n        if [x.value for x in [XD[i] for i in den_indexes]] == [0, 0, 0, 0, 0, 0]:\n            den = [\n                field.one(),\n                field.zero(),\n                field.zero(),\n                field.zero(),\n                field.zero(),\n                field.zero(),\n            ]\n\n        else:\n            den = [XD[i] for i in den_indexes]\n\n    t0, t2, _sum = part1.final_exp_part1(num, den)\n    part1.finalize_circuit()\n    _sum = [x.value for x in _sum]\n\n    part2 = base_class(hash_input=False)\n    if _sum == [0, 0, 0, 0, 0, 0]:\n        f = [field.one()] + [field.zero] * 11\n    else:\n        t0 = [x.felt for x in t0]\n        t2 = [x.felt for x in t2]\n        f = part2.final_exp_finalize(t0, t2)\n\n    assert [f.value for f in f] == [\n        e.value for e in ED\n    ], f\"Final exp in circuit and internal do not match f={[f.value for f in f]}\\ne={[e.value for e in ED]}\"\n    # print(f\"{curve_id} Final Exp random test pass\")\n    return part1, part2\n\n\nif __name__ == \"__main__\":\n    pass\n\n    from garaga.curves import CurveID, Polynomial\n\n    # def test_frobenius_torus():\n    #     from archive_tmp.bn254.pairing_final_exp import frobenius_torus\n    #     field = get_base_field(CurveID.BN254.value)\n    #     X = [field(random.randint(0, field.p - 1)) for _ in range(6)]\n    #     t = FinalExpTorusCircuit(\"test\", CurveID.BN254.value, 6)\n    #     t.create_powers_of_Z(field(2))\n    #     X = t.write_elements(X)\n    #     XF = t.frobenius_torus(X, 1)\n    #     # Xpoly = Polynomial([x.felt for x in X])\n    #     # XFpoly = Xpoly.pow(field.p, get_irreducible_poly(CurveID.BN254.value, ))\n    #     # assert t.finalize_circuit()\n    #     # t.values_segment = t.values_segment.non_interactive_transform()\n    #     TT = frobenius_torus([x.value for x in X])\n    #     assert all(x.value == y for x, y in zip(XF, TT))\n    #     t.print_value_segment()\n    # test_final_exp(CurveID.BN254)\n    # test_final_exp(CurveID.BLS12_381)\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/fp2.py",
    "content": "from garaga.algebra import Fp2, ModuloCircuitElement\nfrom garaga.hints.extf_mul import nondeterministic_extension_field_div\nfrom garaga.modulo_circuit import ModuloCircuit, WriteOps\n\n\nclass Fp2Circuits(ModuloCircuit):\n    \"\"\"\n    Implements circuits for Fp2 field operations.\n    \"\"\"\n\n    def __init__(\n        self,\n        name: str,\n        curve_id: int,\n        generic_circuit: bool = False,\n        compilation_mode: int = 0,\n    ):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            generic_circuit=generic_circuit,\n            compilation_mode=compilation_mode,\n        )\n\n    def fp2_is_non_zero(\n        self, a: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Returns [1,0] if a ≠ 0, [0,0] if a == 0, working in Fp2.\n        An Fp2 element is non-zero if either its real or imaginary part is non-zero.\n        \"\"\"\n        # Check if real part is non-zero\n        real_is_non_zero = self.fp_is_non_zero(a[0])\n\n        # Check if imaginary part is non-zero\n        imag_is_non_zero = self.fp_is_non_zero(a[1])\n\n        # Either part must be non-zero for the Fp2 element to be non-zero\n        # Using 1-(1-a)(1-b) = a + b - ab to compute OR\n        result = self.sub(\n            self.add(real_is_non_zero, imag_is_non_zero),\n            self.mul(real_is_non_zero, imag_is_non_zero),\n        )\n\n        # Return as Fp2 element [result, 0]\n        return [result, self.set_or_get_constant(0)]\n\n    def fp2_mul(self, X: list[ModuloCircuitElement], Y: list[ModuloCircuitElement]):\n        # Assumes the irreducible poly is X^2 + 1.\n        assert len(X) == len(Y) == 2 and all(\n            isinstance(x, ModuloCircuitElement) and isinstance(y, ModuloCircuitElement)\n            for x, y in zip(X, Y)\n        )\n        # xy = (x0 + i*x1) * (y0 + i*y1) = (x0*y0 - x1*y1) + i * (x0*y1 + x1*y0)\n        return [\n            self.sub(\n                self.mul(X[0], Y[0], comment=\"Fp2 mul start\"),\n                self.mul(X[1], Y[1]),\n                comment=\"Fp2 mul real part end\",\n            ),\n            self.add(\n                self.mul(X[0], Y[1]),\n                self.mul(X[1], Y[0]),\n                comment=\"Fp2 mul imag part end\",\n            ),\n        ]\n\n    def fp2_mul_by_non_residue(self, X: list[ModuloCircuitElement]):\n        assert len(X) == 2 and all(isinstance(x, ModuloCircuitElement) for x in X)\n        if self.curve_id == 1:\n            # Non residue (1,1)\n            # (a0 + i*a1) * (1 + i)\n            a_tmp = self.add(X[0], X[1])\n            a = self.add(a_tmp, a_tmp)\n            b = X[0]\n            z_a0 = self.sub(b, X[1])\n            z_a1 = self.sub(self.sub(a, b), X[1])\n            return [z_a0, z_a1]\n        elif self.curve_id == 0:\n            # Non residue (9, 1)\n            # (a0 + i*a1) * (9 + i)\n            a_tmp = self.add(X[0], X[1])\n            a = self.mul(a_tmp, self.set_or_get_constant(10))\n            b = self.mul(X[0], self.set_or_get_constant(9))\n            z_a0 = self.sub(b, X[1])\n            z_a1 = self.sub(self.sub(a, b), X[1])\n            return [z_a0, z_a1]\n\n        else:\n            raise ValueError(\n                f\"Unsupported curve id for fp2 mul by non residue: {self.curve_id}\"\n            )\n\n    def fp2_square(self, X: list[ModuloCircuitElement]):\n        # Assumes the irreducible poly is X^2 + 1.\n        # x² = (x0 + i x1)² = (x0² - x1²) + 2 * i * x0 * x1 = (x0+x1)(x0-x1) + i * 2 * x0 * x1.\n        # (x0+x1)*(x0-x1) is cheaper than x0² - x1². (2 ADD + 1 MUL) vs (1 ADD + 2 MUL) (16 vs 20 steps)\n        assert len(X) == 2 and all(isinstance(x, ModuloCircuitElement) for x in X)\n        return [\n            self.mul(self.add(X[0], X[1]), self.sub(X[0], X[1])),\n            self.double(self.mul(X[0], X[1])),\n        ]\n\n    def fp2_sqrt(\n        self, element: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Computes \"a\" square root of a field element.\n        /!\\ Warning : This circuit is non deterministic /!\\\n        /!\\ Two square roots exist for any non-zero element, and no constraint is enforced to select any of them /!\\\n        Raises ValueError if the element is not a quadratic residue.\n        \"\"\"\n        assert self.compilation_mode == 0, \"fp2_sqrt is not supported in cairo 1 mode\"\n\n        root = Fp2(element[0].felt, element[1].felt).sqrt()\n        if root is None:\n            raise ValueError(\"No square root found for the given element\")\n\n        if not root.lexicographically_largest:\n            root = Fp2.zero(element[0].p).__sub__(root)\n\n        root = self.write_elements([root.a0, root.a1], WriteOps.WITNESS)\n        self.fp2_mul_and_assert(root, root, element, comment=\"Fp2 sqrt\")\n        return root\n\n    def fp2_inv(self, X: list[ModuloCircuitElement]):\n        assert len(X) == 2 and all(isinstance(x, ModuloCircuitElement) for x in X)\n        t0 = self.mul(X[0], X[0], comment=\"Fp2 Inv start\")\n        t1 = self.mul(X[1], X[1])\n        t0 = self.add(t0, t1)\n        t1 = self.inv(t0)\n        inv0 = self.mul(X[0], t1, comment=\"Fp2 Inv real part end\")\n        inv1 = self.neg(self.mul(X[1], t1), comment=\"Fp2 Inv imag part end\")\n        return [inv0, inv1]\n\n    def fp2_div(self, X: list[ModuloCircuitElement], Y: list[ModuloCircuitElement]):\n        assert len(X) == len(Y) == 2 and all(\n            isinstance(x, ModuloCircuitElement) and isinstance(y, ModuloCircuitElement)\n            for x, y in zip(X, Y)\n        )\n        if self.compilation_mode == 0:\n            x_over_y = nondeterministic_extension_field_div(X, Y, self.curve_id, 2)\n            x_over_y = self.write_elements(x_over_y, WriteOps.WITNESS)\n            # x_over_y = d0 + i * d1\n            # y = y0 + i * y1\n            # x = x_over_y*y = d0*y0 - d1*y1 + i * (d0*y1 + d1*y0)\n            self.sub_and_assert(\n                a=self.mul(x_over_y[0], Y[0]), b=self.mul(x_over_y[1], Y[1]), c=X[0]\n            )\n            self.add_and_assert(\n                a=self.mul(x_over_y[0], Y[1]), b=self.mul(x_over_y[1], Y[0]), c=X[1]\n            )\n            return x_over_y\n        elif self.compilation_mode == 1:\n            # Todo : consider passing as calldata if possible.\n            inv = self.fp2_inv(Y)\n            return self.fp2_mul(X, inv)\n\n    def fp2_frobenius_map(\n        self, element: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Applies the Frobenius map to an element in F_{p^2}.\n        For an element a + bi, returns a - bi.\n\n        This is because:\n        (a + bi)^p = a^p + (bi)^p = a^p + b^p * i^p\n        In Fp: a^p = a, b^p = b\n        In Fp2: i^p = -i (p is odd > 2)\n        Therefore: (a + bi)^p = a - bi\n        \"\"\"\n        a, b = element  # element = a + bi\n        return [a, self.neg(b)]  # return a - bi\n\n    def fp2_add(\n        self, X: list[ModuloCircuitElement], Y: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        # Assumes elements are represented as pairs (a + bi)\n        return self.vector_add(X, Y)\n\n    def fp2_sub(self, X: list[ModuloCircuitElement], Y: list[ModuloCircuitElement]):\n        # Assumes elements are represented as pairs (a + bi)\n        return self.vector_sub(X, Y)\n\n    def fp2_mul_and_assert(\n        self,\n        a: list[ModuloCircuitElement],\n        b: list[ModuloCircuitElement],\n        c: list[ModuloCircuitElement],\n        comment: str | None = None,\n    ):\n        \"\"\"\n        Multiplies two Fp2 elements a and b and asserts the result equals c.\n        For a = (a0 + i*a1) and b = (b0 + i*b1), asserts:\n        c0 = a0*b0 - a1*b1\n        c1 = a0*b1 + a1*b0\n        \"\"\"\n        assert (\n            self.compilation_mode == 0\n        ), \"fp2_mul_and_assert is not supported in cairo 1 mode\"\n\n        assert len(a) == len(b) == len(c) == 2, \"Fp2 elements must be length 2\"\n\n        # Calculate intermediate products\n        a0b0 = self.mul(a[0], b[0], comment=f\"{comment}: a0*b0\" if comment else None)\n        a1b1 = self.mul(a[1], b[1], comment=f\"{comment}: a1*b1\" if comment else None)\n        a0b1 = self.mul(a[0], b[1], comment=f\"{comment}: a0*b1\" if comment else None)\n        a1b0 = self.mul(a[1], b[0], comment=f\"{comment}: a1*b0\" if comment else None)\n\n        # Assert real part: c0 = a0*b0 - a1*b1\n        self.add_and_assert(\n            a=a0b0,\n            b=self.neg(a1b1),\n            c=c[0],\n            comment=f\"{comment}: assert real part\" if comment else None,\n        )\n\n        # Assert imaginary part: c1 = a0*b1 + a1*b0\n        self.add_and_assert(\n            a=a0b1,\n            b=a1b0,\n            c=c[1],\n            comment=f\"{comment}: assert imaginary part\" if comment else None,\n        )\n\n        return c\n\n    def fp2_eval_horner(\n        self,\n        poly: list[ModuloCircuitElement],  # [a0_real, a0_imag, a1_real, a1_imag, ...]\n        z: list[ModuloCircuitElement],  # z = [real, imag]\n        poly_name: str = None,\n        var_name: str = \"z\",\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Evaluates a polynomial with Fp2 coefficients at point z using Horner's method.\n        Assumes that the polynomial is in the form a0 + a1*z + a2*z^2 + ... + an*z^n,\n        indexed with the constant coefficient first.\n        Coefficients are stored in a flat array where each consecutive pair represents\n        the real and imaginary parts of an Fp2 element.\n\n        Args:\n            poly: Flat list of coefficients [a0_real, a0_imag, a1_real, a1_imag, ...]\n            z: The Fp2 point to evaluate at, represented as [real, imag]\n            poly_name: Optional name for debugging\n            var_name: Optional variable name for debugging\n\n        Returns:\n            [real, imag] representing the result in Fp2\n        \"\"\"\n        if poly_name is None:\n            poly_name = \"UnnamedPoly\"\n\n        assert len(poly) % 2 == 0, \"Polynomial coefficients array must have even length\"\n        n_coeffs = len(poly) // 2\n\n        # Start with the highest degree coefficient\n        acc = [poly[-2], poly[-1]]  # Get last pair [real, imag]\n\n        # Iterate through remaining coefficients in reverse order\n        for i in range(n_coeffs - 2, -1, -1):\n            acc = self.fp2_add(\n                self.fp2_mul(\n                    acc,\n                    z,\n                ),\n                [poly[2 * i], poly[2 * i + 1]],  # Get i-th coefficient pair\n            )\n\n        return acc\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/isogeny.py",
    "content": "from garaga.curves import CURVES, CurveID\nfrom garaga.extension_field_modulo_circuit import ModuloCircuitElement\nfrom garaga.modulo_circuit import ModuloCircuit\nfrom garaga.precompiled_circuits.fp2 import Fp2Circuits\nfrom garaga.signature import get_isogeny_to_g1_map, get_isogeny_to_g2_map\n\n\nclass IsogenyG2(Fp2Circuits):\n    def __init__(self, name: str, curve_id: int, compilation_mode: int = 0):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            compilation_mode=compilation_mode,\n            generic_circuit=False,\n        )\n        self.curve = CURVES[curve_id]\n\n    def set_consts(self):\n        x_rational, y_rational = get_isogeny_to_g2_map(CurveID(self.curve_id))\n        self.x_num = [\n            self.set_or_get_constant(c) for c in x_rational.numerator.coefficients\n        ]\n        self.x_den = [\n            self.set_or_get_constant(c) for c in x_rational.denominator.coefficients\n        ]\n        self.y_num = [\n            self.set_or_get_constant(c) for c in y_rational.numerator.coefficients\n        ]\n        self.y_den = [\n            self.set_or_get_constant(c) for c in y_rational.denominator.coefficients\n        ]\n\n    def run_isogeny(\n        self, x: list[ModuloCircuitElement], y: list[ModuloCircuitElement]\n    ) -> tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]:\n        \"\"\"\n        Runs the isogeny to G2 map.\n        \"\"\"\n        self.set_consts()\n\n        x_affine_num = self.fp2_eval_horner(self.x_num, x, \"x_num\")\n        x_affine_den = self.fp2_eval_horner(self.x_den, x, \"x_den\")\n        x_affine = self.fp2_div(x_affine_num, x_affine_den)\n        y_affine_num = self.fp2_eval_horner(self.y_num, x, \"y_num\")\n        y_affine_den = self.fp2_eval_horner(self.y_den, x, \"y_den\")\n        y_affine_eval = self.fp2_div(y_affine_num, y_affine_den)\n        y_affine = self.fp2_mul(y_affine_eval, y)\n\n        return x_affine, y_affine\n\n\nclass IsogenyG1(ModuloCircuit):\n    def __init__(self, name: str, curve_id: int, compilation_mode: int = 0):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            compilation_mode=compilation_mode,\n            generic_circuit=False,\n        )\n        self.curve = CURVES[curve_id]\n\n    def set_consts(self):\n        \"\"\"\n        Sets the constants for the isogeny to G1 map.\n        \"\"\"\n        x_rational, y_rational = get_isogeny_to_g1_map(CurveID(self.curve_id))\n        self.x_num = [\n            self.set_or_get_constant(c) for c in x_rational.numerator.coefficients\n        ]\n        self.x_den = [\n            self.set_or_get_constant(c) for c in x_rational.denominator.coefficients\n        ]\n\n        self.y_num = [\n            self.set_or_get_constant(c) for c in y_rational.numerator.coefficients\n        ]\n        self.y_den = [\n            self.set_or_get_constant(c) for c in y_rational.denominator.coefficients\n        ]\n\n    def run_isogeny(\n        self, x: ModuloCircuitElement, y: ModuloCircuitElement\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        \"\"\"\n        Runs the isogeny to G1 map.\n        \"\"\"\n        self.set_consts()\n\n        x_affine_num = self.eval_horner(self.x_num, x, \"x_num\")\n        x_affine_den = self.eval_horner(self.x_den, x, \"x_den\")\n        x_affine = self.div(x_affine_num, x_affine_den)\n        y_affine_num = self.eval_horner(self.y_num, x, \"y_num\")\n        y_affine_den = self.eval_horner(self.y_den, x, \"y_den\")\n        y_affine_eval = self.div(y_affine_num, y_affine_den)\n        y_affine = self.mul(y_affine_eval, y)\n\n        return x_affine, y_affine\n\n\nif __name__ == \"__main__\":\n    circuit = IsogenyG1(\"isogeny\", 1)  # BLS12-381\n\n    field_x = circuit.write_element(\n        circuit.field(\n            1412853964218444964438936699552956047210482383152224645596624291427056376487356261681298103080878386132407858666637\n        )\n    )\n    field_y = circuit.write_element(\n        circuit.field(\n            752734926215712395741522221355891264404138695398702662135908094550118515106801651502315795564392519475687558113863\n        )\n    )\n\n    x_affine, y_affine = circuit.run_isogeny(field_x, field_y)\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/map_to_curve.py",
    "content": "from garaga.algebra import PyFelt\nfrom garaga.curves import CURVES\nfrom garaga.extension_field_modulo_circuit import ModuloCircuitElement\nfrom garaga.modulo_circuit import ModuloCircuit, WriteOps\nfrom garaga.precompiled_circuits.fp2 import Fp2Circuits\n\n\nclass MapToCurveG2(Fp2Circuits):\n    def __init__(self, name: str, curve_id: int, compilation_mode: int = 0):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            compilation_mode=compilation_mode,\n            generic_circuit=True,\n        )\n        self.curve = CURVES[curve_id]\n\n    def set_consts(self):\n        # Standard G2 curve parameters for BLS12-381\n        # ToDo: Derive from definitions.py\n        self.swu_a = [\n            self.set_or_get_constant(0),  # real part\n            self.set_or_get_constant(240),  # imaginary part\n        ]\n\n        self.swu_b = [\n            self.set_or_get_constant(1012),  # real part\n            self.set_or_get_constant(1012),  # imaginary part\n        ]\n\n        self.swu_z = [\n            self.set_or_get_constant(-2),  # real part\n            self.set_or_get_constant(-1),  # imaginary part\n        ]\n\n        self.one = [\n            self.set_or_get_constant(1),  # real part\n            self.set_or_get_constant(0),  # imaginary part\n        ]\n\n        self.zero = [\n            self.set_or_get_constant(0),  # real part\n            self.set_or_get_constant(0),  # imaginary part\n        ]\n\n    def map_to_curve_part_1(self, input_value: list[ModuloCircuitElement]):\n        \"\"\"\n        Implements the first part of the Simplified SWU map-to-curve algorithm in G2.\n        This maps a field element to a point on the curve E': y² = x³ + a*x + b.\n\n        The algorithm follows these steps:\n        1. Let u be the input field element\n        2. Calculate intermediate values:\n            - t = z²u⁴ + zu²  (where z is the SWU constant)\n            - x₁ = (-b/a) * (1 + 1/(z²u⁴ + zu²))\n\n        Args:\n            input_value: Field element u in Fp2 to be mapped to the curve\n\n        Returns:\n            tuple: (g1x, div) where:\n                - g1x is x³ + ax + b evaluated at the calculated x₁\n                - div is an intermediate value needed for the full calculation\n        \"\"\"\n        # Calculate u² and related terms\n        u2 = self.fp2_square(input_value)  # u²\n        zeta_u2 = self.fp2_mul(self.swu_z, u2)  # z·u²\n        zeta_u2_square = self.fp2_square(zeta_u2)  # z²u⁴\n        ta = self.fp2_add(zeta_u2_square, zeta_u2)  # t = z²u⁴ + zu²\n        neg_ta = self.fp2_sub(self.zero, ta)  # -t\n        num_x1 = self.fp2_mul(self.swu_b, self.fp2_add(ta, self.one))  # b(t + 1)\n\n        # Handle special case when t = 0\n        is_non_zero = self.fp2_is_non_zero(neg_ta)  # 1 if t ≠ 0, 0 if t = 0\n        neg_ta_or_z = self.fp2_add(\n            self.fp2_mul(self.fp2_sub(self.one, is_non_zero), self.swu_z),  # z if t = 0\n            self.fp2_mul(is_non_zero, neg_ta),  # -t if t ≠ 0\n        )\n\n        # Calculate x₁ numerator and denominator\n        div = self.fp2_mul(self.swu_a, neg_ta_or_z)  # a·(-t) or a·z\n        num2_x1 = self.fp2_square(num_x1)  # (b(t + 1))²\n        div2 = self.fp2_square(div)  # (a·(-t))²\n        div3 = self.fp2_mul(div, div2)  # (a·(-t))³\n\n        # Calculate g(x₁) = x₁³ + ax₁ + b\n        num_gx1 = self.fp2_add(\n            self.fp2_mul(\n                self.fp2_add(num2_x1, self.fp2_mul(self.swu_a, div2)),  # x₁²  # ax₁\n                num_x1,  # ·x₁ (completing the x₁³ term)\n            ),\n            self.fp2_mul(self.swu_b, div3),  # + b\n        )\n        g1x = self.fp2_mul(num_gx1, self.fp2_inv(div3))  # Final result normalized\n\n        return [g1x, div, num_x1, zeta_u2]\n\n    def compute_initial_coordinates_quadratic(\n        self,\n        field: list[ModuloCircuitElement],\n        g1x: list[ModuloCircuitElement],\n        div: list[ModuloCircuitElement],\n        num_x1: list[ModuloCircuitElement],\n    ):\n        \"\"\"\n        Computes the initial coordinates for the map-to-curve operation when g1x is a\n        quadratic residue. This function computes the initial y-coordinate before sign\n        adjustment.\n\n        IMPORTANT: This function should only be called when g1x is a quadratic residue,\n        meaning there exists a y such that y² = g1x in the field Fp2.\n        If g1x is not a quadratic residue, the fp2_sqrt operation will fail.\n\n        The algorithm follows these steps:\n        1. Compute y = √(g1x) where g1x = x³ + ax + b\n           (requires g1x to be a quadratic residue)\n        2. Compute x = num_x1/div to get the x-coordinate in affine form\n\n        Args:\n            field: The original input field element\n            g1x: The value x³ + ax + b from the first part (must be a quadratic residue)\n            div: The denominator from the first part\n            num_x1: The numerator for x from the first part\n\n        Returns:\n            list: [x_affine, y_initial, field] where:\n                - x_affine: The final x-coordinate\n                - y_initial: The initial y-coordinate (needs sign adjustment)\n                - field: The original field element (needed for sign adjustment)\n\n        Note:\n            The returned y_initial needs to be adjusted using adjust_y_sign() to ensure\n            it has the correct sign relative to the input field element.\n        \"\"\"\n        # Compute y-coordinate as the square root of g1x\n        # This will only work if g1x is a quadratic residue\n        y = self.fp2_sqrt(g1x)\n\n        # Convert x to affine coordinates\n        x_affine = self.fp2_div(num_x1, div)\n\n        return [x_affine, y, field]\n\n    def compute_initial_coordinates_non_quadratic(\n        self,\n        field: list[ModuloCircuitElement],\n        g1x: list[ModuloCircuitElement],\n        div: list[ModuloCircuitElement],\n        num_x1: list[ModuloCircuitElement],\n        zeta_u2: list[ModuloCircuitElement],\n    ):\n        \"\"\"\n        Computes the initial coordinates for the map-to-curve operation when g1x is NOT\n        a quadratic residue. This function uses a clever mathematical property to compute\n        a valid initial y-coordinate when direct square root is impossible.\n\n        Key Mathematical Insight:\n        When g1x is not a quadratic residue, we use the SWU constant z (which is also\n        not a quadratic residue) to compute the y-coordinate. This works because:\n        1. If g1x is not a quadratic residue, then z·g1x IS a quadratic residue\n           (product of two non-quadratic residues is a quadratic residue)\n        2. We can then compute y₁ = √(z·g1x)\n        3. The initial y is computed as y = zu·field·y₁\n\n        The algorithm:\n        1. Compute y₁ = √(z·g1x)  [This is possible because z·g1x is a quadratic residue]\n        2. Compute initial y = zu·field·y₁\n        3. Compute x = (zu·num_x1)/div\n\n        Args:\n            field: The original input field element\n            g1x: The value x³ + ax + b (known to be a non-quadratic residue)\n            zeta_u2: The value z·u² from the first part\n            num_x1: The x numerator from the first part\n            div: The denominator from the first part\n\n        Returns:\n            list: [x_affine, y_initial, field] where:\n                - x_affine: The final x-coordinate\n                - y_initial: The initial y-coordinate (needs sign adjustment)\n                - field: The original field element (needed for sign adjustment)\n\n        Note:\n            The returned y_initial needs to be adjusted using adjust_y_sign() to ensure\n            it has the correct sign relative to the input field element.\n        \"\"\"\n        # Since z·g1x is a quadratic residue (product of two non-quadratic residues),\n        # this square root is guaranteed to exist\n        y1 = self.fp2_sqrt(self.fp2_mul(self.swu_z, g1x))\n\n        # Compute initial y-coordinate\n        y = self.fp2_mul(zeta_u2, self.fp2_mul(field, y1))\n\n        # Compute x-coordinate in affine form\n        num_x = self.fp2_mul(zeta_u2, num_x1)\n        x_affine = self.fp2_div(num_x, div)\n\n        return [x_affine, y, field]\n\n    def adjust_y_sign(\n        self,\n        y: list[ModuloCircuitElement],\n        field: list[ModuloCircuitElement],\n    ):\n        # Handle sign adjustment as before\n        qy, y_parity = self.fp2_parity(y)\n        qfield, element_parity = self.fp2_parity(field)\n\n        # Compute if parities are the same using XNOR (opposite of XOR)\n        # XNOR(a,b) = 1 - (a + b - 2ab) = 2ab - a - b + 1\n        same_parity = [\n            self.add(\n                self.sub(\n                    self.mul(\n                        self.set_or_get_constant(2),\n                        self.mul(y_parity[0], element_parity[0]),\n                    ),\n                    self.add(y_parity[0], element_parity[0]),\n                ),\n                self.set_or_get_constant(1),\n            ),\n            self.zero[0],  # imaginary part is 0\n        ]\n        # Adjust y sign if parities don't match:\n        # y_affine = same_parity ? y : -y\n        y_affine = self.fp2_add(\n            self.fp2_mul([same_parity[0], same_parity[1]], y),  # Keep y if same parity\n            self.fp2_mul(\n                [\n                    self.sub(self.one[0], same_parity[0]),\n                    self.zero[0],\n                ],  # [1 - same_parity, 0]\n                self.fp2_sub(self.zero, y),  # -y\n            ),\n        )\n\n        return [y_affine, qfield, qy]\n\n    # ATTENTION: this function is not sound by itself!\n    # Two solutions are possible:\n    # 1. (q, r)\n    # 2. (q+ (p-1)/2, 1-r)\n    # To constraint this properly, we still need assert: q <= (p-1)/2\n    # This needs to happen in the function wrapping the garaga circuit\n    def fp2_parity(\n        self, element: list[ModuloCircuitElement]\n    ) -> list[ModuloCircuitElement]:\n        \"\"\"\n        Computes the parity of the first non-zero coefficient of the Fp2 element (element[0], element[1])\n        Returns [parity, 0]\n\n        For an Fp2 element a + bi:\n        1. If a ≠ 0, returns parity of a\n        2. If a = 0 and b ≠ 0, returns parity of b\n        3. If both are 0, returns [0, 0] (even)\n\n        Implements sgn0_m_eq_2 from RFC9380 using witness variables for validation.\n        \"\"\"\n        assert len(element) == 2 and all(\n            isinstance(x, ModuloCircuitElement) for x in element\n        )\n\n        two = self.set_or_get_constant(2)\n        one = self.set_or_get_constant(1)\n        zero = self.set_or_get_constant(0)\n\n        # For element[0] (real part)\n        # Witnesses: q0 (quotient), r0 (remainder)\n        q0 = self.write_element(\n            PyFelt(element[0].value // 2, element[0].p), WriteOps.WITNESS\n        )  # Witness for q0\n        r0 = self.write_element(\n            PyFelt(element[0].value % 2, element[0].p), WriteOps.WITNESS\n        )  # Witness for r0 (parity of x0)\n\n        # Enforce that r0 ∈ {0, 1}\n        r0_sub_1 = self.sub(r0, one)\n        r0_times_r0_sub_1 = self.mul(r0, r0_sub_1)\n        self.sub_and_assert(r0_times_r0_sub_1, zero, zero, comment=\"Ensure r0 ∈ {0,1}\")\n\n        # Enforce x0 = 2 * q0 + r0\n        two_q0 = self.mul(q0, two)\n        self.add_and_assert(two_q0, r0, element[0], comment=\"Validate x0 decomposition\")\n\n        # Similarly for element[1] (imaginary part)\n        q1 = self.write_element(\n            PyFelt(element[1].value // 2, element[1].p), WriteOps.WITNESS\n        )  # Witness for q1\n        r1 = self.write_element(\n            PyFelt((element[1].value % 2), element[1].p), WriteOps.WITNESS\n        )  # Witness for r1 (parity of x1)\n\n        # Enforce that r1 ∈ {0, 1}\n        r1_sub_1 = self.sub(r1, one)\n        r1_times_r1_sub_1 = self.mul(r1, r1_sub_1)\n        self.sub_and_assert(r1_times_r1_sub_1, zero, zero, comment=\"Ensure r1 ∈ {0,1}\")\n\n        # Enforce x1 = 2 * q1 + r1\n        two_q1 = self.mul(q1, two)\n        self.add_and_assert(two_q1, r1, element[1], comment=\"Validate x1 decomposition\")\n\n        # Compute zero_0 = 1 - fp_is_non_zero(x0)\n        real_is_non_zero = self.fp_is_non_zero(\n            element[0]\n        )  # Returns 1 if x0 ≠ 0, else 0\n        zero_0 = self.sub(one, real_is_non_zero)\n\n        # Compute s = r0 OR (zero_0 AND r1)\n        # Implementing logical operations using arithmetic operations\n        # zero_0 AND r1\n        zero_0_and_r1 = self.mul(zero_0, r1)\n\n        # r0 OR (zero_0 AND r1)\n        # OR(a, b) = a + b - a * b\n        or_input = self.sub(self.add(r0, zero_0_and_r1), self.mul(r0, zero_0_and_r1))\n        s = or_input  # Since values are in {0,1}, this computes the logical OR\n\n        # select q based on s\n        q = self.add(\n            self.mul(q0, self.sub(one, zero_0_and_r1)),  # q0 when not using r1\n            self.mul(q1, zero_0_and_r1),  # q1 when using r1\n        )\n\n        # Return parity as [s, 0]\n        return q, [s, zero]\n\n\nclass MapToCurveG1(ModuloCircuit):\n    def __init__(self, name: str, curve_id: int, compilation_mode: int = 0):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            compilation_mode=compilation_mode,\n            generic_circuit=True,\n        )\n        self.curve = CURVES[curve_id]\n\n    def set_consts(self):\n        params = self.curve.swu_params\n        self.swu_a = self.set_or_get_constant(params.A)\n        self.swu_b = self.set_or_get_constant(params.B)\n        self.swu_z = self.set_or_get_constant(params.Z)\n        self.zero = self.set_or_get_constant(0)\n        self.one = self.set_or_get_constant(1)\n\n    def map_to_curve_part_1(self, input_value: ModuloCircuitElement):\n        \"\"\"\n        Implements the first part of the Simplified SWU map-to-curve algorithm for G1.\n        This maps a field element to a point on the curve E': y² = x³ + ax + b.\n\n        The algorithm follows these steps:\n        1. Let u be the input field element\n        2. Calculate t = z²u⁴ + zu² (where z is the SWU constant)\n        3. Calculate x₁ = (-b/a) * (1 + 1/t) if t ≠ 0, or x₁ = (-b/(az)) if t = 0\n        4. Calculate g(x₁) = x₁³ + ax₁ + b\n\n        Args:\n            input_value (ModuloCircuitElement): Field element u to be mapped to the curve\n\n        Returns:\n            list: [g1x, div, num_x1, zeta_u2] where:\n                - g1x: The value g(x₁) = x₁³ + ax₁ + b\n                - div: The denominator used in x₁ calculation (needed for finalization)\n                - num_x1: The numerator of x₁ (needed for finalization)\n                - zeta_u2: The value z·u² (needed for non-quadratic case)\n\n        Note:\n            This is part 1 of the map-to-curve operation. The result needs to be finalized\n            using either finalize_map_to_curve_quadratic or finalize_map_to_curve_non_quadratic,\n            depending on whether g1x is a quadratic residue.\n        \"\"\"\n        # Calculate u² and related terms\n        u2 = self.square(input_value)  # u²\n        zeta_u2 = self.mul(self.swu_z, u2)  # z·u²\n        zeta_u2_square = self.square(zeta_u2)  # z²u⁴\n        ta = self.add(zeta_u2_square, zeta_u2)  # t = z²u⁴ + zu²\n        neg_ta = self.sub(self.zero, ta)  # -t\n        num_x1 = self.mul(self.swu_b, self.add(ta, self.one))  # b(t + 1)\n\n        # Handle special case when t = 0\n        is_non_zero = self.fp_is_non_zero(neg_ta)  # 1 if t ≠ 0, 0 if t = 0\n        neg_ta_or_z = self.add(\n            self.mul(self.sub(self.one, is_non_zero), self.swu_z),  # z if t = 0\n            self.mul(is_non_zero, neg_ta),  # -t if t ≠ 0\n        )\n\n        # Calculate x₁ numerator and denominator\n        div = self.mul(self.swu_a, neg_ta_or_z)  # a·(-t) or a·z\n        num2_x1 = self.square(num_x1)  # (b(t + 1))²\n        div2 = self.square(div)  # (a·(-t))²\n        div3 = self.mul(div, div2)  # (a·(-t))³\n\n        # Calculate g(x₁) = x₁³ + ax₁ + b\n        num_gx1 = self.add(\n            self.mul(\n                self.add(num2_x1, self.mul(self.swu_a, div2)),  # x₁²  # ax₁\n                num_x1,  # ·x₁ (completing the x₁³ term)\n            ),\n            self.mul(self.swu_b, div3),  # + b\n        )\n        g1x = self.mul(num_gx1, self.inv(div3))  # Final result normalized\n\n        return [g1x, div, num_x1, zeta_u2]\n\n    def compute_initial_coordinates_quadratic(\n        self,\n        field: ModuloCircuitElement,\n        g1x: ModuloCircuitElement,\n        div: ModuloCircuitElement,\n        num_x1: ModuloCircuitElement,\n    ):\n        \"\"\"\n        Computes the x and y coordinates for the map-to-curve operation when g1x is a\n        quadratic residue. This function computes the y-coordinate and ensures the point\n        has the correct sign.\n\n        IMPORTANT: This function should only be called when g1x is a quadratic residue,\n        meaning there exists a y such that y² = g1x in the field.\n\n        The algorithm follows these steps:\n        1. Compute y = √(g1x) where g1x = x³ + ax + b\n           (requires g1x to be a quadratic residue)\n        2. Compute x = num_x1/div to get the x-coordinate in affine form\n        3. Adjust the sign of y to match the parity of the input field element\n\n        The sign adjustment uses:\n            - If sign(y) ≠ sign(field_element): y = -y\n            - For field elements, parity is determined by the real part\n\n        Args:\n            field: The original input field element\n            g1x: The value x³ + ax + b from the first part (must be a quadratic residue)\n            div: The denominator from the first part\n            num_x1: The numerator for x from the first part\n\n        Returns:\n            list: [x_affine, y_initial, field] where:\n                - x_affine: The final x-coordinate\n                - y_initial: The initial y-coordinate (needs sign adjustment)\n                - field: The original field element (needed for sign adjustment)\n\n        Note:\n            When g1x is not a quadratic residue, the alternative function\n            compute_initial_coordinates_non_quadratic should be used instead.\n        \"\"\"\n        # Compute y-coordinate as the square root of g1x\n        y_initial = self.fp_sqrt(g1x)\n\n        # Convert x to affine coordinates\n        x_affine = self.div(num_x1, div)\n\n        return [x_affine, y_initial, field]\n\n    def compute_initial_coordinates_non_quadratic(\n        self,\n        field: ModuloCircuitElement,\n        g1x: ModuloCircuitElement,\n        div: ModuloCircuitElement,\n        num_x1: ModuloCircuitElement,\n        zeta_u2: ModuloCircuitElement,\n    ):\n        \"\"\"\n        Computes the initial x and y coordinates for the map-to-curve operation when g1x\n        is NOT a quadratic residue. The y-coordinate will need further sign adjustment\n        using adjust_y_sign().\n\n        Key Mathematical Insight:\n        When g1x is not a quadratic residue, we use the SWU constant z (which is also\n        not a quadratic residue) to compute the y-coordinate. This works because:\n        1. If g1x is not a quadratic residue, then z·g1x IS a quadratic residue\n           (product of two non-quadratic residues is a quadratic residue)\n        2. We can then compute y₁ = √(z·g1x)\n        3. The initial y is computed as y = zu·field·y₁\n\n        The algorithm:\n        1. Compute y₁ = √(z·g1x)  [This is possible because z·g1x is a quadratic residue]\n        2. Compute initial y = zu·field·y₁\n        3. Compute x = (zu·num_x1)/div\n\n        Args:\n            field: The original input field element\n            g1x: The value x³ + ax + b (known to be a non-quadratic residue)\n            zeta_u2: The value z·u² from the first part\n            num_x1: The x numerator from the first part\n            div: The denominator from the first part\n\n        Returns:\n            list: [x_affine, y_initial, field] where:\n                - x_affine: The final x-coordinate\n                - y_initial: The initial y-coordinate (needs sign adjustment)\n                - field: The original field element (needed for sign adjustment)\n\n        Note:\n            The returned y_initial needs to be adjusted using adjust_y_sign() to ensure\n            it has the correct sign relative to the input field element.\n        \"\"\"\n        # Since z·g1x is a quadratic residue (product of two non-quadratic residues),\n        # this square root is guaranteed to exist\n        y1 = self.fp_sqrt(self.mul(self.swu_z, g1x))\n\n        # Compute initial y-coordinate\n        y_initial = self.mul(zeta_u2, self.mul(field, y1))\n\n        # Compute x-coordinate in affine form\n        num_x = self.mul(zeta_u2, num_x1)\n        x_affine = self.div(num_x, div)\n\n        return [x_affine, y_initial, field]\n\n    def adjust_y_sign(\n        self,\n        y: ModuloCircuitElement,\n        field: ModuloCircuitElement,\n    ):\n        # Handle sign adjustment as before\n        qy, y_parity = self.fp_parity(y)\n        qfield, element_parity = self.fp_parity(field)\n\n        # Compute if parities are the same using XNOR (opposite of XOR)\n        # XNOR(a,b) = 1 - (a + b - 2ab) = 2ab - a - b + 1\n        same_parity = self.add(\n            self.sub(\n                self.mul(\n                    self.set_or_get_constant(2),\n                    self.mul(y_parity, element_parity),\n                ),\n                self.add(y_parity, element_parity),\n            ),\n            self.set_or_get_constant(1),\n        )\n\n        # Adjust y sign if parities don't match:\n        # y_affine = same_parity ? y : -y\n        y_affine = self.add(\n            self.mul(same_parity, y),  # Keep y if same parity\n            self.mul(\n                self.sub(self.one, same_parity),\n                self.sub(self.zero, y),  # -y\n            ),\n        )\n\n        return [y_affine, qy, qfield]\n\n    # ATTENTION: this function is not sound by itself!\n    # Two solutions are possible:\n    # 1. (q, r)\n    # 2. (q+ (p-1)/2, 1-r)\n    # To constraint this properly, we still need assert: q <= (p-1)/2\n    # This needs to happen in the function wrapping the garaga circuit\n    def fp_parity(self, element: ModuloCircuitElement) -> ModuloCircuitElement:\n        \"\"\"\n        Computes the parity of a field element.\n        Returns 0 if element is even, 1 if odd.\n\n        Implements sgn0_m_eq_1 from RFC9380 using witness variables for validation.\n        \"\"\"\n        assert isinstance(element, ModuloCircuitElement)\n\n        two = self.set_or_get_constant(2)\n        one = self.set_or_get_constant(1)\n        zero = self.set_or_get_constant(0)\n\n        # Witnesses: q (quotient), r (remainder)\n        q = self.write_element(\n            PyFelt(element.value // 2, element.p), WriteOps.WITNESS\n        )  # Witness for quotient\n        r = self.write_element(\n            PyFelt(element.value % 2, element.p), WriteOps.WITNESS\n        )  # Witness for remainder (parity)\n\n        # Enforce that r ∈ {0, 1}\n        r_sub_1 = self.sub(r, one)\n        r_times_r_sub_1 = self.mul(r, r_sub_1)\n        self.sub_and_assert(r_times_r_sub_1, zero, zero, comment=\"Ensure r ∈ {0,1}\")\n\n        # Enforce element = 2 * q + r\n        two_q = self.mul(q, two)\n        self.add_and_assert(two_q, r, element, comment=\"Validate element decomposition\")\n\n        return q, r\n\n\nif __name__ == \"__main__\":\n    circuit = MapToCurveG1(\"map_to_curve\", 1)  # BLS12-381\n    circuit.set_consts()\n\n    field = circuit.write_element(\n        circuit.field(\n            2231413721970278425038638834062370180699174210864795385441649994565282274875534254514118105433862522641883533654145\n        )\n    )\n\n    g1x, div, num_x1, zeta_u2 = circuit.map_to_curve_part_1(field)\n\n    print(\"g1x\", g1x)\n    print(\"div\", div)\n    print(\"num_x1\", num_x1)\n    print(\"zeta_u2\", zeta_u2)\n\n    if g1x.felt.is_quad_residue():\n        print(\"Quadratic residue\")\n        x_affine, y_initial, field = circuit.compute_initial_coordinates_quadratic(\n            field, g1x, div, num_x1\n        )\n    else:\n        print(\"Non quadratic residue\")\n        x_affine, y_initial, field = circuit.compute_initial_coordinates_non_quadratic(\n            field, g1x, div, num_x1, zeta_u2\n        )\n\n    # Adjust y sign\n    y_affine, qy, qfield = circuit.adjust_y_sign(field, y_initial)\n\n    print(\"x_affine\", x_affine)\n    print(\"y_affine\", y_affine)\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/miller_tower.py",
    "content": "from typing import Iterator\n\nfrom garaga.curves import BLS12_381_ID, BN254_ID, CURVES\nfrom garaga.extension_field_modulo_circuit import ModuloCircuitElement\nfrom garaga.precompiled_circuits.multi_miller_loop import MultiMillerLoopCircuit\n\n\ndef tower_line_function_sparsity(curve_id: int) -> list[int]:\n    match curve_id:\n        case 0:\n            return [2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0]\n        case 1:\n            return [1, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0]\n        case _:\n            raise ValueError(f\"Invalid curve ID: {curve_id}\")\n\n\nclass MillerTowerCircuit(MultiMillerLoopCircuit):\n    def __init__(\n        self,\n        name: str,\n        curve_id: int,\n        n_pairs: int,\n        compilation_mode: int = 1,\n    ):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            compilation_mode=compilation_mode,\n        )\n\n    def eval_tower_line(self, line: Iterator[ModuloCircuitElement], yInv, xNegOverY):\n        assert len(line) == 4\n        # Input is R0 = slope, R1 = intercept\n        r0 = [line[0], line[1]]\n        r1 = [line[2], line[3]]\n        if self.curve_id == BN254_ID:\n            return [\n                self.mul(r0[0], xNegOverY),\n                self.mul(r0[1], xNegOverY),\n                self.mul(r1[0], yInv),\n                self.mul(r1[1], yInv),\n            ]\n        elif self.curve_id == BLS12_381_ID:\n            return [\n                self.mul(r1[0], yInv),\n                self.mul(r1[1], yInv),\n                self.mul(r0[0], xNegOverY),\n                self.mul(r0[1], xNegOverY),\n            ]\n        else:\n            raise NotImplementedError\n\n    def mul_by_line_tower(\n        self,\n        tower_fp12: list[ModuloCircuitElement],\n        line_evaluated: list[ModuloCircuitElement],\n    ):\n        assert len(tower_fp12) == 12\n        assert (\n            len(line_evaluated) == 4\n        ), f\"Expected 4 elements, got {len(line_evaluated)}\"\n        c0_fp6, c1_fp6 = tower_fp12[0:6], tower_fp12[6:12]\n        # c0_b0, c0_b1, c0_b2 = c0[0:2], c0[2:4], c0[4:6]\n        # c1_b0, c1_b1, c1_b2 = c1[0:2], c1[2:4], c1[4:6]\n\n        # MulBy34. multiplication by sparse element (1,0,0,c3,c4,0)\n        if self.curve_id == 0:\n            a = c0_fp6\n            b = c1_fp6\n            c3, c4 = line_evaluated[0:2], line_evaluated[2:4]\n            b = self._fp6_by_01(b, c3, c4)\n\n            d0 = self.vector_add(\n                [self.set_or_get_constant(1), self.set_or_get_constant(0)], c3\n            )\n            d = self.vector_add(c0_fp6, c1_fp6)\n            d = self._fp6_by_01(d, d0, c4)\n\n            z_c1 = self.vector_add(self.vector_neg(self.vector_add(a, b)), d)\n            z_c0 = self.vector_add(self.fp6_mul_by_non_residue(b), a)\n\n            return z_c0 + z_c1\n        elif self.curve_id == 1:\n            # Mul By 01\n            # // MulBy01 multiplication by sparse element (c0, c1, 0, 0, 1)\n            # func (z *E12) MulBy01(c0, c1 *E2) *E12 {\n\n            # \tvar a, b E6\n            # \tvar d E2\n\n            # \ta.Set(&z.C0)\n            # \ta.MulBy01(c0, c1)\n\n            # \tb.MulByNonResidue(&z.C1)\n            # \td.SetOne().Add(c1, &d)\n\n            # \tz.C1.Add(&z.C1, &z.C0)\n            # \tz.C1.MulBy01(c0, &d)\n            # \tz.C1.Sub(&z.C1, &a)\n            # \tz.C1.Sub(&z.C1, &b)\n            # \tz.C0.MulByNonResidue(&b)\n            # \tz.C0.Add(&z.C0, &a)\n\n            # \treturn z\n            # }\n            c0, c1 = line_evaluated[0:2], line_evaluated[2:4]\n\n            a = c0_fp6\n            a = self._fp6_by_01(a, c0, c1)\n            b = self.fp6_mul_by_non_residue(c1_fp6)\n\n            d = [self.add(self.set_or_get_constant(1), c1[0]), c1[1]]\n\n            z_c1 = self.vector_add(c1_fp6, c0_fp6)\n            z_c1 = self._fp6_by_01(z_c1, c0, d)\n            z_c1 = self.vector_sub(z_c1, a)\n            z_c1 = self.vector_sub(z_c1, b)\n\n            z_c0 = self.fp6_mul_by_non_residue(b)\n            z_c0 = self.vector_add(z_c0, a)\n            return z_c0 + z_c1\n\n    def mul_by_line_line_tower(self, tower_fp12, line_line):\n        assert len(tower_fp12) == 12\n        assert len(line_line) == 10\n        c0_fp6, c1_fp6 = tower_fp12[0:6], tower_fp12[6:12]\n\n    def mul_line_by_line_tower(self, l1, l2):\n        assert len(l1) == 4\n        assert len(l2) == 4\n        if self.curve_id == 0:\n            d3, d4 = l1[0:2], l1[2:4]\n            c3, c4 = l2[0:2], l2[2:4]\n\n            x3 = self.fp2_mul(c3, d3)\n            x4 = self.fp2_mul(c4, d4)\n            x04 = self.vector_add(c4, d4)\n            x03 = self.vector_add(c3, d3)\n            tmp = self.vector_add(c3, c4)\n            x34 = self.vector_sub(\n                self.vector_sub(self.fp2_mul(self.vector_add(d3, d4), tmp), x3), x4\n            )\n            z00 = self.fp2_mul_by_non_residue(x4)\n            z00 = [self.add(z00[0], self.set_or_get_constant(1)), z00[1]]\n\n            return z00 + x3 + x34 + x03 + x04\n        if self.curve_id == 1:\n\n            c0, c1 = l2[0:2], l2[2:4]\n            d0, d1 = l1[0:2], l1[2:4]\n\n            x0 = self.fp2_mul(c0, d0)\n            x1 = self.fp2_mul(c1, d1)\n\n            x04 = self.vector_add(d0, c0)\n            tmp = self.vector_add(c0, c1)\n            x01 = self.vector_sub(\n                self.vector_sub(self.fp2_mul(self.vector_add(d0, d1), tmp), x0), x1\n            )\n            x14 = self.vector_add(d1, c1)\n            z00 = self.fp2_mul_by_non_residue(\n                [self.set_or_get_constant(1), self.set_or_get_constant(0)]\n            )\n            z00 = self.vector_add(z00, x0)\n\n            # C0B0 + C0B1 + C0B2 + C1B1 + C1B2\n            return z00 + x01 + x1 + x04 + x14\n\n    def _fp6_by_01(self, e6: list[ModuloCircuitElement], c0, c1):\n        assert len(e6) == 6\n        assert len(c0) == 2\n        assert len(c1) == 2\n        b0, b1, b2 = e6[0:2], e6[2:4], e6[4:6]\n        a = self.fp2_mul(b0, c0)\n        b = self.fp2_mul(b1, c1)\n        tmp = self.vector_add(b1, b2)\n        t0 = self.fp2_mul(c1, tmp)\n        t0 = self.vector_sub(t0, b)\n        t0 = self.fp2_mul_by_non_residue(t0)\n        t0 = self.vector_add(t0, a)\n\n        tmp = self.vector_add(b0, b2)\n        t2 = self.fp2_mul(c0, tmp)\n        t2 = self.vector_sub(t2, a)\n        t2 = self.vector_add(t2, b)\n\n        t1 = self.vector_add(c0, c1)\n        tmp = self.vector_add(b0, b1)\n        t1 = self.fp2_mul(t1, tmp)\n        t1 = self.vector_sub(t1, a)\n        t1 = self.vector_sub(t1, b)\n\n        b0 = t0\n        b1 = t1\n        b2 = t2\n        # flatten lists:\n        return b0 + b1 + b2\n\n    def fp6_mul_by_non_residue(self, a: list[ModuloCircuitElement]):\n        assert len(a) == 6\n        a = list(a)\n        b0, b1, b2 = a[0:2], a[2:4], a[4:6]\n        return self.fp2_mul_by_non_residue(b2) + b0 + b1\n\n    def fp12_square(self, a: list[ModuloCircuitElement]):\n        assert len(a) == 12\n\n        xc0, xc1 = a[0:6], a[6:12]\n        c0 = self.vector_sub(xc0, xc1)\n        c3 = self.vector_add(xc0, self.vector_neg(self.fp6_mul_by_non_residue(xc1)))\n        c2 = self.fp6_mul(xc0, xc1)\n        c0 = self.vector_add(self.fp6_mul(c0, c3), c2)\n        z_c1 = self.vector_add(c2, c2)\n        z_c0 = self.vector_add(c0, self.fp6_mul_by_non_residue(c2))\n\n        return z_c0 + z_c1\n\n    def fp12_mul(self, x: list[ModuloCircuitElement], y: list[ModuloCircuitElement]):\n        assert len(x) == 12\n        assert len(y) == 12\n\n        x_c0, x_c1 = x[0:6], x[6:12]\n        y_c0, y_c1 = y[0:6], y[6:12]\n\n        a = self.vector_add(x_c0, x_c1)\n        b = self.vector_add(y_c0, y_c1)\n        a = self.fp6_mul(a, b)\n        b = self.fp6_mul(x_c0, y_c0)\n        c = self.fp6_mul(x_c1, y_c1)\n        z_c1 = self.vector_sub(a, b)\n        z_c1 = self.vector_sub(z_c1, c)\n        z_c0 = self.fp6_mul_by_non_residue(c)\n        z_c0 = self.vector_add(z_c0, b)\n\n        return z_c0 + z_c1\n\n    def fp6_mul(self, a: list[ModuloCircuitElement], b: list[ModuloCircuitElement]):\n        assert len(a) == 6\n        assert len(b) == 6\n\n        xb0, xb1, xb2 = a[0:2], a[2:4], a[4:6]\n        yb0, yb1, yb2 = b[0:2], b[2:4], b[4:6]\n\n        t0 = self.fp2_mul(xb0, yb0)\n        t1 = self.fp2_mul(xb1, yb1)\n        t2 = self.fp2_mul(xb2, yb2)\n\n        c0 = self.vector_add(xb1, xb2)\n        tmp = self.vector_add(yb1, yb2)\n\n        c0 = self.vector_add(\n            self.fp2_mul_by_non_residue(\n                self.vector_sub(self.vector_sub(self.fp2_mul(c0, tmp), t1), t2)\n            ),\n            t0,\n        )\n\n        c1 = self.vector_add(xb0, xb1)\n        tmp = self.vector_add(yb0, yb1)\n        c1 = self.vector_sub(self.vector_sub(self.fp2_mul(c1, tmp), t0), t1)\n        tmp = self.fp2_mul_by_non_residue(t2)\n        c1 = self.vector_add(c1, tmp)\n\n        tmp = self.vector_add(xb0, xb2)\n        c2 = self.vector_add(\n            self.vector_sub(\n                self.vector_sub(self.fp2_mul(self.vector_add(yb0, yb2), tmp), t0), t2\n            ),\n            t1,\n        )\n\n        return c0 + c1 + c2\n\n    def fp12_inverse(self, a: list[ModuloCircuitElement]):\n\n        assert len(a) == 12\n\n        xc0, xc1 = a[0:6], a[6:12]\n\n        t0 = self.fp6_square(xc0)\n        t1 = self.fp6_square(xc1)\n        tmp = self.fp6_mul_by_non_residue(t1)\n        t0 = self.vector_sub(t0, tmp)\n        t1 = self.fp6_inverse(t0)\n        z_c0 = self.fp6_mul(xc0, t1)\n        z_c1 = self.fp6_mul(xc1, t1)\n        z_c1 = self.vector_neg(z_c1)\n\n        return z_c0 + z_c1\n\n    def fp6_inverse(self, a: list[ModuloCircuitElement]):\n        assert len(a) == 6\n        # func (z *E6) Inverse(x *E6) *E6 {\n        # \t// Algorithm 17 from https://eprint.iacr.org/2010/354.pdf\n        # \t// step 9 is wrong in the paper it's t1-t4\n        # \tvar t0, t1, t2, t3, t4, t5, t6, c0, c1, c2, d1, d2 E2\n        # \tt0.Square(&x.B0)\n        # \tt1.Square(&x.B1)\n        # \tt2.Square(&x.B2)\n        # \tt3.Mul(&x.B0, &x.B1)\n        # \tt4.Mul(&x.B0, &x.B2)\n        # \tt5.Mul(&x.B1, &x.B2)\n        # \tc0.MulByNonResidue(&t5).Neg(&c0).Add(&c0, &t0)\n        # \tc1.MulByNonResidue(&t2).Sub(&c1, &t3)\n        # \tc2.Sub(&t1, &t4)\n        # \tt6.Mul(&x.B0, &c0)\n        # \td1.Mul(&x.B2, &c1)\n        # \td2.Mul(&x.B1, &c2)\n        # \td1.Add(&d1, &d2).MulByNonResidue(&d1)\n        # \tt6.Add(&t6, &d1)\n        # \tt6.Inverse(&t6)\n        # \tz.B0.Mul(&c0, &t6)\n        # \tz.B1.Mul(&c1, &t6)\n        # \tz.B2.Mul(&c2, &t6)\n        xb0, xb1, xb2 = a[0:2], a[2:4], a[4:6]\n        t0 = self.fp2_square(xb0)\n        t1 = self.fp2_square(xb1)\n        t2 = self.fp2_square(xb2)\n\n        t3 = self.fp2_mul(xb0, xb1)\n        t4 = self.fp2_mul(xb0, xb2)\n        t5 = self.fp2_mul(xb1, xb2)\n        c0 = self.vector_add(self.vector_neg(self.fp2_mul_by_non_residue(t5)), t0)\n        c1 = self.vector_sub(self.fp2_mul_by_non_residue(t2), t3)\n        c2 = self.vector_sub(t1, t4)\n\n        t6 = self.fp2_mul(xb0, c0)\n        d1 = self.fp2_mul(xb2, c1)\n        d2 = self.fp2_mul(xb1, c2)\n        d1 = self.fp2_mul_by_non_residue(self.vector_add(d1, d2))\n        t6 = self.vector_add(t6, d1)\n        t6 = self.fp2_inv(t6)\n        zb0 = self.fp2_mul(c0, t6)\n        zb1 = self.fp2_mul(c1, t6)\n        zb2 = self.fp2_mul(c2, t6)\n\n        return zb0 + zb1 + zb2\n\n    def fp6_square(self, a: list[ModuloCircuitElement]):\n        assert len(a) == 6\n\n        xb0, xb1, xb2 = a[0:2], a[2:4], a[4:6]\n        c4 = self.fp2_mul(xb0, xb1)\n        c4 = self.vector_add(c4, c4)\n        c5 = self.fp2_square(xb2)\n        c1 = self.vector_add(self.fp2_mul_by_non_residue(c5), c4)\n        c2 = self.vector_sub(c4, c5)\n        c3 = self.fp2_square(xb0)\n        c4 = self.vector_add(self.vector_sub(xb0, xb1), xb2)\n        c5 = self.fp2_mul(xb1, xb2)\n        c5 = self.vector_add(c5, c5)\n\n        c4 = self.fp2_square(c4)\n        c0 = self.vector_add(self.fp2_mul_by_non_residue(c5), c3)\n        zb2 = self.vector_sub(self.vector_add(self.vector_add(c2, c4), c5), c3)\n        zb0 = c0\n        zb1 = c1\n\n        return zb0 + zb1 + zb2\n\n    def fp12_conjugate(self, a: list[ModuloCircuitElement]):\n        assert len(a) == 12\n\n        raise NotImplementedError(\"Not implemented\")\n\n    def fp12_cyclotomic_square(self, a: list[ModuloCircuitElement]):\n        assert len(a) == 12\n\n        xc0, xc1 = a[0:6], a[6:12]\n        xc0b0 = xc0[0:2]\n        xc0b1 = xc0[2:4]\n        xc0b2 = xc0[4:6]\n        xc1b0 = xc1[0:2]\n        xc1b1 = xc1[2:4]\n        xc1b2 = xc1[4:6]\n\n        t0 = self.fp2_square(xc1b1)\n        t1 = self.fp2_square(xc0b0)\n        t6 = self.vector_add(xc1b1, xc0b0)\n        t6 = self.fp2_square(t6)\n        t6 = self.vector_sub(t6, t0)\n        t6 = self.vector_sub(t6, t1)\n        t2 = self.fp2_square(xc0b2)\n        t3 = self.fp2_square(xc1b0)\n        t7 = self.vector_add(xc0b2, xc1b0)\n        t7 = self.fp2_square(t7)\n        t7 = self.vector_sub(t7, t2)\n        t7 = self.vector_sub(t7, t3)\n\n        t4 = self.fp2_square(xc1b2)\n        t5 = self.fp2_square(xc0b1)\n        t8 = self.vector_add(xc1b2, xc0b1)\n        t8 = self.fp2_square(t8)\n        t8 = self.vector_sub(t8, t4)\n        t8 = self.vector_sub(t8, t5)\n        t8 = self.fp2_mul_by_non_residue(t8)\n\n        t0 = self.fp2_mul_by_non_residue(t0)\n        t0 = self.vector_add(t0, t1)\n        t2 = self.fp2_mul_by_non_residue(t2)\n        t2 = self.vector_add(t2, t3)\n        t4 = self.fp2_mul_by_non_residue(t4)\n        t4 = self.vector_add(t4, t5)\n\n        zc0b0 = self.vector_sub(t0, xc0b0)\n        zc0b0 = self.vector_add(zc0b0, zc0b0)\n        zc0b0 = self.vector_add(zc0b0, t0)\n\n        zc0b1 = self.vector_sub(t2, xc0b1)\n        zc0b1 = self.vector_add(zc0b1, zc0b1)\n        zc0b1 = self.vector_add(zc0b1, t2)\n\n        zc0b2 = self.vector_sub(t4, xc0b2)\n        zc0b2 = self.vector_add(zc0b2, zc0b2)\n        zc0b2 = self.vector_add(zc0b2, t4)\n\n        zc1b0 = self.vector_add(t8, xc1b0)\n        zc1b0 = self.vector_add(zc1b0, zc1b0)\n        zc1b0 = self.vector_add(zc1b0, t8)\n\n        zc1b1 = self.vector_add(t6, xc1b1)\n        zc1b1 = self.vector_add(zc1b1, zc1b1)\n        zc1b1 = self.vector_add(zc1b1, t6)\n\n        zc1b2 = self.vector_add(t7, xc1b2)\n        zc1b2 = self.vector_add(zc1b2, zc1b2)\n        zc1b2 = self.vector_add(zc1b2, t7)\n\n        return zc0b0 + zc0b1 + zc0b2 + zc1b0 + zc1b1 + zc1b2\n\n    def fp2_conjugate(self, a: list[ModuloCircuitElement]):\n        assert len(a) == 2\n        return [a[0], self.neg(a[1])]\n\n    def mul_by_non_residue_k_power_n(\n        self, x: list[ModuloCircuitElement], k: int, n: int\n    ):\n        from garaga.hints.tower_backup import E2\n\n        assert len(x) == 2\n        curve = CURVES[self.curve_id]\n        non_residue = E2(curve.nr_a0, curve.nr_a1, curve.p)\n        # nr^(n*(p^k-1)/6)\n        res: E2 = non_residue ** ((n * (curve.p**k - 1) // 6))\n        if res.a1 != 0:\n            factor = [\n                self.set_or_get_constant(res.a0),\n                self.set_or_get_constant(res.a1),\n            ]\n            return self.fp2_mul(factor, x)\n        else:\n            factor = self.set_or_get_constant(res.a0)\n            return [self.mul(factor, x[0]), self.mul(factor, x[1])]\n\n    def fp12_frob(self, a: list[ModuloCircuitElement]):\n        assert len(a) == 12\n\n        c0b0 = self.fp2_conjugate(a[0:2])\n        c0b0[0] = self.add(\n            c0b0[0], self.set_or_get_constant(0)\n        )  # Input cannot be output. # TODO: Make a manual circuit or something better.\n        c0b1 = self.fp2_conjugate(a[2:4])\n        c0b2 = self.fp2_conjugate(a[4:6])\n        c1b0 = self.fp2_conjugate(a[6:8])\n        c1b1 = self.fp2_conjugate(a[8:10])\n        c1b2 = self.fp2_conjugate(a[10:12])\n\n        c0b1 = self.mul_by_non_residue_k_power_n(c0b1, 1, 2)\n        c0b2 = self.mul_by_non_residue_k_power_n(c0b2, 1, 4)\n        c1b0 = self.mul_by_non_residue_k_power_n(c1b0, 1, 1)\n        c1b1 = self.mul_by_non_residue_k_power_n(c1b1, 1, 3)\n        c1b2 = self.mul_by_non_residue_k_power_n(c1b2, 1, 5)\n\n        return c0b0 + c0b1 + c0b2 + c1b0 + c1b1 + c1b2\n\n    def fp12_frob_square(self, a: list[ModuloCircuitElement]):\n        assert len(a) == 12\n        c0b0 = [\n            self.add(a[0], self.set_or_get_constant(0)),\n            self.add(a[1], self.set_or_get_constant(0)),\n        ]  # Input cannot be output. # TODO: Make a manual circuit or something better.\n        c0b1 = self.mul_by_non_residue_k_power_n(a[2:4], 2, 2)\n        c0b2 = self.mul_by_non_residue_k_power_n(a[4:6], 2, 4)\n        c1b0 = self.mul_by_non_residue_k_power_n(a[6:8], 2, 1)\n        c1b1 = self.mul_by_non_residue_k_power_n(a[8:10], 2, 3)\n        c1b2 = self.mul_by_non_residue_k_power_n(a[10:12], 2, 5)\n\n        return c0b0 + c0b1 + c0b2 + c1b0 + c1b1 + c1b2\n\n    def fp12_frob_cube(self, a: list[ModuloCircuitElement]):\n        assert len(a) == 12\n\n        c0b0 = self.fp2_conjugate(a[0:2])\n        c0b0[0] = self.add(\n            c0b0[0], self.set_or_get_constant(0)\n        )  # Input cannot be output. # TODO: Make a manual circuit or something better.\n        c0b1 = self.fp2_conjugate(a[2:4])\n        c0b2 = self.fp2_conjugate(a[4:6])\n        c1b0 = self.fp2_conjugate(a[6:8])\n        c1b1 = self.fp2_conjugate(a[8:10])\n        c1b2 = self.fp2_conjugate(a[10:12])\n\n        c0b1 = self.mul_by_non_residue_k_power_n(c0b1, 3, 2)\n        c0b2 = self.mul_by_non_residue_k_power_n(c0b2, 3, 4)\n        c1b0 = self.mul_by_non_residue_k_power_n(c1b0, 3, 1)\n        c1b1 = self.mul_by_non_residue_k_power_n(c1b1, 3, 3)\n        c1b2 = self.mul_by_non_residue_k_power_n(c1b2, 3, 5)\n\n        return c0b0 + c0b1 + c0b2 + c1b0 + c1b1 + c1b2\n\n    def fp12_cyclotomic_square_compressed(\n        self,\n        xc0b1: list[ModuloCircuitElement],\n        xc0b2: list[ModuloCircuitElement],\n        xc1b0: list[ModuloCircuitElement],\n        xc1b2: list[ModuloCircuitElement],\n    ):\n        assert len(xc0b1) == len(xc0b2) == len(xc1b0) == len(xc1b2) == 2\n\n        t0 = self.fp2_square(xc0b1)\n        t1 = self.fp2_square(xc1b2)\n        t5 = self.vector_add(xc0b1, xc1b2)\n        t2 = self.fp2_square(t5)\n\n        t3 = self.vector_add(t0, t1)\n        t5 = self.vector_sub(t2, t3)\n\n        t6 = self.vector_add(xc1b0, xc0b2)\n        t3 = self.fp2_square(t6)\n        t2 = self.fp2_square(xc1b0)\n\n        t6 = self.fp2_mul_by_non_residue(t5)\n        t5 = self.vector_add(t6, xc1b0)\n        t5 = self.vector_add(t5, t5)\n\n        zc1b0 = self.vector_add(t5, t6)\n\n        t4 = self.fp2_mul_by_non_residue(t1)\n        t5 = self.vector_add(t0, t4)\n        t6 = self.vector_sub(t5, xc0b2)\n\n        t1 = self.fp2_square(xc0b2)\n        t6 = self.vector_add(t6, t6)\n        zc0b2 = self.vector_add(t6, t5)\n\n        t4 = self.fp2_mul_by_non_residue(t1)\n        t5 = self.vector_add(t2, t4)\n        t6 = self.vector_sub(t5, xc0b1)\n        t6 = self.vector_add(t6, t6)\n        zc0b1 = self.vector_add(t6, t5)\n\n        t0 = self.vector_add(t2, t1)\n        t5 = self.vector_sub(t3, t0)\n        t6 = self.vector_add(t5, xc1b2)\n        t6 = self.vector_add(t6, t6)\n        zc1b2 = self.vector_add(t5, t6)\n\n        return zc0b1 + zc0b2 + zc1b0 + zc1b2\n\n    def fp12_decompress_karabina_pt_I_c1b2_Z(self, xc0b1, xc1b2):\n\n        assert len(xc0b1) == len(xc1b2) == 2\n\n        t0 = self.fp2_mul(xc0b1, xc1b2)\n        t0 = self.vector_add(t0, t0)\n\n        # t1 = xc0b2\n\n        return t0\n\n    def fp12_decompress_karabina_pt_I_c1b2_NZ(\n        self,\n        xc0b1: list[ModuloCircuitElement],\n        xc0b2: list[ModuloCircuitElement],\n        xc1b0: list[ModuloCircuitElement],\n        xc1b2: list[ModuloCircuitElement],\n    ):\n        assert len(xc0b1) == len(xc0b2) == len(xc1b0) == len(xc1b2) == 2\n\n        t0 = self.fp2_square(xc0b1)\n        t1 = self.vector_sub(t0, xc0b2)\n        t1 = self.vector_add(t1, t1)\n        t1 = self.vector_add(t1, t0)\n\n        t2 = self.fp2_square(xc1b2)\n        t0 = self.vector_add(self.fp2_mul_by_non_residue(t2), t1)\n        t1 = self.vector_add(xc1b0, xc1b0)\n        t1 = self.vector_add(t1, t1)\n\n        return t0, t1\n\n    def fp12_decompress_karabina_pt_II(\n        self,\n        t0: list[ModuloCircuitElement],\n        t1: list[ModuloCircuitElement],\n        xc0b1: list[ModuloCircuitElement],\n        xc0b2: list[ModuloCircuitElement],\n        xc1b0: list[ModuloCircuitElement],\n        xc1b2: list[ModuloCircuitElement],\n    ):\n        assert len(t0) == len(t1) == 2\n        assert len(xc0b1) == len(xc0b2) == len(xc1b0) == len(xc1b2) == 2\n\n        zc1b1 = self.fp2_div(t0, t1)\n\n        t1 = self.fp2_mul(xc0b2, xc0b1)\n        t2 = self.vector_sub(self.fp2_square(zc1b1), t1)\n        t2 = self.vector_add(t2, t2)\n        t2 = self.vector_sub(t2, t1)\n        t1 = self.fp2_mul(xc1b0, xc1b2)\n        t2 = self.vector_add(t2, t1)\n        zc0b0 = self.fp2_mul_by_non_residue(t2)\n        zc0b0 = [\n            self.add(zc0b0[0], self.set_or_get_constant(1)),\n            zc0b0[1],\n        ]\n\n        return zc0b0, zc1b1\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/multi_miller_loop.py",
    "content": "from typing import Iterator, Tuple\n\nfrom garaga.curves import BLS12_381_ID, BN254_ID, CURVES, CurveID\nfrom garaga.extension_field_modulo_circuit import (\n    ExtensionFieldModuloCircuit,\n    ModuloCircuitElement,\n    PyFelt,\n)\nfrom garaga.hints.io import flatten\nfrom garaga.points import G1Point, G2Point, precompute_lineline_sparsity\n\n\nclass MultiMillerLoopCircuit(ExtensionFieldModuloCircuit):\n    def __init__(\n        self,\n        name: str,\n        curve_id: int,\n        n_pairs: int,\n        hash_input: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n        precompute_lines: bool = False,\n        n_points_precomputed_lines: int = None,\n        tower_mode: bool = False,\n    ):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            extension_degree=12,\n            hash_input=hash_input,\n            init_hash=init_hash,\n            compilation_mode=compilation_mode,\n        )\n        self.curve = CURVES[curve_id]\n        self.line_sparsity: list[int] = self.curve.line_function_sparsity\n        self.line_line_sparsity: list[int] = precompute_lineline_sparsity(curve_id)\n        self.n_pairs = n_pairs\n        self.P = []\n        self.Q = []\n        self.yInv = []\n        self.xNegOverY = []\n        self.loop_counter = CURVES[self.curve_id].loop_counter\n        self.ops_counter.update(\n            {\n                \"Double Step\": 0,\n                \"Double-and-Add Step\": 0,\n                \"Triple Step\": 0,\n                \"MUL_L_BY_L\": 0,\n                \"MUL_LL_BY_LL\": 0,\n                \"MUL_LL_BY_L\": 0,\n                \"MUL_BY_L\": 0,\n                \"MUL_BY_LL\": 0,\n            }\n        )\n        self.n_points_precomputed_lines = n_points_precomputed_lines\n        self.precompute_lines: bool = precompute_lines\n        self.precomputed_lines: list[ModuloCircuitElement] = []\n        self._precomputed_lines_generator = None\n\n    def _create_precomputed_lines_generator(\n        self,\n    ) -> Iterator[\n        Tuple[\n            Tuple[ModuloCircuitElement, ModuloCircuitElement],\n            Tuple[ModuloCircuitElement, ModuloCircuitElement],\n        ]\n    ]:\n        if self.precompute_lines:\n            if len(self.precomputed_lines) % 4 != 0:\n                raise ValueError(\n                    \"Number of precomputed line elements must be a multiple of 4.\"\n                )\n            for i in range(0, len(self.precomputed_lines), 4):\n                yield (\n                    (self.precomputed_lines[i], self.precomputed_lines[i + 1]),\n                    (self.precomputed_lines[i + 2], self.precomputed_lines[i + 3]),\n                )\n        else:\n            while True:\n                yield ((None, None), (None, None))\n\n    def get_next_precomputed_line(\n        self,\n    ) -> Tuple[Tuple[PyFelt, PyFelt], Tuple[PyFelt, PyFelt]]:\n        return next(self._precomputed_lines_generator)\n\n    def write_p_and_q(self, P: list[G1Point], Q: list[G2Point]):\n        assert len(P) == len(Q) == self.n_pairs\n        assert set([P[i].curve_id for i in range(len(P))]) == set(\n            [Q[i].curve_id for i in range(len(Q))]\n        )\n        raw = []\n        for P, Q in zip(P, Q):\n            raw.extend([self.field(P.x), self.field(P.y)])\n            raw.extend([self.field(Q.x[0]), self.field(Q.x[1])])\n            raw.extend([self.field(Q.y[0]), self.field(Q.y[1])])\n        self.write_p_and_q_raw(raw)\n        return None\n\n    def write_p_and_q_raw(self, input: list[PyFelt], precompute_consts: bool = True):\n        assert (\n            len(input) == 6 * self.n_pairs\n        ), f\"Expected {6 * self.n_pairs} inputs, got {len(input)}\"\n\n        for i in range(self.n_pairs):\n            self.P.append(\n                (\n                    self.write_element(input[6 * i]),\n                    self.write_element(input[6 * i + 1]),\n                )\n            )\n            self.Q.append(\n                (\n                    [\n                        self.write_element(input[6 * i + 2]),\n                        self.write_element(input[6 * i + 3]),\n                    ],\n                    [\n                        self.write_element(input[6 * i + 4]),\n                        self.write_element(input[6 * i + 5]),\n                    ],\n                )\n            )\n        if precompute_consts:\n            self.precompute_consts()\n        return None\n\n    def precompute_consts(self, n_pairs: int = None, skip_P_precompute: bool = False):\n        n_pairs = n_pairs or self.n_pairs\n        if not skip_P_precompute:\n            self.yInv = [self.inv(self.P[i][1]) for i in range(n_pairs)]\n            self.xNegOverY = [\n                self.neg(self.div(self.P[i][0], self.P[i][1])) for i in range(n_pairs)\n            ]\n\n        if -1 in self.loop_counter:\n            self.Qneg = [\n                (self.Q[i][0], self.vector_neg(self.Q[i][1])) for i in range(n_pairs)\n            ]\n        else:\n            self.Qneg = None\n\n        return None\n\n    def compute_doubling_slope(\n        self,\n        Q: tuple[\n            list[ModuloCircuitElement],\n            list[ModuloCircuitElement],\n        ],\n    ) -> list[ModuloCircuitElement, ModuloCircuitElement]:\n        # num = 3 * x^2\n        # den = 2 * y\n        x0, x1 = Q[0][0], Q[0][1]\n        # x² = (x0 + i x1)² = (x0² - x1²) + 2 * i * x0 * x1 = (x0+x1)(x0-x1) + i * 2 * x0 * x1.\n        # (x0+x1)*(x0-x1) is cheaper than x0² - x1². (2 ADD + 1 MUL) vs (1 ADD + 2 MUL) (16 vs 20 steps)\n        # Omits mul by 2x for imaginary part to multiply once by 6 instead of doubling and multiplying by 3.\n        num_tmp = [\n            self.mul(\n                self.add(x0, x1, comment=\"Doubling slope numerator start\"),\n                self.sub(x0, x1),\n            ),\n            self.mul(x0, x1),\n        ]\n        num = [\n            self.mul(num_tmp[0], self.set_or_get_constant(3)),\n            self.mul(\n                num_tmp[1],\n                self.set_or_get_constant(6),\n                comment=\"Doubling slope numerator end\",\n            ),\n        ]\n        den = self.vector_add(Q[1], Q[1])\n        return self.fp2_div(num, den)\n\n    def compute_adding_slope(\n        self,\n        Qa: tuple[\n            list[ModuloCircuitElement],\n            list[ModuloCircuitElement],\n        ],\n        Qb: tuple[\n            list[ModuloCircuitElement],\n            list[ModuloCircuitElement],\n        ],\n    ) -> list[ModuloCircuitElement]:\n        # num = ya - yb\n        # den = xa - xb\n        num = self.vector_sub(Qa[1], Qb[1])\n        den = self.vector_sub(Qa[0], Qb[0])\n        return self.fp2_div(num, den)\n\n    def build_sparse_line_eval(\n        self,\n        R0: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        R1: tuple[ModuloCircuitElement, ModuloCircuitElement],\n        yInv: ModuloCircuitElement,\n        xNegOverY: ModuloCircuitElement,\n    ) -> list[ModuloCircuitElement]:\n        # Mocked ModuloCircuitElement for ZERO and ONE.\n        # They are not part of the circuit because only the non-zero or non-ones will be used due do the\n        # known-in-advance sparsity\n        ZERO, ONE = ModuloCircuitElement(self.field(0), -1), ModuloCircuitElement(\n            self.field(1), -1\n        )\n\n        if self.curve_id == BN254_ID:\n            return [\n                ONE,\n                self.mul(\n                    self.add(R0[0], self.mul(self.set_or_get_constant(-9), R0[1])),\n                    xNegOverY,\n                    comment=\"eval bn line by xNegOverY\",\n                ),\n                ZERO,\n                self.mul(\n                    self.add(R1[0], self.mul(self.set_or_get_constant(-9), R1[1])),\n                    yInv,\n                    comment=\"eval bn line by yInv\",\n                ),\n                ZERO,\n                ZERO,\n                ZERO,\n                self.mul(R0[1], xNegOverY, comment=\"eval bn line by xNegOverY\"),\n                ZERO,\n                self.mul(R1[1], yInv, comment=\"eval bn line by yInv\"),\n                ZERO,\n                ZERO,\n            ]\n        elif self.curve_id == BLS12_381_ID:\n            return [\n                self.mul(\n                    self.sub(R1[0], R1[1]), yInv, comment=\"eval bls line by yInv\"\n                ),  # nr=1\n                ZERO,\n                self.mul(\n                    self.sub(R0[0], R0[1]),\n                    xNegOverY,\n                    comment=\"eval blsline by xNegOverY\",\n                ),  # nr=1\n                ONE,\n                ZERO,\n                ZERO,\n                self.mul(R1[1], yInv, comment=\"eval bls line by yInv\"),\n                ZERO,\n                self.mul(R0[1], xNegOverY, comment=\"eval bls line by xNegOverY\"),\n                ZERO,\n                ZERO,\n                ZERO,\n            ]\n        else:\n            raise NotImplementedError\n\n    def _add(\n        self,\n        Qa: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        Qb: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        k: int,\n    ):\n        if self.precompute_lines and (k + 1) <= self.n_points_precomputed_lines:\n            return (None, None), self.get_next_precomputed_line()\n        λ = self.compute_adding_slope(Qa, Qb)\n        xr = self.vector_sub(X=self.fp2_square(X=λ), Y=self.vector_add(Qa[0], Qb[0]))\n        yr = self.vector_sub(\n            X=self.fp2_mul(X=λ, Y=self.vector_sub(Qa[0], xr)),\n            Y=Qa[1],\n        )\n        p = (xr, yr)\n        lineR0 = λ\n        lineR1 = self.vector_sub(self.fp2_mul(λ, Qa[0]), Qa[1])\n\n        return p, (lineR0, lineR1)\n\n    def add_step(\n        self,\n        Qa: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        Qb: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        k: int,\n    ):\n        p, (lineR0, lineR1) = self._add(Qa, Qb, k)\n        line = self.build_sparse_line_eval(\n            R0=lineR0,\n            R1=lineR1,\n            yInv=self.yInv[k],\n            xNegOverY=self.xNegOverY[k],\n        )\n        return p, line\n\n    def _line_compute(\n        self,\n        Qa: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        Qb: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        k: int,\n    ):\n        if self.precompute_lines and (k + 1) <= self.n_points_precomputed_lines:\n            return self.get_next_precomputed_line()\n        λ = self.compute_adding_slope(Qa, Qb)\n        lineR0 = λ\n        lineR1 = self.vector_sub(self.fp2_mul(λ, Qa[0]), Qa[1])\n        return lineR0, lineR1\n\n    def line_compute(\n        self,\n        Qa: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        Qb: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        k: int,\n    ):\n        lineR0, lineR1 = self._line_compute(Qa, Qb, k)\n        line = self.build_sparse_line_eval(\n            R0=lineR0,\n            R1=lineR1,\n            yInv=self.yInv[k],\n            xNegOverY=self.xNegOverY[k],\n        )\n        return line\n\n    def _double(\n        self, Q: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]], k: int\n    ):\n        \"\"\"\n        Perform a single doubling of a point on an elliptic curve and store the line evaluation,\n        including computations that involve the y coordinate.\n\n        :param p1: A tuple representing the point on the curve (x, y) in the extension field.\n        :return: A tuple containing the doubled point and the line evaluation.\n        \"\"\"\n        if self.precompute_lines and (k + 1) <= self.n_points_precomputed_lines:\n            return ((None, None), self.get_next_precomputed_line())\n        self.ops_counter[\"Double Step\"] += 1\n        λ = self.compute_doubling_slope(Q)  # Compute λ = 3x² / 2y\n\n        # Compute xr = λ² - 2x\n        xr = self.vector_sub(X=self.fp2_square(X=λ), Y=self.vector_add(Q[0], Q[0]))\n\n        # Compute yr = λ(x - xr) - y\n        yr = self.vector_sub(X=self.fp2_mul(λ, self.vector_sub(Q[0], xr)), Y=Q[1])\n\n        p = (xr, yr)\n\n        lineR0 = λ\n        lineR1 = self.vector_sub(self.fp2_mul(λ, Q[0]), Q[1])\n\n        return p, (lineR0, lineR1)\n\n    def double_step(\n        self,\n        Q: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        k: int,\n    ):\n        p, (lineR0, lineR1) = self._double(Q, k)\n        line = self.build_sparse_line_eval(\n            R0=lineR0,\n            R1=lineR1,\n            yInv=self.yInv[k],\n            xNegOverY=self.xNegOverY[k],\n        )\n        return p, line\n\n    def _double_and_add(\n        self,\n        Qa: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        Qb: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        k: int,\n    ) -> list[ModuloCircuitElement]:\n        if self.precompute_lines and (k + 1) <= self.n_points_precomputed_lines:\n            return (\n                (None, None),\n                self.get_next_precomputed_line(),\n                self.get_next_precomputed_line(),\n            )\n        self.ops_counter[\"Double-and-Add Step\"] += 1\n        # Computes 2Qa+Qb as (Qa+Qb)+Qa\n        # https://arxiv.org/pdf/math/0208038.pdf 3.1\n        λ1 = self.compute_adding_slope(Qa, Qb)\n\n        # compute x3 = λ1²-x1-x2\n\n        x3 = self.vector_sub(X=self.fp2_square(X=λ1), Y=self.vector_add(Qa[0], Qb[0]))\n\n        # omit y3 computation\n        line1R0 = λ1\n        line1R1 = self.vector_sub(self.fp2_mul(λ1, Qa[0]), Qa[1])\n\n        # compute λ2 = -λ1-2y1/(x3-x1)\n\n        num = self.vector_add(Qa[1], Qa[1])\n        den = self.vector_sub(x3, Qa[0])\n        λ2 = self.vector_neg(self.vector_add(λ1, self.fp2_div(num, den)))\n\n        # compute xr = λ2²-x1-x3\n        x4 = self.vector_sub(self.vector_sub(self.fp2_square(λ2), Qa[0]), x3)\n\n        # compute y4 = λ2(x1 - x4)-y1\n        y4 = self.vector_sub(self.fp2_mul(λ2, self.vector_sub(Qa[0], x4)), Qa[1])\n\n        line2R0 = λ2\n        line2R1 = self.vector_sub(self.fp2_mul(λ2, Qa[0]), Qa[1])\n\n        return (x4, y4), (line1R0, line1R1), (line2R0, line2R1)\n\n    def double_and_add_step(\n        self,\n        Qa: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        Qb: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]],\n        k: int,\n    ):\n        (new_x, new_y), (line1R0, line1R1), (line2R0, line2R1) = self._double_and_add(\n            Qa, Qb, k\n        )\n        line1 = self.build_sparse_line_eval(\n            R0=line1R0,\n            R1=line1R1,\n            yInv=self.yInv[k],\n            xNegOverY=self.xNegOverY[k],\n        )\n        line2 = self.build_sparse_line_eval(\n            R0=line2R0,\n            R1=line2R1,\n            yInv=self.yInv[k],\n            xNegOverY=self.xNegOverY[k],\n        )\n        return (new_x, new_y), line1, line2\n\n    def _triple(\n        self, Q: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]], k: int\n    ):\n        if self.precompute_lines and (k + 1) <= self.n_points_precomputed_lines:\n            return (\n                (None, None),\n                self.get_next_precomputed_line(),\n                self.get_next_precomputed_line(),\n            )\n        self.ops_counter[\"Triple Step\"] += 1\n        # Compute λ = 3x² / 2y. Manually to keep den = 2y to be re-used for λ2.\n        x0, x1 = Q[0][0], Q[0][1]\n        num_tmp = [\n            self.mul(self.add(x0, x1), self.sub(x0, x1)),\n            self.mul(x0, x1),\n        ]\n        num = [\n            self.mul(num_tmp[0], self.set_or_get_constant(3)),\n            self.mul(num_tmp[1], self.set_or_get_constant(6)),\n        ]\n        den = self.vector_add(Q[1], Q[1])\n        λ1 = self.fp2_div(num, den)\n\n        line1R0 = λ1\n        line1R1 = self.vector_sub(self.fp2_mul(λ1, Q[0]), Q[1])\n\n        # x2 = λ1^2 - 2x\n        x2 = self.vector_sub(self.fp2_square(λ1), self.vector_add(Q[0], Q[0]))\n        # ommit yr computation, and\n\n        # compute λ2 = 2y/(x2 − x) − λ1.\n        # However in https://github.com/Consensys/gnark/blob/7cfcd5a723b0726dcfe75a5fc7249a23d690b00b/std/algebra/emulated/sw_bls12381/pairing.go#L548\n        # It's coded as x - x2.\n        λ2 = self.vector_sub(self.fp2_div(den, self.vector_sub(Q[0], x2)), λ1)\n\n        line2R0 = λ2\n        line2R1 = self.vector_sub(self.fp2_mul(λ2, Q[0]), Q[1])\n\n        # // xr = λ²-p.x-x2\n\n        xr = self.vector_sub(self.fp2_square(λ2), self.vector_add(Q[0], x2))\n\n        # // yr = λ(p.x-xr) - p.y\n        yr = self.vector_sub(self.fp2_mul(λ2, self.vector_sub(Q[0], xr)), Q[1])\n\n        return (xr, yr), (line1R0, line1R1), (line2R0, line2R1)\n\n    def triple_step(\n        self, Q: tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]], k: int\n    ):\n        (new_x, new_y), (line1R0, line1R1), (line2R0, line2R1) = self._triple(Q, k)\n        line1 = self.build_sparse_line_eval(\n            R0=line1R0,  # Directly store λ as R0\n            R1=line1R1,  # Compute R1 as λ*x - y\n            yInv=self.yInv[k],\n            xNegOverY=self.xNegOverY[k],\n        )\n        line2 = self.build_sparse_line_eval(\n            R0=line2R0,\n            R1=line2R1,\n            yInv=self.yInv[k],\n            xNegOverY=self.xNegOverY[k],\n        )\n\n        return (new_x, new_y), line1, line2\n\n    def bit_0_case(\n        self,\n        f: list[ModuloCircuitElement],\n        points: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        n_pairs: int,\n    ):\n        \"\"\"\n        Compute the bit 0 case of the Miller loop.\n        params : f : the current miller loop FP12 element\n                points : the list of points to double\n                n_pairs : the number of pairs to double\n        returns : the new miller loop FP12 element and the new points\n        \"\"\"\n        assert len(points) == n_pairs\n        new_lines = []\n        new_points = []\n        for k in range(n_pairs):\n            T, l1 = self.double_step(points[k], k)\n            new_lines.append(l1)\n            new_points.append(T)\n\n        # Square f and multiply by lines for all pairs\n        new_f = self.extf_mul(\n            [f, f, *new_lines],\n            12,\n            Ps_sparsities=[None, None] + [self.line_sparsity] * n_pairs,\n        )\n        return new_f, new_points\n\n    def bit_1_init_case(\n        self,\n        f: list[ModuloCircuitElement],\n        points: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        n_pairs: int,\n    ):\n        \"\"\"\n        Compute the bit 1 case of the Miller loop when it is the first bit.\n        Uses triple step instead of double and add.\n        \"\"\"\n        assert len(points) == n_pairs\n        new_lines = []\n        new_points = []\n        for k in range(n_pairs):\n            T, l1, l2 = self.triple_step(points[k], k)\n            new_lines.append(l1)\n            new_lines.append(l2)\n            new_points.append(T)\n\n        # Square f and multiply by lines for all pairs\n        new_f = self.extf_mul(\n            [f, f, *new_lines],\n            12,\n            Ps_sparsities=[None, None] + [self.line_sparsity] * n_pairs * 2,\n        )\n        return new_f, new_points\n\n    def bit_1_case(\n        self,\n        f: list[ModuloCircuitElement],\n        points: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        Q_select: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        n_pairs: int,\n    ):\n        \"\"\"\n        Compute the bit 1 case of the Miller loop.\n        params : f : the current miller loop FP12 element\n                points : the list of points to double\n                Q_select : the list of points to add.\n                Q_select[k] is the point to add if the k-th bit is 1, and the negation of the point if the k-th bit is -1.\n                n_pairs : the number of pairs to double\n        returns : the new miller loop FP12 element and the new points\n        \"\"\"\n        assert len(points) == n_pairs == len(Q_select)\n        new_lines = []\n        new_points = []\n        for k in range(n_pairs):\n            T, l1, l2 = self.double_and_add_step(points[k], Q_select[k], k)\n            new_lines.append(l1)\n            new_lines.append(l2)\n            new_points.append(T)\n\n        # Square f and multiply by lines for all pairs\n        new_f = self.extf_mul(\n            [f, f, *new_lines],\n            12,\n            Ps_sparsities=[None, None] + [self.line_sparsity] * n_pairs * 2,\n        )\n        return new_f, new_points\n\n    def _bn254_finalize_step(\n        self,\n        Qs: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n    ):\n        def set_or_get_constants():\n            nr1p2 = [\n                self.set_or_get_constant(\n                    self.field(\n                        21575463638280843010398324269430826099269044274347216827212613867836435027261\n                    )\n                ),\n                self.set_or_get_constant(\n                    self.field(\n                        10307601595873709700152284273816112264069230130616436755625194854815875713954\n                    )\n                ),\n            ]  # Non residue 1 power 2\n\n            nr1p3 = [\n                self.set_or_get_constant(\n                    self.field(\n                        2821565182194536844548159561693502659359617185244120367078079554186484126554\n                    ),\n                ),\n                self.set_or_get_constant(\n                    self.field(\n                        3505843767911556378687030309984248845540243509899259641013678093033130930403\n                    ),\n                ),\n            ]  # Non residue 1 power 3\n\n            nr2p2 = self.set_or_get_constant(\n                self.field(\n                    21888242871839275220042445260109153167277707414472061641714758635765020556616\n                )  # non_residue_2_power_2\n            )\n            nr2p3 = self.set_or_get_constant(\n                self.field(\n                    -21888242871839275222246405745257275088696311157297823662689037894645226208582\n                )\n            )  # (-1) * non_residue_2_power_3\n            return nr1p2, nr1p3, nr2p2, nr2p3\n\n        new_lines = []\n        for k in range(self.n_pairs):\n            if self.precompute_lines and (k + 1) <= self.n_points_precomputed_lines:\n                new_lines.append(\n                    (self.get_next_precomputed_line(), self.get_next_precomputed_line())\n                )\n            else:\n                nr1p2, nr1p3, nr2p2, nr2p3 = set_or_get_constants()\n                q1x = [self.Q[k][0][0], self.neg(self.Q[k][0][1])]\n                q1y = [self.Q[k][1][0], self.neg(self.Q[k][1][1])]\n                q1x = self.fp2_mul(\n                    q1x,\n                    nr1p2,\n                )\n                q1y = self.fp2_mul(\n                    q1y,\n                    nr1p3,\n                )\n                q2x = self.vector_scale(\n                    self.Q[k][0],\n                    nr2p2,\n                )\n                q2y = self.vector_scale(\n                    self.Q[k][1],\n                    nr2p3,\n                )\n\n                T, (l1R0, l1R1) = self._add(Qs[k], (q1x, q1y), k)\n                l2R0, l2R1 = self._line_compute(T, (q2x, q2y), k)\n                new_lines.append(((l1R0, l1R1), (l2R0, l2R1)))\n\n        return new_lines\n\n    def bn254_finalize_step(\n        self,\n        Qs: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n    ):\n        lines = self._bn254_finalize_step(Qs)\n        lines_evaluated = []\n        for k, (l1, l2) in enumerate(lines):\n            line_eval = self.build_sparse_line_eval(\n                R0=l1[0],\n                R1=l1[1],\n                yInv=self.yInv[k],\n                xNegOverY=self.xNegOverY[k],\n            )\n            line_eval2 = self.build_sparse_line_eval(\n                R0=l2[0],\n                R1=l2[1],\n                yInv=self.yInv[k],\n                xNegOverY=self.xNegOverY[k],\n            )\n            lines_evaluated.append(line_eval)\n            lines_evaluated.append(line_eval2)\n\n        return lines_evaluated\n\n    def miller_loop(self, n_pairs: int) -> list[ModuloCircuitElement]:\n        f = [self.set_or_get_constant(1)] + [self.set_or_get_constant(0)] * 11\n\n        start_index = len(self.loop_counter) - 2\n\n        if self.loop_counter[start_index] == 1:\n            # Handle case when first bit is +1, need to triple point instead of double and add.\n            f, Qs = self.bit_1_init_case(f, self.Q, n_pairs)\n        elif self.loop_counter[start_index] == 0:\n            f, Qs = self.bit_0_case(f, self.Q, n_pairs)\n        else:\n            raise NotImplementedError(\n                f\"Init bit {self.loop_counter[start_index]} not implemented\"\n            )\n\n        # Rest of miller loop.\n        for i in range(start_index - 1, -1, -1):\n            if self.loop_counter[i] == 0:\n                f, Qs = self.bit_0_case(f, Qs, n_pairs)\n            elif self.loop_counter[i] == 1 or self.loop_counter[i] == -1:\n                # Choose Q or -Q depending on the bit for the addition.\n                Q_selects = [\n                    self.Q[k] if self.loop_counter[i] == 1 else self.Qneg[k]\n                    for k in range(n_pairs)\n                ]\n                f, Qs = self.bit_1_case(f, Qs, Q_selects, n_pairs)\n            else:\n                raise NotImplementedError(f\"Bit {self.loop_counter[i]} not implemented\")\n\n        if self.curve_id == CurveID.BN254.value:\n            lines = self.bn254_finalize_step(Qs)\n            f = self.extf_mul(\n                [f, *lines],\n                12,\n                Ps_sparsities=[None] + [self.line_sparsity] * self.n_pairs * 2,\n            )\n        elif self.curve_id == CurveID.BLS12_381.value:\n            f = [\n                f[0],\n                self.neg(f[1]),\n                f[2],\n                self.neg(f[3]),\n                f[4],\n                self.neg(f[5]),\n                f[6],\n                self.neg(f[7]),\n                f[8],\n                self.neg(f[9]),\n                f[10],\n                self.neg(f[11]),\n            ]\n        else:\n            raise NotImplementedError(f\"Curve {self.curve_id} not implemented\")\n\n        return f\n\n\ndef precompute_lines(Qs: list[G2Point]) -> list[PyFelt]:\n    if len(Qs) == 0:\n        return []\n    curve_id = Qs[0].curve_id.value\n    loop_counter = CURVES[curve_id].loop_counter\n    start_index = len(loop_counter) - 2\n    n_pairs = len(Qs)\n    circuit = MultiMillerLoopCircuit(\n        name=\"precompute_helper\",\n        curve_id=curve_id,\n        n_pairs=n_pairs,\n        hash_input=False,\n        precompute_lines=False,\n    )\n    field = circuit.field\n    for Q in Qs:\n        circuit.Q.append(\n            (\n                [\n                    circuit.write_element(field(Q.x[0])),\n                    circuit.write_element(field(Q.x[1])),\n                ],\n                [\n                    circuit.write_element(field(Q.y[0])),\n                    circuit.write_element(field(Q.y[1])),\n                ],\n            )\n        )\n    circuit.precompute_consts(skip_P_precompute=True)\n\n    lines = []\n    if loop_counter[start_index] == 1:\n        # Handle case when first bit is +1, need to triple point instead of double and add.\n        new_points = []\n        new_lines = []\n        for k in range(n_pairs):\n            T, l1, l2 = circuit._triple(circuit.Q[k], k)\n            new_lines.append(l1)\n            new_lines.append(l2)\n            new_points.append(T)\n\n    elif loop_counter[start_index] == 0:\n        new_lines = []\n        new_points = []\n        for k in range(n_pairs):\n            T, l1 = circuit._double(circuit.Q[k], k)\n            new_lines.append(l1)\n            new_points.append(T)\n    else:\n        raise NotImplementedError(\n            f\"Init bit {loop_counter[start_index]} not implemented\"\n        )\n\n    points = new_points\n    lines.append(new_lines)\n    # Rest of miller loop.=\n    for i in range(start_index - 1, -1, -1):\n\n        new_lines = []\n        new_points = []\n        if loop_counter[i] == 0:\n            for k in range(n_pairs):\n                T, l1 = circuit._double(points[k], k)\n                new_lines.append(l1)\n                new_points.append(T)\n        elif loop_counter[i] == 1 or loop_counter[i] == -1:\n            # Choose Q or -Q depending on the bit for the addition.\n            Q_selects = [\n                circuit.Q[k] if loop_counter[i] == 1 else circuit.Qneg[k]\n                for k in range(n_pairs)\n            ]\n            for k in range(n_pairs):\n                T, l1, l2 = circuit._double_and_add(points[k], Q_selects[k], k)\n                new_lines.append(l1)\n                new_lines.append(l2)\n                new_points.append(T)\n        else:\n            raise NotImplementedError(f\"Bit {loop_counter[i]} not implemented\")\n        points = new_points\n        lines.append(new_lines)\n\n    if curve_id == CurveID.BN254.value:\n        final_lines = circuit._bn254_finalize_step(points)\n        for l1, l2 in final_lines:\n            lines.append(l1)\n            lines.append(l2)\n\n    elif curve_id == CurveID.BLS12_381.value:\n        pass\n    else:\n        raise NotImplementedError(f\"Curve {curve_id} not implemented\")\n\n    return [x.felt for x in flatten(lines)]\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/multi_pairing_check.py",
    "content": "from garaga.algebra import get_sparsity\nfrom garaga.curves import CURVES, CurveID, get_base_field\nfrom garaga.hints.frobenius import get_frobenius_maps\nfrom garaga.hints.multi_miller_witness import get_final_exp_witness\nfrom garaga.hints.tower_backup import E6, E12\nfrom garaga.modulo_circuit import ModuloCircuitElement, PyFelt, WriteOps\nfrom garaga.points import G1G2Pair, G1Point, G2Point\nfrom garaga.precompiled_circuits.multi_miller_loop import MultiMillerLoopCircuit\n\n\ndef get_root_and_scaling_factor(\n    curve_id: int,\n    P: list[G1Point | tuple[ModuloCircuitElement, ModuloCircuitElement]],\n    Q: list[\n        G2Point\n        | tuple[\n            tuple[ModuloCircuitElement, ModuloCircuitElement],\n            tuple[ModuloCircuitElement, ModuloCircuitElement],\n        ]\n    ],\n    m: list[ModuloCircuitElement] = None,\n) -> tuple[list[PyFelt], list[PyFelt], list[int]]:\n    assert (\n        len(P) == len(Q) >= 2\n    ), f\"P and Q must have the same length and >= 2, got {len(P)} and {len(Q)}\"\n    field = get_base_field(curve_id)\n    c_input: list[PyFelt] = []\n\n    c: MultiMillerLoopCircuit = MultiMillerLoopCircuit(\n        name=\"mock\", curve_id=curve_id, n_pairs=len(P)\n    )\n    if isinstance(P[0], G1Point):\n        c.write_p_and_q(P, Q)\n    elif isinstance(P[0], tuple) and isinstance(P[0][0], ModuloCircuitElement):\n        for p, q in zip(P, Q):\n            c_input.append(p[0].felt)\n            c_input.append(p[1].felt)\n            c_input.append(q[0][0].felt)\n            c_input.append(q[0][1].felt)\n            c_input.append(q[1][0].felt)\n            c_input.append(q[1][1].felt)\n        c.write_p_and_q_raw(c_input)\n\n    f = E12.from_direct(c.miller_loop(len(P)), curve_id)\n    if m is not None:\n        M = E12.from_direct(m, curve_id)\n        f = f * M\n    # h = (CURVES[curve_id].p ** 12 - 1) // CURVES[curve_id].n\n    # assert f**h == E12.one(curve_id)\n    lambda_root_e12, scaling_factor_e12 = get_final_exp_witness(curve_id, f)\n\n    lambda_root: list[PyFelt]\n    scaling_factor: list[PyFelt]\n\n    lambda_root, scaling_factor = (\n        (\n            lambda_root_e12.__inv__().to_direct()\n            if curve_id == CurveID.BLS12_381.value\n            else lambda_root_e12.to_direct()\n        ),  # Pass lambda_root inverse directly for BLS.\n        scaling_factor_e12.to_direct(),\n    )\n\n    e6_subfield = E12([E6.random(curve_id), E6.zero(curve_id)], curve_id)\n    scaling_factor_sparsity = get_sparsity(e6_subfield.to_direct())\n\n    # Assert sparsity is correct: for every index where the sparsity is 0, the coefficient must 0 in scaling factor\n    for i in range(len(scaling_factor_sparsity)):\n        if scaling_factor_sparsity[i] == 0:\n            assert scaling_factor[i].value == 0\n    # Therefore scaling factor lies in Fp6\n\n    return lambda_root, scaling_factor, scaling_factor_sparsity\n\n\ndef get_max_Q_degree(curve_id: int, n_pairs: int) -> int:\n    if curve_id == CurveID.BN254.value:\n        line_degree = 9\n    elif curve_id == CurveID.BLS12_381.value:\n        line_degree = 8\n    else:\n        raise NotImplementedError(f\"Curve {curve_id} not implemented\")\n\n    f_degree = 11\n    lambda_root_degree = 11\n\n    if curve_id == CurveID.BN254.value:\n        # Largest degree happen in bit_10 case where we do (f*f*C * Π_n_pairs(line)^2 * Π_n_pairs(line))\n        max_q_degree = (\n            4 * f_degree\n            + 2 * lambda_root_degree\n            + 4 * line_degree * n_pairs\n            + line_degree * n_pairs\n            - 12\n        )\n    else:\n        # Largest Q happens in bit_00 case where we do (f*f* Π_n_pairs(line)^2 * Π_n_pairs(line)\n        max_q_degree = (\n            4 * f_degree + 2 * line_degree * n_pairs + line_degree * n_pairs - 12\n        )\n\n    return max_q_degree\n\n\nclass MultiPairingCheckCircuit(MultiMillerLoopCircuit):\n    def __init__(\n        self,\n        name: str,\n        curve_id: int,\n        n_pairs: int,\n        hash_input: bool = True,\n        init_hash: int = None,\n        compilation_mode: int = 0,\n        precompute_lines: bool = False,\n        n_points_precomputed_lines: int = None,\n    ):\n        assert n_pairs >= 2, \"n_pairs must be >= 2 for pairing checks\"\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            n_pairs=n_pairs,\n            hash_input=hash_input,\n            init_hash=init_hash,\n            compilation_mode=compilation_mode,\n            precompute_lines=precompute_lines,\n            n_points_precomputed_lines=n_points_precomputed_lines,\n        )\n        self.frobenius_maps = {}\n        for i in [1, 2, 3]:\n            _, self.frobenius_maps[i] = get_frobenius_maps(\n                curve_id=curve_id, extension_degree=self.extension_degree, frob_power=i\n            )\n\n    def frobenius(\n        self, X: list[ModuloCircuitElement], frob_power: int\n    ) -> list[ModuloCircuitElement]:\n        frob = [None] * self.extension_degree\n        for i, list_op in enumerate(self.frobenius_maps[frob_power]):\n            list_op_result = []\n            for index, constant in list_op:\n                if constant == 1:\n                    list_op_result.append(X[index])\n                else:\n                    list_op_result.append(\n                        self.mul(\n                            X[index], self.set_or_get_constant(self.field(constant))\n                        )\n                    )\n            frob[i] = list_op_result[0]\n            for op_res in list_op_result[1:]:\n                frob[i] = self.add(frob[i], op_res)\n\n        return frob\n\n    def bit_0_case(\n        self,\n        f: list[ModuloCircuitElement],\n        points: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        n_pairs: int,\n    ):\n        \"\"\"\n        Compute the bit 0 case of the Miller loop.\n        params : f : the current miller loop FP12 element\n                points : the list of points to double\n                n_pairs : the number of pairs to double\n        returns : the new miller loop FP12 element and the new points\n        \"\"\"\n        assert len(points) == n_pairs\n        new_lines = []\n        new_points = []\n        for k in range(n_pairs):\n            T, l1 = self.double_step(points[k], k)\n            new_lines.append(l1)\n            new_points.append(T)\n\n        # Square f and multiply by lines for all pairs\n        new_f = self.extf_mul(\n            [f, f, *new_lines],\n            12,\n            Ps_sparsities=[None, None] + [self.line_sparsity] * n_pairs,\n        )\n        return new_f, new_points\n\n    def bit_00_case(\n        self,\n        f: list[ModuloCircuitElement],\n        points: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        n_pairs: int,\n    ):\n        \"\"\"\n        Compute the bit 00 case of the Miller loop.\n        params : f : the current miller loop FP12 element\n                points : the list of points to double\n                n_pairs : the number of pairs to double\n        returns : the new miller loop FP12 element and the new points\n        \"\"\"\n        assert len(points) == n_pairs\n        new_lines = []\n        new_points = []\n        for k in range(n_pairs):\n            T, l1 = self.double_step(points[k], k)\n            new_lines.append(l1)\n            new_lines.append(l1)  # Double since it's going to be squared\n            new_points.append(T)\n\n        new_new_points = []\n        new_new_lines = []\n\n        for k in range(n_pairs):\n            T, l1 = self.double_step(new_points[k], k)\n            new_new_lines.append(l1)\n            new_new_points.append(T)\n\n        # (f^2 * Π_(new_lines))^2 * Π_new_new_lines = f^4 * Π_new_lines^2 * Π_new_new_lines\n\n        new_f = self.extf_mul(\n            [f, f, f, f, *new_lines, *new_new_lines],\n            12,\n            Ps_sparsities=[None, None, None, None]\n            + [self.line_sparsity] * n_pairs * 2\n            + [self.line_sparsity] * n_pairs,\n        )\n        return new_f, new_new_points\n\n    def bit_01_case(\n        self,\n        f: list[ModuloCircuitElement],\n        points: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        Q_selects: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        c_or_c_inv: list[ModuloCircuitElement],\n        n_pairs: int,\n    ):\n\n        assert len(points) == n_pairs\n        new_lines = []\n        new_points = []\n        for k in range(n_pairs):\n            T, l1 = self.double_step(points[k], k)\n            new_lines.append(l1)\n            new_lines.append(l1)  # Double since it's going to be squared\n            new_points.append(T)\n\n        new_new_points = []\n        new_new_lines = []\n\n        for k in range(n_pairs):\n            T, l1, l2 = self.double_and_add_step(new_points[k], Q_selects[k], k)\n            new_new_lines.append(l1)\n            new_new_lines.append(l2)\n            new_new_points.append(T)\n\n        # (f^2 * Π_(new_lines))^2 * Π_new_new_lines = f^4 * Π_new_lines^2 * Π_new_new_lines\n        new_f = self.extf_mul(\n            [f, f, f, f, *new_lines, *new_new_lines, c_or_c_inv],\n            12,\n            Ps_sparsities=[None] * 4\n            + [self.line_sparsity] * n_pairs * 2\n            + [self.line_sparsity] * n_pairs * 2\n            + [None],\n        )\n        return new_f, new_new_points\n\n    def bit_10_case(\n        self,\n        f: list[ModuloCircuitElement],\n        points: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        Q_selects: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        c_or_c_inv: list[ModuloCircuitElement],\n        n_pairs: int,\n    ):\n        assert len(points) == n_pairs\n        new_lines = []\n        new_points = []\n        for k in range(n_pairs):\n            T, l1, l2 = self.double_and_add_step(points[k], Q_selects[k], k)\n            new_lines.append(l1)\n            new_lines.append(l1)  # Double since it's going to be squared\n            new_lines.append(l2)\n            new_lines.append(l2)  # Double since it's going to be squared\n            new_points.append(T)\n\n        new_new_points = []\n        new_new_lines = []\n\n        for k in range(n_pairs):\n            T, l1 = self.double_step(new_points[k], k)\n            new_new_lines.append(l1)\n            new_new_points.append(T)\n\n        new_f = self.extf_mul(\n            [f, f, f, f, c_or_c_inv, c_or_c_inv, *new_lines, *new_new_lines],\n            12,\n            Ps_sparsities=[None] * 4\n            + [None, None]\n            + [self.line_sparsity] * n_pairs * 4\n            + [self.line_sparsity] * n_pairs,\n        )\n        return new_f, new_new_points\n\n    def bit_1_init_case(\n        self,\n        f: list[ModuloCircuitElement],\n        points: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        n_pairs: int,\n        c: list[ModuloCircuitElement],\n    ):\n        \"\"\"\n        Compute the bit 1 case of the Miller loop when it is the first bit (positive).\n        Uses triple step instead of double and add.\n        \"\"\"\n        assert len(points) == n_pairs\n        new_lines = []\n        new_points = []\n        for k in range(n_pairs):\n            T, l1, l2 = self.triple_step(points[k], k)\n            new_lines.append(l1)\n            new_lines.append(l2)\n            new_points.append(T)\n\n        # Square f and multiply by lines for all pairs\n        new_f = self.extf_mul(\n            [f, f, c, *new_lines],\n            12,\n            Ps_sparsities=[None, None, None] + [self.line_sparsity] * n_pairs * 2,\n        )\n        return new_f, new_points\n\n    def bit_1_case(\n        self,\n        f: list[ModuloCircuitElement],\n        points: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        Q_select: list[tuple[list[ModuloCircuitElement], list[ModuloCircuitElement]]],\n        n_pairs: int,\n        c_or_c_inv: list[ModuloCircuitElement],\n    ):\n        \"\"\"\n        Compute the bit 1 case of the Miller loop.\n        params : f : the current miller loop FP12 element\n                points : the list of points to double\n                Q_select : the list of points to add.\n                Q_select[k] is the point to add if the k-th bit is 1, and the negation of the point if the k-th bit is -1.\n                n_pairs : the number of pairs to double\n                c_or_c_inv : the lambda-th root c or its inverse depending on the bit (c_inv if 1, c if -1)\n        returns : the new miller loop FP12 element and the new points\n        \"\"\"\n        assert len(points) == n_pairs == len(Q_select)\n        new_lines = []\n        new_points = []\n        for k in range(n_pairs):\n            T, l1, l2 = self.double_and_add_step(points[k], Q_select[k], k)\n            new_lines.append(l1)\n            new_lines.append(l2)\n            new_points.append(T)\n\n        # Square f and multiply by lines for all pairs\n        new_f = self.extf_mul(\n            [f, f, c_or_c_inv, *new_lines],\n            12,\n            Ps_sparsities=[None, None, None] + [self.line_sparsity] * n_pairs * 2,\n        )\n        return new_f, new_points\n\n    def multi_pairing_check(\n        self, n_pairs: int, m: list[ModuloCircuitElement] | None = None\n    ) -> tuple[\n        list[ModuloCircuitElement],\n        list[ModuloCircuitElement],\n        list[ModuloCircuitElement],\n    ]:\n\n        lambda_root, scaling_factor, scaling_factor_sparsity = (\n            get_root_and_scaling_factor(self.curve_id, self.P, self.Q, m)\n        )\n\n        c_or_c_inv = self.write_elements(lambda_root, WriteOps.COMMIT)\n\n        w = self.write_elements(\n            scaling_factor, WriteOps.COMMIT, scaling_factor_sparsity\n        )\n\n        if self.curve_id == CurveID.BLS12_381.value:\n            # Conjugate c so that the final conjugate in BLS loop gives indeed f/c^(-x), as conjugate(f/conjugate(c^(-x))) = conjugate(f)/c^(-x)\n            lambda_root = None\n            lambda_root_inverse = c_or_c_inv\n            c_inv = self.conjugate_e12d(lambda_root_inverse)\n        elif self.curve_id == CurveID.BN254.value:\n            lambda_root = c = c_or_c_inv\n            lambda_root_inverse = c_inv = self.extf_inv(c_or_c_inv, 12)\n\n        # Init f as 1/c = 1 / (λ-th √(f_output*scaling_factor)), where:\n        # λ = 6 * x + 2 + q - q**2 + q**3 for BN\n        # λ = -x + q for BLS\n        # Miller loop will compute f_output/c^(6*x2) if BN, or f_output/c^(-x) if BLS\n\n        f = c_inv\n\n        start_index = len(self.loop_counter) - 2\n\n        if self.loop_counter[start_index] == 1:\n            # Handle case when first bit is +1, need to triple point instead of double and add.\n            f, Qs = self.bit_1_init_case(f, self.Q, n_pairs, c_inv)\n        elif self.loop_counter[start_index] == 0:\n            f, Qs = self.bit_0_case(f, self.Q, n_pairs)\n        else:\n            raise NotImplementedError(\n                f\"Init bit {self.loop_counter[start_index]} not implemented\"\n            )\n\n        i = start_index - 1\n        while i >= 0:\n            if self.loop_counter[i] == 0:  # First bit is 0\n                if i > 0:  # Check next bit if it exists\n                    next_bit = self.loop_counter[i - 1]\n                    if next_bit == 0:\n                        # 00 case\n                        f, Qs = self.bit_00_case(f, Qs, n_pairs)\n                        i -= 1  # Skip next bit\n                    elif next_bit in (1, -1) and self.curve_id == CurveID.BN254.value:\n                        # 01 or 0(-1) case\n                        Q_selects = [\n                            self.Q[k] if next_bit == 1 else self.Qneg[k]\n                            for k in range(n_pairs)\n                        ]\n                        c_or_c_inv = c_inv if next_bit == 1 else c\n                        f, Qs = self.bit_01_case(f, Qs, Q_selects, c_or_c_inv, n_pairs)\n                        i -= 1  # Skip next bit\n                    else:\n                        # Single 0 (BLS only)\n                        f, Qs = self.bit_0_case(f, Qs, n_pairs)\n                else:\n                    # Single 0 at the end\n                    f, Qs = self.bit_0_case(f, Qs, n_pairs)\n\n            elif self.loop_counter[i] in (1, -1):  # First bit is ±1\n                # Calculate Q_selects and c_or_c_inv based on the si\n                Q_selects = [\n                    self.Q[k] if self.loop_counter[i] == 1 else self.Qneg[k]\n                    for k in range(n_pairs)\n                ]\n                c_or_c_inv = c_inv if self.loop_counter[i] == 1 else c\n\n                if (\n                    i > 0\n                    and self.loop_counter[i - 1] == 0\n                    and self.curve_id == CurveID.BN254.value\n                ):\n                    # 10 or (-1)0 case\n                    f, Qs = self.bit_10_case(f, Qs, Q_selects, c_or_c_inv, n_pairs)\n                    i -= 1  # Skip next bit\n                elif i == 0 or self.curve_id == CurveID.BLS12_381.value:\n                    # Single ±1 at the end\n                    f, Qs = self.bit_1_case(f, Qs, Q_selects, n_pairs, c_or_c_inv)\n                else:\n                    raise NotImplementedError(\n                        f\"Bit {self.loop_counter[i]} not implemented\"\n                    )\n            else:\n                raise NotImplementedError(f\"Bit {self.loop_counter[i]} not implemented\")\n            i -= 1\n\n        final_r_sparsity = [1] + [0] * 11\n\n        if self.curve_id == CurveID.BN254.value:\n            lines = self.bn254_finalize_step(Qs)\n            f = self.extf_mul(\n                [f, *lines],\n                12,\n                Ps_sparsities=[None] + [self.line_sparsity] * self.n_pairs * 2,\n            )\n            # λ = 6 * x + 2 + q - q**2 + q**3\n            c_inv_frob_1 = self.frobenius(c_inv, 1)\n            c_frob_2 = self.frobenius(c, 2)\n            c_inv_frob_3 = self.frobenius(c_inv, 3)\n\n            f = self.extf_mul(\n                (\n                    [f, w, c_inv_frob_1, c_frob_2, c_inv_frob_3]\n                    + ([m] if m is not None else [])\n                ),\n                12,\n                Ps_sparsities=(\n                    [None, scaling_factor_sparsity, None, None, None]\n                    + ([None] if m is not None else [])\n                ),\n                r_sparsity=final_r_sparsity,\n            )\n\n        elif self.curve_id == CurveID.BLS12_381.value:\n            # λ = -x + q for BLS\n            c_inv_frob_1 = self.frobenius(c_inv, 1)\n\n            f = self.conjugate_e12d(f)\n            w = self.conjugate_e12d(w)\n            c_inv_frob_1 = self.conjugate_e12d(c_inv_frob_1)\n\n            f = self.extf_mul(\n                Ps=[f, w, c_inv_frob_1] + ([m] if m is not None else []),\n                extension_degree=12,\n                Ps_sparsities=[None, scaling_factor_sparsity, None]\n                + ([None] if m is not None else []),\n                r_sparsity=final_r_sparsity,\n            )\n\n        else:\n            raise NotImplementedError(f\"Curve {self.curve_id} not implemented\")\n\n        assert [fi.value for fi in f] == [1] + [\n            0\n        ] * 11, f\"Pairing check failed: {[fi.value for fi in f]}\"\n        return (\n            f,\n            lambda_root,\n            lambda_root_inverse,\n            scaling_factor,\n            scaling_factor_sparsity,\n        )\n\n\ndef get_pairing_check_input(\n    curve_id: CurveID, n_pairs: int, include_m: bool = False, return_pairs: bool = False\n) -> tuple[list[PyFelt | G1G2Pair], list[PyFelt] | G1G2Pair | None]:\n    \"\"\"\n    Generates test input data for pairing check circuits that satisfy e(P1,Q1) * ... * e(Pn,Qn) = 1.\n\n    For n_pairs=2: Creates BLS signature verification scenario with (signature, message_hash) and (generator, -public_key).\n    For n_pairs>2: Generates random points where the last pair is adjusted to make the product equal 1.\n\n    Args:\n        curve_id: The elliptic curve to generate points on\n        n_pairs: Number of pairing pairs (minimum 2)\n        include_m: If True, treats last pair separately and computes its Miller loop result\n        return_pairs: If True, returns G1G2Pair objects; if False, returns flattened field elements\n\n    Returns:\n        - If return_pairs=True: (list of G1G2Pair objects, optional extra pair)\n        - If return_pairs=False: (flattened field elements, optional Miller loop result)\n    \"\"\"\n    n_pairs = n_pairs + include_m\n\n    assert n_pairs >= 2, \"n_pairs must be >= 2 for pairing checks\"\n    field = get_base_field(curve_id.value)\n    if n_pairs == 2:\n        # Generate inputs resembling BLS signature verification\n        curve = CURVES[curve_id.value]\n        secret_key = field.random(curve.n).value\n        public_key = G2Point.get_nG(curve_id, secret_key)\n        message_hash = G1Point.gen_random_point(curve_id)\n        signature = message_hash.scalar_mul(secret_key)\n\n        P = [signature, message_hash]\n        Q = [G2Point.get_nG(curve_id, 1), -public_key]\n    else:\n        p = G1Point.gen_random_point(curve_id)\n        q = G2Point.gen_random_point(curve_id)\n\n        P = [p] * n_pairs\n        Q = [q] * n_pairs\n\n        P[-1] = p.scalar_mul(-(n_pairs - 1))\n    c_input = []\n    for p, q in zip(P, Q):\n        c_input.append(field(p.x))\n        c_input.append(field(p.y))\n        c_input.append(field(q.x[0]))\n        c_input.append(field(q.x[1]))\n        c_input.append(field(q.y[0]))\n        c_input.append(field(q.y[1]))\n\n    if return_pairs:\n        if include_m:\n            return [G1G2Pair(p, q) for p, q in zip(P[:-1], Q[:-1])], G1G2Pair(\n                P[-1], Q[-1]\n            )\n        else:\n            return [G1G2Pair(p, q) for p, q in zip(P, Q)], None\n    else:\n        if include_m:\n            mloop_circuit = MultiMillerLoopCircuit(\n                name=\"mock\", curve_id=curve_id.value, n_pairs=1\n            )\n            mloop_circuit.write_p_and_q_raw(c_input[-6:])\n            M = mloop_circuit.miller_loop(n_pairs=1)\n            M = [mi.felt for mi in M]\n            return c_input[:-6], M\n        else:\n            return c_input, None\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/poseidon_bn254.py",
    "content": "from garaga.curves import CurveID, get_base_field\nfrom garaga.modulo_circuit import ModuloCircuit, ModuloCircuitElement\nfrom garaga.modulo_circuit_structs import u384\n\n# Global circuit definition\ncurve_id = CurveID.GRUMPKIN  # BN254\nfield = get_base_field(curve_id)\nCOMPILATION_MODE = 1  # 1 for Cairo, 0 for CairoZero.\n\ncircuit = ModuloCircuit(\n    name=f\"poseidon_{curve_id.name.lower()}\",\n    curve_id=curve_id.value,\n    generic_circuit=False,\n    compilation_mode=COMPILATION_MODE,\n)\n\n# Define inputs to the circuit\nx = circuit.write_struct(u384(\"x\", [field(1)]))  # Input x = 1\ny = circuit.write_struct(u384(\"y\", [field(2)]))  # Input y = 2\n\n\n# Utility functions for Poseidon hash\ndef sigma(value):\n    \"\"\"Applies the Poseidon sigma function.\"\"\"\n    x2 = circuit.mul(value, value)  # (value * value)\n    x4 = circuit.mul(x2, x2)  # (x2 * x2)\n    return circuit.mul(x4, value)  # (x4 * value)\n\n\ndef ark(t, C, r, state):\n    \"\"\"Applies the Ark step of the Poseidon hash.\"\"\"\n    return [circuit.add(state[i], C[i + r]) for i in range(t)]\n\n\ndef iterated_add(terms):\n    \"\"\"Performs iterative addition since circuit.add can only take two parameters.\"\"\"\n    result = terms[0]\n    for term in terms[1:]:\n        result = circuit.add(result, term)\n    return result\n\n\ndef iterated_mul(terms):\n    \"\"\"Performs iterative multiplication since circuit.mul can only take two parameters.\"\"\"\n    result = terms[0]\n    for term in terms[1:]:\n        result = circuit.mul(result, term)\n    return result\n\n\ndef mix(t, M, state):\n    \"\"\"Applies the Mix step of the Poseidon hash.\"\"\"\n    return [\n        iterated_add([circuit.mul(M[j][i], state[j]) for j in range(t)])\n        for i in range(t)\n    ]\n\n\ndef mix_last(t, M, s, state):\n    \"\"\"Applies the MixLast step of the Poseidon hash.\"\"\"\n    return iterated_add([circuit.mul(M[j][s], state[j]) for j in range(t)])\n\n\ndef mix_s(t, S, r, state):\n    \"\"\"Applies the MixS step of the Poseidon hash.\"\"\"\n    result = [\n        iterated_add([circuit.mul(S[(t * 2 - 1) * r + i], state[i]) for i in range(t)])\n    ]\n    result.extend(\n        circuit.add(state[i], circuit.mul(state[0], S[(t * 2 - 1) * r + t + i - 1]))\n        for i in range(1, t)\n    )\n    return result\n\n\ndef poseidon_hash(\n    x: ModuloCircuitElement, y: ModuloCircuitElement\n) -> ModuloCircuitElement:\n    \"\"\"Computes the Poseidon hash for two inputs x and y.\"\"\"\n    if isinstance(x, int):\n        x = circuit.write_element(x)\n    if isinstance(y, int):\n        y = circuit.write_element(y)\n    if not isinstance(x, ModuloCircuitElement) or not isinstance(\n        y, ModuloCircuitElement\n    ):\n        raise ValueError(\"x and y must be ModuloCircuitElement instances\")\n\n    t = 3  # 2 inputs + 1 state\n    n_rounds_f = 8  # Full rounds\n    n_rounds_p = 57  # Partial rounds\n\n    state = [circuit.set_or_get_constant(0), x, y]\n\n    # Example constants (these should match the specific Poseidon implementation)\n    POSEIDON_C = [\n        0xEE9A592BA9A9518D05986D656F40C2114C4993C11BB29938D21D47304CD8E6E,\n        0xF1445235F2148C5986587169FC1BCD887B08D4D00868DF5696FFF40956E864,\n        0x8DFF3487E8AC99E1F29A058D0FA80B930C728730B7AB36CE879F3890ECF73F5,\n        0x84D520E4E5BB469E1F9075CB7C490EFA59565EEDAE2D00CA8EF88CEEA2B0197,\n        0x2D15D982D99577FA33DA56722416FD734B3E667A2F9F15D8EB3E767AE0FD811E,\n        0xED2538844ABA161CF1578A43CF0364E91601F6536A5996D0EFBE65632C41B6D,\n        0x2600C27D879FBCA186E739E6363C71CF804C877D829B735DCC3E3AF02955E60A,\n        0x28F8BD44A583CBAA475BD15396430E7CCB99A5517440DFD970058558282BF2C5,\n        0x9CD7D4C380DC5488781AAD012E7EAEF1ED314D7F697A5572D030C55DF153221,\n        0x11BB6EE1291AABB206120ECAACE460D24B6713FEBE82234951E2BEE7D0F855F5,\n        0x2D74E8FA0637D9853310F3C0E3FAE1D06F171580F5B8FD05349CADEECFCEB230,\n        0x2735E4EC9D39BDFFAC9BEF31BACBA338B1A09559A511A18BE4B4D316ED889033,\n        0xF03C1E9E0895DB1A5DA6312FAA78E971106C33F826E08DCF617E24213132DFD,\n        0x17094CD297BF827CAF92920205B719C18741090B8F777811848A7E9EAD6778C4,\n        0xDB8F419C21F92461FC2B3219465798348DF90D4178042C81BA7D4B4D559E2B8,\n        0x243443613F64FFA417427ED5933FCFBC66809DB60B9CA1724A22709CECEEECE2,\n        0x22AF49FBFD5D7E9FCD256C25C07D3DD8ECBBAE6DEECD03AA04BB191FADA75411,\n        0x14FBD37FA8AD6E4E0C78A20D93C7230C4677F797B4327323F7F7C097C19420E0,\n        0x15A9298BBB882534D4B2C9FBC6E4EF4189420C4EB3F3E1EA22FAA7E18B5AE625,\n        0x2F7DE75F23DDAAA5221323EBCEB2F2AC83EEF92E854E75434C2F1D90562232BC,\n        0x36A4432A868283B78A315E84C4AE5AECA216F2FF9E9B2E623584F7479CD5C27,\n        0x2180D7786A8CF810E277218AB14A11E5E39F3C962F11E860AE1C5682C797DE5C,\n        0xA268EF870736EEBD0CB55BE640D73EE3778990484CC03CE53572377EEFFF8E4,\n        0x1EEFEFE11C0BE4664F2999031F15994829E982E8C90E09069DF9BAE16809A5B2,\n        0x27E87F033BD1E0A89CA596E8CB77FE3A4B8FB93D9A1129946571A3C3CF244C52,\n        0x1498A3E6599FE243321F57D6C5435889979C4F9D2A3E184D21451809178EE39,\n        0x27C0A41F4CB9FE67E9DD4D7CE33707F74D5D6BCC235BEF108DEA1BBEBDE507AA,\n        0x1F75230908B141B46637238B120FC770F4F4AE825D5004C16A7C91FE1DAE280F,\n        0x25F99A9198E923167BBA831B15FFFD2D7B97B3A089808D4EB1F0A085BEE21656,\n        0x101BC318E9EA5920D0F6ACDC2BB526593D3D56EC8ED14C67622974228BA900C6,\n        0x1A175607067D517397C1334ECB019754EBC0C852A3CF091EC1CCC43207A83C76,\n        0xF02F0E6D25F9EA3DEB245F3E8C381EE6B2EB380BA4AF5C1C4D89770155DF37B,\n        0x151D757ACC8237AF08D8A6677203EC9692565DE456AE789FF358B3163B393BC9,\n        0x256CD9577CEA143049E0A1FE0068DD20084980EE5B757890A79D13A3A624FAD4,\n        0x513ABAFF6195EA48833B13DA50E0884476682C3FBDD195497B8AE86E1937C61,\n        0x1D9570DC70A205F36F610251EE6E2E8039246E84E4AC448386D19DBAC4E4A655,\n        0x18F1A5194755B8C5D5D7F1BF8AAA6F56EFFB012DD784CF5E044EEC50B29FC9D4,\n        0x266B53B615EF73AC866512C091E4A4F2FA4BB0AF966EF420D88163238EEBBCA8,\n        0x2D63234C9207438AA42B8DE27644C02268304DFEB8C89A1A3F4FD6E8344AE0F7,\n        0x2AB30FBE51EE49BC7B3ADDE219A6F0B5FBB976205EF8DF7E0021DAEE6F55C693,\n        0x1AEE6D4B3EBE9366DCB9CCE48969D4DF1DC42ABCD528B270068D9207FA6A45C9,\n        0x1891AEAB71E34B895A79452E5864AE1D11F57646C60BB34AA211D123F6095219,\n        0x24492B5F95C0B0876437E94B4101C69118E16B2657771BD3A7CAAB01C818AA4B,\n        0x1752161B3350F7E1B3B2C8663A0D642964628213D66C10AB2FDDF71BCFDE68F,\n        0xAB676935722E2F67CFB84938E614C6C2F445B8D148DE54368CFB8F90A00F3A7,\n        0xB0F72472B9A2F5F45BC730117ED9AE5683FC2E6E227E3D4FE0DA1F7AA348189,\n        0x16AA6F9273ACD5631C201D1A52FC4F8ACAF2B2152C3AE6DF13A78A513EDCD369,\n        0x2F60B987E63614EB13C324C1D8716EB0BF62D9B155D23281A45C08D52435CD60,\n        0x18D24AE01DDE92FD7606BB7884554E9DF1CB89B042F508FD9DB76B7CC1B21212,\n        0x4FC3BF76FE31E2F8D776373130DF79D18C3185FDF1593960715D4724CFFA586,\n        0xD18F6B53FC69546CFDD670B41732BDF6DEE9E06B21260C6B5D26270468DBF82,\n        0xBA4231A918F13ACEC11FBAFA17C5223F1F70B4CDB045036FA5D7045BD10E24,\n        0x7B458B2E00CD7C6100985301663E7EC33C826DA0635FF1EBEDD0DD86120B4C8,\n        0x1C35C2D96DB90F4F6058E76F15A0C8286BBA24E2ED40B16CEC39E9FD7BAA5799,\n        0x1D12BEA3D8C32A5D766568F03DD1ECDB0A4F589ABBEF96945E0DDE688E292050,\n        0xD953E20022003270525F9A73526E9889C995BB62FDEA94313DB405A61300286,\n        0x29F053EC388795D786A40BEC4C875047F06FF0B610B4040A760E33506D2671E1,\n        0x4188E33735F46B14A4952A98463BC12E264D5F446E0C3F64B9679CAAAE44FC2,\n        0x149EC28846D4F438A84F1D0529431BB9E996A408B7E97EB3BF1735CDBE96F68F,\n        0xDE20FAE0AF5188BCA24B5F63630BAD47AEAFD98E651922D148CCE1C5FDDDEE8,\n        0x12D650E8F790B1253EA94350E722AD2F7D836C234B8660EDF449FBA6984C6709,\n        0x22AB53AA39F34AD30EA96717BA7446AAFDADBC1A8ABE28D78340DFC4BABB8F6C,\n        0x26503E8D4849BDF5450DABEA7907BC3DE0DE109871DD776904A129DB9149166C,\n        0x1D5E7A0E2965DFFA00F5454F5003C5C8EC34B23D897E7FC4C8064035B0D33850,\n        0xEE3D8DAA098BEE012D96B7EC48448C6BC9A6AEFA544615B9CB3C7BBD07104CB,\n        0x1BF282082A04979955D30754CD4D9056FA9EF7A7175703D91DC232B5F98EAD00,\n        0x7AE1344ABFC6C2CE3E951BC316BEE49971645F16B693733A0272173EE9AD461,\n        0x217E3A247827C376EC21B131D511D7DBDC98A36B7A47D97A5C8E89762EE80488,\n        0x215FFE584B0EB067A003D438E2FBE28BABE1E50EFC2894117509B616ADDC30EE,\n        0x1E770FC8ECBFDC8692DCEDC597C4CA0FBEC19B84E33DA57412A92D1D3CE3EC20,\n        0x2F6243CDA919BF4C9F1E3A8A6D66A05742914FC19338B3C0E50E828F69FF6D1F,\n        0x246EFDDC3117ECD39595D0046F44AB303A195D0E9CC89345D3C03FF87A11B693,\n        0x53E8D9B3EA5B8ED4FE006F139CBC4E0168B1C89A918DFBE602BC62CEC6ADF1,\n        0x1B894A2F45CB96647D910F6A710D38B7EB4F261BEEFFF135AEC04C1ABE59427B,\n        0xAEB1554E266693D8212652479107D5FDC077ABF88651F5A42553D54EC242CC0,\n        0x16A735F6F7209D24E6888680D1781C7F04BA7D71BD4B7D0E11FAF9DA8D9CA28E,\n        0x487B8B7FAB5FC8FD7C13B4DF0543CD260E4BCBB615B19374FF549DCF073D41B,\n        0x1E75B9D2C2006307124BEA26B0772493CFB5D512068C3AD677FDF51C92388793,\n        0x5120E3D0E28003C253B46D5FF77D272AE46FA1E239D1C6C961DCB02DA3B388F,\n        0xDA5FEB534576492B822E8763240119AC0900A053B171823F890F5FD55D78372,\n        0x2E211B39A023031A22ACC1A1F5F3BB6D8C2666A6379D9D2C40CC8F78B7BD9ABE,\n    ]\n    POSEIDON_M = [\n        [\n            0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n            0x2969F27EED31A480B9C36C764379DBCA2CC8FDD1415C3DDED62940BCDE0BD771,\n            0x143021EC686A3F330D5F9E654638065CE6CD79E28C5B3753326244EE65A1B1A7,\n        ],\n        [\n            0x16ED41E13BB9C0C66AE119424FDDBCBC9314DC9FDBDEEA55D6C64543DC4903E0,\n            0x2E2419F9EC02EC394C9871C832963DC1B89D743C8C7B964029B2311687B1FE23,\n            0x176CC029695AD02582A70EFF08A6FD99D057E12E58E7D7B6B16CDFABC8EE2911,\n        ],\n        [\n            0x2B90BBA00FCA0589F617E7DCBFE82E0DF706AB640CEB247B791A93B74E36736D,\n            0x101071F0032379B697315876690F053D148D4E109F5FB065C8AACC55A0F89BFA,\n            0x19A3FC0A56702BF417BA7FEE3802593FA644470307043F7773279CD71D25D5E0,\n        ],\n    ]\n    POSEIDON_P = [\n        [\n            0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n            0x1E6F20A11D1E31E43F83DCEDDDB9A0236203F5F24AE72C925A8A79A66831F51D,\n            0x1BD8C528472E57BDC722A141F8785694484F426725403AE24084E3027E782467,\n        ],\n        [\n            0x16ED41E13BB9C0C66AE119424FDDBCBC9314DC9FDBDEEA55D6C64543DC4903E0,\n            0x2D51BA82C8073C6D6BACF1AD5E56655B7143625B0A9E9C3190527A1A5F05079A,\n            0x1B07D6D51E6F7E97E0AB10FC2E51EA83CE0611F940FF0731B5F927FE8D6A77C9,\n        ],\n        [\n            0x2B90BBA00FCA0589F617E7DCBFE82E0DF706AB640CEB247B791A93B74E36736D,\n            0x11E12A40D262AE88E8376F62D19EDF43093CDEF1CCF34D985A3E53F0BC5765A0,\n            0x221C170E4D02A2479C6F3E47B5FF55781574F980D89038308A3EF37CCE8463BD,\n        ],\n    ]\n    POSEIDON_S = [\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x3F0815AB463F1B76EE25A9B8768B3231A89752F427F4F063AB718E707576B31,\n        0x15648BF46F60D82954C7E33029B3617357012A3D3B1D34C8E008859F1DBFB317,\n        0x127E00C2253DE07818CA7F2EAFDD7564D05EA850CF61F1DAA0CFEFBF7FBFBA85,\n        0x66365AFD18A41EF9382FC0B1D265CB4D3CE470A8CBBB878F7D48051630747BD,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x219D14F823513140DC69A96F7FE7E086F4FA24C84E57DCF2B099715C4404AAE7,\n        0x3A30BFBBF2CB86D4A6A63A8050D91F9F14F4D33696D37EBAEFA9AC2302132D5,\n        0x2121BBCDEAA33A35B0270FB7D5C9F94EDAD5A84D74B06E3385104B0B41935BCC,\n        0x196B544FBEB0A792CFBB82C289E579B7CD5580C2E338A389D053EF8B3D10E70E,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2809C3A1547C0CEE89C1DB270EF479C26973EC73EDB4BD4E7D907EA0202F560F,\n        0x11C34446B083EF92CA157585A02B8B342A4C67175B31F4B5D40D4E96DFC5C8F1,\n        0x253EA0B33A8BF3B2367C030E3289CBE0F6242AD7709D90B86D9D8026E2E39925,\n        0x30467DC1930F6AFE90C89D4007AD29FC4F5A19C006D1030438C16DF85637BD5F,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2F9D4B55495F7E377E20E6F5A3A88AF7AA6A536458B38BBE13C8EBFBBBA54F44,\n        0x1D9E9D5C736E3151F11D36D499E7E093D8EE2353BE18AAD54CFD03FF0FEAC4B8,\n        0x124B617B43E598F9EBF622F7823A3DE7D1BFEDB87E097C315F343DE301E54841,\n        0x198E7CFC66AE45774055CF073BEDC945A5F9C5B19CAE08D789CC5748FFE199B2,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2EAC25B3498DFADFFD124AB3AAD57789EB945BA57443099C5BB6C27ED977FE24,\n        0x1EE02C175CDFE1871B378305C1BB9C904E8AF1D4454ED3550B3C6AB5F4F90126,\n        0x616F8C34C607266B29EA8F9D2DFA47FF6FBB1D9745C48609FA98301D0F679D5,\n        0x181D68B0A188504958B9F19CBBDB972A853E51ED385E4883A43A42832803370B,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2D5397CE863464A25D6B7F5B015D579181D1CE2F24CBABF6059E9327F5BA7004,\n        0x15BF817491B94D71E8912940CC0B80277713E7D32DA2B6591724D8DBD4BC2618,\n        0x2A7CBD11460B177AB76FEAB28B69485AC8CC687740BC910994A3827D29C08714,\n        0xF7CD5FFA4661730AB56E447FAE5CC1763CB462DA80A85614C237B290DE9D502,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0xE0766004B4C4176EB13273508EB6575F768137D86D305BE644CE04531008100,\n        0x625FA7145813481F6D148BE6B9C8BB7B54EE3C1AFAC00104E1F763000B9924C,\n        0x7C5472508B459916EE0F5461AAD2E0B19CD9C7B184F515B65136318CE2C6A5,\n        0x567375470D189B693AC77AB3FB7557231D53073951D43C54685879CB7A89FCB,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x1D0406BCBEC83F8D5165F56C063E42108AD21F51EA4BFC71601174BA5C7B8BCC,\n        0xC02B18EEF22332D280A8AA1F86405F3375F06342F8696EE7C73B46C63272CB7,\n        0x17C1FC174CD9A6EBEAA7ADD2F801A664823509AD4FD1B15AAD053A55AD6DA4CF,\n        0x5F843C23024EB1DAB7EBBC86709A021AAA6CAF433F7ED258A08638E9584B32D,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x22DF2420697CA28B5CC51C53165E002727B45CCD90A55C87589F792F0AD8CB37,\n        0x2F1438303A7B49D473400AAEDF0F48009FD3AF804B76BE86417588EFC4D7302A,\n        0x2323D5FCF2DA8965C6B2B7B4FBF9A24BBAA7F4DCCD35D5CA6155C5463093B23B,\n        0x26C85B9DFBBE48FE83B753A5E7336B9F40F7B961E9C54F94E37700073D4D26E,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x31511000251EC86FEB38B5AB4E335F070B271DF4C20979528E41D65384C318F,\n        0x18E588324A9BBAACB42FA69E5D90A0C0E27CD16B941E34A60FF5DF9A26C03AF1,\n        0x2642B5D8E16B953B070635775C8D3C9498357D6AD9BEF2E7D99F03C10EA1F95F,\n        0x21FC313BA11C60E8E84FF60DB906A0F031189B0B48335C4221F909AEF836C133,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2D3562E3D4B42BC6890B698CC6AB89F7311298BCBAC6E4E9F2F4D93D06DAE151,\n        0xA74EF541D360E842E3E0B6FF7E5C7C77934A5F67616F01C189D886DFD2E0808,\n        0x140564B53E0A812AC3983D6E3B433AFA43F434087D9E754967C2C9B1B02CAF8A,\n        0x14709E32D98AE4CD18B400181E71AB9759C436C8E83FA6993ADB6F2DB6BBA9D0,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x734B2366C59E394423F179E1266DD392372DB4F2DBA651F4A619A4B52BDC010,\n        0x11FB2D705C94B08D5AD3E3C5FB6629ABE963ED92913642C7D02D7E71088FD2D4,\n        0x27D03ABF5C1F290E5D715EBA19371050EF6EB7F78FD84BE834E4CC3618059484,\n        0x13ED9E9E6B452DF27FB3353CFC2CD63EBE817F212A39C6A8BB9B441AC1395861,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x1319C51CF37AAA10246CDAAA04A12E88795DE4452604263A7C5B79AB99CBD23C,\n        0xBCA25588D187B7F9DAD839F2C8CB526A4CF444EEBBD0E715B6CEA019AC3F2,\n        0x1D837EA0341C5964181226874B923CD01A069B493F02F7A3C01BE23CF51D593F,\n        0x1B41CE9ED3634CBD42C427CE4C5C83774149E2A6DBD25F24012090DB7DE4E7F9,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x671F0E3B674AE7CDDC790ECC4E946F4BCA74B98B78A127C7B56BD6673F1CE1F,\n        0x19FC073797A39B272E40CD30615F55FEFEB682C1AC14143071D0449A5426E4E,\n        0x17BEE47D262A497FD1F7C5C6D5A7C70FA4209480BF5D97311C5096619E9FD13,\n        0x2073CFF92D3141B480763539CFF2978A4C7944721CC937BA00CC8527274471E3,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x3BD7B3E2C1885877F43182A55A91D48F9C58D152E730FE2C7AA46B1FA663BAA,\n        0x226EBC9A538B5BBAFF128EDFB9BBF5FA0CEB100719A14C8DFED9FFBBBAD9B6B7,\n        0xD395F0B08B9FEDE0373A06E1552C0E634A49572AF1D830DC6E394E8A5D3B21A,\n        0x28242439B524540A30D49B68E19E31BA5284BD3BCF1E0F2F41F77D5331F99FFA,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x370D6FA19EAAC142D2DE034801AB85E0B457E129E91F929754B48C6154D4DF6,\n        0x9A16F573B3280F390762ABF269579EAA37939BC0C753FEB0A2B2E0BCBDE1659,\n        0x2228E360FB5B162B496AC443F98127EE3C0021A690B71B268D99981368231D97,\n        0x7E42C2CA633D2C49FABF83991476D209431E34D8032B6A1B97675F3C567F944,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2CE12D7269663770C3CAB85A6215A32EED35FDA1D8E9D753A50FE96097724A9F,\n        0x3D7427704C61E2009EEB9B1B45A0125084BC4DAF70973A7BA0B2231815B15DE,\n        0x10F8ABF0764185861C1267FCF4B4B33CA096FB4DDC4626732D86921E553E69C6,\n        0x17CCAF6F26F7267A025D7CB456E3AEB251A1A620AAF6568A5C95644C7C5914CC,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x63BB306B96310051385C3CE00CA820AD0E3651A6E55754D59DE6DF28CEA4D51,\n        0x1F761EE5553C5E86F2C304A18095AB7403242E0B65E608BC920CF993A4169974,\n        0xDC5F00BBFD7C1D9A23C0E666859BA6564BCDE8761B45717CD6BDFC09DE4E8F2,\n        0x6DE511520E277B7DF07C3536381C13EB44CF790A230ABC391089760BFC40EF2,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2A134348C8660EFCF9EF54863E70528A1FD4481B50A1FE21F24A8C06E10CCA03,\n        0xAEB5023BBB9A64C4BD80089E99EDF8ED5F6F1FFB63A7DBBA1B33520BCFCE37B,\n        0x141A6D0810366AE225ECB5F0BFDC9995406C5960AB26155836FC51FB7CB933D1,\n        0x9D2EA05EF54DADBBE776F404DCA6626CC0B2539990BC0B8BFE87497F1E2C5B7,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x1E56D244A8E41BE5D104D5F8EF70891D22D4A5432441BFE8FF1A16E91719CDDE,\n        0x1D4F020C57C4F14AEC908B2F99B5C4FD5E09447FA85C2FD68BA4D5C5F50C7B49,\n        0x763911A3A92A4F0E09F4E14CD03398D8D82A1E09DB80FB0EE1E833764C18FD3,\n        0x12857275BE2FE6B9BA2EC68F9061643F1FC5D9A2C5E47E55684366E54B302946,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2ED11CCD2E2E2376655FFE9A96C4B81ADC0A60353C5D83D4D0EBF50D1BBF87C0,\n        0x3E31DE8958E82645B320D5E3E966EF4726D5B1C2CFBB4ACD288A21543C6D594,\n        0x11E880DFEFDBD08858AE890046533D58DA28A608D7E905366EC2CA4A36E71963,\n        0x1835B275DEAED2D00704A9C3CC21AB7A44A34662978D53C190DC25E969A507B2,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x68B75315E25ED4ACE5A4A9480E1D82CE5D44F76F1324240419F372FF8D3C3F5,\n        0x1B7EF7D04AEC73D62B052D2AD12B92A4268FCCD795C839D698AD3B22823274D1,\n        0x28C0C848022A90606F6193FF5501B57216B670727F4B8EFCC240D30BBAA9F03F,\n        0x13BDA49296CBCC51686A7BFB1C39F3F254370985A16660EFD6E5D82D4F068E1B,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2E7987EA8204389D11EB10B34265E378A945729F86C3E0E2FD38490D3A594141,\n        0x826D4A2324AD3AA4B2B45C10A190FEDEF702AEFFDA3226CE5415FFFD03935C8,\n        0x2DBEEE85EAEAA9FA3675EF541C9DF7BB964A85435C3B59685F93B434036DED,\n        0x227EE7A945EDAEE6919418ECB3279B11E6FA44F5F5C5ABFB966A4BE599CB86C7,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x1D0A6D1A9519877805AC90D696FAF2A5FFADC23986DE8C698D541471C7244220,\n        0x2208AABA508AE816DA4F333B7854FBBCD10EEA1DB284EC3E9F4DE02B25F6E9D4,\n        0x28A58901035B2C99E36A7D29B587A215C9E59268E2F8E01A175720971CCF04EC,\n        0x112F6D8D42B0A0D123A07865CA1376DF317A2A14FFC0191226F38A8ADFD6238,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x8C6EB19C016D1833174DDA182D266D5C727F97FB4D01F1DAF906B6D3C6E2308,\n        0x1359D2D6C8B5A116D0B38B95F9C642DF75B1BE9A48C8698ECFEA9103F73F1879,\n        0x10C5052EC67AB9B6A467C1CC1878D91AAA07AACF7725F8A5ED42B699C4AF3CA7,\n        0x583C4D292D54F3CDB708803E6338FC6AFDB188D5D4E9F060193823684C96C75,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2D94A1C55BE382151A4054C5B96322E7BCD1FE2B3E076E16EE2C18BFC06F57B4,\n        0x15E3402FDDE8770FB997369579C1B1703EF77C671927EAD80DBC64DD2211C3EC,\n        0x185BE98784817F22F7B21E6B867D5A71B5000BEF8BB902EB302677E20A727BE3,\n        0x18DB4321C721C03666ED8927C89890AA8AAD1B00C054547B5CA14CD94DE467B6,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2A852B6247F5D61F0C390B3F3D799188528849BCD2CD0AFF4EB2134A039B5126,\n        0x2510AEED51B7F506E65FB9A18EE0124AA5276F6DE1CD771B165930204DA58F22,\n        0xF2074A32EB8260FB5BD3A236F03A47B47B7FB54DCAD1D7977D6486513BAB5F2,\n        0x2F4C69297866BD45A8270E19941926CEC3531C9E12C4C2C84971404BFA044090,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x154668727D2DBADF05D083A65093C0D0E92DF5FD5F3FD75E9B792C562A37473F,\n        0x1E6FFC5D6A1FF5DC4FD77FC5AB5C8C4E8D3E2E375BCD1194A91E5B0F7B13CADF,\n        0x2CF1A1D7C44309109D75ACBC9395CB8398C8B2D428538571FAFA389DA29990C6,\n        0x140FB39A89F26F6D87CF76CD5CE8DA47AA5D8A023E24CF016ECF64CF793C9880,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x1289D13D58A17B5BF0712B201FB3CDDFCE2C16DAC159990B8298A93A8589F9E8,\n        0xF45CF974D2C9EDB5781E8D3D207ADC8370CF56BC5218749610920FE98B2DB2E,\n        0x11909C81A16518046B79EDFD24F5ABCC585A81D1B333568B8687A1C9ECEB44D4,\n        0x2990B23C81882F7709F3B891A0E3DA4D6917672F2D5A1041FD7BBD6792330D16,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x609551B14716CA3CD5560E0821E7285E0A083EA9A16DC102ECF461E4AEF7277,\n        0xC8C1ABDFAB99D03FD93DCED2467354B6175DE1755F4F93DC0880EAA08D03F77,\n        0x138BD098C4923B9FBD02F33F8BEC6C730DB3FED298EC09F78A7A55D08F2E0B10,\n        0x2E61E4BC021630114673F0F77161AE55DCD0B45CE07D9AE3F21BB5A3190F14C0,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x124860913E3DF8F65A9C4060CE3297C626ABD1C22401C905DDB408260D8E910,\n        0x13807F89C394A133EC104804D955CBE125F24C5701D98286C6AC8B7ED052EC8,\n        0x2E88D1A6938F0788132AA9EEAEC08D2F59AA444050C8F4C4E85578ABB0FC2FE5,\n        0x1F3D24F17CFC6050A0CBF64E1F1787E2257BE3C3BA607C2E8FCC1F26ABF3104,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x1FE1CB0E2AE169F83B9D4F133D41FB5B3FE6C76A82A916BFD9B62F82F0F8D0BF,\n        0xEF79351229409CD353329221229827E19946F3D8D1C48BF5E3377F9177071F3,\n        0x18FB2E46FC1B90FE1C4893EF77A9D111507551883127860E89088608373BEDA9,\n        0x77AFE2579F42EC14C32EF0761E23A3CC0AD6263A68C5CB61916BD57120D1868,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x79769092DAA5A752642C04CCF8A6EA54E2AC9836FDD65D248B186F1490B7B99,\n        0x1D8BF229C19968F0254EB6E09C5C8BFD67EB9734606B676B663C76CF76BAB4A5,\n        0x2A33B7D855E7FE55F93556E49E4B37737664F14236F17256428F29F6EC1BDDAD,\n        0x25B0331D7E2B15AF4EC161C86E84BA6AB2056077E7AA7536340DC3187CCCA8B2,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x762098F5FE26598CCBF45E4810211B0FFCF8CCBB92C16E2F4F13F22342474E2,\n        0xE234D720D70B2886D0DA4C007B1BDA42362E144185C70716DECE2B6172C2514,\n        0x1D82BEDCCD2BC8A06E3742E720B7FEC2EA72182F11C0C60D135C811152AA4B60,\n        0x480064D4B3EB0ADA5E9A3E7D05930B7C3397FD6B94D481314BD1C690A17C979,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x10A892763B3CCA9EF7593FBB1140EDC8C8E4580568560CF41867F7464FB0C11A,\n        0xB5EC64548EA841AC921F9B2553680785978B315667AE4714DDE4CD7F4DE8B91,\n        0x10554ACA4E348E5949761BD7131DFAEBD78010EDD030E1A9CE3C65C9DB931D46,\n        0x15BE66F38D86B0998B93655462B1F475B9BE9DE306E150D4AC648FAB3DB0CFF6,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x176AD3600FD3491182D182957FFAD01BF6C26E9D4AB0C23CAAF308E427D3DBE8,\n        0x2B6F355B3DBF65F09335001D705AC125E3BEB20F4FC11BD3CE82B5CF0AF2E6F2,\n        0x1C85C06A6D5D40D81D7C89EDEFB32D1A8448C51288FA296B6DE9FF788C77451,\n        0x20E1E876C4746A0CBD9A51D76B2E25F82361C389E43F7D1F51A70AAAC2460D79,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x20E46219F684186D2A024B637BC35A29EE3B08CE737701392D987DDA9217FA08,\n        0x2EA7279DB9F2AA0F654E987907277C24480766367A8BD90E28BE0F2ED6091367,\n        0x136BE2A7F18924C9362096D472BC75CA0969DC077C9171B1641BE95091780F74,\n        0x1CA2033501BAA3F73067C4300FB0F51119ED5736FBC8F1F6C924BAF0DF5A0E9E,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0xA82F199C2505277ECAA75E495F34E3525824F7A4A9D9FA1DA810832B48A50C7,\n        0xECF10485307B4BAE92FEFB0D7F7782A9F37A2722E7ED9EB7925A2DEA580B7D5,\n        0x7B642138DFD6A6DD12AA22F08A8296D68615C8478F13AF16AEBBBB339A3936B,\n        0x1D9DDA43A25593FFD2256D34921FB86ED70E760BA76D61E9CBC3B6DD0F1A2150,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2F1AF228520C8B751DC91136C91C6BCCD5367EB08213D392958CE2FD3D7D2FCE,\n        0x1FECFE833AD540455C6D6C1AB3DE4ABAE61ADA625A1A2B6B18551A45A6CDE123,\n        0x18FC8E608C735B2B3B0D7583460227575657FF8A77ABE637BDD3AD28E4A23C88,\n        0x28F740BC1182E9706EBF03CB3F53ABA8A43CE0B618783A5586388A7547FAA815,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x47998CC0AF5A26B94AD301E4B998D29E960A4851CFD13822BED35B7146966A4,\n        0x1B5F1525B31DB911DDA43E415E1B9A3A9725C7B52E880EE130A14A692B777B70,\n        0x275A83FA5D19B4535F65E965A90EAC9BF770AE9BD1D7B1AF945FA57ED5C8DE6E,\n        0x2E8789257ED2CBCCCB430568E49BC9DC2A563359808C9897CE3E40A6F6A27AA8,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x927F46CFE80FEEFEB2721A4C09E9D17F60C34500DCD6E41E2925A39C8E2C7C1,\n        0x1F868AE04832A5DBC37619BFE6AB6A97FD8FB2CFBC1ECF9E0E484BBFE7698101,\n        0x9D7A11E27D2F53109B73F745B2DEFED65D94BA80F308FB19CE6D56C9B45EFF4,\n        0x282D857CFE8DA3B5104E1C2823FB7C5B9A7B25924FDA5995B0C351AA2B879DFF,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x20BA8A9FCEC815B13F349FF830AE663B27576E135C0744F6987FB0F6FF49C217,\n        0x11B6AFC91E32F1CA4589FBA12E657D226D57B471DDD2AB1B66A8AE4DCBFB136E,\n        0x2E666402AC9CC588316E335C7D93DB344788EEC2C72DDF3F908141736CEBC3BE,\n        0x17522E0E9E64F795A202A110E283FAAD7057AEC5C9ED9A1A74920F2794F18595,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2D2ED17F7A1F3EE9E20B470CAD4CC7319E6ADB40E2FF24B7878CB9878EDBD3B9,\n        0x1A81EFB19D7E1EDAA96FA276E89E85D08F75E54A8136F4D73C937DA16C7BF9F4,\n        0x27FF57C1CA847E57210A7B44E52E5630F299C5F451C7A0D515A16BB3BD33E237,\n        0x1C1A8E22230ABCD13C5BE96031BFA167840D117B3C6A5A0A11BE26A7F5FB1A94,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2A1C3F15D4927C843627A9CD533E4250D81E7774D2C32B59D5836F9C19A5657,\n        0x2DDBB7239EB904D81C52499B37CB4BE1AF0373A10AC112E185ACB219899357E4,\n        0xDFF198393085A754E0D6FAEC54BE81D8EDF8BC25EDADAB48A86FAD6DA0AFB60,\n        0x10D50C2473146BBC76275FCC589D038DEC8DB28728789F28B6D5F504BD1645CA,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x61E8328FB5593F92A53DFD40E1022E6231BA45948506282536B08B4476C1538,\n        0x1B589243847198DED90B644BEE31AC58067DEBF3F07D3C51CFA5A0DD9F6D9784,\n        0x4B00C0DA1F851E59863B053BD4C6087190F0BDCCED99D5CE6F67A420A3BD1F7,\n        0x239941A46C2B93D9126A70163009A7AC27F8A8D42E35018B3BEC8CDCB5DDFD67,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x204F26CA7993B03AC2C35377CB0A3712BFC9BC3EC0BFECB4E87EF6814ACF2EA2,\n        0x85AFF9C7FDADBA039D832D8BE165A1E5747CF7308D515E348EF117E926D721C,\n        0x249042A8DC111F27C4AE9DB044C0B0B3F10E57D05E093158EFD375DF00EA2068,\n        0x6E799BCDF2B4A74542854F3029803E2F84550665203327B3E0825977413E96B,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x1CB3CAED4BFFB6ACA9F4D2C002921BC3FFFED333CAE12085C612496183B87996,\n        0xB47E9755FAE480128A128BFD4FAA6A3DD6EA03CAB566889DCD99E84D310D51C,\n        0xC7E4CEA365C2061920A0C9FD2C360A6506293BC024FD1CA3F0BB730DA886A4F,\n        0x21DA1F701BAC77BCBBAA30D964D6F6F63DBE1B20D9D6988C8DCD7BA4187215DF,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x9AE612E8BA1CA1370905FB67899D10DB86B47BD19965B6EDD1A9486E3C6CC55,\n        0x262E1E0B56CAC47FC150F284491190E6AAB75445B0C99373FE1F7A0E3B95CF3D,\n        0x234BF4A7DCE7587C2C87C293E3BB7C9E2A7BFA5F29FD4DDEAA5D3F67491D34BD,\n        0x2F6CBAC694C886B02D0A527CAC744FB658D2690E213D7432EEE67F6CB69F70C2,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x22ACCB18B7C49B4B7BB8C9FDF78B7ADED52AA1842FFF818D9A3300876DEC3AD9,\n        0x81E2F0652F898C6D659F22D2C77BE302EABD9182A0B3D3CBF623A1DF7F8F2FC,\n        0x12C0A25E70D006ECCEA3ADA75D669B8C534B962890F3FFC016B3186AD675B935,\n        0x10EF9C23848128CC2FD6FC869DF24D7AB56EFD349EDD56F49F8D4F2381DF3259,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x2161CD280772819DD4A81262B71DF1BCC2C1D41B9491E0620BDA347962B240F0,\n        0x2CEBB0AE5108318EB406590041B5248292533364F799BC41B7F4FDD12CB8D38A,\n        0x2B2092F86B5979A7FE4F7C22D9561F3BF2852283A656880FB759E08709A0A62F,\n        0x1566B3402D774B8C08146188425A442450CFC900CF643E7382B2D8507A065FED,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x11A316AA31607F268FB4C56D6C57BA01627C3635FCCF8D3D1A163E601D1A0173,\n        0xDE7EE069C934256B782648B560E595408A5E8434644609152E353D9C2874E44,\n        0x2D36F4029245704CC84DF0297708C5E5845C36AE706C72E67128B8949EAB1AF,\n        0x1B8CC326B5EE160F53198C217FB34E899BDE46CD82DABDC284D7951D546F858,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x27625DA0F73EA07110689FB2187B71694CBF9203FD4DDF8A96ECE85407550EBB,\n        0x1CD8338A3E5B1AD7CDC0DA581A6950F6DEA349C3EDDA06CB99BA025B94E4790D,\n        0x5EA02D65B209F6DA763856C94B6438C78A8AED8D3E67E877A10A84072741A56,\n        0x9F7CB68D4E388F85366CFCF284A895D8B6250CED627E810817743CE03330A55,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x18C6230DDC0F896827B043F5E58DBD1AEC13995A202E4EBCDFEB969E9D5C1212,\n        0x73A6114B997285E1A91C0A0FDCCDAA8452E4F07BFD2E1A10578232096DB6DCD,\n        0x2E78746340B2A6D222C6A1FC0838ADF5FE013F39B1660CE7A3E7742B2F37BE7F,\n        0x7AA27E7150BADDD06303AD8E5E4BF4249B7EA846553DEF28E675259D3E5C851,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0xB66FDEC210EA4EABF623D2712CF4D9FA90273CCB4643F680CBC98345715EAD8,\n        0x2FB6A29D9F394A589B633B8A4D6BE51C9C0601CE0B140BE641ACEA41C49AA5E3,\n        0x29025CC66FD041C4FC845E9C1C2CD1288569FB243D049BD675A69DC889B2CE2A,\n        0x150963F0ACA9BCBE4126214AB9C627A6F7ED731CFA695168B85D534B17BE3F48,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0xED59780302257663F72C1BFC6656EB7B5BCA2E47BEC0D5798A08A32A61A8A65,\n        0x7E19CB8A893369B3D30AE188C767F391C11888A3000DEBFC8D30C06143CC084,\n        0x600C7D2B6946345E5F1EEEAFB5EB8EC2B6ECFE528D2C052CD860AFB4A3AA272,\n        0x596083B6C972BC13022A1F33D6523B4773F2CD0A480E19EA0125119F0385705,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0x210B5C36F27A07D97F98B9D8663D85DB2E64513099A8E1EF6DB21043631E24C4,\n        0x13BB2764BF1475CFC7BB9F3D563C5CC201C2489874E9159326A8F4930B7883F9,\n        0x202CF557D625C26080EB082862A76757287872B181E89997219E4B7576E24D30,\n        0xE561C3F8BD4F76E76D49E97142D220601FBC5A03D905A4728EA1F95FD8824B2,\n        0x109B7F411BA0E4C9B2B70CAF5C36A7B194BE7C11AD24378BFEDB68592BA8118B,\n        0xDE20097480E7555471785DE07BD9809D57DD859BBE827307C33AE9ED7890597,\n        0x72F2A6287FB984BB810DF8C5788EEBCFD2825613CB72BB80CDE8EDD76D2E97D,\n        0x2969F27EED31A480B9C36C764379DBCA2CC8FDD1415C3DDED62940BCDE0BD771,\n        0x143021EC686A3F330D5F9E654638065CE6CD79E28C5B3753326244EE65A1B1A7,\n    ]\n\n    POSEIDON_C = [circuit.set_or_get_constant(x) for x in POSEIDON_C]\n    POSEIDON_M = [[circuit.set_or_get_constant(y) for y in x] for x in POSEIDON_M]\n    POSEIDON_P = [[circuit.set_or_get_constant(y) for y in x] for x in POSEIDON_P]\n    POSEIDON_S = [circuit.set_or_get_constant(x) for x in POSEIDON_S]\n\n    # Initial Ark\n    state = ark(t, POSEIDON_C, 0, state)\n\n    # # First half of full rounds\n    for r in range(n_rounds_f // 2 - 1):\n        state = [sigma(val) for val in state]\n        state = ark(t, POSEIDON_C, (r + 1) * t, state)\n        state = mix(t, POSEIDON_M, state)\n\n    # # Middle round\n    state = [sigma(val) for val in state]\n    state = ark(t, POSEIDON_C, (n_rounds_f // 2) * t, state)\n    state = mix(t, POSEIDON_P, state)\n\n    # # Partial rounds\n    for r in range(n_rounds_p):\n        state[0] = sigma(state[0])\n        state = mix_s(\n            t,\n            POSEIDON_S,\n            r,\n            [circuit.add(state[0], POSEIDON_C[(n_rounds_f // 2 + 1) * t + r])]\n            + state[1:],\n        )\n\n    # # Second half of full rounds\n    for r in range(n_rounds_f // 2 - 1):\n        state = [sigma(val) for val in state]\n        state = ark(\n            t, POSEIDON_C, (n_rounds_f // 2 + 1) * t + n_rounds_p + r * t, state\n        )\n        state = mix(t, POSEIDON_M, state)\n\n    # # Final round\n    state = [sigma(val) for val in state]\n\n    # Final MixLast\n    return mix_last(t, POSEIDON_M, 0, state)\n\n\nif __name__ == \"__main__\":\n    # Compute the Poseidon hash\n    z = poseidon_hash(x, y)\n\n    # Define the output of the circuit\n    circuit.extend_struct_output(u384(\"z\", [z]))\n\n    # Compile and print the compiled circuit\n    compiled_code, function_name = circuit.compile_circuit()\n    print(compiled_code)\n"
  },
  {
    "path": "hydra/garaga/precompiled_circuits/zk_honk.py",
    "content": "from abc import ABC, abstractmethod\nfrom dataclasses import dataclass, fields\nfrom enum import Enum, auto\n\nimport garaga.hints.io as io\nimport garaga.modulo_circuit_structs as structs\nfrom garaga.algebra import ModuloCircuitElement\nfrom garaga.curves import CURVES, CurveID, ProofSystem\nfrom garaga.hints.keccak256 import keccak_256\nfrom garaga.modulo_circuit import ModuloCircuit\nfrom garaga.points import G1Point, G2Point\nfrom garaga.poseidon_transcript import hades_permutation\n\nNUMBER_OF_SUBRELATIONS = 28\nNUMBER_OF_ALPHAS = NUMBER_OF_SUBRELATIONS - 1\nNUMBER_OF_ENTITIES = 41\nBATCHED_RELATION_PARTIAL_LENGTH = 8\nCONST_PROOF_SIZE_LOG_N = 28\nNUMBER_UNSHIFTED = 36\nNUMBER_TO_BE_SHIFTED = 5\nSHIFTED_COMMITMENTS_START = 30\nPAIRING_POINT_OBJECT_LENGTH = 16\n\n\nMAX_LOG_N = 23  # 2^23 = 8388608\nMAX_CIRCUIT_SIZE = 1 << MAX_LOG_N\n\n\nG1_PROOF_POINT_SHIFT = 2**136\nG1_PROOF_POINT_SIZE = NUM_ELEMENTS_COMM = 2\nNUM_ELEMENTS_FR = 1\n\n\nG2_POINT_KZG_1 = G2Point.get_nG(CurveID.BN254, 1)\nG2_POINT_KZG_2 = G2Point(\n    x=(\n        0x0118C4D5B837BCC2BC89B5B398B5974E9F5944073B32078B7E231FEC938883B0,\n        0x260E01B251F6F1C7E7FF4E580791DEE8EA51D87A358E038B4EFE30FAC09383C1,\n    ),\n    y=(\n        0x22FEBDA3C0C0632A56475B4214E5615E11E6DD3F96E6CEA2854A87D4DACC5E55,\n        0x04FC6369F7110FE3D25156C1BB9A72859CF2A04641F99BA4EE413C80DA6A5FE4,\n    ),\n    curve_id=CurveID.BN254,\n)\n\nNUM_WITNESS_ENTITIES = 8\nNUM_LIBRA_EVALUATIONS = 4\nZK_BATCHED_RELATION_PARTIAL_LENGTH = 9\nSUBGROUP_SIZE = 256\nSUBGROUP_GENERATOR = 0x07B0C561A6148404F086204A9F36FFB0617942546750F230C893619174A57A76\nSUBGROUP_GENERATOR_INVERSE = (\n    0x204BD3277422FAD364751AD938E2B5E6A54CF8C68712848A692C553D0329F5D6\n)\n\nLIBRA_COMMITMENTS = 3\nLIBRA_EVALUATIONS = 4\nLIBRA_UNIVARIATES_LENGTH = 9\n\n\n@dataclass\nclass HonkVk:\n    name: str\n    log_circuit_size: int\n    public_inputs_size: int\n    qm: G1Point\n    qc: G1Point\n    ql: G1Point\n    qr: G1Point\n    qo: G1Point\n    q4: G1Point\n    qLookup: G1Point\n    qArith: G1Point\n    qDeltaRange: G1Point\n    qElliptic: G1Point\n    qMemory: G1Point\n    qNnf: G1Point\n    qPoseidon2External: G1Point\n    qPoseidon2Internal: G1Point\n    s1: G1Point\n    s2: G1Point\n    s3: G1Point\n    s4: G1Point\n    id1: G1Point\n    id2: G1Point\n    id3: G1Point\n    id4: G1Point\n    t1: G1Point\n    t2: G1Point\n    t3: G1Point\n    t4: G1Point\n    lagrange_first: G1Point\n    lagrange_last: G1Point\n    vk_hash: int\n    vk_bytes: bytes\n\n    def __repr__(self) -> str:\n        # Print all fields line by line :\n        return \"\\n\".join(\n            f\"{field.name}: {getattr(self, field.name).__repr__()}\"\n            for field in fields(self)\n        )\n\n    @classmethod\n    def from_bytes(cls, vk_bytes: bytes) -> \"HonkVk\":\n        vk_hash = (\n            int.from_bytes(keccak_256(vk_bytes).digest(), \"big\")\n            % CURVES[CurveID.BN254.value].n\n        )\n        log_circuit_size = int.from_bytes(vk_bytes[0:32], \"big\")\n        public_inputs_size = int.from_bytes(vk_bytes[32:64], \"big\")\n        public_inputs_offset = int.from_bytes(vk_bytes[64:96], \"big\")\n\n        assert (\n            public_inputs_offset == 1\n        ), f\"invalid public inputs offset: {public_inputs_offset}\"\n\n        cursor = 96\n\n        rest = vk_bytes[cursor:]\n        assert (\n            len(rest) % 32 == 0\n        ), f\"invalid vk_bytes length: {len(vk_bytes)}. Make sure you are using the correct version of bb or that the vk is not corrupted.\"\n\n        # print(f\"circuit_size: {circuit_size}\")\n        # print(f\"log_circuit_size: {log_circuit_size}\")\n        # print(f\"public_inputs_size: {public_inputs_size}\")\n\n        # Get all fields that are G1Points from the dataclass\n        g1_fields = [\n            field.name\n            for field in fields(cls)\n            if field.type == G1Point and field.name != \"name\"\n        ]\n\n        # print(f\"g1_fields: {g1_fields}\")\n\n        # Parse all G1Points into a dictionary\n        points = {}\n        for field_name in g1_fields:\n            x = int.from_bytes(vk_bytes[cursor : cursor + 32], \"big\")\n            y = int.from_bytes(vk_bytes[cursor + 32 : cursor + 64], \"big\")\n            points[field_name] = G1Point(x=x, y=y, curve_id=CurveID.BN254)\n            cursor += 64\n        # print(f\"points: {points}\")\n        # Create instance with all parsed values\n        return cls(\n            name=\"\",\n            log_circuit_size=log_circuit_size,\n            public_inputs_size=public_inputs_size,\n            **points,\n            vk_hash=vk_hash,\n            vk_bytes=vk_bytes,\n        )\n\n    def to_cairo(self, name: str = \"vk\") -> str:\n        code = f\"pub const {name}: HonkVk = HonkVk {{\\n\"\n        code += f\"vk_hash: {self.vk_hash},\\n\"\n        code += f\"log_circuit_size: {self.log_circuit_size},\\n\"\n        code += f\"public_inputs_size: {self.public_inputs_size},\\n\"\n\n        g1_points = [\n            field.name\n            for field in fields(self)\n            if field.type == G1Point and field.name != \"name\"\n        ]\n        for field_name in g1_points:\n            code += f\"{field_name}: {getattr(self, field_name).serialize_to_cairo(name=field_name, raw=True)},\\n\"\n        code += \"};\"\n        return code\n\n    def to_circuit_elements(self, circuit: ModuloCircuit) -> \"HonkVk\":\n        return HonkVk(\n            name=self.name,\n            log_circuit_size=self.log_circuit_size,\n            public_inputs_size=self.public_inputs_size,\n            **{\n                field.name: circuit.write_struct(\n                    structs.G1PointCircuit.from_G1Point(\n                        field.name, getattr(self, field.name)\n                    )\n                )\n                for field in fields(self)\n                if field.type == G1Point and field.name != \"name\"\n            },\n            vk_hash=self.vk_hash,\n            vk_bytes=self.vk_bytes,\n        )\n\n    def flatten(self) -> list[int]:\n        lst = []\n        lst.append(self.circuit_size)\n        lst.append(self.log_circuit_size)\n        lst.append(self.public_inputs_size)\n        lst.append(self.public_inputs_offset)\n        for field in fields(self):\n            if field.type == G1Point and field.name != \"name\":\n                point = getattr(self, field.name)\n                lst.extend([point.x, point.y])\n        return lst\n\n\nclass Transcript(ABC):\n    def __init__(self):\n        self.reset()\n\n    @abstractmethod\n    def reset(self):\n        pass\n\n    @abstractmethod\n    def update(self, data: bytes):\n        pass\n\n    @abstractmethod\n    def digest(self) -> bytes:\n        pass\n\n    def digest_reset(self) -> bytes:\n        res_bytes = self.digest()\n        self.reset()\n        return res_bytes\n\n\nclass Sha3Transcript(Transcript):\n    def reset(self):\n        self.hasher = keccak_256()\n\n    def digest(self) -> bytes:\n        res = self.hasher.digest()\n        res_int = int.from_bytes(res, \"big\")\n        res_mod = res_int % CURVES[CurveID.GRUMPKIN.value].p\n        res_bytes = res_mod.to_bytes(32, \"big\")\n        return res_bytes\n\n    def update(self, data: bytes):\n        self.hasher.update(data)\n\n\nclass StarknetPoseidonTranscript(Transcript):\n    def reset(self):\n        self.s0, self.s1, self.s2 = hades_permutation(\n            int.from_bytes(b\"StarknetHonk\", \"big\"), 0, 1\n        )\n\n    def digest(self) -> bytes:\n        res_bytes = self.s0.to_bytes(32, \"big\")\n        return res_bytes\n\n    def update(self, data: bytes):\n        val = int.from_bytes(data, \"big\")\n        assert val < 2**256\n        high, low = divmod(val, 2**128)\n        self.s0, self.s1, self.s2 = hades_permutation(\n            self.s0 + low, self.s1 + high, self.s2\n        )\n\n\n@dataclass\nclass ZKHonkProof:\n    log_circuit_size: int  # from vk\n    public_inputs: list[int]\n    pairing_point_object: list[int]\n    w1: G1Point\n    w2: G1Point\n    w3: G1Point\n    w4: G1Point\n    z_perm: G1Point\n    lookup_read_counts: G1Point\n    lookup_read_tags: G1Point\n    lookup_inverses: G1Point\n    libra_commitments: list[G1Point]\n    libra_sum: int\n    sumcheck_univariates: list[list[int]]\n    sumcheck_evaluations: list[int]\n    libra_evaluation: int\n    gemini_masking_poly: G1Point\n    gemini_masking_eval: int\n    gemini_fold_comms: list[G1Point]\n    gemini_a_evaluations: list[int]\n    libra_poly_evals: list[int]\n    shplonk_q: G1Point\n    kzg_quotient: G1Point\n    proof_bytes: bytes\n    public_inputs_bytes: bytes\n\n    def __post_init__(self):\n        assert len(self.pairing_point_object) == PAIRING_POINT_OBJECT_LENGTH\n        assert len(self.libra_commitments) == 3\n        assert all(\n            len(univariate) == ZK_BATCHED_RELATION_PARTIAL_LENGTH\n            for univariate in self.sumcheck_univariates\n        )\n        assert len(self.sumcheck_evaluations) == NUMBER_OF_ENTITIES\n        assert len(self.libra_poly_evals) == 4\n        assert len(self.gemini_fold_comms) == self.log_circuit_size - 1\n        assert len(self.gemini_a_evaluations) == self.log_circuit_size\n        assert len(self.libra_poly_evals) == 4\n\n    @classmethod\n    def from_bytes(\n        cls, proof_bytes: bytes, public_inputs_bytes: bytes, vk: HonkVk\n    ) -> \"ZKHonkProof\":\n        FIELD_ELEMENT_SIZE = 32\n        n_elements = len(proof_bytes) // FIELD_ELEMENT_SIZE\n        assert len(proof_bytes) % FIELD_ELEMENT_SIZE == 0\n        elements = [\n            int.from_bytes(proof_bytes[i : i + FIELD_ELEMENT_SIZE], \"big\")\n            for i in range(0, len(proof_bytes), FIELD_ELEMENT_SIZE)\n        ]\n        assert (\n            len(elements)\n            == n_elements\n            == ZKHonkProof.calculate_proof_size(vk.log_circuit_size)\n        ), f\"{len(elements)} == {n_elements} == {ZKHonkProof.calculate_proof_size(vk.log_circuit_size)}\"\n\n        n_public_inputs = len(public_inputs_bytes) // FIELD_ELEMENT_SIZE\n        assert len(public_inputs_bytes) % FIELD_ELEMENT_SIZE == 0\n        public_inputs = [\n            int.from_bytes(public_inputs_bytes[i : i + FIELD_ELEMENT_SIZE], \"big\")\n            for i in range(0, len(public_inputs_bytes), FIELD_ELEMENT_SIZE)\n        ]\n        assert (\n            len(public_inputs)\n            == n_public_inputs\n            == vk.public_inputs_size - PAIRING_POINT_OBJECT_LENGTH\n        )\n\n        pairing_point_object = []\n        cursor = 0\n        for i in range(PAIRING_POINT_OBJECT_LENGTH):\n            pairing_point_object.append(elements[cursor + i])\n\n        cursor += PAIRING_POINT_OBJECT_LENGTH\n\n        def parse_g1_proof_point(i: int) -> G1Point:\n            p = CURVES[CurveID.BN254.value].p\n            return G1Point(\n                x=elements[i] % p,\n                y=elements[i + 1] % p,\n                curve_id=CurveID.BN254,\n            )\n\n        w1 = parse_g1_proof_point(cursor)\n        w2 = parse_g1_proof_point(cursor + G1_PROOF_POINT_SIZE)\n        w3 = parse_g1_proof_point(cursor + 2 * G1_PROOF_POINT_SIZE)\n\n        lookup_read_counts = parse_g1_proof_point(cursor + 3 * G1_PROOF_POINT_SIZE)\n        lookup_read_tags = parse_g1_proof_point(cursor + 4 * G1_PROOF_POINT_SIZE)\n        w4 = parse_g1_proof_point(cursor + 5 * G1_PROOF_POINT_SIZE)\n        lookup_inverses = parse_g1_proof_point(cursor + 6 * G1_PROOF_POINT_SIZE)\n        z_perm = parse_g1_proof_point(cursor + 7 * G1_PROOF_POINT_SIZE)\n\n        libra_commitments = [None] * 3\n        libra_commitments[0] = parse_g1_proof_point(cursor + 8 * G1_PROOF_POINT_SIZE)\n\n        cursor += 9 * G1_PROOF_POINT_SIZE\n\n        libra_sum = elements[cursor]\n\n        cursor += 1\n\n        # Parse sumcheck univariates.\n        sumcheck_univariates = []\n        for i in range(vk.log_circuit_size):\n            sumcheck_univariates.append(\n                [\n                    elements[cursor + i * ZK_BATCHED_RELATION_PARTIAL_LENGTH + j]\n                    for j in range(ZK_BATCHED_RELATION_PARTIAL_LENGTH)\n                ]\n            )\n        cursor += ZK_BATCHED_RELATION_PARTIAL_LENGTH * vk.log_circuit_size\n\n        # Parse sumcheck_evaluations\n        sumcheck_evaluations = elements[cursor : cursor + NUMBER_OF_ENTITIES]\n\n        cursor += NUMBER_OF_ENTITIES\n\n        libra_evaluation = elements[cursor]\n\n        cursor += 1\n\n        libra_commitments[1] = parse_g1_proof_point(cursor)\n        libra_commitments[2] = parse_g1_proof_point(cursor + G1_PROOF_POINT_SIZE)\n        gemini_masking_poly = parse_g1_proof_point(cursor + 2 * G1_PROOF_POINT_SIZE)\n\n        cursor += 3 * G1_PROOF_POINT_SIZE\n\n        gemini_masking_eval = elements[cursor]\n\n        cursor += 1\n\n        # Parse gemini fold comms\n        gemini_fold_comms = [\n            parse_g1_proof_point(cursor + i * G1_PROOF_POINT_SIZE)\n            for i in range(vk.log_circuit_size - 1)\n        ]\n\n        cursor += (vk.log_circuit_size - 1) * G1_PROOF_POINT_SIZE\n\n        # Parse gemini a evaluations\n        gemini_a_evaluations = elements[cursor : cursor + vk.log_circuit_size]\n\n        cursor += vk.log_circuit_size\n\n        libra_poly_evals = elements[cursor : cursor + 4]\n\n        cursor += 4\n\n        shplonk_q = parse_g1_proof_point(cursor)\n        kzg_quotient = parse_g1_proof_point(cursor + G1_PROOF_POINT_SIZE)\n\n        cursor += 2 * G1_PROOF_POINT_SIZE\n\n        assert cursor == len(elements)\n\n        return ZKHonkProof(\n            log_circuit_size=vk.log_circuit_size,\n            public_inputs=public_inputs,\n            pairing_point_object=pairing_point_object,\n            w1=w1,\n            w2=w2,\n            w3=w3,\n            w4=w4,\n            z_perm=z_perm,\n            lookup_read_counts=lookup_read_counts,\n            lookup_read_tags=lookup_read_tags,\n            lookup_inverses=lookup_inverses,\n            libra_commitments=libra_commitments,\n            libra_sum=libra_sum,\n            sumcheck_univariates=sumcheck_univariates,\n            sumcheck_evaluations=sumcheck_evaluations,\n            libra_evaluation=libra_evaluation,\n            gemini_masking_poly=gemini_masking_poly,\n            gemini_masking_eval=gemini_masking_eval,\n            gemini_fold_comms=gemini_fold_comms,\n            gemini_a_evaluations=gemini_a_evaluations,\n            libra_poly_evals=libra_poly_evals,\n            shplonk_q=shplonk_q,\n            kzg_quotient=kzg_quotient,\n            proof_bytes=proof_bytes,\n            public_inputs_bytes=public_inputs_bytes,\n        )\n\n    def to_circuit_elements(self, circuit: ModuloCircuit) -> \"ZKHonkProof\":\n        \"\"\"Convert everything to ModuloCircuitElements given a circuit.\"\"\"\n        return ZKHonkProof(\n            log_circuit_size=self.log_circuit_size,\n            public_inputs=circuit.write_elements(self.public_inputs),\n            pairing_point_object=circuit.write_elements(self.pairing_point_object),\n            w1=circuit.write_struct(structs.G1PointCircuit.from_G1Point(\"w1\", self.w1)),\n            w2=circuit.write_struct(structs.G1PointCircuit.from_G1Point(\"w2\", self.w2)),\n            w3=circuit.write_struct(structs.G1PointCircuit.from_G1Point(\"w3\", self.w3)),\n            w4=circuit.write_struct(structs.G1PointCircuit.from_G1Point(\"w4\", self.w4)),\n            z_perm=circuit.write_struct(\n                structs.G1PointCircuit.from_G1Point(\"z_perm\", self.z_perm)\n            ),\n            lookup_read_counts=circuit.write_struct(\n                structs.G1PointCircuit.from_G1Point(\n                    \"lookup_read_counts\", self.lookup_read_counts\n                )\n            ),\n            lookup_read_tags=circuit.write_struct(\n                structs.G1PointCircuit.from_G1Point(\n                    \"lookup_read_tags\", self.lookup_read_tags\n                )\n            ),\n            lookup_inverses=circuit.write_struct(\n                structs.G1PointCircuit.from_G1Point(\n                    \"lookup_inverses\", self.lookup_inverses\n                )\n            ),\n            libra_commitments=[\n                circuit.write_struct(\n                    structs.G1PointCircuit.from_G1Point(f\"libra_commitments_{i}\", comm)\n                )\n                for i, comm in enumerate(self.libra_commitments)\n            ],\n            libra_sum=circuit.write_element(self.libra_sum),\n            sumcheck_univariates=[\n                circuit.write_elements(univariate)\n                for univariate in self.sumcheck_univariates\n            ],\n            sumcheck_evaluations=circuit.write_elements(self.sumcheck_evaluations),\n            libra_evaluation=circuit.write_element(self.libra_evaluation),\n            gemini_masking_poly=circuit.write_struct(\n                structs.G1PointCircuit.from_G1Point(\n                    \"gemini_masking_poly\", self.gemini_masking_poly\n                )\n            ),\n            gemini_masking_eval=circuit.write_element(self.gemini_masking_eval),\n            gemini_fold_comms=[\n                circuit.write_struct(\n                    structs.G1PointCircuit.from_G1Point(f\"gemini_fold_comm_{i}\", comm)\n                )\n                for i, comm in enumerate(self.gemini_fold_comms)\n            ],\n            gemini_a_evaluations=circuit.write_elements(self.gemini_a_evaluations),\n            libra_poly_evals=circuit.write_elements(self.libra_poly_evals),\n            shplonk_q=circuit.write_struct(\n                structs.G1PointCircuit.from_G1Point(\"shplonk_q\", self.shplonk_q)\n            ),\n            kzg_quotient=circuit.write_struct(\n                structs.G1PointCircuit.from_G1Point(\"kzg_quotient\", self.kzg_quotient)\n            ),\n            proof_bytes=self.proof_bytes,\n            public_inputs_bytes=self.public_inputs_bytes,\n        )\n\n    def to_cairo(self) -> str:\n        def g1_to_g1point256(g1_point: G1Point) -> str:\n            return f\"G1Point256{{x: {hex(g1_point.x)}, y: {hex(g1_point.y)}}}\"\n\n        def format_array(elements: list, span: bool = False) -> str:\n            \"\"\"Helper function to format arrays with custom element formatting\"\"\"\n            formatted_elements = [hex(el) for el in elements]\n            arr = f\"array![{', '.join(formatted_elements)}]\"\n            if span:\n                return f\"{arr}.span()\"\n            return arr\n\n        code = f\"ZKHonkProof {{\\n\"\n        code += f\"public_inputs: {format_array(self.public_inputs, span=True)},\\n\"\n        code += f\"pairing_point_object: {format_array(self.pairing_point_object, span=True)},\\n\"\n        code += f\"w1: {g1_to_g1point256(self.w1)},\\n\"\n        code += f\"w2: {g1_to_g1point256(self.w2)},\\n\"\n        code += f\"w3: {g1_to_g1point256(self.w3)},\\n\"\n        code += f\"w4: {g1_to_g1point256(self.w4)},\\n\"\n        code += f\"z_perm: {g1_to_g1point256(self.z_perm)},\\n\"\n        code += f\"lookup_read_counts: {g1_to_g1point256(self.lookup_read_counts)},\\n\"\n        code += f\"lookup_read_tags: {g1_to_g1point256(self.lookup_read_tags)},\\n\"\n        code += f\"lookup_inverses: {g1_to_g1point256(self.lookup_inverses)},\\n\"\n        code += f\"libra_commitments: array![{', '.join(g1_to_g1point256(comm) for comm in self.libra_commitments)}].span(),\\n\"\n        code += f\"libra_sum: {hex(self.libra_sum)},\\n\"\n\n        # Flatten sumcheck_univariates array\n        code += f\"sumcheck_univariates: {format_array(io.flatten(self.sumcheck_univariates)[:self.log_circuit_size * ZK_BATCHED_RELATION_PARTIAL_LENGTH], span=True)},\\n\"\n\n        code += f\"sumcheck_evaluations: {format_array(self.sumcheck_evaluations, span=True)},\\n\"\n        code += f\"libra_evaluation: {hex(self.libra_evaluation)},\\n\"\n        code += f\"gemini_masking_poly: {g1_to_g1point256(self.gemini_masking_poly)},\\n\"\n        code += f\"gemini_masking_eval: {hex(self.gemini_masking_eval)},\\n\"\n        code += f\"gemini_fold_comms: array![{', '.join(g1_to_g1point256(comm) for comm in self.gemini_fold_comms[:self.log_circuit_size - 1])}].span(),\\n\"\n        code += f\"gemini_a_evaluations: {format_array(self.gemini_a_evaluations[:self.log_circuit_size], span=True)},\\n\"\n        code += f\"libra_poly_evals: {format_array(self.libra_poly_evals, span=True)},\\n\"\n        code += f\"shplonk_q: {g1_to_g1point256(self.shplonk_q)},\\n\"\n        code += f\"kzg_quotient: {g1_to_g1point256(self.kzg_quotient)},\\n\"\n        code += \"};\"\n        return code\n\n    def serialize_to_calldata(self) -> list[int]:\n        def serialize_G1Point256(g1_point: G1Point) -> list[int]:\n            xl, xh = io.split_128(g1_point.x)\n            yl, yh = io.split_128(g1_point.y)\n            return [xl, xh, yl, yh]\n\n        cd = []\n        cd.extend(\n            io.bigint_split_array(\n                x=self.public_inputs, n_limbs=2, base=2**128, prepend_length=True\n            )\n        )\n        cd.extend(\n            io.bigint_split_array(\n                x=self.pairing_point_object,\n                n_limbs=2,\n                base=2**128,\n                prepend_length=True,\n            )\n        )\n        cd.extend(serialize_G1Point256(self.w1))\n        cd.extend(serialize_G1Point256(self.w2))\n        cd.extend(serialize_G1Point256(self.w3))\n        cd.extend(serialize_G1Point256(self.w4))\n        cd.extend(serialize_G1Point256(self.z_perm))\n        cd.extend(serialize_G1Point256(self.lookup_read_counts))\n        cd.extend(serialize_G1Point256(self.lookup_read_tags))\n        cd.extend(serialize_G1Point256(self.lookup_inverses))\n\n        cd.append(len(self.libra_commitments))\n        for pt in self.libra_commitments:\n            cd.extend(serialize_G1Point256(pt))\n\n        cd.extend(io.bigint_split(self.libra_sum, n_limbs=2, base=2**128))\n\n        cd.extend(\n            io.bigint_split_array(\n                x=io.flatten(self.sumcheck_univariates)[\n                    : ZK_BATCHED_RELATION_PARTIAL_LENGTH * self.log_circuit_size\n                ],  # The rest is 0.\n                n_limbs=2,\n                base=2**128,\n                prepend_length=True,\n            )\n        )\n\n        cd.extend(\n            io.bigint_split_array(\n                x=self.sumcheck_evaluations, n_limbs=2, base=2**128, prepend_length=True\n            )\n        )\n\n        cd.extend(io.bigint_split(self.libra_evaluation, n_limbs=2, base=2**128))\n\n        cd.extend(serialize_G1Point256(self.gemini_masking_poly))\n\n        cd.extend(io.bigint_split(self.gemini_masking_eval, n_limbs=2, base=2**128))\n\n        cd.append(self.log_circuit_size - 1)\n        for pt in self.gemini_fold_comms[\n            : self.log_circuit_size - 1\n        ]:  # The rest is G(1, 2)\n            cd.extend(serialize_G1Point256(pt))\n\n        cd.extend(\n            io.bigint_split_array(\n                x=self.gemini_a_evaluations[: self.log_circuit_size],\n                n_limbs=2,\n                base=2**128,\n                prepend_length=True,\n            )\n        )\n\n        cd.extend(\n            io.bigint_split_array(\n                x=self.libra_poly_evals,\n                n_limbs=2,\n                base=2**128,\n                prepend_length=True,\n            )\n        )\n\n        cd.extend(serialize_G1Point256(self.shplonk_q))\n        cd.extend(serialize_G1Point256(self.kzg_quotient))\n\n        return cd\n\n    def flatten(self) -> list[int]:\n        \"\"\"Used to pass data to Rust\"\"\"\n\n        lst = []\n        lst.extend(self.public_inputs)\n        lst.extend(self.pairing_point_object)\n        lst.extend(g1_to_g1_proof_point(self.w1))\n        lst.extend(g1_to_g1_proof_point(self.w2))\n        lst.extend(g1_to_g1_proof_point(self.w3))\n        lst.extend(g1_to_g1_proof_point(self.lookup_read_counts))\n        lst.extend(g1_to_g1_proof_point(self.lookup_read_tags))\n        lst.extend(g1_to_g1_proof_point(self.w4))\n        lst.extend(g1_to_g1_proof_point(self.lookup_inverses))\n        lst.extend(g1_to_g1_proof_point(self.z_perm))\n        lst.extend(g1_to_g1_proof_point(self.libra_commitments[0]))\n        lst.append(self.libra_sum)\n        for line in self.sumcheck_univariates:\n            lst.extend(line)\n        lst.extend(self.sumcheck_evaluations)\n        lst.append(self.libra_evaluation)\n        lst.extend(g1_to_g1_proof_point(self.libra_commitments[1]))\n        lst.extend(g1_to_g1_proof_point(self.libra_commitments[2]))\n        lst.extend(g1_to_g1_proof_point(self.gemini_masking_poly))\n        lst.append(self.gemini_masking_eval)\n        for point in self.gemini_fold_comms:\n            lst.extend(g1_to_g1_proof_point(point))\n        lst.extend(self.gemini_a_evaluations)\n        lst.extend(self.libra_poly_evals)\n        lst.extend(g1_to_g1_proof_point(self.shplonk_q))\n        lst.extend(g1_to_g1_proof_point(self.kzg_quotient))\n        return lst\n\n    @staticmethod\n    def calculate_proof_size(log_circuit_size: int):\n        # Witness and Libra commitments\n\n        proof_size = NUM_WITNESS_ENTITIES * NUM_ELEMENTS_COMM\n        proof_size += (\n            NUM_ELEMENTS_COMM * 4\n        )  # Libra concat, grand sum, quotient comms + Gemini masking\n        # Sumcheck\n        proof_size += (\n            log_circuit_size * ZK_BATCHED_RELATION_PARTIAL_LENGTH * NUM_ELEMENTS_FR\n        )\n        # sumcheck univariates\n        proof_size += NUMBER_OF_ENTITIES * NUM_ELEMENTS_FR\n        # sumcheck evaluations\n\n        # Libra and Gemini\n        proof_size += NUM_ELEMENTS_FR * 3\n        # Libra sum, claimed eval, Gemini masking eval\n        proof_size += log_circuit_size * NUM_ELEMENTS_FR\n        # Gemini a evaluations\n        proof_size += NUM_LIBRA_EVALUATIONS * NUM_ELEMENTS_FR\n        # libra evaluations\n\n        # PCS commitments\n        proof_size += (log_circuit_size - 1) * NUM_ELEMENTS_COMM\n        # Gemini Fold commitments\n        proof_size += NUM_ELEMENTS_COMM * 2\n        # Shplonk Q and KZG W commitments\n\n        # Pairing points\n        proof_size += PAIRING_POINT_OBJECT_LENGTH\n        # pairing inputs carried on public inputs\n        return proof_size\n\n\n@dataclass\nclass ZKHonkTranscript:\n    eta: int | ModuloCircuitElement\n    etaTwo: int | ModuloCircuitElement\n    etaThree: int | ModuloCircuitElement\n    beta: int | ModuloCircuitElement\n    gamma: int | ModuloCircuitElement\n    alpha: int | ModuloCircuitElement\n    gate_challenge: int | ModuloCircuitElement\n    libra_challenge: int | ModuloCircuitElement\n    sum_check_u_challenges: list[ModuloCircuitElement]\n    rho: int | ModuloCircuitElement\n    gemini_r: int | ModuloCircuitElement\n    shplonk_nu: int | ModuloCircuitElement\n    shplonk_z: int | ModuloCircuitElement\n    last_state: tuple[int, int, int]\n    public_inputs_delta: int | None = None  # Derived.\n\n    @classmethod\n    def from_proof(\n        cls,\n        vk: HonkVk,\n        proof: ZKHonkProof,\n        system: ProofSystem = ProofSystem.UltraKeccakZKHonk,\n    ) -> \"ZKHonkTranscript\":\n        assert (\n            len(proof.public_inputs)\n            == vk.public_inputs_size - PAIRING_POINT_OBJECT_LENGTH\n        )\n\n        def split_challenge(ch: bytes) -> tuple[int, int]:\n            ch_int = int.from_bytes(ch, \"big\")\n            high_128, low_128 = divmod(ch_int, 2**128)\n            return (low_128, high_128)\n\n        FR = CURVES[CurveID.GRUMPKIN.value].p\n\n        match system:\n            case ProofSystem.UltraKeccakZKHonk:\n                hasher = Sha3Transcript()\n            case ProofSystem.UltraStarknetZKHonk:\n                hasher = StarknetPoseidonTranscript()\n            case _:\n                raise ValueError(f\"Proof system {system} not compatible\")\n\n        ## 1. Relation Parameters Challenges\n        ##    1.1 eta_challenges\n        ##    1.2 beta_and_gamma_challenges\n        ##\n        ## struct RelationParameters {\n        #     // challenges\n        #     Fr eta;\n        #     Fr etaTwo;\n        #     Fr etaThree;\n        #     Fr beta;\n        #     Fr gamma;\n        #     // derived\n        #     Fr publicInputsDelta;\n        # }\n\n        # Round 0 : circuit_size, public_inputs_size, public_input_offset, [public_inputs], w1, w2, w3\n\n        hasher.update(int.to_bytes(vk.vk_hash, 32, \"big\"))\n\n        for pub_input in proof.public_inputs:\n            hasher.update(int.to_bytes(pub_input, 32, \"big\"))\n        for pub_input in proof.pairing_point_object:\n            hasher.update(int.to_bytes(pub_input, 32, \"big\"))\n\n        for g1_proof_point in [proof.w1, proof.w2, proof.w3]:\n            # print(f\"g1_proof_point: {g1_proof_point.__repr__()}\")\n            hasher.update(int.to_bytes(g1_proof_point.x, 32, \"big\"))\n            hasher.update(int.to_bytes(g1_proof_point.y, 32, \"big\"))\n\n        ch0 = hasher.digest_reset()\n\n        eta, eta_two = split_challenge(ch0)\n\n        hasher.update(ch0)\n        ch0 = hasher.digest_reset()\n        eta_three, _ = split_challenge(ch0)\n\n        # print(f\"eta: {hex(eta)}\")\n        # print(f\"eta_two: {hex(eta_two)}\")\n        # print(f\"eta_three: {hex(eta_three)}\")\n        # Round 1 : ch0, lookup_read_counts, lookup_read_tags, w4\n\n        hasher.update(ch0)\n\n        for g1_proof_point in [\n            proof.lookup_read_counts,\n            proof.lookup_read_tags,\n            proof.w4,\n        ]:\n            hasher.update(int.to_bytes(g1_proof_point.x, 32, \"big\"))\n            hasher.update(int.to_bytes(g1_proof_point.y, 32, \"big\"))\n\n        ch1 = hasher.digest_reset()\n        beta, gamma = split_challenge(ch1)\n\n        ## 2. Alpha Challenges\n\n        # Round 2: ch1, lookup_inverses, z_perm\n\n        hasher.update(ch1)\n\n        for g1_proof_point in [proof.lookup_inverses, proof.z_perm]:\n            hasher.update(int.to_bytes(g1_proof_point.x, 32, \"big\"))\n            hasher.update(int.to_bytes(g1_proof_point.y, 32, \"big\"))\n\n        ch2 = hasher.digest_reset()\n\n        alpha, _ = split_challenge(ch2)\n\n        ## 3. Gate Challenges\n        hasher.update(ch2)\n        ch3 = hasher.digest_reset()\n        gate_challenge, _ = split_challenge(ch3)\n\n        ## 4. Libra Challenge\n\n        # print(f\"gate_challenges: {[hex(x) for x in gate_challenges]}\")\n        # print(f\"len(gate_challenges): {len(gate_challenges)}\")\n\n        # Round 3 and 1/2: Libra challenge\n        hasher.update(ch3)\n\n        hasher.update(int.to_bytes(proof.libra_commitments[0].x, 32, \"big\"))\n        hasher.update(int.to_bytes(proof.libra_commitments[0].y, 32, \"big\"))\n\n        hasher.update(int.to_bytes(proof.libra_sum, 32, \"big\"))\n\n        ch3 = hasher.digest_reset()\n        libra_challenge, _ = split_challenge(ch3)\n\n        ## 5. Sumcheck U Challenges\n        # Round 4: Sumcheck u challenges\n        ch4 = ch3\n        sum_check_u_challenges = [None] * vk.log_circuit_size\n\n        # print(f\"len(sumcheck_univariates): {len(proof.sumcheck_univariates)}\")\n        # print(\n        #     f\"len(proof.sumcheck_univariates[0]): {len(proof.sumcheck_univariates[0])}\"\n        # )\n\n        for i in range(vk.log_circuit_size):\n            # Create array of univariate challenges starting with previous challenge\n            univariate_chal = [ch4]\n\n            # Add the sumcheck univariates for this round\n            for j in range(ZK_BATCHED_RELATION_PARTIAL_LENGTH):\n                univariate_chal.append(\n                    int.to_bytes(proof.sumcheck_univariates[i][j], 32, \"big\")\n                )\n\n            # Update hasher with all univariate challenges\n            for chal in univariate_chal:\n                hasher.update(chal)\n\n            # Get next challenge\n            ch4 = hasher.digest_reset()\n\n            # Split challenge to get sumcheck challenge\n            sum_check_u_challenges[i], _ = split_challenge(ch4)\n\n        # print(f\"sum_check_u_challenges: {[hex(x) for x in sum_check_u_challenges]}\")\n        # print(f\"len(sum_check_u_challenges): {len(sum_check_u_challenges)}\")\n\n        ## 6. Rho Challenge\n        # Rho challenge :\n        hasher.update(ch4)\n        for i in range(NUMBER_OF_ENTITIES):\n            hasher.update(int.to_bytes(proof.sumcheck_evaluations[i], 32, \"big\"))\n\n        hasher.update(int.to_bytes(proof.libra_evaluation, 32, \"big\"))\n\n        for g1_proof_point in [\n            proof.libra_commitments[1],\n            proof.libra_commitments[2],\n            proof.gemini_masking_poly,\n        ]:\n            hasher.update(int.to_bytes(g1_proof_point.x, 32, \"big\"))\n            hasher.update(int.to_bytes(g1_proof_point.y, 32, \"big\"))\n\n        hasher.update(int.to_bytes(proof.gemini_masking_eval, 32, \"big\"))\n\n        c5 = hasher.digest_reset()\n        rho, _ = split_challenge(c5)\n\n        # print(f\"rho: {hex(rho)}\")\n\n        ## 7. Gemini R Challenge\n        # Gemini R :\n        hasher.update(c5)\n        for i in range(vk.log_circuit_size - 1):\n            hasher.update(int.to_bytes(proof.gemini_fold_comms[i].x, 32, \"big\"))\n            hasher.update(int.to_bytes(proof.gemini_fold_comms[i].y, 32, \"big\"))\n\n        c6 = hasher.digest_reset()\n        gemini_r, _ = split_challenge(c6)\n\n        # print(f\"gemini_r: {hex(gemini_r)}\")\n\n        ## 8. Shplonk Nu Challenge\n        # Shplonk Nu :\n        hasher.update(c6)\n        for i in range(vk.log_circuit_size):\n            hasher.update(int.to_bytes(proof.gemini_a_evaluations[i], 32, \"big\"))\n\n        for i in range(4):\n            hasher.update(int.to_bytes(proof.libra_poly_evals[i], 32, \"big\"))\n\n        c7 = hasher.digest_reset()\n        shplonk_nu, _ = split_challenge(c7)\n\n        # print(f\"shplonk_nu: {hex(shplonk_nu)}\")\n        ## 9. Shplonk Z Challenge\n        # Shplonk Z :\n        hasher.update(c7)\n        hasher.update(int.to_bytes(proof.shplonk_q.x, 32, \"big\"))\n        hasher.update(int.to_bytes(proof.shplonk_q.y, 32, \"big\"))\n\n        c8 = hasher.digest_reset()\n        shplonk_z_low, shplonk_z_high = split_challenge(c8)\n\n        # print(f\"shplonk_z: {hex(shplonk_z)}\")\n\n        s0, s1, s2 = hades_permutation(shplonk_z_low, shplonk_z_high, 2)\n\n        return cls(\n            eta=eta,\n            etaTwo=eta_two,\n            etaThree=eta_three,\n            beta=beta,\n            gamma=gamma,\n            alpha=alpha,\n            gate_challenge=gate_challenge,\n            libra_challenge=libra_challenge,\n            sum_check_u_challenges=sum_check_u_challenges,\n            rho=rho,\n            gemini_r=gemini_r,\n            shplonk_nu=shplonk_nu,\n            shplonk_z=shplonk_z_low,\n            last_state=(s0, s1, s2),\n            public_inputs_delta=None,\n        )\n\n    def to_circuit_elements(self, circuit: ModuloCircuit) -> \"ZKHonkTranscript\":\n        return ZKHonkTranscript(\n            eta=circuit.write_element(self.eta),\n            etaTwo=circuit.write_element(self.etaTwo),\n            etaThree=circuit.write_element(self.etaThree),\n            beta=circuit.write_element(self.beta),\n            gamma=circuit.write_element(self.gamma),\n            alpha=circuit.write_element(self.alpha),\n            gate_challenge=circuit.write_element(self.gate_challenge),\n            libra_challenge=circuit.write_element(self.libra_challenge),\n            sum_check_u_challenges=circuit.write_elements(self.sum_check_u_challenges),\n            rho=circuit.write_element(self.rho),\n            gemini_r=circuit.write_element(self.gemini_r),\n            shplonk_nu=circuit.write_element(self.shplonk_nu),\n            shplonk_z=circuit.write_element(self.shplonk_z),\n            last_state=self.last_state,\n            public_inputs_delta=None,\n        )\n\n    def to_cairo(self) -> str:\n        code = \"ZKHonkTranscript{\\n\"\n        code += f\"    eta: {hex(self.eta)},\\n\"\n        code += f\"    eta_two: {hex(self.etaTwo)},\\n\"\n        code += f\"    eta_three: {hex(self.etaThree)},\\n\"\n        code += f\"    beta: {hex(self.beta)},\\n\"\n        code += f\"    gamma: {hex(self.gamma)},\\n\"\n        code += f\"    alpha: {hex(self.alpha)},\\n\"\n        code += f\"    gate_challenge: {hex(self.gate_challenge)},\\n\"\n        code += f\"    libra_challenge: {hex(self.libra_challenge)},\\n\"\n        code += f\"    sum_check_u_challenges:array![{', '.join([hex(sum_check_u_challenge) for sum_check_u_challenge in self.sum_check_u_challenges])}],\\n\"\n        code += f\"    rho: {hex(self.rho)},\\n\"\n        code += f\"    gemini_r: {hex(self.gemini_r)},\\n\"\n        code += f\"    shplonk_nu: {hex(self.shplonk_nu)},\\n\"\n        code += f\"    shplonk_z: {hex(self.shplonk_z)},\\n\"\n        code += \"}\"\n        return code\n\n\nclass ZKHonkVerifierCircuits(ModuloCircuit):\n    def __init__(\n        self,\n        name: str,\n        log_n: int,\n        curve_id: int = CurveID.GRUMPKIN.value,\n        compilation_mode: int = 1,\n    ):\n        super().__init__(\n            name=name,\n            curve_id=curve_id,\n            compilation_mode=compilation_mode,\n        )\n        self.log_n = log_n\n\n    def compute_public_input_delta(\n        self,\n        public_inputs: list[ModuloCircuitElement],\n        pairing_point_object: list[ModuloCircuitElement],\n        beta: ModuloCircuitElement,\n        gamma: ModuloCircuitElement,\n    ) -> ModuloCircuitElement:\n        assert len(public_inputs) > 0\n        assert len(pairing_point_object) == PAIRING_POINT_OBJECT_LENGTH\n        offset: ModuloCircuitElement = self.set_or_get_constant(1)\n\n        num = self.set_or_get_constant(1)\n        den = self.set_or_get_constant(1)\n        PERMUTATION_ARGUMENT_VALUE_SEPARATOR = 1 << 28\n        num_acc = self.add(\n            gamma,\n            self.mul(\n                beta,\n                self.add(\n                    self.set_or_get_constant(PERMUTATION_ARGUMENT_VALUE_SEPARATOR),\n                    offset,\n                ),\n            ),\n        )\n        den_acc = self.sub(\n            gamma,\n            self.mul(beta, self.add(offset, self.set_or_get_constant(1))),\n        )\n\n        for i, pub_input in enumerate(public_inputs):\n            num = self.mul(num, self.add(num_acc, pub_input))\n            den = self.mul(den, self.add(den_acc, pub_input))\n\n            num_acc = self.add(num_acc, beta)\n            den_acc = self.sub(den_acc, beta)\n\n        for i, pub_input in enumerate(pairing_point_object):\n            num = self.mul(num, self.add(num_acc, pub_input))\n            den = self.mul(den, self.add(den_acc, pub_input))\n\n            # skip last round (unused otherwise)\n            if i != len(pairing_point_object) - 1:\n                num_acc = self.add(num_acc, beta)\n                den_acc = self.sub(den_acc, beta)\n\n        return self.div(num, den)\n\n    def verify_sum_check(\n        self,\n        libra_sum: ModuloCircuitElement,\n        sumcheck_univariates: list[list[ModuloCircuitElement]],\n        sumcheck_evaluations: list[ModuloCircuitElement],\n        libra_evaluation: ModuloCircuitElement,\n        beta: ModuloCircuitElement,\n        gamma: ModuloCircuitElement,\n        public_inputs_delta: ModuloCircuitElement,\n        eta: ModuloCircuitElement,\n        eta_two: ModuloCircuitElement,\n        eta_three: ModuloCircuitElement,\n        libra_challenge: ModuloCircuitElement,\n        sum_check_u_challenges: list[ModuloCircuitElement],\n        gate_challenge: ModuloCircuitElement,\n        alpha: ModuloCircuitElement,\n        log_n: int,\n        base_rlc: ModuloCircuitElement,\n    ) -> ModuloCircuitElement:\n        \"\"\"\n        We will add an extra challenge base_rlc to do a Sumcheck RLC since\n        Cairo1 doesn't support assert_eq inside circuits (unlike Cairo0).\n        \"\"\"\n\n        pow_partial_evaluation = self.set_or_get_constant(1)\n        round_target = self.mul(libra_challenge, libra_sum)\n        check_rlc = None\n\n        rlc_coeff = base_rlc\n        current_gate_challenge = gate_challenge\n        for i, round in enumerate(range(log_n)):\n            round_univariate: list[ModuloCircuitElement] = sumcheck_univariates[round]\n            total_sum = self.add(round_univariate[0], round_univariate[1])\n            check_rlc = self.add(\n                check_rlc, self.mul(self.sub(total_sum, round_target), rlc_coeff)\n            )\n\n            round_challenge = sum_check_u_challenges[round]\n            round_target = self.compute_next_target_sum(\n                round_univariate, round_challenge\n            )\n            pow_partial_evaluation = self.partially_evaluate_pow(\n                current_gate_challenge,\n                pow_partial_evaluation,\n                round_challenge,\n                round,\n            )\n            # Skip at the last round\n            if i != log_n - 1:\n                rlc_coeff = self.mul(rlc_coeff, base_rlc)\n                current_gate_challenge = self.square(current_gate_challenge)\n\n        # Last Round\n        evaluations = self.accumulate_relation_evaluations(\n            sumcheck_evaluations,\n            beta,\n            gamma,\n            public_inputs_delta,\n            eta,\n            eta_two,\n            eta_three,\n            pow_partial_evaluation,\n        )\n\n        assert (\n            len(evaluations) == NUMBER_OF_SUBRELATIONS\n        ), f\"Expected {NUMBER_OF_SUBRELATIONS}, got {len(evaluations)}\"\n\n        grand_honk_relation_sum = evaluations[0]\n        alpha_i = alpha\n        len_evaluations = len(evaluations) - 1\n        for i, evaluation in enumerate(evaluations[1:]):\n            grand_honk_relation_sum = self.add(\n                grand_honk_relation_sum,\n                self.mul(evaluation, alpha_i),\n            )\n            # Skip last update of alpha_i\n            if i != len_evaluations - 1:\n                alpha_i = self.mul(alpha_i, alpha)\n\n        evaluation = sum_check_u_challenges[2]\n        for i in range(3, log_n):\n            evaluation = self.mul(evaluation, sum_check_u_challenges[i])\n\n        grand_honk_relation_sum = self.add(\n            self.mul(\n                grand_honk_relation_sum,\n                self.sub(self.set_or_get_constant(1), evaluation),\n            ),\n            self.mul(libra_evaluation, libra_challenge),\n        )\n\n        check = self.sub(grand_honk_relation_sum, round_target)\n\n        return check_rlc, check\n\n    def compute_next_target_sum(\n        self,\n        round_univariate: list[ModuloCircuitElement],\n        challenge: ModuloCircuitElement,\n    ) -> ModuloCircuitElement:\n\n        BARYCENTRIC_LAGRANGE_DENOMINATORS = [\n            self.set_or_get_constant(\n                0x0000000000000000000000000000000000000000000000000000000000009D80\n            ),\n            self.set_or_get_constant(\n                0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593EFFFEC51\n            ),\n            self.set_or_get_constant(\n                0x00000000000000000000000000000000000000000000000000000000000005A0\n            ),\n            self.set_or_get_constant(\n                0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593EFFFFD31\n            ),\n            self.set_or_get_constant(\n                0x0000000000000000000000000000000000000000000000000000000000000240\n            ),\n            self.set_or_get_constant(\n                0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593EFFFFD31\n            ),\n            self.set_or_get_constant(\n                0x00000000000000000000000000000000000000000000000000000000000005A0\n            ),\n            self.set_or_get_constant(\n                0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593EFFFEC51\n            ),\n            self.set_or_get_constant(\n                0x0000000000000000000000000000000000000000000000000000000000009D80\n            ),\n        ]\n\n        assert (\n            len(BARYCENTRIC_LAGRANGE_DENOMINATORS) == ZK_BATCHED_RELATION_PARTIAL_LENGTH\n        )\n\n        BARYCENTRIC_DOMAIN = [\n            self.set_or_get_constant(i)\n            for i in range(ZK_BATCHED_RELATION_PARTIAL_LENGTH)\n        ]\n\n        numerator = self.set_or_get_constant(1)\n        target_sum = self.set_or_get_constant(0)\n\n        for i in range(ZK_BATCHED_RELATION_PARTIAL_LENGTH):\n            # Update numerator\n            numerator = self.mul(\n                numerator, self.sub(challenge, self.set_or_get_constant(i))\n            )\n\n            # Calculate inverse of the denominator\n            inv = self.inv(\n                self.mul(\n                    BARYCENTRIC_LAGRANGE_DENOMINATORS[i],\n                    self.sub(challenge, BARYCENTRIC_DOMAIN[i]),\n                )\n            )\n\n            # Calculate term and update target_sum\n            term = round_univariate[i]\n            term = self.mul(term, inv)\n            target_sum = self.add(target_sum, term)\n\n        # Scale the sum by the value of B(x)\n        target_sum = self.mul(target_sum, numerator)\n\n        return target_sum\n\n    def partially_evaluate_pow(\n        self,\n        gate_challenge: ModuloCircuitElement,\n        current_evaluation: ModuloCircuitElement,\n        challenge: ModuloCircuitElement,\n        round: int,\n    ) -> ModuloCircuitElement:\n        \"\"\"\n        Univariate evaluation of the monomial ((1-X_l) + X_l.B_l) at the challenge point X_l=u_l\n        \"\"\"\n        univariate_eval = self.add(\n            self.set_or_get_constant(1),\n            self.mul(challenge, self.sub(gate_challenge, self.set_or_get_constant(1))),\n        )\n        new_evaluation = self.mul(current_evaluation, univariate_eval)\n\n        return new_evaluation\n\n    def accumulate_relation_evaluations(\n        self,\n        sumcheck_evaluations: list[list[ModuloCircuitElement]],\n        beta: ModuloCircuitElement,\n        gamma: ModuloCircuitElement,\n        public_inputs_delta: ModuloCircuitElement,\n        eta: ModuloCircuitElement,\n        eta_two: ModuloCircuitElement,\n        eta_three: ModuloCircuitElement,\n        pow_partial_evaluation: ModuloCircuitElement,\n    ) -> list[ModuloCircuitElement]:\n\n        domain_separator = pow_partial_evaluation\n\n        assert len(sumcheck_evaluations) == len(\n            Wire\n        ), f\"Expected {len(Wire)}, got {len(sumcheck_evaluations)}\"\n\n        evaluations = [self.set_or_get_constant(0)] * NUMBER_OF_SUBRELATIONS\n\n        evaluations = self.accumulate_arithmetic_relation(\n            sumcheck_evaluations, evaluations, pow_partial_evaluation\n        )\n        evaluations = self.accumulate_permutation_relation(\n            sumcheck_evaluations,\n            evaluations,\n            beta,\n            gamma,\n            public_inputs_delta,\n            domain_separator,\n        )\n        evaluations = self.accumulate_log_derivative_lookup_relation(\n            sumcheck_evaluations,\n            evaluations,\n            gamma,\n            eta,\n            eta_two,\n            eta_three,\n            domain_separator,\n        )\n        evaluations = self.accumulate_delta_range_relation(\n            sumcheck_evaluations, evaluations, domain_separator\n        )\n        evaluations = self.accumulate_elliptic_relation(\n            sumcheck_evaluations, evaluations, domain_separator\n        )\n\n        evaluations = self.accumulate_memory_relation(\n            sumcheck_evaluations,\n            eta,\n            eta_two,\n            eta_three,\n            evaluations,\n            domain_separator,\n        )\n\n        evaluations = self.accumulate_nnf_relation(\n            sumcheck_evaluations, evaluations, domain_separator\n        )\n\n        evaluations = self.accumulate_poseidon_external_relation(\n            sumcheck_evaluations, evaluations, domain_separator\n        )\n\n        evaluations = self.accumulate_poseidon_internal_relation(\n            sumcheck_evaluations, evaluations, domain_separator\n        )\n\n        return evaluations\n\n    def accumulate_arithmetic_relation(\n        self,\n        purported_evaluations: list[ModuloCircuitElement],\n        evaluations: list[ModuloCircuitElement],\n        domain_separator: ModuloCircuitElement,\n    ) -> ModuloCircuitElement:\n\n        p = purported_evaluations\n        q_arith = p[Wire.Q_ARITH]\n        # Relation 0\n\n        neg_half = self.set_or_get_constant(self.field(-2).__inv__())\n\n        accum = self.product(\n            [\n                self.sub(q_arith, self.set_or_get_constant(3)),\n                p[Wire.Q_M],\n                p[Wire.W_R],\n                p[Wire.W_L],\n                neg_half,\n            ]\n        )\n        accum = self.sum(\n            [\n                accum,\n                self.mul(p[Wire.Q_L], p[Wire.W_L]),\n                self.mul(p[Wire.Q_R], p[Wire.W_R]),\n                self.mul(p[Wire.Q_O], p[Wire.W_O]),\n                self.mul(p[Wire.Q_4], p[Wire.W_4]),\n                p[Wire.Q_C],\n            ]\n        )\n        accum = self.add(\n            accum,\n            self.mul(self.sub(q_arith, self.set_or_get_constant(1)), p[Wire.W_4_SHIFT]),\n        )\n        accum = self.product([accum, q_arith, domain_separator])\n\n        evaluations[0] = accum\n\n        # Relation 1\n        accum = self.sum([p[Wire.W_L], p[Wire.W_4], p[Wire.Q_M]])\n        accum = self.sub(accum, p[Wire.W_L_SHIFT])\n        accum = self.mul(accum, self.sub(q_arith, self.set_or_get_constant(2)))\n        accum = self.mul(accum, self.sub(q_arith, self.set_or_get_constant(1)))\n        accum = self.mul(accum, q_arith)\n        accum = self.mul(accum, domain_separator)\n\n        evaluations[1] = accum\n\n        return evaluations\n\n    def accumulate_permutation_relation(\n        self,\n        purported_evaluations: list[ModuloCircuitElement],\n        evaluations: list[ModuloCircuitElement],\n        beta: ModuloCircuitElement,\n        gamma: ModuloCircuitElement,\n        public_inputs_delta: ModuloCircuitElement,\n        domain_separator: ModuloCircuitElement,\n    ) -> list[ModuloCircuitElement]:\n        p = purported_evaluations\n\n        # Grand Product Numerator\n        n = self.sum([p[Wire.W_L], self.mul(p[Wire.ID_1], beta), gamma])\n        n = self.mul(n, self.sum([p[Wire.W_R], self.mul(p[Wire.ID_2], beta), gamma]))\n        n = self.mul(n, self.sum([p[Wire.W_O], self.mul(p[Wire.ID_3], beta), gamma]))\n        n = self.mul(n, self.sum([p[Wire.W_4], self.mul(p[Wire.ID_4], beta), gamma]))\n\n        # Grand Product Denominator\n        d = self.sum([p[Wire.W_L], self.mul(p[Wire.SIGMA_1], beta), gamma])\n        d = self.mul(d, self.sum([p[Wire.W_R], self.mul(p[Wire.SIGMA_2], beta), gamma]))\n        d = self.mul(d, self.sum([p[Wire.W_O], self.mul(p[Wire.SIGMA_3], beta), gamma]))\n        d = self.mul(d, self.sum([p[Wire.W_4], self.mul(p[Wire.SIGMA_4], beta), gamma]))\n\n        acc = self.mul(n, self.add(p[Wire.Z_PERM], p[Wire.LAGRANGE_FIRST]))\n        acc = self.sub(\n            acc,\n            self.mul(\n                d,\n                self.add(\n                    p[Wire.Z_PERM_SHIFT],\n                    self.mul(p[Wire.LAGRANGE_LAST], public_inputs_delta),\n                ),\n            ),\n        )\n        evaluations[2] = self.mul(acc, domain_separator)\n\n        evaluations[3] = self.product(\n            [p[Wire.LAGRANGE_LAST], p[Wire.Z_PERM_SHIFT], domain_separator]\n        )\n\n        return evaluations\n\n    def accumulate_log_derivative_lookup_relation(\n        self,\n        purported_evaluations: list[ModuloCircuitElement],\n        evaluations: list[ModuloCircuitElement],\n        gamma: ModuloCircuitElement,\n        eta: ModuloCircuitElement,\n        eta_two: ModuloCircuitElement,\n        eta_three: ModuloCircuitElement,\n        domain_separator: ModuloCircuitElement,\n    ) -> list[ModuloCircuitElement]:\n        p = purported_evaluations\n        write_term = self.sum(\n            [\n                p[Wire.TABLE_1],\n                gamma,\n                self.mul(p[Wire.TABLE_2], eta),\n                self.mul(p[Wire.TABLE_3], eta_two),\n                self.mul(p[Wire.TABLE_4], eta_three),\n            ]\n        )\n\n        derived_entry_1 = self.sum(\n            [p[Wire.W_L], gamma, self.mul(p[Wire.Q_R], p[Wire.W_L_SHIFT])]\n        )\n        derived_entry_2 = self.add(\n            p[Wire.W_R], self.mul(p[Wire.Q_M], p[Wire.W_R_SHIFT])\n        )\n        derived_entry_3 = self.add(\n            p[Wire.W_O], self.mul(p[Wire.Q_C], p[Wire.W_O_SHIFT])\n        )\n        read_term = self.sum(\n            [\n                derived_entry_1,\n                self.mul(derived_entry_2, eta),\n                self.mul(derived_entry_3, eta_two),\n                self.mul(p[Wire.Q_O], eta_three),\n            ]\n        )\n\n        read_inverse = self.mul(p[Wire.LOOKUP_INVERSES], write_term)\n        write_inverse = self.mul(p[Wire.LOOKUP_INVERSES], read_term)\n\n        inverse_exists_xor = self.sub(\n            self.add(p[Wire.LOOKUP_READ_TAGS], p[Wire.Q_LOOKUP]),\n            self.mul(p[Wire.LOOKUP_READ_TAGS], p[Wire.Q_LOOKUP]),\n        )\n\n        accumulator_none = self.product(\n            [read_term, write_term, p[Wire.LOOKUP_INVERSES]]\n        )\n        accumulator_none = self.sub(accumulator_none, inverse_exists_xor)\n        accumulator_none = self.mul(accumulator_none, domain_separator)\n\n        accumulator_one = self.mul(p[Wire.Q_LOOKUP], read_inverse)\n        accumulator_one = self.sub(\n            accumulator_one, self.mul(p[Wire.LOOKUP_READ_COUNTS], write_inverse)\n        )\n        read_tag = p[Wire.LOOKUP_READ_TAGS]\n\n        read_tag_boolean_relation = self.sub(self.square(read_tag), read_tag)\n\n        evaluations[4] = accumulator_none\n        evaluations[5] = accumulator_one\n        evaluations[6] = self.mul(read_tag_boolean_relation, domain_separator)\n\n        return evaluations\n\n    def accumulate_delta_range_relation(\n        self,\n        purported_evaluations: list[ModuloCircuitElement],\n        evaluations: list[ModuloCircuitElement],\n        domain_separator: ModuloCircuitElement,\n    ) -> list[ModuloCircuitElement]:\n\n        p = purported_evaluations\n        # Precompute constants\n        minus_one = self.set_or_get_constant(-1)\n\n        # Precompute common terms\n        q_range = p[Wire.Q_RANGE]\n        q_range_times_domain = self.mul(q_range, domain_separator)\n\n        # Compute deltas\n        delta_1 = self.sub(p[Wire.W_R], p[Wire.W_L])\n        delta_2 = self.sub(p[Wire.W_O], p[Wire.W_R])\n        delta_3 = self.sub(p[Wire.W_4], p[Wire.W_O])\n        delta_4 = self.sub(p[Wire.W_L_SHIFT], p[Wire.W_4])\n\n        # Process each delta\n        for i, delta in enumerate([delta_1, delta_2, delta_3, delta_4]):\n            # Compute delta + (-1), delta + (-2), delta + (-3) efficiently\n            delta_minus_1 = self.add(delta, minus_one)\n            delta_minus_2 = self.add(delta_minus_1, minus_one)  # Reuse delta_minus_1\n            delta_minus_3 = self.add(delta_minus_2, minus_one)  # Reuse delta_minus_2\n\n            # Compute product efficiently\n            temp = self.mul(delta, delta_minus_1)\n            temp = self.mul(temp, delta_minus_2)\n            temp = self.mul(temp, delta_minus_3)\n            evaluations[7 + i] = self.mul(temp, q_range_times_domain)\n\n        return evaluations\n\n    def accumulate_elliptic_relation(\n        self,\n        purported_evaluations: list[ModuloCircuitElement],\n        evaluations: list[ModuloCircuitElement],\n        domain_separator: ModuloCircuitElement,\n    ):\n        p = purported_evaluations\n        # TODO : Do not use arithmetic circuit\n        # Split in two and use Q_is_double as if-else condition in Cairo.\n\n        x1 = p[Wire.W_R]\n        y1 = p[Wire.W_O]\n        x2 = p[Wire.W_L_SHIFT]\n        y2 = p[Wire.W_4_SHIFT]\n        y3 = p[Wire.W_O_SHIFT]\n        x3 = p[Wire.W_R_SHIFT]\n        q_sign = p[Wire.Q_L]\n        q_is_double = p[Wire.Q_M]\n\n        x_diff = self.sub(x2, x1)\n        y1_sqr = self.mul(y1, y1)\n\n        y2_sqr = self.mul(y2, y2)\n        y1y2 = self.product([y1, y2, q_sign])\n        x_add_identity = self.sum([x3, x2, x1])\n        x_add_identity = self.product([x_add_identity, x_diff, x_diff])\n        x_add_identity = self.sub(x_add_identity, y2_sqr)\n        x_add_identity = self.sub(x_add_identity, y1_sqr)\n        x_add_identity = self.add(x_add_identity, y1y2)\n        x_add_identity = self.add(x_add_identity, y1y2)\n\n        q_is_add = self.sub(self.set_or_get_constant(1), q_is_double)\n\n        # Point addition, x-coordinate check\n        evaluations[11] = self.product(\n            [\n                x_add_identity,\n                domain_separator,\n                p[Wire.Q_ELLIPTIC],\n                q_is_add,\n            ]\n        )\n\n        # Point addition, y-coordinate check\n        y1_plus_y3 = self.add(y1, y3)\n        y_diff = self.sub(self.mul(y2, q_sign), y1)\n        y_add_identity = self.add(\n            self.mul(y1_plus_y3, x_diff),\n            self.mul(self.sub(x3, x1), y_diff),\n        )\n        evaluations[12] = self.product(\n            [\n                y_add_identity,\n                domain_separator,\n                p[Wire.Q_ELLIPTIC],\n                q_is_add,\n            ]\n        )\n\n        # Point doubling, x-coordinate check\n\n        GRUMPKIN_CURVE_B_PARAMETER_NEGATED = self.set_or_get_constant(17)  # - (- 17)\n        x_pow_4 = self.mul(self.add(y1_sqr, GRUMPKIN_CURVE_B_PARAMETER_NEGATED), x1)\n        y1_sqr_mul_4 = self.add(y1_sqr, y1_sqr)\n        y1_sqr_mul_4 = self.add(y1_sqr_mul_4, y1_sqr_mul_4)\n\n        x1_pow_4_mul_9 = self.mul(x_pow_4, self.set_or_get_constant(9))\n\n        x_double_identity = self.sub(\n            self.mul(self.sum([x3, x1, x1]), y1_sqr_mul_4), x1_pow_4_mul_9\n        )\n\n        evaluations[11] = self.add(\n            evaluations[11],\n            self.product(\n                [x_double_identity, domain_separator, p[Wire.Q_ELLIPTIC], q_is_double]\n            ),\n        )\n\n        # Point doubling, y-coordinate check\n\n        x1_sqr_mul_3 = self.mul(self.sum([x1, x1, x1]), x1)\n        y_double_identity = self.sub(\n            self.mul(x1_sqr_mul_3, self.sub(x1, x3)),\n            self.mul(self.add(y1, y1), self.add(y1, y3)),\n        )\n\n        evaluations[12] = self.add(\n            evaluations[12],\n            self.product(\n                [y_double_identity, domain_separator, p[Wire.Q_ELLIPTIC], q_is_double]\n            ),\n        )\n\n        return evaluations\n\n    def accumulate_memory_relation(\n        self,\n        purported_evaluations: list[ModuloCircuitElement],\n        eta: ModuloCircuitElement,\n        eta_two: ModuloCircuitElement,\n        eta_three: ModuloCircuitElement,\n        evaluations: list[ModuloCircuitElement],\n        domain_separator: ModuloCircuitElement,\n    ) -> list[ModuloCircuitElement]:\n        p = purported_evaluations\n\n        memory_record_check = self.mul(p[Wire.W_O], eta_three)\n        memory_record_check = self.add(\n            memory_record_check, self.mul(p[Wire.W_R], eta_two)\n        )\n        memory_record_check = self.add(memory_record_check, self.mul(p[Wire.W_L], eta))\n        memory_record_check = self.add(memory_record_check, p[Wire.Q_C])\n        partial_record_check = memory_record_check\n        memory_record_check = self.sub(memory_record_check, p[Wire.W_4])\n\n        index_delta = self.sub(p[Wire.W_L_SHIFT], p[Wire.W_L])\n        record_delta = self.sub(p[Wire.W_4_SHIFT], p[Wire.W_4])\n\n        index_is_monotonically_increasing = self.mul(\n            index_delta, self.sub(index_delta, self.set_or_get_constant(1))\n        )\n        adjacent_values_match_if_adjacent_indices_match = self.mul(\n            self.add(\n                self.mul(index_delta, self.set_or_get_constant(-1)),\n                self.set_or_get_constant(1),\n            ),\n            record_delta,\n        )\n\n        wire_ql_times_qr = self.mul(p[Wire.Q_L], p[Wire.Q_R])\n\n        q_memory_times_domain = self.mul(p[Wire.Q_MEMORY], domain_separator)\n\n        wire_ql_times_qr_times_qmemory_times_domain = self.product(\n            [wire_ql_times_qr, q_memory_times_domain]\n        )\n        evaluations[14] = self.mul(\n            adjacent_values_match_if_adjacent_indices_match,\n            wire_ql_times_qr_times_qmemory_times_domain,\n        )\n        evaluations[15] = self.mul(\n            index_is_monotonically_increasing,\n            wire_ql_times_qr_times_qmemory_times_domain,\n        )\n\n        ROM_consistency_check_identity = self.mul(memory_record_check, wire_ql_times_qr)\n\n        access_type = self.sub(p[Wire.W_4], partial_record_check)\n        access_check = self.mul(\n            access_type, self.sub(access_type, self.set_or_get_constant(1))\n        )\n\n        next_gate_access_type = self.sum(\n            [\n                self.mul(p[Wire.W_O_SHIFT], eta_three),\n                self.mul(p[Wire.W_R_SHIFT], eta_two),\n                self.mul(p[Wire.W_L_SHIFT], eta),\n            ]\n        )\n        next_gate_access_type = self.sub(p[Wire.W_4_SHIFT], next_gate_access_type)\n\n        value_delta = self.sub(p[Wire.W_O_SHIFT], p[Wire.W_O])\n        adjacent_values_match_if_adjacent_indices_match_and_next_access_is_a_read_operation = self.product(\n            [\n                self.add(\n                    self.mul(index_delta, self.set_or_get_constant(-1)),\n                    self.set_or_get_constant(1),\n                ),\n                value_delta,\n                self.add(\n                    self.mul(next_gate_access_type, self.set_or_get_constant(-1)),\n                    self.set_or_get_constant(1),\n                ),\n            ]\n        )\n\n        next_gate_access_type_is_boolean = self.sub(\n            self.mul(next_gate_access_type, next_gate_access_type),\n            next_gate_access_type,\n        )\n\n        q_o_times_q_memory_times_domain = self.mul(p[Wire.Q_O], q_memory_times_domain)\n        evaluations[16] = self.product(\n            [\n                adjacent_values_match_if_adjacent_indices_match_and_next_access_is_a_read_operation,\n                q_o_times_q_memory_times_domain,\n            ]\n        )\n        evaluations[17] = self.product(\n            [\n                index_is_monotonically_increasing,\n                q_o_times_q_memory_times_domain,\n            ]\n        )\n        evaluations[18] = self.product(\n            [\n                next_gate_access_type_is_boolean,\n                q_o_times_q_memory_times_domain,\n            ]\n        )\n\n        RAM_consistency_check_identity = self.mul(access_check, p[Wire.Q_O])\n\n        timestamp_delta = self.sub(p[Wire.W_R_SHIFT], p[Wire.W_R])\n\n        RAM_timestamp_check_identity = self.mul(\n            self.add(\n                self.mul(index_delta, self.set_or_get_constant(-1)),\n                self.set_or_get_constant(1),\n            ),\n            timestamp_delta,\n        )\n        RAM_timestamp_check_identity = self.sub(\n            RAM_timestamp_check_identity, p[Wire.W_O]  # Fixed: was p[Wire.Q_O]\n        )\n\n        memory_identity = self.sum(\n            [\n                ROM_consistency_check_identity,\n                self.product(\n                    [RAM_timestamp_check_identity, self.mul(p[Wire.Q_4], p[Wire.Q_L])]\n                ),\n                self.product([memory_record_check, self.mul(p[Wire.Q_M], p[Wire.Q_L])]),\n                RAM_consistency_check_identity,\n            ]\n        )\n        memory_identity = self.mul(memory_identity, q_memory_times_domain)\n\n        evaluations[13] = memory_identity\n\n        return evaluations\n\n    def accumulate_nnf_relation(\n        self,\n        purported_evaluations: list[ModuloCircuitElement],\n        evaluations: list[ModuloCircuitElement],\n        domain_separator: ModuloCircuitElement,\n    ) -> list[ModuloCircuitElement]:\n\n        p = purported_evaluations\n\n        limb_size = self.set_or_get_constant(2**68)\n        sub_limb_shift = self.set_or_get_constant(2**14)\n\n        limb_subproduct = self.add(\n            self.mul(p[Wire.W_L], p[Wire.W_R_SHIFT]),\n            self.mul(p[Wire.W_L_SHIFT], p[Wire.W_R]),\n        )\n\n        non_native_field_gate_2 = self.sub(\n            self.add(\n                self.mul(p[Wire.W_L], p[Wire.W_4]),\n                self.mul(p[Wire.W_R], p[Wire.W_O]),\n            ),\n            p[Wire.W_O_SHIFT],\n        )\n        non_native_field_gate_2 = self.mul(non_native_field_gate_2, limb_size)\n        non_native_field_gate_2 = self.sub(non_native_field_gate_2, p[Wire.W_4_SHIFT])\n        non_native_field_gate_2 = self.add(non_native_field_gate_2, limb_subproduct)\n        non_native_field_gate_2 = self.mul(non_native_field_gate_2, p[Wire.Q_4])\n\n        limb_subproduct = self.mul(limb_subproduct, limb_size)\n        limb_subproduct = self.add(\n            limb_subproduct,\n            self.mul(p[Wire.W_L_SHIFT], p[Wire.W_R_SHIFT]),\n        )\n\n        non_native_field_gate_1 = limb_subproduct\n        non_native_field_gate_1 = self.sub(\n            non_native_field_gate_1,\n            self.add(p[Wire.W_O], p[Wire.W_4]),\n        )\n        non_native_field_gate_1 = self.mul(non_native_field_gate_1, p[Wire.Q_O])\n\n        non_native_field_gate_3 = limb_subproduct\n        non_native_field_gate_3 = self.add(non_native_field_gate_3, p[Wire.W_4])\n        non_native_field_gate_3 = self.sub(\n            non_native_field_gate_3,\n            self.add(p[Wire.W_O_SHIFT], p[Wire.W_4_SHIFT]),\n        )\n        non_native_field_gate_3 = self.mul(non_native_field_gate_3, p[Wire.Q_M])\n\n        non_native_field_identity = self.sum(\n            [non_native_field_gate_1, non_native_field_gate_2, non_native_field_gate_3]\n        )\n        non_native_field_identity = self.mul(non_native_field_identity, p[Wire.Q_R])\n\n        limb_accumulator_1 = self.mul(p[Wire.W_R_SHIFT], sub_limb_shift)\n        limb_accumulator_1 = self.add(limb_accumulator_1, p[Wire.W_L_SHIFT])\n        limb_accumulator_1 = self.mul(limb_accumulator_1, sub_limb_shift)\n        limb_accumulator_1 = self.add(limb_accumulator_1, p[Wire.W_O])\n        limb_accumulator_1 = self.mul(limb_accumulator_1, sub_limb_shift)\n        limb_accumulator_1 = self.add(limb_accumulator_1, p[Wire.W_R])\n        limb_accumulator_1 = self.mul(limb_accumulator_1, sub_limb_shift)\n        limb_accumulator_1 = self.add(limb_accumulator_1, p[Wire.W_L])\n        limb_accumulator_1 = self.sub(limb_accumulator_1, p[Wire.W_4])\n        limb_accumulator_1 = self.mul(limb_accumulator_1, p[Wire.Q_4])\n\n        limb_accumulator_2 = self.mul(p[Wire.W_O_SHIFT], sub_limb_shift)\n        limb_accumulator_2 = self.add(limb_accumulator_2, p[Wire.W_R_SHIFT])\n        limb_accumulator_2 = self.mul(limb_accumulator_2, sub_limb_shift)\n        limb_accumulator_2 = self.add(limb_accumulator_2, p[Wire.W_L_SHIFT])\n        limb_accumulator_2 = self.mul(limb_accumulator_2, sub_limb_shift)\n        limb_accumulator_2 = self.add(limb_accumulator_2, p[Wire.W_4])\n        limb_accumulator_2 = self.mul(limb_accumulator_2, sub_limb_shift)\n        limb_accumulator_2 = self.add(limb_accumulator_2, p[Wire.W_O])\n        limb_accumulator_2 = self.sub(limb_accumulator_2, p[Wire.W_4_SHIFT])\n        limb_accumulator_2 = self.mul(limb_accumulator_2, p[Wire.Q_M])\n\n        #         Fr limb_accumulator_identity = ap.limb_accumulator_1 + ap.limb_accumulator_2;\n        # limb_accumulator_identity = limb_accumulator_identity * wire(p, WIRE.Q_O); //  deg 3\n\n        limb_accumulator_identity = self.add(limb_accumulator_1, limb_accumulator_2)\n        limb_accumulator_identity = self.mul(limb_accumulator_identity, p[Wire.Q_O])\n\n        nnf_identiy = self.add(non_native_field_identity, limb_accumulator_identity)\n        nnf_identiy = self.product([nnf_identiy, p[Wire.Q_NNF], domain_separator])\n        evaluations[19] = nnf_identiy\n\n        return evaluations\n\n    def accumulate_poseidon_external_relation(\n        self,\n        purported_evaluations: list[ModuloCircuitElement],\n        evaluations: list[ModuloCircuitElement],\n        domain_separator: ModuloCircuitElement,\n    ) -> list[ModuloCircuitElement]:\n\n        p = purported_evaluations\n\n        s1 = self.add(p[Wire.W_L], p[Wire.Q_L])\n        s2 = self.add(p[Wire.W_R], p[Wire.Q_R])\n        s3 = self.add(p[Wire.W_O], p[Wire.Q_O])\n        s4 = self.add(p[Wire.W_4], p[Wire.Q_4])\n\n        u1 = self.pow5(s1)\n        u2 = self.pow5(s2)\n        u3 = self.pow5(s3)\n        u4 = self.pow5(s4)\n\n        t0 = self.add(u1, u2)\n        t1 = self.add(u3, u4)\n        t2 = self.add(self.add(u2, u2), t1)\n        t3 = self.add(self.add(u4, u4), t0)\n\n        v4 = self.add(t1, t1)\n        v4 = self.add(self.add(v4, v4), t3)\n\n        v2 = self.add(t0, t0)\n        v2 = self.add(self.add(v2, v2), t2)\n\n        v1 = self.add(t3, v2)\n        v3 = self.add(t2, v4)\n\n        q_pos_by_scaling = self.mul(p[Wire.Q_POSEIDON2_EXTERNAL], domain_separator)\n\n        evaluations[20] = self.mul(q_pos_by_scaling, self.sub(v1, p[Wire.W_L_SHIFT]))\n        evaluations[21] = self.mul(q_pos_by_scaling, self.sub(v2, p[Wire.W_R_SHIFT]))\n        evaluations[22] = self.mul(q_pos_by_scaling, self.sub(v3, p[Wire.W_O_SHIFT]))\n        evaluations[23] = self.mul(q_pos_by_scaling, self.sub(v4, p[Wire.W_4_SHIFT]))\n\n        return evaluations\n\n    def pow5(self, x: ModuloCircuitElement) -> ModuloCircuitElement:\n        x2 = self.mul(x, x)\n        x4 = self.mul(x2, x2)\n        return self.mul(x4, x)\n\n    def accumulate_poseidon_internal_relation(\n        self,\n        purported_evaluations: list[ModuloCircuitElement],\n        evaluations: list[ModuloCircuitElement],\n        domain_separator: ModuloCircuitElement,\n    ) -> list[ModuloCircuitElement]:\n\n        p = purported_evaluations\n        INTERNAL_MATRIX_DIAGONAL = [\n            self.set_or_get_constant(\n                0x10DC6E9C006EA38B04B1E03B4BD9490C0D03F98929CA1D7FB56821FD19D3B6E7\n            ),\n            self.set_or_get_constant(\n                0x0C28145B6A44DF3E0149B3D0A30B3BB599DF9756D4DD9B84A86B38CFB45A740B\n            ),\n            self.set_or_get_constant(\n                0x00544B8338791518B2C7645A50392798B21F75BB60E3596170067D00141CAC15\n            ),\n            self.set_or_get_constant(\n                0x222C01175718386F2E2E82EB122789E352E105A3B8FA852613BC534433EE428B\n            ),\n        ]\n\n        s1 = self.add(p[Wire.W_L], p[Wire.Q_L])\n\n        u1 = self.pow5(s1)\n        u2 = p[Wire.W_R]\n        u3 = p[Wire.W_O]\n        u4 = p[Wire.W_4]\n\n        u_sum = self.sum([u1, u2, u3, u4])\n\n        q_pos_by_scaling = self.mul(p[Wire.Q_POSEIDON2_INTERNAL], domain_separator)\n\n        v1 = self.add(self.mul(u1, INTERNAL_MATRIX_DIAGONAL[0]), u_sum)\n        evaluations[24] = self.mul(q_pos_by_scaling, self.sub(v1, p[Wire.W_L_SHIFT]))\n\n        v2 = self.add(self.mul(u2, INTERNAL_MATRIX_DIAGONAL[1]), u_sum)\n        evaluations[25] = self.mul(q_pos_by_scaling, self.sub(v2, p[Wire.W_R_SHIFT]))\n\n        v3 = self.add(self.mul(u3, INTERNAL_MATRIX_DIAGONAL[2]), u_sum)\n        evaluations[26] = self.mul(q_pos_by_scaling, self.sub(v3, p[Wire.W_O_SHIFT]))\n\n        v4 = self.add(self.mul(u4, INTERNAL_MATRIX_DIAGONAL[3]), u_sum)\n        evaluations[27] = self.mul(q_pos_by_scaling, self.sub(v4, p[Wire.W_4_SHIFT]))\n\n        return evaluations\n\n    def compute_shplemini_msm_scalars(\n        self,\n        p_sumcheck_evaluations: list[\n            ModuloCircuitElement\n        ],  # Full evaluations, not replaced.\n        p_gemini_masking_eval: ModuloCircuitElement,\n        p_gemini_a_evaluations: list[ModuloCircuitElement],\n        p_libra_poly_evals: list[ModuloCircuitElement],\n        tp_gemini_r: ModuloCircuitElement,\n        tp_rho: ModuloCircuitElement,\n        tp_shplonk_z: ModuloCircuitElement,\n        tp_shplonk_nu: ModuloCircuitElement,\n        tp_sumcheck_u_challenges: list[ModuloCircuitElement],\n    ) -> list[ModuloCircuitElement]:\n        assert all(isinstance(i, ModuloCircuitElement) for i in p_sumcheck_evaluations)\n\n        powers_of_evaluations_challenge = [tp_gemini_r]\n        for i in range(1, self.log_n):\n            powers_of_evaluations_challenge.append(\n                self.square(\n                    powers_of_evaluations_challenge[i - 1],\n                )\n            )\n\n        scalars = [self.set_or_get_constant(0)] * (\n            NUMBER_UNSHIFTED + self.log_n + LIBRA_COMMITMENTS + 3\n        )\n\n        pos_inverted_denominator = self.inv(\n            self.sub(tp_shplonk_z, powers_of_evaluations_challenge[0])\n        )\n        neg_inverted_denominator = self.inv(\n            self.add(tp_shplonk_z, powers_of_evaluations_challenge[0])\n        )\n\n        unshifted_scalar = self.add(\n            pos_inverted_denominator,\n            self.mul(tp_shplonk_nu, neg_inverted_denominator),\n        )\n\n        shifted_scalar_neg = self.neg(\n            self.mul(\n                self.inv(tp_gemini_r),\n                self.sub(\n                    pos_inverted_denominator,\n                    self.mul(tp_shplonk_nu, neg_inverted_denominator),\n                ),\n            )\n        )\n\n        scalars[0] = self.set_or_get_constant(1)\n\n        batching_challenge = tp_rho\n        batched_evaluation = p_gemini_masking_eval\n        unshifted_scalar_neg = self.neg(unshifted_scalar)\n        scalars[1] = unshifted_scalar_neg\n        for i in range(0, NUMBER_UNSHIFTED):\n            scalars[i + 2] = self.mul(unshifted_scalar_neg, batching_challenge)\n            batched_evaluation = self.add(\n                batched_evaluation,\n                self.mul(p_sumcheck_evaluations[i], batching_challenge),\n            )\n            batching_challenge = self.mul(batching_challenge, tp_rho)\n\n        for i in range(0, NUMBER_TO_BE_SHIFTED):\n            scalar_offset = i + SHIFTED_COMMITMENTS_START\n            evaluation_offset = i + NUMBER_UNSHIFTED\n            scalars[scalar_offset] = self.add(\n                scalars[scalar_offset], self.mul(shifted_scalar_neg, batching_challenge)\n            )\n            batched_evaluation = self.add(\n                batched_evaluation,\n                self.mul(p_sumcheck_evaluations[evaluation_offset], batching_challenge),\n            )\n            # skip last round:\n            if i < NUMBER_TO_BE_SHIFTED - 1:\n                batching_challenge = self.mul(batching_challenge, tp_rho)\n\n        # computeFoldPosEvaluations\n        def compute_fold_pos_evaluations(\n            tp_sumcheck_u_challenges,\n            batched_eval_accumulator,\n            gemini_evaluations,\n            gemini_eval_challenge_powers,\n        ):\n            fold_pos_evaluations = [self.set_or_get_constant(0)] * self.log_n\n            for i in range(self.log_n, 0, -1):\n                challenge_power = gemini_eval_challenge_powers[i - 1]\n                u = tp_sumcheck_u_challenges[i - 1]\n                eval_neg = gemini_evaluations[i - 1]\n\n                # (challengePower * batchedEvalAccumulator * Fr.wrap(2)) - evalNeg * (challengePower * (Fr.wrap(1) - u) - u))\n                # (challengePower * (Fr.wrap(1) - u)\n                term = self.mul(\n                    challenge_power, self.sub(self.set_or_get_constant(1), u)\n                )\n\n                batched_eval_round_acc = self.sub(\n                    self.double(self.mul(challenge_power, batched_eval_accumulator)),\n                    self.mul(eval_neg, self.sub(term, u)),\n                )\n\n                # (challengePower * (Fr.wrap(1) - u) + u).invert()\n                den = self.add(term, u)\n\n                batched_eval_round_acc = self.mul(batched_eval_round_acc, self.inv(den))\n                batched_eval_accumulator = batched_eval_round_acc\n                fold_pos_evaluations[i - 1] = batched_eval_accumulator\n\n            return fold_pos_evaluations\n\n        fold_pos_evaluations = compute_fold_pos_evaluations(\n            tp_sumcheck_u_challenges,\n            batched_evaluation,\n            p_gemini_a_evaluations,\n            powers_of_evaluations_challenge,\n        )\n\n        constant_term_accumulator = self.mul(\n            fold_pos_evaluations[0], pos_inverted_denominator\n        )\n\n        constant_term_accumulator = self.add(\n            constant_term_accumulator,\n            self.product(\n                [\n                    p_gemini_a_evaluations[0],\n                    tp_shplonk_nu,\n                    neg_inverted_denominator,\n                ]\n            ),\n        )\n\n        batching_challenge = self.square(tp_shplonk_nu)\n\n        boundary = NUMBER_UNSHIFTED + 2\n\n        for i in range(self.log_n - 1):\n            dummy_round = i >= (self.log_n - 1)\n\n            scaling_factor = self.set_or_get_constant(0)\n            if not dummy_round:\n                pos_inverted_denominator = self.inv(\n                    self.sub(tp_shplonk_z, powers_of_evaluations_challenge[i + 1])\n                )\n                neg_inverted_denominator = self.inv(\n                    self.add(tp_shplonk_z, powers_of_evaluations_challenge[i + 1])\n                )\n\n                scaling_factor_pos = self.mul(\n                    batching_challenge, pos_inverted_denominator\n                )\n                scaling_factor_neg = self.mul(\n                    batching_challenge,\n                    self.mul(tp_shplonk_nu, neg_inverted_denominator),\n                )\n                scalars[boundary + i] = self.neg(\n                    self.add(scaling_factor_neg, scaling_factor_pos)\n                )\n\n                accum_contribution = self.mul(\n                    scaling_factor_neg, p_gemini_a_evaluations[i + 1]\n                )\n                accum_contribution = self.add(\n                    accum_contribution,\n                    self.mul(scaling_factor_pos, fold_pos_evaluations[i + 1]),\n                )\n                constant_term_accumulator = self.add(\n                    constant_term_accumulator, accum_contribution\n                )\n            else:\n                # print(\n                #     f\"dummy round {i}, index {NUMBER_OF_ENTITIES + i + 1} is set to 0\"\n                # )\n                pass\n\n            batching_challenge = self.mul(\n                batching_challenge, self.square(tp_shplonk_nu)\n            )\n\n        boundary += self.log_n - 1\n\n        denominators = [self.set_or_get_constant(0)] * 4\n        denominators[0] = self.inv(self.sub(tp_shplonk_z, tp_gemini_r))\n        denominators[1] = self.inv(\n            self.sub(\n                tp_shplonk_z,\n                self.mul(self.set_or_get_constant(SUBGROUP_GENERATOR), tp_gemini_r),\n            ),\n        )\n        denominators[2] = denominators[0]\n        denominators[3] = denominators[0]\n\n        batching_scalars = [self.set_or_get_constant(0)] * 4\n        batching_challenge = self.mul(batching_challenge, self.square(tp_shplonk_nu))\n\n        for i in range(LIBRA_EVALUATIONS):\n            scaling_factor = self.mul(denominators[i], batching_challenge)\n            batching_scalars[i] = self.neg(scaling_factor)\n\n            # skip last step:\n            if i < LIBRA_EVALUATIONS - 1:\n                batching_challenge = self.mul(batching_challenge, tp_shplonk_nu)\n            constant_term_accumulator = self.add(\n                constant_term_accumulator,\n                self.mul(scaling_factor, p_libra_poly_evals[i]),\n            )\n\n        scalars[boundary] = batching_scalars[0]\n        scalars[boundary + 1] = self.add(batching_scalars[1], batching_scalars[2])\n        scalars[boundary + 2] = batching_scalars[3]\n\n        scalars[boundary + 3] = constant_term_accumulator\n        scalars[boundary + 4] = tp_shplonk_z\n\n        return scalars\n\n    def check_evals_consistency(\n        self,\n        p_libra_evaluation: ModuloCircuitElement,\n        p_libra_poly_evals: list[ModuloCircuitElement],\n        tp_gemini_r: ModuloCircuitElement,\n        tp_sumcheck_u_challenges: list[ModuloCircuitElement],\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        vanishing_poly_eval = self.sub(\n            self.pow(tp_gemini_r, SUBGROUP_SIZE), self.set_or_get_constant(1)\n        )\n\n        challenge_poly_lagrange = [self.set_or_get_constant(0)] * SUBGROUP_SIZE\n        challenge_poly_lagrange[0] = self.set_or_get_constant(1)\n        for r in range(self.log_n):\n            curr_idx = 1 + LIBRA_UNIVARIATES_LENGTH * r\n            challenge_poly_lagrange[curr_idx] = self.set_or_get_constant(1)\n            for idx in range(curr_idx + 1, curr_idx + LIBRA_UNIVARIATES_LENGTH):\n                challenge_poly_lagrange[idx] = self.mul(\n                    challenge_poly_lagrange[idx - 1], tp_sumcheck_u_challenges[r]\n                )\n\n        root_power = self.set_or_get_constant(1)\n        challenge_poly_eval = self.set_or_get_constant(0)\n        denominators = [self.set_or_get_constant(0)] * SUBGROUP_SIZE\n        for idx in range(SUBGROUP_SIZE):\n            denominators[idx] = self.sub(\n                self.mul(root_power, tp_gemini_r), self.set_or_get_constant(1)\n            )\n            denominators[idx] = self.inv(denominators[idx])\n            challenge_poly_eval = self.add(\n                challenge_poly_eval,\n                self.mul(challenge_poly_lagrange[idx], denominators[idx]),\n            )\n            # skip last step:\n            if idx < SUBGROUP_SIZE - 1:\n                root_power = self.mul(\n                    root_power, self.set_or_get_constant(SUBGROUP_GENERATOR_INVERSE)\n                )\n\n        numerator = self.mul(\n            vanishing_poly_eval,\n            self.set_or_get_constant(pow(SUBGROUP_SIZE, -1, self.field.p)),\n        )\n        challenge_poly_eval = self.mul(challenge_poly_eval, numerator)\n        lagrange_first = self.mul(denominators[0], numerator)\n        lagrange_last = self.mul(denominators[SUBGROUP_SIZE - 1], numerator)\n\n        diff = self.mul(lagrange_first, p_libra_poly_evals[2])\n        diff = self.add(\n            diff,\n            self.mul(\n                self.sub(\n                    tp_gemini_r, self.set_or_get_constant(SUBGROUP_GENERATOR_INVERSE)\n                ),\n                self.sub(\n                    self.sub(p_libra_poly_evals[1], p_libra_poly_evals[2]),\n                    self.mul(p_libra_poly_evals[0], challenge_poly_eval),\n                ),\n            ),\n        )\n        diff = self.sub(\n            self.add(\n                diff,\n                self.mul(\n                    lagrange_last, self.sub(p_libra_poly_evals[2], p_libra_evaluation)\n                ),\n            ),\n            self.mul(vanishing_poly_eval, p_libra_poly_evals[3]),\n        )\n\n        return vanishing_poly_eval, diff\n\n    def check_evals_consistency_split(\n        self,\n        p_libra_evaluation: ModuloCircuitElement,\n        p_libra_poly_evals: list[ModuloCircuitElement],\n        tp_gemini_r: ModuloCircuitElement,\n        tp_sumcheck_u_challenges: list[ModuloCircuitElement],\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        challenge_poly_eval, root_power_times_tp_gemini_r = (\n            self._check_evals_consistency_init(tp_gemini_r)\n        )\n        for r in range(self.log_n):\n            challenge_poly_eval, root_power_times_tp_gemini_r = (\n                self._check_evals_consistency_loop(\n                    challenge_poly_eval,\n                    root_power_times_tp_gemini_r,\n                    tp_sumcheck_u_challenges[r],\n                )\n            )\n        vanishing_poly_eval, diff = self._check_evals_consistency_done(\n            p_libra_evaluation,\n            p_libra_poly_evals,\n            tp_gemini_r,\n            challenge_poly_eval,\n            root_power_times_tp_gemini_r,\n        )\n        return vanishing_poly_eval, diff\n\n    def _check_evals_consistency_init(\n        self,\n        tp_gemini_r: ModuloCircuitElement,\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        challenge_poly_eval = self.inv(\n            self.sub(tp_gemini_r, self.set_or_get_constant(1))\n        )\n        root_power_times_tp_gemini_r = self.mul(\n            self.set_or_get_constant(SUBGROUP_GENERATOR_INVERSE), tp_gemini_r\n        )\n        return challenge_poly_eval, root_power_times_tp_gemini_r\n\n    def _check_evals_consistency_loop(\n        self,\n        challenge_poly_eval: ModuloCircuitElement,\n        root_power_times_tp_gemini_r: ModuloCircuitElement,\n        tp_sumcheck_u_challenge: ModuloCircuitElement,\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        challenge_poly_lagrange = self.set_or_get_constant(1)\n        for i in range(LIBRA_UNIVARIATES_LENGTH):\n            denominator = self.inv(\n                self.sub(root_power_times_tp_gemini_r, self.set_or_get_constant(1))\n            )\n            challenge_poly_eval = self.add(\n                challenge_poly_eval, self.mul(challenge_poly_lagrange, denominator)\n            )\n            root_power_times_tp_gemini_r = self.mul(\n                root_power_times_tp_gemini_r,\n                self.set_or_get_constant(SUBGROUP_GENERATOR_INVERSE),\n            )\n            # skip last step:\n            if i < LIBRA_UNIVARIATES_LENGTH - 1:\n                challenge_poly_lagrange = self.mul(\n                    challenge_poly_lagrange, tp_sumcheck_u_challenge\n                )\n        return challenge_poly_eval, root_power_times_tp_gemini_r\n\n    def _check_evals_consistency_done(\n        self,\n        p_libra_evaluation: ModuloCircuitElement,\n        p_libra_poly_evals: list[ModuloCircuitElement],\n        tp_gemini_r: ModuloCircuitElement,\n        challenge_poly_eval: ModuloCircuitElement,\n        root_power_times_tp_gemini_r: ModuloCircuitElement,\n    ) -> tuple[ModuloCircuitElement, ModuloCircuitElement]:\n        # We've processed indices 0 to (1 + log_n * 9 - 1) = log_n * 9\n        # Need to advance root_power for remaining indices up to SUBGROUP_SIZE - 2\n        # (SUBGROUP_SIZE - 1 is the last index, handled separately for lagrange_last)\n        for _ in range(1 + self.log_n * LIBRA_UNIVARIATES_LENGTH, SUBGROUP_SIZE - 1):\n            root_power_times_tp_gemini_r = self.mul(\n                root_power_times_tp_gemini_r,\n                self.set_or_get_constant(SUBGROUP_GENERATOR_INVERSE),\n            )\n        denominator_first = self.inv(self.sub(tp_gemini_r, self.set_or_get_constant(1)))\n        denominator_last = self.inv(\n            self.sub(root_power_times_tp_gemini_r, self.set_or_get_constant(1))\n        )\n\n        vanishing_poly_eval = self.sub(\n            self.pow(tp_gemini_r, SUBGROUP_SIZE), self.set_or_get_constant(1)\n        )\n        numerator = self.mul(\n            vanishing_poly_eval,\n            self.set_or_get_constant(pow(SUBGROUP_SIZE, -1, self.field.p)),\n        )\n        challenge_poly_eval = self.mul(challenge_poly_eval, numerator)\n        lagrange_first = self.mul(denominator_first, numerator)\n        lagrange_last = self.mul(denominator_last, numerator)\n\n        diff = self.mul(lagrange_first, p_libra_poly_evals[2])\n        diff = self.add(\n            diff,\n            self.mul(\n                self.sub(\n                    tp_gemini_r, self.set_or_get_constant(SUBGROUP_GENERATOR_INVERSE)\n                ),\n                self.sub(\n                    self.sub(p_libra_poly_evals[1], p_libra_poly_evals[2]),\n                    self.mul(p_libra_poly_evals[0], challenge_poly_eval),\n                ),\n            ),\n        )\n        diff = self.sub(\n            self.add(\n                diff,\n                self.mul(\n                    lagrange_last, self.sub(p_libra_poly_evals[2], p_libra_evaluation)\n                ),\n            ),\n            self.mul(vanishing_poly_eval, p_libra_poly_evals[3]),\n        )\n\n        return vanishing_poly_eval, diff\n\n    def pow(self, x: ModuloCircuitElement, e: int) -> ModuloCircuitElement:\n        assert e > 0 and ((e - 1) & e) == 0  # supports only powers of 2\n        shift = e.bit_length() - 1\n        y = x\n        for i in range(shift):\n            y = self.mul(y, y)\n        return y\n\n\ndef get_msm_points_from_vk_and_proof(\n    vk: HonkVk,\n    proof: ZKHonkProof,\n) -> list[G1Point]:\n    points = [\n        proof.shplonk_q,  # 0\n        proof.gemini_masking_poly,  # 1\n        vk.qm,  # 2\n        vk.qc,  # 3\n        vk.ql,  # 4\n        vk.qr,  # 5\n        vk.qo,  # 6\n        vk.q4,  # 7\n        vk.qLookup,  # 8\n        vk.qArith,  # 9\n        vk.qDeltaRange,  # 10\n        vk.qElliptic,  # 11\n        vk.qMemory,  # 12\n        vk.qNnf,  # 13\n        vk.qPoseidon2External,  # 14\n        vk.qPoseidon2Internal,  # 15\n        vk.s1,  # 16\n        vk.s2,  # 17\n        vk.s3,  # 18\n        vk.s4,  # 19\n        vk.id1,  # 20\n        vk.id2,  # 21\n        vk.id3,  # 22\n        vk.id4,  # 23\n        vk.t1,  # 24\n        vk.t2,  # 25\n        vk.t3,  # 26\n        vk.t4,  # 27\n        vk.lagrange_first,  # 28\n        vk.lagrange_last,  # 29\n        proof.w1,  # 30\n        proof.w2,  # 31\n        proof.w3,  # 32\n        proof.w4,  # 33\n        proof.z_perm,  # 34\n        proof.lookup_inverses,  # 35\n        proof.lookup_read_counts,  # 36\n        proof.lookup_read_tags,  # 37\n    ]\n\n    points.extend(proof.gemini_fold_comms)\n    points.extend(proof.libra_commitments)\n    points.append(G1Point.get_nG(CurveID.BN254, 1))\n    points.append(proof.kzg_quotient)\n\n    assert len(points) == NUMBER_UNSHIFTED + vk.log_circuit_size + LIBRA_COMMITMENTS + 3\n\n    return points\n\n\ndef honk_proof_from_bytes(\n    proof_bytes: bytes,\n    public_inputs_bytes: bytes,\n    vk: HonkVk,\n    system: ProofSystem,\n) -> ZKHonkProof:\n    if system == ProofSystem.UltraKeccakZKHonk:\n        return ZKHonkProof.from_bytes(proof_bytes, public_inputs_bytes, vk)\n    else:\n        raise ValueError(f\"Invalid system: {system}\")\n\n\ndef honk_transcript_from_proof(\n    vk: HonkVk,\n    proof: ZKHonkProof,\n) -> ZKHonkTranscript:\n    return ZKHonkTranscript.from_proof(vk, proof)\n\n\nclass AutoValueEnum(Enum):\n    def __new__(cls, value):\n        obj = object.__new__(cls)\n        obj._value_ = value\n        return obj\n\n    def __int__(self):\n        return self._value_\n\n    def __index__(self):\n        return self._value_\n\n\nclass Wire(AutoValueEnum):\n    Q_M = 0  # Start at 0 for array indexing\n    Q_C = auto()\n    Q_L = auto()\n    Q_R = auto()\n    Q_O = auto()\n    Q_4 = auto()\n    Q_LOOKUP = auto()\n    Q_ARITH = auto()\n    Q_RANGE = auto()\n    Q_ELLIPTIC = auto()\n    Q_MEMORY = auto()\n    Q_NNF = auto()\n    Q_POSEIDON2_EXTERNAL = auto()\n    Q_POSEIDON2_INTERNAL = auto()\n    SIGMA_1 = auto()\n    SIGMA_2 = auto()\n    SIGMA_3 = auto()\n    SIGMA_4 = auto()\n    ID_1 = auto()\n    ID_2 = auto()\n    ID_3 = auto()\n    ID_4 = auto()\n    TABLE_1 = auto()\n    TABLE_2 = auto()\n    TABLE_3 = auto()\n    TABLE_4 = auto()\n    LAGRANGE_FIRST = auto()\n    LAGRANGE_LAST = auto()\n    W_L = auto()\n    W_R = auto()\n    W_O = auto()\n    W_4 = auto()\n    Z_PERM = auto()\n    LOOKUP_INVERSES = auto()\n    LOOKUP_READ_COUNTS = auto()\n    LOOKUP_READ_TAGS = auto()\n    W_L_SHIFT = auto()\n    W_R_SHIFT = auto()\n    W_O_SHIFT = auto()\n    W_4_SHIFT = auto()\n    Z_PERM_SHIFT = auto()\n\n    @staticmethod\n    def unused_indexes():\n        return []\n\n    @staticmethod\n    def insert_unused_indexes_with_nones(array: list) -> list:\n        assert len(array) == len(Wire) - len(Wire.unused_indexes())\n        for i in Wire.unused_indexes():\n            array.insert(i, None)\n        for i in Wire.unused_indexes():\n            assert array[i] is None\n        assert len(array) == len(Wire)\n\n        return array\n\n    @staticmethod\n    def replace_unused_indexes_with_nones(array: list) -> list:\n        for i in Wire.unused_indexes():\n            array[i] = None\n        return array\n\n    @staticmethod\n    def remove_unused_indexes(array: list) -> list:\n        for i in Wire.unused_indexes():\n            array.pop(i)\n        return array\n\n\nif __name__ == \"__main__\":\n    vk = HonkVk.from_bytes(\n        open(\n            \"hydra/garaga/starknet/honk_contract_generator/examples/vk_ultra_keccak.bin\",\n            \"rb\",\n        ).read(),\n    )\n    proof = honk_proof_from_bytes(\n        open(\n            \"hydra/garaga/starknet/honk_contract_generator/examples/proof_ultra_keccak_zk.bin\",\n            \"rb\",\n        ).read(),\n        open(\n            \"hydra/garaga/starknet/honk_contract_generator/examples/public_inputs_ultra_keccak.bin\",\n            \"rb\",\n        ).read(),\n        vk,\n        ProofSystem.UltraKeccakZKHonk,\n    )\n\n    print(vk.to_cairo())\n\n    print(proof.to_cairo())\n    print(f\"\\n\\n\")\n\n    tp = honk_transcript_from_proof(vk, proof)\n    print(f\"\\n\\n\")\n    print(tp.to_cairo())\n\n    print(f\"\\n\\n\")\n\n    print(Wire.unused_indexes())\n\n    print(tp)\n"
  },
  {
    "path": "hydra/garaga/rsa_rns.py",
    "content": "\"\"\"RSA-2048 signature verification via RNS arithmetic and CRT exactness.\n\nImplements RSA-2048 modular exponentiation verification suitable for\nprovable computation (Cairo/STARK). Integers in [0, 2^2048) are\nrepresented in a Residue Number System (RNS) defined by 11 pairwise\ncoprime ~384-bit primes.\n\nA modular product a·b ≡ r (mod n) is witnessed by the Euclidean\nquotient q satisfying a·b = q·n + r. Correctness is verified through:\n\n  1. Channel congruences: for each prime p_i,\n     a·b ≡ q·n + r (mod p_i).\n  2. CRT exactness: since |a·b - q·n - r| < M = ∏ p_i and the\n     congruences force a·b - q·n - r ≡ 0 (mod M), the relation\n     holds exactly over ℤ.\n\nRSA-2048 verification computes s^{65537} mod n via square-and-multiply,\nyielding 16 squarings + 1 final multiplication = 17 certified reductions.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport hashlib\nimport math\nimport random\nfrom dataclasses import dataclass\nfrom typing import Sequence\n\nLIMB_BITS = 96\nBASE = 1 << LIMB_BITS\nN_LIMBS = 22\nRSA_BITS = 2048\nTOP_LIMB_BITS = RSA_BITS - LIMB_BITS * (N_LIMBS - 1)\nTOP_LIMB_MAX = 1 << TOP_LIMB_BITS\nMAX_2048 = 1 << RSA_BITS\nN_CHUNKS = 6\nCHUNK_LIMBS = 4\nTOP_CHUNK_BITS = 128\nRSA_REDUCTION_COUNT = 17\nRSA_PUBLIC_EXPONENT = 65537\n\n# Upper bound on |a·b - q·n - r| for a, b, q, n, r < 2^2048.\n# The CRT modulus M = ∏ p_i must exceed this to guarantee exactness.\nCRT_EXACTNESS_BOUND = (1 << (2 * RSA_BITS + 1)) + (1 << RSA_BITS)\n\nCHANNEL_MODULI = [\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498787617,\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498787149,\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498785261,\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498784349,\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498783539,\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498782649,\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498782327,\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498781403,\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498781199,\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498780291,\n    4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498779421,\n]\n\n\ndef modinv(a: int, m: int) -> int:\n    return pow(a, -1, m)\n\n\ndef split_words_96(x: int, n_words: int) -> list[int]:\n    return [(x >> (LIMB_BITS * i)) & (BASE - 1) for i in range(n_words)]\n\n\ndef join_words_96(words: Sequence[int]) -> int:\n    out = 0\n    for i, word in enumerate(words):\n        if not (0 <= word < BASE):\n            raise ValueError(f\"96-bit word {i} out of range\")\n        out |= word << (LIMB_BITS * i)\n    return out\n\n\ndef split_limbs_2048(x: int) -> list[int]:\n    if not (0 <= x < MAX_2048):\n        raise ValueError(\"value is not a non-negative 2048-bit integer\")\n    limbs = split_words_96(x, N_LIMBS)\n    if limbs[-1] >= TOP_LIMB_MAX:\n        raise ValueError(\"top limb exceeds the 32-bit RSA-2048 bound\")\n    return limbs\n\n\ndef join_limbs_2048(limbs: Sequence[int]) -> int:\n    if len(limbs) != N_LIMBS:\n        raise ValueError(f\"expected {N_LIMBS} limbs, got {len(limbs)}\")\n    x = join_words_96(limbs)\n    if x >= MAX_2048:\n        raise ValueError(\"reconstructed integer exceeds 2048 bits\")\n    if limbs[-1] >= TOP_LIMB_MAX:\n        raise ValueError(\"top limb exceeds the 32-bit RSA-2048 bound\")\n    return x\n\n\ndef limbs_to_chunks(limbs: Sequence[int]) -> tuple[int, ...]:\n    \"\"\"Group 22 limbs of 96 bits into 6 chunks of 384 bits (top chunk: 128 bits).\"\"\"\n    if len(limbs) != N_LIMBS:\n        raise ValueError(f\"expected {N_LIMBS} limbs, got {len(limbs)}\")\n    padded_limbs = list(limbs) + [0, 0]\n    chunks = []\n    for chunk_index in range(N_CHUNKS):\n        start = chunk_index * CHUNK_LIMBS\n        end = start + CHUNK_LIMBS\n        chunks.append(join_words_96(padded_limbs[start:end]))\n    if chunks[-1] >= (1 << TOP_CHUNK_BITS):\n        raise ValueError(\"top chunk exceeds the 128-bit RSA-2048 bound\")\n    return tuple(chunks)\n\n\ndef is_probable_prime(n: int, rounds: int = 24) -> bool:\n    if n < 2:\n        return False\n\n    small_primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37)\n    for p in small_primes:\n        if n % p == 0:\n            return n == p\n\n    d = n - 1\n    s = 0\n    while d % 2 == 0:\n        s += 1\n        d //= 2\n\n    rng = random.Random((n ^ 0x9E3779B97F4A7C15) & ((1 << 64) - 1))\n    for _ in range(rounds):\n        a = rng.randrange(2, n - 1)\n        x = pow(a, d, n)\n        if x in (1, n - 1):\n            continue\n        for __ in range(s - 1):\n            x = pow(x, 2, n)\n            if x == n - 1:\n                break\n        else:\n            return False\n    return True\n\n\ndef random_probable_prime(bits: int, rng: random.Random) -> int:\n    while True:\n        candidate = rng.getrandbits(bits) | (1 << (bits - 1)) | 1\n        while candidate.bit_length() == bits:\n            if is_probable_prime(candidate):\n                return candidate\n            candidate += 2\n\n\n@dataclass(frozen=True, slots=True)\nclass RNSInteger:\n    \"\"\"An integer x in [0, 2^2048) together with its RNS representation.\n\n    Attributes:\n        value: The integer x.\n        limbs: 96-bit limb decomposition, x = sum(limbs[i] * 2^{96i}).\n        residues: Channel residues, residues[i] = x mod p_i.\n    \"\"\"\n\n    value: int\n    limbs: tuple[int, ...]\n    residues: tuple[int, ...]\n\n    @staticmethod\n    def from_int(x: int, channel_moduli: Sequence[int]) -> \"RNSInteger\":\n        limbs = tuple(split_limbs_2048(x))\n        residues = tuple(x % p for p in channel_moduli)\n        return RNSInteger(value=x, limbs=limbs, residues=residues)\n\n    @property\n    def chunks(self) -> tuple[int, ...]:\n        return limbs_to_chunks(self.limbs)\n\n    def serialize_to_calldata(self) -> list[int]:\n        calldata = []\n        for chunk in self.chunks:\n            calldata.extend(split_words_96(chunk, CHUNK_LIMBS))\n        return calldata\n\n\n@dataclass(frozen=True, slots=True)\nclass ReductionWitness:\n    \"\"\"Witness for a modular reduction a * b = q * n + r over Z.\n\n    Attributes:\n        quotient: q = floor(a*b / n) as an RNS integer.\n        remainder: r = (a*b) mod n as an RNS integer.\n    \"\"\"\n\n    quotient: RNSInteger\n    remainder: RNSInteger\n\n    def serialize_to_calldata(self) -> list[int]:\n        return (\n            self.quotient.serialize_to_calldata()\n            + self.remainder.serialize_to_calldata()\n        )\n\n\n@dataclass(frozen=True, slots=True)\nclass RSA2048ExponentiationWitness:\n    \"\"\"Complete witness for RSA-2048 verification: s^e = m (mod n).\n\n    Contains the modulus n, signature s, expected message m, and 17\n    reduction witnesses certifying the square-and-multiply chain\n    for s^{65537} mod n.\n    \"\"\"\n\n    modulus: RNSInteger\n    signature: RNSInteger\n    expected_message: RNSInteger\n    reductions: tuple[ReductionWitness, ...]\n\n    def __post_init__(self) -> None:\n        if len(self.reductions) != RSA_REDUCTION_COUNT:\n            raise ValueError(\n                f\"expected {RSA_REDUCTION_COUNT} reductions, got {len(self.reductions)}\"\n            )\n\n    def serialize_public_key(self) -> list[int]:\n        return self.modulus.serialize_to_calldata()\n\n    def serialize_signature_with_hint(self) -> list[int]:\n        calldata = (\n            self.signature.serialize_to_calldata()\n            + self.expected_message.serialize_to_calldata()\n        )\n        for witness in self.reductions:\n            calldata.extend(witness.serialize_to_calldata())\n        return calldata\n\n    def serialize(self, prepend_public_key: bool = True) -> list[int]:\n        calldata = []\n        if prepend_public_key:\n            calldata.extend(self.serialize_public_key())\n        calldata.extend(self.serialize_signature_with_hint())\n        return calldata\n\n\nclass RNSContext:\n    \"\"\"RNS arithmetic context for CRT-based exact modular verification.\n\n    Defines the RNS basis {p_1, ..., p_k} and precomputes CRT\n    reconstruction coefficients. The product M = prod(p_i) must exceed\n    CRT_EXACTNESS_BOUND to guarantee that channel congruences imply\n    integer equality.\n\n    Attributes:\n        primes: Channel primes p_1, ..., p_k.\n        M: CRT modulus, M = prod(p_i).\n        cofactors: CRT cofactors, M_i = M / p_i.\n        cofactor_inverses: CRT lifting coefficients, M_i^{-1} mod p_i.\n    \"\"\"\n\n    def __init__(self, channel_moduli: Sequence[int]) -> None:\n        self.primes = list(channel_moduli)\n\n        if not self.primes:\n            raise ValueError(\"at least one channel modulus is required\")\n        if len(set(self.primes)) != len(self.primes):\n            raise ValueError(\"channel moduli must be distinct\")\n        if not all(p < BASE**4 for p in self.primes):\n            raise ValueError(\"channel moduli must fit in 4 x 96-bit words\")\n        if not all(is_probable_prime(p) for p in self.primes):\n            raise ValueError(\"channel moduli must be prime\")\n        if math.prod(self.primes) <= CRT_EXACTNESS_BOUND:\n            raise ValueError(\"CRT modulus is too small for exactness\")\n\n        self.M = math.prod(self.primes)\n        self.cofactors = [self.M // p for p in self.primes]\n        self.cofactor_inverses = [\n            pow(M_i, -1, p) for M_i, p in zip(self.cofactors, self.primes)\n        ]\n\n    def encode(self, x: int) -> RNSInteger:\n        return RNSInteger.from_int(x, self.primes)\n\n    def residues_from_limbs(self, limbs: Sequence[int]) -> tuple[int, ...]:\n        \"\"\"Compute channel residues directly from the limb decomposition.\"\"\"\n        _ = join_limbs_2048(limbs)\n        out = []\n        for p in self.primes:\n            acc = 0\n            for limb in reversed(limbs):\n                acc = (acc * BASE + limb) % p\n            out.append(acc)\n        return tuple(out)\n\n    def crt_reconstruct(self, residues: Sequence[int]) -> int:\n        \"\"\"Reconstruct x in [0, M) from its channel residues via the CRT.\"\"\"\n        if len(residues) != len(self.primes):\n            raise ValueError(\"wrong number of residues\")\n        x = 0\n        for r_i, p_i, M_i, M_i_inv in zip(\n            residues, self.primes, self.cofactors, self.cofactor_inverses\n        ):\n            if not (0 <= r_i < p_i):\n                raise ValueError(\"residue out of range\")\n            x = (x + r_i * M_i * M_i_inv) % self.M\n        return x\n\n    def is_consistent_encoding(self, ev: RNSInteger) -> bool:\n        \"\"\"Check that limbs and residues are consistent with the integer value.\"\"\"\n        try:\n            value_from_limbs = join_limbs_2048(ev.limbs)\n        except ValueError:\n            return False\n        if value_from_limbs != ev.value:\n            return False\n        return ev.residues == self.residues_from_limbs(ev.limbs)\n\n    def rns_congruences_hold(\n        self,\n        a: RNSInteger,\n        b: RNSInteger,\n        modulus: RNSInteger,\n        quotient: RNSInteger,\n        remainder: RNSInteger,\n    ) -> bool:\n        \"\"\"Check a*b = q*n + r (mod p_i) in every RNS channel.\"\"\"\n        for ev in (a, b, modulus, quotient, remainder):\n            if not self.is_consistent_encoding(ev):\n                return False\n\n        if not (0 <= remainder.value < modulus.value):\n            return False\n\n        for idx, p in enumerate(self.primes):\n            lhs = (a.residues[idx] * b.residues[idx]) % p\n            rhs = (\n                quotient.residues[idx] * modulus.residues[idx] + remainder.residues[idx]\n            ) % p\n            if lhs != rhs:\n                return False\n        return True\n\n    def crt_exactness_holds(\n        self,\n        a: RNSInteger,\n        b: RNSInteger,\n        modulus: RNSInteger,\n        quotient: RNSInteger,\n        remainder: RNSInteger,\n    ) -> bool:\n        \"\"\"Check |delta| < M and delta = 0 (mod M) where delta = a*b - q*n - r.\"\"\"\n        delta = a.value * b.value - quotient.value * modulus.value - remainder.value\n        return (delta % self.M == 0) and (abs(delta) < self.M)\n\n    def verify_exact_modular_product(\n        self,\n        a: RNSInteger,\n        b: RNSInteger,\n        modulus: RNSInteger,\n        quotient: RNSInteger,\n        remainder: RNSInteger,\n    ) -> bool:\n        \"\"\"Verify a*b = q*n + r exactly via RNS congruences and CRT exactness.\"\"\"\n        if not self.rns_congruences_hold(a, b, modulus, quotient, remainder):\n            return False\n        if not self.crt_exactness_holds(a, b, modulus, quotient, remainder):\n            return False\n        return a.value * b.value == quotient.value * modulus.value + remainder.value\n\n\ndef witness_modular_product(\n    ctx: RNSContext, a: int, b: int, modulus: int\n) -> tuple[RNSInteger, RNSInteger, RNSInteger, RNSInteger, RNSInteger]:\n    \"\"\"Compute the RNS encoding of (a, b, n, q, r) where a*b = q*n + r.\"\"\"\n    if not (0 <= a < modulus and 0 <= b < modulus and 1 < modulus < MAX_2048):\n        raise ValueError(\"require 0 <= a,b < modulus < 2^2048 and modulus > 1\")\n    quotient, remainder = divmod(a * b, modulus)\n    return (\n        ctx.encode(a),\n        ctx.encode(b),\n        ctx.encode(modulus),\n        ctx.encode(quotient),\n        ctx.encode(remainder),\n    )\n\n\ndef build_reduction_witness(\n    ctx: RNSContext, a: int, b: int, modulus: int\n) -> ReductionWitness:\n    \"\"\"Build and verify a reduction witness for a*b mod n.\"\"\"\n    a_ev, b_ev, modulus_ev, quotient_ev, remainder_ev = witness_modular_product(\n        ctx, a, b, modulus\n    )\n    if not ctx.verify_exact_modular_product(\n        a_ev, b_ev, modulus_ev, quotient_ev, remainder_ev\n    ):\n        raise AssertionError(\"exact RNS/CRT modular multiplication check failed\")\n    return ReductionWitness(quotient=quotient_ev, remainder=remainder_ev)\n\n\ndef verified_mul_mod(ctx: RNSContext, x: int, y: int, modulus: int) -> int:\n    \"\"\"Compute x*y mod n with a verified RNS reduction.\"\"\"\n    return build_reduction_witness(ctx, x, y, modulus).remainder.value\n\n\ndef generate_demo_rsa_key(\n    bits: int = RSA_BITS,\n    e: int = RSA_PUBLIC_EXPONENT,\n    seed: int = 20260305,\n) -> tuple[int, int, int]:\n    if bits != RSA_BITS:\n        raise ValueError(\"this helper is written around RSA-2048\")\n\n    rng = random.Random(seed)\n    half = bits // 2\n\n    while True:\n        p = random_probable_prime(half, rng)\n        if math.gcd(p - 1, e) == 1:\n            break\n\n    while True:\n        q = random_probable_prime(half, rng)\n        if q != p and math.gcd(q - 1, e) == 1:\n            break\n\n    modulus = p * q\n    if modulus.bit_length() != bits:\n        return generate_demo_rsa_key(bits=bits, e=e, seed=seed + 1)\n\n    phi = (p - 1) * (q - 1)\n    private_exponent = modinv(e, phi)\n    return modulus, e, private_exponent\n\n\ndef build_rsa2048_reductions(\n    ctx: RNSContext,\n    signature: int,\n    expected_message: int,\n    modulus: int,\n    e: int = RSA_PUBLIC_EXPONENT,\n) -> tuple[ReductionWitness, ...]:\n    \"\"\"Compute all reduction witnesses for the square-and-multiply chain s^e mod n.\n\n    For e = 65537 = 2^16 + 1, the binary representation has 17 bits,\n    yielding 16 squarings and 1 final multiplication = 17 reductions.\n    \"\"\"\n    bits = bin(e)[2:]\n    if bits[0] != \"1\":\n        raise ValueError(\"public exponent must be positive\")\n\n    acc = signature\n    reductions = []\n    for bit in bits[1:]:\n        squaring = build_reduction_witness(ctx, acc, acc, modulus)\n        reductions.append(squaring)\n        acc = squaring.remainder.value\n        if bit == \"1\":\n            multiply = build_reduction_witness(ctx, acc, signature, modulus)\n            reductions.append(multiply)\n            acc = multiply.remainder.value\n\n    if acc != expected_message:\n        raise AssertionError(\"witness path does not yield the expected message\")\n    if len(reductions) != RSA_REDUCTION_COUNT:\n        raise AssertionError(\n            f\"expected {RSA_REDUCTION_COUNT} reductions, got {len(reductions)}\"\n        )\n    return tuple(reductions)\n\n\ndef generate_rsa2048_witness(seed: int = 0) -> RSA2048ExponentiationWitness:\n    \"\"\"Generate a complete RSA-2048 verification witness from a deterministic seed.\"\"\"\n    ctx = RNSContext(CHANNEL_MODULI)\n    modulus, e, private_exponent = generate_demo_rsa_key(seed=20260305 + seed)\n    rng = random.Random(0x5253412048 + seed)\n    expected_message = rng.randrange(2, modulus - 1)\n    signature = pow(expected_message, private_exponent, modulus)\n    reductions = build_rsa2048_reductions(\n        ctx, signature, expected_message, modulus, e=e\n    )\n    return RSA2048ExponentiationWitness(\n        modulus=ctx.encode(modulus),\n        signature=ctx.encode(signature),\n        expected_message=ctx.encode(expected_message),\n        reductions=reductions,\n    )\n\n\n# PKCS#1 v1.5 SHA-256 DigestInfo prefix (DER-encoded AlgorithmIdentifier + NULL param).\n# RFC 8017, Section 9.2, Note 1.\nPKCS1_SHA256_DIGEST_INFO_PREFIX = bytes.fromhex(\n    \"3031300d060960864801650304020105000420\"\n)\n\n\ndef pkcs1_v1_5_encode_sha256(\n    message_hash: bytes, modulus_byte_length: int = 256\n) -> int:\n    \"\"\"Encode a SHA-256 hash as a PKCS#1 v1.5 padded integer.\n\n    Constructs: 0x00 || 0x01 || PS || 0x00 || DigestInfo || H\n    where PS is (modulus_byte_length - 3 - len(DigestInfo) - 32) bytes of 0xFF.\n\n    For RSA-2048 (modulus_byte_length=256), PS is 202 bytes of 0xFF.\n    \"\"\"\n    if len(message_hash) != 32:\n        raise ValueError(\"message_hash must be exactly 32 bytes (SHA-256)\")\n    digest_info = PKCS1_SHA256_DIGEST_INFO_PREFIX + message_hash\n    ps_len = modulus_byte_length - 3 - len(digest_info)\n    if ps_len < 8:\n        raise ValueError(\"modulus too short for PKCS#1 v1.5 SHA-256 encoding\")\n    encoded = b\"\\x00\\x01\" + b\"\\xff\" * ps_len + b\"\\x00\" + digest_info\n    return int.from_bytes(encoded, byteorder=\"big\")\n\n\ndef generate_rsa2048_sha256_witness(\n    message: bytes, seed: int = 0\n) -> RSA2048ExponentiationWitness:\n    \"\"\"Generate an RSA-2048 verification witness for a SHA-256 message digest.\n\n    Signs the PKCS#1 v1.5 encoding of SHA-256(message) under a deterministic\n    demo key, then builds the full exponentiation witness.\n    \"\"\"\n    ctx = RNSContext(CHANNEL_MODULI)\n    modulus, e, private_exponent = generate_demo_rsa_key(seed=20260305 + seed)\n\n    message_hash = hashlib.sha256(message).digest()\n    expected_message = pkcs1_v1_5_encode_sha256(message_hash)\n    signature = pow(expected_message, private_exponent, modulus)\n\n    reductions = build_rsa2048_reductions(\n        ctx, signature, expected_message, modulus, e=e\n    )\n    return RSA2048ExponentiationWitness(\n        modulus=ctx.encode(modulus),\n        signature=ctx.encode(signature),\n        expected_message=ctx.encode(expected_message),\n        reductions=reductions,\n    )\n\n\ndef is_valid_rsa2048_witness(\n    bundle: RSA2048ExponentiationWitness,\n    ctx: RNSContext | None = None,\n) -> bool:\n    \"\"\"Validate an RSA-2048 exponentiation witness.\n\n    Checks encoding consistency, range constraints, and all 17 modular\n    reduction steps of the square-and-multiply chain.\n    \"\"\"\n    ctx = ctx or RNSContext(CHANNEL_MODULI)\n\n    if not ctx.is_consistent_encoding(bundle.modulus):\n        return False\n    if not ctx.is_consistent_encoding(bundle.signature):\n        return False\n    if not ctx.is_consistent_encoding(bundle.expected_message):\n        return False\n    if bundle.modulus.value <= 1 or bundle.modulus.value % 2 == 0:\n        return False\n    if bundle.signature.value >= bundle.modulus.value:\n        return False\n    if bundle.expected_message.value >= bundle.modulus.value:\n        return False\n    if len(bundle.reductions) != RSA_REDUCTION_COUNT:\n        return False\n\n    acc = bundle.signature\n    for witness in bundle.reductions[:-1]:\n        if not ctx.verify_exact_modular_product(\n            acc, acc, bundle.modulus, witness.quotient, witness.remainder\n        ):\n            return False\n        acc = witness.remainder\n\n    last = bundle.reductions[-1]\n    if not ctx.verify_exact_modular_product(\n        acc, bundle.signature, bundle.modulus, last.quotient, last.remainder\n    ):\n        return False\n    return last.remainder.value == bundle.expected_message.value\n\n\ndef modular_exponentiation_with_proof(\n    ctx: RNSContext, signature: int, e: int, modulus: int\n) -> tuple[int, int]:\n    \"\"\"Compute s^e mod n via square-and-multiply with verified reductions.\n\n    Returns (result, reduction_count).\n    \"\"\"\n    bits = bin(e)[2:]\n    if bits[0] != \"1\":\n        raise ValueError(\"public exponent must be positive\")\n\n    acc = signature\n    reduction_count = 0\n    for bit in bits[1:]:\n        acc = verified_mul_mod(ctx, acc, acc, modulus)\n        reduction_count += 1\n        if bit == \"1\":\n            acc = verified_mul_mod(ctx, acc, signature, modulus)\n            reduction_count += 1\n\n    return acc, reduction_count\n\n\ndef demo_context_summary(ctx: RNSContext) -> None:\n    print(\"== RNS context for exact modular arithmetic ==\")\n    print(f\"Base B = 2^{LIMB_BITS}\")\n    print(\n        f\"Big-int format = {N_LIMBS} limbs of 96 bits (top limb constrained to {TOP_LIMB_BITS} bits)\"\n    )\n    print(f\"Number of CRT channels = {len(ctx.primes)}\")\n    print(\n        f\"Each channel prime fits in 4 x 96-bit words: {all(p < BASE**4 for p in ctx.primes)}\"\n    )\n    print(f\"Channel prime bit lengths = {[p.bit_length() for p in ctx.primes]}\")\n    print(f\"CRT modulus M bit length = {ctx.M.bit_length()}\")\n    print(f\"CRT modulus M > exactness bound: {ctx.M > CRT_EXACTNESS_BOUND}\")\n    print(\"First channel prime split into four 96-bit words:\")\n    print(f\"  {split_words_96(ctx.primes[0], 4)}\")\n    print()\n\n\ndef demo_crt_roundtrip(ctx: RNSContext, rng: random.Random) -> None:\n    print(\"== CRT roundtrip from limb-consistent residues ==\")\n    for idx in range(1, 4):\n        x = rng.getrandbits(RSA_BITS - 1)\n        ev = ctx.encode(x)\n        x_recovered = ctx.crt_reconstruct(ev.residues)\n        assert x_recovered == x\n        print(\n            f\"  sample {idx}: recovered exact {x.bit_length()}-bit value from residues\"\n        )\n    print()\n\n\ndef demo_single_exact_relation(\n    ctx: RNSContext, modulus: int, rng: random.Random\n) -> None:\n    print(\"== One exact modular product witness check ==\")\n    a = rng.randrange(0, modulus)\n    b = rng.randrange(0, modulus)\n    a_ev, b_ev, modulus_ev, quotient_ev, remainder_ev = witness_modular_product(\n        ctx, a, b, modulus\n    )\n\n    assert ctx.rns_congruences_hold(a_ev, b_ev, modulus_ev, quotient_ev, remainder_ev)\n    assert ctx.crt_exactness_holds(a_ev, b_ev, modulus_ev, quotient_ev, remainder_ev)\n    assert ctx.verify_exact_modular_product(\n        a_ev, b_ev, modulus_ev, quotient_ev, remainder_ev\n    )\n\n    print(f\"  modulus bits = {modulus.bit_length()}\")\n    print(f\"  a bits = {a.bit_length()}\")\n    print(f\"  b bits = {b.bit_length()}\")\n    print(f\"  q bits = {quotient_ev.value.bit_length()}\")\n    print(f\"  r bits = {remainder_ev.value.bit_length()}\")\n    print(\"  All channel congruences passed, 0 <= r < n verified,\")\n    print(\"  and CRT exactness implies a*b = q*n + r over Z.\")\n    print()\n\n\ndef demo_negative_tests(ctx: RNSContext, modulus: int, rng: random.Random) -> None:\n    print(\"== Negative tests (tampering is detected) ==\")\n    a = rng.randrange(0, modulus)\n    b = rng.randrange(0, modulus)\n    a_ev, b_ev, modulus_ev, quotient_ev, remainder_ev = witness_modular_product(\n        ctx, a, b, modulus\n    )\n\n    bad_residues = list(remainder_ev.residues)\n    bad_residues[0] = (bad_residues[0] + 1) % ctx.primes[0]\n    bad_remainder = RNSInteger(\n        remainder_ev.value, remainder_ev.limbs, tuple(bad_residues)\n    )\n    assert not ctx.rns_congruences_hold(\n        a_ev, b_ev, modulus_ev, quotient_ev, bad_remainder\n    )\n\n    bad_limbs = list(quotient_ev.limbs)\n    bad_limbs[1] ^= 1\n    bad_quotient = RNSInteger(quotient_ev.value, tuple(bad_limbs), quotient_ev.residues)\n    assert not ctx.is_consistent_encoding(bad_quotient)\n\n    print(\"  Tampered residue detected: PASS\")\n    print(\"  Tampered limb detected: PASS\")\n    print()\n\n\ndef demo_full_rsa_verification(ctx: RNSContext) -> None:\n    print(\"== Full RSA-2048 verification via square-and-multiply ==\")\n    modulus, e, private_exponent = generate_demo_rsa_key()\n    rng = random.Random(999)\n    message = rng.randrange(2, modulus - 1)\n    signature = pow(message, private_exponent, modulus)\n\n    verified_message, reduction_count = modular_exponentiation_with_proof(\n        ctx, signature, e, modulus\n    )\n\n    assert verified_message == message\n    assert verified_message == pow(signature, e, modulus)\n\n    print(f\"  RSA modulus bits = {modulus.bit_length()}\")\n    print(f\"  public exponent e = {e}\")\n    print(f\"  signature verification succeeded = {verified_message == message}\")\n    print(f\"  verified modular reductions = {reduction_count}\")\n    print(\n        \"  For e = 65537 = 2^16 + 1, the chain uses 16 squarings + 1 multiply = 17 reductions.\"\n    )\n    print()\n\n\ndef run_self_tests() -> None:\n    ctx = RNSContext(CHANNEL_MODULI)\n    rng = random.Random(123456789)\n\n    demo_context_summary(ctx)\n    demo_crt_roundtrip(ctx, rng)\n    modulus, _, _ = generate_demo_rsa_key()\n    demo_single_exact_relation(ctx, modulus, rng)\n    demo_negative_tests(ctx, modulus, rng)\n    demo_full_rsa_verification(ctx)\n\n    bundle = generate_rsa2048_witness()\n    assert is_valid_rsa2048_witness(bundle, ctx)\n    print(\"All demonstrations and assertions passed.\")\n\n\nif __name__ == \"__main__\":\n    run_self_tests()\n"
  },
  {
    "path": "hydra/garaga/signature.py",
    "content": "\"\"\"\nVarious tools for bls signatures or other signature schemes.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport hashlib\nfrom typing import Protocol, TypeVar\n\nfrom garaga.algebra import Polynomial, PyFelt, RationalFunction\nfrom garaga.curves import CURVES, CurveID, get_base_field\nfrom garaga.points import G1Point\n\nT = TypeVar(\"T\", bound=\"HashProtocol\")\n\n\nclass HashProtocol(Protocol):\n    # Attributes\n    block_size: int  #\n    digest_size: int  # in bytes\n    name: str\n\n    # Methods\n    def update(self, data: bytes) -> None: ...\n    def digest(self) -> bytes: ...\n    def hexdigest(self) -> str: ...\n    def copy(self: T) -> T: ...\n\n\nimport math\n\nG1_DOMAIN = DST = b\"BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_\"\n\n\nMAX_DST_LENGTH = 255\nLONG_DST_PREFIX = b\"H2C-OVERSIZE-DST-\"\n\n\nclass ExpanderXmd:\n    def __init__(\n        self,\n        hash_name: str,\n        dst: bytes = DST,\n        curve_id: CurveID = CurveID.BLS12_381,\n    ):\n        self.hash_name = hash_name\n        self.hasher = hashlib.new(hash_name)\n        self.dst = dst\n        self.curve_id = curve_id\n        self.block_size = get_len_per_elem(get_base_field(curve_id).p)\n\n    def construct_dst_prime(self) -> bytes:\n        if len(self.dst) > MAX_DST_LENGTH:\n            hasher_copy = self.hasher.copy()\n            hasher_copy.update(LONG_DST_PREFIX)\n            hasher_copy.update(self.dst)\n            dst_prime = hasher_copy.digest()\n        else:\n            # print(f\"dst len is < {MAX_DST_LENGTH}\")\n            dst_prime = self.dst\n\n        dst_prime += bytes([len(dst_prime)])\n        return dst_prime\n\n    def expand_message_xmd(self, msg: bytes, n: int) -> bytes:\n        b_len = self.hasher.digest_size\n        ell = (n + (b_len - 1)) // b_len\n        assert (\n            ell <= 255\n        ), \"The ratio of desired output to the output size of hash function is too large!\"\n\n        dst_prime = self.construct_dst_prime()\n        # print(f\"dst prime {dst_prime}\")\n        # print(f\"block size {self.block_size}\")\n        z_pad = bytes([0] * self.block_size)\n        # print(f\"z pad {z_pad.hex()}\")\n        # print(f\"len(z_pad) (bytes) {len(z_pad)}\")\n        assert n < (1 << 16), \"Length should be smaller than 2^16\"\n        lib_str = n.to_bytes(2, \"big\")\n\n        self.hasher.update(z_pad)\n        self.hasher.update(msg)\n        # Print separately lib_str+bytes([0])+dst_prime, in one bytes object\n        lib_str_dst_prime = lib_str + bytes([0]) + dst_prime\n        # print(\n        #     f\"lib_str_dst_prime {lib_str_dst_prime}, len : {len(lib_str_dst_prime)}\\n {bytes_to_u32_array(lib_str_dst_prime, 'lib_str_dst_prime')}\"\n        # )\n        self.hasher.update(lib_str_dst_prime)\n        # self.hasher.update(bytes([0]))\n        # self.hasher.update(dst_prime)\n        b0 = self.hasher.digest()\n        # print(f\"b0 {b0.hex()}\")\n        hasher = hashlib.new(self.hash_name)\n        hasher.update(b0)\n        one_dst_prime = bytes([1]) + dst_prime\n        hasher.update(one_dst_prime)\n        bi = hasher.digest()\n\n        uniform_bytes = bi\n\n        for i in range(2, ell + 1):\n            # print(f\"loop: step {i}/{ell}\")\n            # print(f\"zip {list(zip(b0, bi))}\")\n\n            b0_xor_bi = bytes(x ^ y for x, y in zip(b0, bi))\n            # print(f\"b0_xor_bi {b0_xor_bi.hex()}\")\n            # print(\n            #     f\"direct xor : {hex(int.from_bytes(b0, 'big') ^ int.from_bytes(bi, 'big'))}\"\n            # )\n            hasher = hashlib.new(self.hash_name)\n            hasher.update(b0_xor_bi)\n            bytes_i_dst_prime = bytes([i]) + dst_prime\n            # print(\n            #     f\"bytes_i_dst_prime {bytes_to_u32_array(bytes_i_dst_prime, f'bytes_{i}_dst_prime')}\"\n            # )\n            hasher.update(bytes_i_dst_prime)\n            bi = hasher.digest()\n            uniform_bytes += bi\n\n        # print(f\"len(uniform_bytes) {len(uniform_bytes)}\")\n        # print(f\"len(uniform_bytes[:n]) {len(uniform_bytes[:n])}\")\n        return uniform_bytes[:n]\n\n\ndef get_len_per_elem(p: int, sec_param: int = 128) -> int:\n    \"\"\"\n    This function computes the length in bytes that a hash function should output\n    for hashing an element of type `Field`.\n\n    :param p: The prime modulus of the base field.\n    :param sec_param: The security parameter.\n    :return: The length in bytes.\n    \"\"\"\n    # ceil(log2(p))\n    base_field_size_in_bits = p.bit_length()\n    # ceil(log2(p)) + security_parameter\n    base_field_size_with_security_padding_in_bits = base_field_size_in_bits + sec_param\n    # ceil((ceil(log2(p)) + security_parameter) / 8)\n    bytes_per_base_field_elem = math.ceil(\n        base_field_size_with_security_padding_in_bits / 8\n    )\n    return bytes_per_base_field_elem\n\n\ndef hash_to_field(\n    message: bytes, count: int, curve_id: int, hash_name: str\n) -> list[int]:\n    field = get_base_field(curve_id)\n\n    expander = ExpanderXmd(hash_name, dst=DST, curve_id=curve_id)\n\n    len_per_elem = get_len_per_elem(field.p)\n    len_in_bytes = count * len_per_elem\n    # print(f\"len per elem {len_per_elem}\")\n    # print(f\"len in bytes: {len_in_bytes}\")\n    # print(f\"message {message.hex()}\")\n    uniform_bytes = expander.expand_message_xmd(message, len_in_bytes)\n    # print(f\"uniform bytes {uniform_bytes.hex()}\")\n    output = []\n\n    for i in range(0, len_in_bytes, len_per_elem):\n        element = int.from_bytes(uniform_bytes[i : i + len_per_elem], \"big\")\n        # print(f\"element {element.bit_length()}\")\n        output.append(element)\n\n    return [field(x) for x in output]\n\n\ndef hash_to_curve(\n    message: bytes, curve_id: CurveID, hash_name: str = \"sha256\"\n) -> G1Point:\n    felt0, felt1 = hash_to_field(message, 2, curve_id, hash_name)\n\n    pt0 = map_to_curve(felt0, curve_id)\n    # print(f\"pt0 {pt0}\\n\\n\")\n    pt1 = map_to_curve(felt1, curve_id)\n    # print(f\"pt1 {pt1}\")\n    assert pt0.iso_point == True, f\"Point {pt0} is not an iso point\"\n    assert pt1.iso_point == True, f\"Point {pt1} is not an iso point\"\n\n    if curve_id == CurveID.BLS12_381:\n        x = CURVES[curve_id.value].x\n        n = CURVES[curve_id.value].n\n        cofactor = (1 - (x % n)) % n\n    else:\n        cofactor = CURVES[curve_id.value].h\n\n    # print(f\"cofactor {cofactor}\")\n    sum = pt0.add(pt1)\n    assert sum.iso_point == True, f\"Point {sum} is not an iso point\"\n\n    return apply_isogeny(sum).scalar_mul(cofactor)\n\n\ndef map_to_curve(field_element: PyFelt, curve_id: CurveID) -> G1Point:\n    field = get_base_field(curve_id)\n    a = field(CURVES[curve_id.value].swu_params.A)\n    b = field(CURVES[curve_id.value].swu_params.B)\n    z = field(CURVES[curve_id.value].swu_params.Z)\n\n    u = field_element\n    zeta_u2 = z * u**2\n    ta = zeta_u2**2 + zeta_u2\n    num_x1 = b * (ta + field.one())\n\n    if ta.value == 0:\n        div = a * z\n    else:\n        div = a * -ta\n\n    num2_x1 = num_x1**2\n    div2 = div**2\n    div3 = div2 * div\n    assert div3.value != 0\n\n    num_gx1 = (num2_x1 + a * div2) * num_x1 + b * div3\n\n    num_x2 = zeta_u2 * num_x1\n\n    gx1 = num_gx1 / div3\n    gx1_square = gx1.is_quad_residue()\n    if gx1_square:\n        y1 = gx1.sqrt(min_root=False)\n        assert y1 * y1 == gx1\n    else:\n        y1 = (z * gx1).sqrt(min_root=False)\n        assert y1 * y1 == z * gx1\n\n    y2 = zeta_u2 * u * y1\n    num_x = num_x1 if gx1_square else num_x2\n    y = y1 if gx1_square else y2\n    x_affine = num_x / div\n    y_affine = -y if y.value % 2 != u.value % 2 else y\n\n    point_on_curve = G1Point(x_affine.value, y_affine.value, curve_id, iso_point=True)\n    return point_on_curve\n\n\n# https://github.com/arkworks-rs/algebra/blob/master/curves/bls12_381/src/curves/g1_swu_iso.rs\ndef get_isogeny_to_g1_map(\n    curve_id: CurveID,\n) -> tuple[RationalFunction, RationalFunction]:\n    field = get_base_field(curve_id)\n    match curve_id.value:\n        case CurveID.BLS12_381.value:\n            return RationalFunction(\n                numerator=Polynomial(\n                    [\n                        field(x)\n                        for x in [\n                            0x11A05F2B1E833340B809101DD99815856B303E88A2D7005FF2627B56CDB4E2C85610C2D5F2E62D6EAEAC1662734649B7,\n                            0x17294ED3E943AB2F0588BAB22147A81C7C17E75B2F6A8417F565E33C70D1E86B4838F2A6F318C356E834EEF1B3CB83BB,\n                            0xD54005DB97678EC1D1048C5D10A9A1BCE032473295983E56878E501EC68E25C958C3E3D2A09729FE0179F9DAC9EDCB0,\n                            0x1778E7166FCC6DB74E0609D307E55412D7F5E4656A8DBF25F1B33289F1B330835336E25CE3107193C5B388641D9B6861,\n                            0xE99726A3199F4436642B4B3E4118E5499DB995A1257FB3F086EEB65982FAC18985A286F301E77C451154CE9AC8895D9,\n                            0x1630C3250D7313FF01D1201BF7A74AB5DB3CB17DD952799B9ED3AB9097E68F90A0870D2DCAE73D19CD13C1C66F652983,\n                            0xD6ED6553FE44D296A3726C38AE652BFB11586264F0F8CE19008E218F9C86B2A8DA25128C1052ECADDD7F225A139ED84,\n                            0x17B81E7701ABDBE2E8743884D1117E53356DE5AB275B4DB1A682C62EF0F2753339B7C8F8C8F475AF9CCB5618E3F0C88E,\n                            0x80D3CF1F9A78FC47B90B33563BE990DC43B756CE79F5574A2C596C928C5D1DE4FA295F296B74E956D71986A8497E317,\n                            0x169B1F8E1BCFA7C42E0C37515D138F22DD2ECB803A0C5C99676314BAF4BB1B7FA3190B2EDC0327797F241067BE390C9E,\n                            0x10321DA079CE07E272D8EC09D2565B0DFA7DCCDDE6787F96D50AF36003B14866F69B771F8C285DECCA67DF3F1605FB7B,\n                            0x6E08C248E260E70BD1E962381EDEE3D31D79D7E22C837BC23C0BF1BC24C6B68C24B1B80B64D391FA9C8BA2E8BA2D229,\n                        ]\n                    ]\n                ),\n                denominator=Polynomial(\n                    [\n                        field(x)\n                        for x in [\n                            0x8CA8D548CFF19AE18B2E62F4BD3FA6F01D5EF4BA35B48BA9C9588617FC8AC62B558D681BE343DF8993CF9FA40D21B1C,\n                            0x12561A5DEB559C4348B4711298E536367041E8CA0CF0800C0126C2588C48BF5713DAA8846CB026E9E5C8276EC82B3BFF,\n                            0xB2962FE57A3225E8137E629BFF2991F6F89416F5A718CD1FCA64E00B11ACEACD6A3D0967C94FEDCFCC239BA5CB83E19,\n                            0x3425581A58AE2FEC83AAFEF7C40EB545B08243F16B1655154CCA8ABC28D6FD04976D5243EECF5C4130DE8938DC62CD8,\n                            0x13A8E162022914A80A6F1D5F43E7A07DFFDFC759A12062BB8D6B44E833B306DA9BD29BA81F35781D539D395B3532A21E,\n                            0xE7355F8E4E667B955390F7F0506C6E9395735E9CE9CAD4D0A43BCEF24B8982F7400D24BC4228F11C02DF9A29F6304A5,\n                            0x772CAACF16936190F3E0C63E0596721570F5799AF53A1894E2E073062AEDE9CEA73B3538F0DE06CEC2574496EE84A3A,\n                            0x14A7AC2A9D64A8B230B3F5B074CF01996E7F63C21BCA68A81996E1CDF9822C580FA5B9489D11E2D311F7D99BBDCC5A5E,\n                            0xA10ECF6ADA54F825E920B3DAFC7A3CCE07F8D1D7161366B74100DA67F39883503826692ABBA43704776EC3A79A1D641,\n                            0x95FC13AB9E92AD4476D6E3EB3A56680F682B4EE96F7D03776DF533978F31C1593174E4B4B7865002D6384D168ECDD0A,\n                            0x1,\n                        ]\n                    ]\n                ),\n            ), RationalFunction(\n                numerator=Polynomial(\n                    [\n                        field(x)\n                        for x in [\n                            1393399195776646641963150658816615410692049723305861307490980409834842911816308830479576739332720113414154429643571,\n                            2968610969752762946134106091152102846225411740689724909058016729455736597929366401532929068084731548131227395540630,\n                            122933100683284845219599644396874530871261396084070222155796123161881094323788483360414289333111221370374027338230,\n                            303251954782077855462083823228569901064301365507057490567314302006681283228886645653148231378803311079384246777035,\n                            1353972356724735644398279028378555627591260676383150667237975415318226973994509601413730187583692624416197017403099,\n                            3443977503653895028417260979421240655844034880950251104724609885224259484262346958661845148165419691583810082940400,\n                            718493410301850496156792713845282235942975872282052335612908458061560958159410402177452633054233549648465863759602,\n                            1466864076415884313141727877156167508644960317046160398342634861648153052436926062434809922037623519108138661903145,\n                            1536886493137106337339531461344158973554574987550750910027365237255347020572858445054025958480906372033954157667719,\n                            2171468288973248519912068884667133903101171670397991979582205855298465414047741472281361964966463442016062407908400,\n                            3915937073730221072189646057898966011292434045388986394373682715266664498392389619761133407846638689998746172899634,\n                            3802409194827407598156407709510350851173404795262202653149767739163117554648574333789388883640862266596657730112910,\n                            1707589313757812493102695021134258021969283151093981498394095062397393499601961942449581422761005023512037430861560,\n                            349697005987545415860583335313370109325490073856352967581197273584891698473628451945217286148025358795756956811571,\n                            885704436476567581377743161796735879083481447641210566405057346859953524538988296201011389016649354976986251207243,\n                            3370924952219000111210625390420697640496067348723987858345031683392215988129398381698161406651860675722373763741188,\n                        ]\n                    ]\n                ),\n                denominator=Polynomial(\n                    [\n                        field(x)\n                        for x in [\n                            3396434800020507717552209507749485772788165484415495716688989613875369612529138640646200921379825018840894888371137,\n                            3907278185868397906991868466757978732688957419873771881240086730384895060595583602347317992689443299391009456758845,\n                            854914566454823955479427412036002165304466268547334760894270240966182605542146252771872707010378658178126128834546,\n                            3496628876382137961119423566187258795236027183112131017519536056628828830323846696121917502443333849318934945158166,\n                            1828256966233331991927609917644344011503610008134915752990581590799656305331275863706710232159635159092657073225757,\n                            1362317127649143894542621413133849052553333099883364300946623208643344298804722863920546222860227051989127113848748,\n                            3443845896188810583748698342858554856823966611538932245284665132724280883115455093457486044009395063504744802318172,\n                            3484671274283470572728732863557945897902920439975203610275006103818288159899345245633896492713412187296754791689945,\n                            3755735109429418587065437067067640634211015783636675372165599470771975919172394156249639331555277748466603540045130,\n                            3459661102222301807083870307127272890283709299202626530836335779816726101522661683404130556379097384249447658110805,\n                            742483168411032072323733249644347333168432665415341249073150659015707795549260947228694495111018381111866512337576,\n                            1662231279858095762833829698537304807741442669992646287950513237989158777254081548205552083108208170765474149568658,\n                            1668238650112823419388205992952852912407572045257706138925379268508860023191233729074751042562151098884528280913356,\n                            369162719928976119195087327055926326601627748362769544198813069133429557026740823593067700396825489145575282378487,\n                            2164195715141237148945939585099633032390257748382945597506236650132835917087090097395995817229686247227784224263055,\n                            1,\n                        ]\n                    ]\n                ),\n            )\n\n        case _:\n            raise NotImplementedError(\n                f\"Isogeny for curve {curve_id} is not implemented\"\n            )\n\n\n# https://github.com/arkworks-rs/algebra/blob/master/curves/bls12_381/src/curves/g2_swu_iso.rs\ndef get_isogeny_to_g2_map(\n    curve_id: CurveID,\n) -> tuple[RationalFunction, RationalFunction]:\n    field = get_base_field(curve_id)\n    match curve_id.value:\n        case CurveID.BLS12_381.value:\n            return RationalFunction(\n                numerator=Polynomial(\n                    [\n                        field(x)\n                        for x in [\n                            889424345604814976315064405719089812568196182208668418962679585805340366775741747653930584250892369786198727235542,\n                            889424345604814976315064405719089812568196182208668418962679585805340366775741747653930584250892369786198727235542,\n                            0,\n                            2668273036814444928945193217157269437704588546626005256888038757416021100327225242961791752752677109358596181706522,\n                            2668273036814444928945193217157269437704588546626005256888038757416021100327225242961791752752677109358596181706526,\n                            1334136518407222464472596608578634718852294273313002628444019378708010550163612621480895876376338554679298090853261,\n                            3557697382419259905260257622876359250272784728834673675850718343221361467102966990615722337003569479144794908942033,\n                            0,\n                        ]\n                    ]\n                ),\n                denominator=Polynomial(\n                    [\n                        field(x)\n                        for x in [\n                            0,\n                            4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559715,\n                            12,\n                            4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559775,\n                            1,\n                            0,\n                        ]\n                    ]\n                ),\n            ), RationalFunction(\n                numerator=Polynomial(\n                    [\n                        field(x)\n                        for x in [\n                            3261222600550988246488569487636662646083386001431784202863158481286248011511053074731078808919938689216061999863558,\n                            3261222600550988246488569487636662646083386001431784202863158481286248011511053074731078808919938689216061999863558,\n                            0,\n                            889424345604814976315064405719089812568196182208668418962679585805340366775741747653930584250892369786198727235518,\n                            2668273036814444928945193217157269437704588546626005256888038757416021100327225242961791752752677109358596181706524,\n                            1334136518407222464472596608578634718852294273313002628444019378708010550163612621480895876376338554679298090853263,\n                            2816510427748580758331037284777117739799287910327449993381818688383577828123182200904113516794492504322962636245776,\n                            0,\n                        ]\n                    ]\n                ),\n                denominator=Polynomial(\n                    [\n                        field(x)\n                        for x in [\n                            4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559355,\n                            4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559355,\n                            0,\n                            4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559571,\n                            18,\n                            4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559769,\n                            1,\n                            0,\n                        ]\n                    ]\n                ),\n            )\n        case _:\n            raise NotImplementedError(\n                f\"Isogeny for curve {curve_id} is not implemented\"\n            )\n\n\ndef apply_isogeny(pt: G1Point) -> G1Point:\n    assert pt.iso_point == True, f\"Point {pt} is not an iso point\"\n    field = get_base_field(pt.curve_id)\n    x_rational, y_rational = get_isogeny_to_g1_map(pt.curve_id)\n    x_affine = x_rational.evaluate(field(pt.x))\n    y_affine = y_rational.evaluate(field(pt.x)) * field(pt.y)\n\n    return G1Point(x_affine.value, y_affine.value, pt.curve_id, iso_point=False)\n\n\nif __name__ == \"__main__\":\n    from garaga.hints.io import int_to_u384\n\n    field = get_base_field(CurveID.BLS12_381)\n    message = b\"Hello, World!\"\n    sha_message = hashlib.sha256(message).digest()\n    # print(f\"sha_message {sha_message.hex()}\")\n    message = sha_message\n\n    def test_hash_to_field(message: bytes):\n        res = hash_to_field(\n            message=message,\n            count=2,\n            curve_id=CurveID.BLS12_381,\n            hash_name=\"sha256\",\n        )\n        print(f\"res {[int_to_u384(x) for x in res]}\")\n        expected = [\n            2162792105491427725912070356725320455528056118179305300106498860235975843802512462082887053454085287130500476441750,\n            40368511435268498384669958495624628965655407346873103876018487738713032717501957266398124814691972213333393099218,\n        ]\n        # assert res == expected, f\"Expected {expected}, got {res}\"\n\n    def test_map_to_curve():\n        u = field(42)\n        res = map_to_curve(field_element=u, curve_id=CurveID.BLS12_381)\n        print(f\"res {int_to_u384(res.x)} {int_to_u384(res.y)}\")\n\n    def test_isogeny():\n        pt = G1Point(\n            x=215777581081472667122506794895079133292851844364726904952688478479828790890150439604857229658591641382171852677524,\n            y=1379746801043875097750009912574703067223644203712602673826050484796337984730238282465201134827010880864260517139932,\n            curve_id=CurveID.BLS12_381,\n            iso_point=True,\n        )\n        expected = G1Point(\n            x=2417697449117523569926871462160078790628278460141221111171958173864939056722835940739506331591809461977867457921129,\n            y=2054645981348311902541581243120273427071170397909163934255295587636136055038499048700096920528935972380584458489355,\n            curve_id=CurveID.BLS12_381,\n            iso_point=False,\n        )\n        res = apply_isogeny(pt=pt)\n        assert res == expected, f\"Expected {expected}, got {res}\"\n\n    # test_isogeny()\n\n    def test_hash_to_curve(message: bytes):\n        expected = G1Point(\n            x=1427986885250946460144481685485785737438296207533779678983559530346613679756132883977754715392336662418069603153756,\n            y=2665645453955482249178808933038784408956625041285885055194161860684118145927032784752731507519078519455031562783679,\n            curve_id=CurveID.BLS12_381,\n        )\n        res = hash_to_curve(\n            message=message, curve_id=CurveID.BLS12_381, hash_name=\"sha256\"\n        )\n\n        # assert res == expected, f\"Expected {expected}, got {res}\"\n        print(f\"res {int_to_u384(res.x)} {int_to_u384(res.y)}\")\n\n    # test_hash_to_field(message=message)\n\n    test_map_to_curve()\n    test_hash_to_curve(message=message)\n"
  },
  {
    "path": "hydra/garaga/starknet/cli/declare.py",
    "content": "import asyncio\nimport os\nfrom pathlib import Path\nfrom typing import Annotated\n\nimport rich\nimport typer\nfrom dotenv import load_dotenv\nfrom starknet_py.net.account.account import Account\nfrom starknet_py.net.full_node_client import FullNodeClient\nfrom starknet_py.net.models import StarknetChainId\nfrom starknet_py.net.signer.stark_curve_signer import KeyPair\n\nfrom garaga.hints.io import to_int\nfrom garaga.starknet.cli.smart_contract_project import SmartContractProject\nfrom garaga.starknet.cli.utils import Network, voyager_link_class\n\napp = typer.Typer()\n\n\ndef declare(\n    project_path: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the Cairo project holding the Scarb.toml file to declare\",\n            file_okay=False,\n            dir_okay=True,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ] = Path.cwd(),\n    env_file: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the environment file\",\n            file_okay=True,\n            dir_okay=False,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ] = str(Path.cwd() / \".secrets\"),\n    network: Annotated[\n        Network,\n        typer.Option(\n            help=\"Starknet network\",\n            case_sensitive=False,\n        ),\n    ] = Network.SEPOLIA.value,\n):\n    \"\"\"Declare your smart contract to Starknet. Obtain its class hash and a explorer link.\"\"\"\n\n    if Path(env_file).exists():\n        load_dotenv(env_file)\n    else:\n        raise FileNotFoundError(f\"Environment file {env_file} does not exist\")\n\n    rpc_url = os.getenv(f\"{network.name.upper()}_RPC_URL\")\n    account_address = os.getenv(f\"{network.name.upper()}_ACCOUNT_ADDRESS\")\n    account_private_key = os.getenv(f\"{network.name.upper()}_ACCOUNT_PRIVATE_KEY\")\n\n    if network == Network.MAINNET:\n        chain = StarknetChainId.MAINNET\n    else:\n        chain = StarknetChainId.SEPOLIA\n\n    client = FullNodeClient(node_url=rpc_url)\n    account = Account(\n        address=account_address,\n        client=client,\n        key_pair=KeyPair.from_private_key(to_int(account_private_key)),\n        chain=chain,\n    )\n\n    rich.print(\n        f\"Declaring project [bold cyan] {project_path}[/bold cyan] on [bold]{network.name}[/bold]\"\n    )\n    project = SmartContractProject(project_path)\n\n    try:\n        class_hash, _ = asyncio.run(project.declare_class_hash(account=account))\n        rich.print(\n            f\"[bold green]Class hash: {hex(class_hash)} [/bold green] is available on [bold]{network.name}[/bold]\"\n        )\n        rich.print(\n            f\"[bold green]Check it out on[/bold green] {voyager_link_class(network, class_hash)}\"\n        )\n    except Exception as e:\n        rich.print(f\"[bold red]Error during declaration: {e}[/bold red]\")\n"
  },
  {
    "path": "hydra/garaga/starknet/cli/deploy.py",
    "content": "import asyncio\nfrom pathlib import Path\nfrom typing import Annotated, Optional\n\nimport rich\nimport typer\nfrom dotenv import load_dotenv\nfrom starknet_py.contract import Contract\nfrom starknet_py.hash.address import compute_address\nfrom starknet_py.hash.utils import pedersen_hash\n\nfrom garaga.hints.io import to_hex_str, to_int\nfrom garaga.starknet.cli.utils import (\n    Network,\n    get_contract_if_exists,\n    get_contract_if_exists_async,\n    load_account,\n)\n\n# Mainnet/Sepolia deployer address\nDEPLOYER_ADDRESS = 0x41A78E741E5AF2FEC34B695679BC6891742439F7AFB8484ECD7766661AD02BF\n\napp = typer.Typer()\n\n\nasync def perform_contract_deployment(\n    account, class_hash: str, salt: int, precomputed_address: int\n) -> Optional[Contract]:\n    \"\"\"Attempt to deploy a contract with the given parameters.\"\"\"\n    try:\n        deploy_result = await Contract.deploy_contract_v3(\n            account=account,\n            class_hash=class_hash,\n            deployer_address=DEPLOYER_ADDRESS,\n            auto_estimate=True,\n            salt=salt,\n            cairo_version=1,\n        )\n        deploy_result = await deploy_result.wait_for_acceptance()\n        return deploy_result.deployed_contract\n    except Exception as e:\n        print(\"Waiting for transaction to be accepted...\")\n        await asyncio.sleep(5.5)\n        contract = await get_contract_if_exists_async(account, precomputed_address)\n        if contract:\n            return contract\n        else:\n            rich.print(f\"[bold red]Deployment error: {e}[/bold red]\")\n        return None\n\n\ndef print_contract_info(contract: Contract, network: Network):\n    \"\"\"Print information about the deployed contract.\"\"\"\n    sepolia_prefix = \"\" if network == Network.MAINNET else \"sepolia.\"\n    rich.print(f\"Contract address on {network.name}: {hex(contract.address)}\")\n    rich.print(\n        f\"Voyager link: https://{sepolia_prefix}voyager.online/contract/{hex(contract.address)}\"\n    )\n    rich.print(f\"Available endpoints: {list(contract.functions.keys())}\")\n\n\ndef deploy(\n    class_hash: Annotated[\n        str,\n        typer.Option(\n            help=\"Contract class hash to deploy. Can be decimal or hex string\"\n        ),\n    ],\n    env_file: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the environment file containing rpc, address, private_key\",\n            file_okay=True,\n            dir_okay=False,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ] = str(Path.cwd() / \".secrets\"),\n    network: Annotated[\n        Network,\n        typer.Option(\n            help=\"Starknet network\",\n            case_sensitive=False,\n        ),\n    ] = Network.SEPOLIA.value,\n    salt: Annotated[\n        int,\n        typer.Option(\n            help=\"Salt value for contract address calculation (default: 1)\",\n        ),\n    ] = 1,\n):\n    \"\"\"Deploy an instance of a smart contract class hash to Starknet. Obtain its address, the available endpoints and a explorer link.\"\"\"\n\n    # Validate and load environment\n    if not Path(env_file).exists():\n        raise FileNotFoundError(f\"Environment file {env_file} does not exist\")\n    load_dotenv(env_file)\n    # Prepare account and compute address\n    account = load_account(network)\n    class_hash = to_hex_str(class_hash)\n\n    precomputed_address = compute_address(\n        class_hash=to_int(class_hash),\n        constructor_calldata=[],\n        salt=pedersen_hash(to_int(account.address), salt),\n        deployer_address=DEPLOYER_ADDRESS,\n    )\n\n    # Check if contract already exists\n    contract = get_contract_if_exists(account, precomputed_address)\n    if contract:\n        rich.print(\n            f\"[bold green]Contract already deployed at {hex(contract.address)}[/bold green]\"\n        )\n        print_contract_info(contract, network)\n        return\n\n    # Perform deployment\n    rich.print(f\"Deploying contract with class hash {class_hash}...\")\n    contract = asyncio.run(\n        perform_contract_deployment(account, class_hash, salt, precomputed_address)\n    )\n\n    # Handle deployment result\n    if not contract:\n        # Check if the contract exists despite the error (transaction might have completed)\n        contract = get_contract_if_exists(account, precomputed_address)\n        if contract:\n            rich.print(\n                f\"[bold green]Contract found at {hex(contract.address)} despite deployment errors.[/bold green]\"\n            )\n        else:\n            rich.print(\n                f\"[bold yellow]Contract not deployed. Try running the command again - it might be a temporary network issue.[/bold yellow]\"\n            )\n            return\n    else:\n        rich.print(\n            f\"[bold green]Contract successfully deployed at {hex(contract.address)}[/bold green]\"\n        )\n\n    # Print contract information\n    print_contract_info(contract, network)\n"
  },
  {
    "path": "hydra/garaga/starknet/cli/gen.py",
    "content": "import subprocess\nfrom pathlib import Path\nfrom typing import Annotated\n\nimport typer\nfrom rich import print\nfrom rich.console import Console\nfrom rich.panel import Panel\nfrom rich.progress import Progress, SpinnerColumn, TextColumn\nfrom rich.tree import Tree\n\nfrom garaga.curves import ProofSystem\nfrom garaga.starknet.cli.utils import complete_proof_system, get_package_version\nfrom garaga.starknet.constants import BB_VERSION, BBUP_VERSION, NARGO_VERSION\nfrom garaga.starknet.groth16_contract_generator.generator import (\n    ECIP_OPS_CLASS_HASH,\n    gen_groth16_verifier,\n)\nfrom garaga.starknet.honk_contract_generator.generator_honk import gen_honk_verifier\n\n\ndef check_nargo_version(version: str) -> tuple[bool, str]:\n    return check_version(\"nargo\", version)\n\n\ndef check_bb_version(version: str) -> tuple[bool, str]:\n    return check_version(\"bb\", version)\n\n\ndef check_version(cmd: str, version: str) -> tuple[bool, str]:\n    try:\n        result = subprocess.run([cmd, \"--version\"], capture_output=True, text=True)\n        result_version = result.stdout.strip()\n        if result.returncode != 0:\n            stderr_msg = result.stderr.strip()\n            error_detail = stderr_msg or result_version or \"unknown error\"\n            return (\n                False,\n                f\"'{cmd} --version' failed (exit code {result.returncode}): {error_detail}\",\n            )\n        if not result_version:\n            return (False, f\"'{cmd} --version' returned empty output\")\n        return (version in result_version, result_version)\n    except (FileNotFoundError, OSError):\n        # Command not found or other OS error\n        return (False, f\"Command '{cmd}' not found or not executable\")\n\n\ndef _get_bb_oracle_hash_options() -> list[str]:\n    \"\"\"Get the available oracle hash options from bb command\"\"\"\n    try:\n        result_hash = subprocess.run(\n            [\"bb\", \"prove\", \"-h\"], capture_output=True, text=True\n        )\n        if result_hash.returncode != 0:\n            return []\n\n        # Extract oracle hash options\n        oracle_hash_options = []\n        lines = result_hash.stdout.splitlines()\n        for i, line in enumerate(lines):\n            if \"--oracle_hash\" in line:\n                # Look in the next few lines for the options\n                for j in range(i + 1, min(i + 100, len(lines))):\n                    if \"Options: {\" in lines[j]:\n                        options_str = lines[j].split(\"{\")[1].split(\"}\")[0]\n                        oracle_hash_options = [\n                            opt.strip() for opt in options_str.split(\",\")\n                        ]\n                        break\n                break\n\n        return oracle_hash_options\n    except (FileNotFoundError, OSError):\n        # Command not found or other OS error\n        return []\n\n\ndef check_bb_starknet_support(\n    version: str, with_starknet: bool = False\n) -> tuple[bool, str, bool]:\n    \"\"\"Check if bb supports starknet and meets the version requirement\"\"\"\n    version_ok, version_str = check_bb_version(version)\n    oracle_options = _get_bb_oracle_hash_options()\n    has_starknet = \"starknet\" in oracle_options\n    if with_starknet:\n        return (version_ok and has_starknet, version_str, has_starknet)\n    else:\n        return (version_ok, version_str, has_starknet)\n\n\ndef print_bb_warning(soft: bool = False, with_starknet: bool = False):\n    bb_version_ok, bb_version, _ = check_bb_starknet_support(BB_VERSION, with_starknet)\n    nargo_version_ok, nargo_version = check_version(\"nargo\", NARGO_VERSION)\n    if not bb_version_ok or not nargo_version_ok:\n        console = Console()\n        console.print(\n            Panel(\n                f\"[bold]Detected versions of bb and nargo are not compatible with the required versions by garaga {get_package_version()}.[/bold]\\n\"\n                + (f\"This is the most likely cause of the error.\" if not soft else f\"\"),\n                title=\"[bold red]Warning[/bold red]\",\n                border_style=\"red\",\n            )\n        )\n        console.print(\n            f\"Detected bb version: [bold red]{bb_version}[/bold red]\\n\"\n            f\"Detected nargo version: [bold red]{nargo_version}[/bold red]\"\n        )\n        console.print(\n            Panel(\n                \"[bold]Please ensure you have the expected versions of bb and nargo installed for garaga to work correctly.[/bold]\\n\"\n                + \"You can install the required versions using the following commands:\\n\"\n                + f\"[bold yellow]bbup --version {BBUP_VERSION}[/bold yellow]\\n\"\n                + f\"[bold yellow]noirup --version {NARGO_VERSION}[/bold yellow]\\n\"\n                + (\n                    f\"Check [blue]https://noir-lang.org/docs/getting_started/quick_start[/blue] for more information.\\n\"\n                    if not soft\n                    else \"\"\n                )\n                + f\"Please ensure the verifying key was generated with the correct versions of bb and nargo before generating the verifier.\",\n                border_style=\"yellow\",\n                title=\"[bold yellow]Fixing the issue[/bold yellow]\",\n            )\n        )\n    else:\n        print(\n            f\"The detected versions of bb and nargo are correctly aligned with garaga {get_package_version()}. \"\n        )\n\n\ndef gen(\n    system: Annotated[\n        ProofSystem,\n        typer.Option(help=\"Proof system\", autocompletion=complete_proof_system),\n    ],\n    project_name: Annotated[\n        str,\n        typer.Option(\n            help=\"The verifer name (used for the folder name, scarb project name, and contract name)\",\n            prompt=\"\\033[1;35mPlease enter the name of your project. Press enter for default name.\\033[0m\",\n            default_factory=lambda: \"my_project\",\n        ),\n    ],\n    vk: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the verification key file. Expects a JSON for groth16, binary format for Honk. Must be provided, except when the system supports an universal key (ex: Risc0)\",\n            file_okay=True,\n            dir_okay=False,\n            exists=True,\n            autocompletion=lambda: [],  # See https://github.com/fastapi/typer/discussions/731\n        ),\n    ] = None,\n    include_test_sample: Annotated[\n        bool,\n        typer.Option(\n            help=\"Include a sample test file in the generated project\",\n        ),\n    ] = True,\n):\n    \"\"\"\n    Generate a Cairo verifier for a given proof system.\n    Automatically detects the curve from the verification key.\n    \"\"\"\n    cwd = Path.cwd()\n    with Progress(\n        SpinnerColumn(),\n        TextColumn(\"[progress.description]{task.description}\"),\n        transient=False,\n        console=Console(color_system=\"truecolor\"),\n    ) as progress:\n        progress.add_task(\n            f\"[bold cyan]Generating Smart Contract project for [bold yellow]{system}[/bold yellow] using [bold yellow]{Path(vk).name}[/bold yellow]...[/bold cyan]\",\n            total=None,\n        )\n        match system:\n            case ProofSystem.Groth16:\n                gen_groth16_verifier(\n                    vk=vk,\n                    output_folder_path=cwd,\n                    output_folder_name=project_name,\n                    ecip_class_hash=ECIP_OPS_CLASS_HASH,\n                    cli_mode=True,\n                    include_test_sample=include_test_sample,\n                )\n            case ProofSystem.UltraKeccakZKHonk:\n                try:\n                    gen_honk_verifier(\n                        vk=vk,\n                        output_folder_path=cwd,\n                        output_folder_name=project_name,\n                        cli_mode=True,\n                        include_test_sample=include_test_sample,\n                    )\n                except Exception as e:\n                    import traceback\n\n                    print(\n                        f\"\\n[bold red]Error:[/bold red] An error occurred while generating the verifier: \\n{traceback.format_exc()}\"\n                    )\n                    # print_bb_warning(\n                    #     with_starknet=system == ProofSystem.UltraStarknetHonk\n                    #     or system == ProofSystem.UltraStarknetZKHonk\n                    # )\n\n                    raise typer.Exit(code=1)\n\n            case _:\n                raise ValueError(f\"Unsupported proof system: {system}\")\n\n    print(\"[bold green]Done![/bold green]\")\n    print(\"[bold cyan]Smart Contract project created:[/bold cyan]\")\n\n    def generate_tree(path: Path, tree: Tree) -> None:\n        for entry in sorted(path.iterdir(), key=lambda e: e.name):\n            if entry.is_dir():\n                branch = tree.add(f\"[bold blue]{entry.name}/[/bold blue]\")\n                generate_tree(entry, branch)\n            else:\n                tree.add(f\"[green]{entry.name}[/green]\")\n\n    root = Tree(f\"[bold yellow]{cwd}/{project_name}/[/bold yellow]\")\n    generate_tree(cwd / project_name, root)\n    print(root)\n\n    print(\n        f\"[bold]You can now test the main endpoint of the verifier using a proof and `garaga calldata` command.[/bold]\"\n    )\n    if system in [\n        ProofSystem.UltraKeccakZKHonk,\n    ]:\n        print_bb_warning(soft=True, with_starknet=False)\n"
  },
  {
    "path": "hydra/garaga/starknet/cli/smart_contract_project.py",
    "content": "import functools\nfrom dataclasses import dataclass\nfrom pathlib import Path\n\nimport filelock\nimport starknet_py\nfrom starknet_py.common import create_casm_class, create_sierra_compiled_contract\nfrom starknet_py.contract import Contract, DeclareResult\nfrom starknet_py.hash.casm_class_hash import compute_casm_class_hash\nfrom starknet_py.hash.sierra_class_hash import compute_sierra_class_hash\nfrom starknet_py.net.account.account import Account\n\nfrom garaga.starknet.cli.utils import get_sierra_casm_artifacts\nfrom garaga.starknet.groth16_contract_generator.calldata import (\n    groth16_calldata_from_vk_and_proof,\n)\nfrom garaga.starknet.groth16_contract_generator.parsing_utils import (\n    Groth16Proof,\n    Groth16VerifyingKey,\n)\n\n\nclass EmptyContract(Exception):\n    pass\n\n\nfrom functools import lru_cache\n\nimport rich\n\n\n# Add at module level\n@lru_cache(maxsize=32)\ndef _get_cached_artifacts(folder: Path) -> tuple[str, str]:\n    \"\"\"Module level cache for scarb build artifacts\"\"\"\n    # Create lock file in the target directory of the contract\n    lock_file = folder / \"target\" / \".build.lock\"\n    lock_file.parent.mkdir(parents=True, exist_ok=True)\n\n    # Use a timeout to prevent deadlocks\n    lock = filelock.FileLock(str(lock_file), timeout=300)  # 5 minute timeout\n\n    with lock:\n        return get_sierra_casm_artifacts(folder)\n\n\n@dataclass\nclass SmartContractProject:\n    smart_contract_folder: Path  # The folder which holds Scarb.toml.\n\n    def __hash__(self) -> int:\n        return hash(self.smart_contract_folder)\n\n    def get_contract_artifacts(self) -> tuple[str, str]:\n        \"\"\"\n        Returns the sierra and casm artifacts for the contract (uses scarb to build the contract folder)\n        \"\"\"\n        return _get_cached_artifacts(self.smart_contract_folder)\n\n    @lru_cache(maxsize=1)\n    def get_casm_class_hash(self) -> int:\n        \"\"\"\n        Returns the class hash for the contract (uses scarb to build the contract folder)\n        \"\"\"\n        _, casm_artifact = self.get_contract_artifacts()\n        casm_class = create_casm_class(casm_artifact)\n        return compute_casm_class_hash(casm_class)\n\n    @lru_cache(maxsize=1)\n    def get_sierra_class_hash(self) -> int:\n        \"\"\"\n        Returns the class hash for the contract (uses scarb to build the contract folder)\n        \"\"\"\n        sierra_artifact, _ = self.get_contract_artifacts()\n        return compute_sierra_class_hash(\n            create_sierra_compiled_contract(sierra_artifact)\n        )\n\n    @lru_cache(maxsize=1)\n    def get_abi(self) -> str:\n        \"\"\"\n        Returns the abi for the contract (uses scarb to build the contract folder)\n        \"\"\"\n        sierra_artifact, _ = self.get_contract_artifacts()\n        return create_sierra_compiled_contract(sierra_artifact).parsed_abi\n\n    async def _check_class_exists(self, account: Account, class_hash: int) -> bool:\n        \"\"\"Helper method to check if class exists\"\"\"\n        try:\n            await account.client.get_class_by_hash(class_hash)\n            return True\n        except starknet_py.net.client_errors.ClientError as e:\n            if e.code == 28:  # Class hash not found\n                return False\n            raise e\n\n    async def declare_class_hash(self, account: Account) -> tuple[int, str]:\n        \"\"\"Returns class hash and abi\"\"\"\n        rich.print(\n            f\"[bold cyan]Contract project: {self.smart_contract_folder}[/bold cyan]\"\n        )\n\n        # Get artifacts once\n        sierra, casm = self.get_contract_artifacts()\n        if sierra is None or casm is None:\n            raise EmptyContract\n\n        # Use cached properties that don't trigger new builds\n        class_hash = self.get_sierra_class_hash()\n        abi = self.get_abi()\n\n        if await self._check_class_exists(account, class_hash):\n            rich.print(\n                f\"[bold cyan]Contract class for {self.smart_contract_folder} already exists: {hex(class_hash)}[/bold cyan]\"\n            )\n            return class_hash, abi\n\n        rich.print(\n            f\"[bold cyan]class hash for {self.smart_contract_folder} not found - deploying[/bold cyan]\"\n        )\n\n        try:\n            declare_result: DeclareResult = await Contract.declare_v3(\n                account=account,\n                compiled_contract=sierra,\n                compiled_contract_casm=casm,\n                auto_estimate=True,\n            )\n            await declare_result.wait_for_acceptance()\n\n            rich.print(\n                f\"[bold green]Contract class hash declared: {hex(declare_result.class_hash)}[/bold green]\"\n            )\n        except starknet_py.net.client_errors.ClientError as e:\n            raise e\n        except Exception as e:\n            rich.print(\n                f\"[bold red]Unexpected error during contract class declaration: {type(e).__name__}: {e}[/bold red]\"\n            )\n            raise e\n\n        return declare_result.class_hash, abi\n\n\n@dataclass\nclass Groth16SmartContract(SmartContractProject):\n    vk_path: Path  # The json file which holds the verification key.\n\n    def __hash__(self) -> int:\n        return hash((self.smart_contract_folder, self.vk_path))\n\n    @functools.lru_cache(maxsize=128)\n    def generate_calldata(\n        self, proof_path: Path, public_inputs_path: Path | None = None\n    ) -> list[int]:\n        \"\"\"\n        Generates the raw calldata for the contract.\n        \"\"\"\n        return groth16_calldata_from_vk_and_proof(\n            vk=Groth16VerifyingKey.from_json(self.vk_path),\n            proof=Groth16Proof.from_json(proof_path, public_inputs_path),\n        )\n"
  },
  {
    "path": "hydra/garaga/starknet/cli/starknet_cli.py",
    "content": "from typing import Optional\n\nimport typer\n\nfrom garaga.starknet.cli.declare import declare\nfrom garaga.starknet.cli.deploy import deploy\nfrom garaga.starknet.cli.gen import gen\nfrom garaga.starknet.cli.utils import get_package_version\nfrom garaga.starknet.cli.verify import calldata, verify_onchain\n\n\ndef version_callback(value: bool):\n    if value:\n        print(f\"garaga version: {get_package_version()}\")\n        raise typer.Exit()\n\n\napp = typer.Typer(\n    no_args_is_help=True,  # Show help when no arguments are provided\n    context_settings={\"help_option_names\": [\"-h\", \"--help\"]},\n)\n\n\n# Add version option that will be processed first\n@app.callback(invoke_without_command=True)\ndef main(\n    version: Optional[bool] = typer.Option(\n        None,\n        \"--version\",\n        callback=version_callback,\n        is_eager=True,\n        help=\"Show the version and exit.\",\n    ),\n):\n    pass\n\n\napp.command(no_args_is_help=True)(gen)\napp.command(no_args_is_help=True)(declare)\napp.command(no_args_is_help=True)(deploy)\napp.command(no_args_is_help=True)(verify_onchain)\napp.command(no_args_is_help=True)(calldata)\n\n\nif __name__ == \"__main__\":\n    app()\n"
  },
  {
    "path": "hydra/garaga/starknet/cli/utils.py",
    "content": "import asyncio\nimport glob\nimport json\nimport os\nimport shutil\nimport subprocess\nimport tempfile\nimport time\nfrom enum import Enum\nfrom importlib.metadata import PackageNotFoundError, version\nfrom pathlib import Path\n\nimport rich\nfrom starknet_py.contract import Contract\nfrom starknet_py.net.account.account import Account\nfrom starknet_py.net.client_errors import ClientError, ContractNotFoundError\nfrom starknet_py.net.full_node_client import FullNodeClient\nfrom starknet_py.net.models import StarknetChainId\nfrom starknet_py.net.signer.stark_curve_signer import KeyPair\n\nfrom garaga.curves import ProofSystem\nfrom garaga.hints.io import to_int\n\n\ndef get_package_version():\n    try:\n        __version__ = version(\"garaga\")\n    except PackageNotFoundError:\n        # package is not installed\n        __version__ = \"dev\"\n    return __version__\n\n\nclass Network(Enum):\n    SEPOLIA = \"sepolia\"\n    MAINNET = \"mainnet\"\n\n\ndef load_account(network: Network):\n    rpc_url = os.getenv(f\"{network.name.upper()}_RPC_URL\")\n    account_address = os.getenv(f\"{network.name.upper()}_ACCOUNT_ADDRESS\")\n    account_private_key = os.getenv(f\"{network.name.upper()}_ACCOUNT_PRIVATE_KEY\")\n    if network == Network.MAINNET:\n        chain = StarknetChainId.MAINNET\n    else:\n        chain = StarknetChainId.SEPOLIA\n\n    client = FullNodeClient(node_url=rpc_url)\n    account = Account(\n        address=account_address,\n        client=client,\n        key_pair=KeyPair.from_private_key(to_int(account_private_key)),\n        chain=chain,\n    )\n    account.ESTIMATED_AMOUNT_MULTIPLIER = 1.02\n    account.ESTIMATED_FEE_MULTIPLIER = 1.02\n    account.ESTIMATED_UNIT_PRICE_MULTIPLIER = 1.02\n    return account\n\n\ndef get_contract_if_exists(account: Account, contract_address: int) -> Contract | None:\n    try:\n        res = asyncio.run(Contract.from_address(contract_address, account))\n        return res\n    except ContractNotFoundError:\n\n        return None\n    except ClientError as e:\n        if \"no contract with address\" in e.message.lower():\n            return None\n        raise e\n\n\nasync def get_contract_if_exists_async(\n    account: Account, contract_address: int\n) -> Contract | None:\n    try:\n        res = await Contract.from_address(contract_address, account)\n        return res\n    except ContractNotFoundError:\n\n        return None\n    except ClientError as e:\n        if \"no contract with address\" in e.message.lower():\n            return None\n        raise e\n\n\ndef get_contract_iff_exists(account: Account, contract_address: int) -> Contract:\n    contract = get_contract_if_exists(account, contract_address)\n    if contract is None:\n        rich.print(\n            f\"[red]Contract {contract_address} does not exists on {account._chain_id.name}[/red]\"\n        )\n        raise ValueError(f\"Contract {contract_address} not found\")\n    return contract\n\n\ndef create_directory(path: str):\n    if not os.path.exists(path):\n        os.makedirs(path)\n        # print(f\"Directory created: {path}\")\n\n\ndef complete_pairing_curve_id(incomplete: str):\n    curve_ids = [\"0\", \"1\"]  # Corresponding to BN254 and BLS12_381\n    return [cid for cid in curve_ids if cid.startswith(incomplete)]\n\n\ndef complete_proof_system(incomplete: str):\n    systems = [ps.value for ps in ProofSystem]\n    return [system for system in systems if system.startswith(incomplete)]\n\n\ndef complete_network(incomplete: str):\n    networks = [network.name for network in StarknetChainId]\n    return [network for network in networks if network.startswith(incomplete)]\n\n\ndef get_voyager_network_prefix(network: Network) -> str:\n    return \"\" if network == Network.MAINNET else \"sepolia.\"\n\n\ndef voyager_link_tx(network: Network, tx_hash: int) -> str:\n    voyager_prefix = get_voyager_network_prefix(network)\n    return f\"https://{voyager_prefix}voyager.online/tx/{hex(tx_hash)}\"\n\n\ndef voyager_link_class(network: Network, class_hash: int) -> str:\n    voyager_prefix = get_voyager_network_prefix(network)\n    return f\"https://{voyager_prefix}voyager.online/class/{hex(class_hash)}\"\n\n\ndef scarb_build_contract_folder(contract_folder_path: str):\n    cmd = \"scarb build\"\n    print(f\"Running command: {cmd} in directory: {contract_folder_path}\")\n    try:\n        subprocess.run(\n            cmd,\n            cwd=contract_folder_path,\n            check=True,\n            shell=True,\n            capture_output=True,\n            text=True,\n        )\n    except subprocess.CalledProcessError as e:\n        print(f\"Error building contract: {e}\")\n        print(f\"Command output:\\n{e.output}\")\n        raise\n    except FileNotFoundError as e:\n        print(f\"Error: {e}\")\n        raise\n    except Exception as e:\n        print(f\"An unexpected error occurred: {e}\")\n        raise\n\n\ndef _acquire_scarb_lock():\n    \"\"\"\n    Acquire a file-based lock for scarb operations to prevent parallel execution issues.\n    Returns the lock file path that should be released later.\n    \"\"\"\n    lock_dir = tempfile.gettempdir()\n    lock_file = os.path.join(lock_dir, \"garaga_scarb_metadata.lock\")\n\n    # Try to acquire lock with timeout\n    timeout = 60  # 60 seconds timeout\n    start_time = time.time()\n\n    while time.time() - start_time < timeout:\n        try:\n            # Try to create lock file exclusively\n            fd = os.open(lock_file, os.O_CREAT | os.O_EXCL | os.O_WRONLY)\n            os.write(fd, str(os.getpid()).encode())\n            os.close(fd)\n            return lock_file\n        except OSError:\n            # Lock file exists, wait a bit and retry\n            time.sleep(0.1)\n\n    raise TimeoutError(\"Could not acquire scarb lock within timeout\")\n\n\ndef _release_scarb_lock(lock_file: str):\n    \"\"\"Release the scarb lock by removing the lock file.\"\"\"\n    try:\n        os.remove(lock_file)\n    except OSError:\n        # Lock file might have been removed already\n        pass\n\n\ndef get_sierra_casm_artifacts(\n    contract_folder_path: str,\n) -> tuple[None, None] | tuple[str, str]:\n    \"\"\"\n    Get the Sierra and CASM artifacts for a contract.\n    \"\"\"\n    lock_file = _acquire_scarb_lock()\n    try:\n        process = subprocess.run(\n            \"scarb metadata --format-version 1\",\n            shell=True,\n            capture_output=True,\n            text=True,\n            check=True,\n            cwd=contract_folder_path,\n        )\n\n        # Clean up any potential scarb warning messages from stdout\n        stdout_lines = process.stdout.strip().split(\"\\n\")\n        # Find the first line that starts with '{' (the JSON)\n        json_start_idx = 0\n        for i, line in enumerate(stdout_lines):\n            if line.strip().startswith(\"{\"):\n                json_start_idx = i\n                break\n\n        json_content = \"\\n\".join(stdout_lines[json_start_idx:])\n        metadata = json.loads(json_content)\n    finally:\n        _release_scarb_lock(lock_file)\n\n    target_dir = os.path.join(contract_folder_path, metadata[\"target_dir\"], \"dev\")\n\n    # Clean the target/dev/ folder if it already exists\n    if os.path.exists(target_dir):\n        shutil.rmtree(target_dir)\n    os.makedirs(target_dir)\n\n    scarb_build_contract_folder(contract_folder_path)\n\n    artifacts_file = glob.glob(os.path.join(target_dir, \"*.starknet_artifacts.json\"))\n    assert (\n        len(artifacts_file) == 1\n    ), f\"Artifacts JSON file not found or multiple files found: {artifacts_file}\"\n\n    with open(artifacts_file[0], \"r\") as f:\n        artifacts = json.load(f)\n\n    contracts = artifacts[\"contracts\"]\n    if len(contracts) == 0:\n        return None, None\n\n    sierra_file = contracts[0][\"artifacts\"][\"sierra\"]\n    casm_file = contracts[0][\"artifacts\"][\"casm\"]\n\n    sierra_path = os.path.join(target_dir, sierra_file)\n    casm_path = os.path.join(target_dir, casm_file)\n\n    assert os.path.exists(sierra_path), f\"Sierra file not found: {sierra_path}\"\n    assert os.path.exists(casm_path), f\"CASM file not found: {casm_path}\"\n\n    with open(sierra_path, \"r\") as f:\n        sierra = f.read()\n    with open(casm_path, \"r\") as f:\n        casm = f.read()\n    return sierra, casm\n\n\ndef get_default_vk_path(vk_type: str) -> Path:\n    script_path = Path(__file__).resolve()\n    script_folder_path = script_path.parent\n    match vk_type:\n        case \"risc0\":\n            return (\n                script_folder_path.parent\n                / \"groth16_contract_generator\"\n                / \"examples\"\n                / \"vk_risc0.json\"\n            )\n        case \"sp1\":\n            return (\n                script_folder_path.parent\n                / \"groth16_contract_generator\"\n                / \"examples\"\n                / \"vk_sp1.json\"\n            )\n        case _:\n            raise ValueError(\n                f\"Unsupported default VK for proof type: {vk_type}. Please specify a vk.\"\n            )\n"
  },
  {
    "path": "hydra/garaga/starknet/cli/verify.py",
    "content": "import asyncio\nfrom enum import Enum\nfrom pathlib import Path\nfrom typing import Annotated\n\nimport rich\nimport typer\nfrom dotenv import load_dotenv\nfrom starknet_py.contract import (\n    ContractFunction,\n    InvokeResult,\n    PreparedFunctionInvokeV3,\n)\n\nfrom garaga.curves import ProofSystem\nfrom garaga.hints.io import to_int\nfrom garaga.precompiled_circuits.zk_honk import honk_proof_from_bytes\nfrom garaga.starknet.cli.utils import (\n    Network,\n    complete_proof_system,\n    get_contract_iff_exists,\n    get_default_vk_path,\n    load_account,\n    voyager_link_tx,\n)\nfrom garaga.starknet.groth16_contract_generator.calldata import (\n    groth16_calldata_from_vk_and_proof,\n)\nfrom garaga.starknet.groth16_contract_generator.parsing_utils import (\n    Groth16Proof,\n    Groth16VerifyingKey,\n    find_item_from_key_patterns,\n)\nfrom garaga.starknet.honk_contract_generator.calldata import (\n    HonkVk,\n    get_ultra_flavor_honk_calldata_from_vk_and_proof,\n)\n\napp = typer.Typer()\n\n\ndef verify_onchain(\n    system: Annotated[\n        ProofSystem,\n        typer.Option(help=\"Proof system\", autocompletion=complete_proof_system),\n    ],\n    contract_address: Annotated[\n        str,\n        typer.Option(\n            help=\"Starknet contract address\",\n        ),\n    ],\n    proof: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the proof JSON file\",\n            file_okay=True,\n            dir_okay=False,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ],\n    vk: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the verification key file. Expects a JSON for groth16, binary format for Honk. Must be provided, except when the system supports an universal key (ex: Risc0)\",\n            file_okay=True,\n            dir_okay=False,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ] = None,\n    public_inputs: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the public inputs file. Expects a JSON for groth16, binary format for Honk.\",\n            file_okay=True,\n            dir_okay=False,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ] = None,\n    endpoint: Annotated[\n        str,\n        typer.Option(\n            help=\"Smart contract function name. If not provided, the default 'verify_[proof_system]_proof_[curve_name]' will be used.\",\n        ),\n    ] = \"\",\n    env_file: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the environment file containing rpc, address, private_key\",\n            file_okay=True,\n            dir_okay=False,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ] = str(Path.cwd() / \".secrets\"),\n    network: Annotated[\n        Network,\n        typer.Option(\n            help=\"Starknet network\",\n            case_sensitive=False,\n        ),\n    ] = Network.SEPOLIA.value,\n):\n    \"\"\"Invoke a SNARK verifier on Starknet given a contract address, a proof and a verification key.\"\"\"\n\n    load_dotenv(env_file)\n    account = load_account(network)\n\n    contract = get_contract_iff_exists(account, to_int(contract_address))\n\n    try:\n        function_call: ContractFunction = find_item_from_key_patterns(\n            contract.functions, [\"verify\"]\n        )\n    except ValueError:\n        rich.print(\n            f\"[red]Function {endpoint} not found on contract {contract_address}[/red]\"\n        )\n        raise ValueError(\n            f\"Function {endpoint} not found on contract {contract_address}\"\n        )\n\n    if public_inputs == \"\":\n        public_inputs = None\n\n    calldata = get_calldata_generic(system, vk, proof, public_inputs)\n\n    prepare_invoke = PreparedFunctionInvokeV3(\n        to_addr=function_call.contract_data.address,\n        calldata=calldata,\n        selector=function_call.get_selector(function_call.name),\n        _contract_data=function_call.contract_data,\n        _client=function_call.client,\n        _account=function_call.account,\n        _payload_transformer=function_call._payload_transformer,\n        resource_bounds=None,\n    )\n\n    invoke_result: InvokeResult = asyncio.run(prepare_invoke.invoke(auto_estimate=True))\n\n    asyncio.run(invoke_result.wait_for_acceptance())\n\n    rich.print(f\"[bold]Transaction hash : {hex(invoke_result.hash)}[/bold]\")\n    rich.print(\n        f\"[bold green]Check it out on[/bold green] {voyager_link_tx(network, invoke_result.hash)}\"\n    )\n\n\nclass CalldataFormat(str, Enum):\n    starkli = \"starkli\"\n    array = \"array\"\n    snforge = \"snforge\"\n\n\ndef get_calldata_generic(\n    system: ProofSystem, vk: Path | None, proof: Path, public_inputs: Path | None\n) -> list[int]:\n    match system:\n        case ProofSystem.Groth16:\n            proof_obj = Groth16Proof.from_json(proof, public_inputs)\n            if vk is None:\n                vk_obj = Groth16VerifyingKey.from_json(\n                    get_default_vk_path(proof_obj.vk_type)\n                )\n            else:\n                vk_obj = Groth16VerifyingKey.from_json(vk)\n\n            return groth16_calldata_from_vk_and_proof(vk_obj, proof_obj)\n        case ProofSystem.UltraKeccakZKHonk:\n            vk_obj = HonkVk.from_bytes(open(vk, \"rb\").read())\n            proof_obj = honk_proof_from_bytes(\n                open(proof, \"rb\").read(),\n                open(public_inputs, \"rb\").read(),\n                vk_obj,\n                system,\n            )\n            return get_ultra_flavor_honk_calldata_from_vk_and_proof(\n                vk_obj, proof_obj, system\n            )\n        case _:\n            raise ValueError(f\"Proof system {system} not supported\")\n\n\ndef calldata(\n    system: Annotated[\n        ProofSystem,\n        typer.Option(help=\"Proof system\", autocompletion=complete_proof_system),\n    ],\n    proof: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the proof file\",\n            file_okay=True,\n            dir_okay=False,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ],\n    vk: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the verification key file. Expects a JSON for groth16, binary format for Honk. Must be provided, except when the system supports an universal key (ex: Risc0)\",\n            file_okay=True,\n            dir_okay=False,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ] = None,\n    public_inputs: Annotated[\n        Path,\n        typer.Option(\n            help=\"Path to the public inputs file. Optional, only used for Groth16 when pub inputs are not in the json proof (ex: SnarkJS)\",\n            file_okay=True,\n            dir_okay=False,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ] = None,\n    format: Annotated[\n        CalldataFormat,\n        typer.Option(\n            help=\"Format\",\n            case_sensitive=False,\n            show_choices=True,\n        ),\n    ] = CalldataFormat.snforge,\n    output_path: Annotated[\n        Path,\n        typer.Option(\n            help=\"Output directory path for snforge format (defaults to current directory)\",\n            file_okay=False,\n            dir_okay=True,\n            exists=True,\n            autocompletion=lambda: [],\n        ),\n    ] = Path(\".\"),\n):\n    \"\"\"Generate Starknet verifier calldata given a proof and a verification key.\"\"\"\n\n    if vk == None:\n        vk = get_default_vk_path(system)\n\n    calldata = get_calldata_generic(system, vk, proof, public_inputs)\n\n    if format == CalldataFormat.starkli:\n        print(\" \".join([str(x) for x in calldata]))\n    elif format == CalldataFormat.array:\n        print(calldata[1:])\n    elif format == CalldataFormat.snforge:\n        # Write the calldata to a file in the specified output path\n        output_file = output_path / \"proof_calldata.txt\"\n        with open(output_file, \"w\") as f:\n            for x in calldata[1:]:\n                f.write(f\"{hex(x)}\\n\")\n        print(f\"Calldata written to: {output_file}\")\n"
  },
  {
    "path": "hydra/garaga/starknet/constants.py",
    "content": "\"\"\"\nAuto-generated constants file from constants.json. Do not edit manually.\n\"\"\"\n\n# RISC0 Constants\n# https://github.com/risc0/risc0-ethereum/blob/v2.2.2/contracts/src/groth16/ControlID.sol\n# release v2.2.2\nRISC0_CONTROL_ROOT = 0xCE52BF56033842021AF3CF6DB8A50D1B7535C125A34F1A22C6FDCF002C5A1529\nRISC0_BN254_CONTROL_ID = (\n    0x04446E66D300EB7FB45C9726BB53C793DDA407A62E9601618BB43C5C14657AC0\n)\n\n# SP1 Constants\n# https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/v5.0.0/SP1VerifierGroth16.sol\nSP1_VERIFIER_VERSION = \"v5.0.0\"\nSP1_VERIFIER_HASH = bytes.fromhex(\n    \"a4594c59bbc142f3b81c3ecb7f50a7c34bc9af7c4c444b5d48b795427e285913\"\n)\n\n# Additional RISC0 constants for internal use\nRISC0_SYSTEM_STATE_ZERO_DIGEST = (\n    \"0xA3ACC27117418996340B84E5A90F3EF4C49D22C79E44AAD822EC9C313E1EB8E2\"\n)\nRISC0_TAG_DIGEST = \"0xcb1fefcd1f2d9a64975cbbbf6e161e2914434b0cbb9960b84df5d717e86b48af\"\nRISC0_OUTPUT_TAG = \"0x77eafeb366a78b47747de0d7bb176284085ff5564887009a5be63da32d3559d4\"\nRISC0_RELEASE_VERSION = \"v2.2.2\"\n\n# Version info\nCAIRO_VERSION = \"2.16.1\"\nSTARKNET_FOUNDRY_VERSION = \"0.57.0\"\nBB_VERSION = \"3.0.0-nightly.20251104\"\nBBUP_VERSION = \"3.0.0-nightly.20251104\"\nNARGO_VERSION = \"1.0.0-beta.16\"\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/calldata.py",
    "content": "from garaga import garaga_rs\nfrom garaga.points import G1G2Pair, G1Point\nfrom garaga.starknet.groth16_contract_generator.parsing_utils import (\n    Groth16Proof,\n    Groth16VerifyingKey,\n)\nfrom garaga.starknet.tests_and_calldata_generators.mpcheck import MPCheckCalldataBuilder\nfrom garaga.starknet.tests_and_calldata_generators.msm import MSMCalldataBuilder\n\n\ndef groth16_calldata_from_vk_and_proof(\n    vk: Groth16VerifyingKey, proof: Groth16Proof, use_rust: bool = False\n) -> list[int]:\n    if use_rust:\n        return _groth16_calldata_from_vk_and_proof_rust(vk, proof)\n\n    assert (\n        vk.curve_id == proof.curve_id\n    ), f\"Curve ID mismatch: {vk.curve_id} != {proof.curve_id}\"\n\n    vk_x = vk.ic[0].add(G1Point.msm(vk.ic[1:], proof.public_inputs))\n\n    calldata = []\n\n    mpc = MPCheckCalldataBuilder(\n        vk.curve_id,\n        pairs=[\n            G1G2Pair(p=vk_x, q=vk.gamma, curve_id=vk.curve_id),\n            G1G2Pair(p=proof.c, q=vk.delta, curve_id=vk.curve_id),\n            G1G2Pair(p=-proof.a, q=proof.b, curve_id=vk.curve_id),\n        ],\n        n_fixed_g2=2,\n        public_pair=G1G2Pair(vk.alpha, vk.beta, vk.curve_id),\n    )\n\n    calldata.extend(proof.serialize_to_calldata())\n    calldata.extend(mpc.serialize_to_calldata())\n\n    if proof.image_id and proof.journal:\n        # Risc0 mode.\n        print(\"Risc0 mode\")\n        msm = MSMCalldataBuilder(\n            curve_id=vk.curve_id,\n            points=[vk.ic[3], vk.ic[4]],\n            scalars=[proof.public_inputs[2], proof.public_inputs[3]],\n        )\n        calldata.extend(\n            msm.serialize_to_calldata(\n                include_points_and_scalars=False,\n                serialize_as_pure_felt252_array=True,\n            )\n        )\n    else:\n        msm = MSMCalldataBuilder(\n            curve_id=vk.curve_id,\n            points=vk.ic[1:],\n            scalars=proof.public_inputs,\n        )\n\n        calldata.extend(\n            msm.serialize_to_calldata(\n                include_points_and_scalars=False,\n                serialize_as_pure_felt252_array=True,\n            )\n        )\n\n    # return calldata\n    return [len(calldata)] + calldata\n\n\ndef _groth16_calldata_from_vk_and_proof_rust(\n    vk: Groth16VerifyingKey, proof: Groth16Proof\n) -> list[int]:\n    assert (\n        vk.curve_id == proof.curve_id\n    ), f\"Curve ID mismatch: {vk.curve_id} != {proof.curve_id}\"\n\n    # Determine vkey for SP1 proofs - it's embedded in public_inputs[0]\n    vkey = None\n    if proof.public_inputs_sp1 is not None:\n        # For SP1 proofs, the vkey is stored as public_inputs[0] as a big integer\n        # We need to convert it back to bytes (32 bytes, big endian)\n        vkey_int = proof.public_inputs[0]\n        vkey = vkey_int.to_bytes(32, byteorder=\"big\")\n\n    return garaga_rs.get_groth16_calldata(\n        proof.flatten(),\n        vk.flatten(),\n        proof.curve_id.value,\n        proof.image_id,\n        proof.journal,\n        proof.public_inputs_sp1,\n        vkey,\n    )\n\n\nif __name__ == \"__main__\":\n    VK_PATH = \"hydra/garaga/starknet/groth16_contract_generator/examples/snarkjs_vk_bn254.json\"\n    PROOF_PATH = \"hydra/garaga/starknet/groth16_contract_generator/examples/snarkjs_proof_bn254.json\"\n    PUBLIC_INPUTS_PATH = \"hydra/garaga/starknet/groth16_contract_generator/examples/snarkjs_public_bn254.json\"\n\n    vk = Groth16VerifyingKey.from_json(file_path=VK_PATH)\n    proof = Groth16Proof.from_json(\n        proof_path=PROOF_PATH, public_inputs_path=PUBLIC_INPUTS_PATH\n    )\n\n    calldata = groth16_calldata_from_vk_and_proof(vk, proof)\n\n    print(calldata)\n    print(len(calldata))\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/gnark_proof_bn254.json",
    "content": "{\n  \"Ar\": {\n    \"X\": \"73845398786533896737633575350679623829088256804727703196883312716046720173\",\n    \"Y\": \"3929126461430331964775340412981986240468451439560808746926369245425818473094\"\n  },\n  \"Krs\": {\n    \"X\": \"5190364967715151722457989459269945351663215722120167333837995313677944703903\",\n    \"Y\": \"14199563643497455180373217971778460129125995041037663528128314360912908737780\"\n  },\n  \"Bs\": {\n    \"X\": {\n      \"A0\": \"16632859667924688464448957536047018456099730057010042618872684676699665576215\",\n      \"A1\": \"14449457899836886236886667816357803659057995635857528933270859039361561900603\"\n    },\n    \"Y\": {\n      \"A0\": \"15421378102072744588763891672780291204950526202368967583474637050334340924705\",\n      \"A1\": \"18744416296603152547207457648310909802150662798361439910160964667848224210083\"\n    }\n  },\n  \"Commitments\": [],\n  \"CommitmentPok\": {\n    \"X\": 0,\n    \"Y\": 0\n  }\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/gnark_public_bn254.json",
    "content": "{\"Y\":35,\"A\":3}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/gnark_vk_bn254.json",
    "content": "{\n  \"G1\": {\n    \"Alpha\": {\n      \"X\": \"14022946795448417392013625865802801176898886310466431149831115687134146367641\",\n      \"Y\": \"10364344690755581581504644927667063116689644601215049216910271378126570545500\"\n    },\n    \"Beta\": {\n      \"X\": \"8844875712409095498068897593965025484997931450974590956146408012716228318504\",\n      \"Y\": \"2799788420235572891700155740485845467105272280264371678131018641353250818667\"\n    },\n    \"Delta\": {\n      \"X\": \"16969540828789996554983310544993112744806439019641589585263366845519078966157\",\n      \"Y\": \"533649247374421949943697162574730867816408085255507771632248210977552490861\"\n    },\n    \"K\": [\n      {\n        \"X\": \"17461779630561271163671852875847592287161079138433606261984180739218927158236\",\n        \"Y\": \"10379634765586658134781845471660076557556695748197053518811787395522091586195\"\n      },\n      {\n        \"X\": \"10835021126138156977544265475466469711908478296558124914976718838658441065225\",\n        \"Y\": \"10030093532661424195104483506962793636352799423129915749876897937700551580649\"\n      },\n      {\n        \"X\": \"11284277349890495424801427723588943125126072154154310369457878942235288226040\",\n        \"Y\": \"583859706624447950864738075374310646363788597670568381405717844223938749900\"\n      }\n    ]\n  },\n  \"G2\": {\n    \"Beta\": {\n      \"X\": {\n        \"A0\": \"10481547531373562520559478972412543701342405400857672305471101625746475821183\",\n        \"A1\": \"2967257082438296979278001659301901911044242970229012803760772279597657883732\"\n      },\n      \"Y\": {\n        \"A0\": \"19876627849961016393990350226622542089131395293920518886528254923761375036253\",\n        \"A1\": \"13827411186489088399303139760511808643745791912383443683147505906084566938940\"\n      }\n    },\n    \"Delta\": {\n      \"X\": {\n        \"A0\": \"5149303948979298468953341463845133104199563940546569815881922635295745535154\",\n        \"A1\": \"16068833659589509967862441597475906062784244243534762226959372043157580352707\"\n      },\n      \"Y\": {\n        \"A0\": \"11307107059852564583020284602429478846076970197317863084699124775255989413569\",\n        \"A1\": \"9672774999948706328422723175215978271740933699519877590038587650998269355729\"\n      }\n    },\n    \"Gamma\": {\n      \"X\": {\n        \"A0\": \"17235710036224860132265576392745360975930416986721407959126157047084684503914\",\n        \"A1\": \"10041111045436592396830585503619446142387348824875731037061599181978628109810\"\n      },\n      \"Y\": {\n        \"A0\": \"20362549923344147883138251765806956214949149990089919532858953006220234370443\",\n        \"A1\": \"21859478731034917814952666766295622606907908236375380972800568353870634524224\"\n      }\n    }\n  },\n  \"CommitmentKey\": {\n    \"G\": {\n      \"X\": {\n        \"A0\": \"17850908351491469459542288811350755306263562728442401161252065431638373478502\",\n        \"A1\": \"6345720694907357159183235849471521595194714244218588817096938735631283758021\"\n      },\n      \"Y\": {\n        \"A0\": \"247740085647629325077212748946590675785346718359456574172438405532982587562\",\n        \"A1\": \"15297256079821508805270557803849437418824372112305425291433043247300204499206\"\n      }\n    },\n    \"GRootSigmaNeg\": {\n      \"X\": {\n        \"A0\": \"11310523937834830894925835503791962702834007874257883599676369974748379224003\",\n        \"A1\": \"20026537114404308865928088571824808504924367502333717580623093115023599589512\"\n      },\n      \"Y\": {\n        \"A0\": \"5469526284611008187529134846311473736359253328315372577679469342886253946655\",\n        \"A1\": \"6391742303341596133328610316731619670171185501478606894301826934183437782481\"\n      }\n    }\n  },\n  \"PublicAndCommitmentCommitted\": []\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/proof_bls.json",
    "content": "{\n    \"elliptic_curve_id\": \"bls12_381\",\n    \"proof\": {\n        \"a\": {\n            \"x\": \"0x10d63379d266db8045f5c728dfa7fccf252d7a8b8f12403edd8cfcb8222f03b0e4b380fcfbf04de06661c03aa78411a8\",\n            \"y\": \"0x2c0020b06ec1b7724838d62d7f025572d1a11a316e78e08c24b6497af9aeb024f49f8b360db2dd06e62b4a0b82e5152\"\n        },\n        \"b\": {\n            \"x\": [\n                \"0x10b361235d431450b05faa03fd4ecc9b868d0661624f2b93bae53a4fad489f850b025cee778400cd07df7ee73c5c448a\",\n                \"0x18eab8fd69c3bd14a54d2bf078ef2d24565a8c5b9d13494d80f3d1ab2e12a6e550f47425e8a1b9c9dbc220c866998662\"\n            ],\n            \"y\": [\n                \"0x8a16230f79f3dca30dfc204f2eb3aed84a4590f460ad2e04ccbb7c5ac5c9a22450577ac7e68c1949f7002bf79cb928\",\n                \"0x147986d801bf9ceeec6861f36b089209f570450362b927cfbfba0f9aa884451ed4cd86112db2c8950ddd7f26bd5c25d9\"\n            ]\n        },\n        \"c\": {\n            \"x\": \"0x16998ff7eba66bfb87e0cd5dc462994ad8c2d05cba4913f2da2d11e16384828748a77c2bf63dde989a27d2f481d98017\",\n            \"y\": \"0xed3a43bd7eba2c69dd71d48ef22aacdb044d34ba506b7c00ebe9803383f30df57976c287e5e99dc4dee75af6426b3b5\"\n        }\n    },\n    \"public_inputs\": [\n        \"0x37ef9cf41c99af8dddaf673a28adfa2d7a0452f8b3d5036d0336b258532659a1\"\n    ]\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/proof_bn254.json",
    "content": "{\n    \"elliptic_curve_id\": \"bn254\",\n    \"proof\": {\n        \"a\": {\n            \"x\": \"0x2abaae3dd6e4c662f5e071bca525a26d21e2400d01d02c87bce2e8363285990a\",\n            \"y\": \"0x24211ff0aa742a6dd1651aadce6f72757beb89de2cff83a6162de7c15674c2\"\n        },\n        \"b\": {\n            \"x\": [\n                \"0x2335f1564c154d7a2ec5d11faf6d991a205bef2858f1687976d0a46502f5224a\",\n                \"0x223af0bb0912d8ebc535ed489d06cd01fcf4a8ab4596cc28164edf9041d97080\"\n            ],\n            \"y\": [\n                \"0x182e8fd86a44983de1d1d9dc4f12f134535b75d39f7aeb21adbf57e1a32ee603\",\n                \"0xecb11668a0dd5d5031b0837e62ba14222b45718dc101c1278f44a9ed823c16b\"\n            ]\n        },\n        \"c\": {\n            \"x\": \"0x290243624a4c11868e7cb0c0f7cfd690dac08e4205d19795b0a8f686dddcdfd6\",\n            \"y\": \"0x15de00cc8af159fbdbdc802592e83e1ac61a8026b97e8889b8c5def59ec50b16\"\n        }\n    },\n    \"public_inputs\": [\n        \"0x1e17db88c1d2e83e49f692cce4bb8169309de90afb2b141156243106aa34b474\"\n    ]\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/proof_risc0.json",
    "content": "{\n    \"seal\": \"0xbb001d441cb19c0439e5cb54ab7dd4d4e0cd8c4809abe8e19ba602b4ce8728dc9e2eafbe27eac14be5e561f6cd697429d0567a4f46f62291b58f541c46fbf653dff6725424ade3fdf1cc1014e062fa9e6c2e8e3a785fb2f84af10a44adfe761483b1036a00bea38909a90b4f557b520cc77f01a33000444dd2c5c572d590e03c55c646392b8f7d3f65ab4b05ce2a339f86210a1762d8cae53bafdeaa105949019e5fb72a17506d1c6db5cfbfee339cd9e20abc9871d2d72e6c0e66b9e8f6f5ddce73181022cc8347b8ac33a5ee18bb0cecf4d47225112e90e1c4d0b896b7ab77701a8f4c1391b544bc1d7ba20e6287ff63fded2de08e02db62b0093be54044819071cd65\",\n    \"image_id\": \"0x39b8aec425bb4e7eb994a0e4b6e9dbeceba907cf70f463cba7dc9786fe2dfb86\",\n    \"journal\": \"0x6a75737420612073696d706c652072656365697074\"\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/proof_sp1.json",
    "content": "{\n    \"a\": 6765,\n    \"b\": 10946,\n    \"n\": 20,\n    \"vkey\": \"0x00e00f8bf845ce217630ab77a3351d3f099d2856198792afcc16af2182c56515\",\n    \"publicValues\": \"0x000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000059\",\n    \"proof\": \"0xa4594c5903a67b2b92ec80758bd62cf3413ae30ccb5cb124f80739ea729635128f87c9db0d73627973ff2282c89c329c82695448393ef4a1bada4d3959a1d0e421bd861704d40dd04d20f4e136c0fb4ba2bac814885c06d0cfed88053163a2ac94869e180baa720e442de1c19c21c25b35bf74ac737c8c23dd0ccfe5917761ef3d5cee7a0ab9f6dc9b4e5ef495e2f10d7943fa1caf07f9bbd2a77bf9fbcf68c8cdec9b6c009d21063f8f4c605027f40e289a48ce76fa83714bc54e609ca3e5cb25e3afc62745103dee46695a221fafd6e9cb82c03c04bf0cc88a87cbf7023df41fa14c0e158b03356b5595a573292c17bae969c87e752af1ee684a4bbf22a139e56f2b17\"\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/snarkjs_proof_bls12381.json",
    "content": "{\n    \"pi_a\": [\n        \"3485152954408741741926847089831059591383907630239116784995436738189865955120885556199236406038466836214421991680954\",\n        \"154860548139734477039420784520046002016510204339418245860838337803315632344536693944277400179443283236943549107802\",\n        \"1\"\n    ],\n    \"pi_b\": [\n        [\n            \"1189367959700558605915032782653884912231211486629234350578524664401416658006900616682649282456970345937240392951950\",\n            \"982972310153498651356609628173968597957580175097204901152956877592722284408961893988898846206769338927010864277897\"\n        ],\n        [\n            \"3246777898221659500974166559060565219973325513989979262303831078446971987804400344091345638114129082558119558551753\",\n            \"2601576460715211741126146217362567970757072503270754030074152635959268934549623874228792250787598248683494341541345\"\n        ],\n        [\n            \"1\",\n            \"0\"\n        ]\n    ],\n    \"pi_c\": [\n        \"1085195810997077937681619424737706995724769918786687525244374537039253071968280399801210562531703830213202372135064\",\n        \"1856101469241092608639064972061062850713586209905212394983879031529137271988213302924644800680307370920962192472181\",\n        \"1\"\n    ],\n    \"protocol\": \"groth16\",\n    \"curve\": \"bls12381\"\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/snarkjs_proof_bn254.json",
    "content": "{\n \"pi_a\": [\n  \"16867095230114469303111269582801754677348924111782514818746093562477643731718\",\n  \"20212722335582718902672982589607764312189339603046913281774669180256203100136\",\n  \"1\"\n ],\n \"pi_b\": [\n  [\n   \"12758685536372388449510929615906811839459760160946896050208195496890210504448\",\n   \"17855758041968043219081456864094552349379559551194469443938085607012057050413\"\n  ],\n  [\n   \"13955825016276204826390255402887489684619114124020822491524581785493735884723\",\n   \"4753473547991654414764256423822769241872233406220219643335981552335370273842\"\n  ],\n  [\n   \"1\",\n   \"0\"\n  ]\n ],\n \"pi_c\": [\n  \"671762906748438705619751301153263621349258242033442893897067744180576955019\",\n  \"15774728702167052591009228304182510598553322825902260825229935303814649441886\",\n  \"1\"\n ],\n \"protocol\": \"groth16\",\n \"curve\": \"bn128\"\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/snarkjs_public_bls12381.json",
    "content": "[\n  \"33\"\n]\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/snarkjs_public_bn254.json",
    "content": "[\n \"4949495449574848545353525153565755490000\"\n]\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/snarkjs_vk_bls12381.json",
    "content": "{\n    \"protocol\": \"groth16\",\n    \"curve\": \"bls12381\",\n    \"nPublic\": 1,\n    \"vk_alpha_1\": [\n        \"617719894357822707200338965866967288645916822989814952192128521680407982056935061292695539424789514436737649020570\",\n        \"1775573569831396653264686560336309197621289936135046264821117695406799098608560841754755393604030414133628560466572\",\n        \"1\"\n    ],\n    \"vk_beta_2\": [\n        [\n            \"3190671720697032579966038958043749082431910320185488438584885357799875666538007862225898857680071255183618784274526\",\n            \"2109983048617590705863408957465158941209063119456198804564963336478451431685374476111629305482784904783586572857246\"\n        ],\n        [\n            \"1307607189905149666129102654072967019627092794077689555202822796396352439021424323347818324960573077183522770267856\",\n            \"1900404121357448535297505849416920425024592269018282269140428150423889516785732814217546769869760115347972284687857\"\n        ],\n        [\n            \"1\",\n            \"0\"\n        ]\n    ],\n    \"vk_gamma_2\": [\n        [\n            \"352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160\",\n            \"3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758\"\n        ],\n        [\n            \"1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905\",\n            \"927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582\"\n        ],\n        [\n            \"1\",\n            \"0\"\n        ]\n    ],\n    \"vk_delta_2\": [\n        [\n            \"366852083359495771420573803655070706723887233165902344758249134050725732074986801357894854373787524097680485812160\",\n            \"1929292879518777463856044488640461740981505725491596027554586896635088707623734426665110797692856487251503397957282\"\n        ],\n        [\n            \"2254598519443759139488766131014151518103540652139959875744365134034290926557579834892936284712306438078601592202835\",\n            \"1579781860493165881746712648978923866265169372051099801148285774757263488928119091040455043002626040812019987523163\"\n        ],\n        [\n            \"1\",\n            \"0\"\n        ]\n    ],\n    \"vk_alphabeta_12\": [\n        [\n            [\n                \"1452142021944451817001147821488760980628197809555746492149088759376801558507230381398112130922956796247321861289375\",\n                \"3589943335445990207300848887279844052457873229678183531370805993048668299080419850906570256571227243962847710761873\"\n            ],\n            [\n                \"3903597354592031103308309118871575021632884960350471330510988979702965789330630890059202001609171434068520258153205\",\n                \"3946350093536016351995160752026495035937348552583156252303497900799349531692051040596420119357283952583443910389762\"\n            ],\n            [\n                \"2102282561888264062210801164264241839369117163743635507322118155750136113340405089604922100303091868554501721762249\",\n                \"2531185738689051206532445179458651900005160607002689799912357857873389589160857097337310452692979772133435166849387\"\n            ]\n        ],\n        [\n            [\n                \"268035266762967876874392987406000236382149655324619726254104233887291204086099445046465766838845123428210938888504\",\n                \"2284065767947019642521131033343080546417534737660925549949366442700626920713795808783010752157627204943408136876028\"\n            ],\n            [\n                \"1076537136017235627643817565337814768374777902297407144864672924447764202619243468694678042650211399863336315675838\",\n                \"1887009084884823613240596596478048882143219870470500630710509802045379651327808154628725590953166551541512136377769\"\n            ],\n            [\n                \"1046436074149317708619564652103131188371298898561346600949516219491937906176848261764926236247040532660408816935149\",\n                \"2498548906947681374488377175516087586952508282368134324705625079446848595370708686705968001763117178823569586185480\"\n            ]\n        ]\n    ],\n    \"IC\": [\n        [\n            \"3038675585551733423759427014529506635383300842391718374851632488058684610686018372519161362761589617875149189018434\",\n            \"3457250587514594213032030450777853834958299643191424041917496003575595361031754963283792975531474621085487370891270\",\n            \"1\"\n        ],\n        [\n            \"2908373117630088213536346041612807972869015198725869057358798292417391140094075526116715756590056301255114140540096\",\n            \"2978460359983701297569278319168561969577969749822291955720738000037752496066084206945259159825701820797945902273048\",\n            \"1\"\n        ]\n    ]\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/snarkjs_vk_bn254.json",
    "content": "{\n    \"protocol\": \"groth16\",\n    \"curve\": \"bn128\",\n    \"nPublic\": 1,\n    \"vk_alpha_1\": [\n        \"20491192805390485299153009773594534940189261866228447918068658471970481763042\",\n        \"9383485363053290200918347156157836566562967994039712273449902621266178545958\",\n        \"1\"\n    ],\n    \"vk_beta_2\": [\n        [\n            \"6375614351688725206403948262868962793625744043794305715222011528459656738731\",\n            \"4252822878758300859123897981450591353533073413197771768651442665752259397132\"\n        ],\n        [\n            \"10505242626370262277552901082094356697409835680220590971873171140371331206856\",\n            \"21847035105528745403288232691147584728191162732299865338377159692350059136679\"\n        ],\n        [\n            \"1\",\n            \"0\"\n        ]\n    ],\n    \"vk_gamma_2\": [\n        [\n            \"10857046999023057135944570762232829481370756359578518086990519993285655852781\",\n            \"11559732032986387107991004021392285783925812861821192530917403151452391805634\"\n        ],\n        [\n            \"8495653923123431417604973247489272438418190587263600148770280649306958101930\",\n            \"4082367875863433681332203403145435568316851327593401208105741076214120093531\"\n        ],\n        [\n            \"1\",\n            \"0\"\n        ]\n    ],\n    \"vk_delta_2\": [\n        [\n            \"10857046999023057135944570762232829481370756359578518086990519993285655852781\",\n            \"11559732032986387107991004021392285783925812861821192530917403151452391805634\"\n        ],\n        [\n            \"8495653923123431417604973247489272438418190587263600148770280649306958101930\",\n            \"4082367875863433681332203403145435568316851327593401208105741076214120093531\"\n        ],\n        [\n            \"1\",\n            \"0\"\n        ]\n    ],\n    \"vk_alphabeta_12\": [\n        [\n            [\n                \"2029413683389138792403550203267699914886160938906632433982220835551125967885\",\n                \"21072700047562757817161031222997517981543347628379360635925549008442030252106\"\n            ],\n            [\n                \"5940354580057074848093997050200682056184807770593307860589430076672439820312\",\n                \"12156638873931618554171829126792193045421052652279363021382169897324752428276\"\n            ],\n            [\n                \"7898200236362823042373859371574133993780991612861777490112507062703164551277\",\n                \"7074218545237549455313236346927434013100842096812539264420499035217050630853\"\n            ]\n        ],\n        [\n            [\n                \"7077479683546002997211712695946002074877511277312570035766170199895071832130\",\n                \"10093483419865920389913245021038182291233451549023025229112148274109565435465\"\n            ],\n            [\n                \"4595479056700221319381530156280926371456704509942304414423590385166031118820\",\n                \"19831328484489333784475432780421641293929726139240675179672856274388269393268\"\n            ],\n            [\n                \"11934129596455521040620786944827826205713621633706285934057045369193958244500\",\n                \"8037395052364110730298837004334506829870972346962140206007064471173334027475\"\n            ]\n        ]\n    ],\n    \"IC\": [\n        [\n            \"3230230166848506278169341429844025995277520944155248223069557471517720414099\",\n            \"13103770257244981396389858672913686503786254567452595604017418062281627967708\",\n            \"1\"\n        ],\n        [\n            \"19371697418061315618343891460787183627139127309393053314424436252400705071207\",\n            \"9445383417235588302514232777371752216736256846043789115945856987874292878586\",\n            \"1\"\n        ]\n    ]\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/vk_bls.json",
    "content": "{\n    \"elliptic_curve_id\": \"bls12_381\",\n    \"verifying_key\": {\n        \"alpha_g1\": {\n            \"x\": \"0xfda482e4d7d7cfe718413cd03a290e7f48e6d18867caf21e74f594eedeead1ab2ccf6bf0ed52c492f683f27d6c72861\",\n            \"y\": \"0x4bd64182ba2f15d84b4d622a67cdbfe1ba25a8a416972129bdc05965421ef89412b831f7e6ddf612f3892b06997e696\"\n        },\n        \"beta_g2\": {\n            \"x\": [\n                \"0xa4aafdfdee1356d7089291430753ddc48bbe3dfee5677d9016b14645db6a1a623063b2c2261f53625d3bc80a6839dca\",\n                \"0x15d2ebb1584d1fc5c7e839cb5a2fdeb0c93da725ab2e89dc9f14d31ec3fd7a54c11b02df84e197ab492c02804b9d68b0\"\n            ],\n            \"y\": [\n                \"0x1064cc36c6f87308d58223eddb809fde1f0f345df537b21bf321187a6b25c03894402fc778584f59aed1223fe87c625b\",\n                \"0x54c52a9ef6c89facbef0d20c8c4b254403ef22effc3a8dccd06a5ad9e3c7f6a90ab356444f80191850b3fb6cadc64dd\"\n            ]\n        },\n        \"gamma_g2\": {\n            \"x\": [\n                \"0xdd0d7c6d60ac00708ff7db2c274f8bcf99c710a010e41a0221d9fa6582f8ab41f299a1daa65cdf007aef54c6f623dde\",\n                \"0x604b708bc781ae38a361b93451384c060e8865aff71dbefee8326798aab2bfea23775cc734de87c275c5ff8648ec130\"\n            ],\n            \"y\": [\n                \"0x1541ecff208d5a5cd2d552961c77b46d0593da85473e42c41b15cfdecac55c2f6881eaa3a6a2e609a74c6461dbb15b12\",\n                \"0x108c95049535bcd1117cdbdf6b8b64d4ead6109ba5c739e44c6c5689af7c6b120e3ab986699092f65f774234b7f31840\"\n            ]\n        },\n        \"delta_g2\": {\n            \"x\": [\n                \"0x18b219a74108de96a9519a60d0b71d6edfa740f665e34c84d83ce7d5ca555ae1cc54e5306295df8b9ffbb9f638117fb4\",\n                \"0xe3e7a8c90ba5b5e266fea7105f5d374324ad0e72809aeeda144ffba7defff7d45169d6f7e3c781dba158e67256dc98e\"\n            ],\n            \"y\": [\n                \"0x11b12761f310cbe4ba3e1ded446f45ca171a1edf9abe76b8a5afe44806a147a2c04a80ae04573d43941a95edd7fc0b3c\",\n                \"0x11ece09d0b6f1a1ea16238a512fe3d86972bfca288dc7d9b08a1e0e97cea1801e094fdc71af32f6be0d4fbaaa3a16480\"\n            ]\n        },\n        \"ic\": [\n            {\n                \"x\": \"0x126fbe91d07c71cd11847edc0855a100cf099f57330483371d3926283f7823c830469f8daea925952b1d5dcc848e1107\",\n                \"y\": \"0x11d4302c0095dfb2bcb31a448382ca23441bb4a34775829be81081ed3027415c05028dc0dffe1c953fd7a62db3ea0f7d\"\n            },\n            {\n                \"x\": \"0x17eb504b7c7c4fcec2570d705447e4279f17852eabd158fa2f62c85bb229d8c136b83c0846c87cd685c7c1d6fdcd1e9b\",\n                \"y\": \"0x682ec2d49889aa39ae6f079620cad3e73faf12d0844d15fed8dc9e752c0f5ec50f0bf391af88a58b9173f40990d461d\"\n            }\n        ]\n    }\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/vk_bn254.json",
    "content": "{\n    \"elliptic_curve_id\": \"bn254\",\n    \"verifying_key\": {\n        \"alpha_g1\": {\n            \"x\": \"0xef3cb41414ad20b4fc5891f6b41a263d9f0c0509ee5ab16f866ff6a33fb9e73\",\n            \"y\": \"0x1b30646c7d96cf7830a42b1f2f7c0527c38601f1030674b0f14cf7c67de5027b\"\n        },\n        \"beta_g2\": {\n            \"x\": [\n                \"0x21f7077b68f4faa9dcbfdc868e9a0b5c76eb0d62b919772a83b34a8bc1108489\",\n                \"0x8693a2418c12721dddb0d4f9f3811645c372de7400061b6c6cebc4b3b799bb2\"\n            ],\n            \"y\": [\n                \"0x3062e0c71d392fb15f33a8d7f87bf689709cb28f87d554e29dc92d92d1b0ce46\",\n                \"0x4976fda5a1cd2a69e5b4fd77116cf638be2063a3359e40d8f3e8ec0c90ffd90\"\n            ]\n        },\n        \"gamma_g2\": {\n            \"x\": [\n                \"0x3541dacedd860ef884359c76cc9c6b81d289d3389e732f5f87195d15a4ce637\",\n                \"0x2eb7d1fa8416da97272d9cc4aa2e71146c83c13be313e222b376d9a9da02f080\"\n            ],\n            \"y\": [\n                \"0x8dce093ad7f7fe20efcb8bbb160b0f2ecb7cd98a7d48b949e86c8b00eef73f9\",\n                \"0x29a4b793edc639746eb4af5910b954a713c49174d917839a146ea15cd7493f1d\"\n            ]\n        },\n        \"delta_g2\": {\n            \"x\": [\n                \"0x34fc9ba8eba1e49185580c9ee198f6cac8bc78463d786683ef471af4434acdc\",\n                \"0x17f115a16975c6f261912be284ecae3a3f0899bb161153d19ebc7f594246b9b0\"\n            ],\n            \"y\": [\n                \"0x17fd1ad43bbc8ef931c92abab72ef0ed83a3c195b4dbc7294e1eacf59b3e2054\",\n                \"0x1bd7d75bf918b6766ff9481052ddb780a4cc43da055b6e98c187b34ca3e7cd1b\"\n            ]\n        },\n        \"ic\": [\n            {\n                \"x\": \"0x124e30bf4dff3ae9c9da665a8bebfd01ce6489a462587fa0f6c879156e7390bc\",\n                \"y\": \"0x1fdc3a96cea49b085e101dd2383fdc600dcb4a3450c0471724e1b022791c7532\"\n            },\n            {\n                \"x\": \"0x164668f89d9d6c6126a8465790ba44ddb5716750edaa0ed100691cceb974c6a1\",\n                \"y\": \"0x1d9c7309625ec7cf153290e7b5c8497412386c61f3d9d0426a702f368be936da\"\n            }\n        ]\n    }\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/vk_risc0.json",
    "content": "{\n    \"elliptic_curve_id\": \"bn254\",\n    \"verifying_key\": {\n        \"alpha_g1\": {\n            \"x\": \"20491192805390485299153009773594534940189261866228447918068658471970481763042\",\n            \"y\": \"9383485363053290200918347156157836566562967994039712273449902621266178545958\"\n        },\n        \"beta_g2\": {\n            \"x\": [\n                \"6375614351688725206403948262868962793625744043794305715222011528459656738731\",\n                \"4252822878758300859123897981450591353533073413197771768651442665752259397132\"\n            ],\n            \"y\": [\n                \"10505242626370262277552901082094356697409835680220590971873171140371331206856\",\n                \"21847035105528745403288232691147584728191162732299865338377159692350059136679\"\n            ]\n        },\n        \"gamma_g2\": {\n            \"x\": [\n                \"10857046999023057135944570762232829481370756359578518086990519993285655852781\",\n                \"11559732032986387107991004021392285783925812861821192530917403151452391805634\"\n            ],\n            \"y\": [\n                \"8495653923123431417604973247489272438418190587263600148770280649306958101930\",\n                \"4082367875863433681332203403145435568316851327593401208105741076214120093531\"\n            ]\n        },\n        \"delta_g2\": {\n            \"x\": [\n                \"12043754404802191763554326994664886008979042643626290185762540825416902247219\",\n                \"1668323501672964604911431804142266013250380587483576094566949227275849579036\"\n            ],\n            \"y\": [\n                \"13740680757317479711909903993315946540841369848973133181051452051592786724563\",\n                \"7710631539206257456743780535472368339139328733484942210876916214502466455394\"\n            ]\n        },\n        \"ic\": [\n            {\n                \"x\": \"8446592859352799428420270221449902464741693648963397251242447530457567083492\",\n                \"y\": \"1064796367193003797175961162477173481551615790032213185848276823815288302804\"\n            },\n            {\n                \"x\": \"3179835575189816632597428042194253779818690147323192973511715175294048485951\",\n                \"y\": \"20895841676865356752879376687052266198216014795822152491318012491767775979074\"\n            },\n            {\n                \"x\": \"5332723250224941161709478398807683311971555792614491788690328996478511465287\",\n                \"y\": \"21199491073419440416471372042641226693637837098357067793586556692319371762571\"\n            },\n            {\n                \"x\": \"12457994489566736295787256452575216703923664299075106359829199968023158780583\",\n                \"y\": \"19706766271952591897761291684837117091856807401404423804318744964752784280790\"\n            },\n            {\n                \"x\": \"19617808913178163826953378459323299110911217259216006187355745713323154132237\",\n                \"y\": \"21663537384585072695701846972542344484111393047775983928357046779215877070466\"\n            },\n            {\n                \"x\": \"6834578911681792552110317589222010969491336870276623105249474534788043166867\",\n                \"y\": \"15060583660288623605191393599883223885678013570733629274538391874953353488393\"\n            }\n        ]\n    }\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/examples/vk_sp1.json",
    "content": "{\n    \"elliptic_curve_id\": \"bn254\",\n    \"verifying_key\": {\n        \"alpha_g1\": {\n            \"x\": \"20491192805390485299153009773594534940189261866228447918068658471970481763042\",\n            \"y\": \"9383485363053290200918347156157836566562967994039712273449902621266178545958\"\n        },\n        \"beta_g2\": {\n            \"x\": [\n                \"6375614351688725206403948262868962793625744043794305715222011528459656738731\",\n                \"4252822878758300859123897981450591353533073413197771768651442665752259397132\"\n            ],\n            \"y\": [\n                \"10505242626370262277552901082094356697409835680220590971873171140371331206856\",\n                \"21847035105528745403288232691147584728191162732299865338377159692350059136679\"\n            ]\n        },\n        \"gamma_g2\": {\n            \"x\": [\n                \"10857046999023057135944570762232829481370756359578518086990519993285655852781\",\n                \"11559732032986387107991004021392285783925812861821192530917403151452391805634\"\n            ],\n            \"y\": [\n                \"8495653923123431417604973247489272438418190587263600148770280649306958101930\",\n                \"4082367875863433681332203403145435568316851327593401208105741076214120093531\"\n            ]\n        },\n        \"delta_g2\": {\n            \"x\": [\n                \"1807939758600928081661535078044266309701426477869595321608690071623627252461\",\n                \"13017767206419180294867239590191240882490168779777616723978810680471506089190\"\n            ],\n            \"y\": [\n                \"10502989906366911348242388724733295820842209644634809310320863638233510108549\",\n                \"21180421563366853441821323225017992136002640878057833710059913133125356733516\"\n            ]\n        },\n        \"ic\": [\n            {\n                \"x\": \"17203997695518370725253383800612862082040222186834248316724952811913305748878\",\n                \"y\": \"282619892079818506885924724237935832196325815176482254129420869757043108110\"\n            },\n            {\n                \"x\": \"2763789253671512309630211343474627955637016507408470052385640371173442321228\",\n                \"y\": \"7070003421332099028511324531870215047017050364545890942981741487547942466073\"\n            },\n            {\n                \"x\": \"2223923876691923064813371578678400285087400227347901303400514986210692294428\",\n                \"y\": \"3228708299174762375496115493137156328822199374794870011715145604387710550517\"\n            }\n        ]\n    }\n}\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/generator.py",
    "content": "import os\nimport subprocess\nfrom pathlib import Path\n\nfrom garaga.curves import CurveID, ProofSystem\nfrom garaga.modulo_circuit_structs import G2Line, StructArray\nfrom garaga.precompiled_circuits.multi_miller_loop import precompute_lines\nfrom garaga.starknet.cli.utils import create_directory, get_package_version\nfrom garaga.starknet.constants import CAIRO_VERSION, STARKNET_FOUNDRY_VERSION\nfrom garaga.starknet.groth16_contract_generator.calldata import (\n    groth16_calldata_from_vk_and_proof,\n)\nfrom garaga.starknet.groth16_contract_generator.parsing_utils import (\n    Groth16Proof,\n    Groth16VerifyingKey,\n)\n\nECIP_OPS_CLASS_HASH = 0x396D5915ECF475AAB117BB25A0272B261E9E25FFE1C0CE05A51A3F77489C89E\n\n\ndef precompute_lines_from_vk(vk: Groth16VerifyingKey) -> StructArray:\n\n    # Precompute lines for fixed G2 points\n    lines = precompute_lines([vk.gamma, vk.delta])\n    precomputed_lines = StructArray(\n        name=\"lines\",\n        elmts=[\n            G2Line(name=f\"line{i}\", elmts=lines[i : i + 4])\n            for i in range(0, len(lines), 4)\n        ],\n    )\n\n    return precomputed_lines\n\n\ndef gen_test_file(\n    contract_name: str,\n    verifier_name: str,\n    system: ProofSystem,\n    verification_function_name: str,\n    package_name: str,\n    rpc_url: str = \"https://api.zan.top/public/starknet-sepolia/rpc/v0_10\",\n):\n    code = f\"\"\"\n//! # Starknet Verification Contract Tests\n//!\n//! This module contains comprehensive tests for the proof verification contract.\n//! The tests use Starknet Foundry's testing features to verify proofs.\n//!\n//! ## Test Strategy\n//! - Use real proof fixtures generated by the garaga CLI\n//! - Test both positive (valid proof) and negative (invalid proof) cases\n\nuse snforge_std::fs::{{FileTrait, read_txt}};\nuse snforge_std::{{DeclareResultTrait, declare}};\nuse {package_name}::{verifier_name}::{{\n    I{contract_name}LibraryDispatcher, I{contract_name}DispatcherTrait,\n}};\nuse starknet::ClassHash;\n\n/// Declare the {contract_name} contract for testing.\n///\n/// This function declares a new instance of the {contract_name} contract\n///\n/// # Arguments\n/// * `name` - The contract name to declare\n///\n/// # Returns\n/// * `ClassHash` - The class hash of the declared contract\n///\n/// # Example\n/// ```cairo\n/// let class_hash = declare_contract(\"{contract_name}\");\n/// let dispatcher = I{contract_name}LibraryDispatcher {{ class_hash }};\n/// ```\nfn declare_contract(name: ByteArray) -> ClassHash {{\n    let class_hash = *declare(name).unwrap().contract_class().class_hash;\n    class_hash\n}}\n\n/// Test the verification function {verification_function_name} with a valid proof.\n///\n/// This test demonstrates the complete verification flow:\n/// 1. Declare the verification contract\n/// 2. Load a pre-generated proof fixture\n/// 3. Verify the proof on-chain\n/// 4. Assert that verification succeeds\n///\n/// ## Test Setup\n/// - Uses fork testing against Sepolia testnet to access required declared contracts maintained by the garaga team\n/// - Loads proof calldata from `tests/proof_calldata.txt`\n/// - To generate the calldata, you can use the garaga CLI:\n/// ```bash\n/// garaga calldata\n///     --system {system.value}\n///     --vk path/to/vk\n///     --proof path/to/proof\n///     --public-inputs path/to/public_inputs\n///     --format snforge\n///     --output-path path/to/tests\n/// ```\n/// This will generate a file `proof_calldata.txt` in the specified output path.\n/// You can then use this file in the test.\n///\n/// ## Expected Behavior\n/// - The proof should verify successfully\n/// - The function should return Ok(public_inputs) containing the expected public inputs\n/// - No panics or assertion failures should occur\n#[test]\n#[fork(url: \"{rpc_url}\", block_tag: latest)]\nfn test_{verification_function_name}() {{\n    // Step 1: Declare the verification contract\n    let class_hash = declare_contract(\"{contract_name}\");\n    let dispatcher = I{contract_name}LibraryDispatcher {{ class_hash }};\n\n    // Step 2: Load the proof fixture generated by the script\n    // This file contains the {system.value} proof calldata formatted for Starknet\n    let file = FileTrait::new(\"tests/proof_calldata.txt\");\n    let calldata = read_txt(@file).span();\n\n    // Step 3: Verify the proof on-chain\n    // This calls the contract's {verification_function_name} function with the loaded proof data\n    let result = dispatcher.{verification_function_name}(calldata);\n\n    // Step 4: Assert that verification succeeded\n    // A valid proof should return Ok(public_inputs), not Err\n    assert(result.is_ok(), 'Proof verification failed');\n\n    // Optional: You can also verify the public inputs contain expected values\n    // let public_inputs = result.unwrap();\n    // assert(public_inputs.len() > 0, 'No public inputs');\n    // Additional assertions on the public input values can be added here\n}}\n\"\"\"\n    return code\n\n\ndef get_scarb_toml_file(package_name: str, cli_mode: bool, inlining_level: int = 2):\n    version = get_package_version()\n    header = f\"# Generated by Garaga version {version}\\n\"\n    if version == \"dev\":\n        suffix = \"\"\n    else:\n        suffix = ', tag = \"v' + version + '\"'\n    if cli_mode:\n        dep = 'git = \"https://github.com/keep-starknet-strange/garaga.git\"' + suffix\n    else:\n        dep = 'path = \"../../../\"'\n\n    return header + f\"\"\"[package]\nname = \"{package_name}\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n[dependencies]\ngaraga = {{ {dep} }}\nstarknet = \"{CAIRO_VERSION}\"\n\n[cairo]\nsierra-replace-ids = false\ninlining-strategy = {inlining_level}\n\n[dev-dependencies]\nsnforge_std = \"{STARKNET_FOUNDRY_VERSION}\"\nassert_macros = \"{CAIRO_VERSION}\"\n\n[[target.starknet-contract]]\ncasm = true\ncasm-add-pythonic-hints = true\n\"\"\"\n\n\ndef write_test_calldata_file(\n    output_folder_path: str,\n    vk: Groth16VerifyingKey,\n    proof: Groth16Proof,\n) -> None:\n    \"\"\"Write the test calldata file for a given verifying key and proof.\"\"\"\n    tests_dir = os.path.join(output_folder_path, \"tests\")\n    cd = groth16_calldata_from_vk_and_proof(vk, proof)\n    with open(os.path.join(tests_dir, \"proof_calldata.txt\"), \"w\") as f:\n        for x in cd[1:]:\n            f.write(f\"{hex(x)}\\n\")\n\n\ndef create_verifier_directory_structure(\n    output_folder_path: str, include_test_sample: bool = True\n) -> tuple[str, str]:\n    \"\"\"Create the standard directory structure for a verifier contract.\n\n    Returns:\n        tuple: (src_dir, tests_dir) paths\n    \"\"\"\n    create_directory(output_folder_path)\n    src_dir = os.path.join(output_folder_path, \"src\")\n    tests_dir = (\n        os.path.join(output_folder_path, \"tests\") if include_test_sample else None\n    )\n    create_directory(src_dir)\n    if include_test_sample:\n        create_directory(tests_dir)\n    return src_dir, tests_dir\n\n\ndef write_tool_versions_file(output_folder_path: str) -> None:\n    \"\"\"Write the .tool-versions file.\"\"\"\n    with open(os.path.join(output_folder_path, \".tool-versions\"), \"w\") as f:\n        f.write(f\"scarb {CAIRO_VERSION}\\n\")\n        f.write(f\"starknet-foundry {STARKNET_FOUNDRY_VERSION}\\n\")\n\n\ndef write_lib_cairo_file(src_dir: str, modules: list[str] = None) -> None:\n    \"\"\"Write the lib.cairo file with specified modules.\"\"\"\n    if modules is None:\n        modules = [\"groth16_verifier\", \"groth16_verifier_constants\"]\n\n    module_imports = \"\\n\".join(f\"pub mod {module};\" for module in modules)\n    with open(os.path.join(src_dir, \"lib.cairo\"), \"w\") as f:\n        version = get_package_version()\n        header = f\"// Generated by Garaga version {version}\\n\"\n        f.write(header + f\"\\n{module_imports}\\n\")\n\n\ndef write_verifier_files(\n    output_folder_path: str,\n    package_name: str,\n    constants_code: str | None,\n    contract_code: str,\n    contract_cairo_name: str,\n    verification_function_name: str,\n    system: ProofSystem,\n    cli_mode: bool = False,\n    circuits_code: str | None = None,\n    modules: list[str] = None,\n    constants_filename: str = \"groth16_verifier_constants.cairo\",\n    contract_filename: str = \"groth16_verifier.cairo\",\n    circuits_filename: str | None = None,\n    include_test_sample: bool = True,\n    constants_output_path: str | None = None,\n) -> None:\n    \"\"\"Write all the standard verifier files (directories, constants, contract, scarb.toml, lib.cairo, test files).\"\"\"\n\n    # Create directory structure\n    src_dir, tests_dir = create_verifier_directory_structure(\n        output_folder_path, include_test_sample\n    )\n\n    # Write tool versions\n    write_tool_versions_file(output_folder_path)\n\n    # Build header once for Cairo files\n    version = get_package_version()\n    header_cairo = f\"// Generated by Garaga version {version}\\n\"\n\n    # Write Scarb.toml\n    with open(os.path.join(output_folder_path, \"Scarb.toml\"), \"w\") as f:\n        f.write(get_scarb_toml_file(package_name, cli_mode))\n\n    # Write lib.cairo\n    write_lib_cairo_file(src_dir, modules)\n\n    # Write constants file (if requested)\n    if constants_code is not None:\n        target_constants_path = constants_output_path or os.path.join(\n            src_dir, constants_filename\n        )\n        target_constants_dir = os.path.dirname(target_constants_path)\n        os.makedirs(target_constants_dir, exist_ok=True)\n        with open(target_constants_path, \"w\") as f:\n            f.write(header_cairo + constants_code)\n\n        subprocess.run([\"scarb\", \"fmt\", \".\"], cwd=target_constants_dir, check=True)\n\n    # Write contract file\n    with open(os.path.join(src_dir, contract_filename), \"w\") as f:\n        f.write(header_cairo + contract_code)\n\n    # Write circuits file if provided\n    if circuits_code and circuits_filename:\n        with open(os.path.join(src_dir, circuits_filename), \"w\") as f:\n            f.write(header_cairo + circuits_code)\n\n    # Write test file.\n    if include_test_sample:\n        with open(os.path.join(tests_dir, \"test_contract.cairo\"), \"w\") as f:\n            f.write(\n                header_cairo\n                + gen_test_file(\n                    contract_cairo_name,\n                    contract_filename.removesuffix(\".cairo\"),\n                    system,\n                    verification_function_name,\n                    package_name,\n                )\n            )\n    subprocess.run([\"scarb\", \"fmt\", \".\"], cwd=output_folder_path, check=True)\n\n\ndef write_test_calldata_file_generic(\n    output_folder_path: str,\n    system: ProofSystem,\n    vk_path: str,\n    proof_path: str,\n    public_inputs_path: str = None,\n) -> None:\n    \"\"\"Write the test calldata file for any proof system using get_calldata_generic.\"\"\"\n    from pathlib import Path as PathType\n\n    from garaga.starknet.cli.verify import get_calldata_generic\n\n    tests_dir = os.path.join(output_folder_path, \"tests\")\n    cd = get_calldata_generic(\n        system,\n        PathType(vk_path),\n        PathType(proof_path),\n        PathType(public_inputs_path) if public_inputs_path else None,\n    )\n    with open(os.path.join(tests_dir, \"proof_calldata.txt\"), \"w\") as f:\n        for x in cd[1:]:\n            f.write(f\"{hex(x)}\\n\")\n\n\ndef gen_groth16_verifier(\n    vk: str | Path | Groth16VerifyingKey,\n    output_folder_path: str,\n    output_folder_name: str,\n    ecip_class_hash: int = ECIP_OPS_CLASS_HASH,\n    cli_mode: bool = False,\n    include_test_sample: bool = True,\n) -> str:\n    if isinstance(vk, (Path, str)):\n        vk = Groth16VerifyingKey.from_json(vk)\n    else:\n        vk = vk\n\n    curve_id = vk.curve_id\n    if cli_mode:\n        output_folder_name = output_folder_name\n    else:\n        output_folder_name = output_folder_name + f\"_{curve_id.name.lower()}\"\n    output_folder_path = os.path.join(output_folder_path, output_folder_name)\n\n    precomputed_lines = precompute_lines_from_vk(vk)\n    verification_function_name = f\"verify_groth16_proof_{curve_id.name.lower()}\"\n    contract_cairo_name = f\"Groth16Verifier{curve_id.name}\"\n    constants_code = f\"\"\"\n    use garaga::definitions::{{G1Point, G2Point, E12D, G2Line, u384}};\n    {f\"use garaga::definitions::u288;\" if curve_id!=CurveID.BLS12_381 else \"\"}\n    use garaga::groth16::Groth16VerifyingKey;\n\n    pub const N_PUBLIC_INPUTS:usize = {len(vk.ic)-1};\n    {vk.serialize_to_cairo()}\n    pub const precomputed_lines: [G2Line<{\"u384\" if curve_id==CurveID.BLS12_381 else \"u288\"}>; {len(precomputed_lines)//4}] = {precomputed_lines.serialize(raw=True, const=True)};\n    \"\"\"\n    contract_code = f\"\"\"\nuse super::groth16_verifier_constants::{{N_PUBLIC_INPUTS, vk, ic, precomputed_lines}};\n\n#[starknet::interface]\npub trait I{contract_cairo_name}<TContractState> {{\n    fn {verification_function_name}(\n        self: @TContractState,\n        full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u256>, felt252>;\n}}\n\n#[starknet::contract]\nmod {contract_cairo_name} {{\n    use starknet::SyscallResultTrait;\n    use garaga::definitions::{{G1Point, G1G2Pair}};\n    use garaga::groth16::{{multi_pairing_check_{curve_id.name.lower()}_3P_2F_with_extra_miller_loop_result, Groth16ProofRawTrait}};\n    use garaga::ec_ops::{{G1PointTrait, ec_safe_add}};\n    use garaga::utils::calldata::{{deserialize_full_proof_with_hints_{curve_id.name.lower()}}};\n    use super::{{N_PUBLIC_INPUTS, vk, ic, precomputed_lines}};\n\n    const ECIP_OPS_CLASS_HASH: felt252 = {hex(ecip_class_hash)};\n\n    #[storage]\n    struct Storage {{}}\n\n    #[abi(embed_v0)]\n    impl IGroth16Verifier{curve_id.name} of super::IGroth16Verifier{curve_id.name}<ContractState> {{\n        fn {verification_function_name}(\n            self: @ContractState,\n            full_proof_with_hints: Span<felt252>,\n        ) -> Result<Span<u256>, felt252> {{\n            // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n            // This function returns Result::Ok(public_inputs) if the proof is valid.\n            // If the proof is invalid, it returns Result::Err(error).\n            // Read the documentation to learn how to generate the full_proof_with_hints array given a proof and a verifying key.\n            let fph = deserialize_full_proof_with_hints_{curve_id.name.lower()}(full_proof_with_hints);\n            let groth16_proof = fph.groth16_proof;\n            let mpcheck_hint = fph.mpcheck_hint;\n            let msm_hint = fph.msm_hint;\n\n            groth16_proof.raw.check_proof_points({curve_id.value});\n\n            let ic = ic.span();\n\n            let vk_x: G1Point = match ic.len() {{\n                0 => panic!(\"Malformed VK\"),\n                1 => *ic.at(0),\n                _ => {{\n                    // Start serialization with the hint array directly to avoid copying it.\n                    let mut msm_calldata: Array<felt252> = array![];\n                    // Add the points from VK and public inputs to the proof.\n                    Serde::serialize(@ic.slice(1, N_PUBLIC_INPUTS), ref msm_calldata);\n                    Serde::serialize(@groth16_proof.public_inputs, ref msm_calldata);\n                    // Complete with the curve indentifier ({curve_id.value} for {curve_id.name}):\n                    msm_calldata.append({curve_id.value});\n                    // Add the hint array.\n                    for x in msm_hint {{\n                        msm_calldata.append(*x);\n                    }}\n\n                    // Call the multi scalar multiplication endpoint on the Garaga ECIP ops contract\n                    // to obtain vk_x.\n                    let mut _vx_x_serialized = starknet::syscalls::library_call_syscall(\n                        ECIP_OPS_CLASS_HASH.try_into().unwrap(),\n                        selector!(\"msm_g1\"),\n                        msm_calldata.span()\n                    )\n                        .unwrap_syscall();\n\n                    ec_safe_add(\n                        Serde::<G1Point>::deserialize(ref _vx_x_serialized).unwrap(), *ic.at(0), {curve_id.value}\n                    )\n                }}\n            }};\n            // Perform the pairing check.\n            let check = multi_pairing_check_{curve_id.name.lower()}_3P_2F_with_extra_miller_loop_result(\n                G1G2Pair {{ p: vk_x, q: vk.gamma_g2 }},\n                G1G2Pair {{ p: groth16_proof.raw.c, q: vk.delta_g2 }},\n                G1G2Pair {{ p: groth16_proof.raw.a.negate({curve_id.value}), q: groth16_proof.raw.b }},\n                vk.alpha_beta_miller_loop_result,\n                precomputed_lines.span(),\n                mpcheck_hint,\n            );\n            match check {{\n                Result::Ok(_) => Result::Ok(groth16_proof.public_inputs),\n                Result::Err(error) => Result::Err(error),\n            }}\n        }}\n    }}\n}}\n\n\n    \"\"\"\n\n    # Use the new reusable function to write all files\n    write_verifier_files(\n        output_folder_path,\n        output_folder_name,\n        constants_code,\n        contract_code,\n        contract_cairo_name,\n        verification_function_name,\n        ProofSystem.Groth16,\n        cli_mode,\n        include_test_sample=include_test_sample,\n    )\n\n    return constants_code\n\n\nif __name__ == \"__main__\":\n\n    EXAMPLES_FOLDER = \"hydra/garaga/starknet/groth16_contract_generator/examples\"\n    vk_paths = [\n        os.path.join(EXAMPLES_FOLDER, \"vk_bn254.json\"),\n        os.path.join(EXAMPLES_FOLDER, \"vk_bls.json\"),\n    ]\n    proof_paths = [\n        os.path.join(EXAMPLES_FOLDER, \"proof_bn254.json\"),\n        os.path.join(EXAMPLES_FOLDER, \"proof_bls.json\"),\n    ]\n\n    CONTRACTS_FOLDER = \"src/contracts/autogenerated/\"  # Do not change this\n\n    FOLDER_NAME = \"groth16_example\"  # '_curve_id' is appended in the end.\n\n    def _generate_verifier(vk_path):\n        try:\n            gen_groth16_verifier(\n                vk_path, CONTRACTS_FOLDER, FOLDER_NAME, ECIP_OPS_CLASS_HASH\n            )\n        except Exception as e:\n            print(f\"An error occurred: {e}\")\n            raise e\n\n    for vk_path in vk_paths:\n        _generate_verifier(vk_path)\n\n    FOLDER_NAMES = [f\"groth16_example_bn254\", \"groth16_example_bls12_381\"]\n    for contract_name, vk_path, proof_path in zip(FOLDER_NAMES, vk_paths, proof_paths):\n        vk = Groth16VerifyingKey.from_json(vk_path)\n        proof = Groth16Proof.from_json(proof_path=proof_path)\n        output_folder_path = os.path.join(CONTRACTS_FOLDER, contract_name)\n        write_test_calldata_file_generic(\n            output_folder_path,\n            system=ProofSystem.Groth16,\n            vk_path=vk_path,\n            proof_path=proof_path,\n        )\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/generator_risc0.py",
    "content": "import os\n\nfrom garaga.curves import ProofSystem\nfrom garaga.modulo_circuit_structs import G1PointCircuit\nfrom garaga.starknet.constants import RISC0_RELEASE_VERSION\nfrom garaga.starknet.groth16_contract_generator.generator import (\n    ECIP_OPS_CLASS_HASH,\n    precompute_lines_from_vk,\n    write_test_calldata_file_generic,\n    write_verifier_files,\n)\nfrom garaga.starknet.groth16_contract_generator.parsing_utils import (\n    RISC0_BN254_CONTROL_ID,\n    RISC0_CONTROL_ROOT,\n    Groth16Proof,\n    Groth16VerifyingKey,\n    split_digest,\n)\n\nPACKAGE_NAME = \"risc0_verifier\"\n\n\ndef gen_risc0_groth16_verifier(\n    vk_path: str,\n    output_folder_path: str,\n    output_folder_name: str,\n    ecip_class_hash: int = ECIP_OPS_CLASS_HASH,\n    control_root: int = RISC0_CONTROL_ROOT,\n    control_id: int = RISC0_BN254_CONTROL_ID,\n    cli_mode: bool = False,\n) -> str:\n    vk = Groth16VerifyingKey.from_json(vk_path)\n    curve_id = vk.curve_id\n    output_folder_name = output_folder_name + f\"_{curve_id.name.lower()}\"\n    output_folder_path = os.path.join(output_folder_path, output_folder_name)\n\n    precomputed_lines = precompute_lines_from_vk(vk)\n    CONTROL_ROOT_0, CONTROL_ROOT_1 = split_digest(control_root)\n\n    T = G1PointCircuit.from_G1Point(\n        name=\"T\",\n        point=(vk.ic[1].scalar_mul(CONTROL_ROOT_0))\n        .add(vk.ic[2].scalar_mul(CONTROL_ROOT_1))\n        .add(vk.ic[5].scalar_mul(control_id).add(vk.ic[0])),\n    )\n\n    contract_cairo_name = f\"Risc0Groth16Verifier{curve_id.name}\"\n    constants_code = f\"\"\"\n    use garaga::definitions::{{G1Point, G2Point, E12D, G2Line, u384, u288}};\n    use garaga::groth16::Groth16VerifyingKey;\n\n    pub const N_FREE_PUBLIC_INPUTS:usize = 2;\n    // RISC0 version tag : {RISC0_RELEASE_VERSION}\n    // CONTROL ROOT USED : {hex(control_root)}\n    // \\t CONTROL_ROOT_0 : {hex(CONTROL_ROOT_0)}\n    // \\t CONTROL_ROOT_1 : {hex(CONTROL_ROOT_1)}\n    // BN254 CONTROL ID USED : {hex(control_id)}\n    pub const T: G1Point = {T.serialize(raw=True)}; // IC[0] + IC[1] * CONTROL_ROOT_0 + IC[2] * CONTROL_ROOT_1 + IC[5] * BN254_CONTROL_ID\n    {vk.serialize_to_cairo()}\n    pub const precomputed_lines: [G2Line<u288>; {len(precomputed_lines)//4}] = {precomputed_lines.serialize(raw=True, const=True)};\n    \"\"\"\n    verification_function_name = f\"verify_r0_groth16_proof_{curve_id.name.lower()}\"\n\n    contract_code = f\"\"\"\nuse super::groth16_verifier_constants::{{N_FREE_PUBLIC_INPUTS, vk, ic, precomputed_lines, T}};\n\n#[starknet::interface]\npub trait IRisc0Groth16Verifier{curve_id.name}<TContractState> {{\n    fn {verification_function_name}(\n        self: @TContractState,\n        full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u8>, felt252>;\n}}\n\n#[starknet::contract]\nmod Risc0Groth16Verifier{curve_id.name} {{\n    use starknet::SyscallResultTrait;\n    use garaga::definitions::{{G1Point, G1G2Pair}};\n    use garaga::groth16::{{multi_pairing_check_{curve_id.name.lower()}_3P_2F_with_extra_miller_loop_result, Groth16ProofRawTrait}};\n    use garaga::ec_ops::{{G1PointTrait, ec_safe_add}};\n    use garaga::apps::risc0::{{compute_receipt_claim, journal_sha256, deserialize_full_proof_with_hints_risc0}};\n    use super::{{N_FREE_PUBLIC_INPUTS, vk, ic, precomputed_lines, T}};\n\n    const ECIP_OPS_CLASS_HASH: felt252 = {hex(ecip_class_hash)};\n\n    #[storage]\n    struct Storage {{}}\n\n    #[abi(embed_v0)]\n    impl IRisc0Groth16Verifier{curve_id.name} of super::IRisc0Groth16Verifier{curve_id.name}<ContractState> {{\n        fn {verification_function_name}(\n            self: @ContractState,\n            full_proof_with_hints: Span<felt252>,\n        ) -> Result<Span<u8>, felt252> {{\n            // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n            // This function returns Result::Ok(public_inputs) if the proof is valid.\n            // If the proof is invalid, it returns Result::Err(error).\n            // Read the documentation to learn how to generate the full_proof_with_hints array given a proof and a verifying key.\n\n            let fph = deserialize_full_proof_with_hints_risc0(full_proof_with_hints);\n\n            let groth16_proof = fph.groth16_proof;\n            let image_id = fph.image_id;\n            let journal = fph.journal;\n            let mpcheck_hint = fph.mpcheck_hint;\n            let msm_hint = fph.msm_hint;\n\n            groth16_proof.check_proof_points({curve_id.value});\n\n            let ic = ic.span();\n\n            let journal_digest = journal_sha256(journal);\n            let claim_digest = compute_receipt_claim(image_id, journal_digest);\n\n            // Start serialization with the hint array directly to avoid copying it.\n            let mut msm_calldata: Array<felt252> = array![];\n            // Add the points from VK relative to the non-constant public inputs.\n            Serde::serialize(@ic.slice(3, N_FREE_PUBLIC_INPUTS), ref msm_calldata);\n            // Add the claim digest as u256 scalars for the msm.\n            msm_calldata.append(2);\n            msm_calldata.append(claim_digest.low.into());\n            msm_calldata.append(0);\n            msm_calldata.append(claim_digest.high.into());\n            msm_calldata.append(0);\n            // Complete with the curve indentifier ({curve_id.value} for {curve_id.name}):\n            msm_calldata.append({curve_id.value});\n            // Add the hint array.\n            for x in msm_hint {{\n                msm_calldata.append(*x);\n            }}\n\n            // Call the multi scalar multiplication endpoint on the Garaga ECIP ops contract\n            // to obtain claim0 * IC[3] + claim1 * IC[4].\n            let mut _msm_result_serialized = starknet::syscalls::library_call_syscall(\n                ECIP_OPS_CLASS_HASH.try_into().unwrap(),\n                selector!(\"msm_g1\"),\n                msm_calldata.span()\n            )\n                .unwrap_syscall();\n\n            // Finalize vk_x computation by adding the precomputed T point.\n            let vk_x = ec_safe_add(\n                T, Serde::<G1Point>::deserialize(ref _msm_result_serialized).unwrap(), {curve_id.value}\n            );\n\n            // Perform the pairing check.\n            let check = multi_pairing_check_{curve_id.name.lower()}_3P_2F_with_extra_miller_loop_result(\n                G1G2Pair {{ p: vk_x, q: vk.gamma_g2 }},\n                G1G2Pair {{ p: groth16_proof.c, q: vk.delta_g2 }},\n                G1G2Pair {{ p: groth16_proof.a.negate({curve_id.value}), q: groth16_proof.b }},\n                vk.alpha_beta_miller_loop_result,\n                precomputed_lines.span(),\n                mpcheck_hint,\n            );\n            match check {{\n                Result::Ok(_) => Result::Ok(journal),\n                Result::Err(error) => Result::Err(error),\n            }}\n        }}\n    }}\n}}\n    \"\"\"\n\n    # Use the reusable function to write all files\n    write_verifier_files(\n        output_folder_path,\n        output_folder_name,\n        constants_code,\n        contract_code,\n        contract_cairo_name,\n        verification_function_name,\n        ProofSystem.Groth16,\n        cli_mode,\n    )\n\n    return constants_code\n\n\nif __name__ == \"__main__\":\n    pass\n\n    RISCO_VK_PATH = (\n        \"hydra/garaga/starknet/groth16_contract_generator/examples/vk_risc0.json\"\n    )\n    PROOF_PATH = (\n        \"hydra/garaga/starknet/groth16_contract_generator/examples/proof_risc0.json\"\n    )\n\n    CONTRACTS_FOLDER = \"src/contracts/autogenerated/\"  # Do not change this\n\n    FOLDER_NAME = \"risc0_verifier\"  # '_curve_id' is appended in the end.\n\n    gen_risc0_groth16_verifier(\n        RISCO_VK_PATH, CONTRACTS_FOLDER, FOLDER_NAME, ECIP_OPS_CLASS_HASH\n    )\n\n    vk = Groth16VerifyingKey.from_json(file_path=RISCO_VK_PATH)\n    proof = Groth16Proof.from_json(proof_path=PROOF_PATH)\n\n    # Generate the calldata and write test calldata file:\n    output_folder_path = os.path.join(\n        CONTRACTS_FOLDER, f\"{FOLDER_NAME}_{vk.curve_id.name.lower()}\"\n    )\n    write_test_calldata_file_generic(\n        output_folder_path,\n        system=ProofSystem.Groth16,  # RISC0 uses Groth16\n        vk_path=RISCO_VK_PATH,\n        proof_path=PROOF_PATH,\n    )\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/generator_sp1.py",
    "content": "import os\nfrom textwrap import dedent\n\nfrom garaga.curves import ProofSystem\nfrom garaga.starknet.groth16_contract_generator.generator import (\n    ECIP_OPS_CLASS_HASH,\n    precompute_lines_from_vk,\n    write_test_calldata_file_generic,\n    write_verifier_files,\n)\nfrom garaga.starknet.groth16_contract_generator.parsing_utils import (\n    Groth16Proof,\n    Groth16VerifyingKey,\n)\n\n\ndef gen_sp1_groth16_verifier(\n    vk_path: str,\n    output_folder_path: str,\n    output_folder_name: str,\n    ecip_class_hash: int = ECIP_OPS_CLASS_HASH,\n    cli_mode: bool = False,\n) -> str:\n    vk = Groth16VerifyingKey.from_json(vk_path)\n    curve_id = vk.curve_id\n    output_folder_name = output_folder_name + f\"_{curve_id.name.lower()}\"\n    output_folder_path = os.path.join(output_folder_path, output_folder_name)\n\n    precomputed_lines = precompute_lines_from_vk(vk)\n\n    contract_cairo_name = f\"SP1Groth16Verifier{curve_id.name}\"\n    constants_code = dedent(f\"\"\"\n            use garaga::definitions::{{G1Point, G2Point, E12D, G2Line, u384, u288}};\n            use garaga::groth16::Groth16VerifyingKey;\n\n            pub const N_PUBLIC_INPUTS: usize = {len(vk.ic) - 1};\n            {vk.serialize_to_cairo()}\n            pub const precomputed_lines: [G2Line<u288>; {len(precomputed_lines) // 4}] = {precomputed_lines.serialize(raw=True, const=True)};\n            \"\"\").strip() + \"\\n\"\n    verification_function_name = f\"verify_sp1_groth16_proof_{curve_id.name.lower()}\"\n    verification_function_name_u32 = (\n        f\"verify_sp1_groth16_proof_{curve_id.name.lower()}_u32\"\n    )\n\n    contract_code = dedent(f\"\"\"\n            #[starknet::interface]\n            pub trait ISP1Groth16Verifier{curve_id.name}<TContractState> {{\n                fn {verification_function_name}(\n                    self: @TContractState,\n                    full_proof_with_hints: Span<felt252>,\n                ) -> Result<(u256, Span<u256>), felt252>;\n                fn {verification_function_name_u32}(\n                    self: @TContractState,\n                    full_proof_with_hints: Span<felt252>,\n                ) -> Result<(u256, Span<u32>), felt252>;\n            }}\n\n            #[starknet::contract]\n            mod SP1Groth16Verifier{curve_id.name} {{\n                use starknet::SyscallResultTrait;\n                use garaga::definitions::{{G1Point, G1G2Pair}};\n                use garaga::groth16::{{multi_pairing_check_{curve_id.name.lower()}_3P_2F_with_extra_miller_loop_result, Groth16ProofRawTrait}};\n                use garaga::ec_ops::{{G1PointTrait, ec_safe_add}};\n                use garaga::apps::sp1::{{deserialize_full_proof_with_hints_sp1, process_public_inputs_sp1}};\n                use garaga::apps::sp1_constants::{{vk, ic, precomputed_lines, N_PUBLIC_INPUTS}};\n\n                const ECIP_OPS_CLASS_HASH: felt252 = {hex(ecip_class_hash)};\n\n                #[storage]\n                struct Storage {{}}\n\n                /// Internal helper function that performs the core SP1 Groth16 verification.\n                /// Returns (vkey, public_inputs_u256, public_inputs_u32) on success.\n                fn verify_sp1_groth16_proof_inner(\n                    full_proof_with_hints: Span<felt252>,\n                ) -> Result<(u256, Span<u256>, Span<u32>), felt252> {{\n                    // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n                    // This function returns Result::Ok((vkey, public_inputs_u256, public_inputs_u32)) if the proof is valid.\n                    // If the proof is invalid, it returns Result::Err(error).\n                    // Read the documentation to learn how to generate the full_proof_with_hints array given a proof and a verifying key.\n\n                    let fph = deserialize_full_proof_with_hints_sp1(full_proof_with_hints);\n                    let groth16_proof = fph.groth16_proof;\n                    let vkey = fph.vkey;\n                    let public_inputs_sp1 = fph.public_inputs_sp1;\n                    let mpcheck_hint = fph.mpcheck_hint;\n                    let msm_hint = fph.msm_hint;\n\n                    groth16_proof.check_proof_points({curve_id.value});\n\n                    let ic = ic.span();\n\n                    let public_inputs_u32 = public_inputs_sp1.span();\n                    let (pub_inputs_256, pub_input_hash): (Span<u256>, u256) = process_public_inputs_sp1(public_inputs_sp1);\n\n                    let vk_x: G1Point = match ic.len() {{\n                        0 => panic!(\"Malformed VK\"),\n                        1 => *ic.at(0),\n                        _ => {{\n                            let mut msm_calldata: Array<felt252> = array![];\n                            // Add the points from VK and public inputs to the proof.\n                            Serde::serialize(@ic.slice(1, N_PUBLIC_INPUTS), ref msm_calldata);\n                            // Serialize public inputs as u256 array.\n                            Serde::serialize(@N_PUBLIC_INPUTS, ref msm_calldata);\n                            Serde::serialize(@vkey, ref msm_calldata);\n                            Serde::serialize(@pub_input_hash, ref msm_calldata);\n                            // Complete with the curve indentifier ({curve_id.value} for {curve_id.name}):\n                            msm_calldata.append({curve_id.value});\n                            // Add the hint array.\n                            for x in msm_hint {{\n                                msm_calldata.append(*x);\n                            }}\n\n                            // Call the multi scalar multiplication endpoint on the Garaga ECIP ops contract\n                            // to obtain vk_x.\n                            let mut _vx_x_serialized = starknet::syscalls::library_call_syscall(\n                                ECIP_OPS_CLASS_HASH.try_into().unwrap(),\n                                selector!(\"msm_g1\"),\n                                msm_calldata.span()\n                            )\n                                .unwrap_syscall();\n\n                            ec_safe_add(\n                                Serde::<G1Point>::deserialize(ref _vx_x_serialized).unwrap(), *ic.at(0), {curve_id.value}\n                            )\n                        }}\n                    }};\n                    // Perform the pairing check.\n                    let check = multi_pairing_check_{curve_id.name.lower()}_3P_2F_with_extra_miller_loop_result(\n                        G1G2Pair {{ p: vk_x, q: vk.gamma_g2 }},\n                        G1G2Pair {{ p: groth16_proof.c, q: vk.delta_g2 }},\n                        G1G2Pair {{ p: groth16_proof.a.negate({curve_id.value}), q: groth16_proof.b }},\n                        vk.alpha_beta_miller_loop_result,\n                        precomputed_lines.span(),\n                        mpcheck_hint,\n                    );\n                    match check {{\n                        Result::Ok(_) => Result::Ok((vkey, pub_inputs_256, public_inputs_u32)),\n                        Result::Err(error) => Result::Err(error),\n                    }}\n                }}\n\n                #[abi(embed_v0)]\n                impl ISP1Groth16Verifier{curve_id.name} of super::ISP1Groth16Verifier{curve_id.name}<ContractState> {{\n                    fn {verification_function_name}(\n                        self: @ContractState,\n                        full_proof_with_hints: Span<felt252>,\n                    ) -> Result<(u256, Span<u256>), felt252> {{\n                        match verify_sp1_groth16_proof_inner(full_proof_with_hints) {{\n                            Result::Ok((vkey, pub_inputs_256, _)) => Result::Ok((vkey, pub_inputs_256)),\n                            Result::Err(error) => Result::Err(error),\n                        }}\n                    }}\n\n                    fn {verification_function_name_u32}(\n                        self: @ContractState,\n                        full_proof_with_hints: Span<felt252>,\n                    ) -> Result<(u256, Span<u32>), felt252> {{\n                        match verify_sp1_groth16_proof_inner(full_proof_with_hints) {{\n                            Result::Ok((vkey, _, pub_inputs_u32)) => Result::Ok((vkey, pub_inputs_u32)),\n                            Result::Err(error) => Result::Err(error),\n                        }}\n                    }}\n                }}\n            }}\n            \"\"\").strip() + \"\\n\"\n\n    # Use the reusable function to write all files\n    write_verifier_files(\n        output_folder_path,\n        output_folder_name,\n        constants_code,\n        contract_code,\n        contract_cairo_name,\n        verification_function_name,\n        ProofSystem.Groth16,\n        cli_mode,\n        modules=[\"groth16_verifier\"],\n        constants_output_path=os.path.join(\"src\", \"src\", \"apps\", \"sp1_constants.cairo\"),\n    )\n\n    return constants_code\n\n\nif __name__ == \"__main__\":\n    pass\n\n    SP1_VK_PATH = (\n        \"hydra/garaga/starknet/groth16_contract_generator/examples/vk_sp1.json\"\n    )\n    PROOF_PATH = (\n        \"hydra/garaga/starknet/groth16_contract_generator/examples/proof_sp1.json\"\n    )\n\n    CONTRACTS_FOLDER = \"src/contracts/autogenerated/\"  # Do not change this\n\n    FOLDER_NAME = \"sp1_verifier\"  # '_curve_id' is appended in the end.\n\n    gen_sp1_groth16_verifier(\n        SP1_VK_PATH, CONTRACTS_FOLDER, FOLDER_NAME, ECIP_OPS_CLASS_HASH\n    )\n\n    # Check if proof file exists and generate calldata if it does\n    if os.path.exists(PROOF_PATH):\n        vk = Groth16VerifyingKey.from_json(file_path=SP1_VK_PATH)\n        proof = Groth16Proof.from_json(proof_path=PROOF_PATH)\n\n        # Generate the calldata and write test calldata file:\n        output_folder_path = os.path.join(\n            CONTRACTS_FOLDER, f\"{FOLDER_NAME}_{vk.curve_id.name.lower()}\"\n        )\n        write_test_calldata_file_generic(\n            output_folder_path,\n            system=ProofSystem.Groth16,  # SP1 uses Groth16\n            vk_path=SP1_VK_PATH,\n            proof_path=PROOF_PATH,\n        )\n    else:\n        print(\n            f\"Warning: Proof file {PROOF_PATH} not found. Skipping calldata generation.\"\n        )\n"
  },
  {
    "path": "hydra/garaga/starknet/groth16_contract_generator/parsing_utils.py",
    "content": "import codecs\nimport dataclasses\nimport hashlib\nimport json\nimport os\nfrom pathlib import Path\nfrom typing import Any, List\n\nfrom garaga.curves import CURVES, CurveID\nfrom garaga.hints import io\nfrom garaga.hints.io import split_128\nfrom garaga.modulo_circuit_structs import (\n    E12D,\n    G1PointCircuit,\n    G2PointCircuit,\n    StructArray,\n)\nfrom garaga.points import G1Point, G2Point\nfrom garaga.precompiled_circuits.multi_miller_loop import MultiMillerLoopCircuit\n\n# Import constants from generated file\nfrom garaga.starknet.constants import (\n    RISC0_BN254_CONTROL_ID,\n    RISC0_CONTROL_ROOT,\n    SP1_VERIFIER_HASH,\n    SP1_VERIFIER_VERSION,\n)\n\n\nclass KeyPatternNotFound(Exception):\n    def __init__(self, key_patterns):\n        super().__init__(f\"No key found with patterns {key_patterns}\")\n        self.key_patterns = key_patterns\n\n\ndef iterate_nested_dict(d):\n    for key, value in d.items():\n        if isinstance(value, dict):\n            yield from iterate_nested_dict(value)\n        else:\n            yield value\n\n\ndef find_item_from_key_patterns(data: dict, key_patterns: List[str]) -> Any:\n    best_match = None\n    best_score = -1\n    for key, value in data.items():\n        for pattern in key_patterns:\n            if key.lower() == pattern.lower():\n                # Exact match\n                return value\n            elif pattern.lower() in key.lower():\n                # Partial match\n                score = key.lower().count(pattern.lower())\n                if score > best_score:\n                    best_match = value\n                    best_score = score\n\n    if best_match is not None:\n        return best_match\n    else:\n        raise KeyPatternNotFound(key_patterns)\n\n\ndef try_parse_g1_point_from_key(\n    data: dict, key_patterns: List[str], curve_id: CurveID = None\n) -> G1Point:\n    point = find_item_from_key_patterns(data, key_patterns)\n    return try_parse_g1_point(point, curve_id)\n\n\ndef proj_to_affine(x, y, z, curve_id: CurveID) -> G1Point:\n    x, y, z = io.to_int(x), io.to_int(y), io.to_int(z)\n    p = curve_id.p\n    z = pow(z, -1, p)\n    x = x * z % p\n    y = y * z % p\n    return G1Point(x=x, y=y, curve_id=curve_id)\n\n\ndef try_parse_g1_point(point: Any, curve_id: CurveID = None) -> G1Point:\n    if isinstance(point, dict):\n        return G1Point(\n            x=io.to_int(find_item_from_key_patterns(point, [\"x\"])),\n            y=io.to_int(find_item_from_key_patterns(point, [\"y\"])),\n            curve_id=curve_id,\n        )\n    elif isinstance(point, (tuple, list)):\n        if len(point) == 2:\n            return G1Point(\n                x=io.to_int(point[0]),\n                y=io.to_int(point[1]),\n                curve_id=curve_id,\n            )\n        elif len(point) == 3:\n            return proj_to_affine(point[0], point[1], point[2], curve_id)\n        else:\n            raise ValueError(f\"Invalid point: {point}\")\n    else:\n        raise ValueError(f\"Invalid point: {point}\")\n\n\ndef try_parse_g2_point_from_key(\n    data: dict, key_patterns: List[str], curve_id: CurveID = None\n) -> G2Point:\n    point = find_item_from_key_patterns(data, key_patterns)\n    return try_parse_g2_point(point, curve_id)\n\n\ndef try_parse_g2_point(point: Any, curve_id: CurveID = None) -> G2Point:\n    if isinstance(point, dict):\n        x_g2 = find_item_from_key_patterns(point, [\"x\"])\n        y_g2 = find_item_from_key_patterns(point, [\"y\"])\n        if isinstance(x_g2, dict) and isinstance(y_g2, dict):\n            return G2Point(\n                x=(\n                    io.to_int(find_item_from_key_patterns(x_g2, [\"a0\"])),\n                    io.to_int(find_item_from_key_patterns(x_g2, [\"a1\"])),\n                ),\n                y=(\n                    io.to_int(find_item_from_key_patterns(y_g2, [\"a0\"])),\n                    io.to_int(find_item_from_key_patterns(y_g2, [\"a1\"])),\n                ),\n                curve_id=curve_id,\n            )\n        elif isinstance(x_g2, (tuple, list)) and isinstance(y_g2, (tuple, list)):\n            return G2Point(\n                x=(\n                    io.to_int(x_g2[0]),\n                    io.to_int(x_g2[1]),\n                ),\n                y=(\n                    io.to_int(y_g2[0]),\n                    io.to_int(y_g2[1]),\n                ),\n                curve_id=curve_id,\n            )\n    elif isinstance(point, (tuple, list)):\n        if len(point) == 2:\n            supposed_x = point[0]\n            supposed_y = point[1]\n        elif len(point) == 3:\n            assert (io.to_int(point[2][0]), io.to_int(point[2][1])) == (\n                1,\n                0,\n            ), \"Non standard projective coordinates\"\n            supposed_x = point[0]\n            supposed_y = point[1]\n\n        if isinstance(supposed_x, (tuple, list)):\n            assert len(supposed_x) == 2, f\"Invalid fp2 coordinates: {supposed_x}\"\n            supposed_x = (io.to_int(supposed_x[0]), io.to_int(supposed_x[1]))\n        if isinstance(supposed_y, (tuple, list)):\n            assert len(supposed_y) == 2, f\"Invalid fp2 coordinates: {supposed_y}\"\n            supposed_y = (io.to_int(supposed_y[0]), io.to_int(supposed_y[1]))\n        return G2Point(x=supposed_x, y=supposed_y, curve_id=curve_id)\n    else:\n        raise ValueError(f\"Invalid point: {point}\")\n\n\ndef try_guessing_curve_id_from_json(data: dict) -> CurveID:\n    try:\n        curve_id = CurveID.from_str(find_item_from_key_patterns(data, [\"curve\"]))\n    except (ValueError, KeyError, KeyPatternNotFound):\n        # Try guessing the curve id from the bit size of the first found integer in the json.\n        x = None\n        for value in iterate_nested_dict(data):\n            try:\n                x = io.to_int(value)\n                break\n            except TypeError:\n                continue\n        if x is None:\n            raise ValueError(\"No integer found in the JSON data.\")\n        if x.bit_length() > 256:\n            curve_id = CurveID.BLS12_381\n        else:\n            curve_id = CurveID.BN254\n    return curve_id\n\n\n@dataclasses.dataclass(slots=True)\nclass Groth16VerifyingKey:\n    alpha: G1Point\n    beta: G2Point\n    gamma: G2Point\n    delta: G2Point\n    ic: List[G1Point]\n\n    def __post_init__(self):\n        assert (\n            len(self.ic) > 1\n        ), \"The verifying key must have at least two points in the ic array (one public input and one private input)\"\n        assert len(self.ic) == len(\n            set(self.ic)\n        ), \"The ic array must not contain duplicate points.\"\n        assert (\n            self.alpha.curve_id\n            == self.beta.curve_id\n            == self.gamma.curve_id\n            == self.delta.curve_id\n        ), \"All points must be on the same curve.\"\n        assert all(point.curve_id == self.alpha.curve_id for point in self.ic)\n\n    @property\n    def curve_id(self) -> CurveID:\n        return self.alpha.curve_id\n\n    def from_dict(data: dict) -> \"Groth16VerifyingKey\":\n        try:\n            curve_id = try_guessing_curve_id_from_json(data)\n            try:\n                verifying_key = find_item_from_key_patterns(data, [\"verifying_key\"])\n            except KeyPatternNotFound:\n                verifying_key = data\n            try:\n                return Groth16VerifyingKey(\n                    alpha=try_parse_g1_point_from_key(\n                        verifying_key, [\"alpha\"], curve_id\n                    ),\n                    beta=try_parse_g2_point_from_key(verifying_key, [\"beta\"], curve_id),\n                    gamma=try_parse_g2_point_from_key(\n                        verifying_key, [\"gamma\"], curve_id\n                    ),\n                    delta=try_parse_g2_point_from_key(\n                        verifying_key, [\"delta\"], curve_id\n                    ),\n                    ic=[\n                        try_parse_g1_point(point, curve_id)\n                        for point in find_item_from_key_patterns(verifying_key, [\"ic\"])\n                    ],\n                )\n            except (ValueError, KeyPatternNotFound):\n                # Gnark case.\n                g1_points = find_item_from_key_patterns(verifying_key, [\"g1\"])\n                g2_points = find_item_from_key_patterns(verifying_key, [\"g2\"])\n                return Groth16VerifyingKey(\n                    alpha=try_parse_g1_point_from_key(g1_points, [\"alpha\"], curve_id),\n                    beta=try_parse_g2_point_from_key(g2_points, [\"beta\"], curve_id),\n                    gamma=try_parse_g2_point_from_key(g2_points, [\"gamma\"], curve_id),\n                    delta=try_parse_g2_point_from_key(g2_points, [\"delta\"], curve_id),\n                    ic=[\n                        try_parse_g1_point(point, curve_id)\n                        for point in find_item_from_key_patterns(g1_points, [\"K\"])\n                    ],\n                )\n        except KeyError as e:\n            raise KeyError(f\"The key {e} is missing from the JSON data.\")\n\n    def from_json(file_path: str | Path) -> \"Groth16VerifyingKey\":\n        path = Path(file_path)\n        try:\n            with path.open(\"r\") as f:\n                data = json.load(f)\n        except FileNotFoundError:\n            cwd = os.getcwd()\n            print(f\"Current working directory: {cwd}\")\n            print(f\"Attempted to access file: {os.path.abspath(file_path)}\")\n            raise FileNotFoundError(f\"The file {file_path} was not found.\")\n        except json.JSONDecodeError:\n            raise ValueError(f\"The file {file_path} does not contain valid JSON.\")\n        return Groth16VerifyingKey.from_dict(data)\n\n    def serialize_to_cairo(self) -> str:\n        # Precompute M = miller_loop(public_pair)\n        circuit = MultiMillerLoopCircuit(\n            name=\"precompute M\", curve_id=self.curve_id.value, n_pairs=1\n        )\n        circuit.write_p_and_q(P=[self.alpha], Q=[self.beta])\n\n        M = E12D(\"alpha_beta_miller_loop_result\", circuit.miller_loop(n_pairs=1))\n        gamma_g2 = G2PointCircuit.from_G2Point(\"gamma_g2\", self.gamma)\n        delta_g2 = G2PointCircuit.from_G2Point(\"delta_g2\", self.delta)\n        ic = StructArray(\n            name=\"ic\",\n            elmts=[\n                G1PointCircuit.from_G1Point(f\"ic_{i}\", point)\n                for i, point in enumerate(self.ic)\n            ],\n        )\n        field_type = \"u384\" if self.curve_id == CurveID.BLS12_381 else \"u288\"\n        code = f\"\"\"\n        pub const vk:Groth16VerifyingKey<{field_type}> = Groth16VerifyingKey{{\n            alpha_beta_miller_loop_result: {M.serialize(raw=True)},\n            gamma_g2: {gamma_g2.serialize(raw=True)},\n            delta_g2: {delta_g2.serialize(raw=True)}\n        }};\n\n        pub const ic: [G1Point; {len(self.ic)}] = {ic.serialize(raw=True, const=True)};\n\n        \"\"\"\n        return code\n\n    def flatten(self) -> list[int]:\n        lst = []\n        lst.extend([self.alpha.x, self.alpha.y])\n        lst.extend([self.beta.x[0], self.beta.x[1], self.beta.y[0], self.beta.y[1]])\n        lst.extend([self.gamma.x[0], self.gamma.x[1], self.gamma.y[0], self.gamma.y[1]])\n        lst.extend([self.delta.x[0], self.delta.x[1], self.delta.y[0], self.delta.y[1]])\n        for point in self.ic:\n            lst.extend([point.x, point.y])\n        return lst\n\n\ndef reverse_byte_order_uint256(value: int | bytes) -> int:\n    if isinstance(value, int):\n        value_bytes = value.to_bytes(32, byteorder=\"big\")\n    else:\n        value_bytes = value.ljust(\n            32, b\"\\x00\"\n        )  # Ensure 32 bytes, pad with zeros if needed\n    return int.from_bytes(value_bytes[::-1], byteorder=\"big\")\n\n\ndef split_digest(digest: int | bytes):\n    reversed_digest = reverse_byte_order_uint256(digest)\n    return split_128(reversed_digest)\n\n\n@dataclasses.dataclass(slots=True)\nclass Groth16Proof:\n    a: G1Point\n    b: G2Point\n    c: G1Point\n    public_inputs: List[int] = dataclasses.field(default_factory=list)\n    curve_id: CurveID = None\n    image_id: bytes = None  # Only used for risc0 proofs\n    journal: bytes = None  # Only used for risc0 proofs\n    public_inputs_sp1: bytes = None  # Only used for sp1 proofs\n\n    def __post_init__(self):\n        assert (\n            self.a.curve_id == self.b.curve_id == self.c.curve_id\n        ), f\"All points must be on the same curve, got {self.a.curve_id}, {self.b.curve_id}, {self.c.curve_id}\"\n        self.curve_id = self.a.curve_id\n        for pub in self.public_inputs:\n            assert (\n                0 <= pub < CURVES[self.curve_id.value].n\n            ), f\"Public input {pub} is out of bounds for curve {self.curve_id}\"\n        if self.public_inputs_sp1 is not None:\n            assert isinstance(\n                self.public_inputs_sp1, bytes\n            ), \"SP1 public inputs must be a bytes object\"\n            assert (\n                len(self.public_inputs_sp1) % 32 == 0\n            ), \"SP1 public inputs must be a multiple of 32 bytes\"\n\n    @property\n    def is_risc0(self) -> bool:\n        return self.image_id is not None and self.journal is not None\n\n    @property\n    def is_sp1(self) -> bool:\n        return self.public_inputs_sp1 is not None\n\n    @property\n    def vk_type(self) -> str:\n        if self.is_risc0:\n            return \"risc0\"\n        elif self.is_sp1:\n            return \"sp1\"\n        else:\n            return \"groth16_generic\"\n\n    def from_dict(\n        data: dict, public_inputs: None | list | dict = None\n    ) -> \"Groth16Proof\":\n        curve_id = try_guessing_curve_id_from_json(data)\n        try:\n            proof = find_item_from_key_patterns(data, [\"proof\"])\n        except KeyPatternNotFound:\n            proof = data\n\n        try:\n            seal = find_item_from_key_patterns(data, [\"seal\"])\n            image_id = find_item_from_key_patterns(data, [\"image_id\"])\n            journal = find_item_from_key_patterns(data, [\"journal\"])\n\n            print(\"Seal: {}\\nImage_id: {}\\nJournal: {}\".format(seal, image_id, journal))\n            return Groth16Proof._from_risc0(\n                seal=codecs.decode(seal[2:].replace(\"\\\\x\", \"\"), \"hex\"),\n                image_id=codecs.decode(image_id[2:].replace(\"\\\\x\", \"\"), \"hex\"),\n                journal=codecs.decode(journal[2:].replace(\"\\\\x\", \"\"), \"hex\"),\n            )\n        except (ValueError, KeyError, KeyPatternNotFound):\n            pass\n        except Exception as e:\n            print(f\"Error when attempmting to parse as Risc0 proof: {e}\")\n            raise e\n\n        try:\n            sp1_vkey = find_item_from_key_patterns(data, [\"vkey\"])\n            public_inputs = find_item_from_key_patterns(data, [\"publicValues\"])\n            sp1_proof = find_item_from_key_patterns(data, [\"proof\"])\n            return Groth16Proof._from_sp1(\n                vkey=codecs.decode(sp1_vkey[2:].replace(\"\\\\x\", \"\"), \"hex\"),\n                proof=codecs.decode(sp1_proof[2:].replace(\"\\\\x\", \"\"), \"hex\"),\n                public_inputs=codecs.decode(\n                    public_inputs[2:].replace(\"\\\\x\", \"\"), \"hex\"\n                ),\n            )\n        except KeyPatternNotFound:\n            pass\n        except Exception as e:\n            print(f\"Error when attempmting to parse as SP1 proof: {e}\")\n            raise e\n\n        if public_inputs is not None:\n            if isinstance(public_inputs, dict):\n                public_inputs = list(public_inputs.values())\n            elif isinstance(public_inputs, list):\n                pass\n            else:\n                raise ValueError(f\"Invalid public inputs format: {public_inputs}\")\n        else:\n            try:\n                public_inputs = find_item_from_key_patterns(data, [\"public\"])\n            except KeyPatternNotFound as e:\n                print(f\"Error: {e}\")\n                raise e\n        return Groth16Proof(\n            a=try_parse_g1_point_from_key(proof, [\"a\"], curve_id),\n            b=try_parse_g2_point_from_key(proof, [\"b\"], curve_id),\n            c=try_parse_g1_point_from_key(proof, [\"c\", \"Krs\"], curve_id),\n            public_inputs=[io.to_int(pub) for pub in public_inputs],\n        )\n\n    def from_json(\n        proof_path: str | Path, public_inputs_path: str | Path = None\n    ) -> \"Groth16Proof\":\n        path = Path(proof_path)\n        try:\n            with path.open(\"r\") as f:\n                data = json.load(f)\n        except FileNotFoundError:\n            raise FileNotFoundError(f\"The file {proof_path} was not found.\")\n        except json.JSONDecodeError:\n            raise ValueError(f\"The file {proof_path} does not contain valid JSON.\")\n        try:\n            if public_inputs_path is not None:\n                with Path(public_inputs_path).open(\"r\") as f:\n                    public_inputs = json.load(f)\n            else:\n                public_inputs = None\n        except FileNotFoundError:\n            raise FileNotFoundError(f\"The file {public_inputs_path} was not found.\")\n        except json.JSONDecodeError:\n            raise ValueError(\n                f\"The file {public_inputs_path} does not contain valid JSON.\"\n            )\n        return Groth16Proof.from_dict(data, public_inputs)\n\n    def _from_risc0(\n        seal: bytes,\n        image_id: bytes,\n        journal: bytes,\n        CONTROL_ROOT: int = RISC0_CONTROL_ROOT,\n        BN254_CONTROL_ID: int = RISC0_BN254_CONTROL_ID,\n    ) -> \"Groth16Proof\":\n        assert len(image_id) <= 32, \"image_id must be 32 bytes\"\n        CONTROL_ROOT_0, CONTROL_ROOT_1 = split_digest(CONTROL_ROOT)\n        proof = seal[4:]\n        journal_digest = hashlib.sha256(journal).digest()\n        claim_digest = ok(image_id, journal_digest).digest()\n        claim0, claim1 = split_digest(claim_digest)\n        return Groth16Proof(\n            a=G1Point(\n                x=int.from_bytes(proof[0:32], \"big\"),\n                y=int.from_bytes(proof[32:64], \"big\"),\n                curve_id=CurveID.BN254,\n            ),\n            b=G2Point(\n                x=(\n                    int.from_bytes(proof[96:128], \"big\"),\n                    int.from_bytes(proof[64:96], \"big\"),\n                ),\n                y=(\n                    int.from_bytes(proof[160:192], \"big\"),\n                    int.from_bytes(proof[128:160], \"big\"),\n                ),\n                curve_id=CurveID.BN254,\n            ),\n            c=G1Point(\n                x=int.from_bytes(proof[192:224], \"big\"),\n                y=int.from_bytes(proof[224:256], \"big\"),\n                curve_id=CurveID.BN254,\n            ),\n            public_inputs=[\n                CONTROL_ROOT_0,\n                CONTROL_ROOT_1,\n                claim0,\n                claim1,\n                BN254_CONTROL_ID,\n            ],\n            image_id=image_id,\n            journal=journal,\n        )\n\n    def _from_sp1(\n        vkey: bytes,\n        public_inputs: bytes,\n        proof: bytes,\n    ) -> \"Groth16Proof\":\n        _selector, proof = proof[:4], proof[4:]\n        assert (\n            _selector == SP1_VERIFIER_HASH[:4]\n        ), f\"Invalid SP1 proof version. Expected {SP1_VERIFIER_HASH[:4]} for version {SP1_VERIFIER_VERSION}, got {_selector}\\n Please use SP1 verifier version {SP1_VERIFIER_VERSION} or contact garaga developers to update the SP1 verifier version.\"\n        pub_input_hash: bytes = hashlib.sha256(public_inputs).digest()\n        pub_input_hash: int = int.from_bytes(pub_input_hash, \"big\") % (\n            2**253\n        )  # <=> & ((1 << 253) - 1)\n        # print(f\"pub_input_hash: {hex(pub_input_hash)}\")\n        return Groth16Proof(\n            a=G1Point(\n                x=int.from_bytes(proof[0:32], \"big\"),\n                y=int.from_bytes(proof[32:64], \"big\"),\n                curve_id=CurveID.BN254,\n            ),\n            b=G2Point(\n                x=(\n                    int.from_bytes(proof[96:128], \"big\"),\n                    int.from_bytes(proof[64:96], \"big\"),\n                ),\n                y=(\n                    int.from_bytes(proof[160:192], \"big\"),\n                    int.from_bytes(proof[128:160], \"big\"),\n                ),\n                curve_id=CurveID.BN254,\n            ),\n            c=G1Point(\n                x=int.from_bytes(proof[192:224], \"big\"),\n                y=int.from_bytes(proof[224:256], \"big\"),\n                curve_id=CurveID.BN254,\n            ),\n            public_inputs=[int.from_bytes(vkey, \"big\"), pub_input_hash],\n            public_inputs_sp1=public_inputs,\n        )\n\n    def serialize_to_calldata(self) -> list[int]:\n        cd = []\n        cd.extend(io.bigint_split(self.a.x))\n        cd.extend(io.bigint_split(self.a.y))\n        cd.extend(io.bigint_split(self.b.x[0]))\n        cd.extend(io.bigint_split(self.b.x[1]))\n        cd.extend(io.bigint_split(self.b.y[0]))\n        cd.extend(io.bigint_split(self.b.y[1]))\n        cd.extend(io.bigint_split(self.c.x))\n        cd.extend(io.bigint_split(self.c.y))\n        if self.image_id and self.journal and self.public_inputs_sp1 is None:\n            # Risc0 mode.\n            # Public inputs will be reconstructed from image id and journal.\n            image_id_u256 = io.bigint_split(\n                int.from_bytes(self.image_id, \"big\"), 8, 2**32\n            )[::-1]\n            journal = list(self.journal)\n            # Span of u32, length 8.\n            cd.append(8)\n            cd.extend(image_id_u256)\n            # Span of u8, length depends on input\n            cd.append(len(self.journal))\n            cd.extend(journal)\n        elif self.public_inputs_sp1 is not None:\n            # SP1 mode.\n            # Public inputs 0 is vkey\n            cd.extend(io.bigint_split(self.public_inputs[0], 2, 2**128))\n            # Public inputs 1 is sha256(public_inputs_sp1) % 2**253\n            # We serialize pub_inputs_sp1 as u32 array for Cairo sha256.\n            n_bytes = len(self.public_inputs_sp1)\n            assert n_bytes % 32 == 0, \"SP1 public inputs must be a multiple of 32 bytes\"\n            n_words = n_bytes // 32\n            cd.append(n_words)  # Deserialization 8 by 8\n            for i in range(0, n_bytes, 4):\n                cd.append(int.from_bytes(self.public_inputs_sp1[i : i + 4], \"big\"))\n        else:\n            # Normal mode.\n            cd.append(len(self.public_inputs))\n            for pub in self.public_inputs:\n                cd.extend(io.bigint_split(pub, 2, 2**128))\n        return cd\n\n    def flatten(self, include_public_inputs: bool = True) -> list[int]:\n        lst = []\n        lst.extend([self.a.x, self.a.y])\n        lst.extend([self.b.x[0], self.b.x[1]])\n        lst.extend([self.b.y[0], self.b.y[1]])\n        lst.extend([self.c.x, self.c.y])\n        if include_public_inputs:\n            lst.extend(self.public_inputs)\n        return lst\n\n\nclass ExitCode:\n    def __init__(self, system, user):\n        self.system = system\n        self.user = user\n\n\nclass Output:\n    def __init__(self, journal_digest, assumptions_digest):\n        self.journal_digest = journal_digest\n        self.assumptions_digest = assumptions_digest\n\n    def digest(self):\n        return hashlib.sha256(\n            hashlib.sha256(b\"risc0.Output\").digest()\n            + self.journal_digest\n            + self.assumptions_digest\n            + (2 << 8).to_bytes(2, byteorder=\"big\")\n        ).digest()\n\n\nclass ReceiptClaim:\n    def __init__(\n        self,\n        pre_state_digest,\n        post_state_digest,\n        exit_code,\n        input,\n        output,\n        tag_digest: bytes = hashlib.sha256(b\"risc0.ReceiptClaim\").digest(),\n    ):\n        self.pre_state_digest = pre_state_digest\n        self.post_state_digest = post_state_digest\n        self.exit_code = exit_code\n        self.input = input\n        self.output = output.digest()\n        self.TAG_DIGEST = tag_digest\n\n    def digest(self):\n        # print(f\"TAG_DIGEST: {self.TAG_DIGEST.hex()}\")\n        # print(f\"self.input: {self.input.hex()}\")\n        # print(f\"self.pre_state_digest: {self.pre_state_digest.hex()}\")\n        # print(f\"self.post_state_digest: {self.post_state_digest.hex()}\")\n        # print(f\"self.output: {self.output.hex()}\")\n        # print(f\"self.exit_code.system: {self.exit_code.system}\")\n        # print(f\"self.exit_code.user: {self.exit_code.user}\")\n        return hashlib.sha256(\n            self.TAG_DIGEST\n            + self.input\n            + self.pre_state_digest\n            + self.post_state_digest\n            + self.output\n            + (self.exit_code.system << 24).to_bytes(4, byteorder=\"big\")\n            + (self.exit_code.user << 24).to_bytes(4, byteorder=\"big\")\n            + (4 << 8).to_bytes(2, byteorder=\"big\")\n        ).digest()\n\n\ndef ok(image_id, journal_digest):\n    SYSTEM_STATE_ZERO_DIGEST = bytes.fromhex(\n        \"A3ACC27117418996340B84E5A90F3EF4C49D22C79E44AAD822EC9C313E1EB8E2\"\n    )  # https://github.com/risc0/risc0-ethereum/blob/34d2fee4ca6b5fb354a8a1a00c43f8945097bfe5/contracts/src/IRiscZeroVerifier.sol#L60\n    return ReceiptClaim(\n        pre_state_digest=image_id,\n        post_state_digest=SYSTEM_STATE_ZERO_DIGEST,\n        exit_code=ExitCode(0, 0),  # (Halted, 0)\n        input=bytes(32),  # bytes32(0)\n        output=Output(journal_digest, bytes(32)),  # Output(journalDigest, bytes32(0))\n    )\n\n\nif __name__ == \"__main__\":\n    # PATH = Path(__file__).parent\n    # print(f\"PATH: {PATH}\")\n    # proof = Groth16Proof.from_json(\n    #     f\"{PATH}/examples/gnark_proof_bn254.json\",\n    #     f\"{PATH}/examples/gnark_public_bn254.json\",\n    # )\n    # # print(proof)\n    # vk = Groth16VerifyingKey.from_json(f\"{PATH}/examples/gnark_vk_bn254.json\")\n    # print(vk)\n\n    # vk_risc0 = Groth16VerifyingKey.from_json(f\"{PATH}/examples/vk_risc0.json\")\n    # # print(vk_risc0)\n\n    # Risc0 proof extracted from https://sepolia.etherscan.io/tx/0x2308aeefef309097aeaf0e3660915d5b80813e693ac72147b651e0196155235d\n    bproof = bytes.fromhex(\n        \"310fe5982466f8f1bab4d00a829cafcda46036fb9c5108df341746ab5f7532aa71aee03b0947eaf1af095584de8d5bd0a91a811f071a555c21a113476aa167108dfeb73913c3a1ef6a5baac68cddd25fafdbf660c4e479f7a836cc1b98904610ead5c9ab2c62f6fdf8ca099964080c95beebf5728b41728128ec0c7823f8adf22e5bfeed1110de7c21ed2dc1e2fd8f2c52d68a15129cf68f18a3087131920e8dcb40a81b003f524b6dcbabdc1e270494bc39b190bddfdb13106409350f80b6204d89da4c16842b4139dd02a39829cf1403657ad00080300a32148c31093cb752809cae2e075db0a79893a6d71a4a7d61111fdff741aeb198dd7fb00b4fa23714ddfd8093\"\n    )\n\n    def parse_proof_and_signals(proof: bytes) -> Groth16Proof:\n        proof = proof[4:]\n\n        def bytes_32_iterator(data: bytes):\n            for i in range(0, len(data), 32):\n                yield io.to_int(data[i : i + 32])\n\n        it = bytes_32_iterator(proof)\n        print(len(proof) / 32)\n        _a = G1Point(x=next(it), y=next(it), curve_id=CurveID.BN254)\n        _b = G2Point(\n            x=[next(it), next(it)][::-1],\n            y=[next(it), next(it)][::-1],\n            curve_id=CurveID.BN254,\n        )\n        _c = G1Point(x=next(it), y=next(it), curve_id=CurveID.BN254)\n\n        public_inputs = list(it)\n        print(len(public_inputs))\n        return Groth16Proof(\n            a=_a,\n            b=_b,\n            c=_c,\n            public_inputs=list(it),\n        )\n\n    proof = parse_proof_and_signals(bproof)\n    print(proof)\n"
  },
  {
    "path": "hydra/garaga/starknet/honk_contract_generator/calldata.py",
    "content": "from garaga import garaga_rs\nfrom garaga.curves import ProofSystem\nfrom garaga.points import G1G2Pair\nfrom garaga.precompiled_circuits.zk_honk import (\n    G2_POINT_KZG_1,\n    G2_POINT_KZG_2,\n    LIBRA_COMMITMENTS,\n    NUMBER_UNSHIFTED,\n    CurveID,\n    G1Point,\n    HonkVk,\n    ModuloCircuitElement,\n    ZKHonkProof,\n    ZKHonkTranscript,\n    ZKHonkVerifierCircuits,\n)\nfrom garaga.starknet.tests_and_calldata_generators.mpcheck import MPCheckCalldataBuilder\nfrom garaga.starknet.tests_and_calldata_generators.msm import MSMCalldataBuilder\n\n\ndef filter_msm_scalars(\n    scalars: list[ModuloCircuitElement], log_n: int\n) -> list[ModuloCircuitElement]:\n\n    assert len(scalars) == NUMBER_UNSHIFTED + log_n + LIBRA_COMMITMENTS + 3\n    # Remove the first element (== 1)\n    scalars_filtered = scalars[1:]\n\n    return scalars_filtered\n\n\ndef extract_msm_scalars(\n    scalars: list[ModuloCircuitElement], log_n: int\n) -> list[ModuloCircuitElement]:\n    scalars_msm = filter_msm_scalars(scalars, log_n)\n    return [s.value for s in scalars_msm]\n\n\ndef get_ultra_flavor_honk_calldata_from_vk_and_proof(\n    vk: HonkVk,\n    proof: ZKHonkProof,\n    system: ProofSystem = ProofSystem.UltraKeccakZKHonk,\n    use_rust: bool = False,\n) -> list[int]:\n    if use_rust:\n        return _honk_calldata_from_vk_and_proof_rust(vk, proof)\n\n    assert isinstance(proof, ZKHonkProof)\n    tp = ZKHonkTranscript.from_proof(vk, proof, system)\n    circuit = ZKHonkVerifierCircuits(name=\"test\", log_n=vk.log_circuit_size)\n\n    vk_circuit = vk.to_circuit_elements(circuit)\n    proof_circuit = proof.to_circuit_elements(circuit)\n    tp = tp.to_circuit_elements(circuit)\n\n    public_input_delta = circuit.compute_public_input_delta(\n        public_inputs=proof_circuit.public_inputs,\n        pairing_point_object=proof_circuit.pairing_point_object,\n        beta=tp.beta,\n        gamma=tp.gamma,\n    )\n    rlc_check, check = circuit.verify_sum_check(\n        libra_sum=proof_circuit.libra_sum,\n        sumcheck_univariates=proof_circuit.sumcheck_univariates,\n        sumcheck_evaluations=(proof_circuit.sumcheck_evaluations),\n        libra_evaluation=proof_circuit.libra_evaluation,\n        beta=tp.beta,\n        gamma=tp.gamma,\n        public_inputs_delta=public_input_delta,\n        eta=tp.eta,\n        eta_two=tp.etaTwo,\n        eta_three=tp.etaThree,\n        libra_challenge=tp.libra_challenge,\n        sum_check_u_challenges=tp.sum_check_u_challenges,\n        gate_challenge=tp.gate_challenge,\n        alpha=tp.alpha,\n        log_n=vk.log_circuit_size,\n        base_rlc=circuit.write_element(1234),\n    )\n\n    assert rlc_check.value == 0\n    assert check.value == 0\n\n    vanishing_check, diff_check = circuit.check_evals_consistency(\n        proof_circuit.libra_evaluation,\n        proof_circuit.libra_poly_evals,\n        tp.gemini_r,\n        tp.sum_check_u_challenges,\n    )\n    assert vanishing_check.value != 0\n    assert diff_check.value == 0\n\n    scalars = circuit.compute_shplemini_msm_scalars(\n        proof_circuit.sumcheck_evaluations,\n        proof_circuit.gemini_masking_eval,\n        proof_circuit.gemini_a_evaluations,\n        proof_circuit.libra_poly_evals,\n        tp.gemini_r,\n        tp.rho,\n        tp.shplonk_z,\n        tp.shplonk_nu,\n        tp.sum_check_u_challenges,\n    )\n\n    scalars_msm = extract_msm_scalars(scalars, vk.log_circuit_size)\n    # Swap last two scalars :\n    scalars_msm = scalars_msm[:-2] + scalars_msm[-2:][::-1]\n\n    # Place first scalar just after the vk_lagrange_last point (index 27)\n    first_scalar = scalars_msm.pop(0)\n    scalars_msm.insert(28, first_scalar)\n\n    points = [\n        vk.qm,  # 0\n        vk.qc,  # 1\n        vk.ql,  # 2\n        vk.qr,  # 3\n        vk.qo,  # 4\n        vk.q4,  # 5\n        vk.qLookup,  # 6\n        vk.qArith,  # 7\n        vk.qDeltaRange,  # 8\n        vk.qElliptic,  # 9\n        vk.qMemory,  # 10\n        vk.qNnf,  # 11\n        vk.qPoseidon2External,  # 12\n        vk.qPoseidon2Internal,  # 13\n        vk.s1,  # 14\n        vk.s2,  # 15\n        vk.s3,  # 16\n        vk.s4,  # 17\n        vk.id1,  # 18\n        vk.id2,  # 19\n        vk.id3,  # 20\n        vk.id4,  # 21\n        vk.t1,  # 22\n        vk.t2,  # 23\n        vk.t3,  # 24\n        vk.t4,  # 25\n        vk.lagrange_first,  # 26\n        vk.lagrange_last,  # 27\n        proof.gemini_masking_poly,  # 28\n        proof.w1,  # 29\n        proof.w2,  # 30\n        proof.w3,  # 31\n        proof.w4,  # 32\n        proof.z_perm,  # 33\n        proof.lookup_inverses,  # 34\n        proof.lookup_read_counts,  # 35\n        proof.lookup_read_tags,  # 36\n    ]\n    points.extend(proof.gemini_fold_comms[: vk.log_circuit_size - 1])\n    points.extend(proof.libra_commitments)\n    points.append(proof.kzg_quotient)\n    points.append(G1Point.get_nG(CurveID.BN254, 1))\n\n    msm_builder = MSMCalldataBuilder(\n        CurveID.BN254,\n        points=points,\n        scalars=scalars_msm,\n    )\n\n    P_0 = G1Point.msm(points=points, scalars=scalars_msm).add(proof.shplonk_q)\n    P_1 = -proof.kzg_quotient\n\n    pairs = [G1G2Pair(P_0, G2_POINT_KZG_1), G1G2Pair(P_1, G2_POINT_KZG_2)]\n\n    mpc_builder = MPCheckCalldataBuilder(\n        curve_id=CurveID.BN254, pairs=pairs, n_fixed_g2=2, public_pair=None\n    )\n    cd = []\n    cd.extend(proof.serialize_to_calldata())\n    cd.extend(\n        msm_builder.serialize_to_calldata(\n            include_points_and_scalars=False,\n            serialize_as_pure_felt252_array=True,\n        )\n    )\n    cd.extend(mpc_builder.serialize_to_calldata())\n\n    res = [len(cd)] + cd\n\n    # print(f\"HONK CALLDATA: {res}\")\n    # print(f\"HONK CALLDATA LENGTH: {len(res)}\")\n\n    return res\n\n\ndef _honk_calldata_from_vk_and_proof_rust(\n    vk: HonkVk,\n    proof: ZKHonkProof,\n) -> list[int]:\n    return garaga_rs.get_zk_honk_calldata(\n        proof.proof_bytes, proof.public_inputs_bytes, vk.vk_bytes\n    )\n"
  },
  {
    "path": "hydra/garaga/starknet/honk_contract_generator/generator_honk.py",
    "content": "import argparse\nimport os\nfrom pathlib import Path\n\nfrom garaga.curves import CurveID, ProofSystem\nfrom garaga.modulo_circuit_structs import G2Line, StructArray\nfrom garaga.precompiled_circuits.compilable_circuits.base import (\n    get_circuit_definition_impl_template,\n)\nfrom garaga.precompiled_circuits.compilable_circuits.ultra_honk import (\n    ZKEvalsConsistencyDoneCircuit,\n    ZKEvalsConsistencyInitCircuit,\n    ZKEvalsConsistencyLoopCircuit,\n    ZKPrepareScalarsCircuit,\n    ZKSumCheckCircuit,\n)\nfrom garaga.precompiled_circuits.multi_miller_loop import precompute_lines\nfrom garaga.precompiled_circuits.zk_honk import (\n    G2_POINT_KZG_1,\n    G2_POINT_KZG_2,\n    MAX_LOG_N,\n    PAIRING_POINT_OBJECT_LENGTH,\n    HonkVk,\n)\nfrom garaga.starknet.groth16_contract_generator.generator import (\n    write_test_calldata_file_generic,\n    write_verifier_files,\n)\n\n\ndef gen_honk_verifier(\n    vk: str | Path | HonkVk | bytes,\n    output_folder_path: str,\n    output_folder_name: str,\n    cli_mode: bool = False,\n    include_test_sample: bool = True,\n) -> bool:\n    \"\"\"\n    Generate the honk verifier files and write them to the output folder.\n    \"\"\"\n    output_folder_path_full = os.path.join(output_folder_path, output_folder_name)\n\n    (\n        constants_code,\n        circuits_code,\n        contract_code,\n        contract_name,\n        verification_function_name,\n    ) = gen_honk_verifier_files(vk)\n    _write_and_format_project_files(\n        output_folder_path_full,\n        output_folder_name,\n        cli_mode,\n        constants_code,\n        circuits_code,\n        contract_code,\n        contract_name,\n        verification_function_name,\n        include_test_sample,\n    )\n    return True\n\n\ndef gen_honk_verifier_files(\n    vk: str | Path | HonkVk | bytes,\n) -> tuple[str, str, str, str, str]:\n    \"\"\"\n    Returns in this order:\n    - constants_code\n    - circuits_code\n    - contract_code\n    - contract_name\n    - verification_function_name\n    \"\"\"\n    # Parse vk\n    if isinstance(vk, (Path, str)):\n        vk = HonkVk.from_bytes(open(vk, \"rb\").read())\n    elif isinstance(vk, bytes):\n        vk = HonkVk.from_bytes(vk)\n    else:\n        assert isinstance(\n            vk, HonkVk\n        ), f\"Invalid type for vk: {type(vk)}. Should be str, Path, HonkVk or bytes.\"\n\n    constants_code = _gen_constants_code(vk)\n\n    (\n        circuits_code,\n        sumcheck_function_name,\n        prepare_scalars_function_name,\n        consistency_function_names,\n        scalar_indexes,\n        msm_len,\n        is_on_curve_function_name,\n    ) = _gen_circuits_code(vk)\n\n    points_code, (n_vk_points, n_proof_points) = _get_msm_points_array_code(\n        log_n=vk.log_circuit_size\n    )\n\n    scalars_tuple = \",\\n            \".join(f\"scalar_{idx}\" for idx in scalar_indexes)\n    scalars_tuple_into = [f\"scalar_{idx}\" for idx in scalar_indexes]\n\n    scalars_tuple_into.append(\"transcript.shplonk_z.into()\")\n    # Swap position of last two elements of scalars_tuple_into (KZG quotient & BN254 G1 generator) :\n    scalars_tuple_into = scalars_tuple_into[:-2] + scalars_tuple_into[-2:][::-1]\n    # Move first scalar after the first vk points [a, b, c, d, e] -> [b,c,d,a,e] if [b,c,d] are vk points:\n    scalars_tuple_into = (\n        scalars_tuple_into[1 : n_vk_points + 1]\n        + scalars_tuple_into[:1]\n        + scalars_tuple_into[n_vk_points + 1 :]\n    )\n\n    scalars_tuple_into = \",\\n            \".join(scalars_tuple_into)\n\n    # Generate contract header\n    contract_name = \"UltraKeccakZKHonkVerifier\"\n    verification_function_name = \"verify_ultra_keccak_zk_honk_proof\"\n    contract_header = _gen_contract_header(\n        function_names=[\n            sumcheck_function_name,\n            prepare_scalars_function_name,\n            consistency_function_names[0],\n            consistency_function_names[1],\n            consistency_function_names[2],\n            is_on_curve_function_name,\n        ],\n    )\n\n    contract_code = f\"\"\"{contract_header}\n            let (transcript, _, base_rlc) = ZKHonkTranscriptTrait::from_proof::<KeccakHasherState>(full_proof.proof, vk.vk_hash, vk.log_circuit_size);\n            let log_n = vk.log_circuit_size;\n            let (sum_check_rlc, honk_check) = {sumcheck_function_name}(\n                p_public_inputs: full_proof.proof.public_inputs,\n                p_pairing_point_object: full_proof.proof.pairing_point_object,\n                libra_sum: u256_to_u384(full_proof.proof.libra_sum),\n                sumcheck_univariates_flat: full_proof.proof.sumcheck_univariates.slice(0, log_n * ZK_BATCHED_RELATION_PARTIAL_LENGTH),\n                sumcheck_evaluations: full_proof.proof.sumcheck_evaluations,\n                libra_evaluation: u256_to_u384(full_proof.proof.libra_evaluation),\n                tp_sum_check_u_challenges: transcript.sum_check_u_challenges.span(),\n                tp_gate_challenge: transcript.gate_challenge,\n                tp_eta_1: transcript.eta.into(),\n                tp_eta_2: transcript.eta_two.into(),\n                tp_eta_3: transcript.eta_three.into(),\n                tp_beta: transcript.beta.into(),\n                tp_gamma: transcript.gamma.into(),\n                tp_base_rlc: base_rlc.into(),\n                tp_alpha: transcript.alpha,\n                tp_libra_challenge: transcript.libra_challenge.into(),\n                modulus: mod_grumpkin,\n            );\n\n            let (mut challenge_poly_eval, mut root_power_times_tp_gemini_r) = {consistency_function_names[0]}(\n                tp_gemini_r: transcript.gemini_r.into(),\n                modulus: mod_grumpkin,\n            );\n            for i in 0..vk.log_circuit_size {{\n                let (new_challenge_poly_eval, new_root_power_times_tp_gemini_r) = {consistency_function_names[1]}(\n                    challenge_poly_eval: challenge_poly_eval,\n                    root_power_times_tp_gemini_r: root_power_times_tp_gemini_r,\n                    tp_sumcheck_u_challenge: (*transcript.sum_check_u_challenges.at(i)).into(),\n                    modulus: mod_grumpkin,\n                );\n                challenge_poly_eval = new_challenge_poly_eval;\n                root_power_times_tp_gemini_r = new_root_power_times_tp_gemini_r;\n            }};\n            let (vanishing_check, diff_check) = {consistency_function_names[2]}(\n                p_libra_evaluation: u256_to_u384(full_proof.proof.libra_evaluation),\n                p_libra_poly_evals: full_proof.proof.libra_poly_evals,\n                tp_gemini_r: transcript.gemini_r.into(),\n                challenge_poly_eval: challenge_poly_eval,\n                root_power_times_tp_gemini_r: root_power_times_tp_gemini_r,\n                modulus: mod_grumpkin,\n            );\n\n        let (\n            {scalars_tuple},\n        ) =\n            {prepare_scalars_function_name}(\n            p_sumcheck_evaluations: full_proof.proof.sumcheck_evaluations,\n            p_gemini_masking_eval: u256_to_u384(full_proof.proof.gemini_masking_eval),\n            p_gemini_a_evaluations: full_proof.proof.gemini_a_evaluations,\n            p_libra_poly_evals: full_proof.proof.libra_poly_evals,\n            tp_gemini_r: transcript.gemini_r.into(),\n            tp_rho: transcript.rho.into(),\n            tp_shplonk_z: transcript.shplonk_z.into(),\n            tp_shplonk_nu: transcript.shplonk_nu.into(),\n            tp_sum_check_u_challenges: transcript.sum_check_u_challenges.span().slice(0, log_n),\n            modulus: mod_grumpkin,\n        );\n\n            {points_code}\n            let mut scalars: Span<u384> = array![{scalars_tuple_into}].span();\n\n            {_get_msm_kzg_template(msm_len, n_vk_points, n_proof_points, is_on_curve_function_name)}\n            if sum_check_rlc.is_zero() && honk_check.is_zero() && !vanishing_check.is_zero() && diff_check.is_zero() && kzg_check.is_ok() {{\n                return Result::Ok(full_proof.proof.public_inputs);\n            }} else {{\n                return Result::Err('Proof verification failed');\n            }}\n        }}\n    }}\n}}\n\n\n    \"\"\"\n    return (\n        constants_code,\n        circuits_code,\n        contract_code,\n        contract_name,\n        verification_function_name,\n    )\n\n\ndef _get_msm_kzg_template(\n    msm_size: int,\n    n_vk_points: int,\n    n_proof_points: int,\n    is_on_curve_function_name: str,\n):\n    TEMPLATE = \"\"\"\\n\n            // Check input points are on curve.\n            // Skip the first {n_vk_points} points as they are from VK and keep the last {n_proof_points} proof points\n            for point in points.slice({n_vk_points}, {n_proof_points}) {{\n                assert({is_on_curve_function_name}(*point, mod_bn), 'proof point not on curve');\n            }};\n\n            // Assert shplonk_q is on curve\n            let shplonk_q_pt:G1Point = full_proof.proof.shplonk_q.into();\n            assert({is_on_curve_function_name}(shplonk_q_pt, mod_bn), 'shplonk_q not on curve');\n\n            let mut msm_hint = full_proof.msm_hint;\n            assert(msm_hint.len() == {msm_len} * 12, 'wrong glv&fakeglv hint size');\n            let eigen = get_eigenvalue(0);\n            let third_root_of_unity = get_third_root_of_unity(0);\n            let min_one = get_min_one_order(0);\n            let nG = get_nG_glv_fake_glv(0);\n\n            let mut P_1 = shplonk_q_pt;\n            while msm_hint.len() != 0 {{\n                let pt = *points.pop_front().unwrap();\n                let scalar = *scalars.pop_front().unwrap();\n                // Note : Scalars are below curve order by construction (circuit outputs mod n and transcript output (u128))\n                let glv_fake_glv_hint: GlvFakeGlvHint = Serde::deserialize(ref msm_hint).unwrap();\n                let temp = _scalar_mul_glv_and_fake_glv(\n                    pt,\n                    scalar,\n                    mod_grumpkin,\n                    mod_bn,\n                    glv_fake_glv_hint,\n                    eigen,\n                    third_root_of_unity,\n                    min_one,\n                    nG,\n                    0,\n                );\n                P_1 = _ec_safe_add(P_1, temp, mod_bn, 0);\n            }}\n\n            let P_2:G1Point = full_proof.proof.kzg_quotient.into();\n\n            // Perform the KZG pairing check.\n            let kzg_check = multi_pairing_check_bn254_2P_2F(\n               G1G2Pair {{ p: P_1, q: G2_POINT_KZG_1 }},\n               G1G2Pair {{ p: P_2.negate(0), q: G2_POINT_KZG_2 }},\n               precomputed_lines.span(),\n               full_proof.kzg_hint,\n            );\n\n        \"\"\".format(\n        debug=\"{:?}\",\n        msm_len=msm_size,\n        n_vk_points=n_vk_points,\n        n_proof_points=n_proof_points,\n        is_on_curve_function_name=is_on_curve_function_name,\n    )\n    return TEMPLATE\n\n\ndef _get_circuit_code_header():\n    header = \"\"\"\nuse core::circuit::{\n    u384, circuit_add, circuit_sub, circuit_mul, circuit_inverse,\n    EvalCircuitTrait, CircuitOutputsTrait, CircuitInputs, CircuitModulus,\n};\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse core::circuit::CircuitElement as CE;\nuse core::circuit::CircuitInput as CI;\nuse garaga::definitions::{G1Point};\\n\n\"\"\"\n    return header\n\n\ndef _gen_circuits_code(vk: HonkVk) -> tuple[str, str, str, list[str], str, int, str]:\n    \"\"\"\n    Generate the code for the sumcheck circuit and related circuits.\n\n    Args:\n        vk: The verifying key\n\n    Returns:\n        Tuple containing:\n        - The generated code\n        - Sumcheck function name\n        - Prepare scalars function name\n        - List of consistency function names\n        - Scalar indexes\n        - MSM length\n        - Is on curve function name\n    \"\"\"\n    code = _get_circuit_code_header()\n    curve_id = CurveID.GRUMPKIN\n\n    # Generate sumcheck circuit\n    sumcheck_circuit = ZKSumCheckCircuit(vk)\n    sumcheck_function_name = f\"{curve_id.name}_{sumcheck_circuit.name.upper()}\"\n    sumcheck_code, sumcheck_function_name = sumcheck_circuit.circuit.compile_circuit(\n        function_name=sumcheck_function_name, pub=True, generic_modulus=True\n    )\n\n    # Generate prepare scalars circuit\n    prepare_scalars_circuit = ZKPrepareScalarsCircuit(vk)\n    scalar_indexes = prepare_scalars_circuit.scalar_indexes\n    msm_len = prepare_scalars_circuit.msm_len\n    prepare_scalars_function_name = (\n        f\"{curve_id.name}_{prepare_scalars_circuit.name.upper()}\"\n    )\n    prepare_scalars_code, prepare_scalars_function_name = (\n        prepare_scalars_circuit.circuit.compile_circuit(\n            function_name=prepare_scalars_function_name, pub=True, generic_modulus=True\n        )\n    )\n\n    # Generate consistency circuits\n    consistency_circuits = []\n    for circuit_class in [\n        ZKEvalsConsistencyInitCircuit,\n        ZKEvalsConsistencyLoopCircuit,\n        ZKEvalsConsistencyDoneCircuit,\n    ]:\n        circuit = circuit_class(vk)\n        function_name = f\"{curve_id.name}_{circuit.name.upper()}\"\n        circuit_code, function_name = circuit.circuit.compile_circuit(\n            function_name=function_name, pub=True, generic_modulus=True\n        )\n        consistency_circuits.append((circuit_code, function_name))\n\n    # Combine all circuit code\n    code += sumcheck_code + prepare_scalars_code\n    code += \"\".join(circuit_code for circuit_code, _ in consistency_circuits)\n    code += get_circuit_definition_impl_template(len(scalar_indexes))\n\n    is_on_curve_code = \"\"\"\n#[inline(never)]\npub fn is_on_curve_excluding_infinity_bn254(p: G1Point, modulus: CircuitModulus) -> bool {\n    // INPUT stack\n    // y^2 = x^3 + 3\n    let (in0, in1) = (CE::<CI<0>> {}, CE::<CI<1>> {});\n    let y2 = circuit_mul(in1, in1);\n    let x2 = circuit_mul(in0, in0);\n    let x3 = circuit_mul(in0, x2);\n    let y2_minus_x3 = circuit_sub(y2, x3);\n\n    let mut circuit_inputs = (y2_minus_x3,).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x); // in0\n    circuit_inputs = circuit_inputs.next_2(p.y); // in1\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let zero_check: u384 = outputs.get_output(y2_minus_x3);\n    return zero_check == u384{limb0: 3, limb1: 0, limb2: 0, limb3: 0};\n}\n    \"\"\"\n    code += is_on_curve_code\n    is_on_curve_function_name = \"is_on_curve_excluding_infinity_bn254\"\n\n    return (\n        code,\n        sumcheck_function_name,\n        prepare_scalars_function_name,\n        [func_name for _, func_name in consistency_circuits],\n        scalar_indexes,\n        msm_len,\n        is_on_curve_function_name,\n    )\n\n\ndef _gen_contract_header(function_names: list[str]) -> str:\n    \"\"\"Generate the contract header and imports.\"\"\"\n    imports_str = \", \".join(function_names)\n    header = f\"\"\"\nuse super::honk_verifier_constants::{{vk, precomputed_lines}};\nuse super::honk_verifier_circuits::{{{imports_str}}};\n\n#[starknet::interface]\npub trait IUltraKeccakZKHonkVerifier<TContractState> {{\n    fn verify_ultra_keccak_zk_honk_proof(\n        self: @TContractState,\n        full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u256>, felt252>;\n}}\n\n#[starknet::contract]\nmod UltraKeccakZKHonkVerifier {{\n    use garaga::definitions::{{G1Point, G1G2Pair, BN254, get_BN254_modulus, get_GRUMPKIN_modulus, u384, get_eigenvalue, get_third_root_of_unity, get_min_one_order, get_nG_glv_fake_glv}};\n    use garaga::pairing_check::{{multi_pairing_check_bn254_2P_2F, MPCheckHintBN254}};\n    use garaga::ec_ops::{{G1PointTrait, _ec_safe_add, _scalar_mul_glv_and_fake_glv, GlvFakeGlvHint}};\n    use super::{{vk, precomputed_lines, {imports_str}}};\n    use garaga::apps::noir::{{ZKHonkProof, G2_POINT_KZG_1, G2_POINT_KZG_2}};\n    use garaga::apps::noir::zk_honk_transcript::{{Point256IntoCircuitPoint, KeccakHasherState, ZKHonkTranscriptTrait, ZK_BATCHED_RELATION_PARTIAL_LENGTH}};\n    use garaga::core::circuit::{{U32IntoU384, u288IntoCircuitInputValue, U64IntoU384, u256_to_u384}};\n    use core::num::traits::Zero;\n\n    #[storage]\n    struct Storage {{}}\n\n    #[derive(Drop, Serde)]\n    struct FullProof {{\n        proof: ZKHonkProof,\n        msm_hint: Span<felt252>,\n        kzg_hint:MPCheckHintBN254,\n    }}\n\n    #[abi(embed_v0)]\n    impl IUltraKeccakZKHonkVerifier of super::IUltraKeccakZKHonkVerifier<ContractState> {{\n        fn verify_ultra_keccak_zk_honk_proof(\n            self: @ContractState,\n            full_proof_with_hints: Span<felt252>,\n        ) -> Result<Span<u256>, felt252> {{\n            // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n            // This function returns Result::Ok(public_inputs) if the proof is valid.\n            // If the proof is invalid, it returns Result::Err(error).\n            // Read the documentation to learn how to generate the full_proof_with_hints array given a proof and a verifying key.\n            let mut full_proof_with_hints = full_proof_with_hints;\n            let full_proof = Serde::<FullProof>::deserialize(ref full_proof_with_hints).expect('deserialization failed');\n            let mod_bn = get_BN254_modulus();\n            let mod_grumpkin = get_GRUMPKIN_modulus();\n\n\"\"\"\n    return header\n\n\ndef _gen_constants_code(vk: HonkVk) -> str:\n    \"\"\"Generate the constants code for the contract.\"\"\"\n    lines = precompute_lines([G2_POINT_KZG_1, G2_POINT_KZG_2])\n    precomputed_lines = StructArray(\n        name=\"lines\",\n        elmts=[\n            G2Line(name=f\"line{i}\", elmts=lines[i : i + 4])\n            for i in range(0, len(lines), 4)\n        ],\n    )\n    return f\"\"\"\nuse garaga::definitions::{{G1Point, G2Line, u384, u288}};\nuse garaga::apps::noir::HonkVk;\n\n{vk.to_cairo()}\\n\npub const precomputed_lines: [G2Line<u288>; {len(precomputed_lines)//4}] = {precomputed_lines.serialize(raw=True, const=True)};\n\"\"\"\n\n\ndef _get_msm_points_array_code(log_n: int) -> tuple[str, tuple[int, int]]:\n    vk_points = [\n        \"vk.qm\",\n        \"vk.qc\",\n        \"vk.ql\",\n        \"vk.qr\",\n        \"vk.qo\",\n        \"vk.q4\",\n        \"vk.qLookup\",\n        \"vk.qArith\",\n        \"vk.qDeltaRange\",\n        \"vk.qElliptic\",\n        \"vk.qMemory\",\n        \"vk.qNnf\",\n        \"vk.qPoseidon2External\",\n        \"vk.qPoseidon2Internal\",\n        \"vk.s1\",\n        \"vk.s2\",\n        \"vk.s3\",\n        \"vk.s4\",\n        \"vk.id1\",\n        \"vk.id2\",\n        \"vk.id3\",\n        \"vk.id4\",\n        \"vk.t1\",\n        \"vk.t2\",\n        \"vk.t3\",\n        \"vk.t4\",\n        \"vk.lagrange_first\",\n        \"vk.lagrange_last\",\n    ]\n\n    next_proof_point_counter = 1\n    proof_points = [\n        f\"full_proof.proof.gemini_masking_poly.into(), // Proof point {next_proof_point_counter}\"\n    ]\n    next_proof_point_counter += 1\n\n    proof_points += [\n        f\"full_proof.proof.w1.into(), // Proof point {next_proof_point_counter}\",\n        f\"full_proof.proof.w2.into(), // Proof point {next_proof_point_counter+1}\",\n        f\"full_proof.proof.w3.into(), // Proof point {next_proof_point_counter+2}\",\n        f\"full_proof.proof.w4.into(), // Proof point {next_proof_point_counter+3}\",\n        f\"full_proof.proof.z_perm.into(), // Proof point {next_proof_point_counter+4}\",\n        f\"full_proof.proof.lookup_inverses.into(), // Proof point {next_proof_point_counter+5}\",\n        f\"full_proof.proof.lookup_read_counts.into(), // Proof point {next_proof_point_counter+6}\",\n        f\"full_proof.proof.lookup_read_tags.into(), // Proof point {next_proof_point_counter+7}\",\n    ]\n    next_proof_point_counter += 8\n\n    # Combine all points\n    all_points = vk_points + proof_points\n\n    points_str = \",\\n\".join(all_points)\n    code = \"// Starts with 1 * shplonk_q, not included in msm\\n\"\n    code += f\"\"\"            let mut _points: Array<G1Point> = array![{points_str}\\n];\n\n            for gem_comm in full_proof.proof.gemini_fold_comms {{\n                _points.append((*gem_comm).into());\n            }}; // log_n -1 = {log_n-1} points || Proof points {next_proof_point_counter}-{next_proof_point_counter+(log_n-1) - 1}\"\"\"\n    next_proof_point_counter += log_n - 1\n    # Add ZK-specific commitments\n    code += f\"\"\"\n            for lib_comm in full_proof.proof.libra_commitments {{\n                _points.append((*lib_comm).into());\n            }};// 3 points || Proof points {next_proof_point_counter}-{next_proof_point_counter+3-1}\"\"\"\n    next_proof_point_counter += 3\n    # Add common final points\n    code += f\"\"\"\n            _points.append(full_proof.proof.kzg_quotient.into()); // Proof point {next_proof_point_counter}\n            _points.append(BN254.G);\n\n            let mut points = _points.span();\"\"\"\n\n    proof_point_counter = next_proof_point_counter\n\n    n_vk_points = len(vk_points)\n\n    return code, (n_vk_points, proof_point_counter)\n\n\ndef _write_and_format_project_files(\n    output_folder_path: str,\n    output_folder_name: str,\n    cli_mode: bool,\n    constants_code: str,\n    circuits_code: str,\n    contract_code: str,\n    contract_name: str,\n    verification_function_name: str,\n    include_test_sample: bool = True,\n):\n    # Use the reusable function to write all files\n    write_verifier_files(\n        output_folder_path,\n        output_folder_name,\n        constants_code,\n        contract_code,\n        contract_name,\n        verification_function_name,\n        ProofSystem.UltraKeccakZKHonk,\n        cli_mode,\n        circuits_code=circuits_code,\n        modules=[\"honk_verifier\", \"honk_verifier_constants\", \"honk_verifier_circuits\"],\n        constants_filename=\"honk_verifier_constants.cairo\",\n        contract_filename=\"honk_verifier.cairo\",\n        circuits_filename=\"honk_verifier_circuits.cairo\",\n        include_test_sample=include_test_sample,\n    )\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"Generate HONK verifier contracts\")\n    parser.add_argument(\n        \"--max-log-n\",\n        action=\"store_true\",\n        help=\"Generate contracts with maximum log N size\",\n    )\n    args = parser.parse_args()\n\n    VK_PATH = (\n        \"hydra/garaga/starknet/honk_contract_generator/examples/vk_ultra_keccak.bin\"\n    )\n\n    CONTRACTS_FOLDER = \"src/contracts/autogenerated/\"  # Do not change this\n    EXAMPLES_FOLDER = \"hydra/garaga/starknet/honk_contract_generator/examples\"\n\n    if not args.max_log_n:\n        FOLDER_NAME = \"noir_ultra_keccak_zk_honk_example\"\n\n        gen_honk_verifier(\n            VK_PATH,\n            CONTRACTS_FOLDER,\n            FOLDER_NAME,\n        )\n\n        # Generate calldata\n        output_folder_path = os.path.join(CONTRACTS_FOLDER, FOLDER_NAME)\n        proof_file = os.path.join(EXAMPLES_FOLDER, \"proof_ultra_keccak_zk.bin\")\n        public_inputs_file = os.path.join(\n            EXAMPLES_FOLDER, \"public_inputs_ultra_keccak.bin\"\n        )\n\n        if os.path.exists(proof_file) and os.path.exists(public_inputs_file):\n            try:\n                write_test_calldata_file_generic(\n                    output_folder_path,\n                    ProofSystem.UltraKeccakZKHonk,\n                    VK_PATH,\n                    proof_file,\n                    public_inputs_file,\n                )\n                print(f\"Generated calldata for {FOLDER_NAME}\")\n            except Exception as e:\n                print(f\"Error generating calldata for {FOLDER_NAME}: {e}\")\n                raise e\n        else:\n            print(f\"Warning: Proof or public inputs file not found for {FOLDER_NAME}\")\n\n    if args.max_log_n:\n        # NOTE : each additional public input increase bytecode by ~ 21 felts.\n        #       each additional circuit size increase bytecode by ~ 372 felts.\n        vk = HonkVk.from_bytes(open(VK_PATH, \"rb\").read())\n        vk.log_circuit_size = MAX_LOG_N\n        vk.public_inputs_size = 4 + PAIRING_POINT_OBJECT_LENGTH\n\n        gen_honk_verifier(\n            vk,\n            CONTRACTS_FOLDER,\n            \"ultra_keccak_zk_honk_max_log_n\",\n        )\n"
  },
  {
    "path": "hydra/garaga/starknet/tests_and_calldata_generators/drand_calldata.py",
    "content": "import secrets\nfrom pathlib import Path\nfrom typing import Optional\n\nimport garaga.hints.io as io\nfrom garaga import garaga_rs\nfrom garaga.drand.client import (\n    DrandNetwork,\n    G2Point,\n    digest_func,\n    get_chain_info,\n    get_randomness,\n)\nfrom garaga.drand.tlock import encrypt_for_round\nfrom garaga.signature import hash_to_curve\nfrom garaga.starknet.tests_and_calldata_generators.map_to_curve import *\nfrom garaga.starknet.tests_and_calldata_generators.mpcheck import (\n    G1G2Pair,\n    MPCheckCalldataBuilder,\n)\n\n\ndef drand_round_to_calldata(round_number: int, use_rust=False) -> list[int]:\n    if use_rust:\n        return _drand_round_to_calldata_rust(round_number)\n\n    message = digest_func(round_number)\n    # print(f\"round {round_number} message {message}\")\n    msg_point = hash_to_curve(message, CurveID.BLS12_381, \"sha256\")\n\n    chain = get_chain_info(DrandNetwork.quicknet.value)\n\n    round = get_randomness(chain.hash, round_number)\n\n    sig_pt = round.signature_point\n    ###################\n    mpc_builder = MPCheckCalldataBuilder(\n        curve_id=CurveID.BLS12_381,\n        pairs=[\n            G1G2Pair(p=sig_pt, q=G2Point.get_nG(CurveID.BLS12_381, 1)),\n            G1G2Pair(p=msg_point, q=-chain.public_key),\n        ],\n        n_fixed_g2=2,\n        public_pair=None,\n    )\n\n    cd = []\n    sig_pt: G1Point\n    cd.append(round_number)\n    cd.extend(io.bigint_split(sig_pt.x))\n    cd.extend(io.bigint_split(sig_pt.y))\n    cd.extend(build_hash_to_curve_hint(message).to_calldata())\n    cd.extend(mpc_builder.serialize_to_calldata())\n\n    return [len(cd)] + cd\n\n\ndef _drand_round_to_calldata_rust(\n    round_number: int,\n) -> list[int]:\n    chain = get_chain_info(DrandNetwork.quicknet.value)\n    round = get_randomness(chain.hash, round_number)\n    randomness = round.randomness\n    signature = int(round.signature, 16)\n    data = [\n        round_number,\n        randomness,\n        signature,\n    ]\n    return garaga_rs.drand_calldata_builder(data)\n\n\ndef drand_encrypt_to_calldata(\n    round_number: int,\n    message: bytes,\n    randomness: Optional[bytes] = None,\n    use_rust=False,\n) -> list[int]:\n    if use_rust:\n        return _drand_encrypt_to_calldata(round_number, message, randomness)\n    chain = get_chain_info(DrandNetwork.quicknet.value)\n    cipher_text = encrypt_for_round(\n        chain.public_key, round_number, message, randomness is not None, randomness\n    )\n    cd = []\n    cd.append(round_number)\n    cd.extend(cipher_text.serialize_to_calldata())\n    return [len(cd)] + cd\n\n\ndef _drand_encrypt_to_calldata(\n    round_number: int,\n    message: bytes,\n    randomness: Optional[bytes] = None,\n) -> list[int]:\n    if randomness is None:\n        randomness = secrets.token_bytes(16)\n    data = [\n        round_number,\n        int.from_bytes(message, \"big\"),\n        int.from_bytes(randomness, \"big\"),\n    ]\n    return garaga_rs.drand_tlock_encrypt_calldata_builder(data)\n\n\ndef generate_drand_decrypt_constants(\n    verifier_class_hash: int, decrypt_contract_path: Path\n):\n    \"\"\"Write the verifier class hash to the decrypt contract's constants file.\"\"\"\n    constants_file = decrypt_contract_path / \"src\" / \"drand_decrypt_constants.cairo\"\n    constants_file.write_text(\n        f\"// Generated — do not edit manually.\\n\"\n        f\"pub const VERIFIER_CLASS_HASH: felt252 = {hex(verifier_class_hash)};\\n\"\n    )\n\n\nif __name__ == \"__main__\":\n\n    drand_round_to_calldata(1)\n    drand_round_to_calldata(2)\n    # drand_round_to_calldata(3)\n"
  },
  {
    "path": "hydra/garaga/starknet/tests_and_calldata_generators/map_to_curve.py",
    "content": "from dataclasses import dataclass\n\nfrom garaga.algebra import PyFelt\nfrom garaga.curves import CURVES, CurveID, get_base_field\nfrom garaga.hints.io import bigint_split, int_to_u384\nfrom garaga.points import G1Point\nfrom garaga.signature import apply_isogeny, hash_to_field\n\n\n@dataclass(slots=True)\nclass MapToCurveHint:\n    gx1_is_square: bool\n    y1: PyFelt\n    y_flag: bool\n\n    def to_cairo(self) -> str:\n        return f\"MapToCurveHint {{ gx1_is_square: {str(self.gx1_is_square).lower()}, y1: {int_to_u384(self.y1.value, as_hex=True)}, y_flag: {str(self.y_flag).lower()} }}\"\n\n    def to_calldata(self) -> list[int]:\n        cd = []\n        cd.append(int(self.gx1_is_square))\n        cd.extend(bigint_split(self.y1.value))\n        cd.append(int(self.y_flag))\n        return cd\n\n\n@dataclass(slots=True)\nclass HashToCurveHint:\n    f0_hint: MapToCurveHint\n    f1_hint: MapToCurveHint\n\n    def to_cairo(self) -> str:\n        return f\"\"\"HashToCurveHint {{ f0_hint: {self.f0_hint.to_cairo()},\n        f1_hint: {self.f1_hint.to_cairo()} }}\"\"\"\n\n    def to_calldata(self) -> list[int]:\n        cd = []\n        cd.extend(self.f0_hint.to_calldata())\n        cd.extend(self.f1_hint.to_calldata())\n        return cd\n\n\ndef build_map_to_curve_hint(u: PyFelt) -> tuple[G1Point, MapToCurveHint]:\n    field = get_base_field(CurveID.BLS12_381)\n    a = field(CURVES[CurveID.BLS12_381.value].swu_params.A)\n    b = field(CURVES[CurveID.BLS12_381.value].swu_params.B)\n    z = field(CURVES[CurveID.BLS12_381.value].swu_params.Z)\n\n    zeta_u2 = z * u**2\n    ta = zeta_u2**2 + zeta_u2\n    num_x1 = b * (ta + field.one())\n\n    if ta.value == 0:\n        div = a * z\n    else:\n        div = a * -ta\n\n    num2_x1 = num_x1**2\n    div2 = div**2\n    div3 = div2 * div\n    assert div3.value != 0\n\n    num_gx1 = (num2_x1 + a * div2) * num_x1 + b * div3\n    num_x2 = zeta_u2 * num_x1\n\n    gx1 = num_gx1 / div3\n    gx1_square = gx1.is_quad_residue()\n    if gx1_square:\n        y1 = gx1.sqrt(min_root=False)\n        assert y1 * y1 == gx1\n    else:\n        y1 = (z * gx1).sqrt(min_root=False)\n        assert y1 * y1 == z * gx1\n\n    y2 = zeta_u2 * u * y1\n    y = y1 if gx1_square else y2\n    y_flag = y.value % 2 == u.value % 2\n\n    num_x = num_x1 if gx1_square else num_x2\n    x_affine = num_x / div\n    y_affine = -y if y.value % 2 != u.value % 2 else y\n\n    point_on_curve = G1Point(\n        x_affine.value, y_affine.value, CurveID.BLS12_381, iso_point=True\n    )\n    return point_on_curve, MapToCurveHint(\n        gx1_is_square=gx1_square, y1=y1, y_flag=y_flag\n    )\n\n\ndef build_hash_to_curve_hint(message: bytes) -> HashToCurveHint:\n    felt0, felt1 = hash_to_field(message, 2, CurveID.BLS12_381.value, \"sha256\")\n    pt0, f0_hint = build_map_to_curve_hint(felt0)\n    pt1, f1_hint = build_map_to_curve_hint(felt1)\n    sum_pt = pt0.add(pt1)\n    # print(\n    #     f\"sum_pt: {int_to_u384(sum_pt.x, as_hex=False)} {int_to_u384(sum_pt.y, as_hex=False)}\"\n    # )\n    sum_pt = apply_isogeny(sum_pt)\n    # print(\n    #     f\"sum_pt: {int_to_u384(sum_pt.x, as_hex=False)} {int_to_u384(sum_pt.y, as_hex=False)}\"\n    # )\n    x = CURVES[CurveID.BLS12_381.value].x\n    n = CURVES[CurveID.BLS12_381.value].n\n    cofactor = (1 - (x % n)) % n  # 15132376222941642753\n    # print(f\"cofactor: {cofactor}, hex :{hex(cofactor)}\")\n\n    return HashToCurveHint(\n        f0_hint=f0_hint,\n        f1_hint=f1_hint,\n    )\n\n\nif __name__ == \"__main__\":\n    field = get_base_field(CurveID.BLS12_381)\n\n    import hashlib\n\n    hint = build_hash_to_curve_hint(hashlib.sha256(b\"Hello, World!\").digest())\n    print(hint.to_cairo())\n    # print(hint.to_calldata())\n"
  },
  {
    "path": "hydra/garaga/starknet/tests_and_calldata_generators/mpcheck.py",
    "content": "import functools\nfrom dataclasses import dataclass\nfrom functools import lru_cache\n\nfrom garaga import garaga_rs\nfrom garaga import modulo_circuit_structs as structs\nfrom garaga.algebra import Polynomial, PyFelt\nfrom garaga.curves import CurveID, get_base_field, get_irreducible_poly\nfrom garaga.points import G1G2Pair\nfrom garaga.poseidon_transcript import CairoPoseidonTranscript\nfrom garaga.precompiled_circuits.multi_miller_loop import precompute_lines\nfrom garaga.precompiled_circuits.multi_pairing_check import (\n    MultiMillerLoopCircuit,\n    MultiPairingCheckCircuit,\n    WriteOps,\n    get_max_Q_degree,\n)\n\n\n@dataclass(slots=True)\nclass MPCheckCalldataBuilder:\n    curve_id: CurveID\n    pairs: list[G1G2Pair]\n    n_fixed_g2: int\n    public_pair: G1G2Pair | None\n\n    def __hash__(self):\n        return hash(\n            (self.curve_id, tuple(self.pairs), self.n_fixed_g2, self.public_pair)\n        )\n\n    def __post_init__(self):\n        # Validate input\n        assert isinstance(self.pairs, (list, tuple))\n        assert all(\n            isinstance(pair, G1G2Pair) for pair in self.pairs\n        ), f\"All pairs must be G1G2Pair, got {[type(pair) for pair in self.pairs]}\"\n        assert all(\n            self.curve_id == pair.curve_id == self.pairs[0].curve_id\n            for pair in self.pairs\n        ), f\"All pairs must be on the same curve, got {[pair.curve_id for pair in self.pairs]}\"\n        assert (\n            isinstance(self.public_pair, G1G2Pair) or self.public_pair is None\n        ), f\"Extra pair must be G1G2Pair or None, got {self.public_pair}\"\n        assert len(self.pairs) >= 2\n        assert 0 <= self.n_fixed_g2 <= len(self.pairs)\n\n    @property\n    def include_miller_loop_result(self):\n        return self.public_pair is not None\n\n    @property\n    def field(self):\n        return get_base_field(self.curve_id)\n\n    @property\n    def big_Q_expected_len(self):\n        return get_max_Q_degree(self.curve_id.value, len(self.pairs)) + 1\n\n    @property\n    def three_limbs_only(self):\n        return self.curve_id != CurveID.BLS12_381\n\n    @lru_cache(maxsize=1)\n    def extra_miller_loop_result(self) -> list[PyFelt] | None:\n        if self.include_miller_loop_result:\n            circuit = MultiMillerLoopCircuit(\n                name=\"precompute M\", curve_id=self.curve_id.value, n_pairs=1\n            )\n            circuit.write_p_and_q_raw(self.public_pair.to_pyfelt_list())\n            M = circuit.miller_loop(n_pairs=1)\n            return [mi.felt for mi in M]\n        else:\n            return None\n\n    @lru_cache(maxsize=1)\n    def lines(self) -> list[PyFelt]:\n        lines = precompute_lines([pair.q for pair in self.pairs[0 : self.n_fixed_g2]])\n        assert len(lines) % 4 == 0, f\"Lines must be a multiple of 4, got {len(lines)}\"\n        return lines\n\n    def _init_circuit(self) -> MultiPairingCheckCircuit:\n        mpcheck_circuit = MultiPairingCheckCircuit(\n            name=\"mpcheck\",\n            curve_id=self.curve_id.value,\n            n_pairs=len(self.pairs),\n            precompute_lines=bool(self.n_fixed_g2),\n            n_points_precomputed_lines=self.n_fixed_g2,\n        )\n\n        mpcheck_circuit.precomputed_lines = mpcheck_circuit.write_elements(\n            self.lines(), WriteOps.INPUT\n        )\n        mpcheck_circuit._precomputed_lines_generator = (\n            mpcheck_circuit._create_precomputed_lines_generator()\n        )\n\n        p_q_input = []\n        for pair in self.pairs:\n            p_q_input.extend(pair.to_pyfelt_list())\n        mpcheck_circuit.write_p_and_q_raw(p_q_input)\n        return mpcheck_circuit\n\n    def _retrieve_Pis_Qis_and_Ris_from_circuit(\n        self, mpcheck_circuit: MultiPairingCheckCircuit\n    ) -> tuple[list[list[PyFelt]], list[list[PyFelt]], list[list[PyFelt]]]:\n        relations = mpcheck_circuit.accumulate_poly_instructions[0]\n        Qis = relations.Qis\n        Pis = relations.Pis\n        Ris = relations.Ris\n        return Pis, Qis, Ris\n\n    def _get_passed_Ris_from_Ris(self, Ris: list[list[PyFelt]]) -> list[list[PyFelt]]:\n        passed_Ris = (\n            Ris if self.curve_id == CurveID.BLS12_381 else Ris[1:]\n        )  # Skip first Ri for BN254 as it known to be one (lambda_root*lambda_root_inverse) result\n\n        return passed_Ris\n\n    def _init_transcript(self) -> CairoPoseidonTranscript:\n        transcript = self._new_transcript()\n        # Hash inputs.\n        for pair in self.pairs:\n            transcript.hash_limbs_multi(\n                pair.to_pyfelt_list(), three_limbs_only=False\n            )  # False because G1Point is holding u384 only.\n        return transcript\n\n    def _hash_hints_and_get_base_random_rlc_coeff(\n        self,\n        transcript: CairoPoseidonTranscript,\n        lambda_root: list[PyFelt],\n        lambda_root_inverse: list[PyFelt],\n        scaling_factor: list[PyFelt],\n        scaling_factor_sparsity: list[PyFelt],\n        Ris: list[list[PyFelt]],\n    ) -> PyFelt:\n        if self.curve_id == CurveID.BN254:\n            transcript.hash_limbs_multi(lambda_root)\n\n        transcript.hash_limbs_multi(lambda_root_inverse)\n        transcript.hash_limbs_multi(scaling_factor, sparsity=scaling_factor_sparsity)\n\n        for Ri in Ris:\n            assert len(Ri) == 12\n            transcript.hash_limbs_multi(Ri)\n\n        if self.include_miller_loop_result:\n            transcript.hash_limbs_multi(self.extra_miller_loop_result())\n\n        return self.field(transcript.s1)\n\n    def _hash_big_Q_and_get_z(\n        self, transcript: CairoPoseidonTranscript, big_Q: list[PyFelt]\n    ):\n        # Start a fresh transcript for the second stage and seed it with the base RLC coefficient\n        seeded_transcript = self._seed_transcript_with_base_rlc(\n            self._new_transcript(\"_II\"), transcript.s1\n        )\n        seeded_transcript.hash_limbs_multi(big_Q)\n        return self.field(seeded_transcript.s0)\n\n    def _new_transcript(self, stage_suffix: str = \"\") -> CairoPoseidonTranscript:\n        init_hash = f\"MPCHECK_{self.curve_id.name}_{len(self.pairs)}P_{self.n_fixed_g2}F{stage_suffix}\"\n        return CairoPoseidonTranscript(\n            init_hash=int.from_bytes(init_hash.encode(), byteorder=\"big\"),\n            three_limbs_only=self.three_limbs_only,\n        )\n\n    def _seed_transcript_with_base_rlc(\n        self, transcript: CairoPoseidonTranscript, base_rlc: PyFelt\n    ) -> CairoPoseidonTranscript:\n        # Hash the base RLC coefficient from _hash_hints_and_get_base_random_rlc_coeff\n        transcript.hash_element(base_rlc)\n        return transcript\n\n    def _sanity_check_verify_rlc_equation(\n        self,\n        z: PyFelt,\n        c1: PyFelt,\n        n_relations_with_ci: int,\n        Pis: list[list[PyFelt]],\n        big_Q: Polynomial,\n        Ris: list[list[PyFelt]],\n    ):\n        lhs = self.field.zero()\n        ci = self.field.one()\n        k = 0\n        for i in range(n_relations_with_ci - 1, -1, -1):\n            # if self.public_pair is None:\n            #     print(f\"{self.curve_id.name} = LHS_{k} : {io.int_to_u384(lhs, False)}\")\n            k += 1\n            Prod_Pis_of_z = functools.reduce(\n                lambda x, y: x * y, [Polynomial(pi).evaluate(z) for pi in Pis[i]]\n            )\n            Ri_of_z = Polynomial(Ris[i]).evaluate(z)\n            lhs += ci * (Prod_Pis_of_z - Ri_of_z)\n            ci *= c1\n            # print(f\"lhs_{i} : {io.int_to_u384(lhs)}\")\n\n        lhs_print = self.field.zero()\n        k = 0\n        for i in range(n_relations_with_ci):\n            # if self.public_pair is None:\n            #     print(\n            #         f\"{self.curve_id.name} = LHS_{k} : {io.int_to_u384(lhs_print, False)}\"\n            #     )\n            k += 1\n            Prod_Pis_of_z = functools.reduce(\n                lambda x, y: x * y, [Polynomial(pi).evaluate(z) for pi in Pis[i]]\n            )\n            Ri_of_z = Polynomial(Ris[i]).evaluate(z)\n            __lhs = Prod_Pis_of_z - Ri_of_z\n            lhs_print = lhs_print * c1 + __lhs\n\n        P_irr = get_irreducible_poly(curve_id=self.curve_id, extension_degree=12)\n        big_Q_of_z = big_Q.evaluate(z)\n        P_of_z = P_irr.evaluate(z)\n        # print(f\"big_Q_of_z : {io.int_to_u384(big_Q_of_z)}\")\n        # print(f\"P_of_z : {io.int_to_u384(P_of_z)}\")\n        assert lhs == big_Q_of_z * P_of_z, \"Check failed.\"\n\n    @lru_cache(maxsize=1)\n    def build_mpcheck_hint(\n        self,\n    ) -> tuple[\n        structs.Cairo1SerializableStruct, structs.Cairo1SerializableStruct | None\n    ]:\n        \"\"\"\n        Return MPCheckHint struct\n        \"\"\"\n        mpcheck_circuit = self._init_circuit()\n        transcript = self._init_transcript()\n\n        _, lambda_root, lambda_root_inverse, scaling_factor, scaling_factor_sparsity = (\n            mpcheck_circuit.multi_pairing_check(\n                len(self.pairs), self.extra_miller_loop_result()\n            )\n        )\n\n        Pis, Qis, Ris = self._retrieve_Pis_Qis_and_Ris_from_circuit(mpcheck_circuit)\n        passed_Ris = self._get_passed_Ris_from_Ris(Ris)\n\n        c1 = self._hash_hints_and_get_base_random_rlc_coeff(\n            transcript,\n            lambda_root,\n            lambda_root_inverse,\n            scaling_factor,\n            scaling_factor_sparsity,\n            passed_Ris,\n        )\n\n        n_relations_with_ci = len(passed_Ris) + (\n            1 if self.curve_id == CurveID.BN254 else 0\n        )\n\n        ci, big_Q = self.field.one(), Polynomial.zero(self.field.p)\n\n        for i in range(n_relations_with_ci - 1, -1, -1):\n            # print(f\"c_{i} : {io.int_to_u384(ci)}\")\n            big_Q += Qis[i] * ci\n            ci *= c1\n            # print(f\"{i=}, {n_relations_with_ci=}\")\n            assert ci == c1 ** (n_relations_with_ci - i)\n\n        big_Q_coeffs = big_Q.get_coeffs()\n        big_Q_coeffs.extend(\n            [self.field.zero()] * (self.big_Q_expected_len - len(big_Q_coeffs))\n        )\n\n        z = self._hash_big_Q_and_get_z(transcript, big_Q_coeffs)\n        self._sanity_check_verify_rlc_equation(\n            z, c1, n_relations_with_ci, Pis, big_Q, Ris\n        )\n\n        # Skip last Ri as it is known to be 1 for pairing checks\n        assert [x.value for x in passed_Ris[-1]] == [\n            1,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n            0,\n        ], f\"Last Ri must be 1_Fp12, got {[x.value for x in passed_Ris[-1]]}\"\n\n        passed_Ris = passed_Ris[:-1]\n\n        if self.curve_id == CurveID.BN254:\n            hint_struct_list_init = [\n                structs.E12D(name=\"lambda_root\", elmts=lambda_root)\n            ]\n        else:\n            hint_struct_list_init = []\n\n        return structs.Struct(\n            struct_name=f\"MPCheckHint{self.curve_id.name}\",\n            name=\"hint\",\n            elmts=hint_struct_list_init\n            + [\n                structs.E12D(name=\"lambda_root_inverse\", elmts=lambda_root_inverse),\n                structs.MillerLoopResultScalingFactor(\n                    name=\"w\",\n                    elmts=[\n                        wi\n                        for wi, si in zip(scaling_factor, scaling_factor_sparsity)\n                        if si != 0\n                    ],\n                ),\n                structs.StructSpan(\n                    name=\"Ris\",\n                    elmts=[\n                        structs.E12D(name=f\"R{i}\", elmts=[ri.felt for ri in Ri])\n                        for i, Ri in enumerate(passed_Ris)\n                    ],\n                ),\n                structs.u384Array(name=\"big_Q\", elmts=big_Q_coeffs),\n            ]\n            + [structs.felt252(name=\"z\", elmts=[z])],\n        )\n\n    def _get_input_structs(self) -> list[structs.Cairo1SerializableStruct]:\n        inputs = []\n        for i, pair in enumerate(self.pairs):\n            inputs.append(\n                structs.G1G2PairCircuit(name=f\"pair{i}\", elmts=pair.to_pyfelt_list())\n            )\n        if self.include_miller_loop_result:\n            inputs.append(\n                structs.E12D(\n                    name=\"precomputed_miller_loop_result\",\n                    elmts=self.extra_miller_loop_result(),\n                )\n            )\n        if self.n_fixed_g2 > 0:\n            lines = self.lines()\n            inputs.append(\n                structs.StructSpan(\n                    name=\"lines\",\n                    elmts=[\n                        structs.G2Line(name=f\"line{i}\", elmts=lines[i : i + 4])\n                        for i in range(0, len(lines), 4)\n                    ],\n                )\n            )\n        mpcheck_hint = self.build_mpcheck_hint()\n        inputs.append(mpcheck_hint)\n        return inputs\n\n    def to_cairo_1_test(self):\n        # print(\n        #     f\"Generating MPCheck test for {self.curve_id.name} with {len(self.pairs)} pairs and {self.n_fixed_g2} fixed G2 points, using extra Miller loop result: {self.include_miller_loop_result}\"\n        # )\n        with_extra = (\n            \"_with_extra_miller_loop_result\" if self.include_miller_loop_result else \"\"\n        )\n        fn_name = f\"multi_pairing_check_{self.curve_id.name.lower()}_{len(self.pairs)}P_{self.n_fixed_g2}F{with_extra}\"\n        inputs = self._get_input_structs()\n\n        test_name = f\"test_{self.curve_id.name}_mpcheck_{len(self.pairs)}P_{self.n_fixed_g2}F{with_extra}\"\n\n        input_code = \"\"\n        for struct in inputs:\n            input_code += struct.serialize()\n\n        code = f\"\"\"\n        #[test]\n        fn {test_name}() {{\n            {input_code}\n            let res = {fn_name}({', '.join([struct.name for struct in inputs])});\n            assert!(res.is_ok());\n        }}\n        \"\"\"\n        return code\n\n    def _serialize_to_calldata_rust(self) -> list[int]:\n        return garaga_rs.mpc_calldata_builder(\n            self.curve_id.value,\n            [element.value for pair in self.pairs for element in pair.to_pyfelt_list()],\n            self.n_fixed_g2,\n            (\n                [element.value for element in self.public_pair.to_pyfelt_list()]\n                if self.public_pair is not None\n                else []\n            ),\n        )\n\n    def serialize_to_calldata(\n        self,\n        use_rust=False,\n    ) -> list[int]:\n        if use_rust:\n            return self._serialize_to_calldata_rust()\n\n        mpcheck_hint = self.build_mpcheck_hint()\n\n        call_data: list[int] = []\n        call_data.extend(mpcheck_hint.serialize_to_calldata())\n        return call_data\n\n\nif __name__ == \"__main__\":\n    from garaga.precompiled_circuits.multi_pairing_check import get_pairing_check_input\n\n    pairs, public_pair = get_pairing_check_input(\n        curve_id=CurveID.BLS12_381,\n        n_pairs=3,\n        include_m=True,\n        return_pairs=True,\n    )\n    mpc = MPCheckCalldataBuilder(\n        curve_id=CurveID.BLS12_381,\n        pairs=pairs,\n        n_fixed_g2=2,\n        public_pair=public_pair,\n    )\n    print(mpc.serialize_to_calldata(use_rust=True))\n"
  },
  {
    "path": "hydra/garaga/starknet/tests_and_calldata_generators/msm.py",
    "content": "from dataclasses import dataclass\nfrom functools import lru_cache\n\nfrom garaga import garaga_rs\nfrom garaga import modulo_circuit_structs as structs\nfrom garaga.algebra import PyFelt\nfrom garaga.curves import CURVES, STARK, CurveID, WeierstrassCurve, get_base_field\nfrom garaga.hints import fake_glv\nfrom garaga.points import G1Point\n\n\n@dataclass(slots=True)\nclass MSMCalldataBuilder:\n    curve_id: CurveID\n    points: list[G1Point]\n    scalars: list[int]\n\n    def __post_init__(self):\n        assert all(\n            point.curve_id == self.curve_id for point in self.points\n        ), \"All points must be on the same curve.\"\n        assert len(self.points) == len(\n            self.scalars\n        ), f\"Number of points and scalars must be equal, got {len(self.points)} points and {len(self.scalars)} scalars\"\n        assert all(\n            0 <= s <= CURVES[self.curve_id.value].n for s in self.scalars\n        ), f\"Scalars must be in [0, {self.curve_id.name}'s order] == [0, {CURVES[self.curve_id.value].n}].\"\n\n    def __hash__(self) -> int:\n        return hash((self.curve_id, tuple(self.points), tuple(self.scalars)))\n\n    @property\n    def field(self):\n        return get_base_field(self.curve_id)\n\n    @property\n    def msm_size(self):\n        return len(self.scalars)\n\n    @property\n    def curve(self) -> WeierstrassCurve:\n        return CURVES[self.curve_id.value]\n\n    @lru_cache(maxsize=2)\n    def build_msm_hint(self) -> structs.StructArray:\n        \"\"\"\n        Returns the MSMHint\n        \"\"\"\n        hints_structs = []\n        for i, (point, scalar) in enumerate(zip(self.points, self.scalars)):\n            if self.curve.is_endomorphism_available():\n                Q, u1, u2, v1, v2 = fake_glv.get_glv_fake_glv_hint(point, scalar)\n                hints_structs.append(\n                    structs.Struct(\n                        struct_name=f\"GlvFakeGlvHint\",\n                        name=f\"glv_fake_glv_hint_{i}\",\n                        elmts=[\n                            structs.G1PointCircuit.from_G1Point(\"Q\", Q),\n                            structs.felt252(name=f\"u1_{i}\", elmts=[PyFelt(u1, STARK)]),\n                            structs.felt252(name=f\"u2_{i}\", elmts=[PyFelt(u2, STARK)]),\n                            structs.felt252(name=f\"v1_{i}\", elmts=[PyFelt(v1, STARK)]),\n                            structs.felt252(name=f\"v2_{i}\", elmts=[PyFelt(v2, STARK)]),\n                        ],\n                    )\n                )\n            else:\n                Q, s1, s2 = fake_glv.get_fake_glv_hint(point, scalar)\n                hints_structs.append(\n                    structs.Struct(\n                        struct_name=f\"FakeGlvHint\",\n                        name=f\"fake_glv_hint_{i}\",\n                        elmts=[\n                            structs.G1PointCircuit.from_G1Point(\"Q\", Q),\n                            structs.felt252(name=f\"s1_{i}\", elmts=[PyFelt(s1, STARK)]),\n                            structs.felt252(name=f\"s2_{i}\", elmts=[PyFelt(s2, STARK)]),\n                        ],\n                    )\n                )\n\n        return structs.StructSpan(name=\"msm_hint\", elmts=hints_structs)\n\n    def _get_input_structs(\n        self,\n    ) -> list[structs.Cairo1SerializableStruct]:\n        \"\"\" \"\"\"\n        inputs = []\n        inputs.append(self.build_msm_hint())  # msm_hint\n        inputs.append(\n            structs.StructSpan(\n                name=\"points\",\n                elmts=[\n                    structs.G1PointCircuit.from_G1Point(f\"point{i}\", point)\n                    for i, point in enumerate(self.points)\n                ],\n            )\n        )\n        inputs.append(\n            structs.StructSpan(\n                name=\"scalars\",\n                elmts=[\n                    structs.u256(name=f\"scalar{i}\", elmts=[PyFelt(s, 2**256)])\n                    for i, s in enumerate(self.scalars)\n                ],\n            )\n        )\n\n        return inputs\n\n    def to_cairo_1_test(self, test_name: str = None, ignored=False):\n        # print(\n        #     f\"Generating MSM test for {self.curve_id.name} with {len(self.scalars)} points\"\n        # )\n        test_name = test_name or f\"test_msm_{self.curve_id.name}_{len(self.scalars)}P\"\n        inputs = garaga_rs.msm_calldata_builder(\n            [value for point in self.points for value in [point.x, point.y]],\n            self.scalars,\n            self.curve_id.value,\n            True,\n            False,\n        )\n        Q = structs.G1PointCircuit.from_G1Point(\n            \"Q\", G1Point.msm(self.points, self.scalars)\n        )\n\n        T = \"u384\" if self.curve_id == CurveID.BLS12_381 else \"u288\"\n        ignore_str = \"\\n#[ignore]\" if ignored else \"\"\n        code = f\"\"\"\n        #[test]{ignore_str}\n        fn {test_name}() {{\n            let mut data = array![{','.join([hex(value) for value in inputs])}].span();\n            let points = Serde::deserialize(ref data).unwrap();\n            let scalars = Serde::deserialize(ref data).unwrap();\n            let curve_id = Serde::deserialize(ref data).unwrap();\n            let res = msm_g1(points, scalars, curve_id, data);\n            assert!(res == {Q.serialize(raw=True)});\n        }}\n        \"\"\"\n        return code\n\n    def _serialize_to_calldata_rust(\n        self,\n        include_points_and_scalars=True,\n        serialize_as_pure_felt252_array=False,\n    ) -> list[int]:\n        return garaga_rs.msm_calldata_builder(\n            [value for point in self.points for value in [point.x, point.y]],\n            self.scalars,\n            self.curve_id.value,\n            include_points_and_scalars,\n            serialize_as_pure_felt252_array,\n        )\n\n    def serialize_to_calldata(\n        self,\n        include_points_and_scalars=True,\n        serialize_as_pure_felt252_array=False,\n        use_rust=False,\n    ) -> list[int]:\n        if use_rust:\n            return self._serialize_to_calldata_rust(\n                include_points_and_scalars,\n                serialize_as_pure_felt252_array,\n            )\n\n        msm_hint, points, scalars = self._get_input_structs()\n\n        call_data: list[int] = []\n\n        if include_points_and_scalars:\n            call_data.extend(points.serialize_to_calldata())\n            call_data.extend(scalars.serialize_to_calldata())\n            call_data.append(self.curve_id.value)\n\n        call_data.extend(msm_hint.serialize_to_calldata()[1:])\n\n        if serialize_as_pure_felt252_array:\n            return [len(call_data)] + call_data\n        else:\n            return call_data\n\n\nif __name__ == \"__main__\":\n    import random\n\n    c = CurveID.SECP256K1\n    order = CURVES[c.value].n\n    msm = MSMCalldataBuilder(\n        curve_id=c,\n        points=[G1Point.gen_random_point(c) for _ in range(1)],\n        scalars=[random.randint(0, order) for _ in range(1)],\n    )\n    cd = msm.serialize_to_calldata(\n        include_points_and_scalars=True,\n        serialize_as_pure_felt252_array=False,\n    )\n    print(cd)\n    print(len(cd))\n"
  },
  {
    "path": "hydra/garaga/starknet/tests_and_calldata_generators/signatures.py",
    "content": "import random\nfrom dataclasses import dataclass\nfrom functools import lru_cache\nfrom hashlib import sha512\n\nfrom garaga import garaga_rs\nfrom garaga.curves import BASE, CURVES, N_LIMBS, CurveID, TwistedEdwardsCurve\nfrom garaga.hints.io import bigint_split, split_128\nfrom garaga.points import G1Point\nfrom garaga.rsa_rns import (\n    CHANNEL_MODULI,\n    ReductionWitness,\n    RNSContext,\n    RNSInteger,\n    RSA2048ExponentiationWitness,\n    generate_rsa2048_sha256_witness,\n    generate_rsa2048_witness,\n    is_valid_rsa2048_witness,\n)\n\n\n@dataclass(slots=True)\nclass SchnorrSignature:\n    \"\"\"\n    A Schnorr signature with associated public key and challenge.\n    Fields :\n    rx : int - The x-coordinate of the R point from the signature.\n    s : int - The s-coordinate of the signature.\n    e : int - The challenge hash.\n    px : int - The x-coordinate of the public key.\n    py : int - The y-coordinate of the public key.\n    curve_id : CurveID - The curve id.\n    \"\"\"\n\n    rx: int\n    s: int\n    e: int\n    px: int\n    py: int\n    curve_id: CurveID\n\n    def __post_init__(self):\n        assert self.py % 2 == 0, \"y-coordinate of public key must be even\"\n        n = CURVES[self.curve_id.value].n\n        p = CURVES[self.curve_id.value].p\n        assert (\n            0 <= self.rx < p\n        ), f\"rx must be in range 0 < rx < {hex(p)}, got {hex(self.rx)}\"\n        assert 0 < self.s < n, f\"s must be in range 0 < s < {hex(n)}, got {hex(self.s)}\"\n        assert 0 < self.e < n, f\"e must be in range 0 < e < {hex(n)}, got {hex(self.e)}\"\n\n    @classmethod\n    def sample(cls, curve_id: CurveID) -> \"SchnorrSignature\":\n        \"\"\"\n        Generate a valid Schnorr signature for the given curve.\n        The algorithm:\n        1. Generate private key x\n        2. Compute public key P = xG\n        3. Generate random k (nonce)\n        4. Compute R = kG\n        5. Compute e (challenge)\n        6. Compute s = k + ex (mod n)\n        \"\"\"\n        curve = CURVES[curve_id.value]\n        n = curve.n\n        G = G1Point.get_nG(curve_id, 1)\n\n        # Generate private key and compute public key\n        x = random.randint(1, n - 1)\n        Pk = G.scalar_mul(x)\n\n        # Ensure public key has even y (BIP340 requirement)\n        if Pk.y % 2 == 1:\n            x = (-x) % n  # Update the private key accordingly\n            Pk = -Pk\n\n        # Generate nonce and compute R point\n        k = random.randint(1, n - 1)\n        R = G.scalar_mul(k)\n\n        # Ensure R has even y (BIP340 requirement)\n        if R.y % 2 == 1:\n            k = (-k) % n  # Update the nonce accordingly\n            R = -R\n\n        # Generate challenge (in real usage this would be H(R.x || P.x || message))\n        e = random.randint(1, n - 1)\n\n        # Compute s = k + ex mod n\n        s = (k + e * x) % n\n\n        res = SchnorrSignature(rx=R.x, s=s, e=e, px=Pk.x, py=Pk.y, curve_id=curve_id)\n        assert res.is_valid(), \"generated signature is invalid\"\n        return res\n\n    def is_valid(self) -> bool:\n        Pk = G1Point(self.px, self.py, self.curve_id)\n        n = CURVES[self.curve_id.value].n\n        G = G1Point.get_nG(self.curve_id, 1)\n        res = G.scalar_mul(self.s).add(Pk.scalar_mul(-self.e % n))\n        return res.x == self.rx\n\n    def serialize(self, prepend_public_key: bool = True) -> list[int]:\n        cd = []\n        if prepend_public_key:\n            cd.extend(bigint_split(self.px, N_LIMBS, BASE))\n            cd.extend(bigint_split(self.py, N_LIMBS, BASE))\n        cd.extend(bigint_split(self.rx, N_LIMBS, BASE))\n        cd.extend(split_128(self.s))\n        cd.extend(split_128(self.e))\n\n        return cd\n\n    def serialize_with_hints(\n        self, use_rust=False, as_str=False, prepend_public_key: bool = True\n    ) -> list[int] | str:\n        \"\"\"Serialize the signature with hints for verification\"\"\"\n        if use_rust:\n            cd = garaga_rs.schnorr_calldata_builder(\n                self.rx,\n                self.s,\n                self.e,\n                self.px,\n                self.py,\n                prepend_public_key,\n                self.curve_id.value,\n            )\n            if as_str:\n                return \"[{}]\".format(\", \".join(map(hex, cd)))\n            return cd\n\n        cd = self.serialize(prepend_public_key)\n        e_neg = -self.e % CURVES[self.curve_id.value].n\n        msm_calldata = garaga_rs.msm_calldata_builder(\n            [\n                CURVES[self.curve_id.value].Gx,\n                CURVES[self.curve_id.value].Gy,\n                self.px,\n                self.py,\n            ],\n            [self.s, e_neg],\n            self.curve_id.value,\n            False,  # include_points_and_scalars\n            True,  # serialize_as_pure_felt252_array\n        )\n        cd.extend(msm_calldata)\n        if as_str:\n            return \"[{}]\".format(\", \".join(map(hex, cd)))\n        return cd\n\n\n@dataclass(slots=True)\nclass ECDSASignature:\n    \"\"\"\n    An ECDSA signature with recovery parameter and associated public key and message hash.\n\n    Fields:\n      r    : int - r component of the signature (derived from the ephemeral point R.x mod n).\n      s    : int - s component of the signature.\n      v    : int - Recovery parameter; 0 if R.y is even, otherwise 1.\n      px   : int - The x-coordinate of the public key.\n      py   : int - The y-coordinate of the public key.\n      z    : int - The message hash used in signing (in practice, z = H(message)).\n      curve_id : CurveID - The identifier for the curve being used.\n    \"\"\"\n\n    r: int\n    s: int\n    v: int\n    px: int\n    py: int\n    z: int\n    curve_id: CurveID\n\n    def __post_init__(self):\n        curve = CURVES[self.curve_id.value]\n        n = curve.n\n        p = curve.p\n        # For ECDSA, r and s must be nonzero and less than n.\n        assert 0 < self.r < n, f\"r must be in range 1..n-1, got {hex(self.r)}\"\n        assert 0 < self.s < n, f\"s must be in range 1..n-1, got {hex(self.s)}\"\n        # v should be either 0 or 1.\n        assert self.v in (0, 1), f\"v must be 0 or 1, got {self.v}\"\n        # Ensure public key coordinates are in the field.\n        assert 0 <= self.px < p, f\"px must be in range 0..p-1, got {hex(self.px)}\"\n        assert 0 <= self.py < p, f\"py must be in range 0..p-1, got {hex(self.py)}\"\n\n    @classmethod\n    def sample(cls, curve_id: CurveID) -> \"ECDSASignature\":\n        \"\"\"\n        Generate a valid ECDSA signature for the given curve.\n\n        The algorithm:\n          1. Generate a private key d.\n          2. Compute the public key Q = d * G.\n          3. Generate a random message hash z (in practice, z = H(message)).\n          4. Choose a random nonce k and compute R = k * G.\n          5. Let r = R.x mod n (with r != 0).\n          6. Compute s = k^{-1} * (z + r * d) mod n (with s != 0).\n          7. Set the recovery parameter v = 0 if R.y is even, else 1.\n        \"\"\"\n        curve = CURVES[curve_id.value]\n        n = curve.n\n        p = curve.p\n        G = G1Point.get_nG(curve_id, 1)\n\n        # Generate the private key d and public key Q.\n        d = random.randint(1, n - 1)\n        Q = G.scalar_mul(d)\n\n        # Generate a random message hash (normally, this is H(message)).\n        z = random.randint(1, n - 1)\n\n        # Choose a nonce k until we get valid r and s.\n        while True:\n            k = random.randint(1, n - 1)\n            R = G.scalar_mul(k)\n            r = R.x % n  # r is computed from the x-coordinate of R.\n            if r == 0:\n                continue\n            try:\n                k_inv = pow(k, -1, n)\n            except ValueError:\n                continue\n            s = (k_inv * (z + r * d)) % n\n            if s == 0:\n                continue\n            v = 0 if R.y % 2 == 0 else 1\n            break\n\n        sig = cls(r=r, s=s, v=v, px=Q.x, py=Q.y, z=z, curve_id=curve_id)\n        assert (\n            sig.is_valid()\n        ), f\"generated ECDSA signature on curve {curve_id.name} is invalid\"\n        return sig\n\n    def is_valid(self) -> bool:\n        \"\"\"\n        Verify the ECDSA signature using the stored message hash and public key.\n\n        Standard verification:\n          1. Compute w = s^{-1} mod n.\n          2. Compute u1 = z * w mod n and u2 = r * w mod n.\n          3. Compute R' = u1 * G + u2 * Q.\n          4. The signature is valid if (R'.x mod n) equals r.\n        \"\"\"\n        curve = CURVES[self.curve_id.value]\n        n = curve.n\n        G = G1Point.get_nG(self.curve_id, 1)\n        Q = G1Point(self.px, self.py, self.curve_id)\n\n        try:\n            s_inv = pow(self.s, -1, n)\n        except ValueError:\n            return False\n\n        u1 = (self.z * s_inv) % n\n        u2 = (self.r * s_inv) % n\n\n        R_prime = G.scalar_mul(u1).add(Q.scalar_mul(u2))\n        return (R_prime.x % n) == self.r\n\n    def serialize(self, prepend_public_key: bool = True) -> list[int]:\n        cd = []\n        if prepend_public_key:\n            cd.extend(bigint_split(self.px, N_LIMBS, BASE))\n            cd.extend(bigint_split(self.py, N_LIMBS, BASE))\n        cd.extend(bigint_split(self.r, N_LIMBS, BASE))\n        cd.extend(split_128(self.s))\n        cd.append(self.v)\n        cd.extend(split_128(self.z))\n\n        return cd\n\n    def serialize_with_hints(\n        self, use_rust=False, as_str=False, prepend_public_key: bool = True\n    ) -> list[int] | str:\n        \"\"\"Serialize the signature with hints for verification\"\"\"\n        if use_rust:\n            cd = garaga_rs.ecdsa_calldata_builder(\n                self.r,\n                self.s,\n                self.v,\n                self.px,\n                self.py,\n                self.z,\n                prepend_public_key,\n                self.curve_id.value,\n            )\n            if as_str:\n                return \"[{}]\".format(\", \".join(map(hex, cd)))\n            return cd\n\n        cd = self.serialize(prepend_public_key)\n        n = CURVES[self.curve_id.value].n\n        s_inv = pow(self.s, -1, n)\n        u1 = (self.z * s_inv) % n\n        u2 = (self.r * s_inv) % n\n\n        msm_calldata = garaga_rs.msm_calldata_builder(\n            [\n                CURVES[self.curve_id.value].Gx,\n                CURVES[self.curve_id.value].Gy,\n                self.px,\n                self.py,\n            ],\n            [u1, u2],\n            self.curve_id.value,\n            False,  # include_points_and_scalars\n            True,  # serialize_as_pure_felt252_array\n        )\n        cd.extend(msm_calldata)\n        if as_str:\n            return \"[{}]\".format(\", \".join(map(hex, cd)))\n        return cd\n\n\n@dataclass(slots=True)\nclass RSA2048Signature:\n    \"\"\"RSA-2048 signature with reduction witnesses for on-chain verification.\"\"\"\n\n    modulus: RNSInteger\n    signature: RNSInteger\n    expected_message: RNSInteger\n    reductions: tuple[ReductionWitness, ...]\n\n    @classmethod\n    def from_bundle(cls, bundle: RSA2048ExponentiationWitness) -> \"RSA2048Signature\":\n        return cls(\n            modulus=bundle.modulus,\n            signature=bundle.signature,\n            expected_message=bundle.expected_message,\n            reductions=bundle.reductions,\n        )\n\n    @classmethod\n    def sample(cls, seed: int = 0) -> \"RSA2048Signature\":\n        return cls.from_bundle(generate_rsa2048_witness(seed=seed))\n\n    @classmethod\n    def tampered_residue_sample(cls, seed: int = 0) -> \"RSA2048Signature\":\n        sample = cls.sample(seed=seed)\n        first = sample.reductions[0]\n        bad_residues = list(first.remainder.residues)\n        bad_residues[0] = (bad_residues[0] + 1) % CHANNEL_MODULI[0]\n        tampered_remainder = RNSInteger(\n            value=first.remainder.value,\n            limbs=first.remainder.limbs,\n            residues=tuple(bad_residues),\n        )\n        return cls(\n            modulus=sample.modulus,\n            signature=sample.signature,\n            expected_message=sample.expected_message,\n            reductions=(\n                ReductionWitness(\n                    quotient=first.quotient,\n                    remainder=tampered_remainder,\n                ),\n                *sample.reductions[1:],\n            ),\n        )\n\n    @classmethod\n    def tampered_limb_sample(cls, seed: int = 0) -> \"RSA2048Signature\":\n        sample = cls.sample(seed=seed)\n        first = sample.reductions[0]\n        bad_limbs = list(first.quotient.limbs)\n        bad_limbs[1] ^= 1\n        tampered_quotient = RNSInteger(\n            value=first.quotient.value,\n            limbs=tuple(bad_limbs),\n            residues=first.quotient.residues,\n        )\n        return cls(\n            modulus=sample.modulus,\n            signature=sample.signature,\n            expected_message=sample.expected_message,\n            reductions=(\n                ReductionWitness(\n                    quotient=tampered_quotient,\n                    remainder=first.remainder,\n                ),\n                *sample.reductions[1:],\n            ),\n        )\n\n    @classmethod\n    def tampered_expected_message_sample(cls, seed: int = 0) -> \"RSA2048Signature\":\n        sample = cls.sample(seed=seed)\n        bad_limbs = list(sample.expected_message.limbs)\n        bad_limbs[0] ^= 1\n        tampered_expected_message = RNSInteger(\n            value=sample.expected_message.value,\n            limbs=tuple(bad_limbs),\n            residues=sample.expected_message.residues,\n        )\n        return cls(\n            modulus=sample.modulus,\n            signature=sample.signature,\n            expected_message=tampered_expected_message,\n            reductions=sample.reductions,\n        )\n\n    def _to_bundle(self) -> RSA2048ExponentiationWitness:\n        return RSA2048ExponentiationWitness(\n            modulus=self.modulus,\n            signature=self.signature,\n            expected_message=self.expected_message,\n            reductions=self.reductions,\n        )\n\n    def is_valid(self) -> bool:\n        return is_valid_rsa2048_witness(\n            self._to_bundle(), ctx=RNSContext(CHANNEL_MODULI)\n        )\n\n    def serialize_public_key(self) -> list[int]:\n        return self.modulus.serialize_to_calldata()\n\n    def serialize_signature_with_hints(self) -> list[int]:\n        return self._to_bundle().serialize_signature_with_hint()\n\n    def serialize(self, prepend_public_key: bool = True) -> list[int]:\n        return self._to_bundle().serialize(prepend_public_key=prepend_public_key)\n\n    def serialize_with_hints(\n        self,\n        use_rust: bool = False,\n        as_str: bool = False,\n        prepend_public_key: bool = True,\n    ) -> list[int] | str:\n        if use_rust:\n            cd = garaga_rs.rsa_2048_calldata_builder(\n                self.signature.value,\n                self.expected_message.value,\n                self.modulus.value,\n                prepend_public_key,\n            )\n            if as_str:\n                return \"[{}]\".format(\", \".join(map(hex, cd)))\n            return cd\n\n        calldata = self.serialize(prepend_public_key=prepend_public_key)\n        if as_str:\n            return \"[{}]\".format(\", \".join(map(hex, calldata)))\n        return calldata\n\n    @classmethod\n    def from_sha256_message(cls, message: bytes, seed: int = 0) -> \"RSA2048Signature\":\n        \"\"\"Create an RSA2048Signature from a raw message using SHA-256.\"\"\"\n        return cls.from_bundle(generate_rsa2048_sha256_witness(message, seed=seed))\n\n    def serialize_sha256_with_hints(\n        self,\n        message: bytes,\n        use_rust: bool = False,\n        as_str: bool = False,\n        prepend_public_key: bool = True,\n    ) -> list[int] | str:\n        \"\"\"Serialize the signature with hints for SHA-256 on-chain verification.\n\n        Appends the ByteArray-serialized message after the RSA calldata.\n        \"\"\"\n        if use_rust:\n            cd = garaga_rs.rsa_2048_sha256_calldata_builder(\n                self.signature.value,\n                message,\n                self.modulus.value,\n                prepend_public_key,\n            )\n            if as_str:\n                return \"[{}]\".format(\", \".join(map(hex, cd)))\n            return cd\n\n        # Python path: RSA calldata + ByteArray serialization\n        calldata = self.serialize(prepend_public_key=prepend_public_key)\n        calldata.extend(_serialize_byte_array(message))\n        if as_str:\n            return \"[{}]\".format(\", \".join(map(hex, calldata)))\n        return calldata\n\n\ndef _serialize_byte_array(data: bytes) -> list[int]:\n    \"\"\"Serialize bytes as a Cairo ByteArray in felt252 calldata format.\n\n    Layout: [num_full_words, word_0, ..., word_{n-1}, pending_word, pending_word_len]\n    Each full word is 31 bytes. The pending word is 0-30 bytes.\n    \"\"\"\n    full_word_count = len(data) // 31\n    pending_len = len(data) % 31\n\n    cd = [full_word_count]\n    for i in range(full_word_count):\n        start = i * 31\n        word = int.from_bytes(data[start : start + 31], byteorder=\"big\")\n        cd.append(word)\n\n    if pending_len > 0:\n        pending = int.from_bytes(data[full_word_count * 31 :], byteorder=\"big\")\n        cd.append(pending)\n    else:\n        cd.append(0)\n    cd.append(pending_len)\n\n    return cd\n\n\n@dataclass(slots=True)\nclass EdDSA25519Signature:\n    \"\"\"\n    An EdDSA25519 signature with associated public key and message.\n    \"\"\"\n\n    Ry_twisted: int\n    s: int\n    Py_twisted: int\n    msg: bytes\n\n    def __eq__(self, other) -> bool:\n        if not isinstance(other, EdDSA25519Signature):\n            return NotImplemented\n        return (\n            self.Ry_twisted == other.Ry_twisted\n            and self.s == other.s\n            and self.Py_twisted == other.Py_twisted\n            and self.msg == other.msg\n        )\n\n    def __hash__(self) -> int:\n        return hash((self.Ry_twisted, self.s, self.Py_twisted, self.msg))\n\n    def __post_init__(self):\n        assert 0 <= self.Ry_twisted < 2**256\n        assert 0 <= self.Py_twisted < 2**256\n        assert 0 <= self.s < 2**256\n\n    @property\n    def curve_id(self) -> CurveID:\n        return CurveID.ED25519\n\n    @property\n    def curve(self) -> TwistedEdwardsCurve:\n        return CURVES[CurveID.ED25519.value]\n\n    @classmethod\n    def from_json(cls, json):\n        public_key_bytes = bytes.fromhex(json[\"public_key\"])\n        message_bytes = bytes.fromhex(json[\"message\"])\n        signature_bytes = bytes.fromhex(json[\"signature\"])\n\n        assert len(public_key_bytes) == 32\n        assert len(signature_bytes) == 64\n\n        return cls(\n            Ry_twisted=int.from_bytes(signature_bytes[:32], \"little\"),\n            s=int.from_bytes(signature_bytes[32:64], \"little\"),\n            Py_twisted=int.from_bytes(public_key_bytes, \"little\"),\n            msg=message_bytes,\n        )\n\n    def serialize(self, prepend_public_key: bool = True) -> list[int]:\n        cd = []\n        if prepend_public_key:\n            cd.extend(split_128(self.Py_twisted))\n\n        cd.extend(split_128(self.Ry_twisted))\n        cd.extend(split_128(self.s))\n        cd.append(len(self.msg))\n        cd.extend(list(self.msg))\n\n        return cd\n\n    def xrecover(self, y: int) -> int:\n        p = self.curve.p\n        D = self.curve.d_twisted\n        I = pow(2, (p - 1) // 4, p)\n        xx = (y * y - 1) * pow(D * y * y + 1, -1, p)\n        x = pow(xx, (p + 3) // 8, p)\n        if (x * x - xx) % p != 0:\n            x = (x * I) % p\n            assert (x * x - xx) % p == 0\n        if x % 2 != 0:\n            x = p - x\n        return x\n\n    def decode_point(self, compressed_point_le: int) -> G1Point:\n        sign_bit, y_twisted = divmod(compressed_point_le, 2 ** (255))\n        x_twisted = self.xrecover(y_twisted)\n        if x_twisted % 2 != sign_bit:\n            x_twisted = self.curve.p - x_twisted\n        x_weierstrass, y_weierstrass = self.curve.to_weierstrass(x_twisted, y_twisted)\n        return G1Point(x_weierstrass, y_weierstrass, self.curve_id)\n\n    @lru_cache(maxsize=None)\n    def deserialize_R_A_h(self) -> tuple[G1Point, G1Point, int]:\n        R = self.decode_point(self.Ry_twisted)\n        A = self.decode_point(self.Py_twisted)\n\n        preimage = (\n            self.Ry_twisted.to_bytes(32, \"little\")\n            + self.Py_twisted.to_bytes(32, \"little\")\n            + self.msg\n        )\n        H_bytes = sha512(preimage).digest()\n        H = int.from_bytes(H_bytes, \"little\")\n        h = H % self.curve.n\n        return R, A, h\n\n    def is_valid(self) -> bool:\n        s = self.s\n\n        R, A, h = self.deserialize_R_A_h()\n        G_neg = G1Point.get_nG(self.curve_id, -1)\n\n        msm_result = G1Point.msm(points=[G_neg, A], scalars=[s, h])\n\n        should_be_inf = msm_result.add(R)\n\n        if R.is_infinity() or A.is_infinity():\n            return False\n\n        return should_be_inf.is_infinity()\n\n    def serialize_with_hints(\n        self, use_rust=False, as_str=False, prepend_public_key: bool = True\n    ) -> list[int] | str:\n        \"\"\"Serialize the signature with hints for verification\"\"\"\n        if use_rust:\n            return garaga_rs.eddsa_calldata_builder(\n                self.Ry_twisted,\n                self.s,\n                self.Py_twisted,\n                self.msg,\n                prepend_public_key,\n            )\n\n        cd = self.serialize(prepend_public_key)\n        R, A, h = self.deserialize_R_A_h()\n        msm_calldata = garaga_rs.msm_calldata_builder(\n            [\n                CURVES[self.curve_id.value].Gx,\n                -CURVES[self.curve_id.value].Gy % self.curve.p,\n                A.x,\n                A.y,\n            ],\n            [self.s, h],\n            self.curve_id.value,\n            False,  # include_points_and_scalars\n            True,  # serialize_as_pure_felt252_array\n        )\n\n        cd.extend(msm_calldata)\n        Rx_twisted, _ = self.curve.to_twistededwards(R.x, R.y)\n        cd.extend(split_128(Rx_twisted))  # sqrt_Rx_hint\n        Px_twisted, _ = self.curve.to_twistededwards(A.x, A.y)\n        cd.extend(split_128(Px_twisted))  # sqrt_Px_hint\n\n        if as_str:\n            return \"[{}]\".format(\", \".join(map(hex, cd)))\n        return cd\n\n    def __eq__(self, other) -> bool:\n        if not isinstance(other, EdDSA25519Signature):\n            return NotImplemented\n        return (\n            self.Ry_twisted == other.Ry_twisted\n            and self.s == other.s\n            and self.Py_twisted == other.Py_twisted\n            and self.msg == other.msg\n        )\n\n    def __hash__(self) -> int:\n        return hash((self.Ry_twisted, self.s, self.Py_twisted, self.msg))\n\n\nif __name__ == \"__main__\":\n    import json\n\n    with open(\"tests/ed25519_test_vectors.json\", \"r\") as f:\n        test_vectors = json.load(f)\n\n    for i, test_vector in enumerate(test_vectors):\n        signature = EdDSA25519Signature.from_json(test_vector)\n        assert signature.is_valid(), f\"Signature {i} is invalid\"\n"
  },
  {
    "path": "hydra/garaga/starknet/tests_and_calldata_generators/test_writer.py",
    "content": "import concurrent.futures\nimport json\nimport random\nimport subprocess\nimport time\n\nimport garaga.modulo_circuit_structs as structs\nfrom garaga.curves import CURVES, CurveID, get_base_field\nfrom garaga.points import G1G2Pair, G1Point, G2Point\nfrom garaga.precompiled_circuits.multi_pairing_check import get_pairing_check_input\nfrom garaga.starknet.cli.utils import create_directory\nfrom garaga.starknet.tests_and_calldata_generators.mpcheck import MPCheckCalldataBuilder\nfrom garaga.starknet.tests_and_calldata_generators.msm import MSMCalldataBuilder\nfrom garaga.starknet.tests_and_calldata_generators.signatures import (\n    ECDSASignature,\n    EdDSA25519Signature,\n    RSA2048Signature,\n    SchnorrSignature,\n)\n\nTESTS_DIR = \"src/src/tests/autogenerated\"\n\nIGNORE_STR = \"\\n#[ignore] // Ignored for auto-benchmarks\"\n\n\ndef generate_pairing_test(curve_id, n_pairs, n_fixed_g2, include_m, seed):\n    random.seed(seed)\n    pairs, public_pair = get_pairing_check_input(\n        curve_id=curve_id,\n        n_pairs=n_pairs,\n        include_m=include_m,\n        return_pairs=True,\n    )\n    builder = MPCheckCalldataBuilder(\n        curve_id=curve_id,\n        pairs=pairs,\n        n_fixed_g2=n_fixed_g2,\n        public_pair=public_pair,\n    )\n    return builder.to_cairo_1_test()\n\n\ndef generate_msm_test(curve_id, n_points, seed):\n    random.seed(seed)\n    builder = MSMCalldataBuilder(\n        curve_id=curve_id,\n        points=[G1Point.gen_random_point(curve_id) for _ in range(n_points)],\n        scalars=[random.randint(0, CURVES[curve_id.value].n) for _ in range(n_points)],\n    )\n    ignored = False if curve_id in [CurveID.SECP256K1, CurveID.SECP256R1] else True\n    ignored = ignored or (False if n_points in [1, 2, 3] else True)\n    return builder.to_cairo_1_test(ignored=ignored)\n\n\ndef generate_msm_test_edge_cases(curve_id, n_points, seed):\n    random.seed(seed)\n    points = (\n        [G1Point.gen_random_point(curve_id) for _ in range(n_points - 1)]\n        + [G1Point.infinity(curve_id)]\n        + [G1Point.get_nG(curve_id, 1)]\n    )\n    scalars = (\n        [0]\n        + [random.randint(0, CURVES[curve_id.value].n) for _ in range(n_points - 1)]\n        + [CURVES[curve_id.value].n - 1]\n    )\n\n    builder = MSMCalldataBuilder(curve_id=curve_id, points=points, scalars=scalars)\n\n    return builder.to_cairo_1_test(\n        test_name=f\"test_msm_{curve_id.name}_{n_points}P_edge_case\", ignored=True\n    )\n\n\ndef generate_tower_pairing_test(curve_id, n_pairs, seed):\n    random.seed(seed)\n    pairs: list[G1G2Pair]\n    if n_pairs == 1:\n        pairs = [\n            G1G2Pair(\n                p=G1Point.get_nG(curve_id, 1),\n                q=G2Point.get_nG(curve_id, 1),\n            )\n        ]\n    else:\n        pairs, _ = get_pairing_check_input(\n            curve_id=curve_id, n_pairs=n_pairs, return_pairs=True\n        )\n\n    res = G1G2Pair.pair(pairs, curve_id)\n    res = res.felt_coeffs\n    e12t = structs.E12T(name=\"expected_result\", elmts=res)\n    i_s = list(range(n_pairs))\n    code = f\"\"\"\n#[test]\nfn test_tower_pairing_{curve_id.name}_{n_pairs}P() {{\n    let mut res:E12T = One::one();\n\"\"\"\n    for i, pair in enumerate(pairs):\n        code += f\"\"\"\n    {structs.G1PointCircuit.from_G1Point(f\"p{i}\", pair.p).serialize()}\n    p{i}.assert_on_curve_excluding_infinity({curve_id.value});\n    {structs.G2PointCircuit.from_G2Point(f\"q{i}\", pair.q).serialize()}\n    q{i}.assert_on_curve_excluding_infinity({curve_id.value});\n    let (tmp{i}) = miller_loop_{pair.p.curve_id.name.lower()}_tower(p{i}, q{i});\n    let (res) = run_{pair.p.curve_id.name.upper()}_E12T_MUL_circuit(tmp{i}, res);\"\"\"\n    code += f\"\"\"\n    let final = final_exp_{curve_id.name.lower()}_tower(res);\n    assert_eq!(final, {e12t.serialize(raw=True)});\n}}\n\"\"\"\n    return code\n\n\ndef generate_tower_final_exp_test(curve_id, seed):\n    from garaga.hints.tower_backup import E12\n\n    random.seed(seed)\n    field = get_base_field(curve_id)\n    elmts = [field.random() for _ in range(12)]\n    e12 = E12(elmts, curve_id.value)\n    e12t = structs.E12T(name=\"input\", elmts=elmts)\n    expected = structs.E12T(name=\"expected\", elmts=(e12.final_exp()).felt_coeffs)\n    code = f\"\"\"\n#[test]\nfn test_tower_final_exp_{curve_id.name}() {{\n    {e12t.serialize()}\n    let res = final_exp_{curve_id.name.lower()}_tower(input);\n    assert_eq!(res, {expected.serialize(raw=True)});\n}}\n\"\"\"\n    return code\n\n\ndef generate_schnorr_test(curve_id, seed):\n    random.seed(seed)\n    schnorr_sig: SchnorrSignature = SchnorrSignature.sample(curve_id)\n    ignored = False if curve_id in [CurveID.SECP256K1] else True\n    ignored_str = IGNORE_STR if ignored else \"\"\n    code = f\"\"\"\n#[test]{ignored_str}\nfn test_schnorr_{curve_id.name}() {{\n    let mut sch_sig_with_hints_serialized = array!{schnorr_sig.serialize_with_hints(as_str=True)}.span();\n    let public_key = Serde::<G1Point>::deserialize(ref sch_sig_with_hints_serialized).expect('FailToDeserializePk');\n    let sch_with_hints = Serde::<SchnorrSignatureWithHint>::deserialize(ref sch_sig_with_hints_serialized).expect('FailToDeserializeSig');\n    let is_valid = is_valid_schnorr_signature_assuming_hash(sch_with_hints, public_key, {curve_id.value});\n    assert!(is_valid);\n}}\n\"\"\"\n    return code\n\n\ndef generate_ecdsa_test(curve_id, seed):\n    random.seed(seed)\n    ecdsa_sig: ECDSASignature = ECDSASignature.sample(curve_id)\n    ignored = False if curve_id in [CurveID.SECP256K1, CurveID.SECP256R1] else True\n    ignored_str = IGNORE_STR if ignored else \"\"\n    code = f\"\"\"\n#[test]{ignored_str}\nfn test_ecdsa_{curve_id.name}() {{\n    let mut ecdsa_sig_with_hints_serialized = array!{ecdsa_sig.serialize_with_hints(as_str=True)}.span();\n    let public_key = Serde::<G1Point>::deserialize(ref ecdsa_sig_with_hints_serialized).expect('FailToDeserializePk');\n    let ecdsa_with_hints = Serde::<ECDSASignatureWithHint>::deserialize(ref ecdsa_sig_with_hints_serialized).expect('FailToDeserializeSig');\n    let is_valid = is_valid_ecdsa_signature_assuming_hash(ecdsa_with_hints, public_key, {curve_id.value});\n    assert!(is_valid);\n}}\n\"\"\"\n    return code\n\n\ndef write_test_file(\n    file_path: str, header: str, test_generators: list, curve_ids: list, **kwargs\n):\n    \"\"\"Write a test file with the given header and test generators.\n\n    Args:\n        file_path: Path to write the test file\n        header: Module header with imports\n        test_generators: List of (generator_fn, params) tuples\n        curve_ids: List of curve IDs to generate tests for\n        **kwargs: Additional arguments passed to generators\n    \"\"\"\n    create_directory(TESTS_DIR)\n    with open(f\"{TESTS_DIR}/{file_path}\", \"w\") as f:\n        f.write(header)\n        with concurrent.futures.ProcessPoolExecutor() as executor:\n            futures = []\n            for gen_fn, params in test_generators:\n                for curve_id in curve_ids:\n                    for param in params:\n                        futures.append(\n                            executor.submit(\n                                gen_fn, curve_id, *param, kwargs.get(\"seed\", 0)\n                            )\n                        )\n\n            results = [future.result() for future in futures]\n            for result in results:\n                f.write(result)\n                f.write(\"\\n\")\n\n\ndef get_tower_pairing_config():\n    \"\"\"Configuration for tower pairing tests\"\"\"\n    header = \"\"\"\n    use garaga::single_pairing_tower::{\n        miller_loop_bls12_381_tower,\n        miller_loop_bn254_tower, final_exp_bls12_381_tower, final_exp_bn254_tower,\n    };\n    use core::num::traits::One;\n    use garaga::definitions::{u384, G1Point, G2Point, E12T};\n    use garaga::ec_ops::{G1PointImpl};\n    use garaga::ec_ops_g2::{G2PointImpl};\n    use garaga::circuits::tower_circuits::{\n        run_BN254_E12T_MUL_circuit, run_BLS12_381_E12T_MUL_circuit\n    };\n    \"\"\"\n\n    test_generators = [\n        (generate_tower_pairing_test, [(n,) for n in [1, 2, 3]]),\n        (generate_tower_final_exp_test, [()]),\n    ]\n\n    curve_ids = [CurveID.BN254, CurveID.BLS12_381]\n    return \"tower_pairing_tests.cairo\", header, test_generators, curve_ids\n\n\ndef get_pairing_config():\n    \"\"\"Configuration for pairing tests\"\"\"\n    header = \"\"\"\n        use garaga::pairing_check::{\n            multi_pairing_check_bn254_2P_2F,\n            multi_pairing_check_bls12_381_2P_2F,\n            MPCheckHintBN254,\n            MPCheckHintBLS12_381,\n        };\n        use garaga::definitions::{u288, u384, G1Point, G2Point, G2Line, E12D,G1G2Pair, MillerLoopResultScalingFactor};\n        use garaga::groth16::{\n            multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result,\n            multi_pairing_check_bls12_381_3P_2F_with_extra_miller_loop_result,\n        };\n    \"\"\"\n\n    params = [(2, 2, False), (3, 2, True)]\n    test_generators = [(generate_pairing_test, params)]\n    curve_ids = [CurveID.BN254, CurveID.BLS12_381]\n    return \"pairing_tests.cairo\", header, test_generators, curve_ids\n\n\ndef get_msm_config():\n    \"\"\"Configuration for MSM tests\"\"\"\n    header = \"\"\"\n        use garaga::ec_ops::msm_g1;\n        use garaga::definitions::{G1Point, u384};\n        use garaga::core::circuit::u288IntoCircuitInputValue;\n    \"\"\"\n\n    msm_sizes = [1, 2, 3, 4, 10, 11, 12]\n    edge_cases = [1, 2, 3]\n\n    test_generators = [\n        (generate_msm_test, [(n,) for n in msm_sizes]),\n        (generate_msm_test_edge_cases, [(n,) for n in edge_cases]),\n    ]\n\n    curve_ids = [\n        CurveID.BN254,\n        CurveID.BLS12_381,\n        CurveID.SECP256R1,\n        CurveID.SECP256K1,\n        CurveID.ED25519,\n        CurveID.GRUMPKIN,\n    ]\n    return \"msm_tests.cairo\", header, test_generators, curve_ids\n\n\ndef get_schnorr_config():\n    \"\"\"Configuration for Schnorr signature tests\"\"\"\n    header = \"\"\"\n        use garaga::definitions::G1Point;\n        use garaga::signatures::schnorr::{\n            SchnorrSignatureWithHint, is_valid_schnorr_signature_assuming_hash,\n        };\n        use garaga::core::circuit::u288IntoCircuitInputValue;\n    \"\"\"\n\n    test_generators = [(generate_schnorr_test, [()])]\n    curve_ids = [\n        CurveID.BN254,\n        CurveID.BLS12_381,\n        CurveID.SECP256R1,\n        CurveID.SECP256K1,\n        CurveID.ED25519,\n        CurveID.GRUMPKIN,\n    ]\n    return \"schnorr_tests.cairo\", header, test_generators, curve_ids\n\n\ndef get_ecdsa_config():\n    \"\"\"Configuration for ECDSA signature tests\"\"\"\n    header = \"\"\"\n        use garaga::definitions::G1Point;\n        use garaga::signatures::ecdsa::{\n            ECDSASignatureWithHint, is_valid_ecdsa_signature_assuming_hash,\n        };\n        use garaga::core::circuit::u288IntoCircuitInputValue;\n    \"\"\"\n\n    test_generators = [(generate_ecdsa_test, [()])]\n    curve_ids = [\n        CurveID.BN254,\n        CurveID.BLS12_381,\n        CurveID.SECP256R1,\n        CurveID.SECP256K1,\n        CurveID.ED25519,\n        CurveID.GRUMPKIN,\n    ]\n    return \"ecdsa_tests.cairo\", header, test_generators, curve_ids\n\n\ndef generate_eddsa_test(sig: EdDSA25519Signature, test_index: int) -> str:\n    assert sig.is_valid()\n    msg_bytes_len = len(sig.msg)\n    ignored = False if msg_bytes_len in [0, 32, 64] else True\n    ignored_str = IGNORE_STR if ignored else \"\"\n    code = f\"\"\"\n#[test]{ignored_str}\nfn test_eddsa_{test_index}_{msg_bytes_len}B() {{\n    let mut eddsa_sig_with_hints_serialized = array!{sig.serialize_with_hints(as_str=True)}.span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized).expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<EdDSASignatureWithHint>::deserialize(ref eddsa_sig_with_hints_serialized).expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}}\n\"\"\"\n    return code\n\n\ndef generate_test(index, vector):\n    signature = EdDSA25519Signature.from_json(vector)\n    return generate_eddsa_test(signature, index)\n\n\ndef generate_eddsa_test_file() -> str:\n    \"\"\"Configuration for EDDSA signature tests\"\"\"\n    code = \"\"\"\n    use garaga::signatures::eddsa_25519::{\n        EdDSASignatureWithHint, is_valid_eddsa_signature,\n    };\n    \"\"\"\n\n    with open(\"tests/ed25519_test_vectors.json\", \"r\") as f:\n        test_vectors = json.load(f)\n\n    test_vectors = test_vectors[0:66:2]\n\n    with concurrent.futures.ProcessPoolExecutor() as executor:\n        futures = {\n            executor.submit(generate_test, i, vec): i\n            for i, vec in enumerate(test_vectors)\n        }\n        results = [None] * len(test_vectors)\n        for future in concurrent.futures.as_completed(futures):\n            index = futures[future]\n            results[index] = future.result()\n\n    for result in results:\n        code += result\n    return code\n\n\ndef generate_rsa_test(\n    signature: RSA2048Signature, seed: int, suffix: str, should_be_valid: bool\n) -> str:\n    assertion = \"assert!(is_valid);\" if should_be_valid else \"assert!(!is_valid);\"\n    return f\"\"\"\n#[test]\nfn test_rsa2048_{suffix}_seed_{seed}() {{\n    let mut rsa_sig_with_hints_serialized = array!{signature.serialize_with_hints(as_str=True)}.span();\n    let public_key = Serde::<RSA2048PublicKey>::deserialize(ref rsa_sig_with_hints_serialized).expect('FailToDeserializePk');\n    let rsa_with_hints = Serde::<RSA2048SignatureWithHint>::deserialize(ref rsa_sig_with_hints_serialized).expect('FailToDeserializeSig');\n    let is_valid = is_valid_rsa2048_signature_assuming_encoded_message(@rsa_with_hints, @public_key);\n    {assertion}\n}}\n\"\"\"\n\n\ndef generate_rsa_tests(seed: int) -> str:\n    fixtures = [\n        (RSA2048Signature.sample(seed=seed), \"positive\", True),\n        (\n            RSA2048Signature.tampered_expected_message_sample(seed=seed),\n            \"tampered_message\",\n            False,\n        ),\n        (\n            RSA2048Signature.tampered_limb_sample(seed=seed),\n            \"tampered_limb\",\n            False,\n        ),\n    ]\n    code = \"\"\n    for signature, suffix, should_be_valid in fixtures:\n        code += generate_rsa_test(\n            signature=signature,\n            seed=seed,\n            suffix=suffix,\n            should_be_valid=should_be_valid,\n        )\n    return code\n\n\ndef generate_rsa_sha256_test(\n    signature: \"RSA2048Signature\",\n    message: bytes,\n    seed: int,\n    suffix: str,\n) -> str:\n    calldata_str = signature.serialize_sha256_with_hints(\n        message=message, as_str=True, prepend_public_key=True\n    )\n    return f\"\"\"\n#[test]\nfn test_rsa2048_sha256_{suffix}_seed_{seed}() {{\n    let mut rsa_sha256_serialized = array!{calldata_str}.span();\n    let public_key = Serde::<RSA2048PublicKey>::deserialize(ref rsa_sha256_serialized).expect('FailToDeserializePk');\n    let rsa_with_hints = Serde::<RSA2048SignatureWithHint>::deserialize(ref rsa_sha256_serialized).expect('FailToDeserializeSig');\n    let message = Serde::<ByteArray>::deserialize(ref rsa_sha256_serialized).expect('FailToDeserializeMsg');\n    let is_valid = is_valid_rsa2048_sha256_signature(@rsa_with_hints, @public_key, @message);\n    assert!(is_valid);\n}}\n\"\"\"\n\n\ndef generate_rsa_sha256_tests(seed: int) -> str:\n    message = b\"hello garaga\"\n    sig = RSA2048Signature.from_sha256_message(message, seed=seed)\n    return generate_rsa_sha256_test(sig, message, seed, \"positive\")\n\n\ndef generate_rsa_test_file() -> str:\n    code = \"\"\"\n    use core::serde::Serde;\n    use garaga::signatures::rsa::{\n        RSA2048PublicKey, RSA2048SignatureWithHint,\n        is_valid_rsa2048_signature_assuming_encoded_message,\n        is_valid_rsa2048_sha256_signature,\n    };\n    \"\"\"\n\n    code += generate_rsa_tests(seed=0)\n    code += generate_rsa_sha256_tests(seed=0)\n    return code\n\n\ndef write_all_tests():\n    \"\"\"Generate all test files\"\"\"\n    random.seed(0)\n\n    # Generate each test file\n    for config_fn in [\n        get_tower_pairing_config,\n        get_pairing_config,\n        get_msm_config,\n        get_schnorr_config,\n        get_ecdsa_config,\n    ]:\n        file_path, header, test_generators, curve_ids = config_fn()\n        write_test_file(file_path, header, test_generators, curve_ids, seed=0)\n\n    with open(\"src/src/tests/autogenerated/eddsa_tests.cairo\", \"w\") as f:\n        f.write(generate_eddsa_test_file())\n    with open(\"src/src/tests/autogenerated/rsa_tests.cairo\", \"w\") as f:\n        f.write(generate_rsa_test_file())\n    subprocess.run([\"scarb\", \"fmt\", f\"{TESTS_DIR}\"], check=True)\n\n\nif __name__ == \"__main__\":\n    import time\n\n    start = time.time()\n    write_all_tests()\n    end = time.time()\n    print(f\"Time taken to write all tests: {end - start} seconds\")\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[build-system]\nrequires = [\"maturin>=1.7,<2.0\"]\nbuild-backend = \"maturin\"\n\n[project]\nname = \"garaga\"\nversion = \"1.1.0\"\nrequires-python = \">=3.10,<3.15\"\ndependencies = [\n  \"fastecdsa>=3.0.0\",\n  \"sympy\",\n  \"typer\",\n  \"python-dotenv\",\n  \"starknet-py-unbroken==0.29.0rc3\",\n  \"requests\",\n  \"filelock\",\n]\ndescription = \"State-of-the-art Elliptic Curve operations and SNARKS verification for Cairo & Starknet 🐺.\"\nreadme = \"docs/PYPI_README.md\"\nlicense = { text = \"MIT\" }\nauthors = [\n  { name = \"feltroidprime\" },\n  { name = \"Keep Starknet Strange Contributors\" },\n]\nkeywords = [\n  \"elliptic-curves\",\n  \"pairing\",\n  \"zero-knowledge\",\n  \"zk-snarks\",\n  \"zero-knowledge-proofs\",\n  \"zkp\",\n  \"elliptic-curve-cryptography\",\n  \"starks\",\n  \"snarks\",\n  \"cairo-lang\",\n  \"starknet\",\n  \"cryptography\",\n  \"blockchain\",\n]\nclassifiers = [\n  \"Development Status :: 4 - Beta\",\n  \"Intended Audience :: Developers\",\n  \"Intended Audience :: Science/Research\",\n  \"License :: OSI Approved :: MIT License\",\n  \"Programming Language :: Python :: 3\",\n  \"Programming Language :: Python :: 3.10\",\n  \"Programming Language :: Python :: 3.11\",\n  \"Programming Language :: Python :: 3.12\",\n  \"Programming Language :: Python :: 3.13\",\n  \"Programming Language :: Python :: 3.14\",\n  \"Topic :: Security :: Cryptography\",\n  \"Topic :: Scientific/Engineering :: Mathematics\",\n  \"Topic :: Software Development :: Libraries :: Python Modules\",\n  \"Operating System :: OS Independent\",\n]\n\n[project.urls]\nHomepage = \"https://github.com/keep-starknet-strange/garaga\"\nRepository = \"https://github.com/keep-starknet-strange/garaga\"\nDocumentation = \"https://garaga.gitbook.io/\"\n\"Bug Reports\" = \"https://github.com/keep-starknet-strange/garaga/issues\"\n\"Source Code\" = \"https://github.com/keep-starknet-strange/garaga\"\n\n[project.optional-dependencies]\ndev = [\n  \"maturin\",\n  \"pytest\",\n  \"pytest-asyncio\",\n  \"pytest-xdist\",\n  \"black>=26.3.1\",\n  \"pre-commit\",\n  \"inquirer\",\n  \"pandas\",\n  \"tabulate\",\n  \"hypothesis\",\n  \"rich\",\n]\n\n[project.scripts]\ngaraga = \"garaga.starknet.cli.starknet_cli:app\"\n\n[tool.maturin]\nfeatures = [\"pyo3/extension-module\"]\nmanifest-path = \"tools/garaga_rs/Cargo.toml\"\n# configures rust package as a module under garaga\nmodule-name = \"garaga.garaga_rs\"\n# python source root must be under <tool.maturin.python-source>/<project.name>\npython-source = \"hydra\"\n\n[tool.uv]\n# Override ecdsa pinned by crypto-cpp-py to fix high-severity security vulnerability\noverride-dependencies = [\"ecdsa>=0.19.0\"]\n\n[tool.isort]\nprofile = \"black\"\n\n[tool.pytest.ini_options]\ncache_dir = \".cargo/.pytest_cache\"\ntestpaths = [\"tests/hydra\"]\n# addopts = \"--tb=short --showlocals\"\nasyncio_default_fixture_loop_scope = \"function\" # Explicitly set the loop scope\n\n[tool.black]\nline-length = 88\ntarget-version = ['py310', 'py311', 'py312', 'py313']\ninclude = '\\.pyi?$'\nextend-exclude = '''\n/(\n  # directories\n  \\.eggs\n  | \\.git\n  | \\.hg\n  | \\.mypy_cache\n  | \\.tox\n  | \\.venv\n  | \\venv\n  | build\n  | dist\n)/\n'''\n"
  },
  {
    "path": "src/.tool-versions",
    "content": "scarb 2.16.1\nstarknet-foundry 0.57.0\n"
  },
  {
    "path": "src/Scarb.toml",
    "content": "[package]\nname = \"garaga\"\nversion = \"1.1.0\"\nedition = \"2024_07\"\nlicence = \"MIT\"\nkeywords = [\n    \"zk\",\n    \"snarks\",\n    \"curve\",\n    \"pairing\",\n    \"groth16\",\n    \"plonk\",\n    \"bls\",\n    \"elliptic\",\n    \"signature\",\n]\ndescription = \"State-of-the-art Elliptic Curve operations and SNARKS verification for Cairo & Starknet\"\nreadme = \"../README.md\"\nrepository = \"https://github.com/keep-starknet-strange/garaga\"\nauthors = [\"feltroidprime\", \"Keep Starknet Strange Contributors\"]\ndocumentation = \"https://garaga.gitbook.io/garaga/\"\n# See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html\n\n[features]\nfull = []\n\n[dependencies]\ncorelib_imports = { path = \"corelib_imports\", version = \"0.1.3\" }\nstarknet = \"2.16.1\"\n\n[dev-dependencies]\nsnforge_std = \"0.57.0\"\nassert_macros = \"2.16.1\"\n#cairo_test = \"2.16.1\"\ncairo_execute = \"2.16.1\"\n\n[scripts]\ntest = \"snforge test -p garaga --include-ignored\"\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bls12_381/.tool-versions",
    "content": "scarb 2.16.1\nstarknet-foundry 0.57.0\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bls12_381/Scarb.toml",
    "content": "# Generated by Garaga version 1.1.0\n[package]\nname = \"groth16_example_bls12_381\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n[dependencies]\ngaraga = { path = \"../../../\" }\nstarknet = \"2.16.1\"\n\n[cairo]\nsierra-replace-ids = false\ninlining-strategy = 2\n\n[dev-dependencies]\nsnforge_std = \"0.57.0\"\nassert_macros = \"2.16.1\"\n\n[[target.starknet-contract]]\ncasm = true\ncasm-add-pythonic-hints = true\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bls12_381/src/groth16_verifier.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\nuse super::groth16_verifier_constants::{N_PUBLIC_INPUTS, ic, precomputed_lines, vk};\n\n#[starknet::interface]\npub trait IGroth16VerifierBLS12_381<TContractState> {\n    fn verify_groth16_proof_bls12_381(\n        self: @TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u256>, felt252>;\n}\n\n#[starknet::contract]\nmod Groth16VerifierBLS12_381 {\n    use garaga::definitions::{G1G2Pair, G1Point};\n    use garaga::ec_ops::{G1PointTrait, ec_safe_add};\n    use garaga::groth16::{\n        Groth16ProofRawTrait, multi_pairing_check_bls12_381_3P_2F_with_extra_miller_loop_result,\n    };\n    use garaga::utils::calldata::deserialize_full_proof_with_hints_bls12_381;\n    use starknet::SyscallResultTrait;\n    use super::{N_PUBLIC_INPUTS, ic, precomputed_lines, vk};\n\n    const ECIP_OPS_CLASS_HASH: felt252 =\n        0x396d5915ecf475aab117bb25a0272b261e9e25ffe1c0ce05a51a3f77489c89e;\n\n    #[storage]\n    struct Storage {}\n\n    #[abi(embed_v0)]\n    impl IGroth16VerifierBLS12_381 of super::IGroth16VerifierBLS12_381<ContractState> {\n        fn verify_groth16_proof_bls12_381(\n            self: @ContractState, full_proof_with_hints: Span<felt252>,\n        ) -> Result<Span<u256>, felt252> {\n            // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n            // This function returns Result::Ok(public_inputs) if the proof is valid.\n            // If the proof is invalid, it returns Result::Err(error).\n            // Read the documentation to learn how to generate the full_proof_with_hints array given\n            // a proof and a verifying key.\n            let fph = deserialize_full_proof_with_hints_bls12_381(full_proof_with_hints);\n            let groth16_proof = fph.groth16_proof;\n            let mpcheck_hint = fph.mpcheck_hint;\n            let msm_hint = fph.msm_hint;\n\n            groth16_proof.raw.check_proof_points(1);\n\n            let ic = ic.span();\n\n            let vk_x: G1Point = match ic.len() {\n                0 => panic!(\"Malformed VK\"),\n                1 => *ic.at(0),\n                _ => {\n                    // Start serialization with the hint array directly to avoid copying it.\n                    let mut msm_calldata: Array<felt252> = array![];\n                    // Add the points from VK and public inputs to the proof.\n                    Serde::serialize(@ic.slice(1, N_PUBLIC_INPUTS), ref msm_calldata);\n                    Serde::serialize(@groth16_proof.public_inputs, ref msm_calldata);\n                    // Complete with the curve indentifier (1 for BLS12_381):\n                    msm_calldata.append(1);\n                    // Add the hint array.\n                    for x in msm_hint {\n                        msm_calldata.append(*x);\n                    }\n\n                    // Call the multi scalar multiplication endpoint on the Garaga ECIP ops contract\n                    // to obtain vk_x.\n                    let mut _vx_x_serialized = starknet::syscalls::library_call_syscall(\n                        ECIP_OPS_CLASS_HASH.try_into().unwrap(),\n                        selector!(\"msm_g1\"),\n                        msm_calldata.span(),\n                    )\n                        .unwrap_syscall();\n\n                    ec_safe_add(\n                        Serde::<G1Point>::deserialize(ref _vx_x_serialized).unwrap(), *ic.at(0), 1,\n                    )\n                },\n            };\n            // Perform the pairing check.\n            let check = multi_pairing_check_bls12_381_3P_2F_with_extra_miller_loop_result(\n                G1G2Pair { p: vk_x, q: vk.gamma_g2 },\n                G1G2Pair { p: groth16_proof.raw.c, q: vk.delta_g2 },\n                G1G2Pair { p: groth16_proof.raw.a.negate(1), q: groth16_proof.raw.b },\n                vk.alpha_beta_miller_loop_result,\n                precomputed_lines.span(),\n                mpcheck_hint,\n            );\n            match check {\n                Result::Ok(_) => Result::Ok(groth16_proof.public_inputs),\n                Result::Err(error) => Result::Err(error),\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bls12_381/src/groth16_verifier_constants.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\nuse garaga::definitions::{E12D, G1Point, G2Line, G2Point, u384};\nuse garaga::groth16::Groth16VerifyingKey;\n\npub const N_PUBLIC_INPUTS: usize = 1;\n\npub const vk: Groth16VerifyingKey<u384> = Groth16VerifyingKey {\n    alpha_beta_miller_loop_result: E12D {\n        w0: u384 {\n            limb0: 0x90d1a47263d9c179e9d6bab3,\n            limb1: 0xc8f52b7ac4908e42515e61a6,\n            limb2: 0x85c60896512fc21fc50ce238,\n            limb3: 0x15bb2157a1b9aab29d66c644,\n        },\n        w1: u384 {\n            limb0: 0xb3e77acb0d776ee38973b578,\n            limb1: 0x7290c49d0303a7a719325387,\n            limb2: 0x3104f09f1439bbd9b6e47310,\n            limb3: 0x1794c7df23dbcfd21f7c96f5,\n        },\n        w2: u384 {\n            limb0: 0xd0ccdf6e1de037c5f25dbd53,\n            limb1: 0x254a0c8d3849192e33a21665,\n            limb2: 0xcc0375e474dc85925319c5ad,\n            limb3: 0x59163bc09c3bb5cd5864b34,\n        },\n        w3: u384 {\n            limb0: 0x42951c5be1c30dd1f90a8da3,\n            limb1: 0xffa3bb5d4cc66b3c5c927fe8,\n            limb2: 0xb2bef79be9fc2df478672961,\n            limb3: 0x13b08e1d6ece19818bc96ea9,\n        },\n        w4: u384 {\n            limb0: 0x93fd3339f961a2b9c29235bc,\n            limb1: 0xf9bbad7b2c116dfe3ed68c7a,\n            limb2: 0xbd2f1d7614ffe6107af3312d,\n            limb3: 0x565882562afe825ad18d630,\n        },\n        w5: u384 {\n            limb0: 0xf8e9d91fd573068e500fe8cb,\n            limb1: 0xc02aff1aead5aafc095b5d00,\n            limb2: 0xd46507dd50d8e1e3519eab6d,\n            limb3: 0x13644a50e3d92f7cb2062999,\n        },\n        w6: u384 {\n            limb0: 0x79f2b3fe166cf2dd0d2edd42,\n            limb1: 0xee1d6de706ac7841d7ad70d1,\n            limb2: 0x8eab5234da247c344e074188,\n            limb3: 0x11a6213d5e5c30e24cbf89bc,\n        },\n        w7: u384 {\n            limb0: 0x2ce3e653f58dd851f1b19549,\n            limb1: 0x4718d317cb6aa672d98ec0d0,\n            limb2: 0x9ba7f0c53686e01b4ad95d5,\n            limb3: 0x675ea9600256572394eb514,\n        },\n        w8: u384 {\n            limb0: 0x23db0a4c6695a271a863a4d0,\n            limb1: 0xd6db4129528086db9190b64e,\n            limb2: 0xd130bf6380241b158fecfd71,\n            limb3: 0xa849cb6abd26359866b2ec8,\n        },\n        w9: u384 {\n            limb0: 0x60b534cf939afce26ebdf812,\n            limb1: 0x8c24d81eb0180ec2a6cf0f34,\n            limb2: 0x82a57803b293e76911f92c72,\n            limb3: 0xc18dabb70953283ac0831cb,\n        },\n        w10: u384 {\n            limb0: 0xf4e4997640a0e73c8ced7b36,\n            limb1: 0x81b60a120c6ac55184b13431,\n            limb2: 0x12a9b15b12fddd8e7a1c3fa3,\n            limb3: 0x6b3db04d04875ece12b9ff5,\n        },\n        w11: u384 {\n            limb0: 0x12e51658ef6c7052999e66af,\n            limb1: 0x9549543304b8f59e1248a434,\n            limb2: 0x52afd8a6dd047073d383da00,\n            limb3: 0x4ded7b056b1316dac6713a6,\n        },\n    },\n    gamma_g2: G2Point {\n        x0: u384 {\n            limb0: 0xaa65cdf007aef54c6f623dde,\n            limb1: 0x221d9fa6582f8ab41f299a1d,\n            limb2: 0xc274f8bcf99c710a010e41a0,\n            limb3: 0xdd0d7c6d60ac00708ff7db2,\n        },\n        x1: u384 {\n            limb0: 0x734de87c275c5ff8648ec130,\n            limb1: 0xee8326798aab2bfea23775cc,\n            limb2: 0x451384c060e8865aff71dbef,\n            limb3: 0x604b708bc781ae38a361b93,\n        },\n        y0: u384 {\n            limb0: 0xa6a2e609a74c6461dbb15b12,\n            limb1: 0x1b15cfdecac55c2f6881eaa3,\n            limb2: 0x1c77b46d0593da85473e42c4,\n            limb3: 0x1541ecff208d5a5cd2d55296,\n        },\n        y1: u384 {\n            limb0: 0x699092f65f774234b7f31840,\n            limb1: 0x4c6c5689af7c6b120e3ab986,\n            limb2: 0x6b8b64d4ead6109ba5c739e4,\n            limb3: 0x108c95049535bcd1117cdbdf,\n        },\n    },\n    delta_g2: G2Point {\n        x0: u384 {\n            limb0: 0x6295df8b9ffbb9f638117fb4,\n            limb1: 0xd83ce7d5ca555ae1cc54e530,\n            limb2: 0xd0b71d6edfa740f665e34c84,\n            limb3: 0x18b219a74108de96a9519a60,\n        },\n        x1: u384 {\n            limb0: 0x7e3c781dba158e67256dc98e,\n            limb1: 0xa144ffba7defff7d45169d6f,\n            limb2: 0x5f5d374324ad0e72809aeed,\n            limb3: 0xe3e7a8c90ba5b5e266fea71,\n        },\n        y0: u384 {\n            limb0: 0x4573d43941a95edd7fc0b3c,\n            limb1: 0xa5afe44806a147a2c04a80ae,\n            limb2: 0x446f45ca171a1edf9abe76b8,\n            limb3: 0x11b12761f310cbe4ba3e1ded,\n        },\n        y1: u384 {\n            limb0: 0x1af32f6be0d4fbaaa3a16480,\n            limb1: 0x8a1e0e97cea1801e094fdc7,\n            limb2: 0x12fe3d86972bfca288dc7d9b,\n            limb3: 0x11ece09d0b6f1a1ea16238a5,\n        },\n    },\n};\n\npub const ic: [G1Point; 2] = [\n    G1Point {\n        x: u384 {\n            limb0: 0xaea925952b1d5dcc848e1107,\n            limb1: 0x1d3926283f7823c830469f8d,\n            limb2: 0x855a100cf099f5733048337,\n            limb3: 0x126fbe91d07c71cd11847edc,\n        },\n        y: u384 {\n            limb0: 0xdffe1c953fd7a62db3ea0f7d,\n            limb1: 0xe81081ed3027415c05028dc0,\n            limb2: 0x8382ca23441bb4a34775829b,\n            limb3: 0x11d4302c0095dfb2bcb31a44,\n        },\n    },\n    G1Point {\n        x: u384 {\n            limb0: 0x46c87cd685c7c1d6fdcd1e9b,\n            limb1: 0x2f62c85bb229d8c136b83c08,\n            limb2: 0x5447e4279f17852eabd158fa,\n            limb3: 0x17eb504b7c7c4fcec2570d70,\n        },\n        y: u384 {\n            limb0: 0x1af88a58b9173f40990d461d,\n            limb1: 0xed8dc9e752c0f5ec50f0bf39,\n            limb2: 0x620cad3e73faf12d0844d15f,\n            limb3: 0x682ec2d49889aa39ae6f079,\n        },\n    },\n];\n\n\npub const precomputed_lines: [G2Line<u384>; 136] = [\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x306be1de1b04d2624e640455,\n            limb1: 0xf2a2185fd41fca781bc97f37,\n            limb2: 0x61bc1a3296c8468ccbfd0f00,\n            limb3: 0xe34ab79b1474233817e576e,\n        },\n        r0a1: u384 {\n            limb0: 0xb2d501153392bd8774a608d8,\n            limb1: 0x8bf8261f30c2770732ec1803,\n            limb2: 0x54badbe21461d0daf83afabe,\n            limb3: 0xf07ba4034e02ff1891990ed,\n        },\n        r1a0: u384 {\n            limb0: 0x32ea0796aef63117c6e0e6a1,\n            limb1: 0xa45dad1f58021d08480cc168,\n            limb2: 0xccdc578cc13456d86cd47734,\n            limb3: 0xfd13ef0a99a6b73d52ca7b9,\n        },\n        r1a1: u384 {\n            limb0: 0xb3a2e4a310abfbef796714,\n            limb1: 0xa555ba99515a0a5e2d59908c,\n            limb2: 0x165b6bdd81d359126278cb48,\n            limb3: 0xb4aa52b7c5b272cbf4fc038,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1b91ee6736aeabe4b5e40ccb,\n            limb1: 0xd1e0bdffe69e623fa4977b7e,\n            limb2: 0x3a38a366dca6ed3ac394edae,\n            limb3: 0x17d86f3a6eadac41e32f85b,\n        },\n        r0a1: u384 {\n            limb0: 0x85526a142f1b602083c8d0e9,\n            limb1: 0x9de43cde6d77997ea6be8502,\n            limb2: 0x26f9e86d04c4567b4ce35680,\n            limb3: 0x1426d177654bf0d7517048d4,\n        },\n        r1a0: u384 {\n            limb0: 0x47561557466bbd16edc89e91,\n            limb1: 0xa569496f4dc6bd96e4917912,\n            limb2: 0x8b21592e524eb1bc65bda550,\n            limb3: 0x167eed299c6bd0497e52cbb8,\n        },\n        r1a1: u384 {\n            limb0: 0xa40e65e562f01cc7e697d44e,\n            limb1: 0xf7e3075bffcb46efc4c7de85,\n            limb2: 0x4837f7e7cd36e2ed7747ed42,\n            limb3: 0x1401c25696479939c853129,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xcf09df55ea243c0b5d27ea95,\n            limb1: 0xa5c3c859310e651108ba35f9,\n            limb2: 0xe22d5367257f2b7b07101881,\n            limb3: 0x146fecb4aca9ed26211e6a1c,\n        },\n        r0a1: u384 {\n            limb0: 0xfb9b1aa00ba2314b499e9ad2,\n            limb1: 0x25885d4aae86a2ee87249374,\n            limb2: 0xebecd6bf5c617aba6840aa01,\n            limb3: 0x463f1553e899e2adf4279f9,\n        },\n        r1a0: u384 {\n            limb0: 0x1aa0f311fb5027f4834da079,\n            limb1: 0x7b26ff99d902997df1825c8c,\n            limb2: 0xebc6228c9418dc5eebbf53b1,\n            limb3: 0xe10e27eb7e14d9257ef5dc5,\n        },\n        r1a1: u384 {\n            limb0: 0xc89a8f1c1c6ae8707f8fa8fc,\n            limb1: 0xb45e86fe1c988a090beb870d,\n            limb2: 0x9b645529fd4c880478be7051,\n            limb3: 0x173c6c7f6fa56c3d1f1961b3,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb58b9ab9d1892dd4c5543b36,\n            limb1: 0xe3c36bb4c20608a534fd590b,\n            limb2: 0xed0ee74781e598434a0b96ab,\n            limb3: 0x6b2aa02643ac8ef76d9b262,\n        },\n        r0a1: u384 {\n            limb0: 0x3a1fbee97340bbd138b8ebb4,\n            limb1: 0xfc724611032db25419c64333,\n            limb2: 0x7b496eddcf55a6c83d880e5b,\n            limb3: 0xdd344cd4cc6c1be8929497a,\n        },\n        r1a0: u384 {\n            limb0: 0xef38cfa96ccac703a2060cc1,\n            limb1: 0x2f8106247ed8427f6104427,\n            limb2: 0xa2e886264a53734039a28245,\n            limb3: 0xfd9424926115c1f549c9fe6,\n        },\n        r1a1: u384 {\n            limb0: 0xef853c4c4bccb3964c46149c,\n            limb1: 0x739746bb23813b366d6900e,\n            limb2: 0xd46eb42d09315fa477d9661,\n            limb3: 0x960e39d1824fac5873f1b4b,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xd97632f4635a33f78fe45df,\n            limb1: 0xfbd9de73e894c9578b619e6f,\n            limb2: 0x8e3e139782eddc798cfe1cba,\n            limb3: 0x101554d44cb1579300498f0b,\n        },\n        r0a1: u384 {\n            limb0: 0xe6071e81b13c82607e1504cd,\n            limb1: 0xc90c09fd9d0de2ae2e3b1c7d,\n            limb2: 0xf07085d896ccf916cd0d6c32,\n            limb3: 0x17aa6a97d1dfda923c027163,\n        },\n        r1a0: u384 {\n            limb0: 0x6442e11f77c962ca849d5ace,\n            limb1: 0x3a02be748e349014afa5ee2b,\n            limb2: 0x870d78ab0321516019929135,\n            limb3: 0xfc7e0bf5ac4481abd4e87c4,\n        },\n        r1a1: u384 {\n            limb0: 0xbe9a9a875effb23de3d91dd7,\n            limb1: 0x1934ec3159b26c5ff788b5fb,\n            limb2: 0xc82ebc003a434e6082ae9773,\n            limb3: 0xf843e21d950713837ba992e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x28c8425627ed65eb0939cdb4,\n            limb1: 0xc3c6c683bb2f36b229a6067e,\n            limb2: 0x72b2a1af6f1ffa9a7b76ac8,\n            limb3: 0x1812bffcffe098c2f8a4d03a,\n        },\n        r0a1: u384 {\n            limb0: 0x2f789c72473e628e0daf2579,\n            limb1: 0x43800ef9d613d6c1609105a9,\n            limb2: 0x4a05e73291a8d7f3a6057209,\n            limb3: 0x73a3adbbd19a0c5629c438c,\n        },\n        r1a0: u384 {\n            limb0: 0xa0991371dae811f65097016e,\n            limb1: 0xa1d3e86721ce69bdd7b30b45,\n            limb2: 0x47f1ab9108f30cc37319c5ec,\n            limb3: 0xd3ac356c647bbe338b60eae,\n        },\n        r1a1: u384 {\n            limb0: 0x4dc00392cc0f98e602f32889,\n            limb1: 0xe9f026915132182309858a36,\n            limb2: 0xcb6091656a55b6d8dc590657,\n            limb3: 0xdad58900f4739152bbeb372,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa0f3631679cfbb9b21ad0462,\n            limb1: 0x6ee7debde007b92b4b149c44,\n            limb2: 0x55a3e394518675f2e31137b5,\n            limb3: 0xd8a826fe9113b560da09907,\n        },\n        r0a1: u384 {\n            limb0: 0xed78588c893ceaa0f514558b,\n            limb1: 0x79d83cf3b7023296ec92ba14,\n            limb2: 0x9735f438b5a71d40b70bb0fa,\n            limb3: 0x15aef525c47e22ae57a7f8d5,\n        },\n        r1a0: u384 {\n            limb0: 0x84b45245e65ce740caff5e5b,\n            limb1: 0xf67e131fa36599b6f341f185,\n            limb2: 0x8788300d6901775782a0560a,\n            limb3: 0x77d9a7e661fdfc46bcf0a96,\n        },\n        r1a1: u384 {\n            limb0: 0xf1c657418092ff3af9268ad,\n            limb1: 0xfd859ddd59729868785858bf,\n            limb2: 0x74b030a37e9b5229e33eea35,\n            limb3: 0x2ed25e75eafc63b15c99cd8,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x828e9d39e6c3882e1c541094,\n            limb1: 0x3e866024d8c0d4511c1d7b04,\n            limb2: 0x82f82c8987fbcd90a7db524e,\n            limb3: 0x115162baf491d6d2c3bb4408,\n        },\n        r0a1: u384 {\n            limb0: 0x73e00500dbadcb8f72a61794,\n            limb1: 0x2b083cc45cb9b982df2826bb,\n            limb2: 0x38a8b3bfefd4f705093941c9,\n            limb3: 0x1764d08b2b3f48e67da5fca7,\n        },\n        r1a0: u384 {\n            limb0: 0xb15b36df44312bd1bc6b43c0,\n            limb1: 0x17d11b4de6c29aaee53b828,\n            limb2: 0x4707b434920922fd8726a2ed,\n            limb3: 0x13aab19628ca9aaf0a115e66,\n        },\n        r1a1: u384 {\n            limb0: 0x45545ee3518b4ad82e08a2e4,\n            limb1: 0x545d12ab8020b0d72105759,\n            limb2: 0x8a1520604f4038d8cfd87db4,\n            limb3: 0x13302bc366771eb73d10200f,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x26347d93bfe0c7376637de2a,\n            limb1: 0xa7b2d922d944d44736d75046,\n            limb2: 0x96a8d04f3e2c39be23f934ba,\n            limb3: 0xf68430cc06e72e8cba83abb,\n        },\n        r0a1: u384 {\n            limb0: 0xd00debef89a0244b8645b45d,\n            limb1: 0xb820cb845456918f3639b0bb,\n            limb2: 0xa32e6daab9f6beb0252d81c3,\n            limb3: 0x138d591ae6b61a704bbcd8d8,\n        },\n        r1a0: u384 {\n            limb0: 0xdc637c11d0dbeaf0a39536cc,\n            limb1: 0x9660f9ee2827e0e6402067bf,\n            limb2: 0xd91e4cc7d47e0fd9713272d9,\n            limb3: 0x10137873532e35eeec88970d,\n        },\n        r1a1: u384 {\n            limb0: 0xfcf221d220a35af03650e72d,\n            limb1: 0x616ae54c91ce47ca60763953,\n            limb2: 0xe626d0064ab09e7302b5be30,\n            limb3: 0x1816ead2f891bd024c2985cb,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xfb87ceb75ed615c4c057d678,\n            limb1: 0x6582cbf9525b9cefe7b9e804,\n            limb2: 0x4f37e42b8dc3a2ee249e6e37,\n            limb3: 0xf4741cab21cf2769050b0fa,\n        },\n        r0a1: u384 {\n            limb0: 0x924844c33852d2e23cac984a,\n            limb1: 0xbc556fa45dd32211de3922f9,\n            limb2: 0xb8366a587addf71a58498b14,\n            limb3: 0x13ea637b846fbb373c8f4611,\n        },\n        r1a0: u384 {\n            limb0: 0xefa45f0548590ffceb314941,\n            limb1: 0xbf9b204a890c30857ba60551,\n            limb2: 0xbdd3f88bd124ac7e0f0af016,\n            limb3: 0x8e95429352e72aba5211967,\n        },\n        r1a1: u384 {\n            limb0: 0xf8c98157528a959ccac7cc4,\n            limb1: 0x687cb79cd5a81fac75001ca4,\n            limb2: 0x6b68eabcdc9b0ad00d66e086,\n            limb3: 0x140f2cace6f7cab25c97103e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xe7afbce45921cd7b77242135,\n            limb1: 0x5718bd5dc545444c6b641c19,\n            limb2: 0xf512a03bbea424d2672a39a3,\n            limb3: 0x8e393e621680c17993f7bae,\n        },\n        r0a1: u384 {\n            limb0: 0x8ff19c6a2f49a711cf0739f9,\n            limb1: 0xc3af1820b15abe02eca2754,\n            limb2: 0x53766b612388a245d2d63ffe,\n            limb3: 0x381016961e0f7db87f0cce8,\n        },\n        r1a0: u384 {\n            limb0: 0x4dda60bd25e6e1347768724b,\n            limb1: 0x1d241291d2da9e52a786e440,\n            limb2: 0xb10bcb7cb6ea42c8a80fa259,\n            limb3: 0x140182d624ca9103b00a1042,\n        },\n        r1a1: u384 {\n            limb0: 0xc434a31edad1a2430d152c8d,\n            limb1: 0x7bbb7dbdcb98092bfc57c45b,\n            limb2: 0xe5bfd09fb89c9cb9fc2930e8,\n            limb3: 0x149d591ee71b32836829acc5,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6f857b2f9dbf0171c195a52d,\n            limb1: 0x5813a24021c2b05113dd4a96,\n            limb2: 0x2aff27dce98b343fd0f793de,\n            limb3: 0xf2e0145a43aeae640b6969d,\n        },\n        r0a1: u384 {\n            limb0: 0x29ced55c68a2802ce2609172,\n            limb1: 0x6338f9b36d931b4d67932b9b,\n            limb2: 0x66025aa8eb27d423c0b5bfec,\n            limb3: 0x14fe5e46686326e1f055306,\n        },\n        r1a0: u384 {\n            limb0: 0xeb52118df562a61042721eca,\n            limb1: 0xee5bdf330b411779cc2881e5,\n            limb2: 0x8fc6336a288b05900b65ae97,\n            limb3: 0x517b226c178ce7caa260f92,\n        },\n        r1a1: u384 {\n            limb0: 0xe7e7b8db4db2afd3d18383fc,\n            limb1: 0x82b7a186d747be7f434c662,\n            limb2: 0x2a775ab75e722fd93a4da97,\n            limb3: 0xe496d7813827c9e5ffe551c,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x627028a8bdee6000c0d845f6,\n            limb1: 0xc9f98f9c37170503138c263e,\n            limb2: 0x49fbcbcd10639a6d007e5879,\n            limb3: 0x131a7572031e8ed7a863b371,\n        },\n        r0a1: u384 {\n            limb0: 0x7b5f18c205ca348475db5437,\n            limb1: 0x16ca76de607e8ea438b21550,\n            limb2: 0x35c5f60e8c2bd63e2a90fb2c,\n            limb3: 0x13bb76670abc068e45d475c0,\n        },\n        r1a0: u384 {\n            limb0: 0x239305338201c7b0d260e948,\n            limb1: 0x4cfc220680324a3e5e1fe68d,\n            limb2: 0xb5b8357d92c82b48c50ab1b0,\n            limb3: 0xba4a4c1f10015ff907735c2,\n        },\n        r1a1: u384 {\n            limb0: 0x5c84bbc1fcf0837749364732,\n            limb1: 0xc66eb6ada5392af863d295b3,\n            limb2: 0x3fca6067b750d18086f41345,\n            limb3: 0x13fbb0a0f6400bfdad8a7193,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x249c31d39a8ff1d65e22a789,\n            limb1: 0x6f16f7224fa34e79712f9ff7,\n            limb2: 0x9300f2ba5e2772169f274b95,\n            limb3: 0x150c43a0d3e436e65b20a4be,\n        },\n        r0a1: u384 {\n            limb0: 0xe3dfcea0f7070a52acf2f549,\n            limb1: 0x4c4b0f06dc150efc46e57fe0,\n            limb2: 0xcff73efac06c1fe6f9d4bfe2,\n            limb3: 0x143df5a491905251d79670d1,\n        },\n        r1a0: u384 {\n            limb0: 0xe2f782ade4eb4d3d61c1ae2e,\n            limb1: 0x374eac91af81a4be25d5698e,\n            limb2: 0xbea5114dfebd79eb8078b0cd,\n            limb3: 0x3d61f08b0443e34c6871b,\n        },\n        r1a1: u384 {\n            limb0: 0xe4d40a02691978c7cd5b7c88,\n            limb1: 0x4b39d5b3234be8097a93f261,\n            limb2: 0x263fd7183a07705a066e4b0b,\n            limb3: 0x673d4ac4c490f4da1baad08,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5acdc9c59c94e0d5705d33dc,\n            limb1: 0xddeae8a3def58011f5fff627,\n            limb2: 0x2a560574c9f7f1adf85ac330,\n            limb3: 0x986c2f3fe60390dc3490a7e,\n        },\n        r0a1: u384 {\n            limb0: 0x3ae8c5c7e6a5b36fbf54ed71,\n            limb1: 0xfca9910fdf6379bb21489fd2,\n            limb2: 0x931ca186c017ce347583a52d,\n            limb3: 0xa800d5ce754e490542d0a63,\n        },\n        r1a0: u384 {\n            limb0: 0xc757e215e8a482b8d6c1830,\n            limb1: 0x79cdb82276ca8c6d2c853c2a,\n            limb2: 0xdf7e085f46fdd58884c07921,\n            limb3: 0x12c2a50751be2602b79ce60f,\n        },\n        r1a1: u384 {\n            limb0: 0x4bdd9d25da5b740109e8ba82,\n            limb1: 0x738b43414881a78559812a3,\n            limb2: 0xc45a86a441289ba795f8c844,\n            limb3: 0xc17887e275b98353945d589,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x2f25c239eaac738b78124e52,\n            limb1: 0x3b423b7770e03a4290134003,\n            limb2: 0x4e7a673af5f9bb11fa69398a,\n            limb3: 0x5a6af6e0735f0cf58a65190,\n        },\n        r0a1: u384 {\n            limb0: 0x5465b4df3f574f8ce75115cd,\n            limb1: 0xbbaa17554362320ad4d7dbb7,\n            limb2: 0x7801bed020c4eb0b06b8c3a5,\n            limb3: 0x55dab1ebabc42258823f990,\n        },\n        r1a0: u384 {\n            limb0: 0x168eff4cfe08a5d2480cd220,\n            limb1: 0xfdfbc5d6539d58ae5fd2f3f0,\n            limb2: 0x730c3716c3f8f093bc196396,\n            limb3: 0x11ec5e41f01d546dc82f14a9,\n        },\n        r1a1: u384 {\n            limb0: 0x23122e240cc2e876eb1177f4,\n            limb1: 0x2ff2cb0192b8833c39a3f14,\n            limb2: 0x8df40969fdcda1a427931ee3,\n            limb3: 0x10714f2f682bd1dd3f41759,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xeb732a6499363c67e23554a3,\n            limb1: 0x4cdd42ecd8a52cdb6f9c934b,\n            limb2: 0x67790eedc23de78c48c1386b,\n            limb3: 0x30d8024f42aed61c2d2748d,\n        },\n        r0a1: u384 {\n            limb0: 0xfd6de8c461951483834d8358,\n            limb1: 0x1871938e8ba214f3eb03688c,\n            limb2: 0xf09f514cfb1eeede386e9108,\n            limb3: 0x1ae4fa7bbb288f14dcf1905,\n        },\n        r1a0: u384 {\n            limb0: 0x7e5704e179ddff883226618,\n            limb1: 0x944cd6a7ddc3abe547501924,\n            limb2: 0x65f20918a39b3d50fd554db5,\n            limb3: 0xa5f6ffc447dd34c63d7c7ed,\n        },\n        r1a1: u384 {\n            limb0: 0xa365a10339a32f4d93f34a24,\n            limb1: 0xc7911352eea0cf23e726f314,\n            limb2: 0xd28cf2c778e3550205e4ba3d,\n            limb3: 0x49718664bcc386426e22fe,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9b4583c7c2eff06ad56a736a,\n            limb1: 0x16aafa467cd25a5256429294,\n            limb2: 0xa4c3b813887ac253e9bc4dd5,\n            limb3: 0x6eee2daf5b60dab9f5eb870,\n        },\n        r0a1: u384 {\n            limb0: 0x9444bf7e4bfe8944f3411b7e,\n            limb1: 0xaba54fb4de33e741459d8419,\n            limb2: 0xa2327c6e364f8783c0d5e1bb,\n            limb3: 0x838b6cadbc4926ff1e28231,\n        },\n        r1a0: u384 {\n            limb0: 0xc8b6a45166049617dcea7b54,\n            limb1: 0x4ac49a392e6cf7439bc91ae1,\n            limb2: 0xd74e10a7727f88165c078231,\n            limb3: 0x162f6576adad1b99778999fa,\n        },\n        r1a1: u384 {\n            limb0: 0x75bd03c5dc8a6db2a547c786,\n            limb1: 0x245ca34042521ea6d83ceda2,\n            limb2: 0xcc92885b1570b94b70d80a05,\n            limb3: 0xb8b49d50bb600ad8d7ce9d0,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xe56c10fd708eba4c69c86be9,\n            limb1: 0x47a28ca72cfe6f9c70ca8972,\n            limb2: 0x6933ea5252a1c9ba1a14b029,\n            limb3: 0xad0112a4bbbe78974cf22f,\n        },\n        r0a1: u384 {\n            limb0: 0xd79653f0250babd6c15550a3,\n            limb1: 0x4fdd97d99b267a100baf5eab,\n            limb2: 0x5dba0919fae69ccc77cc729a,\n            limb3: 0xfbfb0f0ef4a3dfc80f6b10,\n        },\n        r1a0: u384 {\n            limb0: 0xdc11b768e081943936c71251,\n            limb1: 0x8e402b0cf012643696d54eec,\n            limb2: 0xe3a54b8bea8aa29cc92adfa3,\n            limb3: 0xda8bf357b7ecf5ee7e2935f,\n        },\n        r1a1: u384 {\n            limb0: 0xcef322bd8fd68dcf8292c80e,\n            limb1: 0x8ae248af5d1c668e58fdcc5,\n            limb2: 0x298acf2638b512874d35b32e,\n            limb3: 0x191d8257aa2319bc39753288,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xc83c67c05fbfeaefbbd5790a,\n            limb1: 0x123a1cca4ede316a8294191e,\n            limb2: 0x63fb9483204cb857d7463c,\n            limb3: 0x984ae3c2b6712fcebb6158b,\n        },\n        r0a1: u384 {\n            limb0: 0xb48a82e26de7b45ccf695c49,\n            limb1: 0xfd69088e6325b4a59e2e3baf,\n            limb2: 0xbc7a001c3fa6f52b1d25697e,\n            limb3: 0x4ff0e60086655cc572e1467,\n        },\n        r1a0: u384 {\n            limb0: 0x3a0c2b22b46f25e18a89dd01,\n            limb1: 0xa4fb3c83d574db22b6f0f2bd,\n            limb2: 0x2a3bbdb8ad527267238eb4b5,\n            limb3: 0xc1632affc12f7ddc4fe9c05,\n        },\n        r1a1: u384 {\n            limb0: 0x7a6ccf0765a33ad6a4338e28,\n            limb1: 0xb128bf3f00eadb3e353e99cb,\n            limb2: 0x8345222b6d92f0e8ceffe694,\n            limb3: 0x13021a7c42029ef3b3a03b5b,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8b4b049da5868b96ec5ef16a,\n            limb1: 0x8d5611c25dabe2e1e151b1a7,\n            limb2: 0xddb71096536602ff67aef13e,\n            limb3: 0x195727ea0c31f99d279d2c66,\n        },\n        r0a1: u384 {\n            limb0: 0xd3e90be23a92f9b2796a042e,\n            limb1: 0x85c1b8abb6a3db2341cbd934,\n            limb2: 0x35f112e2a3bb74ebca814c9,\n            limb3: 0x11608b3602d92cd2961f734a,\n        },\n        r1a0: u384 {\n            limb0: 0x27ecf3c4fb84afd5ffe30e5,\n            limb1: 0x7d3b6cadde4e3cfc2716482f,\n            limb2: 0xf461db5c14254194af9677ad,\n            limb3: 0x74722715fddd1d8c8facb8e,\n        },\n        r1a1: u384 {\n            limb0: 0xd794b12dc14b353bfc2efaef,\n            limb1: 0x3ef7de5c1b936e7d05b5772c,\n            limb2: 0x5109cd77e02b955f276af355,\n            limb3: 0x69e276dbbecd216f0aa3d6c,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x10bc38abf4dda7f290877811,\n            limb1: 0x90127c55e7589969a91be3ac,\n            limb2: 0x29d96c2444ae7f01e263a0c3,\n            limb3: 0xf495e0c5443cde97f871315,\n        },\n        r0a1: u384 {\n            limb0: 0x6f2ac18b2680d1e8a605caa1,\n            limb1: 0xb4a46aa677fb81fcbae9dbb9,\n            limb2: 0x54e08bc2869b9a1d9a537c38,\n            limb3: 0x1465dd41a8a184fef79a2c1f,\n        },\n        r1a0: u384 {\n            limb0: 0x9d53f734e25974abcfa47364,\n            limb1: 0x9df11e087b97d3d542c984af,\n            limb2: 0x25fab041d2456b22ec266690,\n            limb3: 0x495f3d7bdeb35ac71f1edb0,\n        },\n        r1a1: u384 {\n            limb0: 0x887fd8b50e8827300a60f794,\n            limb1: 0xfa5ba0761639eeb27f30bed9,\n            limb2: 0x3fbae88761ebaedad5ddf541,\n            limb3: 0x55c11188a5ad9e22ab23b49,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x7839770100e64978b29b5da1,\n            limb1: 0xd1797b5709b5e941a25bd854,\n            limb2: 0xe380c0aa684a2ef24741f60d,\n            limb3: 0xd793a27db3f49ebe18c4a1e,\n        },\n        r0a1: u384 {\n            limb0: 0x559bdbe1d7eeb10a2746f1bd,\n            limb1: 0xb9c58c75c214aab2bf45be6a,\n            limb2: 0x9895443b8ceac7617274a4cc,\n            limb3: 0x8f43c50f9fe87ae296cfb2d,\n        },\n        r1a0: u384 {\n            limb0: 0xdda6f32b4b0b7b32d265129e,\n            limb1: 0xe464575f3e1f24bb18636f8b,\n            limb2: 0xb224edd6479be27e01119c05,\n            limb3: 0xca892cd7b21339a629ec82c,\n        },\n        r1a1: u384 {\n            limb0: 0xdf94aa2f2ba69324fb2ae4c5,\n            limb1: 0x74d6e4984282ba272947e515,\n            limb2: 0xad622ab52799cf8f5434661,\n            limb3: 0x14b019e003467d8befe14c7c,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb969376bae3c9436802b382d,\n            limb1: 0x4bb02af7cd7b5f2095de8558,\n            limb2: 0x7e915e624ef6b238784c8ee9,\n            limb3: 0x5ad75d07fc6e51553e8446b,\n        },\n        r0a1: u384 {\n            limb0: 0xf2f3c721941407cd6fc65214,\n            limb1: 0xf96f4682200bf90560f9d7d0,\n            limb2: 0x6ff674edd3cdcebfbc6927c2,\n            limb3: 0x70b924a36d0d0d18d1f86c0,\n        },\n        r1a0: u384 {\n            limb0: 0xfa5f3d9bae88dd30a37e6ee7,\n            limb1: 0x46acb9ec3468325eebed87f4,\n            limb2: 0x996d6196a4f5ed86336dfe3a,\n            limb3: 0x15aa069b9cb15c0d9e13affd,\n        },\n        r1a1: u384 {\n            limb0: 0xf57275082d3033d0931cd97e,\n            limb1: 0xb5af04905693380e449363fc,\n            limb2: 0x67cb680f814b147d1c0510c9,\n            limb3: 0x7960dff606f541c7946b9d,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xc15b372196a4663350cd2b9,\n            limb1: 0x2753dbf2d814a0dfa80e8275,\n            limb2: 0xf3d176cfd4b31f6947d9bc88,\n            limb3: 0x17c0bb87847c506117e6cd23,\n        },\n        r0a1: u384 {\n            limb0: 0x76f4129f303039129cc79e0,\n            limb1: 0x7eaf05f9708ca7853218d75,\n            limb2: 0x590ed883b2ed7b5f645ff44c,\n            limb3: 0x1684dfe0af35fe16ba5ba930,\n        },\n        r1a0: u384 {\n            limb0: 0x277e726e10e54e13daa7f4b8,\n            limb1: 0x1357f42678e08ea031bb2b12,\n            limb2: 0xca1c568eabcf8afe53c814f7,\n            limb3: 0x19bc460f5cd30977d21d9739,\n        },\n        r1a1: u384 {\n            limb0: 0x33eb94313ab593654dbd54ee,\n            limb1: 0x7c237036496ce5f8f11c17fe,\n            limb2: 0xdfd944729987f793c15e4453,\n            limb3: 0xd63a6276a212ce9a1e58aa7,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf20da79d7dfa037538abd816,\n            limb1: 0x96c0beb5faf5af5df9b8ad6f,\n            limb2: 0x3aa4377fa088a6cf85b99168,\n            limb3: 0x153bee48b03425e71179bfd3,\n        },\n        r0a1: u384 {\n            limb0: 0xf5a3dc9e621f522295873202,\n            limb1: 0xfd7f4a0f3fae36c0e07bcfb0,\n            limb2: 0x91787b55b90027dfbba4dc47,\n            limb3: 0x602b94eac31f07e247331ce,\n        },\n        r1a0: u384 {\n            limb0: 0x4d41921c8d757cb2e15c0d98,\n            limb1: 0x3ae914662ef2442249290f10,\n            limb2: 0xa1fb6f06697cc519f0bb38a7,\n            limb3: 0x2f6ddde5351135b578991f0,\n        },\n        r1a1: u384 {\n            limb0: 0xc87d3c0bd12fb496ed8f5a54,\n            limb1: 0xc3a104d91a2340a8f822da07,\n            limb2: 0x56e3f922970841517593e69,\n            limb3: 0x92b551cd42df98975fce59a,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xdb6c7a0774018772e50dafcc,\n            limb1: 0xbde46cf045ab017eac2816e2,\n            limb2: 0x824d39b935708d80ca98241c,\n            limb3: 0xbfabbb42779252feb5d25e5,\n        },\n        r0a1: u384 {\n            limb0: 0x788ab20840dee69cea429120,\n            limb1: 0xa417d7d1b270d5611c01b727,\n            limb2: 0x2b196689ca63e5a20e13badb,\n            limb3: 0x1091fc7332394b464cc2444c,\n        },\n        r1a0: u384 {\n            limb0: 0x2e9e2a6964ebf268df4932e5,\n            limb1: 0x77632a4b8d6670e8867982ac,\n            limb2: 0xa854b6cad13eb7b32654a369,\n            limb3: 0x47857d8ec55a7a26b65ed42,\n        },\n        r1a1: u384 {\n            limb0: 0xe11be4ab63d3f43b4f493247,\n            limb1: 0xdda4441c10bf9c3d1a7045a7,\n            limb2: 0xaecbee2883c54e7a6ed845c9,\n            limb3: 0x184f1f4eb029266cab0f8a9d,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa89a525e63cee0c3dd6dcbdd,\n            limb1: 0x260af65091e1b14cdfcd6a9b,\n            limb2: 0x8674f3d64ab6a0dfa428a734,\n            limb3: 0xd83461b7d229a47477b452f,\n        },\n        r0a1: u384 {\n            limb0: 0x4ea9d854c2d19cd6c91f75c6,\n            limb1: 0x6faa63eeb0ea28a567141c51,\n            limb2: 0xf32028bf055906e69704c788,\n            limb3: 0x161a2c2d45c521243105d3e,\n        },\n        r1a0: u384 {\n            limb0: 0xcc932dd5deb1d63753156319,\n            limb1: 0x13f05a2fb2e964c1a8a2e28e,\n            limb2: 0x5cfd3943f10bcad6ecc2ea6b,\n            limb3: 0x10a0f702fead13effc9e9f1c,\n        },\n        r1a1: u384 {\n            limb0: 0x856d3b6773cabc8ff27af841,\n            limb1: 0xe7990cc9655a8869cc53dc7c,\n            limb2: 0x3dc0945d12fc0d72f4ebd1af,\n            limb3: 0x18e7f2418d2abfce90cf506d,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xe99a02683b93ce550ef8951a,\n            limb1: 0xa9abcbc9f1e57aac617d5a71,\n            limb2: 0xfd2264b1427ae649f3a4e1ef,\n            limb3: 0x15ff7a8e11d9ae7d538a8b00,\n        },\n        r0a1: u384 {\n            limb0: 0x503500bd91432999dba8d5ce,\n            limb1: 0xd95bddb364aa203f3840ebf3,\n            limb2: 0x59e6dfc06d85fbf164cae37a,\n            limb3: 0x1382a254297b2a3c664514d1,\n        },\n        r1a0: u384 {\n            limb0: 0x9097edb6dbf1b71a8c368587,\n            limb1: 0x532fc71978fa4554bbfdd7ea,\n            limb2: 0x5324ddb0fff76cdd1bef7534,\n            limb3: 0x43fed1dbcdad88e4eae01ee,\n        },\n        r1a1: u384 {\n            limb0: 0xc635a4270f612344c7c2577c,\n            limb1: 0xe4eb707545e699537d72d73e,\n            limb2: 0x40574795e3c651067e4021ac,\n            limb3: 0x13dbaabb12a73c5d10348fda,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1a2d52c61eb99a17a3be3cd9,\n            limb1: 0x4eecc3591b88b7e445de86a3,\n            limb2: 0xf4864a4ecffedb9825372e24,\n            limb3: 0x6f605dc4849a207692e010d,\n        },\n        r0a1: u384 {\n            limb0: 0x3acd6290375e15bccbe5b23c,\n            limb1: 0x36c7d38bd9a1a396291b0837,\n            limb2: 0xc0dc84c282cca2fe3d70cc82,\n            limb3: 0x24caee93425f8b557dc23d6,\n        },\n        r1a0: u384 {\n            limb0: 0x76300db4b9d505a255fff33f,\n            limb1: 0x35af05b45d0477b7367e86c5,\n            limb2: 0xde8815ffa8ad532cf68bd313,\n            limb3: 0x3054d735bb0c22331cee080,\n        },\n        r1a1: u384 {\n            limb0: 0xf5c2e1a9439c2a46aac504a0,\n            limb1: 0xbb192ed1b6154a8a8759f705,\n            limb2: 0x51314d3bdedfa5d487255b3b,\n            limb3: 0x4b2e182290ab34447644799,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1a96d93e90e2ff176753ab18,\n            limb1: 0xade05825ee054ce9e6aa7652,\n            limb2: 0xd6a9decd70aaa6b4963911ae,\n            limb3: 0xf299b64b98f8cbfef181bb9,\n        },\n        r0a1: u384 {\n            limb0: 0x1f4b4e96e678e91f5136b57,\n            limb1: 0x38f0a1243e66287b99527276,\n            limb2: 0x35f3c0d6c73a9c5df947c52b,\n            limb3: 0xbd66bc9ceb8ca2f089cd853,\n        },\n        r1a0: u384 {\n            limb0: 0x83d71050041829043e791eff,\n            limb1: 0xc3e374927bd34a428d5e8b71,\n            limb2: 0xba4af9bfd6eef2f2f46d4ac1,\n            limb3: 0x3f3eed8249fd695c1e30a35,\n        },\n        r1a1: u384 {\n            limb0: 0x7a118b9c162bdc488e1987d8,\n            limb1: 0x8d7006d37a064b13604cc87f,\n            limb2: 0x9aa2b399b83e8ebe5e4485eb,\n            limb3: 0x9507e154475bf5fa909df2,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xaaad16d27f79a631ad790eef,\n            limb1: 0xae1f9bbc2c4ec614b31501a5,\n            limb2: 0x76c9cba7d0b6ea3af8908f54,\n            limb3: 0x8cb7a6a8e9114893f6644ff,\n        },\n        r0a1: u384 {\n            limb0: 0xb29d1b611350cf14a1ff5b64,\n            limb1: 0xc4447fdb999569b727058ef5,\n            limb2: 0xfda61b5986ff6f5d9f152b51,\n            limb3: 0x23d1e1edcc9d6ebe666be7c,\n        },\n        r1a0: u384 {\n            limb0: 0x3d4f1112105d01b9b097a930,\n            limb1: 0x1e91e032d07d86e09c81fc2c,\n            limb2: 0xa3f3ef90b2cf32ff4d39187b,\n            limb3: 0xc7030a9f46cddfe8fbe6edb,\n        },\n        r1a1: u384 {\n            limb0: 0xd5d65ce0b325226fb72dc92b,\n            limb1: 0x6e31b2b7f19c109c18fbd01b,\n            limb2: 0xee8f8e11ae8ac7ab0576e625,\n            limb3: 0x365346e2cd8b13c2139031c,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x958c5cbc7b7c5871f23dfcf,\n            limb1: 0x7854e164fda1398cfd8ea3a4,\n            limb2: 0x75c6a007ac2a2dad8ae4fceb,\n            limb3: 0x1366af4f5f203de7130aac6b,\n        },\n        r0a1: u384 {\n            limb0: 0x735cb088c084a95da948d7b6,\n            limb1: 0xfb4720c591f19db6fa2d240d,\n            limb2: 0x1c1e1ba0f8cb09e9c74012e0,\n            limb3: 0xebcb762ec15441bbe5e90f,\n        },\n        r1a0: u384 {\n            limb0: 0xfa515cf322fa715c42dd2f41,\n            limb1: 0xd5aa8484650615117c7b96a0,\n            limb2: 0x6a6be8954ff02d512c49b618,\n            limb3: 0x192a8d310a23babfb03ce402,\n        },\n        r1a1: u384 {\n            limb0: 0x422c26ea60eb07cc4e36501,\n            limb1: 0x517f2958deb48911f0a19c1f,\n            limb2: 0x89112f6559c627eb9b401955,\n            limb3: 0x132d0703aac38ddcd55e349f,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x15699baf9687ab96747973ac,\n            limb1: 0x45d8e4b0b8dd9546b5c2160e,\n            limb2: 0x97ef45aa8fc2ea6973fb25f0,\n            limb3: 0xd22da827adc6fd4557cead9,\n        },\n        r0a1: u384 {\n            limb0: 0x85e49ef128bb2219b1f07ac7,\n            limb1: 0x295e9710438a530329d7e3b,\n            limb2: 0xa3aa3e7050cc9d1b3bdcc481,\n            limb3: 0x95f4b12ee5a15214982e790,\n        },\n        r1a0: u384 {\n            limb0: 0x8699fce7031397e3b1a37ca4,\n            limb1: 0x43de46654e0285505fd46631,\n            limb2: 0x801c0f81eb7d3e37e2800f96,\n            limb3: 0xf3b98ea40864c154194cf17,\n        },\n        r1a1: u384 {\n            limb0: 0xf3890e04481b23922bebe93e,\n            limb1: 0x5f4a9113311cf1fa14c46464,\n            limb2: 0xc951bddb7ac353270c243e05,\n            limb3: 0x17fe34cd769864cf6eb82f26,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5b8ddb5ef759c26463a5c2d5,\n            limb1: 0x23dfe2a291f1c6d3e701c5f1,\n            limb2: 0xbde479c12792bc7c7ba6f007,\n            limb3: 0x53d3da343236190fbd3d670,\n        },\n        r0a1: u384 {\n            limb0: 0x2b975b85fccd8c75e7b35e71,\n            limb1: 0xf35a56815cc0008976b199cf,\n            limb2: 0x9db07692a2a10c279318a5e5,\n            limb3: 0xfefeb9821fedbb7a8d96405,\n        },\n        r1a0: u384 {\n            limb0: 0x89123d390cc0b45334219d5c,\n            limb1: 0x8580bdc8b5a9431143616a9f,\n            limb2: 0x842a78eb06dea913f0ddc70b,\n            limb3: 0x14c94d04e4c3db61ccc9cb3e,\n        },\n        r1a1: u384 {\n            limb0: 0xfb325786a902cd41972616cd,\n            limb1: 0xaf06f0ef70a3d64f48f86731,\n            limb2: 0xcfd0ca15c2b367e8c5e13162,\n            limb3: 0x2b733169837e8718b14ad9e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1060e79efcf4fe162043c999,\n            limb1: 0xf9eb475ab49e172512cb8d8b,\n            limb2: 0x2c62b0aa1a64b223b7de2573,\n            limb3: 0x1021b449fce423340b5d8bff,\n        },\n        r0a1: u384 {\n            limb0: 0x560013da8e110b1f16208fc7,\n            limb1: 0xb19b49f510c03417ab3a3cc,\n            limb2: 0x93468e27a99ea01b543b9de4,\n            limb3: 0xf5a062536c69ebccb457f7a,\n        },\n        r1a0: u384 {\n            limb0: 0x7e8393bbf3cbe32958ca97d,\n            limb1: 0x3bd384fe8c76515821397c19,\n            limb2: 0x480d7ef46bbcd067589b513a,\n            limb3: 0x466d9efc0da462be4e956e7,\n        },\n        r1a1: u384 {\n            limb0: 0xbb73b034d01cd3a7fdb30d5e,\n            limb1: 0x710f1a8bee89f88df336c5b6,\n            limb2: 0x4b51ff95ebc39c295bd392da,\n            limb3: 0x23be92062c2f86a8fe77642,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x2c13a83b4df1f9225a2b6ac4,\n            limb1: 0x853239dcc27a4a3006c48823,\n            limb2: 0xb7c61b932f7131b1a9e9cfe9,\n            limb3: 0xc235c22bed928a49c57d91,\n        },\n        r0a1: u384 {\n            limb0: 0x2ad555d3488695aabbdc2bfa,\n            limb1: 0x36aeaecc0bc432b07fdde898,\n            limb2: 0xc181cebea90ec0398d441027,\n            limb3: 0x2e4624ac3edf8e0004356d2,\n        },\n        r1a0: u384 {\n            limb0: 0x115f2c7dd57e1f443abdcb76,\n            limb1: 0x2e6ce3e4e2decdc9746d55aa,\n            limb2: 0xf0040696fee584095938d6c3,\n            limb3: 0x97772521a37efc5538534aa,\n        },\n        r1a1: u384 {\n            limb0: 0xe2910d7b44ed8f54620b8dd5,\n            limb1: 0x9d8b8ef67190e2769539ee1f,\n            limb2: 0xdeb8a208bbe43737d771940d,\n            limb3: 0x1919f1a600fb184dab5ad252,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9d0d7048ae34c4d5fd999612,\n            limb1: 0x3cf823d17229c90d32e33935,\n            limb2: 0xe549cdf7a4a7ecc98e34136d,\n            limb3: 0xedebc96cb4b5187ae9eb3b1,\n        },\n        r0a1: u384 {\n            limb0: 0x6fa66fc33a35822ad71cd240,\n            limb1: 0x665c350e7ae9ad6ec24f19bc,\n            limb2: 0xb442d0f327ec882e35df22bc,\n            limb3: 0x16252435446b7d36124af764,\n        },\n        r1a0: u384 {\n            limb0: 0x83640672a553a4cd021ba5b3,\n            limb1: 0x44865aa1ee3d773c912611d2,\n            limb2: 0x740ba61daae6eecae5e97813,\n            limb3: 0x83def394c91369300fe0c8b,\n        },\n        r1a1: u384 {\n            limb0: 0x3df995f1c2ed04d80229d6b,\n            limb1: 0xa51edc17429362d673cb1982,\n            limb2: 0x5b44377d34824757730568f2,\n            limb3: 0xab03d8687d1f4d4a6ad051d,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6124886478f2cc18ac7a2e2b,\n            limb1: 0xee512c975e35cedc82c7d7ac,\n            limb2: 0xda37b3d1093cef0103927f42,\n            limb3: 0x59bf82d1ceccaf2aace94c,\n        },\n        r0a1: u384 {\n            limb0: 0x940fedecedd43793654043ca,\n            limb1: 0xe942254619040c18fec28670,\n            limb2: 0x1a38d414bae72d7c18228ee4,\n            limb3: 0x5a0cae960c221324c382272,\n        },\n        r1a0: u384 {\n            limb0: 0x5243bdae31b236a6db41a014,\n            limb1: 0x446200b5b60cf3a1f7ddecd0,\n            limb2: 0x8199c68b061ab197ff4f291e,\n            limb3: 0x132024182ad8ed489493e7c1,\n        },\n        r1a1: u384 {\n            limb0: 0x75b6b4b39dfd6310bbe2bbfe,\n            limb1: 0xc24329c463cf2dce4a0f2b1e,\n            limb2: 0x6351f8b4dd6b98d8dd08571f,\n            limb3: 0xb7e166947856100686caba7,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x272c89200c794cd147e788e0,\n            limb1: 0x9fb565bb136cbb8045af5f87,\n            limb2: 0x2069950ae2ba4f18fba1f9fc,\n            limb3: 0x177b5c95ff2830d6599abe46,\n        },\n        r0a1: u384 {\n            limb0: 0xe5c6a8868f65fdb92938a0df,\n            limb1: 0xaf9e901c048eba76cc3ff87e,\n            limb2: 0xbb4bca9f829983ebcf7b0bf7,\n            limb3: 0x10225e60b74938217982949d,\n        },\n        r1a0: u384 {\n            limb0: 0x59223b55e73462497ab88909,\n            limb1: 0xbf85c496ae8b9fda76002199,\n            limb2: 0x62a031731b66c76791e92203,\n            limb3: 0x171879670265e69690032708,\n        },\n        r1a1: u384 {\n            limb0: 0x8cf19356fa7fde4256452335,\n            limb1: 0x1b1278bec957e29ee831ae02,\n            limb2: 0x5502af18627227d6b332cbc4,\n            limb3: 0xcdc76b668164420b81016aa,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x98b10da09c71a6b94aad296e,\n            limb1: 0x97a8da4b49e9fc2146de78cb,\n            limb2: 0xa2100c253b27bc556c580b05,\n            limb3: 0xe1e69f673f88fb5aa0bc47c,\n        },\n        r0a1: u384 {\n            limb0: 0xeece167c5aa9aedda2c67b05,\n            limb1: 0x91ffc99bde37b51ebb425d99,\n            limb2: 0x6586a39a7d8e9fd43508c82c,\n            limb3: 0x199a9fb2588fc41c2870dc15,\n        },\n        r1a0: u384 {\n            limb0: 0x69e49f06891dba8debf248eb,\n            limb1: 0x6ed2813541abd5529f4e3c13,\n            limb2: 0x38db1dcc2959a7e5e9a38356,\n            limb3: 0xe38a613edc814d28ff5c13b,\n        },\n        r1a1: u384 {\n            limb0: 0x82a33409cbff8d789eed7d49,\n            limb1: 0x25e41243c614be1b6527905,\n            limb2: 0x9440ecdaa3e3636a114ebf8,\n            limb3: 0x188e41337ca6ebcbb51cfbaa,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x4fea2f2144c44633b936b99,\n            limb1: 0xdfbe01d451c34a28a5d884ba,\n            limb2: 0x6356b21e2e72b3a569637b53,\n            limb3: 0x17535b31f03f5fa8ce0bbf9e,\n        },\n        r0a1: u384 {\n            limb0: 0xe0571a3149f69dca26a5436c,\n            limb1: 0x403d0b7768cb8d00af7bcf12,\n            limb2: 0x42f0dfba12b6b3254ec517f,\n            limb3: 0x19795ebfcb47ee3183979c02,\n        },\n        r1a0: u384 {\n            limb0: 0xf21e9a787a07fbeb68fdd736,\n            limb1: 0xc934d940ba208f191ab26d3c,\n            limb2: 0xaefc28a158eeec24acadaf8b,\n            limb3: 0x14403ea146584a7812452cd8,\n        },\n        r1a1: u384 {\n            limb0: 0xf2af0115631f55c3a44a5f54,\n            limb1: 0xf9411911e95c09167f70d836,\n            limb2: 0xd44bc506063a460a978a380e,\n            limb3: 0x180d8392357243d607d78851,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9fdd8b5b697f5dd293e1a76b,\n            limb1: 0xa96d6505267352e6f704935c,\n            limb2: 0xe30162de2b8b9f5fba1bd4bb,\n            limb3: 0x8e28439fb40933f21df4125,\n        },\n        r0a1: u384 {\n            limb0: 0x9f09979d8fc693b5ed13014f,\n            limb1: 0xff6e48f2f458df94eec90781,\n            limb2: 0x19298b6ba3353dca1030a0ca,\n            limb3: 0x1516a205be895cc94ddf856f,\n        },\n        r1a0: u384 {\n            limb0: 0xc4059e6b093b22c8e1bde28,\n            limb1: 0xb7225ce7a598e40389484960,\n            limb2: 0x9681cc18d063610fa821bc03,\n            limb3: 0xb32e29276eeb86d761513e7,\n        },\n        r1a1: u384 {\n            limb0: 0xabf2383d22bb76c149aa2ad7,\n            limb1: 0xab677034d9b95445962984ac,\n            limb2: 0x844d69ca653908adca99d46,\n            limb3: 0x1561b679e85c3aab327e6b35,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xc6b6d49d468231b1e43957ee,\n            limb1: 0xb2dd14e7a0ef4f763a11ba9e,\n            limb2: 0x607166185e56a158247fb57e,\n            limb3: 0xdaca26b0975b9b16f9dd8e0,\n        },\n        r0a1: u384 {\n            limb0: 0x755e376bde1d6457dc11a98c,\n            limb1: 0x461e42cfd40b3b4f720f2d6d,\n            limb2: 0xcb98f9df907653951d3552e5,\n            limb3: 0x1622b7062c0ff1f549f2056c,\n        },\n        r1a0: u384 {\n            limb0: 0xddd74d89af8507950ad474c3,\n            limb1: 0xa0d1d6eab751a63a4741aa67,\n            limb2: 0x809864aa0756c0345ad8f95b,\n            limb3: 0x19ad2fb756ef19d153debbc3,\n        },\n        r1a1: u384 {\n            limb0: 0xe4c04b7d418da7dc521db68c,\n            limb1: 0xd68db67480f415c5c1f1540,\n            limb2: 0xcc6c3f3571230f97af5fae46,\n            limb3: 0x6a3947541daa68ecc643fb2,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xadafaa267f908d69386af731,\n            limb1: 0xde5cd6d7f9c76ebfd7ed1503,\n            limb2: 0xb90709cac4c5e37885268f57,\n            limb3: 0x44c7cae9f5809069081870a,\n        },\n        r0a1: u384 {\n            limb0: 0x8e2baef46b7310052faa7b62,\n            limb1: 0x1d5ecd4dccacb207952f4c3d,\n            limb2: 0x1c4abff0daf903bac4bea1e9,\n            limb3: 0xe17badea1b419cb261ca9c9,\n        },\n        r1a0: u384 {\n            limb0: 0xaa232a7c023966b88ef26311,\n            limb1: 0x159b7596772d43113ef71fab,\n            limb2: 0xb113647f7765b991d9915c2a,\n            limb3: 0x17e99f889166a2f7932cf383,\n        },\n        r1a1: u384 {\n            limb0: 0x6f0711a2f3f758f1c7529ebc,\n            limb1: 0x1af6895cfc3465f18ba190ce,\n            limb2: 0xcf03b4526ccac420123fd885,\n            limb3: 0x16c791f98c5064fad5d87d11,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x95bc3acd1dbcd08d20f99a9a,\n            limb1: 0x5e451756a929b6144bc485ba,\n            limb2: 0xae9c055718137232e71b8e7f,\n            limb3: 0x1577307f04a2a6802d0de028,\n        },\n        r0a1: u384 {\n            limb0: 0x5c8f20f421b04157a09f04c6,\n            limb1: 0x210aa23e578f87e9bbd50108,\n            limb2: 0xfa44a24dba5f661ffe0372c6,\n            limb3: 0xde501b7b4a7c497dbae0723,\n        },\n        r1a0: u384 {\n            limb0: 0x73ed700382051ae7b1db6bb6,\n            limb1: 0xc50ddff17b0556bd5621aa3c,\n            limb2: 0x122d0c116f51709bdba0a8fe,\n            limb3: 0x138c7cb7c73ceb6fd3b24232,\n        },\n        r1a1: u384 {\n            limb0: 0x8cec31b5c5ea717895857b08,\n            limb1: 0x7b5be6faf88ac2fb624b9489,\n            limb2: 0x4cde2e36d0606a524b9afcac,\n            limb3: 0xfb04201af23031e937f87da,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x7eef546a9a54ed933283dc32,\n            limb1: 0x2f958ff1bd33ae205359ba45,\n            limb2: 0x4beda973ca3e41934d0945d1,\n            limb3: 0x16c93c9ac9718722abaea94f,\n        },\n        r0a1: u384 {\n            limb0: 0x10b28f7ddeb274f228c31e62,\n            limb1: 0x6223c0a397b6165eab1d4795,\n            limb2: 0xde245ad6269a80313be23b84,\n            limb3: 0x14dad34f376675fa17159b1e,\n        },\n        r1a0: u384 {\n            limb0: 0x17c7c88c61161d6435c5daa5,\n            limb1: 0xd0aac2f4bc18707213a80c1e,\n            limb2: 0x492ae4a8c44b4a1791fecf07,\n            limb3: 0x9fde416d1ce1461b898b530,\n        },\n        r1a1: u384 {\n            limb0: 0x5924e09aaff024aad86c2bb3,\n            limb1: 0x45f116cb413b940c0c8ad68a,\n            limb2: 0x3023488276dfbc1577893256,\n            limb3: 0xebcd32018261bf6cee2aa4e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1f72ae56a82c6deeffd5e12d,\n            limb1: 0x42a8fe11f639f0f4769ca2de,\n            limb2: 0xa839e74b5db0d4d96a9c09d2,\n            limb3: 0x21bb0fe1fde89edd58facdd,\n        },\n        r0a1: u384 {\n            limb0: 0x9a65ebb34b3cc95b6448d811,\n            limb1: 0xa91267c18e68b973b7c7b595,\n            limb2: 0x92ae1415b493a4822fce651c,\n            limb3: 0x5a83f6968dee7ca53037a22,\n        },\n        r1a0: u384 {\n            limb0: 0xae4501a657e9e2aa7fb385ce,\n            limb1: 0xdff063e0d0c3db964661e8d2,\n            limb2: 0xd96450190095ea74c7c47860,\n            limb3: 0x18c0ee838f14d716aef67921,\n        },\n        r1a1: u384 {\n            limb0: 0xcc6fd08a5c7a625108edde7e,\n            limb1: 0x4877444b75cfadc89c7cc80d,\n            limb2: 0x78df79f08842728a8dfe9eef,\n            limb3: 0x179219c982b34ce20d260115,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x29ad362978e21398eebf795f,\n            limb1: 0x51fe78412ed406b6e706ff2b,\n            limb2: 0x5397ad462a025210bb36aa2f,\n            limb3: 0xfe9afdf4aef4daac591fa2b,\n        },\n        r0a1: u384 {\n            limb0: 0x516c76de17f0d6ea63f796b,\n            limb1: 0xda055a6f42a65b6645b58a87,\n            limb2: 0xfca5488873cbdeb4c734ba27,\n            limb3: 0x114d159710178f068e890c2c,\n        },\n        r1a0: u384 {\n            limb0: 0xb7d1c81e239246bc39e20d97,\n            limb1: 0x1ab04e9938568f66fd85eb85,\n            limb2: 0xf6d44deb3d0a82fd50819060,\n            limb3: 0x104438b881ec394d9fd92cab,\n        },\n        r1a1: u384 {\n            limb0: 0x80b68cc97de83bd32e36ddd4,\n            limb1: 0xd5f6fa44b2df0779aa536193,\n            limb2: 0xaf629ece4defcbce85510ab6,\n            limb3: 0x84b0d66102fdc2869a09a84,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xea8a49cc987d661291e12693,\n            limb1: 0x59b450127a0d913626c58776,\n            limb2: 0xe7f24df1ca086010b7d01105,\n            limb3: 0x867e8ea5e54d79ae2a6d00b,\n        },\n        r0a1: u384 {\n            limb0: 0xfd112f0bcf025150b41a701a,\n            limb1: 0xbce62d6eb125fc95d7038ee6,\n            limb2: 0x7db90f26f2784e7a8424f024,\n            limb3: 0x1397bf8e16134755bf1d3968,\n        },\n        r1a0: u384 {\n            limb0: 0x36038d3443ab41bd2af0e3b5,\n            limb1: 0xba741669e71f7b571586f409,\n            limb2: 0x4140f0716ba60a7d7a477004,\n            limb3: 0x16dbd6d7aea80193167b878,\n        },\n        r1a1: u384 {\n            limb0: 0xc8dd57a935f217809eee1de0,\n            limb1: 0x937aadaa4a4760805e491936,\n            limb2: 0x24c3e76750bb6ac77ca7e209,\n            limb3: 0x30777905eb690b8538c4ac7,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x902aac58eb96caaff71b582f,\n            limb1: 0xf52a4771f65469ba56bc0662,\n            limb2: 0x5895a8890090eab8c1f7b798,\n            limb3: 0x8a229ff1c75c7a484fd234,\n        },\n        r0a1: u384 {\n            limb0: 0xfa7ef9a4ab063b7afbf4d128,\n            limb1: 0x9fb547747056804a9fa54cfc,\n            limb2: 0xc5aac2c5077de8b2bd37f33f,\n            limb3: 0x18d0fc99a4822e514913d06e,\n        },\n        r1a0: u384 {\n            limb0: 0x2762d0d600884766a5a5a464,\n            limb1: 0x637c81f8258dc8da3a25faa2,\n            limb2: 0x9a70667726b3d5fad2f61ddd,\n            limb3: 0x1632e5528689601952f5c248,\n        },\n        r1a1: u384 {\n            limb0: 0x41172f827c65f28e7f13f0c5,\n            limb1: 0xc768ca9c3948f7835a9850df,\n            limb2: 0x92f4cc677df919cda4ed58e8,\n            limb3: 0x845e207a60af0762fda45c4,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xbd18c8928d23dd0e0f2161e0,\n            limb1: 0x4e33b40902738785b26b6e74,\n            limb2: 0xb623fecc05d23249eb4047dc,\n            limb3: 0x3ff9af12486b7bd8d629796,\n        },\n        r0a1: u384 {\n            limb0: 0xd0365626609ed6bec907d385,\n            limb1: 0x98b32fc6ce83cc620c19bd88,\n            limb2: 0x2c5c79d2c6332d65dab98ac9,\n            limb3: 0x51da1c5a7d8e3a9787b652c,\n        },\n        r1a0: u384 {\n            limb0: 0x5f028cc4f94dd08ee4a357de,\n            limb1: 0x4f345e1d7451ef79a178e4fe,\n            limb2: 0x2ca907f6249e45a43f481b5b,\n            limb3: 0xc8244f7e7b0499edd3368be,\n        },\n        r1a1: u384 {\n            limb0: 0xbff4a6495199c8b9599d7ab7,\n            limb1: 0x2ac3014911235d9c51ffeea0,\n            limb2: 0xfbddc867354278e4e8830de6,\n            limb3: 0x121714d1f2e092c7c5104773,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa6cc97b7a0910742e374ec23,\n            limb1: 0x5301b521491e28115a8e2e0c,\n            limb2: 0x5eeff0173fc99d045f5e5baf,\n            limb3: 0x9aa791c4ecab1333ab9eb68,\n        },\n        r0a1: u384 {\n            limb0: 0x2b53e7d481a30cc5c1356af6,\n            limb1: 0xa777d9d25aeedc6628e59ef,\n            limb2: 0xca9abd9ce059277e05864570,\n            limb3: 0x178341ebb6ad736c0c8c8c1,\n        },\n        r1a0: u384 {\n            limb0: 0x493ad16ef3443414c2db3cf1,\n            limb1: 0xa69a0458d57d548043b98070,\n            limb2: 0x54556de9501fab02db7f5670,\n            limb3: 0x6567dbc2c7bbfa7c52b6572,\n        },\n        r1a1: u384 {\n            limb0: 0x8dac714d502b1c67d8af7a3d,\n            limb1: 0xf8aaedb3552ea20245b3a60a,\n            limb2: 0x1ff0389d849cc39852c42cca,\n            limb3: 0x1047890716eba58cb7b620ec,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x62089c2d7ed144e434b6ba3e,\n            limb1: 0x84b118ee4fd2d64ddca1dac0,\n            limb2: 0x4ec4f1cf523c4ce8b58f70df,\n            limb3: 0x53bbf9cfe4e8ff379ea2186,\n        },\n        r0a1: u384 {\n            limb0: 0xf057ecd0e195b9bdc80eb0af,\n            limb1: 0x780a1465194b6e1eba5abbbb,\n            limb2: 0x78ee79159a58965d1df84893,\n            limb3: 0x19d2a085636fabbb4f34cf2c,\n        },\n        r1a0: u384 {\n            limb0: 0x53bbfc51a06f387be3a3af04,\n            limb1: 0x3d1a72124a1db427822d3c7a,\n            limb2: 0x569b9d8cfb866f877c80fa49,\n            limb3: 0x1a4182a17dd9e73c7c53e2a,\n        },\n        r1a1: u384 {\n            limb0: 0x14fcbb338803b8fa47981366,\n            limb1: 0xb291b4889847590e43766734,\n            limb2: 0xc530cb073dc91c0e32ff33f,\n            limb3: 0xfdfbe7ecce4161a97db358a,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1ea761bed489d2e31522504b,\n            limb1: 0xcd1ca1a1223df0206ae0add2,\n            limb2: 0xaf38be32d1a2709bd4ac44fb,\n            limb3: 0x47834fc51a88de93531b9e4,\n        },\n        r0a1: u384 {\n            limb0: 0x9e440c1d6d856e7a6720316,\n            limb1: 0x9a5d7d5c3c7e8587d4b942c6,\n            limb2: 0xc351ea2e7f4c67106109076b,\n            limb3: 0x9065d13cc71103c6d57aa42,\n        },\n        r1a0: u384 {\n            limb0: 0x28c6b55678da94c56a6dece4,\n            limb1: 0xb17ca771ad0162f5f5b48ec7,\n            limb2: 0xd80695da0e398b5fcafd78ca,\n            limb3: 0x37d0e245a24e013b08ff5a1,\n        },\n        r1a1: u384 {\n            limb0: 0x27a8692228777c9cc1d5b2a4,\n            limb1: 0xb9d28ac20ccc9ea55bef7dcf,\n            limb2: 0xd8500eae05a3dee5c9a15c7a,\n            limb3: 0x613266a37ecd23f4cd13600,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x4763fa5ed823135887ccad53,\n            limb1: 0xa72b8af90608ac76465daf3e,\n            limb2: 0x26c8021436ce4e7c3dc2aa20,\n            limb3: 0x78b1a8ddbcd83cf99e263e,\n        },\n        r0a1: u384 {\n            limb0: 0x7d3c32317a31685cfb3fb480,\n            limb1: 0x888167b668356255ef02a522,\n            limb2: 0x1d64fda1200658f6a768b519,\n            limb3: 0xfae2c6af3287eed69729472,\n        },\n        r1a0: u384 {\n            limb0: 0x1d50b4a53487ce9e33837523,\n            limb1: 0xab36376a39c01aa0bef902ae,\n            limb2: 0xd8c90bd7ba560e674a8b2b1b,\n            limb3: 0x18d5a3016ae6c6d5297778c8,\n        },\n        r1a1: u384 {\n            limb0: 0xed7b19829e38ebed49ae2b44,\n            limb1: 0x832839564a48e64c2c12b2b9,\n            limb2: 0xc8fa7ef5ecb2e531a2e57171,\n            limb3: 0xf4a1e3eeacc2e423bace47f,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x580b8cc14b716134c2410b38,\n            limb1: 0x10eb555a6e55e5d519da0d69,\n            limb2: 0xe6e6910d0d4b80539f2711b6,\n            limb3: 0x47e19418f8c84da6011a6e6,\n        },\n        r0a1: u384 {\n            limb0: 0xa7613cbb9a679564298d9bae,\n            limb1: 0xb4900e0c9f280703f5f8ea54,\n            limb2: 0x1e08087fc2448bb3da053fc3,\n            limb3: 0x7c31e87bc79d00e9d696b9d,\n        },\n        r1a0: u384 {\n            limb0: 0x98e919832044c40fac742092,\n            limb1: 0x18bfae31c275cd18fe4a4ea,\n            limb2: 0xdc9125e5ee77ab53aa5fe810,\n            limb3: 0xcc698e873e9ca14fbcff1c8,\n        },\n        r1a1: u384 {\n            limb0: 0x50e908c95ab9d2feb4dcb224,\n            limb1: 0x4cfe3ce2d54166b89c4f6d8b,\n            limb2: 0xd83d839665b22b27b714b166,\n            limb3: 0x16f25abdf39f32a98af41af6,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x28d123bd987516edde7b9220,\n            limb1: 0xd8e4e7ea988137932087a426,\n            limb2: 0xc7f4cd3fd9a8199e129ea3cd,\n            limb3: 0x3900d505d0369cd906b0458,\n        },\n        r0a1: u384 {\n            limb0: 0x847f555fd20ab0d4b1db5335,\n            limb1: 0x6d65d431aa3b878774d6583e,\n            limb2: 0xca390d2b5120becbe4beb8b2,\n            limb3: 0x11d3a19b84deaab4cc0e6882,\n        },\n        r1a0: u384 {\n            limb0: 0x9637fa3606d4f84648ecc548,\n            limb1: 0xce153c564c7d59efae1a1dde,\n            limb2: 0xfc93d2bb65e106476e20da9c,\n            limb3: 0x2e22460d6878c49bd53a592,\n        },\n        r1a1: u384 {\n            limb0: 0x51b01e1ab106d9b94c81ba1e,\n            limb1: 0xbe3d4cec2c136b22814c1e82,\n            limb2: 0x7bb554d64c3153a281cca9bb,\n            limb3: 0xc96ae7112c4fcbbec9b8aa3,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x21718b60fc473e716eafc85b,\n            limb1: 0x9d795b3e5f132e6b28bd1420,\n            limb2: 0x230c617a1f1939de5e14916e,\n            limb3: 0xd6e5a17494eef0f6f5292a9,\n        },\n        r0a1: u384 {\n            limb0: 0x4df092ad3168aa7309a0f840,\n            limb1: 0x3684716b180e99dba33d814b,\n            limb2: 0x8da65bf6335ef5d5334bbcc,\n            limb3: 0x32e9c79961176987a08344a,\n        },\n        r1a0: u384 {\n            limb0: 0xc1fbf2667c5fa7319ce4a16,\n            limb1: 0x68f6714721cc5ca5b7c73ef1,\n            limb2: 0x83d080569297130b048d4121,\n            limb3: 0x17bc92b9041c97dfaec6b1ab,\n        },\n        r1a1: u384 {\n            limb0: 0xa79cd7182a1acb1e6f50dc5a,\n            limb1: 0x2c6556f9e127fbcc317c835d,\n            limb2: 0x7999e470d6e66d61ef6794ec,\n            limb3: 0xb0d35668e07a3c21ece5b1f,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5dfbb6733b7bae2cd8fe7e68,\n            limb1: 0xfad07703ac888a36a918449b,\n            limb2: 0xb0dfe86a8eda68e069b4b18d,\n            limb3: 0xff9d3280ea0ae2bc1a16bf9,\n        },\n        r0a1: u384 {\n            limb0: 0xec78a036f504facd8058f68c,\n            limb1: 0x5c39ce33984b5049e40e9d8c,\n            limb2: 0xfad50ec5061cb2bbf69e1963,\n            limb3: 0x13cb0a312ba23fd491df96fc,\n        },\n        r1a0: u384 {\n            limb0: 0xc3a4702619055f4a569d9968,\n            limb1: 0xfeda6a11638cea2a1c5e2281,\n            limb2: 0xb75b2fb16398aa452ee48bad,\n            limb3: 0x122a32b337cdbebc26e83cc6,\n        },\n        r1a1: u384 {\n            limb0: 0xce433a5223f7bb71a1ca8add,\n            limb1: 0x32b85c9ddd3cb79997c8ba1f,\n            limb2: 0xfceca1b93cebc0e4f5a9bb4f,\n            limb3: 0x415d57acc7c6067dcab343e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb9dbae6102d4e69d8f0c607b,\n            limb1: 0xfb3291d8083f2064c1847106,\n            limb2: 0xe12abb8d6ae364d5e548d2d8,\n            limb3: 0xd13fb257c65b60b84d69dd3,\n        },\n        r0a1: u384 {\n            limb0: 0x262a76b1f70400d242b037af,\n            limb1: 0xf5ec7855301fada6c7376aff,\n            limb2: 0xdfb032dbd72e3b0f13215bae,\n            limb3: 0x355cd1872bb9b6ceb0d26e7,\n        },\n        r1a0: u384 {\n            limb0: 0x83e87b560159e417f772dd81,\n            limb1: 0xcc5d152eb1acc8f395b2fbf0,\n            limb2: 0x70f54dbac520fb59a3c0a3f8,\n            limb3: 0x52ea47561eb3650d1ea0c83,\n        },\n        r1a1: u384 {\n            limb0: 0x38ba107df12dd0465e65a380,\n            limb1: 0x73379dc19d2c9b110da0ef60,\n            limb2: 0xdb2efde4cecd2207393ff551,\n            limb3: 0x80cad1bed6ccfd10035d560,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x82a3fc3c6acfa43dacc5385d,\n            limb1: 0x74a6dea3d3d82cb2e7d0809d,\n            limb2: 0xb13b36c9a8887107d9bcbc22,\n            limb3: 0x12bf4764dd43d68b4ee7c590,\n        },\n        r0a1: u384 {\n            limb0: 0xa3289d5e4c4585384473a183,\n            limb1: 0xe694ef0ceb4b6ce3bab92679,\n            limb2: 0xc99ffcf812e3dfbd6a52420,\n            limb3: 0x2a77fad7fdc79c5bb072153,\n        },\n        r1a0: u384 {\n            limb0: 0xa0db2fa814dd299768ed728c,\n            limb1: 0xab435115dbe57ffc64c8bd1a,\n            limb2: 0x1525c2e63ea09f54ec46655d,\n            limb3: 0x4b8b5e2ff10023fd75652f,\n        },\n        r1a1: u384 {\n            limb0: 0xf7ba29be02b325489270749d,\n            limb1: 0x323633723ff44396f6db5174,\n            limb2: 0x5e59d6926ba24f7667e3255c,\n            limb3: 0xbc49cf59ec0c71f768d3fde,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x55806a498c4bf79112692a77,\n            limb1: 0xb0e3ca4633d3674fbee6150f,\n            limb2: 0x5f74060f8312ce5e6e7ae2e3,\n            limb3: 0x627a1c0c6d61932ada0e832,\n        },\n        r0a1: u384 {\n            limb0: 0xf13ce1d6c89f358448ae8fa9,\n            limb1: 0x2bc57ecfdb09522cc85b0ae4,\n            limb2: 0xfca1f39d0523bbe5c335ee04,\n            limb3: 0x100b085007be1ca2b9f6e8de,\n        },\n        r1a0: u384 {\n            limb0: 0x84a70d5b9caa99650569ad71,\n            limb1: 0x87c6e59e8af90623339f1f3b,\n            limb2: 0xaef7d53bb0b7d5984da19099,\n            limb3: 0xa2289949724906f1ad55b14,\n        },\n        r1a1: u384 {\n            limb0: 0xf531a6fdd1f0b3b5f8f8e9db,\n            limb1: 0xf34d77973a1456adfb71697e,\n            limb2: 0xdb9f5ebde3d8380fabf4162f,\n            limb3: 0x130da579ba0316f92d4eb58,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x51c2086725a295f5da826c,\n            limb1: 0x8e8e5baa4016b523e380ac92,\n            limb2: 0xf8f0a4861e231c3b5075023,\n            limb3: 0x140928f32cb86c6f5c226b84,\n        },\n        r0a1: u384 {\n            limb0: 0xf0d141ad0b7bc44ef62633e8,\n            limb1: 0x2b6a68f294133ffde01b3622,\n            limb2: 0x13b274b21d5c5cba67cba1aa,\n            limb3: 0xeea5a9094bf616f734320ea,\n        },\n        r1a0: u384 {\n            limb0: 0xdf51feeca93575d2e24d49bc,\n            limb1: 0x90e0b5a293fdf422b3c448b1,\n            limb2: 0x360839c7ef270b0c5af4a6f0,\n            limb3: 0x5608d87f36ff132d9a254eb,\n        },\n        r1a1: u384 {\n            limb0: 0x3c26d23f25273548bb7fc3c8,\n            limb1: 0xd42908133adad40dbd5ef506,\n            limb2: 0x316d03c0197cf510485c062f,\n            limb3: 0xb23fbbe4632f9ee97df9c93,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x41d73bb66d7139e3b2883865,\n            limb1: 0xef3de396b8ebd92887d6ccc0,\n            limb2: 0x6be980b72b3858425dcce9df,\n            limb3: 0x45121179d8e49e1dd61f734,\n        },\n        r0a1: u384 {\n            limb0: 0x23508094efe1db2e43b826be,\n            limb1: 0x290222e73653ec8ec2d5bf,\n            limb2: 0xa8309daa11b6981ed784a3ac,\n            limb3: 0x17056c5dd749562ffb9477aa,\n        },\n        r1a0: u384 {\n            limb0: 0xe16c9dcf214392cd7a09676b,\n            limb1: 0x741b68da9729956259db5e80,\n            limb2: 0x7307e417e88bef6b7886098a,\n            limb3: 0x16fcf0d17700b504f863c6fb,\n        },\n        r1a1: u384 {\n            limb0: 0x99b0a3f78a184f700178b139,\n            limb1: 0x4d6e3662d7810b3f1054bd01,\n            limb2: 0x29fe9f13eeb06558d12ceb2f,\n            limb3: 0x16aba426597166960c6725bd,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8208b44ee53a9fc7eb288388,\n            limb1: 0x3456d09962a3dda5865a27a8,\n            limb2: 0xe1f3e4e3ed8ef8435cfe3ae,\n            limb3: 0x10a37b4e7c8061faaa5c01a6,\n        },\n        r0a1: u384 {\n            limb0: 0xf9d6db9a5ac46771b19e3ac9,\n            limb1: 0x42c10987c49132e9a8ab8d39,\n            limb2: 0xd7ad0c0bdd201b0be5e93e0c,\n            limb3: 0x408dae3a4926d4a4ea397a9,\n        },\n        r1a0: u384 {\n            limb0: 0x653665fed5d98ea9f33e0757,\n            limb1: 0xacfa712330085cde3f722ed4,\n            limb2: 0xbe1fcfda554eb87530bf6559,\n            limb3: 0x5462519ce1e048fbcbb22a4,\n        },\n        r1a1: u384 {\n            limb0: 0xc6e9de72771ebb73bc382c9c,\n            limb1: 0x2b29a88d36211b1579147a2f,\n            limb2: 0xabbad720f32d8b7ef4e5b528,\n            limb3: 0xf16180bf4a1de636ac8ced8,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xbd00656c6a03e40e7a1c96d,\n            limb1: 0xc6ec405888aa450fb0aa26e1,\n            limb2: 0x169143ae2bf37f999e5709e8,\n            limb3: 0xd989153870f4c8ffbb5af7b,\n        },\n        r0a1: u384 {\n            limb0: 0x40bd6d526b0e08d58fa66010,\n            limb1: 0x127a3c8ea6b5b2cc9f4dd258,\n            limb2: 0x246398565166fcf21abdc99c,\n            limb3: 0x1139b4d60c70c41df89895d0,\n        },\n        r1a0: u384 {\n            limb0: 0x1e0803443a2e501406221316,\n            limb1: 0xd4ab19eaa32e432f1b5675e9,\n            limb2: 0x550a6da9fb9787a1e690aa43,\n            limb3: 0x38d29d1f1993b9d9e60f603,\n        },\n        r1a1: u384 {\n            limb0: 0x12c57cbf483c651473b1d989,\n            limb1: 0xc895e14b9897f216e4d9f22b,\n            limb2: 0xd7f570fe66cf3f673abc03c1,\n            limb3: 0x18d84210d9b793e6acd217b4,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8a4878d8e2e133986b8ae1c2,\n            limb1: 0xb9ede196be35fc25ca8764bd,\n            limb2: 0x8926fe5d6d93f96dcd45bff6,\n            limb3: 0xa9af73cd8f02d67fbac7c31,\n        },\n        r0a1: u384 {\n            limb0: 0xb4ac60395435ab8c101d3f66,\n            limb1: 0x51b5668e81d774a523536aea,\n            limb2: 0xaf6c3902dfe7d93c5cd7e0d4,\n            limb3: 0x7de5b12d21d9cfd4b8f1bd6,\n        },\n        r1a0: u384 {\n            limb0: 0xdbbd341b7617d7da02f767cb,\n            limb1: 0x390a6cdb0247c8b696f54818,\n            limb2: 0xc5c4d82d35c4a86900b9c108,\n            limb3: 0xcedcdacd1e4bfd4b3ec453d,\n        },\n        r1a1: u384 {\n            limb0: 0x2e1da9fa7b1e27c2eb90c1db,\n            limb1: 0x1bd463826b9fd44f9af5c53c,\n            limb2: 0x2d55689e4b07965f4b24f4aa,\n            limb3: 0xaf0b738c4875f563f27ca2f,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x982c093dd6a1f08c9f98f549,\n            limb1: 0x206794a8b198598b7ce4fa9,\n            limb2: 0xc888c728be45b57e38fb3778,\n            limb3: 0x74283fe50724556c49ef237,\n        },\n        r0a1: u384 {\n            limb0: 0x96bc29f2bcc0f815c55c409e,\n            limb1: 0xe48119617a07eb33ab893613,\n            limb2: 0x908d162dc06fc4a17d248864,\n            limb3: 0x1aaf38bbd8891856272de1d,\n        },\n        r1a0: u384 {\n            limb0: 0x858ef2dbf3b0abd9ee6b0dfa,\n            limb1: 0x9b84aea4dc77001de4491c8b,\n            limb2: 0x2fee669cbecc806510e5321,\n            limb3: 0xc2698ef04170dd90fe9040b,\n        },\n        r1a1: u384 {\n            limb0: 0xf466f3e5f33a4d032ce1d26b,\n            limb1: 0xa2dbc37e685f47b642da17b0,\n            limb2: 0x4fe20a8b997927f5e3c81193,\n            limb3: 0x106497892fbc54848cf8dc2,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x20bd93c9da3e81a8eae945b3,\n            limb1: 0x828fee23af9ea75d0a85e148,\n            limb2: 0x4c1a1f1b862331fe27f8d9f4,\n            limb3: 0x63d0d46e0d13c2b4089bfa3,\n        },\n        r0a1: u384 {\n            limb0: 0x5ec6828def657a6b3620ccea,\n            limb1: 0x94ad61cdb2d72668197acef5,\n            limb2: 0x7baee501930b611a99e46a0c,\n            limb3: 0xddd9e2bdcf6001b73313233,\n        },\n        r1a0: u384 {\n            limb0: 0xf9278e7727717e399e585d1d,\n            limb1: 0xf9eabf0071885c7038169d31,\n            limb2: 0xd4503f9fa816f9111fbfeef9,\n            limb3: 0x6ccdcbce5dab18378c8e683,\n        },\n        r1a1: u384 {\n            limb0: 0xcc90a9d15f39ccd673782c6c,\n            limb1: 0x91a54145933733fa6a8282ef,\n            limb2: 0x77a1d8952789f3aab595cf2e,\n            limb3: 0x117809e3864b0f92e6bdfb88,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xcfacd8bafe80e34c80895ce2,\n            limb1: 0x405055a8e3556eec6fe19b33,\n            limb2: 0x215e510b0585c12c7aa4b9fc,\n            limb3: 0x166c8a8d92ddb160d84e3dc9,\n        },\n        r0a1: u384 {\n            limb0: 0xded38c78e1bdce8139c0c49c,\n            limb1: 0x880be26de982752e92c7f3b6,\n            limb2: 0x650ff5ae95115c46cf190034,\n            limb3: 0xd28c9264d7943b90541cde8,\n        },\n        r1a0: u384 {\n            limb0: 0xa9b4b12b59c157302b9c1e03,\n            limb1: 0xb3d4cbc18ebdbf27e7af3c16,\n            limb2: 0xe0f12acb3615cb9a62039090,\n            limb3: 0x1210b9dab7bac860f54963d7,\n        },\n        r1a1: u384 {\n            limb0: 0xa492048852bb2ceb97e408f5,\n            limb1: 0x77848eeb1c67a40c581a3235,\n            limb2: 0x8aa45235af23ebd968d454ab,\n            limb3: 0x144d609bbd40cb1a61799523,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xae465430a3b879fa609ed588,\n            limb1: 0x5b4441a8cc9f013eb815c1f4,\n            limb2: 0x110619006c872a26d93ba293,\n            limb3: 0xe1c6863a7e22b68f50a2e01,\n        },\n        r0a1: u384 {\n            limb0: 0xa14cd671deb3cecf066b68ff,\n            limb1: 0x146280483d10683e53e0af,\n            limb2: 0x3ead8592a7548acaf49128b4,\n            limb3: 0x91c35d9b0c4a0cbaa54de18,\n        },\n        r1a0: u384 {\n            limb0: 0x6f33a2c44245c7019c0c5c67,\n            limb1: 0x5efc92747f401ead3c8cfc2f,\n            limb2: 0x393adb0e0036514a75839cf,\n            limb3: 0x1382a3bc2c35391ea4888358,\n        },\n        r1a1: u384 {\n            limb0: 0x1163e633ef6eb65ff47fe5f6,\n            limb1: 0x43edbe5def5f4b8cb624def7,\n            limb2: 0xe3d7d6469d9ea3ebd107f34f,\n            limb3: 0x96ac6f3aea62de484fb9f5,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xeef462793df87830739b58e9,\n            limb1: 0xae7c8ea1ad71ca6bed2ebe00,\n            limb2: 0x9ae2164a137a064d1df7f02d,\n            limb3: 0x4a9888e14ac3625ff321114,\n        },\n        r0a1: u384 {\n            limb0: 0xc3c414c0d08ecbf15184e66b,\n            limb1: 0xdde9cfcbdd2e00b615eb8280,\n            limb2: 0x475a2c4bb26b585add37b2db,\n            limb3: 0x91ef361ba4f2ff51c967890,\n        },\n        r1a0: u384 {\n            limb0: 0xd82fd80a2061263e1fd01764,\n            limb1: 0xe1c1efac8d73b700b4f7624b,\n            limb2: 0x4b66141becce9ed674af6eb8,\n            limb3: 0x14fb9e8021f44b1eb120b9d9,\n        },\n        r1a1: u384 {\n            limb0: 0x4de7793b20d51e4f8fb8f053,\n            limb1: 0xd7f28ae911fa3e1b6c0e60e4,\n            limb2: 0x9d6970421cbe2f4d5c9c878,\n            limb3: 0x3b7adf46bf35aebc482e388,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x12f2b778d5fbab976bc57ada,\n            limb1: 0x76459b21736fbf46a8970d59,\n            limb2: 0xb94be6680c7126ca6efa8aac,\n            limb3: 0x837f3c1bf89ea556baa0f1e,\n        },\n        r0a1: u384 {\n            limb0: 0xe5a3489fc04cbff07982f68e,\n            limb1: 0xa191417243695b45f476d8bc,\n            limb2: 0xc51a4550afd0e726501933a6,\n            limb3: 0xf44ecd23806ed5e74169f54,\n        },\n        r1a0: u384 {\n            limb0: 0x6cd53a71fa2d57fc5af7daf,\n            limb1: 0x2b428bc9d14c4baec9df8d4d,\n            limb2: 0xc1cdc7f4f9547699b33a5d3f,\n            limb3: 0x132932753bb6ce9737dd24b1,\n        },\n        r1a1: u384 {\n            limb0: 0xdc3e579e2d3ef4c042f7356a,\n            limb1: 0xd176af6e739a4172c748084d,\n            limb2: 0xc2d99caaf0cee64b95b74caf,\n            limb3: 0x6c6e6c693605fab377449f9,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8453ae7d36f5618e254ad0d1,\n            limb1: 0x7e8d71e845958e9741385a13,\n            limb2: 0xad311639a622f093066fc3b6,\n            limb3: 0x83a861cfac3d33a177738ee,\n        },\n        r0a1: u384 {\n            limb0: 0x3ad1bdc48790c12209582975,\n            limb1: 0x8dfd29dcf52774c4f1845b52,\n            limb2: 0xa02ac71b2c0dea50d477db6,\n            limb3: 0x13a1c836ec6af306248cc909,\n        },\n        r1a0: u384 {\n            limb0: 0x14406ff512e0479dc3c8d,\n            limb1: 0x96cd90daabf66287008c71f,\n            limb2: 0xa60a0e779f3b9ee1551e2bd3,\n            limb3: 0x12f79805baffe96832e3a077,\n        },\n        r1a1: u384 {\n            limb0: 0x647d4e42f9f13a7c0d7a75cc,\n            limb1: 0x12effbcbf19df432e200c643,\n            limb2: 0x1d18afbec71b6348e0977ada,\n            limb3: 0x2a237cabc4f307c6bba9c62,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x4a4ebb65d008e49339423340,\n            limb1: 0xe8af68a1403ac4097334dda5,\n            limb2: 0x60b3a6cae1c54f8ae1bce576,\n            limb3: 0x13011c97e91f386caf2a2972,\n        },\n        r0a1: u384 {\n            limb0: 0x62af6c1bb245e69512982435,\n            limb1: 0xe06e1b68f65815af7672ef87,\n            limb2: 0x181bfb87298f6dd64c518b25,\n            limb3: 0xc2c69e7df650d02bdb2088b,\n        },\n        r1a0: u384 {\n            limb0: 0xf21d1538741e50e9a499ac73,\n            limb1: 0xacc6dd8bf4c874e1da1f0ae3,\n            limb2: 0xcacde4e1801b3c95b1705651,\n            limb3: 0x116971bf55359268362fb2c6,\n        },\n        r1a1: u384 {\n            limb0: 0x6da7f6a48d6e7831a983fefc,\n            limb1: 0x103b747a61ed06984ee35089,\n            limb2: 0x9fc5bf34c0740b9d08b104a3,\n            limb3: 0x9e4768acd9aadafabe1415,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8f61f5ba0fa958bb27b0738d,\n            limb1: 0xf241c01ee89f0223fae54588,\n            limb2: 0xda4e4767658a0ac3abbf2397,\n            limb3: 0x1469bf3b838495c457b871dd,\n        },\n        r0a1: u384 {\n            limb0: 0x6c26df5b82209295efa30f78,\n            limb1: 0xa6d88fe2c2c7eb127399a8f5,\n            limb2: 0x12a48d65bb7c320195ed2ba1,\n            limb3: 0x2607291048cb4d7c8e364b6,\n        },\n        r1a0: u384 {\n            limb0: 0x62d61af0924cf04ab435ef0a,\n            limb1: 0x411a7672635a9cb3f011dba9,\n            limb2: 0x311966492e36c204118b8d63,\n            limb3: 0x609e43c5745ab0721e69d08,\n        },\n        r1a1: u384 {\n            limb0: 0xca4ae7db7b1ef2f2a8338569,\n            limb1: 0x7d8cdadb9652eeff7e0353a4,\n            limb2: 0xc85f6a2486d9cea932ac87a5,\n            limb3: 0x18bd575791b49a042112020c,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x64282b3efaf71690d668de0e,\n            limb1: 0x8781d985cfc29d3e8099fff,\n            limb2: 0xb81331cc8b1997d037d2d7ec,\n            limb3: 0x12235a5ac7f1d2ab9ae5b9c5,\n        },\n        r0a1: u384 {\n            limb0: 0xa29416594a6408df6161b6fa,\n            limb1: 0x223f57279d16c8cceb28c803,\n            limb2: 0x20c74e1a6bb7c6387a749de9,\n            limb3: 0x118595f99d022878c5dfa242,\n        },\n        r1a0: u384 {\n            limb0: 0x4e37473da8164d9afb454170,\n            limb1: 0x374f98a1cd8e5cb81d5d1588,\n            limb2: 0xb1086185aa14c12e63aac04e,\n            limb3: 0x1838f9c2473fb4633451cc86,\n        },\n        r1a1: u384 {\n            limb0: 0xd5d6e5aa8ca10362522318e3,\n            limb1: 0x85d25f9b4b9506dc7a20bca9,\n            limb2: 0x9bca10d7d717b218a1128f10,\n            limb3: 0x145af4e6b53d5676e5a8bcc9,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf3c802dee19e24b92e7979fa,\n            limb1: 0x14da8c307396b2b3098cc029,\n            limb2: 0x81ec9801bc5a699e39b50971,\n            limb3: 0xfbdf2094dbd982c4366a295,\n        },\n        r0a1: u384 {\n            limb0: 0xeea5bd7fc66ac332eef61a9e,\n            limb1: 0x1b86742a4721e1ed6be9d082,\n            limb2: 0xfc5fd3946f0cb7a618e7e452,\n            limb3: 0x19be9789e6a4a595a557c8d5,\n        },\n        r1a0: u384 {\n            limb0: 0xd7e6895fbf700ae72769736a,\n            limb1: 0x416c1c33622a357d679d913c,\n            limb2: 0x35c8dd89e1eba641557b344b,\n            limb3: 0x677c5a38ff37fdb4605b0bf,\n        },\n        r1a1: u384 {\n            limb0: 0x59bc57df21c9065dee74fe4f,\n            limb1: 0xe251d5a312068328a96aee57,\n            limb2: 0x20bb5ca4b72b1ae1df0402aa,\n            limb3: 0xdb28c872b29f1111ff063b8,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x7266c55e323eb5f523137011,\n            limb1: 0x3fa2140fee350709e12cc602,\n            limb2: 0x2ca6caaba6c036ac2a015fe0,\n            limb3: 0xe6370e66a3639679d1ffaf1,\n        },\n        r0a1: u384 {\n            limb0: 0x673a512572f43dafc1fb3e60,\n            limb1: 0xf17d9c9e1f0151e37745e09c,\n            limb2: 0xb0231ba928984ff48f7c72ad,\n            limb3: 0x116bc15d70785ac8e3dbaafa,\n        },\n        r1a0: u384 {\n            limb0: 0x54599fa912c2c83137391fc4,\n            limb1: 0x3024f1a43f73ebb9f356f0c1,\n            limb2: 0x3b1b2662cc9d943f76848e62,\n            limb3: 0x129b0437839946397ba58144,\n        },\n        r1a1: u384 {\n            limb0: 0xf93d43a03e1c6787dcbd8285,\n            limb1: 0x124a2f604da1317e5610dac6,\n            limb2: 0x64f7cc1679a914abd36770df,\n            limb3: 0x10f2e7649f93b589d8d4acba,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf82b6df19a54e2cf1cf2a926,\n            limb1: 0x3f6e3866481525431265f2dd,\n            limb2: 0x345f14dcadaceb6bd10a7737,\n            limb3: 0xe39d5893debb54d49156924,\n        },\n        r0a1: u384 {\n            limb0: 0x45be1970d7ccbf809b2067d9,\n            limb1: 0x5960a9502e5dd19b2764e96f,\n            limb2: 0xb8c9075c1ab2fdacb6fc6965,\n            limb3: 0x78f512de963787677e431a4,\n        },\n        r1a0: u384 {\n            limb0: 0x486d90dee20ae276acefbad,\n            limb1: 0x804cd3f829f2603c900f701f,\n            limb2: 0xe97e5fe9e95da08ce6ad0c9e,\n            limb3: 0xefabe32ca67e113d82a9975,\n        },\n        r1a1: u384 {\n            limb0: 0x7b00323f1f5d9b1acde52435,\n            limb1: 0xbba8c1970d071fde53462819,\n            limb2: 0xaeb541c1bc202e4247d63d2b,\n            limb3: 0x54e8ff0cede4fcd4bf670a5,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x19deb207d5ed377cf6e1fc34,\n            limb1: 0xa450925cc66369d7ac242254,\n            limb2: 0x1c3bdc1e64a941a34fc053cc,\n            limb3: 0x14df45de9151dfb3e06995fb,\n        },\n        r0a1: u384 {\n            limb0: 0xd1cb0605f648519c51a2896e,\n            limb1: 0xfd5a32cb5433d9d638ce5f44,\n            limb2: 0x22b95ccf2f9f474991447155,\n            limb3: 0x1b6a551862dd5d0d0e23eea,\n        },\n        r1a0: u384 {\n            limb0: 0x29a5f4f5636af654cf00c5e4,\n            limb1: 0xd06d14134a0604b5670c8754,\n            limb2: 0x4f9397231527c3bf676603a8,\n            limb3: 0x725540566667205b8e18667,\n        },\n        r1a1: u384 {\n            limb0: 0x4027b710692c5e378612279d,\n            limb1: 0xde69c4a076f5a6558d86111,\n            limb2: 0x3d32f4dcf1e86bbf40210871,\n            limb3: 0x160b4757d533ef30f2094173,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x391dda06f57de49c19a39355,\n            limb1: 0x4e737dfa7ab368808331a160,\n            limb2: 0x4861c22221cf946a7bd7ce3f,\n            limb3: 0xbf98d2b99fcb852dee131ab,\n        },\n        r0a1: u384 {\n            limb0: 0xa908feaefe8603bc57fed5ec,\n            limb1: 0x24ccd521287d21f70525b3f3,\n            limb2: 0xb0c14b45ee675a30a02b03ae,\n            limb3: 0x486ddefa539161f18afb8b3,\n        },\n        r1a0: u384 {\n            limb0: 0x2b55b06830bb4b7604c06419,\n            limb1: 0xa5521e8fbc7d47ff6cee8649,\n            limb2: 0x19044603e7a7fd14f2ca392f,\n            limb3: 0x100534339fb750d36ddf81c,\n        },\n        r1a1: u384 {\n            limb0: 0x144ad61af74f6da85031acdb,\n            limb1: 0xc4feb7056df7bd2d6526fdfd,\n            limb2: 0xd35f577108fa47be0bac8535,\n            limb3: 0x159564e4ac7dc0857b9b7f66,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf98d6dbcb3ea133fb4ffcaf2,\n            limb1: 0x6fbf2c7d9fc7cb84bf8a4eff,\n            limb2: 0xe62c313483fc5463bf3ed2bf,\n            limb3: 0x19a9884ea34fe0126dee7e18,\n        },\n        r0a1: u384 {\n            limb0: 0xe817610114936f7ecee50446,\n            limb1: 0xc04e0c4475092ba5e70435ef,\n            limb2: 0x65469702b18d011ea024ca54,\n            limb3: 0xa3d7efe3405b93e96bfced4,\n        },\n        r1a0: u384 {\n            limb0: 0x23979b215fbc5eb927025b3c,\n            limb1: 0x7ee7ff729f1a2046dce0f71b,\n            limb2: 0x6c54f503e474ccd1fd2c589b,\n            limb3: 0x881ebefcd5614bf757db21a,\n        },\n        r1a1: u384 {\n            limb0: 0x8cf989efab414db4ca0337f8,\n            limb1: 0x55fe112a2e13392491c2b191,\n            limb2: 0x13e416c811005d1a3350cb5,\n            limb3: 0x14037e0e1d38e15b73e0ca43,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xbdb98a83e5729b997b8d9aa1,\n            limb1: 0xcb52848e21e96dfd84afb236,\n            limb2: 0x4fbaadb89ff456c79d956aea,\n            limb3: 0x1940988caf75778db3d7b20e,\n        },\n        r0a1: u384 {\n            limb0: 0xcc4b3f78288f83db55b1bb45,\n            limb1: 0xf5d2f34a4f2cbeaa75178684,\n            limb2: 0x1aeaabf273db3651ed9a6ca0,\n            limb3: 0xd1f255ae26606742036a4c6,\n        },\n        r1a0: u384 {\n            limb0: 0x16674b87da60cca57add5066,\n            limb1: 0xf993170c807c39cb94b60722,\n            limb2: 0x8b42bb6cde71360f572240e9,\n            limb3: 0x5249854c68d1b2761d27c54,\n        },\n        r1a1: u384 {\n            limb0: 0x4c3ccd4beed240cca6f61f5a,\n            limb1: 0xc68d54b38aa262727e982f1e,\n            limb2: 0x3211c469594dff0cf9486c32,\n            limb3: 0x10faeb3d4ca1e301b47ba93a,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x2823c66648f4d481d8e005a7,\n            limb1: 0xe856f0ae7cf3a85a214e662b,\n            limb2: 0xc2dbe57f6a6041f9408548cc,\n            limb3: 0x12cbf8243f62a684ffd117c9,\n        },\n        r0a1: u384 {\n            limb0: 0xf33c0f25f30965922b7a3d95,\n            limb1: 0xad2490f1a91b92ec63c3a38f,\n            limb2: 0xd9b3254082d06e13ed45ce64,\n            limb3: 0x1599b9de0a9d639c47386266,\n        },\n        r1a0: u384 {\n            limb0: 0xebcd5f23a4c3dd5b3c831608,\n            limb1: 0x37e0a6835ef506afdf7efa80,\n            limb2: 0x72d6ebdd955d53e4bb3088a6,\n            limb3: 0x1854c3c13966bc0d0b2cde14,\n        },\n        r1a1: u384 {\n            limb0: 0xe3107baa5208305dd296b362,\n            limb1: 0xf06342a6f9251ee1e2036283,\n            limb2: 0xe6612735f5fd5f25f4a18f0,\n            limb3: 0xcaf6e119c91fc84ef1c1aca,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x3b68bb1e9790730752af570b,\n            limb1: 0x1edee4298985741a4c96ff,\n            limb2: 0x2d734e175da7cf84fbafd3c5,\n            limb3: 0x3fb948696ef0e166bebf412,\n        },\n        r0a1: u384 {\n            limb0: 0xb0b7e8d0f696fbccb5fbb186,\n            limb1: 0x99de7fd4d64e41ad44bf9b5f,\n            limb2: 0x4f51631e336cadb706f3a33,\n            limb3: 0x11bba4f788fb1ded0e221b32,\n        },\n        r1a0: u384 {\n            limb0: 0x9eff9067ac9e819fc7057ae9,\n            limb1: 0x1e64c6d4089a0fb2425a645d,\n            limb2: 0xf94423c637381bbae316235e,\n            limb3: 0xf2f15e92682cdfa72a52fd2,\n        },\n        r1a1: u384 {\n            limb0: 0xab9a26b00f30b21765b7547,\n            limb1: 0x28c3c566fb6babb94109fa7e,\n            limb2: 0x7d858033627814454b111d98,\n            limb3: 0x155d1bd5ef23109cbf8c1ccf,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x2cde708f0b8cd318fc67bee8,\n            limb1: 0x9a95f572f0429539b3ce328b,\n            limb2: 0x4a5d4d9fd5dcf9f241ecc4d,\n            limb3: 0x19078676070364267ebcc3ab,\n        },\n        r0a1: u384 {\n            limb0: 0x98bd9f89de920ae0ebfb2406,\n            limb1: 0xd738868806c46f20e861d034,\n            limb2: 0x9b038050debc0edbc1be0e16,\n            limb3: 0x1362dcdc65285d2c8c41f9c2,\n        },\n        r1a0: u384 {\n            limb0: 0xcd4657e749f4ffcadbb0d9a5,\n            limb1: 0xd63c26d6ba8661d5080379af,\n            limb2: 0xc809cd05f4b7382bc077b1ea,\n            limb3: 0x12864d0dca4b400e2a95102b,\n        },\n        r1a1: u384 {\n            limb0: 0xd611a29ff543d96cf849bd1,\n            limb1: 0x596407fe121213b4a8cc307d,\n            limb2: 0x92d36061c70feaba71f789af,\n            limb3: 0x499654f872ac06ea4a452bc,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb0962fbcf21139969e8dab25,\n            limb1: 0xb0a19f7ca5f477871be73cbf,\n            limb2: 0x88ad887afd15eae613675e08,\n            limb3: 0x2a7b58589ca7b7e5b344396,\n        },\n        r0a1: u384 {\n            limb0: 0xf718c3a824df9a4081dd18d,\n            limb1: 0x41e4ef4d528d6c4f5dceb1d1,\n            limb2: 0xddf16e8d62dd032870008ad1,\n            limb3: 0x1507f575d3c90144e8d7f643,\n        },\n        r1a0: u384 {\n            limb0: 0xfe658024d9e687959a028d31,\n            limb1: 0xd2bb637f753e2d0bd6233ad2,\n            limb2: 0x4ed4d8e0c9a61e71b74e8d50,\n            limb3: 0xe8f6a3795714e66d7f76cb8,\n        },\n        r1a1: u384 {\n            limb0: 0xc99318a2e53111aa51be227c,\n            limb1: 0xf6251383d887b2d7aa2cfed2,\n            limb2: 0x4d90f6d24972610e5c13a0c1,\n            limb3: 0x1047331dacc8b1a00c020666,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x556da7f56ee0c7d62fc2972f,\n            limb1: 0xdfb895df67fa4aee9235305e,\n            limb2: 0x29439ced958130b5388abbca,\n            limb3: 0x323dd9807649f00008b4087,\n        },\n        r0a1: u384 {\n            limb0: 0x874af1a436b6ade8baca63e4,\n            limb1: 0x6d4f1a7e518069c3d2dd1ddb,\n            limb2: 0x9c80fa9f1c0a2d348ee7b957,\n            limb3: 0xd523391bbe3f0de1019fccb,\n        },\n        r1a0: u384 {\n            limb0: 0x1be5bbc51b64cf3dd26dd3,\n            limb1: 0x2fa737161f1e1415d3938969,\n            limb2: 0xafa9623233be5134ff59b5b,\n            limb3: 0x28e491d31e52da5ff90caa3,\n        },\n        r1a1: u384 {\n            limb0: 0x4d3c3323d817ef85ac80e43c,\n            limb1: 0x954d330e18b44f9a52f33c50,\n            limb2: 0x452f1d366708c2dcbf45278d,\n            limb3: 0x1511877d960dad5c4f4aa325,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x336b741fc1583b606c65abaf,\n            limb1: 0x73801a000b489b2200db6572,\n            limb2: 0xf94c4519220a8cfc88edc539,\n            limb3: 0x715c050a954cf814d0c7e0a,\n        },\n        r0a1: u384 {\n            limb0: 0xed5fbf1ab4cc40ac6e7d933,\n            limb1: 0x30ba3c9eab6fe7baec2a6a88,\n            limb2: 0x4afe67182f279cf5cbcb98f5,\n            limb3: 0xad08242f19c0aaec787286a,\n        },\n        r1a0: u384 {\n            limb0: 0xcde708df2cf8ebba73c7b13e,\n            limb1: 0x32efd2eb6114dcfe39c3fdf9,\n            limb2: 0x81b46d9352a1d3283852dc27,\n            limb3: 0x19ad0267f7bdaaf9986205cd,\n        },\n        r1a1: u384 {\n            limb0: 0x860109901150c0785eca2431,\n            limb1: 0xa7bf3670dae1ad8a4f40d305,\n            limb2: 0xb9bc1d54935166605ca85485,\n            limb3: 0xde55ad5b86f0179f3a34e6f,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x178379b18626f7f480996464,\n            limb1: 0x9905457420bad5a85b9bee90,\n            limb2: 0x1c27977000f53f2a05b4e4a1,\n            limb3: 0x918842c5d9f1da6cf126741,\n        },\n        r0a1: u384 {\n            limb0: 0x27dd95e2844378ea90ebe5d4,\n            limb1: 0x5af2fd2756e4dab52f5e77f8,\n            limb2: 0xc2ba5de18b0385ce74c77b5f,\n            limb3: 0x3c7fa5727ea8c9d646cae70,\n        },\n        r1a0: u384 {\n            limb0: 0xf0a44f50005dcf7588f02c02,\n            limb1: 0xd971fd2f991b155467696d20,\n            limb2: 0x699795f7b8975027f1e5c103,\n            limb3: 0xda7f16c23b59fae7c41e66d,\n        },\n        r1a1: u384 {\n            limb0: 0xd00a3bc91e29ee6504078f25,\n            limb1: 0x37efc549e098e4407c501366,\n            limb2: 0xef8969c8bad5269a563c83e3,\n            limb3: 0x149af36ce061f6aa56ee93af,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8a02b34e776442ba59c167e,\n            limb1: 0x2cd74b2524d97b6dccb82f1b,\n            limb2: 0x813ca4185e38eee5964aed07,\n            limb3: 0x83cc2f404d857d442b3eabb,\n        },\n        r0a1: u384 {\n            limb0: 0x72463cfd186baad7a018e0cb,\n            limb1: 0xa4cd63570dadb68f7d0309f,\n            limb2: 0x57a086998740b2352d53fccf,\n            limb3: 0x2aa02706d4bdbc65ac03231,\n        },\n        r1a0: u384 {\n            limb0: 0xe33b9bf1bff90857e4d61f2,\n            limb1: 0x43eb7abde512fe176791dc98,\n            limb2: 0xb4b49b358c9a901e40d5613e,\n            limb3: 0x53d85ae1b55cab87293aa1,\n        },\n        r1a1: u384 {\n            limb0: 0x547181b3fa66b2639ec8caac,\n            limb1: 0x97a64032085b2c91d1c492b9,\n            limb2: 0xdbd11997d43e3e57e23c4cff,\n            limb3: 0x19e0ef65ce0442faf2567108,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x3b4f86ee4171fc73a46c3d5,\n            limb1: 0xa2c3a70144a8b213482fb90d,\n            limb2: 0xfde12864b1671fa86d9e0211,\n            limb3: 0x8488e6d72cc9f99996e3a7c,\n        },\n        r0a1: u384 {\n            limb0: 0x58bac66145ecf6b1dc4652e9,\n            limb1: 0xa08c279a9dd3f9a27307a28f,\n            limb2: 0xe0480f382a930c0e8da54894,\n            limb3: 0x1093a6faac45157511eda7e0,\n        },\n        r1a0: u384 {\n            limb0: 0x8fff8e258c6a2d1b179b7217,\n            limb1: 0x3ec2a966483e686b172d6b19,\n            limb2: 0xb696ff28222f0abc8d46a4a2,\n            limb3: 0x1099a36e837c296a95743dee,\n        },\n        r1a1: u384 {\n            limb0: 0xaddfe6fe51ba3ef44b12dbda,\n            limb1: 0x94ca09358ab5dad1607c1722,\n            limb2: 0x44926a8ffea15646ab1221f9,\n            limb3: 0xeb0d8e1ff3518df3041efbd,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8e63a441663872dab66149bf,\n            limb1: 0xc9c87bf6e55ee4471ecfec00,\n            limb2: 0xce8ba5b12ef7950e530e6751,\n            limb3: 0x19036c37239205542fb77256,\n        },\n        r0a1: u384 {\n            limb0: 0xc4c23871cf570d2ac86cac95,\n            limb1: 0x3cff66372097c68451261af3,\n            limb2: 0xc6ade94f8c28ebe4007e1343,\n            limb3: 0x19e7ab14be7691a66ed75c31,\n        },\n        r1a0: u384 {\n            limb0: 0x604f0bcb1b846c57953baa9e,\n            limb1: 0x81dcb277c4e97ebdd4596d05,\n            limb2: 0xae63997c93fabf23479283b7,\n            limb3: 0x1812ad42cfda1a8d608a6116,\n        },\n        r1a1: u384 {\n            limb0: 0x904a9370cc89b6f966b5aae0,\n            limb1: 0x159ebfaa5d240591de06cb97,\n            limb2: 0x1cc1851722f8ad2cf22893d5,\n            limb3: 0x728ade3923670c3bdd7beb4,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa3dc1ab42d89ae8b325d427b,\n            limb1: 0x1d7c740e46ec4306e2c88619,\n            limb2: 0x31f7d47a027e479d085e880a,\n            limb3: 0x5de6db9ee0cfa85a151a83d,\n        },\n        r0a1: u384 {\n            limb0: 0x8d9cbdbdeadf4d81f185a381,\n            limb1: 0x580bb622f9f0839c77a2307,\n            limb2: 0x5ccee07b4991bd23a307fa07,\n            limb3: 0x1616ef86618ac2b7bbeddf56,\n        },\n        r1a0: u384 {\n            limb0: 0x9ae8b66048d7c97f8fab821b,\n            limb1: 0x6b496e9c0cb601604e75d0c7,\n            limb2: 0x5eed49d86cf54de1b281d764,\n            limb3: 0x3d6513d6bc7bfd76157ec98,\n        },\n        r1a1: u384 {\n            limb0: 0xdcfb80780546b77cc35445a8,\n            limb1: 0x125d7b294e98c0c435a793a2,\n            limb2: 0xeced02d3114a1a1a18ca079,\n            limb3: 0x163a49c9922df63143db81d9,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9c25e08fca582713a30bf8e8,\n            limb1: 0x5498ae20a6a534f378b69831,\n            limb2: 0xdd783a5b0f0ef9a3ecb74589,\n            limb3: 0x117d7480f71ac945bc135958,\n        },\n        r0a1: u384 {\n            limb0: 0x23f20c0260568db93332cad4,\n            limb1: 0xf9be3edcad2f716ad354398e,\n            limb2: 0x8abd8e1084b21e076745f42d,\n            limb3: 0xd031732c8c7513d0693ced,\n        },\n        r1a0: u384 {\n            limb0: 0x50ecf31bd9798a48cb2540ef,\n            limb1: 0xe9b082486d639a35ab8978d9,\n            limb2: 0xd12e8e3b5ec44cb1f5af7edd,\n            limb3: 0x138ba5e28dfbae00af4b5c95,\n        },\n        r1a1: u384 {\n            limb0: 0x393d55e2e0bca3a82c44cf73,\n            limb1: 0xf199ae3baa3ab94c0bf97ab0,\n            limb2: 0xccc3be3d6bd86ddbebf34569,\n            limb3: 0xa562acfc71629deae99dc04,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa32020fc5c26aa2b2c1872a9,\n            limb1: 0x99317d0307ad5ea842fc68c7,\n            limb2: 0x930db91b6ede96bd9c4fdc5d,\n            limb3: 0x102eac12776a8bcf9d8023d5,\n        },\n        r0a1: u384 {\n            limb0: 0x731ff75a1aba2fa146f52ca7,\n            limb1: 0x284943eff7736f26174d9b1,\n            limb2: 0x1198d0b9e569464a497c9a09,\n            limb3: 0x137f25b5a84c95068af34ad7,\n        },\n        r1a0: u384 {\n            limb0: 0xe863956a16770c315872a7dc,\n            limb1: 0x436b0e50fa85dcad5cd5a349,\n            limb2: 0x3a801273d99a2fe4d30db9af,\n            limb3: 0x1860701c9eb068113c1ab2b4,\n        },\n        r1a1: u384 {\n            limb0: 0x8662843a34c684808e361fc8,\n            limb1: 0x5a38428f88ac5961d9f00e31,\n            limb2: 0x6724f856869e9567aac72def,\n            limb3: 0x6bc151d66baf82f909ff2b0,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5527d5630ba777b1fb4ee088,\n            limb1: 0x7e6df03522ab95222d3ffbd7,\n            limb2: 0x307862552a41641cb0ddf50,\n            limb3: 0x12b662fd55c1871cd2294f80,\n        },\n        r0a1: u384 {\n            limb0: 0x2ee9236fced8ab9415122d9a,\n            limb1: 0xa76214b949312091aa6358f0,\n            limb2: 0x7df6f68f1a8701aea18b9ec,\n            limb3: 0x5befdc841ed311c388e2df2,\n        },\n        r1a0: u384 {\n            limb0: 0x2b6fe7920b18941913c6655b,\n            limb1: 0x78fd904d62559b1e4759ea15,\n            limb2: 0xd8f1c747d3f90ced746ae347,\n            limb3: 0xa64d1afe8a82475a30e8c7d,\n        },\n        r1a1: u384 {\n            limb0: 0xff554fd5d64a021bfbc00bf2,\n            limb1: 0xf32efdc99923446fcc7e7ce6,\n            limb2: 0x3d912c666b1ef6b2946fb5a4,\n            limb3: 0x170c583c65e55b93944cec32,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x951a4e431316ff50c6482c4b,\n            limb1: 0xfca83ba8d8ac3648492339b3,\n            limb2: 0xe58171dcd987509cb26871b3,\n            limb3: 0xbb9bb5adf70482b97a3bb0,\n        },\n        r0a1: u384 {\n            limb0: 0xbd34770ae9d9ab5889638f6e,\n            limb1: 0xe560cf49df7557f1fc4789e6,\n            limb2: 0xeaa7805774b72bcb87190c5d,\n            limb3: 0x3cbee01dd125eddb941d5ef,\n        },\n        r1a0: u384 {\n            limb0: 0x2591fb43af877979ad4813b8,\n            limb1: 0x644b55586a6a840b039947d4,\n            limb2: 0xf8fbb480986ffe538209ee87,\n            limb3: 0x3ad1974c3abfbbda2f04c39,\n        },\n        r1a1: u384 {\n            limb0: 0x93e4c00d261450378ac274aa,\n            limb1: 0x660682ced30c45a709bb61cb,\n            limb2: 0xd1bf1cf243b7b502956d9c37,\n            limb3: 0x10ba03cfd910b6debea99ca8,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb6c906d97aab5e1a9eb8c32d,\n            limb1: 0x85329037280ec3157df623f7,\n            limb2: 0xd9d95abc41d2db2aad018e4,\n            limb3: 0xe54818adbc0e75e37818e30,\n        },\n        r0a1: u384 {\n            limb0: 0x94754dd0167e9ff97e8becf2,\n            limb1: 0x670389f4b3b102ef1b751a27,\n            limb2: 0x77799f6977420d487566d73b,\n            limb3: 0x4a016e9a4cb18014c34f16d,\n        },\n        r1a0: u384 {\n            limb0: 0x410ff00026087c2dbdf2fd58,\n            limb1: 0x9ae51362dd988b2c6ebf5a13,\n            limb2: 0xb13af64f748c9aede0307bb5,\n            limb3: 0x5cd4ab58201d40254203f2,\n        },\n        r1a1: u384 {\n            limb0: 0x6555f91ee569a8afd438101c,\n            limb1: 0xf3912880056e4067cad1d751,\n            limb2: 0x7a68681bcf4416fbed94065d,\n            limb3: 0x21c29689b9032ed40de3aa7,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9cb6410ea1c244cf91261620,\n            limb1: 0x9a0ec70e2e435659f0b82aab,\n            limb2: 0x6bdf6b76e92e374094dc4bff,\n            limb3: 0x17c071fbb0cd439df25600d4,\n        },\n        r0a1: u384 {\n            limb0: 0x9306de6711a91e50165883e1,\n            limb1: 0xc18e08efb171501bbdff0cb5,\n            limb2: 0xfd1e6d2d3a2460d3410a52e1,\n            limb3: 0xc2b3cc424e21932b681451b,\n        },\n        r1a0: u384 {\n            limb0: 0x5d5dd56986bea0e5134b28fe,\n            limb1: 0x18fd0b9680274cb30e18754a,\n            limb2: 0x4aa4b6112cb15d07ef827dfc,\n            limb3: 0x7654a15e3407ca6bab2ceda,\n        },\n        r1a1: u384 {\n            limb0: 0xee1aef22ef67624ae4234d51,\n            limb1: 0x55866c74019cad949d30560f,\n            limb2: 0x8bf24af5437a7ba1a934e0ff,\n            limb3: 0x16b7dcb84dde31d6d6ab26c9,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xdb7c2f40b16d97db7e13c229,\n            limb1: 0xdff1cd4ca577396b6b70b26b,\n            limb2: 0x1cd9cfb3a94fbf15cb93100,\n            limb3: 0xfefdba2cc25f2c9988106fa,\n        },\n        r0a1: u384 {\n            limb0: 0x62c89065b22acd9971ee6c13,\n            limb1: 0xc625f36141a3b56449a77e6f,\n            limb2: 0xa5493f44e855a7cb66dd8bbf,\n            limb3: 0x12c14460b44cf28ef342f8c5,\n        },\n        r1a0: u384 {\n            limb0: 0x60b1fdd98b736e288380b2b,\n            limb1: 0x63aff4cef5521d0cdae1528c,\n            limb2: 0xd36d721112740df1889366c,\n            limb3: 0x11495a9a17f547466be11d96,\n        },\n        r1a1: u384 {\n            limb0: 0x193d4800d3bf3ba99b4873cc,\n            limb1: 0x7f5f89e476bf6b18eb5921b6,\n            limb2: 0x5cb3d8ee744c61fc500e6d7a,\n            limb3: 0x1523763cf6be6e71c2d91f96,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1aa12c881d544bcb37558850,\n            limb1: 0x63144f19ff872a71e030cc70,\n            limb2: 0x48ae38b0e1add101ce20c6f3,\n            limb3: 0x19ff58260aefd123e7ba2a8,\n        },\n        r0a1: u384 {\n            limb0: 0x7ced7c5b08862b085468314e,\n            limb1: 0xa13dbc7202177828765c874b,\n            limb2: 0xbed3e3698263832c713811d3,\n            limb3: 0x292745a86de12caf184cbee,\n        },\n        r1a0: u384 {\n            limb0: 0x8c959e86f45c34c2a6916d1b,\n            limb1: 0x9f18192cb102d0ff3966b40e,\n            limb2: 0x52e77aa983872d849ff8d43d,\n            limb3: 0x48e5858a2e8ae6f1bc52341,\n        },\n        r1a1: u384 {\n            limb0: 0x3ac200354363217e43902841,\n            limb1: 0x171fc3dfcb35d029c4833069,\n            limb2: 0xfcbd684ba325147b59f94274,\n            limb3: 0x730542a2728b9e2dd2070a4,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x3bc964d3cbdd70ad2e06f5fa,\n            limb1: 0x9e036ff6ff547b6bff393699,\n            limb2: 0x297502ec4ddf92bd4a493750,\n            limb3: 0x73084817d704764e798e635,\n        },\n        r0a1: u384 {\n            limb0: 0x31809caa85fd1dee70633314,\n            limb1: 0x6c523cb1d6d1fa98de5a75dd,\n            limb2: 0x1aa4873cc1858c15952ba162,\n            limb3: 0x14849b1aabca26d959441cde,\n        },\n        r1a0: u384 {\n            limb0: 0xacae5867577225d72b8258bc,\n            limb1: 0x96a4b24a109f241ed9c103e0,\n            limb2: 0xe3442c632f299305679b0bca,\n            limb3: 0x14d7ce3b603d1e7cd7e2361a,\n        },\n        r1a1: u384 {\n            limb0: 0x5e1f793ad67dd2264e64d9,\n            limb1: 0xadfd0cda9704c46e93b68319,\n            limb2: 0xb34174c0ba3f0e5690b4f12,\n            limb3: 0x7cead3683efbab7c7c3a775,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x999071a9101732d492061a90,\n            limb1: 0xe63f37b3174c5f1297e235f6,\n            limb2: 0x95b88eed7507ce097bbe89ca,\n            limb3: 0x163149501da9846df4670d0c,\n        },\n        r0a1: u384 {\n            limb0: 0x9e9d3eddfe0b0aab2fbec0c,\n            limb1: 0xfea1de933107fff354bc0f3d,\n            limb2: 0xb517bbbc647a7ab824f4e848,\n            limb3: 0x170b612b36fc686c2e694d29,\n        },\n        r1a0: u384 {\n            limb0: 0x7fc55183f351dd4a9d52c0db,\n            limb1: 0x2912e3b30839b48a933c3e5e,\n            limb2: 0x39262021239a1090055cd429,\n            limb3: 0xec3a57880804fd3f02e825a,\n        },\n        r1a1: u384 {\n            limb0: 0x99b5fb13fc76d8a2c2cfa88d,\n            limb1: 0x2af93378b2e0d8d194604349,\n            limb2: 0x832ee1f724befe4e41349494,\n            limb3: 0x2a4caaf73deb41cddeb1e20,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb4c0e53b8b85b70fd397ca9,\n            limb1: 0xf81023bcd84336ba486bbb69,\n            limb2: 0x951f292517f80fefb53ce43a,\n            limb3: 0x1854db111892206ddcc7d4f2,\n        },\n        r0a1: u384 {\n            limb0: 0x7d3f4d9b31edded71452fa4e,\n            limb1: 0x1d7efee57fa90e3a87b5bf30,\n            limb2: 0x98b4bb185fadc2115844beb3,\n            limb3: 0x9323c26174a9528c0078a0c,\n        },\n        r1a0: u384 {\n            limb0: 0xcae0056d355b9f6761bec260,\n            limb1: 0x761aac0270bdc92cbcffd5c3,\n            limb2: 0x7eeedd0df5c8b1cf9b25033,\n            limb3: 0xdf44e5cb05d7ac7267fca21,\n        },\n        r1a1: u384 {\n            limb0: 0x2c618c362b029fd18c70f772,\n            limb1: 0x16872fb729361313dff53d74,\n            limb2: 0x83abe31b8bfade90e907f78f,\n            limb3: 0xe38ce80ae574859be5b287e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xc483cab3af32b8cce205e87d,\n            limb1: 0x9d2a45392f78c5e530451785,\n            limb2: 0xdb6c59ed5b82f4de76b7256b,\n            limb3: 0x47c81e4cc5e1c5d2ff3dfb7,\n        },\n        r0a1: u384 {\n            limb0: 0xf7f0999a8a0c2078daf563ff,\n            limb1: 0xf801e673de7a6681d0ad832c,\n            limb2: 0x6dd8755c6b9fef053dda67f0,\n            limb3: 0x470082fac490f7d8ff83d05,\n        },\n        r1a0: u384 {\n            limb0: 0x1d9f096b1cdfa9d92f3ecd86,\n            limb1: 0x303cd4299b5599615f34e12,\n            limb2: 0x4d28fad42e2136274fc22ac1,\n            limb3: 0x42ad6e99b972ba7faaccfa,\n        },\n        r1a1: u384 {\n            limb0: 0x7d9d2503df48b7eb05d6cc13,\n            limb1: 0x6a65472b48aff35a2ae3a9d3,\n            limb2: 0xcbb040de22bd261b17829a93,\n            limb3: 0x2f359c6ff6e984beda9b4e0,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x3368b59a608905f593717f6c,\n            limb1: 0x9fadc99f54479421462b44a6,\n            limb2: 0x7ecc879dfa7e889b09cddc25,\n            limb3: 0xafacf2a7a033583c7e9d920,\n        },\n        r0a1: u384 {\n            limb0: 0x284cfbe8d68936e4fcc5e83,\n            limb1: 0x65a8a02635080d8565116a03,\n            limb2: 0x7a868f131cbcd89142de7559,\n            limb3: 0xcc53ca2497099a56ff098ff,\n        },\n        r1a0: u384 {\n            limb0: 0xc58cbd4b283cbf3eff21b78a,\n            limb1: 0x67dd7b9f8984e236e1c6b51c,\n            limb2: 0x3e6366a0c97a444c9defec8d,\n            limb3: 0x11132f87bc1acdb72deafe50,\n        },\n        r1a1: u384 {\n            limb0: 0x538f361d8e86e4617e6a5770,\n            limb1: 0x8538c52255d062c8dd6b6a6e,\n            limb2: 0x3cf6cfda020417393f068a01,\n            limb3: 0x2dcc10794cec979dc66f076,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x91346b567f76364e14397802,\n            limb1: 0xe4669ab6c6c801868ea181c9,\n            limb2: 0x69e8ca27aa64f9b9deff6b5e,\n            limb3: 0x1324fcf625329027578f8a1f,\n        },\n        r0a1: u384 {\n            limb0: 0x1b90c202de3c543db443916c,\n            limb1: 0xa1b60baac0c7858225ee8f4e,\n            limb2: 0xc122c8ac8d01fa4f77561f6d,\n            limb3: 0xbf8ce24ece91062b1fafaa0,\n        },\n        r1a0: u384 {\n            limb0: 0x349aa436731d52ce8143d7fe,\n            limb1: 0xf01f24c451c7f3cee4523ba9,\n            limb2: 0x95aeaad6f40e28638278856e,\n            limb3: 0x11018272ddb0440784f09552,\n        },\n        r1a1: u384 {\n            limb0: 0x44f1642d198d8ef7cc740f99,\n            limb1: 0x3fcb198297333fc4f5188eec,\n            limb2: 0xf9355343a13841f641108327,\n            limb3: 0x7ca3e5d510ac999944827d5,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1ae539cd3d5bfd7479374a3a,\n            limb1: 0x99986d947095a5d0e52d8cb4,\n            limb2: 0x85c3a70092a1328677770181,\n            limb3: 0x191626fe1a2306ec9140df49,\n        },\n        r0a1: u384 {\n            limb0: 0xd60992cc29ba925f57b9aa72,\n            limb1: 0x6f5f37c85cf18ccb3f47bef6,\n            limb2: 0x11dfbc1091ccdc6b21563041,\n            limb3: 0x371c988f9b10c65bd6912,\n        },\n        r1a0: u384 {\n            limb0: 0x6ab68e6eaa011a274ade6247,\n            limb1: 0x53c650901cf6547029586264,\n            limb2: 0x217b97d310aa75843d576b00,\n            limb3: 0xb34674dd9565502f88c2310,\n        },\n        r1a1: u384 {\n            limb0: 0xda421691cbe1d6e42d607a17,\n            limb1: 0x41918f135ebf00991f4ea5f,\n            limb2: 0x3b96c0b3672bee4ac88cfe38,\n            limb3: 0xedebecc6bc8087f71261d0b,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5708387c81243d8656ed877b,\n            limb1: 0xe445c9668475e7ee6a220c3c,\n            limb2: 0x9a5616be12b5ca329b1e9351,\n            limb3: 0x98439dacd980beada81f775,\n        },\n        r0a1: u384 {\n            limb0: 0x24153e1576aac5b27c520a25,\n            limb1: 0x63099212876df906160f0bdc,\n            limb2: 0xacf518d04b54fb97a80223a4,\n            limb3: 0x159baddef0ddc9dbaabfa621,\n        },\n        r1a0: u384 {\n            limb0: 0xbe25262bec154dfef1428866,\n            limb1: 0xa2c787ef175bc996f0b35f95,\n            limb2: 0x32b960ca398570da22485f90,\n            limb3: 0xa5eda48d9b501ca3e565fdc,\n        },\n        r1a1: u384 {\n            limb0: 0x575e126dbb7dd3b0bd23eb9d,\n            limb1: 0x1bc5525abae24ad5be772bf9,\n            limb2: 0xe8d0e48a8737f58e7d56d4c1,\n            limb3: 0x1045e77f326c79fb8086ec53,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6d56d1252725e7f5143c8590,\n            limb1: 0x35d67756ade4dee8f8be255e,\n            limb2: 0x303dfcf0cbf0761f5a085ccb,\n            limb3: 0x5ed54990f1521085b462863,\n        },\n        r0a1: u384 {\n            limb0: 0xd8f454dda993b61de297e66c,\n            limb1: 0xcbfbf6b7b48d4a55bc672a3b,\n            limb2: 0x4ff1328c6462d1fc71f2c955,\n            limb3: 0xe481de1284934419be4f77e,\n        },\n        r1a0: u384 {\n            limb0: 0x4ae8cd7c0c3d1c169a6bde1,\n            limb1: 0xe5ced7984c11e16ac61e6337,\n            limb2: 0xdf6341c367b3c11a34785533,\n            limb3: 0x66193e648c407cda52b0a86,\n        },\n        r1a1: u384 {\n            limb0: 0xd5108a1ee2d649a19acb66c8,\n            limb1: 0x360824b595c0ceb4ffa2eef3,\n            limb2: 0xb954a7a4dbd0ba9344fd0c57,\n            limb3: 0xcfb3335779d608b47dbc5c,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1905660330e264ffe1201088,\n            limb1: 0xe77ab0740f1c3b23f0f51f50,\n            limb2: 0x8ef7cee645865d3da96ac0e5,\n            limb3: 0x168ed09f27759e0ce04c9746,\n        },\n        r0a1: u384 {\n            limb0: 0x55d57a2fd6abd06bdc4937b0,\n            limb1: 0x26e6337a256c5d0b5a1afd47,\n            limb2: 0x3ac49416e71b8427f2562fb1,\n            limb3: 0x2ff671352fc439126c3772a,\n        },\n        r1a0: u384 {\n            limb0: 0x8fd316a93a09f110e6160238,\n            limb1: 0xdd0daafc6ed6c95aa1b344b2,\n            limb2: 0x210b615efd4970d9dbc58783,\n            limb3: 0xf448d964ca7f8796e644e2d,\n        },\n        r1a1: u384 {\n            limb0: 0x29b9f2bc42f2ffd5005f5eb4,\n            limb1: 0xc48f2cbd47015150e31a4823,\n            limb2: 0xaba30fd7d93d1e7a0d228fb0,\n            limb3: 0x135a194d7581a97a56598750,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x92836260b75c579dbd14b12a,\n            limb1: 0x620b095c36717ab6852efa2,\n            limb2: 0xc1eafa05172755028bd35b2,\n            limb3: 0xe5b66fa93381b5aed7bb46a,\n        },\n        r0a1: u384 {\n            limb0: 0x73e4e9ac5f5bd83e9aa5959c,\n            limb1: 0x36949ed94590d0197fc158ab,\n            limb2: 0xc2ef7657cfb98405cb7ebeaa,\n            limb3: 0x8445f154af158efd856e68a,\n        },\n        r1a0: u384 {\n            limb0: 0x581c26803b5b1f3e199f7ab2,\n            limb1: 0x5ae8d3853d0699834c85d670,\n            limb2: 0x8ad634ec4b30b96b6a80383f,\n            limb3: 0xd488f35f949c09cf57164e7,\n        },\n        r1a1: u384 {\n            limb0: 0x55c31b3cb4484c5bc1ae6cca,\n            limb1: 0x866f2857d1cfd432a2e31087,\n            limb2: 0x5d00ff10ce51b502176df865,\n            limb3: 0x172fe3e278748039822ecdca,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6a6472287dda67068ae6340c,\n            limb1: 0x3cfc2833599fdfa121b9fe7e,\n            limb2: 0x31ff610147c17e23f45b5486,\n            limb3: 0x185130e4f785abb0619abe9,\n        },\n        r0a1: u384 {\n            limb0: 0x4393bed022a497d9346164ac,\n            limb1: 0x130b9265e6e5ee1c7df031ce,\n            limb2: 0x6715f0b4d6099b750a24d3d9,\n            limb3: 0xe91da3136cb53d96c595b78,\n        },\n        r1a0: u384 {\n            limb0: 0x55fd3f010688075e5978b14,\n            limb1: 0xff1b2f45c9d48fef7bb2490d,\n            limb2: 0xfada4a38c5e40aff5c0b0c19,\n            limb3: 0xcd1bf218916e21b0b11b7bd,\n        },\n        r1a1: u384 {\n            limb0: 0x6694ff2e84b88d0b28a86c7,\n            limb1: 0xdbed6debb000097d0d7aed0c,\n            limb2: 0x135d21c4bb6d0ca7d8768c31,\n            limb3: 0x187a63bf7554a98e6d087717,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xbf20ae5e2142585ab87496b2,\n            limb1: 0x66dbe973ac92a361793c678e,\n            limb2: 0x34adbc4eee58df2265649a7a,\n            limb3: 0x161986b067ab47313f14f315,\n        },\n        r0a1: u384 {\n            limb0: 0x5dafd82ea5951b1700b85fd6,\n            limb1: 0xa032df8c5c8b6ff0c82d4335,\n            limb2: 0x5e9d0d2cd37437c605b9ca77,\n            limb3: 0x713edf121dafa633e361a77,\n        },\n        r1a0: u384 {\n            limb0: 0xf48d3a8c3104532057ca25ca,\n            limb1: 0x6dbf987d3174e477ed32e3dd,\n            limb2: 0xc4a4c6d77d33f0cfd64ea3da,\n            limb3: 0x36c11e29cc4fb647a958057,\n        },\n        r1a1: u384 {\n            limb0: 0x1fbf942fc96f0157cf750797,\n            limb1: 0x6c1aa4ccb2d753301f746dcd,\n            limb2: 0x4d09e39cd306fe441eea9bc0,\n            limb3: 0x5a5d219af2a34e73631f810,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xcc5753fa5f9c2031b7c52b48,\n            limb1: 0xc05b4af7e1a54143e7ade2b7,\n            limb2: 0x7b585f7f4937d5d56ee06a1d,\n            limb3: 0x9c88d19f51226766b5fc7e1,\n        },\n        r0a1: u384 {\n            limb0: 0xb7e478b01ca956db521aff83,\n            limb1: 0x6a187593d50cc4f027e11347,\n            limb2: 0x462960288c2ed800cb8d93f9,\n            limb3: 0x36e4e0fb04b76c200f8fb8,\n        },\n        r1a0: u384 {\n            limb0: 0xf9710b97ef78c7473b8a09da,\n            limb1: 0x864cfcbe4725c0b6928f2a56,\n            limb2: 0x6c695406b9c701a19ff65fc9,\n            limb3: 0x79d5669429ce771f3e3dab6,\n        },\n        r1a1: u384 {\n            limb0: 0x8ec637f338c24ff852fd062c,\n            limb1: 0xdbe45df89124a93faec45927,\n            limb2: 0x7e86298f4efebacdefb4fb7e,\n            limb3: 0xdd88cbee8b074de30e60664,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xfcaec442440567fbd524afd3,\n            limb1: 0x8a98d6814b4e1a9d7cc758f5,\n            limb2: 0x2f760e54677f2bfe70729dda,\n            limb3: 0x10d9b23a3b0bed118a63da40,\n        },\n        r0a1: u384 {\n            limb0: 0xf8ddb0878dacb7f806e628f6,\n            limb1: 0xa92656b5a22485577c56af43,\n            limb2: 0xc1966ef8fd5955d77fe82334,\n            limb3: 0x14241c193aeb87dabd157fcb,\n        },\n        r1a0: u384 {\n            limb0: 0xe24c327f129ea9cc0c685f56,\n            limb1: 0x2cc19f72e94fdb6bd9c760af,\n            limb2: 0xf2d5c5f0374a2fc038365379,\n            limb3: 0x1878ead2b6e1e7596ec4cfde,\n        },\n        r1a1: u384 {\n            limb0: 0xbe9a8c83f17d63b11ec592f7,\n            limb1: 0x333dabd959a73409e3af6512,\n            limb2: 0xc6a319cf5c77477ad20fb93b,\n            limb3: 0x702610944a3a8ae2f03176d,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xe3f40bb32c0c05422e341419,\n            limb1: 0xf98709366139095ffb68876e,\n            limb2: 0x2674c9dda9d7a090002bc885,\n            limb3: 0x17eae9f6a6302f7703aa443f,\n        },\n        r0a1: u384 {\n            limb0: 0xe2dd70013040cad06ef5ca86,\n            limb1: 0x42a8d956ad95aea9367a1f5f,\n            limb2: 0x9810ea523e0cf2253013f127,\n            limb3: 0x8bbc56ac77f83287136e63b,\n        },\n        r1a0: u384 {\n            limb0: 0x9b99afd48e0d94cbff84eece,\n            limb1: 0xe1b581098b2ccd1c8955a1eb,\n            limb2: 0x5f4e293d975fca4259bf4fd7,\n            limb3: 0x5580f5ed24c4fa4f4a1dad5,\n        },\n        r1a1: u384 {\n            limb0: 0x9576941ab7748b52d007681d,\n            limb1: 0x90a60953d0871a846ab3b1f0,\n            limb2: 0xf79279b4da9f3433f8099425,\n            limb3: 0x195f49ffeb41a4213cda8f46,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x90cef5ee61e6df7a454608fe,\n            limb1: 0x88fe96f3b500db97a43de2d1,\n            limb2: 0xa5d6accf5ccaa42fe16a3992,\n            limb3: 0xae32950a755162ce529df78,\n        },\n        r0a1: u384 {\n            limb0: 0xf3ae985d887f474aa5877b76,\n            limb1: 0xb8547eba672182699a37b51,\n            limb2: 0xb7c251f43cab02164068b78f,\n            limb3: 0x174654a7bb0641d12855a77f,\n        },\n        r1a0: u384 {\n            limb0: 0xf753460ade95181364d2f3ea,\n            limb1: 0x96a3ec0badb9f7367bde0aab,\n            limb2: 0xff4d25450e90338ada3905d3,\n            limb3: 0xd5c3971a419820ff1b7cccd,\n        },\n        r1a1: u384 {\n            limb0: 0x3f1ecd361055779f1b53e7b1,\n            limb1: 0x14d20a7dda52d2825dbf9837,\n            limb2: 0x14a64436c97c743580f85855,\n            limb3: 0xdfc88a6d5eac1b6de8191f,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xae56b988f4758a522dca5a4d,\n            limb1: 0xae3d0e7e09190f3609c309cd,\n            limb2: 0x47682787ec998873eb9d2407,\n            limb3: 0x1450b662024978043b49dc8d,\n        },\n        r0a1: u384 {\n            limb0: 0xbb90fcac5a679687e056e1ab,\n            limb1: 0x346bb08e621a7eb5bfb4fac4,\n            limb2: 0xa4f760e0f167e1a1bd40c3f,\n            limb3: 0x14844a685948d595d4670e4d,\n        },\n        r1a0: u384 {\n            limb0: 0x30be8b4bacb9ba7ed94ecc16,\n            limb1: 0x39660a59eb1229ceac4b77b5,\n            limb2: 0xa7c51a2eb736180af609d139,\n            limb3: 0x3565a224e9d4c23eb077b2f,\n        },\n        r1a1: u384 {\n            limb0: 0x8439a957b7e57d9a49eebba6,\n            limb1: 0xf61f936d1748fd0836c435f9,\n            limb2: 0xe02f71c8ca4c526df790cfac,\n            limb3: 0xc873450002e03b8fbae2d85,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xea2aa2ef798d63dae1ad5987,\n            limb1: 0xc1cc74e5c2033001dbfb3d2a,\n            limb2: 0x84aca7a16c78c31ed8f8ed89,\n            limb3: 0x14dccb954adf43f1f8d66861,\n        },\n        r0a1: u384 {\n            limb0: 0xc582e31d76536e6079306875,\n            limb1: 0x6b02558893b8f50219b410a2,\n            limb2: 0xbde3edcd153b6a2a637da1d3,\n            limb3: 0xd094e0bb17f9376d4e53419,\n        },\n        r1a0: u384 {\n            limb0: 0x7cd03ef2cd33db33f6a8ae2c,\n            limb1: 0x5e2f73868b9435622e66abde,\n            limb2: 0x17d48c069f57a0f70ef9b0c3,\n            limb3: 0x14f4eacc84d8d967e9bf296a,\n        },\n        r1a1: u384 {\n            limb0: 0xc22e92ae4c9bf9dce9693503,\n            limb1: 0xecee5b30a52a97acf85cc7db,\n            limb2: 0x6a40372e261a1a3f795946e3,\n            limb3: 0x108e71b5478085f037d483ca,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xfd3f06dc9ab069ab1ce8f8a1,\n            limb1: 0x94eab902643916c93a42725d,\n            limb2: 0x92896eef5c25b54929be81c,\n            limb3: 0xe1231b2187274313b2221ea,\n        },\n        r0a1: u384 {\n            limb0: 0xe79feb70c92be5b75090280e,\n            limb1: 0xa079b2d01c8fd3c5e91224d5,\n            limb2: 0xc3d6265ffbc67b2935500cb7,\n            limb3: 0xc55e460244e9d7e4724fc08,\n        },\n        r1a0: u384 {\n            limb0: 0xc2536498b81604b679714431,\n            limb1: 0xfba1e239fe9a2ba2b8434f7d,\n            limb2: 0xfb06ed703e76ad221dd5f099,\n            limb3: 0x179f886a9d4a211471ca742c,\n        },\n        r1a1: u384 {\n            limb0: 0xc0002d164553ae2136d17389,\n            limb1: 0x9e4c21af2da6e3fa6547209b,\n            limb2: 0xc0d2c1b4544b1ff1f728f42f,\n            limb3: 0x5d028766fec144c63899579,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xbc724a32cdf5e686384f9c7a,\n            limb1: 0x392e6cc66a96742b02d99a2d,\n            limb2: 0xeb9b287e3c4d8e9fb1139bdc,\n            limb3: 0x12871a93fbded0050b89a65f,\n        },\n        r0a1: u384 {\n            limb0: 0xd651768ec377726d1e98bbc3,\n            limb1: 0x161f43ed1fa20484936f2fa3,\n            limb2: 0xc1ac29c81e10ff7a9de14de,\n            limb3: 0x19f6a875998dc4da65846083,\n        },\n        r1a0: u384 {\n            limb0: 0x9bb0b60d42e6317602bd7ce7,\n            limb1: 0x81349962f265bf955e2764be,\n            limb2: 0x1c169de754e8e91e0db4fa7e,\n            limb3: 0xc08c552ccddf1e5cff0e338,\n        },\n        r1a1: u384 {\n            limb0: 0xb38dc139b4e54949577b1af0,\n            limb1: 0xa84359dd65e8195ade74119b,\n            limb2: 0x98af04c069558c8ff3c8a988,\n            limb3: 0xd7d61d48c3534a82ef148f9,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x295040d451b4f8c10a66f7d7,\n            limb1: 0xf80871061d801c912de9eafb,\n            limb2: 0xed8fba8b831bbb416e5ebee6,\n            limb3: 0x8e430db1b12d579f711d4d0,\n        },\n        r0a1: u384 {\n            limb0: 0xd164d4b3a22de89a6127a3da,\n            limb1: 0x3179de3a1d34aa2ba893d3bd,\n            limb2: 0xd13dbdaf8082b8707f996dcb,\n            limb3: 0x331baf7d5a95517a04106b9,\n        },\n        r1a0: u384 {\n            limb0: 0x9c001f3c828430bd90bdc1c7,\n            limb1: 0xb547be2465b75cb89225949e,\n            limb2: 0xb122f0237cfe3b5d08f35577,\n            limb3: 0x11503e8a68740fb9362c9459,\n        },\n        r1a1: u384 {\n            limb0: 0x65097bf894cc61c85f24f61e,\n            limb1: 0xdf7a3e16965ab9a30895ea0d,\n            limb2: 0x847935d9036676bf5514e7c3,\n            limb3: 0x177430f992f8d04517396f1a,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa0441a4e753643b9355a3f17,\n            limb1: 0x5a5c762a2fd001fa04296621,\n            limb2: 0x8aae9d0aadb27b00bfb42ba7,\n            limb3: 0xc001ec34e10687e40e3fe3a,\n        },\n        r0a1: u384 {\n            limb0: 0xcf274b3feea0a98a9b78a1f,\n            limb1: 0xeda53e4c0d1b94029825054e,\n            limb2: 0x77bd53e6876b8b4092e9830e,\n            limb3: 0xf544b1f6c1cbceaa8e8a27d,\n        },\n        r1a0: u384 {\n            limb0: 0x4875b1a7e30d8b356c4b48d5,\n            limb1: 0x793f8bad6545072c701e941e,\n            limb2: 0xdfaae7697d21b2c91f24603b,\n            limb3: 0x173d1e1c4f05bc5b74162c78,\n        },\n        r1a1: u384 {\n            limb0: 0x1cb3eb9353a1f193fb82307e,\n            limb1: 0x31022b7f3322bddb99c07c3e,\n            limb2: 0x1be773cf729614f209981079,\n            limb3: 0xfba0833bdd7e0106f828369,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8e9e39aea770477dfe41413f,\n            limb1: 0x559b27235633eae55e8ca028,\n            limb2: 0x2e0b31fe51912846733f2096,\n            limb3: 0x119fa86b301bad56082a7a7d,\n        },\n        r0a1: u384 {\n            limb0: 0x180fe9c5376d245dfcee6c8a,\n            limb1: 0xa8dd4c7ddf1cb669c8641bb8,\n            limb2: 0x7a6d705717e66bb11df0c176,\n            limb3: 0x9ff35d1500f1e43f5865d55,\n        },\n        r1a0: u384 {\n            limb0: 0xc028e802f19a8ce09f9f23,\n            limb1: 0xce04a4a4f6d5a750653cc7f7,\n            limb2: 0xa6205c0b6fed3d0ae979bc7,\n            limb3: 0x13d44560fc6bb13d20f95fb9,\n        },\n        r1a1: u384 {\n            limb0: 0x561f8c090b24590a5ee95f0c,\n            limb1: 0x6c79bc6d06256ea89d865cf5,\n            limb2: 0x22d121d8814a3e99fab8b5b1,\n            limb3: 0x4e23c464de2a41f3634339c,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xe3570af849f18f7de4fcdcc2,\n            limb1: 0x359d4f295f551f49f4ce0f43,\n            limb2: 0x5fe81d5b454ac7b4d4be42e5,\n            limb3: 0x1827c0c95f19420686366ca1,\n        },\n        r0a1: u384 {\n            limb0: 0xa80485f524899e0cafdb37ee,\n            limb1: 0xe411dfbadc22a4e279fd320d,\n            limb2: 0x4c187fbb32f9c03e9f8cb503,\n            limb3: 0x4443bb766a082498ba4f82b,\n        },\n        r1a0: u384 {\n            limb0: 0x9fb076b57d27346b27413dac,\n            limb1: 0x169bffe50985257a033e162c,\n            limb2: 0x847335f827ed1b57015c8125,\n            limb3: 0xa597c1ceea834fc4b9e4175,\n        },\n        r1a1: u384 {\n            limb0: 0x6ab00cdbb6122cf0abafc5cc,\n            limb1: 0xce164faae38420ccb08012ee,\n            limb2: 0xdcf9b5ad40487bd3f8b80798,\n            limb3: 0x1416a582ca2f516030f48cd4,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x262938eb02b0a0ce738b5135,\n            limb1: 0x87081cbabce49821653c349b,\n            limb2: 0x3fcca5c6ffa7a93194552dd4,\n            limb3: 0x5f33058fd7a6f5562daa952,\n        },\n        r0a1: u384 {\n            limb0: 0xdb76adbd6f126b7e297a2a22,\n            limb1: 0xdc1536a0cc54a2f6012a71fd,\n            limb2: 0x5efc1d4d08e9adb2b0ef7131,\n            limb3: 0xaa29cc910ff93bd714430ce,\n        },\n        r1a0: u384 {\n            limb0: 0x21aaddfbe26c0076a1332277,\n            limb1: 0x5befc360a7b2df7cb42a9106,\n            limb2: 0x84c8928ec73a7ad664bd4166,\n            limb3: 0x1210a1b9dad92922a760b203,\n        },\n        r1a1: u384 {\n            limb0: 0x5f784e1ac6fdc4df7afc0fdd,\n            limb1: 0x50db8e7afbc30c4f71fb694e,\n            limb2: 0x63a33182a4d866eaf5174a90,\n            limb3: 0x3f8bf361c208df3e1726f03,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5b64c7ec2aae834addcea0eb,\n            limb1: 0x6f09c230bd77e317eaa5f387,\n            limb2: 0x7adec10bb78aca18464d9c84,\n            limb3: 0x163574a747167dd083db3305,\n        },\n        r0a1: u384 {\n            limb0: 0x9c2652b4c20bf74024218182,\n            limb1: 0xa2f015e045625953330e76b3,\n            limb2: 0x500283810da9c9a67c2fe8b9,\n            limb3: 0x75023affbdb4b667a21158b,\n        },\n        r1a0: u384 {\n            limb0: 0xf0773eec0af14322cfed77c3,\n            limb1: 0x268fb48d3bc1f128636687f1,\n            limb2: 0x9fd00e0a5e5f3035244cb7c1,\n            limb3: 0x14f215b62046fce592481ca1,\n        },\n        r1a1: u384 {\n            limb0: 0xef9be30f50ebea41d28d75c9,\n            limb1: 0x193fa33c3c816bddcc207425,\n            limb2: 0x68976ca00c72e88755f5296,\n            limb3: 0x10ab8afd148808ae0e486da2,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xcd513d6ba860c71057206399,\n            limb1: 0x451ecd2c9b96e60e66758dc0,\n            limb2: 0x64ced0ddb512c97bc59cf920,\n            limb3: 0x3f4ac01fe942b1ac9311d3f,\n        },\n        r0a1: u384 {\n            limb0: 0x2998601d0aca6605631bd0c0,\n            limb1: 0xb8fc0faae442022a0626fe9a,\n            limb2: 0xf661588e85d804f1f2048c6c,\n            limb3: 0x1298ae12dceae383634c5c78,\n        },\n        r1a0: u384 {\n            limb0: 0xc742ad0b483c6424693da3a4,\n            limb1: 0xdaa35b3d0ba84948c3e058e6,\n            limb2: 0xf2be609830ad79764d4aa3b0,\n            limb3: 0x117d58d6d1a5a32518ed182a,\n        },\n        r1a1: u384 {\n            limb0: 0x9011dc447abae8f91198a37e,\n            limb1: 0x8286397fef7c1a7a377647d7,\n            limb2: 0x1ccb94f068d152311de445ae,\n            limb3: 0x7dccd16a52f94da768c38bb,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x538c083ce4e1deb79fc8d7ae,\n            limb1: 0xcff551314712bb599e99f0b9,\n            limb2: 0x9bf9eb4d01de1579ddd826eb,\n            limb3: 0x2a1ea081d2dbbfb9b85015a,\n        },\n        r0a1: u384 {\n            limb0: 0xee2ecee8b151574694d17327,\n            limb1: 0x2fe6c87f4670d9b999d3772b,\n            limb2: 0xc0ad5a6e62cf44b446f89a6f,\n            limb3: 0x10f2b18da949e2a50114e551,\n        },\n        r1a0: u384 {\n            limb0: 0xf9fa9355d7c82720f8e21bd2,\n            limb1: 0xaca9cc30e7371424a78bdc29,\n            limb2: 0x7349b58cc0ae05fb6db5f578,\n            limb3: 0xe36c1e3ac43374add4493ee,\n        },\n        r1a1: u384 {\n            limb0: 0xa06af78a8ab34c1022f0b846,\n            limb1: 0xb8c3411e193439f11b63b3f4,\n            limb2: 0x513dc683165699443b4ece80,\n            limb3: 0xd2a46af0a089885b4499c38,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x307547f29ce0e10a413edb2b,\n            limb1: 0xef4de07379413a2e7d3ac526,\n            limb2: 0xbf4e796dab1d7b8ec71a6c9d,\n            limb3: 0x19a4c8fc8080493b37dad997,\n        },\n        r0a1: u384 {\n            limb0: 0x2d4b6d98f6a62dc9cb1b3c,\n            limb1: 0x2e820a6c08cc1b1be230cd27,\n            limb2: 0x493e8c672a2898b9a16ac6f8,\n            limb3: 0x5357128dd5f24fd60edc8a8,\n        },\n        r1a0: u384 {\n            limb0: 0x1063c19a9ad984fffa4dff59,\n            limb1: 0xff2961c84b610248446d01df,\n            limb2: 0x714c88877d87ca828f45a30c,\n            limb3: 0x10c04eacfdbe1ec246a332f,\n        },\n        r1a1: u384 {\n            limb0: 0xa96deb5431f3e10c1335f460,\n            limb1: 0x585524813f3a8dfec4a25ff5,\n            limb2: 0xf0e4d4bf011411422a77c5f9,\n            limb3: 0x1385dc2aae3bd61dd2d8c122,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x7198960d6ea2cafefbb6b9ab,\n            limb1: 0x114183051d9b79fe6adc88a,\n            limb2: 0xa0dfceac911a90a3eb5ca7c1,\n            limb3: 0x3944defa81481b7dd4bdff7,\n        },\n        r0a1: u384 {\n            limb0: 0xdefd7682db60845ecb47b3cc,\n            limb1: 0x74780a500546ae0a4b8b3dc,\n            limb2: 0x7a9a4ccf67e06300513c5860,\n            limb3: 0x504436c0dba5f93ea9164,\n        },\n        r1a0: u384 {\n            limb0: 0x119696eda49e51bf553b09da,\n            limb1: 0xe2fdb538f4daf500dbd3c6dd,\n            limb2: 0x744f6bed078959ebb2da574f,\n            limb3: 0x18b9ad2990893e795fd5e4dd,\n        },\n        r1a1: u384 {\n            limb0: 0xbcb13ccaf69256bd2aa0b3e1,\n            limb1: 0x8d38b8ccd4189be6e119e52d,\n            limb2: 0x13321abc207b3936a4823a29,\n            limb3: 0x265ea0154a5133b534732cb,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5613c020634ff16b44d83f24,\n            limb1: 0x80cd5fc93e3d09662c8c0bc5,\n            limb2: 0xe5a7f64ed33d8e75390b4a2a,\n            limb3: 0x77b5e69dffa452e710da671,\n        },\n        r0a1: u384 {\n            limb0: 0xfd475bb5cabda2ca66b8a9a2,\n            limb1: 0xa2f483666599b3f38616a265,\n            limb2: 0x2f50c3e13b47f9f013b110ae,\n            limb3: 0xb90546cd4c81153ae816b28,\n        },\n        r1a0: u384 {\n            limb0: 0x5bb0532b9b631f6226209db4,\n            limb1: 0x8af30847f24064aaea92f634,\n            limb2: 0x63fc234f0211d3a48fd3794a,\n            limb3: 0x186be21ff49b8619293b08a0,\n        },\n        r1a1: u384 {\n            limb0: 0x7257ceb68e224443379d4f3d,\n            limb1: 0x832ff2fc38659e439e40d450,\n            limb2: 0x2bc2eeb8acd74c13b35c613b,\n            limb3: 0xc40014d71cb257fadad0453,\n        },\n    },\n];\n\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bls12_381/src/lib.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\npub mod groth16_verifier;\npub mod groth16_verifier_constants;\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bls12_381/tests/proof_calldata.txt",
    "content": "0xfbf04de06661c03aa78411a8\n0xdd8cfcb8222f03b0e4b380fc\n0xdfa7fccf252d7a8b8f12403e\n0x10d63379d266db8045f5c728\n0x60db2dd06e62b4a0b82e5152\n0xc24b6497af9aeb024f49f8b3\n0xd7f025572d1a11a316e78e08\n0x2c0020b06ec1b7724838d62\n0x778400cd07df7ee73c5c448a\n0xbae53a4fad489f850b025cee\n0xfd4ecc9b868d0661624f2b93\n0x10b361235d431450b05faa03\n0xe8a1b9c9dbc220c866998662\n0x80f3d1ab2e12a6e550f47425\n0x78ef2d24565a8c5b9d13494d\n0x18eab8fd69c3bd14a54d2bf0\n0xc7e68c1949f7002bf79cb928\n0x4ccbb7c5ac5c9a22450577a\n0x4f2eb3aed84a4590f460ad2e\n0x8a16230f79f3dca30dfc20\n0x2db2c8950ddd7f26bd5c25d9\n0xbfba0f9aa884451ed4cd8611\n0x6b089209f570450362b927cf\n0x147986d801bf9ceeec6861f3\n0xf63dde989a27d2f481d98017\n0xda2d11e16384828748a77c2b\n0xc462994ad8c2d05cba4913f2\n0x16998ff7eba66bfb87e0cd5d\n0x7e5e99dc4dee75af6426b3b5\n0xebe9803383f30df57976c28\n0xef22aacdb044d34ba506b7c0\n0xed3a43bd7eba2c69dd71d48\n0x1\n0x7a0452f8b3d5036d0336b258532659a1\n0x37ef9cf41c99af8dddaf673a28adfa2d\n0x6806d9115129d3c94bf5f207\n0x1785ab9a454aaeb2ccecc68a\n0x9a295fe348fea02a049b95cd\n0x4968e1c417b5cbe5c330147\n0xbc96b570e3ec9bce229568b\n0xb5fc556206d6566424db1f6b\n0x9c93076193e3d9779b981f3a\n0xd0839f776e632a7b29ae08b\n0x7a1c545101995eebe3f3e890\n0xe568a05a3fdf15954b9d4f97\n0x80f97823fcfbef09bb40e4ea\n0xc4f03f2da3c299e911adca9\n0x6d4f846fea58e60fe6917335\n0xc7493eccdb722f362b4c459c\n0xdd24123ad631b54dfcbc2279\n0x941e0d72b3f18e0ccc78c42\n0x579ab4d8a1a65c488cab25cf\n0xd8301ee44d3f53a88e863121\n0x5f5998a3cf683d553fccb07d\n0x9819a195c310cc1cd026a2a\n0x65dc8874692374c5e89cf4bc\n0x306c6bdefef555d986f5986f\n0xe88e710e51d8aacfc7624254\n0x114487a5436e75adc53864d6\n0xf65ef762443c1be093bb38b\n0x302c04efcb33ebe0939546ca\n0x507be7701bd5350a09d496a5\n0xcbe79ffa0a32700d5fed78d\n0x1b3cf7fcdbed9e19901f7fad\n0x33e2af4af41c3f24968e65fb\n0x38383152341794d76dfc294d\n0x109bb4328ef88f35f8242674\n0xee4fee85b53a0c7aff2a4382\n0xee2f083f8c26bbf763468fe7\n0x48865ebd70e1195b306ca53c\n0x14929156aa7a62c21fd7b429\n0xb47b8450dc9d640d177b07e\n0xa727cec03403b564c18b9112\n0x587df32c6d612fac03f0c21d\n0xe2bf14ce3de3ad6a24b508b\n0xcce0fba6f4ce3e6d79261621\n0x2a1567242713b093eb774fd4\n0x1fb9e31b32f1cff946892139\n0xcbb699428fa8f02ec31890f\n0x1eb12dd0425e3c4d364aab67\n0xabcdb96c88aa7b0b5991bac4\n0xafc2965877e55cc0f1de4f45\n0x42983ba8fd7c62ef0089838\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x8bbe3149222291967f7290ae\n0x78f12a9f0bbbab55611f284\n0xeec0a090a36cacc84f9a81e5\n0x14f38327205b79409760413f\n0x0\n0x0\n0x0\n0x0\n0x23\n0x61067230b7c02c2c5c5f995a\n0xaecf6de143193c9d02ea0c46\n0x34839933193f03180d55f28e\n0x15bef531925fbfdb0bc2e692\n0xbf2dbf640e28e3e34f67897f\n0x5fae716eef98581d4c17299b\n0x1b876d78f2e98c428a1aff57\n0x12350c417a154ef8c9dfb062\n0x663212da689f936a84c41c63\n0x220dbd868fdbac3974e45953\n0x2ee26ed83a84d6cc46c970b2\n0x5c73ae6648745345da3ccee\n0xa34cc3ad361636f7f59a246f\n0x4de08dc13ebc6d62338035f9\n0x771b3d668010c26120260326\n0x6d0f20f448c9f2809088ad8\n0xa4c65200055e5be78e573dcf\n0x6e3bcba62ac78fc26f26f237\n0x80e40fd830142a3ce69dd823\n0x17119e415a1689f23a316e70\n0x12584e853c7e282fc87e589c\n0x9f8f10c04d24ceaf1b9169c2\n0x922b04f85adde9929e171879\n0x117b0f225d0f2ed892d8af6c\n0xaac5a0c2e8f598f6f2a9fb1b\n0x571a184654bb32805e73f0dd\n0x2235068faac48c52198f8414\n0x1113d8a9afbb1429bff4af20\n0xea3b341398b5bb23b3b89e5e\n0x34da8c91f0ab5dcab17e2c8c\n0x8f8851ec37159d43021e8ee\n0x18da3818138945debf164dd0\n0x5ab37b36b6cbb1eed71ae7a5\n0xcf663e2c28a652012125d5a2\n0x972e792e9b8c8d753bddaa3f\n0xe28bbb62590f081d0951cba\n0x19f60d4ff657d7ef71a0d0e1\n0xb542233e45f9694528eac8b9\n0xdd9ca3430735c4b9f9efe8ae\n0xe76c0b70c14ef1172434eb5\n0x1007f0fee35610100536ac7\n0xc3ddf10750122e09b885de6f\n0x7a39512057e4234260488da8\n0x344f82c09c0da8983095d8d\n0x1f7e733b35dc50dd7a5cbd82\n0x5a5d8bc37f6d5c7f31a8af9b\n0x44887f779c75f26ac354133a\n0xa078162303c22db387fd1c4\n0xebaa36cad7ddb2fcf10dda94\n0x987ae5c9d57493bf2761715d\n0xcc5d35a5058ab8c1e4f4347a\n0xd72e707048668a50555a5ce\n0x8e8c5e7077c5199b4f17ab49\n0x76770f0fced6a241951c0eed\n0x454968a72580ca8f605f05dd\n0x184a3f2fbcd9675ddcea48\n0xdf621344424baa5646a10616\n0x12d1e64e19e5a14d71b0cb62\n0xdd58e0c804010f93085bc403\n0x642f1d1e000b8662c01c33d\n0x34ce8c6f163888c090e6046c\n0xd5291f5435ebe0f05687e0e3\n0x71472fb5b7ce28df5973ca10\n0xb27388b3cf46ca23c4479fb\n0xdee3a9b0c9fa0bd8a53d5cc\n0x1c18ad3ee0cb8085507190a6\n0xf95ec9637157753cef19c890\n0x13b7012984d657d22152e579\n0x5605f6236e81d21e8593ae8d\n0xbd5d807a275688a2aff17f91\n0x6afec5fd32d920be56f58098\n0x337af5799363cea2491f93e\n0x6456fff90e5e94e124901cf4\n0x838d77ab870368fe4becf31e\n0xc9af9fd9e96051f92af40b0a\n0x4d3e80925902dac4f87594\n0x79db470f183d70f7585b6193\n0xa11e8f43cf0dea33befe1c40\n0xa399e1b6cbe41069641cc6b6\n0xd973ea6aebe05d84d0aacdd\n0xccc71be6ec735af9f8238431\n0x5eaa9f737ba91feadea5c5ad\n0x6d18c8285f53105723ec7040\n0x66a9d1341a861111a9013d2\n0xd781aafef75b967546068ead\n0xf957d9004a22a2dd33cbbee5\n0xd23398a9c8726b1646703421\n0xec859c4989b36b6e76b5a7\n0xedfb47442a0a71172e4f5226\n0xe3c0975ff9c1565adc60d72c\n0xfbbe2c9cddc2d2b92d3d460f\n0x12b8b4ffbf9b344b1eb29d9e\n0x2d58909e352f4bab8b999051\n0x6b88b6d25ff9c5faf59e9b20\n0x9c4c6e3dd38011aa8fe74f6c\n0xba4ecd44491c18a37614752\n0x72909298773981ce29e425a2\n0x357d9a5534367a4c750ee5b2\n0x2e4acbb55cd5afb837f1e7c3\n0xbf325c470d693e326d5d396\n0x3dddaad457804688f77b2df0\n0x50d8d46a3b5b8e46bb3a5873\n0x47c5354f1dd4b068778dcb9a\n0x106cbba48c6d3f2fe6acb783\n0x878df1405cad5d85219ac2ad\n0xb3dbeb8336546918d7f725c2\n0xc37986c3795e8ac0e313ba06\n0xde8b2a4d4f05a137154d285\n0xa45549fc5f4d60a99da8362f\n0xa88e7654494f2a6ff768481b\n0x859314867f48abba67bcf3fd\n0x152101f68b4e13050fa6ba9f\n0xe8d0f35282f61aad0a27b320\n0x47984db10b70660521bd7626\n0xe29695afa9ea8aefcc24b812\n0x9c4774820f9474b026f7c31\n0x16681ccbb30f0aa871c009ea\n0x98666c68ad88ab661a805448\n0x84ac28ca388daa56a7b5399\n0x16d5fc2e0451517ea9a6416e\n0x726d724c58462c202b924c75\n0x268ee23cfc7ecd19b9caf468\n0x83b82dc7a2f3dbec1b9930cd\n0x17094f764280bd466c40446e\n0x5fd815d9510ac071a05a596e\n0xd460e8a19d8ef9bee888f9f2\n0x89501aab9c4745e78e150a11\n0x1908e62f0138e0c958f7e3a4\n0x3917c2a0b9491936e995775a\n0x836fc1ebcec4581e4d6e42a2\n0xbf2bc6d934216e4257733283\n0x14d60853ce1160205ea83d87\n0x52c7d860f158ae5278c9189e\n0x553e49af2bf7fb0386b72d8c\n0x2ffbf0d5d45ae27e82b949cd\n0x37a83559de043107ecc7af2\n0x6a43a25d1f376bd6b8f5cdb0\n0x2acfe1b079634b8e8f77fdf9\n0x75cbcb2b8c47feb2247d18cc\n0x8cbcf7ce6642e120e794bc\n0xc78f5b5c827437172c363c93\n0xd986454e270b134e50272043\n0x1917fd7faf0790a6b1bccd08\n0x12c824dc148cdd5b5ea15cbc\n0x17723e68719aba196281ba\n0x110732d986fa3c6567825bc4\n0xae5dba5f4a84c297a6030e0b\n0xdaeaa22ff02bcaac992251d\n0x42b51be85ea85a91289543ac\n0x5419b3c9a7936869e3eeb6df\n0xe440d2206e66c5b2400dff\n0xb6ed3112bb028c70596a3b0\n0x69fcf83713b48dba1f6f34c1\n0xead9f277551cc8d7078f50f7\n0x256bdf9e1ac38f9417a62d51\n0xea5f13e33811e16d00e8911\n0x8e5c1b151f9ab21f1012645b\n0x1e2835a413d6296fe57a1337\n0x6e6a99b0edd57e3c4e6b3d99\n0xf7df405e35ccb1d9f120110\n0xd860b41f106af41fae761d1b\n0x17639cfca5137dcf0bfdc46d\n0x1eb9fca60ca837499a695df\n0x1da4af271e0b37ce6e42aa5\n0x111ee8ab4bc2390f735cf308\n0xe9f83519a39257ecb6c3adcc\n0xcab8b235558a8f5bc7a69138\n0x195ca254c97a42b72ecee453\n0x519d5161ca0df6a7556088ad\n0xb42da6cf626cda51fe7be7a6\n0x6fe2276cb021a13733f1dca8\n0xe79fe46439225df1659443c\n0x7da446a4a006dd66fe9d9db7\n0xc2c723aa66616f7b8d1ef656\n0x6a2aa1d7b6b5cda085d899bd\n0x7bab933fe165daae93774be\n0x7a43ae481c8c6295091806a2\n0x787c450c96af098bebd04e36\n0x19af9bbd357345bbf0a1f332\n0x19f7cca4d6652c420069e4d7\n0x2ac245e15611278116658b7\n0x2a0c1178f69a9e61bd1de823\n0x51576c0736bcf5f47cc3034a\n0x638aa4b64248d8c6f4e9fae\n0xbd5527309cb202a1cd7e1677\n0xc03e6034195eaceb5242588d\n0x2cd54fa967bc5aec48dab2b3\n0x17d20db88e741e7f58ac6f35\n0x3176a806485996f0c15a0777\n0x6952b8db65c879dc5a94585b\n0xc653daed721ed2c01b3d6c74\n0x9ae8b314472589804a0255e\n0x97a94797fe6714e1e6062e6f\n0xf2d18b7c0b38840535a0c577\n0x511f582f6c7bcfebcfbe2c8c\n0x1728fdd1fd61e27fbf8611e0\n0x5350f4b67ecddb930c3398\n0xb424ebf1ede628035272af94\n0x2cd29250b112f5be8be08dc8\n0xc13e634bc370b9c6ada592a\n0xce33889838d9a2c7edff5347\n0x394d10658aa19619a081fe50\n0xad492afc386e0c8174e90c0\n0x9d7e3a690fae39de6490161\n0x2a25d4ac95afefebd60ee5a4\n0x1dfe96f05d43cbadae7c0168\n0x129dda50525364b09117220e\n0x1321edd881b500266e1d8631\n0x45878dc39c9a9a4d9cf4911b\n0x13549554ce47c22e74980f49\n0xb8594911b1bb12babd418d7f\n0x14553563ff4874458c752e87\n0x40def502b284e6565234e996\n0xadc615502d2b03140d6662ce\n0x76ece3b6e86c7de43a93674b\n0x15282e150fff5cb23584145c\n0x9985106ef445a6b12c81ffdb\n0xb504c019aa03b5a209634f15\n0x63b5a6a88dc5ef3a683802a0\n0x129ad6d12745ece674e19424\n0x32a11c0a231e12bc88470e61\n0xd752ffeace8cd4948dabb91e\n0x1a1d7e6b8146c5e9c98ef4b4\n0xebfc531277e58840b4e1225\n0x540a4e96f6b84176c166c158\n0xd0a541d7777906ea0f0ee756\n0xbf7452d8dcd843cbfdb2ce0d\n0x1979213d86913dcf107c78fc\n0xb6771961336f271367c82968\n0xe88b239a165e7327fd04f92\n0x1ad2705c8c3ef7e3ba577b8d\n0x114819a927f0971a7ed7cc8a\n0xa60aa6f2a17e782ef30976cc\n0xb7fcace6007b3a3a9d9d7ed4\n0x89b8b259cad8845b9affd179\n0x8f43e0ab384307c79b4d49\n0x85987935606cdbd3751ac903\n0x4602c28ef2faaf4f966ebd34\n0x48aa8a4f92c43e4f6570a845\n0x8dc60a6ee0f4c49f6f8b78e\n0x9867f7e53c55b3c89bfc4319\n0x7b56cccb6188e50d20ffcb05\n0x9225ce4c5cfad6e117828f8f\n0x14009a403b4d0a3cc8b2b524\n0x4872f54608966fc7cdbe9bf2\n0x4990fe1f90efd5db8f8e787d\n0x1abae2766b8a379098c0002a\n0x15678e57768d19820853e70e\n0x329a9144e2dafd94b3ab2e2a\n0xf7407f7d34bee94fa27292be\n0x1847a74a128a74167e656d12\n0xd723a89aed951fc00a19e08\n0xc37c2729d538fe3dfdae0fe2\n0x9872cd6de3b2ee00baa18c5c\n0xb18bcf72775eda282e0383ab\n0xc93a448469c802ecafabf9f\n0xa9e4d443c5676d273227e6bc\n0x4d0ec3ba4432ac2ca5b46860\n0x4ac8563b996093026b182d6c\n0x19fa62b2b2d247a0fb741f91\n0x60e2a3fc0a86e9e5abfa9608\n0xd712e08c6b6cec4b770a822f\n0x9fbdc4f66bf3a7bad1ab491e\n0x3bc641f0c9539748282919c\n0xa2a8e54d39d26afa03f6ba13\n0xe75a5a9d5c59dd29cc12407c\n0x1909f742e9197f204affa83f\n0x3073f7fe9e0b1ee156b7af9\n0xc6d1132402a7e78180d8d01e\n0x96f48eadd5f0143a9ab9a96f\n0xadbb91f39a8a8e1a947524b\n0x4036fe7bb537efeddcd0e24\n0x52d1cbb6188eae9d026c306f\n0x1c0f6f721ae5f24b4b2d0bcc\n0xb6a3c9e169620dfd5bd25dda\n0x172364766c6c72d78315f20\n0x7693bc085a35c89463bda76d\n0x66329b5863fc7c21250440cb\n0x21f1abcd76b756b9277735e1\n0x19c887936c4524b0914af0a4\n0x31300cec396998806fe3be66\n0x12bbe84b5074a53053f155c\n0xf00251b33a361f7346d8c1cd\n0x9fe4ccec6ed108022ba7f75\n0xe590f4d2afc8bf1180d4d486\n0x9d8542c98c38a578051c6a33\n0x192bddb013f3bb65ab31bf03\n0xbfb67a28e4f5747f41487b1\n0xb7aa9d9492743fe5329623a5\n0xa42686eb702b2dec569da784\n0x78a456c243c746e8ab54f016\n0xfd18916ed2aca6fd4aa5a16\n0x30d77a6612fcfea60b1e4b5f\n0xbb05e614bba4d6e926a4b523\n0xfef7d4fc2eb756f4d7ea88df\n0x42bba678184aa74800e56a5\n0xf43ec692ef89cc5d449d497e\n0xfadbbead9e4687ae60373fb5\n0x6bc34e20c56bcf955fce79ba\n0x3c8325df114b947391524fd\n0x21f59891f0d52f05c6100ad8\n0x4784c9355b078a75012eb1bf\n0x43914eca80745bb9f6bec0e1\n0x15722c6307b1628fb975b41a\n0xec72ff80525e5c70c9d1bd4a\n0x8e42006faf28e2990237dad4\n0x2ed6a33846d3552e768932af\n0x111c12479881295b814e81ac\n0xdbd72c792c082f6747891bb0\n0xc2d759dd5ec9235d38e3c5d3\n0x6ca6622e82a2fba5ec820f00\n0x16c422ceea0f1329f4fe0cd6\n0xc19ffd3b63a4ab918b2027b0\n0x24563cf633dc6323ceba41e2\n0xc892819947f581e0f9183a87\n0x14d703f8cbd2af52c968e21b\n0x4d00a18f83b71e649196f393\n0xb28cc16b3c3bd469952f8fc0\n0x8dc75cedc83451555955b0e7\n0x2a321acfde421ee4afd976\n0x61b338b464a0d5751bcbeaea\n0xbc5111e97cce967e0b9aae44\n0x890b5ea6b8f72bb1cf7746f\n0x13f615596dd85849c99944ce\n0x88bfd1fed991e253e5b589a7\n0xf28a522933a58841de9a46a4\n0x89bf8390998fdb883a197297\n0x1946ef4158ba40df22629f4a\n0x3157c60e8d78b159a41a59c2\n0x5b75132a35e3e5e43d7c4de8\n0x310a31c49be4511b0dd43f1b\n0xdf823bb6d5cd7de7e54522f\n0xcd466f87de258bc073c00698\n0x3c5f1e3da79bfb9bb7eead0c\n0x66c1380f637c3dbd2c1a26f2\n0x13ed4052dbb639229bede5f1\n0xdc535f3e6fe2692dac6f52a1\n0x6d026d0b9fa25ddb069bb6cf\n0x983be3454d4b43d25a76bff3\n0x4d99c46c2167963c3efab66\n0xa8280d24bf5754f22dde84c2\n0xac8b475de2e48ef78f31a47b\n0xc3cf1f8f3f5ff0566c8cdce7\n0x7fc628ff657e9451d5b1a20\n0x6a67cebbab491359c433a612\n0xc9d19fece099a64f516cef32\n0x43c518642ac750f3adab61e5\n0x729aa45df4e851244136155\n0x7e6048df16daecc19eef6ad\n0x5263520da87c74f11f2fbd9\n0x71bd561295051a614b49ee98\n0x68b2490217bd4d6e6bf63a0\n0x3667be34018fad05d9fe2915\n0x1d22bf1e2c723a43b59bd010\n0x835b39c0d84dd89a69707096\n0x13405611a9d5378602929260\n0x7886182dabdd22ae17be7190\n0xf54d993ab7e1774faa93d33e\n0xe3ea9f8eb38bb4d6206856c0\n0x17b837390df6c706a00df6f0\n0x23d840c60fa54509b75ec765\n0x7cad73825be0cd5f5457542e\n0xaf090776ad8afd7cd6d4cdc9\n0x45a1c7d90cbf58845b21a2f\n0x632f5bfe7ba14cc819383bce\n0xb36d7ba1e5bcaaf48cb2ef26\n0xa70b28fe57b57fa94d7c85dc\n0xe2b7c61ee6ade0f6b60c6ca\n0x182a05cbe2dab199655d4f2c\n0xb9b23a99776b7d63971274f5\n0x8eeccc1bde13aee5737ba9f5\n0xef37cd5633188fb170796cb\n0x68eae636427081009311edaa\n0x3fb484e5f8ec68b4f64d6761\n0xbd5956be60f46f8a150abaa9\n0x1f91b1310774020f1fdebe\n0x1eee657d3fb935a64cc66a85\n0xbfecc9b389653a29702f341b\n0x9fe5737b4f3c7c6331d5683f\n0x4a1f71001db2cfe556ad8ec\n0x47c2b26dab551ce6f271dd79\n0x56a0cb719da30e857c5c72ec\n0xb6acd47e95aa95af8dc9fd88\n0x128a9325ce2bea3b1b68c90b\n0x7a9962a5e7f5599dce8eab13\n0x82aff3bfd0aa6b353b75690\n0x6fcb25612903343bd14d029b\n0x679eae82c03b57a33bfae22\n0xb8c20e6c56f5622acd07568e\n0xcb2b888617f23b2a87f2f20c\n0xbfc16be6a41239575736a291\n0xaf88e06d11af082d2f94215\n0x20b0cb51fb09d4ac8f0f6679\n0x49b465f7db9c9e21ab16378f\n0xb183c0bd89a18613ee12a030\n0x140ffa18cf3a3762a45092eb\n0x16485dc27568d8342cba1437\n0xcbea14d047dd7aa552283518\n0x5fc2f229b6f7c087f69f2f1e\n0x102de35a054d4c78197b1f5d\n0xbd451fe7fffa3dd9d0cad876\n0x28038c184c4f72653ecc5302\n0x45bcdf6564e33c5cd28b5bbb\n0x15cfcd28545da71c477f614\n0x4d4fb0bbbe3e261aabad9b3d\n0x3e003026e679ba9d1d37cd11\n0x82b6b674aad91526c929ccd0\n0x88a3d906eaf7c5895b6fc11\n0x164d61a54e1720f9a761214c\n0xff9e9886df18c8539394608f\n0xd5483f1135851bc921a699f2\n0xfec80084ff46ad25edbb7cd\n0x367818df930217c393d638d\n0xdf6e5eef8a2821d4420b759\n0x84dc31d6fbcef5af84d3d328\n0x119db491f3093e34208b365f\n0xfb166fc1492072661da84b14\n0xd8159393169d1d691291c9bf\n0xb1c3d173b3e6146e2aab4d92\n0x181f0ebd5f61e401b8af3d70\n0x8de90d02b9bb7cabb5902b57\n0xa51172a60e0db6c442dc9456\n0xba295f2d33cf946242c324d0\n0x8ba3821b4786e0a163603d0\n0x7338e6375b19fe823cce0113\n0x3e1f0e1a91be1557416ef688\n0xf1977e6788419f2d86cce276\n0x17ce7f922a9e6666ad76e1d2\n0x27d9372d6c64d31fc0f0bfd5\n0x6a2f81b2f5630f33ea1b3a85\n0x6931a17f07f707fd26a4811b\n0xeae050b1babeaae594c9b5d\n0x45b282649ab6cf5cc5fda2df\n0xc6223e090dd63aa45a149c08\n0x173a0dc23c52bb228b3b461d\n0x17c2cac59dd30e4f010d4615\n0x3dded29f5e3001e34dd222d8\n0xbd734d2ddfb0b13241654765\n0x2a7e510012cacac6c1bb975b\n0x26c13ee502def7d80c23d2b\n0x9abd28946c5fd4cced8e1b5f\n0x77328440c38816138a459c1a\n0x297133572129d1929ea2e8b5\n0xd0196882e4725b3775d44d0\n0xc75998710fd8db3d6e0fb7cf\n0x2d8bf2d5fcea72ac03be90ff\n0xb178443d411b77ec8dd8448c\n0x563c0069dd480dfbea22f22\n0xcb9165c19aa3adea9d160539\n0x7788a43a7fff17e2ff4be7cf\n0xe2f87a0265130d15712fd4fb\n0xc90a3759463911c89a577c9\n0x590dda60289b256126b2f42a\n0xbb4e2efe860923dd20fcea06\n0xdc472d85210d6efda4976916\n0x152b5c0beb8e90b462fe5876\n0xc218439279361e2bda02b5a2\n0x62f0f121a2fc0ac555d8956e\n0x476c3bf7a54d471e0dc968e0\n0x14124dff608a9a0b03c78ede\n0x9885e9d430a07731227a3982\n0xfe2a5a3aae43ed63337a7d26\n0x4ad82dbec277319f46b3da0d\n0xce4caddc20ea1f3170c58ac\n0x2dceda9bf09b6814c45e1de3\n0x8c1307512718d0836bf8c246\n0x683b95728d7166ec55509644\n0xe869a808c1c76e5863fad9a\n0xa1f08575f7d6cee2cc771693\n0xfcfdd139a81d1a57ba8d76f\n0x74552ff4b984032604368acd\n0x819322c35c7556eb61df2da\n0x81874b0c2dc12c4a22cc535d\n0xea545153516dff99aad06cbd\n0xabfda3517f353aa9d83b8c6f\n0x1374586534f02e740e9db897\n0x2553b61377987c269bf738aa\n0xcb1f83ace3b47a51ebb85ebc\n0xa01b03f110920625aaa23eae\n0x16cd02c32141d3feb331040\n0x735b13df44bc43b4e2102fc6\n0xcc67114050b144a0b041d5e6\n0xa5824e118d13c0f9ed936b9b\n0x140fb885e71f952a0e85f106\n0xbfc373f4fd2effdd9c056c9b\n0x3405116914cc1f212d89a1cf\n0xe292cc51657cd7a42faac802\n0xeea654a7e28ec544efb58d\n0x5c2b10a91e14b48929e8a4f4\n0x139578a901113ac58aea3be7\n0xd2847c08c837edeec5a938da\n0xe9097f0ef6fcdd48a9b7e26\n0xd131d05eaab271e934993875\n0x7800b3258f08cd0d2ef77994\n0xf49c59a3aa65fd77f18f7b32\n0x7355bddbb91f8752d286052\n0x361aa6a9abd82b5383ed15f1\n0xb280bd6cf573d574d4a95c22\n0xd6b0319713737e043f3426e8\n0x3037bf4bf601127b3d52bb6\n0xa1b6f7060e0d19b42aac33b0\n0xabec2460a75a165dccdc5759\n0xc11767424240968ceab2057\n0x195dba68a2d2713186f35656\n0xd0892c47f592ca7374087ddc\n0x20e9996997f604c5381d72de\n0xe0e11739dc09a768cdc1130f\n0xe6d18c9728a6bdfd3e04fe7\n0xb273f7fd358e502ffd45eaf3\n0x5a0b7e93032c810cc4d41263\n0xd672756d49308de97a1cf31\n0x6b722d4af6751925e000128\n0xff5f587d628f359829b78b61\n0x842d96e4266af4c9bada25be\n0x1ec7d9699f24448cc5b1be64\n0xd17d25d7bc72b5967b7b9bd\n0x2853f459fd51d683d20a520a\n0xe1ce4e54be97d07a4f156792\n0x43d0a72eda991c00f70d3503\n0x17092484223866e9b1d1272e\n0xa576590157e34e64ab778acc\n0xdf855f910a86413f23d6788f\n0x4bddf315f5b5b2390288867f\n0x11124cf7aabbf15561c94755\n0x7f5ebf1ada1ced6839331f9f\n0x54a69709d8d70eb780d88c43\n0x9f4ced0247e01dad81943144\n0x5850d991cfaeaffbc8f9bb\n0xc677ea3487b23b9235c99348\n0xc64d16719a7d8c0227483d3\n0xc910e14d2b8dfbcab89268b2\n0xaa62272331d52202302cd50\n0x7885bb0c17b11ab86133c566\n0xbe2fea0b45e1821a0d231902\n0x85c8561413d7d441004982d1\n0x263dc5ae3693ad15be57b94\n0xdd8d9c3934032bf5504df837\n0xa0ad313a34e0da8e9680b86a\n0x4e18301e23ed2dddeafcb64a\n0x13da6a19137d1c5877e7326f\n0xd530c6c71558db8751e1f7d3\n0x4db891f20e3dfbe908af75bd\n0x2f19b08537f35b0d6614e2d\n0x1056894cb73ceafc2670f6f1\n0x68c8fd83ab02d98f703084ad\n0x42c74bba51921e6924c286c8\n0xb2782d1e9d6303a8561284d3\n0x148f7c611a6c3530a6e5dcc1\n0x76e3bb30d914e6b25fb6bb7d\n0x8cb91df9af5fc93f7c556454\n0x8f96b616061f0b9d3c92ac65\n0x16aa935cd4b0f4786c49c9c8\n0x1982daf7efbb6b3d2bcafd78\n0xf6959a27f8062237630c5da0\n0x9f03b1a07fb2681464243c77\n0xd767fb303d3c51d9c4d421f\n0x6f8d4761ee59c08b21658165\n0x27eea9910be563a875906066\n0x9eef5ea7104f9d9aeeba0a99\n0x8a089fef759c53e7e9b9035\n0xa86a4066920d9f1b912f0f36\n0x3ea4c86be7211f0023f39157\n0x9e3b85a11d9ea981a99c766\n0x18f986add7d1bfd1ab582725\n0xa93bc02a0086f716887d90f3\n0x193fc99bf3fb243d7f755d28\n0x2b940a9be986e4fe0b93f62a\n0x3d03e6f585eda74b9fe5733\n0x993ba8582127de3d44e86d2f\n0x78478a6f4668c867b0719c5b\n0xa38fc11d4674b1ab5e8ce257\n0xc1ccb51a1cbcac57b5b8c8\n0x5034b44744c7a4c59afaf79c\n0x1c08c747c2d4642ec35d45fe\n0x8f8ab0e2a42c8b1b0cce8853\n0x184cac01576df2492ec66f83\n0x97f43148263e074299a25c3e\n0x9af133cc9cd7beb458a36747\n0x70210b6ecdac50d284e19784\n0x11093b786d47d434aaa264cc\n0x9e560b8eb594323da75fb372\n0x2dd94ae09d3b7df94b3d9e83\n0x3263b2a9c0c5b8852d5e7555\n0xec87353c53d0ac2dff106a1\n0xe456d88fb84b2bb2e88f8576\n0x9ae005f02234f2b7e0b221ea\n0xf2d290e0809cdf6231741e32\n0xfef98ed0210fa77e5d15d85\n0xae1fdc8c456d713cd9864e96\n0x61c217c4bbb61f52fb264dff\n0xffaa65d8199441f2595c2433\n0xf1320acb0e70b097b042b7b\n0x8e1313a8f8b0c3c60c95058d\n0xc433f92f53a950c5e6418c6f\n0x16141fce26ec25411cc2714c\n0x147d332177f02a9082fc84b3\n0x99a2774bdfd30d681c754707\n0x529299c10af451c16df3cc2\n0xe3e4e5cf12063e0553b6cb42\n0x144c02a8042e318f53bdddac\n0x973bd9158bcd685ea3e4041f\n0xa89ae5fca3bc49c79d54c665\n0xb573ff4b6f90263a75920b05\n0x24e72181b324911d4433dfa\n0xcbcdeed5d78b5b06a269d141\n0xe52bbf65fcf075d8f55d859f\n0x3b8781d1caa8d7c7bd7f7f8a\n0xc39800fbaf956b32b81bf1f\n0x703535999757643c3ee668a9\n0xab684d1f0b83439116c0dbdf\n0x9f87223b1c2102f9c892470a\n0xcca6386c6b17891d1f01971\n0xecf04e59922d94333d1380ab\n0xff98bdfa8b8e91203f3f9fed\n0x9005825bcc57ebcf24b7da8c\n0x16564badf5baeb8c8f4df13f\n0xe9ee269931e0202673b37535\n0x7539d0141b90c92c714a8b41\n0xaf536aa8b31ea7ae483cee38\n0x3a721f43a91ebc055b40b78\n0x9e2933b407286a33c96ddc6b\n0xfe4060cc01b66cbba3442fb8\n0x46a63927a8f747f799df0a40\n0xc950c6f05d4d7eb612f868d\n0x5640b7a9b8d29e27ed626254\n0x6da332036e80389efe3984ba\n0xed0962ab54c56b2954cc302e\n0xf6a85699962897d8794b65d\n0x65b65443dd23fa5337b430e4\n0xee272a0f0d75131496cbf489\n0x3b795dfa68ceca330dbab426\n0xe665d6b1434eb8209ee219f\n0x4df9662eff0a6f22c0bba681\n0xbb7c09429692c1adb54a7281\n0x7609e149a48ccc53b506f74d\n0xf9fb493c05e4cf1fed29ea2\n0x6e7cd4e5ea8a2b0c995bbef3\n0x51e1bf0d7452c1cabdc03044\n0xcd9be2a26964104b377807cd\n0x52446b524fcf2098c8e711c\n0x71a77849fb4f01894af7e584\n0x3126031da0984bd3457506a5\n0xce94a095aa6035aed4f9a05a\n0x3fe1b75d6911eedbf4b3b85\n0xd7673e301e5e0cc0bcffd462\n0x6c474f3ad9110875d3e5c011\n0xa66f3361e0c8f1f660146a4d\n0x9637208505832942969e4\n0xafe8bd0a87c82016f4a2738c\n0xa6c8f7f6d274c5808a18d8cf\n0x80458c8cb5d1602bf0404d68\n0xd4bd9d75ee13f1b75db0855\n0xb3dac9642aebb4354d1e71ab\n0xb051f341e9db010a4c76a996\n0xc2065d49203b8b1eeabf2398\n0x60bee19036199a62d66c02c\n0x50cef14aae1d7ac975e79af8\n0x19b5f35f92177ff406e60294\n0x9bed766f87642423ae350533\n0x125c8367a07e41ce9db529dd\n0x1130956816deb3cc43dc013b\n0xd1d3fc983290fa940aa86bbc\n0xe6d8dbd5e0967c3476951855\n0x147f9c695ae305b463e2b092\n0x8f806aebfb7892e9296a8f28\n0x4f94f2569136b43b95122d4e\n0x202f80239e940815486486e6\n0x178dd2d49924da801db8907f\n0x2ac5335f791cffbcd9cd5786\n0xb8974e1f447eb1bdcf2843c2\n0x4c25dfe3ad6046554b8cc754\n0xf0ad985e96df2080e19fc98\n0xe38b325051dc904654b21ba8\n0xd3da5041419d8990b59885b9\n0x1cad5a98190052a198cc7d14\n0xceebb061a38eb6268282e90\n0x4df750d85773e1259b125b6b\n0x2f7b1d128ae6707bc1dcb557\n0xa754c6aea2e0e43fe54bde78\n0x133ef53402d2f4be429b7ab6\n0x8592f8f66b3d8dac763f6970\n0x8602686a00288ee9868bfddc\n0xd7892e4a9a9b8c13eaf1dcfa\n0xc6874e7396cd6f057eed1ce\n0xdc3545d25d30cb04957ae683\n0x66c32eb36cef9a280d07be63\n0xecb945258ed9b0785b3048b2\n0xc1e5f9c179bd40d62b62f5f\n0x26f99f322d08b7d8604ca4e1\n0xee4ba03890dee1700ed746c3\n0xd805fa892c80c952ba0a449c\n0x114499c1b17f0adf92a14b6c\n0x7401deea71bf473439c3c062\n0x9bbb5a665dc3a0508b268d7c\n0x619509c5d8eef42e062417b1\n0xaec4a0a3b4325892679278d\n0xf807257b7e176f88bffa15d7\n0x34458ab238e8d831373d8496\n0xa5b75e204c339c76cd049032\n0x5376d5c69f3fb2e1b05366b\n0x2fb53b2114c34f13ae497d64\n0x177b477731d692fd0c742b37\n0x9c2e484a829ba8977925669f\n0xc04c760591bf05cfcc975a9\n0xdca602d806036e0266b318a6\n0x22b0785142d747112d3a8e5f\n0x40e8c7feffa0d9a3e1512f9b\n0x176b522f0c8f5da7038297fb\n0xda68079f9f662f0eee82df59\n0x739c34cd1a45e645be85fda5\n0x8b8a27d1a97f0e20e178d4ea\n0x4f744f32135730024448907\n0xff8da922a9aa63a3afd9e423\n0x3db73494f1a0a183b3159af2\n0x9ece22ab479faaa5b1e0cda0\n0x170c7f49e4ddeeb79191413e\n0x1d311ad39f324fc778759e1a\n0x4de7cc8655c6e877d70e7bd4\n0xe0fcae84a0abcdbb2a34b03\n0xd880991b88a1ae2956a10a5\n0x775c1e1199e7c485d8feeed5\n0xdbbab2c48cc50f6f5049c97d\n0xe53629739a3edd6e618769c4\n0x67a3ad2bdbc272fa3e59d57\n0xb75284ca964dc9cfd4025a8b\n0xc1d8322731bd60defd50db5e\n0x5b4c649da01c921eef265b8\n0x18a4d30444dbee19c130eab6\n0x54855ea89eec3d0daf6d8f2e\n0x63dcf72aaf18d6722bcdf565\n0xb53d09fd4852c1b61cc0202\n0x356d700747ef0e09e3769b\n0xc5100b501c60134d5a0fcee9\n0x26522e62f1ec0a2ddb8170e4\n0x107a67dcdf03fbe05d1819e8\n0x10749ad03138f47e5b5f854e\n0xf954f89915215d4fc8ecfdc1\n0x186b547c3252f094cb0ef7d8\n0xb70ded3a1072677e2d276915\n0x8c951c8643d52c9382fc303\n0x2db675b898634472f901d141\n0xf54a7942840fee4c2bbd1b7\n0x3e465726ea2c89a440ce0df7\n0x96fabe0871918b4b2525db9\n0xf2f1f4e3cf9df599b57fbe20\n0x261b56781bf3dc9dcdac19c6\n0xb385561759e7914a92198ac2\n0x78459a57e37d1eb4c76ee22\n0xa066c694bc9d585f136941b9\n0x5058fd2fdecaa53a1329979\n0xaa2222bbd1bdd3a2ce8edbce\n0x5ca4f6fa3aa584aa9aae13f\n0x97d7bfa8338c3b3c4a7900c\n0xd4c8353a4afe7b767254fab1\n0x50610b5b175b7174e31378cb\n0x771a38f0ab2a499ac0b1bc4\n0x7233a1bf5ca64ecb62bf6e1d\n0xc0201177f6645bac8a3620a1\n0xcc75542bf3dd67ac0ad14352\n0x10af9d96d505374fd38b6474\n0x6bf5f6014e60f7902dc2a001\n0xe058be0de84596eca24faa95\n0xf5fdacfdd66b8e8f936cb825\n0xac90a0b2f0d3d6450b067be\n0xdf06660a7367f8cc5383b7e\n0x80b693fb2f868bd2feddfd1a\n0x4cfad57db501f40d5561d83a\n0x1329a4650fce91b05028545\n0x6c533c2b6a686ea43df8c7fd\n0xa42a6fc208ff0bb3a8fa87e7\n0xd16f331d71a4c2cada57917d\n0x14500f61b20750be8532c73f\n0x2d8c0afe2355c4b354d8fc84\n0xf61d4c52faf00149fcf2a240\n0x669bad2fd1361ae4fdf56c31\n0x468f3fb92e2571cf10f8d2c\n0xa4aead13391667bad3d0f457\n0xe90d7ce93dd7545970406b67\n0xe08e6999c256a2601ed14adb\n0x99b476819a2b650f795014f\n0xa5a3b4385350d985696b9bad\n0xfa01ab52cf07d367726dbed\n0x3c19e7cc4f97d4fca2da2446\n0x15c81c9df22a475f648ebfcc\n0x12a1e0ab7bdf6e0b50550407\n0xd869f497f7a123142b4c255d\n0x5cdd374bdb8409d57621a2c\n0x12e0f3eeed040ef92637346a\n0xfd2a238341f9204ecd90f0c0\n0x181a467c8caa22b866002f28\n0x8ac7ce17241d275eaff9d203\n0x138d014f57607de04923f8e8\n0x5728a191a39c640cf7280e2d\n0xefed21d0f65a1517116a9fd1\n0x684d2d84dfd2f13a3066a055\n0x2d801ce72fa6c48a65fdc9f\n0x670cff01c61f495dda468b2b\n0x32ddfb881b846af560bab0f5\n0xdf1d9c24d1946542b6d5d14d\n0x8799922cfdc5252dcc35cba\n0x9cc68edc89d0f0c00f7be456\n0x596611aa6a70d31f5907ff6b\n0x25b155b05e98679ea32a1264\n0x121f9827f1e1eee1076a56c5\n0xb866614291fd98bcf3b0e411\n0x37dc94e3f7f3b70da0f48fb4\n0xb8e763071fd1e5ab677740ad\n0x6c022c569fd06e75cf68b6f\n0x2ae3bd06bb5db8de07470694\n0x52b334ee4d68005ce9438b6\n0xabf16dd031e79080e0321892\n0x341f467607a44476ed1e3e4\n0xc67f705cfe2de13199899f02\n0x3ff20e80a010a4ab5351de27\n0xe9cce42d99e50d7de7f30255\n0x151ed53572cb8483810d3fb5\n0x29bebf19f9ef51ca206365a9\n0xbcef70dc016563e8cc9c1063\n0x2f06a435fde08403690b1635\n0x1352574123d37cb4f2c4d873\n0xe4cc9729c5c8176ff03919d2\n0x89b881a6d34be6d7cc91f8ef\n0x9822ab5cf28cb3b5d08af1f0\n0x109174e665c3b9bd31361fac\n0xebe82239f11ed64c6eb65107\n0x9c1742ea8e2dcb324009f316\n0xef4f22bc75d3d52a911a18fe\n0x1921b38ff435ade5ad929e04\n0xc070ffb529f8865c2e827d44\n0x2e6f5141e526d9c055ec14ab\n0x8525467151d86f459a12a3bf\n0x16afa65d2b27a52eefc8f1d1\n0x351606e861fb7a0ec7b87dcd\n0x90436bd8e81c2a183a80835d\n0x584d2751f04e112f07f80a9b\n0x115265de45f148c56aa24207\n0xa9847326ffc9b2d5023647dc\n0xd0f94be9f2ac9e7d895dcc28\n0x71a13051b4d36f1dfb1f1143\n0x1620c9f44d72e49383e4913b\n0xa103a1025f4ed0fba06a2158\n0xc86f8c697d223cd582e68d6a\n0xd172dbef2c6e851673b97c0\n0x1e710030de2a64b36ac4d4c\n0xc4b55b82e4baac09ae5122b7\n0xe5dae10d0d46912687b46f58\n0xb92492631a29aa8f4b02c2f4\n0x1321dcdd8e95f52cf01785d4\n0x7a11d24c13176414a736746d\n0x2caaed1755e6449486f04970\n0xdc38b416eba365f5ec0c8b35\n0x67dfafc8988e196d8b0a432\n0xb91b03a7b76f60a9e1786e04\n0xc84e7432f2f1c9bdd007ceb3\n0x9b5b72797ebb5802e6a7f061\n0x138d31f385059365c67c2f1a\n0x20d874c4c24b32082eeef7da\n0x18063996bff896374a4d3921\n0xf3b608b5f6cb567aa4e3f6d8\n0x15d175c03d5919ea1896c875\n0xb8b3bcae2aa4d37a0b41058a\n0x1dd5320659db7c1ef2972ddb\n0xd0b58c3f9e92cd271e9f63bb\n0x4dcaac6112b4e9a843ba04c\n0x8ef3a4f414c1d5274f106d7\n0x220fd8dce5cb981e063b0645\n0xdd9dbd2c110ce0644e055100\n0x94af03780afdb5f8d84e57a\n0xbedc8ff4a5487eeab5a5f048\n0x84b902634c7f46c0c12d8656\n0x8702251c15d5ff401dc4dc25\n0x808e78d23fa891f03f91abd\n0x2002a244d1211db131c09e\n0x1fef0384003594172fb3a8c\n0x76ede82c53625d6fbda44e11\n0x12a6a0fe5253ab9039661fa1\n0x8b55dab4abf8e45c95ee63c4\n0xcf6a6f6f1fb8e73d64352cbe\n0xdef9716794b54402afef4d3f\n0xeeb903180b8a2e557a4af4\n0x537ec3278f7810b4cefda99e\n0xb4132b26b0ed3ca62bda3e75\n0x94bf76cda08f6a4b8a574195\n0xa17cde4ea283b6ef30d1b71\n0x39fd143667433771f7b289ba\n0xe1303b0ef3973bd284fdce1e\n0xb29708833845054d87e922ba\n0xfce3cd740526e3185cfc5c5\n0x436e9e05bc0502d03ca363a\n0x5a4799eb94cf8b4b4331a202\n0x78160a91498f380c69bb6eb0\n0x110f69dcffe119fd0875353a\n0xf3c6eb4d79deaf0843de9bf\n0xcff560901bb829e6e7261abb\n0x3127fadf8fbc676a4ee8fd7d\n0xe5b554fd519aa322898a4eb\n0x884908e6eedc26e373862ae1\n0x89bc419a8005f2db0a01be8a\n0x6fa2f95b09f9cbdbfe5fff7f\n0x5314a63c085e706d2e2202f\n0x4fdae04bd3360dea65d73d75\n0x70ec334f382394b6b28c79b5\n0x41e8e6b823247a3a3e827633\n0xe883dd916120c33dfdda695\n0xd41a1e2521072515921ca082\n0xa7e2ead7dc2eb809fb9ecfde\n0xac67201870fffa6be685ef01\n0x12b9ee87d415b1662645de71\n0xc655452f49a4190ae8a9a013\n0xfab22cb8e9d448fd2c7ef248\n0xbebced3d7a7f951b11f2243a\n0xe943de0458817998f402cf3\n0xa4b0198ec9cdfc1a44eafbf5\n0x237467765eba67064175eb8a\n0xfa2962b06cd8dbdff3757083\n0x155cf302dbaf0c2ff0e290a4\n0xdad160520bb76d34bc7ac56e\n0xc855410352eb70645c14e20a\n0x66f3f75e772a417014b2ef42\n0x7b32960c0547f45df540f3b\n0xcecccd927f17cd0d7e2fd94a\n0x7430e5fcc06cbff815685b68\n0x241cfbc7b569ba83f51adb03\n0x6cf06d0bfdf01ccc1e9923\n0xfa480673f3d339d55a0dffab\n0xccebb577e7da5ea8afd7f477\n0xb363d14772facfd45f0fda67\n0xb8c79f10b95c089247d2911\n0xe11facc3380e907d1905eb5a\n0xa752398a6d6e2b322fbd30eb\n0x19215a992f15c77abc7c2443\n0x15e6d566e6540ea4036064bc\n0x4ca89824862b0fe128878c35\n0xabc3be287601c51685948172\n0x9ff5adbcbf4a27f8c6f750ee\n0x160ad5044014c6d66fc3a031\n0xe3873061258ebb44fcc7f959\n0x2594534daeed0e02e90b47ba\n0xe275f0af0689907bffce9d52\n0x5aeba7b852857163c041313\n0x8990d72606d06cfb07f39e05\n0xccd85231fbbea75fab1a4e6a\n0x2cbd27d04a7e9f1351e4a2e5\n0xaca6a92ea0a52e6a7d1621e\n0x66b0ab70d85ffca67d6c6cf8\n0x9360da42861634bd1a4809a3\n0x1a20de65749bc5ce672f8907\n0x17ef401bab06528e273b6d8a\n0xb9532fe5ef4c33ed0ca61660\n0x3950b0e59e1f7f552e2d2ada\n0x8adf86718b6d46d5bb9fe2bb\n0x451fe4ad43a5b0c7ac79fde\n0x341618402c7477d82a3e8f7\n0xd2d03885bffe9f28a198740c\n0xa54c4ab00dee78513e0c7017\n0x66934a3c2f3c925cc03d71c\n0xb3b535350ea34023aae0c529\n0x27e128a6c9c9f0f7f9d6fa5d\n0xf53a58a2f7057f569e4d394e\n0xd07b87327ed0e75ad3784f1\n0x5403c59ece0b141294644094\n0xfea6dd2332827003816b9100\n0xb2312cde66ec54ba2d87e44\n0x200015f7e37f5a7e8a0a67c\n0x1d46ccebe54b567bb38e075b\n0x3a87178b9cf2359548aa1606\n0xf1667e939333308781e2c4e0\n0x870807e6cc57d52e3d0eabf\n0x5acfcdd9db060e07b9a5477e\n0xb0b4257a545f96eeb27a5c86\n0xd7ee506751b63cf831539f51\n0xe3d0a5e31737e4ada13d5ae\n0xb1daccdff9e3b02eb99c9bd2\n0xfaf5c851bb84118c8be36734\n0xdbc2a8fed85e659710a74254\n0x1552dd1a48264a780c527907\n0x6d51979690e3d2aa65a251b9\n0x9593d12dbe7c43db738d7b4c\n0x6dcc1481d14fb2d8266ae789\n0x66e46c6cd9446d06df53b48\n0x6605eb435c4ebd0a0497e9b1\n0x2c0f1485ae55ef77e5c64fd4\n0x6b23f4ddc34c92bee932cb91\n0xf99e590bb0dcc278d1e92eb\n0x38a8a4b2e6130276a8b19dc7\n0x40d05a518819b81cadfb3b78\n0x3a0c8d21ec5fee368fd79d04\n0xb1b9e6e496d6e291f68be98\n0x10de27c7b2c14cb5f91c1150\n0x8b6c7ac50a1e90048e8be264\n0xfb48cf939bf1297aad7e9f1c\n0x50aeeafdfc035d1a4c073d6\n0xa0d2ba0a3ea03ea7773493fb\n0x20ea4171d4d15ed88cf15918\n0xf9925a4a7d0d0d870d1b56f4\n0xc2d7729b020a8f27ddf3c83\n0xc2e276cb6342aa83a7b31d17\n0x8d87be19143dfc8cc27b54b\n0xe5c8cfb2c78aa242ee72c877\n0x120959d37365b9016a945c9a\n0x68c891ca823c558703a13eb3\n0x28db14a04676856b21a3138b\n0x6828db1bd87f1d1675d156d5\n0xb90cde6b207f9a48139c002\n0x556b5c2476d7731b33667525\n0x5bc4663e392cba9b1bcd6dae\n0x81789c28a5e5752b4fad3d98\n0x13331c4d551df2a83884c401\n0xb722b7623aad897957a3a7d5\n0x1a1e1de68dc23aec03f59e28\n0xe5c3969c335ba25acefd6dc5\n0x18b032eb2e80f8f3ecd440ea\n0xca5ab8f2e17e99ddcf740364\n0x1bb4295ba6e82e2cc02105cf\n0x68c54cbb1caa5f10b2ffcf3b\n0xd0a465be4b484431f00f290\n0xece10fd1ec2526274e15010\n0x6c38bbc93bff7bc0bd74cc39\n0xd4bddae1344af34c61afa665\n0x91a8ac3544b0c8ba0a8ac63\n0x2a607087e6bde889cc92c185\n0x2c2b0c09c5cde53be312a72f\n0x8995dacde103bfe06e9adad1\n0x15e385af85bc304e647e1e98\n0x1ff945cf1f4e656659401534\n0xee3f4543ae273c970801ea35\n0x127b4a8c1d1e8bcf4dc7fd88\n0x19b6ecdfdffc0df022f91e53\n0xef8f08d9a9a3a555186c4082\n0xa15420c3c7fbc8f058008eb9\n0xbbbae0e5b32afda5cb001417\n0x3b493380cc37fed8e407847\n0x9de98e8f7eaa20374492687\n0x26692ad9779ea3be9203bb9\n0xb0b931202f1ae1fe2bd0bb91\n0x24d431d61375990f5f62100\n0x46c384fd5b5f6d1e6d488e9b\n0x704b9ef14ed96d8f9056eeae\n0xcb18fd31e9b0222cd838db8d\n0xb5fd328065de8d4177b008f\n0x4262a18ddd2c1f1502d2eafa\n0x3827daa77dcc581a34505a4\n0xce3e271ed2a7466e7aae0071\n0x73ca2c922710f6659050689\n0x21f666482f32bbed57a743df\n0xd4d8b0e83f063064c750daaa\n0xf0d23172748599e4858fe7f7\n0x88f96f80dab15366d1d83d\n0xd9ede0bb8860e527d94a1884\n0x1d4c8dc71d2d8cf143c8d3bf\n0x80eb1bacfbf8787c558c53f6\n0x1741af1f725c6363c7c6bcb2\n0x4861fe8dec92bd370b7a69f6\n0xe827f7f9ceba9e9bf234b042\n0x4361d55cecc754bd28244a1c\n0x59693f4b92831da4772aad1\n0x228aa84bf320963354a0b401\n0x5d399f1f448a01e7cdc18e2b\n0xa1dcc1d04adae2a9b9f4b07b\n0xff43651d43c45f8006ac9b0\n0x301f401d0044ca24bb50ac39\n0xb094f06bf5f3ba3bbe28a02a\n0xa0460a94e4ddf85e29f8b5b5\n0xaac48d385c7c3ca094eb988\n0xee1c6bd643ccb67d48d7684\n0x28df8ee1886b8918add3cfd9\n0xd8777029f571eb73fbc16dfb\n0x789a883a46cd2e504b9e3bd\n0xa1c00a4835a213c072d3cf53\n0xeedeaa165713fdfbf4c951b3\n0xee2902c9083f95e71b952de9\n0xcbda3c0f90e33441a3e988a\n0xbd4b7d055184e65bc1b85b3f\n0x8df65bcb933091d8bebbe92\n0xddbfc3e72041ef386eeb079b\n0x6960d39a03f92a588434125\n0xf9b598875ee727152ab98e7d\n0xe5757841771fb6bea7339d08\n0x7781cf2ac78a68b67084542d\n0x1219a95bdac7971b15b180d7\n0x6ef16a573c5721146d0979ba\n0x904a1025c0ff57537b72975e\n0x94fdb9eb6e30dba73d3eed0b\n0xc338cecfce180b763fb1685\n0x45572d56131bfa537024ad45\n0x6692f082680d9071fd4182c3\n0x4faeb73a1c9624107245e1a3\n0xedea3690c207a2ef9c390ce\n0x33bfe449643e1d541cbc56b5\n0x976b98af4009820fcb8e8a57\n0xb798e550dd18aa60556cdc1c\n0x201428bea6b74f62b865d6\n0xd74b277adc178c83fee45707\n0x72d862d7f251be9fecd3a69d\n0x68ff37e498a413d27ee6b663\n0xca234dc81b158dfd5819618\n0x84f225df7e37eb32f03f0509\n0xfa3bc3343d4371228ef1113d\n0x41903d32d08ceda6fac0a379\n0x1172e2624d2b36048913408e\n0xa4e3c3fd41ee83fbc0142bc1\n0x60f28693295aa48fafd1c1a4\n0x76624838875b9549495f45a1\n0x1618e35afe3306ee70533431\n0x4210f45cc94b46acf78cb3ea\n0xb208dec04b525a66290fa42d\n0x98cb20aa43fdfa026fb2930f\n0x14cf86492091441a28da10f6\n0xb6b449e0d806af6997eeac10\n0xdd674f17f8e3ca724ac29c79\n0x2665e77ddbedbf4f1c645d99\n0x1b5ebe85fd62ee54af49fb9\n0x8d6cc2549b02d5fbd0f654c6\n0xe4d816ab5c24b1704b7cbb6b\n0xb0fbc864b4d5daad822e54d5\n0xd9e9a2d00b3a55e2e3886f\n0x15ad97a7231f9cc5b64a32b\n0xaa7fe448d100d812085cd467\n0xf2a5628ce8b2946467d313a7\n0x11ad19a857da6a8ab56f4a86\n0x8c4bdf73df355c01421f8182\n0x9dc32eef4cdb9ec98aff144e\n0x26922bb4d2865680004c8141\n0x2fb02b4b68b5435d65a2efd\n0x6825918c431d7a0ffa0d96c1\n0xfeac80d119fdcb98567b7ba3\n0x583d5ec9aea401431a7c3f31\n0xda98424d575ab17c5bfbbb7\n0x91e6ed1a36ae326c746eeb21\n0x83d32aa99c0b814400cddcc8\n0xc7595efb4abb09cd43e07871\n0x2a08fcdbef8f6f799d6d0a8\n0xe6bcaf5efe34f211e56021c8\n0x715435d8838941f125b89d9f\n0x4c5dcb275d0e9fd274b8a42d\n0x14d9ee7dd39111a000d842c9\n0x2473a5d45c98c970517e0c\n0xaa590fc6a9fc9403d16ffbd9\n0x52b7dc481be04c65a9d5558f\n0x14ee7e6ea9835f4a6091304e\n0x7b0dcf4de2add82d7df24cde\n0x969af8efd70bd3d6ee5e0960\n0xae2067dbcc1f75457578f85d\n0x1169c7296d7cfc96f63c4cf8\n0xea19761673e4cd145bed1c52\n0x37ae47a0d4e3ca14d5171e4d\n0x4e00902b0f862ce85f15263a\n0x3b3e95734339218feff6d93\n0x14a7b22a15b8488531d55845\n0x6be258f5efa5dfab5202c6ff\n0x1755edaff95e1fa193450992\n0x111e9296f51336a02237c841\n0x490e7fb5269fd240e64b8c52\n0xa9a59f806f5e4380f0c7f26d\n0xefe838d37e05b64f5dc2ba04\n0x32751a69e56429db7e137e9\n0xcb4661cedd820a20452acadc\n0xc66fc856d884038da48af1aa\n0xb4de14fbb0494785c3acab26\n0x81e434bac03341a0e9ae4f5\n0x20db3855056411522f6e65\n0x35aab33ab3bc8f699cef1dc5\n0xb890fbcfca8506f8ee5381f5\n0x65892c99f46ece1d6b0666a\n0xd6627b57b66aaf7540ba996b\n0x5435e52f126a40fcf31e4d0d\n0xfd31fd727427275b156b0383\n0xddf99956e61ffd1ed847cab\n0xb97b0b6474aa0ab9a595db84\n0x486576cfd713af7e0bce603b\n0x4256d4e49994aac133cdfd48\n0xaa2d286dbc14dd9d2d009e1\n0xe0e9ea5b9821dcfbede3f645\n0x200c1353d649c96ca05f3017\n0xef78942021efc899e3f2590d\n0xc0de0d61359d39dc570380a\n0x5956dae8d74c705910412f3a\n0x115058d516da3bfccc21cdc7\n0xd468a105687cf57f7e27e02\n0xb144df142443e8115fe7d76\n0x3f7de1171258d8cd75c32919\n0x50f779d02bc3e3177829d67c\n0x4b467fa3376c12393d57b7cb\n0xaa61befb6fc55bf8dcd6cca\n0xb70e7d2e97415aaf11539fc4\n0x92103c3d7a2556134017626b\n0x65b765030eaa8eb97635ec8\n0x17268d1468dfcbb736fd1b89\n0x74e15cf1cea23e511ff494a0\n0xfab1564d9f332b4548c4ef9a\n0x956b8784e64e2a6b981a3881\n0x54f9ebd3d9e22e492c11b7f\n0x4cb892b31de90a5c4796715e\n0xcf20afb0f0b3155a3b19f684\n0x381f50db5a36e3e37cf4bdf4\n0xfe4d276b097b13d9c8f1f4d\n0x827cb41a45da891728a3bfa\n0x854f58b7ec6e75717a428f58\n0xec826b3d2df0550d273ea01a\n0x3b23227f029216f88491f9d\n0x6807985d4258aad164a85091\n0x6443747fad02cfa717e7600c\n0x2ba17ab219dd9fef73beff96\n0x3097b4aeb88fc57b474dce9\n0xaaa4f7150647a2c093e00e9e\n0x918c02140d380f339f73495\n0x87af6b796193cad19ccdc604\n0x5e0366e26ec9047cdc665c9\n0x710d23f4c3e16220d1908b14\n0x841626ec1f4c5159bd47c06a\n0xb1bba595cd1ccce8d4950d7b\n0x15db9dd15060f04f82f303b2\n0xffb506b05a53b985432b8cfd\n0x316d8935c7256a224cb46211\n0x4dd46db269b93f4976c72fdd\n0x11f3d4511b87a205353ddefc\n0x345912c326e9beac55aa1a35\n0x63bf4675e314b188e05bc6d9\n0x54f7f254ddf6e29ce337b56e\n0xafd952170daaeb60e1e1f2d\n0x39e348835f112559ed6a932d\n0xdafe0a8642e856caddd72f9c\n0x312e7e5ccb9a99532dc3ced3\n0x787257c282a95567c628768\n0x76b90aec4a3ba6966ba3146f\n0x177a27be0ff2c774f97e5f99\n0x40abbb46aaf92ce54f1e754e\n0x181b51de1762c4b98845b00c\n0x49a70b4bbcf1b9ca1b9a16b8\n0x4c2a7a2e30a00810338f47e8\n0xe672df4f2e011ba14d3ed18d\n0x19a8c8a013dfbaa736b8c906\n0x11c57b0cb7cb1dc5604c0635\n0xaac6d0cb278a3ed8cda8dc1a\n0x303738158f408b6353cba436\n0x4fd74cf09a15485b148a01\n0x7264d0ae82087536b36b013d\n0x2e9879c37945970a1614f418\n0xb7e1126732e3c80a882a52eb\n0x2990eb06052254ebbe108cd\n0x6f24e6e70b26cd9da28d6b5d\n0xfaf3b171eb8bfdd69d980bba\n0x85f202d6d482f662a16bdc70\n0x10082da093f80e8f61261f0c\n0xfa07b5166098d993eb4bb010\n0xf585d4f5bb840bea850ae714\n0x2bbe46497b3591df52e6c263\n0x1607003f4d271afce583cb47\n0x1fe697864d831c0d4d5b1c\n0x1168f610d4cf81403e963556\n0xec21b47047dbb2a7e550fb22\n0x701a8e321cf73a48201c860\n0x8f3e662cd474adb7dfa61222\n0x9223bcbca0abf6ab772ab85e\n0x44cc2fae7e9cc48cdc827f43\n0x835ef97bc679d80ebd35d3\n0xff0f47f72044cbcfa09c1531\n0x9a9eeeb2b1f0042338166db7\n0xb5b1ff9f1eda8988ba012460\n0x322604f60ec53ea6760bb93\n0xd799c63a25b90126b838e5ee\n0x7e70842a8b5f30e088e28f4d\n0x98ddadf005bb577e591a2819\n0x5db0e446a877dbb0403ed9\n0x873aee87bfd3977f8d82a02\n0x6639a3943cdb0f84bd0dbe73\n0x3916257b29ba7b32a144097c\n0x1165c0cc65114fa54dbbc505\n0x975c3b247887a958e08daef\n0x949f171688644314a88b79ac\n0x788cf3cefb828053604be98f\n0xbb2108985e6e161458f2f08\n0xa096fa9ae226f4479c116b08\n0x64cc587180717b397bb3f172\n0x4f396d2c434433766fd69166\n0x11d9e00a16020f6cbc7eadd\n0xa290c907dbfc8ba90ce646f3\n0x3b1775db55f69391710ad15e\n0xefa03a25f047852402d04ca4\n0x1922505952e2ea65067cb34f\n0x149d3e7a4651c189190aba09\n0x90fabde93c99ddb9c919385c\n0xb78520ac52bec547a4206aaf\n0x104961f0e5b211f5340fc3cb\n0x3bbc4b620dae4b030bbed27\n0xba8406a5e8c01f4aafbd6abd\n0xfbd89aec6a906cf0e5b85496\n0x890252d0a76300bd8a9b9b0\n0x2b42d2192898b83fece843ba\n0x27d754e9ef98c389378181f9\n0x18d05db84c814f54b3571b4\n0x15ba58c23a6fd3d9d40c551\n0xc6b920fa6d595941a03e3c9d\n0xad814e1b4f292616b730bca9\n0xfcb2beb4b49821f8a7beeaad\n0x4146fde5e4fec9f8552f5cd\n0x3ff3dc2fff02eb07408c3d20\n0x71b154c09ddb66480890447c\n0xe236133863670595e26716da\n0x1632d3e89081354fcfdfdf22\n0x4baf8e9244be7caf9f49f09d\n0x9e852f0a6a9f9f305c486767\n0xc4a74ef9e4d189a7cda359fd\n0x1029a3096eeebdd7734fed29\n0x4f4b01810198c5587f9b58b5\n0xd53df38cd13bd96cf3ab4b21\n0x14998c45b9eef288aba04ce7\n0x452dcf6b6fe5100b0f7559\n0x43ae18704a5d076122f68494\n0x20d68fe8f79b38dbd593ddc9\n0x432542be643dbda20f412531\n0x142014e26bdea94e28582104\n0x53012104592122a293c7101b\n0xd18efdce911d73dae6bd1ba7\n0xa579fe05a8b342099dc9d492\n0x19f9f67556f9d578c4c8ba81\n0x7d86e110ec32a37523e7b769\n0xe379bfa8bb68507d2da76089\n0x6a5a1852ccefeae75d6b80e\n0xb60e250faa9b601dff6f1ff\n0x76d58f3a02c6ec3d07605e39\n0x4bb3c4a18abc7cab789b6a15\n0xd37b0d0bf7e5bbfaa984792c\n0x11b4bfc79421b35cf739a629\n0xd58d81606fe6a329c0023a16\n0xc2299bea6f23c372065cc2f1\n0x23ce179b01af4e7d97be5a27\n0xf9c8cb42214ca721f8d7b30\n0xcb92327dcc429a816ec1005d\n0xa325649e01f25f87b8e26770\n0xa78c54199720e4e374a85d72\n0x54530c61bdba4b52706d655\n0x3190f60b4923d7703f7d8d17\n0x466101d8efbe3cbc55001dec\n0xe93c50071ea0cd7e8142acef\n0x83b8d0ff795072a7cafee15\n0xf4548eb78d5973fd8732b895\n0xa97794831ddfdc62af2de1d9\n0xf5ff54b43972b90b2f752d55\n0x68fea1cfd09e3da7a4ff36\n0x3ae090961bdb8ae9569e1dd2\n0x1ffea4307a7c94251ae03d6b\n0xae1e0fe8245b59bd8c660a35\n0xa548ffe59a365a9ad8f324d\n0x4b79466fb98dbb71bcb5aa81\n0x7ca5b21b36ee3d71404a8807\n0xf0d48354acf0a2c8183503f\n0x747403e028c5a9ece5dcc9c\n0x276ef427c20b1d90a472a026\n0x29ddf71f8feeade1a5277d4a\n0x793b396fb88195e29db20bdc\n0xc0b2f691f55cd3b38d18bfb\n0xabab1768448bc2dd56315aee\n0x62de83fb31a85bdff92789b9\n0xf32a05cdb8593f74352fa4cd\n0x42fd232ba1719e02685b9df\n0xe8a35c9a5380e28a9ec00119\n0x8bb9c2871398032b480a78d4\n0x6619eb389065087853b2737f\n0x109bdd19eaa21b255b49600f\n0xb729dda160d3fef7bf6bdb1d\n0x22b097e22d52fc379a0c520c\n0x71f68f22e44de33692cad282\n0x1446f2315fd0400b321792af\n0xa52848b24b6c2275dc88e385\n0x1d818b6bda9ad00d49738a4e\n0x891b6a3c245c5b5126c333e\n0x72702eda9ff5131d21511c\n0xaeb860513175f55bfcfdc6fa\n0x760d280c5957865a68628e69\n0x4f2aaf9e238cbf8987d1fdfe\n0x16e29390458be723358c373a\n0x906faa4c5fc8dbcf10ce8438\n0x477fa5361a28748975b3189b\n0xa09b6482dfa61331f125c883\n0x137ecd16cb71d79ea0530c4b\n0xbc0eda07f2798ec81c7fea9e\n0xb6e530c0121eed072f230e2e\n0xa63a3b521cb38652dde4d176\n0xf78833de1d399b9da436527\n0x7032383054132ac24378dc5a\n0x7448c34ce2c26df07164c6f0\n0xbb00353d2e105c1c45443e21\n0x17930adbfea68af5666f5ca9\n0xf013d7982f05b680a82b8b39\n0xf6821535eccfcf4dd4d1c8a2\n0xd5e712772bf9340974f45d69\n0x102355301f89f363d8d055bd\n0x50c68a7f59954b64599edcf3\n0xc106322d0789cb04077724ab\n0x582929562b1986dc1ca1b9e2\n0xf5b9985cfe7d98ad807f708\n0x81d5676b01caf38740786fb1\n0xee7c8b72f15d12af45986b71\n0xb30f9ab1d50553e7050d0301\n0x19605197e351c6ba55fead81\n0x48f0e44a15020dd5c096dc8e\n0x746bf4d345de507852943704\n0x770d2694abc4ed1386eed05c\n0xc0675f5574e945d3099c955\n0x1bb54da002fbd0454363cde6\n0x6d3e1ff3b3a5b74434e5594d\n0x20e49d45271544d94ae0c254\n0xc9590f65c2e90d5a2806471\n0x9249ff7888f03dee6b2dc5b\n0xb1dd5c8bb823688363efc221\n0xc80983c3fae66a6a5f40fc7d\n0xbdadef52167fb2c28fb959f\n0xb29c0ceb26f1a416c1094cc\n0x313066345a336fc6ae724fde\n0xa58b2e4eebaaf17c7808da33\n0x1116c92c90d044008cc446ff\n0x29c5d3ef16e6e2b6964cc51c\n0xc7f3dde22689fb0c0d458bc3\n0x33cff814b622a9afa86ab702\n0x1945927d93cbead4bca47693\n0x3feac6c8b4accf0d3acafe89\n0x8064a58bd0f9834c37b73629\n0x89f9e128873ce697d49cdc98\n0x17e104ffc131cdc857d61018\n0xba783738396038713d00672d\n0x8708363d766c883905e6b213\n0xbff6bc1a8b48e8e9e80c379c\n0x68d957306c77c34f865ea3e\n0x3c2f19d1511b45771a6b29c3\n0x551c82500e70b2f92ca2ed0d\n0xf07613a5b38c7deb6d42584b\n0x18e9663253acc0dc2f409695\n0x4b9cf885792986099ee19ecc\n0xdc88a5fd1c3f422951345ad3\n0x1b0abdbb18065cb4529fdc4b\n0xf55171f1639eb2eca07f1be\n0x233ce06fe941e748532898f2\n0x51a203cf1bd0c73afc6945b2\n0x95b7152b55a6e207316776c8\n0xb621a1a795cdc8734dd5190\n0x70931af96e8c07e3bc265239\n0x9816dfd477fb9bbc5fea0b76\n0xc195b68bce367199e3444b25\n0x5d091b46ed78e4ff1455328\n0x9b3b3e9802218183e77d30da\n0x1513df569d929f4547db36eb\n0x9ce9ffe2c13d22dd6052d3ae\n0x68834b6fff8129fbae31f1f\n0x9ed6414419393a93e456acf5\n0x29ba6f2c425790be8fd16f7f\n0x9acdc7a40d6ee272bb29a75c\n0x3284f38c16593d561a8c499\n0xa96b1ce451cb0a9b35d57443\n0x411367e49f5288c94c0a7a67\n0x5bbc9cb2a2fb718a8b6ce761\n0x631d58446b1e69525ec312c\n0xa142cfb7f4bb3ba9ebdb17ef\n0xd97c63518f16092cef6820be\n0xc863967d04f72a0cb4ccd502\n0x117849f55fb51517461c97a9\n0xe01049ff331aa25776292d5\n0xca9f5597170bb0e030aae17d\n0x5b9c04951d2f857dcb3f26cd\n0x1553ee33dca3e0898a32193\n0x3ba03c82580d9a620c2e8990\n0x670d17a79c752713a0e4a226\n0x36b48f54921b9b960f4ae66d\n0x15e1841ec83832f15a787e18\n0x56857e6e54f741178c9c55ef\n0xe224fb22bf6cf26106779d0b\n0x18c3b9d4f94569f8d6cee7ae\n0x52e09054eb5d6bcd79f2d21\n0x9debca186d8509580dc1e310\n0x5ca75c25aee4dbf1cd1ef6f7\n0x91ea7aa4b2227a1bcb9ab7e9\n0x5c3947f7a3318974ef5073\n0xf7f830bb88c0c1bf155dc67a\n0x49ce4ef3c3fce94f0e7dd0c\n0xa602600eee0cf50e16a7aa08\n0x3d5e6452192e15ca4ec2b86\n0x8e2d581fdf01507703e509a7\n0x5bec5b0e324673ea2e83feb3\n0x5b338e0c14119e52f64e9053\n0x147f389b7f75d321255acd76\n0x3c436c5b0d90125e012b4b23\n0xabc236b338bf7dd63721db8b\n0xd46431f1ce8c33457345c376\n0x154aee0a92819e264f8b4d20\n0xffa33b5e920553aa1274dd02\n0x95219b975a112a809d219921\n0x53d922b017fdb807d5df9fe\n0xf389b90dd9e909ff0f843f6\n0x121b6c5dc687ec584cf25f27\n0xb7d94539c2f2e21c5d26399a\n0x5c28fa7f5882a8a61225a329\n0xe3c4a9eb6777f1a31fdcfc3\n0xb7d3a57c51b2e40dfd1e0f85\n0xfa0e36f56806f6a22ad52e30\n0x85f201bd934d8df90fee3e94\n0xc1208541bbdd08ab3235a61\n0x93d97565c094b09892665cf5\n0x670f4b0ad0dc3aac3898bd6\n0x4695040a070ddaea203e0539\n0x27725339265a5602db4fa1e\n0xe87f576e8152664c57a7d0af\n0x322df7d6d50c4643cdead442\n0x4f32a48dbf341ed2460d40e6\n0x63860bec109813f7c578477\n0xf8369838cdaa390d1523033f\n0xaa82a031d2f971a149b03cd9\n0x1854d70b9569c3613427c1ae\n0x1955a583ae982d315754b410\n0x6234a7dbdc14fc7b270fa04b\n0x81e14caf9aa46a68b2a8df5d\n0xafdf44cb7ce2ba13b8df4ef0\n0x2ba538ad6abc60423bae9f2\n0xea6614a5d7f8e38f691e633a\n0x1f89920d3c84abb1a1636b58\n0xa069094ce1373fa8f012529a\n0xe20b2e7e20c44a25f6d4ee1\n0x1e8dac5e06f44685fec96a53\n0xfa5572051877b714d8e86153\n0x6a7f8437445f0a1d0a5aa95e\n0x88db8e8c4ac476496eba57a\n0xd7c3c2ecb9298f769b6d17e\n0x24e219030fcdb8b6e276989c\n0xfe1f66d40845e412cf3efaa4\n0x719058055f776a2a6c9630\n0xeb649f4544a9cd4b9ca4799c\n0xa4bfe4ef9b7ea4cf8b2f5211\n0xb30de35c9a0ab6a718d6c92f\n0x11489c4e97c809c43d65f585\n0xe75d279404de8672845776af\n0xd2b61d4be076b9551b39344a\n0x9713aaf55355b60d4da59415\n0x3ff109cb30eef9d72281772\n0x3a49cac5f5055836c8928bae\n0xc0a4d95777a83cbbb63a591b\n0x152ac33e753d503ada178776\n0x15f8c6377f271d9b7be54a67\n0x77fb22889f7eb15cc7c39e83\n0x41f425906f95863914cd67c\n0x35e49f877f0ada93efc9c84f\n0x138560e98b89cdfca055ab34\n0x767ad4f1b4502665e4a052ae\n0xb9ac1f2058bd948359c2ead4\n0xc7693dfb87a3ed635841f761\n0x1023c8a85fbd41d185071802\n0x80509b13e048b43a5d9d8588\n0xc7a3be423f99afe88ed14537\n0x203bbeb566b44d13b2ddf895\n0x135ac8f7efa1ebcf07bb82d7\n0x42d8fe333cae108a77ca58d0\n0xc2eed5e769b0fea49eb4fa47\n0xe5e9ee31ea96b6b7ae927bb6\n0x22ebe3546e29c97de60fb91\n0x6da6873e07a22406d301e452\n0xf47045caf01f75b0f3461b17\n0x19c7921c4937e96417cd5b9a\n0x2daf62bbbeaefccd62caff\n0x114245a908973fae6a1b46f4\n0xf9a4d2277e72e97154f003a\n0x38322e6657d0f2872eb01bef\n0x15be0c6c55f1a559b0504ae3\n0xde2ca9b44eabf042e2614e3f\n0xcdf91038d0bd9bb283da2ce9\n0x1548c6ebacf851514436d6f8\n0x18467a472a6d9ce79fb1acc0\n0xe7a627a95663a07cf81b09cb\n0x479b21a0252c00edc59e37ff\n0xf0994aa1ad0d11ecba5d3cdf\n0x16fa52025eb6ed9fd8fbc0e5\n0xd0096e806d59ce1881e98e01\n0xaf6c2cb8522e98b7af8fb047\n0xbe620cbd9945df809b50c775\n0x1262be16005e2055f938ce6e\n0xead0da47d5d87aff2bb63c5f\n0xca825d7d3d95104cc0091fb\n0x63c6c8c59b0269cd257f5810\n0xaa9546811b7b1073a41e407\n0x6d008a897c45d55af7852b08\n0x47e2cc36a88ed657ff6dceb5\n0xb8629cd38033b744c9248337\n0x18f98d32ea041b43876d4e17\n0x3813b20df314805da7303621\n0x882ce17f42b8ece26446bf71\n0x25a7bb349419cb7db9fdd68a\n0x312478e139224bf00ca65b0\n0xa67606fc37a69877df67fcaf\n0xde1179dc9dabc6b8101de756\n0x720f9a17ef9f19ef7131c000\n0x16645b7219f80be780f46ca6\n0x798b76f1a62b4cf31bc23090\n0xe680d9de8ff5c78f8a3042f5\n0xc7a859bfb486c6c7fb6f6f86\n0xca09d590ec3ad24136601e9\n0x45e9a1d20c623de5fcbc084d\n0x8b18d2d9aececd37ff2c9e95\n0x82fcf5bbc69622ae8c6fd686\n0x199b0d9ed7da00fd9aee06ec\n0x8d76be7d7392f95864d51d23\n0x39637b68a91538500345f10b\n0xff447040446992313e0aaaed\n0x14ea925283850adef85e6339\n0x8e6885f182a0e934650e9169\n0xcaa512342220b47ee7ceff92\n0x5d160550a8273f00d42dfb11\n0x16474e24be27e42cfd4944d2\n0x9f084f361ea6804245cf5842\n0xf87461fe30c1c3ecf39c64ec\n0xcdf716718217f3e74b498b40\n0x8e9789bd99cf9625497a679\n0x632398b0c8790d309e076416\n0xd598b0b96ea0d7319dbd31b4\n0x7ff3a4bbc8e4c684703df5c9\n0xf42b9bca34dd9ad3d40500b\n0x63e8e79c12ce5470d39b1019\n0x9496ad5d6511164fa1356163\n0x65562df64272da93af495c84\n0x8948b2454ad3569487de18a\n0x59b1f912c30b719e99b45128\n0xb3cb119f8612ca2c044f6ae3\n0xff50eff26e95bcea0c863ac8\n0xbcd111137f9f8451586fb81\n0xd682dcec6e8a4fc16debdc12\n0x4d10e7a4f5ca780ecf8e5bea\n0x595326692abfe883cedaf4e8\n0x176e2d8de056f31328ade3ef\n0x3d24bc054109cee227366be1\n0xb9aa1bcc072f5cacb96415c8\n0x51ce61332687aa4055ad293d\n0x996cbd0ea6ae5dc37839ba0\n0x7704338c0d79a357476500cc\n0x71a89e803feabb196b125cda\n0xdd952941434ee33e81e2626d\n0xc53d020e269a788ef27cc73\n0x68c158d42b0e95c86e2f3728\n0xf8b592f13761253de7341622\n0x712f7c2a1c0990de5ef9ab76\n0x897b8725f1da185c4a50663\n0x7b5caf4261aa3c53b4b38a47\n0x3549273b0577b4232ab70214\n0xb9b31c1c7e2691e87eb3a7e9\n0xf0183500b44acabd322b0c9\n0x5eecc6b6c23611c2de1703f3\n0x11bd67d3bd2994541aa11bc9\n0x4ad809c53e00d56e7aedddf8\n0x158db651913021903da62bee\n0xfbc0d5d0c5648f18bcdc68a2\n0x66184a79d58836419b06a2e5\n0x95482cd356f2618f01f7db86\n0x1629b5be821830972b69f57\n0xe46ce45c45a549873eb1f3ad\n0x6278664420c9a1bc42222e8c\n0x3203ac1b6d7e94f13f719a98\n0x193fd209a93f0018108c171f\n0x169311f520ff8b23fad2bcc3\n0x395798936e40725d185bb969\n0x4aec4ea469a4275b58e06dc0\n0xe0854cde2a3cf3ea837c560\n0xf084f2d9e95fdcc2c2ea11fc\n0x1526acc7d6d7d9e2ca5672e6\n0xce4c1c42cfa3079796201ad4\n0xbf3b0f76aa7c5cd4663d348\n0xd0b1bbe32c0ff886d6e3b13\n0xe686451efa8b026cda159916\n0xb00ec3dc44ce3420b193841c\n0x3e3c8b9cae792d7977261e0\n0x68b3ca109e3b60c02afbafbe\n0xfbbc822a51e927c3e654784b\n0x68d7ea78ef1a7ea888ffc6ba\n0x77e2055fdd1cc06a503f95\n0xfe23f6162f85db68e97e99fa\n0x8ddd0f24f28ef2db648217d1\n0xf0e4a224607b3639deffd400\n0x180578dcf940548d44dd985d\n0x1c5e7b418c65d8853f9eceaf\n0x1ad40943470fca1d2c94624c\n0x83ed5b7fafeb77a14e84ebd4\n0xb52400b600a2b293a9c5a6\n0x5b103edb697c5aeae6a12725\n0x73d9d9cbb9498fe66fe2e1a2\n0x35f34b756a4e357cb41ce68e\n0xce7d5d1545aac5d1ca1f4cd\n0x69\n0xba04c0b00a288c2d5170af8a\n0x43578ee59a65f9132c6e9922\n0xa97d7f14fe97a4d1496bf08b\n0xe2fda4db28034299675707a\n0x61da6b4f91e061093f004809\n0xdbd1bc730a0e6168004f584d\n0x30df243628e7d3a07c92195a\n0x185ba48f71e1e6373151097d\n0x500e95ad08635840013c41eb\n0xfa87647d9d34fcc2199a929c\n0x253fce933aa62d880d77b1\n0xc4e3692af62720137d3c064\n0x2f59c537b3b706cb79225189\n0x99f51e494a9794615e58e8b1\n0x5f78938c6f23ef23cea0f0ed\n0xc137274e536a58d1fbeb1a7\n0xe644a01b3a56e72220859bef\n0xcf7852cc056afcd914743db9\n0x36dedc7c4f07d1e4c139639f\n0x169e54fad157b01d9b3932c2\n0x6fbd70a9998de236ee2cf875\n0x65395ca544050358440ffc96\n0xf45564337de394f5f50452f0\n0x4129b1cd00bb40f6e70eae2\n0x5acd5a73b10b236f6b0101fb\n0x4964a3be8d606cd7823324ac\n0xf4c6e161ec86a9ec5c788614\n0x197a0e1e4d2d46056886c41e\n0x79ef6d5fd17275ac17958899\n0xe76f25ea873eb091fd0e3593\n0xaf10c6e95d255b153b54f117\n0xf09d7c7e4029a5ebab8c3e4\n0xb623534b68b4de2a9e504944\n0x5dc42063eb6788be30855104\n0x86856aaaf4630fac4cf90088\n0x246487b800c4699d6168181\n0xb0292472df62b151e74eb404\n0x3898aab0433af994d6d8db4d\n0xbbc8fd3a5147e34537c398ec\n0x19760ac08b09037a54b82d83\n0x6882d94bb6e5c5eac327d35c\n0xcb2d478f77b53bd0f660a14f\n0xf2c6f3d3aef514669d14f5d\n0x33443271f9ddae9dfce319b\n0x1f0bce45149d1a8b36d7f082\n0x5f19d981af2cbcc1e9e33b20\n0x9a19392e78e5ce064af43cea\n0x3b16dedda745a43251856d3\n0x7220d09f5ea13c570d2d4a38\n0x878d6e55a8e4132810ff4af3\n0x9b1d229a83b6ef4ffeb128e6\n0x755ef48289c1f7230f49d18\n0x114b9f54fe271f8cb25ad209\n0xea24d0d970fb074adb305c67\n0x11f5beaedfe0738138a61650\n0xf266442b60f47edca36a9c7\n0x8d9468dc0dd2fde565deef97\n0x3ec8c471bedb07e33afac150\n0xd4de2028355b5ad095da2f6\n0x11f232156a74821317ba1b41\n0x49f6e4d64ff4f72aa8474d22\n0xd98900062cde17e11b6ea17b\n0xe81e2d9ee36d372ca98e445b\n0x14ac8417efa0cb6065194cff\n0x387c048406d3b8da6c24d1d4\n0x7f9f643368ec98a4ecda1dfb\n0x1ee6be52b54bc05a254e6e84\n0x104c70053bf478ec4adda4d4\n0x175cda6f27e58fece5d32bc8\n0x907c30c6632fd19d7ed52cf4\n0x7167301f55e073b7de4d4fa7\n0x911350ca68a57bcd574f47a\n0x18bc3bed7990c0e92ccc44d\n0x95743330d9174b76e0fb4b0e\n0x8b286d11e2167d8dedc58ea1\n0x8cb423221a61069d4ea925\n0x41e80c14f782686c1faf8ffd\n0x99fdef24e5bdb2baf0ff9af0\n0xc9292bedc13a7ff3164550b2\n0xc58847b60bb79a6c43ba2c0\n0xbbb74d265fa1b99e5c921aae\n0x86a831f476ae8cc622c0759b\n0xb57fb9f14bfd5338e5dc13e4\n0x1c32fb29689fa25d80fea4d\n0xd3a3e3ff296edaf39f42f4d5\n0xc87ab9831ab8715ca32dac25\n0xc9afb68a007cf846b14ea54d\n0x5ae40d260caf3a94e4abe7b\n0x7813a077f3f706e48e538e99\n0xc693c7f7eaf26cd63d304649\n0x2cce2942a0bf887969a29169\n0x38f879480fafde2ebb9324b\n0x887aec197ef015a934f542bb\n0x7e50adc245e2cbf8109d9e79\n0x31cd584110de02aed1b64ca9\n0x10b9bdf9b304d2cad891ef0b\n0x4b54b51958a572ffbc06fcb2\n0xf03bcded479922556e13edf1\n0xae9df97229cb9858aec8c3f8\n0x100c29d5ce82b274f39c6bc6\n0x3439730d019bf3fa672f92a8\n0x152ffbe17616f7a8893aefc0\n0x438c04932da4541d07e467fb\n0x10a0957ce2b922d3ecf9461b\n0xc2524a42365eb87abf551be9\n0x17ff70557f76b6ab05098159\n0xc855d1d01ea79216b47d6fc0\n0x182f9e3de703c00d99a02169\n0xd62959105f084ca796e6072f\n0xeb8ff6e5edef048a26641f0b\n0xed1ffa270313cdf6835379d7\n0xd0d58ec45d8de1d3d753af8\n0xb2a6e85d40be532c4883115\n0x241166cdaab170a8a1b3de8d\n0xb5f3a41da85f90b796aa24c4\n0x102a088ee67e54a03ed73ec2\n0x33cf07673edc387757890161\n0x209d25650f94e302c4dd9851\n0xa8ab7483fb890abd9cd37208\n0xf75669fa44cd5d88004fd6c\n0x757cc5134bfffba5bea0f0ef\n0xbff11b2a70c5138cce241d40\n0x480d43575ded8c76b8d93690\n0x2804a8bbfe4906caced599f\n0x4a3cd179241f248ca9387acc\n0xf7b80f9d2b4cdd522ab93af8\n0x6f91727e6cfda09632c838cd\n0x144e6717322e297893e00efe\n0xb2cdaf56893eb827510ce3c2\n0xfd193f5ac4bcedadc6227d8\n0x33a344d39bdec56e67d2b154\n0x673784895cb9570d355dde4\n0x20d66f49ab8a1ac98eb44ed4\n0xc6ec14b636450aa7731810fb\n0x2a58d55f2f80c2013c01e180\n0x1378cb04d20cf2d1a55ca4c1\n0x1551740a20171deaf43f6c57\n0x17463ff57073f0edfab4d8cc\n0x4fc64adcadff851a36027dd7\n0x1140c1d43f7ecf85a60a0501\n0x5ec04ee709cb0f6cf13188cd\n0x34fc68d94b41a24e72d2228b\n0x1f1d3b93b42df08b4749e03b\n0x7029e233e13483c5d76744f\n0x8454a875782804e855339c8b\n0xc13fb4c77d7edc0cbb8a8749\n0x7d6170277f32010d9ff246c8\n0xa3a689c89c0412f990779f4\n0x1c1abc4f8da98b1cf48e7c2b\n0xc67f1ee8ad490e93fcd5ce7e\n0xc8f125ef87399ec35ed915a2\n0x53fb8d30aa7e2e8996c4952\n0xfc852c6fe4d13b65d77793d7\n0x97a6fb84131e03d7bcf9383e\n0x997dabeb385ade2445430f44\n0x167ebae9a3bcafae95c71\n0xd3bf78a9b23ba7d8cdb187c7\n0x83b62abf268b8c1689a4ad0d\n0xdb3cbdcf0c617cb64c6711ed\n0xc9be3ae4e0fcb1b6898277c\n0x708cb2108967f692963adc87\n0x3045b7e9875696b93c95b7c\n0xdf2db1f79927799f519702cf\n0x11feac74d655a20118741dc6\n0xb091d4f09e82a97a9a3cdcb9\n0x699488369cf96bfc34ae02cf\n0xa2906a0e409b96bab75153a2\n0x131f660295a6f4e4371f9858\n0x430c154e72ac9eafac182477\n0x5b9b58dbd06e12062f0d8f14\n0xa199384bd3dc3b0c6d07631b\n0xabdd772fa24fc5aa13cd775\n0x97f322c39d2cb0346858130d\n0xe63b59f915f9e3fd7373c788\n0x6019752229b8f16052ffc49\n0x16e8343b926199c9b8c61686\n0xc6e34c57cc433b4f9ea4adc\n0xcfcd5909573929acf4b17ef1\n0x635ffcdfdff3c913c7561517\n0x16e6079adca840b1df6c9267\n0xa24e6bddbf98ca217c6d03fb\n0xf459b544b0cac53cfc475162\n0xc602c00481028812d95e7b63\n0xba7a3fa1d3b5f05cd9e2a56\n0xfdf7e33c3ea61caa008bdfc5\n0x952502fd9b648ea240cdd43a\n0x9a5fed539c7155ddc4951d78\n0x173903663615bcee3698cfbd\n0xdfdaa273a5c0d8d523dc383e\n0xfcdb3da176ff0ed48f9f3dc6\n0xccc828b0e381856fd6f383a8\n0xbd7bde8b926b5e0a442ae29\n0xad28071430a9e3caec0a5928\n0xcc160a58f6f719f79d81faf0\n0x5964fe74cc7ad0451cb73bac\n0xa35716666d99377187ae89b\n0x9aded6b854586f541bf96c58\n0x171d3834f32957a5ec5e35d1\n0x28536de2b5fe9c969f41fd3d\n0x11367055fb122effdaed8a5d\n0x1440a3979db61e0b3043bb3e\n0x14c6e8e24eeb62f04188603d\n0xb3e9c81c42f30cd088ce2f2f\n0x68a43a8a3ef9af0af4c0aba\n0xc4e5c38f9f20ea3a37166f67\n0xe29193a63cd6b343482f8b9d\n0x7dca7b3735953698b217500f\n0xb4466aa3c83fa32f0adfc53\n0x236f126c0cb69408dfbb0490\n0x8524e0090651e742dae84cb3\n0xef3be04878976c3a01cf4e29\n0xcc65ab5f96469d9f7ebc457\n0xd2a76858e9eebcdf781da351\n0xf94144a713c92e448ae1674f\n0x482280cfbe9d2b384ad03455\n0x129357a735c9baab14a8fc3e\n0xa708b96c8744cc35d5eea5dd\n0xe70d538ab470e729388db00a\n0x897cf2393881052da649dc85\n0x149189286f8a946ca9f77275\n0xe69cf9e9eb9ee9dfe316df1c\n0x89b7455eb1da5d628eb56bb7\n0xdef2c432786bf8a78e434e22\n0x187d9506399842930bf2045b\n0xfff4a26af25d59761a5bd80d\n0x4085a4f84a0c3e254ebba7d5\n0x12d5037aeb04284b2ccf4591\n0x147a388027cbf5f6e6d9177c\n0x2bdabc2b3bffce4b54d253c2\n0x6dbce8ed0875bdd19b66bd35\n0xdcc240c6d83cd3622446ce12\n0xbc8a245c2545127912e659b\n0x2d5c72a2567cfd3cb19a8b98\n0x23f349233517e7a76d6a758\n0xc252aca5aa4b7d841d873399\n0xd7ad85e7716185f54d44e55\n0xd073cdaf5900287e5232b499\n0x6ede5fc19a827f075393a1e4\n0x9725c799721612b3bdd67e31\n0x2922bacb9d8db3196f481d4\n0xd9dd4720b35f4cdd179e6e5\n0x1d9ccba15dd23868343f1837\n0xc474ff0415204728bd15f449\n0x1793a8f3f8b5fe16d95d4e12\n0xbb6d047886bf65768376ae55\n0xcc1a1162edbdf56b0cd344dc\n0x774ef4b9bc65cd1b08119171\n0x16251d29cc44973ded38a449\n0x9bb8111b59f7178bb29b7847\n0xd5edae2c3760d87d4d386a8b\n0xcc18b9d0e2040b2aeb49717e\n0x7147cd85c3bbd4489dd6daf\n0xc5a78b93898c184df3ab5044\n0x70154f6baa1f6fc1a5a4b7c6\n0x87a7da6c553bd30a7b4142a7\n0x2db96ead1d9c825c6795e64\n0xb0902e33637feae4c9ba395c\n0x285e665882ad5ba18189c200\n0x11c396d1eba983f2bb52ed54\n0x1d7c0c8296b1c2acb3ea02f\n0x5664ec5529ef08311ca06b54\n0xe2dd672c1a54d3dd22417326\n0x45f31b98b4c48b5b8c12097b\n0x15a1d31902e2d9a53287803a\n0x5d214f5cff43e3a5d4df64e6\n0x46c5ac3182cced428549f7ab\n0xc4de4a599098ea8456edc309\n0x16f812e9e34484c26a593594\n0x8dc9514ee3c9ead6a37ea6\n0xe6856835ba0f218ab7f3b2cb\n0x5aa2ed99081351616e6b4e3e\n0xee93b713d1818f609002ec8\n0xef973edcb6c54fab4058e20c\n0xd8ecf24cc522d192b4dcf1c2\n0x888dd788182185d28393158e\n0x18e8913ce1981ba3fe434050\n0x4f50b9bc25b810e20b2ccd5a\n0xc07ba2efa850e38980a94161\n0x31cb9ca338ed86764597a176\n0x166293c818b6c2676badc5ea\n0x2fd679bdb857564ae23c7a45\n0x4581315f52c9d5d5c14a72b4\n0x6ae1ba8ead7f2be4839ccd62\n0x17731bf6f414ab06824227b8\n0xcb8f1d80929c3f57ac9360c\n0x59ac2bd1f5a7bc3c335d4c4f\n0x7f50d742c2cdd9c3f0202272\n0x120c5a22261070318e19e9c\n0xca1188f434df42715d5022a3\n0xa8f614cabdc4e9464987f938\n0x9dfd65b72caf2f773c9c36b8\n0x806e9a0cdfe75b4713def7f\n0xeebfefbcbcbed23e2e343c06\n0x8d58226dbdb9a366f3f86229\n0xf2d2f8ab1774e37afb855e74\n0x18d30f309b2c0de4c0c34f88\n0x7cf1f3d0aa660b65b9beaeac\n0xed598065021d1dbee1d4c170\n0x186788d4580ba289d33aacbc\n0x7685d2ec1e3416177c1a53a\n0xfbc87d47e6b724dfe58eb1\n0x8ff9a0bb3a3f234b65516f70\n0x72d91620805e0bb7087d7ed5\n0x2b9f2dfdca63d61bc1095bf\n0x9d8864cd46c3585e3151225a\n0x8ade56cf1aebebdab1f263\n0x390532d97527b27429b8d956\n0x73024ec32b8951ed9ce3df9\n0xacb32bbd064122d36ce16eab\n0xce96b5f7650e053cf6759e74\n0xd905fcb797e52dd5011777b0\n0x4bd4ac868804461b59b716b\n0x345a5034ddbddcc120c9abfd\n0xc9488f9e115fce3684ef7bd5\n0x2bb252d37f2fe52a84354ead\n0x179e57538cf1872bac484902\n0x2352df834db2a359cf5ea766\n0xcd3245834ccfa49b57bf4ff5\n0x771a121222e21c79ff48db55\n0x18864752b080057768da3da6\n0x430f21a54e0ebf368b036311\n0x1290d9a6252bfd3f0a2ef659\n0x51ef1607a25988a208dd124c\n0x111b5bb503e5d26e221d100\n0x312908221bb809e21ea00047\n0x7cc3251cc32ae0d199300a\n0x4eed95926350e8e52aeabbbd\n0xfe922333217e2c86640d75c\n0x4bd8f548d1e4b8e8e18a6324\n0x90a3564c741ec09093bbed1f\n0x1a994a52f0a07e5b77253a58\n0x3d049ad4d46d3874193221\n0xc91dd3850f7130c40931db2\n0x35d742b2489659fa282101cc\n0x18e762836e9d1e4979b2b908\n0x1c698b5a01da981b382e60\n0x89ae288588dfe54aaaf94c01\n0x7164a52ea615810420488da1\n0x274dfa46431733fa6fd8bb9e\n0x1414b6a5ea35a2e269f4bbbc\n0x7e6f5a5e7543894555a90fca\n0x7fbd93f25cd14e4431aad360\n0x9871911b316fb50da4ed7e83\n0x1836a6ce4b09ad4f9c06ccb7\n0x454c11a9cb291a644cc32d20\n0xcdb542878fa179965cc35520\n0x315e15084ce844087e049bee\n0x55897baf4842987db2963de\n0xbae1ca4f6237ca83ed1cdf33\n0xc5462e53ea7d0445bcb147f9\n0x8cb314d75d75d98475e5fbd1\n0x1009ddd6dc1f54b9e16d91f6\n0x4b953f93d3bd5a4d32c5cdd0\n0x546a59c306baf4b103d15fe\n0xabd8d29437b1366fd8e4f480\n0x7778ca71768c8d3d269eae3\n0xc2acf6716ac13e56991c2c54\n0xcd272d89bd480bf4e182dae3\n0x9e959bf967f36df9bc60d0b3\n0x1d2937a66b93e14850bc2f5\n0xee3de5ad527139ebc8c95762\n0x37fbb4a1bf1f0ec917c74103\n0xea256de3570370f0f5866c3f\n0x9b0f1efca1b8ae18a39ea3e\n0x735785157495f21290cf31e8\n0x5553303465ef4ac83dc8456e\n0xa338721e9f1ecac7aee88435\n0x96c59dd5835b52a17a52e4d\n0xab19adcd06571d8705f787af\n0x96479adf1f2a2b63a23f51ff\n0x6222563899051e82f45b1679\n0x2401f9980f3cb26a75c0e7\n0xe9bd49f6974c0ca10d06e9f2\n0xa255ce5c4a23670535d4fd65\n0x9c3b34fbbeb90225203b5a99\n0x10effdbfc94027336605a6f0\n0x353182e902287c746bf69cd2\n0x89a7b040d5b3197755201de6\n0xe6031354a80468aa6d8ff0b0\n0x57fbeb5a2be602a8b96b8a1\n0x5d2bfd0aa3bbbbe734acdcf8\n0xa5ba630865e8ebee97d0c3f0\n0xab41d7b1d1bc761b28dc4936\n0x7055cd27cde3b14a2fcd7fa\n0x274703c8131615f747c290e2\n0xe933dc126cb6c2d097743ac\n0x39ba715f2960aca115ebf51d\n0x77174c0bcfb02a9c3a53edb\n0x7f5d45e481f4e95e77973da1\n0xf82c70f103345dc82fe6cd6c\n0xd1c70dda252c23e5d68b7866\n0xacb5edc70f1dcb30666c070\n0x90afaeb4788628cac73dee5e\n0x245295725fcf2d66f559cc68\n0xc4fffc2dd7f5c4fd318dcc\n0x1673f940b1625d97685d8d7e\n0xd31e73d18c5a6b49b22b8ca6\n0x8fe4507cb5ae9abeaaa9d0e7\n0x82565193839c7cc8d0f30422\n0x134ef2bda01f788c2c1af4a4\n0x26d8480fb979962322391c78\n0x5702fc72f0ecc6c940a3ebfd\n0x1454ecffbf0c44c04528aca7\n0x133e261d4f7f1198673cdee\n0x75df206bd6a086118153843f\n0x6e126b958b7dafc48e89b7f1\n0xd6b0e615138fab659904cf1e\n0x1195abd285b0d1043b15e0d6\n0x4ede788d12a824ac2fb6961e\n0x9812febe11899247c63ca52d\n0x8c8b94d15e1140bb869d75bb\n0x10f54cf4298c5d1400b504be\n0x2afb8efe0eff0a495c2f755\n0x9f73977a7313534860f603ac\n0x1533be839a58149180a81c12\n0x160a7d8d9832c16f08b8ea60\n0x5fdfbba9f25307249e94beb7\n0x4e52f95f59a83567e2e94c4d\n0x98c9e626e75dfbe9619b9ba8\n0x1669b19cbacfd3d568389242\n0x5ffc0d14a5f140e71dd32dde840adccbaa7b219338835c93b6f07ca32e2d8f2\n0xc\n0xa32ee30c3d029d864507394d\n0xc3fd32fb148ef096d056a4cf\n0xd6057025fd62f50ff367018b\n0x14f5f43eaf8f65a0744c89ef\n0x9fd18c27cba0985972317e8f\n0xda8029593c35f82b1babf4a5\n0x19d691e8ebf33b62a07dcc5e\n0xc550a2b8af74ec248ef6142\n0x10000000000000000c1ade26beca39798\n0x94d2c61646aaca1\n0x100000000000000002a7388403897adaf\n0x100000000000000005c8fa4951f2ad290\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bls12_381/tests/test_contract.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\n//! # Starknet Verification Contract Tests\n//!\n//! This module contains comprehensive tests for the proof verification contract.\n//! The tests use Starknet Foundry's testing features to verify proofs.\n//!\n//! ## Test Strategy\n//! - Use real proof fixtures generated by the garaga CLI\n//! - Test both positive (valid proof) and negative (invalid proof) cases\n\nuse groth16_example_bls12_381::groth16_verifier::{\n    IGroth16VerifierBLS12_381DispatcherTrait, IGroth16VerifierBLS12_381LibraryDispatcher,\n};\nuse snforge_std::fs::{FileTrait, read_txt};\nuse snforge_std::{DeclareResultTrait, declare};\nuse starknet::ClassHash;\n\n/// Declare the Groth16VerifierBLS12_381 contract for testing.\n///\n/// This function declares a new instance of the Groth16VerifierBLS12_381 contract\n///\n/// # Arguments\n/// * `name` - The contract name to declare\n///\n/// # Returns\n/// * `ClassHash` - The class hash of the declared contract\n///\n/// # Example\n/// ```cairo\n/// let class_hash = declare_contract(\"Groth16VerifierBLS12_381\");\n/// let dispatcher = IGroth16VerifierBLS12_381LibraryDispatcher { class_hash };\n/// ```\nfn declare_contract(name: ByteArray) -> ClassHash {\n    let class_hash = *declare(name).unwrap().contract_class().class_hash;\n    class_hash\n}\n\n/// Test the verification function verify_groth16_proof_bls12_381 with a valid proof.\n///\n/// This test demonstrates the complete verification flow:\n/// 1. Declare the verification contract\n/// 2. Load a pre-generated proof fixture\n/// 3. Verify the proof on-chain\n/// 4. Assert that verification succeeds\n///\n/// ## Test Setup\n/// - Uses fork testing against Sepolia testnet to access required declared contracts maintained by\n/// the garaga team - Loads proof calldata from `tests/proof_calldata.txt`\n/// - To generate the calldata, you can use the garaga CLI:\n/// ```bash\n/// garaga calldata\n///     --system groth16\n///     --vk path/to/vk\n///     --proof path/to/proof\n///     --public-inputs path/to/public_inputs\n///     --format snforge\n///     --output-path path/to/tests\n/// ```\n/// This will generate a file `proof_calldata.txt` in the specified output path.\n/// You can then use this file in the test.\n///\n/// ## Expected Behavior\n/// - The proof should verify successfully\n/// - The function should return Ok(public_inputs) containing the expected public inputs\n/// - No panics or assertion failures should occur\n#[test]\n#[fork(url: \"https://api.zan.top/public/starknet-sepolia/rpc/v0_10\", block_tag: latest)]\nfn test_verify_groth16_proof_bls12_381() {\n    // Step 1: Declare the verification contract\n    let class_hash = declare_contract(\"Groth16VerifierBLS12_381\");\n    let dispatcher = IGroth16VerifierBLS12_381LibraryDispatcher { class_hash };\n\n    // Step 2: Load the proof fixture generated by the script\n    // This file contains the groth16 proof calldata formatted for Starknet\n    let file = FileTrait::new(\"tests/proof_calldata.txt\");\n    let calldata = read_txt(@file).span();\n\n    // Step 3: Verify the proof on-chain\n    // This calls the contract's verify_groth16_proof_bls12_381 function with the loaded proof data\n    let result = dispatcher.verify_groth16_proof_bls12_381(calldata);\n\n    // Step 4: Assert that verification succeeded\n    // A valid proof should return Ok(public_inputs), not Err\n    assert(result.is_ok(), 'Proof verification failed');\n    // Optional: You can also verify the public inputs contain expected values\n// let public_inputs = result.unwrap();\n// assert(public_inputs.len() > 0, 'No public inputs');\n// Additional assertions on the public input values can be added here\n}\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bn254/.tool-versions",
    "content": "scarb 2.16.1\nstarknet-foundry 0.57.0\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bn254/Scarb.toml",
    "content": "# Generated by Garaga version 1.1.0\n[package]\nname = \"groth16_example_bn254\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n[dependencies]\ngaraga = { path = \"../../../\" }\nstarknet = \"2.16.1\"\n\n[cairo]\nsierra-replace-ids = false\ninlining-strategy = 2\n\n[dev-dependencies]\nsnforge_std = \"0.57.0\"\nassert_macros = \"2.16.1\"\n\n[[target.starknet-contract]]\ncasm = true\ncasm-add-pythonic-hints = true\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bn254/src/groth16_verifier.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\nuse super::groth16_verifier_constants::{N_PUBLIC_INPUTS, ic, precomputed_lines, vk};\n\n#[starknet::interface]\npub trait IGroth16VerifierBN254<TContractState> {\n    fn verify_groth16_proof_bn254(\n        self: @TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u256>, felt252>;\n}\n\n#[starknet::contract]\nmod Groth16VerifierBN254 {\n    use garaga::definitions::{G1G2Pair, G1Point};\n    use garaga::ec_ops::{G1PointTrait, ec_safe_add};\n    use garaga::groth16::{\n        Groth16ProofRawTrait, multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result,\n    };\n    use garaga::utils::calldata::deserialize_full_proof_with_hints_bn254;\n    use starknet::SyscallResultTrait;\n    use super::{N_PUBLIC_INPUTS, ic, precomputed_lines, vk};\n\n    const ECIP_OPS_CLASS_HASH: felt252 =\n        0x396d5915ecf475aab117bb25a0272b261e9e25ffe1c0ce05a51a3f77489c89e;\n\n    #[storage]\n    struct Storage {}\n\n    #[abi(embed_v0)]\n    impl IGroth16VerifierBN254 of super::IGroth16VerifierBN254<ContractState> {\n        fn verify_groth16_proof_bn254(\n            self: @ContractState, full_proof_with_hints: Span<felt252>,\n        ) -> Result<Span<u256>, felt252> {\n            // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n            // This function returns Result::Ok(public_inputs) if the proof is valid.\n            // If the proof is invalid, it returns Result::Err(error).\n            // Read the documentation to learn how to generate the full_proof_with_hints array given\n            // a proof and a verifying key.\n            let fph = deserialize_full_proof_with_hints_bn254(full_proof_with_hints);\n            let groth16_proof = fph.groth16_proof;\n            let mpcheck_hint = fph.mpcheck_hint;\n            let msm_hint = fph.msm_hint;\n\n            groth16_proof.raw.check_proof_points(0);\n\n            let ic = ic.span();\n\n            let vk_x: G1Point = match ic.len() {\n                0 => panic!(\"Malformed VK\"),\n                1 => *ic.at(0),\n                _ => {\n                    // Start serialization with the hint array directly to avoid copying it.\n                    let mut msm_calldata: Array<felt252> = array![];\n                    // Add the points from VK and public inputs to the proof.\n                    Serde::serialize(@ic.slice(1, N_PUBLIC_INPUTS), ref msm_calldata);\n                    Serde::serialize(@groth16_proof.public_inputs, ref msm_calldata);\n                    // Complete with the curve indentifier (0 for BN254):\n                    msm_calldata.append(0);\n                    // Add the hint array.\n                    for x in msm_hint {\n                        msm_calldata.append(*x);\n                    }\n\n                    // Call the multi scalar multiplication endpoint on the Garaga ECIP ops contract\n                    // to obtain vk_x.\n                    let mut _vx_x_serialized = starknet::syscalls::library_call_syscall(\n                        ECIP_OPS_CLASS_HASH.try_into().unwrap(),\n                        selector!(\"msm_g1\"),\n                        msm_calldata.span(),\n                    )\n                        .unwrap_syscall();\n\n                    ec_safe_add(\n                        Serde::<G1Point>::deserialize(ref _vx_x_serialized).unwrap(), *ic.at(0), 0,\n                    )\n                },\n            };\n            // Perform the pairing check.\n            let check = multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result(\n                G1G2Pair { p: vk_x, q: vk.gamma_g2 },\n                G1G2Pair { p: groth16_proof.raw.c, q: vk.delta_g2 },\n                G1G2Pair { p: groth16_proof.raw.a.negate(0), q: groth16_proof.raw.b },\n                vk.alpha_beta_miller_loop_result,\n                precomputed_lines.span(),\n                mpcheck_hint,\n            );\n            match check {\n                Result::Ok(_) => Result::Ok(groth16_proof.public_inputs),\n                Result::Err(error) => Result::Err(error),\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bn254/src/groth16_verifier_constants.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\nuse garaga::definitions::{E12D, G1Point, G2Line, G2Point, u288, u384};\nuse garaga::groth16::Groth16VerifyingKey;\n\npub const N_PUBLIC_INPUTS: usize = 1;\n\npub const vk: Groth16VerifyingKey<u288> = Groth16VerifyingKey {\n    alpha_beta_miller_loop_result: E12D {\n        w0: u288 {\n            limb0: 0x11a6ad63c049a0774b1f8d69,\n            limb1: 0xf7fca2c91020c7f53e2beb4c,\n            limb2: 0x2e0acf1407b6b19c,\n        },\n        w1: u288 {\n            limb0: 0xd4938178efd479c0f958db9a,\n            limb1: 0x84c3c18b6204eec59b85778f,\n            limb2: 0x73ca31ecae7d32e,\n        },\n        w2: u288 {\n            limb0: 0x72743eb58616c0e417c4aba3,\n            limb1: 0xb4ac27c376d51ed710fba137,\n            limb2: 0x1acbdf1cb7d3466,\n        },\n        w3: u288 {\n            limb0: 0x93acd00474adbe5d51facd39,\n            limb1: 0xa9189ccc1f5ce888cac4749a,\n            limb2: 0x1ae9e30c3e513da0,\n        },\n        w4: u288 {\n            limb0: 0x84916f4f6a4f628bdf86d2b1,\n            limb1: 0x77860ba9a989de43f309fc67,\n            limb2: 0x269bcad1c0ce254e,\n        },\n        w5: u288 {\n            limb0: 0x7138ef04bab92f97355093e0,\n            limb1: 0x66da4e6149cb9e2d53894518,\n            limb2: 0x39d844bb6b441d8,\n        },\n        w6: u288 {\n            limb0: 0x9e481d49fcbb14d72c8f3700,\n            limb1: 0x582640a337edb441a9237eb0,\n            limb2: 0x6ac2149bd480805,\n        },\n        w7: u288 {\n            limb0: 0xd952d96fdf1298e24de9a8ec,\n            limb1: 0x6bde8fce1837818c1bb4c7d1,\n            limb2: 0x173e64f406ad3079,\n        },\n        w8: u288 {\n            limb0: 0x7e3e90ad41525ee5ab604479,\n            limb1: 0xc5868b5aaa79f89f3b0d38c6,\n            limb2: 0xb2c95b493361fb1,\n        },\n        w9: u288 {\n            limb0: 0xf35cf1f086baf1880d2a6e2b,\n            limb1: 0x500d80de07da8e3ee9d854b7,\n            limb2: 0x59e0bc51eb3a8b1,\n        },\n        w10: u288 {\n            limb0: 0x84fbc02aadbc9e8ee74e83f7,\n            limb1: 0x57960adc97b6def2fdd0c8a2,\n            limb2: 0x17ef7d97b124dce5,\n        },\n        w11: u288 {\n            limb0: 0xdd2d75826bf4ec82eba0dcb5,\n            limb1: 0x286e75e7626aa2c71f7ffc8e,\n            limb2: 0xf330011992a685a,\n        },\n    },\n    gamma_g2: G2Point {\n        x0: u384 {\n            limb0: 0x89e732f5f87195d15a4ce637,\n            limb1: 0x884359c76cc9c6b81d289d33,\n            limb2: 0x3541dacedd860ef,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0xe313e222b376d9a9da02f080,\n            limb1: 0x272d9cc4aa2e71146c83c13b,\n            limb2: 0x2eb7d1fa8416da97,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0xa7d48b949e86c8b00eef73f9,\n            limb1: 0xefcb8bbb160b0f2ecb7cd98,\n            limb2: 0x8dce093ad7f7fe2,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0xd917839a146ea15cd7493f1d,\n            limb1: 0x6eb4af5910b954a713c49174,\n            limb2: 0x29a4b793edc63974,\n            limb3: 0x0,\n        },\n    },\n    delta_g2: G2Point {\n        x0: u384 {\n            limb0: 0x63d786683ef471af4434acdc,\n            limb1: 0x185580c9ee198f6cac8bc784,\n            limb2: 0x34fc9ba8eba1e49,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0x161153d19ebc7f594246b9b0,\n            limb1: 0x61912be284ecae3a3f0899bb,\n            limb2: 0x17f115a16975c6f2,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0xb4dbc7294e1eacf59b3e2054,\n            limb1: 0x31c92abab72ef0ed83a3c195,\n            limb2: 0x17fd1ad43bbc8ef9,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0x55b6e98c187b34ca3e7cd1b,\n            limb1: 0x6ff9481052ddb780a4cc43da,\n            limb2: 0x1bd7d75bf918b676,\n            limb3: 0x0,\n        },\n    },\n};\n\npub const ic: [G1Point; 2] = [\n    G1Point {\n        x: u384 {\n            limb0: 0x62587fa0f6c879156e7390bc,\n            limb1: 0xc9da665a8bebfd01ce6489a4,\n            limb2: 0x124e30bf4dff3ae9,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x50c0471724e1b022791c7532,\n            limb1: 0x5e101dd2383fdc600dcb4a34,\n            limb2: 0x1fdc3a96cea49b08,\n            limb3: 0x0,\n        },\n    },\n    G1Point {\n        x: u384 {\n            limb0: 0xedaa0ed100691cceb974c6a1,\n            limb1: 0x26a8465790ba44ddb5716750,\n            limb2: 0x164668f89d9d6c61,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xf3d9d0426a702f368be936da,\n            limb1: 0x153290e7b5c8497412386c61,\n            limb2: 0x1d9c7309625ec7cf,\n            limb3: 0x0,\n        },\n    },\n];\n\n\npub const precomputed_lines: [G2Line<u288>; 176] = [\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6262802b3d1fc57f02eb7de7,\n            limb1: 0x90ccab72e89abbdc16280011,\n            limb2: 0x178e51f74b0542e7,\n        },\n        r0a1: u288 {\n            limb0: 0x12a071ce64f150102f094209,\n            limb1: 0xaaad51a68888c9f4d366eb85,\n            limb2: 0xb854c3062c6dca4,\n        },\n        r1a0: u288 {\n            limb0: 0x88c793e1f884996295be7f4b,\n            limb1: 0x9801cbb1add70980a565d93,\n            limb2: 0x7f1a23af3e93b10,\n        },\n        r1a1: u288 {\n            limb0: 0x16b6ccc140737723f6fbf23c,\n            limb1: 0xfaa6476d81d4fb40a38fa84e,\n            limb2: 0x1d370360026ceef,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6768b1b65ac701242d58a4d5,\n            limb1: 0x9a21b14a1117318e6e93346c,\n            limb2: 0x28206643cf01adb6,\n        },\n        r0a1: u288 {\n            limb0: 0xc733c609365fab81f5bebf8c,\n            limb1: 0xe7dba9325253668b9de809ab,\n            limb2: 0x1e2aed8a72758ae3,\n        },\n        r1a0: u288 {\n            limb0: 0x95ec7d05aa1f4c5b117cc3df,\n            limb1: 0xc9473775e0fd4d6797d4fe54,\n            limb2: 0x28418cb32e9a4478,\n        },\n        r1a1: u288 {\n            limb0: 0x2a17416676088b3ed523bc76,\n            limb1: 0xa7a7189cf0cb6f593da6398d,\n            limb2: 0x1646a797175de826,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x60f4a61ff00c697d5917f60,\n            limb1: 0x27839a4398e69c8181596a80,\n            limb2: 0x18d5fc7b962c5d42,\n        },\n        r0a1: u288 {\n            limb0: 0x55d158bed72f3c06a973bb3e,\n            limb1: 0xda2f40ff8f88e68c41a7f0c,\n            limb2: 0x24df02427e6ac385,\n        },\n        r1a0: u288 {\n            limb0: 0xdfaa36ab439bf2b442be7dfc,\n            limb1: 0xaed028fb66a3e7c58d2b0cfd,\n            limb2: 0x2872ac37ed486519,\n        },\n        r1a1: u288 {\n            limb0: 0x51bafdcbfbad14f2e1810b0b,\n            limb1: 0xbda9fe48ffac5d1cf3f1c243,\n            limb2: 0x2e90de3ce10ad139,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x22f06d243ec31a24265558f6,\n            limb1: 0x144f71a68e6e295284eaa624,\n            limb2: 0xb114d08d4730af8,\n        },\n        r0a1: u288 {\n            limb0: 0xd3a0ee47077b6225045c67ee,\n            limb1: 0xeec7cbf282c77e03df828f62,\n            limb2: 0xbe64d352adee5f0,\n        },\n        r1a0: u288 {\n            limb0: 0xc7ec19dad21e785ffc755ad,\n            limb1: 0xd24141743526f183d2654043,\n            limb2: 0x1988f55b31c4faf3,\n        },\n        r1a1: u288 {\n            limb0: 0x994cab0255bb4272f95c3e23,\n            limb1: 0xd922c9add52c749a87cf7c07,\n            limb2: 0xaa4d57bef928d58,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x10918d6e1598af2ab245872,\n            limb1: 0x1e2e946c706a26cf28ee3625,\n            limb2: 0x843e82f122ff273,\n        },\n        r0a1: u288 {\n            limb0: 0xa13e048405c0e094e2be3dbb,\n            limb1: 0xd0749c842f2df1d1f99960e5,\n            limb2: 0x123960e86ebc1545,\n        },\n        r1a0: u288 {\n            limb0: 0xd2854d8792013fbbc7003968,\n            limb1: 0xef090e40a0840af5ffac6c3c,\n            limb2: 0x822c1bfb2975bb0,\n        },\n        r1a1: u288 {\n            limb0: 0x3e5a8926c61800d8035940d1,\n            limb1: 0x10a92d1990b5e90459db3104,\n            limb2: 0x1a1da6dbc9d3b803,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf3c1aff57ebd4252b1ee0a92,\n            limb1: 0x4dbf6eac239e2fd65d64b8f7,\n            limb2: 0x26d1f994835b7b47,\n        },\n        r0a1: u288 {\n            limb0: 0x345e6aaef5a543714baced,\n            limb1: 0xb490ac8096315947ee617410,\n            limb2: 0x1a09bb8870da1b8a,\n        },\n        r1a0: u288 {\n            limb0: 0x5ebf58b2e5dd76b36593db9f,\n            limb1: 0x8fa5c6ffbd16bb8a189499b2,\n            limb2: 0xaf4be2ac3e90ead,\n        },\n        r1a1: u288 {\n            limb0: 0xd4b8cde758e0d235326f7919,\n            limb1: 0xcd650faf49b3ee058023c216,\n            limb2: 0x1c00cc9bd40f552b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfc81a9267fe02a0e01e5690e,\n            limb1: 0x935b7be9ed04f236f8ccb6d3,\n            limb2: 0xd21be991cebbac7,\n        },\n        r0a1: u288 {\n            limb0: 0x823e612788adf8af694cadf8,\n            limb1: 0x28ffb411c649c749b8b2ab3f,\n            limb2: 0x29f85195d5ae6cb3,\n        },\n        r1a0: u288 {\n            limb0: 0xa4e79c63454447ad586868ed,\n            limb1: 0x1d25998e1dee245a7a740dfd,\n            limb2: 0x312f28354b440eb,\n        },\n        r1a1: u288 {\n            limb0: 0x230c5675e4713e459ecf6ee7,\n            limb1: 0xf23579a5477f2fded9e59a95,\n            limb2: 0x23effe3fb162cfa9,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6938a36b06b59bb433023aa9,\n            limb1: 0x9f733207d38e4c21c5f938d4,\n            limb2: 0xb694e7fb696f425,\n        },\n        r0a1: u288 {\n            limb0: 0x1fb7151f69662f3282addefa,\n            limb1: 0x73b463adbed2a2c44be9521d,\n            limb2: 0x1ce3d8bc49dd6f3f,\n        },\n        r1a0: u288 {\n            limb0: 0xcdefacedca9cea69a67218ef,\n            limb1: 0x2a61c39d6c9e8df657e11fa2,\n            limb2: 0x287b08ea40db8edf,\n        },\n        r1a1: u288 {\n            limb0: 0xf3493b34c974473567e0bfd,\n            limb1: 0x62ec80dec81fe20e56185f3d,\n            limb2: 0x2a9d8912a369f0fc,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb7482cd3a64ad7c6972ce18,\n            limb1: 0xc612ec6a27ef894c2448e7e,\n            limb2: 0xb0a181c0bc5bb35,\n        },\n        r0a1: u288 {\n            limb0: 0x77fd6133c7186e2a51fdfe8b,\n            limb1: 0xb6d8557c94e885365cd1284f,\n            limb2: 0x2807238c4095ab2e,\n        },\n        r1a0: u288 {\n            limb0: 0xac2bf429c889f4e4fca7ad87,\n            limb1: 0x4e2138d3a53fab48b9372da0,\n            limb2: 0x661b199c593f990,\n        },\n        r1a1: u288 {\n            limb0: 0x17ad71412ec95d2e450e4a9a,\n            limb1: 0x5a390094f598fbc1c73ffc6f,\n            limb2: 0x1745ca0ad68deb3c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x792e91102d6015db651264a5,\n            limb1: 0xef1739e0f3140e7dae1b9f26,\n            limb2: 0x2c68c775b43aa438,\n        },\n        r0a1: u288 {\n            limb0: 0x2d480c09009f63ff03bacd7e,\n            limb1: 0xe49d79a774b60104278749bb,\n            limb2: 0x28dd05053808f291,\n        },\n        r1a0: u288 {\n            limb0: 0xa4f235af16d6b1aa9cb935e0,\n            limb1: 0x3356bbf421edd3b119a977a,\n            limb2: 0x2c3a3e6fb5bf407a,\n        },\n        r1a1: u288 {\n            limb0: 0x475304a1c01b032aae98253d,\n            limb1: 0xc07800c8acc177d31257f8a7,\n            limb2: 0x2c17966ecef6d358,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe9cd661691f7215396894f0f,\n            limb1: 0x9e3c0f429f703e40f5baa9bc,\n            limb2: 0x1b94de4f8b072262,\n        },\n        r0a1: u288 {\n            limb0: 0xb2328b5f060b47983ead044a,\n            limb1: 0x5d6772c45ac19b49a05cbb0b,\n            limb2: 0xf6f282c18f98d7c,\n        },\n        r1a0: u288 {\n            limb0: 0x10f6b52bee174dc609820448,\n            limb1: 0xa4d84cb409d798e1dc4d0880,\n            limb2: 0x1e5bc83da6436d50,\n        },\n        r1a1: u288 {\n            limb0: 0xce182a96f56ced121091e41b,\n            limb1: 0x8800263a87f78d7ab82d3e71,\n            limb2: 0x2640778c4c20679b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb78d8e331f9fde95d8762cbe,\n            limb1: 0xe50fc6532130dcab69ccd2f3,\n            limb2: 0x1c5ad86495e84014,\n        },\n        r0a1: u288 {\n            limb0: 0xfe7268e3ed4b6b97899984c4,\n            limb1: 0xf2e63f6c60064bc7fb5fd561,\n            limb2: 0x9717b3891610a6b,\n        },\n        r1a0: u288 {\n            limb0: 0xb6a3d0ad2be4cf8a6d7a4932,\n            limb1: 0xf368ce713db6a7c85ce253e7,\n            limb2: 0x11fb9d13419437db,\n        },\n        r1a1: u288 {\n            limb0: 0x6c0e91e32102a27c6bc0f117,\n            limb1: 0x1580942374bdb287e34d50e8,\n            limb2: 0x25451806c34da2eb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xecf4b439dcb55cb7cd17c938,\n            limb1: 0xaa30677da06e04007bc10783,\n            limb2: 0x5acf050d824c550,\n        },\n        r0a1: u288 {\n            limb0: 0xfdadd2fba222755a97b93bd8,\n            limb1: 0xc5f72c5874f13b63850c7e3,\n            limb2: 0x8d6e33876937270,\n        },\n        r1a0: u288 {\n            limb0: 0x48b70ead9b67d481e7fbac7c,\n            limb1: 0xeea576a4020c901099fb5796,\n            limb2: 0xe89161f969f758d,\n        },\n        r1a1: u288 {\n            limb0: 0x8081483546fdaca3e803ae13,\n            limb1: 0x7b29b6041c0844fb7bd3c828,\n            limb2: 0x840a11945bdaf61,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5257173c58d9ac477f4e7362,\n            limb1: 0x4ac0a4b0a604dc11701ec7be,\n            limb2: 0x2ced1a344a191870,\n        },\n        r0a1: u288 {\n            limb0: 0xced9cba631d33b433f4c02b7,\n            limb1: 0xc83a4a272ab8c01b6631fd59,\n            limb2: 0x201561c61f1309c6,\n        },\n        r1a0: u288 {\n            limb0: 0x6c107fe09b4144f1c2e218b4,\n            limb1: 0x6bedd36ccbfb5eb21e3052b5,\n            limb2: 0x1710d637ed85f3f4,\n        },\n        r1a1: u288 {\n            limb0: 0x2dbf59bd81c858f20f9a2c22,\n            limb1: 0x538891d36da9558f005eaa18,\n            limb2: 0x2e047a78332f57a7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x87ebd70984bc04919fc9986,\n            limb1: 0x49e5baa3bf84014bbfa4b343,\n            limb2: 0x13c681e8a87b09d5,\n        },\n        r0a1: u288 {\n            limb0: 0xc7ba9d524130fff410f86354,\n            limb1: 0xe56c32754857a3eadf92430e,\n            limb2: 0x12b61a869a91562d,\n        },\n        r1a0: u288 {\n            limb0: 0xcf43a1c9be7903f6823856c3,\n            limb1: 0x17aa81a20cb8b6533b7e05ad,\n            limb2: 0x8edd93c88eac470,\n        },\n        r1a1: u288 {\n            limb0: 0x61527058e2d37f7267e2d55b,\n            limb1: 0x4133bd157d450dc27f32d457,\n            limb2: 0x582ee28eaa58570,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8e35c54e5a8fc51ffe565808,\n            limb1: 0x54a5c4c2ce68417d89a41927,\n            limb2: 0x1bb192a0da69b4bc,\n        },\n        r0a1: u288 {\n            limb0: 0xb15a23caab89361c695304d,\n            limb1: 0xa21ac5490dcc6ec31e532a00,\n            limb2: 0x2c5d334f664f1db0,\n        },\n        r1a0: u288 {\n            limb0: 0x1513569aab675cc8a80d83b,\n            limb1: 0x8823f86ca10c614200a888cd,\n            limb2: 0x27e75cf5e6c5decb,\n        },\n        r1a1: u288 {\n            limb0: 0x7dfe801eafb39580b2591c53,\n            limb1: 0x7ad779d2bc8b8960e97e8369,\n            limb2: 0x2a2e897e4fcb8d03,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xba5ea5187f76b5704defef65,\n            limb1: 0x8a7319f0591a44264e9857c7,\n            limb2: 0x2d9dd5412302fd6b,\n        },\n        r0a1: u288 {\n            limb0: 0xaa7e8dec15610116b7d0b0cf,\n            limb1: 0xe5e0a55405629a2fe14bf3d5,\n            limb2: 0x2dae2582a7c55627,\n        },\n        r1a0: u288 {\n            limb0: 0x303fd13168b5089e4e0e3fa2,\n            limb1: 0xd1d646954006479380c9f8ab,\n            limb2: 0x1b643b47405a9dd,\n        },\n        r1a1: u288 {\n            limb0: 0x893d761d04a60dae26f4e064,\n            limb1: 0xf185cfd787972d2bed98ddf7,\n            limb2: 0x27e2db3d67b8caa3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb1fd301f8de9a4fdaa4a5688,\n            limb1: 0x656432730487dbc9e9e29270,\n            limb2: 0x17df9b19f2918abd,\n        },\n        r0a1: u288 {\n            limb0: 0x2d5832aab61dab3a5549a92,\n            limb1: 0xe47839d4ca00888bb56afc4a,\n            limb2: 0x3fe4c9d799a3bd1,\n        },\n        r1a0: u288 {\n            limb0: 0x2810fcc73bea01896cd75a0f,\n            limb1: 0x2c92809424a97db06448759f,\n            limb2: 0x123eff8f7259581a,\n        },\n        r1a1: u288 {\n            limb0: 0x601fdec3567703d1c3d34df0,\n            limb1: 0x7f03a904345610b15ff1205a,\n            limb2: 0x289705e3e298309a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc16237e16f04d4855851266c,\n            limb1: 0x216a15737a6b54352caee4fb,\n            limb2: 0x2cb963083fceacfc,\n        },\n        r0a1: u288 {\n            limb0: 0x1d5728a99fc8a6b1501def7d,\n            limb1: 0xc82efa12901500963bbfdfc1,\n            limb2: 0x29472ad7813d3e51,\n        },\n        r1a0: u288 {\n            limb0: 0x4bc73fff7a02804f65a8b807,\n            limb1: 0x55d252b720478bafee38f7e0,\n            limb2: 0xb89e5290fecd5c4,\n        },\n        r1a1: u288 {\n            limb0: 0xcecce3e7e700ddfe8b57d681,\n            limb1: 0x6ffd2dd49f2ff2ecf872f76b,\n            limb2: 0x1834d8633ed7aa5e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x921d0a486c2af8e00aca15cf,\n            limb1: 0xce5e704e01a8381a38da803c,\n            limb2: 0x2a3b10f49d66db73,\n        },\n        r0a1: u288 {\n            limb0: 0x4d5fe5d5c9f584cffdde9b20,\n            limb1: 0x694bbbada9b90b560fe95a28,\n            limb2: 0x1f9131f7b839f971,\n        },\n        r1a0: u288 {\n            limb0: 0xb2a323906650185cccdc623c,\n            limb1: 0x8643738b8d13209ced4a8401,\n            limb2: 0x1afc7bd309bd2e6f,\n        },\n        r1a1: u288 {\n            limb0: 0x66a405a6925c6daf1121bfa8,\n            limb1: 0xae0d46e02b0c767a8311def7,\n            limb2: 0x1eac8613f1b73d0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc0dc2ee8c1634b43c7c67a36,\n            limb1: 0x44b5cda8cf434ecc7f4c6c75,\n            limb2: 0x17ff23c44b249965,\n        },\n        r0a1: u288 {\n            limb0: 0x6af3458d6fcb51bce863b3ee,\n            limb1: 0xb4c9cf6033098a5367bc38a0,\n            limb2: 0x16b5fff40c83591f,\n        },\n        r1a0: u288 {\n            limb0: 0x75584b946a79b88e5bec9dd0,\n            limb1: 0x696fa9bfb38fbd7621f553d2,\n            limb2: 0x1bf248055b1b2f90,\n        },\n        r1a1: u288 {\n            limb0: 0xd45ae28bb106c9cf5b04a1b5,\n            limb1: 0xefc1e176eab50a80b4506c1b,\n            limb2: 0x2d6a0ffa973804a5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x639121398df650418531ec43,\n            limb1: 0xc0dc106ff32d445f63f8a120,\n            limb2: 0x2db69a72bd084b2f,\n        },\n        r0a1: u288 {\n            limb0: 0x2efbf5c7bf4d8eee620eb8e1,\n            limb1: 0xbebd2c4b9f9ecc3d77d2c81c,\n            limb2: 0x267a73e3f62a38b5,\n        },\n        r1a0: u288 {\n            limb0: 0x30674b4201c8f6262cad443b,\n            limb1: 0xc6536f9ebec5d19d59f529c4,\n            limb2: 0x226bae32ed07fa9b,\n        },\n        r1a1: u288 {\n            limb0: 0x3c71a9fed0157d9b2577984,\n            limb1: 0xb147ab8ccbc129533b491b1,\n            limb2: 0x482a238e334dfe6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf6c03dcc8bd1379820cb9967,\n            limb1: 0xe8b667570844eddc673b54d8,\n            limb2: 0x19130dc068e65472,\n        },\n        r0a1: u288 {\n            limb0: 0x90bbf7945a517e331f836592,\n            limb1: 0x2051ba8f0200e210ad28fc3f,\n            limb2: 0x177199e9bca93186,\n        },\n        r1a0: u288 {\n            limb0: 0xb960ca772d1e6bbaf9338163,\n            limb1: 0xa7f34e9ae435bcd02d2faf69,\n            limb2: 0x26dff0b0b6c2f756,\n        },\n        r1a1: u288 {\n            limb0: 0xd70ea39bddfa02454849f135,\n            limb1: 0x9aaf0bb16c009e3b28d1bbd2,\n            limb2: 0x581b8dda5c79e1e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x463ce7476e959a1931385237,\n            limb1: 0xf75919c87010d96ac7c94cbe,\n            limb2: 0x24a412978f2c5ecc,\n        },\n        r0a1: u288 {\n            limb0: 0x4564f0aa378b3a5b8d09788f,\n            limb1: 0xf875d0276495706bc0d09d6d,\n            limb2: 0x1b9fed005e16d2cf,\n        },\n        r1a0: u288 {\n            limb0: 0x26445be3d3f49fbd01c70d1,\n            limb1: 0xd5378dbee2feb0496e798ec,\n            limb2: 0x1e8739b2b619c238,\n        },\n        r1a1: u288 {\n            limb0: 0x549556a03524dc61169783b9,\n            limb1: 0xec53665fd27c4865c5367af8,\n            limb2: 0x22dbab3609da89f9,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xba161cc9e9cebd75b98e13ed,\n            limb1: 0x2632c1abd01681aa124fcbd9,\n            limb2: 0x1bbdec597979fb4,\n        },\n        r0a1: u288 {\n            limb0: 0xfa0305a260ea7340c6afa662,\n            limb1: 0x39110a94cdd1c5e8cc0a1d1f,\n            limb2: 0x1e788e28c0103ea6,\n        },\n        r1a0: u288 {\n            limb0: 0x442b863a5c5f8a2c338a4463,\n            limb1: 0xb9fdab2ef9d33c430dece624,\n            limb2: 0x1d5d4de242b83d54,\n        },\n        r1a1: u288 {\n            limb0: 0xdfb11e4e76affcbb462154ba,\n            limb1: 0x5704a29b1a8e2703af5c3c48,\n            limb2: 0x2312d417321e92e7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4b8c4313130de071e5a25b39,\n            limb1: 0xf1b3260f13cabcf328b26362,\n            limb2: 0x116ceab520d16408,\n        },\n        r0a1: u288 {\n            limb0: 0x10523011df0f3a9767278aa3,\n            limb1: 0x16f3307af4c560a400c90ae2,\n            limb2: 0x2ede49ff73a3a3ae,\n        },\n        r1a0: u288 {\n            limb0: 0xd6465d87f836c70c2add7bdf,\n            limb1: 0xc7c6c33787b9a4a9f0b6a19f,\n            limb2: 0x3a10546e2951d1a,\n        },\n        r1a1: u288 {\n            limb0: 0xc4462f508080ee25b195846,\n            limb1: 0xa9d1ee563b4765315d3b2423,\n            limb2: 0x22d6d25e9e134bc5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa8fdb52a5866ede3c829660e,\n            limb1: 0xa747cc99fe24bbc124e60f83,\n            limb2: 0x77dc0694ce277af,\n        },\n        r0a1: u288 {\n            limb0: 0x873e405654f06e7e618a0869,\n            limb1: 0x5ce484db4f007368cbf5ef3f,\n            limb2: 0x406b87af902b368,\n        },\n        r1a0: u288 {\n            limb0: 0x42c090f0d49f3b172899d597,\n            limb1: 0xe282930c7a6ae94172637791,\n            limb2: 0x5ae9317bf562ef3,\n        },\n        r1a1: u288 {\n            limb0: 0x9d38292f11255137c4072d20,\n            limb1: 0xcbd810babdf368eda51a016e,\n            limb2: 0xe4a9c670bc40cd6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6402739bdeb3492bb057259f,\n            limb1: 0x26c108432264fab03a9dc8eb,\n            limb2: 0x18ef9553dbba8439,\n        },\n        r0a1: u288 {\n            limb0: 0xa00d189487a0340fd81cc584,\n            limb1: 0xe346065e533d0311d3a49619,\n            limb2: 0x20adf0a42e6d1031,\n        },\n        r1a0: u288 {\n            limb0: 0x2f40fa2fabe3889e62434f1c,\n            limb1: 0xf5a60a0a1db35e01c23c4618,\n            limb2: 0xccf2f37e5f9d7f0,\n        },\n        r1a1: u288 {\n            limb0: 0x8755dc93602da01a9bdbf2fc,\n            limb1: 0x9fe1c22607998504f098c4d5,\n            limb2: 0x18f0f45dc543c0ee,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xadf84437d9999eba295275a7,\n            limb1: 0x52543bbddf3fc6be2f32a055,\n            limb2: 0x419797ad7a39dcc,\n        },\n        r0a1: u288 {\n            limb0: 0xb14ccb344bc7ae03672b7ed3,\n            limb1: 0x32b4f3937b94a54a112ec060,\n            limb2: 0xd511afdf9250855,\n        },\n        r1a0: u288 {\n            limb0: 0x9b40fa04851da740d91800ad,\n            limb1: 0x3b7477878090da8c8f43a115,\n            limb2: 0xbd0be68b2e101c2,\n        },\n        r1a1: u288 {\n            limb0: 0x15760dce121076360bd9f792,\n            limb1: 0xf1924f92230e898476d82bc9,\n            limb2: 0x304f65ebb79d2bd0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5506e07a5fe97fdc5664791b,\n            limb1: 0x7aee4b162d0660d41af388e4,\n            limb2: 0x1bee62627e4c1064,\n        },\n        r0a1: u288 {\n            limb0: 0xdd3ab4c9ec1954b09595dc4d,\n            limb1: 0xd02053bef44757a04f774eb9,\n            limb2: 0x1f8a410c013ff7fc,\n        },\n        r1a0: u288 {\n            limb0: 0x8dc98f9b1c2f0319008950ca,\n            limb1: 0x4fb659c41dc5601420cab99b,\n            limb2: 0x15c515af959291b5,\n        },\n        r1a1: u288 {\n            limb0: 0xba1238b4b4da8ca1dc84dcec,\n            limb1: 0x191a2667a2b4bdc6a8d02874,\n            limb2: 0xbacbf0de8be4aa7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7818f560d037de6bdd24efde,\n            limb1: 0xda994bd7113ddab6f25bf7f8,\n            limb2: 0x2e7509590341ee,\n        },\n        r0a1: u288 {\n            limb0: 0xd14d410ebd15ad0e2dbeb005,\n            limb1: 0xeeaef525eb5ca49303b32111,\n            limb2: 0x9952bc1815a0105,\n        },\n        r1a0: u288 {\n            limb0: 0x40511cd89aa9c76b90afd1fe,\n            limb1: 0xeeebf38560f5818c7794c609,\n            limb2: 0x1e9835676b0e4cad,\n        },\n        r1a1: u288 {\n            limb0: 0xfc4540bcfa1be23824759eda,\n            limb1: 0x761c0a6caea91ff18df75d87,\n            limb2: 0xf4e6c24c41216b9,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7c95bb4a3045f598ec02ad3e,\n            limb1: 0x69527e98f5b823f054558e44,\n            limb2: 0x21990ad9da9ab486,\n        },\n        r0a1: u288 {\n            limb0: 0xe76176f500a3b7bb7193cfc5,\n            limb1: 0x85b90669c4270df3ba79b129,\n            limb2: 0x780be9adcae4970,\n        },\n        r1a0: u288 {\n            limb0: 0x481876a8b44064c05d5246ef,\n            limb1: 0x7dab43eb527bd93d1dc91b07,\n            limb2: 0xd714afad4aeff67,\n        },\n        r1a1: u288 {\n            limb0: 0x81582d4c64462a522c03d882,\n            limb1: 0x609cde5a3b8e8b404e3faf64,\n            limb2: 0x2abe09a84d32cfe4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6c6df46abcfe69b84b5cbbe8,\n            limb1: 0x43b46da7c7b2aeec2fa935bd,\n            limb2: 0x2f14336fcc2bdbd,\n        },\n        r0a1: u288 {\n            limb0: 0x9ece765823cf827cccc87414,\n            limb1: 0xbf5d9992534c6831dd441b95,\n            limb2: 0x6f7e39a016feeaf,\n        },\n        r1a0: u288 {\n            limb0: 0x1759f088e6a22164845e28b3,\n            limb1: 0x8fc900b0084e661b03277c03,\n            limb2: 0x150fc5685af62748,\n        },\n        r1a1: u288 {\n            limb0: 0x3f0ff585c16da81d8922130b,\n            limb1: 0x8b2bc20a9fc724a9e26c8a5f,\n            limb2: 0xbbd2c609b0705af,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfd726e0bbbdd73195a7edd4e,\n            limb1: 0x80381316ac4cc1180fe6580b,\n            limb2: 0x1679db00b998286b,\n        },\n        r0a1: u288 {\n            limb0: 0xf4df1c9e315352cc58418740,\n            limb1: 0x609cfd341eddc85035abe0a,\n            limb2: 0xb0bbbf58076e7c3,\n        },\n        r1a0: u288 {\n            limb0: 0x7f251d631ef9feedc710cc50,\n            limb1: 0xf240804810ec72c3bd6ea838,\n            limb2: 0x238235c3c9db8b71,\n        },\n        r1a1: u288 {\n            limb0: 0x1846a54b2774044cc6db6109,\n            limb1: 0x588f586073d6e0294383f78,\n            limb2: 0x1439b6a213dd4c9f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x67e20f1add3f4ebf14209db,\n            limb1: 0xf7f6c97230cb77e31230ed5c,\n            limb2: 0x25e1f1a58ef3989f,\n        },\n        r0a1: u288 {\n            limb0: 0x70b88d1617d059ceb7d98043,\n            limb1: 0x82f9d5ff0ae1136a457c094c,\n            limb2: 0x1e57f0f235835b64,\n        },\n        r1a0: u288 {\n            limb0: 0x1b7e989c0aa4fed09c6fb03e,\n            limb1: 0x301d42612ab66120ceb7f821,\n            limb2: 0xa616f1fb22b8093,\n        },\n        r1a1: u288 {\n            limb0: 0x1309fa41e57e07658617981b,\n            limb1: 0x3f8982bf9c1278956955f68e,\n            limb2: 0x2d2c9739573fee78,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xcc24c41f4fa231c9b68ff129,\n            limb1: 0x5440abe8953c426a1d9c839c,\n            limb2: 0x2f827a205f84222c,\n        },\n        r0a1: u288 {\n            limb0: 0xb7ec4f27a8455ed2e02825c0,\n            limb1: 0xf6214b20f2802f0322bf54de,\n            limb2: 0x7b6c0211a56a7cd,\n        },\n        r1a0: u288 {\n            limb0: 0x3ddcd17909984999f1d9c0b7,\n            limb1: 0xa88f74be516fa85ef09c0c37,\n            limb2: 0x163a9e06932a7748,\n        },\n        r1a1: u288 {\n            limb0: 0x2430701222fa1d7df18182ed,\n            limb1: 0x1842ef7d1e749169f69cd7d2,\n            limb2: 0x1cfab3ad0f78b05,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x47c22ebfcc3068f8dcf02310,\n            limb1: 0x3b3dd7a1f523872b1116c94d,\n            limb2: 0x227ed969d3c4de16,\n        },\n        r0a1: u288 {\n            limb0: 0x74588d18e59d5afd7d6333e0,\n            limb1: 0x9f0b0142842948df6eb78b67,\n            limb2: 0x2e0977e3388507ff,\n        },\n        r1a0: u288 {\n            limb0: 0x9edeb901cfd05d4d62c57891,\n            limb1: 0xf2f44c81706b6c574ef74f27,\n            limb2: 0x21c87948f9829350,\n        },\n        r1a1: u288 {\n            limb0: 0x8dae1edadcbeb24d1690498e,\n            limb1: 0x64a5a0aefccf74b01c6fa30e,\n            limb2: 0x1bc752ac7ac4cde6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x545af0ef26ace52605983817,\n            limb1: 0xa79fd477f6e4bb7b9ff7ccfd,\n            limb2: 0x1ee6d4735695766c,\n        },\n        r0a1: u288 {\n            limb0: 0x1f7a45146d34eb09a7598bd9,\n            limb1: 0xefa78e89ed2b184fde732788,\n            limb2: 0x25ec7ae4455d5b79,\n        },\n        r1a0: u288 {\n            limb0: 0x2b6b735fbce332afa29e90cd,\n            limb1: 0x805bb9f2ebc1c6417b04e9f5,\n            limb2: 0xec616e54a8979c3,\n        },\n        r1a1: u288 {\n            limb0: 0x709b98b05dd7794bab2d59b4,\n            limb1: 0xf9f45610844c2c81a03a8a65,\n            limb2: 0x148662451cb583aa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x62117d56c64475e6fbdec3af,\n            limb1: 0x583fbbd8939b1e224aa95b0e,\n            limb2: 0x28191a7f22fb1b52,\n        },\n        r0a1: u288 {\n            limb0: 0x4a365c16e3d6d9018e9edc8e,\n            limb1: 0x2349fc23c3d161ad59f146a4,\n            limb2: 0xcff2c08ca6d70ff,\n        },\n        r1a0: u288 {\n            limb0: 0x9b0f3727f6c65ae514391775,\n            limb1: 0x66f500fff93b94dc25cd2ef5,\n            limb2: 0x1616cc41a4059848,\n        },\n        r1a1: u288 {\n            limb0: 0x20020f168e75bd67232897bd,\n            limb1: 0x7538b1621f2aae4a1744a9d2,\n            limb2: 0x6a303d9af7e26b0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe62cde136820c7533e265423,\n            limb1: 0xf793e2f097203fb2839ec54,\n            limb2: 0x2ecea3bada582558,\n        },\n        r0a1: u288 {\n            limb0: 0xe91c26cff33b3fca1fdca36b,\n            limb1: 0xc0c7af270a2e684511271132,\n            limb2: 0xe5db537a21ca3cb,\n        },\n        r1a0: u288 {\n            limb0: 0xc5e97fa982d1fafbbd294014,\n            limb1: 0x9789fec81f07b1dd32691278,\n            limb2: 0xd0841164115e268,\n        },\n        r1a1: u288 {\n            limb0: 0xefb69f6018971aeb3c7133a,\n            limb1: 0x7edbee9a93563bce2898d463,\n            limb2: 0x2d197bf653525879,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x37a161654a55fde81d57e5e5,\n            limb1: 0x1d33e1859f025bbf2f252cb1,\n            limb2: 0x256f03ef2e631950,\n        },\n        r0a1: u288 {\n            limb0: 0x70b359aa3604bedf42532ed2,\n            limb1: 0x485902c5248f43f89f4d6489,\n            limb2: 0x91f619c2ee45ad5,\n        },\n        r1a0: u288 {\n            limb0: 0xcc72bdd8ef4bdbdbd5636693,\n            limb1: 0x72d6b70d02a9f6fbc7ca5523,\n            limb2: 0xf88eb096dbbef8e,\n        },\n        r1a1: u288 {\n            limb0: 0x567bbc86dcfd872c272170b9,\n            limb1: 0x14ad5e1ba548e11ee091146a,\n            limb2: 0x2bde585cff386dc0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xeb79e6b473fadb992c5f83a8,\n            limb1: 0xefe49f26e3970afdfad2cc2e,\n            limb2: 0x168773b099059842,\n        },\n        r0a1: u288 {\n            limb0: 0x9d3e9750b006a99612167308,\n            limb1: 0x36d359b16e977ed15d4161c2,\n            limb2: 0x1e4c95a1c15caafd,\n        },\n        r1a0: u288 {\n            limb0: 0xb3c4a79ce63902a10a51e23,\n            limb1: 0xcb207dc605042ccef609394a,\n            limb2: 0x28367f81a785eea9,\n        },\n        r1a1: u288 {\n            limb0: 0x7f77d67428213715e7e45365,\n            limb1: 0x1e5c92195da5eafb12b14815,\n            limb2: 0x19678fa4bc862330,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1818039df6913206ab2405a2,\n            limb1: 0x5377ab614813a34cfcee8b06,\n            limb2: 0x27c2371869238315,\n        },\n        r0a1: u288 {\n            limb0: 0x6e3a7b752b93af987513de48,\n            limb1: 0x600847be13708d65af6fd056,\n            limb2: 0x1fb56f957b1c324f,\n        },\n        r1a0: u288 {\n            limb0: 0xcc16c53c2ef721dc5c8f5e5f,\n            limb1: 0x89e8742919e5d6f87814752a,\n            limb2: 0xca6f6bfb7f426d3,\n        },\n        r1a1: u288 {\n            limb0: 0x41add8c9133ba30a102a4bb,\n            limb1: 0x660c71c07cd5e4a635871503,\n            limb2: 0x2b0ba37253ca76bd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb6f9eda2bfae53ca69fd72df,\n            limb1: 0x62429dd41cbb3c31acbada57,\n            limb2: 0x50d343c2ebbfa63,\n        },\n        r0a1: u288 {\n            limb0: 0xb16441c66be44074686e0873,\n            limb1: 0x72118bf8f92fd93da3f931b1,\n            limb2: 0x2d8c67efcdab2c9f,\n        },\n        r1a0: u288 {\n            limb0: 0x7c82fdbad97732971dcf82f8,\n            limb1: 0x5905f35e201d9b83b7a1898a,\n            limb2: 0x666471518738295,\n        },\n        r1a1: u288 {\n            limb0: 0x79a4e035db3f75020f87c4e4,\n            limb1: 0xa6597595a691184e717aa1b7,\n            limb2: 0x1f74dc71d5a002c7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2eda1e7a3e47f0ceaa9f0137,\n            limb1: 0x903e05a4c7372f902311a7e3,\n            limb2: 0x17ca943a56fba67,\n        },\n        r0a1: u288 {\n            limb0: 0x9b977b33fe71218fa31100a2,\n            limb1: 0x9985a54c8af99f6f98acb770,\n            limb2: 0x264f4f1ae306ae09,\n        },\n        r1a0: u288 {\n            limb0: 0x7b5e4fdc6bc84d795d332dd2,\n            limb1: 0xe2676d5d0d2d5bb6a482e391,\n            limb2: 0xf998e906ef11c24,\n        },\n        r1a1: u288 {\n            limb0: 0xd0215aa04d97800bfe4d2571,\n            limb1: 0x8afbbc923a7161865fcccaf1,\n            limb2: 0x68a922244a1e06c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfe3e9707bdad783425ab808c,\n            limb1: 0x48bae37f3785f6ac84f1d9f4,\n            limb2: 0x23f7964ac6e85c1f,\n        },\n        r0a1: u288 {\n            limb0: 0x46389f8eb814620c85b16ace,\n            limb1: 0x90f3fba998699480b75716f3,\n            limb2: 0x1776968a7c554df4,\n        },\n        r1a0: u288 {\n            limb0: 0xefa070a4d4d1d52d00593451,\n            limb1: 0x2f9abffa4bfb1d259f9e163b,\n            limb2: 0x29367aa8e59832c,\n        },\n        r1a1: u288 {\n            limb0: 0x82ea5e13b62b054933b28042,\n            limb1: 0x55bec845824984eb488dc154,\n            limb2: 0x2a75ffeff6990ed5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb1aed4098913b1760bfdef79,\n            limb1: 0xfafca93bae3f4797778a4a3d,\n            limb2: 0x61e99ac907f0b5,\n        },\n        r0a1: u288 {\n            limb0: 0xb3cfb4bc10c0fd6f52e7741f,\n            limb1: 0x6997070a8b218ce200404bd8,\n            limb2: 0x1e541f2ec16eefb6,\n        },\n        r1a0: u288 {\n            limb0: 0xc8037c2c08d6b09417f68f4,\n            limb1: 0xc6672a1c3a90ce2db95e8fca,\n            limb2: 0x2faf1762a18f3cf3,\n        },\n        r1a1: u288 {\n            limb0: 0x6a3151adfb916a8ff290644,\n            limb1: 0xe53f264a1da30cb269399d90,\n            limb2: 0xf020c410d9b4038,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd466ae8b808726024540df45,\n            limb1: 0x106edc6b8bbe95e75c4c8ddb,\n            limb2: 0x11468447a8135b98,\n        },\n        r0a1: u288 {\n            limb0: 0xd0881b80d847044084035ba3,\n            limb1: 0x120d97c39e7d772df4ea1724,\n            limb2: 0x276d399b6465c9e,\n        },\n        r1a0: u288 {\n            limb0: 0x7d57a86618737d3d2abaaa4a,\n            limb1: 0xd7e9a1452de00c5e1014e4a7,\n            limb2: 0x1d4294c5a1e71a79,\n        },\n        r1a1: u288 {\n            limb0: 0x22d506d59afa935528b3209d,\n            limb1: 0x9b3ab29bf3cd5e1e10cc308d,\n            limb2: 0x747bbb31310f22d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x199cc10b709fbc97e010b5a2,\n            limb1: 0xbfaf4107fa51b16129569088,\n            limb2: 0x27e59a950ce88313,\n        },\n        r0a1: u288 {\n            limb0: 0x6554582e8ebeeaed97477b68,\n            limb1: 0xa21b4ce4041d0db94d82c7c8,\n            limb2: 0x1de018ce87d7bda5,\n        },\n        r1a0: u288 {\n            limb0: 0xc6420e29ce5455750c024fda,\n            limb1: 0xc98a4b583326b58ef9b26e44,\n            limb2: 0x250ae9ddc80af6e2,\n        },\n        r1a1: u288 {\n            limb0: 0xb2df135c47abbfec8b28d7a2,\n            limb1: 0x937ccc7b47049c2f3167c9b2,\n            limb2: 0x1eae535d6c58d67d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5d9402b6b38fd455bf6d41e7,\n            limb1: 0x40762f68405f312ef02f8598,\n            limb2: 0x1f8342cbdceb3506,\n        },\n        r0a1: u288 {\n            limb0: 0xc72348fb470ab8c04752b5a4,\n            limb1: 0x334d25fa09cf31cca46d0916,\n            limb2: 0x204a36e5e3992a52,\n        },\n        r1a0: u288 {\n            limb0: 0xd80af7fe0ef47fff92f37a68,\n            limb1: 0x16c4943784e96ba42bf07819,\n            limb2: 0x29504fb758b88d97,\n        },\n        r1a1: u288 {\n            limb0: 0x73229c759eb01fb63c20288b,\n            limb1: 0x9ac158cfc3f612f54354fa46,\n            limb2: 0x2b076be18044918b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfb23f67b0c7c277b0fb86dd1,\n            limb1: 0x38ecd10f58fa1a2a35794a92,\n            limb2: 0x37aa0d9abc10a23,\n        },\n        r0a1: u288 {\n            limb0: 0xa41ca972e4e66a3542219964,\n            limb1: 0x1bd17624ed2ce1e682b4e8f7,\n            limb2: 0x2989444f436f1dd6,\n        },\n        r1a0: u288 {\n            limb0: 0xd4c30c692a0cd4437bd20830,\n            limb1: 0x3ff4fc96d1e014b335cb4ecb,\n            limb2: 0x1c92a02e4ef43dfa,\n        },\n        r1a1: u288 {\n            limb0: 0xd920ac36097259643357948,\n            limb1: 0x4a07824bac28e19dfecd3c9b,\n            limb2: 0x2107b2b219b0fce7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa7506225f160822b273888e9,\n            limb1: 0xd3d14903f7cac6d483c7f486,\n            limb2: 0x1069a304f46fc73d,\n        },\n        r0a1: u288 {\n            limb0: 0xe09cdad30c6c95ec103b4899,\n            limb1: 0x49e00af66e7a9ee491dae35,\n            limb2: 0x1864d886a088da8a,\n        },\n        r1a0: u288 {\n            limb0: 0xc1b39342ab05cdf6860d1663,\n            limb1: 0x2d93a67b66068131b4c4da45,\n            limb2: 0x2cf24b680c6c956a,\n        },\n        r1a1: u288 {\n            limb0: 0x8c080385898b2b724819996,\n            limb1: 0xcba25b471c4db069a8676475,\n            limb2: 0x108fc71b9d6170bd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x572b773de719e0286485c280,\n            limb1: 0x11e06de6ae88abe2dc292d08,\n            limb2: 0x186e96233737a01,\n        },\n        r0a1: u288 {\n            limb0: 0x847e89ed969849374f7db3c7,\n            limb1: 0xc5b2fb949e49d53bcf33515b,\n            limb2: 0x23b1283aae54fe3b,\n        },\n        r1a0: u288 {\n            limb0: 0xed5be001209472991a4e75a,\n            limb1: 0x2f5a7a9479f81cff74bda20a,\n            limb2: 0x103224cf323271db,\n        },\n        r1a1: u288 {\n            limb0: 0xece900cc17ebd9f42d6a706a,\n            limb1: 0x4fcf1446fb08c2ce8fe1f6d9,\n            limb2: 0x305cc1d699ea0794,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf8bfb85cdc86039bb4018125,\n            limb1: 0x7be955c10b0359a7973d8645,\n            limb2: 0x26304c9784e41970,\n        },\n        r0a1: u288 {\n            limb0: 0x45e2dd0c8c9e99be2d486ab7,\n            limb1: 0x4435e999a3d2eb84952cbfff,\n            limb2: 0x1330c65943a597bf,\n        },\n        r1a0: u288 {\n            limb0: 0xc3ca87ec812cb9200943aa6c,\n            limb1: 0x240ae8fdf376bf8512aad6bb,\n            limb2: 0x2334035bf7082914,\n        },\n        r1a1: u288 {\n            limb0: 0x63ede79d89c52d83f35048d8,\n            limb1: 0x73a18b855a63a05716992b7e,\n            limb2: 0x217132215f0cc50f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x76c2c3f4a1f1e9d8af542b7,\n            limb1: 0x8441dca19b660c87b2c24022,\n            limb2: 0xd4fb1ace706aab,\n        },\n        r0a1: u288 {\n            limb0: 0x6b98b456e4100fa122cd3adf,\n            limb1: 0x9ae10c95907ea280c6754592,\n            limb2: 0x1473f309a21a16eb,\n        },\n        r1a0: u288 {\n            limb0: 0xf530f6daa1f8c4701334c030,\n            limb1: 0x6fa238391d516b8940b78ac3,\n            limb2: 0x27085bb6119190ab,\n        },\n        r1a1: u288 {\n            limb0: 0xf6e1318ded506c0fa4a5ca59,\n            limb1: 0xd627f19ca3008cc90d8bbd8e,\n            limb2: 0xe4f8de695c15f15,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3cd25258c14698ad321ce4c1,\n            limb1: 0x5f3e41e0e9abc286750b55ea,\n            limb2: 0x1e7acc78ae40f53c,\n        },\n        r0a1: u288 {\n            limb0: 0x7fb753e36893e039a913c94f,\n            limb1: 0x71d2b9fcc8c9833d7de96163,\n            limb2: 0x99a73fa44b04d5c,\n        },\n        r1a0: u288 {\n            limb0: 0xde6ab8423c206004fc0a2e0e,\n            limb1: 0x78d2d32cf9a4d7886551910a,\n            limb2: 0x153d30f1951850ab,\n        },\n        r1a1: u288 {\n            limb0: 0xe1104a60c9402d05c7369e2e,\n            limb1: 0x692902d053754c3b56e08d58,\n            limb2: 0x13eae4536ba169a3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1509c5b91b73a75eff1fd9fb,\n            limb1: 0xf3dec59a348b17c7400b86bf,\n            limb2: 0x13db20e7e664f0c0,\n        },\n        r0a1: u288 {\n            limb0: 0x36dd1839b3a22a5afbd7f7ed,\n            limb1: 0x66b0df244064db38c2bb2556,\n            limb2: 0x2abe1143e1e96ef0,\n        },\n        r1a0: u288 {\n            limb0: 0xe9a3cf2e38669d402746144e,\n            limb1: 0xf5902b6e357b3171d55c611,\n            limb2: 0x2664b92ca19b7611,\n        },\n        r1a1: u288 {\n            limb0: 0x9daa58ef595d3b525a479c15,\n            limb1: 0xb8c4e03fb569df7a793ee10c,\n            limb2: 0x5375f321384b046,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8a787397b454b58176837e03,\n            limb1: 0xc5cec0e7f665a2a76114ed3a,\n            limb2: 0x2c78f7b8fba875fd,\n        },\n        r0a1: u288 {\n            limb0: 0x7928a23938145a58f5d57ab0,\n            limb1: 0xede46e1acbb7d258988f4b3a,\n            limb2: 0xe9e606331057a90,\n        },\n        r1a0: u288 {\n            limb0: 0x9e19b0f639d02c4e3468d6db,\n            limb1: 0x9fec35cbec423d803671267c,\n            limb2: 0x28477ed79b8d9f1c,\n        },\n        r1a1: u288 {\n            limb0: 0x9f3f001662c3ddb9542c5b1e,\n            limb1: 0x66630f87ae05a36602688eee,\n            limb2: 0x2e141bd01fbd3896,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xcc3035708103ff2f96090b76,\n            limb1: 0xf0cb8a10216eccab8c3b0985,\n            limb2: 0x163aab6dd7da60cc,\n        },\n        r0a1: u288 {\n            limb0: 0xd33d3548ed9d2cec0c8c3e97,\n            limb1: 0xabc9469b7c56c8da2ce322b,\n            limb2: 0x2e6f16f35be168fd,\n        },\n        r1a0: u288 {\n            limb0: 0xb89c671c85a0d99ee444f09c,\n            limb1: 0xc3e70b59ad07c869ff35fce,\n            limb2: 0x2d94791bb226fbf5,\n        },\n        r1a1: u288 {\n            limb0: 0xdd91f5db83ab791b396b15fc,\n            limb1: 0x475f296aa5ec4dcb22e72eaf,\n            limb2: 0x118eb40c1ba0d446,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x28ccff4098291ff99db7d015,\n            limb1: 0xbbf223ce77f8bdf1e351f459,\n            limb2: 0x1eb6506d0c7d4aea,\n        },\n        r0a1: u288 {\n            limb0: 0xe4c907dc1a275aa0cdbd6c2d,\n            limb1: 0x357d8adc7866fcc383178ae9,\n            limb2: 0x18c6082d4b4a59f5,\n        },\n        r1a0: u288 {\n            limb0: 0xf7ba73f45b1f2c9b8b13b1c1,\n            limb1: 0x754b28de4706d4147a660bf3,\n            limb2: 0x304b461ac8db9efd,\n        },\n        r1a1: u288 {\n            limb0: 0x7afa3c98b59c12047d082d00,\n            limb1: 0x16b499cba52810fd94e60ac1,\n            limb2: 0x107cc1c9d1ee0ae5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5473c94e995465f0785b4316,\n            limb1: 0x86e38425ae2faae14a123db7,\n            limb2: 0x236ccf43605631c3,\n        },\n        r0a1: u288 {\n            limb0: 0x3560440e3b7a50cba31817c4,\n            limb1: 0x94e7415089d9c6a041b95a4e,\n            limb2: 0x17b1e780a1f282b7,\n        },\n        r1a0: u288 {\n            limb0: 0x34f92afe1a802ef319d629ce,\n            limb1: 0x9b7ae704b85f2ef01618f9ac,\n            limb2: 0x127e7a97519bc45,\n        },\n        r1a1: u288 {\n            limb0: 0x87fef97f09987ebb7a9d93f3,\n            limb1: 0x6e571f3688a614ddfc482b07,\n            limb2: 0x26d1e21000c12da3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb292d5bbc1c5800beeca8d15,\n            limb1: 0xb6e3c05aa128d07de2df66e8,\n            limb2: 0x24424145a074ed6b,\n        },\n        r0a1: u288 {\n            limb0: 0x138b775d1ca3d771fd249d3,\n            limb1: 0x8a2392db8be88b8fa3f04951,\n            limb2: 0x17bc62334cefe39c,\n        },\n        r1a0: u288 {\n            limb0: 0x8e7371df60a9a5e4cbbc9be9,\n            limb1: 0xb650615a2aa43a3aced9368c,\n            limb2: 0x1a4dc1089e983ca5,\n        },\n        r1a1: u288 {\n            limb0: 0x18674fa925de769d104bd2a2,\n            limb1: 0x777c884e96e41fdb34f4141a,\n            limb2: 0x4d2dfcf532f463b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc780881f9c6d8bca3e37aea0,\n            limb1: 0xe9895da94e554ff87a2dfd7,\n            limb2: 0x2f2f37a08cd78298,\n        },\n        r0a1: u288 {\n            limb0: 0xc54128f3d98d66a205153035,\n            limb1: 0xde9df82c3ef59e5ffeb06262,\n            limb2: 0x12c11f147ed32b02,\n        },\n        r1a0: u288 {\n            limb0: 0xd779e2290c08b46957f9f81f,\n            limb1: 0xcef48524479ef765998c179e,\n            limb2: 0x62d4fd8696cda6c,\n        },\n        r1a1: u288 {\n            limb0: 0xf553ff2a36599491c12d51cf,\n            limb1: 0x68f2b7726eab96d19be4f7ad,\n            limb2: 0x1b2e70aad5ff1bde,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf421435fe144055f20b6716a,\n            limb1: 0x8d06d11b62031d272be85bb6,\n            limb2: 0x378648f296513f4,\n        },\n        r0a1: u288 {\n            limb0: 0xaa516565bc7b4ae51c4a1d57,\n            limb1: 0xd1a3c04fc68cda14c386fd17,\n            limb2: 0x10a17e6b2b05ae5f,\n        },\n        r1a0: u288 {\n            limb0: 0x5a4fdbaf4101c2e7b0824483,\n            limb1: 0x243d3d5fab841583935cbdbc,\n            limb2: 0x2bdee3f29a271704,\n        },\n        r1a1: u288 {\n            limb0: 0x75a0bfe5357850025da7dc1e,\n            limb1: 0x7efd8ea95e831ae7b7cb4204,\n            limb2: 0x242d5ff5148e8a24,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x13404adaeaee7586ba22a2fd,\n            limb1: 0x37d5f59c1d1a7ead09415ba0,\n            limb2: 0x2d046fbec788a89f,\n        },\n        r0a1: u288 {\n            limb0: 0x304e12830e0da56473bfd493,\n            limb1: 0xef4257261a4d1e86faddc8a6,\n            limb2: 0x2e2a406604501f28,\n        },\n        r1a0: u288 {\n            limb0: 0x4df9be0616aa88b0d4cf02a2,\n            limb1: 0xfe4ac5d159b42f097e07c99,\n            limb2: 0x1bfaf8ddf8eadbe0,\n        },\n        r1a1: u288 {\n            limb0: 0x39cb7475288b5721bd85070f,\n            limb1: 0xbcf9db00ab3740a004be0aa4,\n            limb2: 0x67aa9f57b6254b0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc35e158b40bec28bc76a5275,\n            limb1: 0xc7155f076ac63ee9c5bc4282,\n            limb2: 0x29db032c04d42b9a,\n        },\n        r0a1: u288 {\n            limb0: 0xdd6363dfcc7e71cd13c51cf4,\n            limb1: 0x10ffc527e277eaf97c79a492,\n            limb2: 0x22a9e4c447737c96,\n        },\n        r1a0: u288 {\n            limb0: 0x9705df81acb2749faf48b2e4,\n            limb1: 0x62e438807e2bfc92e2fdb9f6,\n            limb2: 0x138bbb12a9dd92f4,\n        },\n        r1a1: u288 {\n            limb0: 0x9a675f19eeab63bd0216ce7c,\n            limb1: 0x9a08c702e29a00db40bc334e,\n            limb2: 0xc960c1d7c1c05fb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7a08cc34c6fcd1f9e74c35b2,\n            limb1: 0x2cc8a7d624b15a0f9bfb2d3e,\n            limb2: 0x22760e0e61e3e208,\n        },\n        r0a1: u288 {\n            limb0: 0xc27bb24b5b346b44cf7d548f,\n            limb1: 0xf27ea7f3736c8b8168f8c2c1,\n            limb2: 0x295d0b6d3ef18509,\n        },\n        r1a0: u288 {\n            limb0: 0xc7df1942c9b70ad4983814f,\n            limb1: 0xf66a53554bde327b0ff9c637,\n            limb2: 0x1fe98a3ad4e0774a,\n        },\n        r1a1: u288 {\n            limb0: 0xa33e765594cc92d0facb00ed,\n            limb1: 0xe35f28bd8fb424b3721d3880,\n            limb2: 0x1735f29046f597b1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe8cbc94bb8cdf72ff26f38fd,\n            limb1: 0xe0a2179f1a66292497c7a553,\n            limb2: 0x258204cb3308769e,\n        },\n        r0a1: u288 {\n            limb0: 0x31d262be0ea54e0eed69a03b,\n            limb1: 0x830d5451d02580b33f770099,\n            limb2: 0x1b7c1fa69407bced,\n        },\n        r1a0: u288 {\n            limb0: 0xeb6c0bbb02f4cf840a51ac39,\n            limb1: 0x30ebd50843b10bfe90d970a0,\n            limb2: 0x2ce27eb8c126350b,\n        },\n        r1a1: u288 {\n            limb0: 0x4c8c9c51af22d9bf461a9f49,\n            limb1: 0xfb8b4c9ef7b7fc81c52ff1a2,\n            limb2: 0xd39e1c14eea7101,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb02550d130bf712df6d98a57,\n            limb1: 0x8854a229566b7ff22b8ccff3,\n            limb2: 0x12a0631c0924ec70,\n        },\n        r0a1: u288 {\n            limb0: 0xb59d2598e43244d544a1616e,\n            limb1: 0xf28e9462628066c68e061fc6,\n            limb2: 0x7baccf7063f2981,\n        },\n        r1a0: u288 {\n            limb0: 0xb1cbf3882570f3d23dbedbc4,\n            limb1: 0x5e8742fe9dc865822e5cae92,\n            limb2: 0x2654f08f566866ac,\n        },\n        r1a1: u288 {\n            limb0: 0x1287198f6ac726fd6aa6595e,\n            limb1: 0x220b82cf3025285d6b7344af,\n            limb2: 0x1419e0cd4fc9d705,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x16da4933b0462809081edbc4,\n            limb1: 0xb2b5cf2a2286026e0bbc4c4,\n            limb2: 0x14490aeefaf4002b,\n        },\n        r0a1: u288 {\n            limb0: 0x9631e388544a5571edb94366,\n            limb1: 0x4647882204977448d836aae,\n            limb2: 0x1df1cff53ae1660e,\n        },\n        r1a0: u288 {\n            limb0: 0xce99ac65e9d29dee6ab79293,\n            limb1: 0xb5827a5ff68c42c93f003a3d,\n            limb2: 0x2ff7f220d4e2b15e,\n        },\n        r1a1: u288 {\n            limb0: 0xfeead92cf9c75dc3dc26ddbe,\n            limb1: 0x73f7035049129b05256f2625,\n            limb2: 0x2f97ef7e0326ae1b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3557697309324ec7b28f655f,\n            limb1: 0xf990f387e4585977f0c61411,\n            limb2: 0x1f88afaff88f777f,\n        },\n        r0a1: u288 {\n            limb0: 0xfbd05da9a80d37ee13e654d,\n            limb1: 0xa34586aaab313351d2211c3c,\n            limb2: 0x16f110b250c8f4a7,\n        },\n        r1a0: u288 {\n            limb0: 0xe7379e88b19d61e01dbb464d,\n            limb1: 0x6ef01d97f74e23a2a2e3954a,\n            limb2: 0x2b1bc8c3cb77b3b4,\n        },\n        r1a1: u288 {\n            limb0: 0xaefdcb2fc007f2b030adf282,\n            limb1: 0x407cd78e89ca611eeba48b00,\n            limb2: 0x15caeeddb0b65f8e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x25e2464064e839a435c901fd,\n            limb1: 0xc8a250aab01f64653e7b143,\n            limb2: 0x140159960e8bbee6,\n        },\n        r0a1: u288 {\n            limb0: 0x7cb8f3194d4856b2e37ad147,\n            limb1: 0x79f1a0cbdbe629456ff7fd09,\n            limb2: 0x2e8cc9955ec33b14,\n        },\n        r1a0: u288 {\n            limb0: 0x3a33e8aae92f696039285ae8,\n            limb1: 0x50e70dff510555f94708ec0e,\n            limb2: 0x107f090bc1746726,\n        },\n        r1a1: u288 {\n            limb0: 0xebc6d08d9ffc1f811537ae5c,\n            limb1: 0x97116269a7fe2b46ecd07544,\n            limb2: 0x2ed49e8306bb6b53,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf8f6ac38dbd6563a32fe3ee9,\n            limb1: 0xfacb340af38f5dd75813a198,\n            limb2: 0x16bbfa264bbaa255,\n        },\n        r0a1: u288 {\n            limb0: 0x76a6b03f569b4e99a401edca,\n            limb1: 0xba4469e4fb78a30370beb53,\n            limb2: 0xde76a28c997a85a,\n        },\n        r1a0: u288 {\n            limb0: 0x9368f4915d1afe49ee098655,\n            limb1: 0x4d6ca82a7c8d3612d1f5d552,\n            limb2: 0xbf0b37fd18b8725,\n        },\n        r1a1: u288 {\n            limb0: 0xc503c77bc66cf62a998cabd4,\n            limb1: 0x4fe691624059c05c90abec0e,\n            limb2: 0x1b8daabf94ec10a9,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x338a05ed9e18ca0c8cbb9ba,\n            limb1: 0xeaed8a5ad1bbfa8ffd7827d0,\n            limb2: 0x229ab6a016d41b8d,\n        },\n        r0a1: u288 {\n            limb0: 0x6de2e082d93ad5ab82221604,\n            limb1: 0xdbadbca9be15f3e1a6011bef,\n            limb2: 0x17f46739d3798529,\n        },\n        r1a0: u288 {\n            limb0: 0x556cb2cd13bc608a395ef30a,\n            limb1: 0x5ae57098c69bfdd5e4310a77,\n            limb2: 0x234c308ff816d887,\n        },\n        r1a1: u288 {\n            limb0: 0xde9e9d4f811bdd153dca9448,\n            limb1: 0x2a5c0dbac52000c678bf9037,\n            limb2: 0x2f74a2c3d53bbf07,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5d5094b09519f9fbc1bf26c7,\n            limb1: 0x60b75c521b5d0d3a8c6c5a57,\n            limb2: 0x1db1a7d363c021fa,\n        },\n        r0a1: u288 {\n            limb0: 0xda84f6ecfab32ddfc17bb30c,\n            limb1: 0x31f21c63899699ef82e8956,\n            limb2: 0x1bb6484e546389ba,\n        },\n        r1a0: u288 {\n            limb0: 0x6d03eff42e8a9c1517bf621f,\n            limb1: 0x25e25c77b11cc5006cb39115,\n            limb2: 0x2bab9460edd274f4,\n        },\n        r1a1: u288 {\n            limb0: 0x6636dd3c7ea7e49e82793062,\n            limb1: 0x45e083ea0fb71779754a40e0,\n            limb2: 0x1b148d5ad236afff,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1bd0d3e64772dd8d6f4eb955,\n            limb1: 0xd551e62b4dc950330f32055e,\n            limb2: 0x2af99115e61ea584,\n        },\n        r0a1: u288 {\n            limb0: 0xbf68bac9801a05b7d4e5c230,\n            limb1: 0xb2c2415c0237afafa8e24039,\n            limb2: 0x9639d3152ec116d,\n        },\n        r1a0: u288 {\n            limb0: 0x5470718dfbca1295766112f2,\n            limb1: 0xcdc95e016f5749cd20628ff7,\n            limb2: 0xa073db3f3d4ee7f,\n        },\n        r1a1: u288 {\n            limb0: 0x59adba4782946b799f2b3f52,\n            limb1: 0x60aac6f24d8307d05aaf156e,\n            limb2: 0x29fa48831a9be4a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfb944c01e622920643567a03,\n            limb1: 0xb5e410fcce49e44fa6b733e5,\n            limb2: 0x67235bfc45af909,\n        },\n        r0a1: u288 {\n            limb0: 0x7415228da60f54ef44f0e9e5,\n            limb1: 0x54a974a80cb733a9398a4237,\n            limb2: 0x14742634cb3e88c6,\n        },\n        r1a0: u288 {\n            limb0: 0xe6117563be5a51a3e45835bb,\n            limb1: 0x5cd22381f024901e8038e534,\n            limb2: 0x9bccc5fd250a4e2,\n        },\n        r1a1: u288 {\n            limb0: 0xd7e83df65939cb9e0a65506f,\n            limb1: 0x5c0226578531f39df6fbfc47,\n            limb2: 0x24413aaad067b5a2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1104034e64d27e5ffc63566,\n            limb1: 0x399bd49fa7407a8bdb5203c7,\n            limb2: 0x1832f6474b41c0bf,\n        },\n        r0a1: u288 {\n            limb0: 0x55803008aa1d71cb5f9941c1,\n            limb1: 0x404a98b2848b86b4af5b57e6,\n            limb2: 0x163abe5942eb31d8,\n        },\n        r1a0: u288 {\n            limb0: 0x82f5febdbf1aef734e2827ca,\n            limb1: 0x12d2b5ab6f8472e574b9210c,\n            limb2: 0x28eb5172b9c24785,\n        },\n        r1a1: u288 {\n            limb0: 0xb2fbbca733e95d52f011bf6f,\n            limb1: 0x632c5aacc01d53ce7abc8bae,\n            limb2: 0x750b07eef4315e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x36e8e6c311534f247b2f522f,\n            limb1: 0x30b52221767eb139a6621af5,\n            limb2: 0xa9472da06a550f6,\n        },\n        r0a1: u288 {\n            limb0: 0xd54bec3ff6e5c1609841378f,\n            limb1: 0x86779a5fb4e9c376a93fbad,\n            limb2: 0xfe84f7906eda072,\n        },\n        r1a0: u288 {\n            limb0: 0x4f7564b178d5cb370ab75811,\n            limb1: 0xd054e692a00381045a312b52,\n            limb2: 0x1af83b2d13968385,\n        },\n        r1a1: u288 {\n            limb0: 0xc3f2584ed4cfcc7213a55c0e,\n            limb1: 0xcf835b28a17db67f23c65108,\n            limb2: 0x15f8038dbb750a89,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb311fac4a46b12a29d9145c5,\n            limb1: 0xf0216ee536a371f5bb9fb55c,\n            limb2: 0x128c4da7ec19e940,\n        },\n        r0a1: u288 {\n            limb0: 0x40d5ac9c25788920a64397a9,\n            limb1: 0xe61e75b3f5562e0f5bc0039d,\n            limb2: 0xac9a936b0bfff57,\n        },\n        r1a0: u288 {\n            limb0: 0xf7091e9a7ea3a772b7f006b3,\n            limb1: 0x4541ad07dea41c3ff23f1c1,\n            limb2: 0x73ea3cc79b728c1,\n        },\n        r1a1: u288 {\n            limb0: 0xcd2b3dcd910e9d600708fe2e,\n            limb1: 0x726ab436201b4de44b9efa4f,\n            limb2: 0x2e6674c1fcf4372e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9501f9c373c02510420bd774,\n            limb1: 0x34a01a7a11837b54b21d87ad,\n            limb2: 0x13013fa1ad5a2602,\n        },\n        r0a1: u288 {\n            limb0: 0x4bf8308ce14b6895f625821,\n            limb1: 0xde9402ce107e3b0bb8325032,\n            limb2: 0x221a4b3042ac620f,\n        },\n        r1a0: u288 {\n            limb0: 0x2b54888ac068e44ac1b5e725,\n            limb1: 0xe2595c1718cf92904f26b388,\n            limb2: 0xc444735a378fc2b,\n        },\n        r1a1: u288 {\n            limb0: 0xdb79229471d5dfb86ac334e6,\n            limb1: 0x5300c1298d97c7e56a443d9,\n            limb2: 0x290a2ac4e4806224,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x68dc34c5837479b6fe1b15f4,\n            limb1: 0x70ffaada5c0d2134dd4b01ff,\n            limb2: 0x12600a475dc719f6,\n        },\n        r0a1: u288 {\n            limb0: 0xef8f37a1a7c1874aa696b864,\n            limb1: 0xf03831086e97655126735dcc,\n            limb2: 0x29a8f8b90b8db8bd,\n        },\n        r1a0: u288 {\n            limb0: 0xdaae6d464020690b41135866,\n            limb1: 0xe1a461381c2daafc22ecc6b8,\n            limb2: 0x1be8b437d95ece9a,\n        },\n        r1a1: u288 {\n            limb0: 0x6ec13263dbf5de6eebbeffc,\n            limb1: 0x7309cff008feb3ebfb9b22e6,\n            limb2: 0x112e6ec0db536bd2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf85ee56a7931c3a3d7e22b1,\n            limb1: 0xc49e4026d30000ff5ad0ed87,\n            limb2: 0x9a8d4f19347675e,\n        },\n        r0a1: u288 {\n            limb0: 0x34652599e03489dbca6a04bb,\n            limb1: 0x98f8ba9e9b65abccfdce7169,\n            limb2: 0x153fbd440ef725b5,\n        },\n        r1a0: u288 {\n            limb0: 0x35111b6f4eacb1fcf5f53f8f,\n            limb1: 0x23545a2bb56c9b2fe222f39c,\n            limb2: 0x1b7822ce0cdc1f2b,\n        },\n        r1a1: u288 {\n            limb0: 0xe68e164e8c7cdb83224d5ecf,\n            limb1: 0x4900a3f7ed3d0b25d2716b2d,\n            limb2: 0xf1e46e6adac9d5d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8b2c899639dc5cc9c044490d,\n            limb1: 0x22f86bdfbacd20aeec5d8be9,\n            limb2: 0x19b836ccbb17a7e4,\n        },\n        r0a1: u288 {\n            limb0: 0x89bae9959824cb3a475e5c49,\n            limb1: 0xc53c6b56b477f0dd0853827b,\n            limb2: 0x22783114b221de87,\n        },\n        r1a0: u288 {\n            limb0: 0x5c91c9c68702894ffcd0ea24,\n            limb1: 0x5d691537f69a30e7050f98a4,\n            limb2: 0x1bb9cbba6a513842,\n        },\n        r1a1: u288 {\n            limb0: 0xa9226abf9515bbd281fed4c8,\n            limb1: 0x75b0a0c6355bd2dd020a5c6,\n            limb2: 0x221468ff5248a1e8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf8820d4aceab306eb783e0a6,\n            limb1: 0xc7d1a20e7942c4d389818908,\n            limb2: 0x2e31d9c48e89b432,\n        },\n        r0a1: u288 {\n            limb0: 0x85bbebd854eccf7a6c56767,\n            limb1: 0x2d07ae2c3946de9e92f58236,\n            limb2: 0xeb5a4ae8acab71d,\n        },\n        r1a0: u288 {\n            limb0: 0x4512ff65bb8a0aed640ac4ab,\n            limb1: 0xdd9f660ad3feed3e4510f4c5,\n            limb2: 0x16ba9a8b70ccc71c,\n        },\n        r1a1: u288 {\n            limb0: 0x9d2c01267d4aeefcf1f78ccc,\n            limb1: 0xdbeb1adcbf7df61b43429ba9,\n            limb2: 0x2c895b99227c31d6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x90e454055b75ead8e2ebac42,\n            limb1: 0xfbabb00c2f3aa9dbd7522417,\n            limb2: 0x5b3e7e4068f790,\n        },\n        r0a1: u288 {\n            limb0: 0xf85cebc1555abc4d89b337ef,\n            limb1: 0xf4761f79f94babcc24806057,\n            limb2: 0x1b996af0e24e9310,\n        },\n        r1a0: u288 {\n            limb0: 0xd7206c93b508f78061fe01cd,\n            limb1: 0x742ef1d29a2c692312298778,\n            limb2: 0x151fe23f3bae34a2,\n        },\n        r1a1: u288 {\n            limb0: 0x87f5668138132b557efd05d6,\n            limb1: 0x94e793d236320a9e3e525285,\n            limb2: 0x1988ca9052857a71,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7c6a269fe06a16627f5ecf5b,\n            limb1: 0x50317e79670fba9583cbc9af,\n            limb2: 0xb20ea22d8b7ef38,\n        },\n        r0a1: u288 {\n            limb0: 0xcec9cccc31411674ea756b45,\n            limb1: 0x7febf8b5905c4ad47e85f90a,\n            limb2: 0x85dd991fef5f00a,\n        },\n        r1a0: u288 {\n            limb0: 0xd935f602bec4954512e2a83c,\n            limb1: 0x3d448544bb1a52e6c21568e5,\n            limb2: 0x30253372b426fa93,\n        },\n        r1a1: u288 {\n            limb0: 0x2321475e1ba3f3775a8df03d,\n            limb1: 0x8ad60a1731370c5148fdd271,\n            limb2: 0x5ac30ab6d4ac94f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x387a543af80110750ef06290,\n            limb1: 0xf82835b4768246d0aaa1d901,\n            limb2: 0x2419af1838a4d116,\n        },\n        r0a1: u288 {\n            limb0: 0x47251c0c962be9ae66db3d05,\n            limb1: 0x43f64d4ac11d82a21f131c2d,\n            limb2: 0xf896f4ab3e39af0,\n        },\n        r1a0: u288 {\n            limb0: 0xc5775374fa4d6293b3c2c070,\n            limb1: 0xc1aef05fdcb1bb03a298fe38,\n            limb2: 0x298566e64b1aa9ea,\n        },\n        r1a1: u288 {\n            limb0: 0xc1973597201173697fe8c018,\n            limb1: 0xc357b15cb9b588bae8abc963,\n            limb2: 0xed371de6f4074ab,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x40d9f3f225ebab5380d4b72,\n            limb1: 0x31a46955bff4173ff90907c5,\n            limb2: 0xb56f0074b975741,\n        },\n        r0a1: u288 {\n            limb0: 0xba705bbb410ae6715e48508,\n            limb1: 0x9baf711d475a978e9c6208e0,\n            limb2: 0x2687a1dd57bbd608,\n        },\n        r1a0: u288 {\n            limb0: 0x4cdcbddd1555f6a28e4b4633,\n            limb1: 0x5c368f07d906b3dedd347055,\n            limb2: 0x4c585e6b42f1812,\n        },\n        r1a1: u288 {\n            limb0: 0x2aa6dcbf02a9bfd6a69b9713,\n            limb1: 0xc377411908d06357c9dd7e0d,\n            limb2: 0x1ea404aa6b11edc9,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1ba2d91e528e15b1e971d7bc,\n            limb1: 0xc3d5b13a1a0ed98868b53c49,\n            limb2: 0x58c43b20c6ae43b,\n        },\n        r0a1: u288 {\n            limb0: 0xad13d1837679166bbc309e9c,\n            limb1: 0xd40862384caeae8d2c50a472,\n            limb2: 0x1333a454fe004635,\n        },\n        r1a0: u288 {\n            limb0: 0x67824db562428bd89655e374,\n            limb1: 0xbb420615e88b3b3e751019b,\n            limb2: 0x1c8baf2e8cf9c832,\n        },\n        r1a1: u288 {\n            limb0: 0x6ffe8674ea7d664329d21c4a,\n            limb1: 0x30f2edace39818c4f5d4cd54,\n            limb2: 0x22a7b32f48b0882a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xedd1d0959325376134891630,\n            limb1: 0x1128395a9b57a29073cb0850,\n            limb2: 0xf3743d152d6505f,\n        },\n        r0a1: u288 {\n            limb0: 0xb982975f8f3754c447048e4d,\n            limb1: 0xa1f5febfa531fb8eda900af5,\n            limb2: 0x9d186ca8c21f49e,\n        },\n        r1a0: u288 {\n            limb0: 0xae55ad9465da2d347c06d679,\n            limb1: 0xef03eabc82c065f5848ac316,\n            limb2: 0x3048edc721645512,\n        },\n        r1a1: u288 {\n            limb0: 0xbf3fb43ad7c3bea794a1bd69,\n            limb1: 0xb370c4cc79bacdb996aa7769,\n            limb2: 0x152d882002404123,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb8acde096bd6f573c8807c88,\n            limb1: 0xf9370645c8a230645a4558bd,\n            limb2: 0x11060ebe6c0900e0,\n        },\n        r0a1: u288 {\n            limb0: 0x6f8b7c4c8c4850fe1b091402,\n            limb1: 0xba7f7d879ddcfc28350fb8e4,\n            limb2: 0x251131fc4797a238,\n        },\n        r1a0: u288 {\n            limb0: 0xc067941904de6452a702cc36,\n            limb1: 0x36010868f854adcaac243b23,\n            limb2: 0x2be8d5d432d0e622,\n        },\n        r1a1: u288 {\n            limb0: 0x48bff01c3e0bb1049adc54d6,\n            limb1: 0x5f6636dd538087bb8e95c05e,\n            limb2: 0x1aa24bc4a8d0aca4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfed7cbe3be258eacb3805c43,\n            limb1: 0x6a6b305ac8710cf771130d6a,\n            limb2: 0x20c5bdfdf73feb71,\n        },\n        r0a1: u288 {\n            limb0: 0xd8ee10b63f015bcc45e694b3,\n            limb1: 0xde212e60212fd33b5fb07f79,\n            limb2: 0x10406d0c66676419,\n        },\n        r1a0: u288 {\n            limb0: 0xae6200bbf69b2d8222adc0c9,\n            limb1: 0x5ed8395ab5798779de7855c7,\n            limb2: 0x1306f0dfb9dd1f33,\n        },\n        r1a1: u288 {\n            limb0: 0x7d3e5564e11b0c0d87ce2fcf,\n            limb1: 0xa011abe1dfaff9533b90024b,\n            limb2: 0x4414840770b8d45,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1abbfaf4636b146d437f0f32,\n            limb1: 0x823aeee9a4d8bec2345f04eb,\n            limb2: 0x474bc80c3969d26,\n        },\n        r0a1: u288 {\n            limb0: 0x4574559e190f5a9005079834,\n            limb1: 0x1a14b1796aeaf3cac262c90,\n            limb2: 0x2a206e06250d18c9,\n        },\n        r1a0: u288 {\n            limb0: 0x7c011e64290a2723d04fbb47,\n            limb1: 0x9bf025c6164128c502666a3f,\n            limb2: 0x22056cad12d485a3,\n        },\n        r1a1: u288 {\n            limb0: 0x2c4a99cfec75332ddeb73d3f,\n            limb1: 0x664ed1b9b659c29a8c5e86db,\n            limb2: 0x1c996a2f464fa6d5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x68cb5b19d04919eb3904b718,\n            limb1: 0x3c200fed008fce871c299fe0,\n            limb2: 0xc82b868b865eaf2,\n        },\n        r0a1: u288 {\n            limb0: 0x8d319155c9ce9e7023bba44a,\n            limb1: 0xdf6d46a6eafac55cd37588a7,\n            limb2: 0x230891a91d84fb9,\n        },\n        r1a0: u288 {\n            limb0: 0x6c47fa46ada891b1ad0d4a2d,\n            limb1: 0x896ef732068203aae4835c7f,\n            limb2: 0x13305bfc59ed9f88,\n        },\n        r1a1: u288 {\n            limb0: 0xdef6d4b1bb52e3ed41f3149,\n            limb1: 0x4d38ba467238b118bd600aaa,\n            limb2: 0x23a7c08a0d34b716,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe65bdf2f0e46c5d14bb2d437,\n            limb1: 0x75d347475ec4f5e5da58702b,\n            limb2: 0x1e813045e86534b1,\n        },\n        r0a1: u288 {\n            limb0: 0x19aa620481b7ed5be5d86a56,\n            limb1: 0xfe7790488a68214c21b7e599,\n            limb2: 0x60c00e0cb979bbe,\n        },\n        r1a0: u288 {\n            limb0: 0x681c25373d992243e7bc4316,\n            limb1: 0xdaa79fd2125a52658e4edbdf,\n            limb2: 0x8712013710d9b84,\n        },\n        r1a1: u288 {\n            limb0: 0x26dbe63cdb5675671894a27c,\n            limb1: 0xe81e4b46a10e510982b660b3,\n            limb2: 0x8c1356b21364b2d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x180ea20e04ff0cfea452b5ef,\n            limb1: 0x33a60d4aedd65598601bb804,\n            limb2: 0xaffd14ad17ead4a,\n        },\n        r0a1: u288 {\n            limb0: 0x81a910653e6e700bcea6610e,\n            limb1: 0x6d6da92fa688c271dbf2e929,\n            limb2: 0x1c6e6b669bcc47a2,\n        },\n        r1a0: u288 {\n            limb0: 0x9af3035b52384ba68596606b,\n            limb1: 0x3fa4f17d582ce91fe8ca38fe,\n            limb2: 0x4fe17bae4b30f16,\n        },\n        r1a1: u288 {\n            limb0: 0x1ab98ebb109073ba1cbc0dbb,\n            limb1: 0xe660bc83caf74b1c8bf3ffb9,\n            limb2: 0xce501ef0be5371c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9ffe62d6c121725aa3dc36e9,\n            limb1: 0x6737e5cd363c5c11c8bf9ce7,\n            limb2: 0x17c47bea351ac796,\n        },\n        r0a1: u288 {\n            limb0: 0xf372cf537d3cbd62464f2996,\n            limb1: 0xc2b9f39affb15c1c565820ca,\n            limb2: 0x5574310dc643654,\n        },\n        r1a0: u288 {\n            limb0: 0xdc8bb75702c703f43630205,\n            limb1: 0x95033f7e1161bb1c84e88163,\n            limb2: 0x46d85f905c3f6b1,\n        },\n        r1a1: u288 {\n            limb0: 0xa9acb5a9647aa09d829135c8,\n            limb1: 0x4bd37d411bc856d38f320e81,\n            limb2: 0x7896f127bef56fc,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb4ff705d518fd8d507edeaad,\n            limb1: 0xb8d6290591e20c70907b4f50,\n            limb2: 0x13cf6850ed83a8dd,\n        },\n        r0a1: u288 {\n            limb0: 0x9e8a05fa2a451c111ad1c113,\n            limb1: 0x8db5108125c5cbd78b9da01,\n            limb2: 0x27f247c7aa579dc6,\n        },\n        r1a0: u288 {\n            limb0: 0x9178a3dddec5c7aae0e06dca,\n            limb1: 0x58c7e0146524cbde6f68e28f,\n            limb2: 0x88e852062e630dd,\n        },\n        r1a1: u288 {\n            limb0: 0x69f9b02ecec442e37998de01,\n            limb1: 0x5cec46a3b23ea712f31ade1c,\n            limb2: 0x9fb06804e3f2902,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbf97e7024cb4c784db5bb1d2,\n            limb1: 0x885d190dc80200b104734467,\n            limb2: 0x2f8c96b95a4cc609,\n        },\n        r0a1: u288 {\n            limb0: 0xdbefd57376bacff12dd5bf8d,\n            limb1: 0x725a4a257518c7f89ddc7147,\n            limb2: 0xc764f79ea6d7683,\n        },\n        r1a0: u288 {\n            limb0: 0xfa3fe08305546a6b3bf2e9cf,\n            limb1: 0x710f3caf9d79a6696b4d972,\n            limb2: 0x12139b7a210ceba1,\n        },\n        r1a1: u288 {\n            limb0: 0x508cd98936add0253c52a372,\n            limb1: 0x802ab928a43250c71b30e58c,\n            limb2: 0x5fc4912d57a3f0c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfec54ca77219e3f19676ab7b,\n            limb1: 0x35c7f555865188a018a4da62,\n            limb2: 0x21186a3acc624741,\n        },\n        r0a1: u288 {\n            limb0: 0x21ddf02f404de3a01207e58a,\n            limb1: 0x23771e91b431f2af1f1ac780,\n            limb2: 0x8e3f5e341b6527a,\n        },\n        r1a0: u288 {\n            limb0: 0xe4a4409417045e8a52de5c81,\n            limb1: 0x7285bf1777e48aacf83eec1,\n            limb2: 0x20fb9b67bbbd29e1,\n        },\n        r1a1: u288 {\n            limb0: 0xa48af9d53abedb33c38211a1,\n            limb1: 0xcc79b186b059588232745396,\n            limb2: 0x117cf4e8ab0d8c01,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbf62a89fb0b5572d634e036e,\n            limb1: 0x62a4d7777fbdb30e117e4c96,\n            limb2: 0x1433cd8e6693800d,\n        },\n        r0a1: u288 {\n            limb0: 0xff6e40d2e595bd4b38b984b5,\n            limb1: 0x10a254dcf6a53cd6a1a536a,\n            limb2: 0x205a86246aa4e70a,\n        },\n        r1a0: u288 {\n            limb0: 0x6ad13bec3f64b16831ecf3fc,\n            limb1: 0x77e9fac67ceed69e2884e6e2,\n            limb2: 0xacc767288a196f5,\n        },\n        r1a1: u288 {\n            limb0: 0x212a64c8db6818125f5c9d93,\n            limb1: 0x8572ee34b58bae6edf226f4e,\n            limb2: 0x2948ef466aa9fd42,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x866d9dd94cf5c01da1af5b70,\n            limb1: 0x89ec47fb1c069b4a36fa36fd,\n            limb2: 0x2a0587e51228856d,\n        },\n        r0a1: u288 {\n            limb0: 0x771ffaa3db79c0011aee776f,\n            limb1: 0x40625b6f2ee697202dfd503a,\n            limb2: 0xa81c431cf771fa8,\n        },\n        r1a0: u288 {\n            limb0: 0x8711b2a55df6bf89af526172,\n            limb1: 0x1eb553b6ff69efe960c7c10b,\n            limb2: 0x1f669ce048bde363,\n        },\n        r1a1: u288 {\n            limb0: 0xf800397513b7b78bd8083e57,\n            limb1: 0xc4528a9a59670bbb3033b697,\n            limb2: 0x262a51ab0a32bc7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x84c92b9b7085152c191113c9,\n            limb1: 0xea86e4190741f5a1d63fe1a2,\n            limb2: 0x1631d1377040b84d,\n        },\n        r0a1: u288 {\n            limb0: 0xfc0579707daf96862bc47877,\n            limb1: 0xf0a566778792313273feb448,\n            limb2: 0x5e725ab3a8f04c2,\n        },\n        r1a0: u288 {\n            limb0: 0x746e1d6337bd29553a1a49d2,\n            limb1: 0xf5e43538015ea9d289aae3bd,\n            limb2: 0x2b858fe696979a0d,\n        },\n        r1a1: u288 {\n            limb0: 0x5d0468a94a03c5e8fb9b7442,\n            limb1: 0x4bcf854c79dfcd8f93f7b5a2,\n            limb2: 0x235b6ce0b723a15b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x47d3184d435caf4d8ac68218,\n            limb1: 0x5fbeeeccc4f0d2b4b35ff5c1,\n            limb2: 0xc44d4495a9252fb,\n        },\n        r0a1: u288 {\n            limb0: 0x1920a8fe49e6829c82f62ce8,\n            limb1: 0xacd523669ac89fffaaebdae1,\n            limb2: 0x235b4c0c2409068e,\n        },\n        r1a0: u288 {\n            limb0: 0x6126477661fb01a2eda1c7e6,\n            limb1: 0x393b5af3da3463a0c92ffad,\n            limb2: 0x302d5c3952fea360,\n        },\n        r1a1: u288 {\n            limb0: 0xca17079a6b293fc5c658989b,\n            limb1: 0xbb41d630afba0696af3a3407,\n            limb2: 0x1f7d9b481972987,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2226ca676134b1f3a0926460,\n            limb1: 0x826cd143e34fd3745d995e86,\n            limb2: 0x1d54d2aa3c5f7ac7,\n        },\n        r0a1: u288 {\n            limb0: 0x3515a092edde84420d650907,\n            limb1: 0xc0e550c22584c2319b0a82c,\n            limb2: 0x1dae1ecd1ca07560,\n        },\n        r1a0: u288 {\n            limb0: 0x7c23169a2d1ed918ab673e29,\n            limb1: 0x5484a8a7a79ea6c754af3cad,\n            limb2: 0x2545e6dc3f9ce4c9,\n        },\n        r1a1: u288 {\n            limb0: 0xd125d5ce04b20018ad6f85d9,\n            limb1: 0x1525475fb4f94e15acb82f7,\n            limb2: 0x1f82f7bdc16f6382,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x51de6ee8db519dfb0aa693eb,\n            limb1: 0x64c7ee0f928747a2f5f0f936,\n            limb2: 0x1202023a3955cdcc,\n        },\n        r0a1: u288 {\n            limb0: 0xb6ba4af6f923a0d846ce153c,\n            limb1: 0x60fe2184eafa93f4eb996772,\n            limb2: 0x16d57296a4ee3e6c,\n        },\n        r1a0: u288 {\n            limb0: 0xa60c48290b411ba3f980fe24,\n            limb1: 0xbe6ad7c874855edaa1b65a97,\n            limb2: 0x46ed521f5594ec,\n        },\n        r1a1: u288 {\n            limb0: 0x45849bc30c4d8430b3c651ff,\n            limb1: 0x2563e767d417bd382197c73,\n            limb2: 0x16709b70a1667419,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2bdced180a9910450908f1a6,\n            limb1: 0x1f4ef7e2d77e9764f537f621,\n            limb2: 0x209b61f43f3290b,\n        },\n        r0a1: u288 {\n            limb0: 0x3d1fab7bd5a20ee703a3a1ab,\n            limb1: 0x6dd08c68afb95f625c81c7df,\n            limb2: 0x2fceb99f81d59152,\n        },\n        r1a0: u288 {\n            limb0: 0x61998f00abc817c74677e69c,\n            limb1: 0xd15359c21be66df2e9f763a1,\n            limb2: 0x20acc9fcd918b204,\n        },\n        r1a1: u288 {\n            limb0: 0x58c54c374dc0b19648206559,\n            limb1: 0xaae9d1fa0b4859284de90438,\n            limb2: 0x18b9cb802e16400,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa8af1d6e69891fd6151f69e5,\n            limb1: 0xc9a0fc4d628c3a9cfb33e957,\n            limb2: 0xc205db4af1bd115,\n        },\n        r0a1: u288 {\n            limb0: 0xe04de2e204ed323699cbf1d0,\n            limb1: 0xcdad0d6d615cf2efe6486b8f,\n            limb2: 0x24feaffdc4c0f6fb,\n        },\n        r1a0: u288 {\n            limb0: 0x9a74590fcd5dd32ce4084080,\n            limb1: 0x26eaea5397bec2eddba3b007,\n            limb2: 0x2e171e90cd48c68b,\n        },\n        r1a1: u288 {\n            limb0: 0xcab514b4d0f8c4de087167f,\n            limb1: 0x4089650224f0df0b55cdbfa5,\n            limb2: 0x20e3e700df023af1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa952db0b09a1e0a8afa85959,\n            limb1: 0xd31513490bd63f93546b8b44,\n            limb2: 0x2b62974e51c3e808,\n        },\n        r0a1: u288 {\n            limb0: 0x3082616da438e53047cf7b15,\n            limb1: 0xad132a494322c88251aa940b,\n            limb2: 0x1638631f0b09eb79,\n        },\n        r1a0: u288 {\n            limb0: 0xe2e5db1f9e9b7d34a466ca2f,\n            limb1: 0x6edbd12f1ef34ed5334cdd54,\n            limb2: 0xc499b73f6f41690,\n        },\n        r1a1: u288 {\n            limb0: 0xaacf3111e2b20853c931d1c1,\n            limb1: 0xb35ae0c43b79be6e06117404,\n            limb2: 0x2a23dec3816a3c7d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb6ed55030e8729397efcc145,\n            limb1: 0xaa34addaea010361c02e0306,\n            limb2: 0x2742bd085dc8c143,\n        },\n        r0a1: u288 {\n            limb0: 0x898d7670f9872d2107b383bb,\n            limb1: 0xc214e84a71a23f180d9eb8d1,\n            limb2: 0x168f2063fe0912a9,\n        },\n        r1a0: u288 {\n            limb0: 0x578ba288320514edb50b6e8f,\n            limb1: 0x2d290fa04eb58f49066fbc74,\n            limb2: 0x2aa6192fd793ef3f,\n        },\n        r1a1: u288 {\n            limb0: 0xf67d935533f75f98ccf08227,\n            limb1: 0xeea0611976e71b0aeb4b1b6a,\n            limb2: 0xb73b7adb8c016af,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb3f4d09089d3ed8d435eb8c0,\n            limb1: 0x86f51f3c75097e64c5ab5f62,\n            limb2: 0x1c6317402ee2fe95,\n        },\n        r0a1: u288 {\n            limb0: 0xa00c59cd149cab75ac1e1263,\n            limb1: 0xdf8f325f8fd713ebe123f6e0,\n            limb2: 0x20135070c6c2f86b,\n        },\n        r1a0: u288 {\n            limb0: 0x692e693651922c9ed5b55f8b,\n            limb1: 0xdfe74e43af132550435a9d1e,\n            limb2: 0x2b72066a933709f1,\n        },\n        r1a1: u288 {\n            limb0: 0x5d49b84a4aa6058a6d6e703,\n            limb1: 0xb1f91b7ebceab14216152085,\n            limb2: 0x1967682ee3c18a7a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x33629d96c671a40a62c2da4,\n            limb1: 0xb414918620ae4edc267c0bc9,\n            limb2: 0x1d3961343ac4df2,\n        },\n        r0a1: u288 {\n            limb0: 0x254d73fe94cdde8ed9890b6b,\n            limb1: 0xb962da0dcb410c53789cc70e,\n            limb2: 0x16e205ec74090889,\n        },\n        r1a0: u288 {\n            limb0: 0x578ac38bd46442e3921b93f,\n            limb1: 0xca84b0403bce539c78c6e5c3,\n            limb2: 0x204ff9c462bb7f72,\n        },\n        r1a1: u288 {\n            limb0: 0x87c93d98fcfc7555f15f52ad,\n            limb1: 0xe3263a16c0c8a5a7efe968ff,\n            limb2: 0xf07070bfdb0f99c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x906d9cfd92ee9a42ed2259e4,\n            limb1: 0xfa9a8f287d966d31195be1aa,\n            limb2: 0x1d8e310fc8f947d8,\n        },\n        r0a1: u288 {\n            limb0: 0x56b93c74493683d4c708212,\n            limb1: 0xb1e5c2fd8c2141c61b48f7e,\n            limb2: 0x54d4690b93bed74,\n        },\n        r1a0: u288 {\n            limb0: 0xf44f49b074bdf24754dfad0d,\n            limb1: 0x67a90c021637ee954c2a379e,\n            limb2: 0x1b9888615ee2913e,\n        },\n        r1a1: u288 {\n            limb0: 0xaab23130c5df9453f58c1134,\n            limb1: 0x33731a3fa835e82c50ce2efd,\n            limb2: 0xe51950c67c429a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x278c9c013ae096a555b3ec0f,\n            limb1: 0x610d15043cff6872498a84b8,\n            limb2: 0x2be6b3691c3b1cdd,\n        },\n        r0a1: u288 {\n            limb0: 0xab1801f4fb51698ffcf4a785,\n            limb1: 0x2c5b0c65e18486f1db2e7b16,\n            limb2: 0xee1c0a5598d8ee5,\n        },\n        r1a0: u288 {\n            limb0: 0xdccb4b414e4b51403b40c360,\n            limb1: 0x950f6c1774b0a9274543e3f9,\n            limb2: 0x3035735696163c43,\n        },\n        r1a1: u288 {\n            limb0: 0xb13ffd0306de54e54da63f29,\n            limb1: 0xb0d7c02dd2152dfd24e837b8,\n            limb2: 0x61f242c5aef937a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbff090424ff64b168abd7ed8,\n            limb1: 0xfbf2b7ff152e680def29cf67,\n            limb2: 0x11631c347b8d5722,\n        },\n        r0a1: u288 {\n            limb0: 0xa4ffe19971619f52dec586fb,\n            limb1: 0xfadff2ba47b489d5054debee,\n            limb2: 0x21a126d22cb30a3c,\n        },\n        r1a0: u288 {\n            limb0: 0x75ac1ea03e30d1ee2a7ad65,\n            limb1: 0x37410414baa2eb7017bb5855,\n            limb2: 0x1a51ee35991003f5,\n        },\n        r1a1: u288 {\n            limb0: 0x455c7935775dc77497e7c89,\n            limb1: 0x2d6c275c5c4ba0a575a19c13,\n            limb2: 0xc0dd9d3ea7a9ade,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4af478bc839dde72d2e8cc92,\n            limb1: 0x39a0acadeb78af4fb5dbe383,\n            limb2: 0x1b446cbeaea59d46,\n        },\n        r0a1: u288 {\n            limb0: 0x48d371224068708ad6cfc116,\n            limb1: 0xeb6f5c875523671fe6bb1f80,\n            limb2: 0xdba3978f44c9853,\n        },\n        r1a0: u288 {\n            limb0: 0x4963a814014539613a3e815e,\n            limb1: 0x6245603c8b693d1c28c16e49,\n            limb2: 0xb2ea516ccda6f09,\n        },\n        r1a1: u288 {\n            limb0: 0xf5ed7ec964654532426b4888,\n            limb1: 0x1a7c82c2b8af5cecbcdca52d,\n            limb2: 0x27f711764b54cee8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc53cccfdb561e69a52782bb,\n            limb1: 0xeeec6da4d5ebc08df5815014,\n            limb2: 0x1d29e3cafeebc352,\n        },\n        r0a1: u288 {\n            limb0: 0xc6aa872125f3b220f96a9cd1,\n            limb1: 0xc0e77f6ac66bfd97664139e0,\n            limb2: 0x3741acbda901459,\n        },\n        r1a0: u288 {\n            limb0: 0x52f1a5f6845306c0defbedd9,\n            limb1: 0x80a6b1b02f80301d3a0dc080,\n            limb2: 0x181a86be5b8f64ec,\n        },\n        r1a1: u288 {\n            limb0: 0xa249185699b571387abcc094,\n            limb1: 0x1c4b4890cc3addd178e2de3d,\n            limb2: 0x27ac0852aee62087,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x35c2f42c8ac8c3e4454917fd,\n            limb1: 0x3bf48982e71153a198e54963,\n            limb2: 0x2a9f396d0d827ead,\n        },\n        r0a1: u288 {\n            limb0: 0xbea85053b686a4fb31267e68,\n            limb1: 0xbec1d438473d13cefa4b0bd9,\n            limb2: 0x25c2cbb7e7615d3a,\n        },\n        r1a0: u288 {\n            limb0: 0x4003c5a77762d598d26651ce,\n            limb1: 0x2efe1dd975f92a292079355d,\n            limb2: 0x17d7d17be5145528,\n        },\n        r1a1: u288 {\n            limb0: 0x7cfd8f75da47da500d6d8c7e,\n            limb1: 0xf63a158f1246fa8382aef748,\n            limb2: 0xce3a2406f7606cf,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x71c82502374ad055eee34a70,\n            limb1: 0xbf607dbe6e74c9f06bf0f2f2,\n            limb2: 0x17ad31e67a125bfa,\n        },\n        r0a1: u288 {\n            limb0: 0x75e0f096ad837bb65e18f5fe,\n            limb1: 0xf57acb24db4e597ad6dfd0c5,\n            limb2: 0x2baed364893718d3,\n        },\n        r1a0: u288 {\n            limb0: 0x650c59126052997ddebdbf06,\n            limb1: 0xe5694f3d235ba12f4e80e1da,\n            limb2: 0xc3d775c73973d78,\n        },\n        r1a1: u288 {\n            limb0: 0x86ecc04bb1dda6baba72f110,\n            limb1: 0x26a56fe363233bcba7a6bbc7,\n            limb2: 0xcccdf39db0efceb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd14af8581af5048d860b42d8,\n            limb1: 0x5983b9a1ab460420aac0e5fa,\n            limb2: 0x2cac8350464e5a46,\n        },\n        r0a1: u288 {\n            limb0: 0x9852dbbe33a5c81ef2ef28df,\n            limb1: 0xe27bbdc0499c71d8751fa8fd,\n            limb2: 0x2596598d10b8e209,\n        },\n        r1a0: u288 {\n            limb0: 0x5d640a56b866092cd2ddda67,\n            limb1: 0xbc7c9df1a76876f2af28a37d,\n            limb2: 0x198c4d4be5dfe657,\n        },\n        r1a1: u288 {\n            limb0: 0xf75e1f774ca4206fa9fcda52,\n            limb1: 0xc094c286837192006d77bf19,\n            limb2: 0xcf2a11e9eea72d4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3f7d6ff3e3048f3d3b217cb3,\n            limb1: 0x17d29aee9dc30e589c3409ce,\n            limb2: 0x13594ce650eafdb7,\n        },\n        r0a1: u288 {\n            limb0: 0x56007f7714afee54d813795e,\n            limb1: 0xfbeadbe9e4d223705b6f52b9,\n            limb2: 0x16c1493ccf93baf8,\n        },\n        r1a0: u288 {\n            limb0: 0xd61ca8fe2027f969c984a06c,\n            limb1: 0xfd681777ceaa7b105f32c686,\n            limb2: 0x89c32a2360185c2,\n        },\n        r1a1: u288 {\n            limb0: 0xc0be27a2efabaa040fc34bde,\n            limb1: 0x4025016352e1fb49753dc175,\n            limb2: 0xae0f4b4e22bbbdb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb714a66fd690196097466167,\n            limb1: 0x470b3ea1df7db4f80c0f7c28,\n            limb2: 0xa2b04b84a338d79,\n        },\n        r0a1: u288 {\n            limb0: 0x99e371187196a0e5e1cf157d,\n            limb1: 0x1c37ecc4a15489ba4d1779c,\n            limb2: 0x2241007f12297498,\n        },\n        r1a0: u288 {\n            limb0: 0xc2d4196793dc2c1a6195e84c,\n            limb1: 0x84aca2b3cc656ac3aaca479c,\n            limb2: 0x25be01f34c7b0108,\n        },\n        r1a1: u288 {\n            limb0: 0x6284320ce1e28774e12ac179,\n            limb1: 0xe63f8969b7d4831c0df44b75,\n            limb2: 0x11959f32e56582cd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x12b126126d6a51f864d86b21,\n            limb1: 0x1d0bdb4abac53547bcee2b4d,\n            limb2: 0x2947d69adc1260a9,\n        },\n        r0a1: u288 {\n            limb0: 0xe7865d832dc76c6f81e52540,\n            limb1: 0xa83bffdb570dac4070b74623,\n            limb2: 0x2f7f591b620ebbf0,\n        },\n        r1a0: u288 {\n            limb0: 0x8c19ba55fbe3b83ab9a52ce4,\n            limb1: 0xe422487d5d7a55084660e279,\n            limb2: 0x451963810a77462,\n        },\n        r1a1: u288 {\n            limb0: 0x238470f53902b433c24b5095,\n            limb1: 0x9f92f5a1a4c3dc5f5448ace1,\n            limb2: 0x25b02dd2b4f13ea8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf8c9c8cec6607f52c0c9a1b4,\n            limb1: 0xe4bf0bcc8b18ef930b8f8498,\n            limb2: 0x2afb9cf3aeeb2bbf,\n        },\n        r0a1: u288 {\n            limb0: 0x2005f7afc42e1e0c95cb60d1,\n            limb1: 0xc5767bdb11d976e34bda43e2,\n            limb2: 0x29602013060d4ff4,\n        },\n        r1a0: u288 {\n            limb0: 0x11570e8a2564f4049b9db0ec,\n            limb1: 0x49eb826e6b83eff0404680d5,\n            limb2: 0xcecd3d8af842dcc,\n        },\n        r1a1: u288 {\n            limb0: 0x4b7116478737ccae251f21d0,\n            limb1: 0x801cc3a4c2973adba6e4ddad,\n            limb2: 0x2b2f6090ab698026,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x884df7b9c6266e14cc00d544,\n            limb1: 0xb39ddb5ff70292b139767896,\n            limb2: 0x2dec0cf17a7a9728,\n        },\n        r0a1: u288 {\n            limb0: 0xbf786f4a5a217fd2fb81a73b,\n            limb1: 0xcfb52addb110bfc90b6aa315,\n            limb2: 0x20acfe4cf1ffb3f4,\n        },\n        r1a0: u288 {\n            limb0: 0x58fdca71f63cd7f2da6998b9,\n            limb1: 0x979bbe60391be8c8c020eb17,\n            limb2: 0x1d271bcc5d463d8b,\n        },\n        r1a1: u288 {\n            limb0: 0xb4604fea4e6d2fa87b6546ca,\n            limb1: 0x14ec3cc166da4fa93e7855e,\n            limb2: 0x19eff643e695961,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe3fff14dc344f49a147400af,\n            limb1: 0x552fa30aaf36a28b944068dd,\n            limb2: 0x22f12a7ad2b957a7,\n        },\n        r0a1: u288 {\n            limb0: 0xff8236c0d8500425ffffe979,\n            limb1: 0xd995e8b2955425eef9effefa,\n            limb2: 0x1008627aeb38039f,\n        },\n        r1a0: u288 {\n            limb0: 0x761abe6a1a610e88ddb82821,\n            limb1: 0x7f484e89e288b114a86e3104,\n            limb2: 0x571350412cfb043,\n        },\n        r1a1: u288 {\n            limb0: 0xdbe60b9ed4870dafe4f6b562,\n            limb1: 0xe27c012c5483844720417b27,\n            limb2: 0x287fcf364036279d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1edeb9e08e49a4cc6d595a6a,\n            limb1: 0x4d749f26fcf5c2d70c0a0826,\n            limb2: 0x537349d42ceec1f,\n        },\n        r0a1: u288 {\n            limb0: 0x71e75fa5345f7af0598be8fb,\n            limb1: 0x94e35008e8882d98556d4f9,\n            limb2: 0x1e5f86ec7f29e8c0,\n        },\n        r1a0: u288 {\n            limb0: 0xa59a00e6ef1857c7f37bba17,\n            limb1: 0xaa80466f9ff308394641d17a,\n            limb2: 0x22e8b793fed10566,\n        },\n        r1a1: u288 {\n            limb0: 0x85cc25707c980abee1603524,\n            limb1: 0xf0a1429f6a9ce800109dd3c6,\n            limb2: 0x439246edfedc6a0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc3464ca03c070344bc851998,\n            limb1: 0x628900ddf59e8fcab9e544cb,\n            limb2: 0xc46d4de05410eea,\n        },\n        r0a1: u288 {\n            limb0: 0xc3fcebdd079623bfdfe5b76,\n            limb1: 0x7293b945aea37cb296e5fe79,\n            limb2: 0x1dfc0017bebb3827,\n        },\n        r1a0: u288 {\n            limb0: 0x8330726aebe0e9005929fbf2,\n            limb1: 0x4aaecb83bd354c28abc709fe,\n            limb2: 0x1db100a3ae9d2796,\n        },\n        r1a1: u288 {\n            limb0: 0xb769d01c317efe1645b5977,\n            limb1: 0xc531f97ebdd47779587f7f3d,\n            limb2: 0xa69ded3c01e9477,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x58d096250a5f996582135298,\n            limb1: 0x8b3a621d056b54ccbe85d4a4,\n            limb2: 0x26de0b6ea20b2417,\n        },\n        r0a1: u288 {\n            limb0: 0xc0991b57a9e1506cab1180d6,\n            limb1: 0xb77b1f14ad48be33a9a3d3ea,\n            limb2: 0xddedb919473952,\n        },\n        r1a0: u288 {\n            limb0: 0x50b24127a621793d80986ea8,\n            limb1: 0xd87c2df07cddcdb160e65f00,\n            limb2: 0x1a376e99bcc12456,\n        },\n        r1a1: u288 {\n            limb0: 0x94e5f9f1ffeb27d8ced55bc4,\n            limb1: 0xe0c8f2e76317d89edbac2b16,\n            limb2: 0xd5c6a5a81f58007,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd9e189bd465323e7ccc5c8d8,\n            limb1: 0xf3854408ae8833a96c0a44a5,\n            limb2: 0x2aa4976b776fe008,\n        },\n        r0a1: u288 {\n            limb0: 0x6e0592dc622bfba3f3604600,\n            limb1: 0xfaf5659c5bbbef47b9ac96b3,\n            limb2: 0x1f0dc42f72ebc953,\n        },\n        r1a0: u288 {\n            limb0: 0xbeed1c4160d214aab80de397,\n            limb1: 0xc2db7a1fd04bf557fe496c1a,\n            limb2: 0x2d95453d59d9f447,\n        },\n        r1a1: u288 {\n            limb0: 0x8034644d710c6dbba13e467b,\n            limb1: 0xf87cf4201f6abf6533e972e,\n            limb2: 0x2e24defab8e33de8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1694446b59660ec1fed6fb9d,\n            limb1: 0xc0a4cbb8310e198ce8d997e,\n            limb2: 0x2da8657ea7730f4,\n        },\n        r0a1: u288 {\n            limb0: 0xdd70e38f79be7c342e31044d,\n            limb1: 0x5a8d74ec827b1414b7387287,\n            limb2: 0x61248d0ea9090d5,\n        },\n        r1a0: u288 {\n            limb0: 0x725a8201bde6223b676c1523,\n            limb1: 0x645238ecfc00a99aeeb4eeb8,\n            limb2: 0x1d1fddea44ab94d0,\n        },\n        r1a1: u288 {\n            limb0: 0x83839eafce9360837b497639,\n            limb1: 0xcbec9216940c09f042d3153c,\n            limb2: 0x2180c12b34129e84,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5bac5422643e869c95e8758,\n            limb1: 0x75a87d464e85d848733732c6,\n            limb2: 0x17dd4782ba72be36,\n        },\n        r0a1: u288 {\n            limb0: 0xaee3bfbad5100e0a925100a9,\n            limb1: 0x71d534c3c0a75b458dfcffeb,\n            limb2: 0x6ce2915078a5228,\n        },\n        r1a0: u288 {\n            limb0: 0x551047c5156391326b3100c8,\n            limb1: 0x6342cb22397195c24b239d2b,\n            limb2: 0x21c7584f2234b2f4,\n        },\n        r1a1: u288 {\n            limb0: 0xddf561e69f4a85c68a1fbb5f,\n            limb1: 0xe60381a1141b501717848e3c,\n            limb2: 0x18963467c96efe0e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x43c0e893813e89326e6d7292,\n            limb1: 0xa039460fc1ffe8b46a153b1,\n            limb2: 0x27d053716ecb9cd9,\n        },\n        r0a1: u288 {\n            limb0: 0xf50b97a916e074212516e5b6,\n            limb1: 0xd022b79f1419b1f40ecdf478,\n            limb2: 0x1d1206da817808b7,\n        },\n        r1a0: u288 {\n            limb0: 0x25a6cedcf5d6ddb32b966856,\n            limb1: 0x2a4e55aedf867fa395c11b66,\n            limb2: 0x185e2c0ebb4ad386,\n        },\n        r1a1: u288 {\n            limb0: 0x19a943e29773716d15946034,\n            limb1: 0xba20fb1af88682e70de60783,\n            limb2: 0x17d681927b62d229,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf7fa1e079660015140590591,\n            limb1: 0xc30ed30ec9915ab4fc15f7ff,\n            limb2: 0x243a6006b965f61a,\n        },\n        r0a1: u288 {\n            limb0: 0xf8da46207ede41bd56e50a43,\n            limb1: 0xe04b09702796cd90c2425928,\n            limb2: 0x2e7ae22af53376f2,\n        },\n        r1a0: u288 {\n            limb0: 0x5af2801c7d933321f9435b9b,\n            limb1: 0xd2318d1258ba0c6c1daee6d2,\n            limb2: 0x23afd2f1a99800e4,\n        },\n        r1a1: u288 {\n            limb0: 0xe39965536174be4d41378ab2,\n            limb1: 0x86d346ec3ef6a2dfb8319fce,\n            limb2: 0x1da387ce6ce0d298,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe44b9574eb888dee9f4e20dc,\n            limb1: 0xf31eb1efa49ca68cc34081f,\n            limb2: 0xfad1981220113be,\n        },\n        r0a1: u288 {\n            limb0: 0x9ab7843efd617ddf119164fe,\n            limb1: 0x76cafdac5a293b073ed57ad,\n            limb2: 0xd0e754b42bb068a,\n        },\n        r1a0: u288 {\n            limb0: 0xe334e2852f757ecc004f2f1e,\n            limb1: 0x402aa243f80d326c17d11b15,\n            limb2: 0x1f6c545d5d39392c,\n        },\n        r1a1: u288 {\n            limb0: 0x5749b413972936886b183b9f,\n            limb1: 0x7d2a1beec672867c931a8293,\n            limb2: 0x1ccda8ec93a0273b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9f47ddea4c0b8b40dc986ddc,\n            limb1: 0xa0be8511b87227fadcd76ee8,\n            limb2: 0xfcdf0494a2bc732,\n        },\n        r0a1: u288 {\n            limb0: 0xdc00663637fde6d5b906e716,\n            limb1: 0x9b2a202f83175ae5c305a611,\n            limb2: 0x5d06f2336099060,\n        },\n        r1a0: u288 {\n            limb0: 0x1a585c16370b2e72ce762004,\n            limb1: 0x456d73db558a873ad7cff6b2,\n            limb2: 0x1fa965f8f98ca6f5,\n        },\n        r1a1: u288 {\n            limb0: 0x2d2a8f6911befce21db0812b,\n            limb1: 0x8c0ea802fda5c7080ea50395,\n            limb2: 0x7c5df2dee8313c3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x982a9081f5f8fd9414004f29,\n            limb1: 0x48745d3195d133f3f7eb9cf8,\n            limb2: 0x23d50a6b096134a0,\n        },\n        r0a1: u288 {\n            limb0: 0x8dd690a16a679f3d3e41fcb1,\n            limb1: 0x2bf5c469d6877f908feb3a87,\n            limb2: 0x2e773e73fb695075,\n        },\n        r1a0: u288 {\n            limb0: 0xf2ed81b71eeab0cdfc710ae9,\n            limb1: 0x57db9a4270f81dc9bfb64860,\n            limb2: 0x334d7b08732b83e,\n        },\n        r1a1: u288 {\n            limb0: 0xa8882ec080970eca432a600b,\n            limb1: 0x8d6928f84217558b4b8126f9,\n            limb2: 0x1b67ba76495fa971,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1c3dd7d156d67be9f4aeaa8,\n            limb1: 0xbd90237976f8394378306671,\n            limb2: 0x1d08036915e0dd71,\n        },\n        r0a1: u288 {\n            limb0: 0x231d2b731b96c51d226edaba,\n            limb1: 0x54f6870a63eb1f65452f2dff,\n            limb2: 0x19a442e5ccf62230,\n        },\n        r1a0: u288 {\n            limb0: 0x86b0048f2b838a694846ddf2,\n            limb1: 0x8ebdbd6a17deeef0a9e89793,\n            limb2: 0x2c3fd637cc908694,\n        },\n        r1a1: u288 {\n            limb0: 0x544fe7404b052b92ddd8749f,\n            limb1: 0x856ebabdfc6c86b29d302e7e,\n            limb2: 0x1451419a1600dfa3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2fe1ebd1e53ec5b0f4268e1f,\n            limb1: 0xa1cc2188de0d3fc7fb34bf66,\n            limb2: 0x182fc2a35b3ef175,\n        },\n        r0a1: u288 {\n            limb0: 0xfe3f3818077e92dcdf902b05,\n            limb1: 0xa93c77db9fdbd5a79d361028,\n            limb2: 0x26d3c6d6d5a4c130,\n        },\n        r1a0: u288 {\n            limb0: 0xabef3803fdcbd839e246be11,\n            limb1: 0x72f95ceda7e53263113f8da9,\n            limb2: 0x139aec1203d92ce8,\n        },\n        r1a1: u288 {\n            limb0: 0x807eb60ed447012f9ad15b4c,\n            limb1: 0x3bd36cefe2ac948e16e9c0a8,\n            limb2: 0x6bee881437b0e5a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x56bcaed9684632a2bfce5bb4,\n            limb1: 0x9e429f5aea1a66eeecfa2a38,\n            limb2: 0x3d76a3ac3d4651e,\n        },\n        r0a1: u288 {\n            limb0: 0xf318a717ace4c189f90f3f81,\n            limb1: 0xcb324779d5090afc09982055,\n            limb2: 0x305aeff1c47da1d2,\n        },\n        r1a0: u288 {\n            limb0: 0xe74153062b51dea4abbaa7c2,\n            limb1: 0xb0af9f816b16aa186af3e5df,\n            limb2: 0x159bf9ee77d1b9e2,\n        },\n        r1a1: u288 {\n            limb0: 0x3e70ac7ef6cf83592cd954eb,\n            limb1: 0xb0a5fbb32a160b0cee7f9034,\n            limb2: 0x2c6199de44cc1f4c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf158629d155bd7e202c572ee,\n            limb1: 0x6db77b2b4493bcb7586d1246,\n            limb2: 0x2367d2c9cfaed9d3,\n        },\n        r0a1: u288 {\n            limb0: 0xea4f9b43d0967753e57cdbe0,\n            limb1: 0xc3eacf790d335214d6223e55,\n            limb2: 0x19dad509ae22484c,\n        },\n        r1a0: u288 {\n            limb0: 0xda40ef1b79f182c340cea093,\n            limb1: 0x2763ae12c9f0cf8668079884,\n            limb2: 0x2bb5813ff3e9ca2d,\n        },\n        r1a1: u288 {\n            limb0: 0x510f871618c4726ed002cd0e,\n            limb1: 0xf17db1c8beafafa17311becb,\n            limb2: 0x26885d10b141626f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbdca04cc049ead113f92fdf0,\n            limb1: 0x34a187101f66d212fd60eeb6,\n            limb2: 0x2b1014e453475cff,\n        },\n        r0a1: u288 {\n            limb0: 0xe444f3c70fad06b4b6fc0bb6,\n            limb1: 0x9f1c3c9ebcbbea9fbb631c54,\n            limb2: 0xb918e8ffbfe8a02,\n        },\n        r1a0: u288 {\n            limb0: 0x606807fa707dacb60e4f7b53,\n            limb1: 0x4ef1a20b0bc39ff0b4e48514,\n            limb2: 0xf218649f2e73b3c,\n        },\n        r1a1: u288 {\n            limb0: 0x81fa6d620e45c23cbbf1f622,\n            limb1: 0x38da47f11b383ba1461436a3,\n            limb2: 0x837612c329d697a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfbeac24075d6f0bd847f505f,\n            limb1: 0x11f0f12ccc004707ce2fcec3,\n            limb2: 0xc310bf45f22489b,\n        },\n        r0a1: u288 {\n            limb0: 0x184769ff32effb0080bd9282,\n            limb1: 0x94861b6747fc96bbd348eeb5,\n            limb2: 0x1c4daba8fedab142,\n        },\n        r1a0: u288 {\n            limb0: 0x83488ba56a75bac2444eb9bc,\n            limb1: 0x8b62ed857cf1300abd22eb9c,\n            limb2: 0x135d64f62ca31e90,\n        },\n        r1a1: u288 {\n            limb0: 0x54eb4787f8e28813b82ec15a,\n            limb1: 0xd07f5859c765fdaabf1f0f80,\n            limb2: 0x2aeeddeb65ef03ad,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xab04c28363de86ea6f72de4,\n            limb1: 0x30b8ed32ef343187e688d103,\n            limb2: 0x168605f7c0b37cb5,\n        },\n        r0a1: u288 {\n            limb0: 0xf62ab1cd395ae609d2f685ed,\n            limb1: 0xada87a28a9d619b144c0b35f,\n            limb2: 0x2eff0a0507e5218d,\n        },\n        r1a0: u288 {\n            limb0: 0x4ff357d0c6ebed186e1f9c40,\n            limb1: 0x20dd88d263bc52219e2f859c,\n            limb2: 0x24d6d1a731984ce8,\n        },\n        r1a1: u288 {\n            limb0: 0x1d5151d06ca52aece509cbb3,\n            limb1: 0x46548add3b8e3d3faacd05b1,\n            limb2: 0x199d296e93cf8cbd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8a033bf6880534fac8cfb54c,\n            limb1: 0x13f208e848910d7bde1192ba,\n            limb2: 0x1423c34f98fdcef6,\n        },\n        r0a1: u288 {\n            limb0: 0x598d27c08012f40c3d3e9e75,\n            limb1: 0xdc4107a10a7d803199d93086,\n            limb2: 0xc5257edbf918701,\n        },\n        r1a0: u288 {\n            limb0: 0x4a3400be453d6b3c34e1fb44,\n            limb1: 0xf91d5ac5ae679c33fff36409,\n            limb2: 0x1be98b7749edf072,\n        },\n        r1a1: u288 {\n            limb0: 0x6680d0e3d2b864d119b827ca,\n            limb1: 0x5aac4bc1b57a2e22ccf58cee,\n            limb2: 0x23b7fc2f9a6ae22f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf0775979754e902669f0e444,\n            limb1: 0x2e61682c7e17b57130ccbfe0,\n            limb2: 0xf21378dff131bc3,\n        },\n        r0a1: u288 {\n            limb0: 0x621b48168acdc19dc97ebbf0,\n            limb1: 0x9909fd8847205eb91ae80e2b,\n            limb2: 0x15534e1988bea372,\n        },\n        r1a0: u288 {\n            limb0: 0x836091f715c8ad2669df0e75,\n            limb1: 0x5b706e57f70b2b69b33c9cdc,\n            limb2: 0x12f7d428e0c8ff0d,\n        },\n        r1a1: u288 {\n            limb0: 0x306d15fba474fc201a777221,\n            limb1: 0x55cafa050b672c2507126a6b,\n            limb2: 0x1c150bb26372eb1d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa188e933ee7410d97afdb93c,\n            limb1: 0xd390d4faa3f1ca403fc39b77,\n            limb2: 0x22ba33b8d7641e95,\n        },\n        r0a1: u288 {\n            limb0: 0x95c3812c2afb2bd2e4b35d5f,\n            limb1: 0x61243c01b924123431702193,\n            limb2: 0x7afc7339fcd4ad3,\n        },\n        r1a0: u288 {\n            limb0: 0x5234604f03b5a78036f17dec,\n            limb1: 0x3e865fa0fddae6157c361e83,\n            limb2: 0x62802572defde82,\n        },\n        r1a1: u288 {\n            limb0: 0xb0715990fb0e9c5e3a72b720,\n            limb1: 0xc499138bc22f7a1afee6dc88,\n            limb2: 0x2ce146b6cbc671d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa51df13c764911013f1d01e4,\n            limb1: 0x452c277faac5af624ed11334,\n            limb2: 0x2f5f956a9879906f,\n        },\n        r0a1: u288 {\n            limb0: 0x37cd61b56ba0cc6cd3d394e2,\n            limb1: 0xffa51ac2bdd7d1ef07a66bf9,\n            limb2: 0x1778ef73778c3338,\n        },\n        r1a0: u288 {\n            limb0: 0x958d7ab0ef0acf4b8c860666,\n            limb1: 0xe95e65d08595b6669b49d367,\n            limb2: 0xdd821fce8671817,\n        },\n        r1a1: u288 {\n            limb0: 0x82613df8271eef94f8216685,\n            limb1: 0xce4517a26e9d1ff8435f6bd3,\n            limb2: 0x2d74a37dda03ec82,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4705fc6add33f6134dda85e8,\n            limb1: 0x87fc37a77f2400df656f807f,\n            limb2: 0x1c160e5ff98f44d9,\n        },\n        r0a1: u288 {\n            limb0: 0x6a0e358cc09cd9f66a6e2657,\n            limb1: 0xb1a9b2fea93601140e30d66c,\n            limb2: 0x9b506be37020061,\n        },\n        r1a0: u288 {\n            limb0: 0xb8c0a424d99a217f15aa5ad1,\n            limb1: 0x3ce08d5d3a9f26850abc92bb,\n            limb2: 0xc584793703cab09,\n        },\n        r1a1: u288 {\n            limb0: 0x7476f45ea5fb77da8b829946,\n            limb1: 0xf7626f5dd86a7edf8028f911,\n            limb2: 0x29f8098dfca1aaac,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xaba2d53cda8e2d6c31f500ac,\n            limb1: 0xfdbf88c50f2583b7c516266a,\n            limb2: 0x15dc535aaf20cbdb,\n        },\n        r0a1: u288 {\n            limb0: 0x66a36c60ce96cd547c9a1755,\n            limb1: 0xcde33ff5707f6c8f3cde3a7e,\n            limb2: 0x73c9a84ae062b7c,\n        },\n        r1a0: u288 {\n            limb0: 0x4a0c8580eff1de7233d32d9e,\n            limb1: 0xadc83a0d5f1ae9af1ec5e504,\n            limb2: 0x12b12bc2dc726d83,\n        },\n        r1a1: u288 {\n            limb0: 0xc03b004c2c1449fdf5ec2afd,\n            limb1: 0xa96a5efd4ba92c0a09c6da03,\n            limb2: 0x4ac73284c6f6c78,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x988db951df07bcf5167c0d2d,\n            limb1: 0x37634b3bea2719769b35a4b9,\n            limb2: 0x97470cf572bf0e7,\n        },\n        r0a1: u288 {\n            limb0: 0x93b3a64dfc09d5e6ee158302,\n            limb1: 0x1c6a423bc1919a943f2ba043,\n            limb2: 0x74fa5fb7cb911aa,\n        },\n        r1a0: u288 {\n            limb0: 0x6e1487ba7aa03f2fb0629047,\n            limb1: 0x776bb4f378ed97e42522c9fb,\n            limb2: 0x2f20cc4b753304cc,\n        },\n        r1a1: u288 {\n            limb0: 0xf1179e510531e72e2b490f84,\n            limb1: 0xbd187facc02ec1a4ae712e67,\n            limb2: 0x16f789e4d2a597b7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x25e1b3add74afea5c1f33129,\n            limb1: 0x52d850b9b1acf448a43d9a84,\n            limb2: 0x304d693be1b65945,\n        },\n        r0a1: u288 {\n            limb0: 0xf9c0ebd67e6130dbb8406900,\n            limb1: 0xb385c49a9bd04738cd7b5428,\n            limb2: 0x19a06db1f620a406,\n        },\n        r1a0: u288 {\n            limb0: 0x907c280d56948af74c060346,\n            limb1: 0xabd4c238326dd19ca7c6381e,\n            limb2: 0x2bdbb1d399cfd3c0,\n        },\n        r1a1: u288 {\n            limb0: 0x3d4dd4dad15e77d462c7e918,\n            limb1: 0xadf6a96e3863a052cc62a68,\n            limb2: 0x5ff2446f7007039,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x138f586293881dd14bc6da3d,\n            limb1: 0xd10a6cfa388f041b092fe446,\n            limb2: 0x134fd296006efe38,\n        },\n        r0a1: u288 {\n            limb0: 0x7682e421ab596e09d97acaf5,\n            limb1: 0x7bc08e33a9dc88d69a473ccb,\n            limb2: 0x13ebd6e59ab524c4,\n        },\n        r1a0: u288 {\n            limb0: 0x9a3ab0aeddaf0f216d6f844a,\n            limb1: 0x3126cf30520d8c7ad478476,\n            limb2: 0x2c02338e19519b2d,\n        },\n        r1a1: u288 {\n            limb0: 0xdabfe2d07ee261d2be63e689,\n            limb1: 0x70a90bbdc35afe2b5f7617c6,\n            limb2: 0x2cf6596b31d7022,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1e7594119e66c328e7e8e2c9,\n            limb1: 0xe9b1488f9e23ba1f0189f9f,\n            limb2: 0x21c596062c16c15d,\n        },\n        r0a1: u288 {\n            limb0: 0xaa47ae6cab625b71d12923e8,\n            limb1: 0xd5e69f6be21dc70822108b83,\n            limb2: 0x1b50a92feea5d1ed,\n        },\n        r1a0: u288 {\n            limb0: 0x346c220acdcc3bb153de8aad,\n            limb1: 0x824f54d0187e5b1357938cf8,\n            limb2: 0x26b3a595f145b278,\n        },\n        r1a1: u288 {\n            limb0: 0x90422ba2c5b5cb7682f9f9a0,\n            limb1: 0xda3b07105624448ee6af699e,\n            limb2: 0x855f3de8d27553,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe734bd8469bb0d6be46b8261,\n            limb1: 0x2b29d6d008357ba8e7a5e184,\n            limb2: 0x1d1346c1f446537b,\n        },\n        r0a1: u288 {\n            limb0: 0xf8e1d78062ef5b92faf4cddd,\n            limb1: 0xbaf1ca7bacabd5adfc1286a3,\n            limb2: 0x666ba02d5f144fa,\n        },\n        r1a0: u288 {\n            limb0: 0x46627a668572ccfe69168290,\n            limb1: 0x4191d2df34900702c6390bb9,\n            limb2: 0x14aa1db861175db0,\n        },\n        r1a1: u288 {\n            limb0: 0xe127a538a4915164644a7383,\n            limb1: 0xa1744671ffcd00e1c4ae838c,\n            limb2: 0x2ff36f7e93de5d6c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf372aa2d5b25f06383d49055,\n            limb1: 0x9242b717f74d67f9a6407380,\n            limb2: 0x2c8353bdcd31932e,\n        },\n        r0a1: u288 {\n            limb0: 0x48cee3064e31b233c1ec6bc1,\n            limb1: 0xf2be923df0d2346b067b30e4,\n            limb2: 0x3a8dc9fd9da0f60,\n        },\n        r1a0: u288 {\n            limb0: 0x8f89065450790649fddc1b3e,\n            limb1: 0xbe5c8a4272361a7828e893ba,\n            limb2: 0x16675f3e6029e5aa,\n        },\n        r1a1: u288 {\n            limb0: 0x5c9d27ca383d4ca0c63de6a7,\n            limb1: 0xcda897ae6f5e2854dcf2f3d5,\n            limb2: 0x290743df058f8305,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf1f3ab4a71bf063c478bc71,\n            limb1: 0xcfe10cafaa4f16d30470ff11,\n            limb2: 0x2a859743d831d561,\n        },\n        r0a1: u288 {\n            limb0: 0xda9e879d4da405e3745be46c,\n            limb1: 0x6539bb41fc461e404d661818,\n            limb2: 0x2109fa558b0a8210,\n        },\n        r1a0: u288 {\n            limb0: 0xe2fab01e8d7359c9120b3d72,\n            limb1: 0x6d799a8db1bf63c665c6c68,\n            limb2: 0x1bedbf111989dd04,\n        },\n        r1a1: u288 {\n            limb0: 0x6374e057728683e95ef4bded,\n            limb1: 0x592dc554ee2ceccd54e9cbb5,\n            limb2: 0x277996866989d1a8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2a6a35d687fd3ab5ed444d70,\n            limb1: 0xf30c2c150150716b84c25d9d,\n            limb2: 0x2355381b4775f979,\n        },\n        r0a1: u288 {\n            limb0: 0xf31d6705cd3f9a1e729f7be8,\n            limb1: 0xcd6d818c3ea8a55fe1601bc6,\n            limb2: 0x2cc715925e8582fb,\n        },\n        r1a0: u288 {\n            limb0: 0xc34b5e6487ae899450b53ac0,\n            limb1: 0x65a86cf5053c7421f70ec00c,\n            limb2: 0x1c705fa60b0b6e46,\n        },\n        r1a1: u288 {\n            limb0: 0x1189127468bbdb55f404b7e8,\n            limb1: 0xe0b50dc5855da0d20288ef4c,\n            limb2: 0x2db9ba609c2b1f8b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x58deb5a39dddab04b4bfbe6f,\n            limb1: 0x3d80edfce9162e06afd3fae2,\n            limb2: 0x229b5dd9a090a07d,\n        },\n        r0a1: u288 {\n            limb0: 0xa2884f95690b37cb555319e8,\n            limb1: 0x431b3224e78b46a35dd8e27b,\n            limb2: 0xd1c9d6a556eff33,\n        },\n        r1a0: u288 {\n            limb0: 0x7d6f5780f353f4275084bd87,\n            limb1: 0xeff8b298c309ae39ecc99974,\n            limb2: 0x15dabb9a3840c586,\n        },\n        r1a1: u288 {\n            limb0: 0x6e408f5c601b2c2a42fcd6b4,\n            limb1: 0x5b9c6ffa0ea6344c8f4fa422,\n            limb2: 0x112a7281cd34d37f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x324406d06aab0393e4870b30,\n            limb1: 0x6afe0b4af47ec81111094ea8,\n            limb2: 0x6756b9414a8dba8,\n        },\n        r0a1: u288 {\n            limb0: 0xae5ba8ea8c9de615c7d2dee9,\n            limb1: 0x335fdd8ee1dad4f3909a727a,\n            limb2: 0x395b21d2c56fe25,\n        },\n        r1a0: u288 {\n            limb0: 0xe4ad199092e1e151932e0e15,\n            limb1: 0xcc02c6c3d32e2e68c4309ff3,\n            limb2: 0x10245964597e950c,\n        },\n        r1a1: u288 {\n            limb0: 0xa38e08616b574d86acc3f2bd,\n            limb1: 0x57ca39109d9cca8fa3211d2,\n            limb2: 0xf0f2642a34368c2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x950136cad4283c32b1e14070,\n            limb1: 0x18a70087736a4085ea0d3aef,\n            limb2: 0x161a9e5cef7ee79d,\n        },\n        r0a1: u288 {\n            limb0: 0xcf31e31a5ab2cf3d7f1287ec,\n            limb1: 0xf07cce8ec28112beeeecf88,\n            limb2: 0x25caba0bbe758c3b,\n        },\n        r1a0: u288 {\n            limb0: 0x4559351da5cc2c55015769fc,\n            limb1: 0xe80942e51f4b6081a5181e20,\n            limb2: 0x10bb0a027ef12705,\n        },\n        r1a1: u288 {\n            limb0: 0x6efbe1f1879cdf50c8cc3e50,\n            limb1: 0x405b959e77d96ec753670ba8,\n            limb2: 0x256172f694a90b43,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7a655a088b9e434d956d29b3,\n            limb1: 0xd8968757953325c9fc2bf54b,\n            limb2: 0x248c77d9b9eac25f,\n        },\n        r0a1: u288 {\n            limb0: 0x520b04dc8045a2e028bec72e,\n            limb1: 0x332013f75629ccab3d881ee,\n            limb2: 0x2d8653581e83e63d,\n        },\n        r1a0: u288 {\n            limb0: 0x4ba0c6f6e54c61c7f2abfd1f,\n            limb1: 0x641f0ee83c94e5f43cb543e0,\n            limb2: 0x110f1ea1977c63ed,\n        },\n        r1a1: u288 {\n            limb0: 0xe0689a4e4544b6405bfec89c,\n            limb1: 0x42b073192ea62e7a3d456594,\n            limb2: 0x2b5defab459aa7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf33925f9b68c26fcdc41ebb5,\n            limb1: 0x2b4e46523eacb7d3d7679ded,\n            limb2: 0xae9b529afa96647,\n        },\n        r0a1: u288 {\n            limb0: 0xbbf762afa9b7ec494e9919cc,\n            limb1: 0xde01f8208e22254629805591,\n            limb2: 0x2908b2c6aa755795,\n        },\n        r1a0: u288 {\n            limb0: 0xe719a960b123c63298d4580b,\n            limb1: 0x70fdc5502d31860bf5e24d91,\n            limb2: 0xad07726f92325dd,\n        },\n        r1a1: u288 {\n            limb0: 0xd501a4cccd1b92251e18acb8,\n            limb1: 0x48d6dbb94067b970de5e8d62,\n            limb2: 0x6582f750a7528e2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x76adc23ad83e917055379e01,\n            limb1: 0xa37a413680cab603c29ef480,\n            limb2: 0x102d265010dc02a8,\n        },\n        r0a1: u288 {\n            limb0: 0x11ff7fd9aa3b06ea2fb2a3da,\n            limb1: 0x8b4db920b544d2ec8815b4d4,\n            limb2: 0xe3a1eceb3c4e1dd,\n        },\n        r1a0: u288 {\n            limb0: 0x2975d22f8ff1d893ba17eec5,\n            limb1: 0xc41fa6d39e1bd0088b641e5b,\n            limb2: 0x120c565ce46e6eab,\n        },\n        r1a1: u288 {\n            limb0: 0xbda9ce34164be7cbcbe4052a,\n            limb1: 0x57c6bbfdcf08664b2014b07b,\n            limb2: 0x2cd9fb3fcb9933d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf56e86d1ca0cd0542cbc4674,\n            limb1: 0x11018bbc0dc8cd4b8b7ae4f,\n            limb2: 0x22c3cd45600ce3ab,\n        },\n        r0a1: u288 {\n            limb0: 0x33a111bcf69011ed5dfea95b,\n            limb1: 0x2418d7b1ee6d6f32713cfe7e,\n            limb2: 0xd5b5c6d8c1519ed,\n        },\n        r1a0: u288 {\n            limb0: 0x2382a6bc543a7027de67c43f,\n            limb1: 0xa38eaf7d59bda8fb4cb3393c,\n            limb2: 0x1a9625a471ac3f3d,\n        },\n        r1a1: u288 {\n            limb0: 0x31460658c417f30241adaa81,\n            limb1: 0x2d7fbd15ffc0f167b09fb12,\n            limb2: 0x58d2b9e0bd06b5b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x82bfa35b631169ad2f83361f,\n            limb1: 0x99f56b3227f7e254defe5,\n            limb2: 0x1950c5a24028a2aa,\n        },\n        r0a1: u288 {\n            limb0: 0x1337a344b6ac1fa757c934a4,\n            limb1: 0xe33df35dfde3e6063ab1eb7,\n            limb2: 0x2a3cc47f276a0212,\n        },\n        r1a0: u288 {\n            limb0: 0x1245820f20882f9139470e7b,\n            limb1: 0x7a1c9e876bf26adb41c64027,\n            limb2: 0xd422a9827cbf457,\n        },\n        r1a1: u288 {\n            limb0: 0x5f59c344aabe02ee306a7a07,\n            limb1: 0x6ababab105f405239586317d,\n            limb2: 0x1fc81898cef32a96,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x437d9858e6b05bca1aa1347d,\n            limb1: 0xf012e5839e7f52c7d1aa4f71,\n            limb2: 0x74167847908a227,\n        },\n        r0a1: u288 {\n            limb0: 0xa5fc5b1e5d9e423cf693e9a2,\n            limb1: 0xf6cf7b8f14cb8bac89b003ed,\n            limb2: 0x2b2fbdb6f3d2c547,\n        },\n        r1a0: u288 {\n            limb0: 0x4d27497878a92fcf1bf112ae,\n            limb1: 0x6ed3fab765fd2b78dafba22,\n            limb2: 0x20b6a585415c0f8c,\n        },\n        r1a1: u288 {\n            limb0: 0xb6046abd25f56c82783877ef,\n            limb1: 0xdeead7b25917e53f6274438a,\n            limb2: 0x1ea62e9f6b9581ae,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4b45c74101e263842de438e2,\n            limb1: 0x1de5d13076e9167da76b5deb,\n            limb2: 0x234a516a4d637634,\n        },\n        r0a1: u288 {\n            limb0: 0x1a71b588bd25e5c61d88a8f3,\n            limb1: 0x5d278614526c6bfd165be50c,\n            limb2: 0x1ea7a078ebbdfef0,\n        },\n        r1a0: u288 {\n            limb0: 0x2af591b3a6ce1a91ed970c72,\n            limb1: 0xe2f4ee607563097d22eff760,\n            limb2: 0x1e3db808fe7f4be9,\n        },\n        r1a1: u288 {\n            limb0: 0x4a65dbea8b249e4bb7d6f89,\n            limb1: 0xb7dd9a218720ff0d1cee04bb,\n            limb2: 0x2ab465a3f689ce40,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfb9bd919cce844113eb51a5d,\n            limb1: 0x2415ec83cd2875963f51ceb7,\n            limb2: 0x262ce736e9819e0a,\n        },\n        r0a1: u288 {\n            limb0: 0xa007bdfcbfb07d488ef141a5,\n            limb1: 0x7f00d5f63ca999d9a73bc5dc,\n            limb2: 0x25302703fc347c2b,\n        },\n        r1a0: u288 {\n            limb0: 0x90fb618d2fc0f78331a80790,\n            limb1: 0x37f314c2c3a4f6b372aee4ab,\n            limb2: 0x2254e3aa6d2d018,\n        },\n        r1a1: u288 {\n            limb0: 0x22aee155084437d36b4673f9,\n            limb1: 0x6e5b1f8b55a312a7fc0d5fce,\n            limb2: 0x13ab6d95ccbcf9d7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7ecd5ec39e2e9b688d7aeaa4,\n            limb1: 0x77729bf869c5a1dc11f80ae6,\n            limb2: 0xa4ab4cbe035d638,\n        },\n        r0a1: u288 {\n            limb0: 0xbae7313da7df5088a5f2f220,\n            limb1: 0x1df603e4fb6e3a1a93053fcc,\n            limb2: 0xfc8d5cd9811a4f5,\n        },\n        r1a0: u288 {\n            limb0: 0xa9643b8b51ba9c1aee411165,\n            limb1: 0xc5eda1d47ceff78eba53c6c5,\n            limb2: 0x67cba27e3af918f,\n        },\n        r1a1: u288 {\n            limb0: 0xbbdc08c72d30e0bb8b267bef,\n            limb1: 0x9da54c8245f33163fd4c6498,\n            limb2: 0x1ca91c6b163400de,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7767ffa2530e4910bbeb9d6a,\n            limb1: 0x24280b12e75928168db8db17,\n            limb2: 0xda8635b51827e28,\n        },\n        r0a1: u288 {\n            limb0: 0x9e32f2fa8a95f36f060e121c,\n            limb1: 0xb33bbe64b4fcbc221db72502,\n            limb2: 0x1b3906450d00a8bb,\n        },\n        r1a0: u288 {\n            limb0: 0x91ffdc9eafa80c31241d1c74,\n            limb1: 0x2660f321f1a657b8945e98e2,\n            limb2: 0x1d456a7c25ac8fe7,\n        },\n        r1a1: u288 {\n            limb0: 0x9bfea7b3fc76917867b20020,\n            limb1: 0x810fa5065a6b41e77ceec935,\n            limb2: 0x2c8a1c71efdbecbd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2f85f2108456ccaa53ef65dc,\n            limb1: 0x878b6f9f7563f90c378bc4fc,\n            limb2: 0x4c7d2e26d1b9920,\n        },\n        r0a1: u288 {\n            limb0: 0x78296cde1a06f23d06745e73,\n            limb1: 0x1395e39fc8ac50fcbf74feb0,\n            limb2: 0x15887f14dfab28b3,\n        },\n        r1a0: u288 {\n            limb0: 0xf6c96ed03aec71287b573c47,\n            limb1: 0xd82c1129917c88c39187c58,\n            limb2: 0x62e44c99340563e,\n        },\n        r1a1: u288 {\n            limb0: 0x9f5f8f1fc79fe0c32e31008f,\n            limb1: 0xbdbffb831b3eddb5e2f307c2,\n            limb2: 0x1e47e50cc12f3f3d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2b99ce250113516077e3138,\n            limb1: 0xf47cd426557dc1a0a644b032,\n            limb2: 0x17798a574bcffa86,\n        },\n        r0a1: u288 {\n            limb0: 0xf0cd9b8ab6c440e787a8885d,\n            limb1: 0x7500cbb999f2375c0874398,\n            limb2: 0x2507d26d47778d6a,\n        },\n        r1a0: u288 {\n            limb0: 0xf309174a30444cc45ef9b3ec,\n            limb1: 0xba1c35e5c4366c3e8d630b5d,\n            limb2: 0x206335368b8b0d04,\n        },\n        r1a1: u288 {\n            limb0: 0xcb7e874047c87f0289676720,\n            limb1: 0x13b09c1bbe23cf641b870815,\n            limb2: 0x2469f344ee173692,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe68e77ebab10145070499de6,\n            limb1: 0xc608aaedf011053bc51e1912,\n            limb2: 0x168c3766afccee98,\n        },\n        r0a1: u288 {\n            limb0: 0xde0798cd03867a27405533c3,\n            limb1: 0x50d4ef22cc77987c7026e9c3,\n            limb2: 0x297e8506ca525c60,\n        },\n        r1a0: u288 {\n            limb0: 0x87e6c0226d9bf9796cec7983,\n            limb1: 0x15024a4918324b3cad118318,\n            limb2: 0x102f20badd209d78,\n        },\n        r1a1: u288 {\n            limb0: 0x7eeb6de8801808a185b01759,\n            limb1: 0x2e8680c6484ec17243e0f2b0,\n            limb2: 0x1d6ca6db6ee3e50d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc4e37e3305c8e3f4639a8b98,\n            limb1: 0xb9ec4ca4d7d49a9822008dbe,\n            limb2: 0x615661361045cf2,\n        },\n        r0a1: u288 {\n            limb0: 0xb42d676b3032557533fb7d13,\n            limb1: 0xf3b06bc53cf3ef01a864ee38,\n            limb2: 0x73c33be229ad89,\n        },\n        r1a0: u288 {\n            limb0: 0x942092185dc6ed03bdf0ab37,\n            limb1: 0x43e304cbc5e653a44f0890b2,\n            limb2: 0xb11bbd65dcfe3bc,\n        },\n        r1a1: u288 {\n            limb0: 0x9157802e363daff49f64ac5,\n            limb1: 0x75e52d50100499365604decd,\n            limb2: 0x2eb339b99d930ac0,\n        },\n    },\n];\n\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bn254/src/lib.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\npub mod groth16_verifier;\npub mod groth16_verifier_constants;\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bn254/tests/proof_calldata.txt",
    "content": "0x1d02c87bce2e8363285990a\n0xf5e071bca525a26d21e2400d\n0x2abaae3dd6e4c662\n0x0\n0xde2cff83a6162de7c15674c2\n0x6dd1651aadce6f72757beb89\n0x24211ff0aa742a\n0x0\n0x58f1687976d0a46502f5224a\n0x2ec5d11faf6d991a205bef28\n0x2335f1564c154d7a\n0x0\n0x4596cc28164edf9041d97080\n0xc535ed489d06cd01fcf4a8ab\n0x223af0bb0912d8eb\n0x0\n0x9f7aeb21adbf57e1a32ee603\n0xe1d1d9dc4f12f134535b75d3\n0x182e8fd86a44983d\n0x0\n0xdc101c1278f44a9ed823c16b\n0x31b0837e62ba14222b45718\n0xecb11668a0dd5d5\n0x0\n0x5d19795b0a8f686dddcdfd6\n0x8e7cb0c0f7cfd690dac08e42\n0x290243624a4c1186\n0x0\n0xb97e8889b8c5def59ec50b16\n0xdbdc802592e83e1ac61a8026\n0x15de00cc8af159fb\n0x0\n0x1\n0x309de90afb2b141156243106aa34b474\n0x1e17db88c1d2e83e49f692cce4bb8169\n0xd322e3e90d0c9411e80f6d7b\n0xcf7e2b0d8749dd020a9795bb\n0xdb75d4b2e3e5a7e\n0x624aa48a4f88b1930ade3085\n0x580b43ffb9c0fd3f8ab4467b\n0x2950915690568408\n0xd43dad48c0ef773b6dfd872b\n0xe4ebcb30de85f23bd7675db6\n0x6a167affdd6fec1\n0x60e8c0480f6bf1b9e58001da\n0x7ef8d891a8c1c1484af532ac\n0x27131f19182bc8bf\n0x86d0e24f26649e27538a8864\n0x36fc50e90f926b63cb199c81\n0x61ce94ab281591c\n0x21a594bc5fb8ff76d7935d07\n0x3ec31f61980ffdc24f7fd382\n0x109c16b505834957\n0x30347df53a95a381672ab743\n0x7b5dd3106444ce733023340\n0x1d4855ced06ee4fc\n0xd68ffcf5d55d1ac91a0cdf56\n0x559834208b3bc8b07b04fc97\n0x131bd28c86fe09a4\n0x34020a2e60a6c9c918eccc49\n0xa4dcbb22f2c9d5dc55045236\n0x16599d49ee1ffdf7\n0x7ac66a2adee1f0f6b1ae7492\n0xf70fd013ee785bb16fb690f3\n0xd32e51abaa3c923\n0xe664cb687b958b32341f20c2\n0xd33f6ff2067f52a4271efb42\n0x26d0db3610a879ee\n0xd565a6597806becb2701f2a4\n0xeacdfd975c13d03d06ee8b40\n0x1887244344f3f6eb\n0x7033a56a73c7555c16afeff2\n0xdb6bd454807e7da0b9cd56e0\n0xeeaacabf2a0d8bb\n0xbacc7ba04de6c3ebd1069e85\n0xd793cc41bf164b302e8a5124\n0x897624cab502c3d\n0x25f590a1aac31a40a9f05d4b\n0x8022477becf802caef46272a\n0x2504ee166554cc8d\n0xf0defed31315ab0c30504ab8\n0x511ae105ba1b56d13c17d1bd\n0x166667737ce22446\n0xc6b4fc6d21082a17b2c0c00f\n0x998c2bcb46296425ee8b9c5d\n0x1495219fb1548427\n0xc4183e6a3e900a41891ff75e\n0x13e2ada44e6d2325535a795d\n0x1625756b62202b39\n0xd31737d5d81a01e53445bad\n0x1a2b2abf4a29b9e74a8ae823\n0x5728b94d1f2dee2\n0x2e7db36878f4a4596ced39d4\n0xc0b789497e1d1d53b1211f4e\n0x2954d95f12f32140\n0xebe4e82288f629e8a2b0379d\n0xcfaee310264159944f5e9e4d\n0xb7223f6f43b70d3\n0xbe929cc97826c088e4ff37a5\n0xa1ab641364e1b2566a6589aa\n0xedf01f92df04fd4\n0x79567d0f1e1b4a4a84d10c95\n0xd75cd83ac57d8665b60283d1\n0x193404bd27e1852b\n0x9b2971d76116deed73b65d93\n0x3ea535b94c255e7738160cec\n0xeec84d14c627cb2\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x73692b9376d090b20e5ccfca\n0x7bd294b9c757d6f7aa4c6347\n0x778f7e113269a6\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0xc24790f6d545aed52a2fbdb8\n0x184dac0e71909eb223ea52bf\n0x279a0a9dbd98089c\n0x22\n0x440522bc1a1e3b1288549bef\n0x32a9b195a82c4d288cad3d12\n0x1e0d8c39b20b50df\n0x2508bc0781271100a8ede014\n0x606e442565cc4bd038ffb2b2\n0x14464574b14c566d\n0x659a334465701b820be47bcf\n0x864da79a7fd703400d4d0802\n0x2e095430f32146e0\n0xea73fa5b211304cb38e8ce90\n0x49f4070e270f929725b6b5fc\n0x33e38f3d975baeb\n0xa6f2a50dac9d2faa0849b461\n0x1acf401eb2d661a3761e6ebf\n0x1e72370439f087b3\n0xa1b71ff9023b45e98f675e55\n0x18a10a31b68513703f9b1e33\n0x20ae1e3aa83cbda8\n0xa5fddd74bbb0501ef2a68001\n0xff624cf783ef4b15fb8cf152\n0x2b12d479648c1bba\n0xc863cf565c9895dc9a631342\n0x3b74dd36b9eb2707adbf5f83\n0x12b703004520b4aa\n0xdc28a1fd27f9cc838a61adef\n0xd6c4db1004fcb425a62d86b3\n0x4ded0317473061\n0x8d4f4032c544670db2fb0ea4\n0x43707f744fcc4bd75c145ba5\n0x946839a9845b72d\n0xe070fa717213db74a0a966a1\n0xd5c8ed35ab40a15a4b257a69\n0x1e5ce2adae88f2c3\n0x37a42b980ffd80c2bb27d79b\n0x35c26036f9362404ebd6eeeb\n0x9b692de1639db9b\n0xcd2c27bddabeaa3c4c6ec780\n0x12d3aa0ee7258bf5a1a4051c\n0x1bb2c90cd8d65a5b\n0x9289bf1e7360111c14bdb7a2\n0x6a0349d29aea67c7e0bd29b9\n0x22696e7280d10a2d\n0x609e7aed44e05d925e3cdc43\n0xe557ff47a8bab8551e1c4e8a\n0x2043cd97dfbf63ef\n0xe5456d9a8365d0aa63e47b31\n0x3cba37ac0bd0dbfb1c5e88c2\n0xbd1e432907f8eb2\n0x20a10e5521f1ca5c3ecbbd5f\n0x4c762042f3de405840d969eb\n0x233cd277e258391f\n0x2c6a620591382008ca9a7aac\n0xe27f28045121da0db536a970\n0x141e838270fd352e\n0xfb3705d04e86ca68a60d58bd\n0x6b3afc81d60ded127069a2ff\n0x2aa4b644203b77fb\n0xef0b23a683f20c2a96405dc6\n0x5b457ac6d9903e2a11bc649\n0x1f84688fe86b5ab6\n0xd35cb942969ac21b0f5fe2b0\n0x9b34af9f439d0d8c02d56fcb\n0x6c02370f07a5845\n0x57291d1d0f024b7ba256bd3f\n0x12107849e498cb4523f8651b\n0xb7be87c2753ff7c\n0x5dbc5fff791c7eb9006b45d5\n0x41f31884d0652c947bf93302\n0x1b2010cb302b0960\n0xcf3be6e441318afafcec41df\n0xb5ca409611057c4c802e4fff\n0x1104dd61eb0818b5\n0xe81bd74a920815f9dff3965f\n0x95731ab2b08ac0ef169b0a64\n0x13575d76cf07fcbe\n0xe69a42e6cc4d5a82bdbe0f02\n0xd5c7ae5e332c1e0208dd649d\n0x1c3291865a1629c3\n0x4491922e35877155bcc3815c\n0xcd9d34161cc3d64faa1a5fdb\n0xb66fc611070f419\n0x3b8f660804180abf8b2ec050\n0x1a9dca3840cc79b6245e7d56\n0x2fdd343b5b718468\n0xa5a64cec155d425d83b93016\n0x6cb03a57626c306d16869dad\n0x2ddd97c88b29d6b2\n0x7d6eb30b74cd8305449ba40c\n0x7e00574d982cf959960c70f8\n0x203e4f7ddc6d14c7\n0xc4ba6a6f77820286826d45d8\n0xc640b01660be8463761f5a3\n0xbffb7a9f8abccf4\n0x1fd532642130467cb3925753\n0x77e18cd513bd7aa7f18a94cb\n0x23859ea1df97fabc\n0x1505ea8b7982ea6ad165c62\n0x90480ef57c4efa857fa2f33a\n0x97beb66f5e33ae4\n0x417fedcdbefae8f6d6d7f3bf\n0x797e434969a45e07fa49c2af\n0x6002dfc57e4b539\n0xd87bd4d350eb8f7eef80b1c\n0x8fe89d8e85854d10082de706\n0x2bb269db3cd85947\n0x535ea162c0059cbaf7047654\n0xa6a36ba44ca6d1325ee73650\n0x111238427cd58038\n0xa6cf68aa0dc7618ee94c8f5c\n0x262d689e1b571a6bfa7e56d1\n0x73cc3ed0ce0777d\n0x1f2d677134612e77024cd0c7\n0x6677c7681cca55b8aef246ca\n0x1bb6ddfe9e3aec35\n0xd9d1c8a2000f698673837e7b\n0xd6f7031ba8fb1d0124c00248\n0x2968188fd225355\n0xc5f71a2ee96211c5eb6c1234\n0x1ba440a1d8dba75c689a0381\n0x20f747098f48d961\n0x5230982bc908fb975322e77\n0x2fee9ef4ad23438c439903d2\n0xd5d480ccf62fc26\n0x4b1fb3f65c61594e7dca0ec0\n0x4314eca36dea9819a9d2d2f1\n0x1dd30621f0ce83c5\n0xf149041bde38c5c8a44e56e5\n0x2ae7699bf240b85ab46cf886\n0xdc70eea068cc7ac\n0x1c40b2993cbfa315accdd520\n0xa63a86ed016dad7c0bfe4912\n0x616b11c6b50603e\n0xd072c643c810777d9b828af9\n0xdd3100c72c5a8a06fb028280\n0x109afd4653965df5\n0x35ceed418b9cc9097a229393\n0x26e74010111e41e9f32c9b\n0x1b72ba948be3e855\n0x682463d0ddb5d9203328644f\n0xa20ccc127ae5e7386d1fc1fe\n0x24bdffb7582cf092\n0x3245476eac1c131da68efe19\n0xf4e3827c9e7b6a5389426213\n0x2c66bcf9bffcf9dc\n0x4c61e4a40bbf7a0317963b43\n0x9ef7bbc11c36019ce8899542\n0x29e04fa3619251cf\n0x2f48a647a0988d460f9777bb\n0x2cb72e742a0c0c50c4894d0f\n0x19e3d3e77a04e593\n0xcd5aff9554ee1f3c433a997a\n0x8d71d3ae8e0ed72d63765cf4\n0x1d176ce4a290d2b4\n0x7ecbb2bbc9da4916e4105db9\n0x26c2e2731e4aa14637f4c930\n0x94ada1ad246251b\n0xe32ea073632b82f843aea81c\n0xe12fb363f586f963cd189700\n0xf3c78876012545f\n0xfc518b916d877c558e12410\n0x1c0e8fdb35d781899966078d\n0x17a71443192a1066\n0x8b9e699ec5c930d4eca72deb\n0xe81f5a10d8fcc54bc207f7e3\n0x17dcd759270f8fb8\n0x418876c2174c058d30cd73cf\n0x194a6d34eddaa56f50f2dfa3\n0x1904c95c9121e059\n0x97d5b8aabd82a9f499f0f1c5\n0x8fcef6f3fe6af5e607ea18a5\n0x256256e98912bad\n0xeaba348583960f43283bf96b\n0x4cb0cc187ecbfb3f39bba329\n0x2a8f8df1dcc64f66\n0x7412b26cff0572a41c7854c9\n0x74da39e12a1c4b5a4fa17803\n0x26f25bedca86f833\n0x1ee385c09a088d9613e34a08\n0x4542f1ea807225d9ccceb6bf\n0x1048e451d249a3ce\n0x9306a5bfb540daebb861e0bf\n0x4436461fe3b13ef3f161fe60\n0x1deea1f4c4790dcc\n0x304251aa61e836ca72992285\n0xa438bf38adcb91f32327d55\n0x2614e0b94632c5b0\n0xa206626c604038f5ef44ae2b\n0xed6a9b91bda1b30b6e8c8ce7\n0xfcab569965fcb8f\n0x1916e09fbd253cb44dc8a489\n0x71b173d7e82d6f57a4b9f34c\n0x2412a3076242fd43\n0xe5b502dc0aa0837534af2127\n0x1710855ec8170ba2e12f19b6\n0x230c12a53e63ca67\n0xf09c8d6c8c9420cfa8418611\n0xd161c4fe491bfeb7c0f4ffae\n0x67d68d7af2c9c36\n0x727a5a71f0cb382fe35558da\n0x677b5870329b8e5c3b7c5a11\n0xa2aefd57525b136\n0xae6a93e40f7afdb4053b0ac3\n0x88a4e8840e996a75bd98f64e\n0x23b3fd23dabcb613\n0x7062802e74b54a5ce2949fcb\n0x58dd5dc2ddfe6ac8793b28a6\n0x2d76f138dfed5a3\n0xc2d38acb453daff830bd238d\n0x50e3440db49a3cd07d4906f7\n0x5fa25e928b9534\n0xae1b028bcfb29a80b13554e6\n0xe6280ce7a415ffe23e709a95\n0xf3648f209a495de\n0x4c7be1d7399c52d590c3c9c1\n0xd5de242b97dd1871969fad1f\n0x26b7a13c66eb8ad8\n0xf67fd8e0c8c2f8dbe06990c4\n0xf7d19d719644d3d472f0df1b\n0xfd4f92c9c6a7c64\n0xd445cb3c3bf764d3e0eaa990\n0xd0aa3f158a49028f75b6e22a\n0x12419fd61a7bb4e6\n0xfc586b5d199e8ccca97b76a4\n0xed48313e2b240a1b42e3754f\n0x12d71cc8963ae3a7\n0x17c5e2f6ee856b61199d24a8\n0x86e751845d814badc9386d23\n0x200b87048d9b510c\n0xc187236da1687a0996d9f0bf\n0xe26b3ce0042bf04a125ccda5\n0x2ee6df165034819b\n0xcbaf9b2bea2d84ef4e825501\n0x4773255f96acaaf8b1f53a69\n0xf8ae12a27852c55\n0x397b828beaf7bf95a62b9159\n0x6783b4761a67bf162b1bd0c4\n0x2d8c2e8ce34ed27c\n0x5d3b01baf8d3bf09b3fe4cca\n0xab5f406194172d9c2a6155f2\n0x786614d0616032\n0x9aa9ec4eb5b5829b5dedf631\n0xd4ebee40f9401b57cceb70c1\n0x12d215a06813ecfe\n0xe8b9fb1136b192778eae8e15\n0x2e2d2fb3d944539d6a8de9dd\n0x343ecb31056b5d1\n0x36163e29825827402e27478c\n0x57bed8de173780dcd6cae7ab\n0x1e8c8922e1bee2e1\n0xff69f209a2403c8f8d4f342c\n0x8662e05af131fe1cac09fdde\n0x15b46b7caa070daa\n0xbd7d786a369b984ce7b67ba7\n0xe71282521b1fd048b47faaa2\n0xab4cebf3847cd1e\n0xb5f7660f39a33ac35ac2770e\n0xd878ffefaba91b5babcb64e2\n0x15b6ad55f927a182\n0xde1e209f193814e6b2535d43\n0x8bc614b5e62eb3f0f7d42dfb\n0x273eaa8cab05200a\n0xc1e9e7033e23a0272f0f06b2\n0x49132492a6717031907132da\n0x2690c7dbd390da94\n0x61a2db12b9dc64a28e9a73f5\n0xd8ce0ddd8dea91f561f7eb63\n0xde48f402b2c5f70\n0x67020bd7aa036afc5e2da5ea\n0xbb239b8b5957f2fa9eef1b43\n0x148012f50a35b058\n0xcbf13fff23fc4eefce095ab8\n0x4f04bedad59bbeebd1981cf9\n0x2ba66c3538844ced\n0x58df1b616a5b1e4531c31c37\n0x3aa50ac9db056c80ee83233f\n0x9d9f30a3d245866\n0xa57278955814ba891ef0b8ef\n0x6a366d2618691f5e2df17cf5\n0x1b5fe01a44e52d33\n0xffa535e09573e61f74138fa7\n0x9dbae112e3b0bc2a442c6f3e\n0x26dc3200e4f85be3\n0x57885c662fc52cbce365018b\n0x37180a180762a37c8909424f\n0x11ac9dd2f5f12afc\n0xa015c485d9ce47973d653e4c\n0x2140353ffa39b4471490588a\n0x302499f059afb120\n0x87b9d0d5af5c1c297c381604\n0xc213f00e79acbb866c4ab075\n0x2d0b9476a152f723\n0x794761ee31695c4485849288\n0x212d5819ac86e8ae4cbb076f\n0x1c1b78fc41b2cd2d\n0x70a757023b8b19e6cdaea60c\n0x9c37c30d1ccbfadb30dca0da\n0x25194559a1287bd6\n0xf56e2bf952ec9b66179b33bf\n0x4d79617c34014ef08a74f501\n0xa2a555c98417b0a\n0xd0bf67c6ff7ef19f2841a614\n0xc7f97d9deadcb846cbb3752\n0x1a008ddd37d4f536\n0x324fa8f949acd106ed9ac41d\n0x2c125e7316f3dfe9ae2030a5\n0x2cd293c2d3151e5e\n0xe0fa402ede6e5fa88024aaec\n0xfa80f0717c20a9a8b5c0b5f4\n0x1e9bd704475857bb\n0x88dee0355127808801b700cd\n0x317ffbbabb2c0e7665f7545e\n0x2dc925852639da28\n0x2f3d68aba20be602f2a6655\n0xe303f358ba5d0309ec7dd2ac\n0x2eacc458a4706e8f\n0xc049aa5d8a56048a8b687b5\n0xae35a94aedcf25f311e5223b\n0xe1474194025015b\n0xb7064ea956c27d0f7944e4ef\n0x119d11236944929bc4ee8085\n0x16dbdf49518e2e06\n0xef35cae046650890de3b625e\n0xd8a34de30d66531fdde547be\n0xa23069693df35ff\n0xbe195d4f8dbaa598de64e98a\n0x8ee2aab195f3aca879a0809d\n0x5f30320bbf36263\n0x560352bd1dfa19c729fe2891\n0xb4db8980662d02dabe312001\n0x84aa65e74ea3288\n0x4b1896ace2acfb6f13ed82f\n0x9b5c8d65cafce80dfda8f624\n0xe884066c4e12bda\n0x5b64ee6846ff8dc7f99d5ac3\n0xb52c3f7ce1f7ed9a7f105659\n0x16dc3761232c4f6f\n0xd21da22d46aba5127abc31bc\n0x28fd15f6a209010aada2305c\n0x1376aec48d3e96f7\n0x28ef3ec07d813ee5e1de7b69\n0xb380929a2d0e13268db6b79d\n0x210f4bb7faa07dff\n0xa316b8a325d43298f1489bc8\n0xa8bb8d23b93587c7a3ba93a9\n0x1c2ab961f746ab08\n0x183e26534da9c175837b6fdc\n0xed4029bf6394ab70f1ed9d4e\n0x267710910be953d5\n0xefdf84c35ea984c0c7b6465\n0x96844a1e60f13fb8c6b4735e\n0x245e2bb241fbcaec\n0xa751274f82333b1147969cfc\n0xf0c7c0e58542575c4eedaef5\n0x118dc380bc6d8db\n0x234d7a69c8ac83f53be0c1ad\n0x269a6002c8a907f39e6827ad\n0x9b501a3a74fb4b\n0x728e9816bc3475190bfd19e4\n0x26d34f9f5433b106758f7093\n0x2d7427800f2d22c6\n0xe531ce6bc0cc0124970413f5\n0x97ffd7a77dcbec1c8f58c0e7\n0x116fa26cbf0e6990\n0x978741431a8a41fe1760c7aa\n0x8217206c7ab82455410a6a36\n0x122164d10bf1173c\n0xc9e1c0f1869b235cd4b3a28\n0x74a885c511ec2cd4298d2f01\n0x1272bf93c0fe3d56\n0xbaef70d041416294831ce0b9\n0xc51b5b7df8cfe5f6bd2092ec\n0x1123b790dc7ca17a\n0xbda50166d79339cafc7aac56\n0x2f2409f6a91f78a9d6991448\n0x80666855ae0c5f9\n0x7ab8a24b281b556fbbdd66af\n0xba688079db718e1ead750c70\n0x2be97245e53bf466\n0x935672dab5979726269f99c9\n0x5dcfd87a211acf64f8785890\n0x270700f13c87cc28\n0x1f3943250732f95966ef6b39\n0x902cf94dfff1cf3d384705e8\n0x22c5dc8730365cf0\n0x9cb8322d1b0214d4a48159d9\n0x1e38037c890e36e0ec2ff08b\n0x2e5f05be4a316a4d\n0x72bb3d85a7a7a455b679b70a\n0xd092ccd3d632fd3dafe2c5b8\n0x18484ba133d30a4a\n0xeb3c2c646438e98c22f3200e\n0xb4ce740ec0b93abc87c44a31\n0xc6f3cc78def4a11\n0x629a8ffd114f1a186e36105d\n0x98e2a538078ee2531f725e0e\n0x1344e2933056b225\n0x68a1c168c5ad3238d98de805\n0xc0e39db5ccf1b3ef0b599e91\n0x896d34f0d79e796\n0x8276119909bde8718755441f\n0xd12b37b51b7521b85b1d6e5d\n0x2378fb7da0eaf19f\n0xbd85e39333480fd188215ef0\n0x2575efe3fe3d4a0af807d34a\n0x1d7e561320a0a5e4\n0x1a0cba0c7adf760e40da7d6c\n0x9b0afa22b12d8216a62a96c6\n0xbdf7f96cac0e7ce\n0xbef37426361a0424812fdce3\n0x18cba0140e48b4d318dab3d2\n0x133968abfd78b9f9\n0x51e18238f04dc2b5c5038a8f\n0x1fa67241c676bc449c90b7ea\n0x29ccd57a8af859e4\n0x6c23c25d9f6e9565d5d173d8\n0x185fc7a7ed68c742a3762983\n0x6382729bf729a03\n0x49827262f405ecdcf1ef4afa\n0x532c19a6dfeeb29bc6da10ea\n0xeec0532b43ad27a\n0xb609debe6686ac176575ad32\n0xc8b7ee54a29ea200fd2c6481\n0x10f5ef62c2538714\n0x5855bb3c74386c472b9bcb58\n0x444fc7ecd6d1e071e4ef26e3\n0x669d2e9554b4e09\n0x101d6f187d0a9f27708e3a8a\n0xbe163c1cb0ef2d2fbcdc4f5b\n0x2c18a056adcdede0\n0xdf4316f90737b5e5f221a551\n0x5f4bb5ea081c9717b56aceed\n0x438e0974be2dade\n0xd678d15234880f229b0995d5\n0x909e6ed8e30b9dde8e9c9d69\n0xf71a82be88da00c\n0xe267bfe5851dce20f1a04732\n0x2917cb9e12817124885954b7\n0x287f29b5df24eb43\n0x3b3392642ff82b3571de29f0\n0xc7bb124aa419d4df41c9a0dd\n0x25f47b8b49fbb21c\n0xcf812d197d5c690cc6585175\n0x1b798aeba15827a1aad0004a\n0x2cbd99fa3de340bf\n0xcbf079bfe5b312a8c3810242\n0x8ea7539d8f6bb64de028705\n0xb3df0e0f79f3806\n0x32b9a5c2dc59260dba7a6580\n0xd47d18fbe9031150911bc698\n0x73144724abd21b2\n0xbbe53ce7d8f42103d455414d\n0xfa4396466a41fad3e5194b09\n0x735d8344b660cbc\n0xeaaaa7c600ba57b3d1997532\n0x7e4499bf8ab64381cf74e8a6\n0x1e664e0634cf0990\n0x59bb8a4a19fd7f15346f758c\n0x86f9e2762213247667779b50\n0x279e63172b96d8a3\n0x20755894feb9a84ea257c59\n0xfbcd149c4d4faaa180ef9d3b\n0x49778c14e8d6480\n0xab0b4bb9ddbbc2e261ee20a8\n0x41431cd7b301c928dbc46042\n0x1d7ed4ee7dfc4276\n0xb2e1b58bad0562f2ab8125d\n0xaaac258e325ed921be511c23\n0x2882d4cc06c61e19\n0x159211e684a02ea4dac97689\n0xd2dcc2b6838772f5d7b60808\n0x28f2e44b192bd48d\n0x160b4ae48e3aca0da454bae7\n0x9cb435047d53d4aebb4b8723\n0x2d024449aa1215d7\n0xebac83416e5dfe7029ef2658\n0x3da21165a8f59bfd7cea395e\n0x12016c1cf206fb84\n0xf3f68d95b7022a6ce265a147\n0x31750c6e47e0e3f6d06949e2\n0x2b9fbd125de40779\n0xcc128bc589f0eaea0da0c0b\n0xca97d621a58e975f186df7ca\n0x2ca171037dd357f7\n0x922aa23cb56d11ed790788cb\n0x86c30abb26cebcbfdad11085\n0x2bf9bec85599dc59\n0xf342bc3ceefad20e03e68bef\n0x422e4904a05f462eb700ff20\n0x17508acdb8e3f300\n0x9205039cb20ac5cc627ab312\n0x9a1dc4927a1e0603871d86ea\n0x1cb52e4bf995e13b\n0x200a436a7735a9e8df8b6cb5\n0x64ae5fb0714f861d638827bf\n0x17a7f3820b1eb23d\n0xd9951395a7a446e3df669115\n0x86dd76c8beb56d4eff430e36\n0x1fd5ac7296cd9f87\n0x7077ef2b469f9e93fc964457\n0xe4c544ebae7734fb2612589e\n0x22f390cc60b85614\n0xf8315aa6b69d36736bc40b65\n0x8d952d1b2bf1572d54c76cfb\n0x1c4db89a9d358cd1\n0x7c53c929bcb4dcdef2bed161\n0x58f1f066b8379baf82eaeb8e\n0x1088f1ec665aafac\n0x7aeb7b53789ca263689d4790\n0xaf6a1daf6e3a8f1bc1fea54c\n0xca63a5783e7fe52\n0x1012741918e0e6982be7b606\n0x5d517c7b2f497a1d16048126\n0x2756fc5273dea9c3\n0xb339189dd8b6fb3a864e14b4\n0x998f68a4a69dcbd3707ccdfa\n0x4e099e468bf03bc\n0xc9574529c56ee5cdc5f63aea\n0xf43b6f2500b49e97155767b1\n0x791b17dc08d971c\n0xffe9c5941abbdd04f9683236\n0xfa7ea8bf2853d64783c05cc0\n0x7a9228637ec2a1d\n0x2be50fa3b1e66b87d7857852\n0xb8778b3773585cf04872b238\n0x17847558f267fb33\n0x5f71fe93670384c5afbaeafa\n0xce74008ca87223888cf0416f\n0x54b82d2a64404ee\n0x3a6a6675c26f2a604db21f70\n0xef1e8281f40cabae1cfb918b\n0x9669ca4bb26fe3\n0xf7cc1f584a242832df347b61\n0xfa55cb6dfb10691f1e608e93\n0x52a0408addfb2c9\n0x9bb6240a2b7ead5fd1f04d6\n0x2d20765c10071e0eb7b5206a\n0x6873ed26a23d3c0\n0x7f2bcfc2f7ee01107d0678d5\n0xe462ea91d6576d19e288cdd3\n0x13192ef302e3618d\n0x86379ad37731992064278040\n0x88885359607711d0a44572d3\n0x2f9e7637f842edc0\n0x5e761ef28617bc912db67d8f\n0x39e4793d09455ddd4f040cef\n0x949cccdc8f7ec73\n0x6b6f64c1d41ae749b1ec3cba\n0x54bafc13ebd7fa07d0f6ad00\n0x15e1108a237ed36\n0x50d96c1adf2576eb3a5f0839\n0x42c665eaccf62c8dfad3b776\n0x931478eff49ad38\n0xe9a30af2bdbd33ed59e52e4c\n0x95ad882b329c2f00472c19d4\n0xe75ed31f1c6314b\n0x1d0840caf7b3a4ea7e10a2e3\n0xf0c4714805675c55e8a13f1d\n0x2421553cc86c7cdf\n0x31cbcad9df2e8531f4caf9d0\n0x59c6bbdb54bde91ca847f60e\n0x6411b23b748d074\n0x925e45c21c4cc95577df2bb\n0x5bb8bfc267405ead9cf5df35\n0x13c461db43d0446c\n0x64ce9284ffb875e942b8cb54\n0x88a9dc9a784e97608bb5b3d4\n0x28bdea2a2f11119a\n0x6766e84fe3324394b71c2004\n0x979562f375f56db8ff45c29d\n0x1d091ecd65fba1f7\n0xfe271cec7e722706f1e365f7\n0x84a8bb84b3960af1ff02f05a\n0x1e21e0b6b016227d\n0x4537f85e743fbd109c68aab6\n0x954cf6556515715e7543bd57\n0x1a03c1466e4a2465\n0x766522c9da8cae4228e4dc4a\n0x9c7e262ed620a3207807b1f0\n0x50775ceb9481c90\n0x578a802c2239a59a647364ac\n0x40f969a0870215aec73cacea\n0x1a17c9a4418ec0c5\n0x1eff739901b760a73b1303df\n0x9b279f89e0951173f441b30a\n0x7890884442be25b\n0x2fde4f552f19fc948cf011e5\n0x6c3b61a25e1c0ea4abdc6f97\n0x1f3bbbbdfe9d8f5a\n0x90fb40996152ec6027ce16a9\n0x870262bf7752c7d8dccf3dd6\n0x20c96c7bd744d6bc\n0x9806014c8abe05f50d3965c6\n0xc38bf9546aaebf9193dd16d6\n0x703f027cd6932f1\n0xbb7c8b6cf07a6dde6e569966\n0xa201fe324c38805e0f8252d4\n0x23cd36523fca7ac3\n0x1513cb4610ef2ed2f24e5b7e\n0x5ba1835520e675624c0a6d3f\n0x2ac34497360ba6e8\n0x3360547873dfcb6729397dac\n0x9cf61773b1d8e14b20bd3dc0\n0xb8836a525f89247\n0x2132eaf683c4f59b583ffe11\n0x547dab0f41c7d1ed6e934187\n0x2cb6fdebb861c72\n0x24bbb9b34a02389fe95c5a3c\n0xd51fff1c97f136c04898a81\n0x28b7f230d9a26f6a\n0xd82462d91496877ae2ee9453\n0xf6cc5e7f79db60915383b35b\n0x2ee83d96d77e7642\n0xa3e04e1fde8724675e8471c3\n0x8fb10c28688301fd525da3a6\n0x192a5510d0713964\n0x1b83e232f3d1f79f999bb82d\n0x6b5885864799a27c1d04d347\n0x24bb344bd976ef12\n0x23fee795245efedf76e52103\n0x8ea8a9de3c0e260050188fa7\n0x2c49f81cf0033c21\n0x6339b4d95a09040ed40a47f8\n0xdb32050ac4dafde2c37610f5\n0x2dd0d085ee5585bf\n0x23656ec5927345335c4d5498\n0x43f39bd70e0fe9a905ac90be\n0x196194430cad9b1c\n0x54d547813d1692e64fa32aa1\n0xf5db9cc6f09f8fc05a74aff7\n0xc0e725ccab31591\n0xfa8bb9f6ae2bc699dae41076\n0x21d82428d72bcd260fe99853\n0x171c7f7767c72442\n0xf90863092e41f32ac8924b0f\n0xf6ea828fb5d38d60d7fcdfb2\n0x245bc927f42e66da\n0x838d7b12450689ed90a4d385\n0xdf840f9918a457fac637403c\n0x50ed46373e724df\n0xaf334368f59807b83ec3d45\n0x96487d8989e51372fd0445b1\n0x27d097a9d86e6c70\n0x7bb9b30e152520085f4b9066\n0xbb62af1842e7c36cec25dce4\n0x1db3b23d3a317877\n0xf1496abe25259782db09fd92\n0xc70d0fdefe38066e055e7475\n0x190f855ae4b11188\n0x78452ee19a0f89aac4b0b5e1\n0xdcb1963c04a1dbc1d131cb57\n0x1f0b6c626612c75a\n0x24dbe2a2be554a507fad8788\n0x51e76c1b82c886c9feb76e2d\n0x2b38f4be8e40c911\n0xf37da43c52017f5a948af552\n0xed73167b85b70a0b13dd2bdb\n0x14b04d67904e9cb2\n0xaf30e5b8f43155f98943512a\n0x42e564865c43542b4e21f32e\n0x1e86267e74f71b52\n0xf2b26a0ae604888c911a7c82\n0xbf6ddb0449463c23d05543fd\n0x15f25d77bd0026fc\n0xaa2802ef5339e0bc3ce85137\n0x9a653d3f1b0f49976f035076\n0x13008f85dffdf449\n0x75abd0b44bb9a79ae3bf7bbd\n0x66d889396fcc2795581db9a1\n0x6534579ef2c8ff3\n0x366451044ec3fefeaa38d2dd\n0xe60ac4810ae5642691485709\n0x2c44ae65f7963744\n0xd4ccc7edbef49b2ff8f2b052\n0x8854497455c2babd21e8bcce\n0x93e29610071885a\n0x5a33d6714dac1d24bfa6e17b\n0x68d07739ae74683d050923aa\n0x2fb9443a96182d3f\n0x851de87f1b5844a10255c827\n0xb22b64cae3f0926de260aae0\n0x102382e8a5a977e8\n0xbf88a070e8d90574cae48a9d\n0xb2d533030cb523db0e361eb9\n0x1dada476d8b759eb\n0x607d036aa2ae1cd9601bc5ef\n0x960a1387592f14df4241e48e\n0x26ac8677f3e91f42\n0x96ab874c0b07a2471977195\n0x98b23dee70810bacc377ea92\n0x1800c1d674d896c\n0x895e170bc52dfc39359786d7\n0x16a65a9df35d2736a7249bf8\n0x15c6203eae1582a9\n0xf0beb2c60f2e9ecd1f608669\n0xf2daa90887145191435be19d\n0x2fa22b80b182097\n0xfe9cccb6cc0cab8a685658\n0xe0197536ab6d37bbc95f95bb\n0x17d1457d37d09019\n0xbac3b1855f18c8c9d6176e42\n0x6d6d0c0ca6bbe91021ad4a5f\n0x151d9b55ca06a018\n0xc8028ca90dc6d44548e692c2\n0x1f3ef320f694a033cdf4ba04\n0x9ca6477a6b3615d\n0xd44634220fb340339ff76195\n0x888b9e3caad2239da50b62e7\n0x165b32d560801880\n0x94786c6663806d6bd470ef08\n0xe6715c760f27f63890086d60\n0x13b1f0b5bbbc2695\n0x36089891601e971caa9291d2\n0xd07a3a3c756d4d152ccedf02\n0x12bb4d70489fa750\n0x4bc842f110d68fce57a87036\n0x43d173df7835bee8e780c8ea\n0x25f3885a945804f1\n0xb690d4fccd1e5e6b57fc6bb\n0xf906bbf928bb303b6b7ce240\n0x2c8a65f9260ea573\n0x31d5a528dfcf2e387359e232\n0xd7042af82daeabc479fcb34d\n0x2f6bd2c48e17983c\n0x4ba64bff31f1f1f724b02f87\n0xaa3bee2fc9068e2ce8973ecc\n0x2ad746156e3ab32a\n0xc04e970a6ec0d83c3c8684a4\n0x48decff9116aa839195c4960\n0x61d5210d0c43bec\n0x2090691532aa224180c24193\n0xabd57c77111242e259aa467c\n0x112ff8861bc32e6b\n0xd86b9b7935b1902aadb94bed\n0xf7167b6ef35be7248b74bf5d\n0x250a3f5fe7e8abcb\n0x21ce0f0a0ef15c93dd945024\n0x429a317122d86c35086d5ba2\n0xcac285104257575\n0x29abda814c542efb33e7f21e\n0xd4fcdcbea65fffdf2de52b24\n0x177370dfe380bee2\n0x9db91abd7260568cb5636f87\n0x4419055d5e2335afe80b9b9d\n0x1c1564fc13434dc1\n0x975ac8fb51863e776dc8fb37\n0x35b8f96674ab27ea062389c0\n0x22fa586be94fcbeb\n0xd72a80512024fb8b39704715\n0x8b62778123c43f3b6b67c55c\n0x1a93a57c06ce1ef\n0xc05885918d82333538298245\n0x13838a655da3a3be2ae059b0\n0x13bf91bd3a8fe0ef\n0xf0a5ea4e638d61b7e852e055\n0xbafe1327985edb482bd9d299\n0x18f9f50ba7c08d6d\n0xc5a692d8d14c2bcae5eac2f7\n0xbd2400b99d005faa553fd8f8\n0x96ace6e0f36bf7c\n0x602635bd4b43f875d6c76a8d\n0x79dd6fae463fbefdbcf0c659\n0x19867b5465222c8e\n0x1b9cdcd7675c61a0f7bab777\n0xece0e02e990d3c12733cdc68\n0x28d7f28f62d41559\n0xb9bcb75197b6342dc3d0433\n0xce0bc120737f50bd3411d1b7\n0x2795d19265b66b9e\n0xd46646cc8249ac528fbfbf80\n0xf4504658b00c3a267480c0ac\n0x2ac6559937385798\n0x8975f0ef3afba6e926403d32\n0x3153e7d7bac421549048f57a\n0x29119d1f731a5a25\n0xc89b67109f2cdd97a296445d\n0x9fda04f67937fcaa95aef84c\n0x2a3fad7f57a5fd29\n0xaa7faebbaa4f2366aab02a30\n0xb9ad53d83b401c924641e123\n0x252beac3d70334d3\n0xce04fcac97530071311b8388\n0x40139d50cd1089b2e7909aa\n0x29ca81d9ccac2357\n0x112a55d3ac4c9f961375fbe9\n0x1bcd77b487f5515bd5da0e76\n0x11bd4e71b19d3a7a\n0x4ba764746400bf87c201c236\n0x798e53c7918fc94eb7cc505\n0x2a838c0c6870d933\n0x64c9a2cc7362f5e640ace998\n0xabf11d3ee073e19378890009\n0x2f067edc50bc73c6\n0xf64966bedb62bb21b9f0d985\n0x1a9a0645a77bb29de1c1437f\n0xe05b9dedaf46d55\n0x6225a5fcb50b775b87afc8e4\n0xf8583e57a3a6b98a9168796d\n0x2322e22680a88eb7\n0xeb5a8477f28b3fd8196d7d24\n0x340bad806444783a456aa3c2\n0xb76ad3cd5306360\n0xef42eb3e58ca6367041096bb\n0xd61185739fc352713e63f3f5\n0x726f8ad623964c4\n0x9ec7f8debf6c8914feb8b6df\n0x7c9192762188ce828be396ce\n0x18dd811ec585d893\n0x4211d0ae932ee4981b8894b9\n0xa9933c877382306006fe2d83\n0x5d32b77a23ae23f\n0x4206fbe310c7de903381f188\n0x4973a69b9cd0581289d749dc\n0xa04233e0f52764f\n0xcc23f091f22f115ec0d9b304\n0xbdef061a8ee1b4dc93d2d948\n0x12f55933d9e3098f\n0x61efe3ff2a13a5bb3f72a718\n0xfb0a8e7163d088d2fee1fa78\n0x2192780234bd25da\n0xe96a1b26437e616a2dcccdaf\n0x8eac69e23db802f12229d8b\n0x27d7fe108111b008\n0xbc029b0ea95587d22ad84a34\n0xebe7f7a6b65210b1d2bf4340\n0xfcb9a03e794ee48\n0x93f814838fe79fd432ff4445\n0xa1cc475846ebb53c852f3e09\n0x2cacf1ae2956efc\n0x86e9968b56a4f278f74ac03a\n0x35cd9897f57ddcfb9775ce70\n0xa55f581f30b79f3\n0x14abaf12dc6de5f7c2e6448e\n0xdad8faf2d5fd157985d6cc9b\n0x25cbdbc1451ee7b0\n0x41ed4bd4b80ee405516b5154\n0x95014fcd7d7276a7d465c9fd\n0x1e077e83af9d8dd2\n0xcd33cee2e3f2294a42251de5\n0x5a0f811eb6475677d9b8dc8f\n0x11931a26c3adf024\n0x65451bb9bfe27ae1577c5a5c\n0xb5d4edaae2fc2a5ad06d182f\n0x5fce3eedd114309\n0x57b6fa12720587db241afbfc\n0x23406211253d185e3985dc4b\n0xb6e77a887fd24fc\n0xfc8a54200f21a32cef970b87\n0x19a3094f1e2fc7fec79fccb6\n0x238cb61f783ecb61\n0xa81f581427325e988f81224b\n0xf4894e6fa60113960e8ccc94\n0x1f16feaca2fed2dc\n0x73bca21876095ac104e8a377\n0xca0dc2e34a5eddc8afe975b5\n0x299839cb99a5dacc\n0x73ae462e7cbf8707e781a655\n0x167eff10270173243a138225\n0x68a028524c6e428\n0xa663204091d1a6eb6dd2e679\n0x5a57415abcff09b913e147ea\n0x1c846b9311904b01\n0x62674b95f1a32d153340fea\n0xbc395c90495e4cb430b7e061\n0xc1696af1c44882c\n0xc931551769ce94fd3ccd8f50\n0x60bfc6517fb1f01ffbfe0d05\n0x21db7e7b3a293c8d\n0xbe15f944f1afb3d7c953a8ce\n0x6c866b82fcf2096aa2648b98\n0x19ad5fbc48be98b2\n0xb901a63c9f5e392785e9d96f\n0x8ddeec7abd2bc6027e3281a9\n0x23a0c13287999cc2\n0x7888967129666526ef667d67\n0x34ed8dbda44d5bafc75d45e\n0x293938db3fe7d687\n0x15b621e9a9d16e6f052d5434\n0xaa46eab60c096cadb775b5a0\n0x161269940736a2af\n0x1d9ba65799df310afee06eb5\n0x1077f66eeb23432c8a716c5a\n0x242351c41f76388a\n0x491c40e781c3caf8296d3339\n0x3f269d150e6ef1826192966\n0x1c0f166104a61eba\n0x5ed0266514c2e15ffb30348b\n0x3746b660729b2b40389e7e03\n0x1dba2d2248cf3575\n0x1acdd352171558aa91e5f1e3\n0x684e72a8cc18badd6efb9bf8\n0x1f642808f5d5ce3c\n0x3d66f77617c43bcdc569a2a0\n0x11692b34237f7b7461864c52\n0x2bc671517c14192a\n0xba3a8e68955a83d41017b59f\n0xb82697d4e5ca40827c3b73c5\n0x277347432f3fc38d\n0xed1a6f36d8f347fe6153f5bc\n0x2b65dc1ba775e72313e5b06\n0x2aed215c14c10dcc\n0x6bfbeb8328cabb024c0f7f61\n0x361742c20dfd003b71a273a3\n0x9412a2610c78f05\n0x1c6d2e519b340d1a5f3540f3\n0xf2691b5fe625069ecf6e451d\n0x15a11e2f83d32642\n0x3fb2f3ee40ecfb50e98d83a0\n0xfd49740a3b4c6365bc24759c\n0x5b61c89abcfd373\n0xa9fe1fdeb54c4f7313ccc3f3\n0xbe45f55b9f178337ea5ec03e\n0xad09494843b615c\n0x633058ceaa0b0a7f1051794c\n0xf845c6c5eb9a1d88f842d594\n0xc0d64fd5ec8c2f3\n0xe1e4e905be7fb68ae8c629e5\n0xa619aaf616d20cafb1a3881f\n0x4d9916617e3cb90\n0xe654f13ce8048e2a3bdf3eef\n0x179b0634b155e6f003976388\n0x22ad55570aba9121\n0xdb97da9fb0fec66524c685e7\n0x53725607dce3588f2abeaf14\n0x64d909d9ad6bdf2\n0x73ab85fcaad3ef44f532ccda\n0x4b90226836d675bfc4f2d0a7\n0x1727bb934fe8da5b\n0x31ec7da68ab1ed8ab8b34424\n0x5234e119f85c41e541727f5\n0x2e9da7c6fc202b6\n0x91e0458f74cba9a37e37481b\n0xe69640e13ba7a8cdb6caa2db\n0x2e6980bc7a3f259\n0x7a27acd0de0252176c56399e\n0x979885c822d8e1d893e9c449\n0xbc7ab6a98665e14\n0xa86f363c185de562ad693cc1\n0xf035987061249077e2399205\n0x275d9bf005f4af68\n0x450f0263a8822cc1691be0cd\n0x982c7868542a6811212a064c\n0x24b20baca2b94af9\n0x89f58f0d67ebe09356bc3538\n0xe6f56ef67c0aad26c55b5d5e\n0x80ebfdea0b545e2\n0x4e488551f230999a85fb5f48\n0x955080abd0d00a1b90c4b7a5\n0x1d34bba4ffe3d613\n0x7bb641027aba54ef467d239b\n0xaaab2cf9e5fa8b5d938810b8\n0x2386d834845c895e\n0x22e8e674c938749bfcce27c4\n0xfda0dcaa7f1ef39f54bed5d3\n0x3373561f6a4dc9\n0x926cd60ba9f99634a664c698\n0x1a1955628805895570c6dcfe\n0x2b7f1d28b11a3c03\n0xbc2aba2a019a5bfa9bf789d9\n0x6947a52939af1bf51471ccc0\n0xc6d9518205dd2fc\n0xe3f955444605c5346aa6893d\n0x81fd45a8786952732e667b58\n0x2ce74d7c5d01fd93\n0x40c9ad3013f1ec536d35df8c\n0xcc10771f476053649f7e9f97\n0x67e97f20c8516f0\n0x4ab0b061f9595bf4873df15e\n0xaf5f9f7e5d793e42e91a53c3\n0x17feda11d6c78b44\n0x88a6c15810aee906d13fb3f\n0xe0874cbe73539925b241208\n0x1d0cb81a63138dae\n0x55f84840a317f7f5a8e573ff\n0x4e0f372813c1e1612c3e4e64\n0x55674da474d541b\n0xf1fadd869565ba003e0e58ad\n0xba638e5006fdca66354ab836\n0x100a842166cd8aae\n0x82b3351b9dbea0a8d6739512\n0x933954ab4a1d4fe70fc104bc\n0x14b971711fe23e06\n0xabe4ffc995fdbab086200521\n0x4b2009627ecb172282dd71e5\n0x16e4a906a534cb76\n0x66e355b8c62284dbbec1f52e\n0xaed11882deeb9dbf224698c4\n0x19b7784461ed272b\n0xecca634e54dd3a53d4f59996\n0xc1e8be8544413c8b5421065a\n0x28aec7791fbe59ad\n0x621c53687022549aa505b940\n0xe17c68938768911694c3d63a\n0x257742dbc869d425\n0x61666e32dab56b9da4b19f6d\n0x4243d41e83eaf3c2deffac38\n0x146db93f6868f1f5\n0xeadbd83656f8e668c1d65cb4\n0x2b91f0f9bc2ee9f5fa1d2448\n0x5daf588c2494464\n0xbc7ef553f45989c39d6e3b16\n0x7a75c1d554c6acd4f1bccd3b\n0xb880aab3cc2fb1f\n0x50e464606a56fcbd2289a8ef\n0x13fd418449669b9e3c3c0d72\n0xce1f7fb42c7fb63\n0x4cb7bfb5038d041bd8980a7d\n0x7cfc9b7b2530b450da3418c3\n0xe651db655b45283\n0xf514ac890a3329cef1ba065a\n0xd3de59d89b87d3b1394fa3d\n0x227b0c1d9338839d\n0x9224995e88673d066e44c213\n0xb3ef21e4072c49713eefd704\n0x2947e014d79ec2a2\n0x1d4548cd0149edae2ee487c9\n0xb4672cda8afe3d8adcc17db\n0x1b8e0cb251b137cf\n0x2d58f09ad61776a87463e614\n0x4764267a49866ad5c22c6691\n0x1256adb707ce2c09\n0x37a0c1e3bfc9927de0b6c16e\n0xd4f5fca18410bdd1b2aa1881\n0x56111f201e5cf1a\n0x5ff6d9062da9e5c5a406651c\n0x8cb9f2ff75609485d922a7a9\n0x43d722efbe7f2cb\n0xc88dae58dd80d1a8984d51bc\n0xd5c8c4f92ae9e33ab155eb99\n0x17325270fe81d83d\n0x12c2accba9bc5c4f57b84fa9\n0x477e815f8affd1ef93ff97f8\n0x29427c717ae09379\n0x8c958abff66decd8ecf03e77\n0x811e39d7b35a2e56ec1215a5\n0x29ed8e79efab67e6\n0xf56fbee465a6cf7d12c75f4d\n0x30307caadc17539b16ff2f6d\n0x27ff92408b9d5f46\n0x4e525d9d657236b5b0bc98ef\n0xe068264e6fb199289fd29db5\n0x8be2346fe4a7a53\n0x9a2d2e8aea60020c0cfedf44\n0xa5d9c3990ca9c435fea62a11\n0x1bae9408bfae1e55\n0x299d3b953594433d44d5f268\n0x1cbbe49af6b646502ea51513\n0x1e62e55fccb8dc94\n0x39a5f56a5cada6ea7fc522b2\n0x4b24bfa104df6ff174b8147f\n0x120937ad059e940b\n0xe3601dd6007b1a9bfd78c0d7\n0x86c053a1c205818fe7e83d97\n0x22e81193dc66d18d\n0x5ee12b425f479a716f2f4185\n0x26962c694cb8576b5774f5ec\n0x19dfd6b64a954d41\n0x401a5cb506b4a0b2cce2eaa9\n0xcd44045f5c6ab29228dc388d\n0x133e0e72bc543816\n0x7aab214fb79fb800426cc763\n0x2ef3cbe558355bcf048d8724\n0x16188a8e21442bbc\n0x370318030fb4ce80e91622d4\n0x12bea30eaea4ae510354249\n0x2984bbdc74b60cf\n0xf35123212685fb2821547ce0\n0xf6b8ace5c80883c044441233\n0xdf3ec25a24c68d8\n0xbccbc9877386339b48eb147a\n0x1c619f619086b0ef498b602a\n0x2fdd57d25369c354\n0xa961d65c81ebec3c9aa5bc2f\n0x76bad85edbc0a27efd895725\n0x1be89c35fda478a1\n0xa9477cb6e4bdb95c7e79d49b\n0x9cd8219a91d5983f313e8a11\n0x22db7d37eafb892e\n0xcb662ba073a1f5af1ca25ff3\n0xfde948cde86458af5a1424be\n0x248413c17a3e60bf\n0x32bae23461f43f62cb42866c\n0x468563c70245b976196808d8\n0x683bc8bb29eb142\n0x91c2138e678e81df249a3ccd\n0x7026d5eb515f8210bd0884b4\n0x2ccb18a0b1076586\n0xc0483d9e3eb27e01506632d6\n0x18a4c6acef3e0a4da606a57c\n0x275f8e7bb566c1e7\n0xfc88376b8cab89c1610310a3\n0x5cc6c9be7b7e6323d26b5790\n0x1bd52363dd0479d1\n0x3f9448a159f67398b0d55f53\n0x457427bb89c82a9a20c04e06\n0x1a9c169cb83241d2\n0x7237d0ae6dbe53f007fe7667\n0xafca3e065e0069dc2a5c6af4\n0x13aecc2342463707\n0x6bec486f58144ebba0ae5c4\n0xb34e40538b683112501c1fad\n0x2f67ff110093ef9c\n0xfb9fee3a247bbaa2cc4d3cba\n0xd10904c0479af62f2546b752\n0x6807249b8b95c02\n0xa89d3921c21b287c1209edd4\n0x554281b1d939f123580908dd\n0xbcb90d39c36d4f6\n0xc4b6f5b3b1a4a69ccaa13563\n0xecc4478c7d2be485d68e1ad6\n0x275b458498f55b43\n0x97fa6c35ee3b79355c6c0def\n0xe7ea843021e42e3416a6ef42\n0x290a373af2fb4e6e\n0xcbf5283f868738abfe43e887\n0x4bd932f95c3f8b19b4f27f0c\n0x9d7d3c2d651d4e0\n0xda5077a0f629f9baddf4d17f\n0x4f167e9da39b497d2ff9b6ef\n0x1e7f1702bc157cb4\n0xc059896abc0aae6c31cea6cd\n0xc98fc3702628bca5ab8c13d5\n0x18f2977dc1dec59a\n0xd32a6250a810e41f9a71677c\n0xae81a3006559141317675853\n0x18ecf10972acd945\n0x39a55e4c8c9303e780cba050\n0x954ad20069c071440ac0ba8c\n0x9be3238945f1633\n0x13d1adc6a5c9dc52dd69f6db\n0xc7b2315f550c1e794eafee63\n0x29a6acbcc33d4f52\n0x25a4339f23e4000dc0577e29\n0x3bb14e3a98308fe4a47d41ea\n0x1cf3ec73b6fe7619\n0x5a42c32b80f3ca8b70af1cd6\n0xf3ac1dfc5bde42b7ed26bff2\n0x6683108d035d2e1\n0x89844cc9b46bf8b4d62b5dc\n0x7b932de490de6ab341395005\n0x2ec9ef4b4ffbffef\n0x345ca0b87bd125e88e9c618c\n0x15117ae6ea8ce73f60fc9216\n0x229189b159e5d4a8\n0xd55e541dd53a1231f8e0edf7\n0x2bb147400d8d992893c852bd\n0x2efd93992c44b11\n0xa8375c85a0425715d87688be\n0xb49a712dee03204ad6a61a6\n0x2f1ac072ba1f1e01\n0x985163f60f72880e049f8621\n0x554f91e7d5067cb934a09ac8\n0x28b25e1739cb6fbb\n0x86cccc75c49468b01cf60d61\n0xea1460547c4f53fdc5ab23bb\n0x20e67dbfaa280728\n0xce07f840f68f946a358bc573\n0xb62f21892fb302e6f8723a36\n0x267a49e06ab7384c\n0x631c3d4d0e8acbae8f0d6001\n0xbe644fc50b8fa50b85181654\n0x27387e253aa7ecfd\n0x7e045d1417f0d40be078dab\n0x2bb2947d3b7adde5be1be0ad\n0x1f4c754fc2d8d8ea\n0xd7410bef620d7a76bc9127ea\n0x2960fe243cfddf3a82e89d4\n0x20e0958841639cb8\n0xae24177417d3d4610ba6c1e4\n0x8cfcafe11338cee6e1dfbbb1\n0x1682b57c733cfa28\n0x6623ac592fb15172113f2141\n0xf27dc3de396363c17187027b\n0x232550073b74d5a2\n0xd84e1d53565fec0480df1f47\n0xcbc00d06e9c3c77967dfafef\n0x3828c939f4a5fe4\n0x749ff0e4e45f5e86f32d7e2f\n0x7f174acc69153c94a6b3cb1\n0x27b7c54fa92cc525\n0x7328290297b37694d24804f9\n0x8a436f5b95389ceb1a5d1904\n0x218919ed8c2d3485\n0x523efb5c1b843881a3e1772f\n0x192d7c5c59744ccd972a6bb2\n0x2d310a041792c00a\n0x8f9d98a37eb0e38f36906e73\n0x6530ab63ea7c019e63d3f1bd\n0x2e7763aded1aece0\n0x2704c3b48ed0fa5b2117ae57\n0x6bb7682af115d78d57a00183\n0x18729f0ef03cf1dc\n0x7dcf82b84a3f34a4f38196c6\n0x83b15916fc0db05727903f21\n0x1f14bacefb80c541\n0xd5cb6d230d35efef66d65619\n0x9482abe830db825d1c976dfb\n0x2353317fb8f93070\n0x5779608a34b0cede44ef2ebd\n0x3641bac09f8586bab1bac6fc\n0x12c298941921be78\n0x1c3918710de4436b2a56f1db\n0x96bc395c03dcc2095e0815e\n0x794387b00bde757\n0x8419f2a081c22aaf9d4b3e1d\n0x94e080af3db09348164bcb0f\n0x1c480421ca5321c9\n0x5c76fe7bfac845fe1aaeecf\n0x4a3ea047cd6e4a509c28f73a\n0x1c7c72bc968b2548\n0xa952f818000936a526e912f0\n0x7880f53eaee1a53bd98fb6d\n0x1b1197584ab2376e\n0x5728613d387eaf70db562c7e\n0xdfc826397232832a99b8356a\n0xa2687cee2587485\n0x646467fc172c6c3e891153c9\n0xd1c63f16e710e21700860940\n0x24d5cdedaefffd1d\n0x275042a29a77c4f814e8657c\n0xbff50094c20a961a022f1b72\n0x4ea2f43716b2416\n0xf031ddb69b888f0fc41acde3\n0x290d06ff46a36bfb952bcc9d\n0x1ce7274d15fef3c5\n0xbe\n0xbbe146965c55e502aaa997e8\n0xff87f79ee6d4c0fd4b7f001c\n0x1166407408829a35\n0xf43b1cec82368f8a043ec4d3\n0x3865ab506c096f84a77a4142\n0x19c4aeede8e09283\n0xb61173f5464e5199da240353\n0xaa0b017dda482d1349eb452f\n0xf505d5b9fd015df\n0x588c35fc88075179063a952a\n0x49639ed2520aff23e154540\n0x2f9f438653ce06d0\n0x2116f5b239b0ce8efbe9c81d\n0xe7907f7a66ae653f924707c9\n0x2cdd3528ec0a53a2\n0x6a5e66ee20b9d4641bb21bbb\n0x594af5f66c3ecdb01b72c7c8\n0x992849fcb34b4f5\n0x31dc8369b91598b70313db24\n0xadfc068ef15c619e4baea85d\n0x15f81a28773e1b00\n0x9a87f812863790d4ccb3c892\n0x77570d1c8f2ea617601c43f2\n0x1c9d4dc5b0fedc1e\n0x1d01db87ec9f55ef339f2263\n0xea9d23880d6a8b35ae61549\n0x29492534db68ac68\n0x679ec556c4510857f8fce004\n0x26981770e42c50ac5e0e7719\n0x1af50aa410b9e30e\n0x347387aac4016e10dbecb363\n0x314e5b7491130b573eead11d\n0x740b5e65135a733\n0x4e550196332efec1c58185bd\n0x700b0d2cc0d82a33bb52c591\n0x2473df02b91931e8\n0xfe6c5883d63cddcf2f46f817\n0xd1d866fd72c7d4e4ebfc06d0\n0x29ab364882d910b3\n0xe6738634b15979960cc376be\n0xb885e217f76ac4d09557f639\n0x152b5d3f1682d27a\n0x6c8ac0ff7ff2b06eab1a8b69\n0xd66c06fa65abb67d90315c79\n0x2595741f100263c\n0xda038888d4292085f9e675f5\n0x363ff771b50456aa3310cbdc\n0x1d958aa0d2d83eab\n0xd74c84ed1127c70f7ced2116\n0x9e161a4a920dcff13fe87b57\n0x3aac298f131a833\n0x4ea779c12d6afbc52de31551\n0x8be3ba67d23fede04b4e4098\n0x1e50fd00ec5b1bb0\n0x1e3af0267720a6852982656d\n0x72dfffba6a8a4cf390f03e4e\n0x29cfe1dd18524601\n0x3fd04bdf8d741033832b30ff\n0x1a1a48f915cbb97208354b38\n0x6b97613cdd1eb05\n0x1db824adb60f7f4ead89cf2d\n0xf7c3411f8d79c537c1a573e1\n0xdf81de13c7d3def\n0x348dba3d97e5c689b06ea627\n0xfaee615aacab3516dde7d63a\n0x235ffa10e4028870\n0x4d865e5d91fb805ec5fa1921\n0x316246b4b9b6bac7618adaa2\n0xe0604eece22fc25\n0x7495bcf7ee055e47217bb04e\n0xf1696d150326ddc6fb8f0e95\n0x138283aa97177f1\n0x321d5e8d83b8508e0e514acb\n0xa0b980aeb4b2857deccd147a\n0x1c8015f786db06d6\n0x4670fbe9a21f43bbcccf0c2c\n0xb2ab91dd3871465e0698e3ba\n0x2957de85e0ead31f\n0x264743e317916b0d9f214e2f\n0x9e6e3a9a0493b276710ca5ad\n0x2a5eb190947b72d0\n0xa123e314e26c153a7be56ca6\n0xc3014e68e1beec28d8d4ad64\n0xcc0c3358b80ac6\n0xa7b73ee05b92dbb28b350998\n0x737c9c6a5c13f6c836cd78b4\n0xe2e427608167ee5\n0x34d4a44bdbf6649dd7c38e78\n0x9cde739690234079c22eddd7\n0x237c260c852ece36\n0x7e3704855fa5d033b36ddd45\n0x7dd90185d023fe272da96d0a\n0x230b5f15216d4566\n0xd29945cb37fb54494765bd4b\n0xe3f1ab5fdddeaad19b1ae701\n0x16365bac24eca5af\n0x6bb2f16d2dfd691883db5380\n0x7cab420eb1718001d9b3dc7f\n0x1938c1c5722cfc8c\n0x8df356213a92d7514bae40a3\n0x949ca312740803869bc3624e\n0xe11b0f1c905e30e\n0x959b288d3e0878c3ced90d66\n0xdb90bbc730721a467a7c0459\n0x1a24a02548c0496b\n0xf1934ae8adbd4ce8e7f54a45\n0xed26fbe905561b2d4dd97dfc\n0xc270dca1fbe6006\n0x4d6bb8315ec1ce7ff748be3c\n0x76b4dd8e0284c25d000e019d\n0x2607709ee21caf4b\n0x79699eec368e995a7a5b06b\n0xbf971371fdbebfc4a52d1621\n0x1f02335aef1e79e9\n0x5ec279a1a70f8bae2f8ebd8c\n0x959da6be6b8aba166c13251f\n0x1045b8f4c92ef9ad\n0x18f9b93d247d43192898d75f\n0x1bac718cd895a0a6d9263073\n0x14897f19d91eda8c\n0x47f808d8a08bfc9db28094c0\n0xedff8031381da8bbd399b011\n0x200b2bbf94e9e7fc\n0x2e65e02e18eb350679bb4ce3\n0xe884da2a05dd0a4b7470e57a\n0xd31977f8a1cd248\n0xe33547508d917f492c9a187e\n0x9384dd6f1c9e475dd2d9c04e\n0x24c74a4b811ffef5\n0x93c9f13fb68b97f6d881e6f1\n0x8d750ca5c249910e9b6bc0d2\n0x456c1ad34aa6c93\n0xc117836bd45a32e815388964\n0x9edd87e7296a19e7a87b4717\n0x7fdb5bf5b7c65e7\n0x84cc52eba5c64c14829252a2\n0xda9189de63252a325511fd2e\n0x26150991da578ee9\n0x11892c5df020b131d211b722\n0x59274e26bc4e6545b7378048\n0x192d897ad4b1bf41\n0x8dd197f52675c90fca7005ec\n0x530c48f0a4a0a6d0f3c7553d\n0x24fd5f5fdf8c8f93\n0x9ee364066c71ba04e57eb73e\n0xdfb4bc25ab83e74cb05a643f\n0x2944882e30f9915a\n0x7f79944d468a15f3b65aad28\n0xd314b23ab3af1f2d0a8ee84d\n0x204f935f0ccaa92a\n0x1738f8e9d61034665e692d6e\n0x240db7b44661865301f014e9\n0x1a30916ba1a5bc03\n0xe8f2bff5fc035d2c75f468f4\n0xbff5a85d99ba514aad99bea9\n0x1bbdcd500238f342\n0x4208ff789bacd9808f8c5726\n0x7851b21a6e7c3dc6150106fe\n0x29630c1656a800fb\n0x93e1378567c2cae1f77ddfe7\n0x6b1025c2aeb5d09df5eadd42\n0x1f52412be05ed2c3\n0xc5689ca54448f9b2ecdf85fd\n0x10b168c5f930e448765f58cf\n0x1edb09106814b064\n0xe3de4505e6324a86b85a9f7\n0x5a4689ebfcdcc0b9384a7a01\n0xc5948d2fb2b0b7e\n0x223488bb34d4b9541f169bf4\n0x25c420248ed5f8ab94bc6ab0\n0x173ae2684d0a7ae4\n0x9ceef123bc306ba6074e1690\n0xaeb2c92df05d8255aeedbb4f\n0x1173b1c4d2f184c9\n0xe392875f88f5271f2de64164\n0xd8a72a6fabca856d8dd2da3b\n0x235cbcabeaee9ee4\n0x8727b2cf74aaebd44774ba1e\n0x2e20692cb618b16c77a11a59\n0x18c39ecf41ada049\n0xc7daca6c015278a5cf3cafc1\n0x9c6881d072ab6195aeb6ccf1\n0xafcd1072491cf4\n0xafdd676e36f6514ec0bb8bf2\n0x86dbb57402a7f850e95ceb06\n0x1b204cbbf7d10188\n0xc4e40f42960ab3764a045261\n0xf42fac7e5098f8b271daa6e\n0x2d3d4236d05b9a9e\n0x3636c0092f511bd1cb53872d\n0x2d8894bd9aa9ed086a2329f7\n0x12e9cb1a89c557a4\n0x43d2acdf2cdad891865dcd62\n0x80c3b07dbe5a1eb4810135f5\n0x2bda64313e866545\n0x49cdd704a7b6439eff6ec873\n0x73f2f0319199acb1240f1b1d\n0x20322e072f0bed3\n0xef11b8efa35f2820af616650\n0x522b5cde4d4f2478d24e86f9\n0x14f9eca4acb7bbac\n0x873f05a36a4cc4b42020f5fd\n0xa969c0dc21a926f28ca09093\n0x151476ad8c1119be\n0x8a3f27952e15b4c438689d95\n0xf4691ae8cf7024ee4ca414b4\n0x4eba4a1c6323527\n0x534ac8ede1e164427ef6cb73\n0xa9dcaf8d6478b37768da0b43\n0x24ecbb2a3f176a8f\n0x7f7d3e65f4054d3443c0703e\n0xcf1aa1a4f962f25039d11460\n0x1688439d3880a0c2\n0x8a5f2ad96f368120e780abe3\n0xe4f3bc36627d065d95c05c04\n0x2e556cba84f5276d\n0x6c5686010e05fd16c536ac8c\n0xa895ea32b5ab75287ff15b97\n0x2d978da9c8d632b9\n0xa022d84e74effe37978c5012\n0x724ea88c0299c8d3d0976e2f\n0x187542cbc029bf0b\n0x1009600c1096389e305d2452\n0x3147b6b037f8e492db2e2416\n0x2a3bd0c5fbf44c42\n0x4ba873f09b37ee12f5ca3ba8\n0xbf070d3eb4a390d8009e0c13\n0x20aa673f504be6c4\n0x723db44d02e767ef681c6a67\n0x66541b6da7d075be842a4d50\n0xc1d21d4402c8003\n0xdf932597004c6f0592744453\n0x8a5a784f27de88cb609bed82\n0x2cc4b77a72444337\n0x490fe38552a62ea822519fa3\n0x83d6dd6d7dde06b5941191b7\n0x4df05ca29bb2999\n0xa1d10ad62c8cedb00ccc53e2\n0x796b0fe6009cd15f8843b3e0\n0xa586dcd274a9569\n0xbb39fac8bad00fc42f2b7c08\n0xc1793ac0bdf41e8410f8d6bd\n0x13fd5ac5c6262a76\n0xef95c1a985e2012c84d224d1\n0x5f3d26fd3d49d4a05d4b8ce6\n0xad4bbed26c6e199\n0xa5c80ad0fd77cbd9538c402b\n0xddab2b433695bddf66be89f4\n0x2582fa49f3cacdf0\n0xcf185fed816812a9d276f889\n0x5a5f33765432106ad405c41d\n0x2f1d950d77b7eb0d\n0xc4c45466828b2dc44ec30c26\n0xea173879b2618ff4528c08b6\n0x2f24c8563a767372\n0xf09d1c525d887f14c337520d\n0xdb7e7e7153830b1c10248aa7\n0x8c44adeb626fafe\n0x701f1e612f5d8e3aa1346e1b\n0x662fad460ff79c710042c157\n0x93201ff6c8b7089\n0x218584acc84d1451b3d45076\n0xf1cb31190c186a18d94a143d\n0x244a2a1632ff7625\n0x93658231414a8b6bbe3522f3\n0x8ea0d394ee28fd97dbd52aed\n0x10163d6f5482a0a1\n0x9a23e209225b1308ab172d0e\n0x9754ab272a0eee4316185457\n0xcd58a6fc06859b8\n0x4b122d906200d38ceba74735\n0x2e742fb7bd5dcc0f5080f881\n0x2bdf8358e78e2ad0\n0xdc6f5c514e2d464e406f5a96\n0xe0a25bab777c66d8e83ee427\n0x77f8369a44c7849\n0x9f904335ce7c8deacbcfbbc2\n0xaf5d489f35fafc8fe83923b8\n0x1874c1c3eb95e0ec\n0xd446070ce2c2ce986503f3b0\n0x319f45efcf510074eb0dc706\n0x2183dd40091af3a7\n0x289cd310b773ffcb75afe560\n0x2122fbf2d2ee667cb98a8f4e\n0x6c5deb35c9e397f\n0xc7b329976b5f66e0e81c85e0\n0x246b3371dd9b7840832787be\n0x12742ff838aac808\n0x19fa7a3a42ebc6fda59d63d1\n0x170055534a3510e2257343e8\n0x771fe163bf3803c\n0xb8dd9dac8392a08f0c1aa106\n0x7c0adad338f9d8a6e45d2e32\n0x171179a71c19892\n0x90e0c8337cedee0319383160\n0xa4cd6046f3a08aff1dbc5713\n0xea61e3d3534f289\n0x758f3bdf92466b9229abba65\n0x4cde27edf84d0db01b08d1e2\n0x216f60fa7b6f0c9e\n0xfa9678d4e0f7653f2f0a90c3\n0x67a476189273d4488991ec1d\n0x4484d3f60035c7f\n0xf2bcf950ba0073bfa2825b4c\n0xcd1258ae1f692709f97cd25b\n0x15a5ef36db20ebf3\n0xd33c4f070ef764ae8d0ae924\n0xbff9c6e42f638602073e4506\n0xabd109a6815a9ad\n0x2376a43d4277c708c0a8b2bf\n0x132f939f05f2ca5613e0b8f6\n0x21a539089abfaf1e\n0xbb90356c721ed5ee187ef6af\n0x7c88c797061a2e0a520e1351\n0x159753742c0c23b\n0x67c46f64ad85f42bc14f0781\n0x8b36fb2668c164c783b09446\n0xbc6c8326590df2\n0x9f4f2a870157d5e01e4bc913\n0xe4a0fcddf8379542120cdf86\n0xf22d1f2e5a3c5ac\n0xdedd2dbdbb07375eb1aae69b\n0x46260aeb89307c51071e6ac0\n0xc1adcdceae2ab6\n0x8225e99c8bec39f7e4c8b96c\n0x70e6da11c5c5969641372987\n0x13a226ec495b948d\n0xc2fbec699db2d9efed3adcbd\n0x22cc8ff3cf066e14979d229a\n0x1f842fcb2597f80c\n0x88e1588b7a6805462c439cc5\n0xbbea2d82330bb824a7f48c02\n0x271dfcd704b15482\n0x6585c9262015d73f0864660a\n0x3a2dc53f41bc338a3db8d163\n0x2f39ec0672365e7\n0x740927a1a5dd22da47811536\n0x3963ee4bad87fb687627d3d3\n0x1873cce31b2cdd7a\n0xa07a683724ee68be171dc354\n0x7f0c96ffc5188a1172bc5e2e\n0x14b19508f540464f\n0x47edb8c693f5de81168d2dca\n0x371bfd5f2674775c488b7b70\n0x1aacfec5975dc69b\n0x2f07f89ff54b37492677ef19\n0x9b9698db8c0eb252830a2a82\n0x89ecb0643ac178c\n0x4a7b5ec769e4a7b71d328992\n0x339b8f91750bf323b7426e75\n0x1e9bc00c582084ca\n0x553ed45290b8c3281cbd2a23\n0xfa5f5a137bf808ebe9f200ce\n0x2e6b107357b6ac32\n0x8476304b22123482120b9e40\n0xbbcf2bbcc3528dbe80b3fde1\n0x19e8191a6bb54c9c\n0x2a9d7e8a06925c47b2e5b138\n0xead94c49310b947b9c458faa\n0x1430c67fc935a594\n0x6cad8321b500bef52c469f18\n0xcc33146be790ae11ac0cc561\n0x17db8a9d12be651b\n0x23e2f1f6ac23f920db256c05\n0xbf20762642697c5f60321b83\n0x1b8411f22c459e0e\n0x50bf4f715b4d02fd1c546b31\n0xff1380bfa481148b9f1bffc\n0x2cf26df6a4101817\n0xebb6326937993c4d9e4ebd0a\n0x5c1fccad8d3be4c2c7261053\n0x291b38d1d19ccdf9\n0xbd87bd5c6b58a1b9069d764d\n0x99eb57c1d3616c2c3f3765f4\n0x29a2f944e2905db2\n0x4e513e438c3c194b2f2a8c6e\n0x4ad150b14daf3af358470dd1\n0x1bf1d5af3361904c\n0x2fe72824766afd603e6e9605\n0xaab0971c426b05dad891eb8c\n0xdca686a4e81a487\n0x1c27f9048ddf1260edce831e\n0xbe58f70a12a5464580392051\n0x2e95167fa7ebcc73\n0x9a6583ab3597c36bb27f2b70\n0xe81b4b1b5e48c93018432a77\n0x1da154b2df1da5bb\n0x2dba870978ae99829469fa3\n0xd7e420fe56b3d09ae4d49fa1\n0x1f27a8e9344aae6\n0x11fef118ee2c63ad8ee8d3e8\n0x5e6d876e19829d3e8e2ad4ad\n0x165b27b303f2697d\n0xa5f44faa841378b2da8b8088\n0x9e923b5ed2936fd976bb3fbd\n0xb713325e7dbb04a\n0x547333dc1719cce4407cae4c\n0x516fe15fa937a234c0497013\n0x1395e0056e06f142\n0xdc9ff33a11c9d856c634e810\n0x55990dd9f60e95c22739717c\n0x22465bc76eab0c4b\n0xee3ff448f2a601242378a1d1\n0xdeac236c903ccddb75aa380b\n0xbe052707982f30\n0xfb4fc16eb18b575f6ee82605\n0xd09854785e32cd7c62d8a9af\n0x1bb41fb55fa1e912\n0x5bf94ed668d6ac1550de72fa\n0x4a3fdffb8f7d8b88986b8179\n0xf57c2ef31d2761c\n0x5a99ae2e86d1782887e63d4b\n0x34aa7d496b8e474ba9770a0e\n0x21537d4c2479f6a0\n0xca5fef55b6de87b5e8eb0fee\n0xcee5a00a98dbdbb49ecc3955\n0x1e22fa4c8edc5df\n0xb55dd846781a7e19af351a0b\n0xe6624bdb472de48bda1406d0\n0x27230a4de5b969ba\n0x41740ab31291029701a9215\n0x4b82d9fa0e25a8270245aa47\n0x24359146dfa1f6e3\n0x94dbfbbaff45aa1f0ab8414c\n0xa3a709a18403a75b4ea7339f\n0x29ae188f08e779fe\n0x2feda44df256b02ef7968f6c\n0x7a8e74e69fad511f17e3c58f\n0x2b36a7afb731e1a3\n0x2d43135506c80e23c536e635\n0xf53a5ddc9b530268db772873\n0x175da59b8c74ee49\n0xcd080ec45f1a01c0d7af213d\n0x2a99e09a4cbae208c81820dc\n0x2ff57621f6857e40\n0x3140634ef710fda3dcd978b0\n0x4019bf822e35a9ac83924211\n0x1be72548b2234a25\n0x632c3fc8e5b1bf93eac847fb\n0xc8a4b238936a9fa2afb91f61\n0x12b1295ff21ce6c8\n0x6f5c275dbacee027509e260a\n0xce4c894d755ad14e2cc76eba\n0xfcc56971f15f865\n0xf17d95baa0347bf0c3204302\n0x144e4c384441aae88bfb1104\n0x282f8d51fd9eba1\n0x7c46dcb38b3e9c480832fdc8\n0xf267770b5724251359aaf110\n0x443e9b3b80c3e1f\n0x8ac0b8d6517c07e08a3baad0\n0x5e1b1b6a7196c91e43761241\n0x1f57e2c9b9ccec70\n0x644e50905011c7e3acdb2285\n0xf84e3e526a8c09866f0ceda5\n0x25fdaa1048387592\n0x168c3998e34197f5a488d37\n0x786da9cc0e7ead0bc67b31f4\n0x177996820848141e\n0x6efdc4f8be601ff4ab8d129b\n0x9a96bd7baaff1c6cc6d9c682\n0x29cd73933fdc801c\n0x1a5ee29f5e7a16a9bab672e9\n0x80e2486948d6e08adf67ff34\n0x4890be2648682e8\n0x9236c58ef1aef04837a1ea36\n0xfe552d4c2a39a0a16560da5e\n0x1841d163a08be27b\n0xef6bba42dc71a1b9c2ac27b9\n0x9cb15b4cebe773cc10f24866\n0x77a8ac685bff5ce\n0xaf702519aeb8ddbddc573870\n0x55bce29ca522a73ff646a261\n0x2a3f3a42a086bb6f\n0xf50afc4992fa918308722966\n0xa96b59e2921eb1f9c7fa876a\n0x2f24d7697cd17e5e\n0xaffc7d1a19777d2a21217e59\n0x3ef2472228637796bd7d8dc7\n0x1a0506a66e5383ab\n0xca12516435db6cc043cc5388\n0xa0d79d5f166424bf2ab46600\n0x8d2403f722d8bea\n0x33b48bf0248bba737a417d8\n0xe98647c5115bc78253f93a3f\n0x1c2059c254b2737\n0x6a25629cf64fc9497c718e32\n0x6f7bd19b25b5a768a3ed4e8b\n0x4a87988b0d82d52\n0xf1fc92c0e56ad1f91320fa7e\n0x1999cc965d0094c7027be615\n0x1cd84666fd0f83c0\n0xd4b961008165306aae6fe868\n0x98af327c81bf4a59db0d96cd\n0x1421181344804db5\n0xfff80cb30ad8f380024a1c5a\n0xe4a50df2e0698bad1e848305\n0x2810438cf7864a0d\n0x70487745dd80b4d6cbaad460\n0xefd9c5502b7bbc55a00782b2\n0x1451fc7656a8aa5\n0x4d35afb3dfa95ee0dfdd475a\n0x35aff02f24830e619d5416b2\n0x2b87d2e83b36f96a\n0x468d7a69f3249cb7e7d52d2c\n0xe34c13a36858b0f65cf7664a\n0x2ca2c3fbab8b1890\n0x2f05275ffaa08fad5adc0198\n0x974076ddc1552fc01f7bd2c2\n0x1a86f1117f5aad2f\n0x616b28a3c95d022021d43b64\n0x2dc63d7222ec86db834a9aad\n0x204b2abf661e07c2\n0x7b95b6f69c65933988bb3eb8\n0xba6911fe00e6eca402ae123d\n0xbef3d33aabdba2e\n0xe7b91f9a8e2c39f67094d1b1\n0xed354b237c54e089edf5c763\n0x1b65ef29c04e00e0\n0xa97715799c334df042bb7939\n0x32299f375b88641f3991288\n0x169aa6bc89a216a4\n0xa4879f27a3357ef39e07aad6\n0x7923a64805ae1f8a4bacd8a0\n0x29850915d1199ac6\n0x689e32ca7ac49268e3292d78\n0x80713ceda80109a1322cb243\n0x1f6abffa359bcadf\n0x38f536d0eff09ca9d87388a1\n0xc5ee4a612a9bdf0becc51e5\n0x16e9ce6e719c60a3\n0xd47039b988dc370908ac5ae8\n0x82a2d9697eeb61aff71ce5f8\n0x18726df5f7f6487d\n0xc86ec2ff4dbd855e0e133d3d\n0x6582de6140df1767ca443ed4\n0x1694070dd8187efe\n0xb5d86616ee808b2c97d3e440\n0x836c3fd574e170fdfcd59b6b\n0xb564a14cab3d9ed\n0x85fcb271a159be6ac275bf95\n0xfabf61fa24b2c96fa6c9fbd6\n0x1f82032d5139c4ff\n0x78741e66f99308935272ad62\n0x49204f7404f49cc0e6b9637e\n0x11702dff0a25ab81\n0x8fd42c24cfed8dd6769cf122\n0xf46c44da5639e99294e6d041\n0x276955dbb4bb4c7b\n0x66772c75d7292f9b77f2c58f\n0xff1e8156263bbd5b9ea146aa\n0x8b388e703c50c87\n0xa329ee06af3d4a3a7ac11640\n0xcabf082d5dba56b24824eca4\n0x2538fd2d9cf80ac0\n0x1bf256a849078dc2b86e56b2\n0xbc4f8d815b2773fd5c22a39\n0x43b5f5a003fe46e\n0xa9265deff4ab2f6202598b6d\n0x7b8b865760be4a5dfba6302b\n0x7fab709f10cfaf1\n0x72a989405ea3494ed54b2564\n0xcdc0041b4722845a98eb4157\n0x12b1012f185a1925\n0x89bbf3a40752d50534b51dd6\n0xfe4518b527738171857802db\n0x283cbf53bd30c1d7\n0xe6e823b4ccec2b1c5cb6691\n0xedc84a97c0612a88f1a22253\n0xbee7aab3a1fbc76\n0x1c087394d1a8efa53168abb874142e7c41239f8c3f4bbf49c89401054a5c15\n0xc\n0xee91d9c9a198518c670304d5\n0xc1507dc82df312cf0b6825a4\n0x1992d4e9d7792801\n0x0\n0x6675ab5a7ce9519d7f1790ca\n0x617194577bc67dbe2efb7734\n0x241115e9ee74e976\n0x0\n0x10000000000000000357f6ed9cfc20b18\n0x269ff2576b528ed8\n0x10000000000000000aa363b63e08441ab\n0x100000000000000002b84e0957fd23880\n"
  },
  {
    "path": "src/contracts/autogenerated/groth16_example_bn254/tests/test_contract.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\n//! # Starknet Verification Contract Tests\n//!\n//! This module contains comprehensive tests for the proof verification contract.\n//! The tests use Starknet Foundry's testing features to verify proofs.\n//!\n//! ## Test Strategy\n//! - Use real proof fixtures generated by the garaga CLI\n//! - Test both positive (valid proof) and negative (invalid proof) cases\n\nuse groth16_example_bn254::groth16_verifier::{\n    IGroth16VerifierBN254DispatcherTrait, IGroth16VerifierBN254LibraryDispatcher,\n};\nuse snforge_std::fs::{FileTrait, read_txt};\nuse snforge_std::{DeclareResultTrait, declare};\nuse starknet::ClassHash;\n\n/// Declare the Groth16VerifierBN254 contract for testing.\n///\n/// This function declares a new instance of the Groth16VerifierBN254 contract\n///\n/// # Arguments\n/// * `name` - The contract name to declare\n///\n/// # Returns\n/// * `ClassHash` - The class hash of the declared contract\n///\n/// # Example\n/// ```cairo\n/// let class_hash = declare_contract(\"Groth16VerifierBN254\");\n/// let dispatcher = IGroth16VerifierBN254LibraryDispatcher { class_hash };\n/// ```\nfn declare_contract(name: ByteArray) -> ClassHash {\n    let class_hash = *declare(name).unwrap().contract_class().class_hash;\n    class_hash\n}\n\n/// Test the verification function verify_groth16_proof_bn254 with a valid proof.\n///\n/// This test demonstrates the complete verification flow:\n/// 1. Declare the verification contract\n/// 2. Load a pre-generated proof fixture\n/// 3. Verify the proof on-chain\n/// 4. Assert that verification succeeds\n///\n/// ## Test Setup\n/// - Uses fork testing against Sepolia testnet to access required declared contracts maintained by\n/// the garaga team - Loads proof calldata from `tests/proof_calldata.txt`\n/// - To generate the calldata, you can use the garaga CLI:\n/// ```bash\n/// garaga calldata\n///     --system groth16\n///     --vk path/to/vk\n///     --proof path/to/proof\n///     --public-inputs path/to/public_inputs\n///     --format snforge\n///     --output-path path/to/tests\n/// ```\n/// This will generate a file `proof_calldata.txt` in the specified output path.\n/// You can then use this file in the test.\n///\n/// ## Expected Behavior\n/// - The proof should verify successfully\n/// - The function should return Ok(public_inputs) containing the expected public inputs\n/// - No panics or assertion failures should occur\n#[test]\n#[fork(url: \"https://api.zan.top/public/starknet-sepolia/rpc/v0_10\", block_tag: latest)]\nfn test_verify_groth16_proof_bn254() {\n    // Step 1: Declare the verification contract\n    let class_hash = declare_contract(\"Groth16VerifierBN254\");\n    let dispatcher = IGroth16VerifierBN254LibraryDispatcher { class_hash };\n\n    // Step 2: Load the proof fixture generated by the script\n    // This file contains the groth16 proof calldata formatted for Starknet\n    let file = FileTrait::new(\"tests/proof_calldata.txt\");\n    let calldata = read_txt(@file).span();\n\n    // Step 3: Verify the proof on-chain\n    // This calls the contract's verify_groth16_proof_bn254 function with the loaded proof data\n    let result = dispatcher.verify_groth16_proof_bn254(calldata);\n\n    // Step 4: Assert that verification succeeded\n    // A valid proof should return Ok(public_inputs), not Err\n    assert(result.is_ok(), 'Proof verification failed');\n    // Optional: You can also verify the public inputs contain expected values\n// let public_inputs = result.unwrap();\n// assert(public_inputs.len() > 0, 'No public inputs');\n// Additional assertions on the public input values can be added here\n}\n"
  },
  {
    "path": "src/contracts/autogenerated/noir_ultra_keccak_zk_honk_example/.tool-versions",
    "content": "scarb 2.16.1\nstarknet-foundry 0.57.0\n"
  },
  {
    "path": "src/contracts/autogenerated/noir_ultra_keccak_zk_honk_example/Scarb.toml",
    "content": "# Generated by Garaga version 1.1.0\n[package]\nname = \"noir_ultra_keccak_zk_honk_example\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n[dependencies]\ngaraga = { path = \"../../../\" }\nstarknet = \"2.16.1\"\n\n[cairo]\nsierra-replace-ids = false\ninlining-strategy = 2\n\n[dev-dependencies]\nsnforge_std = \"0.57.0\"\nassert_macros = \"2.16.1\"\n\n[[target.starknet-contract]]\ncasm = true\ncasm-add-pythonic-hints = true\n"
  },
  {
    "path": "src/contracts/autogenerated/noir_ultra_keccak_zk_honk_example/src/honk_verifier.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\nuse super::honk_verifier_circuits::{\n    is_on_curve_excluding_infinity_bn254, run_GRUMPKIN_ZKHONK_PREP_MSM_SCALARS_SIZE_12_circuit,\n    run_GRUMPKIN_ZK_HONK_EVALS_CONS_DONE_SIZE_12_circuit,\n    run_GRUMPKIN_ZK_HONK_EVALS_CONS_INIT_SIZE_12_circuit,\n    run_GRUMPKIN_ZK_HONK_EVALS_CONS_LOOP_SIZE_12_circuit,\n    run_GRUMPKIN_ZK_HONK_SUMCHECK_SIZE_12_PUB_17_circuit,\n};\nuse super::honk_verifier_constants::{precomputed_lines, vk};\n\n#[starknet::interface]\npub trait IUltraKeccakZKHonkVerifier<TContractState> {\n    fn verify_ultra_keccak_zk_honk_proof(\n        self: @TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u256>, felt252>;\n}\n\n#[starknet::contract]\nmod UltraKeccakZKHonkVerifier {\n    use core::num::traits::Zero;\n    use garaga::apps::noir::zk_honk_transcript::{\n        KeccakHasherState, Point256IntoCircuitPoint, ZKHonkTranscriptTrait,\n        ZK_BATCHED_RELATION_PARTIAL_LENGTH,\n    };\n    use garaga::apps::noir::{G2_POINT_KZG_1, G2_POINT_KZG_2, ZKHonkProof};\n    use garaga::core::circuit::{U32IntoU384, U64IntoU384, u256_to_u384, u288IntoCircuitInputValue};\n    use garaga::definitions::{\n        BN254, G1G2Pair, G1Point, get_BN254_modulus, get_GRUMPKIN_modulus, get_eigenvalue,\n        get_min_one_order, get_nG_glv_fake_glv, get_third_root_of_unity, u384,\n    };\n    use garaga::ec_ops::{G1PointTrait, GlvFakeGlvHint, _ec_safe_add, _scalar_mul_glv_and_fake_glv};\n    use garaga::pairing_check::{MPCheckHintBN254, multi_pairing_check_bn254_2P_2F};\n    use super::{\n        is_on_curve_excluding_infinity_bn254, precomputed_lines,\n        run_GRUMPKIN_ZKHONK_PREP_MSM_SCALARS_SIZE_12_circuit,\n        run_GRUMPKIN_ZK_HONK_EVALS_CONS_DONE_SIZE_12_circuit,\n        run_GRUMPKIN_ZK_HONK_EVALS_CONS_INIT_SIZE_12_circuit,\n        run_GRUMPKIN_ZK_HONK_EVALS_CONS_LOOP_SIZE_12_circuit,\n        run_GRUMPKIN_ZK_HONK_SUMCHECK_SIZE_12_PUB_17_circuit, vk,\n    };\n\n    #[storage]\n    struct Storage {}\n\n    #[derive(Drop, Serde)]\n    struct FullProof {\n        proof: ZKHonkProof,\n        msm_hint: Span<felt252>,\n        kzg_hint: MPCheckHintBN254,\n    }\n\n    #[abi(embed_v0)]\n    impl IUltraKeccakZKHonkVerifier of super::IUltraKeccakZKHonkVerifier<ContractState> {\n        fn verify_ultra_keccak_zk_honk_proof(\n            self: @ContractState, full_proof_with_hints: Span<felt252>,\n        ) -> Result<Span<u256>, felt252> {\n            // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n            // This function returns Result::Ok(public_inputs) if the proof is valid.\n            // If the proof is invalid, it returns Result::Err(error).\n            // Read the documentation to learn how to generate the full_proof_with_hints array given\n            // a proof and a verifying key.\n            let mut full_proof_with_hints = full_proof_with_hints;\n            let full_proof = Serde::<FullProof>::deserialize(ref full_proof_with_hints)\n                .expect('deserialization failed');\n            let mod_bn = get_BN254_modulus();\n            let mod_grumpkin = get_GRUMPKIN_modulus();\n\n            let (transcript, _, base_rlc) = ZKHonkTranscriptTrait::from_proof::<\n                KeccakHasherState,\n            >(full_proof.proof, vk.vk_hash, vk.log_circuit_size);\n            let log_n = vk.log_circuit_size;\n            let (sum_check_rlc, honk_check) = run_GRUMPKIN_ZK_HONK_SUMCHECK_SIZE_12_PUB_17_circuit(\n                p_public_inputs: full_proof.proof.public_inputs,\n                p_pairing_point_object: full_proof.proof.pairing_point_object,\n                libra_sum: u256_to_u384(full_proof.proof.libra_sum),\n                sumcheck_univariates_flat: full_proof\n                    .proof\n                    .sumcheck_univariates\n                    .slice(0, log_n * ZK_BATCHED_RELATION_PARTIAL_LENGTH),\n                sumcheck_evaluations: full_proof.proof.sumcheck_evaluations,\n                libra_evaluation: u256_to_u384(full_proof.proof.libra_evaluation),\n                tp_sum_check_u_challenges: transcript.sum_check_u_challenges.span(),\n                tp_gate_challenge: transcript.gate_challenge,\n                tp_eta_1: transcript.eta.into(),\n                tp_eta_2: transcript.eta_two.into(),\n                tp_eta_3: transcript.eta_three.into(),\n                tp_beta: transcript.beta.into(),\n                tp_gamma: transcript.gamma.into(),\n                tp_base_rlc: base_rlc.into(),\n                tp_alpha: transcript.alpha,\n                tp_libra_challenge: transcript.libra_challenge.into(),\n                modulus: mod_grumpkin,\n            );\n\n            let (mut challenge_poly_eval, mut root_power_times_tp_gemini_r) =\n                run_GRUMPKIN_ZK_HONK_EVALS_CONS_INIT_SIZE_12_circuit(\n                tp_gemini_r: transcript.gemini_r.into(), modulus: mod_grumpkin,\n            );\n            for i in 0..vk.log_circuit_size {\n                let (new_challenge_poly_eval, new_root_power_times_tp_gemini_r) =\n                    run_GRUMPKIN_ZK_HONK_EVALS_CONS_LOOP_SIZE_12_circuit(\n                    challenge_poly_eval: challenge_poly_eval,\n                    root_power_times_tp_gemini_r: root_power_times_tp_gemini_r,\n                    tp_sumcheck_u_challenge: (*transcript.sum_check_u_challenges.at(i)).into(),\n                    modulus: mod_grumpkin,\n                );\n                challenge_poly_eval = new_challenge_poly_eval;\n                root_power_times_tp_gemini_r = new_root_power_times_tp_gemini_r;\n            }\n            let (vanishing_check, diff_check) =\n                run_GRUMPKIN_ZK_HONK_EVALS_CONS_DONE_SIZE_12_circuit(\n                p_libra_evaluation: u256_to_u384(full_proof.proof.libra_evaluation),\n                p_libra_poly_evals: full_proof.proof.libra_poly_evals,\n                tp_gemini_r: transcript.gemini_r.into(),\n                challenge_poly_eval: challenge_poly_eval,\n                root_power_times_tp_gemini_r: root_power_times_tp_gemini_r,\n                modulus: mod_grumpkin,\n            );\n\n            let (\n                scalar_1,\n                scalar_2,\n                scalar_3,\n                scalar_4,\n                scalar_5,\n                scalar_6,\n                scalar_7,\n                scalar_8,\n                scalar_9,\n                scalar_10,\n                scalar_11,\n                scalar_12,\n                scalar_13,\n                scalar_14,\n                scalar_15,\n                scalar_16,\n                scalar_17,\n                scalar_18,\n                scalar_19,\n                scalar_20,\n                scalar_21,\n                scalar_22,\n                scalar_23,\n                scalar_24,\n                scalar_25,\n                scalar_26,\n                scalar_27,\n                scalar_28,\n                scalar_29,\n                scalar_30,\n                scalar_31,\n                scalar_32,\n                scalar_33,\n                scalar_34,\n                scalar_35,\n                scalar_36,\n                scalar_37,\n                scalar_38,\n                scalar_39,\n                scalar_40,\n                scalar_41,\n                scalar_42,\n                scalar_43,\n                scalar_44,\n                scalar_45,\n                scalar_46,\n                scalar_47,\n                scalar_48,\n                scalar_49,\n                scalar_50,\n                scalar_51,\n                scalar_52,\n            ) =\n                run_GRUMPKIN_ZKHONK_PREP_MSM_SCALARS_SIZE_12_circuit(\n                p_sumcheck_evaluations: full_proof.proof.sumcheck_evaluations,\n                p_gemini_masking_eval: u256_to_u384(full_proof.proof.gemini_masking_eval),\n                p_gemini_a_evaluations: full_proof.proof.gemini_a_evaluations,\n                p_libra_poly_evals: full_proof.proof.libra_poly_evals,\n                tp_gemini_r: transcript.gemini_r.into(),\n                tp_rho: transcript.rho.into(),\n                tp_shplonk_z: transcript.shplonk_z.into(),\n                tp_shplonk_nu: transcript.shplonk_nu.into(),\n                tp_sum_check_u_challenges: transcript.sum_check_u_challenges.span().slice(0, log_n),\n                modulus: mod_grumpkin,\n            );\n\n            // Starts with 1 * shplonk_q, not included in msm\n            let mut _points: Array<G1Point> = array![\n                vk.qm, vk.qc, vk.ql, vk.qr, vk.qo, vk.q4, vk.qLookup, vk.qArith, vk.qDeltaRange,\n                vk.qElliptic, vk.qMemory, vk.qNnf, vk.qPoseidon2External, vk.qPoseidon2Internal,\n                vk.s1, vk.s2, vk.s3, vk.s4, vk.id1, vk.id2, vk.id3, vk.id4, vk.t1, vk.t2, vk.t3,\n                vk.t4, vk.lagrange_first, vk.lagrange_last,\n                full_proof.proof.gemini_masking_poly.into(), // Proof point 1,\n                full_proof.proof.w1.into(), // Proof point 2,\n                full_proof.proof.w2.into(), // Proof point 3,\n                full_proof.proof.w3.into(), // Proof point 4,\n                full_proof.proof.w4.into(), // Proof point 5,\n                full_proof.proof.z_perm.into(), // Proof point 6,\n                full_proof.proof.lookup_inverses.into(), // Proof point 7,\n                full_proof.proof.lookup_read_counts.into(), // Proof point 8,\n                full_proof.proof.lookup_read_tags.into() // Proof point 9\n            ];\n\n            for gem_comm in full_proof.proof.gemini_fold_comms {\n                _points.append((*gem_comm).into());\n            } // log_n -1 = 11 points || Proof points 10-20\n            for lib_comm in full_proof.proof.libra_commitments {\n                _points.append((*lib_comm).into());\n            } // 3 points || Proof points 21-23\n            _points.append(full_proof.proof.kzg_quotient.into()); // Proof point 24\n            _points.append(BN254.G);\n\n            let mut points = _points.span();\n            let mut scalars: Span<u384> = array![\n                scalar_2, scalar_3, scalar_4, scalar_5, scalar_6, scalar_7, scalar_8, scalar_9,\n                scalar_10, scalar_11, scalar_12, scalar_13, scalar_14, scalar_15, scalar_16,\n                scalar_17, scalar_18, scalar_19, scalar_20, scalar_21, scalar_22, scalar_23,\n                scalar_24, scalar_25, scalar_26, scalar_27, scalar_28, scalar_29, scalar_1,\n                scalar_30, scalar_31, scalar_32, scalar_33, scalar_34, scalar_35, scalar_36,\n                scalar_37, scalar_38, scalar_39, scalar_40, scalar_41, scalar_42, scalar_43,\n                scalar_44, scalar_45, scalar_46, scalar_47, scalar_48, scalar_49, scalar_50,\n                scalar_51, transcript.shplonk_z.into(), scalar_52,\n            ]\n                .span();\n\n            // Check input points are on curve.\n            // Skip the first 28 points as they are from VK and keep the last 24 proof points\n            for point in points.slice(28, 24) {\n                assert(\n                    is_on_curve_excluding_infinity_bn254(*point, mod_bn),\n                    'proof point not on curve',\n                );\n            }\n\n            // Assert shplonk_q is on curve\n            let shplonk_q_pt: G1Point = full_proof.proof.shplonk_q.into();\n            assert(\n                is_on_curve_excluding_infinity_bn254(shplonk_q_pt, mod_bn),\n                'shplonk_q not on curve',\n            );\n\n            let mut msm_hint = full_proof.msm_hint;\n            assert(msm_hint.len() == 53 * 12, 'wrong glv&fakeglv hint size');\n            let eigen = get_eigenvalue(0);\n            let third_root_of_unity = get_third_root_of_unity(0);\n            let min_one = get_min_one_order(0);\n            let nG = get_nG_glv_fake_glv(0);\n\n            let mut P_1 = shplonk_q_pt;\n            while msm_hint.len() != 0 {\n                let pt = *points.pop_front().unwrap();\n                let scalar = *scalars.pop_front().unwrap();\n                // Note : Scalars are below curve order by construction (circuit outputs mod n and\n                // transcript output (u128))\n                let glv_fake_glv_hint: GlvFakeGlvHint = Serde::deserialize(ref msm_hint).unwrap();\n                let temp = _scalar_mul_glv_and_fake_glv(\n                    pt,\n                    scalar,\n                    mod_grumpkin,\n                    mod_bn,\n                    glv_fake_glv_hint,\n                    eigen,\n                    third_root_of_unity,\n                    min_one,\n                    nG,\n                    0,\n                );\n                P_1 = _ec_safe_add(P_1, temp, mod_bn, 0);\n            }\n\n            let P_2: G1Point = full_proof.proof.kzg_quotient.into();\n\n            // Perform the KZG pairing check.\n            let kzg_check = multi_pairing_check_bn254_2P_2F(\n                G1G2Pair { p: P_1, q: G2_POINT_KZG_1 },\n                G1G2Pair { p: P_2.negate(0), q: G2_POINT_KZG_2 },\n                precomputed_lines.span(),\n                full_proof.kzg_hint,\n            );\n\n            if sum_check_rlc.is_zero()\n                && honk_check.is_zero()\n                && !vanishing_check.is_zero()\n                && diff_check.is_zero()\n                && kzg_check.is_ok() {\n                return Result::Ok(full_proof.proof.public_inputs);\n            } else {\n                return Result::Err('Proof verification failed');\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/contracts/autogenerated/noir_ultra_keccak_zk_honk_example/src/honk_verifier_circuits.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\nuse core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitModulus, CircuitOutputsTrait,\n    EvalCircuitTrait, circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::G1Point;\n\n#[inline(always)]\npub fn run_GRUMPKIN_ZK_HONK_SUMCHECK_SIZE_12_PUB_17_circuit(\n    p_public_inputs: Span<u256>,\n    p_pairing_point_object: Span<u256>,\n    libra_sum: u384,\n    sumcheck_univariates_flat: Span<u256>,\n    sumcheck_evaluations: Span<u256>,\n    libra_evaluation: u384,\n    tp_sum_check_u_challenges: Span<u128>,\n    tp_gate_challenge: u128,\n    tp_eta_1: u384,\n    tp_eta_2: u384,\n    tp_eta_3: u384,\n    tp_beta: u384,\n    tp_gamma: u384,\n    tp_base_rlc: u384,\n    tp_alpha: u128,\n    tp_libra_challenge: u384,\n    modulus: core::circuit::CircuitModulus,\n) -> (u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x1\n    let in1 = CE::<CI<1>> {}; // 0x10000000\n    let in2 = CE::<CI<2>> {}; // 0x9d80\n    let in3 = CE::<CI<3>> {}; // 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec51\n    let in4 = CE::<CI<4>> {}; // 0x5a0\n    let in5 = CE::<CI<5>> {}; // 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31\n    let in6 = CE::<CI<6>> {}; // 0x240\n    let in7 = CE::<CI<7>> {}; // 0x0\n    let in8 = CE::<CI<8>> {}; // 0x2\n    let in9 = CE::<CI<9>> {}; // 0x3\n    let in10 = CE::<CI<10>> {}; // 0x4\n    let in11 = CE::<CI<11>> {}; // 0x5\n    let in12 = CE::<CI<12>> {}; // 0x6\n    let in13 = CE::<CI<13>> {}; // 0x7\n    let in14 = CE::<CI<14>> {}; // 0x8\n    let in15 = CE::<\n        CI<15>,\n    > {}; // 0x183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f8000000\n    let in16 = CE::<CI<16>> {}; // -0x1 % p\n    let in17 = CE::<CI<17>> {}; // 0x11\n    let in18 = CE::<CI<18>> {}; // 0x9\n    let in19 = CE::<CI<19>> {}; // 0x100000000000000000\n    let in20 = CE::<CI<20>> {}; // 0x4000\n    let in21 = CE::<\n        CI<21>,\n    > {}; // 0x10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e7\n    let in22 = CE::<CI<22>> {}; // 0xc28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b\n    let in23 = CE::<CI<23>> {}; // 0x544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac15\n    let in24 = CE::<\n        CI<24>,\n    > {}; // 0x222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b\n\n    // INPUT stack\n    let (in25, in26, in27) = (CE::<CI<25>> {}, CE::<CI<26>> {}, CE::<CI<27>> {});\n    let (in28, in29, in30) = (CE::<CI<28>> {}, CE::<CI<29>> {}, CE::<CI<30>> {});\n    let (in31, in32, in33) = (CE::<CI<31>> {}, CE::<CI<32>> {}, CE::<CI<33>> {});\n    let (in34, in35, in36) = (CE::<CI<34>> {}, CE::<CI<35>> {}, CE::<CI<36>> {});\n    let (in37, in38, in39) = (CE::<CI<37>> {}, CE::<CI<38>> {}, CE::<CI<39>> {});\n    let (in40, in41, in42) = (CE::<CI<40>> {}, CE::<CI<41>> {}, CE::<CI<42>> {});\n    let (in43, in44, in45) = (CE::<CI<43>> {}, CE::<CI<44>> {}, CE::<CI<45>> {});\n    let (in46, in47, in48) = (CE::<CI<46>> {}, CE::<CI<47>> {}, CE::<CI<48>> {});\n    let (in49, in50, in51) = (CE::<CI<49>> {}, CE::<CI<50>> {}, CE::<CI<51>> {});\n    let (in52, in53, in54) = (CE::<CI<52>> {}, CE::<CI<53>> {}, CE::<CI<54>> {});\n    let (in55, in56, in57) = (CE::<CI<55>> {}, CE::<CI<56>> {}, CE::<CI<57>> {});\n    let (in58, in59, in60) = (CE::<CI<58>> {}, CE::<CI<59>> {}, CE::<CI<60>> {});\n    let (in61, in62, in63) = (CE::<CI<61>> {}, CE::<CI<62>> {}, CE::<CI<63>> {});\n    let (in64, in65, in66) = (CE::<CI<64>> {}, CE::<CI<65>> {}, CE::<CI<66>> {});\n    let (in67, in68, in69) = (CE::<CI<67>> {}, CE::<CI<68>> {}, CE::<CI<69>> {});\n    let (in70, in71, in72) = (CE::<CI<70>> {}, CE::<CI<71>> {}, CE::<CI<72>> {});\n    let (in73, in74, in75) = (CE::<CI<73>> {}, CE::<CI<74>> {}, CE::<CI<75>> {});\n    let (in76, in77, in78) = (CE::<CI<76>> {}, CE::<CI<77>> {}, CE::<CI<78>> {});\n    let (in79, in80, in81) = (CE::<CI<79>> {}, CE::<CI<80>> {}, CE::<CI<81>> {});\n    let (in82, in83, in84) = (CE::<CI<82>> {}, CE::<CI<83>> {}, CE::<CI<84>> {});\n    let (in85, in86, in87) = (CE::<CI<85>> {}, CE::<CI<86>> {}, CE::<CI<87>> {});\n    let (in88, in89, in90) = (CE::<CI<88>> {}, CE::<CI<89>> {}, CE::<CI<90>> {});\n    let (in91, in92, in93) = (CE::<CI<91>> {}, CE::<CI<92>> {}, CE::<CI<93>> {});\n    let (in94, in95, in96) = (CE::<CI<94>> {}, CE::<CI<95>> {}, CE::<CI<96>> {});\n    let (in97, in98, in99) = (CE::<CI<97>> {}, CE::<CI<98>> {}, CE::<CI<99>> {});\n    let (in100, in101, in102) = (CE::<CI<100>> {}, CE::<CI<101>> {}, CE::<CI<102>> {});\n    let (in103, in104, in105) = (CE::<CI<103>> {}, CE::<CI<104>> {}, CE::<CI<105>> {});\n    let (in106, in107, in108) = (CE::<CI<106>> {}, CE::<CI<107>> {}, CE::<CI<108>> {});\n    let (in109, in110, in111) = (CE::<CI<109>> {}, CE::<CI<110>> {}, CE::<CI<111>> {});\n    let (in112, in113, in114) = (CE::<CI<112>> {}, CE::<CI<113>> {}, CE::<CI<114>> {});\n    let (in115, in116, in117) = (CE::<CI<115>> {}, CE::<CI<116>> {}, CE::<CI<117>> {});\n    let (in118, in119, in120) = (CE::<CI<118>> {}, CE::<CI<119>> {}, CE::<CI<120>> {});\n    let (in121, in122, in123) = (CE::<CI<121>> {}, CE::<CI<122>> {}, CE::<CI<123>> {});\n    let (in124, in125, in126) = (CE::<CI<124>> {}, CE::<CI<125>> {}, CE::<CI<126>> {});\n    let (in127, in128, in129) = (CE::<CI<127>> {}, CE::<CI<128>> {}, CE::<CI<129>> {});\n    let (in130, in131, in132) = (CE::<CI<130>> {}, CE::<CI<131>> {}, CE::<CI<132>> {});\n    let (in133, in134, in135) = (CE::<CI<133>> {}, CE::<CI<134>> {}, CE::<CI<135>> {});\n    let (in136, in137, in138) = (CE::<CI<136>> {}, CE::<CI<137>> {}, CE::<CI<138>> {});\n    let (in139, in140, in141) = (CE::<CI<139>> {}, CE::<CI<140>> {}, CE::<CI<141>> {});\n    let (in142, in143, in144) = (CE::<CI<142>> {}, CE::<CI<143>> {}, CE::<CI<144>> {});\n    let (in145, in146, in147) = (CE::<CI<145>> {}, CE::<CI<146>> {}, CE::<CI<147>> {});\n    let (in148, in149, in150) = (CE::<CI<148>> {}, CE::<CI<149>> {}, CE::<CI<150>> {});\n    let (in151, in152, in153) = (CE::<CI<151>> {}, CE::<CI<152>> {}, CE::<CI<153>> {});\n    let (in154, in155, in156) = (CE::<CI<154>> {}, CE::<CI<155>> {}, CE::<CI<156>> {});\n    let (in157, in158, in159) = (CE::<CI<157>> {}, CE::<CI<158>> {}, CE::<CI<159>> {});\n    let (in160, in161, in162) = (CE::<CI<160>> {}, CE::<CI<161>> {}, CE::<CI<162>> {});\n    let (in163, in164, in165) = (CE::<CI<163>> {}, CE::<CI<164>> {}, CE::<CI<165>> {});\n    let (in166, in167, in168) = (CE::<CI<166>> {}, CE::<CI<167>> {}, CE::<CI<168>> {});\n    let (in169, in170, in171) = (CE::<CI<169>> {}, CE::<CI<170>> {}, CE::<CI<171>> {});\n    let (in172, in173, in174) = (CE::<CI<172>> {}, CE::<CI<173>> {}, CE::<CI<174>> {});\n    let (in175, in176, in177) = (CE::<CI<175>> {}, CE::<CI<176>> {}, CE::<CI<177>> {});\n    let (in178, in179, in180) = (CE::<CI<178>> {}, CE::<CI<179>> {}, CE::<CI<180>> {});\n    let (in181, in182, in183) = (CE::<CI<181>> {}, CE::<CI<182>> {}, CE::<CI<183>> {});\n    let (in184, in185, in186) = (CE::<CI<184>> {}, CE::<CI<185>> {}, CE::<CI<186>> {});\n    let (in187, in188, in189) = (CE::<CI<187>> {}, CE::<CI<188>> {}, CE::<CI<189>> {});\n    let (in190, in191, in192) = (CE::<CI<190>> {}, CE::<CI<191>> {}, CE::<CI<192>> {});\n    let (in193, in194, in195) = (CE::<CI<193>> {}, CE::<CI<194>> {}, CE::<CI<195>> {});\n    let (in196, in197, in198) = (CE::<CI<196>> {}, CE::<CI<197>> {}, CE::<CI<198>> {});\n    let (in199, in200, in201) = (CE::<CI<199>> {}, CE::<CI<200>> {}, CE::<CI<201>> {});\n    let (in202, in203, in204) = (CE::<CI<202>> {}, CE::<CI<203>> {}, CE::<CI<204>> {});\n    let (in205, in206, in207) = (CE::<CI<205>> {}, CE::<CI<206>> {}, CE::<CI<207>> {});\n    let (in208, in209, in210) = (CE::<CI<208>> {}, CE::<CI<209>> {}, CE::<CI<210>> {});\n    let (in211, in212, in213) = (CE::<CI<211>> {}, CE::<CI<212>> {}, CE::<CI<213>> {});\n    let t0 = circuit_add(in1, in0);\n    let t1 = circuit_mul(in209, t0);\n    let t2 = circuit_add(in210, t1);\n    let t3 = circuit_add(in0, in0);\n    let t4 = circuit_mul(in209, t3);\n    let t5 = circuit_sub(in210, t4);\n    let t6 = circuit_add(t2, in25);\n    let t7 = circuit_mul(in0, t6);\n    let t8 = circuit_add(t5, in25);\n    let t9 = circuit_mul(in0, t8);\n    let t10 = circuit_add(t2, in209);\n    let t11 = circuit_sub(t5, in209);\n    let t12 = circuit_add(t10, in26);\n    let t13 = circuit_mul(t7, t12);\n    let t14 = circuit_add(t11, in26);\n    let t15 = circuit_mul(t9, t14);\n    let t16 = circuit_add(t10, in209);\n    let t17 = circuit_sub(t11, in209);\n    let t18 = circuit_add(t16, in27);\n    let t19 = circuit_mul(t13, t18);\n    let t20 = circuit_add(t17, in27);\n    let t21 = circuit_mul(t15, t20);\n    let t22 = circuit_add(t16, in209);\n    let t23 = circuit_sub(t17, in209);\n    let t24 = circuit_add(t22, in28);\n    let t25 = circuit_mul(t19, t24);\n    let t26 = circuit_add(t23, in28);\n    let t27 = circuit_mul(t21, t26);\n    let t28 = circuit_add(t22, in209);\n    let t29 = circuit_sub(t23, in209);\n    let t30 = circuit_add(t28, in29);\n    let t31 = circuit_mul(t25, t30);\n    let t32 = circuit_add(t29, in29);\n    let t33 = circuit_mul(t27, t32);\n    let t34 = circuit_add(t28, in209);\n    let t35 = circuit_sub(t29, in209);\n    let t36 = circuit_add(t34, in30);\n    let t37 = circuit_mul(t31, t36);\n    let t38 = circuit_add(t35, in30);\n    let t39 = circuit_mul(t33, t38);\n    let t40 = circuit_add(t34, in209);\n    let t41 = circuit_sub(t35, in209);\n    let t42 = circuit_add(t40, in31);\n    let t43 = circuit_mul(t37, t42);\n    let t44 = circuit_add(t41, in31);\n    let t45 = circuit_mul(t39, t44);\n    let t46 = circuit_add(t40, in209);\n    let t47 = circuit_sub(t41, in209);\n    let t48 = circuit_add(t46, in32);\n    let t49 = circuit_mul(t43, t48);\n    let t50 = circuit_add(t47, in32);\n    let t51 = circuit_mul(t45, t50);\n    let t52 = circuit_add(t46, in209);\n    let t53 = circuit_sub(t47, in209);\n    let t54 = circuit_add(t52, in33);\n    let t55 = circuit_mul(t49, t54);\n    let t56 = circuit_add(t53, in33);\n    let t57 = circuit_mul(t51, t56);\n    let t58 = circuit_add(t52, in209);\n    let t59 = circuit_sub(t53, in209);\n    let t60 = circuit_add(t58, in34);\n    let t61 = circuit_mul(t55, t60);\n    let t62 = circuit_add(t59, in34);\n    let t63 = circuit_mul(t57, t62);\n    let t64 = circuit_add(t58, in209);\n    let t65 = circuit_sub(t59, in209);\n    let t66 = circuit_add(t64, in35);\n    let t67 = circuit_mul(t61, t66);\n    let t68 = circuit_add(t65, in35);\n    let t69 = circuit_mul(t63, t68);\n    let t70 = circuit_add(t64, in209);\n    let t71 = circuit_sub(t65, in209);\n    let t72 = circuit_add(t70, in36);\n    let t73 = circuit_mul(t67, t72);\n    let t74 = circuit_add(t71, in36);\n    let t75 = circuit_mul(t69, t74);\n    let t76 = circuit_add(t70, in209);\n    let t77 = circuit_sub(t71, in209);\n    let t78 = circuit_add(t76, in37);\n    let t79 = circuit_mul(t73, t78);\n    let t80 = circuit_add(t77, in37);\n    let t81 = circuit_mul(t75, t80);\n    let t82 = circuit_add(t76, in209);\n    let t83 = circuit_sub(t77, in209);\n    let t84 = circuit_add(t82, in38);\n    let t85 = circuit_mul(t79, t84);\n    let t86 = circuit_add(t83, in38);\n    let t87 = circuit_mul(t81, t86);\n    let t88 = circuit_add(t82, in209);\n    let t89 = circuit_sub(t83, in209);\n    let t90 = circuit_add(t88, in39);\n    let t91 = circuit_mul(t85, t90);\n    let t92 = circuit_add(t89, in39);\n    let t93 = circuit_mul(t87, t92);\n    let t94 = circuit_add(t88, in209);\n    let t95 = circuit_sub(t89, in209);\n    let t96 = circuit_add(t94, in40);\n    let t97 = circuit_mul(t91, t96);\n    let t98 = circuit_add(t95, in40);\n    let t99 = circuit_mul(t93, t98);\n    let t100 = circuit_add(t94, in209);\n    let t101 = circuit_sub(t95, in209);\n    let t102 = circuit_add(t100, in41);\n    let t103 = circuit_mul(t97, t102);\n    let t104 = circuit_add(t101, in41);\n    let t105 = circuit_mul(t99, t104);\n    let t106 = circuit_inverse(t105);\n    let t107 = circuit_mul(t103, t106);\n    let t108 = circuit_mul(in213, in42);\n    let t109 = circuit_add(in43, in44);\n    let t110 = circuit_sub(t109, t108);\n    let t111 = circuit_mul(t110, in211);\n    let t112 = circuit_sub(in193, in7);\n    let t113 = circuit_mul(in0, t112);\n    let t114 = circuit_sub(in193, in7);\n    let t115 = circuit_mul(in2, t114);\n    let t116 = circuit_inverse(t115);\n    let t117 = circuit_mul(in43, t116);\n    let t118 = circuit_add(in7, t117);\n    let t119 = circuit_sub(in193, in0);\n    let t120 = circuit_mul(t113, t119);\n    let t121 = circuit_sub(in193, in0);\n    let t122 = circuit_mul(in3, t121);\n    let t123 = circuit_inverse(t122);\n    let t124 = circuit_mul(in44, t123);\n    let t125 = circuit_add(t118, t124);\n    let t126 = circuit_sub(in193, in8);\n    let t127 = circuit_mul(t120, t126);\n    let t128 = circuit_sub(in193, in8);\n    let t129 = circuit_mul(in4, t128);\n    let t130 = circuit_inverse(t129);\n    let t131 = circuit_mul(in45, t130);\n    let t132 = circuit_add(t125, t131);\n    let t133 = circuit_sub(in193, in9);\n    let t134 = circuit_mul(t127, t133);\n    let t135 = circuit_sub(in193, in9);\n    let t136 = circuit_mul(in5, t135);\n    let t137 = circuit_inverse(t136);\n    let t138 = circuit_mul(in46, t137);\n    let t139 = circuit_add(t132, t138);\n    let t140 = circuit_sub(in193, in10);\n    let t141 = circuit_mul(t134, t140);\n    let t142 = circuit_sub(in193, in10);\n    let t143 = circuit_mul(in6, t142);\n    let t144 = circuit_inverse(t143);\n    let t145 = circuit_mul(in47, t144);\n    let t146 = circuit_add(t139, t145);\n    let t147 = circuit_sub(in193, in11);\n    let t148 = circuit_mul(t141, t147);\n    let t149 = circuit_sub(in193, in11);\n    let t150 = circuit_mul(in5, t149);\n    let t151 = circuit_inverse(t150);\n    let t152 = circuit_mul(in48, t151);\n    let t153 = circuit_add(t146, t152);\n    let t154 = circuit_sub(in193, in12);\n    let t155 = circuit_mul(t148, t154);\n    let t156 = circuit_sub(in193, in12);\n    let t157 = circuit_mul(in4, t156);\n    let t158 = circuit_inverse(t157);\n    let t159 = circuit_mul(in49, t158);\n    let t160 = circuit_add(t153, t159);\n    let t161 = circuit_sub(in193, in13);\n    let t162 = circuit_mul(t155, t161);\n    let t163 = circuit_sub(in193, in13);\n    let t164 = circuit_mul(in3, t163);\n    let t165 = circuit_inverse(t164);\n    let t166 = circuit_mul(in50, t165);\n    let t167 = circuit_add(t160, t166);\n    let t168 = circuit_sub(in193, in14);\n    let t169 = circuit_mul(t162, t168);\n    let t170 = circuit_sub(in193, in14);\n    let t171 = circuit_mul(in2, t170);\n    let t172 = circuit_inverse(t171);\n    let t173 = circuit_mul(in51, t172);\n    let t174 = circuit_add(t167, t173);\n    let t175 = circuit_mul(t174, t169);\n    let t176 = circuit_sub(in205, in0);\n    let t177 = circuit_mul(in193, t176);\n    let t178 = circuit_add(in0, t177);\n    let t179 = circuit_mul(in0, t178);\n    let t180 = circuit_mul(in211, in211);\n    let t181 = circuit_mul(in205, in205);\n    let t182 = circuit_add(in52, in53);\n    let t183 = circuit_sub(t182, t175);\n    let t184 = circuit_mul(t183, t180);\n    let t185 = circuit_add(t111, t184);\n    let t186 = circuit_sub(in194, in7);\n    let t187 = circuit_mul(in0, t186);\n    let t188 = circuit_sub(in194, in7);\n    let t189 = circuit_mul(in2, t188);\n    let t190 = circuit_inverse(t189);\n    let t191 = circuit_mul(in52, t190);\n    let t192 = circuit_add(in7, t191);\n    let t193 = circuit_sub(in194, in0);\n    let t194 = circuit_mul(t187, t193);\n    let t195 = circuit_sub(in194, in0);\n    let t196 = circuit_mul(in3, t195);\n    let t197 = circuit_inverse(t196);\n    let t198 = circuit_mul(in53, t197);\n    let t199 = circuit_add(t192, t198);\n    let t200 = circuit_sub(in194, in8);\n    let t201 = circuit_mul(t194, t200);\n    let t202 = circuit_sub(in194, in8);\n    let t203 = circuit_mul(in4, t202);\n    let t204 = circuit_inverse(t203);\n    let t205 = circuit_mul(in54, t204);\n    let t206 = circuit_add(t199, t205);\n    let t207 = circuit_sub(in194, in9);\n    let t208 = circuit_mul(t201, t207);\n    let t209 = circuit_sub(in194, in9);\n    let t210 = circuit_mul(in5, t209);\n    let t211 = circuit_inverse(t210);\n    let t212 = circuit_mul(in55, t211);\n    let t213 = circuit_add(t206, t212);\n    let t214 = circuit_sub(in194, in10);\n    let t215 = circuit_mul(t208, t214);\n    let t216 = circuit_sub(in194, in10);\n    let t217 = circuit_mul(in6, t216);\n    let t218 = circuit_inverse(t217);\n    let t219 = circuit_mul(in56, t218);\n    let t220 = circuit_add(t213, t219);\n    let t221 = circuit_sub(in194, in11);\n    let t222 = circuit_mul(t215, t221);\n    let t223 = circuit_sub(in194, in11);\n    let t224 = circuit_mul(in5, t223);\n    let t225 = circuit_inverse(t224);\n    let t226 = circuit_mul(in57, t225);\n    let t227 = circuit_add(t220, t226);\n    let t228 = circuit_sub(in194, in12);\n    let t229 = circuit_mul(t222, t228);\n    let t230 = circuit_sub(in194, in12);\n    let t231 = circuit_mul(in4, t230);\n    let t232 = circuit_inverse(t231);\n    let t233 = circuit_mul(in58, t232);\n    let t234 = circuit_add(t227, t233);\n    let t235 = circuit_sub(in194, in13);\n    let t236 = circuit_mul(t229, t235);\n    let t237 = circuit_sub(in194, in13);\n    let t238 = circuit_mul(in3, t237);\n    let t239 = circuit_inverse(t238);\n    let t240 = circuit_mul(in59, t239);\n    let t241 = circuit_add(t234, t240);\n    let t242 = circuit_sub(in194, in14);\n    let t243 = circuit_mul(t236, t242);\n    let t244 = circuit_sub(in194, in14);\n    let t245 = circuit_mul(in2, t244);\n    let t246 = circuit_inverse(t245);\n    let t247 = circuit_mul(in60, t246);\n    let t248 = circuit_add(t241, t247);\n    let t249 = circuit_mul(t248, t243);\n    let t250 = circuit_sub(t181, in0);\n    let t251 = circuit_mul(in194, t250);\n    let t252 = circuit_add(in0, t251);\n    let t253 = circuit_mul(t179, t252);\n    let t254 = circuit_mul(t180, in211);\n    let t255 = circuit_mul(t181, t181);\n    let t256 = circuit_add(in61, in62);\n    let t257 = circuit_sub(t256, t249);\n    let t258 = circuit_mul(t257, t254);\n    let t259 = circuit_add(t185, t258);\n    let t260 = circuit_sub(in195, in7);\n    let t261 = circuit_mul(in0, t260);\n    let t262 = circuit_sub(in195, in7);\n    let t263 = circuit_mul(in2, t262);\n    let t264 = circuit_inverse(t263);\n    let t265 = circuit_mul(in61, t264);\n    let t266 = circuit_add(in7, t265);\n    let t267 = circuit_sub(in195, in0);\n    let t268 = circuit_mul(t261, t267);\n    let t269 = circuit_sub(in195, in0);\n    let t270 = circuit_mul(in3, t269);\n    let t271 = circuit_inverse(t270);\n    let t272 = circuit_mul(in62, t271);\n    let t273 = circuit_add(t266, t272);\n    let t274 = circuit_sub(in195, in8);\n    let t275 = circuit_mul(t268, t274);\n    let t276 = circuit_sub(in195, in8);\n    let t277 = circuit_mul(in4, t276);\n    let t278 = circuit_inverse(t277);\n    let t279 = circuit_mul(in63, t278);\n    let t280 = circuit_add(t273, t279);\n    let t281 = circuit_sub(in195, in9);\n    let t282 = circuit_mul(t275, t281);\n    let t283 = circuit_sub(in195, in9);\n    let t284 = circuit_mul(in5, t283);\n    let t285 = circuit_inverse(t284);\n    let t286 = circuit_mul(in64, t285);\n    let t287 = circuit_add(t280, t286);\n    let t288 = circuit_sub(in195, in10);\n    let t289 = circuit_mul(t282, t288);\n    let t290 = circuit_sub(in195, in10);\n    let t291 = circuit_mul(in6, t290);\n    let t292 = circuit_inverse(t291);\n    let t293 = circuit_mul(in65, t292);\n    let t294 = circuit_add(t287, t293);\n    let t295 = circuit_sub(in195, in11);\n    let t296 = circuit_mul(t289, t295);\n    let t297 = circuit_sub(in195, in11);\n    let t298 = circuit_mul(in5, t297);\n    let t299 = circuit_inverse(t298);\n    let t300 = circuit_mul(in66, t299);\n    let t301 = circuit_add(t294, t300);\n    let t302 = circuit_sub(in195, in12);\n    let t303 = circuit_mul(t296, t302);\n    let t304 = circuit_sub(in195, in12);\n    let t305 = circuit_mul(in4, t304);\n    let t306 = circuit_inverse(t305);\n    let t307 = circuit_mul(in67, t306);\n    let t308 = circuit_add(t301, t307);\n    let t309 = circuit_sub(in195, in13);\n    let t310 = circuit_mul(t303, t309);\n    let t311 = circuit_sub(in195, in13);\n    let t312 = circuit_mul(in3, t311);\n    let t313 = circuit_inverse(t312);\n    let t314 = circuit_mul(in68, t313);\n    let t315 = circuit_add(t308, t314);\n    let t316 = circuit_sub(in195, in14);\n    let t317 = circuit_mul(t310, t316);\n    let t318 = circuit_sub(in195, in14);\n    let t319 = circuit_mul(in2, t318);\n    let t320 = circuit_inverse(t319);\n    let t321 = circuit_mul(in69, t320);\n    let t322 = circuit_add(t315, t321);\n    let t323 = circuit_mul(t322, t317);\n    let t324 = circuit_sub(t255, in0);\n    let t325 = circuit_mul(in195, t324);\n    let t326 = circuit_add(in0, t325);\n    let t327 = circuit_mul(t253, t326);\n    let t328 = circuit_mul(t254, in211);\n    let t329 = circuit_mul(t255, t255);\n    let t330 = circuit_add(in70, in71);\n    let t331 = circuit_sub(t330, t323);\n    let t332 = circuit_mul(t331, t328);\n    let t333 = circuit_add(t259, t332);\n    let t334 = circuit_sub(in196, in7);\n    let t335 = circuit_mul(in0, t334);\n    let t336 = circuit_sub(in196, in7);\n    let t337 = circuit_mul(in2, t336);\n    let t338 = circuit_inverse(t337);\n    let t339 = circuit_mul(in70, t338);\n    let t340 = circuit_add(in7, t339);\n    let t341 = circuit_sub(in196, in0);\n    let t342 = circuit_mul(t335, t341);\n    let t343 = circuit_sub(in196, in0);\n    let t344 = circuit_mul(in3, t343);\n    let t345 = circuit_inverse(t344);\n    let t346 = circuit_mul(in71, t345);\n    let t347 = circuit_add(t340, t346);\n    let t348 = circuit_sub(in196, in8);\n    let t349 = circuit_mul(t342, t348);\n    let t350 = circuit_sub(in196, in8);\n    let t351 = circuit_mul(in4, t350);\n    let t352 = circuit_inverse(t351);\n    let t353 = circuit_mul(in72, t352);\n    let t354 = circuit_add(t347, t353);\n    let t355 = circuit_sub(in196, in9);\n    let t356 = circuit_mul(t349, t355);\n    let t357 = circuit_sub(in196, in9);\n    let t358 = circuit_mul(in5, t357);\n    let t359 = circuit_inverse(t358);\n    let t360 = circuit_mul(in73, t359);\n    let t361 = circuit_add(t354, t360);\n    let t362 = circuit_sub(in196, in10);\n    let t363 = circuit_mul(t356, t362);\n    let t364 = circuit_sub(in196, in10);\n    let t365 = circuit_mul(in6, t364);\n    let t366 = circuit_inverse(t365);\n    let t367 = circuit_mul(in74, t366);\n    let t368 = circuit_add(t361, t367);\n    let t369 = circuit_sub(in196, in11);\n    let t370 = circuit_mul(t363, t369);\n    let t371 = circuit_sub(in196, in11);\n    let t372 = circuit_mul(in5, t371);\n    let t373 = circuit_inverse(t372);\n    let t374 = circuit_mul(in75, t373);\n    let t375 = circuit_add(t368, t374);\n    let t376 = circuit_sub(in196, in12);\n    let t377 = circuit_mul(t370, t376);\n    let t378 = circuit_sub(in196, in12);\n    let t379 = circuit_mul(in4, t378);\n    let t380 = circuit_inverse(t379);\n    let t381 = circuit_mul(in76, t380);\n    let t382 = circuit_add(t375, t381);\n    let t383 = circuit_sub(in196, in13);\n    let t384 = circuit_mul(t377, t383);\n    let t385 = circuit_sub(in196, in13);\n    let t386 = circuit_mul(in3, t385);\n    let t387 = circuit_inverse(t386);\n    let t388 = circuit_mul(in77, t387);\n    let t389 = circuit_add(t382, t388);\n    let t390 = circuit_sub(in196, in14);\n    let t391 = circuit_mul(t384, t390);\n    let t392 = circuit_sub(in196, in14);\n    let t393 = circuit_mul(in2, t392);\n    let t394 = circuit_inverse(t393);\n    let t395 = circuit_mul(in78, t394);\n    let t396 = circuit_add(t389, t395);\n    let t397 = circuit_mul(t396, t391);\n    let t398 = circuit_sub(t329, in0);\n    let t399 = circuit_mul(in196, t398);\n    let t400 = circuit_add(in0, t399);\n    let t401 = circuit_mul(t327, t400);\n    let t402 = circuit_mul(t328, in211);\n    let t403 = circuit_mul(t329, t329);\n    let t404 = circuit_add(in79, in80);\n    let t405 = circuit_sub(t404, t397);\n    let t406 = circuit_mul(t405, t402);\n    let t407 = circuit_add(t333, t406);\n    let t408 = circuit_sub(in197, in7);\n    let t409 = circuit_mul(in0, t408);\n    let t410 = circuit_sub(in197, in7);\n    let t411 = circuit_mul(in2, t410);\n    let t412 = circuit_inverse(t411);\n    let t413 = circuit_mul(in79, t412);\n    let t414 = circuit_add(in7, t413);\n    let t415 = circuit_sub(in197, in0);\n    let t416 = circuit_mul(t409, t415);\n    let t417 = circuit_sub(in197, in0);\n    let t418 = circuit_mul(in3, t417);\n    let t419 = circuit_inverse(t418);\n    let t420 = circuit_mul(in80, t419);\n    let t421 = circuit_add(t414, t420);\n    let t422 = circuit_sub(in197, in8);\n    let t423 = circuit_mul(t416, t422);\n    let t424 = circuit_sub(in197, in8);\n    let t425 = circuit_mul(in4, t424);\n    let t426 = circuit_inverse(t425);\n    let t427 = circuit_mul(in81, t426);\n    let t428 = circuit_add(t421, t427);\n    let t429 = circuit_sub(in197, in9);\n    let t430 = circuit_mul(t423, t429);\n    let t431 = circuit_sub(in197, in9);\n    let t432 = circuit_mul(in5, t431);\n    let t433 = circuit_inverse(t432);\n    let t434 = circuit_mul(in82, t433);\n    let t435 = circuit_add(t428, t434);\n    let t436 = circuit_sub(in197, in10);\n    let t437 = circuit_mul(t430, t436);\n    let t438 = circuit_sub(in197, in10);\n    let t439 = circuit_mul(in6, t438);\n    let t440 = circuit_inverse(t439);\n    let t441 = circuit_mul(in83, t440);\n    let t442 = circuit_add(t435, t441);\n    let t443 = circuit_sub(in197, in11);\n    let t444 = circuit_mul(t437, t443);\n    let t445 = circuit_sub(in197, in11);\n    let t446 = circuit_mul(in5, t445);\n    let t447 = circuit_inverse(t446);\n    let t448 = circuit_mul(in84, t447);\n    let t449 = circuit_add(t442, t448);\n    let t450 = circuit_sub(in197, in12);\n    let t451 = circuit_mul(t444, t450);\n    let t452 = circuit_sub(in197, in12);\n    let t453 = circuit_mul(in4, t452);\n    let t454 = circuit_inverse(t453);\n    let t455 = circuit_mul(in85, t454);\n    let t456 = circuit_add(t449, t455);\n    let t457 = circuit_sub(in197, in13);\n    let t458 = circuit_mul(t451, t457);\n    let t459 = circuit_sub(in197, in13);\n    let t460 = circuit_mul(in3, t459);\n    let t461 = circuit_inverse(t460);\n    let t462 = circuit_mul(in86, t461);\n    let t463 = circuit_add(t456, t462);\n    let t464 = circuit_sub(in197, in14);\n    let t465 = circuit_mul(t458, t464);\n    let t466 = circuit_sub(in197, in14);\n    let t467 = circuit_mul(in2, t466);\n    let t468 = circuit_inverse(t467);\n    let t469 = circuit_mul(in87, t468);\n    let t470 = circuit_add(t463, t469);\n    let t471 = circuit_mul(t470, t465);\n    let t472 = circuit_sub(t403, in0);\n    let t473 = circuit_mul(in197, t472);\n    let t474 = circuit_add(in0, t473);\n    let t475 = circuit_mul(t401, t474);\n    let t476 = circuit_mul(t402, in211);\n    let t477 = circuit_mul(t403, t403);\n    let t478 = circuit_add(in88, in89);\n    let t479 = circuit_sub(t478, t471);\n    let t480 = circuit_mul(t479, t476);\n    let t481 = circuit_add(t407, t480);\n    let t482 = circuit_sub(in198, in7);\n    let t483 = circuit_mul(in0, t482);\n    let t484 = circuit_sub(in198, in7);\n    let t485 = circuit_mul(in2, t484);\n    let t486 = circuit_inverse(t485);\n    let t487 = circuit_mul(in88, t486);\n    let t488 = circuit_add(in7, t487);\n    let t489 = circuit_sub(in198, in0);\n    let t490 = circuit_mul(t483, t489);\n    let t491 = circuit_sub(in198, in0);\n    let t492 = circuit_mul(in3, t491);\n    let t493 = circuit_inverse(t492);\n    let t494 = circuit_mul(in89, t493);\n    let t495 = circuit_add(t488, t494);\n    let t496 = circuit_sub(in198, in8);\n    let t497 = circuit_mul(t490, t496);\n    let t498 = circuit_sub(in198, in8);\n    let t499 = circuit_mul(in4, t498);\n    let t500 = circuit_inverse(t499);\n    let t501 = circuit_mul(in90, t500);\n    let t502 = circuit_add(t495, t501);\n    let t503 = circuit_sub(in198, in9);\n    let t504 = circuit_mul(t497, t503);\n    let t505 = circuit_sub(in198, in9);\n    let t506 = circuit_mul(in5, t505);\n    let t507 = circuit_inverse(t506);\n    let t508 = circuit_mul(in91, t507);\n    let t509 = circuit_add(t502, t508);\n    let t510 = circuit_sub(in198, in10);\n    let t511 = circuit_mul(t504, t510);\n    let t512 = circuit_sub(in198, in10);\n    let t513 = circuit_mul(in6, t512);\n    let t514 = circuit_inverse(t513);\n    let t515 = circuit_mul(in92, t514);\n    let t516 = circuit_add(t509, t515);\n    let t517 = circuit_sub(in198, in11);\n    let t518 = circuit_mul(t511, t517);\n    let t519 = circuit_sub(in198, in11);\n    let t520 = circuit_mul(in5, t519);\n    let t521 = circuit_inverse(t520);\n    let t522 = circuit_mul(in93, t521);\n    let t523 = circuit_add(t516, t522);\n    let t524 = circuit_sub(in198, in12);\n    let t525 = circuit_mul(t518, t524);\n    let t526 = circuit_sub(in198, in12);\n    let t527 = circuit_mul(in4, t526);\n    let t528 = circuit_inverse(t527);\n    let t529 = circuit_mul(in94, t528);\n    let t530 = circuit_add(t523, t529);\n    let t531 = circuit_sub(in198, in13);\n    let t532 = circuit_mul(t525, t531);\n    let t533 = circuit_sub(in198, in13);\n    let t534 = circuit_mul(in3, t533);\n    let t535 = circuit_inverse(t534);\n    let t536 = circuit_mul(in95, t535);\n    let t537 = circuit_add(t530, t536);\n    let t538 = circuit_sub(in198, in14);\n    let t539 = circuit_mul(t532, t538);\n    let t540 = circuit_sub(in198, in14);\n    let t541 = circuit_mul(in2, t540);\n    let t542 = circuit_inverse(t541);\n    let t543 = circuit_mul(in96, t542);\n    let t544 = circuit_add(t537, t543);\n    let t545 = circuit_mul(t544, t539);\n    let t546 = circuit_sub(t477, in0);\n    let t547 = circuit_mul(in198, t546);\n    let t548 = circuit_add(in0, t547);\n    let t549 = circuit_mul(t475, t548);\n    let t550 = circuit_mul(t476, in211);\n    let t551 = circuit_mul(t477, t477);\n    let t552 = circuit_add(in97, in98);\n    let t553 = circuit_sub(t552, t545);\n    let t554 = circuit_mul(t553, t550);\n    let t555 = circuit_add(t481, t554);\n    let t556 = circuit_sub(in199, in7);\n    let t557 = circuit_mul(in0, t556);\n    let t558 = circuit_sub(in199, in7);\n    let t559 = circuit_mul(in2, t558);\n    let t560 = circuit_inverse(t559);\n    let t561 = circuit_mul(in97, t560);\n    let t562 = circuit_add(in7, t561);\n    let t563 = circuit_sub(in199, in0);\n    let t564 = circuit_mul(t557, t563);\n    let t565 = circuit_sub(in199, in0);\n    let t566 = circuit_mul(in3, t565);\n    let t567 = circuit_inverse(t566);\n    let t568 = circuit_mul(in98, t567);\n    let t569 = circuit_add(t562, t568);\n    let t570 = circuit_sub(in199, in8);\n    let t571 = circuit_mul(t564, t570);\n    let t572 = circuit_sub(in199, in8);\n    let t573 = circuit_mul(in4, t572);\n    let t574 = circuit_inverse(t573);\n    let t575 = circuit_mul(in99, t574);\n    let t576 = circuit_add(t569, t575);\n    let t577 = circuit_sub(in199, in9);\n    let t578 = circuit_mul(t571, t577);\n    let t579 = circuit_sub(in199, in9);\n    let t580 = circuit_mul(in5, t579);\n    let t581 = circuit_inverse(t580);\n    let t582 = circuit_mul(in100, t581);\n    let t583 = circuit_add(t576, t582);\n    let t584 = circuit_sub(in199, in10);\n    let t585 = circuit_mul(t578, t584);\n    let t586 = circuit_sub(in199, in10);\n    let t587 = circuit_mul(in6, t586);\n    let t588 = circuit_inverse(t587);\n    let t589 = circuit_mul(in101, t588);\n    let t590 = circuit_add(t583, t589);\n    let t591 = circuit_sub(in199, in11);\n    let t592 = circuit_mul(t585, t591);\n    let t593 = circuit_sub(in199, in11);\n    let t594 = circuit_mul(in5, t593);\n    let t595 = circuit_inverse(t594);\n    let t596 = circuit_mul(in102, t595);\n    let t597 = circuit_add(t590, t596);\n    let t598 = circuit_sub(in199, in12);\n    let t599 = circuit_mul(t592, t598);\n    let t600 = circuit_sub(in199, in12);\n    let t601 = circuit_mul(in4, t600);\n    let t602 = circuit_inverse(t601);\n    let t603 = circuit_mul(in103, t602);\n    let t604 = circuit_add(t597, t603);\n    let t605 = circuit_sub(in199, in13);\n    let t606 = circuit_mul(t599, t605);\n    let t607 = circuit_sub(in199, in13);\n    let t608 = circuit_mul(in3, t607);\n    let t609 = circuit_inverse(t608);\n    let t610 = circuit_mul(in104, t609);\n    let t611 = circuit_add(t604, t610);\n    let t612 = circuit_sub(in199, in14);\n    let t613 = circuit_mul(t606, t612);\n    let t614 = circuit_sub(in199, in14);\n    let t615 = circuit_mul(in2, t614);\n    let t616 = circuit_inverse(t615);\n    let t617 = circuit_mul(in105, t616);\n    let t618 = circuit_add(t611, t617);\n    let t619 = circuit_mul(t618, t613);\n    let t620 = circuit_sub(t551, in0);\n    let t621 = circuit_mul(in199, t620);\n    let t622 = circuit_add(in0, t621);\n    let t623 = circuit_mul(t549, t622);\n    let t624 = circuit_mul(t550, in211);\n    let t625 = circuit_mul(t551, t551);\n    let t626 = circuit_add(in106, in107);\n    let t627 = circuit_sub(t626, t619);\n    let t628 = circuit_mul(t627, t624);\n    let t629 = circuit_add(t555, t628);\n    let t630 = circuit_sub(in200, in7);\n    let t631 = circuit_mul(in0, t630);\n    let t632 = circuit_sub(in200, in7);\n    let t633 = circuit_mul(in2, t632);\n    let t634 = circuit_inverse(t633);\n    let t635 = circuit_mul(in106, t634);\n    let t636 = circuit_add(in7, t635);\n    let t637 = circuit_sub(in200, in0);\n    let t638 = circuit_mul(t631, t637);\n    let t639 = circuit_sub(in200, in0);\n    let t640 = circuit_mul(in3, t639);\n    let t641 = circuit_inverse(t640);\n    let t642 = circuit_mul(in107, t641);\n    let t643 = circuit_add(t636, t642);\n    let t644 = circuit_sub(in200, in8);\n    let t645 = circuit_mul(t638, t644);\n    let t646 = circuit_sub(in200, in8);\n    let t647 = circuit_mul(in4, t646);\n    let t648 = circuit_inverse(t647);\n    let t649 = circuit_mul(in108, t648);\n    let t650 = circuit_add(t643, t649);\n    let t651 = circuit_sub(in200, in9);\n    let t652 = circuit_mul(t645, t651);\n    let t653 = circuit_sub(in200, in9);\n    let t654 = circuit_mul(in5, t653);\n    let t655 = circuit_inverse(t654);\n    let t656 = circuit_mul(in109, t655);\n    let t657 = circuit_add(t650, t656);\n    let t658 = circuit_sub(in200, in10);\n    let t659 = circuit_mul(t652, t658);\n    let t660 = circuit_sub(in200, in10);\n    let t661 = circuit_mul(in6, t660);\n    let t662 = circuit_inverse(t661);\n    let t663 = circuit_mul(in110, t662);\n    let t664 = circuit_add(t657, t663);\n    let t665 = circuit_sub(in200, in11);\n    let t666 = circuit_mul(t659, t665);\n    let t667 = circuit_sub(in200, in11);\n    let t668 = circuit_mul(in5, t667);\n    let t669 = circuit_inverse(t668);\n    let t670 = circuit_mul(in111, t669);\n    let t671 = circuit_add(t664, t670);\n    let t672 = circuit_sub(in200, in12);\n    let t673 = circuit_mul(t666, t672);\n    let t674 = circuit_sub(in200, in12);\n    let t675 = circuit_mul(in4, t674);\n    let t676 = circuit_inverse(t675);\n    let t677 = circuit_mul(in112, t676);\n    let t678 = circuit_add(t671, t677);\n    let t679 = circuit_sub(in200, in13);\n    let t680 = circuit_mul(t673, t679);\n    let t681 = circuit_sub(in200, in13);\n    let t682 = circuit_mul(in3, t681);\n    let t683 = circuit_inverse(t682);\n    let t684 = circuit_mul(in113, t683);\n    let t685 = circuit_add(t678, t684);\n    let t686 = circuit_sub(in200, in14);\n    let t687 = circuit_mul(t680, t686);\n    let t688 = circuit_sub(in200, in14);\n    let t689 = circuit_mul(in2, t688);\n    let t690 = circuit_inverse(t689);\n    let t691 = circuit_mul(in114, t690);\n    let t692 = circuit_add(t685, t691);\n    let t693 = circuit_mul(t692, t687);\n    let t694 = circuit_sub(t625, in0);\n    let t695 = circuit_mul(in200, t694);\n    let t696 = circuit_add(in0, t695);\n    let t697 = circuit_mul(t623, t696);\n    let t698 = circuit_mul(t624, in211);\n    let t699 = circuit_mul(t625, t625);\n    let t700 = circuit_add(in115, in116);\n    let t701 = circuit_sub(t700, t693);\n    let t702 = circuit_mul(t701, t698);\n    let t703 = circuit_add(t629, t702);\n    let t704 = circuit_sub(in201, in7);\n    let t705 = circuit_mul(in0, t704);\n    let t706 = circuit_sub(in201, in7);\n    let t707 = circuit_mul(in2, t706);\n    let t708 = circuit_inverse(t707);\n    let t709 = circuit_mul(in115, t708);\n    let t710 = circuit_add(in7, t709);\n    let t711 = circuit_sub(in201, in0);\n    let t712 = circuit_mul(t705, t711);\n    let t713 = circuit_sub(in201, in0);\n    let t714 = circuit_mul(in3, t713);\n    let t715 = circuit_inverse(t714);\n    let t716 = circuit_mul(in116, t715);\n    let t717 = circuit_add(t710, t716);\n    let t718 = circuit_sub(in201, in8);\n    let t719 = circuit_mul(t712, t718);\n    let t720 = circuit_sub(in201, in8);\n    let t721 = circuit_mul(in4, t720);\n    let t722 = circuit_inverse(t721);\n    let t723 = circuit_mul(in117, t722);\n    let t724 = circuit_add(t717, t723);\n    let t725 = circuit_sub(in201, in9);\n    let t726 = circuit_mul(t719, t725);\n    let t727 = circuit_sub(in201, in9);\n    let t728 = circuit_mul(in5, t727);\n    let t729 = circuit_inverse(t728);\n    let t730 = circuit_mul(in118, t729);\n    let t731 = circuit_add(t724, t730);\n    let t732 = circuit_sub(in201, in10);\n    let t733 = circuit_mul(t726, t732);\n    let t734 = circuit_sub(in201, in10);\n    let t735 = circuit_mul(in6, t734);\n    let t736 = circuit_inverse(t735);\n    let t737 = circuit_mul(in119, t736);\n    let t738 = circuit_add(t731, t737);\n    let t739 = circuit_sub(in201, in11);\n    let t740 = circuit_mul(t733, t739);\n    let t741 = circuit_sub(in201, in11);\n    let t742 = circuit_mul(in5, t741);\n    let t743 = circuit_inverse(t742);\n    let t744 = circuit_mul(in120, t743);\n    let t745 = circuit_add(t738, t744);\n    let t746 = circuit_sub(in201, in12);\n    let t747 = circuit_mul(t740, t746);\n    let t748 = circuit_sub(in201, in12);\n    let t749 = circuit_mul(in4, t748);\n    let t750 = circuit_inverse(t749);\n    let t751 = circuit_mul(in121, t750);\n    let t752 = circuit_add(t745, t751);\n    let t753 = circuit_sub(in201, in13);\n    let t754 = circuit_mul(t747, t753);\n    let t755 = circuit_sub(in201, in13);\n    let t756 = circuit_mul(in3, t755);\n    let t757 = circuit_inverse(t756);\n    let t758 = circuit_mul(in122, t757);\n    let t759 = circuit_add(t752, t758);\n    let t760 = circuit_sub(in201, in14);\n    let t761 = circuit_mul(t754, t760);\n    let t762 = circuit_sub(in201, in14);\n    let t763 = circuit_mul(in2, t762);\n    let t764 = circuit_inverse(t763);\n    let t765 = circuit_mul(in123, t764);\n    let t766 = circuit_add(t759, t765);\n    let t767 = circuit_mul(t766, t761);\n    let t768 = circuit_sub(t699, in0);\n    let t769 = circuit_mul(in201, t768);\n    let t770 = circuit_add(in0, t769);\n    let t771 = circuit_mul(t697, t770);\n    let t772 = circuit_mul(t698, in211);\n    let t773 = circuit_mul(t699, t699);\n    let t774 = circuit_add(in124, in125);\n    let t775 = circuit_sub(t774, t767);\n    let t776 = circuit_mul(t775, t772);\n    let t777 = circuit_add(t703, t776);\n    let t778 = circuit_sub(in202, in7);\n    let t779 = circuit_mul(in0, t778);\n    let t780 = circuit_sub(in202, in7);\n    let t781 = circuit_mul(in2, t780);\n    let t782 = circuit_inverse(t781);\n    let t783 = circuit_mul(in124, t782);\n    let t784 = circuit_add(in7, t783);\n    let t785 = circuit_sub(in202, in0);\n    let t786 = circuit_mul(t779, t785);\n    let t787 = circuit_sub(in202, in0);\n    let t788 = circuit_mul(in3, t787);\n    let t789 = circuit_inverse(t788);\n    let t790 = circuit_mul(in125, t789);\n    let t791 = circuit_add(t784, t790);\n    let t792 = circuit_sub(in202, in8);\n    let t793 = circuit_mul(t786, t792);\n    let t794 = circuit_sub(in202, in8);\n    let t795 = circuit_mul(in4, t794);\n    let t796 = circuit_inverse(t795);\n    let t797 = circuit_mul(in126, t796);\n    let t798 = circuit_add(t791, t797);\n    let t799 = circuit_sub(in202, in9);\n    let t800 = circuit_mul(t793, t799);\n    let t801 = circuit_sub(in202, in9);\n    let t802 = circuit_mul(in5, t801);\n    let t803 = circuit_inverse(t802);\n    let t804 = circuit_mul(in127, t803);\n    let t805 = circuit_add(t798, t804);\n    let t806 = circuit_sub(in202, in10);\n    let t807 = circuit_mul(t800, t806);\n    let t808 = circuit_sub(in202, in10);\n    let t809 = circuit_mul(in6, t808);\n    let t810 = circuit_inverse(t809);\n    let t811 = circuit_mul(in128, t810);\n    let t812 = circuit_add(t805, t811);\n    let t813 = circuit_sub(in202, in11);\n    let t814 = circuit_mul(t807, t813);\n    let t815 = circuit_sub(in202, in11);\n    let t816 = circuit_mul(in5, t815);\n    let t817 = circuit_inverse(t816);\n    let t818 = circuit_mul(in129, t817);\n    let t819 = circuit_add(t812, t818);\n    let t820 = circuit_sub(in202, in12);\n    let t821 = circuit_mul(t814, t820);\n    let t822 = circuit_sub(in202, in12);\n    let t823 = circuit_mul(in4, t822);\n    let t824 = circuit_inverse(t823);\n    let t825 = circuit_mul(in130, t824);\n    let t826 = circuit_add(t819, t825);\n    let t827 = circuit_sub(in202, in13);\n    let t828 = circuit_mul(t821, t827);\n    let t829 = circuit_sub(in202, in13);\n    let t830 = circuit_mul(in3, t829);\n    let t831 = circuit_inverse(t830);\n    let t832 = circuit_mul(in131, t831);\n    let t833 = circuit_add(t826, t832);\n    let t834 = circuit_sub(in202, in14);\n    let t835 = circuit_mul(t828, t834);\n    let t836 = circuit_sub(in202, in14);\n    let t837 = circuit_mul(in2, t836);\n    let t838 = circuit_inverse(t837);\n    let t839 = circuit_mul(in132, t838);\n    let t840 = circuit_add(t833, t839);\n    let t841 = circuit_mul(t840, t835);\n    let t842 = circuit_sub(t773, in0);\n    let t843 = circuit_mul(in202, t842);\n    let t844 = circuit_add(in0, t843);\n    let t845 = circuit_mul(t771, t844);\n    let t846 = circuit_mul(t772, in211);\n    let t847 = circuit_mul(t773, t773);\n    let t848 = circuit_add(in133, in134);\n    let t849 = circuit_sub(t848, t841);\n    let t850 = circuit_mul(t849, t846);\n    let t851 = circuit_add(t777, t850);\n    let t852 = circuit_sub(in203, in7);\n    let t853 = circuit_mul(in0, t852);\n    let t854 = circuit_sub(in203, in7);\n    let t855 = circuit_mul(in2, t854);\n    let t856 = circuit_inverse(t855);\n    let t857 = circuit_mul(in133, t856);\n    let t858 = circuit_add(in7, t857);\n    let t859 = circuit_sub(in203, in0);\n    let t860 = circuit_mul(t853, t859);\n    let t861 = circuit_sub(in203, in0);\n    let t862 = circuit_mul(in3, t861);\n    let t863 = circuit_inverse(t862);\n    let t864 = circuit_mul(in134, t863);\n    let t865 = circuit_add(t858, t864);\n    let t866 = circuit_sub(in203, in8);\n    let t867 = circuit_mul(t860, t866);\n    let t868 = circuit_sub(in203, in8);\n    let t869 = circuit_mul(in4, t868);\n    let t870 = circuit_inverse(t869);\n    let t871 = circuit_mul(in135, t870);\n    let t872 = circuit_add(t865, t871);\n    let t873 = circuit_sub(in203, in9);\n    let t874 = circuit_mul(t867, t873);\n    let t875 = circuit_sub(in203, in9);\n    let t876 = circuit_mul(in5, t875);\n    let t877 = circuit_inverse(t876);\n    let t878 = circuit_mul(in136, t877);\n    let t879 = circuit_add(t872, t878);\n    let t880 = circuit_sub(in203, in10);\n    let t881 = circuit_mul(t874, t880);\n    let t882 = circuit_sub(in203, in10);\n    let t883 = circuit_mul(in6, t882);\n    let t884 = circuit_inverse(t883);\n    let t885 = circuit_mul(in137, t884);\n    let t886 = circuit_add(t879, t885);\n    let t887 = circuit_sub(in203, in11);\n    let t888 = circuit_mul(t881, t887);\n    let t889 = circuit_sub(in203, in11);\n    let t890 = circuit_mul(in5, t889);\n    let t891 = circuit_inverse(t890);\n    let t892 = circuit_mul(in138, t891);\n    let t893 = circuit_add(t886, t892);\n    let t894 = circuit_sub(in203, in12);\n    let t895 = circuit_mul(t888, t894);\n    let t896 = circuit_sub(in203, in12);\n    let t897 = circuit_mul(in4, t896);\n    let t898 = circuit_inverse(t897);\n    let t899 = circuit_mul(in139, t898);\n    let t900 = circuit_add(t893, t899);\n    let t901 = circuit_sub(in203, in13);\n    let t902 = circuit_mul(t895, t901);\n    let t903 = circuit_sub(in203, in13);\n    let t904 = circuit_mul(in3, t903);\n    let t905 = circuit_inverse(t904);\n    let t906 = circuit_mul(in140, t905);\n    let t907 = circuit_add(t900, t906);\n    let t908 = circuit_sub(in203, in14);\n    let t909 = circuit_mul(t902, t908);\n    let t910 = circuit_sub(in203, in14);\n    let t911 = circuit_mul(in2, t910);\n    let t912 = circuit_inverse(t911);\n    let t913 = circuit_mul(in141, t912);\n    let t914 = circuit_add(t907, t913);\n    let t915 = circuit_mul(t914, t909);\n    let t916 = circuit_sub(t847, in0);\n    let t917 = circuit_mul(in203, t916);\n    let t918 = circuit_add(in0, t917);\n    let t919 = circuit_mul(t845, t918);\n    let t920 = circuit_mul(t846, in211);\n    let t921 = circuit_mul(t847, t847);\n    let t922 = circuit_add(in142, in143);\n    let t923 = circuit_sub(t922, t915);\n    let t924 = circuit_mul(t923, t920);\n    let t925 = circuit_add(t851, t924);\n    let t926 = circuit_sub(in204, in7);\n    let t927 = circuit_mul(in0, t926);\n    let t928 = circuit_sub(in204, in7);\n    let t929 = circuit_mul(in2, t928);\n    let t930 = circuit_inverse(t929);\n    let t931 = circuit_mul(in142, t930);\n    let t932 = circuit_add(in7, t931);\n    let t933 = circuit_sub(in204, in0);\n    let t934 = circuit_mul(t927, t933);\n    let t935 = circuit_sub(in204, in0);\n    let t936 = circuit_mul(in3, t935);\n    let t937 = circuit_inverse(t936);\n    let t938 = circuit_mul(in143, t937);\n    let t939 = circuit_add(t932, t938);\n    let t940 = circuit_sub(in204, in8);\n    let t941 = circuit_mul(t934, t940);\n    let t942 = circuit_sub(in204, in8);\n    let t943 = circuit_mul(in4, t942);\n    let t944 = circuit_inverse(t943);\n    let t945 = circuit_mul(in144, t944);\n    let t946 = circuit_add(t939, t945);\n    let t947 = circuit_sub(in204, in9);\n    let t948 = circuit_mul(t941, t947);\n    let t949 = circuit_sub(in204, in9);\n    let t950 = circuit_mul(in5, t949);\n    let t951 = circuit_inverse(t950);\n    let t952 = circuit_mul(in145, t951);\n    let t953 = circuit_add(t946, t952);\n    let t954 = circuit_sub(in204, in10);\n    let t955 = circuit_mul(t948, t954);\n    let t956 = circuit_sub(in204, in10);\n    let t957 = circuit_mul(in6, t956);\n    let t958 = circuit_inverse(t957);\n    let t959 = circuit_mul(in146, t958);\n    let t960 = circuit_add(t953, t959);\n    let t961 = circuit_sub(in204, in11);\n    let t962 = circuit_mul(t955, t961);\n    let t963 = circuit_sub(in204, in11);\n    let t964 = circuit_mul(in5, t963);\n    let t965 = circuit_inverse(t964);\n    let t966 = circuit_mul(in147, t965);\n    let t967 = circuit_add(t960, t966);\n    let t968 = circuit_sub(in204, in12);\n    let t969 = circuit_mul(t962, t968);\n    let t970 = circuit_sub(in204, in12);\n    let t971 = circuit_mul(in4, t970);\n    let t972 = circuit_inverse(t971);\n    let t973 = circuit_mul(in148, t972);\n    let t974 = circuit_add(t967, t973);\n    let t975 = circuit_sub(in204, in13);\n    let t976 = circuit_mul(t969, t975);\n    let t977 = circuit_sub(in204, in13);\n    let t978 = circuit_mul(in3, t977);\n    let t979 = circuit_inverse(t978);\n    let t980 = circuit_mul(in149, t979);\n    let t981 = circuit_add(t974, t980);\n    let t982 = circuit_sub(in204, in14);\n    let t983 = circuit_mul(t976, t982);\n    let t984 = circuit_sub(in204, in14);\n    let t985 = circuit_mul(in2, t984);\n    let t986 = circuit_inverse(t985);\n    let t987 = circuit_mul(in150, t986);\n    let t988 = circuit_add(t981, t987);\n    let t989 = circuit_mul(t988, t983);\n    let t990 = circuit_sub(t921, in0);\n    let t991 = circuit_mul(in204, t990);\n    let t992 = circuit_add(in0, t991);\n    let t993 = circuit_mul(t919, t992);\n    let t994 = circuit_sub(in158, in9);\n    let t995 = circuit_mul(t994, in151);\n    let t996 = circuit_mul(t995, in180);\n    let t997 = circuit_mul(t996, in179);\n    let t998 = circuit_mul(t997, in15);\n    let t999 = circuit_mul(in153, in179);\n    let t1000 = circuit_mul(in154, in180);\n    let t1001 = circuit_mul(in155, in181);\n    let t1002 = circuit_mul(in156, in182);\n    let t1003 = circuit_add(t998, t999);\n    let t1004 = circuit_add(t1003, t1000);\n    let t1005 = circuit_add(t1004, t1001);\n    let t1006 = circuit_add(t1005, t1002);\n    let t1007 = circuit_add(t1006, in152);\n    let t1008 = circuit_sub(in158, in0);\n    let t1009 = circuit_mul(t1008, in190);\n    let t1010 = circuit_add(t1007, t1009);\n    let t1011 = circuit_mul(t1010, in158);\n    let t1012 = circuit_mul(t1011, t993);\n    let t1013 = circuit_add(in179, in182);\n    let t1014 = circuit_add(t1013, in151);\n    let t1015 = circuit_sub(t1014, in187);\n    let t1016 = circuit_sub(in158, in8);\n    let t1017 = circuit_mul(t1015, t1016);\n    let t1018 = circuit_sub(in158, in0);\n    let t1019 = circuit_mul(t1017, t1018);\n    let t1020 = circuit_mul(t1019, in158);\n    let t1021 = circuit_mul(t1020, t993);\n    let t1022 = circuit_mul(in169, in209);\n    let t1023 = circuit_add(in179, t1022);\n    let t1024 = circuit_add(t1023, in210);\n    let t1025 = circuit_mul(in170, in209);\n    let t1026 = circuit_add(in180, t1025);\n    let t1027 = circuit_add(t1026, in210);\n    let t1028 = circuit_mul(t1024, t1027);\n    let t1029 = circuit_mul(in171, in209);\n    let t1030 = circuit_add(in181, t1029);\n    let t1031 = circuit_add(t1030, in210);\n    let t1032 = circuit_mul(t1028, t1031);\n    let t1033 = circuit_mul(in172, in209);\n    let t1034 = circuit_add(in182, t1033);\n    let t1035 = circuit_add(t1034, in210);\n    let t1036 = circuit_mul(t1032, t1035);\n    let t1037 = circuit_mul(in165, in209);\n    let t1038 = circuit_add(in179, t1037);\n    let t1039 = circuit_add(t1038, in210);\n    let t1040 = circuit_mul(in166, in209);\n    let t1041 = circuit_add(in180, t1040);\n    let t1042 = circuit_add(t1041, in210);\n    let t1043 = circuit_mul(t1039, t1042);\n    let t1044 = circuit_mul(in167, in209);\n    let t1045 = circuit_add(in181, t1044);\n    let t1046 = circuit_add(t1045, in210);\n    let t1047 = circuit_mul(t1043, t1046);\n    let t1048 = circuit_mul(in168, in209);\n    let t1049 = circuit_add(in182, t1048);\n    let t1050 = circuit_add(t1049, in210);\n    let t1051 = circuit_mul(t1047, t1050);\n    let t1052 = circuit_add(in183, in177);\n    let t1053 = circuit_mul(t1036, t1052);\n    let t1054 = circuit_mul(in178, t107);\n    let t1055 = circuit_add(in191, t1054);\n    let t1056 = circuit_mul(t1051, t1055);\n    let t1057 = circuit_sub(t1053, t1056);\n    let t1058 = circuit_mul(t1057, t993);\n    let t1059 = circuit_mul(in178, in191);\n    let t1060 = circuit_mul(t1059, t993);\n    let t1061 = circuit_mul(in174, in206);\n    let t1062 = circuit_mul(in175, in207);\n    let t1063 = circuit_mul(in176, in208);\n    let t1064 = circuit_add(in173, in210);\n    let t1065 = circuit_add(t1064, t1061);\n    let t1066 = circuit_add(t1065, t1062);\n    let t1067 = circuit_add(t1066, t1063);\n    let t1068 = circuit_mul(in154, in187);\n    let t1069 = circuit_add(in179, in210);\n    let t1070 = circuit_add(t1069, t1068);\n    let t1071 = circuit_mul(in151, in188);\n    let t1072 = circuit_add(in180, t1071);\n    let t1073 = circuit_mul(in152, in189);\n    let t1074 = circuit_add(in181, t1073);\n    let t1075 = circuit_mul(t1072, in206);\n    let t1076 = circuit_mul(t1074, in207);\n    let t1077 = circuit_mul(in155, in208);\n    let t1078 = circuit_add(t1070, t1075);\n    let t1079 = circuit_add(t1078, t1076);\n    let t1080 = circuit_add(t1079, t1077);\n    let t1081 = circuit_mul(in184, t1067);\n    let t1082 = circuit_mul(in184, t1080);\n    let t1083 = circuit_add(in186, in157);\n    let t1084 = circuit_mul(in186, in157);\n    let t1085 = circuit_sub(t1083, t1084);\n    let t1086 = circuit_mul(t1080, t1067);\n    let t1087 = circuit_mul(t1086, in184);\n    let t1088 = circuit_sub(t1087, t1085);\n    let t1089 = circuit_mul(t1088, t993);\n    let t1090 = circuit_mul(in157, t1081);\n    let t1091 = circuit_mul(in185, t1082);\n    let t1092 = circuit_sub(t1090, t1091);\n    let t1093 = circuit_mul(in186, in186);\n    let t1094 = circuit_sub(t1093, in186);\n    let t1095 = circuit_mul(t1094, t993);\n    let t1096 = circuit_mul(in159, t993);\n    let t1097 = circuit_sub(in180, in179);\n    let t1098 = circuit_sub(in181, in180);\n    let t1099 = circuit_sub(in182, in181);\n    let t1100 = circuit_sub(in187, in182);\n    let t1101 = circuit_add(t1097, in16);\n    let t1102 = circuit_add(t1101, in16);\n    let t1103 = circuit_add(t1102, in16);\n    let t1104 = circuit_mul(t1097, t1101);\n    let t1105 = circuit_mul(t1104, t1102);\n    let t1106 = circuit_mul(t1105, t1103);\n    let t1107 = circuit_mul(t1106, t1096);\n    let t1108 = circuit_add(t1098, in16);\n    let t1109 = circuit_add(t1108, in16);\n    let t1110 = circuit_add(t1109, in16);\n    let t1111 = circuit_mul(t1098, t1108);\n    let t1112 = circuit_mul(t1111, t1109);\n    let t1113 = circuit_mul(t1112, t1110);\n    let t1114 = circuit_mul(t1113, t1096);\n    let t1115 = circuit_add(t1099, in16);\n    let t1116 = circuit_add(t1115, in16);\n    let t1117 = circuit_add(t1116, in16);\n    let t1118 = circuit_mul(t1099, t1115);\n    let t1119 = circuit_mul(t1118, t1116);\n    let t1120 = circuit_mul(t1119, t1117);\n    let t1121 = circuit_mul(t1120, t1096);\n    let t1122 = circuit_add(t1100, in16);\n    let t1123 = circuit_add(t1122, in16);\n    let t1124 = circuit_add(t1123, in16);\n    let t1125 = circuit_mul(t1100, t1122);\n    let t1126 = circuit_mul(t1125, t1123);\n    let t1127 = circuit_mul(t1126, t1124);\n    let t1128 = circuit_mul(t1127, t1096);\n    let t1129 = circuit_sub(in187, in180);\n    let t1130 = circuit_mul(in181, in181);\n    let t1131 = circuit_mul(in190, in190);\n    let t1132 = circuit_mul(in181, in190);\n    let t1133 = circuit_mul(t1132, in153);\n    let t1134 = circuit_add(in188, in187);\n    let t1135 = circuit_add(t1134, in180);\n    let t1136 = circuit_mul(t1135, t1129);\n    let t1137 = circuit_mul(t1136, t1129);\n    let t1138 = circuit_sub(t1137, t1131);\n    let t1139 = circuit_sub(t1138, t1130);\n    let t1140 = circuit_add(t1139, t1133);\n    let t1141 = circuit_add(t1140, t1133);\n    let t1142 = circuit_sub(in0, in151);\n    let t1143 = circuit_mul(t1141, t993);\n    let t1144 = circuit_mul(t1143, in160);\n    let t1145 = circuit_mul(t1144, t1142);\n    let t1146 = circuit_add(in181, in189);\n    let t1147 = circuit_mul(in190, in153);\n    let t1148 = circuit_sub(t1147, in181);\n    let t1149 = circuit_mul(t1146, t1129);\n    let t1150 = circuit_sub(in188, in180);\n    let t1151 = circuit_mul(t1150, t1148);\n    let t1152 = circuit_add(t1149, t1151);\n    let t1153 = circuit_mul(t1152, t993);\n    let t1154 = circuit_mul(t1153, in160);\n    let t1155 = circuit_mul(t1154, t1142);\n    let t1156 = circuit_add(t1130, in17);\n    let t1157 = circuit_mul(t1156, in180);\n    let t1158 = circuit_add(t1130, t1130);\n    let t1159 = circuit_add(t1158, t1158);\n    let t1160 = circuit_mul(t1157, in18);\n    let t1161 = circuit_add(in188, in180);\n    let t1162 = circuit_add(t1161, in180);\n    let t1163 = circuit_mul(t1162, t1159);\n    let t1164 = circuit_sub(t1163, t1160);\n    let t1165 = circuit_mul(t1164, t993);\n    let t1166 = circuit_mul(t1165, in160);\n    let t1167 = circuit_mul(t1166, in151);\n    let t1168 = circuit_add(t1145, t1167);\n    let t1169 = circuit_add(in180, in180);\n    let t1170 = circuit_add(t1169, in180);\n    let t1171 = circuit_mul(t1170, in180);\n    let t1172 = circuit_sub(in180, in188);\n    let t1173 = circuit_mul(t1171, t1172);\n    let t1174 = circuit_add(in181, in181);\n    let t1175 = circuit_add(in181, in189);\n    let t1176 = circuit_mul(t1174, t1175);\n    let t1177 = circuit_sub(t1173, t1176);\n    let t1178 = circuit_mul(t1177, t993);\n    let t1179 = circuit_mul(t1178, in160);\n    let t1180 = circuit_mul(t1179, in151);\n    let t1181 = circuit_add(t1155, t1180);\n    let t1182 = circuit_mul(in181, in208);\n    let t1183 = circuit_mul(in180, in207);\n    let t1184 = circuit_add(t1182, t1183);\n    let t1185 = circuit_mul(in179, in206);\n    let t1186 = circuit_add(t1184, t1185);\n    let t1187 = circuit_add(t1186, in152);\n    let t1188 = circuit_sub(t1187, in182);\n    let t1189 = circuit_sub(in187, in179);\n    let t1190 = circuit_sub(in190, in182);\n    let t1191 = circuit_sub(t1189, in0);\n    let t1192 = circuit_mul(t1189, t1191);\n    let t1193 = circuit_mul(t1189, in16);\n    let t1194 = circuit_add(t1193, in0);\n    let t1195 = circuit_mul(t1194, t1190);\n    let t1196 = circuit_mul(in153, in154);\n    let t1197 = circuit_mul(in161, t993);\n    let t1198 = circuit_mul(t1196, t1197);\n    let t1199 = circuit_mul(t1195, t1198);\n    let t1200 = circuit_mul(t1192, t1198);\n    let t1201 = circuit_mul(t1188, t1196);\n    let t1202 = circuit_sub(in182, t1187);\n    let t1203 = circuit_sub(t1202, in0);\n    let t1204 = circuit_mul(t1202, t1203);\n    let t1205 = circuit_mul(in189, in208);\n    let t1206 = circuit_mul(in188, in207);\n    let t1207 = circuit_mul(in187, in206);\n    let t1208 = circuit_add(t1205, t1206);\n    let t1209 = circuit_add(t1208, t1207);\n    let t1210 = circuit_sub(in190, t1209);\n    let t1211 = circuit_sub(in189, in181);\n    let t1212 = circuit_mul(t1189, in16);\n    let t1213 = circuit_add(t1212, in0);\n    let t1214 = circuit_mul(t1210, in16);\n    let t1215 = circuit_add(t1214, in0);\n    let t1216 = circuit_mul(t1213, t1211);\n    let t1217 = circuit_mul(t1216, t1215);\n    let t1218 = circuit_mul(t1210, t1210);\n    let t1219 = circuit_sub(t1218, t1210);\n    let t1220 = circuit_mul(in155, t1197);\n    let t1221 = circuit_mul(t1217, t1220);\n    let t1222 = circuit_mul(t1192, t1220);\n    let t1223 = circuit_mul(t1219, t1220);\n    let t1224 = circuit_mul(t1204, in155);\n    let t1225 = circuit_sub(in188, in180);\n    let t1226 = circuit_mul(t1189, in16);\n    let t1227 = circuit_add(t1226, in0);\n    let t1228 = circuit_mul(t1227, t1225);\n    let t1229 = circuit_sub(t1228, in181);\n    let t1230 = circuit_mul(in156, in153);\n    let t1231 = circuit_mul(t1229, t1230);\n    let t1232 = circuit_mul(in151, in153);\n    let t1233 = circuit_mul(t1188, t1232);\n    let t1234 = circuit_add(t1201, t1231);\n    let t1235 = circuit_add(t1234, t1233);\n    let t1236 = circuit_add(t1235, t1224);\n    let t1237 = circuit_mul(t1236, t1197);\n    let t1238 = circuit_mul(in179, in188);\n    let t1239 = circuit_mul(in187, in180);\n    let t1240 = circuit_add(t1238, t1239);\n    let t1241 = circuit_mul(in179, in182);\n    let t1242 = circuit_mul(in180, in181);\n    let t1243 = circuit_add(t1241, t1242);\n    let t1244 = circuit_sub(t1243, in189);\n    let t1245 = circuit_mul(t1244, in19);\n    let t1246 = circuit_sub(t1245, in190);\n    let t1247 = circuit_add(t1246, t1240);\n    let t1248 = circuit_mul(t1247, in156);\n    let t1249 = circuit_mul(t1240, in19);\n    let t1250 = circuit_mul(in187, in188);\n    let t1251 = circuit_add(t1249, t1250);\n    let t1252 = circuit_add(in181, in182);\n    let t1253 = circuit_sub(t1251, t1252);\n    let t1254 = circuit_mul(t1253, in155);\n    let t1255 = circuit_add(t1251, in182);\n    let t1256 = circuit_add(in189, in190);\n    let t1257 = circuit_sub(t1255, t1256);\n    let t1258 = circuit_mul(t1257, in151);\n    let t1259 = circuit_add(t1254, t1248);\n    let t1260 = circuit_add(t1259, t1258);\n    let t1261 = circuit_mul(t1260, in154);\n    let t1262 = circuit_mul(in188, in20);\n    let t1263 = circuit_add(t1262, in187);\n    let t1264 = circuit_mul(t1263, in20);\n    let t1265 = circuit_add(t1264, in181);\n    let t1266 = circuit_mul(t1265, in20);\n    let t1267 = circuit_add(t1266, in180);\n    let t1268 = circuit_mul(t1267, in20);\n    let t1269 = circuit_add(t1268, in179);\n    let t1270 = circuit_sub(t1269, in182);\n    let t1271 = circuit_mul(t1270, in156);\n    let t1272 = circuit_mul(in189, in20);\n    let t1273 = circuit_add(t1272, in188);\n    let t1274 = circuit_mul(t1273, in20);\n    let t1275 = circuit_add(t1274, in187);\n    let t1276 = circuit_mul(t1275, in20);\n    let t1277 = circuit_add(t1276, in182);\n    let t1278 = circuit_mul(t1277, in20);\n    let t1279 = circuit_add(t1278, in181);\n    let t1280 = circuit_sub(t1279, in190);\n    let t1281 = circuit_mul(t1280, in151);\n    let t1282 = circuit_add(t1271, t1281);\n    let t1283 = circuit_mul(t1282, in155);\n    let t1284 = circuit_add(t1261, t1283);\n    let t1285 = circuit_mul(t1284, in162);\n    let t1286 = circuit_mul(t1285, t993);\n    let t1287 = circuit_add(in179, in153);\n    let t1288 = circuit_add(in180, in154);\n    let t1289 = circuit_add(in181, in155);\n    let t1290 = circuit_add(in182, in156);\n    let t1291 = circuit_mul(t1287, t1287);\n    let t1292 = circuit_mul(t1291, t1291);\n    let t1293 = circuit_mul(t1292, t1287);\n    let t1294 = circuit_mul(t1288, t1288);\n    let t1295 = circuit_mul(t1294, t1294);\n    let t1296 = circuit_mul(t1295, t1288);\n    let t1297 = circuit_mul(t1289, t1289);\n    let t1298 = circuit_mul(t1297, t1297);\n    let t1299 = circuit_mul(t1298, t1289);\n    let t1300 = circuit_mul(t1290, t1290);\n    let t1301 = circuit_mul(t1300, t1300);\n    let t1302 = circuit_mul(t1301, t1290);\n    let t1303 = circuit_add(t1293, t1296);\n    let t1304 = circuit_add(t1299, t1302);\n    let t1305 = circuit_add(t1296, t1296);\n    let t1306 = circuit_add(t1305, t1304);\n    let t1307 = circuit_add(t1302, t1302);\n    let t1308 = circuit_add(t1307, t1303);\n    let t1309 = circuit_add(t1304, t1304);\n    let t1310 = circuit_add(t1309, t1309);\n    let t1311 = circuit_add(t1310, t1308);\n    let t1312 = circuit_add(t1303, t1303);\n    let t1313 = circuit_add(t1312, t1312);\n    let t1314 = circuit_add(t1313, t1306);\n    let t1315 = circuit_add(t1308, t1314);\n    let t1316 = circuit_add(t1306, t1311);\n    let t1317 = circuit_mul(in163, t993);\n    let t1318 = circuit_sub(t1315, in187);\n    let t1319 = circuit_mul(t1317, t1318);\n    let t1320 = circuit_sub(t1314, in188);\n    let t1321 = circuit_mul(t1317, t1320);\n    let t1322 = circuit_sub(t1316, in189);\n    let t1323 = circuit_mul(t1317, t1322);\n    let t1324 = circuit_sub(t1311, in190);\n    let t1325 = circuit_mul(t1317, t1324);\n    let t1326 = circuit_add(in179, in153);\n    let t1327 = circuit_mul(t1326, t1326);\n    let t1328 = circuit_mul(t1327, t1327);\n    let t1329 = circuit_mul(t1328, t1326);\n    let t1330 = circuit_add(t1329, in180);\n    let t1331 = circuit_add(t1330, in181);\n    let t1332 = circuit_add(t1331, in182);\n    let t1333 = circuit_mul(in164, t993);\n    let t1334 = circuit_mul(t1329, in21);\n    let t1335 = circuit_add(t1334, t1332);\n    let t1336 = circuit_sub(t1335, in187);\n    let t1337 = circuit_mul(t1333, t1336);\n    let t1338 = circuit_mul(in180, in22);\n    let t1339 = circuit_add(t1338, t1332);\n    let t1340 = circuit_sub(t1339, in188);\n    let t1341 = circuit_mul(t1333, t1340);\n    let t1342 = circuit_mul(in181, in23);\n    let t1343 = circuit_add(t1342, t1332);\n    let t1344 = circuit_sub(t1343, in189);\n    let t1345 = circuit_mul(t1333, t1344);\n    let t1346 = circuit_mul(in182, in24);\n    let t1347 = circuit_add(t1346, t1332);\n    let t1348 = circuit_sub(t1347, in190);\n    let t1349 = circuit_mul(t1333, t1348);\n    let t1350 = circuit_mul(t1021, in212);\n    let t1351 = circuit_add(t1012, t1350);\n    let t1352 = circuit_mul(in212, in212);\n    let t1353 = circuit_mul(t1058, t1352);\n    let t1354 = circuit_add(t1351, t1353);\n    let t1355 = circuit_mul(t1352, in212);\n    let t1356 = circuit_mul(t1060, t1355);\n    let t1357 = circuit_add(t1354, t1356);\n    let t1358 = circuit_mul(t1355, in212);\n    let t1359 = circuit_mul(t1089, t1358);\n    let t1360 = circuit_add(t1357, t1359);\n    let t1361 = circuit_mul(t1358, in212);\n    let t1362 = circuit_mul(t1092, t1361);\n    let t1363 = circuit_add(t1360, t1362);\n    let t1364 = circuit_mul(t1361, in212);\n    let t1365 = circuit_mul(t1095, t1364);\n    let t1366 = circuit_add(t1363, t1365);\n    let t1367 = circuit_mul(t1364, in212);\n    let t1368 = circuit_mul(t1107, t1367);\n    let t1369 = circuit_add(t1366, t1368);\n    let t1370 = circuit_mul(t1367, in212);\n    let t1371 = circuit_mul(t1114, t1370);\n    let t1372 = circuit_add(t1369, t1371);\n    let t1373 = circuit_mul(t1370, in212);\n    let t1374 = circuit_mul(t1121, t1373);\n    let t1375 = circuit_add(t1372, t1374);\n    let t1376 = circuit_mul(t1373, in212);\n    let t1377 = circuit_mul(t1128, t1376);\n    let t1378 = circuit_add(t1375, t1377);\n    let t1379 = circuit_mul(t1376, in212);\n    let t1380 = circuit_mul(t1168, t1379);\n    let t1381 = circuit_add(t1378, t1380);\n    let t1382 = circuit_mul(t1379, in212);\n    let t1383 = circuit_mul(t1181, t1382);\n    let t1384 = circuit_add(t1381, t1383);\n    let t1385 = circuit_mul(t1382, in212);\n    let t1386 = circuit_mul(t1237, t1385);\n    let t1387 = circuit_add(t1384, t1386);\n    let t1388 = circuit_mul(t1385, in212);\n    let t1389 = circuit_mul(t1199, t1388);\n    let t1390 = circuit_add(t1387, t1389);\n    let t1391 = circuit_mul(t1388, in212);\n    let t1392 = circuit_mul(t1200, t1391);\n    let t1393 = circuit_add(t1390, t1392);\n    let t1394 = circuit_mul(t1391, in212);\n    let t1395 = circuit_mul(t1221, t1394);\n    let t1396 = circuit_add(t1393, t1395);\n    let t1397 = circuit_mul(t1394, in212);\n    let t1398 = circuit_mul(t1222, t1397);\n    let t1399 = circuit_add(t1396, t1398);\n    let t1400 = circuit_mul(t1397, in212);\n    let t1401 = circuit_mul(t1223, t1400);\n    let t1402 = circuit_add(t1399, t1401);\n    let t1403 = circuit_mul(t1400, in212);\n    let t1404 = circuit_mul(t1286, t1403);\n    let t1405 = circuit_add(t1402, t1404);\n    let t1406 = circuit_mul(t1403, in212);\n    let t1407 = circuit_mul(t1319, t1406);\n    let t1408 = circuit_add(t1405, t1407);\n    let t1409 = circuit_mul(t1406, in212);\n    let t1410 = circuit_mul(t1321, t1409);\n    let t1411 = circuit_add(t1408, t1410);\n    let t1412 = circuit_mul(t1409, in212);\n    let t1413 = circuit_mul(t1323, t1412);\n    let t1414 = circuit_add(t1411, t1413);\n    let t1415 = circuit_mul(t1412, in212);\n    let t1416 = circuit_mul(t1325, t1415);\n    let t1417 = circuit_add(t1414, t1416);\n    let t1418 = circuit_mul(t1415, in212);\n    let t1419 = circuit_mul(t1337, t1418);\n    let t1420 = circuit_add(t1417, t1419);\n    let t1421 = circuit_mul(t1418, in212);\n    let t1422 = circuit_mul(t1341, t1421);\n    let t1423 = circuit_add(t1420, t1422);\n    let t1424 = circuit_mul(t1421, in212);\n    let t1425 = circuit_mul(t1345, t1424);\n    let t1426 = circuit_add(t1423, t1425);\n    let t1427 = circuit_mul(t1424, in212);\n    let t1428 = circuit_mul(t1349, t1427);\n    let t1429 = circuit_add(t1426, t1428);\n    let t1430 = circuit_mul(in195, in196);\n    let t1431 = circuit_mul(t1430, in197);\n    let t1432 = circuit_mul(t1431, in198);\n    let t1433 = circuit_mul(t1432, in199);\n    let t1434 = circuit_mul(t1433, in200);\n    let t1435 = circuit_mul(t1434, in201);\n    let t1436 = circuit_mul(t1435, in202);\n    let t1437 = circuit_mul(t1436, in203);\n    let t1438 = circuit_mul(t1437, in204);\n    let t1439 = circuit_sub(in0, t1438);\n    let t1440 = circuit_mul(t1429, t1439);\n    let t1441 = circuit_mul(in192, in213);\n    let t1442 = circuit_add(t1440, t1441);\n    let t1443 = circuit_sub(t1442, t989);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t925, t1443).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(ZK_HONK_SUMCHECK_SIZE_12_PUB_17_GRUMPKIN_CONSTANTS.span()); // in0 - in24\n\n    // Fill inputs:\n\n    for val in p_public_inputs {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in25 - in25\n\n    for val in p_pairing_point_object {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in26 - in41\n\n    circuit_inputs = circuit_inputs.next_2(libra_sum); // in42\n\n    for val in sumcheck_univariates_flat {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in43 - in150\n\n    for val in sumcheck_evaluations {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in151 - in191\n\n    circuit_inputs = circuit_inputs.next_2(libra_evaluation); // in192\n\n    for val in tp_sum_check_u_challenges {\n        circuit_inputs = circuit_inputs.next_u128(*val);\n    } // in193 - in204\n\n    circuit_inputs = circuit_inputs.next_u128(tp_gate_challenge); // in205\n    circuit_inputs = circuit_inputs.next_2(tp_eta_1); // in206\n    circuit_inputs = circuit_inputs.next_2(tp_eta_2); // in207\n    circuit_inputs = circuit_inputs.next_2(tp_eta_3); // in208\n    circuit_inputs = circuit_inputs.next_2(tp_beta); // in209\n    circuit_inputs = circuit_inputs.next_2(tp_gamma); // in210\n    circuit_inputs = circuit_inputs.next_2(tp_base_rlc); // in211\n    circuit_inputs = circuit_inputs.next_u128(tp_alpha); // in212\n    circuit_inputs = circuit_inputs.next_2(tp_libra_challenge); // in213\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let check_rlc: u384 = outputs.get_output(t925);\n    let check: u384 = outputs.get_output(t1443);\n    return (check_rlc, check);\n}\nconst ZK_HONK_SUMCHECK_SIZE_12_PUB_17_GRUMPKIN_CONSTANTS: [u384; 25] = [\n    u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x10000000, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x9d80, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x79b9709143e1f593efffec51,\n        limb1: 0xb85045b68181585d2833e848,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 { limb0: 0x5a0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x79b9709143e1f593effffd31,\n        limb1: 0xb85045b68181585d2833e848,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 { limb0: 0x240, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x2, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x3, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x4, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x5, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x6, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x7, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x8, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x3cdcb848a1f0fac9f8000000,\n        limb1: 0xdc2822db40c0ac2e9419f424,\n        limb2: 0x183227397098d014,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x79b9709143e1f593f0000000,\n        limb1: 0xb85045b68181585d2833e848,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 { limb0: 0x11, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x9, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x100000000000000000, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x4000, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x29ca1d7fb56821fd19d3b6e7,\n        limb1: 0x4b1e03b4bd9490c0d03f989,\n        limb2: 0x10dc6e9c006ea38b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd4dd9b84a86b38cfb45a740b,\n        limb1: 0x149b3d0a30b3bb599df9756,\n        limb2: 0xc28145b6a44df3e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x60e3596170067d00141cac15,\n        limb1: 0xb2c7645a50392798b21f75bb,\n        limb2: 0x544b8338791518,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb8fa852613bc534433ee428b,\n        limb1: 0x2e2e82eb122789e352e105a3,\n        limb2: 0x222c01175718386f,\n        limb3: 0x0,\n    },\n];\n#[inline(always)]\npub fn run_GRUMPKIN_ZKHONK_PREP_MSM_SCALARS_SIZE_12_circuit(\n    p_sumcheck_evaluations: Span<u256>,\n    p_gemini_masking_eval: u384,\n    p_gemini_a_evaluations: Span<u256>,\n    p_libra_poly_evals: Span<u256>,\n    tp_gemini_r: u384,\n    tp_rho: u384,\n    tp_shplonk_z: u384,\n    tp_shplonk_nu: u384,\n    tp_sum_check_u_challenges: Span<u128>,\n    modulus: core::circuit::CircuitModulus,\n) -> (\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x1\n    let in2 = CE::<CI<2>> {}; // 0x7b0c561a6148404f086204a9f36ffb0617942546750f230c893619174a57a76\n\n    // INPUT stack\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let (in24, in25, in26) = (CE::<CI<24>> {}, CE::<CI<25>> {}, CE::<CI<26>> {});\n    let (in27, in28, in29) = (CE::<CI<27>> {}, CE::<CI<28>> {}, CE::<CI<29>> {});\n    let (in30, in31, in32) = (CE::<CI<30>> {}, CE::<CI<31>> {}, CE::<CI<32>> {});\n    let (in33, in34, in35) = (CE::<CI<33>> {}, CE::<CI<34>> {}, CE::<CI<35>> {});\n    let (in36, in37, in38) = (CE::<CI<36>> {}, CE::<CI<37>> {}, CE::<CI<38>> {});\n    let (in39, in40, in41) = (CE::<CI<39>> {}, CE::<CI<40>> {}, CE::<CI<41>> {});\n    let (in42, in43, in44) = (CE::<CI<42>> {}, CE::<CI<43>> {}, CE::<CI<44>> {});\n    let (in45, in46, in47) = (CE::<CI<45>> {}, CE::<CI<46>> {}, CE::<CI<47>> {});\n    let (in48, in49, in50) = (CE::<CI<48>> {}, CE::<CI<49>> {}, CE::<CI<50>> {});\n    let (in51, in52, in53) = (CE::<CI<51>> {}, CE::<CI<52>> {}, CE::<CI<53>> {});\n    let (in54, in55, in56) = (CE::<CI<54>> {}, CE::<CI<55>> {}, CE::<CI<56>> {});\n    let (in57, in58, in59) = (CE::<CI<57>> {}, CE::<CI<58>> {}, CE::<CI<59>> {});\n    let (in60, in61, in62) = (CE::<CI<60>> {}, CE::<CI<61>> {}, CE::<CI<62>> {});\n    let (in63, in64, in65) = (CE::<CI<63>> {}, CE::<CI<64>> {}, CE::<CI<65>> {});\n    let (in66, in67, in68) = (CE::<CI<66>> {}, CE::<CI<67>> {}, CE::<CI<68>> {});\n    let (in69, in70, in71) = (CE::<CI<69>> {}, CE::<CI<70>> {}, CE::<CI<71>> {});\n    let (in72, in73, in74) = (CE::<CI<72>> {}, CE::<CI<73>> {}, CE::<CI<74>> {});\n    let (in75, in76) = (CE::<CI<75>> {}, CE::<CI<76>> {});\n    let t0 = circuit_mul(in61, in61);\n    let t1 = circuit_mul(t0, t0);\n    let t2 = circuit_mul(t1, t1);\n    let t3 = circuit_mul(t2, t2);\n    let t4 = circuit_mul(t3, t3);\n    let t5 = circuit_mul(t4, t4);\n    let t6 = circuit_mul(t5, t5);\n    let t7 = circuit_mul(t6, t6);\n    let t8 = circuit_mul(t7, t7);\n    let t9 = circuit_mul(t8, t8);\n    let t10 = circuit_mul(t9, t9);\n    let t11 = circuit_sub(in63, in61);\n    let t12 = circuit_inverse(t11);\n    let t13 = circuit_add(in63, in61);\n    let t14 = circuit_inverse(t13);\n    let t15 = circuit_mul(in64, t14);\n    let t16 = circuit_add(t12, t15);\n    let t17 = circuit_inverse(in61);\n    let t18 = circuit_mul(in64, t14);\n    let t19 = circuit_sub(t12, t18);\n    let t20 = circuit_mul(t17, t19);\n    let t21 = circuit_sub(in0, t20);\n    let t22 = circuit_sub(in0, t16);\n    let t23 = circuit_mul(t22, in62);\n    let t24 = circuit_mul(in3, in62);\n    let t25 = circuit_add(in44, t24);\n    let t26 = circuit_mul(in62, in62);\n    let t27 = circuit_mul(t22, t26);\n    let t28 = circuit_mul(in4, t26);\n    let t29 = circuit_add(t25, t28);\n    let t30 = circuit_mul(t26, in62);\n    let t31 = circuit_mul(t22, t30);\n    let t32 = circuit_mul(in5, t30);\n    let t33 = circuit_add(t29, t32);\n    let t34 = circuit_mul(t30, in62);\n    let t35 = circuit_mul(t22, t34);\n    let t36 = circuit_mul(in6, t34);\n    let t37 = circuit_add(t33, t36);\n    let t38 = circuit_mul(t34, in62);\n    let t39 = circuit_mul(t22, t38);\n    let t40 = circuit_mul(in7, t38);\n    let t41 = circuit_add(t37, t40);\n    let t42 = circuit_mul(t38, in62);\n    let t43 = circuit_mul(t22, t42);\n    let t44 = circuit_mul(in8, t42);\n    let t45 = circuit_add(t41, t44);\n    let t46 = circuit_mul(t42, in62);\n    let t47 = circuit_mul(t22, t46);\n    let t48 = circuit_mul(in9, t46);\n    let t49 = circuit_add(t45, t48);\n    let t50 = circuit_mul(t46, in62);\n    let t51 = circuit_mul(t22, t50);\n    let t52 = circuit_mul(in10, t50);\n    let t53 = circuit_add(t49, t52);\n    let t54 = circuit_mul(t50, in62);\n    let t55 = circuit_mul(t22, t54);\n    let t56 = circuit_mul(in11, t54);\n    let t57 = circuit_add(t53, t56);\n    let t58 = circuit_mul(t54, in62);\n    let t59 = circuit_mul(t22, t58);\n    let t60 = circuit_mul(in12, t58);\n    let t61 = circuit_add(t57, t60);\n    let t62 = circuit_mul(t58, in62);\n    let t63 = circuit_mul(t22, t62);\n    let t64 = circuit_mul(in13, t62);\n    let t65 = circuit_add(t61, t64);\n    let t66 = circuit_mul(t62, in62);\n    let t67 = circuit_mul(t22, t66);\n    let t68 = circuit_mul(in14, t66);\n    let t69 = circuit_add(t65, t68);\n    let t70 = circuit_mul(t66, in62);\n    let t71 = circuit_mul(t22, t70);\n    let t72 = circuit_mul(in15, t70);\n    let t73 = circuit_add(t69, t72);\n    let t74 = circuit_mul(t70, in62);\n    let t75 = circuit_mul(t22, t74);\n    let t76 = circuit_mul(in16, t74);\n    let t77 = circuit_add(t73, t76);\n    let t78 = circuit_mul(t74, in62);\n    let t79 = circuit_mul(t22, t78);\n    let t80 = circuit_mul(in17, t78);\n    let t81 = circuit_add(t77, t80);\n    let t82 = circuit_mul(t78, in62);\n    let t83 = circuit_mul(t22, t82);\n    let t84 = circuit_mul(in18, t82);\n    let t85 = circuit_add(t81, t84);\n    let t86 = circuit_mul(t82, in62);\n    let t87 = circuit_mul(t22, t86);\n    let t88 = circuit_mul(in19, t86);\n    let t89 = circuit_add(t85, t88);\n    let t90 = circuit_mul(t86, in62);\n    let t91 = circuit_mul(t22, t90);\n    let t92 = circuit_mul(in20, t90);\n    let t93 = circuit_add(t89, t92);\n    let t94 = circuit_mul(t90, in62);\n    let t95 = circuit_mul(t22, t94);\n    let t96 = circuit_mul(in21, t94);\n    let t97 = circuit_add(t93, t96);\n    let t98 = circuit_mul(t94, in62);\n    let t99 = circuit_mul(t22, t98);\n    let t100 = circuit_mul(in22, t98);\n    let t101 = circuit_add(t97, t100);\n    let t102 = circuit_mul(t98, in62);\n    let t103 = circuit_mul(t22, t102);\n    let t104 = circuit_mul(in23, t102);\n    let t105 = circuit_add(t101, t104);\n    let t106 = circuit_mul(t102, in62);\n    let t107 = circuit_mul(t22, t106);\n    let t108 = circuit_mul(in24, t106);\n    let t109 = circuit_add(t105, t108);\n    let t110 = circuit_mul(t106, in62);\n    let t111 = circuit_mul(t22, t110);\n    let t112 = circuit_mul(in25, t110);\n    let t113 = circuit_add(t109, t112);\n    let t114 = circuit_mul(t110, in62);\n    let t115 = circuit_mul(t22, t114);\n    let t116 = circuit_mul(in26, t114);\n    let t117 = circuit_add(t113, t116);\n    let t118 = circuit_mul(t114, in62);\n    let t119 = circuit_mul(t22, t118);\n    let t120 = circuit_mul(in27, t118);\n    let t121 = circuit_add(t117, t120);\n    let t122 = circuit_mul(t118, in62);\n    let t123 = circuit_mul(t22, t122);\n    let t124 = circuit_mul(in28, t122);\n    let t125 = circuit_add(t121, t124);\n    let t126 = circuit_mul(t122, in62);\n    let t127 = circuit_mul(t22, t126);\n    let t128 = circuit_mul(in29, t126);\n    let t129 = circuit_add(t125, t128);\n    let t130 = circuit_mul(t126, in62);\n    let t131 = circuit_mul(t22, t130);\n    let t132 = circuit_mul(in30, t130);\n    let t133 = circuit_add(t129, t132);\n    let t134 = circuit_mul(t130, in62);\n    let t135 = circuit_mul(t22, t134);\n    let t136 = circuit_mul(in31, t134);\n    let t137 = circuit_add(t133, t136);\n    let t138 = circuit_mul(t134, in62);\n    let t139 = circuit_mul(t22, t138);\n    let t140 = circuit_mul(in32, t138);\n    let t141 = circuit_add(t137, t140);\n    let t142 = circuit_mul(t138, in62);\n    let t143 = circuit_mul(t22, t142);\n    let t144 = circuit_mul(in33, t142);\n    let t145 = circuit_add(t141, t144);\n    let t146 = circuit_mul(t142, in62);\n    let t147 = circuit_mul(t22, t146);\n    let t148 = circuit_mul(in34, t146);\n    let t149 = circuit_add(t145, t148);\n    let t150 = circuit_mul(t146, in62);\n    let t151 = circuit_mul(t22, t150);\n    let t152 = circuit_mul(in35, t150);\n    let t153 = circuit_add(t149, t152);\n    let t154 = circuit_mul(t150, in62);\n    let t155 = circuit_mul(t22, t154);\n    let t156 = circuit_mul(in36, t154);\n    let t157 = circuit_add(t153, t156);\n    let t158 = circuit_mul(t154, in62);\n    let t159 = circuit_mul(t22, t158);\n    let t160 = circuit_mul(in37, t158);\n    let t161 = circuit_add(t157, t160);\n    let t162 = circuit_mul(t158, in62);\n    let t163 = circuit_mul(t22, t162);\n    let t164 = circuit_mul(in38, t162);\n    let t165 = circuit_add(t161, t164);\n    let t166 = circuit_mul(t162, in62);\n    let t167 = circuit_mul(t21, t166);\n    let t168 = circuit_add(t135, t167);\n    let t169 = circuit_mul(in39, t166);\n    let t170 = circuit_add(t165, t169);\n    let t171 = circuit_mul(t166, in62);\n    let t172 = circuit_mul(t21, t171);\n    let t173 = circuit_add(t139, t172);\n    let t174 = circuit_mul(in40, t171);\n    let t175 = circuit_add(t170, t174);\n    let t176 = circuit_mul(t171, in62);\n    let t177 = circuit_mul(t21, t176);\n    let t178 = circuit_add(t143, t177);\n    let t179 = circuit_mul(in41, t176);\n    let t180 = circuit_add(t175, t179);\n    let t181 = circuit_mul(t176, in62);\n    let t182 = circuit_mul(t21, t181);\n    let t183 = circuit_add(t147, t182);\n    let t184 = circuit_mul(in42, t181);\n    let t185 = circuit_add(t180, t184);\n    let t186 = circuit_mul(t181, in62);\n    let t187 = circuit_mul(t21, t186);\n    let t188 = circuit_add(t151, t187);\n    let t189 = circuit_mul(in43, t186);\n    let t190 = circuit_add(t185, t189);\n    let t191 = circuit_sub(in1, in76);\n    let t192 = circuit_mul(t10, t191);\n    let t193 = circuit_mul(t10, t190);\n    let t194 = circuit_add(t193, t193);\n    let t195 = circuit_sub(t192, in76);\n    let t196 = circuit_mul(in56, t195);\n    let t197 = circuit_sub(t194, t196);\n    let t198 = circuit_add(t192, in76);\n    let t199 = circuit_inverse(t198);\n    let t200 = circuit_mul(t197, t199);\n    let t201 = circuit_sub(in1, in75);\n    let t202 = circuit_mul(t9, t201);\n    let t203 = circuit_mul(t9, t200);\n    let t204 = circuit_add(t203, t203);\n    let t205 = circuit_sub(t202, in75);\n    let t206 = circuit_mul(in55, t205);\n    let t207 = circuit_sub(t204, t206);\n    let t208 = circuit_add(t202, in75);\n    let t209 = circuit_inverse(t208);\n    let t210 = circuit_mul(t207, t209);\n    let t211 = circuit_sub(in1, in74);\n    let t212 = circuit_mul(t8, t211);\n    let t213 = circuit_mul(t8, t210);\n    let t214 = circuit_add(t213, t213);\n    let t215 = circuit_sub(t212, in74);\n    let t216 = circuit_mul(in54, t215);\n    let t217 = circuit_sub(t214, t216);\n    let t218 = circuit_add(t212, in74);\n    let t219 = circuit_inverse(t218);\n    let t220 = circuit_mul(t217, t219);\n    let t221 = circuit_sub(in1, in73);\n    let t222 = circuit_mul(t7, t221);\n    let t223 = circuit_mul(t7, t220);\n    let t224 = circuit_add(t223, t223);\n    let t225 = circuit_sub(t222, in73);\n    let t226 = circuit_mul(in53, t225);\n    let t227 = circuit_sub(t224, t226);\n    let t228 = circuit_add(t222, in73);\n    let t229 = circuit_inverse(t228);\n    let t230 = circuit_mul(t227, t229);\n    let t231 = circuit_sub(in1, in72);\n    let t232 = circuit_mul(t6, t231);\n    let t233 = circuit_mul(t6, t230);\n    let t234 = circuit_add(t233, t233);\n    let t235 = circuit_sub(t232, in72);\n    let t236 = circuit_mul(in52, t235);\n    let t237 = circuit_sub(t234, t236);\n    let t238 = circuit_add(t232, in72);\n    let t239 = circuit_inverse(t238);\n    let t240 = circuit_mul(t237, t239);\n    let t241 = circuit_sub(in1, in71);\n    let t242 = circuit_mul(t5, t241);\n    let t243 = circuit_mul(t5, t240);\n    let t244 = circuit_add(t243, t243);\n    let t245 = circuit_sub(t242, in71);\n    let t246 = circuit_mul(in51, t245);\n    let t247 = circuit_sub(t244, t246);\n    let t248 = circuit_add(t242, in71);\n    let t249 = circuit_inverse(t248);\n    let t250 = circuit_mul(t247, t249);\n    let t251 = circuit_sub(in1, in70);\n    let t252 = circuit_mul(t4, t251);\n    let t253 = circuit_mul(t4, t250);\n    let t254 = circuit_add(t253, t253);\n    let t255 = circuit_sub(t252, in70);\n    let t256 = circuit_mul(in50, t255);\n    let t257 = circuit_sub(t254, t256);\n    let t258 = circuit_add(t252, in70);\n    let t259 = circuit_inverse(t258);\n    let t260 = circuit_mul(t257, t259);\n    let t261 = circuit_sub(in1, in69);\n    let t262 = circuit_mul(t3, t261);\n    let t263 = circuit_mul(t3, t260);\n    let t264 = circuit_add(t263, t263);\n    let t265 = circuit_sub(t262, in69);\n    let t266 = circuit_mul(in49, t265);\n    let t267 = circuit_sub(t264, t266);\n    let t268 = circuit_add(t262, in69);\n    let t269 = circuit_inverse(t268);\n    let t270 = circuit_mul(t267, t269);\n    let t271 = circuit_sub(in1, in68);\n    let t272 = circuit_mul(t2, t271);\n    let t273 = circuit_mul(t2, t270);\n    let t274 = circuit_add(t273, t273);\n    let t275 = circuit_sub(t272, in68);\n    let t276 = circuit_mul(in48, t275);\n    let t277 = circuit_sub(t274, t276);\n    let t278 = circuit_add(t272, in68);\n    let t279 = circuit_inverse(t278);\n    let t280 = circuit_mul(t277, t279);\n    let t281 = circuit_sub(in1, in67);\n    let t282 = circuit_mul(t1, t281);\n    let t283 = circuit_mul(t1, t280);\n    let t284 = circuit_add(t283, t283);\n    let t285 = circuit_sub(t282, in67);\n    let t286 = circuit_mul(in47, t285);\n    let t287 = circuit_sub(t284, t286);\n    let t288 = circuit_add(t282, in67);\n    let t289 = circuit_inverse(t288);\n    let t290 = circuit_mul(t287, t289);\n    let t291 = circuit_sub(in1, in66);\n    let t292 = circuit_mul(t0, t291);\n    let t293 = circuit_mul(t0, t290);\n    let t294 = circuit_add(t293, t293);\n    let t295 = circuit_sub(t292, in66);\n    let t296 = circuit_mul(in46, t295);\n    let t297 = circuit_sub(t294, t296);\n    let t298 = circuit_add(t292, in66);\n    let t299 = circuit_inverse(t298);\n    let t300 = circuit_mul(t297, t299);\n    let t301 = circuit_sub(in1, in65);\n    let t302 = circuit_mul(in61, t301);\n    let t303 = circuit_mul(in61, t300);\n    let t304 = circuit_add(t303, t303);\n    let t305 = circuit_sub(t302, in65);\n    let t306 = circuit_mul(in45, t305);\n    let t307 = circuit_sub(t304, t306);\n    let t308 = circuit_add(t302, in65);\n    let t309 = circuit_inverse(t308);\n    let t310 = circuit_mul(t307, t309);\n    let t311 = circuit_mul(t310, t12);\n    let t312 = circuit_mul(in45, in64);\n    let t313 = circuit_mul(t312, t14);\n    let t314 = circuit_add(t311, t313);\n    let t315 = circuit_mul(in64, in64);\n    let t316 = circuit_sub(in63, t0);\n    let t317 = circuit_inverse(t316);\n    let t318 = circuit_add(in63, t0);\n    let t319 = circuit_inverse(t318);\n    let t320 = circuit_mul(t315, t317);\n    let t321 = circuit_mul(in64, t319);\n    let t322 = circuit_mul(t315, t321);\n    let t323 = circuit_add(t322, t320);\n    let t324 = circuit_sub(in0, t323);\n    let t325 = circuit_mul(t322, in46);\n    let t326 = circuit_mul(t320, t300);\n    let t327 = circuit_add(t325, t326);\n    let t328 = circuit_add(t314, t327);\n    let t329 = circuit_mul(in64, in64);\n    let t330 = circuit_mul(t315, t329);\n    let t331 = circuit_sub(in63, t1);\n    let t332 = circuit_inverse(t331);\n    let t333 = circuit_add(in63, t1);\n    let t334 = circuit_inverse(t333);\n    let t335 = circuit_mul(t330, t332);\n    let t336 = circuit_mul(in64, t334);\n    let t337 = circuit_mul(t330, t336);\n    let t338 = circuit_add(t337, t335);\n    let t339 = circuit_sub(in0, t338);\n    let t340 = circuit_mul(t337, in47);\n    let t341 = circuit_mul(t335, t290);\n    let t342 = circuit_add(t340, t341);\n    let t343 = circuit_add(t328, t342);\n    let t344 = circuit_mul(in64, in64);\n    let t345 = circuit_mul(t330, t344);\n    let t346 = circuit_sub(in63, t2);\n    let t347 = circuit_inverse(t346);\n    let t348 = circuit_add(in63, t2);\n    let t349 = circuit_inverse(t348);\n    let t350 = circuit_mul(t345, t347);\n    let t351 = circuit_mul(in64, t349);\n    let t352 = circuit_mul(t345, t351);\n    let t353 = circuit_add(t352, t350);\n    let t354 = circuit_sub(in0, t353);\n    let t355 = circuit_mul(t352, in48);\n    let t356 = circuit_mul(t350, t280);\n    let t357 = circuit_add(t355, t356);\n    let t358 = circuit_add(t343, t357);\n    let t359 = circuit_mul(in64, in64);\n    let t360 = circuit_mul(t345, t359);\n    let t361 = circuit_sub(in63, t3);\n    let t362 = circuit_inverse(t361);\n    let t363 = circuit_add(in63, t3);\n    let t364 = circuit_inverse(t363);\n    let t365 = circuit_mul(t360, t362);\n    let t366 = circuit_mul(in64, t364);\n    let t367 = circuit_mul(t360, t366);\n    let t368 = circuit_add(t367, t365);\n    let t369 = circuit_sub(in0, t368);\n    let t370 = circuit_mul(t367, in49);\n    let t371 = circuit_mul(t365, t270);\n    let t372 = circuit_add(t370, t371);\n    let t373 = circuit_add(t358, t372);\n    let t374 = circuit_mul(in64, in64);\n    let t375 = circuit_mul(t360, t374);\n    let t376 = circuit_sub(in63, t4);\n    let t377 = circuit_inverse(t376);\n    let t378 = circuit_add(in63, t4);\n    let t379 = circuit_inverse(t378);\n    let t380 = circuit_mul(t375, t377);\n    let t381 = circuit_mul(in64, t379);\n    let t382 = circuit_mul(t375, t381);\n    let t383 = circuit_add(t382, t380);\n    let t384 = circuit_sub(in0, t383);\n    let t385 = circuit_mul(t382, in50);\n    let t386 = circuit_mul(t380, t260);\n    let t387 = circuit_add(t385, t386);\n    let t388 = circuit_add(t373, t387);\n    let t389 = circuit_mul(in64, in64);\n    let t390 = circuit_mul(t375, t389);\n    let t391 = circuit_sub(in63, t5);\n    let t392 = circuit_inverse(t391);\n    let t393 = circuit_add(in63, t5);\n    let t394 = circuit_inverse(t393);\n    let t395 = circuit_mul(t390, t392);\n    let t396 = circuit_mul(in64, t394);\n    let t397 = circuit_mul(t390, t396);\n    let t398 = circuit_add(t397, t395);\n    let t399 = circuit_sub(in0, t398);\n    let t400 = circuit_mul(t397, in51);\n    let t401 = circuit_mul(t395, t250);\n    let t402 = circuit_add(t400, t401);\n    let t403 = circuit_add(t388, t402);\n    let t404 = circuit_mul(in64, in64);\n    let t405 = circuit_mul(t390, t404);\n    let t406 = circuit_sub(in63, t6);\n    let t407 = circuit_inverse(t406);\n    let t408 = circuit_add(in63, t6);\n    let t409 = circuit_inverse(t408);\n    let t410 = circuit_mul(t405, t407);\n    let t411 = circuit_mul(in64, t409);\n    let t412 = circuit_mul(t405, t411);\n    let t413 = circuit_add(t412, t410);\n    let t414 = circuit_sub(in0, t413);\n    let t415 = circuit_mul(t412, in52);\n    let t416 = circuit_mul(t410, t240);\n    let t417 = circuit_add(t415, t416);\n    let t418 = circuit_add(t403, t417);\n    let t419 = circuit_mul(in64, in64);\n    let t420 = circuit_mul(t405, t419);\n    let t421 = circuit_sub(in63, t7);\n    let t422 = circuit_inverse(t421);\n    let t423 = circuit_add(in63, t7);\n    let t424 = circuit_inverse(t423);\n    let t425 = circuit_mul(t420, t422);\n    let t426 = circuit_mul(in64, t424);\n    let t427 = circuit_mul(t420, t426);\n    let t428 = circuit_add(t427, t425);\n    let t429 = circuit_sub(in0, t428);\n    let t430 = circuit_mul(t427, in53);\n    let t431 = circuit_mul(t425, t230);\n    let t432 = circuit_add(t430, t431);\n    let t433 = circuit_add(t418, t432);\n    let t434 = circuit_mul(in64, in64);\n    let t435 = circuit_mul(t420, t434);\n    let t436 = circuit_sub(in63, t8);\n    let t437 = circuit_inverse(t436);\n    let t438 = circuit_add(in63, t8);\n    let t439 = circuit_inverse(t438);\n    let t440 = circuit_mul(t435, t437);\n    let t441 = circuit_mul(in64, t439);\n    let t442 = circuit_mul(t435, t441);\n    let t443 = circuit_add(t442, t440);\n    let t444 = circuit_sub(in0, t443);\n    let t445 = circuit_mul(t442, in54);\n    let t446 = circuit_mul(t440, t220);\n    let t447 = circuit_add(t445, t446);\n    let t448 = circuit_add(t433, t447);\n    let t449 = circuit_mul(in64, in64);\n    let t450 = circuit_mul(t435, t449);\n    let t451 = circuit_sub(in63, t9);\n    let t452 = circuit_inverse(t451);\n    let t453 = circuit_add(in63, t9);\n    let t454 = circuit_inverse(t453);\n    let t455 = circuit_mul(t450, t452);\n    let t456 = circuit_mul(in64, t454);\n    let t457 = circuit_mul(t450, t456);\n    let t458 = circuit_add(t457, t455);\n    let t459 = circuit_sub(in0, t458);\n    let t460 = circuit_mul(t457, in55);\n    let t461 = circuit_mul(t455, t210);\n    let t462 = circuit_add(t460, t461);\n    let t463 = circuit_add(t448, t462);\n    let t464 = circuit_mul(in64, in64);\n    let t465 = circuit_mul(t450, t464);\n    let t466 = circuit_sub(in63, t10);\n    let t467 = circuit_inverse(t466);\n    let t468 = circuit_add(in63, t10);\n    let t469 = circuit_inverse(t468);\n    let t470 = circuit_mul(t465, t467);\n    let t471 = circuit_mul(in64, t469);\n    let t472 = circuit_mul(t465, t471);\n    let t473 = circuit_add(t472, t470);\n    let t474 = circuit_sub(in0, t473);\n    let t475 = circuit_mul(t472, in56);\n    let t476 = circuit_mul(t470, t200);\n    let t477 = circuit_add(t475, t476);\n    let t478 = circuit_add(t463, t477);\n    let t479 = circuit_mul(in64, in64);\n    let t480 = circuit_mul(t465, t479);\n    let t481 = circuit_sub(in63, in61);\n    let t482 = circuit_inverse(t481);\n    let t483 = circuit_mul(in2, in61);\n    let t484 = circuit_sub(in63, t483);\n    let t485 = circuit_inverse(t484);\n    let t486 = circuit_mul(in64, in64);\n    let t487 = circuit_mul(t480, t486);\n    let t488 = circuit_mul(t482, t487);\n    let t489 = circuit_sub(in0, t488);\n    let t490 = circuit_mul(t487, in64);\n    let t491 = circuit_mul(t488, in57);\n    let t492 = circuit_add(t478, t491);\n    let t493 = circuit_mul(t485, t490);\n    let t494 = circuit_sub(in0, t493);\n    let t495 = circuit_mul(t490, in64);\n    let t496 = circuit_mul(t493, in58);\n    let t497 = circuit_add(t492, t496);\n    let t498 = circuit_mul(t482, t495);\n    let t499 = circuit_sub(in0, t498);\n    let t500 = circuit_mul(t495, in64);\n    let t501 = circuit_mul(t498, in59);\n    let t502 = circuit_add(t497, t501);\n    let t503 = circuit_mul(t482, t500);\n    let t504 = circuit_sub(in0, t503);\n    let t505 = circuit_mul(t503, in60);\n    let t506 = circuit_add(t502, t505);\n    let t507 = circuit_add(t494, t499);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (\n        t22,\n        t23,\n        t27,\n        t31,\n        t35,\n        t39,\n        t43,\n        t47,\n        t51,\n        t55,\n        t59,\n        t63,\n        t67,\n        t71,\n        t75,\n        t79,\n        t83,\n        t87,\n        t91,\n        t95,\n        t99,\n        t103,\n        t107,\n        t111,\n        t115,\n        t119,\n        t123,\n        t127,\n        t131,\n        t168,\n        t173,\n        t178,\n        t183,\n        t188,\n        t155,\n        t159,\n        t163,\n        t324,\n        t339,\n        t354,\n        t369,\n        t384,\n        t399,\n        t414,\n        t429,\n        t444,\n        t459,\n        t474,\n        t489,\n        t507,\n        t504,\n        t506,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6750f230c893619174a57a76, 0xf086204a9f36ffb061794254, 0x7b0c561a6148404, 0x0],\n        ); // in2\n    // Fill inputs:\n\n    for val in p_sumcheck_evaluations {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in3 - in43\n\n    circuit_inputs = circuit_inputs.next_2(p_gemini_masking_eval); // in44\n\n    for val in p_gemini_a_evaluations {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in45 - in56\n\n    for val in p_libra_poly_evals {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in57 - in60\n\n    circuit_inputs = circuit_inputs.next_2(tp_gemini_r); // in61\n    circuit_inputs = circuit_inputs.next_2(tp_rho); // in62\n    circuit_inputs = circuit_inputs.next_2(tp_shplonk_z); // in63\n    circuit_inputs = circuit_inputs.next_2(tp_shplonk_nu); // in64\n\n    for val in tp_sum_check_u_challenges {\n        circuit_inputs = circuit_inputs.next_u128(*val);\n    } // in65 - in76\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let scalar_1: u384 = outputs.get_output(t22);\n    let scalar_2: u384 = outputs.get_output(t23);\n    let scalar_3: u384 = outputs.get_output(t27);\n    let scalar_4: u384 = outputs.get_output(t31);\n    let scalar_5: u384 = outputs.get_output(t35);\n    let scalar_6: u384 = outputs.get_output(t39);\n    let scalar_7: u384 = outputs.get_output(t43);\n    let scalar_8: u384 = outputs.get_output(t47);\n    let scalar_9: u384 = outputs.get_output(t51);\n    let scalar_10: u384 = outputs.get_output(t55);\n    let scalar_11: u384 = outputs.get_output(t59);\n    let scalar_12: u384 = outputs.get_output(t63);\n    let scalar_13: u384 = outputs.get_output(t67);\n    let scalar_14: u384 = outputs.get_output(t71);\n    let scalar_15: u384 = outputs.get_output(t75);\n    let scalar_16: u384 = outputs.get_output(t79);\n    let scalar_17: u384 = outputs.get_output(t83);\n    let scalar_18: u384 = outputs.get_output(t87);\n    let scalar_19: u384 = outputs.get_output(t91);\n    let scalar_20: u384 = outputs.get_output(t95);\n    let scalar_21: u384 = outputs.get_output(t99);\n    let scalar_22: u384 = outputs.get_output(t103);\n    let scalar_23: u384 = outputs.get_output(t107);\n    let scalar_24: u384 = outputs.get_output(t111);\n    let scalar_25: u384 = outputs.get_output(t115);\n    let scalar_26: u384 = outputs.get_output(t119);\n    let scalar_27: u384 = outputs.get_output(t123);\n    let scalar_28: u384 = outputs.get_output(t127);\n    let scalar_29: u384 = outputs.get_output(t131);\n    let scalar_30: u384 = outputs.get_output(t168);\n    let scalar_31: u384 = outputs.get_output(t173);\n    let scalar_32: u384 = outputs.get_output(t178);\n    let scalar_33: u384 = outputs.get_output(t183);\n    let scalar_34: u384 = outputs.get_output(t188);\n    let scalar_35: u384 = outputs.get_output(t155);\n    let scalar_36: u384 = outputs.get_output(t159);\n    let scalar_37: u384 = outputs.get_output(t163);\n    let scalar_38: u384 = outputs.get_output(t324);\n    let scalar_39: u384 = outputs.get_output(t339);\n    let scalar_40: u384 = outputs.get_output(t354);\n    let scalar_41: u384 = outputs.get_output(t369);\n    let scalar_42: u384 = outputs.get_output(t384);\n    let scalar_43: u384 = outputs.get_output(t399);\n    let scalar_44: u384 = outputs.get_output(t414);\n    let scalar_45: u384 = outputs.get_output(t429);\n    let scalar_46: u384 = outputs.get_output(t444);\n    let scalar_47: u384 = outputs.get_output(t459);\n    let scalar_48: u384 = outputs.get_output(t474);\n    let scalar_49: u384 = outputs.get_output(t489);\n    let scalar_50: u384 = outputs.get_output(t507);\n    let scalar_51: u384 = outputs.get_output(t504);\n    let scalar_52: u384 = outputs.get_output(t506);\n    return (\n        scalar_1,\n        scalar_2,\n        scalar_3,\n        scalar_4,\n        scalar_5,\n        scalar_6,\n        scalar_7,\n        scalar_8,\n        scalar_9,\n        scalar_10,\n        scalar_11,\n        scalar_12,\n        scalar_13,\n        scalar_14,\n        scalar_15,\n        scalar_16,\n        scalar_17,\n        scalar_18,\n        scalar_19,\n        scalar_20,\n        scalar_21,\n        scalar_22,\n        scalar_23,\n        scalar_24,\n        scalar_25,\n        scalar_26,\n        scalar_27,\n        scalar_28,\n        scalar_29,\n        scalar_30,\n        scalar_31,\n        scalar_32,\n        scalar_33,\n        scalar_34,\n        scalar_35,\n        scalar_36,\n        scalar_37,\n        scalar_38,\n        scalar_39,\n        scalar_40,\n        scalar_41,\n        scalar_42,\n        scalar_43,\n        scalar_44,\n        scalar_45,\n        scalar_46,\n        scalar_47,\n        scalar_48,\n        scalar_49,\n        scalar_50,\n        scalar_51,\n        scalar_52,\n    );\n}\n#[inline(always)]\npub fn run_GRUMPKIN_ZK_HONK_EVALS_CONS_INIT_SIZE_12_circuit(\n    tp_gemini_r: u384, modulus: core::circuit::CircuitModulus,\n) -> (u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x1\n    let in1 = CE::<CI<1>> {}; // 0x204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d6\n\n    // INPUT stack\n    let in2 = CE::<CI<2>> {};\n    let t0 = circuit_sub(in2, in0);\n    let t1 = circuit_inverse(t0);\n    let t2 = circuit_mul(in1, in2);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t1, t2).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x8712848a692c553d0329f5d6, 0x64751ad938e2b5e6a54cf8c6, 0x204bd3277422fad3, 0x0],\n        ); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(tp_gemini_r); // in2\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let challenge_poly_eval: u384 = outputs.get_output(t1);\n    let root_power_times_tp_gemini_r: u384 = outputs.get_output(t2);\n    return (challenge_poly_eval, root_power_times_tp_gemini_r);\n}\n#[inline(always)]\npub fn run_GRUMPKIN_ZK_HONK_EVALS_CONS_LOOP_SIZE_12_circuit(\n    challenge_poly_eval: u384,\n    root_power_times_tp_gemini_r: u384,\n    tp_sumcheck_u_challenge: u384,\n    modulus: core::circuit::CircuitModulus,\n) -> (u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x1\n    let in1 = CE::<CI<1>> {}; // 0x204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d6\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let t0 = circuit_sub(in3, in0);\n    let t1 = circuit_inverse(t0);\n    let t2 = circuit_mul(in0, t1);\n    let t3 = circuit_add(in2, t2);\n    let t4 = circuit_mul(in3, in1);\n    let t5 = circuit_mul(in0, in4);\n    let t6 = circuit_sub(t4, in0);\n    let t7 = circuit_inverse(t6);\n    let t8 = circuit_mul(t5, t7);\n    let t9 = circuit_add(t3, t8);\n    let t10 = circuit_mul(t4, in1);\n    let t11 = circuit_mul(t5, in4);\n    let t12 = circuit_sub(t10, in0);\n    let t13 = circuit_inverse(t12);\n    let t14 = circuit_mul(t11, t13);\n    let t15 = circuit_add(t9, t14);\n    let t16 = circuit_mul(t10, in1);\n    let t17 = circuit_mul(t11, in4);\n    let t18 = circuit_sub(t16, in0);\n    let t19 = circuit_inverse(t18);\n    let t20 = circuit_mul(t17, t19);\n    let t21 = circuit_add(t15, t20);\n    let t22 = circuit_mul(t16, in1);\n    let t23 = circuit_mul(t17, in4);\n    let t24 = circuit_sub(t22, in0);\n    let t25 = circuit_inverse(t24);\n    let t26 = circuit_mul(t23, t25);\n    let t27 = circuit_add(t21, t26);\n    let t28 = circuit_mul(t22, in1);\n    let t29 = circuit_mul(t23, in4);\n    let t30 = circuit_sub(t28, in0);\n    let t31 = circuit_inverse(t30);\n    let t32 = circuit_mul(t29, t31);\n    let t33 = circuit_add(t27, t32);\n    let t34 = circuit_mul(t28, in1);\n    let t35 = circuit_mul(t29, in4);\n    let t36 = circuit_sub(t34, in0);\n    let t37 = circuit_inverse(t36);\n    let t38 = circuit_mul(t35, t37);\n    let t39 = circuit_add(t33, t38);\n    let t40 = circuit_mul(t34, in1);\n    let t41 = circuit_mul(t35, in4);\n    let t42 = circuit_sub(t40, in0);\n    let t43 = circuit_inverse(t42);\n    let t44 = circuit_mul(t41, t43);\n    let t45 = circuit_add(t39, t44);\n    let t46 = circuit_mul(t40, in1);\n    let t47 = circuit_mul(t41, in4);\n    let t48 = circuit_sub(t46, in0);\n    let t49 = circuit_inverse(t48);\n    let t50 = circuit_mul(t47, t49);\n    let t51 = circuit_add(t45, t50);\n    let t52 = circuit_mul(t46, in1);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t51, t52).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x8712848a692c553d0329f5d6, 0x64751ad938e2b5e6a54cf8c6, 0x204bd3277422fad3, 0x0],\n        ); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(challenge_poly_eval); // in2\n    circuit_inputs = circuit_inputs.next_2(root_power_times_tp_gemini_r); // in3\n    circuit_inputs = circuit_inputs.next_2(tp_sumcheck_u_challenge); // in4\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let challenge_poly_eval: u384 = outputs.get_output(t51);\n    let root_power_times_tp_gemini_r: u384 = outputs.get_output(t52);\n    return (challenge_poly_eval, root_power_times_tp_gemini_r);\n}\n#[inline(always)]\npub fn run_GRUMPKIN_ZK_HONK_EVALS_CONS_DONE_SIZE_12_circuit(\n    p_libra_evaluation: u384,\n    p_libra_poly_evals: Span<u256>,\n    tp_gemini_r: u384,\n    challenge_poly_eval: u384,\n    root_power_times_tp_gemini_r: u384,\n    modulus: core::circuit::CircuitModulus,\n) -> (u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d6\n    let in1 = CE::<CI<1>> {}; // 0x1\n    let in2 = CE::<CI<2>> {}; // 0x3033ea246e506e898e97f570caffd704cb0bb460313fb720b29e139e5c100001\n\n    // INPUT stack\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10) = (CE::<CI<9>> {}, CE::<CI<10>> {});\n    let t0 = circuit_mul(in10, in0);\n    let t1 = circuit_mul(t0, in0);\n    let t2 = circuit_mul(t1, in0);\n    let t3 = circuit_mul(t2, in0);\n    let t4 = circuit_mul(t3, in0);\n    let t5 = circuit_mul(t4, in0);\n    let t6 = circuit_mul(t5, in0);\n    let t7 = circuit_mul(t6, in0);\n    let t8 = circuit_mul(t7, in0);\n    let t9 = circuit_mul(t8, in0);\n    let t10 = circuit_mul(t9, in0);\n    let t11 = circuit_mul(t10, in0);\n    let t12 = circuit_mul(t11, in0);\n    let t13 = circuit_mul(t12, in0);\n    let t14 = circuit_mul(t13, in0);\n    let t15 = circuit_mul(t14, in0);\n    let t16 = circuit_mul(t15, in0);\n    let t17 = circuit_mul(t16, in0);\n    let t18 = circuit_mul(t17, in0);\n    let t19 = circuit_mul(t18, in0);\n    let t20 = circuit_mul(t19, in0);\n    let t21 = circuit_mul(t20, in0);\n    let t22 = circuit_mul(t21, in0);\n    let t23 = circuit_mul(t22, in0);\n    let t24 = circuit_mul(t23, in0);\n    let t25 = circuit_mul(t24, in0);\n    let t26 = circuit_mul(t25, in0);\n    let t27 = circuit_mul(t26, in0);\n    let t28 = circuit_mul(t27, in0);\n    let t29 = circuit_mul(t28, in0);\n    let t30 = circuit_mul(t29, in0);\n    let t31 = circuit_mul(t30, in0);\n    let t32 = circuit_mul(t31, in0);\n    let t33 = circuit_mul(t32, in0);\n    let t34 = circuit_mul(t33, in0);\n    let t35 = circuit_mul(t34, in0);\n    let t36 = circuit_mul(t35, in0);\n    let t37 = circuit_mul(t36, in0);\n    let t38 = circuit_mul(t37, in0);\n    let t39 = circuit_mul(t38, in0);\n    let t40 = circuit_mul(t39, in0);\n    let t41 = circuit_mul(t40, in0);\n    let t42 = circuit_mul(t41, in0);\n    let t43 = circuit_mul(t42, in0);\n    let t44 = circuit_mul(t43, in0);\n    let t45 = circuit_mul(t44, in0);\n    let t46 = circuit_mul(t45, in0);\n    let t47 = circuit_mul(t46, in0);\n    let t48 = circuit_mul(t47, in0);\n    let t49 = circuit_mul(t48, in0);\n    let t50 = circuit_mul(t49, in0);\n    let t51 = circuit_mul(t50, in0);\n    let t52 = circuit_mul(t51, in0);\n    let t53 = circuit_mul(t52, in0);\n    let t54 = circuit_mul(t53, in0);\n    let t55 = circuit_mul(t54, in0);\n    let t56 = circuit_mul(t55, in0);\n    let t57 = circuit_mul(t56, in0);\n    let t58 = circuit_mul(t57, in0);\n    let t59 = circuit_mul(t58, in0);\n    let t60 = circuit_mul(t59, in0);\n    let t61 = circuit_mul(t60, in0);\n    let t62 = circuit_mul(t61, in0);\n    let t63 = circuit_mul(t62, in0);\n    let t64 = circuit_mul(t63, in0);\n    let t65 = circuit_mul(t64, in0);\n    let t66 = circuit_mul(t65, in0);\n    let t67 = circuit_mul(t66, in0);\n    let t68 = circuit_mul(t67, in0);\n    let t69 = circuit_mul(t68, in0);\n    let t70 = circuit_mul(t69, in0);\n    let t71 = circuit_mul(t70, in0);\n    let t72 = circuit_mul(t71, in0);\n    let t73 = circuit_mul(t72, in0);\n    let t74 = circuit_mul(t73, in0);\n    let t75 = circuit_mul(t74, in0);\n    let t76 = circuit_mul(t75, in0);\n    let t77 = circuit_mul(t76, in0);\n    let t78 = circuit_mul(t77, in0);\n    let t79 = circuit_mul(t78, in0);\n    let t80 = circuit_mul(t79, in0);\n    let t81 = circuit_mul(t80, in0);\n    let t82 = circuit_mul(t81, in0);\n    let t83 = circuit_mul(t82, in0);\n    let t84 = circuit_mul(t83, in0);\n    let t85 = circuit_mul(t84, in0);\n    let t86 = circuit_mul(t85, in0);\n    let t87 = circuit_mul(t86, in0);\n    let t88 = circuit_mul(t87, in0);\n    let t89 = circuit_mul(t88, in0);\n    let t90 = circuit_mul(t89, in0);\n    let t91 = circuit_mul(t90, in0);\n    let t92 = circuit_mul(t91, in0);\n    let t93 = circuit_mul(t92, in0);\n    let t94 = circuit_mul(t93, in0);\n    let t95 = circuit_mul(t94, in0);\n    let t96 = circuit_mul(t95, in0);\n    let t97 = circuit_mul(t96, in0);\n    let t98 = circuit_mul(t97, in0);\n    let t99 = circuit_mul(t98, in0);\n    let t100 = circuit_mul(t99, in0);\n    let t101 = circuit_mul(t100, in0);\n    let t102 = circuit_mul(t101, in0);\n    let t103 = circuit_mul(t102, in0);\n    let t104 = circuit_mul(t103, in0);\n    let t105 = circuit_mul(t104, in0);\n    let t106 = circuit_mul(t105, in0);\n    let t107 = circuit_mul(t106, in0);\n    let t108 = circuit_mul(t107, in0);\n    let t109 = circuit_mul(t108, in0);\n    let t110 = circuit_mul(t109, in0);\n    let t111 = circuit_mul(t110, in0);\n    let t112 = circuit_mul(t111, in0);\n    let t113 = circuit_mul(t112, in0);\n    let t114 = circuit_mul(t113, in0);\n    let t115 = circuit_mul(t114, in0);\n    let t116 = circuit_mul(t115, in0);\n    let t117 = circuit_mul(t116, in0);\n    let t118 = circuit_mul(t117, in0);\n    let t119 = circuit_mul(t118, in0);\n    let t120 = circuit_mul(t119, in0);\n    let t121 = circuit_mul(t120, in0);\n    let t122 = circuit_mul(t121, in0);\n    let t123 = circuit_mul(t122, in0);\n    let t124 = circuit_mul(t123, in0);\n    let t125 = circuit_mul(t124, in0);\n    let t126 = circuit_mul(t125, in0);\n    let t127 = circuit_mul(t126, in0);\n    let t128 = circuit_mul(t127, in0);\n    let t129 = circuit_mul(t128, in0);\n    let t130 = circuit_mul(t129, in0);\n    let t131 = circuit_mul(t130, in0);\n    let t132 = circuit_mul(t131, in0);\n    let t133 = circuit_mul(t132, in0);\n    let t134 = circuit_mul(t133, in0);\n    let t135 = circuit_mul(t134, in0);\n    let t136 = circuit_mul(t135, in0);\n    let t137 = circuit_mul(t136, in0);\n    let t138 = circuit_mul(t137, in0);\n    let t139 = circuit_mul(t138, in0);\n    let t140 = circuit_mul(t139, in0);\n    let t141 = circuit_mul(t140, in0);\n    let t142 = circuit_mul(t141, in0);\n    let t143 = circuit_mul(t142, in0);\n    let t144 = circuit_mul(t143, in0);\n    let t145 = circuit_mul(t144, in0);\n    let t146 = circuit_sub(in8, in1);\n    let t147 = circuit_inverse(t146);\n    let t148 = circuit_sub(t145, in1);\n    let t149 = circuit_inverse(t148);\n    let t150 = circuit_mul(in8, in8);\n    let t151 = circuit_mul(t150, t150);\n    let t152 = circuit_mul(t151, t151);\n    let t153 = circuit_mul(t152, t152);\n    let t154 = circuit_mul(t153, t153);\n    let t155 = circuit_mul(t154, t154);\n    let t156 = circuit_mul(t155, t155);\n    let t157 = circuit_mul(t156, t156);\n    let t158 = circuit_sub(t157, in1);\n    let t159 = circuit_mul(t158, in2);\n    let t160 = circuit_mul(in9, t159);\n    let t161 = circuit_mul(t147, t159);\n    let t162 = circuit_mul(t149, t159);\n    let t163 = circuit_mul(t161, in6);\n    let t164 = circuit_sub(in8, in0);\n    let t165 = circuit_sub(in5, in6);\n    let t166 = circuit_mul(in4, t160);\n    let t167 = circuit_sub(t165, t166);\n    let t168 = circuit_mul(t164, t167);\n    let t169 = circuit_add(t163, t168);\n    let t170 = circuit_sub(in6, in3);\n    let t171 = circuit_mul(t162, t170);\n    let t172 = circuit_add(t169, t171);\n    let t173 = circuit_mul(t158, in7);\n    let t174 = circuit_sub(t172, t173);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t158, t174).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x8712848a692c553d0329f5d6, 0x64751ad938e2b5e6a54cf8c6, 0x204bd3277422fad3, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x313fb720b29e139e5c100001, 0x8e97f570caffd704cb0bb460, 0x3033ea246e506e89, 0x0],\n        ); // in2\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p_libra_evaluation); // in3\n\n    for val in p_libra_poly_evals {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in4 - in7\n\n    circuit_inputs = circuit_inputs.next_2(tp_gemini_r); // in8\n    circuit_inputs = circuit_inputs.next_2(challenge_poly_eval); // in9\n    circuit_inputs = circuit_inputs.next_2(root_power_times_tp_gemini_r); // in10\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let vanishing_check: u384 = outputs.get_output(t158);\n    let diff_check: u384 = outputs.get_output(t174);\n    return (vanishing_check, diff_check);\n}\n\nimpl CircuitDefinition52<\n    E0,\n    E1,\n    E2,\n    E3,\n    E4,\n    E5,\n    E6,\n    E7,\n    E8,\n    E9,\n    E10,\n    E11,\n    E12,\n    E13,\n    E14,\n    E15,\n    E16,\n    E17,\n    E18,\n    E19,\n    E20,\n    E21,\n    E22,\n    E23,\n    E24,\n    E25,\n    E26,\n    E27,\n    E28,\n    E29,\n    E30,\n    E31,\n    E32,\n    E33,\n    E34,\n    E35,\n    E36,\n    E37,\n    E38,\n    E39,\n    E40,\n    E41,\n    E42,\n    E43,\n    E44,\n    E45,\n    E46,\n    E47,\n    E48,\n    E49,\n    E50,\n    E51,\n> of core::circuit::CircuitDefinition<\n    (\n        CE<E0>,\n        CE<E1>,\n        CE<E2>,\n        CE<E3>,\n        CE<E4>,\n        CE<E5>,\n        CE<E6>,\n        CE<E7>,\n        CE<E8>,\n        CE<E9>,\n        CE<E10>,\n        CE<E11>,\n        CE<E12>,\n        CE<E13>,\n        CE<E14>,\n        CE<E15>,\n        CE<E16>,\n        CE<E17>,\n        CE<E18>,\n        CE<E19>,\n        CE<E20>,\n        CE<E21>,\n        CE<E22>,\n        CE<E23>,\n        CE<E24>,\n        CE<E25>,\n        CE<E26>,\n        CE<E27>,\n        CE<E28>,\n        CE<E29>,\n        CE<E30>,\n        CE<E31>,\n        CE<E32>,\n        CE<E33>,\n        CE<E34>,\n        CE<E35>,\n        CE<E36>,\n        CE<E37>,\n        CE<E38>,\n        CE<E39>,\n        CE<E40>,\n        CE<E41>,\n        CE<E42>,\n        CE<E43>,\n        CE<E44>,\n        CE<E45>,\n        CE<E46>,\n        CE<E47>,\n        CE<E48>,\n        CE<E49>,\n        CE<E50>,\n        CE<E51>,\n    ),\n> {\n    type CircuitType =\n        core::circuit::Circuit<\n            (\n                E0,\n                E1,\n                E2,\n                E3,\n                E4,\n                E5,\n                E6,\n                E7,\n                E8,\n                E9,\n                E10,\n                E11,\n                E12,\n                E13,\n                E14,\n                E15,\n                E16,\n                E17,\n                E18,\n                E19,\n                E20,\n                E21,\n                E22,\n                E23,\n                E24,\n                E25,\n                E26,\n                E27,\n                E28,\n                E29,\n                E30,\n                E31,\n                E32,\n                E33,\n                E34,\n                E35,\n                E36,\n                E37,\n                E38,\n                E39,\n                E40,\n                E41,\n                E42,\n                E43,\n                E44,\n                E45,\n                E46,\n                E47,\n                E48,\n                E49,\n                E50,\n                E51,\n            ),\n        >;\n}\nimpl MyDrp_52<\n    E0,\n    E1,\n    E2,\n    E3,\n    E4,\n    E5,\n    E6,\n    E7,\n    E8,\n    E9,\n    E10,\n    E11,\n    E12,\n    E13,\n    E14,\n    E15,\n    E16,\n    E17,\n    E18,\n    E19,\n    E20,\n    E21,\n    E22,\n    E23,\n    E24,\n    E25,\n    E26,\n    E27,\n    E28,\n    E29,\n    E30,\n    E31,\n    E32,\n    E33,\n    E34,\n    E35,\n    E36,\n    E37,\n    E38,\n    E39,\n    E40,\n    E41,\n    E42,\n    E43,\n    E44,\n    E45,\n    E46,\n    E47,\n    E48,\n    E49,\n    E50,\n    E51,\n> of Drop<\n    (\n        CE<E0>,\n        CE<E1>,\n        CE<E2>,\n        CE<E3>,\n        CE<E4>,\n        CE<E5>,\n        CE<E6>,\n        CE<E7>,\n        CE<E8>,\n        CE<E9>,\n        CE<E10>,\n        CE<E11>,\n        CE<E12>,\n        CE<E13>,\n        CE<E14>,\n        CE<E15>,\n        CE<E16>,\n        CE<E17>,\n        CE<E18>,\n        CE<E19>,\n        CE<E20>,\n        CE<E21>,\n        CE<E22>,\n        CE<E23>,\n        CE<E24>,\n        CE<E25>,\n        CE<E26>,\n        CE<E27>,\n        CE<E28>,\n        CE<E29>,\n        CE<E30>,\n        CE<E31>,\n        CE<E32>,\n        CE<E33>,\n        CE<E34>,\n        CE<E35>,\n        CE<E36>,\n        CE<E37>,\n        CE<E38>,\n        CE<E39>,\n        CE<E40>,\n        CE<E41>,\n        CE<E42>,\n        CE<E43>,\n        CE<E44>,\n        CE<E45>,\n        CE<E46>,\n        CE<E47>,\n        CE<E48>,\n        CE<E49>,\n        CE<E50>,\n        CE<E51>,\n    ),\n>;\n\n#[inline(never)]\npub fn is_on_curve_excluding_infinity_bn254(p: G1Point, modulus: CircuitModulus) -> bool {\n    // INPUT stack\n    // y^2 = x^3 + 3\n    let (in0, in1) = (CE::<CI<0>> {}, CE::<CI<1>> {});\n    let y2 = circuit_mul(in1, in1);\n    let x2 = circuit_mul(in0, in0);\n    let x3 = circuit_mul(in0, x2);\n    let y2_minus_x3 = circuit_sub(y2, x3);\n\n    let mut circuit_inputs = (y2_minus_x3,).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x); // in0\n    circuit_inputs = circuit_inputs.next_2(p.y); // in1\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let zero_check: u384 = outputs.get_output(y2_minus_x3);\n    return zero_check == u384 { limb0: 3, limb1: 0, limb2: 0, limb3: 0 };\n}\n\n"
  },
  {
    "path": "src/contracts/autogenerated/noir_ultra_keccak_zk_honk_example/src/honk_verifier_constants.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\nuse garaga::apps::noir::HonkVk;\nuse garaga::definitions::{G1Point, G2Line, u288, u384};\n\npub const vk: HonkVk = HonkVk {\n    vk_hash: 1655602901159187576028713697867454584902070339986579942408953720408510516376,\n    log_circuit_size: 12,\n    public_inputs_size: 17,\n    qm: G1Point {\n        x: u384 {\n            limb0: 0x1a11b55dce82f38413640a64,\n            limb1: 0x25c78e040da5a5cbe6f296ee,\n            limb2: 0x142bd66bdb7a2bc1,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x3dc8a5d19d0bf85b0fa95ad4,\n            limb1: 0xaa34836fe60428f70dee9285,\n            limb2: 0xd1415082e63c88e,\n            limb3: 0x0,\n        },\n    },\n    qc: G1Point {\n        x: u384 {\n            limb0: 0xcd51216bd8c56683467cd704,\n            limb1: 0x7c77ce4f20f0fd5a3a264861,\n            limb2: 0x2deae537974aa569,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xa1179c7a8ed5c59a1015e784,\n            limb1: 0x714496966bf5f4374fb6087b,\n            limb2: 0x68627460599c3db,\n            limb3: 0x0,\n        },\n    },\n    ql: G1Point {\n        x: u384 {\n            limb0: 0x36d34df5c2aab80f85a218f2,\n            limb1: 0x864a67847d46222c9aee090f,\n            limb2: 0x6681df238df2a0f,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xbc5d11d2d55e4ac8adccae27,\n            limb1: 0xb9c1b8da3c671ec025fe40ee,\n            limb2: 0x18e37167fd19d013,\n            limb3: 0x0,\n        },\n    },\n    qr: G1Point {\n        x: u384 {\n            limb0: 0xfe3f9cf39c6f73896b06e821,\n            limb1: 0x3dc4669f3d97f847e96e4bce,\n            limb2: 0x177c7a07701c29d1,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x7c23cf6fe4a49a8e4f4c5aba,\n            limb1: 0x38f1a638b192ffc9b995fd68,\n            limb2: 0x2d31ea12ba12ee23,\n            limb3: 0x0,\n        },\n    },\n    qo: G1Point {\n        x: u384 {\n            limb0: 0xd8b0a3fb6597416a145754e3,\n            limb1: 0xac68b01fa7f3faaa5a881854,\n            limb2: 0x2d623ef9f6f62903,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x6059e6db24a7e1bfc51be2ac,\n            limb1: 0x52b442fa3ce1643a24c7ac8e,\n            limb2: 0x20b75671e0dd20da,\n            limb3: 0x0,\n        },\n    },\n    q4: G1Point {\n        x: u384 {\n            limb0: 0x528aeba6bdb01913c3236ff8,\n            limb1: 0xe2edafe7a56dfd287d677b48,\n            limb2: 0x7ea8dd8b4d3fd18,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x853ad38b76968342e932d84b,\n            limb1: 0xe23f777f35827a35ea2716bc,\n            limb2: 0x2826602478d64dc4,\n            limb3: 0x0,\n        },\n    },\n    qLookup: G1Point {\n        x: u384 {\n            limb0: 0x53f9b24d923d8f404cb0bbc9,\n            limb1: 0x75a8449d3d5ce8bc3661650d,\n            limb2: 0xc4032c3079594eb,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xa0ca89441369b7c24301f851,\n            limb1: 0xf0158fd6da81f54eb5fe796,\n            limb2: 0x1084d709650356d4,\n            limb3: 0x0,\n        },\n    },\n    qArith: G1Point {\n        x: u384 {\n            limb0: 0x1c518c7ea0b38257198a9523,\n            limb1: 0xc2c72a3c00da41d4c7c7b6d0,\n            limb2: 0x3057f9cfd5edb0e7,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xf647b842154c13fa145167b7,\n            limb1: 0x6a98575cedc65ee5700a7148,\n            limb2: 0x27eb0839ef4980d,\n            limb3: 0x0,\n        },\n    },\n    qDeltaRange: G1Point {\n        x: u384 {\n            limb0: 0xbefcd8cd631818993e143702,\n            limb1: 0x3b9a8bc08ae2fdbd8e9dc005,\n            limb2: 0x1775fbd3ba5e4316,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xbdde06678d3bce4455d2086f,\n            limb1: 0x9e409fcb2e19a72238c07631,\n            limb2: 0x1d8011ee756abfa1,\n            limb3: 0x0,\n        },\n    },\n    qElliptic: G1Point {\n        x: u384 {\n            limb0: 0x990b1eaa86226b3574e5c43f,\n            limb1: 0x50fb0eae1d72783faba96bc3,\n            limb2: 0x9c706e73a00d844,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x9b1f547ec36638d7b5a1ecd9,\n            limb1: 0x68fcae74683a84de1084739f,\n            limb2: 0x276d401f1c0f9a26,\n            limb3: 0x0,\n        },\n    },\n    qMemory: G1Point {\n        x: u384 {\n            limb0: 0xc20dedd7ff81c5677d3286ce,\n            limb1: 0x276f3537c64334419e05b13f,\n            limb2: 0x12b12523f7d04a83,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x4e602d1c13a77a2472f082da,\n            limb1: 0x55a526829445f3fda95e243c,\n            limb2: 0x2e741be4fe42cc11,\n            limb3: 0x0,\n        },\n    },\n    qNnf: G1Point {\n        x: u384 {\n            limb0: 0x5526834f93c6db848d56dcb0,\n            limb1: 0xe4e8e364439d0abba02dc62a,\n            limb2: 0x16a1350662e14b4c,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xb2e746ed0b6e85782c26040e,\n            limb1: 0x9296d71489889503dda143f0,\n            limb2: 0x563b1f480cad906,\n            limb3: 0x0,\n        },\n    },\n    qPoseidon2External: G1Point {\n        x: u384 {\n            limb0: 0xe4d88b5517e40b2a0133f401,\n            limb1: 0x42f6c756379f231d5f472088,\n            limb2: 0x20e1bb3056279dc3,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x2c8d1a5a6b3bd0ec93b42e77,\n            limb1: 0x9eb4da763de77062d23ce01e,\n            limb2: 0x23ee36ecb11b6278,\n            limb3: 0x0,\n        },\n    },\n    qPoseidon2Internal: G1Point {\n        x: u384 {\n            limb0: 0x19d18424d0e92f60a31671d9,\n            limb1: 0xfdda50b3205d5aa4486b6325,\n            limb2: 0xd1611c856951969,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x94aa3cadd7cd42e719521e0f,\n            limb1: 0x30c0b534ea958de4c47e2f4c,\n            limb2: 0xce97ee59d45d762,\n            limb3: 0x0,\n        },\n    },\n    s1: G1Point {\n        x: u384 {\n            limb0: 0x1b074244b7337b923c097eaf,\n            limb1: 0xd2ae3eafb3800ee0eaf997cb,\n            limb2: 0x154bdee4123a9946,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xf34e2352250dd3fb63d6d8c6,\n            limb1: 0x3c0953803a3a34d916eefb5b,\n            limb2: 0xd5f22b8ade2c19f,\n            limb3: 0x0,\n        },\n    },\n    s2: G1Point {\n        x: u384 {\n            limb0: 0x111168b4d7ab689558c334db,\n            limb1: 0x7c62cc30718076db1836d9e1,\n            limb2: 0x22d2dd0a34c3a1da,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x98a26842094b80c6e88321bf,\n            limb1: 0x243059518c261a4137e7f6a6,\n            limb2: 0x262c701396f0e3ae,\n            limb3: 0x0,\n        },\n    },\n    s3: G1Point {\n        x: u384 {\n            limb0: 0xe1213cb7ef934c944e4e8374,\n            limb1: 0x84b08b441d010fc2976235c0,\n            limb2: 0x172f8c6455a2bfe2,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x960773bd1e8b46a6a182239d,\n            limb1: 0x640beab3f563e0a2402c116a,\n            limb2: 0x178afa12bf161e7e,\n            limb3: 0x0,\n        },\n    },\n    s4: G1Point {\n        x: u384 {\n            limb0: 0xd14c60e677f8e1897f658057,\n            limb1: 0x33204ad4109fa0fbb54c4fea,\n            limb2: 0x21f45516c16fcb30,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x52efc7a0ee6a29e06296bb4d,\n            limb1: 0xb82792c925627d7348f0bf11,\n            limb2: 0xa7a5c9f897fd8da,\n            limb3: 0x0,\n        },\n    },\n    id1: G1Point {\n        x: u384 {\n            limb0: 0xaa69e812f125d20848fd1c50,\n            limb1: 0x621962d025f0fbb42467ce5c,\n            limb2: 0x1d1934c19b595461,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x8971dba72882ee742a0b57f4,\n            limb1: 0xdf91438bfa5b19a7bad0f91d,\n            limb2: 0x10e15c437db6ae7e,\n            limb3: 0x0,\n        },\n    },\n    id2: G1Point {\n        x: u384 {\n            limb0: 0x3a6957e0c9aa54ec21894a61,\n            limb1: 0x320938baa053cd1f3dccb71,\n            limb2: 0x146dc127b5450502,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xfd19216bf0829882cdabebe6,\n            limb1: 0x828ba063530a81a329131fb4,\n            limb2: 0x2d5cbdbf9edeff0d,\n            limb3: 0x0,\n        },\n    },\n    id3: G1Point {\n        x: u384 {\n            limb0: 0xbe73592b0b543997ac9ec27b,\n            limb1: 0x600ed91fa96cd915db4ed7fd,\n            limb2: 0x1e214a8b0ce35f8e,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x5eb2130b9c574c4e04e6e477,\n            limb1: 0x7203e26ecee99e2307846f5a,\n            limb2: 0x214375d66b2db2ba,\n            limb3: 0x0,\n        },\n    },\n    id4: G1Point {\n        x: u384 {\n            limb0: 0xc0ed29b2c26f8c8cbcbd82cf,\n            limb1: 0x9b46a4cf0acba266c2a9b02,\n            limb2: 0x2825f908ee9357e4,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xf0bd3cf808a6d1bcd0d63ba,\n            limb1: 0x8100429b213b9140ed25274a,\n            limb2: 0x264ef648e6714012,\n            limb3: 0x0,\n        },\n    },\n    t1: G1Point {\n        x: u384 {\n            limb0: 0xa63b05df652b0d10ef146d26,\n            limb1: 0xfe18040105b9b395b5d8b7b4,\n            limb2: 0x99e3bd5a0a00ab7,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x7f5a622a32440f860d1e2a7f,\n            limb1: 0xccec99dcd194592129af3a63,\n            limb2: 0x15b8d2515d76e2,\n            limb3: 0x0,\n        },\n    },\n    t2: G1Point {\n        x: u384 {\n            limb0: 0xdc25d1aa450e0b4bc212c37e,\n            limb1: 0x8bc01c9595092a222b888108,\n            limb2: 0x1b917517920bad3d,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xe42000a1d58ccb74381f6d19,\n            limb1: 0x22e6e992077a84482141c7eb,\n            limb2: 0x305e8992b148eedb,\n            limb3: 0x0,\n        },\n    },\n    t3: G1Point {\n        x: u384 {\n            limb0: 0x400b2bca37e2b1085e924a77,\n            limb1: 0x3ada15236ba5cfa60111b440,\n            limb2: 0x13567e3b915c8101,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x904b434e748f9713de8cc3d7,\n            limb1: 0x8f4674af5744dedafd63caea,\n            limb2: 0x148d22589b91f0d,\n            limb3: 0x0,\n        },\n    },\n    t4: G1Point {\n        x: u384 {\n            limb0: 0x6c840d9c943fdf45521c64ce,\n            limb1: 0x7342af45d0155a28edd1a7e4,\n            limb2: 0x43d063b130adfb3,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x4c573d1686d9cb4a00733854,\n            limb1: 0x6aff96736194949330952ae7,\n            limb2: 0x261522c408933064,\n            limb3: 0x0,\n        },\n    },\n    lagrange_first: G1Point {\n        x: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        y: u384 { limb0: 0x2, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    },\n    lagrange_last: G1Point {\n        x: u384 {\n            limb0: 0xc894b742744cf102a554d06f,\n            limb1: 0x9ed4d186a2debd4bfe72be9b,\n            limb2: 0x6a032e44c27b0ce,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x26660c8385d13a63d2078399,\n            limb1: 0xad76960162ff0d8c34d25b61,\n            limb2: 0x53396ef4f905183,\n            limb3: 0x0,\n        },\n    },\n};\n\npub const precomputed_lines: [G2Line<u288>; 176] = [\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4d347301094edcbfa224d3d5,\n            limb1: 0x98005e68cacde68a193b54e6,\n            limb2: 0x237db2935c4432bc,\n        },\n        r0a1: u288 {\n            limb0: 0x6b4ba735fba44e801d415637,\n            limb1: 0x707c3ec1809ae9bafafa05dd,\n            limb2: 0x124077e14a7d826a,\n        },\n        r1a0: u288 {\n            limb0: 0x49a8dc1dd6e067932b6a7e0d,\n            limb1: 0x7676d0000961488f8fbce033,\n            limb2: 0x3b7178c857630da,\n        },\n        r1a1: u288 {\n            limb0: 0x98c81278efe1e96b86397652,\n            limb1: 0xe3520b9dfa601ead6f0bf9cd,\n            limb2: 0x2b17c2b12c26fdd0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x19f2be813f1a2cc51a251901,\n            limb1: 0xa120afb4bcd07fdae4c4c91b,\n            limb2: 0xcd8c8d94eedaaa5,\n        },\n        r0a1: u288 {\n            limb0: 0xa3808ba2f25b910b50769d68,\n            limb1: 0xda666e5fa50719fcd79ea2c7,\n            limb2: 0x104262c7ecae13e5,\n        },\n        r1a0: u288 {\n            limb0: 0xd00c9d5338bfc75cd1fe4002,\n            limb1: 0x25f7441c17b6428fffe6266b,\n            limb2: 0x25d0502e1109204d,\n        },\n        r1a1: u288 {\n            limb0: 0x4ce60bf635ff0fe14cf89d2,\n            limb1: 0x9ca0af889fc43d4423a03197,\n            limb2: 0x1b323f9be536f345,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1b3d578c32d1af5736582972,\n            limb1: 0x204fe74db6b371d37e4615ab,\n            limb2: 0xce69bdf84ed6d6d,\n        },\n        r0a1: u288 {\n            limb0: 0xfd262357407c3d96bb3ba710,\n            limb1: 0x47d406f500e66ea29c8764b3,\n            limb2: 0x1e23d69196b41dbf,\n        },\n        r1a0: u288 {\n            limb0: 0x1ec8ee6f65402483ad127f3a,\n            limb1: 0x41d975b678200fce07c48a5e,\n            limb2: 0x2cad36e65bbb6f4f,\n        },\n        r1a1: u288 {\n            limb0: 0xcfa9b8144c3ea2ab524386f5,\n            limb1: 0xd4fe3a18872139b0287570c3,\n            limb2: 0x54c8bc1b50aa258,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb5ee22ba52a7ed0c533b7173,\n            limb1: 0xbfa13123614ecf9c4853249b,\n            limb2: 0x6567a7f6972b7bb,\n        },\n        r0a1: u288 {\n            limb0: 0xcf422f26ac76a450359f819e,\n            limb1: 0xc42d7517ae6f59453eaf32c7,\n            limb2: 0x899cb1e339f7582,\n        },\n        r1a0: u288 {\n            limb0: 0x9f287f4842d688d7afd9cd67,\n            limb1: 0x30af75417670de33dfa95eda,\n            limb2: 0x1121d4ca1c2cab36,\n        },\n        r1a1: u288 {\n            limb0: 0x7c4c55c27110f2c9a228f7d8,\n            limb1: 0x8f14f6c3a2e2c9d74b347bfe,\n            limb2: 0x83ef274ba7913a5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4e7f0c0bfd065f51be57e446,\n            limb1: 0x172f9601c4b0d882b2bca176,\n            limb2: 0x238b85999243f584,\n        },\n        r0a1: u288 {\n            limb0: 0xc4f13eea49c4fb0b88065fdf,\n            limb1: 0xdde9d756dc7a3e60bfe2c7c9,\n            limb2: 0x2021ebaaf4838c43,\n        },\n        r1a0: u288 {\n            limb0: 0x98652d3a0360c4ba067ebd45,\n            limb1: 0x9259019a69cb15cd979b4425,\n            limb2: 0xa93fe44d0287fdc,\n        },\n        r1a1: u288 {\n            limb0: 0x63a369cdd8c09b18c3ad7375,\n            limb1: 0x1baf962de1bd1b1973e138fa,\n            limb2: 0x15320ed6fbfaace4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1a9ecb5a41abb65787e46934,\n            limb1: 0x28fec59f9911882bd4d50306,\n            limb2: 0x25996b3cd58cce92,\n        },\n        r0a1: u288 {\n            limb0: 0x56f5cca0fddcae1bfbee4b4d,\n            limb1: 0x4237b58cc71911abcefd1d92,\n            limb2: 0x2d985c4da93484d4,\n        },\n        r1a0: u288 {\n            limb0: 0x406454881e1f6cab8a9ab13c,\n            limb1: 0x2cdf1a77980edf520cc8f23f,\n            limb2: 0x20ce11ddb649cf18,\n        },\n        r1a1: u288 {\n            limb0: 0xfe104a8fa2c57b6b94bf56d2,\n            limb1: 0xe2debabd9212070fd38f818,\n            limb2: 0x1c1a2364541a15be,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfc23a674d089e9cfdefb1db8,\n            limb1: 0x9ddfd61d289b65a9b4254476,\n            limb2: 0x1e2f561324ef4447,\n        },\n        r0a1: u288 {\n            limb0: 0xf67a6a9e31f6975b220642ea,\n            limb1: 0xccd852893796296e4d1ed330,\n            limb2: 0x94ff1987d19b62,\n        },\n        r1a0: u288 {\n            limb0: 0x360c2a5aca59996d24cc1947,\n            limb1: 0x66c2d7d0d176a3bc53f386e8,\n            limb2: 0x2cfcc62a17fbeecb,\n        },\n        r1a1: u288 {\n            limb0: 0x2ddc73389dd9a9e34168d8a9,\n            limb1: 0xae9afc57944748b835cbda0f,\n            limb2: 0x12f0a1f8cf564067,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xef09c2458cc3abc041e9fa2d,\n            limb1: 0x787c6d7a93e94be14277d18d,\n            limb2: 0xbb1d328b2d75a8a,\n        },\n        r0a1: u288 {\n            limb0: 0x1911705c689a06b1dfab80c,\n            limb1: 0x72781338c8dfb4eb593e44c,\n            limb2: 0x1405249e47100437,\n        },\n        r1a0: u288 {\n            limb0: 0x4dca335dcaeaf9d99ab7ad63,\n            limb1: 0xd36f68812432efaedffce9a7,\n            limb2: 0x1131840a72c4fa9,\n        },\n        r1a1: u288 {\n            limb0: 0x5676dc996dc5b1ce91fd01c1,\n            limb1: 0xbbf4fcfae2062f0031601f40,\n            limb2: 0x2f8f5c5bff703235,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9c963c4bdade6ce3d460b077,\n            limb1: 0x1738311feefc76f565e34e8a,\n            limb2: 0x1aae0d6c9e9888ad,\n        },\n        r0a1: u288 {\n            limb0: 0x9272581fdf80b045c9c3f0a,\n            limb1: 0x3946807b0756e87666798edb,\n            limb2: 0x2bf6eeda2d8be192,\n        },\n        r1a0: u288 {\n            limb0: 0x3e957661b35995552fb475de,\n            limb1: 0xd8076fa48f93f09d8128a2a8,\n            limb2: 0xb6f87c3f00a6fcf,\n        },\n        r1a1: u288 {\n            limb0: 0xcf17d6cd2101301246a8f264,\n            limb1: 0x514d04ad989b91e697aa5a0e,\n            limb2: 0x175f17bbd0ad1219,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x894bc18cc70ca1987e3b8f9f,\n            limb1: 0xd4bfa535181f0f8659b063e3,\n            limb2: 0x19168d524164f463,\n        },\n        r0a1: u288 {\n            limb0: 0x850ee8d0e9b58b82719a6e92,\n            limb1: 0x9fc4eb75cbb027c137d48341,\n            limb2: 0x2b2f8a383d944fa0,\n        },\n        r1a0: u288 {\n            limb0: 0x5451c8974a709483c2b07fbd,\n            limb1: 0xd7e09837b8a2a3b78e7fe525,\n            limb2: 0x347d96be5e7fa31,\n        },\n        r1a1: u288 {\n            limb0: 0x823f2ba2743ee254e4c18a1e,\n            limb1: 0x6a61af5db035c443ed0f8172,\n            limb2: 0x1e840eee275d1063,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdd132544fc661724c31c8a08,\n            limb1: 0x287b549c39c0ea0a391cbe18,\n            limb2: 0x29c2742c0ca03d7b,\n        },\n        r0a1: u288 {\n            limb0: 0xb3076d9218b75e044db009b0,\n            limb1: 0xf0e2da346da73ed6e537273,\n            limb2: 0x16cd48b0b23a5a69,\n        },\n        r1a0: u288 {\n            limb0: 0x5eeab759aec37540ef3b3200,\n            limb1: 0x90c30b490593b4f0a2750f65,\n            limb2: 0x263476e7a8250501,\n        },\n        r1a1: u288 {\n            limb0: 0x437a75606a5486770a5c4450,\n            limb1: 0xbb6a0a3aa70be067ddcfdbfc,\n            limb2: 0xc03b2e169fa0cd0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x185a998303998a727a80004d,\n            limb1: 0xb23554df68e88aa4bcb90b09,\n            limb2: 0x293e05c0080aedc,\n        },\n        r0a1: u288 {\n            limb0: 0xfcd79ce56915d6462fb8a51a,\n            limb1: 0x8c7691de25e8c4b96117b24,\n            limb2: 0xa849fd468442c55,\n        },\n        r1a0: u288 {\n            limb0: 0xc8661606e6d6b1e5a00268eb,\n            limb1: 0xbe2235d18dd52b903e1858e2,\n            limb2: 0x222c8e6db445fbf7,\n        },\n        r1a1: u288 {\n            limb0: 0x803355a17297b5f77e52231c,\n            limb1: 0x7927c03bd5d3798208bf7a23,\n            limb2: 0x111b3dbe82eb4f62,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x18d630598e58bb5d0102b30e,\n            limb1: 0x9767e27b02a8da37411a2787,\n            limb2: 0x100a541662b9cd7c,\n        },\n        r0a1: u288 {\n            limb0: 0x4ca7313df2e168e7e5ea70,\n            limb1: 0xd49cce6abd50b574f31c2d72,\n            limb2: 0x78a2afbf72317e7,\n        },\n        r1a0: u288 {\n            limb0: 0x6d99388b0a1a67d6b48d87e0,\n            limb1: 0x1d8711d321a193be3333bc68,\n            limb2: 0x27e76de53a010ce1,\n        },\n        r1a1: u288 {\n            limb0: 0x77341bf4e1605e982fa50abd,\n            limb1: 0xc5cf10db170b4feaaf5f8f1b,\n            limb2: 0x762adef02274807,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x401adda3a335074256e01cf5,\n            limb1: 0x247f8405ee3a5143b8fc7947,\n            limb2: 0x2c37793269c12835,\n        },\n        r0a1: u288 {\n            limb0: 0x9ecc215e40764ce6a6db3ce0,\n            limb1: 0x14e8a7b5a57b166edcdfb52,\n            limb2: 0x29e744551489dc3f,\n        },\n        r1a0: u288 {\n            limb0: 0xee025e7cc0634b8b2fcd88dd,\n            limb1: 0x94b3602ee4867d04d1e549ae,\n            limb2: 0xcce5739cfedc699,\n        },\n        r1a1: u288 {\n            limb0: 0x2c7318ae1f6db5d41f684334,\n            limb1: 0xd1ba91922e100971bd11dbb5,\n            limb2: 0x1d6c654d5c0913a4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa137b991ba9048aee9fa0bc7,\n            limb1: 0xf5433785c186cd1100ab6b80,\n            limb2: 0xab519fd7cf8e7f9,\n        },\n        r0a1: u288 {\n            limb0: 0x90832f45d3398c60aa1a74e2,\n            limb1: 0x17f7ac209532723f22a344b,\n            limb2: 0x23db979f8481c5f,\n        },\n        r1a0: u288 {\n            limb0: 0x723b0e23c2808a5d1ea6b11d,\n            limb1: 0x3030030d26411f84235c3af5,\n            limb2: 0x122e78da5509eddb,\n        },\n        r1a1: u288 {\n            limb0: 0xf1718c1e21a9bc3ec822f319,\n            limb1: 0xf5ee6dfa3bd3272b2f09f0c7,\n            limb2: 0x5a29c1e27616b34,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6cf0dc0a1a42af130a792bff,\n            limb1: 0x6eeb4dd41cb8967cd7416c41,\n            limb2: 0x832ca9524375cb4,\n        },\n        r0a1: u288 {\n            limb0: 0x7e263bdeb1fedd385682b4fc,\n            limb1: 0x3eee92fe8cdb332aeb31d573,\n            limb2: 0x125dc8ce07406159,\n        },\n        r1a0: u288 {\n            limb0: 0x5fce3aa533d50f8eff589829,\n            limb1: 0x15cefc9330a131dfb10a5ae6,\n            limb2: 0x2fa0a33e98e84220,\n        },\n        r1a1: u288 {\n            limb0: 0xed6540b1d66bbf1f7bf86da8,\n            limb1: 0x3a5266544635cad0d58d64d6,\n            limb2: 0x149069d5ba2e34da,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbc1ede480873fceb8739511e,\n            limb1: 0xd5a60533bd0ce7869efbc15,\n            limb2: 0x182c17d793eba74d,\n        },\n        r0a1: u288 {\n            limb0: 0x83bf38d91876ad8999516bc2,\n            limb1: 0x7756322ea3dc079289d51f2d,\n            limb2: 0x1d0f6156a89a4244,\n        },\n        r1a0: u288 {\n            limb0: 0x6aba652f197be8f99707b88c,\n            limb1: 0xbf94286c245794ea0f562f32,\n            limb2: 0x25a358967a2ca81d,\n        },\n        r1a1: u288 {\n            limb0: 0xc028cbff48c01433e8b23568,\n            limb1: 0xd2e791f5772ed43b056beba1,\n            limb2: 0x83eb38dff4960e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf0ea4a2e24640eb0043fa781,\n            limb1: 0x8a5ca14e0ac3b7d4409fcb40,\n            limb2: 0x67b373e8abc5602,\n        },\n        r0a1: u288 {\n            limb0: 0x7c391162763fc85bf5c94818,\n            limb1: 0xb389e19eb97568e7e7e4617d,\n            limb2: 0x1d3f1c590945ef5c,\n        },\n        r1a0: u288 {\n            limb0: 0xce60f9534da6a36cda2ebe99,\n            limb1: 0x4a48ecfd6beb4596b2736458,\n            limb2: 0x2a3e1d1f2d7f13e0,\n        },\n        r1a1: u288 {\n            limb0: 0x8546f7e328bc13d11bb19a65,\n            limb1: 0xb68deedd4c4b131fa83bb2a5,\n            limb2: 0x15f7b8d2c8e7626e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc2a2b787d8e718e81970db80,\n            limb1: 0x5372abeaf56844dee60d6198,\n            limb2: 0x131210153a2217d6,\n        },\n        r0a1: u288 {\n            limb0: 0x70421980313e09a8a0e5a82d,\n            limb1: 0xf75ca1f68f4b8deafb1d3b48,\n            limb2: 0x102113c9b6feb035,\n        },\n        r1a0: u288 {\n            limb0: 0x4654c11d73bda84873de9b86,\n            limb1: 0xa67601bca2e595339833191a,\n            limb2: 0x1c2b76e439adc8cc,\n        },\n        r1a1: u288 {\n            limb0: 0x9c53a48cc66c1f4d644105f2,\n            limb1: 0xa17a18867557d96fb7c2f849,\n            limb2: 0x1deb99799bd8b63a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc32026c56341297fa080790c,\n            limb1: 0xe23ad2ff283399133533b31f,\n            limb2: 0xa6860f5c968f7ad,\n        },\n        r0a1: u288 {\n            limb0: 0x2966cf259dc612c6a4d8957d,\n            limb1: 0xfba87ea86054f3db5774a08f,\n            limb2: 0xc73408b6a646780,\n        },\n        r1a0: u288 {\n            limb0: 0x6272ce5976d8eeba08f66b48,\n            limb1: 0x7dfbd78fa06509604c0cec8d,\n            limb2: 0x181ec0eaa6660e45,\n        },\n        r1a1: u288 {\n            limb0: 0x48af37c1a2343555fbf8a357,\n            limb1: 0xa7b5e1e20e64d6a9a9ce8e61,\n            limb2: 0x1147dcea39a47abd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x24892e4246676601de7ff011,\n            limb1: 0x538390fa26e7a81a0d183f27,\n            limb2: 0x3410fd15a886c28,\n        },\n        r0a1: u288 {\n            limb0: 0x26b21dedab7f4232acbd4ff0,\n            limb1: 0xa3b070b5094882aba51e9b07,\n            limb2: 0xd20955719266e4d,\n        },\n        r1a0: u288 {\n            limb0: 0xe9495357ddc8fab97186f3fa,\n            limb1: 0x39314e488ba5e56819f2526f,\n            limb2: 0x2319d043c6fac62e,\n        },\n        r1a1: u288 {\n            limb0: 0x43af9a4d62880cabbd0c0091,\n            limb1: 0x85c4696da0e2107eebe8d213,\n            limb2: 0x15e73634a9b93263,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7225a042235a3e52ed4f3656,\n            limb1: 0x29547006cc96d9af59e981e9,\n            limb2: 0x2bb8d83d86b1948,\n        },\n        r0a1: u288 {\n            limb0: 0x7aff77100255f01d01e06689,\n            limb1: 0xeafc9593264cb70dd2c5c40a,\n            limb2: 0x16feef8d11db8f6c,\n        },\n        r1a0: u288 {\n            limb0: 0x38197214c4ec640e68ed7bd6,\n            limb1: 0x6095d2ae38e508122aa0bacd,\n            limb2: 0x15ee15a5c89d28c4,\n        },\n        r1a1: u288 {\n            limb0: 0x59cc5927de581d2bba41fb39,\n            limb1: 0x9368a6b2bf2630ccd9ee111a,\n            limb2: 0x1d1cd760d41a3053,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4033c51e6e469818521cd2ae,\n            limb1: 0xb71a4629a4696b2759f8e19e,\n            limb2: 0x4f5744e29c1eb30,\n        },\n        r0a1: u288 {\n            limb0: 0xa4f47bbc60cb0649dca1c772,\n            limb1: 0x835f427106f4a6b897c6cf23,\n            limb2: 0x17ca6ea4855756bb,\n        },\n        r1a0: u288 {\n            limb0: 0x7f844a35c7eeadf511e67e57,\n            limb1: 0x8bb54fb0b3688cac8860f10,\n            limb2: 0x1c7258499a6bbebf,\n        },\n        r1a1: u288 {\n            limb0: 0x10d269c1779f96946e518246,\n            limb1: 0xce6fcef6676d0dacd395dc1a,\n            limb2: 0x2cf4c6ae1b55d87d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb8a97adf87c08c9754a126a3,\n            limb1: 0x75a7ddf60605563f709106d2,\n            limb2: 0x27851c7de29730da,\n        },\n        r0a1: u288 {\n            limb0: 0x8c5ecd7d4bb18df0499e32c7,\n            limb1: 0x2534a91e249a1d6c311618e6,\n            limb2: 0xc0140c1c13a3493,\n        },\n        r1a0: u288 {\n            limb0: 0x68d1a39239845ea787e22238,\n            limb1: 0xb5a4c3ee8333093391b6d4cd,\n            limb2: 0x1dc5f5b99d814946,\n        },\n        r1a1: u288 {\n            limb0: 0x8ef9ff9b9895bbf279c0fa0d,\n            limb1: 0x7d3d2f468c0ac9e19fb7c2d,\n            limb2: 0xac27e05ceb646b5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xab74a6bae36b17b1d2cc1081,\n            limb1: 0x904cf03d9d30b1fe9dc71374,\n            limb2: 0x14ffdd55685b7d82,\n        },\n        r0a1: u288 {\n            limb0: 0x277f7180b7cf33feded1583c,\n            limb1: 0xc029c3968a75b612303c4298,\n            limb2: 0x20ef4ba03605cdc6,\n        },\n        r1a0: u288 {\n            limb0: 0xd5a7a27c1baba3791ab18957,\n            limb1: 0x973730213d5d70d3e62d6db,\n            limb2: 0x24ca121c566eb857,\n        },\n        r1a1: u288 {\n            limb0: 0x9f4c2dea0492f548ae7d9e93,\n            limb1: 0xe584b6b251a5227c70c5188,\n            limb2: 0x22bcecac2bd5e51b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x340c82974f7221a53fc2f3ac,\n            limb1: 0x7146f18cd591d423874996e7,\n            limb2: 0xa6d154791056f46,\n        },\n        r0a1: u288 {\n            limb0: 0x70894ea6418890d53b5ee12a,\n            limb1: 0x882290cb53b795b0e7c8c208,\n            limb2: 0x1b5777dc18b2899b,\n        },\n        r1a0: u288 {\n            limb0: 0x99a0e528d582006a626206b6,\n            limb1: 0xb1cf825d80e199c5c9c795b5,\n            limb2: 0x2a97495b032f0542,\n        },\n        r1a1: u288 {\n            limb0: 0xc7cf5b455d6f3ba73debeba5,\n            limb1: 0xbb0a01235687223b7b71d0e5,\n            limb2: 0x250024ac44c35e3f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xcd61de038885e78d976e417f,\n            limb1: 0x81fe397759fd09af54407334,\n            limb2: 0x28d442dfdc1a2e12,\n        },\n        r0a1: u288 {\n            limb0: 0x75958d6bff91ac1f4b906a6e,\n            limb1: 0xa9ceae56d3016a7b9be4e8d1,\n            limb2: 0x1eb27b86e4ca4913,\n        },\n        r1a0: u288 {\n            limb0: 0x9e78d6b4bc7dbeb138bb7110,\n            limb1: 0x8fa9343766858993e6f9769e,\n            limb2: 0x25d95a1cdd51a5b7,\n        },\n        r1a1: u288 {\n            limb0: 0xd0e3a9be366e1fc7643320e8,\n            limb1: 0xc0ba2c1555ff8ac9ad6f5297,\n            limb2: 0x1d994b7cec2490e8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1e9cf4d22158dc2de3993ad9,\n            limb1: 0x71f64b04e8e9d545208968bb,\n            limb2: 0x11d02ad0f13cfec0,\n        },\n        r0a1: u288 {\n            limb0: 0xacbea6d3f08ecb77503f05de,\n            limb1: 0x611d520b74ddcb9f2e5828f0,\n            limb2: 0x26202c3e458eb353,\n        },\n        r1a0: u288 {\n            limb0: 0xb61d83483ca541f57440987c,\n            limb1: 0xa086532338a5827b1445f1c6,\n            limb2: 0x1f5ebd76b5310b94,\n        },\n        r1a1: u288 {\n            limb0: 0xcac91c4843a6bad2a7cc91cb,\n            limb1: 0x4fbd17f04d76a1b165fed733,\n            limb2: 0x1e860876cd8963af,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xccf841cf5c1cf8f4a0485e28,\n            limb1: 0xb5077662d0ce9d755af1446b,\n            limb2: 0x2b08658e9d5ba5cb,\n        },\n        r0a1: u288 {\n            limb0: 0x6ce62184a15685babd77f27f,\n            limb1: 0x5ff9bb7d74505b0542578299,\n            limb2: 0x7244563488bab2,\n        },\n        r1a0: u288 {\n            limb0: 0xec778048d344ac71275d961d,\n            limb1: 0x1273984019753000ad890d33,\n            limb2: 0x27c2855e60d361bd,\n        },\n        r1a1: u288 {\n            limb0: 0xa7a0071e22af2f3a79a12da,\n            limb1: 0xc84a6fd41c20759ff6ff169a,\n            limb2: 0x23e7ef2a308e49d1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x68a906f2806a6cc426b24994,\n            limb1: 0x784dcf104c1dcf0e8f856da2,\n            limb2: 0xc9654f8fbdf2892,\n        },\n        r0a1: u288 {\n            limb0: 0x9bea5cd65447a96f85459dd6,\n            limb1: 0x13d9bb083bdab401220475b7,\n            limb2: 0x2bd224747d636b4e,\n        },\n        r1a0: u288 {\n            limb0: 0xae8a73f18ff26f9d25fc0042,\n            limb1: 0x947f72870798502183924783,\n            limb2: 0xae687f4109514e,\n        },\n        r1a1: u288 {\n            limb0: 0x3dd221c63901d92fbe7bec24,\n            limb1: 0x803d8cd513a8fe56a98984c2,\n            limb2: 0x11912c747e407b17,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7105024c431a33683d9d0b9d,\n            limb1: 0x12e23637b641ab0e5b322ad8,\n            limb2: 0x2918e9e08c764c28,\n        },\n        r0a1: u288 {\n            limb0: 0x26384979d1f5417e451aeabf,\n            limb1: 0xacfb499e362291d0b053bbf6,\n            limb2: 0x2a6ad1a1f7b04ef6,\n        },\n        r1a0: u288 {\n            limb0: 0xba4db515be70c384080fc9f9,\n            limb1: 0x5a983a6afa9cb830fa5b66e6,\n            limb2: 0x8cc1fa494726a0c,\n        },\n        r1a1: u288 {\n            limb0: 0x59c9af9399ed004284eb6105,\n            limb1: 0xef37f66b058b4c971d9c96b0,\n            limb2: 0x2c1839afde65bafa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd468740be11c72f0d61b3544,\n            limb1: 0xee4537e6229611d1ee5d08f9,\n            limb2: 0x25f95d481420c22b,\n        },\n        r0a1: u288 {\n            limb0: 0x1057f10f48392fe4e6a8cbb,\n            limb1: 0x71eaba2ec1ad3c43203ee8b9,\n            limb2: 0x28ebfa58c1c65aa1,\n        },\n        r1a0: u288 {\n            limb0: 0x7d03e13f07b1eecb5cd01d9d,\n            limb1: 0x4e866746c563214e0043c745,\n            limb2: 0x2cd7dc2b0c6cbb4b,\n        },\n        r1a1: u288 {\n            limb0: 0x5eabc3fb0a14cc2cb63ecd7c,\n            limb1: 0xcfa5e22677730b5197985457,\n            limb2: 0x3db7ea133dcce6e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6bf13a27b0f4eb6657abc4b,\n            limb1: 0xf78d57f089bffdf07c676bb3,\n            limb2: 0x228e4aefbdd738df,\n        },\n        r0a1: u288 {\n            limb0: 0x4f41a40b04ec964619823053,\n            limb1: 0xfa3fb44f4a80641a9bb3bc09,\n            limb2: 0x29bf29a3d071ec4b,\n        },\n        r1a0: u288 {\n            limb0: 0x83823dcdff02bdc8a0e6aa03,\n            limb1: 0x79ac92f113de29251cd73a98,\n            limb2: 0x1ccdb791718d144,\n        },\n        r1a1: u288 {\n            limb0: 0xa074add9d066db9a2a6046b6,\n            limb1: 0xef3a70034497456c7d001a5,\n            limb2: 0x27d09562d815b4a6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbf11dea21cd379f966caa6c2,\n            limb1: 0x4e0f8e4b2b5917c45d535ef,\n            limb2: 0xc735dd71c68e4ca,\n        },\n        r0a1: u288 {\n            limb0: 0xa605ae0ab6554385d99f6e12,\n            limb1: 0x87cd556340ce9c7cc8a6ac63,\n            limb2: 0x210538d78dc01108,\n        },\n        r1a0: u288 {\n            limb0: 0xc496c32da98d1ae345266146,\n            limb1: 0x76a57df0969a21af8983781e,\n            limb2: 0x269e9aa6f168324a,\n        },\n        r1a1: u288 {\n            limb0: 0x820373298d73bb39e9d80644,\n            limb1: 0x987291249714fb863a8353df,\n            limb2: 0x120dfbe3b8b4c9c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x87a44d343cc761056f4f2eae,\n            limb1: 0x18016f16818253360d2c8adf,\n            limb2: 0x1bcd5c6e597d735e,\n        },\n        r0a1: u288 {\n            limb0: 0x593d7444c376f6d69289660b,\n            limb1: 0x1d6d97020b59cf2e4b38be4f,\n            limb2: 0x17133b62617f63a7,\n        },\n        r1a0: u288 {\n            limb0: 0x88cac99869bb335ec9553a70,\n            limb1: 0x95bcfa7f7c0b708b4d737afc,\n            limb2: 0x1eec79b9db274c09,\n        },\n        r1a1: u288 {\n            limb0: 0xe465a53e9fe085eb58a6be75,\n            limb1: 0x868e45cc13e7fd9d34e11839,\n            limb2: 0x2b401ce0f05ee6bb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x83f48fbac5c1b94486c2d037,\n            limb1: 0xf95d9333449543de78c69e75,\n            limb2: 0x7bca8163e842be7,\n        },\n        r0a1: u288 {\n            limb0: 0x60157b2ff6e4d737e2dac26b,\n            limb1: 0x30ab91893fcf39d9dcf1b89,\n            limb2: 0x29a58a02490d7f53,\n        },\n        r1a0: u288 {\n            limb0: 0x520f9cb580066bcf2ce872db,\n            limb1: 0x24a6e42c185fd36abb66c4ba,\n            limb2: 0x309b07583317a13,\n        },\n        r1a1: u288 {\n            limb0: 0x5a4c61efaa3d09a652c72471,\n            limb1: 0xfcb2676d6aa28ca318519d2,\n            limb2: 0x1405483699afa209,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x887e3388d815fefbe4de67c7,\n            limb1: 0x39aabdf16d5e820c468f07b4,\n            limb2: 0x1021ded60046ae5d,\n        },\n        r0a1: u288 {\n            limb0: 0x1ffd3f4a7c51d9b9b426759a,\n            limb1: 0xfdcac9390f248e3358903bef,\n            limb2: 0xc85ed498a09eaa4,\n        },\n        r1a0: u288 {\n            limb0: 0x2e3d9ddae0fe891656c2ebbd,\n            limb1: 0xdbb3756450184a201ee6f6f4,\n            limb2: 0x1f77f974e15e790c,\n        },\n        r1a1: u288 {\n            limb0: 0xc94662f8a91d828962406a80,\n            limb1: 0x35b6584b35acc901cd8c124d,\n            limb2: 0x1b6cbe14b354c93c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4e0b59155b1586438f00d1d0,\n            limb1: 0xe7fce333454bea5e5d19da67,\n            limb2: 0x2286d1f263814635,\n        },\n        r0a1: u288 {\n            limb0: 0xdb0108b13b264fa9efe313bd,\n            limb1: 0x25a0231213b6afe0cc5ac9,\n            limb2: 0x24a55b37cab9e96f,\n        },\n        r1a0: u288 {\n            limb0: 0x10568376d2134a925d8224e2,\n            limb1: 0x66ff6c53966243f66701ce36,\n            limb2: 0xf0bab9bbaa38df8,\n        },\n        r1a1: u288 {\n            limb0: 0x9faf33001f67c41b255de466,\n            limb1: 0x30656441023848f72165541a,\n            limb2: 0x1b964ad8ff7afd21,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbfdfdae86101e29da3e869b8,\n            limb1: 0xf969a9b961a28b872e56aac2,\n            limb2: 0x1afdc719440d90f0,\n        },\n        r0a1: u288 {\n            limb0: 0xee43c995686f13baa9b07266,\n            limb1: 0xbfa387a694c641cceee4443a,\n            limb2: 0x104d8c02eb7f60c8,\n        },\n        r1a0: u288 {\n            limb0: 0x8d451602b3593e798aecd7fb,\n            limb1: 0x69ffbefe7c5ac2cf68e8691e,\n            limb2: 0x2ea064a1bc373d28,\n        },\n        r1a1: u288 {\n            limb0: 0x6e7a663073bfe88a2b02326f,\n            limb1: 0x5faadb36847ca0103793fa4a,\n            limb2: 0x26c09a8ec9303836,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa02ed8b8bea4e6398937e400,\n            limb1: 0xba34c7a8c92f6fb9c7eb1009,\n            limb2: 0x14021afa35038d6f,\n        },\n        r0a1: u288 {\n            limb0: 0x5fed8893a16fc89c77ab6e69,\n            limb1: 0x341d37d9e774298c8289039e,\n            limb2: 0x14228ddafe44ce59,\n        },\n        r1a0: u288 {\n            limb0: 0x578a1f7a73e6d177db8ef992,\n            limb1: 0xe0414e8de48555d5e7715a16,\n            limb2: 0x48dd64815f16a0a,\n        },\n        r1a1: u288 {\n            limb0: 0xf23687d236711b4c0ca8ce76,\n            limb1: 0x50664dd13060c77c5166e7fe,\n            limb2: 0x10090c847a3c2764,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3d038747ebac16adc1c50bdd,\n            limb1: 0xe3706a783e99f73ac742aa1a,\n            limb2: 0x17eac23b00b545ff,\n        },\n        r0a1: u288 {\n            limb0: 0xdc25ff0bd02abcbe502c4e37,\n            limb1: 0x39b92e6ebb65e5f2d8504f90,\n            limb2: 0x2415b5f61301dff6,\n        },\n        r1a0: u288 {\n            limb0: 0x9cdcb2146d15f37900db82ac,\n            limb1: 0x96c3940e2f5c5f8198fadee3,\n            limb2: 0x2f662ea79b473fc2,\n        },\n        r1a1: u288 {\n            limb0: 0xc0fb95686de65e504ed4c57a,\n            limb1: 0xec396c7c4275d4e493b00713,\n            limb2: 0x106d2aab8d90d517,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb836776ba636148782ccc53a,\n            limb1: 0xc85e575c26103c32434b48b3,\n            limb2: 0xbbd5f5df165aeca,\n        },\n        r0a1: u288 {\n            limb0: 0x75eb6906bb101ea7f525fe68,\n            limb1: 0xa69a82fea7ca9f41fb7f0712,\n            limb2: 0x2d0f62c13f7d525b,\n        },\n        r1a0: u288 {\n            limb0: 0x94475fc56769da417d920d02,\n            limb1: 0x9bacf6721bad4841a1ead330,\n            limb2: 0x264649c0901fd86,\n        },\n        r1a1: u288 {\n            limb0: 0x45cddba5ab6cb8d80986a4b5,\n            limb1: 0x8a2735ec64c123d9b1d94e43,\n            limb2: 0x8b8c3087a3fc782,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x49bbb4d856921e3177c0b5bf,\n            limb1: 0x76d84d273694e662bdd5d364,\n            limb2: 0xea5dc611bdd369d,\n        },\n        r0a1: u288 {\n            limb0: 0x9e9fc3adc530fa3c5c6fd7fe,\n            limb1: 0x114bb0c0e8bd247da41b3883,\n            limb2: 0x6044124f85d2ce,\n        },\n        r1a0: u288 {\n            limb0: 0xa6e604cdb4e40982a97c084,\n            limb1: 0xef485caa56c7820be2f6b11d,\n            limb2: 0x280de6387dcbabe1,\n        },\n        r1a1: u288 {\n            limb0: 0xcaceaf6df5ca9f8a18bf2e1e,\n            limb1: 0xc5cce932cc6818b53136c142,\n            limb2: 0x12f1cd688682030c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x37497c23dcf629df58a5fa12,\n            limb1: 0x4fcd5534ae47bded76245ac9,\n            limb2: 0x1715ab081e32ac95,\n        },\n        r0a1: u288 {\n            limb0: 0x856275471989e2c288e3c83,\n            limb1: 0xb42d81a575b89b127a7821a,\n            limb2: 0x5fa75a0e4ae3118,\n        },\n        r1a0: u288 {\n            limb0: 0xeb22351e8cd345c23c0a3fef,\n            limb1: 0x271feb16d4b47d2267ac9d57,\n            limb2: 0x258f9950b9a2dee5,\n        },\n        r1a1: u288 {\n            limb0: 0xb5f75468922dc025ba7916fa,\n            limb1: 0x7e24515de90edf1bde4edd9,\n            limb2: 0x289145b3512d4d81,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xce1ded2782ddd08e6865ab4,\n            limb1: 0x4583c91a985a438fdac4f4c,\n            limb2: 0x13d595d330502573,\n        },\n        r0a1: u288 {\n            limb0: 0x595067b65592ac4d6c9b5b5c,\n            limb1: 0x4ef806daef8c02f94ecaf97f,\n            limb2: 0x7869c312062e0a8,\n        },\n        r1a0: u288 {\n            limb0: 0x38cb6ea081fb30e87015f4c3,\n            limb1: 0xc380b087269e9836e39be81,\n            limb2: 0x7619e66982167dd,\n        },\n        r1a1: u288 {\n            limb0: 0x84f696893f8cb0e616e335b6,\n            limb1: 0xb7fd749a8812159ce96c3f43,\n            limb2: 0x2b80806bd7eeb0cd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xeed11dd701d662b9bd85fda4,\n            limb1: 0x284c3b305b25ed852d47268e,\n            limb2: 0x37e8aad03f1efa3,\n        },\n        r0a1: u288 {\n            limb0: 0x1ba355db79739c5b954c99e,\n            limb1: 0xd38db182b11b150b1ac2b6cd,\n            limb2: 0x1b416cf91fe88aa,\n        },\n        r1a0: u288 {\n            limb0: 0xd8f230276c30350267b5d2e6,\n            limb1: 0x6057c8dd8abc942db7f6e156,\n            limb2: 0x127d2dc576c754d8,\n        },\n        r1a1: u288 {\n            limb0: 0x3a34d39084d5d8b2204f6632,\n            limb1: 0xe18cb27f7b45639b6cb65d23,\n            limb2: 0xb6cc7185cc1c602,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x95b7b32bcc3119c64a62a8de,\n            limb1: 0xe07184496f17bbd59a4b7bbd,\n            limb2: 0x1708c536fd78b531,\n        },\n        r0a1: u288 {\n            limb0: 0xfa85b5778c77166c1523a75e,\n            limb1: 0x89a00c53309a9e525bef171a,\n            limb2: 0x2d2287dd024e421,\n        },\n        r1a0: u288 {\n            limb0: 0x31fd0884eaf2208bf8831e72,\n            limb1: 0x537e04ea344beb57ee645026,\n            limb2: 0x23c7f99715257261,\n        },\n        r1a1: u288 {\n            limb0: 0x8c38b3aeea525f3c2d2fdc22,\n            limb1: 0xf838a99d9ec8ed6dcec6a2a8,\n            limb2: 0x2973d5159ddc479a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3f058d8c63fd905d3ca29b42,\n            limb1: 0x1f0a90982cc68e4ddcd83e57,\n            limb2: 0x240aeaae0783fbfa,\n        },\n        r0a1: u288 {\n            limb0: 0xedfee81d80da310fdf0d0d8,\n            limb1: 0xc2208e6de8806cf491bd74d4,\n            limb2: 0xb7318be62a476af,\n        },\n        r1a0: u288 {\n            limb0: 0x3c6920c8a24454c634f388fe,\n            limb1: 0x23328a006312a722ae09548b,\n            limb2: 0x1d2f1c58b80432e2,\n        },\n        r1a1: u288 {\n            limb0: 0xb72980574f7a877586de3a63,\n            limb1: 0xcd773b87ef4a29c16784c5ae,\n            limb2: 0x1f812c7e22f339c5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4ee6eef57f5c866acf77f595,\n            limb1: 0x3aec7154a9f1f285829186a5,\n            limb2: 0x283e9794a30457d,\n        },\n        r0a1: u288 {\n            limb0: 0xd59a661484d8c376567086d3,\n            limb1: 0x1f9c69bb6fb467cd93899dd2,\n            limb2: 0x25dd4d1be0b765b,\n        },\n        r1a0: u288 {\n            limb0: 0x5b9c47593dfbd508ab34c7b3,\n            limb1: 0x5cc228830e12085b69b345df,\n            limb2: 0x563a3f38bb17d2d,\n        },\n        r1a1: u288 {\n            limb0: 0xd13362074a4f1c9ad9063afd,\n            limb1: 0xae0b6ddad1bdbd332e510b50,\n            limb2: 0x6fe176282e9d5fb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8909147ac871b1dfb1b93dea,\n            limb1: 0x142dbce634570b3004e7fc,\n            limb2: 0x6c20d9db5dd84da,\n        },\n        r0a1: u288 {\n            limb0: 0x9860d4eddaa4bc238176c6fc,\n            limb1: 0x2b0526a4c3964c89747e80c5,\n            limb2: 0x8fd2f58f97118b6,\n        },\n        r1a0: u288 {\n            limb0: 0x350f6ba8623173a2b59246f5,\n            limb1: 0xc1b28fd98d68ff68c2905942,\n            limb2: 0x8244875fe9df1c7,\n        },\n        r1a1: u288 {\n            limb0: 0x57cc1c6a24b662006d9dbe1b,\n            limb1: 0x5ad285ba45ea4be688bff724,\n            limb2: 0x2b07fd32ff344b21,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfeebe92941f95b6ea1d095bb,\n            limb1: 0x9c7962eb8bbeb95a9ca7cf50,\n            limb2: 0x290bdaf3b9a08dc3,\n        },\n        r0a1: u288 {\n            limb0: 0x686cfa11c9d4b93675495599,\n            limb1: 0xb1d69e17b4b5ebf64f0d51e1,\n            limb2: 0x2c18bb4bdc2e9567,\n        },\n        r1a0: u288 {\n            limb0: 0x17419b0f6a04bfc98d71527,\n            limb1: 0x80eba6ff02787e3de964a4d1,\n            limb2: 0x26087bb100e7ff9f,\n        },\n        r1a1: u288 {\n            limb0: 0x17c4ee42c3f612c43a08f689,\n            limb1: 0x7276bdda2df6d51a291dba69,\n            limb2: 0x40a7220ddb393e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x37349ad9dc3023fc75053e02,\n            limb1: 0x33a3d352f746ab24b3b58b0a,\n            limb2: 0xec4c339b84b811d,\n        },\n        r0a1: u288 {\n            limb0: 0x7dcfa2460a0ad9b521a47470,\n            limb1: 0xba3ff4b52958f6b7341790da,\n            limb2: 0x24709d3b126eb975,\n        },\n        r1a0: u288 {\n            limb0: 0xe5167ab2a7c59462398695fe,\n            limb1: 0x639d95ac9180109e9716c52d,\n            limb2: 0x1ad3dd11a73c7763,\n        },\n        r1a1: u288 {\n            limb0: 0xc4074c8a20ffec99be26ea0d,\n            limb1: 0x33d88e5ff7a03f8fc7673634,\n            limb2: 0x212a99002b140a7c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x830d777c19040571a1d72fd0,\n            limb1: 0x651b2c6b8c292020817a633f,\n            limb2: 0x268af1e285bc59ff,\n        },\n        r0a1: u288 {\n            limb0: 0xede78baa381c5bce077f443d,\n            limb1: 0x540ff96bae21cd8b9ae5438b,\n            limb2: 0x12a1fa7e3b369242,\n        },\n        r1a0: u288 {\n            limb0: 0x797c0608e5a535d8736d4bc5,\n            limb1: 0x375faf00f1147656b7c1075f,\n            limb2: 0xda60fab2dc5a639,\n        },\n        r1a1: u288 {\n            limb0: 0x610d26085cfbebdb30ce476e,\n            limb1: 0x5bc55890ff076827a09e8444,\n            limb2: 0x14272ee2d25f20b7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x430bef5bf19edee76f43f86d,\n            limb1: 0xd0d7e3e70da75944107b2d4a,\n            limb2: 0x1a773d3afca56895,\n        },\n        r0a1: u288 {\n            limb0: 0xac9908b990c2eba0c566a721,\n            limb1: 0xb5b9dd164b61dc1a46f57bc0,\n            limb2: 0x153897d14189a3e9,\n        },\n        r1a0: u288 {\n            limb0: 0x873c42f94417c98a18ef8b21,\n            limb1: 0x7fd90a68e925814a5c90c64e,\n            limb2: 0xb43f89cdc102905,\n        },\n        r1a1: u288 {\n            limb0: 0x6a2633ae3430261a8d930055,\n            limb1: 0xccf2888e7fa1b1be32616fcc,\n            limb2: 0x281f7352c8bd69b4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd6862e1a4ca3b2baf6f8d8aa,\n            limb1: 0x96f9066dded3a3d899025af4,\n            limb2: 0x1a98af9f0d48fd3,\n        },\n        r0a1: u288 {\n            limb0: 0x276b417cc61ea259c114314e,\n            limb1: 0x464399e5e0037b159866b246,\n            limb2: 0x12cc97dcf32896b5,\n        },\n        r1a0: u288 {\n            limb0: 0xef72647f4c2d08fc038c4377,\n            limb1: 0x34883cea19be9a490a93cf2b,\n            limb2: 0x10d01394daa61ed0,\n        },\n        r1a1: u288 {\n            limb0: 0xdf345239ece3acaa62919643,\n            limb1: 0x914780908ece64e763cca062,\n            limb2: 0xee2a80dbd2012a3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1d5a31f4d08a0ebf7e071e00,\n            limb1: 0xcd1244dd95dd30005f531f81,\n            limb2: 0xb4cb469a2dcf4f1,\n        },\n        r0a1: u288 {\n            limb0: 0x7c5938adaf38b355092de1f1,\n            limb1: 0x292ab08995b293abfcba14b,\n            limb2: 0x1fd126a2b9f37c67,\n        },\n        r1a0: u288 {\n            limb0: 0x6e9d352b02a7cb771fcc33f9,\n            limb1: 0x7754d8536eefda2025a07340,\n            limb2: 0x1840289291c35a72,\n        },\n        r1a1: u288 {\n            limb0: 0xe85f465417b7bd758c547b2e,\n            limb1: 0xf7f703c3bc55ff8a01fa9365,\n            limb2: 0xfa301227880a841,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb871630bb14808308256993,\n            limb1: 0x5aa6407e90ac7cd9d34c84b1,\n            limb2: 0x1a45d81956be51f9,\n        },\n        r0a1: u288 {\n            limb0: 0x4e35a5f1c75bc96bbe481d7c,\n            limb1: 0xb461fa7d1b269bf49be0ed7f,\n            limb2: 0x88efe970e8c4e4a,\n        },\n        r1a0: u288 {\n            limb0: 0xff160df5ead7b7b25d8892e5,\n            limb1: 0xbbbd6b9b216396e83fd6aa70,\n            limb2: 0x2dcf636e87cde612,\n        },\n        r1a1: u288 {\n            limb0: 0x44d33f7f0dbcaccf59607fcd,\n            limb1: 0xae52f65a36ac4f17e0e213de,\n            limb2: 0x12e6c11148485b9b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa89926f3c9ed74cf35d8982d,\n            limb1: 0x8e9003f1a42b81a81fe0df1e,\n            limb2: 0x2732162604574861,\n        },\n        r0a1: u288 {\n            limb0: 0x4ac22d9feb0443ee015b81e1,\n            limb1: 0xd442070c95acaa6a39e85ae9,\n            limb2: 0x1a42773c0ac19a09,\n        },\n        r1a0: u288 {\n            limb0: 0x7d32a4a55a853c2309cd6f0,\n            limb1: 0x747d1e031aa2229e38cfca1f,\n            limb2: 0x1b6358645f1162ad,\n        },\n        r1a1: u288 {\n            limb0: 0xd511412ffa32391dda88c29b,\n            limb1: 0x5f57b2aab83993734eb330b0,\n            limb2: 0xc3766c22260b874,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa4058149e82ea51362b79be4,\n            limb1: 0x734eba2621918a820ae44684,\n            limb2: 0x110a314a02272b1,\n        },\n        r0a1: u288 {\n            limb0: 0xe2b43963ef5055df3c249613,\n            limb1: 0x409c246f762c0126a1b3b7b7,\n            limb2: 0x19aa27f34ab03585,\n        },\n        r1a0: u288 {\n            limb0: 0x179aad5f620193f228031d62,\n            limb1: 0x6ba32299b05f31b099a3ef0d,\n            limb2: 0x157724be2a0a651f,\n        },\n        r1a1: u288 {\n            limb0: 0xa33b28d9a50300e4bbc99137,\n            limb1: 0x262a51847049d9b4d8cea297,\n            limb2: 0x189acb4571d50692,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbd50e560f6bb994a2922fa51,\n            limb1: 0x99a1d1b01aa18c7f31e917fc,\n            limb2: 0xd7ef26150626982,\n        },\n        r0a1: u288 {\n            limb0: 0xf014da7a050c535a40cfc124,\n            limb1: 0x3b1a2e82c4f0fc6379900c54,\n            limb2: 0x1a5cfd9a14902546,\n        },\n        r1a0: u288 {\n            limb0: 0x9aaa7b13fd8f24f65c93eec5,\n            limb1: 0xab93d53f2815295691702b82,\n            limb2: 0xde083d90578af6f,\n        },\n        r1a1: u288 {\n            limb0: 0xfbd08ec0a79725a4b6e8b67c,\n            limb1: 0x69946154b610ed695859295b,\n            limb2: 0x277a133a0d6da917,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x29bd4381ae4afc677ee37ed6,\n            limb1: 0x29ed43453f9a008d9176f004,\n            limb2: 0x24134eb915104f43,\n        },\n        r0a1: u288 {\n            limb0: 0x81597f82bb67e90a3e72bdd2,\n            limb1: 0xab3bbde5f7bbb4df6a6b5c19,\n            limb2: 0x19ac61eea40a367c,\n        },\n        r1a0: u288 {\n            limb0: 0xe30a79342fb3199651aee2fa,\n            limb1: 0xf500f028a73ab7b7db0104a3,\n            limb2: 0x808b50e0ecb5e4d,\n        },\n        r1a1: u288 {\n            limb0: 0x55f2818453c31d942444d9d6,\n            limb1: 0xf6dd80c71ab6e893f2cf48db,\n            limb2: 0x13c3ac4488abd138,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x32bc8a981429b931b50b70e1,\n            limb1: 0x99cffcd897696a0e5c987090,\n            limb2: 0x2663f59204065aeb,\n        },\n        r0a1: u288 {\n            limb0: 0x6d0d07933c107a489c682134,\n            limb1: 0xb81690a5db81aa6e8c0ef203,\n            limb2: 0x27cb7b6ce66b5225,\n        },\n        r1a0: u288 {\n            limb0: 0xf6fc5c5aa501cffb8ee75a4b,\n            limb1: 0xf8d08f9383f191384ba8077b,\n            limb2: 0x28b89e3f89c071c1,\n        },\n        r1a1: u288 {\n            limb0: 0x1bd9021070481b0a40cb6d36,\n            limb1: 0x86562734b4f3fcfb46e39713,\n            limb2: 0x1ec7729185561f74,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd1464269bbeafa546f559b8f,\n            limb1: 0xab7f7dcd1ac32b86979471cf,\n            limb2: 0x6a38256ee96f113,\n        },\n        r0a1: u288 {\n            limb0: 0xf14d50984e65f9bc41df4e7e,\n            limb1: 0x350aff9be6f9652ad441a3ad,\n            limb2: 0x1b1e60534b0a6aba,\n        },\n        r1a0: u288 {\n            limb0: 0x9e98507da6cc50a56f023849,\n            limb1: 0xcf8925e03f2bb5c1ba0962dd,\n            limb2: 0x2b18961810a62f87,\n        },\n        r1a1: u288 {\n            limb0: 0x3a4c61b937d4573e3f2da299,\n            limb1: 0x6f4c6c13fd90f4edc322796f,\n            limb2: 0x13f4e99b6a2f025e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd7f1137b131005c05a263909,\n            limb1: 0x377579bc2a44238703830641,\n            limb2: 0x1edb40cec982e433,\n        },\n        r0a1: u288 {\n            limb0: 0xb234350aafc13259037ff7b8,\n            limb1: 0x8ce5fcfc41890347214723f3,\n            limb2: 0x1d5cfe6e2536a23b,\n        },\n        r1a0: u288 {\n            limb0: 0x8d74f12ae2cdd199736e4db9,\n            limb1: 0xf5835da25b7c74dea8742767,\n            limb2: 0xa4f9baaf2b585aa,\n        },\n        r1a1: u288 {\n            limb0: 0x6c077e93c1a1bae84d31f2de,\n            limb1: 0xeb24bf9c8e1a11a15952b35f,\n            limb2: 0x182a33beae2d73ac,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe0115a79120ae892a72f3dcb,\n            limb1: 0xec67b5fc9ea414a4020135f,\n            limb2: 0x1ee364e12321904a,\n        },\n        r0a1: u288 {\n            limb0: 0xa74d09666f9429c1f2041cd9,\n            limb1: 0x57ffe0951f863dd0c1c2e97a,\n            limb2: 0x154877b2d1908995,\n        },\n        r1a0: u288 {\n            limb0: 0xcbe5e4d2d2c91cdd4ccca0,\n            limb1: 0xe6acea145563a04b2821d120,\n            limb2: 0x18213221f2937afb,\n        },\n        r1a1: u288 {\n            limb0: 0xfe20afa6f6ddeb2cb768a5ae,\n            limb1: 0x1a3b509131945337c3568fcf,\n            limb2: 0x127b5788263a927e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x23a3796fea17793ca760d4b4,\n            limb1: 0xb4abf7ebb030cb2f1630ed5f,\n            limb2: 0x64ab24ff28d4416,\n        },\n        r0a1: u288 {\n            limb0: 0x538a1fa509f26d8c8bdeb966,\n            limb1: 0x73f3e2cd56d3c514e4a37c42,\n            limb2: 0x60a236e3776ce68,\n        },\n        r1a0: u288 {\n            limb0: 0xd80f5ba56c16fe54bda3fa80,\n            limb1: 0xe5f8701be9499623ce8a673d,\n            limb2: 0x18c79fac25052970,\n        },\n        r1a1: u288 {\n            limb0: 0x8929aad47a81f1378a817ef5,\n            limb1: 0xfadba04c7242b43b5cf39d33,\n            limb2: 0xb3e5f5c3c9fb3b2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe7c658aecdab4db3c83f7927,\n            limb1: 0xfbf162264ca04ee50c70bde8,\n            limb2: 0x2a20f4565b7ff885,\n        },\n        r0a1: u288 {\n            limb0: 0x45b1c2f0a1226361f42683c0,\n            limb1: 0x9acdd892c48c08de047296bc,\n            limb2: 0x27836373108925d4,\n        },\n        r1a0: u288 {\n            limb0: 0xc0ea9294b345e6d4892676a7,\n            limb1: 0xcba74eca77086af245d1606e,\n            limb2: 0xf20edac89053e72,\n        },\n        r1a1: u288 {\n            limb0: 0x4c92a28f2779a527a68a938c,\n            limb1: 0x3a1c3c55ff9d20eac109fab3,\n            limb2: 0x21c4a8c524b1ee7d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x731f3a1b36de3023901591ff,\n            limb1: 0xe34bb92f321ca5d3092bcbad,\n            limb2: 0x2216559b45dd1c2f,\n        },\n        r0a1: u288 {\n            limb0: 0x3bac805b2d142e0cc0edeb11,\n            limb1: 0x5d11df064af70b6d83d6ce74,\n            limb2: 0x14c2db65d318303,\n        },\n        r1a0: u288 {\n            limb0: 0xc3ee59929ecba416af62e06e,\n            limb1: 0xcbdffb49b2c9219cfda57258,\n            limb2: 0x9e92730073f74d7,\n        },\n        r1a1: u288 {\n            limb0: 0x137f2ce23b788e764203080c,\n            limb1: 0x1340ccaf8101da98864c6b0c,\n            limb2: 0x103ddd7382137938,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa68021d593c46246af22559e,\n            limb1: 0x5c2cfc5bc4cd1b48f4704134,\n            limb2: 0x296066ede1298f8c,\n        },\n        r0a1: u288 {\n            limb0: 0xfe17dd6765eb9b9625eb6a84,\n            limb1: 0x4e35dd8e8f6088bb14299f8d,\n            limb2: 0x1a380ab2689106e4,\n        },\n        r1a0: u288 {\n            limb0: 0x82bacf337ca09853df42bc59,\n            limb1: 0xa15de4ef34a30014c5a2e9ae,\n            limb2: 0x243cc0cec53c778b,\n        },\n        r1a1: u288 {\n            limb0: 0xcb2a1bf18e3ba9349b0a8bf2,\n            limb1: 0x35134b2505cbb5a4c91f0ac4,\n            limb2: 0x25e45206b13f43c4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8e97b007ffd9891bd0e77650,\n            limb1: 0x77671278ac33f17df6b1db88,\n            limb2: 0x243daddc47f5d5c2,\n        },\n        r0a1: u288 {\n            limb0: 0x655fe4c8bbe5ee06aaa0054b,\n            limb1: 0xf751450b02c93c7ddea95938,\n            limb2: 0x21aa988e950d563f,\n        },\n        r1a0: u288 {\n            limb0: 0xb51b3b6b8582de3eb0549518,\n            limb1: 0x84a1031766b7e465f5bbf40c,\n            limb2: 0xd46c2d5b95e5532,\n        },\n        r1a1: u288 {\n            limb0: 0x50b6ddd8a5eef0067652191e,\n            limb1: 0x298832a0bc46ebed8bff6190,\n            limb2: 0xb568b4fe8311f93,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6ad6cf94fc3bf4bfbd69ba1d,\n            limb1: 0x806961a05ecbb229a267a99d,\n            limb2: 0x1671d0fb2e942009,\n        },\n        r0a1: u288 {\n            limb0: 0x2e9b86ac823b3213d26fe614,\n            limb1: 0x48a66f0ee2f66e6be68a4eab,\n            limb2: 0x9162eb41435b523,\n        },\n        r1a0: u288 {\n            limb0: 0xeda3ea2df37c2c19a07e26a6,\n            limb1: 0x96cb3f72bef333861a5f6793,\n            limb2: 0x6e84ee455d519bf,\n        },\n        r1a1: u288 {\n            limb0: 0x52f50c292b08883fa721dada,\n            limb1: 0x2029cc6ef51b67f2f30e583a,\n            limb2: 0xb289cfc0164b2ed,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6c70c1e14706dbfd33efe75c,\n            limb1: 0xbd47837fd6f0a808a8cac5c3,\n            limb2: 0x1b60ad36bb1e656e,\n        },\n        r0a1: u288 {\n            limb0: 0x833e70940a681aa43a083ad0,\n            limb1: 0x3ffecc6d09b7a0ea1df06988,\n            limb2: 0x216e7660abbec411,\n        },\n        r1a0: u288 {\n            limb0: 0xdaddeff80a0eccefcd3726b4,\n            limb1: 0xd7b4c983581d4e9b3f210f17,\n            limb2: 0x26bf9b818756e2b,\n        },\n        r1a1: u288 {\n            limb0: 0xb32fd7bd9890bbed35311a72,\n            limb1: 0xa30e2587947d85bbece4c62f,\n            limb2: 0x197a3b46e94f9f24,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xddb4db99db681d35f71a159c,\n            limb1: 0xf71a330019414e6fdee75700,\n            limb2: 0x14d9838e7d1918bb,\n        },\n        r0a1: u288 {\n            limb0: 0x203c8bac71951a5f2c653710,\n            limb1: 0x9fc93f8da38ecc2957313982,\n            limb2: 0x7b6d981259cabd9,\n        },\n        r1a0: u288 {\n            limb0: 0xa7297cdb5be0cc45d48ca6af,\n            limb1: 0xa07b4b025ebe6c960eddfc56,\n            limb2: 0xef2a5c30ef00652,\n        },\n        r1a1: u288 {\n            limb0: 0xb7f05c76d860e9122b36ecd7,\n            limb1: 0x407d6522e1f9ce2bcbf80eda,\n            limb2: 0x197625a558f32c36,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe6af6774cb7a4b647bc24bc6,\n            limb1: 0x76bea1b00f9735d1977d2636,\n            limb2: 0xc89d9397e87260c,\n        },\n        r0a1: u288 {\n            limb0: 0x96bf96a3ec6330e2471bedb,\n            limb1: 0xaefe1b80eabbd9aea0986912,\n            limb2: 0x2060760fa91e6007,\n        },\n        r1a0: u288 {\n            limb0: 0x7bcc695f496777a5639d8e67,\n            limb1: 0x521bb49545544f2017835a37,\n            limb2: 0x23bd13f6824a9c20,\n        },\n        r1a1: u288 {\n            limb0: 0x2a7663f245635451e8e9395b,\n            limb1: 0x2a618c0e730e827ea1b6c5b8,\n            limb2: 0x4b769d1e5ea2d59,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb0f04df9dec94801e48a6ff7,\n            limb1: 0xdc59d087c627d38334e5b969,\n            limb2: 0x3d36e11420be053,\n        },\n        r0a1: u288 {\n            limb0: 0xc80f070001aa1586189e0215,\n            limb1: 0xff849fcbbbe7c00c83ab5282,\n            limb2: 0x2a2354b2882706a6,\n        },\n        r1a0: u288 {\n            limb0: 0x48cf70c80f08b6c7dc78adb2,\n            limb1: 0xc6632efa77b36a4a1551d003,\n            limb2: 0xc2d3533ece75879,\n        },\n        r1a1: u288 {\n            limb0: 0x63e82ba26617416a0b76ddaa,\n            limb1: 0xdaceb24adda5a049bed29a50,\n            limb2: 0x1a82061a3344043b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5870b524b1a3550dd400ccc5,\n            limb1: 0x852bc0b37d0f914b8073f12f,\n            limb2: 0x16509ed87eff5a4e,\n        },\n        r0a1: u288 {\n            limb0: 0x88260fe925feb155aed3786a,\n            limb1: 0x67d1bdd00f0234c2f4bfc1dc,\n            limb2: 0x2d447aa64752d13,\n        },\n        r1a0: u288 {\n            limb0: 0x61cd38a81ad2ff47aed15d31,\n            limb1: 0xbca0f1fb3a56f9f221477273,\n            limb2: 0x24049dab533565eb,\n        },\n        r1a1: u288 {\n            limb0: 0x6c2add460f1dc00897d5b5da,\n            limb1: 0x35bb326b6d5280eee3f8c765,\n            limb2: 0x13a4b8025098500,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9152fecf0f523415acc7c7be,\n            limb1: 0xd9632cbfccc4ea5d7bf31177,\n            limb2: 0x2d7288c5f8c83ab1,\n        },\n        r0a1: u288 {\n            limb0: 0x53144bfe4030f3f9f5efda8,\n            limb1: 0xfeec394fbf392b11c66bae27,\n            limb2: 0x28840813ab8a200b,\n        },\n        r1a0: u288 {\n            limb0: 0xdec3b11fbc28b305d9996ec7,\n            limb1: 0x5b5f8d9d17199e149c9def6e,\n            limb2: 0x10c1a149b6751bae,\n        },\n        r1a1: u288 {\n            limb0: 0x665e8eb7e7d376a2d921c889,\n            limb1: 0xfdd76d06e46ee1a943b8788d,\n            limb2: 0x8bb21d9960e837b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3a67c28a175200e631aa506a,\n            limb1: 0x7397303a34968ff17c06e801,\n            limb2: 0x1b81e0c63123688b,\n        },\n        r0a1: u288 {\n            limb0: 0x3490cfd4f076c621dac4a12c,\n            limb1: 0xec183578c91b90b72e5887b7,\n            limb2: 0x179fb354f608da00,\n        },\n        r1a0: u288 {\n            limb0: 0x9322bde2044dde580a78ba33,\n            limb1: 0xfc74821b668d3570cad38f8b,\n            limb2: 0x8cec54a291f5e57,\n        },\n        r1a1: u288 {\n            limb0: 0xc2818b6a9530ee85d4b2ae49,\n            limb1: 0x8d7b651ad167f2a43d7a2d0a,\n            limb2: 0x7c9ca9bab0ffc7f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5622114faf115105095ab77f,\n            limb1: 0x54762377d7848bf1c52b1fce,\n            limb2: 0x1f97b82262bcf5d6,\n        },\n        r0a1: u288 {\n            limb0: 0x6085f868127e9f82a6324ea7,\n            limb1: 0x88a39c58534935bde6a49ab,\n            limb2: 0x7f8a3494505b851,\n        },\n        r1a0: u288 {\n            limb0: 0xd3eabc17c5e2f4e09171b9dd,\n            limb1: 0x1925fbd52a9cb6a997959648,\n            limb2: 0x21518ac51afc3758,\n        },\n        r1a1: u288 {\n            limb0: 0x6096ef3f52e60023239e48e4,\n            limb1: 0x865e3876b961acac0b78e525,\n            limb2: 0x860d5900ad68c37,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2ad5fd7aad65b27d37fb015a,\n            limb1: 0x481729d76f6a024e82fb745d,\n            limb2: 0x109a944738eaca6a,\n        },\n        r0a1: u288 {\n            limb0: 0x3297a180bf2677cff3ccb41f,\n            limb1: 0xa65e1bdf4bb474832f0a5157,\n            limb2: 0x1978ab7a84d8651b,\n        },\n        r1a0: u288 {\n            limb0: 0x708be8948dd3360c8723e464,\n            limb1: 0xbaed9d16b05c7d52f3e91f9f,\n            limb2: 0x1975a6b856112bc2,\n        },\n        r1a1: u288 {\n            limb0: 0xdff0a3ede7d8433f08340a93,\n            limb1: 0xd6415eabeb4ddb811aa617b2,\n            limb2: 0xdb9f4e71e973c6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa576408f8300de3a7714e6ae,\n            limb1: 0xe1072c9a16f202ecf37fbc34,\n            limb2: 0x1b0cb1e2b5871263,\n        },\n        r0a1: u288 {\n            limb0: 0x2128e2314694b663286e231e,\n            limb1: 0x54bea71957426f002508f715,\n            limb2: 0x36ecc5dbe069dca,\n        },\n        r1a0: u288 {\n            limb0: 0x17c77cd88f9d5870957850ce,\n            limb1: 0xb7f4ec2bc270ce30538fe9b8,\n            limb2: 0x766279e588592bf,\n        },\n        r1a1: u288 {\n            limb0: 0x1b6caddf18de2f30fa650122,\n            limb1: 0x40b77237a29cada253c126c6,\n            limb2: 0x74ff1349b1866c8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1266deaa34cf31d6d118b057,\n            limb1: 0x7eef7892b3efd91c5364259c,\n            limb2: 0x1f4ac5e1bdc33dac,\n        },\n        r0a1: u288 {\n            limb0: 0x1068831212b6fe1b5aa05f22,\n            limb1: 0xc39adbfe99701ca7671003e3,\n            limb2: 0x1ab8e56b642f5f82,\n        },\n        r1a0: u288 {\n            limb0: 0xd53d59610ebf7f664c23c080,\n            limb1: 0x3d162ffb5a16aafc8be99bd3,\n            limb2: 0x281e77e14f6bb9c0,\n        },\n        r1a1: u288 {\n            limb0: 0x4fe123e56c3c2c64a4260c7b,\n            limb1: 0x90c367228a761d9c50be237c,\n            limb2: 0xf07b0465615fe71,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3603266e05560becab36faef,\n            limb1: 0x8c3b88c9390278873dd4b048,\n            limb2: 0x24a715a5d9880f38,\n        },\n        r0a1: u288 {\n            limb0: 0xe9f595b111cfd00d1dd28891,\n            limb1: 0x75c6a392ab4a627f642303e1,\n            limb2: 0x17b34a30def82ab6,\n        },\n        r1a0: u288 {\n            limb0: 0xe706de8f35ac8372669fc8d3,\n            limb1: 0x16cc7f4032b3f3ebcecd997d,\n            limb2: 0x166eba592eb1fc78,\n        },\n        r1a1: u288 {\n            limb0: 0x7d584f102b8e64dcbbd1be9,\n            limb1: 0x2ead4092f009a9c0577f7d3,\n            limb2: 0x2fe2c31ee6b1d41e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72253d939632f8c28fb5763,\n            limb1: 0x9b943ab13cad451aed1b08a2,\n            limb2: 0xdb9b2068e450f10,\n        },\n        r0a1: u288 {\n            limb0: 0x80f025dcbce32f6449fa7719,\n            limb1: 0x8a0791d4d1ed60b86e4fe813,\n            limb2: 0x1b1bd5dbce0ea966,\n        },\n        r1a0: u288 {\n            limb0: 0xaa72a31de7d815ae717165d4,\n            limb1: 0x501c29c7b6aebc4a1b44407f,\n            limb2: 0x464aa89f8631b3a,\n        },\n        r1a1: u288 {\n            limb0: 0x6b8d137e1ea43cd4b1f616b1,\n            limb1: 0xdd526a510cc84f150cc4d55a,\n            limb2: 0x1da2ed980ebd3f29,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72dfbb2159ade3ca2db9a485,\n            limb1: 0xaf353e749a0b0e126b462bd4,\n            limb2: 0x11a356fc91502fd1,\n        },\n        r0a1: u288 {\n            limb0: 0xa8da111fc2adcd5b3152926b,\n            limb1: 0x9d2cd58a348021fb039ad1ce,\n            limb2: 0x24a89d0c2aa1a4c,\n        },\n        r1a0: u288 {\n            limb0: 0xb7eadf0666fe1d5d8e00ddd3,\n            limb1: 0x9fa7fbf853bdf5b9620cae4c,\n            limb2: 0x2b6df7a5b1f6cfa3,\n        },\n        r1a1: u288 {\n            limb0: 0x30a81454c2cc541ca6ac5028,\n            limb1: 0xd14ccb5778ca0679f43b0042,\n            limb2: 0x2b15bb249061229,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xff2a45b22df6665c3f2b3433,\n            limb1: 0x47f06d2821bccb7d4e1442dc,\n            limb2: 0x1d6d005a3a962538,\n        },\n        r0a1: u288 {\n            limb0: 0xbc3869f85e6c5199ae4d48ae,\n            limb1: 0xf1b658ebf5d88598be4f771c,\n            limb2: 0x10ce0fad17dffce6,\n        },\n        r1a0: u288 {\n            limb0: 0x9057fbbd4dbd1f42e143f536,\n            limb1: 0xb84a12963d2bdeff0cfb15cc,\n            limb2: 0xf055cbcbcad6397,\n        },\n        r1a1: u288 {\n            limb0: 0x2b6c8f90506d8c5f45a796c2,\n            limb1: 0x15647362232ed3834e25f304,\n            limb2: 0x10c73cc1383f51b5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x867cced8a010850958f41ff5,\n            limb1: 0x6a37fdb2b8993eed18bafe8e,\n            limb2: 0x21b9f782109e5a7,\n        },\n        r0a1: u288 {\n            limb0: 0x7307477d650618e66de38d0f,\n            limb1: 0xacb622ce92a7e393dbe10ba1,\n            limb2: 0x236e70838cee0ed5,\n        },\n        r1a0: u288 {\n            limb0: 0xb564a308aaf5dda0f4af0f0d,\n            limb1: 0x55fc71e2f13d8cb12bd51e74,\n            limb2: 0x294cf115a234a9e9,\n        },\n        r1a1: u288 {\n            limb0: 0xbd166057df55c135b87f35f3,\n            limb1: 0xf9f29b6c50f1cce9b85ec9b,\n            limb2: 0x2e8448d167f20f96,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfcb1d8cfddd4980727750419,\n            limb1: 0xe57b3100fcf5fcd46e1cff24,\n            limb2: 0x1ea2a9f23e471d2f,\n        },\n        r0a1: u288 {\n            limb0: 0x8278659319480914a8f915c3,\n            limb1: 0xb9d01b3a1f3df0c8481b47c7,\n            limb2: 0x1dce2891e1df8e91,\n        },\n        r1a0: u288 {\n            limb0: 0x373890191ad2139b5ac37f5e,\n            limb1: 0x7d00bf061594cf869f26bd35,\n            limb2: 0x263941972f0c5bcc,\n        },\n        r1a1: u288 {\n            limb0: 0x35d21a939f18acadda6398c4,\n            limb1: 0x2f266751d30024c345fd2f64,\n            limb2: 0x12415712f84fa7c6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdedaff3205bb953b2c390b8a,\n            limb1: 0xe1a899da21c1dafb485c707e,\n            limb2: 0x1ec897e7a041493e,\n        },\n        r0a1: u288 {\n            limb0: 0xf52c3c30cd4d3202b34089e0,\n            limb1: 0xc652aa1ff533e1aad7532305,\n            limb2: 0x2a1df766e5e3aa2e,\n        },\n        r1a0: u288 {\n            limb0: 0x7ac695d3e19d79b234daaf3d,\n            limb1: 0x5ce2f92666aec92a650feee1,\n            limb2: 0x21ab4fe20d978e77,\n        },\n        r1a1: u288 {\n            limb0: 0xa64a913a29a1aed4e0798664,\n            limb1: 0x66bc208b511503d127ff5ede,\n            limb2: 0x2389ba056de56a8d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x65ab6317a706e3cda223edf8,\n            limb1: 0x9a22ac3ac5e4dd3e9f987fd9,\n            limb2: 0x157637901a8b31a5,\n        },\n        r0a1: u288 {\n            limb0: 0xc57d325b1af3a13019c15e11,\n            limb1: 0x2812651fd79b5fbbb05cc3d7,\n            limb2: 0x1f1602a02e76536f,\n        },\n        r1a0: u288 {\n            limb0: 0xdf3ad97a0633d33f5a8cea32,\n            limb1: 0xd15238b33edfeb16cffd44ea,\n            limb2: 0x5a03a044b07b640,\n        },\n        r1a1: u288 {\n            limb0: 0x58fec495c4c681cf797762a1,\n            limb1: 0xd3ac0af0d5cb5bff7f4fa8e8,\n            limb2: 0x286d6218242eddb4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd88b16e68600a12e6c1f6006,\n            limb1: 0x333243b43d3b7ff18d0cc671,\n            limb2: 0x2b84b2a9b0f03ed8,\n        },\n        r0a1: u288 {\n            limb0: 0xf3e2b57ddaac822c4da09991,\n            limb1: 0xd7c894b3fe515296bb054d2f,\n            limb2: 0x10a75e4c6dddb441,\n        },\n        r1a0: u288 {\n            limb0: 0x73c65fbbb06a7b21b865ac56,\n            limb1: 0x21f4ecd1403bb78729c7e99b,\n            limb2: 0xaf88a160a6b35d4,\n        },\n        r1a1: u288 {\n            limb0: 0xade61ce10b8492d659ff68d0,\n            limb1: 0x1476e76cf3a8e0df086ad9eb,\n            limb2: 0x2e28cfc65d61e946,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdf8b54b244108008e7f93350,\n            limb1: 0x2ae9a68b9d6b96f392decd6b,\n            limb2: 0x160b19eed152271c,\n        },\n        r0a1: u288 {\n            limb0: 0xc18a8994cfbb2e8df446e449,\n            limb1: 0x408d51e7e4adedd8f4f94d06,\n            limb2: 0x27661b404fe90162,\n        },\n        r1a0: u288 {\n            limb0: 0x1390b2a3b27f43f7ac73832c,\n            limb1: 0x14d57301f6002fd328f2d64d,\n            limb2: 0x17f3fa337367dddc,\n        },\n        r1a1: u288 {\n            limb0: 0x79cab8ff5bf2f762c5372f80,\n            limb1: 0xc979d6f385fae4b5e4785acf,\n            limb2: 0x60c5307a735b00f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x42e951ca7dac29d65a14ab82,\n            limb1: 0x140be62e3d419b811acf5756,\n            limb2: 0x11523c7fc2a37270,\n        },\n        r0a1: u288 {\n            limb0: 0x593b29e6aad3cadd506d93bd,\n            limb1: 0x59976c08d37982b9c28495c3,\n            limb2: 0xc924925bb5976fe,\n        },\n        r1a0: u288 {\n            limb0: 0xcb18016afc265e1a5fc80af0,\n            limb1: 0xd830297a058f529ef5e3f97e,\n            limb2: 0x253a39d5462f1882,\n        },\n        r1a1: u288 {\n            limb0: 0x2b081ad5589d7f1cedb120a9,\n            limb1: 0x956ae1847a5ce3f261e1e1e7,\n            limb2: 0x1afd47a0e8c0dbeb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb70b988a54003f89b0376a63,\n            limb1: 0xff28c025f2f710e53ac37b9e,\n            limb2: 0x2e441c518d3fe68d,\n        },\n        r0a1: u288 {\n            limb0: 0x660ddad555982e7994df37fb,\n            limb1: 0x6c04f02c84dc80d8305f0357,\n            limb2: 0x23b41d5762cf7f0f,\n        },\n        r1a0: u288 {\n            limb0: 0xa2f0ccb1a552683ea3ac0798,\n            limb1: 0xb33b544006bac5a1fd372830,\n            limb2: 0x24afb0cbc42170a7,\n        },\n        r1a1: u288 {\n            limb0: 0xf93faa0be992488deb617b04,\n            limb1: 0x86fb2bb1f07dfeef85b2886,\n            limb2: 0x189649259453ed83,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x386d7b23c6dccb87637018c9,\n            limb1: 0xfed2ea478e9a2210289079e2,\n            limb2: 0x100aa83cb843353e,\n        },\n        r0a1: u288 {\n            limb0: 0x229c5c285f049d04c3dc5ce7,\n            limb1: 0x28110670fe1d38c53ffcc6f7,\n            limb2: 0x1778918279578f50,\n        },\n        r1a0: u288 {\n            limb0: 0xe9ad2c7b8a17a1f1627ff09d,\n            limb1: 0xedff5563c3c3e7d2dcc402ec,\n            limb2: 0xa8bd6770b6d5aa8,\n        },\n        r1a1: u288 {\n            limb0: 0x66c5c1aeed5c04470b4e8a3d,\n            limb1: 0x846e73d11f2d18fe7e1e1aa2,\n            limb2: 0x10a60eabe0ec3d78,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9dafcca7f80fb028e1550b13,\n            limb1: 0x510e07802d526954395ad6d6,\n            limb2: 0x34f031507e71a70,\n        },\n        r0a1: u288 {\n            limb0: 0xac7b6a137d96e956dd4f2773,\n            limb1: 0x2692998b32154b368c857fee,\n            limb2: 0x2ea30d00a23e6587,\n        },\n        r1a0: u288 {\n            limb0: 0x69f3776dd7fd4db9bde03967,\n            limb1: 0x16efb004aa3f44e6ac5fdd29,\n            limb2: 0x361dd68590907c0,\n        },\n        r1a1: u288 {\n            limb0: 0x445681532c126e7c428445b7,\n            limb1: 0xfa2b7d974e59a61f57bcd949,\n            limb2: 0x258ce35529e9f923,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x88ca191d85be1f6c205257ef,\n            limb1: 0xd0cecf5c5f80926c77fd4870,\n            limb2: 0x16ec42b5cae83200,\n        },\n        r0a1: u288 {\n            limb0: 0x154cba82460752b94916186d,\n            limb1: 0x564f6bebac05a4f3fb1353ac,\n            limb2: 0x2d47a47da836d1a7,\n        },\n        r1a0: u288 {\n            limb0: 0xb39c4d6150bd64b4674f42ba,\n            limb1: 0x93c967a38fe86f0779bf4163,\n            limb2: 0x1a51995a49d50f26,\n        },\n        r1a1: u288 {\n            limb0: 0xeb7bdec4b7e304bbb0450608,\n            limb1: 0x11fc9a124b8c74b3d5560ea4,\n            limb2: 0xbfa9bd7f55ad8ac,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2cb6407193c4b5c315a00755,\n            limb1: 0x33dcf6b5051abc2c59b801ab,\n            limb2: 0x16f1a436a0abadf6,\n        },\n        r0a1: u288 {\n            limb0: 0x3398c4073878ea089b0c7b80,\n            limb1: 0x49d08a1ce731c9b194b93e64,\n            limb2: 0x2c1a19007bb6f21c,\n        },\n        r1a0: u288 {\n            limb0: 0x6b305edfc565d8cb06fa559e,\n            limb1: 0x43ee87287e1f2f15d6631f33,\n            limb2: 0x1cd36451c5666f9c,\n        },\n        r1a1: u288 {\n            limb0: 0x650c38aae0bd3882a6556860,\n            limb1: 0x8e04c37290ae5a6bb3eb1f91,\n            limb2: 0x12e57f5774525f20,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2fdc574c85cf0c0ce5e07a51,\n            limb1: 0xd2439bf7b00bddc4cfb01b0c,\n            limb2: 0x125c3bbdeb0bd2da,\n        },\n        r0a1: u288 {\n            limb0: 0x9d664714bae53cafcb5ef55d,\n            limb1: 0x495c01724790853548f5e4de,\n            limb2: 0x2ce5e2e263725941,\n        },\n        r1a0: u288 {\n            limb0: 0x98071eb7fe88c9124aee3774,\n            limb1: 0xc3f66947a52bd2f6d520579f,\n            limb2: 0x2eaf775dbd52f7d3,\n        },\n        r1a1: u288 {\n            limb0: 0x23e5594948e21db2061dca92,\n            limb1: 0xd0ffa6f6c77290531c185431,\n            limb2: 0x604c085de03afb1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf884b2ccf06f8da655d3142,\n            limb1: 0xdece09e25a509a7dd0b73bde,\n            limb2: 0xa6830f44f8a0e0d,\n        },\n        r0a1: u288 {\n            limb0: 0x36cc33f5e41d078c07a952fe,\n            limb1: 0xa3c7be8095228c58e49910b2,\n            limb2: 0x2d863134dbfbae7f,\n        },\n        r1a0: u288 {\n            limb0: 0x83786a541018cb79e6baccf6,\n            limb1: 0x9c73f5fa4f111743dfb0b581,\n            limb2: 0x22faefa4bfa9f387,\n        },\n        r1a1: u288 {\n            limb0: 0x2f25834de3d2ec7bda75abc7,\n            limb1: 0x4526dbfbc8f7d9e1c71c8375,\n            limb2: 0x1f3bb15443413d60,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xeec2912e15f6bda39d4e005e,\n            limb1: 0x2b8610c44d27bdbc6ba2aac5,\n            limb2: 0x78ddc4573fc1fed,\n        },\n        r0a1: u288 {\n            limb0: 0x48099a0da11ea21de015229d,\n            limb1: 0x5fe937100967d5cc544f4af1,\n            limb2: 0x2c9ffe6d7d7e9631,\n        },\n        r1a0: u288 {\n            limb0: 0xa70d251296ef1ae37ceb7d03,\n            limb1: 0x2adadcb7d219bb1580e6e9c,\n            limb2: 0x180481a57f22fd03,\n        },\n        r1a1: u288 {\n            limb0: 0xacf46db9631037dd933eb72a,\n            limb1: 0x8a58491815c7656292a77d29,\n            limb2: 0x261e3516c348ae12,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x62b45634f0eaf51f5bc4003c,\n            limb1: 0x13ff6a6fc286b5b754548ac3,\n            limb2: 0x1670dac54842d28b,\n        },\n        r0a1: u288 {\n            limb0: 0x85fe43906582fc736d926df3,\n            limb1: 0xf077151ea6da959af3c290f6,\n            limb2: 0xc8cebcafaa4ae47,\n        },\n        r1a0: u288 {\n            limb0: 0x7540aff585c27cb2fa15c662,\n            limb1: 0x5cf456bcd4fa0e3bbae0f467,\n            limb2: 0x24a1c8ecb9c907e9,\n        },\n        r1a1: u288 {\n            limb0: 0x19ba1bf552affd897d561632,\n            limb1: 0x1df4a4d8d77248957809f88e,\n            limb2: 0x1d7484a0c0251cdc,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2bfa32f0a09c3e2cfb8f6a38,\n            limb1: 0x7a24df3ff3c7119a59d49318,\n            limb2: 0x10e42281d64907ba,\n        },\n        r0a1: u288 {\n            limb0: 0xce42177a66cdeb4207d11e0c,\n            limb1: 0x3322aa425a9ca270152372ad,\n            limb2: 0x2f7fa83db407600c,\n        },\n        r1a0: u288 {\n            limb0: 0x62a8ff94fd1c7b9035af4446,\n            limb1: 0x3ad500601bbb6e7ed1301377,\n            limb2: 0x254d253ca06928f,\n        },\n        r1a1: u288 {\n            limb0: 0xf8f1787cd8e730c904b4386d,\n            limb1: 0x7fd3744349918d62c42d24cc,\n            limb2: 0x28a05e105d652eb8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6ef31e059d602897fa8e80a8,\n            limb1: 0x66a0710847b6609ceda5140,\n            limb2: 0x228c0e568f1eb9c0,\n        },\n        r0a1: u288 {\n            limb0: 0x7b47b1b133c1297b45cdd79b,\n            limb1: 0x6b4f04ed71b58dafd06b527b,\n            limb2: 0x13ae6db5254df01a,\n        },\n        r1a0: u288 {\n            limb0: 0xbeca2fccf7d0754dcf23ddda,\n            limb1: 0xe3d0bcd7d9496d1e5afb0a59,\n            limb2: 0x305a0afb142cf442,\n        },\n        r1a1: u288 {\n            limb0: 0x2d299847431477c899560ecf,\n            limb1: 0xbcd9e6c30bedee116b043d8d,\n            limb2: 0x79473a2a7438353,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xae3712a6ef6034d7fcbc318c,\n            limb1: 0xedba25c96439aeb3954ccff7,\n            limb2: 0x1a0d73e3d8d90330,\n        },\n        r0a1: u288 {\n            limb0: 0xff6fb0e919bd80f29065244,\n            limb1: 0xfdcac02f3dd2e9268271021f,\n            limb2: 0x202e92badc53f790,\n        },\n        r1a0: u288 {\n            limb0: 0xec674cc5d55fcd80ab9fc167,\n            limb1: 0xb9f7f1fd7f1e4936802c19d1,\n            limb2: 0x27ac3aca37743af5,\n        },\n        r1a1: u288 {\n            limb0: 0xe49dfebb538630697c09c39d,\n            limb1: 0x56732676796d1f91ecab12ad,\n            limb2: 0xb010d1b0f285dbd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb431b974a13b9d75e11033b8,\n            limb1: 0xa4b7192e2b5f3730bd216f73,\n            limb2: 0x53cf4b349760f42,\n        },\n        r0a1: u288 {\n            limb0: 0x3c87efcabaa8e22835e19e2,\n            limb1: 0xfc9cf42672502f3fb7917c8f,\n            limb2: 0x11123549a68499c8,\n        },\n        r1a0: u288 {\n            limb0: 0xf91da96d0c078dea22787ecb,\n            limb1: 0xd165ceed6f64338e6288e1d3,\n            limb2: 0x23490db5de27b468,\n        },\n        r1a1: u288 {\n            limb0: 0x419e0eafdcf6226512a9ec6a,\n            limb1: 0x1c6fb8110315ae80c4bf92ec,\n            limb2: 0x2ad5f86e5d3bc1c3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x65b71fe695e7ccd4b460dace,\n            limb1: 0xa6ceba62ef334e6fe91301d5,\n            limb2: 0x299f578d0f3554e6,\n        },\n        r0a1: u288 {\n            limb0: 0xaf781dd030a274e7ecf0cfa4,\n            limb1: 0x2095020d373a14d7967797aa,\n            limb2: 0x6a7f9df6f185bf8,\n        },\n        r1a0: u288 {\n            limb0: 0x8e91e2dba67d130a0b274df3,\n            limb1: 0xe192a19fce285c12c6770089,\n            limb2: 0x6e9acf4205c2e22,\n        },\n        r1a1: u288 {\n            limb0: 0xbcd5c206b5f9c77d667189bf,\n            limb1: 0x656a7e2ebc78255d5242ca9,\n            limb2: 0x25f43fec41d2b245,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd6c95bb06c0e9a55a56a85c0,\n            limb1: 0xf5d3c4d860aee402df7d0cd6,\n            limb2: 0xa90fbb3a7bcfb07,\n        },\n        r0a1: u288 {\n            limb0: 0xbfca0761240adb98fdf8e23d,\n            limb1: 0xe6052ca38781d13cf53921cb,\n            limb2: 0x780debeee0578b2,\n        },\n        r1a0: u288 {\n            limb0: 0xbe285fa3e37b0222a1c65921,\n            limb1: 0xb9fbb60c587b00d8ecf22359,\n            limb2: 0x284f4ced8b0b28f5,\n        },\n        r1a1: u288 {\n            limb0: 0x34e69be4d8eea470c08f07e8,\n            limb1: 0x651617bebb0020b71bf6a8a7,\n            limb2: 0xde62a1da13dfd78,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4e56e6733cce20d9c5b16d96,\n            limb1: 0xc7ef260535fb75b9d3e089f,\n            limb2: 0x292dd4aa636e7729,\n        },\n        r0a1: u288 {\n            limb0: 0x6e7e1038b336f36519c9faaf,\n            limb1: 0x3c66bd609510309485e225c7,\n            limb2: 0x10cacac137411eb,\n        },\n        r1a0: u288 {\n            limb0: 0x4a3e8b96278ac092fe4f3b15,\n            limb1: 0xba47e583e2750b42f93c9631,\n            limb2: 0x125da6bd69495bb9,\n        },\n        r1a1: u288 {\n            limb0: 0xae7a56ab4b959a5f6060d529,\n            limb1: 0xc3c263bfd58c0030c063a48e,\n            limb2: 0x2f4d15f13fae788c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x301e0885c84d273b6d323124,\n            limb1: 0x11fd5c75e269f7a30fa4154f,\n            limb2: 0x19afdcfdcce2fc0d,\n        },\n        r0a1: u288 {\n            limb0: 0x3d13519f934526be815c38b0,\n            limb1: 0xd43735909547da73838874fc,\n            limb2: 0x255d8aca30f4e0f6,\n        },\n        r1a0: u288 {\n            limb0: 0x90a505b76f25a3396e2cea79,\n            limb1: 0x3957a2d0848c54b9079fc114,\n            limb2: 0x1ba0cd3a9fe6d4bb,\n        },\n        r1a1: u288 {\n            limb0: 0xc47930fba77a46ebb1db30a9,\n            limb1: 0x993a1cb166e9d40bebab02b2,\n            limb2: 0x1deb16166d48118b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb8cf2af23a2795446a3a73f1,\n            limb1: 0x13715e2237eeb02ee6666cee,\n            limb2: 0xa85c6edf4e39ba5,\n        },\n        r0a1: u288 {\n            limb0: 0x1f36efdd6931269960bdf4de,\n            limb1: 0xfe9eff4c19216c4ae441fee1,\n            limb2: 0x25db1c938c941000,\n        },\n        r1a0: u288 {\n            limb0: 0xe13bf721634b56a80c6fb0a8,\n            limb1: 0xda0b9ea6704efbd8451cfd41,\n            limb2: 0x279768e0c2762893,\n        },\n        r1a1: u288 {\n            limb0: 0x2dc5403124b8b2766caf51c7,\n            limb1: 0xb9ed0b96060674c35d818388,\n            limb2: 0x6f9a41b549839dd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbd4aa4e5ed3e0c30bf730048,\n            limb1: 0x80e73a7e12b5104f4ec40460,\n            limb2: 0x13db913428ce629c,\n        },\n        r0a1: u288 {\n            limb0: 0xa90e04c07af34a3af7b9ae23,\n            limb1: 0xf939d213913f9c4b23910d94,\n            limb2: 0xff8ab1b303ea87a,\n        },\n        r1a0: u288 {\n            limb0: 0x38c7e37660597198162fa157,\n            limb1: 0xa81284a580d040713c0531af,\n            limb2: 0x110351898a488800,\n        },\n        r1a1: u288 {\n            limb0: 0x2c97092cce4fdaa715b6afde,\n            limb1: 0x1a698f4e2982c281c0c42464,\n            limb2: 0x1bd1c4a7975a22f5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb15bbaec50ff49d30e49f74a,\n            limb1: 0xc90a8c79fb045c5468f14151,\n            limb2: 0x25e47927e92df0e3,\n        },\n        r0a1: u288 {\n            limb0: 0x57f66909d5d40dfb8c7b4d5c,\n            limb1: 0xea5265282e2139c48c1953f2,\n            limb2: 0x2d7f5e6aff2381f6,\n        },\n        r1a0: u288 {\n            limb0: 0x2a2f573b189a3c8832231394,\n            limb1: 0x738abc15844895ffd4733587,\n            limb2: 0x20aa11739c4b9bb4,\n        },\n        r1a1: u288 {\n            limb0: 0x51695ec614f1ff4cce2f65d1,\n            limb1: 0x6765aae6cb895a2406a6dd7e,\n            limb2: 0x1126ee431c522da0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe7f01d9086cd6bea2f41aa99,\n            limb1: 0x704bab1c6c11f635823c0730,\n            limb2: 0x1aa5e3110773f18e,\n        },\n        r0a1: u288 {\n            limb0: 0x85c070793b8763c74570e65c,\n            limb1: 0x2af5c8f295dafb150ffb4b8b,\n            limb2: 0xda734f5191394b9,\n        },\n        r1a0: u288 {\n            limb0: 0x4875f74e54ce34f890a6c795,\n            limb1: 0x9ae6a24d7c63f7240996ac21,\n            limb2: 0x2a7c9cc67d33db65,\n        },\n        r1a1: u288 {\n            limb0: 0xb014ee4eda66723db93d7d9a,\n            limb1: 0x7d3eb5638239c427a57ce71f,\n            limb2: 0x1b0456063dc2a87c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9214fc3209f1518b05fd21c6,\n            limb1: 0x9bc8ce4f56423009710770e8,\n            limb2: 0x32445cc6972799c,\n        },\n        r0a1: u288 {\n            limb0: 0x93ef401ecd9cfae3644d22e6,\n            limb1: 0xce5a741a9847a144cfaf8c96,\n            limb2: 0xf7a814d5726da4a,\n        },\n        r1a0: u288 {\n            limb0: 0xd19264d986f163b133a91c0c,\n            limb1: 0x529dc5ce4b193c0f672c6a32,\n            limb2: 0x2e9a118959353374,\n        },\n        r1a1: u288 {\n            limb0: 0x3d97d6e8f45072cc9e85e412,\n            limb1: 0x4dafecb04c3bb23c374f0486,\n            limb2: 0xa174dd4ac8ee628,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfa6e20eaa5b8acce6161c367,\n            limb1: 0x3d8d035c6953305cfb8065a4,\n            limb2: 0x40bb50e482935b,\n        },\n        r0a1: u288 {\n            limb0: 0x4c506a8e01c5144fa535163b,\n            limb1: 0x61030d954c1196c840ee7931,\n            limb2: 0x2f221fa9c7e3b5ae,\n        },\n        r1a0: u288 {\n            limb0: 0x2613b98211a31e101b009375,\n            limb1: 0xe4cfbf39bf10d39059fcec56,\n            limb2: 0x196add035e14330e,\n        },\n        r1a1: u288 {\n            limb0: 0xcc093368ee2558dabe10c7be,\n            limb1: 0x206a20357ce007c45165fee6,\n            limb2: 0xd4fb39f4b1fde10,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x98d8b0c4adcf27bceb305c2c,\n            limb1: 0x859afa9c7668ed6152d8cba3,\n            limb2: 0x29e7694f46e3a272,\n        },\n        r0a1: u288 {\n            limb0: 0x1d970845365594307ba97556,\n            limb1: 0xd002d93ad793e154afe5b49b,\n            limb2: 0x12ca77d3fb8eee63,\n        },\n        r1a0: u288 {\n            limb0: 0x9f2934faefb8268e20d0e337,\n            limb1: 0xbc4b5e1ec056881319f08766,\n            limb2: 0x2e103461759a9ee4,\n        },\n        r1a1: u288 {\n            limb0: 0x7adc6cb87d6b43000e2466b6,\n            limb1: 0x65e5cefa42b25a7ee8925fa6,\n            limb2: 0x2560115898d7362a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x823969b5ec0f79a94f88d36b,\n            limb1: 0x3512d9e09a8b4a8e1084dc32,\n            limb2: 0x1af1156b9c8d06e6,\n        },\n        r0a1: u288 {\n            limb0: 0xafd7dd0f120256e11800dee8,\n            limb1: 0x3a317cae149063c44cf7fa8c,\n            limb2: 0x2bd8ea8b2474d1e5,\n        },\n        r1a0: u288 {\n            limb0: 0xe1772b865b838d58dd129624,\n            limb1: 0xbe9458968158c433742dbcd0,\n            limb2: 0x22b6d697a5a3b888,\n        },\n        r1a1: u288 {\n            limb0: 0xbff3b00a55f411bbc1dad2fe,\n            limb1: 0x7ae09ac6313e3c00759461ae,\n            limb2: 0x558601ecf31c85,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x64d864643668392c0e357cc4,\n            limb1: 0x4c9bf66853f1b287015ab84c,\n            limb2: 0x2f5f1b92ad7ee4d4,\n        },\n        r0a1: u288 {\n            limb0: 0xdc33c8da5c575eef6987a0e1,\n            limb1: 0x51cc07c7ef28e1b8d934bc32,\n            limb2: 0x2358d94a17ec2a44,\n        },\n        r1a0: u288 {\n            limb0: 0xf659845b829bbba363a2497b,\n            limb1: 0x440f348e4e7bed1fb1eb47b2,\n            limb2: 0x1ad0eaab0fb0bdab,\n        },\n        r1a1: u288 {\n            limb0: 0x1944bb6901a1af6ea9afa6fc,\n            limb1: 0x132319df135dedddf5baae67,\n            limb2: 0x52598294643a4aa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x76fd94c5e6f17fa6741bd7de,\n            limb1: 0xc2e0831024f67d21013e0bdd,\n            limb2: 0x21e2af6a43119665,\n        },\n        r0a1: u288 {\n            limb0: 0xad290eab38c64c0d8b13879b,\n            limb1: 0xdd67f881be32b09d9a6c76a0,\n            limb2: 0x8000712ce0392f2,\n        },\n        r1a0: u288 {\n            limb0: 0xd30a46f4ba2dee3c7ace0a37,\n            limb1: 0x3914314f4ec56ff61e2c29e,\n            limb2: 0x22ae1ba6cd84d822,\n        },\n        r1a1: u288 {\n            limb0: 0x5d888a78f6dfce9e7544f142,\n            limb1: 0x9439156de974d3fb6d6bda6e,\n            limb2: 0x106c8f9a27d41a4f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6092d1d633b2160a27266d5b,\n            limb1: 0x80d00c798b74744e2d6c9897,\n            limb2: 0x6aca1e5b3d6e760,\n        },\n        r0a1: u288 {\n            limb0: 0x3f695b0e7bf0e735a060a1fc,\n            limb1: 0x21c516331ac46f6f1940a79c,\n            limb2: 0x9fb99bd56e3cfd0,\n        },\n        r1a0: u288 {\n            limb0: 0x125cd061734e6d82260bff31,\n            limb1: 0x7b1fb56a17f3832fd3c026f3,\n            limb2: 0xdafb0c1b7a07131,\n        },\n        r1a1: u288 {\n            limb0: 0x449a0a17221fac459caf049a,\n            limb1: 0x4bbd5645024fe09ba86f662d,\n            limb2: 0x295e6b43830d7473,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x138792ff5a46d835c3927fde,\n            limb1: 0x498899eff0ddfb1e2a6a2a63,\n            limb2: 0xfaff0a267eddd92,\n        },\n        r0a1: u288 {\n            limb0: 0xfffeb2ff28064301c583286,\n            limb1: 0x223c9e6d3ae5d55a899db5e2,\n            limb2: 0x1a88e4cac54f8190,\n        },\n        r1a0: u288 {\n            limb0: 0xcfbe06117f1f6dea20f8379f,\n            limb1: 0x6b831cd38c1741b394a2f18d,\n            limb2: 0xd44868b638ab5cd,\n        },\n        r1a1: u288 {\n            limb0: 0x21a8bd3280686ca4d3c4a764,\n            limb1: 0x3b3576220bbc08abcec8478b,\n            limb2: 0x29b73d7c0c8ff4ce,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x92c09e4796207b802168341b,\n            limb1: 0xd2d9d6acffd7829066cc49ce,\n            limb2: 0xc89c2d0a7b2c81e,\n        },\n        r0a1: u288 {\n            limb0: 0x47e3c1cf6cdb6f3efe778c7f,\n            limb1: 0x66b347099b6436794cf062eb,\n            limb2: 0x18b4ccc64ae0a857,\n        },\n        r1a0: u288 {\n            limb0: 0x7d5793606a73b2740c71484a,\n            limb1: 0xa0070135ca2dc571b28e3c9c,\n            limb2: 0x1bc03576e04b94cf,\n        },\n        r1a1: u288 {\n            limb0: 0x1ba85b29875e638c10f16c99,\n            limb1: 0x158f2f2acc3c2300bb9f9225,\n            limb2: 0x42d8a8c36ea97c6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x491a2a2eb92babf14d2c70ed,\n            limb1: 0x88adfa10d27cbf95efc87ca9,\n            limb2: 0x1ea367cb9628819e,\n        },\n        r0a1: u288 {\n            limb0: 0xf832704f9fde600131526e2,\n            limb1: 0x943da98740594bc8573bc424,\n            limb2: 0x225058a1522f4c77,\n        },\n        r1a0: u288 {\n            limb0: 0xf43027c8e85927d41ef51aa6,\n            limb1: 0x6d6d7aa318f97e5043973413,\n            limb2: 0x11a037a0589e5f86,\n        },\n        r1a1: u288 {\n            limb0: 0x45f2d483ce8e645ed19421cb,\n            limb1: 0x6363b56540ef0ea0331819ca,\n            limb2: 0x2b5c9bfcfb64a95f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9440ad13408319cecb07087b,\n            limb1: 0x537afc0c0cfe8ff761c24e08,\n            limb2: 0x48e4ac10081048d,\n        },\n        r0a1: u288 {\n            limb0: 0xa37fb82b03a2c0bb2aa50c4f,\n            limb1: 0xd3797f05c8fb84f6b630dfb,\n            limb2: 0x2dffde2d6c7e43ff,\n        },\n        r1a0: u288 {\n            limb0: 0xc55d2eb1ea953275e780e65b,\n            limb1: 0xe141cf680cab57483c02e4c7,\n            limb2: 0x1b71395ce5ce20ae,\n        },\n        r1a1: u288 {\n            limb0: 0xe4fab521f1212a1d301065de,\n            limb1: 0x4f8d31c78df3dbe4ab721ef2,\n            limb2: 0x2828f21554706a0e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8cefc2f2af2a3082b790784e,\n            limb1: 0x97ac13b37c6fbfc736a3d456,\n            limb2: 0x683b1cdffd60acd,\n        },\n        r0a1: u288 {\n            limb0: 0xa266a8188a8c933dcffe2d02,\n            limb1: 0x18d3934c1838d7bce81b2eeb,\n            limb2: 0x206ac5cdda42377,\n        },\n        r1a0: u288 {\n            limb0: 0x90332652437f6e177dc3b28c,\n            limb1: 0x75bd8199433d607735414ee8,\n            limb2: 0x29d6842d8298cf7e,\n        },\n        r1a1: u288 {\n            limb0: 0xadedf46d8ea11932db0018e1,\n            limb1: 0xbc7239ae9d1453258037befb,\n            limb2: 0x22e7ebdd72c6f7a1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3a7dc5b45b0cd09dd75ff780,\n            limb1: 0x2902bd9bd8ba8605b3662044,\n            limb2: 0x1ec042f89cec2f4a,\n        },\n        r0a1: u288 {\n            limb0: 0x3e484c01e1c71dad604b6e00,\n            limb1: 0x63cd271538443abcbe242bee,\n            limb2: 0x10c38586e25d160e,\n        },\n        r1a0: u288 {\n            limb0: 0xc406f3abf9503a06bdeb2eef,\n            limb1: 0x8653c7da6db9ab8b17639151,\n            limb2: 0xad22e688ec88604,\n        },\n        r1a1: u288 {\n            limb0: 0x50fc42dbc609f56f660d8b86,\n            limb1: 0x56a81c62935f53a8194e5d90,\n            limb2: 0x2b27bb15c58ff0c3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xacc013a37118e98a394f1114,\n            limb1: 0x97e3d97d841f62677ad653b1,\n            limb2: 0xfa27c5f03ef3e74,\n        },\n        r0a1: u288 {\n            limb0: 0x9599de7b6e6a8aeef6b63e52,\n            limb1: 0x73e39f958d986d83148d8c8a,\n            limb2: 0x208d43519f69f381,\n        },\n        r1a0: u288 {\n            limb0: 0x898b0f8615e3cf94474d7196,\n            limb1: 0x82213cada178b34ae97fdb67,\n            limb2: 0x11a8f2b07229c348,\n        },\n        r1a1: u288 {\n            limb0: 0x8a100eb3750e818962602ec3,\n            limb1: 0xdca2571e9fc5588275e810fd,\n            limb2: 0x290c599d240303ec,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x348e15357d9299e582033136,\n            limb1: 0x53578c46b15abb39da35a56e,\n            limb2: 0x1043b711f86bb33f,\n        },\n        r0a1: u288 {\n            limb0: 0x9fa230a629b75217f0518e7c,\n            limb1: 0x77012a4bb8751322a406024d,\n            limb2: 0x121e2d845d972695,\n        },\n        r1a0: u288 {\n            limb0: 0x5600f2d51f21d9dfac35eb10,\n            limb1: 0x6fde61f876fb76611fb86c1a,\n            limb2: 0x2bf4fbaf5bd0d0df,\n        },\n        r1a1: u288 {\n            limb0: 0xd732aa0b6161aaffdae95324,\n            limb1: 0xb3c4f8c3770402d245692464,\n            limb2: 0x2a0f1740a293e6f0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x481b93066804d8e4a43ea2f5,\n            limb1: 0x29399b4d554a5731966efdf4,\n            limb2: 0x100692df233dfccb,\n        },\n        r0a1: u288 {\n            limb0: 0xa03028f9394d39e5aff150c2,\n            limb1: 0x82b1b27285e7d875b1cc49e8,\n            limb2: 0x1aa360e1848acc84,\n        },\n        r1a0: u288 {\n            limb0: 0xc358787d7c823681590988f,\n            limb1: 0xa3e33a227d61efc5734e48e4,\n            limb2: 0x15e7e41317f696d9,\n        },\n        r1a1: u288 {\n            limb0: 0x73141ff9e75e2761d8d99b93,\n            limb1: 0x48b8fbe75ec09c4496c9652f,\n            limb2: 0x1edc83253b7ac568,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa9e2efa41aaa98ab59728940,\n            limb1: 0x163c0425f66ce72daef2f53e,\n            limb2: 0x2feaf1b1770aa7d8,\n        },\n        r0a1: u288 {\n            limb0: 0x3bb7afd3c0a79b6ac2c4c063,\n            limb1: 0xee5cb42e8b2bc999e312e032,\n            limb2: 0x1af2071ae77151c3,\n        },\n        r1a0: u288 {\n            limb0: 0x1cef1c0d8956d7ceb2b162e7,\n            limb1: 0x202b4af9e51edfc81a943ded,\n            limb2: 0xc9e943ffbdcfdcb,\n        },\n        r1a1: u288 {\n            limb0: 0xe18b1b34798b0a18d5ad43dd,\n            limb1: 0x55e8237731941007099af6b8,\n            limb2: 0x1472c0290db54042,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe6100d19eaef8d37a80e60df,\n            limb1: 0x4ef3e1a2b34daa1c2be28701,\n            limb2: 0x92500ae61c29ded,\n        },\n        r0a1: u288 {\n            limb0: 0xcb5fe102a0a2aeb5f2b1d8b5,\n            limb1: 0x48c7bc91c8b114893d8b23cd,\n            limb2: 0x21268b5f3137e05e,\n        },\n        r1a0: u288 {\n            limb0: 0x67b383adbc235c125e89ac73,\n            limb1: 0xf140e37cce399681b4f96b6c,\n            limb2: 0x29da1de8b7c2764b,\n        },\n        r1a1: u288 {\n            limb0: 0x3a20a1e0817f5af4c383af92,\n            limb1: 0xb6447b112ca3c55500553bae,\n            limb2: 0xad54da1adb037ab,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb4c7963e0d1dc082de0725e,\n            limb1: 0x375a7a3d765918de24804223,\n            limb2: 0xf177b77b031596d,\n        },\n        r0a1: u288 {\n            limb0: 0x87a7b9c5f10500b0b40d7a1e,\n            limb1: 0x6f234d1dc7f1394b55858810,\n            limb2: 0x26288146660a3914,\n        },\n        r1a0: u288 {\n            limb0: 0xa6308c89cebe40447abf4a9a,\n            limb1: 0x657f0fdda13b1f8ee314c22,\n            limb2: 0x1701aabc250a9cc7,\n        },\n        r1a1: u288 {\n            limb0: 0x9db9bf660dc77cbe2788a755,\n            limb1: 0xbdf9c1c15a4bd502a119fb98,\n            limb2: 0x14b4de3d26bd66e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x53c49c62ca96007e14435295,\n            limb1: 0x85aeb885e4123ca8d3232fdf,\n            limb2: 0x750017ce108abf3,\n        },\n        r0a1: u288 {\n            limb0: 0xba6bf3e25d370182e4821239,\n            limb1: 0x39de83bf370bd2ba116e8405,\n            limb2: 0x2b8417a72ba6d940,\n        },\n        r1a0: u288 {\n            limb0: 0xa922f50550d349849b14307b,\n            limb1: 0x569766b6feca6143a5ddde9d,\n            limb2: 0x2c3c6765b25a01d,\n        },\n        r1a1: u288 {\n            limb0: 0x6016011bdc3b506563b0f117,\n            limb1: 0xbab4932beab93dde9b5b8a5c,\n            limb2: 0x1bf3f698de0ace60,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6cd6d068630c95ff7923dace,\n            limb1: 0x327c95abb26719a3e4f307d4,\n            limb2: 0x1622ee5d85fd5915,\n        },\n        r0a1: u288 {\n            limb0: 0x3b0cab292557116e4a91297c,\n            limb1: 0x73e3c8e25063487150b2b475,\n            limb2: 0x10b9c1c61e8b6478,\n        },\n        r1a0: u288 {\n            limb0: 0xd5edff0ce6e33bb98c43f4a5,\n            limb1: 0xdefbbd27923dd717a2029ccd,\n            limb2: 0x1dde221b1cae459,\n        },\n        r1a1: u288 {\n            limb0: 0xf582a6716fc11b9594c7cda2,\n            limb1: 0x4b375f530154fbdd63e5feb,\n            limb2: 0xb49455f93935ab,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x54fcd4a24d259b46df23323f,\n            limb1: 0x47e6fdfb9c428d378a40ff4e,\n            limb2: 0x1df34ff52254dff6,\n        },\n        r0a1: u288 {\n            limb0: 0xe0c10735495ed8f5cd2e4be0,\n            limb1: 0xc86bc1fb1f401ef4df3b1cd0,\n            limb2: 0x28c43896b60b6285,\n        },\n        r1a0: u288 {\n            limb0: 0x1c96043ad27370916cb891b4,\n            limb1: 0x87329ba866d1b2e138d8c107,\n            limb2: 0x2969b2c3e19a125a,\n        },\n        r1a1: u288 {\n            limb0: 0x439d38ff3bfb073cf2b5661f,\n            limb1: 0x40fd99e28d8fb2f2ff6a20e7,\n            limb2: 0x182bde6af8c937b7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb9f05ffda3ee208f990ff3a8,\n            limb1: 0x6201d08440b28ea672b9ea93,\n            limb2: 0x1ed60e5a5e778b42,\n        },\n        r0a1: u288 {\n            limb0: 0x8e8468b937854c9c00582d36,\n            limb1: 0x7888fa8b2850a0c555adb743,\n            limb2: 0xd1342bd01402f29,\n        },\n        r1a0: u288 {\n            limb0: 0xf5c4c66a974d45ec754b3873,\n            limb1: 0x34322544ed59f01c835dd28b,\n            limb2: 0x10fe4487a871a419,\n        },\n        r1a1: u288 {\n            limb0: 0xedf4af2df7c13d6340069716,\n            limb1: 0x8592eea593ece446e8b2c83b,\n            limb2: 0x12f9280ce8248724,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2ddf82dac5876ef85cbd9209,\n            limb1: 0x589fcd0afc56475897b6712f,\n            limb2: 0xbd4b3348385e23b,\n        },\n        r0a1: u288 {\n            limb0: 0x1c3aa02855ddee9cd40d4eae,\n            limb1: 0xf6ed3e19ac13cbd2012f796a,\n            limb2: 0x1dc1b58676a8f698,\n        },\n        r1a0: u288 {\n            limb0: 0xc4830930ba2848c2f39f43da,\n            limb1: 0xa0fc7164985c553cef876d41,\n            limb2: 0x18fce7cada9deef8,\n        },\n        r1a1: u288 {\n            limb0: 0xedb28e73d7e312b0bfe1fa45,\n            limb1: 0xed4ae4b37915b6888b40ee88,\n            limb2: 0x5cf09de42e4f82a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe67f72c6d45f1bb04403139f,\n            limb1: 0x9233e2a95d3f3c3ff2f7e5b8,\n            limb2: 0x1f931e8e4343b028,\n        },\n        r0a1: u288 {\n            limb0: 0x20ef53907af71803ce3ca5ca,\n            limb1: 0xd99b6637ee9c73150b503ea4,\n            limb2: 0x1c9759def8a98ea8,\n        },\n        r1a0: u288 {\n            limb0: 0xa0a3b24c9089d224822fad53,\n            limb1: 0xdfa2081342a7a895062f3e50,\n            limb2: 0x185e8cf6b3e494e6,\n        },\n        r1a1: u288 {\n            limb0: 0x8752a12394b29d0ba799e476,\n            limb1: 0x1493421da067a42e7f3d0f8f,\n            limb2: 0x67e7fa3e3035edf,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x125ce6d868f59b6805a98a6e,\n            limb1: 0x9229c7ee5700f2429eadaecb,\n            limb2: 0x292c838c4deb5f8d,\n        },\n        r0a1: u288 {\n            limb0: 0x5325a1514f8ee43d2ed16153,\n            limb1: 0x63c33b5123f4ecb9e010da3c,\n            limb2: 0x1e0f5d09063cd187,\n        },\n        r1a0: u288 {\n            limb0: 0x605cc50180814223b30419fe,\n            limb1: 0xb08ee4b45c98923764c3c996,\n            limb2: 0x2e496c94d4ce61d7,\n        },\n        r1a1: u288 {\n            limb0: 0x7f916e4957b0d0a9c5aa8e89,\n            limb1: 0x1b4099fb9348cb6604b6644d,\n            limb2: 0x2fa7202e6e45ebd0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6d6138c95464e5e774ae7ba0,\n            limb1: 0xe6ca73a5498e4ccd4bb68fc7,\n            limb2: 0x15bf8aa8ed1beff6,\n        },\n        r0a1: u288 {\n            limb0: 0xabd7c55a134ed405b4966d3c,\n            limb1: 0xe69dd725ccc4f9dd537fe558,\n            limb2: 0x2df4a03e2588a8f1,\n        },\n        r1a0: u288 {\n            limb0: 0x7cf42890de0355ffc2480d46,\n            limb1: 0xe33c2ad9627bcb4b028c2358,\n            limb2: 0x2a18767b40de20bd,\n        },\n        r1a1: u288 {\n            limb0: 0x79737d4a87fab560f3d811c6,\n            limb1: 0xa88fee5629b91721f2ccdcf7,\n            limb2: 0x2b51c831d3404d5e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x16a889bc98dbba30d0e85f7c,\n            limb1: 0xfcada96c42f00ced918d942e,\n            limb2: 0x2cc9b3197de097a5,\n        },\n        r0a1: u288 {\n            limb0: 0x66b312469ce97517a7e5f585,\n            limb1: 0x320485962e1cd1ce5609b3ad,\n            limb2: 0x2f5ed56d2b372567,\n        },\n        r1a0: u288 {\n            limb0: 0x50a883556bfbb1f8d5f9d8a3,\n            limb1: 0x4aa6753d1fea97e3b8aac1f1,\n            limb2: 0x301980e220bb49ed,\n        },\n        r1a1: u288 {\n            limb0: 0xe7614ace25bd3a3830b64ecf,\n            limb1: 0x38dedb346af32c21784b968c,\n            limb2: 0x101dfcee3c535929,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9812f6145cf7e949fa207f20,\n            limb1: 0x4061c36b08d5bcd408b14f19,\n            limb2: 0x8332e08b2eb51ed,\n        },\n        r0a1: u288 {\n            limb0: 0xa4a7ae8f65ba180c523cb33,\n            limb1: 0xb71fabbdc78b1128712d32a5,\n            limb2: 0x2acd1052fd0fefa7,\n        },\n        r1a0: u288 {\n            limb0: 0x6ea5598e221f25bf27efc618,\n            limb1: 0xa2c2521a6dd8f306f86d6db7,\n            limb2: 0x13af144288655944,\n        },\n        r1a1: u288 {\n            limb0: 0xea469c4b390716a6810fff5d,\n            limb1: 0xf8052694d0fdd3f40b596c20,\n            limb2: 0x24d0ea6c86e48c5c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2e39be614d904bafea58a8cd,\n            limb1: 0xf53f0a6a20a1f1783b0ea2d0,\n            limb2: 0x99c451b7bb726d7,\n        },\n        r0a1: u288 {\n            limb0: 0x28ec54a4ca8da838800c573d,\n            limb1: 0xb78365fa47b5e192307b7b87,\n            limb2: 0x2df87aa88e012fec,\n        },\n        r1a0: u288 {\n            limb0: 0xfb7022881c6a6fdfb18de4aa,\n            limb1: 0xb9bd30f0e93c5b93ad333bab,\n            limb2: 0x1dd20cbccdeb9924,\n        },\n        r1a1: u288 {\n            limb0: 0x16d8dfdf790a6be16a0e55ba,\n            limb1: 0x90ab884395509b9a264472d4,\n            limb2: 0xeaec571657b6e9d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdf8d520c2fd45b16da910ca7,\n            limb1: 0x2023ab59c06742c107d21389,\n            limb2: 0x474f8d201c2003a,\n        },\n        r0a1: u288 {\n            limb0: 0xc46ba70245e0d604d975ec09,\n            limb1: 0x921be51a6779f8abc213a42b,\n            limb2: 0x737865d13506920,\n        },\n        r1a0: u288 {\n            limb0: 0xebde3248ae4a49e4ca67667c,\n            limb1: 0x55021936a806c18771a5b497,\n            limb2: 0xeddf62dee5cd01d,\n        },\n        r1a1: u288 {\n            limb0: 0x840eb64075057d76ec783626,\n            limb1: 0xd09ec083f029b05d8cf747e8,\n            limb2: 0x29923f4182ebbd77,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x797d2ef5c1d08447d0723c47,\n            limb1: 0x5e3d0a3367a49356be559196,\n            limb2: 0x1ac7d70481f3e230,\n        },\n        r0a1: u288 {\n            limb0: 0xec5fd0d82c9efcda61aec42a,\n            limb1: 0xd18c0e943f37d7060aebd361,\n            limb2: 0x11985d67f47debff,\n        },\n        r1a0: u288 {\n            limb0: 0x71ec5d0ede447fc2d2b8d30a,\n            limb1: 0x6d732f49bca172dde108d14e,\n            limb2: 0xa187b54b3aa09fe,\n        },\n        r1a1: u288 {\n            limb0: 0x366c39d4f024f7ffcc1f190d,\n            limb1: 0xb25354b8c4a9a95e3c632091,\n            limb2: 0x94ede742a6d279b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xce78fc6505db036c10fac771,\n            limb1: 0x61f8c0bc7f60ad6415d5e419,\n            limb2: 0x59009c5cf9ea663,\n        },\n        r0a1: u288 {\n            limb0: 0xb3b3f697fc34d64ba053b914,\n            limb1: 0x317af5815ce5bfffc5a6bc97,\n            limb2: 0x23f97fee4deda847,\n        },\n        r1a0: u288 {\n            limb0: 0xf559e09cf7a02674ac2fa642,\n            limb1: 0x4fa7548b79cdd054e203689c,\n            limb2: 0x2173b379d546fb47,\n        },\n        r1a1: u288 {\n            limb0: 0x758feb5b51caccff9da0f78f,\n            limb1: 0xd7f37a1008233b74c4894f55,\n            limb2: 0x917c640b4b9627e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdfce680eeda9dab9f624300d,\n            limb1: 0x3332e1bcaad5d683961ea721,\n            limb2: 0x428540bb4a391d0,\n        },\n        r0a1: u288 {\n            limb0: 0x3f654faa3518ed9595db752b,\n            limb1: 0xebecb7527a9c9bc0e35974f2,\n            limb2: 0x14bcaa1d4c941ce0,\n        },\n        r1a0: u288 {\n            limb0: 0x332ed31f8babcb1fb1902637,\n            limb1: 0xa3d0543357fc3e835fe62d46,\n            limb2: 0x1ba5e26829d040d8,\n        },\n        r1a1: u288 {\n            limb0: 0x26ad9a6548dbeda3a0cb37ac,\n            limb1: 0xe2ddec0f5eb83e84b3af4a3e,\n            limb2: 0x2f95fb7eb636c829,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72548e0d946b796842cfecd8,\n            limb1: 0x78b54b355e3c26476b0fab82,\n            limb2: 0x2dc9f32c90b6ba31,\n        },\n        r0a1: u288 {\n            limb0: 0xa943be83a6fc90414320753b,\n            limb1: 0xd708fde97241095833ce5a08,\n            limb2: 0x142111e6a73d2e82,\n        },\n        r1a0: u288 {\n            limb0: 0xc79e8d5465ec5f28781e30a2,\n            limb1: 0x697fb9430b9ad050ced6cce,\n            limb2: 0x1a9d647149842c53,\n        },\n        r1a1: u288 {\n            limb0: 0x9bab496952559362586725cd,\n            limb1: 0xbe78e5a416d9665be64806de,\n            limb2: 0x147b550afb4b8b84,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xde3f0cc8eb9d8bc0524ffa31,\n            limb1: 0xa29420171bca522f8e0d0ab4,\n            limb2: 0x1c527b5683d4814d,\n        },\n        r0a1: u288 {\n            limb0: 0xb831225213716dec94efc1de,\n            limb1: 0x970dd107965ba3923ab9d17a,\n            limb2: 0x2bfb03ab5ab6d7e9,\n        },\n        r1a0: u288 {\n            limb0: 0x41fa2c98128b2070cbf6c33d,\n            limb1: 0xde4def6e8343cd45841c0890,\n            limb2: 0x12f1cede76e2b8d7,\n        },\n        r1a1: u288 {\n            limb0: 0x2aadf4029e19b185f59187a,\n            limb1: 0xb4e7dd0e3b5c1a62be0f0e48,\n            limb2: 0x2029ea04d9e4c426,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1422e11013fe6cdd7f843391,\n            limb1: 0xfb96092ab69fc530e27d8d8e,\n            limb2: 0xe39e04564fedd0,\n        },\n        r0a1: u288 {\n            limb0: 0xbd4e81e3b4db192e11192788,\n            limb1: 0x805257d3c2bdbc344a15ce0d,\n            limb2: 0x10ddd4f47445106b,\n        },\n        r1a0: u288 {\n            limb0: 0x87ab7f750b693ec75bce04e1,\n            limb1: 0x128ba38ebed26d74d26e4d69,\n            limb2: 0x2f1d22a64c983ab8,\n        },\n        r1a1: u288 {\n            limb0: 0x74207c17f5c8335183649f77,\n            limb1: 0x7144cd3520ac2e1be3204133,\n            limb2: 0xb38d0645ab3499d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5daa65d81efa0ef1b3b5406,\n            limb1: 0x759ff07b1035fc39169a31ee,\n            limb2: 0x101ca4f03f0629e,\n        },\n        r0a1: u288 {\n            limb0: 0x10cdf0ef882fb24b6a44bbd3,\n            limb1: 0x580b99e84dc07e055656849b,\n            limb2: 0x253201b38848e657,\n        },\n        r1a0: u288 {\n            limb0: 0x8fbd353430e804cbac89ec28,\n            limb1: 0xdaee431fd72f78e22a236faa,\n            limb2: 0x48b73245c4dad79,\n        },\n        r1a1: u288 {\n            limb0: 0xd98cc2ed22a85b0f8c63206e,\n            limb1: 0xd2aec0400ab5850c7f0fa8cf,\n            limb2: 0x649735015bf42af,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x49173a889c697b0ab07f35bc,\n            limb1: 0xdcffb65f4b4c21ced6b623af,\n            limb2: 0x1366d12ee6022f7b,\n        },\n        r0a1: u288 {\n            limb0: 0x285fdce362f7a79b89c49b5c,\n            limb1: 0xae9358c8eaf26e2fed7353f5,\n            limb2: 0x21c91fefaf522b5f,\n        },\n        r1a0: u288 {\n            limb0: 0x748798f96436e3b18c64964a,\n            limb1: 0xfc3bb221103d3966d0510599,\n            limb2: 0x167859ae2ebc5e27,\n        },\n        r1a1: u288 {\n            limb0: 0xe3b55b05bb30e23fa7eba05b,\n            limb1: 0xa5fc8b7f7bc6abe91c90ddd5,\n            limb2: 0xe0da83c6cdebb5a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x30a4abff5957209783681bfb,\n            limb1: 0x82d868d5ca421e4f1a0daf79,\n            limb2: 0x1ba96ef98093d510,\n        },\n        r0a1: u288 {\n            limb0: 0xd9132c7f206a6c036a39e432,\n            limb1: 0x8a2dfb94aba29a87046110b8,\n            limb2: 0x1fad2fd5e5e37395,\n        },\n        r1a0: u288 {\n            limb0: 0x76b136dc82b82e411b2c44f6,\n            limb1: 0xe405f12052823a54abb9ea95,\n            limb2: 0xf125ba508c26ddc,\n        },\n        r1a1: u288 {\n            limb0: 0x1bae07f5f0cc48e5f7aac169,\n            limb1: 0x47d1288d741496a960e1a979,\n            limb2: 0xa0911f6cc5eb84e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9f79430d5ef315d742ba7cc2,\n            limb1: 0x20aacc886043783d85b20292,\n            limb2: 0x1323cd0f26d8101a,\n        },\n        r0a1: u288 {\n            limb0: 0x10b2ac6faa0f2c6d21dd1a46,\n            limb1: 0x692a71ed6ead0995c1dd5f06,\n            limb2: 0x38e5099a87e0acb,\n        },\n        r1a0: u288 {\n            limb0: 0x47ae74d8002447773c1ed5c6,\n            limb1: 0xbeefb67ce6653bc31410cc77,\n            limb2: 0x38bcbf510e04693,\n        },\n        r1a1: u288 {\n            limb0: 0x87f7dfe2a9704d878a43c43a,\n            limb1: 0x388417c8c9596caee4b8f3c8,\n            limb2: 0x2231862dd6ea5377,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8824ae4e52f07175b229f86c,\n            limb1: 0xea266c73c6740dc7206d703e,\n            limb2: 0xa0bcd21da42425d,\n        },\n        r0a1: u288 {\n            limb0: 0x91c8d9f501c8c2411d65a5b2,\n            limb1: 0x6f693a3cbab19d3ac5acf696,\n            limb2: 0x2cb77ffe6050fd13,\n        },\n        r1a0: u288 {\n            limb0: 0x127d86621c661371e92e5fd,\n            limb1: 0x5a334ed75d208520e997f2e3,\n            limb2: 0x3e78ee48b36d52b,\n        },\n        r1a1: u288 {\n            limb0: 0x640d7cc8a8916f3987fcc33c,\n            limb1: 0x82738853adee48da240f6b1c,\n            limb2: 0x1a0013b7fe68edfa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2e7b3a5a35456f42e87968e6,\n            limb1: 0xb4303f5093c3a460674a2fcd,\n            limb2: 0x2b5331f03b8fa15f,\n        },\n        r0a1: u288 {\n            limb0: 0x7cea371d64d8bd0fc5b9427e,\n            limb1: 0x76208e15fc175e352c274fbe,\n            limb2: 0x5ceb46647d41234,\n        },\n        r1a0: u288 {\n            limb0: 0x6cdac06bfcf041a30435a560,\n            limb1: 0x15a7ab7ed1df6d7ed12616a6,\n            limb2: 0x2520b0f462ad4724,\n        },\n        r1a1: u288 {\n            limb0: 0xe8b65c5fff04e6a19310802f,\n            limb1: 0xc96324a563d5dab3cd304c64,\n            limb2: 0x230de25606159b1e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x65202a838e48a9d934e11db8,\n            limb1: 0xeb46c664339ef677558bbb71,\n            limb2: 0x132ac06128a0a57b,\n        },\n        r0a1: u288 {\n            limb0: 0xbc21baf183836fa8dc9de81c,\n            limb1: 0x806b66e601e4ff52a20e891a,\n            limb2: 0x12e535eb6ae922c1,\n        },\n        r1a0: u288 {\n            limb0: 0xc0b103b1723019de05b304a3,\n            limb1: 0xff8f7760a660a16df500b596,\n            limb2: 0x8db75dc6535f297,\n        },\n        r1a1: u288 {\n            limb0: 0x3a686dcde09afac7da57832c,\n            limb1: 0xa5947df796243b62fa4da442,\n            limb2: 0x259924e4a773bef0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb2236e5462d1e11842039bb5,\n            limb1: 0x8d746dd0bb8bb2a455d505c1,\n            limb2: 0x2fd3f4a905e027ce,\n        },\n        r0a1: u288 {\n            limb0: 0x3d6d9836d71ddf8e3b741b09,\n            limb1: 0x443f16e368feb4cb20a5a1ab,\n            limb2: 0xb5f19dda13bdfad,\n        },\n        r1a0: u288 {\n            limb0: 0x4e5612c2b64a1045a590a938,\n            limb1: 0xbca215d075ce5769db2a29d7,\n            limb2: 0x161e651ebdfb5065,\n        },\n        r1a1: u288 {\n            limb0: 0xc02a55b6685351f24e4bf9c7,\n            limb1: 0x4134240119050f22bc4991c8,\n            limb2: 0x300bd9f8d76bbc11,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe9296a3a3aed4c4143d2e0ba,\n            limb1: 0x7de973514b499b2da739b3e6,\n            limb2: 0x1b4b807986fcdee0,\n        },\n        r0a1: u288 {\n            limb0: 0xb9295fecce961afe0c5e6dad,\n            limb1: 0xc4e30c322bcae6d526c4de95,\n            limb2: 0x1fee592f513ed6b2,\n        },\n        r1a0: u288 {\n            limb0: 0x7245f5e5e803d0d448fafe21,\n            limb1: 0xcbdc032ecb3b7a63899c53d0,\n            limb2: 0x1fde9ffc17accfc3,\n        },\n        r1a1: u288 {\n            limb0: 0x8edcc1b2fdd35c87a7814a87,\n            limb1: 0x99d54b5c2fe171c49aa9cb08,\n            limb2: 0x130ef740e416a6fe,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x38f941f3820c4025d48597c4,\n            limb1: 0x4270c36c42111e8a83bed2ed,\n            limb2: 0x2d0d91a20b75cbb9,\n        },\n        r0a1: u288 {\n            limb0: 0x5ac829defc8a29c4e18ec184,\n            limb1: 0x3ad0a15a0dd4df948ef5ff02,\n            limb2: 0xf618f631c37e868,\n        },\n        r1a0: u288 {\n            limb0: 0xf96e4555f7a83c01c2b1d33f,\n            limb1: 0x74ee4e7ee57979aed686387d,\n            limb2: 0x1c3d7a9c3d45957f,\n        },\n        r1a1: u288 {\n            limb0: 0x210a733628cff21f964acf38,\n            limb1: 0x58addf725f511f5c0f3c4c48,\n            limb2: 0x25c47d2540c2db11,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x40675e9847f925e0cd58ff84,\n            limb1: 0x19a957ff534718c419e1b3a6,\n            limb2: 0xbb2e95d559fbe61,\n        },\n        r0a1: u288 {\n            limb0: 0x70bd9ffbe4ec1ca028fc7d77,\n            limb1: 0x12b76b14785c6e62da580b73,\n            limb2: 0x15b1b31fd06f755f,\n        },\n        r1a0: u288 {\n            limb0: 0x92dd2c2444d613dfaa53a1e3,\n            limb1: 0xec043691d9b8376ef4c32dbb,\n            limb2: 0x1804f2db8a7b3a55,\n        },\n        r1a1: u288 {\n            limb0: 0xe8ad6e24b323fdb6cc8189a9,\n            limb1: 0x501fc22cd9d6c75bfcfe658e,\n            limb2: 0x4669f457c82b8e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x537ecf0916b38aeea21d4e47,\n            limb1: 0x181a00de27ba4be1b380d6c8,\n            limb2: 0x8c2fe2799316543,\n        },\n        r0a1: u288 {\n            limb0: 0xe68fff5ee73364fff3fe403b,\n            limb1: 0x7b8685c8a725ae79cfac8f99,\n            limb2: 0x7b4be349766aba4,\n        },\n        r1a0: u288 {\n            limb0: 0xdf7c93c0095545ad5e5361ea,\n            limb1: 0xce316c76191f1e7cd7d03f3,\n            limb2: 0x22ea21f18ddec947,\n        },\n        r1a1: u288 {\n            limb0: 0xa19620b4c32db68cc1c2ef0c,\n            limb1: 0xffa1e4be3bed5faba2ccbbf4,\n            limb2: 0x16fc78a64c45f518,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2b6af476f520b4bf804415bc,\n            limb1: 0xd949ee7f9e8874698b090fca,\n            limb2: 0x34db5e5ec2180cf,\n        },\n        r0a1: u288 {\n            limb0: 0x3e06a324f038ac8abcfb28d7,\n            limb1: 0xc2e6375b7a83c0a0145f8942,\n            limb2: 0x2247e79161483763,\n        },\n        r1a0: u288 {\n            limb0: 0x708773d8ae3a13918382fb9d,\n            limb1: 0xaf83f409556e32aa85ae92bf,\n            limb2: 0x9af0a924ae43ba,\n        },\n        r1a1: u288 {\n            limb0: 0xa6fded212ff5b2ce79755af7,\n            limb1: 0x55a2adfb2699ef5de6581b21,\n            limb2: 0x2476e83cfe8daa5c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9ab1f3d5a481c50cff61b4ab,\n            limb1: 0x11f4705a4954e6a036be2ad2,\n            limb2: 0x308f243a8a83264,\n        },\n        r0a1: u288 {\n            limb0: 0x5f19b29c09416b2fd501f695,\n            limb1: 0xd0a5c0a568ca5e38f82b2f7a,\n            limb2: 0x8abaf41ba2b92f5,\n        },\n        r1a0: u288 {\n            limb0: 0x6cc5a6aa31c75bfb717c7828,\n            limb1: 0x96fe9ee8789208c41d57d3b8,\n            limb2: 0x1ff348bb7825845a,\n        },\n        r1a1: u288 {\n            limb0: 0x23e6063e1cca25fa4a6e992e,\n            limb1: 0xe94e827315d1667557cbe7de,\n            limb2: 0x2cc27fe4c068e1df,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5de7a643e301caa63b685021,\n            limb1: 0x933a277a93f708227c90f768,\n            limb2: 0x426809a902d5047,\n        },\n        r0a1: u288 {\n            limb0: 0xbb25fb66cb4bf4c7ec50bdbd,\n            limb1: 0x52a75a0facd2b7bf0ea93bec,\n            limb2: 0x1f265ce4dbe1a42b,\n        },\n        r1a0: u288 {\n            limb0: 0xc5717cea7518c3550b4d5f4,\n            limb1: 0xc95394cb07fdfc22e63d990a,\n            limb2: 0x2b4bcc47347e8eb5,\n        },\n        r1a1: u288 {\n            limb0: 0xc5a6f1284ee2bdd4922c2508,\n            limb1: 0xcd55e1d8ff43e6dd59224505,\n            limb2: 0x2c376da2c4c11de5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1c4759bcf7c607fe3f839d4d,\n            limb1: 0xea91f311da73327e2ed40785,\n            limb2: 0x2017052c72360f42,\n        },\n        r0a1: u288 {\n            limb0: 0x38cf8a4368c0709980199fc3,\n            limb1: 0xfc9047885996c19e84d7d4ea,\n            limb2: 0x1795549eb0b97783,\n        },\n        r1a0: u288 {\n            limb0: 0xb70f7ecfbec0eaf46845e8cc,\n            limb1: 0x9ddf274c2a9f89ea3bc4d66f,\n            limb2: 0xcc6f106abfcf377,\n        },\n        r1a1: u288 {\n            limb0: 0xf6ff11ce29186237468c2698,\n            limb1: 0x5c629ad27bb61e4826bb1313,\n            limb2: 0x2014c6623f1fb55e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc403ea5ad65aadd602c8c76f,\n            limb1: 0x7a8d2727cd7fa40d97615b39,\n            limb2: 0x14bd9b9bc6c2c1c1,\n        },\n        r0a1: u288 {\n            limb0: 0xcd28af7919b01761c69bd246,\n            limb1: 0x8a1a211a81094740e2cc984e,\n            limb2: 0x2766e09571dc194c,\n        },\n        r1a0: u288 {\n            limb0: 0xa24dbe5f1fb539a5d9d39db7,\n            limb1: 0xd7eef78019e82d7e1f77d2f5,\n            limb2: 0x6d7b6e70105c87d,\n        },\n        r1a1: u288 {\n            limb0: 0x30836b87e6e8553c665ffbe0,\n            limb1: 0xb0474bb94febd802f9049ad0,\n            limb2: 0x2774e72d0844eea4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc648054e4b6134bbfd68487f,\n            limb1: 0xdf0506dad3f3d098c13a6386,\n            limb2: 0x26bebeb6f46c2e8c,\n        },\n        r0a1: u288 {\n            limb0: 0x9d0cdb28a94204776c6e6ba6,\n            limb1: 0x303f02dfe619752b1607951d,\n            limb2: 0x1127d8b17ef2c064,\n        },\n        r1a0: u288 {\n            limb0: 0xe34ca1188b8db4e4694a696c,\n            limb1: 0x243553602481d9b88ca1211,\n            limb2: 0x1f8ef034831d0132,\n        },\n        r1a1: u288 {\n            limb0: 0xe3a5dfb1785690dad89ad10c,\n            limb1: 0xd690b583ace24ba033dd23e0,\n            limb2: 0x405d0709e110c03,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3b5aa24fe300f5bef5aefca,\n            limb1: 0x5d5566dc41ca40c4af2bf978,\n            limb2: 0x39a42540cb68ab8,\n        },\n        r0a1: u288 {\n            limb0: 0xe21ea63fac2d99bf899d8353,\n            limb1: 0xecdf87c89dafc1f9be69379b,\n            limb2: 0x1c75e3d0966038ad,\n        },\n        r1a0: u288 {\n            limb0: 0x7c9f991de50f505a8dc707e7,\n            limb1: 0x259d423172d9927ffb0e98d1,\n            limb2: 0x15fb83693066d1ff,\n        },\n        r1a1: u288 {\n            limb0: 0x72c144b5e7d364d572576db6,\n            limb1: 0x5d75c50c43614aea3e81a99b,\n            limb2: 0x1ef4651860019554,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72cc2cef2785ce4ff4e9b7af,\n            limb1: 0x60ed5b9c207d7f31fb6234ab,\n            limb2: 0x1bb17a4bc7b643ed,\n        },\n        r0a1: u288 {\n            limb0: 0x9424eb15b502cde7927c7530,\n            limb1: 0xa0e33edbbaa9de8e9c206059,\n            limb2: 0x2b9a3a63bbf4af99,\n        },\n        r1a0: u288 {\n            limb0: 0x423811cb6386e606cf274a3c,\n            limb1: 0x8adcc0e471ecfe526f56dc39,\n            limb2: 0x9169a8660d14368,\n        },\n        r1a1: u288 {\n            limb0: 0xf616c863890c3c8e33127931,\n            limb1: 0xcc9414078a6da6989dae6b91,\n            limb2: 0x594d6a7e6b34ab2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4617750de3208c0a42bf7c07,\n            limb1: 0x7e2d94e31538522d38df8b23,\n            limb2: 0x23954455da7aef56,\n        },\n        r0a1: u288 {\n            limb0: 0x6fef0ba4bbf6577133bdc9ae,\n            limb1: 0xcab064e22aaf2ceec03f1b77,\n            limb2: 0x274369683ff67155,\n        },\n        r1a0: u288 {\n            limb0: 0x5dce7b13d41ff1b90727094f,\n            limb1: 0x426ef23f29c4df03dc8edf8,\n            limb2: 0x313b4cdbf3d9c5e,\n        },\n        r1a1: u288 {\n            limb0: 0x62c5ac5fd0d7b3ef591e828,\n            limb1: 0x650f8fc6b0fe55eb28d0fca8,\n            limb2: 0xf5bb0abe931a208,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf2d619ae78049bf9141c35cf,\n            limb1: 0x717f8b10d469a1ee2d91f191,\n            limb2: 0x2c72c82fa8afe345,\n        },\n        r0a1: u288 {\n            limb0: 0xb89321223b82a2dc793c0185,\n            limb1: 0x71506a0cf4adb8e51bb7b759,\n            limb2: 0x2c13b92a98651492,\n        },\n        r1a0: u288 {\n            limb0: 0x4947ef2c89276f77f9d20942,\n            limb1: 0xb454d68685ab6b6976e71ec5,\n            limb2: 0x19a938d0e78a3593,\n        },\n        r1a1: u288 {\n            limb0: 0xbe883eb119609b489c01c905,\n            limb1: 0xaa06779922047f52feac5ce6,\n            limb2: 0x76977a3015dc164,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x43a96a588005043a46aadf2c,\n            limb1: 0xa37b89d8a1784582f0c52126,\n            limb2: 0x22e9ef3f5d4b2297,\n        },\n        r0a1: u288 {\n            limb0: 0x8c6f6d8474cf6e5a58468a31,\n            limb1: 0xeb1ce6ac75930ef1c79b07e5,\n            limb2: 0xf49839a756c7230,\n        },\n        r1a0: u288 {\n            limb0: 0x82b84693a656c8e8c1f962fd,\n            limb1: 0x2c1c8918ae80282208b6b23d,\n            limb2: 0x14d3504b5c8d428f,\n        },\n        r1a1: u288 {\n            limb0: 0x60ef4f4324d5619b60a3bb84,\n            limb1: 0x6d3090caefeedbc33638c77a,\n            limb2: 0x159264c370c89fec,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa3343aa671fa957f64383174,\n            limb1: 0x5d0fbca92791fb10ca8bfba7,\n            limb2: 0x114f2c6ae3a67df6,\n        },\n        r0a1: u288 {\n            limb0: 0x50f6b86be16e52076b114eac,\n            limb1: 0x780e63533112887af8e1b20a,\n            limb2: 0x63e07909f8e5150,\n        },\n        r1a0: u288 {\n            limb0: 0xf4d68bdb295f81fb688b56c9,\n            limb1: 0xabc9867b1aae2bca05251e19,\n            limb2: 0x1a4d8e8bbc5dc905,\n        },\n        r1a1: u288 {\n            limb0: 0x1072bd332617ade1aa5f283e,\n            limb1: 0x50dc088ed02b4ee5c8114042,\n            limb2: 0x92f0fffce502d7c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf21ea2700d86757c9edc60fc,\n            limb1: 0x4ed3a4f31b13fbb9fdabfe54,\n            limb2: 0xefdc83e2cd29ae1,\n        },\n        r0a1: u288 {\n            limb0: 0x36771d39b743a658ed812080,\n            limb1: 0x506453f18d56ef30476706cd,\n            limb2: 0x2658fa02d8abf7ce,\n        },\n        r1a0: u288 {\n            limb0: 0x4aad4f76dd2af32ff8a6f388,\n            limb1: 0x6aebd448524150ae6bb57548,\n            limb2: 0x2702b8c1fb9a5bfb,\n        },\n        r1a1: u288 {\n            limb0: 0xe1462da76f807e5e73062316,\n            limb1: 0x244b002de9ef9e9d65b40718,\n            limb2: 0x2672d0c637a3cc19,\n        },\n    },\n];\n"
  },
  {
    "path": "src/contracts/autogenerated/noir_ultra_keccak_zk_honk_example/src/lib.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\npub mod honk_verifier;\npub mod honk_verifier_circuits;\npub mod honk_verifier_constants;\n"
  },
  {
    "path": "src/contracts/autogenerated/noir_ultra_keccak_zk_honk_example/tests/proof_calldata.txt",
    "content": "0x1\n0x2\n0x0\n0x10\n0x42ab5d6d1986846cf\n0x0\n0xb75c020998797da78\n0x0\n0x5a107acb64952eca\n0x0\n0x31e97a575e9d\n0x0\n0xb5666547acf8bd5a4\n0x0\n0xc410db10a01750aeb\n0x0\n0xd722669117f9758a4\n0x0\n0x178cbf4206471\n0x0\n0xe91b8a11e7842c38\n0x0\n0x7fd51009034b3357f\n0x0\n0x9889939f81e9c7402\n0x0\n0xf94656a2ca48\n0x0\n0x6fb128b46c1ddb67f\n0x0\n0x93fe27776f50224bd\n0x0\n0x4a0c80c0da527a081\n0x0\n0x1b52c2020d746\n0x0\n0x72ab88d983cee099575165c83abb803f\n0x52448006a17e03ba3bbe63d5b47ff32\n0xfa07266d5585575615ca0daf763e781c\n0xc96573e847bc03378aaf19a8bd6c6ed\n0x6b111a358e7b9fdce64cb86c8b1fb52a\n0x1b69f0aa1eea2bb7d8cb583033c2195f\n0x9fd4142701a07133931e2c1d26e66efc\n0x9d6f7b8da7a7f037105f9482658bbfa\n0x87666fe06b552e6f8f4c215b3df1f9f4\n0x2fdddc4da9ebdc2d20a9ad1a77e9f6ac\n0xd5be63dc611e974fcdf11fbc3d7489f0\n0x583d337a428760fb802a6f99f8c1d5e\n0x1258ce2285d167037f38bafc71b5f3ef\n0xfb6f88a1066aa22db0f75cbe7abcf8b\n0xdc3d0951dd20df6957b6de3d84a26b7c\n0x231ca2cacf2b7584590eab6abcc37fbc\n0x33132599ff8d951c6480d023176d2e5c\n0x2d849894995d544374e87788b4c48e6\n0xe0b7851e78aa53e6d105323591ad7655\n0x8218db22ba568bbdab7ee8f62367714\n0xf2b663bf761ec96ffe79254867c0ad36\n0x32694c772dec94ce53da7542ab09b00\n0xfb846507acca876a9e0cd0f41d614c16\n0xff627f7414810f063ca652aabaeaf51\n0x46543e6a2b9b43ba70602c5ad5aace9b\n0x1e7949ab5b9823a0c4573541be9d423f\n0xbad70a140647157440ad88d2e4a3950b\n0x2cf856aec06236f1495fe35b94c8d9cb\n0xfc622d53158a5478a8123eae0b36c049\n0x1d4a2cfa7b13031f3bc22ab08c337ae7\n0x7172af45a4684d5cca71192c40fc67a2\n0x278c2b9ef48e583c37d267a46ad8a92\n0x3\n0x2c9e2f2958a2bb0e9530369a66ce312\n0x1ae90767314145391e819f65e7a061f5\n0xccc7d4a4e2dd2b199ab44a58a1ebaade\n0x1327f12ac25cd85456fe8009fb6383c3\n0x391ba38188d34b7c4ec84b1927c4bbd8\n0x11bc51d7524ba359920c204713aa9ca4\n0x2656051221a04f13b82dc67fb0f716d2\n0x202a95508dbcdc3d1f31391632d77083\n0xbc88c6c36b302b7cb605003d99a523df\n0xd41cb868ee9cc05d52ad9ed3bc756ce\n0xa277c152d490bd7585938f45b1894ab1\n0x2b2a35acd7bbaeee98ed86332a4d552d\n0x29a680d6c153afc852391ecaade90d79\n0x18739d773a54fe1c4fb56e8d5343fe01\n0x6c\n0xcc0b26e7c47b88b61300f6a714203978\n0x21a4363611dcb36505a77906db203850\n0xd9e9822dfd6af2b3ab7b1dfd29f422b4\n0x108228bb473a359ee2b9d4e5509b9f99\n0x82e3a5c013757144195f82258a79b5d1\n0x2eb5aa6dcc3b3987a133cde7ce94a8f2\n0x6bfaca2df8b3074cb923d3403d98354b\n0x2f221cd4207b8dc4ebeef7dd01d3b027\n0xaec375b33cda91c8229839143d3d9ee4\n0x38a8fd1e98d020c71b767362a1247b1\n0xb970a86e283211052205ae42a24f2a60\n0x26f368b71a62e9472c6d4b7cb9cbd241\n0x1df61c241b887595b5c198ccad82e02\n0x46cef1bc75114160b262490afa4e782\n0xb1bf162dab3228a77682467d72a9a41\n0x28b47ec355137cca90c1dc8a7d66cd19\n0xafabb5c7a08c76713032d92ed920f2da\n0x273f710dc0174bb3fcb74b70bee6fed4\n0x9caf249aaf83d6daf164c38bdd57f553\n0x51cfe239d2d6a396d2c228a56fae151\n0xbaf082e51fa705f23b14d8b22125e42\n0x1821a4cd4cfc564d92f471a32da3d8e\n0x884be311533e27a2766b4a6f57ba1433\n0x2d40a4de0139e40168366b6e5c0c7368\n0xd5a69dab774dbec40d2771d749330cc5\n0xb00e1f39d30a682ab8f13fad231c574\n0x89bbf5dfea0e66f00b3da61d44f37306\n0x2d7cf7fd5b7d5703ee122e9b52f0dc3d\n0xa93437f3bc1b0f596b7f77642dc240b1\n0x2123c7b52bb5d9eb1d21f3231f12dc97\n0x7c12923633e015111649175e47ded675\n0x19a41dcfb537ab032c15b2ee1e7cb755\n0xc8176ec7ca8ee13f072c8e1d76393eab\n0x1e98bb22b539ca6712c6bf388513a659\n0x789bbbec5f0e88df5b33ab5c292d9454\n0x1cc7ab62bd87f861adf2f1ed20af9e8\n0x88d1f8a3ce231f9bc582995fb6a474ea\n0x1e8281a7e709f42b44de3a7c338c7109\n0x60d0f13045f92b5152a49b5644f1a25d\n0x2dfcd2878cfc070dde9161d39ed5988\n0x5e24fa26bfdfbba94f9d5a8ac32d4f5d\n0x13bf8cfc3be083e84f9ce122bc88ce56\n0x307ce7a8680432359ada1b4d23c7cd0f\n0x25bd94e17691b170a16c350566860df\n0xfda2ec7f0ded110be200306cf95690f\n0x8258c010a6333bf6d1bdace683e9ae9\n0xca4cb1d5122de98671d08543593eb774\n0x2fadad86d31089295cce763681a76487\n0xba1527dcc96fda093ea9b874e739093c\n0x232d2497ea760c8d66688404cd8c56a\n0x2f68730495166ad0eb5624f71f8be36f\n0x161ee15d439ed0352ea813f9c0ae32ec\n0xe0e2ad30b6b8eafb8ccec4cecc63c376\n0x1b2550b72de1597ebd406bf12635283f\n0x478636e93794b1ae092ff88783690c44\n0x2c0f935c834e2c4ddea9621f04b4abd1\n0x78fb1aa27bd934c469316578eacb118e\n0x2e552a6dddeff257e8965dbb8cf6731\n0x9cccb5fabb643dca142f7e8da11bb34c\n0xe16b89009360d70bbed299308f0cf0d\n0xb71299bdfe1ab64b0f8602cdd14498a4\n0x22d2e9b5a18d679e15ed7825e637fa93\n0x90c4988ac70e718d9fd4e84ddf9abc9c\n0x1849927a2e213775792b7c71b9fd1e80\n0xb1d90d16853334c7238a2d658fb0b946\n0xba6d423e8bcd65e5a76e40bc2c7c1e3\n0xd107a7ce7f67e6672342f43549dabe7f\n0x1e5217ddbc7f2b999506bd3e8946ec79\n0x1be22389a3e22a4f0781946979dfb917\n0x1fdcde298d3519ed776ef232ec4c9911\n0x9bbe85d36e6c96d3feaf96e820334cfa\n0xf466353dfdf6ba4b8029f0a89ec74d0\n0xe458e488a96352a50c6c7dfe8e0bdcc6\n0x270fd5ccc9623c83682086f7beab0eef\n0x6a4bf71ed3ed20541b25b454f450e05b\n0x28a4e0c28a54e73b235d79c465f69ffd\n0x2b6219841632a5c066212e86d8684d5f\n0x1649cd4f45b63a1874479b35957430a3\n0x8e20d7226125961292f139dd5d09ad4e\n0x1fa60b8f65e3c55620d06599f609aa76\n0xc90f0bbb8dc62e79582da94bdf4e876\n0x27dc780c65156f316ce9cfda32a26589\n0xd7bdc19647254b8d6a7147cd9b7fbd2e\n0x25b692e193186f842b3bbbe87942d4ef\n0x840d712f1081b774d701702af9fdb2e3\n0x15f516c84c42b417b355a57c9524580\n0xb42b3479a5ee331245a55f1796f3b774\n0x164d2259b79875ff6d4a7ae314962f19\n0xb3c8313ba6240b749023cde3de8d5c3c\n0x10111bcb41adb28f4ebf10a9895ecc31\n0xa7c2730903c7b061917dc47464dbf\n0x1fba242634de9c29faf950a87cd22aa1\n0x9ac2096bfb0bdac76f56b8560002e265\n0xffae1f6aee59dd14f1d7b607ffdd13a\n0x9d003c257c0d3af83dd8569d7c60693c\n0x655b659f21ae211c9ea722ad0584155\n0xa9d0212991fc3d8e66b1ff6b06db9f0\n0x45303cd130176514d50f368289c815\n0x2c775709380afa893836d6879345cd93\n0x1dfd30e386b38843e1165d490041a915\n0xfa477c897ab2411eca8aea872df599ed\n0x163760d050b89655979f8e9c85bbe55e\n0x4e51ac031667fa04263332ff010a641c\n0x13fdde734f80b43007aed286b83d3c1d\n0x786e38ff793bf676a9e81c7e8722779c\n0x224f1db561ac33580d6e5f09935f9c51\n0x13330fd426358525f3f11e185494063b\n0x30405c6757f3252cac49f047252a756c\n0xbca5e47a11f717c325b2d4df9a709e12\n0x1cfb6601a73078b8e2a36937ddeba5d4\n0xd72316ca31e1b56c2f21cf6bb95c417a\n0x4c99d996a9f4beb1ad8368c623b7b32\n0x6bae38e872ef0bad755f739c33b99b54\n0x26c16e50c8d88a31b23f3700ba26052\n0x216947b087f0ae5eccd2ddeeff60a780\n0xf9a0f594ce0628f09d6195cbf29fa57\n0xf80ae4c549a83475ce8d0326ca822fbc\n0x298585de68bf9430a83103bc90debc6\n0x97113c64e7d166da1412419cadacaf51\n0x162a7c32c9a495575a2c10542522d18a\n0xf243c7fb9595f93bffa5b3b914c6e606\n0xf7a850acde6e20167b5cbd8c2ed1571\n0x8db3be85de1c940c7140f5aae833dda\n0x281c5a2adaf1754f096ff30e01f56ccc\n0xd665375ac50f8321d33e33739b64d0f7\n0x1621641e97bc505c7e2457c8e91adea9\n0x52183af9be2ac2c85eda2423582b5ad3\n0x193efac585526daa985346ce67900cd8\n0xae85c676342b0b9631f168d7dd7f7083\n0x1a85e32f7ca06d68b26db3b400fedc71\n0x8113c731a9d7b4ea73d60b53edd05bf6\n0x2003047244e7948945d9dc9940701f48\n0xe87d35125feb28d04f69ba647381d146\n0x3b3db96cc492108706e1ca99f852ae9\n0x2216dcc8ed42d61cfe85fec72fd7c715\n0xd0ab716ac7bdfff74d7913ad4fc9f2e\n0x3e429ba84ba1058876b52b794134f489\n0x19fa59649571387acc5035e39ec5579a\n0x3f687b7e5389a7249d411ec165b4df4e\n0x2118d28f0b13b9c1cb87327a0b135ec5\n0x4a1d61a2d0a5f4ccfb6bc192bd85c173\n0x2597c00db579a17147123f0da739fbc9\n0x79f078174941c7996fe05b0e5bf97075\n0x2144736508aad5502ca14648305a29b2\n0x42d87a591a2fde1e7675cb5670329cb4\n0x291a02892f5c6d4750d1661f4653c99d\n0xd8e5497a5187ef31541d9a897e3946f4\n0x1163555ba28cab90ecf66f3238429571\n0x238006b7bc6b6dafd69e7edfcf829d54\n0x7cd2f7e0ff4ffd4b5359d56aa205c76\n0x71df1ae49662ca8f37ba269aecfb0af5\n0x2e06e9eb3020bfb01b9ca2a5394a22ec\n0x8babef6f5ba652fcc03d99684ecc39d9\n0x2a262390a56d9b1b3ca712a697083b53\n0x81b1d2b3229c72e9887cc9daf09c5d83\n0x283e8db78c1d6a40c7540bb9586f56a8\n0xb2c31e07d12d8bf158242ccc71bf8bac\n0x8cdab44e40eed469adbbcb56a38c1e9\n0x53addeac218841718ad6b2e7741aefd7\n0x470824a5a849739d80100191b372fc2\n0x2b954c27f8c2d427d5fd7192e2f7e88e\n0x582ef20304a993d6896d430b0a8a003\n0x6b4a3998c3f87a1d2660260b50a88f75\n0x18c20c67e27c359886656607c28ad10c\n0xebe49a376c2fad2920d8525542a8d9ca\n0x1717c4a944d453d2d2800f5772bad68e\n0x4da19a92f3f4a469ee431c0c6cadd414\n0x230bd6a574f8e2649413a45307ef1b20\n0xfda4ab6004a2dc64cbf86a775c0eba27\n0x2cc18fb958c512519bfb67b92f93192e\n0x1c15f30e06fe227a167808b9dd795d96\n0x29435c7456f378a60516ea36e9a787e7\n0x65b4a473d67d0dd91afb632bb0c201a\n0x23755840784797464b9139732a10c28\n0x2228c18c11a93e23f790379024ecd81b\n0x67d14943ff0e5ad1307f1ff9de461ce\n0x9fac3dd69eb96e10685c4841ef7df7bb\n0x2a113aad0087d70470c885f23778e194\n0xcd8ebfae9a3d666bd4c814414f366370\n0x1ecc5357363e8c7a80043ae43b48c531\n0xd8f2057e30af2f40fc8bed5369ba2ba4\n0x12d106e5bca905d644cc4433db4178c4\n0x7f07a0830d0993a67ad44361de332c5b\n0x2e97b7f851abbc5f8439cd660d7cef6a\n0xfe737d734ebf8445f23180d212ac1eec\n0x19dfdd77565db43ca1b121b1f607d8ec\n0x44d96932613fcd48d72939b646e2a298\n0xf27950f8c7361c63eb2077b4a0842f5\n0x2f33bbb67654d3daf36ba0f9b208b24f\n0x2554853464c8c9e7f6dc921cb0b8ec9\n0x8d208c1714797ab2b0311b9751f3ebeb\n0x169d6fbefbdbff2221980753bc81acb6\n0x2f19c6b5cc51a788442bdd4ab028629c\n0x1eaa503ca61fca8fdb8146d8b8317b23\n0x7b787e41013b5ff0383d2d6d46c7aa35\n0x14a2626a400d98300915902a9085d37a\n0x26fb8c4d0efdaf7776508d68dc879bfc\n0x211c25850c612b4d500d66742668e669\n0x80b8f6cf876fe1417e46141036bbdf52\n0x2c7a9f7ac31bc682f566bc8fa6f2835\n0xdf23f539e0558b12b01a46d6946f5f76\n0x28316a7d304e19a1ff251c0ee00729bc\n0x95f3a1231bd8773f45a35949d3a9dd23\n0x1d99c34ce5638e749f59a48e8d0983cc\n0xa24a050d0782ee290ae83a9cfa6673d6\n0x14ca971bbb001fb82476ca77001f005a\n0xc285b1a03318f1587645872d065e76e4\n0x2eedb579674f894ca34b68f8a98a66e9\n0xc84f7be2a74c3d9cbb402276309c377d\n0x12e66d029e1436fba743cce476d609f3\n0xcaf47b38ae472b9b6da709680db9041c\n0x24a6cfa38d649696d9e55d056c05423d\n0xbd1168207431c06e3fe6aa70bf335767\n0x20046e5d2d49cdf7f561571b4c260e35\n0x5e19b5d2930889a7a583cebc48a8f6d6\n0x256228d62e03936dec97e93c47335d32\n0x29\n0xf851d5eaea335bdbc78b8801b6dff2d3\n0x1a0519c73c5b93fb7c61915047e02843\n0x426d423072f29338edbadddb5a302733\n0x1fb9563356aaf4c5ab3c504a9b5f6955\n0xf69fe8da17bd9f70cc43dcf95ce3422e\n0x328a0565e15de5b95f7c8c6535434cd\n0x582fa0d3f347c2035eaf187e51a832ee\n0x13b2eda682af01b53b511a59a03c37eb\n0x6488213b8903abf45f620c83a020c23a\n0x20515bed009cda31abd1d52426853d1d\n0xbffac6f10bf7c891b82bc7172bd669f7\n0x91caa9d42752483eea29d91b47e069d\n0x3360f1e387da343fae283b7f6afe20cf\n0x2cae39b62d22e16c442a7f9949d0bbda\n0xdc1b80fde8f8d9b78f0ac9147d01563c\n0x108c196c1df03a923d64a38ac7808509\n0xa02f5ad9cdb504e60c6ac11cb7d85fea\n0x107792ead89c1e7a2e0ac93126b25900\n0xfac037614f20f1a2156c8d804f412f84\n0x1068b35e2e310a1ea2171bc70c19da3\n0xb26f5a03ff79d76c18115927a548c903\n0x21420e427a7cebd2d61a04a6b7320855\n0xa7607130f8a308a825c4cfc0038eb35e\n0x2f11842b0d4c2b77786c0ae1831eff99\n0xc3899ac1372fddfb3b3748bed7597b05\n0x166a449dd17c250da2640f724eb079d1\n0x5b3420a0cba6f79f02c9c29963c2318f\n0x7e9578fcb8676019922d0acac008a01\n0x63e84a0ed75adb648e7bce553a37fec3\n0x1e76dfb25985d50e8dea70e8c67e94f8\n0x7e6edbb3b340b318b73c062c889589e6\n0x2a8902e1aa1556d8c8c0f0032891304c\n0xdb4d6d167dd226096e3f48b28f586de5\n0x2dc1809f1ca02838192fecb3aa118e98\n0x1bc49be8e95abc33ba0e706d0a34c724\n0x170366597f3dd87acd518ab78748cd8b\n0x9f9e2a454d858e908a7b69b8dc3eb50a\n0x12dbbe252aebd6b6e45b72e02c85b011\n0x1af08efd59ee2eece56855dbf108e443\n0x583a342477636c754360ba284c59cf5\n0x1caf4afb1e0ca2c11604f997bd0e4c52\n0x23c0fef46399a7be2c7237148a351855\n0x66765a237401d8ccee6c2462f9c95a65\n0x22a038e174ba63daf6d720e193e1fd82\n0x7f3858e7649fa0bf18828125c413a67b\n0xeda22f81366f6f2d81df8004e83760c\n0xfdc353ee280a7f63a9897698e42d8b82\n0x1d8ac3d57fca24230b4b0bb732ff9153\n0x923431bd0aa21322f4cac85b6e682afd\n0x2248fd0098babd35ba6e73567dfe664e\n0x18e29967cef2264ccd715bf1929fa613\n0xdc9e7b4f82d30af56c30b4258c2f0ee\n0x99e3d4da0ffdcea04c9b7539209b1225\n0x10c8907c83ebb3cc137764a09ba87715\n0xb684c8c315bdb351eac5a22584d85ff6\n0x107add948cf832681f5e9029cd0640c\n0xbcc39e165c17a645780fe9f7751673a9\n0x15d269b27b91fc124cb8625a67613435\n0x1876911bbe95a9886099e6aa72c51924\n0x180d6ac0bbd67b4aca90c667a660d736\n0xccaba7272b99a63513e54bb171284c40\n0x48be863d9df6467f4a0233f621cdcfb\n0x29025ac46529b7b579a8976dd70f91fc\n0x1a491941a6745a11d9497fc68850065d\n0xf29b288b5e765724baaeb9696444240e\n0x9cd9113bc9c5ef81fa62f17ac1a0321\n0x5bfee095ff50a39341b2db85203f59b1\n0x139eab4193005cd82fc7e745dc73c8c4\n0xdad0c43fd64b2256ccd4da8b8d5d0a1b\n0x2b4a38b97e1f31c327d95b7ab3c6a4ed\n0x1e5c70415b475e36edb5492a25d26ba3\n0x1768f1bed7a6757250eaa8506dd01446\n0xd5e3a57ae0ecec13652475e929755e78\n0x1e62c206c6dc784e2d9d0f9f2e2122de\n0xe7b6a69b56156803dbd99c8a1850c931\n0x1cdd1bca862a68efbe06187c41d7e852\n0x6e39eec930fa8bff3a8f3ef488b81bc7\n0x126b00fdcf60b33f2ffd7b2848c1588a\n0x71807a72e9cd8caed041e789a08d999d\n0x127a71feced54528889aa322d7a355b5\n0x52796bd37627cd6bc14dc9f9751a55e2\n0x1956003b4b270389911ab733f6d918ba\n0x17985155438be3a065293851bc39c66\n0x2479043f7a52410e613d3cca2724fe43\n0x9c649cc215ed11b8d4477c1ec78e6165\n0x2711daafce61e5f736697c2b971b7095\n0xcd1b62db5b7cb422558d516ced4a920f\n0x23000d223301e007217c6381298e6d16\n0xbd1034856dde009a63d8ec9d0326e7e1\n0x1487363bd21aeeaf9ef93383d346c62e\n0xb\n0x9ae81468f7f0eac005e476125741b30d\n0x227d79a7ccd1edf90ad9c7e1ac54f41b\n0x5dfd595f422629a3a753d489fff8a5b0\n0x30529f0e37769ee70dd4753515e7b725\n0x990fa36eb686c361e3e5f1e2a53f289a\n0x30f2e3692eb952d94718c615f0d5db9\n0x41ff48cf0baa5eddfb1f42adac49a3ea\n0x2305abfd6f73ce6d8ac697f1a83952f1\n0x23b29abe6dbce7258ab3179633407d0b\n0x2b909b0c6c2d700a12f074245c1482d9\n0x9b01577a0defccdbaeb9ea8ee64baa3e\n0x277f87a6885177e4d070c738b7675374\n0xc62e866eefd2e057ea2f246a5f51e624\n0x43c2ecba2e597419b8b00525a40f827\n0xe30c69bccf1b16f6c999f0f2adcc4872\n0x2571f8e58fe4ef904e6264ee592d553d\n0xbdfe06d3fb0c383b6e21baf552d53ce5\n0x229a88762e7b7d745545d97c8968dd2e\n0xfdd9a8aa8ad9c885d3e8c4c6defb2f75\n0x2eca41ebe23a3609cf5a182d4548ff6f\n0xfc92d770fc041a40fbb6aefca7454bb5\n0xcca5f3510fcb1c76c73449aefd70f5a\n0x3528015d211f9056f08d4405ed45e3be\n0x815b51d0fad82e2bf58dea47a5c5c9e\n0x464762af23a10506407a56b41060842e\n0x268020bf9d29c8fb9b3fceeb7d6a59f0\n0x956f6c363b1bdd19aa7abc027296c252\n0x21dcf2dd1fb746460bcec6abcb55b22c\n0x2f2a04f31b661d5e3601042d5e572d85\n0x15c2404609182409096c9ab0b9edc575\n0x214c0f536698e0e61c517ae4a9934590\n0x1f4d839ca0eea47db0c72198326a467a\n0xec4286167c4f912c7a0f6ab6e901791d\n0x24a3c929713924f58941c78e7f45bd8d\n0xccd394dd3bd9d97af416486720cbb47c\n0x2c0ccc2b2decab521c9de92d17ead8db\n0xdc2b32ff9f7320deefc8c73b4a11a0d3\n0x2e5bdf94f1f74e2c5ecfe6ca6032714c\n0x2ab7301d5eb5ff09ba1e98a8fb8319a9\n0xf992225aba2adc596c0d79c4ce907f8\n0x5da835cf84745a5dd3c225f546a0e2d1\n0x2938ea18e4f2d46b0c8ebd575119a2cd\n0x8e2b37c7901aa87e6e24c17a94926c9f\n0x61815dc37954d2af9f7c9e514e8a6c9\n0xc\n0x96970e7bc1e76a8700187c84e24f9c63\n0x1067f0c7f08a0dcdbcc1cc0cc3bfee5d\n0x4cdc1a0a3788e194d6f9f5e68a308a2c\n0x1ee5130c7cddd7503bfa70ecab8960a4\n0xb69b349ef5723bc98374fe182be4f38f\n0x27fd7985819c2d0f69dbe5c0450de888\n0x7e04416174b643b8d005b59eda49fcd9\n0x19043d2f7a8ca0048e7e3ecec36167cc\n0xafc14413d0348b839ae6df0880c5d176\n0x9bda7fca527a75190ba0ed75efbe52e\n0xc72039dc239e501c53d64fb73683bb5a\n0x2b3fdb5bb15dedc6bee09b982b7d283e\n0xafe1a848c51b43599876c342103ac10a\n0x13554d446517fe9c7a91e7ec6860f557\n0x933ec06501bba4c4d8935f8e93983b7b\n0x1f812efe34bf7f830ef2dfc3836bb90f\n0xcaba36d464cd6d52e010bfcc6b50e8b8\n0x9829c8d031ed6f62d60ca8ffd35af8\n0x76474be0aec4333a562274ff7ff35249\n0x2cf07eaa5be46114248a47fee74fea04\n0xc9396879901c7dd924e56ca24a376acf\n0xc436cb5d6ebf5ea702b0ba1eb6a388a\n0xfa0669aa79c0b4c2b3fb74e6e5053e72\n0x1015bd4cf50121459e258218bd2674f3\n0x4\n0xa1f10a6cc49dcf111d90896304a69994\n0x20f705efbe5757f96bdff174af9c842b\n0x7d17d0be5c0eeaf7879c8a5cb9c199c5\n0x23e9d2e3fcafd0b6b2f068263901d519\n0xa04640f25bf83609feaf96c53415ba7\n0xca0fc19610a516bc29fc31d755f2cf4\n0x7c1ba9ea627ce366afba080d00d9ed02\n0x1e52a5f81cd198ce503a52ca28c50b58\n0x9cab369c1e50e666eb13767588023db2\n0x1d923974b4c54ff5722c741d3b8ca06\n0x34df50f781a87dd6e614f2ef298cf76b\n0x2a1d6fbdf272ce2a4bb5dc5dd1efe3c\n0x4a2c2f9efc37ecc7e2da14a1e5e7d781\n0x1df0cd2eee881085955492226fc8f8bd\n0xcc50fa61b20119aea99f688220063b6c\n0x228a7613d97c2df8a4932d736fbbb413\n0x27c\n0x1a16b2bfe14b2e6019a59971\n0x24ed2b110c79d5c92e010b16\n0x1ec247379c6405e8\n0x0\n0xe8f1f014dbbab2842fea47b9\n0x7bacd083188a7cc6fe3a1dec\n0x162654e2d1942b55\n0x0\n0x51862d9defbe867b\n0x1000000000000000058fa82a26abaf927\n0x21df15d1f7b9eac3\n0x37159dceadc5073f\n0xf4e2a426d8fb38d71d1abdb9\n0x2e30d5e351c5320e177a1c4\n0x2568667991cbb67c\n0x0\n0x39a660ff938f9d05c6c23283\n0x3741ae35e6f91e9c7f4c3cab\n0x27f59a3b2e94787a\n0x0\n0x100000000000000008828035a3b4be3e0\n0x100000000000000008c4999be2da0c69f\n0x100000000000000003bb00e99764faf67\n0x100000000000000006ab0644a07e72915\n0xe5ce33412cdcaaa3b94dddbb\n0x6009d73b39bd788cbce9b6b7\n0x9021ff582fb8621\n0x0\n0x16c90793dcfd9e968feac437\n0x345097e5b87a9398ad9809ae\n0xa9c8f4cbc2d8eda\n0x0\n0x73734449eec8d93b\n0x100000000000000004b969342c9cdf749\n0x1000000000000000001caffa7050f2671\n0x55c84a1312e847e1\n0xe04cb6e5c0640851a524ab65\n0x3c46cb323e77fc6781f22767\n0x110b4edea3a012c2\n0x0\n0xcf05d99b438a9be418b2f2a5\n0x697cf6c75660ca50adef75dd\n0x2f1a3a37ca39adb8\n0x0\n0x6a97ca9799f2837\n0x678ea1ba08b5e48\n0x100000000000000008ad9b3e61b404b3b\n0x100000000000000007273ae3d4e6d08d0\n0x3026598cdbe60ccfc5a4353b\n0x2633c174bcd387be205b6399\n0x183f440fad085d79\n0x0\n0xa6fad5d3291a67ff205de888\n0xe40c78c45e7173ecff1eb50b\n0x26af36bafef99f22\n0x0\n0x100000000000000006f5fa6d8d03a4f70\n0x10000000000000000635741cc29fb2c91\n0x10000000000000000689bd6f7b6161e20\n0x1c2212e95043c36a\n0x5eeb272bae6eb1b79f205d8f\n0x76786a7e7eb365fcfcf78141\n0x183279bace5856ce\n0x0\n0x717ecbbd8b4d46af91ceb05\n0x4b330797c40c3a9ec017c778\n0x2feda3bc36448df6\n0x0\n0x252152a1038fb5c9\n0x2aec4c6fe5c0f7d0\n0x45d3d5a95110b79a\n0x10179efb5205029f\n0x345d7bc53c686e32fc3fd50e\n0x62ef32b7aaa8fd97df5ab30c\n0x2a6babb7e4e63e9\n0x0\n0x6580006fe70f48de94bf1ec5\n0xedae6cf0243e83449f06b302\n0x21ab1c3d0e6bd7b8\n0x0\n0x176db843ce69cc45\n0x299c4eaf2db7b03b\n0x10000000000000000300efe44005363b0\n0x10000000000000000511eb68f6ac52f63\n0x26055195084c443a78eee85f\n0x19c89c97adfced3a3de87cb7\n0xb9d2fa858ba259f\n0x0\n0x1624fecc6c9f25f7f8d66351\n0x1d386fb1bc5dc8615d6ec443\n0x1a619648698561ca\n0x0\n0x100000000000000005adc03b1b50c9b3f\n0x100000000000000005033beb2c42c4012\n0x81eab08943a9db40\n0x1793c002d915a10e\n0x1e9810d8cd01778ba8f46c04\n0x9548f4e5fabb4690eea39abb\n0xdec7ab798c5558c\n0x0\n0x17a709275f5799309bd55fbd\n0xa4a503d4d6844f14d1120ef\n0x139f9473d1246b95\n0x0\n0x4617854db2159e4a\n0x10000000000000000544353ebe59137a8\n0x9d170e30a44d433\n0x21b6bc5395816243\n0xf30fe47fe985d834ca224b2e\n0x10434006ecc32fbc094265c5\n0x1e0fd1b9b2cd4415\n0x0\n0xd4c10d8fe3d086ac7a3d648c\n0x8d1e28513ba65c3f413c14bb\n0xb1906d635029ef3\n0x0\n0x135c2b4afd09141a\n0x8d3e2731ef663f92\n0x2788322359ee4247\n0x1c577f45e18d8879\n0x67eafd8c3ee6181ff153657\n0x830a5d3392ad22184afe2102\n0x183f233705df42b0\n0x0\n0x715de70b0c6ce0ab2fc6f883\n0x8f443d3c8250e1beaa563306\n0x7d738c20d5ec853\n0x0\n0x18b8ea2d3964f359\n0x5623a312b77e64ce\n0x10000000000000000433bc5fdaa56fbfa\n0x1000000000000000021e825caac67208a\n0xa6000b4980f3516b3df3a56\n0xb70ca6dda62d13403624b04c\n0x2b8e85d0848690b1\n0x0\n0x31b91075cb5614a3a16bb729\n0x22769c7553d732a2caef07a3\n0x2f653f32da561bc6\n0x0\n0x38668ec60d3ffa31\n0x83a6da0ae86390b8\n0x1000000000000000026bdbdcc6601a411\n0x1cf763664fa3878b\n0xa7fb16f26c66079bc26264e7\n0xd3dab57882d3c1234ab36288\n0xce4b75f1fcfe887\n0x0\n0xb9e9138e33bade6496c2da16\n0x332fbffe555f16c9d61f0c5d\n0x1a1bea2d23296449\n0x0\n0x10000000000000000aa5e32f671f7c430\n0x100000000000000009a2a422db6108a65\n0x1000000000000000044137858e77b6e21\n0x1000000000000000008de6f0345f982e3\n0x6acd00c747446f6c6d23c083\n0x4f7fb1d845ad15b638b12ec9\n0x1b705a23004db57b\n0x0\n0xf1dc207509bedff8a6094f02\n0x8d304dd7b8c56a3c24b6fc5\n0x6514db784f46508\n0x0\n0x10000000000000000117ab90bd788da25\n0x100000000000000007e32bb8e1a62d8ae\n0x94f3ae4900e5088\n0x100000000000000004f666c48ce43bdf9\n0x1f9dab72ca293a8ccb310eef\n0x25a205c00a5255cdbd09a0b6\n0x42349edd8121cef\n0x0\n0x303efbe8afd40bfa28dd702e\n0xe8a9c2cf728eb142a67dc9cc\n0xc8a1fd6cec0415f\n0x0\n0x91a8a94c4c7323b3\n0x6502e6727b712f20\n0x100000000000000002e89fca700df6a9e\n0x100000000000000004a78aae362fcb391\n0x803119e5be3fa1bba22af9fe\n0x1873eda45207a266e7e09056\n0x21cd1828230873a7\n0x0\n0xfc0538c102f6ed6c34549036\n0xec0c6fe1165e17e7221b70df\n0xd401c9991f54959\n0x0\n0x1000000000000000015de1acf660c3be5\n0x51e1efcfad5cbe8d\n0x100000000000000002112d6ff0df801fa\n0x96bbff2d7758f4c5\n0x8d2994a9dbc9267da1e0b559\n0x2882c862143454763970582b\n0x2cbffeb5e04238d4\n0x0\n0x7bf985cffd571cc7b3e8d001\n0x4478f2ef43102532ac73213\n0x18456b9586efc452\n0x0\n0x10000000000000000b12b3643b1dab6ee\n0x100000000000000004ee941b61904184a\n0x10000000000000000533b6fce2d4a58c6\n0x100000000000000003b217186d9684629\n0xae9386f511ff130a041345b9\n0x8641dfc589a8b80a48d02d64\n0x1242cbf035f9a4b\n0x0\n0x96d3614cc1ac044b365cb9cc\n0x3c6ed9a26cdf5a7ec1e17007\n0xd18ca8b1b027cf1\n0x0\n0x10000000000000000678931265d1407db\n0x100000000000000008ad2fd74ac31b0c3\n0x10000000000000000bad4decbfa3030cb\n0x100000000000000002b71e17e39c01b2f\n0x60508381fc2b848e48fd11d7\n0x4c7401040559dbb7b73a0baf\n0x8df45a9b3c27e7f\n0x0\n0x81b77d411023e3a0c6982bd7\n0x46ef6cb6a6d1bab0fffc1a77\n0x2284b4b406d5b5f3\n0x0\n0x1000000000000000067c1e28df889b4d8\n0x1000000000000000078bd2be0c35ada01\n0x10000000000000000ae320c88924b8c20\n0x1000000000000000042a6bc322e825ecf\n0x2e4eefa37ef162fe04989ca4\n0x594de9902fe67f3aed214009\n0xa76854dfd2da432\n0x0\n0x6c45f9a0509d062982a06e5e\n0xeae286a0531902f1f32e3fc2\n0x619d1b718451e6c\n0x0\n0x40392352abbdbfc4\n0x82d1204f6d373d48\n0x4c72440b4d2f51df\n0x100000000000000000dbf848d73011b94\n0x6d3cb8d9204854b29684b309\n0x37e9fd8c04eedc6a5a993b37\n0x1db3fb4367633fb5\n0x0\n0x9beafc56e80faec81d940c3a\n0xff334f9cefbc09dc905e9773\n0x129df96bb8179b91\n0x0\n0x100000000000000003c2ee5d4445b4986\n0x100000000000000003d2ecec47dc6b286\n0x100000000000000007cd64b69b086a209\n0x10000000000000000729b2b4226c5b43e\n0xdc9167b08a4c83247d944358\n0x83e33c6460b171071600ae75\n0x1fb9e21509a49137\n0x0\n0xcd5bac7819f7ad609bb08648\n0xf3cb59ee2024e93e38974552\n0x5d63b20570b2600\n0x0\n0x100000000000000003999bab15c3eec55\n0x100000000000000001e5b6d729889c73a\n0x17b0018e2cdd79ef\n0x1000000000000000079804407be1a7821\n0x8d0658ada3d52390eb8aa265\n0x3e08620790af237588665b10\n0x16e2ae4579ab488e\n0x0\n0xf45b0b2dc671103c98259916\n0xb6d2bf4b12f624648bdf9073\n0x1462d5a4b5029c48\n0x0\n0x25ac8c9d540bde5f\n0x30f2b22e38a2f39b\n0x100000000000000008bdaf7fed972ed4c\n0x8e9c8f0baf0e5e0\n0xb0e44969500d0a2579b3b387\n0x14f72882942f4ec789e0619e\n0x24b78a0b14372e48\n0x0\n0x942ffb395d7b066b601d6abd\n0x5272255c660a82845df38096\n0x241594a3bf405d01\n0x0\n0x3c3a3b683ba91782\n0x6d1d17cbfe13c405\n0x10000000000000000029c353f5d63d5ed\n0x615fd4b1080dc249\n0xff17337afc626ae953f5626f\n0xa8c34092429445fff1f88252\n0x22fc3c03db0de0e5\n0x0\n0x491924acde8c3d25ea2ab490\n0xbc919f52638e2efd4d55359\n0x27b15dda86188a17\n0x0\n0xb06ae8ea175cdbd6\n0x9cc064951d09be63\n0x100000000000000007cbc98dd441b45f9\n0x1000000000000000032d2455797b63830\n0x5252cd75278c75eeb8526e45\n0xe75e8d936631709a7e790194\n0x29b9f20cfa89a53f\n0x0\n0x1da055b2c3209600e7ebe794\n0xcebecd76e1c3e35b6df61a03\n0x22ce85600d611dde\n0x0\n0x100000000000000000152ad334db248dc\n0x1000000000000000069498d62edefa1a2\n0x9aca7a5ace8b3e0a\n0x100000000000000004b1a5b476d7df163\n0xebdbebb7d4074a6fd329256a\n0x65fab8667f348947617a36f6\n0x20da88d3dc65f55\n0x0\n0x93351cb758d8ce9147b4d2bf\n0xb5c40a816c020d04d6de6d27\n0xae13c476736952f\n0x0\n0x465cca8bbec235cd\n0x100000000000000001f66c0a771ce4489\n0x95be3a6cdb8f62bd\n0x100000000000000000286400c69da711f\n0x7ea094f1db72f4075914310b\n0x1f10d5c0d93fac492ed68879\n0x23195bb94cb2bbd3\n0x0\n0xc27bcfde51376c63ccc9cf5b\n0xebd2105f002819a3d914deae\n0x161d939d246abebe\n0x0\n0x1c8e1c41087f942e\n0x68eeb93aad68d0ad\n0x15d99570bd9365eb\n0x990d583edb4df79\n0x86132f318d8c3f40f3b7a2ac\n0x11f876c4e557c4116f55daa3\n0x163cdc438fc63f9c\n0x0\n0x3091d92f220a95249c2054c4\n0xcf48dd2ae53fcc3819c886ca\n0x26f6d24bc6516ddb\n0x0\n0x352c6492164fadc3\n0x3ce954283a77cf9a\n0x2d00649a9ec6a31a\n0x69da09c148fd896\n0x7884e540c5f811093700b736\n0xdea19a138fe61cf23401284f\n0x1e3554f35c7ad08e\n0x0\n0xb5cd1574cb16e32e5f65627\n0xe3ad73c43797f9887a95a990\n0x619d8a393db39f6\n0x0\n0xad32fc6b8618a05a\n0x48010700e632cb73\n0x1000000000000000052ef0b74519d742c\n0x100000000000000005b65aea2a0f5f9a6\n0xe9657fa21402659512454e31\n0x46befc9dcf170bc7b17a70ed\n0xe5e806d26b15b12\n0x0\n0x8b24e3152bcd4b2cac6553cb\n0x6e5e265d8dd40564ce75d058\n0x2389f150ff932c16\n0x0\n0x533900219a4faa6a\n0xa79f5f286d3c5d13\n0x1000000000000000045532e9aa69f92de\n0x100000000000000002f8bf6df53288930\n0xa14d79a9789ee5d65d715b81\n0xc05ed37a8a6d48721f2b9364\n0x2cd9cea8c696efab\n0x0\n0xe90b6f3c1567f5e382b40727\n0x66372c66fef3020404a48144\n0x661035d1d2de49e\n0x0\n0x1000000000000000080bc5dcf28240d18\n0x100000000000000009b27d40715c5adf2\n0x6dd5bb50f765ad61\n0x1827ac9f9816d92a\n0xf11fe6946c18d9d9853493fb\n0x60fc89cb2a9f1e9cee83f212\n0x6544cb38385ac2b\n0x0\n0xf961f4222e9993de5366b974\n0x26b975b27a079598c9bd72bd\n0x23e126fd24819404\n0x0\n0x5347fdd6adbdea80\n0x87b22f02ab28e575\n0x1000000000000000062bf75b1a92a6af6\n0x1000000000000000002faf611db16ac1e\n0xb88391580f5b71efcb9a13af\n0x7ed5841e21c365c253507cf9\n0x167970b4fea14da1\n0x0\n0x92967af06ad6c576aed22a64\n0x51055b335db0d1eb86c38f2\n0x1a31e57d3b5da2a\n0x0\n0x100000000000000001e5aca8a13a363ef\n0x1000000000000000050546cc577057378\n0x100000000000000003f69ca79b40e5e9d\n0x630e74ea170997e\n0xf74933291e06e8ed71d368cb\n0x233e9298066849f4053d3cc9\n0x880e566bc93ef75\n0x0\n0x67efa02c7101c1f3b26de789\n0x23a6c4e70958c036a4ea7174\n0xa91620d91b455c5\n0x0\n0x100000000000000004a531e4033199a54\n0x100000000000000000534c74a401d676d\n0x8857a25bb1b12479\n0x100000000000000001059aef9499d234b\n0x7ce6456a8a2f5477339d1b55\n0x2a89726ee93ebf36df7dba5a\n0x2aa62c4d97274c80\n0x0\n0xa042097258b7da7d4c98ef67\n0x2ab96c4b822a7e96293ec2d3\n0x23a7b23ed4080b5b\n0x0\n0x10000000000000000473bd16762c6d46b\n0x100000000000000000522a001c523bbcf\n0x100000000000000005950d61bce203cf5\n0x10000000000000000a36405c841fff36c\n0x9c76a149fc85d142bbbc7094\n0x4fa6f0f9ba65eab5a7a468a4\n0xec56d6ef2239781\n0x0\n0x98df019a8f3a7595f61f643c\n0x43279d99b8a7970fd5a683e7\n0x2c4bed9453fc6f7a\n0x0\n0x1000000000000000046fd08ec6490b558\n0x100000000000000005a9427a3d47911f5\n0x100000000000000004a986ca069c28378\n0x100000000000000008143d37728d9ed92\n0xc758acb10641f2c48522738b\n0x48d2a8d3a9d98aa3f244cde0\n0x26c93e5557a1930\n0x0\n0xd6f4b4012a2b7e8a0d54647d\n0x84d188f02d8669c31355e481\n0x1136a8ab40e91e6c\n0x0\n0x9ba4c5338ea6f62\n0x2a5fc3153c202bd7\n0x32e5695773a7ab06\n0x10000000000000000542ec41f093e41c4\n0x159df4ab0488cf54f2b34c5\n0x8f912a3d548eae17357a8fd\n0xced1c30bd5693ee\n0x0\n0x6a96b678338d9bde99da55d3\n0xb659c49044306c97cbe20891\n0x143528b6ffc8543a\n0x0\n0x1327619cb7e23b70\n0x678be898737f8641\n0x100000000000000009fa8e15679d11ebc\n0x10000000000000000698f3fe5976da707\n0x10253d00b789d633b3c2c6a0\n0x73a13491c785145e3e3b9fa3\n0x232ed65e603c7ab7\n0x0\n0x58683e0e6f82685a85e51bd5\n0xad707c5e8d6dff18d91b05d1\n0x244a1b35dbacf41f\n0x0\n0x100000000000000002a2867f3fdcbcc99\n0x100000000000000000ec5439d70e896a7\n0x100000000000000002c3ed32846006d89\n0x100000000000000006a179ec97e7c7eab\n0x44d15f353c32dd31e019ec66\n0xb606fff99fd27e55aaac4a45\n0x2a95ae7897068a7\n0x0\n0x78801bfa049de2b1bfed4c97\n0x2dda8658b7583f6e27598a65\n0x1849a69da376ce5b\n0x0\n0x10000000000000000a4ec0b9cf4c37417\n0x100000000000000009ae5b9f6145aead4\n0x100000000000000005eca037272c614af\n0x100000000000000003e6398c908983db5\n0x8554f6b79c38c1b4509fc483\n0x53cfe6b8d6514643a01f3627\n0x22576bcf1631d3e6\n0x0\n0x4b8604b7ef00944ffbcf9a25\n0x51997a6baf560abba5ddd864\n0x12b88f73abc34885\n0x0\n0x413a7e01e10eaffb\n0x4a221f216398d075\n0x3e015452396564fe\n0x4f94659bfd3db898\n0x4a06edf545a3d36ddc1eca5e\n0x84224aff14266fde1fa88c5\n0x2a9bf8dd0c1fc25a\n0x0\n0xdc3de8d221e422a28bdbf0af\n0xf4148c8ef1a60c297a33dbbe\n0x21deefa5c73bfd20\n0x0\n0x31dbf2077f8aeb96\n0x100000000000000001f907d98d8edfdc5\n0x100000000000000002907a8c37e53a7ad\n0x1000000000000000082a77efe46ac5268\n0xe5539178ea703868515eea46\n0xc9286ece1bbcc045bdf39342\n0x2d1a33f14d36e98\n0x0\n0xc861a59d22ca08cf9d55bb7b\n0xf369d236a0fbe56621dd6e9f\n0xe6b9676b5265928\n0x0\n0x5bbf8e01d35a133d\n0x61c4e3862de56f24\n0x8e82c7cea6792f0\n0x62d66e48158d047\n0xbec4c892efc37fc594a2fcb5\n0xe215cef922243f221256db5a\n0x1aa7f063ccaf7d34\n0x0\n0x74197b3943f1e44278dd97d0\n0x52355f6c543ee7afdb09fbc6\n0x19f8517eed05ab99\n0x0\n0x1000000000000000057290579ac571901\n0x14d4089af6832713\n0x100000000000000004bcb7673ed293ad5\n0x100000000000000001649c2f12605f940\n0x507866b5811ca099c6475493\n0xf185907c52a89070c9ecdc4b\n0x872320907fbfe90\n0x0\n0xe0a09cd10116950fb57c07e4\n0xe12fa4ee8cf44262904c2a0f\n0x244c5fec38069dd4\n0x0\n0x100000000000000005a9b2185cd4d3491\n0x7dfde8f555ca496\n0x300af0a04ea07505\n0x1000000000000000067489360f4cd12f0\n0x450b1e0c9cc3f16397cc0bc3\n0x7043d74bdad1ed03599ae00f\n0x13fe8195545ff4f4\n0x0\n0xf41c08591d0399156cabf0f\n0x4bd8a4ef70f00b09045ed957\n0x14b828f5c7828672\n0x0\n0x1000000000000000083b7abe087bbb671\n0x13e526fc00cbe7f\n0x3e428aaaf0282cd3\n0x6df61d148f287c48\n0x5da20b78e4834ca6ea0f22da\n0x968a03c12fd42f73d4faad7\n0x246bcffb9190b707\n0x0\n0x212a17140ca40b3e2632208f\n0x990a567169dc4a4fe76da8b7\n0x2a1b975b6db63a50\n0x0\n0x100000000000000008293606955aceaf6\n0x100000000000000003b59c577cf828f86\n0x3ec1dd3c42ea562e\n0x100000000000000003d354137fbed93bd\n0x2cb53b1d011b68a2116792b1\n0x565e8fa7ba688505c842d21a\n0x232483f22eadc859\n0x0\n0x968f60de8171bde5601d2786\n0xfa8ae87a0ca736f86318c1c5\n0x3f4fd42e29d5c7b\n0x0\n0x860789caab32c4b7\n0x47a0318ec30831b3\n0x68683c97aa3325a0\n0x15240ab05c644282\n0x35f2e4b3d45348763ad4d187\n0x3c08e4d805d9e33b42311831\n0x4827bf2603dcca3\n0x0\n0xe6cb0747de3eb85a8816d17\n0x8afb0db09c93bd0d19e3afba\n0x5f6c94660d99f88\n0x0\n0x10000000000000000a7b76b6ae10727fc\n0x1000000000000000061fc505ebd3daa28\n0x100000000000000004eeb3886db151350\n0x100000000000000002881ad65a1a28295\n0xbd9f0b5f49f03a7916c7cdec\n0xd9907c654e6d32b8fdc9865c\n0x9aab662c7ca153e\n0x0\n0x1bc88ebba14c7bdcc514ef2e\n0x5222da2e5bc31fca80720b01\n0x829ea7f13a4e647\n0x0\n0x14aacef3f9f0f2e8\n0x6ff2c7117142b0b\n0xbda739e452d693d3\n0x54467e2ec395b0e0\n0xead68d76aa7105bed8fcbc33\n0x3ec39873154746cf9145b438\n0x2e334c969486be9a\n0x0\n0xbc6927337f023991c020c789\n0x62ee8bda185cd35deb9440f7\n0x221ad5cfe58fb0f3\n0x0\n0x11577c9aeb19349\n0xb5e28a3b2c8d3fb\n0x10000000000000000389cc4b15323020f\n0x10000000000000000918e1652b3ae7d90\n0x57bf224bdb30873084939772\n0x7286ee973ff3d1a55b78f2df\n0xc018a8036d0ee7c\n0x0\n0x1da4e68e808694f3645413f7\n0x48595d6d631b33f45609bbc4\n0xded5db78f2d0648\n0x0\n0x56275458d82c498c\n0xa6ce78e83e06274e\n0x571454dbb3044e0c\n0x61b0c530e28c2e9\n0xb2c21f9249792f5ef3fe6b83\n0xef05326f1e0a8b3cefd3a275\n0x3e5b4ed142e8c81\n0xbd512bad4f41c8e92708c60e\n0x4f8d704e36dceb51bdee08f0\n0x80875b9a39b0926\n0xb4d5c5ae96a85cd149f365bc\n0xfb41cc15f9dfd5880a4ba7f4\n0x104b262b105abb0c\n0xba7f7e15d2ad4a16c15f9d8\n0xdeb7bb9fc37ff453a880979\n0xf0128e20b78eb\n0xcf79d0e5ffb360ffa1b88c29\n0xe3e88ce4b79c6f7f57aadbab\n0x1a907efb9ae3f22c\n0xfbee0ba3da98d83f16ebce90\n0xa88250e893014ea4969577bd\n0x3005c043320c5e62\n0x97b920c832f015c1786d1bc5\n0xfbf991be78b7bfbf08459ffa\n0x1cd307183fb0cbfa\n0x5a593880de05b8a83010932d\n0x54dedd3a88f61dfe48b0bc98\n0x2474371b5da4852c\n0x83edc880b2d9fb2b09f58a56\n0xad840a4f51d9549d2c1e2c72\n0x6266fd6e8602172\n0xaebe96160273b732faef9e5d\n0xa12950844e0391104a1b666a\n0xea66e5a4f0a36a3\n0xadd2099e33a23656fc338f80\n0xe7019de0a7fd4eacc7ec7f10\n0x7e169d6a0f00b4c\n0xdedaa5489c9b108d4e0b5a0d\n0x2d182674659f1ef653283346\n0x156e404245235fd0\n0xc5b64a27de3111a93db5baf9\n0x6150fc390c535a3033bfc528\n0x2ec5b829dd0f5420\n0x75a7bc1038267006d6b4b714\n0x3e4ddee64aa6ae808fb93665\n0x1e0127f0fc8c1c50\n0x1b574152b510d0027b9e5406\n0xa40bda69aec577ce7802efd3\n0x28aa5c8f141f0b40\n0xf6bb720ce3480edd33a2d35f\n0xabc8bba9a02b068910241a79\n0x15e391b1debec606\n0xd8fdcf6fdfeb03afe8d20a5d\n0xd872d1efe88578cb776f0c9c\n0x2ffdede895ca2c32\n0x36e91aec4ac6a1a215838de1\n0xfaa65e4d2aae7e49357ad870\n0x27220fed558c0a75\n0xa7e892011aacd816d84a08ed\n0x5bc7c4f7bb553b7e0463d078\n0x2dab20ad930562f2\n0x68cf4df49eb94b16adcf31cc\n0xb626aa0dc31e27db6b6ad51\n0x2c70f33b1fa6023c\n0x38f9912dc6714df4c2f94ed6\n0xb9de3f788faced971d063450\n0x949af2e8f6c5c8a\n0x410a14277259c803f624a771\n0x4d5364ce2bb9574855d6cd4e\n0x248db74be94150f2\n0xb1824487d8b1a3ec3abcc25e\n0xa770953f1147432a910f4802\n0x33769fae77fbdc\n0x1be3bd7a5fbbf30a7e494aa2\n0x6993a0d02e973c322a17d4ef\n0x29632aa18d41dd11\n0x0\n0x0\n0x0\n0xc2778d80388a54eae80e565b\n0xf25dc130d86b34cb0fbe750e\n0x2d47bdc1ad79a2d8\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0xa228aa43fdb7f215226ece12\n0x22463bd8b6519b59af036109\n0x10bd041a04b54229\n0x0\n0x0\n0x0\n0x22\n0x6b8f9fb2b5d3eb6dae090e14\n0x8a74b6a9517551aacf6a5591\n0x2304b5c2e99ea1cc\n0xaa9fda7beb896f57d28fd4cf\n0xfbf08f217efc4dc69c3ab0e6\n0x19d88f95ac2690fd\n0x59f98d75787c1257d71a627a\n0xb744cb70e0b6464234e73632\n0x32eda9e246c8565\n0x80b188243b104c9011c97cc2\n0x9688a0f84394af4a7e49ddc2\n0xf8408e0c5e58aa6\n0xf74ffaa34a12ce24bcdfb8e1\n0xf0e66ff110a307fd7d8ba03a\n0x35ce4a705b86c1e\n0x5a0afd2c14c328c5e6906700\n0xd8681f6baa0a5ddd76b94c0\n0x18325cadcf67dc69\n0x2be9577d2bc9bf68ca516019\n0xa337c865234891e5fa77fd6\n0x23961fda95843468\n0xb0bf102ae094554a9fe35fd2\n0xe06641d1edcfeeac6a12d926\n0x1930c7b29038af48\n0xc2c04bcf86f036c023a84bb3\n0xa29bb67cd459b31ebb4924cf\n0x2b45fd7faa7255d\n0x6b461d195fee2bd387131b8c\n0x345a71848021024e217a26fe\n0x16b44b262ae536a3\n0x94662f69e6d58e98988fb758\n0xe5b289a69683ef0103fad76a\n0x186a12232454e082\n0x5092014dca413af352af11d7\n0xae3b66499b5ab508c0299e81\n0x2ff5e033e7c787ed\n0xcf8d5ea7f67f449f5b4edab7\n0x53453a38455535dabc9fd932\n0x147dbf3373fbbe2c\n0x48cc8c79f5abbc0e3c69cc56\n0xc89590f84c7bbc8b9de4ff3a\n0x2dad62f88c881c11\n0x67c24808c26a99dbaa2c1f10\n0xfc1effaaf9d15247bd00c285\n0x22001e8276ce6e08\n0xd073d4dc2757b56ab992475d\n0xa41af060be8742f044570a9e\n0x2fa9a62acf2874f\n0x51ddee517f5cb237696c8f42\n0x7fd4a364a038045a121f1573\n0x1bbd1d623393d6d8\n0xfc170a7b41bfd26c3a7adfaf\n0xccd6841db127c41b00e61116\n0x2f5708f83d3c7fe3\n0xd2133a295b9d8e531d5775d2\n0xf2d35303b2b489f7fddba246\n0x1d10dd7a0d0a43d7\n0xd287013627e376de007c0507\n0xb4df935d960b159de305f30\n0x18142fd02a7a19b\n0xda503c530f7921f52b632f71\n0xe7a2d12eb9063a0b8b78c444\n0xe6106a1c9a572e3\n0xadbc73228396ede89466e96f\n0x3ad88e06d0743d8208355b9b\n0x293174e28d4a6724\n0x7120226654f964431f3a27ab\n0x77e185c4bc10b4e99fc2469d\n0x252a3e31bdf3de51\n0xe15d19708a420ba1fd8f3dfc\n0xbb37a03fa481682c1c5a3077\n0x2a95b420a4331f24\n0x33cd6c048e62f9db24242bfc\n0xbac78949cea4a26b8fc25d59\n0x131d2fc487914470\n0x457926c415a60d5fcd7c31d3\n0x49fbb3c3c0bf22fc1adf22c7\n0x2942ffe038622e22\n0x84dad997dc478c2ea6ece39a\n0x33e1a89641536a51ad9407ad\n0x2277a47760cc016e\n0x66b3293599d6c64ba81ee4fe\n0x128151ed7703770a7f0de72f\n0x20c5a2865e2ef49c\n0xc6d69d0bf1f8878f6c931ee1\n0xa54badec75d1e1983c07c867\n0x1eb84d7d85a2f655\n0x6e286c2a3eff79391c45c62e\n0x5a3e04ed66e84e562147cade\n0x2ade1f4077ccfa8a\n0x79495719d378e3e1485c7ee7\n0x6da4118a0cc00f40d1bf22d\n0x16c7e1fd6e4abd01\n0x84476c15bac150b9bfdff977\n0x9f5dbd1978a902b359692a69\n0x2a338b7b584e3614\n0x4aa1a3229d994cd7b9898525\n0x91fc93e08fd8d14d70553693\n0x2f6119c438eac066\n0xfd3011a101e45502571a6981\n0x8cd2e7c1897e3c6b36fcef55\n0x150fec39e1ebd8b\n0xc6aff42672ab28ac0d48c22d\n0x8e1147e4224fe345dd8869cd\n0x3b793b5335db3d8\n0xed282cac2f16506f63be59cb\n0x6c93b2bcbf0c2d21f58ba58a\n0x3028b100944e448\n0x91f2a85e86fa258afde63912\n0xc33b5abfa9b899907339b46d\n0x575d1b1c5602a8\n0xf39ab2160cc9df43507127b\n0x5f431da11cca470c6b69f944\n0x2e843cf58f885e21\n0xd7297395e3c5ebdf69685c8\n0x1766d65d3fc724f17d24f0d4\n0x201f557f6bb83109\n0x4954485a2901a3a45406bfed\n0x6e8e28ad78fdfcf1fda6c4d8\n0x1540565dac6be4cd\n0xa5fea732c7db07fda2f18376\n0x61b23a920084968cc854660d\n0x232c9864b71c01c9\n0x62c02788af3cbe5f7303b41e\n0xaab3fbcc228c9021b565ff5c\n0x1493516497564fd1\n0x3d742ec024f2b3e8218d5a08\n0x2f4b788a9178f8dcf557b050\n0x1ec001bd37cfa372\n0xbec36feff19b889e35629373\n0x415bc07db3d223891a03adc2\n0xd2fe15b50704639\n0xab41627e9d1d0caaf86bc60a\n0xd9a9778c86dc7c441a3918eb\n0x538e974f6f58f48\n0x18285b6cc9fa1fb53d74d9f0\n0x9a43ef6aa107b9339171ecac\n0x10e8621421715486\n0x79c7f7fbd6e59557095821f5\n0xbec7ca4a941f0de1d9ff465b\n0xd64ef6be87ab5f7\n0x3ebdf3cafac1c20887255663\n0xff192c62d42c3502a09221ab\n0x2f412ae1d99f57fe\n0xcf449d269daa152efc1418d0\n0xc06727873d75f97c88895ada\n0x18d8e062c531077c\n0xb374a2b00512bba954d6ffb3\n0x71e930c9a940d5bc428b580\n0x25bc92893763a0c8\n0x5809a4a55f5c045b74aa96b0\n0xe7a38b85ecc453653c4c8b64\n0x21e6c6d27595c10e\n0xe36c3cdc58ca3c5e5f692a5\n0xf108ec35546e44fc9da58452\n0x14f3b91747419307\n0x4c9c315b284127d2f149d7db\n0x2f97cfce5f06c1b8a41f822d\n0x2305be5d3de20665\n0xc864f57352b25f7cb615c19b\n0xa35fe3a980404beb22239d20\n0x1159956f46618d3c\n0x7546609bb56a31673da71452\n0x6adf2a514886bb38a1c7e34e\n0x1d6ad0c9f7faeb79\n0x4f2a5152dd80b3b7eb68e4d8\n0x2bb4a2ee46ee7b0c006506d3\n0x296e98a5c07cb43f\n0x3cd6c4b9bd3c83cbca21f908\n0x9bd89ba0771be347fa153e8c\n0x2adbc5fcbb77055e\n0x2e260903cc6c16e133be22cc\n0xed92cb3f7ef5c48d037f02ca\n0xf5c3d57a951a2ea\n0xd7fbf99f1e22761880ae7ec7\n0x3f640aa5c3daf3cb40522ccb\n0x219333ab4485c51f\n0x9c94e0ecab4b98879bf1bc27\n0x83c8ae19285b7031ceac467d\n0x570ef6c0b170c0\n0x38d3da2acc27c448bae0ba10\n0x6864bafeaafad3dde60296bb\n0x24b7e86b97adec2f\n0xabb216c9f90586650a55542c\n0x8ec170fd6320d8b6ac005005\n0x204c8cb4340bd341\n0xed65ffe87381e0796df67234\n0x7b0693a8c71b858fa0b644cb\n0xc34e9384a2b444e\n0x284c4b9dc2bfc428af598f12\n0xd3e2182e0ccf87ffcf7a3cb9\n0x1da46448fe8d337a\n0xc180029d10dfaaf53d9649e0\n0xc6da3e45b72cba0a843b398f\n0x95444afce745f3\n0xcf18e69aeb49d2e530202946\n0x29ae172474a18901e30af8cc\n0x1a86dd050739f937\n0xd48afd77452fc42962167a4e\n0x22b44e12869fa928279a1d1f\n0x2d20cf7bab50df59\n0x73b786c73879024dd3e3c07a\n0xb58cef0d7a750c5b1e15d4f8\n0x1eb8b9695926fde4\n0x30268108cacaa5555cfc62e3\n0x772d33ff7eb296a6967eaf67\n0x3697ebf9a7d5768\n0x7f83c9af846cc10c40d1b5ff\n0x72badebba1c5123ce1b44595\n0x11036cbecf48335\n0xd323f4e49eb496d98b600860\n0x48b4802e5a3d222ca8e5beb3\n0x20245ceee8740c84\n0xca65fc878b8992014992b727\n0xa69cf0132d64bdd3bb79006b\n0x220c3374665b5069\n0xc4c4fb6ecb65fb9dd3538964\n0x668109faf72f502af3422f5\n0x1e8619d8fec2575b\n0x2ec6cee61010227a9d25c1ef\n0x72bdec03c7fb15de4ca0e254\n0x1d38c5a0cb79fc2e\n0x51a278a92d1e876f9b8e73dd\n0x6f38c9eac0cf4c37bfe6d37b\n0x2f8883b3e54ae34b\n0xee0ae46b6239c26fad86d524\n0xa6a7a69900dc01566a1837ca\n0xba96b873371ab8a\n0x3048eca2963b5a7c1193a976\n0xe8737d3238cd508d8010c9c4\n0x2938d6b04764315b\n0xf7843f02bd3ac1c54fe3fb40\n0xbeb612d555054fb7e25a3620\n0x2f75968d2262f435\n0xb22262b15979e0a27b5eeb\n0x311ccabfb76fd82fd982c471\n0x2163070e62af2d69\n0xd8c9800dc7ab8dc226088b98\n0x3f6e8dd35ae5260a7c061852\n0x1253a61b3c3c119b\n0xf6319193455e0e1e23b54e5e\n0x7549afc0ce836aadc3c463be\n0x12dada2aa94089d7\n0x6aaf9732074965c64c6a509c\n0xbcfdaa834300d9b9c1885651\n0x2a4f5592c09dc5c8\n0xaa7d39802f183849bf9d9a53\n0xb0eb2f09a70c2e8220534350\n0x1b8f4ef48f963198\n0x28cc0fc57fe0cc3563877801\n0x561bab03a8555fdf4131f5f9\n0x42128c9075d9932\n0x44aeca4c6429720f65fd00e0\n0xd51338655c67c8f8b63abce\n0xd0d29a09a6b84ae\n0x6499a0357ea4ef1dafbfeff3\n0x69ca31baf733dea5343699e1\n0x1c89819af636b77a\n0xab73e23b8973b51dd81acbc1\n0xe638513138a4372a80d76810\n0x283d6ca2ae7c9c6a\n0xda14eefa10629e1e3183cf73\n0xd3a03cc155bbe96744c6a70\n0x247369122a1d210f\n0x112f6d8c0db738bebb1f3c9a\n0x5b696d2985311ea5a0a84eca\n0x32786d42382432d\n0x541666c1fba0d2953a475412\n0x708a12d3e5d52b230fdae6ff\n0x14e45006498f42fb\n0xd14e0f2461dfe602afe36da3\n0xc3587cf8689513c25a2c2f33\n0x1f2cc007bf2d1b54\n0x6a985260c027a3552528e09a\n0x6bff0b90d350d5330ce9cbc4\n0xe5b4b707ae9d036\n0x39debd80832d94d36ad01d65\n0xa83918ae9acf91e496ac248e\n0x1d58b14cdbccb4e7\n0xee29f4e81e407e8c4c4227b4\n0x457afd7c8bb5b6d51f9f7df4\n0x2a722c33560488fa\n0x9961eafd4228cea03fd41276\n0x4183adddc4f97a2a398962ed\n0x555f1bb664bf421\n0xed106461eb8a81ad96489d26\n0x4e5cfeaa0775ae75cb8184b\n0x1c4597a7bd75fe1d\n0xb873d7f5ce49f3f2523c1133\n0x64c7ffe813f7ab8f6991dc16\n0x1952365f787327b\n0x6f5fe35d88b8330d3921d689\n0xc32db8db7fe8a6ec961175e9\n0x2ef9ecaa424d2978\n0xa7db1cdbbf04e3aae2b6ccef\n0x61d12c61507feebc60b16670\n0x2b2dbb3ca6f4ad5d\n0x2e2106bf5081e5ce5e952bae\n0x95da1c62962527fc98ab2d35\n0xf8f9da05b8c46b2\n0x5e4e19f549098c943d79b580\n0xa3aff659ccf6b35dfff97404\n0x2c505b1859666bab\n0xce95d8cc888a6432575e7c0d\n0x1c3fcb4046df4e36c9575ecc\n0xf62981008a4676a\n0x80b2d5b36b2400f9e334701a\n0x6cc60c33b364b5d82590a2ea\n0x293f10beb4a23857\n0x7f001ea5e0fe2add9648e11b\n0x9e4b36bcee65c051a3aa3262\n0x23155cf3684f2d0a\n0x48ff988feca8aab45ab5e69b\n0xc86966a410626bbe6cd38671\n0x148b7babcefb7369\n0x224bec7bd01fe2e0e5e2b37\n0xd736bab6f18b67efc348ef00\n0x83d27b396c41934\n0x1b978fb44c2fb1b923a6fe2c\n0x6379e9b788ffd8f57b211836\n0x166502aa58f8424b\n0x33a2d1fbd7b612285909d95c\n0xd8073621e1b66466e9e3d976\n0xb95d22dd8762e19\n0xd6d47a4a52f525c4ed9f6371\n0x15a5fcf8242f3d8822f4c5a0\n0x18f113d3a8a92d66\n0xdd2997b15199196875aaeaf0\n0x7b460d66270374a24905ff4c\n0x20c719baf550dfd7\n0x2623b688f43af63aa680cdcf\n0x97a25b089ed4024006166b49\n0x1ff71ec131448b3\n0x69f4719223919101cfc71f9e\n0xca276aed20592213391687c1\n0x1cf15d771a1e269b\n0xc6ca893fb470e4c8db94cded\n0xc40686529c17a747dd5c52f2\n0x19bba9a83124532e\n0xaf36cb3ad81b4a68f3077ee4\n0xd970a8558908f0e209e9f112\n0x1b3d6c2f21713691\n0x1d62d185b1933db2fdaeea5d\n0xe964ab54b0c6ba613339af69\n0x248f507d295e8e52\n0x28f6ed863564379a2465a495\n0xc27a751c3efd1a9cf6f295a6\n0x7487e714ea5f886\n0x34c7934b3b12e613b787cb60\n0xf0915cc0f9907576bd76a4d4\n0x108bf84bfe7b2734\n0xd4ba2f4c32cd18e950791001\n0xb1fa7d7793fa8d5edcc4f157\n0x1fd4b6cd97c00e37\n0x36ff05c88b6b38963b2eb49d\n0xf2359cd01168a320cc740c28\n0x11e27297fa06ef59\n0xdff4475d8bd903111a655e68\n0xca5142084e2576871f7c5e3\n0x1f35176e83bf0441\n0x98777538d88948dcb6bee06a\n0xb0d4e2ea45cca5a825c5188b\n0xd1c275e12e93c7\n0x33a7490cdcee4228533003d2\n0xbc70393bffdfdc3ddcf4445a\n0x2508908f2493ce8a\n0x975f5cac63c0599ba19175eb\n0x2a4b3ec6d4d6f29844ac1500\n0xe0dec2f3447324a\n0x2f5f4823b2ec105a69946081\n0xc0326d0b2962fdd742ea1f74\n0xbd5be75be1b12cf\n0x9c9767bd4be806b2277b85b1\n0xf75fb8b9908723ec4f8dd377\n0x2a2a30ab78df4493\n0x670ef71339c73356afa81499\n0x24fc4245f98bf911ed7cd5bc\n0x8791dd00532162c\n0x7f33c6c7447d94ac9fbe53fa\n0x37a7674330c42faea463995b\n0x19e35a1b2dcf6b0a\n0x9914f45ee66a3c3179212cad\n0x65ffd2e545dced88e0ba3c7b\n0xe8125e4ca79839a\n0x45d42e79f1a77e245d19f516\n0x193085f51d70d9db13fcd9b9\n0x2b5a3620219cbe3d\n0xdf09b6c1e6de6ff287e18c5a\n0x811a0e8203e624558127fc84\n0x16631b7af7450cd9\n0x3a20d51f5a3f7b3688a8cd79\n0x21ab605fadac620828b0e641\n0x1a65bf78a0e48a22\n0x94ada974392c51722939a194\n0x54b18a060d99928beb69a093\n0x4dd061483fe9410\n0x5a8f529840f0b485f4a7b567\n0x4afd3c2c4feb304600c48049\n0x1da177beffebd74f\n0xd945fc90deefb30352d333d3\n0xd65c1d8e2041072e5098c4b0\n0x7f89b66b2b2416c\n0xf992e7f45fbe736608ff8042\n0xbfc8a452fe87aee149fffc98\n0x2fe66667cf446002\n0x79aa4acf022b3d5fdfcba8b3\n0xc2f2ee0f45fe70951c8192bd\n0x23030c14c73861e5\n0x3cbf681829f0d23d0922bd05\n0xf7bf1a9d03c99ac69f1b5b2b\n0x20c68b759e267caa\n0x92bdf0e898140fdbff5de26d\n0xe2f7a2144693c0280d2d200\n0x3f425aaf2e6c9f7\n0x1f7d4b7dea932042413a16e8\n0x9dad7bcad231ad36a6da855f\n0x1ec749f424d63570\n0x8f0381b4e78854419d5a813e\n0x631286788dc670b8c49294de\n0x6f49813f5ae3e1a\n0xae7188ed88fd0f75c0d9b8bd\n0x7ae7be9f61145abc32290ce8\n0x31d33c4fdcc2fa5\n0x333424db3a502986e487ea04\n0x16ec84242ad8e35fc2819e40\n0x305f30511bfa09f5\n0x1dd245f50553dea0f7ae5acf\n0xe4b1dc320f7d6b0f218165a5\n0x1a45f93b5929bf9b\n0x2190c6443901071c3b3aec13\n0xf4114064c6f3982be3ab2589\n0x96e224ad8ecff53\n0xc33494e5203b160ca2d5ea61\n0xeb2cccd886c99eb5c228d66a\n0x25ee7bd4fb0d3a3d\n0x5ea04f1a4a7c2ef6b110f7ed\n0x7596ea6e00a4721d8b896f78\n0x1916d039a1215153\n0xb7a867c67789761a8eb99125\n0xe099a9af768b9f9290a7b896\n0x178a673f611abf74\n0x3a298a9f12e9428ce01f8af\n0x803c6ea771af3aa1f87e28ab\n0x20d9f01205b1aad4\n0xc9e5fcf22794ff15e5f94532\n0x2c921dd0bbafb00a744869c5\n0x1a2a2201cef5078b\n0xdc71aa4b1274ba1dfd9b0c21\n0x5539098f7023217af7935e93\n0x2145fc2bde968661\n0x70587179d1efdc6ed725da4a\n0xaaa2e00b2236486914afe065\n0x11c4d88dbd53bd30\n0x3e1ba5887c3b1641bc452fd9\n0x213d21c085fb711f6f680676\n0x29ed3fbe044ca40b\n0x8e2dcea91c1bff6fdbec42bf\n0xc635c99523c2a85cd1a486d5\n0x179c0639f3541920\n0x2a637bf21cc36f679bfab2b1\n0x601eb325072c9dc6177cdb5d\n0x20b521b588872208\n0xb3d61cd3303acb921faaace5\n0xf86214a8ff6ed3b19ca0a92e\n0x2ea1063f265db1da\n0x65501a7a5868f7454303d257\n0x25bf1f23f2406336a7daef51\n0x285f5ddffb5d22ad\n0xabc1671d471ae3df3f16a0bb\n0xa33cad079d9447465eda5420\n0x2f8081af62672f76\n0x4a962b6446aa36e077fb4ba\n0x795c837601461fc720be7dc7\n0x208ea7102ea18d10\n0xe4f6bce8a88ebf1ab4d7c4a2\n0xa31425890f224e7141e226f3\n0x20a7aaa0ba0ca015\n0x164d2f8492eec0dbb852a7cd\n0x3b1fd799f778cc197c5b0abe\n0x2ac76cce781dce6b\n0xd74f47298953032c4f6f6b72\n0x77edfa8c4e6d3704a758b641\n0x16a7dc2f776e300e\n0xb890980cfadb8dc83acc550a\n0xb8ff4fe55855f3ea769f980f\n0x23b54907fa09c632\n0x8bba65534e41d9704f82c49e\n0xcd4a11720f504ced22c49822\n0x590c9cf471856ae\n0x4fb159e61003110719a15da7\n0x336b66c33fa184e8141d0f46\n0x591fbad11f67096\n0x2a6fc5f4c998a2ab0d556896\n0x3ce44d1dbdc0d1d4263736ce\n0x1b338ba52db11e0d\n0x52239d8a752da36c629d57b\n0xdddabeef14407c7d5036d4a\n0x197ea4cb135badf4\n0x106d0f29fd6d4ac9ab83e811\n0xd8707a965abe82f2c512a4fa\n0x2388e04181f30f\n0x150b534ac6e7d0f694178eb2\n0x37133edcd19f9c3188657a17\n0x241f3c7256f4270\n0xa19a7310fab33519231a2f9\n0x99afe6e3160f59c2f37c69c5\n0x156ba8d687afcda2\n0x1110f16c94a29358889c6ef2\n0xcfb232f163953c0a512b687a\n0x11beef03d76b6834\n0x91f89912b698a0b4a18501c5\n0xd16eecbe5bec42b1018f6cf1\n0xfdd0034c9b263ba\n0x94aa3c4dfd0a290d78b6d7a4\n0xa58730076bb4b3a85f89010c\n0x2c653ad2eb121751\n0xc8815a1359e1bc15a3e3b84b\n0xef5353dc904727a6d7afb082\n0xbff53a4c07648\n0x1d9f5d84a4d7a689249ac37d\n0x6b5d3f46450c98f3992cd8d4\n0x1828af2dd4e18060\n0x89842e3ab39e5dff7b952696\n0x4d96820a12dfc3ff4847003b\n0x14d5633d5335b704\n0x5ea4bb391262bc6b2ad7417\n0xadb6386a7433f26eed767204\n0xf6396e78d6b389b\n0x78adfb01c24083563b5d021c\n0x8268536cf6f0289404b892fe\n0x10873e4f75e44098\n0x5a079b74041503a143259239\n0xb163b9256366b5cea238a91a\n0x2cc05607202b64a3\n0xa533055159b0bc197699c2b8\n0x8956ef05af670b375fae471e\n0x74c5b4a391e4953\n0x973a776b9b8aadab89fd8bb0\n0x47bf37a239ce3e5db8e33c72\n0x1ae856a65d9f97d6\n0xdfaaf532a05541a2c26a18c5\n0x2dc20e5284b636ee0fcad3db\n0x11f24bbaf6a339f0\n0x58c91f8b5b1626d27bdfa34\n0x5f911d34ff2e330333a10283\n0x20cb11c652f8d7a0\n0xc9dff7bb1d6e1efb89e0a03d\n0xe2c0bc4e6f64f4290241d526\n0x276f9b1c3304be56\n0xef47423dd0879966c4edc5e8\n0xdf5c9ecda9ab8c0b9191d690\n0x1d81a8d619002b1c\n0x5e12eebd0ae3595212dad9b\n0x63b2336882ec3eb241e90181\n0x2152055056dc98b4\n0xa0e812be78250c7d28bfb292\n0xfce8bca4e00989ef245661ae\n0x876b81d2a11d85a\n0x7dcdacbf86432b6360b50589\n0x29a479c6a57a48923285d7da\n0x10d650b43885f6f0\n0x8d6d55893174ed787eb6bf9c\n0x24306eadf917c4ea7c968b7f\n0x12cf4b38a144ec32\n0x7cf7da115815c2aba1c5e409\n0x57661354189331dd068334e4\n0x17799ab0c247d767\n0x1e8712da4de8ca39c3b55e21\n0x64fc115963d6a7144234216\n0x771648f124091a4\n0x4db19633abd89d6296fa777a\n0x1cec501d2db4c34bd9d5baef\n0xfb32f60a39d5339\n0x6286430214c1226b19d3ace8\n0x36b41e8e9b27e6cbcd563294\n0x24f7d80b024919e4\n0x4011bee1d0b0b5aafd2e9cbc\n0x2c611af6f2971e0c4d238a66\n0x2c27ebad52699c69\n0x8ead81ac6c9bebd08fa8a76b\n0x2238ba1d0b2358e6ccde7627\n0x2400fb7de0aaeaa2\n0xb6955b2d96884238c6925d8b\n0x410cf50d0a1ab880ada0aa7b\n0x3c9855bc5fd9440\n0x4c6b07c389542eeb3a10724b\n0x6d9c8b84b83b766f4b03a240\n0x50b9bc07e4fa7ff\n0xda5bdb35b905f4843054be43\n0xb37b803a80d1a6eb298b962e\n0x107b8113021fa1f0\n0x377be21a1401b0bd72445b45\n0x6624e7dccf89388ebe0f9c05\n0x1fe2351a684741f9\n0xae80bcb71af29fbcdeee2141\n0x42dc924a64435e216feb4c08\n0x5629efef60c16b6\n0x8762243b813b27fc0eab4eed\n0x32ba18e074989a285a66d9ff\n0x2ffbefe492dbe6d7\n0xeb1e2cde83264e4af7e535c3\n0x3dd98a61bde5a28f02b55745\n0x23959093983e97dd\n0x8c76a2d75faddf46f86db5ba\n0x43c6ee46ab39173813c1e8a3\n0x1e8dceae53bdeb2d\n0x8d5ddd9c94e2d8e9bb7af5fd\n0x15a0ccaee530fa54ce06fec3\n0x477073004c76d55\n0x868030ff69e184b4087a9b5d\n0x4e2fec6096d9ef8e13bfef1a\n0x2ae3080cedd6985c\n0x5c675c5d59faa6bc760b089d\n0x38fbd9a5fd0c2b892e71106d\n0x36279af5903226f\n0xe4f57dc2a5941cce267495a7\n0xd51fd2dd65d1aba1f7599639\n0x10162e2ea26c4bb1\n0x200a7736f395cf2eb751ca38\n0x3f7dc99620a2a981eb6d7a80\n0x862d48d12b6ec13\n0x39df494f61db4de450d62e97\n0x4b86d42f68cb0347aeffdf7c\n0x1ac075560872e526\n0x6df131c840995d51a37927bd\n0xc883d747e0c0155af0698e16\n0xdbe047b3d9838ee\n0x246c4272e93f130442a9dfd2\n0x3109cf471b059f87d0732c1e\n0x1013a7dfcb967d1e\n0x43db6ff008db82481f6f41af\n0xaa09185713f8bc3dc1a8972a\n0xcedd60651a81f73\n0x751d6973ed6e7c2f4a20f655\n0x56d0ba43f6ce8231426ce7a3\n0x183164be89874bcf\n0x16dd6dc3cb627dc234ab123f\n0xca3170a44760d577d19a90df\n0x2d565a8bb54e179a\n0x70f7ffafe68be32e285c9ff\n0xa04938ffa0731f2b6e455aa\n0xa75bb250338b9f6\n0xa4f114ef5820ae6cbf6132e3\n0x2b581f5e1f33db0b3dfb9495\n0x2aa05a712c0fa262\n0xcad4ad278a78f32821cd6be5\n0x80564dde2462b8e9a665e72b\n0x9632b6bca6e5696\n0xf80661855070a4ec6f1e9179\n0x69d05e32ce4abfd82ad9c880\n0x123c4c4090a045c\n0x5eb4063d5cd3f74eedde583\n0x19c51ef33b289ef512da7931\n0x4d559d997dd82b7\n0xe7e5f8fae69b6187905ca51\n0x9afe347aff7554f6db7229eb\n0x1d2a245fe0acbeb9\n0x50fddf1c2b5cc143a3c6264\n0x54e3ec7ed5a557aaaaa6188a\n0x1f2ea9cec76a5851\n0xf19fa63931db904812309f58\n0x6377c970816a41c1ee0bb3ba\n0x1bfbf287ad85dad5\n0x8375d1b636cb52ce3d80170f\n0xc1b493c422fe2b567aab901e\n0xc218c74795669e6\n0x275430df1a8f66feecfd68d4\n0x791ec851d9487012501d44d8\n0x78b58827d01f8c\n0x710a92675815be14cc5fadde\n0x886d823d4912e400227677ae\n0x2fb59032c5ecac05\n0x705c181ea6533814a8136ea5\n0x82078be318fa4f269b245e14\n0x4b1bbe58607b081\n0xfea7aab5c91159508453513f\n0xf41f37e83d2511e99a4fcf45\n0x199762440f828e7f\n0x8a3ad64c2de19663df4498ea\n0x1e1d76f0cf82446b352c7b97\n0x46e0a67c147fda7\n0x610d300eb1368b99575a029e\n0xcb5f1af2e8f28d169c566162\n0x18fdfd2e9a02192d\n0xb95483db2631fa6b8bb35fca\n0x968cdf88acd9eaff9d75070f\n0x2987a18183b4ac6e\n0x348b1c4fa19ae9bb17711b1a\n0x7fc556d17b98f148bb7b92e0\n0x2523514e6edb13d7\n0xf4bb736b995ba7d906878b19\n0xb3b97023036e1d992a5e2301\n0x2b51e0d0afad0ade\n0x383b9de1b51d9b30548b5c66\n0x212db3c03299afedb2b85b07\n0x92af7fce4448c4a\n0xe5c71e463edc6bd729dbaf07\n0xf8689ef1b46317871426ba1c\n0x2ec7efc82ee4e8ea\n0x36418f4906002ec3ea904c74\n0xac5e87da60bd26902c8f7a3\n0x1db97170371e321c\n0x61c34b8dd7dfe0a77331adc3\n0xc899ae497fa22f64c9e21baf\n0x2e1ad39c371f7072\n0xc44a26510efa24c481818ae2\n0x2e19151df6095aa540251c6e\n0x1b4c2d2ead37ca00\n0x2b51e13a6c8c3d0fb4b4fadb\n0xa13ee77c3da473d36c4380a5\n0x2f39a1bedeb48bc4\n0xe0aaa2bef6db1104dcf8e3d5\n0x7a7ea74e2afdc2dda9e229be\n0x7cfc2aa184ee422\n0x67c1caaa7a8d3dd6547037b4\n0xaaa6837282b2cca22ee008b0\n0x2da12d4ae27e1abe\n0xf0b217da0c9ad62dff20ae2c\n0xae275a6cd9f1b4d51e3d83ef\n0x1d00f5e485d9b512\n0x95399ee52f8f532c725fc424\n0xf5d90b2a0e1856dd6b7e1391\n0x1c35a6e1d47d147e\n0x2fddca3131fd9afcce08d343\n0xec225f4963785f235ca1769d\n0x2c291b4f6eaed2b6\n0x266d4063c3f50d7ff00ddff9\n0x5b420b4102246c31cce27d63\n0x2fca061b4bc5df4e\n0x11897ca44a299a79883150df\n0xeabb48f80a99abc99ef4b4a6\n0x388a419a49a6b69\n0xc5e74704fec5b48924161f2e\n0x725b81a0e18a156922b1c852\n0x35d38f9a8fdc7d8\n0x5748a51e53ee21f883028c05\n0x2b648b48be5aae8d3e67d653\n0x220550d9e23253be\n0x33fbc397e029cd25164b05a7\n0x65acf5445d6780f2596cb61a\n0x2a2f7eec35f8dd90\n0x4ddfde3957ee6b4d9189c2cf\n0xdf3a58f53074125ba9ea7962\n0xbe1910c38930aec\n0x51f6d6c995e7750bee727c14\n0xac8953d2f80049e0cfff7223\n0x288d28857449ba88\n0x86de8ccde59bdae1fa8294b6\n0x52ebe4c712145cfec30f1a80\n0x113abbe956df6ccc\n0xf286f603db6c0beff139e8c5\n0xf5696fb0589b011d710881a3\n0x2b69a7d02d63956f\n0xea1e21d3d84acc050a0f3dd5\n0x52aa693880ebf78cdae5149a\n0x2594147532e1c60b\n0xffc16b18bc8a005aab89909d\n0x2ee8f50471bd6a1904c0fd4c\n0x1a66b64000ec41ff\n0x20db8535a8ba2b7518c366ea\n0x165efb2ab42f0356b3e2675e\n0x294d984ffcbe63a1\n0xc7f1eca19e3808bdaecc74d8\n0x1dd5e41ad5fd62b353e50ca9\n0x2cf73ae5ce0060b8\n0x580b4e94f2f16838b3e5c156\n0x2c019f1374e6441fe528ece4\n0x2387cd174a9cbfd4\n0x57f923f8e5917c4f524e59e7\n0x501afac0b6bf2f221feb9599\n0x121a74204433235a\n0xed00c2ff1b9b05081ba06667\n0x13b2916ddbd3ee146e623762\n0xf9c72762766d761\n0x44c860425a9f168eb58d0db2\n0xe99876a95334f186d0fcc7e9\n0x267e3bd14f7f14d3\n0x9a911450df6fedb03d95c449\n0x4fde5dd66c11fb7f009a0051\n0x2173103add5543ae\n0x46a8df7f8951ac72f9857809\n0xcf95852b9755b0910ccd6f9a\n0x53d34c8de47f314\n0x6b4fc956778cea0e2a76b51f\n0xb4550d5d265ad15fca268dd5\n0x2c74ed91d9ba099e\n0x741e5b2fd878820e8ac048e9\n0x67b73f67c3d8f8c38fc837d5\n0xf6ab3016587ef5\n0xe399b5983bc6601ff55dd8aa\n0x403b90ee7b1711649f606271\n0x11339ef9c5c07382\n0x8be4ebcbe73191655df1c452\n0x7bbe76a30ccbf6f0e8a2934c\n0x1d10ac07945e9c5a\n0xab3b4f5e1478f12e8316b903\n0x7b9d5dbef091626dc4bd81e\n0x1164b940079ba738\n0x5392e81f58375b41503706ed\n0x9f6c376a8e02b71b9d2f848e\n0x1c168ac9e1be84de\n0x90d202e36d4722b24129631d\n0x2f1ddf959e0b976f66a32b44\n0xfc637f2f344b5ef\n0xf8ec1c8728568953fe5b7a01\n0x92328ec0e0262ba3bf73ad87\n0x5d63d80465720d2\n0x6a978d4cc41a4e5e7e7c2fff\n0xe19f3383790847cadca717cf\n0x2a36aa3ebf306b99\n0x134001ecd5e5096c44e7f6f3\n0x33da84040eb5426cc88984d6\n0x185ebc77e0de8004\n0xf81399a7157c5c1e45d847e1\n0x51d14bc7c3de1d37fc785252\n0x80e1823c5bab7e2\n0xe6d96ad0750af3e0c78bf5f\n0xa78931e62254b1bb2fbe8cf8\n0xfa1b3dddef12533\n0x6d50d1ce4e76e3cda1438fb8\n0x80b80aff2f3b610fc427043a\n0x1e095309ab925a8f\n0x7e7ab14c04874c099481596f\n0x5067bce67d8e7a165afa13d2\n0x185d54c0120d2734\n0x9d2c11c6599c23c4896d9fc7\n0x22a9c8caa716bfe41d57663f\n0x1453d388d9cbb0ec\n0xd9ee359394c165f72dfd25d2\n0xe918edda98f83566580baad0\n0x292d020b454c5c98\n0x242dc74cac555346beea7607\n0xc282d1f1ee17fd3638f33fc5\n0x16b985bfd31f4cd2\n0xda773c3fae5a73c7c63ef37f\n0x73e8309daf349a824eabca93\n0x2d40c600f3e56878\n0xda775e7137d951f676b6622a\n0xd9744ad55aa3ddde3191305c\n0x12ade5543942e139\n0x748e61de7425ea9717359858\n0x8db5d6584e49701bc15b04b9\n0x11cc73959a314867\n0xcb273233b26e4ca536623142\n0xe9856f53918734acb4da963d\n0xf410f7ba129c173\n0x177603866886291f3c38fc0\n0xe3c1bbc9a87eff1d8fe636f6\n0x1771a27e70bcfe7f\n0x26ea2fa9527105107623112f\n0x34f919cfb6364f28348f949d\n0x2b1020aaa0fc2103\n0xe384f3d9f9e8dba84937f06d\n0xaef3e71878a7923aaaa0c046\n0x13698e82eb14f42a\n0x33a328f960e980d1be8ac6f9\n0x8854fd2a0a64440b41b7be29\n0x22ad52df0ef7b546\n0x3dd8490f4ab078d16483ddf\n0xc224515e7c1becc6fcd82d5f\n0xf394a9156e7ff3b\n0x4a6482741c503d2bf0c1779f\n0x278ecc75e3d3cfacbd337a9c\n0x2fcdb6d358ae149e\n0xba436b382351b59aa3b42e5d\n0xe2d4b4ed79bced7db65b185\n0x263d67c6d7e2ba24\n0x40494c8c91156505ee5cf5e9\n0xdd96d3d79aaaefddfd7e666c\n0xf452548023ec2d5\n0x16d034316a54eb758757f872\n0x41939a88b56132e960e0323a\n0x17f1fcfd8aa001c8\n0x720bda86859e92b952b8b27c\n0xfd26def236dc570c00e9ed38\n0x7d93545ee854ac1\n0x1b120942f2802764e67d8391\n0xf876d50995d2b1b2864b741a\n0x2d0f28e5f8240bca\n0xb3e9732a6bbc04b5038597c0\n0xcc7657d81db0a99a5711a959\n0xa9f90d6e2740926\n0x5e800c824bebb694b5a1a6c6\n0x26a9d5d94d068755ef970f0b\n0xe7e5ef00b7d608\n0x5a0d32831b8c685344642e15\n0xcdb34e42c13dd4afbd7db6d0\n0x2796b8a232350e93\n0x9eb81765fd9533a625b30648\n0x35e8e0a5e9f166016b29e6c\n0x2c894f01c9cbd096\n0x14aa05470f288f8abd05137b\n0x31dcad5d15d3dabb35c88eb\n0xb5785e691539bdf\n0xa8d4a6ec19003ce76926678\n0x8a62c1aa5556b0e7f5d503b7\n0x2cd28bdaebf0ac7d\n0xb7ac9dd5aed422547b1346b6\n0x6668cd63191b8e83054c60d4\n0x1da2cee0c0643b9b\n0x3569bca22a11e9e542069aea\n0xf61482f7b993aadaf83b1e38\n0x10e5801166fb3fb9\n0xe042cc9a4dbd033f9d9e92f5\n0x17780f2bf205bcb17694314c\n0x3d928bb645b658f\n0x39a960c4cacdad776ff60177\n0xf69f31bd2304066363098d6d\n0x23f9a9fddab270ff\n0xde000312f11dee0d0957b477\n0x3bdbe7c6d8a3fc7eb6e0b6d3\n0x2719acf883cccdc2\n0x8bfa17fe56c783e26ace362e\n0x2c9b4a8b24873cbadf49ec63\n0x724ef3837c9c5c6\n0xdc55956ef18c8c8fd38ca7a4\n0x98a17a15d878a4de6bf52dfc\n0x1dafcee201e24f3f\n0xce425da534ae1decf6d79cec\n0x1fa0a46bbda0c3cc5079db5a\n0x15eec1ac7d01b1a2\n0x150fa87781696d2d61de1622\n0xcebec91b917052debde2f286\n0xfff3479e3e5677e\n0x5e3ccfa58486f23ce9d81e38\n0xbc0c39d855774ce3544a8357\n0x1777e34640f1ecca\n0xd80b35f7a6bec59124356ed1\n0xfba295cfb02a8245d5d46f4b\n0x15acca2661b26fe7\n0xe31dc010901157503a79aec8\n0x21be2d21c3f3115044414e76\n0x22ee9b18d92c77be\n0x4555ecac6cfe3494084e3cc7\n0xe54d085599934d895bd6b73d\n0x2fa7d45e4a838c39\n0xc1b0911c0d20087af5e3721\n0x262d0dc2da1619d81fe56fe9\n0x12caff9276667069\n0x1dba195bd45878c724a4c359\n0x8f75e767a4103c8ed4f22e06\n0x82d854466d60b10\n0x942214e7cab052bbb1c6bcd4\n0xd031fb3ec30eac93e7327fc4\n0x302fd1ef0d852b97\n0x42d64a82e4372108e4df2b55\n0xf6141f1647c6971507ac4503\n0x49ffad1006dc181\n0xffc5675bba65c2a5848f25af\n0x3ca4dbbd382cb9aa9b1882f6\n0x2535578d528273a0\n0xb94cedeae6190ecb267ca2f\n0xbb870325c9a0348c5a4a489a\n0x8315ce219eda2c6\n0x28c3a3a88031af61db3dbb2\n0x1bdc49de8a52d56934aa0532\n0x100c5c56801ba842\n0x87884df223b47b62e9821ff3\n0xaff2b3242d78fae7e4c57884\n0x1fe5dcd03cddc472\n0xf867b004c9831e93d6ac71d8\n0xcecb013d10611c3c37ea0cdd\n0xb54df1943aff935\n0xd3819988754e2b9c6333c775\n0x234faa129a7f116d39316967\n0x23215a3a099cd45b\n0xe82174e4be38ecc0cf55ab0\n0xb97d1df44da8e016cc3de066\n0x12f2ef709a398276\n0x47dba0a71b7aef9af8ce4e17\n0xaad377c2a7a81efef27523a7\n0x2f4f7ca8ca1555f0\n0xb6141db3c673b0dafb318e7f\n0xb084a17c1f8de98de2bb9d8e\n0x18c6f246fc5805a\n0x1301b76872e42db00730dc7c\n0x929cdfbda9c3d862ded76608\n0x254cd181e425cd93\n0x5ecb7fd30ec60751cd59231f\n0x58c602f0f3349cd604b337cb\n0x61d292bff44a02\n0x95566a13a36cf640fcd84e66\n0x5e046fe853f7ac5b1360d144\n0x2bcc2c7ed47f76df\n0x3b6e339d1c327617f3838232\n0xb4f471704ed06925cbf758c2\n0x2199f1d0b634b2d2\n0x2db4aedaac8a2d9625064267\n0xdc26fac10f375f2dc01746e6\n0x123b2e9360850fc9\n0x9b377366b35b38461c1d9cb7\n0xe38d6a5cef222cb6c2399c3b\n0x1f58482120d1ba50\n0xa3ed2c9c46e37bf0110dd0ed\n0x85a623e4dabc26d92556fba8\n0x2aefb3454696a2a0\n0x1e8ed3981bbf70fb8851f7fa\n0x1f26d3061a0cc01dc15b80e6\n0x2e670d46641ed285\n0x935b5cb42c155185abfbb15d\n0xa445982d313fdc9d7a605bf3\n0x278a330a8be2f77e\n0x54d7df252398a6f153f8832b\n0x1150a2f11221c1df8867fa21\n0x26be737156e1c5f7\n0x245e53e0471964c1c97ccac4\n0x21a09d49a82b1352c4b1e1a\n0x21357907dca35d01\n0xf4c8e0e1af17cda403de61ae\n0x5749d8bb5996a9ec03798cf0\n0x158fb3eb5c58983d\n0x6e90c6085a0eff61ac56ff1f\n0x14b9b49aa60e40a9336333c5\n0x47679bcd1bf95de\n0xa8f05e511b7a6486d72b8b7\n0x6eea3b338f7e904c925d5917\n0x6e7456187160a4d\n0x1250aa6ecbf37d41158f0ccc\n0x5f7aa55dddee04c6a63ead97\n0x11a828cb435ef87d\n0x48b18b7fd97bb19bad65d126\n0x5209189ebb8bc8f9884f512\n0x17a1ec6422f5332\n0x6d296f3a5423c04e2717a864\n0xf40c6b0707633413464c5a56\n0x61846b83dbaab50\n0x9579dc6699ef3286200b8a22\n0x21a5a310218209d3da00594b\n0x2c481838b6a1877b\n0xa706a5012f31067f619c27d7\n0xef445189fc3c8e656ad4cfc8\n0x1ca5ece0598b89b\n0xd6d4e67dd271b706dbe547ba\n0x3402fc5b9134deeb306153f1\n0xb63cbf3cd46308\n0x3c31c81403f8249ae615671b\n0x97c3891131312e899e1484ff\n0x9a672a288835f9e\n0x38ab26267231472b670a388c\n0x5b40010c310cf2aa0aca9871\n0x1981222140b19458\n0x8c2fbec4258a259305de92e1\n0xd86f4345e26c069a519c953c\n0x1c20bed91e29cac7\n0x1ee0b0544cab9be0a47a3b6f\n0xae03a3526fd168f7f97fc6fb\n0xf714c07ec5ba53e\n0x6b5e3f09e9a256247dd9344b\n0xa050cfe4dce5d43ae8a3861b\n0x2e986a75e53b43ec\n0x7c7d31d777b946e117c4f5df\n0xd3c9510a8f8bf77668d48498\n0x2f48a855ee30d50b\n0x7c58048156c06422eef8a26\n0xc0b757d8faabc58f81271428\n0x2df6ebd67157fa80\n0xee932f58f98d0779f13cf0f9\n0x3cde472656cfed22103b62d\n0x677180cca08a35d\n0xb3775ff9e45bf99e169c0a22\n0xcc93402ec833d328055ba51a\n0x123e05a92036bcd1\n0xc23735d4c0194182c92eb839\n0xa31bb9737df59def51b3dbef\n0x2adc84fc51268539\n0x8ec6545f39d327c5d8fd090c\n0x5684f43d0b49d7313435bb9c\n0x2320b0abfbed97c5\n0x1c44ea3283c55d10058e5aa5\n0xb8f6b851c480b8daa739e0d3\n0x63bebf92a041b39\n0xca9963dd0827b570fbb3710b\n0xe1299c2d5440b743375cb15c\n0x4c6aaab1e92629d\n0xb64a9f9bd8431e90ac5cd69\n0xd5b886a8d7c22269aacf7fa9\n0x9f2f9113b69c677\n0xe97b1d55f86f16b7debdbbe5\n0x12755f0fe3990a1d35658463\n0x30117af27ea4f05e\n0x912a95444a585bb49e1c862e\n0x6deac787b721fd80efe1bcd3\n0x14fdcfb3f8b23a37\n0xa6f9c684de344747161e7626\n0xea80858f047037f40cf00838\n0x1904c84e6b7ee3c7\n0xc75d4fb73f4e80a90b01c17\n0x2021626f8f5ae01019c10eea\n0x262c1dcf061121f9\n0x6d13aec000c2930f0f6f1917\n0x1251f9e4b7983560cc113ffd\n0x230972f31c21f365\n0x10664538711fad97f33bc9c0\n0x60b8d94077deba918d4c310\n0x216d3f5ec29ec007\n0x548a32f9e49524acdc17f138\n0xb33c8b8fabf73e3c8b40131f\n0x82fd9eb7d355646\n0xec12b023a502a0886ca8b2dc\n0xfb273a89c7ffc054ce3d7193\n0x2449ac8136639c40\n0xbdaac789e9526173b733b259\n0xa7d2a7f29f8a92d3932e161d\n0x7cea4ff6fc7b801\n0x6f2cd4d81c405fcd737185fa\n0x77c0f2562efc332b7b249b88\n0x2f6cf9683ec9bbcb\n0x5563721cacbff356f2010c34\n0xc2c690e65906b47160ab7523\n0x7d6255d46e4c88b\n0xb6f11522651fbf16066f0871\n0x465ee9518b9aebce1c63eec1\n0x5cebd9c238a376a\n0xfb1be5f2aa191069e7ae099b\n0x5e0c6f4720cbffef334ad027\n0x2dfd121207ec8393\n0xd39fb4436b5e87fb2d6acb0c\n0xdac17d4d3db5487a815cf066\n0x1777935807a94b22\n0x5761511b8ec36c12e5854ece\n0x43fdfeb6353e8442dd06320b\n0x11c015cd51658c58\n0xfb54aecbafc98739941a64e\n0x720222943fc0e39e5e793dba\n0x22648dc0c9eecfb3\n0x56cab0cee20aa19b9100206d\n0x63e5a2634360141c84514b8e\n0x21815110aee95857\n0x2b2d4d7a1e22290547e73787\n0x568674108fe0514a8232cb94\n0x1d0b9b0d22db3b6c\n0xfd2130d0529b900ae0e3a4b9\n0x2c1e3fa0eaa300ff2207062d\n0x28419939906b2b9f\n0x7e228e459da02b9c1803a506\n0x46f16d0fa76dc6bab437faec\n0x20b6ad10ac9a7301\n0x247d38030eff53ae1b65fd03\n0x45a1addf6cb0a8cd381f773f\n0x16a06762b0e80ed1\n0xb57565068251ef97b42cd469\n0x730aa604cec7359ebc0a7ff\n0x4ee673b5e925dad\n0x23319338122cddbb4f88cdf1\n0x69b14d0c42552a55b62737ec\n0x109ff2ccb5d72b7\n0x1b7d0606f8e5e7fd24143208\n0x6d3992a8a4d46ca2d83386fc\n0x2070bd31200acaec\n0x8e766044e6b3b3b49771fcf\n0xebefacc2c47cafefc1b2232c\n0x122af2c8860cf50d\n0x78cf4ec22b76875e4fc6b6ba\n0x750d759432c8d34cdd841f92\n0x1c6426c6e5a25f81\n0x88db679103f772adceed6976\n0x5d0aa7d3e1399daf676afcf9\n0x2bac618a5e06bdb\n0x85fae2c9e6e1d78e30a62187\n0x6d6303281100554cc3d012ee\n0x268c4cb864f09d89\n0xbc64e7edac0c702a0463c87c\n0xad7605ee243755fd50aa2198\n0x1bfb73f48937159a\n0xc4d07b603d33ae8e5b871e1\n0x5345f605914134d1a6e3c61e\n0x16c254c6b7f1cd6e\n0xad2c151274de8bfc17905c15\n0xd2f3033a27c777b49c538ae1\n0x28459e1d1d0be721\n0xe79d06ed1eef6dc5dae84ce2\n0xab861dd564fd6ae03c31fab6\n0x2f40e358d089117e\n0x5b8cf11784bc90a37a0d9f18\n0x3f1bc2eda9ba645c9ce7748c\n0x20ed6b668a47437e\n0x89be7471ad0472ba44330b85\n0xef24934b50113d95d90d3b0f\n0xb2950c56529d666\n0x458d39a1ffaab88cc7c2b8b7\n0x6c466bdc46efeb375928d462\n0x1ccf24df1ec94b51\n0xd15bc29ee364e2bd16a9f2c3\n0xb3fbf12660a80416bda5de1b\n0x2067a32a2b1e1989\n0x24c6ee8f876293d05a0af836\n0x7e3c006e86bd02e929f49308\n0x2a61ea194f0bdd23\n0x3ade1272c0585c5c0ca3ee69\n0xc91cd86295c15f0fea2b3e70\n0x1b9471893c73c684\n0x2cb2fa1c98c5cbccce71d53e\n0xc61ed18b3b780caaa8255c27\n0xa4ba10c281217cd\n0xd8536f9c54732d0e6bfa5edf\n0x50da799d50596570ea5b7b2e\n0xae55352eabf264f\n0x62fa60b732ca6b05e83c719e\n0xcbfa14d7fd4a47157b86c330\n0x26d1fb8d9bc2dc72\n0x87cf1274f70e8ef900baf05f\n0xea54aa4a36d106baf076f794\n0x6dbdd4d33a1bc6f\n0x3c3456b4fd1e2de9dd5d3d54\n0xece5a990b39cd1af65c74e14\n0x21ce0b22e7366d54\n0x8c715f638fc208ae7268303d\n0x53fef6e9a22a3c0ea6ff25e4\n0x8c008534e046b5\n0x5f9c321080580a34317e15ed\n0x454cd2e1c51b66ae94c7b06d\n0x26a0a3ce5fa3c913\n0x13d30c56cf88f0e998eb81f8\n0xf112901cc2ff964f75d351b2\n0x273c8582c17fcb24\n0x90bfa645fb859a37373b8858\n0xb7ee2b76955bd10ed8a90fc9\n0x1bfa205a3b9dccd7\n0xafb92c3c7e7c25b958ad0c7d\n0x9bf4f59e8540bc5a9d71f997\n0x4701b0c91e5c3df\n0xf225e30f13e061f3088b0275\n0xd6f050166393a9f91af6624f\n0x14c7cbd57a924bf5\n0x91\n0xf820dbb9856c83e361b5c1bf\n0xb2efeabfa31e0500107f12e1\n0x23c20d5ad9ebc46c\n0xbfa3da05f13f57c924f78acb\n0x4c999615af9a0eb67c59f64\n0x171debbceb549d41\n0x667e1042fbaad88a770e9b39\n0xb4f31836e9f4211c4aeaa198\n0xfd9aa6568d6becb\n0x8a581ea788996c19881f4f31\n0xd1744d6930da4d8bc6a51632\n0x29e060ceaf003e49\n0x971b0b6369876efafa71960\n0x1773489e1909b23aab8ee4e0\n0x249192d51e06654d\n0x8121192ba458a44cc854d541\n0xfa477fb01a8131627992855e\n0xf4a99fe7c50c245\n0x93409c38bba26fb0e43e8964\n0x9007e809a696c33eec4a992a\n0x2d83e4ce42cdca57\n0xfa5ee122773b45a2e62f0036\n0xc9718ed06e9cab9b28cabea\n0x202cca514b6ad3fa\n0x84122493ab9dd538fd45937f\n0x242a41ae375ac3dbfde64133\n0xc588a9bad83f1ce\n0x4c27c2680a262fc584f7c276\n0xe8886c6e91d29d90cd081484\n0xbd1dacb19ed2dba\n0x7e59ba891adf3ea548736f03\n0x43d7dc988cca8bac2f115162\n0x13a18ceebf77e541\n0x92796d576879f45036f02527\n0xfccd39247b62f58154107afb\n0x69e6ba8f2f3ef34\n0x50f840b72432ee9d366836a8\n0xde8bbc090c1e0f13c938e507\n0x154562367ab4c3f8\n0xe80552231493ba34822a2bc6\n0xb6c7140cb2eb44b61a25a459\n0x1ed5700cb4f0c6f3\n0xfb92fdb0a35800ee9350479b\n0xd60822e36cde1c7c7b20b226\n0x1c4c01779d2c92a7\n0x1687b4cdfb4359a6ec9920b\n0xdbbf95d4f1e6a8609fd6ca65\n0x1920b1a75b335e66\n0x59f74b4ae5986109ae86f7c3\n0x9ea53ec48b92a7258eadf1ab\n0x259a2d5d640b4c9e\n0xe12fe3f440fc1124837dc66\n0xc4f9d79f1b6f4b42cf6189e5\n0xf82feda1e98b585\n0x9390037b7bf5b685001f4269\n0x4c97cca165e1765314f142ed\n0x2d01f4aa935bbd8e\n0xd58011a1ab0177920597d970\n0x7e8514877aa73868f2f3d4b2\n0xf6139cb039c88ad\n0x2b0a3132b4e91906795cb223\n0x9c47e8b920e0ab97cd7d387a\n0x85d4db0db7d95b4\n0xd92d118d2c530ee32440f9e\n0x3ad32b0b055d69f7e461caab\n0x5b431c6768b2667\n0x48994cc7096a6109fee868a3\n0x33f419e95c122121eb2b8f9\n0x2e1c7c68316bff66\n0x2697cfcfb9c21acddd50d1cf\n0x7ca9ce99565b5f979df698b1\n0x4f24a14e90f050a\n0xa43853278c6e9a8b597b65c5\n0x13e41f33f290159926024092\n0x260732890dbeab82\n0xb546a1341be003ddb53e575d\n0x3a482d08f3d1a466011afd40\n0x2fc0f7d2942b389\n0xabc7cf588481f950d2b5e354\n0x2557ca278a210e3fad8a865b\n0x5813e597e461019\n0x80874b7b2ada9c00b820dbd\n0xa6bed8aedd7a2667e27a29eb\n0x2a4129a4328e0034\n0x8d9091fea1a73cdd8c2f75\n0x269dec229a762634f24fd316\n0x16a4631ba8d51e59\n0xb3cd6670a276a82864ff5963\n0xd19927059d8862e94a9ea4c2\n0x1564f9c83a73c501\n0x36b993e65a7cb96a3317f190\n0x9fa12abba943ab5eb2d9ed48\n0x22570b0bb6a7c8ba\n0x7229a8b164d5b8d08300afba\n0xee1873ed9f51e060dbd6eb11\n0x17ecbe1058bf46f2\n0xfeb21034cbe7407d058073e6\n0x9f92c12211a3b310d489aa8b\n0x1407bc3c39d09521\n0xfa5086ebefaba68c230d38a1\n0x2f47b44857a74799f52a5431\n0x257d7686e3e77f52\n0x28dd61254d2e15ed1ab69cb3\n0xd2c1935a5e420399c22b51e6\n0x2dcadd0c7e37f22c\n0xcc6db1d921d6e3aa1e5c3f4c\n0xd8c8a64bb8ee52871c59555e\n0x300d168d1046b326\n0xb52852bba7ece27be3482ae3\n0x9c9c72aeabee86f389081e3b\n0x71599c4d8965008\n0xaa83d46500e58e13ceab3040\n0x35d022167dde7f2228ee8206\n0x2694cdd20889b6f3\n0x7b11132711eec3248d15f010\n0x5b5564df75651a2f96821d42\n0x1c50275df7c0937e\n0xcbb2c5444da5096b34e490f1\n0x10f4b6adcea95f0eda538ba3\n0x2e584fc47115ba72\n0x1cbfe84467d73fb6c738c66\n0x61fb46b5f4478b41be670af2\n0x17c57e50906c54df\n0x1500004fe7a9c8ccae6f0250\n0x35f0b7927c2d192f23c9ba3d\n0xc6c800c4ef5831d\n0xec794560e08cec278d9859f4\n0xa37bd3bbd95f8fd2b1725660\n0x22f0fea34d6ea60e\n0xe9ca2798a6da195c57305932\n0x9fd406869a8299246aae9204\n0xdc27ff0d2ee2037\n0xdcae717881d662df6c9a588f\n0xef0a4cc68ec4bd7129c5e14c\n0x115b5394a715be7c\n0xead26ab3c0b9cd16b39397c3\n0xde9f856611f44972e252713a\n0x7917128ac7a68fc\n0xd524ac1ed6e8729409055df1\n0x6135c7fb5a4711b9bd6c26ba\n0xd1b0ef7bf49c10c\n0xef88c837356f8ba2f145c757\n0xa5a6df24628951048245d020\n0x7a084516fe54270\n0x53e66addf4508b68d3d8a5c\n0x691d62fa50442493349e404f\n0x2151514e93ca4ba7\n0xab549e76a008d0d7de33bc79\n0x85ce80b186783ccec208b7ba\n0x1d62c2bf65414ede\n0x418bf640c9fff784d276353c\n0xd0ee8d078f1b60164650bf0f\n0x287ffb93107afa6\n0x66f3a6e5325cba6a8f29033d\n0xdde222155fb60c59c4f2f6e8\n0x10e9e7cff06d3da6\n0x84f1e5dff705ed2a70f62541\n0x912a25d20bac2dfcf7767ec2\n0x11e97db1b6b417ab\n0xa56fbd44cdd266cd18ce5aa6\n0x706e4defa0f1f07059a31f85\n0xceb0668fa6d9c0f\n0xe24f2c05b10b0fde1d85b823\n0x8c456b4b190c05a74e7c6a59\n0x3ba7e394e4c2670\n0xd60d7b967e12f6954d2ed9c8\n0x111db205f8ae5cc8098dd046\n0xf4d965f68c14591\n0xe18504c29db9f5292cb7032e\n0x2f81de07865ea1eb0f5333c4\n0x2a6048b4ae45e8cd\n0x252500a0c0e1ca1bb71c8df1\n0xf41f286bb7011d28bcd69f16\n0x172ee718eab786b1\n0x11de2039479a4fcc10f41547\n0x2cde1434196f2a23557b8529\n0x2d53110cabaa662\n0x9e1edb2ddcd39127896eab68\n0x2bbaf0d4e5b0e5d7465d23f9\n0x2b0c56cdc1dc3211\n0xc4ae5d3d107c235683255d8d\n0xf581d37f1cfb0c50addcbd1\n0x324eb30ec991a7\n0x1ef2ae93dea6546d0ea0b8f3\n0xf46553474681f676cd30bccf\n0x17b9865744436f30\n0x343a4dadb4f128fb82aac674\n0x2a77bb1e506e07a56b0cc3d6\n0x192eec85310d014a\n0xf4727916b238b0fd62bc14b1\n0xd8a7a7e76184ee4fe07efc56\n0x1a19df3310244682\n0xa8d9ec365f2c7b45006cf1a9\n0xd340c2d4df9a1752959c6236\n0x9845105686c7a18\n0xa543d304dbe8d5301b8e5d26\n0x6b29b620f809136309a4e272\n0xb4360763460470c\n0xb376df3fc882b9733d39f867\n0xe6a8acc64687cbcb557d21f6\n0x1aa658d0193668f3\n0xc1d2e8090a8fa68c2ef22450\n0xffff4184f29905cd5a3f63a9\n0x20febe908c1c6eb5\n0x2d734fd2766c597b292d19e3\n0x7b7a7354534ebdc75b848684\n0x177474be2601d787\n0x9e1e8f63272b1b15dd2c89ac\n0x8d8b2d1aaea6829d1e4d3fe6\n0x166b2aabf0780e53\n0xdbf4b6bfee45ce1148bb0a83\n0xf19865aa260b7d049574c071\n0xdc9c2442d2e901d\n0x55240d496c11e3558d465fb3\n0xfaa4bf2d9023627cef8c31a8\n0x291c6f78ed552f48\n0x9a08a1200d83235ea73e3dd6\n0x551b607d38b82da14fc2a1d9\n0x28315c9a8d94c45e\n0xd98d63299d7c7445a4af992\n0x364a55d7d94274c160db2542\n0x15d76c2073092754\n0x35ca49b639a9c59ee57ce197\n0x19ad4bed3b7161478da5a1df\n0x24686096115b31c5\n0xa88dc6d23f8a837e5bb67a4a\n0x8c25557878972bb73a836d5e\n0xf8c49d4fe8e8b87\n0x55557e4dd31cd8f22925d61f\n0x2e8cf4e19f1ec18b1d25edb7\n0x154ecf52741de06e\n0xacd462999ae48c212af112d2\n0xc648c2aa7404454a237a78a\n0x104e14de0a22f546\n0xf00b8f0fc868702c71b7471a\n0x6733c08d213c79972f4a6727\n0x37ac8ea8a97bbae\n0xbba359b51949f6c51429af4a\n0xfdbe6c507ea025a89dbe8e85\n0x2f472a4acc1aded\n0xc499eb665a3b8e04ab1d019b\n0x6aefef77a528a46df6ecae80\n0x29416a8d91e05c8b\n0x77de0cc3541637a1632742a\n0x2876f1d00190fa9043847b49\n0x27692c031bb58220\n0x911e63821dd771abfdb288e1\n0x8a54b8260678a3371cd1d667\n0x1608f7a63027e893\n0x93300555577a3c095b1dd26f\n0xd4082a941ca8120261a1ff13\n0x4781bddd5a3f99b\n0xc234b97d5638285927139a40\n0x7efe21444bc818a0c0e3f9b3\n0x1e7eb0d498fd294b\n0x622d0e5fdeea6c85a65c3525\n0x480a70bcb18c68a7726e3691\n0x5bb99073c5c4f3d\n0xfd35da7bb3276aecb9a8634\n0xf11841487e1ceb1ff530b367\n0x8b83aee6cb642f0\n0x807089096af88079ecd9f67d\n0xdd8650d322b138e3faa6b112\n0x2c6ffb847cb778c\n0xcaaca82a7d534d639b7dac2a\n0xbffda6e9066ddbe68bc4d9e8\n0x302c216336fb22d8\n0x77efb4d00645a63f3153a9be\n0x70aaf0e654a54183fd552ca6\n0x12c2d5babaaad1d\n0x554e9196c67773b979727f4f\n0x31ded1eca1f319fba9db314c\n0x97b21a3d4b20c77\n0x3c47da156d58d5d56d540665\n0xff0c914f841fbfae6e2af0b6\n0xc4755a2f2502ca9\n0x83388b6bf5906b4afe3e86a5\n0x3f9054c1071a1ec1954e2141\n0x26ba14a10d7ad837\n0x2309e51a041ab62275edfab6\n0xfeff6218fef8a4d6d21effc\n0x9d1018b31bbdf3e\n0x20844688f55d334ffb1ec437\n0x1e7042484e477db4c862feec\n0x1da290cf8c6a8251\n0xe409686ce396c0fc9a743898\n0x6aa2ac3a253c1147cd893795\n0x27e68a119777a324\n0xe9d050362b0fd38966808c2d\n0x91beede8eed78f8f5f151fb4\n0xc293aab3ba1d6be\n0x6523d5ee620199d7f075d6b7\n0x68c0313ee49558730e392186\n0x1b78508c8740a8e5\n0xf49d57c6744406905d923228\n0xef9c40fe6fa587c1e9e60cee\n0xe1700039b2da9b4\n0xf7a1fd4e27afe53fca5a57a0\n0x4224378c9c302202c9a0433a\n0x129eac7bc0fcd757\n0x55b20c85657e3009711d8e5\n0x61eb40f872abf1f02d77b37e\n0x1c37ba677685b871\n0x89eb067e4e661cb54d3f9ae1\n0xdec34983d924181eb54ea323\n0xc31a6a8cefa91c1\n0x97ba674b6239b1be7bf262ca\n0x539c985ed7545c777a361417\n0x1c887d676452b0e1\n0x53b778ccc05c5a536995b813\n0x132eb25f303e963a53ca9573\n0x17c7f49a2fef461b\n0xa0eddc85d5cedae477ba9c98\n0x381db4b1ecd5bdb612467fcc\n0x1aff17a0895020e4\n0x529f09ca9d352c3d809fb26f\n0xe44bc6dbd805afa53df5bf1\n0xa2e809fdb19b15d\n0xde61ffc6db42090655b1e489\n0xf6f1cd3956ac160bd402fcae\n0x21b014ed418c371d\n0xdf8bdf63079209b81781839b\n0x84c01ba6a58e4d5c49303dba\n0x228a04aee3f6368\n0xb7d44ec3ca29a24b6b69820e\n0x49afddc139e62f86c9483c55\n0x1719d2b2aaad143a\n0xfdfc725a3e8caa91aabac5ab\n0x78aa9c375670f0798320104c\n0x1e11d440d7a9b8f8\n0x2f3e245ea38a8dbee85d272e\n0x5006e5c2cc5ca68e7a660fee\n0xf51a3260c534a4e\n0x80a72f8500ec6b5658e9300d\n0x29bc268a593dd6c0d2aed05d\n0x15964390b6764d0\n0x82826448f711ba516ee401bf\n0x59826eb6eb6405d4d38d6368\n0xa4df9eb0704a335\n0x66096e2f55c7828c1d0a06ce\n0x37470583d45d9c59b64ed782\n0x248cf1a3fb85ba63\n0xbb68f4c950d989a16a4a14ba\n0xfa139c134816a4965d92590d\n0xf02665787f9e305\n0xaff8df0a95f1f50a23a4573b\n0xbe0e51dbb1157f4161bcc1f5\n0x2693d61ac092e3be\n0x6ad7983b8d605dd6e1018984\n0xb115c7cea875d85597275568\n0x3ee90abb980183c\n0x8001af869cd14dfee5e6100f\n0x4d98b5d0f41734c05d51e95f\n0x1567b325cf9eb3a2\n0x340f51b5a5f8629cf082d02c\n0x8034656519ebd377b399d76\n0x1a9acb3463e198b7\n0xe01c3e7f3bb3b3a20825e19d\n0x5bdcc5e57edb307a7d482154\n0x2847ca99c3725f22\n0x2e92c791faf01268772a499e\n0x8b639b6515e5bf1ccd86f555\n0xc3bc75c87226e01\n0xa780611b2e841211e613907a\n0x9d94bf127d4adaf511fe5d27\n0x72cc46376fd255b\n0x39a5f202f38edcffd3bf2cff\n0x9911e63f6d40a84b633667ae\n0x3c061ca7bd96278\n0x22134732df14b11bed5dee27\n0x89463f646d3997cbc2a9011\n0x22ed4c26257dd194\n0x60aadc0605e7f49d054c0179\n0x430def48a50dcd9bda682790\n0x1ba5940bf1cff49a\n0xcc244a3a4eccdfd04a897be8\n0xba94e3e11a122fe65aefb7e9\n0xc541f3d632cfee8\n0xfb9d0970edc067f3362f4371\n0x4a4d6697e81c52db121a99dd\n0xf0c07578996ccf\n0x938d9d0d14e3b65b085da694\n0xcce285b486a03c9cd20b18d6\n0x24b4f063e50bfaf6\n0x83a808fdac914f655e81c2e\n0xd2133b326801da008ca6ceba\n0xb2c089cefb5520e\n0x784f9122b518a46d916de58c\n0x4fbbb45333a354baa5e140af\n0x2b2c6ec8ec1f49fc\n0x9215c3829364f747ffdf5a3b\n0xd12b22dbbf651f850e1e0438\n0x64a7d83a95e4d4e\n0xedd492d9cc0106818fba975a\n0x4b84020ae18bfb93b481f242\n0x16b00065602ff950\n0xc7970e68a8b0491545dc1b82\n0xb9e0334cfff17b87b4861b1\n0x4a1d2fce02748f0\n0xed5aa2b3cf973c45b4fb0bce\n0x4ff39a6a2dc96cd176ca0861\n0x12b9be9997b27ce8\n0x86728957bfd9941f73a41976\n0xfd02b455a06e95968f71693e\n0xa647f29b7d18a1b\n0x513ff75ae845ec9fb377b091\n0x5145408e95a0c13d8ac91a57\n0x273feb651aa2b439\n0x2383f81ef55a3480bc110acb\n0xde0ca0b533e74614da09b143\n0x34326478c5d9e7a\n0xf5abbb68767e7a5b13e42f09\n0xe51865d32afb19ba93069ec7\n0xcad0a892c4baeec\n0x88a55fbaf7fa5b6a4a0b83fb\n0x1beeb58faecfcbf153d2d17f\n0xd365826eaefa95c\n0x6bae68f1e5998215bac2e790\n0x118cc5a7ff22893002d401\n0x2c9edcd67aba0031\n0xda5db968b2e246c5a6a3ba78\n0x3061578aa3da51ed5eb6b4dc\n0x2f8a70016e099752\n0x632166ac43572e640846724f\n0x5dd9ce1441478f2d3cf15834\n0x26f82bf35706f05d\n0x84a11661b702bdfebd635ac4\n0xaf699222f674c91580d09a1e\n0xe74476d1cad37ea\n0x2ec3b555114b77c19970202e\n0x189944678eb335b13e0ae638\n0x2dec55cd2f7b34fe\n0xd812cf51757e64a9d8abb1a0\n0x22d75169141019f56a9bc595\n0xffb2d6eecc53c83\n0x310a155bfac3ac0b0eeba0b2393d0415934710824640a529afb2da0901e680\n"
  },
  {
    "path": "src/contracts/autogenerated/noir_ultra_keccak_zk_honk_example/tests/test_contract.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\n//! # Starknet Verification Contract Tests\n//!\n//! This module contains comprehensive tests for the proof verification contract.\n//! The tests use Starknet Foundry's testing features to verify proofs.\n//!\n//! ## Test Strategy\n//! - Use real proof fixtures generated by the garaga CLI\n//! - Test both positive (valid proof) and negative (invalid proof) cases\n\nuse noir_ultra_keccak_zk_honk_example::honk_verifier::{\n    IUltraKeccakZKHonkVerifierDispatcherTrait, IUltraKeccakZKHonkVerifierLibraryDispatcher,\n};\nuse snforge_std::fs::{FileTrait, read_txt};\nuse snforge_std::{DeclareResultTrait, declare};\nuse starknet::ClassHash;\n\n/// Declare the UltraKeccakZKHonkVerifier contract for testing.\n///\n/// This function declares a new instance of the UltraKeccakZKHonkVerifier contract\n///\n/// # Arguments\n/// * `name` - The contract name to declare\n///\n/// # Returns\n/// * `ClassHash` - The class hash of the declared contract\n///\n/// # Example\n/// ```cairo\n/// let class_hash = declare_contract(\"UltraKeccakZKHonkVerifier\");\n/// let dispatcher = IUltraKeccakZKHonkVerifierLibraryDispatcher { class_hash };\n/// ```\nfn declare_contract(name: ByteArray) -> ClassHash {\n    let class_hash = *declare(name).unwrap().contract_class().class_hash;\n    class_hash\n}\n\n/// Test the verification function verify_ultra_keccak_zk_honk_proof with a valid proof.\n///\n/// This test demonstrates the complete verification flow:\n/// 1. Declare the verification contract\n/// 2. Load a pre-generated proof fixture\n/// 3. Verify the proof on-chain\n/// 4. Assert that verification succeeds\n///\n/// ## Test Setup\n/// - Uses fork testing against Sepolia testnet to access required declared contracts maintained by\n/// the garaga team - Loads proof calldata from `tests/proof_calldata.txt`\n/// - To generate the calldata, you can use the garaga CLI:\n/// ```bash\n/// garaga calldata\n///     --system ultra_keccak_zk_honk\n///     --vk path/to/vk\n///     --proof path/to/proof\n///     --public-inputs path/to/public_inputs\n///     --format snforge\n///     --output-path path/to/tests\n/// ```\n/// This will generate a file `proof_calldata.txt` in the specified output path.\n/// You can then use this file in the test.\n///\n/// ## Expected Behavior\n/// - The proof should verify successfully\n/// - The function should return Ok(public_inputs) containing the expected public inputs\n/// - No panics or assertion failures should occur\n#[test]\n#[fork(url: \"https://api.zan.top/public/starknet-sepolia/rpc/v0_10\", block_tag: latest)]\nfn test_verify_ultra_keccak_zk_honk_proof() {\n    // Step 1: Declare the verification contract\n    let class_hash = declare_contract(\"UltraKeccakZKHonkVerifier\");\n    let dispatcher = IUltraKeccakZKHonkVerifierLibraryDispatcher { class_hash };\n\n    // Step 2: Load the proof fixture generated by the script\n    // This file contains the ultra_keccak_zk_honk proof calldata formatted for Starknet\n    let file = FileTrait::new(\"tests/proof_calldata.txt\");\n    let calldata = read_txt(@file).span();\n\n    // Step 3: Verify the proof on-chain\n    // This calls the contract's verify_ultra_keccak_zk_honk_proof function with the loaded proof\n    // data\n    let result = dispatcher.verify_ultra_keccak_zk_honk_proof(calldata);\n\n    // Step 4: Assert that verification succeeded\n    // A valid proof should return Ok(public_inputs), not Err\n    assert(result.is_ok(), 'Proof verification failed');\n    // Optional: You can also verify the public inputs contain expected values\n// let public_inputs = result.unwrap();\n// assert(public_inputs.len() > 0, 'No public inputs');\n// Additional assertions on the public input values can be added here\n}\n"
  },
  {
    "path": "src/contracts/autogenerated/risc0_verifier_bn254/.tool-versions",
    "content": "scarb 2.16.1\nstarknet-foundry 0.57.0\n"
  },
  {
    "path": "src/contracts/autogenerated/risc0_verifier_bn254/Scarb.toml",
    "content": "# Generated by Garaga version 1.1.0\n[package]\nname = \"risc0_verifier_bn254\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n[dependencies]\ngaraga = { path = \"../../../\" }\nstarknet = \"2.16.1\"\n\n[cairo]\nsierra-replace-ids = false\ninlining-strategy = 2\n\n[dev-dependencies]\nsnforge_std = \"0.57.0\"\nassert_macros = \"2.16.1\"\n\n[[target.starknet-contract]]\ncasm = true\ncasm-add-pythonic-hints = true\n"
  },
  {
    "path": "src/contracts/autogenerated/risc0_verifier_bn254/src/groth16_verifier.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\nuse super::groth16_verifier_constants::{N_FREE_PUBLIC_INPUTS, T, ic, precomputed_lines, vk};\n\n#[starknet::interface]\npub trait IRisc0Groth16VerifierBN254<TContractState> {\n    fn verify_r0_groth16_proof_bn254(\n        self: @TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u8>, felt252>;\n}\n\n#[starknet::contract]\nmod Risc0Groth16VerifierBN254 {\n    use garaga::apps::risc0::{\n        compute_receipt_claim, deserialize_full_proof_with_hints_risc0, journal_sha256,\n    };\n    use garaga::definitions::{G1G2Pair, G1Point};\n    use garaga::ec_ops::{G1PointTrait, ec_safe_add};\n    use garaga::groth16::{\n        Groth16ProofRawTrait, multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result,\n    };\n    use starknet::SyscallResultTrait;\n    use super::{N_FREE_PUBLIC_INPUTS, T, ic, precomputed_lines, vk};\n\n    const ECIP_OPS_CLASS_HASH: felt252 =\n        0x396d5915ecf475aab117bb25a0272b261e9e25ffe1c0ce05a51a3f77489c89e;\n\n    #[storage]\n    struct Storage {}\n\n    #[abi(embed_v0)]\n    impl IRisc0Groth16VerifierBN254 of super::IRisc0Groth16VerifierBN254<ContractState> {\n        fn verify_r0_groth16_proof_bn254(\n            self: @ContractState, full_proof_with_hints: Span<felt252>,\n        ) -> Result<Span<u8>, felt252> {\n            // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n            // This function returns Result::Ok(public_inputs) if the proof is valid.\n            // If the proof is invalid, it returns Result::Err(error).\n            // Read the documentation to learn how to generate the full_proof_with_hints array given\n            // a proof and a verifying key.\n\n            let fph = deserialize_full_proof_with_hints_risc0(full_proof_with_hints);\n\n            let groth16_proof = fph.groth16_proof;\n            let image_id = fph.image_id;\n            let journal = fph.journal;\n            let mpcheck_hint = fph.mpcheck_hint;\n            let msm_hint = fph.msm_hint;\n\n            groth16_proof.check_proof_points(0);\n\n            let ic = ic.span();\n\n            let journal_digest = journal_sha256(journal);\n            let claim_digest = compute_receipt_claim(image_id, journal_digest);\n\n            // Start serialization with the hint array directly to avoid copying it.\n            let mut msm_calldata: Array<felt252> = array![];\n            // Add the points from VK relative to the non-constant public inputs.\n            Serde::serialize(@ic.slice(3, N_FREE_PUBLIC_INPUTS), ref msm_calldata);\n            // Add the claim digest as u256 scalars for the msm.\n            msm_calldata.append(2);\n            msm_calldata.append(claim_digest.low.into());\n            msm_calldata.append(0);\n            msm_calldata.append(claim_digest.high.into());\n            msm_calldata.append(0);\n            // Complete with the curve indentifier (0 for BN254):\n            msm_calldata.append(0);\n            // Add the hint array.\n            for x in msm_hint {\n                msm_calldata.append(*x);\n            }\n\n            // Call the multi scalar multiplication endpoint on the Garaga ECIP ops contract\n            // to obtain claim0 * IC[3] + claim1 * IC[4].\n            let mut _msm_result_serialized = starknet::syscalls::library_call_syscall(\n                ECIP_OPS_CLASS_HASH.try_into().unwrap(), selector!(\"msm_g1\"), msm_calldata.span(),\n            )\n                .unwrap_syscall();\n\n            // Finalize vk_x computation by adding the precomputed T point.\n            let vk_x = ec_safe_add(\n                T, Serde::<G1Point>::deserialize(ref _msm_result_serialized).unwrap(), 0,\n            );\n\n            // Perform the pairing check.\n            let check = multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result(\n                G1G2Pair { p: vk_x, q: vk.gamma_g2 },\n                G1G2Pair { p: groth16_proof.c, q: vk.delta_g2 },\n                G1G2Pair { p: groth16_proof.a.negate(0), q: groth16_proof.b },\n                vk.alpha_beta_miller_loop_result,\n                precomputed_lines.span(),\n                mpcheck_hint,\n            );\n            match check {\n                Result::Ok(_) => Result::Ok(journal),\n                Result::Err(error) => Result::Err(error),\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/contracts/autogenerated/risc0_verifier_bn254/src/groth16_verifier_constants.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\nuse garaga::definitions::{E12D, G1Point, G2Line, G2Point, u288, u384};\nuse garaga::groth16::Groth16VerifyingKey;\n\npub const N_FREE_PUBLIC_INPUTS: usize = 2;\n// RISC0 version tag : v2.2.2\n// CONTROL ROOT USED : 0xce52bf56033842021af3cf6db8a50d1b7535c125a34f1a22c6fdcf002c5a1529\n// CONTROL_ROOT_0 : 0x1b0da5b86dcff31a0242380356bf52ce\n// CONTROL_ROOT_1 : 0x29155a2c00cffdc6221a4fa325c13575\n// BN254 CONTROL ID USED : 0x4446e66d300eb7fb45c9726bb53c793dda407a62e9601618bb43c5c14657ac0\npub const T: G1Point = G1Point {\n    x: u384 {\n        limb0: 0x2612e4e2e1c0b9d602b7aa52,\n        limb1: 0x4d5d3394a95b09366b3abb5e,\n        limb2: 0x1f550d0d6161a44a,\n        limb3: 0x0,\n    },\n    y: u384 {\n        limb0: 0x34475b4928c630e3330db9cb,\n        limb1: 0x1d6305d30e66d5a8ce067302,\n        limb2: 0x12a023f9110563f6,\n        limb3: 0x0,\n    },\n}; // IC[0] + IC[1] * CONTROL_ROOT_0 + IC[2] * CONTROL_ROOT_1 + IC[5] * BN254_CONTROL_ID\n\npub const vk: Groth16VerifyingKey<u288> = Groth16VerifyingKey {\n    alpha_beta_miller_loop_result: E12D {\n        w0: u288 {\n            limb0: 0x38febe9f87f730fa3e5bd174,\n            limb1: 0xf763950637a776ef9e248435,\n            limb2: 0x29dc2d37c63acbda,\n        },\n        w1: u288 {\n            limb0: 0xa31610a97aa4e4539be919ff,\n            limb1: 0xfa4d4bfb72b6a3c002018e97,\n            limb2: 0x1968ab971e610fce,\n        },\n        w2: u288 {\n            limb0: 0xee6c1ce3a15313c6f9d57f7e,\n            limb1: 0xd37e28396640fcfe5f122aae,\n            limb2: 0x210d3763f7a27517,\n        },\n        w3: u288 {\n            limb0: 0x7746ddac185562e756b1b92f,\n            limb1: 0x44f8b75638ef5a373f319cd8,\n            limb2: 0x51e9605db4edac6,\n        },\n        w4: u288 {\n            limb0: 0xc29e0c2ac434301d671ffa56,\n            limb1: 0xa06f1db2d4ca4dd88f979102,\n            limb2: 0x1d0126fb7d721e02,\n        },\n        w5: u288 {\n            limb0: 0xed2e022e10acbeb35084dc1,\n            limb1: 0xf9de514baee870f114669060,\n            limb2: 0x10889a0f300ce96c,\n        },\n        w6: u288 {\n            limb0: 0xeec23aadde92d2dd00e4568e,\n            limb1: 0x6d5b4b63667db8f10bd851ab,\n            limb2: 0x18f1dd15d2e64c69,\n        },\n        w7: u288 {\n            limb0: 0x2131bad24ea07a033d0bf397,\n            limb1: 0xb6312a7f2622146be93b5950,\n            limb2: 0x227e61ca055f0ac3,\n        },\n        w8: u288 {\n            limb0: 0xb896f30b06350f012274ebcd,\n            limb1: 0xd14298f13a76183170aafe08,\n            limb2: 0x302bfd90358d23a0,\n        },\n        w9: u288 {\n            limb0: 0x679d91263798da428fa5ea62,\n            limb1: 0x806797d163f4df8b55ec774c,\n            limb2: 0x29b72d4ec063face,\n        },\n        w10: u288 {\n            limb0: 0x4dbef45fe0c5a14bef7c4a90,\n            limb1: 0xd4ae215c443d0f0768198bc6,\n            limb2: 0x2fcc02633e427272,\n        },\n        w11: u288 {\n            limb0: 0x7308cad65773475443cfbd80,\n            limb1: 0x972f90a77f1a8aeece6571ff,\n            limb2: 0x2d3a570362a9fd7f,\n        },\n    },\n    gamma_g2: G2Point {\n        x0: u384 {\n            limb0: 0xf75edadd46debd5cd992f6ed,\n            limb1: 0x426a00665e5c4479674322d4,\n            limb2: 0x1800deef121f1e76,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0x35a9e71297e485b7aef312c2,\n            limb1: 0x7260bfb731fb5d25f1aa4933,\n            limb2: 0x198e9393920d483a,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0xc43d37b4ce6cc0166fa7daa,\n            limb1: 0x4aab71808dcb408fe3d1e769,\n            limb2: 0x12c85ea5db8c6deb,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0x70b38ef355acdadcd122975b,\n            limb1: 0xec9e99ad690c3395bc4b3133,\n            limb2: 0x90689d0585ff075,\n            limb3: 0x0,\n        },\n    },\n    delta_g2: G2Point {\n        x0: u384 {\n            limb0: 0x69cfaa4e60401fea7f3e0333,\n            limb1: 0xd922dba0547057ccaae94b9d,\n            limb2: 0x1aa085ff28179a12,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0x2ccf0b4c91f42bb629f83a1c,\n            limb1: 0x9bee94f1f5ef907157bda481,\n            limb2: 0x3b03cd5effa95ac,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0x9e2fea1c7142df187d3fc6d3,\n            limb1: 0x37e867178318832d0b2d74d5,\n            limb2: 0x1e60f31fcbf757e8,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0xfb7228ca5c91d2940d030762,\n            limb1: 0xf6490846d518c9aea868366e,\n            limb2: 0x110c10134f200b19,\n            limb3: 0x0,\n        },\n    },\n};\n\npub const ic: [G1Point; 6] = [\n    G1Point {\n        x: u384 {\n            limb0: 0x4d553505739d0f5d65dc3be4,\n            limb1: 0x32a9061a082c15dd1d61aa9c,\n            limb2: 0x12ac9a25dcd5e1a8,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xd30f3eee2b23c60ee980acd4,\n            limb1: 0xd91731911c898569106ff5a2,\n            limb2: 0x25aa744581ebe7a,\n            limb3: 0x0,\n        },\n    },\n    G1Point {\n        x: u384 {\n            limb0: 0x4ccc3c8769d883f688a1423f,\n            limb1: 0xf292fae2036e057be5429411,\n            limb2: 0x707b920bc978c02,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xc203383782a4650787ff6642,\n            limb1: 0xf7bc357bf63481acd2d55555,\n            limb2: 0x2e32a094b7589554,\n            limb3: 0x0,\n        },\n    },\n    G1Point {\n        x: u384 {\n            limb0: 0x48e336f4fd974644850fc347,\n            limb1: 0x3e249751853f961511011c71,\n            limb2: 0xbca36e2cbe6394b,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x6db8f7f409c153b1fcdf9b8b,\n            limb1: 0x3729fa3d68714e2a8435d4fa,\n            limb2: 0x2ede7c9acf48cf3a,\n            limb3: 0x0,\n        },\n    },\n    G1Point {\n        x: u384 {\n            limb0: 0xe2c6b6fb5a25f9112e04f2a7,\n            limb1: 0x7c091cc2aaf201e488cbacc3,\n            limb2: 0x1b8af999dbfbb392,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x1a60157f3e9cf04f679cccd6,\n            limb1: 0x5722949f192a81c850d586d8,\n            limb2: 0x2b91a26aa92e1b6f,\n            limb3: 0x0,\n        },\n    },\n    G1Point {\n        x: u384 {\n            limb0: 0x1dcefeddd06eda5a076ccd0d,\n            limb1: 0x8ac1750bdfd5a7615f002d4a,\n            limb2: 0x2b5f494ed674235b,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x8f14f912c5e71665b2ad5e82,\n            limb1: 0xcbba817fcbb9a863b8a76ff8,\n            limb2: 0x2fe520ad2020aab9,\n            limb3: 0x0,\n        },\n    },\n    G1Point {\n        x: u384 {\n            limb0: 0x2fce3c25d5940320b1c4d493,\n            limb1: 0x3666843cde4e82e869ba525,\n            limb2: 0xf1c3c0d5d9da0fa,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x3608f68287aa01bd0b69e809,\n            limb1: 0xfe8c0d07b307482d8bc8bb2f,\n            limb2: 0x214bfcff74f425f6,\n            limb3: 0x0,\n        },\n    },\n];\n\n\npub const precomputed_lines: [G2Line<u288>; 176] = [\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4d347301094edcbfa224d3d5,\n            limb1: 0x98005e68cacde68a193b54e6,\n            limb2: 0x237db2935c4432bc,\n        },\n        r0a1: u288 {\n            limb0: 0x6b4ba735fba44e801d415637,\n            limb1: 0x707c3ec1809ae9bafafa05dd,\n            limb2: 0x124077e14a7d826a,\n        },\n        r1a0: u288 {\n            limb0: 0x49a8dc1dd6e067932b6a7e0d,\n            limb1: 0x7676d0000961488f8fbce033,\n            limb2: 0x3b7178c857630da,\n        },\n        r1a1: u288 {\n            limb0: 0x98c81278efe1e96b86397652,\n            limb1: 0xe3520b9dfa601ead6f0bf9cd,\n            limb2: 0x2b17c2b12c26fdd0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc1a48e9e12ff1dbf61883912,\n            limb1: 0xaee1724a5332ee74b8ed9451,\n            limb2: 0xfbb1e993e3695f0,\n        },\n        r0a1: u288 {\n            limb0: 0x7acaee831d920baf2a1bfde0,\n            limb1: 0x4cf9ef8c77ec7a0195bee19d,\n            limb2: 0x25757a99d16aa21c,\n        },\n        r1a0: u288 {\n            limb0: 0xe5847602f3a9790bf049b947,\n            limb1: 0x934e2813cdc5d033f879cf93,\n            limb2: 0x21249e515f664d4c,\n        },\n        r1a1: u288 {\n            limb0: 0xf19496daaae3309c391d0383,\n            limb1: 0x408eeae0c5d549305a377fd8,\n            limb2: 0x21282298fede4ac4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1b3d578c32d1af5736582972,\n            limb1: 0x204fe74db6b371d37e4615ab,\n            limb2: 0xce69bdf84ed6d6d,\n        },\n        r0a1: u288 {\n            limb0: 0xfd262357407c3d96bb3ba710,\n            limb1: 0x47d406f500e66ea29c8764b3,\n            limb2: 0x1e23d69196b41dbf,\n        },\n        r1a0: u288 {\n            limb0: 0x1ec8ee6f65402483ad127f3a,\n            limb1: 0x41d975b678200fce07c48a5e,\n            limb2: 0x2cad36e65bbb6f4f,\n        },\n        r1a1: u288 {\n            limb0: 0xcfa9b8144c3ea2ab524386f5,\n            limb1: 0xd4fe3a18872139b0287570c3,\n            limb2: 0x54c8bc1b50aa258,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb5ee22ba52a7ed0c533b7173,\n            limb1: 0xbfa13123614ecf9c4853249b,\n            limb2: 0x6567a7f6972b7bb,\n        },\n        r0a1: u288 {\n            limb0: 0xcf422f26ac76a450359f819e,\n            limb1: 0xc42d7517ae6f59453eaf32c7,\n            limb2: 0x899cb1e339f7582,\n        },\n        r1a0: u288 {\n            limb0: 0x9f287f4842d688d7afd9cd67,\n            limb1: 0x30af75417670de33dfa95eda,\n            limb2: 0x1121d4ca1c2cab36,\n        },\n        r1a1: u288 {\n            limb0: 0x7c4c55c27110f2c9a228f7d8,\n            limb1: 0x8f14f6c3a2e2c9d74b347bfe,\n            limb2: 0x83ef274ba7913a5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa6cd3bef29216e5776f4c435,\n            limb1: 0x96ed36c2e4e69e8de93d63f,\n            limb2: 0x20a92fd9a2fb0a39,\n        },\n        r0a1: u288 {\n            limb0: 0xeda6dc0a1e8e8067ae60ff67,\n            limb1: 0x6b56562a0994de5c01c288f3,\n            limb2: 0xaeed3d90fc6fe0d,\n        },\n        r1a0: u288 {\n            limb0: 0x82ed548a4877130ae8334400,\n            limb1: 0x25021da2b3bb88299f079afd,\n            limb2: 0xf3fb02181cb52dd,\n        },\n        r1a1: u288 {\n            limb0: 0x76dd33b2913d5b7a9f5ff9c4,\n            limb1: 0x77c15ad5bbac0f2d3d49eab8,\n            limb2: 0xf3c2bd9e2535565,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf9c98b4467592a57fca1c44f,\n            limb1: 0x22c8464befc62af74bd7e13e,\n            limb2: 0xf6fe51a099cedd,\n        },\n        r0a1: u288 {\n            limb0: 0x424a207247f0e4c27f38a1ae,\n            limb1: 0xc0d1158c6df8f6ffa8d6a76e,\n            limb2: 0xe16f63bee6733e5,\n        },\n        r1a0: u288 {\n            limb0: 0x747d2a41af96d81fb2585f8f,\n            limb1: 0x1bedd2f049ce086610aca319,\n            limb2: 0x18e887f968ab29d1,\n        },\n        r1a1: u288 {\n            limb0: 0x6f6eae477c15633e163e3366,\n            limb1: 0x3d0cca9a15ddc9f899d906bf,\n            limb2: 0x1a5066113f22d767,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfc23a674d089e9cfdefb1db8,\n            limb1: 0x9ddfd61d289b65a9b4254476,\n            limb2: 0x1e2f561324ef4447,\n        },\n        r0a1: u288 {\n            limb0: 0xf67a6a9e31f6975b220642ea,\n            limb1: 0xccd852893796296e4d1ed330,\n            limb2: 0x94ff1987d19b62,\n        },\n        r1a0: u288 {\n            limb0: 0x360c2a5aca59996d24cc1947,\n            limb1: 0x66c2d7d0d176a3bc53f386e8,\n            limb2: 0x2cfcc62a17fbeecb,\n        },\n        r1a1: u288 {\n            limb0: 0x2ddc73389dd9a9e34168d8a9,\n            limb1: 0xae9afc57944748b835cbda0f,\n            limb2: 0x12f0a1f8cf564067,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x963c90609635263045a730,\n            limb1: 0x25987316828b8c528c8dc05b,\n            limb2: 0x1a52af70953e2d93,\n        },\n        r0a1: u288 {\n            limb0: 0x5cb801def7d800e0a2dcdc65,\n            limb1: 0x7f06086a5846b035d7144e65,\n            limb2: 0x264229f1b248db7a,\n        },\n        r1a0: u288 {\n            limb0: 0x1c8fe795c6a55dfe7abf119e,\n            limb1: 0x98b10fc53fdbfce11d7827a0,\n            limb2: 0x13551fa74e7af913,\n        },\n        r1a1: u288 {\n            limb0: 0xdde6f69885b07fe44d932a52,\n            limb1: 0x9819b585503c5540fa115b13,\n            limb2: 0x1f4507e84f016add,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9c963c4bdade6ce3d460b077,\n            limb1: 0x1738311feefc76f565e34e8a,\n            limb2: 0x1aae0d6c9e9888ad,\n        },\n        r0a1: u288 {\n            limb0: 0x9272581fdf80b045c9c3f0a,\n            limb1: 0x3946807b0756e87666798edb,\n            limb2: 0x2bf6eeda2d8be192,\n        },\n        r1a0: u288 {\n            limb0: 0x3e957661b35995552fb475de,\n            limb1: 0xd8076fa48f93f09d8128a2a8,\n            limb2: 0xb6f87c3f00a6fcf,\n        },\n        r1a1: u288 {\n            limb0: 0xcf17d6cd2101301246a8f264,\n            limb1: 0x514d04ad989b91e697aa5a0e,\n            limb2: 0x175f17bbd0ad1219,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x894bc18cc70ca1987e3b8f9f,\n            limb1: 0xd4bfa535181f0f8659b063e3,\n            limb2: 0x19168d524164f463,\n        },\n        r0a1: u288 {\n            limb0: 0x850ee8d0e9b58b82719a6e92,\n            limb1: 0x9fc4eb75cbb027c137d48341,\n            limb2: 0x2b2f8a383d944fa0,\n        },\n        r1a0: u288 {\n            limb0: 0x5451c8974a709483c2b07fbd,\n            limb1: 0xd7e09837b8a2a3b78e7fe525,\n            limb2: 0x347d96be5e7fa31,\n        },\n        r1a1: u288 {\n            limb0: 0x823f2ba2743ee254e4c18a1e,\n            limb1: 0x6a61af5db035c443ed0f8172,\n            limb2: 0x1e840eee275d1063,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9cdb3f1da9cc795a6dd71925,\n            limb1: 0xa6b72d99ea73e7ec479df7de,\n            limb2: 0x2a0d16e5af0f972a,\n        },\n        r0a1: u288 {\n            limb0: 0x185981f7439b3abe06b2f010,\n            limb1: 0x4afb801363c27041866471a0,\n            limb2: 0x21a33b58bc0ebc30,\n        },\n        r1a0: u288 {\n            limb0: 0xd9c7c736ca2b67b6189ccfb9,\n            limb1: 0x8dd913714e0c8c9468564883,\n            limb2: 0x25e9300604680744,\n        },\n        r1a1: u288 {\n            limb0: 0xd2f83c58abf29fed21f8ac20,\n            limb1: 0xf99df3b0aafc57db31256a85,\n            limb2: 0x2ecdc1f4735da2e6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3890eaf1d657d63d18eac82d,\n            limb1: 0x962ede9002cf9e7fead8ac71,\n            limb2: 0xa41c746d7a471e2,\n        },\n        r0a1: u288 {\n            limb0: 0xdd8017fb853f2df76c7dad20,\n            limb1: 0x8ee50f79d3a8abfd3ccd4c1a,\n            limb2: 0x7f77df5036f64d2,\n        },\n        r1a0: u288 {\n            limb0: 0x251f40aedb747d8748c907aa,\n            limb1: 0xaff11c216293b73b2d2a53aa,\n            limb2: 0x2f94413282c71d76,\n        },\n        r1a1: u288 {\n            limb0: 0x255cffb680c8482747fe7934,\n            limb1: 0xc9b47382882ce9a2171f615c,\n            limb2: 0x1e12dbcbfacba1a9,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x18d630598e58bb5d0102b30e,\n            limb1: 0x9767e27b02a8da37411a2787,\n            limb2: 0x100a541662b9cd7c,\n        },\n        r0a1: u288 {\n            limb0: 0x4ca7313df2e168e7e5ea70,\n            limb1: 0xd49cce6abd50b574f31c2d72,\n            limb2: 0x78a2afbf72317e7,\n        },\n        r1a0: u288 {\n            limb0: 0x6d99388b0a1a67d6b48d87e0,\n            limb1: 0x1d8711d321a193be3333bc68,\n            limb2: 0x27e76de53a010ce1,\n        },\n        r1a1: u288 {\n            limb0: 0x77341bf4e1605e982fa50abd,\n            limb1: 0xc5cf10db170b4feaaf5f8f1b,\n            limb2: 0x762adef02274807,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7645fffb343e10e1e8748cb8,\n            limb1: 0xb7ee813d501408d841ec8e65,\n            limb2: 0xe90c74a2dd6516e,\n        },\n        r0a1: u288 {\n            limb0: 0x1491337b6e2af58a979eff05,\n            limb1: 0x41a56da5e78ec6d2aedcfb3c,\n            limb2: 0x234444f637b1fd1a,\n        },\n        r1a0: u288 {\n            limb0: 0x7f6df98a0ef48fea6a90a86d,\n            limb1: 0x67fe1fde059c8fcc5f4d2e06,\n            limb2: 0x2ba05dbf310dbde7,\n        },\n        r1a1: u288 {\n            limb0: 0xa0c862d762e402c3454d02b2,\n            limb1: 0x1b96d5c6695fe143c37a671e,\n            limb2: 0x24af700c84c87b54,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa137b991ba9048aee9fa0bc7,\n            limb1: 0xf5433785c186cd1100ab6b80,\n            limb2: 0xab519fd7cf8e7f9,\n        },\n        r0a1: u288 {\n            limb0: 0x90832f45d3398c60aa1a74e2,\n            limb1: 0x17f7ac209532723f22a344b,\n            limb2: 0x23db979f8481c5f,\n        },\n        r1a0: u288 {\n            limb0: 0x723b0e23c2808a5d1ea6b11d,\n            limb1: 0x3030030d26411f84235c3af5,\n            limb2: 0x122e78da5509eddb,\n        },\n        r1a1: u288 {\n            limb0: 0xf1718c1e21a9bc3ec822f319,\n            limb1: 0xf5ee6dfa3bd3272b2f09f0c7,\n            limb2: 0x5a29c1e27616b34,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1af83b0d07aaec86d9134a28,\n            limb1: 0x77bdb3e9aa87662797059a9c,\n            limb2: 0x273c84364e3713d2,\n        },\n        r0a1: u288 {\n            limb0: 0xcaf5ba9785faf45cfc296a4a,\n            limb1: 0x3163afd1009dbadd9c5a70bd,\n            limb2: 0x1aaea45eb51c82ce,\n        },\n        r1a0: u288 {\n            limb0: 0x5aba52ae705ce1af25e673aa,\n            limb1: 0x2dc8896c9ff279f6655024ef,\n            limb2: 0x300f0500b7b0b0d3,\n        },\n        r1a1: u288 {\n            limb0: 0x67f1e1afa662ba8900d60c26,\n            limb1: 0xf93114d70a2a3321729a7d2c,\n            limb2: 0x1cc57b64b47a626d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbc1ede480873fceb8739511e,\n            limb1: 0xd5a60533bd0ce7869efbc15,\n            limb2: 0x182c17d793eba74d,\n        },\n        r0a1: u288 {\n            limb0: 0x83bf38d91876ad8999516bc2,\n            limb1: 0x7756322ea3dc079289d51f2d,\n            limb2: 0x1d0f6156a89a4244,\n        },\n        r1a0: u288 {\n            limb0: 0x6aba652f197be8f99707b88c,\n            limb1: 0xbf94286c245794ea0f562f32,\n            limb2: 0x25a358967a2ca81d,\n        },\n        r1a1: u288 {\n            limb0: 0xc028cbff48c01433e8b23568,\n            limb1: 0xd2e791f5772ed43b056beba1,\n            limb2: 0x83eb38dff4960e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5fa7b4cb5791e57c2cf9780e,\n            limb1: 0xf5062eb2c532788091de2118,\n            limb2: 0xc38262afe4f4eac,\n        },\n        r0a1: u288 {\n            limb0: 0x6560785dd69d5a9a4917aa3b,\n            limb1: 0x6240334397d0134760854bb1,\n            limb2: 0x2d7c0dd3e38d8926,\n        },\n        r1a0: u288 {\n            limb0: 0xf3c91f209577810e63cbdf2f,\n            limb1: 0xa8acef680c1be04d12d702c8,\n            limb2: 0xa312088d3b32c07,\n        },\n        r1a1: u288 {\n            limb0: 0x96aa4853754a05becdc1bf51,\n            limb1: 0xa6cc53c2c1b1d383517e44b4,\n            limb2: 0x1f03c17658e08a24,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc2a2b787d8e718e81970db80,\n            limb1: 0x5372abeaf56844dee60d6198,\n            limb2: 0x131210153a2217d6,\n        },\n        r0a1: u288 {\n            limb0: 0x70421980313e09a8a0e5a82d,\n            limb1: 0xf75ca1f68f4b8deafb1d3b48,\n            limb2: 0x102113c9b6feb035,\n        },\n        r1a0: u288 {\n            limb0: 0x4654c11d73bda84873de9b86,\n            limb1: 0xa67601bca2e595339833191a,\n            limb2: 0x1c2b76e439adc8cc,\n        },\n        r1a1: u288 {\n            limb0: 0x9c53a48cc66c1f4d644105f2,\n            limb1: 0xa17a18867557d96fb7c2f849,\n            limb2: 0x1deb99799bd8b63a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc32026c56341297fa080790c,\n            limb1: 0xe23ad2ff283399133533b31f,\n            limb2: 0xa6860f5c968f7ad,\n        },\n        r0a1: u288 {\n            limb0: 0x2966cf259dc612c6a4d8957d,\n            limb1: 0xfba87ea86054f3db5774a08f,\n            limb2: 0xc73408b6a646780,\n        },\n        r1a0: u288 {\n            limb0: 0x6272ce5976d8eeba08f66b48,\n            limb1: 0x7dfbd78fa06509604c0cec8d,\n            limb2: 0x181ec0eaa6660e45,\n        },\n        r1a1: u288 {\n            limb0: 0x48af37c1a2343555fbf8a357,\n            limb1: 0xa7b5e1e20e64d6a9a9ce8e61,\n            limb2: 0x1147dcea39a47abd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x489a41fc4c066a737acf2b80,\n            limb1: 0x51199b4ef477e0976b9b663d,\n            limb2: 0x104f756144a01a99,\n        },\n        r0a1: u288 {\n            limb0: 0xce50cee9668a849dfec24567,\n            limb1: 0x932eabf096a077bd22814967,\n            limb2: 0x16210f0edb8ae837,\n        },\n        r1a0: u288 {\n            limb0: 0xb1ea43eab76757bea3ee7e67,\n            limb1: 0x859be02d0e28899de38a8bbb,\n            limb2: 0x69978ccc2f4f110,\n        },\n        r1a1: u288 {\n            limb0: 0xdfe4fd2c66e7f65bd840d459,\n            limb1: 0xf950d096dbee0e978b146cce,\n            limb2: 0x2960c5fa3fb2a10,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb58f6d75132f93ba48631e07,\n            limb1: 0xe8ae893990c83c6e393d1303,\n            limb2: 0x88809ba75ebe6c8,\n        },\n        r0a1: u288 {\n            limb0: 0xc3a2f92df3e3ae5fe1783de6,\n            limb1: 0x2778c4ec8a8c11311a178bd,\n            limb2: 0x24f1ee4b51cbf5fd,\n        },\n        r1a0: u288 {\n            limb0: 0xfbef4674342d73fb2363ab57,\n            limb1: 0x840f6f7c0db4f93e82f3523,\n            limb2: 0x1101e37593b6ed96,\n        },\n        r1a1: u288 {\n            limb0: 0xd263a20f18fd8a530227c627,\n            limb1: 0x7bf28bc9f5fc2d0b2585cac4,\n            limb2: 0x2e273774ae1e6e0c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4033c51e6e469818521cd2ae,\n            limb1: 0xb71a4629a4696b2759f8e19e,\n            limb2: 0x4f5744e29c1eb30,\n        },\n        r0a1: u288 {\n            limb0: 0xa4f47bbc60cb0649dca1c772,\n            limb1: 0x835f427106f4a6b897c6cf23,\n            limb2: 0x17ca6ea4855756bb,\n        },\n        r1a0: u288 {\n            limb0: 0x7f844a35c7eeadf511e67e57,\n            limb1: 0x8bb54fb0b3688cac8860f10,\n            limb2: 0x1c7258499a6bbebf,\n        },\n        r1a1: u288 {\n            limb0: 0x10d269c1779f96946e518246,\n            limb1: 0xce6fcef6676d0dacd395dc1a,\n            limb2: 0x2cf4c6ae1b55d87d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x59726c9960acdae933f6c2e,\n            limb1: 0xcb27824cfdc7f2a2953a7b46,\n            limb2: 0xab09e310409c7dc,\n        },\n        r0a1: u288 {\n            limb0: 0xda7641d0a2b62e75f06e7a4b,\n            limb1: 0xbdae979156600097567aeb5b,\n            limb2: 0x2811e7f67e12b969,\n        },\n        r1a0: u288 {\n            limb0: 0x57d4f4acd0d896441365692d,\n            limb1: 0x26d8fccbf118b66792fd5f15,\n            limb2: 0x552fe6247735d8b,\n        },\n        r1a1: u288 {\n            limb0: 0x94b8e030cbd114193e677c50,\n            limb1: 0x372b06a0c3c60fb7d11b850e,\n            limb2: 0x16f002c5d6018b19,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xab74a6bae36b17b1d2cc1081,\n            limb1: 0x904cf03d9d30b1fe9dc71374,\n            limb2: 0x14ffdd55685b7d82,\n        },\n        r0a1: u288 {\n            limb0: 0x277f7180b7cf33feded1583c,\n            limb1: 0xc029c3968a75b612303c4298,\n            limb2: 0x20ef4ba03605cdc6,\n        },\n        r1a0: u288 {\n            limb0: 0xd5a7a27c1baba3791ab18957,\n            limb1: 0x973730213d5d70d3e62d6db,\n            limb2: 0x24ca121c566eb857,\n        },\n        r1a1: u288 {\n            limb0: 0x9f4c2dea0492f548ae7d9e93,\n            limb1: 0xe584b6b251a5227c70c5188,\n            limb2: 0x22bcecac2bd5e51b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x340c82974f7221a53fc2f3ac,\n            limb1: 0x7146f18cd591d423874996e7,\n            limb2: 0xa6d154791056f46,\n        },\n        r0a1: u288 {\n            limb0: 0x70894ea6418890d53b5ee12a,\n            limb1: 0x882290cb53b795b0e7c8c208,\n            limb2: 0x1b5777dc18b2899b,\n        },\n        r1a0: u288 {\n            limb0: 0x99a0e528d582006a626206b6,\n            limb1: 0xb1cf825d80e199c5c9c795b5,\n            limb2: 0x2a97495b032f0542,\n        },\n        r1a1: u288 {\n            limb0: 0xc7cf5b455d6f3ba73debeba5,\n            limb1: 0xbb0a01235687223b7b71d0e5,\n            limb2: 0x250024ac44c35e3f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x265d8d504786c9a9d2c2dd1d,\n            limb1: 0xcddddab1a3af6fa901f267d3,\n            limb2: 0x1d5b892bac643be1,\n        },\n        r0a1: u288 {\n            limb0: 0xd200f75804e773fd94a69bff,\n            limb1: 0x5dcaa5c6bfcc08323700dd54,\n            limb2: 0x3b045d584b9e34e,\n        },\n        r1a0: u288 {\n            limb0: 0x364fc9381fdcfc87f48025fd,\n            limb1: 0x65d53f242d37bf7d6a422db4,\n            limb2: 0x5fc799e0624fbc5,\n        },\n        r1a1: u288 {\n            limb0: 0x40494a8cfe5af05b211a65c8,\n            limb1: 0x436bd2d7c12a4599cd65d28c,\n            limb2: 0x14329c50f1378c82,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa97c95148b4c5d08de3552aa,\n            limb1: 0x74fd19a4764ed2db2b947c9b,\n            limb2: 0x1f6645462132403f,\n        },\n        r0a1: u288 {\n            limb0: 0xcccb21d1679b6f037f5c6862,\n            limb1: 0x3796ff849627eae6d1373566,\n            limb2: 0xf569739c4b0bf20,\n        },\n        r1a0: u288 {\n            limb0: 0x3a69197d08132714a2d8cde9,\n            limb1: 0xae3e914eb52fc9f866335adb,\n            limb2: 0x22d97cabaecd8977,\n        },\n        r1a1: u288 {\n            limb0: 0x59a5a98b2a4b546d9fdf220d,\n            limb1: 0x8158806a0c4d6fc1bfc00dac,\n            limb2: 0x1e8455c351c421dc,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xccf841cf5c1cf8f4a0485e28,\n            limb1: 0xb5077662d0ce9d755af1446b,\n            limb2: 0x2b08658e9d5ba5cb,\n        },\n        r0a1: u288 {\n            limb0: 0x6ce62184a15685babd77f27f,\n            limb1: 0x5ff9bb7d74505b0542578299,\n            limb2: 0x7244563488bab2,\n        },\n        r1a0: u288 {\n            limb0: 0xec778048d344ac71275d961d,\n            limb1: 0x1273984019753000ad890d33,\n            limb2: 0x27c2855e60d361bd,\n        },\n        r1a1: u288 {\n            limb0: 0xa7a0071e22af2f3a79a12da,\n            limb1: 0xc84a6fd41c20759ff6ff169a,\n            limb2: 0x23e7ef2a308e49d1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd85b572f6e94368559bc9922,\n            limb1: 0x806d660df4c09f298ca99a8c,\n            limb2: 0xb5295ba1e28bea6,\n        },\n        r0a1: u288 {\n            limb0: 0x3309d566a80c2e9fe64a9417,\n            limb1: 0x5cb56c0e22896cf7b425f4f3,\n            limb2: 0x2194637a888395df,\n        },\n        r1a0: u288 {\n            limb0: 0x71882225419d48d5cdfd106f,\n            limb1: 0x83e49ccde853b0d80d85954f,\n            limb2: 0x95abeffbab1f6f1,\n        },\n        r1a1: u288 {\n            limb0: 0xa56f499db7c21d64a6f4cde4,\n            limb1: 0xfa807931f439377fded2c667,\n            limb2: 0x722a1ecfd5f676a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7105024c431a33683d9d0b9d,\n            limb1: 0x12e23637b641ab0e5b322ad8,\n            limb2: 0x2918e9e08c764c28,\n        },\n        r0a1: u288 {\n            limb0: 0x26384979d1f5417e451aeabf,\n            limb1: 0xacfb499e362291d0b053bbf6,\n            limb2: 0x2a6ad1a1f7b04ef6,\n        },\n        r1a0: u288 {\n            limb0: 0xba4db515be70c384080fc9f9,\n            limb1: 0x5a983a6afa9cb830fa5b66e6,\n            limb2: 0x8cc1fa494726a0c,\n        },\n        r1a1: u288 {\n            limb0: 0x59c9af9399ed004284eb6105,\n            limb1: 0xef37f66b058b4c971d9c96b0,\n            limb2: 0x2c1839afde65bafa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3b40bc013ebda1f6759eb1c5,\n            limb1: 0x41b1c4994f7006c3bfc44225,\n            limb2: 0x1104e881eeac0f26,\n        },\n        r0a1: u288 {\n            limb0: 0x1a0a3837d2925b22b29de16,\n            limb1: 0x7f161412b67cb737308ee1e4,\n            limb2: 0x2eca703d4f685eca,\n        },\n        r1a0: u288 {\n            limb0: 0x791ea927b5f79fedbd63a830,\n            limb1: 0xa43daf5bad2feef86dc7c3e5,\n            limb2: 0x11f25ca14404e535,\n        },\n        r1a1: u288 {\n            limb0: 0xf1b3aada072d4891b5de1aae,\n            limb1: 0x2f78e8d48428027439b02564,\n            limb2: 0x6a400f4c3b5b6fa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6bf13a27b0f4eb6657abc4b,\n            limb1: 0xf78d57f089bffdf07c676bb3,\n            limb2: 0x228e4aefbdd738df,\n        },\n        r0a1: u288 {\n            limb0: 0x4f41a40b04ec964619823053,\n            limb1: 0xfa3fb44f4a80641a9bb3bc09,\n            limb2: 0x29bf29a3d071ec4b,\n        },\n        r1a0: u288 {\n            limb0: 0x83823dcdff02bdc8a0e6aa03,\n            limb1: 0x79ac92f113de29251cd73a98,\n            limb2: 0x1ccdb791718d144,\n        },\n        r1a1: u288 {\n            limb0: 0xa074add9d066db9a2a6046b6,\n            limb1: 0xef3a70034497456c7d001a5,\n            limb2: 0x27d09562d815b4a6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3c8b4b05cbef623055ab9631,\n            limb1: 0xa357807ba01b50955f01beb1,\n            limb2: 0xd8e8272150b392,\n        },\n        r0a1: u288 {\n            limb0: 0xc69a03b91fd115f482bc7aa1,\n            limb1: 0xa175d02bfd1daa28271cc421,\n            limb2: 0x2c5e890fe1b00b05,\n        },\n        r1a0: u288 {\n            limb0: 0xe363626ab202f75cc610f018,\n            limb1: 0x46e37dbd0719e9c1b4951c4a,\n            limb2: 0x1873157667707b3f,\n        },\n        r1a1: u288 {\n            limb0: 0xd42f65f398d2c703199689b3,\n            limb1: 0x39ec231de4b4bd3adf1feeee,\n            limb2: 0x67fb3d358e060f0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x87a44d343cc761056f4f2eae,\n            limb1: 0x18016f16818253360d2c8adf,\n            limb2: 0x1bcd5c6e597d735e,\n        },\n        r0a1: u288 {\n            limb0: 0x593d7444c376f6d69289660b,\n            limb1: 0x1d6d97020b59cf2e4b38be4f,\n            limb2: 0x17133b62617f63a7,\n        },\n        r1a0: u288 {\n            limb0: 0x88cac99869bb335ec9553a70,\n            limb1: 0x95bcfa7f7c0b708b4d737afc,\n            limb2: 0x1eec79b9db274c09,\n        },\n        r1a1: u288 {\n            limb0: 0xe465a53e9fe085eb58a6be75,\n            limb1: 0x868e45cc13e7fd9d34e11839,\n            limb2: 0x2b401ce0f05ee6bb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x83f48fbac5c1b94486c2d037,\n            limb1: 0xf95d9333449543de78c69e75,\n            limb2: 0x7bca8163e842be7,\n        },\n        r0a1: u288 {\n            limb0: 0x60157b2ff6e4d737e2dac26b,\n            limb1: 0x30ab91893fcf39d9dcf1b89,\n            limb2: 0x29a58a02490d7f53,\n        },\n        r1a0: u288 {\n            limb0: 0x520f9cb580066bcf2ce872db,\n            limb1: 0x24a6e42c185fd36abb66c4ba,\n            limb2: 0x309b07583317a13,\n        },\n        r1a1: u288 {\n            limb0: 0x5a4c61efaa3d09a652c72471,\n            limb1: 0xfcb2676d6aa28ca318519d2,\n            limb2: 0x1405483699afa209,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc208b17fbf164d6b7c4c87ef,\n            limb1: 0xe5ef2141a5e0ed8d7880adc2,\n            limb2: 0x1fbb587de0172d44,\n        },\n        r0a1: u288 {\n            limb0: 0x5ecc8bd2960195067936331e,\n            limb1: 0x302d49c4538f5a4b41fffa,\n            limb2: 0x2dd8166b425b4bdb,\n        },\n        r1a0: u288 {\n            limb0: 0x6dda8e93ab2dad36a7a26d98,\n            limb1: 0x1a832cbd0bdfb31ca9670821,\n            limb2: 0x5e16617c8f62852,\n        },\n        r1a1: u288 {\n            limb0: 0xf9cba326c8ccbf69a8c7f8fb,\n            limb1: 0x6b295295947987bb33e9961b,\n            limb2: 0x186db8004776c0ea,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x241ca305ac4ceab57c4bc375,\n            limb1: 0xdada9084d8f73edb881a22fa,\n            limb2: 0xd143f30c17c29c7,\n        },\n        r0a1: u288 {\n            limb0: 0x352a5664ad09ed22111ef209,\n            limb1: 0xc2fe0792a993bfa1771d64ac,\n            limb2: 0x26f89bc07398c259,\n        },\n        r1a0: u288 {\n            limb0: 0x2c78925418a3651b7b9f3260,\n            limb1: 0xfe8414788b2aa8f5ac23d954,\n            limb2: 0x72ae0678e079f6d,\n        },\n        r1a1: u288 {\n            limb0: 0x2ae6e01f9e31fe942d84d61e,\n            limb1: 0x394dc28fbdae226870dad015,\n            limb2: 0x26a4bf5e924cec01,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbfdfdae86101e29da3e869b8,\n            limb1: 0xf969a9b961a28b872e56aac2,\n            limb2: 0x1afdc719440d90f0,\n        },\n        r0a1: u288 {\n            limb0: 0xee43c995686f13baa9b07266,\n            limb1: 0xbfa387a694c641cceee4443a,\n            limb2: 0x104d8c02eb7f60c8,\n        },\n        r1a0: u288 {\n            limb0: 0x8d451602b3593e798aecd7fb,\n            limb1: 0x69ffbefe7c5ac2cf68e8691e,\n            limb2: 0x2ea064a1bc373d28,\n        },\n        r1a1: u288 {\n            limb0: 0x6e7a663073bfe88a2b02326f,\n            limb1: 0x5faadb36847ca0103793fa4a,\n            limb2: 0x26c09a8ec9303836,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x824428c8f1355395a5d9ba68,\n            limb1: 0x376f82056ab1a3d451926ebc,\n            limb2: 0x1651053bdebca358,\n        },\n        r0a1: u288 {\n            limb0: 0xf5739b050710bb99609328bb,\n            limb1: 0x101222612f31bc7d1c0bd8e5,\n            limb2: 0x13b46682b3ffd5da,\n        },\n        r1a0: u288 {\n            limb0: 0xce3778bd830f3b8fcbc8fd80,\n            limb1: 0x8b28ab5db321c956a216239f,\n            limb2: 0x12e9fa0b5b37656,\n        },\n        r1a1: u288 {\n            limb0: 0x11d47326796ba49f7372575c,\n            limb1: 0x5439890841ee14932fdab241,\n            limb2: 0x20ae02265c066cc9,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3d038747ebac16adc1c50bdd,\n            limb1: 0xe3706a783e99f73ac742aa1a,\n            limb2: 0x17eac23b00b545ff,\n        },\n        r0a1: u288 {\n            limb0: 0xdc25ff0bd02abcbe502c4e37,\n            limb1: 0x39b92e6ebb65e5f2d8504f90,\n            limb2: 0x2415b5f61301dff6,\n        },\n        r1a0: u288 {\n            limb0: 0x9cdcb2146d15f37900db82ac,\n            limb1: 0x96c3940e2f5c5f8198fadee3,\n            limb2: 0x2f662ea79b473fc2,\n        },\n        r1a1: u288 {\n            limb0: 0xc0fb95686de65e504ed4c57a,\n            limb1: 0xec396c7c4275d4e493b00713,\n            limb2: 0x106d2aab8d90d517,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x54e4b692d0b04b114badd438,\n            limb1: 0x89b0bcf5ed2033f3629f3c6d,\n            limb2: 0x4ac1c520f363442,\n        },\n        r0a1: u288 {\n            limb0: 0x6e33ec73c0d5ed30e3079388,\n            limb1: 0x2cb4a77b53c17c54cb9dfd10,\n            limb2: 0x2968a3d8c2554718,\n        },\n        r1a0: u288 {\n            limb0: 0xe97a72fab0a46c6d08aa91e0,\n            limb1: 0xe6c0929ee3cd8208fefa545a,\n            limb2: 0x1bb29a0c8606c9f5,\n        },\n        r1a1: u288 {\n            limb0: 0x9a8644995c03499317a8e45c,\n            limb1: 0x11f6d94c94096a8d5b5d7e16,\n            limb2: 0x3ca2bfbaea0bdba,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x49bbb4d856921e3177c0b5bf,\n            limb1: 0x76d84d273694e662bdd5d364,\n            limb2: 0xea5dc611bdd369d,\n        },\n        r0a1: u288 {\n            limb0: 0x9e9fc3adc530fa3c5c6fd7fe,\n            limb1: 0x114bb0c0e8bd247da41b3883,\n            limb2: 0x6044124f85d2ce,\n        },\n        r1a0: u288 {\n            limb0: 0xa6e604cdb4e40982a97c084,\n            limb1: 0xef485caa56c7820be2f6b11d,\n            limb2: 0x280de6387dcbabe1,\n        },\n        r1a1: u288 {\n            limb0: 0xcaceaf6df5ca9f8a18bf2e1e,\n            limb1: 0xc5cce932cc6818b53136c142,\n            limb2: 0x12f1cd688682030c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x37497c23dcf629df58a5fa12,\n            limb1: 0x4fcd5534ae47bded76245ac9,\n            limb2: 0x1715ab081e32ac95,\n        },\n        r0a1: u288 {\n            limb0: 0x856275471989e2c288e3c83,\n            limb1: 0xb42d81a575b89b127a7821a,\n            limb2: 0x5fa75a0e4ae3118,\n        },\n        r1a0: u288 {\n            limb0: 0xeb22351e8cd345c23c0a3fef,\n            limb1: 0x271feb16d4b47d2267ac9d57,\n            limb2: 0x258f9950b9a2dee5,\n        },\n        r1a1: u288 {\n            limb0: 0xb5f75468922dc025ba7916fa,\n            limb1: 0x7e24515de90edf1bde4edd9,\n            limb2: 0x289145b3512d4d81,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x969615d01c0ea4dfb1e1a6b2,\n            limb1: 0xd77dd0fbf1448a668095626c,\n            limb2: 0x17bb395ada2e0445,\n        },\n        r0a1: u288 {\n            limb0: 0x8c49c2dd43d51285a7943c57,\n            limb1: 0xf5f9285614403018a99984aa,\n            limb2: 0x2cb65c9a5ac3782d,\n        },\n        r1a0: u288 {\n            limb0: 0x3791dc91878eee9614a543b7,\n            limb1: 0x808b3206de074f61c1014e23,\n            limb2: 0x2f63f37a727e6056,\n        },\n        r1a1: u288 {\n            limb0: 0x6f1ce5115bca50bfffd5af23,\n            limb1: 0xc20d51c6b761c502ff9afc29,\n            limb2: 0xd8674e970c4dfe4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x44091526974134aced04c6bb,\n            limb1: 0x20cef822214008ec6c938cbc,\n            limb2: 0x1369e9effc4a35e,\n        },\n        r0a1: u288 {\n            limb0: 0x52b595de3bb429b75d8dfa0b,\n            limb1: 0xc90240ebeed8793217853473,\n            limb2: 0x605405f1532ac21,\n        },\n        r1a0: u288 {\n            limb0: 0x47af4457f3ac9976bf779dea,\n            limb1: 0x832936741d545aaead5647cb,\n            limb2: 0x14cd80d3394a1b3,\n        },\n        r1a1: u288 {\n            limb0: 0xd7d82811675d7a5104cfef4,\n            limb1: 0x838c6ad9a0bf10cfc4e6b80c,\n            limb2: 0x129d3f962801867d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x95b7b32bcc3119c64a62a8de,\n            limb1: 0xe07184496f17bbd59a4b7bbd,\n            limb2: 0x1708c536fd78b531,\n        },\n        r0a1: u288 {\n            limb0: 0xfa85b5778c77166c1523a75e,\n            limb1: 0x89a00c53309a9e525bef171a,\n            limb2: 0x2d2287dd024e421,\n        },\n        r1a0: u288 {\n            limb0: 0x31fd0884eaf2208bf8831e72,\n            limb1: 0x537e04ea344beb57ee645026,\n            limb2: 0x23c7f99715257261,\n        },\n        r1a1: u288 {\n            limb0: 0x8c38b3aeea525f3c2d2fdc22,\n            limb1: 0xf838a99d9ec8ed6dcec6a2a8,\n            limb2: 0x2973d5159ddc479a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3f058d8c63fd905d3ca29b42,\n            limb1: 0x1f0a90982cc68e4ddcd83e57,\n            limb2: 0x240aeaae0783fbfa,\n        },\n        r0a1: u288 {\n            limb0: 0xedfee81d80da310fdf0d0d8,\n            limb1: 0xc2208e6de8806cf491bd74d4,\n            limb2: 0xb7318be62a476af,\n        },\n        r1a0: u288 {\n            limb0: 0x3c6920c8a24454c634f388fe,\n            limb1: 0x23328a006312a722ae09548b,\n            limb2: 0x1d2f1c58b80432e2,\n        },\n        r1a1: u288 {\n            limb0: 0xb72980574f7a877586de3a63,\n            limb1: 0xcd773b87ef4a29c16784c5ae,\n            limb2: 0x1f812c7e22f339c5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5502b81d15f7c7544bfe0e5b,\n            limb1: 0x313d44b9cbb6b1db3c2e19e1,\n            limb2: 0x3de8450efb34ca6,\n        },\n        r0a1: u288 {\n            limb0: 0x4c5017047d6babdf471554da,\n            limb1: 0xb48b8025f177b936503d1018,\n            limb2: 0x1663b50793893d61,\n        },\n        r1a0: u288 {\n            limb0: 0x547308fdb041d15648a5204e,\n            limb1: 0xd30b5b0cf7e71b06e163ca37,\n            limb2: 0xf12e11a9da90df6,\n        },\n        r1a1: u288 {\n            limb0: 0xb6893b6d66dc4cc63ef77caa,\n            limb1: 0xe00d12ef10c3485ae8afd77a,\n            limb2: 0x129ce385f3aee936,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x219a140154109ee7653b47d8,\n            limb1: 0xd87fa178daffefe3dc339320,\n            limb2: 0x1b64d217daf233d4,\n        },\n        r0a1: u288 {\n            limb0: 0xb3b2902c23a1e297afc723f1,\n            limb1: 0xec8c0334a6a16fb184bdead,\n            limb2: 0x194ee26f950ec5f,\n        },\n        r1a0: u288 {\n            limb0: 0xea0b18b28d70a0af43f81ec5,\n            limb1: 0x1ec1efd748ba4d8687c22bb3,\n            limb2: 0x1e98470402747e1,\n        },\n        r1a1: u288 {\n            limb0: 0x32ebb96106cdebef00b5f079,\n            limb1: 0x29e0caf709d34430343bf4fe,\n            limb2: 0x5d405f60a473bfc,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfeebe92941f95b6ea1d095bb,\n            limb1: 0x9c7962eb8bbeb95a9ca7cf50,\n            limb2: 0x290bdaf3b9a08dc3,\n        },\n        r0a1: u288 {\n            limb0: 0x686cfa11c9d4b93675495599,\n            limb1: 0xb1d69e17b4b5ebf64f0d51e1,\n            limb2: 0x2c18bb4bdc2e9567,\n        },\n        r1a0: u288 {\n            limb0: 0x17419b0f6a04bfc98d71527,\n            limb1: 0x80eba6ff02787e3de964a4d1,\n            limb2: 0x26087bb100e7ff9f,\n        },\n        r1a1: u288 {\n            limb0: 0x17c4ee42c3f612c43a08f689,\n            limb1: 0x7276bdda2df6d51a291dba69,\n            limb2: 0x40a7220ddb393e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfcbba4528085627c1a57561e,\n            limb1: 0x1077be1789bfa914646ecc48,\n            limb2: 0x1daf99b543be0c2,\n        },\n        r0a1: u288 {\n            limb0: 0x73889773fb3e9955a83f6371,\n            limb1: 0x65e8a51749a2070ca7d04fe3,\n            limb2: 0x193e02f206b649b5,\n        },\n        r1a0: u288 {\n            limb0: 0x4bcdb53209d1e271c3981a53,\n            limb1: 0xcd0c66c9c62656f385896b9a,\n            limb2: 0x4fae5ec45196d1f,\n        },\n        r1a1: u288 {\n            limb0: 0xff4b9fb7c654595edbc25c37,\n            limb1: 0x9fb627a4ff2fd8e4aeb9855f,\n            limb2: 0x14f93e3bc9bb22dd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x830d777c19040571a1d72fd0,\n            limb1: 0x651b2c6b8c292020817a633f,\n            limb2: 0x268af1e285bc59ff,\n        },\n        r0a1: u288 {\n            limb0: 0xede78baa381c5bce077f443d,\n            limb1: 0x540ff96bae21cd8b9ae5438b,\n            limb2: 0x12a1fa7e3b369242,\n        },\n        r1a0: u288 {\n            limb0: 0x797c0608e5a535d8736d4bc5,\n            limb1: 0x375faf00f1147656b7c1075f,\n            limb2: 0xda60fab2dc5a639,\n        },\n        r1a1: u288 {\n            limb0: 0x610d26085cfbebdb30ce476e,\n            limb1: 0x5bc55890ff076827a09e8444,\n            limb2: 0x14272ee2d25f20b7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4df45d410833e4569501b62,\n            limb1: 0x5699ff1c49fc63f8f017a20e,\n            limb2: 0x1c2b4976da64f44e,\n        },\n        r0a1: u288 {\n            limb0: 0xa371e6c9dc1278d9b692f5c0,\n            limb1: 0xe2818a89c204727bbb77e230,\n            limb2: 0x2524c5673fb891de,\n        },\n        r1a0: u288 {\n            limb0: 0x8b35f28524701efaaa2f36e9,\n            limb1: 0x7d0defb1afd7565b6ca0969,\n            limb2: 0x3138ffe86fc3f3c,\n        },\n        r1a1: u288 {\n            limb0: 0xbf20ec1ddaebd714888b9623,\n            limb1: 0x16edc17da676619889e1f93f,\n            limb2: 0x2895535d6bfd83ad,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd6862e1a4ca3b2baf6f8d8aa,\n            limb1: 0x96f9066dded3a3d899025af4,\n            limb2: 0x1a98af9f0d48fd3,\n        },\n        r0a1: u288 {\n            limb0: 0x276b417cc61ea259c114314e,\n            limb1: 0x464399e5e0037b159866b246,\n            limb2: 0x12cc97dcf32896b5,\n        },\n        r1a0: u288 {\n            limb0: 0xef72647f4c2d08fc038c4377,\n            limb1: 0x34883cea19be9a490a93cf2b,\n            limb2: 0x10d01394daa61ed0,\n        },\n        r1a1: u288 {\n            limb0: 0xdf345239ece3acaa62919643,\n            limb1: 0x914780908ece64e763cca062,\n            limb2: 0xee2a80dbd2012a3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1d5a31f4d08a0ebf7e071e00,\n            limb1: 0xcd1244dd95dd30005f531f81,\n            limb2: 0xb4cb469a2dcf4f1,\n        },\n        r0a1: u288 {\n            limb0: 0x7c5938adaf38b355092de1f1,\n            limb1: 0x292ab08995b293abfcba14b,\n            limb2: 0x1fd126a2b9f37c67,\n        },\n        r1a0: u288 {\n            limb0: 0x6e9d352b02a7cb771fcc33f9,\n            limb1: 0x7754d8536eefda2025a07340,\n            limb2: 0x1840289291c35a72,\n        },\n        r1a1: u288 {\n            limb0: 0xe85f465417b7bd758c547b2e,\n            limb1: 0xf7f703c3bc55ff8a01fa9365,\n            limb2: 0xfa301227880a841,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2f943bcffafbec474e14056,\n            limb1: 0xe36cbbcaa047d892ce518c06,\n            limb2: 0x28e9edc7ec764cec,\n        },\n        r0a1: u288 {\n            limb0: 0xa4e5768f524886ccd57ef67f,\n            limb1: 0x846c3c4a1b3d610c6598a6ca,\n            limb2: 0x26c1dd1c6cef5230,\n        },\n        r1a0: u288 {\n            limb0: 0x646a7a17c9c2d11cf18ce24c,\n            limb1: 0x9c3bc28ac69dc0fa40709bc3,\n            limb2: 0x22355c8b8f9caf41,\n        },\n        r1a1: u288 {\n            limb0: 0x532978b7044846c302ea39dc,\n            limb1: 0xb3b1a62ec6c95c12a8ee1c3c,\n            limb2: 0x1b9cf068f2f7f74,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xae2e80376c9eb92d7fdf62f4,\n            limb1: 0xc8987db182a167029720321d,\n            limb2: 0x32dd5c4a5ead22e,\n        },\n        r0a1: u288 {\n            limb0: 0xed934df95403f36e080370c1,\n            limb1: 0x82991943f3810cb571dd5476,\n            limb2: 0x1c8835c07868aab0,\n        },\n        r1a0: u288 {\n            limb0: 0xe69df9d36c3ef19b14ac3256,\n            limb1: 0xeffc663918d000a46b1308f3,\n            limb2: 0x2d3d6a3aa18904ea,\n        },\n        r1a1: u288 {\n            limb0: 0x49fd82b2c5900a89f4e3e03,\n            limb1: 0x4b4cedd7d8bab16a1290e7a7,\n            limb2: 0x13c64649ca8e5620,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa4058149e82ea51362b79be4,\n            limb1: 0x734eba2621918a820ae44684,\n            limb2: 0x110a314a02272b1,\n        },\n        r0a1: u288 {\n            limb0: 0xe2b43963ef5055df3c249613,\n            limb1: 0x409c246f762c0126a1b3b7b7,\n            limb2: 0x19aa27f34ab03585,\n        },\n        r1a0: u288 {\n            limb0: 0x179aad5f620193f228031d62,\n            limb1: 0x6ba32299b05f31b099a3ef0d,\n            limb2: 0x157724be2a0a651f,\n        },\n        r1a1: u288 {\n            limb0: 0xa33b28d9a50300e4bbc99137,\n            limb1: 0x262a51847049d9b4d8cea297,\n            limb2: 0x189acb4571d50692,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x958cb28384b32ba53919aad6,\n            limb1: 0x7cb6afd288225969b3ed04a7,\n            limb2: 0x1f6c88c19f868c64,\n        },\n        r0a1: u288 {\n            limb0: 0x1f9383d92c96e715fa8a0e4,\n            limb1: 0x185e1f31310dcf1342282c7f,\n            limb2: 0x9d2bbb84bf8c8a,\n        },\n        r1a0: u288 {\n            limb0: 0x2ebb25e92c5e5775f24e5f43,\n            limb1: 0x5a0dd9406740da093e0e9df9,\n            limb2: 0x20542767fe53e03a,\n        },\n        r1a1: u288 {\n            limb0: 0xfc3d9b88c92d661c9f2e49d4,\n            limb1: 0xd5c675a3022548b290b637dc,\n            limb2: 0x6fc49e7ff4bc3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x29bd4381ae4afc677ee37ed6,\n            limb1: 0x29ed43453f9a008d9176f004,\n            limb2: 0x24134eb915104f43,\n        },\n        r0a1: u288 {\n            limb0: 0x81597f82bb67e90a3e72bdd2,\n            limb1: 0xab3bbde5f7bbb4df6a6b5c19,\n            limb2: 0x19ac61eea40a367c,\n        },\n        r1a0: u288 {\n            limb0: 0xe30a79342fb3199651aee2fa,\n            limb1: 0xf500f028a73ab7b7db0104a3,\n            limb2: 0x808b50e0ecb5e4d,\n        },\n        r1a1: u288 {\n            limb0: 0x55f2818453c31d942444d9d6,\n            limb1: 0xf6dd80c71ab6e893f2cf48db,\n            limb2: 0x13c3ac4488abd138,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5c0c3c2206b28bed76db5fb9,\n            limb1: 0xa81f45c675f24fab51c8325a,\n            limb2: 0xd27686198826ba2,\n        },\n        r0a1: u288 {\n            limb0: 0x9ce02274becdc697b91bdc82,\n            limb1: 0x193674102a7fa372f1e3864,\n            limb2: 0x1ad17052d923f3ab,\n        },\n        r1a0: u288 {\n            limb0: 0x2ab1b4cab08b97770060cd95,\n            limb1: 0x5b7cae55f9b2ef94b80bc0fc,\n            limb2: 0x4319d424bab41a3,\n        },\n        r1a1: u288 {\n            limb0: 0xd80167cf68050f7988b0d7b,\n            limb1: 0x4177064bd3572a973e0afd8,\n            limb2: 0xa5c5ddbd56184d6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd1464269bbeafa546f559b8f,\n            limb1: 0xab7f7dcd1ac32b86979471cf,\n            limb2: 0x6a38256ee96f113,\n        },\n        r0a1: u288 {\n            limb0: 0xf14d50984e65f9bc41df4e7e,\n            limb1: 0x350aff9be6f9652ad441a3ad,\n            limb2: 0x1b1e60534b0a6aba,\n        },\n        r1a0: u288 {\n            limb0: 0x9e98507da6cc50a56f023849,\n            limb1: 0xcf8925e03f2bb5c1ba0962dd,\n            limb2: 0x2b18961810a62f87,\n        },\n        r1a1: u288 {\n            limb0: 0x3a4c61b937d4573e3f2da299,\n            limb1: 0x6f4c6c13fd90f4edc322796f,\n            limb2: 0x13f4e99b6a2f025e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf86c13c653367f48043babc5,\n            limb1: 0x52798720b6abfea4f78e8755,\n            limb2: 0x2a08b546b9a04e01,\n        },\n        r0a1: u288 {\n            limb0: 0x3a3897216778c8d89c902498,\n            limb1: 0xe9e85640d8cfb88eac53d7a4,\n            limb2: 0x22ed91f0b0f7b0a7,\n        },\n        r1a0: u288 {\n            limb0: 0xa1e20caf4a06b7069c5fcade,\n            limb1: 0xce1ab9c14ede733440fe4d4f,\n            limb2: 0x29511f7e24afbc7a,\n        },\n        r1a1: u288 {\n            limb0: 0x2cb71e6fb0c40ed481c482d2,\n            limb1: 0xb4a3dfc3f1f8bf08f18b9963,\n            limb2: 0x20cc0deb8bc5808a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe0115a79120ae892a72f3dcb,\n            limb1: 0xec67b5fc9ea414a4020135f,\n            limb2: 0x1ee364e12321904a,\n        },\n        r0a1: u288 {\n            limb0: 0xa74d09666f9429c1f2041cd9,\n            limb1: 0x57ffe0951f863dd0c1c2e97a,\n            limb2: 0x154877b2d1908995,\n        },\n        r1a0: u288 {\n            limb0: 0xcbe5e4d2d2c91cdd4ccca0,\n            limb1: 0xe6acea145563a04b2821d120,\n            limb2: 0x18213221f2937afb,\n        },\n        r1a1: u288 {\n            limb0: 0xfe20afa6f6ddeb2cb768a5ae,\n            limb1: 0x1a3b509131945337c3568fcf,\n            limb2: 0x127b5788263a927e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1682a38c2b0f08b940585776,\n            limb1: 0x4bcfdd206314bf8fb7bbd3d9,\n            limb2: 0x72478229fdf9b3e,\n        },\n        r0a1: u288 {\n            limb0: 0x7655cf8178fd96eab34ed64c,\n            limb1: 0xa8a410386256daf6f497a426,\n            limb2: 0x24a563cb3fd6a97c,\n        },\n        r1a0: u288 {\n            limb0: 0xcc3e2f74f61e4ad3dd0ec353,\n            limb1: 0xd8d2eed02ef01ce6c895d54b,\n            limb2: 0x2f0b5abbb25e5201,\n        },\n        r1a1: u288 {\n            limb0: 0x6ca200200f72fc879747d649,\n            limb1: 0xfe2a8dfce46aa04cc6cac8bf,\n            limb2: 0x2538761bcc075511,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe7c658aecdab4db3c83f7927,\n            limb1: 0xfbf162264ca04ee50c70bde8,\n            limb2: 0x2a20f4565b7ff885,\n        },\n        r0a1: u288 {\n            limb0: 0x45b1c2f0a1226361f42683c0,\n            limb1: 0x9acdd892c48c08de047296bc,\n            limb2: 0x27836373108925d4,\n        },\n        r1a0: u288 {\n            limb0: 0xc0ea9294b345e6d4892676a7,\n            limb1: 0xcba74eca77086af245d1606e,\n            limb2: 0xf20edac89053e72,\n        },\n        r1a1: u288 {\n            limb0: 0x4c92a28f2779a527a68a938c,\n            limb1: 0x3a1c3c55ff9d20eac109fab3,\n            limb2: 0x21c4a8c524b1ee7d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb4a2a27e2287cfee7a9682c4,\n            limb1: 0x1ce9a7e33aac888cfff41045,\n            limb2: 0x15862361b72f510c,\n        },\n        r0a1: u288 {\n            limb0: 0xf2ad35e6e2883182aa6b4fd1,\n            limb1: 0xe770aff5925910a31f0953c9,\n            limb2: 0x2620607848308ab0,\n        },\n        r1a0: u288 {\n            limb0: 0xd96d83a873e922ac6356c949,\n            limb1: 0xd55163234b216b61b10f5648,\n            limb2: 0xde3b9a35927e127,\n        },\n        r1a1: u288 {\n            limb0: 0xab124d1d7268f0e796dbe62c,\n            limb1: 0x2853f3ef7aa34d7a0e228ce2,\n            limb2: 0x13beaa5c47f7b339,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa68021d593c46246af22559e,\n            limb1: 0x5c2cfc5bc4cd1b48f4704134,\n            limb2: 0x296066ede1298f8c,\n        },\n        r0a1: u288 {\n            limb0: 0xfe17dd6765eb9b9625eb6a84,\n            limb1: 0x4e35dd8e8f6088bb14299f8d,\n            limb2: 0x1a380ab2689106e4,\n        },\n        r1a0: u288 {\n            limb0: 0x82bacf337ca09853df42bc59,\n            limb1: 0xa15de4ef34a30014c5a2e9ae,\n            limb2: 0x243cc0cec53c778b,\n        },\n        r1a1: u288 {\n            limb0: 0xcb2a1bf18e3ba9349b0a8bf2,\n            limb1: 0x35134b2505cbb5a4c91f0ac4,\n            limb2: 0x25e45206b13f43c4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8e97b007ffd9891bd0e77650,\n            limb1: 0x77671278ac33f17df6b1db88,\n            limb2: 0x243daddc47f5d5c2,\n        },\n        r0a1: u288 {\n            limb0: 0x655fe4c8bbe5ee06aaa0054b,\n            limb1: 0xf751450b02c93c7ddea95938,\n            limb2: 0x21aa988e950d563f,\n        },\n        r1a0: u288 {\n            limb0: 0xb51b3b6b8582de3eb0549518,\n            limb1: 0x84a1031766b7e465f5bbf40c,\n            limb2: 0xd46c2d5b95e5532,\n        },\n        r1a1: u288 {\n            limb0: 0x50b6ddd8a5eef0067652191e,\n            limb1: 0x298832a0bc46ebed8bff6190,\n            limb2: 0xb568b4fe8311f93,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x95142735dac6534042d2d05e,\n            limb1: 0x7403f0a3b4d2a49a7009872f,\n            limb2: 0x2b5ce066c5012949,\n        },\n        r0a1: u288 {\n            limb0: 0xfb9dd943bee0316b632fd1fc,\n            limb1: 0xe28dc017ad7c82d573ca64d4,\n            limb2: 0x1d814d88b3e026ce,\n        },\n        r1a0: u288 {\n            limb0: 0x1722d6e82c213b5f5bb54b06,\n            limb1: 0xe97b4fa087e0ac0ade7e9fb3,\n            limb2: 0x117a4f1562cdc338,\n        },\n        r1a1: u288 {\n            limb0: 0x16204b8c2a7d006220778fc4,\n            limb1: 0x23ebf70a7d3687322b0a559b,\n            limb2: 0x117d1eaacfcf39d0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xac3a5cf29dd67034cce999d8,\n            limb1: 0xabf7913b1ad3df78f63ec920,\n            limb2: 0x10e5e9415124c78a,\n        },\n        r0a1: u288 {\n            limb0: 0xfe328b7478a7b96b0521d32d,\n            limb1: 0x486efcf8db262be440c2f384,\n            limb2: 0x118851b013a7a2f6,\n        },\n        r1a0: u288 {\n            limb0: 0xfcea8d918c9420959fc131c1,\n            limb1: 0x2c76ec0524a5b61c91661734,\n            limb2: 0xbfe2e9e02621600,\n        },\n        r1a1: u288 {\n            limb0: 0xc55d8e0d7ac126b8e0dfa148,\n            limb1: 0x178dd414d941be3cb70299bb,\n            limb2: 0x15b52c5f3e3c78fe,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xddb4db99db681d35f71a159c,\n            limb1: 0xf71a330019414e6fdee75700,\n            limb2: 0x14d9838e7d1918bb,\n        },\n        r0a1: u288 {\n            limb0: 0x203c8bac71951a5f2c653710,\n            limb1: 0x9fc93f8da38ecc2957313982,\n            limb2: 0x7b6d981259cabd9,\n        },\n        r1a0: u288 {\n            limb0: 0xa7297cdb5be0cc45d48ca6af,\n            limb1: 0xa07b4b025ebe6c960eddfc56,\n            limb2: 0xef2a5c30ef00652,\n        },\n        r1a1: u288 {\n            limb0: 0xb7f05c76d860e9122b36ecd7,\n            limb1: 0x407d6522e1f9ce2bcbf80eda,\n            limb2: 0x197625a558f32c36,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4e67d839c8646de27691dae2,\n            limb1: 0xa113e037559795425b1ca935,\n            limb2: 0xe0f8316d3adace6,\n        },\n        r0a1: u288 {\n            limb0: 0xac5484d96d5e16708aa20635,\n            limb1: 0x3cf76c0c779c04ac350707d7,\n            limb2: 0x189022b6900c47,\n        },\n        r1a0: u288 {\n            limb0: 0x4c4cf7790d369d15fe931a4e,\n            limb1: 0xeccffa7915f2d1fb735abf95,\n            limb2: 0x18f28ca407bde4a,\n        },\n        r1a1: u288 {\n            limb0: 0x2b7dcc570e7213f9c18015d3,\n            limb1: 0x8196ba5914d477135145617,\n            limb2: 0x1d11ba6a93642a1d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb0f04df9dec94801e48a6ff7,\n            limb1: 0xdc59d087c627d38334e5b969,\n            limb2: 0x3d36e11420be053,\n        },\n        r0a1: u288 {\n            limb0: 0xc80f070001aa1586189e0215,\n            limb1: 0xff849fcbbbe7c00c83ab5282,\n            limb2: 0x2a2354b2882706a6,\n        },\n        r1a0: u288 {\n            limb0: 0x48cf70c80f08b6c7dc78adb2,\n            limb1: 0xc6632efa77b36a4a1551d003,\n            limb2: 0xc2d3533ece75879,\n        },\n        r1a1: u288 {\n            limb0: 0x63e82ba26617416a0b76ddaa,\n            limb1: 0xdaceb24adda5a049bed29a50,\n            limb2: 0x1a82061a3344043b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbd69421a5b200ff9b38f831f,\n            limb1: 0x3fe4fe938fccbaeeea650793,\n            limb2: 0x19df4f325f19d790,\n        },\n        r0a1: u288 {\n            limb0: 0x460ec10fdc20f258517b0ede,\n            limb1: 0xed5f65a9e2470b25df5fef70,\n            limb2: 0x1b61c823ebf0b10a,\n        },\n        r1a0: u288 {\n            limb0: 0x658cfa5631cd4889f4c5faf1,\n            limb1: 0x7fc4136b63b1f54e46d634cb,\n            limb2: 0xb2cdd6f5da71516,\n        },\n        r1a1: u288 {\n            limb0: 0xf29e04c6192dd039241e5573,\n            limb1: 0xaed4fb46d1273a5895ee2308,\n            limb2: 0x291ea193f947c5dc,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9152fecf0f523415acc7c7be,\n            limb1: 0xd9632cbfccc4ea5d7bf31177,\n            limb2: 0x2d7288c5f8c83ab1,\n        },\n        r0a1: u288 {\n            limb0: 0x53144bfe4030f3f9f5efda8,\n            limb1: 0xfeec394fbf392b11c66bae27,\n            limb2: 0x28840813ab8a200b,\n        },\n        r1a0: u288 {\n            limb0: 0xdec3b11fbc28b305d9996ec7,\n            limb1: 0x5b5f8d9d17199e149c9def6e,\n            limb2: 0x10c1a149b6751bae,\n        },\n        r1a1: u288 {\n            limb0: 0x665e8eb7e7d376a2d921c889,\n            limb1: 0xfdd76d06e46ee1a943b8788d,\n            limb2: 0x8bb21d9960e837b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3a67c28a175200e631aa506a,\n            limb1: 0x7397303a34968ff17c06e801,\n            limb2: 0x1b81e0c63123688b,\n        },\n        r0a1: u288 {\n            limb0: 0x3490cfd4f076c621dac4a12c,\n            limb1: 0xec183578c91b90b72e5887b7,\n            limb2: 0x179fb354f608da00,\n        },\n        r1a0: u288 {\n            limb0: 0x9322bde2044dde580a78ba33,\n            limb1: 0xfc74821b668d3570cad38f8b,\n            limb2: 0x8cec54a291f5e57,\n        },\n        r1a1: u288 {\n            limb0: 0xc2818b6a9530ee85d4b2ae49,\n            limb1: 0x8d7b651ad167f2a43d7a2d0a,\n            limb2: 0x7c9ca9bab0ffc7f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb3b784e642887a8476f572e,\n            limb1: 0xed02f127df5eed0cb36a3bf8,\n            limb2: 0xba1df3a2dfa44,\n        },\n        r0a1: u288 {\n            limb0: 0x42c8ddcabfe9a7ad125d0ca9,\n            limb1: 0x7893651eea284a367016e3f4,\n            limb2: 0x169246616ba43650,\n        },\n        r1a0: u288 {\n            limb0: 0x1c64d4f3656e04d1a72b8d48,\n            limb1: 0xab4d9597432f9192baa38fde,\n            limb2: 0x166f0057c0435ce,\n        },\n        r1a1: u288 {\n            limb0: 0xff9760ba5717ba174df6f8f8,\n            limb1: 0x426768d82386947c5babfd7f,\n            limb2: 0x7ca1e1a5d1a0c5e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd5f536bc65864831172f42a0,\n            limb1: 0x26dcfa4e457220eb911294ce,\n            limb2: 0x105261c2c69ce433,\n        },\n        r0a1: u288 {\n            limb0: 0x6e00517fac26565662abb1ad,\n            limb1: 0xa14626f27b8158a553767216,\n            limb2: 0x22d2abd4602c1c6b,\n        },\n        r1a0: u288 {\n            limb0: 0x92f008ec8c7f2dc8a8571a28,\n            limb1: 0x856f48547c31d1368fb8c686,\n            limb2: 0x2ed469b49fa7d7ea,\n        },\n        r1a1: u288 {\n            limb0: 0xf50c1feb101e5ceb3b16ec4e,\n            limb1: 0x3a230af636b80f192ec0e399,\n            limb2: 0x1764922866d60a5e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa576408f8300de3a7714e6ae,\n            limb1: 0xe1072c9a16f202ecf37fbc34,\n            limb2: 0x1b0cb1e2b5871263,\n        },\n        r0a1: u288 {\n            limb0: 0x2128e2314694b663286e231e,\n            limb1: 0x54bea71957426f002508f715,\n            limb2: 0x36ecc5dbe069dca,\n        },\n        r1a0: u288 {\n            limb0: 0x17c77cd88f9d5870957850ce,\n            limb1: 0xb7f4ec2bc270ce30538fe9b8,\n            limb2: 0x766279e588592bf,\n        },\n        r1a1: u288 {\n            limb0: 0x1b6caddf18de2f30fa650122,\n            limb1: 0x40b77237a29cada253c126c6,\n            limb2: 0x74ff1349b1866c8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbb540898cf8935c1b1173cb4,\n            limb1: 0xc1418f5298a4a4bf6f2e3bd3,\n            limb2: 0xc988fb564cf08d8,\n        },\n        r0a1: u288 {\n            limb0: 0xf09b861d7134a245b7e364b4,\n            limb1: 0xa92280b0deb7fe5180ed4b7a,\n            limb2: 0x7aa813cc9c85d7b,\n        },\n        r1a0: u288 {\n            limb0: 0xed06ae875b1fc56f5d1c3f8e,\n            limb1: 0xc41bdd2f5b4150a210b33d70,\n            limb2: 0x2cea2b050d19c785,\n        },\n        r1a1: u288 {\n            limb0: 0x9790a2fc143b9afb8a56de04,\n            limb1: 0xe74dd4109ce475db08d477a2,\n            limb2: 0x19dba5858fcd648f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3603266e05560becab36faef,\n            limb1: 0x8c3b88c9390278873dd4b048,\n            limb2: 0x24a715a5d9880f38,\n        },\n        r0a1: u288 {\n            limb0: 0xe9f595b111cfd00d1dd28891,\n            limb1: 0x75c6a392ab4a627f642303e1,\n            limb2: 0x17b34a30def82ab6,\n        },\n        r1a0: u288 {\n            limb0: 0xe706de8f35ac8372669fc8d3,\n            limb1: 0x16cc7f4032b3f3ebcecd997d,\n            limb2: 0x166eba592eb1fc78,\n        },\n        r1a1: u288 {\n            limb0: 0x7d584f102b8e64dcbbd1be9,\n            limb1: 0x2ead4092f009a9c0577f7d3,\n            limb2: 0x2fe2c31ee6b1d41e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72253d939632f8c28fb5763,\n            limb1: 0x9b943ab13cad451aed1b08a2,\n            limb2: 0xdb9b2068e450f10,\n        },\n        r0a1: u288 {\n            limb0: 0x80f025dcbce32f6449fa7719,\n            limb1: 0x8a0791d4d1ed60b86e4fe813,\n            limb2: 0x1b1bd5dbce0ea966,\n        },\n        r1a0: u288 {\n            limb0: 0xaa72a31de7d815ae717165d4,\n            limb1: 0x501c29c7b6aebc4a1b44407f,\n            limb2: 0x464aa89f8631b3a,\n        },\n        r1a1: u288 {\n            limb0: 0x6b8d137e1ea43cd4b1f616b1,\n            limb1: 0xdd526a510cc84f150cc4d55a,\n            limb2: 0x1da2ed980ebd3f29,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2990abd5a415b597653aecc7,\n            limb1: 0xf6d59e5d9f2735e0b5196522,\n            limb2: 0x12cfd626116f3e90,\n        },\n        r0a1: u288 {\n            limb0: 0x85ff23da49c13991049c2a30,\n            limb1: 0x29ea9dc0564c06318ee970c6,\n            limb2: 0x2f579deeac8b19a,\n        },\n        r1a0: u288 {\n            limb0: 0x458c505570a4bc6cd8751128,\n            limb1: 0xcff5c9e1d1d4c1f64e37982c,\n            limb2: 0x1bfc56f58e4e33f5,\n        },\n        r1a1: u288 {\n            limb0: 0x364b1be00e65d893a9fabb7,\n            limb1: 0xfa38e20e90619e224b054d86,\n            limb2: 0x1d3724ff58e69e9d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x604234358fe8a608e232b055,\n            limb1: 0x81bf97d1a0380fa64ffab70d,\n            limb2: 0x2fe1c2c2521704f2,\n        },\n        r0a1: u288 {\n            limb0: 0x49746a3559cdc3031fd62abe,\n            limb1: 0xc0676e4a367566526115e5d5,\n            limb2: 0x793d580a7f8d698,\n        },\n        r1a0: u288 {\n            limb0: 0x434be9b6d4f5097159fe303b,\n            limb1: 0x1eff6c60a4c52f744e8e2276,\n            limb2: 0x210a1915eaab4b20,\n        },\n        r1a1: u288 {\n            limb0: 0x4e6f7e9d87f16fc7601cc783,\n            limb1: 0xd4bec91933ea7c5f9518ea04,\n            limb2: 0x1c45a57b0c8d62d7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x867cced8a010850958f41ff5,\n            limb1: 0x6a37fdb2b8993eed18bafe8e,\n            limb2: 0x21b9f782109e5a7,\n        },\n        r0a1: u288 {\n            limb0: 0x7307477d650618e66de38d0f,\n            limb1: 0xacb622ce92a7e393dbe10ba1,\n            limb2: 0x236e70838cee0ed5,\n        },\n        r1a0: u288 {\n            limb0: 0xb564a308aaf5dda0f4af0f0d,\n            limb1: 0x55fc71e2f13d8cb12bd51e74,\n            limb2: 0x294cf115a234a9e9,\n        },\n        r1a1: u288 {\n            limb0: 0xbd166057df55c135b87f35f3,\n            limb1: 0xf9f29b6c50f1cce9b85ec9b,\n            limb2: 0x2e8448d167f20f96,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8af780d4f3611de614224cf4,\n            limb1: 0xb3411d6969eed4b8286c7185,\n            limb2: 0x13f31915350d79e7,\n        },\n        r0a1: u288 {\n            limb0: 0xefebdf46e1c80e1bbfc388c4,\n            limb1: 0xbab06fd5263cc18fb57d9e95,\n            limb2: 0xe1c884a026d918e,\n        },\n        r1a0: u288 {\n            limb0: 0x845caa8c849832ee6cfe63b1,\n            limb1: 0xaedd1db275061decc9cd7b3a,\n            limb2: 0x23787e28f22f3546,\n        },\n        r1a1: u288 {\n            limb0: 0x28e41c19ff26092ec696db3f,\n            limb1: 0x90f1244e5140a5df661d05f9,\n            limb2: 0x2f61a80ac4d65725,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdedaff3205bb953b2c390b8a,\n            limb1: 0xe1a899da21c1dafb485c707e,\n            limb2: 0x1ec897e7a041493e,\n        },\n        r0a1: u288 {\n            limb0: 0xf52c3c30cd4d3202b34089e0,\n            limb1: 0xc652aa1ff533e1aad7532305,\n            limb2: 0x2a1df766e5e3aa2e,\n        },\n        r1a0: u288 {\n            limb0: 0x7ac695d3e19d79b234daaf3d,\n            limb1: 0x5ce2f92666aec92a650feee1,\n            limb2: 0x21ab4fe20d978e77,\n        },\n        r1a1: u288 {\n            limb0: 0xa64a913a29a1aed4e0798664,\n            limb1: 0x66bc208b511503d127ff5ede,\n            limb2: 0x2389ba056de56a8d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5fa9f3d6ba2e33d9df261501,\n            limb1: 0x14ce648819a9c46d64d2ad7a,\n            limb2: 0x200d58896e8e5649,\n        },\n        r0a1: u288 {\n            limb0: 0xd961390ca5e5c1a18c8258f0,\n            limb1: 0xe2e869b5cf4982ab8e3b203a,\n            limb2: 0x269258fa79102f56,\n        },\n        r1a0: u288 {\n            limb0: 0x68cdab4015c2a73a65068b85,\n            limb1: 0x89d0b1abc07351c7a379bd7c,\n            limb2: 0x257b6794021bc2db,\n        },\n        r1a1: u288 {\n            limb0: 0xc75c452e6d369e6a87b6e1e,\n            limb1: 0xdaabd301cafb7edba76274ef,\n            limb2: 0x3bde99bf58a92c2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd88b16e68600a12e6c1f6006,\n            limb1: 0x333243b43d3b7ff18d0cc671,\n            limb2: 0x2b84b2a9b0f03ed8,\n        },\n        r0a1: u288 {\n            limb0: 0xf3e2b57ddaac822c4da09991,\n            limb1: 0xd7c894b3fe515296bb054d2f,\n            limb2: 0x10a75e4c6dddb441,\n        },\n        r1a0: u288 {\n            limb0: 0x73c65fbbb06a7b21b865ac56,\n            limb1: 0x21f4ecd1403bb78729c7e99b,\n            limb2: 0xaf88a160a6b35d4,\n        },\n        r1a1: u288 {\n            limb0: 0xade61ce10b8492d659ff68d0,\n            limb1: 0x1476e76cf3a8e0df086ad9eb,\n            limb2: 0x2e28cfc65d61e946,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdf8b54b244108008e7f93350,\n            limb1: 0x2ae9a68b9d6b96f392decd6b,\n            limb2: 0x160b19eed152271c,\n        },\n        r0a1: u288 {\n            limb0: 0xc18a8994cfbb2e8df446e449,\n            limb1: 0x408d51e7e4adedd8f4f94d06,\n            limb2: 0x27661b404fe90162,\n        },\n        r1a0: u288 {\n            limb0: 0x1390b2a3b27f43f7ac73832c,\n            limb1: 0x14d57301f6002fd328f2d64d,\n            limb2: 0x17f3fa337367dddc,\n        },\n        r1a1: u288 {\n            limb0: 0x79cab8ff5bf2f762c5372f80,\n            limb1: 0xc979d6f385fae4b5e4785acf,\n            limb2: 0x60c5307a735b00f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x94336f2c5c03b2ad5dfd59a2,\n            limb1: 0x3ee02119f9d3e985e9859470,\n            limb2: 0x11a897fc6f4ac878,\n        },\n        r0a1: u288 {\n            limb0: 0x8fbbe337bcd3b3926dfd5a7b,\n            limb1: 0x6a45f1a06ee96d69024430db,\n            limb2: 0x14e51a458ccb2d83,\n        },\n        r1a0: u288 {\n            limb0: 0xbb2657ff1a311ddd38278308,\n            limb1: 0x776a992cfacbf2c03314a11,\n            limb2: 0x58d65fdae6e48e1,\n        },\n        r1a1: u288 {\n            limb0: 0x12a32aecc832311454a1c546,\n            limb1: 0x2fe303fbc237d54289547719,\n            limb2: 0x3668aec6f11f21e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb0aa6695235ffd66d5f3c609,\n            limb1: 0x318302a2be41d2dacdbc374d,\n            limb2: 0x1eeaf97b389d7e8e,\n        },\n        r0a1: u288 {\n            limb0: 0x10bf93e11b2746d13bb58a38,\n            limb1: 0xd1b4adad34ee3f10a1482bc0,\n            limb2: 0x177de2cef1432bb6,\n        },\n        r1a0: u288 {\n            limb0: 0x83b01a1debda734692f242b9,\n            limb1: 0xff64a01021e721460650bba4,\n            limb2: 0x23fc5e8c9a462660,\n        },\n        r1a1: u288 {\n            limb0: 0xf56122ef42ec57584ae1e554,\n            limb1: 0x1be67e0ec4b5b9cf2540e9a7,\n            limb2: 0x15e2a1a3f49ec180,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x386d7b23c6dccb87637018c9,\n            limb1: 0xfed2ea478e9a2210289079e2,\n            limb2: 0x100aa83cb843353e,\n        },\n        r0a1: u288 {\n            limb0: 0x229c5c285f049d04c3dc5ce7,\n            limb1: 0x28110670fe1d38c53ffcc6f7,\n            limb2: 0x1778918279578f50,\n        },\n        r1a0: u288 {\n            limb0: 0xe9ad2c7b8a17a1f1627ff09d,\n            limb1: 0xedff5563c3c3e7d2dcc402ec,\n            limb2: 0xa8bd6770b6d5aa8,\n        },\n        r1a1: u288 {\n            limb0: 0x66c5c1aeed5c04470b4e8a3d,\n            limb1: 0x846e73d11f2d18fe7e1e1aa2,\n            limb2: 0x10a60eabe0ec3d78,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1699deb0ead59ed63109c05b,\n            limb1: 0xb325da3842cebabbec003fc1,\n            limb2: 0xc0de846c16e6112,\n        },\n        r0a1: u288 {\n            limb0: 0x99309402eca08241dae4e273,\n            limb1: 0xaa16e86224c3178f60d03bb7,\n            limb2: 0x24cde0d47b2dcef1,\n        },\n        r1a0: u288 {\n            limb0: 0x7d47f9f43dd62a2f56442e26,\n            limb1: 0x9d3fd5f2224d5f9a10b5bf3e,\n            limb2: 0x1ea21619d0ac4ca7,\n        },\n        r1a1: u288 {\n            limb0: 0x945a4528b5a37c8fdf0cc9af,\n            limb1: 0x7ad4fbe1529463b319293c35,\n            limb2: 0xa55c48b621e6341,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x88ca191d85be1f6c205257ef,\n            limb1: 0xd0cecf5c5f80926c77fd4870,\n            limb2: 0x16ec42b5cae83200,\n        },\n        r0a1: u288 {\n            limb0: 0x154cba82460752b94916186d,\n            limb1: 0x564f6bebac05a4f3fb1353ac,\n            limb2: 0x2d47a47da836d1a7,\n        },\n        r1a0: u288 {\n            limb0: 0xb39c4d6150bd64b4674f42ba,\n            limb1: 0x93c967a38fe86f0779bf4163,\n            limb2: 0x1a51995a49d50f26,\n        },\n        r1a1: u288 {\n            limb0: 0xeb7bdec4b7e304bbb0450608,\n            limb1: 0x11fc9a124b8c74b3d5560ea4,\n            limb2: 0xbfa9bd7f55ad8ac,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4f28d4247eb0e0a53f03f444,\n            limb1: 0xe8f36708d074dd12e311c7aa,\n            limb2: 0x1d92749e4fc01c06,\n        },\n        r0a1: u288 {\n            limb0: 0x250166cbdf943b8f355f3863,\n            limb1: 0xc5fb4230bafe5e79ca84b40c,\n            limb2: 0xd5d8ec40858dc7b,\n        },\n        r1a0: u288 {\n            limb0: 0xab518924ec9867879e25582a,\n            limb1: 0x2d3857a7fcba7b3149f2102e,\n            limb2: 0x524fec03876938c,\n        },\n        r1a1: u288 {\n            limb0: 0xf56af23dcb095ed80aa220e7,\n            limb1: 0xb67dbb76fc439aae6b2dd36a,\n            limb2: 0x2b6f640edeaa501d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2fdc574c85cf0c0ce5e07a51,\n            limb1: 0xd2439bf7b00bddc4cfb01b0c,\n            limb2: 0x125c3bbdeb0bd2da,\n        },\n        r0a1: u288 {\n            limb0: 0x9d664714bae53cafcb5ef55d,\n            limb1: 0x495c01724790853548f5e4de,\n            limb2: 0x2ce5e2e263725941,\n        },\n        r1a0: u288 {\n            limb0: 0x98071eb7fe88c9124aee3774,\n            limb1: 0xc3f66947a52bd2f6d520579f,\n            limb2: 0x2eaf775dbd52f7d3,\n        },\n        r1a1: u288 {\n            limb0: 0x23e5594948e21db2061dca92,\n            limb1: 0xd0ffa6f6c77290531c185431,\n            limb2: 0x604c085de03afb1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xccbab5c7a0c5742ffa48733a,\n            limb1: 0x23ef71f3d85c3bcf13168107,\n            limb2: 0x2ddb1f0a6d652587,\n        },\n        r0a1: u288 {\n            limb0: 0xc28304e1eab794df6c6e2292,\n            limb1: 0x7ec85b63501012b9d7b45342,\n            limb2: 0x1b2d2e2c38abb2e,\n        },\n        r1a0: u288 {\n            limb0: 0xea706451e63a0b21024ffdf1,\n            limb1: 0x138461dd2f2d3f164edfa0a3,\n            limb2: 0x1ca4c45bdf45ca1f,\n        },\n        r1a1: u288 {\n            limb0: 0x52cb07c8413f40678dac95f1,\n            limb1: 0xff127a91385511589a9f1879,\n            limb2: 0x25e33c022d25bf1f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xeec2912e15f6bda39d4e005e,\n            limb1: 0x2b8610c44d27bdbc6ba2aac5,\n            limb2: 0x78ddc4573fc1fed,\n        },\n        r0a1: u288 {\n            limb0: 0x48099a0da11ea21de015229d,\n            limb1: 0x5fe937100967d5cc544f4af1,\n            limb2: 0x2c9ffe6d7d7e9631,\n        },\n        r1a0: u288 {\n            limb0: 0xa70d251296ef1ae37ceb7d03,\n            limb1: 0x2adadcb7d219bb1580e6e9c,\n            limb2: 0x180481a57f22fd03,\n        },\n        r1a1: u288 {\n            limb0: 0xacf46db9631037dd933eb72a,\n            limb1: 0x8a58491815c7656292a77d29,\n            limb2: 0x261e3516c348ae12,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xccb3ff79c694e37dfd96245c,\n            limb1: 0x22190f1ae73883eea23de9ef,\n            limb2: 0x20a63d2ddd9170cb,\n        },\n        r0a1: u288 {\n            limb0: 0xc2d93202f4bc4125b32a040f,\n            limb1: 0x878fad8024db67f55bb868ad,\n            limb2: 0x19f19dfc985e42b4,\n        },\n        r1a0: u288 {\n            limb0: 0xeed43376f2c4880094eb048b,\n            limb1: 0x8c113b83e273d1c9e467294,\n            limb2: 0x14c7cf40ca1595d1,\n        },\n        r1a1: u288 {\n            limb0: 0x3a25b6562577b927dce53ee6,\n            limb1: 0xd87119330d4005ed54acb4c5,\n            limb2: 0x2eda2b2bb0c37f0e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2bfa32f0a09c3e2cfb8f6a38,\n            limb1: 0x7a24df3ff3c7119a59d49318,\n            limb2: 0x10e42281d64907ba,\n        },\n        r0a1: u288 {\n            limb0: 0xce42177a66cdeb4207d11e0c,\n            limb1: 0x3322aa425a9ca270152372ad,\n            limb2: 0x2f7fa83db407600c,\n        },\n        r1a0: u288 {\n            limb0: 0x62a8ff94fd1c7b9035af4446,\n            limb1: 0x3ad500601bbb6e7ed1301377,\n            limb2: 0x254d253ca06928f,\n        },\n        r1a1: u288 {\n            limb0: 0xf8f1787cd8e730c904b4386d,\n            limb1: 0x7fd3744349918d62c42d24cc,\n            limb2: 0x28a05e105d652eb8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6ef31e059d602897fa8e80a8,\n            limb1: 0x66a0710847b6609ceda5140,\n            limb2: 0x228c0e568f1eb9c0,\n        },\n        r0a1: u288 {\n            limb0: 0x7b47b1b133c1297b45cdd79b,\n            limb1: 0x6b4f04ed71b58dafd06b527b,\n            limb2: 0x13ae6db5254df01a,\n        },\n        r1a0: u288 {\n            limb0: 0xbeca2fccf7d0754dcf23ddda,\n            limb1: 0xe3d0bcd7d9496d1e5afb0a59,\n            limb2: 0x305a0afb142cf442,\n        },\n        r1a1: u288 {\n            limb0: 0x2d299847431477c899560ecf,\n            limb1: 0xbcd9e6c30bedee116b043d8d,\n            limb2: 0x79473a2a7438353,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x600b4b9519e953b3ee0e8c95,\n            limb1: 0x5521bdd3beeb7377b82d285d,\n            limb2: 0x18d5f5e49adfcbc7,\n        },\n        r0a1: u288 {\n            limb0: 0xd5da0bb68787af76cb5c5d9f,\n            limb1: 0x75637ba2a835852f330b73c9,\n            limb2: 0x547e04907fd564d,\n        },\n        r1a0: u288 {\n            limb0: 0x2ee91610a62eaa46e2df5e41,\n            limb1: 0x4326c823b5fdae59ff826534,\n            limb2: 0x2f7f8d90704505d2,\n        },\n        r1a1: u288 {\n            limb0: 0x603491072f5e6e9336e946e6,\n            limb1: 0xf60cf3ac408aed3af2d2e97b,\n            limb2: 0x2eb99a813ff2d8c2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x350da7c3e0673cf3f43b36a2,\n            limb1: 0x538deac84e666e5410d11977,\n            limb2: 0x12cd3b832ded258,\n        },\n        r0a1: u288 {\n            limb0: 0x48f25dd2ac7a858423fb6067,\n            limb1: 0xd065e44fc48bf19dd02adc4d,\n            limb2: 0xb645848420703f3,\n        },\n        r1a0: u288 {\n            limb0: 0x195a790100143ea9110ceda1,\n            limb1: 0x20b1e1e4a731d94efa584cc5,\n            limb2: 0xf8b3a6618e4d7ce,\n        },\n        r1a1: u288 {\n            limb0: 0x614c9b88c1a7229f818fec48,\n            limb1: 0x4c165313932d060fee7871d7,\n            limb2: 0x2e152a41f78cb225,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x65b71fe695e7ccd4b460dace,\n            limb1: 0xa6ceba62ef334e6fe91301d5,\n            limb2: 0x299f578d0f3554e6,\n        },\n        r0a1: u288 {\n            limb0: 0xaf781dd030a274e7ecf0cfa4,\n            limb1: 0x2095020d373a14d7967797aa,\n            limb2: 0x6a7f9df6f185bf8,\n        },\n        r1a0: u288 {\n            limb0: 0x8e91e2dba67d130a0b274df3,\n            limb1: 0xe192a19fce285c12c6770089,\n            limb2: 0x6e9acf4205c2e22,\n        },\n        r1a1: u288 {\n            limb0: 0xbcd5c206b5f9c77d667189bf,\n            limb1: 0x656a7e2ebc78255d5242ca9,\n            limb2: 0x25f43fec41d2b245,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb1640d670c5c42ea39c8645c,\n            limb1: 0xa18224b68a1319ba86f825f4,\n            limb2: 0x17d223ba44cd11d8,\n        },\n        r0a1: u288 {\n            limb0: 0x375310f6e347ed50ecfdb77f,\n            limb1: 0x6e63ffec719272c6a7aee308,\n            limb2: 0x12641a4735391a7d,\n        },\n        r1a0: u288 {\n            limb0: 0x5e6ca7022b2145d736b05d42,\n            limb1: 0xf3e3c6f9b543e2e50981a13d,\n            limb2: 0x1c6256a011a7141d,\n        },\n        r1a1: u288 {\n            limb0: 0xf19cf9a30aba1b73475bd2e1,\n            limb1: 0xdad570fd4dfe617364253c2e,\n            limb2: 0x1887c3b2804d9969,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4e56e6733cce20d9c5b16d96,\n            limb1: 0xc7ef260535fb75b9d3e089f,\n            limb2: 0x292dd4aa636e7729,\n        },\n        r0a1: u288 {\n            limb0: 0x6e7e1038b336f36519c9faaf,\n            limb1: 0x3c66bd609510309485e225c7,\n            limb2: 0x10cacac137411eb,\n        },\n        r1a0: u288 {\n            limb0: 0x4a3e8b96278ac092fe4f3b15,\n            limb1: 0xba47e583e2750b42f93c9631,\n            limb2: 0x125da6bd69495bb9,\n        },\n        r1a1: u288 {\n            limb0: 0xae7a56ab4b959a5f6060d529,\n            limb1: 0xc3c263bfd58c0030c063a48e,\n            limb2: 0x2f4d15f13fae788c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x301e0885c84d273b6d323124,\n            limb1: 0x11fd5c75e269f7a30fa4154f,\n            limb2: 0x19afdcfdcce2fc0d,\n        },\n        r0a1: u288 {\n            limb0: 0x3d13519f934526be815c38b0,\n            limb1: 0xd43735909547da73838874fc,\n            limb2: 0x255d8aca30f4e0f6,\n        },\n        r1a0: u288 {\n            limb0: 0x90a505b76f25a3396e2cea79,\n            limb1: 0x3957a2d0848c54b9079fc114,\n            limb2: 0x1ba0cd3a9fe6d4bb,\n        },\n        r1a1: u288 {\n            limb0: 0xc47930fba77a46ebb1db30a9,\n            limb1: 0x993a1cb166e9d40bebab02b2,\n            limb2: 0x1deb16166d48118b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4cd552da29fd9e651de0c8e2,\n            limb1: 0xcc66e31a0c0f35da5393e234,\n            limb2: 0x42aae7aba0de5d3,\n        },\n        r0a1: u288 {\n            limb0: 0x4ec69646eae3453b41574b3d,\n            limb1: 0x3600bbee129f0eb4a09e5097,\n            limb2: 0xd759ae3f0b2e8e,\n        },\n        r1a0: u288 {\n            limb0: 0xa098f16a71c8341329b1faad,\n            limb1: 0xb3eab89ea27edf122016c983,\n            limb2: 0x180cc8977130fe33,\n        },\n        r1a1: u288 {\n            limb0: 0xf8c7bee62fa29f3dcd7d52e,\n            limb1: 0xe43d14e1cb4f03890d983fc9,\n            limb2: 0x1bbf95afef389b1c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x44e4b10ad926a88d371adac0,\n            limb1: 0xb3b1d13d9118e162063df933,\n            limb2: 0x21f73fdf31a07aab,\n        },\n        r0a1: u288 {\n            limb0: 0xd14093e583f58b3af5ae4db5,\n            limb1: 0x827dd1bbff5a346179ad72b6,\n            limb2: 0x2ebf5e6b9398b99,\n        },\n        r1a0: u288 {\n            limb0: 0x29134bd0139058c474b7afa2,\n            limb1: 0xdca7021954756e1ac4eac6cc,\n            limb2: 0x26f440512341e287,\n        },\n        r1a1: u288 {\n            limb0: 0x6c1e14e15abb23010dc1e33a,\n            limb1: 0xe96c50d655a06866163356cd,\n            limb2: 0x1f4a622ecad37469,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb15bbaec50ff49d30e49f74a,\n            limb1: 0xc90a8c79fb045c5468f14151,\n            limb2: 0x25e47927e92df0e3,\n        },\n        r0a1: u288 {\n            limb0: 0x57f66909d5d40dfb8c7b4d5c,\n            limb1: 0xea5265282e2139c48c1953f2,\n            limb2: 0x2d7f5e6aff2381f6,\n        },\n        r1a0: u288 {\n            limb0: 0x2a2f573b189a3c8832231394,\n            limb1: 0x738abc15844895ffd4733587,\n            limb2: 0x20aa11739c4b9bb4,\n        },\n        r1a1: u288 {\n            limb0: 0x51695ec614f1ff4cce2f65d1,\n            limb1: 0x6765aae6cb895a2406a6dd7e,\n            limb2: 0x1126ee431c522da0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x789cfeffdbc8dab4651b6a26,\n            limb1: 0x9709af4c379fbf84608e067b,\n            limb2: 0xdbc2e8191a825bf,\n        },\n        r0a1: u288 {\n            limb0: 0x86c0cc51d698fc12702f534f,\n            limb1: 0x6888fbb5d2f53711495f5bd2,\n            limb2: 0x2c192d6229821616,\n        },\n        r1a0: u288 {\n            limb0: 0x51c5533eb07345679f648982,\n            limb1: 0xa08ae72cfd598899b1cfc8ac,\n            limb2: 0x26557347bd8f0ef8,\n        },\n        r1a1: u288 {\n            limb0: 0x749300bfda23c67cefec814a,\n            limb1: 0x8bfdcaf7b0e1774c2238299c,\n            limb2: 0x5b310a47c2757be,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9214fc3209f1518b05fd21c6,\n            limb1: 0x9bc8ce4f56423009710770e8,\n            limb2: 0x32445cc6972799c,\n        },\n        r0a1: u288 {\n            limb0: 0x93ef401ecd9cfae3644d22e6,\n            limb1: 0xce5a741a9847a144cfaf8c96,\n            limb2: 0xf7a814d5726da4a,\n        },\n        r1a0: u288 {\n            limb0: 0xd19264d986f163b133a91c0c,\n            limb1: 0x529dc5ce4b193c0f672c6a32,\n            limb2: 0x2e9a118959353374,\n        },\n        r1a1: u288 {\n            limb0: 0x3d97d6e8f45072cc9e85e412,\n            limb1: 0x4dafecb04c3bb23c374f0486,\n            limb2: 0xa174dd4ac8ee628,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe0decaadc4a6f0ba8f9bef29,\n            limb1: 0xedcb07e1177fa819f638157b,\n            limb2: 0x250c15a64da6f7e5,\n        },\n        r0a1: u288 {\n            limb0: 0x95f4d7c766ce8f325a768fc6,\n            limb1: 0x470a0797ad6c0afcfeb285a5,\n            limb2: 0x283e4ee1041ce0ef,\n        },\n        r1a0: u288 {\n            limb0: 0x8b4de3ce49b6e957c99abaa3,\n            limb1: 0xb3f53ce50c860f9232a19797,\n            limb2: 0x178ba1cb5c741f25,\n        },\n        r1a1: u288 {\n            limb0: 0xd0665772d47dcae22fac6c39,\n            limb1: 0x904d57afdd91e177f3f871fb,\n            limb2: 0x15a3517d026d204a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x98d8b0c4adcf27bceb305c2c,\n            limb1: 0x859afa9c7668ed6152d8cba3,\n            limb2: 0x29e7694f46e3a272,\n        },\n        r0a1: u288 {\n            limb0: 0x1d970845365594307ba97556,\n            limb1: 0xd002d93ad793e154afe5b49b,\n            limb2: 0x12ca77d3fb8eee63,\n        },\n        r1a0: u288 {\n            limb0: 0x9f2934faefb8268e20d0e337,\n            limb1: 0xbc4b5e1ec056881319f08766,\n            limb2: 0x2e103461759a9ee4,\n        },\n        r1a1: u288 {\n            limb0: 0x7adc6cb87d6b43000e2466b6,\n            limb1: 0x65e5cefa42b25a7ee8925fa6,\n            limb2: 0x2560115898d7362a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe27a38a6ce9cdfb13f9c8286,\n            limb1: 0xeb63852dd134515d2d71cca4,\n            limb2: 0xfc2f00d7f215816,\n        },\n        r0a1: u288 {\n            limb0: 0xfc16f37b3bc5798c84900f79,\n            limb1: 0x83e431402739fa2dec80fe3a,\n            limb2: 0x282a3a6c64efd070,\n        },\n        r1a0: u288 {\n            limb0: 0xa16f756a6c64bced06a5309,\n            limb1: 0x363b474c08a16450efe71ff0,\n            limb2: 0xa6d4ebe758d6f36,\n        },\n        r1a1: u288 {\n            limb0: 0x3982faffb05ae6b720c25980,\n            limb1: 0xf3343c79e7656f32b7fcd2c2,\n            limb2: 0x131f7ba1d69acc0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x64d864643668392c0e357cc4,\n            limb1: 0x4c9bf66853f1b287015ab84c,\n            limb2: 0x2f5f1b92ad7ee4d4,\n        },\n        r0a1: u288 {\n            limb0: 0xdc33c8da5c575eef6987a0e1,\n            limb1: 0x51cc07c7ef28e1b8d934bc32,\n            limb2: 0x2358d94a17ec2a44,\n        },\n        r1a0: u288 {\n            limb0: 0xf659845b829bbba363a2497b,\n            limb1: 0x440f348e4e7bed1fb1eb47b2,\n            limb2: 0x1ad0eaab0fb0bdab,\n        },\n        r1a1: u288 {\n            limb0: 0x1944bb6901a1af6ea9afa6fc,\n            limb1: 0x132319df135dedddf5baae67,\n            limb2: 0x52598294643a4aa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x76fd94c5e6f17fa6741bd7de,\n            limb1: 0xc2e0831024f67d21013e0bdd,\n            limb2: 0x21e2af6a43119665,\n        },\n        r0a1: u288 {\n            limb0: 0xad290eab38c64c0d8b13879b,\n            limb1: 0xdd67f881be32b09d9a6c76a0,\n            limb2: 0x8000712ce0392f2,\n        },\n        r1a0: u288 {\n            limb0: 0xd30a46f4ba2dee3c7ace0a37,\n            limb1: 0x3914314f4ec56ff61e2c29e,\n            limb2: 0x22ae1ba6cd84d822,\n        },\n        r1a1: u288 {\n            limb0: 0x5d888a78f6dfce9e7544f142,\n            limb1: 0x9439156de974d3fb6d6bda6e,\n            limb2: 0x106c8f9a27d41a4f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xef94f7e14e43d05d5dc2a5db,\n            limb1: 0x4e730ef91962d53d5c144d45,\n            limb2: 0x20c9f09ee430fc34,\n        },\n        r0a1: u288 {\n            limb0: 0xa26d6c5d462131f93142d52e,\n            limb1: 0xddc49643f51ee6cabe8581db,\n            limb2: 0x13752caf1cbc8d5c,\n        },\n        r1a0: u288 {\n            limb0: 0xf8c77031a63d9e67f9cc1728,\n            limb1: 0x40ecf28120f0408a120e9543,\n            limb2: 0x53bc5d43cd08518,\n        },\n        r1a1: u288 {\n            limb0: 0x2ff127952b99119f98242817,\n            limb1: 0xe63c504a65debdba3a64a2a3,\n            limb2: 0xfbcb43f42a22fa6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x630d73532bae9432978d34ff,\n            limb1: 0xe4a093616a16f8e01725dacf,\n            limb2: 0xd61e1e87abe2d12,\n        },\n        r0a1: u288 {\n            limb0: 0x3d565745a48f3955ef821005,\n            limb1: 0x7cdb83651ff9aa4ef947961d,\n            limb2: 0x7d5b56b1d0a908f,\n        },\n        r1a0: u288 {\n            limb0: 0xf25332dd3bf9a4dab863f549,\n            limb1: 0xf99418f7ce25f482560b7701,\n            limb2: 0x17bd8e06468f8145,\n        },\n        r1a1: u288 {\n            limb0: 0x4b0de83ffea0e589fc53d3a3,\n            limb1: 0x96bde86047edd08f7d63568b,\n            limb2: 0x30d5ab74cb92f3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x92c09e4796207b802168341b,\n            limb1: 0xd2d9d6acffd7829066cc49ce,\n            limb2: 0xc89c2d0a7b2c81e,\n        },\n        r0a1: u288 {\n            limb0: 0x47e3c1cf6cdb6f3efe778c7f,\n            limb1: 0x66b347099b6436794cf062eb,\n            limb2: 0x18b4ccc64ae0a857,\n        },\n        r1a0: u288 {\n            limb0: 0x7d5793606a73b2740c71484a,\n            limb1: 0xa0070135ca2dc571b28e3c9c,\n            limb2: 0x1bc03576e04b94cf,\n        },\n        r1a1: u288 {\n            limb0: 0x1ba85b29875e638c10f16c99,\n            limb1: 0x158f2f2acc3c2300bb9f9225,\n            limb2: 0x42d8a8c36ea97c6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd97e0326411cc47c8ddf6cc0,\n            limb1: 0xedd2060bcddeab614c518345,\n            limb2: 0x239a5cadf3237a4c,\n        },\n        r0a1: u288 {\n            limb0: 0xcf2af0314a2d2a3bf1547087,\n            limb1: 0x7b7e846df9427bc1372f694e,\n            limb2: 0x8af0c75ccf976e1,\n        },\n        r1a0: u288 {\n            limb0: 0x6b595ad762f8b423178a5193,\n            limb1: 0x878023a4a74f60fa4c38551d,\n            limb2: 0xfe35f515dd9c4b0,\n        },\n        r1a1: u288 {\n            limb0: 0x42ef091d46c538aacf95bd37,\n            limb1: 0xe51c322ac17cc06c2da7a4ef,\n            limb2: 0x145b8ddb9dd19415,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9440ad13408319cecb07087b,\n            limb1: 0x537afc0c0cfe8ff761c24e08,\n            limb2: 0x48e4ac10081048d,\n        },\n        r0a1: u288 {\n            limb0: 0xa37fb82b03a2c0bb2aa50c4f,\n            limb1: 0xd3797f05c8fb84f6b630dfb,\n            limb2: 0x2dffde2d6c7e43ff,\n        },\n        r1a0: u288 {\n            limb0: 0xc55d2eb1ea953275e780e65b,\n            limb1: 0xe141cf680cab57483c02e4c7,\n            limb2: 0x1b71395ce5ce20ae,\n        },\n        r1a1: u288 {\n            limb0: 0xe4fab521f1212a1d301065de,\n            limb1: 0x4f8d31c78df3dbe4ab721ef2,\n            limb2: 0x2828f21554706a0e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8cefc2f2af2a3082b790784e,\n            limb1: 0x97ac13b37c6fbfc736a3d456,\n            limb2: 0x683b1cdffd60acd,\n        },\n        r0a1: u288 {\n            limb0: 0xa266a8188a8c933dcffe2d02,\n            limb1: 0x18d3934c1838d7bce81b2eeb,\n            limb2: 0x206ac5cdda42377,\n        },\n        r1a0: u288 {\n            limb0: 0x90332652437f6e177dc3b28c,\n            limb1: 0x75bd8199433d607735414ee8,\n            limb2: 0x29d6842d8298cf7e,\n        },\n        r1a1: u288 {\n            limb0: 0xadedf46d8ea11932db0018e1,\n            limb1: 0xbc7239ae9d1453258037befb,\n            limb2: 0x22e7ebdd72c6f7a1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x66c7ba638481b515f47a47c,\n            limb1: 0x65816eb626f569ff9a70086,\n            limb2: 0x1c76016adf110695,\n        },\n        r0a1: u288 {\n            limb0: 0x199bb5ce01eed8832bffe868,\n            limb1: 0xebc07bcbec47e8dacaccaa61,\n            limb2: 0x300f40e8fb08f35b,\n        },\n        r1a0: u288 {\n            limb0: 0x1117803a9b699abce47fc1a8,\n            limb1: 0x9f777c5f5e1fc6e3669c18fb,\n            limb2: 0x1daa971b94559380,\n        },\n        r1a1: u288 {\n            limb0: 0x5eaa67a030b5bca05aa5fb15,\n            limb1: 0x5c3219862943bebd194b2f50,\n            limb2: 0x2adfacb421dcf6a7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x74939dcacb9e9e2b711e8447,\n            limb1: 0xf9ad27eef11cbbc8b3ab249e,\n            limb2: 0x11aab57aeb6656ce,\n        },\n        r0a1: u288 {\n            limb0: 0xa9f5cb1a26ce6c0257dd7da9,\n            limb1: 0x8e135e3fac96755521af3f2c,\n            limb2: 0x276dbb0ae508576b,\n        },\n        r1a0: u288 {\n            limb0: 0xc3cb26994a44bc35fe3619ba,\n            limb1: 0xec35244c6c46a69c781e84ed,\n            limb2: 0xc9c12355c7afba0,\n        },\n        r1a1: u288 {\n            limb0: 0x886847b97e3bc0b7dec24b8e,\n            limb1: 0x3ef24e4c1bd0f2a40ec42a4f,\n            limb2: 0x4f303d145c4a8e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x348e15357d9299e582033136,\n            limb1: 0x53578c46b15abb39da35a56e,\n            limb2: 0x1043b711f86bb33f,\n        },\n        r0a1: u288 {\n            limb0: 0x9fa230a629b75217f0518e7c,\n            limb1: 0x77012a4bb8751322a406024d,\n            limb2: 0x121e2d845d972695,\n        },\n        r1a0: u288 {\n            limb0: 0x5600f2d51f21d9dfac35eb10,\n            limb1: 0x6fde61f876fb76611fb86c1a,\n            limb2: 0x2bf4fbaf5bd0d0df,\n        },\n        r1a1: u288 {\n            limb0: 0xd732aa0b6161aaffdae95324,\n            limb1: 0xb3c4f8c3770402d245692464,\n            limb2: 0x2a0f1740a293e6f0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5ee47e2aec7d88c58896ef36,\n            limb1: 0x894bd20abe674c0208e35a93,\n            limb2: 0x1a42417dc0038755,\n        },\n        r0a1: u288 {\n            limb0: 0x8bba265a6ba9c5bd6c17788d,\n            limb1: 0x43709c02f70bc99b6d6927cb,\n            limb2: 0xb456dc8d4bbbd49,\n        },\n        r1a0: u288 {\n            limb0: 0x368d2f5f3940fe781a54de5c,\n            limb1: 0x611afd760bcdd16d7e5098fd,\n            limb2: 0x2602a5e773cb12a0,\n        },\n        r1a1: u288 {\n            limb0: 0x70b8eaf8db4b85dec76261af,\n            limb1: 0xd8b6dbb7ad62764263175efc,\n            limb2: 0x27797f327aa59ac1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa9e2efa41aaa98ab59728940,\n            limb1: 0x163c0425f66ce72daef2f53e,\n            limb2: 0x2feaf1b1770aa7d8,\n        },\n        r0a1: u288 {\n            limb0: 0x3bb7afd3c0a79b6ac2c4c063,\n            limb1: 0xee5cb42e8b2bc999e312e032,\n            limb2: 0x1af2071ae77151c3,\n        },\n        r1a0: u288 {\n            limb0: 0x1cef1c0d8956d7ceb2b162e7,\n            limb1: 0x202b4af9e51edfc81a943ded,\n            limb2: 0xc9e943ffbdcfdcb,\n        },\n        r1a1: u288 {\n            limb0: 0xe18b1b34798b0a18d5ad43dd,\n            limb1: 0x55e8237731941007099af6b8,\n            limb2: 0x1472c0290db54042,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x91080fd5aaedc517d9cd2fa,\n            limb1: 0x3edc290fc4568f8f972c94a6,\n            limb2: 0x2535859135a1ab3a,\n        },\n        r0a1: u288 {\n            limb0: 0x626ef15bd0158b028321fabc,\n            limb1: 0x511811c5a645349dc6e8c96,\n            limb2: 0x5ea2a954421df52,\n        },\n        r1a0: u288 {\n            limb0: 0x532b1df5972f804688da2382,\n            limb1: 0x1eb61d485a40951340c80738,\n            limb2: 0x2a8354857d28abef,\n        },\n        r1a1: u288 {\n            limb0: 0x9b597bfbeec11cc3e137309f,\n            limb1: 0xe36ae879e4cd9dd54c6daee4,\n            limb2: 0x1408ffb495b57485,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb4c7963e0d1dc082de0725e,\n            limb1: 0x375a7a3d765918de24804223,\n            limb2: 0xf177b77b031596d,\n        },\n        r0a1: u288 {\n            limb0: 0x87a7b9c5f10500b0b40d7a1e,\n            limb1: 0x6f234d1dc7f1394b55858810,\n            limb2: 0x26288146660a3914,\n        },\n        r1a0: u288 {\n            limb0: 0xa6308c89cebe40447abf4a9a,\n            limb1: 0x657f0fdda13b1f8ee314c22,\n            limb2: 0x1701aabc250a9cc7,\n        },\n        r1a1: u288 {\n            limb0: 0x9db9bf660dc77cbe2788a755,\n            limb1: 0xbdf9c1c15a4bd502a119fb98,\n            limb2: 0x14b4de3d26bd66e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x53c49c62ca96007e14435295,\n            limb1: 0x85aeb885e4123ca8d3232fdf,\n            limb2: 0x750017ce108abf3,\n        },\n        r0a1: u288 {\n            limb0: 0xba6bf3e25d370182e4821239,\n            limb1: 0x39de83bf370bd2ba116e8405,\n            limb2: 0x2b8417a72ba6d940,\n        },\n        r1a0: u288 {\n            limb0: 0xa922f50550d349849b14307b,\n            limb1: 0x569766b6feca6143a5ddde9d,\n            limb2: 0x2c3c6765b25a01d,\n        },\n        r1a1: u288 {\n            limb0: 0x6016011bdc3b506563b0f117,\n            limb1: 0xbab4932beab93dde9b5b8a5c,\n            limb2: 0x1bf3f698de0ace60,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x11925aacbbb5a16eea984791,\n            limb1: 0xbd44a32451e02b8dd9f93e3e,\n            limb2: 0x283613cb34ee08bc,\n        },\n        r0a1: u288 {\n            limb0: 0x3bcfcf29d56dda88972d2e0d,\n            limb1: 0x6378f8cff10778665c7e0431,\n            limb2: 0x252094f8a37eb910,\n        },\n        r1a0: u288 {\n            limb0: 0x3953dbc38e645187bfc5ddab,\n            limb1: 0xfe6c4a8af9eeb0cffcd42f62,\n            limb2: 0x298a4e0b8e41a39e,\n        },\n        r1a1: u288 {\n            limb0: 0x50df906117b055421a37fee6,\n            limb1: 0x1bcce56c872adfa5e9664632,\n            limb2: 0x26a263c500419a69,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe1aad2fb2c3aa84b9a6beede,\n            limb1: 0x656ebc5334eace7fe81e6f1,\n            limb2: 0xe5a68ce75fd9809,\n        },\n        r0a1: u288 {\n            limb0: 0x6e38dd74d56cc193ab28c18d,\n            limb1: 0x489b415a49586e4213e4cab4,\n            limb2: 0x4b5ae00bb5fb138,\n        },\n        r1a0: u288 {\n            limb0: 0x710bb610c2843aa686ba9adb,\n            limb1: 0x4035dfa11017ac938fb7892d,\n            limb2: 0x457e16957861fe5,\n        },\n        r1a1: u288 {\n            limb0: 0x61849b4cb86ead8d7c3d94f1,\n            limb1: 0x518f095dd852d4beac73d260,\n            limb2: 0x1d7fa08317c2a29,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb9f05ffda3ee208f990ff3a8,\n            limb1: 0x6201d08440b28ea672b9ea93,\n            limb2: 0x1ed60e5a5e778b42,\n        },\n        r0a1: u288 {\n            limb0: 0x8e8468b937854c9c00582d36,\n            limb1: 0x7888fa8b2850a0c555adb743,\n            limb2: 0xd1342bd01402f29,\n        },\n        r1a0: u288 {\n            limb0: 0xf5c4c66a974d45ec754b3873,\n            limb1: 0x34322544ed59f01c835dd28b,\n            limb2: 0x10fe4487a871a419,\n        },\n        r1a1: u288 {\n            limb0: 0xedf4af2df7c13d6340069716,\n            limb1: 0x8592eea593ece446e8b2c83b,\n            limb2: 0x12f9280ce8248724,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x560d1b6e56d813240424b220,\n            limb1: 0x78cb46b213324960bc655587,\n            limb2: 0x179c996c56c57046,\n        },\n        r0a1: u288 {\n            limb0: 0x83a2ba9b9558fad3cde16856,\n            limb1: 0x391e9dc2ffb59f519ae1d2b3,\n            limb2: 0x121abd4bd4ae70f1,\n        },\n        r1a0: u288 {\n            limb0: 0x90bb5fac7393b89ce8774706,\n            limb1: 0xe528a21777490d65bbb2a59,\n            limb2: 0x17649453b4e6f63f,\n        },\n        r1a1: u288 {\n            limb0: 0xa19760f6b2fff23302d184b9,\n            limb1: 0x4a5200e9c1f545101ae7368f,\n            limb2: 0x8a9b7df65fb2553,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe67f72c6d45f1bb04403139f,\n            limb1: 0x9233e2a95d3f3c3ff2f7e5b8,\n            limb2: 0x1f931e8e4343b028,\n        },\n        r0a1: u288 {\n            limb0: 0x20ef53907af71803ce3ca5ca,\n            limb1: 0xd99b6637ee9c73150b503ea4,\n            limb2: 0x1c9759def8a98ea8,\n        },\n        r1a0: u288 {\n            limb0: 0xa0a3b24c9089d224822fad53,\n            limb1: 0xdfa2081342a7a895062f3e50,\n            limb2: 0x185e8cf6b3e494e6,\n        },\n        r1a1: u288 {\n            limb0: 0x8752a12394b29d0ba799e476,\n            limb1: 0x1493421da067a42e7f3d0f8f,\n            limb2: 0x67e7fa3e3035edf,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9d2e2392b2116806c3c64bea,\n            limb1: 0xbc4c1ea53ab2140ee4675a09,\n            limb2: 0x10ce261919b09742,\n        },\n        r0a1: u288 {\n            limb0: 0xf14f468e5ab675c5fc2db1de,\n            limb1: 0x75de3f46adfc7aba3ce6f8f6,\n            limb2: 0x2bfcacc6c8f0370a,\n        },\n        r1a0: u288 {\n            limb0: 0xa138d127e5eb4d3aa9e483f7,\n            limb1: 0x44836fa24f3f8db5aa663f2f,\n            limb2: 0x12a4a7236c8b0338,\n        },\n        r1a1: u288 {\n            limb0: 0xd6fdaced0679398f5aefc808,\n            limb1: 0x41971bc9ddff0109a6d83fb3,\n            limb2: 0x1a11d202adb75ba9,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6d6138c95464e5e774ae7ba0,\n            limb1: 0xe6ca73a5498e4ccd4bb68fc7,\n            limb2: 0x15bf8aa8ed1beff6,\n        },\n        r0a1: u288 {\n            limb0: 0xabd7c55a134ed405b4966d3c,\n            limb1: 0xe69dd725ccc4f9dd537fe558,\n            limb2: 0x2df4a03e2588a8f1,\n        },\n        r1a0: u288 {\n            limb0: 0x7cf42890de0355ffc2480d46,\n            limb1: 0xe33c2ad9627bcb4b028c2358,\n            limb2: 0x2a18767b40de20bd,\n        },\n        r1a1: u288 {\n            limb0: 0x79737d4a87fab560f3d811c6,\n            limb1: 0xa88fee5629b91721f2ccdcf7,\n            limb2: 0x2b51c831d3404d5e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9c6a908d0b5cceccb463a4e5,\n            limb1: 0xde65283103f2cb5e00e981d0,\n            limb2: 0x2e94465a4f7f92d5,\n        },\n        r0a1: u288 {\n            limb0: 0x1ce77bed9f2198292f766f43,\n            limb1: 0x8a65ff87da43dd4b4620ff1,\n            limb2: 0xa93dc2061770b84,\n        },\n        r1a0: u288 {\n            limb0: 0xd4fee00640a18279b3b99d6d,\n            limb1: 0xcbfac423ce971d800796de34,\n            limb2: 0x69fab7bbec03f8d,\n        },\n        r1a1: u288 {\n            limb0: 0xdb42c8aa3f576a04e6740b62,\n            limb1: 0xc6c8a94fd3bf4e501d88ab20,\n            limb2: 0x1b918d10cac3a421,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9812f6145cf7e949fa207f20,\n            limb1: 0x4061c36b08d5bcd408b14f19,\n            limb2: 0x8332e08b2eb51ed,\n        },\n        r0a1: u288 {\n            limb0: 0xa4a7ae8f65ba180c523cb33,\n            limb1: 0xb71fabbdc78b1128712d32a5,\n            limb2: 0x2acd1052fd0fefa7,\n        },\n        r1a0: u288 {\n            limb0: 0x6ea5598e221f25bf27efc618,\n            limb1: 0xa2c2521a6dd8f306f86d6db7,\n            limb2: 0x13af144288655944,\n        },\n        r1a1: u288 {\n            limb0: 0xea469c4b390716a6810fff5d,\n            limb1: 0xf8052694d0fdd3f40b596c20,\n            limb2: 0x24d0ea6c86e48c5c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2e39be614d904bafea58a8cd,\n            limb1: 0xf53f0a6a20a1f1783b0ea2d0,\n            limb2: 0x99c451b7bb726d7,\n        },\n        r0a1: u288 {\n            limb0: 0x28ec54a4ca8da838800c573d,\n            limb1: 0xb78365fa47b5e192307b7b87,\n            limb2: 0x2df87aa88e012fec,\n        },\n        r1a0: u288 {\n            limb0: 0xfb7022881c6a6fdfb18de4aa,\n            limb1: 0xb9bd30f0e93c5b93ad333bab,\n            limb2: 0x1dd20cbccdeb9924,\n        },\n        r1a1: u288 {\n            limb0: 0x16d8dfdf790a6be16a0e55ba,\n            limb1: 0x90ab884395509b9a264472d4,\n            limb2: 0xeaec571657b6e9d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xaf4fdd1b70eabcd772d77aa1,\n            limb1: 0xc88a9826c1e8212a26e0430d,\n            limb2: 0x203f7c97e4a936aa,\n        },\n        r0a1: u288 {\n            limb0: 0xe2f0c2ac8588b3fa35eb69db,\n            limb1: 0x9bdff7e3611ef6dbded516b4,\n            limb2: 0x301305ee3abf1df8,\n        },\n        r1a0: u288 {\n            limb0: 0xdc0fa9fcb28f71f07f9f23ee,\n            limb1: 0x1145e7453873b8c7d35aa6c2,\n            limb2: 0x6031f980cdf1d85,\n        },\n        r1a1: u288 {\n            limb0: 0x3050ba620d13a3ad894b2ce8,\n            limb1: 0xe82eaab452c4c0a973f4d11d,\n            limb2: 0x66de04fb2119c6f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6c5b064e3183ed4bd22126b0,\n            limb1: 0x207825012a83cbe1cf0ece60,\n            limb2: 0x20721baaf24053f9,\n        },\n        r0a1: u288 {\n            limb0: 0x1142829a0afaf2b457220e6,\n            limb1: 0x9bd5bf8bdeccec5ad7930329,\n            limb2: 0x48227f6b84c3faa,\n        },\n        r1a0: u288 {\n            limb0: 0xba19284d0535c775b1bcc0bf,\n            limb1: 0xcb888ba30fb7151496773d0d,\n            limb2: 0x198d7753b2b23cab,\n        },\n        r1a1: u288 {\n            limb0: 0x5c4ec7550d765e8206535706,\n            limb1: 0x56764841e2adda1dacf343c2,\n            limb2: 0x190bf2077e521671,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xce78fc6505db036c10fac771,\n            limb1: 0x61f8c0bc7f60ad6415d5e419,\n            limb2: 0x59009c5cf9ea663,\n        },\n        r0a1: u288 {\n            limb0: 0xb3b3f697fc34d64ba053b914,\n            limb1: 0x317af5815ce5bfffc5a6bc97,\n            limb2: 0x23f97fee4deda847,\n        },\n        r1a0: u288 {\n            limb0: 0xf559e09cf7a02674ac2fa642,\n            limb1: 0x4fa7548b79cdd054e203689c,\n            limb2: 0x2173b379d546fb47,\n        },\n        r1a1: u288 {\n            limb0: 0x758feb5b51caccff9da0f78f,\n            limb1: 0xd7f37a1008233b74c4894f55,\n            limb2: 0x917c640b4b9627e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x44238d6942472eaaaa3c0148,\n            limb1: 0x423cad960738a7343451af0a,\n            limb2: 0x6d7ac995669fbe6,\n        },\n        r0a1: u288 {\n            limb0: 0x21d741021875ef3da0560516,\n            limb1: 0x3680532e586a90e40215d90e,\n            limb2: 0x1b91e2d44c10969a,\n        },\n        r1a0: u288 {\n            limb0: 0x35753f4be838d08ac282e162,\n            limb1: 0x9cc59d882fa9d2c39d2ac29d,\n            limb2: 0x68249cbe65852ed,\n        },\n        r1a1: u288 {\n            limb0: 0x33f63b6378843d4aa5d24138,\n            limb1: 0xc55953e8ba9dda553c73f3ba,\n            limb2: 0x17f2ff3634a5ca7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72548e0d946b796842cfecd8,\n            limb1: 0x78b54b355e3c26476b0fab82,\n            limb2: 0x2dc9f32c90b6ba31,\n        },\n        r0a1: u288 {\n            limb0: 0xa943be83a6fc90414320753b,\n            limb1: 0xd708fde97241095833ce5a08,\n            limb2: 0x142111e6a73d2e82,\n        },\n        r1a0: u288 {\n            limb0: 0xc79e8d5465ec5f28781e30a2,\n            limb1: 0x697fb9430b9ad050ced6cce,\n            limb2: 0x1a9d647149842c53,\n        },\n        r1a1: u288 {\n            limb0: 0x9bab496952559362586725cd,\n            limb1: 0xbe78e5a416d9665be64806de,\n            limb2: 0x147b550afb4b8b84,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9e86dd914a2f547b23018fed,\n            limb1: 0xf7705b16ccf6e1f5eb2c0ab3,\n            limb2: 0x393f6b3257d8b29,\n        },\n        r0a1: u288 {\n            limb0: 0x501fcdb81a813fe07121b423,\n            limb1: 0x87f73c02d3918e27053880f5,\n            limb2: 0x5250523c8eefc8e,\n        },\n        r1a0: u288 {\n            limb0: 0xb92c92400b5ff996ac4cb9d8,\n            limb1: 0xa121f8c7742792c161dc87fa,\n            limb2: 0x1ee9797cbb430d7f,\n        },\n        r1a1: u288 {\n            limb0: 0x4db126149d0e1ee2fe5cb1b6,\n            limb1: 0x7e31c6486612929a0807aa58,\n            limb2: 0x5fa8f994639085b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1422e11013fe6cdd7f843391,\n            limb1: 0xfb96092ab69fc530e27d8d8e,\n            limb2: 0xe39e04564fedd0,\n        },\n        r0a1: u288 {\n            limb0: 0xbd4e81e3b4db192e11192788,\n            limb1: 0x805257d3c2bdbc344a15ce0d,\n            limb2: 0x10ddd4f47445106b,\n        },\n        r1a0: u288 {\n            limb0: 0x87ab7f750b693ec75bce04e1,\n            limb1: 0x128ba38ebed26d74d26e4d69,\n            limb2: 0x2f1d22a64c983ab8,\n        },\n        r1a1: u288 {\n            limb0: 0x74207c17f5c8335183649f77,\n            limb1: 0x7144cd3520ac2e1be3204133,\n            limb2: 0xb38d0645ab3499d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xcceab2ae34bc8360cb9c77f0,\n            limb1: 0xebd0f65b0fe57d753fcf82c0,\n            limb2: 0x27251ea468d295d5,\n        },\n        r0a1: u288 {\n            limb0: 0xd384a0823772729f248e788b,\n            limb1: 0xbb40fc3eea3543a92de84fd2,\n            limb2: 0x28d3f25248c1dad,\n        },\n        r1a0: u288 {\n            limb0: 0xddf52b578bca93a0312499e,\n            limb1: 0x31354bfce389ece001a328fb,\n            limb2: 0xa6e91740fcee43f,\n        },\n        r1a1: u288 {\n            limb0: 0x8aa8d994bf9d2cdbdcee738,\n            limb1: 0x1989e823e5c2ae514e38943a,\n            limb2: 0x255d5d5428a217eb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x49173a889c697b0ab07f35bc,\n            limb1: 0xdcffb65f4b4c21ced6b623af,\n            limb2: 0x1366d12ee6022f7b,\n        },\n        r0a1: u288 {\n            limb0: 0x285fdce362f7a79b89c49b5c,\n            limb1: 0xae9358c8eaf26e2fed7353f5,\n            limb2: 0x21c91fefaf522b5f,\n        },\n        r1a0: u288 {\n            limb0: 0x748798f96436e3b18c64964a,\n            limb1: 0xfc3bb221103d3966d0510599,\n            limb2: 0x167859ae2ebc5e27,\n        },\n        r1a1: u288 {\n            limb0: 0xe3b55b05bb30e23fa7eba05b,\n            limb1: 0xa5fc8b7f7bc6abe91c90ddd5,\n            limb2: 0xe0da83c6cdebb5a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x30a4abff5957209783681bfb,\n            limb1: 0x82d868d5ca421e4f1a0daf79,\n            limb2: 0x1ba96ef98093d510,\n        },\n        r0a1: u288 {\n            limb0: 0xd9132c7f206a6c036a39e432,\n            limb1: 0x8a2dfb94aba29a87046110b8,\n            limb2: 0x1fad2fd5e5e37395,\n        },\n        r1a0: u288 {\n            limb0: 0x76b136dc82b82e411b2c44f6,\n            limb1: 0xe405f12052823a54abb9ea95,\n            limb2: 0xf125ba508c26ddc,\n        },\n        r1a1: u288 {\n            limb0: 0x1bae07f5f0cc48e5f7aac169,\n            limb1: 0x47d1288d741496a960e1a979,\n            limb2: 0xa0911f6cc5eb84e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2cedd7b822bb6d72c59dfa7a,\n            limb1: 0x84c3a618db0cf89ec14e5fb5,\n            limb2: 0x2a032b4f9f60bfc7,\n        },\n        r0a1: u288 {\n            limb0: 0x250e463f1e3d31dce9c37bf,\n            limb1: 0x69d332c194b3ce930a4150e2,\n            limb2: 0x2347156daafd5e1a,\n        },\n        r1a0: u288 {\n            limb0: 0x4e97ff927721598da12e31ec,\n            limb1: 0x8042e8a2b014700940b5264e,\n            limb2: 0x183c0e81cc372ab3,\n        },\n        r1a1: u288 {\n            limb0: 0x83eba063918614c4121b187,\n            limb1: 0x75f40ab2be04a52fb200b36f,\n            limb2: 0x5f483746bdaece2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfe150b2512bf45c64901f12,\n            limb1: 0xdd621a49d53caad574afcf5a,\n            limb2: 0x1ec7fbdca257edad,\n        },\n        r0a1: u288 {\n            limb0: 0xa3468b881959338092d60e19,\n            limb1: 0xc9d96474e9832f464a4115c4,\n            limb2: 0x1dd7fd2ab01107b4,\n        },\n        r1a0: u288 {\n            limb0: 0x28bfd0fc73f328af71c3b254,\n            limb1: 0x74bd6697ffcf7920a2c9b1a5,\n            limb2: 0x2001688da3f94c7e,\n        },\n        r1a1: u288 {\n            limb0: 0x8c3527564c0a00f1f16fb0c2,\n            limb1: 0xed1d021d7a4787e888cb997b,\n            limb2: 0xd9e4de1708c9a91,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2e7b3a5a35456f42e87968e6,\n            limb1: 0xb4303f5093c3a460674a2fcd,\n            limb2: 0x2b5331f03b8fa15f,\n        },\n        r0a1: u288 {\n            limb0: 0x7cea371d64d8bd0fc5b9427e,\n            limb1: 0x76208e15fc175e352c274fbe,\n            limb2: 0x5ceb46647d41234,\n        },\n        r1a0: u288 {\n            limb0: 0x6cdac06bfcf041a30435a560,\n            limb1: 0x15a7ab7ed1df6d7ed12616a6,\n            limb2: 0x2520b0f462ad4724,\n        },\n        r1a1: u288 {\n            limb0: 0xe8b65c5fff04e6a19310802f,\n            limb1: 0xc96324a563d5dab3cd304c64,\n            limb2: 0x230de25606159b1e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf953e7f8e47ce2feb7e3331c,\n            limb1: 0xbb5cbf05aeba907f3a605f71,\n            limb2: 0x73d64f13e358043,\n        },\n        r0a1: u288 {\n            limb0: 0xdf7e97bb7b23c267a9715500,\n            limb1: 0x14a6f0edaf642eac5e0cbcd2,\n            limb2: 0x21b655eb924818ce,\n        },\n        r1a0: u288 {\n            limb0: 0x4de920901bce2e75be780d7a,\n            limb1: 0x887987f8923a8866847f7dcc,\n            limb2: 0x1e427aaef5e99b1,\n        },\n        r1a1: u288 {\n            limb0: 0x407881b650e281edadf6da62,\n            limb1: 0x4e126117bdced59d7ecc3971,\n            limb2: 0x212f38388dc96cc2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb2236e5462d1e11842039bb5,\n            limb1: 0x8d746dd0bb8bb2a455d505c1,\n            limb2: 0x2fd3f4a905e027ce,\n        },\n        r0a1: u288 {\n            limb0: 0x3d6d9836d71ddf8e3b741b09,\n            limb1: 0x443f16e368feb4cb20a5a1ab,\n            limb2: 0xb5f19dda13bdfad,\n        },\n        r1a0: u288 {\n            limb0: 0x4e5612c2b64a1045a590a938,\n            limb1: 0xbca215d075ce5769db2a29d7,\n            limb2: 0x161e651ebdfb5065,\n        },\n        r1a1: u288 {\n            limb0: 0xc02a55b6685351f24e4bf9c7,\n            limb1: 0x4134240119050f22bc4991c8,\n            limb2: 0x300bd9f8d76bbc11,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe9296a3a3aed4c4143d2e0ba,\n            limb1: 0x7de973514b499b2da739b3e6,\n            limb2: 0x1b4b807986fcdee0,\n        },\n        r0a1: u288 {\n            limb0: 0xb9295fecce961afe0c5e6dad,\n            limb1: 0xc4e30c322bcae6d526c4de95,\n            limb2: 0x1fee592f513ed6b2,\n        },\n        r1a0: u288 {\n            limb0: 0x7245f5e5e803d0d448fafe21,\n            limb1: 0xcbdc032ecb3b7a63899c53d0,\n            limb2: 0x1fde9ffc17accfc3,\n        },\n        r1a1: u288 {\n            limb0: 0x8edcc1b2fdd35c87a7814a87,\n            limb1: 0x99d54b5c2fe171c49aa9cb08,\n            limb2: 0x130ef740e416a6fe,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf75ee16c01ae962ee2ba9a3,\n            limb1: 0x2035c9157b0caf951219f921,\n            limb2: 0x713e4b2a45dc294,\n        },\n        r0a1: u288 {\n            limb0: 0xbf4694f5ae7772c7305a7859,\n            limb1: 0xf3c0d398bd086f2459e692d,\n            limb2: 0x2866975b159e1ca4,\n        },\n        r1a0: u288 {\n            limb0: 0xedc381f2352b0c387c45f492,\n            limb1: 0x9023cfa067a8b300149e0b81,\n            limb2: 0x1d2ded23f6b7f2ad,\n        },\n        r1a1: u288 {\n            limb0: 0x316a42f51539cd79f7d118aa,\n            limb1: 0x84ab6dd38b05c1b031210896,\n            limb2: 0x2258ebc39bd5474a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7c2064c324eb0e930d764c1d,\n            limb1: 0x99228fa2e629a94bfdf42f3f,\n            limb2: 0x272dd78d94c01250,\n        },\n        r0a1: u288 {\n            limb0: 0x4ee36a1f37c4689c1996029e,\n            limb1: 0x9f03d366c3af0d7d8b7e94be,\n            limb2: 0x1099dace57e00d7a,\n        },\n        r1a0: u288 {\n            limb0: 0xe67ce9c7f6c61221b32698cc,\n            limb1: 0xbfa5ff997788d812a83ff6f3,\n            limb2: 0xc8a9303dbb80ebd,\n        },\n        r1a1: u288 {\n            limb0: 0x65f9ae631279f79bf59a3c46,\n            limb1: 0xc5dd2a6c8a8b6bbb78abd671,\n            limb2: 0x1a40c95acd75de89,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x537ecf0916b38aeea21d4e47,\n            limb1: 0x181a00de27ba4be1b380d6c8,\n            limb2: 0x8c2fe2799316543,\n        },\n        r0a1: u288 {\n            limb0: 0xe68fff5ee73364fff3fe403b,\n            limb1: 0x7b8685c8a725ae79cfac8f99,\n            limb2: 0x7b4be349766aba4,\n        },\n        r1a0: u288 {\n            limb0: 0xdf7c93c0095545ad5e5361ea,\n            limb1: 0xce316c76191f1e7cd7d03f3,\n            limb2: 0x22ea21f18ddec947,\n        },\n        r1a1: u288 {\n            limb0: 0xa19620b4c32db68cc1c2ef0c,\n            limb1: 0xffa1e4be3bed5faba2ccbbf4,\n            limb2: 0x16fc78a64c45f518,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2b6af476f520b4bf804415bc,\n            limb1: 0xd949ee7f9e8874698b090fca,\n            limb2: 0x34db5e5ec2180cf,\n        },\n        r0a1: u288 {\n            limb0: 0x3e06a324f038ac8abcfb28d7,\n            limb1: 0xc2e6375b7a83c0a0145f8942,\n            limb2: 0x2247e79161483763,\n        },\n        r1a0: u288 {\n            limb0: 0x708773d8ae3a13918382fb9d,\n            limb1: 0xaf83f409556e32aa85ae92bf,\n            limb2: 0x9af0a924ae43ba,\n        },\n        r1a1: u288 {\n            limb0: 0xa6fded212ff5b2ce79755af7,\n            limb1: 0x55a2adfb2699ef5de6581b21,\n            limb2: 0x2476e83cfe8daa5c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5492a3af17b50935147c96c3,\n            limb1: 0xdb9e5016a9bf37e1d190de7f,\n            limb2: 0x118c52b66aa91af5,\n        },\n        r0a1: u288 {\n            limb0: 0x383ff10030da0a1de2b199ff,\n            limb1: 0x87473c4982f35e30348edcd8,\n            limb2: 0x7b7841e2d12de72,\n        },\n        r1a0: u288 {\n            limb0: 0x5becb840142c3a612e4e9fb5,\n            limb1: 0x395ed9a8e637d790717ea70a,\n            limb2: 0x3075d6374c8e247,\n        },\n        r1a1: u288 {\n            limb0: 0x18d5882f3227369868fb1c0d,\n            limb1: 0x8d839bdccca10b584bd1cfb8,\n            limb2: 0x1d3ed3be5b633848,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2c12ab2f338cca45640fedfb,\n            limb1: 0x41502b84b9a66e10102be299,\n            limb2: 0x19dbe91c50592fb,\n        },\n        r0a1: u288 {\n            limb0: 0x343be7cac3ad44182acb33fa,\n            limb1: 0xf3aa251c1a310cd439e988c,\n            limb2: 0x1138da1418252cd,\n        },\n        r1a0: u288 {\n            limb0: 0xe7a3c13336a3bd1ce8bb3bb7,\n            limb1: 0x502e66f432b52caca3602ad5,\n            limb2: 0x17e6f3b7bc285d9,\n        },\n        r1a1: u288 {\n            limb0: 0x2b93c79b052f469f471affd1,\n            limb1: 0xeaf5be1f527545bbb7a3adb3,\n            limb2: 0x8ce6d14105d6914,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1c4759bcf7c607fe3f839d4d,\n            limb1: 0xea91f311da73327e2ed40785,\n            limb2: 0x2017052c72360f42,\n        },\n        r0a1: u288 {\n            limb0: 0x38cf8a4368c0709980199fc3,\n            limb1: 0xfc9047885996c19e84d7d4ea,\n            limb2: 0x1795549eb0b97783,\n        },\n        r1a0: u288 {\n            limb0: 0xb70f7ecfbec0eaf46845e8cc,\n            limb1: 0x9ddf274c2a9f89ea3bc4d66f,\n            limb2: 0xcc6f106abfcf377,\n        },\n        r1a1: u288 {\n            limb0: 0xf6ff11ce29186237468c2698,\n            limb1: 0x5c629ad27bb61e4826bb1313,\n            limb2: 0x2014c6623f1fb55e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd1656f114bf3af72715dce80,\n            limb1: 0x3924b0610de00ad47aab618b,\n            limb2: 0xdaf00e1541db71b,\n        },\n        r0a1: u288 {\n            limb0: 0xb3da842bd6ed2cea6a87db4,\n            limb1: 0x58009f786c9b9e946837049b,\n            limb2: 0x10ec13144c9e560e,\n        },\n        r1a0: u288 {\n            limb0: 0x9a584d0f409607603126ee10,\n            limb1: 0x1fa1a9bc1885cf6833992a19,\n            limb2: 0x2c1aa3312c27750f,\n        },\n        r1a1: u288 {\n            limb0: 0x5f0eefa5064d95ff567b056e,\n            limb1: 0xc9e066a9811570706974d0e2,\n            limb2: 0x51ad56ec3cb6b21,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc648054e4b6134bbfd68487f,\n            limb1: 0xdf0506dad3f3d098c13a6386,\n            limb2: 0x26bebeb6f46c2e8c,\n        },\n        r0a1: u288 {\n            limb0: 0x9d0cdb28a94204776c6e6ba6,\n            limb1: 0x303f02dfe619752b1607951d,\n            limb2: 0x1127d8b17ef2c064,\n        },\n        r1a0: u288 {\n            limb0: 0xe34ca1188b8db4e4694a696c,\n            limb1: 0x243553602481d9b88ca1211,\n            limb2: 0x1f8ef034831d0132,\n        },\n        r1a1: u288 {\n            limb0: 0xe3a5dfb1785690dad89ad10c,\n            limb1: 0xd690b583ace24ba033dd23e0,\n            limb2: 0x405d0709e110c03,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x464e5f2bfc2c82c54b03961,\n            limb1: 0x951289dda0d75515cf27d76f,\n            limb2: 0x18624def97e8d755,\n        },\n        r0a1: u288 {\n            limb0: 0x5f34b49ccba30273ef5b21d3,\n            limb1: 0x2a5284c7f0a2edbd91cffc38,\n            limb2: 0x152ee08fed176eb9,\n        },\n        r1a0: u288 {\n            limb0: 0x754bde9c6963db1bd70f1b6c,\n            limb1: 0xdcd8ae0734741dc7f4c0963d,\n            limb2: 0x1bdcdd889e8b7986,\n        },\n        r1a1: u288 {\n            limb0: 0xc256707edf7a02779c5570dd,\n            limb1: 0x4e462d0c425dc89184d0d1e,\n            limb2: 0x10a877ec918e3670,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72cc2cef2785ce4ff4e9b7af,\n            limb1: 0x60ed5b9c207d7f31fb6234ab,\n            limb2: 0x1bb17a4bc7b643ed,\n        },\n        r0a1: u288 {\n            limb0: 0x9424eb15b502cde7927c7530,\n            limb1: 0xa0e33edbbaa9de8e9c206059,\n            limb2: 0x2b9a3a63bbf4af99,\n        },\n        r1a0: u288 {\n            limb0: 0x423811cb6386e606cf274a3c,\n            limb1: 0x8adcc0e471ecfe526f56dc39,\n            limb2: 0x9169a8660d14368,\n        },\n        r1a1: u288 {\n            limb0: 0xf616c863890c3c8e33127931,\n            limb1: 0xcc9414078a6da6989dae6b91,\n            limb2: 0x594d6a7e6b34ab2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6a5715d35321ab7e2303801a,\n            limb1: 0xb3a10a033b8af85876120d84,\n            limb2: 0x12a279df5f1f2e80,\n        },\n        r0a1: u288 {\n            limb0: 0x280110399cdfd7e0a95aaf62,\n            limb1: 0xeaa755ebaf7edec0629ff916,\n            limb2: 0x50373a52da2ad5f,\n        },\n        r1a0: u288 {\n            limb0: 0x835e28ff4627911ddd0ba983,\n            limb1: 0x975aef2b304e4200963bd7e3,\n            limb2: 0x2cfb54689f69ce06,\n        },\n        r1a1: u288 {\n            limb0: 0xf3002234938e41787edf31bd,\n            limb1: 0x596978afc835ba1b55a81785,\n            limb2: 0x6bd7658f61e8020,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf2d619ae78049bf9141c35cf,\n            limb1: 0x717f8b10d469a1ee2d91f191,\n            limb2: 0x2c72c82fa8afe345,\n        },\n        r0a1: u288 {\n            limb0: 0xb89321223b82a2dc793c0185,\n            limb1: 0x71506a0cf4adb8e51bb7b759,\n            limb2: 0x2c13b92a98651492,\n        },\n        r1a0: u288 {\n            limb0: 0x4947ef2c89276f77f9d20942,\n            limb1: 0xb454d68685ab6b6976e71ec5,\n            limb2: 0x19a938d0e78a3593,\n        },\n        r1a1: u288 {\n            limb0: 0xbe883eb119609b489c01c905,\n            limb1: 0xaa06779922047f52feac5ce6,\n            limb2: 0x76977a3015dc164,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x43a96a588005043a46aadf2c,\n            limb1: 0xa37b89d8a1784582f0c52126,\n            limb2: 0x22e9ef3f5d4b2297,\n        },\n        r0a1: u288 {\n            limb0: 0x8c6f6d8474cf6e5a58468a31,\n            limb1: 0xeb1ce6ac75930ef1c79b07e5,\n            limb2: 0xf49839a756c7230,\n        },\n        r1a0: u288 {\n            limb0: 0x82b84693a656c8e8c1f962fd,\n            limb1: 0x2c1c8918ae80282208b6b23d,\n            limb2: 0x14d3504b5c8d428f,\n        },\n        r1a1: u288 {\n            limb0: 0x60ef4f4324d5619b60a3bb84,\n            limb1: 0x6d3090caefeedbc33638c77a,\n            limb2: 0x159264c370c89fec,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9b53ea01ae2d6587ef6469bf,\n            limb1: 0x51d2d907815a064277b460d3,\n            limb2: 0x130bfb2966bccfcf,\n        },\n        r0a1: u288 {\n            limb0: 0x628e9808d554d47dd88c80f5,\n            limb1: 0xc7b44de52f919e749a8af471,\n            limb2: 0xf6a26faf4aee11a,\n        },\n        r1a0: u288 {\n            limb0: 0x73ce5d8301bbc53ee6e8239f,\n            limb1: 0x31b030a8af445bd7d8e95c79,\n            limb2: 0x295f54e9eb9fba58,\n        },\n        r1a1: u288 {\n            limb0: 0x535dbb6d10b88b2fd30f0c23,\n            limb1: 0xa016d54da5f9a46174614196,\n            limb2: 0x10dfe73e58fcb4bd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x652eaf09821887db0de1f147,\n            limb1: 0x75229b9972e31ba2e226bbcf,\n            limb2: 0x161e5e72bf925c6d,\n        },\n        r0a1: u288 {\n            limb0: 0x856aa774394ef561669d1eab,\n            limb1: 0xdd46a5dd8e6c4d775d36356d,\n            limb2: 0x2d287f12b2a6700d,\n        },\n        r1a0: u288 {\n            limb0: 0x67ffd864a18bb2d4488c5d6a,\n            limb1: 0x8d0ea9ad86d841741fe1d284,\n            limb2: 0x43189ddb2f1e1cd,\n        },\n        r1a1: u288 {\n            limb0: 0xf42602a91d620c7003644ce4,\n            limb1: 0x7d9f27e32a63153af2c65415,\n            limb2: 0x1ee85832249a6300,\n        },\n    },\n];\n\n"
  },
  {
    "path": "src/contracts/autogenerated/risc0_verifier_bn254/src/lib.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\npub mod groth16_verifier;\npub mod groth16_verifier_constants;\n"
  },
  {
    "path": "src/contracts/autogenerated/risc0_verifier_bn254/tests/proof_calldata.txt",
    "content": "0x9ba602b4ce8728dc9e2eafbe\n0xab7dd4d4e0cd8c4809abe8e1\n0x1cb19c0439e5cb54\n0x0\n0xb58f541c46fbf653dff67254\n0xcd697429d0567a4f46f62291\n0x27eac14be5e561f6\n0x0\n0xd2c5c572d590e03c55c64639\n0x557b520cc77f01a33000444d\n0xbea38909a90b4f\n0x0\n0x4af10a44adfe761483b1036a\n0xe062fa9e6c2e8e3a785fb2f8\n0x24ade3fdf1cc1014\n0x0\n0x6c0e66b9e8f6f5ddce731810\n0xee339cd9e20abc9871d2d72e\n0x17506d1c6db5cfbf\n0x0\n0x3bafdeaa105949019e5fb72a\n0xce2a339f86210a1762d8cae5\n0x2b8f7d3f65ab4b05\n0x0\n0xe1c4d0b896b7ab77701a8f4c\n0xee18bb0cecf4d47225112e90\n0x22cc8347b8ac33a5\n0x0\n0x62b0093be54044819071cd65\n0xe6287ff63fded2de08e02db\n0x1391b544bc1d7ba2\n0x0\n0x8\n0x39b8aec4\n0x25bb4e7e\n0xb994a0e4\n0xb6e9dbec\n0xeba907cf\n0x70f463cb\n0xa7dc9786\n0xfe2dfb86\n0x15\n0x6a\n0x75\n0x73\n0x74\n0x20\n0x61\n0x20\n0x73\n0x69\n0x6d\n0x70\n0x6c\n0x65\n0x20\n0x72\n0x65\n0x63\n0x65\n0x69\n0x70\n0x74\n0x89f59395d7d156c762a9b232\n0x51f0c4b00a4aff1775527adf\n0x2bc6d06799052cf1\n0x2e0131da3e4e0a15f8b3806a\n0x93d99052938d5030681c44cd\n0x1297883c927ff0c\n0x51aac88428a9213c410e0052\n0xfde9f418f9b4b2fb47687d42\n0x2950f2e9dcc68245\n0xbe0d4233c6d97c7cc63dbac5\n0x83f0c74c67249816694309ce\n0xf9224f7ba4415f7\n0xc9e57c05852d589ad035117c\n0xa22485d15567a8b75ce46519\n0x1134d2a7b517d457\n0xd3581538958c132a24f052b0\n0xca4e08ae290cb33e91bc1ad2\n0xd9758de6636aebd\n0x30918ce53b7e733ac594b21a\n0x10983a361bbfce651934f95f\n0x1dc157bf2ef8028b\n0xac7a069326ac38fc61d7ce73\n0xe6d5bc3ea5230d4dbbeb40df\n0x1aad08b7f7a7eeb6\n0x914e68c4c83e413b8fba0665\n0xf2668ac3c3fa847fb7062f79\n0x207bcde016355f25\n0xe3a823e97168517c76ad41f6\n0x829aff2e625a2f715276127b\n0x1edaf5799a844609\n0xbb5a5828feafef6289cca375\n0x1099bfccefdb479278d6c8cb\n0x1b5b380f657f8126\n0x6c2863c823af990d59c4fc9b\n0xa8307e32c261c3d13d029762\n0x2e4d1a0b0f23aa74\n0x1c994e24705807ef729481f6\n0x5ef161f6aa07080282c65ee8\n0x1768ea6ba1205f64\n0x9abf8bed153b1318df061315\n0xa9513c6b80265b99c1257b0f\n0x23ce37b2e9b8ab40\n0xe1c1967385c65a97fe92c956\n0x18f06b5e00c91cd7ef8a2f2a\n0x2bf6f161fe4de458\n0x26d54dbc888667266d0882d\n0x38f6421518978b3991e85ed2\n0x2b396878a50e02ca\n0xff12323b72269a1003361f00\n0x4c68cb29d5d003be45c999f3\n0x2ef1d8f69cc80e21\n0x1645d308e8e28628773d9472\n0x990448db4a5ee05202e76139\n0x154a5aaf1f8005a\n0xa1c7fa4be3a35ebdf2c84bbc\n0xadb249a25ff1e0ae7eb2346\n0x509df68a5d8ca89\n0x38ff76ba1ad8666f1209c3a7\n0x4485b930182fb989e2bd96fc\n0x1b65724ffd42cc68\n0x106e202294195db750514293\n0xf5b36811d98b5404c3e7dd3b\n0x38586acabf6cd7b\n0xa52ccedd4fb7d80759c83eac\n0xac5a95af4813b0d7815de146\n0x1cd5e6557277b850\n0x1c6a26d7afd9cdc820e55c4e\n0xdfc15de07b3ddfcfe094853b\n0x2da45b0e69f7d4d8\n0xf1001926e629d24f44e15adb\n0xa757a15b0a3d23dd8b49954a\n0x23913b3b9375cbe4\n0x1\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x22\n0xc493ee6f604bc17e4f734ac0\n0x9a0fa0da8e56efc6b23fa786\n0x17511e3e8615874a\n0x9a1d282ed730f25e4fce86ed\n0x9305ae306edf6170b714798\n0x2c14c9cc71007409\n0xfa57797a388afe3dd3807bea\n0xf4f27f8b92db87e749f3c222\n0xd0f8b4d9188023f\n0x16b24f569bed5752fd3868c3\n0x26810a317e452397211feeff\n0x1033edb401268050\n0x3301da7a153b27639a16b36a\n0xcab03c9942b6c15f8cd0bd8\n0x1bbc641ffa7e32c6\n0xcd82880f3fc3eb8ab79e87a8\n0xf55f53f61088f54920fe5f15\n0x60d6e7d44626ec2\n0xb24a04dde5cab56d82f8c4e9\n0xcd6d2e210061dea8d7204745\n0x126a96b9d81b611b\n0xa27fb6049f9c8f0248a0f04d\n0x8d431583ecbdc29879dc0d73\n0x13785593cabd8089\n0x85c0cbd523817dc58ad3823e\n0xfa07fb845e9b03ddb140bdbd\n0x1e7c26a6227d8ad0\n0xfe59c51575c6f5653abad8f9\n0x1b920e81dfcbce1c621503e7\n0x29171d0a6be17908\n0x8f7602524d3a833f3ac2f0f3\n0x9bdaac53cc59a7feeacb524a\n0x6e87be76808a4d2\n0xcf16316abd5d242db5bfb0a8\n0x9ada9dce12de752f9c21c6b4\n0x305dedd6ecdbb7c2\n0x1b54d5ffbd3e1832fa560399\n0xa95f76a640f6b48a7170fe63\n0x67877a7eed621dc\n0x8c382cd3ee0509a1e5fe0a47\n0xd6b50700774b9929761cea0a\n0x142e0970ac3348cf\n0xe7e260ddf31651c3a3e61b96\n0x58d0124365958f79d949581b\n0x2dcf8eaaba6eff3b\n0xe88d657b354b400847f1faf7\n0xb8aa143fefd94d15dd662c8\n0xa8c3199af6c9060\n0x80b860e99119dad592809aa1\n0x1bebd9a9dfc4e48905e21ac1\n0xb35ee6649b4885d\n0xd77b7d3ffe76b430543b47bf\n0x10a5b85b9e6063a66253e864\n0x2df1c93acc872ad6\n0x36314fc2740749738367963d\n0x5cf14cce100011ba9753e8bf\n0x3a3f7ac26facaeb\n0xfab5ec029f5c6e1e0b4fa46a\n0x7faeb8c4d98ab24a4723632b\n0x1bd9b11ba5c192b7\n0xa61deebf17c3262d6710be33\n0x65be959ceab786271d4013a5\n0x2ee6a8ee35d8cda9\n0x2dfe484e0b8f15ed33765b42\n0xf54f9d85a97f02c3883677d4\n0x2ec0d0aa98423a98\n0xdced53c92322489b7d85d87c\n0x2a2b385c82af3cd9d4d401c2\n0x265d09d3c01c8c72\n0x62dd0958d2476b0a173e0e1\n0xec7ae4dac0c000015b5d67f9\n0x1439f777be5ac0ff\n0x8d2969b815ac0d9d61073ba0\n0xbaa75596875070542534edbb\n0x9df7989fc9b28bd\n0x466339c4a8ea4507f8628b6f\n0x206147ea407a0e84b2fce4a1\n0xdaa2987bb741d0c\n0x5b4f8f0631893b91abf87745\n0xaaefcb778e8398cd3eee291\n0x2ca30d0e7dd1450b\n0xc0431373f21a1a6eae51af1d\n0xc7c8d9676a20e42cdc9bc2df\n0x146b51baadebf723\n0x878c3e3b7d9785a1e3e7dae0\n0xe526a3c0d481534e3e3b112f\n0x64984db21e606cb\n0xfe6348f3eb6789b9a0434d9f\n0x1a99cd483fe36e4112aef7d3\n0x5a8dfde2322bcd8\n0x2ffe27cd700b62f887bd2131\n0x6ef300aac5b8f211a94427d8\n0x2a14cab5ff9db0f7\n0x618c3931c0983ef103411914\n0x1ccee8bc03d5e64ad454797f\n0x2ad13e942aaf9a5a\n0x525c3e8f430eae40602ecd3e\n0xf681e280ea19fb2332419fa2\n0x1cbf5261d49ec2d2\n0x343832c515380875f53131e\n0xda0639090530896ff933e030\n0x1e213d69e760cc3f\n0x9cd8718c628897e9eeda627a\n0x35e703452cebea4fce1b0782\n0x2c7be6018d27a247\n0x2b00c84a639576ac62cd676e\n0xd3e9ad72349d281d080b13c9\n0x12c42099a5fe1148\n0xab1beee70edf9f9bd844f99a\n0x6d056b15d4929b8a5b46f32\n0x10a9da617a8f1f81\n0x2e0f34975523bb89087a5035\n0xe5f8279459d0b5cef30b0793\n0x2448167d4bf19b54\n0xcd8ce78fd127f0b846644ea1\n0xfdc011fa5074b8c484276989\n0x1d16b9cd8d4b0d7b\n0x7ba0ffae38d3ec4027130cd7\n0x6bc8ca85a90b29b4961f45d\n0xdfaa0d07ec0a9f8\n0x64008a98ae6b63920cfa76a5\n0xd41a44640ddd6e56b165ef16\n0x22913486e1e4cd35\n0x1d34703549ddc3324ad2773b\n0x8fd1b19d79e8ff12c3e25707\n0xadc12e6af4e57a0\n0xc4d54e9854f69a7b2bed02d4\n0x8dabadc597e3b5c9ad65cce3\n0xbc4c8af45c3d453\n0x60906d595ca1ec951fb9b824\n0xe857bc957e299c15ab2cf8cc\n0x1ed44921339ffe5d\n0xf6aca9e3812b5d0a5595463\n0x73c0a5c9e6f70b2d95c21fec\n0x28196873dbe45a6\n0x63f689f31dab9b038e823bfa\n0xe6e3f889e88b9639e92874fb\n0x8aadf6d66ef6fd7\n0x5235aa8cec07d423e72f8e5a\n0x6e5762b6f2d80c89004c5241\n0x27dbc7ee7f699e9f\n0xce4aa0b23944d0f48fe9ac4b\n0x3205fc547b1e5dbecf76c291\n0x262691a18bf5f30b\n0xded6e7da396818426f61650\n0x6397d99a08ab7436fbf37e4d\n0x809dc37b70c6e7\n0x4c97b74c9155ace3310076c6\n0x272fd4cfdb56be451044d6f2\n0x205679cb65f8a6ef\n0x86bd346e3a0e4fa9e713ee27\n0x8c999aaaa21065bccce9b891\n0x203191b22d56497a\n0xa2dcdaefc6cc3af258b6ad70\n0x18659eaf0c4db76a94f10ff5\n0x25f11d5b35310079\n0x13e7e4c83a489d98f484ea3b\n0x16e1ce51c6f52e34fe596ff\n0x12f45b06b7741d6f\n0xbd198072327528c59c3645d\n0x2f97106fcdfcf5a26a80a861\n0x1a49363ae6006a1b\n0x65a1ee1713228ba1b21d5286\n0x4ae296a4a6b044936c65899d\n0x792bc1ebb65dcbe\n0xdc6dc004d234d30cf4a71b8a\n0x7dd0ba472ffc6d1a6a61162f\n0x16e61e831363bdbc\n0xe742fed51f47da2bddc644d8\n0x45ff4d918d3ba0dea88ab2e1\n0x2a9c736742adb820\n0x7e8b173b4535611aa821ec2e\n0x3ee5e8c3943b1a26c61966c6\n0x448590c4d4acd8a\n0x850740cb714a2eeaf5c9cfb5\n0x4fca94e9ea2242a734126e4a\n0x128a84a5d40693e1\n0xd719f84cbb7a466f3dbe7790\n0x8012731ca983d2548445c9e8\n0x2f60bbb77443d343\n0x97854fb01d9cee50b7d4a\n0xad59ed6c54a5aa56d3d9af9e\n0x2e44118794857fd1\n0x6cfc2dc2f8667eb436b9d95c\n0xa59afd48967a58b0973c0ebe\n0x2b88fd43356e0aaa\n0x2dac93f7fbf01c5ac45dd3b5\n0xcaaa48e8c37c66ffba07b1dd\n0x1b124658797747be\n0x384dc242d941e23aa7dbb725\n0x908c5018677f1895839abe2d\n0x136a03e800169f01\n0x253fae2881c429712895bdbd\n0x813b0a1516e623148f14a3fa\n0x263b3c7a8236182d\n0x3b1437f5633a0ef931949900\n0xb1a6ba8983fec6b2f3c97250\n0x1f45aa0b2cba39e5\n0x11d5b0e4876eaf9242a52c1e\n0x1abc5b24f0f3c6de1b0ab541\n0x113547e0c615a40a\n0xdc6a3dca88fa85db2161ae95\n0xe3476aefd5c030f44a2f97f\n0x199f7fc4b897f61b\n0x1e5d67367ac32736a4d81ab1\n0x51dd3107e002b5a0f029d16e\n0x16d0cb788a1e88ac\n0xa671ca171532b40fcf33ba01\n0x1dc0ae2764f21257d0144a7\n0x26dbaeff53c47fb3\n0x7e1ca25126de3002687baba1\n0x929cd71b686cf319b0d5ec8a\n0x6deeba1eaa44cce\n0xbb89e882371ef34a44202322\n0xd899e0a7fb249f4d0ca46fc2\n0x121ee7083f69cfd7\n0xc211a157b8a4b059c0555ddf\n0xc85b3249fb22ced663795bc7\n0x302a09860705d97f\n0xb13e9858dd2145c705b1856d\n0x5a4232e15ff3ba45541be710\n0x12b6aa3e2d90932a\n0x4afcc7f366191e8fce81ec06\n0x5808e459d8ccddc22e6fa6bf\n0xbf38f453d5b7c0e\n0x62b95593e60a52bfee69192f\n0xe263402b89fb6700f86eea96\n0x1b993e4c65147a89\n0xd719678b344ca82c845901\n0x673983c1dd7924d038f69b7e\n0x2be03fc914e88e9c\n0xf686020471a763f23bf21f7f\n0x5bb449fd7a728308fec03cff\n0x1b676d1b68e8fab9\n0xf8f1d634e918d83e6ed3fd12\n0xd5a7ea3e1ea7a0944814852b\n0x1ca1d5a116eee6f2\n0x91e728800f3dff719e332862\n0xe74b9ffded3f8fb039cfa733\n0x23e5599a4a8c35fa\n0x53522d10ab25b08f69788aa8\n0x34420d1485f2dcac26dbc273\n0x12a999940cf275a7\n0xf281812d4a7eba90fe927b0e\n0x1c4407ded37626158ce68b4\n0x284ae99a5b3f1b80\n0x5d9dec12c969c052cd55c379\n0xc8942994d9f27778f858bf3a\n0xbf424b189ac8870\n0x52388453bb8989bc807c1fd9\n0xa43b9b64c214afc3fecbe9c5\n0x29e1d7acf225bc5d\n0x6f40f12ed219ebd5eef77ac4\n0x8cfa2ab95a095af9e9076a1c\n0x28b5e8a3a5e82f6\n0xb5c1714ada3e3244ade33f2\n0x4db26373915673c47285e49b\n0x25dbec54db5694ae\n0xb0fffe9318b44473239e2f34\n0xa363511f868e0fe1df51a579\n0x2907fd91764f3a87\n0x10033089afbeed528edb2429\n0xe98d1accfba72acbf21ba557\n0x16c10d2c78be45a9\n0xc30a158b9e16c7e12fac97e4\n0x9c01efc120a5f828cda11d44\n0x280283cb2e5aeb23\n0xa4a47176b124988338ec3f23\n0x182b213f1399ab995492a777\n0x21f220a0c6255bf2\n0x44004b32701eb580ffafb15c\n0xa55ad348efba8eb4a434d295\n0x27b9cec0f084e59c\n0x276b221486651500cb2f4b8c\n0x695a03d23711c0db8016e476\n0x2bf3267351183029\n0xf42b3a1290ee1e2867573fcc\n0xfc8c86988c5d448451a726b4\n0x238531a538de2044\n0x853e414b56e7f889d0a02f75\n0x7fa2157c50b103f4e68c094f\n0x20581824c8722421\n0xe80c3cd512a779a5ca53e107\n0xea9b37fbbc2161de14d231a3\n0x278a27779c6b70f6\n0xd3475d691fba30c0da9a9709\n0xebe400545adc26457279c76f\n0x1889ff9d60c4f14d\n0xd863ee0c04a010586f1e9254\n0x7b8f2f69d54807f46f10f8c1\n0x911ecd81b1a419d\n0xe7b8ff85d6c2921ab3249643\n0x7d07cfe8398f2998e838a9cc\n0xad16876d67117fa\n0xebbfd2ea8a2f6862e3dec1e7\n0x372a3fe3443b1b1480ada6\n0x6c2609807e449e2\n0x3074ab185e887a096710eff1\n0x454b4549b4fb709280680a8\n0xfb82bbf23ebefe9\n0x45a7c208c11cb7d77438b974\n0x8e02e6218de41b7f094bc114\n0xbd6e5bc812d6f7d\n0xd8e24f5dd9b4cc862261ff1a\n0xcc79ccc1235f7b7a0cb369ef\n0x76c8e755ab1de1f\n0x30b94f5a4e6479d72ee5c01a\n0x9920ad0995a2555bb4985806\n0x18560a1b58f6483d\n0xc671a618bde94814da85af0f\n0x61b63a70097f90902e1e3058\n0x2958c89a47a53d55\n0x6935ad40e12f1cee4a1e1342\n0x39b7a42a6b280ba5c02a3de7\n0x22f34fe43831623f\n0x381d1a69e743b67b08250a96\n0x6b50f67eb78e4eb914b99fe\n0x239e6c67d5969029\n0x8243bbbf32a024a963c0544b\n0xc5bf477ce6ab7d82d7ec886e\n0x2e523fc455a612ff\n0xa1385f068309fc65feba3e40\n0x837f004b94bbaa210305b912\n0x11367f49f654c222\n0x11f3328478d426da9f9df7f7\n0x908fef5d0db143fc39c4759d\n0x403645cae0e5d2c\n0x45d698e8c2c090f1e608cec5\n0x536927eb96351d57cb973c12\n0x73eae144f394f3\n0xae774e07bbc01cd957f5cd7\n0x33569710958e2a57327a2e4d\n0x1385ad85caee5582\n0x7b9cf34c3afb5f3c471b30f6\n0xeeac91352a5486d79410ca1\n0x2b596bae2c11c2e6\n0xa2f0602e29aa4cf0c4200cd\n0x3dfd82161948ba7254eb6379\n0x2fdd12bad84f4406\n0x55cfc8dc0d13e25eb8d5d7dc\n0x3645be049cce9ce01ff4123d\n0x15d936c5b90cb846\n0xa19b77dcb47891fa946bf564\n0xdc2dd5389b8aac5c30901020\n0x17719197a7e63467\n0x2e6b15e70070692b72b3dad5\n0xd3912d325680e0c0600f56a3\n0x214cac4dc56dfb8b\n0xac3157509d1051da015f4f7d\n0x74c194a8e314d3bf39a6dcdb\n0x27b2dfa49928ccb0\n0x3741cc7dc0f399b98ebe3168\n0x3512ab5a04cd5caf27b7390\n0x23335a8fb7b527ae\n0x6ab27971ed1a385596691bb3\n0xad82db9fd83befc4e129fe28\n0x19118808dbe87e78\n0x2775046e42e3622658cbed5d\n0xfe4d2c41aa721e62ddbfe56d\n0xb715d1d1010b2df\n0x5118e39bfd1e9e14503496ec\n0xadf610586cb0f84c9dbb6fba\n0x9cf161e5ef86c3c\n0x8c6fb38b71c88a0227f062de\n0x86e19f2b5ab597476ea742df\n0x2ea6a046e0292905\n0xc1ee3c922e7e6171390c0143\n0x31b48cf6855ba54a7ac2a40f\n0x2f9c660bc1f300f\n0x420069a2147a94d15d6def8\n0x65c43504a8d674720b80fa18\n0xc8195900e6f05b8\n0xe5420431e0588cfa5fe631e2\n0xd911ecfb3613a8ca25ae804c\n0x180b3154de689f85\n0x2509c8ac7f05e31af0a24f06\n0x70ad88426e792f8ee4db7431\n0x2bed934ff1606c9a\n0x7b82ea71a4f7e05866430c00\n0xf25846ae3812ba811295a9d6\n0x1e534b378b28513f\n0x713e934e459d23786d8ed751\n0x3cfc532aaff10473c3fb7be0\n0x177ef99bee0f9b2b\n0xf9284e452668f57160a7d9be\n0xb79bf3ae19bc2e5137e3831c\n0x1dba796f80aa6fd\n0xb9088daaa7962bacce1c392f\n0x58672df0188c983fa81f2f8f\n0x1f7d0ffbe3cae734\n0x928736deba5dc36673fa2646\n0xac410ba57e3b3af2f819e967\n0x94df580d4982f05\n0x161d41fad903433f85bfd0d3\n0xe01265c47832761ee275fdc7\n0xef1fbc5f28e4fb4\n0xc978065041e12ad144a26ea0\n0xf3fcb349e8ca90f04c367efc\n0x20e9823114e7bbab\n0xdedf90261f931275fea224e3\n0x19597e8c2c41265f2ecd9bbf\n0x291df4c226fd9b3b\n0x705d2443fbd2d2fc81db888\n0xf5f3ba5fdfc047e134dba7e1\n0x146bc6b91c6ae931\n0x1e74ba8f7229c95a6e098266\n0xa1fe9d80ac52570b5c1feb91\n0x184575e43310082c\n0x2f29d43b9316e44b7ae4d51c\n0x2d2e752b374e911f59a73c66\n0x1f537826dd3512d0\n0xb1582cfc02cc62c874d82a9d\n0x3dbe194949196dbdb8b0e2c9\n0x8e8d39bd0cf9904\n0x71b8dfa1d5f6116221bd5187\n0xd53b31e0a3fe6dc54cc5c211\n0x17a3b9582dfeb68d\n0x3e08aba239e3c8c780849053\n0xe1ed9286e6e523a90c5d1b2d\n0x102593e1f5c2fb04\n0xb664dd27ce009ad8e25b0950\n0x1d4afa4f6e938eddae4e2e89\n0x2ed867206c51e7e8\n0x439e5c61f8e5c55b0cb8a6d3\n0x89b1ea3dcc70fa8e176b0bab\n0x2a7b6e74926139c0\n0x1bb1c08381b6a2101af36cff\n0x18725387c48873a9a5cffa84\n0x19d269e9eee0cfde\n0x2a5c1b32612e98b012537b12\n0xb79a12c006d50b29f870e45f\n0x2068d1d5c3f80010\n0x3fcb46038dd8616bd4dc9703\n0x693d7a46f7c082c30f944973\n0x143dff8ff3b1f1cd\n0x6f98633816986a209ad2354f\n0xd914ffa16c6c265c0e82c025\n0x265a729d6a419db2\n0x435ca8e59e78aacce1502cf1\n0x232a5d2f00e2443ae526ba86\n0xc554a76a1a56974\n0xd0955640531c947ce313ce0f\n0x7a5aa4a5f4990703cfc91d33\n0x15a758e399e679bd\n0xd3aef609031c588aad7834d3\n0x5a3d6c65b6c861ab80e771d0\n0x10adaf062b39fade\n0x6bbf4da3089e4023ed9f2bc4\n0x293af9a81ebc4ed4373d9e3\n0x1215e247662028da\n0xcb90218d145e9107c844a641\n0xe0bda08222af0a990139ee96\n0x2069d8a3af572848\n0x8e5193f7bf0c18614268863a\n0x70d5916b43071d5c8ad5e5b4\n0x1bfd4500503ff2b3\n0xda9a9d96e80e628beffd7556\n0x8584b1df014e0e2eaf5c1eaf\n0x3f1e75b8503a1e4\n0x5c94f2b99449b89081b280bf\n0x4716041108e202d127a9dbc5\n0x195c66d17a5e6df7\n0x82e2136965a5fd40d399d621\n0x7f0d4911f85778cf47716aa0\n0x17ec49fad5824c23\n0xd56daa9fc14369655a2ec4b1\n0xbcbb8b6f8bb6c0c589510bf\n0x2a7f303a774fcef5\n0x12174a62e77b831a96ef1690\n0xdfc621e5e31961bee8908efc\n0x2d78eae91928c012\n0x50b6496f83bc505158c2e6d5\n0x116c23b60ecddb8c8a6d3da9\n0x2153baba33c44790\n0xd12977850a2413a4e63fb433\n0x61d8906abadf863733bdc3b5\n0x11328f425b0fbad2\n0xcde9fef37c0d143d78400a77\n0xe3ca694b8da5e29ba14e2948\n0x1177896533fdff75\n0xac9603502fc20db79b5b57e2\n0x6d717c43702c3b4849d030ae\n0x25f428981b23d396\n0x499f891796c63dcfce7a0528\n0x2ece8ae7207cd54876da5caf\n0x2f23125ce62dbf9\n0xf31fa54d5893f60d605494d8\n0x83a61f1a7d2d27eaf9b4c658\n0x16430c9681a86efb\n0xbc8ed462bb844d394f565808\n0x65aa1f69c767bb6dceef6909\n0xc4485738f43e36e\n0xb9ac78d89a236efca20bd82a\n0x7cf50279df4790191874dca4\n0x110602508f41a307\n0xa61333011b385d989973abb0\n0x982c2eac84286b827403c9c3\n0x1bdae935e2bd6848\n0xcfdc7e0ef775227888bef82b\n0xb09f5cface16cea23634584\n0x2576aebb36d247e8\n0x7cc1d22ed3440a271a433a1c\n0xa780c95081228d9b6fa89d69\n0x2f30cff8a40fcbcb\n0x1b68785859001d238fa89118\n0xefc7b4181d9d45f07830f96a\n0x24eaec3304de5933\n0x796f26ead7568bbbad907d60\n0x466f05486f1ad97aca3d35c6\n0xe7870758f17a373\n0x39662befc8ea68481329f754\n0x21e2d3df1dc4e29859b78a7e\n0x1d989e0d0e57349b\n0x7c6b30606644eff7a8f5716c\n0x38da741d2b7d8257da9871c0\n0x72f0fde06e1874b\n0x4ce3d964be2d1ff1bef6e93a\n0x17a49456f9de7a950c4cd225\n0x243e0ce1b9d197dd\n0xfd85c5d9de1f4d2858802c25\n0x7bd9bd394e43d3d79ae34034\n0xdfbb11d14d608a7\n0x6b4d287e940f0e3d9a20d325\n0xc0893b4e3c943af2c895c78c\n0x144301380592e437\n0xd5da05519e9e055bca4800a8\n0xaa515a0cad8ad46678c1c705\n0x2d87f60acef306cf\n0xb583744f02e924489bb21532\n0xa35be2aa2e918584ce6795f8\n0xdc08a5f33696727\n0x63ad3444e40e0d1b50b86fa7\n0x9f311b5358cd05b88df78199\n0x20b59b422afacb24\n0xe97e930b4f19a7184a3c54e5\n0xe22dbf1cac36e220b0f1c24f\n0xa32c7b3ea1c7e30\n0x14545662f52e5f4a4477ce8b\n0x3d9500eb6e572f4daa23c5da\n0x57f6b9b09a546ef\n0xa3292389bed8e82f453ad3be\n0xb7710d3acaebe9723df67c9e\n0x2203039aa28efe25\n0x186c3498fb2604f314611f37\n0xf4a0aaa2c0e58887468031f\n0x1dd523e02c4fbb87\n0xe3bad12602d4fbf154e166a3\n0xb215ca731a9850e53a42f5b6\n0x1b3f0e1dcaec26db\n0xe2f2643b449bc67740f10b34\n0xf0331d4b6797c7dcc36f2e84\n0x1d98ee9db70ca2b2\n0x7e8d5aa28ee3bdcf8378c99f\n0xd25d9860fff3955ef0315aec\n0x19e942f3b1fb3f85\n0x9d41311383857210cf440c70\n0xaed24ffc1a67d935fd430a27\n0x7997166de29279e\n0xe61b3acc4cb80cf75f485672\n0x36a8e5113329b37e3c656be1\n0x20e210f9fb8f4097\n0x1b46f32ec0bbf531467a0bf6\n0xbbc29db5edfd84b8f1913673\n0xfe530a28e9f366d\n0xe4c90815ac82856aea825272\n0x608871c6833327108445c7ee\n0x1648ed8034284eff\n0x1d36ab66c0f61a56f790a754\n0x85d2990bd059cef232ad5f19\n0x13508a0f2c2fa59\n0x5d74aa6ef6d951affbb76687\n0xf4a2a1dc5537e2fdd0016645\n0x2dff65492dacdf83\n0xc2864323077f21b4b7dd93a1\n0xa173c5cb6a9842022e020b0f\n0x4329e48f26acdb8\n0x40a5a46e255fc740e6fcbc79\n0x510e66089fce6348ccc362c6\n0x436bf1d4e9a91c2\n0x2953d0f4c478ec0c754a737e\n0x28fa344709c4dfb64b34e360\n0x12094416b1e37b52\n0xd494c8b1ef5610d469d665d3\n0xf00e5162f19dd5202e1239ef\n0x19e8ee772be08bec\n0xe5a1c91f8d3c01e163b4631a\n0x533a097b7f3dbe27f39fdcb\n0x2e4bd5aa0aa1f48a\n0x8287aba5718ecbd4fc83008\n0xec25cae9c02048c8fae22916\n0x13fa897404bcace5\n0x63969c3dc937d7e6ea4f5616\n0x6e1a7be9bd8d88c165b3f49d\n0x16d77407f8657ac\n0xd8a6c6e21c7f0d6dfee40d23\n0x344c03a4bbbe976a4ee2780b\n0x23790de14c60bbeb\n0x41dccde5172cb5f0a1844b0\n0x58f5515a7802b07cb0867315\n0x2e02c443f0951f73\n0x3a56341a3f37b5720e1c5b8d\n0x6432eb1baf1bd41cfb7d6127\n0xc70be5475703864\n0x44e7c5979f332d310d2c67e2\n0xcab0ec36e8c6e3f80c8af07d\n0x196002f83b6a9de1\n0x22565ecaf6d4db00acf6a084\n0xbc204f9156ce0c0fd0595725\n0xef9e2b290a17491\n0x93557dba573d929e377c30bd\n0x56749ec00ae06ccc924a48d6\n0x1b5f6d655261cca7\n0x68c7f4e9e666109ad91b058d\n0xc9995c39508eaf178dffc9b8\n0xb3f17dd83b2ad76\n0xbf05c9d50ac472b5009b391f\n0xe932a538d1695ff91c9a5e94\n0x157a8a23940c5128\n0xbe59d81fd7aa01464c5af4ee\n0x85c312446ee63795435bda77\n0x23397bc83c07fa02\n0x6f517a51ad758e20c82875c7\n0xd5fac2fe92e01ad5c2ff9ef2\n0xa997b8b1e9c8999\n0xc1068a9fae799d89bbdb428d\n0x12bc95d25f5011a979174c83\n0x90d99d741587cb5\n0x1d2b31dd0cd570fcaf153737\n0x6fe3ba86ab80904a45c46bc1\n0xd72e6bd9032decc\n0x41994a76d6f18ed8b904b0b4\n0xfc427afe5683a15033a6e7e1\n0x2d7c2a84f6fbe06d\n0x3d325126a2b69c8e81260b7b\n0x78e910837f3aa960d8b300f4\n0xa282f2f0174df86\n0xa706854237fd1109df55e3af\n0x6660da83cb77e6676f82de7f\n0x23cac3e7fb609987\n0xef06503b5e424d5ee587664b\n0x514bbc7d6069535971cfb308\n0x1961c65cbd29e66f\n0x1dbcccc05f88c399cfe54d70\n0xf272d8f9544abc2600af2658\n0x57635dcb356d785\n0x9f3a83bce61897646cec8c70\n0x274febb5d1d6d1513eca329c\n0x18f09d9fb8cc03\n0x3fefacf350b4470179d60e97\n0xf80c07cc0254a1dcd6dee30b\n0x27f2179939c4a13e\n0xe6d494d647d0191b2c8509b6\n0x625187050a0dc6213dd7f8b0\n0xda768792d8f2bd2\n0x2c0766075e28555670dda143\n0x98eab1dea4be2c86b91e1fb2\n0x300c7738751ba423\n0x77f942fafff95a38e5d3a7d2\n0x1ebf81b77cde740a72de591d\n0xec1c367fd42529e\n0x2efd7e14932ec71b42565ae1\n0x438d439423d3fd04c5c43280\n0xb86df3bceffd24d\n0x1bbde37fd5c978e76d1ca7a6\n0xcb8f4d666afd9237d24ab76d\n0x4ee38c1ae9b23d\n0x680d37c01b9f2dba1f137591\n0xb8fb29f4d2d7dfe60aed6a87\n0x7a6e5a6848e0f\n0x5a75e6a14c8045568e5376db\n0x4a9ada3d6fe3e8d45b126dcb\n0x6380084e48f9fd0\n0xd97d5050f4529c2ba2d143cb\n0xe34bf9fe97b294ef50324e24\n0x16911ecd39741ef7\n0x9f89ad7cb31ee4a91a3d2f4b\n0xf30b8a34736bdac514dd6f7d\n0x2e7b825880a53089\n0xe5681d242777bdd33ca18a25\n0xee0420e03d86be958299d5ef\n0x2e0a575f9f26efa\n0x83c0345e44c5e989257c1ee3\n0x21b613be912c668f418422bb\n0x76a58c2dcd3052\n0xdf5a5668d918baa4bd4127ba\n0x100b1ac8782e7035bbe79dd4\n0x255135ff78695d16\n0x68a98e8eae8acd0e6b4e3dfe\n0x67d3cec028c42eb1a3f5fc44\n0xfbd13a9fdfccd50\n0x725b433302fc6da4b0865060\n0x9e712ee1edb39a1fa0be531b\n0x2473c7c91b1d0623\n0x725b0476e41b66b65e8f66ed\n0x4cb111e768fa9d8b05eab90a\n0x1a7b2636ee317e7a\n0x53fe12374e1eb8e6cc66b117\n0xe9bf38d9d5fac690833d1a20\n0x1d26ed63b2efa498\n0x8c6f34c7ef5d1a304d2bc9b7\n0x82835006a5f8f7a3e3133e32\n0xc64a1da542c0e39\n0x1440423dcb73568015aad1b1\n0xec1bf515ed956dc4f260c1dc\n0x2aa0bb5f4c299f07\n0xbbb36963f698184945e34365\n0xee65a4ed03040941327342ec\n0x2e5f72a05a00c3d8\n0x4b5d25253180ef59a9b39f6b\n0xa0912195d4a0be8412ce7a38\n0x6bd499318a3b28\n0xd60ae5e2360fa2fdcafa1ba9\n0x4c53fc938fdbbe892e61c536\n0x1777424902120b4b\n0x9935ad3c373e58729d26ed9b\n0x4dff3d1859caf0c8bfbff405\n0x121c14ced021ebbe\n0x7121ec8344570a2ef776c030\n0x6cc052db77cf819245610f12\n0x2e62c0c833536761\n0xd063eb57702aed7b2d4be40d\n0x903bd1a2a94b38bcac003e1a\n0x29e58ea701025c03\n0xb18b5453404fd8e094893e6a\n0xc6710259672ce2755efb43e3\n0x2a3d5d7a84a8be9a\n0xb46400a378894f4975539fb9\n0xcf2c7201461cb893f2892a3a\n0x258393e027e59915\n0xe7ab26669b7a086ca5496dea\n0x6285d36a7a9dbefa17f86f24\n0xa4363e7eec5cf35\n0x562fc52e69bafcb82be3a3f3\n0x68f0f5448a25b6ed91512c94\n0x1d17bb637cdf8be2\n0x1e75d91b4aacbaece7230c0e\n0x45fdc13107eac9e43bce38af\n0x1e9189093ad4a1cb\n0x6e880504c885490ed907aed7\n0xe179d4a4d7d1d3f40f05c53b\n0x4b6573d20bcd32b\n0xd4c48f60ccdd1df2b160fefe\n0x4b52fd911afcfd4a12b154cc\n0x2116ec520db244c7\n0xaf10f9b6a4e8f899d8efee47\n0xca6a1eeec195862f76632ca7\n0x23d9f4946abd722e\n0x89e705c61dc38cb056400493\n0x75ce3e0b9a0850a8e079497\n0x23f70dfa4c211ea3\n0xb8e3a60ce06b64e3ad4342f6\n0x495a44e3c05da2dd27811a74\n0x2ca1420d234c4847\n0x7aecb496cd6df23cd4f9a499\n0xd6149cdc78ee2216874df1bd\n0x204dbed164d0a8bc\n0x26475d4383ccc73ac74ee7bc\n0x5761518d84b93f15e5bfe41\n0xbf5661960b013bf\n0x81f6ced96bb5fc357a656115\n0x1e2fc3153770b8643ff9d05e\n0x152a3493a886f1fa\n0x8c2417445d2c445ce34277e6\n0xb11f223458fb7ab86d48d46e\n0x4dcf4ba54008469\n0xa52abe26570def4a2188f24e\n0x818e65238aee223a78f07b17\n0x133583fc13df1207\n0xc234be9afe86a1a8d10101cb\n0xe35d8937d582bd73f81bd150\n0x18acee2f162a6774\n0x27d9a143b392ecbebd43f5\n0x42f22b2baee270707cafeb34\n0x15c82c783aa77835\n0x5ba87195383074669d565cf0\n0xe2254288c4cc2e5884ef4a73\n0x2c1df7c40d383700\n0x7ef0795dcfbf59a7777279b\n0x6c65289922556ac87fb791da\n0x286e23dc6378c2b7\n0x3ff2cef8d7757a51d6316a35\n0xf20c3390e916d6416b18f334\n0xf219cc0111d2bc0\n0x1221b94e639e13f3aef1420b\n0xa042ea06fad01d8d45b1a983\n0xd82d421bfe47275\n0xd8cb649fe39f5937a08862f3\n0x67a083058c1b0f57f89e09c\n0x2d104ce43cdce614\n0x5e87871bd9bff4ab12dc6d5d\n0x933434a061a7c0b1eda6a2c2\n0x1d920bb01e86c3db\n0xaa249070e60e6b858efb7da9\n0x35774a214814956b419b066a\n0x26b295c79812321e\n0xc21181abd3393895daaa654a\n0x4fc6453b312874485fa55182\n0x2c0be109fcff4fb7\n0xb1d9dfcbafefe685e7ae7842\n0xdf0003b41489ae0a369b80\n0x182595aa6a396b47\n0xca4d5fb8e3600df1942dda39\n0xd33ed3931d59d63bed2ee124\n0xd9315c2b653284b\n0x49a92a3bb18746caa68a79c\n0xe144297b69571557335b8164\n0x12b35847c7df26b4\n0x3b5cdfb09bde9bca4920b8c9\n0xff920c193a6c40725d3e29a2\n0xd6a1b8cc631ef21\n0xa918a62f0c4d51fad0c96705\n0xf4e36a4440de96f3d4c1ec0\n0x1038c77640f7d798\n0x614b798725756ab6ced4796e\n0xe0deebf5d30db67edc3efa60\n0x2f5208f11a86418a\n0x3025db06b8e5dc15296f9859\n0x825bd550b4434e8bda4be2fa\n0x2984ff1f66d75794\n0x22598d266d0d5111f077f1e2\n0x94c5ccbdd7c472b436867b91\n0x161a3ccf1a90359f\n0xdf39eedc6fd5cb5350fd59f3\n0xb18c893f577992ed06bb3835\n0x376cb167843017e\n0x9484140aea7c76bdc8816a9d\n0xcd5ba65f7081bf8b4d771cad\n0x2c5ca0a9cfa6c224\n0xfea3b9a92aa08d159db75bb\n0x46e8ae617f41dcdc8fb11b2e\n0x2b1d41701817e206\n0xa1728ebdb838baeb4920c2df\n0x683b6712575b3a171a50d7ab\n0xa561e7d25b90b3f\n0x9d15d8459e3a837f8e9bfe4d\n0x9f8edc4feca10e7c5d542267\n0x2e17bd8de486344f\n0xc193fd2b4a2c893f370cf042\n0xad5aba4bf218ab0ce59382aa\n0x152aedcf6843822b\n0x143cdfb4f041a24b6d13d1d3\n0x87018e5973c7124c4643c806\n0x22363a16916ccfb6\n0xa48a256058be7b8a3829fe80\n0x4e3cfc376e388a7dad82225\n0x7f4b90c8608d9\n0xf6dacf91233f81a6ae88ccb1\n0x91a2c772d53afa73e4234347\n0xcfd9e68618b99bc\n0x9e415967514b1d0f76353b07\n0x3c7fd9ce00cf579e763fad9d\n0x187765224303bb2d\n0x8055d41f2f452b58ad00d1c7\n0xf50ce67ac5ca52ff789aa86a\n0x30382dfd11761ab9\n0x4efe56fa697974f5a01454f6\n0x9741cda4f71db04548d3f656\n0x9491b0e03062767\n0x2971dd421a0bfedde6f5c4f9\n0xadc3b3c5d95ccc18b1c4054f\n0x252a58bf2fe1f62e\n0xde340dbcd6430f981981e393\n0x175f1c6fa1e83be581a3d23b\n0x2d165df513128cd8\n0xfbab8d7ba9ff102fa2cb29ce\n0x9d714709082ef848b06714f6\n0xe4c3c1c7921be6d\n0x4c7b21945fa47a9f79b5b9a5\n0x7568520589fd71a88f72a453\n0x19611f30ab68b939\n0x5ff074ecfc553587ac27fb09\n0xb148ab9368bdebcdd72fe746\n0x25c6e78bc5b58f05\n0xab2481e31d1fa9fbafdc1106\n0xc8d8dd5bff0915c040c06e42\n0x27b6c970c9258e4b\n0x62e9ecec0b06cfcc14e38d07\n0x96be6cb3eb766cfd7852ca48\n0x2e81d3fc43719f81\n0x2d535f6d05802a4d8347e6b9\n0x18579eee3760828c48af8c32\n0xc68c3de1021be25\n0xbe7a44719e62591fd6343e01\n0x132835bc2de6dc02cad3ab01\n0x55117449e7d83c6\n0xbd5bc07b6a97618fb7b17a13\n0x470beb8bb5d3d378757f60ab\n0x7aeafcb136c6df5\n0xb132a6a411eabd6a9892b9c9\n0xeb586c6686e866ac00dfd5aa\n0x10598ec1d4ae6047\n0x13a6a48808e93274fd8d3104\n0x43bf6a5b4f92450fbdd2799b\n0x1cb0c4f2671292cf\n0x6312687d6599b84b38bd86fe\n0x296977a06710df9d9ca02d21\n0x242c72dad56957ba\n0x221921234ff75544d8baf329\n0x3b65754a8116d4eb7b6ab859\n0x24e289725ef3e0c0\n0xb5a535b15ea39c9a44f63737\n0x25bb9df47224e4084afd6b88\n0xff24043297b174\n0xac4d4321966d65fd53dc6a6e\n0x9599cc3c86c3e05044b78245\n0x1ccca4326058419b\n0x15d3ba6a8f84a67020e2a952\n0x1bd99fbd824b460105167d19\n0x215894192319f46\n0xdbb0be03f86c07111d3aae42\n0x662b31954d0841289e2f4b18\n0x146a0ec98b206701\n0xba76c36a42f4f8708f6dd0e6\n0x95b3de668d9c46d69d212b7\n0x2d7db2ea9e3d454e\n0x70fd7a590aba95ff168b04ee\n0xc47b2977921775053969fd89\n0x260fec8589983b3a\n0xbda04c666cee19c6514e06e0\n0x34005670bbd36866ba972787\n0x117754e92c46ba90\n0x56e95179b76edf59871a76d1\n0x404171f722de5d8ddbdab291\n0x2bca3a067ea159ea\n0x25d437e6fe6e4178d0bb21fd\n0xdc2e302918e5f7b54588bd85\n0x11f2f4fbdbc17ecf\n0x2799633211c1527971327f2a\n0x802cf17f184fe60ddd150166\n0x86ce563695e3e95\n0x8e0cc93df54570962091a825\n0xa101797006961bb2fd770c55\n0x4426789376d1db3\n0x8f72867dd99fc5350fe791a2\n0xbe7e418ffdf0128949a30b4c\n0xcf8114f241f2620\n0x41a340550d6801e319bddc45\n0xdf9056562d5bed6fdba1f8fb\n0x44f622bf3a67624\n0x9c681d4926edf382d1f9a97a\n0x2f2801b71b3d79122f9f92\n0x10112a9157fb5cbf\n0x15c6cc6a4ebdf304e842dcc8\n0xded8574bea9cc7513c498597\n0x9a3f450305c67fc\n0x50e543a40d9abc3f11d1bd26\n0x15bfdb77633347a2f8183e9d\n0x172a1782578b8bf3\n0x94f86259a7bdc7fb326f7740\n0xf21f56b2fcbf2160f5621d18\n0x199a25e838c33474\n0xe88b11d9476afe9d59c0af60\n0xda90b7739a02eeecd4f9e71c\n0x17505979bb62654\n0x69708392fdc4bd4e3de30d19\n0xf4526b1d095e8e38131826e0\n0x2a57883b54f1b601\n0xe04b1cc20e92fe5bdee8acc6\n0x46bbb4e096d15196f8503d75\n0x97bbe6fc6fedcab\n0xa736984281e17e5d96bc8fb7\n0xf30bd069ad4ab73d07ee78e0\n0x1d012b600f98b76a\n0x9d5c8c71fec2cee32c414ee7\n0xc764aff5015a45a3cc2e235b\n0x1b12941bea6e6012\n0x9102ff8db2887254aa35de05\n0xae584551173bcb1076d0da3e\n0x166911911dbbae7d\n0x46d31313c55738bcb14536c1\n0x13db4923c3fdea9304f219fe\n0x4a39b69be327fc1\n0x1c842d392db073058ff0074\n0xe13386a07be01c47d6a33391\n0xcde7329eef105e1\n0x73448cbc6bb91b1b68e1c4b2\n0x802155ce58ab3b3462e1998f\n0x294b84921c5e87d0\n0xcf938c53e669b243c6163357\n0x5437060a43cce837a7d782ce\n0x2bec9ed66710354c\n0x275d691810259001c58d6c23\n0xa35561acda786ad7fae3a13a\n0x1b5f73edbfc3835a\n0xd527896afc8cc9e5dc4c78e8\n0xd9ce90d4d056f0751dbf6691\n0x2798aefeb49487cb\n0x7b73a30f2d95499435ba1651\n0xf16c46f3e703acc27b2141a5\n0x13286d1749e679ac\n0xe3742ccc51491ac20ee0fb2c\n0xf793583ff4906f953556138c\n0x286fd5b02b9c0a26\n0xe634a8ccc537a19acfc6b7d4\n0x12842e4ea45174057674657b\n0x2593bbd93b16e77f\n0xd028e9a77fcc6b0ac1163f3\n0xa0e8ea714e55b3fe67f5be7\n0x2aa705ede5af9ee0\n0xa80a410d226338b30d7102fe\n0xa7c2e8783e937ccf5e954ee\n0x30069193347ab852\n0x9702128cead7e06a35d6460\n0xef61c4f626a67f304e63c802\n0x1b984fab00a84424\n0x3ebf7e51495f6561865766ac\n0x9acfea5531fad515f594732b\n0xc414ccbdfade775\n0x42918990c26bf26206801959\n0xa86e8ce1222df31ce83892ff\n0x16aea15456865c56\n0x4122c86ed0c94024aa18558c\n0xdf00a67ac1912c3718627a07\n0x181692ac7af9ec8a\n0x313135f1e4ad147a57dcf57d\n0xdb8873ea6e0fbd042d211917\n0x13e5560ab060a73c\n0xe23a62b956ea3afe612b08eb\n0x5383e1819b630d1062d2e6dc\n0x105da59f0080f6eb\n0x149bbea9d9c0e3f79c2010b7\n0xd5a93dc4b3d0cee72581f51c\n0x1369b07937165a40\n0xfa29063af3976e05122f3936\n0xdbbcadcad16f9509e23f5dc9\n0x1803ea6c62f77d28\n0x797b6c81f0ec90ec696160c0\n0x43d3e995f304f0509ec7c269\n0x1b20b858db1051c\n0x6f9ecad91ac522d1d464aa86\n0x300e8e1df52a533e677db8ae\n0x100653279f3d9f5c\n0xc44c61166ff3b4b7f7d26e29\n0x5b25f24dc308f5f7f82365cd\n0x2ac7de1dda2b4f61\n0xb44b3ba1ce8a5aef524b016c\n0x9bd54f7021351accdf9d9906\n0x197b81973cd315f2\n0xbbd6b644286d51bbeea38a0d\n0xc67e04bacb1d02e23354e337\n0x1bf0017c555ea534\n0xf320775c835e15ec7c367239\n0x706518cce905ef32bf398856\n0x275a7c4e7635b7ae\n0xfb13e488aa2eba227c25fd1e\n0x562e16a9c4ad258ea1706e55\n0x15f64d6e30a58c50\n0x89ddb873645f30d64e3de231\n0xe0fb73e389ff8932d7c85cbe\n0x215493591155b90\n0x3998fe40b38f1c5852db4f9a\n0xdc869b563b37817962efb5b0\n0xcc8672568357718\n0xc7f5adc3cad45cce4112d933\n0xa8352d4bf8d4e6a14f6f06f8\n0xe5bd383c9149aed\n0xd42581aed5f9344522ce243d\n0x1706b294afd7c75e97d0968a\n0x1f98de447a5750bf\n0x31280db5cdb60fda76576adb\n0x96667e8ced5e7e4b75d943d5\n0xec6677829f93b1c\n0x2d6e5b0853fc1799e5e7c273\n0xd4784bc484140bca9922a88d\n0x26c083362c740645\n0x9e962174191db74bad1b6188\n0xd86ab90a99c1c3da2abf7d6c\n0x152066a2adc86cc7\n0x477158b5f00c0d8652542365\n0x45f380c24af5d96a67baddd3\n0x5a1d554332fd15f\n0x9ea71711d707502146afef6a\n0x1de588ce8b091e8d0a658438\n0x302cc3da88a7b8bf\n0xa5d3f8704b85b4eecddcbf62\n0xa987b080f5a4dbbc6b167035\n0x1e8d3650fe9f6de6\n0x7cefd3251039087184c6a0dc\n0x763b044c6961b7a56224b12\n0x5ffc2b61fe0df29\n0xf03ba70c18010ed10e1c6623\n0xdfd78797344f70e37ea60adb\n0x555d75191e527ca\n0x84ff1e24e085d099de8ebe6d\n0xcca4e19cfd660312fc6e14ce\n0x1ef62a347e8423b3\n0xfe715ee21c5f16a3acc2fb0f\n0x2a0d9a8bbce1e8390e21e3df\n0x1ad338ee1258ad76\n0xf7ff673a80dabe7cac60827b\n0x742af4cec249e71158adc585\n0xc5262d48f29dcb7\n0x5b88e2eba4f9a964cd3eb770\n0x74c14182b4e8896e4d6ac31d\n0x104a17f7a62e5b72\n0xce3185d53d2a090fca7fe738\n0xa48e84655f47dbcb632ccc9a\n0x1612d4aaa8c0b3\n0x9840f59f40e610ba7ca91ff6\n0x2e5b42d0cbd31aac4bd26663\n0x1a86ff8a278324c0\n0xd5085363ca669b847d71f389\n0xca060baa4442cae66ded0eaf\n0x56fb158097b2a14\n0xe28bf161c9a4865e11ee32ae\n0x1e1f63d389b04389d7455d12\n0x2d02ea2c95658380\n0x4b784e980906564e8633e15f\n0x2c0d5fe96026179560cbb995\n0x9d858b6210feecf\n0x9c63d1f2fee4f57485fa6de7\n0xe66d7b55a75c52bb1fa0185e\n0x1591281156049ac8\n0xb6e388a9db53c9e0ec286be3\n0xe8b1758c8f90c4c1233e9e2\n0xb21517556047f3a\n0xe21a124c7dcf473ef3ded0ed\n0xc33657ca358e905c8019c1b6\n0x25e1e5d948543079\n0x60279973531c0ad9a4e3e7b0\n0xd0248f1f0ea8f0f13705156d\n0x2d957ab4cfec3c16\n0x9932192157b06cba8be2e956\n0x1f25523c9271876a84b9d653\n0xcdba0361c1fabe\n0xcce55c803093a203a6e7b547\n0x2ad9fecc5bd0f6776430136b\n0x2f853a8a5e7328e1\n0xb24b18288280d326da8c4004\n0x44ead88e18160602b65fd14c\n0x1b0fdb82fd854694\n0x1833e7e555b899f3a5ec5e31\n0x32bdcf9f86f03958a8370079\n0xce927b1db471fd9\n0x1605c5de6b3705be95e2e7cc\n0x7c76824d6686da8f21a2ba06\n0x2ae39619b870fb5d\n0x68e112744fe8f7be5466bd4b\n0x8d9966f0ccbda8d1da098428\n0xb287cd7b5e5f382\n0xe6fcda01bc726c2df489b035\n0x8d6d390b75455a80413d09a2\n0x2cd599eac2da0cf1\n0x57329ff8787de4dfca784b50\n0xca1ec6575d7b8e999916afd5\n0x2ee59d1cd206d6b\n0xa02b9e015b83a30d9f9bc6a9\n0xd001362936a3b648c158d46\n0xdd04249ec52fffd\n0x3db1f9e8c242e59026a099ca\n0x106fba5f04b4abd5dc65c85a\n0x1c8ebd7bb97a8e88\n0x62645eab93c484406daecba8\n0xca3ab7b9fa3441eeb29c3742\n0x17dc5afd8d4212ed\n0xe4d20cad10ac9c65397a6afc\n0xe9891a5dde0d6e13da8a86d0\n0x176134981c263819\n0x732252b2d462b8ea5c91e8da\n0x8c9842be1f1f5cfb287d2906\n0x10bb5018605c6d52\n0x847cc6d601eea88451039679\n0xbafae76ee6fd999592e7514\n0x1fee75aa9e27cd11\n0x528c7f8a2bdadbd1b30db8d3\n0x8244935ba1201d1f99b237a6\n0x2a8a4cbdae8b12bc\n0xb205abc60e1e869df3eb5370\n0xdbec22c882786e1ee74608e1\n0x20d10f3dafc6452e\n0x4517372c18a39e39691738c8\n0x52ebef905c9c6649fd1cdd67\n0x1bf860fcce053551\n0xea626c0f3887f9f6680cc33a\n0xa1c9fb57bfceacacebc4e76e\n0x141f47ca8ab406b5\n0x6dc57b6f595e707de2b25df4\n0x34a1f79e1dad063f5a5709f0\n0x24f65a9f4568ae30\n0x9bc6d8ddbac82038bf39f2e2\n0x102c74c63d0547aa51e9997b\n0x11516abcc4a8093d\n0x255a63a11ceb25b01a9ee386\n0x727dc72a8a903ffd8993f6fc\n0x2ba65e83c5977e41\n0xa09369c9263d5525a364a78d\n0x40324bfa0051b61415c1e3e7\n0x2d264c780ac0bd8a\n0x9244479cc88744ee6f142ed8\n0x122013bfadbe5d604c35dce3\n0x67881d44b3ec0bb\n0x7a65013de942bf5cefd9124c\n0xe162d37736a26933661d8aff\n0x21baf23bd54a7241\n0xee32b9f64d1b666c1bcfb9f6\n0xe70e7e5692553a7aa44aabca\n0x17092a83e8a221ca\n0x72252f9674815c0e4341e9ce\n0x624108e2a6022b5ab965ac89\n0x1617477792872f41\n0x675704f8b3a7b20f60633aae\n0x411d1d1a5d90d3b9fb94585e\n0x2dbe2046c842d1e9\n0xcbf99be51121db5960bdf3b1\n0xb250a00eec6f9be91299e18b\n0x1a8f56bab1dc1089\n0x672c45a67fbad97f3602a27f\n0xf377d85b70db5554230812ac\n0x2e5ec59d0bfd7b30\n0x75b873e896ac630f25be86e7\n0xd2a9bbb74ca89bd102ae7fc2\n0x2c65b670c524479b\n0x66910820fffe62ee3c21793f\n0xad25f8de47155b710782114a\n0x8b9031697957671\n0xb131861b2bd99f0d18e2bf59\n0xb2bd5acb02e3867f37a67e06\n0x2e7ca74eeb61903\n0x9f11dfd89af8bc90d82ad476\n0x8f9c7b39115f716edd53dafa\n0x2bcadcb3ae8697e6\n0x7eda13ce4e86cf5ee073b241\n0x87ba39faca5ae897c8e82866\n0x7dc05af910cbb54\n0xbe\n0x4e05e34a6c6b0d7ad95b03cb\n0x8b1fbdba3d3339f745612dd5\n0x5361ce2dabffd53\n0xf05d643782c3dfa92c905c32\n0x3b81d442c8b444c7de7cf159\n0x2104b3e5886b91d7\n0x29f2dbad7c390cd160473126\n0x318ed621c36d1894033cc514\n0x1798c010e6dc7f2c\n0x607bd8ec54fb06e3e8273876\n0x2cfcf568e4dc319a54eab39\n0x27f0c62ff0ffe7f1\n0x75600493d1824faba7c6cf09\n0x20c2951c8629a68235e9b9f1\n0x14a446f71198ff4\n0x37dc9e833216886a280f5419\n0x339775a0cd4acf410d579f85\n0x2c80384936df2305\n0xf2e012a9fa3faab2696e9267\n0xc0d30a58bd9be0bd5e8801db\n0x20cb5cb4dbe9a6d\n0xf890b43baa99916a3e4dfa82\n0xdcb1e06bed52f33eb7278090\n0xa4adef119dedea5\n0x8a7c58a4875dcfe6a221603b\n0xc70c7af2734b9474400ae005\n0x2fe0c123c5c050b4\n0xcc7e8ab2464ed53bf935aa8a\n0x28e1cd3be7b8313e9fc06af8\n0x90646defb02133e\n0x17b71149edd2142cfeee10fc\n0x6734ea4a7c134a1b72cb06be\n0x125fa9d11f21aea6\n0xe221d1ecbed61df46c2bc27f\n0xf7fc5640edc7922de02a9b9d\n0x1e25f673a1134db2\n0x15ba1ce8ac271181b8b82078\n0x891cab674a6cd8d506c2e141\n0x2300333c2e0f8a8\n0x71f3c719db9e65797175f24d\n0xc7b8c0243bb5cb694f81e12d\n0x10f21361d0b34c28\n0xf0a264c8fb4109ed5ac02b33\n0x39ac2ba29226369b783d8b88\n0x1eb01280be9839c2\n0x34c57d1fa297a5a92c166269\n0xc6edb79d6d8257eabd43bb70\n0x11671e94cc07844b\n0xdf30c014014c3443e3663cac\n0xd12ba876deed84c3eef8c23c\n0x107c3ffb7a210e58\n0xc8b38631cdd34381efc3d593\n0x8297f551ca2779d3a2c0d02f\n0x26166c8411d32e77\n0x271f3e236949697729d91763\n0x26ef4079f58c48524ad7f283\n0x25b87616b076e021\n0x52ddcb0d80a4dbfc5bd9d7b2\n0xca0022c2f55df66981a20ee9\n0x1fe760a1e0efe782\n0x9a7aecfc08d1dbb530e25481\n0x7e5f127dbac797124d754c00\n0x27bd782822502833\n0xb5c7bee8e94a6a12c7bfce10\n0x8553b21d1ebfe26205f551b2\n0x1edd98f2b73516cc\n0x1e56be94339e2506978fb680\n0x18163945089932f3b802be44\n0x4e794bb0459075a\n0xb2d5c30b2b48a6dd131da5a4\n0x7e4e96c6201077e047842414\n0x27ff43c8817aa332\n0x311d6076729df8a38283f866\n0x52cdad0847a713767deceb34\n0x470712b2b2e1696\n0xf594241b582c36e4f42c746c\n0x15d61544ef51d3915ab0a8df\n0x23e974c1e3c4c0b0\n0x52bb91da809fe251b2066aba\n0xf684b8f470c3b3b8bc73bbf9\n0x2b094d10dbfce3a0\n0xbc825bf9601183ea0e1a96f8\n0x2566e913bbd157dc879f479a\n0x101fcd81762d078b\n0x89a8ac9a759179c0032329de\n0x25b456748ed1d94cd149dc17\n0x10511c508eb86e09\n0x7ac20c4b58cb0e474c2b41eb\n0x91104f7f31d452821de1b3e9\n0x1679360c47b4dce0\n0x190bfcfeeb8909e15169ef26\n0xe7750368e00f858821ceec51\n0x1217c45d2f64587\n0x5c821a269d37feda3b542d44\n0x496a07f876143cbf0b313e9c\n0x22a3db673f958e9d\n0xd61facf54eaae66613a36640\n0x40dfc419f1ef84d7047eb221\n0x61fb2ae2ab9c0e\n0x25321e6370808914bad666d8\n0xb08cefc9c2c2edacf013c1a\n0x14a72384186b08bb\n0xd2db7b559ece8ef572b0cb5a\n0x369ff0fad73177db0f08fe77\n0xf3920d38093f9e9\n0x2c3e6fc2aed25cf4b0bb513c\n0x7325d5ce0d9c7f5275000d2e\n0x1a1b9730364415f\n0x19c5b9d99470b7d971445742\n0x7ab17baba53b6494e4e1d93c\n0x17311e8324bb55dd\n0x234b435923fc86aa6c1501fd\n0x8b2d8fed39dd18d648abfd12\n0x28a45254f04f0d59\n0xab7ef402f29e85b3ec5f1840\n0x7e79cf65d4b357ec3adad1ca\n0x2e2bef0556e50df0\n0x22dfd5bfecc054e6e3b3dffc\n0x70f51432cf65c6ab396b2ab5\n0x2f0179310518dd6a\n0x73aa207ad292e51d8c56f0f7\n0xcae6b0473b37c76f7b569fa\n0x2bf64e537d8ff5eb\n0x78b5d352af2543e296f5a80f\n0xa5195db93c888ab02e894304\n0x8d8b2c9c0c25e72\n0x4409adc4b9ee6bb08024cf76\n0xde6c4893eb59ce8b5de0c34b\n0x9cc4c1fbd833e18\n0x232cfe3e044cd527f72b1925\n0x855e03636439e189391c07d\n0x47bd18f9d23c910\n0xa3a728db952e49d4ba8f527d\n0x4ba95d33f2e0a233e790029f\n0x95f19b7b14f3083\n0xe032dff7ecd29e670f97bedf\n0xd5e950d0c17cad74fd98cd32\n0x2275dfc6836c5f12\n0x2fa2c9dc1c7c590eda1baf3f\n0x430e2ebe8234cb31db86737a\n0xcbb7392222a427d\n0xae12bce7c33c6fc3cfc60864\n0xb6d171b6cf0e0f3df1afcfbc\n0x2c6575a6d3edbc8b\n0xfeca27fccff5d20a66ca1835\n0x14570911901c1517b8864d35\n0xe95f4f4e9611b57\n0x531139517e7f4136d45819c8\n0xf5901ecabba2566609bff1a\n0x2fe973ab43641e1\n0xbedfe2739a59092b41d2557c\n0x31c57e78536efd165dac4b89\n0x2781d05d0db7b7a3\n0x9eb47c108a54bbb5c91029b7\n0xe10494e320070b3b230fd04b\n0x2136a5aba6d93e78\n0x51d06a275393ed4dd24c467b\n0xfbbe0daad44bfda6c9100038\n0x2d8abc5600344404\n0x6a05b6cb24ce8419f6c3becc\n0x24f41731d90ef18f570770\n0x155dd279dd37138f\n0xad78db312e02096cf402ba09\n0x54720d3e3ad5145fcce44aef\n0x1efefaf861fcdd64\n0xc29e398dbb86f2b227b3a922\n0x3ac545f9e137f960340f9f03\n0x187a649581a285d4\n0x83f3fdce0e5e89a4087f368e\n0x28a6b1f2c20cdc26de06660e\n0x3226f211a740760\n0xc7439a422799041fc18d5232\n0x5ccb26094dc6f9b67f4a876c\n0x13f1a352aeed460d\n0x74dd54588f17430347f15f14\n0xd64387e0cc5ce9da45d46c7e\n0x23dd3168f2cc9f34\n0x24a772659a39ebc4c5ef8028\n0xb1335a118eb4b83b73943f65\n0x1001fe55bc9e98fb\n0xae9bc51b39457496de220b49\n0xee158e31389eef0f6de865ee\n0xf6d3142be2ec4b5\n0x39110c64539631a979e6c9e8\n0x1d6119cb1ccecf95d66e64af\n0x233381c6013dba6a\n0xa3b36a5c0be0e119d323bb97\n0x43309ef3aa2374a4c8345343\n0x2a90777c358a516f\n0x85937ab66d7a73d556628987\n0xb31538708e72ba7863fad36d\n0x13a3aa5435855050\n0x5be45a5128809f17770ba2d4\n0x8fa9038b89a413f56c05bd03\n0x10936ba077c57e96\n0xb68f2822b71c21abc7d0421\n0xd2d166e6f183b2c2d888dd01\n0x235d12f96d1c8195\n0x1f5212c923ba42786f41b566\n0x3fb7cd398819dd6c1463a786\n0x2183f221f49f5de0\n0x8d090cbb4d5b11441ed8c6fd\n0xea9b2711321c1c47cecd81ba\n0x1e7937eceba9769e\n0xfce140a02f319d4fceac81af\n0x895337d0c0162fed74cb983a\n0x19d73a31b79ec856\n0x7e43bc0709daaf566e2b45e4\n0xd9451d459f318c95a86c68b0\n0xe1029228cc52318\n0xa579af770ebdd425b6e4eaea\n0x9c9b2b7f5a5fdaa98f249f90\n0xb18c26151b77b20\n0xe7338ac38acf6064eac17f7d\n0xba6f41ead7d38e9f59d1273c\n0x257f5044fda7890a\n0x6b9a76080e58470f14125002\n0x8fb71bb6536993faf8ceb165\n0x56de6885d87008d\n0x402b391a3ff2d18292b901a9\n0xe6d48d4147ff2248fc4e0ea6\n0xe096eb296f98d18\n0x24df1748c5bc475c30ecae27\n0xa39bda74f30fc5941e250995\n0x50e3ca438b576fe\n0x95bacb5c65e5c6141f9e222c\n0x3feb4cdd500ae8a636b2c701\n0x2e26a611542b1c12\n0x9aeb3829c6e2bc3f72afda37\n0x5d4ea032d03da168f539544a\n0x2bf87948cad85bbc\n0x97daff3ae6166826451dd70c\n0xbefc512e6fd7bad4a4bfa4b2\n0x27ec632714fab5bc\n0x116bd6aebe8a932c689f0d96\n0x6e9ae5357bd4d1150604666b\n0x109303611b3b57ec\n0xadea62bb498f46415cf434b1\n0x905711e5051d685a96726fad\n0xd90af8d89721327\n0x32d93c5ba95f8eebdc9b2f66\n0x2819e6e6c5bed10b8e6e3ae8\n0x13e998c9e20e4921\n0x23d79a5e3ca299af96a66962\n0xab6d6bd2981f4da1c9ec691e\n0x22659cbdbf250359\n0x112908a831f921e88303baa5\n0x6e02777962be3532887f581b\n0x23cfae3f9db08c08\n0x2df7231bc2cfb7975d1fedfb\n0x3a20b3cf719cbbfcd22e2c87\n0x183d121b0b27f687\n0x8c5e07f9f2f3d62fb55bc8c7\n0xd5b3a72093c970f460168de3\n0x2b87db54c64c39c7\n0x5c67c0952704df5e8f082322\n0xd7815b904922bab3be387c16\n0x13b1fd05388ca6a\n0xa3db557daff4087589765cf1\n0x5202efb2dddd11d69364631f\n0x15a169bc8fb62d6a\n0x127eb31481c78110cf170451\n0xe4f8e4e7bac12c8e4dcc41b0\n0x144d3414e8d8efa6\n0xb67921f73ee9d0ae4c2e1715\n0x1f4cb7e9ecd06154694ec548\n0xfcbc05bb018bcc\n0x90c68de2c70d1c9d246c6698\n0x6ce4eaf2c46c844161cb32e8\n0x641749a91418695\n0x83e70dcf99f1da503150aa39\n0x5b2f5bdbe16b89ae5cd0fa04\n0x1bdafd57cf0e9bf8\n0x5796925411256f955ed5d16b\n0xac37eae5f0ee0f2d197cff8c\n0xfed2d97c767e8ab\n0x9811bae7ac3406d1ef88322d\n0x8551d702957c5386348b352d\n0x146c8595ef86e214\n0x3ee0aa96a8a62f2823b95cda\n0x38d6b914481532547269979f\n0x1fb1cf7226930f05\n0x9009d290907f2df542e3bce4\n0xe6316915b7c2bdaa79cc9054\n0x2de4b20a1bec3f42\n0x4a0d646e9db97350c2037d48\n0x2ab996f4c67d9ea3da4887b3\n0x2e407737df3e44bc\n0x75f08e3bd23fd3ce4ceab83\n0xb5f73c22ca287771c2e1f8c\n0x2c60a283156e66cc\n0x35f9e99c8b726f4782633dc4\n0xcdecec0ee2476e022feb2650\n0x1d8aa46b33d5ff5b\n0x9093d13e2085a62115fc1258\n0xbe5ed722ea1505c9fca90992\n0x2cd88eab8462d2c5\n0xce754619b2d1953d39f44c85\n0xc9c5fafbc79a63728c95b25e\n0x187fa5df1fd66e6d\n0xd09a8a253f3f7328c15fc1f4\n0xcb7d1fe12369c53de8f5e935\n0x1376670667dc7098\n0x41560edefdeccc6c86e6de73\n0x6ffbe2844809114cab081424\n0x20db8570d1c13e16\n0x13901e7d4cd42267e6fded7e\n0x6bc36438d8c81e631f42dbc1\n0x2cea8b4cbcfcbe3f\n0x2ff9c1e75e57f1310104c871\n0xcd19a5395b4f98749e021f3d\n0xfe87ebe175036bb\n0xe55a8111fa2d94b8db45ab41\n0x637e45decaee410a005eef6d\n0x147154cfbcf8709c\n0xa5021d5a6f7eb7e0f5d81fae\n0x7f8e1e6d4a4641b7aad164b4\n0xbfa037ce608a81\n0xaa363fa0d2e390c05bc64b58\n0x6d72a8469f5a36fc5e436bc6\n0x80592e212e52f9e\n0xcd258e8e5df11544fbbf59a\n0x1133c9d9b40011e8e7da3e71\n0x5f6c48eef47e4c0\n0x3edae314d5a334533feb846e\n0xa49289341c36c1205b186372\n0x2e78bcbe3c4df7f6\n0xbf0b9bbea4776393e1b3b639\n0xbe391012a51786fd5de21e4f\n0x25d2cb6f22c4ae9a\n0x22b281fe0746f5c38bc9f121\n0xf7592e2ee100e2662105f9de\n0x191fb6259b069763\n0xb6b6b963c9db72c1c8b3ee40\n0x2752d51ff8abdbd9ce1742eb\n0x1f8f6149cb34d1d\n0xafe4449927a9f1c0c0933566\n0xca65613a0ee022fdcc8bce25\n0x17a042a9d3b40bc7\n0xbbab374ae65060db5b28aee7\n0x209b9b5c84e8d9743442aff\n0x1e62f9ca25515372\n0x4fdcd96034719b21470e9d66\n0x260a4cb4ef49803425c4c33d\n0x28370b262bfbfa4b\n0xf25554aae4a364883333129a\n0x28228d6813b2ab0b26068a7a\n0x19fc292474e225fa\n0x707cba4a00568d7255c23f99\n0xb5365e6e88633789c545df3e\n0xbc728a3acba4f0a\n0x3c0c85416443c86c40be20a4\n0x4a7b1a97b980e0c7ce2646c0\n0x54238aaef3324cf\n0xd6938ae19a962260006ed514\n0x7b782a3f01d79507132e9a52\n0x254ad815fbc06f86\n0xb4d0df128254740d5d6a358e\n0x26f6ed50956bd0d598858627\n0xa6c598fd63b9f2e\n0x6a71c6fd5ab69f9c958d2a6d\n0x18a03e7302cf0d31b3807890\n0x25c9a867f7b98df5\n0x83dab2941f484237618553e1\n0xe8a0a13a52e680a8bfb4d995\n0x1823ada36b21d4a4\n0x5e0318005d7b314b5b420762\n0x13675e36992e45460027ddf2\n0x2d5903e2a240f903\n0x4208b0c83405c772af16b5c3\n0x1611fe29051a3ebc25abbefa\n0x13ed1ad45317bd4b\n0x3823c2fc4d73e07c04b05ee8\n0xf8f36220235c9112908accae\n0xcb104966b70adc5\n0xd8dd21a6f1b6dc7c4c40b099\n0x1a33290acbe62b63666a197d\n0x22af10be6abc5ad\n0xa8ecd4584fe07fb2971b41d1\n0x3ce86e186fc13626e6487767\n0x1dab3edbfcbe3963\n0x998434716ecc30d38cdffe33\n0x1953fa38d81488bc6aed3e4e\n0x2536deb5ed88dcdf\n0xb4bbc9edba8d0c81dbcd50ad\n0xa2d00657b6c84d6e7e5812f8\n0x246d788189bcf0c\n0x3a24d0064451712f5e168a5f\n0xb5415a66ed47aff677fa30df\n0x6ddbfdbfc7bc53d\n0x350e69b1d085a6169f3f1f08\n0xc273d31d5d7c2eb56233a3a5\n0xfee4362dc6cc61c\n0xc937e9951e17b7660391ebd9\n0xe87abc50507ceb17bc5c22d4\n0x28ad0f686e9d1bba\n0x5bb83a6a4f769197f66b3d93\n0xcaac43fb8de579b4ee695143\n0x18177b343814a7b4\n0x76c046620ae66e189a5387ee\n0xa095520b979d814fc5274adc\n0x11fbf8e024c250a6\n0xac948602f43c60653510f5d7\n0x9aefc1231a9ace1e7780375c\n0x4e731ef87c64375\n0x4f2a76cd939d4e38f204c97\n0xa9d52e9142c57bda5d1bc56f\n0xecf138d4446b2a8\n0x3382e383bedc619fe4ef0f06\n0x568a97fa53b751de7764c0a6\n0x29b6c3ea5e6cf845\n0xff7e4a1a65f16cd89a86d5e2\n0x47f408591cc1e26d4c430ae3\n0x1c21d1b3a363ff03\n0x77294041b597a020c2e21000\n0x3be4ffb21f1435c605090bf8\n0x5a87e92a37992f4\n0x3e808b867f1d9948fb421196\n0xfa155c2c12464865eb497883\n0x2b02b43d7ad6516d\n0x6d106d8459c3d27eebd02ffc\n0x729fde7673ce424e350fbaab\n0x3010ca65f1210384\n0x9492dafa4cb837967155496f\n0xc55311dd51cf5444dddefab0\n0x7653abdb3a753cb\n0x941af921e1d2a444c81305e\n0xfad9ff21b1d1ed40945159a6\n0x2770b0437a313906\n0x3c7c4534ad8d70de96f59461\n0xa7e1976341817c5177d138eb\n0x2e7a4eb5a6a7e3cd\n0x475898d38ad53be26af77851\n0x2fe1e200422e7fa189dfcf50\n0xda0119cbe506365\n0x4cc8f6bbd575619daba37e97\n0xe92ec8923c04e24383831546\n0x17b0338206f9d21b\n0x84dcd1d684910029b63de73\n0x667f9f322d8eccf3b23f784a\n0x1a984fc11e8b42f4\n0xd314956dd3c371f3e2e2dd24\n0x68f5db327a3904a4704d5ae6\n0x17f47c14129a3240\n0x2ab9689c5ecd391e0392f156\n0x438c2e97befc02fa59b60ee4\n0x2d6cf74c583e7378\n0xb24ab5c3b9b5151f28e9bbd9\n0x82ccd98e9a03b35edc80d97f\n0x1d5cf2b227ad51b1\n0x80cb79f633b00d8c1a7eb801\n0x949ce57d5daa53933e27277b\n0x16b241ac6cbb1813\n0xb26bbf85acf3cdf17c198a2e\n0x7c99cc2562575853cc9fec88\n0x127e693759fddae3\n0x7c5d1d6715ec46431fed2289\n0x5cc537a55447a95c3cb07499\n0x1f36a73a73390656\n0x430b730850e8d1a9fb739406\n0x5ff43e8ae65c637a2afb0d9d\n0x1866225b0674780\n0xc4a053edece61cb1c3dca43a\n0xe5ad5221eb4e1cdee321ef39\n0x1ed0883e180ab253\n0x819cc4c2979c4f40c056cef\n0x479adcd36c3f9e2cef58af14\n0x1564a8a60d8e02e5\n0xac33e73fe9a45ccbfe7bf3e4\n0x84435d34b25119c74b3568aa\n0x18e9c4b5ffa4621f\n0x9c695aa2da9e91ffa68d457a\n0x2e179225021058e355c5a2c3\n0x2c80c7adcac41cee\n0x11c3a4fe920002045ab3b2b8\n0xa9909b6d94b0b37ebc5d1301\n0x26770e479ff5645b\n0xbdd6426fdfdd1ee5b5e11c5e\n0xe8cb769707f0c1587d45ae04\n0x2b5cd3afdb6c41da\n0x72037b3b431da6865ff4893a\n0xc2b6f474ffc01d8f8a6b4482\n0x2d7fadb4aab84a46\n0xe19a538649b23d5b24ac3c70\n0x99b17921568e5d694965328e\n0x3d68d0e35d67ab5\n0x9d474dabfa6cb37ccfa45f93\n0x9935c0aa085c1853b9683c26\n0x5330a868391dd3d\n0x943c92b5ddb449ecb267ed53\n0x5d2ef2da636b2e81afa0fc61\n0xf84ea50b74d5be4\n0x94135fda07c1acc2e68b4195\n0xc3352670b4fc23569dc149d4\n0xb3212acdda38aec\n0x314393125486cb949fda784e\n0x88f78d0e1924e21657a48804\n0xd4fc88f04b262c\n0x5fc36a1707724f8569dcee82\n0xd5be601ed6b6b67d8555fad2\n0xc1c5c2c34958977\n0xb65606da06c56c7fd28762dc\n0xa8d08f80dc7661bed46e08d2\n0x2a3b7bbad5c7dd69\n0x86b2e48009c68477d9d335d5\n0xc52abdb8a0a617c9588d019d\n0xfd132eae457a8be\n0xb02153db2f4a79f48c34da57\n0x4b5eb0034d2628356d915214\n0x281a2e3c848381e5\n0x8dec777d88374dad80d6f978\n0x7675c46fd4c1e63714fc837e\n0x8a994be88060fef\n0x62222e4f3c7785e9b2318fdd\n0x8d88317df4876a999c3f4812\n0xab5ea064dc0d90f\n0x5c2eae797169d52d179dc842\n0xa122c6722968f2eeb561132a\n0x128390518bb754c9\n0x33f1f68185ee718c293433e6\n0x2d8aabead7477eceb62ca54c\n0x2a3ed5a805254d23\n0x70f5b8ddfe7db1130a5c0cce\n0xcc728c0d183c441bb215d50d\n0x14a7c40996a3fc33\n0xf0cc9976b1e10800fc32512a\n0x6bbc00f44b6f153babc99063\n0x2f3ddf3b4f827bbc\n0x34ce165a720c838e4ba9e3a6\n0xb4b2dcd3c49a1fe1042a551a\n0x2ff6f2e2512805b1\n0xaebc630055f131035aac9b8c\n0x8873175b8f2eff433e6419cc\n0x9cd4ba40ca4ffc\n0xa5b53c9846748885c461f7cb\n0x1236c1a469ced6db3c3a8c66\n0x2be28891165b730e\n0xfd52154d28e834d8d1a2fc5e\n0xb44764d8e55862d3112aa939\n0x1de0104519d3c914\n0x968169033bad143db07ceebd\n0x493f8420cb1866efac213ef9\n0x57a01c9ff6fd28d\n0x74831d2e832cc20e228e6e3d\n0x277c13e1114ceb6d61258aba\n0xf26b289d517b84d\n0x636a59706e3ddceefb416459\n0xb7d41de29d6835b44c20f9aa\n0x69b5f17f5a4ddd6\n0x9daf1c8fbec39e88e42e3325\n0xdf287b859f58ceeaf53ee17a\n0x175c1ef3a1d2e0f2\n0x4eb879c3cd072d82d04a619b\n0x2b8f5d0685634e402c826799\n0x17bffe4ff9578bcf\n0x48e01dbd21bcdcfddbe2ad50\n0xd157f131a2a2082441c2ff63\n0x1681e2ebdc4d3c8a\n0x81e6b6e58c8fd57f23cdd775\n0x71961637285d8d9a75ba1fb2\n0x10504e0581e1ce4b\n0x772f906a8adb7fd93d2f5f0f\n0x87a379fd2f54db45b8d8da24\n0xf12653d4a01d6b9\n0x8b9cfd1423eae79325451fbf\n0x963d6e8397b84e01cd759078\n0xf46798e748f47b7\n0x98d461cca8acf2027f321159\n0x16d2e91b84c8b3c05cebe3e0\n0xc4b02d18dc9e661\n0x238c8a95882d9f264487ca00349e313022608d69281d0dbd26bbcd4011bedc0\n0x18\n0xb714fe4adeb7275798704c12\n0x43d543cefc60fea3d529e086\n0x1402469c3e3069ed\n0x0\n0x9a80b660e9c1c32997c44be2\n0x2d20f2566c8cb2ba29a565f2\n0x6d34fc045094f49\n0x0\n0x10000000000000000806d684870360dd3\n0x100000000000000004076d6fa35976228\n0x2ed8bc4a716d92e0\n0x79daa35db491de3b\n0xf40265992689d433d9a61c88\n0xeb68a574bc013dc65099192d\n0x23ecd2e86cc4c14a\n0x0\n0xa4d74452f79ef87abb681f49\n0x4400b6a2280d46210b6bbbb0\n0x11c93733bb043e26\n0x0\n0x555bb8b09dc33676\n0x14d8dcd5b8292d07\n0x16f3026d21529fe5\n0x1000000000000000011f5f7ea29c705fe\n"
  },
  {
    "path": "src/contracts/autogenerated/risc0_verifier_bn254/tests/test_contract.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\n//! # Starknet Verification Contract Tests\n//!\n//! This module contains comprehensive tests for the proof verification contract.\n//! The tests use Starknet Foundry's testing features to verify proofs.\n//!\n//! ## Test Strategy\n//! - Use real proof fixtures generated by the garaga CLI\n//! - Test both positive (valid proof) and negative (invalid proof) cases\n\nuse risc0_verifier_bn254::groth16_verifier::{\n    IRisc0Groth16VerifierBN254DispatcherTrait, IRisc0Groth16VerifierBN254LibraryDispatcher,\n};\nuse snforge_std::fs::{FileTrait, read_txt};\nuse snforge_std::{DeclareResultTrait, declare};\nuse starknet::ClassHash;\n\n/// Declare the Risc0Groth16VerifierBN254 contract for testing.\n///\n/// This function declares a new instance of the Risc0Groth16VerifierBN254 contract\n///\n/// # Arguments\n/// * `name` - The contract name to declare\n///\n/// # Returns\n/// * `ClassHash` - The class hash of the declared contract\n///\n/// # Example\n/// ```cairo\n/// let class_hash = declare_contract(\"Risc0Groth16VerifierBN254\");\n/// let dispatcher = IRisc0Groth16VerifierBN254LibraryDispatcher { class_hash };\n/// ```\nfn declare_contract(name: ByteArray) -> ClassHash {\n    let class_hash = *declare(name).unwrap().contract_class().class_hash;\n    class_hash\n}\n\n/// Test the verification function verify_r0_groth16_proof_bn254 with a valid proof.\n///\n/// This test demonstrates the complete verification flow:\n/// 1. Declare the verification contract\n/// 2. Load a pre-generated proof fixture\n/// 3. Verify the proof on-chain\n/// 4. Assert that verification succeeds\n///\n/// ## Test Setup\n/// - Uses fork testing against Sepolia testnet to access required declared contracts maintained by\n/// the garaga team - Loads proof calldata from `tests/proof_calldata.txt`\n/// - To generate the calldata, you can use the garaga CLI:\n/// ```bash\n/// garaga calldata\n///     --system groth16\n///     --vk path/to/vk\n///     --proof path/to/proof\n///     --public-inputs path/to/public_inputs\n///     --format snforge\n///     --output-path path/to/tests\n/// ```\n/// This will generate a file `proof_calldata.txt` in the specified output path.\n/// You can then use this file in the test.\n///\n/// ## Expected Behavior\n/// - The proof should verify successfully\n/// - The function should return Ok(public_inputs) containing the expected public inputs\n/// - No panics or assertion failures should occur\n#[test]\n#[fork(url: \"https://api.zan.top/public/starknet-sepolia/rpc/v0_10\", block_tag: latest)]\nfn test_verify_r0_groth16_proof_bn254() {\n    // Step 1: Declare the verification contract\n    let class_hash = declare_contract(\"Risc0Groth16VerifierBN254\");\n    let dispatcher = IRisc0Groth16VerifierBN254LibraryDispatcher { class_hash };\n\n    // Step 2: Load the proof fixture generated by the script\n    // This file contains the groth16 proof calldata formatted for Starknet\n    let file = FileTrait::new(\"tests/proof_calldata.txt\");\n    let calldata = read_txt(@file).span();\n\n    // Step 3: Verify the proof on-chain\n    // This calls the contract's verify_r0_groth16_proof_bn254 function with the loaded proof data\n    let result = dispatcher.verify_r0_groth16_proof_bn254(calldata);\n\n    // Step 4: Assert that verification succeeded\n    // A valid proof should return Ok(public_inputs), not Err\n    assert(result.is_ok(), 'Proof verification failed');\n    // Optional: You can also verify the public inputs contain expected values\n// let public_inputs = result.unwrap();\n// assert(public_inputs.len() > 0, 'No public inputs');\n// Additional assertions on the public input values can be added here\n}\n"
  },
  {
    "path": "src/contracts/autogenerated/sp1_verifier_bn254/.tool-versions",
    "content": "scarb 2.16.1\nstarknet-foundry 0.57.0\n"
  },
  {
    "path": "src/contracts/autogenerated/sp1_verifier_bn254/Scarb.toml",
    "content": "# Generated by Garaga version 1.1.0\n[package]\nname = \"sp1_verifier_bn254\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n[dependencies]\ngaraga = { path = \"../../../\" }\nstarknet = \"2.16.1\"\n\n[cairo]\nsierra-replace-ids = false\ninlining-strategy = 2\n\n[dev-dependencies]\nsnforge_std = \"0.57.0\"\nassert_macros = \"2.16.1\"\n\n[[target.starknet-contract]]\ncasm = true\ncasm-add-pythonic-hints = true\n"
  },
  {
    "path": "src/contracts/autogenerated/sp1_verifier_bn254/src/groth16_verifier.cairo",
    "content": "// Generated by Garaga version 1.1.0\n#[starknet::interface]\npub trait ISP1Groth16VerifierBN254<TContractState> {\n    fn verify_sp1_groth16_proof_bn254(\n        self: @TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<(u256, Span<u256>), felt252>;\n    fn verify_sp1_groth16_proof_bn254_u32(\n        self: @TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<(u256, Span<u32>), felt252>;\n}\n\n#[starknet::contract]\nmod SP1Groth16VerifierBN254 {\n    use garaga::apps::sp1::{deserialize_full_proof_with_hints_sp1, process_public_inputs_sp1};\n    use garaga::apps::sp1_constants::{N_PUBLIC_INPUTS, ic, precomputed_lines, vk};\n    use garaga::definitions::{G1G2Pair, G1Point};\n    use garaga::ec_ops::{G1PointTrait, ec_safe_add};\n    use garaga::groth16::{\n        Groth16ProofRawTrait, multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result,\n    };\n    use starknet::SyscallResultTrait;\n\n    const ECIP_OPS_CLASS_HASH: felt252 =\n        0x396d5915ecf475aab117bb25a0272b261e9e25ffe1c0ce05a51a3f77489c89e;\n\n    #[storage]\n    struct Storage {}\n\n    /// Internal helper function that performs the core SP1 Groth16 verification.\n    /// Returns (vkey, public_inputs_u256, public_inputs_u32) on success.\n    fn verify_sp1_groth16_proof_inner(\n        full_proof_with_hints: Span<felt252>,\n    ) -> Result<(u256, Span<u256>, Span<u32>), felt252> {\n        // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n        // This function returns Result::Ok((vkey, public_inputs_u256, public_inputs_u32)) if the\n        // proof is valid.\n        // If the proof is invalid, it returns Result::Err(error).\n        // Read the documentation to learn how to generate the full_proof_with_hints array given a\n        // proof and a verifying key.\n\n        let fph = deserialize_full_proof_with_hints_sp1(full_proof_with_hints);\n        let groth16_proof = fph.groth16_proof;\n        let vkey = fph.vkey;\n        let public_inputs_sp1 = fph.public_inputs_sp1;\n        let mpcheck_hint = fph.mpcheck_hint;\n        let msm_hint = fph.msm_hint;\n\n        groth16_proof.check_proof_points(0);\n\n        let ic = ic.span();\n\n        let public_inputs_u32 = public_inputs_sp1.span();\n        let (pub_inputs_256, pub_input_hash): (Span<u256>, u256) = process_public_inputs_sp1(\n            public_inputs_sp1,\n        );\n\n        let vk_x: G1Point = match ic.len() {\n            0 => panic!(\"Malformed VK\"),\n            1 => *ic.at(0),\n            _ => {\n                let mut msm_calldata: Array<felt252> = array![];\n                // Add the points from VK and public inputs to the proof.\n                Serde::serialize(@ic.slice(1, N_PUBLIC_INPUTS), ref msm_calldata);\n                // Serialize public inputs as u256 array.\n                Serde::serialize(@N_PUBLIC_INPUTS, ref msm_calldata);\n                Serde::serialize(@vkey, ref msm_calldata);\n                Serde::serialize(@pub_input_hash, ref msm_calldata);\n                // Complete with the curve indentifier (0 for BN254):\n                msm_calldata.append(0);\n                // Add the hint array.\n                for x in msm_hint {\n                    msm_calldata.append(*x);\n                }\n\n                // Call the multi scalar multiplication endpoint on the Garaga ECIP ops contract\n                // to obtain vk_x.\n                let mut _vx_x_serialized = starknet::syscalls::library_call_syscall(\n                    ECIP_OPS_CLASS_HASH.try_into().unwrap(),\n                    selector!(\"msm_g1\"),\n                    msm_calldata.span(),\n                )\n                    .unwrap_syscall();\n\n                ec_safe_add(\n                    Serde::<G1Point>::deserialize(ref _vx_x_serialized).unwrap(), *ic.at(0), 0,\n                )\n            },\n        };\n        // Perform the pairing check.\n        let check = multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result(\n            G1G2Pair { p: vk_x, q: vk.gamma_g2 },\n            G1G2Pair { p: groth16_proof.c, q: vk.delta_g2 },\n            G1G2Pair { p: groth16_proof.a.negate(0), q: groth16_proof.b },\n            vk.alpha_beta_miller_loop_result,\n            precomputed_lines.span(),\n            mpcheck_hint,\n        );\n        match check {\n            Result::Ok(_) => Result::Ok((vkey, pub_inputs_256, public_inputs_u32)),\n            Result::Err(error) => Result::Err(error),\n        }\n    }\n\n    #[abi(embed_v0)]\n    impl ISP1Groth16VerifierBN254 of super::ISP1Groth16VerifierBN254<ContractState> {\n        fn verify_sp1_groth16_proof_bn254(\n            self: @ContractState, full_proof_with_hints: Span<felt252>,\n        ) -> Result<(u256, Span<u256>), felt252> {\n            match verify_sp1_groth16_proof_inner(full_proof_with_hints) {\n                Result::Ok((vkey, pub_inputs_256, _)) => Result::Ok((vkey, pub_inputs_256)),\n                Result::Err(error) => Result::Err(error),\n            }\n        }\n\n        fn verify_sp1_groth16_proof_bn254_u32(\n            self: @ContractState, full_proof_with_hints: Span<felt252>,\n        ) -> Result<(u256, Span<u32>), felt252> {\n            match verify_sp1_groth16_proof_inner(full_proof_with_hints) {\n                Result::Ok((vkey, _, pub_inputs_u32)) => Result::Ok((vkey, pub_inputs_u32)),\n                Result::Err(error) => Result::Err(error),\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/contracts/autogenerated/sp1_verifier_bn254/src/lib.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\npub mod groth16_verifier;\n"
  },
  {
    "path": "src/contracts/autogenerated/sp1_verifier_bn254/tests/proof_calldata.txt",
    "content": "0xf80739ea729635128f87c9db\n0x8bd62cf3413ae30ccb5cb124\n0x3a67b2b92ec8075\n0x0\n0xbada4d3959a1d0e421bd8617\n0xc89c329c82695448393ef4a1\n0xd73627973ff2282\n0x0\n0xdd0ccfe5917761ef3d5cee7a\n0x9c21c25b35bf74ac737c8c23\n0xbaa720e442de1c1\n0x0\n0xcfed88053163a2ac94869e18\n0x36c0fb4ba2bac814885c06d0\n0x4d40dd04d20f4e1\n0x0\n0x4bc54e609ca3e5cb25e3afc6\n0x5027f40e289a48ce76fa8371\n0x9d21063f8f4c60\n0x0\n0xd2a77bf9fbcf68c8cdec9b6c\n0x95e2f10d7943fa1caf07f9bb\n0xab9f6dc9b4e5ef4\n0x0\n0xc88a87cbf7023df41fa14c0e\n0x221fafd6e9cb82c03c04bf0c\n0x2745103dee46695a\n0x0\n0xee684a4bbf22a139e56f2b17\n0x73292c17bae969c87e752af1\n0x158b03356b5595a5\n0x0\n0x99d2856198792afcc16af2182c56515\n0xe00f8bf845ce217630ab77a3351d3f\n0x3\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0xa\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x37\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x59\n0x722eb85ba595ee4a5653d198\n0x93fe6e1d18c33c34e96bc4cf\n0x13de8cf3b7f90a4a\n0xd7ed6e3bb7e8ed4b796ab5b0\n0xe8dbeccb00ea189954d32682\n0x2b4151c4fe6f8709\n0x41e1961c729c2f10319d41b1\n0xfa72fa5bca35d172179c34d6\n0x1861229c1fd50a13\n0x72057ba2bc6fe43049b3d305\n0x96f0233c2a944df5f0a9650c\n0x25c663fc11975f31\n0xa63a3350751315476c2fb401\n0xb135be310271eff0d8fde8de\n0xf0af755e989ede4\n0xfe4bd9e9f2889230409280e0\n0x96dffc3684889560085bfed\n0x344cee4acb08a9\n0xc695823e6e83d3096e236a9c\n0x695eb72c8dc80dd7b9edcc6e\n0xc2c3eb404b4659f\n0xaf037e0208896f5e9f98f116\n0xcf92a7f6b11b3876c22e2f34\n0x15d17a7d1ff495d2\n0xfc915071a01eda9c0f0162a\n0x3e97caaec2e42a8018031a9d\n0x176cd09f53add701\n0x13d313c7ad7d5b744f4dca27\n0xd8cee2412a1c68754169322a\n0x723ea6b9d6dcd9c\n0x831c33c4b18ec243cee69300\n0xf39157f7826c5efafe344373\n0x157fde2c65713426\n0x7fb81be436ced44825c8beda\n0xc3347df75f7ea57a4b08cb9d\n0x9805414cbec7f00\n0xfe5f88429f733a5c29ef76a6\n0x3c7620f86d49b62b47497d2f\n0x146bdc58364967f1\n0xceca5a22b2301be7079d6da2\n0x845a7d2d53ec0b6398611002\n0x2f6fef0717bae93a\n0x1c2fe7659bbaf32af4d4a289\n0xf58c851287415ff970ea1023\n0x2b329329d4d1fdac\n0xd5ba07de90ba5ae2a654113f\n0xff114b8d2ffc83fa5b1d8ab8\n0x43d9e5ad0ba80f8\n0xcd02c79cf4794fc934733285\n0xe2606ba3b42204c9a79c6cca\n0xd78088291f2194e\n0x23971fc0976965130ab9fa09\n0x18f434f521b4f14660db42f1\n0x5b7a1f4483dac54\n0x23772d9fafe650a5f0769aea\n0x53f4c017797bea0f3f756d1f\n0x2d7f9bb9603f8ad4\n0x516bf66b5c72092ca1531b81\n0x7e4a2de688e3b63de724050b\n0x19edf89a0e062ef4\n0x6caaf8c108277c1cf82c4d6f\n0x4a7477e833ad44eb8a53586\n0x1d2c22701f6deb4b\n0x9686a854f8305703c2968011\n0x6b3f8cf3f643cef8e53c7fe2\n0x4d848f76289cd30\n0xb531d669bf24ad0daea89bb8\n0xb47334a823714044f6819b26\n0x1c9da3a885502b19\n0x1e16ef52cca23d9719d90a6b\n0x8a720ca0043f7a41cf63ab0e\n0x20cac68e1b9a5427\n0x1\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x22\n0x899f96c818ac403a0eea08ff\n0x4612678c14001edab0a2283a\n0x1608fe4d3f110f38\n0xf276c0ef6bdb1c5f18bd88ea\n0xd372ad96ab02e51d8fac5089\n0x1e4da800f74aa5a1\n0x237c71a842df80e4ae92d536\n0x989da96f2fd2c33a75549111\n0x2a1bb484bddb021e\n0x67d59d7a0eb0d9110f8a4d11\n0x3eaedb500a0a3cc79b67156\n0x21c0a7203cf660c8\n0xe32d2bf92aecb60f3bf997da\n0xef0960fa4713cb57d808ce5e\n0x2221c072912b2421\n0xb1aa8945e3d4112df5139ddb\n0xfd13eb75d45fd4f36a5632df\n0x2e71922a84e4ffd5\n0xb7058d32b4743d1067ea67fd\n0xda59a5a1cd290f9a74246939\n0xad2d9eb98c7cf07\n0xcf7433be69fe9284ca6f1c84\n0x546d2e640083e4d37fa407f9\n0x1c4217a24775cfe0\n0xc0aeaeac5efa2b7e93e81bf2\n0x1b7a06cd2b85e00e54f60def\n0x90c4716824967a\n0x206926270cc804f7b3d80d6f\n0xf3c6a2ca8205175bc3516ff\n0x1e5a76eacaea5c78\n0xe8ed69b1a18d75a3b02789bc\n0xa42519fa8be45e6e67a78ebe\n0x30a32f24e37c538\n0x47bdff9b2034f6ea0897fb6a\n0x5a3c5f9de776fc99364dd86e\n0x28eaee212f62dece\n0xe8c25e968ae2a22dff93d638\n0xedb7d4ae1f1129eba574bdc\n0x26d7ad2e1618b573\n0xc0127bbca3d571e0dcec54fa\n0x9e23e31aad3906a3a468152c\n0xd3c9da60bef18c\n0xbee3e8e626283ae85f136a\n0x52c41e6e4521301d9cd1ce3a\n0x532fc80b14887c8\n0xe19b85f3fc091152b64278b\n0x9866806a6e92d1864ad6c19b\n0x71418d935c98815\n0xb9573ea3907be3c0cc2e8da\n0x985e757f7c58b10b32e6cb41\n0x2cbc76b5842cafcf\n0x4517ebf3bda6f74c07976fa7\n0xa55f969bcb80139f5cc61a87\n0x15744f5627fd8603\n0xc40cff2e678ff7054556a986\n0x559e28a0a270a94d69c69a3b\n0xaf3e46064dd3a24\n0xd8629b812542e77bdb8abe2c\n0xff70cc97946349457e59db1c\n0x2edf6bcd3005a0b2\n0xaaa652cb3986f89357ca2b8e\n0x1196f2c81ea1138debab00b2\n0x1da1250d000c756e\n0xfff3f23fd6ec6bb7b5bcf975\n0x2382bbfa1883abf27f95343e\n0x170d7fec766c11aa\n0x4a475e6f2d59f7af2601149a\n0xb35e18fce0380b9e9a268080\n0x1c77c6b1d0d29488\n0xeb7cc28be61636214fe6d034\n0x3e6b7ffc307884efd9039657\n0x147f4dcf0da1df88\n0xf123a8fb61d453f457ba102d\n0xa1d566d9cf749657164b282c\n0x1f8fafbc70fe5c25\n0xc70dca82225b4a1416e1024a\n0xfa61fd6f0d1c52e57b5cd186\n0x1e5d6c4cd413a9ae\n0x3cf67c128cab7a4b8295c2ba\n0x9eb55fe22a57dec38727bfed\n0x16df456d8ed02937\n0xa9f76a5f29744dbe699ffe03\n0x9afd0d9f14be821fa04299ca\n0x23cc6746fe097a54\n0xe811a025108cad439f8bec7f\n0x3105f366aea4a9a06f69b87a\n0x1436e4e2b9eb072c\n0x21fb73d34adc475bf3e9d237\n0x5bf29b79076d6576f2bc0b26\n0x75140d15ffc302e\n0x31a8fb1c07b22ec88bcc2f4\n0x736948de3a66884c8600ae2e\n0x2538a773eba2fded\n0xedd0f29c5bb9d35e57e52540\n0x33b1a86d2f0a7c2a96721837\n0x12ec69e6d85a75f\n0xea5f2dd2229b2b57688fd156\n0x23c45650d708b828fe479e71\n0x1b6c1a075d4dcd18\n0x82bfa2719566106791c37da8\n0x4b992b52e994beb5eaa2aab5\n0x1cde51590a621851\n0x8aa5c70e30936567cf59cb5c\n0xd8457831d0d903625d5845ca\n0x284597b9cd2d9adb\n0x7b0b09377318013cfad7da79\n0xfc2b52907dd2beb7f316167e\n0x1c0c62a48ef5d551\n0xa0d1aca5ecc18769ced60cbf\n0xea549c80f0e07d47f54fb4e0\n0x1e501a2dd31d9444\n0x91b4c6c859fd94d2e077cf93\n0x41199218d8f749007871412\n0x19cfa3917d5e0359\n0xcd3f86e757d4aa535f959fdb\n0x161bc39ffbf028b906bf5f61\n0x1375195249b7f051\n0xc4f623f948e0aa5dd5d6929\n0x68bdff335b0cca459de37ac4\n0xb5a131868345af9\n0x4bb0b947dee1825c0bb108fb\n0x8cf9a47ea942fcc600bfaca8\n0x2c026828ade7dfa8\n0x15d6b482c1023197253e7e1a\n0xb2537c5396aceec626b63f02\n0x2f18df721137c9bf\n0x640214f7013afb31e0bdab63\n0xc643538f55b38f3cbff0354\n0x2b391aed098e6ce0\n0x993fd6a74059cd2cc9d2e06b\n0x18e00062ef908b856b8a9bca\n0x431a5b174dc0326\n0xd94a5c873c7aad7596aa65eb\n0xdff93e1d4497383737f6df4e\n0x24d8dbb2b146e438\n0x696d2a2a17cb460915be7cba\n0xbaccf943804e927ad666cceb\n0x163ba394cc43cf91\n0xb74f2e6f3f6f018cfd7d5bca\n0xe5427aca317baff75d2f9f7e\n0x225efe1e7d1c833\n0x8de98cb20848d7f66b9eed77\n0x50bd297812bee675b6c1819\n0x2656c1096f6b9ab9\n0xae77b1e75b5a0f7a7642b32\n0xb3c24d54f4edb5710d719f0a\n0x1b4b45963c363e4\n0xe0ba1bf61dce8dd5d329dc01\n0x957fc3e7c35c766e8361673b\n0x8a56d77f79ee088\n0x7fd5d24cbc990b8a9bcfbb13\n0x4867dc9789f0c46d6e7d884\n0x1129ad24b450cb41\n0x678484ffde0521034191f186\n0xd62fbe112a529424ab45f93c\n0x2966825289f74409\n0x73c35cc9f59af6de638c5bc\n0xd1a2ae7bd5c68c073eb6475c\n0x2678734594e23df8\n0x609d037843c4542ef411f05b\n0xb62e6b352be8ef6f59608396\n0x7bbc722e2c0057e\n0x718e2c6dcc1a131dcb7ff8a9\n0x343d635e263f5533943e038b\n0x2e15cc7c276791e1\n0xaf70094d05924eb44ccc972a\n0xe2305b6b40e39c5ac32e2418\n0xea868b3fa750b92\n0xc27db91f7f14ba30a04772f4\n0xcef52cdfc9fa9f4cb688fc78\n0x2453a69d3d875fbe\n0xed9834e28c1e5e6600fd9d45\n0x62ebdfb861269c4ed8344896\n0x16bc13ba7b402ca7\n0xc6f0a10c9c7ab7d73b336e1\n0x3733fc46abd68ceab848079a\n0x198fbfb653d4f214\n0x265b172d4cb50f6ce5e43271\n0xdf9c550d1c7df6a7efa184d8\n0xced263da575209a\n0x686a5cd5edf3dbee8ba290a\n0xbafee505d302ca0b9736bcbc\n0x2faf4e066b0f299d\n0xbea264e301b0d73c4f14a880\n0x8b14cfdaf988859edfbc0845\n0x2b877e3930d66443\n0xc65cf2020dd51d1acd35dc56\n0x712bbf43c098d915acc9adcd\n0x228b3c57c78fe6c8\n0x3a9f27c3f8ea3671676faea6\n0x2f35074ff6f6c30a8e0bd4a9\n0x2c4e0ee110697f25\n0x17c9c8e6a743ba87226e6b0a\n0x55d2967e82a536795c57cd47\n0x1d88d669fdf058f5\n0x903d34aaca87a3a5856282aa\n0x84375e9139ba261a44d853b\n0x19898994470db313\n0xe97c9a7356212c024fa245da\n0x379e8c74b26e040d9d39edbe\n0x2c91a6a570bc0b4b\n0x8a73b6c68c1d9ae58acb21b5\n0x611b70c069c563e67ff41373\n0x2edfcc446cafac1c\n0xe145cad2675d653ff4228db7\n0x1e1596ec3208aa709731ebdf\n0xcff4fc63cba1162\n0x31655928805b085a5c349a68\n0x71dbbbc7caff1d373d145041\n0x290ca8cadadfa760\n0x367128a4d2c59c333393d53a\n0x9d3428463cc8773b39d36fe\n0x1cf4bd0b1f0873ce\n0xe14a381ffda69240bb20f4d7\n0xcc3ae4d6eab12c4ac47258b0\n0x2e028e13a3c776fe\n0x16b9d220bda66d7f39a53bd9\n0xae704908bfe5dde1379a30eb\n0xe8bfc3d658559f7\n0xf5525a9d15717b048416f77a\n0x177c1d6ceac11ddd763cd999\n0x2d026a2be17e15a2\n0xfe41ab70c728df169f53b4aa\n0x44b62b4a000774d319165bbd\n0x17e21b07c2c93d3d\n0x990b7aaca84eb5b53a578cbf\n0xb15394cde47df013bbe7aa44\n0x192d1f968026cb7d\n0x22adcc1c517f64262c7c4f24\n0xc3eb90a368efffa8afe65969\n0x24ab842108d98c44\n0xb050aa0e75fce4c0d4c4cb51\n0x163f5720a8e720053fbff6d7\n0x251b9a13eb6410ea\n0xef10402a6fa8df96dff5e4b5\n0x37103aa8251e6298f38e5672\n0x2fba38a05a666245\n0x49d8f5909e924b20c2ff45c0\n0xfde01f585366083dfeef111d\n0x7965352b7384e79\n0x60195359a2cd5d4649468db0\n0x6c60e667e0fa405ad3a9f82a\n0xd0a242ac096b5fe\n0x81fc1570c5b9454eee71e297\n0x4cd01dace91180a6753eb951\n0xe4f6816980e76f4\n0x43a2b93b448a3c6c0a0c125d\n0xf8dcc724da05d1c6387c8be8\n0xcf05f6b0dda23f9\n0xc72ec170a7b958cdfb44ad6d\n0x89fe02bf6d3fb3d3a0ecde60\n0x39daa9c34386935\n0x579077636d557340cb5e382d\n0xbb7d5ab032a1c23d990168be\n0x1598b0bba0073ba1\n0xf1ea522ca4f4eaecdaae14d9\n0x573d20d09124cb5ed418fdb1\n0x10ae5cb62763d1a\n0xcbffb5d2bd865703108c1c07\n0xa6d75cf8045f2f3dbfc4fc9a\n0x1c3f437caefbaa55\n0x7cc163cabebe795d001836a\n0xf1e26d6e828923d6198e06a2\n0x1d6eeefdfe21276f\n0x8c9e835a5724dae55017b7a8\n0xfe5a5456d10395f482f29015\n0x3855cdde54606b9\n0xf62fbf77b268e83c2b3a031c\n0x8f80e99ef13a631a67b917e9\n0x616b3b10a32d31b\n0x2f97d43837cc24ebfad0f37b\n0x82149dad8bcd5bf8a6c80bd\n0xed804eb36802ba2\n0x807315006f4d57ae0bc1e23d\n0xbe47112e5d2343610117935a\n0x1647184f2954768c\n0x4e4edf65dd72abe6d3ce11c4\n0x1032a9352976a46d9d0926b9\n0x2c1828c81959f006\n0x4b894fbfb7a79662d25da13\n0xcd74233f3e68b96f1ee69a9c\n0x18b2d969379328df\n0x97aa6b296d138b59ea43e543\n0x4b54e388cb0f6f2c97c110cf\n0x4adc7ed0e6ccbe8\n0x7645fcf6f89a43bf706798f9\n0xdced018326dc665006813b52\n0x2c65dc9b3b3fecec\n0xb407a9b59f8520741d48a863\n0xd9d8ca2ec62047158a8f484c\n0x20fd292afd18238c\n0x3c5592f184a4d6c0dad8620a\n0x9d6bbb8823683fdbfd5b8268\n0x29d59da2627aacc4\n0x76b7409170f9ad694f997067\n0xbf2171a60d3e044b05f8925b\n0x5f26d82e0c97521\n0xa34b126c402dfc992551e029\n0x3939d7178989118b59c761a5\n0x1812f58277cdd348\n0x43bd3130e9e2692cfb839980\n0xd0bf613e380b4d0123268b00\n0xe5395aeb3b4580e\n0xe31c940941ad463c0488747e\n0x8de3002883f66792a235acb2\n0x12c1893d70aab237\n0xf96b11060bbe1b6330c866e1\n0x236dbc1b990d70f89801f2f1\n0xc800fd953cfd23d\n0x1a1e40df4ec2febe0d7aa08c\n0xae1ea99ece01cb0f03d10d52\n0x122cc804195df92\n0xfdd3fe027645ff4a266df359\n0xac78684e8a91bbdd4a13c19e\n0x22e918fcc1822531\n0x3fc1cf1ae95a7023041fbc98\n0xb810c8b8a4439d086c52c4c2\n0x1cce950f07cd49ca\n0x8208234f570da172edcba043\n0xc45c875972f7e2fb154cb1c\n0x1653b9cbe0a6b6ff\n0xe081ea0d72e8e68564485110\n0x6e201ce6e3d99d83686d1d0f\n0xe304a2188060bf0\n0xedf366ed6a90e7bdfc8275c\n0xe6e0b44480a0b5b88ed3d222\n0x20744034b46b848c\n0x512ea166de2a0d30491b3616\n0xf11f499b0ce1a73fa659f918\n0x25af2b04ad9852b6\n0xc73a891fb15e7e756c015c10\n0xc967309fbde7c7df49e2393f\n0x621fda63242329d\n0x9ffada851de4411116872085\n0x90058ddb651c3d96ff7b0e8c\n0x58a5ef17789b73a\n0xc165c96062a899f5d92859bf\n0xc08dcbbdbd79575ac1dbdc44\n0x1c4d509281e0102e\n0x89efdf3f9b0fc52a187b0147\n0x1f68bcb1f9210c3f95bf3125\n0xa4b0399fa5b5b61\n0xdca72dd925a41ed7198d1f38\n0xf8c2faf05ea0823dd3f1064b\n0x270733c9dad76420\n0x612b006fff2faeec0a2d7248\n0x8a5eb4349d1e4922896712fb\n0x273cec4e6308f5a5\n0x5d19c579e42748c160125218\n0x668e00641a2aa8edaf2de293\n0x2482335395750ece\n0x8c70cabfd031645fb3b6acf2\n0x43a9863a0e6c32b306b8ffa8\n0x2a06d620f1bbe8e1\n0xca6fa3e323826e3d7e9995a3\n0xfd3e01109a20c2f81f030588\n0x1b657605ea22d422\n0xb405e6392bcf4e5f8eef6689\n0xb0956028b6f44c32639e7ed4\n0x29c661490fe6e13f\n0x9b4e1418b86c6ac60b9a6e7e\n0xa91614e993ad36faf52efa36\n0x39cff397df3f9c7\n0x2ea0d1c6fce5417747201c46\n0xd071e99bff9d7b19aedb5dad\n0x27b592ecb0d3fa67\n0x989e62a700a17a499f9dc30f\n0xc46ec56c7e343568b1efc15a\n0x2f506fa533746c29\n0x104ed06b6cab1581945397a3\n0xd0c1e65c0c677eb9d430e4bb\n0xb3fddf55b72b817\n0xeeabbe91ab1ddb6e9b13a57d\n0x55ac257409d21598d4143464\n0x2002ba34651a82c4\n0xf688ac401fb5aa1270a2342b\n0x9557250595ea1d3de4d63931\n0x2a054a62077b16ef\n0x9946f8f5ea70b41d9a6ebcc5\n0x5e39fc62260d47ed671e3929\n0x131102025bf8dfa2\n0xdea36b81b9bbcc87169642a1\n0x3b6f8832b932d7064e2e379c\n0x100197149579f7b0\n0x44c2eed475abd3af1f8c787\n0x5dd37f8b5f1aed2edf5dbf0f\n0x6e368bc2faf8847\n0x6d0be0de8b690332a0a90b3a\n0x924f6e2c99e15f9d474b311d\n0x2bf0bdfd4f4db9ff\n0xc35a3d261dab1e12d57045bf\n0xe4960927e056a8d9a261a040\n0xfa2222feaaae1c5\n0x7ba2978ea62f71b12291d0a5\n0x76d98b6ea773ef1849719d5e\n0x16f4de07484d8737\n0x9cfefc70c1b8f7b418c3d39c\n0x884d482af9c008f25f17583d\n0x1dddc0c35b1476f1\n0xe493836538c6bfd27b38910b\n0x57280417108953863c898753\n0x2edcfd52c9324e15\n0x74a86f278a1136542a0ff1ff\n0xce4c8bb59ce9d03aea7e645d\n0x112d75db5c4f29fd\n0xb8ffa255ccc2b61ebd7b6bc3\n0xc8efc77e902bc6a315667786\n0xcf4723cc3e7012b\n0xa22c2f05fdc5c4f3da7332dd\n0x7a817c8e967493806674a973\n0x118a5ce561aa21af\n0xa02c862db92a7038b0581975\n0x18fd1ab7c4e38c1eea7b1949\n0x1a2210e469ebcba6\n0x7e5408aeecdcead7b9b9d89d\n0xc5210931ec51a818dc7d4b79\n0x97c126391df727\n0xa92ae086447d0237e6b065b0\n0x9019f9a361162bf66ee5630a\n0xca6d960085e1031\n0xa5349f651d1635d4104c8717\n0xcdda4a07863829cf5f21d5b4\n0xa3a5c2ca87fcd65\n0xc137370e728fbf79edc5fb97\n0x87a2e081933e0ff3451e2230\n0x186d2ad5dd9a7a02\n0xe684f4dd204232e0b3db7243\n0x4dd9b992fd13b27c89f06c90\n0x11d9b9faf7e7fcca\n0x2953cd3526857c2ec60b406\n0xafb4f73ec710aca029f476d7\n0xd61f6a1aed4bb79\n0x72325823bf7a466f2fab2f4f\n0xbcba2142f345dff3530245ff\n0x19ed75c425caa3ae\n0xd333ee25a3049a73239fdaa2\n0xa65360fec31886da5edd6c98\n0x1ab54213832c02b\n0x757a779503f52ce05040eb20\n0x6d78a51f36be4581ad7a589d\n0x273677d970845959\n0x196de6c5621eb15721d45038\n0x811b8cc0c0981be925e4ab0\n0x111281cb83813039\n0xca21bde88b9e1f9045fea2f8\n0xfaa1c535b61903cb77c59815\n0x130b61c8bff9124a\n0xc1b6d4048fe956b84b50daf2\n0xc8e6fa2184e4f32fa573cbd4\n0x28d693c7c1c21116\n0xfd60ed2372e2084a4d4af9c6\n0xd8f3363039a7cdbcc5869598\n0x5bd9e106aae104c\n0xde0233c7afed414d0be0f658\n0x2c4f578b11fd9ce3b2df914b\n0x85f148cad3e119\n0x848d7282bb37a09d0dc6d6f1\n0x5cfb52d8ba06e1449f15f956\n0x247cadb8a17b182e\n0xc131bcdde35f0e048fa6b050\n0x84f22229e00682e8f9959bc6\n0x243c2123487b8109\n0x887947cf0d2c74c79662e6f0\n0xd09fd14ab371badd309d987e\n0xd64e162ca979f6b\n0x6def6a7d6a1f97a6eac17898\n0x3fcee63459462ab71fbd50a7\n0x77ced2302cea795\n0x3ce80865574a0ac894fe67f0\n0xc147a8869bb9993037a3175e\n0x25a384e430d8d66\n0xef10dbf874449062778a2a67\n0x56c850bbecc848ca096d4f0\n0xa2b6baa0f5c0067\n0xd08c7fff71e191b5bf4c5618\n0xa86a508100d0e11217200db3\n0x1d15d7e3098242cc\n0xf3897745221b33a6975aa18c\n0xeb419c2bd629c305aafc0da9\n0x28481b994e774e99\n0x55b30ae9545a26d41a60941\n0x5bfb93342169bd939f538e69\n0x1cbc7a6778b5168b\n0xedfbc1c8b33430c90444b894\n0x92b034ae625357ecd2acea0\n0x2ed0e273469fdb70\n0x4714af33077172eb839a1ba7\n0x8f3d52c634fba83070c5d07\n0x9ddb2c219a4978e\n0xb9680f1799b45e150afecd93\n0x6089e118a2cf7f2028d4cce8\n0x8caecb0e4513e6f\n0xc0130cdccb9b36bb3bd7f39c\n0x533cf7ecaef4da99c5c78f1\n0x217edc48ed8be519\n0xe8a35534af48ae63208d4b7f\n0xcef6bf025c532b2256706697\n0x126a9ec58c625061\n0xb7de0a7ba3ee337a76adb78b\n0x2bfd43b48a3c3543f4f6a2bc\n0x1a32096355c7e1d3\n0xc31a614fd9a48fc474d63753\n0x868c276abc6e4a027a8b8009\n0x192361c679be3429\n0xfbcfcbbc85d6259f284bb529\n0xc83d14faaf080e66dcb7c147\n0x29c1fa8fdbc0e8de\n0x5889afbc6690df78ad0e10c8\n0xd5e1cf6c4d6b6a5d922a0cc9\n0x2ee9628dda46db5d\n0x6768a79f3ecb36a7f51c16e2\n0x28011fd46670778b45019867\n0xa26c6be06a77a99\n0x1aa8180e672d30fcbd791a01\n0x321dc60a6b314f15424acf09\n0x52098e7616279bc\n0x7d07183d759a4bf20e7dfb69\n0x2f348c12af7899cbeb2aef53\n0x724a487c702fc67\n0xde35accf42d29f796b7fbe6e\n0xce54e4dec438e9e390abbc45\n0x2a131a2d991d9218\n0xbbbd5aef61b25f7a2916dd11\n0xa2f6d3270daf3b452c077639\n0x2d8b2bb64de3513f\n0x67e967a991e04f1830ffc518\n0x8027af404094c1220c50ab8c\n0xcccba1e004153fb\n0x27a28d5bc4f0444586079c72\n0xa2c9dbe4a2ebe45322e762a9\n0x2341181eb21fa521\n0x84c8378248825ed26da3d385\n0x344cc6971136e567995aed7e\n0x2b91ed7ec7342d55\n0x5e57def4e27f10d04b050129\n0x7ba6446829ce29864342aefc\n0x10037325ed9a36d2\n0xc78b901bc423ab046d77b209\n0xfb6a80ca7440fb59b9248e24\n0xa97edb9c6c05b1e\n0x5ca43f21eb994c062587605d\n0x1cb0b82801609fc50985666\n0xdcebc89c0ed6cd7\n0xd30c5f266d4c31e82b5188c9\n0xee74a67ed51970b8288b17c4\n0xc4a667ceebea976\n0xfbc6a91a3b3792e0ae615988\n0x31b0a52429b550d3f2796a2a\n0x25e2fc9d0bda2f12\n0x6fae3acc78f7beb46f8ff26\n0xdb2149e7e413730bf4989c91\n0xbfe8345a1822ee\n0xb29973aafa428b7af5420743\n0x470b56f6d6f708b16462ee84\n0x22c8eeee81515ac\n0x2338cd552ef00a8c37238ecf\n0xb41bc418ca5d7b5af2bbf5f4\n0x1d088c091bb0785f\n0xadb84a430613666d323cedae\n0x671bf042a6262f93391b689c\n0x1389e46a0d08d6a7\n0xf4b5fc67ef4899edca0cb81c\n0x9539ee0a07570a47c21e014f\n0x19c89fe28f4f5992\n0x8ebb79cd4044d7f4f4e3083f\n0x470d31ba83170166a04527a2\n0x1371a783cac91ab2\n0xb2c4d70abe37744838467725\n0xe506a9656fd6a4b9eb3cae94\n0x2196a1ee1d26802a\n0x7d5c92cabaf1fe2086f93e6\n0xf0880388490a9d251d0da3d2\n0x268ea94b49f0acab\n0x183e7a5769e14afcd0828ae9\n0x642ed41000331c4a1f22015f\n0x105a635ef54687b2\n0xf5c106f27dc72d21ac4adcba\n0x9628560defaae8b312862b4c\n0x12def98b8967708f\n0xa7932947493ab0600d70e3d9\n0x74d94f5e29c708d430847132\n0x281c4a75c88fff7a\n0xf1e3d1da393a1222feaa59cf\n0x31e56034818fc6196aec575a\n0x99056270b7575e0\n0x24152a9b82318904fd6fc751\n0x695753cac34b3b3305656622\n0x17a56b921b40b334\n0x5189030aa6e499745f8318a3\n0x312c2d594c2ad4312e827563\n0xf4397377a9fea83\n0x2ccd5168473a73643cf3c781\n0xbf52dc07c3cac2192171ba68\n0x261bc025608bd4a3\n0x1679f8646851790a3f69aa19\n0x4e80550f555efa2191f792d8\n0x17433555e0985d13\n0x912414a09ee06a153822d38e\n0xf5f6b3fbcf0ff3c53b7acf17\n0x7c5d58f8511e650\n0x69f88a30f8e7d99b5ec815c0\n0xe5235407cf1faff1db2b8b30\n0x6db6485eb892335\n0x2da464efef2c1fc9a35bceb6\n0x68055a937b607a665830b148\n0x144c334a9643585a\n0x1be7261a3fca6648bb819b74\n0x5bf3881892b9e70660472534\n0x949bf01b05b54c0\n0x5375ca73fb2432dc642ff267\n0x46035ad5dffc3c279e618494\n0x17957e8aecd4b872\n0x6704db1b062889383b273356\n0x6004db19f5d997dea7ee9655\n0x65c9e90ee078172\n0x7e806e5d549b8309709acc00\n0xb6919212213c939e4a5f2dbe\n0x2940c7fc992a1929\n0x5b22a68aa123a504def7876c\n0xd9e2d34b769b942ef6eebd6c\n0x23bcd34e0b372330\n0xd5ccd186bfcbf63b4d51e741\n0x79ae5611bc1a7e7507cb8078\n0x51b989a016fe267\n0xc4454c62ffb407b1740e73a1\n0xf51be8124d8587de942e1d4\n0x19002ee92e783a6d\n0xa1eb00f79986de1c14674d27\n0x86215fd4433817724e8987e\n0x1f3d64de237593d\n0x283ae7d7bdb2751213873a76\n0xede9af6f345769d843b3d3a5\n0x221b62dbc4779393\n0xae455db401f4de2f990f2225\n0x43c171f6fdd109342c354605\n0x162c996715afb38f\n0xcf537c11f4b0716789d43f10\n0x6ff540f2e4ac08f04c4353f7\n0x27ff4a20cac58f18\n0xa49c8e1a2d4fa32384de3a36\n0x2eb2bd5dbc7065314bb68189\n0x1b969a0633423e6\n0x2dbd2169007fdacbc2384c2c\n0x2bc72b8e9c7adf3f21f41ed0\n0xfbead7960c857d9\n0xb3e05191ae500caa04f1033f\n0x717984e06e5b10555b4a8cdc\n0x1547e3fa47dee36d\n0x6a81da4ffc7d398413f19ded\n0x401a256e0854c04050152073\n0x2267f1c12ad8cf3c\n0xc7bff013fdee93752cc2ca9f\n0x400d59d1113e3c06220eee5a\n0x1609a0ddb68761d\n0x3a8f88cc8750b5cbed8a7fca\n0x5b7efcd3764341c61959f764\n0x13a4e013af8e3885\n0x1704c8053c3ec164154f3442\n0xa0928f712cb9af363f14665d\n0x2c30b42e76ebaa32\n0xbe3677221041f957c027a327\n0xbf1e1f05be077695c723fdb4\n0xe260e5bfc4fdde9\n0x7b1f81983bb326a72722d926\n0x9779cc0c0c388fb633855040\n0x1c0a6002422d51e8\n0xb7f722a61b64593289f231a3\n0x89c1e26ccae5d33f4ef6cda1\n0x20984f632348231e\n0x9ab69b21d54f7116a6c92ef2\n0x8dcd788a37c32585a6a89695\n0x2b83e25d2944c223\n0x7a26dba3db81220259b6e766\n0x8b0181ce01411894b5c6c041\n0x2034301a3c912af5\n0x24dc7a2865665209f4bd74c0\n0x21ae016438a2cb65e77707e2\n0x1d3be23470fafad4\n0x6ef57b548e848493fc24f0af\n0xad5f50801058656bd0db4a66\n0x1ef86ec97ff23215\n0x2a9a21c8d59afcf1e02b6cec\n0x240cc89f76ada418e87f1ca7\n0x6c0418eea2786c7\n0x288bbca31d5b6d14a95b067d\n0x86bd5e20565a28b11b1d836e\n0x11d668866fec65f0\n0x5b8f3eae665ae81878f22b8\n0x7811b33a4d64ffcf1bf96d25\n0x2542d88c9c5608f4\n0x9e01917430efbfc17fe90c7e\n0x637f569a49dc573939722bf5\n0x1d4761a0ca0eaf8a\n0x3bd04c09f1dbcaabf00479bf\n0x308abbfde0fda94c811d160\n0x1a14923c9c1fe249\n0xbf1622313debedfaa72f6b85\n0xb72ffbc2c3f4a0bf6452393c\n0x2317d7ea98b006e2\n0x8f064709acb61eeae10cc45d\n0x8d091f21145a6c47231fe0f6\n0x1d17a1053fa6554c\n0x6183336f72fd9c58436a9932\n0x73f0aaaca97575bd48b69773\n0x2ba812d0a34b84f3\n0x8f3a9c7bc9e27c1476c2c852\n0x7f7960fc437785039e7554a9\n0x29142258ddf5c09f\n0xf06844acd69ba713a6982bbd\n0xf04f28bb9eb42ab47f9bf628\n0x2864a1cbbffcfa31\n0xfef4b46a1e34929bec8f0a3b\n0x38205fa508f4f577b8ed1cb9\n0x2e846ddccb4605ae\n0x7e11c2a573979331e6070e2c\n0x567e039a0a2784fc989bddb1\n0x13cdd838fb3858b5\n0xb42ae7da57191801a0debe3f\n0x1e1564ef05bcbc41caf9f0ea\n0x1ded154d16804cb1\n0x1ddf1a9e8fe3cd4a9b5605b9\n0x16718979dbdb88e349681aec\n0x14ef6160079c68d4\n0xb6ec468611f383558c1f7909\n0x336950d272f6c63bc26e4279\n0x1b3f7b8d803a53f5\n0x2fdc81b4dc65ba42c43dadc\n0x3e59d5ae9c22e958ba00831\n0x1b7408466df74781\n0x488c417f89bee60fd58198de\n0x5ae8aae42c54c8062e0cf537\n0x25a85b6fd0dfbde0\n0xbce10ac393f56398e447f1d\n0x90943f6af4d7e45fcfc67d50\n0x1899b9ac2f78817d\n0xc24e0e268981b78942e84ec6\n0xa3e003154c3e7d96be5df7fb\n0x1aa4b7d55ee56ab\n0x65172348b4c24c53d2fd4da4\n0x82ad7b612fa165a4b80830d\n0x1e3929646dd4dbcc\n0x6e941bc3335d9c0d91b72c\n0x3262ef3b429cccdbb3697f8a\n0x1d4396ba7cf59137\n0x3bad2642b6b18b66a69d2d42\n0xc3e43c8d079c0e401c02dd18\n0x28b37445a14f5790\n0xc259b53b28eb11dfe8d0ec6f\n0xf709c3ca09de11d0166a9784\n0x1d2a2fa81699be1b\n0xcc5a6d6d9f807af2fbc048d3\n0xe97ef4f3fc6b85af3b84c42b\n0x1af954cf211c7cb\n0x97ecce00da988041769fd8e8\n0x78165f49a657855397920aa4\n0x530a7b08d8157d0\n0xa5017f7d923b376355ab52f8\n0x4e61da80790c217c382a70b9\n0xea63416221fa7d2\n0x4a587bc08aa15377afd06467\n0xe88d572857738fdc07604a3c\n0x2bbfdf03cda5ff9b\n0xaca4a8b7012f473564a24cb6\n0x15da6ea54c89a717e9831620\n0x185b3b746bedab7e\n0x2c5ab4a8da80685b0d49ad30\n0x3ac8ac13cebaefb57ccd74b3\n0x279f44f570d29e6d\n0x801b0f03f2160d86b5063e2a\n0x4df5e6cbc3e7eadbdf255318\n0xc234ffc20382722\n0x4ae8014ec6b10f7e1e53716a\n0x813276b8e614ad9ed24bee44\n0x2801c04903bfd5f1\n0xb11132fdb6970def145af512\n0xb5c34bb9956e15ee3f782e0c\n0x1f3c382f6f535fa2\n0x5e1da39d8fe2a2bffc1f1b56\n0xf7de7072e5487eee300d7f0f\n0x2c538b427a36287e\n0x1cebb5bfe6b3d75547092810\n0x8750c27f9a48c32b2fa096d6\n0x129702ff58cccd64\n0x783ed1ba8636522e6c4d7eba\n0x3f6dc8f246dae0f83aeced17\n0x8217b5743e92cfb\n0x8df55a5bbab8863989556ab8\n0xd5debed19451b25e31695365\n0x17ac76c824b1d6ac\n0x4a14f367cf1e041bf486e412\n0xb3766cc489e7e0d88689af\n0xac9b6abe7d58653\n0x23f203c844d8e112794dcf0e\n0x5392969676a28db4d1c55198\n0x7fa4d2ed16a4471\n0x315cfb24de5a8449b4bc2eed\n0x131f9b76bc663dd8b1c0e443\n0x1552acd863cd7d5c\n0x8dc6082e16bd97600b81f248\n0x91c05deb215d5af4e250b572\n0x24f74b92e0284861\n0x9c5584452a429436ff1068ba\n0xd0411e5f9655ede680d2ebb\n0x84d4c13c6bf6b31\n0x5caa82d907a23dbe8e3b743c\n0x7ee6e722664098690011e681\n0x2e114d5aacd431c6\n0x8beb8286185b24dafc9eb019\n0x5cb03a79bf1394c93c6e3539\n0x2aa2dd9b0229859\n0xf02cc88ec1bd9dd7a7e72594\n0x7c9915828bdb184d57d2cf2b\n0x15c680c55ab2aac6\n0x93fe87bdb385f9ab0482d6ee\n0x9edd130d1d34b7ae1f01f613\n0x1eff76f8e78973f7\n0xdab7b4a10cb750257277648\n0xcaf6d957a30cbbbe532a8c12\n0x312630bfb2c6c28\n0xb414a644ab865a4424602e9\n0x4e43c89e87d83d4834d6424b\n0xde5875e886d945\n0x607fb784b0f65bfb723be3d3\n0xc0a54b2414a264cf91a848f4\n0x2818746ff3058edd\n0x9d74ac5e24757b5791234d18\n0x2fc9be67eec1012d92dc12c5\n0x189c1bde64fae37a\n0x740f42486fb6f770abfd1e2\n0x22e84dcb2e96aea7d84533ad\n0x247da657d6bb9d21\n0xd724d0ada9aeeb98cc575db4\n0x393ea029a46e01be02936d41\n0x267ffa4b3db51695\n0x8f1d5152ac05f71ecb65768e\n0x31ab915cb54078f10cf72421\n0x13128ccc8969675b\n0xad2da25e0a748725b5e9828e\n0xd8c268b6f799d6eb4f939753\n0x31f64168fb6221c\n0x3849c7b67c25210b3d47e181\n0xa45bbcbca4a9b2fd199c55b\n0x3b149a318d0e31b\n0xc5fcdf2c91c2cc29cbead35e\n0xe7bb966938e5c0495befd8da\n0x2ba912ffd280de44\n0xe0e7d84fc171425e523a2d3\n0x9e0b0644774b98a085d80ebd\n0xdbeee035875fb89\n0x9555a3d8987157b6871ecafe\n0x97cf53c6ff274a5a8d9ef931\n0x24f04e899895bb87\n0xaacc52aa3213484c145381c9\n0x4db74b2c41335f35c4598556\n0x2b1c332747b7f2ec\n0x2e22af926b2e056d070e1f0c\n0x69e5c4ec6559c8690997ba52\n0x20e462cd4ab31249\n0x94b4f169560e8ff91f6e85ed\n0xf80fe6f2ea96ace8925fe10b\n0xfcfffc4d9d32ded\n0x3b5827d20dbd464c64728b33\n0x178c90cf3a5e75e3cbc72a93\n0x2d8ce391f092fe2b\n0xed2eda335d938146e6ce4f29\n0x459f4323c1ca6d043a2c1971\n0x27743ff7caea6101\n0xf0322141de03fe236a25bb03\n0x8c3a62f9a1ff90db90fe06ab\n0x228d3bae3c2c1630\n0x7cfe5085bb7d3b65aec99fc3\n0x32522c5a20211ab4c4cadd0b\n0x14fddf1df5704350\n0x89a9e45783e29f8e9371f17f\n0x582ec1311b37deac6ae82842\n0x2f9a591f329684ed\n0x3bb94877c61dffa1bf778cc5\n0xb5146ff42c9c7307846d1e5f\n0x85597b478313589\n0xb7b954ada5ae823395131f3d\n0x943a042957d8f0cf0d7e7d74\n0x1ab94002b4272940\n0x5e2ec92d5557a8a497466fed\n0x8955323d70cad9abd6a8d6b3\n0x26d6c63d7bd39531\n0x4841cb047fc9b1dbfd1d85c4\n0xd72496add337e78973db46fb\n0xedbacae16247e9d\n0xd7e6c5572d02a96938438f84\n0x42cc2050148d481e7587878a\n0x209048e571ea55ea\n0xa5e0345c4300eb3e632720de\n0x46d4e1678adfd0b1c52b3f8\n0x11bd0523263dc8be\n0xe878f1242eb9c9331bff664c\n0x1c09a240da01a443e60a9b85\n0xf9a759cfe3b71cf\n0x55f57708115a1ea4d27ef44e\n0xeeda9c1a044f4b864fef072e\n0x1c05a44abaa91dc6\n0x6e42a673bf10a09d17179819\n0xf68337f5157221bf30d92874\n0x813b2b831a7dc2c\n0xfa46032b3829b6c53bfca212\n0xa49904296095be35cfe72f67\n0x2639f45cc6577e86\n0xbea4597d8b05074ce2425818\n0xcaba97e086a1f0267355ef90\n0x2e2b19d78c7294d6\n0xdc10af95812eb400d76bbaed\n0xf966b5b1861fb3824dc9a739\n0x2b182d0a55c0eb4a\n0x9d57d6211ccf51e3a4a841cc\n0xb9a04e1e316c990e4e5874bc\n0x2621c7463b2e5dc4\n0x57b9f879ed8903f8799ddff1\n0xb8671a65c6d38cedec4ea1d2\n0x199efe09ba018c2d\n0xc3187c4591d98a971c0c059d\n0xa3ae351051466d76033d7210\n0x32e02bb63abe0db\n0x9126af1857fe5ca8c664d684\n0x2fcda9e260bece5becb61438\n0x2f0b3a05592c3ff6\n0x10850b0149e031cdcafb1a8b\n0xba9c6cf959d3451e4e10c397\n0xa6953fe001c512\n0x79332fbfb16397af2b5440d6\n0xaa3913817479db7e180b036f\n0xbde229d827dae78\n0x1c3c8076ad0a700f19f36a08\n0x147bbd40344a904884bdc822\n0xc3a374c5f86bc4a\n0x5cf63c2bb60644ad5615a821\n0xdc9e07ee1fde97376e9690eb\n0xcfef261178358b4\n0x3bd13ac6a9a555b679682ab5\n0x338187fcfc3a56f6a08ad949\n0x1c224f124d6cd6fa\n0x72695ddd8d05d28af117c8e0\n0x784a66b23b7fadbc14d524f7\n0x1d2348e7a9d64418\n0x85cc8cffa5504bbe4415a076\n0x57927b36cd32935eb3a2d688\n0x2bedd8289c48f616\n0xafcd7ad59fe90c6c2a581bec\n0xf589c73393d771874cc62dbd\n0xd81036daa0bd7b3\n0x734e674c490678e48c2590ef\n0xd4b962dae92b0883059b0136\n0x215dae8917ca2cf9\n0x950476cc7c54d9c80c11c753\n0xc6807bdff946e86408549518\n0x25242d06d2b50c91\n0x358e4a5513223683b09fa55\n0x65925c7f4f57eae4d8d86c1e\n0xedcaa900b79fe4f\n0x665ed16fdfacd61e588e9850\n0xbaa114a46f354c0e338f0f4a\n0x1ef99bc6a5d6bc58\n0xe36840d69b21202d191528dd\n0x16dffe4fc610ae03ab7cb5e\n0xc101b76b698836\n0x26c2a06b7e86c1eccc4cce0b\n0x5aeab217427adfff179dd966\n0x17ae4d419cdfc968\n0x761b6576ef526213d6f4f8df\n0x371edd0e1f1e49b5758c8e4c\n0x203845e57573ba21\n0x8c7df991457e06b12b6aa814\n0xc696b893f1ac91c1321ee60e\n0x1fece27b81f7ae5f\n0xded0914fe7db94eb9588f8a6\n0xe369074b93bcd2d71f72ee62\n0x1e03877f03d90413\n0x8fb01b06fa1c2655ae57d185\n0x4091630061c56250367ed10\n0x25bbcc77100ffb77\n0x11c9647760fc6144fdfe9112\n0x9c47303a455232c14618fc1f\n0xe00ac5871a29e27\n0x1f97525859af535f915259da\n0x9d1ac403c41514282f162979\n0x280ff4108194889d\n0x3c3a850755e1b57bb620c9e7\n0x320c90661e186770ab810b46\n0x1f27a585641a6fa\n0x3c9b727b050c515a4716c1fd\n0x8445f3449a8e2246f0156f45\n0x7a6d8a7c20b2504\n0x40983304063d49ea6aff0cd9\n0x9a9b237d18104faa4320c3ef\n0x1c9649abb745878d\n0x623b2f2c1d20024ebe205240\n0xaaccd602a40f769b7731280d\n0x29c4407d098125ed\n0x9bba89b933217f950a4da736\n0xcc9c61a00e91168e545f0df8\n0x125a34f9ff08c637\n0x36bd45a2bf84aea1d8a9795e\n0x3b1d3d0b449614a122769f4e\n0x232ac6080a75f09d\n0x81a015e6c0b1b0ca9895c8da\n0x55ee3b739b61f2d9ab51dec9\n0x2b7e549999ad844a\n0xa0ff12f798bcc48218d3138b\n0x63334053a94db9a94b4163fb\n0x2c5c1df3ef8cac3f\n0x7738a1472561d6573d1fc4da\n0x10f00f9c240982772730fefd\n0x1d71cd17987c7d60\n0x44cb61785b134fd33802a26d\n0xe7d350e990859bdf7977032a\n0x14329903439280fa\n0x49eec0d4bfaf77580b5924d7\n0xff7123a5a8974320928a792f\n0x2aa793accd2f8882\n0x893d4e71b776435fe3b3c5d4\n0xe55ec6aaad9cbc7660241ef6\n0x26870e3428da1554\n0xefaac0b02c700f362e2227ff\n0xc338f0040dc47aaf465981ab\n0x132115432cb86f40\n0x68cdebce41d60087fa5fd98c\n0x44b38a56e685ddb44b598584\n0x2b80f095f3ad33d2\n0xb6a669ba36387bc94f5c4586\n0xa7f733dc381f34f63f1aef74\n0x304781252960882a\n0xe2bcbc20ef0d2698590edafa\n0x59df5b21ceb704ff1f81ab08\n0x691df3ef70e4c68\n0x6859787674d56fa1f279683a\n0xa6dde101487c8d3d4ef27aff\n0x2d37984c87cf2993\n0xd01bf7832a5fa8e39da576b8\n0x7152ca583c2b0c6331a67ee4\n0x25996b84e8b8164d\n0x69fbc1b478cf571076963dfe\n0x82ebf6cd223ef57d10db8404\n0x1f0e24d3a0e03fed\n0x3639e8cedcbe61638cbd2eae\n0x89581f998205186f5e120242\n0x4014ba767175617\n0x6ce16184f687054c016e9798\n0x3a9dddad43ae8521ee90f063\n0x1e4cce27b86e8a8a\n0xecb53f23d247a8673c85ce67\n0x39f224726d34d6a5d8be92bd\n0x23dec6a0bf17079b\n0x67829d5c95509bc701ed8e31\n0xa5ce64b51f0b3f957b599a91\n0x1055e299ca971f0b\n0xf87944623325a5fcf0c0750a\n0x8fc3642971a490c061bcab3b\n0x19cd3d838710bd3\n0xe8dd30e98c2f99a2e7310a36\n0x9c1d96ef0a1322964798a8e5\n0xf085168e8f773eb\n0xfbe7d58789c96830e4ac640c\n0x7016112502832eed0ed0096c\n0x2d6d5007439f9d97\n0x134dbd278fa0a0d95bbf592b\n0x879e248f11f855957bb2b194\n0xcd66e35c09aea79\n0x99df7e97033200844c071ab1\n0x1d1ee8f7fb674ebe685bdb2d\n0x24f5c744aa0a131a\n0x85f8c1c0930be32f88117596\n0x7c95e8b1db3fb30abef6fb26\n0x96d8a5f03a54b09\n0x808e85ac20267965b75bcffa\n0x82cbd81df1399af668609688\n0x14224ae99184541c\n0xf7fe82f1432ba2575962935a\n0x6580ddbb6a2b6e2d5c8263e7\n0xe82df38a8bae887\n0x6992c6d0b53eb105bfdf5179\n0x9a24e1c948113ff672baa83f\n0x28bda09af7ad28d8\n0x3a16bbd39848da8396c116ec\n0x9687e58af9bc7aaf3eb185fb\n0x16bf096d88fa2c7\n0x2fe377c3070a70a6b8405f46\n0x4db52166ee3c9a86d8f5bb98\n0x1a9581dc1e7dc478\n0x962b9ae5414d0952107262c6\n0x92be066a538b616850bf0c8b\n0x1f268529727f9ced\n0x785de58d7d65850ab1a67f4f\n0x6f26a391259de6171b157f8f\n0x836fe6173cebce3\n0xf694d63000bc4774ae6a421b\n0x5be1747085a01b52844f539e\n0x1aa51ed5071168e0\n0xd260cbfa5d22806f37ce740a\n0x24c6b1057922340739abf774\n0x176232f9e5f013bb\n0xe9b7571e383ff47fb09add39\n0xaf4420a8d73dd5dbe0ecfdee\n0x3f49ea506d56749\n0xcd2167431f21a02e22e7ea6\n0x1d0457d350e8a33fb8e3322e\n0x2721b33bf2de3ec8\n0x8e618476a9602b8b724b1d0b\n0xdd23b0b566848b52587bb601\n0x1c28ccb53ba82319\n0x3a162e02bebd26eabdabbad0\n0x904e7b96f67faff25f8b8182\n0xe4ba702a3bd3518\n0xaf446eeb21cbd75867d8ab0b\n0xf857ed65a14893fe063622e4\n0x3ceec7fb4107619\n0x7a0b5002b69a9cff60db1bf1\n0xde1ca28733e763c0a2257c60\n0xcc26495aedda7e3\n0x7dc08152689d72bd29aa1bc3\n0x918dace64c1ac126bc4be2ac\n0x36ecbf90d70c8b3\n0x4a829f5dca00bf5b53ce32ea\n0x32285165f0770f1cb522f94b\n0x28d832cf7123c742\n0x4c4d4a223eeff05c647e9753\n0xfdc59aab9f9b22c3deabf819\n0x12b56baf284df18a\n0x82925cb29e7fd70da6666d12\n0xdef73a6032b5b962c7a475d9\n0x13ecd18e2d3dd4d1\n0x5c6b3b642f6984f7d8314eaa\n0xa374aca2cd9d868069e926ad\n0x407df336d23501b\n0x5a1773bf1f8aa7b497d00b4e\n0x4219d81ee475e43842fc5fe0\n0x1479bad1ba5c13d7\n0x3dba9cb83fa6d249e2b350f1\n0xd169df072d10dab404c1f9bb\n0x2345f61f97a2b2a6\n0x631f8592fad0ef5a56b5ad24\n0xe6481289b9585d6f16d3d9da\n0xe4edf1d289e2022\n0x464605440b200f65d95ed837\n0x46e65bf42304c063c8f15b94\n0x16a10296f33ef73e\n0xb042fdaee355a6b893f738da\n0x1fd39a155850789440e003a7\n0x2b3d4573f08f84ec\n0x3233a8a13de8825eac4a9ae2\n0x9fe57847387e651d4885374b\n0x2db5e13315c86603\n0x457f10a07cc4846a5753fe7d\n0x90ff323c9c98cdac6c2108a9\n0x27c3b81298af5557\n0x108f7010e5f2c71a6a65166b\n0xecac05acb9ec29235d367471\n0xdb3069a79dfb67e\n0x215dd9e074d4f42cd554f625\n0x22c0d60a9347784a79198be3\n0x245ceaa355b40370\n0x879dc30e3229c5ecb30c80a8\n0x441d4907e3afd914aa660b6d\n0x32869537e4ba43c\n0x84a64842d7592d98a90087fc\n0xe96d9754d6b9259412d9a8a4\n0x19c04a58bb729898\n0x1a99f5f667582a8cd1c8e622\n0xae3bc938dc68c438865282ac\n0x15b37df75cf88b3b\n0x9e682a2cdcd21d5b89d76ad3\n0x221b131e7dfe00e18ca94e8a\n0x75f107f7d34b703\n0xbf26c4cdb4009452df2660d7\n0xc07d30f48b619765d81eb2e4\n0x25ac8efa3d6226e2\n0xc9a4a6bb6c4b566a4f8c9a70\n0x7df5fd630d6b548cbcf73f4a\n0x6c6ada69107e50e\n0xde90504eed3ef46bbbf5285b\n0x75b4b1694e001edbd165a9e0\n0x20a3664e01ca877f\n0xc1bc16a7dd7df2195401f344\n0xc86897b3ded28770a8c26913\n0x26a99eb7d0dfea28\n0xb0ebb4304a0735b4a5b8432\n0x839a687b8ca279512edbaea8\n0x15ed2943bcb5a067\n0x1aaacb51418bdb0fdf7a2dbf\n0x4d26120382c6ae4e42f5d745\n0x286780475a68cba0\n0x61d0d9b8fe4578cd7b59ce48\n0x851b7352155e2723c7f4e979\n0xd6d4f74564c0b78\n0x90ae6e88c152f0cf9e6e9719\n0x4fa10e5cf7ceec3c01a7a983\n0x1af0d8e0d2fe7441\n0x40310bdf2e1c36843424c4d9\n0xd571481ae42176264fc0c4d\n0x949c7387b5a03ce\n0x889dc625aeb982be4e0905ab\n0x88e5ea7055abc4d11ef35df\n0x2d63f0dbaf73313\n0xd4f6b873eb3791972cf80e81\n0xfc8e09bafb3a24aa0ae2afb7\n0x6b2cb7776f95fc6\n0x73b66ba15956713210538ab1\n0xce98a490bd41331bd01767ff\n0x12bb56a5bd167902\n0xaab97d4ef2fe0e653cd4db4f\n0x7d58276b9a7931fa939eb2c\n0x8a4ab1543939f83\n0x15d46cd1982d465c94f3cace\n0xaf3364c56f88efd69fa68ef6\n0x1fc56209c60d69b9\n0x17bebcee6f60ea826280fe81\n0xd4c85995cf2c350c84168c53\n0x270f38fe74462990\n0x53b5f30eeff5f44a120a2e81\n0x85c53f285b5770bd950d195e\n0x2c03292c76a439cd\n0xa200272423cfb2890c16fef3\n0x17aafbbc105cb92da904fd56\n0x2ae3f14102d27c3\n0x9b5ef8fe7a12c7002f8cb0bc\n0xbdf2add7d81f44e714e4bdb0\n0x3014b6636c18185e\n0xbe\n0xf470b5a840e53edc7b7fe7bf\n0xd03fc86552fe5f6c7049e527\n0x1ffa3b3b7d027f27\n0x5d65e18cd1a19d22e037c1b9\n0xb2d2392531237936b1cf4a82\n0x1cdc43984dda8137\n0x407faf8f4e769815d734c48\n0x51c12e9f92b1a26dec2a386d\n0x2baa55e6f96e544c\n0x861937d3564b7b6855e00f27\n0xa33a3930c7ef9d1fa85688ff\n0x29370d3e73fd48f1\n0xb52c170fb2887cc3b858cb48\n0xe1b3f67b4287365a78cb0b3\n0x234766f2460abfc0\n0xc0618429dc34b1d9ab218736\n0x2044a50d5fc7f906d83936e2\n0x1e063226b8aed800\n0xac4bb04fb4c670e797dacd55\n0xb472d9b02e5dc9975b6edcc2\n0x29b19fab8807d8d0\n0x46b9e755767fd6c69bde1468\n0xd423bfb71daa47cc7afd2182\n0x1e5e5103e6971574\n0xd6058a0ceff2ba1192e8ed23\n0xffb36c7ccb391f4296c3ca3e\n0x23a958d148e68acb\n0x35e74e6fcd2809ce8b563090\n0x1969659221ff4fcaa7f521fb\n0x1f6ba8eb4a232f40\n0xf37b2228fc0ba7e9f1bfc611\n0x10c8955e052cb0e5c791ad72\n0x18e3c1b0db1d1ea2\n0x8be4634bdc8b1aaa60622393\n0xf60839d02b912390202e5a50\n0x2c8d205159dee1b\n0x697cb2ba1717027e9959223c\n0x86bd5a91e38a2f3c13593f19\n0x2c0cb959d187b996\n0xb22efe7699ccafda14124ae\n0xa17a008f2a565fae6b904854\n0x14009f26f8557e5\n0x2a31a28b1b718460e68894c\n0x72c03ef081e5754c9ebc8d7f\n0x2a47892f7ac0f6c0\n0x422013274584cb774ccef21e\n0xb46a2199295f1ac83e852f51\n0x1b1c2ea00512b225\n0x5f883c0d3737dc672e5b1200\n0xebce4d4d207090298eab8137\n0x67eb673edc70bd6\n0xbea765872117f3501ac0949f\n0x25cf00e246cbec82ff5b5f75\n0x9e2ba76487b9d1f\n0xfe8011d81334218f1abc304d\n0x50f6c9549bc7ddb61daa993a\n0x1b21997403112dc4\n0x9692ab9cd391f5ae03b17c2\n0x4be6a364e751d9973f2f42e4\n0xd8571172c1cc0e5\n0x58b31858f294ad4ef0a8261e\n0xd82a6dda36cbfba1ceee5df1\n0xcc8155be30b1d3b\n0x31009dfe4878216d5d9c62ea\n0x23d50f0e7e27dfe69a6f130c\n0x15e6ea6528811799\n0x3f8d606d63cfb9bc2b7e1b31\n0xe6df5f9893ee193cf1acc1cd\n0x15c9e05458716f1a\n0x796af64a9c13971a6845add3\n0xe8cfae955dd17bdb8583f0ae\n0x163e6f39093ef8a1\n0x4c360e0e96d7fe250eb35a8b\n0xff32fc8a83ecf3b211c51de\n0x28079af20595672e\n0x7db765b45a3202b8171b2c8c\n0x5bb3f16a9f62e657f56f9adf\n0x10e2a4acc97eb125\n0x97ff2eb45b2384c2fbcc7476\n0x111cca274772bcdae061ac7d\n0x19bd496c6eeaf10a\n0x5a6ae0d284e820a945c61760\n0xa357835a31baa944fd79b388\n0x2d0629966da3aeaa\n0xfb9b2c8df95a44faef22b228\n0xdd21a031e564cd29ccb092dd\n0x2bf4b110f5a16239\n0xe0d6d8b43552c9f4a674ddea\n0xe319bd156b7010ca77374e30\n0x12fbd6bca06e6455\n0x7bb5275a45047c2ed8bfb06e\n0x7e87bdada507bc4972b2eca7\n0x2c65e565a9c1190a\n0xc56b450f32a15b93ce874be3\n0xd4b2606427f4b51405ae0787\n0x11343b3173b0e724\n0xb5467e42aef4eff709decd1e\n0xa9d73ec61fc34b313a4cffc9\n0x285fa5070a8d516b\n0xac65359a0633f1fd7a41ea87\n0x6b6919c8f8d677cc53766c0b\n0x1abd8bea5f8c68ad\n0xb6435d41cac408ee2a8a9521\n0x86965ed350dd3ea91c56bb30\n0xceb0dd2b3d7b7b6\n0x4236412bce75f2042fe7f9b2\n0xdf192cba0c3aa1682aa1f79f\n0x6f6848c47029e62\n0x1dd1fc5416b0675a2a9b8309\n0x257fac8977dd826e10d9a690\n0x9aefeb6837c0e3a\n0x9a42eb8d9e13dc00d109d688\n0x2c8f7a2e8139f5dddbb05a5c\n0x3b45156b4bde0c0\n0x6589eaa166da56bf788c68e3\n0x133a767524b8a1eceb9cc96e\n0x7fa469e89867c46\n0x8bcce6c0b36bf4cd7ed6d22b\n0x1b367f9243cae1b0874ae26c\n0x2b920081cb333081\n0xe18f90596086bf9fd0de9544\n0xa97c40432125ddab558e370a\n0xae702b61ede4f83\n0x6297e7bf21daebbf3f2e4911\n0x37a4ccf8a80a56ceeac9d390\n0x1f90b2521a7bae49\n0xc6a746498655b71a6860996c\n0x313aa25afa40ecbbc0fde520\n0x14d043c9834e3885\n0xa437dc48ebaf674f4ef058b3\n0x94f7fac798127edaa6870608\n0x1345e0ab5d9c4b7a\n0x48adb73db63f2438d18079d9\n0x89ca8b521a2fabf1610a83a2\n0x16d2774a5acc5558\n0x8f3e6d9e6cbb50dd32518590\n0x415e5d5a31358cb7d0aff02b\n0x21b85d4eca7b34b9\n0x2fcdaf92e74a10b7b38d6008\n0xb018b3cfd5eebd707994002d\n0x210395ff3c92c2eb\n0xc713162a32e0ee938eb72f13\n0x790ed0aa7c1600ba4b84c625\n0x8c9a4a49462c7ca\n0x755d59c67ac5eb3c9ea1bd8d\n0xfea82335621244d346d9f8bf\n0x2a065d2aab28df13\n0x3d8178ec8320ba573a433e18\n0x1fb9e7dc8635b21435f9da9b\n0x2c28da8cc47fdca\n0xaa48d08260bdc4b6ab2eec15\n0x44060d93d8b6e2987b975393\n0x151566663eeff36f\n0x711fbcad6367050c55df9144\n0x970c2a4548b985bd0d517537\n0x2cbd8f5967ac91cf\n0x4dc1628424273b9441a0f559\n0x2f34c1dfe4984b2cb25c3097\n0x19efc9317e805e05\n0x7e53cc1ac917977b235f2914\n0x6a45c9440336bee473a130ca\n0x213771203aed2b15\n0xc4646c86117fb7860e9945f7\n0xf84372e2e922f7c042352eb1\n0x23d5e89244eb035e\n0x78a3ed4c0ede18f0f186ae13\n0x774a4cc9adfccbdfb8a843e3\n0x30312d2b5ca9186b\n0x5fbc954e96b526320a875010\n0xe53533acc8f9f807b5b84927\n0x2cb4ae99766ccb51\n0xdefe31b08ff6d18ea6df83f8\n0x34a3743cbe7e47c91186e757\n0x2c742915f70ad8b4\n0xbf792b6ddaf718aa3d445b0c\n0x297c820b52b3a8052f8660d2\n0x1a81e3eeacf3f1d9\n0x882206ca505a215590106d81\n0xedfd38b2e63038783a526c12\n0x26d5706e8f10e914\n0xb99d5177de8a116dfd1ebeae\n0x30fb7a4fac7704142929890f\n0x8557fb7e96c916e\n0x38baebf50050ad7e785da0a9\n0x251f03e026b72806a002a5e3\n0x11eff1b2f7ab72af\n0xf6e58b58d257b4dd34409df2\n0x7db07056f744040ea27d11fa\n0x14d8a19ee3ae90ac\n0xbbf70e34dd9cc6cb915394e\n0xeac3f337b01d1a9dec6b2ffb\n0x2fbc7c263356b017\n0xa2a3488ee53a49565db5154f\n0x94a744e7e4afde39562c4905\n0xc80f41a269bfe8a\n0xd19639cfe34292ef497191d4\n0x87e2ca0e07fad504e063814c\n0x303d0a4228f627e1\n0x7b7b4626f06a2b0c3f740483\n0x4544c2a1641b48c8df41dc9d\n0x54c4cb94fe71fb8\n0x1e682fa8a53949ade33f5885\n0x2c1f46f84fa329f810ec9659\n0x14a724ab1850f68a\n0x1662d1b16910280aee82412c\n0xbe4cb9dbc8220f2d6ae15c0\n0xa32ed9fa2b38a55\n0xc37b4073da276ef0808e336d\n0x7a6ff6026b128f3820ee3ac6\n0x20628628465b28e4\n0x781a62c95ad5916c4895fa0f\n0x1acfc8b9f93c3e36d8af2dd5\n0x13671a91e3338a39\n0xd5c874039402d5e95277c5af\n0x6dc909a7755e8e7d64ecb574\n0x2c28d760d412cd21\n0x6ec9f68223e26c3894b66131\n0x5db7cd8e925f27ba18ab0e12\n0x2efca34fe528442d\n0xc21e68d7555c840b43c76f11\n0xf094b109e9345cf60db2d395\n0xb5f25c313d7a1e2\n0x848f9079fdcf4742cc97081f\n0x247411f954779cef6474c370\n0x1da7b3db01436cf2\n0xd3deaff8a59b896349f9634\n0xac30f7c31e7eefbd7ab5d1e3\n0x167c9aca3dcfbf71\n0x1c13f78525bd5c5883492251\n0x3ff7cf50e203332a9a48edc\n0x1d14defe30453e33\n0xbd26776b2438522bc2fb7bc5\n0x16c38ddb25608a1646049a65\n0x248bb157197a2a18\n0x787ceb1b528e1521d944e6fc\n0x82a114d50b2a9702290f5f50\n0x255d4c367b902449\n0xcd905c26d107b415378c208\n0x9b76013379cbbef88920d0d9\n0x396c5b405bc4736\n0xfb43f9e5ef990e75a303b374\n0xf63b9b4b7977402fd0a23751\n0x1230224b725fd5ee\n0xfa7a5fcf11912db0be52cf1f\n0x7f02f266825bac8c3452fda6\n0x303260e4f06a89ac\n0x46c82b69353402cd1fd49329\n0xa49addbfc889c238948b9fbe\n0x1f411a8b9fb84b93\n0xf9069012654d17c7e0d5160a\n0xaebd2cf0260e5ee0b190d26c\n0x24b0c79ce5bf9e07\n0x595a902149fdaeea343e3502\n0xe8729dfff844ea89a783df06\n0x224ac3c19ee6df45\n0xa9ba6d412f5eb905bdd03b85\n0x7664025ef70118bf822fc2f\n0x1b0f633d74983dd6\n0x251e84992c4434e6dea326d6\n0xcdd859dcc9ffd480f1aa3927\n0x157a9aaaa67a88e0\n0x705e0ce60bd43b52857675f7\n0x5634b19e69e196061473baf2\n0x20edee5bc0d966cb\n0x7edde2f4b5dc15102295b041\n0x25479423df9cc1f4c4da2a6d\n0x1d536c0f2d592251\n0xe0e58e26102a1efd481fa427\n0x47c056fcfa8345ddb395b181\n0x41463579b410649\n0x8671c276c337f0d67fd4b767\n0xa390f4e34273481042abcfa9\n0x19082adb22a76785\n0x48f2f66d70c49948254fcada\n0x18a7b26cdb8cfcd29a5af574\n0xd385dfc1725db8a\n0x9731a3524738fb2a2ade94\n0xf18a0f2be181c0e2d5799772\n0xa9a508d149df77\n0x2cac25654f6f3520d41f51bc\n0xae1e97a02a8c207a2362d5ef\n0x2854822a831df60\n0xb3a273493fc56f969d02689d\n0xda944401898f74137792a47e\n0xbe5ecba66570e8a\n0x47ded35e5fd09eaaae983289\n0x3be3c65ad326be966f5b3bdf\n0x9b73fec43d95360\n0xa9c94e9eb1e01eab1738ec93\n0x1ac99cab2f7f8a7610f4c6bb\n0x78789fdabaafef1\n0x13810136a81289c29b48b095\n0xd0d069eb9e68c67777f7091a\n0x1fca0d795ecfa7e0\n0x22d7af31cf897ad63c5f5213\n0x47c7030cee042059b6e3577b\n0x1c8c21105f7cd6ff\n0xd4414517bb1b22c4a83284bc\n0x28908dde3ae29858a27f895a\n0xb2d6655a08012dd\n0xcea0bc1ab656b46fc243392d\n0xa0456c77a73015926f7288d3\n0x1c362fc86f8c1d0f\n0x2e565ee8af739e4bbd5e38db\n0xbce29a4d55d14a24f4129745\n0xd3c12d9d9d739c7\n0x7d97750dc38f3abfd3d95cf7\n0x989aaf3ea9ceda9955020b38\n0xae8e94f9a303122\n0x1067f352610a5f0a8359abb8\n0xf9ad807f6761d7c81c4847e2\n0x24c07d9328ac93a7\n0x2ef3565be909a8969147aec4\n0xbc3e2434900f2c41623aae66\n0x198795b30a138234\n0xef23931e156aff3085ffa169\n0x4a2768ef7cac473b0a7675e5\n0x2ae2aec518df716e\n0x23fdf80d710a58367fced932\n0x4b3110f77861b2235b13938f\n0x22b3451e2aba5fa4\n0x489f16ab0f6615b7c0d19f73\n0x74974a86ef5fc0bc57aff13\n0x1cd61166b6ccb3ec\n0x30dc186ddcb7aef6adaa8674\n0xf8d1438e18cb683bd92427a4\n0x1fbccc2ab592ed23\n0x5d7738ec9f55c1f7643f66f5\n0xfd42f4cf748188230b046ca7\n0x24ce5c478d90b4f1\n0xbace1eca3d4eedee40223e0c\n0x97063b3d2a16f38bd39c2164\n0x295c982feff17dd5\n0xebb080a465c9384cc9a14706\n0x3c085a42d48e4b5ab4e6e451\n0x17f3b5c5fa4b6067\n0xc39d3a58152588cf25e876d\n0x3fbecb7fde8c8dde6be615d9\n0x1fb8449a8c0ddbe6\n0x78b44711a98a3f7009635c04\n0x58f519c3e9c701820dde1e46\n0x326955c70081484\n0x308a812b0d52741fb86e6e36\n0xdc2c0f279347d4ffa4b66b94\n0x18bbcc3129b8f07e\n0xe939b4923f0f4cad3cc8bab9\n0x42aa047c4599f8c097081310\n0x14637f70dfd9744c\n0x12c7d7250728f78b7c6ae4fc\n0xf52054abda265b632548f41\n0xd4400c7e62b2e17\n0xbd07a8c650163a134c9dcd21\n0xee43185686c4140abae3c04f\n0xfa5bda5f5845a30\n0xf12af166986aa927d3bee4fa\n0x64946727a0147461cd2fbbae\n0x28eff8b0dd117cdd\n0x625e1ebb0a467d2fa3e160f2\n0x5d9bc850a4c1ace51b330faa\n0x274890368da93ec7\n0x262e259ade4489612ab93dfe\n0xebba03f70326e4f8866942c0\n0xeae132e1272d51b\n0xd779f287f4a7e8bc6af4fe21\n0xa0944d836d4948e34522a7f1\n0x901e46c5763df96\n0x2fee4d9e836a0b206611e20b\n0xf9aa57aec56c665085871187\n0x6e5c856bec75f11\n0x9052dda690ce2b0b5e035adb\n0x6774eba392a4bf969f69c092\n0x168d77fe201f9d8e\n0x1912d68caf290a5619283e2c\n0x33d2feeded410bfcdadf368a\n0x7370e0483bcf693\n0x559e6057b3343663f5d100c0\n0x314e98ffbf39d185a406f2da\n0x1d6356ef82b6ef58\n0x4eda86f5a76b4ec05d118838\n0x4564ccaff026990f3fdf2514\n0xfe99d9b2692ba5\n0x3cd06c15e90bdcb9f7108c8f\n0x5f5edb0776fc6741a4c9e1cc\n0x72691274c56ff9b\n0xd7bb60005edd4b46c84915e2\n0xa5f6dadb8bd2473bf8109b9d\n0x2c85db152ac96a94\n0xca504f5b903ca6c7be8f3e41\n0x2cd2faec6e2d119b70e8a76f\n0x1e289334b44620e2\n0x80c7c03cba28c8a5de7537e5\n0xa0bf9053f68500eec3a5e445\n0x7dd3a63e1689f58\n0x32a6e0f5726cc4862bcd3115\n0xef4dde28bfa4777eaea30e28\n0x5d51ee1fea2599d\n0x2f917c0e966f4d66bf9c409d\n0x41ed268e84f09ee650f8dba7\n0x1cd82511b8140c50\n0x14011024f00040a44f515220\n0xfc037721b586c8e64ec3f4bb\n0x9e6f577b268e123\n0x33f3b6f4c03e2f9675225200\n0x5eb48a3d8a0c6ae9de530884\n0x1802f58b01f0f9df\n0xb33c0a8df8425f666dc4a325\n0x1fd604a845d97b9d1a6abfb1\n0x10d0263aa3966f27\n0x47647f8d8cda848cc561ee70\n0x504552e8bcd10aac1d22c5de\n0xecf446ccf8f2507\n0x14e4e90342ae39a37239bcec\n0x9c591b8b49c877601edaaf34\n0x184d75f770ddfd6a\n0x7bd5d8ae454f82eef8f784ca\n0x3136eb38d4d6f42c2709ba07\n0x4a631f41a61899a\n0x12d3ecd8ce3de9235f6db4d6\n0x8a385bde7951bdad96522d83\n0x118fcc33fcd8f29\n0x8fa37cac496982e16c3f3d1c\n0x2a4775dbbedb9aa90c5ca0c9\n0xfeeb07d13d4d072\n0x87d4967981eaebab0c1848b9\n0x34dbf89140716d3cb59d1178\n0xfd17f7470bed0b2\n0x438964daee329d9d4f25635e\n0xe6b8fecbfc3b43ca353a4d85\n0x1f6454550d171aec\n0x86bd256783731516e12d841\n0xf3a598073bf43db491a7ca3b\n0xb8d0fd39c29ad34\n0xc322648f1f8fc1b0b11f16c2\n0xd462aba8b2e1061e934ada71\n0x8cd28f07fbfe3b3\n0x371992bb4d9396c9b2cee390\n0xe37d5a103d9ac2a543195846\n0x20a1dfe540458fa7\n0x42ea5e8dadd6a35ab38d7dc6\n0xb5695e750bd6e42c94448842\n0x18aea7fbd858d7a2\n0xd22e5fb9111c7a4e515fd735\n0xbcc80764c54f3f43444f8596\n0x1c9781b871a806e3\n0xa819835f4834271f322968d\n0x4c385d52da43811c2246627f\n0x1e5ff805517fb116\n0x794fa21a1f5ac6ca184ea627\n0x595a6a323af35cca759c3022\n0x28efa74764481358\n0x944f97f4d2ba4fd0fe09bc2f\n0x3346308efa509373a3ae1b9c\n0x29489bda26dc69aa\n0x92848583e6fa55d983f09f18\n0x4b4c7be1024b959816864a15\n0x1f1ab8c96a6318ff\n0x7a90edcec14e5366e19b9250\n0xedafa59eca62897f3b575240\n0x55913467a8c2d8\n0x5595f7da741a6503432db33f\n0xc782ef6c0294a8c48bd8da0d\n0x4aaca22a142e7fa\n0xa2ecc10ae40d2a3ae2694ab3\n0x1dc61a1e67fb10cc2c256d87\n0x28556a88b4cb9d27\n0x3755f77f66f035f10a4c4a01\n0x77dc2f78fd85d999768dd34d\n0xb0ebb5c09d4a7ab\n0xba7e4177c34a7041ce32ab87\n0x3a82f6fdb9d328cedbee81a8\n0x28e44212b76c8e7a\n0xaefc515320ad28e6e4f50b5e\n0x96e6277fab17d4ed41b99141\n0x290842a16b803039\n0xac7b0a68c88913a1a6f1f7b3\n0x68271e5e6619548927764e7\n0x9a11b9fc9cfc754\n0x9a81714765462ecba535da3f\n0xb89b810842412e0cc586b937\n0x5b5d02efc51ef81\n0xfb97b4b0992aaebb846c6fdb\n0xb86d2ca524bbc80fb3c1d943\n0x16b5c4b6b4933781\n0xd972323f473dddbcd8df4f4d\n0x18ab92ec7e9eef9a159ca19f\n0x27014ac03ab89e14\n0x65f36423ab5df1f1e1fc1fad\n0x88674a98287a5b2a1d6493e\n0x2e7c3173d63d41b5\n0xf871297b6d892ea871e53557\n0x2d8f695465ded4e336fec31f\n0x268c4dcf343a92f3\n0xf036ccbbf28d705dd9fe9076\n0x1672dd197835b11387aebdb4\n0x3dd3a39ac3a495e\n0xe568ba118f673c080e058705\n0xd2e6a20ecec0853f945ad9b1\n0x16ff71f399a0ce1c\n0x1136522a60e986a1a4d4ed42\n0xb982a6539a0de41eca4683bf\n0x1207b96faae43d8b\n0x520494130f3a3e1abb6a86f4\n0x635fb9cc241c4f4213358c58\n0xf4c2021b1a24b4d\n0x6c152bd72142c5eb9660c538\n0xd54b21f3d7500b5a1c7cc8ec\n0x14ba01b0d4b40025\n0xd7fa7ba63bcadedb1376e198\n0x1a1eef38199512c00b0c15e5\n0x2b7421ac7df102a2\n0x5adce44194063b3ed83e489e\n0x4b2341d78ad8a2ec6c894a44\n0x127b49eb604a949d\n0xa7cdfb61a1dde38f2de5ed\n0xa7d86489ee8e6e4d52b95aa9\n0x1ae739c94714210\n0x94fcfbe072d4728e6c94a8f3\n0xc3e2f291c7ecf69cf872a0bb\n0x2b0b42733730fa9a\n0xfc08e38fd67c2ad89ec0ae77\n0xc6c0450a50b5f23b52e9d60c\n0xafed6a937030032\n0xf5b21edeb8e9b0ef2f2dd9ab\n0x75851ae62a77710331623683\n0x1f27587d48a0456e\n0xbf901a94eefdc040906cb24c\n0xb55d40312466f8da61007aac\n0x1adc712e34758e00\n0x3a2c084122861c501124eef5\n0x30726fc80ea80e4bb353974c\n0x26ecf462327a7e8\n0x24224013052382ced90c0d0c\n0x8c516df74309ad6dc958e6e7\n0x714b668ffe2762a\n0x65d34a86ca1ae8cd1830cdcc\n0x1dcca70d674776424611e81\n0x206bd9adf1f75c97\n0x65f06d57efed4a19c0a2bbf7\n0xc69f4aed70b9ce639b29056a\n0x246ca03381f4edab\n0x903c8a1eb37dd63ba43d3946\n0x3defe3d0f3c682012e000a95\n0x178b3c81a4bc29a7\n0xdc1434ea6fc2f75323ff89f3\n0xa5bbf0df6d19f9521e915bab\n0xd9d8984228ce313\n0xb7024ea8308e553bad8cc9ae\n0xaf6d832a4f2eef3cb50589bf\n0x22be7b5b5e64063b\n0xfa162854b71a190b2e84f641\n0x7e122ea55ed555664c35abf4\n0x2c7604dadfbdd847\n0x7d49177e77ba789d67779320\n0x236d372954f47d635192158a\n0xf3331a562103059\n0x81b7ba4b5d4b33bdfebed111\n0x662a8ed34d3e3de1332d04e4\n0x192771d71469b6d0\n0xa47332ac89e859511fb66294\n0x1fd9c5112304c42740e9f46a\n0x520322f3ba7f38a\n0xb907e30e19d48cffb09fbcf7\n0x2b59e7d4dafc891f08a24416\n0x1e71e1c05c6e4a55\n0x7839ecfb6b9e94ff4c3e9bb1\n0xd36a7eae912afdfce4d6d262\n0x1d6a1da9a2327b0b\n0x1cb355493739dedb1ef42d51\n0xe01e5c211a1f46f2e4094597\n0x269bce40e53ea050\n0x59da2615d5a3b91e937d89159f7380b9669858cc437cebe74adc09d93c99329\n0x18\n0x2a683c7d878585763f8267ea\n0xead8f10ef81f7901ed274b24\n0x25ec385810beaa87\n0x0\n0xf28f9a5faaa6546f997e0949\n0xcd3ecab431257f8b80b8dc77\n0x154e8dd3aac3d42c\n0x0\n0x100000000000000005c19a465cc7cbb28\n0x3378cd034f0d9ebb\n0x24df6021ce19cb18\n0x9c6a591e71b87b32\n0x970e2d83fd3ed91e6df39f2c\n0x85294ea4088b8c3ca50dcf1e\n0x3a237bdbf87287c\n0x0\n0xd13f9298545a1d77942e20d7\n0xa85510aa9d5e7b357755b5d6\n0x15c764c1c5380102\n0x0\n0x100000000000000003aa0eb9486eaea7c\n0x100000000000000003ed064b9068afd7b\n0x100000000000000004e76be5e17f551d8\n0x100000000000000008d717becec440328\n"
  },
  {
    "path": "src/contracts/autogenerated/sp1_verifier_bn254/tests/test_contract.cairo",
    "content": "// Generated by Garaga version 1.1.0\n\n//! # Starknet Verification Contract Tests\n//!\n//! This module contains comprehensive tests for the proof verification contract.\n//! The tests use Starknet Foundry's testing features to verify proofs.\n//!\n//! ## Test Strategy\n//! - Use real proof fixtures generated by the garaga CLI\n//! - Test both positive (valid proof) and negative (invalid proof) cases\n\nuse snforge_std::fs::{FileTrait, read_txt};\nuse snforge_std::{DeclareResultTrait, declare};\nuse sp1_verifier_bn254::groth16_verifier::{\n    ISP1Groth16VerifierBN254DispatcherTrait, ISP1Groth16VerifierBN254LibraryDispatcher,\n};\nuse starknet::ClassHash;\n\n/// Declare the SP1Groth16VerifierBN254 contract for testing.\n///\n/// This function declares a new instance of the SP1Groth16VerifierBN254 contract\n///\n/// # Arguments\n/// * `name` - The contract name to declare\n///\n/// # Returns\n/// * `ClassHash` - The class hash of the declared contract\n///\n/// # Example\n/// ```cairo\n/// let class_hash = declare_contract(\"SP1Groth16VerifierBN254\");\n/// let dispatcher = ISP1Groth16VerifierBN254LibraryDispatcher { class_hash };\n/// ```\nfn declare_contract(name: ByteArray) -> ClassHash {\n    let class_hash = *declare(name).unwrap().contract_class().class_hash;\n    class_hash\n}\n\n/// Test the verification function verify_sp1_groth16_proof_bn254 with a valid proof.\n///\n/// This test demonstrates the complete verification flow:\n/// 1. Declare the verification contract\n/// 2. Load a pre-generated proof fixture\n/// 3. Verify the proof on-chain\n/// 4. Assert that verification succeeds\n///\n/// ## Test Setup\n/// - Uses fork testing against Sepolia testnet to access required declared contracts maintained by\n/// the garaga team - Loads proof calldata from `tests/proof_calldata.txt`\n/// - To generate the calldata, you can use the garaga CLI:\n/// ```bash\n/// garaga calldata\n///     --system groth16\n///     --vk path/to/vk\n///     --proof path/to/proof\n///     --public-inputs path/to/public_inputs\n///     --format snforge\n///     --output-path path/to/tests\n/// ```\n/// This will generate a file `proof_calldata.txt` in the specified output path.\n/// You can then use this file in the test.\n///\n/// ## Expected Behavior\n/// - The proof should verify successfully\n/// - The function should return Ok(public_inputs) containing the expected public inputs\n/// - No panics or assertion failures should occur\n#[test]\n#[fork(url: \"https://api.zan.top/public/starknet-sepolia/rpc/v0_10\", block_tag: latest)]\nfn test_verify_sp1_groth16_proof_bn254() {\n    // Step 1: Declare the verification contract\n    let class_hash = declare_contract(\"SP1Groth16VerifierBN254\");\n    let dispatcher = ISP1Groth16VerifierBN254LibraryDispatcher { class_hash };\n\n    // Step 2: Load the proof fixture generated by the script\n    // This file contains the groth16 proof calldata formatted for Starknet\n    let file = FileTrait::new(\"tests/proof_calldata.txt\");\n    let calldata = read_txt(@file).span();\n\n    // Step 3: Verify the proof on-chain\n    // This calls the contract's verify_sp1_groth16_proof_bn254 function with the loaded proof data\n    let result = dispatcher.verify_sp1_groth16_proof_bn254(calldata);\n\n    // Step 4: Assert that verification succeeded\n    // A valid proof should return Ok(public_inputs), not Err\n    assert(result.is_ok(), 'Proof verification failed');\n    // Optional: You can also verify the public inputs contain expected values\n// let public_inputs = result.unwrap();\n// assert(public_inputs.len() > 0, 'No public inputs');\n// Additional assertions on the public input values can be added here\n}\n"
  },
  {
    "path": "src/contracts/drand_decrypt_quicknet/Scarb.toml",
    "content": "[package]\nname = \"drand_decrypt_quicknet\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n[dependencies]\ngaraga = { path = \"../..\" }\ndrand_quicknet = { path = \"../drand_quicknet\" }\nstarknet = \"2.16.1\"\n\n[cairo]\nsierra-replace-ids = false\n\n[[target.starknet-contract]]\ncasm = true\ncasm-add-pythonic-hints = true\n"
  },
  {
    "path": "src/contracts/drand_decrypt_quicknet/src/drand_decrypt.cairo",
    "content": "use garaga::definitions::G1Point;\n\n#[starknet::interface]\ntrait IDrandDecryptQuicknet<TContractState> {\n    /// Verify a drand round BLS signature via library_call to the verifier class,\n    /// which stores the signature in this contract's storage.\n    fn verify_round(\n        ref self: TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<u64, felt252>;\n\n    /// Read the stored signature for a previously verified round.\n    fn get_signature_for_round(\n        self: @TContractState, round_number: u64,\n    ) -> Result<G1Point, felt252>;\n\n    /// Get poseidon_hash(signature) for a previously verified round.\n    fn get_randomness_for_round(\n        self: @TContractState, round_number: u64,\n    ) -> Result<felt252, felt252>;\n\n    /// Decrypt a tlock ciphertext for a given round.\n    /// If the round is not yet verified, a DrandHint must follow in the calldata.\n    fn decrypt_cipher_text(\n        ref self: TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u8>, felt252>;\n}\n\n#[starknet::contract]\nmod DrandDecryptQuicknet {\n    use drand_quicknet::drand_verifier::{\n        IDrandQuicknetDispatcherTrait, IDrandQuicknetLibraryDispatcher,\n    };\n    use garaga::apps::drand::{CipherText, decrypt_at_round};\n    use garaga::definitions::{G1Point, G1PointStorePacking, G1PointZero};\n    use starknet::storage::{Map, StoragePathEntry, StoragePointerReadAccess};\n    use super::super::drand_decrypt_constants::VERIFIER_CLASS_HASH;\n\n    #[storage]\n    struct Storage {\n        signatures: Map<u64, G1Point>,\n    }\n\n    #[derive(Drop, Serde)]\n    struct DrandDecryptHint {\n        round_number: u64,\n        cipher_text: CipherText,\n    }\n\n    fn verifier() -> IDrandQuicknetLibraryDispatcher {\n        IDrandQuicknetLibraryDispatcher { class_hash: VERIFIER_CLASS_HASH.try_into().unwrap() }\n    }\n\n    #[abi(embed_v0)]\n    impl IDrandDecryptQuicknetImpl of super::IDrandDecryptQuicknet<ContractState> {\n        fn verify_round(\n            ref self: ContractState, full_proof_with_hints: Span<felt252>,\n        ) -> Result<u64, felt252> {\n            let mut v = verifier();\n            v.verify_round(full_proof_with_hints)\n        }\n\n        fn get_signature_for_round(\n            self: @ContractState, round_number: u64,\n        ) -> Result<G1Point, felt252> {\n            verifier().get_signature_for_round(round_number)\n        }\n\n        fn get_randomness_for_round(\n            self: @ContractState, round_number: u64,\n        ) -> Result<felt252, felt252> {\n            verifier().get_randomness_for_round(round_number)\n        }\n\n        fn decrypt_cipher_text(\n            ref self: ContractState, mut full_proof_with_hints: Span<felt252>,\n        ) -> Result<Span<u8>, felt252> {\n            let hint = Serde::<DrandDecryptHint>::deserialize(ref full_proof_with_hints)\n                .ok_or('Bad calldata: DecryptHint')?;\n\n            let signature = self.signatures.entry(hint.round_number).read();\n\n            let signature = if signature.is_zero() {\n                let mut v = verifier();\n                v.verify_round(full_proof_with_hints)?;\n                let sig = self.signatures.entry(hint.round_number).read();\n                if sig.is_zero() {\n                    return Result::Err('Verification did not store sig');\n                }\n                sig\n            } else {\n                signature\n            };\n\n            Result::Ok(decrypt_at_round(signature, hint.cipher_text).span())\n        }\n    }\n}\n"
  },
  {
    "path": "src/contracts/drand_decrypt_quicknet/src/drand_decrypt_constants.cairo",
    "content": "// Generated — do not edit manually.\npub const VERIFIER_CLASS_HASH: felt252 =\n    0x86bf4360e082cd786bd785d3345df32777db89cd26b761f3e85b1993addfd0;\n"
  },
  {
    "path": "src/contracts/drand_decrypt_quicknet/src/lib.cairo",
    "content": "mod drand_decrypt;\nmod drand_decrypt_constants;\n"
  },
  {
    "path": "src/contracts/drand_quicknet/.tool-versions",
    "content": "scarb 2.16.1\nstarknet-foundry 0.57.0\n"
  },
  {
    "path": "src/contracts/drand_quicknet/Scarb.toml",
    "content": "[package]\nname = \"drand_quicknet\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n[dependencies]\ngaraga = { path = \"../..\" }\nstarknet = \"2.16.1\"\n\n[lib]\n\n[cairo]\nsierra-replace-ids = false\n\n[[target.starknet-contract]]\ncasm = true\ncasm-add-pythonic-hints = true\n"
  },
  {
    "path": "src/contracts/drand_quicknet/src/drand_verifier.cairo",
    "content": "use super::drand_verifier_constants::{G2_GEN, precomputed_lines};\n\n#[starknet::interface]\npub trait IDrandQuicknet<TContractState> {\n    /// Verify a drand round BLS signature and store it on-chain.\n    /// Returns the round number on success.\n    fn verify_round(\n        ref self: TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<u64, felt252>;\n\n    /// Look up the stored signature for a previously verified round.\n    fn get_signature_for_round(\n        self: @TContractState, round_number: u64,\n    ) -> Result<G1Point, felt252>;\n\n    /// Look up the randomness for a previously verified round.\n    /// Randomness = poseidon_hash(signature).\n    fn get_randomness_for_round(\n        self: @TContractState, round_number: u64,\n    ) -> Result<felt252, felt252>;\n}\nuse garaga::definitions::G1Point;\n\n#[starknet::contract]\nmod DrandQuicknet {\n    use garaga::apps::drand::{DRAND_QUICKNET_PUBLIC_KEY, HashToCurveHint, round_to_curve_bls12_381};\n    use garaga::definitions::{G1G2Pair, G1Point, G1PointStorePacking, G1PointZero};\n    use garaga::pairing_check::{MPCheckHintBLS12_381, multi_pairing_check_bls12_381_2P_2F};\n    use garaga::utils::calldata::deserialize_mpcheck_hint_bls12_381;\n    use garaga::utils::hashing::hash_G1Point;\n    use starknet::storage::{\n        Map, StoragePathEntry, StoragePointerReadAccess, StoragePointerWriteAccess,\n    };\n    use super::{G2_GEN, precomputed_lines};\n\n    #[storage]\n    struct Storage {\n        signatures: Map<u64, G1Point>,\n    }\n\n    #[derive(Drop)]\n    struct DrandHint {\n        round_number: u64,\n        signature: G1Point,\n        hash_to_curve_hint: HashToCurveHint,\n        mpcheck_hint: MPCheckHintBLS12_381,\n    }\n\n    impl DrandHintSerde of Serde<DrandHint> {\n        fn serialize(self: @DrandHint, ref output: Array<felt252>) {}\n\n        fn deserialize(ref serialized: Span<felt252>) -> Option<DrandHint> {\n            let round_number = Serde::<u64>::deserialize(ref serialized)?;\n            let signature = Serde::<G1Point>::deserialize(ref serialized)?;\n            let hash_to_curve_hint = Serde::<HashToCurveHint>::deserialize(ref serialized)?;\n            let mpcheck_hint = deserialize_mpcheck_hint_bls12_381(ref serialized);\n            Option::Some(DrandHint { round_number, signature, hash_to_curve_hint, mpcheck_hint })\n        }\n    }\n\n    #[abi(embed_v0)]\n    impl IDrandQuicknet of super::IDrandQuicknet<ContractState> {\n        fn verify_round(\n            ref self: ContractState, mut full_proof_with_hints: Span<felt252>,\n        ) -> Result<u64, felt252> {\n            let hint = Serde::<DrandHint>::deserialize(ref full_proof_with_hints)\n                .ok_or('Bad calldata: DrandHint')?;\n\n            let round_number = hint.round_number;\n            let message = round_to_curve_bls12_381(hint.round_number, hint.hash_to_curve_hint);\n\n            multi_pairing_check_bls12_381_2P_2F(\n                pair0: G1G2Pair { p: hint.signature, q: G2_GEN },\n                pair1: G1G2Pair { p: message, q: DRAND_QUICKNET_PUBLIC_KEY },\n                lines: precomputed_lines.span(),\n                hint: hint.mpcheck_hint,\n            )\n                .map_err(|_e| 'BLS signature invalid')?;\n\n            self.signatures.entry(round_number).write(hint.signature);\n            Result::Ok(round_number)\n        }\n\n        fn get_signature_for_round(\n            self: @ContractState, round_number: u64,\n        ) -> Result<G1Point, felt252> {\n            let signature = self.signatures.entry(round_number).read();\n            if signature.is_zero() {\n                Result::Err('Round not verified yet')\n            } else {\n                Result::Ok(signature)\n            }\n        }\n\n        fn get_randomness_for_round(\n            self: @ContractState, round_number: u64,\n        ) -> Result<felt252, felt252> {\n            let signature = self.signatures.entry(round_number).read();\n            if signature.is_zero() {\n                Result::Err('Round not verified yet')\n            } else {\n                Result::Ok(hash_G1Point(signature))\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/contracts/drand_quicknet/src/drand_verifier_constants.cairo",
    "content": "use garaga::definitions::{G2Line, G2Point, u384};\n\n\npub const G2_GEN: G2Point = G2Point {\n    x0: u384 {\n        limb0: 0xa805bbefd48056c8c121bdb8,\n        limb1: 0xb4510b647ae3d1770bac0326,\n        limb2: 0x2dc51051c6e47ad4fa403b02,\n        limb3: 0x24aa2b2f08f0a9126080527,\n    },\n    x1: u384 {\n        limb0: 0x13945d57e5ac7d055d042b7e,\n        limb1: 0xb5da61bbdc7f5049334cf112,\n        limb2: 0x88274f65596bd0d09920b61a,\n        limb3: 0x13e02b6052719f607dacd3a0,\n    },\n    y0: u384 {\n        limb0: 0x3baca289e193548608b82801,\n        limb1: 0x6d429a695160d12c923ac9cc,\n        limb2: 0xda2e351aadfd9baa8cbdd3a7,\n        limb3: 0xce5d527727d6e118cc9cdc6,\n    },\n    y1: u384 {\n        limb0: 0x5cec1da1aaa9075ff05f79be,\n        limb1: 0x267492ab572e99ab3f370d27,\n        limb2: 0x2bc28b99cb3e287e85a763af,\n        limb3: 0x606c4a02ea734cc32acd2b0,\n    },\n};\n\npub const precomputed_lines: [G2Line<u384>; 136] = [\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x36701a5831c9fb39250e2ea9,\n            limb1: 0x26ad0ec05ad6440f1df034cf,\n            limb2: 0x67cd27cf7598a85f81c23cd9,\n            limb3: 0x15a76ee3d8d1c3451005d560,\n        },\n        r0a1: u384 {\n            limb0: 0x9009367bbf6e6aa19488df66,\n            limb1: 0xce5cd2ccda4704dc0e4b92b6,\n            limb2: 0xd7656829a6a71c42deb7dd,\n            limb3: 0x16d96e785c797fb5d6afcb14,\n        },\n        r1a0: u384 {\n            limb0: 0x9d68b0bdf431a2f53189c109,\n            limb1: 0x70e39167384e44fdaf716fa4,\n            limb2: 0x3768099390a3f9d581d88280,\n            limb3: 0x4c208bdb300097927393e96,\n        },\n        r1a1: u384 {\n            limb0: 0x68ab4b88cf058f147ba2cda9,\n            limb1: 0xce3b4d4da03cbdac75933b54,\n            limb2: 0x1be2f7e6eaa0f1474cb64c53,\n            limb3: 0x546ca700477f9c2f9def969,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x96e0f84058018a4538d64e8b,\n            limb1: 0xdb7b84172cb1e68ddd09eb12,\n            limb2: 0xcf3aaa45c2b370e810ea9361,\n            limb3: 0x14b92565b748c30f253912c6,\n        },\n        r0a1: u384 {\n            limb0: 0x9cdcddf4728a38086aebcd7,\n            limb1: 0x7b8d9115b96656327dd79780,\n            limb2: 0xbf914addbdcbe307142bf7cc,\n            limb3: 0x3c50d0829bdc305ff694cc9,\n        },\n        r1a0: u384 {\n            limb0: 0xcc0dbe864e35231bdec2ef76,\n            limb1: 0x4efa339ef551d8f751da95ba,\n            limb2: 0xfde5910a13d5c428549ed3f5,\n            limb3: 0x105e4803f5b8472a138e00b,\n        },\n        r1a1: u384 {\n            limb0: 0x584879d210eb30bfd6518cf2,\n            limb1: 0xa7c4af01b40d0e68243b050c,\n            limb2: 0xade596dd94a41e4aedec2196,\n            limb3: 0x162a46f819eba8e3b9d215f9,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xaa37b5f455262931a4a4b667,\n            limb1: 0xd63d75f6f171228540731ca7,\n            limb2: 0x1855073ef14fe67beee9ec53,\n            limb3: 0x703f29e5b69ff1dd1441781,\n        },\n        r0a1: u384 {\n            limb0: 0x310c4b87c8dca9036f6be0c0,\n            limb1: 0x4b940b400d665d605ca8924b,\n            limb2: 0x6d53ff2907765e3888b9709e,\n            limb3: 0x166de077ba25fe21aafb8d8,\n        },\n        r1a0: u384 {\n            limb0: 0xa28a55b43c534d6caa724f82,\n            limb1: 0x5f55bbeb19616aec79892386,\n            limb2: 0x3aacfc3b6bd889cf57af9e40,\n            limb3: 0x72ff7d1d3328dbb7c821e1,\n        },\n        r1a1: u384 {\n            limb0: 0xd5e91f70851719038228e756,\n            limb1: 0xb4f970b567fc2d6738d65700,\n            limb2: 0x8c886fe7294c08b41dc5dcbe,\n            limb3: 0x782b1bf6e81fef26d367768,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8d8ec958debf40520de5d867,\n            limb1: 0x57bad55eb06d937414e80cc9,\n            limb2: 0xcb178ebae0f48eb14ad4fba0,\n            limb3: 0x13aa75258cc1d54eb767a47e,\n        },\n        r0a1: u384 {\n            limb0: 0x7aec4216b9f9e33aa4f5af6,\n            limb1: 0x607eabc6cb65b9f4b850a042,\n            limb2: 0x1d93b61b06f4e64902410902,\n            limb3: 0x1860921bbe145ede9350b867,\n        },\n        r1a0: u384 {\n            limb0: 0xe104b73f6d12d90e3c339c6c,\n            limb1: 0x27bab1ac67f3132355d4c1a0,\n            limb2: 0x63ecc80d6bd96b3d592f63d9,\n            limb3: 0xdcb608c9ce643f854507b05,\n        },\n        r1a1: u384 {\n            limb0: 0xe3895865374c9b06b8d02a7f,\n            limb1: 0x8c09a76a05340ce642b99a1a,\n            limb2: 0x4a4afdbe107c0182cfe2e6e7,\n            limb3: 0x1056de76a10fe55b2659ea44,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6a72f085ee4e78bd4c2aef8e,\n            limb1: 0xdec05cffe4a869aed2a64ee8,\n            limb2: 0xd41aa908b1a833b94e768d2,\n            limb3: 0x56ceab5d5d994dee0ca07fc,\n        },\n        r0a1: u384 {\n            limb0: 0xd23aad6cd3e84e398a4e7bc8,\n            limb1: 0xb343a6878db6ec20bcac1275,\n            limb2: 0x3111e14b674a67295a242cf3,\n            limb3: 0x39b596a976f556e5ea4016a,\n        },\n        r1a0: u384 {\n            limb0: 0x19fcdcac7feb1f0edbefdbf8,\n            limb1: 0x71bc60f1a68459eb52df6a92,\n            limb2: 0x2827dbba9d5d8516fb557dfb,\n            limb3: 0x4786cc02b147d13e701c1f5,\n        },\n        r1a1: u384 {\n            limb0: 0xcb7555c0db86510eb99cfadd,\n            limb1: 0x43387d10f8329296e43e6610,\n            limb2: 0xbf6789475132950c583823a,\n            limb3: 0x145f508c63c10d270e027b2b,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x411944418a1e44d0fbd8a4bd,\n            limb1: 0xfa3933a100d5d920bb158196,\n            limb2: 0xaf6096a850d10c6ee57b7d3f,\n            limb3: 0x7bc245f0c719ec216f4f7e7,\n        },\n        r0a1: u384 {\n            limb0: 0xd5f88a09ab7912a54504534a,\n            limb1: 0x6c7b84068e05767f3ac72003,\n            limb2: 0x2e783a6cd8933e5ce254ff56,\n            limb3: 0x648a93088ef22f73be5e1d5,\n        },\n        r1a0: u384 {\n            limb0: 0x72f4d88bd20cecc4c1d57b8f,\n            limb1: 0x2164d957d0e784aca77a27b6,\n            limb2: 0xe45f0a865306a8c7ccf8e465,\n            limb3: 0x182e7e79c81e19c5e6dba3b8,\n        },\n        r1a1: u384 {\n            limb0: 0xf2b21292475b313a8591d232,\n            limb1: 0x31975a79dd261ef9304ae69f,\n            limb2: 0x3fca7e570497ea425d166e3f,\n            limb3: 0xb1e493cae679afa3aeeb48e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x7bd212f8f60967471e995a8e,\n            limb1: 0xec76fa31d0fd358f36ee756e,\n            limb2: 0xa63e06c40964532a724817c3,\n            limb3: 0xd860767952ed2b694b64eea,\n        },\n        r0a1: u384 {\n            limb0: 0xd18f8b1de21e64c50d3c6fc2,\n            limb1: 0x456cec057d45521c48d0b547,\n            limb2: 0x23fb8276293fac77c9a38c1b,\n            limb3: 0x1469d7cf50d58855fa523aa8,\n        },\n        r1a0: u384 {\n            limb0: 0x52f1d22ea6bfc23435bf7e3b,\n            limb1: 0x3e2d5122467bf39f2573a57b,\n            limb2: 0x378db9e77f53b5b1e38981da,\n            limb3: 0x1015deb442db265529d8948,\n        },\n        r1a1: u384 {\n            limb0: 0x73c44618fb7917b2596bd460,\n            limb1: 0x598ee13313073cf3232e1b37,\n            limb2: 0xbd63e58ae4aa477bcd459ef2,\n            limb3: 0x272bfde06aa8302ab8c70d6,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x84d7880d9c5ad98d07f1b961,\n            limb1: 0xd5be4b6e58ad745353113073,\n            limb2: 0x592ecc7534e44983a06d755c,\n            limb3: 0x15d60a0d6d8a2e4543194737,\n        },\n        r0a1: u384 {\n            limb0: 0x9ba63990e4f1ea4875173006,\n            limb1: 0xf84fa98d5f3742b3c571f427,\n            limb2: 0xdd28189a4a2e3a70f78a170e,\n            limb3: 0x1ad5bc82425c66f655a75db,\n        },\n        r1a0: u384 {\n            limb0: 0x49306522c22ca321950bf155,\n            limb1: 0x369a747f27aa6472ebc5d290,\n            limb2: 0x20d8977cbe5acf112574c70a,\n            limb3: 0xcdc103da1aac9ec5f855b64,\n        },\n        r1a1: u384 {\n            limb0: 0x74517cbd651af3940075c057,\n            limb1: 0x94d3802d81c93d69eb13518b,\n            limb2: 0x76411c393dd03e5381661629,\n            limb3: 0x16e57b05faef24ef64868a07,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1a30592d98290c72cccd458b,\n            limb1: 0x140a621ff20376f808a589fd,\n            limb2: 0x49ba32b20969590620d93359,\n            limb3: 0x8505a11bd1aa7d53fffa788,\n        },\n        r0a1: u384 {\n            limb0: 0xbedeeea8460644391170d35f,\n            limb1: 0xcfc8f5f9f7606a79990e9242,\n            limb2: 0x2747fe157739059a9b528ae0,\n            limb3: 0x13386caa378815cd519166ec,\n        },\n        r1a0: u384 {\n            limb0: 0x2adf79c700fc3a5a36c5ec26,\n            limb1: 0x4f168c2853c5ec65b71b40ca,\n            limb2: 0x7e0c13754f775e73a9419653,\n            limb3: 0x10616cc67745c7887ca4898e,\n        },\n        r1a1: u384 {\n            limb0: 0xde84fc636c0a8697ac4d8960,\n            limb1: 0xdd66e4fac060783909cc83c4,\n            limb2: 0x86edc8b2faa981346da2237c,\n            limb3: 0x11c912ed6ea0e8f7768ac884,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6b6c23b2b461087f63e2fd50,\n            limb1: 0x8454a8c69f81cfea8edb19ba,\n            limb2: 0x2133ca31f8dd40f674513fd8,\n            limb3: 0x171663bdebf2ef26dc306e13,\n        },\n        r0a1: u384 {\n            limb0: 0x6b95f25b75fe9a8aa69ae917,\n            limb1: 0x2f15c87206b024c108e4f4d4,\n            limb2: 0xc4e3e65f02f2e19326083300,\n            limb3: 0x16172a9e775f111d4bf432bf,\n        },\n        r1a0: u384 {\n            limb0: 0xc4289527cdf4e1662f27e1f9,\n            limb1: 0x7f6c52aaea1458a5388d10eb,\n            limb2: 0x4f6130d75d26097d0a4fa02a,\n            limb3: 0x16f8a911b684b408bbd72650,\n        },\n        r1a1: u384 {\n            limb0: 0x648a1498ebbbd0e225db1ffc,\n            limb1: 0xa36cfb4b46195b619bb220bf,\n            limb2: 0xe327926a1726c7e5bb70bc97,\n            limb3: 0xfcef666ce7ecc2915258730,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb5abe92a46d0ff04a4205803,\n            limb1: 0xdb760c98b7aad959e5dfc28d,\n            limb2: 0xbea9b6e4adf41fa1060713ee,\n            limb3: 0x75707a467e7543c28370330,\n        },\n        r0a1: u384 {\n            limb0: 0x8b0715d2f6a16be8d5828197,\n            limb1: 0x598a8a6da7ed2bcc091f594d,\n            limb2: 0x18cfc9c1ee8960c06ff2c240,\n            limb3: 0x14061839f139644bb20e8647,\n        },\n        r1a0: u384 {\n            limb0: 0xd529f0561fff46258f565dec,\n            limb1: 0x80402f61ae7ce96272aff23b,\n            limb2: 0x883367465c3a4bde2507377a,\n            limb3: 0x14fc234296369891318c6245,\n        },\n        r1a1: u384 {\n            limb0: 0x9fdc0242b4d20c44b72c8d49,\n            limb1: 0x37e047238dd417acab9ea0c2,\n            limb2: 0xc424c8845919fe27ac23e9,\n            limb3: 0x151e87d65d95c3b1cc9b1de6,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf5a9a8a9d8ecd9df033bb53b,\n            limb1: 0x6f13c1f15ca3c43bd8dc862c,\n            limb2: 0xaf9fffe39ed8b6f589e47e4f,\n            limb3: 0x1355d3f3bda0ba53c342406b,\n        },\n        r0a1: u384 {\n            limb0: 0x13c7baebedc25cd07fa0b8ea,\n            limb1: 0x4e29e5e7fd865c69feb81131,\n            limb2: 0xdcf94191f24d657ae6fc8c5c,\n            limb3: 0x162398b0a01eff8f7149ab6c,\n        },\n        r1a0: u384 {\n            limb0: 0x8cf50d2f7aa3da376e8317d5,\n            limb1: 0x490a7502e8f6bc788f715c7a,\n            limb2: 0xe6db018fa6b084ae40896c2b,\n            limb3: 0x184f93ce89fff4893629db4d,\n        },\n        r1a1: u384 {\n            limb0: 0x53e941ac4d20f05b66f3b0ec,\n            limb1: 0x82b8a8efafffe40798a1d5da,\n            limb2: 0xd08e35da426abf3dd1ce8bb,\n            limb3: 0xd49095a9c436bd86f9d4736,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9bd8fa7a943e0e3a924e7492,\n            limb1: 0xad948685eedfe9d3ac7315ff,\n            limb2: 0x8148910d6004895792caa88d,\n            limb3: 0x1deabfaeb3374b50119ecb9,\n        },\n        r0a1: u384 {\n            limb0: 0xfedf28954ae85d6e9f58c709,\n            limb1: 0x7c01f5d8a4b9368fc9cbb8eb,\n            limb2: 0xbe98bf07cbd25fe6f4ac154f,\n            limb3: 0x7c9b05e8adef4de506459f7,\n        },\n        r1a0: u384 {\n            limb0: 0x71812aeba8c33457117bfb0,\n            limb1: 0xaf1a11b5a7571775ec17c1,\n            limb2: 0x721e08542ff85e7037b2c02f,\n            limb3: 0x991d1db86230da71efb4475,\n        },\n        r1a1: u384 {\n            limb0: 0x4122fa433f37c5e6888de07c,\n            limb1: 0x144d977681671d8cd0854c34,\n            limb2: 0x93981673fae1df08d18161aa,\n            limb3: 0x145eae6a49c250f2435d1ec8,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x3ab208ad049d8dbf41ab2d8c,\n            limb1: 0xe8d0eafc04fe7a37f53901c8,\n            limb2: 0xbffd6b641b6f6961476d4a1b,\n            limb3: 0x16c1d585f68dee202ea9a988,\n        },\n        r0a1: u384 {\n            limb0: 0x3eba0d6e9e3751e7d1b4533f,\n            limb1: 0x8e4692d56ab832e68469328a,\n            limb2: 0x9d03908cf037ee8faf6dac32,\n            limb3: 0x2ef973d44d5dfe1f52b48e7,\n        },\n        r1a0: u384 {\n            limb0: 0x6cd551023179a5ffe150ae4b,\n            limb1: 0xd48575f40677168193ee4571,\n            limb2: 0x81320f4ef3fa7936f5865695,\n            limb3: 0x37748234157e4931a4f54d7,\n        },\n        r1a1: u384 {\n            limb0: 0x73847e2fc69aee5b6a51756,\n            limb1: 0x1cfd76b51ee2e57b733742b9,\n            limb2: 0xe02551761eba32bebc8413bb,\n            limb3: 0x3136b909d615d39094ab565,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa8af53d78f2fa38c6e213a84,\n            limb1: 0xc908fd45d36e147e8a3449ea,\n            limb2: 0x9224181cd573d3836b141129,\n            limb3: 0x140090a04158ea562a90ed5,\n        },\n        r0a1: u384 {\n            limb0: 0x95e6526648a96a5a43488327,\n            limb1: 0x5f5e4c24465495ee0dcb3055,\n            limb2: 0x49f0985811804cda4142ca8c,\n            limb3: 0x9619ac570f151f7baaa7ae,\n        },\n        r1a0: u384 {\n            limb0: 0xc2ef8275baa5e3b836a847d7,\n            limb1: 0x9835333ce4136fda57f9c31e,\n            limb2: 0x8392d675aba184475007124a,\n            limb3: 0x10f9170d8f4e3130ef5a354e,\n        },\n        r1a1: u384 {\n            limb0: 0x4db131e9b2a50df6253da27e,\n            limb1: 0x3210503344192c1a1d83234c,\n            limb2: 0xb84a1ae100e6602d2a3eaa1d,\n            limb3: 0x146401ace26dcc76ec7cb805,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9a29bb6c54b018b4ed75888b,\n            limb1: 0x1437b2d93b1ecc564157059c,\n            limb2: 0xf0add7baf8cfe1ddc30f0754,\n            limb3: 0x86553ec1cc3cc6a38436fbb,\n        },\n        r0a1: u384 {\n            limb0: 0x516be99929795e7ae5112f30,\n            limb1: 0xb182ffdb6110024a0018e3e7,\n            limb2: 0x8e468869d60b7ae7fc6004bd,\n            limb3: 0x4916e8c2d5820861e32013a,\n        },\n        r1a0: u384 {\n            limb0: 0x78554bdd8568c0e9686a510e,\n            limb1: 0x97bc0c8b458fe7d5dcf2264c,\n            limb2: 0xfcc4906709b359120a9e0158,\n            limb3: 0x193f60f20d1cc7f2b1bf553c,\n        },\n        r1a1: u384 {\n            limb0: 0x2713699297ab49a2d9bf4f6d,\n            limb1: 0xb396d1c4590471bf032b959c,\n            limb2: 0x350113633de03c6e721c7597,\n            limb3: 0x79ef6c98d71e95eb13fae02,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb3bbccb4893a93d20a147b98,\n            limb1: 0x5c46a12e68c1dcaf7d45545,\n            limb2: 0xe1d3e9970b998f9ee1bfcc60,\n            limb3: 0xe0e611221166a37eaca4699,\n        },\n        r0a1: u384 {\n            limb0: 0x255f666baafad4929f87c34d,\n            limb1: 0x1a1554e683a36d8c5359c91d,\n            limb2: 0xb351c7146573abdf82d32baf,\n            limb3: 0x14bc0381e2ada56e42a08f14,\n        },\n        r1a0: u384 {\n            limb0: 0x84b1b1e77e26467b905fa496,\n            limb1: 0x28fdfc19e13b0752aba34749,\n            limb2: 0xeee8045d6526734c1f95307d,\n            limb3: 0x1e4f12f75a3db50a60aa03e,\n        },\n        r1a1: u384 {\n            limb0: 0xcd8114dc6e6775890632c756,\n            limb1: 0x3c477ef68ef5ed0c85ca0a58,\n            limb2: 0x706f9cac1acb2b71feb8358,\n            limb3: 0xeded7ab6bb655672cde9835,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6016ea652473b7f107a77710,\n            limb1: 0xeb4242895460db86f361eac8,\n            limb2: 0x5fe77df899b1ff5607b38de2,\n            limb3: 0x10efb35680805c93c2bab2ca,\n        },\n        r0a1: u384 {\n            limb0: 0x9107262e5bb66980954e1a0f,\n            limb1: 0x57ab274a8a9565abc99387cb,\n            limb2: 0xbcd4f18d8a7e65b964541f5e,\n            limb3: 0xaf8d03faf1efb9183c00a2c,\n        },\n        r1a0: u384 {\n            limb0: 0x751a66b007c730df74908a8,\n            limb1: 0xf41cc4578874d56d020638c5,\n            limb2: 0x5230861fde86bb685b68c62f,\n            limb3: 0xb5d973cfd5090cd49182b06,\n        },\n        r1a1: u384 {\n            limb0: 0x283597c889dd32a98401459a,\n            limb1: 0xb44d0ac2827551860df4a510,\n            limb2: 0x399fc7f05e1000db1a41c1a4,\n            limb3: 0xe3944c673891658df0e2ba3,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x4396189ffbd89d01fe27fa5b,\n            limb1: 0xe81217db1696daa3753ccd84,\n            limb2: 0x55c6ad903c2a3e4b9f14a8da,\n            limb3: 0x15f5f0afe4eeb7545fb13eb0,\n        },\n        r0a1: u384 {\n            limb0: 0xd3da9931ffbf361f326b7282,\n            limb1: 0xc9d2464eda778b0051c1027e,\n            limb2: 0xb8f5f46e2bd5fc15d81b368a,\n            limb3: 0x1040f087e9a0b6633fa13692,\n        },\n        r1a0: u384 {\n            limb0: 0xf986f1a7ae6234649c858e8a,\n            limb1: 0x4644ba4e2b6b06ac11907477,\n            limb2: 0x95bcd96412c2b77c798589bf,\n            limb3: 0x122a0d20337a4865af008b55,\n        },\n        r1a1: u384 {\n            limb0: 0x201ad08d1e12f22740a2d61f,\n            limb1: 0x4ec7ca2abf73f04dd4d3c1cc,\n            limb2: 0xbe2da8c0b44af69f8c08bbe5,\n            limb3: 0x3bac9dd093b57980816b067,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa91fa22e8afc80abea221520,\n            limb1: 0x5bc71539a636bbf8ebbe74f6,\n            limb2: 0x2922894d551b50829ba322fc,\n            limb3: 0x14e8b48d18e449e691aaf792,\n        },\n        r0a1: u384 {\n            limb0: 0xd260160df53ab2df298a0d4c,\n            limb1: 0x854978d64707004860c8ebf6,\n            limb2: 0x20a4348de1a9dd2d5347eb55,\n            limb3: 0x243d4a3903c17c3cc51c2e8,\n        },\n        r1a0: u384 {\n            limb0: 0xcd7b87ec09c28073ba10e0d1,\n            limb1: 0xa5ab4f79373898318a3e146d,\n            limb2: 0xe648aeb5fef1cf65d3fbd74b,\n            limb3: 0x2fa5e6b46df2191aabe0bef,\n        },\n        r1a1: u384 {\n            limb0: 0x11b43fce26bc49795004ca02,\n            limb1: 0x437fe31017f62de97ffc3e35,\n            limb2: 0x97d41632c4cd7bb50f450ba6,\n            limb3: 0x9b7e59a28684bed532da137,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x4527a34a70ec377ccd63a5b2,\n            limb1: 0x351c7771105a0a1096dd87f0,\n            limb2: 0x57630dce3b4db45cbad696a6,\n            limb3: 0xf10733fed03fc5b7ae27fc4,\n        },\n        r0a1: u384 {\n            limb0: 0x53a208df401e3d6bf657857c,\n            limb1: 0x306991a8af53fac94e1e9b52,\n            limb2: 0x324634590aee6093dd239d9,\n            limb3: 0x855b8b1eedbf578f7498f37,\n        },\n        r1a0: u384 {\n            limb0: 0x71e5471ff515d0d4982815b6,\n            limb1: 0x9a63281835ec15935519deca,\n            limb2: 0x17a64faa9e7e4ab574a3f785,\n            limb3: 0x134b4a48f53fff9361e1952c,\n        },\n        r1a1: u384 {\n            limb0: 0x56dc56f73bd268799b824fa3,\n            limb1: 0x4180514d6004cf446a366719,\n            limb2: 0x193a82567b226e738b11a0af,\n            limb3: 0x1498d7e7ad2a68346f7d2199,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x81e4894bdfaf54d49cb0c4d8,\n            limb1: 0xeb9bf46cb3dcd89325b39d09,\n            limb2: 0x5a8e743db320615a5a0c40cd,\n            limb3: 0x1850f244c5272718a19a040d,\n        },\n        r0a1: u384 {\n            limb0: 0x857b482a44483bf0457331c7,\n            limb1: 0xa67cfb7a4ea236dcedf6137a,\n            limb2: 0x639d1a584ec879083798355d,\n            limb3: 0x14240af1c0466562ca4e24f5,\n        },\n        r1a0: u384 {\n            limb0: 0xb525edd6feb5970219a6995c,\n            limb1: 0xb1205b041c3e38e20d2fe204,\n            limb2: 0x8caed9ba4365ffbc1589b563,\n            limb3: 0xfdfce3b6d0c90f89ff5b6ff,\n        },\n        r1a1: u384 {\n            limb0: 0xf04c7ee058045bf0c52bcca9,\n            limb1: 0x25da9c7e03f90300aa977fed,\n            limb2: 0x5388457b2d4593b62df4c077,\n            limb3: 0x16cde52858fd178529b49d60,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6c92af226aa27e2cbe8fae21,\n            limb1: 0xbc299acce5e8da96b6b932d,\n            limb2: 0xec46a86181ef1ff2f8317201,\n            limb3: 0x17900cb270764782b3eca3d2,\n        },\n        r0a1: u384 {\n            limb0: 0x82358801a5440afa7826f03e,\n            limb1: 0xd09104615d27b1dba405157c,\n            limb2: 0xda33c37fe337917d32826e1b,\n            limb3: 0x1be7df7094ce56532653ce2,\n        },\n        r1a0: u384 {\n            limb0: 0xd33c9c433bdeabd28a276748,\n            limb1: 0x5dd445f6fe3bb3070cd0d395,\n            limb2: 0x8b092b49f4fdf2a38337a44c,\n            limb3: 0x4e047a80a74764555b1ea3d,\n        },\n        r1a1: u384 {\n            limb0: 0xd83bc84b011c607d97684972,\n            limb1: 0x2b14aae22370badd22ec77ba,\n            limb2: 0xd29b9c7b77c3f08055bb8a9,\n            limb3: 0x125b416bddff21db8d6f42ed,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1f7265a2588028a739940ca5,\n            limb1: 0x1e3d7315d69b4f1540ef139b,\n            limb2: 0xa239c997bf8c622c1716408,\n            limb3: 0xd9744d0ac86db4218e7e96d,\n        },\n        r0a1: u384 {\n            limb0: 0x90541dda73208a1d1eda111e,\n            limb1: 0xd5a4dd2c69e927e6a84d8487,\n            limb2: 0xbba86a67c752a3ce780b84ff,\n            limb3: 0x9a35294d76f0d15a59ad03e,\n        },\n        r1a0: u384 {\n            limb0: 0xaeae8c21bae747ea58e4eb2b,\n            limb1: 0x22bee27e94b3df2f9e30496a,\n            limb2: 0x3c490f390a6a3762549bdbf9,\n            limb3: 0x1777cd7c3048d009f9f72bea,\n        },\n        r1a1: u384 {\n            limb0: 0xec21f8b948e62cded22a7d58,\n            limb1: 0xb8041010b7270992a963f6df,\n            limb2: 0xbddd05cca8941058f062d094,\n            limb3: 0x10ad979954bdd8983ce4dfc2,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6cf96397e7b79f2fc8c8275d,\n            limb1: 0xfc7cd3706f331af3de61fabf,\n            limb2: 0x78630a1ca624fae6d5770503,\n            limb3: 0x15ed1256df8e5e5ca95b56c8,\n        },\n        r0a1: u384 {\n            limb0: 0xee76aa06cc2a711c9ed0f30e,\n            limb1: 0xffa3eb442aaeb1342a8a3887,\n            limb2: 0xcd5194bd83d804f9da8e5cda,\n            limb3: 0xf5886abb33616f07cfac605,\n        },\n        r1a0: u384 {\n            limb0: 0x3e0ff1e7d1f926d905c0e89f,\n            limb1: 0x3fff1943b59d697a741845cd,\n            limb2: 0x4e362d7df69aa3269ea5a418,\n            limb3: 0x13a520fad90f72497a67b697,\n        },\n        r1a1: u384 {\n            limb0: 0xce7bf1da23ccce53d8e13b8,\n            limb1: 0x56957fccf1163143404a68dd,\n            limb2: 0xd26ebbc9548a9897d0383b14,\n            limb3: 0x329392268b1afdd087dd27b,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8f61e98d8c6cfb102fc12599,\n            limb1: 0x3b581910d31b036fd00d6cd,\n            limb2: 0x960c67926f53a7c4400c36fe,\n            limb3: 0x1437622871bdaa8aa8f1620b,\n        },\n        r0a1: u384 {\n            limb0: 0xc06e7440dac5dc6345811f4c,\n            limb1: 0xcfdd60e51cc453252af4fcc6,\n            limb2: 0x756f2c0839d3582469c0b8c6,\n            limb3: 0x12d66e992019751bc4b8c1bb,\n        },\n        r1a0: u384 {\n            limb0: 0xb0f08516779af407c735061a,\n            limb1: 0xaf9b916f38282785c75beb83,\n            limb2: 0xb386d3a1dd1445469d29c602,\n            limb3: 0x24dbe829c015491a29896d1,\n        },\n        r1a1: u384 {\n            limb0: 0xac0f9105a6d03cc8551b7c70,\n            limb1: 0x4f4b9b10e54191aae0271be0,\n            limb2: 0x6bd62b1dce1efa964448250a,\n            limb3: 0x121963e40701951c40d3ccd2,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x765ce308dd13ea9ec917f81d,\n            limb1: 0x4c2cdefe8611811647fac337,\n            limb2: 0x9e01fde22386755f816c125f,\n            limb3: 0x249a870907df1494e56fc21,\n        },\n        r0a1: u384 {\n            limb0: 0xc3cd52b28123518842661348,\n            limb1: 0x6678659f6f9ca9e64f594e30,\n            limb2: 0xbdde01f23d77cc2219a64e1,\n            limb3: 0xa59546d0d9d0d18614e9879,\n        },\n        r1a0: u384 {\n            limb0: 0x7e7be141202ac55eb1d4a8b8,\n            limb1: 0x22ee295a285099a1bdc85200,\n            limb2: 0x7d274b729c40bb351c2bdd3c,\n            limb3: 0x105edf80625508ee7473afc3,\n        },\n        r1a1: u384 {\n            limb0: 0x8d19d95e92eb2f4d361b91e,\n            limb1: 0xf6cc461a1b4bd0202cc3590b,\n            limb2: 0x87ebac45146065b2dc8d4bde,\n            limb3: 0x1375f5a114849a9f8e0c3d37,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf3f6022a346335909994d26b,\n            limb1: 0xa2e674d9be45c130702c8393,\n            limb2: 0xda934834c7f1f4550986c5,\n            limb3: 0x17170963f6200ba02d7f36db,\n        },\n        r0a1: u384 {\n            limb0: 0xc6bd88f8f5883c00bacb7319,\n            limb1: 0x2865832a25d7695c70d60852,\n            limb2: 0xd63579f3b9eb855ce78f80e0,\n            limb3: 0x16f67362c8cbffc3e300d83b,\n        },\n        r1a0: u384 {\n            limb0: 0xd5bef1e76085837868d52daa,\n            limb1: 0xe17818fa8f87a1a29495c6f0,\n            limb2: 0x33702bc5001cd8e3bab9709c,\n            limb3: 0x3ee9300c2e7d74b5e5774d,\n        },\n        r1a1: u384 {\n            limb0: 0x79515359f6e9ac46c2da8b44,\n            limb1: 0x8b1d7830cfb661bc910fe5b5,\n            limb2: 0xa6f740bc62a497d501d49790,\n            limb3: 0x106645c420742d2fc191def9,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x58f86bbd730aa1df76e95257,\n            limb1: 0x3832640fbf5ff16fd5c86613,\n            limb2: 0xaf56bfc4d589fd5479b90e9a,\n            limb3: 0x3ca74026cf32fba56ec4ff,\n        },\n        r0a1: u384 {\n            limb0: 0x577775e0ba37cd47da598900,\n            limb1: 0xf402fb94e1c54fc0073a49b0,\n            limb2: 0x2e06dce324741a7e96cd8fcc,\n            limb3: 0x16f491b5bd383da7e70c001,\n        },\n        r1a0: u384 {\n            limb0: 0xf906737c542dde2e8b5d7bf7,\n            limb1: 0x93d207424c8f01f866d09071,\n            limb2: 0x7a8dc05cf5ae45304b21d8d,\n            limb3: 0x1d432a9b400dc09515479f5,\n        },\n        r1a1: u384 {\n            limb0: 0x533a88fd57c73a7a668d47a8,\n            limb1: 0x11cd23f02ff6e7610e1522a9,\n            limb2: 0xbb9e0293df841db5d616e680,\n            limb3: 0x19f2811473fbfa9dddb16249,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb84433d5bb94067c8083df37,\n            limb1: 0x4a1c6dead6b06daaef49a331,\n            limb2: 0xf045631520d7fcf91cd6d5bc,\n            limb3: 0x171679be9cc2fb7fca2ffb4b,\n        },\n        r0a1: u384 {\n            limb0: 0xbff0ab7bce5a89764c470c2b,\n            limb1: 0x7c275c7485dd37e467e28e07,\n            limb2: 0x976153708a70bd4353e49415,\n            limb3: 0x137b63810a42885e3d12973a,\n        },\n        r1a0: u384 {\n            limb0: 0x33aaf9966841141dd4aeed0,\n            limb1: 0xe937c580cfbd8a3936590a47,\n            limb2: 0x7e2948f3ac9443871d29a3b0,\n            limb3: 0x17ae57245137f902685ea5f,\n        },\n        r1a1: u384 {\n            limb0: 0xae14ce204d876228a369b45,\n            limb1: 0x6e8aa97e94af3b53715ed047,\n            limb2: 0x346c278c809a30daf1d01b7,\n            limb3: 0x22e054e6e6d8bf998a85e43,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x453bf5d35812bbf0123c972a,\n            limb1: 0x3a9bcdec2fe60921bf629abd,\n            limb2: 0x8d4d0d00c4d2739ae3a0b176,\n            limb3: 0x9a76bae205af60fb63330d3,\n        },\n        r0a1: u384 {\n            limb0: 0xa5e2fc320bd337a5e6bf6e59,\n            limb1: 0x649bf53444907381a7d0f976,\n            limb2: 0x57cfc1f1da9301aff5ef309c,\n            limb3: 0x79042a88c84c694ffd3fa12,\n        },\n        r1a0: u384 {\n            limb0: 0x8149e3cbfdcb7c4749e0ba73,\n            limb1: 0x72f87f4ff2d25e09a5eae7db,\n            limb2: 0x1d01fadf84a7202ce4489428,\n            limb3: 0x15652f54b134df28e3b93c7,\n        },\n        r1a1: u384 {\n            limb0: 0xa1b43fd866b4d217c50e744a,\n            limb1: 0xce197f05b592d754e8f84093,\n            limb2: 0xbc7dc9245b7e2113d675abe4,\n            limb3: 0x2f8afc77fac6bc37b0c7667,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5f799d84974b34b214204be7,\n            limb1: 0x7e577069bef682a54f78cc32,\n            limb2: 0x43803af2b35c7987d12eac96,\n            limb3: 0x3570c7ba557421c82cfaa6c,\n        },\n        r0a1: u384 {\n            limb0: 0x2aa9d33a1acddb979d7c2d2f,\n            limb1: 0x2bb926928f20a965a10a6d22,\n            limb2: 0x1d650b759bafd7750c78aa91,\n            limb3: 0xac21b07f22d3d31ceef607b,\n        },\n        r1a0: u384 {\n            limb0: 0xa188a2df22f2cac6ae25fcff,\n            limb1: 0x15f7af3ae3fe3ab80fcbf44b,\n            limb2: 0x3cc65299b3a990d0b8f2dc21,\n            limb3: 0x720671ab41e616ac46a4d4,\n        },\n        r1a1: u384 {\n            limb0: 0x8d5ce83450ecd58d21821d04,\n            limb1: 0x600fb56fcdc4198005433d16,\n            limb2: 0x60f583b87d52b7e7eae71b15,\n            limb3: 0xfb05f7038ebbb06ca53b3fd,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa36890bfc74afe64e9f3840c,\n            limb1: 0x8eeaf2f380047dfe3a21b11b,\n            limb2: 0xeb84e8fad6b7625c837aa272,\n            limb3: 0x135ff64b4d73a3a2d0f886b2,\n        },\n        r0a1: u384 {\n            limb0: 0x6fa3e40ac2853a97b01176dd,\n            limb1: 0xcd16a519987e4aabf6bd8d1,\n            limb2: 0xe4ee3c4f4c650fbfe5a0a370,\n            limb3: 0xcc7efdc19164223dbcb0b43,\n        },\n        r1a0: u384 {\n            limb0: 0x9ed5597f7236b21674d039f4,\n            limb1: 0x5cce2f4074bfb9593d07dcab,\n            limb2: 0x1467dedd98c377f9f9b46e75,\n            limb3: 0x89f8ba7d879e18afda115ac,\n        },\n        r1a1: u384 {\n            limb0: 0xce1eb5fb3e129849b7af9b61,\n            limb1: 0xbb388e5edcc82d67d7e505d1,\n            limb2: 0x37f0c598b86ce85a7ccc5e90,\n            limb3: 0xf3dfe35088599f2eeb97849,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb1dad5dc4b347aa8cdea64f6,\n            limb1: 0xcc2058c63fba33421acef87,\n            limb2: 0x6671bbd574e8f23a8c33a473,\n            limb3: 0x173c0d3a77be26a04dc370a,\n        },\n        r0a1: u384 {\n            limb0: 0x89c7ef66c7e6d4c7a5f1ee7b,\n            limb1: 0xfa29a5dde6a8d29efb1b12b3,\n            limb2: 0xc0f4a5b6342df0adc3da765b,\n            limb3: 0x154e74a84c92a5ff794fca30,\n        },\n        r1a0: u384 {\n            limb0: 0x3baf5745ddfc03d1be36473,\n            limb1: 0x41fbbc02d24948d8a3c0efa1,\n            limb2: 0xeba542193a176f39572880b7,\n            limb3: 0xba18efa42d34eea1333f2cd,\n        },\n        r1a1: u384 {\n            limb0: 0x77fee73ea8d2cae877fc09bc,\n            limb1: 0x4b28c7e9ba63b4a2a16dc3e3,\n            limb2: 0x5ef0ade97bcf1bbd542b74c2,\n            limb3: 0x60c323e8930e93d6a8a8b53,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb9289920fc29c178a0728467,\n            limb1: 0xf35e17ec8a43244f4e0efb63,\n            limb2: 0xa46135ade487bf1a95a36590,\n            limb3: 0x4597ae1f4cfcdaacff3f6,\n        },\n        r0a1: u384 {\n            limb0: 0xe926fdfcdb55d8651b029bb7,\n            limb1: 0x741390b7035f30b98e2dcd27,\n            limb2: 0x697fa3901ef0c0d6f4f0693b,\n            limb3: 0xcc420802c358e2dedfc71d4,\n        },\n        r1a0: u384 {\n            limb0: 0x404a03b34791ba0f3fa9761,\n            limb1: 0x50d30e7876bb541f3ef689f6,\n            limb2: 0x7eca4b1c1a04fdc1c58f3065,\n            limb3: 0xa9e0b8c0194468d35c05fbd,\n        },\n        r1a1: u384 {\n            limb0: 0xb370e739ea46b6699276bb50,\n            limb1: 0x39805df77c609ca4cb80f044,\n            limb2: 0x1f93a5fc91ea7ec7048f46d8,\n            limb3: 0x109841b0d6d23c644d831b58,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x696c2443a8baa527eef5ec6e,\n            limb1: 0x7c385a900f4614f62a38d2e7,\n            limb2: 0xecef959f527ae42bb1b2a0ed,\n            limb3: 0x7fac72373dec09eeaf6db37,\n        },\n        r0a1: u384 {\n            limb0: 0xc84aa165d81984cbd1d40498,\n            limb1: 0x7ef2f6d8a1b0b82a86a8aea1,\n            limb2: 0x9f04cb828903af563a7ce955,\n            limb3: 0x1260f88b57dddd5bf01540db,\n        },\n        r1a0: u384 {\n            limb0: 0x7d666c3a74212ecb676ee24e,\n            limb1: 0x8ddff061953f45de2460c7ee,\n            limb2: 0xb69a343af7532ec4af3c8894,\n            limb3: 0x213c5dddce502302ac58fec,\n        },\n        r1a1: u384 {\n            limb0: 0x9b68c470206e0a6b23d993d7,\n            limb1: 0x8e64f45ab3906177fca690b,\n            limb2: 0x6b3ba9665c9e8cdb62669c9b,\n            limb3: 0x4535c1e41f9fe732b7c4780,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x47796752c668f86cda3eea09,\n            limb1: 0xabe85392bfe45c509b21188a,\n            limb2: 0x17747fdbb10299befbd5f562,\n            limb3: 0x10f206ff106da3cd9621d6a7,\n        },\n        r0a1: u384 {\n            limb0: 0x19e850771140dd110fd5f601,\n            limb1: 0x49e65a215ab2cb29f8e19340,\n            limb2: 0x7c583039a8252df0d94325d4,\n            limb3: 0xfdd46f3792b92d70b7938c8,\n        },\n        r1a0: u384 {\n            limb0: 0x2973fb308f21f4591c6768bc,\n            limb1: 0x7c10b3f79cbbfc0069738f2c,\n            limb2: 0x227581522b2559c9557982fc,\n            limb3: 0x146f0ce0cb299800bb8186ed,\n        },\n        r1a1: u384 {\n            limb0: 0x7e45c08de7497185100c82e7,\n            limb1: 0xf873456c3b1257743a548919,\n            limb2: 0x4e414c1420aa0674960bf9f,\n            limb3: 0x12b9b73bea8424ee57b2038,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf52c3a9e1924d9731f45159d,\n            limb1: 0xb552aaa0c17ebf07b9461b81,\n            limb2: 0x9e0e2d36095165665a56c844,\n            limb3: 0xdc948cfb597299725a35f46,\n        },\n        r0a1: u384 {\n            limb0: 0x37804446f6495b7f0eb8afe,\n            limb1: 0x8290cde2fc690a09b1e27c3a,\n            limb2: 0xac5737e20aed8460e392261b,\n            limb3: 0xcffa82f91cfb6f276a79a6,\n        },\n        r1a0: u384 {\n            limb0: 0x13dd968a1b3c381b4b53e494,\n            limb1: 0x231f8610c0c788da31f6a767,\n            limb2: 0x1d90cef9842373ab0ed2113f,\n            limb3: 0xab763befb660bb27aeefea1,\n        },\n        r1a1: u384 {\n            limb0: 0xfb0924f8b0c0076931026ead,\n            limb1: 0xc2303d081337f2117f9edd47,\n            limb2: 0xbb530c1bf25042e905ef49b5,\n            limb3: 0x13cf2176e8c30a76d82031ff,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x14e4f467f4709129c1d6d6d7,\n            limb1: 0x33e67ed9f2b5e1802523571,\n            limb2: 0x3e76ea8acb143c96671cbc65,\n            limb3: 0x1137f470c8f7d00baa56e5c0,\n        },\n        r0a1: u384 {\n            limb0: 0xa2a95cfa92d0088ab1308e85,\n            limb1: 0x85a5304db0b3422f71d7ac93,\n            limb2: 0xbc8572953d8f42a55fe99700,\n            limb3: 0xf23701cea5719c6d8b0d3f3,\n        },\n        r1a0: u384 {\n            limb0: 0x380e418e3c32756e123587f9,\n            limb1: 0x8a39d6b5872d774c57af0ba1,\n            limb2: 0x11473256ad05f9eaac305647,\n            limb3: 0xa642f0b83f002f2b82a1d3f,\n        },\n        r1a1: u384 {\n            limb0: 0xd5b5c903360b3614bde608b6,\n            limb1: 0x407e2bf83df10c320c4ddafa,\n            limb2: 0x3771cad615e4d7b5de69e962,\n            limb3: 0x105334af5850345d42c10c17,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xcdb8e16f1b850432af115daf,\n            limb1: 0x494ac8b75720d50e9d866f3a,\n            limb2: 0xda7586ede3b806d6a6384fd,\n            limb3: 0xb859f60d04e4ff66fdfc85f,\n        },\n        r0a1: u384 {\n            limb0: 0xe11de01127cbc1a326afb2b9,\n            limb1: 0x6eebbbb38d51a71d3170ccd7,\n            limb2: 0xd5cd24d22fecda4fe96bae46,\n            limb3: 0x101e2ac25b02edda9728dcd0,\n        },\n        r1a0: u384 {\n            limb0: 0x71b27a86fd074f148f733377,\n            limb1: 0x6ec32a4c65f5682adf1bb4da,\n            limb2: 0xe8a268ef501888b89065c8ef,\n            limb3: 0x12f6fae4a11b2f7bae3b371a,\n        },\n        r1a1: u384 {\n            limb0: 0x925f04ea98dc22979ea69c0c,\n            limb1: 0x7778ab2882af9fc10adda60f,\n            limb2: 0x31b791ebfc10de4e0843db89,\n            limb3: 0x1884eaeeb4127c15465bd473,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xe8ab375f9e79671f77c33b38,\n            limb1: 0x32c9317a9c538a1808d10350,\n            limb2: 0x39b7c7695d2524211d5341f3,\n            limb3: 0x373d7203575fda92e7b4b02,\n        },\n        r0a1: u384 {\n            limb0: 0x54a74ef22bb2c45a0f0992be,\n            limb1: 0xe9d5746328bce07da2a04f41,\n            limb2: 0xf657d148ed56fbf731787b28,\n            limb3: 0x7b03ee28e327f04166f5075,\n        },\n        r1a0: u384 {\n            limb0: 0x754ae620f48dd7de6afcbb5b,\n            limb1: 0x488b7b5de47bfe76c7d7f1ce,\n            limb2: 0x5a2e05b269b38310ba8b4159,\n            limb3: 0x41965ba496910c39d2c8167,\n        },\n        r1a1: u384 {\n            limb0: 0xe544c97bb363e3619c50c630,\n            limb1: 0x7fec53ec738123389016bbf,\n            limb2: 0xb12f6ffb0998373cb04be875,\n            limb3: 0x4bf5cef5067781b9809ec64,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xee52fdd902c0488821edf979,\n            limb1: 0x895d9ff17f5d04d1515dbb15,\n            limb2: 0xda20231af600be908c9165c9,\n            limb3: 0xa88fa0e247a85049196ed0e,\n        },\n        r0a1: u384 {\n            limb0: 0x1014f46d465b15781593a14d,\n            limb1: 0xfde315a447ebeb1e31f0c737,\n            limb2: 0xc264e73bcfcf21a95860cb90,\n            limb3: 0xa404fe10b300ee8062a4278,\n        },\n        r1a0: u384 {\n            limb0: 0xde6e165032d17e0a1dd355b,\n            limb1: 0x9ece35a48b0dac3133bcb2ed,\n            limb2: 0x1dd3ea819651f9fffd805b91,\n            limb3: 0x2c3ab75a45f0062b01b25b5,\n        },\n        r1a1: u384 {\n            limb0: 0x1d435750c14e60fcffc44b18,\n            limb1: 0x781f841326b5c6cd532ff483,\n            limb2: 0x5bdc193e27d8e3050ed4a070,\n            limb3: 0x5865e1a9f5de7c0a57062e0,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x4d2b6e4cdcfd83a0692003b0,\n            limb1: 0x41629374ff0d1ac17362c794,\n            limb2: 0x18b16faf0521c1c5a11c3523,\n            limb3: 0x18b70eb629a79ff3f9834985,\n        },\n        r0a1: u384 {\n            limb0: 0xf6dd615a649c30b33d8b88ac,\n            limb1: 0x526f609b923d7ba3b37b63c,\n            limb2: 0x4289133e7279c670978cd569,\n            limb3: 0x11fa0abe9f21dc673b14d917,\n        },\n        r1a0: u384 {\n            limb0: 0x7f14d726cf9a27a8c970bb68,\n            limb1: 0xe380e6b07cde1eb0fffd95e6,\n            limb2: 0x2c5722bd0e114b506bddd89a,\n            limb3: 0xd3fb948d9f8e2c898c1b3c,\n        },\n        r1a1: u384 {\n            limb0: 0x86aed9389c52f71bde01a5e0,\n            limb1: 0x4c6baca3b4494d3a4a88343a,\n            limb2: 0xe1083c4faf04588a29999bbc,\n            limb3: 0xcddd31531e910375fb212ff,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x203fe85e2836c465e4db22af,\n            limb1: 0xe308a1ed6dee139d030e8922,\n            limb2: 0xc7908b59711d8544aa16934d,\n            limb3: 0xf2b561c5d125edf292a426b,\n        },\n        r0a1: u384 {\n            limb0: 0xdb11824ffa56d8b1596236ef,\n            limb1: 0x2dba53ae227809d06646c213,\n            limb2: 0xeb2f93a64e027c5e4973d8ae,\n            limb3: 0x70e748d64796b96d4704120,\n        },\n        r1a0: u384 {\n            limb0: 0x651d82f84f2464b4da2dfaa5,\n            limb1: 0x122eee1f6190b4da0deaaec,\n            limb2: 0xa3f6869c83d36b0ad97eb0d3,\n            limb3: 0xc58ccf6806e87f189fcbb0a,\n        },\n        r1a1: u384 {\n            limb0: 0x648157de5d81daa67c476971,\n            limb1: 0x2845a24d3190c4fecbde2fa4,\n            limb2: 0x72f924eac3a8d2c228a8b082,\n            limb3: 0x13673079ebcf601a5d5fae92,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x2d6310ed50636162786d1b75,\n            limb1: 0x5cac54906e73bae3b4359998,\n            limb2: 0xbd428c9c44f9a83980265ddd,\n            limb3: 0x2fc21e36ad4d0da0a00add9,\n        },\n        r0a1: u384 {\n            limb0: 0x80e8a4f63bb295c1f909c9f8,\n            limb1: 0x76045a0b6f715c18ef69c37a,\n            limb2: 0x8e2d6c8495568d22744ab3f3,\n            limb3: 0x2b70c4ecc512e5b7a263f20,\n        },\n        r1a0: u384 {\n            limb0: 0x74f73dffd0f8db5344a575d1,\n            limb1: 0x8e6d3150c6b50fb0f30b8d42,\n            limb2: 0x1caf7885c868849e8e700707,\n            limb3: 0x130fa43ef7b10a6b7c72a4af,\n        },\n        r1a1: u384 {\n            limb0: 0x1cd953b2a94a0b0460118689,\n            limb1: 0x5c361d5ff78164edfe007331,\n            limb2: 0x61315250d28c9b99d174dab6,\n            limb3: 0x252277581829378760d4033,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf48b3d5c545dde843e9509d9,\n            limb1: 0xec087b6dc32d167683bbc860,\n            limb2: 0xecfa5e40ea40c9452bcaf0c9,\n            limb3: 0x1040fd02b48b11b85d471c89,\n        },\n        r0a1: u384 {\n            limb0: 0x4fcc4443458e23010506f346,\n            limb1: 0x6c4848e26b5d994f5bc3e72e,\n            limb2: 0xfe88288f9e882ff4e9a375b9,\n            limb3: 0x164597b0f78ad70a7b4bc1be,\n        },\n        r1a0: u384 {\n            limb0: 0x755828105bc1eba4198f7dd7,\n            limb1: 0x6eae5a58a81935ddf455bd6,\n            limb2: 0x6240aac72233651a6dfb3db5,\n            limb3: 0xb4497d73d44dff355f96fc3,\n        },\n        r1a1: u384 {\n            limb0: 0xe9e516384450aed995eae178,\n            limb1: 0xb13053f758b857a1479bef06,\n            limb2: 0xb18ba337770920df12a72642,\n            limb3: 0x121a732dec2700ebe307b235,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf313b674fee5c83040549617,\n            limb1: 0x864b49b4b96dc11dcb31a6b2,\n            limb2: 0x7afa88358fa085d4db1d9e6f,\n            limb3: 0x10b916005fc2476498beed41,\n        },\n        r0a1: u384 {\n            limb0: 0xa5f1bacd2bc2f38d4e1a34d,\n            limb1: 0x45d1d4d76b0b03b8d7da125b,\n            limb2: 0x74a0ba0ae49290dd243bdc61,\n            limb3: 0x185827ff9e3c833ac46e1e16,\n        },\n        r1a0: u384 {\n            limb0: 0xffae650825626bdffd8ed424,\n            limb1: 0x126a57866536ac1d0b34b17b,\n            limb2: 0x517ba3e3b50188d25dc23dc8,\n            limb3: 0x1276dc74f1b2a7173802ff0f,\n        },\n        r1a1: u384 {\n            limb0: 0xa73951cadbaab9fe957c0fed,\n            limb1: 0xa232a5178de78c8f681635e5,\n            limb2: 0x30adf5deb8ee4da1fcc053b2,\n            limb3: 0xd840dfc0aae66492a176a2e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xbec850cf3cae0ae894430855,\n            limb1: 0x471169ffbfc02b7ee8b53c48,\n            limb2: 0xf24c8150520d1054b6fc8530,\n            limb3: 0x2627371854bd7fa799b809f,\n        },\n        r0a1: u384 {\n            limb0: 0xbdc8b09d11fbd315b7aa7980,\n            limb1: 0x2f2fcf7338f1747f606b3a25,\n            limb2: 0x27fb2eb96b07297a58fabfe6,\n            limb3: 0x111b90bded70421c6543f89a,\n        },\n        r1a0: u384 {\n            limb0: 0xfdb1c553460611b281b896a7,\n            limb1: 0x9e417f1af210f3a016ad9c83,\n            limb2: 0x5908b9614188572d05b39a67,\n            limb3: 0x16f5fc4c7d6ca25189a5da6,\n        },\n        r1a1: u384 {\n            limb0: 0xf515c6bd1b302886cb3cb5fb,\n            limb1: 0x6357aa94ce3eecae26fc87a3,\n            limb2: 0x66f86efa4a89422f8fa42672,\n            limb3: 0x131a1613cd2ea3831b5cdcfe,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x3ce32e18da41a2016fbf41b1,\n            limb1: 0xda3e0d01e0bbb52a301585cf,\n            limb2: 0xaf508b2248a1fe6ffc5d18d0,\n            limb3: 0x1274aa625858db0bb675b3bf,\n        },\n        r0a1: u384 {\n            limb0: 0x4cbc0be362614fff6f6d4898,\n            limb1: 0xdf8603dfa938bc22d0aa98e,\n            limb2: 0xaf3784151a3a1a7585c177cf,\n            limb3: 0xcd9b76612194b440cbd9c67,\n        },\n        r1a0: u384 {\n            limb0: 0x93de5b0d4ce155335ed8a6ff,\n            limb1: 0x9dc6c21cddb15edd7f401cc4,\n            limb2: 0x2601d5b08d144c3608181a8f,\n            limb3: 0x872d334a6e81b6937f7580f,\n        },\n        r1a1: u384 {\n            limb0: 0xa90ea56305b0b457ffd7dfd9,\n            limb1: 0x3fd7486324393fe073a67746,\n            limb2: 0x22aaac8be67217e0e49366ff,\n            limb3: 0xdc78f4f3c40b0984ec316e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x32410e4bdcd6030081ee0117,\n            limb1: 0x9711111255797439f6866cb6,\n            limb2: 0x8a1650034dda2434eadb9c77,\n            limb3: 0x13f6a882a25deeaef4bbe62d,\n        },\n        r0a1: u384 {\n            limb0: 0xcc47fc627ad939824b8320f1,\n            limb1: 0x3f1cb2532c6db9d1abc737e4,\n            limb2: 0x4883356c3277f2df6283a2ab,\n            limb3: 0x11e02397acfe9612a98a14f9,\n        },\n        r1a0: u384 {\n            limb0: 0x1588bd50c2f4f5c5ebbe62bd,\n            limb1: 0x87a259e41ba48ccad1a07c48,\n            limb2: 0xb22b4f666071523b8a172736,\n            limb3: 0x96f9baf300ca7342721fd8e,\n        },\n        r1a1: u384 {\n            limb0: 0xf0c2d5fba2f156c3f26673ef,\n            limb1: 0x71558132bb663713ad20817f,\n            limb2: 0xb07619c97cbceccc4c0fb256,\n            limb3: 0x13ed85faec0618c507d395a1,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x35a50965750c7716c237772d,\n            limb1: 0xe96b0c22d39fbbbe7f55d6bc,\n            limb2: 0x40864a9ec51fc3fceddf7498,\n            limb3: 0x232f7c41bf2d0ca9a4a6560,\n        },\n        r0a1: u384 {\n            limb0: 0xebd5d6880bc93e525c5283bd,\n            limb1: 0x911e6efcf7cc8f0983f3a122,\n            limb2: 0xeb2d53ffa24eaa0527809305,\n            limb3: 0x126b7366a9ba4cdc1648b905,\n        },\n        r1a0: u384 {\n            limb0: 0xd7789f5359bb3bd4b674719b,\n            limb1: 0xecaa3bff242dc5a63ed57279,\n            limb2: 0x85e8faaf82c119cc47bdfe4d,\n            limb3: 0x1042198c5b912b48953f03ee,\n        },\n        r1a1: u384 {\n            limb0: 0x52c926fe4d73775c8dcc54b9,\n            limb1: 0x56410c723b730b245d2639ae,\n            limb2: 0xe6b9bc3d2b2a15155d82e48f,\n            limb3: 0x11772d7a9fa0b3530a88bfa,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x62a31df1dfbbec432d547277,\n            limb1: 0xafbad67ab615bf2d350b1688,\n            limb2: 0x1f5843187c62f057fcb3c202,\n            limb3: 0x2cd9ff07b37d472a54a7189,\n        },\n        r0a1: u384 {\n            limb0: 0xfd689866343571218470d805,\n            limb1: 0x94b9219861e6e367cfd9d27b,\n            limb2: 0x5937c015c497d2c235302c66,\n            limb3: 0xfdf7276579ca6fa0076c8a9,\n        },\n        r1a0: u384 {\n            limb0: 0xcc39c0acfde5d2338853dbb6,\n            limb1: 0x4d33a9fe71565a4342df96fd,\n            limb2: 0xf1c085869a954cb4994a6d7a,\n            limb3: 0x993491756f5c241452a5dd8,\n        },\n        r1a1: u384 {\n            limb0: 0x59049f9dae7a7044e79531ad,\n            limb1: 0x1b01d078a53d321ef18d7b49,\n            limb2: 0x81acaa38fb3196010e594ce1,\n            limb3: 0x12c347a131f6b1191d4b563f,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x90b1d3aaedd7ae3ae5ef62ec,\n            limb1: 0x9c2237332a12d63f617991e0,\n            limb2: 0x88f758a89df448c1dd45282d,\n            limb3: 0x3c52126f27d2dd758ab0770,\n        },\n        r0a1: u384 {\n            limb0: 0x8bf85f2a28b11ffbcc48f29d,\n            limb1: 0xb79fc38b4398e2af5a4ac3f4,\n            limb2: 0x877b0d7e053d12f91fa49c91,\n            limb3: 0x19ee364564c01cbdf0bd4257,\n        },\n        r1a0: u384 {\n            limb0: 0xfbe824718174525ae3cbf681,\n            limb1: 0xb434f93ab3f012e5c5fab625,\n            limb2: 0xfaaa0bb2878017e90fb07ac6,\n            limb3: 0x616944a1484a78b2946360a,\n        },\n        r1a1: u384 {\n            limb0: 0x84c489abf936bfadd293c732,\n            limb1: 0xaa7ca8e76a07f14d2a712245,\n            limb2: 0xef338c44111cd8f2538f16e0,\n            limb3: 0x2f06c9cef716ae3e32a1bd1,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa31fe2909d2e70ef0eed8a97,\n            limb1: 0x7cd66cae105a1a65a0469bb5,\n            limb2: 0x57c0d04a99e4fdd24818d48d,\n            limb3: 0xf143a86d061937bfc43197a,\n        },\n        r0a1: u384 {\n            limb0: 0xef3417fc2e604cb1afd28f22,\n            limb1: 0xc03449a2171f0466673fe015,\n            limb2: 0xb9e650989501677fe2bf4b6c,\n            limb3: 0x1a45a939634b50313d5b551,\n        },\n        r1a0: u384 {\n            limb0: 0xc7a854c7a9f5c64683ace9b0,\n            limb1: 0xc0d2319347b83f932d66c058,\n            limb2: 0x7a12cc7266442611728385d8,\n            limb3: 0xfc3c7544bdb8ce9030892a9,\n        },\n        r1a1: u384 {\n            limb0: 0x9adf18823ca540f0e6bf7f36,\n            limb1: 0xa5a5ea82ecc4affdc735afce,\n            limb2: 0x84c176ba131be177ad7d141b,\n            limb3: 0xbb932dd6da950ed35007f86,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x49369971c3fc33245bb7b9cb,\n            limb1: 0xce9896e5addb637375420be1,\n            limb2: 0x7d4c97a8e9d64c41cf2dffa1,\n            limb3: 0x287b1e39767a3c2d102a825,\n        },\n        r0a1: u384 {\n            limb0: 0x6f6e6c10c2da68b535025ac5,\n            limb1: 0x9b6128f5e000427659557e1,\n            limb2: 0xba4e1537236425a49e10a76b,\n            limb3: 0xdccc3a8b263abdc2c1112a2,\n        },\n        r1a0: u384 {\n            limb0: 0xf0f26fb9d99f34211c52ec21,\n            limb1: 0xb091a74cf88bb5563ee29bd1,\n            limb2: 0xb1a3c0e6479e60ec2bf5e312,\n            limb3: 0x6ea612bf02bd6df77f7af9a,\n        },\n        r1a1: u384 {\n            limb0: 0x773745b51d209d3643ac70f3,\n            limb1: 0xb837418d0188d5d41911d38c,\n            limb2: 0xae750841ca68ec61dd2fac9a,\n            limb3: 0x9b4aec971d45aee69870aa6,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x34fc38759fef61effd88d5eb,\n            limb1: 0x145b73bdd49f8b9841131ec5,\n            limb2: 0x5b032e13495cad2de8fc511d,\n            limb3: 0x14a5c34da7fefd80bfd917bf,\n        },\n        r0a1: u384 {\n            limb0: 0x7289910ae15b593b5d0fe9ef,\n            limb1: 0x321eb1200e5c9d49765ad730,\n            limb2: 0x7fbf84b5e04d1a87072209ff,\n            limb3: 0x120c78a1a8543136a69d721f,\n        },\n        r1a0: u384 {\n            limb0: 0x7b91d266ea9310fa2b902bf3,\n            limb1: 0xc3c6f100aa36d1105c43d928,\n            limb2: 0xcd92532364b0794355ab6fc5,\n            limb3: 0x3e83fd62b6b3aecc9dee3cb,\n        },\n        r1a1: u384 {\n            limb0: 0xdbfa72bf64242d0e4130bab1,\n            limb1: 0xbba2b4aa87acd80bda65c1ff,\n            limb2: 0x53c0d1281064d6d42f3ca6e5,\n            limb3: 0x7538323c443e424ba2139a2,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9658e94dff575b044fd12535,\n            limb1: 0x9e633711f24267eeff96b84c,\n            limb2: 0xd09be055097f3f4285b74b29,\n            limb3: 0xeba32ca0fdf04b16e700d02,\n        },\n        r0a1: u384 {\n            limb0: 0xdac31a776bf2f2a7eb8d07b1,\n            limb1: 0x99ff3b68fe53867aeee330e,\n            limb2: 0xfc016b0e19f5a9dafe6150af,\n            limb3: 0x1853f7c388088cef95618ee7,\n        },\n        r1a0: u384 {\n            limb0: 0x25afd3c9e43a6bd85d8f83da,\n            limb1: 0x6636bcf8f7c4ffb03262b3ad,\n            limb2: 0xfab2ea835f15ffa64289aee0,\n            limb3: 0x19a40512a2bc92b145d4a15f,\n        },\n        r1a1: u384 {\n            limb0: 0x457e5f8262a3fb1f68e2ee64,\n            limb1: 0x2c8e29f8273ba32411548171,\n            limb2: 0x6b7ec622d4cf5c7605c02c7f,\n            limb3: 0x16d592d1bda21aa16790c116,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x418f88c2ec9095086a11212,\n            limb1: 0x9bbb92abebe257d874d88812,\n            limb2: 0xef0f443e07ba39689c54a875,\n            limb3: 0x15190f05d2854f4f23244780,\n        },\n        r0a1: u384 {\n            limb0: 0x73562c95a5ced7285783ea44,\n            limb1: 0xebc6a876c7f862dd940990a4,\n            limb2: 0x806ab610b9ba3826809481f9,\n            limb3: 0xd738e6b4748294d2ef71b46,\n        },\n        r1a0: u384 {\n            limb0: 0x2f88f9cb9b43366fca45401c,\n            limb1: 0x981bc3797c4e9ed2343a8465,\n            limb2: 0x10f951c9ceda971d01120a50,\n            limb3: 0x197593f4646346745cba98ce,\n        },\n        r1a1: u384 {\n            limb0: 0x6352dd6f1f276ebd12e36438,\n            limb1: 0xbc94e96354513cd65cbb7831,\n            limb2: 0x63f9809778a9e5a3a14bd9c6,\n            limb3: 0x12399967b752e1ae762754b4,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1393c1940f25665663934fc8,\n            limb1: 0xea7d0b2339e762ea1d7417bc,\n            limb2: 0x38e8c939bcfc597914fa0bc4,\n            limb3: 0x10e5f821e745ef290f773399,\n        },\n        r0a1: u384 {\n            limb0: 0x3fb68057499c7406aa1ace48,\n            limb1: 0x41257c93b17f3e38108e6f37,\n            limb2: 0x6e97eb8687dab2a2a640c57f,\n            limb3: 0x14df29fafe098da44c7fd33,\n        },\n        r1a0: u384 {\n            limb0: 0x59456b76c2b8257a9ee80887,\n            limb1: 0xb92657cb2cd74cfb0e2e2af8,\n            limb2: 0x74366a9ca17b733790bace94,\n            limb3: 0x18a62b6be3320f12ef9121ed,\n        },\n        r1a1: u384 {\n            limb0: 0xd05f8b04255c124be737ddfb,\n            limb1: 0xcaf73bd136dd217b40f1b669,\n            limb2: 0xda811888424a2ec800ca2f97,\n            limb3: 0x157c5205e1188acb79fbef71,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8b374dcb293da523769439f3,\n            limb1: 0x2fa24f2a394fefc00be6551e,\n            limb2: 0x5b56b235703e81f9581fb812,\n            limb3: 0xa510fba0090ee3f2da90e03,\n        },\n        r0a1: u384 {\n            limb0: 0x4c287e611b512a841d227d6c,\n            limb1: 0xb311b662d2c9a4106ab64890,\n            limb2: 0x3f74ad8a1056c7ee37f181a,\n            limb3: 0x387ccbb5fd44513ebd1364a,\n        },\n        r1a0: u384 {\n            limb0: 0x238250f751fe359ea48e6612,\n            limb1: 0x48d78fe66c255cda27a7797a,\n            limb2: 0x270135167f0b9910bbe997c5,\n            limb3: 0x13f053dabc35bea274b5dac0,\n        },\n        r1a1: u384 {\n            limb0: 0xb7350395e2c37b4d15be0abf,\n            limb1: 0x578ec20dcde4919879af4f9,\n            limb2: 0xebdad8f8ae78030cf33a9584,\n            limb3: 0x214f9275dbd80c3514f9cad,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x54863ab6d50bc9ff4874b6e6,\n            limb1: 0x937c0d4560eae2eee4b7ce1e,\n            limb2: 0x337805ebca15d19f40277942,\n            limb3: 0x10ff70c91cbb8869a0659bf2,\n        },\n        r0a1: u384 {\n            limb0: 0x7b3cfe640c29faece9a85e53,\n            limb1: 0xcddbe3decddda92adfd9039a,\n            limb2: 0x42f145b0f85554ee195ae299,\n            limb3: 0x1951ff3142b9a208e5e69e59,\n        },\n        r1a0: u384 {\n            limb0: 0x94a7ee20add6c18015e26733,\n            limb1: 0xd0f2a6ab15fefff1caa7366a,\n            limb2: 0x9c055a1d93c3f27e46d0b3da,\n            limb3: 0x60f554e35125b7f5d7aac8b,\n        },\n        r1a1: u384 {\n            limb0: 0xd92e5b001022ee7874cbebeb,\n            limb1: 0x4aed0fd23b92aebc139f77db,\n            limb2: 0xd2bca1fe5ad39a274c9dfeec,\n            limb3: 0xcfab0e5b8e8d7c7a8765b15,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x13f5a17e28b8aeda870323da,\n            limb1: 0x337d2b7adfbf1364a8611853,\n            limb2: 0xa8dd9b2b05f3350a8569d92c,\n            limb3: 0xddc998d17c49e6381aa6256,\n        },\n        r0a1: u384 {\n            limb0: 0xde207fd9d271001c6efb9576,\n            limb1: 0x6c856b0c104190652dfdd937,\n            limb2: 0x80feca357961f12e69a3a05d,\n            limb3: 0x2595adff1024c23c63dec73,\n        },\n        r1a0: u384 {\n            limb0: 0xd7040b7ee5b45a1422495780,\n            limb1: 0x13f3e065ea119be3775d97ed,\n            limb2: 0xeecf7ac81f371c5e390f85ec,\n            limb3: 0x1047da85dc9dba631527134c,\n        },\n        r1a1: u384 {\n            limb0: 0x7017211aee3c7150478d96ee,\n            limb1: 0x8c7564a3a9ef6bfd96289765,\n            limb2: 0x6df1f2b21ce6b08419e214c,\n            limb3: 0xa4e778d427042d100d7ae3e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x21805f763874894483dc214c,\n            limb1: 0x2c02b4ccd505fbbb8d8bd064,\n            limb2: 0xe32a1465866e01898f1f3b14,\n            limb3: 0x15d2f6b35415870ddc7054f2,\n        },\n        r0a1: u384 {\n            limb0: 0xf6749d4bc9865ee9e261110a,\n            limb1: 0x81c4e72fdd8802ef73ab15ef,\n            limb2: 0xb89ca852d2ba8b3590cd5301,\n            limb3: 0x183abed5b2d1d128fa596426,\n        },\n        r1a0: u384 {\n            limb0: 0xf71ebb04aab85e83aec862c0,\n            limb1: 0xf473b3e5a56fd96d60f8a264,\n            limb2: 0x3e4b66f8493911a4a00afa1e,\n            limb3: 0x12be1dc90541ee9c7cb4fa59,\n        },\n        r1a1: u384 {\n            limb0: 0xba5f7a9ccd0748c2fa4e54c8,\n            limb1: 0x1640f7800984bafe7fa1a76d,\n            limb2: 0x48e76aab062b19911f92bcd,\n            limb3: 0x72cecd9e5c7c437cbbc1e4a,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xdf166caff55624c628e9c39d,\n            limb1: 0x375583a43ba61cf4f2aadb7,\n            limb2: 0xf0d0784be04235e91497af3a,\n            limb3: 0x144cf709d68b63a9939bcd7f,\n        },\n        r0a1: u384 {\n            limb0: 0x9b47104ec1159ac61ff360a,\n            limb1: 0xfa833b0d43df77cd013e21cb,\n            limb2: 0xcad1fb67c8db4e6c39d8bd59,\n            limb3: 0x10e847c87beb83adb8a5feb,\n        },\n        r1a0: u384 {\n            limb0: 0xb1fd17f45af8d452043abc61,\n            limb1: 0xcae758a71dc8e5d49f433bca,\n            limb2: 0xf97f2de839369b6c827e9eeb,\n            limb3: 0x2e3050a5cb33641e4b5f617,\n        },\n        r1a1: u384 {\n            limb0: 0x71666e0e514a3e5352f26d8a,\n            limb1: 0x46273d30eb76103fb756a8fe,\n            limb2: 0x8bdb306ed674d669da0ac3b8,\n            limb3: 0xf6c2f57d5d282ff86ccd9a6,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1f078a90be515d55a39025dd,\n            limb1: 0xa69e73a9a0f2894ad32c28d8,\n            limb2: 0x406d92af351a91a43b294110,\n            limb3: 0xab36c91eeeaabb24820b390,\n        },\n        r0a1: u384 {\n            limb0: 0x873b5a72e8ea0e7d255b970a,\n            limb1: 0xf64973cbec18695bfc945495,\n            limb2: 0x533e34319846e866ad7ddd36,\n            limb3: 0x1029fa62305109a4d20176b9,\n        },\n        r1a0: u384 {\n            limb0: 0x429cba0cb76b0c492577722a,\n            limb1: 0x771bc089fee5e3632dbffa1a,\n            limb2: 0xa7c64b6f38e532de16959d0d,\n            limb3: 0xf38b71fb4269dd2e038223a,\n        },\n        r1a1: u384 {\n            limb0: 0xddc796c5033428b0b8111c4f,\n            limb1: 0x60ad337fb316c52ef8de0b21,\n            limb2: 0x951808daa18d3ec520bd6279,\n            limb3: 0x3455cf600b5f6c549f38f14,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x3c9e33deec176793b8c762c5,\n            limb1: 0xcdd0e402436d39a6117033db,\n            limb2: 0x30c585d12e787c8be912d406,\n            limb3: 0xf298f9a8c4459a08f210e47,\n        },\n        r0a1: u384 {\n            limb0: 0x170c6ad3a877e65fe91c69db,\n            limb1: 0xa41f211a3763ffcdb9eb1e9b,\n            limb2: 0xb84a114f23f1978d9ebd06a4,\n            limb3: 0x60bac8f5945907e791dfcda,\n        },\n        r1a0: u384 {\n            limb0: 0x354e5a1eec75069b04ac0541,\n            limb1: 0x91be6e4159dcb28c19a4e3e2,\n            limb2: 0xfd452118a540f6f88b01e089,\n            limb3: 0x12b2b6a5dda55d157e1f8b,\n        },\n        r1a1: u384 {\n            limb0: 0xe47f5498f54067daeffa00b8,\n            limb1: 0xbccfe6edd60b7ef921ce57a1,\n            limb2: 0xd917099499398bfacccaba05,\n            limb3: 0xbb67b42bd655fa485081a90,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8deb02d48f2ee3be7ae899ed,\n            limb1: 0x4b66f01a40c86e83fded6847,\n            limb2: 0x9c08bb4fe0abcaefc921a40,\n            limb3: 0x8bda1d762c986632aeaca1e,\n        },\n        r0a1: u384 {\n            limb0: 0x72be08cacb4795f5ddd8497f,\n            limb1: 0xfaddee2a55b5154b35e26966,\n            limb2: 0x7c67f5884f061f219cb8ff55,\n            limb3: 0x6d4fe75b0153bdec12dba82,\n        },\n        r1a0: u384 {\n            limb0: 0xc235fffbfefdf8e9ef54d2bc,\n            limb1: 0x6581ebd151a1e73c53b163cb,\n            limb2: 0xf60ffd0dd3608c742fba7902,\n            limb3: 0xe9437af3be8b35cbae1f171,\n        },\n        r1a1: u384 {\n            limb0: 0xdb98cff46b3033365ae5b731,\n            limb1: 0x19f3ec2adf9517d4533cdf7c,\n            limb2: 0xa60fbca3376090bf8f17f4b9,\n            limb3: 0x169bff5211482ee5e64f50ae,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x2dac7db08633bccae086b486,\n            limb1: 0x89b8e12695d31ec21d7bc0f0,\n            limb2: 0xb6b895ef82cd3e31f6f0cc3f,\n            limb3: 0x2785eedc1bcd70ba4ebd308,\n        },\n        r0a1: u384 {\n            limb0: 0x8a0217a58db8f5cb124445ec,\n            limb1: 0xae392df0fd76493bd2ded923,\n            limb2: 0x73881097a5c82a443ee9e130,\n            limb3: 0x145337977ac0a11a17f3345,\n        },\n        r1a0: u384 {\n            limb0: 0x82060ee8ae4f3cb6db6ad231,\n            limb1: 0x90e8ec63f2e39f1218f21605,\n            limb2: 0x4ff00df2e2cc6da42f40ca0b,\n            limb3: 0x96b5a0e4cf36d245f2a2213,\n        },\n        r1a1: u384 {\n            limb0: 0x183bfac0d6d302cda44cc090,\n            limb1: 0xb8bab9cdf785cfc48b82cde3,\n            limb2: 0x2b99c1ff7e44f0267431fbc2,\n            limb3: 0x9253c3d3a7875099bb7116b,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x89eec90cedffb5559d9f7cd6,\n            limb1: 0x838145c7842da8419fcaba0e,\n            limb2: 0xa322ce58631513aed92ce0df,\n            limb3: 0x5a79df85b0a96adf6e2dab8,\n        },\n        r0a1: u384 {\n            limb0: 0xf36133a552f9211634fe2feb,\n            limb1: 0x712f911d31ea73387b467687,\n            limb2: 0xfb3d98acbbe375c161f9d2a8,\n            limb3: 0x11b7c924610a8268c34b8259,\n        },\n        r1a0: u384 {\n            limb0: 0x50e7cae27aa8b11d0d2bfe43,\n            limb1: 0xf88979ed0a59e7daa98895c9,\n            limb2: 0xdf00ec512e87f5862a699c22,\n            limb3: 0xcad7fd28c40cc541a820fe4,\n        },\n        r1a1: u384 {\n            limb0: 0x936b0157ffd80fabb32930f9,\n            limb1: 0xc6bffa14bca99e467c671b75,\n            limb2: 0x609410c23cb1d2ce4e5e9242,\n            limb3: 0x5aeec94c1d7d2fb257ce4f7,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xc41d067c71069998cf8843d1,\n            limb1: 0xb14da36d1c97315bd61ba35,\n            limb2: 0x8aa0d451828d59a5f72d09dd,\n            limb3: 0x6032c39bd848710bcb60e49,\n        },\n        r0a1: u384 {\n            limb0: 0xed46bd973c771a1b363a7d4c,\n            limb1: 0xf133793366e26684ef2f32b3,\n            limb2: 0x12ff177280c137134c3f25c4,\n            limb3: 0x127cf801e7f2dd085ba1a751,\n        },\n        r1a0: u384 {\n            limb0: 0xdc817a66a6c7d907bae27871,\n            limb1: 0x7ba4fed3737fceac11ec899b,\n            limb2: 0x90e031e803e3d6cbe2868427,\n            limb3: 0x12ea6c6e770758121970dfd,\n        },\n        r1a1: u384 {\n            limb0: 0x70cc7c1f3299456ae1e20184,\n            limb1: 0xb40d30be5118767fa201dfec,\n            limb2: 0xccc12af1cb317ea89224e94a,\n            limb3: 0xdab488f3ca14571f8255bf5,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xa05df784a5a683833d2e1464,\n            limb1: 0x544aef13d7757e76ac4a6a2c,\n            limb2: 0x337b308d7d37a5e715e2c6a7,\n            limb3: 0x1971f0b4a71e609b35922e78,\n        },\n        r0a1: u384 {\n            limb0: 0x9afd8643829c2749745e919d,\n            limb1: 0x3fe5162dcc95efeedb645acb,\n            limb2: 0x771a45a92c45f43bb070b7fd,\n            limb3: 0x503aa962b29d72a5d9f6cf2,\n        },\n        r1a0: u384 {\n            limb0: 0x8e80c44f884a20fe7070ea42,\n            limb1: 0x78c55b9104f9b5b599cf0cf7,\n            limb2: 0x6aa9312bbcf5dad8ca58d47c,\n            limb3: 0xa42156c0b189a8b23065b2c,\n        },\n        r1a1: u384 {\n            limb0: 0x507ea5597266a41fa17c0e3e,\n            limb1: 0x61ca6c9ff959cacbd2e0502f,\n            limb2: 0xe921d3d10d8336d32c718050,\n            limb3: 0x15bd96df3160aaf601255ae2,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5e4b2d8014672689adf74c5e,\n            limb1: 0xa727aa7b0714aee11ce04e22,\n            limb2: 0x2b8081578ba7e36449332477,\n            limb3: 0x136517c5cbf60d7fd893217d,\n        },\n        r0a1: u384 {\n            limb0: 0x1e6b6dce21e6c8fbc8c3059,\n            limb1: 0xd40eaed17a285915e6dd5328,\n            limb2: 0x84bb3dc7596ffeecac6c017c,\n            limb3: 0xe145b9da771dcb825de00b8,\n        },\n        r1a0: u384 {\n            limb0: 0x73b866053fe5eda748e0cabb,\n            limb1: 0x402fac191721abee446bc895,\n            limb2: 0x4b03c3a6b6268986ca81d9ac,\n            limb3: 0x6b4c9aac6eed89d9f0a6121,\n        },\n        r1a1: u384 {\n            limb0: 0x2af39075f96b16e132587e7,\n            limb1: 0x13bcad0b04e3dd70f7c5f56,\n            limb2: 0xda8eba78634610f509f07778,\n            limb3: 0x110e70b034d243106e204662,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xbb42fc51b2f0d50a3d7a6796,\n            limb1: 0xfcbc9d2df3136cbd1a372ac4,\n            limb2: 0xea313e60d4b8240679b0175e,\n            limb3: 0x1657a4b33e1400ef6e296282,\n        },\n        r0a1: u384 {\n            limb0: 0xaf91b402ecc6cf1a742796cf,\n            limb1: 0xab44b72c1fc2f89b5eaa0345,\n            limb2: 0x9f6a20404576105e15a4930c,\n            limb3: 0x10992497f5f8bf4451121322,\n        },\n        r1a0: u384 {\n            limb0: 0xd9355bfe72d92c6a0950eafd,\n            limb1: 0x89de0bfbfd06c9911cb2d6fb,\n            limb2: 0xe2092d1e99ab65a7a33ba1cd,\n            limb3: 0x1c317a68eeef4d833e396de,\n        },\n        r1a1: u384 {\n            limb0: 0x631d3efa10e591b7ebcb8dbc,\n            limb1: 0x6a4a0815d19cf339e4663ba9,\n            limb2: 0xe2fb7d9878d26c7c97299a01,\n            limb3: 0x4c4dc455aad226b744ebdd4,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x656bbea0391d35835dc24b51,\n            limb1: 0x3d5a46760e1d5b5be2d560bb,\n            limb2: 0x8ab4befe76903930bf03b6cc,\n            limb3: 0xde3dfb225e924a4e1dd60a6,\n        },\n        r0a1: u384 {\n            limb0: 0xbf76b6d5dcffe10f806efc9c,\n            limb1: 0x89c3bf595b72110cd64c7807,\n            limb2: 0xad1b9df71cca0f160ddb2c6a,\n            limb3: 0xe1ae8d30b5cac8a9a485f95,\n        },\n        r1a0: u384 {\n            limb0: 0xfcef3581dc552b239364bb18,\n            limb1: 0x1785b2ccd39c6ea191ba4ad7,\n            limb2: 0xb26676ceebabd25d429a9122,\n            limb3: 0x20c29df3088771981853b6e,\n        },\n        r1a1: u384 {\n            limb0: 0xe1d699d9ac66a9464fbdc974,\n            limb1: 0xd53858123c2581584cab83ef,\n            limb2: 0x8e59c936d52fd331132acf92,\n            limb3: 0x42a7ceaf3c3cc116eb1a41a,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xe51e461db9c85f42519fea6,\n            limb1: 0x234a9695204bd44f55ea4de6,\n            limb2: 0xc8d34c6b4580edfc55e023b1,\n            limb3: 0x16691c1bdf57ba041abb3d97,\n        },\n        r0a1: u384 {\n            limb0: 0xa81022cb0b3b0c523ae71819,\n            limb1: 0x47f7df16fff0877b21676607,\n            limb2: 0xdee4fe1d3c64b3fedec56326,\n            limb3: 0xcfbf5ccb325675b1a3becef,\n        },\n        r1a0: u384 {\n            limb0: 0x6d42b9d9e765f92b0817551,\n            limb1: 0x352adc09dd7760a5f4208a1e,\n            limb2: 0x5397846e3fff77f500da6dbc,\n            limb3: 0xe26d685c4365e342109d0ba,\n        },\n        r1a1: u384 {\n            limb0: 0x9bc1051782d84793806d878b,\n            limb1: 0x1642edf27f040ad57feb6f89,\n            limb2: 0x11a5d3523a88580869d28ca2,\n            limb3: 0xd22ff50c5a9bd729115a889,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1974fc785431be1e90b76cf1,\n            limb1: 0x5523616ad31f45b5acbb41f0,\n            limb2: 0x4db84aa19ed0d09fdfd72a39,\n            limb3: 0x4bee7a1546e6a96b8c65312,\n        },\n        r0a1: u384 {\n            limb0: 0x1fff8fc0e33c70b81adce7d,\n            limb1: 0x5503816c20ef23cb62024c84,\n            limb2: 0x1d58103be6d430043405b3ef,\n            limb3: 0x107fb3faa9b9af026c550cd7,\n        },\n        r1a0: u384 {\n            limb0: 0xed84d2bc957cddd0e6e4ad25,\n            limb1: 0x1800d9d9c9bdeeb05cada676,\n            limb2: 0x6bc88f0ada5bbcfb48988f0b,\n            limb3: 0x177faefe6e97b317f26d47c2,\n        },\n        r1a1: u384 {\n            limb0: 0xe487165be396059ee48112a2,\n            limb1: 0x57fae5a95d9b810b370239e,\n            limb2: 0x9959f70caa80a4c337de8fdf,\n            limb3: 0x744e597435d3317bd2d3cee,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x30d36077b6d0262e218111c1,\n            limb1: 0xc74774ca1af660eaed4d8329,\n            limb2: 0x6448cecfde912a7d2029dbc,\n            limb3: 0xe743528ce0c94e1a76f2f60,\n        },\n        r0a1: u384 {\n            limb0: 0xe1f8a574cee0dad622d6fead,\n            limb1: 0xcd681358d077b827cc148be2,\n            limb2: 0xc8fb346621601764fa91b40a,\n            limb3: 0x133d21c52017365921207d63,\n        },\n        r1a0: u384 {\n            limb0: 0x5cb088f57e1e3f6a62571b37,\n            limb1: 0x4089cdf0fb67a7b1d79838b3,\n            limb2: 0x62401a2e57abb0652e0fee81,\n            limb3: 0xcc83c46ac38241e1c33aca2,\n        },\n        r1a1: u384 {\n            limb0: 0xfd94f04ec006d63b4825ecfa,\n            limb1: 0x96ef1f9240c32fdc393b81e2,\n            limb2: 0x6d46c2685a1a1c50e84c8b24,\n            limb3: 0x1528bf72bee83f2c80884dd2,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf1675d98caa0e86774bc637,\n            limb1: 0x601f3b88148d94ab340ad0d7,\n            limb2: 0x38be976c910e6b1d767b2184,\n            limb3: 0x3e03977cdee4d24405e656d,\n        },\n        r0a1: u384 {\n            limb0: 0xe1a8086a67acf571c0af95cf,\n            limb1: 0x1eda39e1440a2e311c78ae41,\n            limb2: 0x3bacbf4628f20f0353dc2a71,\n            limb3: 0x12bbfc96114eb5f664d2f89c,\n        },\n        r1a0: u384 {\n            limb0: 0x301cba8607d6747f45a6ac34,\n            limb1: 0xe736ba1686c2c9873cf10893,\n            limb2: 0xa0aa0fae3c9f8cab4f768c4,\n            limb3: 0x15a9608ffbe07f61ed31b819,\n        },\n        r1a1: u384 {\n            limb0: 0x89bef3c7071d9d77cfc34894,\n            limb1: 0xb492c854b864451bd42b6f8d,\n            limb2: 0x90d08dba8607ae67e7ffe8f2,\n            limb3: 0x3df2c581fd145f7d0c76401,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8f8bf2310745715d8e60675,\n            limb1: 0xe7983befc104f7bd4886ad3a,\n            limb2: 0xd6b5d3a93563b2103c29cec1,\n            limb3: 0x1902b1e10713c8d95829b014,\n        },\n        r0a1: u384 {\n            limb0: 0x392c934ad398e9471a2a3e6f,\n            limb1: 0xc81c0dc22eff61dca36ea27f,\n            limb2: 0x4605027ef09f9b7d03fcc1c2,\n            limb3: 0x142c2105c569b0e7aee457f1,\n        },\n        r1a0: u384 {\n            limb0: 0x86fc12d4ddb34349e58e0713,\n            limb1: 0x9a132e3db41060771e480d9f,\n            limb2: 0x6e00f3b7a9cbdf6ba01f3694,\n            limb3: 0xf3f4843686de973131d67ee,\n        },\n        r1a1: u384 {\n            limb0: 0xf7b6328930ed21138fcd8f92,\n            limb1: 0x354fd9f9ec8f828426279c4c,\n            limb2: 0x3df938a725947d029e1edf6f,\n            limb3: 0x1143440784148d84b5ae0952,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x186d09647ff0bba5d26ed28e,\n            limb1: 0x623c8f44caa6f18538e106b2,\n            limb2: 0x6ee87df7083a561d754b41d6,\n            limb3: 0x8a8a90d75fab6a61d0509a1,\n        },\n        r0a1: u384 {\n            limb0: 0x6adbd952167baf9618d42d4f,\n            limb1: 0x321d82100a434b5583df9a0,\n            limb2: 0x24f6e8a30ab01f51c1f581b1,\n            limb3: 0x3fbeeb4073b163b3a283631,\n        },\n        r1a0: u384 {\n            limb0: 0x3cbe311d6bab02eedeee8686,\n            limb1: 0xa954bca129b7bbed1f638f3e,\n            limb2: 0x256baa5a7b0901b1c39a2060,\n            limb3: 0xd44f3bb3b9ac2f6050e276,\n        },\n        r1a1: u384 {\n            limb0: 0xbc701985313f4fd60a02502a,\n            limb1: 0x879d4ed1464b95cc93907b88,\n            limb2: 0x95c12c7e24be41f785419bee,\n            limb3: 0x8e3562c02b89b593503d443,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8acd42eff277e12a1c665cd8,\n            limb1: 0xc8dd9dfb56ea54ca5c9d26e6,\n            limb2: 0x803b24ff12a9cd7524a26b87,\n            limb3: 0x27b1b3c904791e3fa942dcd,\n        },\n        r0a1: u384 {\n            limb0: 0x7a880435688221e820d4164e,\n            limb1: 0x9754d630e027f9217dd0fba6,\n            limb2: 0xee6cbf6da2000115b0cca0d8,\n            limb3: 0x162f5c264c2d2728aaa1f652,\n        },\n        r1a0: u384 {\n            limb0: 0x314a0d54f7db63dcd3d6c0e0,\n            limb1: 0x793c614f53a688375ca369e8,\n            limb2: 0x296c4ccd5f785e294abeb492,\n            limb3: 0x20d58632925a8df2d3d48bd,\n        },\n        r1a1: u384 {\n            limb0: 0x82c581e26e2e612aceaca787,\n            limb1: 0xe02d73cc25449c92dfd7f088,\n            limb2: 0x732270a5ec065ff678b3666e,\n            limb3: 0x17e813008da019a1fab544c,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x272c29aa11aed8e43cc6141d,\n            limb1: 0x71ace08186410aa341601ace,\n            limb2: 0xb9a9aa2f3050b27084ffbc22,\n            limb3: 0xcbec164f80a90014457abc4,\n        },\n        r0a1: u384 {\n            limb0: 0x84565ab9fffcd0062808ee35,\n            limb1: 0xef87eb1f3b09214ee1c6bcf7,\n            limb2: 0x1ac3de549632346de8521585,\n            limb3: 0x302f3ebfd6939b7a5be7a5,\n        },\n        r1a0: u384 {\n            limb0: 0x9615b19b27deb1c37635e038,\n            limb1: 0x71949c2c6bb3f43004b870d9,\n            limb2: 0x1795921be995a5d68845a590,\n            limb3: 0x17c275a0f8dd134ff6e6ab1e,\n        },\n        r1a1: u384 {\n            limb0: 0x8b1d7f267653c440de637b02,\n            limb1: 0x3a5e2de261d557e994157f3c,\n            limb2: 0x35f5a3781402a1227675829f,\n            limb3: 0x18c4e5eb81e38ada34f8ab67,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x4a074239eac7dc93b8113ddd,\n            limb1: 0x64192efc9a09299ad173b34e,\n            limb2: 0x3e86b7943ceda2cc678e6719,\n            limb3: 0x13a3cf500109646aac4d69e3,\n        },\n        r0a1: u384 {\n            limb0: 0x89c20af4b5a694d4d6d9d45d,\n            limb1: 0x76071bd0d45623a4cfe9647,\n            limb2: 0xbaeda04445ec73fe1fd859d6,\n            limb3: 0x12f734fc3463dc7adb90dccb,\n        },\n        r1a0: u384 {\n            limb0: 0xa12928a1d5d6408853a05ae7,\n            limb1: 0xa8fc3f1aa38f3d6554357b31,\n            limb2: 0xbb5e7127cb9669d52daff069,\n            limb3: 0x525a9e909f39cb2e32cb71a,\n        },\n        r1a1: u384 {\n            limb0: 0x2bf733d3a23d1446da39720e,\n            limb1: 0x69c363f32dc0ed3a22acc728,\n            limb2: 0x3eb64a364ee2cb63222dc046,\n            limb3: 0x1e78c4855ad25e4e08ba1eb,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x7116c638544720919ba1141f,\n            limb1: 0x38d3486b5a4d7d2b1cc7a81,\n            limb2: 0x9b0ce563be273a4ed3481a1d,\n            limb3: 0x373ac3e05382518aa76323c,\n        },\n        r0a1: u384 {\n            limb0: 0xf667b74f8f4e3f484c4ae08b,\n            limb1: 0x2206d95b2b7a7ca7e2aecdc2,\n            limb2: 0x64ca11d3eb4448d39f8e7009,\n            limb3: 0x2585d7ccdfb9e2246f24d05,\n        },\n        r1a0: u384 {\n            limb0: 0xf03edce3835efea888f2bd2a,\n            limb1: 0x992d9468044e686d3d07216d,\n            limb2: 0x98d781d756b874d0bd7a7451,\n            limb3: 0xe44d0964d322c8cb9cbcf18,\n        },\n        r1a1: u384 {\n            limb0: 0x6fc3182d07a38a7f0fca843b,\n            limb1: 0x551df1a531a45713e9e8c1aa,\n            limb2: 0xde4e92d1f38c48c0f9587009,\n            limb3: 0x1072fb6b01d871f8150e2fb1,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1ed40e3c2cfcc055cd4958d6,\n            limb1: 0xd1453a4587d6c2ca2341043e,\n            limb2: 0xf79c2172e21b91ba79a5ea2d,\n            limb3: 0x65c82633f9d4d20c07f6ad4,\n        },\n        r0a1: u384 {\n            limb0: 0xc8398341fc07277f183c17d5,\n            limb1: 0x86bc2e62775af5eae61d9aa,\n            limb2: 0x403276e7635ed1cd34473d3d,\n            limb3: 0x18a18bd0be954bbff600c7c1,\n        },\n        r1a0: u384 {\n            limb0: 0x8b17fbda26b7133b0600c51e,\n            limb1: 0x48147de60df80344b55d8fb8,\n            limb2: 0xa0e018e36cfa14e2a39e57fe,\n            limb3: 0x70aed2d475ad180844d7587,\n        },\n        r1a1: u384 {\n            limb0: 0xf1d8e65deba9a3605b50946b,\n            limb1: 0x3677c5769dea1762e0a3a25d,\n            limb2: 0x5d4399ba6a9742e8f2aa1928,\n            limb3: 0x2d57160d6c66d1e0c2f0c0,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x8477b2ca00b2aeca6e32a3c2,\n            limb1: 0xc6f29b461233bd0ebc643442,\n            limb2: 0x84af7efb348b61e615b2333d,\n            limb3: 0x1533c0ad4f3bdc8c8d26cea4,\n        },\n        r0a1: u384 {\n            limb0: 0xc1c642702f7caf535b06e0f2,\n            limb1: 0xe5245d45b1adaa7c89f0db9c,\n            limb2: 0xfdaf6276d41ae24845843a0a,\n            limb3: 0xb6f912c27d4179d1cb5e992,\n        },\n        r1a0: u384 {\n            limb0: 0x7338a41d8d41ba28d96db37b,\n            limb1: 0x51a10fe0cfd8c6d045839897,\n            limb2: 0xdb73279246e7073586ebb14,\n            limb3: 0x180e0a6b2de7e0540e582783,\n        },\n        r1a1: u384 {\n            limb0: 0x4d8f0878c0af851ea8d0cff5,\n            limb1: 0xe24443b84e3d452bac74c32f,\n            limb2: 0x4e4f3f08f29048e7d791c0,\n            limb3: 0x107fba05f68214c93b0d00d3,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xe6882416d7bc0be138e4eeb2,\n            limb1: 0x1ffc8c27a2046327376e250,\n            limb2: 0xf96a7955cf8a3345e89477c1,\n            limb3: 0x31ae02e34d7d21957899dbe,\n        },\n        r0a1: u384 {\n            limb0: 0x148232d34a8da37b7adc99a7,\n            limb1: 0xd0a0095db108dfd24e92848f,\n            limb2: 0x89fb49e1a36591a6b189f964,\n            limb3: 0x1900bee131450e7d7a914ea4,\n        },\n        r1a0: u384 {\n            limb0: 0x97018429f16d24bc1e7f8af0,\n            limb1: 0x1f68aaf8291a6decfb708b43,\n            limb2: 0x1f700e88b537bffef39907e4,\n            limb3: 0x9cb633f82c6e595f1785e5e,\n        },\n        r1a1: u384 {\n            limb0: 0xd8d9d3a12a0dd7b129ffda0,\n            limb1: 0x7a94e9da792505fe4fbdb0da,\n            limb2: 0xf16eaac379266d5a4210e839,\n            limb3: 0xc24197c1ceaa3dd3de58b21,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x3e3cc1b08d8d1fda723658bb,\n            limb1: 0x1cf952b752fb9ef1e82f5094,\n            limb2: 0xcd52c2cfed361eab29f2026,\n            limb3: 0x59d1335947ab746801c0537,\n        },\n        r0a1: u384 {\n            limb0: 0x34f187a454a321b866885648,\n            limb1: 0x26461aa4e35660f0dce08465,\n            limb2: 0x7540c65dddc34d56adebea12,\n            limb3: 0x1417edadd46132f1155c1f,\n        },\n        r1a0: u384 {\n            limb0: 0x716255bec8b8a867659f8ec1,\n            limb1: 0x728375c8a3a566ce58f184ab,\n            limb2: 0xf3c4e74ba75e0f526ebea027,\n            limb3: 0x130e1557b595456ac14c74b,\n        },\n        r1a1: u384 {\n            limb0: 0x956347dad0355d5e6b5af3c4,\n            limb1: 0xef43db3b9c396c251944db86,\n            limb2: 0x6ee505074759d3fe9876542d,\n            limb3: 0x4097c38f547306cd4f3b276,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6231a3597b09b6d5fda5c712,\n            limb1: 0x3f3bd12ca9ef48ef6199a7f4,\n            limb2: 0x6883383b5a445ca79fc407ee,\n            limb3: 0x141accc8970ace156fe95a36,\n        },\n        r0a1: u384 {\n            limb0: 0xe0c805067330b20430c585c8,\n            limb1: 0x8ff3e0c3028ea8f24ee6fb30,\n            limb2: 0xa368fc9a21efabd91ace37d9,\n            limb3: 0x18b35a8fd65ba4cbd734a0ee,\n        },\n        r1a0: u384 {\n            limb0: 0xf4e1f73d2ed7ccded6c419de,\n            limb1: 0xf379cd28811f89aeea7aee67,\n            limb2: 0x727c64c0e714ab6ea82391e8,\n            limb3: 0xf454aa00efef9460f382b49,\n        },\n        r1a1: u384 {\n            limb0: 0x952793660f1fe4300657022a,\n            limb1: 0xe8fa6c2b1aa542384940d1ec,\n            limb2: 0x5a1f19c729b4b225b1501e31,\n            limb3: 0xa5b1272b68436f9433d112f,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x990dd2f78bf76d63c8a1579d,\n            limb1: 0x324c14f20ab56d3dc480653d,\n            limb2: 0x21bbedea5a0b817b568c1995,\n            limb3: 0x127c86bb9f80d6468a5a0787,\n        },\n        r0a1: u384 {\n            limb0: 0x5b66a3f1affc43619038b84d,\n            limb1: 0xd61e9a91a30e1c4606116992,\n            limb2: 0x8a3bb65c955e0ff1e2749335,\n            limb3: 0x18094793f6e93a6fbbe88c78,\n        },\n        r1a0: u384 {\n            limb0: 0xf16deb47fddb712ce639140,\n            limb1: 0x6ce4afbf91551ea8bf91543e,\n            limb2: 0x1576ceb94ed691afe037a797,\n            limb3: 0x89f45701d0959ae8869f16,\n        },\n        r1a1: u384 {\n            limb0: 0xd1d903d8caaa0032b50eabbb,\n            limb1: 0x4f16d1eedd24943ef87959c4,\n            limb2: 0xc2729c35e8f641933cc2b080,\n            limb3: 0x12a0bc7d5fef85e9964e5dd,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x7ee6a5f3ce669de80b52ba42,\n            limb1: 0xa7d66db543d3c6a626f79dea,\n            limb2: 0x135c684f9ac0e0a34315e044,\n            limb3: 0xaaafef3c4298542248b3a58,\n        },\n        r0a1: u384 {\n            limb0: 0xe0b267ea1f8e8dc2b83d62e,\n            limb1: 0xabac56946f0699334fa765e6,\n            limb2: 0xee0060a937926e9b6d6adb90,\n            limb3: 0x13d96385b510deff2f4d1d32,\n        },\n        r1a0: u384 {\n            limb0: 0x1271c3349afe8fbfd4d7ee54,\n            limb1: 0xc4df31a1a0ae89c5728ee819,\n            limb2: 0xa0de891b771af1ba8a67f8db,\n            limb3: 0xf69200f56879e50a92ecd6e,\n        },\n        r1a1: u384 {\n            limb0: 0x3260bde1e37542b8b8465e10,\n            limb1: 0x7c3420aa9e48318a6606ee07,\n            limb2: 0x126b5e1ded963ffbb6adb4e2,\n            limb3: 0x18d1f7ae28741bb590bb39a6,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x269fe662be1952669b367916,\n            limb1: 0x444dc78864cd61df2552517c,\n            limb2: 0x28be12e26f4b32f0652ab84d,\n            limb3: 0x19a30428e98bf9b0a2c79ff7,\n        },\n        r0a1: u384 {\n            limb0: 0x21df9689e2fe058639581b7d,\n            limb1: 0x12a80b9a201864b6f46ebab1,\n            limb2: 0xd09d200c1fe4354e796b9b48,\n            limb3: 0x6bec03fbfbca091da930b62,\n        },\n        r1a0: u384 {\n            limb0: 0x28188947a47cf18c9d40e8da,\n            limb1: 0x7bcabfacb5b01ab3628aaff2,\n            limb2: 0x76a7b58adfbb924378e8220d,\n            limb3: 0x89da3830e68cf0f2c7a55ed,\n        },\n        r1a1: u384 {\n            limb0: 0x16d6797ce84cbee04811bb4f,\n            limb1: 0xeec191427178e5b1c9c7dbb2,\n            limb2: 0xe59d267e616c978d17fd98d0,\n            limb3: 0xd301c0973bbf180e6fc4134,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x95db0469c00d953ee476c048,\n            limb1: 0xa412df73ae5febbec296a5fb,\n            limb2: 0x16b9fdec9340c8f3aefa561c,\n            limb3: 0xfc955cb99bde258d8760197,\n        },\n        r0a1: u384 {\n            limb0: 0x83c7d7a804031b10c844d0cb,\n            limb1: 0xfb88180286d20648b40806c0,\n            limb2: 0x31368cfad1bcb8ef19b9d382,\n            limb3: 0x8fd02881a5331dfb0922a3b,\n        },\n        r1a0: u384 {\n            limb0: 0x2513b777e720406cfba171f4,\n            limb1: 0x9d9da48be5e4bae3bd3e8c84,\n            limb2: 0x8d75547712fc62f6f651762d,\n            limb3: 0x5f0f52ede58374df52c0643,\n        },\n        r1a1: u384 {\n            limb0: 0x13d6b4aa8d9a46d5720e1b74,\n            limb1: 0x5b93ebf4000945ce87c9dcf1,\n            limb2: 0xffe34203a0c826e972d857bd,\n            limb3: 0x1870c14dc5ad5a661156fd61,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x13a8138427c111d431036213,\n            limb1: 0xc177e00de5b7215a863e9c0,\n            limb2: 0x97a203171990cbbb0e5ab2e5,\n            limb3: 0x8a0a3f26b8d3bcefb78c724,\n        },\n        r0a1: u384 {\n            limb0: 0x9d1740ea8f388b69c175f646,\n            limb1: 0xbf6f5d96d616051ae3572d4,\n            limb2: 0x9bc542122a140e5461a88c52,\n            limb3: 0x510159112f2d409afcdecdf,\n        },\n        r1a0: u384 {\n            limb0: 0xf6335307702c1329032a46bc,\n            limb1: 0xf975ad40eedeac981c916520,\n            limb2: 0xc367b7993d6243a4984974d2,\n            limb3: 0x54b5cdb776381cc145be730,\n        },\n        r1a1: u384 {\n            limb0: 0x29d26ba47472791689263678,\n            limb1: 0x6f7b1f34b002954f5506eae0,\n            limb2: 0x2f9ecd635cd4d5f6e7f08ab7,\n            limb3: 0xd547c2cb31b79da87b93b04,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x31f476324f857ca9daa71d3f,\n            limb1: 0x5b64b681867d0f5505b9f139,\n            limb2: 0xb89e509fc5decaef9cb221f1,\n            limb3: 0x5b8f08ef767ca4cf5f36622,\n        },\n        r0a1: u384 {\n            limb0: 0x8f44b24a23750c8f0fa6270d,\n            limb1: 0x554f99004f5b1f2a21b02609,\n            limb2: 0x3710c6daa7cac50a8ca6de8,\n            limb3: 0xa3b4aea7c32a8fc4d9a662b,\n        },\n        r1a0: u384 {\n            limb0: 0x93f0fbf4c4d931c3a733902b,\n            limb1: 0x3a038220fa2da3a7087689cd,\n            limb2: 0x5bc677d1583979bda5797f17,\n            limb3: 0x11996e8759ccb1bda7042160,\n        },\n        r1a1: u384 {\n            limb0: 0x1ee1d1db6f033786016fd46,\n            limb1: 0x2d4942546551a7b5afb1ee11,\n            limb2: 0x5c0b006bc71d7e27359f5f02,\n            limb3: 0x35c97a7e460075f4d915117,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x7a6d6eabfb0034d1a702f683,\n            limb1: 0x7d0e2455c9a35664ebcfb47b,\n            limb2: 0x32cbd0245fbdf1e7636a4217,\n            limb3: 0x19c09fc88eb1b1a3d18741a8,\n        },\n        r0a1: u384 {\n            limb0: 0x533b4770f929349a30d265d1,\n            limb1: 0x2a2bd55c9677f8858218607,\n            limb2: 0xfdc3daccd568a7f098f996b7,\n            limb3: 0xda029aea876b619425b5a9b,\n        },\n        r1a0: u384 {\n            limb0: 0xe5b827de5b5a8d55c3f84090,\n            limb1: 0xd80c5371f403010197d4f105,\n            limb2: 0xe577025df13d2871b00bc8dc,\n            limb3: 0x16414390859fdc9dba5dbd65,\n        },\n        r1a1: u384 {\n            limb0: 0xaa1076a6910862d36bbb1a19,\n            limb1: 0xcd4b0a7e1356a4c6467e7843,\n            limb2: 0x88f035fb25750a88b3937cc0,\n            limb3: 0x92167f2a0715c9e9d74c7a9,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x813cf8d46ec722731cb2e790,\n            limb1: 0x3ae401e3a2c43950dd3e14a5,\n            limb2: 0x7f1e2595a7bf3cb9644dc3a2,\n            limb3: 0x9a64184b516425353d3342b,\n        },\n        r0a1: u384 {\n            limb0: 0x1be4ad4c913b7f23ef8afc45,\n            limb1: 0x4b9c5ee3da9ae172d5612c39,\n            limb2: 0x362a12402d4cd3c50c5a5bc1,\n            limb3: 0xaf426e78303a8cf5a43520e,\n        },\n        r1a0: u384 {\n            limb0: 0x1a1fbd631479e96bc85c9b39,\n            limb1: 0x755e043e52470551dc47fa77,\n            limb2: 0x2fd80441adcf386b79dfadce,\n            limb3: 0x15cdd2f908202480bb0f56fb,\n        },\n        r1a1: u384 {\n            limb0: 0x493a7937f956ab6960bb1a74,\n            limb1: 0xec402c0b38b6cc4d5094363,\n            limb2: 0x3d52461743a5dfe63d2e7a33,\n            limb3: 0x92150697852cb2d08c3521b,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb34c26f3f693dd84f80a2827,\n            limb1: 0x3a5bad99a295b14daa58eaf3,\n            limb2: 0x294c30f60635aa35b08a22d6,\n            limb3: 0x7b4843ff0c2694d4281b82b,\n        },\n        r0a1: u384 {\n            limb0: 0xf601429d3a9a15e87d6c6a9c,\n            limb1: 0x9ad779f2762b9393eaba8c6e,\n            limb2: 0x887c88bf51c15df955aac60,\n            limb3: 0x858d73304a934b9aae3be02,\n        },\n        r1a0: u384 {\n            limb0: 0xb8b2d232a5e28fd350087039,\n            limb1: 0x72a42652def490cf16cc1d6d,\n            limb2: 0x225b45d85fa199dffd69ffd0,\n            limb3: 0x11aab051de4d3b03d63fd9c6,\n        },\n        r1a1: u384 {\n            limb0: 0xe973e3abcfc1a8b46e3622d1,\n            limb1: 0x1da2831de5c376f4315553ec,\n            limb2: 0xbceaf398ecd71f612f704c01,\n            limb3: 0x3bdf213c9512ed9e6961848,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x3c31209a4897e0f66a542078,\n            limb1: 0xaca6cfb5457ca1adc99138fe,\n            limb2: 0x72bf4739ae7b1a8652c823a2,\n            limb3: 0xdd9144f8c45e6091a6714d7,\n        },\n        r0a1: u384 {\n            limb0: 0xc8942e9d5abaeec4938f2308,\n            limb1: 0x30ff4bdf679bd4a2b87fa34c,\n            limb2: 0x21acf101ca7ff6cd9129e67a,\n            limb3: 0xda6ef8b0ede3a09d1a5c00b,\n        },\n        r1a0: u384 {\n            limb0: 0x2c5038a7eeaa757c15d205e,\n            limb1: 0xe9d28bbd2c18d52e1b9024f2,\n            limb2: 0x959d4240dbbc46a2c5bbb5b,\n            limb3: 0x9cd8b42cb440fc77607b954,\n        },\n        r1a1: u384 {\n            limb0: 0xd35f7d36be1bf213c01aba98,\n            limb1: 0x655bc51b43c6394245778244,\n            limb2: 0xd626d74e22844c1a8e2cc950,\n            limb3: 0x28c4b291b492ca43266277d,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xde11ef8702d534dcae97f4d1,\n            limb1: 0xb7e1313492ee7c957d7c08b1,\n            limb2: 0x94685a26959aaaf145f46c06,\n            limb3: 0xbd77d859d62dfada48bdca9,\n        },\n        r0a1: u384 {\n            limb0: 0xd50523e1ef354e160696adcb,\n            limb1: 0x4ae2fa0fb50e711c936a065f,\n            limb2: 0xaeb883cf2c5a9ad32ce94798,\n            limb3: 0x6cc3bf5598846ca25341da5,\n        },\n        r1a0: u384 {\n            limb0: 0xcc6dd0380e5398c3264b9bbc,\n            limb1: 0xdfe3641a4969d3d49718e00e,\n            limb2: 0xd7b59b3160334de5eacebeed,\n            limb3: 0x35c0cdaf5e759016dec572e,\n        },\n        r1a1: u384 {\n            limb0: 0xc2d2dbc06bdb8ff543ebcea0,\n            limb1: 0xea4c9e638f95e42cea458d85,\n            limb2: 0x9aa2cb9c51ba076dd941d7c7,\n            limb3: 0x8052da2e0dd2dec3a95d9f2,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xabb764ac8036eb503e39861f,\n            limb1: 0x22e8fa738389a0378352e2d2,\n            limb2: 0xab10fb803ca53103ce99fc28,\n            limb3: 0x831ad8b93ffed9245877b44,\n        },\n        r0a1: u384 {\n            limb0: 0xf721e83ab0eb9fa28b5d9349,\n            limb1: 0x71c18646ef565689efc545c0,\n            limb2: 0x590ec1d6f3abfbdb3f9f8b0d,\n            limb3: 0x17707d0e47e7a1044a4fd9c6,\n        },\n        r1a0: u384 {\n            limb0: 0x16d0a838f9b0fc16504dd27,\n            limb1: 0x5ad87ce7ad12ae830368b776,\n            limb2: 0x62490899b4f397e09c44152f,\n            limb3: 0x15528a389da1580f43d95ade,\n        },\n        r1a1: u384 {\n            limb0: 0xa715dcbb03bc2faac9d64bc7,\n            limb1: 0xbd9b3ab159baa441a3ff56ad,\n            limb2: 0x257f876f487a6dab4fa17c81,\n            limb3: 0xecfcaeb005ca1b7f92bf862,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x84bef2ae28f4fb378ec1eeb6,\n            limb1: 0x1189e835406150f7fbe047cd,\n            limb2: 0x8d7fa056d5bff703455219b9,\n            limb3: 0x17b55cffc9c559918a9ffbca,\n        },\n        r0a1: u384 {\n            limb0: 0xbcd55d1a045238c11947faae,\n            limb1: 0xfddd35b7f062ea97fa82612f,\n            limb2: 0x73dbd0a4863e8634338c4c3,\n            limb3: 0xfd6b167fe3d1476b5da9dfe,\n        },\n        r1a0: u384 {\n            limb0: 0xbcf99cf3772f639491c9a228,\n            limb1: 0x1f8ca8645ecbeb98bb9ff5ae,\n            limb2: 0x82f62cc92f240ff8bc4fca5,\n            limb3: 0x6b4211c4d1b18ea0c5a5e4c,\n        },\n        r1a1: u384 {\n            limb0: 0xe60a226e7c7d83e720ce3f23,\n            limb1: 0xe357a6f93412eb508cc034c3,\n            limb2: 0x532ca9a4ca346dd2e0913328,\n            limb3: 0xae125a2c4b74ea5caf9317f,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9ea0eee8a358bedf9bb306c6,\n            limb1: 0x27cbc0c2d576ed81b376df3a,\n            limb2: 0x284d8131858da400101172fe,\n            limb3: 0x6f01c5d4ccee41765be5896,\n        },\n        r0a1: u384 {\n            limb0: 0xc9cca6ba98560a0a14f61b11,\n            limb1: 0xd4eef97cebdd8ef2a73732a,\n            limb2: 0x64b605444de34fc8002b43cd,\n            limb3: 0x16cb65875e7c30e951cccd8,\n        },\n        r1a0: u384 {\n            limb0: 0x1202ef010c0cded8ddce59aa,\n            limb1: 0x7268537e1c67cc008bb9ba6a,\n            limb2: 0x34ab03d803da94a85a2a1f91,\n            limb3: 0xffbdd8dbe035b9aa6fa5cba,\n        },\n        r1a1: u384 {\n            limb0: 0x624339d3f2fb4299150fea00,\n            limb1: 0xf8999090b0c3b02d48cde0a1,\n            limb2: 0xb9c9ee775d38075030edfed8,\n            limb3: 0x4962ca75250846083ca0a66,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5a6db269a838098829edba6d,\n            limb1: 0x67230edf9666dd5326fdd901,\n            limb2: 0x4faf83c8878cbaa298052a07,\n            limb3: 0x112b346339b3c5902a46ac8,\n        },\n        r0a1: u384 {\n            limb0: 0x21277b8157638b119fcc31e4,\n            limb1: 0x58677ee1ee7f46f77ebafdd,\n            limb2: 0xd954201344c8653340beaf5,\n            limb3: 0x1540de56dfb2f896102f649f,\n        },\n        r1a0: u384 {\n            limb0: 0x7542a639e101035b31163743,\n            limb1: 0x16d5957af1c5d36ad26581ce,\n            limb2: 0xa42f7046622fa8f1537fcbb9,\n            limb3: 0x3173bcc714029b198352b15,\n        },\n        r1a1: u384 {\n            limb0: 0xb1d8c4b69f2dd6531b317ba0,\n            limb1: 0xecfb946f37008a59694b6c1d,\n            limb2: 0x45a75c06aee99914e7ea7797,\n            limb3: 0x5a1008ab79da1541477a2bd,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9c4a4d3c7bb2576aeac0337b,\n            limb1: 0x8b9250b2bed82359a757e126,\n            limb2: 0x2d7dd2e4d3d0945ac3d9cb88,\n            limb3: 0xa0bad126c265d46d51689b7,\n        },\n        r0a1: u384 {\n            limb0: 0xf65a98dff64d2a0fc947454f,\n            limb1: 0xa50259b7484098611c2cb9fd,\n            limb2: 0x5a51b1c4671888accdca74af,\n            limb3: 0x133a4335f59c0259f1a3ff19,\n        },\n        r1a0: u384 {\n            limb0: 0xdde88be699f516d731c68610,\n            limb1: 0xce004ded1806688e8e7c458a,\n            limb2: 0x932f3c1c8e56d4b9f19eb7e9,\n            limb3: 0x124f291f47d76455477102fe,\n        },\n        r1a1: u384 {\n            limb0: 0xa97c633609d63d754d4a2692,\n            limb1: 0x3c5ba5df2f9bb1cdcfb55e97,\n            limb2: 0x19aa69b7f4751e5e39459c7e,\n            limb3: 0x3f5780b2dcaccad745e1d15,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6b810adc509554ded3ef3b95,\n            limb1: 0x95284597042e1ecd0726081e,\n            limb2: 0x120e66352bbc0746f23c9af9,\n            limb3: 0x14407db8291afdcc6767f0d6,\n        },\n        r0a1: u384 {\n            limb0: 0x9736d40090182b75e8148929,\n            limb1: 0x3b4a1acb2265372a95f14a8b,\n            limb2: 0x688f573f43a95022122a84f8,\n            limb3: 0x6ee3cecdb39eeaa72352bea,\n        },\n        r1a0: u384 {\n            limb0: 0x86a4ae1d79fed79fda04bb3e,\n            limb1: 0xdbe8a4d79312a8b7bca3137,\n            limb2: 0xb002871665722703632ca373,\n            limb3: 0x6dad85068365251a3070c46,\n        },\n        r1a1: u384 {\n            limb0: 0xe811cc9a481723566332af5c,\n            limb1: 0x5995536393d8252711fa1719,\n            limb2: 0x4b8d398526d9d7803e5e35d0,\n            limb3: 0x9c613e006352ea575d7f10c,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xdd3830612c58d544327ca0f0,\n            limb1: 0x1142cd575c788d8d19a24ba9,\n            limb2: 0x45ea7f0421cb2dd4e5b4ed7b,\n            limb3: 0xfb69c6a2cbfc9dfb9b01427,\n        },\n        r0a1: u384 {\n            limb0: 0x875ab3c75d3a4e43d10b2503,\n            limb1: 0xf7cee1313a095fe9e31b7072,\n            limb2: 0xe85be88d689d67e6e9835268,\n            limb3: 0x10635d3a601f92ab21801ab8,\n        },\n        r1a0: u384 {\n            limb0: 0x9eb9ef4ae7e0f7713d97450c,\n            limb1: 0x8dfc81038830750d79da8b26,\n            limb2: 0xc17475937901d8cadba451ca,\n            limb3: 0x6f9f723841ae3e1a88c34f4,\n        },\n        r1a1: u384 {\n            limb0: 0x71e84e872166781dda7182bc,\n            limb1: 0x9dde7059d6c002a7f762da96,\n            limb2: 0x2b9353ca4892a788389ca0fd,\n            limb3: 0xd413552182113308d1bf463,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x44db5f922ec99665b26634e5,\n            limb1: 0xac41b74d5483c597704eaaac,\n            limb2: 0x550e72e8ac0309c515e3799,\n            limb3: 0x1952ab876a19a0773ce3962,\n        },\n        r0a1: u384 {\n            limb0: 0xf574202e10923244624559cb,\n            limb1: 0xc0f8318a3d481320d441ef0a,\n            limb2: 0xde67bbfe352326e4915e12b3,\n            limb3: 0x961a1762c6fe08878fc48ab,\n        },\n        r1a0: u384 {\n            limb0: 0xf69e2ab32451ecc443146d68,\n            limb1: 0x2d1bd9f71192795f2433de38,\n            limb2: 0x32cd169947d915590eceb231,\n            limb3: 0x5a7c915f44cbc571061b333,\n        },\n        r1a1: u384 {\n            limb0: 0x448a7247da14616d79b68e7e,\n            limb1: 0xec3301200e41cfe8a1eca52c,\n            limb2: 0xdadc3af8cfa96ac54608c965,\n            limb3: 0x17fe1a7c7ee57b63cc748535,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xcc1f58585e1d7b5bd45c4c1f,\n            limb1: 0x745110cbba12e028cd54150c,\n            limb2: 0x2ce6cbed2508c5d828082677,\n            limb3: 0x28a36f542a28f6997a811fc,\n        },\n        r0a1: u384 {\n            limb0: 0x541d567dcc7fbea97520cd94,\n            limb1: 0x65d407bf06f076619981fe2e,\n            limb2: 0xd583e9bfd967becef21bf75f,\n            limb3: 0xac2c40f46751f043fe2833b,\n        },\n        r1a0: u384 {\n            limb0: 0x92c58aae975c98038f79305,\n            limb1: 0x7d1ce0079826b8902c5d46d3,\n            limb2: 0xf99d7ba5cb12513a32fb5eec,\n            limb3: 0x7cc8363ce478f6d8f184c26,\n        },\n        r1a1: u384 {\n            limb0: 0x8397c406c8e69df7b1cea699,\n            limb1: 0x4a543e21f4fd830fab085fcf,\n            limb2: 0x25a94f2ddc7a920fd1361d5b,\n            limb3: 0x16a2f7057acf7d7df785557d,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xd795ec8c32c9ebd1bf9f74d6,\n            limb1: 0x7f585c54a0e235a718bb6927,\n            limb2: 0xdbb23b0ee0a160580fc4c61d,\n            limb3: 0x18cc0bda792f81e333e2b374,\n        },\n        r0a1: u384 {\n            limb0: 0xc46a2a7c259ebd088ce10740,\n            limb1: 0xe6a830b64d605c010a76076e,\n            limb2: 0xb1a119cfe08d1632021fc196,\n            limb3: 0xb9b519b9c1bb0eb41e2ce4e,\n        },\n        r1a0: u384 {\n            limb0: 0x345bf7846f464a931457dfde,\n            limb1: 0xc8fc5238edd2d7260a066bbf,\n            limb2: 0x2523af32173eba316f128bd7,\n            limb3: 0x32a68698a38598bd123d251,\n        },\n        r1a1: u384 {\n            limb0: 0x2224558439f158cbcf42da7c,\n            limb1: 0x387b507d6f0320a9a2e44e6f,\n            limb2: 0xb29b2f37752d24d3fed9a8ea,\n            limb3: 0x168e24551680276e33346c1b,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf8c9e8b4405badfa94226735,\n            limb1: 0xe35370c03766b0439ba9bc0c,\n            limb2: 0xefd8d2d0063990aea5570748,\n            limb3: 0x125e8f976f7536a2e85ea3cf,\n        },\n        r0a1: u384 {\n            limb0: 0x8f2d3d1bd687824c71ce27fa,\n            limb1: 0xd5946aef2f36a4cb42aee9b,\n            limb2: 0xce15918bb8dbd901b9685864,\n            limb3: 0xc0299d504b8b7bb5ff23b7f,\n        },\n        r1a0: u384 {\n            limb0: 0x9a63e8f36e7127f93b5fab1e,\n            limb1: 0x52d9ab603e72bca7b8fc5284,\n            limb2: 0x8f734c44e7ba040f4a30952b,\n            limb3: 0x1478222c63826742286f720,\n        },\n        r1a1: u384 {\n            limb0: 0x57fd0e62234f512c20e97da2,\n            limb1: 0x876dd44c8838d26ecfad71b0,\n            limb2: 0x9c591e15eb6492035916a674,\n            limb3: 0x13830268b58006ff03775156,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xb2877a8ff989a065c386a33e,\n            limb1: 0x13d2429550f4e9f72e2e2cec,\n            limb2: 0xbcf8cd1b0cbec3511e153d8a,\n            limb3: 0xcd008fe35f202ded141f6f0,\n        },\n        r0a1: u384 {\n            limb0: 0xcc3d9d00a942a5ab992f4ac8,\n            limb1: 0xf81023268498efbea7a1843f,\n            limb2: 0x561d9f10a4eaf5e417d1ccda,\n            limb3: 0x10ab00007abd04f36507cb22,\n        },\n        r1a0: u384 {\n            limb0: 0x9b8b1ab2cc4aee0c67d4c474,\n            limb1: 0x9840dfe76cc0dc415191c5c,\n            limb2: 0x91cbd5473dbc72261d57d8f6,\n            limb3: 0xd47a27fa79ac6ddfb973c4b,\n        },\n        r1a1: u384 {\n            limb0: 0x827056816dae6b0f4c06657b,\n            limb1: 0x8112aa8d965353f81dd65054,\n            limb2: 0x8c1382e0bed39f3950578dc3,\n            limb3: 0x135456e60f547393ecee80e,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5863cf017f4f31c0054a3612,\n            limb1: 0x5a1ef8d1d2c315dd8bc6212,\n            limb2: 0xe33ed175b6d1a029dda7c9aa,\n            limb3: 0x182115eb42220d34f08e487d,\n        },\n        r0a1: u384 {\n            limb0: 0xb90bfad204b39a3cbcac7b4,\n            limb1: 0x73b8d9e10bc6022a0994e39a,\n            limb2: 0x7f5daebc21a409de8913242d,\n            limb3: 0xfc2db9cb25d08faf7c832,\n        },\n        r1a0: u384 {\n            limb0: 0x26d0221ad0d5ae39d7d33a8,\n            limb1: 0xbae8e0d584ccaa52aeab179,\n            limb2: 0x59de453ae38340185debc29f,\n            limb3: 0xc5a021a1d3134aa31cb39ed,\n        },\n        r1a1: u384 {\n            limb0: 0x7472a64d3fccc64229059166,\n            limb1: 0x361a6711e93f12f3d1cb0320,\n            limb2: 0x6bf192bb96314516f10b7449,\n            limb3: 0xcaf028327c4bc3f8af13387,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9fbb07d0355fee63ff3debeb,\n            limb1: 0x91896030dd9d9080099fb74,\n            limb2: 0x26da14875766e45e86646226,\n            limb3: 0x107179b36f3ec30ed0344ffb,\n        },\n        r0a1: u384 {\n            limb0: 0x749309e43489bf57b329ac54,\n            limb1: 0x88c5acfe2820fe65ec92ff05,\n            limb2: 0xef5d77580008d71e56cfd7c2,\n            limb3: 0x8347995c6bfa9cbd21c0831,\n        },\n        r1a0: u384 {\n            limb0: 0x3348804de4e8c0987c6280f3,\n            limb1: 0xcfc8dd305e856fb4f80eda08,\n            limb2: 0xb7eda62f28c44f9b55da9809,\n            limb3: 0x6c1e0756ca916fe6d0f1453,\n        },\n        r1a1: u384 {\n            limb0: 0xecb36186ff6abf0ccb74caa,\n            limb1: 0xee68730c0709c13875980d99,\n            limb2: 0xdfb34758f87146c601b8e8df,\n            limb3: 0x1179b833f2d1129d7dd26307,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xd53473f5ac7b5e99de412ea4,\n            limb1: 0xf6c216059e7a2a6b1a09d23c,\n            limb2: 0x5de59d8956f5a84da299063e,\n            limb3: 0x159ff2806d40ff15099d5204,\n        },\n        r0a1: u384 {\n            limb0: 0xfdccb0d7c9716c23df3ced8f,\n            limb1: 0x14e4ca22ebdbc559a20177,\n            limb2: 0x5b60b25f325eb68e4cbd45d,\n            limb3: 0x69a7d5ac5a38cce584e0b0f,\n        },\n        r1a0: u384 {\n            limb0: 0x903bac45b703185c327d9669,\n            limb1: 0xe524dad4130c677c5a3b0f31,\n            limb2: 0x11518ec180b31fd2f516e8b1,\n            limb3: 0x29448dd80ce3c75c8b0d685,\n        },\n        r1a1: u384 {\n            limb0: 0x134286c732f95142935a2a98,\n            limb1: 0xc493200ca6cd119550bafdd3,\n            limb2: 0x7008cba4cae32054d22edea4,\n            limb3: 0x15da5ffa50e36869f0f2ac43,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x699dddd0ce8eee874e7798d1,\n            limb1: 0x5c3572d1a0e33576c5f95af6,\n            limb2: 0x71a239e87768b6642c64c2d5,\n            limb3: 0x193a4a988589350e15df6be4,\n        },\n        r0a1: u384 {\n            limb0: 0xa05a3143096e2700aaf1ae18,\n            limb1: 0xdaee1baed61a3dc26f6005fc,\n            limb2: 0xed7d52756e553a1adfd2b266,\n            limb3: 0x1839757d13d8b73a5c23e083,\n        },\n        r1a0: u384 {\n            limb0: 0x94b6d2f8ced6ba40bea83ca,\n            limb1: 0xfe22edaeb3c651a53c333676,\n            limb2: 0xb7a1df3d2dcc34ad47dfbaf0,\n            limb3: 0x81b823ad97ad3e98bcb93c8,\n        },\n        r1a1: u384 {\n            limb0: 0xef6f0e083b916a69a01c63e9,\n            limb1: 0x8aedc8c1d6429b10db98ac62,\n            limb2: 0xe6834dcabb9dccf40dbf34db,\n            limb3: 0x15b856909992c27268ce5b40,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x5edf9450f71e9104f1c374e9,\n            limb1: 0xcfd112580006deba5077fd8a,\n            limb2: 0x289c80bcf75761bc030bda9d,\n            limb3: 0x142182d337d4bdd0a9dc0152,\n        },\n        r0a1: u384 {\n            limb0: 0xe3f1affdcbbd3809a6881f8e,\n            limb1: 0x55f40359611c687f96c91dbe,\n            limb2: 0xb90435a9e7260873c34a0cd4,\n            limb3: 0x113f465ca312058e0cd541d6,\n        },\n        r1a0: u384 {\n            limb0: 0x85f3a8c5d4928087f1ef8229,\n            limb1: 0x62e48188da4d79f1a88f24ba,\n            limb2: 0x58691c7e87e7ecb6e855a469,\n            limb3: 0x25bacfd7256f159ca3eb0e5,\n        },\n        r1a1: u384 {\n            limb0: 0xfc830160c50a4b17a2dde63b,\n            limb1: 0x1bf46813a25e8e58ff928d53,\n            limb2: 0xe63b74e85e2032c28808627d,\n            limb3: 0x9e218f143196d00fadb36c6,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x4f15d4ea3546d4dd322abb1,\n            limb1: 0x46cffe5c562a996207d85447,\n            limb2: 0x127c1b2c8327db270f3fc752,\n            limb3: 0x5b1382a51a78623e84b171c,\n        },\n        r0a1: u384 {\n            limb0: 0x8dbc701d130e40ed21a9da2c,\n            limb1: 0xadd725634588d75b24dd8c16,\n            limb2: 0x80337504d4d5f8357c9b9979,\n            limb3: 0x9c23058c09980827954110a,\n        },\n        r1a0: u384 {\n            limb0: 0xe1d3592b03a3a53ee550de4a,\n            limb1: 0x34de8376defeb78769a53926,\n            limb2: 0x4a37ac77bdc2eb742a373cf1,\n            limb3: 0x152f467c23ef37b4010839bf,\n        },\n        r1a1: u384 {\n            limb0: 0xcb4d3b94794186d8bfb77400,\n            limb1: 0x7fd7599edba1d571d111a2d0,\n            limb2: 0x3a0264b8ec2890555793b361,\n            limb3: 0x17f63a07328a47cdf24b7754,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x2639eca99f5b1f6e6d095faa,\n            limb1: 0x7322d2c5cd33e33d6fd2e0ca,\n            limb2: 0x1c7bca0054ff60c0db156676,\n            limb3: 0x10933118bcf1940615957a6c,\n        },\n        r0a1: u384 {\n            limb0: 0x43e0d74cf14359d83cc60326,\n            limb1: 0x3d49af8c8914a76283667614,\n            limb2: 0xc090bf9a071c2af83528b361,\n            limb3: 0x14ef91f0b47d2bf1313ba159,\n        },\n        r1a0: u384 {\n            limb0: 0xe45466ca7f8b6f5920570127,\n            limb1: 0x1554654b09b57871c2ba8a9b,\n            limb2: 0xf66b8bb3a005585c18db86b0,\n            limb3: 0xd28c63f8635e2ca59c7dc45,\n        },\n        r1a1: u384 {\n            limb0: 0xdc559ff81728e932b3c79d12,\n            limb1: 0xec4893ef0a2c9367a4d736d6,\n            limb2: 0x8b0a21bcded904e222dbf14b,\n            limb3: 0x8c51553f23145b85ca33fbe,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xf5058204afaec6f2464c5a13,\n            limb1: 0x515da6bfc23ebf6f53f6b55b,\n            limb2: 0xe97a11e04bb36b2059446a4c,\n            limb3: 0x12fc97a16defdc7adc7476f9,\n        },\n        r0a1: u384 {\n            limb0: 0x980b9772f15c2485344735fc,\n            limb1: 0xe64c7342b28e77acf36d03da,\n            limb2: 0xefd0a557cd8909bc5c9e7baf,\n            limb3: 0xbee5b30e2c4af8e16809197,\n        },\n        r1a0: u384 {\n            limb0: 0x5fe61e5a5909262f7cad99ed,\n            limb1: 0xccf8e0ad8f3dba3dbeb8ec43,\n            limb2: 0x10378ef14243abc565883a1b,\n            limb3: 0x209e28d5551008fd8c913d6,\n        },\n        r1a1: u384 {\n            limb0: 0x31bad5bcd6808dcb2e85caf,\n            limb1: 0xd37414833b060119d1f174a3,\n            limb2: 0xd4f73e90a51a3acc4ae687fd,\n            limb3: 0x18dc062c90db3cd1d20a7de1,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x7a3deb7872768f839060087e,\n            limb1: 0xae5017af4c09ed67c5c2e525,\n            limb2: 0xef2bbb3e118498031e2471f,\n            limb3: 0x5cf357e8473bba00386d238,\n        },\n        r0a1: u384 {\n            limb0: 0x3b373a0d0a649113f5c7b2fe,\n            limb1: 0xa3913baa2c3f8f7499ac76a6,\n            limb2: 0x425aed5972aa5f4b4d21ffc7,\n            limb3: 0x82938f41814229b1224b32b,\n        },\n        r1a0: u384 {\n            limb0: 0x5b130ec9295aaeb79868e7d6,\n            limb1: 0xda6c9ffb04ff597a83b36114,\n            limb2: 0xc09586dc17dbca59627bbce4,\n            limb3: 0xd8431f93c66d78cf5b81228,\n        },\n        r1a1: u384 {\n            limb0: 0xe35d56023ffa020c373e6d85,\n            limb1: 0x22972df9b6181d6397c5ee58,\n            limb2: 0x933a967160fc487717775d67,\n            limb3: 0x19c24474e43b997ab5364a65,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x39d9f0ce211a75081a35cffc,\n            limb1: 0xd3f3a394f77ca3a98e93c5df,\n            limb2: 0x85eb00d07fe02bd29ac2a3c6,\n            limb3: 0xb7b0d2db2cffcae60d0ecf6,\n        },\n        r0a1: u384 {\n            limb0: 0x6117d9f54ded251ed87dcdbd,\n            limb1: 0x1eb6b7f8ce40fd2cfe030d6a,\n            limb2: 0xeed76c5b0d292777e93e9282,\n            limb3: 0xdcf9ee4e619ac48372a1fd5,\n        },\n        r1a0: u384 {\n            limb0: 0xa9e439e749d4fc1bea4f893f,\n            limb1: 0x3a33e93d4e73b675790a1df8,\n            limb2: 0xdfc3e8f4f8f506c7c6669428,\n            limb3: 0x11adba6387d459f7f991ac32,\n        },\n        r1a1: u384 {\n            limb0: 0x35efe895ea1509c6b6db31f1,\n            limb1: 0xeba2f9e1733b61d399cbe43d,\n            limb2: 0xe0ca6d0d6d5e4e234334bc4b,\n            limb3: 0x1641a68f159d661c924ca1ca,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6acbdd11b2e3bf3c4e9a8fc7,\n            limb1: 0xa65c7c83d9e863106be2e6e,\n            limb2: 0xba622ef466154b88c6206dc0,\n            limb3: 0x13847679c97ef8978b3f64c9,\n        },\n        r0a1: u384 {\n            limb0: 0xa29270a27fe8eff7ff52747,\n            limb1: 0x1b86d1ea5e2cb0e565695293,\n            limb2: 0x5d46595304e94133e1524dc4,\n            limb3: 0x5c65be3c6a8b37e95aaa472,\n        },\n        r1a0: u384 {\n            limb0: 0x4c113034a2b4e8c08494656,\n            limb1: 0x113bdfa06dc6105f0cee337c,\n            limb2: 0x5ab2297e7c609e4044c01f70,\n            limb3: 0xe5ba46e7903db0416c5e85d,\n        },\n        r1a1: u384 {\n            limb0: 0x1af25f25f85e2fe5769d4db0,\n            limb1: 0xc25dd758f010619bdce139cb,\n            limb2: 0x539682ada1e9af81af49cbb4,\n            limb3: 0x63c25d8d6ffab7a17da8252,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x2afd7a503f72962b8035ef56,\n            limb1: 0x741a2724c626c073fcb7cb01,\n            limb2: 0xa954f9a9959cbbcf41765c4c,\n            limb3: 0xd255d019186fe50bbb4abdb,\n        },\n        r0a1: u384 {\n            limb0: 0xe1247719764debd50fb297b1,\n            limb1: 0x1c85bc8240e9013aa086e724,\n            limb2: 0x2bac98861c64cbbfaf10dfe5,\n            limb3: 0x17887473079a17d6114873ff,\n        },\n        r1a0: u384 {\n            limb0: 0xb40da2a4cd71fa1185ef523a,\n            limb1: 0xb9b730fd2eea88566c9d4152,\n            limb2: 0x3c384a7436df1edb029d3aed,\n            limb3: 0x89d99706a83aba945d7b48a,\n        },\n        r1a1: u384 {\n            limb0: 0x6576e31328774ef164f99920,\n            limb1: 0x3e722659df78ce6e6d049703,\n            limb2: 0xc5d56c8d8e6603bf62c90b81,\n            limb3: 0xf58e0aa466c88aa025b6401,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xee48f089c7a4594a201092eb,\n            limb1: 0xc9d8a7b7d87389e25b856b97,\n            limb2: 0x74d54bf4748e38d3b2c782b3,\n            limb3: 0x78af2f8549231aa92bba1b3,\n        },\n        r0a1: u384 {\n            limb0: 0x61acc46ca422be84be4fee75,\n            limb1: 0xf425406455688e07fe496eb2,\n            limb2: 0x1151b627d67176b268c6b18b,\n            limb3: 0x157a7e87571314c4eeffcc64,\n        },\n        r1a0: u384 {\n            limb0: 0xd95d245c747804a8f3bd59ab,\n            limb1: 0xb3c7108b5d8ce6d797a8ab29,\n            limb2: 0x452fc047d47ec02830b1b9c1,\n            limb3: 0x12ea35020ddc17232447b57c,\n        },\n        r1a1: u384 {\n            limb0: 0xb027d5b2037b8170fb63b93a,\n            limb1: 0xf317c06fee2a5ef8113fd9d3,\n            limb2: 0xdd1a58fc8de1d70f065c435c,\n            limb3: 0x11d55ce218987319447cc925,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xbda20eba312f5ae4b8188dd6,\n            limb1: 0xed6b03a1b59cdf81e337466,\n            limb2: 0x13f52774d5df8f2b53b3f9a3,\n            limb3: 0xa84369f18ef0ea7ea78978b,\n        },\n        r0a1: u384 {\n            limb0: 0xd89f88c20cdd1be266384948,\n            limb1: 0xb260d5b59d68bd6ce061618b,\n            limb2: 0xc706ec3e85485a7d5d2746c8,\n            limb3: 0x3610ae9e586990c2332a60b,\n        },\n        r1a0: u384 {\n            limb0: 0xaa640e2e801a15e4d8aa9343,\n            limb1: 0xce786976554ab6ed66b66295,\n            limb2: 0x1dbbe2c4c4a66f2fef9f4df,\n            limb3: 0x1599a1020ad879a8517215c8,\n        },\n        r1a1: u384 {\n            limb0: 0x68f8ce25afd5a01fa9437698,\n            limb1: 0xf218ff065be19aa212e05aa2,\n            limb2: 0xa0d7125cba24d5c3b3426602,\n            limb3: 0x1f4d34e061c1928106f603,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x1b9ff207335fcb7b28f48654,\n            limb1: 0xaa059fc26f53a4b15d861e5d,\n            limb2: 0x7409e84a31ef57e217e3d45d,\n            limb3: 0x8f022244af0b719146e8cfb,\n        },\n        r0a1: u384 {\n            limb0: 0x1fa9d79eb0320e586c2d096a,\n            limb1: 0x8fde2d5c9ef41c1612865896,\n            limb2: 0xec88b9f86c99799b380ebac9,\n            limb3: 0x72c117c18b8dfa89321c27c,\n        },\n        r1a0: u384 {\n            limb0: 0x4570eb295684cad19e7cfded,\n            limb1: 0x2e204f8114c805f866cca868,\n            limb2: 0xba0509fc0eea7cc65c8b3dee,\n            limb3: 0xc7c1e717bb7b078054d3851,\n        },\n        r1a1: u384 {\n            limb0: 0x25eb9fba51d76d2292c1e2bf,\n            limb1: 0xa43de47dba6db4c3e5c3d8b8,\n            limb2: 0x365ea08af8998db774b8b61e,\n            limb3: 0x6367ffd71d3c44095424fc7,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x2ad35ec942a6dc10be32da05,\n            limb1: 0xb889a7f8c178610e41752e60,\n            limb2: 0x130ac19123ef4bc5eff163aa,\n            limb3: 0xc1c8933b8eca116c8c32c9e,\n        },\n        r0a1: u384 {\n            limb0: 0x9b46883056c4f426647a0d1f,\n            limb1: 0x2bc81e6550613b15475cad1f,\n            limb2: 0x5c12a15bc536b16c6c8b1118,\n            limb3: 0x1116e31db9a099b5941e7fe9,\n        },\n        r1a0: u384 {\n            limb0: 0x1b8184a1d9bad5d268b10d3e,\n            limb1: 0xc8196d57732ebf89f6ce1ee6,\n            limb2: 0xd34c8b394f605c9bc52280cd,\n            limb3: 0x14b9a6056022227937d6c4ee,\n        },\n        r1a1: u384 {\n            limb0: 0xbcbfa6c19991f2a6202faa84,\n            limb1: 0xf3a30cde404074949784fb8a,\n            limb2: 0x6bd69539f118c993bb469b75,\n            limb3: 0x3c8a54c44f16bc3e22144e4,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xd8934218abbe5eda42e0374,\n            limb1: 0x4efa70797ab04d5777f18cae,\n            limb2: 0x657bd72dc32622552c01c3a1,\n            limb3: 0x86675ec3781ecc255b9b8f,\n        },\n        r0a1: u384 {\n            limb0: 0xdb3cdd784259d6f00a05188,\n            limb1: 0x4d7d18f24dc5139d8829c6be,\n            limb2: 0x9067fb6cb2810aa19e5e838d,\n            limb3: 0x99b7b955ea60c02306dd019,\n        },\n        r1a0: u384 {\n            limb0: 0x9569e6a9a6dfc936dc66c37d,\n            limb1: 0x8ce5600bf62265cce1600d14,\n            limb2: 0xe437be1358f94ae1da7ba693,\n            limb3: 0x26001dbd81fb98024703f0a,\n        },\n        r1a1: u384 {\n            limb0: 0x38347efb475ef26461922ce8,\n            limb1: 0x434f13930fd2a42336fc5a71,\n            limb2: 0xa611a973d0bf99e3535651af,\n            limb3: 0xf623d241cf8d903d2d48305,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x721021ae8a4f50730c3d67dc,\n            limb1: 0x879473ae153c9a3634074832,\n            limb2: 0x37c1a1dc9eb1835b698836b1,\n            limb3: 0x103fc06c9853a3f7112aab36,\n        },\n        r0a1: u384 {\n            limb0: 0xabcfe33c5665f550278d61b4,\n            limb1: 0x9225061eb88a19059c6a5f6b,\n            limb2: 0xfea771c15b736bb9dfd64611,\n            limb3: 0x115d2632ad3a29006e1392bf,\n        },\n        r1a0: u384 {\n            limb0: 0x656457e64c7777c11b84156b,\n            limb1: 0xead830ab7644411a1795ddf3,\n            limb2: 0xbd12c37bb1cbd056fc94cd13,\n            limb3: 0x1698578bd5388b5de2eb808f,\n        },\n        r1a1: u384 {\n            limb0: 0xa3f77a7e2e3af21dabc4871,\n            limb1: 0x170f78723c727fb4bbc4b4a9,\n            limb2: 0x7090ee848cbc35a8f11b2354,\n            limb3: 0xc8b6a3068cd96500af13493,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x7464425eeb75a1d3a3486fba,\n            limb1: 0xd4f0931c31459109811008d1,\n            limb2: 0x5aac0cfc9b43343826136afb,\n            limb3: 0xf16056dd2e8b5f8240d4ac7,\n        },\n        r0a1: u384 {\n            limb0: 0xee0993ef125a22747400b5ea,\n            limb1: 0x438805278ea9e18b001cf7da,\n            limb2: 0x11c5cbb3ae17332e06f5b415,\n            limb3: 0x134957b7abe963c5d074abc9,\n        },\n        r1a0: u384 {\n            limb0: 0xacf8eb684fdd044dd83f813e,\n            limb1: 0xcb5dae51f81a4969f0370c67,\n            limb2: 0x491fc4a63ef64f17b8aa0d30,\n            limb3: 0x188b4199d41c95a7991f2d89,\n        },\n        r1a1: u384 {\n            limb0: 0x1f69582489be9a39cb94c326,\n            limb1: 0xdfa20ef759cc430ed060c20b,\n            limb2: 0xeab00aeca148c6a408bcd34a,\n            limb3: 0xd6a605bcb73c8061942fb57,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x6773468ba72e40777baeb8f0,\n            limb1: 0x570d2473b46fc08824285612,\n            limb2: 0xd6ad952f46006fb353d86e0b,\n            limb3: 0xa08d2c3726cf2aff2c088d6,\n        },\n        r0a1: u384 {\n            limb0: 0xa416cc264e8202431a4e991d,\n            limb1: 0xf5a5787c840a815dfa522b31,\n            limb2: 0xe711bc925aba1a74b7b4d4aa,\n            limb3: 0x868f9c19f9d55b3b7ccd898,\n        },\n        r1a0: u384 {\n            limb0: 0x7baf6a74c7f41953cea5e439,\n            limb1: 0xcb2fed5cedcf58101434abc1,\n            limb2: 0x7393a96a373c39a66a6c8834,\n            limb3: 0xb23fcd989611b241a4105b,\n        },\n        r1a1: u384 {\n            limb0: 0x555b817d72aebd2464a2d59b,\n            limb1: 0xe7fd327dcbec3232500cda76,\n            limb2: 0x10b589891b97aaf0c7a54d85,\n            limb3: 0xbd9efb2a7eedeb7323cb190,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xed72eccb4e30eeaf3b992446,\n            limb1: 0x14e0585cd696c72e9adb4736,\n            limb2: 0x7df5eabb84672fab4d4a6e10,\n            limb3: 0x2d6c8112234d7f18ea478ea,\n        },\n        r0a1: u384 {\n            limb0: 0x95586dac212579b39f39df97,\n            limb1: 0xff0488c63a739029f85aec22,\n            limb2: 0x38ce286aeea4511ddcb23d59,\n            limb3: 0x444323d14c7a3549b9f6b27,\n        },\n        r1a0: u384 {\n            limb0: 0xac929d1bb6bfa0df5bd0b951,\n            limb1: 0x9a5e39e018083d89aeeaee3d,\n            limb2: 0xc84698d95675ba2c1b93662e,\n            limb3: 0xa82a23fd9338c15ba09139b,\n        },\n        r1a1: u384 {\n            limb0: 0x8a89d4ebf46cc78b9a67add2,\n            limb1: 0x1761e578b693547ecbf4817f,\n            limb2: 0xbd9d23d081864a636a27dce,\n            limb3: 0x40d68a72ee4363db50d3c92,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x9cdba5cfbe0205d55df33685,\n            limb1: 0x8a416e1681ead82ad2711fef,\n            limb2: 0xd94faace2b1209807fbb9edd,\n            limb3: 0xd1755cae5ede1642897673f,\n        },\n        r0a1: u384 {\n            limb0: 0x352a420344ca83dd4e252c7,\n            limb1: 0xcbcde81ff301c244dc5e006,\n            limb2: 0xa54df6ee2561e110ee674e3e,\n            limb3: 0x18ad276363a6d2c576fc7d75,\n        },\n        r1a0: u384 {\n            limb0: 0x17901b259f213203281dfa4e,\n            limb1: 0xdca6f358c344dba951e904f0,\n            limb2: 0x68be1f2f4a49c00264212bb,\n            limb3: 0xf39b5af5b74e8e45b8940b,\n        },\n        r1a1: u384 {\n            limb0: 0xe2032cd4d375921e86fdc082,\n            limb1: 0x90f0cda4fe6f4bedd1c3872d,\n            limb2: 0x9236c612070666c5139ec1cf,\n            limb3: 0x16eecd9e2f41fc13c0b1678d,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0xbdda2d3c31051f4071ae2945,\n            limb1: 0xbc66726ddee31b37d058d7e5,\n            limb2: 0x9f4eb741ac78b510ccf452ab,\n            limb3: 0x65fb0c0d47de8795557bd2f,\n        },\n        r0a1: u384 {\n            limb0: 0xb9c37518dd4a05df7a4d6dc1,\n            limb1: 0xd4ee64da91ea67b8a4525b4,\n            limb2: 0x73a813ffff40ee810a12214b,\n            limb3: 0x7f9fda3fa03c5295720441d,\n        },\n        r1a0: u384 {\n            limb0: 0xaa6d391bd6b4113145484e4f,\n            limb1: 0x86d3fa56727d8879496d1827,\n            limb2: 0x71223351a13a9577646c0ec3,\n            limb3: 0x5c4513dff602b8ec227f711,\n        },\n        r1a1: u384 {\n            limb0: 0xb9b127f0cbfc3172bba7a933,\n            limb1: 0x10d730ec07d1e0f84c5c6c34,\n            limb2: 0x693e354e2246bf96f3ebf563,\n            limb3: 0x1163f7e15fbd10f4086aad86,\n        },\n    },\n    G2Line {\n        r0a0: u384 {\n            limb0: 0x95151ea18c775b54deb3d8d2,\n            limb1: 0x12d5d14c1a1e5e441f80f7f0,\n            limb2: 0x441e9ed1c76ca5b0a9a2c673,\n            limb3: 0x5ed345d22ce7a2820a566a6,\n        },\n        r0a1: u384 {\n            limb0: 0x85f7fcc07f1acb58e2b2b71d,\n            limb1: 0xf54880edf6b069d9be9739e7,\n            limb2: 0xb25f1683eedccd9cddb2592e,\n            limb3: 0x1287330ba9caab2bef8676e5,\n        },\n        r1a0: u384 {\n            limb0: 0x418096781d6bdd8438f7d0fa,\n            limb1: 0xde2b0883a520a29780fe7f9,\n            limb2: 0x858acb343f8b338095664988,\n            limb3: 0x1213109d451b7b62be0e7837,\n        },\n        r1a1: u384 {\n            limb0: 0x13c30921c6ad44eef236dc4e,\n            limb1: 0x97d1525a1c3fa2dfe5f32aa7,\n            limb2: 0x7071a595e981dc71b225c544,\n            limb3: 0x6f31cf2562cca8a820178ab,\n        },\n    },\n];\n"
  },
  {
    "path": "src/contracts/drand_quicknet/src/lib.cairo",
    "content": "pub mod drand_verifier;\nmod drand_verifier_constants;\n"
  },
  {
    "path": "src/contracts/mutator_set/.tool-versions",
    "content": "starknet-foundry 0.57.0\nscarb 2.16.1\n"
  },
  {
    "path": "src/contracts/mutator_set/Makefile",
    "content": "regen:\n\tpython3 ./scripts/regenerate_verifier.py\n\n\nNOIR_FOLDER = \"zk_program\"\n\nbuild:\n\tcd ${NOIR_FOLDER} && nargo build && nargo execute witness\n\nprove:\n\tcd ${NOIR_FOLDER} && bb prove -s ultra_honk --oracle_hash keccak -b ./target/zk_program.json -w ./target/witness.gz -o ./target/\n\nverify:\n\tcd ${NOIR_FOLDER} && bb verify -s ultra_honk -p ./target/proof -k ./target/vk --oracle_hash keccak\n"
  },
  {
    "path": "src/contracts/mutator_set/Scarb.toml",
    "content": "[package]\nname = \"mutator_set\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n# See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html\n\n[dependencies]\nstarknet = \"2.16.1\"\ngaraga = { path = \"../../\" }\n\n[dev-dependencies]\nsnforge_std = \"0.57.0\"\nassert_macros = \"2.16.1\"\n\n[cairo]\nsierra-replace-ids = false\n\n[[target.starknet-contract]]\nsierra = true\n\n[scripts]\ntest = \"snforge test\"\n\n[tool.scarb]\nallow-prebuilt-plugins = [\"snforge_std\"]\n\n# Visit https://foundry-rs.github.io/starknet-foundry/appendix/scarb-toml.html for more information\n\n# [tool.snforge]                                             # Define `snforge` tool section\n# exit_first = true                                          # Stop tests execution immediately upon the first failure\n# fuzzer_runs = 1234                                         # Number of runs of the random fuzzer\n# fuzzer_seed = 1111                                         # Seed for the random fuzzer\n\n# [[tool.snforge.fork]]                                      # Used for fork testing\n# name = \"SOME_NAME\"                                         # Fork name\n# url = \"http://your.rpc.url\"                                # Url of the RPC provider\n# block_id.tag = \"latest\"                                    # Block to fork from (block tag)\n\n# [[tool.snforge.fork]]\n# name = \"SOME_SECOND_NAME\"\n# url = \"http://your.second.rpc.url\"\n# block_id.number = \"123\"                                    # Block to fork from (block number)\n\n# [[tool.snforge.fork]]\n# name = \"SOME_THIRD_NAME\"\n# url = \"http://your.third.rpc.url\"\n# block_id.hash = \"0x123\"                                    # Block to fork from (block hash)\n\n# [profile.dev.cairo]                                        # Configure Cairo compiler\n# unstable-add-statements-code-locations-debug-info = true   # Should be used if you want to use coverage\n# unstable-add-statements-functions-debug-info = true        # Should be used if you want to use coverage/profiler\n# inlining-strategy = \"avoid\"                                # Should be used if you want to use coverage\n\n# [features]                                                 # Used for conditional compilation\n# enable_for_tests = []                                      # Feature name and list of other features that should be enabled with it\n"
  },
  {
    "path": "src/contracts/mutator_set/scripts/prover.py",
    "content": "import os\nfrom dataclasses import dataclass\nfrom typing import List\n\nimport toml\n\nMAX_PEAKS = 32\nMAX_PROOF_DEPTH = 32\n\n\n@dataclass\nclass StorageElement:\n    hash: str\n\n\n@dataclass\nclass Proof:\n    len: str\n    storage: List[StorageElement]\n\n\n@dataclass\nclass ProverConfig:\n    leaf_index: str\n    leaf_premiage: str\n    num_leafs: str\n    peaks: List[str]\n    root_hash: str\n    proof: Proof\n\n    def to_dict(self) -> dict:\n        \"\"\"Convert the dataclass to a dictionary format suitable for TOML serialization.\"\"\"\n        return {\n            \"leaf_index\": self.leaf_index,\n            \"leaf_premiage\": self.leaf_premiage,\n            \"num_leafs\": self.num_leafs,\n            \"peaks\": self.peaks,\n            \"root_hash\": self.root_hash,\n            \"proof\": {\n                \"len\": self.proof.len,\n                \"storage\": [{\"hash\": s.hash} for s in self.proof.storage],\n            },\n        }\n\n    def save_to_toml(self, filepath: str) -> None:\n        \"\"\"Save the configuration to a TOML file.\"\"\"\n        config_dict = self.to_dict()\n        with open(filepath, \"w\") as f:\n            toml.dump(config_dict, f)\n\n    @classmethod\n    def load_from_toml(cls, filepath: str) -> \"ProverConfig\":\n        \"\"\"Load configuration from a TOML file.\"\"\"\n        with open(filepath, \"r\") as f:\n            config_dict = toml.load(f)\n\n        # Convert the dictionary back to ProverConfig\n        proof_dict = config_dict[\"proof\"]\n        storage = [StorageElement(hash=s[\"hash\"]) for s in proof_dict[\"storage\"]]\n        proof = Proof(len=proof_dict[\"len\"], storage=storage)\n\n        return cls(\n            leaf_index=config_dict[\"leaf_index\"],\n            leaf_premiage=config_dict[\"leaf_premiage\"],\n            num_leafs=config_dict[\"num_leafs\"],\n            peaks=config_dict[\"peaks\"],\n            root_hash=config_dict[\"root_hash\"],\n            proof=proof,\n        )\n\n\ndef create_default_config() -> ProverConfig:\n    \"\"\"Create a default configuration matching the example Prover.toml.\"\"\"\n    storage_elements = [StorageElement(hash=\"0\") for _ in range(MAX_PROOF_DEPTH)]\n    storage_elements[1] = StorageElement(\n        hash=\"0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864\"\n    )\n\n    peaks = (\n        [\"0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1\"]\n        + [\"0x0\"]\n        + [\"0x0\"] * (MAX_PEAKS - 2)\n    )\n\n    return ProverConfig(\n        leaf_index=hex(2),\n        leaf_premiage=hex(0),\n        num_leafs=hex(5),\n        peaks=peaks,\n        root_hash=\"0x1ba30aaf15c7694786a1f118ca39fcc6c997b48da9dfa62e9ec3e83ac7d6304d\",\n        proof=Proof(len=hex(2), storage=storage_elements),\n    )\n\n\nif __name__ == \"__main__\":\n    # Example usage\n    config = create_default_config()\n\n    # Save to TOML\n    output_path = os.path.join(\n        os.path.dirname(os.path.dirname(__file__)), \"zk_program\", \"Prover.toml\"\n    )\n    config.save_to_toml(output_path)\n    print(f\"Saved configuration to {output_path}\")\n\n    # Load from TOML\n    loaded_config = ProverConfig.load_from_toml(output_path)\n    print(\"Successfully loaded configuration from TOML\")\n"
  },
  {
    "path": "src/contracts/mutator_set/scripts/regenerate_verifier.py",
    "content": "import logging\nimport os\nimport subprocess\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Optional\n\nfrom garaga.starknet.cli.utils import create_directory\nfrom garaga.starknet.honk_contract_generator.generator_honk import (\n    HonkVk,\n    ProofSystem,\n    gen_honk_verifier_files,\n)\n\n# Configure logging\nlogging.basicConfig(\n    level=logging.INFO, format=\"%(asctime)s - %(levelname)s - %(message)s\"\n)\nlogger = logging.getLogger(__name__)\n\n\n@dataclass\nclass VerifierConfig:\n    \"\"\"Configuration for verifier generation.\"\"\"\n\n    program_name: str = \"zk_program\"\n    bb_path: str = \"bb\"\n    scheme: str = \"ultra_honk\"\n    oracle_hash: str = \"keccak\"\n    proof_system: ProofSystem = ProofSystem.UltraKeccakZKHonk\n\n    @property\n    def paths(self) -> dict:\n        \"\"\"Get all relevant paths based on the script location.\"\"\"\n        script_dir = Path(__file__).parent\n        project_root = script_dir.parent\n        return {\n            \"noir_program_dir\": project_root / self.program_name,\n            \"target_dir\": project_root / self.program_name / \"target\",\n            \"verifier_dir\": project_root / \"src\" / f\"zk_verifier\",\n            \"lib_cairo\": project_root / \"src\" / \"lib.cairo\",\n            \"contract_class\": project_root\n            / \"target\"\n            / \"dev\"\n            / \"mutator_set_UltraKeccakZKHonkVerifier.contract_class.json\",\n        }\n\n\nclass VerifierGenerator:\n    \"\"\"Handles the generation of verifier files for the ZK program.\"\"\"\n\n    def __init__(self, config: VerifierConfig):\n        self.config = config\n        self.paths = config.paths\n\n    def run_command(self, cmd: list, cwd: Optional[Path] = None) -> str:\n        logger.info(f\"Running: {' '.join(cmd)}\")\n        try:\n            result = subprocess.run(\n                cmd, cwd=cwd, check=True, text=True, capture_output=True\n            )\n            return result.stdout.strip()\n        except subprocess.CalledProcessError as e:\n            error_msg = f\"Command failed with output:\\nstdout: {e.stdout.strip()}\\nstderr: {e.stderr.strip()}\"\n            logger.error(error_msg)\n            raise\n\n    def update_class_hash(self, class_hash: str):\n        \"\"\"Update the class hash in lib.cairo.\"\"\"\n        try:\n            content = f\"\"\"pub mod mutator_set_contract;\n\npub mod zk_verifier {{\n    pub mod honk_verifier_circuits;\n    pub mod honk_verifier_constants;\n    pub mod honk_verifier_contract;\n}}\n\nconst VERIFIER_CLASS_HASH: felt252 = {class_hash};\n\"\"\"\n            with open(self.paths[\"lib_cairo\"], \"w\") as f:\n                f.write(content)\n\n            logger.info(f\"Updated class hash in {self.paths['lib_cairo']}\")\n        except Exception as e:\n            logger.error(f\"Failed to update class hash: {str(e)}\")\n            raise\n\n    def generate(self) -> bool:\n        \"\"\"Generate verifier files for the ZK program.\"\"\"\n        try:\n            original_dir = os.getcwd()\n            os.chdir(self.paths[\"noir_program_dir\"])\n\n            # Build project and generate verification key\n            os.makedirs(self.paths[\"target_dir\"], exist_ok=True)\n            self.run_command([\"nargo\", \"build\"])\n            self.run_command(\n                [\n                    self.config.bb_path,\n                    \"write_vk\",\n                    \"--scheme\",\n                    self.config.scheme,\n                    \"--oracle_hash\",\n                    self.config.oracle_hash,\n                    \"-b\",\n                    str(self.paths[\"target_dir\"] / f\"{self.config.program_name}.json\"),\n                    \"-o\",\n                    str(self.paths[\"target_dir\"]),\n                ]\n            )\n\n            # Generate and write verifier files\n            with open(self.paths[\"target_dir\"] / \"vk\", \"rb\") as f:\n                vk = HonkVk.from_bytes(f.read())\n\n            (\n                constants_code,\n                circuits_code,\n                contract_code,\n                contract_name,\n                verification_function_name,\n            ) = gen_honk_verifier_files(vk)\n\n            # Write files\n            create_directory(self.paths[\"verifier_dir\"])\n            # Remove existing files\n            for filename in os.listdir(self.paths[\"verifier_dir\"]):\n                os.remove(self.paths[\"verifier_dir\"] / filename)\n            for filename, content in {\n                \"honk_verifier_constants.cairo\": constants_code,\n                \"honk_verifier_circuits.cairo\": circuits_code,\n                \"honk_verifier_contract.cairo\": contract_code,\n            }.items():\n                with open(self.paths[\"verifier_dir\"] / filename, \"w\") as f:\n                    f.write(content)\n\n            self.run_command([\"scarb\", \"fmt\", str(self.paths[\"verifier_dir\"])])\n\n            # Change to project root and run scarb build\n            os.chdir(self.paths[\"noir_program_dir\"].parent)\n            self.run_command([\"scarb\", \"build\"])\n\n            # Get class hash\n            class_hash = self.run_command(\n                [\"starkli\", \"class-hash\", str(self.paths[\"contract_class\"])]\n            )\n            logger.info(f\"Generated class hash: {class_hash}\")\n\n            # Update class hash in lib.cairo\n            self.update_class_hash(class_hash)\n\n            # Format lib.cairo\n            self.run_command([\"scarb\", \"fmt\", str(self.paths[\"lib_cairo\"])])\n\n            os.chdir(original_dir)\n            return True\n\n        except Exception as e:\n            logger.error(f\"Verifier generation failed: {str(e)}\")\n            raise\n\n\ndef main():\n    \"\"\"Main function to build project and generate verifiers.\"\"\"\n    try:\n        generator = VerifierGenerator(VerifierConfig())\n        generator.generate()\n        logger.info(\"Verifier generation completed successfully\")\n    except Exception as e:\n        logger.error(f\"Failed to generate verifier: {str(e)}\")\n        raise\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "src/contracts/mutator_set/snfoundry.toml",
    "content": "# Visit https://foundry-rs.github.io/starknet-foundry/appendix/snfoundry-toml.html\n# and https://foundry-rs.github.io/starknet-foundry/projects/configuration.html for more information\n\n# [sncast.default]                                         # Define a profile name\n# url = \"https://free-rpc.nethermind.io/sepolia-juno/v0_7\" # Url of the RPC provider\n# accounts-file = \"../account-file\"                        # Path to the file with the account data\n# account = \"mainuser\"                                     # Account from `accounts_file` or default account file that will be used for the transactions\n# keystore = \"~/keystore\"                                  # Path to the keystore file\n# wait-params = { timeout = 300, retry-interval = 10 }     # Wait for submitted transaction parameters\n# block-explorer = \"StarkScan\"                             # Block explorer service used to display links to transaction details\n# show-explorer-links = true                               # Print links pointing to pages with transaction details in the chosen block explorer\n"
  },
  {
    "path": "src/contracts/mutator_set/src/lib.cairo",
    "content": "pub mod mutator_set_contract;\n\npub mod zk_verifier {\n    pub mod honk_verifier_circuits;\n    pub mod honk_verifier_constants;\n    pub mod honk_verifier_contract;\n}\n\nconst VERIFIER_CLASS_HASH: felt252 =\n    0x05afe47f53c8833bae809202f397c3beeae83b912928c10f2c6db517fc3b8463;\n"
  },
  {
    "path": "src/contracts/mutator_set/src/mutator_set_contract.cairo",
    "content": "use mutator_set::zk_verifier::honk_verifier_contract::IUltraKeccakZKHonkVerifier;\n\n#[starknet::interface]\npub trait IMutatorSetContract<TContractState> {\n    fn get_n_leaves_aocl(self: @TContractState) -> u64;\n    fn get_n_peaks_aocl(self: @TContractState) -> u64;\n    fn append_leaf_aocl(ref self: TContractState, leaf: u256);\n    fn get_peaks_aocl(self: @TContractState) -> Array<u256>;\n    fn verify_inclusion_proof_aocl(\n        ref self: TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> bool;\n}\n\n#[starknet::contract]\nmod MutatorSetContract {\n    use garaga::crypto::mmr::trailing_ones;\n    use garaga::hashes::poseidon_bn254::poseidon_hash_2 as hash_2;\n    use mutator_set::VERIFIER_CLASS_HASH;\n    use starknet::SyscallResultTrait;\n    use starknet::storage::{\n        MutableVecTrait, StoragePointerReadAccess, StoragePointerWriteAccess, Vec, VecTrait,\n    };\n    const BN254_CURVE_ORDER: u256 = u256 {\n        low: 0x2833e84879b9709143e1f593f0000001, high: 0x30644e72e131a029b85045b68181585d,\n    };\n    const AOCL_INIT_VALUE: u256 = 0;\n    // Append-only commitment list\n    #[starknet::storage_node]\n    struct AOCL {\n        n_leaves: u64,\n        peaks: Vec<u256>,\n        last_peak_index: u64,\n    }\n    #[starknet::storage_node]\n    struct AOCLState {\n        n_leaves: u64,\n        root: u256,\n    }\n\n    #[storage]\n    struct Storage {\n        aocl: AOCL,\n        aocl_state: AOCL,\n    }\n\n    #[constructor]\n    fn constructor(ref self: ContractState) {\n        // Init both AOCLs\n        self.aocl.peaks.push(AOCL_INIT_VALUE);\n        self.aocl.n_leaves.write(1);\n        self.aocl.last_peak_index.write(0);\n\n        self.aocl_state.peaks.push(AOCL_INIT_VALUE);\n        self.aocl_state.n_leaves.write(1);\n        self.aocl_state.last_peak_index.write(0);\n    }\n\n    #[event]\n    #[derive(Drop, starknet::Event)]\n    pub enum Event {\n        LeafAppended: LeafAppended,\n    }\n\n    #[derive(Drop, starknet::Event)]\n    struct LeafAppended {\n        leaf: u256,\n        n_leaves: u64,\n    }\n\n    #[abi(embed_v0)]\n    impl MutatorSetContractImpl of super::IMutatorSetContract<ContractState> {\n        fn get_n_leaves_aocl(self: @ContractState) -> u64 {\n            self.aocl.n_leaves.read()\n        }\n        fn get_peaks_aocl(self: @ContractState) -> Array<u256> {\n            let n_peaks = self.aocl.last_peak_index.read() + 1;\n            let mut peaks = array![];\n\n            for i in 0..n_peaks {\n                peaks.append(self.aocl.peaks.get(i).expect('Invalid peak index').read());\n            }\n            peaks\n        }\n        fn get_n_peaks_aocl(self: @ContractState) -> u64 {\n            self.aocl.last_peak_index.read() + 1\n        }\n\n        fn append_leaf_aocl(ref self: ContractState, leaf: u256) {\n            assert(leaf < BN254_CURVE_ORDER, 'Invalid leaf value');\n            let n_leaves = self.aocl.n_leaves.read();\n            let n_parents = trailing_ones(n_leaves);\n            let mut last_peak_idx = self.aocl.last_peak_index.read();\n\n            match n_parents {\n                0 => {\n                    let peaks_vec_last_idx = self.aocl.peaks.len() - 1;\n                    let new_peak_idx = last_peak_idx + 1;\n                    match new_peak_idx <= peaks_vec_last_idx {\n                        true => {\n                            self.aocl.peaks.get(new_peak_idx).unwrap().write(leaf);\n                            self.aocl.last_peak_index.write(new_peak_idx);\n                        },\n                        false => {\n                            self.aocl.peaks.push(leaf);\n                            self.aocl.last_peak_index.write(new_peak_idx);\n                        },\n                    }\n                },\n                1 => {\n                    let mut last_peak_ptr = self\n                        .aocl\n                        .peaks\n                        .get(last_peak_idx)\n                        .expect('Invalid last peak index');\n                    let last_peak = last_peak_ptr.read();\n                    let parent: u256 = hash_2(last_peak, leaf);\n                    last_peak_ptr.write(parent);\n                    // No change on last_peak_idx. (It was a single leaf that got merged into a\n                // peak)\n                },\n                _ => {\n                    let mut last_peak_ptr = self\n                        .aocl\n                        .peaks\n                        .get(last_peak_idx)\n                        .expect('Invalid last peak index');\n                    let last_peak: u256 = last_peak_ptr.read();\n                    let parent: u256 = hash_2(last_peak, leaf);\n\n                    last_peak_ptr.write(parent);\n                    for _ in 0..n_parents - 1 {\n                        let in_progress_peak = self.aocl.peaks.get(last_peak_idx).unwrap().read();\n                        let previous_peak = self.aocl.peaks.get(last_peak_idx - 1).unwrap().read();\n\n                        let parent: u256 = hash_2(previous_peak, in_progress_peak);\n                        last_peak_idx -= 1;\n                        let mut last_peak_ptr = self.aocl.peaks.get(last_peak_idx).unwrap();\n                        last_peak_ptr.write(parent);\n                    }\n                    self.aocl.last_peak_index.write(last_peak_idx);\n                },\n            }\n            let new_n_leaves = n_leaves + 1;\n            self.aocl.n_leaves.write(new_n_leaves);\n            self.emit(LeafAppended { leaf: leaf, n_leaves: new_n_leaves });\n        }\n        fn verify_inclusion_proof_aocl(\n            ref self: ContractState, full_proof_with_hints: Span<felt252>,\n        ) -> bool {\n            let mut res = starknet::syscalls::library_call_syscall(\n                VERIFIER_CLASS_HASH.try_into().unwrap(),\n                selector!(\"verify_ultra_keccak_zk_honk_proof\"),\n                full_proof_with_hints,\n            )\n                .unwrap_syscall();\n\n            Serde::<bool>::deserialize(ref res).unwrap()\n        }\n    }\n\n    // Private function\n    fn _update_aocl_state(\n        ref self: ContractState, peaks: Array<u256>, n_leaves: u64, last_peak_index: u64,\n    ) {\n        // Copy the AOCL into the AOCL state\n        for i in 0..peaks.len() {\n            self.aocl_state.peaks.get(i.into()).unwrap().write(*peaks[i]);\n        }\n        self.aocl_state.n_leaves.write(n_leaves);\n        self.aocl_state.last_peak_index.write(last_peak_index);\n    }\n}\n"
  },
  {
    "path": "src/contracts/mutator_set/src/zk_verifier/honk_verifier_circuits.cairo",
    "content": "use core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitModulus, CircuitOutputsTrait,\n    EvalCircuitTrait, circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::G1Point;\n\n#[inline(always)]\npub fn run_GRUMPKIN_ZK_HONK_SUMCHECK_SIZE_17_PUB_19_circuit(\n    p_public_inputs: Span<u256>,\n    p_pairing_point_object: Span<u256>,\n    libra_sum: u384,\n    sumcheck_univariates_flat: Span<u256>,\n    sumcheck_evaluations: Span<u256>,\n    libra_evaluation: u384,\n    tp_sum_check_u_challenges: Span<u128>,\n    tp_gate_challenge: u128,\n    tp_eta_1: u384,\n    tp_eta_2: u384,\n    tp_eta_3: u384,\n    tp_beta: u384,\n    tp_gamma: u384,\n    tp_base_rlc: u384,\n    tp_alpha: u128,\n    tp_libra_challenge: u384,\n    modulus: core::circuit::CircuitModulus,\n) -> (u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x1\n    let in1 = CE::<CI<1>> {}; // 0x10000000\n    let in2 = CE::<CI<2>> {}; // 0x9d80\n    let in3 = CE::<CI<3>> {}; // 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec51\n    let in4 = CE::<CI<4>> {}; // 0x5a0\n    let in5 = CE::<CI<5>> {}; // 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31\n    let in6 = CE::<CI<6>> {}; // 0x240\n    let in7 = CE::<CI<7>> {}; // 0x0\n    let in8 = CE::<CI<8>> {}; // 0x2\n    let in9 = CE::<CI<9>> {}; // 0x3\n    let in10 = CE::<CI<10>> {}; // 0x4\n    let in11 = CE::<CI<11>> {}; // 0x5\n    let in12 = CE::<CI<12>> {}; // 0x6\n    let in13 = CE::<CI<13>> {}; // 0x7\n    let in14 = CE::<CI<14>> {}; // 0x8\n    let in15 = CE::<\n        CI<15>,\n    > {}; // 0x183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f8000000\n    let in16 = CE::<CI<16>> {}; // -0x1 % p\n    let in17 = CE::<CI<17>> {}; // 0x11\n    let in18 = CE::<CI<18>> {}; // 0x9\n    let in19 = CE::<CI<19>> {}; // 0x100000000000000000\n    let in20 = CE::<CI<20>> {}; // 0x4000\n    let in21 = CE::<\n        CI<21>,\n    > {}; // 0x10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e7\n    let in22 = CE::<CI<22>> {}; // 0xc28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b\n    let in23 = CE::<CI<23>> {}; // 0x544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac15\n    let in24 = CE::<\n        CI<24>,\n    > {}; // 0x222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b\n\n    // INPUT stack\n    let (in25, in26, in27) = (CE::<CI<25>> {}, CE::<CI<26>> {}, CE::<CI<27>> {});\n    let (in28, in29, in30) = (CE::<CI<28>> {}, CE::<CI<29>> {}, CE::<CI<30>> {});\n    let (in31, in32, in33) = (CE::<CI<31>> {}, CE::<CI<32>> {}, CE::<CI<33>> {});\n    let (in34, in35, in36) = (CE::<CI<34>> {}, CE::<CI<35>> {}, CE::<CI<36>> {});\n    let (in37, in38, in39) = (CE::<CI<37>> {}, CE::<CI<38>> {}, CE::<CI<39>> {});\n    let (in40, in41, in42) = (CE::<CI<40>> {}, CE::<CI<41>> {}, CE::<CI<42>> {});\n    let (in43, in44, in45) = (CE::<CI<43>> {}, CE::<CI<44>> {}, CE::<CI<45>> {});\n    let (in46, in47, in48) = (CE::<CI<46>> {}, CE::<CI<47>> {}, CE::<CI<48>> {});\n    let (in49, in50, in51) = (CE::<CI<49>> {}, CE::<CI<50>> {}, CE::<CI<51>> {});\n    let (in52, in53, in54) = (CE::<CI<52>> {}, CE::<CI<53>> {}, CE::<CI<54>> {});\n    let (in55, in56, in57) = (CE::<CI<55>> {}, CE::<CI<56>> {}, CE::<CI<57>> {});\n    let (in58, in59, in60) = (CE::<CI<58>> {}, CE::<CI<59>> {}, CE::<CI<60>> {});\n    let (in61, in62, in63) = (CE::<CI<61>> {}, CE::<CI<62>> {}, CE::<CI<63>> {});\n    let (in64, in65, in66) = (CE::<CI<64>> {}, CE::<CI<65>> {}, CE::<CI<66>> {});\n    let (in67, in68, in69) = (CE::<CI<67>> {}, CE::<CI<68>> {}, CE::<CI<69>> {});\n    let (in70, in71, in72) = (CE::<CI<70>> {}, CE::<CI<71>> {}, CE::<CI<72>> {});\n    let (in73, in74, in75) = (CE::<CI<73>> {}, CE::<CI<74>> {}, CE::<CI<75>> {});\n    let (in76, in77, in78) = (CE::<CI<76>> {}, CE::<CI<77>> {}, CE::<CI<78>> {});\n    let (in79, in80, in81) = (CE::<CI<79>> {}, CE::<CI<80>> {}, CE::<CI<81>> {});\n    let (in82, in83, in84) = (CE::<CI<82>> {}, CE::<CI<83>> {}, CE::<CI<84>> {});\n    let (in85, in86, in87) = (CE::<CI<85>> {}, CE::<CI<86>> {}, CE::<CI<87>> {});\n    let (in88, in89, in90) = (CE::<CI<88>> {}, CE::<CI<89>> {}, CE::<CI<90>> {});\n    let (in91, in92, in93) = (CE::<CI<91>> {}, CE::<CI<92>> {}, CE::<CI<93>> {});\n    let (in94, in95, in96) = (CE::<CI<94>> {}, CE::<CI<95>> {}, CE::<CI<96>> {});\n    let (in97, in98, in99) = (CE::<CI<97>> {}, CE::<CI<98>> {}, CE::<CI<99>> {});\n    let (in100, in101, in102) = (CE::<CI<100>> {}, CE::<CI<101>> {}, CE::<CI<102>> {});\n    let (in103, in104, in105) = (CE::<CI<103>> {}, CE::<CI<104>> {}, CE::<CI<105>> {});\n    let (in106, in107, in108) = (CE::<CI<106>> {}, CE::<CI<107>> {}, CE::<CI<108>> {});\n    let (in109, in110, in111) = (CE::<CI<109>> {}, CE::<CI<110>> {}, CE::<CI<111>> {});\n    let (in112, in113, in114) = (CE::<CI<112>> {}, CE::<CI<113>> {}, CE::<CI<114>> {});\n    let (in115, in116, in117) = (CE::<CI<115>> {}, CE::<CI<116>> {}, CE::<CI<117>> {});\n    let (in118, in119, in120) = (CE::<CI<118>> {}, CE::<CI<119>> {}, CE::<CI<120>> {});\n    let (in121, in122, in123) = (CE::<CI<121>> {}, CE::<CI<122>> {}, CE::<CI<123>> {});\n    let (in124, in125, in126) = (CE::<CI<124>> {}, CE::<CI<125>> {}, CE::<CI<126>> {});\n    let (in127, in128, in129) = (CE::<CI<127>> {}, CE::<CI<128>> {}, CE::<CI<129>> {});\n    let (in130, in131, in132) = (CE::<CI<130>> {}, CE::<CI<131>> {}, CE::<CI<132>> {});\n    let (in133, in134, in135) = (CE::<CI<133>> {}, CE::<CI<134>> {}, CE::<CI<135>> {});\n    let (in136, in137, in138) = (CE::<CI<136>> {}, CE::<CI<137>> {}, CE::<CI<138>> {});\n    let (in139, in140, in141) = (CE::<CI<139>> {}, CE::<CI<140>> {}, CE::<CI<141>> {});\n    let (in142, in143, in144) = (CE::<CI<142>> {}, CE::<CI<143>> {}, CE::<CI<144>> {});\n    let (in145, in146, in147) = (CE::<CI<145>> {}, CE::<CI<146>> {}, CE::<CI<147>> {});\n    let (in148, in149, in150) = (CE::<CI<148>> {}, CE::<CI<149>> {}, CE::<CI<150>> {});\n    let (in151, in152, in153) = (CE::<CI<151>> {}, CE::<CI<152>> {}, CE::<CI<153>> {});\n    let (in154, in155, in156) = (CE::<CI<154>> {}, CE::<CI<155>> {}, CE::<CI<156>> {});\n    let (in157, in158, in159) = (CE::<CI<157>> {}, CE::<CI<158>> {}, CE::<CI<159>> {});\n    let (in160, in161, in162) = (CE::<CI<160>> {}, CE::<CI<161>> {}, CE::<CI<162>> {});\n    let (in163, in164, in165) = (CE::<CI<163>> {}, CE::<CI<164>> {}, CE::<CI<165>> {});\n    let (in166, in167, in168) = (CE::<CI<166>> {}, CE::<CI<167>> {}, CE::<CI<168>> {});\n    let (in169, in170, in171) = (CE::<CI<169>> {}, CE::<CI<170>> {}, CE::<CI<171>> {});\n    let (in172, in173, in174) = (CE::<CI<172>> {}, CE::<CI<173>> {}, CE::<CI<174>> {});\n    let (in175, in176, in177) = (CE::<CI<175>> {}, CE::<CI<176>> {}, CE::<CI<177>> {});\n    let (in178, in179, in180) = (CE::<CI<178>> {}, CE::<CI<179>> {}, CE::<CI<180>> {});\n    let (in181, in182, in183) = (CE::<CI<181>> {}, CE::<CI<182>> {}, CE::<CI<183>> {});\n    let (in184, in185, in186) = (CE::<CI<184>> {}, CE::<CI<185>> {}, CE::<CI<186>> {});\n    let (in187, in188, in189) = (CE::<CI<187>> {}, CE::<CI<188>> {}, CE::<CI<189>> {});\n    let (in190, in191, in192) = (CE::<CI<190>> {}, CE::<CI<191>> {}, CE::<CI<192>> {});\n    let (in193, in194, in195) = (CE::<CI<193>> {}, CE::<CI<194>> {}, CE::<CI<195>> {});\n    let (in196, in197, in198) = (CE::<CI<196>> {}, CE::<CI<197>> {}, CE::<CI<198>> {});\n    let (in199, in200, in201) = (CE::<CI<199>> {}, CE::<CI<200>> {}, CE::<CI<201>> {});\n    let (in202, in203, in204) = (CE::<CI<202>> {}, CE::<CI<203>> {}, CE::<CI<204>> {});\n    let (in205, in206, in207) = (CE::<CI<205>> {}, CE::<CI<206>> {}, CE::<CI<207>> {});\n    let (in208, in209, in210) = (CE::<CI<208>> {}, CE::<CI<209>> {}, CE::<CI<210>> {});\n    let (in211, in212, in213) = (CE::<CI<211>> {}, CE::<CI<212>> {}, CE::<CI<213>> {});\n    let (in214, in215, in216) = (CE::<CI<214>> {}, CE::<CI<215>> {}, CE::<CI<216>> {});\n    let (in217, in218, in219) = (CE::<CI<217>> {}, CE::<CI<218>> {}, CE::<CI<219>> {});\n    let (in220, in221, in222) = (CE::<CI<220>> {}, CE::<CI<221>> {}, CE::<CI<222>> {});\n    let (in223, in224, in225) = (CE::<CI<223>> {}, CE::<CI<224>> {}, CE::<CI<225>> {});\n    let (in226, in227, in228) = (CE::<CI<226>> {}, CE::<CI<227>> {}, CE::<CI<228>> {});\n    let (in229, in230, in231) = (CE::<CI<229>> {}, CE::<CI<230>> {}, CE::<CI<231>> {});\n    let (in232, in233, in234) = (CE::<CI<232>> {}, CE::<CI<233>> {}, CE::<CI<234>> {});\n    let (in235, in236, in237) = (CE::<CI<235>> {}, CE::<CI<236>> {}, CE::<CI<237>> {});\n    let (in238, in239, in240) = (CE::<CI<238>> {}, CE::<CI<239>> {}, CE::<CI<240>> {});\n    let (in241, in242, in243) = (CE::<CI<241>> {}, CE::<CI<242>> {}, CE::<CI<243>> {});\n    let (in244, in245, in246) = (CE::<CI<244>> {}, CE::<CI<245>> {}, CE::<CI<246>> {});\n    let (in247, in248, in249) = (CE::<CI<247>> {}, CE::<CI<248>> {}, CE::<CI<249>> {});\n    let (in250, in251, in252) = (CE::<CI<250>> {}, CE::<CI<251>> {}, CE::<CI<252>> {});\n    let (in253, in254, in255) = (CE::<CI<253>> {}, CE::<CI<254>> {}, CE::<CI<255>> {});\n    let (in256, in257, in258) = (CE::<CI<256>> {}, CE::<CI<257>> {}, CE::<CI<258>> {});\n    let (in259, in260, in261) = (CE::<CI<259>> {}, CE::<CI<260>> {}, CE::<CI<261>> {});\n    let (in262, in263, in264) = (CE::<CI<262>> {}, CE::<CI<263>> {}, CE::<CI<264>> {});\n    let in265 = CE::<CI<265>> {};\n    let t0 = circuit_add(in1, in0);\n    let t1 = circuit_mul(in261, t0);\n    let t2 = circuit_add(in262, t1);\n    let t3 = circuit_add(in0, in0);\n    let t4 = circuit_mul(in261, t3);\n    let t5 = circuit_sub(in262, t4);\n    let t6 = circuit_add(t2, in25);\n    let t7 = circuit_mul(in0, t6);\n    let t8 = circuit_add(t5, in25);\n    let t9 = circuit_mul(in0, t8);\n    let t10 = circuit_add(t2, in261);\n    let t11 = circuit_sub(t5, in261);\n    let t12 = circuit_add(t10, in26);\n    let t13 = circuit_mul(t7, t12);\n    let t14 = circuit_add(t11, in26);\n    let t15 = circuit_mul(t9, t14);\n    let t16 = circuit_add(t10, in261);\n    let t17 = circuit_sub(t11, in261);\n    let t18 = circuit_add(t16, in27);\n    let t19 = circuit_mul(t13, t18);\n    let t20 = circuit_add(t17, in27);\n    let t21 = circuit_mul(t15, t20);\n    let t22 = circuit_add(t16, in261);\n    let t23 = circuit_sub(t17, in261);\n    let t24 = circuit_add(t22, in28);\n    let t25 = circuit_mul(t19, t24);\n    let t26 = circuit_add(t23, in28);\n    let t27 = circuit_mul(t21, t26);\n    let t28 = circuit_add(t22, in261);\n    let t29 = circuit_sub(t23, in261);\n    let t30 = circuit_add(t28, in29);\n    let t31 = circuit_mul(t25, t30);\n    let t32 = circuit_add(t29, in29);\n    let t33 = circuit_mul(t27, t32);\n    let t34 = circuit_add(t28, in261);\n    let t35 = circuit_sub(t29, in261);\n    let t36 = circuit_add(t34, in30);\n    let t37 = circuit_mul(t31, t36);\n    let t38 = circuit_add(t35, in30);\n    let t39 = circuit_mul(t33, t38);\n    let t40 = circuit_add(t34, in261);\n    let t41 = circuit_sub(t35, in261);\n    let t42 = circuit_add(t40, in31);\n    let t43 = circuit_mul(t37, t42);\n    let t44 = circuit_add(t41, in31);\n    let t45 = circuit_mul(t39, t44);\n    let t46 = circuit_add(t40, in261);\n    let t47 = circuit_sub(t41, in261);\n    let t48 = circuit_add(t46, in32);\n    let t49 = circuit_mul(t43, t48);\n    let t50 = circuit_add(t47, in32);\n    let t51 = circuit_mul(t45, t50);\n    let t52 = circuit_add(t46, in261);\n    let t53 = circuit_sub(t47, in261);\n    let t54 = circuit_add(t52, in33);\n    let t55 = circuit_mul(t49, t54);\n    let t56 = circuit_add(t53, in33);\n    let t57 = circuit_mul(t51, t56);\n    let t58 = circuit_add(t52, in261);\n    let t59 = circuit_sub(t53, in261);\n    let t60 = circuit_add(t58, in34);\n    let t61 = circuit_mul(t55, t60);\n    let t62 = circuit_add(t59, in34);\n    let t63 = circuit_mul(t57, t62);\n    let t64 = circuit_add(t58, in261);\n    let t65 = circuit_sub(t59, in261);\n    let t66 = circuit_add(t64, in35);\n    let t67 = circuit_mul(t61, t66);\n    let t68 = circuit_add(t65, in35);\n    let t69 = circuit_mul(t63, t68);\n    let t70 = circuit_add(t64, in261);\n    let t71 = circuit_sub(t65, in261);\n    let t72 = circuit_add(t70, in36);\n    let t73 = circuit_mul(t67, t72);\n    let t74 = circuit_add(t71, in36);\n    let t75 = circuit_mul(t69, t74);\n    let t76 = circuit_add(t70, in261);\n    let t77 = circuit_sub(t71, in261);\n    let t78 = circuit_add(t76, in37);\n    let t79 = circuit_mul(t73, t78);\n    let t80 = circuit_add(t77, in37);\n    let t81 = circuit_mul(t75, t80);\n    let t82 = circuit_add(t76, in261);\n    let t83 = circuit_sub(t77, in261);\n    let t84 = circuit_add(t82, in38);\n    let t85 = circuit_mul(t79, t84);\n    let t86 = circuit_add(t83, in38);\n    let t87 = circuit_mul(t81, t86);\n    let t88 = circuit_add(t82, in261);\n    let t89 = circuit_sub(t83, in261);\n    let t90 = circuit_add(t88, in39);\n    let t91 = circuit_mul(t85, t90);\n    let t92 = circuit_add(t89, in39);\n    let t93 = circuit_mul(t87, t92);\n    let t94 = circuit_add(t88, in261);\n    let t95 = circuit_sub(t89, in261);\n    let t96 = circuit_add(t94, in40);\n    let t97 = circuit_mul(t91, t96);\n    let t98 = circuit_add(t95, in40);\n    let t99 = circuit_mul(t93, t98);\n    let t100 = circuit_add(t94, in261);\n    let t101 = circuit_sub(t95, in261);\n    let t102 = circuit_add(t100, in41);\n    let t103 = circuit_mul(t97, t102);\n    let t104 = circuit_add(t101, in41);\n    let t105 = circuit_mul(t99, t104);\n    let t106 = circuit_add(t100, in261);\n    let t107 = circuit_sub(t101, in261);\n    let t108 = circuit_add(t106, in42);\n    let t109 = circuit_mul(t103, t108);\n    let t110 = circuit_add(t107, in42);\n    let t111 = circuit_mul(t105, t110);\n    let t112 = circuit_add(t106, in261);\n    let t113 = circuit_sub(t107, in261);\n    let t114 = circuit_add(t112, in43);\n    let t115 = circuit_mul(t109, t114);\n    let t116 = circuit_add(t113, in43);\n    let t117 = circuit_mul(t111, t116);\n    let t118 = circuit_inverse(t117);\n    let t119 = circuit_mul(t115, t118);\n    let t120 = circuit_mul(in265, in44);\n    let t121 = circuit_add(in45, in46);\n    let t122 = circuit_sub(t121, t120);\n    let t123 = circuit_mul(t122, in263);\n    let t124 = circuit_sub(in240, in7);\n    let t125 = circuit_mul(in0, t124);\n    let t126 = circuit_sub(in240, in7);\n    let t127 = circuit_mul(in2, t126);\n    let t128 = circuit_inverse(t127);\n    let t129 = circuit_mul(in45, t128);\n    let t130 = circuit_add(in7, t129);\n    let t131 = circuit_sub(in240, in0);\n    let t132 = circuit_mul(t125, t131);\n    let t133 = circuit_sub(in240, in0);\n    let t134 = circuit_mul(in3, t133);\n    let t135 = circuit_inverse(t134);\n    let t136 = circuit_mul(in46, t135);\n    let t137 = circuit_add(t130, t136);\n    let t138 = circuit_sub(in240, in8);\n    let t139 = circuit_mul(t132, t138);\n    let t140 = circuit_sub(in240, in8);\n    let t141 = circuit_mul(in4, t140);\n    let t142 = circuit_inverse(t141);\n    let t143 = circuit_mul(in47, t142);\n    let t144 = circuit_add(t137, t143);\n    let t145 = circuit_sub(in240, in9);\n    let t146 = circuit_mul(t139, t145);\n    let t147 = circuit_sub(in240, in9);\n    let t148 = circuit_mul(in5, t147);\n    let t149 = circuit_inverse(t148);\n    let t150 = circuit_mul(in48, t149);\n    let t151 = circuit_add(t144, t150);\n    let t152 = circuit_sub(in240, in10);\n    let t153 = circuit_mul(t146, t152);\n    let t154 = circuit_sub(in240, in10);\n    let t155 = circuit_mul(in6, t154);\n    let t156 = circuit_inverse(t155);\n    let t157 = circuit_mul(in49, t156);\n    let t158 = circuit_add(t151, t157);\n    let t159 = circuit_sub(in240, in11);\n    let t160 = circuit_mul(t153, t159);\n    let t161 = circuit_sub(in240, in11);\n    let t162 = circuit_mul(in5, t161);\n    let t163 = circuit_inverse(t162);\n    let t164 = circuit_mul(in50, t163);\n    let t165 = circuit_add(t158, t164);\n    let t166 = circuit_sub(in240, in12);\n    let t167 = circuit_mul(t160, t166);\n    let t168 = circuit_sub(in240, in12);\n    let t169 = circuit_mul(in4, t168);\n    let t170 = circuit_inverse(t169);\n    let t171 = circuit_mul(in51, t170);\n    let t172 = circuit_add(t165, t171);\n    let t173 = circuit_sub(in240, in13);\n    let t174 = circuit_mul(t167, t173);\n    let t175 = circuit_sub(in240, in13);\n    let t176 = circuit_mul(in3, t175);\n    let t177 = circuit_inverse(t176);\n    let t178 = circuit_mul(in52, t177);\n    let t179 = circuit_add(t172, t178);\n    let t180 = circuit_sub(in240, in14);\n    let t181 = circuit_mul(t174, t180);\n    let t182 = circuit_sub(in240, in14);\n    let t183 = circuit_mul(in2, t182);\n    let t184 = circuit_inverse(t183);\n    let t185 = circuit_mul(in53, t184);\n    let t186 = circuit_add(t179, t185);\n    let t187 = circuit_mul(t186, t181);\n    let t188 = circuit_sub(in257, in0);\n    let t189 = circuit_mul(in240, t188);\n    let t190 = circuit_add(in0, t189);\n    let t191 = circuit_mul(in0, t190);\n    let t192 = circuit_mul(in263, in263);\n    let t193 = circuit_mul(in257, in257);\n    let t194 = circuit_add(in54, in55);\n    let t195 = circuit_sub(t194, t187);\n    let t196 = circuit_mul(t195, t192);\n    let t197 = circuit_add(t123, t196);\n    let t198 = circuit_sub(in241, in7);\n    let t199 = circuit_mul(in0, t198);\n    let t200 = circuit_sub(in241, in7);\n    let t201 = circuit_mul(in2, t200);\n    let t202 = circuit_inverse(t201);\n    let t203 = circuit_mul(in54, t202);\n    let t204 = circuit_add(in7, t203);\n    let t205 = circuit_sub(in241, in0);\n    let t206 = circuit_mul(t199, t205);\n    let t207 = circuit_sub(in241, in0);\n    let t208 = circuit_mul(in3, t207);\n    let t209 = circuit_inverse(t208);\n    let t210 = circuit_mul(in55, t209);\n    let t211 = circuit_add(t204, t210);\n    let t212 = circuit_sub(in241, in8);\n    let t213 = circuit_mul(t206, t212);\n    let t214 = circuit_sub(in241, in8);\n    let t215 = circuit_mul(in4, t214);\n    let t216 = circuit_inverse(t215);\n    let t217 = circuit_mul(in56, t216);\n    let t218 = circuit_add(t211, t217);\n    let t219 = circuit_sub(in241, in9);\n    let t220 = circuit_mul(t213, t219);\n    let t221 = circuit_sub(in241, in9);\n    let t222 = circuit_mul(in5, t221);\n    let t223 = circuit_inverse(t222);\n    let t224 = circuit_mul(in57, t223);\n    let t225 = circuit_add(t218, t224);\n    let t226 = circuit_sub(in241, in10);\n    let t227 = circuit_mul(t220, t226);\n    let t228 = circuit_sub(in241, in10);\n    let t229 = circuit_mul(in6, t228);\n    let t230 = circuit_inverse(t229);\n    let t231 = circuit_mul(in58, t230);\n    let t232 = circuit_add(t225, t231);\n    let t233 = circuit_sub(in241, in11);\n    let t234 = circuit_mul(t227, t233);\n    let t235 = circuit_sub(in241, in11);\n    let t236 = circuit_mul(in5, t235);\n    let t237 = circuit_inverse(t236);\n    let t238 = circuit_mul(in59, t237);\n    let t239 = circuit_add(t232, t238);\n    let t240 = circuit_sub(in241, in12);\n    let t241 = circuit_mul(t234, t240);\n    let t242 = circuit_sub(in241, in12);\n    let t243 = circuit_mul(in4, t242);\n    let t244 = circuit_inverse(t243);\n    let t245 = circuit_mul(in60, t244);\n    let t246 = circuit_add(t239, t245);\n    let t247 = circuit_sub(in241, in13);\n    let t248 = circuit_mul(t241, t247);\n    let t249 = circuit_sub(in241, in13);\n    let t250 = circuit_mul(in3, t249);\n    let t251 = circuit_inverse(t250);\n    let t252 = circuit_mul(in61, t251);\n    let t253 = circuit_add(t246, t252);\n    let t254 = circuit_sub(in241, in14);\n    let t255 = circuit_mul(t248, t254);\n    let t256 = circuit_sub(in241, in14);\n    let t257 = circuit_mul(in2, t256);\n    let t258 = circuit_inverse(t257);\n    let t259 = circuit_mul(in62, t258);\n    let t260 = circuit_add(t253, t259);\n    let t261 = circuit_mul(t260, t255);\n    let t262 = circuit_sub(t193, in0);\n    let t263 = circuit_mul(in241, t262);\n    let t264 = circuit_add(in0, t263);\n    let t265 = circuit_mul(t191, t264);\n    let t266 = circuit_mul(t192, in263);\n    let t267 = circuit_mul(t193, t193);\n    let t268 = circuit_add(in63, in64);\n    let t269 = circuit_sub(t268, t261);\n    let t270 = circuit_mul(t269, t266);\n    let t271 = circuit_add(t197, t270);\n    let t272 = circuit_sub(in242, in7);\n    let t273 = circuit_mul(in0, t272);\n    let t274 = circuit_sub(in242, in7);\n    let t275 = circuit_mul(in2, t274);\n    let t276 = circuit_inverse(t275);\n    let t277 = circuit_mul(in63, t276);\n    let t278 = circuit_add(in7, t277);\n    let t279 = circuit_sub(in242, in0);\n    let t280 = circuit_mul(t273, t279);\n    let t281 = circuit_sub(in242, in0);\n    let t282 = circuit_mul(in3, t281);\n    let t283 = circuit_inverse(t282);\n    let t284 = circuit_mul(in64, t283);\n    let t285 = circuit_add(t278, t284);\n    let t286 = circuit_sub(in242, in8);\n    let t287 = circuit_mul(t280, t286);\n    let t288 = circuit_sub(in242, in8);\n    let t289 = circuit_mul(in4, t288);\n    let t290 = circuit_inverse(t289);\n    let t291 = circuit_mul(in65, t290);\n    let t292 = circuit_add(t285, t291);\n    let t293 = circuit_sub(in242, in9);\n    let t294 = circuit_mul(t287, t293);\n    let t295 = circuit_sub(in242, in9);\n    let t296 = circuit_mul(in5, t295);\n    let t297 = circuit_inverse(t296);\n    let t298 = circuit_mul(in66, t297);\n    let t299 = circuit_add(t292, t298);\n    let t300 = circuit_sub(in242, in10);\n    let t301 = circuit_mul(t294, t300);\n    let t302 = circuit_sub(in242, in10);\n    let t303 = circuit_mul(in6, t302);\n    let t304 = circuit_inverse(t303);\n    let t305 = circuit_mul(in67, t304);\n    let t306 = circuit_add(t299, t305);\n    let t307 = circuit_sub(in242, in11);\n    let t308 = circuit_mul(t301, t307);\n    let t309 = circuit_sub(in242, in11);\n    let t310 = circuit_mul(in5, t309);\n    let t311 = circuit_inverse(t310);\n    let t312 = circuit_mul(in68, t311);\n    let t313 = circuit_add(t306, t312);\n    let t314 = circuit_sub(in242, in12);\n    let t315 = circuit_mul(t308, t314);\n    let t316 = circuit_sub(in242, in12);\n    let t317 = circuit_mul(in4, t316);\n    let t318 = circuit_inverse(t317);\n    let t319 = circuit_mul(in69, t318);\n    let t320 = circuit_add(t313, t319);\n    let t321 = circuit_sub(in242, in13);\n    let t322 = circuit_mul(t315, t321);\n    let t323 = circuit_sub(in242, in13);\n    let t324 = circuit_mul(in3, t323);\n    let t325 = circuit_inverse(t324);\n    let t326 = circuit_mul(in70, t325);\n    let t327 = circuit_add(t320, t326);\n    let t328 = circuit_sub(in242, in14);\n    let t329 = circuit_mul(t322, t328);\n    let t330 = circuit_sub(in242, in14);\n    let t331 = circuit_mul(in2, t330);\n    let t332 = circuit_inverse(t331);\n    let t333 = circuit_mul(in71, t332);\n    let t334 = circuit_add(t327, t333);\n    let t335 = circuit_mul(t334, t329);\n    let t336 = circuit_sub(t267, in0);\n    let t337 = circuit_mul(in242, t336);\n    let t338 = circuit_add(in0, t337);\n    let t339 = circuit_mul(t265, t338);\n    let t340 = circuit_mul(t266, in263);\n    let t341 = circuit_mul(t267, t267);\n    let t342 = circuit_add(in72, in73);\n    let t343 = circuit_sub(t342, t335);\n    let t344 = circuit_mul(t343, t340);\n    let t345 = circuit_add(t271, t344);\n    let t346 = circuit_sub(in243, in7);\n    let t347 = circuit_mul(in0, t346);\n    let t348 = circuit_sub(in243, in7);\n    let t349 = circuit_mul(in2, t348);\n    let t350 = circuit_inverse(t349);\n    let t351 = circuit_mul(in72, t350);\n    let t352 = circuit_add(in7, t351);\n    let t353 = circuit_sub(in243, in0);\n    let t354 = circuit_mul(t347, t353);\n    let t355 = circuit_sub(in243, in0);\n    let t356 = circuit_mul(in3, t355);\n    let t357 = circuit_inverse(t356);\n    let t358 = circuit_mul(in73, t357);\n    let t359 = circuit_add(t352, t358);\n    let t360 = circuit_sub(in243, in8);\n    let t361 = circuit_mul(t354, t360);\n    let t362 = circuit_sub(in243, in8);\n    let t363 = circuit_mul(in4, t362);\n    let t364 = circuit_inverse(t363);\n    let t365 = circuit_mul(in74, t364);\n    let t366 = circuit_add(t359, t365);\n    let t367 = circuit_sub(in243, in9);\n    let t368 = circuit_mul(t361, t367);\n    let t369 = circuit_sub(in243, in9);\n    let t370 = circuit_mul(in5, t369);\n    let t371 = circuit_inverse(t370);\n    let t372 = circuit_mul(in75, t371);\n    let t373 = circuit_add(t366, t372);\n    let t374 = circuit_sub(in243, in10);\n    let t375 = circuit_mul(t368, t374);\n    let t376 = circuit_sub(in243, in10);\n    let t377 = circuit_mul(in6, t376);\n    let t378 = circuit_inverse(t377);\n    let t379 = circuit_mul(in76, t378);\n    let t380 = circuit_add(t373, t379);\n    let t381 = circuit_sub(in243, in11);\n    let t382 = circuit_mul(t375, t381);\n    let t383 = circuit_sub(in243, in11);\n    let t384 = circuit_mul(in5, t383);\n    let t385 = circuit_inverse(t384);\n    let t386 = circuit_mul(in77, t385);\n    let t387 = circuit_add(t380, t386);\n    let t388 = circuit_sub(in243, in12);\n    let t389 = circuit_mul(t382, t388);\n    let t390 = circuit_sub(in243, in12);\n    let t391 = circuit_mul(in4, t390);\n    let t392 = circuit_inverse(t391);\n    let t393 = circuit_mul(in78, t392);\n    let t394 = circuit_add(t387, t393);\n    let t395 = circuit_sub(in243, in13);\n    let t396 = circuit_mul(t389, t395);\n    let t397 = circuit_sub(in243, in13);\n    let t398 = circuit_mul(in3, t397);\n    let t399 = circuit_inverse(t398);\n    let t400 = circuit_mul(in79, t399);\n    let t401 = circuit_add(t394, t400);\n    let t402 = circuit_sub(in243, in14);\n    let t403 = circuit_mul(t396, t402);\n    let t404 = circuit_sub(in243, in14);\n    let t405 = circuit_mul(in2, t404);\n    let t406 = circuit_inverse(t405);\n    let t407 = circuit_mul(in80, t406);\n    let t408 = circuit_add(t401, t407);\n    let t409 = circuit_mul(t408, t403);\n    let t410 = circuit_sub(t341, in0);\n    let t411 = circuit_mul(in243, t410);\n    let t412 = circuit_add(in0, t411);\n    let t413 = circuit_mul(t339, t412);\n    let t414 = circuit_mul(t340, in263);\n    let t415 = circuit_mul(t341, t341);\n    let t416 = circuit_add(in81, in82);\n    let t417 = circuit_sub(t416, t409);\n    let t418 = circuit_mul(t417, t414);\n    let t419 = circuit_add(t345, t418);\n    let t420 = circuit_sub(in244, in7);\n    let t421 = circuit_mul(in0, t420);\n    let t422 = circuit_sub(in244, in7);\n    let t423 = circuit_mul(in2, t422);\n    let t424 = circuit_inverse(t423);\n    let t425 = circuit_mul(in81, t424);\n    let t426 = circuit_add(in7, t425);\n    let t427 = circuit_sub(in244, in0);\n    let t428 = circuit_mul(t421, t427);\n    let t429 = circuit_sub(in244, in0);\n    let t430 = circuit_mul(in3, t429);\n    let t431 = circuit_inverse(t430);\n    let t432 = circuit_mul(in82, t431);\n    let t433 = circuit_add(t426, t432);\n    let t434 = circuit_sub(in244, in8);\n    let t435 = circuit_mul(t428, t434);\n    let t436 = circuit_sub(in244, in8);\n    let t437 = circuit_mul(in4, t436);\n    let t438 = circuit_inverse(t437);\n    let t439 = circuit_mul(in83, t438);\n    let t440 = circuit_add(t433, t439);\n    let t441 = circuit_sub(in244, in9);\n    let t442 = circuit_mul(t435, t441);\n    let t443 = circuit_sub(in244, in9);\n    let t444 = circuit_mul(in5, t443);\n    let t445 = circuit_inverse(t444);\n    let t446 = circuit_mul(in84, t445);\n    let t447 = circuit_add(t440, t446);\n    let t448 = circuit_sub(in244, in10);\n    let t449 = circuit_mul(t442, t448);\n    let t450 = circuit_sub(in244, in10);\n    let t451 = circuit_mul(in6, t450);\n    let t452 = circuit_inverse(t451);\n    let t453 = circuit_mul(in85, t452);\n    let t454 = circuit_add(t447, t453);\n    let t455 = circuit_sub(in244, in11);\n    let t456 = circuit_mul(t449, t455);\n    let t457 = circuit_sub(in244, in11);\n    let t458 = circuit_mul(in5, t457);\n    let t459 = circuit_inverse(t458);\n    let t460 = circuit_mul(in86, t459);\n    let t461 = circuit_add(t454, t460);\n    let t462 = circuit_sub(in244, in12);\n    let t463 = circuit_mul(t456, t462);\n    let t464 = circuit_sub(in244, in12);\n    let t465 = circuit_mul(in4, t464);\n    let t466 = circuit_inverse(t465);\n    let t467 = circuit_mul(in87, t466);\n    let t468 = circuit_add(t461, t467);\n    let t469 = circuit_sub(in244, in13);\n    let t470 = circuit_mul(t463, t469);\n    let t471 = circuit_sub(in244, in13);\n    let t472 = circuit_mul(in3, t471);\n    let t473 = circuit_inverse(t472);\n    let t474 = circuit_mul(in88, t473);\n    let t475 = circuit_add(t468, t474);\n    let t476 = circuit_sub(in244, in14);\n    let t477 = circuit_mul(t470, t476);\n    let t478 = circuit_sub(in244, in14);\n    let t479 = circuit_mul(in2, t478);\n    let t480 = circuit_inverse(t479);\n    let t481 = circuit_mul(in89, t480);\n    let t482 = circuit_add(t475, t481);\n    let t483 = circuit_mul(t482, t477);\n    let t484 = circuit_sub(t415, in0);\n    let t485 = circuit_mul(in244, t484);\n    let t486 = circuit_add(in0, t485);\n    let t487 = circuit_mul(t413, t486);\n    let t488 = circuit_mul(t414, in263);\n    let t489 = circuit_mul(t415, t415);\n    let t490 = circuit_add(in90, in91);\n    let t491 = circuit_sub(t490, t483);\n    let t492 = circuit_mul(t491, t488);\n    let t493 = circuit_add(t419, t492);\n    let t494 = circuit_sub(in245, in7);\n    let t495 = circuit_mul(in0, t494);\n    let t496 = circuit_sub(in245, in7);\n    let t497 = circuit_mul(in2, t496);\n    let t498 = circuit_inverse(t497);\n    let t499 = circuit_mul(in90, t498);\n    let t500 = circuit_add(in7, t499);\n    let t501 = circuit_sub(in245, in0);\n    let t502 = circuit_mul(t495, t501);\n    let t503 = circuit_sub(in245, in0);\n    let t504 = circuit_mul(in3, t503);\n    let t505 = circuit_inverse(t504);\n    let t506 = circuit_mul(in91, t505);\n    let t507 = circuit_add(t500, t506);\n    let t508 = circuit_sub(in245, in8);\n    let t509 = circuit_mul(t502, t508);\n    let t510 = circuit_sub(in245, in8);\n    let t511 = circuit_mul(in4, t510);\n    let t512 = circuit_inverse(t511);\n    let t513 = circuit_mul(in92, t512);\n    let t514 = circuit_add(t507, t513);\n    let t515 = circuit_sub(in245, in9);\n    let t516 = circuit_mul(t509, t515);\n    let t517 = circuit_sub(in245, in9);\n    let t518 = circuit_mul(in5, t517);\n    let t519 = circuit_inverse(t518);\n    let t520 = circuit_mul(in93, t519);\n    let t521 = circuit_add(t514, t520);\n    let t522 = circuit_sub(in245, in10);\n    let t523 = circuit_mul(t516, t522);\n    let t524 = circuit_sub(in245, in10);\n    let t525 = circuit_mul(in6, t524);\n    let t526 = circuit_inverse(t525);\n    let t527 = circuit_mul(in94, t526);\n    let t528 = circuit_add(t521, t527);\n    let t529 = circuit_sub(in245, in11);\n    let t530 = circuit_mul(t523, t529);\n    let t531 = circuit_sub(in245, in11);\n    let t532 = circuit_mul(in5, t531);\n    let t533 = circuit_inverse(t532);\n    let t534 = circuit_mul(in95, t533);\n    let t535 = circuit_add(t528, t534);\n    let t536 = circuit_sub(in245, in12);\n    let t537 = circuit_mul(t530, t536);\n    let t538 = circuit_sub(in245, in12);\n    let t539 = circuit_mul(in4, t538);\n    let t540 = circuit_inverse(t539);\n    let t541 = circuit_mul(in96, t540);\n    let t542 = circuit_add(t535, t541);\n    let t543 = circuit_sub(in245, in13);\n    let t544 = circuit_mul(t537, t543);\n    let t545 = circuit_sub(in245, in13);\n    let t546 = circuit_mul(in3, t545);\n    let t547 = circuit_inverse(t546);\n    let t548 = circuit_mul(in97, t547);\n    let t549 = circuit_add(t542, t548);\n    let t550 = circuit_sub(in245, in14);\n    let t551 = circuit_mul(t544, t550);\n    let t552 = circuit_sub(in245, in14);\n    let t553 = circuit_mul(in2, t552);\n    let t554 = circuit_inverse(t553);\n    let t555 = circuit_mul(in98, t554);\n    let t556 = circuit_add(t549, t555);\n    let t557 = circuit_mul(t556, t551);\n    let t558 = circuit_sub(t489, in0);\n    let t559 = circuit_mul(in245, t558);\n    let t560 = circuit_add(in0, t559);\n    let t561 = circuit_mul(t487, t560);\n    let t562 = circuit_mul(t488, in263);\n    let t563 = circuit_mul(t489, t489);\n    let t564 = circuit_add(in99, in100);\n    let t565 = circuit_sub(t564, t557);\n    let t566 = circuit_mul(t565, t562);\n    let t567 = circuit_add(t493, t566);\n    let t568 = circuit_sub(in246, in7);\n    let t569 = circuit_mul(in0, t568);\n    let t570 = circuit_sub(in246, in7);\n    let t571 = circuit_mul(in2, t570);\n    let t572 = circuit_inverse(t571);\n    let t573 = circuit_mul(in99, t572);\n    let t574 = circuit_add(in7, t573);\n    let t575 = circuit_sub(in246, in0);\n    let t576 = circuit_mul(t569, t575);\n    let t577 = circuit_sub(in246, in0);\n    let t578 = circuit_mul(in3, t577);\n    let t579 = circuit_inverse(t578);\n    let t580 = circuit_mul(in100, t579);\n    let t581 = circuit_add(t574, t580);\n    let t582 = circuit_sub(in246, in8);\n    let t583 = circuit_mul(t576, t582);\n    let t584 = circuit_sub(in246, in8);\n    let t585 = circuit_mul(in4, t584);\n    let t586 = circuit_inverse(t585);\n    let t587 = circuit_mul(in101, t586);\n    let t588 = circuit_add(t581, t587);\n    let t589 = circuit_sub(in246, in9);\n    let t590 = circuit_mul(t583, t589);\n    let t591 = circuit_sub(in246, in9);\n    let t592 = circuit_mul(in5, t591);\n    let t593 = circuit_inverse(t592);\n    let t594 = circuit_mul(in102, t593);\n    let t595 = circuit_add(t588, t594);\n    let t596 = circuit_sub(in246, in10);\n    let t597 = circuit_mul(t590, t596);\n    let t598 = circuit_sub(in246, in10);\n    let t599 = circuit_mul(in6, t598);\n    let t600 = circuit_inverse(t599);\n    let t601 = circuit_mul(in103, t600);\n    let t602 = circuit_add(t595, t601);\n    let t603 = circuit_sub(in246, in11);\n    let t604 = circuit_mul(t597, t603);\n    let t605 = circuit_sub(in246, in11);\n    let t606 = circuit_mul(in5, t605);\n    let t607 = circuit_inverse(t606);\n    let t608 = circuit_mul(in104, t607);\n    let t609 = circuit_add(t602, t608);\n    let t610 = circuit_sub(in246, in12);\n    let t611 = circuit_mul(t604, t610);\n    let t612 = circuit_sub(in246, in12);\n    let t613 = circuit_mul(in4, t612);\n    let t614 = circuit_inverse(t613);\n    let t615 = circuit_mul(in105, t614);\n    let t616 = circuit_add(t609, t615);\n    let t617 = circuit_sub(in246, in13);\n    let t618 = circuit_mul(t611, t617);\n    let t619 = circuit_sub(in246, in13);\n    let t620 = circuit_mul(in3, t619);\n    let t621 = circuit_inverse(t620);\n    let t622 = circuit_mul(in106, t621);\n    let t623 = circuit_add(t616, t622);\n    let t624 = circuit_sub(in246, in14);\n    let t625 = circuit_mul(t618, t624);\n    let t626 = circuit_sub(in246, in14);\n    let t627 = circuit_mul(in2, t626);\n    let t628 = circuit_inverse(t627);\n    let t629 = circuit_mul(in107, t628);\n    let t630 = circuit_add(t623, t629);\n    let t631 = circuit_mul(t630, t625);\n    let t632 = circuit_sub(t563, in0);\n    let t633 = circuit_mul(in246, t632);\n    let t634 = circuit_add(in0, t633);\n    let t635 = circuit_mul(t561, t634);\n    let t636 = circuit_mul(t562, in263);\n    let t637 = circuit_mul(t563, t563);\n    let t638 = circuit_add(in108, in109);\n    let t639 = circuit_sub(t638, t631);\n    let t640 = circuit_mul(t639, t636);\n    let t641 = circuit_add(t567, t640);\n    let t642 = circuit_sub(in247, in7);\n    let t643 = circuit_mul(in0, t642);\n    let t644 = circuit_sub(in247, in7);\n    let t645 = circuit_mul(in2, t644);\n    let t646 = circuit_inverse(t645);\n    let t647 = circuit_mul(in108, t646);\n    let t648 = circuit_add(in7, t647);\n    let t649 = circuit_sub(in247, in0);\n    let t650 = circuit_mul(t643, t649);\n    let t651 = circuit_sub(in247, in0);\n    let t652 = circuit_mul(in3, t651);\n    let t653 = circuit_inverse(t652);\n    let t654 = circuit_mul(in109, t653);\n    let t655 = circuit_add(t648, t654);\n    let t656 = circuit_sub(in247, in8);\n    let t657 = circuit_mul(t650, t656);\n    let t658 = circuit_sub(in247, in8);\n    let t659 = circuit_mul(in4, t658);\n    let t660 = circuit_inverse(t659);\n    let t661 = circuit_mul(in110, t660);\n    let t662 = circuit_add(t655, t661);\n    let t663 = circuit_sub(in247, in9);\n    let t664 = circuit_mul(t657, t663);\n    let t665 = circuit_sub(in247, in9);\n    let t666 = circuit_mul(in5, t665);\n    let t667 = circuit_inverse(t666);\n    let t668 = circuit_mul(in111, t667);\n    let t669 = circuit_add(t662, t668);\n    let t670 = circuit_sub(in247, in10);\n    let t671 = circuit_mul(t664, t670);\n    let t672 = circuit_sub(in247, in10);\n    let t673 = circuit_mul(in6, t672);\n    let t674 = circuit_inverse(t673);\n    let t675 = circuit_mul(in112, t674);\n    let t676 = circuit_add(t669, t675);\n    let t677 = circuit_sub(in247, in11);\n    let t678 = circuit_mul(t671, t677);\n    let t679 = circuit_sub(in247, in11);\n    let t680 = circuit_mul(in5, t679);\n    let t681 = circuit_inverse(t680);\n    let t682 = circuit_mul(in113, t681);\n    let t683 = circuit_add(t676, t682);\n    let t684 = circuit_sub(in247, in12);\n    let t685 = circuit_mul(t678, t684);\n    let t686 = circuit_sub(in247, in12);\n    let t687 = circuit_mul(in4, t686);\n    let t688 = circuit_inverse(t687);\n    let t689 = circuit_mul(in114, t688);\n    let t690 = circuit_add(t683, t689);\n    let t691 = circuit_sub(in247, in13);\n    let t692 = circuit_mul(t685, t691);\n    let t693 = circuit_sub(in247, in13);\n    let t694 = circuit_mul(in3, t693);\n    let t695 = circuit_inverse(t694);\n    let t696 = circuit_mul(in115, t695);\n    let t697 = circuit_add(t690, t696);\n    let t698 = circuit_sub(in247, in14);\n    let t699 = circuit_mul(t692, t698);\n    let t700 = circuit_sub(in247, in14);\n    let t701 = circuit_mul(in2, t700);\n    let t702 = circuit_inverse(t701);\n    let t703 = circuit_mul(in116, t702);\n    let t704 = circuit_add(t697, t703);\n    let t705 = circuit_mul(t704, t699);\n    let t706 = circuit_sub(t637, in0);\n    let t707 = circuit_mul(in247, t706);\n    let t708 = circuit_add(in0, t707);\n    let t709 = circuit_mul(t635, t708);\n    let t710 = circuit_mul(t636, in263);\n    let t711 = circuit_mul(t637, t637);\n    let t712 = circuit_add(in117, in118);\n    let t713 = circuit_sub(t712, t705);\n    let t714 = circuit_mul(t713, t710);\n    let t715 = circuit_add(t641, t714);\n    let t716 = circuit_sub(in248, in7);\n    let t717 = circuit_mul(in0, t716);\n    let t718 = circuit_sub(in248, in7);\n    let t719 = circuit_mul(in2, t718);\n    let t720 = circuit_inverse(t719);\n    let t721 = circuit_mul(in117, t720);\n    let t722 = circuit_add(in7, t721);\n    let t723 = circuit_sub(in248, in0);\n    let t724 = circuit_mul(t717, t723);\n    let t725 = circuit_sub(in248, in0);\n    let t726 = circuit_mul(in3, t725);\n    let t727 = circuit_inverse(t726);\n    let t728 = circuit_mul(in118, t727);\n    let t729 = circuit_add(t722, t728);\n    let t730 = circuit_sub(in248, in8);\n    let t731 = circuit_mul(t724, t730);\n    let t732 = circuit_sub(in248, in8);\n    let t733 = circuit_mul(in4, t732);\n    let t734 = circuit_inverse(t733);\n    let t735 = circuit_mul(in119, t734);\n    let t736 = circuit_add(t729, t735);\n    let t737 = circuit_sub(in248, in9);\n    let t738 = circuit_mul(t731, t737);\n    let t739 = circuit_sub(in248, in9);\n    let t740 = circuit_mul(in5, t739);\n    let t741 = circuit_inverse(t740);\n    let t742 = circuit_mul(in120, t741);\n    let t743 = circuit_add(t736, t742);\n    let t744 = circuit_sub(in248, in10);\n    let t745 = circuit_mul(t738, t744);\n    let t746 = circuit_sub(in248, in10);\n    let t747 = circuit_mul(in6, t746);\n    let t748 = circuit_inverse(t747);\n    let t749 = circuit_mul(in121, t748);\n    let t750 = circuit_add(t743, t749);\n    let t751 = circuit_sub(in248, in11);\n    let t752 = circuit_mul(t745, t751);\n    let t753 = circuit_sub(in248, in11);\n    let t754 = circuit_mul(in5, t753);\n    let t755 = circuit_inverse(t754);\n    let t756 = circuit_mul(in122, t755);\n    let t757 = circuit_add(t750, t756);\n    let t758 = circuit_sub(in248, in12);\n    let t759 = circuit_mul(t752, t758);\n    let t760 = circuit_sub(in248, in12);\n    let t761 = circuit_mul(in4, t760);\n    let t762 = circuit_inverse(t761);\n    let t763 = circuit_mul(in123, t762);\n    let t764 = circuit_add(t757, t763);\n    let t765 = circuit_sub(in248, in13);\n    let t766 = circuit_mul(t759, t765);\n    let t767 = circuit_sub(in248, in13);\n    let t768 = circuit_mul(in3, t767);\n    let t769 = circuit_inverse(t768);\n    let t770 = circuit_mul(in124, t769);\n    let t771 = circuit_add(t764, t770);\n    let t772 = circuit_sub(in248, in14);\n    let t773 = circuit_mul(t766, t772);\n    let t774 = circuit_sub(in248, in14);\n    let t775 = circuit_mul(in2, t774);\n    let t776 = circuit_inverse(t775);\n    let t777 = circuit_mul(in125, t776);\n    let t778 = circuit_add(t771, t777);\n    let t779 = circuit_mul(t778, t773);\n    let t780 = circuit_sub(t711, in0);\n    let t781 = circuit_mul(in248, t780);\n    let t782 = circuit_add(in0, t781);\n    let t783 = circuit_mul(t709, t782);\n    let t784 = circuit_mul(t710, in263);\n    let t785 = circuit_mul(t711, t711);\n    let t786 = circuit_add(in126, in127);\n    let t787 = circuit_sub(t786, t779);\n    let t788 = circuit_mul(t787, t784);\n    let t789 = circuit_add(t715, t788);\n    let t790 = circuit_sub(in249, in7);\n    let t791 = circuit_mul(in0, t790);\n    let t792 = circuit_sub(in249, in7);\n    let t793 = circuit_mul(in2, t792);\n    let t794 = circuit_inverse(t793);\n    let t795 = circuit_mul(in126, t794);\n    let t796 = circuit_add(in7, t795);\n    let t797 = circuit_sub(in249, in0);\n    let t798 = circuit_mul(t791, t797);\n    let t799 = circuit_sub(in249, in0);\n    let t800 = circuit_mul(in3, t799);\n    let t801 = circuit_inverse(t800);\n    let t802 = circuit_mul(in127, t801);\n    let t803 = circuit_add(t796, t802);\n    let t804 = circuit_sub(in249, in8);\n    let t805 = circuit_mul(t798, t804);\n    let t806 = circuit_sub(in249, in8);\n    let t807 = circuit_mul(in4, t806);\n    let t808 = circuit_inverse(t807);\n    let t809 = circuit_mul(in128, t808);\n    let t810 = circuit_add(t803, t809);\n    let t811 = circuit_sub(in249, in9);\n    let t812 = circuit_mul(t805, t811);\n    let t813 = circuit_sub(in249, in9);\n    let t814 = circuit_mul(in5, t813);\n    let t815 = circuit_inverse(t814);\n    let t816 = circuit_mul(in129, t815);\n    let t817 = circuit_add(t810, t816);\n    let t818 = circuit_sub(in249, in10);\n    let t819 = circuit_mul(t812, t818);\n    let t820 = circuit_sub(in249, in10);\n    let t821 = circuit_mul(in6, t820);\n    let t822 = circuit_inverse(t821);\n    let t823 = circuit_mul(in130, t822);\n    let t824 = circuit_add(t817, t823);\n    let t825 = circuit_sub(in249, in11);\n    let t826 = circuit_mul(t819, t825);\n    let t827 = circuit_sub(in249, in11);\n    let t828 = circuit_mul(in5, t827);\n    let t829 = circuit_inverse(t828);\n    let t830 = circuit_mul(in131, t829);\n    let t831 = circuit_add(t824, t830);\n    let t832 = circuit_sub(in249, in12);\n    let t833 = circuit_mul(t826, t832);\n    let t834 = circuit_sub(in249, in12);\n    let t835 = circuit_mul(in4, t834);\n    let t836 = circuit_inverse(t835);\n    let t837 = circuit_mul(in132, t836);\n    let t838 = circuit_add(t831, t837);\n    let t839 = circuit_sub(in249, in13);\n    let t840 = circuit_mul(t833, t839);\n    let t841 = circuit_sub(in249, in13);\n    let t842 = circuit_mul(in3, t841);\n    let t843 = circuit_inverse(t842);\n    let t844 = circuit_mul(in133, t843);\n    let t845 = circuit_add(t838, t844);\n    let t846 = circuit_sub(in249, in14);\n    let t847 = circuit_mul(t840, t846);\n    let t848 = circuit_sub(in249, in14);\n    let t849 = circuit_mul(in2, t848);\n    let t850 = circuit_inverse(t849);\n    let t851 = circuit_mul(in134, t850);\n    let t852 = circuit_add(t845, t851);\n    let t853 = circuit_mul(t852, t847);\n    let t854 = circuit_sub(t785, in0);\n    let t855 = circuit_mul(in249, t854);\n    let t856 = circuit_add(in0, t855);\n    let t857 = circuit_mul(t783, t856);\n    let t858 = circuit_mul(t784, in263);\n    let t859 = circuit_mul(t785, t785);\n    let t860 = circuit_add(in135, in136);\n    let t861 = circuit_sub(t860, t853);\n    let t862 = circuit_mul(t861, t858);\n    let t863 = circuit_add(t789, t862);\n    let t864 = circuit_sub(in250, in7);\n    let t865 = circuit_mul(in0, t864);\n    let t866 = circuit_sub(in250, in7);\n    let t867 = circuit_mul(in2, t866);\n    let t868 = circuit_inverse(t867);\n    let t869 = circuit_mul(in135, t868);\n    let t870 = circuit_add(in7, t869);\n    let t871 = circuit_sub(in250, in0);\n    let t872 = circuit_mul(t865, t871);\n    let t873 = circuit_sub(in250, in0);\n    let t874 = circuit_mul(in3, t873);\n    let t875 = circuit_inverse(t874);\n    let t876 = circuit_mul(in136, t875);\n    let t877 = circuit_add(t870, t876);\n    let t878 = circuit_sub(in250, in8);\n    let t879 = circuit_mul(t872, t878);\n    let t880 = circuit_sub(in250, in8);\n    let t881 = circuit_mul(in4, t880);\n    let t882 = circuit_inverse(t881);\n    let t883 = circuit_mul(in137, t882);\n    let t884 = circuit_add(t877, t883);\n    let t885 = circuit_sub(in250, in9);\n    let t886 = circuit_mul(t879, t885);\n    let t887 = circuit_sub(in250, in9);\n    let t888 = circuit_mul(in5, t887);\n    let t889 = circuit_inverse(t888);\n    let t890 = circuit_mul(in138, t889);\n    let t891 = circuit_add(t884, t890);\n    let t892 = circuit_sub(in250, in10);\n    let t893 = circuit_mul(t886, t892);\n    let t894 = circuit_sub(in250, in10);\n    let t895 = circuit_mul(in6, t894);\n    let t896 = circuit_inverse(t895);\n    let t897 = circuit_mul(in139, t896);\n    let t898 = circuit_add(t891, t897);\n    let t899 = circuit_sub(in250, in11);\n    let t900 = circuit_mul(t893, t899);\n    let t901 = circuit_sub(in250, in11);\n    let t902 = circuit_mul(in5, t901);\n    let t903 = circuit_inverse(t902);\n    let t904 = circuit_mul(in140, t903);\n    let t905 = circuit_add(t898, t904);\n    let t906 = circuit_sub(in250, in12);\n    let t907 = circuit_mul(t900, t906);\n    let t908 = circuit_sub(in250, in12);\n    let t909 = circuit_mul(in4, t908);\n    let t910 = circuit_inverse(t909);\n    let t911 = circuit_mul(in141, t910);\n    let t912 = circuit_add(t905, t911);\n    let t913 = circuit_sub(in250, in13);\n    let t914 = circuit_mul(t907, t913);\n    let t915 = circuit_sub(in250, in13);\n    let t916 = circuit_mul(in3, t915);\n    let t917 = circuit_inverse(t916);\n    let t918 = circuit_mul(in142, t917);\n    let t919 = circuit_add(t912, t918);\n    let t920 = circuit_sub(in250, in14);\n    let t921 = circuit_mul(t914, t920);\n    let t922 = circuit_sub(in250, in14);\n    let t923 = circuit_mul(in2, t922);\n    let t924 = circuit_inverse(t923);\n    let t925 = circuit_mul(in143, t924);\n    let t926 = circuit_add(t919, t925);\n    let t927 = circuit_mul(t926, t921);\n    let t928 = circuit_sub(t859, in0);\n    let t929 = circuit_mul(in250, t928);\n    let t930 = circuit_add(in0, t929);\n    let t931 = circuit_mul(t857, t930);\n    let t932 = circuit_mul(t858, in263);\n    let t933 = circuit_mul(t859, t859);\n    let t934 = circuit_add(in144, in145);\n    let t935 = circuit_sub(t934, t927);\n    let t936 = circuit_mul(t935, t932);\n    let t937 = circuit_add(t863, t936);\n    let t938 = circuit_sub(in251, in7);\n    let t939 = circuit_mul(in0, t938);\n    let t940 = circuit_sub(in251, in7);\n    let t941 = circuit_mul(in2, t940);\n    let t942 = circuit_inverse(t941);\n    let t943 = circuit_mul(in144, t942);\n    let t944 = circuit_add(in7, t943);\n    let t945 = circuit_sub(in251, in0);\n    let t946 = circuit_mul(t939, t945);\n    let t947 = circuit_sub(in251, in0);\n    let t948 = circuit_mul(in3, t947);\n    let t949 = circuit_inverse(t948);\n    let t950 = circuit_mul(in145, t949);\n    let t951 = circuit_add(t944, t950);\n    let t952 = circuit_sub(in251, in8);\n    let t953 = circuit_mul(t946, t952);\n    let t954 = circuit_sub(in251, in8);\n    let t955 = circuit_mul(in4, t954);\n    let t956 = circuit_inverse(t955);\n    let t957 = circuit_mul(in146, t956);\n    let t958 = circuit_add(t951, t957);\n    let t959 = circuit_sub(in251, in9);\n    let t960 = circuit_mul(t953, t959);\n    let t961 = circuit_sub(in251, in9);\n    let t962 = circuit_mul(in5, t961);\n    let t963 = circuit_inverse(t962);\n    let t964 = circuit_mul(in147, t963);\n    let t965 = circuit_add(t958, t964);\n    let t966 = circuit_sub(in251, in10);\n    let t967 = circuit_mul(t960, t966);\n    let t968 = circuit_sub(in251, in10);\n    let t969 = circuit_mul(in6, t968);\n    let t970 = circuit_inverse(t969);\n    let t971 = circuit_mul(in148, t970);\n    let t972 = circuit_add(t965, t971);\n    let t973 = circuit_sub(in251, in11);\n    let t974 = circuit_mul(t967, t973);\n    let t975 = circuit_sub(in251, in11);\n    let t976 = circuit_mul(in5, t975);\n    let t977 = circuit_inverse(t976);\n    let t978 = circuit_mul(in149, t977);\n    let t979 = circuit_add(t972, t978);\n    let t980 = circuit_sub(in251, in12);\n    let t981 = circuit_mul(t974, t980);\n    let t982 = circuit_sub(in251, in12);\n    let t983 = circuit_mul(in4, t982);\n    let t984 = circuit_inverse(t983);\n    let t985 = circuit_mul(in150, t984);\n    let t986 = circuit_add(t979, t985);\n    let t987 = circuit_sub(in251, in13);\n    let t988 = circuit_mul(t981, t987);\n    let t989 = circuit_sub(in251, in13);\n    let t990 = circuit_mul(in3, t989);\n    let t991 = circuit_inverse(t990);\n    let t992 = circuit_mul(in151, t991);\n    let t993 = circuit_add(t986, t992);\n    let t994 = circuit_sub(in251, in14);\n    let t995 = circuit_mul(t988, t994);\n    let t996 = circuit_sub(in251, in14);\n    let t997 = circuit_mul(in2, t996);\n    let t998 = circuit_inverse(t997);\n    let t999 = circuit_mul(in152, t998);\n    let t1000 = circuit_add(t993, t999);\n    let t1001 = circuit_mul(t1000, t995);\n    let t1002 = circuit_sub(t933, in0);\n    let t1003 = circuit_mul(in251, t1002);\n    let t1004 = circuit_add(in0, t1003);\n    let t1005 = circuit_mul(t931, t1004);\n    let t1006 = circuit_mul(t932, in263);\n    let t1007 = circuit_mul(t933, t933);\n    let t1008 = circuit_add(in153, in154);\n    let t1009 = circuit_sub(t1008, t1001);\n    let t1010 = circuit_mul(t1009, t1006);\n    let t1011 = circuit_add(t937, t1010);\n    let t1012 = circuit_sub(in252, in7);\n    let t1013 = circuit_mul(in0, t1012);\n    let t1014 = circuit_sub(in252, in7);\n    let t1015 = circuit_mul(in2, t1014);\n    let t1016 = circuit_inverse(t1015);\n    let t1017 = circuit_mul(in153, t1016);\n    let t1018 = circuit_add(in7, t1017);\n    let t1019 = circuit_sub(in252, in0);\n    let t1020 = circuit_mul(t1013, t1019);\n    let t1021 = circuit_sub(in252, in0);\n    let t1022 = circuit_mul(in3, t1021);\n    let t1023 = circuit_inverse(t1022);\n    let t1024 = circuit_mul(in154, t1023);\n    let t1025 = circuit_add(t1018, t1024);\n    let t1026 = circuit_sub(in252, in8);\n    let t1027 = circuit_mul(t1020, t1026);\n    let t1028 = circuit_sub(in252, in8);\n    let t1029 = circuit_mul(in4, t1028);\n    let t1030 = circuit_inverse(t1029);\n    let t1031 = circuit_mul(in155, t1030);\n    let t1032 = circuit_add(t1025, t1031);\n    let t1033 = circuit_sub(in252, in9);\n    let t1034 = circuit_mul(t1027, t1033);\n    let t1035 = circuit_sub(in252, in9);\n    let t1036 = circuit_mul(in5, t1035);\n    let t1037 = circuit_inverse(t1036);\n    let t1038 = circuit_mul(in156, t1037);\n    let t1039 = circuit_add(t1032, t1038);\n    let t1040 = circuit_sub(in252, in10);\n    let t1041 = circuit_mul(t1034, t1040);\n    let t1042 = circuit_sub(in252, in10);\n    let t1043 = circuit_mul(in6, t1042);\n    let t1044 = circuit_inverse(t1043);\n    let t1045 = circuit_mul(in157, t1044);\n    let t1046 = circuit_add(t1039, t1045);\n    let t1047 = circuit_sub(in252, in11);\n    let t1048 = circuit_mul(t1041, t1047);\n    let t1049 = circuit_sub(in252, in11);\n    let t1050 = circuit_mul(in5, t1049);\n    let t1051 = circuit_inverse(t1050);\n    let t1052 = circuit_mul(in158, t1051);\n    let t1053 = circuit_add(t1046, t1052);\n    let t1054 = circuit_sub(in252, in12);\n    let t1055 = circuit_mul(t1048, t1054);\n    let t1056 = circuit_sub(in252, in12);\n    let t1057 = circuit_mul(in4, t1056);\n    let t1058 = circuit_inverse(t1057);\n    let t1059 = circuit_mul(in159, t1058);\n    let t1060 = circuit_add(t1053, t1059);\n    let t1061 = circuit_sub(in252, in13);\n    let t1062 = circuit_mul(t1055, t1061);\n    let t1063 = circuit_sub(in252, in13);\n    let t1064 = circuit_mul(in3, t1063);\n    let t1065 = circuit_inverse(t1064);\n    let t1066 = circuit_mul(in160, t1065);\n    let t1067 = circuit_add(t1060, t1066);\n    let t1068 = circuit_sub(in252, in14);\n    let t1069 = circuit_mul(t1062, t1068);\n    let t1070 = circuit_sub(in252, in14);\n    let t1071 = circuit_mul(in2, t1070);\n    let t1072 = circuit_inverse(t1071);\n    let t1073 = circuit_mul(in161, t1072);\n    let t1074 = circuit_add(t1067, t1073);\n    let t1075 = circuit_mul(t1074, t1069);\n    let t1076 = circuit_sub(t1007, in0);\n    let t1077 = circuit_mul(in252, t1076);\n    let t1078 = circuit_add(in0, t1077);\n    let t1079 = circuit_mul(t1005, t1078);\n    let t1080 = circuit_mul(t1006, in263);\n    let t1081 = circuit_mul(t1007, t1007);\n    let t1082 = circuit_add(in162, in163);\n    let t1083 = circuit_sub(t1082, t1075);\n    let t1084 = circuit_mul(t1083, t1080);\n    let t1085 = circuit_add(t1011, t1084);\n    let t1086 = circuit_sub(in253, in7);\n    let t1087 = circuit_mul(in0, t1086);\n    let t1088 = circuit_sub(in253, in7);\n    let t1089 = circuit_mul(in2, t1088);\n    let t1090 = circuit_inverse(t1089);\n    let t1091 = circuit_mul(in162, t1090);\n    let t1092 = circuit_add(in7, t1091);\n    let t1093 = circuit_sub(in253, in0);\n    let t1094 = circuit_mul(t1087, t1093);\n    let t1095 = circuit_sub(in253, in0);\n    let t1096 = circuit_mul(in3, t1095);\n    let t1097 = circuit_inverse(t1096);\n    let t1098 = circuit_mul(in163, t1097);\n    let t1099 = circuit_add(t1092, t1098);\n    let t1100 = circuit_sub(in253, in8);\n    let t1101 = circuit_mul(t1094, t1100);\n    let t1102 = circuit_sub(in253, in8);\n    let t1103 = circuit_mul(in4, t1102);\n    let t1104 = circuit_inverse(t1103);\n    let t1105 = circuit_mul(in164, t1104);\n    let t1106 = circuit_add(t1099, t1105);\n    let t1107 = circuit_sub(in253, in9);\n    let t1108 = circuit_mul(t1101, t1107);\n    let t1109 = circuit_sub(in253, in9);\n    let t1110 = circuit_mul(in5, t1109);\n    let t1111 = circuit_inverse(t1110);\n    let t1112 = circuit_mul(in165, t1111);\n    let t1113 = circuit_add(t1106, t1112);\n    let t1114 = circuit_sub(in253, in10);\n    let t1115 = circuit_mul(t1108, t1114);\n    let t1116 = circuit_sub(in253, in10);\n    let t1117 = circuit_mul(in6, t1116);\n    let t1118 = circuit_inverse(t1117);\n    let t1119 = circuit_mul(in166, t1118);\n    let t1120 = circuit_add(t1113, t1119);\n    let t1121 = circuit_sub(in253, in11);\n    let t1122 = circuit_mul(t1115, t1121);\n    let t1123 = circuit_sub(in253, in11);\n    let t1124 = circuit_mul(in5, t1123);\n    let t1125 = circuit_inverse(t1124);\n    let t1126 = circuit_mul(in167, t1125);\n    let t1127 = circuit_add(t1120, t1126);\n    let t1128 = circuit_sub(in253, in12);\n    let t1129 = circuit_mul(t1122, t1128);\n    let t1130 = circuit_sub(in253, in12);\n    let t1131 = circuit_mul(in4, t1130);\n    let t1132 = circuit_inverse(t1131);\n    let t1133 = circuit_mul(in168, t1132);\n    let t1134 = circuit_add(t1127, t1133);\n    let t1135 = circuit_sub(in253, in13);\n    let t1136 = circuit_mul(t1129, t1135);\n    let t1137 = circuit_sub(in253, in13);\n    let t1138 = circuit_mul(in3, t1137);\n    let t1139 = circuit_inverse(t1138);\n    let t1140 = circuit_mul(in169, t1139);\n    let t1141 = circuit_add(t1134, t1140);\n    let t1142 = circuit_sub(in253, in14);\n    let t1143 = circuit_mul(t1136, t1142);\n    let t1144 = circuit_sub(in253, in14);\n    let t1145 = circuit_mul(in2, t1144);\n    let t1146 = circuit_inverse(t1145);\n    let t1147 = circuit_mul(in170, t1146);\n    let t1148 = circuit_add(t1141, t1147);\n    let t1149 = circuit_mul(t1148, t1143);\n    let t1150 = circuit_sub(t1081, in0);\n    let t1151 = circuit_mul(in253, t1150);\n    let t1152 = circuit_add(in0, t1151);\n    let t1153 = circuit_mul(t1079, t1152);\n    let t1154 = circuit_mul(t1080, in263);\n    let t1155 = circuit_mul(t1081, t1081);\n    let t1156 = circuit_add(in171, in172);\n    let t1157 = circuit_sub(t1156, t1149);\n    let t1158 = circuit_mul(t1157, t1154);\n    let t1159 = circuit_add(t1085, t1158);\n    let t1160 = circuit_sub(in254, in7);\n    let t1161 = circuit_mul(in0, t1160);\n    let t1162 = circuit_sub(in254, in7);\n    let t1163 = circuit_mul(in2, t1162);\n    let t1164 = circuit_inverse(t1163);\n    let t1165 = circuit_mul(in171, t1164);\n    let t1166 = circuit_add(in7, t1165);\n    let t1167 = circuit_sub(in254, in0);\n    let t1168 = circuit_mul(t1161, t1167);\n    let t1169 = circuit_sub(in254, in0);\n    let t1170 = circuit_mul(in3, t1169);\n    let t1171 = circuit_inverse(t1170);\n    let t1172 = circuit_mul(in172, t1171);\n    let t1173 = circuit_add(t1166, t1172);\n    let t1174 = circuit_sub(in254, in8);\n    let t1175 = circuit_mul(t1168, t1174);\n    let t1176 = circuit_sub(in254, in8);\n    let t1177 = circuit_mul(in4, t1176);\n    let t1178 = circuit_inverse(t1177);\n    let t1179 = circuit_mul(in173, t1178);\n    let t1180 = circuit_add(t1173, t1179);\n    let t1181 = circuit_sub(in254, in9);\n    let t1182 = circuit_mul(t1175, t1181);\n    let t1183 = circuit_sub(in254, in9);\n    let t1184 = circuit_mul(in5, t1183);\n    let t1185 = circuit_inverse(t1184);\n    let t1186 = circuit_mul(in174, t1185);\n    let t1187 = circuit_add(t1180, t1186);\n    let t1188 = circuit_sub(in254, in10);\n    let t1189 = circuit_mul(t1182, t1188);\n    let t1190 = circuit_sub(in254, in10);\n    let t1191 = circuit_mul(in6, t1190);\n    let t1192 = circuit_inverse(t1191);\n    let t1193 = circuit_mul(in175, t1192);\n    let t1194 = circuit_add(t1187, t1193);\n    let t1195 = circuit_sub(in254, in11);\n    let t1196 = circuit_mul(t1189, t1195);\n    let t1197 = circuit_sub(in254, in11);\n    let t1198 = circuit_mul(in5, t1197);\n    let t1199 = circuit_inverse(t1198);\n    let t1200 = circuit_mul(in176, t1199);\n    let t1201 = circuit_add(t1194, t1200);\n    let t1202 = circuit_sub(in254, in12);\n    let t1203 = circuit_mul(t1196, t1202);\n    let t1204 = circuit_sub(in254, in12);\n    let t1205 = circuit_mul(in4, t1204);\n    let t1206 = circuit_inverse(t1205);\n    let t1207 = circuit_mul(in177, t1206);\n    let t1208 = circuit_add(t1201, t1207);\n    let t1209 = circuit_sub(in254, in13);\n    let t1210 = circuit_mul(t1203, t1209);\n    let t1211 = circuit_sub(in254, in13);\n    let t1212 = circuit_mul(in3, t1211);\n    let t1213 = circuit_inverse(t1212);\n    let t1214 = circuit_mul(in178, t1213);\n    let t1215 = circuit_add(t1208, t1214);\n    let t1216 = circuit_sub(in254, in14);\n    let t1217 = circuit_mul(t1210, t1216);\n    let t1218 = circuit_sub(in254, in14);\n    let t1219 = circuit_mul(in2, t1218);\n    let t1220 = circuit_inverse(t1219);\n    let t1221 = circuit_mul(in179, t1220);\n    let t1222 = circuit_add(t1215, t1221);\n    let t1223 = circuit_mul(t1222, t1217);\n    let t1224 = circuit_sub(t1155, in0);\n    let t1225 = circuit_mul(in254, t1224);\n    let t1226 = circuit_add(in0, t1225);\n    let t1227 = circuit_mul(t1153, t1226);\n    let t1228 = circuit_mul(t1154, in263);\n    let t1229 = circuit_mul(t1155, t1155);\n    let t1230 = circuit_add(in180, in181);\n    let t1231 = circuit_sub(t1230, t1223);\n    let t1232 = circuit_mul(t1231, t1228);\n    let t1233 = circuit_add(t1159, t1232);\n    let t1234 = circuit_sub(in255, in7);\n    let t1235 = circuit_mul(in0, t1234);\n    let t1236 = circuit_sub(in255, in7);\n    let t1237 = circuit_mul(in2, t1236);\n    let t1238 = circuit_inverse(t1237);\n    let t1239 = circuit_mul(in180, t1238);\n    let t1240 = circuit_add(in7, t1239);\n    let t1241 = circuit_sub(in255, in0);\n    let t1242 = circuit_mul(t1235, t1241);\n    let t1243 = circuit_sub(in255, in0);\n    let t1244 = circuit_mul(in3, t1243);\n    let t1245 = circuit_inverse(t1244);\n    let t1246 = circuit_mul(in181, t1245);\n    let t1247 = circuit_add(t1240, t1246);\n    let t1248 = circuit_sub(in255, in8);\n    let t1249 = circuit_mul(t1242, t1248);\n    let t1250 = circuit_sub(in255, in8);\n    let t1251 = circuit_mul(in4, t1250);\n    let t1252 = circuit_inverse(t1251);\n    let t1253 = circuit_mul(in182, t1252);\n    let t1254 = circuit_add(t1247, t1253);\n    let t1255 = circuit_sub(in255, in9);\n    let t1256 = circuit_mul(t1249, t1255);\n    let t1257 = circuit_sub(in255, in9);\n    let t1258 = circuit_mul(in5, t1257);\n    let t1259 = circuit_inverse(t1258);\n    let t1260 = circuit_mul(in183, t1259);\n    let t1261 = circuit_add(t1254, t1260);\n    let t1262 = circuit_sub(in255, in10);\n    let t1263 = circuit_mul(t1256, t1262);\n    let t1264 = circuit_sub(in255, in10);\n    let t1265 = circuit_mul(in6, t1264);\n    let t1266 = circuit_inverse(t1265);\n    let t1267 = circuit_mul(in184, t1266);\n    let t1268 = circuit_add(t1261, t1267);\n    let t1269 = circuit_sub(in255, in11);\n    let t1270 = circuit_mul(t1263, t1269);\n    let t1271 = circuit_sub(in255, in11);\n    let t1272 = circuit_mul(in5, t1271);\n    let t1273 = circuit_inverse(t1272);\n    let t1274 = circuit_mul(in185, t1273);\n    let t1275 = circuit_add(t1268, t1274);\n    let t1276 = circuit_sub(in255, in12);\n    let t1277 = circuit_mul(t1270, t1276);\n    let t1278 = circuit_sub(in255, in12);\n    let t1279 = circuit_mul(in4, t1278);\n    let t1280 = circuit_inverse(t1279);\n    let t1281 = circuit_mul(in186, t1280);\n    let t1282 = circuit_add(t1275, t1281);\n    let t1283 = circuit_sub(in255, in13);\n    let t1284 = circuit_mul(t1277, t1283);\n    let t1285 = circuit_sub(in255, in13);\n    let t1286 = circuit_mul(in3, t1285);\n    let t1287 = circuit_inverse(t1286);\n    let t1288 = circuit_mul(in187, t1287);\n    let t1289 = circuit_add(t1282, t1288);\n    let t1290 = circuit_sub(in255, in14);\n    let t1291 = circuit_mul(t1284, t1290);\n    let t1292 = circuit_sub(in255, in14);\n    let t1293 = circuit_mul(in2, t1292);\n    let t1294 = circuit_inverse(t1293);\n    let t1295 = circuit_mul(in188, t1294);\n    let t1296 = circuit_add(t1289, t1295);\n    let t1297 = circuit_mul(t1296, t1291);\n    let t1298 = circuit_sub(t1229, in0);\n    let t1299 = circuit_mul(in255, t1298);\n    let t1300 = circuit_add(in0, t1299);\n    let t1301 = circuit_mul(t1227, t1300);\n    let t1302 = circuit_mul(t1228, in263);\n    let t1303 = circuit_mul(t1229, t1229);\n    let t1304 = circuit_add(in189, in190);\n    let t1305 = circuit_sub(t1304, t1297);\n    let t1306 = circuit_mul(t1305, t1302);\n    let t1307 = circuit_add(t1233, t1306);\n    let t1308 = circuit_sub(in256, in7);\n    let t1309 = circuit_mul(in0, t1308);\n    let t1310 = circuit_sub(in256, in7);\n    let t1311 = circuit_mul(in2, t1310);\n    let t1312 = circuit_inverse(t1311);\n    let t1313 = circuit_mul(in189, t1312);\n    let t1314 = circuit_add(in7, t1313);\n    let t1315 = circuit_sub(in256, in0);\n    let t1316 = circuit_mul(t1309, t1315);\n    let t1317 = circuit_sub(in256, in0);\n    let t1318 = circuit_mul(in3, t1317);\n    let t1319 = circuit_inverse(t1318);\n    let t1320 = circuit_mul(in190, t1319);\n    let t1321 = circuit_add(t1314, t1320);\n    let t1322 = circuit_sub(in256, in8);\n    let t1323 = circuit_mul(t1316, t1322);\n    let t1324 = circuit_sub(in256, in8);\n    let t1325 = circuit_mul(in4, t1324);\n    let t1326 = circuit_inverse(t1325);\n    let t1327 = circuit_mul(in191, t1326);\n    let t1328 = circuit_add(t1321, t1327);\n    let t1329 = circuit_sub(in256, in9);\n    let t1330 = circuit_mul(t1323, t1329);\n    let t1331 = circuit_sub(in256, in9);\n    let t1332 = circuit_mul(in5, t1331);\n    let t1333 = circuit_inverse(t1332);\n    let t1334 = circuit_mul(in192, t1333);\n    let t1335 = circuit_add(t1328, t1334);\n    let t1336 = circuit_sub(in256, in10);\n    let t1337 = circuit_mul(t1330, t1336);\n    let t1338 = circuit_sub(in256, in10);\n    let t1339 = circuit_mul(in6, t1338);\n    let t1340 = circuit_inverse(t1339);\n    let t1341 = circuit_mul(in193, t1340);\n    let t1342 = circuit_add(t1335, t1341);\n    let t1343 = circuit_sub(in256, in11);\n    let t1344 = circuit_mul(t1337, t1343);\n    let t1345 = circuit_sub(in256, in11);\n    let t1346 = circuit_mul(in5, t1345);\n    let t1347 = circuit_inverse(t1346);\n    let t1348 = circuit_mul(in194, t1347);\n    let t1349 = circuit_add(t1342, t1348);\n    let t1350 = circuit_sub(in256, in12);\n    let t1351 = circuit_mul(t1344, t1350);\n    let t1352 = circuit_sub(in256, in12);\n    let t1353 = circuit_mul(in4, t1352);\n    let t1354 = circuit_inverse(t1353);\n    let t1355 = circuit_mul(in195, t1354);\n    let t1356 = circuit_add(t1349, t1355);\n    let t1357 = circuit_sub(in256, in13);\n    let t1358 = circuit_mul(t1351, t1357);\n    let t1359 = circuit_sub(in256, in13);\n    let t1360 = circuit_mul(in3, t1359);\n    let t1361 = circuit_inverse(t1360);\n    let t1362 = circuit_mul(in196, t1361);\n    let t1363 = circuit_add(t1356, t1362);\n    let t1364 = circuit_sub(in256, in14);\n    let t1365 = circuit_mul(t1358, t1364);\n    let t1366 = circuit_sub(in256, in14);\n    let t1367 = circuit_mul(in2, t1366);\n    let t1368 = circuit_inverse(t1367);\n    let t1369 = circuit_mul(in197, t1368);\n    let t1370 = circuit_add(t1363, t1369);\n    let t1371 = circuit_mul(t1370, t1365);\n    let t1372 = circuit_sub(t1303, in0);\n    let t1373 = circuit_mul(in256, t1372);\n    let t1374 = circuit_add(in0, t1373);\n    let t1375 = circuit_mul(t1301, t1374);\n    let t1376 = circuit_sub(in205, in9);\n    let t1377 = circuit_mul(t1376, in198);\n    let t1378 = circuit_mul(t1377, in227);\n    let t1379 = circuit_mul(t1378, in226);\n    let t1380 = circuit_mul(t1379, in15);\n    let t1381 = circuit_mul(in200, in226);\n    let t1382 = circuit_mul(in201, in227);\n    let t1383 = circuit_mul(in202, in228);\n    let t1384 = circuit_mul(in203, in229);\n    let t1385 = circuit_add(t1380, t1381);\n    let t1386 = circuit_add(t1385, t1382);\n    let t1387 = circuit_add(t1386, t1383);\n    let t1388 = circuit_add(t1387, t1384);\n    let t1389 = circuit_add(t1388, in199);\n    let t1390 = circuit_sub(in205, in0);\n    let t1391 = circuit_mul(t1390, in237);\n    let t1392 = circuit_add(t1389, t1391);\n    let t1393 = circuit_mul(t1392, in205);\n    let t1394 = circuit_mul(t1393, t1375);\n    let t1395 = circuit_add(in226, in229);\n    let t1396 = circuit_add(t1395, in198);\n    let t1397 = circuit_sub(t1396, in234);\n    let t1398 = circuit_sub(in205, in8);\n    let t1399 = circuit_mul(t1397, t1398);\n    let t1400 = circuit_sub(in205, in0);\n    let t1401 = circuit_mul(t1399, t1400);\n    let t1402 = circuit_mul(t1401, in205);\n    let t1403 = circuit_mul(t1402, t1375);\n    let t1404 = circuit_mul(in216, in261);\n    let t1405 = circuit_add(in226, t1404);\n    let t1406 = circuit_add(t1405, in262);\n    let t1407 = circuit_mul(in217, in261);\n    let t1408 = circuit_add(in227, t1407);\n    let t1409 = circuit_add(t1408, in262);\n    let t1410 = circuit_mul(t1406, t1409);\n    let t1411 = circuit_mul(in218, in261);\n    let t1412 = circuit_add(in228, t1411);\n    let t1413 = circuit_add(t1412, in262);\n    let t1414 = circuit_mul(t1410, t1413);\n    let t1415 = circuit_mul(in219, in261);\n    let t1416 = circuit_add(in229, t1415);\n    let t1417 = circuit_add(t1416, in262);\n    let t1418 = circuit_mul(t1414, t1417);\n    let t1419 = circuit_mul(in212, in261);\n    let t1420 = circuit_add(in226, t1419);\n    let t1421 = circuit_add(t1420, in262);\n    let t1422 = circuit_mul(in213, in261);\n    let t1423 = circuit_add(in227, t1422);\n    let t1424 = circuit_add(t1423, in262);\n    let t1425 = circuit_mul(t1421, t1424);\n    let t1426 = circuit_mul(in214, in261);\n    let t1427 = circuit_add(in228, t1426);\n    let t1428 = circuit_add(t1427, in262);\n    let t1429 = circuit_mul(t1425, t1428);\n    let t1430 = circuit_mul(in215, in261);\n    let t1431 = circuit_add(in229, t1430);\n    let t1432 = circuit_add(t1431, in262);\n    let t1433 = circuit_mul(t1429, t1432);\n    let t1434 = circuit_add(in230, in224);\n    let t1435 = circuit_mul(t1418, t1434);\n    let t1436 = circuit_mul(in225, t119);\n    let t1437 = circuit_add(in238, t1436);\n    let t1438 = circuit_mul(t1433, t1437);\n    let t1439 = circuit_sub(t1435, t1438);\n    let t1440 = circuit_mul(t1439, t1375);\n    let t1441 = circuit_mul(in225, in238);\n    let t1442 = circuit_mul(t1441, t1375);\n    let t1443 = circuit_mul(in221, in258);\n    let t1444 = circuit_mul(in222, in259);\n    let t1445 = circuit_mul(in223, in260);\n    let t1446 = circuit_add(in220, in262);\n    let t1447 = circuit_add(t1446, t1443);\n    let t1448 = circuit_add(t1447, t1444);\n    let t1449 = circuit_add(t1448, t1445);\n    let t1450 = circuit_mul(in201, in234);\n    let t1451 = circuit_add(in226, in262);\n    let t1452 = circuit_add(t1451, t1450);\n    let t1453 = circuit_mul(in198, in235);\n    let t1454 = circuit_add(in227, t1453);\n    let t1455 = circuit_mul(in199, in236);\n    let t1456 = circuit_add(in228, t1455);\n    let t1457 = circuit_mul(t1454, in258);\n    let t1458 = circuit_mul(t1456, in259);\n    let t1459 = circuit_mul(in202, in260);\n    let t1460 = circuit_add(t1452, t1457);\n    let t1461 = circuit_add(t1460, t1458);\n    let t1462 = circuit_add(t1461, t1459);\n    let t1463 = circuit_mul(in231, t1449);\n    let t1464 = circuit_mul(in231, t1462);\n    let t1465 = circuit_add(in233, in204);\n    let t1466 = circuit_mul(in233, in204);\n    let t1467 = circuit_sub(t1465, t1466);\n    let t1468 = circuit_mul(t1462, t1449);\n    let t1469 = circuit_mul(t1468, in231);\n    let t1470 = circuit_sub(t1469, t1467);\n    let t1471 = circuit_mul(t1470, t1375);\n    let t1472 = circuit_mul(in204, t1463);\n    let t1473 = circuit_mul(in232, t1464);\n    let t1474 = circuit_sub(t1472, t1473);\n    let t1475 = circuit_mul(in233, in233);\n    let t1476 = circuit_sub(t1475, in233);\n    let t1477 = circuit_mul(t1476, t1375);\n    let t1478 = circuit_mul(in206, t1375);\n    let t1479 = circuit_sub(in227, in226);\n    let t1480 = circuit_sub(in228, in227);\n    let t1481 = circuit_sub(in229, in228);\n    let t1482 = circuit_sub(in234, in229);\n    let t1483 = circuit_add(t1479, in16);\n    let t1484 = circuit_add(t1483, in16);\n    let t1485 = circuit_add(t1484, in16);\n    let t1486 = circuit_mul(t1479, t1483);\n    let t1487 = circuit_mul(t1486, t1484);\n    let t1488 = circuit_mul(t1487, t1485);\n    let t1489 = circuit_mul(t1488, t1478);\n    let t1490 = circuit_add(t1480, in16);\n    let t1491 = circuit_add(t1490, in16);\n    let t1492 = circuit_add(t1491, in16);\n    let t1493 = circuit_mul(t1480, t1490);\n    let t1494 = circuit_mul(t1493, t1491);\n    let t1495 = circuit_mul(t1494, t1492);\n    let t1496 = circuit_mul(t1495, t1478);\n    let t1497 = circuit_add(t1481, in16);\n    let t1498 = circuit_add(t1497, in16);\n    let t1499 = circuit_add(t1498, in16);\n    let t1500 = circuit_mul(t1481, t1497);\n    let t1501 = circuit_mul(t1500, t1498);\n    let t1502 = circuit_mul(t1501, t1499);\n    let t1503 = circuit_mul(t1502, t1478);\n    let t1504 = circuit_add(t1482, in16);\n    let t1505 = circuit_add(t1504, in16);\n    let t1506 = circuit_add(t1505, in16);\n    let t1507 = circuit_mul(t1482, t1504);\n    let t1508 = circuit_mul(t1507, t1505);\n    let t1509 = circuit_mul(t1508, t1506);\n    let t1510 = circuit_mul(t1509, t1478);\n    let t1511 = circuit_sub(in234, in227);\n    let t1512 = circuit_mul(in228, in228);\n    let t1513 = circuit_mul(in237, in237);\n    let t1514 = circuit_mul(in228, in237);\n    let t1515 = circuit_mul(t1514, in200);\n    let t1516 = circuit_add(in235, in234);\n    let t1517 = circuit_add(t1516, in227);\n    let t1518 = circuit_mul(t1517, t1511);\n    let t1519 = circuit_mul(t1518, t1511);\n    let t1520 = circuit_sub(t1519, t1513);\n    let t1521 = circuit_sub(t1520, t1512);\n    let t1522 = circuit_add(t1521, t1515);\n    let t1523 = circuit_add(t1522, t1515);\n    let t1524 = circuit_sub(in0, in198);\n    let t1525 = circuit_mul(t1523, t1375);\n    let t1526 = circuit_mul(t1525, in207);\n    let t1527 = circuit_mul(t1526, t1524);\n    let t1528 = circuit_add(in228, in236);\n    let t1529 = circuit_mul(in237, in200);\n    let t1530 = circuit_sub(t1529, in228);\n    let t1531 = circuit_mul(t1528, t1511);\n    let t1532 = circuit_sub(in235, in227);\n    let t1533 = circuit_mul(t1532, t1530);\n    let t1534 = circuit_add(t1531, t1533);\n    let t1535 = circuit_mul(t1534, t1375);\n    let t1536 = circuit_mul(t1535, in207);\n    let t1537 = circuit_mul(t1536, t1524);\n    let t1538 = circuit_add(t1512, in17);\n    let t1539 = circuit_mul(t1538, in227);\n    let t1540 = circuit_add(t1512, t1512);\n    let t1541 = circuit_add(t1540, t1540);\n    let t1542 = circuit_mul(t1539, in18);\n    let t1543 = circuit_add(in235, in227);\n    let t1544 = circuit_add(t1543, in227);\n    let t1545 = circuit_mul(t1544, t1541);\n    let t1546 = circuit_sub(t1545, t1542);\n    let t1547 = circuit_mul(t1546, t1375);\n    let t1548 = circuit_mul(t1547, in207);\n    let t1549 = circuit_mul(t1548, in198);\n    let t1550 = circuit_add(t1527, t1549);\n    let t1551 = circuit_add(in227, in227);\n    let t1552 = circuit_add(t1551, in227);\n    let t1553 = circuit_mul(t1552, in227);\n    let t1554 = circuit_sub(in227, in235);\n    let t1555 = circuit_mul(t1553, t1554);\n    let t1556 = circuit_add(in228, in228);\n    let t1557 = circuit_add(in228, in236);\n    let t1558 = circuit_mul(t1556, t1557);\n    let t1559 = circuit_sub(t1555, t1558);\n    let t1560 = circuit_mul(t1559, t1375);\n    let t1561 = circuit_mul(t1560, in207);\n    let t1562 = circuit_mul(t1561, in198);\n    let t1563 = circuit_add(t1537, t1562);\n    let t1564 = circuit_mul(in228, in260);\n    let t1565 = circuit_mul(in227, in259);\n    let t1566 = circuit_add(t1564, t1565);\n    let t1567 = circuit_mul(in226, in258);\n    let t1568 = circuit_add(t1566, t1567);\n    let t1569 = circuit_add(t1568, in199);\n    let t1570 = circuit_sub(t1569, in229);\n    let t1571 = circuit_sub(in234, in226);\n    let t1572 = circuit_sub(in237, in229);\n    let t1573 = circuit_sub(t1571, in0);\n    let t1574 = circuit_mul(t1571, t1573);\n    let t1575 = circuit_mul(t1571, in16);\n    let t1576 = circuit_add(t1575, in0);\n    let t1577 = circuit_mul(t1576, t1572);\n    let t1578 = circuit_mul(in200, in201);\n    let t1579 = circuit_mul(in208, t1375);\n    let t1580 = circuit_mul(t1578, t1579);\n    let t1581 = circuit_mul(t1577, t1580);\n    let t1582 = circuit_mul(t1574, t1580);\n    let t1583 = circuit_mul(t1570, t1578);\n    let t1584 = circuit_sub(in229, t1569);\n    let t1585 = circuit_sub(t1584, in0);\n    let t1586 = circuit_mul(t1584, t1585);\n    let t1587 = circuit_mul(in236, in260);\n    let t1588 = circuit_mul(in235, in259);\n    let t1589 = circuit_mul(in234, in258);\n    let t1590 = circuit_add(t1587, t1588);\n    let t1591 = circuit_add(t1590, t1589);\n    let t1592 = circuit_sub(in237, t1591);\n    let t1593 = circuit_sub(in236, in228);\n    let t1594 = circuit_mul(t1571, in16);\n    let t1595 = circuit_add(t1594, in0);\n    let t1596 = circuit_mul(t1592, in16);\n    let t1597 = circuit_add(t1596, in0);\n    let t1598 = circuit_mul(t1595, t1593);\n    let t1599 = circuit_mul(t1598, t1597);\n    let t1600 = circuit_mul(t1592, t1592);\n    let t1601 = circuit_sub(t1600, t1592);\n    let t1602 = circuit_mul(in202, t1579);\n    let t1603 = circuit_mul(t1599, t1602);\n    let t1604 = circuit_mul(t1574, t1602);\n    let t1605 = circuit_mul(t1601, t1602);\n    let t1606 = circuit_mul(t1586, in202);\n    let t1607 = circuit_sub(in235, in227);\n    let t1608 = circuit_mul(t1571, in16);\n    let t1609 = circuit_add(t1608, in0);\n    let t1610 = circuit_mul(t1609, t1607);\n    let t1611 = circuit_sub(t1610, in228);\n    let t1612 = circuit_mul(in203, in200);\n    let t1613 = circuit_mul(t1611, t1612);\n    let t1614 = circuit_mul(in198, in200);\n    let t1615 = circuit_mul(t1570, t1614);\n    let t1616 = circuit_add(t1583, t1613);\n    let t1617 = circuit_add(t1616, t1615);\n    let t1618 = circuit_add(t1617, t1606);\n    let t1619 = circuit_mul(t1618, t1579);\n    let t1620 = circuit_mul(in226, in235);\n    let t1621 = circuit_mul(in234, in227);\n    let t1622 = circuit_add(t1620, t1621);\n    let t1623 = circuit_mul(in226, in229);\n    let t1624 = circuit_mul(in227, in228);\n    let t1625 = circuit_add(t1623, t1624);\n    let t1626 = circuit_sub(t1625, in236);\n    let t1627 = circuit_mul(t1626, in19);\n    let t1628 = circuit_sub(t1627, in237);\n    let t1629 = circuit_add(t1628, t1622);\n    let t1630 = circuit_mul(t1629, in203);\n    let t1631 = circuit_mul(t1622, in19);\n    let t1632 = circuit_mul(in234, in235);\n    let t1633 = circuit_add(t1631, t1632);\n    let t1634 = circuit_add(in228, in229);\n    let t1635 = circuit_sub(t1633, t1634);\n    let t1636 = circuit_mul(t1635, in202);\n    let t1637 = circuit_add(t1633, in229);\n    let t1638 = circuit_add(in236, in237);\n    let t1639 = circuit_sub(t1637, t1638);\n    let t1640 = circuit_mul(t1639, in198);\n    let t1641 = circuit_add(t1636, t1630);\n    let t1642 = circuit_add(t1641, t1640);\n    let t1643 = circuit_mul(t1642, in201);\n    let t1644 = circuit_mul(in235, in20);\n    let t1645 = circuit_add(t1644, in234);\n    let t1646 = circuit_mul(t1645, in20);\n    let t1647 = circuit_add(t1646, in228);\n    let t1648 = circuit_mul(t1647, in20);\n    let t1649 = circuit_add(t1648, in227);\n    let t1650 = circuit_mul(t1649, in20);\n    let t1651 = circuit_add(t1650, in226);\n    let t1652 = circuit_sub(t1651, in229);\n    let t1653 = circuit_mul(t1652, in203);\n    let t1654 = circuit_mul(in236, in20);\n    let t1655 = circuit_add(t1654, in235);\n    let t1656 = circuit_mul(t1655, in20);\n    let t1657 = circuit_add(t1656, in234);\n    let t1658 = circuit_mul(t1657, in20);\n    let t1659 = circuit_add(t1658, in229);\n    let t1660 = circuit_mul(t1659, in20);\n    let t1661 = circuit_add(t1660, in228);\n    let t1662 = circuit_sub(t1661, in237);\n    let t1663 = circuit_mul(t1662, in198);\n    let t1664 = circuit_add(t1653, t1663);\n    let t1665 = circuit_mul(t1664, in202);\n    let t1666 = circuit_add(t1643, t1665);\n    let t1667 = circuit_mul(t1666, in209);\n    let t1668 = circuit_mul(t1667, t1375);\n    let t1669 = circuit_add(in226, in200);\n    let t1670 = circuit_add(in227, in201);\n    let t1671 = circuit_add(in228, in202);\n    let t1672 = circuit_add(in229, in203);\n    let t1673 = circuit_mul(t1669, t1669);\n    let t1674 = circuit_mul(t1673, t1673);\n    let t1675 = circuit_mul(t1674, t1669);\n    let t1676 = circuit_mul(t1670, t1670);\n    let t1677 = circuit_mul(t1676, t1676);\n    let t1678 = circuit_mul(t1677, t1670);\n    let t1679 = circuit_mul(t1671, t1671);\n    let t1680 = circuit_mul(t1679, t1679);\n    let t1681 = circuit_mul(t1680, t1671);\n    let t1682 = circuit_mul(t1672, t1672);\n    let t1683 = circuit_mul(t1682, t1682);\n    let t1684 = circuit_mul(t1683, t1672);\n    let t1685 = circuit_add(t1675, t1678);\n    let t1686 = circuit_add(t1681, t1684);\n    let t1687 = circuit_add(t1678, t1678);\n    let t1688 = circuit_add(t1687, t1686);\n    let t1689 = circuit_add(t1684, t1684);\n    let t1690 = circuit_add(t1689, t1685);\n    let t1691 = circuit_add(t1686, t1686);\n    let t1692 = circuit_add(t1691, t1691);\n    let t1693 = circuit_add(t1692, t1690);\n    let t1694 = circuit_add(t1685, t1685);\n    let t1695 = circuit_add(t1694, t1694);\n    let t1696 = circuit_add(t1695, t1688);\n    let t1697 = circuit_add(t1690, t1696);\n    let t1698 = circuit_add(t1688, t1693);\n    let t1699 = circuit_mul(in210, t1375);\n    let t1700 = circuit_sub(t1697, in234);\n    let t1701 = circuit_mul(t1699, t1700);\n    let t1702 = circuit_sub(t1696, in235);\n    let t1703 = circuit_mul(t1699, t1702);\n    let t1704 = circuit_sub(t1698, in236);\n    let t1705 = circuit_mul(t1699, t1704);\n    let t1706 = circuit_sub(t1693, in237);\n    let t1707 = circuit_mul(t1699, t1706);\n    let t1708 = circuit_add(in226, in200);\n    let t1709 = circuit_mul(t1708, t1708);\n    let t1710 = circuit_mul(t1709, t1709);\n    let t1711 = circuit_mul(t1710, t1708);\n    let t1712 = circuit_add(t1711, in227);\n    let t1713 = circuit_add(t1712, in228);\n    let t1714 = circuit_add(t1713, in229);\n    let t1715 = circuit_mul(in211, t1375);\n    let t1716 = circuit_mul(t1711, in21);\n    let t1717 = circuit_add(t1716, t1714);\n    let t1718 = circuit_sub(t1717, in234);\n    let t1719 = circuit_mul(t1715, t1718);\n    let t1720 = circuit_mul(in227, in22);\n    let t1721 = circuit_add(t1720, t1714);\n    let t1722 = circuit_sub(t1721, in235);\n    let t1723 = circuit_mul(t1715, t1722);\n    let t1724 = circuit_mul(in228, in23);\n    let t1725 = circuit_add(t1724, t1714);\n    let t1726 = circuit_sub(t1725, in236);\n    let t1727 = circuit_mul(t1715, t1726);\n    let t1728 = circuit_mul(in229, in24);\n    let t1729 = circuit_add(t1728, t1714);\n    let t1730 = circuit_sub(t1729, in237);\n    let t1731 = circuit_mul(t1715, t1730);\n    let t1732 = circuit_mul(t1403, in264);\n    let t1733 = circuit_add(t1394, t1732);\n    let t1734 = circuit_mul(in264, in264);\n    let t1735 = circuit_mul(t1440, t1734);\n    let t1736 = circuit_add(t1733, t1735);\n    let t1737 = circuit_mul(t1734, in264);\n    let t1738 = circuit_mul(t1442, t1737);\n    let t1739 = circuit_add(t1736, t1738);\n    let t1740 = circuit_mul(t1737, in264);\n    let t1741 = circuit_mul(t1471, t1740);\n    let t1742 = circuit_add(t1739, t1741);\n    let t1743 = circuit_mul(t1740, in264);\n    let t1744 = circuit_mul(t1474, t1743);\n    let t1745 = circuit_add(t1742, t1744);\n    let t1746 = circuit_mul(t1743, in264);\n    let t1747 = circuit_mul(t1477, t1746);\n    let t1748 = circuit_add(t1745, t1747);\n    let t1749 = circuit_mul(t1746, in264);\n    let t1750 = circuit_mul(t1489, t1749);\n    let t1751 = circuit_add(t1748, t1750);\n    let t1752 = circuit_mul(t1749, in264);\n    let t1753 = circuit_mul(t1496, t1752);\n    let t1754 = circuit_add(t1751, t1753);\n    let t1755 = circuit_mul(t1752, in264);\n    let t1756 = circuit_mul(t1503, t1755);\n    let t1757 = circuit_add(t1754, t1756);\n    let t1758 = circuit_mul(t1755, in264);\n    let t1759 = circuit_mul(t1510, t1758);\n    let t1760 = circuit_add(t1757, t1759);\n    let t1761 = circuit_mul(t1758, in264);\n    let t1762 = circuit_mul(t1550, t1761);\n    let t1763 = circuit_add(t1760, t1762);\n    let t1764 = circuit_mul(t1761, in264);\n    let t1765 = circuit_mul(t1563, t1764);\n    let t1766 = circuit_add(t1763, t1765);\n    let t1767 = circuit_mul(t1764, in264);\n    let t1768 = circuit_mul(t1619, t1767);\n    let t1769 = circuit_add(t1766, t1768);\n    let t1770 = circuit_mul(t1767, in264);\n    let t1771 = circuit_mul(t1581, t1770);\n    let t1772 = circuit_add(t1769, t1771);\n    let t1773 = circuit_mul(t1770, in264);\n    let t1774 = circuit_mul(t1582, t1773);\n    let t1775 = circuit_add(t1772, t1774);\n    let t1776 = circuit_mul(t1773, in264);\n    let t1777 = circuit_mul(t1603, t1776);\n    let t1778 = circuit_add(t1775, t1777);\n    let t1779 = circuit_mul(t1776, in264);\n    let t1780 = circuit_mul(t1604, t1779);\n    let t1781 = circuit_add(t1778, t1780);\n    let t1782 = circuit_mul(t1779, in264);\n    let t1783 = circuit_mul(t1605, t1782);\n    let t1784 = circuit_add(t1781, t1783);\n    let t1785 = circuit_mul(t1782, in264);\n    let t1786 = circuit_mul(t1668, t1785);\n    let t1787 = circuit_add(t1784, t1786);\n    let t1788 = circuit_mul(t1785, in264);\n    let t1789 = circuit_mul(t1701, t1788);\n    let t1790 = circuit_add(t1787, t1789);\n    let t1791 = circuit_mul(t1788, in264);\n    let t1792 = circuit_mul(t1703, t1791);\n    let t1793 = circuit_add(t1790, t1792);\n    let t1794 = circuit_mul(t1791, in264);\n    let t1795 = circuit_mul(t1705, t1794);\n    let t1796 = circuit_add(t1793, t1795);\n    let t1797 = circuit_mul(t1794, in264);\n    let t1798 = circuit_mul(t1707, t1797);\n    let t1799 = circuit_add(t1796, t1798);\n    let t1800 = circuit_mul(t1797, in264);\n    let t1801 = circuit_mul(t1719, t1800);\n    let t1802 = circuit_add(t1799, t1801);\n    let t1803 = circuit_mul(t1800, in264);\n    let t1804 = circuit_mul(t1723, t1803);\n    let t1805 = circuit_add(t1802, t1804);\n    let t1806 = circuit_mul(t1803, in264);\n    let t1807 = circuit_mul(t1727, t1806);\n    let t1808 = circuit_add(t1805, t1807);\n    let t1809 = circuit_mul(t1806, in264);\n    let t1810 = circuit_mul(t1731, t1809);\n    let t1811 = circuit_add(t1808, t1810);\n    let t1812 = circuit_mul(in242, in243);\n    let t1813 = circuit_mul(t1812, in244);\n    let t1814 = circuit_mul(t1813, in245);\n    let t1815 = circuit_mul(t1814, in246);\n    let t1816 = circuit_mul(t1815, in247);\n    let t1817 = circuit_mul(t1816, in248);\n    let t1818 = circuit_mul(t1817, in249);\n    let t1819 = circuit_mul(t1818, in250);\n    let t1820 = circuit_mul(t1819, in251);\n    let t1821 = circuit_mul(t1820, in252);\n    let t1822 = circuit_mul(t1821, in253);\n    let t1823 = circuit_mul(t1822, in254);\n    let t1824 = circuit_mul(t1823, in255);\n    let t1825 = circuit_mul(t1824, in256);\n    let t1826 = circuit_sub(in0, t1825);\n    let t1827 = circuit_mul(t1811, t1826);\n    let t1828 = circuit_mul(in239, in265);\n    let t1829 = circuit_add(t1827, t1828);\n    let t1830 = circuit_sub(t1829, t1371);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t1307, t1830).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(ZK_HONK_SUMCHECK_SIZE_17_PUB_19_GRUMPKIN_CONSTANTS.span()); // in0 - in24\n\n    // Fill inputs:\n\n    for val in p_public_inputs {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in25 - in27\n\n    for val in p_pairing_point_object {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in28 - in43\n\n    circuit_inputs = circuit_inputs.next_2(libra_sum); // in44\n\n    for val in sumcheck_univariates_flat {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in45 - in197\n\n    for val in sumcheck_evaluations {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in198 - in238\n\n    circuit_inputs = circuit_inputs.next_2(libra_evaluation); // in239\n\n    for val in tp_sum_check_u_challenges {\n        circuit_inputs = circuit_inputs.next_u128(*val);\n    } // in240 - in256\n\n    circuit_inputs = circuit_inputs.next_u128(tp_gate_challenge); // in257\n    circuit_inputs = circuit_inputs.next_2(tp_eta_1); // in258\n    circuit_inputs = circuit_inputs.next_2(tp_eta_2); // in259\n    circuit_inputs = circuit_inputs.next_2(tp_eta_3); // in260\n    circuit_inputs = circuit_inputs.next_2(tp_beta); // in261\n    circuit_inputs = circuit_inputs.next_2(tp_gamma); // in262\n    circuit_inputs = circuit_inputs.next_2(tp_base_rlc); // in263\n    circuit_inputs = circuit_inputs.next_u128(tp_alpha); // in264\n    circuit_inputs = circuit_inputs.next_2(tp_libra_challenge); // in265\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let check_rlc: u384 = outputs.get_output(t1307);\n    let check: u384 = outputs.get_output(t1830);\n    return (check_rlc, check);\n}\nconst ZK_HONK_SUMCHECK_SIZE_17_PUB_19_GRUMPKIN_CONSTANTS: [u384; 25] = [\n    u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x10000000, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x9d80, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x79b9709143e1f593efffec51,\n        limb1: 0xb85045b68181585d2833e848,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 { limb0: 0x5a0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x79b9709143e1f593effffd31,\n        limb1: 0xb85045b68181585d2833e848,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 { limb0: 0x240, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x2, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x3, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x4, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x5, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x6, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x7, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x8, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x3cdcb848a1f0fac9f8000000,\n        limb1: 0xdc2822db40c0ac2e9419f424,\n        limb2: 0x183227397098d014,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x79b9709143e1f593f0000000,\n        limb1: 0xb85045b68181585d2833e848,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 { limb0: 0x11, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x9, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x100000000000000000, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x4000, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x29ca1d7fb56821fd19d3b6e7,\n        limb1: 0x4b1e03b4bd9490c0d03f989,\n        limb2: 0x10dc6e9c006ea38b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd4dd9b84a86b38cfb45a740b,\n        limb1: 0x149b3d0a30b3bb599df9756,\n        limb2: 0xc28145b6a44df3e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x60e3596170067d00141cac15,\n        limb1: 0xb2c7645a50392798b21f75bb,\n        limb2: 0x544b8338791518,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb8fa852613bc534433ee428b,\n        limb1: 0x2e2e82eb122789e352e105a3,\n        limb2: 0x222c01175718386f,\n        limb3: 0x0,\n    },\n];\n#[inline(always)]\npub fn run_GRUMPKIN_ZKHONK_PREP_MSM_SCALARS_SIZE_17_circuit(\n    p_sumcheck_evaluations: Span<u256>,\n    p_gemini_masking_eval: u384,\n    p_gemini_a_evaluations: Span<u256>,\n    p_libra_poly_evals: Span<u256>,\n    tp_gemini_r: u384,\n    tp_rho: u384,\n    tp_shplonk_z: u384,\n    tp_shplonk_nu: u384,\n    tp_sum_check_u_challenges: Span<u128>,\n    modulus: core::circuit::CircuitModulus,\n) -> (\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x1\n    let in2 = CE::<CI<2>> {}; // 0x7b0c561a6148404f086204a9f36ffb0617942546750f230c893619174a57a76\n\n    // INPUT stack\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let (in24, in25, in26) = (CE::<CI<24>> {}, CE::<CI<25>> {}, CE::<CI<26>> {});\n    let (in27, in28, in29) = (CE::<CI<27>> {}, CE::<CI<28>> {}, CE::<CI<29>> {});\n    let (in30, in31, in32) = (CE::<CI<30>> {}, CE::<CI<31>> {}, CE::<CI<32>> {});\n    let (in33, in34, in35) = (CE::<CI<33>> {}, CE::<CI<34>> {}, CE::<CI<35>> {});\n    let (in36, in37, in38) = (CE::<CI<36>> {}, CE::<CI<37>> {}, CE::<CI<38>> {});\n    let (in39, in40, in41) = (CE::<CI<39>> {}, CE::<CI<40>> {}, CE::<CI<41>> {});\n    let (in42, in43, in44) = (CE::<CI<42>> {}, CE::<CI<43>> {}, CE::<CI<44>> {});\n    let (in45, in46, in47) = (CE::<CI<45>> {}, CE::<CI<46>> {}, CE::<CI<47>> {});\n    let (in48, in49, in50) = (CE::<CI<48>> {}, CE::<CI<49>> {}, CE::<CI<50>> {});\n    let (in51, in52, in53) = (CE::<CI<51>> {}, CE::<CI<52>> {}, CE::<CI<53>> {});\n    let (in54, in55, in56) = (CE::<CI<54>> {}, CE::<CI<55>> {}, CE::<CI<56>> {});\n    let (in57, in58, in59) = (CE::<CI<57>> {}, CE::<CI<58>> {}, CE::<CI<59>> {});\n    let (in60, in61, in62) = (CE::<CI<60>> {}, CE::<CI<61>> {}, CE::<CI<62>> {});\n    let (in63, in64, in65) = (CE::<CI<63>> {}, CE::<CI<64>> {}, CE::<CI<65>> {});\n    let (in66, in67, in68) = (CE::<CI<66>> {}, CE::<CI<67>> {}, CE::<CI<68>> {});\n    let (in69, in70, in71) = (CE::<CI<69>> {}, CE::<CI<70>> {}, CE::<CI<71>> {});\n    let (in72, in73, in74) = (CE::<CI<72>> {}, CE::<CI<73>> {}, CE::<CI<74>> {});\n    let (in75, in76, in77) = (CE::<CI<75>> {}, CE::<CI<76>> {}, CE::<CI<77>> {});\n    let (in78, in79, in80) = (CE::<CI<78>> {}, CE::<CI<79>> {}, CE::<CI<80>> {});\n    let (in81, in82, in83) = (CE::<CI<81>> {}, CE::<CI<82>> {}, CE::<CI<83>> {});\n    let (in84, in85, in86) = (CE::<CI<84>> {}, CE::<CI<85>> {}, CE::<CI<86>> {});\n    let t0 = circuit_mul(in66, in66);\n    let t1 = circuit_mul(t0, t0);\n    let t2 = circuit_mul(t1, t1);\n    let t3 = circuit_mul(t2, t2);\n    let t4 = circuit_mul(t3, t3);\n    let t5 = circuit_mul(t4, t4);\n    let t6 = circuit_mul(t5, t5);\n    let t7 = circuit_mul(t6, t6);\n    let t8 = circuit_mul(t7, t7);\n    let t9 = circuit_mul(t8, t8);\n    let t10 = circuit_mul(t9, t9);\n    let t11 = circuit_mul(t10, t10);\n    let t12 = circuit_mul(t11, t11);\n    let t13 = circuit_mul(t12, t12);\n    let t14 = circuit_mul(t13, t13);\n    let t15 = circuit_mul(t14, t14);\n    let t16 = circuit_sub(in68, in66);\n    let t17 = circuit_inverse(t16);\n    let t18 = circuit_add(in68, in66);\n    let t19 = circuit_inverse(t18);\n    let t20 = circuit_mul(in69, t19);\n    let t21 = circuit_add(t17, t20);\n    let t22 = circuit_inverse(in66);\n    let t23 = circuit_mul(in69, t19);\n    let t24 = circuit_sub(t17, t23);\n    let t25 = circuit_mul(t22, t24);\n    let t26 = circuit_sub(in0, t25);\n    let t27 = circuit_sub(in0, t21);\n    let t28 = circuit_mul(t27, in67);\n    let t29 = circuit_mul(in3, in67);\n    let t30 = circuit_add(in44, t29);\n    let t31 = circuit_mul(in67, in67);\n    let t32 = circuit_mul(t27, t31);\n    let t33 = circuit_mul(in4, t31);\n    let t34 = circuit_add(t30, t33);\n    let t35 = circuit_mul(t31, in67);\n    let t36 = circuit_mul(t27, t35);\n    let t37 = circuit_mul(in5, t35);\n    let t38 = circuit_add(t34, t37);\n    let t39 = circuit_mul(t35, in67);\n    let t40 = circuit_mul(t27, t39);\n    let t41 = circuit_mul(in6, t39);\n    let t42 = circuit_add(t38, t41);\n    let t43 = circuit_mul(t39, in67);\n    let t44 = circuit_mul(t27, t43);\n    let t45 = circuit_mul(in7, t43);\n    let t46 = circuit_add(t42, t45);\n    let t47 = circuit_mul(t43, in67);\n    let t48 = circuit_mul(t27, t47);\n    let t49 = circuit_mul(in8, t47);\n    let t50 = circuit_add(t46, t49);\n    let t51 = circuit_mul(t47, in67);\n    let t52 = circuit_mul(t27, t51);\n    let t53 = circuit_mul(in9, t51);\n    let t54 = circuit_add(t50, t53);\n    let t55 = circuit_mul(t51, in67);\n    let t56 = circuit_mul(t27, t55);\n    let t57 = circuit_mul(in10, t55);\n    let t58 = circuit_add(t54, t57);\n    let t59 = circuit_mul(t55, in67);\n    let t60 = circuit_mul(t27, t59);\n    let t61 = circuit_mul(in11, t59);\n    let t62 = circuit_add(t58, t61);\n    let t63 = circuit_mul(t59, in67);\n    let t64 = circuit_mul(t27, t63);\n    let t65 = circuit_mul(in12, t63);\n    let t66 = circuit_add(t62, t65);\n    let t67 = circuit_mul(t63, in67);\n    let t68 = circuit_mul(t27, t67);\n    let t69 = circuit_mul(in13, t67);\n    let t70 = circuit_add(t66, t69);\n    let t71 = circuit_mul(t67, in67);\n    let t72 = circuit_mul(t27, t71);\n    let t73 = circuit_mul(in14, t71);\n    let t74 = circuit_add(t70, t73);\n    let t75 = circuit_mul(t71, in67);\n    let t76 = circuit_mul(t27, t75);\n    let t77 = circuit_mul(in15, t75);\n    let t78 = circuit_add(t74, t77);\n    let t79 = circuit_mul(t75, in67);\n    let t80 = circuit_mul(t27, t79);\n    let t81 = circuit_mul(in16, t79);\n    let t82 = circuit_add(t78, t81);\n    let t83 = circuit_mul(t79, in67);\n    let t84 = circuit_mul(t27, t83);\n    let t85 = circuit_mul(in17, t83);\n    let t86 = circuit_add(t82, t85);\n    let t87 = circuit_mul(t83, in67);\n    let t88 = circuit_mul(t27, t87);\n    let t89 = circuit_mul(in18, t87);\n    let t90 = circuit_add(t86, t89);\n    let t91 = circuit_mul(t87, in67);\n    let t92 = circuit_mul(t27, t91);\n    let t93 = circuit_mul(in19, t91);\n    let t94 = circuit_add(t90, t93);\n    let t95 = circuit_mul(t91, in67);\n    let t96 = circuit_mul(t27, t95);\n    let t97 = circuit_mul(in20, t95);\n    let t98 = circuit_add(t94, t97);\n    let t99 = circuit_mul(t95, in67);\n    let t100 = circuit_mul(t27, t99);\n    let t101 = circuit_mul(in21, t99);\n    let t102 = circuit_add(t98, t101);\n    let t103 = circuit_mul(t99, in67);\n    let t104 = circuit_mul(t27, t103);\n    let t105 = circuit_mul(in22, t103);\n    let t106 = circuit_add(t102, t105);\n    let t107 = circuit_mul(t103, in67);\n    let t108 = circuit_mul(t27, t107);\n    let t109 = circuit_mul(in23, t107);\n    let t110 = circuit_add(t106, t109);\n    let t111 = circuit_mul(t107, in67);\n    let t112 = circuit_mul(t27, t111);\n    let t113 = circuit_mul(in24, t111);\n    let t114 = circuit_add(t110, t113);\n    let t115 = circuit_mul(t111, in67);\n    let t116 = circuit_mul(t27, t115);\n    let t117 = circuit_mul(in25, t115);\n    let t118 = circuit_add(t114, t117);\n    let t119 = circuit_mul(t115, in67);\n    let t120 = circuit_mul(t27, t119);\n    let t121 = circuit_mul(in26, t119);\n    let t122 = circuit_add(t118, t121);\n    let t123 = circuit_mul(t119, in67);\n    let t124 = circuit_mul(t27, t123);\n    let t125 = circuit_mul(in27, t123);\n    let t126 = circuit_add(t122, t125);\n    let t127 = circuit_mul(t123, in67);\n    let t128 = circuit_mul(t27, t127);\n    let t129 = circuit_mul(in28, t127);\n    let t130 = circuit_add(t126, t129);\n    let t131 = circuit_mul(t127, in67);\n    let t132 = circuit_mul(t27, t131);\n    let t133 = circuit_mul(in29, t131);\n    let t134 = circuit_add(t130, t133);\n    let t135 = circuit_mul(t131, in67);\n    let t136 = circuit_mul(t27, t135);\n    let t137 = circuit_mul(in30, t135);\n    let t138 = circuit_add(t134, t137);\n    let t139 = circuit_mul(t135, in67);\n    let t140 = circuit_mul(t27, t139);\n    let t141 = circuit_mul(in31, t139);\n    let t142 = circuit_add(t138, t141);\n    let t143 = circuit_mul(t139, in67);\n    let t144 = circuit_mul(t27, t143);\n    let t145 = circuit_mul(in32, t143);\n    let t146 = circuit_add(t142, t145);\n    let t147 = circuit_mul(t143, in67);\n    let t148 = circuit_mul(t27, t147);\n    let t149 = circuit_mul(in33, t147);\n    let t150 = circuit_add(t146, t149);\n    let t151 = circuit_mul(t147, in67);\n    let t152 = circuit_mul(t27, t151);\n    let t153 = circuit_mul(in34, t151);\n    let t154 = circuit_add(t150, t153);\n    let t155 = circuit_mul(t151, in67);\n    let t156 = circuit_mul(t27, t155);\n    let t157 = circuit_mul(in35, t155);\n    let t158 = circuit_add(t154, t157);\n    let t159 = circuit_mul(t155, in67);\n    let t160 = circuit_mul(t27, t159);\n    let t161 = circuit_mul(in36, t159);\n    let t162 = circuit_add(t158, t161);\n    let t163 = circuit_mul(t159, in67);\n    let t164 = circuit_mul(t27, t163);\n    let t165 = circuit_mul(in37, t163);\n    let t166 = circuit_add(t162, t165);\n    let t167 = circuit_mul(t163, in67);\n    let t168 = circuit_mul(t27, t167);\n    let t169 = circuit_mul(in38, t167);\n    let t170 = circuit_add(t166, t169);\n    let t171 = circuit_mul(t167, in67);\n    let t172 = circuit_mul(t26, t171);\n    let t173 = circuit_add(t140, t172);\n    let t174 = circuit_mul(in39, t171);\n    let t175 = circuit_add(t170, t174);\n    let t176 = circuit_mul(t171, in67);\n    let t177 = circuit_mul(t26, t176);\n    let t178 = circuit_add(t144, t177);\n    let t179 = circuit_mul(in40, t176);\n    let t180 = circuit_add(t175, t179);\n    let t181 = circuit_mul(t176, in67);\n    let t182 = circuit_mul(t26, t181);\n    let t183 = circuit_add(t148, t182);\n    let t184 = circuit_mul(in41, t181);\n    let t185 = circuit_add(t180, t184);\n    let t186 = circuit_mul(t181, in67);\n    let t187 = circuit_mul(t26, t186);\n    let t188 = circuit_add(t152, t187);\n    let t189 = circuit_mul(in42, t186);\n    let t190 = circuit_add(t185, t189);\n    let t191 = circuit_mul(t186, in67);\n    let t192 = circuit_mul(t26, t191);\n    let t193 = circuit_add(t156, t192);\n    let t194 = circuit_mul(in43, t191);\n    let t195 = circuit_add(t190, t194);\n    let t196 = circuit_sub(in1, in86);\n    let t197 = circuit_mul(t15, t196);\n    let t198 = circuit_mul(t15, t195);\n    let t199 = circuit_add(t198, t198);\n    let t200 = circuit_sub(t197, in86);\n    let t201 = circuit_mul(in61, t200);\n    let t202 = circuit_sub(t199, t201);\n    let t203 = circuit_add(t197, in86);\n    let t204 = circuit_inverse(t203);\n    let t205 = circuit_mul(t202, t204);\n    let t206 = circuit_sub(in1, in85);\n    let t207 = circuit_mul(t14, t206);\n    let t208 = circuit_mul(t14, t205);\n    let t209 = circuit_add(t208, t208);\n    let t210 = circuit_sub(t207, in85);\n    let t211 = circuit_mul(in60, t210);\n    let t212 = circuit_sub(t209, t211);\n    let t213 = circuit_add(t207, in85);\n    let t214 = circuit_inverse(t213);\n    let t215 = circuit_mul(t212, t214);\n    let t216 = circuit_sub(in1, in84);\n    let t217 = circuit_mul(t13, t216);\n    let t218 = circuit_mul(t13, t215);\n    let t219 = circuit_add(t218, t218);\n    let t220 = circuit_sub(t217, in84);\n    let t221 = circuit_mul(in59, t220);\n    let t222 = circuit_sub(t219, t221);\n    let t223 = circuit_add(t217, in84);\n    let t224 = circuit_inverse(t223);\n    let t225 = circuit_mul(t222, t224);\n    let t226 = circuit_sub(in1, in83);\n    let t227 = circuit_mul(t12, t226);\n    let t228 = circuit_mul(t12, t225);\n    let t229 = circuit_add(t228, t228);\n    let t230 = circuit_sub(t227, in83);\n    let t231 = circuit_mul(in58, t230);\n    let t232 = circuit_sub(t229, t231);\n    let t233 = circuit_add(t227, in83);\n    let t234 = circuit_inverse(t233);\n    let t235 = circuit_mul(t232, t234);\n    let t236 = circuit_sub(in1, in82);\n    let t237 = circuit_mul(t11, t236);\n    let t238 = circuit_mul(t11, t235);\n    let t239 = circuit_add(t238, t238);\n    let t240 = circuit_sub(t237, in82);\n    let t241 = circuit_mul(in57, t240);\n    let t242 = circuit_sub(t239, t241);\n    let t243 = circuit_add(t237, in82);\n    let t244 = circuit_inverse(t243);\n    let t245 = circuit_mul(t242, t244);\n    let t246 = circuit_sub(in1, in81);\n    let t247 = circuit_mul(t10, t246);\n    let t248 = circuit_mul(t10, t245);\n    let t249 = circuit_add(t248, t248);\n    let t250 = circuit_sub(t247, in81);\n    let t251 = circuit_mul(in56, t250);\n    let t252 = circuit_sub(t249, t251);\n    let t253 = circuit_add(t247, in81);\n    let t254 = circuit_inverse(t253);\n    let t255 = circuit_mul(t252, t254);\n    let t256 = circuit_sub(in1, in80);\n    let t257 = circuit_mul(t9, t256);\n    let t258 = circuit_mul(t9, t255);\n    let t259 = circuit_add(t258, t258);\n    let t260 = circuit_sub(t257, in80);\n    let t261 = circuit_mul(in55, t260);\n    let t262 = circuit_sub(t259, t261);\n    let t263 = circuit_add(t257, in80);\n    let t264 = circuit_inverse(t263);\n    let t265 = circuit_mul(t262, t264);\n    let t266 = circuit_sub(in1, in79);\n    let t267 = circuit_mul(t8, t266);\n    let t268 = circuit_mul(t8, t265);\n    let t269 = circuit_add(t268, t268);\n    let t270 = circuit_sub(t267, in79);\n    let t271 = circuit_mul(in54, t270);\n    let t272 = circuit_sub(t269, t271);\n    let t273 = circuit_add(t267, in79);\n    let t274 = circuit_inverse(t273);\n    let t275 = circuit_mul(t272, t274);\n    let t276 = circuit_sub(in1, in78);\n    let t277 = circuit_mul(t7, t276);\n    let t278 = circuit_mul(t7, t275);\n    let t279 = circuit_add(t278, t278);\n    let t280 = circuit_sub(t277, in78);\n    let t281 = circuit_mul(in53, t280);\n    let t282 = circuit_sub(t279, t281);\n    let t283 = circuit_add(t277, in78);\n    let t284 = circuit_inverse(t283);\n    let t285 = circuit_mul(t282, t284);\n    let t286 = circuit_sub(in1, in77);\n    let t287 = circuit_mul(t6, t286);\n    let t288 = circuit_mul(t6, t285);\n    let t289 = circuit_add(t288, t288);\n    let t290 = circuit_sub(t287, in77);\n    let t291 = circuit_mul(in52, t290);\n    let t292 = circuit_sub(t289, t291);\n    let t293 = circuit_add(t287, in77);\n    let t294 = circuit_inverse(t293);\n    let t295 = circuit_mul(t292, t294);\n    let t296 = circuit_sub(in1, in76);\n    let t297 = circuit_mul(t5, t296);\n    let t298 = circuit_mul(t5, t295);\n    let t299 = circuit_add(t298, t298);\n    let t300 = circuit_sub(t297, in76);\n    let t301 = circuit_mul(in51, t300);\n    let t302 = circuit_sub(t299, t301);\n    let t303 = circuit_add(t297, in76);\n    let t304 = circuit_inverse(t303);\n    let t305 = circuit_mul(t302, t304);\n    let t306 = circuit_sub(in1, in75);\n    let t307 = circuit_mul(t4, t306);\n    let t308 = circuit_mul(t4, t305);\n    let t309 = circuit_add(t308, t308);\n    let t310 = circuit_sub(t307, in75);\n    let t311 = circuit_mul(in50, t310);\n    let t312 = circuit_sub(t309, t311);\n    let t313 = circuit_add(t307, in75);\n    let t314 = circuit_inverse(t313);\n    let t315 = circuit_mul(t312, t314);\n    let t316 = circuit_sub(in1, in74);\n    let t317 = circuit_mul(t3, t316);\n    let t318 = circuit_mul(t3, t315);\n    let t319 = circuit_add(t318, t318);\n    let t320 = circuit_sub(t317, in74);\n    let t321 = circuit_mul(in49, t320);\n    let t322 = circuit_sub(t319, t321);\n    let t323 = circuit_add(t317, in74);\n    let t324 = circuit_inverse(t323);\n    let t325 = circuit_mul(t322, t324);\n    let t326 = circuit_sub(in1, in73);\n    let t327 = circuit_mul(t2, t326);\n    let t328 = circuit_mul(t2, t325);\n    let t329 = circuit_add(t328, t328);\n    let t330 = circuit_sub(t327, in73);\n    let t331 = circuit_mul(in48, t330);\n    let t332 = circuit_sub(t329, t331);\n    let t333 = circuit_add(t327, in73);\n    let t334 = circuit_inverse(t333);\n    let t335 = circuit_mul(t332, t334);\n    let t336 = circuit_sub(in1, in72);\n    let t337 = circuit_mul(t1, t336);\n    let t338 = circuit_mul(t1, t335);\n    let t339 = circuit_add(t338, t338);\n    let t340 = circuit_sub(t337, in72);\n    let t341 = circuit_mul(in47, t340);\n    let t342 = circuit_sub(t339, t341);\n    let t343 = circuit_add(t337, in72);\n    let t344 = circuit_inverse(t343);\n    let t345 = circuit_mul(t342, t344);\n    let t346 = circuit_sub(in1, in71);\n    let t347 = circuit_mul(t0, t346);\n    let t348 = circuit_mul(t0, t345);\n    let t349 = circuit_add(t348, t348);\n    let t350 = circuit_sub(t347, in71);\n    let t351 = circuit_mul(in46, t350);\n    let t352 = circuit_sub(t349, t351);\n    let t353 = circuit_add(t347, in71);\n    let t354 = circuit_inverse(t353);\n    let t355 = circuit_mul(t352, t354);\n    let t356 = circuit_sub(in1, in70);\n    let t357 = circuit_mul(in66, t356);\n    let t358 = circuit_mul(in66, t355);\n    let t359 = circuit_add(t358, t358);\n    let t360 = circuit_sub(t357, in70);\n    let t361 = circuit_mul(in45, t360);\n    let t362 = circuit_sub(t359, t361);\n    let t363 = circuit_add(t357, in70);\n    let t364 = circuit_inverse(t363);\n    let t365 = circuit_mul(t362, t364);\n    let t366 = circuit_mul(t365, t17);\n    let t367 = circuit_mul(in45, in69);\n    let t368 = circuit_mul(t367, t19);\n    let t369 = circuit_add(t366, t368);\n    let t370 = circuit_mul(in69, in69);\n    let t371 = circuit_sub(in68, t0);\n    let t372 = circuit_inverse(t371);\n    let t373 = circuit_add(in68, t0);\n    let t374 = circuit_inverse(t373);\n    let t375 = circuit_mul(t370, t372);\n    let t376 = circuit_mul(in69, t374);\n    let t377 = circuit_mul(t370, t376);\n    let t378 = circuit_add(t377, t375);\n    let t379 = circuit_sub(in0, t378);\n    let t380 = circuit_mul(t377, in46);\n    let t381 = circuit_mul(t375, t355);\n    let t382 = circuit_add(t380, t381);\n    let t383 = circuit_add(t369, t382);\n    let t384 = circuit_mul(in69, in69);\n    let t385 = circuit_mul(t370, t384);\n    let t386 = circuit_sub(in68, t1);\n    let t387 = circuit_inverse(t386);\n    let t388 = circuit_add(in68, t1);\n    let t389 = circuit_inverse(t388);\n    let t390 = circuit_mul(t385, t387);\n    let t391 = circuit_mul(in69, t389);\n    let t392 = circuit_mul(t385, t391);\n    let t393 = circuit_add(t392, t390);\n    let t394 = circuit_sub(in0, t393);\n    let t395 = circuit_mul(t392, in47);\n    let t396 = circuit_mul(t390, t345);\n    let t397 = circuit_add(t395, t396);\n    let t398 = circuit_add(t383, t397);\n    let t399 = circuit_mul(in69, in69);\n    let t400 = circuit_mul(t385, t399);\n    let t401 = circuit_sub(in68, t2);\n    let t402 = circuit_inverse(t401);\n    let t403 = circuit_add(in68, t2);\n    let t404 = circuit_inverse(t403);\n    let t405 = circuit_mul(t400, t402);\n    let t406 = circuit_mul(in69, t404);\n    let t407 = circuit_mul(t400, t406);\n    let t408 = circuit_add(t407, t405);\n    let t409 = circuit_sub(in0, t408);\n    let t410 = circuit_mul(t407, in48);\n    let t411 = circuit_mul(t405, t335);\n    let t412 = circuit_add(t410, t411);\n    let t413 = circuit_add(t398, t412);\n    let t414 = circuit_mul(in69, in69);\n    let t415 = circuit_mul(t400, t414);\n    let t416 = circuit_sub(in68, t3);\n    let t417 = circuit_inverse(t416);\n    let t418 = circuit_add(in68, t3);\n    let t419 = circuit_inverse(t418);\n    let t420 = circuit_mul(t415, t417);\n    let t421 = circuit_mul(in69, t419);\n    let t422 = circuit_mul(t415, t421);\n    let t423 = circuit_add(t422, t420);\n    let t424 = circuit_sub(in0, t423);\n    let t425 = circuit_mul(t422, in49);\n    let t426 = circuit_mul(t420, t325);\n    let t427 = circuit_add(t425, t426);\n    let t428 = circuit_add(t413, t427);\n    let t429 = circuit_mul(in69, in69);\n    let t430 = circuit_mul(t415, t429);\n    let t431 = circuit_sub(in68, t4);\n    let t432 = circuit_inverse(t431);\n    let t433 = circuit_add(in68, t4);\n    let t434 = circuit_inverse(t433);\n    let t435 = circuit_mul(t430, t432);\n    let t436 = circuit_mul(in69, t434);\n    let t437 = circuit_mul(t430, t436);\n    let t438 = circuit_add(t437, t435);\n    let t439 = circuit_sub(in0, t438);\n    let t440 = circuit_mul(t437, in50);\n    let t441 = circuit_mul(t435, t315);\n    let t442 = circuit_add(t440, t441);\n    let t443 = circuit_add(t428, t442);\n    let t444 = circuit_mul(in69, in69);\n    let t445 = circuit_mul(t430, t444);\n    let t446 = circuit_sub(in68, t5);\n    let t447 = circuit_inverse(t446);\n    let t448 = circuit_add(in68, t5);\n    let t449 = circuit_inverse(t448);\n    let t450 = circuit_mul(t445, t447);\n    let t451 = circuit_mul(in69, t449);\n    let t452 = circuit_mul(t445, t451);\n    let t453 = circuit_add(t452, t450);\n    let t454 = circuit_sub(in0, t453);\n    let t455 = circuit_mul(t452, in51);\n    let t456 = circuit_mul(t450, t305);\n    let t457 = circuit_add(t455, t456);\n    let t458 = circuit_add(t443, t457);\n    let t459 = circuit_mul(in69, in69);\n    let t460 = circuit_mul(t445, t459);\n    let t461 = circuit_sub(in68, t6);\n    let t462 = circuit_inverse(t461);\n    let t463 = circuit_add(in68, t6);\n    let t464 = circuit_inverse(t463);\n    let t465 = circuit_mul(t460, t462);\n    let t466 = circuit_mul(in69, t464);\n    let t467 = circuit_mul(t460, t466);\n    let t468 = circuit_add(t467, t465);\n    let t469 = circuit_sub(in0, t468);\n    let t470 = circuit_mul(t467, in52);\n    let t471 = circuit_mul(t465, t295);\n    let t472 = circuit_add(t470, t471);\n    let t473 = circuit_add(t458, t472);\n    let t474 = circuit_mul(in69, in69);\n    let t475 = circuit_mul(t460, t474);\n    let t476 = circuit_sub(in68, t7);\n    let t477 = circuit_inverse(t476);\n    let t478 = circuit_add(in68, t7);\n    let t479 = circuit_inverse(t478);\n    let t480 = circuit_mul(t475, t477);\n    let t481 = circuit_mul(in69, t479);\n    let t482 = circuit_mul(t475, t481);\n    let t483 = circuit_add(t482, t480);\n    let t484 = circuit_sub(in0, t483);\n    let t485 = circuit_mul(t482, in53);\n    let t486 = circuit_mul(t480, t285);\n    let t487 = circuit_add(t485, t486);\n    let t488 = circuit_add(t473, t487);\n    let t489 = circuit_mul(in69, in69);\n    let t490 = circuit_mul(t475, t489);\n    let t491 = circuit_sub(in68, t8);\n    let t492 = circuit_inverse(t491);\n    let t493 = circuit_add(in68, t8);\n    let t494 = circuit_inverse(t493);\n    let t495 = circuit_mul(t490, t492);\n    let t496 = circuit_mul(in69, t494);\n    let t497 = circuit_mul(t490, t496);\n    let t498 = circuit_add(t497, t495);\n    let t499 = circuit_sub(in0, t498);\n    let t500 = circuit_mul(t497, in54);\n    let t501 = circuit_mul(t495, t275);\n    let t502 = circuit_add(t500, t501);\n    let t503 = circuit_add(t488, t502);\n    let t504 = circuit_mul(in69, in69);\n    let t505 = circuit_mul(t490, t504);\n    let t506 = circuit_sub(in68, t9);\n    let t507 = circuit_inverse(t506);\n    let t508 = circuit_add(in68, t9);\n    let t509 = circuit_inverse(t508);\n    let t510 = circuit_mul(t505, t507);\n    let t511 = circuit_mul(in69, t509);\n    let t512 = circuit_mul(t505, t511);\n    let t513 = circuit_add(t512, t510);\n    let t514 = circuit_sub(in0, t513);\n    let t515 = circuit_mul(t512, in55);\n    let t516 = circuit_mul(t510, t265);\n    let t517 = circuit_add(t515, t516);\n    let t518 = circuit_add(t503, t517);\n    let t519 = circuit_mul(in69, in69);\n    let t520 = circuit_mul(t505, t519);\n    let t521 = circuit_sub(in68, t10);\n    let t522 = circuit_inverse(t521);\n    let t523 = circuit_add(in68, t10);\n    let t524 = circuit_inverse(t523);\n    let t525 = circuit_mul(t520, t522);\n    let t526 = circuit_mul(in69, t524);\n    let t527 = circuit_mul(t520, t526);\n    let t528 = circuit_add(t527, t525);\n    let t529 = circuit_sub(in0, t528);\n    let t530 = circuit_mul(t527, in56);\n    let t531 = circuit_mul(t525, t255);\n    let t532 = circuit_add(t530, t531);\n    let t533 = circuit_add(t518, t532);\n    let t534 = circuit_mul(in69, in69);\n    let t535 = circuit_mul(t520, t534);\n    let t536 = circuit_sub(in68, t11);\n    let t537 = circuit_inverse(t536);\n    let t538 = circuit_add(in68, t11);\n    let t539 = circuit_inverse(t538);\n    let t540 = circuit_mul(t535, t537);\n    let t541 = circuit_mul(in69, t539);\n    let t542 = circuit_mul(t535, t541);\n    let t543 = circuit_add(t542, t540);\n    let t544 = circuit_sub(in0, t543);\n    let t545 = circuit_mul(t542, in57);\n    let t546 = circuit_mul(t540, t245);\n    let t547 = circuit_add(t545, t546);\n    let t548 = circuit_add(t533, t547);\n    let t549 = circuit_mul(in69, in69);\n    let t550 = circuit_mul(t535, t549);\n    let t551 = circuit_sub(in68, t12);\n    let t552 = circuit_inverse(t551);\n    let t553 = circuit_add(in68, t12);\n    let t554 = circuit_inverse(t553);\n    let t555 = circuit_mul(t550, t552);\n    let t556 = circuit_mul(in69, t554);\n    let t557 = circuit_mul(t550, t556);\n    let t558 = circuit_add(t557, t555);\n    let t559 = circuit_sub(in0, t558);\n    let t560 = circuit_mul(t557, in58);\n    let t561 = circuit_mul(t555, t235);\n    let t562 = circuit_add(t560, t561);\n    let t563 = circuit_add(t548, t562);\n    let t564 = circuit_mul(in69, in69);\n    let t565 = circuit_mul(t550, t564);\n    let t566 = circuit_sub(in68, t13);\n    let t567 = circuit_inverse(t566);\n    let t568 = circuit_add(in68, t13);\n    let t569 = circuit_inverse(t568);\n    let t570 = circuit_mul(t565, t567);\n    let t571 = circuit_mul(in69, t569);\n    let t572 = circuit_mul(t565, t571);\n    let t573 = circuit_add(t572, t570);\n    let t574 = circuit_sub(in0, t573);\n    let t575 = circuit_mul(t572, in59);\n    let t576 = circuit_mul(t570, t225);\n    let t577 = circuit_add(t575, t576);\n    let t578 = circuit_add(t563, t577);\n    let t579 = circuit_mul(in69, in69);\n    let t580 = circuit_mul(t565, t579);\n    let t581 = circuit_sub(in68, t14);\n    let t582 = circuit_inverse(t581);\n    let t583 = circuit_add(in68, t14);\n    let t584 = circuit_inverse(t583);\n    let t585 = circuit_mul(t580, t582);\n    let t586 = circuit_mul(in69, t584);\n    let t587 = circuit_mul(t580, t586);\n    let t588 = circuit_add(t587, t585);\n    let t589 = circuit_sub(in0, t588);\n    let t590 = circuit_mul(t587, in60);\n    let t591 = circuit_mul(t585, t215);\n    let t592 = circuit_add(t590, t591);\n    let t593 = circuit_add(t578, t592);\n    let t594 = circuit_mul(in69, in69);\n    let t595 = circuit_mul(t580, t594);\n    let t596 = circuit_sub(in68, t15);\n    let t597 = circuit_inverse(t596);\n    let t598 = circuit_add(in68, t15);\n    let t599 = circuit_inverse(t598);\n    let t600 = circuit_mul(t595, t597);\n    let t601 = circuit_mul(in69, t599);\n    let t602 = circuit_mul(t595, t601);\n    let t603 = circuit_add(t602, t600);\n    let t604 = circuit_sub(in0, t603);\n    let t605 = circuit_mul(t602, in61);\n    let t606 = circuit_mul(t600, t205);\n    let t607 = circuit_add(t605, t606);\n    let t608 = circuit_add(t593, t607);\n    let t609 = circuit_mul(in69, in69);\n    let t610 = circuit_mul(t595, t609);\n    let t611 = circuit_sub(in68, in66);\n    let t612 = circuit_inverse(t611);\n    let t613 = circuit_mul(in2, in66);\n    let t614 = circuit_sub(in68, t613);\n    let t615 = circuit_inverse(t614);\n    let t616 = circuit_mul(in69, in69);\n    let t617 = circuit_mul(t610, t616);\n    let t618 = circuit_mul(t612, t617);\n    let t619 = circuit_sub(in0, t618);\n    let t620 = circuit_mul(t617, in69);\n    let t621 = circuit_mul(t618, in62);\n    let t622 = circuit_add(t608, t621);\n    let t623 = circuit_mul(t615, t620);\n    let t624 = circuit_sub(in0, t623);\n    let t625 = circuit_mul(t620, in69);\n    let t626 = circuit_mul(t623, in63);\n    let t627 = circuit_add(t622, t626);\n    let t628 = circuit_mul(t612, t625);\n    let t629 = circuit_sub(in0, t628);\n    let t630 = circuit_mul(t625, in69);\n    let t631 = circuit_mul(t628, in64);\n    let t632 = circuit_add(t627, t631);\n    let t633 = circuit_mul(t612, t630);\n    let t634 = circuit_sub(in0, t633);\n    let t635 = circuit_mul(t633, in65);\n    let t636 = circuit_add(t632, t635);\n    let t637 = circuit_add(t624, t629);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (\n        t27,\n        t28,\n        t32,\n        t36,\n        t40,\n        t44,\n        t48,\n        t52,\n        t56,\n        t60,\n        t64,\n        t68,\n        t72,\n        t76,\n        t80,\n        t84,\n        t88,\n        t92,\n        t96,\n        t100,\n        t104,\n        t108,\n        t112,\n        t116,\n        t120,\n        t124,\n        t128,\n        t132,\n        t136,\n        t173,\n        t178,\n        t183,\n        t188,\n        t193,\n        t160,\n        t164,\n        t168,\n        t379,\n        t394,\n        t409,\n        t424,\n        t439,\n        t454,\n        t469,\n        t484,\n        t499,\n        t514,\n        t529,\n        t544,\n        t559,\n        t574,\n        t589,\n        t604,\n        t619,\n        t637,\n        t634,\n        t636,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6750f230c893619174a57a76, 0xf086204a9f36ffb061794254, 0x7b0c561a6148404, 0x0],\n        ); // in2\n    // Fill inputs:\n\n    for val in p_sumcheck_evaluations {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in3 - in43\n\n    circuit_inputs = circuit_inputs.next_2(p_gemini_masking_eval); // in44\n\n    for val in p_gemini_a_evaluations {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in45 - in61\n\n    for val in p_libra_poly_evals {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in62 - in65\n\n    circuit_inputs = circuit_inputs.next_2(tp_gemini_r); // in66\n    circuit_inputs = circuit_inputs.next_2(tp_rho); // in67\n    circuit_inputs = circuit_inputs.next_2(tp_shplonk_z); // in68\n    circuit_inputs = circuit_inputs.next_2(tp_shplonk_nu); // in69\n\n    for val in tp_sum_check_u_challenges {\n        circuit_inputs = circuit_inputs.next_u128(*val);\n    } // in70 - in86\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let scalar_1: u384 = outputs.get_output(t27);\n    let scalar_2: u384 = outputs.get_output(t28);\n    let scalar_3: u384 = outputs.get_output(t32);\n    let scalar_4: u384 = outputs.get_output(t36);\n    let scalar_5: u384 = outputs.get_output(t40);\n    let scalar_6: u384 = outputs.get_output(t44);\n    let scalar_7: u384 = outputs.get_output(t48);\n    let scalar_8: u384 = outputs.get_output(t52);\n    let scalar_9: u384 = outputs.get_output(t56);\n    let scalar_10: u384 = outputs.get_output(t60);\n    let scalar_11: u384 = outputs.get_output(t64);\n    let scalar_12: u384 = outputs.get_output(t68);\n    let scalar_13: u384 = outputs.get_output(t72);\n    let scalar_14: u384 = outputs.get_output(t76);\n    let scalar_15: u384 = outputs.get_output(t80);\n    let scalar_16: u384 = outputs.get_output(t84);\n    let scalar_17: u384 = outputs.get_output(t88);\n    let scalar_18: u384 = outputs.get_output(t92);\n    let scalar_19: u384 = outputs.get_output(t96);\n    let scalar_20: u384 = outputs.get_output(t100);\n    let scalar_21: u384 = outputs.get_output(t104);\n    let scalar_22: u384 = outputs.get_output(t108);\n    let scalar_23: u384 = outputs.get_output(t112);\n    let scalar_24: u384 = outputs.get_output(t116);\n    let scalar_25: u384 = outputs.get_output(t120);\n    let scalar_26: u384 = outputs.get_output(t124);\n    let scalar_27: u384 = outputs.get_output(t128);\n    let scalar_28: u384 = outputs.get_output(t132);\n    let scalar_29: u384 = outputs.get_output(t136);\n    let scalar_30: u384 = outputs.get_output(t173);\n    let scalar_31: u384 = outputs.get_output(t178);\n    let scalar_32: u384 = outputs.get_output(t183);\n    let scalar_33: u384 = outputs.get_output(t188);\n    let scalar_34: u384 = outputs.get_output(t193);\n    let scalar_35: u384 = outputs.get_output(t160);\n    let scalar_36: u384 = outputs.get_output(t164);\n    let scalar_37: u384 = outputs.get_output(t168);\n    let scalar_38: u384 = outputs.get_output(t379);\n    let scalar_39: u384 = outputs.get_output(t394);\n    let scalar_40: u384 = outputs.get_output(t409);\n    let scalar_41: u384 = outputs.get_output(t424);\n    let scalar_42: u384 = outputs.get_output(t439);\n    let scalar_43: u384 = outputs.get_output(t454);\n    let scalar_44: u384 = outputs.get_output(t469);\n    let scalar_45: u384 = outputs.get_output(t484);\n    let scalar_46: u384 = outputs.get_output(t499);\n    let scalar_47: u384 = outputs.get_output(t514);\n    let scalar_48: u384 = outputs.get_output(t529);\n    let scalar_49: u384 = outputs.get_output(t544);\n    let scalar_50: u384 = outputs.get_output(t559);\n    let scalar_51: u384 = outputs.get_output(t574);\n    let scalar_52: u384 = outputs.get_output(t589);\n    let scalar_53: u384 = outputs.get_output(t604);\n    let scalar_54: u384 = outputs.get_output(t619);\n    let scalar_55: u384 = outputs.get_output(t637);\n    let scalar_56: u384 = outputs.get_output(t634);\n    let scalar_57: u384 = outputs.get_output(t636);\n    return (\n        scalar_1,\n        scalar_2,\n        scalar_3,\n        scalar_4,\n        scalar_5,\n        scalar_6,\n        scalar_7,\n        scalar_8,\n        scalar_9,\n        scalar_10,\n        scalar_11,\n        scalar_12,\n        scalar_13,\n        scalar_14,\n        scalar_15,\n        scalar_16,\n        scalar_17,\n        scalar_18,\n        scalar_19,\n        scalar_20,\n        scalar_21,\n        scalar_22,\n        scalar_23,\n        scalar_24,\n        scalar_25,\n        scalar_26,\n        scalar_27,\n        scalar_28,\n        scalar_29,\n        scalar_30,\n        scalar_31,\n        scalar_32,\n        scalar_33,\n        scalar_34,\n        scalar_35,\n        scalar_36,\n        scalar_37,\n        scalar_38,\n        scalar_39,\n        scalar_40,\n        scalar_41,\n        scalar_42,\n        scalar_43,\n        scalar_44,\n        scalar_45,\n        scalar_46,\n        scalar_47,\n        scalar_48,\n        scalar_49,\n        scalar_50,\n        scalar_51,\n        scalar_52,\n        scalar_53,\n        scalar_54,\n        scalar_55,\n        scalar_56,\n        scalar_57,\n    );\n}\n#[inline(always)]\npub fn run_GRUMPKIN_ZK_HONK_EVALS_CONS_INIT_SIZE_17_circuit(\n    tp_gemini_r: u384, modulus: core::circuit::CircuitModulus,\n) -> (u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x1\n    let in1 = CE::<CI<1>> {}; // 0x204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d6\n\n    // INPUT stack\n    let in2 = CE::<CI<2>> {};\n    let t0 = circuit_sub(in2, in0);\n    let t1 = circuit_inverse(t0);\n    let t2 = circuit_mul(in1, in2);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t1, t2).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x8712848a692c553d0329f5d6, 0x64751ad938e2b5e6a54cf8c6, 0x204bd3277422fad3, 0x0],\n        ); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(tp_gemini_r); // in2\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let challenge_poly_eval: u384 = outputs.get_output(t1);\n    let root_power_times_tp_gemini_r: u384 = outputs.get_output(t2);\n    return (challenge_poly_eval, root_power_times_tp_gemini_r);\n}\n#[inline(always)]\npub fn run_GRUMPKIN_ZK_HONK_EVALS_CONS_LOOP_SIZE_17_circuit(\n    challenge_poly_eval: u384,\n    root_power_times_tp_gemini_r: u384,\n    tp_sumcheck_u_challenge: u384,\n    modulus: core::circuit::CircuitModulus,\n) -> (u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x1\n    let in1 = CE::<CI<1>> {}; // 0x204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d6\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let t0 = circuit_sub(in3, in0);\n    let t1 = circuit_inverse(t0);\n    let t2 = circuit_mul(in0, t1);\n    let t3 = circuit_add(in2, t2);\n    let t4 = circuit_mul(in3, in1);\n    let t5 = circuit_mul(in0, in4);\n    let t6 = circuit_sub(t4, in0);\n    let t7 = circuit_inverse(t6);\n    let t8 = circuit_mul(t5, t7);\n    let t9 = circuit_add(t3, t8);\n    let t10 = circuit_mul(t4, in1);\n    let t11 = circuit_mul(t5, in4);\n    let t12 = circuit_sub(t10, in0);\n    let t13 = circuit_inverse(t12);\n    let t14 = circuit_mul(t11, t13);\n    let t15 = circuit_add(t9, t14);\n    let t16 = circuit_mul(t10, in1);\n    let t17 = circuit_mul(t11, in4);\n    let t18 = circuit_sub(t16, in0);\n    let t19 = circuit_inverse(t18);\n    let t20 = circuit_mul(t17, t19);\n    let t21 = circuit_add(t15, t20);\n    let t22 = circuit_mul(t16, in1);\n    let t23 = circuit_mul(t17, in4);\n    let t24 = circuit_sub(t22, in0);\n    let t25 = circuit_inverse(t24);\n    let t26 = circuit_mul(t23, t25);\n    let t27 = circuit_add(t21, t26);\n    let t28 = circuit_mul(t22, in1);\n    let t29 = circuit_mul(t23, in4);\n    let t30 = circuit_sub(t28, in0);\n    let t31 = circuit_inverse(t30);\n    let t32 = circuit_mul(t29, t31);\n    let t33 = circuit_add(t27, t32);\n    let t34 = circuit_mul(t28, in1);\n    let t35 = circuit_mul(t29, in4);\n    let t36 = circuit_sub(t34, in0);\n    let t37 = circuit_inverse(t36);\n    let t38 = circuit_mul(t35, t37);\n    let t39 = circuit_add(t33, t38);\n    let t40 = circuit_mul(t34, in1);\n    let t41 = circuit_mul(t35, in4);\n    let t42 = circuit_sub(t40, in0);\n    let t43 = circuit_inverse(t42);\n    let t44 = circuit_mul(t41, t43);\n    let t45 = circuit_add(t39, t44);\n    let t46 = circuit_mul(t40, in1);\n    let t47 = circuit_mul(t41, in4);\n    let t48 = circuit_sub(t46, in0);\n    let t49 = circuit_inverse(t48);\n    let t50 = circuit_mul(t47, t49);\n    let t51 = circuit_add(t45, t50);\n    let t52 = circuit_mul(t46, in1);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t51, t52).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x8712848a692c553d0329f5d6, 0x64751ad938e2b5e6a54cf8c6, 0x204bd3277422fad3, 0x0],\n        ); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(challenge_poly_eval); // in2\n    circuit_inputs = circuit_inputs.next_2(root_power_times_tp_gemini_r); // in3\n    circuit_inputs = circuit_inputs.next_2(tp_sumcheck_u_challenge); // in4\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let challenge_poly_eval: u384 = outputs.get_output(t51);\n    let root_power_times_tp_gemini_r: u384 = outputs.get_output(t52);\n    return (challenge_poly_eval, root_power_times_tp_gemini_r);\n}\n#[inline(always)]\npub fn run_GRUMPKIN_ZK_HONK_EVALS_CONS_DONE_SIZE_17_circuit(\n    p_libra_evaluation: u384,\n    p_libra_poly_evals: Span<u256>,\n    tp_gemini_r: u384,\n    challenge_poly_eval: u384,\n    root_power_times_tp_gemini_r: u384,\n    modulus: core::circuit::CircuitModulus,\n) -> (u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d6\n    let in1 = CE::<CI<1>> {}; // 0x1\n    let in2 = CE::<CI<2>> {}; // 0x3033ea246e506e898e97f570caffd704cb0bb460313fb720b29e139e5c100001\n\n    // INPUT stack\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10) = (CE::<CI<9>> {}, CE::<CI<10>> {});\n    let t0 = circuit_mul(in10, in0);\n    let t1 = circuit_mul(t0, in0);\n    let t2 = circuit_mul(t1, in0);\n    let t3 = circuit_mul(t2, in0);\n    let t4 = circuit_mul(t3, in0);\n    let t5 = circuit_mul(t4, in0);\n    let t6 = circuit_mul(t5, in0);\n    let t7 = circuit_mul(t6, in0);\n    let t8 = circuit_mul(t7, in0);\n    let t9 = circuit_mul(t8, in0);\n    let t10 = circuit_mul(t9, in0);\n    let t11 = circuit_mul(t10, in0);\n    let t12 = circuit_mul(t11, in0);\n    let t13 = circuit_mul(t12, in0);\n    let t14 = circuit_mul(t13, in0);\n    let t15 = circuit_mul(t14, in0);\n    let t16 = circuit_mul(t15, in0);\n    let t17 = circuit_mul(t16, in0);\n    let t18 = circuit_mul(t17, in0);\n    let t19 = circuit_mul(t18, in0);\n    let t20 = circuit_mul(t19, in0);\n    let t21 = circuit_mul(t20, in0);\n    let t22 = circuit_mul(t21, in0);\n    let t23 = circuit_mul(t22, in0);\n    let t24 = circuit_mul(t23, in0);\n    let t25 = circuit_mul(t24, in0);\n    let t26 = circuit_mul(t25, in0);\n    let t27 = circuit_mul(t26, in0);\n    let t28 = circuit_mul(t27, in0);\n    let t29 = circuit_mul(t28, in0);\n    let t30 = circuit_mul(t29, in0);\n    let t31 = circuit_mul(t30, in0);\n    let t32 = circuit_mul(t31, in0);\n    let t33 = circuit_mul(t32, in0);\n    let t34 = circuit_mul(t33, in0);\n    let t35 = circuit_mul(t34, in0);\n    let t36 = circuit_mul(t35, in0);\n    let t37 = circuit_mul(t36, in0);\n    let t38 = circuit_mul(t37, in0);\n    let t39 = circuit_mul(t38, in0);\n    let t40 = circuit_mul(t39, in0);\n    let t41 = circuit_mul(t40, in0);\n    let t42 = circuit_mul(t41, in0);\n    let t43 = circuit_mul(t42, in0);\n    let t44 = circuit_mul(t43, in0);\n    let t45 = circuit_mul(t44, in0);\n    let t46 = circuit_mul(t45, in0);\n    let t47 = circuit_mul(t46, in0);\n    let t48 = circuit_mul(t47, in0);\n    let t49 = circuit_mul(t48, in0);\n    let t50 = circuit_mul(t49, in0);\n    let t51 = circuit_mul(t50, in0);\n    let t52 = circuit_mul(t51, in0);\n    let t53 = circuit_mul(t52, in0);\n    let t54 = circuit_mul(t53, in0);\n    let t55 = circuit_mul(t54, in0);\n    let t56 = circuit_mul(t55, in0);\n    let t57 = circuit_mul(t56, in0);\n    let t58 = circuit_mul(t57, in0);\n    let t59 = circuit_mul(t58, in0);\n    let t60 = circuit_mul(t59, in0);\n    let t61 = circuit_mul(t60, in0);\n    let t62 = circuit_mul(t61, in0);\n    let t63 = circuit_mul(t62, in0);\n    let t64 = circuit_mul(t63, in0);\n    let t65 = circuit_mul(t64, in0);\n    let t66 = circuit_mul(t65, in0);\n    let t67 = circuit_mul(t66, in0);\n    let t68 = circuit_mul(t67, in0);\n    let t69 = circuit_mul(t68, in0);\n    let t70 = circuit_mul(t69, in0);\n    let t71 = circuit_mul(t70, in0);\n    let t72 = circuit_mul(t71, in0);\n    let t73 = circuit_mul(t72, in0);\n    let t74 = circuit_mul(t73, in0);\n    let t75 = circuit_mul(t74, in0);\n    let t76 = circuit_mul(t75, in0);\n    let t77 = circuit_mul(t76, in0);\n    let t78 = circuit_mul(t77, in0);\n    let t79 = circuit_mul(t78, in0);\n    let t80 = circuit_mul(t79, in0);\n    let t81 = circuit_mul(t80, in0);\n    let t82 = circuit_mul(t81, in0);\n    let t83 = circuit_mul(t82, in0);\n    let t84 = circuit_mul(t83, in0);\n    let t85 = circuit_mul(t84, in0);\n    let t86 = circuit_mul(t85, in0);\n    let t87 = circuit_mul(t86, in0);\n    let t88 = circuit_mul(t87, in0);\n    let t89 = circuit_mul(t88, in0);\n    let t90 = circuit_mul(t89, in0);\n    let t91 = circuit_mul(t90, in0);\n    let t92 = circuit_mul(t91, in0);\n    let t93 = circuit_mul(t92, in0);\n    let t94 = circuit_mul(t93, in0);\n    let t95 = circuit_mul(t94, in0);\n    let t96 = circuit_mul(t95, in0);\n    let t97 = circuit_mul(t96, in0);\n    let t98 = circuit_mul(t97, in0);\n    let t99 = circuit_mul(t98, in0);\n    let t100 = circuit_mul(t99, in0);\n    let t101 = circuit_sub(in8, in1);\n    let t102 = circuit_inverse(t101);\n    let t103 = circuit_sub(t100, in1);\n    let t104 = circuit_inverse(t103);\n    let t105 = circuit_mul(in8, in8);\n    let t106 = circuit_mul(t105, t105);\n    let t107 = circuit_mul(t106, t106);\n    let t108 = circuit_mul(t107, t107);\n    let t109 = circuit_mul(t108, t108);\n    let t110 = circuit_mul(t109, t109);\n    let t111 = circuit_mul(t110, t110);\n    let t112 = circuit_mul(t111, t111);\n    let t113 = circuit_sub(t112, in1);\n    let t114 = circuit_mul(t113, in2);\n    let t115 = circuit_mul(in9, t114);\n    let t116 = circuit_mul(t102, t114);\n    let t117 = circuit_mul(t104, t114);\n    let t118 = circuit_mul(t116, in6);\n    let t119 = circuit_sub(in8, in0);\n    let t120 = circuit_sub(in5, in6);\n    let t121 = circuit_mul(in4, t115);\n    let t122 = circuit_sub(t120, t121);\n    let t123 = circuit_mul(t119, t122);\n    let t124 = circuit_add(t118, t123);\n    let t125 = circuit_sub(in6, in3);\n    let t126 = circuit_mul(t117, t125);\n    let t127 = circuit_add(t124, t126);\n    let t128 = circuit_mul(t113, in7);\n    let t129 = circuit_sub(t127, t128);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t113, t129).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x8712848a692c553d0329f5d6, 0x64751ad938e2b5e6a54cf8c6, 0x204bd3277422fad3, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x313fb720b29e139e5c100001, 0x8e97f570caffd704cb0bb460, 0x3033ea246e506e89, 0x0],\n        ); // in2\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p_libra_evaluation); // in3\n\n    for val in p_libra_poly_evals {\n        circuit_inputs = circuit_inputs.next_u256(*val);\n    } // in4 - in7\n\n    circuit_inputs = circuit_inputs.next_2(tp_gemini_r); // in8\n    circuit_inputs = circuit_inputs.next_2(challenge_poly_eval); // in9\n    circuit_inputs = circuit_inputs.next_2(root_power_times_tp_gemini_r); // in10\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let vanishing_check: u384 = outputs.get_output(t113);\n    let diff_check: u384 = outputs.get_output(t129);\n    return (vanishing_check, diff_check);\n}\n\nimpl CircuitDefinition57<\n    E0,\n    E1,\n    E2,\n    E3,\n    E4,\n    E5,\n    E6,\n    E7,\n    E8,\n    E9,\n    E10,\n    E11,\n    E12,\n    E13,\n    E14,\n    E15,\n    E16,\n    E17,\n    E18,\n    E19,\n    E20,\n    E21,\n    E22,\n    E23,\n    E24,\n    E25,\n    E26,\n    E27,\n    E28,\n    E29,\n    E30,\n    E31,\n    E32,\n    E33,\n    E34,\n    E35,\n    E36,\n    E37,\n    E38,\n    E39,\n    E40,\n    E41,\n    E42,\n    E43,\n    E44,\n    E45,\n    E46,\n    E47,\n    E48,\n    E49,\n    E50,\n    E51,\n    E52,\n    E53,\n    E54,\n    E55,\n    E56,\n> of core::circuit::CircuitDefinition<\n    (\n        CE<E0>,\n        CE<E1>,\n        CE<E2>,\n        CE<E3>,\n        CE<E4>,\n        CE<E5>,\n        CE<E6>,\n        CE<E7>,\n        CE<E8>,\n        CE<E9>,\n        CE<E10>,\n        CE<E11>,\n        CE<E12>,\n        CE<E13>,\n        CE<E14>,\n        CE<E15>,\n        CE<E16>,\n        CE<E17>,\n        CE<E18>,\n        CE<E19>,\n        CE<E20>,\n        CE<E21>,\n        CE<E22>,\n        CE<E23>,\n        CE<E24>,\n        CE<E25>,\n        CE<E26>,\n        CE<E27>,\n        CE<E28>,\n        CE<E29>,\n        CE<E30>,\n        CE<E31>,\n        CE<E32>,\n        CE<E33>,\n        CE<E34>,\n        CE<E35>,\n        CE<E36>,\n        CE<E37>,\n        CE<E38>,\n        CE<E39>,\n        CE<E40>,\n        CE<E41>,\n        CE<E42>,\n        CE<E43>,\n        CE<E44>,\n        CE<E45>,\n        CE<E46>,\n        CE<E47>,\n        CE<E48>,\n        CE<E49>,\n        CE<E50>,\n        CE<E51>,\n        CE<E52>,\n        CE<E53>,\n        CE<E54>,\n        CE<E55>,\n        CE<E56>,\n    ),\n> {\n    type CircuitType =\n        core::circuit::Circuit<\n            (\n                E0,\n                E1,\n                E2,\n                E3,\n                E4,\n                E5,\n                E6,\n                E7,\n                E8,\n                E9,\n                E10,\n                E11,\n                E12,\n                E13,\n                E14,\n                E15,\n                E16,\n                E17,\n                E18,\n                E19,\n                E20,\n                E21,\n                E22,\n                E23,\n                E24,\n                E25,\n                E26,\n                E27,\n                E28,\n                E29,\n                E30,\n                E31,\n                E32,\n                E33,\n                E34,\n                E35,\n                E36,\n                E37,\n                E38,\n                E39,\n                E40,\n                E41,\n                E42,\n                E43,\n                E44,\n                E45,\n                E46,\n                E47,\n                E48,\n                E49,\n                E50,\n                E51,\n                E52,\n                E53,\n                E54,\n                E55,\n                E56,\n            ),\n        >;\n}\nimpl MyDrp_57<\n    E0,\n    E1,\n    E2,\n    E3,\n    E4,\n    E5,\n    E6,\n    E7,\n    E8,\n    E9,\n    E10,\n    E11,\n    E12,\n    E13,\n    E14,\n    E15,\n    E16,\n    E17,\n    E18,\n    E19,\n    E20,\n    E21,\n    E22,\n    E23,\n    E24,\n    E25,\n    E26,\n    E27,\n    E28,\n    E29,\n    E30,\n    E31,\n    E32,\n    E33,\n    E34,\n    E35,\n    E36,\n    E37,\n    E38,\n    E39,\n    E40,\n    E41,\n    E42,\n    E43,\n    E44,\n    E45,\n    E46,\n    E47,\n    E48,\n    E49,\n    E50,\n    E51,\n    E52,\n    E53,\n    E54,\n    E55,\n    E56,\n> of Drop<\n    (\n        CE<E0>,\n        CE<E1>,\n        CE<E2>,\n        CE<E3>,\n        CE<E4>,\n        CE<E5>,\n        CE<E6>,\n        CE<E7>,\n        CE<E8>,\n        CE<E9>,\n        CE<E10>,\n        CE<E11>,\n        CE<E12>,\n        CE<E13>,\n        CE<E14>,\n        CE<E15>,\n        CE<E16>,\n        CE<E17>,\n        CE<E18>,\n        CE<E19>,\n        CE<E20>,\n        CE<E21>,\n        CE<E22>,\n        CE<E23>,\n        CE<E24>,\n        CE<E25>,\n        CE<E26>,\n        CE<E27>,\n        CE<E28>,\n        CE<E29>,\n        CE<E30>,\n        CE<E31>,\n        CE<E32>,\n        CE<E33>,\n        CE<E34>,\n        CE<E35>,\n        CE<E36>,\n        CE<E37>,\n        CE<E38>,\n        CE<E39>,\n        CE<E40>,\n        CE<E41>,\n        CE<E42>,\n        CE<E43>,\n        CE<E44>,\n        CE<E45>,\n        CE<E46>,\n        CE<E47>,\n        CE<E48>,\n        CE<E49>,\n        CE<E50>,\n        CE<E51>,\n        CE<E52>,\n        CE<E53>,\n        CE<E54>,\n        CE<E55>,\n        CE<E56>,\n    ),\n>;\n\n#[inline(never)]\npub fn is_on_curve_excluding_infinity_bn254(p: G1Point, modulus: CircuitModulus) -> bool {\n    // INPUT stack\n    // y^2 = x^3 + 3\n    let (in0, in1) = (CE::<CI<0>> {}, CE::<CI<1>> {});\n    let y2 = circuit_mul(in1, in1);\n    let x2 = circuit_mul(in0, in0);\n    let x3 = circuit_mul(in0, x2);\n    let y2_minus_x3 = circuit_sub(y2, x3);\n\n    let mut circuit_inputs = (y2_minus_x3,).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x); // in0\n    circuit_inputs = circuit_inputs.next_2(p.y); // in1\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let zero_check: u384 = outputs.get_output(y2_minus_x3);\n    return zero_check == u384 { limb0: 3, limb1: 0, limb2: 0, limb3: 0 };\n}\n\n"
  },
  {
    "path": "src/contracts/mutator_set/src/zk_verifier/honk_verifier_constants.cairo",
    "content": "use garaga::apps::noir::HonkVk;\nuse garaga::definitions::{G1Point, G2Line, u288, u384};\n\npub const vk: HonkVk = HonkVk {\n    vk_hash: 8648913451078603841425108107713111136913298359786830997742829131199771092709,\n    log_circuit_size: 17,\n    public_inputs_size: 19,\n    qm: G1Point {\n        x: u384 {\n            limb0: 0xc9879d00a38708b38625ac44,\n            limb1: 0x9ef7e0ada113660b7c7c1bfa,\n            limb2: 0x1aad08a358acb08f,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xf724d70bdd99cca8b136516c,\n            limb1: 0x4c788cf832602e3b7d33776e,\n            limb2: 0x1cb6cf3305414863,\n            limb3: 0x0,\n        },\n    },\n    qc: G1Point {\n        x: u384 {\n            limb0: 0x9d9bcd021c055bb75dbd4512,\n            limb1: 0x780d1d84481443889feb0344,\n            limb2: 0x2f48f208bf2113ca,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xa7b307a6772179f94fa5ea6,\n            limb1: 0x2bdd28321b8d24a9a4d68b3,\n            limb2: 0x12131ffca858a35f,\n            limb3: 0x0,\n        },\n    },\n    ql: G1Point {\n        x: u384 {\n            limb0: 0xf28a408137475eb81810aa81,\n            limb1: 0x1d00fedbbea4d1bf591decfc,\n            limb2: 0x7dd8d544fca06cf,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x87f6900c2c82a1370469ae4e,\n            limb1: 0xb26862eaa22ad4f564f16dc3,\n            limb2: 0x19fa88ac971a9dce,\n            limb3: 0x0,\n        },\n    },\n    qr: G1Point {\n        x: u384 {\n            limb0: 0x73f3ba3bbf8ca96e672cbce2,\n            limb1: 0xa3e373bcc21f45c528485515,\n            limb2: 0x563be38b959ef47,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xd8efd2f9a41938ceb32b5a39,\n            limb1: 0xf5e89041fec12a15a7e5555e,\n            limb2: 0x205321350b7fb55,\n            limb3: 0x0,\n        },\n    },\n    qo: G1Point {\n        x: u384 {\n            limb0: 0xaebeeca06b6691fa3251b8c3,\n            limb1: 0xc58f419fb4d44301670d2c95,\n            limb2: 0x17aec007ff309cae,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xcb6122bfb69b5d6f0f10c45a,\n            limb1: 0xce5407747e1e0b4831fa6971,\n            limb2: 0x2ca94e49d53e2bfb,\n            limb3: 0x0,\n        },\n    },\n    q4: G1Point {\n        x: u384 {\n            limb0: 0x16a58f20d203d6998bedca0e,\n            limb1: 0xf4749c68dc18379ed2cfd90f,\n            limb2: 0x11e16a6d0f456496,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x7109c3364d8d5386f7834314,\n            limb1: 0xa19192358f604f5e132e1134,\n            limb2: 0x1dfb10789425f1c1,\n            limb3: 0x0,\n        },\n    },\n    qLookup: G1Point {\n        x: u384 {\n            limb0: 0xbf2ed757ab4abba92c67c48b,\n            limb1: 0x3f63d5ad361a9fbf5fb92f0a,\n            limb2: 0x140da9d775b7988a,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x72bc367b61bd04386c012fd8,\n            limb1: 0x7aa1ab7396853dec5c74fb1e,\n            limb2: 0x13ce9d2c1b64cd99,\n            limb3: 0x0,\n        },\n    },\n    qArith: G1Point {\n        x: u384 {\n            limb0: 0x3aa740bd1a5e8a47b3d2de10,\n            limb1: 0xcc88c141090121fd92f68a6c,\n            limb2: 0x8a2516f74638847,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xc710b72ff8cc890a46f57a90,\n            limb1: 0x5a58c14222b39cfb1feb5292,\n            limb2: 0xe38ae4e93ca3eae,\n            limb3: 0x0,\n        },\n    },\n    qDeltaRange: G1Point {\n        x: u384 {\n            limb0: 0x70ae35f1b8a0695b260e2feb,\n            limb1: 0x105e723f90f620c9a957fc8d,\n            limb2: 0x2c5de9a00448559,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xdaa421b8aa8ae3979076f0c3,\n            limb1: 0x1358e1c210c87f84f65bba4b,\n            limb2: 0x2d1012a20c0ca795,\n            limb3: 0x0,\n        },\n    },\n    qElliptic: G1Point {\n        x: u384 {\n            limb0: 0x4d27199ae4f48a5583fee4f3,\n            limb1: 0x3e0bc0150e688f6c46f25745,\n            limb2: 0x1c24be1be708f683,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x2187718a0f48380b39fac203,\n            limb1: 0x418bf428f1c8e4cc01de2fa0,\n            limb2: 0x215490b46e1ff77d,\n            limb3: 0x0,\n        },\n    },\n    qMemory: G1Point {\n        x: u384 {\n            limb0: 0x46fd0721214ab6dc7d78a012,\n            limb1: 0xb3b50980deb6ce9bc88da500,\n            limb2: 0x245ea5b6146dcc90,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xd5a93e279c05327d08d7e9e8,\n            limb1: 0xf5adc6210b0399467c54c042,\n            limb2: 0x1e727f815c7221f2,\n            limb3: 0x0,\n        },\n    },\n    qNnf: G1Point {\n        x: u384 {\n            limb0: 0xc8169df9b9fe24d1db0c6c37,\n            limb1: 0x394f6d05c4a634eebc93546e,\n            limb2: 0x2787a029626f7fef,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x125331ed5965e81567c35fef,\n            limb1: 0x28f728f64243bc3eda44264f,\n            limb2: 0x1c65ceb8bd2d3ba1,\n            limb3: 0x0,\n        },\n    },\n    qPoseidon2External: G1Point {\n        x: u384 {\n            limb0: 0x80c77770decd9af8eb397e9f,\n            limb1: 0xa7f054ed839373c32380a122,\n            limb2: 0x3bb5f8c665e6222,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x6cf73a911a7669454e742240,\n            limb1: 0x22ce0664fd72c62b3fef3c52,\n            limb2: 0x5ffe72ea68db37e,\n            limb3: 0x0,\n        },\n    },\n    qPoseidon2Internal: G1Point {\n        x: u384 {\n            limb0: 0x599f75e13d5fc1ddd625af3d,\n            limb1: 0x35e95eb75dbcfb94576425e3,\n            limb2: 0x21cf4a0b4ded78c8,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xf4e804d55eef280e63845a98,\n            limb1: 0xa4391af391b562982739f5fd,\n            limb2: 0x2d80057bb2d0ac54,\n            limb3: 0x0,\n        },\n    },\n    s1: G1Point {\n        x: u384 {\n            limb0: 0x2735a6945bfcc575b47b551b,\n            limb1: 0x90e9781e87dc298bdef34482,\n            limb2: 0x2ecd5089375735ff,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xd6c5b651258d085fb2c08479,\n            limb1: 0xf55b1a28766f224e0198d9bc,\n            limb2: 0xfcf4a0af691f887,\n            limb3: 0x0,\n        },\n    },\n    s2: G1Point {\n        x: u384 {\n            limb0: 0xc4ed539d45106213d9773e23,\n            limb1: 0x8eaee56ac89019dfe6c61608,\n            limb2: 0x6bb671b009b334,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xee3d4e41cd48e1f504ec8725,\n            limb1: 0xbedb6b6c7414fb432ea7fbb1,\n            limb2: 0x18ef92eff8a8214b,\n            limb3: 0x0,\n        },\n    },\n    s3: G1Point {\n        x: u384 {\n            limb0: 0xfd4c9cbb70bd5ed33e7f6230,\n            limb1: 0x98500ef521527b9fd37b98aa,\n            limb2: 0x9d18733c6d2ec15,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x82098b38d2b8548f15b51bc5,\n            limb1: 0x8c9b3875390b26c889aec49b,\n            limb2: 0x237aeb3aad51315e,\n            limb3: 0x0,\n        },\n    },\n    s4: G1Point {\n        x: u384 {\n            limb0: 0xc2e3448b290ed14332d835ff,\n            limb1: 0x4261b7b47a679659e0db8b2,\n            limb2: 0x68805c74a3e3341,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x638d679a090054c17b55a21e,\n            limb1: 0x913b0e7f906efd58e885e853,\n            limb2: 0x2e6fd1d72edcd21c,\n            limb3: 0x0,\n        },\n    },\n    id1: G1Point {\n        x: u384 {\n            limb0: 0xb5aecd13170ddb4422f04935,\n            limb1: 0x9a078c7623842ce27367584a,\n            limb2: 0x8dda9400ce64482,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xfb78f4f8f69ff971bfc5f06f,\n            limb1: 0x26a42b2a150848b6a4e0dbc5,\n            limb2: 0x1beb83b38357031c,\n            limb3: 0x0,\n        },\n    },\n    id2: G1Point {\n        x: u384 {\n            limb0: 0xf043d40b7003a5d6c3e897b6,\n            limb1: 0x7473a63e06067d5ae07bda16,\n            limb2: 0x1587ae4d0e40d580,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x7bd7d4e411e65490f5a7cc07,\n            limb1: 0xaa52483c8b51cdeaada6c3ad,\n            limb2: 0x23c966fe09c0b750,\n            limb3: 0x0,\n        },\n    },\n    id3: G1Point {\n        x: u384 {\n            limb0: 0x6a5f8b839f79f6632b3d3846,\n            limb1: 0x7dceb6e16ac96a826af16b8e,\n            limb2: 0x8e59de8c7ec9d1e,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x39070ff6fc023aa36aa560d6,\n            limb1: 0x65d334abfd3a999331625437,\n            limb2: 0x1540433e1d162232,\n            limb3: 0x0,\n        },\n    },\n    id4: G1Point {\n        x: u384 {\n            limb0: 0x8dcb81e2267c6ce0ec1d3808,\n            limb1: 0xf0e2b4fce3bb28d444920fed,\n            limb2: 0x1e00fc5b0e46caaf,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x189add7063bc6235eb050d20,\n            limb1: 0x974d5b407537f937ff12471a,\n            limb2: 0x2a65e90c138645af,\n            limb3: 0x0,\n        },\n    },\n    t1: G1Point {\n        x: u384 {\n            limb0: 0x338b2ec7a36993e51f217041,\n            limb1: 0xc5578d44a19745a2e9b4fa73,\n            limb2: 0x19bbebad91acf7e2,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xe8cc18957e5ca1c759a71e0,\n            limb1: 0x485b4fc1723a3cf89dbb3d3,\n            limb2: 0xb703659ad78da28,\n            limb3: 0x0,\n        },\n    },\n    t2: G1Point {\n        x: u384 {\n            limb0: 0xbc74c15287eb0b5691d6aedc,\n            limb1: 0x80ee61926466bd391e8401c4,\n            limb2: 0x229b0caf7eefd786,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x1d439725611f90819c503377,\n            limb1: 0x4f97d5cc218ce5cad2724ee,\n            limb2: 0x1e12a50561bcdc89,\n            limb3: 0x0,\n        },\n    },\n    t3: G1Point {\n        x: u384 {\n            limb0: 0x301aa9412c245623efa87a56,\n            limb1: 0x26de6abc9119742c54b6ee25,\n            limb2: 0x2d54532863a43d99,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xc90c9b882e9a231ae7f1a121,\n            limb1: 0xac98d5fd202605b1d25cb91b,\n            limb2: 0x103edb2d7d28f820,\n            limb3: 0x0,\n        },\n    },\n    t4: G1Point {\n        x: u384 {\n            limb0: 0x7f4e1e5d9273e820fac64728,\n            limb1: 0xb6838f56e2b805cc06a79522,\n            limb2: 0x155bba2e9214537c,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x69eeff16b7218dc48ef412b4,\n            limb1: 0x48bff8d843d20fe5ec0702db,\n            limb2: 0x26ba44b80af446f0,\n            limb3: 0x0,\n        },\n    },\n    lagrange_first: G1Point {\n        x: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        y: u384 { limb0: 0x2, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    },\n    lagrange_last: G1Point {\n        x: u384 {\n            limb0: 0x5fa2f3b50f0d5494f99668f8,\n            limb1: 0x2b3d28853349f2b74055496e,\n            limb2: 0x14c89754aed58171,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x24ce342a89643205b5c346fe,\n            limb1: 0x6336e9f9001bd4a7f22da775,\n            limb2: 0x13c5b1bd3f802852,\n            limb3: 0x0,\n        },\n    },\n};\n\npub const precomputed_lines: [G2Line<u288>; 176] = [\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4d347301094edcbfa224d3d5,\n            limb1: 0x98005e68cacde68a193b54e6,\n            limb2: 0x237db2935c4432bc,\n        },\n        r0a1: u288 {\n            limb0: 0x6b4ba735fba44e801d415637,\n            limb1: 0x707c3ec1809ae9bafafa05dd,\n            limb2: 0x124077e14a7d826a,\n        },\n        r1a0: u288 {\n            limb0: 0x49a8dc1dd6e067932b6a7e0d,\n            limb1: 0x7676d0000961488f8fbce033,\n            limb2: 0x3b7178c857630da,\n        },\n        r1a1: u288 {\n            limb0: 0x98c81278efe1e96b86397652,\n            limb1: 0xe3520b9dfa601ead6f0bf9cd,\n            limb2: 0x2b17c2b12c26fdd0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x19f2be813f1a2cc51a251901,\n            limb1: 0xa120afb4bcd07fdae4c4c91b,\n            limb2: 0xcd8c8d94eedaaa5,\n        },\n        r0a1: u288 {\n            limb0: 0xa3808ba2f25b910b50769d68,\n            limb1: 0xda666e5fa50719fcd79ea2c7,\n            limb2: 0x104262c7ecae13e5,\n        },\n        r1a0: u288 {\n            limb0: 0xd00c9d5338bfc75cd1fe4002,\n            limb1: 0x25f7441c17b6428fffe6266b,\n            limb2: 0x25d0502e1109204d,\n        },\n        r1a1: u288 {\n            limb0: 0x4ce60bf635ff0fe14cf89d2,\n            limb1: 0x9ca0af889fc43d4423a03197,\n            limb2: 0x1b323f9be536f345,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1b3d578c32d1af5736582972,\n            limb1: 0x204fe74db6b371d37e4615ab,\n            limb2: 0xce69bdf84ed6d6d,\n        },\n        r0a1: u288 {\n            limb0: 0xfd262357407c3d96bb3ba710,\n            limb1: 0x47d406f500e66ea29c8764b3,\n            limb2: 0x1e23d69196b41dbf,\n        },\n        r1a0: u288 {\n            limb0: 0x1ec8ee6f65402483ad127f3a,\n            limb1: 0x41d975b678200fce07c48a5e,\n            limb2: 0x2cad36e65bbb6f4f,\n        },\n        r1a1: u288 {\n            limb0: 0xcfa9b8144c3ea2ab524386f5,\n            limb1: 0xd4fe3a18872139b0287570c3,\n            limb2: 0x54c8bc1b50aa258,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb5ee22ba52a7ed0c533b7173,\n            limb1: 0xbfa13123614ecf9c4853249b,\n            limb2: 0x6567a7f6972b7bb,\n        },\n        r0a1: u288 {\n            limb0: 0xcf422f26ac76a450359f819e,\n            limb1: 0xc42d7517ae6f59453eaf32c7,\n            limb2: 0x899cb1e339f7582,\n        },\n        r1a0: u288 {\n            limb0: 0x9f287f4842d688d7afd9cd67,\n            limb1: 0x30af75417670de33dfa95eda,\n            limb2: 0x1121d4ca1c2cab36,\n        },\n        r1a1: u288 {\n            limb0: 0x7c4c55c27110f2c9a228f7d8,\n            limb1: 0x8f14f6c3a2e2c9d74b347bfe,\n            limb2: 0x83ef274ba7913a5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4e7f0c0bfd065f51be57e446,\n            limb1: 0x172f9601c4b0d882b2bca176,\n            limb2: 0x238b85999243f584,\n        },\n        r0a1: u288 {\n            limb0: 0xc4f13eea49c4fb0b88065fdf,\n            limb1: 0xdde9d756dc7a3e60bfe2c7c9,\n            limb2: 0x2021ebaaf4838c43,\n        },\n        r1a0: u288 {\n            limb0: 0x98652d3a0360c4ba067ebd45,\n            limb1: 0x9259019a69cb15cd979b4425,\n            limb2: 0xa93fe44d0287fdc,\n        },\n        r1a1: u288 {\n            limb0: 0x63a369cdd8c09b18c3ad7375,\n            limb1: 0x1baf962de1bd1b1973e138fa,\n            limb2: 0x15320ed6fbfaace4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1a9ecb5a41abb65787e46934,\n            limb1: 0x28fec59f9911882bd4d50306,\n            limb2: 0x25996b3cd58cce92,\n        },\n        r0a1: u288 {\n            limb0: 0x56f5cca0fddcae1bfbee4b4d,\n            limb1: 0x4237b58cc71911abcefd1d92,\n            limb2: 0x2d985c4da93484d4,\n        },\n        r1a0: u288 {\n            limb0: 0x406454881e1f6cab8a9ab13c,\n            limb1: 0x2cdf1a77980edf520cc8f23f,\n            limb2: 0x20ce11ddb649cf18,\n        },\n        r1a1: u288 {\n            limb0: 0xfe104a8fa2c57b6b94bf56d2,\n            limb1: 0xe2debabd9212070fd38f818,\n            limb2: 0x1c1a2364541a15be,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfc23a674d089e9cfdefb1db8,\n            limb1: 0x9ddfd61d289b65a9b4254476,\n            limb2: 0x1e2f561324ef4447,\n        },\n        r0a1: u288 {\n            limb0: 0xf67a6a9e31f6975b220642ea,\n            limb1: 0xccd852893796296e4d1ed330,\n            limb2: 0x94ff1987d19b62,\n        },\n        r1a0: u288 {\n            limb0: 0x360c2a5aca59996d24cc1947,\n            limb1: 0x66c2d7d0d176a3bc53f386e8,\n            limb2: 0x2cfcc62a17fbeecb,\n        },\n        r1a1: u288 {\n            limb0: 0x2ddc73389dd9a9e34168d8a9,\n            limb1: 0xae9afc57944748b835cbda0f,\n            limb2: 0x12f0a1f8cf564067,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xef09c2458cc3abc041e9fa2d,\n            limb1: 0x787c6d7a93e94be14277d18d,\n            limb2: 0xbb1d328b2d75a8a,\n        },\n        r0a1: u288 {\n            limb0: 0x1911705c689a06b1dfab80c,\n            limb1: 0x72781338c8dfb4eb593e44c,\n            limb2: 0x1405249e47100437,\n        },\n        r1a0: u288 {\n            limb0: 0x4dca335dcaeaf9d99ab7ad63,\n            limb1: 0xd36f68812432efaedffce9a7,\n            limb2: 0x1131840a72c4fa9,\n        },\n        r1a1: u288 {\n            limb0: 0x5676dc996dc5b1ce91fd01c1,\n            limb1: 0xbbf4fcfae2062f0031601f40,\n            limb2: 0x2f8f5c5bff703235,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9c963c4bdade6ce3d460b077,\n            limb1: 0x1738311feefc76f565e34e8a,\n            limb2: 0x1aae0d6c9e9888ad,\n        },\n        r0a1: u288 {\n            limb0: 0x9272581fdf80b045c9c3f0a,\n            limb1: 0x3946807b0756e87666798edb,\n            limb2: 0x2bf6eeda2d8be192,\n        },\n        r1a0: u288 {\n            limb0: 0x3e957661b35995552fb475de,\n            limb1: 0xd8076fa48f93f09d8128a2a8,\n            limb2: 0xb6f87c3f00a6fcf,\n        },\n        r1a1: u288 {\n            limb0: 0xcf17d6cd2101301246a8f264,\n            limb1: 0x514d04ad989b91e697aa5a0e,\n            limb2: 0x175f17bbd0ad1219,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x894bc18cc70ca1987e3b8f9f,\n            limb1: 0xd4bfa535181f0f8659b063e3,\n            limb2: 0x19168d524164f463,\n        },\n        r0a1: u288 {\n            limb0: 0x850ee8d0e9b58b82719a6e92,\n            limb1: 0x9fc4eb75cbb027c137d48341,\n            limb2: 0x2b2f8a383d944fa0,\n        },\n        r1a0: u288 {\n            limb0: 0x5451c8974a709483c2b07fbd,\n            limb1: 0xd7e09837b8a2a3b78e7fe525,\n            limb2: 0x347d96be5e7fa31,\n        },\n        r1a1: u288 {\n            limb0: 0x823f2ba2743ee254e4c18a1e,\n            limb1: 0x6a61af5db035c443ed0f8172,\n            limb2: 0x1e840eee275d1063,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdd132544fc661724c31c8a08,\n            limb1: 0x287b549c39c0ea0a391cbe18,\n            limb2: 0x29c2742c0ca03d7b,\n        },\n        r0a1: u288 {\n            limb0: 0xb3076d9218b75e044db009b0,\n            limb1: 0xf0e2da346da73ed6e537273,\n            limb2: 0x16cd48b0b23a5a69,\n        },\n        r1a0: u288 {\n            limb0: 0x5eeab759aec37540ef3b3200,\n            limb1: 0x90c30b490593b4f0a2750f65,\n            limb2: 0x263476e7a8250501,\n        },\n        r1a1: u288 {\n            limb0: 0x437a75606a5486770a5c4450,\n            limb1: 0xbb6a0a3aa70be067ddcfdbfc,\n            limb2: 0xc03b2e169fa0cd0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x185a998303998a727a80004d,\n            limb1: 0xb23554df68e88aa4bcb90b09,\n            limb2: 0x293e05c0080aedc,\n        },\n        r0a1: u288 {\n            limb0: 0xfcd79ce56915d6462fb8a51a,\n            limb1: 0x8c7691de25e8c4b96117b24,\n            limb2: 0xa849fd468442c55,\n        },\n        r1a0: u288 {\n            limb0: 0xc8661606e6d6b1e5a00268eb,\n            limb1: 0xbe2235d18dd52b903e1858e2,\n            limb2: 0x222c8e6db445fbf7,\n        },\n        r1a1: u288 {\n            limb0: 0x803355a17297b5f77e52231c,\n            limb1: 0x7927c03bd5d3798208bf7a23,\n            limb2: 0x111b3dbe82eb4f62,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x18d630598e58bb5d0102b30e,\n            limb1: 0x9767e27b02a8da37411a2787,\n            limb2: 0x100a541662b9cd7c,\n        },\n        r0a1: u288 {\n            limb0: 0x4ca7313df2e168e7e5ea70,\n            limb1: 0xd49cce6abd50b574f31c2d72,\n            limb2: 0x78a2afbf72317e7,\n        },\n        r1a0: u288 {\n            limb0: 0x6d99388b0a1a67d6b48d87e0,\n            limb1: 0x1d8711d321a193be3333bc68,\n            limb2: 0x27e76de53a010ce1,\n        },\n        r1a1: u288 {\n            limb0: 0x77341bf4e1605e982fa50abd,\n            limb1: 0xc5cf10db170b4feaaf5f8f1b,\n            limb2: 0x762adef02274807,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x401adda3a335074256e01cf5,\n            limb1: 0x247f8405ee3a5143b8fc7947,\n            limb2: 0x2c37793269c12835,\n        },\n        r0a1: u288 {\n            limb0: 0x9ecc215e40764ce6a6db3ce0,\n            limb1: 0x14e8a7b5a57b166edcdfb52,\n            limb2: 0x29e744551489dc3f,\n        },\n        r1a0: u288 {\n            limb0: 0xee025e7cc0634b8b2fcd88dd,\n            limb1: 0x94b3602ee4867d04d1e549ae,\n            limb2: 0xcce5739cfedc699,\n        },\n        r1a1: u288 {\n            limb0: 0x2c7318ae1f6db5d41f684334,\n            limb1: 0xd1ba91922e100971bd11dbb5,\n            limb2: 0x1d6c654d5c0913a4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa137b991ba9048aee9fa0bc7,\n            limb1: 0xf5433785c186cd1100ab6b80,\n            limb2: 0xab519fd7cf8e7f9,\n        },\n        r0a1: u288 {\n            limb0: 0x90832f45d3398c60aa1a74e2,\n            limb1: 0x17f7ac209532723f22a344b,\n            limb2: 0x23db979f8481c5f,\n        },\n        r1a0: u288 {\n            limb0: 0x723b0e23c2808a5d1ea6b11d,\n            limb1: 0x3030030d26411f84235c3af5,\n            limb2: 0x122e78da5509eddb,\n        },\n        r1a1: u288 {\n            limb0: 0xf1718c1e21a9bc3ec822f319,\n            limb1: 0xf5ee6dfa3bd3272b2f09f0c7,\n            limb2: 0x5a29c1e27616b34,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6cf0dc0a1a42af130a792bff,\n            limb1: 0x6eeb4dd41cb8967cd7416c41,\n            limb2: 0x832ca9524375cb4,\n        },\n        r0a1: u288 {\n            limb0: 0x7e263bdeb1fedd385682b4fc,\n            limb1: 0x3eee92fe8cdb332aeb31d573,\n            limb2: 0x125dc8ce07406159,\n        },\n        r1a0: u288 {\n            limb0: 0x5fce3aa533d50f8eff589829,\n            limb1: 0x15cefc9330a131dfb10a5ae6,\n            limb2: 0x2fa0a33e98e84220,\n        },\n        r1a1: u288 {\n            limb0: 0xed6540b1d66bbf1f7bf86da8,\n            limb1: 0x3a5266544635cad0d58d64d6,\n            limb2: 0x149069d5ba2e34da,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbc1ede480873fceb8739511e,\n            limb1: 0xd5a60533bd0ce7869efbc15,\n            limb2: 0x182c17d793eba74d,\n        },\n        r0a1: u288 {\n            limb0: 0x83bf38d91876ad8999516bc2,\n            limb1: 0x7756322ea3dc079289d51f2d,\n            limb2: 0x1d0f6156a89a4244,\n        },\n        r1a0: u288 {\n            limb0: 0x6aba652f197be8f99707b88c,\n            limb1: 0xbf94286c245794ea0f562f32,\n            limb2: 0x25a358967a2ca81d,\n        },\n        r1a1: u288 {\n            limb0: 0xc028cbff48c01433e8b23568,\n            limb1: 0xd2e791f5772ed43b056beba1,\n            limb2: 0x83eb38dff4960e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf0ea4a2e24640eb0043fa781,\n            limb1: 0x8a5ca14e0ac3b7d4409fcb40,\n            limb2: 0x67b373e8abc5602,\n        },\n        r0a1: u288 {\n            limb0: 0x7c391162763fc85bf5c94818,\n            limb1: 0xb389e19eb97568e7e7e4617d,\n            limb2: 0x1d3f1c590945ef5c,\n        },\n        r1a0: u288 {\n            limb0: 0xce60f9534da6a36cda2ebe99,\n            limb1: 0x4a48ecfd6beb4596b2736458,\n            limb2: 0x2a3e1d1f2d7f13e0,\n        },\n        r1a1: u288 {\n            limb0: 0x8546f7e328bc13d11bb19a65,\n            limb1: 0xb68deedd4c4b131fa83bb2a5,\n            limb2: 0x15f7b8d2c8e7626e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc2a2b787d8e718e81970db80,\n            limb1: 0x5372abeaf56844dee60d6198,\n            limb2: 0x131210153a2217d6,\n        },\n        r0a1: u288 {\n            limb0: 0x70421980313e09a8a0e5a82d,\n            limb1: 0xf75ca1f68f4b8deafb1d3b48,\n            limb2: 0x102113c9b6feb035,\n        },\n        r1a0: u288 {\n            limb0: 0x4654c11d73bda84873de9b86,\n            limb1: 0xa67601bca2e595339833191a,\n            limb2: 0x1c2b76e439adc8cc,\n        },\n        r1a1: u288 {\n            limb0: 0x9c53a48cc66c1f4d644105f2,\n            limb1: 0xa17a18867557d96fb7c2f849,\n            limb2: 0x1deb99799bd8b63a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc32026c56341297fa080790c,\n            limb1: 0xe23ad2ff283399133533b31f,\n            limb2: 0xa6860f5c968f7ad,\n        },\n        r0a1: u288 {\n            limb0: 0x2966cf259dc612c6a4d8957d,\n            limb1: 0xfba87ea86054f3db5774a08f,\n            limb2: 0xc73408b6a646780,\n        },\n        r1a0: u288 {\n            limb0: 0x6272ce5976d8eeba08f66b48,\n            limb1: 0x7dfbd78fa06509604c0cec8d,\n            limb2: 0x181ec0eaa6660e45,\n        },\n        r1a1: u288 {\n            limb0: 0x48af37c1a2343555fbf8a357,\n            limb1: 0xa7b5e1e20e64d6a9a9ce8e61,\n            limb2: 0x1147dcea39a47abd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x24892e4246676601de7ff011,\n            limb1: 0x538390fa26e7a81a0d183f27,\n            limb2: 0x3410fd15a886c28,\n        },\n        r0a1: u288 {\n            limb0: 0x26b21dedab7f4232acbd4ff0,\n            limb1: 0xa3b070b5094882aba51e9b07,\n            limb2: 0xd20955719266e4d,\n        },\n        r1a0: u288 {\n            limb0: 0xe9495357ddc8fab97186f3fa,\n            limb1: 0x39314e488ba5e56819f2526f,\n            limb2: 0x2319d043c6fac62e,\n        },\n        r1a1: u288 {\n            limb0: 0x43af9a4d62880cabbd0c0091,\n            limb1: 0x85c4696da0e2107eebe8d213,\n            limb2: 0x15e73634a9b93263,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7225a042235a3e52ed4f3656,\n            limb1: 0x29547006cc96d9af59e981e9,\n            limb2: 0x2bb8d83d86b1948,\n        },\n        r0a1: u288 {\n            limb0: 0x7aff77100255f01d01e06689,\n            limb1: 0xeafc9593264cb70dd2c5c40a,\n            limb2: 0x16feef8d11db8f6c,\n        },\n        r1a0: u288 {\n            limb0: 0x38197214c4ec640e68ed7bd6,\n            limb1: 0x6095d2ae38e508122aa0bacd,\n            limb2: 0x15ee15a5c89d28c4,\n        },\n        r1a1: u288 {\n            limb0: 0x59cc5927de581d2bba41fb39,\n            limb1: 0x9368a6b2bf2630ccd9ee111a,\n            limb2: 0x1d1cd760d41a3053,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4033c51e6e469818521cd2ae,\n            limb1: 0xb71a4629a4696b2759f8e19e,\n            limb2: 0x4f5744e29c1eb30,\n        },\n        r0a1: u288 {\n            limb0: 0xa4f47bbc60cb0649dca1c772,\n            limb1: 0x835f427106f4a6b897c6cf23,\n            limb2: 0x17ca6ea4855756bb,\n        },\n        r1a0: u288 {\n            limb0: 0x7f844a35c7eeadf511e67e57,\n            limb1: 0x8bb54fb0b3688cac8860f10,\n            limb2: 0x1c7258499a6bbebf,\n        },\n        r1a1: u288 {\n            limb0: 0x10d269c1779f96946e518246,\n            limb1: 0xce6fcef6676d0dacd395dc1a,\n            limb2: 0x2cf4c6ae1b55d87d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb8a97adf87c08c9754a126a3,\n            limb1: 0x75a7ddf60605563f709106d2,\n            limb2: 0x27851c7de29730da,\n        },\n        r0a1: u288 {\n            limb0: 0x8c5ecd7d4bb18df0499e32c7,\n            limb1: 0x2534a91e249a1d6c311618e6,\n            limb2: 0xc0140c1c13a3493,\n        },\n        r1a0: u288 {\n            limb0: 0x68d1a39239845ea787e22238,\n            limb1: 0xb5a4c3ee8333093391b6d4cd,\n            limb2: 0x1dc5f5b99d814946,\n        },\n        r1a1: u288 {\n            limb0: 0x8ef9ff9b9895bbf279c0fa0d,\n            limb1: 0x7d3d2f468c0ac9e19fb7c2d,\n            limb2: 0xac27e05ceb646b5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xab74a6bae36b17b1d2cc1081,\n            limb1: 0x904cf03d9d30b1fe9dc71374,\n            limb2: 0x14ffdd55685b7d82,\n        },\n        r0a1: u288 {\n            limb0: 0x277f7180b7cf33feded1583c,\n            limb1: 0xc029c3968a75b612303c4298,\n            limb2: 0x20ef4ba03605cdc6,\n        },\n        r1a0: u288 {\n            limb0: 0xd5a7a27c1baba3791ab18957,\n            limb1: 0x973730213d5d70d3e62d6db,\n            limb2: 0x24ca121c566eb857,\n        },\n        r1a1: u288 {\n            limb0: 0x9f4c2dea0492f548ae7d9e93,\n            limb1: 0xe584b6b251a5227c70c5188,\n            limb2: 0x22bcecac2bd5e51b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x340c82974f7221a53fc2f3ac,\n            limb1: 0x7146f18cd591d423874996e7,\n            limb2: 0xa6d154791056f46,\n        },\n        r0a1: u288 {\n            limb0: 0x70894ea6418890d53b5ee12a,\n            limb1: 0x882290cb53b795b0e7c8c208,\n            limb2: 0x1b5777dc18b2899b,\n        },\n        r1a0: u288 {\n            limb0: 0x99a0e528d582006a626206b6,\n            limb1: 0xb1cf825d80e199c5c9c795b5,\n            limb2: 0x2a97495b032f0542,\n        },\n        r1a1: u288 {\n            limb0: 0xc7cf5b455d6f3ba73debeba5,\n            limb1: 0xbb0a01235687223b7b71d0e5,\n            limb2: 0x250024ac44c35e3f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xcd61de038885e78d976e417f,\n            limb1: 0x81fe397759fd09af54407334,\n            limb2: 0x28d442dfdc1a2e12,\n        },\n        r0a1: u288 {\n            limb0: 0x75958d6bff91ac1f4b906a6e,\n            limb1: 0xa9ceae56d3016a7b9be4e8d1,\n            limb2: 0x1eb27b86e4ca4913,\n        },\n        r1a0: u288 {\n            limb0: 0x9e78d6b4bc7dbeb138bb7110,\n            limb1: 0x8fa9343766858993e6f9769e,\n            limb2: 0x25d95a1cdd51a5b7,\n        },\n        r1a1: u288 {\n            limb0: 0xd0e3a9be366e1fc7643320e8,\n            limb1: 0xc0ba2c1555ff8ac9ad6f5297,\n            limb2: 0x1d994b7cec2490e8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1e9cf4d22158dc2de3993ad9,\n            limb1: 0x71f64b04e8e9d545208968bb,\n            limb2: 0x11d02ad0f13cfec0,\n        },\n        r0a1: u288 {\n            limb0: 0xacbea6d3f08ecb77503f05de,\n            limb1: 0x611d520b74ddcb9f2e5828f0,\n            limb2: 0x26202c3e458eb353,\n        },\n        r1a0: u288 {\n            limb0: 0xb61d83483ca541f57440987c,\n            limb1: 0xa086532338a5827b1445f1c6,\n            limb2: 0x1f5ebd76b5310b94,\n        },\n        r1a1: u288 {\n            limb0: 0xcac91c4843a6bad2a7cc91cb,\n            limb1: 0x4fbd17f04d76a1b165fed733,\n            limb2: 0x1e860876cd8963af,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xccf841cf5c1cf8f4a0485e28,\n            limb1: 0xb5077662d0ce9d755af1446b,\n            limb2: 0x2b08658e9d5ba5cb,\n        },\n        r0a1: u288 {\n            limb0: 0x6ce62184a15685babd77f27f,\n            limb1: 0x5ff9bb7d74505b0542578299,\n            limb2: 0x7244563488bab2,\n        },\n        r1a0: u288 {\n            limb0: 0xec778048d344ac71275d961d,\n            limb1: 0x1273984019753000ad890d33,\n            limb2: 0x27c2855e60d361bd,\n        },\n        r1a1: u288 {\n            limb0: 0xa7a0071e22af2f3a79a12da,\n            limb1: 0xc84a6fd41c20759ff6ff169a,\n            limb2: 0x23e7ef2a308e49d1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x68a906f2806a6cc426b24994,\n            limb1: 0x784dcf104c1dcf0e8f856da2,\n            limb2: 0xc9654f8fbdf2892,\n        },\n        r0a1: u288 {\n            limb0: 0x9bea5cd65447a96f85459dd6,\n            limb1: 0x13d9bb083bdab401220475b7,\n            limb2: 0x2bd224747d636b4e,\n        },\n        r1a0: u288 {\n            limb0: 0xae8a73f18ff26f9d25fc0042,\n            limb1: 0x947f72870798502183924783,\n            limb2: 0xae687f4109514e,\n        },\n        r1a1: u288 {\n            limb0: 0x3dd221c63901d92fbe7bec24,\n            limb1: 0x803d8cd513a8fe56a98984c2,\n            limb2: 0x11912c747e407b17,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7105024c431a33683d9d0b9d,\n            limb1: 0x12e23637b641ab0e5b322ad8,\n            limb2: 0x2918e9e08c764c28,\n        },\n        r0a1: u288 {\n            limb0: 0x26384979d1f5417e451aeabf,\n            limb1: 0xacfb499e362291d0b053bbf6,\n            limb2: 0x2a6ad1a1f7b04ef6,\n        },\n        r1a0: u288 {\n            limb0: 0xba4db515be70c384080fc9f9,\n            limb1: 0x5a983a6afa9cb830fa5b66e6,\n            limb2: 0x8cc1fa494726a0c,\n        },\n        r1a1: u288 {\n            limb0: 0x59c9af9399ed004284eb6105,\n            limb1: 0xef37f66b058b4c971d9c96b0,\n            limb2: 0x2c1839afde65bafa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd468740be11c72f0d61b3544,\n            limb1: 0xee4537e6229611d1ee5d08f9,\n            limb2: 0x25f95d481420c22b,\n        },\n        r0a1: u288 {\n            limb0: 0x1057f10f48392fe4e6a8cbb,\n            limb1: 0x71eaba2ec1ad3c43203ee8b9,\n            limb2: 0x28ebfa58c1c65aa1,\n        },\n        r1a0: u288 {\n            limb0: 0x7d03e13f07b1eecb5cd01d9d,\n            limb1: 0x4e866746c563214e0043c745,\n            limb2: 0x2cd7dc2b0c6cbb4b,\n        },\n        r1a1: u288 {\n            limb0: 0x5eabc3fb0a14cc2cb63ecd7c,\n            limb1: 0xcfa5e22677730b5197985457,\n            limb2: 0x3db7ea133dcce6e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6bf13a27b0f4eb6657abc4b,\n            limb1: 0xf78d57f089bffdf07c676bb3,\n            limb2: 0x228e4aefbdd738df,\n        },\n        r0a1: u288 {\n            limb0: 0x4f41a40b04ec964619823053,\n            limb1: 0xfa3fb44f4a80641a9bb3bc09,\n            limb2: 0x29bf29a3d071ec4b,\n        },\n        r1a0: u288 {\n            limb0: 0x83823dcdff02bdc8a0e6aa03,\n            limb1: 0x79ac92f113de29251cd73a98,\n            limb2: 0x1ccdb791718d144,\n        },\n        r1a1: u288 {\n            limb0: 0xa074add9d066db9a2a6046b6,\n            limb1: 0xef3a70034497456c7d001a5,\n            limb2: 0x27d09562d815b4a6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbf11dea21cd379f966caa6c2,\n            limb1: 0x4e0f8e4b2b5917c45d535ef,\n            limb2: 0xc735dd71c68e4ca,\n        },\n        r0a1: u288 {\n            limb0: 0xa605ae0ab6554385d99f6e12,\n            limb1: 0x87cd556340ce9c7cc8a6ac63,\n            limb2: 0x210538d78dc01108,\n        },\n        r1a0: u288 {\n            limb0: 0xc496c32da98d1ae345266146,\n            limb1: 0x76a57df0969a21af8983781e,\n            limb2: 0x269e9aa6f168324a,\n        },\n        r1a1: u288 {\n            limb0: 0x820373298d73bb39e9d80644,\n            limb1: 0x987291249714fb863a8353df,\n            limb2: 0x120dfbe3b8b4c9c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x87a44d343cc761056f4f2eae,\n            limb1: 0x18016f16818253360d2c8adf,\n            limb2: 0x1bcd5c6e597d735e,\n        },\n        r0a1: u288 {\n            limb0: 0x593d7444c376f6d69289660b,\n            limb1: 0x1d6d97020b59cf2e4b38be4f,\n            limb2: 0x17133b62617f63a7,\n        },\n        r1a0: u288 {\n            limb0: 0x88cac99869bb335ec9553a70,\n            limb1: 0x95bcfa7f7c0b708b4d737afc,\n            limb2: 0x1eec79b9db274c09,\n        },\n        r1a1: u288 {\n            limb0: 0xe465a53e9fe085eb58a6be75,\n            limb1: 0x868e45cc13e7fd9d34e11839,\n            limb2: 0x2b401ce0f05ee6bb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x83f48fbac5c1b94486c2d037,\n            limb1: 0xf95d9333449543de78c69e75,\n            limb2: 0x7bca8163e842be7,\n        },\n        r0a1: u288 {\n            limb0: 0x60157b2ff6e4d737e2dac26b,\n            limb1: 0x30ab91893fcf39d9dcf1b89,\n            limb2: 0x29a58a02490d7f53,\n        },\n        r1a0: u288 {\n            limb0: 0x520f9cb580066bcf2ce872db,\n            limb1: 0x24a6e42c185fd36abb66c4ba,\n            limb2: 0x309b07583317a13,\n        },\n        r1a1: u288 {\n            limb0: 0x5a4c61efaa3d09a652c72471,\n            limb1: 0xfcb2676d6aa28ca318519d2,\n            limb2: 0x1405483699afa209,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x887e3388d815fefbe4de67c7,\n            limb1: 0x39aabdf16d5e820c468f07b4,\n            limb2: 0x1021ded60046ae5d,\n        },\n        r0a1: u288 {\n            limb0: 0x1ffd3f4a7c51d9b9b426759a,\n            limb1: 0xfdcac9390f248e3358903bef,\n            limb2: 0xc85ed498a09eaa4,\n        },\n        r1a0: u288 {\n            limb0: 0x2e3d9ddae0fe891656c2ebbd,\n            limb1: 0xdbb3756450184a201ee6f6f4,\n            limb2: 0x1f77f974e15e790c,\n        },\n        r1a1: u288 {\n            limb0: 0xc94662f8a91d828962406a80,\n            limb1: 0x35b6584b35acc901cd8c124d,\n            limb2: 0x1b6cbe14b354c93c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4e0b59155b1586438f00d1d0,\n            limb1: 0xe7fce333454bea5e5d19da67,\n            limb2: 0x2286d1f263814635,\n        },\n        r0a1: u288 {\n            limb0: 0xdb0108b13b264fa9efe313bd,\n            limb1: 0x25a0231213b6afe0cc5ac9,\n            limb2: 0x24a55b37cab9e96f,\n        },\n        r1a0: u288 {\n            limb0: 0x10568376d2134a925d8224e2,\n            limb1: 0x66ff6c53966243f66701ce36,\n            limb2: 0xf0bab9bbaa38df8,\n        },\n        r1a1: u288 {\n            limb0: 0x9faf33001f67c41b255de466,\n            limb1: 0x30656441023848f72165541a,\n            limb2: 0x1b964ad8ff7afd21,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbfdfdae86101e29da3e869b8,\n            limb1: 0xf969a9b961a28b872e56aac2,\n            limb2: 0x1afdc719440d90f0,\n        },\n        r0a1: u288 {\n            limb0: 0xee43c995686f13baa9b07266,\n            limb1: 0xbfa387a694c641cceee4443a,\n            limb2: 0x104d8c02eb7f60c8,\n        },\n        r1a0: u288 {\n            limb0: 0x8d451602b3593e798aecd7fb,\n            limb1: 0x69ffbefe7c5ac2cf68e8691e,\n            limb2: 0x2ea064a1bc373d28,\n        },\n        r1a1: u288 {\n            limb0: 0x6e7a663073bfe88a2b02326f,\n            limb1: 0x5faadb36847ca0103793fa4a,\n            limb2: 0x26c09a8ec9303836,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa02ed8b8bea4e6398937e400,\n            limb1: 0xba34c7a8c92f6fb9c7eb1009,\n            limb2: 0x14021afa35038d6f,\n        },\n        r0a1: u288 {\n            limb0: 0x5fed8893a16fc89c77ab6e69,\n            limb1: 0x341d37d9e774298c8289039e,\n            limb2: 0x14228ddafe44ce59,\n        },\n        r1a0: u288 {\n            limb0: 0x578a1f7a73e6d177db8ef992,\n            limb1: 0xe0414e8de48555d5e7715a16,\n            limb2: 0x48dd64815f16a0a,\n        },\n        r1a1: u288 {\n            limb0: 0xf23687d236711b4c0ca8ce76,\n            limb1: 0x50664dd13060c77c5166e7fe,\n            limb2: 0x10090c847a3c2764,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3d038747ebac16adc1c50bdd,\n            limb1: 0xe3706a783e99f73ac742aa1a,\n            limb2: 0x17eac23b00b545ff,\n        },\n        r0a1: u288 {\n            limb0: 0xdc25ff0bd02abcbe502c4e37,\n            limb1: 0x39b92e6ebb65e5f2d8504f90,\n            limb2: 0x2415b5f61301dff6,\n        },\n        r1a0: u288 {\n            limb0: 0x9cdcb2146d15f37900db82ac,\n            limb1: 0x96c3940e2f5c5f8198fadee3,\n            limb2: 0x2f662ea79b473fc2,\n        },\n        r1a1: u288 {\n            limb0: 0xc0fb95686de65e504ed4c57a,\n            limb1: 0xec396c7c4275d4e493b00713,\n            limb2: 0x106d2aab8d90d517,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb836776ba636148782ccc53a,\n            limb1: 0xc85e575c26103c32434b48b3,\n            limb2: 0xbbd5f5df165aeca,\n        },\n        r0a1: u288 {\n            limb0: 0x75eb6906bb101ea7f525fe68,\n            limb1: 0xa69a82fea7ca9f41fb7f0712,\n            limb2: 0x2d0f62c13f7d525b,\n        },\n        r1a0: u288 {\n            limb0: 0x94475fc56769da417d920d02,\n            limb1: 0x9bacf6721bad4841a1ead330,\n            limb2: 0x264649c0901fd86,\n        },\n        r1a1: u288 {\n            limb0: 0x45cddba5ab6cb8d80986a4b5,\n            limb1: 0x8a2735ec64c123d9b1d94e43,\n            limb2: 0x8b8c3087a3fc782,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x49bbb4d856921e3177c0b5bf,\n            limb1: 0x76d84d273694e662bdd5d364,\n            limb2: 0xea5dc611bdd369d,\n        },\n        r0a1: u288 {\n            limb0: 0x9e9fc3adc530fa3c5c6fd7fe,\n            limb1: 0x114bb0c0e8bd247da41b3883,\n            limb2: 0x6044124f85d2ce,\n        },\n        r1a0: u288 {\n            limb0: 0xa6e604cdb4e40982a97c084,\n            limb1: 0xef485caa56c7820be2f6b11d,\n            limb2: 0x280de6387dcbabe1,\n        },\n        r1a1: u288 {\n            limb0: 0xcaceaf6df5ca9f8a18bf2e1e,\n            limb1: 0xc5cce932cc6818b53136c142,\n            limb2: 0x12f1cd688682030c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x37497c23dcf629df58a5fa12,\n            limb1: 0x4fcd5534ae47bded76245ac9,\n            limb2: 0x1715ab081e32ac95,\n        },\n        r0a1: u288 {\n            limb0: 0x856275471989e2c288e3c83,\n            limb1: 0xb42d81a575b89b127a7821a,\n            limb2: 0x5fa75a0e4ae3118,\n        },\n        r1a0: u288 {\n            limb0: 0xeb22351e8cd345c23c0a3fef,\n            limb1: 0x271feb16d4b47d2267ac9d57,\n            limb2: 0x258f9950b9a2dee5,\n        },\n        r1a1: u288 {\n            limb0: 0xb5f75468922dc025ba7916fa,\n            limb1: 0x7e24515de90edf1bde4edd9,\n            limb2: 0x289145b3512d4d81,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xce1ded2782ddd08e6865ab4,\n            limb1: 0x4583c91a985a438fdac4f4c,\n            limb2: 0x13d595d330502573,\n        },\n        r0a1: u288 {\n            limb0: 0x595067b65592ac4d6c9b5b5c,\n            limb1: 0x4ef806daef8c02f94ecaf97f,\n            limb2: 0x7869c312062e0a8,\n        },\n        r1a0: u288 {\n            limb0: 0x38cb6ea081fb30e87015f4c3,\n            limb1: 0xc380b087269e9836e39be81,\n            limb2: 0x7619e66982167dd,\n        },\n        r1a1: u288 {\n            limb0: 0x84f696893f8cb0e616e335b6,\n            limb1: 0xb7fd749a8812159ce96c3f43,\n            limb2: 0x2b80806bd7eeb0cd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xeed11dd701d662b9bd85fda4,\n            limb1: 0x284c3b305b25ed852d47268e,\n            limb2: 0x37e8aad03f1efa3,\n        },\n        r0a1: u288 {\n            limb0: 0x1ba355db79739c5b954c99e,\n            limb1: 0xd38db182b11b150b1ac2b6cd,\n            limb2: 0x1b416cf91fe88aa,\n        },\n        r1a0: u288 {\n            limb0: 0xd8f230276c30350267b5d2e6,\n            limb1: 0x6057c8dd8abc942db7f6e156,\n            limb2: 0x127d2dc576c754d8,\n        },\n        r1a1: u288 {\n            limb0: 0x3a34d39084d5d8b2204f6632,\n            limb1: 0xe18cb27f7b45639b6cb65d23,\n            limb2: 0xb6cc7185cc1c602,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x95b7b32bcc3119c64a62a8de,\n            limb1: 0xe07184496f17bbd59a4b7bbd,\n            limb2: 0x1708c536fd78b531,\n        },\n        r0a1: u288 {\n            limb0: 0xfa85b5778c77166c1523a75e,\n            limb1: 0x89a00c53309a9e525bef171a,\n            limb2: 0x2d2287dd024e421,\n        },\n        r1a0: u288 {\n            limb0: 0x31fd0884eaf2208bf8831e72,\n            limb1: 0x537e04ea344beb57ee645026,\n            limb2: 0x23c7f99715257261,\n        },\n        r1a1: u288 {\n            limb0: 0x8c38b3aeea525f3c2d2fdc22,\n            limb1: 0xf838a99d9ec8ed6dcec6a2a8,\n            limb2: 0x2973d5159ddc479a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3f058d8c63fd905d3ca29b42,\n            limb1: 0x1f0a90982cc68e4ddcd83e57,\n            limb2: 0x240aeaae0783fbfa,\n        },\n        r0a1: u288 {\n            limb0: 0xedfee81d80da310fdf0d0d8,\n            limb1: 0xc2208e6de8806cf491bd74d4,\n            limb2: 0xb7318be62a476af,\n        },\n        r1a0: u288 {\n            limb0: 0x3c6920c8a24454c634f388fe,\n            limb1: 0x23328a006312a722ae09548b,\n            limb2: 0x1d2f1c58b80432e2,\n        },\n        r1a1: u288 {\n            limb0: 0xb72980574f7a877586de3a63,\n            limb1: 0xcd773b87ef4a29c16784c5ae,\n            limb2: 0x1f812c7e22f339c5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4ee6eef57f5c866acf77f595,\n            limb1: 0x3aec7154a9f1f285829186a5,\n            limb2: 0x283e9794a30457d,\n        },\n        r0a1: u288 {\n            limb0: 0xd59a661484d8c376567086d3,\n            limb1: 0x1f9c69bb6fb467cd93899dd2,\n            limb2: 0x25dd4d1be0b765b,\n        },\n        r1a0: u288 {\n            limb0: 0x5b9c47593dfbd508ab34c7b3,\n            limb1: 0x5cc228830e12085b69b345df,\n            limb2: 0x563a3f38bb17d2d,\n        },\n        r1a1: u288 {\n            limb0: 0xd13362074a4f1c9ad9063afd,\n            limb1: 0xae0b6ddad1bdbd332e510b50,\n            limb2: 0x6fe176282e9d5fb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8909147ac871b1dfb1b93dea,\n            limb1: 0x142dbce634570b3004e7fc,\n            limb2: 0x6c20d9db5dd84da,\n        },\n        r0a1: u288 {\n            limb0: 0x9860d4eddaa4bc238176c6fc,\n            limb1: 0x2b0526a4c3964c89747e80c5,\n            limb2: 0x8fd2f58f97118b6,\n        },\n        r1a0: u288 {\n            limb0: 0x350f6ba8623173a2b59246f5,\n            limb1: 0xc1b28fd98d68ff68c2905942,\n            limb2: 0x8244875fe9df1c7,\n        },\n        r1a1: u288 {\n            limb0: 0x57cc1c6a24b662006d9dbe1b,\n            limb1: 0x5ad285ba45ea4be688bff724,\n            limb2: 0x2b07fd32ff344b21,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfeebe92941f95b6ea1d095bb,\n            limb1: 0x9c7962eb8bbeb95a9ca7cf50,\n            limb2: 0x290bdaf3b9a08dc3,\n        },\n        r0a1: u288 {\n            limb0: 0x686cfa11c9d4b93675495599,\n            limb1: 0xb1d69e17b4b5ebf64f0d51e1,\n            limb2: 0x2c18bb4bdc2e9567,\n        },\n        r1a0: u288 {\n            limb0: 0x17419b0f6a04bfc98d71527,\n            limb1: 0x80eba6ff02787e3de964a4d1,\n            limb2: 0x26087bb100e7ff9f,\n        },\n        r1a1: u288 {\n            limb0: 0x17c4ee42c3f612c43a08f689,\n            limb1: 0x7276bdda2df6d51a291dba69,\n            limb2: 0x40a7220ddb393e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x37349ad9dc3023fc75053e02,\n            limb1: 0x33a3d352f746ab24b3b58b0a,\n            limb2: 0xec4c339b84b811d,\n        },\n        r0a1: u288 {\n            limb0: 0x7dcfa2460a0ad9b521a47470,\n            limb1: 0xba3ff4b52958f6b7341790da,\n            limb2: 0x24709d3b126eb975,\n        },\n        r1a0: u288 {\n            limb0: 0xe5167ab2a7c59462398695fe,\n            limb1: 0x639d95ac9180109e9716c52d,\n            limb2: 0x1ad3dd11a73c7763,\n        },\n        r1a1: u288 {\n            limb0: 0xc4074c8a20ffec99be26ea0d,\n            limb1: 0x33d88e5ff7a03f8fc7673634,\n            limb2: 0x212a99002b140a7c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x830d777c19040571a1d72fd0,\n            limb1: 0x651b2c6b8c292020817a633f,\n            limb2: 0x268af1e285bc59ff,\n        },\n        r0a1: u288 {\n            limb0: 0xede78baa381c5bce077f443d,\n            limb1: 0x540ff96bae21cd8b9ae5438b,\n            limb2: 0x12a1fa7e3b369242,\n        },\n        r1a0: u288 {\n            limb0: 0x797c0608e5a535d8736d4bc5,\n            limb1: 0x375faf00f1147656b7c1075f,\n            limb2: 0xda60fab2dc5a639,\n        },\n        r1a1: u288 {\n            limb0: 0x610d26085cfbebdb30ce476e,\n            limb1: 0x5bc55890ff076827a09e8444,\n            limb2: 0x14272ee2d25f20b7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x430bef5bf19edee76f43f86d,\n            limb1: 0xd0d7e3e70da75944107b2d4a,\n            limb2: 0x1a773d3afca56895,\n        },\n        r0a1: u288 {\n            limb0: 0xac9908b990c2eba0c566a721,\n            limb1: 0xb5b9dd164b61dc1a46f57bc0,\n            limb2: 0x153897d14189a3e9,\n        },\n        r1a0: u288 {\n            limb0: 0x873c42f94417c98a18ef8b21,\n            limb1: 0x7fd90a68e925814a5c90c64e,\n            limb2: 0xb43f89cdc102905,\n        },\n        r1a1: u288 {\n            limb0: 0x6a2633ae3430261a8d930055,\n            limb1: 0xccf2888e7fa1b1be32616fcc,\n            limb2: 0x281f7352c8bd69b4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd6862e1a4ca3b2baf6f8d8aa,\n            limb1: 0x96f9066dded3a3d899025af4,\n            limb2: 0x1a98af9f0d48fd3,\n        },\n        r0a1: u288 {\n            limb0: 0x276b417cc61ea259c114314e,\n            limb1: 0x464399e5e0037b159866b246,\n            limb2: 0x12cc97dcf32896b5,\n        },\n        r1a0: u288 {\n            limb0: 0xef72647f4c2d08fc038c4377,\n            limb1: 0x34883cea19be9a490a93cf2b,\n            limb2: 0x10d01394daa61ed0,\n        },\n        r1a1: u288 {\n            limb0: 0xdf345239ece3acaa62919643,\n            limb1: 0x914780908ece64e763cca062,\n            limb2: 0xee2a80dbd2012a3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1d5a31f4d08a0ebf7e071e00,\n            limb1: 0xcd1244dd95dd30005f531f81,\n            limb2: 0xb4cb469a2dcf4f1,\n        },\n        r0a1: u288 {\n            limb0: 0x7c5938adaf38b355092de1f1,\n            limb1: 0x292ab08995b293abfcba14b,\n            limb2: 0x1fd126a2b9f37c67,\n        },\n        r1a0: u288 {\n            limb0: 0x6e9d352b02a7cb771fcc33f9,\n            limb1: 0x7754d8536eefda2025a07340,\n            limb2: 0x1840289291c35a72,\n        },\n        r1a1: u288 {\n            limb0: 0xe85f465417b7bd758c547b2e,\n            limb1: 0xf7f703c3bc55ff8a01fa9365,\n            limb2: 0xfa301227880a841,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb871630bb14808308256993,\n            limb1: 0x5aa6407e90ac7cd9d34c84b1,\n            limb2: 0x1a45d81956be51f9,\n        },\n        r0a1: u288 {\n            limb0: 0x4e35a5f1c75bc96bbe481d7c,\n            limb1: 0xb461fa7d1b269bf49be0ed7f,\n            limb2: 0x88efe970e8c4e4a,\n        },\n        r1a0: u288 {\n            limb0: 0xff160df5ead7b7b25d8892e5,\n            limb1: 0xbbbd6b9b216396e83fd6aa70,\n            limb2: 0x2dcf636e87cde612,\n        },\n        r1a1: u288 {\n            limb0: 0x44d33f7f0dbcaccf59607fcd,\n            limb1: 0xae52f65a36ac4f17e0e213de,\n            limb2: 0x12e6c11148485b9b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa89926f3c9ed74cf35d8982d,\n            limb1: 0x8e9003f1a42b81a81fe0df1e,\n            limb2: 0x2732162604574861,\n        },\n        r0a1: u288 {\n            limb0: 0x4ac22d9feb0443ee015b81e1,\n            limb1: 0xd442070c95acaa6a39e85ae9,\n            limb2: 0x1a42773c0ac19a09,\n        },\n        r1a0: u288 {\n            limb0: 0x7d32a4a55a853c2309cd6f0,\n            limb1: 0x747d1e031aa2229e38cfca1f,\n            limb2: 0x1b6358645f1162ad,\n        },\n        r1a1: u288 {\n            limb0: 0xd511412ffa32391dda88c29b,\n            limb1: 0x5f57b2aab83993734eb330b0,\n            limb2: 0xc3766c22260b874,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa4058149e82ea51362b79be4,\n            limb1: 0x734eba2621918a820ae44684,\n            limb2: 0x110a314a02272b1,\n        },\n        r0a1: u288 {\n            limb0: 0xe2b43963ef5055df3c249613,\n            limb1: 0x409c246f762c0126a1b3b7b7,\n            limb2: 0x19aa27f34ab03585,\n        },\n        r1a0: u288 {\n            limb0: 0x179aad5f620193f228031d62,\n            limb1: 0x6ba32299b05f31b099a3ef0d,\n            limb2: 0x157724be2a0a651f,\n        },\n        r1a1: u288 {\n            limb0: 0xa33b28d9a50300e4bbc99137,\n            limb1: 0x262a51847049d9b4d8cea297,\n            limb2: 0x189acb4571d50692,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbd50e560f6bb994a2922fa51,\n            limb1: 0x99a1d1b01aa18c7f31e917fc,\n            limb2: 0xd7ef26150626982,\n        },\n        r0a1: u288 {\n            limb0: 0xf014da7a050c535a40cfc124,\n            limb1: 0x3b1a2e82c4f0fc6379900c54,\n            limb2: 0x1a5cfd9a14902546,\n        },\n        r1a0: u288 {\n            limb0: 0x9aaa7b13fd8f24f65c93eec5,\n            limb1: 0xab93d53f2815295691702b82,\n            limb2: 0xde083d90578af6f,\n        },\n        r1a1: u288 {\n            limb0: 0xfbd08ec0a79725a4b6e8b67c,\n            limb1: 0x69946154b610ed695859295b,\n            limb2: 0x277a133a0d6da917,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x29bd4381ae4afc677ee37ed6,\n            limb1: 0x29ed43453f9a008d9176f004,\n            limb2: 0x24134eb915104f43,\n        },\n        r0a1: u288 {\n            limb0: 0x81597f82bb67e90a3e72bdd2,\n            limb1: 0xab3bbde5f7bbb4df6a6b5c19,\n            limb2: 0x19ac61eea40a367c,\n        },\n        r1a0: u288 {\n            limb0: 0xe30a79342fb3199651aee2fa,\n            limb1: 0xf500f028a73ab7b7db0104a3,\n            limb2: 0x808b50e0ecb5e4d,\n        },\n        r1a1: u288 {\n            limb0: 0x55f2818453c31d942444d9d6,\n            limb1: 0xf6dd80c71ab6e893f2cf48db,\n            limb2: 0x13c3ac4488abd138,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x32bc8a981429b931b50b70e1,\n            limb1: 0x99cffcd897696a0e5c987090,\n            limb2: 0x2663f59204065aeb,\n        },\n        r0a1: u288 {\n            limb0: 0x6d0d07933c107a489c682134,\n            limb1: 0xb81690a5db81aa6e8c0ef203,\n            limb2: 0x27cb7b6ce66b5225,\n        },\n        r1a0: u288 {\n            limb0: 0xf6fc5c5aa501cffb8ee75a4b,\n            limb1: 0xf8d08f9383f191384ba8077b,\n            limb2: 0x28b89e3f89c071c1,\n        },\n        r1a1: u288 {\n            limb0: 0x1bd9021070481b0a40cb6d36,\n            limb1: 0x86562734b4f3fcfb46e39713,\n            limb2: 0x1ec7729185561f74,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd1464269bbeafa546f559b8f,\n            limb1: 0xab7f7dcd1ac32b86979471cf,\n            limb2: 0x6a38256ee96f113,\n        },\n        r0a1: u288 {\n            limb0: 0xf14d50984e65f9bc41df4e7e,\n            limb1: 0x350aff9be6f9652ad441a3ad,\n            limb2: 0x1b1e60534b0a6aba,\n        },\n        r1a0: u288 {\n            limb0: 0x9e98507da6cc50a56f023849,\n            limb1: 0xcf8925e03f2bb5c1ba0962dd,\n            limb2: 0x2b18961810a62f87,\n        },\n        r1a1: u288 {\n            limb0: 0x3a4c61b937d4573e3f2da299,\n            limb1: 0x6f4c6c13fd90f4edc322796f,\n            limb2: 0x13f4e99b6a2f025e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd7f1137b131005c05a263909,\n            limb1: 0x377579bc2a44238703830641,\n            limb2: 0x1edb40cec982e433,\n        },\n        r0a1: u288 {\n            limb0: 0xb234350aafc13259037ff7b8,\n            limb1: 0x8ce5fcfc41890347214723f3,\n            limb2: 0x1d5cfe6e2536a23b,\n        },\n        r1a0: u288 {\n            limb0: 0x8d74f12ae2cdd199736e4db9,\n            limb1: 0xf5835da25b7c74dea8742767,\n            limb2: 0xa4f9baaf2b585aa,\n        },\n        r1a1: u288 {\n            limb0: 0x6c077e93c1a1bae84d31f2de,\n            limb1: 0xeb24bf9c8e1a11a15952b35f,\n            limb2: 0x182a33beae2d73ac,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe0115a79120ae892a72f3dcb,\n            limb1: 0xec67b5fc9ea414a4020135f,\n            limb2: 0x1ee364e12321904a,\n        },\n        r0a1: u288 {\n            limb0: 0xa74d09666f9429c1f2041cd9,\n            limb1: 0x57ffe0951f863dd0c1c2e97a,\n            limb2: 0x154877b2d1908995,\n        },\n        r1a0: u288 {\n            limb0: 0xcbe5e4d2d2c91cdd4ccca0,\n            limb1: 0xe6acea145563a04b2821d120,\n            limb2: 0x18213221f2937afb,\n        },\n        r1a1: u288 {\n            limb0: 0xfe20afa6f6ddeb2cb768a5ae,\n            limb1: 0x1a3b509131945337c3568fcf,\n            limb2: 0x127b5788263a927e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x23a3796fea17793ca760d4b4,\n            limb1: 0xb4abf7ebb030cb2f1630ed5f,\n            limb2: 0x64ab24ff28d4416,\n        },\n        r0a1: u288 {\n            limb0: 0x538a1fa509f26d8c8bdeb966,\n            limb1: 0x73f3e2cd56d3c514e4a37c42,\n            limb2: 0x60a236e3776ce68,\n        },\n        r1a0: u288 {\n            limb0: 0xd80f5ba56c16fe54bda3fa80,\n            limb1: 0xe5f8701be9499623ce8a673d,\n            limb2: 0x18c79fac25052970,\n        },\n        r1a1: u288 {\n            limb0: 0x8929aad47a81f1378a817ef5,\n            limb1: 0xfadba04c7242b43b5cf39d33,\n            limb2: 0xb3e5f5c3c9fb3b2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe7c658aecdab4db3c83f7927,\n            limb1: 0xfbf162264ca04ee50c70bde8,\n            limb2: 0x2a20f4565b7ff885,\n        },\n        r0a1: u288 {\n            limb0: 0x45b1c2f0a1226361f42683c0,\n            limb1: 0x9acdd892c48c08de047296bc,\n            limb2: 0x27836373108925d4,\n        },\n        r1a0: u288 {\n            limb0: 0xc0ea9294b345e6d4892676a7,\n            limb1: 0xcba74eca77086af245d1606e,\n            limb2: 0xf20edac89053e72,\n        },\n        r1a1: u288 {\n            limb0: 0x4c92a28f2779a527a68a938c,\n            limb1: 0x3a1c3c55ff9d20eac109fab3,\n            limb2: 0x21c4a8c524b1ee7d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x731f3a1b36de3023901591ff,\n            limb1: 0xe34bb92f321ca5d3092bcbad,\n            limb2: 0x2216559b45dd1c2f,\n        },\n        r0a1: u288 {\n            limb0: 0x3bac805b2d142e0cc0edeb11,\n            limb1: 0x5d11df064af70b6d83d6ce74,\n            limb2: 0x14c2db65d318303,\n        },\n        r1a0: u288 {\n            limb0: 0xc3ee59929ecba416af62e06e,\n            limb1: 0xcbdffb49b2c9219cfda57258,\n            limb2: 0x9e92730073f74d7,\n        },\n        r1a1: u288 {\n            limb0: 0x137f2ce23b788e764203080c,\n            limb1: 0x1340ccaf8101da98864c6b0c,\n            limb2: 0x103ddd7382137938,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa68021d593c46246af22559e,\n            limb1: 0x5c2cfc5bc4cd1b48f4704134,\n            limb2: 0x296066ede1298f8c,\n        },\n        r0a1: u288 {\n            limb0: 0xfe17dd6765eb9b9625eb6a84,\n            limb1: 0x4e35dd8e8f6088bb14299f8d,\n            limb2: 0x1a380ab2689106e4,\n        },\n        r1a0: u288 {\n            limb0: 0x82bacf337ca09853df42bc59,\n            limb1: 0xa15de4ef34a30014c5a2e9ae,\n            limb2: 0x243cc0cec53c778b,\n        },\n        r1a1: u288 {\n            limb0: 0xcb2a1bf18e3ba9349b0a8bf2,\n            limb1: 0x35134b2505cbb5a4c91f0ac4,\n            limb2: 0x25e45206b13f43c4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8e97b007ffd9891bd0e77650,\n            limb1: 0x77671278ac33f17df6b1db88,\n            limb2: 0x243daddc47f5d5c2,\n        },\n        r0a1: u288 {\n            limb0: 0x655fe4c8bbe5ee06aaa0054b,\n            limb1: 0xf751450b02c93c7ddea95938,\n            limb2: 0x21aa988e950d563f,\n        },\n        r1a0: u288 {\n            limb0: 0xb51b3b6b8582de3eb0549518,\n            limb1: 0x84a1031766b7e465f5bbf40c,\n            limb2: 0xd46c2d5b95e5532,\n        },\n        r1a1: u288 {\n            limb0: 0x50b6ddd8a5eef0067652191e,\n            limb1: 0x298832a0bc46ebed8bff6190,\n            limb2: 0xb568b4fe8311f93,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6ad6cf94fc3bf4bfbd69ba1d,\n            limb1: 0x806961a05ecbb229a267a99d,\n            limb2: 0x1671d0fb2e942009,\n        },\n        r0a1: u288 {\n            limb0: 0x2e9b86ac823b3213d26fe614,\n            limb1: 0x48a66f0ee2f66e6be68a4eab,\n            limb2: 0x9162eb41435b523,\n        },\n        r1a0: u288 {\n            limb0: 0xeda3ea2df37c2c19a07e26a6,\n            limb1: 0x96cb3f72bef333861a5f6793,\n            limb2: 0x6e84ee455d519bf,\n        },\n        r1a1: u288 {\n            limb0: 0x52f50c292b08883fa721dada,\n            limb1: 0x2029cc6ef51b67f2f30e583a,\n            limb2: 0xb289cfc0164b2ed,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6c70c1e14706dbfd33efe75c,\n            limb1: 0xbd47837fd6f0a808a8cac5c3,\n            limb2: 0x1b60ad36bb1e656e,\n        },\n        r0a1: u288 {\n            limb0: 0x833e70940a681aa43a083ad0,\n            limb1: 0x3ffecc6d09b7a0ea1df06988,\n            limb2: 0x216e7660abbec411,\n        },\n        r1a0: u288 {\n            limb0: 0xdaddeff80a0eccefcd3726b4,\n            limb1: 0xd7b4c983581d4e9b3f210f17,\n            limb2: 0x26bf9b818756e2b,\n        },\n        r1a1: u288 {\n            limb0: 0xb32fd7bd9890bbed35311a72,\n            limb1: 0xa30e2587947d85bbece4c62f,\n            limb2: 0x197a3b46e94f9f24,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xddb4db99db681d35f71a159c,\n            limb1: 0xf71a330019414e6fdee75700,\n            limb2: 0x14d9838e7d1918bb,\n        },\n        r0a1: u288 {\n            limb0: 0x203c8bac71951a5f2c653710,\n            limb1: 0x9fc93f8da38ecc2957313982,\n            limb2: 0x7b6d981259cabd9,\n        },\n        r1a0: u288 {\n            limb0: 0xa7297cdb5be0cc45d48ca6af,\n            limb1: 0xa07b4b025ebe6c960eddfc56,\n            limb2: 0xef2a5c30ef00652,\n        },\n        r1a1: u288 {\n            limb0: 0xb7f05c76d860e9122b36ecd7,\n            limb1: 0x407d6522e1f9ce2bcbf80eda,\n            limb2: 0x197625a558f32c36,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe6af6774cb7a4b647bc24bc6,\n            limb1: 0x76bea1b00f9735d1977d2636,\n            limb2: 0xc89d9397e87260c,\n        },\n        r0a1: u288 {\n            limb0: 0x96bf96a3ec6330e2471bedb,\n            limb1: 0xaefe1b80eabbd9aea0986912,\n            limb2: 0x2060760fa91e6007,\n        },\n        r1a0: u288 {\n            limb0: 0x7bcc695f496777a5639d8e67,\n            limb1: 0x521bb49545544f2017835a37,\n            limb2: 0x23bd13f6824a9c20,\n        },\n        r1a1: u288 {\n            limb0: 0x2a7663f245635451e8e9395b,\n            limb1: 0x2a618c0e730e827ea1b6c5b8,\n            limb2: 0x4b769d1e5ea2d59,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb0f04df9dec94801e48a6ff7,\n            limb1: 0xdc59d087c627d38334e5b969,\n            limb2: 0x3d36e11420be053,\n        },\n        r0a1: u288 {\n            limb0: 0xc80f070001aa1586189e0215,\n            limb1: 0xff849fcbbbe7c00c83ab5282,\n            limb2: 0x2a2354b2882706a6,\n        },\n        r1a0: u288 {\n            limb0: 0x48cf70c80f08b6c7dc78adb2,\n            limb1: 0xc6632efa77b36a4a1551d003,\n            limb2: 0xc2d3533ece75879,\n        },\n        r1a1: u288 {\n            limb0: 0x63e82ba26617416a0b76ddaa,\n            limb1: 0xdaceb24adda5a049bed29a50,\n            limb2: 0x1a82061a3344043b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5870b524b1a3550dd400ccc5,\n            limb1: 0x852bc0b37d0f914b8073f12f,\n            limb2: 0x16509ed87eff5a4e,\n        },\n        r0a1: u288 {\n            limb0: 0x88260fe925feb155aed3786a,\n            limb1: 0x67d1bdd00f0234c2f4bfc1dc,\n            limb2: 0x2d447aa64752d13,\n        },\n        r1a0: u288 {\n            limb0: 0x61cd38a81ad2ff47aed15d31,\n            limb1: 0xbca0f1fb3a56f9f221477273,\n            limb2: 0x24049dab533565eb,\n        },\n        r1a1: u288 {\n            limb0: 0x6c2add460f1dc00897d5b5da,\n            limb1: 0x35bb326b6d5280eee3f8c765,\n            limb2: 0x13a4b8025098500,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9152fecf0f523415acc7c7be,\n            limb1: 0xd9632cbfccc4ea5d7bf31177,\n            limb2: 0x2d7288c5f8c83ab1,\n        },\n        r0a1: u288 {\n            limb0: 0x53144bfe4030f3f9f5efda8,\n            limb1: 0xfeec394fbf392b11c66bae27,\n            limb2: 0x28840813ab8a200b,\n        },\n        r1a0: u288 {\n            limb0: 0xdec3b11fbc28b305d9996ec7,\n            limb1: 0x5b5f8d9d17199e149c9def6e,\n            limb2: 0x10c1a149b6751bae,\n        },\n        r1a1: u288 {\n            limb0: 0x665e8eb7e7d376a2d921c889,\n            limb1: 0xfdd76d06e46ee1a943b8788d,\n            limb2: 0x8bb21d9960e837b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3a67c28a175200e631aa506a,\n            limb1: 0x7397303a34968ff17c06e801,\n            limb2: 0x1b81e0c63123688b,\n        },\n        r0a1: u288 {\n            limb0: 0x3490cfd4f076c621dac4a12c,\n            limb1: 0xec183578c91b90b72e5887b7,\n            limb2: 0x179fb354f608da00,\n        },\n        r1a0: u288 {\n            limb0: 0x9322bde2044dde580a78ba33,\n            limb1: 0xfc74821b668d3570cad38f8b,\n            limb2: 0x8cec54a291f5e57,\n        },\n        r1a1: u288 {\n            limb0: 0xc2818b6a9530ee85d4b2ae49,\n            limb1: 0x8d7b651ad167f2a43d7a2d0a,\n            limb2: 0x7c9ca9bab0ffc7f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5622114faf115105095ab77f,\n            limb1: 0x54762377d7848bf1c52b1fce,\n            limb2: 0x1f97b82262bcf5d6,\n        },\n        r0a1: u288 {\n            limb0: 0x6085f868127e9f82a6324ea7,\n            limb1: 0x88a39c58534935bde6a49ab,\n            limb2: 0x7f8a3494505b851,\n        },\n        r1a0: u288 {\n            limb0: 0xd3eabc17c5e2f4e09171b9dd,\n            limb1: 0x1925fbd52a9cb6a997959648,\n            limb2: 0x21518ac51afc3758,\n        },\n        r1a1: u288 {\n            limb0: 0x6096ef3f52e60023239e48e4,\n            limb1: 0x865e3876b961acac0b78e525,\n            limb2: 0x860d5900ad68c37,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2ad5fd7aad65b27d37fb015a,\n            limb1: 0x481729d76f6a024e82fb745d,\n            limb2: 0x109a944738eaca6a,\n        },\n        r0a1: u288 {\n            limb0: 0x3297a180bf2677cff3ccb41f,\n            limb1: 0xa65e1bdf4bb474832f0a5157,\n            limb2: 0x1978ab7a84d8651b,\n        },\n        r1a0: u288 {\n            limb0: 0x708be8948dd3360c8723e464,\n            limb1: 0xbaed9d16b05c7d52f3e91f9f,\n            limb2: 0x1975a6b856112bc2,\n        },\n        r1a1: u288 {\n            limb0: 0xdff0a3ede7d8433f08340a93,\n            limb1: 0xd6415eabeb4ddb811aa617b2,\n            limb2: 0xdb9f4e71e973c6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa576408f8300de3a7714e6ae,\n            limb1: 0xe1072c9a16f202ecf37fbc34,\n            limb2: 0x1b0cb1e2b5871263,\n        },\n        r0a1: u288 {\n            limb0: 0x2128e2314694b663286e231e,\n            limb1: 0x54bea71957426f002508f715,\n            limb2: 0x36ecc5dbe069dca,\n        },\n        r1a0: u288 {\n            limb0: 0x17c77cd88f9d5870957850ce,\n            limb1: 0xb7f4ec2bc270ce30538fe9b8,\n            limb2: 0x766279e588592bf,\n        },\n        r1a1: u288 {\n            limb0: 0x1b6caddf18de2f30fa650122,\n            limb1: 0x40b77237a29cada253c126c6,\n            limb2: 0x74ff1349b1866c8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1266deaa34cf31d6d118b057,\n            limb1: 0x7eef7892b3efd91c5364259c,\n            limb2: 0x1f4ac5e1bdc33dac,\n        },\n        r0a1: u288 {\n            limb0: 0x1068831212b6fe1b5aa05f22,\n            limb1: 0xc39adbfe99701ca7671003e3,\n            limb2: 0x1ab8e56b642f5f82,\n        },\n        r1a0: u288 {\n            limb0: 0xd53d59610ebf7f664c23c080,\n            limb1: 0x3d162ffb5a16aafc8be99bd3,\n            limb2: 0x281e77e14f6bb9c0,\n        },\n        r1a1: u288 {\n            limb0: 0x4fe123e56c3c2c64a4260c7b,\n            limb1: 0x90c367228a761d9c50be237c,\n            limb2: 0xf07b0465615fe71,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3603266e05560becab36faef,\n            limb1: 0x8c3b88c9390278873dd4b048,\n            limb2: 0x24a715a5d9880f38,\n        },\n        r0a1: u288 {\n            limb0: 0xe9f595b111cfd00d1dd28891,\n            limb1: 0x75c6a392ab4a627f642303e1,\n            limb2: 0x17b34a30def82ab6,\n        },\n        r1a0: u288 {\n            limb0: 0xe706de8f35ac8372669fc8d3,\n            limb1: 0x16cc7f4032b3f3ebcecd997d,\n            limb2: 0x166eba592eb1fc78,\n        },\n        r1a1: u288 {\n            limb0: 0x7d584f102b8e64dcbbd1be9,\n            limb1: 0x2ead4092f009a9c0577f7d3,\n            limb2: 0x2fe2c31ee6b1d41e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72253d939632f8c28fb5763,\n            limb1: 0x9b943ab13cad451aed1b08a2,\n            limb2: 0xdb9b2068e450f10,\n        },\n        r0a1: u288 {\n            limb0: 0x80f025dcbce32f6449fa7719,\n            limb1: 0x8a0791d4d1ed60b86e4fe813,\n            limb2: 0x1b1bd5dbce0ea966,\n        },\n        r1a0: u288 {\n            limb0: 0xaa72a31de7d815ae717165d4,\n            limb1: 0x501c29c7b6aebc4a1b44407f,\n            limb2: 0x464aa89f8631b3a,\n        },\n        r1a1: u288 {\n            limb0: 0x6b8d137e1ea43cd4b1f616b1,\n            limb1: 0xdd526a510cc84f150cc4d55a,\n            limb2: 0x1da2ed980ebd3f29,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72dfbb2159ade3ca2db9a485,\n            limb1: 0xaf353e749a0b0e126b462bd4,\n            limb2: 0x11a356fc91502fd1,\n        },\n        r0a1: u288 {\n            limb0: 0xa8da111fc2adcd5b3152926b,\n            limb1: 0x9d2cd58a348021fb039ad1ce,\n            limb2: 0x24a89d0c2aa1a4c,\n        },\n        r1a0: u288 {\n            limb0: 0xb7eadf0666fe1d5d8e00ddd3,\n            limb1: 0x9fa7fbf853bdf5b9620cae4c,\n            limb2: 0x2b6df7a5b1f6cfa3,\n        },\n        r1a1: u288 {\n            limb0: 0x30a81454c2cc541ca6ac5028,\n            limb1: 0xd14ccb5778ca0679f43b0042,\n            limb2: 0x2b15bb249061229,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xff2a45b22df6665c3f2b3433,\n            limb1: 0x47f06d2821bccb7d4e1442dc,\n            limb2: 0x1d6d005a3a962538,\n        },\n        r0a1: u288 {\n            limb0: 0xbc3869f85e6c5199ae4d48ae,\n            limb1: 0xf1b658ebf5d88598be4f771c,\n            limb2: 0x10ce0fad17dffce6,\n        },\n        r1a0: u288 {\n            limb0: 0x9057fbbd4dbd1f42e143f536,\n            limb1: 0xb84a12963d2bdeff0cfb15cc,\n            limb2: 0xf055cbcbcad6397,\n        },\n        r1a1: u288 {\n            limb0: 0x2b6c8f90506d8c5f45a796c2,\n            limb1: 0x15647362232ed3834e25f304,\n            limb2: 0x10c73cc1383f51b5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x867cced8a010850958f41ff5,\n            limb1: 0x6a37fdb2b8993eed18bafe8e,\n            limb2: 0x21b9f782109e5a7,\n        },\n        r0a1: u288 {\n            limb0: 0x7307477d650618e66de38d0f,\n            limb1: 0xacb622ce92a7e393dbe10ba1,\n            limb2: 0x236e70838cee0ed5,\n        },\n        r1a0: u288 {\n            limb0: 0xb564a308aaf5dda0f4af0f0d,\n            limb1: 0x55fc71e2f13d8cb12bd51e74,\n            limb2: 0x294cf115a234a9e9,\n        },\n        r1a1: u288 {\n            limb0: 0xbd166057df55c135b87f35f3,\n            limb1: 0xf9f29b6c50f1cce9b85ec9b,\n            limb2: 0x2e8448d167f20f96,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfcb1d8cfddd4980727750419,\n            limb1: 0xe57b3100fcf5fcd46e1cff24,\n            limb2: 0x1ea2a9f23e471d2f,\n        },\n        r0a1: u288 {\n            limb0: 0x8278659319480914a8f915c3,\n            limb1: 0xb9d01b3a1f3df0c8481b47c7,\n            limb2: 0x1dce2891e1df8e91,\n        },\n        r1a0: u288 {\n            limb0: 0x373890191ad2139b5ac37f5e,\n            limb1: 0x7d00bf061594cf869f26bd35,\n            limb2: 0x263941972f0c5bcc,\n        },\n        r1a1: u288 {\n            limb0: 0x35d21a939f18acadda6398c4,\n            limb1: 0x2f266751d30024c345fd2f64,\n            limb2: 0x12415712f84fa7c6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdedaff3205bb953b2c390b8a,\n            limb1: 0xe1a899da21c1dafb485c707e,\n            limb2: 0x1ec897e7a041493e,\n        },\n        r0a1: u288 {\n            limb0: 0xf52c3c30cd4d3202b34089e0,\n            limb1: 0xc652aa1ff533e1aad7532305,\n            limb2: 0x2a1df766e5e3aa2e,\n        },\n        r1a0: u288 {\n            limb0: 0x7ac695d3e19d79b234daaf3d,\n            limb1: 0x5ce2f92666aec92a650feee1,\n            limb2: 0x21ab4fe20d978e77,\n        },\n        r1a1: u288 {\n            limb0: 0xa64a913a29a1aed4e0798664,\n            limb1: 0x66bc208b511503d127ff5ede,\n            limb2: 0x2389ba056de56a8d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x65ab6317a706e3cda223edf8,\n            limb1: 0x9a22ac3ac5e4dd3e9f987fd9,\n            limb2: 0x157637901a8b31a5,\n        },\n        r0a1: u288 {\n            limb0: 0xc57d325b1af3a13019c15e11,\n            limb1: 0x2812651fd79b5fbbb05cc3d7,\n            limb2: 0x1f1602a02e76536f,\n        },\n        r1a0: u288 {\n            limb0: 0xdf3ad97a0633d33f5a8cea32,\n            limb1: 0xd15238b33edfeb16cffd44ea,\n            limb2: 0x5a03a044b07b640,\n        },\n        r1a1: u288 {\n            limb0: 0x58fec495c4c681cf797762a1,\n            limb1: 0xd3ac0af0d5cb5bff7f4fa8e8,\n            limb2: 0x286d6218242eddb4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd88b16e68600a12e6c1f6006,\n            limb1: 0x333243b43d3b7ff18d0cc671,\n            limb2: 0x2b84b2a9b0f03ed8,\n        },\n        r0a1: u288 {\n            limb0: 0xf3e2b57ddaac822c4da09991,\n            limb1: 0xd7c894b3fe515296bb054d2f,\n            limb2: 0x10a75e4c6dddb441,\n        },\n        r1a0: u288 {\n            limb0: 0x73c65fbbb06a7b21b865ac56,\n            limb1: 0x21f4ecd1403bb78729c7e99b,\n            limb2: 0xaf88a160a6b35d4,\n        },\n        r1a1: u288 {\n            limb0: 0xade61ce10b8492d659ff68d0,\n            limb1: 0x1476e76cf3a8e0df086ad9eb,\n            limb2: 0x2e28cfc65d61e946,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdf8b54b244108008e7f93350,\n            limb1: 0x2ae9a68b9d6b96f392decd6b,\n            limb2: 0x160b19eed152271c,\n        },\n        r0a1: u288 {\n            limb0: 0xc18a8994cfbb2e8df446e449,\n            limb1: 0x408d51e7e4adedd8f4f94d06,\n            limb2: 0x27661b404fe90162,\n        },\n        r1a0: u288 {\n            limb0: 0x1390b2a3b27f43f7ac73832c,\n            limb1: 0x14d57301f6002fd328f2d64d,\n            limb2: 0x17f3fa337367dddc,\n        },\n        r1a1: u288 {\n            limb0: 0x79cab8ff5bf2f762c5372f80,\n            limb1: 0xc979d6f385fae4b5e4785acf,\n            limb2: 0x60c5307a735b00f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x42e951ca7dac29d65a14ab82,\n            limb1: 0x140be62e3d419b811acf5756,\n            limb2: 0x11523c7fc2a37270,\n        },\n        r0a1: u288 {\n            limb0: 0x593b29e6aad3cadd506d93bd,\n            limb1: 0x59976c08d37982b9c28495c3,\n            limb2: 0xc924925bb5976fe,\n        },\n        r1a0: u288 {\n            limb0: 0xcb18016afc265e1a5fc80af0,\n            limb1: 0xd830297a058f529ef5e3f97e,\n            limb2: 0x253a39d5462f1882,\n        },\n        r1a1: u288 {\n            limb0: 0x2b081ad5589d7f1cedb120a9,\n            limb1: 0x956ae1847a5ce3f261e1e1e7,\n            limb2: 0x1afd47a0e8c0dbeb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb70b988a54003f89b0376a63,\n            limb1: 0xff28c025f2f710e53ac37b9e,\n            limb2: 0x2e441c518d3fe68d,\n        },\n        r0a1: u288 {\n            limb0: 0x660ddad555982e7994df37fb,\n            limb1: 0x6c04f02c84dc80d8305f0357,\n            limb2: 0x23b41d5762cf7f0f,\n        },\n        r1a0: u288 {\n            limb0: 0xa2f0ccb1a552683ea3ac0798,\n            limb1: 0xb33b544006bac5a1fd372830,\n            limb2: 0x24afb0cbc42170a7,\n        },\n        r1a1: u288 {\n            limb0: 0xf93faa0be992488deb617b04,\n            limb1: 0x86fb2bb1f07dfeef85b2886,\n            limb2: 0x189649259453ed83,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x386d7b23c6dccb87637018c9,\n            limb1: 0xfed2ea478e9a2210289079e2,\n            limb2: 0x100aa83cb843353e,\n        },\n        r0a1: u288 {\n            limb0: 0x229c5c285f049d04c3dc5ce7,\n            limb1: 0x28110670fe1d38c53ffcc6f7,\n            limb2: 0x1778918279578f50,\n        },\n        r1a0: u288 {\n            limb0: 0xe9ad2c7b8a17a1f1627ff09d,\n            limb1: 0xedff5563c3c3e7d2dcc402ec,\n            limb2: 0xa8bd6770b6d5aa8,\n        },\n        r1a1: u288 {\n            limb0: 0x66c5c1aeed5c04470b4e8a3d,\n            limb1: 0x846e73d11f2d18fe7e1e1aa2,\n            limb2: 0x10a60eabe0ec3d78,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9dafcca7f80fb028e1550b13,\n            limb1: 0x510e07802d526954395ad6d6,\n            limb2: 0x34f031507e71a70,\n        },\n        r0a1: u288 {\n            limb0: 0xac7b6a137d96e956dd4f2773,\n            limb1: 0x2692998b32154b368c857fee,\n            limb2: 0x2ea30d00a23e6587,\n        },\n        r1a0: u288 {\n            limb0: 0x69f3776dd7fd4db9bde03967,\n            limb1: 0x16efb004aa3f44e6ac5fdd29,\n            limb2: 0x361dd68590907c0,\n        },\n        r1a1: u288 {\n            limb0: 0x445681532c126e7c428445b7,\n            limb1: 0xfa2b7d974e59a61f57bcd949,\n            limb2: 0x258ce35529e9f923,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x88ca191d85be1f6c205257ef,\n            limb1: 0xd0cecf5c5f80926c77fd4870,\n            limb2: 0x16ec42b5cae83200,\n        },\n        r0a1: u288 {\n            limb0: 0x154cba82460752b94916186d,\n            limb1: 0x564f6bebac05a4f3fb1353ac,\n            limb2: 0x2d47a47da836d1a7,\n        },\n        r1a0: u288 {\n            limb0: 0xb39c4d6150bd64b4674f42ba,\n            limb1: 0x93c967a38fe86f0779bf4163,\n            limb2: 0x1a51995a49d50f26,\n        },\n        r1a1: u288 {\n            limb0: 0xeb7bdec4b7e304bbb0450608,\n            limb1: 0x11fc9a124b8c74b3d5560ea4,\n            limb2: 0xbfa9bd7f55ad8ac,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2cb6407193c4b5c315a00755,\n            limb1: 0x33dcf6b5051abc2c59b801ab,\n            limb2: 0x16f1a436a0abadf6,\n        },\n        r0a1: u288 {\n            limb0: 0x3398c4073878ea089b0c7b80,\n            limb1: 0x49d08a1ce731c9b194b93e64,\n            limb2: 0x2c1a19007bb6f21c,\n        },\n        r1a0: u288 {\n            limb0: 0x6b305edfc565d8cb06fa559e,\n            limb1: 0x43ee87287e1f2f15d6631f33,\n            limb2: 0x1cd36451c5666f9c,\n        },\n        r1a1: u288 {\n            limb0: 0x650c38aae0bd3882a6556860,\n            limb1: 0x8e04c37290ae5a6bb3eb1f91,\n            limb2: 0x12e57f5774525f20,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2fdc574c85cf0c0ce5e07a51,\n            limb1: 0xd2439bf7b00bddc4cfb01b0c,\n            limb2: 0x125c3bbdeb0bd2da,\n        },\n        r0a1: u288 {\n            limb0: 0x9d664714bae53cafcb5ef55d,\n            limb1: 0x495c01724790853548f5e4de,\n            limb2: 0x2ce5e2e263725941,\n        },\n        r1a0: u288 {\n            limb0: 0x98071eb7fe88c9124aee3774,\n            limb1: 0xc3f66947a52bd2f6d520579f,\n            limb2: 0x2eaf775dbd52f7d3,\n        },\n        r1a1: u288 {\n            limb0: 0x23e5594948e21db2061dca92,\n            limb1: 0xd0ffa6f6c77290531c185431,\n            limb2: 0x604c085de03afb1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf884b2ccf06f8da655d3142,\n            limb1: 0xdece09e25a509a7dd0b73bde,\n            limb2: 0xa6830f44f8a0e0d,\n        },\n        r0a1: u288 {\n            limb0: 0x36cc33f5e41d078c07a952fe,\n            limb1: 0xa3c7be8095228c58e49910b2,\n            limb2: 0x2d863134dbfbae7f,\n        },\n        r1a0: u288 {\n            limb0: 0x83786a541018cb79e6baccf6,\n            limb1: 0x9c73f5fa4f111743dfb0b581,\n            limb2: 0x22faefa4bfa9f387,\n        },\n        r1a1: u288 {\n            limb0: 0x2f25834de3d2ec7bda75abc7,\n            limb1: 0x4526dbfbc8f7d9e1c71c8375,\n            limb2: 0x1f3bb15443413d60,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xeec2912e15f6bda39d4e005e,\n            limb1: 0x2b8610c44d27bdbc6ba2aac5,\n            limb2: 0x78ddc4573fc1fed,\n        },\n        r0a1: u288 {\n            limb0: 0x48099a0da11ea21de015229d,\n            limb1: 0x5fe937100967d5cc544f4af1,\n            limb2: 0x2c9ffe6d7d7e9631,\n        },\n        r1a0: u288 {\n            limb0: 0xa70d251296ef1ae37ceb7d03,\n            limb1: 0x2adadcb7d219bb1580e6e9c,\n            limb2: 0x180481a57f22fd03,\n        },\n        r1a1: u288 {\n            limb0: 0xacf46db9631037dd933eb72a,\n            limb1: 0x8a58491815c7656292a77d29,\n            limb2: 0x261e3516c348ae12,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x62b45634f0eaf51f5bc4003c,\n            limb1: 0x13ff6a6fc286b5b754548ac3,\n            limb2: 0x1670dac54842d28b,\n        },\n        r0a1: u288 {\n            limb0: 0x85fe43906582fc736d926df3,\n            limb1: 0xf077151ea6da959af3c290f6,\n            limb2: 0xc8cebcafaa4ae47,\n        },\n        r1a0: u288 {\n            limb0: 0x7540aff585c27cb2fa15c662,\n            limb1: 0x5cf456bcd4fa0e3bbae0f467,\n            limb2: 0x24a1c8ecb9c907e9,\n        },\n        r1a1: u288 {\n            limb0: 0x19ba1bf552affd897d561632,\n            limb1: 0x1df4a4d8d77248957809f88e,\n            limb2: 0x1d7484a0c0251cdc,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2bfa32f0a09c3e2cfb8f6a38,\n            limb1: 0x7a24df3ff3c7119a59d49318,\n            limb2: 0x10e42281d64907ba,\n        },\n        r0a1: u288 {\n            limb0: 0xce42177a66cdeb4207d11e0c,\n            limb1: 0x3322aa425a9ca270152372ad,\n            limb2: 0x2f7fa83db407600c,\n        },\n        r1a0: u288 {\n            limb0: 0x62a8ff94fd1c7b9035af4446,\n            limb1: 0x3ad500601bbb6e7ed1301377,\n            limb2: 0x254d253ca06928f,\n        },\n        r1a1: u288 {\n            limb0: 0xf8f1787cd8e730c904b4386d,\n            limb1: 0x7fd3744349918d62c42d24cc,\n            limb2: 0x28a05e105d652eb8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6ef31e059d602897fa8e80a8,\n            limb1: 0x66a0710847b6609ceda5140,\n            limb2: 0x228c0e568f1eb9c0,\n        },\n        r0a1: u288 {\n            limb0: 0x7b47b1b133c1297b45cdd79b,\n            limb1: 0x6b4f04ed71b58dafd06b527b,\n            limb2: 0x13ae6db5254df01a,\n        },\n        r1a0: u288 {\n            limb0: 0xbeca2fccf7d0754dcf23ddda,\n            limb1: 0xe3d0bcd7d9496d1e5afb0a59,\n            limb2: 0x305a0afb142cf442,\n        },\n        r1a1: u288 {\n            limb0: 0x2d299847431477c899560ecf,\n            limb1: 0xbcd9e6c30bedee116b043d8d,\n            limb2: 0x79473a2a7438353,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xae3712a6ef6034d7fcbc318c,\n            limb1: 0xedba25c96439aeb3954ccff7,\n            limb2: 0x1a0d73e3d8d90330,\n        },\n        r0a1: u288 {\n            limb0: 0xff6fb0e919bd80f29065244,\n            limb1: 0xfdcac02f3dd2e9268271021f,\n            limb2: 0x202e92badc53f790,\n        },\n        r1a0: u288 {\n            limb0: 0xec674cc5d55fcd80ab9fc167,\n            limb1: 0xb9f7f1fd7f1e4936802c19d1,\n            limb2: 0x27ac3aca37743af5,\n        },\n        r1a1: u288 {\n            limb0: 0xe49dfebb538630697c09c39d,\n            limb1: 0x56732676796d1f91ecab12ad,\n            limb2: 0xb010d1b0f285dbd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb431b974a13b9d75e11033b8,\n            limb1: 0xa4b7192e2b5f3730bd216f73,\n            limb2: 0x53cf4b349760f42,\n        },\n        r0a1: u288 {\n            limb0: 0x3c87efcabaa8e22835e19e2,\n            limb1: 0xfc9cf42672502f3fb7917c8f,\n            limb2: 0x11123549a68499c8,\n        },\n        r1a0: u288 {\n            limb0: 0xf91da96d0c078dea22787ecb,\n            limb1: 0xd165ceed6f64338e6288e1d3,\n            limb2: 0x23490db5de27b468,\n        },\n        r1a1: u288 {\n            limb0: 0x419e0eafdcf6226512a9ec6a,\n            limb1: 0x1c6fb8110315ae80c4bf92ec,\n            limb2: 0x2ad5f86e5d3bc1c3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x65b71fe695e7ccd4b460dace,\n            limb1: 0xa6ceba62ef334e6fe91301d5,\n            limb2: 0x299f578d0f3554e6,\n        },\n        r0a1: u288 {\n            limb0: 0xaf781dd030a274e7ecf0cfa4,\n            limb1: 0x2095020d373a14d7967797aa,\n            limb2: 0x6a7f9df6f185bf8,\n        },\n        r1a0: u288 {\n            limb0: 0x8e91e2dba67d130a0b274df3,\n            limb1: 0xe192a19fce285c12c6770089,\n            limb2: 0x6e9acf4205c2e22,\n        },\n        r1a1: u288 {\n            limb0: 0xbcd5c206b5f9c77d667189bf,\n            limb1: 0x656a7e2ebc78255d5242ca9,\n            limb2: 0x25f43fec41d2b245,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd6c95bb06c0e9a55a56a85c0,\n            limb1: 0xf5d3c4d860aee402df7d0cd6,\n            limb2: 0xa90fbb3a7bcfb07,\n        },\n        r0a1: u288 {\n            limb0: 0xbfca0761240adb98fdf8e23d,\n            limb1: 0xe6052ca38781d13cf53921cb,\n            limb2: 0x780debeee0578b2,\n        },\n        r1a0: u288 {\n            limb0: 0xbe285fa3e37b0222a1c65921,\n            limb1: 0xb9fbb60c587b00d8ecf22359,\n            limb2: 0x284f4ced8b0b28f5,\n        },\n        r1a1: u288 {\n            limb0: 0x34e69be4d8eea470c08f07e8,\n            limb1: 0x651617bebb0020b71bf6a8a7,\n            limb2: 0xde62a1da13dfd78,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4e56e6733cce20d9c5b16d96,\n            limb1: 0xc7ef260535fb75b9d3e089f,\n            limb2: 0x292dd4aa636e7729,\n        },\n        r0a1: u288 {\n            limb0: 0x6e7e1038b336f36519c9faaf,\n            limb1: 0x3c66bd609510309485e225c7,\n            limb2: 0x10cacac137411eb,\n        },\n        r1a0: u288 {\n            limb0: 0x4a3e8b96278ac092fe4f3b15,\n            limb1: 0xba47e583e2750b42f93c9631,\n            limb2: 0x125da6bd69495bb9,\n        },\n        r1a1: u288 {\n            limb0: 0xae7a56ab4b959a5f6060d529,\n            limb1: 0xc3c263bfd58c0030c063a48e,\n            limb2: 0x2f4d15f13fae788c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x301e0885c84d273b6d323124,\n            limb1: 0x11fd5c75e269f7a30fa4154f,\n            limb2: 0x19afdcfdcce2fc0d,\n        },\n        r0a1: u288 {\n            limb0: 0x3d13519f934526be815c38b0,\n            limb1: 0xd43735909547da73838874fc,\n            limb2: 0x255d8aca30f4e0f6,\n        },\n        r1a0: u288 {\n            limb0: 0x90a505b76f25a3396e2cea79,\n            limb1: 0x3957a2d0848c54b9079fc114,\n            limb2: 0x1ba0cd3a9fe6d4bb,\n        },\n        r1a1: u288 {\n            limb0: 0xc47930fba77a46ebb1db30a9,\n            limb1: 0x993a1cb166e9d40bebab02b2,\n            limb2: 0x1deb16166d48118b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb8cf2af23a2795446a3a73f1,\n            limb1: 0x13715e2237eeb02ee6666cee,\n            limb2: 0xa85c6edf4e39ba5,\n        },\n        r0a1: u288 {\n            limb0: 0x1f36efdd6931269960bdf4de,\n            limb1: 0xfe9eff4c19216c4ae441fee1,\n            limb2: 0x25db1c938c941000,\n        },\n        r1a0: u288 {\n            limb0: 0xe13bf721634b56a80c6fb0a8,\n            limb1: 0xda0b9ea6704efbd8451cfd41,\n            limb2: 0x279768e0c2762893,\n        },\n        r1a1: u288 {\n            limb0: 0x2dc5403124b8b2766caf51c7,\n            limb1: 0xb9ed0b96060674c35d818388,\n            limb2: 0x6f9a41b549839dd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbd4aa4e5ed3e0c30bf730048,\n            limb1: 0x80e73a7e12b5104f4ec40460,\n            limb2: 0x13db913428ce629c,\n        },\n        r0a1: u288 {\n            limb0: 0xa90e04c07af34a3af7b9ae23,\n            limb1: 0xf939d213913f9c4b23910d94,\n            limb2: 0xff8ab1b303ea87a,\n        },\n        r1a0: u288 {\n            limb0: 0x38c7e37660597198162fa157,\n            limb1: 0xa81284a580d040713c0531af,\n            limb2: 0x110351898a488800,\n        },\n        r1a1: u288 {\n            limb0: 0x2c97092cce4fdaa715b6afde,\n            limb1: 0x1a698f4e2982c281c0c42464,\n            limb2: 0x1bd1c4a7975a22f5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb15bbaec50ff49d30e49f74a,\n            limb1: 0xc90a8c79fb045c5468f14151,\n            limb2: 0x25e47927e92df0e3,\n        },\n        r0a1: u288 {\n            limb0: 0x57f66909d5d40dfb8c7b4d5c,\n            limb1: 0xea5265282e2139c48c1953f2,\n            limb2: 0x2d7f5e6aff2381f6,\n        },\n        r1a0: u288 {\n            limb0: 0x2a2f573b189a3c8832231394,\n            limb1: 0x738abc15844895ffd4733587,\n            limb2: 0x20aa11739c4b9bb4,\n        },\n        r1a1: u288 {\n            limb0: 0x51695ec614f1ff4cce2f65d1,\n            limb1: 0x6765aae6cb895a2406a6dd7e,\n            limb2: 0x1126ee431c522da0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe7f01d9086cd6bea2f41aa99,\n            limb1: 0x704bab1c6c11f635823c0730,\n            limb2: 0x1aa5e3110773f18e,\n        },\n        r0a1: u288 {\n            limb0: 0x85c070793b8763c74570e65c,\n            limb1: 0x2af5c8f295dafb150ffb4b8b,\n            limb2: 0xda734f5191394b9,\n        },\n        r1a0: u288 {\n            limb0: 0x4875f74e54ce34f890a6c795,\n            limb1: 0x9ae6a24d7c63f7240996ac21,\n            limb2: 0x2a7c9cc67d33db65,\n        },\n        r1a1: u288 {\n            limb0: 0xb014ee4eda66723db93d7d9a,\n            limb1: 0x7d3eb5638239c427a57ce71f,\n            limb2: 0x1b0456063dc2a87c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9214fc3209f1518b05fd21c6,\n            limb1: 0x9bc8ce4f56423009710770e8,\n            limb2: 0x32445cc6972799c,\n        },\n        r0a1: u288 {\n            limb0: 0x93ef401ecd9cfae3644d22e6,\n            limb1: 0xce5a741a9847a144cfaf8c96,\n            limb2: 0xf7a814d5726da4a,\n        },\n        r1a0: u288 {\n            limb0: 0xd19264d986f163b133a91c0c,\n            limb1: 0x529dc5ce4b193c0f672c6a32,\n            limb2: 0x2e9a118959353374,\n        },\n        r1a1: u288 {\n            limb0: 0x3d97d6e8f45072cc9e85e412,\n            limb1: 0x4dafecb04c3bb23c374f0486,\n            limb2: 0xa174dd4ac8ee628,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfa6e20eaa5b8acce6161c367,\n            limb1: 0x3d8d035c6953305cfb8065a4,\n            limb2: 0x40bb50e482935b,\n        },\n        r0a1: u288 {\n            limb0: 0x4c506a8e01c5144fa535163b,\n            limb1: 0x61030d954c1196c840ee7931,\n            limb2: 0x2f221fa9c7e3b5ae,\n        },\n        r1a0: u288 {\n            limb0: 0x2613b98211a31e101b009375,\n            limb1: 0xe4cfbf39bf10d39059fcec56,\n            limb2: 0x196add035e14330e,\n        },\n        r1a1: u288 {\n            limb0: 0xcc093368ee2558dabe10c7be,\n            limb1: 0x206a20357ce007c45165fee6,\n            limb2: 0xd4fb39f4b1fde10,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x98d8b0c4adcf27bceb305c2c,\n            limb1: 0x859afa9c7668ed6152d8cba3,\n            limb2: 0x29e7694f46e3a272,\n        },\n        r0a1: u288 {\n            limb0: 0x1d970845365594307ba97556,\n            limb1: 0xd002d93ad793e154afe5b49b,\n            limb2: 0x12ca77d3fb8eee63,\n        },\n        r1a0: u288 {\n            limb0: 0x9f2934faefb8268e20d0e337,\n            limb1: 0xbc4b5e1ec056881319f08766,\n            limb2: 0x2e103461759a9ee4,\n        },\n        r1a1: u288 {\n            limb0: 0x7adc6cb87d6b43000e2466b6,\n            limb1: 0x65e5cefa42b25a7ee8925fa6,\n            limb2: 0x2560115898d7362a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x823969b5ec0f79a94f88d36b,\n            limb1: 0x3512d9e09a8b4a8e1084dc32,\n            limb2: 0x1af1156b9c8d06e6,\n        },\n        r0a1: u288 {\n            limb0: 0xafd7dd0f120256e11800dee8,\n            limb1: 0x3a317cae149063c44cf7fa8c,\n            limb2: 0x2bd8ea8b2474d1e5,\n        },\n        r1a0: u288 {\n            limb0: 0xe1772b865b838d58dd129624,\n            limb1: 0xbe9458968158c433742dbcd0,\n            limb2: 0x22b6d697a5a3b888,\n        },\n        r1a1: u288 {\n            limb0: 0xbff3b00a55f411bbc1dad2fe,\n            limb1: 0x7ae09ac6313e3c00759461ae,\n            limb2: 0x558601ecf31c85,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x64d864643668392c0e357cc4,\n            limb1: 0x4c9bf66853f1b287015ab84c,\n            limb2: 0x2f5f1b92ad7ee4d4,\n        },\n        r0a1: u288 {\n            limb0: 0xdc33c8da5c575eef6987a0e1,\n            limb1: 0x51cc07c7ef28e1b8d934bc32,\n            limb2: 0x2358d94a17ec2a44,\n        },\n        r1a0: u288 {\n            limb0: 0xf659845b829bbba363a2497b,\n            limb1: 0x440f348e4e7bed1fb1eb47b2,\n            limb2: 0x1ad0eaab0fb0bdab,\n        },\n        r1a1: u288 {\n            limb0: 0x1944bb6901a1af6ea9afa6fc,\n            limb1: 0x132319df135dedddf5baae67,\n            limb2: 0x52598294643a4aa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x76fd94c5e6f17fa6741bd7de,\n            limb1: 0xc2e0831024f67d21013e0bdd,\n            limb2: 0x21e2af6a43119665,\n        },\n        r0a1: u288 {\n            limb0: 0xad290eab38c64c0d8b13879b,\n            limb1: 0xdd67f881be32b09d9a6c76a0,\n            limb2: 0x8000712ce0392f2,\n        },\n        r1a0: u288 {\n            limb0: 0xd30a46f4ba2dee3c7ace0a37,\n            limb1: 0x3914314f4ec56ff61e2c29e,\n            limb2: 0x22ae1ba6cd84d822,\n        },\n        r1a1: u288 {\n            limb0: 0x5d888a78f6dfce9e7544f142,\n            limb1: 0x9439156de974d3fb6d6bda6e,\n            limb2: 0x106c8f9a27d41a4f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6092d1d633b2160a27266d5b,\n            limb1: 0x80d00c798b74744e2d6c9897,\n            limb2: 0x6aca1e5b3d6e760,\n        },\n        r0a1: u288 {\n            limb0: 0x3f695b0e7bf0e735a060a1fc,\n            limb1: 0x21c516331ac46f6f1940a79c,\n            limb2: 0x9fb99bd56e3cfd0,\n        },\n        r1a0: u288 {\n            limb0: 0x125cd061734e6d82260bff31,\n            limb1: 0x7b1fb56a17f3832fd3c026f3,\n            limb2: 0xdafb0c1b7a07131,\n        },\n        r1a1: u288 {\n            limb0: 0x449a0a17221fac459caf049a,\n            limb1: 0x4bbd5645024fe09ba86f662d,\n            limb2: 0x295e6b43830d7473,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x138792ff5a46d835c3927fde,\n            limb1: 0x498899eff0ddfb1e2a6a2a63,\n            limb2: 0xfaff0a267eddd92,\n        },\n        r0a1: u288 {\n            limb0: 0xfffeb2ff28064301c583286,\n            limb1: 0x223c9e6d3ae5d55a899db5e2,\n            limb2: 0x1a88e4cac54f8190,\n        },\n        r1a0: u288 {\n            limb0: 0xcfbe06117f1f6dea20f8379f,\n            limb1: 0x6b831cd38c1741b394a2f18d,\n            limb2: 0xd44868b638ab5cd,\n        },\n        r1a1: u288 {\n            limb0: 0x21a8bd3280686ca4d3c4a764,\n            limb1: 0x3b3576220bbc08abcec8478b,\n            limb2: 0x29b73d7c0c8ff4ce,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x92c09e4796207b802168341b,\n            limb1: 0xd2d9d6acffd7829066cc49ce,\n            limb2: 0xc89c2d0a7b2c81e,\n        },\n        r0a1: u288 {\n            limb0: 0x47e3c1cf6cdb6f3efe778c7f,\n            limb1: 0x66b347099b6436794cf062eb,\n            limb2: 0x18b4ccc64ae0a857,\n        },\n        r1a0: u288 {\n            limb0: 0x7d5793606a73b2740c71484a,\n            limb1: 0xa0070135ca2dc571b28e3c9c,\n            limb2: 0x1bc03576e04b94cf,\n        },\n        r1a1: u288 {\n            limb0: 0x1ba85b29875e638c10f16c99,\n            limb1: 0x158f2f2acc3c2300bb9f9225,\n            limb2: 0x42d8a8c36ea97c6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x491a2a2eb92babf14d2c70ed,\n            limb1: 0x88adfa10d27cbf95efc87ca9,\n            limb2: 0x1ea367cb9628819e,\n        },\n        r0a1: u288 {\n            limb0: 0xf832704f9fde600131526e2,\n            limb1: 0x943da98740594bc8573bc424,\n            limb2: 0x225058a1522f4c77,\n        },\n        r1a0: u288 {\n            limb0: 0xf43027c8e85927d41ef51aa6,\n            limb1: 0x6d6d7aa318f97e5043973413,\n            limb2: 0x11a037a0589e5f86,\n        },\n        r1a1: u288 {\n            limb0: 0x45f2d483ce8e645ed19421cb,\n            limb1: 0x6363b56540ef0ea0331819ca,\n            limb2: 0x2b5c9bfcfb64a95f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9440ad13408319cecb07087b,\n            limb1: 0x537afc0c0cfe8ff761c24e08,\n            limb2: 0x48e4ac10081048d,\n        },\n        r0a1: u288 {\n            limb0: 0xa37fb82b03a2c0bb2aa50c4f,\n            limb1: 0xd3797f05c8fb84f6b630dfb,\n            limb2: 0x2dffde2d6c7e43ff,\n        },\n        r1a0: u288 {\n            limb0: 0xc55d2eb1ea953275e780e65b,\n            limb1: 0xe141cf680cab57483c02e4c7,\n            limb2: 0x1b71395ce5ce20ae,\n        },\n        r1a1: u288 {\n            limb0: 0xe4fab521f1212a1d301065de,\n            limb1: 0x4f8d31c78df3dbe4ab721ef2,\n            limb2: 0x2828f21554706a0e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8cefc2f2af2a3082b790784e,\n            limb1: 0x97ac13b37c6fbfc736a3d456,\n            limb2: 0x683b1cdffd60acd,\n        },\n        r0a1: u288 {\n            limb0: 0xa266a8188a8c933dcffe2d02,\n            limb1: 0x18d3934c1838d7bce81b2eeb,\n            limb2: 0x206ac5cdda42377,\n        },\n        r1a0: u288 {\n            limb0: 0x90332652437f6e177dc3b28c,\n            limb1: 0x75bd8199433d607735414ee8,\n            limb2: 0x29d6842d8298cf7e,\n        },\n        r1a1: u288 {\n            limb0: 0xadedf46d8ea11932db0018e1,\n            limb1: 0xbc7239ae9d1453258037befb,\n            limb2: 0x22e7ebdd72c6f7a1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3a7dc5b45b0cd09dd75ff780,\n            limb1: 0x2902bd9bd8ba8605b3662044,\n            limb2: 0x1ec042f89cec2f4a,\n        },\n        r0a1: u288 {\n            limb0: 0x3e484c01e1c71dad604b6e00,\n            limb1: 0x63cd271538443abcbe242bee,\n            limb2: 0x10c38586e25d160e,\n        },\n        r1a0: u288 {\n            limb0: 0xc406f3abf9503a06bdeb2eef,\n            limb1: 0x8653c7da6db9ab8b17639151,\n            limb2: 0xad22e688ec88604,\n        },\n        r1a1: u288 {\n            limb0: 0x50fc42dbc609f56f660d8b86,\n            limb1: 0x56a81c62935f53a8194e5d90,\n            limb2: 0x2b27bb15c58ff0c3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xacc013a37118e98a394f1114,\n            limb1: 0x97e3d97d841f62677ad653b1,\n            limb2: 0xfa27c5f03ef3e74,\n        },\n        r0a1: u288 {\n            limb0: 0x9599de7b6e6a8aeef6b63e52,\n            limb1: 0x73e39f958d986d83148d8c8a,\n            limb2: 0x208d43519f69f381,\n        },\n        r1a0: u288 {\n            limb0: 0x898b0f8615e3cf94474d7196,\n            limb1: 0x82213cada178b34ae97fdb67,\n            limb2: 0x11a8f2b07229c348,\n        },\n        r1a1: u288 {\n            limb0: 0x8a100eb3750e818962602ec3,\n            limb1: 0xdca2571e9fc5588275e810fd,\n            limb2: 0x290c599d240303ec,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x348e15357d9299e582033136,\n            limb1: 0x53578c46b15abb39da35a56e,\n            limb2: 0x1043b711f86bb33f,\n        },\n        r0a1: u288 {\n            limb0: 0x9fa230a629b75217f0518e7c,\n            limb1: 0x77012a4bb8751322a406024d,\n            limb2: 0x121e2d845d972695,\n        },\n        r1a0: u288 {\n            limb0: 0x5600f2d51f21d9dfac35eb10,\n            limb1: 0x6fde61f876fb76611fb86c1a,\n            limb2: 0x2bf4fbaf5bd0d0df,\n        },\n        r1a1: u288 {\n            limb0: 0xd732aa0b6161aaffdae95324,\n            limb1: 0xb3c4f8c3770402d245692464,\n            limb2: 0x2a0f1740a293e6f0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x481b93066804d8e4a43ea2f5,\n            limb1: 0x29399b4d554a5731966efdf4,\n            limb2: 0x100692df233dfccb,\n        },\n        r0a1: u288 {\n            limb0: 0xa03028f9394d39e5aff150c2,\n            limb1: 0x82b1b27285e7d875b1cc49e8,\n            limb2: 0x1aa360e1848acc84,\n        },\n        r1a0: u288 {\n            limb0: 0xc358787d7c823681590988f,\n            limb1: 0xa3e33a227d61efc5734e48e4,\n            limb2: 0x15e7e41317f696d9,\n        },\n        r1a1: u288 {\n            limb0: 0x73141ff9e75e2761d8d99b93,\n            limb1: 0x48b8fbe75ec09c4496c9652f,\n            limb2: 0x1edc83253b7ac568,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa9e2efa41aaa98ab59728940,\n            limb1: 0x163c0425f66ce72daef2f53e,\n            limb2: 0x2feaf1b1770aa7d8,\n        },\n        r0a1: u288 {\n            limb0: 0x3bb7afd3c0a79b6ac2c4c063,\n            limb1: 0xee5cb42e8b2bc999e312e032,\n            limb2: 0x1af2071ae77151c3,\n        },\n        r1a0: u288 {\n            limb0: 0x1cef1c0d8956d7ceb2b162e7,\n            limb1: 0x202b4af9e51edfc81a943ded,\n            limb2: 0xc9e943ffbdcfdcb,\n        },\n        r1a1: u288 {\n            limb0: 0xe18b1b34798b0a18d5ad43dd,\n            limb1: 0x55e8237731941007099af6b8,\n            limb2: 0x1472c0290db54042,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe6100d19eaef8d37a80e60df,\n            limb1: 0x4ef3e1a2b34daa1c2be28701,\n            limb2: 0x92500ae61c29ded,\n        },\n        r0a1: u288 {\n            limb0: 0xcb5fe102a0a2aeb5f2b1d8b5,\n            limb1: 0x48c7bc91c8b114893d8b23cd,\n            limb2: 0x21268b5f3137e05e,\n        },\n        r1a0: u288 {\n            limb0: 0x67b383adbc235c125e89ac73,\n            limb1: 0xf140e37cce399681b4f96b6c,\n            limb2: 0x29da1de8b7c2764b,\n        },\n        r1a1: u288 {\n            limb0: 0x3a20a1e0817f5af4c383af92,\n            limb1: 0xb6447b112ca3c55500553bae,\n            limb2: 0xad54da1adb037ab,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb4c7963e0d1dc082de0725e,\n            limb1: 0x375a7a3d765918de24804223,\n            limb2: 0xf177b77b031596d,\n        },\n        r0a1: u288 {\n            limb0: 0x87a7b9c5f10500b0b40d7a1e,\n            limb1: 0x6f234d1dc7f1394b55858810,\n            limb2: 0x26288146660a3914,\n        },\n        r1a0: u288 {\n            limb0: 0xa6308c89cebe40447abf4a9a,\n            limb1: 0x657f0fdda13b1f8ee314c22,\n            limb2: 0x1701aabc250a9cc7,\n        },\n        r1a1: u288 {\n            limb0: 0x9db9bf660dc77cbe2788a755,\n            limb1: 0xbdf9c1c15a4bd502a119fb98,\n            limb2: 0x14b4de3d26bd66e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x53c49c62ca96007e14435295,\n            limb1: 0x85aeb885e4123ca8d3232fdf,\n            limb2: 0x750017ce108abf3,\n        },\n        r0a1: u288 {\n            limb0: 0xba6bf3e25d370182e4821239,\n            limb1: 0x39de83bf370bd2ba116e8405,\n            limb2: 0x2b8417a72ba6d940,\n        },\n        r1a0: u288 {\n            limb0: 0xa922f50550d349849b14307b,\n            limb1: 0x569766b6feca6143a5ddde9d,\n            limb2: 0x2c3c6765b25a01d,\n        },\n        r1a1: u288 {\n            limb0: 0x6016011bdc3b506563b0f117,\n            limb1: 0xbab4932beab93dde9b5b8a5c,\n            limb2: 0x1bf3f698de0ace60,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6cd6d068630c95ff7923dace,\n            limb1: 0x327c95abb26719a3e4f307d4,\n            limb2: 0x1622ee5d85fd5915,\n        },\n        r0a1: u288 {\n            limb0: 0x3b0cab292557116e4a91297c,\n            limb1: 0x73e3c8e25063487150b2b475,\n            limb2: 0x10b9c1c61e8b6478,\n        },\n        r1a0: u288 {\n            limb0: 0xd5edff0ce6e33bb98c43f4a5,\n            limb1: 0xdefbbd27923dd717a2029ccd,\n            limb2: 0x1dde221b1cae459,\n        },\n        r1a1: u288 {\n            limb0: 0xf582a6716fc11b9594c7cda2,\n            limb1: 0x4b375f530154fbdd63e5feb,\n            limb2: 0xb49455f93935ab,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x54fcd4a24d259b46df23323f,\n            limb1: 0x47e6fdfb9c428d378a40ff4e,\n            limb2: 0x1df34ff52254dff6,\n        },\n        r0a1: u288 {\n            limb0: 0xe0c10735495ed8f5cd2e4be0,\n            limb1: 0xc86bc1fb1f401ef4df3b1cd0,\n            limb2: 0x28c43896b60b6285,\n        },\n        r1a0: u288 {\n            limb0: 0x1c96043ad27370916cb891b4,\n            limb1: 0x87329ba866d1b2e138d8c107,\n            limb2: 0x2969b2c3e19a125a,\n        },\n        r1a1: u288 {\n            limb0: 0x439d38ff3bfb073cf2b5661f,\n            limb1: 0x40fd99e28d8fb2f2ff6a20e7,\n            limb2: 0x182bde6af8c937b7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb9f05ffda3ee208f990ff3a8,\n            limb1: 0x6201d08440b28ea672b9ea93,\n            limb2: 0x1ed60e5a5e778b42,\n        },\n        r0a1: u288 {\n            limb0: 0x8e8468b937854c9c00582d36,\n            limb1: 0x7888fa8b2850a0c555adb743,\n            limb2: 0xd1342bd01402f29,\n        },\n        r1a0: u288 {\n            limb0: 0xf5c4c66a974d45ec754b3873,\n            limb1: 0x34322544ed59f01c835dd28b,\n            limb2: 0x10fe4487a871a419,\n        },\n        r1a1: u288 {\n            limb0: 0xedf4af2df7c13d6340069716,\n            limb1: 0x8592eea593ece446e8b2c83b,\n            limb2: 0x12f9280ce8248724,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2ddf82dac5876ef85cbd9209,\n            limb1: 0x589fcd0afc56475897b6712f,\n            limb2: 0xbd4b3348385e23b,\n        },\n        r0a1: u288 {\n            limb0: 0x1c3aa02855ddee9cd40d4eae,\n            limb1: 0xf6ed3e19ac13cbd2012f796a,\n            limb2: 0x1dc1b58676a8f698,\n        },\n        r1a0: u288 {\n            limb0: 0xc4830930ba2848c2f39f43da,\n            limb1: 0xa0fc7164985c553cef876d41,\n            limb2: 0x18fce7cada9deef8,\n        },\n        r1a1: u288 {\n            limb0: 0xedb28e73d7e312b0bfe1fa45,\n            limb1: 0xed4ae4b37915b6888b40ee88,\n            limb2: 0x5cf09de42e4f82a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe67f72c6d45f1bb04403139f,\n            limb1: 0x9233e2a95d3f3c3ff2f7e5b8,\n            limb2: 0x1f931e8e4343b028,\n        },\n        r0a1: u288 {\n            limb0: 0x20ef53907af71803ce3ca5ca,\n            limb1: 0xd99b6637ee9c73150b503ea4,\n            limb2: 0x1c9759def8a98ea8,\n        },\n        r1a0: u288 {\n            limb0: 0xa0a3b24c9089d224822fad53,\n            limb1: 0xdfa2081342a7a895062f3e50,\n            limb2: 0x185e8cf6b3e494e6,\n        },\n        r1a1: u288 {\n            limb0: 0x8752a12394b29d0ba799e476,\n            limb1: 0x1493421da067a42e7f3d0f8f,\n            limb2: 0x67e7fa3e3035edf,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x125ce6d868f59b6805a98a6e,\n            limb1: 0x9229c7ee5700f2429eadaecb,\n            limb2: 0x292c838c4deb5f8d,\n        },\n        r0a1: u288 {\n            limb0: 0x5325a1514f8ee43d2ed16153,\n            limb1: 0x63c33b5123f4ecb9e010da3c,\n            limb2: 0x1e0f5d09063cd187,\n        },\n        r1a0: u288 {\n            limb0: 0x605cc50180814223b30419fe,\n            limb1: 0xb08ee4b45c98923764c3c996,\n            limb2: 0x2e496c94d4ce61d7,\n        },\n        r1a1: u288 {\n            limb0: 0x7f916e4957b0d0a9c5aa8e89,\n            limb1: 0x1b4099fb9348cb6604b6644d,\n            limb2: 0x2fa7202e6e45ebd0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6d6138c95464e5e774ae7ba0,\n            limb1: 0xe6ca73a5498e4ccd4bb68fc7,\n            limb2: 0x15bf8aa8ed1beff6,\n        },\n        r0a1: u288 {\n            limb0: 0xabd7c55a134ed405b4966d3c,\n            limb1: 0xe69dd725ccc4f9dd537fe558,\n            limb2: 0x2df4a03e2588a8f1,\n        },\n        r1a0: u288 {\n            limb0: 0x7cf42890de0355ffc2480d46,\n            limb1: 0xe33c2ad9627bcb4b028c2358,\n            limb2: 0x2a18767b40de20bd,\n        },\n        r1a1: u288 {\n            limb0: 0x79737d4a87fab560f3d811c6,\n            limb1: 0xa88fee5629b91721f2ccdcf7,\n            limb2: 0x2b51c831d3404d5e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x16a889bc98dbba30d0e85f7c,\n            limb1: 0xfcada96c42f00ced918d942e,\n            limb2: 0x2cc9b3197de097a5,\n        },\n        r0a1: u288 {\n            limb0: 0x66b312469ce97517a7e5f585,\n            limb1: 0x320485962e1cd1ce5609b3ad,\n            limb2: 0x2f5ed56d2b372567,\n        },\n        r1a0: u288 {\n            limb0: 0x50a883556bfbb1f8d5f9d8a3,\n            limb1: 0x4aa6753d1fea97e3b8aac1f1,\n            limb2: 0x301980e220bb49ed,\n        },\n        r1a1: u288 {\n            limb0: 0xe7614ace25bd3a3830b64ecf,\n            limb1: 0x38dedb346af32c21784b968c,\n            limb2: 0x101dfcee3c535929,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9812f6145cf7e949fa207f20,\n            limb1: 0x4061c36b08d5bcd408b14f19,\n            limb2: 0x8332e08b2eb51ed,\n        },\n        r0a1: u288 {\n            limb0: 0xa4a7ae8f65ba180c523cb33,\n            limb1: 0xb71fabbdc78b1128712d32a5,\n            limb2: 0x2acd1052fd0fefa7,\n        },\n        r1a0: u288 {\n            limb0: 0x6ea5598e221f25bf27efc618,\n            limb1: 0xa2c2521a6dd8f306f86d6db7,\n            limb2: 0x13af144288655944,\n        },\n        r1a1: u288 {\n            limb0: 0xea469c4b390716a6810fff5d,\n            limb1: 0xf8052694d0fdd3f40b596c20,\n            limb2: 0x24d0ea6c86e48c5c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2e39be614d904bafea58a8cd,\n            limb1: 0xf53f0a6a20a1f1783b0ea2d0,\n            limb2: 0x99c451b7bb726d7,\n        },\n        r0a1: u288 {\n            limb0: 0x28ec54a4ca8da838800c573d,\n            limb1: 0xb78365fa47b5e192307b7b87,\n            limb2: 0x2df87aa88e012fec,\n        },\n        r1a0: u288 {\n            limb0: 0xfb7022881c6a6fdfb18de4aa,\n            limb1: 0xb9bd30f0e93c5b93ad333bab,\n            limb2: 0x1dd20cbccdeb9924,\n        },\n        r1a1: u288 {\n            limb0: 0x16d8dfdf790a6be16a0e55ba,\n            limb1: 0x90ab884395509b9a264472d4,\n            limb2: 0xeaec571657b6e9d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdf8d520c2fd45b16da910ca7,\n            limb1: 0x2023ab59c06742c107d21389,\n            limb2: 0x474f8d201c2003a,\n        },\n        r0a1: u288 {\n            limb0: 0xc46ba70245e0d604d975ec09,\n            limb1: 0x921be51a6779f8abc213a42b,\n            limb2: 0x737865d13506920,\n        },\n        r1a0: u288 {\n            limb0: 0xebde3248ae4a49e4ca67667c,\n            limb1: 0x55021936a806c18771a5b497,\n            limb2: 0xeddf62dee5cd01d,\n        },\n        r1a1: u288 {\n            limb0: 0x840eb64075057d76ec783626,\n            limb1: 0xd09ec083f029b05d8cf747e8,\n            limb2: 0x29923f4182ebbd77,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x797d2ef5c1d08447d0723c47,\n            limb1: 0x5e3d0a3367a49356be559196,\n            limb2: 0x1ac7d70481f3e230,\n        },\n        r0a1: u288 {\n            limb0: 0xec5fd0d82c9efcda61aec42a,\n            limb1: 0xd18c0e943f37d7060aebd361,\n            limb2: 0x11985d67f47debff,\n        },\n        r1a0: u288 {\n            limb0: 0x71ec5d0ede447fc2d2b8d30a,\n            limb1: 0x6d732f49bca172dde108d14e,\n            limb2: 0xa187b54b3aa09fe,\n        },\n        r1a1: u288 {\n            limb0: 0x366c39d4f024f7ffcc1f190d,\n            limb1: 0xb25354b8c4a9a95e3c632091,\n            limb2: 0x94ede742a6d279b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xce78fc6505db036c10fac771,\n            limb1: 0x61f8c0bc7f60ad6415d5e419,\n            limb2: 0x59009c5cf9ea663,\n        },\n        r0a1: u288 {\n            limb0: 0xb3b3f697fc34d64ba053b914,\n            limb1: 0x317af5815ce5bfffc5a6bc97,\n            limb2: 0x23f97fee4deda847,\n        },\n        r1a0: u288 {\n            limb0: 0xf559e09cf7a02674ac2fa642,\n            limb1: 0x4fa7548b79cdd054e203689c,\n            limb2: 0x2173b379d546fb47,\n        },\n        r1a1: u288 {\n            limb0: 0x758feb5b51caccff9da0f78f,\n            limb1: 0xd7f37a1008233b74c4894f55,\n            limb2: 0x917c640b4b9627e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdfce680eeda9dab9f624300d,\n            limb1: 0x3332e1bcaad5d683961ea721,\n            limb2: 0x428540bb4a391d0,\n        },\n        r0a1: u288 {\n            limb0: 0x3f654faa3518ed9595db752b,\n            limb1: 0xebecb7527a9c9bc0e35974f2,\n            limb2: 0x14bcaa1d4c941ce0,\n        },\n        r1a0: u288 {\n            limb0: 0x332ed31f8babcb1fb1902637,\n            limb1: 0xa3d0543357fc3e835fe62d46,\n            limb2: 0x1ba5e26829d040d8,\n        },\n        r1a1: u288 {\n            limb0: 0x26ad9a6548dbeda3a0cb37ac,\n            limb1: 0xe2ddec0f5eb83e84b3af4a3e,\n            limb2: 0x2f95fb7eb636c829,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72548e0d946b796842cfecd8,\n            limb1: 0x78b54b355e3c26476b0fab82,\n            limb2: 0x2dc9f32c90b6ba31,\n        },\n        r0a1: u288 {\n            limb0: 0xa943be83a6fc90414320753b,\n            limb1: 0xd708fde97241095833ce5a08,\n            limb2: 0x142111e6a73d2e82,\n        },\n        r1a0: u288 {\n            limb0: 0xc79e8d5465ec5f28781e30a2,\n            limb1: 0x697fb9430b9ad050ced6cce,\n            limb2: 0x1a9d647149842c53,\n        },\n        r1a1: u288 {\n            limb0: 0x9bab496952559362586725cd,\n            limb1: 0xbe78e5a416d9665be64806de,\n            limb2: 0x147b550afb4b8b84,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xde3f0cc8eb9d8bc0524ffa31,\n            limb1: 0xa29420171bca522f8e0d0ab4,\n            limb2: 0x1c527b5683d4814d,\n        },\n        r0a1: u288 {\n            limb0: 0xb831225213716dec94efc1de,\n            limb1: 0x970dd107965ba3923ab9d17a,\n            limb2: 0x2bfb03ab5ab6d7e9,\n        },\n        r1a0: u288 {\n            limb0: 0x41fa2c98128b2070cbf6c33d,\n            limb1: 0xde4def6e8343cd45841c0890,\n            limb2: 0x12f1cede76e2b8d7,\n        },\n        r1a1: u288 {\n            limb0: 0x2aadf4029e19b185f59187a,\n            limb1: 0xb4e7dd0e3b5c1a62be0f0e48,\n            limb2: 0x2029ea04d9e4c426,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1422e11013fe6cdd7f843391,\n            limb1: 0xfb96092ab69fc530e27d8d8e,\n            limb2: 0xe39e04564fedd0,\n        },\n        r0a1: u288 {\n            limb0: 0xbd4e81e3b4db192e11192788,\n            limb1: 0x805257d3c2bdbc344a15ce0d,\n            limb2: 0x10ddd4f47445106b,\n        },\n        r1a0: u288 {\n            limb0: 0x87ab7f750b693ec75bce04e1,\n            limb1: 0x128ba38ebed26d74d26e4d69,\n            limb2: 0x2f1d22a64c983ab8,\n        },\n        r1a1: u288 {\n            limb0: 0x74207c17f5c8335183649f77,\n            limb1: 0x7144cd3520ac2e1be3204133,\n            limb2: 0xb38d0645ab3499d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5daa65d81efa0ef1b3b5406,\n            limb1: 0x759ff07b1035fc39169a31ee,\n            limb2: 0x101ca4f03f0629e,\n        },\n        r0a1: u288 {\n            limb0: 0x10cdf0ef882fb24b6a44bbd3,\n            limb1: 0x580b99e84dc07e055656849b,\n            limb2: 0x253201b38848e657,\n        },\n        r1a0: u288 {\n            limb0: 0x8fbd353430e804cbac89ec28,\n            limb1: 0xdaee431fd72f78e22a236faa,\n            limb2: 0x48b73245c4dad79,\n        },\n        r1a1: u288 {\n            limb0: 0xd98cc2ed22a85b0f8c63206e,\n            limb1: 0xd2aec0400ab5850c7f0fa8cf,\n            limb2: 0x649735015bf42af,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x49173a889c697b0ab07f35bc,\n            limb1: 0xdcffb65f4b4c21ced6b623af,\n            limb2: 0x1366d12ee6022f7b,\n        },\n        r0a1: u288 {\n            limb0: 0x285fdce362f7a79b89c49b5c,\n            limb1: 0xae9358c8eaf26e2fed7353f5,\n            limb2: 0x21c91fefaf522b5f,\n        },\n        r1a0: u288 {\n            limb0: 0x748798f96436e3b18c64964a,\n            limb1: 0xfc3bb221103d3966d0510599,\n            limb2: 0x167859ae2ebc5e27,\n        },\n        r1a1: u288 {\n            limb0: 0xe3b55b05bb30e23fa7eba05b,\n            limb1: 0xa5fc8b7f7bc6abe91c90ddd5,\n            limb2: 0xe0da83c6cdebb5a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x30a4abff5957209783681bfb,\n            limb1: 0x82d868d5ca421e4f1a0daf79,\n            limb2: 0x1ba96ef98093d510,\n        },\n        r0a1: u288 {\n            limb0: 0xd9132c7f206a6c036a39e432,\n            limb1: 0x8a2dfb94aba29a87046110b8,\n            limb2: 0x1fad2fd5e5e37395,\n        },\n        r1a0: u288 {\n            limb0: 0x76b136dc82b82e411b2c44f6,\n            limb1: 0xe405f12052823a54abb9ea95,\n            limb2: 0xf125ba508c26ddc,\n        },\n        r1a1: u288 {\n            limb0: 0x1bae07f5f0cc48e5f7aac169,\n            limb1: 0x47d1288d741496a960e1a979,\n            limb2: 0xa0911f6cc5eb84e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9f79430d5ef315d742ba7cc2,\n            limb1: 0x20aacc886043783d85b20292,\n            limb2: 0x1323cd0f26d8101a,\n        },\n        r0a1: u288 {\n            limb0: 0x10b2ac6faa0f2c6d21dd1a46,\n            limb1: 0x692a71ed6ead0995c1dd5f06,\n            limb2: 0x38e5099a87e0acb,\n        },\n        r1a0: u288 {\n            limb0: 0x47ae74d8002447773c1ed5c6,\n            limb1: 0xbeefb67ce6653bc31410cc77,\n            limb2: 0x38bcbf510e04693,\n        },\n        r1a1: u288 {\n            limb0: 0x87f7dfe2a9704d878a43c43a,\n            limb1: 0x388417c8c9596caee4b8f3c8,\n            limb2: 0x2231862dd6ea5377,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8824ae4e52f07175b229f86c,\n            limb1: 0xea266c73c6740dc7206d703e,\n            limb2: 0xa0bcd21da42425d,\n        },\n        r0a1: u288 {\n            limb0: 0x91c8d9f501c8c2411d65a5b2,\n            limb1: 0x6f693a3cbab19d3ac5acf696,\n            limb2: 0x2cb77ffe6050fd13,\n        },\n        r1a0: u288 {\n            limb0: 0x127d86621c661371e92e5fd,\n            limb1: 0x5a334ed75d208520e997f2e3,\n            limb2: 0x3e78ee48b36d52b,\n        },\n        r1a1: u288 {\n            limb0: 0x640d7cc8a8916f3987fcc33c,\n            limb1: 0x82738853adee48da240f6b1c,\n            limb2: 0x1a0013b7fe68edfa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2e7b3a5a35456f42e87968e6,\n            limb1: 0xb4303f5093c3a460674a2fcd,\n            limb2: 0x2b5331f03b8fa15f,\n        },\n        r0a1: u288 {\n            limb0: 0x7cea371d64d8bd0fc5b9427e,\n            limb1: 0x76208e15fc175e352c274fbe,\n            limb2: 0x5ceb46647d41234,\n        },\n        r1a0: u288 {\n            limb0: 0x6cdac06bfcf041a30435a560,\n            limb1: 0x15a7ab7ed1df6d7ed12616a6,\n            limb2: 0x2520b0f462ad4724,\n        },\n        r1a1: u288 {\n            limb0: 0xe8b65c5fff04e6a19310802f,\n            limb1: 0xc96324a563d5dab3cd304c64,\n            limb2: 0x230de25606159b1e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x65202a838e48a9d934e11db8,\n            limb1: 0xeb46c664339ef677558bbb71,\n            limb2: 0x132ac06128a0a57b,\n        },\n        r0a1: u288 {\n            limb0: 0xbc21baf183836fa8dc9de81c,\n            limb1: 0x806b66e601e4ff52a20e891a,\n            limb2: 0x12e535eb6ae922c1,\n        },\n        r1a0: u288 {\n            limb0: 0xc0b103b1723019de05b304a3,\n            limb1: 0xff8f7760a660a16df500b596,\n            limb2: 0x8db75dc6535f297,\n        },\n        r1a1: u288 {\n            limb0: 0x3a686dcde09afac7da57832c,\n            limb1: 0xa5947df796243b62fa4da442,\n            limb2: 0x259924e4a773bef0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb2236e5462d1e11842039bb5,\n            limb1: 0x8d746dd0bb8bb2a455d505c1,\n            limb2: 0x2fd3f4a905e027ce,\n        },\n        r0a1: u288 {\n            limb0: 0x3d6d9836d71ddf8e3b741b09,\n            limb1: 0x443f16e368feb4cb20a5a1ab,\n            limb2: 0xb5f19dda13bdfad,\n        },\n        r1a0: u288 {\n            limb0: 0x4e5612c2b64a1045a590a938,\n            limb1: 0xbca215d075ce5769db2a29d7,\n            limb2: 0x161e651ebdfb5065,\n        },\n        r1a1: u288 {\n            limb0: 0xc02a55b6685351f24e4bf9c7,\n            limb1: 0x4134240119050f22bc4991c8,\n            limb2: 0x300bd9f8d76bbc11,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe9296a3a3aed4c4143d2e0ba,\n            limb1: 0x7de973514b499b2da739b3e6,\n            limb2: 0x1b4b807986fcdee0,\n        },\n        r0a1: u288 {\n            limb0: 0xb9295fecce961afe0c5e6dad,\n            limb1: 0xc4e30c322bcae6d526c4de95,\n            limb2: 0x1fee592f513ed6b2,\n        },\n        r1a0: u288 {\n            limb0: 0x7245f5e5e803d0d448fafe21,\n            limb1: 0xcbdc032ecb3b7a63899c53d0,\n            limb2: 0x1fde9ffc17accfc3,\n        },\n        r1a1: u288 {\n            limb0: 0x8edcc1b2fdd35c87a7814a87,\n            limb1: 0x99d54b5c2fe171c49aa9cb08,\n            limb2: 0x130ef740e416a6fe,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x38f941f3820c4025d48597c4,\n            limb1: 0x4270c36c42111e8a83bed2ed,\n            limb2: 0x2d0d91a20b75cbb9,\n        },\n        r0a1: u288 {\n            limb0: 0x5ac829defc8a29c4e18ec184,\n            limb1: 0x3ad0a15a0dd4df948ef5ff02,\n            limb2: 0xf618f631c37e868,\n        },\n        r1a0: u288 {\n            limb0: 0xf96e4555f7a83c01c2b1d33f,\n            limb1: 0x74ee4e7ee57979aed686387d,\n            limb2: 0x1c3d7a9c3d45957f,\n        },\n        r1a1: u288 {\n            limb0: 0x210a733628cff21f964acf38,\n            limb1: 0x58addf725f511f5c0f3c4c48,\n            limb2: 0x25c47d2540c2db11,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x40675e9847f925e0cd58ff84,\n            limb1: 0x19a957ff534718c419e1b3a6,\n            limb2: 0xbb2e95d559fbe61,\n        },\n        r0a1: u288 {\n            limb0: 0x70bd9ffbe4ec1ca028fc7d77,\n            limb1: 0x12b76b14785c6e62da580b73,\n            limb2: 0x15b1b31fd06f755f,\n        },\n        r1a0: u288 {\n            limb0: 0x92dd2c2444d613dfaa53a1e3,\n            limb1: 0xec043691d9b8376ef4c32dbb,\n            limb2: 0x1804f2db8a7b3a55,\n        },\n        r1a1: u288 {\n            limb0: 0xe8ad6e24b323fdb6cc8189a9,\n            limb1: 0x501fc22cd9d6c75bfcfe658e,\n            limb2: 0x4669f457c82b8e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x537ecf0916b38aeea21d4e47,\n            limb1: 0x181a00de27ba4be1b380d6c8,\n            limb2: 0x8c2fe2799316543,\n        },\n        r0a1: u288 {\n            limb0: 0xe68fff5ee73364fff3fe403b,\n            limb1: 0x7b8685c8a725ae79cfac8f99,\n            limb2: 0x7b4be349766aba4,\n        },\n        r1a0: u288 {\n            limb0: 0xdf7c93c0095545ad5e5361ea,\n            limb1: 0xce316c76191f1e7cd7d03f3,\n            limb2: 0x22ea21f18ddec947,\n        },\n        r1a1: u288 {\n            limb0: 0xa19620b4c32db68cc1c2ef0c,\n            limb1: 0xffa1e4be3bed5faba2ccbbf4,\n            limb2: 0x16fc78a64c45f518,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2b6af476f520b4bf804415bc,\n            limb1: 0xd949ee7f9e8874698b090fca,\n            limb2: 0x34db5e5ec2180cf,\n        },\n        r0a1: u288 {\n            limb0: 0x3e06a324f038ac8abcfb28d7,\n            limb1: 0xc2e6375b7a83c0a0145f8942,\n            limb2: 0x2247e79161483763,\n        },\n        r1a0: u288 {\n            limb0: 0x708773d8ae3a13918382fb9d,\n            limb1: 0xaf83f409556e32aa85ae92bf,\n            limb2: 0x9af0a924ae43ba,\n        },\n        r1a1: u288 {\n            limb0: 0xa6fded212ff5b2ce79755af7,\n            limb1: 0x55a2adfb2699ef5de6581b21,\n            limb2: 0x2476e83cfe8daa5c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9ab1f3d5a481c50cff61b4ab,\n            limb1: 0x11f4705a4954e6a036be2ad2,\n            limb2: 0x308f243a8a83264,\n        },\n        r0a1: u288 {\n            limb0: 0x5f19b29c09416b2fd501f695,\n            limb1: 0xd0a5c0a568ca5e38f82b2f7a,\n            limb2: 0x8abaf41ba2b92f5,\n        },\n        r1a0: u288 {\n            limb0: 0x6cc5a6aa31c75bfb717c7828,\n            limb1: 0x96fe9ee8789208c41d57d3b8,\n            limb2: 0x1ff348bb7825845a,\n        },\n        r1a1: u288 {\n            limb0: 0x23e6063e1cca25fa4a6e992e,\n            limb1: 0xe94e827315d1667557cbe7de,\n            limb2: 0x2cc27fe4c068e1df,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5de7a643e301caa63b685021,\n            limb1: 0x933a277a93f708227c90f768,\n            limb2: 0x426809a902d5047,\n        },\n        r0a1: u288 {\n            limb0: 0xbb25fb66cb4bf4c7ec50bdbd,\n            limb1: 0x52a75a0facd2b7bf0ea93bec,\n            limb2: 0x1f265ce4dbe1a42b,\n        },\n        r1a0: u288 {\n            limb0: 0xc5717cea7518c3550b4d5f4,\n            limb1: 0xc95394cb07fdfc22e63d990a,\n            limb2: 0x2b4bcc47347e8eb5,\n        },\n        r1a1: u288 {\n            limb0: 0xc5a6f1284ee2bdd4922c2508,\n            limb1: 0xcd55e1d8ff43e6dd59224505,\n            limb2: 0x2c376da2c4c11de5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1c4759bcf7c607fe3f839d4d,\n            limb1: 0xea91f311da73327e2ed40785,\n            limb2: 0x2017052c72360f42,\n        },\n        r0a1: u288 {\n            limb0: 0x38cf8a4368c0709980199fc3,\n            limb1: 0xfc9047885996c19e84d7d4ea,\n            limb2: 0x1795549eb0b97783,\n        },\n        r1a0: u288 {\n            limb0: 0xb70f7ecfbec0eaf46845e8cc,\n            limb1: 0x9ddf274c2a9f89ea3bc4d66f,\n            limb2: 0xcc6f106abfcf377,\n        },\n        r1a1: u288 {\n            limb0: 0xf6ff11ce29186237468c2698,\n            limb1: 0x5c629ad27bb61e4826bb1313,\n            limb2: 0x2014c6623f1fb55e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc403ea5ad65aadd602c8c76f,\n            limb1: 0x7a8d2727cd7fa40d97615b39,\n            limb2: 0x14bd9b9bc6c2c1c1,\n        },\n        r0a1: u288 {\n            limb0: 0xcd28af7919b01761c69bd246,\n            limb1: 0x8a1a211a81094740e2cc984e,\n            limb2: 0x2766e09571dc194c,\n        },\n        r1a0: u288 {\n            limb0: 0xa24dbe5f1fb539a5d9d39db7,\n            limb1: 0xd7eef78019e82d7e1f77d2f5,\n            limb2: 0x6d7b6e70105c87d,\n        },\n        r1a1: u288 {\n            limb0: 0x30836b87e6e8553c665ffbe0,\n            limb1: 0xb0474bb94febd802f9049ad0,\n            limb2: 0x2774e72d0844eea4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc648054e4b6134bbfd68487f,\n            limb1: 0xdf0506dad3f3d098c13a6386,\n            limb2: 0x26bebeb6f46c2e8c,\n        },\n        r0a1: u288 {\n            limb0: 0x9d0cdb28a94204776c6e6ba6,\n            limb1: 0x303f02dfe619752b1607951d,\n            limb2: 0x1127d8b17ef2c064,\n        },\n        r1a0: u288 {\n            limb0: 0xe34ca1188b8db4e4694a696c,\n            limb1: 0x243553602481d9b88ca1211,\n            limb2: 0x1f8ef034831d0132,\n        },\n        r1a1: u288 {\n            limb0: 0xe3a5dfb1785690dad89ad10c,\n            limb1: 0xd690b583ace24ba033dd23e0,\n            limb2: 0x405d0709e110c03,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3b5aa24fe300f5bef5aefca,\n            limb1: 0x5d5566dc41ca40c4af2bf978,\n            limb2: 0x39a42540cb68ab8,\n        },\n        r0a1: u288 {\n            limb0: 0xe21ea63fac2d99bf899d8353,\n            limb1: 0xecdf87c89dafc1f9be69379b,\n            limb2: 0x1c75e3d0966038ad,\n        },\n        r1a0: u288 {\n            limb0: 0x7c9f991de50f505a8dc707e7,\n            limb1: 0x259d423172d9927ffb0e98d1,\n            limb2: 0x15fb83693066d1ff,\n        },\n        r1a1: u288 {\n            limb0: 0x72c144b5e7d364d572576db6,\n            limb1: 0x5d75c50c43614aea3e81a99b,\n            limb2: 0x1ef4651860019554,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72cc2cef2785ce4ff4e9b7af,\n            limb1: 0x60ed5b9c207d7f31fb6234ab,\n            limb2: 0x1bb17a4bc7b643ed,\n        },\n        r0a1: u288 {\n            limb0: 0x9424eb15b502cde7927c7530,\n            limb1: 0xa0e33edbbaa9de8e9c206059,\n            limb2: 0x2b9a3a63bbf4af99,\n        },\n        r1a0: u288 {\n            limb0: 0x423811cb6386e606cf274a3c,\n            limb1: 0x8adcc0e471ecfe526f56dc39,\n            limb2: 0x9169a8660d14368,\n        },\n        r1a1: u288 {\n            limb0: 0xf616c863890c3c8e33127931,\n            limb1: 0xcc9414078a6da6989dae6b91,\n            limb2: 0x594d6a7e6b34ab2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4617750de3208c0a42bf7c07,\n            limb1: 0x7e2d94e31538522d38df8b23,\n            limb2: 0x23954455da7aef56,\n        },\n        r0a1: u288 {\n            limb0: 0x6fef0ba4bbf6577133bdc9ae,\n            limb1: 0xcab064e22aaf2ceec03f1b77,\n            limb2: 0x274369683ff67155,\n        },\n        r1a0: u288 {\n            limb0: 0x5dce7b13d41ff1b90727094f,\n            limb1: 0x426ef23f29c4df03dc8edf8,\n            limb2: 0x313b4cdbf3d9c5e,\n        },\n        r1a1: u288 {\n            limb0: 0x62c5ac5fd0d7b3ef591e828,\n            limb1: 0x650f8fc6b0fe55eb28d0fca8,\n            limb2: 0xf5bb0abe931a208,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf2d619ae78049bf9141c35cf,\n            limb1: 0x717f8b10d469a1ee2d91f191,\n            limb2: 0x2c72c82fa8afe345,\n        },\n        r0a1: u288 {\n            limb0: 0xb89321223b82a2dc793c0185,\n            limb1: 0x71506a0cf4adb8e51bb7b759,\n            limb2: 0x2c13b92a98651492,\n        },\n        r1a0: u288 {\n            limb0: 0x4947ef2c89276f77f9d20942,\n            limb1: 0xb454d68685ab6b6976e71ec5,\n            limb2: 0x19a938d0e78a3593,\n        },\n        r1a1: u288 {\n            limb0: 0xbe883eb119609b489c01c905,\n            limb1: 0xaa06779922047f52feac5ce6,\n            limb2: 0x76977a3015dc164,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x43a96a588005043a46aadf2c,\n            limb1: 0xa37b89d8a1784582f0c52126,\n            limb2: 0x22e9ef3f5d4b2297,\n        },\n        r0a1: u288 {\n            limb0: 0x8c6f6d8474cf6e5a58468a31,\n            limb1: 0xeb1ce6ac75930ef1c79b07e5,\n            limb2: 0xf49839a756c7230,\n        },\n        r1a0: u288 {\n            limb0: 0x82b84693a656c8e8c1f962fd,\n            limb1: 0x2c1c8918ae80282208b6b23d,\n            limb2: 0x14d3504b5c8d428f,\n        },\n        r1a1: u288 {\n            limb0: 0x60ef4f4324d5619b60a3bb84,\n            limb1: 0x6d3090caefeedbc33638c77a,\n            limb2: 0x159264c370c89fec,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa3343aa671fa957f64383174,\n            limb1: 0x5d0fbca92791fb10ca8bfba7,\n            limb2: 0x114f2c6ae3a67df6,\n        },\n        r0a1: u288 {\n            limb0: 0x50f6b86be16e52076b114eac,\n            limb1: 0x780e63533112887af8e1b20a,\n            limb2: 0x63e07909f8e5150,\n        },\n        r1a0: u288 {\n            limb0: 0xf4d68bdb295f81fb688b56c9,\n            limb1: 0xabc9867b1aae2bca05251e19,\n            limb2: 0x1a4d8e8bbc5dc905,\n        },\n        r1a1: u288 {\n            limb0: 0x1072bd332617ade1aa5f283e,\n            limb1: 0x50dc088ed02b4ee5c8114042,\n            limb2: 0x92f0fffce502d7c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf21ea2700d86757c9edc60fc,\n            limb1: 0x4ed3a4f31b13fbb9fdabfe54,\n            limb2: 0xefdc83e2cd29ae1,\n        },\n        r0a1: u288 {\n            limb0: 0x36771d39b743a658ed812080,\n            limb1: 0x506453f18d56ef30476706cd,\n            limb2: 0x2658fa02d8abf7ce,\n        },\n        r1a0: u288 {\n            limb0: 0x4aad4f76dd2af32ff8a6f388,\n            limb1: 0x6aebd448524150ae6bb57548,\n            limb2: 0x2702b8c1fb9a5bfb,\n        },\n        r1a1: u288 {\n            limb0: 0xe1462da76f807e5e73062316,\n            limb1: 0x244b002de9ef9e9d65b40718,\n            limb2: 0x2672d0c637a3cc19,\n        },\n    },\n];\n"
  },
  {
    "path": "src/contracts/mutator_set/src/zk_verifier/honk_verifier_contract.cairo",
    "content": "use super::honk_verifier_circuits::{\n    is_on_curve_excluding_infinity_bn254, run_GRUMPKIN_ZKHONK_PREP_MSM_SCALARS_SIZE_17_circuit,\n    run_GRUMPKIN_ZK_HONK_EVALS_CONS_DONE_SIZE_17_circuit,\n    run_GRUMPKIN_ZK_HONK_EVALS_CONS_INIT_SIZE_17_circuit,\n    run_GRUMPKIN_ZK_HONK_EVALS_CONS_LOOP_SIZE_17_circuit,\n    run_GRUMPKIN_ZK_HONK_SUMCHECK_SIZE_17_PUB_19_circuit,\n};\nuse super::honk_verifier_constants::{precomputed_lines, vk};\n\n#[starknet::interface]\npub trait IUltraKeccakZKHonkVerifier<TContractState> {\n    fn verify_ultra_keccak_zk_honk_proof(\n        self: @TContractState, full_proof_with_hints: Span<felt252>,\n    ) -> Result<Span<u256>, felt252>;\n}\n\n#[starknet::contract]\nmod UltraKeccakZKHonkVerifier {\n    use core::num::traits::Zero;\n    use garaga::apps::noir::zk_honk_transcript::{\n        KeccakHasherState, Point256IntoCircuitPoint, ZKHonkTranscriptTrait,\n        ZK_BATCHED_RELATION_PARTIAL_LENGTH,\n    };\n    use garaga::apps::noir::{G2_POINT_KZG_1, G2_POINT_KZG_2, ZKHonkProof};\n    use garaga::core::circuit::{U32IntoU384, U64IntoU384, u256_to_u384, u288IntoCircuitInputValue};\n    use garaga::definitions::{\n        BN254, G1G2Pair, G1Point, get_BN254_modulus, get_GRUMPKIN_modulus, get_eigenvalue,\n        get_min_one_order, get_nG_glv_fake_glv, get_third_root_of_unity, u384,\n    };\n    use garaga::ec_ops::{G1PointTrait, GlvFakeGlvHint, _ec_safe_add, _scalar_mul_glv_and_fake_glv};\n    use garaga::pairing_check::{MPCheckHintBN254, multi_pairing_check_bn254_2P_2F};\n    use super::{\n        is_on_curve_excluding_infinity_bn254, precomputed_lines,\n        run_GRUMPKIN_ZKHONK_PREP_MSM_SCALARS_SIZE_17_circuit,\n        run_GRUMPKIN_ZK_HONK_EVALS_CONS_DONE_SIZE_17_circuit,\n        run_GRUMPKIN_ZK_HONK_EVALS_CONS_INIT_SIZE_17_circuit,\n        run_GRUMPKIN_ZK_HONK_EVALS_CONS_LOOP_SIZE_17_circuit,\n        run_GRUMPKIN_ZK_HONK_SUMCHECK_SIZE_17_PUB_19_circuit, vk,\n    };\n\n    #[storage]\n    struct Storage {}\n\n    #[derive(Drop, Serde)]\n    struct FullProof {\n        proof: ZKHonkProof,\n        msm_hint: Span<felt252>,\n        kzg_hint: MPCheckHintBN254,\n    }\n\n    #[abi(embed_v0)]\n    impl IUltraKeccakZKHonkVerifier of super::IUltraKeccakZKHonkVerifier<ContractState> {\n        fn verify_ultra_keccak_zk_honk_proof(\n            self: @ContractState, full_proof_with_hints: Span<felt252>,\n        ) -> Result<Span<u256>, felt252> {\n            // DO NOT EDIT THIS FUNCTION UNLESS YOU KNOW WHAT YOU ARE DOING.\n            // This function returns Result::Ok(public_inputs) if the proof is valid.\n            // If the proof is invalid, it returns Result::Err(error).\n            // Read the documentation to learn how to generate the full_proof_with_hints array given\n            // a proof and a verifying key.\n            let mut full_proof_with_hints = full_proof_with_hints;\n            let full_proof = Serde::<FullProof>::deserialize(ref full_proof_with_hints)\n                .expect('deserialization failed');\n            let mod_bn = get_BN254_modulus();\n            let mod_grumpkin = get_GRUMPKIN_modulus();\n\n            let (transcript, _, base_rlc) = ZKHonkTranscriptTrait::from_proof::<\n                KeccakHasherState,\n            >(full_proof.proof, vk.vk_hash, vk.log_circuit_size);\n            let log_n = vk.log_circuit_size;\n            let (sum_check_rlc, honk_check) = run_GRUMPKIN_ZK_HONK_SUMCHECK_SIZE_17_PUB_19_circuit(\n                p_public_inputs: full_proof.proof.public_inputs,\n                p_pairing_point_object: full_proof.proof.pairing_point_object,\n                libra_sum: u256_to_u384(full_proof.proof.libra_sum),\n                sumcheck_univariates_flat: full_proof\n                    .proof\n                    .sumcheck_univariates\n                    .slice(0, log_n * ZK_BATCHED_RELATION_PARTIAL_LENGTH),\n                sumcheck_evaluations: full_proof.proof.sumcheck_evaluations,\n                libra_evaluation: u256_to_u384(full_proof.proof.libra_evaluation),\n                tp_sum_check_u_challenges: transcript.sum_check_u_challenges.span(),\n                tp_gate_challenge: transcript.gate_challenge,\n                tp_eta_1: transcript.eta.into(),\n                tp_eta_2: transcript.eta_two.into(),\n                tp_eta_3: transcript.eta_three.into(),\n                tp_beta: transcript.beta.into(),\n                tp_gamma: transcript.gamma.into(),\n                tp_base_rlc: base_rlc.into(),\n                tp_alpha: transcript.alpha,\n                tp_libra_challenge: transcript.libra_challenge.into(),\n                modulus: mod_grumpkin,\n            );\n\n            let (mut challenge_poly_eval, mut root_power_times_tp_gemini_r) =\n                run_GRUMPKIN_ZK_HONK_EVALS_CONS_INIT_SIZE_17_circuit(\n                tp_gemini_r: transcript.gemini_r.into(), modulus: mod_grumpkin,\n            );\n            for i in 0..vk.log_circuit_size {\n                let (new_challenge_poly_eval, new_root_power_times_tp_gemini_r) =\n                    run_GRUMPKIN_ZK_HONK_EVALS_CONS_LOOP_SIZE_17_circuit(\n                    challenge_poly_eval: challenge_poly_eval,\n                    root_power_times_tp_gemini_r: root_power_times_tp_gemini_r,\n                    tp_sumcheck_u_challenge: (*transcript.sum_check_u_challenges.at(i)).into(),\n                    modulus: mod_grumpkin,\n                );\n                challenge_poly_eval = new_challenge_poly_eval;\n                root_power_times_tp_gemini_r = new_root_power_times_tp_gemini_r;\n            }\n            let (vanishing_check, diff_check) =\n                run_GRUMPKIN_ZK_HONK_EVALS_CONS_DONE_SIZE_17_circuit(\n                p_libra_evaluation: u256_to_u384(full_proof.proof.libra_evaluation),\n                p_libra_poly_evals: full_proof.proof.libra_poly_evals,\n                tp_gemini_r: transcript.gemini_r.into(),\n                challenge_poly_eval: challenge_poly_eval,\n                root_power_times_tp_gemini_r: root_power_times_tp_gemini_r,\n                modulus: mod_grumpkin,\n            );\n\n            let (\n                scalar_1,\n                scalar_2,\n                scalar_3,\n                scalar_4,\n                scalar_5,\n                scalar_6,\n                scalar_7,\n                scalar_8,\n                scalar_9,\n                scalar_10,\n                scalar_11,\n                scalar_12,\n                scalar_13,\n                scalar_14,\n                scalar_15,\n                scalar_16,\n                scalar_17,\n                scalar_18,\n                scalar_19,\n                scalar_20,\n                scalar_21,\n                scalar_22,\n                scalar_23,\n                scalar_24,\n                scalar_25,\n                scalar_26,\n                scalar_27,\n                scalar_28,\n                scalar_29,\n                scalar_30,\n                scalar_31,\n                scalar_32,\n                scalar_33,\n                scalar_34,\n                scalar_35,\n                scalar_36,\n                scalar_37,\n                scalar_38,\n                scalar_39,\n                scalar_40,\n                scalar_41,\n                scalar_42,\n                scalar_43,\n                scalar_44,\n                scalar_45,\n                scalar_46,\n                scalar_47,\n                scalar_48,\n                scalar_49,\n                scalar_50,\n                scalar_51,\n                scalar_52,\n                scalar_53,\n                scalar_54,\n                scalar_55,\n                scalar_56,\n                scalar_57,\n            ) =\n                run_GRUMPKIN_ZKHONK_PREP_MSM_SCALARS_SIZE_17_circuit(\n                p_sumcheck_evaluations: full_proof.proof.sumcheck_evaluations,\n                p_gemini_masking_eval: u256_to_u384(full_proof.proof.gemini_masking_eval),\n                p_gemini_a_evaluations: full_proof.proof.gemini_a_evaluations,\n                p_libra_poly_evals: full_proof.proof.libra_poly_evals,\n                tp_gemini_r: transcript.gemini_r.into(),\n                tp_rho: transcript.rho.into(),\n                tp_shplonk_z: transcript.shplonk_z.into(),\n                tp_shplonk_nu: transcript.shplonk_nu.into(),\n                tp_sum_check_u_challenges: transcript.sum_check_u_challenges.span().slice(0, log_n),\n                modulus: mod_grumpkin,\n            );\n\n            // Starts with 1 * shplonk_q, not included in msm\n            let mut _points: Array<G1Point> = array![\n                vk.qm, vk.qc, vk.ql, vk.qr, vk.qo, vk.q4, vk.qLookup, vk.qArith, vk.qDeltaRange,\n                vk.qElliptic, vk.qMemory, vk.qNnf, vk.qPoseidon2External, vk.qPoseidon2Internal,\n                vk.s1, vk.s2, vk.s3, vk.s4, vk.id1, vk.id2, vk.id3, vk.id4, vk.t1, vk.t2, vk.t3,\n                vk.t4, vk.lagrange_first, vk.lagrange_last,\n                full_proof.proof.gemini_masking_poly.into(), // Proof point 1,\n                full_proof.proof.w1.into(), // Proof point 2,\n                full_proof.proof.w2.into(), // Proof point 3,\n                full_proof.proof.w3.into(), // Proof point 4,\n                full_proof.proof.w4.into(), // Proof point 5,\n                full_proof.proof.z_perm.into(), // Proof point 6,\n                full_proof.proof.lookup_inverses.into(), // Proof point 7,\n                full_proof.proof.lookup_read_counts.into(), // Proof point 8,\n                full_proof.proof.lookup_read_tags.into() // Proof point 9\n            ];\n\n            for gem_comm in full_proof.proof.gemini_fold_comms {\n                _points.append((*gem_comm).into());\n            } // log_n -1 = 16 points || Proof points 10-25\n            for lib_comm in full_proof.proof.libra_commitments {\n                _points.append((*lib_comm).into());\n            } // 3 points || Proof points 26-28\n            _points.append(full_proof.proof.kzg_quotient.into()); // Proof point 29\n            _points.append(BN254.G);\n\n            let mut points = _points.span();\n            let mut scalars: Span<u384> = array![\n                scalar_2, scalar_3, scalar_4, scalar_5, scalar_6, scalar_7, scalar_8, scalar_9,\n                scalar_10, scalar_11, scalar_12, scalar_13, scalar_14, scalar_15, scalar_16,\n                scalar_17, scalar_18, scalar_19, scalar_20, scalar_21, scalar_22, scalar_23,\n                scalar_24, scalar_25, scalar_26, scalar_27, scalar_28, scalar_29, scalar_1,\n                scalar_30, scalar_31, scalar_32, scalar_33, scalar_34, scalar_35, scalar_36,\n                scalar_37, scalar_38, scalar_39, scalar_40, scalar_41, scalar_42, scalar_43,\n                scalar_44, scalar_45, scalar_46, scalar_47, scalar_48, scalar_49, scalar_50,\n                scalar_51, scalar_52, scalar_53, scalar_54, scalar_55, scalar_56,\n                transcript.shplonk_z.into(), scalar_57,\n            ]\n                .span();\n\n            // Check input points are on curve.\n            // Skip the first 28 points as they are from VK and keep the last 29 proof points\n            for point in points.slice(28, 29) {\n                assert(\n                    is_on_curve_excluding_infinity_bn254(*point, mod_bn),\n                    'proof point not on curve',\n                );\n            }\n\n            // Assert shplonk_q is on curve\n            let shplonk_q_pt: G1Point = full_proof.proof.shplonk_q.into();\n            assert(\n                is_on_curve_excluding_infinity_bn254(shplonk_q_pt, mod_bn),\n                'shplonk_q not on curve',\n            );\n\n            let mut msm_hint = full_proof.msm_hint;\n            assert(msm_hint.len() == 58 * 12, 'wrong glv&fakeglv hint size');\n            let eigen = get_eigenvalue(0);\n            let third_root_of_unity = get_third_root_of_unity(0);\n            let min_one = get_min_one_order(0);\n            let nG = get_nG_glv_fake_glv(0);\n\n            let mut P_1 = shplonk_q_pt;\n            while msm_hint.len() != 0 {\n                let pt = *points.pop_front().unwrap();\n                let scalar = *scalars.pop_front().unwrap();\n                // Note : Scalars are below curve order by construction (circuit outputs mod n and\n                // transcript output (u128))\n                let glv_fake_glv_hint: GlvFakeGlvHint = Serde::deserialize(ref msm_hint).unwrap();\n                let temp = _scalar_mul_glv_and_fake_glv(\n                    pt,\n                    scalar,\n                    mod_grumpkin,\n                    mod_bn,\n                    glv_fake_glv_hint,\n                    eigen,\n                    third_root_of_unity,\n                    min_one,\n                    nG,\n                    0,\n                );\n                P_1 = _ec_safe_add(P_1, temp, mod_bn, 0);\n            }\n\n            let P_2: G1Point = full_proof.proof.kzg_quotient.into();\n\n            // Perform the KZG pairing check.\n            let kzg_check = multi_pairing_check_bn254_2P_2F(\n                G1G2Pair { p: P_1, q: G2_POINT_KZG_1 },\n                G1G2Pair { p: P_2.negate(0), q: G2_POINT_KZG_2 },\n                precomputed_lines.span(),\n                full_proof.kzg_hint,\n            );\n\n            if sum_check_rlc.is_zero()\n                && honk_check.is_zero()\n                && !vanishing_check.is_zero()\n                && diff_check.is_zero()\n                && kzg_check.is_ok() {\n                return Result::Ok(full_proof.proof.public_inputs);\n            } else {\n                return Result::Err('Proof verification failed');\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/contracts/mutator_set/tests/test_contract.cairo",
    "content": "use garaga::definitions::u384;\nuse garaga::hashes::poseidon_hash_2_bn254;\nuse mutator_set::mutator_set_contract::{\n    IMutatorSetContractDispatcher, IMutatorSetContractDispatcherTrait,\n};\n// use mutator_set::IMutatorSetContractSafeDispatcher;\n\nuse snforge_std::{ContractClassTrait, DeclareResultTrait, declare};\nuse starknet::ContractAddress;\n\nfn deploy_contract(name: ByteArray) -> ContractAddress {\n    let contract = declare(name).unwrap().contract_class();\n    let (contract_address, _) = contract.deploy(@ArrayTrait::new()).unwrap();\n    contract_address\n}\n\n#[test]\nfn test_poseidon_hash_2_bn254() {\n    let first_leaf: u256 = 'hello_world';\n    let first_leaf_u384: u384 = first_leaf.into();\n    let _ = poseidon_hash_2_bn254(\n        first_leaf_u384, u384 { limb0: 42, limb1: 0, limb2: 0, limb3: 0 },\n    );\n}\n\n\n#[test]\nfn test_append_leaf_aocl() {\n    let contract_address = deploy_contract(\"MutatorSetContract\");\n\n    let dispatcher = IMutatorSetContractDispatcher { contract_address };\n\n    // Initial state (1 leaf)\n    let n_leaves_aocl_before = dispatcher.get_n_leaves_aocl();\n    let peaks_before = dispatcher.get_peaks_aocl();\n    let n_peaks_before = dispatcher.get_n_peaks_aocl();\n    assert(n_leaves_aocl_before == 1, 'Invalid n_leaves_aocl');\n    assert(n_peaks_before == 1, 'Invalid n_peaks');\n    assert(peaks_before == array![0], 'Invalid peaks_before');\n\n    // Append second leaf\n    dispatcher.append_leaf_aocl(0);\n    // println!(\"Appended second leaf\");\n    let n_leaves_aocl_after = dispatcher.get_n_leaves_aocl();\n    let n_peaks_after = dispatcher.get_n_peaks_aocl();\n    assert(n_leaves_aocl_after == 2, 'Invalid n_leaves_aocl');\n    assert(n_peaks_after == 1, 'Invalid n_peaks');\n    let peaks_after = dispatcher.get_peaks_aocl();\n    assert(\n        peaks_after == array![0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864],\n        'Invalid peaks_after',\n    );\n\n    // Append third leaf\n    dispatcher.append_leaf_aocl(0);\n    // println!(\"Appended third leaf\");\n\n    let n_leaves_aocl_after = dispatcher.get_n_leaves_aocl();\n    let n_peaks_after = dispatcher.get_n_peaks_aocl();\n    assert(n_leaves_aocl_after == 3, 'Invalid n_leaves_aocl');\n    assert(n_peaks_after == 2, 'Invalid n_peaks');\n\n    let peaks_after = dispatcher.get_peaks_aocl();\n    assert(\n        peaks_after == array![\n            0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864, 0,\n        ],\n        'Invalid peaks_after',\n    );\n\n    // Append 4th leaf :\n\n    // println!(\"---Appending leaf {}----\", 4);\n    dispatcher.append_leaf_aocl(0);\n    let n_leaves_aocl_after = dispatcher.get_n_leaves_aocl();\n    assert(n_leaves_aocl_after == 4, 'Invalid n_leaves_aocl');\n    let n_peaks_after = dispatcher.get_n_peaks_aocl();\n    assert(n_peaks_after == 1, 'Invalid n_peaks_4');\n    let peaks_after = dispatcher.get_peaks_aocl();\n\n    assert(\n        peaks_after == array![0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1],\n        'Invalid peaks_after_4',\n    );\n\n    // println!(\"---Appending leaf 5----\");\n    dispatcher.append_leaf_aocl(0);\n    let n_leaves_aocl_after = dispatcher.get_n_leaves_aocl();\n    assert(n_leaves_aocl_after == 5, 'Invalid n_leaves_aocl');\n    let n_peaks_after = dispatcher.get_n_peaks_aocl();\n    assert(n_peaks_after == 2, 'Invalid n_peaks_5');\n    let peaks_after = dispatcher.get_peaks_aocl();\n\n    assert_eq!(\n        peaks_after, array![0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1, 0],\n    );\n\n    for _ in 6..14_usize {\n        // println!(\"Appending leaf {}\", i);\n        dispatcher.append_leaf_aocl(0);\n        // let n_leaves_aocl_after = dispatcher.get_n_leaves_aocl();\n    // println!(\"       LOOP: n_leaves_aocl: {}\", n_leaves_aocl_after);\n    }\n\n    let n_leaves_aocl_after = dispatcher.get_n_leaves_aocl();\n    let n_peaks_after = dispatcher.get_n_peaks_aocl();\n    assert(n_leaves_aocl_after == 13, 'Invalid n_leaves_aocl');\n    assert(n_peaks_after == 3, 'Invalid n_peaks');\n\n    let peaks_after = dispatcher.get_peaks_aocl();\n\n    assert(\n        peaks_after == array![\n            0x18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238,\n            0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1, 0,\n        ],\n        'Invalid peaks_after',\n    );\n}\n// #[test]\n// #[feature(\"safe_dispatcher\")]\n// fn test_cannot_increase_balance_with_zero_value() {\n//     let contract_address = deploy_contract(\"HelloStarknet\");\n\n//     let safe_dispatcher = IHelloStarknetSafeDispatcher { contract_address };\n\n//     let balance_before = safe_dispatcher.get_balance().unwrap();\n//     assert(balance_before == 0, 'Invalid balance');\n\n//     match safe_dispatcher.increase_balance(0) {\n//         Result::Ok(_) => core::panic_with_felt252('Should have panicked'),\n//         Result::Err(panic_data) => {\n//             assert(*panic_data.at(0) == 'Amount cannot be 0', *panic_data.at(0));\n//         },\n//     };\n// }\n\n\n"
  },
  {
    "path": "src/contracts/mutator_set/zk_program/Nargo.toml",
    "content": "[package]\nname = \"zk_program\"\ntype = \"bin\"\nauthors = [\"\"]\n\n[dependencies]\nposeidon = { tag = \"v0.1.1\", git = \"https://github.com/noir-lang/poseidon\" }\n"
  },
  {
    "path": "src/contracts/mutator_set/zk_program/Prover.toml",
    "content": "leaf_index = \"0x2\"\nleaf_premiage = \"0x0\"\nnum_leafs = \"0x5\"\npeaks = [ \"0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",]\nroot_hash = \"0x1ba30aaf15c7694786a1f118ca39fcc6c997b48da9dfa62e9ec3e83ac7d6304d\"\n\n[proof]\nlen = \"0x2\"\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n\n[[proof.storage]]\nhash = \"0\"\n"
  },
  {
    "path": "src/contracts/mutator_set/zk_program/src/main.nr",
    "content": "pub mod mmr;\npub mod mmr_tests;\n\n// use dep::std::hash::poseidon::bn254::hash_2;\nuse mmr::{MMRProofElement, verify_mmr_inclusion};\n\nfn main(\n    // MMR verification inputs\n    leaf_premiage: Field,\n    root_hash: pub Field,\n    num_leafs: pub u64,\n    leaf_index: pub u64,\n    proof: BoundedVec<MMRProofElement, 32>,\n    peaks: [Field; 32],\n) {\n    // Prove knowledge of pre-image\n    // let leaf_hash = hash_2([leaf_premiage, 0]);\n    let leaf_hash = leaf_premiage;\n\n    // Verify MMR inclusion\n\n    verify_mmr_inclusion(leaf_hash, root_hash, leaf_index, num_leafs, proof, peaks);\n\n    // Todo derive bloom filter bits from pre-image.\n\n}\n\n#[test]\nfn test_main() {\n    // Test data for MMR verification\n    let leaf1 = 0;\n\n    // Create proof for leaf1 (padding with empty elements to match size 32)\n    let mut proof = BoundedVec::new();\n    proof.push(MMRProofElement { hash: 0 }); // Sibling of leaf1\n    proof.push(\n        MMRProofElement {\n            hash: 0x2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864,\n        },\n    ); // Sibling of hash12\n\n    let mut peaks = [0; 32];\n    peaks[0] = 0x1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1;\n    peaks[1] = 0;\n\n    let root = 0x1ba30aaf15c7694786a1f118ca39fcc6c997b48da9dfa62e9ec3e83ac7d6304d;\n\n    // Test the main function\n    main(leaf1, root, 5, 2, proof, peaks);\n}\n"
  },
  {
    "path": "src/contracts/mutator_set/zk_program/src/mmr.nr",
    "content": "use poseidon::poseidon::bn254::hash_2;\n\n// Represents a Merkle Mountain Range proof element\npub struct MMRProofElement {\n    // The sibling hash at this level\n    pub hash: Field,\n}\n\n// Helper function to calculate the number of ones in a Field value\nfn count_ones(value: u64) -> u32 {\n    let mut count = 0;\n    let mut v = value;\n    for _ in 0..64 {\n        let bit = (v & 1) as u32;\n        count = count + bit;\n        v = v / 2;\n    }\n    count\n}\n\n// Helper function to calculate log2 of a Field value\nfn log2(value: u64) -> u32 {\n    let mut result = 0;\n    let mut v = value;\n    for _ in 0..64 {\n        let should_continue = v > 1;\n        result = if should_continue { result + 1 } else { result };\n        v = if should_continue { v / 2 } else { v };\n    }\n    result\n}\n\n// Helper function to calculate leaf_index_to_mt_index_and_peak_index\npub fn leaf_index_to_mt_index_and_peak_index(leaf_index: u64, num_leafs: u64) -> (u64, u32) {\n    // Check if leaf_index is out of bounds\n    let is_valid = leaf_index < num_leafs;\n    assert(is_valid, \"Leaf index must be strictly smaller than the number of leafs\");\n\n    // Calculate discrepancies to find local Merkle tree height\n    let discrepancies = leaf_index ^ num_leafs;\n    let local_mt_height = log2(discrepancies);\n    let local_mt_num_leafs = 1 << (local_mt_height as u8);\n    let remainder_bitmask = (local_mt_num_leafs - 1) as u64;\n    let local_leaf_index = leaf_index & (remainder_bitmask as u64);\n    let mt_node_index = local_leaf_index + (local_mt_num_leafs as u64);\n\n    // Calculate peak index\n    let num_peaks = count_ones(num_leafs);\n    let num_peaks_smaller_or_equal_own_peak =\n        count_ones(((num_leafs as u64) & remainder_bitmask) as u64);\n    let peak_index = num_peaks - num_peaks_smaller_or_equal_own_peak - 1;\n\n    (mt_node_index, peak_index)\n}\n\n// Verifies that a leaf exists in an MMR using an inclusion proof\npub fn verify_mmr_inclusion(\n    // The leaf hash to verify\n    leaf_hash: Field,\n    // The MMR root hash\n    root_hash: Field,\n    // The position of the leaf in the MMR (0-based)\n    leaf_index: u64,\n    // The number of leafs in the MMR\n    num_leafs: u64,\n    // The array of proof elements\n    authentication_path: BoundedVec<MMRProofElement, 32>,\n    // peaks of the MMR\n    peaks: [Field; 32],\n) {\n    // Check if leaf index is out of bounds\n    assert(leaf_index < num_leafs, \"Leaf index must be strictly smaller than the number of leafs\");\n\n    // Get Merkle tree index and peak index\n    let (mut mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(leaf_index, num_leafs);\n\n    // Verify peak count matches\n    let expected_peak_count = count_ones(num_leafs);\n\n    // assert(peaks.len() == expected_peak_count, \"Invalid peaks length\");\n\n    // Verify authentication path length matches Merkle tree height\n    let merkle_tree_height = log2(mt_index);\n\n    assert(authentication_path.len() == merkle_tree_height, \"Invalid authentication path length\");\n\n    // Process the authentication path\n    let mut current_node = leaf_hash;\n    for i in 0..32 {\n        // print(i);\n        // Compute the hash of the current node with its sibling\n        if i < merkle_tree_height {\n            let proof_element = authentication_path.get(i);\n            let current_node_is_left_sibling = ((mt_index as u64) % 2) == 0;\n            if current_node_is_left_sibling {\n                // println(\"current_node_is_left_sibling\");\n                current_node = hash_2([current_node, proof_element.hash]);\n            } else {\n                // println(\"current_node_is_right_sibling\");\n                current_node = hash_2([proof_element.hash, current_node]);\n            }\n            // Move up one level in the tree\n            mt_index = mt_index / 2;\n        }\n    }\n\n    assert(mt_index == 1, \"Invalid mt_index\");\n\n    // Verify against the root hash\n    assert(peaks[peak_index] == current_node, \"Invalid inclusion proof\");\n\n    let bag = bag_peaks(peaks, expected_peak_count);\n\n    assert(bag == root_hash, \"Invalid root hash\");\n}\n\npub fn bag_peaks(mut peaks: [Field; 32], n_peaks: u32) -> Field {\n    let mut bag = peaks[n_peaks - 1];\n\n    for i in 1..31 {\n        if i < n_peaks {\n            bag = hash_2([peaks[n_peaks - i - 1], bag]);\n        }\n    }\n    bag\n}\n"
  },
  {
    "path": "src/contracts/mutator_set/zk_program/src/mmr_tests.nr",
    "content": "use super::mmr::leaf_index_to_mt_index_and_peak_index;\n\n#[test]\nfn test_leaf_index_to_mt_index_and_peak_index() {\n    // 1 leaf\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(0, 1);\n    assert(mt_index == 1, \"1 leaf mt_index should be 1\");\n    assert(peak_index == 0, \"1 leaf peak_index should be 0\");\n\n    // 2 leafs\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(0, 2);\n    assert(mt_index == 2, \"2 leafs - first leaf mt_index should be 2\");\n    assert(peak_index == 0, \"2 leafs - first leaf peak_index should be 0\");\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(1, 2);\n    assert(mt_index == 3, \"2 leafs - second leaf mt_index should be 3\");\n    assert(peak_index == 0, \"2 leafs - second leaf peak_index should be 0\");\n\n    // 3 leafs\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(0, 3);\n    assert(mt_index == 2, \"3 leafs - first leaf mt_index should be 2\");\n    assert(peak_index == 0, \"3 leafs - first leaf peak_index should be 0\");\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(1, 3);\n    assert(mt_index == 3, \"3 leafs - second leaf mt_index should be 3\");\n    assert(peak_index == 0, \"3 leafs - second leaf peak_index should be 0\");\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(2, 3);\n    assert(mt_index == 1, \"3 leafs - third leaf mt_index should be 1\");\n    assert(peak_index == 1, \"3 leafs - third leaf peak_index should be 1\");\n\n    // 4 leafs\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(0, 4);\n    assert(mt_index == 4, \"4 leafs - first leaf mt_index should be 4\");\n    assert(peak_index == 0, \"4 leafs - first leaf peak_index should be 0\");\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(1, 4);\n    assert(mt_index == 5, \"4 leafs - second leaf mt_index should be 5\");\n    assert(peak_index == 0, \"4 leafs - second leaf peak_index should be 0\");\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(2, 4);\n    assert(mt_index == 6, \"4 leafs - third leaf mt_index should be 6\");\n    assert(peak_index == 0, \"4 leafs - third leaf peak_index should be 0\");\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(3, 4);\n    assert(mt_index == 7, \"4 leafs - fourth leaf mt_index should be 7\");\n    assert(peak_index == 0, \"4 leafs - fourth leaf peak_index should be 0\");\n\n    // 14 leafs\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(0, 14);\n    assert(mt_index == 8, \"14 leafs - first leaf mt_index should be 8\");\n    assert(peak_index == 0, \"14 leafs - first leaf peak_index should be 0\");\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(7, 14);\n    assert(mt_index == 15, \"14 leafs - eighth leaf mt_index should be 15\");\n    assert(peak_index == 0, \"14 leafs - eighth leaf peak_index should be 0\");\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(8, 14);\n    assert(mt_index == 4, \"14 leafs - ninth leaf mt_index should be 4\");\n    assert(peak_index == 1, \"14 leafs - ninth leaf peak_index should be 1\");\n\n    // 32 leafs\n    for i in 0..32 {\n        let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(i, 32);\n        assert(mt_index == 32 + i, \"32 leafs - mt_index should be 32 + i\");\n        assert(peak_index == 0, \"32 leafs - peak_index should be 0\");\n    }\n\n    // 33 leafs\n    for i in 0..32 {\n        let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(i, 33);\n        assert(mt_index == 32 + i, \"33 leafs - first 32 leaves mt_index should be 32 + i\");\n        assert(peak_index == 0, \"33 leafs - first 32 leaves peak_index should be 0\");\n    }\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(32, 33);\n    assert(mt_index == 1, \"33 leafs - last leaf mt_index should be 1\");\n    assert(peak_index == 1, \"33 leafs - last leaf peak_index should be 1\");\n\n    // 34 leafs\n    for i in 0..32 {\n        let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(i, 34);\n        assert(mt_index == 32 + i, \"34 leafs - first 32 leaves mt_index should be 32 + i\");\n        assert(peak_index == 0, \"34 leafs - first 32 leaves peak_index should be 0\");\n    }\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(32, 34);\n    assert(mt_index == 2, \"34 leafs - 33rd leaf mt_index should be 2\");\n    assert(peak_index == 1, \"34 leafs - 33rd leaf peak_index should be 1\");\n    let (mt_index, peak_index) = leaf_index_to_mt_index_and_peak_index(33, 34);\n    assert(mt_index == 3, \"34 leafs - 34th leaf mt_index should be 3\");\n    assert(peak_index == 1, \"34 leafs - 34th leaf peak_index should be 1\");\n}\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/README.md",
    "content": "# RiscZero Sample App\n\nFor details on how to use Garaga to run this **RiscZero** sample application, please refer to the\n[GitBook documentation](https://garaga.gitbook.io/garaga/maintained-smart-contracts/risczero).\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/.gitignore",
    "content": "Cargo.lock\nmethods/guest/Cargo.lock\ntarget/\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/Cargo.toml",
    "content": "[workspace]\nresolver = \"2\"\nmembers = [\"host\", \"methods\"]\n\n# Always optimize; building and running the guest takes much longer without optimization.\n[profile.dev]\nopt-level = 3\n\n[profile.release]\ndebug = 1\nlto = true\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/README.md",
    "content": "# RISC Zero Rust Starter Template\n\nWelcome to the RISC Zero Rust Starter Template! This template is intended to\ngive you a starting point for building a project using the RISC Zero zkVM.\nThroughout the template (including in this README), you'll find comments\nlabelled `TODO` in places where you'll need to make changes. To better\nunderstand the concepts behind this template, check out the [zkVM\nOverview][zkvm-overview].\n\n## Quick Start\n\nFirst, make sure [rustup] is installed. The\n[`rust-toolchain.toml`][rust-toolchain] file will be used by `cargo` to\nautomatically install the correct version.\n\nTo build all methods and execute the method within the zkVM, run the following\ncommand:\n\n```bash\ncargo run\n```\n\nThis is an empty template, and so there is no expected output (until you modify\nthe code).\n\n### Executing the Project Locally in Development Mode\n\nDuring development, faster iteration upon code changes can be achieved by leveraging [dev-mode], we strongly suggest activating it during your early development phase. Furthermore, you might want to get insights into the execution statistics of your project, and this can be achieved by specifying the environment variable `RUST_LOG=\"[executor]=info\"` before running your project.\n\nPut together, the command to run your project in development mode while getting execution statistics is:\n\n```bash\nRUST_LOG=\"[executor]=info\" RISC0_DEV_MODE=1 cargo run\n```\n\n### Running Proofs Remotely on Bonsai\n\n_Note: The Bonsai proving service is still in early Alpha; an API key is\nrequired for access. [Click here to request access][bonsai access]._\n\nIf you have access to the URL and API key to Bonsai you can run your proofs\nremotely. To prove in Bonsai mode, invoke `cargo run` with two additional\nenvironment variables:\n\n```bash\nBONSAI_API_KEY=\"YOUR_API_KEY\" BONSAI_API_URL=\"BONSAI_URL\" cargo run\n```\n\n## How to Create a Project Based on This Template\n\nSearch this template for the string `TODO`, and make the necessary changes to\nimplement the required feature described by the `TODO` comment. Some of these\nchanges will be complex, and so we have a number of instructional resources to\nassist you in learning how to write your own code for the RISC Zero zkVM:\n\n- The [RISC Zero Developer Docs][dev-docs] is a great place to get started.\n- Example projects are available in the [examples folder][examples] of\n  [`risc0`][risc0-repo] repository.\n- Reference documentation is available at [https://docs.rs][docs.rs], including\n  [`risc0-zkvm`][risc0-zkvm], [`cargo-risczero`][cargo-risczero],\n  [`risc0-build`][risc0-build], and [others][crates].\n\n## Directory Structure\n\nIt is possible to organize the files for these components in various ways.\nHowever, in this starter template we use a standard directory structure for zkVM\napplications, which we think is a good starting point for your applications.\n\n```text\nproject_name\n├── Cargo.toml\n├── host\n│   ├── Cargo.toml\n│   └── src\n│       └── main.rs                    <-- [Host code goes here]\n└── methods\n    ├── Cargo.toml\n    ├── build.rs\n    ├── guest\n    │   ├── Cargo.toml\n    │   └── src\n    │       └── method_name.rs         <-- [Guest code goes here]\n    └── src\n        └── lib.rs\n```\n\n## Video Tutorial\n\nFor a walk-through of how to build with this template, check out this [excerpt\nfrom our workshop at ZK HACK III][zkhack-iii].\n\n## Questions, Feedback, and Collaborations\n\nWe'd love to hear from you on [Discord][discord] or [Twitter][twitter].\n\n[bonsai access]: https://bonsai.xyz/apply\n[cargo-risczero]: https://docs.rs/cargo-risczero\n[crates]: https://github.com/risc0/risc0/blob/main/README.md#rust-binaries\n[dev-docs]: https://dev.risczero.com\n[dev-mode]: https://dev.risczero.com/api/generating-proofs/dev-mode\n[discord]: https://discord.gg/risczero\n[docs.rs]: https://docs.rs/releases/search?query=risc0\n[examples]: https://github.com/risc0/risc0/tree/main/examples\n[risc0-build]: https://docs.rs/risc0-build\n[risc0-repo]: https://www.github.com/risc0/risc0\n[risc0-zkvm]: https://docs.rs/risc0-zkvm\n[rust-toolchain]: rust-toolchain.toml\n[rustup]: https://rustup.rs\n[twitter]: https://twitter.com/risczero\n[zkhack-iii]: https://www.youtube.com/watch?v=Yg_BGqj_6lg&list=PLcPzhUaCxlCgig7ofeARMPwQ8vbuD6hC5&index=5\n[zkvm-overview]: https://dev.risczero.com/zkvm\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/host/Cargo.toml",
    "content": "[package]\nname = \"host\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\nmethods = { path = \"../methods\" }\nrisc0-zkvm = { version = \"2.3.1\" }\nrisc0-ethereum-contracts = { version = \"2.2.2\" }\ngaraga_rs = { path = \"../../../../../tools/garaga_rs\" }\nhex = \"0.4\"\ntracing-subscriber = { version = \"0.3\", features = [\"env-filter\"] }\nserde = \"1.0\"\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/host/src/main.rs",
    "content": "// These constants represent the RISC-V ELF and the image ID generated by risc0-build.\n// The ELF is used for proving and the ID is used for verification.\nuse garaga_rs::calldata::full_proof_with_hints::groth16::risc0_utils::get_risc0_vk;\nuse garaga_rs::calldata::full_proof_with_hints::groth16::{get_groth16_calldata, Groth16Proof};\nuse garaga_rs::definitions::CurveID;\nuse methods::FIBONACCI_GUEST_ELF;\nuse risc0_ethereum_contracts::encode_seal;\nuse risc0_zkvm::{compute_image_id, default_prover, ExecutorEnv, ProverOpts, VerifierContext};\n\nfn main() {\n    // Initialize tracing. In order to view logs, run `RUST_LOG=info cargo run`\n    tracing_subscriber::fmt()\n        .with_env_filter(tracing_subscriber::filter::EnvFilter::from_default_env())\n        .init();\n\n    // An executor environment describes the configurations for the zkVM\n    // including program inputs.\n    // A default ExecutorEnv can be created like so:\n    // `let env = ExecutorEnv::builder().build().unwrap();`\n    // However, this `env` does not have any inputs.\n    //\n    // To add guest input to the executor environment, use\n    // ExecutorEnvBuilder::write().\n    // To access this method, you'll need to use ExecutorEnv::builder(), which\n    // creates an ExecutorEnvBuilder. When you're done adding input, call\n    // ExecutorEnvBuilder::build().\n\n    // For example:\n    let l: u32 = 3; // public lower bound for n\n    let u: u32 = 8; // public upper bound for n\n    let n: u32 = 6; // private n for which we will compute fibonacci(n)\n    let env = ExecutorEnv::builder()\n        .write(&l)\n        .unwrap()\n        .write(&u)\n        .unwrap()\n        .write(&n)\n        .unwrap()\n        .build()\n        .unwrap();\n\n    // Obtain the default prover.\n    let prover = default_prover();\n\n    // Proof information by proving the specified ELF binary.\n    // This struct contains the receipt along with statistics about execution of the guest\n    let prove_info = prover\n        .prove_with_ctx(\n            env,\n            &VerifierContext::default(),\n            FIBONACCI_GUEST_ELF,\n            &ProverOpts::groth16(),\n        )\n        .unwrap();\n\n    // extract the receipt.\n    let receipt = prove_info.receipt;\n    let seal = to_bytes(encode_seal(&receipt).unwrap());\n    let image_id = to_bytes(compute_image_id(&FIBONACCI_GUEST_ELF).unwrap());\n    let journal = to_bytes(receipt.journal);\n    // prints the proof artifact as JSON\n    println!(\n        \"{{\\\"seal\\\": \\\"0x{}\\\", \\\"image_id\\\": \\\"0x{}\\\", \\\"journal\\\": \\\"0x{}\\\"}}\",\n        hex::encode(&seal),\n        hex::encode(&image_id),\n        hex::encode(&journal)\n    );\n\n    // helper function to convert objects to array of bytes\n    fn to_bytes<T: AsRef<[u8]>>(obj: T) -> Vec<u8> {\n        obj.as_ref().to_vec()\n    }\n\n    // prints the calldata as JSON\n    let proof = Groth16Proof::from_risc0(seal, image_id, journal);\n    let calldata = get_groth16_calldata(&proof, &get_risc0_vk(), CurveID::BN254).unwrap();\n    println!(\n        \"[{}]\",\n        calldata\n            .iter()\n            .skip(1)\n            .map(|v| format!(\"\\\"{}\\\"\", v))\n            .collect::<Vec<_>>()\n            .join(\", \")\n    );\n}\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/methods/Cargo.toml",
    "content": "[package]\nname = \"methods\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[build-dependencies]\nrisc0-build = { version = \"2.3.1\" }\n\n[package.metadata.risc0]\nmethods = [\"guest\"]\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/methods/build.rs",
    "content": "fn main() {\n    risc0_build::embed_methods();\n}\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/methods/guest/Cargo.toml",
    "content": "[package]\nname = \"fibonacci_guest\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[workspace]\n\n[dependencies]\nrisc0-zkvm = { version = \"2.3.1\", default-features = false, features = ['std'] }\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/methods/guest/src/main.rs",
    "content": "use risc0_zkvm::guest::env;\n\nfn main() {\n    // reads the public bounds and private n provided by the Host\n    let l: u32 = env::read();\n    let u: u32 = env::read();\n    let n: u32 = env::read();\n\n    // sanity check for the bounds\n    assert!(l <= n && n < u);\n\n    // performs the computation\n    let fib_n: u32 = fibonacci(n);\n\n    fn fibonacci(n: u32) -> u32 {\n        let mut a = 0;\n        let mut b = 1;\n        for _ in 0..n {\n            (a, b) = (b, a + b);\n        }\n        a\n    }\n\n    // writes the public inputs and output to the journal\n    env::commit(&l);\n    env::commit(&u);\n    env::commit(&fib_n);\n}\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/methods/src/lib.rs",
    "content": "include!(concat!(env!(\"OUT_DIR\"), \"/methods.rs\"));\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_prover/rust-toolchain.toml",
    "content": "[toolchain]\nchannel = \"stable\"\ncomponents = [\"rustfmt\", \"rust-src\"]\nprofile = \"minimal\"\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_sequencer/.gitignore",
    "content": "target\n.snfoundry_cache/\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_sequencer/Scarb.toml",
    "content": "[package]\nname = \"fibonacci_sequencer\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n# See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html\n\n[dependencies]\nstarknet = \"2.16.1\"\n\n[dev-dependencies]\nsnforge_std = \"0.57.0\"\nassert_macros = \"2.16.1\"\n\n[[target.starknet-contract]]\nsierra = true\ncasm = true\ncasm-add-pythonic-hints = true\n\n[scripts]\ntest = \"snforge test\"\n\n# Visit https://foundry-rs.github.io/starknet-foundry/appendix/scarb-toml.html for more information\n\n# [tool.snforge]                                             # Define `snforge` tool section\n# exit_first = true                                          # Stop tests execution immediately upon the first failure\n# fuzzer_runs = 1234                                         # Number of runs of the random fuzzer\n# fuzzer_seed = 1111                                         # Seed for the random fuzzer\n\n# [[tool.snforge.fork]]                                      # Used for fork testing\n# name = \"SOME_NAME\"                                         # Fork name\n# url = \"http://your.rpc.url\"                                # Url of the RPC provider\n# block_id.tag = \"latest\"                                    # Block to fork from (block tag)\n\n# [[tool.snforge.fork]]\n# name = \"SOME_SECOND_NAME\"\n# url = \"http://your.second.rpc.url\"\n# block_id.number = \"123\"                                    # Block to fork from (block number)\n\n# [[tool.snforge.fork]]\n# name = \"SOME_THIRD_NAME\"\n# url = \"http://your.third.rpc.url\"\n# block_id.hash = \"0x123\"                                    # Block to fork from (block hash)\n\n# [profile.dev.cairo]                                        # Configure Cairo compiler\n# unstable-add-statements-code-locations-debug-info = true   # Should be used if you want to use coverage\n# unstable-add-statements-functions-debug-info = true        # Should be used if you want to use coverage/profiler\n# inlining-strategy = \"avoid\"                                # Should be used if you want to use coverage\n\n# [features]                                                 # Used for conditional compilation\n# enable_for_tests = []                                      # Feature name and list of other features that should be enabled with it\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_sequencer/snfoundry.toml",
    "content": "# Visit https://foundry-rs.github.io/starknet-foundry/appendix/snfoundry-toml.html\n# and https://foundry-rs.github.io/starknet-foundry/projects/configuration.html for more information\n\n# [sncast.default]                                         # Define a profile name\n# url = \"https://free-rpc.nethermind.io/sepolia-juno/v0_7\" # Url of the RPC provider\n# accounts-file = \"../account-file\"                        # Path to the file with the account data\n# account = \"mainuser\"                                     # Account from `accounts_file` or default account file that will be used for the transactions\n# keystore = \"~/keystore\"                                  # Path to the keystore file\n# wait-params = { timeout = 300, retry-interval = 10 }     # Wait for submitted transaction parameters\n# block-explorer = \"StarkScan\"                             # Block explorer service used to display links to transaction details\n# show-explorer-links = true                               # Print links pointing to pages with transaction details in the chosen block explorer\n\n[sncast.sepolia]\naccount = \"deployer\"\naccounts-file = \"./accounts.json\"\nurl = \"https://starknet-sepolia.public.blastapi.io/rpc/v0_7\"\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_sequencer/src/lib.cairo",
    "content": "#[starknet::interface]\npub trait IFibonacciSequencer<TContractState> {\n    fn verify_and_submit_fibonacci_number(\n        ref self: TContractState, full_proof_with_hints: Span<felt252>,\n    );\n}\n\n#[starknet::contract]\nmod FibonacciSequencer {\n    use starknet::ClassHash;\n    use starknet::storage::{StoragePointerReadAccess, StoragePointerWriteAccess};\n\n    pub const RISC_ZERO_VERIFIER_CLASS_HASH: felt252 =\n        0x41d5e111b93acbf1afb531253e0bc64d43f90a8a99290361e851ec0c4968ab1;\n\n    #[storage]\n    struct Storage {\n        lower_bound: u32,\n    }\n\n    #[abi(embed_v0)]\n    impl FibonacciSequencerImpl of super::IFibonacciSequencer<ContractState> {\n        fn verify_and_submit_fibonacci_number(\n            ref self: ContractState, full_proof_with_hints: Span<felt252>,\n        ) {\n            // sets the class hash for the RiscZero verifier already declared on-chain\n            // by the Garaga team\n            let class_hash: ClassHash = RISC_ZERO_VERIFIER_CLASS_HASH.try_into().unwrap();\n\n            // instantiate a library dispatcher to perform the library call\n            // to the RiscZero verifier class, given that verifying a proof is\n            // a read-only operation\n            let dispatcher = IRisc0Groth16VerifierBN254LibraryDispatcher { class_hash };\n\n            // calls the RiscZero verifier passing along the proof artifact and\n            // checks whether the proof is valid or not, aborting the transaction if not\n            let optional_journal = dispatcher.verify_r0_groth16_proof_bn254(full_proof_with_hints);\n            assert(optional_journal != Option::None, 'Invalid proof');\n\n            // parses the public inputs and output from the journal\n            let mut journal = optional_journal.unwrap();\n            let l = pop_front_u32_le(ref journal);\n            let u = pop_front_u32_le(ref journal);\n            let fib_n = pop_front_u32_le(ref journal);\n\n            // performs the necessary state update check, updates the state,\n            // and emits an event with the new fibnoacci number submitted\n            // the smart contract invariant guarantees that every fiboacci number\n            // accepted comes later in the fibonacci sequence without revealing\n            // its index, which is trivial for monotonic sequences like fibnacci,\n            // but would also work as expected also for non-monotonic ones\n            let b = self.lower_bound.read();\n            assert(l >= b, 'Invalid lower bound');\n            self.lower_bound.write(u);\n            self.emit(FibonnacciNumberSubmitted { n: fib_n });\n            self.emit(LowerBoundUpdated { n: u });\n        }\n    }\n\n    fn pop_front_u32_le(ref bytes: Span<u8>) -> u32 {\n        let [b0, b1, b2, b3] = (*bytes.multi_pop_front::<4>().unwrap()).unbox();\n        let b0: u32 = b0.into();\n        let b1: u32 = b1.into();\n        let b2: u32 = b2.into();\n        let b3: u32 = b3.into();\n        b0 + 256 * (b1 + 256 * (b2 + 256 * b3))\n    }\n\n    #[event]\n    #[derive(Drop, starknet::Event)]\n    enum Event {\n        FibonnacciNumberSubmitted: FibonnacciNumberSubmitted,\n        LowerBoundUpdated: LowerBoundUpdated,\n    }\n\n    #[derive(Drop, starknet::Event)]\n    struct FibonnacciNumberSubmitted {\n        #[key]\n        n: u32,\n    }\n\n    #[derive(Drop, starknet::Event)]\n    struct LowerBoundUpdated {\n        #[key]\n        n: u32,\n    }\n\n    #[starknet::interface]\n    trait IRisc0Groth16VerifierBN254<TContractState> {\n        fn verify_r0_groth16_proof_bn254(\n            self: @TContractState, full_proof_with_hints: Span<felt252>,\n        ) -> Option<Span<u8>>;\n    }\n}\n"
  },
  {
    "path": "src/contracts/risc0_sample_app/fibonacci_sequencer/tests/test_contract.cairo",
    "content": "use fibonacci_sequencer::{IFibonacciSequencerDispatcher, IFibonacciSequencerDispatcherTrait};\nuse snforge_std::{ContractClassTrait, DeclareResultTrait, declare};\nuse starknet::ContractAddress;\n\nfn deploy_contract(name: ByteArray) -> ContractAddress {\n    let contract = declare(name).unwrap().contract_class();\n    let (contract_address, _) = contract.deploy(@ArrayTrait::new()).unwrap();\n    contract_address\n}\n\n#[test]\n#[fork(url: \"https://starknet-sepolia.public.blastapi.io/rpc/v0_8\", block_tag: latest)]\nfn test_using_forked_state() {\n    let contract_address = deploy_contract(\"FibonacciSequencer\");\n\n    let dispatcher = IFibonacciSequencerDispatcher { contract_address };\n\n    // Generated with\n    // garaga calldata\n    //   --system groth16\n    //   --proof src/contracts/risc0_sample_app/fibonacci_prover/proof.json\n    //   --vk hydra/garaga/starknet/groth16_contract_generator/examples/vk_risc0.json\n    //   --format array\n    let calldata: Array<felt252> = array![\n        10313708969354158917967222113, 50267649714470381823581225990, 68921961243555163, 0,\n        46290583222980871151183921591, 4301093058224347754247855122, 1162760382227106560, 0,\n        24819230280640842784327799227, 29215605766976866277419122168, 1808142039149740796, 0,\n        39970134346975989818674078489, 3936215012720214372783898310, 2755310503244839950, 0,\n        10008210460600043468605009819, 5134088462908765651216846940, 548621717748290851, 0,\n        52073651593444857523464173785, 76173007636674752150960882367, 1989852830911987504, 0,\n        37843478955940902971626538675, 51487780532431296010323197290, 224964057096925175, 0,\n        52769853187791807058501612138, 18499899756995874154999451581, 2652790000201915092, 0, 8,\n        2053329358, 2206211296, 38805000, 4116461829, 1020971636, 3479402811, 2149017453,\n        1885829375, 12, 3, 0, 0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 67110097341386670036774239297,\n        13427688709271065544749007076, 61998020686717975, 24950728289913553492905070844,\n        41338110835098902024801133866, 1926599594904525212, 49180962753194629969032522397,\n        18683289622619758709651796328, 2322548236816591081, 13777997333488195788972438786,\n        38195864551149721700102291303, 2096871835550112999, 57461822935248779146096669748,\n        63868881672888503510396685863, 2927643925868048643, 57882494364401687532204184645,\n        77064301337750944900057687182, 267580645098775586, 63832900139379554772626768003,\n        29079614675932695500868920547, 1697338607874777837, 13820245196087287279705420328,\n        45300240058713116745673941050, 2294499228727579498, 21764563697118840926227639154,\n        25188648591388018983369960932, 2953390198513702930, 7498684187777915752213167858,\n        55228804274201371180030455309, 2847354578579959092, 15435568331327776497941779773,\n        28893295361569522918496417700, 863647595501061687, 35302451000412228734699052367,\n        22457850952863143233325656339, 1401767062286425255, 51476042181496768465160915178,\n        10138610283257573438879144688, 1935188165376748165, 2607974614136254198207269069,\n        65923379203933185953178362077, 1736442677132969807, 28998805280904070766222869461,\n        71739253543289788494168851923, 1666168593466061290, 11598394446893917972904765463,\n        38368876867378744049854307764, 357609731026298670, 18381959417766430591221349706,\n        56568223146963862145607563003, 1653316243217612846, 1532011105146822016900691973,\n        49853661497349396119734430336, 128223370870951394, 74269898268093533317708905191,\n        6064542112071456493775622576, 897376613914460874, 65999414010440756273816590021,\n        31351058327199593499861985845, 2647438822048910788, 48205353039842416879228228410,\n        39166874119798698748815259789, 1963948305806486212, 78171073915930823358190752912,\n        42432726154597990157661008330, 502888311305518184, 71268398440539498978585013972,\n        13496144499382435728441052893, 1228680712056379000, 6744502773106524459562211501,\n        26234470583206688250660206108, 1869453274075343125, 0, 0, 0, 60184622296806572439997666907,\n        75008714795759192705677030670, 3262785094589981400, 0, 0, 0, 0, 0, 0,\n        50185732680358774463548804626, 10607397758555418006709821705, 1206124784999809577, 0, 0, 0,\n        35, 12360594968262131338834950053, 29157813032367243817624618064, 1249176918977039501,\n        4295852892538527433181634157, 32408611964222354943894990211, 3081069739022633520,\n        48008414502801231336586977304, 10695353845533787710119952480, 2461284468148709923,\n        41424670137457659138316034002, 22704208483523527472760209687, 366988915687364039,\n        17390414117185975115314456765, 19899765771554787204557749565, 2426644609974225253,\n        39168384437801305002828652709, 63995845102202908056262969347, 1231262696770817384,\n        79001875949392935046839734146, 67858923451040823945953945772, 1475081209791838033,\n        10449387844431475556675852647, 23115748550791645591068351732, 1715421325480013368,\n        44721182901846674225538961665, 64638199388846426866197918856, 898421411213295026,\n        55621973480014006124115532829, 13012389169361599871153984529, 3160472654674284962,\n        55508613442680258763935969213, 34746301440097605805226636186, 734918348439328496,\n        55736029307188839838515311861, 13731812987259286528859095281, 2282641966194969923,\n        20791395889687384125688119756, 6989397587960164917946580933, 1765451686580892148,\n        52406674109961525801961192114, 35821500349487483240557623463, 32470852909215135,\n        3953835811560950536563745592, 65737295267830154570147278118, 3230583914443581448,\n        55596875411839172693842327129, 94443789363036885006823824, 3336417763008413204,\n        52907783319647596216035183513, 54114917331759988367183704291, 1078863918351929539,\n        9743733652522201172278700788, 52747862860772113517684171279, 2106505140994262297,\n        54138378922280519909387645902, 59006165532860325511159562688, 2733912037122560096,\n        24830989612348935007812695331, 23111235460663267971948348557, 480020646269586667,\n        65561583184371514519437135483, 10855304295069896300987376868, 637290028443393757,\n        53593402770083338856380373435, 68128000340724951096820458371, 2302249138431258780,\n        16155562814866536950816994055, 72258525721371945091688503494, 2892100359634228581,\n        42374679426173693502262079158, 21383406139360631296896177113, 985003147339755831,\n        38723502353311254286018909030, 20933468737936183741558800065, 3247241243536938593,\n        30181607942484300660683207736, 74863731242715433465989805287, 2714053954725946874,\n        57163700248720041301046065461, 45216960822001951269446520500, 3066891704198872221,\n        17451329542461221237869321613, 24503838682660438368525032328, 562576764894612382,\n        14585158156452265635731184191, 2773607317537226113943697406, 1319602802690463829,\n        24861472214491976856336178533, 72291441918894561223831991640, 2944671567702358518,\n        54916250575730657360102360406, 51803695865780597071494164610, 543061999436242010,\n        36436437402110229572837838194, 62139406963300433254696434903, 2327770858119618782,\n        73103594065542722620598918658, 44243971186390802668927786916, 142089896095996329,\n        21436822252945051741299657273, 46801472146233891090208622390, 3411786869524333922,\n        72312168924187718460575840349, 42552130630662034788449122958, 530399508347139813,\n        11481059118653940954162707235, 26919925452697455698502619019, 1946684416952150705,\n        70449828641132601851144928179, 6396432980500358628406384425, 1142492913372652538,\n        56314812782974212647939770855, 12167727556165366211988067345, 1903290185871975252,\n        73747573353900962924882745156, 49656272196777479082055909039, 2865371041810319894,\n        20172090510775745939621270277, 25654122589521917887969987805, 1676053585976553883,\n        8977267769221663823931008106, 77250837361365609853695133269, 186358667315816194,\n        25972767478532206471029814990, 12943967821641419197615069846, 3229756313671944335,\n        46300450854999856460637670919, 35161017020064083840617623040, 328624250660014565,\n        4036507852346655706246921055, 12537993711452530936696186196, 880041771093384090,\n        65448068356225382511538574926, 51037579448757576064966034417, 1223525822436876055,\n        2176773890406377825986227808, 77682993031444986363979296598, 2583115246777786513,\n        71059891490091380033561270696, 31012048167373832483903286373, 159444355772919561,\n        23741828148656098204388481068, 28085683769479374081599602201, 1662193400928783177,\n        31323786616635205101063643380, 34433468358707147475954472166, 1731240402366613290,\n        70436277977450903286635934036, 47492361363997243201167972869, 1678817997334649766,\n        36538059548569101915578987343, 17093451572793640673633279256, 1656454134442109871,\n        19522617980390066529084379719, 66071216995959820899898734312, 2706716354199088522,\n        34325223142358355896809101012, 40108858423160321683378922406, 944066692697007193,\n        44418177383437416506220402012, 60946636953935107420000496495, 1369783441616627069,\n        56507264480446406103143746283, 17931840114876941924111226396, 918399982031994895,\n        76433642328292557657336881741, 51675426428487132097635878097, 1403561418752869199,\n        70400682656873442697957021787, 53781171275514296852367132522, 2181400749995012927,\n        68774380051963208133605618277, 76588338880129041082286505683, 2845578501371003899,\n        72067303437008212367905859826, 21374779452973024402313765336, 2221195904458477059,\n        69080683511470571676101038395, 38856630317623007480108646099, 3479028906745315174,\n        61046384739204442678938295938, 39744432488476164961303843738, 3382369175973954267,\n        9680044342387623809448148953, 20237505575599160873044318717, 902104188216742217,\n        13361533255414867365689649279, 78000816342547229526471376059, 2280342331400302461,\n        74660887713847091615457925301, 15423093058645697596093548298, 1601296156474024072,\n        31452512886444604811939624123, 14871595841574266684389825361, 2230286318840132064,\n        19868052490303730500625915950, 71823867883673493732887072099, 1186105274387324866,\n        14953365779947513122062389422, 45400645634907224203421549036, 2154472056286953549,\n        42535465039425903780242556383, 16399825038753280636007219865, 1932651611880407695,\n        40782525251885548061400438672, 78511543707154212541702321212, 292166688899042362,\n        51693191686141744318110632830, 61102170322613590312665018129, 1169943378705208961,\n        31611556388944035654087791382, 48793342848637071505811808513, 1007785636034395556,\n        13245912111600165083475847640, 35645277117504594250330598630, 1441365651392587419,\n        73202388964070610103986717709, 25338500400731290694141554538, 1228991475364208588,\n        22161819515775086818840675923, 1755718896744977051436633999, 1274848588256343605,\n        5060074426792132649963601505, 72760648500446465766205294002, 597512319846127711,\n        20017271135461380398104350434, 53616078439302030060876692901, 1348454741361925129,\n        61526526525087518328077601388, 40483299090308702798294659121, 1301024912456818047,\n        73362281651948330040634414845, 53973817690807489230029327785, 2722309560099000645,\n        25599239656689429003294277029, 48919070935250398775431078497, 1086700020893486575,\n        63164932524954652354608775000, 67382720736917245548778025133, 1232550285833740777,\n        12240211311651913602354521009, 45863397608782781468428422606, 486150435427238698,\n        68158250486432470147265310834, 51943349739820715335008866060, 1206124594856817746,\n        29392112059669502866776124005, 73570525303323265027194931277, 1294311512342118339,\n        73536761633818650102107357146, 43396852776159692489319842645, 3100664928565186489,\n        69173834052021715348487569952, 12963657117124037069748544175, 595969749979773741,\n        23846657396113804068494726709, 28459237038467792010025830266, 1588706236730013730,\n        65844828269036915917122666085, 8763838515273385936571926148, 806538396399929711,\n        70303560432873316109169701786, 39849503450796555439080418992, 2691448543597771881,\n        19977565294104150226046294007, 23037870310861238275750145511, 2774819424805492031,\n        5542989083971712322889052480, 48069908884929666167953865993, 2617169289886535695,\n        555550733618393652533555156, 60702575584742818060788272928, 1461743199604348465,\n        59276182258207350804200259975, 31387182037341373939338116846, 1068102798609979768,\n        44184702854344105802937877632, 37321138902750485113935410207, 2854933811583699565,\n        22767357387740906218666795516, 6366191246177779881456742516, 3195384445698138206,\n        37872998675613702081528008657, 28840574403232847345031061065, 83910503402164928,\n        19755391149815350468335395114, 39043332308194420648157422125, 1654228368548997930,\n        70947376749147558063167188631, 24201334106019745301723246466, 1670583641056305059,\n        71809556624811378573541740308, 19157141666058607925293062313, 788233207177409918,\n        51121444321675109855274275776, 52160798994900902472949726737, 898362639405526294,\n        30613730652815226468507282667, 7897680665819472931381712776, 1302127816289765463,\n        63280509565215594481159079396, 13096110961057793460350790241, 1444299871117494140,\n        49521672423035916340216260847, 23829786225911508217482614500, 658783852287867243,\n        79194464295132867012799283903, 54613184063390672578212050582, 2402561193352151379,\n        70992398180682326001128409859, 77837924754578017979352295535, 364046467776749919,\n        40902535605905920275276330915, 7081283242415479144989370261, 1150838178599168977,\n        41706584932086192525773345724, 734561825688999894556227338, 338250869364858795,\n        46410082837237624653278290828, 3382235453358846691373790062, 792185139979883753,\n        57157497549008555576513636801, 4150468179856581125077738018, 2366680748996326578,\n        77517408721910404766888807259, 39612192336508772422964932709, 3231256460430934357,\n        7219802939464090449637646684, 19788415902984832852694111534, 3038128947884502812,\n        62536678601484129584648595154, 63996452901180750168291789676, 1269553517982397303,\n        26810328477878916320917617369, 9157299788584675576337227844, 1807127961076227910,\n        63513954145219307774161123236, 59065739004437351267127302919, 1973610681660339654,\n        15509781709481541920234414079, 32449083186905685239263295878, 1866094211887665808,\n        42716628158800467615103861259, 9055167045081328991542855030, 1311146885080819224,\n        68890409438010957313616677601, 26634194028956222931522165526, 2312620439392163368,\n        53167947698368744564969970576, 57885523176959822209833785487, 291128117845638353,\n        75016381644872929623135838736, 18234094862966041847214268914, 612395162345349787,\n        20808881965849394472888338931, 7576226573611803551030369101, 3130991424160491589,\n        33215212914519613834371704957, 64415689101996113098755363802, 784582772961501468,\n        59286038259052583609265340497, 21358526240558865371079365199, 467246556292168442,\n        39006627020133026080795930696, 59686384036968521453511344583, 2028065872919113466,\n        27381200533226195854800982805, 17660416940592767438770229492, 2060952945843040168,\n        12047188718568932683343306362, 15320362999272004816590408765, 3452590417410471535,\n        39276660293739602215611979618, 56857776653913802138804505468, 1889050380696524501,\n        45591025293636010875426378772, 53845282365601895662067154892, 1465077297329299327,\n        39282007010090895625492443209, 1397026320340957538827542876, 352452643109848467,\n        56762667303754160556231704265, 34873144120595081756175108707, 2206107338873836102,\n        29787085551360123908237557496, 65276204933253820887876685777, 3472614008765285227,\n        8285705568888552908164512328, 18282269653027083460815024739, 2597482920391131424,\n        12004345832346124878099008070, 63810061854938712583870602977, 2430500331810142702,\n        50615034453375480844728341483, 58938459324118519316915361732, 1369093538768206433,\n        18756667534570017649031417933, 26835004170404446313710060823, 2668617026001542062,\n        55812243561770533973639847274, 46535234061346018674382610060, 2836219761499145928,\n        36417973710461402196270013142, 41339617472930917280444983630, 3048363223608713626,\n        1414423293921297695200883247, 58857194106124633397123497605, 933710062019667730,\n        49567595886422953595325698362, 67692849653219337050969464857, 633223786370850622,\n        6422318417922863651306301782, 6901616566551472596509363237, 2369819796401842405,\n        18586282301777790901570413325, 6760832975727168518435953404, 2997419980038085672,\n        24469696180446228880787063250, 12755595652282209055540741878, 3280251541576367810,\n        8552173119037413094872376538, 68208957182519582139577001549, 2441251372953548848,\n        25324990390700479412930141078, 21287732917187170393310412256, 2114258446759461724,\n        49757266740843539134024636242, 49575311345913687585099725440, 1099246661026065611,\n        32480368808912361139253789553, 34951105221861692578234492394, 1657152050201264582,\n        69679608898103536322368242556, 48254540319204976779524492793, 2317487136137111116,\n        70638171400518887330037802809, 4723937625862605471934130067, 984557145573098466,\n        53509954335773856915050382704, 30300080256997340937370522323, 2693573074547818883,\n        19235680928582996445440577565, 19393747551092038096914724900, 1877350455626116554,\n        68483079724230979186674614207, 40736552533889744054453705437, 3227095818480080519,\n        36230183044335825425903748134, 60629017340000271495031837652, 3224136541008590539,\n        24889650842150663885796632378, 28660833049262166662990738189, 2929304313376636312,\n        65707267602623235131117651926, 13132469621825747346593741126, 1771451502865582104,\n        63551177849075344072515169704, 18269172192185533710385849613, 2405932508258244690,\n        63560518351415187852333743581, 6635151746317543440468350115, 645103596563583738,\n        61597399764603570416824065795, 3202006815778063297638437037, 1477071878089573690,\n        43662754262816955983521202862, 15446366592645031858726415916, 511770311978133629,\n        48728514394114242793285299024, 36612201223777798020543610144, 2158620811431525101,\n        32852744344020173393816731925, 24914930053510242348436439112, 699855715560608018,\n        40053035629514932758912392418, 1759185183771930619551600850, 3155567357130212691,\n        56225110389550058730628348999, 58522120934375039846189965795, 808525106298283731,\n        37945744006205033978713224967, 66194792325901859132143780442, 1160295806573153841,\n        13562138725696632773490331024, 64683039012452684187062248417, 1966384118836531052,\n        5941445202703654091346865638, 60270065394606367704075363648, 2089987198759293685,\n        7130161187160818190365869595, 22185928642572927032943238776, 2219481701665247586,\n        72019304025246384554435987701, 58300827728277110310217128728, 1366618832132245269,\n        62649388975178761928839076059, 46390409004212351030853267760, 718108665329602310,\n        51170343786044524300925372799, 56770774823195651803252124734, 2130438264611612541,\n        62687805637594227266491738016, 4329813804331493919814059430, 513804069582160830,\n        57382132430326145958952522763, 63197400619238955635612934893, 2698514039593901587,\n        17775808424361182940062035309, 68782184337607781179952225558, 1197638400588288899,\n        49969484371751899737299639573, 25012020106675188891376016648, 2254539279807536924,\n        66140088999914123440548999375, 3681859845418156983396536869, 1319200523316846748,\n        23438254376116039509853580989, 35431220680425611742876733467, 994427736593413884,\n        62441578701683841203003565731, 30512760545463326493605403872, 1502800631166663193,\n        51651308687090986962610133549, 53136950095585196401371475750, 2156300188861369067,\n        14387446790107833490452851440, 21324075486146894436590502483, 1596359753595804567,\n        75212556738894857359379146502, 4092253092526033452456505948, 3021748565657141698,\n        50236173466735729480835680003, 45529558091969274330187927765, 2401387880839620069,\n        68520480938175902959654084815, 47403843292206438031677593381, 1671904745999304019,\n        60096465285179141794233104502, 73957182508689715153377083878, 505681790095624145,\n        10618523090695408293326189163, 68512315694854836057340538345, 2720010744430068617,\n        43168430664357147159638123275, 59122314094264220471042292059, 3188359126080131874,\n        66211240039482086869039720325, 21065528036485542574217517355, 377981874178235853,\n        52170588851677982782362311194, 38376551116136329155241434374, 2385195882736354955,\n        34977245071790342238156931830, 777791359661978810430081478, 928875965411645186,\n        13650112852818976652159700982, 2692500972540596674642582224, 2357745959014588216,\n        34169072164020198595663253764, 78021225865079274701434579336, 813403944471069695,\n        76088778939975537331795789042, 43645304217750680719729501084, 288202029667042008,\n        1891402838873668544086710169, 57213089231617852140981110266, 3381574457480393910,\n        39921818220487516031932784739, 39944508709767440041151733125, 1649168221033982257,\n        45530383567361630684482039493, 53081511060100232502213219917, 1802073361282048098,\n        23334811549628507921007123344, 16596970303365577954871713785, 1665583805872937258,\n        53753965168022602504497453157, 41054807205271495364287110762, 1927990876064870406,\n        76407769675323420814414067213, 48511134731003110085594145578, 1347801163765193669,\n        8214323711330657090309369976, 71913269055292906685092897848, 1915846453994594156,\n        43489420228624929154806514503, 16764809873758550412189946994, 214362375989094646,\n        9368638340277015320220580450, 16619335858468917913702445087, 3140790252292613391,\n        60394356614714152369087039902, 45960505603592523096513440310, 2298512572978201847,\n        17351239657615002292878417096, 64714223964630226856969959605, 290820912776475336,\n        1378655495801781847406151981, 24175453864471233944128026598, 910842328001829906,\n        19563940703767528486622530035, 43991422954119864953815840933, 750998496984971129,\n        60530038184241887438252296880, 34486968179760578736275184755, 1619507507896564262,\n        10933512123595416531844917641, 7277503973587905363400227299, 2443983425829751695,\n        54223295339633963698017555089, 66384853908133827564321289131, 838720885427564632,\n        75593558855158051658747745369, 51227306780896804084925966821, 2926976053789927147,\n        15714169090582077975038678195, 24387512584420275478278879267, 727527209987614159,\n        65654825514483349703080760494, 1450198418115100636602774467, 2076611581342042775,\n        41184248004268170901317119305, 33105343018989636806743588598, 159902686522476638,\n        56189098057504423521222277022, 25361643859401103967207715795, 2138787884566491196,\n        7959128533613988213330273744, 72421303642716385603572949125, 1864202360502401900,\n        57603287535191824800065148860, 52704721295417160291548777234, 2539337788977486760,\n        4528390757470862989297491781, 20791354199780548166926483288, 2869715200257578462,\n        49345435824931755978386255991, 55815517556695453312993213054, 2078712830649358232,\n        63471805478741514745975784454, 7645342861159746691248700192, 1927218767113218753,\n        7565779579818441149365783963, 32912314373416274940201055275, 2365469671721138168,\n        64020238005382136466712769190, 24710325986999920956029295148, 1282637434286509597,\n        22328720009306627715958117511, 51742849179706169980466035548, 1813949387751935986,\n        34070087493301935626682058191, 23909779084562840535692707539, 736980951870439975,\n        40481955466800114264039701063, 69370391691065754014233208331, 2867290022214351459,\n        48024851676482779845864046511, 35247739779074136861386770229, 235504803957090400,\n        56894818091604261046318624081, 66726851918014204319555869851, 1764079797523907226,\n        78179394170464515677357337220, 51297432309277891863209735472, 2297693142827233042,\n        27220520593784338330937316020, 16811467849648494458068492242, 2243355613398159218,\n        47877327790908945690526912426, 51337327831124610938798990587, 609572673539016568,\n        23223638736775700938961639109, 56345321137068066343132496765, 565189699728463216,\n        33232197980023913396286327547, 60421976195008333982542310073, 2993154648010376876,\n        25174955140399525595788004876, 39677747769294329177955099031, 1137388471515559778,\n        14584207576698227520601433648, 2953442929564072104975205089, 3470793463112397469,\n        57826527928562064108433526669, 33297538101764253667554352401, 2070057851167030306,\n        66360055742458450297591562882, 56384904176371454974152476691, 695049392446797371,\n        57734735562478292182446476630, 20364624426515368929386243095, 1850636793433414180,\n        63754010127947788938213519408, 63366821162168284844837188891, 906700593053585160,\n        57785983016076181172576994916, 58334561584194548557193256223, 2828396685685053812,\n        28118557883986728551693400390, 8031345872674205223159203766, 3269453791600652560,\n        68679255114224425843678879021, 75442849224625740638356045015, 3168728166013790515,\n        26005912895946385915693671979, 15056694708217923896782876727, 1731029315694470335,\n        9153726456166024408128637558, 60239353510353801747354713715, 3384798280555547463,\n        44088396921215296504957088568, 12470268842798264384903751929, 2376393590914332725,\n        49101701083589128573867555229, 75954735786564838308641335021, 2176920682836734214,\n        56872096707866299774052943888, 72596487640301717485063952269, 3166469221513986642,\n        10495533692396620193601404798, 1587802954654622110285734076, 1567420294216174858,\n        18639917474561386379268595010, 78028584762510007195883250909, 865473261187221669,\n        8654320051993024153350382393, 37633951244076580764649362550, 2523825383143967561,\n        23917853011219949860566249405, 33202933028529591587411354323, 1133338740234506442,\n        28714075332319622107042951077, 54750014304167292063638133528, 384106444426518304,\n        23084661769313146089741531633, 13938917813624902978874347269, 842589493867949583,\n        46457720666183163914302312830, 41660587051924699657853269699, 274874945568396211,\n        68832224678881095497560215003, 17961636598701259352357327436, 1838914652967022062,\n        48222666315932247354705285930, 23814315324514321593695074138, 3325279688406053156,\n        72579748564309020972780779535, 63502971343208282462081421162, 457118053269853985,\n        56981994172253633256881908872, 20395403774715972186411317668, 1623407104072816381,\n        13166861402066342481956307168, 10578447457300681437082468003, 3438358221696296048,\n        16072216899989299940206449419, 46994624182223840754205531485, 173239320879187431,\n        6880738571538237288817989177, 75429468230294313088855851029, 1660609573017825721,\n        12647676101673675317725170133, 20612858364283165701092984647, 2891821326064687979,\n        56682787996190631716573834401, 41218816251003082564663760407, 1187437447549729597,\n        26695537027136574492333542521, 53898200427588270609757074458, 2351185528428431313,\n        69102693341453927420989881114, 46331126326548708885066024296, 3101122197653628416,\n        33561649878910471660465047572, 77825735610056023063865125011, 1863551082665096865,\n        63167341205854928914710724572, 58838939911343791897872614058, 1370963640544898100,\n        26624739533172080187542710128, 54380823222080608748627573701, 2207579974912156470,\n        28292260237532856060310227135, 59918556477228566124979003690, 1157735280153529510,\n        10713903256537061684333606528, 12398091338334893808959708714, 15345429367535875,\n        11221181644696095167573116055, 23899998262859162223011399579, 3192238746592839382,\n        11980761694230391148201638651, 23569934923493959596280991306, 355517480385008649,\n        34460485941863443153968240079, 31824140534725759416771313463, 2977829986416800801,\n        20508279748183144271335979700, 31740382337567245982038785144, 2295646801000199617,\n        38858265566991215781801217890, 8795926322550838431388851901, 126926901943481093,\n        65280934319906532891481827124, 26766101597326437928450261999, 544497752271307188,\n        75185942731947342912106485494, 24241400534391757741873562269, 3325115855230756797,\n        55476547813091184908702162235, 19564787459959114380118288240, 2739976261611503893,\n        73257589853214795329658811252, 51984593862036119750328010251, 1273554794369443929,\n        13039027237524171772345623713, 27754056260575838197903136319, 1853765518746846924,\n        60774245847878985251202165977, 35338804768540750360592420110, 816029153899129996,\n        69907701450637567702814751183, 5228059520895343220628521766, 1988075497993395669,\n        31106969954390789531993990763, 67279803207812837137790814598, 1319698001776426842,\n        18930394062633790946986268404, 74816436343128134886222723160, 816844160300622915,\n        37802662357677011297314038862, 16197793751395278360760836790, 3040948654737808344,\n        18928312109164763663915885415, 1432170116678275990951676484, 1435093674620133678,\n        54284393225618397589057510323, 63485852146911808464015825649, 220449588952678379,\n        31146744168849482060174933651, 38444285841367829329469821257, 2744475881531753989,\n        20466416515976734441400577824, 56879870617739838057513148320, 1392789450474542176,\n        48124200899788250781830454083, 23643882557163479393615772203, 1279088570123184093,\n        45365329839520888201922079925, 26320234002886364401254195636, 2120088479307698664,\n        74539752454273587220350078649, 22399845860632186162530143309, 37245264265765378,\n        23954978264532560014785589792, 7309888089993385859224590177, 1479766753474052435,\n        24160837030413745606134101296, 6650692578554060479517401788, 603099674861214124,\n        17235793200288650341775326864, 43057799560550285651858178390, 1606515366817521244,\n        21906500603249911406676284988, 46818914328676379165672007795, 1968598934827876988,\n        11641418877354143832821048726, 30736355783871154366947383824, 2764386528059347579,\n        65532526753402684229546588488, 66451103210062438555589536320, 1747038298582082050,\n        59170768144497514519130056116, 58819983132691454652135828886, 2046149785090547838,\n        76589712831818603432973820091, 20318715360343403399645839521, 2605691801708651227,\n        30079718650927927837308671324, 78646499786491934002348928021, 3358855409771345355,\n        62403935237327005558004813272, 1498258601919652317151742763, 1927640518909939005,\n        12355978941039385676385889576, 15880541915680587368208369733, 2836291315732758347,\n        12840598252405114259846548555, 28108571845219274986979081178, 392808519252852368,\n        76217760202121763326831094952, 8806094240764787868700985819, 2423154669097033918,\n        44165158981699199378202945178, 66027346146886652659628882237, 2554749702967302582,\n        10543228991417219155779707386, 53268365217410877246273461022, 2880225001813708394,\n        78434450809125079873787195394, 22358649183172381392315248470, 162877726419308197,\n        53565366577724194770421491751, 33613517871656043405870150554, 2762489320327238880,\n        23613698792485001008875505397, 559140230909356490053603091, 143109013267937575,\n        55845257587300621609590557524, 32544146768539939067707785331, 562509308946774778,\n        56380170038998558542850458097, 77548399580711282499195023925, 2922829692555625338,\n        73562668898720238839248017576, 48743415581970534813386387230, 732057410313346376,\n        19019530277107572603694422369, 32882244855340603778375325616, 1565560370837204892,\n        3016428641028221478999533268, 8424161134196647517001698954, 2026869935539031588,\n        19199945445905144254694453608, 64238295857231151560328251004, 1007721700117531836,\n        2699202767883643031676817224, 30686804140737889132276350182, 2111634361350025782,\n        68767546759930475014289850157, 28474063620159128456330661132, 3472004214203644693,\n        6967395891738383155039118650, 36174720084709358685542585287, 800820261868853870,\n        63061690424896287575302749984, 78652390992856568038588410678, 1558022294564583821,\n        17520066667417073861021395079, 40138638372685969206071914397, 3087716691478547731,\n        70937885704990443958383612402, 63636097720244163839380793323, 3393390080272489840,\n        10732413930192345022175277098, 62879335634917889174161945310, 234148431230809716,\n        47443933963104308440476885789, 24172167401339323817534694619, 2110963351919843744,\n        42572691129308029435117937229, 57884164055134546712775788068, 2170087946029539384,\n        13726223624440371938663865698, 14907576373210676289221162148, 3313530803119381760,\n        53029184934906244359225147849, 69135503838310518293216775809, 760222265325749174,\n        38404380099011386367450115559, 20265966706173273094773107341, 1476272904567684535,\n        70810145571656497243867263295, 7928774570886743163451168563, 1816396121616785633,\n        29042745261622481198857457192, 27143161660926327552853391674, 498640460354912373,\n        10280989373834907879722360908, 42329937166670135576758783598, 2101261933281334839,\n        16521873869726722507627298412, 36939049602320465141860494415, 1620465377295740171,\n        79214650873147195771895202612, 42562638946461078554991475473, 1552320458126419367,\n        32229909181470868470637750867, 19222685243114110314021393212, 1489355770999370819,\n        39041252969998039615405479308, 53693333731202887990336345210, 1287429159902162733,\n        19554246207431295823531343041, 28971542169381011635686663903, 1520637876336823618,\n        9151648019586098515950422111, 78075267439710694262564852921, 3194762383097050716,\n        45815191553035672383674146055, 8669504624347990523300918693, 1036525664730090400,\n        52781487553992020099170819787, 43385052899589070539741597385, 1411883722347725388,\n        25251579752221622433118463610, 11259611865123405949688556786, 961366560240297714,\n        43751125719382889715641791807, 37373631396771190629085953492, 2746015254499819553,\n        79030510786303522531648505174, 59606510103739057375354192918, 3211605294511853720,\n        12705642381573187079529885327, 21140311384769105373469482554, 3158232076416063760,\n        42732494848117041910241111771, 46990413162046063841260018252, 101884095564631349,\n        20885908215045176468217849638, 49911433879619217728326160947, 34206783477452843,\n        30449071293689711214608878995, 56467398869854130850211689179, 1063003907960831341,\n        57363712255768108632945703445, 9194931447986642000255006779, 3170459824581101842,\n        50289813764635481990698481272, 45530779432018979153954870585, 1677415574486577255,\n        42896744661287389681624807210, 42475991580187164382547037333, 488310794782871321,\n        8494316283848923281617077113, 55252344138391898265693231428, 3099030973906915991,\n        59477135345580700633451321325, 42017993741978780871639946740, 430068007738004889,\n        34577566952833081721023553181, 26189855408887708920438942265, 2871193194474558219,\n        47674232115844516603274599733, 30553904351815630711156369010, 1477538677812102774,\n        1388442041955870235380138915, 57930576884521216128297914725, 3460657932207238008,\n        11398155336530186720519117498, 2727546074176088253624052404, 1317761197101014491,\n        70366981422484011085854326549, 22759832727072828855591128939, 2705520319196787213,\n        4375440069235403455537113325, 59828777682142784201380163911, 831349612971453978,\n        72128105932282571191896763091, 42625904603603114536718460933, 1688033610232261002,\n        49971711412961872284305489868, 5685428844085838491393612868, 2902463386883616478,\n        1462011676261636348649713392, 75521045069512340168174165638, 3410201587853261875,\n        31584359112500635408632454678, 40883664075236085448644612360, 43325408261224117,\n        5273530322633768323473504750, 27533883131629754636095392079, 2087261957914540782,\n        59977476519681194484731094446, 76649314853893272332803756443, 1400628399536918208,\n        25353351508592832633162265887, 40525116055585294477831908329, 2344597267676558662,\n        53703560057879096905767946721, 25138770781070927540985423264, 2259998040712605822,\n        47473081165148425433419997974, 73868886471277136678823328729, 176787416926667436,\n        75377031055594200543079668919, 52770558709340920285787794058, 1518281164737047172,\n        77124129457115143209742331763, 78645003391616503141741225273, 2019277237935035954,\n        7587574192302951137905933566, 28628294458473019077671316865, 550290136177164371,\n        19074226762717232426179058340, 22758396594225057945875204983, 2498936233621134610,\n        76999530490750558239103676398, 65135669949048155211363326580, 1423991043962355154,\n        37335805626741583741656449995, 40593097814210745136182474626, 2966390142789588885,\n        30223242399796682892004587810, 78376816113582815829638932892, 1463656971896746348,\n        41383580407920968403351164001, 24969714932760667846823306071, 956999381826496853,\n        49256232049752948217228127185, 51540182059134980854837097482, 1647684462989382307,\n        57426499468828957424640320922, 62730659340792357646956961245, 3071657156577134464,\n        63335879907556537554563041432, 62498612818877950917983002162, 1436003249532053683,\n        11349255839677542268150482591, 41279394671324034357977478578, 826557451313155989,\n        66004385696655303385182767894, 52359099815756042989967228380, 22235608497277658,\n        28286541052666040917625762704, 32592851150331888321069412349, 1184017278293566963,\n        72973409518859306576512426565, 3486799749018560900746806815, 299190235574712701,\n        711612458398067916342142816, 9259249670028500020555307872, 609158142159552812,\n        67220763941589636441426083171, 16760843895098336992442126606, 1345795364493008133,\n        15296513942594919135016645287, 68608463236766558304606827028, 1381371550665668897,\n        20064196578923546129640989536, 69425573526241457511242798806, 2228506017463751465,\n        18582306081405399159684879561, 63116516347908000146205298679, 535219140171530884,\n        52613986159444494557862458702, 39594704801686273276643245904, 2751734549937881318,\n        5893993830705760600977469912, 74907562132226434847663685323, 3023820070251708344,\n        21316015224503445615252564178, 23269109635902779527011062895, 104761184999182672,\n        28261716630361088164901976724, 20574628043432417196412502878, 719711668185856350,\n        40910180381813073981177671387, 18944547205738993209583490603, 2493383880037953227,\n        73114149365069440421856075881, 43120946582787586476163644621, 328434080024373030,\n        48898635605819020603930551874, 12784126734511948911926721533, 3124222755205233948,\n        77742924820311165010545430381, 72580673866559170925157026378, 566634811342461053,\n        57099182637839379442208053708, 3589830420645934620828669934, 2295727074747015810,\n        32439541647203410390711723847, 42663810148357093195954811571, 2680524866872859716,\n        21526926401550567056406469766, 7959376829106786548423917048, 653911900900829613,\n        15063944045348161730828239552, 9722385057102325056836033474, 2803404462864903717,\n        42080170588070914165892103089, 44454875409140775796537985476, 2530456863580389708,\n        5819198215186178302955456649, 15135567007784550629666288132, 3384246539453657417,\n        925622447146604032733129445, 4333057264792887411953055738, 3002541994424164039,\n        41754428439554501855922107514, 39288407810070401834339274846, 1286279039640895489,\n        33734643951307860419083827268, 22370326849513164917373853158, 762863385297287464,\n        69040530271856862743081755942, 75380867755744849077594324875, 3395257765244974193,\n        66060843203110160605181136702, 15257450503032391528378966200, 328440883177033847,\n        28655689741490002616482645282, 49069661140716827965924957056, 1656640295720477279,\n        1559583184028945344888969013, 78889485336654774286314428915, 3203828680185371681,\n        8609068398587374641578662851, 43726248997139037922827482198, 1072236507202330065,\n        24508606437206072170038754477, 28611599477493973960843217950, 802107800901185541,\n        46924169090897477333550480023, 68873042784199988197747944484, 299108082756982437,\n        52444851075795511514874013276, 14041505305840510210935739050, 148956891209173515,\n        9658600866831505875318150915, 31365038341462602900154531639, 2625336040404158377,\n        18601602762762226836645000341, 68549672495909230679157610073, 2989810208420269546,\n        36322762014733472601033619544, 11605676835801910864336761087, 2264126358707655645,\n        67479471936348092540079294654, 59924145860746578356488179420, 438395056415274978,\n        51985987787315271347346410522, 76218650819106409779401833822, 2860598278579002594,\n        33368482403360105492443624910, 32627666692975476221496504116, 134351033756353159,\n        42637767374710217715725564617, 37662683545083330701330266176, 2920851140149804794,\n        51220562565779487679808365925, 61840430076341765362472220915, 3130717076166602545,\n        72698992475438072361326585769, 17571404778930631031816176765, 687149634289267880,\n        48253111731548845666093066270, 78489311270015979883772936470, 3091234157935605260,\n        6643591456939672230073175614, 19328867139022525441466371579, 2791040674737353861,\n        53597100727319218513181160809, 19900126526673340526438458011, 1865006918866626297,\n        20804175463693861209149216946, 22317467263603610818193484429, 2768683994026745772,\n        35320464100547784411390522810, 38524188073725156328258609649, 1227520630882832221,\n        11538782110964158304096064403, 69152043779236561057355340250, 1744914323183998132,\n        14691035928443344411718951674, 57547122548161467944531035548, 1631908803510662474, 190,\n        40450921824533867279167895562, 70946022133127283760824617630, 3000664270972961191,\n        48093245999772234903610269372, 44327997312253948884062132289, 1737294483489341914,\n        37084992138137494274744036176, 23760511347025827583666263994, 1042981253087507877,\n        23666095820386996468292075360, 77349519162803921981677766998, 2958953845781332681,\n        42384668075843039795122023298, 37315978469465001087236804993, 2200404290198461043,\n        38124844949181170272263974543, 54631981709179182160134198735, 2609812324125764769,\n        53985827194114556253479368246, 5629177962567747268834968197, 1325886919465633915,\n        2346868964245518014115485215, 4385693852638225491156681164, 1951588988088179938,\n        56531965585098796493588133698, 43213180128744062444068433176, 934549163870333457,\n        34161227989005076716462597146, 79026088180251029470217355435, 2757253601891572138,\n        33591144150500210944928654266, 42614246106693704831516872897, 1909560593659972241,\n        52371010295087468046775789585, 42919532749688600533139636397, 3057453994091700571,\n        41317809308105370359956637657, 2717505775487926074347408688, 2063022015356633869,\n        41203100516700130895419472106, 57631296198651102574368873428, 1656781199967893165,\n        32064579297754445132228596644, 45192157079857776817575062910, 1525086473247660872,\n        26008865053856329144201702868, 21443185296810742386785560423, 3451429801692953445,\n        61685176779204050524135945527, 54361112495010627728615893671, 2651925382084867101,\n        75469865207926262728266125500, 56278135408240755100131738284, 1594498783156814316,\n        63946950067890444902081492109, 49564071122998942814371329923, 3415867282928246151,\n        64830489359722993398411465591, 29968570339659999124851054175, 2326824669450131684,\n        46937752650077434727332316986, 69842036748928349056107689193, 3035041410464344234,\n        11144509122417114977342474085, 39825118755195259923230586837, 2705336335576573562,\n        49174264139075068568325550423, 60080763137806416690791096939, 3355628720370484190,\n        18302965224293898701088697907, 49038316049628516950305433775, 3255761958123742009,\n        72873523332801335113289087713, 52000290047171732515255905345, 2950440489291530664,\n        47309146375316716999515864438, 68980555010863521943730473952, 1316240002196414548,\n        64050947567240109315720014094, 33341815292081434973571287882, 3055580051435088035,\n        34094437713854689246900740048, 7882430329816156068076421023, 2560927115277878432,\n        39948055491908819847104337486, 64486623735137532322095960536, 978597342104334756,\n        46132542404104916292682747422, 1413104207471146591855219273, 2347193288389929512,\n        54795402034798186403322526324, 78116261599045207628575392412, 2189773419775238105,\n        67796362078761577778525381104, 10905733328357963119747535086, 2600351097942332062,\n        74558970493466027521719499995, 47586998550115835506294375512, 2421604727956088143,\n        78139130272615308513143004388, 61610803105595740996349724691, 283553907036967928,\n        66376123114034916197197530892, 46735813450433107391769974428, 1399646963079338271,\n        49775606409878583450825630515, 38811538617455577080670837314, 3367599932402806400,\n        19580123427887904955465089373, 36660445822145026916973547925, 811986103396393512,\n        63994035106029029796535378596, 19159021825422706612566414640, 3307871774421619419,\n        37975600923174955886943302745, 28842694125225326918454185432, 35384780461017678,\n        26944976866446999991659387557, 15631361734014548874412341813, 3156341289904847581,\n        29738561002017587143265588332, 34494367464962963553968282600, 2288855317933984112,\n        3343465119193814337114506361, 76093997351545472219719880882, 293625360639159605,\n        57519280192453541667431713829, 58036458144457507945086870168, 2374602797288119360,\n        40180399071045313537513112301, 45545070263237577349101079224, 900713183572833927,\n        47833389293115922424244518395, 66982703105739823928616888581, 2654366660999562313,\n        10065000221312775070191266319, 72809789671095580032614161678, 802172040561293693,\n        55368020234227431980737115907, 76643845572545175002263276682, 708503903748134526,\n        65628898383037856436414820668, 44987690109166392822480750776, 3210405199827369831,\n        51324094763595357094247773895, 42390569315456882242888210088, 2944190347284502071,\n        68267891968676317655362193380, 52805756681285775730959367576, 2949416035652831442,\n        73832266040296569072647313247, 11677242953417999458586013286, 1047826440739515703,\n        71819481911464365837771571445, 70023410957568017485024613984, 2919761773381184068,\n        14288692677127157862741800601, 68614669904545932974862673421, 3192069934694634236,\n        40911143146951363652948679819, 36726340213652165777148450109, 1134186923017082678,\n        39288195491353244459983197743, 17887004850575494809668255219, 1531128498427138948,\n        64165476640540843706670205475, 13702244181383034389655248257, 817834689673160984,\n        52267338902683651354759035856, 42857200156150037235118651312, 3009153052539239897,\n        34320922125363455722479497405, 18968439930517864980082046244, 2673940587962061873,\n        58383773892828556703200586141, 56341206223802976680038334024, 1381294659878719620,\n        25972187965986496556105338612, 57597724818149580282170272741, 718249950847620143,\n        10030162654640603824430617792, 24012910938650168201548701895, 332905499918561779,\n        28881928374714801333028252505, 59826687165903310449258896525, 1463408266661312830,\n        29696478604593663938654649536, 3154875466397226531712866545, 2165811029588820454,\n        6773031306704665486417309052, 33915282316478439483191818718, 2513200990560639573,\n        51444272716787176934038291458, 19603969718274004677777093801, 2816445388795899107,\n        58663956475578564938056774152, 75449916049465729970048375994, 1850582220984507067,\n        2717063265636734738816943516, 5698933408460981195609108916, 2887271073278166226,\n        9450308594527386485673632232, 63115518759824791635903443670, 971194038177272123,\n        68812427525427462885622219316, 8744069172828040174922999115, 2797585720787820469,\n        23026826461844490209531848498, 50474193491258401638735456515, 1002340271538933100,\n        41049130144932077069155659068, 15466607953410033055991738708, 2519210478390532931,\n        11290073692338294074276578698, 72014254367499130813772405748, 1686800809336729803,\n        30278926732454437732479619976, 50881336802818476709618628137, 573021287041488439,\n        45690577968118725375870194475, 31185194364113358765545311536, 907930853161247845,\n        77964061362037061551457386497, 54376254396829110557541923200, 3239802174012859802,\n        65473302861737894714138164986, 64581938164450969473913721652, 3275516943282373663,\n        30846904531727405349453690550, 63583558412573828948017764851, 2163989542870436852,\n        2400792803007918424012318271, 30639803631876702815321483746, 3189111146390237937,\n        10145568605744146423520976852, 40382598576055813767839358907, 1234887122629588772,\n        47498387938009547707017086754, 23565852563105217674555472498, 768277014272407291,\n        59110732999475123036601052485, 1763111872969717290304917834, 728482575993746853,\n        56374031960614756724135237003, 61575344650894680756052640348, 710325870438485678,\n        58260694524249208164889033602, 25732939095705340562123325091, 595123417830690515,\n        37306601038994061542511366795, 9230859104606648356829461415, 2875367619268290987,\n        12811523822783507855333992414, 11392189622774025858679475022, 1627100875721826955,\n        42599258235523529689355855640, 16954806916159126406110456588, 1599894895476406066,\n        71075381214477574781590766901, 58241455774089003078852091727, 1228104457241813003,\n        65868997142393073349415639739, 64892676944490778005107025183, 648617402067600869,\n        78993800308025407355823171383, 6282667670757310084489733446, 3377108116009550520,\n        57243501871268406486830572023, 28115904634379882985078300532, 1708922084415865576,\n        67949321587323242732403584306, 76239957837194242460534311090, 2694214351716774280,\n        610215543453610198523091342, 71811630049524701304274053525, 2937442692040545629,\n        69655254321434305710032875419, 66375425410483544999552319669, 96178716183830070,\n        59900767723474347501249672755, 65216079946570975781322466089, 2129695576777302915,\n        20888767033089281923565347389, 15191454241863216364031415000, 531878622784736208,\n        28583836985073814316831373616, 45572523653553757103301200665, 1757568523662200238,\n        57174118983155650019938820916, 64643768165700705077606332345, 1009148897373611501,\n        48414438075484767271630846112, 61716851731198590526996659578, 474703924760261253,\n        25704698898827313900249977971, 5855768232653670629052990762, 2276916810698933109,\n        1845567769716814629579566922, 64365890960252195832803714828, 3257319080358699593,\n        31200193754301667797189026765, 356573141297944541261179963, 1205371430851820941,\n        76350244083872037317208263288, 44412494090008158984247804183, 1800399223062766370,\n        76942069098092294285105876801, 56987594268472601376982425007, 1252977617893570080,\n        14134849625381870675217544560, 52168435515647142488672310467, 2392534556309902186,\n        8364470284806251379580318450, 30538927308023667059082629355, 630663140336518709,\n        16669076987864704728035434274, 13917050745780341503599435561, 443278579763178457,\n        3481439263323923521465245504, 6368610287627734637639958833, 2416403693596720245,\n        48686794994636533464272046155, 35989859826590642406561642869, 2464399153154317688,\n        27281643795020090517360702094, 18221594513003313269996680998, 3135507817793870767,\n        78029181939216112352894006028, 31456712406712519764387086446, 1698472082935352978,\n        62851348691087913852519318189, 55530853993194893039314688188, 1814731885053608693,\n        77603560310902460330908742219, 65323690490322269352952677069, 3099941160781535654,\n        73328133662212199616256790133, 14463004166121823492610304208, 1880864478789824775,\n        64467782513351306320827279376, 40329123215640406006526076535, 1701173573885234257,\n        60716057144133861243434405831, 77516722546855896633586491216, 2436026252307240886,\n        8468454843892732271916855455, 50085312834581473044611759105, 3192618969433926709,\n        52354122485981876971957712527, 10352736900234222455983351630, 2796765909296179783,\n        6063115632921483122585128487, 58811872058831807843880128742, 2266885237296667860,\n        28906452775876389261372286224, 78780473187024917695692898318, 2638659076824709371,\n        66564428223870535242436925466, 38139656967163073775253876904, 2442002648386197800,\n        1868880194916917938297864415, 6693566199902538337603100988, 2073716230601886001,\n        52327843935935087276737070124, 17657898286209760093091253499, 2687166738940243648,\n        9148148819988784633602318552, 70801490411025605432623689395, 3455634332459219324,\n        8947829447285469941102576470, 20400335818096918747940462266, 3321208247002273232,\n        73614561565682797886739874522, 6795959193403179504933747913, 642560154013769769,\n        18239189921553779402477276564, 45816773764077854412950912282, 2793171078500981037,\n        18619271780158473742643005633, 77228827430936573647950351324, 1757731373848649799,\n        53034983761133153425825273076, 68294603354397515461302385260, 2083456314745840520,\n        30600052974422633541329848552, 77128630459639085585665103913, 1050603454662243296,\n        75652056904078538160508456464, 53162468377873426525793530854, 2719603707242388330,\n        34855230677560572059745116029, 21085025146958618662509016660, 987605033399877191,\n        11963089017296646672411867150, 62971626447790295154618645447, 456840443392288024,\n        11869191755671958723549052278, 40128284653413220430128104716, 189563440540870114,\n        9695561268106378447088971203, 21823487054626441130383931656, 2734293447743021711,\n        69609104519056677181390490157, 71200889546199560210155541845, 246167865466193786,\n        37905809896767389150422606878, 57470301451749710442347427760, 2796922383183859544,\n        45208377051423299680856621334, 67841910357089895415568137410, 2546718327086965079,\n        42942814645786059091477811959, 7345525297644785709341907045, 1864695073847346538,\n        68550373647586273901127222745, 7595984495463234775997722540, 539019582118948018,\n        21229106240971577430173959872, 355489099096982696983360314, 1423417193732822044,\n        63375445249134291642283759803, 17872228753910589593408633601, 2555291599511166225,\n        60003527446132210367842941097, 38833062985798517570737565874, 3276168081630761699,\n        53843079696879119595082698850, 14741529842688195319319583353, 907245791992998526,\n        26038879843109784017590191621, 52870021862292282946299950738, 2551874415987501137,\n        21322892280957701084225453366, 75661114205061545844586553503, 117796863738671812,\n        24398753863288847069364597381, 21684915865026077946696284264, 135583255326742356,\n        2655588879687354604673227322, 79039201237393058879423153631, 3317024129879014016,\n        23746954150282692730061785234, 60027140930927383635796507471, 3355648802066345288,\n        68947465546109296063720184403, 31455814437857417274841826234, 1519536043682109665,\n        30435322080793497982418328756, 9873726247019571115887459992, 1420261351751878633,\n        8585886436263245602317198450, 32540229230424385962836906794, 2745738913484719809,\n        7982801416975554910797438755, 30243096961240548806330274467, 2503488470089940122,\n        29353559884074671348821657410, 46717729834754386306503503543, 2105360788965822685,\n        50465840821240474641910604607, 15040977196294653353595904649, 810398228078955692,\n        36586090966527583193432941521, 32527175793542169050006907744, 3455947091008935733,\n        44074008444014778795777359545, 7456569852554753527152213083, 949162702954113477,\n        57832034254825399001095793755, 13246746327064119823164384091, 611867871464721223,\n        36537303992371088725124959830, 69857744090199184577151809812, 206457374462666528,\n        6013455380406219799669645497, 20448402513472264526836914471, 325092807320212227,\n        63160082731405578355167573987, 36564014311121114059105963647, 1814313817880089370,\n        17005118345357106768558634492, 53085072710424741174912676715, 1619571968892417470,\n        19138461106192599655481154848, 19687745769458599990486996638, 227750207136530302,\n        41840715303892328405419792549, 75091246731323848562281673856, 2788315296471857334,\n        29025762131864386432094011918, 15791231239437877140622617758, 1397826517640649643,\n        72635188711829501440099099620, 75318800340551682707664358685, 2740741096141989738,\n        4869127616709023482114488328, 3283108917519645249691922910, 865142527842900682,\n        79068146410754304112630559679, 29375635809771785283237165407, 432958718679290532,\n        67559076361367519178953294978, 67038253456412197251507470684, 1004802196401525191,\n        67228025707572955057913543358, 17852216699527548833916842366, 1910372761441328295,\n        56957555065398727322088968760, 53191601204729005381639778844, 1103590222166366118,\n        24100256211167092537239064279, 73807086702256985672123205004, 2306025827411644748,\n        64792211448080522297171362290, 36706906402755562273141864291, 1065008427413751571,\n        13463340504647469475951896803, 59947338296219741713228977241, 2173882008540311631,\n        4862253014510218097117696054, 11607936691081186610750713918, 1352109173894748794,\n        16420085930869379924008206077, 29182151126437541095578546416, 623105004098517689,\n        67119851516068086960310048535, 51322151618996056679294697368, 1574983744056110755,\n        41390101113760352683192758772, 8967911802370657983422789330, 840354419638281185,\n        71915557106300755083401266600, 77107430853219681720775737957, 3439700714207088817,\n        1146682033918837697324964368, 36880472216783202890543251211, 899175063033217790,\n        42361394560697623902477934876, 70332408898655902640766774594, 1333997318766615187,\n        23642424959739633709165327414, 17009251402196439892496588089, 1593159218823761418,\n        49454645403236994066018055536, 51820936777381802535321800249, 2549241518396596710,\n        22461854435533900729564787495, 44017272258907963598913965734, 1945511523774940466,\n        44157409491419897843892091791, 14298779472580729896379647791, 733835864005545116,\n        9597260824514711237960317250, 8350731294023158969467432777, 261753821612704415,\n        73032685205373754311610951955, 33537093124336234947344166476, 2521616476748679810,\n        67154218799253490003673403096, 68502421051006686285017907444, 2462108649374530883,\n        69994932413577605250455248207, 14388271860579248178608808979, 1527716660089777953,\n        19228548636015502423608118313, 27152949131129296746050631558, 2690497165435118984,\n        884466935258971873076949310, 76399258817262437267755420200, 3439485509091611651,\n        2013654784442386105262905202201186439758378444822205495631232048445674224483,\n        39158007757412093876313608663, 65407360820854140004948361048, 2284908109112677969,\n        4447613452168483181370820769, 15508094737828025397988454114, 698461499747732182,\n        25417214924745512131112372302, 70755921431737572898561593666, 4897646118225797,\n        75962679284224210182109670378, 34232834934904182714446079712, 2440956735466924032,\n        27960883735167344498496207750, 56701112460009051457339735423, 3019426709056655079,\n        12157750687307034187807607968, 73052116249315680545653975018, 1408336660070536790,\n        76361516533972882448109586258, 34360466092510705333064523338, 415539299738748454,\n        73199682285624051964267904115, 56566393082933685752558478277, 2602514150991862089,\n        71208685306944557890999666300, 37489821753500538193888670168, 3478701521232935226,\n        63713383854207756411214621476, 57650535883389580879738476613, 2951687960965023188,\n        1123233161966257160519764136, 20027680707029316142401222460, 3115267703405796066, 24,\n        72829490910025941028874027023, 60294702729134876255836990091, 587406458043897774, 0,\n        29278821361638737694503336775, 62044136809265621035498672362, 454824414591434487, 0,\n        340282366920938463475250044745131196184, 340282366920938463471381874204636563585,\n        4196216913619740352, 1972319070739588101, 66443987468193530372417098085,\n        37119323691166654757308615853, 963990182193152437, 0, 52362201687457778066111457517,\n        51359002383685408033875559137, 674930317098375997, 0,\n        340282366920938463472573628320122907480, 2921978634228650880,\n        340282366920938463466160822491329246447, 1332489572289759370,\n    ];\n\n    dispatcher.verify_and_submit_fibonacci_number(calldata.span());\n}\n"
  },
  {
    "path": "src/contracts/universal_ecip/Scarb.toml",
    "content": "[package]\nname = \"universal_ecip\"\nversion = \"0.1.0\"\nedition = \"2024_07\"\n\n[dependencies]\ngaraga = { path = \"../..\" }\nstarknet = \"2.16.1\"\n\n[cairo]\nsierra-replace-ids = false\n\n[[target.starknet-contract]]\ncasm = true\ncasm-add-pythonic-hints = true\n"
  },
  {
    "path": "src/contracts/universal_ecip/src/lib.cairo",
    "content": "use garaga::definitions::G1Point;\n\n#[starknet::interface]\ntrait IUniversalECIP<TContractState> {\n    fn msm_g1(\n        self: @TContractState,\n        points: Span<G1Point>,\n        scalars: Span<u256>,\n        curve_index: usize,\n        msm_hint: Span<felt252>,\n    ) -> G1Point;\n}\n\n#[starknet::contract]\nmod UniversalECIP {\n    use garaga::definitions::G1Point;\n    use garaga::ec_ops::msm_g1;\n\n    #[storage]\n    struct Storage {}\n\n    #[abi(embed_v0)]\n    impl IUniversalECIP of super::IUniversalECIP<ContractState> {\n        fn msm_g1(\n            self: @ContractState,\n            points: Span<G1Point>,\n            scalars: Span<u256>,\n            curve_index: usize,\n            msm_hint: Span<felt252>,\n        ) -> G1Point {\n            msm_g1(points, scalars, curve_index, msm_hint)\n        }\n    }\n}\n"
  },
  {
    "path": "src/corelib_imports/README.md",
    "content": "# Corelib Imports\n\nThis package provides controlled access to non-public functions, structs, and traits from the Cairo Corelib library through selective re-exports.\n\n## Overview\n\nThe package leverages Cairo edition 2023_10 to access internal Cairo Corelib components that are not part of the standard public API. These utilities expose performance-critical operations for cryptographic computations, particularly optimized bounded integer arithmetic and circuit operations used throughout the Garaga ecosystem.\n\n## Visibility Rules and Architecture\n\nCairo's visibility system restricts access to internal modules by default. This package uses feature flags (e.g., `#[feature(\"bounded-int-utils\")]`) to expose specific internal APIs that would otherwise be inaccessible. The approach follows established patterns in the Cairo ecosystem, similar to the [Stwo Cairo verifier's bounded integer utilities](https://github.com/starkware-libs/stwo-cairo/blob/a9cc98cc78f39e30a5aea71af7421a09f764df0a/stwo_cairo_verifier/crates/bounded_int/src/lib.cairo).\n\n## Exported Modules\n\n### `bounded_int`\nRe-exports core bounded integer utilities with compile-time guarantees:\n- `BoundedInt<T>`: Type-safe integer arithmetic with compile-time bounds\n- `AddHelper`, `MulHelper`, `DivRemHelper`: Optimized arithmetic operations\n- `upcast`, `downcast`: Safe type conversions between integer bounds\n- `bounded_int_div_rem`: Efficient division with remainder operations\n\n### `circuit`\nCircuit construction and optimization utilities:\n- `CircuitData`, `CircuitDefinition`: Circuit representation types\n- `u384`, `u96`: Extended precision integer types for cryptographic operations\n- `AddInputResult`: Circuit input accumulation\n- `conversions`: Specialized arithmetic helpers for multi-precision operations\n\n### `integer`\nExtended integer operations:\n- `u128s_from_felt252`: Efficient felt252 to u128 conversion utilities\n- `U128sFromFelt252Result`: Result type for safe conversions\n\n### `array` & `keccak`\nUtility functions:\n- `array_slice`: Efficient array slicing operations\n- `cairo_keccak`, `keccak_add_u256_be`: Keccak hash operations\n\n## Usage Examples\n\n### Bounded Integer Arithmetic\n```cairo\nuse corelib_imports::bounded_int::{BoundedInt, DivRemHelper, bounded_int_div_rem};\n\n// Efficient division with compile-time bounds checking\nlet result = bounded_int_div_rem(dividend, divisor);\n```\n\n### Circuit Operations\n```cairo\nuse corelib_imports::circuit::conversions::{\n    DivRemU96By32, NZ_POW64_TYPED, POW32, UnitInt\n};\n\n// High-precision arithmetic for cryptographic circuits\nlet quotient = DivRemU96By32::div_rem(value, NZ_POW32_TYPED);\n```\n\n### Type Conversions\n```cairo\nuse corelib_imports::bounded_int::{downcast, upcast};\nuse corelib_imports::integer::{u128s_from_felt252};\n\n// Safe conversions between integer types\nlet converted = upcast(bounded_value);\nlet (low, high) = u128s_from_felt252(felt_value);\n```\n\nThese utilities are extensively used across Garaga's elliptic curve operations, finite field arithmetic, and cryptographic circuit implementations for optimal performance.\n"
  },
  {
    "path": "src/corelib_imports/Scarb.toml",
    "content": "[package]\nname = \"corelib_imports\"\nversion = \"0.1.3\"\nedition = \"2023_10\"\ndescription = \"Useful Corelib non-public functions, structs, and traits made public and re-exported through 2023_10 edition\"\nreadme = \"README.md\"\nrepository = \"https://github.com/keep-starknet-strange/garaga/tree/main/src/corelib_imports\"\nauthors = [\"feltroidprime\"]\n[lib]\n\n[dependencies]\n\n[dev-dependencies]\ncairo_test = \"2.16.1\"\n"
  },
  {
    "path": "src/corelib_imports/src/lib.cairo",
    "content": "pub mod array {\n    pub use core::array::array_slice;\n}\n\n\npub mod integer {\n    pub use core::integer::{U128sFromFelt252Result, u128s_from_felt252};\n}\n\npub mod keccak {\n    pub use core::keccak::{cairo_keccak, keccak_add_u256_be};\n}\n\n\npub mod bounded_int {\n    #[feature(\"bounded-int-utils\")]\n    pub use core::internal::bounded_int;\n    #[feature(\"bounded-int-utils\")]\n    pub use core::internal::bounded_int::{\n        AddHelper, BoundedInt, DivRemHelper, MulHelper, UnitInt, bounded_int_div_rem, downcast,\n        upcast,\n    };\n}\n\npub mod circuit {\n    pub use core::circuit::{\n        AddInputResult, CircuitData, CircuitDefinition, CircuitInputAccumulator,\n        IntoCircuitInputValue, U96Guarantee, add_circuit_input, init_circuit_data,\n        into_u96_guarantee, u384, u96,\n    };\n\n    pub mod conversions {\n        pub use core::circuit::conversions::{\n            AddHelperTo128By64Impl, AddHelperTo128By96Impl, AddHelperTo96By32Impl, DivRemU128By64,\n            DivRemU128By96, DivRemU96By32, DivRemU96By64, MulHelper32By96Impl, MulHelper64By32Impl,\n            MulHelper64By64Impl, NZ_POW32_TYPED, NZ_POW64_TYPED, NZ_POW96_TYPED, POW32, POW32_TYPED,\n            POW64, POW64_TYPED, POW96_TYPED, UnitInt, felt252_try_into_two_u96,\n            two_u96_into_felt252, upcast,\n        };\n    }\n}\n"
  },
  {
    "path": "src/src/apps/drand.cairo",
    "content": "use core::circuit::{\n    CircuitElement, CircuitInput, CircuitInputs, CircuitModulus, CircuitOutputsTrait,\n    EvalCircuitTrait, circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384, u96,\n};\nuse core::num::traits::Zero;\nuse core::sha256::compute_sha256_u32_array;\nuse garaga::basic_field_ops::{is_even_u384, u32_8_to_u384, u512_mod_p};\nuse garaga::circuits::ec::{run_ADD_EC_POINT_circuit, run_CLEAR_COFACTOR_BLS12_381_circuit};\nuse garaga::circuits::isogeny::run_BLS12_381_APPLY_ISOGENY_BLS12_381_circuit;\nuse garaga::core::circuit::AddInputResultTrait2;\nuse garaga::definitions::{\n    BLS_G2_GENERATOR, G1Point, G2Point, deserialize_u384, get_BLS12_381_modulus, serialize_u384,\n};\nuse garaga::ec_ops_g2;\nuse garaga::single_pairing_tower::{final_exp_bls12_381_tower, miller_loop_bls12_381_tower};\n\n// Chain: 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971\n//   Public Key:\n//   G2Point(x=(2020076495541918814736776030432697997716141464538799718886374996015782362070437455929656164150586936230283253179482,\n//   586231829158603972936263795113906716025771067144631327612230935308837823978471744132589153452744931590357767971921),\n//   y=(1791278522428100783277199431487181031376873968689022069271761201187685493801088467849610331824611383166297460070456,\n//   3748041376541174045371877684805027382480271890984968787916314231755985669195299696440090936404461850913289003455520),\n//   curve_id=<CurveID.BLS12_381: 1>)\n//   Period: 3 seconds\n//   Genesis Time: 1692803367\n//   Hash: 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971\n//   Group Hash: f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e\n//   Scheme ID: bls-unchained-g1-rfc9380\n//   Beacon ID: quicknet\n// ----------------------------------------\n// Note : Negated to use in pairing check.\npub const DRAND_QUICKNET_PUBLIC_KEY: G2Point = G2Point {\n    x0: u384 {\n        limb0: 0x4bc09e76eae8991ef5ece45a,\n        limb1: 0xbd274ca73bab4af5a6e9c76a,\n        limb2: 0x3aaf4bcb5ed66304de9cf809,\n        limb3: 0xd1fec758c921cc22b0e17e6,\n    },\n    x1: u384 {\n        limb0: 0x6a0a6c3ac6a5776a2d106451,\n        limb1: 0xb90022d3e760183c8c4b450b,\n        limb2: 0xcad3912212c437e0073e911f,\n        limb3: 0x3cf0f2896adee7eb8b5f01f,\n    },\n    y0: u384 {\n        limb0: 0xdfd038b83dbad4e0fbae5838,\n        limb1: 0x942ea644bed4152aa6d85248,\n        limb2: 0x43812423f8525883c7e472fa,\n        limb3: 0xba35f3379c4e4d1e3a70b08,\n    },\n    y1: u384 {\n        limb0: 0xd9aa8e74b5823224c149d420,\n        limb1: 0x1851f5129301fe6603fc716a,\n        limb2: 0x9b84512e61a5e814e923569d,\n        limb3: 0x1859fcf74bc8a580a828f6e0,\n    },\n};\npub const DRAND_QUICKNET_GENESIS_TIME: u64 = 1692803367;\npub const DRAND_QUICKNET_PERIOD: u64 = 3;\n\nconst a_iso_swu: u384 = u384 {\n    limb0: 0xa0e0f97f5cf428082d584c1d,\n    limb1: 0xd8e8981aefd881ac98936f8d,\n    limb2: 0xc96d4982b0ea985383ee66a8,\n    limb3: 0x144698a3b8e9433d693a02,\n};\nconst b_iso_swu: u384 = u384 {\n    limb0: 0x316ceaa5d1cc48e98e172be0,\n    limb1: 0xa0b9c14fcef35ef55a23215a,\n    limb2: 0x753eee3b2016c1f0f24f4070,\n    limb3: 0x12e2908d11688030018b12e8,\n};\n\nconst z_iso_swu: u384 = u384 { limb0: 11, limb1: 0, limb2: 0, limb3: 0 };\n\n\nconst NZ_POW2_32_64: NonZero<u64> = 0x100000000;\n// lib_str + bytes([0]) + dst_prime\n// LIB_DST = b'\\x00\\x80\\x00BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_+'\n// bytes len : 47.\nconst LIB_DST: [u32; 11] = [\n    0x800042, 0x4c535f53, 0x49475f42, 0x4c533132, 0x33383147, 0x315f584d, 0x443a5348, 0x412d3235,\n    0x365f5353, 0x57555f52, 0x4f5f4e55,\n];\n\nconst LIB_DST_LAST_WORD: u32 = 0x4c5f2b;\n\n\nconst I_DST_PRIME: [u32; 10] = [\n    0x5f534947, 0x5f424c53, 0x31323338, 0x3147315f, 0x584d443a, 0x5348412d, 0x3235365f, 0x53535755,\n    0x5f524f5f, 0x4e554c5f,\n];\nconst I_DST_PRIME_LAST_WORD: u32 = 0x2b;\n\nfn get_i_dst_prime_first_word(i: usize) -> u32 {\n    return i.into() * 0x1000000 + 0x424c53;\n}\n\n// Used in drand verifier contract.\n#[derive(Drop, Serde)]\npub struct DrandResult {\n    pub round_number: u64,\n    pub randomness: felt252,\n}\n\n#[derive(Drop)]\npub struct MapToCurveHint {\n    pub gx1_is_square: bool,\n    pub y1: u384,\n    pub y_flag: bool // true if y and u have same parity, false otherwise\n}\n\npub impl MapToCurveHintSerde of Serde<MapToCurveHint> {\n    fn serialize(self: @MapToCurveHint, ref output: Array<felt252>) {\n        Serde::<bool>::serialize(self.gx1_is_square, ref output);\n        serialize_u384(self.y1, ref output);\n        Serde::<bool>::serialize(self.y_flag, ref output);\n    }\n    fn deserialize(ref serialized: Span<felt252>) -> Option<MapToCurveHint> {\n        let gx1_is_square = Serde::<bool>::deserialize(ref serialized);\n        let y1 = deserialize_u384(ref serialized);\n        let y_flag = Serde::<bool>::deserialize(ref serialized);\n        return Option::Some(\n            MapToCurveHint {\n                gx1_is_square: gx1_is_square.unwrap(), y1: y1, y_flag: y_flag.unwrap(),\n            },\n        );\n    }\n}\n\n#[derive(Drop, Serde)]\npub struct HashToCurveHint {\n    pub f0_hint: MapToCurveHint,\n    pub f1_hint: MapToCurveHint,\n}\n\n\n// Like hash to curve but we start with the drand round number for simplicity.\npub fn round_to_curve_bls12_381(round: u64, hash_to_curve_hint: HashToCurveHint) -> G1Point {\n    let message = round_to_message(round);\n    return hash_to_curve_bls12_381(message, hash_to_curve_hint);\n}\n\n#[inline]\npub fn hash_to_curve_bls12_381(message: [u32; 8], hash_to_curve_hint: HashToCurveHint) -> G1Point {\n    let (felt0, felt1) = hash_to_two_bls_felts(message);\n    let pt0 = map_to_curve(felt0, hash_to_curve_hint.f0_hint);\n    let pt1 = map_to_curve(felt1, hash_to_curve_hint.f1_hint);\n    let modulus = get_BLS12_381_modulus();\n    let (sum) = run_ADD_EC_POINT_circuit(pt0, pt1, modulus);\n    let (sum) = run_BLS12_381_APPLY_ISOGENY_BLS12_381_circuit(sum);\n\n    // clear cofactor :\n    let (res) = run_CLEAR_COFACTOR_BLS12_381_circuit(sum, modulus);\n    return res;\n}\n\n\n// x = BLS seed\n// n = BLS12_381 EC prime order subgroup\n// cofactor = (1 - (x % n)) % n\n// const bls_cofactor: u128 = 0xd201000000010001;\npub const BLS_COFACTOR_EPNS: (felt252, felt252, felt252, felt252) = (\n    12124305939094075449, 3008070283847567304, 1, -1,\n);\npub const BLS_COFACTOR: u128 = 0xd201000000010001;\n\n// \"digest function\"\npub fn round_to_message(round: u64) -> [u32; 8] {\n    let (high, low) = DivRem::div_rem(round, NZ_POW2_32_64);\n    let mut array: Array<u32> = array![];\n    array.append(high.try_into().unwrap());\n    array.append(low.try_into().unwrap());\n    return compute_sha256_u32_array(input: array, last_input_word: 0, last_input_num_bytes: 0);\n}\n\n\n#[inline]\nfn xor_u32_array_8(a: [u32; 8], b: [u32; 8]) -> [u32; 8] {\n    let [a0, a1, a2, a3, a4, a5, a6, a7] = a;\n    let [b0, b1, b2, b3, b4, b5, b6, b7] = b;\n    return [a0 ^ b0, a1 ^ b1, a2 ^ b2, a3 ^ b3, a4 ^ b4, a5 ^ b5, a6 ^ b6, a7 ^ b7];\n}\n\n#[inline]\nfn xor_u32_array_4(a: [u32; 4], b: [u32; 4]) -> [u32; 4] {\n    let [a0, a1, a2, a3] = a;\n    let [b0, b1, b2, b3] = b;\n    return [a0 ^ b0, a1 ^ b1, a2 ^ b2, a3 ^ b3];\n}\n\nconst POW_2_32: u128 = 0x100000000;\nconst POW_2_64: u128 = 0x10000000000000000;\nconst POW_2_96: u128 = 0x1000000000000000000000000;\n\nfn u32_array_to_u256(d: [u32; 8]) -> u256 {\n    let [d0, d1, d2, d3, d4, d5, d6, d7] = d;\n    let high: felt252 = d0.into() * POW_2_96.into()\n        + d1.into() * POW_2_64.into()\n        + d2.into() * POW_2_32.into()\n        + d3.into();\n    let low: felt252 = d4.into() * POW_2_96.into()\n        + d5.into() * POW_2_64.into()\n        + d6.into() * POW_2_32.into()\n        + d7.into();\n\n    return u256 { low: low.try_into().unwrap(), high: high.try_into().unwrap() };\n}\n\nfn hash_to_two_bls_felts(message: [u32; 8]) -> (u384, u384) {\n    let mut array: Array<u32> = array![];\n    // Pad with 64 0-bytes. In u32, this is 64 / 4 = 16 elements.\n    // \"Z_padd\"\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    array.append(0);\n    // msg. 8*4 = 32 bytes\n    for v in message.span() {\n        array.append(*v);\n    }\n    // LIB_DST 47 bytes\n    for v in LIB_DST.span() {\n        array.append(*v);\n    }\n    // Total : 64 + 32 + 47 = 143 bytes = 1144 bits.\n    let b0 = compute_sha256_u32_array(\n        input: array, last_input_word: LIB_DST_LAST_WORD, last_input_num_bytes: 3,\n    );\n    let mut array: Array<u32> = array![];\n    for v in b0.span() {\n        array.append(*v);\n    }\n\n    array.append(get_i_dst_prime_first_word(1));\n    for v in I_DST_PRIME.span() {\n        array.append(*v);\n    }\n    let bi = compute_sha256_u32_array(\n        input: array, last_input_word: I_DST_PRIME_LAST_WORD, last_input_num_bytes: 1,\n    );\n    let bi_xor_b0 = xor_u32_array_8(bi, b0);\n    let mut array: Array<u32> = array![];\n\n    for v in bi_xor_b0.span() {\n        array.append(*v);\n    }\n    array.append(get_i_dst_prime_first_word(2));\n    for v in I_DST_PRIME.span() {\n        array.append(*v);\n    }\n\n    let bi_1 = compute_sha256_u32_array(array, I_DST_PRIME_LAST_WORD, 1);\n\n    let bi1_xor_b0 = xor_u32_array_8(bi_1, b0);\n    let mut array: Array<u32> = array![];\n    for v in bi1_xor_b0.span() {\n        array.append(*v);\n    }\n    array.append(get_i_dst_prime_first_word(3));\n    for v in I_DST_PRIME.span() {\n        array.append(*v);\n    }\n    let bi_2 = compute_sha256_u32_array(array, I_DST_PRIME_LAST_WORD, 1);\n\n    let bi2_xor_b0 = xor_u32_array_8(bi_2, b0);\n    let mut array: Array<u32> = array![];\n    for v in bi2_xor_b0.span() {\n        array.append(*v);\n    }\n    array.append(get_i_dst_prime_first_word(4));\n    for v in I_DST_PRIME.span() {\n        array.append(*v);\n    }\n    let bi_3 = compute_sha256_u32_array(array, I_DST_PRIME_LAST_WORD, 1);\n\n    let modulus = get_BLS12_381_modulus();\n    return (\n        u512_mod_p(u32_8_to_u384(bi), u32_8_to_u384(bi_1), modulus),\n        u512_mod_p(u32_8_to_u384(bi_2), u32_8_to_u384(bi_3), modulus),\n    );\n}\n\n\nfn map_to_curve(_u: u384, hint: MapToCurveHint) -> G1Point {\n    let (neg_ta, num_x1) = map_to_curve_inner_1(_u);\n    let (gx1, div) = map_to_curve_inner_2(neg_ta, num_x1);\n    match hint.gx1_is_square {\n        true => map_to_curve_inner_final_quad_res(num_x1, gx1, hint.y1, hint.y_flag, div, _u),\n        false => map_to_curve_inner_final_not_quad_res(num_x1, hint.y1, hint.y_flag, div, _u, gx1),\n    }\n}\n\nfn map_to_curve_inner_1(_u: u384) -> (u384, u384) {\n    let z = CircuitElement::<CircuitInput<0>> {};\n    let u = CircuitElement::<CircuitInput<1>> {};\n    let zero = CircuitElement::<CircuitInput<2>> {};\n    let one = CircuitElement::<CircuitInput<3>> {};\n    let b = CircuitElement::<CircuitInput<4>> {};\n\n    let u2 = circuit_mul(u, u);\n    let zeta_u2 = circuit_mul(z, u2);\n    let zeta_u2_square = circuit_mul(zeta_u2, zeta_u2);\n    let ta = circuit_add(zeta_u2_square, zeta_u2);\n    let neg_ta = circuit_sub(zero, ta);\n    let num_x1 = circuit_mul(b, circuit_add(ta, one));\n\n    let modulus = TryInto::<\n        _, CircuitModulus,\n    >::try_into(\n        [\n            0xb153ffffb9feffffffffaaab, 0x6730d2a0f6b0f6241eabfffe, 0x434bacd764774b84f38512bf,\n            0x1a0111ea397fe69a4b1ba7b6,\n        ],\n    )\n        .unwrap(); // BLS12_381 prime field modulus\n\n    let outputs = (neg_ta, num_x1)\n        .new_inputs()\n        .next_2(z_iso_swu)\n        .next_2(_u)\n        .next_2([0, 0, 0, 0])\n        .next_2([1, 0, 0, 0])\n        .next_2(b_iso_swu)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    return (outputs.get_output(neg_ta), outputs.get_output(num_x1));\n}\n\nfn map_to_curve_inner_2(_neg_ta: u384, _num_x1: u384) -> (u384, u384) {\n    let neg_ta_or_z = CircuitElement::<CircuitInput<0>> {};\n    let a = CircuitElement::<CircuitInput<1>> {};\n    let b = CircuitElement::<CircuitInput<2>> {};\n    // let quad_res_correction = CircuitElement::<CircuitInput<3>> {};\n    // let y1_hint = CircuitElement::<CircuitInput<4>> {};\n    let num_x1 = CircuitElement::<CircuitInput<3>> {};\n    // let zeta_u2 = CircuitElement::<CircuitInput<6>> {};\n    // let u = CircuitElement::<CircuitInput<7>> {};\n\n    let div = circuit_mul(a, neg_ta_or_z);\n    let num2_x1 = circuit_mul(num_x1, num_x1);\n    let div2 = circuit_mul(div, div);\n    let div3 = circuit_mul(div2, div);\n    //  num_gx1 = (num2_x1 + a * div2) * num_x1 + b * div3\n\n    let num_gx1 = circuit_add(\n        circuit_mul(circuit_add(num2_x1, circuit_mul(a, div2)), num_x1), circuit_mul(b, div3),\n    );\n\n    // let num_x2 = circuit_mul(zeta_u2, num_x1);\n\n    let gx1 = circuit_mul(num_gx1, circuit_inverse(div3));\n\n    // let gx1_quad_res = circuit_mul(gx1, quad_res_correction);\n    // let check = circuit_sub(gx1_quad_res, circuit_mul(y1_hint, y1_hint));\n\n    // let y2 = circuit_mul(zeta_u2, circuit_mul(u, y1_hint));\n\n    let _neg_ta_or_z = match _neg_ta.is_zero() {\n        true => z_iso_swu,\n        false => _neg_ta,\n    };\n\n    // let _quad_res_correction = match hint.gx1_is_square {\n    //     true => u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0, },\n    //     false => z_iso_swu,\n    // };\n\n    let modulus = TryInto::<\n        _, CircuitModulus,\n    >::try_into(\n        [\n            0xb153ffffb9feffffffffaaab, 0x6730d2a0f6b0f6241eabfffe, 0x434bacd764774b84f38512bf,\n            0x1a0111ea397fe69a4b1ba7b6,\n        ],\n    )\n        .unwrap(); // BLS12_381 prime field modulus\n\n    let outputs = (gx1, div)\n        .new_inputs()\n        .next_2(_neg_ta_or_z)\n        .next_2(a_iso_swu)\n        .next_2(b_iso_swu)\n        .next_2(_num_x1)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    return (outputs.get_output(gx1), outputs.get_output(div));\n}\n\n\nfn map_to_curve_inner_final_quad_res(\n    _num_x1: u384, _gx1: u384, _y1_hint: u384, __parity_flag: bool, _div: u384, u: u384,\n) -> G1Point {\n    let num_x1 = CircuitElement::<CircuitInput<0>> {};\n    let gx1 = CircuitElement::<CircuitInput<1>> {};\n    let y1_hint = CircuitElement::<CircuitInput<2>> {};\n    let parity_flag = CircuitElement::<CircuitInput<3>> {};\n    let div = CircuitElement::<CircuitInput<4>> {};\n\n    let check = circuit_sub(gx1, circuit_mul(y1_hint, y1_hint));\n    let x_affine = circuit_mul(num_x1, circuit_inverse(div));\n    let y_affine = circuit_mul(parity_flag, y1_hint);\n\n    let modulus = TryInto::<\n        _, CircuitModulus,\n    >::try_into(\n        [\n            0xb153ffffb9feffffffffaaab, 0x6730d2a0f6b0f6241eabfffe, 0x434bacd764774b84f38512bf,\n            0x1a0111ea397fe69a4b1ba7b6,\n        ],\n    )\n        .unwrap(); // BLS12_381 prime field modulus\n\n    // Flag = -1 if y%2 !=u%1 ; 1 if y%2 == u%2.\n\n    let _parity_flag: u384 = match __parity_flag {\n        true => u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        false => crate::definitions::get_min_one(curve_index: 1),\n    };\n\n    let outputs = (x_affine, y_affine, check)\n        .new_inputs()\n        .next_2(_num_x1)\n        .next_2(_gx1)\n        .next_2(_y1_hint)\n        .next_2(_parity_flag)\n        .next_2(_div)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    let chk = outputs.get_output(check);\n    assert(chk == Zero::zero(), 'm2cI wrong square root');\n    // Verify parity. base is even so high parts doesn't affect parity.\n    // (l0 + l1*2^b + l2*2^2b + l3*2^3b % 2\n    // l0 % 2 + (l1 % 2)*2^b % 2 + (l2 % 2)*2^2b % 2 + (l3 % 2)*2^3b % 2\n    // 2^b = 0 for all b>=1\n    // so u384 % 2 = limb0 % 2.\n    match __parity_flag {\n        true => assert(is_even_u384(_y1_hint) == is_even_u384(u), 'm2cI wrong parity'),\n        false => assert(is_even_u384(_y1_hint) != is_even_u384(u), 'm2cI wrong parity'),\n    }\n\n    return G1Point { x: outputs.get_output(x_affine), y: outputs.get_output(y_affine) };\n}\n\n\nfn map_to_curve_inner_final_not_quad_res(\n    _num_x1: u384, _y1_hint: u384, __parity_flag: bool, _div: u384, _u: u384, _gx1: u384,\n) -> G1Point {\n    let num_x1 = CircuitElement::<CircuitInput<0>> {};\n    let y1_hint = CircuitElement::<CircuitInput<1>> {};\n    let parity_flag = CircuitElement::<CircuitInput<2>> {};\n    let div = CircuitElement::<CircuitInput<3>> {};\n    let u = CircuitElement::<CircuitInput<4>> {};\n    let gx1 = CircuitElement::<CircuitInput<5>> {};\n    let z = CircuitElement::<CircuitInput<6>> {};\n\n    let u2 = circuit_mul(u, u);\n    let zeta_u2 = circuit_mul(z, u2);\n    let gx1_quad_res = circuit_mul(gx1, z);\n    let check = circuit_sub(gx1_quad_res, circuit_mul(y1_hint, y1_hint));\n    let y2 = circuit_mul(zeta_u2, circuit_mul(u, y1_hint));\n    let num_x = circuit_mul(zeta_u2, num_x1);\n    let x_affine = circuit_mul(num_x, circuit_inverse(div));\n    let y_affine = circuit_mul(parity_flag, y2);\n\n    // Flag = -1 if y%2 !=u%1 ; 1 if y%2 == u%2.\n    let _parity_flag: u384 = match __parity_flag {\n        true => u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        false => crate::definitions::get_min_one(curve_index: 1),\n    };\n    let modulus = TryInto::<\n        _, CircuitModulus,\n    >::try_into(\n        [\n            0xb153ffffb9feffffffffaaab, 0x6730d2a0f6b0f6241eabfffe, 0x434bacd764774b84f38512bf,\n            0x1a0111ea397fe69a4b1ba7b6,\n        ],\n    )\n        .unwrap(); // BLS12_381 prime field modulus\n\n    let outputs = (x_affine, y_affine, check)\n        .new_inputs()\n        .next_2(_num_x1)\n        .next_2(_y1_hint)\n        .next_2(_parity_flag)\n        .next_2(_div)\n        .next_2(_u)\n        .next_2(_gx1)\n        .next_2(z_iso_swu)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    let chk = outputs.get_output(check);\n    assert(chk == Zero::zero(), 'm2cII wrong square root');\n\n    // Verify parity. base is even so high parts doesn't affect parity.\n    match __parity_flag {\n        true => assert(\n            is_even_u384(outputs.get_output(y2)) == is_even_u384(_u), 'm2cI wrong parity',\n        ),\n        false => assert(\n            is_even_u384(outputs.get_output(y2)) != is_even_u384(_u), 'm2cI wrong parity',\n        ),\n    }\n    return G1Point { x: outputs.get_output(x_affine), y: outputs.get_output(y_affine) };\n}\n\n// The result of a timelock encryption over drand quicknet.\n#[derive(Drop, Serde)]\npub struct CipherText {\n    pub U: G2Point,\n    pub V: [u8; 16],\n    pub W: [u8; 16],\n}\n\n// bytes(\"IBE-H2\") (4 + 2 bytes)\nconst IBE_H2: [u32; 2] = [0x4942452d, 0x4832];\n// bytes(\"IBE-H4\") (4 + 2 bytes)\nconst IBE_H4: [u32; 2] = [0x4942452d, 0x4834];\nconst IBE_H3: [u32; 2] = [0x4942452d, 0x4833];\nuse corelib_imports::bounded_int::{BoundedInt, DivRemHelper, bounded_int_div_rem};\nuse corelib_imports::circuit::conversions::{\n    DivRemU96By32, DivRemU96By64, NZ_POW32_TYPED, NZ_POW64_TYPED, POW32, POW64, UnitInt,\n};\n\nconst POW80: felt252 = 0x100000000000000000000;\nconst NZ_POW80_TYPED: NonZero<UnitInt<POW80>> = 0x100000000000000000000;\nconst POW16: felt252 = 0x10000;\nconst NZ_POW16_TYPED: NonZero<UnitInt<POW16>> = 0x10000;\n\nconst POW48: felt252 = 0x1000000000000;\nconst NZ_POW48_TYPED: NonZero<UnitInt<POW48>> = 0x1000000000000;\n\n\nconst POW24: felt252 = 0x1000000;\nconst POW8: felt252 = 0x100;\ntype u64_bi = BoundedInt<0, { POW64 - 1 }>;\ntype u80_bi = BoundedInt<0, { POW80 - 1 }>;\ntype u48_bi = BoundedInt<0, { POW48 - 1 }>;\ntype u32_bi = BoundedInt<0, { POW32 - 1 }>;\n\nimpl DivRemU64By32 of DivRemHelper<u64_bi, UnitInt<POW32>> {\n    type DivT = BoundedInt<0, { POW32 - 1 }>;\n    type RemT = BoundedInt<0, { POW32 - 1 }>;\n}\n\nimpl DivRemU96By80 of DivRemHelper<u96, UnitInt<POW80>> {\n    type DivT = BoundedInt<0, { POW16 - 1 }>;\n    type RemT = BoundedInt<0, { POW80 - 1 }>;\n}\n\nimpl DivRemU80By48 of DivRemHelper<u80_bi, UnitInt<POW48>> {\n    type DivT = BoundedInt<0, { POW32 - 1 }>;\n    type RemT = BoundedInt<0, { POW48 - 1 }>;\n}\n\nimpl DivRemU48By16 of DivRemHelper<u48_bi, UnitInt<POW16>> {\n    type DivT = BoundedInt<0, { POW32 - 1 }>;\n    type RemT = BoundedInt<0, { POW16 - 1 }>;\n}\n\nimpl DivRemU32By16 of DivRemHelper<u32_bi, UnitInt<POW16>> {\n    type DivT = BoundedInt<0, { POW16 - 1 }>;\n    type RemT = BoundedInt<0, { POW16 - 1 }>;\n}\n\n\n#[inline(always)]\npub fn append_u96_to_u32_array(ref array: Array<u32>, u: u96) {\n    let (u32_h, u64_l): (DivRemU96By64::DivT, DivRemU96By64::RemT) = bounded_int_div_rem(\n        u, NZ_POW64_TYPED,\n    );\n    let (u32_mid, u32_low): (DivRemU64By32::DivT, DivRemU64By32::RemT) = bounded_int_div_rem(\n        u64_l, NZ_POW32_TYPED,\n    );\n    let u32_hf: felt252 = u32_h.into();\n    let u32_mf: felt252 = u32_mid.into();\n    let u32_lf: felt252 = u32_low.into();\n    array.append(u32_hf.try_into().unwrap());\n    array.append(u32_mf.try_into().unwrap());\n    array.append(u32_lf.try_into().unwrap());\n}\n#[inline]\npub fn append_u384_be_to_u32_array(ref array: Array<u32>, u: u384) {\n    append_u96_to_u32_array(ref array, u.limb3);\n    append_u96_to_u32_array(ref array, u.limb2);\n    append_u96_to_u32_array(ref array, u.limb1);\n    append_u96_to_u32_array(ref array, u.limb0);\n}\n\nconst NZ_POW24_32: NonZero<u32> = 0x1000000;\nconst NZ_POW16_32: NonZero<u32> = 0x10000;\nconst NZ_POW8_32: NonZero<u32> = 0x100;\n\n#[inline(always)]\npub fn u32_to_u8_4(a: u32) -> [u8; 4] {\n    let (b3, r) = DivRem::div_rem(a, NZ_POW24_32);\n    let (b2, r) = DivRem::div_rem(r, NZ_POW16_32);\n    let (b1, b0) = DivRem::div_rem(r, NZ_POW8_32);\n    return [\n        b3.try_into().unwrap(), b2.try_into().unwrap(), b1.try_into().unwrap(),\n        b0.try_into().unwrap(),\n    ];\n}\n\n\n#[inline(always)]\npub fn u32_4_to_u8_16(a: [u32; 4]) -> [u8; 16] {\n    let [a3, a2, a1, a0] = a;\n    let [b15, b14, b13, b12] = u32_to_u8_4(a3);\n    let [b11, b10, b9, b8] = u32_to_u8_4(a2);\n    let [b7, b6, b5, b4] = u32_to_u8_4(a1);\n    let [b3, b2, b1, b0] = u32_to_u8_4(a0);\n    return [b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0];\n}\n\n#[inline(always)]\npub fn append_u96_with_pending_u16(ref array: Array<u32>, pending_u16: u32, u: u96) -> u32 {\n    let (u16_h, u80_l): (DivRemU96By80::DivT, DivRemU96By80::RemT) = bounded_int_div_rem(\n        u, NZ_POW80_TYPED,\n    );\n    let (u32_mid, u48_low): (DivRemU80By48::DivT, DivRemU80By48::RemT) = bounded_int_div_rem(\n        u80_l, NZ_POW48_TYPED,\n    );\n    let (u32_low, u16_low): (DivRemU48By16::DivT, DivRemU48By16::RemT) = bounded_int_div_rem(\n        u48_low, NZ_POW16_TYPED,\n    );\n    let u16_hf: felt252 = u16_h.into();\n    let u32_mf: felt252 = u32_mid.into();\n    let u32_lf: felt252 = u32_low.into();\n    let next_u16_pending: felt252 = u16_low.into();\n\n    array.append((pending_u16.into() * POW16 + u16_hf).try_into().unwrap());\n    array.append(u32_mf.try_into().unwrap());\n    array.append(u32_lf.try_into().unwrap());\n\n    return next_u16_pending.try_into().unwrap();\n}\n\n\n#[inline(always)]\npub fn append_u32_with_pending_u16(ref array: Array<u32>, pending_u16: u32, u: u32) -> u32 {\n    let (u16_h, next_pending) = DivRem::div_rem(u, NZ_POW16_32);\n    let u16_hf: felt252 = u16_h.into();\n    array.append((pending_u16.into() * POW16 + u16_hf).try_into().unwrap());\n    return next_pending;\n}\n\npub fn append_u384_with_pending_u16(ref array: Array<u32>, pending_u16: u32, u: u384) -> u32 {\n    let pending_u16 = append_u96_with_pending_u16(ref array, pending_u16, u.limb3);\n    let pending_u16 = append_u96_with_pending_u16(ref array, pending_u16, u.limb2);\n    let pending_u16 = append_u96_with_pending_u16(ref array, pending_u16, u.limb1);\n    let pending_u16 = append_u96_with_pending_u16(ref array, pending_u16, u.limb0);\n    return pending_u16;\n}\n\n\npub fn u8_16_to_u32_4(a: [u8; 16]) -> [u32; 4] {\n    let [a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0] = a;\n    let w3: felt252 = a15.into() * POW24 + a14.into() * POW16 + a13.into() * POW8 + a12.into();\n    let w2: felt252 = a11.into() * POW24 + a10.into() * POW16 + a9.into() * POW8 + a8.into();\n    let w1: felt252 = a7.into() * POW24 + a6.into() * POW16 + a5.into() * POW8 + a4.into();\n    let w0: felt252 = a3.into() * POW24 + a2.into() * POW16 + a1.into() * POW8 + a0.into();\n    return [\n        w3.try_into().unwrap(), w2.try_into().unwrap(), w1.try_into().unwrap(),\n        w0.try_into().unwrap(),\n    ];\n}\n\npub fn decrypt_at_round(signature_at_round: G1Point, ciphertext: CipherText) -> [u8; 16] {\n    let (M) = miller_loop_bls12_381_tower(signature_at_round, ciphertext.U);\n    let rgid = final_exp_bls12_381_tower(M);\n\n    let mut array: Array<u32> = array![];\n\n    let [ibe_h2_0, ibe_h2_1] = IBE_H2;\n    array.append(ibe_h2_0);\n    let pending = append_u384_with_pending_u16(ref array, ibe_h2_1, rgid.c1b2a1);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c1b2a0);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c1b1a1);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c1b1a0);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c1b0a1);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c1b0a0);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c0b2a1);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c0b2a0);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c0b1a1);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c0b1a0);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c0b0a1);\n    let pending = append_u384_with_pending_u16(ref array, pending, rgid.c0b0a0);\n\n    let [r7, r6, r5, r4, _, _, _, _] = compute_sha256_u32_array(\n        input: array, last_input_word: pending, last_input_num_bytes: 2,\n    );\n\n    let v: [u32; 4] = u8_16_to_u32_4(ciphertext.V);\n    let sigma: [u32; 4] = xor_u32_array_4([r7, r6, r5, r4], v);\n\n    let mut array: Array<u32> = array![];\n    let [ibe_h4_0, ibe_h4_1] = IBE_H4;\n    array.append(ibe_h4_0);\n\n    let [s3, s2, s1, s0] = sigma;\n    let pending = append_u32_with_pending_u16(ref array, ibe_h4_1, s3);\n    let pending = append_u32_with_pending_u16(ref array, pending, s2);\n    let pending = append_u32_with_pending_u16(ref array, pending, s1);\n    let pending = append_u32_with_pending_u16(ref array, pending, s0);\n\n    let [sh7, sh6, sh5, sh4, _, _, _, _] = compute_sha256_u32_array(\n        input: array, last_input_word: pending, last_input_num_bytes: 2,\n    );\n\n    let w = u8_16_to_u32_4(ciphertext.W);\n    let message: [u32; 4] = xor_u32_array_4([sh7, sh6, sh5, sh4], w);\n    let [m3, m2, m1, m0] = message;\n    // Convert to bytes :\n    let message_bytes = u32_4_to_u8_16(message);\n\n    // Verify U = G^R\n\n    let mut array: Array<u32> = array![];\n    let [ibe_h3_0, ibe_h3_1] = IBE_H3;\n    array.append(ibe_h3_0);\n    // Append sigma\n    let pending = append_u32_with_pending_u16(ref array, ibe_h3_1, s3);\n    let pending = append_u32_with_pending_u16(ref array, pending, s2);\n    let pending = append_u32_with_pending_u16(ref array, pending, s1);\n    let pending = append_u32_with_pending_u16(ref array, pending, s0);\n    // Append message :\n    let pending = append_u32_with_pending_u16(ref array, pending, m3);\n    let pending = append_u32_with_pending_u16(ref array, pending, m2);\n    let pending = append_u32_with_pending_u16(ref array, pending, m1);\n    let pending = append_u32_with_pending_u16(ref array, pending, m0);\n\n    // Little endian\n    let rh = compute_sha256_u32_array(\n        input: array, last_input_word: pending, last_input_num_bytes: 2,\n    );\n\n    let mut i = 1;\n    let mut r = expand_message_drand(rh, i);\n\n    // r must be non-zero:\n    while r == 0 {\n        i += 1;\n        let _r = expand_message_drand(rh, i);\n        r = _r;\n    }\n\n    let U = ec_ops_g2::ec_mul(BLS_G2_GENERATOR, r, 1).unwrap();\n    assert(U == ciphertext.U, 'Incorrect ciphertext proof.');\n    return message_bytes;\n}\n\npub fn expand_message_drand(msg: [u32; 8], i: u8) -> u256 {\n    let mut array: Array<u32> = array![];\n    let [m7, m6, m5, m4, m3, m2, m1, m0] = msg;\n    // i.to_bytes(2, byteorder=\"little\")\n    let pending = append_u32_with_pending_u16(ref array, i.into() * 0x100, m7);\n    let pending = append_u32_with_pending_u16(ref array, pending, m6);\n    let pending = append_u32_with_pending_u16(ref array, pending, m5);\n    let pending = append_u32_with_pending_u16(ref array, pending, m4);\n    let pending = append_u32_with_pending_u16(ref array, pending, m3);\n    let pending = append_u32_with_pending_u16(ref array, pending, m2);\n    let pending = append_u32_with_pending_u16(ref array, pending, m1);\n    let pending = append_u32_with_pending_u16(ref array, pending, m0);\n\n    let hash_result = compute_sha256_u32_array(\n        input: array, last_input_word: pending, last_input_num_bytes: 2,\n    );\n\n    let [r0, r1, r2, r3, r4, r5, r6, r7] = hash_result;\n\n    // Mask the first byte of r0\n    // Extract the leftmost byte\n    let first_byte = r0 & 0xFF000000;\n\n    // Right shift the first byte by 1 bit\n    let shifted_byte = first_byte / 2;\n\n    // Combine the shifted byte back with the rest of r0\n    let r0 = shifted_byte | (r0 & 0x00FFFFFF);\n\n    return hash_to_u256([r0, r1, r2, r3, r4, r5, r6, r7]);\n}\n\n\npub fn hash_to_u256(msg: [u32; 8]) -> u256 {\n    let [a, b, c, d, e, f, g, h] = msg;\n    let low: u128 = h.into() + g.into() * POW_2_32 + f.into() * POW_2_64 + e.into() * POW_2_96;\n    let high: u128 = d.into() + c.into() * POW_2_32 + b.into() * POW_2_64 + a.into() * POW_2_96;\n\n    u256 { low: low, high: high }\n}\npub fn timestamp_to_round(timestamp: u64) -> u64 {\n    // If timestamp is before genesis, return 0 (no round has started yet)\n    if timestamp < DRAND_QUICKNET_GENESIS_TIME {\n        return 0;\n    }\n\n    let elapsed_time: u64 = timestamp - DRAND_QUICKNET_GENESIS_TIME;\n    return (elapsed_time / DRAND_QUICKNET_PERIOD) + 1;\n}\npub fn round_to_timestamp(round: u64) -> u64 {\n    // Round 0 is invalid\n    if round == 0 {\n        return 0;\n    }\n    // Calculate timestamp: genesis + (round-1) * period\n    // We subtract 1 from the round because round 1 starts at genesis\n    return DRAND_QUICKNET_GENESIS_TIME + ((round - 1) * DRAND_QUICKNET_PERIOD);\n}\n\n#[cfg(test)]\nmod tests {\n    use garaga::ec_ops_g2::G2PointTrait;\n    use super::{\n        CipherText, DRAND_QUICKNET_PUBLIC_KEY, G1Point, G2Point, HashToCurveHint, MapToCurveHint,\n        decrypt_at_round, hash_to_curve_bls12_381, hash_to_two_bls_felts, map_to_curve,\n        run_BLS12_381_APPLY_ISOGENY_BLS12_381_circuit, u384,\n    };\n\n    #[test]\n    fn test_drand_quicknet_public_key() {\n        DRAND_QUICKNET_PUBLIC_KEY.assert_in_subgroup_excluding_infinity(1);\n    }\n    #[test]\n    fn test_hash_to_two_bls_felts() {\n        // sha256(\"Hello, World!\")\n        let message: [u32; 8] = [\n            0xdffd6021, 0xbb2bd5b0, 0xaf676290, 0x809ec3a5, 0x3191dd81, 0xc7f70a4b, 0x28688a36,\n            0x2182986f,\n        ];\n        let (a, b) = hash_to_two_bls_felts(message);\n\n        assert_eq!(\n            a,\n            u384 {\n                limb0: 0x3424dff585d947fedf210456,\n                limb1: 0xd67576428da87a9356340b2e,\n                limb2: 0x135e368f3927494b3933a985,\n                limb3: 0x85a31dc6b81af709df9ba4e,\n            },\n        );\n        assert_eq!(\n            b,\n            u384 {\n                limb0: 0xdb509060a0293b7d9e20ae9,\n                limb1: 0x189ad7a1508b89604e165848,\n                limb2: 0x74a42a64a63d7c9dd6bfec2c,\n                limb3: 0x1049922d5dcd716806ccfa3e,\n            },\n        );\n    }\n\n    #[test]\n    fn test_map_to_curve() {\n        let u = u384 { limb0: 42, limb1: 0x0, limb2: 0x0, limb3: 0x0 };\n\n        let expected = G1Point {\n            x: u384 {\n                limb0: 0x1c94f3121ca3e1454e60bded,\n                limb1: 0xe09a5f66977f922ae74baf50,\n                limb2: 0xa471b958de9a5099a84aca44,\n                limb3: 0x923f1e3115dc78a457fffa1,\n            },\n            y: u384 {\n                limb0: 0xaa8806e6b469554a91758ec,\n                limb1: 0xdbfb03df4a53a534ac80def7,\n                limb2: 0xb81c6297bbac342050bff567,\n                limb3: 0xfb9022e050807db4b155d87,\n            },\n        };\n        let hint = MapToCurveHint {\n            gx1_is_square: false,\n            y1: u384 {\n                limb0: 0x8c74c126c6351052ebf1965,\n                limb1: 0x979aba6acb3e5dfca5581a51,\n                limb2: 0x49e43c123f4e034706485bde,\n                limb3: 0x152ffaf0e2cd3fbbb102b5e1,\n            },\n            y_flag: false,\n        };\n        let res = map_to_curve(u, hint);\n        assert_eq!(res, expected);\n    }\n\n    #[test]\n    fn test_isogeny() {\n        let pt = G1Point {\n            x: u384 {\n                limb0: 0xfe95b6d6dc4c28b03aa82194,\n                limb1: 0xc06a9cdc69f9d39a1cb3c132,\n                limb2: 0xc0637d447baf4f55d4658b59,\n                limb3: 0x166e53a3af1733961f92e08,\n            },\n            y: u384 {\n                limb0: 0x5dc860b68c76e432263e15dc,\n                limb1: 0x8c9990a0f89eadd580f71395,\n                limb2: 0xaf300dff12d93cfe32b45c5d,\n                limb3: 0x8f6e2a59628049aecb84109,\n            },\n        };\n\n        let expected = G1Point {\n            x: u384 {\n                limb0: 0x5fad5b4abf0d9b5a5500069,\n                limb1: 0x88e3293255d2172755b29514,\n                limb2: 0x2562887a0b9a729cf8f6f807,\n                limb3: 0xfb545dd46e90e6f6bd679a1,\n            },\n            y: u384 {\n                limb0: 0xbea8d03c186753a97b5e8e0b,\n                limb1: 0xbe3e7a1eb25cf6d7fa6f686d,\n                limb2: 0x72026b41a862ff1fa8508191,\n                limb3: 0xd596c01e510faf25030e9a5,\n            },\n        };\n        let (res) = run_BLS12_381_APPLY_ISOGENY_BLS12_381_circuit(pt);\n        assert_eq!(res, expected);\n    }\n    #[test]\n    fn test_hash_to_curve() {\n        let message: [u32; 8] = [\n            0xdffd6021, 0xbb2bd5b0, 0xaf676290, 0x809ec3a5, 0x3191dd81, 0xc7f70a4b, 0x28688a36,\n            0x2182986f,\n        ];\n        let hint = HashToCurveHint {\n            f0_hint: MapToCurveHint {\n                gx1_is_square: true,\n                y1: u384 {\n                    limb0: 0xf26e7fd3c2733a0413db4463,\n                    limb1: 0xa1562d011f360461be8e36dd,\n                    limb2: 0x84a83147a7e7a1311a712501,\n                    limb3: 0x1290f63f6daa85ad6bf7088a,\n                },\n                y_flag: false,\n            },\n            f1_hint: MapToCurveHint {\n                gx1_is_square: false,\n                y1: u384 {\n                    limb0: 0xb88f6c46cebe267f9e2afa6c,\n                    limb1: 0xa845982734193f6f44e49212,\n                    limb2: 0x63e1f53f7553752da88fb12c,\n                    limb3: 0xd613d3f488be39870f05a5c,\n                },\n                y_flag: false,\n            },\n        };\n\n        let expected = G1Point {\n            x: u384 {\n                limb0: 0x931f614913b4e856c2a5dd1b,\n                limb1: 0xce68eade0d43210615956b1d,\n                limb2: 0x4f2c8c74301387552679068d,\n                limb3: 0xcc12bfa116dae0017adb178,\n            },\n            y: u384 {\n                limb0: 0x6b02cc408fda040be6918d1e,\n                limb1: 0x325a198e22c4131c6fed473b,\n                limb2: 0xf0bbbddfea59e5a96a11bd20,\n                limb3: 0xeb05659d43180b59cee2ea0,\n            },\n        };\n        let res = hash_to_curve_bls12_381(message, hint);\n        assert_eq!(res, expected);\n    }\n\n    #[test]\n    fn test_decrypt_at_round() {\n        // msg: b'hello\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00abc'\n        // round: 128\n        // network: DrandNetwork.quicknet\n\n        let signature_at_round: G1Point = G1Point {\n            x: u384 {\n                limb0: 0xc0bcbd3576ff11f14722cf6c,\n                limb1: 0xd452247305c00e921bd480d6,\n                limb2: 0x8b9980255afbf088406ce2e9,\n                limb3: 0x3783c94f8000028fa31f457,\n            },\n            y: u384 {\n                limb0: 0x2b4d36d607cf825974c364b4,\n                limb1: 0x44cd6938390204bd3a17bf08,\n                limb2: 0x92d3ea3afc64bf69e6c4cf27,\n                limb3: 0x9ee7907fd3b11fa8ec81ccc,\n            },\n        };\n\n        let ciph = CipherText {\n            U: G2Point {\n                x0: u384 {\n                    limb0: 0x340fdd978d12a78af62a4938,\n                    limb1: 0xf70620e8446a28e3d2071039,\n                    limb2: 0xe08fd6ca0d6e9bdcb5dbf048,\n                    limb3: 0x14fb6e4f383578999fe9250,\n                },\n                x1: u384 {\n                    limb0: 0x25a2b053807bd5aa950143b1,\n                    limb1: 0x845c1664a97d715be868b2d2,\n                    limb2: 0x5c1891819cbeaf9241827325,\n                    limb3: 0x1db774cee6dd8860aad23b7,\n                },\n                y0: u384 {\n                    limb0: 0x941e76c3d4243c3a29eb37b6,\n                    limb1: 0xeb7d54ef8c76445a546aa67e,\n                    limb2: 0x945908b037be402a146d92cc,\n                    limb3: 0x51401dcca71a5b8e961858,\n                },\n                y1: u384 {\n                    limb0: 0x83136ccccc82c994f1c19abe,\n                    limb1: 0x638557d8f6ba3dbceffb0d86,\n                    limb2: 0xd81843d33e29bd92ca715eca,\n                    limb3: 0x12d802c5957e9cab6e1e8c82,\n                },\n            },\n            V: [\n                0xa7, 0x35, 0xd6, 0x12, 0x47, 0x88, 0xc9, 0x3f, 0x2c, 0xc4, 0xdd, 0xe5, 0x5d, 0x54,\n                0x31, 0x15,\n            ],\n            W: [\n                0x7f, 0x10, 0x1c, 0x52, 0x8b, 0xf7, 0x63, 0x15, 0x57, 0x8d, 0x77, 0x2e, 0x79, 0x3f,\n                0x01, 0x29,\n            ],\n        };\n        let msg_decrypted = decrypt_at_round(signature_at_round, ciph);\n        assert(\n            msg_decrypted\n                .span() == [\n                    0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                    0x61, 0x62, 0x63,\n                ]\n                .span(),\n            'wrong msg',\n        );\n    }\n}\n\n"
  },
  {
    "path": "src/src/apps/noir/zk_honk_transcript.cairo",
    "content": "use core::poseidon::hades_permutation;\nuse core::traits::Into;\nuse corelib_imports::keccak;\nuse garaga::apps::noir::{G1Point256, ZKHonkProof};\nuse garaga::definitions::G1Point;\n\npub const POW2_136: u256 = 0x10000000000000000000000000000000000;\npub const POW2_136_NZ: NonZero<u256> = 0x10000000000000000000000000000000000;\npub const POW2_8: NonZero<u128> = 0x100;\npub const Fr: u256 = 21888242871839275222246405745257275088548364400416034343698204186575808495617;\n\npub const ZK_BATCHED_RELATION_PARTIAL_LENGTH: usize = 9;\n\npub const NUMBER_OF_SUBRELATIONS: usize = 26;\npub const NUMBER_OF_ALPHAS: usize = NUMBER_OF_SUBRELATIONS - 1;\npub const CONST_PROOF_SIZE_LOG_N: usize = 28;\npub const NUMBER_OF_ENTITIES: usize = 41;\n\n\npub impl Point256IntoCircuitPoint of Into<G1Point256, G1Point> {\n    fn into(self: G1Point256) -> G1Point {\n        G1Point { x: self.x.into(), y: self.y.into() }\n    }\n}\n\npub trait IHasher<T> {\n    fn new() -> T;\n    fn update_u64_as_u256(ref self: T, v: u64);\n    fn update_0_256(ref self: T);\n    fn update(ref self: T, v: u256);\n    fn digest(ref self: T) -> u256;\n}\n\n#[derive(Drop, Debug)]\npub struct KeccakHasherState {\n    pub arr: Array<u64>,\n}\n\npub impl KeccakHasher of IHasher<KeccakHasherState> {\n    #[inline]\n    fn new() -> KeccakHasherState {\n        KeccakHasherState { arr: array![] }\n    }\n    #[inline(never)]\n    fn update_u64_as_u256(ref self: KeccakHasherState, v: u64) {\n        self.arr.append(0);\n        self.arr.append(0);\n        self.arr.append(0);\n        self.arr.append(u64_byte_reverse(v));\n    }\n    #[inline]\n    fn update(ref self: KeccakHasherState, v: u256) {\n        keccak::keccak_add_u256_be(ref self.arr, v);\n    }\n    #[inline]\n    fn update_0_256(ref self: KeccakHasherState) {\n        self.arr.append(0);\n        self.arr.append(0);\n        self.arr.append(0);\n        self.arr.append(0);\n    }\n    #[inline]\n    fn digest(ref self: KeccakHasherState) -> u256 {\n        ke_le_out_to_ch_be(\n            keccak::cairo_keccak(ref self.arr, last_input_word: 0, last_input_num_bytes: 0),\n        )\n    }\n}\n\n#[inline]\nfn u64_byte_reverse(word: u64) -> u64 {\n    (core::integer::u128_byte_reverse(word.into()) / 0x10000000000000000).try_into().unwrap()\n}\n\n#[inline]\nfn u256_byte_reverse(word: u256) -> u256 {\n    u256 {\n        low: core::integer::u128_byte_reverse(word.high),\n        high: core::integer::u128_byte_reverse(word.low),\n    }\n}\n\n#[inline(never)]\npub fn append_proof_point<T, impl Hasher: IHasher<T>>(ref hasher: T, point: G1Point256) {\n    hasher.update(point.x);\n    hasher.update(point.y);\n}\n\n// Hasher little endian output to big endian challenge.\n// Converts to big endian, then takes modulo Fr.\nfn ke_le_out_to_ch_be(ke_le_out: u256) -> u256 {\n    let ke_be: u256 = u256_byte_reverse(ke_le_out);\n    let ch_be: u256 = ke_be % Fr;\n    ch_be\n}\n\n\n#[derive(Drop, Debug, PartialEq)]\npub struct ZKHonkTranscript {\n    pub eta: u128,\n    pub eta_two: u128,\n    pub eta_three: u128,\n    pub beta: u128,\n    pub gamma: u128,\n    pub alpha: u128,\n    pub gate_challenge: u128,\n    pub libra_challenge: u128,\n    pub sum_check_u_challenges: Array<u128>,\n    pub rho: u128,\n    pub gemini_r: u128,\n    pub shplonk_nu: u128,\n    pub shplonk_z: u128,\n}\n\n\n#[derive(Drop)]\npub struct Etas {\n    pub eta: u128,\n    pub eta2: u128,\n    pub eta3: u128,\n}\n\n#[generate_trait]\npub impl ZKHonkTranscriptImpl of ZKHonkTranscriptTrait {\n    fn from_proof<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n        honk_proof: ZKHonkProof, vk_hash: u256, log_circuit_size: usize,\n    ) -> (ZKHonkTranscript, felt252, felt252) {\n        let (etas, challenge) = get_eta_challenges::<\n            T,\n        >(\n            honk_proof.public_inputs,\n            honk_proof.pairing_point_object,\n            honk_proof.w1,\n            honk_proof.w2,\n            honk_proof.w3,\n            vk_hash,\n        );\n        let beta_gamma = get_beta_gamma_challenges::<\n            T,\n        >(challenge, honk_proof.lookup_read_counts, honk_proof.lookup_read_tags, honk_proof.w4);\n        let alpha_challenge = generate_alpha_challenge::<\n            T,\n        >(beta_gamma, honk_proof.lookup_inverses, honk_proof.z_perm);\n        let gate_challenge = generate_gate_challenge::<T>(alpha_challenge);\n\n        let libra_challenge = generate_libra_challenge::<\n            T,\n        >(gate_challenge, honk_proof.libra_commitments, honk_proof.libra_sum);\n\n        let (sum_check_u_challenges, challenge) = generate_sumcheck_u_challenges::<\n            T,\n        >(libra_challenge, honk_proof.sumcheck_univariates, log_circuit_size);\n\n        let rho_challenge = generate_rho_challenge::<\n            T,\n        >(\n            challenge,\n            honk_proof.sumcheck_evaluations,\n            honk_proof.libra_evaluation,\n            honk_proof.libra_commitments,\n            honk_proof.gemini_masking_poly,\n            honk_proof.gemini_masking_eval,\n        );\n\n        let gemini_r_challenge = generate_gemini_r_challenge::<\n            T,\n        >(rho_challenge, honk_proof.gemini_fold_comms, log_circuit_size);\n\n        let shplonk_nu_challenge = generate_shplonk_nu_challenge::<\n            T,\n        >(\n            gemini_r_challenge,\n            honk_proof.gemini_a_evaluations,\n            honk_proof.libra_poly_evals,\n            log_circuit_size,\n        );\n        let shplonk_z_challenge = generate_shplonk_z_challenge::<\n            T,\n        >(shplonk_nu_challenge, honk_proof.shplonk_q);\n\n        let (transcript_state, base_rlc, _) = hades_permutation(\n            shplonk_z_challenge.low.into(), shplonk_z_challenge.high.into(), 2,\n        );\n\n        return (\n            ZKHonkTranscript {\n                eta: etas.eta,\n                eta_two: etas.eta2,\n                eta_three: etas.eta3,\n                beta: beta_gamma.low,\n                gamma: beta_gamma.high,\n                alpha: alpha_challenge.low,\n                gate_challenge: gate_challenge.low,\n                libra_challenge: libra_challenge.low,\n                sum_check_u_challenges: sum_check_u_challenges,\n                rho: rho_challenge.low,\n                gemini_r: gemini_r_challenge.low,\n                shplonk_nu: shplonk_nu_challenge.low,\n                shplonk_z: shplonk_z_challenge.low,\n            },\n            transcript_state,\n            base_rlc,\n        );\n    }\n}\n\n// Return eta and last hasher output\n#[inline]\npub fn get_eta_challenges<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n    pub_inputs: Span<u256>,\n    pairing_point_object: Span<u256>,\n    w1: G1Point256,\n    w2: G1Point256,\n    w3: G1Point256,\n    vk_hash: u256,\n) -> (Etas, u256) {\n    let mut hasher = Hasher::new();\n\n    hasher.update(vk_hash);\n\n    for pub_i in pub_inputs {\n        hasher.update(*pub_i);\n    }\n    for pub_i in pairing_point_object {\n        hasher.update(*pub_i);\n    }\n    append_proof_point(ref hasher, w1);\n    append_proof_point(ref hasher, w2);\n    append_proof_point(ref hasher, w3);\n\n    let ch_be: u256 = hasher.digest();\n\n    let mut hasher_2 = Hasher::new();\n    hasher_2.update(ch_be);\n\n    let ch_2_be: u256 = hasher_2.digest();\n\n    (Etas { eta: ch_be.low, eta2: ch_be.high, eta3: ch_2_be.low }, ch_2_be)\n}\n\n// Return beta, gamma, and last hasher output.\n// Outut :\n// ch_be.\n// beta = ch_be.low, gamma = ch_be.high, last_hasher_output = ch_be.\n#[inline]\npub fn get_beta_gamma_challenges<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n    prev_hasher_output: u256,\n    lookup_read_counts: G1Point256,\n    lookup_read_tags: G1Point256,\n    w4: G1Point256,\n) -> u256 {\n    let mut hasher = Hasher::new();\n    hasher.update(prev_hasher_output);\n    append_proof_point(ref hasher, lookup_read_counts);\n    append_proof_point(ref hasher, lookup_read_tags);\n    append_proof_point(ref hasher, w4);\n\n    let ch_be: u256 = hasher.digest();\n\n    ch_be\n}\n\n#[inline]\npub fn generate_alpha_challenge<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n    prev_hasher_output: u256, lookup_inverse: G1Point256, z_perm: G1Point256,\n) -> u256 {\n    let mut hasher = Hasher::new();\n    hasher.update(prev_hasher_output);\n    append_proof_point(ref hasher, lookup_inverse);\n    append_proof_point(ref hasher, z_perm);\n\n    let challenge: u256 = hasher.digest();\n\n    challenge\n}\n\n#[inline]\npub fn generate_gate_challenge<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n    prev_hasher_output: u256,\n) -> u256 {\n    let mut hasher = Hasher::new();\n    hasher.update(prev_hasher_output);\n    let gate_challenge: u256 = hasher.digest();\n    gate_challenge\n}\n\n#[inline]\npub fn generate_libra_challenge<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n    prev_hasher_output: u256, libra_commitments: Span<G1Point256>, libra_sum: u256,\n) -> u256 {\n    let mut hasher = Hasher::new();\n    hasher.update(prev_hasher_output);\n\n    append_proof_point(ref hasher, (*libra_commitments.at(0)).into());\n\n    hasher.update(libra_sum);\n\n    hasher.digest()\n}\n\n#[inline]\npub fn generate_sumcheck_u_challenges<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n    prev_hasher_output: u256, sumcheck_univariates: Span<u256>, log_circuit_size: usize,\n) -> (Array<u128>, u256) {\n    let mut sum_check_u_challenges: Array<u128> = array![];\n    let mut challenge: u256 = prev_hasher_output;\n    for i in 0..log_circuit_size {\n        let mut hasher = Hasher::new();\n        hasher.update(challenge);\n        for univariate in sumcheck_univariates\n            .slice(i * ZK_BATCHED_RELATION_PARTIAL_LENGTH, ZK_BATCHED_RELATION_PARTIAL_LENGTH) {\n            hasher.update(*univariate);\n        }\n\n        challenge = hasher.digest();\n        sum_check_u_challenges.append(challenge.low);\n    }\n\n    (sum_check_u_challenges, challenge)\n}\n\n\n#[inline]\npub fn generate_rho_challenge<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n    prev_hasher_output: u256,\n    sumcheck_evaluations: Span<u256>,\n    libra_evaluation: u256,\n    libra_commitments: Span<G1Point256>,\n    gemini_masking_poly: G1Point256,\n    gemini_masking_eval: u256,\n) -> u256 {\n    let mut hasher = Hasher::new();\n    hasher.update(prev_hasher_output);\n\n    assert(sumcheck_evaluations.len() == NUMBER_OF_ENTITIES, 'Wrong # of sumcheck evaluations');\n    for eval in sumcheck_evaluations {\n        hasher.update(*eval);\n    }\n\n    hasher.update(libra_evaluation);\n    append_proof_point(ref hasher, (*libra_commitments.at(1)));\n    append_proof_point(ref hasher, (*libra_commitments.at(2)));\n    append_proof_point(ref hasher, gemini_masking_poly);\n    hasher.update(gemini_masking_eval);\n\n    hasher.digest()\n}\n\n#[inline]\npub fn generate_gemini_r_challenge<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n    prev_hasher_output: u256, gemini_fold_comms: Span<G1Point256>, log_circuit_size: usize,\n) -> u256 {\n    let mut hasher = Hasher::new();\n    hasher.update(prev_hasher_output);\n    // Log_n - 1 points\n    assert(gemini_fold_comms.len() == log_circuit_size - 1, 'Wrong # gemini fold commitments');\n    for pt in gemini_fold_comms {\n        append_proof_point(ref hasher, (*pt));\n    }\n    hasher.digest()\n}\n#[inline]\npub fn generate_shplonk_nu_challenge<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n    prev_hasher_output: u256,\n    gemini_a_evaluations: Span<u256>,\n    libra_poly_evals: Span<u256>,\n    log_circuit_size: usize,\n) -> u256 {\n    let mut hasher = Hasher::new();\n    hasher.update(prev_hasher_output);\n    assert(gemini_a_evaluations.len() == log_circuit_size, 'Wrong # gemini a evaluations');\n    for eval in gemini_a_evaluations {\n        hasher.update(*eval);\n    }\n    assert(libra_poly_evals.len() == 4, 'Wrong # libra poly evals');\n    for eval in libra_poly_evals {\n        hasher.update(*eval);\n    }\n\n    hasher.digest()\n}\n\n\n#[inline]\npub fn generate_shplonk_z_challenge<T, impl Hasher: IHasher<T>, impl Drop: Drop<T>>(\n    prev_hasher_output: u256, shplonk_q: G1Point256,\n) -> u256 {\n    let mut hasher = Hasher::new();\n    hasher.update(prev_hasher_output);\n    append_proof_point(ref hasher, shplonk_q);\n\n    hasher.digest()\n}\n#[cfg(test)]\nmod tests {\n    use garaga::apps::noir::{get_vk, get_zk_proof_keccak};\n    use super::{KeccakHasherState, ZKHonkTranscript, ZKHonkTranscriptTrait};\n    #[test]\n    fn test_transcript_zk_keccak() {\n        let vk = get_vk();\n        let proof = get_zk_proof_keccak();\n        let (transcript, _, _) = ZKHonkTranscriptTrait::from_proof::<\n            KeccakHasherState,\n        >(proof, vk.vk_hash, vk.log_circuit_size);\n        let expected = ZKHonkTranscript {\n            eta: 0xe06b1fc6aaa49ae9fd402ada2b9134b9,\n            eta_two: 0xe542c4b5332d3d478ddb457634915e1,\n            eta_three: 0x8e6609b790521615a5280fb48742cad8,\n            beta: 0x72d843c38074ab30feda0c1fec6c1b3a,\n            gamma: 0x2a2d65e61cca6188a3a8923aa8e5f0fd,\n            alpha: 0x9a4e2bc96d7e1dd703244eef656760ad,\n            gate_challenge: 0x93408fac46045cb577fef77c8ae160e5,\n            libra_challenge: 0x3d7684814dfcb8a69e8ed0d6811500ce,\n            sum_check_u_challenges: array![\n                0xdd54b9aefc090c30ea2968d1f2f2875b, 0x5b2c6faddf41ec1b5b0d30441320df35,\n                0x31a05c60e4601a6e5dd0cbf00ba66d4d, 0x78fd67e59d93d13bd9f90fe775d88759,\n                0x64d775cbd626fc667f7ef431d7a8a026, 0x5a389eb79d036095de26968eff05a52f,\n                0xad7a51b6745cf979f995c463b7c84b33, 0x396d8c7eb553dc399585fcbb227d8819,\n                0x9fbb8219244d68f56af6042a9aed2a6f, 0x8abf1fe8e59622f23abaefbbf040b77a,\n                0x2d8091d0fa8dbe6da6e339538144f442, 0xfc2b3617ce73378503ccce368a9010d5,\n            ],\n            rho: 0x193ead6536b4ba765236aa95c50de7f6,\n            gemini_r: 0x7defebd9a6f21decaac79819dc18596e,\n            shplonk_nu: 0xf2a3267c336f0ee4ab6f5a2b60b47647,\n            shplonk_z: 0x1369879dd6918cd679e6295a75569269,\n        };\n        assert_eq!(transcript.eta, expected.eta);\n        assert_eq!(transcript.eta_two, expected.eta_two);\n        assert_eq!(transcript.eta_three, expected.eta_three);\n        assert_eq!(transcript.beta, expected.beta);\n        assert_eq!(transcript.gamma, expected.gamma);\n        assert_eq!(transcript.alpha, expected.alpha);\n        assert_eq!(transcript.gate_challenge, expected.gate_challenge);\n        assert_eq!(transcript.libra_challenge, expected.libra_challenge);\n        assert_eq!(transcript.sum_check_u_challenges, expected.sum_check_u_challenges);\n        assert_eq!(transcript.rho, expected.rho);\n        assert_eq!(transcript.gemini_r, expected.gemini_r);\n        assert_eq!(transcript.shplonk_nu, expected.shplonk_nu);\n        assert_eq!(transcript.shplonk_z, expected.shplonk_z);\n    }\n}\n\n"
  },
  {
    "path": "src/src/apps/noir.cairo",
    "content": "pub mod zk_honk_transcript;\n// use garaga::core::circuit::U64IntoU384;\nuse garaga::definitions::{G1Point, G2Point, u384};\n\n#[derive(Drop, Copy, Serde)]\npub struct G1Point256 {\n    pub x: u256,\n    pub y: u256,\n}\n\n#[derive(Drop, Serde, Copy)]\npub struct ZKHonkProof {\n    pub public_inputs: Span<u256>,\n    pub pairing_point_object: Span<u256>,\n    pub w1: G1Point256,\n    pub w2: G1Point256,\n    pub w3: G1Point256,\n    pub w4: G1Point256,\n    pub z_perm: G1Point256,\n    pub lookup_read_counts: G1Point256,\n    pub lookup_read_tags: G1Point256,\n    pub lookup_inverses: G1Point256,\n    pub libra_commitments: Span<G1Point256>,\n    pub libra_sum: u256,\n    pub sumcheck_univariates: Span<u256>,\n    pub sumcheck_evaluations: Span<u256>,\n    pub libra_evaluation: u256,\n    pub gemini_masking_poly: G1Point256,\n    pub gemini_masking_eval: u256,\n    pub gemini_fold_comms: Span<G1Point256>,\n    pub gemini_a_evaluations: Span<u256>,\n    pub libra_poly_evals: Span<u256>,\n    pub shplonk_q: G1Point256,\n    pub kzg_quotient: G1Point256,\n}\n\n\n#[derive(Drop, Copy)]\npub struct HonkVk {\n    pub vk_hash: u256, // keccak256(vk_bytes) % BN254_Fr\n    pub log_circuit_size: usize,\n    pub public_inputs_size: usize,\n    pub qm: G1Point,\n    pub qc: G1Point,\n    pub ql: G1Point,\n    pub qr: G1Point,\n    pub qo: G1Point,\n    pub q4: G1Point,\n    pub qLookup: G1Point,\n    pub qArith: G1Point,\n    pub qDeltaRange: G1Point,\n    pub qElliptic: G1Point,\n    pub qMemory: G1Point,\n    pub qNnf: G1Point,\n    pub qPoseidon2External: G1Point,\n    pub qPoseidon2Internal: G1Point,\n    pub s1: G1Point,\n    pub s2: G1Point,\n    pub s3: G1Point,\n    pub s4: G1Point,\n    pub id1: G1Point,\n    pub id2: G1Point,\n    pub id3: G1Point,\n    pub id4: G1Point,\n    pub t1: G1Point,\n    pub t2: G1Point,\n    pub t3: G1Point,\n    pub t4: G1Point,\n    pub lagrange_first: G1Point,\n    pub lagrange_last: G1Point,\n}\n\n\npub const G2_POINT_KZG_1: G2Point = G2Point {\n    x0: u384 {\n        limb0: 0xf75edadd46debd5cd992f6ed,\n        limb1: 0x426a00665e5c4479674322d4,\n        limb2: 0x1800deef121f1e76,\n        limb3: 0x0,\n    },\n    x1: u384 {\n        limb0: 0x35a9e71297e485b7aef312c2,\n        limb1: 0x7260bfb731fb5d25f1aa4933,\n        limb2: 0x198e9393920d483a,\n        limb3: 0x0,\n    },\n    y0: u384 {\n        limb0: 0xc43d37b4ce6cc0166fa7daa,\n        limb1: 0x4aab71808dcb408fe3d1e769,\n        limb2: 0x12c85ea5db8c6deb,\n        limb3: 0x0,\n    },\n    y1: u384 {\n        limb0: 0x70b38ef355acdadcd122975b,\n        limb1: 0xec9e99ad690c3395bc4b3133,\n        limb2: 0x90689d0585ff075,\n        limb3: 0x0,\n    },\n};\n\n\npub const G2_POINT_KZG_2: G2Point = G2Point {\n    x0: u384 {\n        limb0: 0x3b32078b7e231fec938883b0,\n        limb1: 0xbc89b5b398b5974e9f594407,\n        limb2: 0x118c4d5b837bcc2,\n        limb3: 0x0,\n    },\n    x1: u384 {\n        limb0: 0x358e038b4efe30fac09383c1,\n        limb1: 0xe7ff4e580791dee8ea51d87a,\n        limb2: 0x260e01b251f6f1c7,\n        limb3: 0x0,\n    },\n    y0: u384 {\n        limb0: 0x96e6cea2854a87d4dacc5e55,\n        limb1: 0x56475b4214e5615e11e6dd3f,\n        limb2: 0x22febda3c0c0632a,\n        limb3: 0x0,\n    },\n    y1: u384 {\n        limb0: 0x41f99ba4ee413c80da6a5fe4,\n        limb1: 0xd25156c1bb9a72859cf2a046,\n        limb2: 0x4fc6369f7110fe3,\n        limb3: 0x0,\n    },\n};\n\npub fn get_vk() -> HonkVk {\n    HonkVk {\n        vk_hash: 1655602901159187576028713697867454584902070339986579942408953720408510516376,\n        log_circuit_size: 12,\n        public_inputs_size: 17,\n        qm: G1Point {\n            x: u384 {\n                limb0: 0x1a11b55dce82f38413640a64,\n                limb1: 0x25c78e040da5a5cbe6f296ee,\n                limb2: 0x142bd66bdb7a2bc1,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x3dc8a5d19d0bf85b0fa95ad4,\n                limb1: 0xaa34836fe60428f70dee9285,\n                limb2: 0xd1415082e63c88e,\n                limb3: 0x0,\n            },\n        },\n        qc: G1Point {\n            x: u384 {\n                limb0: 0xcd51216bd8c56683467cd704,\n                limb1: 0x7c77ce4f20f0fd5a3a264861,\n                limb2: 0x2deae537974aa569,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xa1179c7a8ed5c59a1015e784,\n                limb1: 0x714496966bf5f4374fb6087b,\n                limb2: 0x68627460599c3db,\n                limb3: 0x0,\n            },\n        },\n        ql: G1Point {\n            x: u384 {\n                limb0: 0x36d34df5c2aab80f85a218f2,\n                limb1: 0x864a67847d46222c9aee090f,\n                limb2: 0x6681df238df2a0f,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xbc5d11d2d55e4ac8adccae27,\n                limb1: 0xb9c1b8da3c671ec025fe40ee,\n                limb2: 0x18e37167fd19d013,\n                limb3: 0x0,\n            },\n        },\n        qr: G1Point {\n            x: u384 {\n                limb0: 0xfe3f9cf39c6f73896b06e821,\n                limb1: 0x3dc4669f3d97f847e96e4bce,\n                limb2: 0x177c7a07701c29d1,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x7c23cf6fe4a49a8e4f4c5aba,\n                limb1: 0x38f1a638b192ffc9b995fd68,\n                limb2: 0x2d31ea12ba12ee23,\n                limb3: 0x0,\n            },\n        },\n        qo: G1Point {\n            x: u384 {\n                limb0: 0xd8b0a3fb6597416a145754e3,\n                limb1: 0xac68b01fa7f3faaa5a881854,\n                limb2: 0x2d623ef9f6f62903,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x6059e6db24a7e1bfc51be2ac,\n                limb1: 0x52b442fa3ce1643a24c7ac8e,\n                limb2: 0x20b75671e0dd20da,\n                limb3: 0x0,\n            },\n        },\n        q4: G1Point {\n            x: u384 {\n                limb0: 0x528aeba6bdb01913c3236ff8,\n                limb1: 0xe2edafe7a56dfd287d677b48,\n                limb2: 0x7ea8dd8b4d3fd18,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x853ad38b76968342e932d84b,\n                limb1: 0xe23f777f35827a35ea2716bc,\n                limb2: 0x2826602478d64dc4,\n                limb3: 0x0,\n            },\n        },\n        qLookup: G1Point {\n            x: u384 {\n                limb0: 0x53f9b24d923d8f404cb0bbc9,\n                limb1: 0x75a8449d3d5ce8bc3661650d,\n                limb2: 0xc4032c3079594eb,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xa0ca89441369b7c24301f851,\n                limb1: 0xf0158fd6da81f54eb5fe796,\n                limb2: 0x1084d709650356d4,\n                limb3: 0x0,\n            },\n        },\n        qArith: G1Point {\n            x: u384 {\n                limb0: 0x1c518c7ea0b38257198a9523,\n                limb1: 0xc2c72a3c00da41d4c7c7b6d0,\n                limb2: 0x3057f9cfd5edb0e7,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xf647b842154c13fa145167b7,\n                limb1: 0x6a98575cedc65ee5700a7148,\n                limb2: 0x27eb0839ef4980d,\n                limb3: 0x0,\n            },\n        },\n        qDeltaRange: G1Point {\n            x: u384 {\n                limb0: 0xbefcd8cd631818993e143702,\n                limb1: 0x3b9a8bc08ae2fdbd8e9dc005,\n                limb2: 0x1775fbd3ba5e4316,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xbdde06678d3bce4455d2086f,\n                limb1: 0x9e409fcb2e19a72238c07631,\n                limb2: 0x1d8011ee756abfa1,\n                limb3: 0x0,\n            },\n        },\n        qElliptic: G1Point {\n            x: u384 {\n                limb0: 0x990b1eaa86226b3574e5c43f,\n                limb1: 0x50fb0eae1d72783faba96bc3,\n                limb2: 0x9c706e73a00d844,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x9b1f547ec36638d7b5a1ecd9,\n                limb1: 0x68fcae74683a84de1084739f,\n                limb2: 0x276d401f1c0f9a26,\n                limb3: 0x0,\n            },\n        },\n        qMemory: G1Point {\n            x: u384 {\n                limb0: 0xc20dedd7ff81c5677d3286ce,\n                limb1: 0x276f3537c64334419e05b13f,\n                limb2: 0x12b12523f7d04a83,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x4e602d1c13a77a2472f082da,\n                limb1: 0x55a526829445f3fda95e243c,\n                limb2: 0x2e741be4fe42cc11,\n                limb3: 0x0,\n            },\n        },\n        qNnf: G1Point {\n            x: u384 {\n                limb0: 0x5526834f93c6db848d56dcb0,\n                limb1: 0xe4e8e364439d0abba02dc62a,\n                limb2: 0x16a1350662e14b4c,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xb2e746ed0b6e85782c26040e,\n                limb1: 0x9296d71489889503dda143f0,\n                limb2: 0x563b1f480cad906,\n                limb3: 0x0,\n            },\n        },\n        qPoseidon2External: G1Point {\n            x: u384 {\n                limb0: 0xe4d88b5517e40b2a0133f401,\n                limb1: 0x42f6c756379f231d5f472088,\n                limb2: 0x20e1bb3056279dc3,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x2c8d1a5a6b3bd0ec93b42e77,\n                limb1: 0x9eb4da763de77062d23ce01e,\n                limb2: 0x23ee36ecb11b6278,\n                limb3: 0x0,\n            },\n        },\n        qPoseidon2Internal: G1Point {\n            x: u384 {\n                limb0: 0x19d18424d0e92f60a31671d9,\n                limb1: 0xfdda50b3205d5aa4486b6325,\n                limb2: 0xd1611c856951969,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x94aa3cadd7cd42e719521e0f,\n                limb1: 0x30c0b534ea958de4c47e2f4c,\n                limb2: 0xce97ee59d45d762,\n                limb3: 0x0,\n            },\n        },\n        s1: G1Point {\n            x: u384 {\n                limb0: 0x1b074244b7337b923c097eaf,\n                limb1: 0xd2ae3eafb3800ee0eaf997cb,\n                limb2: 0x154bdee4123a9946,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xf34e2352250dd3fb63d6d8c6,\n                limb1: 0x3c0953803a3a34d916eefb5b,\n                limb2: 0xd5f22b8ade2c19f,\n                limb3: 0x0,\n            },\n        },\n        s2: G1Point {\n            x: u384 {\n                limb0: 0x111168b4d7ab689558c334db,\n                limb1: 0x7c62cc30718076db1836d9e1,\n                limb2: 0x22d2dd0a34c3a1da,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x98a26842094b80c6e88321bf,\n                limb1: 0x243059518c261a4137e7f6a6,\n                limb2: 0x262c701396f0e3ae,\n                limb3: 0x0,\n            },\n        },\n        s3: G1Point {\n            x: u384 {\n                limb0: 0xe1213cb7ef934c944e4e8374,\n                limb1: 0x84b08b441d010fc2976235c0,\n                limb2: 0x172f8c6455a2bfe2,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x960773bd1e8b46a6a182239d,\n                limb1: 0x640beab3f563e0a2402c116a,\n                limb2: 0x178afa12bf161e7e,\n                limb3: 0x0,\n            },\n        },\n        s4: G1Point {\n            x: u384 {\n                limb0: 0xd14c60e677f8e1897f658057,\n                limb1: 0x33204ad4109fa0fbb54c4fea,\n                limb2: 0x21f45516c16fcb30,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x52efc7a0ee6a29e06296bb4d,\n                limb1: 0xb82792c925627d7348f0bf11,\n                limb2: 0xa7a5c9f897fd8da,\n                limb3: 0x0,\n            },\n        },\n        id1: G1Point {\n            x: u384 {\n                limb0: 0xaa69e812f125d20848fd1c50,\n                limb1: 0x621962d025f0fbb42467ce5c,\n                limb2: 0x1d1934c19b595461,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x8971dba72882ee742a0b57f4,\n                limb1: 0xdf91438bfa5b19a7bad0f91d,\n                limb2: 0x10e15c437db6ae7e,\n                limb3: 0x0,\n            },\n        },\n        id2: G1Point {\n            x: u384 {\n                limb0: 0x3a6957e0c9aa54ec21894a61,\n                limb1: 0x320938baa053cd1f3dccb71,\n                limb2: 0x146dc127b5450502,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xfd19216bf0829882cdabebe6,\n                limb1: 0x828ba063530a81a329131fb4,\n                limb2: 0x2d5cbdbf9edeff0d,\n                limb3: 0x0,\n            },\n        },\n        id3: G1Point {\n            x: u384 {\n                limb0: 0xbe73592b0b543997ac9ec27b,\n                limb1: 0x600ed91fa96cd915db4ed7fd,\n                limb2: 0x1e214a8b0ce35f8e,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x5eb2130b9c574c4e04e6e477,\n                limb1: 0x7203e26ecee99e2307846f5a,\n                limb2: 0x214375d66b2db2ba,\n                limb3: 0x0,\n            },\n        },\n        id4: G1Point {\n            x: u384 {\n                limb0: 0xc0ed29b2c26f8c8cbcbd82cf,\n                limb1: 0x9b46a4cf0acba266c2a9b02,\n                limb2: 0x2825f908ee9357e4,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xf0bd3cf808a6d1bcd0d63ba,\n                limb1: 0x8100429b213b9140ed25274a,\n                limb2: 0x264ef648e6714012,\n                limb3: 0x0,\n            },\n        },\n        t1: G1Point {\n            x: u384 {\n                limb0: 0xa63b05df652b0d10ef146d26,\n                limb1: 0xfe18040105b9b395b5d8b7b4,\n                limb2: 0x99e3bd5a0a00ab7,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x7f5a622a32440f860d1e2a7f,\n                limb1: 0xccec99dcd194592129af3a63,\n                limb2: 0x15b8d2515d76e2,\n                limb3: 0x0,\n            },\n        },\n        t2: G1Point {\n            x: u384 {\n                limb0: 0xdc25d1aa450e0b4bc212c37e,\n                limb1: 0x8bc01c9595092a222b888108,\n                limb2: 0x1b917517920bad3d,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xe42000a1d58ccb74381f6d19,\n                limb1: 0x22e6e992077a84482141c7eb,\n                limb2: 0x305e8992b148eedb,\n                limb3: 0x0,\n            },\n        },\n        t3: G1Point {\n            x: u384 {\n                limb0: 0x400b2bca37e2b1085e924a77,\n                limb1: 0x3ada15236ba5cfa60111b440,\n                limb2: 0x13567e3b915c8101,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x904b434e748f9713de8cc3d7,\n                limb1: 0x8f4674af5744dedafd63caea,\n                limb2: 0x148d22589b91f0d,\n                limb3: 0x0,\n            },\n        },\n        t4: G1Point {\n            x: u384 {\n                limb0: 0x6c840d9c943fdf45521c64ce,\n                limb1: 0x7342af45d0155a28edd1a7e4,\n                limb2: 0x43d063b130adfb3,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x4c573d1686d9cb4a00733854,\n                limb1: 0x6aff96736194949330952ae7,\n                limb2: 0x261522c408933064,\n                limb3: 0x0,\n            },\n        },\n        lagrange_first: G1Point {\n            x: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            y: u384 { limb0: 0x2, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        },\n        lagrange_last: G1Point {\n            x: u384 {\n                limb0: 0xc894b742744cf102a554d06f,\n                limb1: 0x9ed4d186a2debd4bfe72be9b,\n                limb2: 0x6a032e44c27b0ce,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x26660c8385d13a63d2078399,\n                limb1: 0xad76960162ff0d8c34d25b61,\n                limb2: 0x53396ef4f905183,\n                limb3: 0x0,\n            },\n        },\n    }\n}\n\npub fn get_zk_proof_keccak() -> ZKHonkProof {\n    ZKHonkProof {\n        public_inputs: array![0x2].span(),\n        pairing_point_object: array![\n            0x42ab5d6d1986846cf, 0xb75c020998797da78, 0x5a107acb64952eca, 0x31e97a575e9d,\n            0xb5666547acf8bd5a4, 0xc410db10a01750aeb, 0xd722669117f9758a4, 0x178cbf4206471,\n            0xe91b8a11e7842c38, 0x7fd51009034b3357f, 0x9889939f81e9c7402, 0xf94656a2ca48,\n            0x6fb128b46c1ddb67f, 0x93fe27776f50224bd, 0x4a0c80c0da527a081, 0x1b52c2020d746,\n        ]\n            .span(),\n        w1: G1Point256 {\n            x: 0x1e34c173234bc959a7180a6bcc4400e875f693f8ba7aa39f084be9ffe2a7030e,\n            y: 0x2b746f5a836e791d389755abda9fb5c9d749337fb05852bff6277a689620de9f,\n        },\n        w2: G1Point256 {\n            x: 0xfbd3eedde3a077f81b3f6e19e88da20865e0d96ac30dcea46367405b98e7ee8,\n            y: 0x2d9de94695b5f22e2e76d7bbf3c9f2574f674330802f0ead9b527154f08708c8,\n        },\n        w3: G1Point256 {\n            x: 0x14a120ab523b85cb55ffddc33d5004ad91474cde957a6fdbaf145d18d45ed987,\n            y: 0x1343a5fd555b6456db3af84e21a912c297379b278609d25591063bd444ce1697,\n        },\n        w4: G1Point256 {\n            x: 0xeba60f911766695f96f1cc1087203076722a4275781461c1cb8512937e9ca09,\n            y: 0x2531eee848f996051e53e155e72d4e2e36d6a192cef36c46d92a9d9573f5c802,\n        },\n        z_perm: G1Point256 {\n            x: 0x2f4d259d57533bb5b04a62e10b3312b1d57c31a72daf5114e65fa1bacf2db0b4,\n            y: 0x122fe61c0c3e49d24cdc6dcfe202787fbf2c12d8de5ec018c5e82491f0a58d26,\n        },\n        lookup_read_counts: G1Point256 {\n            x: 0x1c205828426756e2d6fe1a24e7d2a3f572b75a0b9ca18b0bf2098d68efdb4fd6,\n            y: 0x13d3a102f9b15308b0233b512847b2ed03fe0b9f1eadb624596edda65af3ffae,\n        },\n        lookup_read_tags: G1Point256 {\n            x: 0x1af83bd052017a1caef1cb49f7493688e4b1d2291a8c81ee828b6d8cd5a3929c,\n            y: 0xeb612b6d43562a5a959a8b335e0e8e699ccedd4331ac12ad01091ebc990b296,\n        },\n        lookup_inverses: G1Point256 {\n            x: 0x8dfe2b0529d66494e26f702f13284b1ec31bccde949e11bb9dcf2f9204b0f72,\n            y: 0x1a17d9e42eeca241deb7880a1987676cbe1043c4b4e39cb8393753d2cbb3b752,\n        },\n        libra_commitments: array![\n            G1Point256 {\n                x: 0x170915817e4884ee05a88ce77c8a34875a1821758557e2a15e451c9b44e2bf77,\n                y: 0x2687de64a3db7ce4da18126d442d00cc5a4ed4220812c29b54bd3e0a13dcb1bb,\n            },\n            G1Point256 {\n                x: 0x2be452b393768e61cfdfeccade5cdf0d1766bbf5e528b5aa1a393e49fa3e5ca9,\n                y: 0x2852b988ed0d271109741f930ea0924fcd94eb67b505d4c88d47ba12d6cfe4e5,\n            },\n            G1Point256 {\n                x: 0xd22d803fc19a867752924eb0a1cabb3d416b43cadeace3a3ebc42b49ff1ad06,\n                y: 0x27b8cd7a0a74924ed8c7d07ee75907cfade7005eb42492f8519c62020183be00,\n            },\n        ]\n            .span(),\n        libra_sum: 0x90144f9a53cfc333c47451b4adcfe1c23478b5fedc99ded280b54409de73c26,\n        sumcheck_univariates: array![\n            0x3149d68db6edb589893c337f6fa124a4e1e21c4d04fa5de31b29889da3634ec,\n            0x16d5d9a40812efff9f08eb10fbdee1c124d1d7195922927816ce778691e08152,\n            0xe8a05f197b383bbcd4cfa0972e429fc5e35c2d18079035e4979223b3fa5a7fa,\n            0x24f6a24319cafae3b708e9148a9b28d1f26ae5091c97c3a7fbe95c6571aa270,\n            0x151107311f5801d6792bc44aea560e400de6c372dfa64eec2962b1d179ba59b,\n            0xab68b23d47720b06bf7f3a4fad1958f0b036c0cea11533eea85b6831d85a1fa,\n            0x26f4315868b55f723f1c2d036316ea5125f90ecf027262126a7385f4e296e2c,\n            0x1eeb97671be33f66bca8fb643ab214d82cd46ae5afbb60f8a786d164f1f80934,\n            0x24faae84d5ee43de3815a5be73d77e2a8600526f7fc2a76fddc7238089f322e7,\n            0x18a9cb845a1fb2d9625b2251b0953b02f156c09696c3602b5286f06a4205c89,\n            0x7e42892aefeaa5209c01c9e098de4e7f0858dda32bc95da8ec08ab8220e48d8,\n            0x1d3592e48b62d8743793a25cca0e51e716fc09d7fd8f7d1d537ecc204d167d1,\n            0x2997d5b42e40cab8d9b0f7909a6b5c5fab84ba180a0c5a91a3e0b12ebfad76f5,\n            0xa419cbd276cc548aea0f9c168bbfece44382fae6fcebe2659e285655129428a,\n            0x632e4f72070d900a143fb798907979956955681b98feb27169b71caca0825e5,\n            0x2b423792b6cc5bbbb86c7889ee1a9caaa505797f3c0cf0d083c3c732dad38289,\n            0x104a3c02a4c581859887647e5ea591a4cc9ae3ca3f6ea459ca06624a74a6a0ee,\n            0x231fdb9a35dd4a8c5a6d0fd65195ccef5291f4944c627677c24ad42f0150941e,\n            0xb305bdc9fddd22f488eaac6187dae6a0e115b5209f0cbab2600d08767f73d7e,\n            0x22c974bf215ae21071ec73d7b7edc30d12b37737a248881d48ba8aba75110760,\n            0x9b0a436158fb0f2a4888e55b672aaf161884d29b1c92fc566a4769fad1f1662,\n            0x28b84b03b50c5ab8dfd459531675fddac1e9fef6747b724d4aafadd7701ad0b3,\n            0xe12eed7ece4b17ed9aefa90c4f858550d1227af01f5093ea2e1194d01dd5c1b,\n            0x236fd96ffb804945c9705b3eeb39af98329b94ff1e7e1120f1461369e2c1f7a0,\n            0x1945bc69ae6755998f65deff579a24fd45721ac071144d902329d2811c7c7fd9,\n            0x6c58d2ee567254ab86864b4652423a1a938270c740ac0aaa48bc458ee290f15,\n            0x9eab94ff32c8d5e6592803954e3cbfb66e7f2b429bbbbfaeb84480dc31ba603,\n            0x25c025181fb1cb6ac8b54d80d73dd505abebb610e12c4086ce37ef02781d09a7,\n            0x10f6a28fb969623c13a8d03de2d64a46305a1b57a4aeea72b7bb13cb20eecd36,\n            0xfccac954245c3c67536ebafb134c6beaf8068d692d82edef7071f1eec1876f2,\n            0x13bf9c5b2bb484a95f0a9805abb41a5690e353315635b39c21fbd7f580270fc4,\n            0x1933fed4de4ca7ea196d299d5bb300ecf9edbd3d6dfbdb64a17658d20021a4d9,\n            0x265815656b600b952d2e1f1c7819ca82fca81e49888abae58687e8a16440d5e8,\n            0x2ea8b4c68b9f4319d41fadb8687f840a30ad87aaa8066e57e593004f3532e134,\n            0x27f0e547478d3dc127439447953643959ae08665ccb625067efaff37414a7333,\n            0x16091d3d50a304b2711e8ab203f5c75058ccc96ae7805786f284a8ae4dba022c,\n            0x20b017ce49f243ab96013aca53b99ed0ef64836ed7b7111e75c051c042b70b1d,\n            0x16c3c2093db68946aa8daf3b183dacc7cdc72ebf291eb8eff7eb90d30eb04edb,\n            0x1ec3ca15c7f742c257cedc604dd201202ce3248cd37b4005f433688199d56196,\n            0x17952c04233c59b0394e7f6cb5c613807fdb4c99f77c2a496faeefac3b0670c8,\n            0x2cbc304b746d10106d5ca386ff1f4e3cfc7e569c04e46ecd9d69f791f8aab6eb,\n            0x1c77bd01f0bd518100a1454b33bbbdf5e4e93d6cb428894cd6fcb3b022d1e8b4,\n            0x132e106c58142b5679e7006fd3c9bf8ce55ae3e53312b62a1e7a3e3a983f8c24,\n            0x24a0381969a5bb634111aa3e613bf0f7f57a2b1a08cd10855a6cd50539008d17,\n            0x22cacd970c627c6cd704c36c516c89566870a0f05a105b877b0581088e69b35f,\n            0x2afaf6bf152ebd048ee022eb3897a2e7820c4cb8f8466df4c40755a513e33d1d,\n            0x264f26a5e116d1b8167c6d90eeefbb52e7b40ee168a81ef21d0c21a275f36043,\n            0x294253bdea2bf3dcd61bd93732f536a5bc49b57f9bd225766fecbdbab43db963,\n            0x12d8c95ede7c15ddb6ecf9fe0e42baa67e689c3200aad123b59d1cbebc0af2e0,\n            0x104510383e6234abd06c3aeec9fb08854a82620a35e45247b6cd8de461b0259a,\n            0x7d219662f75b601dc2d55fd7da3fcd5a9a18f3858b6ae8a6b043d06a4ea9b44,\n            0xaa4013906a98a1341f5a816f03e9e163eaa64baa846718e56b55255ab82bbe,\n            0x28f931b264c9a2b1e951bb4344c1136d53c6e49d5f44ae07a93b24f300077006,\n            0x27b12d853426db59cc2dbcbcc4f4f65d97f36c42ce8d1b35618cc2406f6bcc2f,\n            0x121d138ad4faf57b387a0c6ceabbcf40d267ba1a57274779d30e82eebf33f499,\n            0x1f4e057d79b4f5067e639ac93daac5c15930ed56fc4668633eec1e0171fc1e1e,\n            0x301e110c5f4bb410002752fadb973462699f99eff2c522bb29fcc3d268838969,\n            0x179b4a790c726b98fdb4e8f3538205caea13c58b21fa5e4744b5f2b32117c6bb,\n            0xfcb8cf6b078413f39e5d03c9a0764144cf69674cf3e8f947adac1867ef5dd25,\n            0x2405407e10a6d25bfc82bd8296581caf938d28ebcbd24b0203b5d24a56a046ac,\n            0x2b50b38db9a82cc14d258e8a3d7447e56ae8525ec296898c97ee2ff8d6c829d7,\n            0x27d6d4a65a494950fd8ee286c4de6d1918e30901f81185d0280a83c925546597,\n            0x66a2b7ccc890a7b28d360e935e3cc649b2ebd93c65e7971993e5d4f8419a88d,\n            0x577eb50c286a240c191897c73621c9a7a5a7eb061fa395d790e38bb3bf0ffa0,\n            0x843ed2873262d670315de6d882611c31934d04f25e7e275ec73cc0322da3204,\n            0x2a9064d23951b7392a196dfb9c89e66c824275ccba1ebdd070f95d1729b06293,\n            0x218eb8c4a137172fe1ced0281376d26148cc83b728964e04aec9d3c9bc2ca0e5,\n            0xb28012720a35d1fde5fc838f56b97e14e831b280dc9d3c5d2cd90f662acb50a,\n            0xa0c9e4e4ae3e002615dd5c69f2165acf31c64d5327df16d46d4f74eac718265,\n            0xce7ff6c1981b21a195472b06ce7d22335b13bf12e76e3070ac90adb7fd95616,\n            0x16a5335bdf6596ac1351dc015c1316098ce91c57d5b5ea50c949fd652bfc815f,\n            0xfe114dc57f1a2f4bae55b57b366d0b499f956da79b1b6736df7fb9dcc4547ca,\n            0x147892a2bba985b7a415c2c108bb60a413581331c4aa3df48abe41bec92bffb7,\n            0x13ecd1b079e18b2a84cc1f92af470baf348518ec044dc4fe416336bcca53b38a,\n            0x1569b0c81db8022270d0af9cafbe881173d952ddf37c07ec2a766b6c578f37d7,\n            0x10db7d41f627623b905f28baed9ae528272d131e9c899885037f7fcd8083b177,\n            0x24c3021fb55a11c5833d4141c529a2166afa1d94208dad69f9ac2a19516ed28f,\n            0x2e7d5fc72956e9825f0f14fb3c0fd27ffbf6de4b248773759f39a30956270c1a,\n            0x2c7a64b108fe865fb1ee22323c3cab2b2d949b80d24642d131b4ff4643a9b9c9,\n            0x2b3c851da00e8c3b44422c1522fe5cf884a786626c34c6e4426a35ec221ce0b7,\n            0x165853d1ecaad0c5aea08d3ddc6511d174697f594afeca57a1ce8f6fda021c14,\n            0x10931a4f5f8e17c9233ae0b7f675ace7d056c244f376958041579b9bf897652d,\n            0x684e5cd9e7d09d905e11e660b811d2afc1e8a248f822cceb80d085e15d37c1f,\n            0x1cfbc7620177d24eab2b2c3184e70d04eb289f87a0d9c141d4d820f7a2eb87c0,\n            0x2471650400ec3bb9ae965ea280132cdd6db6305b1e7503648a42badf4b831bda,\n            0x106f62d6823cae740320e3efa8928f916bf79cebccfd9f6e8c19213d1403df05,\n            0x8c796662cf9ee1ad01ff917be730cbfde624286c76c54a2edc6d202c2b407c8,\n            0x146c0f4c6464f9fb5b15300f2e69c9b08624734c2f68cea603580fd08715822,\n            0x1e519b10d4404fa71f34885ffe96929ba174696f1f683c21d1f97cb04bd4d22b,\n            0x1db5c6b7ffa992613926b14dc9e2d38ccaf540b28989b454b9ba6e827921619c,\n            0x221294410242d3af8f43fb85acaef03ef5f25f9d04334fd7e293355f85d512bd,\n            0x1943b5ae1d9f077ab778c538e49a62e7d4d28b597446b560d16e72da8072bb3d,\n            0x4a9f7d95827a54eee2c8242d174c95ddc3f9d8d69507de49ca41adea8261d19,\n            0xa1810218a2aa24b3aced9a70886da5bf931e5482a7eebc805330e435a0285ad,\n            0x21c33cbe7a21ba6b7abfe15937c1b295bc12afbf582512bdc8bbf5655164c494,\n            0x2ca72a8a3499bfe2d0eb23e7bfe3244f9125ef19f3353bdecb99957b351bdf23,\n            0x236c92d20e92a0670678bd93b9a8d2ce5cd777407337dba37afcde2c73b296e8,\n            0x112ae8a0c5764d4c0de96f7001857726904dab3b66324a96b9272a18185a7761,\n            0x294dc118f95f01a6a77d01341801a12ea3ca8135eea4c593d0e3ab020b17eb3f,\n            0x2d9a0c73e31475e0b545e497b562a3c51340e0a9578ce78019a07f2ea8780d71,\n            0x16538f95bff012672df3fa422dcebc32600ae0cf100b72bbf0e5f36ca55c079c,\n            0x2c141dc8ef9c6ee31c17a04af6ba16b3489956dfd601437312be4571f909a5b,\n            0x231ba01c0cea4e1634851d2195e5bdff65ca184b39812e03be83aa269ba4c094,\n            0x2891195c085604acfdf93ef63e535eced06d41bc8058c31c6e7ab680de727540,\n            0x2cb5ccf9dc7fba5b62f47e20f1dc78bbac5741016e67df2678dac62da61c9ce6,\n            0xd9c684b8b528dea680d100518355c92c9707aae4bbcdcc221c9b947864cfdba,\n            0x18957cdde94d31a2b9961d680b45158e0522d6eaa79daff030d123f0fe463b2e,\n            0x24df9e3fbd718e06157a9de498e0d97becc7ed30174041a90de1cec78cc74fe9,\n        ]\n            .span(),\n        sumcheck_evaluations: array![\n            0xda1f5a72d1ec76cda05874ef901ba28ce501879ad38eaf3f9b6361df206a973,\n            0x1ed85d53329e768dd416a57420e6d9cb5932c1882cf4a63394634de89452176a,\n            0x1d04ffeaff81057edef1460352e01891da17828af736f9f25d7e6c0f1ff07596,\n            0x2c9c0a7f812b743a24af92cb933ef6fe0e57872bafe7bcf09edb1ad91a80880b,\n            0x24d368974add765b0465b03cd25e8fa707aa07ac132275bd8f152648626eff34,\n            0x196bc2a2c56b57e59f6a5e9f8776e01d0576858ce4790b584e478242f29e2bff,\n            0x159fb5b8f9d76812eeab102d5881cedaeeb0b57e98e6b4b8466916e3b268aa9c,\n            0x17208caf6206925146bbaf5ba306efd47fa53dbc3d33696a9b33194db83e585e,\n            0x61d45cf35212d7214c22ff7ff9e6ef520b6773d493640fb2988550f972c8802,\n            0x7b91f492b587fade1b237adfeefe507fc76bcbf5a4faafc76ecf7b0346b88b5,\n            0x1dbe57d9bbe4f32165b4e6264ae69058d3143fbb6d01bfa839de3cd003a246a6,\n            0x1612ca4aa2cf172583d2cd1c3a67221abecb16d91d9c4fb067b784d4fdb4c112,\n            0x2266a0bca10cd57eba99438f820e8a0a91f7095831a474510110ce030d68bfbf,\n            0x28a2fb53bc4d65fbd7902353d352fc3ff9f10baf0f565221ba3ccf3a02596e40,\n            0x1a7eb155f45e7585bd3f000ff98c57a44f23df666585dbd04d3f881a8d5c841c,\n            0x1878c1e0ea64fa025d989d85081ddb3c0b3caf1b83f950bdb746cb052f7516a0,\n            0x276dd76fb0ca6fe37e4aa87d9107abd1d499af57e6bb587dfff5fd61969f7b6e,\n            0x1308a2d137e657fcacc9368b5c4dc672ee358f9878dece5aff25994b9797ae9a,\n            0x1f030b8b61847b35361104ae7ed473b72f57126323d35ca00189b532c7a2976,\n            0x2be3abfd1d75a1c0c1c121f602ee6c51c098474b2541c8758cb98bcc1350413c,\n            0x1bb5b1028805b0c1a875939537de220777403b1ef8787b361872cf715cd2c3e9,\n            0x1abafb4da41750fdfbea04d59ec64bb90fb4451b0b24e30035ec08fe832babb2,\n            0x1e9682feb5c4594b7acfe9fa6c8bad335e3c91d215c68034e3b46f11f9f2c61f,\n            0x2658a073798adbbce5691192977b2316626731acd49565ee30953275f96d0f8d,\n            0x25c0a364baa8f10aea8f4295f44e30817662f6c2e446dd71941fcfe377a2500b,\n            0x185ebc437928bcdbb426d9612d876c0b3aa89b5c8987014fdd040e0de6357039,\n            0x832fd6a95e9d33d53d1867f40fe6f5eb2c742c89ffe534ab5fa4b9f28e45192,\n            0x15bba137e6114ef194c6dd0c4a294047720a52ba05bfb3232113fb9c03a2740b,\n            0x20c8d9a09290bf43a0346153491f693ca3af127d9842fe196310bf5e3863a41b,\n            0x2996bbc4aac149f9e1176c8a10e731642acd43ee45b4f39eea30502e7c7b23cf,\n            0x1678d7bdb6529a27bd8bcd78df9237ce30bc8b161c9a03220b27d777694ea3c5,\n            0x26e6234272e92ff6eff8e8391567528de1e1c82f66628aa2679343319fedbdab,\n            0x56d249e93995c56591338bec2af3b770ed0ab09cf9b15c30245268c7c08316d,\n            0x5db0360469781fab0e6e0adc65adf68490b2b4d46bc43a584694e8eaf56f65c,\n            0x2d98fef4d951abf9a4724f5f960a6813fcd1b5bb0e5bcd390a8d5b457fc89c14,\n            0x291453c614c83070310f7eee9103d15858371cf28460788799ba673c94eeeae3,\n            0x9051b6d85fea1b22e85cc849c153074c399f81a241abea2121972ccac321fda,\n            0xc6a75a540dcb928e18bf7b90d1243a7ffe96db6cdf90cdb4698ff4ada76a6e3,\n            0x2ad59d311c014d11a8b906f3696fc86193cc6d228f568b45b06a7ffff25675ce,\n            0x158b238a3c1c894a9c7ab11bedfe7564af3d5fd8c15c8d208c1f347ff2a33ca0,\n            0x703886f358e78a25a832d65cc8fbe5367da5082435cd734f0e796576637d2a1,\n        ]\n            .span(),\n        libra_evaluation: 0x1132ace165bbb656b51a3e2cc2afd3233ec2bec2784a63214acb8615929266e3,\n        gemini_masking_poly: G1Point256 {\n            x: 0x26014e34fea9af7f7811011ecbde8ebfd88e0756b5a07ddaf6282295fe8b5d2b,\n            y: 0x1f82c2e2c6d56563ffcaf90b0164fed63750d10f0f62e0d436090346b51281da,\n        },\n        gemini_masking_eval: 0x1c9d49995b00c7ac2b1bd1c5d3c4cc9e3f7e06e37b66a4ed37fcbc212c6b21a2,\n        gemini_fold_comms: array![\n            G1Point256 {\n                x: 0x2918d3bea258d9e87d3c1864cc4b51e2a660f22b6835bea39099e8d28b644d49,\n                y: 0x1c04a1962be87e2cca7683eeeb89df859b71be6e49bb9addbf6020e1b80af882,\n            },\n            G1Point256 {\n                x: 0xad8457e1af0a0b9c009c589dc2aa7c6ca8184e5ab3b8547eb924c051969d87c,\n                y: 0x1e8136880bc80710c9746ca9ab32e1355814e73bdf996fbb95161a43212c0476,\n            },\n            G1Point256 {\n                x: 0x8dcff84c035e66e9fea2edd57edc0299678373ccfb62264b3f9fb0fa5d85b3b,\n                y: 0x299f4b10d489ce2001d7f05a1a98f120d2088abdb1f1cf6f668aae0519362cce,\n            },\n            G1Point256 {\n                x: 0x21a02af46e8a9449d16f1359f2c0e44484388d70e838c07b826182d4386bf875,\n                y: 0x1489e07ff0ea2d7ed52a64476b9365ceac3268fa3cf4a008243d92c2fa1aa500,\n            },\n            G1Point256 {\n                x: 0x2fe2ca7bc51f9426d7ac008e8d18f0779f132c5f7b14f8a7070cff82951bfffe,\n                y: 0x21ebd772c6ce32090a524a1fe16b88e1b5acb76a9f553133c15ca0a529eb71d9,\n            },\n            G1Point256 {\n                x: 0x483d5e7e02ffadc40e03af829fab2d1ec4c3ec2273865ced6f8c9bec0db89a9,\n                y: 0x24cee8d6fd9d9cd11a136c01b160e8ebc63e78fdf2b6bafc0a11ceaf0c7a082a,\n            },\n            G1Point256 {\n                x: 0x1a3ec43fbb203ca00bf3d5206c7399ed48027170e5b4704ac969ce730e5d974b,\n                y: 0x21f38a577ade9fd8bbcf3510a97c358b0c660216e4a83c368406cca6b2fd2799,\n            },\n            G1Point256 {\n                x: 0x1466ac7fe3cec7cfc27e88415660f632b6a5651f45818a033afc3dd4066f23f1,\n                y: 0xecd64b04c089455277f46b3a946046f1445674cbcb2c537bba2498f34efd7f2,\n            },\n            G1Point256 {\n                x: 0x1dccac0dff547f871103577bd87509dfa0103188faadeddca36dea513dcccd6f,\n                y: 0x8f41998df00acf151dcea7d61f38dcb0f12ba94eba520755684230e1dc43e79,\n            },\n            G1Point256 {\n                x: 0x2201ff1c5b0bc9d9304c8fcb5ceaab7389aaaa639fccc15c99757ae33d0a0bab,\n                y: 0xe817c9e51dca78ff6d0d9390884deac07919706599688a3663e45761c185287,\n            },\n            G1Point256 {\n                x: 0x1b44c9747e5e2e9a8084ff374bedc82ee9c02079cd7017a7f3de5fe6735d9a87,\n                y: 0x23a08eadc1723f6c47ae0da29880b3122be4d80c1c161955be55a7de1ef634b4,\n            },\n        ]\n            .span(),\n        gemini_a_evaluations: array![\n            0x26a6901a61216f8b4252c1d327711877a6078f277643443896f1f832c6da1f66,\n            0x1bbacd086d6b20ace675bf297a3fcfc6865e986c78ae9171d774d22d1242cbb1,\n            0x27a5d919bb1cecac67cc4bd6b260a04e33a91283e4b9cf071399e8249743876a,\n            0x2bce80ffb28871803bb5cf5dbfa65b9256e0dea0dd9449104ba26ab8db5c7bbb,\n            0x252d45f8db3a296d722dc7df3d9e640b1ee375d598bbf51cd5584ed52e67ae62,\n            0x12e77f2aaf87ba208a822b98f2e02a7928236fcbdc413b9bad32d2bc7bee9c52,\n            0x8c56bc9d6093c8a56d94d7987331aa6cb17008b9460f76785ed2d57ef600d70,\n            0x2cad2a1c5329e115d078e74b264e937adaf4e0eb1ed682424789b6ee340387c1,\n            0x522e03828a6195d3279fffb5b805666a69a582c5c90b17c2a719f790f443483,\n            0x247d32c70f1aadddd49ed465539f1e544b1c9dd7478b4077adf8cae1bae7dad7,\n            0x1e69b320445a0e22ccfbbdb54eee09bf9bd5b293b8d7d727fe8c8e7064b7768d,\n            0x2b592160911cb387fd83294230672bc528a6c25d9b3fb99417c74f7de7f197c2,\n        ]\n            .span(),\n        libra_poly_evals: array![\n            0x41fd901c2fda436051e8923e20fcc27afb24a65d70eb00473f172e9f7f9776,\n            0xd794e3a56c5c5fb5f5a48ef6f17f1956ef8197b7bfe838e685acae0efcb8d90,\n            0x2f4b4a38d4ecc05f39865b2b05731bde72a9c7b36e3f9cb6486f3653806a56ef,\n            0x131bcf56f4b07e163b777029ef66826bfcdad7f1fd2c881d8e06f2d9b98148fc,\n        ]\n            .span(),\n        shplonk_q: G1Point256 {\n            x: 0xc1728e9f86fb53fe3befee017177d6a30a27feb87dfa78846a7fd510618d3b5,\n            y: 0x67583f1cd028a2b317f924ead8e3a00884dfc6966442521972479b22d7d82d5,\n        },\n        kzg_quotient: G1Point256 {\n            x: 0x145edb11f0b06a0cccd6233a0f9659439b7c0cf388f18aad29cbe3eb5ae61eb7,\n            y: 0x1912b95a1b1811be10bd6149227d5c11d47c78b76ded7a17e4c77bd1f9b9a841,\n        },\n    }\n}\n// #[cfg(test)]\n// mod tests {\n//     use super::{\n//         HonkProof, HonkVk, G1Point256, G1PointProof, get_proof,\n//         remove_unused_variables_sumcheck_evaluations, U64IntoU384\n//     };\n//     use core::num::traits::{Zero, One};\n\n//     use core::circuit::u384;\n//     use garaga::apps::noir::keccak_transcript::{HonkTranscriptTrait};\n//     use garaga::circuits::honk_circuits::{\n//         run_GRUMPKIN_HONK_SUMCHECK_SIZE_5_PUB_1_circuit,\n//         run_GRUMPKIN_HONK_PREPARE_MSM_SCALARS_SIZE_5_circuit,\n//     };\n\n//     #[test]\n//     fn test_sumcheck() {\n//         let proof = get_proof();\n//         let (transcript, base_rlc) = HonkTranscriptTrait::from_proof(proof);\n//         let log_n = 5;\n//         let (check_rlc, check) = run_GRUMPKIN_HONK_SUMCHECK_SIZE_5_PUB_1_circuit(\n//             p_public_inputs: proof.public_inputs,\n//             p_public_inputs_offset: proof.public_inputs_offset.into(),\n//             sumcheck_univariate_0: (*proof.sumcheck_univariates.at(0)),\n//             sumcheck_univariate_1: (*proof.sumcheck_univariates.at(1)),\n//             sumcheck_univariate_2: (*proof.sumcheck_univariates.at(2)),\n//             sumcheck_univariate_3: (*proof.sumcheck_univariates.at(3)),\n//             sumcheck_univariate_4: (*proof.sumcheck_univariates.at(4)),\n//             sumcheck_evaluations: remove_unused_variables_sumcheck_evaluations(\n//                 proof.sumcheck_evaluations\n//             ),\n//             tp_sum_check_u_challenges: transcript.sum_check_u_challenges.span().slice(0, log_n),\n//             tp_gate_challenges: transcript.gate_challenges.span().slice(0, log_n),\n//             tp_eta_1: transcript.eta.into(),\n//             tp_eta_2: transcript.eta_two.into(),\n//             tp_eta_3: transcript.eta_three.into(),\n//             tp_beta: transcript.beta.into(),\n//             tp_gamma: transcript.gamma.into(),\n//             tp_base_rlc: base_rlc.into(),\n//             tp_alphas: transcript.alphas.span(),\n//         );\n\n//         assert(check_rlc.is_zero(), 'check_rlc should be zero');\n//         assert(check.is_zero(), 'check should be zero');\n//     }\n// }\n\n\n"
  },
  {
    "path": "src/src/apps/risc0.cairo",
    "content": "use core::integer;\nuse core::sha256::{compute_sha256_byte_array, compute_sha256_u32_array};\nuse garaga::pairing_check::MPCheckHintBN254;\nuse garaga::utils::calldata::{\n    Groth16ProofRaw, _deserialize_groth16_proof_points, _deserialize_mpcheck_hint_bn254,\n};\nuse garaga::utils::usize_assert_eq;\n\n\n#[derive(Drop)]\npub struct FullProofWithHintsRisc0 {\n    pub groth16_proof: Groth16ProofRaw,\n    pub image_id: Span<u32>,\n    pub journal: Span<u8>,\n    pub mpcheck_hint: MPCheckHintBN254,\n    pub msm_hint: Span<felt252>,\n}\n\n// sha256(b\"risc0.ReceiptClaim\") =\n// 0xcb1fefcd1f2d9a64975cbbbf6e161e2914434b0cbb9960b84df5d717e86b48af\nconst TAG_DIGEST: [u32; 8] = [\n    0xcb1fefcd, 0x1f2d9a64, 0x975cbbbf, 0x6e161e29, 0x14434b0c, 0xbb9960b8, 0x4df5d717, 0xe86b48af,\n];\n\n// 0xA3ACC27117418996340B84E5A90F3EF4C49D22C79E44AAD822EC9C313E1EB8E2\n// https://github.com/risc0/risc0-ethereum/blob/34d2fee4ca6b5fb354a8a1a00c43f8945097bfe5/contracts/src/IRiscZeroVerifier.sol#L60\nconst SYSTEM_STATE_ZERO_DIGEST: [u32; 8] = [\n    0xa3acc271, 0x17418996, 0x340b84e5, 0xa90f3ef4, 0xc49d22c7, 0x9e44aad8, 0x22ec9c31, 0x3e1eb8e2,\n];\n\nconst INPUT_ZERO: [u32; 8] = [0, 0, 0, 0, 0, 0, 0, 0];\n\n// sha256(b\"risc0.Output\") =\n// 0x77eafeb366a78b47747de0d7bb176284085ff5564887009a5be63da32d3559d4\nconst RISC0_OUTPUT_TAG: [u32; 8] = [\n    0x77eafeb3, 0x66a78b47, 0x747de0d7, 0xbb176284, 0x85ff556, 0x4887009a, 0x5be63da3, 0x2d3559d4,\n];\n\nfn uint256_byte_reverse(x: u256) -> u256 {\n    let new_low = integer::u128_byte_reverse(x.high);\n    let new_high = integer::u128_byte_reverse(x.low);\n    return u256 { low: new_low, high: new_high };\n}\n\npub fn journal_sha256(journal: Span<u8>) -> Span<u32> {\n    let journal_arr: Array<u8> = journal.into();\n    let mut journal_byte_arr = \"\";\n\n    for byte in journal_arr {\n        journal_byte_arr.append_byte(byte);\n    }\n\n    let journal_digest = compute_sha256_byte_array(@journal_byte_arr);\n\n    return journal_digest.span();\n}\n\n// https://github.com/risc0/risc0-ethereum/blob/34d2fee4ca6b5fb354a8a1a00c43f8945097bfe5/contracts/src/IRiscZeroVerifier.sol#L71-L98\npub fn compute_receipt_claim(image_id: Span<u32>, journal_digest: Span<u32>) -> u256 {\n    usize_assert_eq(image_id.len(), 8);\n\n    let mut array = array![];\n\n    // Tag digest\n    for v in TAG_DIGEST.span() {\n        array.append(*v);\n    }\n\n    // Input\n    for v in INPUT_ZERO.span() {\n        array.append(*v);\n    }\n\n    // Pre state digest\n    for v in image_id {\n        array.append(*v);\n    }\n\n    // Post state digest\n    for v in SYSTEM_STATE_ZERO_DIGEST.span() {\n        array.append(*v);\n    }\n\n    // Output\n    let output_digest = output_digest(journal_digest);\n    for v in output_digest.span() {\n        array.append(*v);\n    }\n\n    // Exit_code system (0) (4 bytes) + Exit Code User (0) (4 bytes)\n    array.append(0);\n    array.append(0);\n\n    // Append 4 << 8 = 1024 to the end of the array (2 bytes)\n    let res_u32 = compute_sha256_u32_array(\n        input: array, last_input_word: 1024, last_input_num_bytes: 2,\n    )\n        .span();\n\n    let res_low: felt252 = (*res_u32[7]).into()\n        + (*res_u32[6]).into() * 0x100000000\n        + (*res_u32[5]).into() * 0x10000000000000000\n        + (*res_u32[4]).into() * 0x1000000000000000000000000;\n\n    let res_high: felt252 = (*res_u32[3]).into()\n        + (*res_u32[2]).into() * 0x100000000\n        + (*res_u32[1]).into() * 0x10000000000000000\n        + (*res_u32[0]).into() * 0x1000000000000000000000000;\n\n    return uint256_byte_reverse(\n        u256 { low: res_low.try_into().unwrap(), high: res_high.try_into().unwrap() },\n    );\n}\n\n\nfn output_digest(journal_digest: Span<u32>) -> [u32; 8] {\n    let mut array = array![];\n    usize_assert_eq(journal_digest.len(), 8);\n\n    for v in RISC0_OUTPUT_TAG.span() {\n        array.append(*v);\n    }\n\n    for v in journal_digest {\n        array.append(*v);\n    }\n\n    // Assumptions digest\n    for v in INPUT_ZERO.span() {\n        array.append(*v);\n    }\n\n    // Add 2 << 8 = 512 to the end of the array (2 bytes)\n    compute_sha256_u32_array(input: array, last_input_word: 512, last_input_num_bytes: 2)\n}\n\npub fn deserialize_full_proof_with_hints_risc0(\n    mut serialized: Span<felt252>,\n) -> FullProofWithHintsRisc0 {\n    let groth16_proof_raw = _deserialize_groth16_proof_points(ref serialized);\n\n    let n_image_id: u32 = (*serialized.pop_front().unwrap()).try_into().unwrap();\n    let mut image_id: Array<u32> = array![];\n    for _ in 0..n_image_id {\n        image_id.append((*serialized.pop_front().unwrap()).try_into().unwrap());\n    }\n\n    let n_journal: u32 = (*serialized.pop_front().unwrap()).try_into().unwrap();\n    let mut journal: Array<u8> = array![];\n    for _ in 0..n_journal {\n        journal.append((*serialized.pop_front().unwrap()).try_into().unwrap());\n    }\n\n    let mpcheck_hint = _deserialize_mpcheck_hint_bn254(ref serialized);\n\n    let msm_hint = serialized;\n    return FullProofWithHintsRisc0 {\n        groth16_proof: groth16_proof_raw,\n        image_id: image_id.span(),\n        journal: journal.span(),\n        mpcheck_hint: mpcheck_hint,\n        msm_hint: msm_hint,\n    };\n}\n#[cfg(test)]\nmod risc0_utils_tests {\n    use super::{compute_receipt_claim, output_digest, uint256_byte_reverse};\n    #[test]\n    fn test_receipt_claim() {\n        let image_id: [u32; 8] = [\n            3491501487, 2808651867, 557489759, 3452720932, 2727640576, 160202435, 1288430228,\n            1807482899,\n        ];\n        let journal_digest: [u32; 8] = [\n            998783442, 2641348904, 1804572153, 3329687312, 3249394632, 3219372246, 356247808,\n            552440254,\n        ];\n        let receipt_claim = compute_receipt_claim(image_id.span(), journal_digest.span());\n        assert_eq!(\n            receipt_claim,\n            uint256_byte_reverse(\n                0xe58e40abecebcfa4af85692fca5ed77d4ccb4b3f640f5e684e4faf3a36b0c4e0,\n            ),\n        );\n    }\n    #[test]\n    fn test_output_digest() {\n        let journal_digest: [u32; 8] = [\n            998783442, 2641348904, 1804572153, 3329687312, 3249394632, 3219372246, 356247808,\n            552440254,\n        ];\n        let out = output_digest(journal_digest.span());\n        assert_eq!(\n            out,\n            [\n                0x6293f84a, 0xf9e28fcc, 0x43eb4d3d, 0xf962d8d8, 0x1364db76, 0x22a407a1, 0xab5be010,\n                0x1a1f0a26,\n            ],\n        );\n    }\n}\n"
  },
  {
    "path": "src/src/apps/sp1.cairo",
    "content": "use core::sha256::compute_sha256_u32_array;\nuse corelib_imports::bounded_int::{AddHelper, BoundedInt, MulHelper, UnitInt, bounded_int, upcast};\nuse garaga::ec::pairing::groth16::{Groth16Proof, verify_groth16_bn254};\nuse garaga::pairing_check::MPCheckHintBN254;\nuse garaga::utils::calldata::{\n    Groth16ProofRaw, _deserialize_groth16_proof_points, _deserialize_mpcheck_hint_bn254,\n};\nuse super::sp1_constants::{ic, precomputed_lines, vk};\n\n#[derive(Drop)]\npub struct FullProofWithHintsSP1 {\n    pub groth16_proof: Groth16ProofRaw,\n    pub vkey: u256,\n    pub public_inputs_sp1: Array<u32>,\n    pub mpcheck_hint: MPCheckHintBN254,\n    pub msm_hint: Span<felt252>,\n}\n\nconst POW_32: felt252 = 0x100000000;\nconst POW_64: felt252 = 0x10000000000000000;\nconst POW_96: felt252 = 0x1000000000000000000000000;\n\nconst POW_32_UI: UnitInt<POW_32> = 0x100000000;\nconst POW_64_UI: UnitInt<POW_64> = 0x10000000000000000;\nconst POW_96_UI: UnitInt<POW_96> = 0x1000000000000000000000000;\n\nconst POW_128: felt252 = 0x100000000000000000000000000000000;\n\n\npub type u32_bi = BoundedInt<0, { POW_32 - 1 }>;\npub type u64_bi = BoundedInt<0, { POW_64 - 1 }>;\npub type u96_bi = BoundedInt<0, { POW_96 - 1 }>;\npub type u128_bi = BoundedInt<0, { POW_128 - 1 }>;\n\npub type w1_shift_32 = BoundedInt<0, { 0xffffffff00000000 }>; // (2**32)-1 * 2**32\npub type w2_shift_64 = BoundedInt<0, { 0xffffffff0000000000000000 }>; // (2**32)-1 * 2**64\npub type w3_shift_96 = BoundedInt<0, { 0xffffffff000000000000000000000000 }>; // (2**32)-1 * 2**96\n\n\nimpl MulHelperU32ByPow32Impl of MulHelper<u32_bi, UnitInt<POW_32>> {\n    type Result = w1_shift_32;\n}\n\nimpl MulHelperU32ByPow64Impl of MulHelper<u32_bi, UnitInt<POW_64>> {\n    type Result = w2_shift_64;\n}\n\nimpl MulHelperU32ByPow96Impl of MulHelper<u32_bi, UnitInt<POW_96>> {\n    type Result = w3_shift_96;\n}\n\nimpl AddHelperU32ByW1Impl of AddHelper<u32_bi, w1_shift_32> {\n    type Result = u64_bi;\n}\n\nimpl AddHelperU64ByW2Impl of AddHelper<u64_bi, w2_shift_64> {\n    type Result = u96_bi;\n}\n\nimpl AddHelperU96ByW3Impl of AddHelper<u96_bi, w3_shift_96> {\n    type Result = u128_bi;\n}\n\n\npub fn convert_u32_to_u128(input: [u32; 4]) -> u128 {\n    let [w3, w2, w1, w0] = input;\n    let w3_bi: u32_bi = upcast(w3);\n    let w2_bi: u32_bi = upcast(w2);\n    let w1_bi: u32_bi = upcast(w1);\n    let w0_bi: u32_bi = upcast(w0);\n    let tmp: u64_bi = bounded_int::add(w0_bi, bounded_int::mul(w1_bi, POW_32_UI));\n    let tmp: u96_bi = bounded_int::add(tmp, bounded_int::mul(w2_bi, POW_64_UI));\n    let result: u128_bi = bounded_int::add(tmp, bounded_int::mul(w3_bi, POW_96_UI));\n    return upcast(result);\n}\n\n// 2**253\nconst POW_253: u256 = 0x2000000000000000000000000000000000000000000000000000000000000000;\n\npub fn process_public_inputs_sp1(public_inputs: Array<u32>) -> (Span<u256>, u256) {\n    let mut pi = public_inputs.span();\n    let mut pub_inputs_256: Array<u256> = array![];\n    assert(public_inputs.len() % 8 == 0, 'wrong sp1 pub inputs size');\n\n    while let Option::Some(word) = pi.multi_pop_front::<8>() {\n        let [w7, w6, w5, w4, w3, w2, w1, w0] = (*word).unbox();\n        let high_128 = convert_u32_to_u128([w7, w6, w5, w4]);\n        let low_128 = convert_u32_to_u128([w3, w2, w1, w0]);\n        pub_inputs_256.append(u256 { low: low_128, high: high_128 });\n    }\n    let [h7, h6, h5, h4, h3, h2, h1, h0] = compute_sha256_u32_array(\n        input: public_inputs, last_input_word: 0, last_input_num_bytes: 0,\n    );\n\n    let hash_raw = u256 {\n        low: convert_u32_to_u128([h3, h2, h1, h0]), high: convert_u32_to_u128([h7, h6, h5, h4]),\n    };\n    let hash_mod = hash_raw % POW_253;\n\n    return (pub_inputs_256.span(), hash_mod);\n}\n\n\npub fn deserialize_full_proof_with_hints_sp1(\n    mut serialized: Span<felt252>,\n) -> FullProofWithHintsSP1 {\n    let groth16_proof_raw = _deserialize_groth16_proof_points(ref serialized);\n    let vkey = u256 {\n        low: (*serialized.pop_front().unwrap()).try_into().unwrap(),\n        high: (*serialized.pop_front().unwrap()).try_into().unwrap(),\n    };\n    let n_words: u32 = (*serialized.pop_front().unwrap()).try_into().unwrap();\n    let mut public_inputs_sp1: Array<u32> = array![];\n\n    for _ in 0..n_words {\n        let [w7, w6, w5, w4, w3, w2, w1, w0] = (*serialized.multi_pop_front::<8>().unwrap())\n            .unbox();\n        public_inputs_sp1.append(w7.try_into().unwrap());\n        public_inputs_sp1.append(w6.try_into().unwrap());\n        public_inputs_sp1.append(w5.try_into().unwrap());\n        public_inputs_sp1.append(w4.try_into().unwrap());\n        public_inputs_sp1.append(w3.try_into().unwrap());\n        public_inputs_sp1.append(w2.try_into().unwrap());\n        public_inputs_sp1.append(w1.try_into().unwrap());\n        public_inputs_sp1.append(w0.try_into().unwrap());\n    }\n\n    let mpcheck_hint = _deserialize_mpcheck_hint_bn254(ref serialized);\n\n    let msm_hint = serialized;\n    return FullProofWithHintsSP1 {\n        groth16_proof: groth16_proof_raw,\n        vkey: vkey,\n        public_inputs_sp1: public_inputs_sp1,\n        mpcheck_hint: mpcheck_hint,\n        msm_hint: msm_hint,\n    };\n}\npub fn verify_groth16_sp1(proof: FullProofWithHintsSP1) -> Result<Span<u256>, felt252> {\n    let groth16_proof_raw = proof.groth16_proof;\n    let vkey = proof.vkey;\n    let public_inputs_sp1 = proof.public_inputs_sp1;\n    let mpcheck_hint = proof.mpcheck_hint;\n    let mut msm_hint = proof.msm_hint;\n    let _ = msm_hint.pop_front().unwrap();\n\n    let (_pub_inputs_256, pub_input_hash): (Span<u256>, u256) = process_public_inputs_sp1(\n        public_inputs_sp1,\n    );\n\n    let proof_pub_input = array![vkey, pub_input_hash];\n\n    let proof = Groth16Proof { raw: groth16_proof_raw, public_inputs: proof_pub_input.span() };\n\n    let result = verify_groth16_bn254(\n        vk, precomputed_lines.span(), ic.span(), proof, msm_hint, mpcheck_hint,\n    );\n    match result {\n        Result::Ok(_) => Result::Ok(proof.public_inputs),\n        Result::Err(error) => Result::Err(error),\n    }\n}\n#[cfg(test)]\nmod tests {\n    use super::convert_u32_to_u128;\n\n    #[test]\n    fn test_convert_u32_to_u128() {\n        let input = [0, 0, 0, 1];\n        let result = convert_u32_to_u128(input);\n        assert_eq!(result, 1);\n    }\n}\n"
  },
  {
    "path": "src/src/apps/sp1_constants.cairo",
    "content": "// Generated by Garaga version 1.1.0\nuse garaga::definitions::{E12D, G1Point, G2Line, G2Point, u288, u384};\nuse garaga::groth16::Groth16VerifyingKey;\n\npub const N_PUBLIC_INPUTS: usize = 2;\n\npub const vk: Groth16VerifyingKey<u288> = Groth16VerifyingKey {\n    alpha_beta_miller_loop_result: E12D {\n        w0: u288 {\n            limb0: 0x38febe9f87f730fa3e5bd174,\n            limb1: 0xf763950637a776ef9e248435,\n            limb2: 0x29dc2d37c63acbda,\n        },\n        w1: u288 {\n            limb0: 0xa31610a97aa4e4539be919ff,\n            limb1: 0xfa4d4bfb72b6a3c002018e97,\n            limb2: 0x1968ab971e610fce,\n        },\n        w2: u288 {\n            limb0: 0xee6c1ce3a15313c6f9d57f7e,\n            limb1: 0xd37e28396640fcfe5f122aae,\n            limb2: 0x210d3763f7a27517,\n        },\n        w3: u288 {\n            limb0: 0x7746ddac185562e756b1b92f,\n            limb1: 0x44f8b75638ef5a373f319cd8,\n            limb2: 0x51e9605db4edac6,\n        },\n        w4: u288 {\n            limb0: 0xc29e0c2ac434301d671ffa56,\n            limb1: 0xa06f1db2d4ca4dd88f979102,\n            limb2: 0x1d0126fb7d721e02,\n        },\n        w5: u288 {\n            limb0: 0xed2e022e10acbeb35084dc1,\n            limb1: 0xf9de514baee870f114669060,\n            limb2: 0x10889a0f300ce96c,\n        },\n        w6: u288 {\n            limb0: 0xeec23aadde92d2dd00e4568e,\n            limb1: 0x6d5b4b63667db8f10bd851ab,\n            limb2: 0x18f1dd15d2e64c69,\n        },\n        w7: u288 {\n            limb0: 0x2131bad24ea07a033d0bf397,\n            limb1: 0xb6312a7f2622146be93b5950,\n            limb2: 0x227e61ca055f0ac3,\n        },\n        w8: u288 {\n            limb0: 0xb896f30b06350f012274ebcd,\n            limb1: 0xd14298f13a76183170aafe08,\n            limb2: 0x302bfd90358d23a0,\n        },\n        w9: u288 {\n            limb0: 0x679d91263798da428fa5ea62,\n            limb1: 0x806797d163f4df8b55ec774c,\n            limb2: 0x29b72d4ec063face,\n        },\n        w10: u288 {\n            limb0: 0x4dbef45fe0c5a14bef7c4a90,\n            limb1: 0xd4ae215c443d0f0768198bc6,\n            limb2: 0x2fcc02633e427272,\n        },\n        w11: u288 {\n            limb0: 0x7308cad65773475443cfbd80,\n            limb1: 0x972f90a77f1a8aeece6571ff,\n            limb2: 0x2d3a570362a9fd7f,\n        },\n    },\n    gamma_g2: G2Point {\n        x0: u384 {\n            limb0: 0xf75edadd46debd5cd992f6ed,\n            limb1: 0x426a00665e5c4479674322d4,\n            limb2: 0x1800deef121f1e76,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0x35a9e71297e485b7aef312c2,\n            limb1: 0x7260bfb731fb5d25f1aa4933,\n            limb2: 0x198e9393920d483a,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0xc43d37b4ce6cc0166fa7daa,\n            limb1: 0x4aab71808dcb408fe3d1e769,\n            limb2: 0x12c85ea5db8c6deb,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0x70b38ef355acdadcd122975b,\n            limb1: 0xec9e99ad690c3395bc4b3133,\n            limb2: 0x90689d0585ff075,\n            limb3: 0x0,\n        },\n    },\n    delta_g2: G2Point {\n        x0: u384 {\n            limb0: 0x777a63b327d736bffb0122ed,\n            limb1: 0x2caf27354d28e4b8f83d3b76,\n            limb2: 0x3ff41f4ba0c37fe,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0xc020024521998269845f74e6,\n            limb1: 0x21f01ecc9b46d236e0865e0c,\n            limb2: 0x1cc7cb8de715675f,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0x264a04499f7e2f6df690dd85,\n            limb1: 0x909b4f1c3d80fcd6865afc4a,\n            limb2: 0x17387b4b9cf03927,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0xf614f4fd11b56b3c5e53c44c,\n            limb1: 0xd19a3d72dcd590ac85a971de,\n            limb2: 0x2ed3b19b5eb39db0,\n            limb3: 0x0,\n        },\n    },\n};\n\npub const ic: [G1Point; 3] = [\n    G1Point {\n        x: u384 {\n            limb0: 0x33db734c451d28b58aa9758e,\n            limb1: 0x4ea0a694cd3743ebf5247792,\n            limb2: 0x26091e1cafb0ad8a,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xefa65a3e782e7ba70b66690e,\n            limb1: 0xca6fdb2690a124f8ce25489f,\n            limb2: 0x9ff50a6b8b11c3,\n            limb3: 0x0,\n        },\n    },\n    G1Point {\n        x: u384 {\n            limb0: 0xec878755e537c1c48951fb4c,\n            limb1: 0x2607c227d090cca750ed36c6,\n            limb2: 0x61c3fd0fd3da25d,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x3e6119a212dd09eb51707219,\n            limb1: 0xdf7b5c65eff0e107055e9a27,\n            limb2: 0xfa17ae9c2033379,\n            limb3: 0x0,\n        },\n    },\n    G1Point {\n        x: u384 {\n            limb0: 0xa16028dee020634fd129e71c,\n            limb1: 0x7fe0e0e2ead0b2ec4ffdec51,\n            limb2: 0x4eab241388a7981,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xca56b18d5544b0889a65c1f5,\n            limb1: 0x2f0bdbf95cff83e03ea9e16f,\n            limb2: 0x7236256d21c60d0,\n            limb3: 0x0,\n        },\n    },\n];\n\n\npub const precomputed_lines: [G2Line<u288>; 176] = [\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4d347301094edcbfa224d3d5,\n            limb1: 0x98005e68cacde68a193b54e6,\n            limb2: 0x237db2935c4432bc,\n        },\n        r0a1: u288 {\n            limb0: 0x6b4ba735fba44e801d415637,\n            limb1: 0x707c3ec1809ae9bafafa05dd,\n            limb2: 0x124077e14a7d826a,\n        },\n        r1a0: u288 {\n            limb0: 0x49a8dc1dd6e067932b6a7e0d,\n            limb1: 0x7676d0000961488f8fbce033,\n            limb2: 0x3b7178c857630da,\n        },\n        r1a1: u288 {\n            limb0: 0x98c81278efe1e96b86397652,\n            limb1: 0xe3520b9dfa601ead6f0bf9cd,\n            limb2: 0x2b17c2b12c26fdd0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7cbf2d97579849ed7f37f916,\n            limb1: 0x7c7c7cabc0338914ae612207,\n            limb2: 0x7f04129bafedc9a,\n        },\n        r0a1: u288 {\n            limb0: 0x28db0f05530a21fac876cfe4,\n            limb1: 0xb08060f001e32bf0f4beff7a,\n            limb2: 0x1758a3c93ad8f055,\n        },\n        r1a0: u288 {\n            limb0: 0x53ad64ec102823f3f1d3fd30,\n            limb1: 0xe512e2de1e37f60219c44720,\n            limb2: 0xb05a57aa94413c8,\n        },\n        r1a1: u288 {\n            limb0: 0x3c6bb091ccdadd1f42045694,\n            limb1: 0x5756eeec096f1de96f136d22,\n            limb2: 0xe9421367ecf6d7f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1b3d578c32d1af5736582972,\n            limb1: 0x204fe74db6b371d37e4615ab,\n            limb2: 0xce69bdf84ed6d6d,\n        },\n        r0a1: u288 {\n            limb0: 0xfd262357407c3d96bb3ba710,\n            limb1: 0x47d406f500e66ea29c8764b3,\n            limb2: 0x1e23d69196b41dbf,\n        },\n        r1a0: u288 {\n            limb0: 0x1ec8ee6f65402483ad127f3a,\n            limb1: 0x41d975b678200fce07c48a5e,\n            limb2: 0x2cad36e65bbb6f4f,\n        },\n        r1a1: u288 {\n            limb0: 0xcfa9b8144c3ea2ab524386f5,\n            limb1: 0xd4fe3a18872139b0287570c3,\n            limb2: 0x54c8bc1b50aa258,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb5ee22ba52a7ed0c533b7173,\n            limb1: 0xbfa13123614ecf9c4853249b,\n            limb2: 0x6567a7f6972b7bb,\n        },\n        r0a1: u288 {\n            limb0: 0xcf422f26ac76a450359f819e,\n            limb1: 0xc42d7517ae6f59453eaf32c7,\n            limb2: 0x899cb1e339f7582,\n        },\n        r1a0: u288 {\n            limb0: 0x9f287f4842d688d7afd9cd67,\n            limb1: 0x30af75417670de33dfa95eda,\n            limb2: 0x1121d4ca1c2cab36,\n        },\n        r1a1: u288 {\n            limb0: 0x7c4c55c27110f2c9a228f7d8,\n            limb1: 0x8f14f6c3a2e2c9d74b347bfe,\n            limb2: 0x83ef274ba7913a5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xebb29cf5e488422959450431,\n            limb1: 0x3bd3c90ac14dcf48e9204889,\n            limb2: 0x28740d492632c38f,\n        },\n        r0a1: u288 {\n            limb0: 0x3f96bb87e9166a1c10062d63,\n            limb1: 0x7cfe4c67f9e2c6ca2c26b17,\n            limb2: 0x190baaa9a658afd4,\n        },\n        r1a0: u288 {\n            limb0: 0x14c465a12bf86822e6a90017,\n            limb1: 0xd33d62d86349625b7dbd2371,\n            limb2: 0x255ea8f837ed8c60,\n        },\n        r1a1: u288 {\n            limb0: 0x2c0619fb6f45aef79678a6b3,\n            limb1: 0x60f956ca78123a74286dfd6f,\n            limb2: 0x21d02d3c626232aa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc6a50211bb4e98f1dbcc18c6,\n            limb1: 0x9847d0e53a837fae823cd4ea,\n            limb2: 0x2082a2a015765ee3,\n        },\n        r0a1: u288 {\n            limb0: 0x24ae565e25a79ee1ea39d033,\n            limb1: 0x2faeb8128c16d60a0efbf2a8,\n            limb2: 0x2be4069bfaeb9e80,\n        },\n        r1a0: u288 {\n            limb0: 0xed15a9b34ed7444c70f2da29,\n            limb1: 0x9aad3ebe8a77d1b9f448c5e4,\n            limb2: 0x2ccac3d2f5842673,\n        },\n        r1a1: u288 {\n            limb0: 0xaeba508ff18253293d75a9fb,\n            limb1: 0xefc547444d7e210113d1126f,\n            limb2: 0x15d5770504f94de3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfc23a674d089e9cfdefb1db8,\n            limb1: 0x9ddfd61d289b65a9b4254476,\n            limb2: 0x1e2f561324ef4447,\n        },\n        r0a1: u288 {\n            limb0: 0xf67a6a9e31f6975b220642ea,\n            limb1: 0xccd852893796296e4d1ed330,\n            limb2: 0x94ff1987d19b62,\n        },\n        r1a0: u288 {\n            limb0: 0x360c2a5aca59996d24cc1947,\n            limb1: 0x66c2d7d0d176a3bc53f386e8,\n            limb2: 0x2cfcc62a17fbeecb,\n        },\n        r1a1: u288 {\n            limb0: 0x2ddc73389dd9a9e34168d8a9,\n            limb1: 0xae9afc57944748b835cbda0f,\n            limb2: 0x12f0a1f8cf564067,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x938f40d6331d337cd5a78483,\n            limb1: 0xfb9bf9696fc566e9277e3562,\n            limb2: 0x178c9caed033670a,\n        },\n        r0a1: u288 {\n            limb0: 0x1868c526c195826f2926a360,\n            limb1: 0x7c87ae606c93c769e7dc805f,\n            limb2: 0xbaf9f3e4b922406,\n        },\n        r1a0: u288 {\n            limb0: 0xf0324176663d80d726a6a17,\n            limb1: 0x2687269fb7f21bd83428ced1,\n            limb2: 0x2c8b67dc6eaacc68,\n        },\n        r1a1: u288 {\n            limb0: 0xecb58d4301481dcffc13975d,\n            limb1: 0x12c9ac3eaf1828a708993570,\n            limb2: 0x295e2d4bbfdf162b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9c963c4bdade6ce3d460b077,\n            limb1: 0x1738311feefc76f565e34e8a,\n            limb2: 0x1aae0d6c9e9888ad,\n        },\n        r0a1: u288 {\n            limb0: 0x9272581fdf80b045c9c3f0a,\n            limb1: 0x3946807b0756e87666798edb,\n            limb2: 0x2bf6eeda2d8be192,\n        },\n        r1a0: u288 {\n            limb0: 0x3e957661b35995552fb475de,\n            limb1: 0xd8076fa48f93f09d8128a2a8,\n            limb2: 0xb6f87c3f00a6fcf,\n        },\n        r1a1: u288 {\n            limb0: 0xcf17d6cd2101301246a8f264,\n            limb1: 0x514d04ad989b91e697aa5a0e,\n            limb2: 0x175f17bbd0ad1219,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x894bc18cc70ca1987e3b8f9f,\n            limb1: 0xd4bfa535181f0f8659b063e3,\n            limb2: 0x19168d524164f463,\n        },\n        r0a1: u288 {\n            limb0: 0x850ee8d0e9b58b82719a6e92,\n            limb1: 0x9fc4eb75cbb027c137d48341,\n            limb2: 0x2b2f8a383d944fa0,\n        },\n        r1a0: u288 {\n            limb0: 0x5451c8974a709483c2b07fbd,\n            limb1: 0xd7e09837b8a2a3b78e7fe525,\n            limb2: 0x347d96be5e7fa31,\n        },\n        r1a1: u288 {\n            limb0: 0x823f2ba2743ee254e4c18a1e,\n            limb1: 0x6a61af5db035c443ed0f8172,\n            limb2: 0x1e840eee275d1063,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x42b739265325a48fbafa90d8,\n            limb1: 0xcaaca7c05543af71af550508,\n            limb2: 0xaf2a71170a857a3,\n        },\n        r0a1: u288 {\n            limb0: 0x83dba88a49375b3088ec56ed,\n            limb1: 0xf0b67f36f46fc663eecd11f0,\n            limb2: 0x61b8dea2acb984b,\n        },\n        r1a0: u288 {\n            limb0: 0x55990d74b22baae47fb0fdaf,\n            limb1: 0x9562f464f486bfae1e003333,\n            limb2: 0x1508b9aaa2d992ed,\n        },\n        r1a1: u288 {\n            limb0: 0xb0f384299f76ba205b8aaae0,\n            limb1: 0x59c4180e94d72106043ddd38,\n            limb2: 0x26fb9897974b52b5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4a713c06f87eec4f6c8f84d1,\n            limb1: 0x57504d3d02142f561546fc52,\n            limb2: 0x25dafbc904cc0af3,\n        },\n        r0a1: u288 {\n            limb0: 0x86db774a383a67fe84821fe0,\n            limb1: 0xeca958da5742fbbfd64eb68d,\n            limb2: 0x13675c605dc3d55c,\n        },\n        r1a0: u288 {\n            limb0: 0x679f0a0f3c17bd7394a8834d,\n            limb1: 0xef1b109621da0a27bd87799d,\n            limb2: 0xc7ce67ca683f6f8,\n        },\n        r1a1: u288 {\n            limb0: 0x50ad632be82adc7cca6edc58,\n            limb1: 0xf0470f4c78cd6f03c2bb1ed0,\n            limb2: 0x26dff4d8c96ccdb0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x18d630598e58bb5d0102b30e,\n            limb1: 0x9767e27b02a8da37411a2787,\n            limb2: 0x100a541662b9cd7c,\n        },\n        r0a1: u288 {\n            limb0: 0x4ca7313df2e168e7e5ea70,\n            limb1: 0xd49cce6abd50b574f31c2d72,\n            limb2: 0x78a2afbf72317e7,\n        },\n        r1a0: u288 {\n            limb0: 0x6d99388b0a1a67d6b48d87e0,\n            limb1: 0x1d8711d321a193be3333bc68,\n            limb2: 0x27e76de53a010ce1,\n        },\n        r1a1: u288 {\n            limb0: 0x77341bf4e1605e982fa50abd,\n            limb1: 0xc5cf10db170b4feaaf5f8f1b,\n            limb2: 0x762adef02274807,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xcac1344e8cb568214722a8c8,\n            limb1: 0xc892d892267faeae62644b74,\n            limb2: 0x2d89e403f6e30991,\n        },\n        r0a1: u288 {\n            limb0: 0x48c9a2b7277986259bac47be,\n            limb1: 0x6f8677a58151e08a08f490e5,\n            limb2: 0x4edfbee8ff0719,\n        },\n        r1a0: u288 {\n            limb0: 0x1d121ebf7a9fb2b1a77c2c48,\n            limb1: 0x2a69c49d06a7830375bb91df,\n            limb2: 0x10bd82bd6966042f,\n        },\n        r1a1: u288 {\n            limb0: 0xacc263d42b87601b8d585974,\n            limb1: 0xf45b7035591969a55d96f2e7,\n            limb2: 0x27673d5868aed589,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa137b991ba9048aee9fa0bc7,\n            limb1: 0xf5433785c186cd1100ab6b80,\n            limb2: 0xab519fd7cf8e7f9,\n        },\n        r0a1: u288 {\n            limb0: 0x90832f45d3398c60aa1a74e2,\n            limb1: 0x17f7ac209532723f22a344b,\n            limb2: 0x23db979f8481c5f,\n        },\n        r1a0: u288 {\n            limb0: 0x723b0e23c2808a5d1ea6b11d,\n            limb1: 0x3030030d26411f84235c3af5,\n            limb2: 0x122e78da5509eddb,\n        },\n        r1a1: u288 {\n            limb0: 0xf1718c1e21a9bc3ec822f319,\n            limb1: 0xf5ee6dfa3bd3272b2f09f0c7,\n            limb2: 0x5a29c1e27616b34,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x68d34d439ae2c989972b1a0f,\n            limb1: 0xf95d4027b5c73acfb60d525f,\n            limb2: 0xeb6c23cd34d1aa6,\n        },\n        r0a1: u288 {\n            limb0: 0xa4d59d3b671a81bf28b00065,\n            limb1: 0x488f591820d610c9cee5ad2,\n            limb2: 0xd3ad6058795bc4b,\n        },\n        r1a0: u288 {\n            limb0: 0x1cda8ced3e8fcef708fd8d15,\n            limb1: 0xc4eb263c073391531751a836,\n            limb2: 0x1e277f8c09e04ee4,\n        },\n        r1a1: u288 {\n            limb0: 0xa8ed44c840c2be958d1a4582,\n            limb1: 0xc7752e9691f112d0ffa7b455,\n            limb2: 0x1ac35e3d2a100323,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbc1ede480873fceb8739511e,\n            limb1: 0xd5a60533bd0ce7869efbc15,\n            limb2: 0x182c17d793eba74d,\n        },\n        r0a1: u288 {\n            limb0: 0x83bf38d91876ad8999516bc2,\n            limb1: 0x7756322ea3dc079289d51f2d,\n            limb2: 0x1d0f6156a89a4244,\n        },\n        r1a0: u288 {\n            limb0: 0x6aba652f197be8f99707b88c,\n            limb1: 0xbf94286c245794ea0f562f32,\n            limb2: 0x25a358967a2ca81d,\n        },\n        r1a1: u288 {\n            limb0: 0xc028cbff48c01433e8b23568,\n            limb1: 0xd2e791f5772ed43b056beba1,\n            limb2: 0x83eb38dff4960e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x725e048159c543615bb84e6e,\n            limb1: 0x45fbc1f38e142ccda443cd6,\n            limb2: 0x2ab74aaac994b0dc,\n        },\n        r0a1: u288 {\n            limb0: 0xab291908bb575acbab668ad1,\n            limb1: 0xc942a48a949adf3f77abd94,\n            limb2: 0xf5e7c6df6de7ffd,\n        },\n        r1a0: u288 {\n            limb0: 0xaa885b0a29c1ec26fc8ecabc,\n            limb1: 0xf497d575c19ed625b01fde30,\n            limb2: 0x2e30b462f1cdccef,\n        },\n        r1a1: u288 {\n            limb0: 0xaafdb72e153e37da9c9bedc8,\n            limb1: 0xa7eb7720a5e8ac3b81d5cb86,\n            limb2: 0x119a5d1009fc61c8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc2a2b787d8e718e81970db80,\n            limb1: 0x5372abeaf56844dee60d6198,\n            limb2: 0x131210153a2217d6,\n        },\n        r0a1: u288 {\n            limb0: 0x70421980313e09a8a0e5a82d,\n            limb1: 0xf75ca1f68f4b8deafb1d3b48,\n            limb2: 0x102113c9b6feb035,\n        },\n        r1a0: u288 {\n            limb0: 0x4654c11d73bda84873de9b86,\n            limb1: 0xa67601bca2e595339833191a,\n            limb2: 0x1c2b76e439adc8cc,\n        },\n        r1a1: u288 {\n            limb0: 0x9c53a48cc66c1f4d644105f2,\n            limb1: 0xa17a18867557d96fb7c2f849,\n            limb2: 0x1deb99799bd8b63a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc32026c56341297fa080790c,\n            limb1: 0xe23ad2ff283399133533b31f,\n            limb2: 0xa6860f5c968f7ad,\n        },\n        r0a1: u288 {\n            limb0: 0x2966cf259dc612c6a4d8957d,\n            limb1: 0xfba87ea86054f3db5774a08f,\n            limb2: 0xc73408b6a646780,\n        },\n        r1a0: u288 {\n            limb0: 0x6272ce5976d8eeba08f66b48,\n            limb1: 0x7dfbd78fa06509604c0cec8d,\n            limb2: 0x181ec0eaa6660e45,\n        },\n        r1a1: u288 {\n            limb0: 0x48af37c1a2343555fbf8a357,\n            limb1: 0xa7b5e1e20e64d6a9a9ce8e61,\n            limb2: 0x1147dcea39a47abd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9b8973e6a6608567ccd76366,\n            limb1: 0x8a0b0ff16938e5e9d047a619,\n            limb2: 0x2b77ff867bd8e680,\n        },\n        r0a1: u288 {\n            limb0: 0xcb7418d320b301aabe4148da,\n            limb1: 0x235198f24eec02e28695e10d,\n            limb2: 0xa8301843558aa76,\n        },\n        r1a0: u288 {\n            limb0: 0x5c829b7de1bd80457eabff96,\n            limb1: 0x8a62cc6b40a204c85decd770,\n            limb2: 0x242afd2ccfcfee9c,\n        },\n        r1a1: u288 {\n            limb0: 0xcf929d2a26a49eba7aefc650,\n            limb1: 0x9f0aecd693f8e14112325cbc,\n            limb2: 0x2f80e551b8c656e5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x811ea824acc13b51e0c97817,\n            limb1: 0xde9eb6d50d2979e139a147e9,\n            limb2: 0x3c30b8b0df3f74f,\n        },\n        r0a1: u288 {\n            limb0: 0xd5d75a2f277774b60b1784d2,\n            limb1: 0xfda6904cb620bf9443d8afd7,\n            limb2: 0x217f45e35d37496d,\n        },\n        r1a0: u288 {\n            limb0: 0x8fe90603c2f1b8e3a1d867d0,\n            limb1: 0xa9a56b26cfe0b448eca62dec,\n            limb2: 0x63b61231638b05a,\n        },\n        r1a1: u288 {\n            limb0: 0xb13dd53df7a134f20fadc38,\n            limb1: 0xdbca72fe038c93d61287c616,\n            limb2: 0x2da092b4bd5d3c42,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4033c51e6e469818521cd2ae,\n            limb1: 0xb71a4629a4696b2759f8e19e,\n            limb2: 0x4f5744e29c1eb30,\n        },\n        r0a1: u288 {\n            limb0: 0xa4f47bbc60cb0649dca1c772,\n            limb1: 0x835f427106f4a6b897c6cf23,\n            limb2: 0x17ca6ea4855756bb,\n        },\n        r1a0: u288 {\n            limb0: 0x7f844a35c7eeadf511e67e57,\n            limb1: 0x8bb54fb0b3688cac8860f10,\n            limb2: 0x1c7258499a6bbebf,\n        },\n        r1a1: u288 {\n            limb0: 0x10d269c1779f96946e518246,\n            limb1: 0xce6fcef6676d0dacd395dc1a,\n            limb2: 0x2cf4c6ae1b55d87d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfbe0193ec22b48fec5af2f7,\n            limb1: 0x774b3f299076ff89c55c3d4a,\n            limb2: 0x2205817196a5cce3,\n        },\n        r0a1: u288 {\n            limb0: 0xcd9ec02cfbd2a3ee9a60e0bc,\n            limb1: 0xdc96dde2fc513b87c71ff1b7,\n            limb2: 0x1cd732208e302df2,\n        },\n        r1a0: u288 {\n            limb0: 0x2c9d6c58dffd69e8847fddea,\n            limb1: 0x7758ea015f811fa25d88afad,\n            limb2: 0x15d123eaba763b4d,\n        },\n        r1a1: u288 {\n            limb0: 0xe98b3872ba65f4177b7b71b2,\n            limb1: 0xf707fe02014d268ff63c196d,\n            limb2: 0xb09a8f9c30f805b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xab74a6bae36b17b1d2cc1081,\n            limb1: 0x904cf03d9d30b1fe9dc71374,\n            limb2: 0x14ffdd55685b7d82,\n        },\n        r0a1: u288 {\n            limb0: 0x277f7180b7cf33feded1583c,\n            limb1: 0xc029c3968a75b612303c4298,\n            limb2: 0x20ef4ba03605cdc6,\n        },\n        r1a0: u288 {\n            limb0: 0xd5a7a27c1baba3791ab18957,\n            limb1: 0x973730213d5d70d3e62d6db,\n            limb2: 0x24ca121c566eb857,\n        },\n        r1a1: u288 {\n            limb0: 0x9f4c2dea0492f548ae7d9e93,\n            limb1: 0xe584b6b251a5227c70c5188,\n            limb2: 0x22bcecac2bd5e51b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x340c82974f7221a53fc2f3ac,\n            limb1: 0x7146f18cd591d423874996e7,\n            limb2: 0xa6d154791056f46,\n        },\n        r0a1: u288 {\n            limb0: 0x70894ea6418890d53b5ee12a,\n            limb1: 0x882290cb53b795b0e7c8c208,\n            limb2: 0x1b5777dc18b2899b,\n        },\n        r1a0: u288 {\n            limb0: 0x99a0e528d582006a626206b6,\n            limb1: 0xb1cf825d80e199c5c9c795b5,\n            limb2: 0x2a97495b032f0542,\n        },\n        r1a1: u288 {\n            limb0: 0xc7cf5b455d6f3ba73debeba5,\n            limb1: 0xbb0a01235687223b7b71d0e5,\n            limb2: 0x250024ac44c35e3f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5de94d9644e370b354056a2a,\n            limb1: 0xffa4b4e6caa341c06532adf9,\n            limb2: 0x19a1fdd66cb0bea4,\n        },\n        r0a1: u288 {\n            limb0: 0x8c4cb8999e50edcc5d79d10f,\n            limb1: 0x38fd66d18df30b9270c237b8,\n            limb2: 0x1d2989db26ed77e8,\n        },\n        r1a0: u288 {\n            limb0: 0xbd0c585ef9c4c363feaf733a,\n            limb1: 0x4a9788e4b097b387a2e3d25d,\n            limb2: 0x71d26c1ddac58a0,\n        },\n        r1a1: u288 {\n            limb0: 0xde8ea360f082230cba2c3d58,\n            limb1: 0xf5d295a2e8fc6776a2c38b60,\n            limb2: 0x1d99e0b44328228a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa14926bd3ee473b50fe5aaee,\n            limb1: 0x113fd7acdfcbf4b4dcd52ea1,\n            limb2: 0x69a24cbf370e857,\n        },\n        r0a1: u288 {\n            limb0: 0x3609ea680e1899336a162b3d,\n            limb1: 0x66238105b2124b799337961e,\n            limb2: 0x147fb45ccd95134e,\n        },\n        r1a0: u288 {\n            limb0: 0xb2d55d56c185a82ac9281057,\n            limb1: 0xc2faa7fcfd3a124169486c63,\n            limb2: 0x19db77c344303fba,\n        },\n        r1a1: u288 {\n            limb0: 0x2f0bb0d515012a5ead2ef5b9,\n            limb1: 0xc016838fa0925fca09eaf0c2,\n            limb2: 0x2dd347070a684eb0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xccf841cf5c1cf8f4a0485e28,\n            limb1: 0xb5077662d0ce9d755af1446b,\n            limb2: 0x2b08658e9d5ba5cb,\n        },\n        r0a1: u288 {\n            limb0: 0x6ce62184a15685babd77f27f,\n            limb1: 0x5ff9bb7d74505b0542578299,\n            limb2: 0x7244563488bab2,\n        },\n        r1a0: u288 {\n            limb0: 0xec778048d344ac71275d961d,\n            limb1: 0x1273984019753000ad890d33,\n            limb2: 0x27c2855e60d361bd,\n        },\n        r1a1: u288 {\n            limb0: 0xa7a0071e22af2f3a79a12da,\n            limb1: 0xc84a6fd41c20759ff6ff169a,\n            limb2: 0x23e7ef2a308e49d1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xde26507b6464c2b2432946d3,\n            limb1: 0xccdae412f5efda9224b487a6,\n            limb2: 0x7397099c18bb017,\n        },\n        r0a1: u288 {\n            limb0: 0x113302c7ec8ed33f4a2336c6,\n            limb1: 0xb076f9a40642c67e9dcca121,\n            limb2: 0x27758b6b6267b249,\n        },\n        r1a0: u288 {\n            limb0: 0x1d108f0331b13db2d7cd219f,\n            limb1: 0x167a01313f068dd4f63ff09c,\n            limb2: 0x203d41b179e2ede8,\n        },\n        r1a1: u288 {\n            limb0: 0xce04948c084e9702a349ed11,\n            limb1: 0xe4644eb462d7ad1d68bfc0d9,\n            limb2: 0x7c5ae799b65a74d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7105024c431a33683d9d0b9d,\n            limb1: 0x12e23637b641ab0e5b322ad8,\n            limb2: 0x2918e9e08c764c28,\n        },\n        r0a1: u288 {\n            limb0: 0x26384979d1f5417e451aeabf,\n            limb1: 0xacfb499e362291d0b053bbf6,\n            limb2: 0x2a6ad1a1f7b04ef6,\n        },\n        r1a0: u288 {\n            limb0: 0xba4db515be70c384080fc9f9,\n            limb1: 0x5a983a6afa9cb830fa5b66e6,\n            limb2: 0x8cc1fa494726a0c,\n        },\n        r1a1: u288 {\n            limb0: 0x59c9af9399ed004284eb6105,\n            limb1: 0xef37f66b058b4c971d9c96b0,\n            limb2: 0x2c1839afde65bafa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xce283994615e4036d5f9b3ce,\n            limb1: 0xe0bdc04bf896427f10bfde51,\n            limb2: 0xf5d867b4bca046f,\n        },\n        r0a1: u288 {\n            limb0: 0xf0b527e39a718a6c10415ace,\n            limb1: 0xe6369ae45b67558e1c4b4d3c,\n            limb2: 0x26bc24d2eadac885,\n        },\n        r1a0: u288 {\n            limb0: 0xc9ad80732ebb2fce8f00a80b,\n            limb1: 0x5d4753fedb0e9bfd7c0b1f6,\n            limb2: 0x14b268ac1c4382d7,\n        },\n        r1a1: u288 {\n            limb0: 0xce27cc14afec384c81c7dcd0,\n            limb1: 0x1f3a4716b45fd52cdeb157d3,\n            limb2: 0x244aca1db91a1f0d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6bf13a27b0f4eb6657abc4b,\n            limb1: 0xf78d57f089bffdf07c676bb3,\n            limb2: 0x228e4aefbdd738df,\n        },\n        r0a1: u288 {\n            limb0: 0x4f41a40b04ec964619823053,\n            limb1: 0xfa3fb44f4a80641a9bb3bc09,\n            limb2: 0x29bf29a3d071ec4b,\n        },\n        r1a0: u288 {\n            limb0: 0x83823dcdff02bdc8a0e6aa03,\n            limb1: 0x79ac92f113de29251cd73a98,\n            limb2: 0x1ccdb791718d144,\n        },\n        r1a1: u288 {\n            limb0: 0xa074add9d066db9a2a6046b6,\n            limb1: 0xef3a70034497456c7d001a5,\n            limb2: 0x27d09562d815b4a6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbf8efa0f44277ab5e9811cb4,\n            limb1: 0x4f4a912383fe29ef4fac6d85,\n            limb2: 0xb13f577a181edf2,\n        },\n        r0a1: u288 {\n            limb0: 0x7caea92119bc1aa87d1a4022,\n            limb1: 0xc3c61eb32a1ae87fedc32db6,\n            limb2: 0x1ebce60883c9ce51,\n        },\n        r1a0: u288 {\n            limb0: 0x637e0775ea61e20fb0e8a12a,\n            limb1: 0x6f35385f1e29a52311ff082e,\n            limb2: 0xb29b15c3c57992,\n        },\n        r1a1: u288 {\n            limb0: 0x82c37125ed664f16c787c2a8,\n            limb1: 0xa65fedf5e8c9d952f8cff058,\n            limb2: 0xcc492d0f6b348b6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x87a44d343cc761056f4f2eae,\n            limb1: 0x18016f16818253360d2c8adf,\n            limb2: 0x1bcd5c6e597d735e,\n        },\n        r0a1: u288 {\n            limb0: 0x593d7444c376f6d69289660b,\n            limb1: 0x1d6d97020b59cf2e4b38be4f,\n            limb2: 0x17133b62617f63a7,\n        },\n        r1a0: u288 {\n            limb0: 0x88cac99869bb335ec9553a70,\n            limb1: 0x95bcfa7f7c0b708b4d737afc,\n            limb2: 0x1eec79b9db274c09,\n        },\n        r1a1: u288 {\n            limb0: 0xe465a53e9fe085eb58a6be75,\n            limb1: 0x868e45cc13e7fd9d34e11839,\n            limb2: 0x2b401ce0f05ee6bb,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x83f48fbac5c1b94486c2d037,\n            limb1: 0xf95d9333449543de78c69e75,\n            limb2: 0x7bca8163e842be7,\n        },\n        r0a1: u288 {\n            limb0: 0x60157b2ff6e4d737e2dac26b,\n            limb1: 0x30ab91893fcf39d9dcf1b89,\n            limb2: 0x29a58a02490d7f53,\n        },\n        r1a0: u288 {\n            limb0: 0x520f9cb580066bcf2ce872db,\n            limb1: 0x24a6e42c185fd36abb66c4ba,\n            limb2: 0x309b07583317a13,\n        },\n        r1a1: u288 {\n            limb0: 0x5a4c61efaa3d09a652c72471,\n            limb1: 0xfcb2676d6aa28ca318519d2,\n            limb2: 0x1405483699afa209,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc47d4ada891776f3e6e116e1,\n            limb1: 0x6c80dc5afdcfc02145df53f6,\n            limb2: 0x4c8414aac1b0395,\n        },\n        r0a1: u288 {\n            limb0: 0xd484d52c85030a07343929a1,\n            limb1: 0x75a6f09394f911d4959f189f,\n            limb2: 0x2ba0a456ad7d89ff,\n        },\n        r1a0: u288 {\n            limb0: 0xa8f4cf37f64451a7fe1fef82,\n            limb1: 0x6388ae9a93882e4ff2e54b34,\n            limb2: 0x1629c6ff16173284,\n        },\n        r1a1: u288 {\n            limb0: 0x320367a73ffab79d59ffe89a,\n            limb1: 0x37f82ff751295fe21521991d,\n            limb2: 0x789f87edf2e3df9,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbca9043533f559077d2eba79,\n            limb1: 0x13fef9825c761d5bddbcf07d,\n            limb2: 0x1195674e328c72c9,\n        },\n        r0a1: u288 {\n            limb0: 0xdcb16742336d127fd7d8f824,\n            limb1: 0x2cdf6a68d632f5c1b44867cd,\n            limb2: 0xac06da12d262554,\n        },\n        r1a0: u288 {\n            limb0: 0xedb983ba4e8f497c45b6dbc2,\n            limb1: 0x6aa30e035c6f5c55622b1e40,\n            limb2: 0x11dd74de83ecbd9f,\n        },\n        r1a1: u288 {\n            limb0: 0x407935653afae88cfc4fc70c,\n            limb1: 0x15ecf74f65948447d9f436a3,\n            limb2: 0x2b6ba90989e359ee,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbfdfdae86101e29da3e869b8,\n            limb1: 0xf969a9b961a28b872e56aac2,\n            limb2: 0x1afdc719440d90f0,\n        },\n        r0a1: u288 {\n            limb0: 0xee43c995686f13baa9b07266,\n            limb1: 0xbfa387a694c641cceee4443a,\n            limb2: 0x104d8c02eb7f60c8,\n        },\n        r1a0: u288 {\n            limb0: 0x8d451602b3593e798aecd7fb,\n            limb1: 0x69ffbefe7c5ac2cf68e8691e,\n            limb2: 0x2ea064a1bc373d28,\n        },\n        r1a1: u288 {\n            limb0: 0x6e7a663073bfe88a2b02326f,\n            limb1: 0x5faadb36847ca0103793fa4a,\n            limb2: 0x26c09a8ec9303836,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3c6f6125152a1dfb641aff97,\n            limb1: 0x91361d513d1da420fa8b4c53,\n            limb2: 0x25fff9ec836eb501,\n        },\n        r0a1: u288 {\n            limb0: 0xb9ca876c8f91a90bd03aa49a,\n            limb1: 0x41e027306cc4eb305bdf98ee,\n            limb2: 0x2dc58f6baf41e472,\n        },\n        r1a0: u288 {\n            limb0: 0x6db773b8ac0547e309d8cc94,\n            limb1: 0x95a943a2523fc74c7b3ce15e,\n            limb2: 0x7f19fee8893e3ec,\n        },\n        r1a1: u288 {\n            limb0: 0xec01c36f2fb8eaaef1f45122,\n            limb1: 0x8408305b35600377713d0e1f,\n            limb2: 0xb36c5a3f958f2a7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3d038747ebac16adc1c50bdd,\n            limb1: 0xe3706a783e99f73ac742aa1a,\n            limb2: 0x17eac23b00b545ff,\n        },\n        r0a1: u288 {\n            limb0: 0xdc25ff0bd02abcbe502c4e37,\n            limb1: 0x39b92e6ebb65e5f2d8504f90,\n            limb2: 0x2415b5f61301dff6,\n        },\n        r1a0: u288 {\n            limb0: 0x9cdcb2146d15f37900db82ac,\n            limb1: 0x96c3940e2f5c5f8198fadee3,\n            limb2: 0x2f662ea79b473fc2,\n        },\n        r1a1: u288 {\n            limb0: 0xc0fb95686de65e504ed4c57a,\n            limb1: 0xec396c7c4275d4e493b00713,\n            limb2: 0x106d2aab8d90d517,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd0676b34291facf89d33679e,\n            limb1: 0x81b00356cfb982eec3ce4d10,\n            limb2: 0x15f2b090fcb75ad5,\n        },\n        r0a1: u288 {\n            limb0: 0x8e17b4ac5fc26b6b8c70d1d0,\n            limb1: 0x61ddfc96918011fbbfb6bd96,\n            limb2: 0x1e66b984c4cd0579,\n        },\n        r1a0: u288 {\n            limb0: 0x3cfd9855bd21f16929977c4c,\n            limb1: 0x61d8356887fe36bc306ba57c,\n            limb2: 0x2d05307f879d4032,\n        },\n        r1a1: u288 {\n            limb0: 0x1484c8392195ac794e9abca7,\n            limb1: 0x7f1d5ac422740092bcd9e169,\n            limb2: 0x293919abeef84688,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x49bbb4d856921e3177c0b5bf,\n            limb1: 0x76d84d273694e662bdd5d364,\n            limb2: 0xea5dc611bdd369d,\n        },\n        r0a1: u288 {\n            limb0: 0x9e9fc3adc530fa3c5c6fd7fe,\n            limb1: 0x114bb0c0e8bd247da41b3883,\n            limb2: 0x6044124f85d2ce,\n        },\n        r1a0: u288 {\n            limb0: 0xa6e604cdb4e40982a97c084,\n            limb1: 0xef485caa56c7820be2f6b11d,\n            limb2: 0x280de6387dcbabe1,\n        },\n        r1a1: u288 {\n            limb0: 0xcaceaf6df5ca9f8a18bf2e1e,\n            limb1: 0xc5cce932cc6818b53136c142,\n            limb2: 0x12f1cd688682030c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x37497c23dcf629df58a5fa12,\n            limb1: 0x4fcd5534ae47bded76245ac9,\n            limb2: 0x1715ab081e32ac95,\n        },\n        r0a1: u288 {\n            limb0: 0x856275471989e2c288e3c83,\n            limb1: 0xb42d81a575b89b127a7821a,\n            limb2: 0x5fa75a0e4ae3118,\n        },\n        r1a0: u288 {\n            limb0: 0xeb22351e8cd345c23c0a3fef,\n            limb1: 0x271feb16d4b47d2267ac9d57,\n            limb2: 0x258f9950b9a2dee5,\n        },\n        r1a1: u288 {\n            limb0: 0xb5f75468922dc025ba7916fa,\n            limb1: 0x7e24515de90edf1bde4edd9,\n            limb2: 0x289145b3512d4d81,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9dca870c1484810a661f59d4,\n            limb1: 0xadff34db27fd944111f8a6b1,\n            limb2: 0x2f04571e7b81b9c4,\n        },\n        r0a1: u288 {\n            limb0: 0xd9a94da685de3ff292c308a1,\n            limb1: 0x1b9b7392d48239e525d06701,\n            limb2: 0x2ba482e60ec17938,\n        },\n        r1a0: u288 {\n            limb0: 0xdb0def301197ce2ffb78a2d0,\n            limb1: 0x3dc46153ace29b10df2e46f5,\n            limb2: 0xc85daa61e3e1093,\n        },\n        r1a1: u288 {\n            limb0: 0xc36a99960a6ef0154c914b17,\n            limb1: 0x141f0194a483fc78645ba557,\n            limb2: 0x34a9ad3ff55fdca,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x61f660445e3c332848ca8e,\n            limb1: 0xc0f8425af6c6f01521dc84ce,\n            limb2: 0xfd780cc97d031fd,\n        },\n        r0a1: u288 {\n            limb0: 0xe4f5496cb0df45f8f814ead5,\n            limb1: 0x2c15fb46d6f9109a2e6bff16,\n            limb2: 0x1c51dd9b55467dec,\n        },\n        r1a0: u288 {\n            limb0: 0xe9eb3a9743a5b7359666eba2,\n            limb1: 0xef222d816cd87172c3011f61,\n            limb2: 0x274bd1c75922a74,\n        },\n        r1a1: u288 {\n            limb0: 0x10ac95e57548c36e16a880df,\n            limb1: 0x18b4d558688aa4560774a76,\n            limb2: 0x2a044b9949c906a5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x95b7b32bcc3119c64a62a8de,\n            limb1: 0xe07184496f17bbd59a4b7bbd,\n            limb2: 0x1708c536fd78b531,\n        },\n        r0a1: u288 {\n            limb0: 0xfa85b5778c77166c1523a75e,\n            limb1: 0x89a00c53309a9e525bef171a,\n            limb2: 0x2d2287dd024e421,\n        },\n        r1a0: u288 {\n            limb0: 0x31fd0884eaf2208bf8831e72,\n            limb1: 0x537e04ea344beb57ee645026,\n            limb2: 0x23c7f99715257261,\n        },\n        r1a1: u288 {\n            limb0: 0x8c38b3aeea525f3c2d2fdc22,\n            limb1: 0xf838a99d9ec8ed6dcec6a2a8,\n            limb2: 0x2973d5159ddc479a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3f058d8c63fd905d3ca29b42,\n            limb1: 0x1f0a90982cc68e4ddcd83e57,\n            limb2: 0x240aeaae0783fbfa,\n        },\n        r0a1: u288 {\n            limb0: 0xedfee81d80da310fdf0d0d8,\n            limb1: 0xc2208e6de8806cf491bd74d4,\n            limb2: 0xb7318be62a476af,\n        },\n        r1a0: u288 {\n            limb0: 0x3c6920c8a24454c634f388fe,\n            limb1: 0x23328a006312a722ae09548b,\n            limb2: 0x1d2f1c58b80432e2,\n        },\n        r1a1: u288 {\n            limb0: 0xb72980574f7a877586de3a63,\n            limb1: 0xcd773b87ef4a29c16784c5ae,\n            limb2: 0x1f812c7e22f339c5,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc06bfbec93c79c253ea70541,\n            limb1: 0x5c5d3fe17a555e21f99e07ea,\n            limb2: 0x17b4863826c54b28,\n        },\n        r0a1: u288 {\n            limb0: 0x44dbf42a961eb2ec7d783e85,\n            limb1: 0xa6a66651685162adcd51359c,\n            limb2: 0x6cb177bd8315214,\n        },\n        r1a0: u288 {\n            limb0: 0x80b82b2149a8d9b7ed9268fa,\n            limb1: 0x62e408934939eda616b66100,\n            limb2: 0xe958d23c6dae95b,\n        },\n        r1a1: u288 {\n            limb0: 0xf1d9428436e2c6a8fd847202,\n            limb1: 0x5e41926889922dfffc189c93,\n            limb2: 0x13f574f2efbbee63,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x22008f8153092426a639c910,\n            limb1: 0x7ec2db6c987ef1c20e5a8234,\n            limb2: 0x1697f4ed7a5b552e,\n        },\n        r0a1: u288 {\n            limb0: 0x704f56be0f50078b47ad9f6c,\n            limb1: 0xdb08445bceca2122b9457041,\n            limb2: 0x76a9dd645d1365b,\n        },\n        r1a0: u288 {\n            limb0: 0x932e9e84d92176e5aedd41cc,\n            limb1: 0x462304236b3c39af3a6c797b,\n            limb2: 0x81a6316f1638b1c,\n        },\n        r1a1: u288 {\n            limb0: 0xc15ec06106531c2b26a125f9,\n            limb1: 0x8f5c088d3120f7dd67539762,\n            limb2: 0x12424d7e9d4e628d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfeebe92941f95b6ea1d095bb,\n            limb1: 0x9c7962eb8bbeb95a9ca7cf50,\n            limb2: 0x290bdaf3b9a08dc3,\n        },\n        r0a1: u288 {\n            limb0: 0x686cfa11c9d4b93675495599,\n            limb1: 0xb1d69e17b4b5ebf64f0d51e1,\n            limb2: 0x2c18bb4bdc2e9567,\n        },\n        r1a0: u288 {\n            limb0: 0x17419b0f6a04bfc98d71527,\n            limb1: 0x80eba6ff02787e3de964a4d1,\n            limb2: 0x26087bb100e7ff9f,\n        },\n        r1a1: u288 {\n            limb0: 0x17c4ee42c3f612c43a08f689,\n            limb1: 0x7276bdda2df6d51a291dba69,\n            limb2: 0x40a7220ddb393e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6928ca64347d7c31671e2377,\n            limb1: 0x2272be450aa84aa36df3365c,\n            limb2: 0x2ca92615957b2fe0,\n        },\n        r0a1: u288 {\n            limb0: 0x88c4ede7111d187969799eca,\n            limb1: 0xcc81917803770e59700eb7f8,\n            limb2: 0x5930cfc2846191,\n        },\n        r1a0: u288 {\n            limb0: 0xafb165196b5d95e4fe136a4d,\n            limb1: 0xc39d63ee112a9ccaa57134d4,\n            limb2: 0x10dc932094831bbf,\n        },\n        r1a1: u288 {\n            limb0: 0xf7de51ac5b8a92c5b4845450,\n            limb1: 0x9f3d9c4f13a46001e07751f,\n            limb2: 0x242facacc7e8f671,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x830d777c19040571a1d72fd0,\n            limb1: 0x651b2c6b8c292020817a633f,\n            limb2: 0x268af1e285bc59ff,\n        },\n        r0a1: u288 {\n            limb0: 0xede78baa381c5bce077f443d,\n            limb1: 0x540ff96bae21cd8b9ae5438b,\n            limb2: 0x12a1fa7e3b369242,\n        },\n        r1a0: u288 {\n            limb0: 0x797c0608e5a535d8736d4bc5,\n            limb1: 0x375faf00f1147656b7c1075f,\n            limb2: 0xda60fab2dc5a639,\n        },\n        r1a1: u288 {\n            limb0: 0x610d26085cfbebdb30ce476e,\n            limb1: 0x5bc55890ff076827a09e8444,\n            limb2: 0x14272ee2d25f20b7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7b4f91687570395170f4325a,\n            limb1: 0x9296c0d69936b134492c0fbb,\n            limb2: 0x7cb37912214e21d,\n        },\n        r0a1: u288 {\n            limb0: 0x705f6482b8a7224e7254263e,\n            limb1: 0x425d24e68239b8a49a2df34a,\n            limb2: 0x2cb8ff7fc64712c3,\n        },\n        r1a0: u288 {\n            limb0: 0xe77944a01d94bda00b92ca30,\n            limb1: 0x9b4dac2f2032dd830f464e92,\n            limb2: 0x1297033462697e3e,\n        },\n        r1a1: u288 {\n            limb0: 0x7321500e3b68552ad9805a97,\n            limb1: 0x3cac1d28317fe827c7707539,\n            limb2: 0xe39933fb1acfd45,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd6862e1a4ca3b2baf6f8d8aa,\n            limb1: 0x96f9066dded3a3d899025af4,\n            limb2: 0x1a98af9f0d48fd3,\n        },\n        r0a1: u288 {\n            limb0: 0x276b417cc61ea259c114314e,\n            limb1: 0x464399e5e0037b159866b246,\n            limb2: 0x12cc97dcf32896b5,\n        },\n        r1a0: u288 {\n            limb0: 0xef72647f4c2d08fc038c4377,\n            limb1: 0x34883cea19be9a490a93cf2b,\n            limb2: 0x10d01394daa61ed0,\n        },\n        r1a1: u288 {\n            limb0: 0xdf345239ece3acaa62919643,\n            limb1: 0x914780908ece64e763cca062,\n            limb2: 0xee2a80dbd2012a3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1d5a31f4d08a0ebf7e071e00,\n            limb1: 0xcd1244dd95dd30005f531f81,\n            limb2: 0xb4cb469a2dcf4f1,\n        },\n        r0a1: u288 {\n            limb0: 0x7c5938adaf38b355092de1f1,\n            limb1: 0x292ab08995b293abfcba14b,\n            limb2: 0x1fd126a2b9f37c67,\n        },\n        r1a0: u288 {\n            limb0: 0x6e9d352b02a7cb771fcc33f9,\n            limb1: 0x7754d8536eefda2025a07340,\n            limb2: 0x1840289291c35a72,\n        },\n        r1a1: u288 {\n            limb0: 0xe85f465417b7bd758c547b2e,\n            limb1: 0xf7f703c3bc55ff8a01fa9365,\n            limb2: 0xfa301227880a841,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfd7198d8b21c7b14a5a143d,\n            limb1: 0x8cfa979dc7cb9fc44b348243,\n            limb2: 0x63df00df9d13158,\n        },\n        r0a1: u288 {\n            limb0: 0x6f0fce584dccf2bc6a2b7552,\n            limb1: 0x1b140d497e17a65153b219a2,\n            limb2: 0x10ce2826fd679062,\n        },\n        r1a0: u288 {\n            limb0: 0x53e1e3344c706d1e560c5848,\n            limb1: 0x2fa5fabbfc7c3a2615b2edbf,\n            limb2: 0x16281a4a9dddf9a0,\n        },\n        r1a1: u288 {\n            limb0: 0x66e7e5216001704b0e0cf4b5,\n            limb1: 0xa7bf2855a1a1d4f010d62c,\n            limb2: 0x2e81a3b58efb5b08,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4e69b18988e940ef04764973,\n            limb1: 0x1359ec39c9bfbf237b166375,\n            limb2: 0x210592c1052c27c4,\n        },\n        r0a1: u288 {\n            limb0: 0x96ff351bb35e280c44fdff2,\n            limb1: 0x17cde5251799ae4c9022bf5d,\n            limb2: 0x27db21da13d1b0f1,\n        },\n        r1a0: u288 {\n            limb0: 0x4491b38fa37fdd7f6044b9e9,\n            limb1: 0x75b95dbf3d52c45e79c49bd,\n            limb2: 0x2f3d051a55a02089,\n        },\n        r1a1: u288 {\n            limb0: 0xaacb5301c0579fc0d0fd11f6,\n            limb1: 0xa5a84b967b1bc3836f19eb3e,\n            limb2: 0x119eb30fec7d8cf2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa4058149e82ea51362b79be4,\n            limb1: 0x734eba2621918a820ae44684,\n            limb2: 0x110a314a02272b1,\n        },\n        r0a1: u288 {\n            limb0: 0xe2b43963ef5055df3c249613,\n            limb1: 0x409c246f762c0126a1b3b7b7,\n            limb2: 0x19aa27f34ab03585,\n        },\n        r1a0: u288 {\n            limb0: 0x179aad5f620193f228031d62,\n            limb1: 0x6ba32299b05f31b099a3ef0d,\n            limb2: 0x157724be2a0a651f,\n        },\n        r1a1: u288 {\n            limb0: 0xa33b28d9a50300e4bbc99137,\n            limb1: 0x262a51847049d9b4d8cea297,\n            limb2: 0x189acb4571d50692,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8d47b10c98dad29569e9ddea,\n            limb1: 0xb64d4b555fe1f7efc7bfbb27,\n            limb2: 0x5f15cd7b11de5c9,\n        },\n        r0a1: u288 {\n            limb0: 0xc2de52b36d1b7805208b5e05,\n            limb1: 0x8f26ade6ec9af59c5c53bce3,\n            limb2: 0x10d8927ecd55e636,\n        },\n        r1a0: u288 {\n            limb0: 0xb284f891bdbbe56c8cd8b1df,\n            limb1: 0x561c9fd87f0c37ff58a351d8,\n            limb2: 0xe724a52a68b9517,\n        },\n        r1a1: u288 {\n            limb0: 0xc0dd13ed0ff288dc9d2a6b09,\n            limb1: 0x134704230fe887e73929097d,\n            limb2: 0x1357c0d4f1c13f2a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x29bd4381ae4afc677ee37ed6,\n            limb1: 0x29ed43453f9a008d9176f004,\n            limb2: 0x24134eb915104f43,\n        },\n        r0a1: u288 {\n            limb0: 0x81597f82bb67e90a3e72bdd2,\n            limb1: 0xab3bbde5f7bbb4df6a6b5c19,\n            limb2: 0x19ac61eea40a367c,\n        },\n        r1a0: u288 {\n            limb0: 0xe30a79342fb3199651aee2fa,\n            limb1: 0xf500f028a73ab7b7db0104a3,\n            limb2: 0x808b50e0ecb5e4d,\n        },\n        r1a1: u288 {\n            limb0: 0x55f2818453c31d942444d9d6,\n            limb1: 0xf6dd80c71ab6e893f2cf48db,\n            limb2: 0x13c3ac4488abd138,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2db454bb8a3ad67349a0fbf3,\n            limb1: 0x602d5a16aa797251acc2cefa,\n            limb2: 0x375d59376b3a7f9,\n        },\n        r0a1: u288 {\n            limb0: 0x5878afce6b152e235c5f6903,\n            limb1: 0x90ef180ae111c1f2c33f005a,\n            limb2: 0x13ffb21961cc2f98,\n        },\n        r1a0: u288 {\n            limb0: 0xefc6feb49cef1713c1b90d99,\n            limb1: 0x9d88fa75495a84c8fc058292,\n            limb2: 0xe600d88bc38add5,\n        },\n        r1a1: u288 {\n            limb0: 0x21b0fbb2002056263f11d13a,\n            limb1: 0x8818f85658929c2a3fc48ce8,\n            limb2: 0xa5f20f85c67e36f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd1464269bbeafa546f559b8f,\n            limb1: 0xab7f7dcd1ac32b86979471cf,\n            limb2: 0x6a38256ee96f113,\n        },\n        r0a1: u288 {\n            limb0: 0xf14d50984e65f9bc41df4e7e,\n            limb1: 0x350aff9be6f9652ad441a3ad,\n            limb2: 0x1b1e60534b0a6aba,\n        },\n        r1a0: u288 {\n            limb0: 0x9e98507da6cc50a56f023849,\n            limb1: 0xcf8925e03f2bb5c1ba0962dd,\n            limb2: 0x2b18961810a62f87,\n        },\n        r1a1: u288 {\n            limb0: 0x3a4c61b937d4573e3f2da299,\n            limb1: 0x6f4c6c13fd90f4edc322796f,\n            limb2: 0x13f4e99b6a2f025e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc10f4c88a98b0d61d708002e,\n            limb1: 0x4ac3d70224f191b0e0d2853a,\n            limb2: 0x1fa4ccc4d95b80c6,\n        },\n        r0a1: u288 {\n            limb0: 0x17236a7e35ee2ab3b4f06f07,\n            limb1: 0xf35f3bd072613ded87027ae0,\n            limb2: 0x2101c31ea458ce27,\n        },\n        r1a0: u288 {\n            limb0: 0x5bc8589aa3dd32a141953938,\n            limb1: 0x9d90f13527d79e8e5acebcb0,\n            limb2: 0x178688523ab3c6c0,\n        },\n        r1a1: u288 {\n            limb0: 0xe90a7e5cf5d0984ee96bdde3,\n            limb1: 0x29d8991e5e746709556196f9,\n            limb2: 0x17f632c106ca4945,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe0115a79120ae892a72f3dcb,\n            limb1: 0xec67b5fc9ea414a4020135f,\n            limb2: 0x1ee364e12321904a,\n        },\n        r0a1: u288 {\n            limb0: 0xa74d09666f9429c1f2041cd9,\n            limb1: 0x57ffe0951f863dd0c1c2e97a,\n            limb2: 0x154877b2d1908995,\n        },\n        r1a0: u288 {\n            limb0: 0xcbe5e4d2d2c91cdd4ccca0,\n            limb1: 0xe6acea145563a04b2821d120,\n            limb2: 0x18213221f2937afb,\n        },\n        r1a1: u288 {\n            limb0: 0xfe20afa6f6ddeb2cb768a5ae,\n            limb1: 0x1a3b509131945337c3568fcf,\n            limb2: 0x127b5788263a927e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x12001d91db931ce66e88e1b6,\n            limb1: 0x74e3d114c62a197de1ca3725,\n            limb2: 0x268f10b41d839cb9,\n        },\n        r0a1: u288 {\n            limb0: 0x37fa067815b37c30a270d0eb,\n            limb1: 0xde1184e5735eed8c75c61138,\n            limb2: 0x2e915a3aef5d480c,\n        },\n        r1a0: u288 {\n            limb0: 0xa52e8ba088de9dad4ad62373,\n            limb1: 0x144382b24e1957b51ef45581,\n            limb2: 0x18ca358adc06316f,\n        },\n        r1a1: u288 {\n            limb0: 0xf3a419830f1d63011c7d18fc,\n            limb1: 0x69a8c6e679dae84b49ef21eb,\n            limb2: 0x3002b7eaffec547f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe7c658aecdab4db3c83f7927,\n            limb1: 0xfbf162264ca04ee50c70bde8,\n            limb2: 0x2a20f4565b7ff885,\n        },\n        r0a1: u288 {\n            limb0: 0x45b1c2f0a1226361f42683c0,\n            limb1: 0x9acdd892c48c08de047296bc,\n            limb2: 0x27836373108925d4,\n        },\n        r1a0: u288 {\n            limb0: 0xc0ea9294b345e6d4892676a7,\n            limb1: 0xcba74eca77086af245d1606e,\n            limb2: 0xf20edac89053e72,\n        },\n        r1a1: u288 {\n            limb0: 0x4c92a28f2779a527a68a938c,\n            limb1: 0x3a1c3c55ff9d20eac109fab3,\n            limb2: 0x21c4a8c524b1ee7d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe417e1af22c27b08f77c9a24,\n            limb1: 0xe9f25ac1fc093df8757d4423,\n            limb2: 0x10cb27cc61842200,\n        },\n        r0a1: u288 {\n            limb0: 0x95b53ca4e1a1e1b25b252a11,\n            limb1: 0x5dbfc89db58efed8c8889fad,\n            limb2: 0x2c1f157b89793de1,\n        },\n        r1a0: u288 {\n            limb0: 0x5c365567188422646a2ce946,\n            limb1: 0xd06ee3bc533f8050606b64b2,\n            limb2: 0x10f2edab2c241eee,\n        },\n        r1a1: u288 {\n            limb0: 0x929065a65c64cf7eb2724de0,\n            limb1: 0xc6c085722c084f8086b9bf0,\n            limb2: 0x9d2ef06935d37d9,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa68021d593c46246af22559e,\n            limb1: 0x5c2cfc5bc4cd1b48f4704134,\n            limb2: 0x296066ede1298f8c,\n        },\n        r0a1: u288 {\n            limb0: 0xfe17dd6765eb9b9625eb6a84,\n            limb1: 0x4e35dd8e8f6088bb14299f8d,\n            limb2: 0x1a380ab2689106e4,\n        },\n        r1a0: u288 {\n            limb0: 0x82bacf337ca09853df42bc59,\n            limb1: 0xa15de4ef34a30014c5a2e9ae,\n            limb2: 0x243cc0cec53c778b,\n        },\n        r1a1: u288 {\n            limb0: 0xcb2a1bf18e3ba9349b0a8bf2,\n            limb1: 0x35134b2505cbb5a4c91f0ac4,\n            limb2: 0x25e45206b13f43c4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8e97b007ffd9891bd0e77650,\n            limb1: 0x77671278ac33f17df6b1db88,\n            limb2: 0x243daddc47f5d5c2,\n        },\n        r0a1: u288 {\n            limb0: 0x655fe4c8bbe5ee06aaa0054b,\n            limb1: 0xf751450b02c93c7ddea95938,\n            limb2: 0x21aa988e950d563f,\n        },\n        r1a0: u288 {\n            limb0: 0xb51b3b6b8582de3eb0549518,\n            limb1: 0x84a1031766b7e465f5bbf40c,\n            limb2: 0xd46c2d5b95e5532,\n        },\n        r1a1: u288 {\n            limb0: 0x50b6ddd8a5eef0067652191e,\n            limb1: 0x298832a0bc46ebed8bff6190,\n            limb2: 0xb568b4fe8311f93,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xbb5cbeceb2f246e13d86b7e,\n            limb1: 0xb8a224bd5eb5bf0ac661280d,\n            limb2: 0x1f31873419815e8c,\n        },\n        r0a1: u288 {\n            limb0: 0xd539fdf65481b6a1d5363447,\n            limb1: 0xd45b0e4c8fd5912ff6acc054,\n            limb2: 0x1ad52c09bbb45a6a,\n        },\n        r1a0: u288 {\n            limb0: 0x18c54bae51814ad31a7637dc,\n            limb1: 0x7399f2997ab65363f4b07657,\n            limb2: 0x14ca110b944d53ee,\n        },\n        r1a1: u288 {\n            limb0: 0xdf5b710c160fda77b78d1963,\n            limb1: 0x5610ab09a6b6f9785b0d5e31,\n            limb2: 0x2bd8363dac7d0d6d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb9a036825faa86e558ac3b7c,\n            limb1: 0xde8e05942227a45439a04aba,\n            limb2: 0x15e0173a1220d16f,\n        },\n        r0a1: u288 {\n            limb0: 0x76187085a6d0013ddc40c1b7,\n            limb1: 0xdfb11818eaa5468e457b1a66,\n            limb2: 0x2caa10f9c375fdad,\n        },\n        r1a0: u288 {\n            limb0: 0x947c4c0963d9d0f7879bdd6,\n            limb1: 0x833b3e8ccc4dae2807240bac,\n            limb2: 0xbd0a0ccace988f5,\n        },\n        r1a1: u288 {\n            limb0: 0x5d05c4f7170655b9e64a98c9,\n            limb1: 0xa96f0f8887a475547c9fb49d,\n            limb2: 0xf5c467cc50f5ca8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xddb4db99db681d35f71a159c,\n            limb1: 0xf71a330019414e6fdee75700,\n            limb2: 0x14d9838e7d1918bb,\n        },\n        r0a1: u288 {\n            limb0: 0x203c8bac71951a5f2c653710,\n            limb1: 0x9fc93f8da38ecc2957313982,\n            limb2: 0x7b6d981259cabd9,\n        },\n        r1a0: u288 {\n            limb0: 0xa7297cdb5be0cc45d48ca6af,\n            limb1: 0xa07b4b025ebe6c960eddfc56,\n            limb2: 0xef2a5c30ef00652,\n        },\n        r1a1: u288 {\n            limb0: 0xb7f05c76d860e9122b36ecd7,\n            limb1: 0x407d6522e1f9ce2bcbf80eda,\n            limb2: 0x197625a558f32c36,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2439cf9215808554cb12e63b,\n            limb1: 0x3c7e2319b82d818d33777496,\n            limb2: 0xfecef34cf6a529a,\n        },\n        r0a1: u288 {\n            limb0: 0xb9ebc2e1b201650cfe389c58,\n            limb1: 0xdd5693c4da9af85799b6f077,\n            limb2: 0x52803678bcf37d4,\n        },\n        r1a0: u288 {\n            limb0: 0xb7a5621c2bfa839aec6bcda6,\n            limb1: 0xfda43823873c0833aeb28bd6,\n            limb2: 0xfb92522965f5d4d,\n        },\n        r1a1: u288 {\n            limb0: 0x4ba0ec0f60464b07f207b70d,\n            limb1: 0x6926f82ebb1480439708f64e,\n            limb2: 0x1577548c5fc31c26,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb0f04df9dec94801e48a6ff7,\n            limb1: 0xdc59d087c627d38334e5b969,\n            limb2: 0x3d36e11420be053,\n        },\n        r0a1: u288 {\n            limb0: 0xc80f070001aa1586189e0215,\n            limb1: 0xff849fcbbbe7c00c83ab5282,\n            limb2: 0x2a2354b2882706a6,\n        },\n        r1a0: u288 {\n            limb0: 0x48cf70c80f08b6c7dc78adb2,\n            limb1: 0xc6632efa77b36a4a1551d003,\n            limb2: 0xc2d3533ece75879,\n        },\n        r1a1: u288 {\n            limb0: 0x63e82ba26617416a0b76ddaa,\n            limb1: 0xdaceb24adda5a049bed29a50,\n            limb2: 0x1a82061a3344043b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x35d6a47eb6e3946877b8faa4,\n            limb1: 0x3226b4af47aefd8d27f573ce,\n            limb2: 0xfc0eff6a2b8b60,\n        },\n        r0a1: u288 {\n            limb0: 0xdd6a357e6537b879eeb96e5c,\n            limb1: 0x5c1adf10968f6e6f920f4ed,\n            limb2: 0x398dff2b4ff6d14,\n        },\n        r1a0: u288 {\n            limb0: 0xd686f20c60c2d5e4bc95779c,\n            limb1: 0x19250d0528a15c4610e5879b,\n            limb2: 0x2fd84429a7cd5ce,\n        },\n        r1a1: u288 {\n            limb0: 0xb6467442d2b7537c06de1ee1,\n            limb1: 0xc638febd171b2a5fe230ba46,\n            limb2: 0x130f3130328340b3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9152fecf0f523415acc7c7be,\n            limb1: 0xd9632cbfccc4ea5d7bf31177,\n            limb2: 0x2d7288c5f8c83ab1,\n        },\n        r0a1: u288 {\n            limb0: 0x53144bfe4030f3f9f5efda8,\n            limb1: 0xfeec394fbf392b11c66bae27,\n            limb2: 0x28840813ab8a200b,\n        },\n        r1a0: u288 {\n            limb0: 0xdec3b11fbc28b305d9996ec7,\n            limb1: 0x5b5f8d9d17199e149c9def6e,\n            limb2: 0x10c1a149b6751bae,\n        },\n        r1a1: u288 {\n            limb0: 0x665e8eb7e7d376a2d921c889,\n            limb1: 0xfdd76d06e46ee1a943b8788d,\n            limb2: 0x8bb21d9960e837b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3a67c28a175200e631aa506a,\n            limb1: 0x7397303a34968ff17c06e801,\n            limb2: 0x1b81e0c63123688b,\n        },\n        r0a1: u288 {\n            limb0: 0x3490cfd4f076c621dac4a12c,\n            limb1: 0xec183578c91b90b72e5887b7,\n            limb2: 0x179fb354f608da00,\n        },\n        r1a0: u288 {\n            limb0: 0x9322bde2044dde580a78ba33,\n            limb1: 0xfc74821b668d3570cad38f8b,\n            limb2: 0x8cec54a291f5e57,\n        },\n        r1a1: u288 {\n            limb0: 0xc2818b6a9530ee85d4b2ae49,\n            limb1: 0x8d7b651ad167f2a43d7a2d0a,\n            limb2: 0x7c9ca9bab0ffc7f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc274e231d1af08db19d9587b,\n            limb1: 0x835ea4ada618598e54401f91,\n            limb2: 0xea45e2ca1303f7c,\n        },\n        r0a1: u288 {\n            limb0: 0xc3db7f0268aea6734f3a6c08,\n            limb1: 0x5a4a35f6f081ec00f9f82eb6,\n            limb2: 0x132df163db52471d,\n        },\n        r1a0: u288 {\n            limb0: 0x61dbd840ad68b3b9fac00f32,\n            limb1: 0x86a31d757749fc9418afc019,\n            limb2: 0x2ee9f85e4c10ad58,\n        },\n        r1a1: u288 {\n            limb0: 0xf307238e66d8d61123d0c511,\n            limb1: 0x9701297c75163ffce50e8dbb,\n            limb2: 0x779fa2df58f46e4,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6ddfe3fe6e09660af859f4fb,\n            limb1: 0x7ee4d91145f672775128aa1e,\n            limb2: 0x30039ee28acdda42,\n        },\n        r0a1: u288 {\n            limb0: 0x3e6a40be2e258f27abaeac43,\n            limb1: 0x13f1e6c56b5854c7873d5147,\n            limb2: 0x25294aeee7c6f83c,\n        },\n        r1a0: u288 {\n            limb0: 0xe24ce9b2af200251507b7ddc,\n            limb1: 0xaa6119bab54437145b0ffb72,\n            limb2: 0x723436cc5e0ba3f,\n        },\n        r1a1: u288 {\n            limb0: 0x7423e1cd29046ca866701a4a,\n            limb1: 0xde637f730d8996e4a46cf668,\n            limb2: 0x2462acb26100a370,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa576408f8300de3a7714e6ae,\n            limb1: 0xe1072c9a16f202ecf37fbc34,\n            limb2: 0x1b0cb1e2b5871263,\n        },\n        r0a1: u288 {\n            limb0: 0x2128e2314694b663286e231e,\n            limb1: 0x54bea71957426f002508f715,\n            limb2: 0x36ecc5dbe069dca,\n        },\n        r1a0: u288 {\n            limb0: 0x17c77cd88f9d5870957850ce,\n            limb1: 0xb7f4ec2bc270ce30538fe9b8,\n            limb2: 0x766279e588592bf,\n        },\n        r1a1: u288 {\n            limb0: 0x1b6caddf18de2f30fa650122,\n            limb1: 0x40b77237a29cada253c126c6,\n            limb2: 0x74ff1349b1866c8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe460e0022fd982dd65e52c43,\n            limb1: 0xc3133a12d43813345194194a,\n            limb2: 0x122345e30b232d2c,\n        },\n        r0a1: u288 {\n            limb0: 0xb99c2ae2112a808f231ccfd5,\n            limb1: 0x33a214c9658724f45321f3cb,\n            limb2: 0x4b19649cd727708,\n        },\n        r1a0: u288 {\n            limb0: 0x7679f8b3e3b1cb4437b82b6a,\n            limb1: 0x6d58389da15334f63e2ef997,\n            limb2: 0x21cbedc6cce1d5d1,\n        },\n        r1a1: u288 {\n            limb0: 0x87ee5132496c29a159d1c039,\n            limb1: 0x254b650562ef412646742be3,\n            limb2: 0x272e27a277a60f1b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3603266e05560becab36faef,\n            limb1: 0x8c3b88c9390278873dd4b048,\n            limb2: 0x24a715a5d9880f38,\n        },\n        r0a1: u288 {\n            limb0: 0xe9f595b111cfd00d1dd28891,\n            limb1: 0x75c6a392ab4a627f642303e1,\n            limb2: 0x17b34a30def82ab6,\n        },\n        r1a0: u288 {\n            limb0: 0xe706de8f35ac8372669fc8d3,\n            limb1: 0x16cc7f4032b3f3ebcecd997d,\n            limb2: 0x166eba592eb1fc78,\n        },\n        r1a1: u288 {\n            limb0: 0x7d584f102b8e64dcbbd1be9,\n            limb1: 0x2ead4092f009a9c0577f7d3,\n            limb2: 0x2fe2c31ee6b1d41e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72253d939632f8c28fb5763,\n            limb1: 0x9b943ab13cad451aed1b08a2,\n            limb2: 0xdb9b2068e450f10,\n        },\n        r0a1: u288 {\n            limb0: 0x80f025dcbce32f6449fa7719,\n            limb1: 0x8a0791d4d1ed60b86e4fe813,\n            limb2: 0x1b1bd5dbce0ea966,\n        },\n        r1a0: u288 {\n            limb0: 0xaa72a31de7d815ae717165d4,\n            limb1: 0x501c29c7b6aebc4a1b44407f,\n            limb2: 0x464aa89f8631b3a,\n        },\n        r1a1: u288 {\n            limb0: 0x6b8d137e1ea43cd4b1f616b1,\n            limb1: 0xdd526a510cc84f150cc4d55a,\n            limb2: 0x1da2ed980ebd3f29,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4cd2646eabd4d5cff32052a6,\n            limb1: 0x83d7e83c6f09aeefde86fc60,\n            limb2: 0x1fc1e7c446ee815a,\n        },\n        r0a1: u288 {\n            limb0: 0x3a1a9e52b334c520eb55ff6b,\n            limb1: 0x20d356b0b9123715a827c7b,\n            limb2: 0xa8f15019ec6f24b,\n        },\n        r1a0: u288 {\n            limb0: 0x3562c1467de42a724ad3840d,\n            limb1: 0xea424d9d7016d3203fda5249,\n            limb2: 0x20d6afd1fb5725cd,\n        },\n        r1a1: u288 {\n            limb0: 0x72cdbd431057bcb0623d79,\n            limb1: 0x2a173bad85c78751480984dc,\n            limb2: 0xc3f6e7bbb16c7ac,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xcc9b9f22372562a0913012cc,\n            limb1: 0x4653a2ba5e6adf2aa8c3bdfc,\n            limb2: 0x172d0e92a7ba9f75,\n        },\n        r0a1: u288 {\n            limb0: 0x2dddd736f3f3bace91f4b424,\n            limb1: 0xfd210f553d0f4aa73b3ff14c,\n            limb2: 0x85f5ae434eac7ab,\n        },\n        r1a0: u288 {\n            limb0: 0x8fe12ea5bbfc97bf316e3937,\n            limb1: 0xf172bba1b5323c01413ff4a3,\n            limb2: 0xbeebca688f99c40,\n        },\n        r1a1: u288 {\n            limb0: 0xf95c55ffa6c4b017804f8324,\n            limb1: 0xe6e3bb6dfaa2bd6e1da7766c,\n            limb2: 0x136c1ff2a96eccab,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x867cced8a010850958f41ff5,\n            limb1: 0x6a37fdb2b8993eed18bafe8e,\n            limb2: 0x21b9f782109e5a7,\n        },\n        r0a1: u288 {\n            limb0: 0x7307477d650618e66de38d0f,\n            limb1: 0xacb622ce92a7e393dbe10ba1,\n            limb2: 0x236e70838cee0ed5,\n        },\n        r1a0: u288 {\n            limb0: 0xb564a308aaf5dda0f4af0f0d,\n            limb1: 0x55fc71e2f13d8cb12bd51e74,\n            limb2: 0x294cf115a234a9e9,\n        },\n        r1a1: u288 {\n            limb0: 0xbd166057df55c135b87f35f3,\n            limb1: 0xf9f29b6c50f1cce9b85ec9b,\n            limb2: 0x2e8448d167f20f96,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xcaa6d4115cc70a8bbc8baf78,\n            limb1: 0xbda798d59aad11d74f87989d,\n            limb2: 0xc366e4f74f33072,\n        },\n        r0a1: u288 {\n            limb0: 0xd148a96ac857a95fa9c98b72,\n            limb1: 0x61012b08f12dc78ec4bece91,\n            limb2: 0x2b97ec9eb164657f,\n        },\n        r1a0: u288 {\n            limb0: 0x2dbd7565ab717dab4038b4b5,\n            limb1: 0xe36861232766618a7949cd7d,\n            limb2: 0x2689d0706676707e,\n        },\n        r1a1: u288 {\n            limb0: 0x70f62db7654a24ab3cc7aa17,\n            limb1: 0x760f6520439ffd75cefc2022,\n            limb2: 0x1f1579d08acb1da,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdedaff3205bb953b2c390b8a,\n            limb1: 0xe1a899da21c1dafb485c707e,\n            limb2: 0x1ec897e7a041493e,\n        },\n        r0a1: u288 {\n            limb0: 0xf52c3c30cd4d3202b34089e0,\n            limb1: 0xc652aa1ff533e1aad7532305,\n            limb2: 0x2a1df766e5e3aa2e,\n        },\n        r1a0: u288 {\n            limb0: 0x7ac695d3e19d79b234daaf3d,\n            limb1: 0x5ce2f92666aec92a650feee1,\n            limb2: 0x21ab4fe20d978e77,\n        },\n        r1a1: u288 {\n            limb0: 0xa64a913a29a1aed4e0798664,\n            limb1: 0x66bc208b511503d127ff5ede,\n            limb2: 0x2389ba056de56a8d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5b9d278de289476b42c772c1,\n            limb1: 0x5fc336c4466561dae92c0a7a,\n            limb2: 0x22e43f58103642de,\n        },\n        r0a1: u288 {\n            limb0: 0x614e554ee2047bd39ee9e569,\n            limb1: 0x89f6a3f450e6ad4c75bf3b7c,\n            limb2: 0x17f3f358f3208e2,\n        },\n        r1a0: u288 {\n            limb0: 0xd6914fc96e46bb5166f2a8c7,\n            limb1: 0x7ab0a8d25eb1ce99339eb4f3,\n            limb2: 0x26d50123983410a5,\n        },\n        r1a1: u288 {\n            limb0: 0x66f5a6fa34156df9ed454e7e,\n            limb1: 0x8dea13b19d2b448228c489fe,\n            limb2: 0x221b0f1b3cf1b5b0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd88b16e68600a12e6c1f6006,\n            limb1: 0x333243b43d3b7ff18d0cc671,\n            limb2: 0x2b84b2a9b0f03ed8,\n        },\n        r0a1: u288 {\n            limb0: 0xf3e2b57ddaac822c4da09991,\n            limb1: 0xd7c894b3fe515296bb054d2f,\n            limb2: 0x10a75e4c6dddb441,\n        },\n        r1a0: u288 {\n            limb0: 0x73c65fbbb06a7b21b865ac56,\n            limb1: 0x21f4ecd1403bb78729c7e99b,\n            limb2: 0xaf88a160a6b35d4,\n        },\n        r1a1: u288 {\n            limb0: 0xade61ce10b8492d659ff68d0,\n            limb1: 0x1476e76cf3a8e0df086ad9eb,\n            limb2: 0x2e28cfc65d61e946,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xdf8b54b244108008e7f93350,\n            limb1: 0x2ae9a68b9d6b96f392decd6b,\n            limb2: 0x160b19eed152271c,\n        },\n        r0a1: u288 {\n            limb0: 0xc18a8994cfbb2e8df446e449,\n            limb1: 0x408d51e7e4adedd8f4f94d06,\n            limb2: 0x27661b404fe90162,\n        },\n        r1a0: u288 {\n            limb0: 0x1390b2a3b27f43f7ac73832c,\n            limb1: 0x14d57301f6002fd328f2d64d,\n            limb2: 0x17f3fa337367dddc,\n        },\n        r1a1: u288 {\n            limb0: 0x79cab8ff5bf2f762c5372f80,\n            limb1: 0xc979d6f385fae4b5e4785acf,\n            limb2: 0x60c5307a735b00f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x905277068fc2a9eaf4022c94,\n            limb1: 0x484667d98d38e5a129e1e41,\n            limb2: 0x1e555bb230565f19,\n        },\n        r0a1: u288 {\n            limb0: 0xf91934891dadaf69ceb2783,\n            limb1: 0x8d865e297806a5e7b924b2b0,\n            limb2: 0x15f3c40b57125de6,\n        },\n        r1a0: u288 {\n            limb0: 0x8ece4f147f09da0dd81f7bd9,\n            limb1: 0x362f0e81d6c7c4a91a7d9c05,\n            limb2: 0x12cb92de7484a836,\n        },\n        r1a1: u288 {\n            limb0: 0x1b36ed01861dad86c8fe7719,\n            limb1: 0xa0d402159346e6f0b467ad73,\n            limb2: 0x3cdab1b7cf2b2b1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb3356ac66981416a87728e37,\n            limb1: 0xf763adf54bfe038e4f3120cd,\n            limb2: 0x128c2fb7ac0f6fdc,\n        },\n        r0a1: u288 {\n            limb0: 0x16fdbb3373e3a04996380f4d,\n            limb1: 0xa69f830696258682eacddd88,\n            limb2: 0xece01e036560157,\n        },\n        r1a0: u288 {\n            limb0: 0x7a7f4318f4415556a1d9704a,\n            limb1: 0x36ed351a6cbff887d265d32d,\n            limb2: 0xb467b7eb44b98d9,\n        },\n        r1a1: u288 {\n            limb0: 0xed0a5e62d5d68a37e829b892,\n            limb1: 0x791ec430bf872c680fd3aee9,\n            limb2: 0x2b6dfd84fd2335e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x386d7b23c6dccb87637018c9,\n            limb1: 0xfed2ea478e9a2210289079e2,\n            limb2: 0x100aa83cb843353e,\n        },\n        r0a1: u288 {\n            limb0: 0x229c5c285f049d04c3dc5ce7,\n            limb1: 0x28110670fe1d38c53ffcc6f7,\n            limb2: 0x1778918279578f50,\n        },\n        r1a0: u288 {\n            limb0: 0xe9ad2c7b8a17a1f1627ff09d,\n            limb1: 0xedff5563c3c3e7d2dcc402ec,\n            limb2: 0xa8bd6770b6d5aa8,\n        },\n        r1a1: u288 {\n            limb0: 0x66c5c1aeed5c04470b4e8a3d,\n            limb1: 0x846e73d11f2d18fe7e1e1aa2,\n            limb2: 0x10a60eabe0ec3d78,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7d050d3f6b11d66c1d7938d3,\n            limb1: 0x7c56af94f183f725117d86dd,\n            limb2: 0x1a7dc5625ba0d800,\n        },\n        r0a1: u288 {\n            limb0: 0x85c3d95f9bdb74dc2df32d60,\n            limb1: 0x2ce48e3c8dfbfb4d4598bd15,\n            limb2: 0x15d12571292df44f,\n        },\n        r1a0: u288 {\n            limb0: 0xed4859f84410cebb78050aa,\n            limb1: 0x19cc122e96cb959c7d8c9f9f,\n            limb2: 0xf8236b851f0c821,\n        },\n        r1a1: u288 {\n            limb0: 0x4c517c69569fcf0586fb8351,\n            limb1: 0x7fe39e8e6a6fb9b4e7461cca,\n            limb2: 0x2aa8100976400cca,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x88ca191d85be1f6c205257ef,\n            limb1: 0xd0cecf5c5f80926c77fd4870,\n            limb2: 0x16ec42b5cae83200,\n        },\n        r0a1: u288 {\n            limb0: 0x154cba82460752b94916186d,\n            limb1: 0x564f6bebac05a4f3fb1353ac,\n            limb2: 0x2d47a47da836d1a7,\n        },\n        r1a0: u288 {\n            limb0: 0xb39c4d6150bd64b4674f42ba,\n            limb1: 0x93c967a38fe86f0779bf4163,\n            limb2: 0x1a51995a49d50f26,\n        },\n        r1a1: u288 {\n            limb0: 0xeb7bdec4b7e304bbb0450608,\n            limb1: 0x11fc9a124b8c74b3d5560ea4,\n            limb2: 0xbfa9bd7f55ad8ac,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x19a47ae9837b17ed7766dc46,\n            limb1: 0x287abc763db12ac0b6d544e4,\n            limb2: 0x2d924e29dde311b8,\n        },\n        r0a1: u288 {\n            limb0: 0x7fb0ee7335115e02db2bfd2d,\n            limb1: 0x8aba5ed4254d66ebbc36b1a7,\n            limb2: 0x12e289ec35af915b,\n        },\n        r1a0: u288 {\n            limb0: 0x1d5bda2d04c26274095e86ba,\n            limb1: 0xa0403a6836764d9347154ac1,\n            limb2: 0x1e6c670b3e18fdcd,\n        },\n        r1a1: u288 {\n            limb0: 0x749725dd346d879ecd2ec6e9,\n            limb1: 0x823aa726897471f6e984295a,\n            limb2: 0x143d734b04f6993b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2fdc574c85cf0c0ce5e07a51,\n            limb1: 0xd2439bf7b00bddc4cfb01b0c,\n            limb2: 0x125c3bbdeb0bd2da,\n        },\n        r0a1: u288 {\n            limb0: 0x9d664714bae53cafcb5ef55d,\n            limb1: 0x495c01724790853548f5e4de,\n            limb2: 0x2ce5e2e263725941,\n        },\n        r1a0: u288 {\n            limb0: 0x98071eb7fe88c9124aee3774,\n            limb1: 0xc3f66947a52bd2f6d520579f,\n            limb2: 0x2eaf775dbd52f7d3,\n        },\n        r1a1: u288 {\n            limb0: 0x23e5594948e21db2061dca92,\n            limb1: 0xd0ffa6f6c77290531c185431,\n            limb2: 0x604c085de03afb1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3352ea0d65d65ebdd17519aa,\n            limb1: 0x8b9da99137040f85a8864a04,\n            limb2: 0xa372112cdf0a7c2,\n        },\n        r0a1: u288 {\n            limb0: 0x5b96ba3359a8de70a5695d09,\n            limb1: 0x7a097725a4c6f484a2766b2,\n            limb2: 0x2a71ba7f8ded5c34,\n        },\n        r1a0: u288 {\n            limb0: 0x761550b61d41fb97ebadae02,\n            limb1: 0xe6829d1e928b580c3abbefa0,\n            limb2: 0x46f25685bfc35a8,\n        },\n        r1a1: u288 {\n            limb0: 0x2c25f70377990a68d8759910,\n            limb1: 0x471894defdadfedf22c0bafb,\n            limb2: 0x2ab4916c3bc05768,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xeec2912e15f6bda39d4e005e,\n            limb1: 0x2b8610c44d27bdbc6ba2aac5,\n            limb2: 0x78ddc4573fc1fed,\n        },\n        r0a1: u288 {\n            limb0: 0x48099a0da11ea21de015229d,\n            limb1: 0x5fe937100967d5cc544f4af1,\n            limb2: 0x2c9ffe6d7d7e9631,\n        },\n        r1a0: u288 {\n            limb0: 0xa70d251296ef1ae37ceb7d03,\n            limb1: 0x2adadcb7d219bb1580e6e9c,\n            limb2: 0x180481a57f22fd03,\n        },\n        r1a1: u288 {\n            limb0: 0xacf46db9631037dd933eb72a,\n            limb1: 0x8a58491815c7656292a77d29,\n            limb2: 0x261e3516c348ae12,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8d8f24f69ae85e21e752729f,\n            limb1: 0x4a35e040036039c8b7ca8b20,\n            limb2: 0x7fecda8f0555a5f,\n        },\n        r0a1: u288 {\n            limb0: 0xba227b6219fbafd98a0685c6,\n            limb1: 0x5767306795e9ffe9dab73eb0,\n            limb2: 0xcb264c99750f1af,\n        },\n        r1a0: u288 {\n            limb0: 0x47b66cce1b80c3fe69fa1b2b,\n            limb1: 0x6108b3a8db500ebc0c3effe1,\n            limb2: 0x1973e255653c37fd,\n        },\n        r1a1: u288 {\n            limb0: 0x9837f3fa5fed8ec21af731a1,\n            limb1: 0x3ad9b937919f2a9068fab4f,\n            limb2: 0x13db07c0d16823df,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2bfa32f0a09c3e2cfb8f6a38,\n            limb1: 0x7a24df3ff3c7119a59d49318,\n            limb2: 0x10e42281d64907ba,\n        },\n        r0a1: u288 {\n            limb0: 0xce42177a66cdeb4207d11e0c,\n            limb1: 0x3322aa425a9ca270152372ad,\n            limb2: 0x2f7fa83db407600c,\n        },\n        r1a0: u288 {\n            limb0: 0x62a8ff94fd1c7b9035af4446,\n            limb1: 0x3ad500601bbb6e7ed1301377,\n            limb2: 0x254d253ca06928f,\n        },\n        r1a1: u288 {\n            limb0: 0xf8f1787cd8e730c904b4386d,\n            limb1: 0x7fd3744349918d62c42d24cc,\n            limb2: 0x28a05e105d652eb8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6ef31e059d602897fa8e80a8,\n            limb1: 0x66a0710847b6609ceda5140,\n            limb2: 0x228c0e568f1eb9c0,\n        },\n        r0a1: u288 {\n            limb0: 0x7b47b1b133c1297b45cdd79b,\n            limb1: 0x6b4f04ed71b58dafd06b527b,\n            limb2: 0x13ae6db5254df01a,\n        },\n        r1a0: u288 {\n            limb0: 0xbeca2fccf7d0754dcf23ddda,\n            limb1: 0xe3d0bcd7d9496d1e5afb0a59,\n            limb2: 0x305a0afb142cf442,\n        },\n        r1a1: u288 {\n            limb0: 0x2d299847431477c899560ecf,\n            limb1: 0xbcd9e6c30bedee116b043d8d,\n            limb2: 0x79473a2a7438353,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4c3d4c9736611ed8fb1d9271,\n            limb1: 0x1ad8304567218f83e6629715,\n            limb2: 0x1e2998ef42e3bd93,\n        },\n        r0a1: u288 {\n            limb0: 0x6058da5c0e33f3bb91f1ccdc,\n            limb1: 0x85fd873aae33fd9827f11b70,\n            limb2: 0x988a3b4c890f6ed,\n        },\n        r1a0: u288 {\n            limb0: 0xcd745c1fa813f0f824992107,\n            limb1: 0x41350289a79b1428b321549f,\n            limb2: 0x18e8b3780c7e35b0,\n        },\n        r1a1: u288 {\n            limb0: 0xea70ff019228aeef72c9e3fc,\n            limb1: 0x4b003c67445395584152ba28,\n            limb2: 0x13f07e9a64bf528e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4fa8f98d7bd0604e5d5b49c0,\n            limb1: 0xfe9fc0738cfdf0d23a42711f,\n            limb2: 0x1568a39cad4154c,\n        },\n        r0a1: u288 {\n            limb0: 0x8471afa248283ad06c4db529,\n            limb1: 0x9447b93c68733a150e76e5d0,\n            limb2: 0x13b3b7131a3847ad,\n        },\n        r1a0: u288 {\n            limb0: 0x9c866d6940a2068b8d87af80,\n            limb1: 0x1470ea8951d66e29138578ed,\n            limb2: 0x15a3f7cc0cba7976,\n        },\n        r1a1: u288 {\n            limb0: 0x20066a7aec98ccd59adcabc,\n            limb1: 0x865be6476878d559602a0b65,\n            limb2: 0x22c7d2f27c5da091,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x65b71fe695e7ccd4b460dace,\n            limb1: 0xa6ceba62ef334e6fe91301d5,\n            limb2: 0x299f578d0f3554e6,\n        },\n        r0a1: u288 {\n            limb0: 0xaf781dd030a274e7ecf0cfa4,\n            limb1: 0x2095020d373a14d7967797aa,\n            limb2: 0x6a7f9df6f185bf8,\n        },\n        r1a0: u288 {\n            limb0: 0x8e91e2dba67d130a0b274df3,\n            limb1: 0xe192a19fce285c12c6770089,\n            limb2: 0x6e9acf4205c2e22,\n        },\n        r1a1: u288 {\n            limb0: 0xbcd5c206b5f9c77d667189bf,\n            limb1: 0x656a7e2ebc78255d5242ca9,\n            limb2: 0x25f43fec41d2b245,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x872323fa18de52d2b738cd1,\n            limb1: 0x6a848834793291e5f134b761,\n            limb2: 0x1419be04db8c1168,\n        },\n        r0a1: u288 {\n            limb0: 0x80407871d8b9dd1778465b6,\n            limb1: 0x2df09786d9e41dd2770f8848,\n            limb2: 0x17daa86ff58088b8,\n        },\n        r1a0: u288 {\n            limb0: 0x7d8a012d087be15cc7485f00,\n            limb1: 0xc377bd58ce9c87034730c675,\n            limb2: 0x1f5cb7e6d6c127a3,\n        },\n        r1a1: u288 {\n            limb0: 0x5f5cb76761c71c418877f0da,\n            limb1: 0x860abc859349f556b5d7ba6b,\n            limb2: 0x14ae2383286f589e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x4e56e6733cce20d9c5b16d96,\n            limb1: 0xc7ef260535fb75b9d3e089f,\n            limb2: 0x292dd4aa636e7729,\n        },\n        r0a1: u288 {\n            limb0: 0x6e7e1038b336f36519c9faaf,\n            limb1: 0x3c66bd609510309485e225c7,\n            limb2: 0x10cacac137411eb,\n        },\n        r1a0: u288 {\n            limb0: 0x4a3e8b96278ac092fe4f3b15,\n            limb1: 0xba47e583e2750b42f93c9631,\n            limb2: 0x125da6bd69495bb9,\n        },\n        r1a1: u288 {\n            limb0: 0xae7a56ab4b959a5f6060d529,\n            limb1: 0xc3c263bfd58c0030c063a48e,\n            limb2: 0x2f4d15f13fae788c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x301e0885c84d273b6d323124,\n            limb1: 0x11fd5c75e269f7a30fa4154f,\n            limb2: 0x19afdcfdcce2fc0d,\n        },\n        r0a1: u288 {\n            limb0: 0x3d13519f934526be815c38b0,\n            limb1: 0xd43735909547da73838874fc,\n            limb2: 0x255d8aca30f4e0f6,\n        },\n        r1a0: u288 {\n            limb0: 0x90a505b76f25a3396e2cea79,\n            limb1: 0x3957a2d0848c54b9079fc114,\n            limb2: 0x1ba0cd3a9fe6d4bb,\n        },\n        r1a1: u288 {\n            limb0: 0xc47930fba77a46ebb1db30a9,\n            limb1: 0x993a1cb166e9d40bebab02b2,\n            limb2: 0x1deb16166d48118b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5be18af9475ec81c90435ea3,\n            limb1: 0x572d85787941ccf2a06e8a85,\n            limb2: 0x1d266e4c2bbec23d,\n        },\n        r0a1: u288 {\n            limb0: 0x9abb04ade2ec32d45ad1e12e,\n            limb1: 0x49001b1fe108f35c59463a58,\n            limb2: 0x8d9758e803867dc,\n        },\n        r1a0: u288 {\n            limb0: 0x6a6fc3406f463fab5c090723,\n            limb1: 0xa5448526ae4526bffd1b66f9,\n            limb2: 0x1f2fd6943b4af50c,\n        },\n        r1a1: u288 {\n            limb0: 0xdefebeb5f133576a36ff1ec7,\n            limb1: 0x3ac5b194dc32605f842a4ee4,\n            limb2: 0x14dac2b182561bf1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb3f4a06dec84c0542fc584f3,\n            limb1: 0x17dd8ec2b5040175db54f522,\n            limb2: 0x1798d49900134630,\n        },\n        r0a1: u288 {\n            limb0: 0x5804e0e6f05b2d114f8fc628,\n            limb1: 0xcd413fa41667528622a63385,\n            limb2: 0x1b2f6ee6c09efee2,\n        },\n        r1a0: u288 {\n            limb0: 0x411cc5e5d5a9650eb8ab4151,\n            limb1: 0x2578d1120f3a7491374cca05,\n            limb2: 0xc7339e3f4da0dfc,\n        },\n        r1a1: u288 {\n            limb0: 0xc5be52b91b24f9781785f0b6,\n            limb1: 0x5a37f2d250cba3528432a971,\n            limb2: 0x1e671b7e0f46542a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb15bbaec50ff49d30e49f74a,\n            limb1: 0xc90a8c79fb045c5468f14151,\n            limb2: 0x25e47927e92df0e3,\n        },\n        r0a1: u288 {\n            limb0: 0x57f66909d5d40dfb8c7b4d5c,\n            limb1: 0xea5265282e2139c48c1953f2,\n            limb2: 0x2d7f5e6aff2381f6,\n        },\n        r1a0: u288 {\n            limb0: 0x2a2f573b189a3c8832231394,\n            limb1: 0x738abc15844895ffd4733587,\n            limb2: 0x20aa11739c4b9bb4,\n        },\n        r1a1: u288 {\n            limb0: 0x51695ec614f1ff4cce2f65d1,\n            limb1: 0x6765aae6cb895a2406a6dd7e,\n            limb2: 0x1126ee431c522da0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9606a8fd4c578ad51c41d233,\n            limb1: 0x2690e48ffb5f365373a1f091,\n            limb2: 0xdd50bed38cb96c5,\n        },\n        r0a1: u288 {\n            limb0: 0x63b3ed215339675ba0f1bf0e,\n            limb1: 0xb6b4e56bce1950607175b381,\n            limb2: 0x1c995e2e67d6ea05,\n        },\n        r1a0: u288 {\n            limb0: 0x4fc66decf75dc3b1b5d8f7f6,\n            limb1: 0x87158d4f7fd6a4a06ccf675a,\n            limb2: 0xcc9b78c3687df9b,\n        },\n        r1a1: u288 {\n            limb0: 0xd0606aae6c5defaa7213f850,\n            limb1: 0x389176022636fccde16f423d,\n            limb2: 0x6e06f2476a14caa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9214fc3209f1518b05fd21c6,\n            limb1: 0x9bc8ce4f56423009710770e8,\n            limb2: 0x32445cc6972799c,\n        },\n        r0a1: u288 {\n            limb0: 0x93ef401ecd9cfae3644d22e6,\n            limb1: 0xce5a741a9847a144cfaf8c96,\n            limb2: 0xf7a814d5726da4a,\n        },\n        r1a0: u288 {\n            limb0: 0xd19264d986f163b133a91c0c,\n            limb1: 0x529dc5ce4b193c0f672c6a32,\n            limb2: 0x2e9a118959353374,\n        },\n        r1a1: u288 {\n            limb0: 0x3d97d6e8f45072cc9e85e412,\n            limb1: 0x4dafecb04c3bb23c374f0486,\n            limb2: 0xa174dd4ac8ee628,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb6c5442fe553f87d4f922a6d,\n            limb1: 0xecb5da9f4f147b627dcdd817,\n            limb2: 0x265099b47c79df0,\n        },\n        r0a1: u288 {\n            limb0: 0x44d6aa0608f80fd2926679d1,\n            limb1: 0xb0985b03442413e8c592e084,\n            limb2: 0x2a27582793f6ec08,\n        },\n        r1a0: u288 {\n            limb0: 0x9cb8bba4d80765686c460fb9,\n            limb1: 0xca96945fb24c35d97e414e79,\n            limb2: 0x2d579095df0481ae,\n        },\n        r1a1: u288 {\n            limb0: 0x3cbb12a18adf878065bef682,\n            limb1: 0xa80055f23c8cf9db20621287,\n            limb2: 0x23166dcd4d1d60b8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x98d8b0c4adcf27bceb305c2c,\n            limb1: 0x859afa9c7668ed6152d8cba3,\n            limb2: 0x29e7694f46e3a272,\n        },\n        r0a1: u288 {\n            limb0: 0x1d970845365594307ba97556,\n            limb1: 0xd002d93ad793e154afe5b49b,\n            limb2: 0x12ca77d3fb8eee63,\n        },\n        r1a0: u288 {\n            limb0: 0x9f2934faefb8268e20d0e337,\n            limb1: 0xbc4b5e1ec056881319f08766,\n            limb2: 0x2e103461759a9ee4,\n        },\n        r1a1: u288 {\n            limb0: 0x7adc6cb87d6b43000e2466b6,\n            limb1: 0x65e5cefa42b25a7ee8925fa6,\n            limb2: 0x2560115898d7362a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3e32a97160ba590f8477262a,\n            limb1: 0x58f608cc4f024f332af3dc84,\n            limb2: 0x2ea79ee82a69dca1,\n        },\n        r0a1: u288 {\n            limb0: 0x769cbde6b95b9539f653a482,\n            limb1: 0x8a97f58029c72cd2e8bd157b,\n            limb2: 0x231881d71d090c10,\n        },\n        r1a0: u288 {\n            limb0: 0x96ee714152f58446623381bc,\n            limb1: 0x3420b725a86b137722463ae9,\n            limb2: 0x1a1196cb42508616,\n        },\n        r1a1: u288 {\n            limb0: 0xaa1685e2b271783a5ca3032b,\n            limb1: 0xaaaefd9edd79d87a225f1981,\n            limb2: 0x1bdcf987a5b8df95,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x64d864643668392c0e357cc4,\n            limb1: 0x4c9bf66853f1b287015ab84c,\n            limb2: 0x2f5f1b92ad7ee4d4,\n        },\n        r0a1: u288 {\n            limb0: 0xdc33c8da5c575eef6987a0e1,\n            limb1: 0x51cc07c7ef28e1b8d934bc32,\n            limb2: 0x2358d94a17ec2a44,\n        },\n        r1a0: u288 {\n            limb0: 0xf659845b829bbba363a2497b,\n            limb1: 0x440f348e4e7bed1fb1eb47b2,\n            limb2: 0x1ad0eaab0fb0bdab,\n        },\n        r1a1: u288 {\n            limb0: 0x1944bb6901a1af6ea9afa6fc,\n            limb1: 0x132319df135dedddf5baae67,\n            limb2: 0x52598294643a4aa,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x76fd94c5e6f17fa6741bd7de,\n            limb1: 0xc2e0831024f67d21013e0bdd,\n            limb2: 0x21e2af6a43119665,\n        },\n        r0a1: u288 {\n            limb0: 0xad290eab38c64c0d8b13879b,\n            limb1: 0xdd67f881be32b09d9a6c76a0,\n            limb2: 0x8000712ce0392f2,\n        },\n        r1a0: u288 {\n            limb0: 0xd30a46f4ba2dee3c7ace0a37,\n            limb1: 0x3914314f4ec56ff61e2c29e,\n            limb2: 0x22ae1ba6cd84d822,\n        },\n        r1a1: u288 {\n            limb0: 0x5d888a78f6dfce9e7544f142,\n            limb1: 0x9439156de974d3fb6d6bda6e,\n            limb2: 0x106c8f9a27d41a4f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xccc51c0b8c2b880bedb67e69,\n            limb1: 0xe9f784ec67907a367b707a68,\n            limb2: 0x1e35ff4c250d3874,\n        },\n        r0a1: u288 {\n            limb0: 0xacd642ea141735c86a2632fd,\n            limb1: 0x96f30bd849416ec9c2ba51d3,\n            limb2: 0x5f80ff0bb5c3d3a,\n        },\n        r1a0: u288 {\n            limb0: 0xdae6620b2dea1022c6b469d,\n            limb1: 0x2dc227e830c6a53a0a25de16,\n            limb2: 0x26419eb1ffc2ecc,\n        },\n        r1a1: u288 {\n            limb0: 0x2a5f072722aa48f17e4e62e8,\n            limb1: 0x5e2d84dc0619f32bf61069ea,\n            limb2: 0x2a9c754f2c69c22f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2f21e0778a693efad56332f1,\n            limb1: 0x5e0c280a34256b55cee88c6f,\n            limb2: 0x193d0a513d46a271,\n        },\n        r0a1: u288 {\n            limb0: 0xbd7e454376dd0af2d423917b,\n            limb1: 0x360968bd4949aebffdb38b61,\n            limb2: 0x272c13f48382cde5,\n        },\n        r1a0: u288 {\n            limb0: 0xef13637247749cd7ed5af935,\n            limb1: 0xa75937c16210e74805454829,\n            limb2: 0x20c95f5b97f7c964,\n        },\n        r1a1: u288 {\n            limb0: 0xd45ec00ea7d9b50619a68b06,\n            limb1: 0xeceac81ee86a4441c708de28,\n            limb2: 0x1171c3953d8cc236,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x92c09e4796207b802168341b,\n            limb1: 0xd2d9d6acffd7829066cc49ce,\n            limb2: 0xc89c2d0a7b2c81e,\n        },\n        r0a1: u288 {\n            limb0: 0x47e3c1cf6cdb6f3efe778c7f,\n            limb1: 0x66b347099b6436794cf062eb,\n            limb2: 0x18b4ccc64ae0a857,\n        },\n        r1a0: u288 {\n            limb0: 0x7d5793606a73b2740c71484a,\n            limb1: 0xa0070135ca2dc571b28e3c9c,\n            limb2: 0x1bc03576e04b94cf,\n        },\n        r1a1: u288 {\n            limb0: 0x1ba85b29875e638c10f16c99,\n            limb1: 0x158f2f2acc3c2300bb9f9225,\n            limb2: 0x42d8a8c36ea97c6,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa8acc4cfbba1bf079026d2eb,\n            limb1: 0x857c16b222c18dee6e550f0d,\n            limb2: 0x485868d6e02d3da,\n        },\n        r0a1: u288 {\n            limb0: 0xf9277c3cd01668e151c989d1,\n            limb1: 0x96acc5c1180c14277e7e37ff,\n            limb2: 0x1cc26eeaa7bef1e8,\n        },\n        r1a0: u288 {\n            limb0: 0x8df631d1435e16921239d61c,\n            limb1: 0xb6a0bfe28ec3ad068221088e,\n            limb2: 0x1006ca3de092710c,\n        },\n        r1a1: u288 {\n            limb0: 0x72e0bfa73d019b269033979b,\n            limb1: 0xfa12478f48ea99607baf21ca,\n            limb2: 0x2813a5311545749,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9440ad13408319cecb07087b,\n            limb1: 0x537afc0c0cfe8ff761c24e08,\n            limb2: 0x48e4ac10081048d,\n        },\n        r0a1: u288 {\n            limb0: 0xa37fb82b03a2c0bb2aa50c4f,\n            limb1: 0xd3797f05c8fb84f6b630dfb,\n            limb2: 0x2dffde2d6c7e43ff,\n        },\n        r1a0: u288 {\n            limb0: 0xc55d2eb1ea953275e780e65b,\n            limb1: 0xe141cf680cab57483c02e4c7,\n            limb2: 0x1b71395ce5ce20ae,\n        },\n        r1a1: u288 {\n            limb0: 0xe4fab521f1212a1d301065de,\n            limb1: 0x4f8d31c78df3dbe4ab721ef2,\n            limb2: 0x2828f21554706a0e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x8cefc2f2af2a3082b790784e,\n            limb1: 0x97ac13b37c6fbfc736a3d456,\n            limb2: 0x683b1cdffd60acd,\n        },\n        r0a1: u288 {\n            limb0: 0xa266a8188a8c933dcffe2d02,\n            limb1: 0x18d3934c1838d7bce81b2eeb,\n            limb2: 0x206ac5cdda42377,\n        },\n        r1a0: u288 {\n            limb0: 0x90332652437f6e177dc3b28c,\n            limb1: 0x75bd8199433d607735414ee8,\n            limb2: 0x29d6842d8298cf7e,\n        },\n        r1a1: u288 {\n            limb0: 0xadedf46d8ea11932db0018e1,\n            limb1: 0xbc7239ae9d1453258037befb,\n            limb2: 0x22e7ebdd72c6f7a1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfe5ce198530e6e5e428ed7b2,\n            limb1: 0xf5ddb0194d7a5e2c8ae0e004,\n            limb2: 0x1ff33fa41a2219b8,\n        },\n        r0a1: u288 {\n            limb0: 0xd40273c44e451086853d5c0c,\n            limb1: 0x8196328a49b3e57f1aa97f3a,\n            limb2: 0xa65be2b86cb6cc2,\n        },\n        r1a0: u288 {\n            limb0: 0xee7e8e5603eb2987c03aad20,\n            limb1: 0x8d1836c2944f14d62304e3ce,\n            limb2: 0x23aec3995836284f,\n        },\n        r1a1: u288 {\n            limb0: 0x44f63dede0bab74447432434,\n            limb1: 0xbc242707481e3421608e7484,\n            limb2: 0x12cbfde9472f6129,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x66e6518a789e643f2fe0adf8,\n            limb1: 0x9e041475138e52b7d6ba273f,\n            limb2: 0x29738d09b3c3aa2d,\n        },\n        r0a1: u288 {\n            limb0: 0xd1953d4aaaccbb14a05ce666,\n            limb1: 0xb6d92c0103e2eb840c035099,\n            limb2: 0x163fbc494cd5fbd7,\n        },\n        r1a0: u288 {\n            limb0: 0x8326000670635a008221d45c,\n            limb1: 0xc68e2c1fde55cf6dea31ebf2,\n            limb2: 0x112136de2bcb8814,\n        },\n        r1a1: u288 {\n            limb0: 0xd91f410c6e215358b08e3761,\n            limb1: 0x562ad42a0ab380ced5be614e,\n            limb2: 0x2e6307ece4da28b7,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x348e15357d9299e582033136,\n            limb1: 0x53578c46b15abb39da35a56e,\n            limb2: 0x1043b711f86bb33f,\n        },\n        r0a1: u288 {\n            limb0: 0x9fa230a629b75217f0518e7c,\n            limb1: 0x77012a4bb8751322a406024d,\n            limb2: 0x121e2d845d972695,\n        },\n        r1a0: u288 {\n            limb0: 0x5600f2d51f21d9dfac35eb10,\n            limb1: 0x6fde61f876fb76611fb86c1a,\n            limb2: 0x2bf4fbaf5bd0d0df,\n        },\n        r1a1: u288 {\n            limb0: 0xd732aa0b6161aaffdae95324,\n            limb1: 0xb3c4f8c3770402d245692464,\n            limb2: 0x2a0f1740a293e6f0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc119366343bb90cfbb6b9f59,\n            limb1: 0xf0f4051e5e2ec1d270a24519,\n            limb2: 0x20641b4fd703bcc3,\n        },\n        r0a1: u288 {\n            limb0: 0x62c9da6fce0da9722dbdd4d,\n            limb1: 0x9a55da1b4d9e1720ef695988,\n            limb2: 0x27e055d89e9b5c22,\n        },\n        r1a0: u288 {\n            limb0: 0x60b613aa5ffe7a0b312af762,\n            limb1: 0xb6e419e3349fcd626b912362,\n            limb2: 0x1e94385fbd0dabc1,\n        },\n        r1a1: u288 {\n            limb0: 0x285da06db745c401161f5dbd,\n            limb1: 0x1bac165aff4fc8fb01e05c73,\n            limb2: 0xaf6d157ef87e3e8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa9e2efa41aaa98ab59728940,\n            limb1: 0x163c0425f66ce72daef2f53e,\n            limb2: 0x2feaf1b1770aa7d8,\n        },\n        r0a1: u288 {\n            limb0: 0x3bb7afd3c0a79b6ac2c4c063,\n            limb1: 0xee5cb42e8b2bc999e312e032,\n            limb2: 0x1af2071ae77151c3,\n        },\n        r1a0: u288 {\n            limb0: 0x1cef1c0d8956d7ceb2b162e7,\n            limb1: 0x202b4af9e51edfc81a943ded,\n            limb2: 0xc9e943ffbdcfdcb,\n        },\n        r1a1: u288 {\n            limb0: 0xe18b1b34798b0a18d5ad43dd,\n            limb1: 0x55e8237731941007099af6b8,\n            limb2: 0x1472c0290db54042,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5d89d98abb1e14ee40991eb8,\n            limb1: 0xd25c670d7cc0d9e15998c064,\n            limb2: 0x2b88eb10af0a7936,\n        },\n        r0a1: u288 {\n            limb0: 0xb0dbbad1655c7012f1443855,\n            limb1: 0xba3c8a0898f276368f7de179,\n            limb2: 0x13f1970118681271,\n        },\n        r1a0: u288 {\n            limb0: 0xd5229b51e340a01bdf1597bb,\n            limb1: 0xd083b17bb74a2d66e3fb7703,\n            limb2: 0x1fb6b2e9b110b510,\n        },\n        r1a1: u288 {\n            limb0: 0x7d5334985a52a20b9c42dba2,\n            limb1: 0x43ce2272331ede659a1ff0ce,\n            limb2: 0xc641156a71d87fd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb4c7963e0d1dc082de0725e,\n            limb1: 0x375a7a3d765918de24804223,\n            limb2: 0xf177b77b031596d,\n        },\n        r0a1: u288 {\n            limb0: 0x87a7b9c5f10500b0b40d7a1e,\n            limb1: 0x6f234d1dc7f1394b55858810,\n            limb2: 0x26288146660a3914,\n        },\n        r1a0: u288 {\n            limb0: 0xa6308c89cebe40447abf4a9a,\n            limb1: 0x657f0fdda13b1f8ee314c22,\n            limb2: 0x1701aabc250a9cc7,\n        },\n        r1a1: u288 {\n            limb0: 0x9db9bf660dc77cbe2788a755,\n            limb1: 0xbdf9c1c15a4bd502a119fb98,\n            limb2: 0x14b4de3d26bd66e1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x53c49c62ca96007e14435295,\n            limb1: 0x85aeb885e4123ca8d3232fdf,\n            limb2: 0x750017ce108abf3,\n        },\n        r0a1: u288 {\n            limb0: 0xba6bf3e25d370182e4821239,\n            limb1: 0x39de83bf370bd2ba116e8405,\n            limb2: 0x2b8417a72ba6d940,\n        },\n        r1a0: u288 {\n            limb0: 0xa922f50550d349849b14307b,\n            limb1: 0x569766b6feca6143a5ddde9d,\n            limb2: 0x2c3c6765b25a01d,\n        },\n        r1a1: u288 {\n            limb0: 0x6016011bdc3b506563b0f117,\n            limb1: 0xbab4932beab93dde9b5b8a5c,\n            limb2: 0x1bf3f698de0ace60,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7754330fba8d9edd1fd085f1,\n            limb1: 0x540da38cbcf9967f1643fa83,\n            limb2: 0x10041a58b44d7033,\n        },\n        r0a1: u288 {\n            limb0: 0xe61863c0b32f056dd86bff8f,\n            limb1: 0x6f0906f4c8ec2c0bb1f2f8ac,\n            limb2: 0x12c8eb56d7345658,\n        },\n        r1a0: u288 {\n            limb0: 0x83db9f45eed4202ecff4be38,\n            limb1: 0x7d4fb28ab7beedbd993663a9,\n            limb2: 0x140bcf4fc3e627d5,\n        },\n        r1a1: u288 {\n            limb0: 0x24bf73a83ec1526eba35c3a1,\n            limb1: 0x49f611dd3e7158df3d710450,\n            limb2: 0x46bfbe767839086,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3a005fa4b568804c37599fab,\n            limb1: 0x1dbc187d120e8654c667d416,\n            limb2: 0x26f1a3ff5dedd43c,\n        },\n        r0a1: u288 {\n            limb0: 0x9e3bbd13c68b59154325f840,\n            limb1: 0x127142f3a8f8d48ac0ba0e8,\n            limb2: 0x22114246f18dc553,\n        },\n        r1a0: u288 {\n            limb0: 0xb0c427f7dc2ad19fae159a8d,\n            limb1: 0x43cdfbe4e4688353690b625d,\n            limb2: 0x11de9941593cdedf,\n        },\n        r1a1: u288 {\n            limb0: 0x2bc192a0466c146b0f1a63c5,\n            limb1: 0xa06ae4a5aeb9c79ff9605a68,\n            limb2: 0x1c72897ef64ed3be,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb9f05ffda3ee208f990ff3a8,\n            limb1: 0x6201d08440b28ea672b9ea93,\n            limb2: 0x1ed60e5a5e778b42,\n        },\n        r0a1: u288 {\n            limb0: 0x8e8468b937854c9c00582d36,\n            limb1: 0x7888fa8b2850a0c555adb743,\n            limb2: 0xd1342bd01402f29,\n        },\n        r1a0: u288 {\n            limb0: 0xf5c4c66a974d45ec754b3873,\n            limb1: 0x34322544ed59f01c835dd28b,\n            limb2: 0x10fe4487a871a419,\n        },\n        r1a1: u288 {\n            limb0: 0xedf4af2df7c13d6340069716,\n            limb1: 0x8592eea593ece446e8b2c83b,\n            limb2: 0x12f9280ce8248724,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2bea0074bb7f17895214c7d5,\n            limb1: 0xbe6933bf702502fb784d01af,\n            limb2: 0x6ee13677c0ad1fb,\n        },\n        r0a1: u288 {\n            limb0: 0x7ba822d78fbb7499ec4a0bd5,\n            limb1: 0xfd0ef51891aaf641c59ddff6,\n            limb2: 0x7ea3e5374ce185e,\n        },\n        r1a0: u288 {\n            limb0: 0xfa9c6c209da4cec9ff566b61,\n            limb1: 0xf81313708ccdb696e83d4f2f,\n            limb2: 0x1a188c142bfa4eea,\n        },\n        r1a1: u288 {\n            limb0: 0xa2753b4de51c3790b55b4081,\n            limb1: 0x770a5d6993f8efcfbef79cfe,\n            limb2: 0xe66a0c0eb7f55d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe67f72c6d45f1bb04403139f,\n            limb1: 0x9233e2a95d3f3c3ff2f7e5b8,\n            limb2: 0x1f931e8e4343b028,\n        },\n        r0a1: u288 {\n            limb0: 0x20ef53907af71803ce3ca5ca,\n            limb1: 0xd99b6637ee9c73150b503ea4,\n            limb2: 0x1c9759def8a98ea8,\n        },\n        r1a0: u288 {\n            limb0: 0xa0a3b24c9089d224822fad53,\n            limb1: 0xdfa2081342a7a895062f3e50,\n            limb2: 0x185e8cf6b3e494e6,\n        },\n        r1a1: u288 {\n            limb0: 0x8752a12394b29d0ba799e476,\n            limb1: 0x1493421da067a42e7f3d0f8f,\n            limb2: 0x67e7fa3e3035edf,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x800f37efa40c0fe115a48c7,\n            limb1: 0x4ee2180ba804ad1127a1032c,\n            limb2: 0x8d02f7a21511b4d,\n        },\n        r0a1: u288 {\n            limb0: 0x7732462537e4c83fbdf9e250,\n            limb1: 0xf043e87195d99c09dfd19257,\n            limb2: 0x13a5f2a36b471d20,\n        },\n        r1a0: u288 {\n            limb0: 0x90a69629898539061531a3d4,\n            limb1: 0xfb1bfbd5aafaa2bca4a7d88a,\n            limb2: 0x4c80e61af9357b9,\n        },\n        r1a1: u288 {\n            limb0: 0xa6bd67fe9bcb18eef3d498f5,\n            limb1: 0xc9d9f001d0a22a8561f2a8f6,\n            limb2: 0x2fc5dbc2e7f7bae1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x6d6138c95464e5e774ae7ba0,\n            limb1: 0xe6ca73a5498e4ccd4bb68fc7,\n            limb2: 0x15bf8aa8ed1beff6,\n        },\n        r0a1: u288 {\n            limb0: 0xabd7c55a134ed405b4966d3c,\n            limb1: 0xe69dd725ccc4f9dd537fe558,\n            limb2: 0x2df4a03e2588a8f1,\n        },\n        r1a0: u288 {\n            limb0: 0x7cf42890de0355ffc2480d46,\n            limb1: 0xe33c2ad9627bcb4b028c2358,\n            limb2: 0x2a18767b40de20bd,\n        },\n        r1a1: u288 {\n            limb0: 0x79737d4a87fab560f3d811c6,\n            limb1: 0xa88fee5629b91721f2ccdcf7,\n            limb2: 0x2b51c831d3404d5e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x997c6c49f6cfe7b57ed6a795,\n            limb1: 0x83f751adb017f8fe16cb1332,\n            limb2: 0x421893391c31a08,\n        },\n        r0a1: u288 {\n            limb0: 0x8881c1e22322290da9e0adda,\n            limb1: 0xd279d9d315f84c72d3d7ca8d,\n            limb2: 0x161e57b3c2bd69ca,\n        },\n        r1a0: u288 {\n            limb0: 0x2a00b9a30f468603c234683d,\n            limb1: 0x3335abc142f64cb623384c71,\n            limb2: 0x247f21d5ac0ad015,\n        },\n        r1a1: u288 {\n            limb0: 0x791eb4f0258d141246133ad8,\n            limb1: 0x2e227e5de8c27b9270bf3679,\n            limb2: 0x252ff1bf56426314,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x9812f6145cf7e949fa207f20,\n            limb1: 0x4061c36b08d5bcd408b14f19,\n            limb2: 0x8332e08b2eb51ed,\n        },\n        r0a1: u288 {\n            limb0: 0xa4a7ae8f65ba180c523cb33,\n            limb1: 0xb71fabbdc78b1128712d32a5,\n            limb2: 0x2acd1052fd0fefa7,\n        },\n        r1a0: u288 {\n            limb0: 0x6ea5598e221f25bf27efc618,\n            limb1: 0xa2c2521a6dd8f306f86d6db7,\n            limb2: 0x13af144288655944,\n        },\n        r1a1: u288 {\n            limb0: 0xea469c4b390716a6810fff5d,\n            limb1: 0xf8052694d0fdd3f40b596c20,\n            limb2: 0x24d0ea6c86e48c5c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2e39be614d904bafea58a8cd,\n            limb1: 0xf53f0a6a20a1f1783b0ea2d0,\n            limb2: 0x99c451b7bb726d7,\n        },\n        r0a1: u288 {\n            limb0: 0x28ec54a4ca8da838800c573d,\n            limb1: 0xb78365fa47b5e192307b7b87,\n            limb2: 0x2df87aa88e012fec,\n        },\n        r1a0: u288 {\n            limb0: 0xfb7022881c6a6fdfb18de4aa,\n            limb1: 0xb9bd30f0e93c5b93ad333bab,\n            limb2: 0x1dd20cbccdeb9924,\n        },\n        r1a1: u288 {\n            limb0: 0x16d8dfdf790a6be16a0e55ba,\n            limb1: 0x90ab884395509b9a264472d4,\n            limb2: 0xeaec571657b6e9d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xae592cfc7284eace4317b38f,\n            limb1: 0x41aa2fd0f201ea2488aae4cd,\n            limb2: 0x2d7c9fa788a19387,\n        },\n        r0a1: u288 {\n            limb0: 0x30fade520b7c5ad891fcd5e4,\n            limb1: 0x726c4b2c0ab14b4824d6eb51,\n            limb2: 0x2cbeb397ae3adbaf,\n        },\n        r1a0: u288 {\n            limb0: 0x7754c7f9eb971c83580a6802,\n            limb1: 0xc0501999d5fbbfecb742e62a,\n            limb2: 0x2886be745478c5eb,\n        },\n        r1a1: u288 {\n            limb0: 0xbbd01f31b4c7270f1874d615,\n            limb1: 0x2860e90555449cc5557a6eeb,\n            limb2: 0xaa8bcd043216ae0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1475f22439f945fe4f1866a4,\n            limb1: 0x6093e054af08253105508201,\n            limb2: 0x238fbceae0a52193,\n        },\n        r0a1: u288 {\n            limb0: 0x37b706045af36f96f3de74bf,\n            limb1: 0x42d8a96440085e5a0602ffc8,\n            limb2: 0x301cf8ab791f87ec,\n        },\n        r1a0: u288 {\n            limb0: 0x7dafe229ff600244975059d9,\n            limb1: 0xc77f2c778fbc1edacf71ea1b,\n            limb2: 0xfa04355fa70376b,\n        },\n        r1a1: u288 {\n            limb0: 0x4b111cf6a84eadb0ea9697a4,\n            limb1: 0x485179b0613471ed941c408f,\n            limb2: 0x1c04e5e709a3ee73,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xce78fc6505db036c10fac771,\n            limb1: 0x61f8c0bc7f60ad6415d5e419,\n            limb2: 0x59009c5cf9ea663,\n        },\n        r0a1: u288 {\n            limb0: 0xb3b3f697fc34d64ba053b914,\n            limb1: 0x317af5815ce5bfffc5a6bc97,\n            limb2: 0x23f97fee4deda847,\n        },\n        r1a0: u288 {\n            limb0: 0xf559e09cf7a02674ac2fa642,\n            limb1: 0x4fa7548b79cdd054e203689c,\n            limb2: 0x2173b379d546fb47,\n        },\n        r1a1: u288 {\n            limb0: 0x758feb5b51caccff9da0f78f,\n            limb1: 0xd7f37a1008233b74c4894f55,\n            limb2: 0x917c640b4b9627e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x71a5b7371acb1f8a8e863a0f,\n            limb1: 0xe160f090c89db8037b7b3270,\n            limb2: 0x5dc19d479a9e0a1,\n        },\n        r0a1: u288 {\n            limb0: 0x268283362f9eaa2b1bfc7d37,\n            limb1: 0x41dd0a500b275c341fadfdd1,\n            limb2: 0x58dc210e5db63b,\n        },\n        r1a0: u288 {\n            limb0: 0x8c69e7aaedcd6f6d9bbb6eca,\n            limb1: 0x9d2c3abb7be1d3e18bbbeea,\n            limb2: 0x17821916435fc513,\n        },\n        r1a1: u288 {\n            limb0: 0x12e15214b9ff3b0a87d02275,\n            limb1: 0xec528ff80882d2613d62f7af,\n            limb2: 0x21d7cb7981a2c8ee,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72548e0d946b796842cfecd8,\n            limb1: 0x78b54b355e3c26476b0fab82,\n            limb2: 0x2dc9f32c90b6ba31,\n        },\n        r0a1: u288 {\n            limb0: 0xa943be83a6fc90414320753b,\n            limb1: 0xd708fde97241095833ce5a08,\n            limb2: 0x142111e6a73d2e82,\n        },\n        r1a0: u288 {\n            limb0: 0xc79e8d5465ec5f28781e30a2,\n            limb1: 0x697fb9430b9ad050ced6cce,\n            limb2: 0x1a9d647149842c53,\n        },\n        r1a1: u288 {\n            limb0: 0x9bab496952559362586725cd,\n            limb1: 0xbe78e5a416d9665be64806de,\n            limb2: 0x147b550afb4b8b84,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x5a5b43c79c51930d0132f9e5,\n            limb1: 0x84940e72e7f85b7410ad5959,\n            limb2: 0x29ea8276c9dd2922,\n        },\n        r0a1: u288 {\n            limb0: 0x564fad8093496ec0264503f9,\n            limb1: 0x8087865cbf262c46af83e11,\n            limb2: 0xfb4782ff8819bc3,\n        },\n        r1a0: u288 {\n            limb0: 0xa14e0c681a92583584de7966,\n            limb1: 0x9ee7630f508ee0abdbbf52de,\n            limb2: 0x23502d641c894fe4,\n        },\n        r1a1: u288 {\n            limb0: 0x45697b4bda8746aaefc84de6,\n            limb1: 0xbbbb95bac5f667348485280b,\n            limb2: 0x14d11f2f3b102ea0,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1422e11013fe6cdd7f843391,\n            limb1: 0xfb96092ab69fc530e27d8d8e,\n            limb2: 0xe39e04564fedd0,\n        },\n        r0a1: u288 {\n            limb0: 0xbd4e81e3b4db192e11192788,\n            limb1: 0x805257d3c2bdbc344a15ce0d,\n            limb2: 0x10ddd4f47445106b,\n        },\n        r1a0: u288 {\n            limb0: 0x87ab7f750b693ec75bce04e1,\n            limb1: 0x128ba38ebed26d74d26e4d69,\n            limb2: 0x2f1d22a64c983ab8,\n        },\n        r1a1: u288 {\n            limb0: 0x74207c17f5c8335183649f77,\n            limb1: 0x7144cd3520ac2e1be3204133,\n            limb2: 0xb38d0645ab3499d,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xfd4ccd25ca5305b5a0c8f08c,\n            limb1: 0x5c9ab754a0f97eba493b22cf,\n            limb2: 0x1ee3d126af282430,\n        },\n        r0a1: u288 {\n            limb0: 0x1650604310ad29b1ebe37a1c,\n            limb1: 0xb8d6890fa276c5c89d0b87f6,\n            limb2: 0x16187f2f98969294,\n        },\n        r1a0: u288 {\n            limb0: 0x9adb39a172e4b1392fe50508,\n            limb1: 0x32a5696a6e93a3cc6a5ad2ef,\n            limb2: 0x3010f0bed371d9ab,\n        },\n        r1a1: u288 {\n            limb0: 0x2178f739b0201a2f690222fb,\n            limb1: 0xb1962d2f42010bff9c0acd0d,\n            limb2: 0x12c651f9cff8bd2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x49173a889c697b0ab07f35bc,\n            limb1: 0xdcffb65f4b4c21ced6b623af,\n            limb2: 0x1366d12ee6022f7b,\n        },\n        r0a1: u288 {\n            limb0: 0x285fdce362f7a79b89c49b5c,\n            limb1: 0xae9358c8eaf26e2fed7353f5,\n            limb2: 0x21c91fefaf522b5f,\n        },\n        r1a0: u288 {\n            limb0: 0x748798f96436e3b18c64964a,\n            limb1: 0xfc3bb221103d3966d0510599,\n            limb2: 0x167859ae2ebc5e27,\n        },\n        r1a1: u288 {\n            limb0: 0xe3b55b05bb30e23fa7eba05b,\n            limb1: 0xa5fc8b7f7bc6abe91c90ddd5,\n            limb2: 0xe0da83c6cdebb5a,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x30a4abff5957209783681bfb,\n            limb1: 0x82d868d5ca421e4f1a0daf79,\n            limb2: 0x1ba96ef98093d510,\n        },\n        r0a1: u288 {\n            limb0: 0xd9132c7f206a6c036a39e432,\n            limb1: 0x8a2dfb94aba29a87046110b8,\n            limb2: 0x1fad2fd5e5e37395,\n        },\n        r1a0: u288 {\n            limb0: 0x76b136dc82b82e411b2c44f6,\n            limb1: 0xe405f12052823a54abb9ea95,\n            limb2: 0xf125ba508c26ddc,\n        },\n        r1a1: u288 {\n            limb0: 0x1bae07f5f0cc48e5f7aac169,\n            limb1: 0x47d1288d741496a960e1a979,\n            limb2: 0xa0911f6cc5eb84e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xde53fa0e516e8521f9fd2218,\n            limb1: 0xa8695dc7f4d9dc5cb20c5569,\n            limb2: 0x26ae4f9889fdc9e9,\n        },\n        r0a1: u288 {\n            limb0: 0x8ec99c1251e3701a92712d94,\n            limb1: 0xd7a4e59134a81563dde18e00,\n            limb2: 0x12abf32b5f5fd295,\n        },\n        r1a0: u288 {\n            limb0: 0x3f40f6f544941079f98bbca1,\n            limb1: 0x784e4af205d7ce81736a86e,\n            limb2: 0x262955c2400f2cd9,\n        },\n        r1a1: u288 {\n            limb0: 0xad09121aa67be24e2a15e358,\n            limb1: 0xf372de521bb4645145104e80,\n            limb2: 0x204386f0cc534dc1,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb1a701becfac8ab4911bd3d5,\n            limb1: 0x31059867e401e3c097e71713,\n            limb2: 0x11f83ad520dbe146,\n        },\n        r0a1: u288 {\n            limb0: 0x89c187f73b3df55369b5bf87,\n            limb1: 0x55cbff5d865ed9eee13a53e7,\n            limb2: 0xdc789be8b591928,\n        },\n        r1a0: u288 {\n            limb0: 0x8fa833ccae2dee5a104910ab,\n            limb1: 0x4f6d27d1caf11f4efaba2d99,\n            limb2: 0x19a3a2baf9e9c654,\n        },\n        r1a1: u288 {\n            limb0: 0x2cba57223327aaa86463ab7b,\n            limb1: 0x8c542ad2a8acedbae2dbcaef,\n            limb2: 0xc6cc1c26b074f93,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2e7b3a5a35456f42e87968e6,\n            limb1: 0xb4303f5093c3a460674a2fcd,\n            limb2: 0x2b5331f03b8fa15f,\n        },\n        r0a1: u288 {\n            limb0: 0x7cea371d64d8bd0fc5b9427e,\n            limb1: 0x76208e15fc175e352c274fbe,\n            limb2: 0x5ceb46647d41234,\n        },\n        r1a0: u288 {\n            limb0: 0x6cdac06bfcf041a30435a560,\n            limb1: 0x15a7ab7ed1df6d7ed12616a6,\n            limb2: 0x2520b0f462ad4724,\n        },\n        r1a1: u288 {\n            limb0: 0xe8b65c5fff04e6a19310802f,\n            limb1: 0xc96324a563d5dab3cd304c64,\n            limb2: 0x230de25606159b1e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x7502eb9d6e34d48c8d6bd674,\n            limb1: 0x75a76de3d24ae67c74c25ab9,\n            limb2: 0x269c5fbce67ef3f7,\n        },\n        r0a1: u288 {\n            limb0: 0x18b64b67a0130324a775a54e,\n            limb1: 0x510f1940ffe32b65eb777dbb,\n            limb2: 0x1c67e2246d3e8b0e,\n        },\n        r1a0: u288 {\n            limb0: 0x751b9c3f410b7b8cc2554028,\n            limb1: 0xaa415e864cedc338dd4f93c5,\n            limb2: 0x15b0cb160799f8b5,\n        },\n        r1a1: u288 {\n            limb0: 0x431baa5aff5efafb3deb786d,\n            limb1: 0x818f7f0c0cf08373d8497c20,\n            limb2: 0x150266ce897a149b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xb2236e5462d1e11842039bb5,\n            limb1: 0x8d746dd0bb8bb2a455d505c1,\n            limb2: 0x2fd3f4a905e027ce,\n        },\n        r0a1: u288 {\n            limb0: 0x3d6d9836d71ddf8e3b741b09,\n            limb1: 0x443f16e368feb4cb20a5a1ab,\n            limb2: 0xb5f19dda13bdfad,\n        },\n        r1a0: u288 {\n            limb0: 0x4e5612c2b64a1045a590a938,\n            limb1: 0xbca215d075ce5769db2a29d7,\n            limb2: 0x161e651ebdfb5065,\n        },\n        r1a1: u288 {\n            limb0: 0xc02a55b6685351f24e4bf9c7,\n            limb1: 0x4134240119050f22bc4991c8,\n            limb2: 0x300bd9f8d76bbc11,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe9296a3a3aed4c4143d2e0ba,\n            limb1: 0x7de973514b499b2da739b3e6,\n            limb2: 0x1b4b807986fcdee0,\n        },\n        r0a1: u288 {\n            limb0: 0xb9295fecce961afe0c5e6dad,\n            limb1: 0xc4e30c322bcae6d526c4de95,\n            limb2: 0x1fee592f513ed6b2,\n        },\n        r1a0: u288 {\n            limb0: 0x7245f5e5e803d0d448fafe21,\n            limb1: 0xcbdc032ecb3b7a63899c53d0,\n            limb2: 0x1fde9ffc17accfc3,\n        },\n        r1a1: u288 {\n            limb0: 0x8edcc1b2fdd35c87a7814a87,\n            limb1: 0x99d54b5c2fe171c49aa9cb08,\n            limb2: 0x130ef740e416a6fe,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x37b1d9f507e01f86b93547ea,\n            limb1: 0x41ac3502f8b693b2f9ed1a29,\n            limb2: 0x12d36862936402d,\n        },\n        r0a1: u288 {\n            limb0: 0xaade7b42e239d7be07481e78,\n            limb1: 0x3f8243ee7eb4a9c3b7cbb956,\n            limb2: 0xaf29236a909acbb,\n        },\n        r1a0: u288 {\n            limb0: 0xbfa7efb7457cc99dd4b66e37,\n            limb1: 0x1aff3d917e026429380e9dc6,\n            limb2: 0x87399bf2ca178f4,\n        },\n        r1a1: u288 {\n            limb0: 0x351e9fa186b018907f3dfd58,\n            limb1: 0x7027b103c6f3030eb6f019b0,\n            limb2: 0x288a941ff1ef82c8,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x280d19be00a1fbb9ccaafb46,\n            limb1: 0x4d694832b9452e3da1f121cd,\n            limb2: 0x2a866c481e54b43e,\n        },\n        r0a1: u288 {\n            limb0: 0x94acc4d34d73a6813c99def3,\n            limb1: 0x2e9a78d89158c8144f4a163d,\n            limb2: 0x6a7ba87130777b1,\n        },\n        r1a0: u288 {\n            limb0: 0xa171b01ed37b9874fc4b2fd1,\n            limb1: 0x644415f2fadd9f5572937ff,\n            limb2: 0x188c19a6dbd348f6,\n        },\n        r1a1: u288 {\n            limb0: 0xa8b807a7d82b4ca8813e6c16,\n            limb1: 0xd36395399fea43c401b55926,\n            limb2: 0x1ebe1e6668036172,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x537ecf0916b38aeea21d4e47,\n            limb1: 0x181a00de27ba4be1b380d6c8,\n            limb2: 0x8c2fe2799316543,\n        },\n        r0a1: u288 {\n            limb0: 0xe68fff5ee73364fff3fe403b,\n            limb1: 0x7b8685c8a725ae79cfac8f99,\n            limb2: 0x7b4be349766aba4,\n        },\n        r1a0: u288 {\n            limb0: 0xdf7c93c0095545ad5e5361ea,\n            limb1: 0xce316c76191f1e7cd7d03f3,\n            limb2: 0x22ea21f18ddec947,\n        },\n        r1a1: u288 {\n            limb0: 0xa19620b4c32db68cc1c2ef0c,\n            limb1: 0xffa1e4be3bed5faba2ccbbf4,\n            limb2: 0x16fc78a64c45f518,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x2b6af476f520b4bf804415bc,\n            limb1: 0xd949ee7f9e8874698b090fca,\n            limb2: 0x34db5e5ec2180cf,\n        },\n        r0a1: u288 {\n            limb0: 0x3e06a324f038ac8abcfb28d7,\n            limb1: 0xc2e6375b7a83c0a0145f8942,\n            limb2: 0x2247e79161483763,\n        },\n        r1a0: u288 {\n            limb0: 0x708773d8ae3a13918382fb9d,\n            limb1: 0xaf83f409556e32aa85ae92bf,\n            limb2: 0x9af0a924ae43ba,\n        },\n        r1a1: u288 {\n            limb0: 0xa6fded212ff5b2ce79755af7,\n            limb1: 0x55a2adfb2699ef5de6581b21,\n            limb2: 0x2476e83cfe8daa5c,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x732b1d0e86389fae1b305692,\n            limb1: 0x5e1ed01fae18aa2d2e501b89,\n            limb2: 0x198dc823ba823f13,\n        },\n        r0a1: u288 {\n            limb0: 0x395ecb34fbf15f7b72c54317,\n            limb1: 0x19fb1bd9a5cabbf5eb248610,\n            limb2: 0xb73bf1e6f4b2b31,\n        },\n        r1a0: u288 {\n            limb0: 0x69471a9ea2a3b85c26c836d9,\n            limb1: 0xe814a8008320f1fe43f51f0a,\n            limb2: 0x2d0070077956b257,\n        },\n        r1a1: u288 {\n            limb0: 0xc2ed008982c3b3a2381a1d13,\n            limb1: 0x3aa758745a68a1c386ea1919,\n            limb2: 0x1f719f31da901ffd,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xa773ff432f3fcb587a0ba2dd,\n            limb1: 0xa72f6d2ad27b55412047c8a2,\n            limb2: 0x196c95f5075736cc,\n        },\n        r0a1: u288 {\n            limb0: 0x8d46b81c8d7815fb84f68477,\n            limb1: 0x759aa3f94e1cbaff6069a0e0,\n            limb2: 0x25349de9eb818c1b,\n        },\n        r1a0: u288 {\n            limb0: 0x7e987a2cbb6794ba7ad8226b,\n            limb1: 0x37b8b1d26e87ac1cc75bc768,\n            limb2: 0x1b6594b5683fb78c,\n        },\n        r1a1: u288 {\n            limb0: 0x6db02d761232580559059396,\n            limb1: 0x4608f90f5be37fcf1ca05d00,\n            limb2: 0x8280f225a44efb3,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x1c4759bcf7c607fe3f839d4d,\n            limb1: 0xea91f311da73327e2ed40785,\n            limb2: 0x2017052c72360f42,\n        },\n        r0a1: u288 {\n            limb0: 0x38cf8a4368c0709980199fc3,\n            limb1: 0xfc9047885996c19e84d7d4ea,\n            limb2: 0x1795549eb0b97783,\n        },\n        r1a0: u288 {\n            limb0: 0xb70f7ecfbec0eaf46845e8cc,\n            limb1: 0x9ddf274c2a9f89ea3bc4d66f,\n            limb2: 0xcc6f106abfcf377,\n        },\n        r1a1: u288 {\n            limb0: 0xf6ff11ce29186237468c2698,\n            limb1: 0x5c629ad27bb61e4826bb1313,\n            limb2: 0x2014c6623f1fb55e,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xeba6e51ec8e06f1a878b476b,\n            limb1: 0xc701590aac4f7059ebebecc7,\n            limb2: 0x178ad12f64b4cce0,\n        },\n        r0a1: u288 {\n            limb0: 0xd26c1a0c4cd1c5e42e3b29b1,\n            limb1: 0x344935f56b019eefc0ae9366,\n            limb2: 0x2ac2051a8e04afa1,\n        },\n        r1a0: u288 {\n            limb0: 0x5d6f37a0a446777c90c36deb,\n            limb1: 0x2fb002f2be492ec5d334587f,\n            limb2: 0x2300ad73e7a9475e,\n        },\n        r1a1: u288 {\n            limb0: 0x579a05a596e27b546604bf72,\n            limb1: 0x9062b97873327607c1e5fce4,\n            limb2: 0x2d3543a9b5a8d09,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xc648054e4b6134bbfd68487f,\n            limb1: 0xdf0506dad3f3d098c13a6386,\n            limb2: 0x26bebeb6f46c2e8c,\n        },\n        r0a1: u288 {\n            limb0: 0x9d0cdb28a94204776c6e6ba6,\n            limb1: 0x303f02dfe619752b1607951d,\n            limb2: 0x1127d8b17ef2c064,\n        },\n        r1a0: u288 {\n            limb0: 0xe34ca1188b8db4e4694a696c,\n            limb1: 0x243553602481d9b88ca1211,\n            limb2: 0x1f8ef034831d0132,\n        },\n        r1a1: u288 {\n            limb0: 0xe3a5dfb1785690dad89ad10c,\n            limb1: 0xd690b583ace24ba033dd23e0,\n            limb2: 0x405d0709e110c03,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xe64904238461826f7b9b6bd1,\n            limb1: 0x7eef335c29c10b073c3c8df,\n            limb2: 0x11ab7f696cecd13b,\n        },\n        r0a1: u288 {\n            limb0: 0xa4ee9a0489ebf368f8d5b7df,\n            limb1: 0xfc2fb710377d3a9b68d87438,\n            limb2: 0xbb582e949e0b05c,\n        },\n        r1a0: u288 {\n            limb0: 0x4942e63133bef00be3e86722,\n            limb1: 0x159a6773262b5a5ffe915583,\n            limb2: 0x26cb6b36d9d079a0,\n        },\n        r1a1: u288 {\n            limb0: 0x923f51c6ac50ef980fc5c63e,\n            limb1: 0x7431352b389608ee374cc6f7,\n            limb2: 0x205d7212a2bb155f,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x72cc2cef2785ce4ff4e9b7af,\n            limb1: 0x60ed5b9c207d7f31fb6234ab,\n            limb2: 0x1bb17a4bc7b643ed,\n        },\n        r0a1: u288 {\n            limb0: 0x9424eb15b502cde7927c7530,\n            limb1: 0xa0e33edbbaa9de8e9c206059,\n            limb2: 0x2b9a3a63bbf4af99,\n        },\n        r1a0: u288 {\n            limb0: 0x423811cb6386e606cf274a3c,\n            limb1: 0x8adcc0e471ecfe526f56dc39,\n            limb2: 0x9169a8660d14368,\n        },\n        r1a1: u288 {\n            limb0: 0xf616c863890c3c8e33127931,\n            limb1: 0xcc9414078a6da6989dae6b91,\n            limb2: 0x594d6a7e6b34ab2,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xd1ef4e012e4ddec967871f0c,\n            limb1: 0x73a1f0eaa41d3b58b2410cc5,\n            limb2: 0x678a431a3208d78,\n        },\n        r0a1: u288 {\n            limb0: 0x1182bff7a17bbcb072bce5d2,\n            limb1: 0xe8d0894231092859c53b6a86,\n            limb2: 0x2a8df47f9e66fa63,\n        },\n        r1a0: u288 {\n            limb0: 0xef6ef9aa3976f4dd18917f5a,\n            limb1: 0x544992409f5d8c72277c40a5,\n            limb2: 0x269adf40fda899e9,\n        },\n        r1a1: u288 {\n            limb0: 0x1272a877af1721f324764564,\n            limb1: 0x9cfb207d93eef259ff85dd53,\n            limb2: 0x1738f274efa92229,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xf2d619ae78049bf9141c35cf,\n            limb1: 0x717f8b10d469a1ee2d91f191,\n            limb2: 0x2c72c82fa8afe345,\n        },\n        r0a1: u288 {\n            limb0: 0xb89321223b82a2dc793c0185,\n            limb1: 0x71506a0cf4adb8e51bb7b759,\n            limb2: 0x2c13b92a98651492,\n        },\n        r1a0: u288 {\n            limb0: 0x4947ef2c89276f77f9d20942,\n            limb1: 0xb454d68685ab6b6976e71ec5,\n            limb2: 0x19a938d0e78a3593,\n        },\n        r1a1: u288 {\n            limb0: 0xbe883eb119609b489c01c905,\n            limb1: 0xaa06779922047f52feac5ce6,\n            limb2: 0x76977a3015dc164,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x43a96a588005043a46aadf2c,\n            limb1: 0xa37b89d8a1784582f0c52126,\n            limb2: 0x22e9ef3f5d4b2297,\n        },\n        r0a1: u288 {\n            limb0: 0x8c6f6d8474cf6e5a58468a31,\n            limb1: 0xeb1ce6ac75930ef1c79b07e5,\n            limb2: 0xf49839a756c7230,\n        },\n        r1a0: u288 {\n            limb0: 0x82b84693a656c8e8c1f962fd,\n            limb1: 0x2c1c8918ae80282208b6b23d,\n            limb2: 0x14d3504b5c8d428f,\n        },\n        r1a1: u288 {\n            limb0: 0x60ef4f4324d5619b60a3bb84,\n            limb1: 0x6d3090caefeedbc33638c77a,\n            limb2: 0x159264c370c89fec,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0x3a0493f840a637df757ffbd,\n            limb1: 0x78784ce2127de5ab9fd43f98,\n            limb2: 0x404e6e7d65575af,\n        },\n        r0a1: u288 {\n            limb0: 0x40a91253ff86fe1a9f30b23,\n            limb1: 0x9876650a81d21ccadf7b5a47,\n            limb2: 0x23641d1989cf0d22,\n        },\n        r1a0: u288 {\n            limb0: 0xd686edf528c50fe4b5fc743d,\n            limb1: 0xaff67da08ae2568924ba172c,\n            limb2: 0x147e9121533c6431,\n        },\n        r1a1: u288 {\n            limb0: 0xad80f0aa65056d5483a4ab44,\n            limb1: 0x6e8e1992f62ad66fac7881b4,\n            limb2: 0x24a28d1d5d8e8f3b,\n        },\n    },\n    G2Line {\n        r0a0: u288 {\n            limb0: 0xea1771c5a15aef9e3079786d,\n            limb1: 0x77a90b139183352b680523a0,\n            limb2: 0x232c100c95eae30e,\n        },\n        r0a1: u288 {\n            limb0: 0x6b283b2e00ceee9181913d03,\n            limb1: 0x977d294255416755d5596a3d,\n            limb2: 0x25678644f6a5053d,\n        },\n        r1a0: u288 {\n            limb0: 0xa543b526974a72bd42654bfb,\n            limb1: 0xdf95c5b8a9328fc318d7b435,\n            limb2: 0x161ef71b5e24d302,\n        },\n        r1a1: u288 {\n            limb0: 0x7412e2b94a4551851b42cd3,\n            limb1: 0xac25f9bbd0d7eb7e7789a8af,\n            limb2: 0x26d86a5064526fcb,\n        },\n    },\n];\n"
  },
  {
    "path": "src/src/basic_field_ops.cairo",
    "content": "use core::circuit::{\n    CircuitElement, CircuitElement as CE, CircuitInput, CircuitInput as CI, CircuitInputs,\n    CircuitModulus, CircuitOutputsTrait, EvalCircuitTrait, circuit_add, circuit_inverse,\n    circuit_mul, circuit_sub, u384,\n};\nuse core::num::traits::Zero;\nuse corelib_imports::bounded_int::upcast;\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::{E12D, get_BLS12_381_modulus, get_BN254_modulus, u288};\nuse garaga::utils::hashing::{PoseidonState, hades_permutation, hash_quadruple_u288};\n\nconst POW_2_32_252: felt252 = 0x100000000;\nconst POW_2_64_252: felt252 = 0x10000000000000000;\n\nconst POW_2_256_384: u384 = u384 { limb0: 0x0, limb1: 0x0, limb2: 0x10000000000000000, limb3: 0x0 };\n\n// Reduces a u384 given a circuit modulus by computing (a + 0) mod p.\n// Circuits outputs are reduced mod p.\npub fn reduce_mod_p(a: u384, modulus: CircuitModulus) -> u384 {\n    let in1 = CircuitElement::<CircuitInput<0>> {};\n    let in2 = CircuitElement::<CircuitInput<1>> {};\n    let reduce = circuit_add(in1, in2);\n\n    let outputs = (reduce,)\n        .new_inputs()\n        .next_2(a)\n        .next_2([0, 0, 0, 0])\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    return outputs.get_output(reduce);\n}\n\npub fn neg_mod_p(a: u384, modulus: CircuitModulus) -> u384 {\n    let in1 = CircuitElement::<CircuitInput<0>> {};\n    let in2 = CircuitElement::<CircuitInput<1>> {};\n    let neg = circuit_sub(in1, in2);\n\n    let outputs = (neg,)\n        .new_inputs()\n        .next_2([0, 0, 0, 0])\n        .next_2(a)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    return outputs.get_output(neg);\n}\n\n// Returns true if a == -b mod p (a + b = 0 mod p)\npub fn is_opposite_mod_p(a: u384, b: u384, modulus: CircuitModulus) -> bool {\n    let in1 = CircuitElement::<CircuitInput<0>> {};\n    let in2 = CircuitElement::<CircuitInput<1>> {};\n    let sum = circuit_add(in1, in2);\n    let outputs = (sum,).new_inputs().next_2(a).next_2(b).done_2().eval(modulus).unwrap();\n\n    return outputs.get_output(sum).is_zero();\n}\n\n// Returns true if a == 0 mod p (p must be odd prime)\npub fn is_zero_mod_p(a: u384, modulus: CircuitModulus) -> bool {\n    let in1 = CircuitElement::<CircuitInput<0>> {};\n    let sum = circuit_add(in1, in1);\n    let outputs = (sum,).new_inputs().next_2(a).done_2().eval(modulus).unwrap();\n    return outputs.get_output(sum).is_zero();\n}\n\npub fn is_even_u384(a: u384) -> bool {\n    let limb0_u128: u128 = upcast(a.limb0);\n    limb0_u128 % 2 == 0\n}\n\n\npub fn u32_8_to_u384(a: [u32; 8]) -> u384 {\n    let [a_0, a_1, a_2, a_3, a_4, a_5, a_6, a_7] = a;\n    let l0: felt252 = a_7.into() + a_6.into() * POW_2_32_252 + a_5.into() * POW_2_64_252;\n    let l1: felt252 = a_4.into() + a_3.into() * POW_2_32_252 + a_2.into() * POW_2_64_252;\n    let l2: felt252 = a_1.into() + a_0.into() * POW_2_32_252;\n    u384 {\n        limb0: l0.try_into().unwrap(),\n        limb1: l1.try_into().unwrap(),\n        limb2: l2.try_into().unwrap(),\n        limb3: 0,\n    }\n}\n\n// Takes big endian u512 and returns a u384 mod modulus\n// u512 = low_256 + high_256 * 2^256\n// u512 % p = (low_256 + high_256 * 2^256) % p\n// = (low_256 % p + high_256 * 2^256 % p) % p\n// CAUTION : a_high and a_low are expected to be < 2^256. No check is performed.\npub fn u512_mod_p(high_256: u384, low_256: u384, modulus: CircuitModulus) -> u384 {\n    let low = CircuitElement::<CircuitInput<0>> {};\n    let high = CircuitElement::<CircuitInput<1>> {};\n    let shift = CircuitElement::<CircuitInput<2>> {};\n    let high_shifted = circuit_mul(high, shift);\n    let res = circuit_add(low, high_shifted);\n\n    let outputs = (res,)\n        .new_inputs()\n        .next_2(low_256)\n        .next_2(high_256)\n        .next_2(POW_2_256_384)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    return outputs.get_output(res);\n}\n\npub fn add_mod_p(a: u384, b: u384, modulus: CircuitModulus) -> u384 {\n    let in1 = CircuitElement::<CircuitInput<0>> {};\n    let in2 = CircuitElement::<CircuitInput<1>> {};\n    let add = circuit_add(in1, in2);\n\n    let outputs = (add,).new_inputs().next_2(a).next_2(b).done_2().eval(modulus).unwrap();\n\n    return outputs.get_output(add);\n}\n\npub fn sub_mod_p(a: u384, b: u384, modulus: CircuitModulus) -> u384 {\n    let in1 = CircuitElement::<CircuitInput<0>> {};\n    let in2 = CircuitElement::<CircuitInput<1>> {};\n    let sub = circuit_sub(in1, in2);\n\n    let outputs = (sub,).new_inputs().next_2(a).next_2(b).done_2().eval(modulus).unwrap();\n\n    return outputs.get_output(sub);\n}\n\npub fn mul_mod_p(a: u384, b: u384, modulus: CircuitModulus) -> u384 {\n    let in1 = CircuitElement::<CircuitInput<0>> {};\n    let in2 = CircuitElement::<CircuitInput<1>> {};\n    let mul = circuit_mul(in1, in2);\n\n    let outputs = (mul,).new_inputs().next_2(a).next_2(b).done_2().eval(modulus).unwrap();\n\n    return outputs.get_output(mul);\n}\n\n#[inline(always)]\npub fn batch_3_mod_p(x: u384, y: u384, z: u384, c0: u384, modulus: CircuitModulus) -> u384 {\n    let _x = CircuitElement::<CircuitInput<0>> {};\n    let _y = CircuitElement::<CircuitInput<1>> {};\n    let _z = CircuitElement::<CircuitInput<2>> {};\n    let _c0 = CircuitElement::<CircuitInput<3>> {};\n    let _c1 = circuit_mul(_c0, _c0);\n    let _c2 = circuit_mul(_c1, _c0);\n    let _mul1 = circuit_mul(_x, _c0);\n    let _mul2 = circuit_mul(_y, _c1);\n    let _mul3 = circuit_mul(_z, _c2);\n    let res = circuit_add(circuit_add(_mul1, _mul2), _mul3);\n\n    let outputs = (res,)\n        .new_inputs()\n        .next_2(x)\n        .next_2(y)\n        .next_2(z)\n        .next_2(c0)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    return outputs.get_output(res);\n}\n\n\npub fn inv_mod_p(a: u384, modulus: CircuitModulus) -> u384 {\n    let in1 = CircuitElement::<CircuitInput<0>> {};\n    let inv = circuit_inverse(in1);\n\n    let outputs = (inv,).new_inputs().next_2(a).done_2().eval(modulus).unwrap();\n\n    return outputs.get_output(inv);\n}\n\n\n#[inline(always)]\npub fn eval_and_hash_E12D_u288_transcript(\n    transcript: Span<E12D<u288>>, mut s: PoseidonState, z: u384,\n) -> (PoseidonState, Array<u384>) {\n    let base: felt252 = 79228162514264337593543950336; // 2**96\n    let mut evals: Array<u384> = array![];\n    let modulus = get_BN254_modulus(); // BN254 prime field modulus\n\n    for elmt in transcript {\n        let elmt = *elmt;\n        let _s = hash_quadruple_u288(elmt.w0, elmt.w1, elmt.w2, elmt.w3, base, s);\n        let _s = hash_quadruple_u288(elmt.w4, elmt.w5, elmt.w6, elmt.w7, base, _s);\n        let _s = hash_quadruple_u288(elmt.w8, elmt.w9, elmt.w10, elmt.w11, base, _s);\n        s = _s;\n\n        let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n        let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n        let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n        let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n        let in12 = CE::<CI<12>> {};\n        let t0 = circuit_mul(in11, in12); // Eval X Horner step: multiply by z\n        let t1 = circuit_add(in10, t0); // Eval X Horner step: add coefficient_10\n        let t2 = circuit_mul(t1, in12); // Eval X Horner step: multiply by z\n        let t3 = circuit_add(in9, t2); // Eval X Horner step: add coefficient_9\n        let t4 = circuit_mul(t3, in12); // Eval X Horner step: multiply by z\n        let t5 = circuit_add(in8, t4); // Eval X Horner step: add coefficient_8\n        let t6 = circuit_mul(t5, in12); // Eval X Horner step: multiply by z\n        let t7 = circuit_add(in7, t6); // Eval X Horner step: add coefficient_7\n        let t8 = circuit_mul(t7, in12); // Eval X Horner step: multiply by z\n        let t9 = circuit_add(in6, t8); // Eval X Horner step: add coefficient_6\n        let t10 = circuit_mul(t9, in12); // Eval X Horner step: multiply by z\n        let t11 = circuit_add(in5, t10); // Eval X Horner step: add coefficient_5\n        let t12 = circuit_mul(t11, in12); // Eval X Horner step: multiply by z\n        let t13 = circuit_add(in4, t12); // Eval X Horner step: add coefficient_4\n        let t14 = circuit_mul(t13, in12); // Eval X Horner step: multiply by z\n        let t15 = circuit_add(in3, t14); // Eval X Horner step: add coefficient_3\n        let t16 = circuit_mul(t15, in12); // Eval X Horner step: multiply by z\n        let t17 = circuit_add(in2, t16); // Eval X Horner step: add coefficient_2\n        let t18 = circuit_mul(t17, in12); // Eval X Horner step: multiply by z\n        let t19 = circuit_add(in1, t18); // Eval X Horner step: add coefficient_1\n        let t20 = circuit_mul(t19, in12); // Eval X Horner step: multiply by z\n        let t21 = circuit_add(in0, t20); // Eval X Horner step: add coefficient_0\n\n        let mut circuit_inputs = (t21,).new_inputs();\n        // Prefill constants:\n\n        // Fill inputs:\n        circuit_inputs = circuit_inputs.next_2(elmt.w0); // in0\n        circuit_inputs = circuit_inputs.next_2(elmt.w1); // in1\n        circuit_inputs = circuit_inputs.next_2(elmt.w2); // in2\n        circuit_inputs = circuit_inputs.next_2(elmt.w3); // in3\n        circuit_inputs = circuit_inputs.next_2(elmt.w4); // in4\n        circuit_inputs = circuit_inputs.next_2(elmt.w5); // in5\n        circuit_inputs = circuit_inputs.next_2(elmt.w6); // in6\n        circuit_inputs = circuit_inputs.next_2(elmt.w7); // in7\n        circuit_inputs = circuit_inputs.next_2(elmt.w8); // in8\n        circuit_inputs = circuit_inputs.next_2(elmt.w9); // in9\n        circuit_inputs = circuit_inputs.next_2(elmt.w10); // in10\n        circuit_inputs = circuit_inputs.next_2(elmt.w11); // in11\n        circuit_inputs = circuit_inputs.next_2(z); // in12\n\n        let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n        let f_of_z: u384 = outputs.get_output(t21);\n        evals.append(f_of_z);\n    }\n    return (s, evals);\n}\n\n\n#[inline(always)]\npub fn eval_and_hash_E12D_u384_transcript(\n    transcript: Span<E12D<u384>>, mut s: PoseidonState, z: u384,\n) -> (PoseidonState, Array<u384>) {\n    let base: felt252 = 79228162514264337593543950336; // 2**96\n    let mut evals: Array<u384> = array![];\n    let modulus = get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    for elmt in transcript {\n        let elmt = *elmt;\n        let in_1 = s.s0 + elmt.w0.limb0.into() + base * elmt.w0.limb1.into();\n        let in_2 = s.s1 + elmt.w0.limb2.into() + base * elmt.w0.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, s.s2);\n        let in_1 = _s0 + elmt.w1.limb0.into() + base * elmt.w1.limb1.into();\n        let in_2 = _s1 + elmt.w1.limb2.into() + base * elmt.w1.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n        let in_1 = _s0 + elmt.w2.limb0.into() + base * elmt.w2.limb1.into();\n        let in_2 = _s1 + elmt.w2.limb2.into() + base * elmt.w2.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n        let in_1 = _s0 + elmt.w3.limb0.into() + base * elmt.w3.limb1.into();\n        let in_2 = _s1 + elmt.w3.limb2.into() + base * elmt.w3.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n        let in_1 = _s0 + elmt.w4.limb0.into() + base * elmt.w4.limb1.into();\n        let in_2 = _s1 + elmt.w4.limb2.into() + base * elmt.w4.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n        let in_1 = _s0 + elmt.w5.limb0.into() + base * elmt.w5.limb1.into();\n        let in_2 = _s1 + elmt.w5.limb2.into() + base * elmt.w5.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n        let in_1 = _s0 + elmt.w6.limb0.into() + base * elmt.w6.limb1.into();\n        let in_2 = _s1 + elmt.w6.limb2.into() + base * elmt.w6.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n        let in_1 = _s0 + elmt.w7.limb0.into() + base * elmt.w7.limb1.into();\n        let in_2 = _s1 + elmt.w7.limb2.into() + base * elmt.w7.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n        let in_1 = _s0 + elmt.w8.limb0.into() + base * elmt.w8.limb1.into();\n        let in_2 = _s1 + elmt.w8.limb2.into() + base * elmt.w8.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n        let in_1 = _s0 + elmt.w9.limb0.into() + base * elmt.w9.limb1.into();\n        let in_2 = _s1 + elmt.w9.limb2.into() + base * elmt.w9.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n        let in_1 = _s0 + elmt.w10.limb0.into() + base * elmt.w10.limb1.into();\n        let in_2 = _s1 + elmt.w10.limb2.into() + base * elmt.w10.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n        let in_1 = _s0 + elmt.w11.limb0.into() + base * elmt.w11.limb1.into();\n        let in_2 = _s1 + elmt.w11.limb2.into() + base * elmt.w11.limb3.into();\n        let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n\n        s = PoseidonState { s0: _s0, s1: _s1, s2: _s2 };\n\n        let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n        let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n        let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n        let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n        let in12 = CE::<CI<12>> {};\n        let t0 = circuit_mul(in11, in12); // Eval X Horner step: multiply by z\n        let t1 = circuit_add(in10, t0); // Eval X Horner step: add coefficient_10\n        let t2 = circuit_mul(t1, in12); // Eval X Horner step: multiply by z\n        let t3 = circuit_add(in9, t2); // Eval X Horner step: add coefficient_9\n        let t4 = circuit_mul(t3, in12); // Eval X Horner step: multiply by z\n        let t5 = circuit_add(in8, t4); // Eval X Horner step: add coefficient_8\n        let t6 = circuit_mul(t5, in12); // Eval X Horner step: multiply by z\n        let t7 = circuit_add(in7, t6); // Eval X Horner step: add coefficient_7\n        let t8 = circuit_mul(t7, in12); // Eval X Horner step: multiply by z\n        let t9 = circuit_add(in6, t8); // Eval X Horner step: add coefficient_6\n        let t10 = circuit_mul(t9, in12); // Eval X Horner step: multiply by z\n        let t11 = circuit_add(in5, t10); // Eval X Horner step: add coefficient_5\n        let t12 = circuit_mul(t11, in12); // Eval X Horner step: multiply by z\n        let t13 = circuit_add(in4, t12); // Eval X Horner step: add coefficient_4\n        let t14 = circuit_mul(t13, in12); // Eval X Horner step: multiply by z\n        let t15 = circuit_add(in3, t14); // Eval X Horner step: add coefficient_3\n        let t16 = circuit_mul(t15, in12); // Eval X Horner step: multiply by z\n        let t17 = circuit_add(in2, t16); // Eval X Horner step: add coefficient_2\n        let t18 = circuit_mul(t17, in12); // Eval X Horner step: multiply by z\n        let t19 = circuit_add(in1, t18); // Eval X Horner step: add coefficient_1\n        let t20 = circuit_mul(t19, in12); // Eval X Horner step: multiply by z\n        let t21 = circuit_add(in0, t20); // Eval X Horner step: add coefficient_0\n\n        let mut circuit_inputs = (t21,).new_inputs();\n        // Prefill constants:\n\n        // Fill inputs:\n        circuit_inputs = circuit_inputs.next_2(elmt.w0); // in0\n        circuit_inputs = circuit_inputs.next_2(elmt.w1); // in1\n        circuit_inputs = circuit_inputs.next_2(elmt.w2); // in2\n        circuit_inputs = circuit_inputs.next_2(elmt.w3); // in3\n        circuit_inputs = circuit_inputs.next_2(elmt.w4); // in4\n        circuit_inputs = circuit_inputs.next_2(elmt.w5); // in5\n        circuit_inputs = circuit_inputs.next_2(elmt.w6); // in6\n        circuit_inputs = circuit_inputs.next_2(elmt.w7); // in7\n        circuit_inputs = circuit_inputs.next_2(elmt.w8); // in8\n        circuit_inputs = circuit_inputs.next_2(elmt.w9); // in9\n        circuit_inputs = circuit_inputs.next_2(elmt.w10); // in10\n        circuit_inputs = circuit_inputs.next_2(elmt.w11); // in11\n        circuit_inputs = circuit_inputs.next_2(z); // in12\n\n        let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n        let f_of_z: u384 = outputs.get_output(t21);\n        evals.append(f_of_z);\n    }\n    return (s, evals);\n}\n"
  },
  {
    "path": "src/src/circuits/README.md",
    "content": "This folder contains autogenerated circuits only.\nTo regenerate the circuits, run the following command from the root of the repository:\n\n```bash\nmake rewrite\n```\n\nSee the corresponding script in [tools/make/rewrite.sh](../../../tools/make/rewrite.sh)\n"
  },
  {
    "path": "src/src/circuits/dummy.cairo",
    "content": "use core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitOutputsTrait, EvalCircuitTrait,\n    circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\n\n#[inline(always)]\npub fn run_DUMMY_circuit(mut input: Array<u384>, curve_index: usize) -> Array<u384> {\n    // INPUT stack\n    let (in0, in1) = (CE::<CI<0>> {}, CE::<CI<1>> {});\n    let t0 = circuit_sub(in0, in1);\n    let t1 = circuit_inverse(in1);\n    let t2 = circuit_mul(in0, t1);\n    let t3 = circuit_add(t0, t2);\n    let t4 = circuit_sub(t0, t2);\n    let t5 = circuit_mul(t0, t2);\n    let t6 = circuit_inverse(t2);\n    let t7 = circuit_mul(t0, t6);\n\n    let modulus = crate::definitions::get_modulus(curve_index);\n\n    let mut circuit_inputs = (t0, t2, t3, t4, t5, t7).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n\n    let mut input = input;\n    while let Option::Some(val) = input.pop_front() {\n        circuit_inputs = circuit_inputs.next_2(val);\n    }\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res = array![\n        outputs.get_output(t0), outputs.get_output(t2), outputs.get_output(t3),\n        outputs.get_output(t4), outputs.get_output(t5), outputs.get_output(t7),\n    ];\n    return res;\n}\n\n"
  },
  {
    "path": "src/src/circuits/ec.cairo",
    "content": "use core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitOutputsTrait, EvalCircuitTrait,\n    circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::{G1Point, G2Point};\n\nimpl CircuitDefinition27<\n    E0,\n    E1,\n    E2,\n    E3,\n    E4,\n    E5,\n    E6,\n    E7,\n    E8,\n    E9,\n    E10,\n    E11,\n    E12,\n    E13,\n    E14,\n    E15,\n    E16,\n    E17,\n    E18,\n    E19,\n    E20,\n    E21,\n    E22,\n    E23,\n    E24,\n    E25,\n    E26,\n> of core::circuit::CircuitDefinition<\n    (\n        CE<E0>,\n        CE<E1>,\n        CE<E2>,\n        CE<E3>,\n        CE<E4>,\n        CE<E5>,\n        CE<E6>,\n        CE<E7>,\n        CE<E8>,\n        CE<E9>,\n        CE<E10>,\n        CE<E11>,\n        CE<E12>,\n        CE<E13>,\n        CE<E14>,\n        CE<E15>,\n        CE<E16>,\n        CE<E17>,\n        CE<E18>,\n        CE<E19>,\n        CE<E20>,\n        CE<E21>,\n        CE<E22>,\n        CE<E23>,\n        CE<E24>,\n        CE<E25>,\n        CE<E26>,\n    ),\n> {\n    type CircuitType =\n        core::circuit::Circuit<\n            (\n                E0,\n                E1,\n                E2,\n                E3,\n                E4,\n                E5,\n                E6,\n                E7,\n                E8,\n                E9,\n                E10,\n                E11,\n                E12,\n                E13,\n                E14,\n                E15,\n                E16,\n                E17,\n                E18,\n                E19,\n                E20,\n                E21,\n                E22,\n                E23,\n                E24,\n                E25,\n                E26,\n            ),\n        >;\n}\nimpl MyDrp_27<\n    E0,\n    E1,\n    E2,\n    E3,\n    E4,\n    E5,\n    E6,\n    E7,\n    E8,\n    E9,\n    E10,\n    E11,\n    E12,\n    E13,\n    E14,\n    E15,\n    E16,\n    E17,\n    E18,\n    E19,\n    E20,\n    E21,\n    E22,\n    E23,\n    E24,\n    E25,\n    E26,\n> of Drop<\n    (\n        CE<E0>,\n        CE<E1>,\n        CE<E2>,\n        CE<E3>,\n        CE<E4>,\n        CE<E5>,\n        CE<E6>,\n        CE<E7>,\n        CE<E8>,\n        CE<E9>,\n        CE<E10>,\n        CE<E11>,\n        CE<E12>,\n        CE<E13>,\n        CE<E14>,\n        CE<E15>,\n        CE<E16>,\n        CE<E17>,\n        CE<E18>,\n        CE<E19>,\n        CE<E20>,\n        CE<E21>,\n        CE<E22>,\n        CE<E23>,\n        CE<E24>,\n        CE<E25>,\n        CE<E26>,\n    ),\n>;\n\nimpl CircuitDefinition28<\n    E0,\n    E1,\n    E2,\n    E3,\n    E4,\n    E5,\n    E6,\n    E7,\n    E8,\n    E9,\n    E10,\n    E11,\n    E12,\n    E13,\n    E14,\n    E15,\n    E16,\n    E17,\n    E18,\n    E19,\n    E20,\n    E21,\n    E22,\n    E23,\n    E24,\n    E25,\n    E26,\n    E27,\n> of core::circuit::CircuitDefinition<\n    (\n        CE<E0>,\n        CE<E1>,\n        CE<E2>,\n        CE<E3>,\n        CE<E4>,\n        CE<E5>,\n        CE<E6>,\n        CE<E7>,\n        CE<E8>,\n        CE<E9>,\n        CE<E10>,\n        CE<E11>,\n        CE<E12>,\n        CE<E13>,\n        CE<E14>,\n        CE<E15>,\n        CE<E16>,\n        CE<E17>,\n        CE<E18>,\n        CE<E19>,\n        CE<E20>,\n        CE<E21>,\n        CE<E22>,\n        CE<E23>,\n        CE<E24>,\n        CE<E25>,\n        CE<E26>,\n        CE<E27>,\n    ),\n> {\n    type CircuitType =\n        core::circuit::Circuit<\n            (\n                E0,\n                E1,\n                E2,\n                E3,\n                E4,\n                E5,\n                E6,\n                E7,\n                E8,\n                E9,\n                E10,\n                E11,\n                E12,\n                E13,\n                E14,\n                E15,\n                E16,\n                E17,\n                E18,\n                E19,\n                E20,\n                E21,\n                E22,\n                E23,\n                E24,\n                E25,\n                E26,\n                E27,\n            ),\n        >;\n}\nimpl MyDrp_28<\n    E0,\n    E1,\n    E2,\n    E3,\n    E4,\n    E5,\n    E6,\n    E7,\n    E8,\n    E9,\n    E10,\n    E11,\n    E12,\n    E13,\n    E14,\n    E15,\n    E16,\n    E17,\n    E18,\n    E19,\n    E20,\n    E21,\n    E22,\n    E23,\n    E24,\n    E25,\n    E26,\n    E27,\n> of Drop<\n    (\n        CE<E0>,\n        CE<E1>,\n        CE<E2>,\n        CE<E3>,\n        CE<E4>,\n        CE<E5>,\n        CE<E6>,\n        CE<E7>,\n        CE<E8>,\n        CE<E9>,\n        CE<E10>,\n        CE<E11>,\n        CE<E12>,\n        CE<E13>,\n        CE<E14>,\n        CE<E15>,\n        CE<E16>,\n        CE<E17>,\n        CE<E18>,\n        CE<E19>,\n        CE<E20>,\n        CE<E21>,\n        CE<E22>,\n        CE<E23>,\n        CE<E24>,\n        CE<E25>,\n        CE<E26>,\n        CE<E27>,\n    ),\n>;\n#[inline(always)]\npub fn run_ADD_EC_POINTS_G2_circuit(\n    p: G2Point, q: G2Point, modulus: core::circuit::CircuitModulus,\n) -> (G2Point,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8) = (CE::<CI<7>> {}, CE::<CI<8>> {});\n    let t0 = circuit_sub(in3, in7); // Fp2 sub coeff 0/1\n    let t1 = circuit_sub(in4, in8); // Fp2 sub coeff 1/1\n    let t2 = circuit_sub(in1, in5); // Fp2 sub coeff 0/1\n    let t3 = circuit_sub(in2, in6); // Fp2 sub coeff 1/1\n    let t4 = circuit_mul(t2, t2); // Fp2 Inv start\n    let t5 = circuit_mul(t3, t3);\n    let t6 = circuit_add(t4, t5);\n    let t7 = circuit_inverse(t6);\n    let t8 = circuit_mul(t2, t7); // Fp2 Inv real part end\n    let t9 = circuit_mul(t3, t7);\n    let t10 = circuit_sub(in0, t9); // Fp2 Inv imag part end\n    let t11 = circuit_mul(t0, t8); // Fp2 mul start\n    let t12 = circuit_mul(t1, t10);\n    let t13 = circuit_sub(t11, t12); // Fp2 mul real part end\n    let t14 = circuit_mul(t0, t10);\n    let t15 = circuit_mul(t1, t8);\n    let t16 = circuit_add(t14, t15); // Fp2 mul imag part end\n    let t17 = circuit_add(t13, t16);\n    let t18 = circuit_sub(t13, t16);\n    let t19 = circuit_mul(t17, t18);\n    let t20 = circuit_mul(t13, t16);\n    let t21 = circuit_add(t20, t20);\n    let t22 = circuit_sub(t19, in1); // Fp2 sub coeff 0/1\n    let t23 = circuit_sub(t21, in2); // Fp2 sub coeff 1/1\n    let t24 = circuit_sub(t22, in5); // Fp2 sub coeff 0/1\n    let t25 = circuit_sub(t23, in6); // Fp2 sub coeff 1/1\n    let t26 = circuit_sub(in1, t24); // Fp2 sub coeff 0/1\n    let t27 = circuit_sub(in2, t25); // Fp2 sub coeff 1/1\n    let t28 = circuit_mul(t13, t26); // Fp2 mul start\n    let t29 = circuit_mul(t16, t27);\n    let t30 = circuit_sub(t28, t29); // Fp2 mul real part end\n    let t31 = circuit_mul(t13, t27);\n    let t32 = circuit_mul(t16, t26);\n    let t33 = circuit_add(t31, t32); // Fp2 mul imag part end\n    let t34 = circuit_sub(t30, in3); // Fp2 sub coeff 0/1\n    let t35 = circuit_sub(t33, in4); // Fp2 sub coeff 1/1\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t24, t25, t34, t35).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x0); // in1\n    circuit_inputs = circuit_inputs.next_2(p.x1); // in2\n    circuit_inputs = circuit_inputs.next_2(p.y0); // in3\n    circuit_inputs = circuit_inputs.next_2(p.y1); // in4\n    circuit_inputs = circuit_inputs.next_2(q.x0); // in5\n    circuit_inputs = circuit_inputs.next_2(q.x1); // in6\n    circuit_inputs = circuit_inputs.next_2(q.y0); // in7\n    circuit_inputs = circuit_inputs.next_2(q.y1); // in8\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let result: G2Point = G2Point {\n        x0: outputs.get_output(t24),\n        x1: outputs.get_output(t25),\n        y0: outputs.get_output(t34),\n        y1: outputs.get_output(t35),\n    };\n    return (result,);\n}\n#[inline(always)]\npub fn run_ADD_EC_POINT_circuit(\n    p: G1Point, q: G1Point, modulus: core::circuit::CircuitModulus,\n) -> (G1Point,) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let in3 = CE::<CI<3>> {};\n    let t0 = circuit_sub(in1, in3);\n    let t1 = circuit_sub(in0, in2);\n    let t2 = circuit_inverse(t1);\n    let t3 = circuit_mul(t0, t2);\n    let t4 = circuit_mul(t3, t3);\n    let t5 = circuit_sub(t4, in0);\n    let t6 = circuit_sub(t5, in2);\n    let t7 = circuit_sub(in0, t6);\n    let t8 = circuit_mul(t3, t7);\n    let t9 = circuit_sub(t8, in1);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t6, t9).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x); // in0\n    circuit_inputs = circuit_inputs.next_2(p.y); // in1\n    circuit_inputs = circuit_inputs.next_2(q.x); // in2\n    circuit_inputs = circuit_inputs.next_2(q.y); // in3\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let r: G1Point = G1Point { x: outputs.get_output(t6), y: outputs.get_output(t9) };\n    return (r,);\n}\n#[inline(always)]\npub fn run_CLEAR_COFACTOR_BLS12_381_circuit(\n    P: G1Point, modulus: core::circuit::CircuitModulus,\n) -> (G1Point,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x3\n\n    // INPUT stack\n    let (in1, in2) = (CE::<CI<1>> {}, CE::<CI<2>> {});\n    let t0 = circuit_mul(in1, in1);\n    let t1 = circuit_mul(in0, t0);\n    let t2 = circuit_add(in2, in2);\n    let t3 = circuit_inverse(t2);\n    let t4 = circuit_mul(t1, t3);\n    let t5 = circuit_mul(t4, t4);\n    let t6 = circuit_sub(t5, in1);\n    let t7 = circuit_sub(t6, in1);\n    let t8 = circuit_sub(in1, t7);\n    let t9 = circuit_mul(t4, t8);\n    let t10 = circuit_sub(t9, in2);\n    let t11 = circuit_sub(t10, in2);\n    let t12 = circuit_sub(t7, in1);\n    let t13 = circuit_inverse(t12);\n    let t14 = circuit_mul(t11, t13);\n    let t15 = circuit_mul(t14, t14);\n    let t16 = circuit_sub(t15, t7);\n    let t17 = circuit_sub(t16, in1);\n    let t18 = circuit_sub(t7, t17);\n    let t19 = circuit_mul(t14, t18);\n    let t20 = circuit_sub(t19, t10);\n    let t21 = circuit_mul(t17, t17);\n    let t22 = circuit_mul(in0, t21);\n    let t23 = circuit_add(t20, t20);\n    let t24 = circuit_inverse(t23);\n    let t25 = circuit_mul(t22, t24);\n    let t26 = circuit_mul(t25, t25);\n    let t27 = circuit_sub(t26, t17);\n    let t28 = circuit_sub(t27, t17);\n    let t29 = circuit_sub(t17, t28);\n    let t30 = circuit_mul(t25, t29);\n    let t31 = circuit_sub(t30, t20);\n    let t32 = circuit_mul(t28, t28);\n    let t33 = circuit_mul(in0, t32);\n    let t34 = circuit_add(t31, t31);\n    let t35 = circuit_inverse(t34);\n    let t36 = circuit_mul(t33, t35);\n    let t37 = circuit_mul(t36, t36);\n    let t38 = circuit_sub(t37, t28);\n    let t39 = circuit_sub(t38, t28);\n    let t40 = circuit_sub(t28, t39);\n    let t41 = circuit_mul(t36, t40);\n    let t42 = circuit_sub(t41, t31);\n    let t43 = circuit_sub(t42, in2);\n    let t44 = circuit_sub(t39, in1);\n    let t45 = circuit_inverse(t44);\n    let t46 = circuit_mul(t43, t45);\n    let t47 = circuit_mul(t46, t46);\n    let t48 = circuit_sub(t47, t39);\n    let t49 = circuit_sub(t48, in1);\n    let t50 = circuit_sub(t39, t49);\n    let t51 = circuit_mul(t46, t50);\n    let t52 = circuit_sub(t51, t42);\n    let t53 = circuit_mul(t49, t49);\n    let t54 = circuit_mul(in0, t53);\n    let t55 = circuit_add(t52, t52);\n    let t56 = circuit_inverse(t55);\n    let t57 = circuit_mul(t54, t56);\n    let t58 = circuit_mul(t57, t57);\n    let t59 = circuit_sub(t58, t49);\n    let t60 = circuit_sub(t59, t49);\n    let t61 = circuit_sub(t49, t60);\n    let t62 = circuit_mul(t57, t61);\n    let t63 = circuit_sub(t62, t52);\n    let t64 = circuit_mul(t60, t60);\n    let t65 = circuit_mul(in0, t64);\n    let t66 = circuit_add(t63, t63);\n    let t67 = circuit_inverse(t66);\n    let t68 = circuit_mul(t65, t67);\n    let t69 = circuit_mul(t68, t68);\n    let t70 = circuit_sub(t69, t60);\n    let t71 = circuit_sub(t70, t60);\n    let t72 = circuit_sub(t60, t71);\n    let t73 = circuit_mul(t68, t72);\n    let t74 = circuit_sub(t73, t63);\n    let t75 = circuit_mul(t71, t71);\n    let t76 = circuit_mul(in0, t75);\n    let t77 = circuit_add(t74, t74);\n    let t78 = circuit_inverse(t77);\n    let t79 = circuit_mul(t76, t78);\n    let t80 = circuit_mul(t79, t79);\n    let t81 = circuit_sub(t80, t71);\n    let t82 = circuit_sub(t81, t71);\n    let t83 = circuit_sub(t71, t82);\n    let t84 = circuit_mul(t79, t83);\n    let t85 = circuit_sub(t84, t74);\n    let t86 = circuit_sub(t85, in2);\n    let t87 = circuit_sub(t82, in1);\n    let t88 = circuit_inverse(t87);\n    let t89 = circuit_mul(t86, t88);\n    let t90 = circuit_mul(t89, t89);\n    let t91 = circuit_sub(t90, t82);\n    let t92 = circuit_sub(t91, in1);\n    let t93 = circuit_sub(t82, t92);\n    let t94 = circuit_mul(t89, t93);\n    let t95 = circuit_sub(t94, t85);\n    let t96 = circuit_mul(t92, t92);\n    let t97 = circuit_mul(in0, t96);\n    let t98 = circuit_add(t95, t95);\n    let t99 = circuit_inverse(t98);\n    let t100 = circuit_mul(t97, t99);\n    let t101 = circuit_mul(t100, t100);\n    let t102 = circuit_sub(t101, t92);\n    let t103 = circuit_sub(t102, t92);\n    let t104 = circuit_sub(t92, t103);\n    let t105 = circuit_mul(t100, t104);\n    let t106 = circuit_sub(t105, t95);\n    let t107 = circuit_mul(t103, t103);\n    let t108 = circuit_mul(in0, t107);\n    let t109 = circuit_add(t106, t106);\n    let t110 = circuit_inverse(t109);\n    let t111 = circuit_mul(t108, t110);\n    let t112 = circuit_mul(t111, t111);\n    let t113 = circuit_sub(t112, t103);\n    let t114 = circuit_sub(t113, t103);\n    let t115 = circuit_sub(t103, t114);\n    let t116 = circuit_mul(t111, t115);\n    let t117 = circuit_sub(t116, t106);\n    let t118 = circuit_mul(t114, t114);\n    let t119 = circuit_mul(in0, t118);\n    let t120 = circuit_add(t117, t117);\n    let t121 = circuit_inverse(t120);\n    let t122 = circuit_mul(t119, t121);\n    let t123 = circuit_mul(t122, t122);\n    let t124 = circuit_sub(t123, t114);\n    let t125 = circuit_sub(t124, t114);\n    let t126 = circuit_sub(t114, t125);\n    let t127 = circuit_mul(t122, t126);\n    let t128 = circuit_sub(t127, t117);\n    let t129 = circuit_mul(t125, t125);\n    let t130 = circuit_mul(in0, t129);\n    let t131 = circuit_add(t128, t128);\n    let t132 = circuit_inverse(t131);\n    let t133 = circuit_mul(t130, t132);\n    let t134 = circuit_mul(t133, t133);\n    let t135 = circuit_sub(t134, t125);\n    let t136 = circuit_sub(t135, t125);\n    let t137 = circuit_sub(t125, t136);\n    let t138 = circuit_mul(t133, t137);\n    let t139 = circuit_sub(t138, t128);\n    let t140 = circuit_mul(t136, t136);\n    let t141 = circuit_mul(in0, t140);\n    let t142 = circuit_add(t139, t139);\n    let t143 = circuit_inverse(t142);\n    let t144 = circuit_mul(t141, t143);\n    let t145 = circuit_mul(t144, t144);\n    let t146 = circuit_sub(t145, t136);\n    let t147 = circuit_sub(t146, t136);\n    let t148 = circuit_sub(t136, t147);\n    let t149 = circuit_mul(t144, t148);\n    let t150 = circuit_sub(t149, t139);\n    let t151 = circuit_mul(t147, t147);\n    let t152 = circuit_mul(in0, t151);\n    let t153 = circuit_add(t150, t150);\n    let t154 = circuit_inverse(t153);\n    let t155 = circuit_mul(t152, t154);\n    let t156 = circuit_mul(t155, t155);\n    let t157 = circuit_sub(t156, t147);\n    let t158 = circuit_sub(t157, t147);\n    let t159 = circuit_sub(t147, t158);\n    let t160 = circuit_mul(t155, t159);\n    let t161 = circuit_sub(t160, t150);\n    let t162 = circuit_mul(t158, t158);\n    let t163 = circuit_mul(in0, t162);\n    let t164 = circuit_add(t161, t161);\n    let t165 = circuit_inverse(t164);\n    let t166 = circuit_mul(t163, t165);\n    let t167 = circuit_mul(t166, t166);\n    let t168 = circuit_sub(t167, t158);\n    let t169 = circuit_sub(t168, t158);\n    let t170 = circuit_sub(t158, t169);\n    let t171 = circuit_mul(t166, t170);\n    let t172 = circuit_sub(t171, t161);\n    let t173 = circuit_mul(t169, t169);\n    let t174 = circuit_mul(in0, t173);\n    let t175 = circuit_add(t172, t172);\n    let t176 = circuit_inverse(t175);\n    let t177 = circuit_mul(t174, t176);\n    let t178 = circuit_mul(t177, t177);\n    let t179 = circuit_sub(t178, t169);\n    let t180 = circuit_sub(t179, t169);\n    let t181 = circuit_sub(t169, t180);\n    let t182 = circuit_mul(t177, t181);\n    let t183 = circuit_sub(t182, t172);\n    let t184 = circuit_mul(t180, t180);\n    let t185 = circuit_mul(in0, t184);\n    let t186 = circuit_add(t183, t183);\n    let t187 = circuit_inverse(t186);\n    let t188 = circuit_mul(t185, t187);\n    let t189 = circuit_mul(t188, t188);\n    let t190 = circuit_sub(t189, t180);\n    let t191 = circuit_sub(t190, t180);\n    let t192 = circuit_sub(t180, t191);\n    let t193 = circuit_mul(t188, t192);\n    let t194 = circuit_sub(t193, t183);\n    let t195 = circuit_sub(t194, in2);\n    let t196 = circuit_sub(t191, in1);\n    let t197 = circuit_inverse(t196);\n    let t198 = circuit_mul(t195, t197);\n    let t199 = circuit_mul(t198, t198);\n    let t200 = circuit_sub(t199, t191);\n    let t201 = circuit_sub(t200, in1);\n    let t202 = circuit_sub(t191, t201);\n    let t203 = circuit_mul(t198, t202);\n    let t204 = circuit_sub(t203, t194);\n    let t205 = circuit_mul(t201, t201);\n    let t206 = circuit_mul(in0, t205);\n    let t207 = circuit_add(t204, t204);\n    let t208 = circuit_inverse(t207);\n    let t209 = circuit_mul(t206, t208);\n    let t210 = circuit_mul(t209, t209);\n    let t211 = circuit_sub(t210, t201);\n    let t212 = circuit_sub(t211, t201);\n    let t213 = circuit_sub(t201, t212);\n    let t214 = circuit_mul(t209, t213);\n    let t215 = circuit_sub(t214, t204);\n    let t216 = circuit_mul(t212, t212);\n    let t217 = circuit_mul(in0, t216);\n    let t218 = circuit_add(t215, t215);\n    let t219 = circuit_inverse(t218);\n    let t220 = circuit_mul(t217, t219);\n    let t221 = circuit_mul(t220, t220);\n    let t222 = circuit_sub(t221, t212);\n    let t223 = circuit_sub(t222, t212);\n    let t224 = circuit_sub(t212, t223);\n    let t225 = circuit_mul(t220, t224);\n    let t226 = circuit_sub(t225, t215);\n    let t227 = circuit_mul(t223, t223);\n    let t228 = circuit_mul(in0, t227);\n    let t229 = circuit_add(t226, t226);\n    let t230 = circuit_inverse(t229);\n    let t231 = circuit_mul(t228, t230);\n    let t232 = circuit_mul(t231, t231);\n    let t233 = circuit_sub(t232, t223);\n    let t234 = circuit_sub(t233, t223);\n    let t235 = circuit_sub(t223, t234);\n    let t236 = circuit_mul(t231, t235);\n    let t237 = circuit_sub(t236, t226);\n    let t238 = circuit_mul(t234, t234);\n    let t239 = circuit_mul(in0, t238);\n    let t240 = circuit_add(t237, t237);\n    let t241 = circuit_inverse(t240);\n    let t242 = circuit_mul(t239, t241);\n    let t243 = circuit_mul(t242, t242);\n    let t244 = circuit_sub(t243, t234);\n    let t245 = circuit_sub(t244, t234);\n    let t246 = circuit_sub(t234, t245);\n    let t247 = circuit_mul(t242, t246);\n    let t248 = circuit_sub(t247, t237);\n    let t249 = circuit_mul(t245, t245);\n    let t250 = circuit_mul(in0, t249);\n    let t251 = circuit_add(t248, t248);\n    let t252 = circuit_inverse(t251);\n    let t253 = circuit_mul(t250, t252);\n    let t254 = circuit_mul(t253, t253);\n    let t255 = circuit_sub(t254, t245);\n    let t256 = circuit_sub(t255, t245);\n    let t257 = circuit_sub(t245, t256);\n    let t258 = circuit_mul(t253, t257);\n    let t259 = circuit_sub(t258, t248);\n    let t260 = circuit_mul(t256, t256);\n    let t261 = circuit_mul(in0, t260);\n    let t262 = circuit_add(t259, t259);\n    let t263 = circuit_inverse(t262);\n    let t264 = circuit_mul(t261, t263);\n    let t265 = circuit_mul(t264, t264);\n    let t266 = circuit_sub(t265, t256);\n    let t267 = circuit_sub(t266, t256);\n    let t268 = circuit_sub(t256, t267);\n    let t269 = circuit_mul(t264, t268);\n    let t270 = circuit_sub(t269, t259);\n    let t271 = circuit_mul(t267, t267);\n    let t272 = circuit_mul(in0, t271);\n    let t273 = circuit_add(t270, t270);\n    let t274 = circuit_inverse(t273);\n    let t275 = circuit_mul(t272, t274);\n    let t276 = circuit_mul(t275, t275);\n    let t277 = circuit_sub(t276, t267);\n    let t278 = circuit_sub(t277, t267);\n    let t279 = circuit_sub(t267, t278);\n    let t280 = circuit_mul(t275, t279);\n    let t281 = circuit_sub(t280, t270);\n    let t282 = circuit_mul(t278, t278);\n    let t283 = circuit_mul(in0, t282);\n    let t284 = circuit_add(t281, t281);\n    let t285 = circuit_inverse(t284);\n    let t286 = circuit_mul(t283, t285);\n    let t287 = circuit_mul(t286, t286);\n    let t288 = circuit_sub(t287, t278);\n    let t289 = circuit_sub(t288, t278);\n    let t290 = circuit_sub(t278, t289);\n    let t291 = circuit_mul(t286, t290);\n    let t292 = circuit_sub(t291, t281);\n    let t293 = circuit_mul(t289, t289);\n    let t294 = circuit_mul(in0, t293);\n    let t295 = circuit_add(t292, t292);\n    let t296 = circuit_inverse(t295);\n    let t297 = circuit_mul(t294, t296);\n    let t298 = circuit_mul(t297, t297);\n    let t299 = circuit_sub(t298, t289);\n    let t300 = circuit_sub(t299, t289);\n    let t301 = circuit_sub(t289, t300);\n    let t302 = circuit_mul(t297, t301);\n    let t303 = circuit_sub(t302, t292);\n    let t304 = circuit_mul(t300, t300);\n    let t305 = circuit_mul(in0, t304);\n    let t306 = circuit_add(t303, t303);\n    let t307 = circuit_inverse(t306);\n    let t308 = circuit_mul(t305, t307);\n    let t309 = circuit_mul(t308, t308);\n    let t310 = circuit_sub(t309, t300);\n    let t311 = circuit_sub(t310, t300);\n    let t312 = circuit_sub(t300, t311);\n    let t313 = circuit_mul(t308, t312);\n    let t314 = circuit_sub(t313, t303);\n    let t315 = circuit_mul(t311, t311);\n    let t316 = circuit_mul(in0, t315);\n    let t317 = circuit_add(t314, t314);\n    let t318 = circuit_inverse(t317);\n    let t319 = circuit_mul(t316, t318);\n    let t320 = circuit_mul(t319, t319);\n    let t321 = circuit_sub(t320, t311);\n    let t322 = circuit_sub(t321, t311);\n    let t323 = circuit_sub(t311, t322);\n    let t324 = circuit_mul(t319, t323);\n    let t325 = circuit_sub(t324, t314);\n    let t326 = circuit_mul(t322, t322);\n    let t327 = circuit_mul(in0, t326);\n    let t328 = circuit_add(t325, t325);\n    let t329 = circuit_inverse(t328);\n    let t330 = circuit_mul(t327, t329);\n    let t331 = circuit_mul(t330, t330);\n    let t332 = circuit_sub(t331, t322);\n    let t333 = circuit_sub(t332, t322);\n    let t334 = circuit_sub(t322, t333);\n    let t335 = circuit_mul(t330, t334);\n    let t336 = circuit_sub(t335, t325);\n    let t337 = circuit_mul(t333, t333);\n    let t338 = circuit_mul(in0, t337);\n    let t339 = circuit_add(t336, t336);\n    let t340 = circuit_inverse(t339);\n    let t341 = circuit_mul(t338, t340);\n    let t342 = circuit_mul(t341, t341);\n    let t343 = circuit_sub(t342, t333);\n    let t344 = circuit_sub(t343, t333);\n    let t345 = circuit_sub(t333, t344);\n    let t346 = circuit_mul(t341, t345);\n    let t347 = circuit_sub(t346, t336);\n    let t348 = circuit_mul(t344, t344);\n    let t349 = circuit_mul(in0, t348);\n    let t350 = circuit_add(t347, t347);\n    let t351 = circuit_inverse(t350);\n    let t352 = circuit_mul(t349, t351);\n    let t353 = circuit_mul(t352, t352);\n    let t354 = circuit_sub(t353, t344);\n    let t355 = circuit_sub(t354, t344);\n    let t356 = circuit_sub(t344, t355);\n    let t357 = circuit_mul(t352, t356);\n    let t358 = circuit_sub(t357, t347);\n    let t359 = circuit_mul(t355, t355);\n    let t360 = circuit_mul(in0, t359);\n    let t361 = circuit_add(t358, t358);\n    let t362 = circuit_inverse(t361);\n    let t363 = circuit_mul(t360, t362);\n    let t364 = circuit_mul(t363, t363);\n    let t365 = circuit_sub(t364, t355);\n    let t366 = circuit_sub(t365, t355);\n    let t367 = circuit_sub(t355, t366);\n    let t368 = circuit_mul(t363, t367);\n    let t369 = circuit_sub(t368, t358);\n    let t370 = circuit_mul(t366, t366);\n    let t371 = circuit_mul(in0, t370);\n    let t372 = circuit_add(t369, t369);\n    let t373 = circuit_inverse(t372);\n    let t374 = circuit_mul(t371, t373);\n    let t375 = circuit_mul(t374, t374);\n    let t376 = circuit_sub(t375, t366);\n    let t377 = circuit_sub(t376, t366);\n    let t378 = circuit_sub(t366, t377);\n    let t379 = circuit_mul(t374, t378);\n    let t380 = circuit_sub(t379, t369);\n    let t381 = circuit_mul(t377, t377);\n    let t382 = circuit_mul(in0, t381);\n    let t383 = circuit_add(t380, t380);\n    let t384 = circuit_inverse(t383);\n    let t385 = circuit_mul(t382, t384);\n    let t386 = circuit_mul(t385, t385);\n    let t387 = circuit_sub(t386, t377);\n    let t388 = circuit_sub(t387, t377);\n    let t389 = circuit_sub(t377, t388);\n    let t390 = circuit_mul(t385, t389);\n    let t391 = circuit_sub(t390, t380);\n    let t392 = circuit_mul(t388, t388);\n    let t393 = circuit_mul(in0, t392);\n    let t394 = circuit_add(t391, t391);\n    let t395 = circuit_inverse(t394);\n    let t396 = circuit_mul(t393, t395);\n    let t397 = circuit_mul(t396, t396);\n    let t398 = circuit_sub(t397, t388);\n    let t399 = circuit_sub(t398, t388);\n    let t400 = circuit_sub(t388, t399);\n    let t401 = circuit_mul(t396, t400);\n    let t402 = circuit_sub(t401, t391);\n    let t403 = circuit_mul(t399, t399);\n    let t404 = circuit_mul(in0, t403);\n    let t405 = circuit_add(t402, t402);\n    let t406 = circuit_inverse(t405);\n    let t407 = circuit_mul(t404, t406);\n    let t408 = circuit_mul(t407, t407);\n    let t409 = circuit_sub(t408, t399);\n    let t410 = circuit_sub(t409, t399);\n    let t411 = circuit_sub(t399, t410);\n    let t412 = circuit_mul(t407, t411);\n    let t413 = circuit_sub(t412, t402);\n    let t414 = circuit_mul(t410, t410);\n    let t415 = circuit_mul(in0, t414);\n    let t416 = circuit_add(t413, t413);\n    let t417 = circuit_inverse(t416);\n    let t418 = circuit_mul(t415, t417);\n    let t419 = circuit_mul(t418, t418);\n    let t420 = circuit_sub(t419, t410);\n    let t421 = circuit_sub(t420, t410);\n    let t422 = circuit_sub(t410, t421);\n    let t423 = circuit_mul(t418, t422);\n    let t424 = circuit_sub(t423, t413);\n    let t425 = circuit_mul(t421, t421);\n    let t426 = circuit_mul(in0, t425);\n    let t427 = circuit_add(t424, t424);\n    let t428 = circuit_inverse(t427);\n    let t429 = circuit_mul(t426, t428);\n    let t430 = circuit_mul(t429, t429);\n    let t431 = circuit_sub(t430, t421);\n    let t432 = circuit_sub(t431, t421);\n    let t433 = circuit_sub(t421, t432);\n    let t434 = circuit_mul(t429, t433);\n    let t435 = circuit_sub(t434, t424);\n    let t436 = circuit_mul(t432, t432);\n    let t437 = circuit_mul(in0, t436);\n    let t438 = circuit_add(t435, t435);\n    let t439 = circuit_inverse(t438);\n    let t440 = circuit_mul(t437, t439);\n    let t441 = circuit_mul(t440, t440);\n    let t442 = circuit_sub(t441, t432);\n    let t443 = circuit_sub(t442, t432);\n    let t444 = circuit_sub(t432, t443);\n    let t445 = circuit_mul(t440, t444);\n    let t446 = circuit_sub(t445, t435);\n    let t447 = circuit_mul(t443, t443);\n    let t448 = circuit_mul(in0, t447);\n    let t449 = circuit_add(t446, t446);\n    let t450 = circuit_inverse(t449);\n    let t451 = circuit_mul(t448, t450);\n    let t452 = circuit_mul(t451, t451);\n    let t453 = circuit_sub(t452, t443);\n    let t454 = circuit_sub(t453, t443);\n    let t455 = circuit_sub(t443, t454);\n    let t456 = circuit_mul(t451, t455);\n    let t457 = circuit_sub(t456, t446);\n    let t458 = circuit_mul(t454, t454);\n    let t459 = circuit_mul(in0, t458);\n    let t460 = circuit_add(t457, t457);\n    let t461 = circuit_inverse(t460);\n    let t462 = circuit_mul(t459, t461);\n    let t463 = circuit_mul(t462, t462);\n    let t464 = circuit_sub(t463, t454);\n    let t465 = circuit_sub(t464, t454);\n    let t466 = circuit_sub(t454, t465);\n    let t467 = circuit_mul(t462, t466);\n    let t468 = circuit_sub(t467, t457);\n    let t469 = circuit_mul(t465, t465);\n    let t470 = circuit_mul(in0, t469);\n    let t471 = circuit_add(t468, t468);\n    let t472 = circuit_inverse(t471);\n    let t473 = circuit_mul(t470, t472);\n    let t474 = circuit_mul(t473, t473);\n    let t475 = circuit_sub(t474, t465);\n    let t476 = circuit_sub(t475, t465);\n    let t477 = circuit_sub(t465, t476);\n    let t478 = circuit_mul(t473, t477);\n    let t479 = circuit_sub(t478, t468);\n    let t480 = circuit_mul(t476, t476);\n    let t481 = circuit_mul(in0, t480);\n    let t482 = circuit_add(t479, t479);\n    let t483 = circuit_inverse(t482);\n    let t484 = circuit_mul(t481, t483);\n    let t485 = circuit_mul(t484, t484);\n    let t486 = circuit_sub(t485, t476);\n    let t487 = circuit_sub(t486, t476);\n    let t488 = circuit_sub(t476, t487);\n    let t489 = circuit_mul(t484, t488);\n    let t490 = circuit_sub(t489, t479);\n    let t491 = circuit_mul(t487, t487);\n    let t492 = circuit_mul(in0, t491);\n    let t493 = circuit_add(t490, t490);\n    let t494 = circuit_inverse(t493);\n    let t495 = circuit_mul(t492, t494);\n    let t496 = circuit_mul(t495, t495);\n    let t497 = circuit_sub(t496, t487);\n    let t498 = circuit_sub(t497, t487);\n    let t499 = circuit_sub(t487, t498);\n    let t500 = circuit_mul(t495, t499);\n    let t501 = circuit_sub(t500, t490);\n    let t502 = circuit_mul(t498, t498);\n    let t503 = circuit_mul(in0, t502);\n    let t504 = circuit_add(t501, t501);\n    let t505 = circuit_inverse(t504);\n    let t506 = circuit_mul(t503, t505);\n    let t507 = circuit_mul(t506, t506);\n    let t508 = circuit_sub(t507, t498);\n    let t509 = circuit_sub(t508, t498);\n    let t510 = circuit_sub(t498, t509);\n    let t511 = circuit_mul(t506, t510);\n    let t512 = circuit_sub(t511, t501);\n    let t513 = circuit_mul(t509, t509);\n    let t514 = circuit_mul(in0, t513);\n    let t515 = circuit_add(t512, t512);\n    let t516 = circuit_inverse(t515);\n    let t517 = circuit_mul(t514, t516);\n    let t518 = circuit_mul(t517, t517);\n    let t519 = circuit_sub(t518, t509);\n    let t520 = circuit_sub(t519, t509);\n    let t521 = circuit_sub(t509, t520);\n    let t522 = circuit_mul(t517, t521);\n    let t523 = circuit_sub(t522, t512);\n    let t524 = circuit_mul(t520, t520);\n    let t525 = circuit_mul(in0, t524);\n    let t526 = circuit_add(t523, t523);\n    let t527 = circuit_inverse(t526);\n    let t528 = circuit_mul(t525, t527);\n    let t529 = circuit_mul(t528, t528);\n    let t530 = circuit_sub(t529, t520);\n    let t531 = circuit_sub(t530, t520);\n    let t532 = circuit_sub(t520, t531);\n    let t533 = circuit_mul(t528, t532);\n    let t534 = circuit_sub(t533, t523);\n    let t535 = circuit_mul(t531, t531);\n    let t536 = circuit_mul(in0, t535);\n    let t537 = circuit_add(t534, t534);\n    let t538 = circuit_inverse(t537);\n    let t539 = circuit_mul(t536, t538);\n    let t540 = circuit_mul(t539, t539);\n    let t541 = circuit_sub(t540, t531);\n    let t542 = circuit_sub(t541, t531);\n    let t543 = circuit_sub(t531, t542);\n    let t544 = circuit_mul(t539, t543);\n    let t545 = circuit_sub(t544, t534);\n    let t546 = circuit_mul(t542, t542);\n    let t547 = circuit_mul(in0, t546);\n    let t548 = circuit_add(t545, t545);\n    let t549 = circuit_inverse(t548);\n    let t550 = circuit_mul(t547, t549);\n    let t551 = circuit_mul(t550, t550);\n    let t552 = circuit_sub(t551, t542);\n    let t553 = circuit_sub(t552, t542);\n    let t554 = circuit_sub(t542, t553);\n    let t555 = circuit_mul(t550, t554);\n    let t556 = circuit_sub(t555, t545);\n    let t557 = circuit_sub(t556, in2);\n    let t558 = circuit_sub(t553, in1);\n    let t559 = circuit_inverse(t558);\n    let t560 = circuit_mul(t557, t559);\n    let t561 = circuit_mul(t560, t560);\n    let t562 = circuit_sub(t561, t553);\n    let t563 = circuit_sub(t562, in1);\n    let t564 = circuit_sub(t553, t563);\n    let t565 = circuit_mul(t560, t564);\n    let t566 = circuit_sub(t565, t556);\n    let t567 = circuit_mul(t563, t563);\n    let t568 = circuit_mul(in0, t567);\n    let t569 = circuit_add(t566, t566);\n    let t570 = circuit_inverse(t569);\n    let t571 = circuit_mul(t568, t570);\n    let t572 = circuit_mul(t571, t571);\n    let t573 = circuit_sub(t572, t563);\n    let t574 = circuit_sub(t573, t563);\n    let t575 = circuit_sub(t563, t574);\n    let t576 = circuit_mul(t571, t575);\n    let t577 = circuit_sub(t576, t566);\n    let t578 = circuit_mul(t574, t574);\n    let t579 = circuit_mul(in0, t578);\n    let t580 = circuit_add(t577, t577);\n    let t581 = circuit_inverse(t580);\n    let t582 = circuit_mul(t579, t581);\n    let t583 = circuit_mul(t582, t582);\n    let t584 = circuit_sub(t583, t574);\n    let t585 = circuit_sub(t584, t574);\n    let t586 = circuit_sub(t574, t585);\n    let t587 = circuit_mul(t582, t586);\n    let t588 = circuit_sub(t587, t577);\n    let t589 = circuit_mul(t585, t585);\n    let t590 = circuit_mul(in0, t589);\n    let t591 = circuit_add(t588, t588);\n    let t592 = circuit_inverse(t591);\n    let t593 = circuit_mul(t590, t592);\n    let t594 = circuit_mul(t593, t593);\n    let t595 = circuit_sub(t594, t585);\n    let t596 = circuit_sub(t595, t585);\n    let t597 = circuit_sub(t585, t596);\n    let t598 = circuit_mul(t593, t597);\n    let t599 = circuit_sub(t598, t588);\n    let t600 = circuit_mul(t596, t596);\n    let t601 = circuit_mul(in0, t600);\n    let t602 = circuit_add(t599, t599);\n    let t603 = circuit_inverse(t602);\n    let t604 = circuit_mul(t601, t603);\n    let t605 = circuit_mul(t604, t604);\n    let t606 = circuit_sub(t605, t596);\n    let t607 = circuit_sub(t606, t596);\n    let t608 = circuit_sub(t596, t607);\n    let t609 = circuit_mul(t604, t608);\n    let t610 = circuit_sub(t609, t599);\n    let t611 = circuit_mul(t607, t607);\n    let t612 = circuit_mul(in0, t611);\n    let t613 = circuit_add(t610, t610);\n    let t614 = circuit_inverse(t613);\n    let t615 = circuit_mul(t612, t614);\n    let t616 = circuit_mul(t615, t615);\n    let t617 = circuit_sub(t616, t607);\n    let t618 = circuit_sub(t617, t607);\n    let t619 = circuit_sub(t607, t618);\n    let t620 = circuit_mul(t615, t619);\n    let t621 = circuit_sub(t620, t610);\n    let t622 = circuit_mul(t618, t618);\n    let t623 = circuit_mul(in0, t622);\n    let t624 = circuit_add(t621, t621);\n    let t625 = circuit_inverse(t624);\n    let t626 = circuit_mul(t623, t625);\n    let t627 = circuit_mul(t626, t626);\n    let t628 = circuit_sub(t627, t618);\n    let t629 = circuit_sub(t628, t618);\n    let t630 = circuit_sub(t618, t629);\n    let t631 = circuit_mul(t626, t630);\n    let t632 = circuit_sub(t631, t621);\n    let t633 = circuit_mul(t629, t629);\n    let t634 = circuit_mul(in0, t633);\n    let t635 = circuit_add(t632, t632);\n    let t636 = circuit_inverse(t635);\n    let t637 = circuit_mul(t634, t636);\n    let t638 = circuit_mul(t637, t637);\n    let t639 = circuit_sub(t638, t629);\n    let t640 = circuit_sub(t639, t629);\n    let t641 = circuit_sub(t629, t640);\n    let t642 = circuit_mul(t637, t641);\n    let t643 = circuit_sub(t642, t632);\n    let t644 = circuit_mul(t640, t640);\n    let t645 = circuit_mul(in0, t644);\n    let t646 = circuit_add(t643, t643);\n    let t647 = circuit_inverse(t646);\n    let t648 = circuit_mul(t645, t647);\n    let t649 = circuit_mul(t648, t648);\n    let t650 = circuit_sub(t649, t640);\n    let t651 = circuit_sub(t650, t640);\n    let t652 = circuit_sub(t640, t651);\n    let t653 = circuit_mul(t648, t652);\n    let t654 = circuit_sub(t653, t643);\n    let t655 = circuit_mul(t651, t651);\n    let t656 = circuit_mul(in0, t655);\n    let t657 = circuit_add(t654, t654);\n    let t658 = circuit_inverse(t657);\n    let t659 = circuit_mul(t656, t658);\n    let t660 = circuit_mul(t659, t659);\n    let t661 = circuit_sub(t660, t651);\n    let t662 = circuit_sub(t661, t651);\n    let t663 = circuit_sub(t651, t662);\n    let t664 = circuit_mul(t659, t663);\n    let t665 = circuit_sub(t664, t654);\n    let t666 = circuit_mul(t662, t662);\n    let t667 = circuit_mul(in0, t666);\n    let t668 = circuit_add(t665, t665);\n    let t669 = circuit_inverse(t668);\n    let t670 = circuit_mul(t667, t669);\n    let t671 = circuit_mul(t670, t670);\n    let t672 = circuit_sub(t671, t662);\n    let t673 = circuit_sub(t672, t662);\n    let t674 = circuit_sub(t662, t673);\n    let t675 = circuit_mul(t670, t674);\n    let t676 = circuit_sub(t675, t665);\n    let t677 = circuit_mul(t673, t673);\n    let t678 = circuit_mul(in0, t677);\n    let t679 = circuit_add(t676, t676);\n    let t680 = circuit_inverse(t679);\n    let t681 = circuit_mul(t678, t680);\n    let t682 = circuit_mul(t681, t681);\n    let t683 = circuit_sub(t682, t673);\n    let t684 = circuit_sub(t683, t673);\n    let t685 = circuit_sub(t673, t684);\n    let t686 = circuit_mul(t681, t685);\n    let t687 = circuit_sub(t686, t676);\n    let t688 = circuit_mul(t684, t684);\n    let t689 = circuit_mul(in0, t688);\n    let t690 = circuit_add(t687, t687);\n    let t691 = circuit_inverse(t690);\n    let t692 = circuit_mul(t689, t691);\n    let t693 = circuit_mul(t692, t692);\n    let t694 = circuit_sub(t693, t684);\n    let t695 = circuit_sub(t694, t684);\n    let t696 = circuit_sub(t684, t695);\n    let t697 = circuit_mul(t692, t696);\n    let t698 = circuit_sub(t697, t687);\n    let t699 = circuit_mul(t695, t695);\n    let t700 = circuit_mul(in0, t699);\n    let t701 = circuit_add(t698, t698);\n    let t702 = circuit_inverse(t701);\n    let t703 = circuit_mul(t700, t702);\n    let t704 = circuit_mul(t703, t703);\n    let t705 = circuit_sub(t704, t695);\n    let t706 = circuit_sub(t705, t695);\n    let t707 = circuit_sub(t695, t706);\n    let t708 = circuit_mul(t703, t707);\n    let t709 = circuit_sub(t708, t698);\n    let t710 = circuit_mul(t706, t706);\n    let t711 = circuit_mul(in0, t710);\n    let t712 = circuit_add(t709, t709);\n    let t713 = circuit_inverse(t712);\n    let t714 = circuit_mul(t711, t713);\n    let t715 = circuit_mul(t714, t714);\n    let t716 = circuit_sub(t715, t706);\n    let t717 = circuit_sub(t716, t706);\n    let t718 = circuit_sub(t706, t717);\n    let t719 = circuit_mul(t714, t718);\n    let t720 = circuit_sub(t719, t709);\n    let t721 = circuit_mul(t717, t717);\n    let t722 = circuit_mul(in0, t721);\n    let t723 = circuit_add(t720, t720);\n    let t724 = circuit_inverse(t723);\n    let t725 = circuit_mul(t722, t724);\n    let t726 = circuit_mul(t725, t725);\n    let t727 = circuit_sub(t726, t717);\n    let t728 = circuit_sub(t727, t717);\n    let t729 = circuit_sub(t717, t728);\n    let t730 = circuit_mul(t725, t729);\n    let t731 = circuit_sub(t730, t720);\n    let t732 = circuit_mul(t728, t728);\n    let t733 = circuit_mul(in0, t732);\n    let t734 = circuit_add(t731, t731);\n    let t735 = circuit_inverse(t734);\n    let t736 = circuit_mul(t733, t735);\n    let t737 = circuit_mul(t736, t736);\n    let t738 = circuit_sub(t737, t728);\n    let t739 = circuit_sub(t738, t728);\n    let t740 = circuit_sub(t728, t739);\n    let t741 = circuit_mul(t736, t740);\n    let t742 = circuit_sub(t741, t731);\n    let t743 = circuit_sub(in2, t742);\n    let t744 = circuit_sub(in1, t739);\n    let t745 = circuit_inverse(t744);\n    let t746 = circuit_mul(t743, t745);\n    let t747 = circuit_mul(t746, t746);\n    let t748 = circuit_sub(t747, in1);\n    let t749 = circuit_sub(t748, t739);\n    let t750 = circuit_sub(in1, t749);\n    let t751 = circuit_mul(t746, t750);\n    let t752 = circuit_sub(t751, in2);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t749, t752).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(P.x); // in1\n    circuit_inputs = circuit_inputs.next_2(P.y); // in2\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: G1Point = G1Point { x: outputs.get_output(t749), y: outputs.get_output(t752) };\n    return (res,);\n}\n#[inline(always)]\npub fn run_DOUBLE_AND_ADD_EC_POINTS_G2_circuit(\n    p: G2Point, q: G2Point, modulus: core::circuit::CircuitModulus,\n) -> (G2Point,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8) = (CE::<CI<7>> {}, CE::<CI<8>> {});\n    let t0 = circuit_sub(in7, in3); // Fp2 sub coeff 0/1\n    let t1 = circuit_sub(in8, in4); // Fp2 sub coeff 1/1\n    let t2 = circuit_sub(in5, in1); // Fp2 sub coeff 0/1\n    let t3 = circuit_sub(in6, in2); // Fp2 sub coeff 1/1\n    let t4 = circuit_mul(t2, t2); // Fp2 Inv start\n    let t5 = circuit_mul(t3, t3);\n    let t6 = circuit_add(t4, t5);\n    let t7 = circuit_inverse(t6);\n    let t8 = circuit_mul(t2, t7); // Fp2 Inv real part end\n    let t9 = circuit_mul(t3, t7);\n    let t10 = circuit_sub(in0, t9); // Fp2 Inv imag part end\n    let t11 = circuit_mul(t0, t8); // Fp2 mul start\n    let t12 = circuit_mul(t1, t10);\n    let t13 = circuit_sub(t11, t12); // Fp2 mul real part end\n    let t14 = circuit_mul(t0, t10);\n    let t15 = circuit_mul(t1, t8);\n    let t16 = circuit_add(t14, t15); // Fp2 mul imag part end\n    let t17 = circuit_add(t13, t16);\n    let t18 = circuit_sub(t13, t16);\n    let t19 = circuit_mul(t17, t18);\n    let t20 = circuit_mul(t13, t16);\n    let t21 = circuit_add(t20, t20);\n    let t22 = circuit_add(in1, in5); // Fp2 add coeff 0/1\n    let t23 = circuit_add(in2, in6); // Fp2 add coeff 1/1\n    let t24 = circuit_sub(t19, t22); // Fp2 sub coeff 0/1\n    let t25 = circuit_sub(t21, t23); // Fp2 sub coeff 1/1\n    let t26 = circuit_add(in3, in3); // Fp2 add coeff 0/1\n    let t27 = circuit_add(in4, in4); // Fp2 add coeff 1/1\n    let t28 = circuit_sub(t24, in1); // Fp2 sub coeff 0/1\n    let t29 = circuit_sub(t25, in2); // Fp2 sub coeff 1/1\n    let t30 = circuit_mul(t28, t28); // Fp2 Inv start\n    let t31 = circuit_mul(t29, t29);\n    let t32 = circuit_add(t30, t31);\n    let t33 = circuit_inverse(t32);\n    let t34 = circuit_mul(t28, t33); // Fp2 Inv real part end\n    let t35 = circuit_mul(t29, t33);\n    let t36 = circuit_sub(in0, t35); // Fp2 Inv imag part end\n    let t37 = circuit_mul(t26, t34); // Fp2 mul start\n    let t38 = circuit_mul(t27, t36);\n    let t39 = circuit_sub(t37, t38); // Fp2 mul real part end\n    let t40 = circuit_mul(t26, t36);\n    let t41 = circuit_mul(t27, t34);\n    let t42 = circuit_add(t40, t41); // Fp2 mul imag part end\n    let t43 = circuit_add(t13, t39); // Fp2 add coeff 0/1\n    let t44 = circuit_add(t16, t42); // Fp2 add coeff 1/1\n    let t45 = circuit_add(t43, t44);\n    let t46 = circuit_sub(t43, t44);\n    let t47 = circuit_mul(t45, t46);\n    let t48 = circuit_mul(t43, t44);\n    let t49 = circuit_add(t48, t48);\n    let t50 = circuit_add(in1, t24); // Fp2 add coeff 0/1\n    let t51 = circuit_add(in2, t25); // Fp2 add coeff 1/1\n    let t52 = circuit_sub(t47, t50); // Fp2 sub coeff 0/1\n    let t53 = circuit_sub(t49, t51); // Fp2 sub coeff 1/1\n    let t54 = circuit_sub(t52, in1); // Fp2 sub coeff 0/1\n    let t55 = circuit_sub(t53, in2); // Fp2 sub coeff 1/1\n    let t56 = circuit_mul(t43, t54); // Fp2 mul start\n    let t57 = circuit_mul(t44, t55);\n    let t58 = circuit_sub(t56, t57); // Fp2 mul real part end\n    let t59 = circuit_mul(t43, t55);\n    let t60 = circuit_mul(t44, t54);\n    let t61 = circuit_add(t59, t60); // Fp2 mul imag part end\n    let t62 = circuit_sub(t58, in3); // Fp2 sub coeff 0/1\n    let t63 = circuit_sub(t61, in4); // Fp2 sub coeff 1/1\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t52, t53, t62, t63).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x0); // in1\n    circuit_inputs = circuit_inputs.next_2(p.x1); // in2\n    circuit_inputs = circuit_inputs.next_2(p.y0); // in3\n    circuit_inputs = circuit_inputs.next_2(p.y1); // in4\n    circuit_inputs = circuit_inputs.next_2(q.x0); // in5\n    circuit_inputs = circuit_inputs.next_2(q.x1); // in6\n    circuit_inputs = circuit_inputs.next_2(q.y0); // in7\n    circuit_inputs = circuit_inputs.next_2(q.y1); // in8\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let result: G2Point = G2Point {\n        x0: outputs.get_output(t52),\n        x1: outputs.get_output(t53),\n        y0: outputs.get_output(t62),\n        y1: outputs.get_output(t63),\n    };\n    return (result,);\n}\n#[inline(always)]\npub fn run_DOUBLE_EC_POINT_G2_A_EQ_0_circuit(\n    p: G2Point, modulus: core::circuit::CircuitModulus,\n) -> (G2Point,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x3\n    let in1 = CE::<CI<1>> {}; // 0x0\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let in5 = CE::<CI<5>> {};\n    let t0 = circuit_add(in2, in3);\n    let t1 = circuit_sub(in2, in3);\n    let t2 = circuit_mul(t0, t1);\n    let t3 = circuit_mul(in2, in3);\n    let t4 = circuit_add(t3, t3);\n    let t5 = circuit_mul(t2, in0); // Fp2 scalar mul coeff 0/1\n    let t6 = circuit_mul(t4, in0); // Fp2 scalar mul coeff 1/1\n    let t7 = circuit_add(in4, in4); // Fp2 add coeff 0/1\n    let t8 = circuit_add(in5, in5); // Fp2 add coeff 1/1\n    let t9 = circuit_mul(t7, t7); // Fp2 Inv start\n    let t10 = circuit_mul(t8, t8);\n    let t11 = circuit_add(t9, t10);\n    let t12 = circuit_inverse(t11);\n    let t13 = circuit_mul(t7, t12); // Fp2 Inv real part end\n    let t14 = circuit_mul(t8, t12);\n    let t15 = circuit_sub(in1, t14); // Fp2 Inv imag part end\n    let t16 = circuit_mul(t5, t13); // Fp2 mul start\n    let t17 = circuit_mul(t6, t15);\n    let t18 = circuit_sub(t16, t17); // Fp2 mul real part end\n    let t19 = circuit_mul(t5, t15);\n    let t20 = circuit_mul(t6, t13);\n    let t21 = circuit_add(t19, t20); // Fp2 mul imag part end\n    let t22 = circuit_add(t18, t21);\n    let t23 = circuit_sub(t18, t21);\n    let t24 = circuit_mul(t22, t23);\n    let t25 = circuit_mul(t18, t21);\n    let t26 = circuit_add(t25, t25);\n    let t27 = circuit_sub(t24, in2); // Fp2 sub coeff 0/1\n    let t28 = circuit_sub(t26, in3); // Fp2 sub coeff 1/1\n    let t29 = circuit_sub(t27, in2); // Fp2 sub coeff 0/1\n    let t30 = circuit_sub(t28, in3); // Fp2 sub coeff 1/1\n    let t31 = circuit_sub(in2, t29); // Fp2 sub coeff 0/1\n    let t32 = circuit_sub(in3, t30); // Fp2 sub coeff 1/1\n    let t33 = circuit_mul(t18, t31); // Fp2 mul start\n    let t34 = circuit_mul(t21, t32);\n    let t35 = circuit_sub(t33, t34); // Fp2 mul real part end\n    let t36 = circuit_mul(t18, t32);\n    let t37 = circuit_mul(t21, t31);\n    let t38 = circuit_add(t36, t37); // Fp2 mul imag part end\n    let t39 = circuit_sub(t35, in4); // Fp2 sub coeff 0/1\n    let t40 = circuit_sub(t38, in5); // Fp2 sub coeff 1/1\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t29, t30, t39, t40).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x0); // in2\n    circuit_inputs = circuit_inputs.next_2(p.x1); // in3\n    circuit_inputs = circuit_inputs.next_2(p.y0); // in4\n    circuit_inputs = circuit_inputs.next_2(p.y1); // in5\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let result: G2Point = G2Point {\n        x0: outputs.get_output(t29),\n        x1: outputs.get_output(t30),\n        y0: outputs.get_output(t39),\n        y1: outputs.get_output(t40),\n    };\n    return (result,);\n}\n#[inline(always)]\npub fn run_DOUBLE_EC_POINT_circuit(\n    p: G1Point, A_weirstrass: u384, modulus: core::circuit::CircuitModulus,\n) -> (G1Point,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x3\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let t0 = circuit_mul(in1, in1);\n    let t1 = circuit_mul(in0, t0);\n    let t2 = circuit_add(t1, in3);\n    let t3 = circuit_add(in2, in2);\n    let t4 = circuit_inverse(t3);\n    let t5 = circuit_mul(t2, t4);\n    let t6 = circuit_mul(t5, t5);\n    let t7 = circuit_sub(t6, in1);\n    let t8 = circuit_sub(t7, in1);\n    let t9 = circuit_sub(in1, t8);\n    let t10 = circuit_mul(t5, t9);\n    let t11 = circuit_sub(t10, in2);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t8, t11).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x); // in1\n    circuit_inputs = circuit_inputs.next_2(p.y); // in2\n    circuit_inputs = circuit_inputs.next_2(A_weirstrass); // in3\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let r: G1Point = G1Point { x: outputs.get_output(t8), y: outputs.get_output(t11) };\n    return (r,);\n}\n#[inline(always)]\npub fn run_IS_ON_CURVE_G1_G2_circuit(\n    p: G1Point, q: G2Point, a: u384, b: u384, b20: u384, b21: u384, curve_index: usize,\n) -> (u384, u384, u384) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let in9 = CE::<CI<9>> {};\n    let t0 = circuit_mul(in1, in1);\n    let t1 = circuit_mul(in0, in0);\n    let t2 = circuit_mul(in0, t1);\n    let t3 = circuit_add(t2, in7);\n    let t4 = circuit_add(in4, in5);\n    let t5 = circuit_sub(in4, in5);\n    let t6 = circuit_mul(t4, t5);\n    let t7 = circuit_mul(in4, in5);\n    let t8 = circuit_add(t7, t7);\n    let t9 = circuit_add(in2, in3);\n    let t10 = circuit_sub(in2, in3);\n    let t11 = circuit_mul(t9, t10);\n    let t12 = circuit_mul(in2, in3);\n    let t13 = circuit_add(t12, t12);\n    let t14 = circuit_mul(in2, t11); // Fp2 mul start\n    let t15 = circuit_mul(in3, t13);\n    let t16 = circuit_sub(t14, t15); // Fp2 mul real part end\n    let t17 = circuit_mul(in2, t13);\n    let t18 = circuit_mul(in3, t11);\n    let t19 = circuit_add(t17, t18); // Fp2 mul imag part end\n    let t20 = circuit_mul(in6, in2);\n    let t21 = circuit_mul(in6, in3);\n    let t22 = circuit_add(t20, in8);\n    let t23 = circuit_add(t21, in9);\n    let t24 = circuit_add(t16, t22);\n    let t25 = circuit_add(t19, t23);\n    let t26 = circuit_sub(t0, t3);\n    let t27 = circuit_sub(t6, t24);\n    let t28 = circuit_sub(t8, t25);\n\n    let modulus = crate::definitions::get_modulus(curve_index);\n\n    let mut circuit_inputs = (t26, t27, t28).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x); // in0\n    circuit_inputs = circuit_inputs.next_2(p.y); // in1\n    circuit_inputs = circuit_inputs.next_2(q.x0); // in2\n    circuit_inputs = circuit_inputs.next_2(q.x1); // in3\n    circuit_inputs = circuit_inputs.next_2(q.y0); // in4\n    circuit_inputs = circuit_inputs.next_2(q.y1); // in5\n    circuit_inputs = circuit_inputs.next_2(a); // in6\n    circuit_inputs = circuit_inputs.next_2(b); // in7\n    circuit_inputs = circuit_inputs.next_2(b20); // in8\n    circuit_inputs = circuit_inputs.next_2(b21); // in9\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let zero_check_0: u384 = outputs.get_output(t26);\n    let zero_check_1: u384 = outputs.get_output(t27);\n    let zero_check_2: u384 = outputs.get_output(t28);\n    return (zero_check_0, zero_check_1, zero_check_2);\n}\n#[inline(always)]\npub fn run_IS_ON_CURVE_G1_circuit(p: G1Point, a: u384, b: u384, curve_index: usize) -> (u384,) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let in3 = CE::<CI<3>> {};\n    let t0 = circuit_mul(in1, in1);\n    let t1 = circuit_mul(in0, in0);\n    let t2 = circuit_mul(in0, t1);\n    let t3 = circuit_mul(in2, in0);\n    let t4 = circuit_add(t3, in3);\n    let t5 = circuit_add(t2, t4);\n    let t6 = circuit_sub(t0, t5);\n\n    let modulus = crate::definitions::get_modulus(curve_index);\n\n    let mut circuit_inputs = (t6,).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x); // in0\n    circuit_inputs = circuit_inputs.next_2(p.y); // in1\n    circuit_inputs = circuit_inputs.next_2(a); // in2\n    circuit_inputs = circuit_inputs.next_2(b); // in3\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let zero_check: u384 = outputs.get_output(t6);\n    return (zero_check,);\n}\n#[inline(always)]\npub fn run_IS_ON_CURVE_G2_circuit(\n    p: G2Point, a: u384, b20: u384, b21: u384, curve_index: usize,\n) -> (u384, u384) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let in6 = CE::<CI<6>> {};\n    let t0 = circuit_add(in2, in3);\n    let t1 = circuit_sub(in2, in3);\n    let t2 = circuit_mul(t0, t1);\n    let t3 = circuit_mul(in2, in3);\n    let t4 = circuit_add(t3, t3);\n    let t5 = circuit_add(in0, in1);\n    let t6 = circuit_sub(in0, in1);\n    let t7 = circuit_mul(t5, t6);\n    let t8 = circuit_mul(in0, in1);\n    let t9 = circuit_add(t8, t8);\n    let t10 = circuit_mul(in0, t7); // Fp2 mul start\n    let t11 = circuit_mul(in1, t9);\n    let t12 = circuit_sub(t10, t11); // Fp2 mul real part end\n    let t13 = circuit_mul(in0, t9);\n    let t14 = circuit_mul(in1, t7);\n    let t15 = circuit_add(t13, t14); // Fp2 mul imag part end\n    let t16 = circuit_mul(in4, in0);\n    let t17 = circuit_mul(in4, in1);\n    let t18 = circuit_add(t16, in5);\n    let t19 = circuit_add(t17, in6);\n    let t20 = circuit_add(t12, t18);\n    let t21 = circuit_add(t15, t19);\n    let t22 = circuit_sub(t2, t20);\n    let t23 = circuit_sub(t4, t21);\n\n    let modulus = crate::definitions::get_modulus(curve_index);\n\n    let mut circuit_inputs = (t22, t23).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x0); // in0\n    circuit_inputs = circuit_inputs.next_2(p.x1); // in1\n    circuit_inputs = circuit_inputs.next_2(p.y0); // in2\n    circuit_inputs = circuit_inputs.next_2(p.y1); // in3\n    circuit_inputs = circuit_inputs.next_2(a); // in4\n    circuit_inputs = circuit_inputs.next_2(b20); // in5\n    circuit_inputs = circuit_inputs.next_2(b21); // in6\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let zero_check_0: u384 = outputs.get_output(t22);\n    let zero_check_1: u384 = outputs.get_output(t23);\n    return (zero_check_0, zero_check_1);\n}\n#[inline(always)]\npub fn run_PREPARE_FAKE_GLV_PTS_circuit(\n    P: G1Point,\n    Q: G1Point,\n    s2_sign: u384,\n    A_weirstrass: u384,\n    modulus: core::circuit::CircuitModulus,\n) -> (\n    G1Point,\n    G1Point,\n    G1Point,\n    G1Point,\n    u384,\n    u384,\n    u384,\n    u384,\n    G1Point,\n    G1Point,\n    G1Point,\n    G1Point,\n    u384,\n    u384,\n    u384,\n    u384,\n    G1Point,\n    u384,\n) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let t0 = circuit_mul(in1, in1);\n    let t1 = circuit_add(t0, t0);\n    let t2 = circuit_add(t1, t0);\n    let t3 = circuit_add(t2, in6);\n    let t4 = circuit_add(in2, in2);\n    let t5 = circuit_inverse(t4);\n    let t6 = circuit_mul(t3, t5);\n    let t7 = circuit_mul(t6, t6);\n    let t8 = circuit_add(in1, in1);\n    let t9 = circuit_sub(t7, t8);\n    let t10 = circuit_sub(in1, t9);\n    let t11 = circuit_add(in2, in2);\n    let t12 = circuit_inverse(t10);\n    let t13 = circuit_mul(t11, t12);\n    let t14 = circuit_sub(t13, t6);\n    let t15 = circuit_mul(t14, t14);\n    let t16 = circuit_add(in1, t9);\n    let t17 = circuit_sub(t15, t16);\n    let t18 = circuit_sub(in1, t17);\n    let t19 = circuit_mul(t14, t18);\n    let t20 = circuit_sub(t19, in2);\n    let t21 = circuit_mul(in5, in4);\n    let t22 = circuit_sub(in0, t21);\n    let t23 = circuit_mul(in3, in3);\n    let t24 = circuit_add(t23, t23);\n    let t25 = circuit_add(t24, t23);\n    let t26 = circuit_add(t25, in6);\n    let t27 = circuit_add(t21, t21);\n    let t28 = circuit_inverse(t27);\n    let t29 = circuit_mul(t26, t28);\n    let t30 = circuit_mul(t29, t29);\n    let t31 = circuit_add(in3, in3);\n    let t32 = circuit_sub(t30, t31);\n    let t33 = circuit_sub(in3, t32);\n    let t34 = circuit_add(t21, t21);\n    let t35 = circuit_inverse(t33);\n    let t36 = circuit_mul(t34, t35);\n    let t37 = circuit_sub(t36, t29);\n    let t38 = circuit_mul(t37, t37);\n    let t39 = circuit_add(in3, t32);\n    let t40 = circuit_sub(t38, t39);\n    let t41 = circuit_sub(in3, t40);\n    let t42 = circuit_mul(t37, t41);\n    let t43 = circuit_sub(t42, t21);\n    let t44 = circuit_sub(t20, t43);\n    let t45 = circuit_sub(t17, t40);\n    let t46 = circuit_inverse(t45);\n    let t47 = circuit_mul(t44, t46);\n    let t48 = circuit_mul(t47, t47);\n    let t49 = circuit_sub(t48, t17);\n    let t50 = circuit_sub(t49, t40);\n    let t51 = circuit_sub(t17, t50);\n    let t52 = circuit_mul(t47, t51);\n    let t53 = circuit_sub(t52, t20);\n    let t54 = circuit_sub(in2, t21);\n    let t55 = circuit_sub(in1, in3);\n    let t56 = circuit_inverse(t55);\n    let t57 = circuit_mul(t54, t56);\n    let t58 = circuit_mul(t57, t57);\n    let t59 = circuit_sub(t58, in1);\n    let t60 = circuit_sub(t59, in3);\n    let t61 = circuit_sub(in1, t60);\n    let t62 = circuit_mul(t57, t61);\n    let t63 = circuit_sub(t62, in2);\n    let t64 = circuit_sub(t20, t21);\n    let t65 = circuit_sub(t17, in3);\n    let t66 = circuit_inverse(t65);\n    let t67 = circuit_mul(t64, t66);\n    let t68 = circuit_mul(t67, t67);\n    let t69 = circuit_sub(t68, t17);\n    let t70 = circuit_sub(t69, in3);\n    let t71 = circuit_sub(t17, t70);\n    let t72 = circuit_mul(t67, t71);\n    let t73 = circuit_sub(t72, t20);\n    let t74 = circuit_sub(in2, t43);\n    let t75 = circuit_sub(in1, t40);\n    let t76 = circuit_inverse(t75);\n    let t77 = circuit_mul(t74, t76);\n    let t78 = circuit_mul(t77, t77);\n    let t79 = circuit_sub(t78, in1);\n    let t80 = circuit_sub(t79, t40);\n    let t81 = circuit_sub(in1, t80);\n    let t82 = circuit_mul(t77, t81);\n    let t83 = circuit_sub(t82, in2);\n    let t84 = circuit_sub(in0, t63);\n    let t85 = circuit_sub(in0, t53);\n    let t86 = circuit_sub(in0, t83);\n    let t87 = circuit_sub(in0, t73);\n    let t88 = circuit_sub(t20, t22);\n    let t89 = circuit_sub(t17, in3);\n    let t90 = circuit_inverse(t89);\n    let t91 = circuit_mul(t88, t90);\n    let t92 = circuit_mul(t91, t91);\n    let t93 = circuit_sub(t92, t17);\n    let t94 = circuit_sub(t93, in3);\n    let t95 = circuit_sub(t17, t94);\n    let t96 = circuit_mul(t91, t95);\n    let t97 = circuit_sub(t96, t20);\n    let t98 = circuit_sub(in0, t43);\n    let t99 = circuit_sub(in2, t98);\n    let t100 = circuit_sub(in1, t40);\n    let t101 = circuit_inverse(t100);\n    let t102 = circuit_mul(t99, t101);\n    let t103 = circuit_mul(t102, t102);\n    let t104 = circuit_sub(t103, in1);\n    let t105 = circuit_sub(t104, t40);\n    let t106 = circuit_sub(in1, t105);\n    let t107 = circuit_mul(t102, t106);\n    let t108 = circuit_sub(t107, in2);\n    let t109 = circuit_sub(t20, t98);\n    let t110 = circuit_sub(t17, t40);\n    let t111 = circuit_inverse(t110);\n    let t112 = circuit_mul(t109, t111);\n    let t113 = circuit_mul(t112, t112);\n    let t114 = circuit_sub(t113, t17);\n    let t115 = circuit_sub(t114, t40);\n    let t116 = circuit_sub(t17, t115);\n    let t117 = circuit_mul(t112, t116);\n    let t118 = circuit_sub(t117, t20);\n    let t119 = circuit_sub(t22, in2);\n    let t120 = circuit_sub(in3, in1);\n    let t121 = circuit_inverse(t120);\n    let t122 = circuit_mul(t119, t121);\n    let t123 = circuit_mul(t122, t122);\n    let t124 = circuit_sub(t123, in3);\n    let t125 = circuit_sub(t124, in1);\n    let t126 = circuit_sub(in3, t125);\n    let t127 = circuit_mul(t122, t126);\n    let t128 = circuit_sub(t127, t22);\n    let t129 = circuit_sub(in0, t108);\n    let t130 = circuit_sub(in0, t97);\n    let t131 = circuit_sub(in0, t128);\n    let t132 = circuit_sub(in0, t118);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (\n        t50,\n        t53,\n        t60,\n        t63,\n        t70,\n        t73,\n        t80,\n        t83,\n        t84,\n        t85,\n        t86,\n        t87,\n        t94,\n        t97,\n        t105,\n        t108,\n        t115,\n        t118,\n        t125,\n        t128,\n        t129,\n        t130,\n        t131,\n        t132,\n        t40,\n        t43,\n        t22,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(P.x); // in1\n    circuit_inputs = circuit_inputs.next_2(P.y); // in2\n    circuit_inputs = circuit_inputs.next_2(Q.x); // in3\n    circuit_inputs = circuit_inputs.next_2(Q.y); // in4\n    circuit_inputs = circuit_inputs.next_2(s2_sign); // in5\n    circuit_inputs = circuit_inputs.next_2(A_weirstrass); // in6\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let T1: G1Point = G1Point { x: outputs.get_output(t50), y: outputs.get_output(t53) };\n    let T2: G1Point = G1Point { x: outputs.get_output(t60), y: outputs.get_output(t63) };\n    let T3: G1Point = G1Point { x: outputs.get_output(t70), y: outputs.get_output(t73) };\n    let T4: G1Point = G1Point { x: outputs.get_output(t80), y: outputs.get_output(t83) };\n    let T5y: u384 = outputs.get_output(t84);\n    let T6y: u384 = outputs.get_output(t85);\n    let T7y: u384 = outputs.get_output(t86);\n    let T8y: u384 = outputs.get_output(t87);\n    let T9: G1Point = G1Point { x: outputs.get_output(t94), y: outputs.get_output(t97) };\n    let T10: G1Point = G1Point { x: outputs.get_output(t105), y: outputs.get_output(t108) };\n    let T11: G1Point = G1Point { x: outputs.get_output(t115), y: outputs.get_output(t118) };\n    let T12: G1Point = G1Point { x: outputs.get_output(t125), y: outputs.get_output(t128) };\n    let T13y: u384 = outputs.get_output(t129);\n    let T14y: u384 = outputs.get_output(t130);\n    let T15y: u384 = outputs.get_output(t131);\n    let T16y: u384 = outputs.get_output(t132);\n    let R2: G1Point = G1Point { x: outputs.get_output(t40), y: outputs.get_output(t43) };\n    let R0y: u384 = outputs.get_output(t22);\n    return (T1, T2, T3, T4, T5y, T6y, T7y, T8y, T9, T10, T11, T12, T13y, T14y, T15y, T16y, R2, R0y);\n}\n#[inline(always)]\npub fn run_PREPARE_GLV_FAKE_GLV_PTS_circuit(\n    Px: u384,\n    P0y: u384,\n    P1y: u384,\n    Qx: u384,\n    Q0y: u384,\n    Phi_P0y: u384,\n    Phi_P1y: u384,\n    Phi_Q0y: u384,\n    Gen: G1Point,\n    third_root: u384,\n    modulus: core::circuit::CircuitModulus,\n) -> (\n    G1Point,\n    G1Point,\n    G1Point,\n    G1Point,\n    G1Point,\n    G1Point,\n    G1Point,\n    G1Point,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    G1Point,\n) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8, in9) = (CE::<CI<7>> {}, CE::<CI<8>> {}, CE::<CI<9>> {});\n    let (in10, in11) = (CE::<CI<10>> {}, CE::<CI<11>> {});\n    let t0 = circuit_sub(in2, in5);\n    let t1 = circuit_sub(in1, in4);\n    let t2 = circuit_inverse(t1);\n    let t3 = circuit_mul(t0, t2);\n    let t4 = circuit_mul(t3, t3);\n    let t5 = circuit_sub(t4, in1);\n    let t6 = circuit_sub(t5, in4);\n    let t7 = circuit_sub(in1, t6);\n    let t8 = circuit_mul(t3, t7);\n    let t9 = circuit_sub(t8, in2);\n    let t10 = circuit_sub(in0, t9);\n    let t11 = circuit_sub(in3, in5);\n    let t12 = circuit_sub(in1, in4);\n    let t13 = circuit_inverse(t12);\n    let t14 = circuit_mul(t11, t13);\n    let t15 = circuit_mul(t14, t14);\n    let t16 = circuit_sub(t15, in1);\n    let t17 = circuit_sub(t16, in4);\n    let t18 = circuit_sub(in1, t17);\n    let t19 = circuit_mul(t14, t18);\n    let t20 = circuit_sub(t19, in3);\n    let t21 = circuit_mul(in1, in11);\n    let t22 = circuit_mul(in4, in11);\n    let t23 = circuit_sub(in6, in8);\n    let t24 = circuit_sub(t21, t22);\n    let t25 = circuit_inverse(t24);\n    let t26 = circuit_mul(t23, t25);\n    let t27 = circuit_mul(t26, t26);\n    let t28 = circuit_sub(t27, t21);\n    let t29 = circuit_sub(t28, t22);\n    let t30 = circuit_sub(t21, t29);\n    let t31 = circuit_mul(t26, t30);\n    let t32 = circuit_sub(t31, in6);\n    let t33 = circuit_sub(in0, t32);\n    let t34 = circuit_sub(in7, in8);\n    let t35 = circuit_sub(t21, t22);\n    let t36 = circuit_inverse(t35);\n    let t37 = circuit_mul(t34, t36);\n    let t38 = circuit_mul(t37, t37);\n    let t39 = circuit_sub(t38, t21);\n    let t40 = circuit_sub(t39, t22);\n    let t41 = circuit_sub(t21, t40);\n    let t42 = circuit_mul(t37, t41);\n    let t43 = circuit_sub(t42, in7);\n    let t44 = circuit_sub(in0, t43);\n    let t45 = circuit_sub(t10, t33);\n    let t46 = circuit_sub(t6, t29);\n    let t47 = circuit_inverse(t46);\n    let t48 = circuit_mul(t45, t47);\n    let t49 = circuit_mul(t48, t48);\n    let t50 = circuit_sub(t49, t6);\n    let t51 = circuit_sub(t50, t29);\n    let t52 = circuit_sub(t6, t51);\n    let t53 = circuit_mul(t48, t52);\n    let t54 = circuit_sub(t53, t10);\n    let t55 = circuit_sub(t10, t43);\n    let t56 = circuit_sub(t6, t40);\n    let t57 = circuit_inverse(t56);\n    let t58 = circuit_mul(t55, t57);\n    let t59 = circuit_mul(t58, t58);\n    let t60 = circuit_sub(t59, t6);\n    let t61 = circuit_sub(t60, t40);\n    let t62 = circuit_sub(t6, t61);\n    let t63 = circuit_mul(t58, t62);\n    let t64 = circuit_sub(t63, t10);\n    let t65 = circuit_sub(t10, t44);\n    let t66 = circuit_sub(t6, t40);\n    let t67 = circuit_inverse(t66);\n    let t68 = circuit_mul(t65, t67);\n    let t69 = circuit_mul(t68, t68);\n    let t70 = circuit_sub(t69, t6);\n    let t71 = circuit_sub(t70, t40);\n    let t72 = circuit_sub(t6, t71);\n    let t73 = circuit_mul(t68, t72);\n    let t74 = circuit_sub(t73, t10);\n    let t75 = circuit_sub(t10, t32);\n    let t76 = circuit_sub(t6, t29);\n    let t77 = circuit_inverse(t76);\n    let t78 = circuit_mul(t75, t77);\n    let t79 = circuit_mul(t78, t78);\n    let t80 = circuit_sub(t79, t6);\n    let t81 = circuit_sub(t80, t29);\n    let t82 = circuit_sub(t6, t81);\n    let t83 = circuit_mul(t78, t82);\n    let t84 = circuit_sub(t83, t10);\n    let t85 = circuit_sub(t20, t33);\n    let t86 = circuit_sub(t17, t29);\n    let t87 = circuit_inverse(t86);\n    let t88 = circuit_mul(t85, t87);\n    let t89 = circuit_mul(t88, t88);\n    let t90 = circuit_sub(t89, t17);\n    let t91 = circuit_sub(t90, t29);\n    let t92 = circuit_sub(t17, t91);\n    let t93 = circuit_mul(t88, t92);\n    let t94 = circuit_sub(t93, t20);\n    let t95 = circuit_sub(t20, t43);\n    let t96 = circuit_sub(t17, t40);\n    let t97 = circuit_inverse(t96);\n    let t98 = circuit_mul(t95, t97);\n    let t99 = circuit_mul(t98, t98);\n    let t100 = circuit_sub(t99, t17);\n    let t101 = circuit_sub(t100, t40);\n    let t102 = circuit_sub(t17, t101);\n    let t103 = circuit_mul(t98, t102);\n    let t104 = circuit_sub(t103, t20);\n    let t105 = circuit_sub(t20, t44);\n    let t106 = circuit_sub(t17, t40);\n    let t107 = circuit_inverse(t106);\n    let t108 = circuit_mul(t105, t107);\n    let t109 = circuit_mul(t108, t108);\n    let t110 = circuit_sub(t109, t17);\n    let t111 = circuit_sub(t110, t40);\n    let t112 = circuit_sub(t17, t111);\n    let t113 = circuit_mul(t108, t112);\n    let t114 = circuit_sub(t113, t20);\n    let t115 = circuit_sub(t20, t32);\n    let t116 = circuit_sub(t17, t29);\n    let t117 = circuit_inverse(t116);\n    let t118 = circuit_mul(t115, t117);\n    let t119 = circuit_mul(t118, t118);\n    let t120 = circuit_sub(t119, t17);\n    let t121 = circuit_sub(t120, t29);\n    let t122 = circuit_sub(t17, t121);\n    let t123 = circuit_mul(t118, t122);\n    let t124 = circuit_sub(t123, t20);\n    let t125 = circuit_sub(in0, t124);\n    let t126 = circuit_sub(in0, t114);\n    let t127 = circuit_sub(in0, t104);\n    let t128 = circuit_sub(in0, t94);\n    let t129 = circuit_sub(in0, t84);\n    let t130 = circuit_sub(in0, t74);\n    let t131 = circuit_sub(in0, t64);\n    let t132 = circuit_sub(in0, t54);\n    let t133 = circuit_sub(t54, in10);\n    let t134 = circuit_sub(t51, in9);\n    let t135 = circuit_inverse(t134);\n    let t136 = circuit_mul(t133, t135);\n    let t137 = circuit_mul(t136, t136);\n    let t138 = circuit_sub(t137, t51);\n    let t139 = circuit_sub(t138, in9);\n    let t140 = circuit_sub(t51, t139);\n    let t141 = circuit_mul(t136, t140);\n    let t142 = circuit_sub(t141, t54);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (\n        t51,\n        t54,\n        t61,\n        t64,\n        t71,\n        t74,\n        t81,\n        t84,\n        t91,\n        t94,\n        t101,\n        t104,\n        t111,\n        t114,\n        t121,\n        t124,\n        t125,\n        t126,\n        t127,\n        t128,\n        t129,\n        t130,\n        t131,\n        t132,\n        t21,\n        t22,\n        t139,\n        t142,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(Px); // in1\n    circuit_inputs = circuit_inputs.next_2(P0y); // in2\n    circuit_inputs = circuit_inputs.next_2(P1y); // in3\n    circuit_inputs = circuit_inputs.next_2(Qx); // in4\n    circuit_inputs = circuit_inputs.next_2(Q0y); // in5\n    circuit_inputs = circuit_inputs.next_2(Phi_P0y); // in6\n    circuit_inputs = circuit_inputs.next_2(Phi_P1y); // in7\n    circuit_inputs = circuit_inputs.next_2(Phi_Q0y); // in8\n    circuit_inputs = circuit_inputs.next_2(Gen.x); // in9\n    circuit_inputs = circuit_inputs.next_2(Gen.y); // in10\n    circuit_inputs = circuit_inputs.next_2(third_root); // in11\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let B1: G1Point = G1Point { x: outputs.get_output(t51), y: outputs.get_output(t54) };\n    let B2: G1Point = G1Point { x: outputs.get_output(t61), y: outputs.get_output(t64) };\n    let B3: G1Point = G1Point { x: outputs.get_output(t71), y: outputs.get_output(t74) };\n    let B4: G1Point = G1Point { x: outputs.get_output(t81), y: outputs.get_output(t84) };\n    let B5: G1Point = G1Point { x: outputs.get_output(t91), y: outputs.get_output(t94) };\n    let B6: G1Point = G1Point { x: outputs.get_output(t101), y: outputs.get_output(t104) };\n    let B7: G1Point = G1Point { x: outputs.get_output(t111), y: outputs.get_output(t114) };\n    let B8: G1Point = G1Point { x: outputs.get_output(t121), y: outputs.get_output(t124) };\n    let B9y: u384 = outputs.get_output(t125);\n    let B10y: u384 = outputs.get_output(t126);\n    let B11y: u384 = outputs.get_output(t127);\n    let B12y: u384 = outputs.get_output(t128);\n    let B13y: u384 = outputs.get_output(t129);\n    let B14y: u384 = outputs.get_output(t130);\n    let B15y: u384 = outputs.get_output(t131);\n    let B16y: u384 = outputs.get_output(t132);\n    let Phi_P0x: u384 = outputs.get_output(t21);\n    let Phi_Q0x: u384 = outputs.get_output(t22);\n    let Acc: G1Point = G1Point { x: outputs.get_output(t139), y: outputs.get_output(t142) };\n    return (\n        B1,\n        B2,\n        B3,\n        B4,\n        B5,\n        B6,\n        B7,\n        B8,\n        B9y,\n        B10y,\n        B11y,\n        B12y,\n        B13y,\n        B14y,\n        B15y,\n        B16y,\n        Phi_P0x,\n        Phi_Q0x,\n        Acc,\n    );\n}\n#[inline(always)]\npub fn run_PSI_G2_BLS12_381_circuit(\n    p: G2Point, modulus: core::circuit::CircuitModulus,\n) -> (G2Point,) {\n    // CONSTANT stack\n    let in0 = CE::<\n        CI<0>,\n    > {}; // 0x1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaad\n    let in1 = CE::<\n        CI<1>,\n    > {}; // 0x135203e60180a68ee2e9c448d77a2cd91c3dedd930b1cf60ef396489f61eb45e304466cf3e67fa0af1ee7b04121bdea2\n    let in2 = CE::<\n        CI<2>,\n    > {}; // 0x6af0e0437ff400b6831e36d6bd17ffe48395dabc2d3435e77f76e17009241c5ee67992f72ec05f4c81084fbede3cc09\n    let in3 = CE::<CI<3>> {}; // 0x0\n\n    // INPUT stack\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let in7 = CE::<CI<7>> {};\n    let t0 = circuit_mul(in5, in0);\n    let t1 = circuit_mul(in4, in0);\n    let t2 = circuit_sub(in3, in7);\n    let t3 = circuit_mul(in6, in1); // Fp2 mul start\n    let t4 = circuit_mul(t2, in2);\n    let t5 = circuit_sub(t3, t4); // Fp2 mul real part end\n    let t6 = circuit_mul(in6, in2);\n    let t7 = circuit_mul(t2, in1);\n    let t8 = circuit_add(t6, t7); // Fp2 mul imag part end\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t0, t1, t5, t8).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0x4f49fffd8bfd00000000aaad, 0x897d29650fb85f9b409427eb, 0x63d4de85aa0d857d89759ad4,\n                0x1a0111ea397fe699ec024086,\n            ],\n        ); // in0\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0x3e67fa0af1ee7b04121bdea2, 0xef396489f61eb45e304466cf, 0xd77a2cd91c3dedd930b1cf60,\n                0x135203e60180a68ee2e9c448,\n            ],\n        ); // in1\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0x72ec05f4c81084fbede3cc09, 0x77f76e17009241c5ee67992f, 0x6bd17ffe48395dabc2d3435e,\n                0x6af0e0437ff400b6831e36d,\n            ],\n        ); // in2\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in3\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p.x0); // in4\n    circuit_inputs = circuit_inputs.next_2(p.x1); // in5\n    circuit_inputs = circuit_inputs.next_2(p.y0); // in6\n    circuit_inputs = circuit_inputs.next_2(p.y1); // in7\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let result: G2Point = G2Point {\n        x0: outputs.get_output(t0),\n        x1: outputs.get_output(t1),\n        y0: outputs.get_output(t5),\n        y1: outputs.get_output(t8),\n    };\n    return (result,);\n}\n#[inline(always)]\npub fn run_QUADRUPLE_AND_ADD_9_circuit(\n    P: G1Point,\n    Q_1: G1Point,\n    Q_2: G1Point,\n    Q_3: G1Point,\n    Q_4: G1Point,\n    Q_5: G1Point,\n    Q_6: G1Point,\n    Q_7: G1Point,\n    Q_8: G1Point,\n    Q_9: G1Point,\n    A_weirstrass: u384,\n    modulus: core::circuit::CircuitModulus,\n) -> (G1Point,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x3\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8, in9) = (CE::<CI<7>> {}, CE::<CI<8>> {}, CE::<CI<9>> {});\n    let (in10, in11, in12) = (CE::<CI<10>> {}, CE::<CI<11>> {}, CE::<CI<12>> {});\n    let (in13, in14, in15) = (CE::<CI<13>> {}, CE::<CI<14>> {}, CE::<CI<15>> {});\n    let (in16, in17, in18) = (CE::<CI<16>> {}, CE::<CI<17>> {}, CE::<CI<18>> {});\n    let (in19, in20, in21) = (CE::<CI<19>> {}, CE::<CI<20>> {}, CE::<CI<21>> {});\n    let t0 = circuit_mul(in1, in1);\n    let t1 = circuit_mul(in0, t0);\n    let t2 = circuit_add(t1, in21);\n    let t3 = circuit_add(in2, in2);\n    let t4 = circuit_inverse(t3);\n    let t5 = circuit_mul(t2, t4);\n    let t6 = circuit_mul(t5, t5);\n    let t7 = circuit_sub(t6, in1);\n    let t8 = circuit_sub(t7, in1);\n    let t9 = circuit_sub(in1, t8);\n    let t10 = circuit_mul(t5, t9);\n    let t11 = circuit_sub(t10, in2);\n    let t12 = circuit_sub(in4, t11);\n    let t13 = circuit_sub(in3, t8);\n    let t14 = circuit_inverse(t13);\n    let t15 = circuit_mul(t12, t14);\n    let t16 = circuit_mul(t15, t15);\n    let t17 = circuit_add(t8, in3);\n    let t18 = circuit_sub(t16, t17);\n    let t19 = circuit_add(t11, t11);\n    let t20 = circuit_sub(t18, t8);\n    let t21 = circuit_inverse(t20);\n    let t22 = circuit_mul(t19, t21);\n    let t23 = circuit_add(t15, t22);\n    let t24 = circuit_mul(t23, t23);\n    let t25 = circuit_add(t8, t18);\n    let t26 = circuit_sub(t24, t25);\n    let t27 = circuit_sub(t26, t8);\n    let t28 = circuit_mul(t23, t27);\n    let t29 = circuit_sub(t28, t11);\n    let t30 = circuit_mul(t26, t26);\n    let t31 = circuit_mul(in0, t30);\n    let t32 = circuit_add(t31, in21);\n    let t33 = circuit_add(t29, t29);\n    let t34 = circuit_inverse(t33);\n    let t35 = circuit_mul(t32, t34);\n    let t36 = circuit_mul(t35, t35);\n    let t37 = circuit_sub(t36, t26);\n    let t38 = circuit_sub(t37, t26);\n    let t39 = circuit_sub(t26, t38);\n    let t40 = circuit_mul(t35, t39);\n    let t41 = circuit_sub(t40, t29);\n    let t42 = circuit_sub(in6, t41);\n    let t43 = circuit_sub(in5, t38);\n    let t44 = circuit_inverse(t43);\n    let t45 = circuit_mul(t42, t44);\n    let t46 = circuit_mul(t45, t45);\n    let t47 = circuit_add(t38, in5);\n    let t48 = circuit_sub(t46, t47);\n    let t49 = circuit_add(t41, t41);\n    let t50 = circuit_sub(t48, t38);\n    let t51 = circuit_inverse(t50);\n    let t52 = circuit_mul(t49, t51);\n    let t53 = circuit_add(t45, t52);\n    let t54 = circuit_mul(t53, t53);\n    let t55 = circuit_add(t38, t48);\n    let t56 = circuit_sub(t54, t55);\n    let t57 = circuit_sub(t56, t38);\n    let t58 = circuit_mul(t53, t57);\n    let t59 = circuit_sub(t58, t41);\n    let t60 = circuit_mul(t56, t56);\n    let t61 = circuit_mul(in0, t60);\n    let t62 = circuit_add(t61, in21);\n    let t63 = circuit_add(t59, t59);\n    let t64 = circuit_inverse(t63);\n    let t65 = circuit_mul(t62, t64);\n    let t66 = circuit_mul(t65, t65);\n    let t67 = circuit_sub(t66, t56);\n    let t68 = circuit_sub(t67, t56);\n    let t69 = circuit_sub(t56, t68);\n    let t70 = circuit_mul(t65, t69);\n    let t71 = circuit_sub(t70, t59);\n    let t72 = circuit_sub(in8, t71);\n    let t73 = circuit_sub(in7, t68);\n    let t74 = circuit_inverse(t73);\n    let t75 = circuit_mul(t72, t74);\n    let t76 = circuit_mul(t75, t75);\n    let t77 = circuit_add(t68, in7);\n    let t78 = circuit_sub(t76, t77);\n    let t79 = circuit_add(t71, t71);\n    let t80 = circuit_sub(t78, t68);\n    let t81 = circuit_inverse(t80);\n    let t82 = circuit_mul(t79, t81);\n    let t83 = circuit_add(t75, t82);\n    let t84 = circuit_mul(t83, t83);\n    let t85 = circuit_add(t68, t78);\n    let t86 = circuit_sub(t84, t85);\n    let t87 = circuit_sub(t86, t68);\n    let t88 = circuit_mul(t83, t87);\n    let t89 = circuit_sub(t88, t71);\n    let t90 = circuit_mul(t86, t86);\n    let t91 = circuit_mul(in0, t90);\n    let t92 = circuit_add(t91, in21);\n    let t93 = circuit_add(t89, t89);\n    let t94 = circuit_inverse(t93);\n    let t95 = circuit_mul(t92, t94);\n    let t96 = circuit_mul(t95, t95);\n    let t97 = circuit_sub(t96, t86);\n    let t98 = circuit_sub(t97, t86);\n    let t99 = circuit_sub(t86, t98);\n    let t100 = circuit_mul(t95, t99);\n    let t101 = circuit_sub(t100, t89);\n    let t102 = circuit_sub(in10, t101);\n    let t103 = circuit_sub(in9, t98);\n    let t104 = circuit_inverse(t103);\n    let t105 = circuit_mul(t102, t104);\n    let t106 = circuit_mul(t105, t105);\n    let t107 = circuit_add(t98, in9);\n    let t108 = circuit_sub(t106, t107);\n    let t109 = circuit_add(t101, t101);\n    let t110 = circuit_sub(t108, t98);\n    let t111 = circuit_inverse(t110);\n    let t112 = circuit_mul(t109, t111);\n    let t113 = circuit_add(t105, t112);\n    let t114 = circuit_mul(t113, t113);\n    let t115 = circuit_add(t98, t108);\n    let t116 = circuit_sub(t114, t115);\n    let t117 = circuit_sub(t116, t98);\n    let t118 = circuit_mul(t113, t117);\n    let t119 = circuit_sub(t118, t101);\n    let t120 = circuit_mul(t116, t116);\n    let t121 = circuit_mul(in0, t120);\n    let t122 = circuit_add(t121, in21);\n    let t123 = circuit_add(t119, t119);\n    let t124 = circuit_inverse(t123);\n    let t125 = circuit_mul(t122, t124);\n    let t126 = circuit_mul(t125, t125);\n    let t127 = circuit_sub(t126, t116);\n    let t128 = circuit_sub(t127, t116);\n    let t129 = circuit_sub(t116, t128);\n    let t130 = circuit_mul(t125, t129);\n    let t131 = circuit_sub(t130, t119);\n    let t132 = circuit_sub(in12, t131);\n    let t133 = circuit_sub(in11, t128);\n    let t134 = circuit_inverse(t133);\n    let t135 = circuit_mul(t132, t134);\n    let t136 = circuit_mul(t135, t135);\n    let t137 = circuit_add(t128, in11);\n    let t138 = circuit_sub(t136, t137);\n    let t139 = circuit_add(t131, t131);\n    let t140 = circuit_sub(t138, t128);\n    let t141 = circuit_inverse(t140);\n    let t142 = circuit_mul(t139, t141);\n    let t143 = circuit_add(t135, t142);\n    let t144 = circuit_mul(t143, t143);\n    let t145 = circuit_add(t128, t138);\n    let t146 = circuit_sub(t144, t145);\n    let t147 = circuit_sub(t146, t128);\n    let t148 = circuit_mul(t143, t147);\n    let t149 = circuit_sub(t148, t131);\n    let t150 = circuit_mul(t146, t146);\n    let t151 = circuit_mul(in0, t150);\n    let t152 = circuit_add(t151, in21);\n    let t153 = circuit_add(t149, t149);\n    let t154 = circuit_inverse(t153);\n    let t155 = circuit_mul(t152, t154);\n    let t156 = circuit_mul(t155, t155);\n    let t157 = circuit_sub(t156, t146);\n    let t158 = circuit_sub(t157, t146);\n    let t159 = circuit_sub(t146, t158);\n    let t160 = circuit_mul(t155, t159);\n    let t161 = circuit_sub(t160, t149);\n    let t162 = circuit_sub(in14, t161);\n    let t163 = circuit_sub(in13, t158);\n    let t164 = circuit_inverse(t163);\n    let t165 = circuit_mul(t162, t164);\n    let t166 = circuit_mul(t165, t165);\n    let t167 = circuit_add(t158, in13);\n    let t168 = circuit_sub(t166, t167);\n    let t169 = circuit_add(t161, t161);\n    let t170 = circuit_sub(t168, t158);\n    let t171 = circuit_inverse(t170);\n    let t172 = circuit_mul(t169, t171);\n    let t173 = circuit_add(t165, t172);\n    let t174 = circuit_mul(t173, t173);\n    let t175 = circuit_add(t158, t168);\n    let t176 = circuit_sub(t174, t175);\n    let t177 = circuit_sub(t176, t158);\n    let t178 = circuit_mul(t173, t177);\n    let t179 = circuit_sub(t178, t161);\n    let t180 = circuit_mul(t176, t176);\n    let t181 = circuit_mul(in0, t180);\n    let t182 = circuit_add(t181, in21);\n    let t183 = circuit_add(t179, t179);\n    let t184 = circuit_inverse(t183);\n    let t185 = circuit_mul(t182, t184);\n    let t186 = circuit_mul(t185, t185);\n    let t187 = circuit_sub(t186, t176);\n    let t188 = circuit_sub(t187, t176);\n    let t189 = circuit_sub(t176, t188);\n    let t190 = circuit_mul(t185, t189);\n    let t191 = circuit_sub(t190, t179);\n    let t192 = circuit_sub(in16, t191);\n    let t193 = circuit_sub(in15, t188);\n    let t194 = circuit_inverse(t193);\n    let t195 = circuit_mul(t192, t194);\n    let t196 = circuit_mul(t195, t195);\n    let t197 = circuit_add(t188, in15);\n    let t198 = circuit_sub(t196, t197);\n    let t199 = circuit_add(t191, t191);\n    let t200 = circuit_sub(t198, t188);\n    let t201 = circuit_inverse(t200);\n    let t202 = circuit_mul(t199, t201);\n    let t203 = circuit_add(t195, t202);\n    let t204 = circuit_mul(t203, t203);\n    let t205 = circuit_add(t188, t198);\n    let t206 = circuit_sub(t204, t205);\n    let t207 = circuit_sub(t206, t188);\n    let t208 = circuit_mul(t203, t207);\n    let t209 = circuit_sub(t208, t191);\n    let t210 = circuit_mul(t206, t206);\n    let t211 = circuit_mul(in0, t210);\n    let t212 = circuit_add(t211, in21);\n    let t213 = circuit_add(t209, t209);\n    let t214 = circuit_inverse(t213);\n    let t215 = circuit_mul(t212, t214);\n    let t216 = circuit_mul(t215, t215);\n    let t217 = circuit_sub(t216, t206);\n    let t218 = circuit_sub(t217, t206);\n    let t219 = circuit_sub(t206, t218);\n    let t220 = circuit_mul(t215, t219);\n    let t221 = circuit_sub(t220, t209);\n    let t222 = circuit_sub(in18, t221);\n    let t223 = circuit_sub(in17, t218);\n    let t224 = circuit_inverse(t223);\n    let t225 = circuit_mul(t222, t224);\n    let t226 = circuit_mul(t225, t225);\n    let t227 = circuit_add(t218, in17);\n    let t228 = circuit_sub(t226, t227);\n    let t229 = circuit_add(t221, t221);\n    let t230 = circuit_sub(t228, t218);\n    let t231 = circuit_inverse(t230);\n    let t232 = circuit_mul(t229, t231);\n    let t233 = circuit_add(t225, t232);\n    let t234 = circuit_mul(t233, t233);\n    let t235 = circuit_add(t218, t228);\n    let t236 = circuit_sub(t234, t235);\n    let t237 = circuit_sub(t236, t218);\n    let t238 = circuit_mul(t233, t237);\n    let t239 = circuit_sub(t238, t221);\n    let t240 = circuit_mul(t236, t236);\n    let t241 = circuit_mul(in0, t240);\n    let t242 = circuit_add(t241, in21);\n    let t243 = circuit_add(t239, t239);\n    let t244 = circuit_inverse(t243);\n    let t245 = circuit_mul(t242, t244);\n    let t246 = circuit_mul(t245, t245);\n    let t247 = circuit_sub(t246, t236);\n    let t248 = circuit_sub(t247, t236);\n    let t249 = circuit_sub(t236, t248);\n    let t250 = circuit_mul(t245, t249);\n    let t251 = circuit_sub(t250, t239);\n    let t252 = circuit_sub(in20, t251);\n    let t253 = circuit_sub(in19, t248);\n    let t254 = circuit_inverse(t253);\n    let t255 = circuit_mul(t252, t254);\n    let t256 = circuit_mul(t255, t255);\n    let t257 = circuit_add(t248, in19);\n    let t258 = circuit_sub(t256, t257);\n    let t259 = circuit_add(t251, t251);\n    let t260 = circuit_sub(t258, t248);\n    let t261 = circuit_inverse(t260);\n    let t262 = circuit_mul(t259, t261);\n    let t263 = circuit_add(t255, t262);\n    let t264 = circuit_mul(t263, t263);\n    let t265 = circuit_add(t248, t258);\n    let t266 = circuit_sub(t264, t265);\n    let t267 = circuit_sub(t266, t248);\n    let t268 = circuit_mul(t263, t267);\n    let t269 = circuit_sub(t268, t251);\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (t266, t269).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(P.x); // in1\n    circuit_inputs = circuit_inputs.next_2(P.y); // in2\n    circuit_inputs = circuit_inputs.next_2(Q_1.x); // in3\n    circuit_inputs = circuit_inputs.next_2(Q_1.y); // in4\n    circuit_inputs = circuit_inputs.next_2(Q_2.x); // in5\n    circuit_inputs = circuit_inputs.next_2(Q_2.y); // in6\n    circuit_inputs = circuit_inputs.next_2(Q_3.x); // in7\n    circuit_inputs = circuit_inputs.next_2(Q_3.y); // in8\n    circuit_inputs = circuit_inputs.next_2(Q_4.x); // in9\n    circuit_inputs = circuit_inputs.next_2(Q_4.y); // in10\n    circuit_inputs = circuit_inputs.next_2(Q_5.x); // in11\n    circuit_inputs = circuit_inputs.next_2(Q_5.y); // in12\n    circuit_inputs = circuit_inputs.next_2(Q_6.x); // in13\n    circuit_inputs = circuit_inputs.next_2(Q_6.y); // in14\n    circuit_inputs = circuit_inputs.next_2(Q_7.x); // in15\n    circuit_inputs = circuit_inputs.next_2(Q_7.y); // in16\n    circuit_inputs = circuit_inputs.next_2(Q_8.x); // in17\n    circuit_inputs = circuit_inputs.next_2(Q_8.y); // in18\n    circuit_inputs = circuit_inputs.next_2(Q_9.x); // in19\n    circuit_inputs = circuit_inputs.next_2(Q_9.y); // in20\n    circuit_inputs = circuit_inputs.next_2(A_weirstrass); // in21\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let R: G1Point = G1Point { x: outputs.get_output(t266), y: outputs.get_output(t269) };\n    return (R,);\n}\n"
  },
  {
    "path": "src/src/circuits/extf_mul.cairo",
    "content": "use core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitOutputsTrait, EvalCircuitTrait,\n    circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::{E12D, u288};\n#[inline(always)]\npub fn run_BLS12_381_EVAL_E12D_circuit(f: E12D<u384>, z: u384) -> (u384,) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let in12 = CE::<CI<12>> {};\n    let t0 = circuit_mul(in11, in12); // Eval X Horner step: multiply by z\n    let t1 = circuit_add(in10, t0); // Eval X Horner step: add coefficient_10\n    let t2 = circuit_mul(t1, in12); // Eval X Horner step: multiply by z\n    let t3 = circuit_add(in9, t2); // Eval X Horner step: add coefficient_9\n    let t4 = circuit_mul(t3, in12); // Eval X Horner step: multiply by z\n    let t5 = circuit_add(in8, t4); // Eval X Horner step: add coefficient_8\n    let t6 = circuit_mul(t5, in12); // Eval X Horner step: multiply by z\n    let t7 = circuit_add(in7, t6); // Eval X Horner step: add coefficient_7\n    let t8 = circuit_mul(t7, in12); // Eval X Horner step: multiply by z\n    let t9 = circuit_add(in6, t8); // Eval X Horner step: add coefficient_6\n    let t10 = circuit_mul(t9, in12); // Eval X Horner step: multiply by z\n    let t11 = circuit_add(in5, t10); // Eval X Horner step: add coefficient_5\n    let t12 = circuit_mul(t11, in12); // Eval X Horner step: multiply by z\n    let t13 = circuit_add(in4, t12); // Eval X Horner step: add coefficient_4\n    let t14 = circuit_mul(t13, in12); // Eval X Horner step: multiply by z\n    let t15 = circuit_add(in3, t14); // Eval X Horner step: add coefficient_3\n    let t16 = circuit_mul(t15, in12); // Eval X Horner step: multiply by z\n    let t17 = circuit_add(in2, t16); // Eval X Horner step: add coefficient_2\n    let t18 = circuit_mul(t17, in12); // Eval X Horner step: multiply by z\n    let t19 = circuit_add(in1, t18); // Eval X Horner step: add coefficient_1\n    let t20 = circuit_mul(t19, in12); // Eval X Horner step: multiply by z\n    let t21 = circuit_add(in0, t20); // Eval X Horner step: add coefficient_0\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t21,).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(f.w0); // in0\n    circuit_inputs = circuit_inputs.next_2(f.w1); // in1\n    circuit_inputs = circuit_inputs.next_2(f.w2); // in2\n    circuit_inputs = circuit_inputs.next_2(f.w3); // in3\n    circuit_inputs = circuit_inputs.next_2(f.w4); // in4\n    circuit_inputs = circuit_inputs.next_2(f.w5); // in5\n    circuit_inputs = circuit_inputs.next_2(f.w6); // in6\n    circuit_inputs = circuit_inputs.next_2(f.w7); // in7\n    circuit_inputs = circuit_inputs.next_2(f.w8); // in8\n    circuit_inputs = circuit_inputs.next_2(f.w9); // in9\n    circuit_inputs = circuit_inputs.next_2(f.w10); // in10\n    circuit_inputs = circuit_inputs.next_2(f.w11); // in11\n    circuit_inputs = circuit_inputs.next_2(z); // in12\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let f_of_z: u384 = outputs.get_output(t21);\n    return (f_of_z,);\n}\n#[inline(always)]\npub fn run_BN254_EVAL_E12D_circuit(f: E12D<u288>, z: u384) -> (u384,) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let in12 = CE::<CI<12>> {};\n    let t0 = circuit_mul(in11, in12); // Eval X Horner step: multiply by z\n    let t1 = circuit_add(in10, t0); // Eval X Horner step: add coefficient_10\n    let t2 = circuit_mul(t1, in12); // Eval X Horner step: multiply by z\n    let t3 = circuit_add(in9, t2); // Eval X Horner step: add coefficient_9\n    let t4 = circuit_mul(t3, in12); // Eval X Horner step: multiply by z\n    let t5 = circuit_add(in8, t4); // Eval X Horner step: add coefficient_8\n    let t6 = circuit_mul(t5, in12); // Eval X Horner step: multiply by z\n    let t7 = circuit_add(in7, t6); // Eval X Horner step: add coefficient_7\n    let t8 = circuit_mul(t7, in12); // Eval X Horner step: multiply by z\n    let t9 = circuit_add(in6, t8); // Eval X Horner step: add coefficient_6\n    let t10 = circuit_mul(t9, in12); // Eval X Horner step: multiply by z\n    let t11 = circuit_add(in5, t10); // Eval X Horner step: add coefficient_5\n    let t12 = circuit_mul(t11, in12); // Eval X Horner step: multiply by z\n    let t13 = circuit_add(in4, t12); // Eval X Horner step: add coefficient_4\n    let t14 = circuit_mul(t13, in12); // Eval X Horner step: multiply by z\n    let t15 = circuit_add(in3, t14); // Eval X Horner step: add coefficient_3\n    let t16 = circuit_mul(t15, in12); // Eval X Horner step: multiply by z\n    let t17 = circuit_add(in2, t16); // Eval X Horner step: add coefficient_2\n    let t18 = circuit_mul(t17, in12); // Eval X Horner step: multiply by z\n    let t19 = circuit_add(in1, t18); // Eval X Horner step: add coefficient_1\n    let t20 = circuit_mul(t19, in12); // Eval X Horner step: multiply by z\n    let t21 = circuit_add(in0, t20); // Eval X Horner step: add coefficient_0\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t21,).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(f.w0); // in0\n    circuit_inputs = circuit_inputs.next_2(f.w1); // in1\n    circuit_inputs = circuit_inputs.next_2(f.w2); // in2\n    circuit_inputs = circuit_inputs.next_2(f.w3); // in3\n    circuit_inputs = circuit_inputs.next_2(f.w4); // in4\n    circuit_inputs = circuit_inputs.next_2(f.w5); // in5\n    circuit_inputs = circuit_inputs.next_2(f.w6); // in6\n    circuit_inputs = circuit_inputs.next_2(f.w7); // in7\n    circuit_inputs = circuit_inputs.next_2(f.w8); // in8\n    circuit_inputs = circuit_inputs.next_2(f.w9); // in9\n    circuit_inputs = circuit_inputs.next_2(f.w10); // in10\n    circuit_inputs = circuit_inputs.next_2(f.w11); // in11\n    circuit_inputs = circuit_inputs.next_2(z); // in12\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let f_of_z: u384 = outputs.get_output(t21);\n    return (f_of_z,);\n}\n"
  },
  {
    "path": "src/src/circuits/isogeny.cairo",
    "content": "use core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitOutputsTrait, EvalCircuitTrait,\n    circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::G1Point;\n#[inline(always)]\npub fn run_BLS12_381_APPLY_ISOGENY_BLS12_381_circuit(pt: G1Point) -> (G1Point,) {\n    // CONSTANT stack\n    let in0 = CE::<\n        CI<0>,\n    > {}; // 0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7\n    let in1 = CE::<\n        CI<1>,\n    > {}; // 0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb\n    let in2 = CE::<\n        CI<2>,\n    > {}; // 0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0\n    let in3 = CE::<\n        CI<3>,\n    > {}; // 0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861\n    let in4 = CE::<\n        CI<4>,\n    > {}; // 0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9\n    let in5 = CE::<\n        CI<5>,\n    > {}; // 0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983\n    let in6 = CE::<\n        CI<6>,\n    > {}; // 0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84\n    let in7 = CE::<\n        CI<7>,\n    > {}; // 0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e\n    let in8 = CE::<\n        CI<8>,\n    > {}; // 0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317\n    let in9 = CE::<\n        CI<9>,\n    > {}; // 0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e\n    let in10 = CE::<\n        CI<10>,\n    > {}; // 0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b\n    let in11 = CE::<\n        CI<11>,\n    > {}; // 0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229\n    let in12 = CE::<\n        CI<12>,\n    > {}; // 0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c\n    let in13 = CE::<\n        CI<13>,\n    > {}; // 0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff\n    let in14 = CE::<\n        CI<14>,\n    > {}; // 0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19\n    let in15 = CE::<\n        CI<15>,\n    > {}; // 0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8\n    let in16 = CE::<\n        CI<16>,\n    > {}; // 0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e\n    let in17 = CE::<\n        CI<17>,\n    > {}; // 0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5\n    let in18 = CE::<\n        CI<18>,\n    > {}; // 0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a\n    let in19 = CE::<\n        CI<19>,\n    > {}; // 0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e\n    let in20 = CE::<\n        CI<20>,\n    > {}; // 0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641\n    let in21 = CE::<\n        CI<21>,\n    > {}; // 0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a\n    let in22 = CE::<CI<22>> {}; // 0x1\n    let in23 = CE::<\n        CI<23>,\n    > {}; // 0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33\n    let in24 = CE::<\n        CI<24>,\n    > {}; // 0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696\n    let in25 = CE::<\n        CI<25>,\n    > {}; // 0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6\n    let in26 = CE::<\n        CI<26>,\n    > {}; // 0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb\n    let in27 = CE::<\n        CI<27>,\n    > {}; // 0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb\n    let in28 = CE::<\n        CI<28>,\n    > {}; // 0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0\n    let in29 = CE::<\n        CI<29>,\n    > {}; // 0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2\n    let in30 = CE::<\n        CI<30>,\n    > {}; // 0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29\n    let in31 = CE::<\n        CI<31>,\n    > {}; // 0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587\n    let in32 = CE::<\n        CI<32>,\n    > {}; // 0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30\n    let in33 = CE::<\n        CI<33>,\n    > {}; // 0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132\n    let in34 = CE::<\n        CI<34>,\n    > {}; // 0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e\n    let in35 = CE::<\n        CI<35>,\n    > {}; // 0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8\n    let in36 = CE::<\n        CI<36>,\n    > {}; // 0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133\n    let in37 = CE::<\n        CI<37>,\n    > {}; // 0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b\n    let in38 = CE::<\n        CI<38>,\n    > {}; // 0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604\n    let in39 = CE::<\n        CI<39>,\n    > {}; // 0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1\n    let in40 = CE::<\n        CI<40>,\n    > {}; // 0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d\n    let in41 = CE::<\n        CI<41>,\n    > {}; // 0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2\n    let in42 = CE::<\n        CI<42>,\n    > {}; // 0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416\n    let in43 = CE::<\n        CI<43>,\n    > {}; // 0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d\n    let in44 = CE::<\n        CI<44>,\n    > {}; // 0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac\n    let in45 = CE::<\n        CI<45>,\n    > {}; // 0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c\n    let in46 = CE::<\n        CI<46>,\n    > {}; // 0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9\n    let in47 = CE::<\n        CI<47>,\n    > {}; // 0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a\n    let in48 = CE::<\n        CI<48>,\n    > {}; // 0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55\n    let in49 = CE::<\n        CI<49>,\n    > {}; // 0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8\n    let in50 = CE::<\n        CI<50>,\n    > {}; // 0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092\n    let in51 = CE::<\n        CI<51>,\n    > {}; // 0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc\n    let in52 = CE::<\n        CI<52>,\n    > {}; // 0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7\n    let in53 = CE::<\n        CI<53>,\n    > {}; // 0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f\n\n    // INPUT stack\n    let (in54, in55) = (CE::<CI<54>> {}, CE::<CI<55>> {});\n    let t0 = circuit_mul(in11, in54); // Eval x_num Horner step: multiply by z\n    let t1 = circuit_add(in10, t0); // Eval x_num Horner step: add coefficient_10\n    let t2 = circuit_mul(t1, in54); // Eval x_num Horner step: multiply by z\n    let t3 = circuit_add(in9, t2); // Eval x_num Horner step: add coefficient_9\n    let t4 = circuit_mul(t3, in54); // Eval x_num Horner step: multiply by z\n    let t5 = circuit_add(in8, t4); // Eval x_num Horner step: add coefficient_8\n    let t6 = circuit_mul(t5, in54); // Eval x_num Horner step: multiply by z\n    let t7 = circuit_add(in7, t6); // Eval x_num Horner step: add coefficient_7\n    let t8 = circuit_mul(t7, in54); // Eval x_num Horner step: multiply by z\n    let t9 = circuit_add(in6, t8); // Eval x_num Horner step: add coefficient_6\n    let t10 = circuit_mul(t9, in54); // Eval x_num Horner step: multiply by z\n    let t11 = circuit_add(in5, t10); // Eval x_num Horner step: add coefficient_5\n    let t12 = circuit_mul(t11, in54); // Eval x_num Horner step: multiply by z\n    let t13 = circuit_add(in4, t12); // Eval x_num Horner step: add coefficient_4\n    let t14 = circuit_mul(t13, in54); // Eval x_num Horner step: multiply by z\n    let t15 = circuit_add(in3, t14); // Eval x_num Horner step: add coefficient_3\n    let t16 = circuit_mul(t15, in54); // Eval x_num Horner step: multiply by z\n    let t17 = circuit_add(in2, t16); // Eval x_num Horner step: add coefficient_2\n    let t18 = circuit_mul(t17, in54); // Eval x_num Horner step: multiply by z\n    let t19 = circuit_add(in1, t18); // Eval x_num Horner step: add coefficient_1\n    let t20 = circuit_mul(t19, in54); // Eval x_num Horner step: multiply by z\n    let t21 = circuit_add(in0, t20); // Eval x_num Horner step: add coefficient_0\n    let t22 = circuit_mul(in22, in54); // Eval x_den Horner step: multiply by z\n    let t23 = circuit_add(in21, t22); // Eval x_den Horner step: add coefficient_9\n    let t24 = circuit_mul(t23, in54); // Eval x_den Horner step: multiply by z\n    let t25 = circuit_add(in20, t24); // Eval x_den Horner step: add coefficient_8\n    let t26 = circuit_mul(t25, in54); // Eval x_den Horner step: multiply by z\n    let t27 = circuit_add(in19, t26); // Eval x_den Horner step: add coefficient_7\n    let t28 = circuit_mul(t27, in54); // Eval x_den Horner step: multiply by z\n    let t29 = circuit_add(in18, t28); // Eval x_den Horner step: add coefficient_6\n    let t30 = circuit_mul(t29, in54); // Eval x_den Horner step: multiply by z\n    let t31 = circuit_add(in17, t30); // Eval x_den Horner step: add coefficient_5\n    let t32 = circuit_mul(t31, in54); // Eval x_den Horner step: multiply by z\n    let t33 = circuit_add(in16, t32); // Eval x_den Horner step: add coefficient_4\n    let t34 = circuit_mul(t33, in54); // Eval x_den Horner step: multiply by z\n    let t35 = circuit_add(in15, t34); // Eval x_den Horner step: add coefficient_3\n    let t36 = circuit_mul(t35, in54); // Eval x_den Horner step: multiply by z\n    let t37 = circuit_add(in14, t36); // Eval x_den Horner step: add coefficient_2\n    let t38 = circuit_mul(t37, in54); // Eval x_den Horner step: multiply by z\n    let t39 = circuit_add(in13, t38); // Eval x_den Horner step: add coefficient_1\n    let t40 = circuit_mul(t39, in54); // Eval x_den Horner step: multiply by z\n    let t41 = circuit_add(in12, t40); // Eval x_den Horner step: add coefficient_0\n    let t42 = circuit_inverse(t41);\n    let t43 = circuit_mul(t21, t42);\n    let t44 = circuit_mul(in38, in54); // Eval y_num Horner step: multiply by z\n    let t45 = circuit_add(in37, t44); // Eval y_num Horner step: add coefficient_14\n    let t46 = circuit_mul(t45, in54); // Eval y_num Horner step: multiply by z\n    let t47 = circuit_add(in36, t46); // Eval y_num Horner step: add coefficient_13\n    let t48 = circuit_mul(t47, in54); // Eval y_num Horner step: multiply by z\n    let t49 = circuit_add(in35, t48); // Eval y_num Horner step: add coefficient_12\n    let t50 = circuit_mul(t49, in54); // Eval y_num Horner step: multiply by z\n    let t51 = circuit_add(in34, t50); // Eval y_num Horner step: add coefficient_11\n    let t52 = circuit_mul(t51, in54); // Eval y_num Horner step: multiply by z\n    let t53 = circuit_add(in33, t52); // Eval y_num Horner step: add coefficient_10\n    let t54 = circuit_mul(t53, in54); // Eval y_num Horner step: multiply by z\n    let t55 = circuit_add(in32, t54); // Eval y_num Horner step: add coefficient_9\n    let t56 = circuit_mul(t55, in54); // Eval y_num Horner step: multiply by z\n    let t57 = circuit_add(in31, t56); // Eval y_num Horner step: add coefficient_8\n    let t58 = circuit_mul(t57, in54); // Eval y_num Horner step: multiply by z\n    let t59 = circuit_add(in30, t58); // Eval y_num Horner step: add coefficient_7\n    let t60 = circuit_mul(t59, in54); // Eval y_num Horner step: multiply by z\n    let t61 = circuit_add(in29, t60); // Eval y_num Horner step: add coefficient_6\n    let t62 = circuit_mul(t61, in54); // Eval y_num Horner step: multiply by z\n    let t63 = circuit_add(in28, t62); // Eval y_num Horner step: add coefficient_5\n    let t64 = circuit_mul(t63, in54); // Eval y_num Horner step: multiply by z\n    let t65 = circuit_add(in27, t64); // Eval y_num Horner step: add coefficient_4\n    let t66 = circuit_mul(t65, in54); // Eval y_num Horner step: multiply by z\n    let t67 = circuit_add(in26, t66); // Eval y_num Horner step: add coefficient_3\n    let t68 = circuit_mul(t67, in54); // Eval y_num Horner step: multiply by z\n    let t69 = circuit_add(in25, t68); // Eval y_num Horner step: add coefficient_2\n    let t70 = circuit_mul(t69, in54); // Eval y_num Horner step: multiply by z\n    let t71 = circuit_add(in24, t70); // Eval y_num Horner step: add coefficient_1\n    let t72 = circuit_mul(t71, in54); // Eval y_num Horner step: multiply by z\n    let t73 = circuit_add(in23, t72); // Eval y_num Horner step: add coefficient_0\n    let t74 = circuit_mul(in22, in54); // Eval y_den Horner step: multiply by z\n    let t75 = circuit_add(in53, t74); // Eval y_den Horner step: add coefficient_14\n    let t76 = circuit_mul(t75, in54); // Eval y_den Horner step: multiply by z\n    let t77 = circuit_add(in52, t76); // Eval y_den Horner step: add coefficient_13\n    let t78 = circuit_mul(t77, in54); // Eval y_den Horner step: multiply by z\n    let t79 = circuit_add(in51, t78); // Eval y_den Horner step: add coefficient_12\n    let t80 = circuit_mul(t79, in54); // Eval y_den Horner step: multiply by z\n    let t81 = circuit_add(in50, t80); // Eval y_den Horner step: add coefficient_11\n    let t82 = circuit_mul(t81, in54); // Eval y_den Horner step: multiply by z\n    let t83 = circuit_add(in49, t82); // Eval y_den Horner step: add coefficient_10\n    let t84 = circuit_mul(t83, in54); // Eval y_den Horner step: multiply by z\n    let t85 = circuit_add(in48, t84); // Eval y_den Horner step: add coefficient_9\n    let t86 = circuit_mul(t85, in54); // Eval y_den Horner step: multiply by z\n    let t87 = circuit_add(in47, t86); // Eval y_den Horner step: add coefficient_8\n    let t88 = circuit_mul(t87, in54); // Eval y_den Horner step: multiply by z\n    let t89 = circuit_add(in46, t88); // Eval y_den Horner step: add coefficient_7\n    let t90 = circuit_mul(t89, in54); // Eval y_den Horner step: multiply by z\n    let t91 = circuit_add(in45, t90); // Eval y_den Horner step: add coefficient_6\n    let t92 = circuit_mul(t91, in54); // Eval y_den Horner step: multiply by z\n    let t93 = circuit_add(in44, t92); // Eval y_den Horner step: add coefficient_5\n    let t94 = circuit_mul(t93, in54); // Eval y_den Horner step: multiply by z\n    let t95 = circuit_add(in43, t94); // Eval y_den Horner step: add coefficient_4\n    let t96 = circuit_mul(t95, in54); // Eval y_den Horner step: multiply by z\n    let t97 = circuit_add(in42, t96); // Eval y_den Horner step: add coefficient_3\n    let t98 = circuit_mul(t97, in54); // Eval y_den Horner step: multiply by z\n    let t99 = circuit_add(in41, t98); // Eval y_den Horner step: add coefficient_2\n    let t100 = circuit_mul(t99, in54); // Eval y_den Horner step: multiply by z\n    let t101 = circuit_add(in40, t100); // Eval y_den Horner step: add coefficient_1\n    let t102 = circuit_mul(t101, in54); // Eval y_den Horner step: multiply by z\n    let t103 = circuit_add(in39, t102); // Eval y_den Horner step: add coefficient_0\n    let t104 = circuit_inverse(t103);\n    let t105 = circuit_mul(t73, t104);\n    let t106 = circuit_mul(t105, in55);\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t43, t106).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(APPLY_ISOGENY_BLS12_381_BLS12_381_CONSTANTS.span()); // in0 - in53\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(pt.x); // in54\n    circuit_inputs = circuit_inputs.next_2(pt.y); // in55\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: G1Point = G1Point { x: outputs.get_output(t43), y: outputs.get_output(t106) };\n    return (res,);\n}\nconst APPLY_ISOGENY_BLS12_381_BLS12_381_CONSTANTS: [u384; 54] = [\n    u384 {\n        limb0: 0xf2e62d6eaeac1662734649b7,\n        limb1: 0xf2627b56cdb4e2c85610c2d5,\n        limb2: 0xd99815856b303e88a2d7005f,\n        limb3: 0x11a05f2b1e833340b809101d,\n    },\n    u384 {\n        limb0: 0xf318c356e834eef1b3cb83bb,\n        limb1: 0xf565e33c70d1e86b4838f2a6,\n        limb2: 0x2147a81c7c17e75b2f6a8417,\n        limb3: 0x17294ed3e943ab2f0588bab2,\n    },\n    u384 {\n        limb0: 0x2a09729fe0179f9dac9edcb0,\n        limb1: 0x6878e501ec68e25c958c3e3d,\n        limb2: 0xd10a9a1bce032473295983e5,\n        limb3: 0xd54005db97678ec1d1048c5,\n    },\n    u384 {\n        limb0: 0xe3107193c5b388641d9b6861,\n        limb1: 0xf1b33289f1b330835336e25c,\n        limb2: 0x7e55412d7f5e4656a8dbf25,\n        limb3: 0x1778e7166fcc6db74e0609d3,\n    },\n    u384 {\n        limb0: 0x301e77c451154ce9ac8895d9,\n        limb1: 0x86eeb65982fac18985a286f,\n        limb2: 0xe4118e5499db995a1257fb3f,\n        limb3: 0xe99726a3199f4436642b4b3,\n    },\n    u384 {\n        limb0: 0xcae73d19cd13c1c66f652983,\n        limb1: 0x9ed3ab9097e68f90a0870d2d,\n        limb2: 0xf7a74ab5db3cb17dd952799b,\n        limb3: 0x1630c3250d7313ff01d1201b,\n    },\n    u384 {\n        limb0: 0xc1052ecaddd7f225a139ed84,\n        limb1: 0x9008e218f9c86b2a8da25128,\n        limb2: 0x8ae652bfb11586264f0f8ce1,\n        limb3: 0xd6ed6553fe44d296a3726c3,\n    },\n    u384 {\n        limb0: 0xc8f475af9ccb5618e3f0c88e,\n        limb1: 0xa682c62ef0f2753339b7c8f8,\n        limb2: 0xd1117e53356de5ab275b4db1,\n        limb3: 0x17b81e7701abdbe2e8743884,\n    },\n    u384 {\n        limb0: 0x96b74e956d71986a8497e317,\n        limb1: 0xa2c596c928c5d1de4fa295f2,\n        limb2: 0x63be990dc43b756ce79f5574,\n        limb3: 0x80d3cf1f9a78fc47b90b335,\n    },\n    u384 {\n        limb0: 0xdc0327797f241067be390c9e,\n        limb1: 0x676314baf4bb1b7fa3190b2e,\n        limb2: 0x5d138f22dd2ecb803a0c5c99,\n        limb3: 0x169b1f8e1bcfa7c42e0c3751,\n    },\n    u384 {\n        limb0: 0x8c285decca67df3f1605fb7b,\n        limb1: 0xd50af36003b14866f69b771f,\n        limb2: 0xd2565b0dfa7dccdde6787f96,\n        limb3: 0x10321da079ce07e272d8ec09,\n    },\n    u384 {\n        limb0: 0xb64d391fa9c8ba2e8ba2d229,\n        limb1: 0x23c0bf1bc24c6b68c24b1b80,\n        limb2: 0x81edee3d31d79d7e22c837bc,\n        limb3: 0x6e08c248e260e70bd1e9623,\n    },\n    u384 {\n        limb0: 0xbe343df8993cf9fa40d21b1c,\n        limb1: 0x9c9588617fc8ac62b558d681,\n        limb2: 0x4bd3fa6f01d5ef4ba35b48ba,\n        limb3: 0x8ca8d548cff19ae18b2e62f,\n    },\n    u384 {\n        limb0: 0x6cb026e9e5c8276ec82b3bff,\n        limb1: 0x126c2588c48bf5713daa884,\n        limb2: 0x98e536367041e8ca0cf0800c,\n        limb3: 0x12561a5deb559c4348b47112,\n    },\n    u384 {\n        limb0: 0x7c94fedcfcc239ba5cb83e19,\n        limb1: 0xfca64e00b11aceacd6a3d096,\n        limb2: 0xbff2991f6f89416f5a718cd1,\n        limb3: 0xb2962fe57a3225e8137e629,\n    },\n    u384 {\n        limb0: 0x3eecf5c4130de8938dc62cd8,\n        limb1: 0x54cca8abc28d6fd04976d524,\n        limb2: 0x7c40eb545b08243f16b16551,\n        limb3: 0x3425581a58ae2fec83aafef,\n    },\n    u384 {\n        limb0: 0x1f35781d539d395b3532a21e,\n        limb1: 0x8d6b44e833b306da9bd29ba8,\n        limb2: 0x43e7a07dffdfc759a12062bb,\n        limb3: 0x13a8e162022914a80a6f1d5f,\n    },\n    u384 {\n        limb0: 0xc4228f11c02df9a29f6304a5,\n        limb1: 0xa43bcef24b8982f7400d24b,\n        limb2: 0x506c6e9395735e9ce9cad4d,\n        limb3: 0xe7355f8e4e667b955390f7f,\n    },\n    u384 {\n        limb0: 0x8f0de06cec2574496ee84a3a,\n        limb1: 0x4e2e073062aede9cea73b353,\n        limb2: 0xe0596721570f5799af53a189,\n        limb3: 0x772caacf16936190f3e0c63,\n    },\n    u384 {\n        limb0: 0x9d11e2d311f7d99bbdcc5a5e,\n        limb1: 0x1996e1cdf9822c580fa5b948,\n        limb2: 0x74cf01996e7f63c21bca68a8,\n        limb3: 0x14a7ac2a9d64a8b230b3f5b0,\n    },\n    u384 {\n        limb0: 0xabba43704776ec3a79a1d641,\n        limb1: 0x74100da67f39883503826692,\n        limb2: 0xafc7a3cce07f8d1d7161366b,\n        limb3: 0xa10ecf6ada54f825e920b3d,\n    },\n    u384 {\n        limb0: 0x4b7865002d6384d168ecdd0a,\n        limb1: 0x76df533978f31c1593174e4b,\n        limb2: 0xb3a56680f682b4ee96f7d037,\n        limb3: 0x95fc13ab9e92ad4476d6e3e,\n    },\n    u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x9b3ba3c2be9845719707bb33,\n        limb1: 0x2b52af6c956543d3cd0c7aee,\n        limb2: 0x4980dcfa11ad138e48a86952,\n        limb3: 0x90d97c81ba24ee0259d1f09,\n    },\n    u384 {\n        limb0: 0x962fa8bfe097e75a2e41c696,\n        limb1: 0xf906343eb67ad34d6c56711,\n        limb2: 0x76fb46831223e96c254f383d,\n        limb3: 0x134996a104ee5811d51036d7,\n    },\n    u384 {\n        limb0: 0x28b00523b8dfe240c72de1f6,\n        limb1: 0xc344be4b91400da7d26d5216,\n        limb2: 0x6a3b49942552e2d658a31ce2,\n        limb3: 0xcc786baa966e66f4a384c8,\n    },\n    u384 {\n        limb0: 0x9ec61deca6355c77b0e5f4cb,\n        limb1: 0x9e4a3ec03251cf9de405aba,\n        limb2: 0xd8746757d42aa7b90eeb791c,\n        limb3: 0x1f86376e8981c217898751a,\n    },\n    u384 {\n        limb0: 0x99040a841b6daecf2e8fedb,\n        limb1: 0x79833fd221351adc2ee7f8dc,\n        limb2: 0xa21529c4195536fbe3ce50b8,\n        limb3: 0x8cc03fdefe0ff135caf4fe2,\n    },\n    u384 {\n        limb0: 0xc95a807299b23ab13633a5f0,\n        limb1: 0x76505c3d3ad5544e203f6326,\n        limb2: 0xb8f0a6a074a7d0d4afadb7bd,\n        limb3: 0x16603fca40634b6a2211e11d,\n    },\n    u384 {\n        limb0: 0x460f415ec961f8855fe9d6f2,\n        limb1: 0x5231413c4d634f3747a87ac2,\n        limb2: 0x27796b3ce75bb8ca2be184cb,\n        limb3: 0x4ab0b9bcfac1bbcb2c977d0,\n    },\n    u384 {\n        limb0: 0xfedfe935a15e4ca31870fb29,\n        limb1: 0xfd038da6c26c842642f64550,\n        limb2: 0x2ca6c674170a05bfe3bdd81f,\n        limb3: 0x987c8d5333ab86fde9926bd,\n    },\n    u384 {\n        limb0: 0xc78607a360370e577bdba587,\n        limb1: 0x1e8b6e6a1f20cabe69d65201,\n        limb2: 0x1e4da1bb8f3abd16679dc26c,\n        limb3: 0x9fc4018bd96684be88c9e22,\n    },\n    u384 {\n        limb0: 0xdd4eba6f2bafaaebca731c30,\n        limb1: 0x6985e7ed1e4d43b9b3f7055,\n        limb2: 0xada14a23c42a0ca7915af6fe,\n        limb3: 0xe1bba7a1186bdb5223abde7,\n    },\n    u384 {\n        limb0: 0xce3fbafce813711ad011c132,\n        limb1: 0xd1183e416389e61031bf3a5c,\n        limb2: 0x1d43fb93cd2fcbcb6caf493f,\n        limb3: 0x19713e47937cd1be0dfd0b8f,\n    },\n    u384 {\n        limb0: 0x1b44d606ce07c8a4d0074d8e,\n        limb1: 0x2e6bfe7f911f643249d9cdf4,\n        limb2: 0xfed2edcc523559b8aaf0c246,\n        limb3: 0x18b46a908f36f6deb918c143,\n    },\n    u384 {\n        limb0: 0x919211f20d4c04f00b971ef8,\n        limb1: 0xc02710e807b4633f06c851c1,\n        limb2: 0x4f53f447aa7b12a3426b08e,\n        limb3: 0xb182cac101b9399d1550960,\n    },\n    u384 {\n        limb0: 0x1c232a6442d9d3f5db980133,\n        limb1: 0x13e6632d3c40659cc6cf90ad,\n        limb2: 0x7be315dc757b3b080d4c1580,\n        limb3: 0x245a394ad1eca9b72fc00ae,\n    },\n    u384 {\n        limb0: 0x6579afb7866b1e715475224b,\n        limb1: 0xd9ab0f5d396a7ce46ba1049b,\n        limb2: 0x48c4a3fc5e673d81d7e86568,\n        limb3: 0x5c129645e44cf1102a159f7,\n    },\n    u384 {\n        limb0: 0xfec01c7704b456be69c8b604,\n        limb1: 0x57add4fa95af01b2b665027e,\n        limb2: 0x42df2eb5cb181d8f84965a39,\n        limb3: 0x15e6be4e990f03ce4ea50b3b,\n    },\n    u384 {\n        limb0: 0xf60c206d01479253b03663c1,\n        limb1: 0xeec3232b5be72e7a07f3688e,\n        limb2: 0xfad0eae9601a6de578980be6,\n        limb3: 0x16112c4c3a9c98b252181140,\n    },\n    u384 {\n        limb0: 0x63529e3532f6102c2e49a03d,\n        limb1: 0xa4a10356f453e01f78a42607,\n        limb2: 0x43c348b885c84ff731c4d59c,\n        limb3: 0x1962d75c2381201e1a0cbd6c,\n    },\n    u384 {\n        limb0: 0x36f96f891e2538b53dbf67f2,\n        limb1: 0xc35a5dd279cd2eca6757cd6,\n        limb2: 0x6e8eb15778c4855551ae7f31,\n        limb3: 0x58df3306640da276faaae7d,\n    },\n    u384 {\n        limb0: 0xc28297ada8d26d98445f5416,\n        limb1: 0x123da489e726af41727364f2,\n        limb2: 0x89edb4d1d115c5dbddbcd30e,\n        limb3: 0x16b7d288798e5395f20d23bf,\n    },\n    u384 {\n        limb0: 0xfd2ededda39142311a5001d,\n        limb1: 0x542eda0fc9dec916a20b15dc,\n        limb2: 0xf8228ddcc6d19c9f0f69bbb0,\n        limb3: 0xbe0e079545f43e4b00cc912,\n    },\n    u384 {\n        limb0: 0xdfa9cce202c6477faaf9b7ac,\n        limb1: 0xc5ecd87b6f0f5a6449f38db9,\n        limb2: 0xac783182b70152c65550d881,\n        limb3: 0x8d9e5297186db2d9fb266ea,\n    },\n    u384 {\n        limb0: 0xa58b1fb93d1a1399126a775c,\n        limb1: 0x5dd365bc400a0051d5fa9c01,\n        limb2: 0xace9824b5eecfdfa8d0cf8ef,\n        limb3: 0x166007c08a99db2fc3ba8734,\n    },\n    u384 {\n        limb0: 0x801dee460ee415a15812ed9,\n        limb1: 0xfeb34fd206357132b920f5b0,\n        limb2: 0xbba6ff6ee5a4375efa1f4fd7,\n        limb3: 0x16a3ef08be3ea7ea03bcddfa,\n    },\n    u384 {\n        limb0: 0xbb9248836b233d9d55535d4a,\n        limb1: 0xabc5750c4bf39b4852cfe2f7,\n        limb2: 0xd1d74cc4f9fb0ce4c6af5920,\n        limb3: 0x1866c8ed336c61231a1be54f,\n    },\n    u384 {\n        limb0: 0xd529b35e346ef48bb8913f55,\n        limb1: 0x5308592e7ea7d4fbc7385ea3,\n        limb2: 0xd94a84903216f763e13d87bb,\n        limb3: 0x167a55cda70a6e1cea820597,\n    },\n    u384 {\n        limb0: 0x4f83060400f8b49cba8f6aa8,\n        limb1: 0xe591b36e636a5c871a5c29f,\n        limb2: 0x1ad2911d9c6dd039bb61a629,\n        limb3: 0x4d2f259eea405bd48f010a0,\n    },\n    u384 {\n        limb0: 0x6f7ebbea9684b529e2561092,\n        limb1: 0x8c0f9a88cea7913516f96898,\n        limb2: 0x48c50c477f94ff8aefce42d2,\n        limb3: 0xaccbb67481d033ff5852c1e,\n    },\n    u384 {\n        limb0: 0xe3b90ac11e99b138573345cc,\n        limb1: 0x7d5ceef9a00d9b8693000763,\n        limb2: 0xb45f1496543346d98adf0226,\n        limb3: 0xad6b9514c767fe3c3613144,\n    },\n    u384 {\n        limb0: 0x8714cc80d1fadc1326ed06f7,\n        limb1: 0xcb748df27942480e420517bd,\n        limb2: 0x53cd76f2bf565b94e72927c1,\n        limb3: 0x2660400eb2e4f3b628bdd0d,\n    },\n    u384 {\n        limb0: 0xf13497804415473a1d634b8f,\n        limb1: 0x324efcd6356caa205ca2f570,\n        limb2: 0xd7819c171c40f65e273b853,\n        limb3: 0xe0fa1d816ddc03e6b24255e,\n    },\n];\n"
  },
  {
    "path": "src/src/circuits/multi_pairing_check.cairo",
    "content": "use core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitOutputsTrait, EvalCircuitTrait,\n    circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::{\n    BLSProcessedPair, BNProcessedPair, E12D, G1Point, G2Line, G2Point,\n    MillerLoopResultScalingFactor, u288,\n};\n#[inline(always)]\npub fn run_BLS12_381_INITIALIZE_MPCHECK_EXT_MLR_circuit(\n    lambda_root_inverse: E12D<u384>,\n    z: u384,\n    scaling_factor: MillerLoopResultScalingFactor<u384>,\n    precomputed_miller_loop_result: E12D<u384>,\n) -> (u384, u384, u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x2\n    let in2 = CE::<\n        CI<2>,\n    > {}; // 0x18089593cbf626353947d5b1fd0c6d66bb34bc7585f5abdf8f17b50e12c47d65ce514a7c167b027b600febdb244714c5\n    let in3 = CE::<\n        CI<3>,\n    > {}; // 0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffeffff\n    let in4 = CE::<\n        CI<4>,\n    > {}; // 0xd5e1c086ffe8016d063c6dad7a2fffc9072bb5785a686bcefeedc2e0124838bdccf325ee5d80be9902109f7dbc79812\n    let in5 = CE::<\n        CI<5>,\n    > {}; // 0x1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaad\n    let in6 = CE::<\n        CI<6>,\n    > {}; // 0x1a0111ea397fe6998ce8d956845e1033efa3bf761f6622e9abc9802928bfc912627c4fd7ed3ffffb5dfb00000001aaaf\n    let in7 = CE::<\n        CI<7>,\n    > {}; // 0xb659fb20274bfb1be8ff4d69163c08be7302c4818171fdd17d5be9b1d380acd8c747cdc4aff0e653631f5d3000f022c\n    let in8 = CE::<CI<8>> {}; // -0x1 % p\n    let in9 = CE::<\n        CI<9>,\n    > {}; // 0xfc3e2b36c4e03288e9e902231f9fb854a14787b6c7b36fec0c8ec971f63c5f282d5ac14d6c7ec22cf78a126ddc4af3\n    let in10 = CE::<\n        CI<10>,\n    > {}; // 0x1f87c566d89c06511d3d204463f3f70a9428f0f6d8f66dfd8191d92e3ec78be505ab5829ad8fd8459ef1424dbb895e6\n    let in11 = CE::<\n        CI<11>,\n    > {}; // 0x1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaac\n    let in12 = CE::<\n        CI<12>,\n    > {}; // 0x6af0e0437ff400b6831e36d6bd17ffe48395dabc2d3435e77f76e17009241c5ee67992f72ec05f4c81084fbede3cc09\n    let in13 = CE::<\n        CI<13>,\n    > {}; // 0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe\n    let in14 = CE::<\n        CI<14>,\n    > {}; // 0x144e4211384586c16bd3ad4afa99cc9170df3560e77982d0db45f3536814f0bd5871c1908bd478cd1ee605167ff82995\n    let in15 = CE::<\n        CI<15>,\n    > {}; // 0xe9b7238370b26e88c8bb2dfb1e7ec4b7d471f3cdb6df2e24f5b1405d978eb56923783226654f19a83cd0a2cfff0a87f\n\n    // INPUT stack\n    let (in16, in17, in18) = (CE::<CI<16>> {}, CE::<CI<17>> {}, CE::<CI<18>> {});\n    let (in19, in20, in21) = (CE::<CI<19>> {}, CE::<CI<20>> {}, CE::<CI<21>> {});\n    let (in22, in23, in24) = (CE::<CI<22>> {}, CE::<CI<23>> {}, CE::<CI<24>> {});\n    let (in25, in26, in27) = (CE::<CI<25>> {}, CE::<CI<26>> {}, CE::<CI<27>> {});\n    let (in28, in29, in30) = (CE::<CI<28>> {}, CE::<CI<29>> {}, CE::<CI<30>> {});\n    let (in31, in32, in33) = (CE::<CI<31>> {}, CE::<CI<32>> {}, CE::<CI<33>> {});\n    let (in34, in35, in36) = (CE::<CI<34>> {}, CE::<CI<35>> {}, CE::<CI<36>> {});\n    let (in37, in38, in39) = (CE::<CI<37>> {}, CE::<CI<38>> {}, CE::<CI<39>> {});\n    let (in40, in41, in42) = (CE::<CI<40>> {}, CE::<CI<41>> {}, CE::<CI<42>> {});\n    let (in43, in44, in45) = (CE::<CI<43>> {}, CE::<CI<44>> {}, CE::<CI<45>> {});\n    let in46 = CE::<CI<46>> {};\n    let t0 = circuit_mul(in28, in28); // Compute z^2\n    let t1 = circuit_mul(t0, in28); // Compute z^3\n    let t2 = circuit_mul(t1, in28); // Compute z^4\n    let t3 = circuit_mul(t2, in28); // Compute z^5\n    let t4 = circuit_mul(t3, in28); // Compute z^6\n    let t5 = circuit_mul(t4, in28); // Compute z^7\n    let t6 = circuit_mul(t5, in28); // Compute z^8\n    let t7 = circuit_mul(t6, in28); // Compute z^9\n    let t8 = circuit_mul(t7, in28); // Compute z^10\n    let t9 = circuit_mul(t8, in28); // Compute z^11\n    let t10 = circuit_sub(in0, in17);\n    let t11 = circuit_sub(in0, in19);\n    let t12 = circuit_sub(in0, in21);\n    let t13 = circuit_sub(in0, in23);\n    let t14 = circuit_sub(in0, in25);\n    let t15 = circuit_sub(in0, in27);\n    let t16 = circuit_mul(t10, in28); // Eval C_inv step coeff_1 * z^1\n    let t17 = circuit_add(in16, t16); // Eval C_inv step + (coeff_1 * z^1)\n    let t18 = circuit_mul(in18, t0); // Eval C_inv step coeff_2 * z^2\n    let t19 = circuit_add(t17, t18); // Eval C_inv step + (coeff_2 * z^2)\n    let t20 = circuit_mul(t11, t1); // Eval C_inv step coeff_3 * z^3\n    let t21 = circuit_add(t19, t20); // Eval C_inv step + (coeff_3 * z^3)\n    let t22 = circuit_mul(in20, t2); // Eval C_inv step coeff_4 * z^4\n    let t23 = circuit_add(t21, t22); // Eval C_inv step + (coeff_4 * z^4)\n    let t24 = circuit_mul(t12, t3); // Eval C_inv step coeff_5 * z^5\n    let t25 = circuit_add(t23, t24); // Eval C_inv step + (coeff_5 * z^5)\n    let t26 = circuit_mul(in22, t4); // Eval C_inv step coeff_6 * z^6\n    let t27 = circuit_add(t25, t26); // Eval C_inv step + (coeff_6 * z^6)\n    let t28 = circuit_mul(t13, t5); // Eval C_inv step coeff_7 * z^7\n    let t29 = circuit_add(t27, t28); // Eval C_inv step + (coeff_7 * z^7)\n    let t30 = circuit_mul(in24, t6); // Eval C_inv step coeff_8 * z^8\n    let t31 = circuit_add(t29, t30); // Eval C_inv step + (coeff_8 * z^8)\n    let t32 = circuit_mul(t14, t7); // Eval C_inv step coeff_9 * z^9\n    let t33 = circuit_add(t31, t32); // Eval C_inv step + (coeff_9 * z^9)\n    let t34 = circuit_mul(in26, t8); // Eval C_inv step coeff_10 * z^10\n    let t35 = circuit_add(t33, t34); // Eval C_inv step + (coeff_10 * z^10)\n    let t36 = circuit_mul(t15, t9); // Eval C_inv step coeff_11 * z^11\n    let t37 = circuit_add(t35, t36); // Eval C_inv step + (coeff_11 * z^11)\n    let t38 = circuit_mul(in30, t0); // Eval sparse poly W step coeff_2 * z^2\n    let t39 = circuit_add(in29, t38); // Eval sparse poly W step + coeff_2 * z^2\n    let t40 = circuit_mul(in31, t2); // Eval sparse poly W step coeff_4 * z^4\n    let t41 = circuit_add(t39, t40); // Eval sparse poly W step + coeff_4 * z^4\n    let t42 = circuit_mul(in32, t4); // Eval sparse poly W step coeff_6 * z^6\n    let t43 = circuit_add(t41, t42); // Eval sparse poly W step + coeff_6 * z^6\n    let t44 = circuit_mul(in33, t6); // Eval sparse poly W step coeff_8 * z^8\n    let t45 = circuit_add(t43, t44); // Eval sparse poly W step + coeff_8 * z^8\n    let t46 = circuit_mul(in34, t8); // Eval sparse poly W step coeff_10 * z^10\n    let t47 = circuit_add(t45, t46); // Eval sparse poly W step + coeff_10 * z^10\n    let t48 = circuit_mul(in22, in1);\n    let t49 = circuit_add(in16, t48);\n    let t50 = circuit_mul(t10, in2);\n    let t51 = circuit_mul(t13, in2);\n    let t52 = circuit_add(t50, t51);\n    let t53 = circuit_mul(in18, in3);\n    let t54 = circuit_mul(t14, in4);\n    let t55 = circuit_mul(in20, in5);\n    let t56 = circuit_mul(in26, in6);\n    let t57 = circuit_add(t55, t56);\n    let t58 = circuit_mul(t12, in7);\n    let t59 = circuit_mul(t15, in7);\n    let t60 = circuit_add(t58, t59);\n    let t61 = circuit_mul(in22, in8);\n    let t62 = circuit_mul(t10, in9);\n    let t63 = circuit_mul(t13, in10);\n    let t64 = circuit_add(t62, t63);\n    let t65 = circuit_mul(in18, in11);\n    let t66 = circuit_mul(in24, in11);\n    let t67 = circuit_add(t65, t66);\n    let t68 = circuit_mul(t11, in12);\n    let t69 = circuit_mul(in26, in13);\n    let t70 = circuit_mul(t12, in14);\n    let t71 = circuit_mul(t15, in15);\n    let t72 = circuit_add(t70, t71);\n    let t73 = circuit_sub(in0, t52);\n    let t74 = circuit_sub(in0, t54);\n    let t75 = circuit_sub(in0, t60);\n    let t76 = circuit_sub(in0, t64);\n    let t77 = circuit_sub(in0, t68);\n    let t78 = circuit_sub(in0, t72);\n    let t79 = circuit_mul(t73, in28); // Eval C_inv_frob_1 step coeff_1 * z^1\n    let t80 = circuit_add(t49, t79); // Eval C_inv_frob_1 step + (coeff_1 * z^1)\n    let t81 = circuit_mul(t53, t0); // Eval C_inv_frob_1 step coeff_2 * z^2\n    let t82 = circuit_add(t80, t81); // Eval C_inv_frob_1 step + (coeff_2 * z^2)\n    let t83 = circuit_mul(t74, t1); // Eval C_inv_frob_1 step coeff_3 * z^3\n    let t84 = circuit_add(t82, t83); // Eval C_inv_frob_1 step + (coeff_3 * z^3)\n    let t85 = circuit_mul(t57, t2); // Eval C_inv_frob_1 step coeff_4 * z^4\n    let t86 = circuit_add(t84, t85); // Eval C_inv_frob_1 step + (coeff_4 * z^4)\n    let t87 = circuit_mul(t75, t3); // Eval C_inv_frob_1 step coeff_5 * z^5\n    let t88 = circuit_add(t86, t87); // Eval C_inv_frob_1 step + (coeff_5 * z^5)\n    let t89 = circuit_mul(t61, t4); // Eval C_inv_frob_1 step coeff_6 * z^6\n    let t90 = circuit_add(t88, t89); // Eval C_inv_frob_1 step + (coeff_6 * z^6)\n    let t91 = circuit_mul(t76, t5); // Eval C_inv_frob_1 step coeff_7 * z^7\n    let t92 = circuit_add(t90, t91); // Eval C_inv_frob_1 step + (coeff_7 * z^7)\n    let t93 = circuit_mul(t67, t6); // Eval C_inv_frob_1 step coeff_8 * z^8\n    let t94 = circuit_add(t92, t93); // Eval C_inv_frob_1 step + (coeff_8 * z^8)\n    let t95 = circuit_mul(t77, t7); // Eval C_inv_frob_1 step coeff_9 * z^9\n    let t96 = circuit_add(t94, t95); // Eval C_inv_frob_1 step + (coeff_9 * z^9)\n    let t97 = circuit_mul(t69, t8); // Eval C_inv_frob_1 step coeff_10 * z^10\n    let t98 = circuit_add(t96, t97); // Eval C_inv_frob_1 step + (coeff_10 * z^10)\n    let t99 = circuit_mul(t78, t9); // Eval C_inv_frob_1 step coeff_11 * z^11\n    let t100 = circuit_add(t98, t99); // Eval C_inv_frob_1 step + (coeff_11 * z^11)\n    let t101 = circuit_mul(in36, in28); // Eval precomputed_miller_loop_result step coeff_1 * z^1\n    let t102 = circuit_add(\n        in35, t101,\n    ); // Eval precomputed_miller_loop_result step + (coeff_1 * z^1)\n    let t103 = circuit_mul(in37, t0); // Eval precomputed_miller_loop_result step coeff_2 * z^2\n    let t104 = circuit_add(\n        t102, t103,\n    ); // Eval precomputed_miller_loop_result step + (coeff_2 * z^2)\n    let t105 = circuit_mul(in38, t1); // Eval precomputed_miller_loop_result step coeff_3 * z^3\n    let t106 = circuit_add(\n        t104, t105,\n    ); // Eval precomputed_miller_loop_result step + (coeff_3 * z^3)\n    let t107 = circuit_mul(in39, t2); // Eval precomputed_miller_loop_result step coeff_4 * z^4\n    let t108 = circuit_add(\n        t106, t107,\n    ); // Eval precomputed_miller_loop_result step + (coeff_4 * z^4)\n    let t109 = circuit_mul(in40, t3); // Eval precomputed_miller_loop_result step coeff_5 * z^5\n    let t110 = circuit_add(\n        t108, t109,\n    ); // Eval precomputed_miller_loop_result step + (coeff_5 * z^5)\n    let t111 = circuit_mul(in41, t4); // Eval precomputed_miller_loop_result step coeff_6 * z^6\n    let t112 = circuit_add(\n        t110, t111,\n    ); // Eval precomputed_miller_loop_result step + (coeff_6 * z^6)\n    let t113 = circuit_mul(in42, t5); // Eval precomputed_miller_loop_result step coeff_7 * z^7\n    let t114 = circuit_add(\n        t112, t113,\n    ); // Eval precomputed_miller_loop_result step + (coeff_7 * z^7)\n    let t115 = circuit_mul(in43, t6); // Eval precomputed_miller_loop_result step coeff_8 * z^8\n    let t116 = circuit_add(\n        t114, t115,\n    ); // Eval precomputed_miller_loop_result step + (coeff_8 * z^8)\n    let t117 = circuit_mul(in44, t7); // Eval precomputed_miller_loop_result step coeff_9 * z^9\n    let t118 = circuit_add(\n        t116, t117,\n    ); // Eval precomputed_miller_loop_result step + (coeff_9 * z^9)\n    let t119 = circuit_mul(in45, t8); // Eval precomputed_miller_loop_result step coeff_10 * z^10\n    let t120 = circuit_add(\n        t118, t119,\n    ); // Eval precomputed_miller_loop_result step + (coeff_10 * z^10)\n    let t121 = circuit_mul(in46, t9); // Eval precomputed_miller_loop_result step coeff_11 * z^11\n    let t122 = circuit_add(\n        t120, t121,\n    ); // Eval precomputed_miller_loop_result step + (coeff_11 * z^11)\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t37, t47, t100, t122).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(INITIALIZE_MPCHECK_EXT_MLR_BLS12_381_CONSTANTS.span()); // in0 - in15\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w0); // in16\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w1); // in17\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w2); // in18\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w3); // in19\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w4); // in20\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w5); // in21\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w6); // in22\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w7); // in23\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w8); // in24\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w9); // in25\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w10); // in26\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w11); // in27\n    circuit_inputs = circuit_inputs.next_2(z); // in28\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w0); // in29\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w2); // in30\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w4); // in31\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w6); // in32\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w8); // in33\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w10); // in34\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w0); // in35\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w1); // in36\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w2); // in37\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w3); // in38\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w4); // in39\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w5); // in40\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w6); // in41\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w7); // in42\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w8); // in43\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w9); // in44\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w10); // in45\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w11); // in46\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let c_inv_of_z: u384 = outputs.get_output(t37);\n    let scaling_factor_of_z: u384 = outputs.get_output(t47);\n    let c_inv_frob_1_conjugate_of_z: u384 = outputs.get_output(t100);\n    let precomputed_miller_loop_result_of_z: u384 = outputs.get_output(t122);\n    return (\n        c_inv_of_z,\n        scaling_factor_of_z,\n        c_inv_frob_1_conjugate_of_z,\n        precomputed_miller_loop_result_of_z,\n    );\n}\nconst INITIALIZE_MPCHECK_EXT_MLR_BLS12_381_CONSTANTS: [u384; 16] = [\n    u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x2, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x167b027b600febdb244714c5,\n        limb1: 0x8f17b50e12c47d65ce514a7c,\n        limb2: 0xfd0c6d66bb34bc7585f5abdf,\n        limb3: 0x18089593cbf626353947d5b1,\n    },\n    u384 {\n        limb0: 0x620a00022e01fffffffeffff,\n        limb1: 0xddb3a93be6f89688de17d813,\n        limb2: 0xdf76ce51ba69c6076a0f77ea,\n        limb3: 0x5f19672f,\n    },\n    u384 {\n        limb0: 0xe5d80be9902109f7dbc79812,\n        limb1: 0xefeedc2e0124838bdccf325e,\n        limb2: 0xd7a2fffc9072bb5785a686bc,\n        limb3: 0xd5e1c086ffe8016d063c6da,\n    },\n    u384 {\n        limb0: 0x4f49fffd8bfd00000000aaad,\n        limb1: 0x897d29650fb85f9b409427eb,\n        limb2: 0x63d4de85aa0d857d89759ad4,\n        limb3: 0x1a0111ea397fe699ec024086,\n    },\n    u384 {\n        limb0: 0xed3ffffb5dfb00000001aaaf,\n        limb1: 0xabc9802928bfc912627c4fd7,\n        limb2: 0x845e1033efa3bf761f6622e9,\n        limb3: 0x1a0111ea397fe6998ce8d956,\n    },\n    u384 {\n        limb0: 0x4aff0e653631f5d3000f022c,\n        limb1: 0x17d5be9b1d380acd8c747cdc,\n        limb2: 0x9163c08be7302c4818171fdd,\n        limb3: 0xb659fb20274bfb1be8ff4d6,\n    },\n    u384 {\n        limb0: 0xb153ffffb9feffffffffaaaa,\n        limb1: 0x6730d2a0f6b0f6241eabfffe,\n        limb2: 0x434bacd764774b84f38512bf,\n        limb3: 0x1a0111ea397fe69a4b1ba7b6,\n    },\n    u384 {\n        limb0: 0x4d6c7ec22cf78a126ddc4af3,\n        limb1: 0xec0c8ec971f63c5f282d5ac1,\n        limb2: 0x231f9fb854a14787b6c7b36f,\n        limb3: 0xfc3e2b36c4e03288e9e902,\n    },\n    u384 {\n        limb0: 0x9ad8fd8459ef1424dbb895e6,\n        limb1: 0xd8191d92e3ec78be505ab582,\n        limb2: 0x463f3f70a9428f0f6d8f66df,\n        limb3: 0x1f87c566d89c06511d3d204,\n    },\n    u384 {\n        limb0: 0x4f49fffd8bfd00000000aaac,\n        limb1: 0x897d29650fb85f9b409427eb,\n        limb2: 0x63d4de85aa0d857d89759ad4,\n        limb3: 0x1a0111ea397fe699ec024086,\n    },\n    u384 {\n        limb0: 0x72ec05f4c81084fbede3cc09,\n        limb1: 0x77f76e17009241c5ee67992f,\n        limb2: 0x6bd17ffe48395dabc2d3435e,\n        limb3: 0x6af0e0437ff400b6831e36d,\n    },\n    u384 {\n        limb0: 0x620a00022e01fffffffefffe,\n        limb1: 0xddb3a93be6f89688de17d813,\n        limb2: 0xdf76ce51ba69c6076a0f77ea,\n        limb3: 0x5f19672f,\n    },\n    u384 {\n        limb0: 0x8bd478cd1ee605167ff82995,\n        limb1: 0xdb45f3536814f0bd5871c190,\n        limb2: 0xfa99cc9170df3560e77982d0,\n        limb3: 0x144e4211384586c16bd3ad4a,\n    },\n    u384 {\n        limb0: 0x6654f19a83cd0a2cfff0a87f,\n        limb1: 0x4f5b1405d978eb5692378322,\n        limb2: 0xb1e7ec4b7d471f3cdb6df2e2,\n        limb3: 0xe9b7238370b26e88c8bb2df,\n    },\n];\n#[inline(always)]\npub fn run_BLS12_381_INITIALIZE_MPCHECK_circuit(\n    lambda_root_inverse: E12D<u384>, z: u384, scaling_factor: MillerLoopResultScalingFactor<u384>,\n) -> (u384, u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x2\n    let in2 = CE::<\n        CI<2>,\n    > {}; // 0x18089593cbf626353947d5b1fd0c6d66bb34bc7585f5abdf8f17b50e12c47d65ce514a7c167b027b600febdb244714c5\n    let in3 = CE::<\n        CI<3>,\n    > {}; // 0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffeffff\n    let in4 = CE::<\n        CI<4>,\n    > {}; // 0xd5e1c086ffe8016d063c6dad7a2fffc9072bb5785a686bcefeedc2e0124838bdccf325ee5d80be9902109f7dbc79812\n    let in5 = CE::<\n        CI<5>,\n    > {}; // 0x1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaad\n    let in6 = CE::<\n        CI<6>,\n    > {}; // 0x1a0111ea397fe6998ce8d956845e1033efa3bf761f6622e9abc9802928bfc912627c4fd7ed3ffffb5dfb00000001aaaf\n    let in7 = CE::<\n        CI<7>,\n    > {}; // 0xb659fb20274bfb1be8ff4d69163c08be7302c4818171fdd17d5be9b1d380acd8c747cdc4aff0e653631f5d3000f022c\n    let in8 = CE::<CI<8>> {}; // -0x1 % p\n    let in9 = CE::<\n        CI<9>,\n    > {}; // 0xfc3e2b36c4e03288e9e902231f9fb854a14787b6c7b36fec0c8ec971f63c5f282d5ac14d6c7ec22cf78a126ddc4af3\n    let in10 = CE::<\n        CI<10>,\n    > {}; // 0x1f87c566d89c06511d3d204463f3f70a9428f0f6d8f66dfd8191d92e3ec78be505ab5829ad8fd8459ef1424dbb895e6\n    let in11 = CE::<\n        CI<11>,\n    > {}; // 0x1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaac\n    let in12 = CE::<\n        CI<12>,\n    > {}; // 0x6af0e0437ff400b6831e36d6bd17ffe48395dabc2d3435e77f76e17009241c5ee67992f72ec05f4c81084fbede3cc09\n    let in13 = CE::<\n        CI<13>,\n    > {}; // 0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe\n    let in14 = CE::<\n        CI<14>,\n    > {}; // 0x144e4211384586c16bd3ad4afa99cc9170df3560e77982d0db45f3536814f0bd5871c1908bd478cd1ee605167ff82995\n    let in15 = CE::<\n        CI<15>,\n    > {}; // 0xe9b7238370b26e88c8bb2dfb1e7ec4b7d471f3cdb6df2e24f5b1405d978eb56923783226654f19a83cd0a2cfff0a87f\n\n    // INPUT stack\n    let (in16, in17, in18) = (CE::<CI<16>> {}, CE::<CI<17>> {}, CE::<CI<18>> {});\n    let (in19, in20, in21) = (CE::<CI<19>> {}, CE::<CI<20>> {}, CE::<CI<21>> {});\n    let (in22, in23, in24) = (CE::<CI<22>> {}, CE::<CI<23>> {}, CE::<CI<24>> {});\n    let (in25, in26, in27) = (CE::<CI<25>> {}, CE::<CI<26>> {}, CE::<CI<27>> {});\n    let (in28, in29, in30) = (CE::<CI<28>> {}, CE::<CI<29>> {}, CE::<CI<30>> {});\n    let (in31, in32, in33) = (CE::<CI<31>> {}, CE::<CI<32>> {}, CE::<CI<33>> {});\n    let in34 = CE::<CI<34>> {};\n    let t0 = circuit_mul(in28, in28); // Compute z^2\n    let t1 = circuit_mul(t0, in28); // Compute z^3\n    let t2 = circuit_mul(t1, in28); // Compute z^4\n    let t3 = circuit_mul(t2, in28); // Compute z^5\n    let t4 = circuit_mul(t3, in28); // Compute z^6\n    let t5 = circuit_mul(t4, in28); // Compute z^7\n    let t6 = circuit_mul(t5, in28); // Compute z^8\n    let t7 = circuit_mul(t6, in28); // Compute z^9\n    let t8 = circuit_mul(t7, in28); // Compute z^10\n    let t9 = circuit_mul(t8, in28); // Compute z^11\n    let t10 = circuit_sub(in0, in17);\n    let t11 = circuit_sub(in0, in19);\n    let t12 = circuit_sub(in0, in21);\n    let t13 = circuit_sub(in0, in23);\n    let t14 = circuit_sub(in0, in25);\n    let t15 = circuit_sub(in0, in27);\n    let t16 = circuit_mul(t10, in28); // Eval C_inv step coeff_1 * z^1\n    let t17 = circuit_add(in16, t16); // Eval C_inv step + (coeff_1 * z^1)\n    let t18 = circuit_mul(in18, t0); // Eval C_inv step coeff_2 * z^2\n    let t19 = circuit_add(t17, t18); // Eval C_inv step + (coeff_2 * z^2)\n    let t20 = circuit_mul(t11, t1); // Eval C_inv step coeff_3 * z^3\n    let t21 = circuit_add(t19, t20); // Eval C_inv step + (coeff_3 * z^3)\n    let t22 = circuit_mul(in20, t2); // Eval C_inv step coeff_4 * z^4\n    let t23 = circuit_add(t21, t22); // Eval C_inv step + (coeff_4 * z^4)\n    let t24 = circuit_mul(t12, t3); // Eval C_inv step coeff_5 * z^5\n    let t25 = circuit_add(t23, t24); // Eval C_inv step + (coeff_5 * z^5)\n    let t26 = circuit_mul(in22, t4); // Eval C_inv step coeff_6 * z^6\n    let t27 = circuit_add(t25, t26); // Eval C_inv step + (coeff_6 * z^6)\n    let t28 = circuit_mul(t13, t5); // Eval C_inv step coeff_7 * z^7\n    let t29 = circuit_add(t27, t28); // Eval C_inv step + (coeff_7 * z^7)\n    let t30 = circuit_mul(in24, t6); // Eval C_inv step coeff_8 * z^8\n    let t31 = circuit_add(t29, t30); // Eval C_inv step + (coeff_8 * z^8)\n    let t32 = circuit_mul(t14, t7); // Eval C_inv step coeff_9 * z^9\n    let t33 = circuit_add(t31, t32); // Eval C_inv step + (coeff_9 * z^9)\n    let t34 = circuit_mul(in26, t8); // Eval C_inv step coeff_10 * z^10\n    let t35 = circuit_add(t33, t34); // Eval C_inv step + (coeff_10 * z^10)\n    let t36 = circuit_mul(t15, t9); // Eval C_inv step coeff_11 * z^11\n    let t37 = circuit_add(t35, t36); // Eval C_inv step + (coeff_11 * z^11)\n    let t38 = circuit_mul(in30, t0); // Eval sparse poly W step coeff_2 * z^2\n    let t39 = circuit_add(in29, t38); // Eval sparse poly W step + coeff_2 * z^2\n    let t40 = circuit_mul(in31, t2); // Eval sparse poly W step coeff_4 * z^4\n    let t41 = circuit_add(t39, t40); // Eval sparse poly W step + coeff_4 * z^4\n    let t42 = circuit_mul(in32, t4); // Eval sparse poly W step coeff_6 * z^6\n    let t43 = circuit_add(t41, t42); // Eval sparse poly W step + coeff_6 * z^6\n    let t44 = circuit_mul(in33, t6); // Eval sparse poly W step coeff_8 * z^8\n    let t45 = circuit_add(t43, t44); // Eval sparse poly W step + coeff_8 * z^8\n    let t46 = circuit_mul(in34, t8); // Eval sparse poly W step coeff_10 * z^10\n    let t47 = circuit_add(t45, t46); // Eval sparse poly W step + coeff_10 * z^10\n    let t48 = circuit_mul(in22, in1);\n    let t49 = circuit_add(in16, t48);\n    let t50 = circuit_mul(t10, in2);\n    let t51 = circuit_mul(t13, in2);\n    let t52 = circuit_add(t50, t51);\n    let t53 = circuit_mul(in18, in3);\n    let t54 = circuit_mul(t14, in4);\n    let t55 = circuit_mul(in20, in5);\n    let t56 = circuit_mul(in26, in6);\n    let t57 = circuit_add(t55, t56);\n    let t58 = circuit_mul(t12, in7);\n    let t59 = circuit_mul(t15, in7);\n    let t60 = circuit_add(t58, t59);\n    let t61 = circuit_mul(in22, in8);\n    let t62 = circuit_mul(t10, in9);\n    let t63 = circuit_mul(t13, in10);\n    let t64 = circuit_add(t62, t63);\n    let t65 = circuit_mul(in18, in11);\n    let t66 = circuit_mul(in24, in11);\n    let t67 = circuit_add(t65, t66);\n    let t68 = circuit_mul(t11, in12);\n    let t69 = circuit_mul(in26, in13);\n    let t70 = circuit_mul(t12, in14);\n    let t71 = circuit_mul(t15, in15);\n    let t72 = circuit_add(t70, t71);\n    let t73 = circuit_sub(in0, t52);\n    let t74 = circuit_sub(in0, t54);\n    let t75 = circuit_sub(in0, t60);\n    let t76 = circuit_sub(in0, t64);\n    let t77 = circuit_sub(in0, t68);\n    let t78 = circuit_sub(in0, t72);\n    let t79 = circuit_mul(t73, in28); // Eval C_inv_frob_1 step coeff_1 * z^1\n    let t80 = circuit_add(t49, t79); // Eval C_inv_frob_1 step + (coeff_1 * z^1)\n    let t81 = circuit_mul(t53, t0); // Eval C_inv_frob_1 step coeff_2 * z^2\n    let t82 = circuit_add(t80, t81); // Eval C_inv_frob_1 step + (coeff_2 * z^2)\n    let t83 = circuit_mul(t74, t1); // Eval C_inv_frob_1 step coeff_3 * z^3\n    let t84 = circuit_add(t82, t83); // Eval C_inv_frob_1 step + (coeff_3 * z^3)\n    let t85 = circuit_mul(t57, t2); // Eval C_inv_frob_1 step coeff_4 * z^4\n    let t86 = circuit_add(t84, t85); // Eval C_inv_frob_1 step + (coeff_4 * z^4)\n    let t87 = circuit_mul(t75, t3); // Eval C_inv_frob_1 step coeff_5 * z^5\n    let t88 = circuit_add(t86, t87); // Eval C_inv_frob_1 step + (coeff_5 * z^5)\n    let t89 = circuit_mul(t61, t4); // Eval C_inv_frob_1 step coeff_6 * z^6\n    let t90 = circuit_add(t88, t89); // Eval C_inv_frob_1 step + (coeff_6 * z^6)\n    let t91 = circuit_mul(t76, t5); // Eval C_inv_frob_1 step coeff_7 * z^7\n    let t92 = circuit_add(t90, t91); // Eval C_inv_frob_1 step + (coeff_7 * z^7)\n    let t93 = circuit_mul(t67, t6); // Eval C_inv_frob_1 step coeff_8 * z^8\n    let t94 = circuit_add(t92, t93); // Eval C_inv_frob_1 step + (coeff_8 * z^8)\n    let t95 = circuit_mul(t77, t7); // Eval C_inv_frob_1 step coeff_9 * z^9\n    let t96 = circuit_add(t94, t95); // Eval C_inv_frob_1 step + (coeff_9 * z^9)\n    let t97 = circuit_mul(t69, t8); // Eval C_inv_frob_1 step coeff_10 * z^10\n    let t98 = circuit_add(t96, t97); // Eval C_inv_frob_1 step + (coeff_10 * z^10)\n    let t99 = circuit_mul(t78, t9); // Eval C_inv_frob_1 step coeff_11 * z^11\n    let t100 = circuit_add(t98, t99); // Eval C_inv_frob_1 step + (coeff_11 * z^11)\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t37, t47, t100).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(INITIALIZE_MPCHECK_BLS12_381_CONSTANTS.span()); // in0 - in15\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w0); // in16\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w1); // in17\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w2); // in18\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w3); // in19\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w4); // in20\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w5); // in21\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w6); // in22\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w7); // in23\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w8); // in24\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w9); // in25\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w10); // in26\n    circuit_inputs = circuit_inputs.next_2(lambda_root_inverse.w11); // in27\n    circuit_inputs = circuit_inputs.next_2(z); // in28\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w0); // in29\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w2); // in30\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w4); // in31\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w6); // in32\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w8); // in33\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w10); // in34\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let c_inv_of_z: u384 = outputs.get_output(t37);\n    let scaling_factor_of_z: u384 = outputs.get_output(t47);\n    let c_inv_frob_1_conjugate_of_z: u384 = outputs.get_output(t100);\n    return (c_inv_of_z, scaling_factor_of_z, c_inv_frob_1_conjugate_of_z);\n}\nconst INITIALIZE_MPCHECK_BLS12_381_CONSTANTS: [u384; 16] = [\n    u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x2, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x167b027b600febdb244714c5,\n        limb1: 0x8f17b50e12c47d65ce514a7c,\n        limb2: 0xfd0c6d66bb34bc7585f5abdf,\n        limb3: 0x18089593cbf626353947d5b1,\n    },\n    u384 {\n        limb0: 0x620a00022e01fffffffeffff,\n        limb1: 0xddb3a93be6f89688de17d813,\n        limb2: 0xdf76ce51ba69c6076a0f77ea,\n        limb3: 0x5f19672f,\n    },\n    u384 {\n        limb0: 0xe5d80be9902109f7dbc79812,\n        limb1: 0xefeedc2e0124838bdccf325e,\n        limb2: 0xd7a2fffc9072bb5785a686bc,\n        limb3: 0xd5e1c086ffe8016d063c6da,\n    },\n    u384 {\n        limb0: 0x4f49fffd8bfd00000000aaad,\n        limb1: 0x897d29650fb85f9b409427eb,\n        limb2: 0x63d4de85aa0d857d89759ad4,\n        limb3: 0x1a0111ea397fe699ec024086,\n    },\n    u384 {\n        limb0: 0xed3ffffb5dfb00000001aaaf,\n        limb1: 0xabc9802928bfc912627c4fd7,\n        limb2: 0x845e1033efa3bf761f6622e9,\n        limb3: 0x1a0111ea397fe6998ce8d956,\n    },\n    u384 {\n        limb0: 0x4aff0e653631f5d3000f022c,\n        limb1: 0x17d5be9b1d380acd8c747cdc,\n        limb2: 0x9163c08be7302c4818171fdd,\n        limb3: 0xb659fb20274bfb1be8ff4d6,\n    },\n    u384 {\n        limb0: 0xb153ffffb9feffffffffaaaa,\n        limb1: 0x6730d2a0f6b0f6241eabfffe,\n        limb2: 0x434bacd764774b84f38512bf,\n        limb3: 0x1a0111ea397fe69a4b1ba7b6,\n    },\n    u384 {\n        limb0: 0x4d6c7ec22cf78a126ddc4af3,\n        limb1: 0xec0c8ec971f63c5f282d5ac1,\n        limb2: 0x231f9fb854a14787b6c7b36f,\n        limb3: 0xfc3e2b36c4e03288e9e902,\n    },\n    u384 {\n        limb0: 0x9ad8fd8459ef1424dbb895e6,\n        limb1: 0xd8191d92e3ec78be505ab582,\n        limb2: 0x463f3f70a9428f0f6d8f66df,\n        limb3: 0x1f87c566d89c06511d3d204,\n    },\n    u384 {\n        limb0: 0x4f49fffd8bfd00000000aaac,\n        limb1: 0x897d29650fb85f9b409427eb,\n        limb2: 0x63d4de85aa0d857d89759ad4,\n        limb3: 0x1a0111ea397fe699ec024086,\n    },\n    u384 {\n        limb0: 0x72ec05f4c81084fbede3cc09,\n        limb1: 0x77f76e17009241c5ee67992f,\n        limb2: 0x6bd17ffe48395dabc2d3435e,\n        limb3: 0x6af0e0437ff400b6831e36d,\n    },\n    u384 {\n        limb0: 0x620a00022e01fffffffefffe,\n        limb1: 0xddb3a93be6f89688de17d813,\n        limb2: 0xdf76ce51ba69c6076a0f77ea,\n        limb3: 0x5f19672f,\n    },\n    u384 {\n        limb0: 0x8bd478cd1ee605167ff82995,\n        limb1: 0xdb45f3536814f0bd5871c190,\n        limb2: 0xfa99cc9170df3560e77982d0,\n        limb3: 0x144e4211384586c16bd3ad4a,\n    },\n    u384 {\n        limb0: 0x6654f19a83cd0a2cfff0a87f,\n        limb1: 0x4f5b1405d978eb5692378322,\n        limb2: 0xb1e7ec4b7d471f3cdb6df2e2,\n        limb3: 0xe9b7238370b26e88c8bb2df,\n    },\n];\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_BIT00_2P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u384>,\n    G2_line_2nd_0_0: G2Line<u384>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u384>,\n    G2_line_2nd_0_1: G2Line<u384>,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (u384,) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let in24 = CE::<CI<24>> {};\n    let t0 = circuit_mul(in23, in23); // compute z^2\n    let t1 = circuit_mul(t0, in23); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, t0); // compute z^8\n    let t4 = circuit_mul(in21, in21); // Square f evaluation in Z, the result of previous bit.\n    let t5 = circuit_sub(in4, in5);\n    let t6 = circuit_mul(t5, in0); // eval bls line by yInv\n    let t7 = circuit_sub(in2, in3);\n    let t8 = circuit_mul(t7, in1); // eval blsline by xNegOverY\n    let t9 = circuit_mul(in5, in0); // eval bls line by yInv\n    let t10 = circuit_mul(in3, in1); // eval bls line by xNegOverY\n    let t11 = circuit_mul(t8, t0); // Eval sparse poly line_0p_1 step coeff_2 * z^2\n    let t12 = circuit_add(t6, t11); // Eval sparse poly line_0p_1 step + coeff_2 * z^2\n    let t13 = circuit_add(t12, t1); // Eval sparse poly line_0p_1 step + 1*z^3\n    let t14 = circuit_mul(t9, t2); // Eval sparse poly line_0p_1 step coeff_6 * z^6\n    let t15 = circuit_add(t13, t14); // Eval sparse poly line_0p_1 step + coeff_6 * z^6\n    let t16 = circuit_mul(t10, t3); // Eval sparse poly line_0p_1 step coeff_8 * z^8\n    let t17 = circuit_add(t15, t16); // Eval sparse poly line_0p_1 step + coeff_8 * z^8\n    let t18 = circuit_mul(t4, t17); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t19 = circuit_sub(in8, in9);\n    let t20 = circuit_mul(t19, in10); // eval bls line by yInv\n    let t21 = circuit_sub(in6, in7);\n    let t22 = circuit_mul(t21, in11); // eval blsline by xNegOverY\n    let t23 = circuit_mul(in9, in10); // eval bls line by yInv\n    let t24 = circuit_mul(in7, in11); // eval bls line by xNegOverY\n    let t25 = circuit_mul(t22, t0); // Eval sparse poly line_1p_1 step coeff_2 * z^2\n    let t26 = circuit_add(t20, t25); // Eval sparse poly line_1p_1 step + coeff_2 * z^2\n    let t27 = circuit_add(t26, t1); // Eval sparse poly line_1p_1 step + 1*z^3\n    let t28 = circuit_mul(t23, t2); // Eval sparse poly line_1p_1 step coeff_6 * z^6\n    let t29 = circuit_add(t27, t28); // Eval sparse poly line_1p_1 step + coeff_6 * z^6\n    let t30 = circuit_mul(t24, t3); // Eval sparse poly line_1p_1 step coeff_8 * z^8\n    let t31 = circuit_add(t29, t30); // Eval sparse poly line_1p_1 step + coeff_8 * z^8\n    let t32 = circuit_mul(t18, t31); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t33 = circuit_mul(\n        t32, t32,\n    ); // Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\n    let t34 = circuit_sub(in14, in15);\n    let t35 = circuit_mul(t34, in0); // eval bls line by yInv\n    let t36 = circuit_sub(in12, in13);\n    let t37 = circuit_mul(t36, in1); // eval blsline by xNegOverY\n    let t38 = circuit_mul(in15, in0); // eval bls line by yInv\n    let t39 = circuit_mul(in13, in1); // eval bls line by xNegOverY\n    let t40 = circuit_mul(t37, t0); // Eval sparse poly line_0p_1 step coeff_2 * z^2\n    let t41 = circuit_add(t35, t40); // Eval sparse poly line_0p_1 step + coeff_2 * z^2\n    let t42 = circuit_add(t41, t1); // Eval sparse poly line_0p_1 step + 1*z^3\n    let t43 = circuit_mul(t38, t2); // Eval sparse poly line_0p_1 step coeff_6 * z^6\n    let t44 = circuit_add(t42, t43); // Eval sparse poly line_0p_1 step + coeff_6 * z^6\n    let t45 = circuit_mul(t39, t3); // Eval sparse poly line_0p_1 step coeff_8 * z^8\n    let t46 = circuit_add(t44, t45); // Eval sparse poly line_0p_1 step + coeff_8 * z^8\n    let t47 = circuit_mul(t33, t46); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t48 = circuit_sub(in18, in19);\n    let t49 = circuit_mul(t48, in10); // eval bls line by yInv\n    let t50 = circuit_sub(in16, in17);\n    let t51 = circuit_mul(t50, in11); // eval blsline by xNegOverY\n    let t52 = circuit_mul(in19, in10); // eval bls line by yInv\n    let t53 = circuit_mul(in17, in11); // eval bls line by xNegOverY\n    let t54 = circuit_mul(t51, t0); // Eval sparse poly line_1p_1 step coeff_2 * z^2\n    let t55 = circuit_add(t49, t54); // Eval sparse poly line_1p_1 step + coeff_2 * z^2\n    let t56 = circuit_add(t55, t1); // Eval sparse poly line_1p_1 step + 1*z^3\n    let t57 = circuit_mul(t52, t2); // Eval sparse poly line_1p_1 step coeff_6 * z^6\n    let t58 = circuit_add(t56, t57); // Eval sparse poly line_1p_1 step + coeff_6 * z^6\n    let t59 = circuit_mul(t53, t3); // Eval sparse poly line_1p_1 step coeff_8 * z^8\n    let t60 = circuit_add(t58, t59); // Eval sparse poly line_1p_1 step + coeff_8 * z^8\n    let t61 = circuit_mul(t47, t60); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t62 = circuit_sub(t61, in22); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t63 = circuit_mul(in24, in20);\n    let t64 = circuit_add(t63, t62); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t64,).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in0\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in1\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in2\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in3\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r0a0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r0a1); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r1a0); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r1a1); // in9\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in10\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r0a0); // in16\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r0a1); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r1a0); // in18\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r1a1); // in19\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in20\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in21\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in22\n    circuit_inputs = circuit_inputs.next_2(z); // in23\n    circuit_inputs = circuit_inputs.next_2(c1); // in24\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let lhs_i_plus_one: u384 = outputs.get_output(t64);\n    return (lhs_i_plus_one,);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_BIT00_3P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u384>,\n    G2_line_2nd_0_0: G2Line<u384>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u384>,\n    G2_line_2nd_0_1: G2Line<u384>,\n    yInv_2: u384,\n    xNegOverY_2: u384,\n    Q_2: G2Point,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (G2Point, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x3\n    let in1 = CE::<CI<1>> {}; // 0x6\n    let in2 = CE::<CI<2>> {}; // 0x0\n\n    // INPUT stack\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let (in24, in25, in26) = (CE::<CI<24>> {}, CE::<CI<25>> {}, CE::<CI<26>> {});\n    let (in27, in28, in29) = (CE::<CI<27>> {}, CE::<CI<28>> {}, CE::<CI<29>> {});\n    let (in30, in31, in32) = (CE::<CI<30>> {}, CE::<CI<31>> {}, CE::<CI<32>> {});\n    let in33 = CE::<CI<33>> {};\n    let t0 = circuit_mul(in32, in32); // compute z^2\n    let t1 = circuit_mul(t0, in32); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, t0); // compute z^8\n    let t4 = circuit_mul(in30, in30); // Square f evaluation in Z, the result of previous bit.\n    let t5 = circuit_sub(in7, in8);\n    let t6 = circuit_mul(t5, in3); // eval bls line by yInv\n    let t7 = circuit_sub(in5, in6);\n    let t8 = circuit_mul(t7, in4); // eval blsline by xNegOverY\n    let t9 = circuit_mul(in8, in3); // eval bls line by yInv\n    let t10 = circuit_mul(in6, in4); // eval bls line by xNegOverY\n    let t11 = circuit_mul(t8, t0); // Eval sparse poly line_0p_1 step coeff_2 * z^2\n    let t12 = circuit_add(t6, t11); // Eval sparse poly line_0p_1 step + coeff_2 * z^2\n    let t13 = circuit_add(t12, t1); // Eval sparse poly line_0p_1 step + 1*z^3\n    let t14 = circuit_mul(t9, t2); // Eval sparse poly line_0p_1 step coeff_6 * z^6\n    let t15 = circuit_add(t13, t14); // Eval sparse poly line_0p_1 step + coeff_6 * z^6\n    let t16 = circuit_mul(t10, t3); // Eval sparse poly line_0p_1 step coeff_8 * z^8\n    let t17 = circuit_add(t15, t16); // Eval sparse poly line_0p_1 step + coeff_8 * z^8\n    let t18 = circuit_mul(t4, t17); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t19 = circuit_sub(in11, in12);\n    let t20 = circuit_mul(t19, in13); // eval bls line by yInv\n    let t21 = circuit_sub(in9, in10);\n    let t22 = circuit_mul(t21, in14); // eval blsline by xNegOverY\n    let t23 = circuit_mul(in12, in13); // eval bls line by yInv\n    let t24 = circuit_mul(in10, in14); // eval bls line by xNegOverY\n    let t25 = circuit_mul(t22, t0); // Eval sparse poly line_1p_1 step coeff_2 * z^2\n    let t26 = circuit_add(t20, t25); // Eval sparse poly line_1p_1 step + coeff_2 * z^2\n    let t27 = circuit_add(t26, t1); // Eval sparse poly line_1p_1 step + 1*z^3\n    let t28 = circuit_mul(t23, t2); // Eval sparse poly line_1p_1 step coeff_6 * z^6\n    let t29 = circuit_add(t27, t28); // Eval sparse poly line_1p_1 step + coeff_6 * z^6\n    let t30 = circuit_mul(t24, t3); // Eval sparse poly line_1p_1 step coeff_8 * z^8\n    let t31 = circuit_add(t29, t30); // Eval sparse poly line_1p_1 step + coeff_8 * z^8\n    let t32 = circuit_mul(t18, t31); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t33 = circuit_add(in25, in26); // Doubling slope numerator start\n    let t34 = circuit_sub(in25, in26);\n    let t35 = circuit_mul(t33, t34);\n    let t36 = circuit_mul(in25, in26);\n    let t37 = circuit_mul(t35, in0);\n    let t38 = circuit_mul(t36, in1); // Doubling slope numerator end\n    let t39 = circuit_add(in27, in27); // Fp2 add coeff 0/1\n    let t40 = circuit_add(in28, in28); // Fp2 add coeff 1/1\n    let t41 = circuit_mul(t39, t39); // Fp2 Inv start\n    let t42 = circuit_mul(t40, t40);\n    let t43 = circuit_add(t41, t42);\n    let t44 = circuit_inverse(t43);\n    let t45 = circuit_mul(t39, t44); // Fp2 Inv real part end\n    let t46 = circuit_mul(t40, t44);\n    let t47 = circuit_sub(in2, t46); // Fp2 Inv imag part end\n    let t48 = circuit_mul(t37, t45); // Fp2 mul start\n    let t49 = circuit_mul(t38, t47);\n    let t50 = circuit_sub(t48, t49); // Fp2 mul real part end\n    let t51 = circuit_mul(t37, t47);\n    let t52 = circuit_mul(t38, t45);\n    let t53 = circuit_add(t51, t52); // Fp2 mul imag part end\n    let t54 = circuit_add(t50, t53);\n    let t55 = circuit_sub(t50, t53);\n    let t56 = circuit_mul(t54, t55);\n    let t57 = circuit_mul(t50, t53);\n    let t58 = circuit_add(t57, t57);\n    let t59 = circuit_add(in25, in25); // Fp2 add coeff 0/1\n    let t60 = circuit_add(in26, in26); // Fp2 add coeff 1/1\n    let t61 = circuit_sub(t56, t59); // Fp2 sub coeff 0/1\n    let t62 = circuit_sub(t58, t60); // Fp2 sub coeff 1/1\n    let t63 = circuit_sub(in25, t61); // Fp2 sub coeff 0/1\n    let t64 = circuit_sub(in26, t62); // Fp2 sub coeff 1/1\n    let t65 = circuit_mul(t50, t63); // Fp2 mul start\n    let t66 = circuit_mul(t53, t64);\n    let t67 = circuit_sub(t65, t66); // Fp2 mul real part end\n    let t68 = circuit_mul(t50, t64);\n    let t69 = circuit_mul(t53, t63);\n    let t70 = circuit_add(t68, t69); // Fp2 mul imag part end\n    let t71 = circuit_sub(t67, in27); // Fp2 sub coeff 0/1\n    let t72 = circuit_sub(t70, in28); // Fp2 sub coeff 1/1\n    let t73 = circuit_mul(t50, in25); // Fp2 mul start\n    let t74 = circuit_mul(t53, in26);\n    let t75 = circuit_sub(t73, t74); // Fp2 mul real part end\n    let t76 = circuit_mul(t50, in26);\n    let t77 = circuit_mul(t53, in25);\n    let t78 = circuit_add(t76, t77); // Fp2 mul imag part end\n    let t79 = circuit_sub(t75, in27); // Fp2 sub coeff 0/1\n    let t80 = circuit_sub(t78, in28); // Fp2 sub coeff 1/1\n    let t81 = circuit_sub(t79, t80);\n    let t82 = circuit_mul(t81, in23); // eval bls line by yInv\n    let t83 = circuit_sub(t50, t53);\n    let t84 = circuit_mul(t83, in24); // eval blsline by xNegOverY\n    let t85 = circuit_mul(t80, in23); // eval bls line by yInv\n    let t86 = circuit_mul(t53, in24); // eval bls line by xNegOverY\n    let t87 = circuit_mul(t84, t0); // Eval sparse poly line_2p_1 step coeff_2 * z^2\n    let t88 = circuit_add(t82, t87); // Eval sparse poly line_2p_1 step + coeff_2 * z^2\n    let t89 = circuit_add(t88, t1); // Eval sparse poly line_2p_1 step + 1*z^3\n    let t90 = circuit_mul(t85, t2); // Eval sparse poly line_2p_1 step coeff_6 * z^6\n    let t91 = circuit_add(t89, t90); // Eval sparse poly line_2p_1 step + coeff_6 * z^6\n    let t92 = circuit_mul(t86, t3); // Eval sparse poly line_2p_1 step coeff_8 * z^8\n    let t93 = circuit_add(t91, t92); // Eval sparse poly line_2p_1 step + coeff_8 * z^8\n    let t94 = circuit_mul(t32, t93); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t95 = circuit_mul(\n        t94, t94,\n    ); // Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\n    let t96 = circuit_sub(in17, in18);\n    let t97 = circuit_mul(t96, in3); // eval bls line by yInv\n    let t98 = circuit_sub(in15, in16);\n    let t99 = circuit_mul(t98, in4); // eval blsline by xNegOverY\n    let t100 = circuit_mul(in18, in3); // eval bls line by yInv\n    let t101 = circuit_mul(in16, in4); // eval bls line by xNegOverY\n    let t102 = circuit_mul(t99, t0); // Eval sparse poly line_0p_1 step coeff_2 * z^2\n    let t103 = circuit_add(t97, t102); // Eval sparse poly line_0p_1 step + coeff_2 * z^2\n    let t104 = circuit_add(t103, t1); // Eval sparse poly line_0p_1 step + 1*z^3\n    let t105 = circuit_mul(t100, t2); // Eval sparse poly line_0p_1 step coeff_6 * z^6\n    let t106 = circuit_add(t104, t105); // Eval sparse poly line_0p_1 step + coeff_6 * z^6\n    let t107 = circuit_mul(t101, t3); // Eval sparse poly line_0p_1 step coeff_8 * z^8\n    let t108 = circuit_add(t106, t107); // Eval sparse poly line_0p_1 step + coeff_8 * z^8\n    let t109 = circuit_mul(t95, t108); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t110 = circuit_sub(in21, in22);\n    let t111 = circuit_mul(t110, in13); // eval bls line by yInv\n    let t112 = circuit_sub(in19, in20);\n    let t113 = circuit_mul(t112, in14); // eval blsline by xNegOverY\n    let t114 = circuit_mul(in22, in13); // eval bls line by yInv\n    let t115 = circuit_mul(in20, in14); // eval bls line by xNegOverY\n    let t116 = circuit_mul(t113, t0); // Eval sparse poly line_1p_1 step coeff_2 * z^2\n    let t117 = circuit_add(t111, t116); // Eval sparse poly line_1p_1 step + coeff_2 * z^2\n    let t118 = circuit_add(t117, t1); // Eval sparse poly line_1p_1 step + 1*z^3\n    let t119 = circuit_mul(t114, t2); // Eval sparse poly line_1p_1 step coeff_6 * z^6\n    let t120 = circuit_add(t118, t119); // Eval sparse poly line_1p_1 step + coeff_6 * z^6\n    let t121 = circuit_mul(t115, t3); // Eval sparse poly line_1p_1 step coeff_8 * z^8\n    let t122 = circuit_add(t120, t121); // Eval sparse poly line_1p_1 step + coeff_8 * z^8\n    let t123 = circuit_mul(t109, t122); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t124 = circuit_add(t61, t62); // Doubling slope numerator start\n    let t125 = circuit_sub(t61, t62);\n    let t126 = circuit_mul(t124, t125);\n    let t127 = circuit_mul(t61, t62);\n    let t128 = circuit_mul(t126, in0);\n    let t129 = circuit_mul(t127, in1); // Doubling slope numerator end\n    let t130 = circuit_add(t71, t71); // Fp2 add coeff 0/1\n    let t131 = circuit_add(t72, t72); // Fp2 add coeff 1/1\n    let t132 = circuit_mul(t130, t130); // Fp2 Inv start\n    let t133 = circuit_mul(t131, t131);\n    let t134 = circuit_add(t132, t133);\n    let t135 = circuit_inverse(t134);\n    let t136 = circuit_mul(t130, t135); // Fp2 Inv real part end\n    let t137 = circuit_mul(t131, t135);\n    let t138 = circuit_sub(in2, t137); // Fp2 Inv imag part end\n    let t139 = circuit_mul(t128, t136); // Fp2 mul start\n    let t140 = circuit_mul(t129, t138);\n    let t141 = circuit_sub(t139, t140); // Fp2 mul real part end\n    let t142 = circuit_mul(t128, t138);\n    let t143 = circuit_mul(t129, t136);\n    let t144 = circuit_add(t142, t143); // Fp2 mul imag part end\n    let t145 = circuit_add(t141, t144);\n    let t146 = circuit_sub(t141, t144);\n    let t147 = circuit_mul(t145, t146);\n    let t148 = circuit_mul(t141, t144);\n    let t149 = circuit_add(t148, t148);\n    let t150 = circuit_add(t61, t61); // Fp2 add coeff 0/1\n    let t151 = circuit_add(t62, t62); // Fp2 add coeff 1/1\n    let t152 = circuit_sub(t147, t150); // Fp2 sub coeff 0/1\n    let t153 = circuit_sub(t149, t151); // Fp2 sub coeff 1/1\n    let t154 = circuit_sub(t61, t152); // Fp2 sub coeff 0/1\n    let t155 = circuit_sub(t62, t153); // Fp2 sub coeff 1/1\n    let t156 = circuit_mul(t141, t154); // Fp2 mul start\n    let t157 = circuit_mul(t144, t155);\n    let t158 = circuit_sub(t156, t157); // Fp2 mul real part end\n    let t159 = circuit_mul(t141, t155);\n    let t160 = circuit_mul(t144, t154);\n    let t161 = circuit_add(t159, t160); // Fp2 mul imag part end\n    let t162 = circuit_sub(t158, t71); // Fp2 sub coeff 0/1\n    let t163 = circuit_sub(t161, t72); // Fp2 sub coeff 1/1\n    let t164 = circuit_mul(t141, t61); // Fp2 mul start\n    let t165 = circuit_mul(t144, t62);\n    let t166 = circuit_sub(t164, t165); // Fp2 mul real part end\n    let t167 = circuit_mul(t141, t62);\n    let t168 = circuit_mul(t144, t61);\n    let t169 = circuit_add(t167, t168); // Fp2 mul imag part end\n    let t170 = circuit_sub(t166, t71); // Fp2 sub coeff 0/1\n    let t171 = circuit_sub(t169, t72); // Fp2 sub coeff 1/1\n    let t172 = circuit_sub(t170, t171);\n    let t173 = circuit_mul(t172, in23); // eval bls line by yInv\n    let t174 = circuit_sub(t141, t144);\n    let t175 = circuit_mul(t174, in24); // eval blsline by xNegOverY\n    let t176 = circuit_mul(t171, in23); // eval bls line by yInv\n    let t177 = circuit_mul(t144, in24); // eval bls line by xNegOverY\n    let t178 = circuit_mul(t175, t0); // Eval sparse poly line_2p_1 step coeff_2 * z^2\n    let t179 = circuit_add(t173, t178); // Eval sparse poly line_2p_1 step + coeff_2 * z^2\n    let t180 = circuit_add(t179, t1); // Eval sparse poly line_2p_1 step + 1*z^3\n    let t181 = circuit_mul(t176, t2); // Eval sparse poly line_2p_1 step coeff_6 * z^6\n    let t182 = circuit_add(t180, t181); // Eval sparse poly line_2p_1 step + coeff_6 * z^6\n    let t183 = circuit_mul(t177, t3); // Eval sparse poly line_2p_1 step coeff_8 * z^8\n    let t184 = circuit_add(t182, t183); // Eval sparse poly line_2p_1 step + coeff_8 * z^8\n    let t185 = circuit_mul(t123, t184); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t186 = circuit_sub(t185, in31); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t187 = circuit_mul(in33, in29);\n    let t188 = circuit_add(t187, t186); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t152, t153, t162, t163, t188).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x6, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in2\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in3\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r0a0); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r0a1); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r1a0); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r1a1); // in12\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in13\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in15\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in16\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in18\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r0a0); // in19\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r0a1); // in20\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r1a0); // in21\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r1a1); // in22\n    circuit_inputs = circuit_inputs.next_2(yInv_2); // in23\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_2); // in24\n    circuit_inputs = circuit_inputs.next_2(Q_2.x0); // in25\n    circuit_inputs = circuit_inputs.next_2(Q_2.x1); // in26\n    circuit_inputs = circuit_inputs.next_2(Q_2.y0); // in27\n    circuit_inputs = circuit_inputs.next_2(Q_2.y1); // in28\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in29\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in30\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in31\n    circuit_inputs = circuit_inputs.next_2(z); // in32\n    circuit_inputs = circuit_inputs.next_2(c1); // in33\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t152),\n        x1: outputs.get_output(t153),\n        y0: outputs.get_output(t162),\n        y1: outputs.get_output(t163),\n    };\n    let lhs_i_plus_one: u384 = outputs.get_output(t188);\n    return (Q0, lhs_i_plus_one);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_BIT0_2P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u384>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u384>,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (u384,) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16) = (CE::<CI<15>> {}, CE::<CI<16>> {});\n    let t0 = circuit_mul(in15, in15); // compute z^2\n    let t1 = circuit_mul(t0, in15); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, t0); // compute z^8\n    let t4 = circuit_mul(in13, in13); // Square f evaluation in Z, the result of previous bit.\n    let t5 = circuit_sub(in4, in5);\n    let t6 = circuit_mul(t5, in0); // eval bls line by yInv\n    let t7 = circuit_sub(in2, in3);\n    let t8 = circuit_mul(t7, in1); // eval blsline by xNegOverY\n    let t9 = circuit_mul(in5, in0); // eval bls line by yInv\n    let t10 = circuit_mul(in3, in1); // eval bls line by xNegOverY\n    let t11 = circuit_mul(t8, t0); // Eval sparse poly line_0p_1 step coeff_2 * z^2\n    let t12 = circuit_add(t6, t11); // Eval sparse poly line_0p_1 step + coeff_2 * z^2\n    let t13 = circuit_add(t12, t1); // Eval sparse poly line_0p_1 step + 1*z^3\n    let t14 = circuit_mul(t9, t2); // Eval sparse poly line_0p_1 step coeff_6 * z^6\n    let t15 = circuit_add(t13, t14); // Eval sparse poly line_0p_1 step + coeff_6 * z^6\n    let t16 = circuit_mul(t10, t3); // Eval sparse poly line_0p_1 step coeff_8 * z^8\n    let t17 = circuit_add(t15, t16); // Eval sparse poly line_0p_1 step + coeff_8 * z^8\n    let t18 = circuit_mul(t4, t17); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t19 = circuit_sub(in10, in11);\n    let t20 = circuit_mul(t19, in6); // eval bls line by yInv\n    let t21 = circuit_sub(in8, in9);\n    let t22 = circuit_mul(t21, in7); // eval blsline by xNegOverY\n    let t23 = circuit_mul(in11, in6); // eval bls line by yInv\n    let t24 = circuit_mul(in9, in7); // eval bls line by xNegOverY\n    let t25 = circuit_mul(t22, t0); // Eval sparse poly line_1p_1 step coeff_2 * z^2\n    let t26 = circuit_add(t20, t25); // Eval sparse poly line_1p_1 step + coeff_2 * z^2\n    let t27 = circuit_add(t26, t1); // Eval sparse poly line_1p_1 step + 1*z^3\n    let t28 = circuit_mul(t23, t2); // Eval sparse poly line_1p_1 step coeff_6 * z^6\n    let t29 = circuit_add(t27, t28); // Eval sparse poly line_1p_1 step + coeff_6 * z^6\n    let t30 = circuit_mul(t24, t3); // Eval sparse poly line_1p_1 step coeff_8 * z^8\n    let t31 = circuit_add(t29, t30); // Eval sparse poly line_1p_1 step + coeff_8 * z^8\n    let t32 = circuit_mul(t18, t31); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t33 = circuit_sub(t32, in14); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t34 = circuit_mul(in16, in12);\n    let t35 = circuit_add(t34, t33); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t35,).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in0\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in1\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in2\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in3\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in5\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in6\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in11\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in12\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in13\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in14\n    circuit_inputs = circuit_inputs.next_2(z); // in15\n    circuit_inputs = circuit_inputs.next_2(c1); // in16\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let lhs_i_plus_one: u384 = outputs.get_output(t35);\n    return (lhs_i_plus_one,);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_BIT0_3P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u384>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u384>,\n    yInv_2: u384,\n    xNegOverY_2: u384,\n    Q_2: G2Point,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (G2Point, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x3\n    let in1 = CE::<CI<1>> {}; // 0x6\n    let in2 = CE::<CI<2>> {}; // 0x0\n\n    // INPUT stack\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let (in24, in25) = (CE::<CI<24>> {}, CE::<CI<25>> {});\n    let t0 = circuit_mul(in24, in24); // compute z^2\n    let t1 = circuit_mul(t0, in24); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, t0); // compute z^8\n    let t4 = circuit_mul(in22, in22); // Square f evaluation in Z, the result of previous bit.\n    let t5 = circuit_sub(in7, in8);\n    let t6 = circuit_mul(t5, in3); // eval bls line by yInv\n    let t7 = circuit_sub(in5, in6);\n    let t8 = circuit_mul(t7, in4); // eval blsline by xNegOverY\n    let t9 = circuit_mul(in8, in3); // eval bls line by yInv\n    let t10 = circuit_mul(in6, in4); // eval bls line by xNegOverY\n    let t11 = circuit_mul(t8, t0); // Eval sparse poly line_0p_1 step coeff_2 * z^2\n    let t12 = circuit_add(t6, t11); // Eval sparse poly line_0p_1 step + coeff_2 * z^2\n    let t13 = circuit_add(t12, t1); // Eval sparse poly line_0p_1 step + 1*z^3\n    let t14 = circuit_mul(t9, t2); // Eval sparse poly line_0p_1 step coeff_6 * z^6\n    let t15 = circuit_add(t13, t14); // Eval sparse poly line_0p_1 step + coeff_6 * z^6\n    let t16 = circuit_mul(t10, t3); // Eval sparse poly line_0p_1 step coeff_8 * z^8\n    let t17 = circuit_add(t15, t16); // Eval sparse poly line_0p_1 step + coeff_8 * z^8\n    let t18 = circuit_mul(t4, t17); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t19 = circuit_sub(in13, in14);\n    let t20 = circuit_mul(t19, in9); // eval bls line by yInv\n    let t21 = circuit_sub(in11, in12);\n    let t22 = circuit_mul(t21, in10); // eval blsline by xNegOverY\n    let t23 = circuit_mul(in14, in9); // eval bls line by yInv\n    let t24 = circuit_mul(in12, in10); // eval bls line by xNegOverY\n    let t25 = circuit_mul(t22, t0); // Eval sparse poly line_1p_1 step coeff_2 * z^2\n    let t26 = circuit_add(t20, t25); // Eval sparse poly line_1p_1 step + coeff_2 * z^2\n    let t27 = circuit_add(t26, t1); // Eval sparse poly line_1p_1 step + 1*z^3\n    let t28 = circuit_mul(t23, t2); // Eval sparse poly line_1p_1 step coeff_6 * z^6\n    let t29 = circuit_add(t27, t28); // Eval sparse poly line_1p_1 step + coeff_6 * z^6\n    let t30 = circuit_mul(t24, t3); // Eval sparse poly line_1p_1 step coeff_8 * z^8\n    let t31 = circuit_add(t29, t30); // Eval sparse poly line_1p_1 step + coeff_8 * z^8\n    let t32 = circuit_mul(t18, t31); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t33 = circuit_add(in17, in18); // Doubling slope numerator start\n    let t34 = circuit_sub(in17, in18);\n    let t35 = circuit_mul(t33, t34);\n    let t36 = circuit_mul(in17, in18);\n    let t37 = circuit_mul(t35, in0);\n    let t38 = circuit_mul(t36, in1); // Doubling slope numerator end\n    let t39 = circuit_add(in19, in19); // Fp2 add coeff 0/1\n    let t40 = circuit_add(in20, in20); // Fp2 add coeff 1/1\n    let t41 = circuit_mul(t39, t39); // Fp2 Inv start\n    let t42 = circuit_mul(t40, t40);\n    let t43 = circuit_add(t41, t42);\n    let t44 = circuit_inverse(t43);\n    let t45 = circuit_mul(t39, t44); // Fp2 Inv real part end\n    let t46 = circuit_mul(t40, t44);\n    let t47 = circuit_sub(in2, t46); // Fp2 Inv imag part end\n    let t48 = circuit_mul(t37, t45); // Fp2 mul start\n    let t49 = circuit_mul(t38, t47);\n    let t50 = circuit_sub(t48, t49); // Fp2 mul real part end\n    let t51 = circuit_mul(t37, t47);\n    let t52 = circuit_mul(t38, t45);\n    let t53 = circuit_add(t51, t52); // Fp2 mul imag part end\n    let t54 = circuit_add(t50, t53);\n    let t55 = circuit_sub(t50, t53);\n    let t56 = circuit_mul(t54, t55);\n    let t57 = circuit_mul(t50, t53);\n    let t58 = circuit_add(t57, t57);\n    let t59 = circuit_add(in17, in17); // Fp2 add coeff 0/1\n    let t60 = circuit_add(in18, in18); // Fp2 add coeff 1/1\n    let t61 = circuit_sub(t56, t59); // Fp2 sub coeff 0/1\n    let t62 = circuit_sub(t58, t60); // Fp2 sub coeff 1/1\n    let t63 = circuit_sub(in17, t61); // Fp2 sub coeff 0/1\n    let t64 = circuit_sub(in18, t62); // Fp2 sub coeff 1/1\n    let t65 = circuit_mul(t50, t63); // Fp2 mul start\n    let t66 = circuit_mul(t53, t64);\n    let t67 = circuit_sub(t65, t66); // Fp2 mul real part end\n    let t68 = circuit_mul(t50, t64);\n    let t69 = circuit_mul(t53, t63);\n    let t70 = circuit_add(t68, t69); // Fp2 mul imag part end\n    let t71 = circuit_sub(t67, in19); // Fp2 sub coeff 0/1\n    let t72 = circuit_sub(t70, in20); // Fp2 sub coeff 1/1\n    let t73 = circuit_mul(t50, in17); // Fp2 mul start\n    let t74 = circuit_mul(t53, in18);\n    let t75 = circuit_sub(t73, t74); // Fp2 mul real part end\n    let t76 = circuit_mul(t50, in18);\n    let t77 = circuit_mul(t53, in17);\n    let t78 = circuit_add(t76, t77); // Fp2 mul imag part end\n    let t79 = circuit_sub(t75, in19); // Fp2 sub coeff 0/1\n    let t80 = circuit_sub(t78, in20); // Fp2 sub coeff 1/1\n    let t81 = circuit_sub(t79, t80);\n    let t82 = circuit_mul(t81, in15); // eval bls line by yInv\n    let t83 = circuit_sub(t50, t53);\n    let t84 = circuit_mul(t83, in16); // eval blsline by xNegOverY\n    let t85 = circuit_mul(t80, in15); // eval bls line by yInv\n    let t86 = circuit_mul(t53, in16); // eval bls line by xNegOverY\n    let t87 = circuit_mul(t84, t0); // Eval sparse poly line_2p_1 step coeff_2 * z^2\n    let t88 = circuit_add(t82, t87); // Eval sparse poly line_2p_1 step + coeff_2 * z^2\n    let t89 = circuit_add(t88, t1); // Eval sparse poly line_2p_1 step + 1*z^3\n    let t90 = circuit_mul(t85, t2); // Eval sparse poly line_2p_1 step coeff_6 * z^6\n    let t91 = circuit_add(t89, t90); // Eval sparse poly line_2p_1 step + coeff_6 * z^6\n    let t92 = circuit_mul(t86, t3); // Eval sparse poly line_2p_1 step coeff_8 * z^8\n    let t93 = circuit_add(t91, t92); // Eval sparse poly line_2p_1 step + coeff_8 * z^8\n    let t94 = circuit_mul(t32, t93); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t95 = circuit_sub(t94, in23); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t96 = circuit_mul(in25, in21);\n    let t97 = circuit_add(t96, t95); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t61, t62, t71, t72, t97).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x6, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in2\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in3\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in8\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in9\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in14\n    circuit_inputs = circuit_inputs.next_2(yInv_2); // in15\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_2); // in16\n    circuit_inputs = circuit_inputs.next_2(Q_2.x0); // in17\n    circuit_inputs = circuit_inputs.next_2(Q_2.x1); // in18\n    circuit_inputs = circuit_inputs.next_2(Q_2.y0); // in19\n    circuit_inputs = circuit_inputs.next_2(Q_2.y1); // in20\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in21\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in22\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in23\n    circuit_inputs = circuit_inputs.next_2(z); // in24\n    circuit_inputs = circuit_inputs.next_2(c1); // in25\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t61),\n        x1: outputs.get_output(t62),\n        y0: outputs.get_output(t71),\n        y1: outputs.get_output(t72),\n    };\n    let lhs_i_plus_one: u384 = outputs.get_output(t97);\n    return (Q0, lhs_i_plus_one);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_BIT1_2P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u384>,\n    G2_line_add_0: G2Line<u384>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u384>,\n    G2_line_add_1: G2Line<u384>,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    c_or_cinv_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (u384,) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let (in24, in25) = (CE::<CI<24>> {}, CE::<CI<25>> {});\n    let t0 = circuit_mul(in24, in24); // compute z^2\n    let t1 = circuit_mul(t0, in24); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, t0); // compute z^8\n    let t4 = circuit_mul(in21, in21); // Square f evaluation in Z, the result of previous bit.\n    let t5 = circuit_sub(in4, in5);\n    let t6 = circuit_mul(t5, in0); // eval bls line by yInv\n    let t7 = circuit_sub(in2, in3);\n    let t8 = circuit_mul(t7, in1); // eval blsline by xNegOverY\n    let t9 = circuit_mul(in5, in0); // eval bls line by yInv\n    let t10 = circuit_mul(in3, in1); // eval bls line by xNegOverY\n    let t11 = circuit_sub(in8, in9);\n    let t12 = circuit_mul(t11, in0); // eval bls line by yInv\n    let t13 = circuit_sub(in6, in7);\n    let t14 = circuit_mul(t13, in1); // eval blsline by xNegOverY\n    let t15 = circuit_mul(in9, in0); // eval bls line by yInv\n    let t16 = circuit_mul(in7, in1); // eval bls line by xNegOverY\n    let t17 = circuit_mul(t8, t0); // Eval sparse poly line_0p_1 step coeff_2 * z^2\n    let t18 = circuit_add(t6, t17); // Eval sparse poly line_0p_1 step + coeff_2 * z^2\n    let t19 = circuit_add(t18, t1); // Eval sparse poly line_0p_1 step + 1*z^3\n    let t20 = circuit_mul(t9, t2); // Eval sparse poly line_0p_1 step coeff_6 * z^6\n    let t21 = circuit_add(t19, t20); // Eval sparse poly line_0p_1 step + coeff_6 * z^6\n    let t22 = circuit_mul(t10, t3); // Eval sparse poly line_0p_1 step coeff_8 * z^8\n    let t23 = circuit_add(t21, t22); // Eval sparse poly line_0p_1 step + coeff_8 * z^8\n    let t24 = circuit_mul(t4, t23); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t25 = circuit_mul(t14, t0); // Eval sparse poly line_0p_2 step coeff_2 * z^2\n    let t26 = circuit_add(t12, t25); // Eval sparse poly line_0p_2 step + coeff_2 * z^2\n    let t27 = circuit_add(t26, t1); // Eval sparse poly line_0p_2 step + 1*z^3\n    let t28 = circuit_mul(t15, t2); // Eval sparse poly line_0p_2 step coeff_6 * z^6\n    let t29 = circuit_add(t27, t28); // Eval sparse poly line_0p_2 step + coeff_6 * z^6\n    let t30 = circuit_mul(t16, t3); // Eval sparse poly line_0p_2 step coeff_8 * z^8\n    let t31 = circuit_add(t29, t30); // Eval sparse poly line_0p_2 step + coeff_8 * z^8\n    let t32 = circuit_mul(t24, t31); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t33 = circuit_sub(in14, in15);\n    let t34 = circuit_mul(t33, in10); // eval bls line by yInv\n    let t35 = circuit_sub(in12, in13);\n    let t36 = circuit_mul(t35, in11); // eval blsline by xNegOverY\n    let t37 = circuit_mul(in15, in10); // eval bls line by yInv\n    let t38 = circuit_mul(in13, in11); // eval bls line by xNegOverY\n    let t39 = circuit_sub(in18, in19);\n    let t40 = circuit_mul(t39, in10); // eval bls line by yInv\n    let t41 = circuit_sub(in16, in17);\n    let t42 = circuit_mul(t41, in11); // eval blsline by xNegOverY\n    let t43 = circuit_mul(in19, in10); // eval bls line by yInv\n    let t44 = circuit_mul(in17, in11); // eval bls line by xNegOverY\n    let t45 = circuit_mul(t36, t0); // Eval sparse poly line_1p_1 step coeff_2 * z^2\n    let t46 = circuit_add(t34, t45); // Eval sparse poly line_1p_1 step + coeff_2 * z^2\n    let t47 = circuit_add(t46, t1); // Eval sparse poly line_1p_1 step + 1*z^3\n    let t48 = circuit_mul(t37, t2); // Eval sparse poly line_1p_1 step coeff_6 * z^6\n    let t49 = circuit_add(t47, t48); // Eval sparse poly line_1p_1 step + coeff_6 * z^6\n    let t50 = circuit_mul(t38, t3); // Eval sparse poly line_1p_1 step coeff_8 * z^8\n    let t51 = circuit_add(t49, t50); // Eval sparse poly line_1p_1 step + coeff_8 * z^8\n    let t52 = circuit_mul(t32, t51); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t53 = circuit_mul(t42, t0); // Eval sparse poly line_1p_2 step coeff_2 * z^2\n    let t54 = circuit_add(t40, t53); // Eval sparse poly line_1p_2 step + coeff_2 * z^2\n    let t55 = circuit_add(t54, t1); // Eval sparse poly line_1p_2 step + 1*z^3\n    let t56 = circuit_mul(t43, t2); // Eval sparse poly line_1p_2 step coeff_6 * z^6\n    let t57 = circuit_add(t55, t56); // Eval sparse poly line_1p_2 step + coeff_6 * z^6\n    let t58 = circuit_mul(t44, t3); // Eval sparse poly line_1p_2 step coeff_8 * z^8\n    let t59 = circuit_add(t57, t58); // Eval sparse poly line_1p_2 step + coeff_8 * z^8\n    let t60 = circuit_mul(t52, t59); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t61 = circuit_mul(t60, in23);\n    let t62 = circuit_sub(t61, in22); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t63 = circuit_mul(in25, in20);\n    let t64 = circuit_add(t63, t62); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t64,).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in0\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in1\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in2\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in3\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_0.r0a0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_0.r0a1); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_0.r1a0); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_0.r1a1); // in9\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in10\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1.r0a0); // in16\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1.r0a1); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1.r1a0); // in18\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1.r1a1); // in19\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in20\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in21\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in22\n    circuit_inputs = circuit_inputs.next_2(c_or_cinv_of_z); // in23\n    circuit_inputs = circuit_inputs.next_2(z); // in24\n    circuit_inputs = circuit_inputs.next_2(c1); // in25\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let lhs_i_plus_one: u384 = outputs.get_output(t64);\n    return (lhs_i_plus_one,);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_BIT1_3P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u384>,\n    G2_line_add_0: G2Line<u384>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u384>,\n    G2_line_add_1: G2Line<u384>,\n    yInv_2: u384,\n    xNegOverY_2: u384,\n    Q_2: G2Point,\n    Q_or_Q_neg_2: G2Point,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    c_or_cinv_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (G2Point, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8, in9) = (CE::<CI<7>> {}, CE::<CI<8>> {}, CE::<CI<9>> {});\n    let (in10, in11, in12) = (CE::<CI<10>> {}, CE::<CI<11>> {}, CE::<CI<12>> {});\n    let (in13, in14, in15) = (CE::<CI<13>> {}, CE::<CI<14>> {}, CE::<CI<15>> {});\n    let (in16, in17, in18) = (CE::<CI<16>> {}, CE::<CI<17>> {}, CE::<CI<18>> {});\n    let (in19, in20, in21) = (CE::<CI<19>> {}, CE::<CI<20>> {}, CE::<CI<21>> {});\n    let (in22, in23, in24) = (CE::<CI<22>> {}, CE::<CI<23>> {}, CE::<CI<24>> {});\n    let (in25, in26, in27) = (CE::<CI<25>> {}, CE::<CI<26>> {}, CE::<CI<27>> {});\n    let (in28, in29, in30) = (CE::<CI<28>> {}, CE::<CI<29>> {}, CE::<CI<30>> {});\n    let (in31, in32, in33) = (CE::<CI<31>> {}, CE::<CI<32>> {}, CE::<CI<33>> {});\n    let (in34, in35, in36) = (CE::<CI<34>> {}, CE::<CI<35>> {}, CE::<CI<36>> {});\n    let t0 = circuit_mul(in35, in35); // compute z^2\n    let t1 = circuit_mul(t0, in35); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, t0); // compute z^8\n    let t4 = circuit_mul(in32, in32); // Square f evaluation in Z, the result of previous bit.\n    let t5 = circuit_sub(in5, in6);\n    let t6 = circuit_mul(t5, in1); // eval bls line by yInv\n    let t7 = circuit_sub(in3, in4);\n    let t8 = circuit_mul(t7, in2); // eval blsline by xNegOverY\n    let t9 = circuit_mul(in6, in1); // eval bls line by yInv\n    let t10 = circuit_mul(in4, in2); // eval bls line by xNegOverY\n    let t11 = circuit_sub(in9, in10);\n    let t12 = circuit_mul(t11, in1); // eval bls line by yInv\n    let t13 = circuit_sub(in7, in8);\n    let t14 = circuit_mul(t13, in2); // eval blsline by xNegOverY\n    let t15 = circuit_mul(in10, in1); // eval bls line by yInv\n    let t16 = circuit_mul(in8, in2); // eval bls line by xNegOverY\n    let t17 = circuit_mul(t8, t0); // Eval sparse poly line_0p_1 step coeff_2 * z^2\n    let t18 = circuit_add(t6, t17); // Eval sparse poly line_0p_1 step + coeff_2 * z^2\n    let t19 = circuit_add(t18, t1); // Eval sparse poly line_0p_1 step + 1*z^3\n    let t20 = circuit_mul(t9, t2); // Eval sparse poly line_0p_1 step coeff_6 * z^6\n    let t21 = circuit_add(t19, t20); // Eval sparse poly line_0p_1 step + coeff_6 * z^6\n    let t22 = circuit_mul(t10, t3); // Eval sparse poly line_0p_1 step coeff_8 * z^8\n    let t23 = circuit_add(t21, t22); // Eval sparse poly line_0p_1 step + coeff_8 * z^8\n    let t24 = circuit_mul(t4, t23); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t25 = circuit_mul(t14, t0); // Eval sparse poly line_0p_2 step coeff_2 * z^2\n    let t26 = circuit_add(t12, t25); // Eval sparse poly line_0p_2 step + coeff_2 * z^2\n    let t27 = circuit_add(t26, t1); // Eval sparse poly line_0p_2 step + 1*z^3\n    let t28 = circuit_mul(t15, t2); // Eval sparse poly line_0p_2 step coeff_6 * z^6\n    let t29 = circuit_add(t27, t28); // Eval sparse poly line_0p_2 step + coeff_6 * z^6\n    let t30 = circuit_mul(t16, t3); // Eval sparse poly line_0p_2 step coeff_8 * z^8\n    let t31 = circuit_add(t29, t30); // Eval sparse poly line_0p_2 step + coeff_8 * z^8\n    let t32 = circuit_mul(t24, t31); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t33 = circuit_sub(in15, in16);\n    let t34 = circuit_mul(t33, in11); // eval bls line by yInv\n    let t35 = circuit_sub(in13, in14);\n    let t36 = circuit_mul(t35, in12); // eval blsline by xNegOverY\n    let t37 = circuit_mul(in16, in11); // eval bls line by yInv\n    let t38 = circuit_mul(in14, in12); // eval bls line by xNegOverY\n    let t39 = circuit_sub(in19, in20);\n    let t40 = circuit_mul(t39, in11); // eval bls line by yInv\n    let t41 = circuit_sub(in17, in18);\n    let t42 = circuit_mul(t41, in12); // eval blsline by xNegOverY\n    let t43 = circuit_mul(in20, in11); // eval bls line by yInv\n    let t44 = circuit_mul(in18, in12); // eval bls line by xNegOverY\n    let t45 = circuit_mul(t36, t0); // Eval sparse poly line_1p_1 step coeff_2 * z^2\n    let t46 = circuit_add(t34, t45); // Eval sparse poly line_1p_1 step + coeff_2 * z^2\n    let t47 = circuit_add(t46, t1); // Eval sparse poly line_1p_1 step + 1*z^3\n    let t48 = circuit_mul(t37, t2); // Eval sparse poly line_1p_1 step coeff_6 * z^6\n    let t49 = circuit_add(t47, t48); // Eval sparse poly line_1p_1 step + coeff_6 * z^6\n    let t50 = circuit_mul(t38, t3); // Eval sparse poly line_1p_1 step coeff_8 * z^8\n    let t51 = circuit_add(t49, t50); // Eval sparse poly line_1p_1 step + coeff_8 * z^8\n    let t52 = circuit_mul(t32, t51); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t53 = circuit_mul(t42, t0); // Eval sparse poly line_1p_2 step coeff_2 * z^2\n    let t54 = circuit_add(t40, t53); // Eval sparse poly line_1p_2 step + coeff_2 * z^2\n    let t55 = circuit_add(t54, t1); // Eval sparse poly line_1p_2 step + 1*z^3\n    let t56 = circuit_mul(t43, t2); // Eval sparse poly line_1p_2 step coeff_6 * z^6\n    let t57 = circuit_add(t55, t56); // Eval sparse poly line_1p_2 step + coeff_6 * z^6\n    let t58 = circuit_mul(t44, t3); // Eval sparse poly line_1p_2 step coeff_8 * z^8\n    let t59 = circuit_add(t57, t58); // Eval sparse poly line_1p_2 step + coeff_8 * z^8\n    let t60 = circuit_mul(t52, t59); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t61 = circuit_sub(in25, in29); // Fp2 sub coeff 0/1\n    let t62 = circuit_sub(in26, in30); // Fp2 sub coeff 1/1\n    let t63 = circuit_sub(in23, in27); // Fp2 sub coeff 0/1\n    let t64 = circuit_sub(in24, in28); // Fp2 sub coeff 1/1\n    let t65 = circuit_mul(t63, t63); // Fp2 Inv start\n    let t66 = circuit_mul(t64, t64);\n    let t67 = circuit_add(t65, t66);\n    let t68 = circuit_inverse(t67);\n    let t69 = circuit_mul(t63, t68); // Fp2 Inv real part end\n    let t70 = circuit_mul(t64, t68);\n    let t71 = circuit_sub(in0, t70); // Fp2 Inv imag part end\n    let t72 = circuit_mul(t61, t69); // Fp2 mul start\n    let t73 = circuit_mul(t62, t71);\n    let t74 = circuit_sub(t72, t73); // Fp2 mul real part end\n    let t75 = circuit_mul(t61, t71);\n    let t76 = circuit_mul(t62, t69);\n    let t77 = circuit_add(t75, t76); // Fp2 mul imag part end\n    let t78 = circuit_add(t74, t77);\n    let t79 = circuit_sub(t74, t77);\n    let t80 = circuit_mul(t78, t79);\n    let t81 = circuit_mul(t74, t77);\n    let t82 = circuit_add(t81, t81);\n    let t83 = circuit_add(in23, in27); // Fp2 add coeff 0/1\n    let t84 = circuit_add(in24, in28); // Fp2 add coeff 1/1\n    let t85 = circuit_sub(t80, t83); // Fp2 sub coeff 0/1\n    let t86 = circuit_sub(t82, t84); // Fp2 sub coeff 1/1\n    let t87 = circuit_mul(t74, in23); // Fp2 mul start\n    let t88 = circuit_mul(t77, in24);\n    let t89 = circuit_sub(t87, t88); // Fp2 mul real part end\n    let t90 = circuit_mul(t74, in24);\n    let t91 = circuit_mul(t77, in23);\n    let t92 = circuit_add(t90, t91); // Fp2 mul imag part end\n    let t93 = circuit_sub(t89, in25); // Fp2 sub coeff 0/1\n    let t94 = circuit_sub(t92, in26); // Fp2 sub coeff 1/1\n    let t95 = circuit_add(in25, in25); // Fp2 add coeff 0/1\n    let t96 = circuit_add(in26, in26); // Fp2 add coeff 1/1\n    let t97 = circuit_sub(t85, in23); // Fp2 sub coeff 0/1\n    let t98 = circuit_sub(t86, in24); // Fp2 sub coeff 1/1\n    let t99 = circuit_mul(t97, t97); // Fp2 Inv start\n    let t100 = circuit_mul(t98, t98);\n    let t101 = circuit_add(t99, t100);\n    let t102 = circuit_inverse(t101);\n    let t103 = circuit_mul(t97, t102); // Fp2 Inv real part end\n    let t104 = circuit_mul(t98, t102);\n    let t105 = circuit_sub(in0, t104); // Fp2 Inv imag part end\n    let t106 = circuit_mul(t95, t103); // Fp2 mul start\n    let t107 = circuit_mul(t96, t105);\n    let t108 = circuit_sub(t106, t107); // Fp2 mul real part end\n    let t109 = circuit_mul(t95, t105);\n    let t110 = circuit_mul(t96, t103);\n    let t111 = circuit_add(t109, t110); // Fp2 mul imag part end\n    let t112 = circuit_add(t74, t108); // Fp2 add coeff 0/1\n    let t113 = circuit_add(t77, t111); // Fp2 add coeff 1/1\n    let t114 = circuit_sub(in0, t112); // Fp2 neg coeff 0/1\n    let t115 = circuit_sub(in0, t113); // Fp2 neg coeff 1/1\n    let t116 = circuit_add(t114, t115);\n    let t117 = circuit_sub(t114, t115);\n    let t118 = circuit_mul(t116, t117);\n    let t119 = circuit_mul(t114, t115);\n    let t120 = circuit_add(t119, t119);\n    let t121 = circuit_sub(t118, in23); // Fp2 sub coeff 0/1\n    let t122 = circuit_sub(t120, in24); // Fp2 sub coeff 1/1\n    let t123 = circuit_sub(t121, t85); // Fp2 sub coeff 0/1\n    let t124 = circuit_sub(t122, t86); // Fp2 sub coeff 1/1\n    let t125 = circuit_sub(in23, t123); // Fp2 sub coeff 0/1\n    let t126 = circuit_sub(in24, t124); // Fp2 sub coeff 1/1\n    let t127 = circuit_mul(t114, t125); // Fp2 mul start\n    let t128 = circuit_mul(t115, t126);\n    let t129 = circuit_sub(t127, t128); // Fp2 mul real part end\n    let t130 = circuit_mul(t114, t126);\n    let t131 = circuit_mul(t115, t125);\n    let t132 = circuit_add(t130, t131); // Fp2 mul imag part end\n    let t133 = circuit_sub(t129, in25); // Fp2 sub coeff 0/1\n    let t134 = circuit_sub(t132, in26); // Fp2 sub coeff 1/1\n    let t135 = circuit_mul(t114, in23); // Fp2 mul start\n    let t136 = circuit_mul(t115, in24);\n    let t137 = circuit_sub(t135, t136); // Fp2 mul real part end\n    let t138 = circuit_mul(t114, in24);\n    let t139 = circuit_mul(t115, in23);\n    let t140 = circuit_add(t138, t139); // Fp2 mul imag part end\n    let t141 = circuit_sub(t137, in25); // Fp2 sub coeff 0/1\n    let t142 = circuit_sub(t140, in26); // Fp2 sub coeff 1/1\n    let t143 = circuit_sub(t93, t94);\n    let t144 = circuit_mul(t143, in21); // eval bls line by yInv\n    let t145 = circuit_sub(t74, t77);\n    let t146 = circuit_mul(t145, in22); // eval blsline by xNegOverY\n    let t147 = circuit_mul(t94, in21); // eval bls line by yInv\n    let t148 = circuit_mul(t77, in22); // eval bls line by xNegOverY\n    let t149 = circuit_sub(t141, t142);\n    let t150 = circuit_mul(t149, in21); // eval bls line by yInv\n    let t151 = circuit_sub(t114, t115);\n    let t152 = circuit_mul(t151, in22); // eval blsline by xNegOverY\n    let t153 = circuit_mul(t142, in21); // eval bls line by yInv\n    let t154 = circuit_mul(t115, in22); // eval bls line by xNegOverY\n    let t155 = circuit_mul(t146, t0); // Eval sparse poly line_2p_1 step coeff_2 * z^2\n    let t156 = circuit_add(t144, t155); // Eval sparse poly line_2p_1 step + coeff_2 * z^2\n    let t157 = circuit_add(t156, t1); // Eval sparse poly line_2p_1 step + 1*z^3\n    let t158 = circuit_mul(t147, t2); // Eval sparse poly line_2p_1 step coeff_6 * z^6\n    let t159 = circuit_add(t157, t158); // Eval sparse poly line_2p_1 step + coeff_6 * z^6\n    let t160 = circuit_mul(t148, t3); // Eval sparse poly line_2p_1 step coeff_8 * z^8\n    let t161 = circuit_add(t159, t160); // Eval sparse poly line_2p_1 step + coeff_8 * z^8\n    let t162 = circuit_mul(t60, t161); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t163 = circuit_mul(t152, t0); // Eval sparse poly line_2p_2 step coeff_2 * z^2\n    let t164 = circuit_add(t150, t163); // Eval sparse poly line_2p_2 step + coeff_2 * z^2\n    let t165 = circuit_add(t164, t1); // Eval sparse poly line_2p_2 step + 1*z^3\n    let t166 = circuit_mul(t153, t2); // Eval sparse poly line_2p_2 step coeff_6 * z^6\n    let t167 = circuit_add(t165, t166); // Eval sparse poly line_2p_2 step + coeff_6 * z^6\n    let t168 = circuit_mul(t154, t3); // Eval sparse poly line_2p_2 step coeff_8 * z^8\n    let t169 = circuit_add(t167, t168); // Eval sparse poly line_2p_2 step + coeff_8 * z^8\n    let t170 = circuit_mul(t162, t169); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t171 = circuit_mul(t170, in34);\n    let t172 = circuit_sub(t171, in33); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t173 = circuit_mul(in36, in31);\n    let t174 = circuit_add(t173, t172); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t123, t124, t133, t134, t174).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in1\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in2\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in3\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_0.r0a0); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_0.r0a1); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_0.r1a0); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_0.r1a1); // in10\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in11\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in15\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in16\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1.r0a0); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1.r0a1); // in18\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1.r1a0); // in19\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1.r1a1); // in20\n    circuit_inputs = circuit_inputs.next_2(yInv_2); // in21\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_2); // in22\n    circuit_inputs = circuit_inputs.next_2(Q_2.x0); // in23\n    circuit_inputs = circuit_inputs.next_2(Q_2.x1); // in24\n    circuit_inputs = circuit_inputs.next_2(Q_2.y0); // in25\n    circuit_inputs = circuit_inputs.next_2(Q_2.y1); // in26\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.x0); // in27\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.x1); // in28\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.y0); // in29\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.y1); // in30\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in31\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in32\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in33\n    circuit_inputs = circuit_inputs.next_2(c_or_cinv_of_z); // in34\n    circuit_inputs = circuit_inputs.next_2(z); // in35\n    circuit_inputs = circuit_inputs.next_2(c1); // in36\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t123),\n        x1: outputs.get_output(t124),\n        y0: outputs.get_output(t133),\n        y1: outputs.get_output(t134),\n    };\n    let lhs_i_plus_one: u384 = outputs.get_output(t174);\n    return (Q0, lhs_i_plus_one);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_FINALIZE_2P_circuit(\n    R_n_minus_1_of_z: u384,\n    c_1: u384,\n    w_of_z: u384,\n    z: u384,\n    c_inv_frob_1_of_z: u384,\n    previous_lhs: u384,\n    R_n_minus_2: E12D<u384>,\n    Q: Array<u384>,\n) -> (u384,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x2\n    let in2 = CE::<CI<2>> {}; // -0x2 % p\n\n    // INPUT stack\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let (in24, in25, in26) = (CE::<CI<24>> {}, CE::<CI<25>> {}, CE::<CI<26>> {});\n    let (in27, in28, in29) = (CE::<CI<27>> {}, CE::<CI<28>> {}, CE::<CI<29>> {});\n    let (in30, in31, in32) = (CE::<CI<30>> {}, CE::<CI<31>> {}, CE::<CI<32>> {});\n    let (in33, in34, in35) = (CE::<CI<33>> {}, CE::<CI<34>> {}, CE::<CI<35>> {});\n    let (in36, in37, in38) = (CE::<CI<36>> {}, CE::<CI<37>> {}, CE::<CI<38>> {});\n    let (in39, in40, in41) = (CE::<CI<39>> {}, CE::<CI<40>> {}, CE::<CI<41>> {});\n    let (in42, in43, in44) = (CE::<CI<42>> {}, CE::<CI<43>> {}, CE::<CI<44>> {});\n    let (in45, in46, in47) = (CE::<CI<45>> {}, CE::<CI<46>> {}, CE::<CI<47>> {});\n    let (in48, in49, in50) = (CE::<CI<48>> {}, CE::<CI<49>> {}, CE::<CI<50>> {});\n    let (in51, in52, in53) = (CE::<CI<51>> {}, CE::<CI<52>> {}, CE::<CI<53>> {});\n    let (in54, in55, in56) = (CE::<CI<54>> {}, CE::<CI<55>> {}, CE::<CI<56>> {});\n    let (in57, in58, in59) = (CE::<CI<57>> {}, CE::<CI<58>> {}, CE::<CI<59>> {});\n    let (in60, in61, in62) = (CE::<CI<60>> {}, CE::<CI<61>> {}, CE::<CI<62>> {});\n    let (in63, in64, in65) = (CE::<CI<63>> {}, CE::<CI<64>> {}, CE::<CI<65>> {});\n    let (in66, in67, in68) = (CE::<CI<66>> {}, CE::<CI<67>> {}, CE::<CI<68>> {});\n    let (in69, in70, in71) = (CE::<CI<69>> {}, CE::<CI<70>> {}, CE::<CI<71>> {});\n    let (in72, in73, in74) = (CE::<CI<72>> {}, CE::<CI<73>> {}, CE::<CI<74>> {});\n    let (in75, in76, in77) = (CE::<CI<75>> {}, CE::<CI<76>> {}, CE::<CI<77>> {});\n    let (in78, in79, in80) = (CE::<CI<78>> {}, CE::<CI<79>> {}, CE::<CI<80>> {});\n    let (in81, in82, in83) = (CE::<CI<81>> {}, CE::<CI<82>> {}, CE::<CI<83>> {});\n    let (in84, in85, in86) = (CE::<CI<84>> {}, CE::<CI<85>> {}, CE::<CI<86>> {});\n    let (in87, in88, in89) = (CE::<CI<87>> {}, CE::<CI<88>> {}, CE::<CI<89>> {});\n    let (in90, in91, in92) = (CE::<CI<90>> {}, CE::<CI<91>> {}, CE::<CI<92>> {});\n    let (in93, in94, in95) = (CE::<CI<93>> {}, CE::<CI<94>> {}, CE::<CI<95>> {});\n    let (in96, in97, in98) = (CE::<CI<96>> {}, CE::<CI<97>> {}, CE::<CI<98>> {});\n    let (in99, in100, in101) = (CE::<CI<99>> {}, CE::<CI<100>> {}, CE::<CI<101>> {});\n    let t0 = circuit_mul(in6, in6); // Compute z^2\n    let t1 = circuit_mul(t0, in6); // Compute z^3\n    let t2 = circuit_mul(t1, in6); // Compute z^4\n    let t3 = circuit_mul(t2, in6); // Compute z^5\n    let t4 = circuit_mul(t3, in6); // Compute z^6\n    let t5 = circuit_mul(t4, in6); // Compute z^7\n    let t6 = circuit_mul(t5, in6); // Compute z^8\n    let t7 = circuit_mul(t6, in6); // Compute z^9\n    let t8 = circuit_mul(t7, in6); // Compute z^10\n    let t9 = circuit_mul(t8, in6); // Compute z^11\n    let t10 = circuit_mul(t9, in6); // Compute z^12\n    let t11 = circuit_sub(in0, in10);\n    let t12 = circuit_sub(in0, in12);\n    let t13 = circuit_sub(in0, in14);\n    let t14 = circuit_sub(in0, in16);\n    let t15 = circuit_sub(in0, in18);\n    let t16 = circuit_sub(in0, in20);\n    let t17 = circuit_mul(t11, in6); // Eval R_n_minus_2_conjugate step coeff_1 * z^1\n    let t18 = circuit_add(in9, t17); // Eval R_n_minus_2_conjugate step + (coeff_1 * z^1)\n    let t19 = circuit_mul(in11, t0); // Eval R_n_minus_2_conjugate step coeff_2 * z^2\n    let t20 = circuit_add(t18, t19); // Eval R_n_minus_2_conjugate step + (coeff_2 * z^2)\n    let t21 = circuit_mul(t12, t1); // Eval R_n_minus_2_conjugate step coeff_3 * z^3\n    let t22 = circuit_add(t20, t21); // Eval R_n_minus_2_conjugate step + (coeff_3 * z^3)\n    let t23 = circuit_mul(in13, t2); // Eval R_n_minus_2_conjugate step coeff_4 * z^4\n    let t24 = circuit_add(t22, t23); // Eval R_n_minus_2_conjugate step + (coeff_4 * z^4)\n    let t25 = circuit_mul(t13, t3); // Eval R_n_minus_2_conjugate step coeff_5 * z^5\n    let t26 = circuit_add(t24, t25); // Eval R_n_minus_2_conjugate step + (coeff_5 * z^5)\n    let t27 = circuit_mul(in15, t4); // Eval R_n_minus_2_conjugate step coeff_6 * z^6\n    let t28 = circuit_add(t26, t27); // Eval R_n_minus_2_conjugate step + (coeff_6 * z^6)\n    let t29 = circuit_mul(t14, t5); // Eval R_n_minus_2_conjugate step coeff_7 * z^7\n    let t30 = circuit_add(t28, t29); // Eval R_n_minus_2_conjugate step + (coeff_7 * z^7)\n    let t31 = circuit_mul(in17, t6); // Eval R_n_minus_2_conjugate step coeff_8 * z^8\n    let t32 = circuit_add(t30, t31); // Eval R_n_minus_2_conjugate step + (coeff_8 * z^8)\n    let t33 = circuit_mul(t15, t7); // Eval R_n_minus_2_conjugate step coeff_9 * z^9\n    let t34 = circuit_add(t32, t33); // Eval R_n_minus_2_conjugate step + (coeff_9 * z^9)\n    let t35 = circuit_mul(in19, t8); // Eval R_n_minus_2_conjugate step coeff_10 * z^10\n    let t36 = circuit_add(t34, t35); // Eval R_n_minus_2_conjugate step + (coeff_10 * z^10)\n    let t37 = circuit_mul(t16, t9); // Eval R_n_minus_2_conjugate step coeff_11 * z^11\n    let t38 = circuit_add(t36, t37); // Eval R_n_minus_2_conjugate step + (coeff_11 * z^11)\n    let t39 = circuit_mul(t38, in7);\n    let t40 = circuit_mul(t39, in5);\n    let t41 = circuit_sub(t40, in3); // (Π(n-1,k) (Pk(z)) - R_n_minus_1(z))\n    let t42 = circuit_mul(in4, in8);\n    let t43 = circuit_add(t42, t41); // c_1 * previous_lhs + lhs_n_minus_1\n    let t44 = circuit_mul(in2, t4); // Eval sparse poly P_irr step coeff_6 * z^6\n    let t45 = circuit_add(in1, t44); // Eval sparse poly P_irr step + coeff_6 * z^6\n    let t46 = circuit_add(t45, t10); // Eval sparse poly P_irr step + 1*z^12\n    let t47 = circuit_mul(in101, in6); // Eval big_Q Horner step: multiply by z\n    let t48 = circuit_add(in100, t47); // Eval big_Q Horner step: add coefficient_79\n    let t49 = circuit_mul(t48, in6); // Eval big_Q Horner step: multiply by z\n    let t50 = circuit_add(in99, t49); // Eval big_Q Horner step: add coefficient_78\n    let t51 = circuit_mul(t50, in6); // Eval big_Q Horner step: multiply by z\n    let t52 = circuit_add(in98, t51); // Eval big_Q Horner step: add coefficient_77\n    let t53 = circuit_mul(t52, in6); // Eval big_Q Horner step: multiply by z\n    let t54 = circuit_add(in97, t53); // Eval big_Q Horner step: add coefficient_76\n    let t55 = circuit_mul(t54, in6); // Eval big_Q Horner step: multiply by z\n    let t56 = circuit_add(in96, t55); // Eval big_Q Horner step: add coefficient_75\n    let t57 = circuit_mul(t56, in6); // Eval big_Q Horner step: multiply by z\n    let t58 = circuit_add(in95, t57); // Eval big_Q Horner step: add coefficient_74\n    let t59 = circuit_mul(t58, in6); // Eval big_Q Horner step: multiply by z\n    let t60 = circuit_add(in94, t59); // Eval big_Q Horner step: add coefficient_73\n    let t61 = circuit_mul(t60, in6); // Eval big_Q Horner step: multiply by z\n    let t62 = circuit_add(in93, t61); // Eval big_Q Horner step: add coefficient_72\n    let t63 = circuit_mul(t62, in6); // Eval big_Q Horner step: multiply by z\n    let t64 = circuit_add(in92, t63); // Eval big_Q Horner step: add coefficient_71\n    let t65 = circuit_mul(t64, in6); // Eval big_Q Horner step: multiply by z\n    let t66 = circuit_add(in91, t65); // Eval big_Q Horner step: add coefficient_70\n    let t67 = circuit_mul(t66, in6); // Eval big_Q Horner step: multiply by z\n    let t68 = circuit_add(in90, t67); // Eval big_Q Horner step: add coefficient_69\n    let t69 = circuit_mul(t68, in6); // Eval big_Q Horner step: multiply by z\n    let t70 = circuit_add(in89, t69); // Eval big_Q Horner step: add coefficient_68\n    let t71 = circuit_mul(t70, in6); // Eval big_Q Horner step: multiply by z\n    let t72 = circuit_add(in88, t71); // Eval big_Q Horner step: add coefficient_67\n    let t73 = circuit_mul(t72, in6); // Eval big_Q Horner step: multiply by z\n    let t74 = circuit_add(in87, t73); // Eval big_Q Horner step: add coefficient_66\n    let t75 = circuit_mul(t74, in6); // Eval big_Q Horner step: multiply by z\n    let t76 = circuit_add(in86, t75); // Eval big_Q Horner step: add coefficient_65\n    let t77 = circuit_mul(t76, in6); // Eval big_Q Horner step: multiply by z\n    let t78 = circuit_add(in85, t77); // Eval big_Q Horner step: add coefficient_64\n    let t79 = circuit_mul(t78, in6); // Eval big_Q Horner step: multiply by z\n    let t80 = circuit_add(in84, t79); // Eval big_Q Horner step: add coefficient_63\n    let t81 = circuit_mul(t80, in6); // Eval big_Q Horner step: multiply by z\n    let t82 = circuit_add(in83, t81); // Eval big_Q Horner step: add coefficient_62\n    let t83 = circuit_mul(t82, in6); // Eval big_Q Horner step: multiply by z\n    let t84 = circuit_add(in82, t83); // Eval big_Q Horner step: add coefficient_61\n    let t85 = circuit_mul(t84, in6); // Eval big_Q Horner step: multiply by z\n    let t86 = circuit_add(in81, t85); // Eval big_Q Horner step: add coefficient_60\n    let t87 = circuit_mul(t86, in6); // Eval big_Q Horner step: multiply by z\n    let t88 = circuit_add(in80, t87); // Eval big_Q Horner step: add coefficient_59\n    let t89 = circuit_mul(t88, in6); // Eval big_Q Horner step: multiply by z\n    let t90 = circuit_add(in79, t89); // Eval big_Q Horner step: add coefficient_58\n    let t91 = circuit_mul(t90, in6); // Eval big_Q Horner step: multiply by z\n    let t92 = circuit_add(in78, t91); // Eval big_Q Horner step: add coefficient_57\n    let t93 = circuit_mul(t92, in6); // Eval big_Q Horner step: multiply by z\n    let t94 = circuit_add(in77, t93); // Eval big_Q Horner step: add coefficient_56\n    let t95 = circuit_mul(t94, in6); // Eval big_Q Horner step: multiply by z\n    let t96 = circuit_add(in76, t95); // Eval big_Q Horner step: add coefficient_55\n    let t97 = circuit_mul(t96, in6); // Eval big_Q Horner step: multiply by z\n    let t98 = circuit_add(in75, t97); // Eval big_Q Horner step: add coefficient_54\n    let t99 = circuit_mul(t98, in6); // Eval big_Q Horner step: multiply by z\n    let t100 = circuit_add(in74, t99); // Eval big_Q Horner step: add coefficient_53\n    let t101 = circuit_mul(t100, in6); // Eval big_Q Horner step: multiply by z\n    let t102 = circuit_add(in73, t101); // Eval big_Q Horner step: add coefficient_52\n    let t103 = circuit_mul(t102, in6); // Eval big_Q Horner step: multiply by z\n    let t104 = circuit_add(in72, t103); // Eval big_Q Horner step: add coefficient_51\n    let t105 = circuit_mul(t104, in6); // Eval big_Q Horner step: multiply by z\n    let t106 = circuit_add(in71, t105); // Eval big_Q Horner step: add coefficient_50\n    let t107 = circuit_mul(t106, in6); // Eval big_Q Horner step: multiply by z\n    let t108 = circuit_add(in70, t107); // Eval big_Q Horner step: add coefficient_49\n    let t109 = circuit_mul(t108, in6); // Eval big_Q Horner step: multiply by z\n    let t110 = circuit_add(in69, t109); // Eval big_Q Horner step: add coefficient_48\n    let t111 = circuit_mul(t110, in6); // Eval big_Q Horner step: multiply by z\n    let t112 = circuit_add(in68, t111); // Eval big_Q Horner step: add coefficient_47\n    let t113 = circuit_mul(t112, in6); // Eval big_Q Horner step: multiply by z\n    let t114 = circuit_add(in67, t113); // Eval big_Q Horner step: add coefficient_46\n    let t115 = circuit_mul(t114, in6); // Eval big_Q Horner step: multiply by z\n    let t116 = circuit_add(in66, t115); // Eval big_Q Horner step: add coefficient_45\n    let t117 = circuit_mul(t116, in6); // Eval big_Q Horner step: multiply by z\n    let t118 = circuit_add(in65, t117); // Eval big_Q Horner step: add coefficient_44\n    let t119 = circuit_mul(t118, in6); // Eval big_Q Horner step: multiply by z\n    let t120 = circuit_add(in64, t119); // Eval big_Q Horner step: add coefficient_43\n    let t121 = circuit_mul(t120, in6); // Eval big_Q Horner step: multiply by z\n    let t122 = circuit_add(in63, t121); // Eval big_Q Horner step: add coefficient_42\n    let t123 = circuit_mul(t122, in6); // Eval big_Q Horner step: multiply by z\n    let t124 = circuit_add(in62, t123); // Eval big_Q Horner step: add coefficient_41\n    let t125 = circuit_mul(t124, in6); // Eval big_Q Horner step: multiply by z\n    let t126 = circuit_add(in61, t125); // Eval big_Q Horner step: add coefficient_40\n    let t127 = circuit_mul(t126, in6); // Eval big_Q Horner step: multiply by z\n    let t128 = circuit_add(in60, t127); // Eval big_Q Horner step: add coefficient_39\n    let t129 = circuit_mul(t128, in6); // Eval big_Q Horner step: multiply by z\n    let t130 = circuit_add(in59, t129); // Eval big_Q Horner step: add coefficient_38\n    let t131 = circuit_mul(t130, in6); // Eval big_Q Horner step: multiply by z\n    let t132 = circuit_add(in58, t131); // Eval big_Q Horner step: add coefficient_37\n    let t133 = circuit_mul(t132, in6); // Eval big_Q Horner step: multiply by z\n    let t134 = circuit_add(in57, t133); // Eval big_Q Horner step: add coefficient_36\n    let t135 = circuit_mul(t134, in6); // Eval big_Q Horner step: multiply by z\n    let t136 = circuit_add(in56, t135); // Eval big_Q Horner step: add coefficient_35\n    let t137 = circuit_mul(t136, in6); // Eval big_Q Horner step: multiply by z\n    let t138 = circuit_add(in55, t137); // Eval big_Q Horner step: add coefficient_34\n    let t139 = circuit_mul(t138, in6); // Eval big_Q Horner step: multiply by z\n    let t140 = circuit_add(in54, t139); // Eval big_Q Horner step: add coefficient_33\n    let t141 = circuit_mul(t140, in6); // Eval big_Q Horner step: multiply by z\n    let t142 = circuit_add(in53, t141); // Eval big_Q Horner step: add coefficient_32\n    let t143 = circuit_mul(t142, in6); // Eval big_Q Horner step: multiply by z\n    let t144 = circuit_add(in52, t143); // Eval big_Q Horner step: add coefficient_31\n    let t145 = circuit_mul(t144, in6); // Eval big_Q Horner step: multiply by z\n    let t146 = circuit_add(in51, t145); // Eval big_Q Horner step: add coefficient_30\n    let t147 = circuit_mul(t146, in6); // Eval big_Q Horner step: multiply by z\n    let t148 = circuit_add(in50, t147); // Eval big_Q Horner step: add coefficient_29\n    let t149 = circuit_mul(t148, in6); // Eval big_Q Horner step: multiply by z\n    let t150 = circuit_add(in49, t149); // Eval big_Q Horner step: add coefficient_28\n    let t151 = circuit_mul(t150, in6); // Eval big_Q Horner step: multiply by z\n    let t152 = circuit_add(in48, t151); // Eval big_Q Horner step: add coefficient_27\n    let t153 = circuit_mul(t152, in6); // Eval big_Q Horner step: multiply by z\n    let t154 = circuit_add(in47, t153); // Eval big_Q Horner step: add coefficient_26\n    let t155 = circuit_mul(t154, in6); // Eval big_Q Horner step: multiply by z\n    let t156 = circuit_add(in46, t155); // Eval big_Q Horner step: add coefficient_25\n    let t157 = circuit_mul(t156, in6); // Eval big_Q Horner step: multiply by z\n    let t158 = circuit_add(in45, t157); // Eval big_Q Horner step: add coefficient_24\n    let t159 = circuit_mul(t158, in6); // Eval big_Q Horner step: multiply by z\n    let t160 = circuit_add(in44, t159); // Eval big_Q Horner step: add coefficient_23\n    let t161 = circuit_mul(t160, in6); // Eval big_Q Horner step: multiply by z\n    let t162 = circuit_add(in43, t161); // Eval big_Q Horner step: add coefficient_22\n    let t163 = circuit_mul(t162, in6); // Eval big_Q Horner step: multiply by z\n    let t164 = circuit_add(in42, t163); // Eval big_Q Horner step: add coefficient_21\n    let t165 = circuit_mul(t164, in6); // Eval big_Q Horner step: multiply by z\n    let t166 = circuit_add(in41, t165); // Eval big_Q Horner step: add coefficient_20\n    let t167 = circuit_mul(t166, in6); // Eval big_Q Horner step: multiply by z\n    let t168 = circuit_add(in40, t167); // Eval big_Q Horner step: add coefficient_19\n    let t169 = circuit_mul(t168, in6); // Eval big_Q Horner step: multiply by z\n    let t170 = circuit_add(in39, t169); // Eval big_Q Horner step: add coefficient_18\n    let t171 = circuit_mul(t170, in6); // Eval big_Q Horner step: multiply by z\n    let t172 = circuit_add(in38, t171); // Eval big_Q Horner step: add coefficient_17\n    let t173 = circuit_mul(t172, in6); // Eval big_Q Horner step: multiply by z\n    let t174 = circuit_add(in37, t173); // Eval big_Q Horner step: add coefficient_16\n    let t175 = circuit_mul(t174, in6); // Eval big_Q Horner step: multiply by z\n    let t176 = circuit_add(in36, t175); // Eval big_Q Horner step: add coefficient_15\n    let t177 = circuit_mul(t176, in6); // Eval big_Q Horner step: multiply by z\n    let t178 = circuit_add(in35, t177); // Eval big_Q Horner step: add coefficient_14\n    let t179 = circuit_mul(t178, in6); // Eval big_Q Horner step: multiply by z\n    let t180 = circuit_add(in34, t179); // Eval big_Q Horner step: add coefficient_13\n    let t181 = circuit_mul(t180, in6); // Eval big_Q Horner step: multiply by z\n    let t182 = circuit_add(in33, t181); // Eval big_Q Horner step: add coefficient_12\n    let t183 = circuit_mul(t182, in6); // Eval big_Q Horner step: multiply by z\n    let t184 = circuit_add(in32, t183); // Eval big_Q Horner step: add coefficient_11\n    let t185 = circuit_mul(t184, in6); // Eval big_Q Horner step: multiply by z\n    let t186 = circuit_add(in31, t185); // Eval big_Q Horner step: add coefficient_10\n    let t187 = circuit_mul(t186, in6); // Eval big_Q Horner step: multiply by z\n    let t188 = circuit_add(in30, t187); // Eval big_Q Horner step: add coefficient_9\n    let t189 = circuit_mul(t188, in6); // Eval big_Q Horner step: multiply by z\n    let t190 = circuit_add(in29, t189); // Eval big_Q Horner step: add coefficient_8\n    let t191 = circuit_mul(t190, in6); // Eval big_Q Horner step: multiply by z\n    let t192 = circuit_add(in28, t191); // Eval big_Q Horner step: add coefficient_7\n    let t193 = circuit_mul(t192, in6); // Eval big_Q Horner step: multiply by z\n    let t194 = circuit_add(in27, t193); // Eval big_Q Horner step: add coefficient_6\n    let t195 = circuit_mul(t194, in6); // Eval big_Q Horner step: multiply by z\n    let t196 = circuit_add(in26, t195); // Eval big_Q Horner step: add coefficient_5\n    let t197 = circuit_mul(t196, in6); // Eval big_Q Horner step: multiply by z\n    let t198 = circuit_add(in25, t197); // Eval big_Q Horner step: add coefficient_4\n    let t199 = circuit_mul(t198, in6); // Eval big_Q Horner step: multiply by z\n    let t200 = circuit_add(in24, t199); // Eval big_Q Horner step: add coefficient_3\n    let t201 = circuit_mul(t200, in6); // Eval big_Q Horner step: multiply by z\n    let t202 = circuit_add(in23, t201); // Eval big_Q Horner step: add coefficient_2\n    let t203 = circuit_mul(t202, in6); // Eval big_Q Horner step: multiply by z\n    let t204 = circuit_add(in22, t203); // Eval big_Q Horner step: add coefficient_1\n    let t205 = circuit_mul(t204, in6); // Eval big_Q Horner step: multiply by z\n    let t206 = circuit_add(in21, t205); // Eval big_Q Horner step: add coefficient_0\n    let t207 = circuit_mul(t206, t46); // Q(z) * P(z)\n    let t208 = circuit_sub(t43, t207); // final_lhs - Q(z) * P(z)\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t208,).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x2, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0xb153ffffb9feffffffffaaa9, 0x6730d2a0f6b0f6241eabfffe, 0x434bacd764774b84f38512bf,\n                0x1a0111ea397fe69a4b1ba7b6,\n            ],\n        ); // in2\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_1_of_z); // in3\n    circuit_inputs = circuit_inputs.next_2(c_1); // in4\n    circuit_inputs = circuit_inputs.next_2(w_of_z); // in5\n    circuit_inputs = circuit_inputs.next_2(z); // in6\n    circuit_inputs = circuit_inputs.next_2(c_inv_frob_1_of_z); // in7\n    circuit_inputs = circuit_inputs.next_2(previous_lhs); // in8\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w0); // in9\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w1); // in10\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w2); // in11\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w3); // in12\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w4); // in13\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w5); // in14\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w6); // in15\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w7); // in16\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w8); // in17\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w9); // in18\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w10); // in19\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w11); // in20\n\n    for val in Q.span() {\n        circuit_inputs = circuit_inputs.next_2(*val);\n    } // in21 - in101\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let final_check: u384 = outputs.get_output(t208);\n    return (final_check,);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_FINALIZE_3P_EXT_MLR_circuit(\n    R_n_minus_1_of_z: u384,\n    c_1: u384,\n    w_of_z: u384,\n    z: u384,\n    c_inv_frob_1_of_z: u384,\n    previous_lhs: u384,\n    R_n_minus_2: E12D<u384>,\n    Q: Array<u384>,\n    precomputed_miller_loop_result_of_z: u384,\n) -> (u384,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x2\n    let in2 = CE::<CI<2>> {}; // -0x2 % p\n\n    // INPUT stack\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let (in24, in25, in26) = (CE::<CI<24>> {}, CE::<CI<25>> {}, CE::<CI<26>> {});\n    let (in27, in28, in29) = (CE::<CI<27>> {}, CE::<CI<28>> {}, CE::<CI<29>> {});\n    let (in30, in31, in32) = (CE::<CI<30>> {}, CE::<CI<31>> {}, CE::<CI<32>> {});\n    let (in33, in34, in35) = (CE::<CI<33>> {}, CE::<CI<34>> {}, CE::<CI<35>> {});\n    let (in36, in37, in38) = (CE::<CI<36>> {}, CE::<CI<37>> {}, CE::<CI<38>> {});\n    let (in39, in40, in41) = (CE::<CI<39>> {}, CE::<CI<40>> {}, CE::<CI<41>> {});\n    let (in42, in43, in44) = (CE::<CI<42>> {}, CE::<CI<43>> {}, CE::<CI<44>> {});\n    let (in45, in46, in47) = (CE::<CI<45>> {}, CE::<CI<46>> {}, CE::<CI<47>> {});\n    let (in48, in49, in50) = (CE::<CI<48>> {}, CE::<CI<49>> {}, CE::<CI<50>> {});\n    let (in51, in52, in53) = (CE::<CI<51>> {}, CE::<CI<52>> {}, CE::<CI<53>> {});\n    let (in54, in55, in56) = (CE::<CI<54>> {}, CE::<CI<55>> {}, CE::<CI<56>> {});\n    let (in57, in58, in59) = (CE::<CI<57>> {}, CE::<CI<58>> {}, CE::<CI<59>> {});\n    let (in60, in61, in62) = (CE::<CI<60>> {}, CE::<CI<61>> {}, CE::<CI<62>> {});\n    let (in63, in64, in65) = (CE::<CI<63>> {}, CE::<CI<64>> {}, CE::<CI<65>> {});\n    let (in66, in67, in68) = (CE::<CI<66>> {}, CE::<CI<67>> {}, CE::<CI<68>> {});\n    let (in69, in70, in71) = (CE::<CI<69>> {}, CE::<CI<70>> {}, CE::<CI<71>> {});\n    let (in72, in73, in74) = (CE::<CI<72>> {}, CE::<CI<73>> {}, CE::<CI<74>> {});\n    let (in75, in76, in77) = (CE::<CI<75>> {}, CE::<CI<76>> {}, CE::<CI<77>> {});\n    let (in78, in79, in80) = (CE::<CI<78>> {}, CE::<CI<79>> {}, CE::<CI<80>> {});\n    let (in81, in82, in83) = (CE::<CI<81>> {}, CE::<CI<82>> {}, CE::<CI<83>> {});\n    let (in84, in85, in86) = (CE::<CI<84>> {}, CE::<CI<85>> {}, CE::<CI<86>> {});\n    let (in87, in88, in89) = (CE::<CI<87>> {}, CE::<CI<88>> {}, CE::<CI<89>> {});\n    let (in90, in91, in92) = (CE::<CI<90>> {}, CE::<CI<91>> {}, CE::<CI<92>> {});\n    let (in93, in94, in95) = (CE::<CI<93>> {}, CE::<CI<94>> {}, CE::<CI<95>> {});\n    let (in96, in97, in98) = (CE::<CI<96>> {}, CE::<CI<97>> {}, CE::<CI<98>> {});\n    let (in99, in100, in101) = (CE::<CI<99>> {}, CE::<CI<100>> {}, CE::<CI<101>> {});\n    let (in102, in103, in104) = (CE::<CI<102>> {}, CE::<CI<103>> {}, CE::<CI<104>> {});\n    let (in105, in106, in107) = (CE::<CI<105>> {}, CE::<CI<106>> {}, CE::<CI<107>> {});\n    let (in108, in109, in110) = (CE::<CI<108>> {}, CE::<CI<109>> {}, CE::<CI<110>> {});\n    let (in111, in112, in113) = (CE::<CI<111>> {}, CE::<CI<112>> {}, CE::<CI<113>> {});\n    let (in114, in115, in116) = (CE::<CI<114>> {}, CE::<CI<115>> {}, CE::<CI<116>> {});\n    let (in117, in118, in119) = (CE::<CI<117>> {}, CE::<CI<118>> {}, CE::<CI<119>> {});\n    let (in120, in121, in122) = (CE::<CI<120>> {}, CE::<CI<121>> {}, CE::<CI<122>> {});\n    let (in123, in124, in125) = (CE::<CI<123>> {}, CE::<CI<124>> {}, CE::<CI<125>> {});\n    let in126 = CE::<CI<126>> {};\n    let t0 = circuit_mul(in6, in6); // Compute z^2\n    let t1 = circuit_mul(t0, in6); // Compute z^3\n    let t2 = circuit_mul(t1, in6); // Compute z^4\n    let t3 = circuit_mul(t2, in6); // Compute z^5\n    let t4 = circuit_mul(t3, in6); // Compute z^6\n    let t5 = circuit_mul(t4, in6); // Compute z^7\n    let t6 = circuit_mul(t5, in6); // Compute z^8\n    let t7 = circuit_mul(t6, in6); // Compute z^9\n    let t8 = circuit_mul(t7, in6); // Compute z^10\n    let t9 = circuit_mul(t8, in6); // Compute z^11\n    let t10 = circuit_mul(t9, in6); // Compute z^12\n    let t11 = circuit_sub(in0, in10);\n    let t12 = circuit_sub(in0, in12);\n    let t13 = circuit_sub(in0, in14);\n    let t14 = circuit_sub(in0, in16);\n    let t15 = circuit_sub(in0, in18);\n    let t16 = circuit_sub(in0, in20);\n    let t17 = circuit_mul(t11, in6); // Eval R_n_minus_2_conjugate step coeff_1 * z^1\n    let t18 = circuit_add(in9, t17); // Eval R_n_minus_2_conjugate step + (coeff_1 * z^1)\n    let t19 = circuit_mul(in11, t0); // Eval R_n_minus_2_conjugate step coeff_2 * z^2\n    let t20 = circuit_add(t18, t19); // Eval R_n_minus_2_conjugate step + (coeff_2 * z^2)\n    let t21 = circuit_mul(t12, t1); // Eval R_n_minus_2_conjugate step coeff_3 * z^3\n    let t22 = circuit_add(t20, t21); // Eval R_n_minus_2_conjugate step + (coeff_3 * z^3)\n    let t23 = circuit_mul(in13, t2); // Eval R_n_minus_2_conjugate step coeff_4 * z^4\n    let t24 = circuit_add(t22, t23); // Eval R_n_minus_2_conjugate step + (coeff_4 * z^4)\n    let t25 = circuit_mul(t13, t3); // Eval R_n_minus_2_conjugate step coeff_5 * z^5\n    let t26 = circuit_add(t24, t25); // Eval R_n_minus_2_conjugate step + (coeff_5 * z^5)\n    let t27 = circuit_mul(in15, t4); // Eval R_n_minus_2_conjugate step coeff_6 * z^6\n    let t28 = circuit_add(t26, t27); // Eval R_n_minus_2_conjugate step + (coeff_6 * z^6)\n    let t29 = circuit_mul(t14, t5); // Eval R_n_minus_2_conjugate step coeff_7 * z^7\n    let t30 = circuit_add(t28, t29); // Eval R_n_minus_2_conjugate step + (coeff_7 * z^7)\n    let t31 = circuit_mul(in17, t6); // Eval R_n_minus_2_conjugate step coeff_8 * z^8\n    let t32 = circuit_add(t30, t31); // Eval R_n_minus_2_conjugate step + (coeff_8 * z^8)\n    let t33 = circuit_mul(t15, t7); // Eval R_n_minus_2_conjugate step coeff_9 * z^9\n    let t34 = circuit_add(t32, t33); // Eval R_n_minus_2_conjugate step + (coeff_9 * z^9)\n    let t35 = circuit_mul(in19, t8); // Eval R_n_minus_2_conjugate step coeff_10 * z^10\n    let t36 = circuit_add(t34, t35); // Eval R_n_minus_2_conjugate step + (coeff_10 * z^10)\n    let t37 = circuit_mul(t16, t9); // Eval R_n_minus_2_conjugate step coeff_11 * z^11\n    let t38 = circuit_add(t36, t37); // Eval R_n_minus_2_conjugate step + (coeff_11 * z^11)\n    let t39 = circuit_mul(t38, in7);\n    let t40 = circuit_mul(t39, in5);\n    let t41 = circuit_mul(t40, in126);\n    let t42 = circuit_sub(t41, in3); // (Π(n-1,k) (Pk(z)) - R_n_minus_1(z))\n    let t43 = circuit_mul(in4, in8);\n    let t44 = circuit_add(t43, t42); // c_1 * previous_lhs + lhs_n_minus_1\n    let t45 = circuit_mul(in2, t4); // Eval sparse poly P_irr step coeff_6 * z^6\n    let t46 = circuit_add(in1, t45); // Eval sparse poly P_irr step + coeff_6 * z^6\n    let t47 = circuit_add(t46, t10); // Eval sparse poly P_irr step + 1*z^12\n    let t48 = circuit_mul(in125, in6); // Eval big_Q Horner step: multiply by z\n    let t49 = circuit_add(in124, t48); // Eval big_Q Horner step: add coefficient_103\n    let t50 = circuit_mul(t49, in6); // Eval big_Q Horner step: multiply by z\n    let t51 = circuit_add(in123, t50); // Eval big_Q Horner step: add coefficient_102\n    let t52 = circuit_mul(t51, in6); // Eval big_Q Horner step: multiply by z\n    let t53 = circuit_add(in122, t52); // Eval big_Q Horner step: add coefficient_101\n    let t54 = circuit_mul(t53, in6); // Eval big_Q Horner step: multiply by z\n    let t55 = circuit_add(in121, t54); // Eval big_Q Horner step: add coefficient_100\n    let t56 = circuit_mul(t55, in6); // Eval big_Q Horner step: multiply by z\n    let t57 = circuit_add(in120, t56); // Eval big_Q Horner step: add coefficient_99\n    let t58 = circuit_mul(t57, in6); // Eval big_Q Horner step: multiply by z\n    let t59 = circuit_add(in119, t58); // Eval big_Q Horner step: add coefficient_98\n    let t60 = circuit_mul(t59, in6); // Eval big_Q Horner step: multiply by z\n    let t61 = circuit_add(in118, t60); // Eval big_Q Horner step: add coefficient_97\n    let t62 = circuit_mul(t61, in6); // Eval big_Q Horner step: multiply by z\n    let t63 = circuit_add(in117, t62); // Eval big_Q Horner step: add coefficient_96\n    let t64 = circuit_mul(t63, in6); // Eval big_Q Horner step: multiply by z\n    let t65 = circuit_add(in116, t64); // Eval big_Q Horner step: add coefficient_95\n    let t66 = circuit_mul(t65, in6); // Eval big_Q Horner step: multiply by z\n    let t67 = circuit_add(in115, t66); // Eval big_Q Horner step: add coefficient_94\n    let t68 = circuit_mul(t67, in6); // Eval big_Q Horner step: multiply by z\n    let t69 = circuit_add(in114, t68); // Eval big_Q Horner step: add coefficient_93\n    let t70 = circuit_mul(t69, in6); // Eval big_Q Horner step: multiply by z\n    let t71 = circuit_add(in113, t70); // Eval big_Q Horner step: add coefficient_92\n    let t72 = circuit_mul(t71, in6); // Eval big_Q Horner step: multiply by z\n    let t73 = circuit_add(in112, t72); // Eval big_Q Horner step: add coefficient_91\n    let t74 = circuit_mul(t73, in6); // Eval big_Q Horner step: multiply by z\n    let t75 = circuit_add(in111, t74); // Eval big_Q Horner step: add coefficient_90\n    let t76 = circuit_mul(t75, in6); // Eval big_Q Horner step: multiply by z\n    let t77 = circuit_add(in110, t76); // Eval big_Q Horner step: add coefficient_89\n    let t78 = circuit_mul(t77, in6); // Eval big_Q Horner step: multiply by z\n    let t79 = circuit_add(in109, t78); // Eval big_Q Horner step: add coefficient_88\n    let t80 = circuit_mul(t79, in6); // Eval big_Q Horner step: multiply by z\n    let t81 = circuit_add(in108, t80); // Eval big_Q Horner step: add coefficient_87\n    let t82 = circuit_mul(t81, in6); // Eval big_Q Horner step: multiply by z\n    let t83 = circuit_add(in107, t82); // Eval big_Q Horner step: add coefficient_86\n    let t84 = circuit_mul(t83, in6); // Eval big_Q Horner step: multiply by z\n    let t85 = circuit_add(in106, t84); // Eval big_Q Horner step: add coefficient_85\n    let t86 = circuit_mul(t85, in6); // Eval big_Q Horner step: multiply by z\n    let t87 = circuit_add(in105, t86); // Eval big_Q Horner step: add coefficient_84\n    let t88 = circuit_mul(t87, in6); // Eval big_Q Horner step: multiply by z\n    let t89 = circuit_add(in104, t88); // Eval big_Q Horner step: add coefficient_83\n    let t90 = circuit_mul(t89, in6); // Eval big_Q Horner step: multiply by z\n    let t91 = circuit_add(in103, t90); // Eval big_Q Horner step: add coefficient_82\n    let t92 = circuit_mul(t91, in6); // Eval big_Q Horner step: multiply by z\n    let t93 = circuit_add(in102, t92); // Eval big_Q Horner step: add coefficient_81\n    let t94 = circuit_mul(t93, in6); // Eval big_Q Horner step: multiply by z\n    let t95 = circuit_add(in101, t94); // Eval big_Q Horner step: add coefficient_80\n    let t96 = circuit_mul(t95, in6); // Eval big_Q Horner step: multiply by z\n    let t97 = circuit_add(in100, t96); // Eval big_Q Horner step: add coefficient_79\n    let t98 = circuit_mul(t97, in6); // Eval big_Q Horner step: multiply by z\n    let t99 = circuit_add(in99, t98); // Eval big_Q Horner step: add coefficient_78\n    let t100 = circuit_mul(t99, in6); // Eval big_Q Horner step: multiply by z\n    let t101 = circuit_add(in98, t100); // Eval big_Q Horner step: add coefficient_77\n    let t102 = circuit_mul(t101, in6); // Eval big_Q Horner step: multiply by z\n    let t103 = circuit_add(in97, t102); // Eval big_Q Horner step: add coefficient_76\n    let t104 = circuit_mul(t103, in6); // Eval big_Q Horner step: multiply by z\n    let t105 = circuit_add(in96, t104); // Eval big_Q Horner step: add coefficient_75\n    let t106 = circuit_mul(t105, in6); // Eval big_Q Horner step: multiply by z\n    let t107 = circuit_add(in95, t106); // Eval big_Q Horner step: add coefficient_74\n    let t108 = circuit_mul(t107, in6); // Eval big_Q Horner step: multiply by z\n    let t109 = circuit_add(in94, t108); // Eval big_Q Horner step: add coefficient_73\n    let t110 = circuit_mul(t109, in6); // Eval big_Q Horner step: multiply by z\n    let t111 = circuit_add(in93, t110); // Eval big_Q Horner step: add coefficient_72\n    let t112 = circuit_mul(t111, in6); // Eval big_Q Horner step: multiply by z\n    let t113 = circuit_add(in92, t112); // Eval big_Q Horner step: add coefficient_71\n    let t114 = circuit_mul(t113, in6); // Eval big_Q Horner step: multiply by z\n    let t115 = circuit_add(in91, t114); // Eval big_Q Horner step: add coefficient_70\n    let t116 = circuit_mul(t115, in6); // Eval big_Q Horner step: multiply by z\n    let t117 = circuit_add(in90, t116); // Eval big_Q Horner step: add coefficient_69\n    let t118 = circuit_mul(t117, in6); // Eval big_Q Horner step: multiply by z\n    let t119 = circuit_add(in89, t118); // Eval big_Q Horner step: add coefficient_68\n    let t120 = circuit_mul(t119, in6); // Eval big_Q Horner step: multiply by z\n    let t121 = circuit_add(in88, t120); // Eval big_Q Horner step: add coefficient_67\n    let t122 = circuit_mul(t121, in6); // Eval big_Q Horner step: multiply by z\n    let t123 = circuit_add(in87, t122); // Eval big_Q Horner step: add coefficient_66\n    let t124 = circuit_mul(t123, in6); // Eval big_Q Horner step: multiply by z\n    let t125 = circuit_add(in86, t124); // Eval big_Q Horner step: add coefficient_65\n    let t126 = circuit_mul(t125, in6); // Eval big_Q Horner step: multiply by z\n    let t127 = circuit_add(in85, t126); // Eval big_Q Horner step: add coefficient_64\n    let t128 = circuit_mul(t127, in6); // Eval big_Q Horner step: multiply by z\n    let t129 = circuit_add(in84, t128); // Eval big_Q Horner step: add coefficient_63\n    let t130 = circuit_mul(t129, in6); // Eval big_Q Horner step: multiply by z\n    let t131 = circuit_add(in83, t130); // Eval big_Q Horner step: add coefficient_62\n    let t132 = circuit_mul(t131, in6); // Eval big_Q Horner step: multiply by z\n    let t133 = circuit_add(in82, t132); // Eval big_Q Horner step: add coefficient_61\n    let t134 = circuit_mul(t133, in6); // Eval big_Q Horner step: multiply by z\n    let t135 = circuit_add(in81, t134); // Eval big_Q Horner step: add coefficient_60\n    let t136 = circuit_mul(t135, in6); // Eval big_Q Horner step: multiply by z\n    let t137 = circuit_add(in80, t136); // Eval big_Q Horner step: add coefficient_59\n    let t138 = circuit_mul(t137, in6); // Eval big_Q Horner step: multiply by z\n    let t139 = circuit_add(in79, t138); // Eval big_Q Horner step: add coefficient_58\n    let t140 = circuit_mul(t139, in6); // Eval big_Q Horner step: multiply by z\n    let t141 = circuit_add(in78, t140); // Eval big_Q Horner step: add coefficient_57\n    let t142 = circuit_mul(t141, in6); // Eval big_Q Horner step: multiply by z\n    let t143 = circuit_add(in77, t142); // Eval big_Q Horner step: add coefficient_56\n    let t144 = circuit_mul(t143, in6); // Eval big_Q Horner step: multiply by z\n    let t145 = circuit_add(in76, t144); // Eval big_Q Horner step: add coefficient_55\n    let t146 = circuit_mul(t145, in6); // Eval big_Q Horner step: multiply by z\n    let t147 = circuit_add(in75, t146); // Eval big_Q Horner step: add coefficient_54\n    let t148 = circuit_mul(t147, in6); // Eval big_Q Horner step: multiply by z\n    let t149 = circuit_add(in74, t148); // Eval big_Q Horner step: add coefficient_53\n    let t150 = circuit_mul(t149, in6); // Eval big_Q Horner step: multiply by z\n    let t151 = circuit_add(in73, t150); // Eval big_Q Horner step: add coefficient_52\n    let t152 = circuit_mul(t151, in6); // Eval big_Q Horner step: multiply by z\n    let t153 = circuit_add(in72, t152); // Eval big_Q Horner step: add coefficient_51\n    let t154 = circuit_mul(t153, in6); // Eval big_Q Horner step: multiply by z\n    let t155 = circuit_add(in71, t154); // Eval big_Q Horner step: add coefficient_50\n    let t156 = circuit_mul(t155, in6); // Eval big_Q Horner step: multiply by z\n    let t157 = circuit_add(in70, t156); // Eval big_Q Horner step: add coefficient_49\n    let t158 = circuit_mul(t157, in6); // Eval big_Q Horner step: multiply by z\n    let t159 = circuit_add(in69, t158); // Eval big_Q Horner step: add coefficient_48\n    let t160 = circuit_mul(t159, in6); // Eval big_Q Horner step: multiply by z\n    let t161 = circuit_add(in68, t160); // Eval big_Q Horner step: add coefficient_47\n    let t162 = circuit_mul(t161, in6); // Eval big_Q Horner step: multiply by z\n    let t163 = circuit_add(in67, t162); // Eval big_Q Horner step: add coefficient_46\n    let t164 = circuit_mul(t163, in6); // Eval big_Q Horner step: multiply by z\n    let t165 = circuit_add(in66, t164); // Eval big_Q Horner step: add coefficient_45\n    let t166 = circuit_mul(t165, in6); // Eval big_Q Horner step: multiply by z\n    let t167 = circuit_add(in65, t166); // Eval big_Q Horner step: add coefficient_44\n    let t168 = circuit_mul(t167, in6); // Eval big_Q Horner step: multiply by z\n    let t169 = circuit_add(in64, t168); // Eval big_Q Horner step: add coefficient_43\n    let t170 = circuit_mul(t169, in6); // Eval big_Q Horner step: multiply by z\n    let t171 = circuit_add(in63, t170); // Eval big_Q Horner step: add coefficient_42\n    let t172 = circuit_mul(t171, in6); // Eval big_Q Horner step: multiply by z\n    let t173 = circuit_add(in62, t172); // Eval big_Q Horner step: add coefficient_41\n    let t174 = circuit_mul(t173, in6); // Eval big_Q Horner step: multiply by z\n    let t175 = circuit_add(in61, t174); // Eval big_Q Horner step: add coefficient_40\n    let t176 = circuit_mul(t175, in6); // Eval big_Q Horner step: multiply by z\n    let t177 = circuit_add(in60, t176); // Eval big_Q Horner step: add coefficient_39\n    let t178 = circuit_mul(t177, in6); // Eval big_Q Horner step: multiply by z\n    let t179 = circuit_add(in59, t178); // Eval big_Q Horner step: add coefficient_38\n    let t180 = circuit_mul(t179, in6); // Eval big_Q Horner step: multiply by z\n    let t181 = circuit_add(in58, t180); // Eval big_Q Horner step: add coefficient_37\n    let t182 = circuit_mul(t181, in6); // Eval big_Q Horner step: multiply by z\n    let t183 = circuit_add(in57, t182); // Eval big_Q Horner step: add coefficient_36\n    let t184 = circuit_mul(t183, in6); // Eval big_Q Horner step: multiply by z\n    let t185 = circuit_add(in56, t184); // Eval big_Q Horner step: add coefficient_35\n    let t186 = circuit_mul(t185, in6); // Eval big_Q Horner step: multiply by z\n    let t187 = circuit_add(in55, t186); // Eval big_Q Horner step: add coefficient_34\n    let t188 = circuit_mul(t187, in6); // Eval big_Q Horner step: multiply by z\n    let t189 = circuit_add(in54, t188); // Eval big_Q Horner step: add coefficient_33\n    let t190 = circuit_mul(t189, in6); // Eval big_Q Horner step: multiply by z\n    let t191 = circuit_add(in53, t190); // Eval big_Q Horner step: add coefficient_32\n    let t192 = circuit_mul(t191, in6); // Eval big_Q Horner step: multiply by z\n    let t193 = circuit_add(in52, t192); // Eval big_Q Horner step: add coefficient_31\n    let t194 = circuit_mul(t193, in6); // Eval big_Q Horner step: multiply by z\n    let t195 = circuit_add(in51, t194); // Eval big_Q Horner step: add coefficient_30\n    let t196 = circuit_mul(t195, in6); // Eval big_Q Horner step: multiply by z\n    let t197 = circuit_add(in50, t196); // Eval big_Q Horner step: add coefficient_29\n    let t198 = circuit_mul(t197, in6); // Eval big_Q Horner step: multiply by z\n    let t199 = circuit_add(in49, t198); // Eval big_Q Horner step: add coefficient_28\n    let t200 = circuit_mul(t199, in6); // Eval big_Q Horner step: multiply by z\n    let t201 = circuit_add(in48, t200); // Eval big_Q Horner step: add coefficient_27\n    let t202 = circuit_mul(t201, in6); // Eval big_Q Horner step: multiply by z\n    let t203 = circuit_add(in47, t202); // Eval big_Q Horner step: add coefficient_26\n    let t204 = circuit_mul(t203, in6); // Eval big_Q Horner step: multiply by z\n    let t205 = circuit_add(in46, t204); // Eval big_Q Horner step: add coefficient_25\n    let t206 = circuit_mul(t205, in6); // Eval big_Q Horner step: multiply by z\n    let t207 = circuit_add(in45, t206); // Eval big_Q Horner step: add coefficient_24\n    let t208 = circuit_mul(t207, in6); // Eval big_Q Horner step: multiply by z\n    let t209 = circuit_add(in44, t208); // Eval big_Q Horner step: add coefficient_23\n    let t210 = circuit_mul(t209, in6); // Eval big_Q Horner step: multiply by z\n    let t211 = circuit_add(in43, t210); // Eval big_Q Horner step: add coefficient_22\n    let t212 = circuit_mul(t211, in6); // Eval big_Q Horner step: multiply by z\n    let t213 = circuit_add(in42, t212); // Eval big_Q Horner step: add coefficient_21\n    let t214 = circuit_mul(t213, in6); // Eval big_Q Horner step: multiply by z\n    let t215 = circuit_add(in41, t214); // Eval big_Q Horner step: add coefficient_20\n    let t216 = circuit_mul(t215, in6); // Eval big_Q Horner step: multiply by z\n    let t217 = circuit_add(in40, t216); // Eval big_Q Horner step: add coefficient_19\n    let t218 = circuit_mul(t217, in6); // Eval big_Q Horner step: multiply by z\n    let t219 = circuit_add(in39, t218); // Eval big_Q Horner step: add coefficient_18\n    let t220 = circuit_mul(t219, in6); // Eval big_Q Horner step: multiply by z\n    let t221 = circuit_add(in38, t220); // Eval big_Q Horner step: add coefficient_17\n    let t222 = circuit_mul(t221, in6); // Eval big_Q Horner step: multiply by z\n    let t223 = circuit_add(in37, t222); // Eval big_Q Horner step: add coefficient_16\n    let t224 = circuit_mul(t223, in6); // Eval big_Q Horner step: multiply by z\n    let t225 = circuit_add(in36, t224); // Eval big_Q Horner step: add coefficient_15\n    let t226 = circuit_mul(t225, in6); // Eval big_Q Horner step: multiply by z\n    let t227 = circuit_add(in35, t226); // Eval big_Q Horner step: add coefficient_14\n    let t228 = circuit_mul(t227, in6); // Eval big_Q Horner step: multiply by z\n    let t229 = circuit_add(in34, t228); // Eval big_Q Horner step: add coefficient_13\n    let t230 = circuit_mul(t229, in6); // Eval big_Q Horner step: multiply by z\n    let t231 = circuit_add(in33, t230); // Eval big_Q Horner step: add coefficient_12\n    let t232 = circuit_mul(t231, in6); // Eval big_Q Horner step: multiply by z\n    let t233 = circuit_add(in32, t232); // Eval big_Q Horner step: add coefficient_11\n    let t234 = circuit_mul(t233, in6); // Eval big_Q Horner step: multiply by z\n    let t235 = circuit_add(in31, t234); // Eval big_Q Horner step: add coefficient_10\n    let t236 = circuit_mul(t235, in6); // Eval big_Q Horner step: multiply by z\n    let t237 = circuit_add(in30, t236); // Eval big_Q Horner step: add coefficient_9\n    let t238 = circuit_mul(t237, in6); // Eval big_Q Horner step: multiply by z\n    let t239 = circuit_add(in29, t238); // Eval big_Q Horner step: add coefficient_8\n    let t240 = circuit_mul(t239, in6); // Eval big_Q Horner step: multiply by z\n    let t241 = circuit_add(in28, t240); // Eval big_Q Horner step: add coefficient_7\n    let t242 = circuit_mul(t241, in6); // Eval big_Q Horner step: multiply by z\n    let t243 = circuit_add(in27, t242); // Eval big_Q Horner step: add coefficient_6\n    let t244 = circuit_mul(t243, in6); // Eval big_Q Horner step: multiply by z\n    let t245 = circuit_add(in26, t244); // Eval big_Q Horner step: add coefficient_5\n    let t246 = circuit_mul(t245, in6); // Eval big_Q Horner step: multiply by z\n    let t247 = circuit_add(in25, t246); // Eval big_Q Horner step: add coefficient_4\n    let t248 = circuit_mul(t247, in6); // Eval big_Q Horner step: multiply by z\n    let t249 = circuit_add(in24, t248); // Eval big_Q Horner step: add coefficient_3\n    let t250 = circuit_mul(t249, in6); // Eval big_Q Horner step: multiply by z\n    let t251 = circuit_add(in23, t250); // Eval big_Q Horner step: add coefficient_2\n    let t252 = circuit_mul(t251, in6); // Eval big_Q Horner step: multiply by z\n    let t253 = circuit_add(in22, t252); // Eval big_Q Horner step: add coefficient_1\n    let t254 = circuit_mul(t253, in6); // Eval big_Q Horner step: multiply by z\n    let t255 = circuit_add(in21, t254); // Eval big_Q Horner step: add coefficient_0\n    let t256 = circuit_mul(t255, t47); // Q(z) * P(z)\n    let t257 = circuit_sub(t44, t256); // final_lhs - Q(z) * P(z)\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t257,).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x2, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0xb153ffffb9feffffffffaaa9, 0x6730d2a0f6b0f6241eabfffe, 0x434bacd764774b84f38512bf,\n                0x1a0111ea397fe69a4b1ba7b6,\n            ],\n        ); // in2\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_1_of_z); // in3\n    circuit_inputs = circuit_inputs.next_2(c_1); // in4\n    circuit_inputs = circuit_inputs.next_2(w_of_z); // in5\n    circuit_inputs = circuit_inputs.next_2(z); // in6\n    circuit_inputs = circuit_inputs.next_2(c_inv_frob_1_of_z); // in7\n    circuit_inputs = circuit_inputs.next_2(previous_lhs); // in8\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w0); // in9\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w1); // in10\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w2); // in11\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w3); // in12\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w4); // in13\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w5); // in14\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w6); // in15\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w7); // in16\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w8); // in17\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w9); // in18\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w10); // in19\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2.w11); // in20\n\n    for val in Q.span() {\n        circuit_inputs = circuit_inputs.next_2(*val);\n    } // in21 - in125\n\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result_of_z); // in126\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let final_check: u384 = outputs.get_output(t257);\n    return (final_check,);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_INIT_BIT_2P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_0: G2Line<u384>,\n    G2_line_0_2: G2Line<u384>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_1: G2Line<u384>,\n    G2_line_1_2: G2Line<u384>,\n    R_i_of_z: u384,\n    z: u384,\n    c_inv_of_z: u384,\n) -> (u384,) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22) = (CE::<CI<21>> {}, CE::<CI<22>> {});\n    let t0 = circuit_mul(in21, in21); // compute z^2\n    let t1 = circuit_mul(t0, in21); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, t0); // compute z^8\n    let t4 = circuit_mul(in22, in22);\n    let t5 = circuit_mul(in22, t4);\n    let t6 = circuit_sub(in4, in5);\n    let t7 = circuit_mul(t6, in0); // eval bls line by yInv\n    let t8 = circuit_sub(in2, in3);\n    let t9 = circuit_mul(t8, in1); // eval blsline by xNegOverY\n    let t10 = circuit_mul(in5, in0); // eval bls line by yInv\n    let t11 = circuit_mul(in3, in1); // eval bls line by xNegOverY\n    let t12 = circuit_sub(in8, in9);\n    let t13 = circuit_mul(t12, in0); // eval bls line by yInv\n    let t14 = circuit_sub(in6, in7);\n    let t15 = circuit_mul(t14, in1); // eval blsline by xNegOverY\n    let t16 = circuit_mul(in9, in0); // eval bls line by yInv\n    let t17 = circuit_mul(in7, in1); // eval bls line by xNegOverY\n    let t18 = circuit_mul(t9, t0); // Eval sparse poly line_0p_1 step coeff_2 * z^2\n    let t19 = circuit_add(t7, t18); // Eval sparse poly line_0p_1 step + coeff_2 * z^2\n    let t20 = circuit_add(t19, t1); // Eval sparse poly line_0p_1 step + 1*z^3\n    let t21 = circuit_mul(t10, t2); // Eval sparse poly line_0p_1 step coeff_6 * z^6\n    let t22 = circuit_add(t20, t21); // Eval sparse poly line_0p_1 step + coeff_6 * z^6\n    let t23 = circuit_mul(t11, t3); // Eval sparse poly line_0p_1 step coeff_8 * z^8\n    let t24 = circuit_add(t22, t23); // Eval sparse poly line_0p_1 step + coeff_8 * z^8\n    let t25 = circuit_mul(t5, t24);\n    let t26 = circuit_mul(t15, t0); // Eval sparse poly line_0p_2 step coeff_2 * z^2\n    let t27 = circuit_add(t13, t26); // Eval sparse poly line_0p_2 step + coeff_2 * z^2\n    let t28 = circuit_add(t27, t1); // Eval sparse poly line_0p_2 step + 1*z^3\n    let t29 = circuit_mul(t16, t2); // Eval sparse poly line_0p_2 step coeff_6 * z^6\n    let t30 = circuit_add(t28, t29); // Eval sparse poly line_0p_2 step + coeff_6 * z^6\n    let t31 = circuit_mul(t17, t3); // Eval sparse poly line_0p_2 step coeff_8 * z^8\n    let t32 = circuit_add(t30, t31); // Eval sparse poly line_0p_2 step + coeff_8 * z^8\n    let t33 = circuit_mul(t25, t32);\n    let t34 = circuit_sub(in14, in15);\n    let t35 = circuit_mul(t34, in10); // eval bls line by yInv\n    let t36 = circuit_sub(in12, in13);\n    let t37 = circuit_mul(t36, in11); // eval blsline by xNegOverY\n    let t38 = circuit_mul(in15, in10); // eval bls line by yInv\n    let t39 = circuit_mul(in13, in11); // eval bls line by xNegOverY\n    let t40 = circuit_sub(in18, in19);\n    let t41 = circuit_mul(t40, in10); // eval bls line by yInv\n    let t42 = circuit_sub(in16, in17);\n    let t43 = circuit_mul(t42, in11); // eval blsline by xNegOverY\n    let t44 = circuit_mul(in19, in10); // eval bls line by yInv\n    let t45 = circuit_mul(in17, in11); // eval bls line by xNegOverY\n    let t46 = circuit_mul(t37, t0); // Eval sparse poly line_1p_1 step coeff_2 * z^2\n    let t47 = circuit_add(t35, t46); // Eval sparse poly line_1p_1 step + coeff_2 * z^2\n    let t48 = circuit_add(t47, t1); // Eval sparse poly line_1p_1 step + 1*z^3\n    let t49 = circuit_mul(t38, t2); // Eval sparse poly line_1p_1 step coeff_6 * z^6\n    let t50 = circuit_add(t48, t49); // Eval sparse poly line_1p_1 step + coeff_6 * z^6\n    let t51 = circuit_mul(t39, t3); // Eval sparse poly line_1p_1 step coeff_8 * z^8\n    let t52 = circuit_add(t50, t51); // Eval sparse poly line_1p_1 step + coeff_8 * z^8\n    let t53 = circuit_mul(t33, t52);\n    let t54 = circuit_mul(t43, t0); // Eval sparse poly line_1p_2 step coeff_2 * z^2\n    let t55 = circuit_add(t41, t54); // Eval sparse poly line_1p_2 step + coeff_2 * z^2\n    let t56 = circuit_add(t55, t1); // Eval sparse poly line_1p_2 step + 1*z^3\n    let t57 = circuit_mul(t44, t2); // Eval sparse poly line_1p_2 step coeff_6 * z^6\n    let t58 = circuit_add(t56, t57); // Eval sparse poly line_1p_2 step + coeff_6 * z^6\n    let t59 = circuit_mul(t45, t3); // Eval sparse poly line_1p_2 step coeff_8 * z^8\n    let t60 = circuit_add(t58, t59); // Eval sparse poly line_1p_2 step + coeff_8 * z^8\n    let t61 = circuit_mul(t53, t60);\n    let t62 = circuit_sub(t61, in20); // ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t62,).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in0\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in1\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r0a0); // in2\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r0a1); // in3\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r1a0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r1a1); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_0_2.r0a0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_0_2.r0a1); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_0_2.r1a0); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_0_2.r1a1); // in9\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in10\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(G2_line_1_2.r0a0); // in16\n    circuit_inputs = circuit_inputs.next_2(G2_line_1_2.r0a1); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_1_2.r1a0); // in18\n    circuit_inputs = circuit_inputs.next_2(G2_line_1_2.r1a1); // in19\n    circuit_inputs = circuit_inputs.next_2(R_i_of_z); // in20\n    circuit_inputs = circuit_inputs.next_2(z); // in21\n    circuit_inputs = circuit_inputs.next_2(c_inv_of_z); // in22\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let new_lhs: u384 = outputs.get_output(t62);\n    return (new_lhs,);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_INIT_BIT_3P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_0: G2Line<u384>,\n    G2_line_0_2: G2Line<u384>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_1: G2Line<u384>,\n    G2_line_1_2: G2Line<u384>,\n    yInv_2: u384,\n    xNegOverY_2: u384,\n    Q_2: G2Point,\n    R_i_of_z: u384,\n    z: u384,\n    c_inv_of_z: u384,\n) -> (G2Point, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x3\n    let in1 = CE::<CI<1>> {}; // 0x6\n    let in2 = CE::<CI<2>> {}; // 0x0\n\n    // INPUT stack\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let (in24, in25, in26) = (CE::<CI<24>> {}, CE::<CI<25>> {}, CE::<CI<26>> {});\n    let (in27, in28, in29) = (CE::<CI<27>> {}, CE::<CI<28>> {}, CE::<CI<29>> {});\n    let (in30, in31) = (CE::<CI<30>> {}, CE::<CI<31>> {});\n    let t0 = circuit_mul(in30, in30); // compute z^2\n    let t1 = circuit_mul(t0, in30); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, t0); // compute z^8\n    let t4 = circuit_mul(in31, in31);\n    let t5 = circuit_mul(in31, t4);\n    let t6 = circuit_sub(in7, in8);\n    let t7 = circuit_mul(t6, in3); // eval bls line by yInv\n    let t8 = circuit_sub(in5, in6);\n    let t9 = circuit_mul(t8, in4); // eval blsline by xNegOverY\n    let t10 = circuit_mul(in8, in3); // eval bls line by yInv\n    let t11 = circuit_mul(in6, in4); // eval bls line by xNegOverY\n    let t12 = circuit_sub(in11, in12);\n    let t13 = circuit_mul(t12, in3); // eval bls line by yInv\n    let t14 = circuit_sub(in9, in10);\n    let t15 = circuit_mul(t14, in4); // eval blsline by xNegOverY\n    let t16 = circuit_mul(in12, in3); // eval bls line by yInv\n    let t17 = circuit_mul(in10, in4); // eval bls line by xNegOverY\n    let t18 = circuit_mul(t9, t0); // Eval sparse poly line_0p_1 step coeff_2 * z^2\n    let t19 = circuit_add(t7, t18); // Eval sparse poly line_0p_1 step + coeff_2 * z^2\n    let t20 = circuit_add(t19, t1); // Eval sparse poly line_0p_1 step + 1*z^3\n    let t21 = circuit_mul(t10, t2); // Eval sparse poly line_0p_1 step coeff_6 * z^6\n    let t22 = circuit_add(t20, t21); // Eval sparse poly line_0p_1 step + coeff_6 * z^6\n    let t23 = circuit_mul(t11, t3); // Eval sparse poly line_0p_1 step coeff_8 * z^8\n    let t24 = circuit_add(t22, t23); // Eval sparse poly line_0p_1 step + coeff_8 * z^8\n    let t25 = circuit_mul(t5, t24);\n    let t26 = circuit_mul(t15, t0); // Eval sparse poly line_0p_2 step coeff_2 * z^2\n    let t27 = circuit_add(t13, t26); // Eval sparse poly line_0p_2 step + coeff_2 * z^2\n    let t28 = circuit_add(t27, t1); // Eval sparse poly line_0p_2 step + 1*z^3\n    let t29 = circuit_mul(t16, t2); // Eval sparse poly line_0p_2 step coeff_6 * z^6\n    let t30 = circuit_add(t28, t29); // Eval sparse poly line_0p_2 step + coeff_6 * z^6\n    let t31 = circuit_mul(t17, t3); // Eval sparse poly line_0p_2 step coeff_8 * z^8\n    let t32 = circuit_add(t30, t31); // Eval sparse poly line_0p_2 step + coeff_8 * z^8\n    let t33 = circuit_mul(t25, t32);\n    let t34 = circuit_sub(in17, in18);\n    let t35 = circuit_mul(t34, in13); // eval bls line by yInv\n    let t36 = circuit_sub(in15, in16);\n    let t37 = circuit_mul(t36, in14); // eval blsline by xNegOverY\n    let t38 = circuit_mul(in18, in13); // eval bls line by yInv\n    let t39 = circuit_mul(in16, in14); // eval bls line by xNegOverY\n    let t40 = circuit_sub(in21, in22);\n    let t41 = circuit_mul(t40, in13); // eval bls line by yInv\n    let t42 = circuit_sub(in19, in20);\n    let t43 = circuit_mul(t42, in14); // eval blsline by xNegOverY\n    let t44 = circuit_mul(in22, in13); // eval bls line by yInv\n    let t45 = circuit_mul(in20, in14); // eval bls line by xNegOverY\n    let t46 = circuit_mul(t37, t0); // Eval sparse poly line_1p_1 step coeff_2 * z^2\n    let t47 = circuit_add(t35, t46); // Eval sparse poly line_1p_1 step + coeff_2 * z^2\n    let t48 = circuit_add(t47, t1); // Eval sparse poly line_1p_1 step + 1*z^3\n    let t49 = circuit_mul(t38, t2); // Eval sparse poly line_1p_1 step coeff_6 * z^6\n    let t50 = circuit_add(t48, t49); // Eval sparse poly line_1p_1 step + coeff_6 * z^6\n    let t51 = circuit_mul(t39, t3); // Eval sparse poly line_1p_1 step coeff_8 * z^8\n    let t52 = circuit_add(t50, t51); // Eval sparse poly line_1p_1 step + coeff_8 * z^8\n    let t53 = circuit_mul(t33, t52);\n    let t54 = circuit_mul(t43, t0); // Eval sparse poly line_1p_2 step coeff_2 * z^2\n    let t55 = circuit_add(t41, t54); // Eval sparse poly line_1p_2 step + coeff_2 * z^2\n    let t56 = circuit_add(t55, t1); // Eval sparse poly line_1p_2 step + 1*z^3\n    let t57 = circuit_mul(t44, t2); // Eval sparse poly line_1p_2 step coeff_6 * z^6\n    let t58 = circuit_add(t56, t57); // Eval sparse poly line_1p_2 step + coeff_6 * z^6\n    let t59 = circuit_mul(t45, t3); // Eval sparse poly line_1p_2 step coeff_8 * z^8\n    let t60 = circuit_add(t58, t59); // Eval sparse poly line_1p_2 step + coeff_8 * z^8\n    let t61 = circuit_mul(t53, t60);\n    let t62 = circuit_add(in25, in26);\n    let t63 = circuit_sub(in25, in26);\n    let t64 = circuit_mul(t62, t63);\n    let t65 = circuit_mul(in25, in26);\n    let t66 = circuit_mul(t64, in0);\n    let t67 = circuit_mul(t65, in1);\n    let t68 = circuit_add(in27, in27); // Fp2 add coeff 0/1\n    let t69 = circuit_add(in28, in28); // Fp2 add coeff 1/1\n    let t70 = circuit_mul(t68, t68); // Fp2 Inv start\n    let t71 = circuit_mul(t69, t69);\n    let t72 = circuit_add(t70, t71);\n    let t73 = circuit_inverse(t72);\n    let t74 = circuit_mul(t68, t73); // Fp2 Inv real part end\n    let t75 = circuit_mul(t69, t73);\n    let t76 = circuit_sub(in2, t75); // Fp2 Inv imag part end\n    let t77 = circuit_mul(t66, t74); // Fp2 mul start\n    let t78 = circuit_mul(t67, t76);\n    let t79 = circuit_sub(t77, t78); // Fp2 mul real part end\n    let t80 = circuit_mul(t66, t76);\n    let t81 = circuit_mul(t67, t74);\n    let t82 = circuit_add(t80, t81); // Fp2 mul imag part end\n    let t83 = circuit_mul(t79, in25); // Fp2 mul start\n    let t84 = circuit_mul(t82, in26);\n    let t85 = circuit_sub(t83, t84); // Fp2 mul real part end\n    let t86 = circuit_mul(t79, in26);\n    let t87 = circuit_mul(t82, in25);\n    let t88 = circuit_add(t86, t87); // Fp2 mul imag part end\n    let t89 = circuit_sub(t85, in27); // Fp2 sub coeff 0/1\n    let t90 = circuit_sub(t88, in28); // Fp2 sub coeff 1/1\n    let t91 = circuit_add(t79, t82);\n    let t92 = circuit_sub(t79, t82);\n    let t93 = circuit_mul(t91, t92);\n    let t94 = circuit_mul(t79, t82);\n    let t95 = circuit_add(t94, t94);\n    let t96 = circuit_add(in25, in25); // Fp2 add coeff 0/1\n    let t97 = circuit_add(in26, in26); // Fp2 add coeff 1/1\n    let t98 = circuit_sub(t93, t96); // Fp2 sub coeff 0/1\n    let t99 = circuit_sub(t95, t97); // Fp2 sub coeff 1/1\n    let t100 = circuit_sub(in25, t98); // Fp2 sub coeff 0/1\n    let t101 = circuit_sub(in26, t99); // Fp2 sub coeff 1/1\n    let t102 = circuit_mul(t100, t100); // Fp2 Inv start\n    let t103 = circuit_mul(t101, t101);\n    let t104 = circuit_add(t102, t103);\n    let t105 = circuit_inverse(t104);\n    let t106 = circuit_mul(t100, t105); // Fp2 Inv real part end\n    let t107 = circuit_mul(t101, t105);\n    let t108 = circuit_sub(in2, t107); // Fp2 Inv imag part end\n    let t109 = circuit_mul(t68, t106); // Fp2 mul start\n    let t110 = circuit_mul(t69, t108);\n    let t111 = circuit_sub(t109, t110); // Fp2 mul real part end\n    let t112 = circuit_mul(t68, t108);\n    let t113 = circuit_mul(t69, t106);\n    let t114 = circuit_add(t112, t113); // Fp2 mul imag part end\n    let t115 = circuit_sub(t111, t79); // Fp2 sub coeff 0/1\n    let t116 = circuit_sub(t114, t82); // Fp2 sub coeff 1/1\n    let t117 = circuit_mul(t115, in25); // Fp2 mul start\n    let t118 = circuit_mul(t116, in26);\n    let t119 = circuit_sub(t117, t118); // Fp2 mul real part end\n    let t120 = circuit_mul(t115, in26);\n    let t121 = circuit_mul(t116, in25);\n    let t122 = circuit_add(t120, t121); // Fp2 mul imag part end\n    let t123 = circuit_sub(t119, in27); // Fp2 sub coeff 0/1\n    let t124 = circuit_sub(t122, in28); // Fp2 sub coeff 1/1\n    let t125 = circuit_add(t115, t116);\n    let t126 = circuit_sub(t115, t116);\n    let t127 = circuit_mul(t125, t126);\n    let t128 = circuit_mul(t115, t116);\n    let t129 = circuit_add(t128, t128);\n    let t130 = circuit_add(in25, t98); // Fp2 add coeff 0/1\n    let t131 = circuit_add(in26, t99); // Fp2 add coeff 1/1\n    let t132 = circuit_sub(t127, t130); // Fp2 sub coeff 0/1\n    let t133 = circuit_sub(t129, t131); // Fp2 sub coeff 1/1\n    let t134 = circuit_sub(in25, t132); // Fp2 sub coeff 0/1\n    let t135 = circuit_sub(in26, t133); // Fp2 sub coeff 1/1\n    let t136 = circuit_mul(t115, t134); // Fp2 mul start\n    let t137 = circuit_mul(t116, t135);\n    let t138 = circuit_sub(t136, t137); // Fp2 mul real part end\n    let t139 = circuit_mul(t115, t135);\n    let t140 = circuit_mul(t116, t134);\n    let t141 = circuit_add(t139, t140); // Fp2 mul imag part end\n    let t142 = circuit_sub(t138, in27); // Fp2 sub coeff 0/1\n    let t143 = circuit_sub(t141, in28); // Fp2 sub coeff 1/1\n    let t144 = circuit_sub(t89, t90);\n    let t145 = circuit_mul(t144, in23); // eval bls line by yInv\n    let t146 = circuit_sub(t79, t82);\n    let t147 = circuit_mul(t146, in24); // eval blsline by xNegOverY\n    let t148 = circuit_mul(t90, in23); // eval bls line by yInv\n    let t149 = circuit_mul(t82, in24); // eval bls line by xNegOverY\n    let t150 = circuit_sub(t123, t124);\n    let t151 = circuit_mul(t150, in23); // eval bls line by yInv\n    let t152 = circuit_sub(t115, t116);\n    let t153 = circuit_mul(t152, in24); // eval blsline by xNegOverY\n    let t154 = circuit_mul(t124, in23); // eval bls line by yInv\n    let t155 = circuit_mul(t116, in24); // eval bls line by xNegOverY\n    let t156 = circuit_mul(t147, t0); // Eval sparse poly line_2p_1 step coeff_2 * z^2\n    let t157 = circuit_add(t145, t156); // Eval sparse poly line_2p_1 step + coeff_2 * z^2\n    let t158 = circuit_add(t157, t1); // Eval sparse poly line_2p_1 step + 1*z^3\n    let t159 = circuit_mul(t148, t2); // Eval sparse poly line_2p_1 step coeff_6 * z^6\n    let t160 = circuit_add(t158, t159); // Eval sparse poly line_2p_1 step + coeff_6 * z^6\n    let t161 = circuit_mul(t149, t3); // Eval sparse poly line_2p_1 step coeff_8 * z^8\n    let t162 = circuit_add(t160, t161); // Eval sparse poly line_2p_1 step + coeff_8 * z^8\n    let t163 = circuit_mul(t61, t162);\n    let t164 = circuit_mul(t153, t0); // Eval sparse poly line_2p_2 step coeff_2 * z^2\n    let t165 = circuit_add(t151, t164); // Eval sparse poly line_2p_2 step + coeff_2 * z^2\n    let t166 = circuit_add(t165, t1); // Eval sparse poly line_2p_2 step + 1*z^3\n    let t167 = circuit_mul(t154, t2); // Eval sparse poly line_2p_2 step coeff_6 * z^6\n    let t168 = circuit_add(t166, t167); // Eval sparse poly line_2p_2 step + coeff_6 * z^6\n    let t169 = circuit_mul(t155, t3); // Eval sparse poly line_2p_2 step coeff_8 * z^8\n    let t170 = circuit_add(t168, t169); // Eval sparse poly line_2p_2 step + coeff_8 * z^8\n    let t171 = circuit_mul(t163, t170);\n    let t172 = circuit_sub(t171, in29); // ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t132, t133, t142, t143, t172).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x6, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in2\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in3\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r0a0); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r0a1); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r1a0); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r1a1); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_0_2.r0a0); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_0_2.r0a1); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_0_2.r1a0); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_0_2.r1a1); // in12\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in13\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r0a0); // in15\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r0a1); // in16\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r1a0); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r1a1); // in18\n    circuit_inputs = circuit_inputs.next_2(G2_line_1_2.r0a0); // in19\n    circuit_inputs = circuit_inputs.next_2(G2_line_1_2.r0a1); // in20\n    circuit_inputs = circuit_inputs.next_2(G2_line_1_2.r1a0); // in21\n    circuit_inputs = circuit_inputs.next_2(G2_line_1_2.r1a1); // in22\n    circuit_inputs = circuit_inputs.next_2(yInv_2); // in23\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_2); // in24\n    circuit_inputs = circuit_inputs.next_2(Q_2.x0); // in25\n    circuit_inputs = circuit_inputs.next_2(Q_2.x1); // in26\n    circuit_inputs = circuit_inputs.next_2(Q_2.y0); // in27\n    circuit_inputs = circuit_inputs.next_2(Q_2.y1); // in28\n    circuit_inputs = circuit_inputs.next_2(R_i_of_z); // in29\n    circuit_inputs = circuit_inputs.next_2(z); // in30\n    circuit_inputs = circuit_inputs.next_2(c_inv_of_z); // in31\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t132),\n        x1: outputs.get_output(t133),\n        y0: outputs.get_output(t142),\n        y1: outputs.get_output(t143),\n    };\n    let new_lhs: u384 = outputs.get_output(t172);\n    return (Q0, new_lhs);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_PREPARE_PAIRS_1P_circuit(p_0: G1Point) -> (BLSProcessedPair,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2) = (CE::<CI<1>> {}, CE::<CI<2>> {});\n    let t0 = circuit_inverse(in2);\n    let t1 = circuit_mul(in1, t0);\n    let t2 = circuit_sub(in0, t1);\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t0, t2).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p_0.x); // in1\n    circuit_inputs = circuit_inputs.next_2(p_0.y); // in2\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let p_0: BLSProcessedPair = BLSProcessedPair {\n        yInv: outputs.get_output(t0), xNegOverY: outputs.get_output(t2),\n    };\n    return (p_0,);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_PREPARE_PAIRS_2P_circuit(\n    p_0: G1Point, p_1: G1Point,\n) -> (BLSProcessedPair, BLSProcessedPair) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let in4 = CE::<CI<4>> {};\n    let t0 = circuit_inverse(in2);\n    let t1 = circuit_mul(in1, t0);\n    let t2 = circuit_sub(in0, t1);\n    let t3 = circuit_inverse(in4);\n    let t4 = circuit_mul(in3, t3);\n    let t5 = circuit_sub(in0, t4);\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t0, t2, t3, t5).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p_0.x); // in1\n    circuit_inputs = circuit_inputs.next_2(p_0.y); // in2\n    circuit_inputs = circuit_inputs.next_2(p_1.x); // in3\n    circuit_inputs = circuit_inputs.next_2(p_1.y); // in4\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let p_0: BLSProcessedPair = BLSProcessedPair {\n        yInv: outputs.get_output(t0), xNegOverY: outputs.get_output(t2),\n    };\n    let p_1: BLSProcessedPair = BLSProcessedPair {\n        yInv: outputs.get_output(t3), xNegOverY: outputs.get_output(t5),\n    };\n    return (p_0, p_1);\n}\n#[inline(always)]\npub fn run_BLS12_381_MP_CHECK_PREPARE_PAIRS_3P_circuit(\n    p_0: G1Point, p_1: G1Point, p_2: G1Point,\n) -> (BLSProcessedPair, BLSProcessedPair, BLSProcessedPair) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let t0 = circuit_inverse(in2);\n    let t1 = circuit_mul(in1, t0);\n    let t2 = circuit_sub(in0, t1);\n    let t3 = circuit_inverse(in4);\n    let t4 = circuit_mul(in3, t3);\n    let t5 = circuit_sub(in0, t4);\n    let t6 = circuit_inverse(in6);\n    let t7 = circuit_mul(in5, t6);\n    let t8 = circuit_sub(in0, t7);\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t0, t2, t3, t5, t6, t8).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p_0.x); // in1\n    circuit_inputs = circuit_inputs.next_2(p_0.y); // in2\n    circuit_inputs = circuit_inputs.next_2(p_1.x); // in3\n    circuit_inputs = circuit_inputs.next_2(p_1.y); // in4\n    circuit_inputs = circuit_inputs.next_2(p_2.x); // in5\n    circuit_inputs = circuit_inputs.next_2(p_2.y); // in6\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let p_0: BLSProcessedPair = BLSProcessedPair {\n        yInv: outputs.get_output(t0), xNegOverY: outputs.get_output(t2),\n    };\n    let p_1: BLSProcessedPair = BLSProcessedPair {\n        yInv: outputs.get_output(t3), xNegOverY: outputs.get_output(t5),\n    };\n    let p_2: BLSProcessedPair = BLSProcessedPair {\n        yInv: outputs.get_output(t6), xNegOverY: outputs.get_output(t8),\n    };\n    return (p_0, p_1, p_2);\n}\n#[inline(always)]\npub fn run_BN254_INITIALIZE_MPCHECK_EXT_MLR_circuit(\n    lambda_root: E12D<u288>,\n    z: u384,\n    scaling_factor: MillerLoopResultScalingFactor<u288>,\n    c_inv: E12D<u288>,\n    precomputed_miller_loop_result: E12D<u288>,\n) -> (u384, u384, u384, u384, u384, u384, u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x1\n    let in1 = CE::<CI<1>> {}; // 0x12\n    let in2 = CE::<CI<2>> {}; // 0x1d8c8daef3eee1e81b2522ec5eb28ded6895e1cdfde6a43f5daa971f3fa65955\n    let in3 = CE::<CI<3>> {}; // 0x217e400dc9351e774e34e2ac06ead4000d14d1e242b29c567e9c385ce480a71a\n    let in4 = CE::<CI<4>> {}; // 0x242b719062f6737b8481d22c6934ce844d72f250fd28d102c0d147b2f4d521a7\n    let in5 = CE::<CI<5>> {}; // 0x359809094bd5c8e1b9c22d81246ffc2e794e17643ac198484b8d9094aa82536\n    let in6 = CE::<CI<6>> {}; // 0x21436d48fcb50cc60dd4ef1e69a0c1f0dd2949fa6df7b44cbb259ef7cb58d5ed\n    let in7 = CE::<CI<7>> {}; // 0x18857a58f3b5bb3038a4311a86919d9c7c6c15f88a4f4f0831364cf35f78f771\n    let in8 = CE::<CI<8>> {}; // 0x2c84bbad27c3671562b7adefd44038ab3c0bbad96fc008e7d6998c82f7fc048b\n    let in9 = CE::<CI<9>> {}; // 0xc33b1c70e4fd11b6d1eab6fcd18b99ad4afd096a8697e0c9c36d8ca3339a7b5\n    let in10 = CE::<\n        CI<10>,\n    > {}; // 0x1b007294a55accce13fe08bea73305ff6bdac77c5371c546d428780a6e3dcfa8\n    let in11 = CE::<\n        CI<11>,\n    > {}; // 0x215d42e7ac7bd17cefe88dd8e6965b3adae92c974f501fe811493d72543a3977\n    let in12 = CE::<CI<12>> {}; // -0x1 % p\n    let in13 = CE::<\n        CI<13>,\n    > {}; // 0x246996f3b4fae7e6a6327cfe12150b8e747992778eeec7e5ca5cf05f80f362ac\n    let in14 = CE::<\n        CI<14>,\n    > {}; // 0x12d7c0c3ed42be419d2b22ca22ceca702eeb88c36a8b264dde75f4f798d6a3f2\n    let in15 = CE::<\n        CI<15>,\n    > {}; // 0x16c9e55061ebae204ba4cc8bd75a079432ae2a1d0b7c9dce1665d51c640fcba2\n    let in16 = CE::<CI<16>> {}; // 0xc38dce27e3b2cae33ce738a184c89d94a0e78406b48f98a7b4f4463e3a7dba0\n    let in17 = CE::<CI<17>> {}; // 0x7c03cbcac41049a0704b5a7ec796f2b21807dc98fa25bd282d37f632623b0e3\n    let in18 = CE::<CI<18>> {}; // 0xf20e129e47c9363aa7b569817e0966cba582096fa7a164080faed1f0d24275a\n    let in19 = CE::<\n        CI<19>,\n    > {}; // 0x2c145edbe7fd8aee9f3a80b03b0b1c923685d2ea1bdec763c13b4711cd2b8126\n    let in20 = CE::<CI<20>> {}; // 0x3df92c5b96e3914559897c6ad411fb25b75afb7f8b1c1a56586ff93e080f8bc\n    let in21 = CE::<\n        CI<21>,\n    > {}; // 0x12acf2ca76fd0675a27fb246c7729f7db080cb99678e2ac024c6b8ee6e0c2c4b\n    let in22 = CE::<\n        CI<22>,\n    > {}; // 0x1563dbde3bd6d35ba4523cf7da4e525e2ba6a3151500054667f8140c6a3f2d9f\n    let in23 = CE::<\n        CI<23>,\n    > {}; // 0x30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd49\n    let in24 = CE::<\n        CI<24>,\n    > {}; // 0x30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd48\n    let in25 = CE::<CI<25>> {}; // 0x59e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe\n    let in26 = CE::<CI<26>> {}; // 0x59e26bcea0d48bacd4f263f1acdb5c4f5763473177ffffff\n    let in27 = CE::<\n        CI<27>,\n    > {}; // 0x13d0c369615f7bb0b2bdfa8fef85fa07122bde8d67dfc8fabd3581ad840ddd76\n    let in28 = CE::<\n        CI<28>,\n    > {}; // 0x18a0f4219f4fdff6fc2bf531eb331a053a35744cac285af5685d3f90eacf7a66\n    let in29 = CE::<CI<29>> {}; // 0xc3a5e9c462a654779c3e050c9ca2a428908a81264e2b5a5bf22f67654883ae6\n    let in30 = CE::<\n        CI<30>,\n    > {}; // 0x2ce02aa5f9bf8cd65bdd2055c255cf9d9e08c1d9345582cc92fd973c74bd77f4\n    let in31 = CE::<\n        CI<31>,\n    > {}; // 0x17ded419ed7be4f97fac149bfaefbac11b155498de227b850aea3f23790405d6\n    let in32 = CE::<\n        CI<32>,\n    > {}; // 0x1bfe7b214c0294242fb81a8dccd8a9b4441d64f34150a79753fb0cd31cc99cc0\n    let in33 = CE::<CI<33>> {}; // 0x697b9c523e0390ed15da0ec97a9b8346513297b9efaf0f0f1a228f0d5662fbd\n    let in34 = CE::<CI<34>> {}; // 0x7a0e052f2b1c443b5186d6ac4c723b85d3f78a3182d2db0c413901c32b0c6fe\n    let in35 = CE::<\n        CI<35>,\n    > {}; // 0x1b76a37fba85f3cd5dc79824a3792597356c892c39c0d06b220500933945267f\n    let in36 = CE::<CI<36>> {}; // 0xabf8b60be77d7306cbeee33576139d7f03a5e397d439ec7694aa2bf4c0c101\n    let in37 = CE::<\n        CI<37>,\n    > {}; // 0x1c938b097fd2247905924b2691fb5e5685558c04009201927eeb0a69546f1fd1\n    let in38 = CE::<CI<38>> {}; // 0x4f1de41b3d1766fa9f30e6dec26094f0fdf31bf98ff2631380cab2baaa586de\n    let in39 = CE::<\n        CI<39>,\n    > {}; // 0x2429efd69b073ae23e8c6565b7b72e1b0e78c27f038f14e77cfd95a083f4c261\n    let in40 = CE::<\n        CI<40>,\n    > {}; // 0x28a411b634f09b8fb14b900e9507e9327600ecc7d8cf6ebab94d0cb3b2594c64\n    let in41 = CE::<\n        CI<41>,\n    > {}; // 0x23d5e999e1910a12feb0f6ef0cd21d04a44a9e08737f96e55fe3ed9d730c239f\n    let in42 = CE::<\n        CI<42>,\n    > {}; // 0x1465d351952f0c0588982b28b4a8aea95364059e272122f5e8257f43bbb36087\n    let in43 = CE::<\n        CI<43>,\n    > {}; // 0x16db366a59b1dd0b9fb1b2282a48633d3e2ddaea200280211f25041384282499\n    let in44 = CE::<\n        CI<44>,\n    > {}; // 0x28c36e1fee7fdbe60337d84bbcba34a53a41f1ee50449cdc780cfbfaa5cc3649\n\n    // INPUT stack\n    let (in45, in46, in47) = (CE::<CI<45>> {}, CE::<CI<46>> {}, CE::<CI<47>> {});\n    let (in48, in49, in50) = (CE::<CI<48>> {}, CE::<CI<49>> {}, CE::<CI<50>> {});\n    let (in51, in52, in53) = (CE::<CI<51>> {}, CE::<CI<52>> {}, CE::<CI<53>> {});\n    let (in54, in55, in56) = (CE::<CI<54>> {}, CE::<CI<55>> {}, CE::<CI<56>> {});\n    let (in57, in58, in59) = (CE::<CI<57>> {}, CE::<CI<58>> {}, CE::<CI<59>> {});\n    let (in60, in61, in62) = (CE::<CI<60>> {}, CE::<CI<61>> {}, CE::<CI<62>> {});\n    let (in63, in64, in65) = (CE::<CI<63>> {}, CE::<CI<64>> {}, CE::<CI<65>> {});\n    let (in66, in67, in68) = (CE::<CI<66>> {}, CE::<CI<67>> {}, CE::<CI<68>> {});\n    let (in69, in70, in71) = (CE::<CI<69>> {}, CE::<CI<70>> {}, CE::<CI<71>> {});\n    let (in72, in73, in74) = (CE::<CI<72>> {}, CE::<CI<73>> {}, CE::<CI<74>> {});\n    let (in75, in76, in77) = (CE::<CI<75>> {}, CE::<CI<76>> {}, CE::<CI<77>> {});\n    let (in78, in79, in80) = (CE::<CI<78>> {}, CE::<CI<79>> {}, CE::<CI<80>> {});\n    let (in81, in82, in83) = (CE::<CI<81>> {}, CE::<CI<82>> {}, CE::<CI<83>> {});\n    let (in84, in85, in86) = (CE::<CI<84>> {}, CE::<CI<85>> {}, CE::<CI<86>> {});\n    let in87 = CE::<CI<87>> {};\n    let t0 = circuit_mul(in57, in57); // Compute z^2\n    let t1 = circuit_mul(t0, in57); // Compute z^3\n    let t2 = circuit_mul(t1, in57); // Compute z^4\n    let t3 = circuit_mul(t2, in57); // Compute z^5\n    let t4 = circuit_mul(t3, in57); // Compute z^6\n    let t5 = circuit_mul(t4, in57); // Compute z^7\n    let t6 = circuit_mul(t5, in57); // Compute z^8\n    let t7 = circuit_mul(t6, in57); // Compute z^9\n    let t8 = circuit_mul(t7, in57); // Compute z^10\n    let t9 = circuit_mul(t8, in57); // Compute z^11\n    let t10 = circuit_mul(in46, in57); // Eval C step coeff_1 * z^1\n    let t11 = circuit_add(in45, t10); // Eval C step + (coeff_1 * z^1)\n    let t12 = circuit_mul(in47, t0); // Eval C step coeff_2 * z^2\n    let t13 = circuit_add(t11, t12); // Eval C step + (coeff_2 * z^2)\n    let t14 = circuit_mul(in48, t1); // Eval C step coeff_3 * z^3\n    let t15 = circuit_add(t13, t14); // Eval C step + (coeff_3 * z^3)\n    let t16 = circuit_mul(in49, t2); // Eval C step coeff_4 * z^4\n    let t17 = circuit_add(t15, t16); // Eval C step + (coeff_4 * z^4)\n    let t18 = circuit_mul(in50, t3); // Eval C step coeff_5 * z^5\n    let t19 = circuit_add(t17, t18); // Eval C step + (coeff_5 * z^5)\n    let t20 = circuit_mul(in51, t4); // Eval C step coeff_6 * z^6\n    let t21 = circuit_add(t19, t20); // Eval C step + (coeff_6 * z^6)\n    let t22 = circuit_mul(in52, t5); // Eval C step coeff_7 * z^7\n    let t23 = circuit_add(t21, t22); // Eval C step + (coeff_7 * z^7)\n    let t24 = circuit_mul(in53, t6); // Eval C step coeff_8 * z^8\n    let t25 = circuit_add(t23, t24); // Eval C step + (coeff_8 * z^8)\n    let t26 = circuit_mul(in54, t7); // Eval C step coeff_9 * z^9\n    let t27 = circuit_add(t25, t26); // Eval C step + (coeff_9 * z^9)\n    let t28 = circuit_mul(in55, t8); // Eval C step coeff_10 * z^10\n    let t29 = circuit_add(t27, t28); // Eval C step + (coeff_10 * z^10)\n    let t30 = circuit_mul(in56, t9); // Eval C step coeff_11 * z^11\n    let t31 = circuit_add(t29, t30); // Eval C step + (coeff_11 * z^11)\n    let t32 = circuit_mul(in59, t0); // Eval sparse poly W step coeff_2 * z^2\n    let t33 = circuit_add(in58, t32); // Eval sparse poly W step + coeff_2 * z^2\n    let t34 = circuit_mul(in60, t2); // Eval sparse poly W step coeff_4 * z^4\n    let t35 = circuit_add(t33, t34); // Eval sparse poly W step + coeff_4 * z^4\n    let t36 = circuit_mul(in61, t4); // Eval sparse poly W step coeff_6 * z^6\n    let t37 = circuit_add(t35, t36); // Eval sparse poly W step + coeff_6 * z^6\n    let t38 = circuit_mul(in62, t6); // Eval sparse poly W step coeff_8 * z^8\n    let t39 = circuit_add(t37, t38); // Eval sparse poly W step + coeff_8 * z^8\n    let t40 = circuit_mul(in63, t8); // Eval sparse poly W step coeff_10 * z^10\n    let t41 = circuit_add(t39, t40); // Eval sparse poly W step + coeff_10 * z^10\n    let t42 = circuit_mul(in65, in57); // Eval C_inv step coeff_1 * z^1\n    let t43 = circuit_add(in64, t42); // Eval C_inv step + (coeff_1 * z^1)\n    let t44 = circuit_mul(in66, t0); // Eval C_inv step coeff_2 * z^2\n    let t45 = circuit_add(t43, t44); // Eval C_inv step + (coeff_2 * z^2)\n    let t46 = circuit_mul(in67, t1); // Eval C_inv step coeff_3 * z^3\n    let t47 = circuit_add(t45, t46); // Eval C_inv step + (coeff_3 * z^3)\n    let t48 = circuit_mul(in68, t2); // Eval C_inv step coeff_4 * z^4\n    let t49 = circuit_add(t47, t48); // Eval C_inv step + (coeff_4 * z^4)\n    let t50 = circuit_mul(in69, t3); // Eval C_inv step coeff_5 * z^5\n    let t51 = circuit_add(t49, t50); // Eval C_inv step + (coeff_5 * z^5)\n    let t52 = circuit_mul(in70, t4); // Eval C_inv step coeff_6 * z^6\n    let t53 = circuit_add(t51, t52); // Eval C_inv step + (coeff_6 * z^6)\n    let t54 = circuit_mul(in71, t5); // Eval C_inv step coeff_7 * z^7\n    let t55 = circuit_add(t53, t54); // Eval C_inv step + (coeff_7 * z^7)\n    let t56 = circuit_mul(in72, t6); // Eval C_inv step coeff_8 * z^8\n    let t57 = circuit_add(t55, t56); // Eval C_inv step + (coeff_8 * z^8)\n    let t58 = circuit_mul(in73, t7); // Eval C_inv step coeff_9 * z^9\n    let t59 = circuit_add(t57, t58); // Eval C_inv step + (coeff_9 * z^9)\n    let t60 = circuit_mul(in74, t8); // Eval C_inv step coeff_10 * z^10\n    let t61 = circuit_add(t59, t60); // Eval C_inv step + (coeff_10 * z^10)\n    let t62 = circuit_mul(in75, t9); // Eval C_inv step coeff_11 * z^11\n    let t63 = circuit_add(t61, t62); // Eval C_inv step + (coeff_11 * z^11)\n    let t64 = circuit_mul(t31, t63);\n    let t65 = circuit_sub(t64, in0); // c_of_z * c_inv_of_z - 1\n    let t66 = circuit_mul(in70, in1);\n    let t67 = circuit_add(in64, t66);\n    let t68 = circuit_mul(in65, in2);\n    let t69 = circuit_mul(in71, in3);\n    let t70 = circuit_add(t68, t69);\n    let t71 = circuit_mul(in66, in4);\n    let t72 = circuit_mul(in72, in5);\n    let t73 = circuit_add(t71, t72);\n    let t74 = circuit_mul(in67, in6);\n    let t75 = circuit_mul(in73, in7);\n    let t76 = circuit_add(t74, t75);\n    let t77 = circuit_mul(in68, in8);\n    let t78 = circuit_mul(in74, in9);\n    let t79 = circuit_add(t77, t78);\n    let t80 = circuit_mul(in69, in10);\n    let t81 = circuit_mul(in75, in11);\n    let t82 = circuit_add(t80, t81);\n    let t83 = circuit_mul(in70, in12);\n    let t84 = circuit_mul(in65, in13);\n    let t85 = circuit_mul(in71, in14);\n    let t86 = circuit_add(t84, t85);\n    let t87 = circuit_mul(in66, in15);\n    let t88 = circuit_mul(in72, in16);\n    let t89 = circuit_add(t87, t88);\n    let t90 = circuit_mul(in67, in17);\n    let t91 = circuit_mul(in73, in18);\n    let t92 = circuit_add(t90, t91);\n    let t93 = circuit_mul(in68, in19);\n    let t94 = circuit_mul(in74, in20);\n    let t95 = circuit_add(t93, t94);\n    let t96 = circuit_mul(in69, in21);\n    let t97 = circuit_mul(in75, in22);\n    let t98 = circuit_add(t96, t97);\n    let t99 = circuit_mul(in46, in23);\n    let t100 = circuit_mul(in47, in24);\n    let t101 = circuit_mul(in48, in12);\n    let t102 = circuit_mul(in49, in25);\n    let t103 = circuit_mul(in50, in26);\n    let t104 = circuit_mul(in52, in23);\n    let t105 = circuit_mul(in53, in24);\n    let t106 = circuit_mul(in54, in12);\n    let t107 = circuit_mul(in55, in25);\n    let t108 = circuit_mul(in56, in26);\n    let t109 = circuit_mul(in70, in1);\n    let t110 = circuit_add(in64, t109);\n    let t111 = circuit_mul(in65, in27);\n    let t112 = circuit_mul(in71, in28);\n    let t113 = circuit_add(t111, t112);\n    let t114 = circuit_mul(in66, in29);\n    let t115 = circuit_mul(in72, in30);\n    let t116 = circuit_add(t114, t115);\n    let t117 = circuit_mul(in67, in18);\n    let t118 = circuit_mul(in73, in31);\n    let t119 = circuit_add(t117, t118);\n    let t120 = circuit_mul(in68, in32);\n    let t121 = circuit_mul(in74, in33);\n    let t122 = circuit_add(t120, t121);\n    let t123 = circuit_mul(in69, in34);\n    let t124 = circuit_mul(in75, in35);\n    let t125 = circuit_add(t123, t124);\n    let t126 = circuit_mul(in70, in12);\n    let t127 = circuit_mul(in65, in36);\n    let t128 = circuit_mul(in71, in37);\n    let t129 = circuit_add(t127, t128);\n    let t130 = circuit_mul(in66, in38);\n    let t131 = circuit_mul(in72, in39);\n    let t132 = circuit_add(t130, t131);\n    let t133 = circuit_mul(in67, in40);\n    let t134 = circuit_mul(in73, in6);\n    let t135 = circuit_add(t133, t134);\n    let t136 = circuit_mul(in68, in41);\n    let t137 = circuit_mul(in74, in42);\n    let t138 = circuit_add(t136, t137);\n    let t139 = circuit_mul(in69, in43);\n    let t140 = circuit_mul(in75, in44);\n    let t141 = circuit_add(t139, t140);\n    let t142 = circuit_mul(t70, in57); // Eval C_inv_frob_1 step coeff_1 * z^1\n    let t143 = circuit_add(t67, t142); // Eval C_inv_frob_1 step + (coeff_1 * z^1)\n    let t144 = circuit_mul(t73, t0); // Eval C_inv_frob_1 step coeff_2 * z^2\n    let t145 = circuit_add(t143, t144); // Eval C_inv_frob_1 step + (coeff_2 * z^2)\n    let t146 = circuit_mul(t76, t1); // Eval C_inv_frob_1 step coeff_3 * z^3\n    let t147 = circuit_add(t145, t146); // Eval C_inv_frob_1 step + (coeff_3 * z^3)\n    let t148 = circuit_mul(t79, t2); // Eval C_inv_frob_1 step coeff_4 * z^4\n    let t149 = circuit_add(t147, t148); // Eval C_inv_frob_1 step + (coeff_4 * z^4)\n    let t150 = circuit_mul(t82, t3); // Eval C_inv_frob_1 step coeff_5 * z^5\n    let t151 = circuit_add(t149, t150); // Eval C_inv_frob_1 step + (coeff_5 * z^5)\n    let t152 = circuit_mul(t83, t4); // Eval C_inv_frob_1 step coeff_6 * z^6\n    let t153 = circuit_add(t151, t152); // Eval C_inv_frob_1 step + (coeff_6 * z^6)\n    let t154 = circuit_mul(t86, t5); // Eval C_inv_frob_1 step coeff_7 * z^7\n    let t155 = circuit_add(t153, t154); // Eval C_inv_frob_1 step + (coeff_7 * z^7)\n    let t156 = circuit_mul(t89, t6); // Eval C_inv_frob_1 step coeff_8 * z^8\n    let t157 = circuit_add(t155, t156); // Eval C_inv_frob_1 step + (coeff_8 * z^8)\n    let t158 = circuit_mul(t92, t7); // Eval C_inv_frob_1 step coeff_9 * z^9\n    let t159 = circuit_add(t157, t158); // Eval C_inv_frob_1 step + (coeff_9 * z^9)\n    let t160 = circuit_mul(t95, t8); // Eval C_inv_frob_1 step coeff_10 * z^10\n    let t161 = circuit_add(t159, t160); // Eval C_inv_frob_1 step + (coeff_10 * z^10)\n    let t162 = circuit_mul(t98, t9); // Eval C_inv_frob_1 step coeff_11 * z^11\n    let t163 = circuit_add(t161, t162); // Eval C_inv_frob_1 step + (coeff_11 * z^11)\n    let t164 = circuit_mul(t99, in57); // Eval C_frob_2 step coeff_1 * z^1\n    let t165 = circuit_add(in45, t164); // Eval C_frob_2 step + (coeff_1 * z^1)\n    let t166 = circuit_mul(t100, t0); // Eval C_frob_2 step coeff_2 * z^2\n    let t167 = circuit_add(t165, t166); // Eval C_frob_2 step + (coeff_2 * z^2)\n    let t168 = circuit_mul(t101, t1); // Eval C_frob_2 step coeff_3 * z^3\n    let t169 = circuit_add(t167, t168); // Eval C_frob_2 step + (coeff_3 * z^3)\n    let t170 = circuit_mul(t102, t2); // Eval C_frob_2 step coeff_4 * z^4\n    let t171 = circuit_add(t169, t170); // Eval C_frob_2 step + (coeff_4 * z^4)\n    let t172 = circuit_mul(t103, t3); // Eval C_frob_2 step coeff_5 * z^5\n    let t173 = circuit_add(t171, t172); // Eval C_frob_2 step + (coeff_5 * z^5)\n    let t174 = circuit_mul(in51, t4); // Eval C_frob_2 step coeff_6 * z^6\n    let t175 = circuit_add(t173, t174); // Eval C_frob_2 step + (coeff_6 * z^6)\n    let t176 = circuit_mul(t104, t5); // Eval C_frob_2 step coeff_7 * z^7\n    let t177 = circuit_add(t175, t176); // Eval C_frob_2 step + (coeff_7 * z^7)\n    let t178 = circuit_mul(t105, t6); // Eval C_frob_2 step coeff_8 * z^8\n    let t179 = circuit_add(t177, t178); // Eval C_frob_2 step + (coeff_8 * z^8)\n    let t180 = circuit_mul(t106, t7); // Eval C_frob_2 step coeff_9 * z^9\n    let t181 = circuit_add(t179, t180); // Eval C_frob_2 step + (coeff_9 * z^9)\n    let t182 = circuit_mul(t107, t8); // Eval C_frob_2 step coeff_10 * z^10\n    let t183 = circuit_add(t181, t182); // Eval C_frob_2 step + (coeff_10 * z^10)\n    let t184 = circuit_mul(t108, t9); // Eval C_frob_2 step coeff_11 * z^11\n    let t185 = circuit_add(t183, t184); // Eval C_frob_2 step + (coeff_11 * z^11)\n    let t186 = circuit_mul(t113, in57); // Eval C_inv_frob_3 step coeff_1 * z^1\n    let t187 = circuit_add(t110, t186); // Eval C_inv_frob_3 step + (coeff_1 * z^1)\n    let t188 = circuit_mul(t116, t0); // Eval C_inv_frob_3 step coeff_2 * z^2\n    let t189 = circuit_add(t187, t188); // Eval C_inv_frob_3 step + (coeff_2 * z^2)\n    let t190 = circuit_mul(t119, t1); // Eval C_inv_frob_3 step coeff_3 * z^3\n    let t191 = circuit_add(t189, t190); // Eval C_inv_frob_3 step + (coeff_3 * z^3)\n    let t192 = circuit_mul(t122, t2); // Eval C_inv_frob_3 step coeff_4 * z^4\n    let t193 = circuit_add(t191, t192); // Eval C_inv_frob_3 step + (coeff_4 * z^4)\n    let t194 = circuit_mul(t125, t3); // Eval C_inv_frob_3 step coeff_5 * z^5\n    let t195 = circuit_add(t193, t194); // Eval C_inv_frob_3 step + (coeff_5 * z^5)\n    let t196 = circuit_mul(t126, t4); // Eval C_inv_frob_3 step coeff_6 * z^6\n    let t197 = circuit_add(t195, t196); // Eval C_inv_frob_3 step + (coeff_6 * z^6)\n    let t198 = circuit_mul(t129, t5); // Eval C_inv_frob_3 step coeff_7 * z^7\n    let t199 = circuit_add(t197, t198); // Eval C_inv_frob_3 step + (coeff_7 * z^7)\n    let t200 = circuit_mul(t132, t6); // Eval C_inv_frob_3 step coeff_8 * z^8\n    let t201 = circuit_add(t199, t200); // Eval C_inv_frob_3 step + (coeff_8 * z^8)\n    let t202 = circuit_mul(t135, t7); // Eval C_inv_frob_3 step coeff_9 * z^9\n    let t203 = circuit_add(t201, t202); // Eval C_inv_frob_3 step + (coeff_9 * z^9)\n    let t204 = circuit_mul(t138, t8); // Eval C_inv_frob_3 step coeff_10 * z^10\n    let t205 = circuit_add(t203, t204); // Eval C_inv_frob_3 step + (coeff_10 * z^10)\n    let t206 = circuit_mul(t141, t9); // Eval C_inv_frob_3 step coeff_11 * z^11\n    let t207 = circuit_add(t205, t206); // Eval C_inv_frob_3 step + (coeff_11 * z^11)\n    let t208 = circuit_mul(in77, in57); // Eval precomputed_miller_loop_result step coeff_1 * z^1\n    let t209 = circuit_add(\n        in76, t208,\n    ); // Eval precomputed_miller_loop_result step + (coeff_1 * z^1)\n    let t210 = circuit_mul(in78, t0); // Eval precomputed_miller_loop_result step coeff_2 * z^2\n    let t211 = circuit_add(\n        t209, t210,\n    ); // Eval precomputed_miller_loop_result step + (coeff_2 * z^2)\n    let t212 = circuit_mul(in79, t1); // Eval precomputed_miller_loop_result step coeff_3 * z^3\n    let t213 = circuit_add(\n        t211, t212,\n    ); // Eval precomputed_miller_loop_result step + (coeff_3 * z^3)\n    let t214 = circuit_mul(in80, t2); // Eval precomputed_miller_loop_result step coeff_4 * z^4\n    let t215 = circuit_add(\n        t213, t214,\n    ); // Eval precomputed_miller_loop_result step + (coeff_4 * z^4)\n    let t216 = circuit_mul(in81, t3); // Eval precomputed_miller_loop_result step coeff_5 * z^5\n    let t217 = circuit_add(\n        t215, t216,\n    ); // Eval precomputed_miller_loop_result step + (coeff_5 * z^5)\n    let t218 = circuit_mul(in82, t4); // Eval precomputed_miller_loop_result step coeff_6 * z^6\n    let t219 = circuit_add(\n        t217, t218,\n    ); // Eval precomputed_miller_loop_result step + (coeff_6 * z^6)\n    let t220 = circuit_mul(in83, t5); // Eval precomputed_miller_loop_result step coeff_7 * z^7\n    let t221 = circuit_add(\n        t219, t220,\n    ); // Eval precomputed_miller_loop_result step + (coeff_7 * z^7)\n    let t222 = circuit_mul(in84, t6); // Eval precomputed_miller_loop_result step coeff_8 * z^8\n    let t223 = circuit_add(\n        t221, t222,\n    ); // Eval precomputed_miller_loop_result step + (coeff_8 * z^8)\n    let t224 = circuit_mul(in85, t7); // Eval precomputed_miller_loop_result step coeff_9 * z^9\n    let t225 = circuit_add(\n        t223, t224,\n    ); // Eval precomputed_miller_loop_result step + (coeff_9 * z^9)\n    let t226 = circuit_mul(in86, t8); // Eval precomputed_miller_loop_result step coeff_10 * z^10\n    let t227 = circuit_add(\n        t225, t226,\n    ); // Eval precomputed_miller_loop_result step + (coeff_10 * z^10)\n    let t228 = circuit_mul(in87, t9); // Eval precomputed_miller_loop_result step coeff_11 * z^11\n    let t229 = circuit_add(\n        t227, t228,\n    ); // Eval precomputed_miller_loop_result step + (coeff_11 * z^11)\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t31, t41, t63, t65, t163, t185, t207, t229).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(INITIALIZE_MPCHECK_EXT_MLR_BN254_CONSTANTS.span()); // in0 - in44\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w0); // in45\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w1); // in46\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w2); // in47\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w3); // in48\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w4); // in49\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w5); // in50\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w6); // in51\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w7); // in52\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w8); // in53\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w9); // in54\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w10); // in55\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w11); // in56\n    circuit_inputs = circuit_inputs.next_2(z); // in57\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w0); // in58\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w2); // in59\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w4); // in60\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w6); // in61\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w8); // in62\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w10); // in63\n    circuit_inputs = circuit_inputs.next_2(c_inv.w0); // in64\n    circuit_inputs = circuit_inputs.next_2(c_inv.w1); // in65\n    circuit_inputs = circuit_inputs.next_2(c_inv.w2); // in66\n    circuit_inputs = circuit_inputs.next_2(c_inv.w3); // in67\n    circuit_inputs = circuit_inputs.next_2(c_inv.w4); // in68\n    circuit_inputs = circuit_inputs.next_2(c_inv.w5); // in69\n    circuit_inputs = circuit_inputs.next_2(c_inv.w6); // in70\n    circuit_inputs = circuit_inputs.next_2(c_inv.w7); // in71\n    circuit_inputs = circuit_inputs.next_2(c_inv.w8); // in72\n    circuit_inputs = circuit_inputs.next_2(c_inv.w9); // in73\n    circuit_inputs = circuit_inputs.next_2(c_inv.w10); // in74\n    circuit_inputs = circuit_inputs.next_2(c_inv.w11); // in75\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w0); // in76\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w1); // in77\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w2); // in78\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w3); // in79\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w4); // in80\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w5); // in81\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w6); // in82\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w7); // in83\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w8); // in84\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w9); // in85\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w10); // in86\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result.w11); // in87\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let c_of_z: u384 = outputs.get_output(t31);\n    let scaling_factor_of_z: u384 = outputs.get_output(t41);\n    let c_inv_of_z: u384 = outputs.get_output(t63);\n    let lhs: u384 = outputs.get_output(t65);\n    let c_inv_frob_1_of_z: u384 = outputs.get_output(t163);\n    let c_frob_2_of_z: u384 = outputs.get_output(t185);\n    let c_inv_frob_3_of_z: u384 = outputs.get_output(t207);\n    let precomputed_miller_loop_result_of_z: u384 = outputs.get_output(t229);\n    return (\n        c_of_z,\n        scaling_factor_of_z,\n        c_inv_of_z,\n        lhs,\n        c_inv_frob_1_of_z,\n        c_frob_2_of_z,\n        c_inv_frob_3_of_z,\n        precomputed_miller_loop_result_of_z,\n    );\n}\nconst INITIALIZE_MPCHECK_EXT_MLR_BN254_CONSTANTS: [u384; 45] = [\n    u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x12, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0xfde6a43f5daa971f3fa65955,\n        limb1: 0x1b2522ec5eb28ded6895e1cd,\n        limb2: 0x1d8c8daef3eee1e8,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x42b29c567e9c385ce480a71a,\n        limb1: 0x4e34e2ac06ead4000d14d1e2,\n        limb2: 0x217e400dc9351e77,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfd28d102c0d147b2f4d521a7,\n        limb1: 0x8481d22c6934ce844d72f250,\n        limb2: 0x242b719062f6737b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x43ac198484b8d9094aa82536,\n        limb1: 0x1b9c22d81246ffc2e794e176,\n        limb2: 0x359809094bd5c8e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6df7b44cbb259ef7cb58d5ed,\n        limb1: 0xdd4ef1e69a0c1f0dd2949fa,\n        limb2: 0x21436d48fcb50cc6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8a4f4f0831364cf35f78f771,\n        limb1: 0x38a4311a86919d9c7c6c15f8,\n        limb2: 0x18857a58f3b5bb30,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6fc008e7d6998c82f7fc048b,\n        limb1: 0x62b7adefd44038ab3c0bbad9,\n        limb2: 0x2c84bbad27c36715,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa8697e0c9c36d8ca3339a7b5,\n        limb1: 0x6d1eab6fcd18b99ad4afd096,\n        limb2: 0xc33b1c70e4fd11b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5371c546d428780a6e3dcfa8,\n        limb1: 0x13fe08bea73305ff6bdac77c,\n        limb2: 0x1b007294a55accce,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4f501fe811493d72543a3977,\n        limb1: 0xefe88dd8e6965b3adae92c97,\n        limb2: 0x215d42e7ac7bd17c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6871ca8d3c208c16d87cfd46,\n        limb1: 0xb85045b68181585d97816a91,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8eeec7e5ca5cf05f80f362ac,\n        limb1: 0xa6327cfe12150b8e74799277,\n        limb2: 0x246996f3b4fae7e6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6a8b264dde75f4f798d6a3f2,\n        limb1: 0x9d2b22ca22ceca702eeb88c3,\n        limb2: 0x12d7c0c3ed42be41,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb7c9dce1665d51c640fcba2,\n        limb1: 0x4ba4cc8bd75a079432ae2a1d,\n        limb2: 0x16c9e55061ebae20,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6b48f98a7b4f4463e3a7dba0,\n        limb1: 0x33ce738a184c89d94a0e7840,\n        limb2: 0xc38dce27e3b2cae,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8fa25bd282d37f632623b0e3,\n        limb1: 0x704b5a7ec796f2b21807dc9,\n        limb2: 0x7c03cbcac41049a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfa7a164080faed1f0d24275a,\n        limb1: 0xaa7b569817e0966cba582096,\n        limb2: 0xf20e129e47c9363,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x1bdec763c13b4711cd2b8126,\n        limb1: 0x9f3a80b03b0b1c923685d2ea,\n        limb2: 0x2c145edbe7fd8aee,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf8b1c1a56586ff93e080f8bc,\n        limb1: 0x559897c6ad411fb25b75afb7,\n        limb2: 0x3df92c5b96e3914,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x678e2ac024c6b8ee6e0c2c4b,\n        limb1: 0xa27fb246c7729f7db080cb99,\n        limb2: 0x12acf2ca76fd0675,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x1500054667f8140c6a3f2d9f,\n        limb1: 0xa4523cf7da4e525e2ba6a315,\n        limb2: 0x1563dbde3bd6d35b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbb966e3de4bd44e5607cfd49,\n        limb1: 0x5e6dd9e7e0acccb0c28f069f,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbb966e3de4bd44e5607cfd48,\n        limb1: 0x5e6dd9e7e0acccb0c28f069f,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xacdb5c4f5763473177fffffe,\n        limb1: 0x59e26bcea0d48bacd4f263f1,\n        limb2: 0x0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xacdb5c4f5763473177ffffff,\n        limb1: 0x59e26bcea0d48bacd4f263f1,\n        limb2: 0x0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x67dfc8fabd3581ad840ddd76,\n        limb1: 0xb2bdfa8fef85fa07122bde8d,\n        limb2: 0x13d0c369615f7bb0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xac285af5685d3f90eacf7a66,\n        limb1: 0xfc2bf531eb331a053a35744c,\n        limb2: 0x18a0f4219f4fdff6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x64e2b5a5bf22f67654883ae6,\n        limb1: 0x79c3e050c9ca2a428908a812,\n        limb2: 0xc3a5e9c462a6547,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x345582cc92fd973c74bd77f4,\n        limb1: 0x5bdd2055c255cf9d9e08c1d9,\n        limb2: 0x2ce02aa5f9bf8cd6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xde227b850aea3f23790405d6,\n        limb1: 0x7fac149bfaefbac11b155498,\n        limb2: 0x17ded419ed7be4f9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4150a79753fb0cd31cc99cc0,\n        limb1: 0x2fb81a8dccd8a9b4441d64f3,\n        limb2: 0x1bfe7b214c029424,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9efaf0f0f1a228f0d5662fbd,\n        limb1: 0xd15da0ec97a9b8346513297b,\n        limb2: 0x697b9c523e0390e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x182d2db0c413901c32b0c6fe,\n        limb1: 0xb5186d6ac4c723b85d3f78a3,\n        limb2: 0x7a0e052f2b1c443,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x39c0d06b220500933945267f,\n        limb1: 0x5dc79824a3792597356c892c,\n        limb2: 0x1b76a37fba85f3cd,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x97d439ec7694aa2bf4c0c101,\n        limb1: 0x6cbeee33576139d7f03a5e3,\n        limb2: 0xabf8b60be77d73,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9201927eeb0a69546f1fd1,\n        limb1: 0x5924b2691fb5e5685558c04,\n        limb2: 0x1c938b097fd22479,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x98ff2631380cab2baaa586de,\n        limb1: 0xa9f30e6dec26094f0fdf31bf,\n        limb2: 0x4f1de41b3d1766f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x38f14e77cfd95a083f4c261,\n        limb1: 0x3e8c6565b7b72e1b0e78c27f,\n        limb2: 0x2429efd69b073ae2,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd8cf6ebab94d0cb3b2594c64,\n        limb1: 0xb14b900e9507e9327600ecc7,\n        limb2: 0x28a411b634f09b8f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x737f96e55fe3ed9d730c239f,\n        limb1: 0xfeb0f6ef0cd21d04a44a9e08,\n        limb2: 0x23d5e999e1910a12,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x272122f5e8257f43bbb36087,\n        limb1: 0x88982b28b4a8aea95364059e,\n        limb2: 0x1465d351952f0c05,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x200280211f25041384282499,\n        limb1: 0x9fb1b2282a48633d3e2ddaea,\n        limb2: 0x16db366a59b1dd0b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x50449cdc780cfbfaa5cc3649,\n        limb1: 0x337d84bbcba34a53a41f1ee,\n        limb2: 0x28c36e1fee7fdbe6,\n        limb3: 0x0,\n    },\n];\n#[inline(always)]\npub fn run_BN254_INITIALIZE_MPCHECK_circuit(\n    lambda_root: E12D<u288>,\n    z: u384,\n    scaling_factor: MillerLoopResultScalingFactor<u288>,\n    c_inv: E12D<u288>,\n) -> (u384, u384, u384, u384, u384, u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x1\n    let in1 = CE::<CI<1>> {}; // 0x12\n    let in2 = CE::<CI<2>> {}; // 0x1d8c8daef3eee1e81b2522ec5eb28ded6895e1cdfde6a43f5daa971f3fa65955\n    let in3 = CE::<CI<3>> {}; // 0x217e400dc9351e774e34e2ac06ead4000d14d1e242b29c567e9c385ce480a71a\n    let in4 = CE::<CI<4>> {}; // 0x242b719062f6737b8481d22c6934ce844d72f250fd28d102c0d147b2f4d521a7\n    let in5 = CE::<CI<5>> {}; // 0x359809094bd5c8e1b9c22d81246ffc2e794e17643ac198484b8d9094aa82536\n    let in6 = CE::<CI<6>> {}; // 0x21436d48fcb50cc60dd4ef1e69a0c1f0dd2949fa6df7b44cbb259ef7cb58d5ed\n    let in7 = CE::<CI<7>> {}; // 0x18857a58f3b5bb3038a4311a86919d9c7c6c15f88a4f4f0831364cf35f78f771\n    let in8 = CE::<CI<8>> {}; // 0x2c84bbad27c3671562b7adefd44038ab3c0bbad96fc008e7d6998c82f7fc048b\n    let in9 = CE::<CI<9>> {}; // 0xc33b1c70e4fd11b6d1eab6fcd18b99ad4afd096a8697e0c9c36d8ca3339a7b5\n    let in10 = CE::<\n        CI<10>,\n    > {}; // 0x1b007294a55accce13fe08bea73305ff6bdac77c5371c546d428780a6e3dcfa8\n    let in11 = CE::<\n        CI<11>,\n    > {}; // 0x215d42e7ac7bd17cefe88dd8e6965b3adae92c974f501fe811493d72543a3977\n    let in12 = CE::<CI<12>> {}; // -0x1 % p\n    let in13 = CE::<\n        CI<13>,\n    > {}; // 0x246996f3b4fae7e6a6327cfe12150b8e747992778eeec7e5ca5cf05f80f362ac\n    let in14 = CE::<\n        CI<14>,\n    > {}; // 0x12d7c0c3ed42be419d2b22ca22ceca702eeb88c36a8b264dde75f4f798d6a3f2\n    let in15 = CE::<\n        CI<15>,\n    > {}; // 0x16c9e55061ebae204ba4cc8bd75a079432ae2a1d0b7c9dce1665d51c640fcba2\n    let in16 = CE::<CI<16>> {}; // 0xc38dce27e3b2cae33ce738a184c89d94a0e78406b48f98a7b4f4463e3a7dba0\n    let in17 = CE::<CI<17>> {}; // 0x7c03cbcac41049a0704b5a7ec796f2b21807dc98fa25bd282d37f632623b0e3\n    let in18 = CE::<CI<18>> {}; // 0xf20e129e47c9363aa7b569817e0966cba582096fa7a164080faed1f0d24275a\n    let in19 = CE::<\n        CI<19>,\n    > {}; // 0x2c145edbe7fd8aee9f3a80b03b0b1c923685d2ea1bdec763c13b4711cd2b8126\n    let in20 = CE::<CI<20>> {}; // 0x3df92c5b96e3914559897c6ad411fb25b75afb7f8b1c1a56586ff93e080f8bc\n    let in21 = CE::<\n        CI<21>,\n    > {}; // 0x12acf2ca76fd0675a27fb246c7729f7db080cb99678e2ac024c6b8ee6e0c2c4b\n    let in22 = CE::<\n        CI<22>,\n    > {}; // 0x1563dbde3bd6d35ba4523cf7da4e525e2ba6a3151500054667f8140c6a3f2d9f\n    let in23 = CE::<\n        CI<23>,\n    > {}; // 0x30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd49\n    let in24 = CE::<\n        CI<24>,\n    > {}; // 0x30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd48\n    let in25 = CE::<CI<25>> {}; // 0x59e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe\n    let in26 = CE::<CI<26>> {}; // 0x59e26bcea0d48bacd4f263f1acdb5c4f5763473177ffffff\n    let in27 = CE::<\n        CI<27>,\n    > {}; // 0x13d0c369615f7bb0b2bdfa8fef85fa07122bde8d67dfc8fabd3581ad840ddd76\n    let in28 = CE::<\n        CI<28>,\n    > {}; // 0x18a0f4219f4fdff6fc2bf531eb331a053a35744cac285af5685d3f90eacf7a66\n    let in29 = CE::<CI<29>> {}; // 0xc3a5e9c462a654779c3e050c9ca2a428908a81264e2b5a5bf22f67654883ae6\n    let in30 = CE::<\n        CI<30>,\n    > {}; // 0x2ce02aa5f9bf8cd65bdd2055c255cf9d9e08c1d9345582cc92fd973c74bd77f4\n    let in31 = CE::<\n        CI<31>,\n    > {}; // 0x17ded419ed7be4f97fac149bfaefbac11b155498de227b850aea3f23790405d6\n    let in32 = CE::<\n        CI<32>,\n    > {}; // 0x1bfe7b214c0294242fb81a8dccd8a9b4441d64f34150a79753fb0cd31cc99cc0\n    let in33 = CE::<CI<33>> {}; // 0x697b9c523e0390ed15da0ec97a9b8346513297b9efaf0f0f1a228f0d5662fbd\n    let in34 = CE::<CI<34>> {}; // 0x7a0e052f2b1c443b5186d6ac4c723b85d3f78a3182d2db0c413901c32b0c6fe\n    let in35 = CE::<\n        CI<35>,\n    > {}; // 0x1b76a37fba85f3cd5dc79824a3792597356c892c39c0d06b220500933945267f\n    let in36 = CE::<CI<36>> {}; // 0xabf8b60be77d7306cbeee33576139d7f03a5e397d439ec7694aa2bf4c0c101\n    let in37 = CE::<\n        CI<37>,\n    > {}; // 0x1c938b097fd2247905924b2691fb5e5685558c04009201927eeb0a69546f1fd1\n    let in38 = CE::<CI<38>> {}; // 0x4f1de41b3d1766fa9f30e6dec26094f0fdf31bf98ff2631380cab2baaa586de\n    let in39 = CE::<\n        CI<39>,\n    > {}; // 0x2429efd69b073ae23e8c6565b7b72e1b0e78c27f038f14e77cfd95a083f4c261\n    let in40 = CE::<\n        CI<40>,\n    > {}; // 0x28a411b634f09b8fb14b900e9507e9327600ecc7d8cf6ebab94d0cb3b2594c64\n    let in41 = CE::<\n        CI<41>,\n    > {}; // 0x23d5e999e1910a12feb0f6ef0cd21d04a44a9e08737f96e55fe3ed9d730c239f\n    let in42 = CE::<\n        CI<42>,\n    > {}; // 0x1465d351952f0c0588982b28b4a8aea95364059e272122f5e8257f43bbb36087\n    let in43 = CE::<\n        CI<43>,\n    > {}; // 0x16db366a59b1dd0b9fb1b2282a48633d3e2ddaea200280211f25041384282499\n    let in44 = CE::<\n        CI<44>,\n    > {}; // 0x28c36e1fee7fdbe60337d84bbcba34a53a41f1ee50449cdc780cfbfaa5cc3649\n\n    // INPUT stack\n    let (in45, in46, in47) = (CE::<CI<45>> {}, CE::<CI<46>> {}, CE::<CI<47>> {});\n    let (in48, in49, in50) = (CE::<CI<48>> {}, CE::<CI<49>> {}, CE::<CI<50>> {});\n    let (in51, in52, in53) = (CE::<CI<51>> {}, CE::<CI<52>> {}, CE::<CI<53>> {});\n    let (in54, in55, in56) = (CE::<CI<54>> {}, CE::<CI<55>> {}, CE::<CI<56>> {});\n    let (in57, in58, in59) = (CE::<CI<57>> {}, CE::<CI<58>> {}, CE::<CI<59>> {});\n    let (in60, in61, in62) = (CE::<CI<60>> {}, CE::<CI<61>> {}, CE::<CI<62>> {});\n    let (in63, in64, in65) = (CE::<CI<63>> {}, CE::<CI<64>> {}, CE::<CI<65>> {});\n    let (in66, in67, in68) = (CE::<CI<66>> {}, CE::<CI<67>> {}, CE::<CI<68>> {});\n    let (in69, in70, in71) = (CE::<CI<69>> {}, CE::<CI<70>> {}, CE::<CI<71>> {});\n    let (in72, in73, in74) = (CE::<CI<72>> {}, CE::<CI<73>> {}, CE::<CI<74>> {});\n    let in75 = CE::<CI<75>> {};\n    let t0 = circuit_mul(in57, in57); // Compute z^2\n    let t1 = circuit_mul(t0, in57); // Compute z^3\n    let t2 = circuit_mul(t1, in57); // Compute z^4\n    let t3 = circuit_mul(t2, in57); // Compute z^5\n    let t4 = circuit_mul(t3, in57); // Compute z^6\n    let t5 = circuit_mul(t4, in57); // Compute z^7\n    let t6 = circuit_mul(t5, in57); // Compute z^8\n    let t7 = circuit_mul(t6, in57); // Compute z^9\n    let t8 = circuit_mul(t7, in57); // Compute z^10\n    let t9 = circuit_mul(t8, in57); // Compute z^11\n    let t10 = circuit_mul(in46, in57); // Eval C step coeff_1 * z^1\n    let t11 = circuit_add(in45, t10); // Eval C step + (coeff_1 * z^1)\n    let t12 = circuit_mul(in47, t0); // Eval C step coeff_2 * z^2\n    let t13 = circuit_add(t11, t12); // Eval C step + (coeff_2 * z^2)\n    let t14 = circuit_mul(in48, t1); // Eval C step coeff_3 * z^3\n    let t15 = circuit_add(t13, t14); // Eval C step + (coeff_3 * z^3)\n    let t16 = circuit_mul(in49, t2); // Eval C step coeff_4 * z^4\n    let t17 = circuit_add(t15, t16); // Eval C step + (coeff_4 * z^4)\n    let t18 = circuit_mul(in50, t3); // Eval C step coeff_5 * z^5\n    let t19 = circuit_add(t17, t18); // Eval C step + (coeff_5 * z^5)\n    let t20 = circuit_mul(in51, t4); // Eval C step coeff_6 * z^6\n    let t21 = circuit_add(t19, t20); // Eval C step + (coeff_6 * z^6)\n    let t22 = circuit_mul(in52, t5); // Eval C step coeff_7 * z^7\n    let t23 = circuit_add(t21, t22); // Eval C step + (coeff_7 * z^7)\n    let t24 = circuit_mul(in53, t6); // Eval C step coeff_8 * z^8\n    let t25 = circuit_add(t23, t24); // Eval C step + (coeff_8 * z^8)\n    let t26 = circuit_mul(in54, t7); // Eval C step coeff_9 * z^9\n    let t27 = circuit_add(t25, t26); // Eval C step + (coeff_9 * z^9)\n    let t28 = circuit_mul(in55, t8); // Eval C step coeff_10 * z^10\n    let t29 = circuit_add(t27, t28); // Eval C step + (coeff_10 * z^10)\n    let t30 = circuit_mul(in56, t9); // Eval C step coeff_11 * z^11\n    let t31 = circuit_add(t29, t30); // Eval C step + (coeff_11 * z^11)\n    let t32 = circuit_mul(in59, t0); // Eval sparse poly W step coeff_2 * z^2\n    let t33 = circuit_add(in58, t32); // Eval sparse poly W step + coeff_2 * z^2\n    let t34 = circuit_mul(in60, t2); // Eval sparse poly W step coeff_4 * z^4\n    let t35 = circuit_add(t33, t34); // Eval sparse poly W step + coeff_4 * z^4\n    let t36 = circuit_mul(in61, t4); // Eval sparse poly W step coeff_6 * z^6\n    let t37 = circuit_add(t35, t36); // Eval sparse poly W step + coeff_6 * z^6\n    let t38 = circuit_mul(in62, t6); // Eval sparse poly W step coeff_8 * z^8\n    let t39 = circuit_add(t37, t38); // Eval sparse poly W step + coeff_8 * z^8\n    let t40 = circuit_mul(in63, t8); // Eval sparse poly W step coeff_10 * z^10\n    let t41 = circuit_add(t39, t40); // Eval sparse poly W step + coeff_10 * z^10\n    let t42 = circuit_mul(in65, in57); // Eval C_inv step coeff_1 * z^1\n    let t43 = circuit_add(in64, t42); // Eval C_inv step + (coeff_1 * z^1)\n    let t44 = circuit_mul(in66, t0); // Eval C_inv step coeff_2 * z^2\n    let t45 = circuit_add(t43, t44); // Eval C_inv step + (coeff_2 * z^2)\n    let t46 = circuit_mul(in67, t1); // Eval C_inv step coeff_3 * z^3\n    let t47 = circuit_add(t45, t46); // Eval C_inv step + (coeff_3 * z^3)\n    let t48 = circuit_mul(in68, t2); // Eval C_inv step coeff_4 * z^4\n    let t49 = circuit_add(t47, t48); // Eval C_inv step + (coeff_4 * z^4)\n    let t50 = circuit_mul(in69, t3); // Eval C_inv step coeff_5 * z^5\n    let t51 = circuit_add(t49, t50); // Eval C_inv step + (coeff_5 * z^5)\n    let t52 = circuit_mul(in70, t4); // Eval C_inv step coeff_6 * z^6\n    let t53 = circuit_add(t51, t52); // Eval C_inv step + (coeff_6 * z^6)\n    let t54 = circuit_mul(in71, t5); // Eval C_inv step coeff_7 * z^7\n    let t55 = circuit_add(t53, t54); // Eval C_inv step + (coeff_7 * z^7)\n    let t56 = circuit_mul(in72, t6); // Eval C_inv step coeff_8 * z^8\n    let t57 = circuit_add(t55, t56); // Eval C_inv step + (coeff_8 * z^8)\n    let t58 = circuit_mul(in73, t7); // Eval C_inv step coeff_9 * z^9\n    let t59 = circuit_add(t57, t58); // Eval C_inv step + (coeff_9 * z^9)\n    let t60 = circuit_mul(in74, t8); // Eval C_inv step coeff_10 * z^10\n    let t61 = circuit_add(t59, t60); // Eval C_inv step + (coeff_10 * z^10)\n    let t62 = circuit_mul(in75, t9); // Eval C_inv step coeff_11 * z^11\n    let t63 = circuit_add(t61, t62); // Eval C_inv step + (coeff_11 * z^11)\n    let t64 = circuit_mul(t31, t63);\n    let t65 = circuit_sub(t64, in0); // c_of_z * c_inv_of_z - 1\n    let t66 = circuit_mul(in70, in1);\n    let t67 = circuit_add(in64, t66);\n    let t68 = circuit_mul(in65, in2);\n    let t69 = circuit_mul(in71, in3);\n    let t70 = circuit_add(t68, t69);\n    let t71 = circuit_mul(in66, in4);\n    let t72 = circuit_mul(in72, in5);\n    let t73 = circuit_add(t71, t72);\n    let t74 = circuit_mul(in67, in6);\n    let t75 = circuit_mul(in73, in7);\n    let t76 = circuit_add(t74, t75);\n    let t77 = circuit_mul(in68, in8);\n    let t78 = circuit_mul(in74, in9);\n    let t79 = circuit_add(t77, t78);\n    let t80 = circuit_mul(in69, in10);\n    let t81 = circuit_mul(in75, in11);\n    let t82 = circuit_add(t80, t81);\n    let t83 = circuit_mul(in70, in12);\n    let t84 = circuit_mul(in65, in13);\n    let t85 = circuit_mul(in71, in14);\n    let t86 = circuit_add(t84, t85);\n    let t87 = circuit_mul(in66, in15);\n    let t88 = circuit_mul(in72, in16);\n    let t89 = circuit_add(t87, t88);\n    let t90 = circuit_mul(in67, in17);\n    let t91 = circuit_mul(in73, in18);\n    let t92 = circuit_add(t90, t91);\n    let t93 = circuit_mul(in68, in19);\n    let t94 = circuit_mul(in74, in20);\n    let t95 = circuit_add(t93, t94);\n    let t96 = circuit_mul(in69, in21);\n    let t97 = circuit_mul(in75, in22);\n    let t98 = circuit_add(t96, t97);\n    let t99 = circuit_mul(in46, in23);\n    let t100 = circuit_mul(in47, in24);\n    let t101 = circuit_mul(in48, in12);\n    let t102 = circuit_mul(in49, in25);\n    let t103 = circuit_mul(in50, in26);\n    let t104 = circuit_mul(in52, in23);\n    let t105 = circuit_mul(in53, in24);\n    let t106 = circuit_mul(in54, in12);\n    let t107 = circuit_mul(in55, in25);\n    let t108 = circuit_mul(in56, in26);\n    let t109 = circuit_mul(in70, in1);\n    let t110 = circuit_add(in64, t109);\n    let t111 = circuit_mul(in65, in27);\n    let t112 = circuit_mul(in71, in28);\n    let t113 = circuit_add(t111, t112);\n    let t114 = circuit_mul(in66, in29);\n    let t115 = circuit_mul(in72, in30);\n    let t116 = circuit_add(t114, t115);\n    let t117 = circuit_mul(in67, in18);\n    let t118 = circuit_mul(in73, in31);\n    let t119 = circuit_add(t117, t118);\n    let t120 = circuit_mul(in68, in32);\n    let t121 = circuit_mul(in74, in33);\n    let t122 = circuit_add(t120, t121);\n    let t123 = circuit_mul(in69, in34);\n    let t124 = circuit_mul(in75, in35);\n    let t125 = circuit_add(t123, t124);\n    let t126 = circuit_mul(in70, in12);\n    let t127 = circuit_mul(in65, in36);\n    let t128 = circuit_mul(in71, in37);\n    let t129 = circuit_add(t127, t128);\n    let t130 = circuit_mul(in66, in38);\n    let t131 = circuit_mul(in72, in39);\n    let t132 = circuit_add(t130, t131);\n    let t133 = circuit_mul(in67, in40);\n    let t134 = circuit_mul(in73, in6);\n    let t135 = circuit_add(t133, t134);\n    let t136 = circuit_mul(in68, in41);\n    let t137 = circuit_mul(in74, in42);\n    let t138 = circuit_add(t136, t137);\n    let t139 = circuit_mul(in69, in43);\n    let t140 = circuit_mul(in75, in44);\n    let t141 = circuit_add(t139, t140);\n    let t142 = circuit_mul(t70, in57); // Eval C_inv_frob_1 step coeff_1 * z^1\n    let t143 = circuit_add(t67, t142); // Eval C_inv_frob_1 step + (coeff_1 * z^1)\n    let t144 = circuit_mul(t73, t0); // Eval C_inv_frob_1 step coeff_2 * z^2\n    let t145 = circuit_add(t143, t144); // Eval C_inv_frob_1 step + (coeff_2 * z^2)\n    let t146 = circuit_mul(t76, t1); // Eval C_inv_frob_1 step coeff_3 * z^3\n    let t147 = circuit_add(t145, t146); // Eval C_inv_frob_1 step + (coeff_3 * z^3)\n    let t148 = circuit_mul(t79, t2); // Eval C_inv_frob_1 step coeff_4 * z^4\n    let t149 = circuit_add(t147, t148); // Eval C_inv_frob_1 step + (coeff_4 * z^4)\n    let t150 = circuit_mul(t82, t3); // Eval C_inv_frob_1 step coeff_5 * z^5\n    let t151 = circuit_add(t149, t150); // Eval C_inv_frob_1 step + (coeff_5 * z^5)\n    let t152 = circuit_mul(t83, t4); // Eval C_inv_frob_1 step coeff_6 * z^6\n    let t153 = circuit_add(t151, t152); // Eval C_inv_frob_1 step + (coeff_6 * z^6)\n    let t154 = circuit_mul(t86, t5); // Eval C_inv_frob_1 step coeff_7 * z^7\n    let t155 = circuit_add(t153, t154); // Eval C_inv_frob_1 step + (coeff_7 * z^7)\n    let t156 = circuit_mul(t89, t6); // Eval C_inv_frob_1 step coeff_8 * z^8\n    let t157 = circuit_add(t155, t156); // Eval C_inv_frob_1 step + (coeff_8 * z^8)\n    let t158 = circuit_mul(t92, t7); // Eval C_inv_frob_1 step coeff_9 * z^9\n    let t159 = circuit_add(t157, t158); // Eval C_inv_frob_1 step + (coeff_9 * z^9)\n    let t160 = circuit_mul(t95, t8); // Eval C_inv_frob_1 step coeff_10 * z^10\n    let t161 = circuit_add(t159, t160); // Eval C_inv_frob_1 step + (coeff_10 * z^10)\n    let t162 = circuit_mul(t98, t9); // Eval C_inv_frob_1 step coeff_11 * z^11\n    let t163 = circuit_add(t161, t162); // Eval C_inv_frob_1 step + (coeff_11 * z^11)\n    let t164 = circuit_mul(t99, in57); // Eval C_frob_2 step coeff_1 * z^1\n    let t165 = circuit_add(in45, t164); // Eval C_frob_2 step + (coeff_1 * z^1)\n    let t166 = circuit_mul(t100, t0); // Eval C_frob_2 step coeff_2 * z^2\n    let t167 = circuit_add(t165, t166); // Eval C_frob_2 step + (coeff_2 * z^2)\n    let t168 = circuit_mul(t101, t1); // Eval C_frob_2 step coeff_3 * z^3\n    let t169 = circuit_add(t167, t168); // Eval C_frob_2 step + (coeff_3 * z^3)\n    let t170 = circuit_mul(t102, t2); // Eval C_frob_2 step coeff_4 * z^4\n    let t171 = circuit_add(t169, t170); // Eval C_frob_2 step + (coeff_4 * z^4)\n    let t172 = circuit_mul(t103, t3); // Eval C_frob_2 step coeff_5 * z^5\n    let t173 = circuit_add(t171, t172); // Eval C_frob_2 step + (coeff_5 * z^5)\n    let t174 = circuit_mul(in51, t4); // Eval C_frob_2 step coeff_6 * z^6\n    let t175 = circuit_add(t173, t174); // Eval C_frob_2 step + (coeff_6 * z^6)\n    let t176 = circuit_mul(t104, t5); // Eval C_frob_2 step coeff_7 * z^7\n    let t177 = circuit_add(t175, t176); // Eval C_frob_2 step + (coeff_7 * z^7)\n    let t178 = circuit_mul(t105, t6); // Eval C_frob_2 step coeff_8 * z^8\n    let t179 = circuit_add(t177, t178); // Eval C_frob_2 step + (coeff_8 * z^8)\n    let t180 = circuit_mul(t106, t7); // Eval C_frob_2 step coeff_9 * z^9\n    let t181 = circuit_add(t179, t180); // Eval C_frob_2 step + (coeff_9 * z^9)\n    let t182 = circuit_mul(t107, t8); // Eval C_frob_2 step coeff_10 * z^10\n    let t183 = circuit_add(t181, t182); // Eval C_frob_2 step + (coeff_10 * z^10)\n    let t184 = circuit_mul(t108, t9); // Eval C_frob_2 step coeff_11 * z^11\n    let t185 = circuit_add(t183, t184); // Eval C_frob_2 step + (coeff_11 * z^11)\n    let t186 = circuit_mul(t113, in57); // Eval C_inv_frob_3 step coeff_1 * z^1\n    let t187 = circuit_add(t110, t186); // Eval C_inv_frob_3 step + (coeff_1 * z^1)\n    let t188 = circuit_mul(t116, t0); // Eval C_inv_frob_3 step coeff_2 * z^2\n    let t189 = circuit_add(t187, t188); // Eval C_inv_frob_3 step + (coeff_2 * z^2)\n    let t190 = circuit_mul(t119, t1); // Eval C_inv_frob_3 step coeff_3 * z^3\n    let t191 = circuit_add(t189, t190); // Eval C_inv_frob_3 step + (coeff_3 * z^3)\n    let t192 = circuit_mul(t122, t2); // Eval C_inv_frob_3 step coeff_4 * z^4\n    let t193 = circuit_add(t191, t192); // Eval C_inv_frob_3 step + (coeff_4 * z^4)\n    let t194 = circuit_mul(t125, t3); // Eval C_inv_frob_3 step coeff_5 * z^5\n    let t195 = circuit_add(t193, t194); // Eval C_inv_frob_3 step + (coeff_5 * z^5)\n    let t196 = circuit_mul(t126, t4); // Eval C_inv_frob_3 step coeff_6 * z^6\n    let t197 = circuit_add(t195, t196); // Eval C_inv_frob_3 step + (coeff_6 * z^6)\n    let t198 = circuit_mul(t129, t5); // Eval C_inv_frob_3 step coeff_7 * z^7\n    let t199 = circuit_add(t197, t198); // Eval C_inv_frob_3 step + (coeff_7 * z^7)\n    let t200 = circuit_mul(t132, t6); // Eval C_inv_frob_3 step coeff_8 * z^8\n    let t201 = circuit_add(t199, t200); // Eval C_inv_frob_3 step + (coeff_8 * z^8)\n    let t202 = circuit_mul(t135, t7); // Eval C_inv_frob_3 step coeff_9 * z^9\n    let t203 = circuit_add(t201, t202); // Eval C_inv_frob_3 step + (coeff_9 * z^9)\n    let t204 = circuit_mul(t138, t8); // Eval C_inv_frob_3 step coeff_10 * z^10\n    let t205 = circuit_add(t203, t204); // Eval C_inv_frob_3 step + (coeff_10 * z^10)\n    let t206 = circuit_mul(t141, t9); // Eval C_inv_frob_3 step coeff_11 * z^11\n    let t207 = circuit_add(t205, t206); // Eval C_inv_frob_3 step + (coeff_11 * z^11)\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t31, t41, t63, t65, t163, t185, t207).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(INITIALIZE_MPCHECK_BN254_CONSTANTS.span()); // in0 - in44\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w0); // in45\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w1); // in46\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w2); // in47\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w3); // in48\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w4); // in49\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w5); // in50\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w6); // in51\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w7); // in52\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w8); // in53\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w9); // in54\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w10); // in55\n    circuit_inputs = circuit_inputs.next_2(lambda_root.w11); // in56\n    circuit_inputs = circuit_inputs.next_2(z); // in57\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w0); // in58\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w2); // in59\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w4); // in60\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w6); // in61\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w8); // in62\n    circuit_inputs = circuit_inputs.next_2(scaling_factor.w10); // in63\n    circuit_inputs = circuit_inputs.next_2(c_inv.w0); // in64\n    circuit_inputs = circuit_inputs.next_2(c_inv.w1); // in65\n    circuit_inputs = circuit_inputs.next_2(c_inv.w2); // in66\n    circuit_inputs = circuit_inputs.next_2(c_inv.w3); // in67\n    circuit_inputs = circuit_inputs.next_2(c_inv.w4); // in68\n    circuit_inputs = circuit_inputs.next_2(c_inv.w5); // in69\n    circuit_inputs = circuit_inputs.next_2(c_inv.w6); // in70\n    circuit_inputs = circuit_inputs.next_2(c_inv.w7); // in71\n    circuit_inputs = circuit_inputs.next_2(c_inv.w8); // in72\n    circuit_inputs = circuit_inputs.next_2(c_inv.w9); // in73\n    circuit_inputs = circuit_inputs.next_2(c_inv.w10); // in74\n    circuit_inputs = circuit_inputs.next_2(c_inv.w11); // in75\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let c_of_z: u384 = outputs.get_output(t31);\n    let scaling_factor_of_z: u384 = outputs.get_output(t41);\n    let c_inv_of_z: u384 = outputs.get_output(t63);\n    let lhs: u384 = outputs.get_output(t65);\n    let c_inv_frob_1_of_z: u384 = outputs.get_output(t163);\n    let c_frob_2_of_z: u384 = outputs.get_output(t185);\n    let c_inv_frob_3_of_z: u384 = outputs.get_output(t207);\n    return (\n        c_of_z,\n        scaling_factor_of_z,\n        c_inv_of_z,\n        lhs,\n        c_inv_frob_1_of_z,\n        c_frob_2_of_z,\n        c_inv_frob_3_of_z,\n    );\n}\nconst INITIALIZE_MPCHECK_BN254_CONSTANTS: [u384; 45] = [\n    u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x12, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0xfde6a43f5daa971f3fa65955,\n        limb1: 0x1b2522ec5eb28ded6895e1cd,\n        limb2: 0x1d8c8daef3eee1e8,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x42b29c567e9c385ce480a71a,\n        limb1: 0x4e34e2ac06ead4000d14d1e2,\n        limb2: 0x217e400dc9351e77,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfd28d102c0d147b2f4d521a7,\n        limb1: 0x8481d22c6934ce844d72f250,\n        limb2: 0x242b719062f6737b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x43ac198484b8d9094aa82536,\n        limb1: 0x1b9c22d81246ffc2e794e176,\n        limb2: 0x359809094bd5c8e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6df7b44cbb259ef7cb58d5ed,\n        limb1: 0xdd4ef1e69a0c1f0dd2949fa,\n        limb2: 0x21436d48fcb50cc6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8a4f4f0831364cf35f78f771,\n        limb1: 0x38a4311a86919d9c7c6c15f8,\n        limb2: 0x18857a58f3b5bb30,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6fc008e7d6998c82f7fc048b,\n        limb1: 0x62b7adefd44038ab3c0bbad9,\n        limb2: 0x2c84bbad27c36715,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa8697e0c9c36d8ca3339a7b5,\n        limb1: 0x6d1eab6fcd18b99ad4afd096,\n        limb2: 0xc33b1c70e4fd11b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5371c546d428780a6e3dcfa8,\n        limb1: 0x13fe08bea73305ff6bdac77c,\n        limb2: 0x1b007294a55accce,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4f501fe811493d72543a3977,\n        limb1: 0xefe88dd8e6965b3adae92c97,\n        limb2: 0x215d42e7ac7bd17c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6871ca8d3c208c16d87cfd46,\n        limb1: 0xb85045b68181585d97816a91,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8eeec7e5ca5cf05f80f362ac,\n        limb1: 0xa6327cfe12150b8e74799277,\n        limb2: 0x246996f3b4fae7e6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6a8b264dde75f4f798d6a3f2,\n        limb1: 0x9d2b22ca22ceca702eeb88c3,\n        limb2: 0x12d7c0c3ed42be41,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb7c9dce1665d51c640fcba2,\n        limb1: 0x4ba4cc8bd75a079432ae2a1d,\n        limb2: 0x16c9e55061ebae20,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6b48f98a7b4f4463e3a7dba0,\n        limb1: 0x33ce738a184c89d94a0e7840,\n        limb2: 0xc38dce27e3b2cae,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8fa25bd282d37f632623b0e3,\n        limb1: 0x704b5a7ec796f2b21807dc9,\n        limb2: 0x7c03cbcac41049a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfa7a164080faed1f0d24275a,\n        limb1: 0xaa7b569817e0966cba582096,\n        limb2: 0xf20e129e47c9363,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x1bdec763c13b4711cd2b8126,\n        limb1: 0x9f3a80b03b0b1c923685d2ea,\n        limb2: 0x2c145edbe7fd8aee,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf8b1c1a56586ff93e080f8bc,\n        limb1: 0x559897c6ad411fb25b75afb7,\n        limb2: 0x3df92c5b96e3914,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x678e2ac024c6b8ee6e0c2c4b,\n        limb1: 0xa27fb246c7729f7db080cb99,\n        limb2: 0x12acf2ca76fd0675,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x1500054667f8140c6a3f2d9f,\n        limb1: 0xa4523cf7da4e525e2ba6a315,\n        limb2: 0x1563dbde3bd6d35b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbb966e3de4bd44e5607cfd49,\n        limb1: 0x5e6dd9e7e0acccb0c28f069f,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbb966e3de4bd44e5607cfd48,\n        limb1: 0x5e6dd9e7e0acccb0c28f069f,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xacdb5c4f5763473177fffffe,\n        limb1: 0x59e26bcea0d48bacd4f263f1,\n        limb2: 0x0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xacdb5c4f5763473177ffffff,\n        limb1: 0x59e26bcea0d48bacd4f263f1,\n        limb2: 0x0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x67dfc8fabd3581ad840ddd76,\n        limb1: 0xb2bdfa8fef85fa07122bde8d,\n        limb2: 0x13d0c369615f7bb0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xac285af5685d3f90eacf7a66,\n        limb1: 0xfc2bf531eb331a053a35744c,\n        limb2: 0x18a0f4219f4fdff6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x64e2b5a5bf22f67654883ae6,\n        limb1: 0x79c3e050c9ca2a428908a812,\n        limb2: 0xc3a5e9c462a6547,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x345582cc92fd973c74bd77f4,\n        limb1: 0x5bdd2055c255cf9d9e08c1d9,\n        limb2: 0x2ce02aa5f9bf8cd6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xde227b850aea3f23790405d6,\n        limb1: 0x7fac149bfaefbac11b155498,\n        limb2: 0x17ded419ed7be4f9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4150a79753fb0cd31cc99cc0,\n        limb1: 0x2fb81a8dccd8a9b4441d64f3,\n        limb2: 0x1bfe7b214c029424,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9efaf0f0f1a228f0d5662fbd,\n        limb1: 0xd15da0ec97a9b8346513297b,\n        limb2: 0x697b9c523e0390e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x182d2db0c413901c32b0c6fe,\n        limb1: 0xb5186d6ac4c723b85d3f78a3,\n        limb2: 0x7a0e052f2b1c443,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x39c0d06b220500933945267f,\n        limb1: 0x5dc79824a3792597356c892c,\n        limb2: 0x1b76a37fba85f3cd,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x97d439ec7694aa2bf4c0c101,\n        limb1: 0x6cbeee33576139d7f03a5e3,\n        limb2: 0xabf8b60be77d73,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9201927eeb0a69546f1fd1,\n        limb1: 0x5924b2691fb5e5685558c04,\n        limb2: 0x1c938b097fd22479,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x98ff2631380cab2baaa586de,\n        limb1: 0xa9f30e6dec26094f0fdf31bf,\n        limb2: 0x4f1de41b3d1766f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x38f14e77cfd95a083f4c261,\n        limb1: 0x3e8c6565b7b72e1b0e78c27f,\n        limb2: 0x2429efd69b073ae2,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd8cf6ebab94d0cb3b2594c64,\n        limb1: 0xb14b900e9507e9327600ecc7,\n        limb2: 0x28a411b634f09b8f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x737f96e55fe3ed9d730c239f,\n        limb1: 0xfeb0f6ef0cd21d04a44a9e08,\n        limb2: 0x23d5e999e1910a12,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x272122f5e8257f43bbb36087,\n        limb1: 0x88982b28b4a8aea95364059e,\n        limb2: 0x1465d351952f0c05,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x200280211f25041384282499,\n        limb1: 0x9fb1b2282a48633d3e2ddaea,\n        limb2: 0x16db366a59b1dd0b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x50449cdc780cfbfaa5cc3649,\n        limb1: 0x337d84bbcba34a53a41f1ee,\n        limb2: 0x28c36e1fee7fdbe6,\n        limb3: 0x0,\n    },\n];\n#[inline(always)]\npub fn run_BN254_MP_CHECK_BIT00_2P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u288>,\n    G2_line_2nd_0_0: G2Line<u288>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u288>,\n    G2_line_2nd_0_1: G2Line<u288>,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (u384,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // -0x9 % p\n    let in1 = CE::<CI<1>> {}; // 0x1\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let (in23, in24, in25) = (CE::<CI<23>> {}, CE::<CI<24>> {}, CE::<CI<25>> {});\n    let in26 = CE::<CI<26>> {};\n    let t0 = circuit_mul(in25, in25); // compute z^2\n    let t1 = circuit_mul(t0, in25); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, in25); // compute z^7\n    let t4 = circuit_mul(t3, t0); // compute z^9\n    let t5 = circuit_mul(in23, in23); // Square f evaluation in Z, the result of previous bit.\n    let t6 = circuit_mul(in0, in5);\n    let t7 = circuit_add(in4, t6);\n    let t8 = circuit_mul(t7, in3); // eval bn line by xNegOverY\n    let t9 = circuit_mul(in0, in7);\n    let t10 = circuit_add(in6, t9);\n    let t11 = circuit_mul(t10, in2); // eval bn line by yInv\n    let t12 = circuit_mul(in5, in3); // eval bn line by xNegOverY\n    let t13 = circuit_mul(in7, in2); // eval bn line by yInv\n    let t14 = circuit_mul(t8, in25); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t15 = circuit_add(in1, t14); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t16 = circuit_mul(t11, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t17 = circuit_add(t15, t16); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t18 = circuit_mul(t12, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t19 = circuit_add(t17, t18); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t20 = circuit_mul(t13, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t21 = circuit_add(t19, t20); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t22 = circuit_mul(t5, t21); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t23 = circuit_mul(in0, in9);\n    let t24 = circuit_add(in8, t23);\n    let t25 = circuit_mul(t24, in13); // eval bn line by xNegOverY\n    let t26 = circuit_mul(in0, in11);\n    let t27 = circuit_add(in10, t26);\n    let t28 = circuit_mul(t27, in12); // eval bn line by yInv\n    let t29 = circuit_mul(in9, in13); // eval bn line by xNegOverY\n    let t30 = circuit_mul(in11, in12); // eval bn line by yInv\n    let t31 = circuit_mul(t25, in25); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t32 = circuit_add(in1, t31); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t33 = circuit_mul(t28, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t34 = circuit_add(t32, t33); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t35 = circuit_mul(t29, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t36 = circuit_add(t34, t35); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t37 = circuit_mul(t30, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t38 = circuit_add(t36, t37); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t39 = circuit_mul(t22, t38); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t40 = circuit_mul(\n        t39, t39,\n    ); // Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\n    let t41 = circuit_mul(in0, in15);\n    let t42 = circuit_add(in14, t41);\n    let t43 = circuit_mul(t42, in3); // eval bn line by xNegOverY\n    let t44 = circuit_mul(in0, in17);\n    let t45 = circuit_add(in16, t44);\n    let t46 = circuit_mul(t45, in2); // eval bn line by yInv\n    let t47 = circuit_mul(in15, in3); // eval bn line by xNegOverY\n    let t48 = circuit_mul(in17, in2); // eval bn line by yInv\n    let t49 = circuit_mul(t43, in25); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t50 = circuit_add(in1, t49); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t51 = circuit_mul(t46, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t52 = circuit_add(t50, t51); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t53 = circuit_mul(t47, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t54 = circuit_add(t52, t53); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t55 = circuit_mul(t48, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t56 = circuit_add(t54, t55); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t57 = circuit_mul(t40, t56); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t58 = circuit_mul(in0, in19);\n    let t59 = circuit_add(in18, t58);\n    let t60 = circuit_mul(t59, in13); // eval bn line by xNegOverY\n    let t61 = circuit_mul(in0, in21);\n    let t62 = circuit_add(in20, t61);\n    let t63 = circuit_mul(t62, in12); // eval bn line by yInv\n    let t64 = circuit_mul(in19, in13); // eval bn line by xNegOverY\n    let t65 = circuit_mul(in21, in12); // eval bn line by yInv\n    let t66 = circuit_mul(t60, in25); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t67 = circuit_add(in1, t66); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t68 = circuit_mul(t63, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t69 = circuit_add(t67, t68); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t70 = circuit_mul(t64, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t71 = circuit_add(t69, t70); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t72 = circuit_mul(t65, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t73 = circuit_add(t71, t72); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t74 = circuit_mul(t57, t73); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t75 = circuit_sub(t74, in24); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t76 = circuit_mul(in26, in22);\n    let t77 = circuit_add(t76, t75); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t77,).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd3e, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in2\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in3\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r0a0); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r0a1); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r1a0); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r1a1); // in11\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in12\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in15\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in16\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r0a0); // in18\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r0a1); // in19\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r1a0); // in20\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r1a1); // in21\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in22\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in23\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in24\n    circuit_inputs = circuit_inputs.next_2(z); // in25\n    circuit_inputs = circuit_inputs.next_2(c1); // in26\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let lhs_i_plus_one: u384 = outputs.get_output(t77);\n    return (lhs_i_plus_one,);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_BIT00_3P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u288>,\n    G2_line_2nd_0_0: G2Line<u288>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u288>,\n    G2_line_2nd_0_1: G2Line<u288>,\n    yInv_2: u384,\n    xNegOverY_2: u384,\n    Q_2: G2Point,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (G2Point, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // -0x9 % p\n    let in1 = CE::<CI<1>> {}; // 0x1\n    let in2 = CE::<CI<2>> {}; // 0x3\n    let in3 = CE::<CI<3>> {}; // 0x6\n    let in4 = CE::<CI<4>> {}; // 0x0\n\n    // INPUT stack\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let (in23, in24, in25) = (CE::<CI<23>> {}, CE::<CI<24>> {}, CE::<CI<25>> {});\n    let (in26, in27, in28) = (CE::<CI<26>> {}, CE::<CI<27>> {}, CE::<CI<28>> {});\n    let (in29, in30, in31) = (CE::<CI<29>> {}, CE::<CI<30>> {}, CE::<CI<31>> {});\n    let (in32, in33, in34) = (CE::<CI<32>> {}, CE::<CI<33>> {}, CE::<CI<34>> {});\n    let in35 = CE::<CI<35>> {};\n    let t0 = circuit_mul(in34, in34); // compute z^2\n    let t1 = circuit_mul(t0, in34); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, in34); // compute z^7\n    let t4 = circuit_mul(t3, t0); // compute z^9\n    let t5 = circuit_mul(in32, in32); // Square f evaluation in Z, the result of previous bit.\n    let t6 = circuit_mul(in0, in8);\n    let t7 = circuit_add(in7, t6);\n    let t8 = circuit_mul(t7, in6); // eval bn line by xNegOverY\n    let t9 = circuit_mul(in0, in10);\n    let t10 = circuit_add(in9, t9);\n    let t11 = circuit_mul(t10, in5); // eval bn line by yInv\n    let t12 = circuit_mul(in8, in6); // eval bn line by xNegOverY\n    let t13 = circuit_mul(in10, in5); // eval bn line by yInv\n    let t14 = circuit_mul(t8, in34); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t15 = circuit_add(in1, t14); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t16 = circuit_mul(t11, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t17 = circuit_add(t15, t16); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t18 = circuit_mul(t12, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t19 = circuit_add(t17, t18); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t20 = circuit_mul(t13, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t21 = circuit_add(t19, t20); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t22 = circuit_mul(t5, t21); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t23 = circuit_mul(in0, in12);\n    let t24 = circuit_add(in11, t23);\n    let t25 = circuit_mul(t24, in16); // eval bn line by xNegOverY\n    let t26 = circuit_mul(in0, in14);\n    let t27 = circuit_add(in13, t26);\n    let t28 = circuit_mul(t27, in15); // eval bn line by yInv\n    let t29 = circuit_mul(in12, in16); // eval bn line by xNegOverY\n    let t30 = circuit_mul(in14, in15); // eval bn line by yInv\n    let t31 = circuit_mul(t25, in34); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t32 = circuit_add(in1, t31); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t33 = circuit_mul(t28, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t34 = circuit_add(t32, t33); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t35 = circuit_mul(t29, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t36 = circuit_add(t34, t35); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t37 = circuit_mul(t30, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t38 = circuit_add(t36, t37); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t39 = circuit_mul(t22, t38); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t40 = circuit_add(in27, in28); // Doubling slope numerator start\n    let t41 = circuit_sub(in27, in28);\n    let t42 = circuit_mul(t40, t41);\n    let t43 = circuit_mul(in27, in28);\n    let t44 = circuit_mul(t42, in2);\n    let t45 = circuit_mul(t43, in3); // Doubling slope numerator end\n    let t46 = circuit_add(in29, in29); // Fp2 add coeff 0/1\n    let t47 = circuit_add(in30, in30); // Fp2 add coeff 1/1\n    let t48 = circuit_mul(t46, t46); // Fp2 Inv start\n    let t49 = circuit_mul(t47, t47);\n    let t50 = circuit_add(t48, t49);\n    let t51 = circuit_inverse(t50);\n    let t52 = circuit_mul(t46, t51); // Fp2 Inv real part end\n    let t53 = circuit_mul(t47, t51);\n    let t54 = circuit_sub(in4, t53); // Fp2 Inv imag part end\n    let t55 = circuit_mul(t44, t52); // Fp2 mul start\n    let t56 = circuit_mul(t45, t54);\n    let t57 = circuit_sub(t55, t56); // Fp2 mul real part end\n    let t58 = circuit_mul(t44, t54);\n    let t59 = circuit_mul(t45, t52);\n    let t60 = circuit_add(t58, t59); // Fp2 mul imag part end\n    let t61 = circuit_add(t57, t60);\n    let t62 = circuit_sub(t57, t60);\n    let t63 = circuit_mul(t61, t62);\n    let t64 = circuit_mul(t57, t60);\n    let t65 = circuit_add(t64, t64);\n    let t66 = circuit_add(in27, in27); // Fp2 add coeff 0/1\n    let t67 = circuit_add(in28, in28); // Fp2 add coeff 1/1\n    let t68 = circuit_sub(t63, t66); // Fp2 sub coeff 0/1\n    let t69 = circuit_sub(t65, t67); // Fp2 sub coeff 1/1\n    let t70 = circuit_sub(in27, t68); // Fp2 sub coeff 0/1\n    let t71 = circuit_sub(in28, t69); // Fp2 sub coeff 1/1\n    let t72 = circuit_mul(t57, t70); // Fp2 mul start\n    let t73 = circuit_mul(t60, t71);\n    let t74 = circuit_sub(t72, t73); // Fp2 mul real part end\n    let t75 = circuit_mul(t57, t71);\n    let t76 = circuit_mul(t60, t70);\n    let t77 = circuit_add(t75, t76); // Fp2 mul imag part end\n    let t78 = circuit_sub(t74, in29); // Fp2 sub coeff 0/1\n    let t79 = circuit_sub(t77, in30); // Fp2 sub coeff 1/1\n    let t80 = circuit_mul(t57, in27); // Fp2 mul start\n    let t81 = circuit_mul(t60, in28);\n    let t82 = circuit_sub(t80, t81); // Fp2 mul real part end\n    let t83 = circuit_mul(t57, in28);\n    let t84 = circuit_mul(t60, in27);\n    let t85 = circuit_add(t83, t84); // Fp2 mul imag part end\n    let t86 = circuit_sub(t82, in29); // Fp2 sub coeff 0/1\n    let t87 = circuit_sub(t85, in30); // Fp2 sub coeff 1/1\n    let t88 = circuit_mul(in0, t60);\n    let t89 = circuit_add(t57, t88);\n    let t90 = circuit_mul(t89, in26); // eval bn line by xNegOverY\n    let t91 = circuit_mul(in0, t87);\n    let t92 = circuit_add(t86, t91);\n    let t93 = circuit_mul(t92, in25); // eval bn line by yInv\n    let t94 = circuit_mul(t60, in26); // eval bn line by xNegOverY\n    let t95 = circuit_mul(t87, in25); // eval bn line by yInv\n    let t96 = circuit_mul(t90, in34); // Eval sparse poly line_2p_1 step coeff_1 * z^1\n    let t97 = circuit_add(in1, t96); // Eval sparse poly line_2p_1 step + coeff_1 * z^1\n    let t98 = circuit_mul(t93, t1); // Eval sparse poly line_2p_1 step coeff_3 * z^3\n    let t99 = circuit_add(t97, t98); // Eval sparse poly line_2p_1 step + coeff_3 * z^3\n    let t100 = circuit_mul(t94, t3); // Eval sparse poly line_2p_1 step coeff_7 * z^7\n    let t101 = circuit_add(t99, t100); // Eval sparse poly line_2p_1 step + coeff_7 * z^7\n    let t102 = circuit_mul(t95, t4); // Eval sparse poly line_2p_1 step coeff_9 * z^9\n    let t103 = circuit_add(t101, t102); // Eval sparse poly line_2p_1 step + coeff_9 * z^9\n    let t104 = circuit_mul(t39, t103); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t105 = circuit_mul(\n        t104, t104,\n    ); // Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\n    let t106 = circuit_mul(in0, in18);\n    let t107 = circuit_add(in17, t106);\n    let t108 = circuit_mul(t107, in6); // eval bn line by xNegOverY\n    let t109 = circuit_mul(in0, in20);\n    let t110 = circuit_add(in19, t109);\n    let t111 = circuit_mul(t110, in5); // eval bn line by yInv\n    let t112 = circuit_mul(in18, in6); // eval bn line by xNegOverY\n    let t113 = circuit_mul(in20, in5); // eval bn line by yInv\n    let t114 = circuit_mul(t108, in34); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t115 = circuit_add(in1, t114); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t116 = circuit_mul(t111, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t117 = circuit_add(t115, t116); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t118 = circuit_mul(t112, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t119 = circuit_add(t117, t118); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t120 = circuit_mul(t113, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t121 = circuit_add(t119, t120); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t122 = circuit_mul(t105, t121); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t123 = circuit_mul(in0, in22);\n    let t124 = circuit_add(in21, t123);\n    let t125 = circuit_mul(t124, in16); // eval bn line by xNegOverY\n    let t126 = circuit_mul(in0, in24);\n    let t127 = circuit_add(in23, t126);\n    let t128 = circuit_mul(t127, in15); // eval bn line by yInv\n    let t129 = circuit_mul(in22, in16); // eval bn line by xNegOverY\n    let t130 = circuit_mul(in24, in15); // eval bn line by yInv\n    let t131 = circuit_mul(t125, in34); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t132 = circuit_add(in1, t131); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t133 = circuit_mul(t128, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t134 = circuit_add(t132, t133); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t135 = circuit_mul(t129, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t136 = circuit_add(t134, t135); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t137 = circuit_mul(t130, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t138 = circuit_add(t136, t137); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t139 = circuit_mul(t122, t138); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t140 = circuit_add(t68, t69); // Doubling slope numerator start\n    let t141 = circuit_sub(t68, t69);\n    let t142 = circuit_mul(t140, t141);\n    let t143 = circuit_mul(t68, t69);\n    let t144 = circuit_mul(t142, in2);\n    let t145 = circuit_mul(t143, in3); // Doubling slope numerator end\n    let t146 = circuit_add(t78, t78); // Fp2 add coeff 0/1\n    let t147 = circuit_add(t79, t79); // Fp2 add coeff 1/1\n    let t148 = circuit_mul(t146, t146); // Fp2 Inv start\n    let t149 = circuit_mul(t147, t147);\n    let t150 = circuit_add(t148, t149);\n    let t151 = circuit_inverse(t150);\n    let t152 = circuit_mul(t146, t151); // Fp2 Inv real part end\n    let t153 = circuit_mul(t147, t151);\n    let t154 = circuit_sub(in4, t153); // Fp2 Inv imag part end\n    let t155 = circuit_mul(t144, t152); // Fp2 mul start\n    let t156 = circuit_mul(t145, t154);\n    let t157 = circuit_sub(t155, t156); // Fp2 mul real part end\n    let t158 = circuit_mul(t144, t154);\n    let t159 = circuit_mul(t145, t152);\n    let t160 = circuit_add(t158, t159); // Fp2 mul imag part end\n    let t161 = circuit_add(t157, t160);\n    let t162 = circuit_sub(t157, t160);\n    let t163 = circuit_mul(t161, t162);\n    let t164 = circuit_mul(t157, t160);\n    let t165 = circuit_add(t164, t164);\n    let t166 = circuit_add(t68, t68); // Fp2 add coeff 0/1\n    let t167 = circuit_add(t69, t69); // Fp2 add coeff 1/1\n    let t168 = circuit_sub(t163, t166); // Fp2 sub coeff 0/1\n    let t169 = circuit_sub(t165, t167); // Fp2 sub coeff 1/1\n    let t170 = circuit_sub(t68, t168); // Fp2 sub coeff 0/1\n    let t171 = circuit_sub(t69, t169); // Fp2 sub coeff 1/1\n    let t172 = circuit_mul(t157, t170); // Fp2 mul start\n    let t173 = circuit_mul(t160, t171);\n    let t174 = circuit_sub(t172, t173); // Fp2 mul real part end\n    let t175 = circuit_mul(t157, t171);\n    let t176 = circuit_mul(t160, t170);\n    let t177 = circuit_add(t175, t176); // Fp2 mul imag part end\n    let t178 = circuit_sub(t174, t78); // Fp2 sub coeff 0/1\n    let t179 = circuit_sub(t177, t79); // Fp2 sub coeff 1/1\n    let t180 = circuit_mul(t157, t68); // Fp2 mul start\n    let t181 = circuit_mul(t160, t69);\n    let t182 = circuit_sub(t180, t181); // Fp2 mul real part end\n    let t183 = circuit_mul(t157, t69);\n    let t184 = circuit_mul(t160, t68);\n    let t185 = circuit_add(t183, t184); // Fp2 mul imag part end\n    let t186 = circuit_sub(t182, t78); // Fp2 sub coeff 0/1\n    let t187 = circuit_sub(t185, t79); // Fp2 sub coeff 1/1\n    let t188 = circuit_mul(in0, t160);\n    let t189 = circuit_add(t157, t188);\n    let t190 = circuit_mul(t189, in26); // eval bn line by xNegOverY\n    let t191 = circuit_mul(in0, t187);\n    let t192 = circuit_add(t186, t191);\n    let t193 = circuit_mul(t192, in25); // eval bn line by yInv\n    let t194 = circuit_mul(t160, in26); // eval bn line by xNegOverY\n    let t195 = circuit_mul(t187, in25); // eval bn line by yInv\n    let t196 = circuit_mul(t190, in34); // Eval sparse poly line_2p_1 step coeff_1 * z^1\n    let t197 = circuit_add(in1, t196); // Eval sparse poly line_2p_1 step + coeff_1 * z^1\n    let t198 = circuit_mul(t193, t1); // Eval sparse poly line_2p_1 step coeff_3 * z^3\n    let t199 = circuit_add(t197, t198); // Eval sparse poly line_2p_1 step + coeff_3 * z^3\n    let t200 = circuit_mul(t194, t3); // Eval sparse poly line_2p_1 step coeff_7 * z^7\n    let t201 = circuit_add(t199, t200); // Eval sparse poly line_2p_1 step + coeff_7 * z^7\n    let t202 = circuit_mul(t195, t4); // Eval sparse poly line_2p_1 step coeff_9 * z^9\n    let t203 = circuit_add(t201, t202); // Eval sparse poly line_2p_1 step + coeff_9 * z^9\n    let t204 = circuit_mul(t139, t203); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t205 = circuit_sub(t204, in33); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t206 = circuit_mul(in35, in31);\n    let t207 = circuit_add(t206, t205); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t168, t169, t178, t179, t207).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd3e, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in2\n    circuit_inputs = circuit_inputs.next_2([0x6, 0x0, 0x0, 0x0]); // in3\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in4\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in5\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r0a0); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r0a1); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r1a0); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_0.r1a1); // in14\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in15\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in16\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in18\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in19\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in20\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r0a0); // in21\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r0a1); // in22\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r1a0); // in23\n    circuit_inputs = circuit_inputs.next_2(G2_line_2nd_0_1.r1a1); // in24\n    circuit_inputs = circuit_inputs.next_2(yInv_2); // in25\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_2); // in26\n    circuit_inputs = circuit_inputs.next_2(Q_2.x0); // in27\n    circuit_inputs = circuit_inputs.next_2(Q_2.x1); // in28\n    circuit_inputs = circuit_inputs.next_2(Q_2.y0); // in29\n    circuit_inputs = circuit_inputs.next_2(Q_2.y1); // in30\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in31\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in32\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in33\n    circuit_inputs = circuit_inputs.next_2(z); // in34\n    circuit_inputs = circuit_inputs.next_2(c1); // in35\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t168),\n        x1: outputs.get_output(t169),\n        y0: outputs.get_output(t178),\n        y1: outputs.get_output(t179),\n    };\n    let lhs_i_plus_one: u384 = outputs.get_output(t207);\n    return (Q0, lhs_i_plus_one);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_BIT01_2P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u288>,\n    G2_line_dbl_10: G2Line<u288>,\n    G2_line_add_10: G2Line<u288>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u288>,\n    G2_line_dbl_11: G2Line<u288>,\n    G2_line_add_11: G2Line<u288>,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    c_or_cinv_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (u384,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // -0x9 % p\n    let in1 = CE::<CI<1>> {}; // 0x1\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let (in23, in24, in25) = (CE::<CI<23>> {}, CE::<CI<24>> {}, CE::<CI<25>> {});\n    let (in26, in27, in28) = (CE::<CI<26>> {}, CE::<CI<27>> {}, CE::<CI<28>> {});\n    let (in29, in30, in31) = (CE::<CI<29>> {}, CE::<CI<30>> {}, CE::<CI<31>> {});\n    let (in32, in33, in34) = (CE::<CI<32>> {}, CE::<CI<33>> {}, CE::<CI<34>> {});\n    let in35 = CE::<CI<35>> {};\n    let t0 = circuit_mul(in34, in34); // compute z^2\n    let t1 = circuit_mul(t0, in34); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, in34); // compute z^7\n    let t4 = circuit_mul(t3, t0); // compute z^9\n    let t5 = circuit_mul(in31, in31); // Square f evaluation in Z, the result of previous bit.\n    let t6 = circuit_mul(in0, in5);\n    let t7 = circuit_add(in4, t6);\n    let t8 = circuit_mul(t7, in3); // eval bn line by xNegOverY\n    let t9 = circuit_mul(in0, in7);\n    let t10 = circuit_add(in6, t9);\n    let t11 = circuit_mul(t10, in2); // eval bn line by yInv\n    let t12 = circuit_mul(in5, in3); // eval bn line by xNegOverY\n    let t13 = circuit_mul(in7, in2); // eval bn line by yInv\n    let t14 = circuit_mul(t8, in34); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t15 = circuit_add(in1, t14); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t16 = circuit_mul(t11, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t17 = circuit_add(t15, t16); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t18 = circuit_mul(t12, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t19 = circuit_add(t17, t18); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t20 = circuit_mul(t13, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t21 = circuit_add(t19, t20); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t22 = circuit_mul(t5, t21); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t23 = circuit_mul(in0, in9);\n    let t24 = circuit_add(in8, t23);\n    let t25 = circuit_mul(t24, in17); // eval bn line by xNegOverY\n    let t26 = circuit_mul(in0, in11);\n    let t27 = circuit_add(in10, t26);\n    let t28 = circuit_mul(t27, in16); // eval bn line by yInv\n    let t29 = circuit_mul(in9, in17); // eval bn line by xNegOverY\n    let t30 = circuit_mul(in11, in16); // eval bn line by yInv\n    let t31 = circuit_mul(t25, in34); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t32 = circuit_add(in1, t31); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t33 = circuit_mul(t28, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t34 = circuit_add(t32, t33); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t35 = circuit_mul(t29, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t36 = circuit_add(t34, t35); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t37 = circuit_mul(t30, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t38 = circuit_add(t36, t37); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t39 = circuit_mul(t22, t38); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t40 = circuit_mul(\n        t39, t39,\n    ); // Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\n    let t41 = circuit_mul(in0, in13);\n    let t42 = circuit_add(in12, t41);\n    let t43 = circuit_mul(t42, in3); // eval bn line by xNegOverY\n    let t44 = circuit_mul(in0, in15);\n    let t45 = circuit_add(in14, t44);\n    let t46 = circuit_mul(t45, in2); // eval bn line by yInv\n    let t47 = circuit_mul(in13, in3); // eval bn line by xNegOverY\n    let t48 = circuit_mul(in15, in2); // eval bn line by yInv\n    let t49 = circuit_mul(in0, in19);\n    let t50 = circuit_add(in18, t49);\n    let t51 = circuit_mul(t50, in3); // eval bn line by xNegOverY\n    let t52 = circuit_mul(in0, in21);\n    let t53 = circuit_add(in20, t52);\n    let t54 = circuit_mul(t53, in2); // eval bn line by yInv\n    let t55 = circuit_mul(in19, in3); // eval bn line by xNegOverY\n    let t56 = circuit_mul(in21, in2); // eval bn line by yInv\n    let t57 = circuit_mul(t43, in34); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t58 = circuit_add(in1, t57); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t59 = circuit_mul(t46, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t60 = circuit_add(t58, t59); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t61 = circuit_mul(t47, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t62 = circuit_add(t60, t61); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t63 = circuit_mul(t48, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t64 = circuit_add(t62, t63); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t65 = circuit_mul(t40, t64); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t66 = circuit_mul(t51, in34); // Eval sparse poly line_0p_2 step coeff_1 * z^1\n    let t67 = circuit_add(in1, t66); // Eval sparse poly line_0p_2 step + coeff_1 * z^1\n    let t68 = circuit_mul(t54, t1); // Eval sparse poly line_0p_2 step coeff_3 * z^3\n    let t69 = circuit_add(t67, t68); // Eval sparse poly line_0p_2 step + coeff_3 * z^3\n    let t70 = circuit_mul(t55, t3); // Eval sparse poly line_0p_2 step coeff_7 * z^7\n    let t71 = circuit_add(t69, t70); // Eval sparse poly line_0p_2 step + coeff_7 * z^7\n    let t72 = circuit_mul(t56, t4); // Eval sparse poly line_0p_2 step coeff_9 * z^9\n    let t73 = circuit_add(t71, t72); // Eval sparse poly line_0p_2 step + coeff_9 * z^9\n    let t74 = circuit_mul(t65, t73); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t75 = circuit_mul(in0, in23);\n    let t76 = circuit_add(in22, t75);\n    let t77 = circuit_mul(t76, in17); // eval bn line by xNegOverY\n    let t78 = circuit_mul(in0, in25);\n    let t79 = circuit_add(in24, t78);\n    let t80 = circuit_mul(t79, in16); // eval bn line by yInv\n    let t81 = circuit_mul(in23, in17); // eval bn line by xNegOverY\n    let t82 = circuit_mul(in25, in16); // eval bn line by yInv\n    let t83 = circuit_mul(in0, in27);\n    let t84 = circuit_add(in26, t83);\n    let t85 = circuit_mul(t84, in17); // eval bn line by xNegOverY\n    let t86 = circuit_mul(in0, in29);\n    let t87 = circuit_add(in28, t86);\n    let t88 = circuit_mul(t87, in16); // eval bn line by yInv\n    let t89 = circuit_mul(in27, in17); // eval bn line by xNegOverY\n    let t90 = circuit_mul(in29, in16); // eval bn line by yInv\n    let t91 = circuit_mul(t77, in34); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t92 = circuit_add(in1, t91); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t93 = circuit_mul(t80, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t94 = circuit_add(t92, t93); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t95 = circuit_mul(t81, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t96 = circuit_add(t94, t95); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t97 = circuit_mul(t82, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t98 = circuit_add(t96, t97); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t99 = circuit_mul(t74, t98); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t100 = circuit_mul(t85, in34); // Eval sparse poly line_1p_2 step coeff_1 * z^1\n    let t101 = circuit_add(in1, t100); // Eval sparse poly line_1p_2 step + coeff_1 * z^1\n    let t102 = circuit_mul(t88, t1); // Eval sparse poly line_1p_2 step coeff_3 * z^3\n    let t103 = circuit_add(t101, t102); // Eval sparse poly line_1p_2 step + coeff_3 * z^3\n    let t104 = circuit_mul(t89, t3); // Eval sparse poly line_1p_2 step coeff_7 * z^7\n    let t105 = circuit_add(t103, t104); // Eval sparse poly line_1p_2 step + coeff_7 * z^7\n    let t106 = circuit_mul(t90, t4); // Eval sparse poly line_1p_2 step coeff_9 * z^9\n    let t107 = circuit_add(t105, t106); // Eval sparse poly line_1p_2 step + coeff_9 * z^9\n    let t108 = circuit_mul(t99, t107); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t109 = circuit_mul(t108, in33);\n    let t110 = circuit_sub(t109, in32); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t111 = circuit_mul(in35, in30);\n    let t112 = circuit_add(t111, t110); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t112,).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd3e, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in2\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in3\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_10.r0a0); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_10.r0a1); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_10.r1a0); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_10.r1a1); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_10.r0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_10.r0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_10.r1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_10.r1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in16\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in18\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in19\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in20\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in21\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_11.r0a0); // in22\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_11.r0a1); // in23\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_11.r1a0); // in24\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_11.r1a1); // in25\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_11.r0a0); // in26\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_11.r0a1); // in27\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_11.r1a0); // in28\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_11.r1a1); // in29\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in30\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in31\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in32\n    circuit_inputs = circuit_inputs.next_2(c_or_cinv_of_z); // in33\n    circuit_inputs = circuit_inputs.next_2(z); // in34\n    circuit_inputs = circuit_inputs.next_2(c1); // in35\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let lhs_i_plus_one: u384 = outputs.get_output(t112);\n    return (lhs_i_plus_one,);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_BIT01_3P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u288>,\n    G2_line_dbl_10: G2Line<u288>,\n    G2_line_add_10: G2Line<u288>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u288>,\n    G2_line_dbl_11: G2Line<u288>,\n    G2_line_add_11: G2Line<u288>,\n    yInv_2: u384,\n    xNegOverY_2: u384,\n    Q_2: G2Point,\n    Q_or_Q_neg_2: G2Point,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    c_or_cinv_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (G2Point, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // -0x9 % p\n    let in1 = CE::<CI<1>> {}; // 0x1\n    let in2 = CE::<CI<2>> {}; // 0x3\n    let in3 = CE::<CI<3>> {}; // 0x6\n    let in4 = CE::<CI<4>> {}; // 0x0\n\n    // INPUT stack\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let (in23, in24, in25) = (CE::<CI<23>> {}, CE::<CI<24>> {}, CE::<CI<25>> {});\n    let (in26, in27, in28) = (CE::<CI<26>> {}, CE::<CI<27>> {}, CE::<CI<28>> {});\n    let (in29, in30, in31) = (CE::<CI<29>> {}, CE::<CI<30>> {}, CE::<CI<31>> {});\n    let (in32, in33, in34) = (CE::<CI<32>> {}, CE::<CI<33>> {}, CE::<CI<34>> {});\n    let (in35, in36, in37) = (CE::<CI<35>> {}, CE::<CI<36>> {}, CE::<CI<37>> {});\n    let (in38, in39, in40) = (CE::<CI<38>> {}, CE::<CI<39>> {}, CE::<CI<40>> {});\n    let (in41, in42, in43) = (CE::<CI<41>> {}, CE::<CI<42>> {}, CE::<CI<43>> {});\n    let (in44, in45, in46) = (CE::<CI<44>> {}, CE::<CI<45>> {}, CE::<CI<46>> {});\n    let (in47, in48) = (CE::<CI<47>> {}, CE::<CI<48>> {});\n    let t0 = circuit_mul(in47, in47); // compute z^2\n    let t1 = circuit_mul(t0, in47); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, in47); // compute z^7\n    let t4 = circuit_mul(t3, t0); // compute z^9\n    let t5 = circuit_mul(in44, in44); // Square f evaluation in Z, the result of previous bit.\n    let t6 = circuit_mul(in0, in8);\n    let t7 = circuit_add(in7, t6);\n    let t8 = circuit_mul(t7, in6); // eval bn line by xNegOverY\n    let t9 = circuit_mul(in0, in10);\n    let t10 = circuit_add(in9, t9);\n    let t11 = circuit_mul(t10, in5); // eval bn line by yInv\n    let t12 = circuit_mul(in8, in6); // eval bn line by xNegOverY\n    let t13 = circuit_mul(in10, in5); // eval bn line by yInv\n    let t14 = circuit_mul(t8, in47); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t15 = circuit_add(in1, t14); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t16 = circuit_mul(t11, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t17 = circuit_add(t15, t16); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t18 = circuit_mul(t12, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t19 = circuit_add(t17, t18); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t20 = circuit_mul(t13, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t21 = circuit_add(t19, t20); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t22 = circuit_mul(t5, t21); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t23 = circuit_mul(in0, in12);\n    let t24 = circuit_add(in11, t23);\n    let t25 = circuit_mul(t24, in20); // eval bn line by xNegOverY\n    let t26 = circuit_mul(in0, in14);\n    let t27 = circuit_add(in13, t26);\n    let t28 = circuit_mul(t27, in19); // eval bn line by yInv\n    let t29 = circuit_mul(in12, in20); // eval bn line by xNegOverY\n    let t30 = circuit_mul(in14, in19); // eval bn line by yInv\n    let t31 = circuit_mul(t25, in47); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t32 = circuit_add(in1, t31); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t33 = circuit_mul(t28, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t34 = circuit_add(t32, t33); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t35 = circuit_mul(t29, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t36 = circuit_add(t34, t35); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t37 = circuit_mul(t30, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t38 = circuit_add(t36, t37); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t39 = circuit_mul(t22, t38); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t40 = circuit_add(in35, in36); // Doubling slope numerator start\n    let t41 = circuit_sub(in35, in36);\n    let t42 = circuit_mul(t40, t41);\n    let t43 = circuit_mul(in35, in36);\n    let t44 = circuit_mul(t42, in2);\n    let t45 = circuit_mul(t43, in3); // Doubling slope numerator end\n    let t46 = circuit_add(in37, in37); // Fp2 add coeff 0/1\n    let t47 = circuit_add(in38, in38); // Fp2 add coeff 1/1\n    let t48 = circuit_mul(t46, t46); // Fp2 Inv start\n    let t49 = circuit_mul(t47, t47);\n    let t50 = circuit_add(t48, t49);\n    let t51 = circuit_inverse(t50);\n    let t52 = circuit_mul(t46, t51); // Fp2 Inv real part end\n    let t53 = circuit_mul(t47, t51);\n    let t54 = circuit_sub(in4, t53); // Fp2 Inv imag part end\n    let t55 = circuit_mul(t44, t52); // Fp2 mul start\n    let t56 = circuit_mul(t45, t54);\n    let t57 = circuit_sub(t55, t56); // Fp2 mul real part end\n    let t58 = circuit_mul(t44, t54);\n    let t59 = circuit_mul(t45, t52);\n    let t60 = circuit_add(t58, t59); // Fp2 mul imag part end\n    let t61 = circuit_add(t57, t60);\n    let t62 = circuit_sub(t57, t60);\n    let t63 = circuit_mul(t61, t62);\n    let t64 = circuit_mul(t57, t60);\n    let t65 = circuit_add(t64, t64);\n    let t66 = circuit_add(in35, in35); // Fp2 add coeff 0/1\n    let t67 = circuit_add(in36, in36); // Fp2 add coeff 1/1\n    let t68 = circuit_sub(t63, t66); // Fp2 sub coeff 0/1\n    let t69 = circuit_sub(t65, t67); // Fp2 sub coeff 1/1\n    let t70 = circuit_sub(in35, t68); // Fp2 sub coeff 0/1\n    let t71 = circuit_sub(in36, t69); // Fp2 sub coeff 1/1\n    let t72 = circuit_mul(t57, t70); // Fp2 mul start\n    let t73 = circuit_mul(t60, t71);\n    let t74 = circuit_sub(t72, t73); // Fp2 mul real part end\n    let t75 = circuit_mul(t57, t71);\n    let t76 = circuit_mul(t60, t70);\n    let t77 = circuit_add(t75, t76); // Fp2 mul imag part end\n    let t78 = circuit_sub(t74, in37); // Fp2 sub coeff 0/1\n    let t79 = circuit_sub(t77, in38); // Fp2 sub coeff 1/1\n    let t80 = circuit_mul(t57, in35); // Fp2 mul start\n    let t81 = circuit_mul(t60, in36);\n    let t82 = circuit_sub(t80, t81); // Fp2 mul real part end\n    let t83 = circuit_mul(t57, in36);\n    let t84 = circuit_mul(t60, in35);\n    let t85 = circuit_add(t83, t84); // Fp2 mul imag part end\n    let t86 = circuit_sub(t82, in37); // Fp2 sub coeff 0/1\n    let t87 = circuit_sub(t85, in38); // Fp2 sub coeff 1/1\n    let t88 = circuit_mul(in0, t60);\n    let t89 = circuit_add(t57, t88);\n    let t90 = circuit_mul(t89, in34); // eval bn line by xNegOverY\n    let t91 = circuit_mul(in0, t87);\n    let t92 = circuit_add(t86, t91);\n    let t93 = circuit_mul(t92, in33); // eval bn line by yInv\n    let t94 = circuit_mul(t60, in34); // eval bn line by xNegOverY\n    let t95 = circuit_mul(t87, in33); // eval bn line by yInv\n    let t96 = circuit_mul(t90, in47); // Eval sparse poly line_2p_1 step coeff_1 * z^1\n    let t97 = circuit_add(in1, t96); // Eval sparse poly line_2p_1 step + coeff_1 * z^1\n    let t98 = circuit_mul(t93, t1); // Eval sparse poly line_2p_1 step coeff_3 * z^3\n    let t99 = circuit_add(t97, t98); // Eval sparse poly line_2p_1 step + coeff_3 * z^3\n    let t100 = circuit_mul(t94, t3); // Eval sparse poly line_2p_1 step coeff_7 * z^7\n    let t101 = circuit_add(t99, t100); // Eval sparse poly line_2p_1 step + coeff_7 * z^7\n    let t102 = circuit_mul(t95, t4); // Eval sparse poly line_2p_1 step coeff_9 * z^9\n    let t103 = circuit_add(t101, t102); // Eval sparse poly line_2p_1 step + coeff_9 * z^9\n    let t104 = circuit_mul(t39, t103); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t105 = circuit_mul(\n        t104, t104,\n    ); // Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\n    let t106 = circuit_mul(in0, in16);\n    let t107 = circuit_add(in15, t106);\n    let t108 = circuit_mul(t107, in6); // eval bn line by xNegOverY\n    let t109 = circuit_mul(in0, in18);\n    let t110 = circuit_add(in17, t109);\n    let t111 = circuit_mul(t110, in5); // eval bn line by yInv\n    let t112 = circuit_mul(in16, in6); // eval bn line by xNegOverY\n    let t113 = circuit_mul(in18, in5); // eval bn line by yInv\n    let t114 = circuit_mul(in0, in22);\n    let t115 = circuit_add(in21, t114);\n    let t116 = circuit_mul(t115, in6); // eval bn line by xNegOverY\n    let t117 = circuit_mul(in0, in24);\n    let t118 = circuit_add(in23, t117);\n    let t119 = circuit_mul(t118, in5); // eval bn line by yInv\n    let t120 = circuit_mul(in22, in6); // eval bn line by xNegOverY\n    let t121 = circuit_mul(in24, in5); // eval bn line by yInv\n    let t122 = circuit_mul(t108, in47); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t123 = circuit_add(in1, t122); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t124 = circuit_mul(t111, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t125 = circuit_add(t123, t124); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t126 = circuit_mul(t112, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t127 = circuit_add(t125, t126); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t128 = circuit_mul(t113, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t129 = circuit_add(t127, t128); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t130 = circuit_mul(t105, t129); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t131 = circuit_mul(t116, in47); // Eval sparse poly line_0p_2 step coeff_1 * z^1\n    let t132 = circuit_add(in1, t131); // Eval sparse poly line_0p_2 step + coeff_1 * z^1\n    let t133 = circuit_mul(t119, t1); // Eval sparse poly line_0p_2 step coeff_3 * z^3\n    let t134 = circuit_add(t132, t133); // Eval sparse poly line_0p_2 step + coeff_3 * z^3\n    let t135 = circuit_mul(t120, t3); // Eval sparse poly line_0p_2 step coeff_7 * z^7\n    let t136 = circuit_add(t134, t135); // Eval sparse poly line_0p_2 step + coeff_7 * z^7\n    let t137 = circuit_mul(t121, t4); // Eval sparse poly line_0p_2 step coeff_9 * z^9\n    let t138 = circuit_add(t136, t137); // Eval sparse poly line_0p_2 step + coeff_9 * z^9\n    let t139 = circuit_mul(t130, t138); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t140 = circuit_mul(in0, in26);\n    let t141 = circuit_add(in25, t140);\n    let t142 = circuit_mul(t141, in20); // eval bn line by xNegOverY\n    let t143 = circuit_mul(in0, in28);\n    let t144 = circuit_add(in27, t143);\n    let t145 = circuit_mul(t144, in19); // eval bn line by yInv\n    let t146 = circuit_mul(in26, in20); // eval bn line by xNegOverY\n    let t147 = circuit_mul(in28, in19); // eval bn line by yInv\n    let t148 = circuit_mul(in0, in30);\n    let t149 = circuit_add(in29, t148);\n    let t150 = circuit_mul(t149, in20); // eval bn line by xNegOverY\n    let t151 = circuit_mul(in0, in32);\n    let t152 = circuit_add(in31, t151);\n    let t153 = circuit_mul(t152, in19); // eval bn line by yInv\n    let t154 = circuit_mul(in30, in20); // eval bn line by xNegOverY\n    let t155 = circuit_mul(in32, in19); // eval bn line by yInv\n    let t156 = circuit_mul(t142, in47); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t157 = circuit_add(in1, t156); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t158 = circuit_mul(t145, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t159 = circuit_add(t157, t158); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t160 = circuit_mul(t146, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t161 = circuit_add(t159, t160); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t162 = circuit_mul(t147, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t163 = circuit_add(t161, t162); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t164 = circuit_mul(t139, t163); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t165 = circuit_mul(t150, in47); // Eval sparse poly line_1p_2 step coeff_1 * z^1\n    let t166 = circuit_add(in1, t165); // Eval sparse poly line_1p_2 step + coeff_1 * z^1\n    let t167 = circuit_mul(t153, t1); // Eval sparse poly line_1p_2 step coeff_3 * z^3\n    let t168 = circuit_add(t166, t167); // Eval sparse poly line_1p_2 step + coeff_3 * z^3\n    let t169 = circuit_mul(t154, t3); // Eval sparse poly line_1p_2 step coeff_7 * z^7\n    let t170 = circuit_add(t168, t169); // Eval sparse poly line_1p_2 step + coeff_7 * z^7\n    let t171 = circuit_mul(t155, t4); // Eval sparse poly line_1p_2 step coeff_9 * z^9\n    let t172 = circuit_add(t170, t171); // Eval sparse poly line_1p_2 step + coeff_9 * z^9\n    let t173 = circuit_mul(t164, t172); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t174 = circuit_sub(t78, in41); // Fp2 sub coeff 0/1\n    let t175 = circuit_sub(t79, in42); // Fp2 sub coeff 1/1\n    let t176 = circuit_sub(t68, in39); // Fp2 sub coeff 0/1\n    let t177 = circuit_sub(t69, in40); // Fp2 sub coeff 1/1\n    let t178 = circuit_mul(t176, t176); // Fp2 Inv start\n    let t179 = circuit_mul(t177, t177);\n    let t180 = circuit_add(t178, t179);\n    let t181 = circuit_inverse(t180);\n    let t182 = circuit_mul(t176, t181); // Fp2 Inv real part end\n    let t183 = circuit_mul(t177, t181);\n    let t184 = circuit_sub(in4, t183); // Fp2 Inv imag part end\n    let t185 = circuit_mul(t174, t182); // Fp2 mul start\n    let t186 = circuit_mul(t175, t184);\n    let t187 = circuit_sub(t185, t186); // Fp2 mul real part end\n    let t188 = circuit_mul(t174, t184);\n    let t189 = circuit_mul(t175, t182);\n    let t190 = circuit_add(t188, t189); // Fp2 mul imag part end\n    let t191 = circuit_add(t187, t190);\n    let t192 = circuit_sub(t187, t190);\n    let t193 = circuit_mul(t191, t192);\n    let t194 = circuit_mul(t187, t190);\n    let t195 = circuit_add(t194, t194);\n    let t196 = circuit_add(t68, in39); // Fp2 add coeff 0/1\n    let t197 = circuit_add(t69, in40); // Fp2 add coeff 1/1\n    let t198 = circuit_sub(t193, t196); // Fp2 sub coeff 0/1\n    let t199 = circuit_sub(t195, t197); // Fp2 sub coeff 1/1\n    let t200 = circuit_mul(t187, t68); // Fp2 mul start\n    let t201 = circuit_mul(t190, t69);\n    let t202 = circuit_sub(t200, t201); // Fp2 mul real part end\n    let t203 = circuit_mul(t187, t69);\n    let t204 = circuit_mul(t190, t68);\n    let t205 = circuit_add(t203, t204); // Fp2 mul imag part end\n    let t206 = circuit_sub(t202, t78); // Fp2 sub coeff 0/1\n    let t207 = circuit_sub(t205, t79); // Fp2 sub coeff 1/1\n    let t208 = circuit_add(t78, t78); // Fp2 add coeff 0/1\n    let t209 = circuit_add(t79, t79); // Fp2 add coeff 1/1\n    let t210 = circuit_sub(t198, t68); // Fp2 sub coeff 0/1\n    let t211 = circuit_sub(t199, t69); // Fp2 sub coeff 1/1\n    let t212 = circuit_mul(t210, t210); // Fp2 Inv start\n    let t213 = circuit_mul(t211, t211);\n    let t214 = circuit_add(t212, t213);\n    let t215 = circuit_inverse(t214);\n    let t216 = circuit_mul(t210, t215); // Fp2 Inv real part end\n    let t217 = circuit_mul(t211, t215);\n    let t218 = circuit_sub(in4, t217); // Fp2 Inv imag part end\n    let t219 = circuit_mul(t208, t216); // Fp2 mul start\n    let t220 = circuit_mul(t209, t218);\n    let t221 = circuit_sub(t219, t220); // Fp2 mul real part end\n    let t222 = circuit_mul(t208, t218);\n    let t223 = circuit_mul(t209, t216);\n    let t224 = circuit_add(t222, t223); // Fp2 mul imag part end\n    let t225 = circuit_add(t187, t221); // Fp2 add coeff 0/1\n    let t226 = circuit_add(t190, t224); // Fp2 add coeff 1/1\n    let t227 = circuit_sub(in4, t225); // Fp2 neg coeff 0/1\n    let t228 = circuit_sub(in4, t226); // Fp2 neg coeff 1/1\n    let t229 = circuit_add(t227, t228);\n    let t230 = circuit_sub(t227, t228);\n    let t231 = circuit_mul(t229, t230);\n    let t232 = circuit_mul(t227, t228);\n    let t233 = circuit_add(t232, t232);\n    let t234 = circuit_sub(t231, t68); // Fp2 sub coeff 0/1\n    let t235 = circuit_sub(t233, t69); // Fp2 sub coeff 1/1\n    let t236 = circuit_sub(t234, t198); // Fp2 sub coeff 0/1\n    let t237 = circuit_sub(t235, t199); // Fp2 sub coeff 1/1\n    let t238 = circuit_sub(t68, t236); // Fp2 sub coeff 0/1\n    let t239 = circuit_sub(t69, t237); // Fp2 sub coeff 1/1\n    let t240 = circuit_mul(t227, t238); // Fp2 mul start\n    let t241 = circuit_mul(t228, t239);\n    let t242 = circuit_sub(t240, t241); // Fp2 mul real part end\n    let t243 = circuit_mul(t227, t239);\n    let t244 = circuit_mul(t228, t238);\n    let t245 = circuit_add(t243, t244); // Fp2 mul imag part end\n    let t246 = circuit_sub(t242, t78); // Fp2 sub coeff 0/1\n    let t247 = circuit_sub(t245, t79); // Fp2 sub coeff 1/1\n    let t248 = circuit_mul(t227, t68); // Fp2 mul start\n    let t249 = circuit_mul(t228, t69);\n    let t250 = circuit_sub(t248, t249); // Fp2 mul real part end\n    let t251 = circuit_mul(t227, t69);\n    let t252 = circuit_mul(t228, t68);\n    let t253 = circuit_add(t251, t252); // Fp2 mul imag part end\n    let t254 = circuit_sub(t250, t78); // Fp2 sub coeff 0/1\n    let t255 = circuit_sub(t253, t79); // Fp2 sub coeff 1/1\n    let t256 = circuit_mul(in0, t190);\n    let t257 = circuit_add(t187, t256);\n    let t258 = circuit_mul(t257, in34); // eval bn line by xNegOverY\n    let t259 = circuit_mul(in0, t207);\n    let t260 = circuit_add(t206, t259);\n    let t261 = circuit_mul(t260, in33); // eval bn line by yInv\n    let t262 = circuit_mul(t190, in34); // eval bn line by xNegOverY\n    let t263 = circuit_mul(t207, in33); // eval bn line by yInv\n    let t264 = circuit_mul(in0, t228);\n    let t265 = circuit_add(t227, t264);\n    let t266 = circuit_mul(t265, in34); // eval bn line by xNegOverY\n    let t267 = circuit_mul(in0, t255);\n    let t268 = circuit_add(t254, t267);\n    let t269 = circuit_mul(t268, in33); // eval bn line by yInv\n    let t270 = circuit_mul(t228, in34); // eval bn line by xNegOverY\n    let t271 = circuit_mul(t255, in33); // eval bn line by yInv\n    let t272 = circuit_mul(t258, in47); // Eval sparse poly line_2p_1 step coeff_1 * z^1\n    let t273 = circuit_add(in1, t272); // Eval sparse poly line_2p_1 step + coeff_1 * z^1\n    let t274 = circuit_mul(t261, t1); // Eval sparse poly line_2p_1 step coeff_3 * z^3\n    let t275 = circuit_add(t273, t274); // Eval sparse poly line_2p_1 step + coeff_3 * z^3\n    let t276 = circuit_mul(t262, t3); // Eval sparse poly line_2p_1 step coeff_7 * z^7\n    let t277 = circuit_add(t275, t276); // Eval sparse poly line_2p_1 step + coeff_7 * z^7\n    let t278 = circuit_mul(t263, t4); // Eval sparse poly line_2p_1 step coeff_9 * z^9\n    let t279 = circuit_add(t277, t278); // Eval sparse poly line_2p_1 step + coeff_9 * z^9\n    let t280 = circuit_mul(t173, t279); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t281 = circuit_mul(t266, in47); // Eval sparse poly line_2p_2 step coeff_1 * z^1\n    let t282 = circuit_add(in1, t281); // Eval sparse poly line_2p_2 step + coeff_1 * z^1\n    let t283 = circuit_mul(t269, t1); // Eval sparse poly line_2p_2 step coeff_3 * z^3\n    let t284 = circuit_add(t282, t283); // Eval sparse poly line_2p_2 step + coeff_3 * z^3\n    let t285 = circuit_mul(t270, t3); // Eval sparse poly line_2p_2 step coeff_7 * z^7\n    let t286 = circuit_add(t284, t285); // Eval sparse poly line_2p_2 step + coeff_7 * z^7\n    let t287 = circuit_mul(t271, t4); // Eval sparse poly line_2p_2 step coeff_9 * z^9\n    let t288 = circuit_add(t286, t287); // Eval sparse poly line_2p_2 step + coeff_9 * z^9\n    let t289 = circuit_mul(t280, t288); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t290 = circuit_mul(t289, in46);\n    let t291 = circuit_sub(t290, in45); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t292 = circuit_mul(in48, in43);\n    let t293 = circuit_add(t292, t291); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t236, t237, t246, t247, t293).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd3e, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in2\n    circuit_inputs = circuit_inputs.next_2([0x6, 0x0, 0x0, 0x0]); // in3\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in4\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in5\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_10.r0a0); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_10.r0a1); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_10.r1a0); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_10.r1a1); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_10.r0a0); // in15\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_10.r0a1); // in16\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_10.r1a0); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_10.r1a1); // in18\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in19\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in20\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in21\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in22\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in23\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in24\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_11.r0a0); // in25\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_11.r0a1); // in26\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_11.r1a0); // in27\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_11.r1a1); // in28\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_11.r0a0); // in29\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_11.r0a1); // in30\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_11.r1a0); // in31\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_11.r1a1); // in32\n    circuit_inputs = circuit_inputs.next_2(yInv_2); // in33\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_2); // in34\n    circuit_inputs = circuit_inputs.next_2(Q_2.x0); // in35\n    circuit_inputs = circuit_inputs.next_2(Q_2.x1); // in36\n    circuit_inputs = circuit_inputs.next_2(Q_2.y0); // in37\n    circuit_inputs = circuit_inputs.next_2(Q_2.y1); // in38\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.x0); // in39\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.x1); // in40\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.y0); // in41\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.y1); // in42\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in43\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in44\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in45\n    circuit_inputs = circuit_inputs.next_2(c_or_cinv_of_z); // in46\n    circuit_inputs = circuit_inputs.next_2(z); // in47\n    circuit_inputs = circuit_inputs.next_2(c1); // in48\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t236),\n        x1: outputs.get_output(t237),\n        y0: outputs.get_output(t246),\n        y1: outputs.get_output(t247),\n    };\n    let lhs_i_plus_one: u384 = outputs.get_output(t293);\n    return (Q0, lhs_i_plus_one);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_BIT10_2P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u288>,\n    G2_line_add_1_0: G2Line<u288>,\n    G2_line_dbl_0_0: G2Line<u288>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u288>,\n    G2_line_add_1_1: G2Line<u288>,\n    G2_line_dbl_0_1: G2Line<u288>,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    c_or_cinv_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (u384,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // -0x9 % p\n    let in1 = CE::<CI<1>> {}; // 0x1\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let (in23, in24, in25) = (CE::<CI<23>> {}, CE::<CI<24>> {}, CE::<CI<25>> {});\n    let (in26, in27, in28) = (CE::<CI<26>> {}, CE::<CI<27>> {}, CE::<CI<28>> {});\n    let (in29, in30, in31) = (CE::<CI<29>> {}, CE::<CI<30>> {}, CE::<CI<31>> {});\n    let (in32, in33, in34) = (CE::<CI<32>> {}, CE::<CI<33>> {}, CE::<CI<34>> {});\n    let in35 = CE::<CI<35>> {};\n    let t0 = circuit_mul(in34, in34); // compute z^2\n    let t1 = circuit_mul(t0, in34); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, in34); // compute z^7\n    let t4 = circuit_mul(t3, t0); // compute z^9\n    let t5 = circuit_mul(in31, in31); // Square f evaluation in Z, the result of previous bit.\n    let t6 = circuit_mul(in0, in5);\n    let t7 = circuit_add(in4, t6);\n    let t8 = circuit_mul(t7, in3); // eval bn line by xNegOverY\n    let t9 = circuit_mul(in0, in7);\n    let t10 = circuit_add(in6, t9);\n    let t11 = circuit_mul(t10, in2); // eval bn line by yInv\n    let t12 = circuit_mul(in5, in3); // eval bn line by xNegOverY\n    let t13 = circuit_mul(in7, in2); // eval bn line by yInv\n    let t14 = circuit_mul(in0, in9);\n    let t15 = circuit_add(in8, t14);\n    let t16 = circuit_mul(t15, in3); // eval bn line by xNegOverY\n    let t17 = circuit_mul(in0, in11);\n    let t18 = circuit_add(in10, t17);\n    let t19 = circuit_mul(t18, in2); // eval bn line by yInv\n    let t20 = circuit_mul(in9, in3); // eval bn line by xNegOverY\n    let t21 = circuit_mul(in11, in2); // eval bn line by yInv\n    let t22 = circuit_mul(t8, in34); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t23 = circuit_add(in1, t22); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t24 = circuit_mul(t11, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t25 = circuit_add(t23, t24); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t26 = circuit_mul(t12, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t27 = circuit_add(t25, t26); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t28 = circuit_mul(t13, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t29 = circuit_add(t27, t28); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t30 = circuit_mul(t5, t29); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t31 = circuit_mul(t16, in34); // Eval sparse poly line_0p_2 step coeff_1 * z^1\n    let t32 = circuit_add(in1, t31); // Eval sparse poly line_0p_2 step + coeff_1 * z^1\n    let t33 = circuit_mul(t19, t1); // Eval sparse poly line_0p_2 step coeff_3 * z^3\n    let t34 = circuit_add(t32, t33); // Eval sparse poly line_0p_2 step + coeff_3 * z^3\n    let t35 = circuit_mul(t20, t3); // Eval sparse poly line_0p_2 step coeff_7 * z^7\n    let t36 = circuit_add(t34, t35); // Eval sparse poly line_0p_2 step + coeff_7 * z^7\n    let t37 = circuit_mul(t21, t4); // Eval sparse poly line_0p_2 step coeff_9 * z^9\n    let t38 = circuit_add(t36, t37); // Eval sparse poly line_0p_2 step + coeff_9 * z^9\n    let t39 = circuit_mul(t30, t38); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t40 = circuit_mul(in0, in13);\n    let t41 = circuit_add(in12, t40);\n    let t42 = circuit_mul(t41, in17); // eval bn line by xNegOverY\n    let t43 = circuit_mul(in0, in15);\n    let t44 = circuit_add(in14, t43);\n    let t45 = circuit_mul(t44, in16); // eval bn line by yInv\n    let t46 = circuit_mul(in13, in17); // eval bn line by xNegOverY\n    let t47 = circuit_mul(in15, in16); // eval bn line by yInv\n    let t48 = circuit_mul(in0, in19);\n    let t49 = circuit_add(in18, t48);\n    let t50 = circuit_mul(t49, in17); // eval bn line by xNegOverY\n    let t51 = circuit_mul(in0, in21);\n    let t52 = circuit_add(in20, t51);\n    let t53 = circuit_mul(t52, in16); // eval bn line by yInv\n    let t54 = circuit_mul(in19, in17); // eval bn line by xNegOverY\n    let t55 = circuit_mul(in21, in16); // eval bn line by yInv\n    let t56 = circuit_mul(t42, in34); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t57 = circuit_add(in1, t56); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t58 = circuit_mul(t45, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t59 = circuit_add(t57, t58); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t60 = circuit_mul(t46, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t61 = circuit_add(t59, t60); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t62 = circuit_mul(t47, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t63 = circuit_add(t61, t62); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t64 = circuit_mul(t39, t63); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t65 = circuit_mul(t50, in34); // Eval sparse poly line_1p_2 step coeff_1 * z^1\n    let t66 = circuit_add(in1, t65); // Eval sparse poly line_1p_2 step + coeff_1 * z^1\n    let t67 = circuit_mul(t53, t1); // Eval sparse poly line_1p_2 step coeff_3 * z^3\n    let t68 = circuit_add(t66, t67); // Eval sparse poly line_1p_2 step + coeff_3 * z^3\n    let t69 = circuit_mul(t54, t3); // Eval sparse poly line_1p_2 step coeff_7 * z^7\n    let t70 = circuit_add(t68, t69); // Eval sparse poly line_1p_2 step + coeff_7 * z^7\n    let t71 = circuit_mul(t55, t4); // Eval sparse poly line_1p_2 step coeff_9 * z^9\n    let t72 = circuit_add(t70, t71); // Eval sparse poly line_1p_2 step + coeff_9 * z^9\n    let t73 = circuit_mul(t64, t72); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t74 = circuit_mul(\n        t73, t73,\n    ); // Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\n    let t75 = circuit_mul(in0, in23);\n    let t76 = circuit_add(in22, t75);\n    let t77 = circuit_mul(t76, in3); // eval bn line by xNegOverY\n    let t78 = circuit_mul(in0, in25);\n    let t79 = circuit_add(in24, t78);\n    let t80 = circuit_mul(t79, in2); // eval bn line by yInv\n    let t81 = circuit_mul(in23, in3); // eval bn line by xNegOverY\n    let t82 = circuit_mul(in25, in2); // eval bn line by yInv\n    let t83 = circuit_mul(t77, in34); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t84 = circuit_add(in1, t83); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t85 = circuit_mul(t80, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t86 = circuit_add(t84, t85); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t87 = circuit_mul(t81, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t88 = circuit_add(t86, t87); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t89 = circuit_mul(t82, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t90 = circuit_add(t88, t89); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t91 = circuit_mul(t74, t90); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t92 = circuit_mul(in0, in27);\n    let t93 = circuit_add(in26, t92);\n    let t94 = circuit_mul(t93, in17); // eval bn line by xNegOverY\n    let t95 = circuit_mul(in0, in29);\n    let t96 = circuit_add(in28, t95);\n    let t97 = circuit_mul(t96, in16); // eval bn line by yInv\n    let t98 = circuit_mul(in27, in17); // eval bn line by xNegOverY\n    let t99 = circuit_mul(in29, in16); // eval bn line by yInv\n    let t100 = circuit_mul(t94, in34); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t101 = circuit_add(in1, t100); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t102 = circuit_mul(t97, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t103 = circuit_add(t101, t102); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t104 = circuit_mul(t98, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t105 = circuit_add(t103, t104); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t106 = circuit_mul(t99, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t107 = circuit_add(t105, t106); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t108 = circuit_mul(t91, t107); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t109 = circuit_mul(in33, in33);\n    let t110 = circuit_mul(t108, t109);\n    let t111 = circuit_sub(t110, in32); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t112 = circuit_mul(in35, in30);\n    let t113 = circuit_add(t112, t111); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t113,).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd3e, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in2\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in3\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_0.r0a0); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_0.r0a1); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_0.r1a0); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_0.r1a1); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_0.r0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_0.r0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_0.r1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_0.r1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in16\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in18\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in19\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in20\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in21\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_1.r0a0); // in22\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_1.r0a1); // in23\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_1.r1a0); // in24\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_1.r1a1); // in25\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_1.r0a0); // in26\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_1.r0a1); // in27\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_1.r1a0); // in28\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_1.r1a1); // in29\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in30\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in31\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in32\n    circuit_inputs = circuit_inputs.next_2(c_or_cinv_of_z); // in33\n    circuit_inputs = circuit_inputs.next_2(z); // in34\n    circuit_inputs = circuit_inputs.next_2(c1); // in35\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let lhs_i_plus_one: u384 = outputs.get_output(t113);\n    return (lhs_i_plus_one,);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_BIT10_3P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_dbl_0: G2Line<u288>,\n    G2_line_add_1_0: G2Line<u288>,\n    G2_line_dbl_0_0: G2Line<u288>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_dbl_1: G2Line<u288>,\n    G2_line_add_1_1: G2Line<u288>,\n    G2_line_dbl_0_1: G2Line<u288>,\n    yInv_2: u384,\n    xNegOverY_2: u384,\n    Q_2: G2Point,\n    Q_or_Q_neg_2: G2Point,\n    lhs_i: u384,\n    f_i_of_z: u384,\n    f_i_plus_one_of_z: u384,\n    c_or_cinv_of_z: u384,\n    z: u384,\n    c1: u384,\n) -> (G2Point, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // -0x9 % p\n    let in1 = CE::<CI<1>> {}; // 0x1\n    let in2 = CE::<CI<2>> {}; // 0x0\n    let in3 = CE::<CI<3>> {}; // 0x3\n    let in4 = CE::<CI<4>> {}; // 0x6\n\n    // INPUT stack\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let (in23, in24, in25) = (CE::<CI<23>> {}, CE::<CI<24>> {}, CE::<CI<25>> {});\n    let (in26, in27, in28) = (CE::<CI<26>> {}, CE::<CI<27>> {}, CE::<CI<28>> {});\n    let (in29, in30, in31) = (CE::<CI<29>> {}, CE::<CI<30>> {}, CE::<CI<31>> {});\n    let (in32, in33, in34) = (CE::<CI<32>> {}, CE::<CI<33>> {}, CE::<CI<34>> {});\n    let (in35, in36, in37) = (CE::<CI<35>> {}, CE::<CI<36>> {}, CE::<CI<37>> {});\n    let (in38, in39, in40) = (CE::<CI<38>> {}, CE::<CI<39>> {}, CE::<CI<40>> {});\n    let (in41, in42, in43) = (CE::<CI<41>> {}, CE::<CI<42>> {}, CE::<CI<43>> {});\n    let (in44, in45, in46) = (CE::<CI<44>> {}, CE::<CI<45>> {}, CE::<CI<46>> {});\n    let (in47, in48) = (CE::<CI<47>> {}, CE::<CI<48>> {});\n    let t0 = circuit_mul(in47, in47); // compute z^2\n    let t1 = circuit_mul(t0, in47); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, in47); // compute z^7\n    let t4 = circuit_mul(t3, t0); // compute z^9\n    let t5 = circuit_mul(in44, in44); // Square f evaluation in Z, the result of previous bit.\n    let t6 = circuit_mul(in0, in8);\n    let t7 = circuit_add(in7, t6);\n    let t8 = circuit_mul(t7, in6); // eval bn line by xNegOverY\n    let t9 = circuit_mul(in0, in10);\n    let t10 = circuit_add(in9, t9);\n    let t11 = circuit_mul(t10, in5); // eval bn line by yInv\n    let t12 = circuit_mul(in8, in6); // eval bn line by xNegOverY\n    let t13 = circuit_mul(in10, in5); // eval bn line by yInv\n    let t14 = circuit_mul(in0, in12);\n    let t15 = circuit_add(in11, t14);\n    let t16 = circuit_mul(t15, in6); // eval bn line by xNegOverY\n    let t17 = circuit_mul(in0, in14);\n    let t18 = circuit_add(in13, t17);\n    let t19 = circuit_mul(t18, in5); // eval bn line by yInv\n    let t20 = circuit_mul(in12, in6); // eval bn line by xNegOverY\n    let t21 = circuit_mul(in14, in5); // eval bn line by yInv\n    let t22 = circuit_mul(t8, in47); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t23 = circuit_add(in1, t22); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t24 = circuit_mul(t11, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t25 = circuit_add(t23, t24); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t26 = circuit_mul(t12, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t27 = circuit_add(t25, t26); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t28 = circuit_mul(t13, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t29 = circuit_add(t27, t28); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t30 = circuit_mul(t5, t29); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t31 = circuit_mul(t16, in47); // Eval sparse poly line_0p_2 step coeff_1 * z^1\n    let t32 = circuit_add(in1, t31); // Eval sparse poly line_0p_2 step + coeff_1 * z^1\n    let t33 = circuit_mul(t19, t1); // Eval sparse poly line_0p_2 step coeff_3 * z^3\n    let t34 = circuit_add(t32, t33); // Eval sparse poly line_0p_2 step + coeff_3 * z^3\n    let t35 = circuit_mul(t20, t3); // Eval sparse poly line_0p_2 step coeff_7 * z^7\n    let t36 = circuit_add(t34, t35); // Eval sparse poly line_0p_2 step + coeff_7 * z^7\n    let t37 = circuit_mul(t21, t4); // Eval sparse poly line_0p_2 step coeff_9 * z^9\n    let t38 = circuit_add(t36, t37); // Eval sparse poly line_0p_2 step + coeff_9 * z^9\n    let t39 = circuit_mul(t30, t38); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t40 = circuit_mul(in0, in16);\n    let t41 = circuit_add(in15, t40);\n    let t42 = circuit_mul(t41, in20); // eval bn line by xNegOverY\n    let t43 = circuit_mul(in0, in18);\n    let t44 = circuit_add(in17, t43);\n    let t45 = circuit_mul(t44, in19); // eval bn line by yInv\n    let t46 = circuit_mul(in16, in20); // eval bn line by xNegOverY\n    let t47 = circuit_mul(in18, in19); // eval bn line by yInv\n    let t48 = circuit_mul(in0, in22);\n    let t49 = circuit_add(in21, t48);\n    let t50 = circuit_mul(t49, in20); // eval bn line by xNegOverY\n    let t51 = circuit_mul(in0, in24);\n    let t52 = circuit_add(in23, t51);\n    let t53 = circuit_mul(t52, in19); // eval bn line by yInv\n    let t54 = circuit_mul(in22, in20); // eval bn line by xNegOverY\n    let t55 = circuit_mul(in24, in19); // eval bn line by yInv\n    let t56 = circuit_mul(t42, in47); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t57 = circuit_add(in1, t56); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t58 = circuit_mul(t45, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t59 = circuit_add(t57, t58); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t60 = circuit_mul(t46, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t61 = circuit_add(t59, t60); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t62 = circuit_mul(t47, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t63 = circuit_add(t61, t62); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t64 = circuit_mul(t39, t63); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t65 = circuit_mul(t50, in47); // Eval sparse poly line_1p_2 step coeff_1 * z^1\n    let t66 = circuit_add(in1, t65); // Eval sparse poly line_1p_2 step + coeff_1 * z^1\n    let t67 = circuit_mul(t53, t1); // Eval sparse poly line_1p_2 step coeff_3 * z^3\n    let t68 = circuit_add(t66, t67); // Eval sparse poly line_1p_2 step + coeff_3 * z^3\n    let t69 = circuit_mul(t54, t3); // Eval sparse poly line_1p_2 step coeff_7 * z^7\n    let t70 = circuit_add(t68, t69); // Eval sparse poly line_1p_2 step + coeff_7 * z^7\n    let t71 = circuit_mul(t55, t4); // Eval sparse poly line_1p_2 step coeff_9 * z^9\n    let t72 = circuit_add(t70, t71); // Eval sparse poly line_1p_2 step + coeff_9 * z^9\n    let t73 = circuit_mul(t64, t72); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t74 = circuit_sub(in37, in41); // Fp2 sub coeff 0/1\n    let t75 = circuit_sub(in38, in42); // Fp2 sub coeff 1/1\n    let t76 = circuit_sub(in35, in39); // Fp2 sub coeff 0/1\n    let t77 = circuit_sub(in36, in40); // Fp2 sub coeff 1/1\n    let t78 = circuit_mul(t76, t76); // Fp2 Inv start\n    let t79 = circuit_mul(t77, t77);\n    let t80 = circuit_add(t78, t79);\n    let t81 = circuit_inverse(t80);\n    let t82 = circuit_mul(t76, t81); // Fp2 Inv real part end\n    let t83 = circuit_mul(t77, t81);\n    let t84 = circuit_sub(in2, t83); // Fp2 Inv imag part end\n    let t85 = circuit_mul(t74, t82); // Fp2 mul start\n    let t86 = circuit_mul(t75, t84);\n    let t87 = circuit_sub(t85, t86); // Fp2 mul real part end\n    let t88 = circuit_mul(t74, t84);\n    let t89 = circuit_mul(t75, t82);\n    let t90 = circuit_add(t88, t89); // Fp2 mul imag part end\n    let t91 = circuit_add(t87, t90);\n    let t92 = circuit_sub(t87, t90);\n    let t93 = circuit_mul(t91, t92);\n    let t94 = circuit_mul(t87, t90);\n    let t95 = circuit_add(t94, t94);\n    let t96 = circuit_add(in35, in39); // Fp2 add coeff 0/1\n    let t97 = circuit_add(in36, in40); // Fp2 add coeff 1/1\n    let t98 = circuit_sub(t93, t96); // Fp2 sub coeff 0/1\n    let t99 = circuit_sub(t95, t97); // Fp2 sub coeff 1/1\n    let t100 = circuit_mul(t87, in35); // Fp2 mul start\n    let t101 = circuit_mul(t90, in36);\n    let t102 = circuit_sub(t100, t101); // Fp2 mul real part end\n    let t103 = circuit_mul(t87, in36);\n    let t104 = circuit_mul(t90, in35);\n    let t105 = circuit_add(t103, t104); // Fp2 mul imag part end\n    let t106 = circuit_sub(t102, in37); // Fp2 sub coeff 0/1\n    let t107 = circuit_sub(t105, in38); // Fp2 sub coeff 1/1\n    let t108 = circuit_add(in37, in37); // Fp2 add coeff 0/1\n    let t109 = circuit_add(in38, in38); // Fp2 add coeff 1/1\n    let t110 = circuit_sub(t98, in35); // Fp2 sub coeff 0/1\n    let t111 = circuit_sub(t99, in36); // Fp2 sub coeff 1/1\n    let t112 = circuit_mul(t110, t110); // Fp2 Inv start\n    let t113 = circuit_mul(t111, t111);\n    let t114 = circuit_add(t112, t113);\n    let t115 = circuit_inverse(t114);\n    let t116 = circuit_mul(t110, t115); // Fp2 Inv real part end\n    let t117 = circuit_mul(t111, t115);\n    let t118 = circuit_sub(in2, t117); // Fp2 Inv imag part end\n    let t119 = circuit_mul(t108, t116); // Fp2 mul start\n    let t120 = circuit_mul(t109, t118);\n    let t121 = circuit_sub(t119, t120); // Fp2 mul real part end\n    let t122 = circuit_mul(t108, t118);\n    let t123 = circuit_mul(t109, t116);\n    let t124 = circuit_add(t122, t123); // Fp2 mul imag part end\n    let t125 = circuit_add(t87, t121); // Fp2 add coeff 0/1\n    let t126 = circuit_add(t90, t124); // Fp2 add coeff 1/1\n    let t127 = circuit_sub(in2, t125); // Fp2 neg coeff 0/1\n    let t128 = circuit_sub(in2, t126); // Fp2 neg coeff 1/1\n    let t129 = circuit_add(t127, t128);\n    let t130 = circuit_sub(t127, t128);\n    let t131 = circuit_mul(t129, t130);\n    let t132 = circuit_mul(t127, t128);\n    let t133 = circuit_add(t132, t132);\n    let t134 = circuit_sub(t131, in35); // Fp2 sub coeff 0/1\n    let t135 = circuit_sub(t133, in36); // Fp2 sub coeff 1/1\n    let t136 = circuit_sub(t134, t98); // Fp2 sub coeff 0/1\n    let t137 = circuit_sub(t135, t99); // Fp2 sub coeff 1/1\n    let t138 = circuit_sub(in35, t136); // Fp2 sub coeff 0/1\n    let t139 = circuit_sub(in36, t137); // Fp2 sub coeff 1/1\n    let t140 = circuit_mul(t127, t138); // Fp2 mul start\n    let t141 = circuit_mul(t128, t139);\n    let t142 = circuit_sub(t140, t141); // Fp2 mul real part end\n    let t143 = circuit_mul(t127, t139);\n    let t144 = circuit_mul(t128, t138);\n    let t145 = circuit_add(t143, t144); // Fp2 mul imag part end\n    let t146 = circuit_sub(t142, in37); // Fp2 sub coeff 0/1\n    let t147 = circuit_sub(t145, in38); // Fp2 sub coeff 1/1\n    let t148 = circuit_mul(t127, in35); // Fp2 mul start\n    let t149 = circuit_mul(t128, in36);\n    let t150 = circuit_sub(t148, t149); // Fp2 mul real part end\n    let t151 = circuit_mul(t127, in36);\n    let t152 = circuit_mul(t128, in35);\n    let t153 = circuit_add(t151, t152); // Fp2 mul imag part end\n    let t154 = circuit_sub(t150, in37); // Fp2 sub coeff 0/1\n    let t155 = circuit_sub(t153, in38); // Fp2 sub coeff 1/1\n    let t156 = circuit_mul(in0, t90);\n    let t157 = circuit_add(t87, t156);\n    let t158 = circuit_mul(t157, in34); // eval bn line by xNegOverY\n    let t159 = circuit_mul(in0, t107);\n    let t160 = circuit_add(t106, t159);\n    let t161 = circuit_mul(t160, in33); // eval bn line by yInv\n    let t162 = circuit_mul(t90, in34); // eval bn line by xNegOverY\n    let t163 = circuit_mul(t107, in33); // eval bn line by yInv\n    let t164 = circuit_mul(in0, t128);\n    let t165 = circuit_add(t127, t164);\n    let t166 = circuit_mul(t165, in34); // eval bn line by xNegOverY\n    let t167 = circuit_mul(in0, t155);\n    let t168 = circuit_add(t154, t167);\n    let t169 = circuit_mul(t168, in33); // eval bn line by yInv\n    let t170 = circuit_mul(t128, in34); // eval bn line by xNegOverY\n    let t171 = circuit_mul(t155, in33); // eval bn line by yInv\n    let t172 = circuit_mul(t158, in47); // Eval sparse poly line_2p_1 step coeff_1 * z^1\n    let t173 = circuit_add(in1, t172); // Eval sparse poly line_2p_1 step + coeff_1 * z^1\n    let t174 = circuit_mul(t161, t1); // Eval sparse poly line_2p_1 step coeff_3 * z^3\n    let t175 = circuit_add(t173, t174); // Eval sparse poly line_2p_1 step + coeff_3 * z^3\n    let t176 = circuit_mul(t162, t3); // Eval sparse poly line_2p_1 step coeff_7 * z^7\n    let t177 = circuit_add(t175, t176); // Eval sparse poly line_2p_1 step + coeff_7 * z^7\n    let t178 = circuit_mul(t163, t4); // Eval sparse poly line_2p_1 step coeff_9 * z^9\n    let t179 = circuit_add(t177, t178); // Eval sparse poly line_2p_1 step + coeff_9 * z^9\n    let t180 = circuit_mul(t73, t179); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t181 = circuit_mul(t166, in47); // Eval sparse poly line_2p_2 step coeff_1 * z^1\n    let t182 = circuit_add(in1, t181); // Eval sparse poly line_2p_2 step + coeff_1 * z^1\n    let t183 = circuit_mul(t169, t1); // Eval sparse poly line_2p_2 step coeff_3 * z^3\n    let t184 = circuit_add(t182, t183); // Eval sparse poly line_2p_2 step + coeff_3 * z^3\n    let t185 = circuit_mul(t170, t3); // Eval sparse poly line_2p_2 step coeff_7 * z^7\n    let t186 = circuit_add(t184, t185); // Eval sparse poly line_2p_2 step + coeff_7 * z^7\n    let t187 = circuit_mul(t171, t4); // Eval sparse poly line_2p_2 step coeff_9 * z^9\n    let t188 = circuit_add(t186, t187); // Eval sparse poly line_2p_2 step + coeff_9 * z^9\n    let t189 = circuit_mul(t180, t188); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t190 = circuit_mul(\n        t189, t189,\n    ); // Compute (f^2 * Π(i,k) (line_i,k(z))) ^ 2 = f^4 * (Π(i,k) (line_i,k(z)))^2\n    let t191 = circuit_mul(in0, in26);\n    let t192 = circuit_add(in25, t191);\n    let t193 = circuit_mul(t192, in6); // eval bn line by xNegOverY\n    let t194 = circuit_mul(in0, in28);\n    let t195 = circuit_add(in27, t194);\n    let t196 = circuit_mul(t195, in5); // eval bn line by yInv\n    let t197 = circuit_mul(in26, in6); // eval bn line by xNegOverY\n    let t198 = circuit_mul(in28, in5); // eval bn line by yInv\n    let t199 = circuit_mul(t193, in47); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t200 = circuit_add(in1, t199); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t201 = circuit_mul(t196, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t202 = circuit_add(t200, t201); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t203 = circuit_mul(t197, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t204 = circuit_add(t202, t203); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t205 = circuit_mul(t198, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t206 = circuit_add(t204, t205); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t207 = circuit_mul(t190, t206); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_0(z)\n    let t208 = circuit_mul(in0, in30);\n    let t209 = circuit_add(in29, t208);\n    let t210 = circuit_mul(t209, in20); // eval bn line by xNegOverY\n    let t211 = circuit_mul(in0, in32);\n    let t212 = circuit_add(in31, t211);\n    let t213 = circuit_mul(t212, in19); // eval bn line by yInv\n    let t214 = circuit_mul(in30, in20); // eval bn line by xNegOverY\n    let t215 = circuit_mul(in32, in19); // eval bn line by yInv\n    let t216 = circuit_mul(t210, in47); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t217 = circuit_add(in1, t216); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t218 = circuit_mul(t213, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t219 = circuit_add(t217, t218); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t220 = circuit_mul(t214, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t221 = circuit_add(t219, t220); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t222 = circuit_mul(t215, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t223 = circuit_add(t221, t222); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t224 = circuit_mul(t207, t223); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_1(z)\n    let t225 = circuit_add(t136, t137); // Doubling slope numerator start\n    let t226 = circuit_sub(t136, t137);\n    let t227 = circuit_mul(t225, t226);\n    let t228 = circuit_mul(t136, t137);\n    let t229 = circuit_mul(t227, in3);\n    let t230 = circuit_mul(t228, in4); // Doubling slope numerator end\n    let t231 = circuit_add(t146, t146); // Fp2 add coeff 0/1\n    let t232 = circuit_add(t147, t147); // Fp2 add coeff 1/1\n    let t233 = circuit_mul(t231, t231); // Fp2 Inv start\n    let t234 = circuit_mul(t232, t232);\n    let t235 = circuit_add(t233, t234);\n    let t236 = circuit_inverse(t235);\n    let t237 = circuit_mul(t231, t236); // Fp2 Inv real part end\n    let t238 = circuit_mul(t232, t236);\n    let t239 = circuit_sub(in2, t238); // Fp2 Inv imag part end\n    let t240 = circuit_mul(t229, t237); // Fp2 mul start\n    let t241 = circuit_mul(t230, t239);\n    let t242 = circuit_sub(t240, t241); // Fp2 mul real part end\n    let t243 = circuit_mul(t229, t239);\n    let t244 = circuit_mul(t230, t237);\n    let t245 = circuit_add(t243, t244); // Fp2 mul imag part end\n    let t246 = circuit_add(t242, t245);\n    let t247 = circuit_sub(t242, t245);\n    let t248 = circuit_mul(t246, t247);\n    let t249 = circuit_mul(t242, t245);\n    let t250 = circuit_add(t249, t249);\n    let t251 = circuit_add(t136, t136); // Fp2 add coeff 0/1\n    let t252 = circuit_add(t137, t137); // Fp2 add coeff 1/1\n    let t253 = circuit_sub(t248, t251); // Fp2 sub coeff 0/1\n    let t254 = circuit_sub(t250, t252); // Fp2 sub coeff 1/1\n    let t255 = circuit_sub(t136, t253); // Fp2 sub coeff 0/1\n    let t256 = circuit_sub(t137, t254); // Fp2 sub coeff 1/1\n    let t257 = circuit_mul(t242, t255); // Fp2 mul start\n    let t258 = circuit_mul(t245, t256);\n    let t259 = circuit_sub(t257, t258); // Fp2 mul real part end\n    let t260 = circuit_mul(t242, t256);\n    let t261 = circuit_mul(t245, t255);\n    let t262 = circuit_add(t260, t261); // Fp2 mul imag part end\n    let t263 = circuit_sub(t259, t146); // Fp2 sub coeff 0/1\n    let t264 = circuit_sub(t262, t147); // Fp2 sub coeff 1/1\n    let t265 = circuit_mul(t242, t136); // Fp2 mul start\n    let t266 = circuit_mul(t245, t137);\n    let t267 = circuit_sub(t265, t266); // Fp2 mul real part end\n    let t268 = circuit_mul(t242, t137);\n    let t269 = circuit_mul(t245, t136);\n    let t270 = circuit_add(t268, t269); // Fp2 mul imag part end\n    let t271 = circuit_sub(t267, t146); // Fp2 sub coeff 0/1\n    let t272 = circuit_sub(t270, t147); // Fp2 sub coeff 1/1\n    let t273 = circuit_mul(in0, t245);\n    let t274 = circuit_add(t242, t273);\n    let t275 = circuit_mul(t274, in34); // eval bn line by xNegOverY\n    let t276 = circuit_mul(in0, t272);\n    let t277 = circuit_add(t271, t276);\n    let t278 = circuit_mul(t277, in33); // eval bn line by yInv\n    let t279 = circuit_mul(t245, in34); // eval bn line by xNegOverY\n    let t280 = circuit_mul(t272, in33); // eval bn line by yInv\n    let t281 = circuit_mul(t275, in47); // Eval sparse poly line_2p_1 step coeff_1 * z^1\n    let t282 = circuit_add(in1, t281); // Eval sparse poly line_2p_1 step + coeff_1 * z^1\n    let t283 = circuit_mul(t278, t1); // Eval sparse poly line_2p_1 step coeff_3 * z^3\n    let t284 = circuit_add(t282, t283); // Eval sparse poly line_2p_1 step + coeff_3 * z^3\n    let t285 = circuit_mul(t279, t3); // Eval sparse poly line_2p_1 step coeff_7 * z^7\n    let t286 = circuit_add(t284, t285); // Eval sparse poly line_2p_1 step + coeff_7 * z^7\n    let t287 = circuit_mul(t280, t4); // Eval sparse poly line_2p_1 step coeff_9 * z^9\n    let t288 = circuit_add(t286, t287); // Eval sparse poly line_2p_1 step + coeff_9 * z^9\n    let t289 = circuit_mul(t224, t288); // Mul (f(z)^2 * Π_0_k-1(line_k(z))) * line_i_2(z)\n    let t290 = circuit_mul(in46, in46);\n    let t291 = circuit_mul(t289, t290);\n    let t292 = circuit_sub(t291, in45); // (Π(i,k) (Pk(z))) - Ri(z)\n    let t293 = circuit_mul(in48, in43);\n    let t294 = circuit_add(t293, t292); // LHS = c1 * LHS + ((Π(i,k) (Pk(z)) - Ri(z))\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t253, t254, t263, t264, t294).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd3e, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in2\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in3\n    circuit_inputs = circuit_inputs.next_2([0x6, 0x0, 0x0, 0x0]); // in4\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in5\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a0); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r0a1); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a0); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0.r1a1); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_0.r0a0); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_0.r0a1); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_0.r1a0); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_0.r1a1); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_0.r0a0); // in15\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_0.r0a1); // in16\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_0.r1a0); // in17\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_0.r1a1); // in18\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in19\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in20\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a0); // in21\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r0a1); // in22\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a0); // in23\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_1.r1a1); // in24\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_1.r0a0); // in25\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_1.r0a1); // in26\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_1.r1a0); // in27\n    circuit_inputs = circuit_inputs.next_2(G2_line_add_1_1.r1a1); // in28\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_1.r0a0); // in29\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_1.r0a1); // in30\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_1.r1a0); // in31\n    circuit_inputs = circuit_inputs.next_2(G2_line_dbl_0_1.r1a1); // in32\n    circuit_inputs = circuit_inputs.next_2(yInv_2); // in33\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_2); // in34\n    circuit_inputs = circuit_inputs.next_2(Q_2.x0); // in35\n    circuit_inputs = circuit_inputs.next_2(Q_2.x1); // in36\n    circuit_inputs = circuit_inputs.next_2(Q_2.y0); // in37\n    circuit_inputs = circuit_inputs.next_2(Q_2.y1); // in38\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.x0); // in39\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.x1); // in40\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.y0); // in41\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_2.y1); // in42\n    circuit_inputs = circuit_inputs.next_2(lhs_i); // in43\n    circuit_inputs = circuit_inputs.next_2(f_i_of_z); // in44\n    circuit_inputs = circuit_inputs.next_2(f_i_plus_one_of_z); // in45\n    circuit_inputs = circuit_inputs.next_2(c_or_cinv_of_z); // in46\n    circuit_inputs = circuit_inputs.next_2(z); // in47\n    circuit_inputs = circuit_inputs.next_2(c1); // in48\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t253),\n        x1: outputs.get_output(t254),\n        y0: outputs.get_output(t263),\n        y1: outputs.get_output(t264),\n    };\n    let lhs_i_plus_one: u384 = outputs.get_output(t294);\n    return (Q0, lhs_i_plus_one);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_FINALIZE_2P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    line_1_0: G2Line<u288>,\n    line_2_0: G2Line<u288>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    line_1_1: G2Line<u288>,\n    line_2_1: G2Line<u288>,\n    R_n_minus_2_of_z: u384,\n    R_n_minus_1_of_z: u384,\n    c_0: u384,\n    w_of_z: u384,\n    z: u384,\n    c_inv_frob_1_of_z: u384,\n    c_frob_2_of_z: u384,\n    c_inv_frob_3_of_z: u384,\n    previous_lhs: u384,\n    R_n_minus_3_of_z: u384,\n    Q: Array<u288>,\n) -> (u384,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // -0x9 % p\n    let in1 = CE::<CI<1>> {}; // 0x1\n    let in2 = CE::<CI<2>> {}; // 0x52\n    let in3 = CE::<CI<3>> {}; // -0x12 % p\n\n    // INPUT stack\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8, in9) = (CE::<CI<7>> {}, CE::<CI<8>> {}, CE::<CI<9>> {});\n    let (in10, in11, in12) = (CE::<CI<10>> {}, CE::<CI<11>> {}, CE::<CI<12>> {});\n    let (in13, in14, in15) = (CE::<CI<13>> {}, CE::<CI<14>> {}, CE::<CI<15>> {});\n    let (in16, in17, in18) = (CE::<CI<16>> {}, CE::<CI<17>> {}, CE::<CI<18>> {});\n    let (in19, in20, in21) = (CE::<CI<19>> {}, CE::<CI<20>> {}, CE::<CI<21>> {});\n    let (in22, in23, in24) = (CE::<CI<22>> {}, CE::<CI<23>> {}, CE::<CI<24>> {});\n    let (in25, in26, in27) = (CE::<CI<25>> {}, CE::<CI<26>> {}, CE::<CI<27>> {});\n    let (in28, in29, in30) = (CE::<CI<28>> {}, CE::<CI<29>> {}, CE::<CI<30>> {});\n    let (in31, in32, in33) = (CE::<CI<31>> {}, CE::<CI<32>> {}, CE::<CI<33>> {});\n    let (in34, in35, in36) = (CE::<CI<34>> {}, CE::<CI<35>> {}, CE::<CI<36>> {});\n    let (in37, in38, in39) = (CE::<CI<37>> {}, CE::<CI<38>> {}, CE::<CI<39>> {});\n    let (in40, in41, in42) = (CE::<CI<40>> {}, CE::<CI<41>> {}, CE::<CI<42>> {});\n    let (in43, in44, in45) = (CE::<CI<43>> {}, CE::<CI<44>> {}, CE::<CI<45>> {});\n    let (in46, in47, in48) = (CE::<CI<46>> {}, CE::<CI<47>> {}, CE::<CI<48>> {});\n    let (in49, in50, in51) = (CE::<CI<49>> {}, CE::<CI<50>> {}, CE::<CI<51>> {});\n    let (in52, in53, in54) = (CE::<CI<52>> {}, CE::<CI<53>> {}, CE::<CI<54>> {});\n    let (in55, in56, in57) = (CE::<CI<55>> {}, CE::<CI<56>> {}, CE::<CI<57>> {});\n    let (in58, in59, in60) = (CE::<CI<58>> {}, CE::<CI<59>> {}, CE::<CI<60>> {});\n    let (in61, in62, in63) = (CE::<CI<61>> {}, CE::<CI<62>> {}, CE::<CI<63>> {});\n    let (in64, in65, in66) = (CE::<CI<64>> {}, CE::<CI<65>> {}, CE::<CI<66>> {});\n    let (in67, in68, in69) = (CE::<CI<67>> {}, CE::<CI<68>> {}, CE::<CI<69>> {});\n    let (in70, in71, in72) = (CE::<CI<70>> {}, CE::<CI<71>> {}, CE::<CI<72>> {});\n    let (in73, in74, in75) = (CE::<CI<73>> {}, CE::<CI<74>> {}, CE::<CI<75>> {});\n    let (in76, in77, in78) = (CE::<CI<76>> {}, CE::<CI<77>> {}, CE::<CI<78>> {});\n    let (in79, in80, in81) = (CE::<CI<79>> {}, CE::<CI<80>> {}, CE::<CI<81>> {});\n    let (in82, in83, in84) = (CE::<CI<82>> {}, CE::<CI<83>> {}, CE::<CI<84>> {});\n    let (in85, in86, in87) = (CE::<CI<85>> {}, CE::<CI<86>> {}, CE::<CI<87>> {});\n    let (in88, in89, in90) = (CE::<CI<88>> {}, CE::<CI<89>> {}, CE::<CI<90>> {});\n    let (in91, in92, in93) = (CE::<CI<91>> {}, CE::<CI<92>> {}, CE::<CI<93>> {});\n    let (in94, in95, in96) = (CE::<CI<94>> {}, CE::<CI<95>> {}, CE::<CI<96>> {});\n    let (in97, in98, in99) = (CE::<CI<97>> {}, CE::<CI<98>> {}, CE::<CI<99>> {});\n    let (in100, in101, in102) = (CE::<CI<100>> {}, CE::<CI<101>> {}, CE::<CI<102>> {});\n    let (in103, in104, in105) = (CE::<CI<103>> {}, CE::<CI<104>> {}, CE::<CI<105>> {});\n    let (in106, in107, in108) = (CE::<CI<106>> {}, CE::<CI<107>> {}, CE::<CI<108>> {});\n    let (in109, in110, in111) = (CE::<CI<109>> {}, CE::<CI<110>> {}, CE::<CI<111>> {});\n    let (in112, in113, in114) = (CE::<CI<112>> {}, CE::<CI<113>> {}, CE::<CI<114>> {});\n    let (in115, in116, in117) = (CE::<CI<115>> {}, CE::<CI<116>> {}, CE::<CI<117>> {});\n    let (in118, in119, in120) = (CE::<CI<118>> {}, CE::<CI<119>> {}, CE::<CI<120>> {});\n    let (in121, in122, in123) = (CE::<CI<121>> {}, CE::<CI<122>> {}, CE::<CI<123>> {});\n    let (in124, in125, in126) = (CE::<CI<124>> {}, CE::<CI<125>> {}, CE::<CI<126>> {});\n    let (in127, in128, in129) = (CE::<CI<127>> {}, CE::<CI<128>> {}, CE::<CI<129>> {});\n    let (in130, in131, in132) = (CE::<CI<130>> {}, CE::<CI<131>> {}, CE::<CI<132>> {});\n    let (in133, in134, in135) = (CE::<CI<133>> {}, CE::<CI<134>> {}, CE::<CI<135>> {});\n    let (in136, in137, in138) = (CE::<CI<136>> {}, CE::<CI<137>> {}, CE::<CI<138>> {});\n    let (in139, in140, in141) = (CE::<CI<139>> {}, CE::<CI<140>> {}, CE::<CI<141>> {});\n    let (in142, in143, in144) = (CE::<CI<142>> {}, CE::<CI<143>> {}, CE::<CI<144>> {});\n    let (in145, in146, in147) = (CE::<CI<145>> {}, CE::<CI<146>> {}, CE::<CI<147>> {});\n    let (in148, in149, in150) = (CE::<CI<148>> {}, CE::<CI<149>> {}, CE::<CI<150>> {});\n    let (in151, in152, in153) = (CE::<CI<151>> {}, CE::<CI<152>> {}, CE::<CI<153>> {});\n    let (in154, in155, in156) = (CE::<CI<154>> {}, CE::<CI<155>> {}, CE::<CI<156>> {});\n    let (in157, in158, in159) = (CE::<CI<157>> {}, CE::<CI<158>> {}, CE::<CI<159>> {});\n    let (in160, in161, in162) = (CE::<CI<160>> {}, CE::<CI<161>> {}, CE::<CI<162>> {});\n    let (in163, in164, in165) = (CE::<CI<163>> {}, CE::<CI<164>> {}, CE::<CI<165>> {});\n    let (in166, in167, in168) = (CE::<CI<166>> {}, CE::<CI<167>> {}, CE::<CI<168>> {});\n    let (in169, in170, in171) = (CE::<CI<169>> {}, CE::<CI<170>> {}, CE::<CI<171>> {});\n    let (in172, in173, in174) = (CE::<CI<172>> {}, CE::<CI<173>> {}, CE::<CI<174>> {});\n    let (in175, in176, in177) = (CE::<CI<175>> {}, CE::<CI<176>> {}, CE::<CI<177>> {});\n    let in178 = CE::<CI<178>> {};\n    let t0 = circuit_mul(in28, in28); // compute z^2\n    let t1 = circuit_mul(t0, in28); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, in28); // compute z^7\n    let t4 = circuit_mul(t3, t0); // compute z^9\n    let t5 = circuit_mul(t4, t1); // compute z^12\n    let t6 = circuit_mul(in0, in7);\n    let t7 = circuit_add(in6, t6);\n    let t8 = circuit_mul(t7, in5); // eval bn line by xNegOverY\n    let t9 = circuit_mul(in0, in9);\n    let t10 = circuit_add(in8, t9);\n    let t11 = circuit_mul(t10, in4); // eval bn line by yInv\n    let t12 = circuit_mul(in7, in5); // eval bn line by xNegOverY\n    let t13 = circuit_mul(in9, in4); // eval bn line by yInv\n    let t14 = circuit_mul(in0, in11);\n    let t15 = circuit_add(in10, t14);\n    let t16 = circuit_mul(t15, in5); // eval bn line by xNegOverY\n    let t17 = circuit_mul(in0, in13);\n    let t18 = circuit_add(in12, t17);\n    let t19 = circuit_mul(t18, in4); // eval bn line by yInv\n    let t20 = circuit_mul(in11, in5); // eval bn line by xNegOverY\n    let t21 = circuit_mul(in13, in4); // eval bn line by yInv\n    let t22 = circuit_mul(in0, in17);\n    let t23 = circuit_add(in16, t22);\n    let t24 = circuit_mul(t23, in15); // eval bn line by xNegOverY\n    let t25 = circuit_mul(in0, in19);\n    let t26 = circuit_add(in18, t25);\n    let t27 = circuit_mul(t26, in14); // eval bn line by yInv\n    let t28 = circuit_mul(in17, in15); // eval bn line by xNegOverY\n    let t29 = circuit_mul(in19, in14); // eval bn line by yInv\n    let t30 = circuit_mul(in0, in21);\n    let t31 = circuit_add(in20, t30);\n    let t32 = circuit_mul(t31, in15); // eval bn line by xNegOverY\n    let t33 = circuit_mul(in0, in23);\n    let t34 = circuit_add(in22, t33);\n    let t35 = circuit_mul(t34, in14); // eval bn line by yInv\n    let t36 = circuit_mul(in21, in15); // eval bn line by xNegOverY\n    let t37 = circuit_mul(in23, in14); // eval bn line by yInv\n    let t38 = circuit_mul(t8, in28); // Eval sparse poly line_0 step coeff_1 * z^1\n    let t39 = circuit_add(in1, t38); // Eval sparse poly line_0 step + coeff_1 * z^1\n    let t40 = circuit_mul(t11, t1); // Eval sparse poly line_0 step coeff_3 * z^3\n    let t41 = circuit_add(t39, t40); // Eval sparse poly line_0 step + coeff_3 * z^3\n    let t42 = circuit_mul(t12, t3); // Eval sparse poly line_0 step coeff_7 * z^7\n    let t43 = circuit_add(t41, t42); // Eval sparse poly line_0 step + coeff_7 * z^7\n    let t44 = circuit_mul(t13, t4); // Eval sparse poly line_0 step coeff_9 * z^9\n    let t45 = circuit_add(t43, t44); // Eval sparse poly line_0 step + coeff_9 * z^9\n    let t46 = circuit_mul(in33, t45);\n    let t47 = circuit_mul(t16, in28); // Eval sparse poly line_1 step coeff_1 * z^1\n    let t48 = circuit_add(in1, t47); // Eval sparse poly line_1 step + coeff_1 * z^1\n    let t49 = circuit_mul(t19, t1); // Eval sparse poly line_1 step coeff_3 * z^3\n    let t50 = circuit_add(t48, t49); // Eval sparse poly line_1 step + coeff_3 * z^3\n    let t51 = circuit_mul(t20, t3); // Eval sparse poly line_1 step coeff_7 * z^7\n    let t52 = circuit_add(t50, t51); // Eval sparse poly line_1 step + coeff_7 * z^7\n    let t53 = circuit_mul(t21, t4); // Eval sparse poly line_1 step coeff_9 * z^9\n    let t54 = circuit_add(t52, t53); // Eval sparse poly line_1 step + coeff_9 * z^9\n    let t55 = circuit_mul(t46, t54);\n    let t56 = circuit_mul(t24, in28); // Eval sparse poly line_2 step coeff_1 * z^1\n    let t57 = circuit_add(in1, t56); // Eval sparse poly line_2 step + coeff_1 * z^1\n    let t58 = circuit_mul(t27, t1); // Eval sparse poly line_2 step coeff_3 * z^3\n    let t59 = circuit_add(t57, t58); // Eval sparse poly line_2 step + coeff_3 * z^3\n    let t60 = circuit_mul(t28, t3); // Eval sparse poly line_2 step coeff_7 * z^7\n    let t61 = circuit_add(t59, t60); // Eval sparse poly line_2 step + coeff_7 * z^7\n    let t62 = circuit_mul(t29, t4); // Eval sparse poly line_2 step coeff_9 * z^9\n    let t63 = circuit_add(t61, t62); // Eval sparse poly line_2 step + coeff_9 * z^9\n    let t64 = circuit_mul(t55, t63);\n    let t65 = circuit_mul(t32, in28); // Eval sparse poly line_3 step coeff_1 * z^1\n    let t66 = circuit_add(in1, t65); // Eval sparse poly line_3 step + coeff_1 * z^1\n    let t67 = circuit_mul(t35, t1); // Eval sparse poly line_3 step coeff_3 * z^3\n    let t68 = circuit_add(t66, t67); // Eval sparse poly line_3 step + coeff_3 * z^3\n    let t69 = circuit_mul(t36, t3); // Eval sparse poly line_3 step coeff_7 * z^7\n    let t70 = circuit_add(t68, t69); // Eval sparse poly line_3 step + coeff_7 * z^7\n    let t71 = circuit_mul(t37, t4); // Eval sparse poly line_3 step coeff_9 * z^9\n    let t72 = circuit_add(t70, t71); // Eval sparse poly line_3 step + coeff_9 * z^9\n    let t73 = circuit_mul(t64, t72);\n    let t74 = circuit_sub(t73, in24); // ((Π(n-2,k) (Pk(z)) - R_n_minus_2(z))\n    let t75 = circuit_mul(in24, in29);\n    let t76 = circuit_mul(t75, in30);\n    let t77 = circuit_mul(t76, in31);\n    let t78 = circuit_mul(t77, in27);\n    let t79 = circuit_sub(t78, in25); // ((Π(n-1,k) (Pk(z)) - R_n_minus_1(z))\n    let t80 = circuit_mul(in26, in32);\n    let t81 = circuit_add(t80, t74);\n    let t82 = circuit_mul(in26, t81);\n    let t83 = circuit_add(t82, t79);\n    let t84 = circuit_mul(in178, in28); // Eval big_Q Horner step: multiply by z\n    let t85 = circuit_add(in177, t84); // Eval big_Q Horner step: add coefficient_143\n    let t86 = circuit_mul(t85, in28); // Eval big_Q Horner step: multiply by z\n    let t87 = circuit_add(in176, t86); // Eval big_Q Horner step: add coefficient_142\n    let t88 = circuit_mul(t87, in28); // Eval big_Q Horner step: multiply by z\n    let t89 = circuit_add(in175, t88); // Eval big_Q Horner step: add coefficient_141\n    let t90 = circuit_mul(t89, in28); // Eval big_Q Horner step: multiply by z\n    let t91 = circuit_add(in174, t90); // Eval big_Q Horner step: add coefficient_140\n    let t92 = circuit_mul(t91, in28); // Eval big_Q Horner step: multiply by z\n    let t93 = circuit_add(in173, t92); // Eval big_Q Horner step: add coefficient_139\n    let t94 = circuit_mul(t93, in28); // Eval big_Q Horner step: multiply by z\n    let t95 = circuit_add(in172, t94); // Eval big_Q Horner step: add coefficient_138\n    let t96 = circuit_mul(t95, in28); // Eval big_Q Horner step: multiply by z\n    let t97 = circuit_add(in171, t96); // Eval big_Q Horner step: add coefficient_137\n    let t98 = circuit_mul(t97, in28); // Eval big_Q Horner step: multiply by z\n    let t99 = circuit_add(in170, t98); // Eval big_Q Horner step: add coefficient_136\n    let t100 = circuit_mul(t99, in28); // Eval big_Q Horner step: multiply by z\n    let t101 = circuit_add(in169, t100); // Eval big_Q Horner step: add coefficient_135\n    let t102 = circuit_mul(t101, in28); // Eval big_Q Horner step: multiply by z\n    let t103 = circuit_add(in168, t102); // Eval big_Q Horner step: add coefficient_134\n    let t104 = circuit_mul(t103, in28); // Eval big_Q Horner step: multiply by z\n    let t105 = circuit_add(in167, t104); // Eval big_Q Horner step: add coefficient_133\n    let t106 = circuit_mul(t105, in28); // Eval big_Q Horner step: multiply by z\n    let t107 = circuit_add(in166, t106); // Eval big_Q Horner step: add coefficient_132\n    let t108 = circuit_mul(t107, in28); // Eval big_Q Horner step: multiply by z\n    let t109 = circuit_add(in165, t108); // Eval big_Q Horner step: add coefficient_131\n    let t110 = circuit_mul(t109, in28); // Eval big_Q Horner step: multiply by z\n    let t111 = circuit_add(in164, t110); // Eval big_Q Horner step: add coefficient_130\n    let t112 = circuit_mul(t111, in28); // Eval big_Q Horner step: multiply by z\n    let t113 = circuit_add(in163, t112); // Eval big_Q Horner step: add coefficient_129\n    let t114 = circuit_mul(t113, in28); // Eval big_Q Horner step: multiply by z\n    let t115 = circuit_add(in162, t114); // Eval big_Q Horner step: add coefficient_128\n    let t116 = circuit_mul(t115, in28); // Eval big_Q Horner step: multiply by z\n    let t117 = circuit_add(in161, t116); // Eval big_Q Horner step: add coefficient_127\n    let t118 = circuit_mul(t117, in28); // Eval big_Q Horner step: multiply by z\n    let t119 = circuit_add(in160, t118); // Eval big_Q Horner step: add coefficient_126\n    let t120 = circuit_mul(t119, in28); // Eval big_Q Horner step: multiply by z\n    let t121 = circuit_add(in159, t120); // Eval big_Q Horner step: add coefficient_125\n    let t122 = circuit_mul(t121, in28); // Eval big_Q Horner step: multiply by z\n    let t123 = circuit_add(in158, t122); // Eval big_Q Horner step: add coefficient_124\n    let t124 = circuit_mul(t123, in28); // Eval big_Q Horner step: multiply by z\n    let t125 = circuit_add(in157, t124); // Eval big_Q Horner step: add coefficient_123\n    let t126 = circuit_mul(t125, in28); // Eval big_Q Horner step: multiply by z\n    let t127 = circuit_add(in156, t126); // Eval big_Q Horner step: add coefficient_122\n    let t128 = circuit_mul(t127, in28); // Eval big_Q Horner step: multiply by z\n    let t129 = circuit_add(in155, t128); // Eval big_Q Horner step: add coefficient_121\n    let t130 = circuit_mul(t129, in28); // Eval big_Q Horner step: multiply by z\n    let t131 = circuit_add(in154, t130); // Eval big_Q Horner step: add coefficient_120\n    let t132 = circuit_mul(t131, in28); // Eval big_Q Horner step: multiply by z\n    let t133 = circuit_add(in153, t132); // Eval big_Q Horner step: add coefficient_119\n    let t134 = circuit_mul(t133, in28); // Eval big_Q Horner step: multiply by z\n    let t135 = circuit_add(in152, t134); // Eval big_Q Horner step: add coefficient_118\n    let t136 = circuit_mul(t135, in28); // Eval big_Q Horner step: multiply by z\n    let t137 = circuit_add(in151, t136); // Eval big_Q Horner step: add coefficient_117\n    let t138 = circuit_mul(t137, in28); // Eval big_Q Horner step: multiply by z\n    let t139 = circuit_add(in150, t138); // Eval big_Q Horner step: add coefficient_116\n    let t140 = circuit_mul(t139, in28); // Eval big_Q Horner step: multiply by z\n    let t141 = circuit_add(in149, t140); // Eval big_Q Horner step: add coefficient_115\n    let t142 = circuit_mul(t141, in28); // Eval big_Q Horner step: multiply by z\n    let t143 = circuit_add(in148, t142); // Eval big_Q Horner step: add coefficient_114\n    let t144 = circuit_mul(t143, in28); // Eval big_Q Horner step: multiply by z\n    let t145 = circuit_add(in147, t144); // Eval big_Q Horner step: add coefficient_113\n    let t146 = circuit_mul(t145, in28); // Eval big_Q Horner step: multiply by z\n    let t147 = circuit_add(in146, t146); // Eval big_Q Horner step: add coefficient_112\n    let t148 = circuit_mul(t147, in28); // Eval big_Q Horner step: multiply by z\n    let t149 = circuit_add(in145, t148); // Eval big_Q Horner step: add coefficient_111\n    let t150 = circuit_mul(t149, in28); // Eval big_Q Horner step: multiply by z\n    let t151 = circuit_add(in144, t150); // Eval big_Q Horner step: add coefficient_110\n    let t152 = circuit_mul(t151, in28); // Eval big_Q Horner step: multiply by z\n    let t153 = circuit_add(in143, t152); // Eval big_Q Horner step: add coefficient_109\n    let t154 = circuit_mul(t153, in28); // Eval big_Q Horner step: multiply by z\n    let t155 = circuit_add(in142, t154); // Eval big_Q Horner step: add coefficient_108\n    let t156 = circuit_mul(t155, in28); // Eval big_Q Horner step: multiply by z\n    let t157 = circuit_add(in141, t156); // Eval big_Q Horner step: add coefficient_107\n    let t158 = circuit_mul(t157, in28); // Eval big_Q Horner step: multiply by z\n    let t159 = circuit_add(in140, t158); // Eval big_Q Horner step: add coefficient_106\n    let t160 = circuit_mul(t159, in28); // Eval big_Q Horner step: multiply by z\n    let t161 = circuit_add(in139, t160); // Eval big_Q Horner step: add coefficient_105\n    let t162 = circuit_mul(t161, in28); // Eval big_Q Horner step: multiply by z\n    let t163 = circuit_add(in138, t162); // Eval big_Q Horner step: add coefficient_104\n    let t164 = circuit_mul(t163, in28); // Eval big_Q Horner step: multiply by z\n    let t165 = circuit_add(in137, t164); // Eval big_Q Horner step: add coefficient_103\n    let t166 = circuit_mul(t165, in28); // Eval big_Q Horner step: multiply by z\n    let t167 = circuit_add(in136, t166); // Eval big_Q Horner step: add coefficient_102\n    let t168 = circuit_mul(t167, in28); // Eval big_Q Horner step: multiply by z\n    let t169 = circuit_add(in135, t168); // Eval big_Q Horner step: add coefficient_101\n    let t170 = circuit_mul(t169, in28); // Eval big_Q Horner step: multiply by z\n    let t171 = circuit_add(in134, t170); // Eval big_Q Horner step: add coefficient_100\n    let t172 = circuit_mul(t171, in28); // Eval big_Q Horner step: multiply by z\n    let t173 = circuit_add(in133, t172); // Eval big_Q Horner step: add coefficient_99\n    let t174 = circuit_mul(t173, in28); // Eval big_Q Horner step: multiply by z\n    let t175 = circuit_add(in132, t174); // Eval big_Q Horner step: add coefficient_98\n    let t176 = circuit_mul(t175, in28); // Eval big_Q Horner step: multiply by z\n    let t177 = circuit_add(in131, t176); // Eval big_Q Horner step: add coefficient_97\n    let t178 = circuit_mul(t177, in28); // Eval big_Q Horner step: multiply by z\n    let t179 = circuit_add(in130, t178); // Eval big_Q Horner step: add coefficient_96\n    let t180 = circuit_mul(t179, in28); // Eval big_Q Horner step: multiply by z\n    let t181 = circuit_add(in129, t180); // Eval big_Q Horner step: add coefficient_95\n    let t182 = circuit_mul(t181, in28); // Eval big_Q Horner step: multiply by z\n    let t183 = circuit_add(in128, t182); // Eval big_Q Horner step: add coefficient_94\n    let t184 = circuit_mul(t183, in28); // Eval big_Q Horner step: multiply by z\n    let t185 = circuit_add(in127, t184); // Eval big_Q Horner step: add coefficient_93\n    let t186 = circuit_mul(t185, in28); // Eval big_Q Horner step: multiply by z\n    let t187 = circuit_add(in126, t186); // Eval big_Q Horner step: add coefficient_92\n    let t188 = circuit_mul(t187, in28); // Eval big_Q Horner step: multiply by z\n    let t189 = circuit_add(in125, t188); // Eval big_Q Horner step: add coefficient_91\n    let t190 = circuit_mul(t189, in28); // Eval big_Q Horner step: multiply by z\n    let t191 = circuit_add(in124, t190); // Eval big_Q Horner step: add coefficient_90\n    let t192 = circuit_mul(t191, in28); // Eval big_Q Horner step: multiply by z\n    let t193 = circuit_add(in123, t192); // Eval big_Q Horner step: add coefficient_89\n    let t194 = circuit_mul(t193, in28); // Eval big_Q Horner step: multiply by z\n    let t195 = circuit_add(in122, t194); // Eval big_Q Horner step: add coefficient_88\n    let t196 = circuit_mul(t195, in28); // Eval big_Q Horner step: multiply by z\n    let t197 = circuit_add(in121, t196); // Eval big_Q Horner step: add coefficient_87\n    let t198 = circuit_mul(t197, in28); // Eval big_Q Horner step: multiply by z\n    let t199 = circuit_add(in120, t198); // Eval big_Q Horner step: add coefficient_86\n    let t200 = circuit_mul(t199, in28); // Eval big_Q Horner step: multiply by z\n    let t201 = circuit_add(in119, t200); // Eval big_Q Horner step: add coefficient_85\n    let t202 = circuit_mul(t201, in28); // Eval big_Q Horner step: multiply by z\n    let t203 = circuit_add(in118, t202); // Eval big_Q Horner step: add coefficient_84\n    let t204 = circuit_mul(t203, in28); // Eval big_Q Horner step: multiply by z\n    let t205 = circuit_add(in117, t204); // Eval big_Q Horner step: add coefficient_83\n    let t206 = circuit_mul(t205, in28); // Eval big_Q Horner step: multiply by z\n    let t207 = circuit_add(in116, t206); // Eval big_Q Horner step: add coefficient_82\n    let t208 = circuit_mul(t207, in28); // Eval big_Q Horner step: multiply by z\n    let t209 = circuit_add(in115, t208); // Eval big_Q Horner step: add coefficient_81\n    let t210 = circuit_mul(t209, in28); // Eval big_Q Horner step: multiply by z\n    let t211 = circuit_add(in114, t210); // Eval big_Q Horner step: add coefficient_80\n    let t212 = circuit_mul(t211, in28); // Eval big_Q Horner step: multiply by z\n    let t213 = circuit_add(in113, t212); // Eval big_Q Horner step: add coefficient_79\n    let t214 = circuit_mul(t213, in28); // Eval big_Q Horner step: multiply by z\n    let t215 = circuit_add(in112, t214); // Eval big_Q Horner step: add coefficient_78\n    let t216 = circuit_mul(t215, in28); // Eval big_Q Horner step: multiply by z\n    let t217 = circuit_add(in111, t216); // Eval big_Q Horner step: add coefficient_77\n    let t218 = circuit_mul(t217, in28); // Eval big_Q Horner step: multiply by z\n    let t219 = circuit_add(in110, t218); // Eval big_Q Horner step: add coefficient_76\n    let t220 = circuit_mul(t219, in28); // Eval big_Q Horner step: multiply by z\n    let t221 = circuit_add(in109, t220); // Eval big_Q Horner step: add coefficient_75\n    let t222 = circuit_mul(t221, in28); // Eval big_Q Horner step: multiply by z\n    let t223 = circuit_add(in108, t222); // Eval big_Q Horner step: add coefficient_74\n    let t224 = circuit_mul(t223, in28); // Eval big_Q Horner step: multiply by z\n    let t225 = circuit_add(in107, t224); // Eval big_Q Horner step: add coefficient_73\n    let t226 = circuit_mul(t225, in28); // Eval big_Q Horner step: multiply by z\n    let t227 = circuit_add(in106, t226); // Eval big_Q Horner step: add coefficient_72\n    let t228 = circuit_mul(t227, in28); // Eval big_Q Horner step: multiply by z\n    let t229 = circuit_add(in105, t228); // Eval big_Q Horner step: add coefficient_71\n    let t230 = circuit_mul(t229, in28); // Eval big_Q Horner step: multiply by z\n    let t231 = circuit_add(in104, t230); // Eval big_Q Horner step: add coefficient_70\n    let t232 = circuit_mul(t231, in28); // Eval big_Q Horner step: multiply by z\n    let t233 = circuit_add(in103, t232); // Eval big_Q Horner step: add coefficient_69\n    let t234 = circuit_mul(t233, in28); // Eval big_Q Horner step: multiply by z\n    let t235 = circuit_add(in102, t234); // Eval big_Q Horner step: add coefficient_68\n    let t236 = circuit_mul(t235, in28); // Eval big_Q Horner step: multiply by z\n    let t237 = circuit_add(in101, t236); // Eval big_Q Horner step: add coefficient_67\n    let t238 = circuit_mul(t237, in28); // Eval big_Q Horner step: multiply by z\n    let t239 = circuit_add(in100, t238); // Eval big_Q Horner step: add coefficient_66\n    let t240 = circuit_mul(t239, in28); // Eval big_Q Horner step: multiply by z\n    let t241 = circuit_add(in99, t240); // Eval big_Q Horner step: add coefficient_65\n    let t242 = circuit_mul(t241, in28); // Eval big_Q Horner step: multiply by z\n    let t243 = circuit_add(in98, t242); // Eval big_Q Horner step: add coefficient_64\n    let t244 = circuit_mul(t243, in28); // Eval big_Q Horner step: multiply by z\n    let t245 = circuit_add(in97, t244); // Eval big_Q Horner step: add coefficient_63\n    let t246 = circuit_mul(t245, in28); // Eval big_Q Horner step: multiply by z\n    let t247 = circuit_add(in96, t246); // Eval big_Q Horner step: add coefficient_62\n    let t248 = circuit_mul(t247, in28); // Eval big_Q Horner step: multiply by z\n    let t249 = circuit_add(in95, t248); // Eval big_Q Horner step: add coefficient_61\n    let t250 = circuit_mul(t249, in28); // Eval big_Q Horner step: multiply by z\n    let t251 = circuit_add(in94, t250); // Eval big_Q Horner step: add coefficient_60\n    let t252 = circuit_mul(t251, in28); // Eval big_Q Horner step: multiply by z\n    let t253 = circuit_add(in93, t252); // Eval big_Q Horner step: add coefficient_59\n    let t254 = circuit_mul(t253, in28); // Eval big_Q Horner step: multiply by z\n    let t255 = circuit_add(in92, t254); // Eval big_Q Horner step: add coefficient_58\n    let t256 = circuit_mul(t255, in28); // Eval big_Q Horner step: multiply by z\n    let t257 = circuit_add(in91, t256); // Eval big_Q Horner step: add coefficient_57\n    let t258 = circuit_mul(t257, in28); // Eval big_Q Horner step: multiply by z\n    let t259 = circuit_add(in90, t258); // Eval big_Q Horner step: add coefficient_56\n    let t260 = circuit_mul(t259, in28); // Eval big_Q Horner step: multiply by z\n    let t261 = circuit_add(in89, t260); // Eval big_Q Horner step: add coefficient_55\n    let t262 = circuit_mul(t261, in28); // Eval big_Q Horner step: multiply by z\n    let t263 = circuit_add(in88, t262); // Eval big_Q Horner step: add coefficient_54\n    let t264 = circuit_mul(t263, in28); // Eval big_Q Horner step: multiply by z\n    let t265 = circuit_add(in87, t264); // Eval big_Q Horner step: add coefficient_53\n    let t266 = circuit_mul(t265, in28); // Eval big_Q Horner step: multiply by z\n    let t267 = circuit_add(in86, t266); // Eval big_Q Horner step: add coefficient_52\n    let t268 = circuit_mul(t267, in28); // Eval big_Q Horner step: multiply by z\n    let t269 = circuit_add(in85, t268); // Eval big_Q Horner step: add coefficient_51\n    let t270 = circuit_mul(t269, in28); // Eval big_Q Horner step: multiply by z\n    let t271 = circuit_add(in84, t270); // Eval big_Q Horner step: add coefficient_50\n    let t272 = circuit_mul(t271, in28); // Eval big_Q Horner step: multiply by z\n    let t273 = circuit_add(in83, t272); // Eval big_Q Horner step: add coefficient_49\n    let t274 = circuit_mul(t273, in28); // Eval big_Q Horner step: multiply by z\n    let t275 = circuit_add(in82, t274); // Eval big_Q Horner step: add coefficient_48\n    let t276 = circuit_mul(t275, in28); // Eval big_Q Horner step: multiply by z\n    let t277 = circuit_add(in81, t276); // Eval big_Q Horner step: add coefficient_47\n    let t278 = circuit_mul(t277, in28); // Eval big_Q Horner step: multiply by z\n    let t279 = circuit_add(in80, t278); // Eval big_Q Horner step: add coefficient_46\n    let t280 = circuit_mul(t279, in28); // Eval big_Q Horner step: multiply by z\n    let t281 = circuit_add(in79, t280); // Eval big_Q Horner step: add coefficient_45\n    let t282 = circuit_mul(t281, in28); // Eval big_Q Horner step: multiply by z\n    let t283 = circuit_add(in78, t282); // Eval big_Q Horner step: add coefficient_44\n    let t284 = circuit_mul(t283, in28); // Eval big_Q Horner step: multiply by z\n    let t285 = circuit_add(in77, t284); // Eval big_Q Horner step: add coefficient_43\n    let t286 = circuit_mul(t285, in28); // Eval big_Q Horner step: multiply by z\n    let t287 = circuit_add(in76, t286); // Eval big_Q Horner step: add coefficient_42\n    let t288 = circuit_mul(t287, in28); // Eval big_Q Horner step: multiply by z\n    let t289 = circuit_add(in75, t288); // Eval big_Q Horner step: add coefficient_41\n    let t290 = circuit_mul(t289, in28); // Eval big_Q Horner step: multiply by z\n    let t291 = circuit_add(in74, t290); // Eval big_Q Horner step: add coefficient_40\n    let t292 = circuit_mul(t291, in28); // Eval big_Q Horner step: multiply by z\n    let t293 = circuit_add(in73, t292); // Eval big_Q Horner step: add coefficient_39\n    let t294 = circuit_mul(t293, in28); // Eval big_Q Horner step: multiply by z\n    let t295 = circuit_add(in72, t294); // Eval big_Q Horner step: add coefficient_38\n    let t296 = circuit_mul(t295, in28); // Eval big_Q Horner step: multiply by z\n    let t297 = circuit_add(in71, t296); // Eval big_Q Horner step: add coefficient_37\n    let t298 = circuit_mul(t297, in28); // Eval big_Q Horner step: multiply by z\n    let t299 = circuit_add(in70, t298); // Eval big_Q Horner step: add coefficient_36\n    let t300 = circuit_mul(t299, in28); // Eval big_Q Horner step: multiply by z\n    let t301 = circuit_add(in69, t300); // Eval big_Q Horner step: add coefficient_35\n    let t302 = circuit_mul(t301, in28); // Eval big_Q Horner step: multiply by z\n    let t303 = circuit_add(in68, t302); // Eval big_Q Horner step: add coefficient_34\n    let t304 = circuit_mul(t303, in28); // Eval big_Q Horner step: multiply by z\n    let t305 = circuit_add(in67, t304); // Eval big_Q Horner step: add coefficient_33\n    let t306 = circuit_mul(t305, in28); // Eval big_Q Horner step: multiply by z\n    let t307 = circuit_add(in66, t306); // Eval big_Q Horner step: add coefficient_32\n    let t308 = circuit_mul(t307, in28); // Eval big_Q Horner step: multiply by z\n    let t309 = circuit_add(in65, t308); // Eval big_Q Horner step: add coefficient_31\n    let t310 = circuit_mul(t309, in28); // Eval big_Q Horner step: multiply by z\n    let t311 = circuit_add(in64, t310); // Eval big_Q Horner step: add coefficient_30\n    let t312 = circuit_mul(t311, in28); // Eval big_Q Horner step: multiply by z\n    let t313 = circuit_add(in63, t312); // Eval big_Q Horner step: add coefficient_29\n    let t314 = circuit_mul(t313, in28); // Eval big_Q Horner step: multiply by z\n    let t315 = circuit_add(in62, t314); // Eval big_Q Horner step: add coefficient_28\n    let t316 = circuit_mul(t315, in28); // Eval big_Q Horner step: multiply by z\n    let t317 = circuit_add(in61, t316); // Eval big_Q Horner step: add coefficient_27\n    let t318 = circuit_mul(t317, in28); // Eval big_Q Horner step: multiply by z\n    let t319 = circuit_add(in60, t318); // Eval big_Q Horner step: add coefficient_26\n    let t320 = circuit_mul(t319, in28); // Eval big_Q Horner step: multiply by z\n    let t321 = circuit_add(in59, t320); // Eval big_Q Horner step: add coefficient_25\n    let t322 = circuit_mul(t321, in28); // Eval big_Q Horner step: multiply by z\n    let t323 = circuit_add(in58, t322); // Eval big_Q Horner step: add coefficient_24\n    let t324 = circuit_mul(t323, in28); // Eval big_Q Horner step: multiply by z\n    let t325 = circuit_add(in57, t324); // Eval big_Q Horner step: add coefficient_23\n    let t326 = circuit_mul(t325, in28); // Eval big_Q Horner step: multiply by z\n    let t327 = circuit_add(in56, t326); // Eval big_Q Horner step: add coefficient_22\n    let t328 = circuit_mul(t327, in28); // Eval big_Q Horner step: multiply by z\n    let t329 = circuit_add(in55, t328); // Eval big_Q Horner step: add coefficient_21\n    let t330 = circuit_mul(t329, in28); // Eval big_Q Horner step: multiply by z\n    let t331 = circuit_add(in54, t330); // Eval big_Q Horner step: add coefficient_20\n    let t332 = circuit_mul(t331, in28); // Eval big_Q Horner step: multiply by z\n    let t333 = circuit_add(in53, t332); // Eval big_Q Horner step: add coefficient_19\n    let t334 = circuit_mul(t333, in28); // Eval big_Q Horner step: multiply by z\n    let t335 = circuit_add(in52, t334); // Eval big_Q Horner step: add coefficient_18\n    let t336 = circuit_mul(t335, in28); // Eval big_Q Horner step: multiply by z\n    let t337 = circuit_add(in51, t336); // Eval big_Q Horner step: add coefficient_17\n    let t338 = circuit_mul(t337, in28); // Eval big_Q Horner step: multiply by z\n    let t339 = circuit_add(in50, t338); // Eval big_Q Horner step: add coefficient_16\n    let t340 = circuit_mul(t339, in28); // Eval big_Q Horner step: multiply by z\n    let t341 = circuit_add(in49, t340); // Eval big_Q Horner step: add coefficient_15\n    let t342 = circuit_mul(t341, in28); // Eval big_Q Horner step: multiply by z\n    let t343 = circuit_add(in48, t342); // Eval big_Q Horner step: add coefficient_14\n    let t344 = circuit_mul(t343, in28); // Eval big_Q Horner step: multiply by z\n    let t345 = circuit_add(in47, t344); // Eval big_Q Horner step: add coefficient_13\n    let t346 = circuit_mul(t345, in28); // Eval big_Q Horner step: multiply by z\n    let t347 = circuit_add(in46, t346); // Eval big_Q Horner step: add coefficient_12\n    let t348 = circuit_mul(t347, in28); // Eval big_Q Horner step: multiply by z\n    let t349 = circuit_add(in45, t348); // Eval big_Q Horner step: add coefficient_11\n    let t350 = circuit_mul(t349, in28); // Eval big_Q Horner step: multiply by z\n    let t351 = circuit_add(in44, t350); // Eval big_Q Horner step: add coefficient_10\n    let t352 = circuit_mul(t351, in28); // Eval big_Q Horner step: multiply by z\n    let t353 = circuit_add(in43, t352); // Eval big_Q Horner step: add coefficient_9\n    let t354 = circuit_mul(t353, in28); // Eval big_Q Horner step: multiply by z\n    let t355 = circuit_add(in42, t354); // Eval big_Q Horner step: add coefficient_8\n    let t356 = circuit_mul(t355, in28); // Eval big_Q Horner step: multiply by z\n    let t357 = circuit_add(in41, t356); // Eval big_Q Horner step: add coefficient_7\n    let t358 = circuit_mul(t357, in28); // Eval big_Q Horner step: multiply by z\n    let t359 = circuit_add(in40, t358); // Eval big_Q Horner step: add coefficient_6\n    let t360 = circuit_mul(t359, in28); // Eval big_Q Horner step: multiply by z\n    let t361 = circuit_add(in39, t360); // Eval big_Q Horner step: add coefficient_5\n    let t362 = circuit_mul(t361, in28); // Eval big_Q Horner step: multiply by z\n    let t363 = circuit_add(in38, t362); // Eval big_Q Horner step: add coefficient_4\n    let t364 = circuit_mul(t363, in28); // Eval big_Q Horner step: multiply by z\n    let t365 = circuit_add(in37, t364); // Eval big_Q Horner step: add coefficient_3\n    let t366 = circuit_mul(t365, in28); // Eval big_Q Horner step: multiply by z\n    let t367 = circuit_add(in36, t366); // Eval big_Q Horner step: add coefficient_2\n    let t368 = circuit_mul(t367, in28); // Eval big_Q Horner step: multiply by z\n    let t369 = circuit_add(in35, t368); // Eval big_Q Horner step: add coefficient_1\n    let t370 = circuit_mul(t369, in28); // Eval big_Q Horner step: multiply by z\n    let t371 = circuit_add(in34, t370); // Eval big_Q Horner step: add coefficient_0\n    let t372 = circuit_mul(in3, t2); // Eval sparse poly P_irr step coeff_6 * z^6\n    let t373 = circuit_add(in2, t372); // Eval sparse poly P_irr step + coeff_6 * z^6\n    let t374 = circuit_add(t373, t5); // Eval sparse poly P_irr step + 1*z^12\n    let t375 = circuit_mul(t371, t374);\n    let t376 = circuit_sub(t83, t375);\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t376,).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd3e, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x52, 0x0, 0x0, 0x0]); // in2\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd35, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in3\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in4\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in5\n    circuit_inputs = circuit_inputs.next_2(line_1_0.r0a0); // in6\n    circuit_inputs = circuit_inputs.next_2(line_1_0.r0a1); // in7\n    circuit_inputs = circuit_inputs.next_2(line_1_0.r1a0); // in8\n    circuit_inputs = circuit_inputs.next_2(line_1_0.r1a1); // in9\n    circuit_inputs = circuit_inputs.next_2(line_2_0.r0a0); // in10\n    circuit_inputs = circuit_inputs.next_2(line_2_0.r0a1); // in11\n    circuit_inputs = circuit_inputs.next_2(line_2_0.r1a0); // in12\n    circuit_inputs = circuit_inputs.next_2(line_2_0.r1a1); // in13\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in14\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in15\n    circuit_inputs = circuit_inputs.next_2(line_1_1.r0a0); // in16\n    circuit_inputs = circuit_inputs.next_2(line_1_1.r0a1); // in17\n    circuit_inputs = circuit_inputs.next_2(line_1_1.r1a0); // in18\n    circuit_inputs = circuit_inputs.next_2(line_1_1.r1a1); // in19\n    circuit_inputs = circuit_inputs.next_2(line_2_1.r0a0); // in20\n    circuit_inputs = circuit_inputs.next_2(line_2_1.r0a1); // in21\n    circuit_inputs = circuit_inputs.next_2(line_2_1.r1a0); // in22\n    circuit_inputs = circuit_inputs.next_2(line_2_1.r1a1); // in23\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2_of_z); // in24\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_1_of_z); // in25\n    circuit_inputs = circuit_inputs.next_2(c_0); // in26\n    circuit_inputs = circuit_inputs.next_2(w_of_z); // in27\n    circuit_inputs = circuit_inputs.next_2(z); // in28\n    circuit_inputs = circuit_inputs.next_2(c_inv_frob_1_of_z); // in29\n    circuit_inputs = circuit_inputs.next_2(c_frob_2_of_z); // in30\n    circuit_inputs = circuit_inputs.next_2(c_inv_frob_3_of_z); // in31\n    circuit_inputs = circuit_inputs.next_2(previous_lhs); // in32\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_3_of_z); // in33\n\n    for val in Q.span() {\n        circuit_inputs = circuit_inputs.next_2(*val);\n    } // in34 - in178\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let final_check: u384 = outputs.get_output(t376);\n    return (final_check,);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_FINALIZE_3P_2F_EXT_MLR_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    line_1_0: G2Line<u288>,\n    line_2_0: G2Line<u288>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    line_1_1: G2Line<u288>,\n    line_2_1: G2Line<u288>,\n    original_Q2: G2Point,\n    yInv_2: u384,\n    xNegOverY_2: u384,\n    Q_2: G2Point,\n    R_n_minus_2_of_z: u384,\n    R_n_minus_1_of_z: u384,\n    c_0: u384,\n    w_of_z: u384,\n    z: u384,\n    c_inv_frob_1_of_z: u384,\n    c_frob_2_of_z: u384,\n    c_inv_frob_3_of_z: u384,\n    previous_lhs: u384,\n    R_n_minus_3_of_z: u384,\n    Q: Array<u288>,\n    precomputed_miller_loop_result_of_z: u384,\n) -> (u384,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x2fb347984f7911f74c0bec3cf559b143b78cc310c2c3330c99e39557176f553d\n    let in1 = CE::<CI<1>> {}; // 0x16c9e55061ebae204ba4cc8bd75a079432ae2a1d0b7c9dce1665d51c640fcba2\n    let in2 = CE::<CI<2>> {}; // 0x63cf305489af5dcdc5ec698b6e2f9b9dbaae0eda9c95998dc54014671a0135a\n    let in3 = CE::<CI<3>> {}; // 0x7c03cbcac41049a0704b5a7ec796f2b21807dc98fa25bd282d37f632623b0e3\n    let in4 = CE::<CI<4>> {}; // 0x30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd48\n    let in5 = CE::<CI<5>> {}; // 0x1\n    let in6 = CE::<CI<6>> {}; // 0x0\n    let in7 = CE::<CI<7>> {}; // -0x9 % p\n    let in8 = CE::<CI<8>> {}; // 0x52\n    let in9 = CE::<CI<9>> {}; // -0x12 % p\n\n    // INPUT stack\n    let (in10, in11, in12) = (CE::<CI<10>> {}, CE::<CI<11>> {}, CE::<CI<12>> {});\n    let (in13, in14, in15) = (CE::<CI<13>> {}, CE::<CI<14>> {}, CE::<CI<15>> {});\n    let (in16, in17, in18) = (CE::<CI<16>> {}, CE::<CI<17>> {}, CE::<CI<18>> {});\n    let (in19, in20, in21) = (CE::<CI<19>> {}, CE::<CI<20>> {}, CE::<CI<21>> {});\n    let (in22, in23, in24) = (CE::<CI<22>> {}, CE::<CI<23>> {}, CE::<CI<24>> {});\n    let (in25, in26, in27) = (CE::<CI<25>> {}, CE::<CI<26>> {}, CE::<CI<27>> {});\n    let (in28, in29, in30) = (CE::<CI<28>> {}, CE::<CI<29>> {}, CE::<CI<30>> {});\n    let (in31, in32, in33) = (CE::<CI<31>> {}, CE::<CI<32>> {}, CE::<CI<33>> {});\n    let (in34, in35, in36) = (CE::<CI<34>> {}, CE::<CI<35>> {}, CE::<CI<36>> {});\n    let (in37, in38, in39) = (CE::<CI<37>> {}, CE::<CI<38>> {}, CE::<CI<39>> {});\n    let (in40, in41, in42) = (CE::<CI<40>> {}, CE::<CI<41>> {}, CE::<CI<42>> {});\n    let (in43, in44, in45) = (CE::<CI<43>> {}, CE::<CI<44>> {}, CE::<CI<45>> {});\n    let (in46, in47, in48) = (CE::<CI<46>> {}, CE::<CI<47>> {}, CE::<CI<48>> {});\n    let (in49, in50, in51) = (CE::<CI<49>> {}, CE::<CI<50>> {}, CE::<CI<51>> {});\n    let (in52, in53, in54) = (CE::<CI<52>> {}, CE::<CI<53>> {}, CE::<CI<54>> {});\n    let (in55, in56, in57) = (CE::<CI<55>> {}, CE::<CI<56>> {}, CE::<CI<57>> {});\n    let (in58, in59, in60) = (CE::<CI<58>> {}, CE::<CI<59>> {}, CE::<CI<60>> {});\n    let (in61, in62, in63) = (CE::<CI<61>> {}, CE::<CI<62>> {}, CE::<CI<63>> {});\n    let (in64, in65, in66) = (CE::<CI<64>> {}, CE::<CI<65>> {}, CE::<CI<66>> {});\n    let (in67, in68, in69) = (CE::<CI<67>> {}, CE::<CI<68>> {}, CE::<CI<69>> {});\n    let (in70, in71, in72) = (CE::<CI<70>> {}, CE::<CI<71>> {}, CE::<CI<72>> {});\n    let (in73, in74, in75) = (CE::<CI<73>> {}, CE::<CI<74>> {}, CE::<CI<75>> {});\n    let (in76, in77, in78) = (CE::<CI<76>> {}, CE::<CI<77>> {}, CE::<CI<78>> {});\n    let (in79, in80, in81) = (CE::<CI<79>> {}, CE::<CI<80>> {}, CE::<CI<81>> {});\n    let (in82, in83, in84) = (CE::<CI<82>> {}, CE::<CI<83>> {}, CE::<CI<84>> {});\n    let (in85, in86, in87) = (CE::<CI<85>> {}, CE::<CI<86>> {}, CE::<CI<87>> {});\n    let (in88, in89, in90) = (CE::<CI<88>> {}, CE::<CI<89>> {}, CE::<CI<90>> {});\n    let (in91, in92, in93) = (CE::<CI<91>> {}, CE::<CI<92>> {}, CE::<CI<93>> {});\n    let (in94, in95, in96) = (CE::<CI<94>> {}, CE::<CI<95>> {}, CE::<CI<96>> {});\n    let (in97, in98, in99) = (CE::<CI<97>> {}, CE::<CI<98>> {}, CE::<CI<99>> {});\n    let (in100, in101, in102) = (CE::<CI<100>> {}, CE::<CI<101>> {}, CE::<CI<102>> {});\n    let (in103, in104, in105) = (CE::<CI<103>> {}, CE::<CI<104>> {}, CE::<CI<105>> {});\n    let (in106, in107, in108) = (CE::<CI<106>> {}, CE::<CI<107>> {}, CE::<CI<108>> {});\n    let (in109, in110, in111) = (CE::<CI<109>> {}, CE::<CI<110>> {}, CE::<CI<111>> {});\n    let (in112, in113, in114) = (CE::<CI<112>> {}, CE::<CI<113>> {}, CE::<CI<114>> {});\n    let (in115, in116, in117) = (CE::<CI<115>> {}, CE::<CI<116>> {}, CE::<CI<117>> {});\n    let (in118, in119, in120) = (CE::<CI<118>> {}, CE::<CI<119>> {}, CE::<CI<120>> {});\n    let (in121, in122, in123) = (CE::<CI<121>> {}, CE::<CI<122>> {}, CE::<CI<123>> {});\n    let (in124, in125, in126) = (CE::<CI<124>> {}, CE::<CI<125>> {}, CE::<CI<126>> {});\n    let (in127, in128, in129) = (CE::<CI<127>> {}, CE::<CI<128>> {}, CE::<CI<129>> {});\n    let (in130, in131, in132) = (CE::<CI<130>> {}, CE::<CI<131>> {}, CE::<CI<132>> {});\n    let (in133, in134, in135) = (CE::<CI<133>> {}, CE::<CI<134>> {}, CE::<CI<135>> {});\n    let (in136, in137, in138) = (CE::<CI<136>> {}, CE::<CI<137>> {}, CE::<CI<138>> {});\n    let (in139, in140, in141) = (CE::<CI<139>> {}, CE::<CI<140>> {}, CE::<CI<141>> {});\n    let (in142, in143, in144) = (CE::<CI<142>> {}, CE::<CI<143>> {}, CE::<CI<144>> {});\n    let (in145, in146, in147) = (CE::<CI<145>> {}, CE::<CI<146>> {}, CE::<CI<147>> {});\n    let (in148, in149, in150) = (CE::<CI<148>> {}, CE::<CI<149>> {}, CE::<CI<150>> {});\n    let (in151, in152, in153) = (CE::<CI<151>> {}, CE::<CI<152>> {}, CE::<CI<153>> {});\n    let (in154, in155, in156) = (CE::<CI<154>> {}, CE::<CI<155>> {}, CE::<CI<156>> {});\n    let (in157, in158, in159) = (CE::<CI<157>> {}, CE::<CI<158>> {}, CE::<CI<159>> {});\n    let (in160, in161, in162) = (CE::<CI<160>> {}, CE::<CI<161>> {}, CE::<CI<162>> {});\n    let (in163, in164, in165) = (CE::<CI<163>> {}, CE::<CI<164>> {}, CE::<CI<165>> {});\n    let (in166, in167, in168) = (CE::<CI<166>> {}, CE::<CI<167>> {}, CE::<CI<168>> {});\n    let (in169, in170, in171) = (CE::<CI<169>> {}, CE::<CI<170>> {}, CE::<CI<171>> {});\n    let (in172, in173, in174) = (CE::<CI<172>> {}, CE::<CI<173>> {}, CE::<CI<174>> {});\n    let (in175, in176, in177) = (CE::<CI<175>> {}, CE::<CI<176>> {}, CE::<CI<177>> {});\n    let (in178, in179, in180) = (CE::<CI<178>> {}, CE::<CI<179>> {}, CE::<CI<180>> {});\n    let (in181, in182, in183) = (CE::<CI<181>> {}, CE::<CI<182>> {}, CE::<CI<183>> {});\n    let (in184, in185, in186) = (CE::<CI<184>> {}, CE::<CI<185>> {}, CE::<CI<186>> {});\n    let (in187, in188, in189) = (CE::<CI<187>> {}, CE::<CI<188>> {}, CE::<CI<189>> {});\n    let (in190, in191, in192) = (CE::<CI<190>> {}, CE::<CI<191>> {}, CE::<CI<192>> {});\n    let (in193, in194, in195) = (CE::<CI<193>> {}, CE::<CI<194>> {}, CE::<CI<195>> {});\n    let (in196, in197, in198) = (CE::<CI<196>> {}, CE::<CI<197>> {}, CE::<CI<198>> {});\n    let (in199, in200, in201) = (CE::<CI<199>> {}, CE::<CI<200>> {}, CE::<CI<201>> {});\n    let (in202, in203, in204) = (CE::<CI<202>> {}, CE::<CI<203>> {}, CE::<CI<204>> {});\n    let (in205, in206, in207) = (CE::<CI<205>> {}, CE::<CI<206>> {}, CE::<CI<207>> {});\n    let (in208, in209, in210) = (CE::<CI<208>> {}, CE::<CI<209>> {}, CE::<CI<210>> {});\n    let (in211, in212, in213) = (CE::<CI<211>> {}, CE::<CI<212>> {}, CE::<CI<213>> {});\n    let (in214, in215, in216) = (CE::<CI<214>> {}, CE::<CI<215>> {}, CE::<CI<216>> {});\n    let (in217, in218, in219) = (CE::<CI<217>> {}, CE::<CI<218>> {}, CE::<CI<219>> {});\n    let (in220, in221, in222) = (CE::<CI<220>> {}, CE::<CI<221>> {}, CE::<CI<222>> {});\n    let (in223, in224, in225) = (CE::<CI<223>> {}, CE::<CI<224>> {}, CE::<CI<225>> {});\n    let (in226, in227, in228) = (CE::<CI<226>> {}, CE::<CI<227>> {}, CE::<CI<228>> {});\n    let (in229, in230, in231) = (CE::<CI<229>> {}, CE::<CI<230>> {}, CE::<CI<231>> {});\n    let (in232, in233, in234) = (CE::<CI<232>> {}, CE::<CI<233>> {}, CE::<CI<234>> {});\n    let (in235, in236, in237) = (CE::<CI<235>> {}, CE::<CI<236>> {}, CE::<CI<237>> {});\n    let (in238, in239, in240) = (CE::<CI<238>> {}, CE::<CI<239>> {}, CE::<CI<240>> {});\n    let t0 = circuit_mul(in44, in44); // compute z^2\n    let t1 = circuit_mul(t0, in44); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, in44); // compute z^7\n    let t4 = circuit_mul(t3, t0); // compute z^9\n    let t5 = circuit_mul(t4, t1); // compute z^12\n    let t6 = circuit_sub(in6, in31);\n    let t7 = circuit_sub(in6, in33);\n    let t8 = circuit_mul(in30, in0); // Fp2 mul start\n    let t9 = circuit_mul(t6, in1);\n    let t10 = circuit_sub(t8, t9); // Fp2 mul real part end\n    let t11 = circuit_mul(in30, in1);\n    let t12 = circuit_mul(t6, in0);\n    let t13 = circuit_add(t11, t12); // Fp2 mul imag part end\n    let t14 = circuit_mul(in32, in2); // Fp2 mul start\n    let t15 = circuit_mul(t7, in3);\n    let t16 = circuit_sub(t14, t15); // Fp2 mul real part end\n    let t17 = circuit_mul(in32, in3);\n    let t18 = circuit_mul(t7, in2);\n    let t19 = circuit_add(t17, t18); // Fp2 mul imag part end\n    let t20 = circuit_mul(in30, in4); // Fp2 scalar mul coeff 0/1\n    let t21 = circuit_mul(in31, in4); // Fp2 scalar mul coeff 1/1\n    let t22 = circuit_mul(in32, in5); // Fp2 scalar mul coeff 0/1\n    let t23 = circuit_mul(in33, in5); // Fp2 scalar mul coeff 1/1\n    let t24 = circuit_sub(in38, t16); // Fp2 sub coeff 0/1\n    let t25 = circuit_sub(in39, t19); // Fp2 sub coeff 1/1\n    let t26 = circuit_sub(in36, t10); // Fp2 sub coeff 0/1\n    let t27 = circuit_sub(in37, t13); // Fp2 sub coeff 1/1\n    let t28 = circuit_mul(t26, t26); // Fp2 Inv start\n    let t29 = circuit_mul(t27, t27);\n    let t30 = circuit_add(t28, t29);\n    let t31 = circuit_inverse(t30);\n    let t32 = circuit_mul(t26, t31); // Fp2 Inv real part end\n    let t33 = circuit_mul(t27, t31);\n    let t34 = circuit_sub(in6, t33); // Fp2 Inv imag part end\n    let t35 = circuit_mul(t24, t32); // Fp2 mul start\n    let t36 = circuit_mul(t25, t34);\n    let t37 = circuit_sub(t35, t36); // Fp2 mul real part end\n    let t38 = circuit_mul(t24, t34);\n    let t39 = circuit_mul(t25, t32);\n    let t40 = circuit_add(t38, t39); // Fp2 mul imag part end\n    let t41 = circuit_add(t37, t40);\n    let t42 = circuit_sub(t37, t40);\n    let t43 = circuit_mul(t41, t42);\n    let t44 = circuit_mul(t37, t40);\n    let t45 = circuit_add(t44, t44);\n    let t46 = circuit_add(in36, t10); // Fp2 add coeff 0/1\n    let t47 = circuit_add(in37, t13); // Fp2 add coeff 1/1\n    let t48 = circuit_sub(t43, t46); // Fp2 sub coeff 0/1\n    let t49 = circuit_sub(t45, t47); // Fp2 sub coeff 1/1\n    let t50 = circuit_sub(in36, t48); // Fp2 sub coeff 0/1\n    let t51 = circuit_sub(in37, t49); // Fp2 sub coeff 1/1\n    let t52 = circuit_mul(t37, t50); // Fp2 mul start\n    let t53 = circuit_mul(t40, t51);\n    let t54 = circuit_sub(t52, t53); // Fp2 mul real part end\n    let t55 = circuit_mul(t37, t51);\n    let t56 = circuit_mul(t40, t50);\n    let t57 = circuit_add(t55, t56); // Fp2 mul imag part end\n    let t58 = circuit_sub(t54, in38); // Fp2 sub coeff 0/1\n    let t59 = circuit_sub(t57, in39); // Fp2 sub coeff 1/1\n    let t60 = circuit_mul(t37, in36); // Fp2 mul start\n    let t61 = circuit_mul(t40, in37);\n    let t62 = circuit_sub(t60, t61); // Fp2 mul real part end\n    let t63 = circuit_mul(t37, in37);\n    let t64 = circuit_mul(t40, in36);\n    let t65 = circuit_add(t63, t64); // Fp2 mul imag part end\n    let t66 = circuit_sub(t62, in38); // Fp2 sub coeff 0/1\n    let t67 = circuit_sub(t65, in39); // Fp2 sub coeff 1/1\n    let t68 = circuit_sub(t58, t22); // Fp2 sub coeff 0/1\n    let t69 = circuit_sub(t59, t23); // Fp2 sub coeff 1/1\n    let t70 = circuit_sub(t48, t20); // Fp2 sub coeff 0/1\n    let t71 = circuit_sub(t49, t21); // Fp2 sub coeff 1/1\n    let t72 = circuit_mul(t70, t70); // Fp2 Inv start\n    let t73 = circuit_mul(t71, t71);\n    let t74 = circuit_add(t72, t73);\n    let t75 = circuit_inverse(t74);\n    let t76 = circuit_mul(t70, t75); // Fp2 Inv real part end\n    let t77 = circuit_mul(t71, t75);\n    let t78 = circuit_sub(in6, t77); // Fp2 Inv imag part end\n    let t79 = circuit_mul(t68, t76); // Fp2 mul start\n    let t80 = circuit_mul(t69, t78);\n    let t81 = circuit_sub(t79, t80); // Fp2 mul real part end\n    let t82 = circuit_mul(t68, t78);\n    let t83 = circuit_mul(t69, t76);\n    let t84 = circuit_add(t82, t83); // Fp2 mul imag part end\n    let t85 = circuit_mul(t81, t48); // Fp2 mul start\n    let t86 = circuit_mul(t84, t49);\n    let t87 = circuit_sub(t85, t86); // Fp2 mul real part end\n    let t88 = circuit_mul(t81, t49);\n    let t89 = circuit_mul(t84, t48);\n    let t90 = circuit_add(t88, t89); // Fp2 mul imag part end\n    let t91 = circuit_sub(t87, t58); // Fp2 sub coeff 0/1\n    let t92 = circuit_sub(t90, t59); // Fp2 sub coeff 1/1\n    let t93 = circuit_mul(in7, in13);\n    let t94 = circuit_add(in12, t93);\n    let t95 = circuit_mul(t94, in11); // eval bn line by xNegOverY\n    let t96 = circuit_mul(in7, in15);\n    let t97 = circuit_add(in14, t96);\n    let t98 = circuit_mul(t97, in10); // eval bn line by yInv\n    let t99 = circuit_mul(in13, in11); // eval bn line by xNegOverY\n    let t100 = circuit_mul(in15, in10); // eval bn line by yInv\n    let t101 = circuit_mul(in7, in17);\n    let t102 = circuit_add(in16, t101);\n    let t103 = circuit_mul(t102, in11); // eval bn line by xNegOverY\n    let t104 = circuit_mul(in7, in19);\n    let t105 = circuit_add(in18, t104);\n    let t106 = circuit_mul(t105, in10); // eval bn line by yInv\n    let t107 = circuit_mul(in17, in11); // eval bn line by xNegOverY\n    let t108 = circuit_mul(in19, in10); // eval bn line by yInv\n    let t109 = circuit_mul(in7, in23);\n    let t110 = circuit_add(in22, t109);\n    let t111 = circuit_mul(t110, in21); // eval bn line by xNegOverY\n    let t112 = circuit_mul(in7, in25);\n    let t113 = circuit_add(in24, t112);\n    let t114 = circuit_mul(t113, in20); // eval bn line by yInv\n    let t115 = circuit_mul(in23, in21); // eval bn line by xNegOverY\n    let t116 = circuit_mul(in25, in20); // eval bn line by yInv\n    let t117 = circuit_mul(in7, in27);\n    let t118 = circuit_add(in26, t117);\n    let t119 = circuit_mul(t118, in21); // eval bn line by xNegOverY\n    let t120 = circuit_mul(in7, in29);\n    let t121 = circuit_add(in28, t120);\n    let t122 = circuit_mul(t121, in20); // eval bn line by yInv\n    let t123 = circuit_mul(in27, in21); // eval bn line by xNegOverY\n    let t124 = circuit_mul(in29, in20); // eval bn line by yInv\n    let t125 = circuit_mul(in7, t40);\n    let t126 = circuit_add(t37, t125);\n    let t127 = circuit_mul(t126, in35); // eval bn line by xNegOverY\n    let t128 = circuit_mul(in7, t67);\n    let t129 = circuit_add(t66, t128);\n    let t130 = circuit_mul(t129, in34); // eval bn line by yInv\n    let t131 = circuit_mul(t40, in35); // eval bn line by xNegOverY\n    let t132 = circuit_mul(t67, in34); // eval bn line by yInv\n    let t133 = circuit_mul(in7, t84);\n    let t134 = circuit_add(t81, t133);\n    let t135 = circuit_mul(t134, in35); // eval bn line by xNegOverY\n    let t136 = circuit_mul(in7, t92);\n    let t137 = circuit_add(t91, t136);\n    let t138 = circuit_mul(t137, in34); // eval bn line by yInv\n    let t139 = circuit_mul(t84, in35); // eval bn line by xNegOverY\n    let t140 = circuit_mul(t92, in34); // eval bn line by yInv\n    let t141 = circuit_mul(t95, in44); // Eval sparse poly line_0 step coeff_1 * z^1\n    let t142 = circuit_add(in5, t141); // Eval sparse poly line_0 step + coeff_1 * z^1\n    let t143 = circuit_mul(t98, t1); // Eval sparse poly line_0 step coeff_3 * z^3\n    let t144 = circuit_add(t142, t143); // Eval sparse poly line_0 step + coeff_3 * z^3\n    let t145 = circuit_mul(t99, t3); // Eval sparse poly line_0 step coeff_7 * z^7\n    let t146 = circuit_add(t144, t145); // Eval sparse poly line_0 step + coeff_7 * z^7\n    let t147 = circuit_mul(t100, t4); // Eval sparse poly line_0 step coeff_9 * z^9\n    let t148 = circuit_add(t146, t147); // Eval sparse poly line_0 step + coeff_9 * z^9\n    let t149 = circuit_mul(in49, t148);\n    let t150 = circuit_mul(t103, in44); // Eval sparse poly line_1 step coeff_1 * z^1\n    let t151 = circuit_add(in5, t150); // Eval sparse poly line_1 step + coeff_1 * z^1\n    let t152 = circuit_mul(t106, t1); // Eval sparse poly line_1 step coeff_3 * z^3\n    let t153 = circuit_add(t151, t152); // Eval sparse poly line_1 step + coeff_3 * z^3\n    let t154 = circuit_mul(t107, t3); // Eval sparse poly line_1 step coeff_7 * z^7\n    let t155 = circuit_add(t153, t154); // Eval sparse poly line_1 step + coeff_7 * z^7\n    let t156 = circuit_mul(t108, t4); // Eval sparse poly line_1 step coeff_9 * z^9\n    let t157 = circuit_add(t155, t156); // Eval sparse poly line_1 step + coeff_9 * z^9\n    let t158 = circuit_mul(t149, t157);\n    let t159 = circuit_mul(t111, in44); // Eval sparse poly line_2 step coeff_1 * z^1\n    let t160 = circuit_add(in5, t159); // Eval sparse poly line_2 step + coeff_1 * z^1\n    let t161 = circuit_mul(t114, t1); // Eval sparse poly line_2 step coeff_3 * z^3\n    let t162 = circuit_add(t160, t161); // Eval sparse poly line_2 step + coeff_3 * z^3\n    let t163 = circuit_mul(t115, t3); // Eval sparse poly line_2 step coeff_7 * z^7\n    let t164 = circuit_add(t162, t163); // Eval sparse poly line_2 step + coeff_7 * z^7\n    let t165 = circuit_mul(t116, t4); // Eval sparse poly line_2 step coeff_9 * z^9\n    let t166 = circuit_add(t164, t165); // Eval sparse poly line_2 step + coeff_9 * z^9\n    let t167 = circuit_mul(t158, t166);\n    let t168 = circuit_mul(t119, in44); // Eval sparse poly line_3 step coeff_1 * z^1\n    let t169 = circuit_add(in5, t168); // Eval sparse poly line_3 step + coeff_1 * z^1\n    let t170 = circuit_mul(t122, t1); // Eval sparse poly line_3 step coeff_3 * z^3\n    let t171 = circuit_add(t169, t170); // Eval sparse poly line_3 step + coeff_3 * z^3\n    let t172 = circuit_mul(t123, t3); // Eval sparse poly line_3 step coeff_7 * z^7\n    let t173 = circuit_add(t171, t172); // Eval sparse poly line_3 step + coeff_7 * z^7\n    let t174 = circuit_mul(t124, t4); // Eval sparse poly line_3 step coeff_9 * z^9\n    let t175 = circuit_add(t173, t174); // Eval sparse poly line_3 step + coeff_9 * z^9\n    let t176 = circuit_mul(t167, t175);\n    let t177 = circuit_mul(t127, in44); // Eval sparse poly line_4 step coeff_1 * z^1\n    let t178 = circuit_add(in5, t177); // Eval sparse poly line_4 step + coeff_1 * z^1\n    let t179 = circuit_mul(t130, t1); // Eval sparse poly line_4 step coeff_3 * z^3\n    let t180 = circuit_add(t178, t179); // Eval sparse poly line_4 step + coeff_3 * z^3\n    let t181 = circuit_mul(t131, t3); // Eval sparse poly line_4 step coeff_7 * z^7\n    let t182 = circuit_add(t180, t181); // Eval sparse poly line_4 step + coeff_7 * z^7\n    let t183 = circuit_mul(t132, t4); // Eval sparse poly line_4 step coeff_9 * z^9\n    let t184 = circuit_add(t182, t183); // Eval sparse poly line_4 step + coeff_9 * z^9\n    let t185 = circuit_mul(t176, t184);\n    let t186 = circuit_mul(t135, in44); // Eval sparse poly line_5 step coeff_1 * z^1\n    let t187 = circuit_add(in5, t186); // Eval sparse poly line_5 step + coeff_1 * z^1\n    let t188 = circuit_mul(t138, t1); // Eval sparse poly line_5 step coeff_3 * z^3\n    let t189 = circuit_add(t187, t188); // Eval sparse poly line_5 step + coeff_3 * z^3\n    let t190 = circuit_mul(t139, t3); // Eval sparse poly line_5 step coeff_7 * z^7\n    let t191 = circuit_add(t189, t190); // Eval sparse poly line_5 step + coeff_7 * z^7\n    let t192 = circuit_mul(t140, t4); // Eval sparse poly line_5 step coeff_9 * z^9\n    let t193 = circuit_add(t191, t192); // Eval sparse poly line_5 step + coeff_9 * z^9\n    let t194 = circuit_mul(t185, t193);\n    let t195 = circuit_sub(t194, in40); // ((Π(n-2,k) (Pk(z)) - R_n_minus_2(z))\n    let t196 = circuit_mul(in40, in45);\n    let t197 = circuit_mul(t196, in46);\n    let t198 = circuit_mul(t197, in47);\n    let t199 = circuit_mul(t198, in43);\n    let t200 = circuit_mul(t199, in240);\n    let t201 = circuit_sub(t200, in41); // ((Π(n-1,k) (Pk(z)) - R_n_minus_1(z))\n    let t202 = circuit_mul(in42, in48);\n    let t203 = circuit_add(t202, t195);\n    let t204 = circuit_mul(in42, t203);\n    let t205 = circuit_add(t204, t201);\n    let t206 = circuit_mul(in239, in44); // Eval big_Q Horner step: multiply by z\n    let t207 = circuit_add(in238, t206); // Eval big_Q Horner step: add coefficient_188\n    let t208 = circuit_mul(t207, in44); // Eval big_Q Horner step: multiply by z\n    let t209 = circuit_add(in237, t208); // Eval big_Q Horner step: add coefficient_187\n    let t210 = circuit_mul(t209, in44); // Eval big_Q Horner step: multiply by z\n    let t211 = circuit_add(in236, t210); // Eval big_Q Horner step: add coefficient_186\n    let t212 = circuit_mul(t211, in44); // Eval big_Q Horner step: multiply by z\n    let t213 = circuit_add(in235, t212); // Eval big_Q Horner step: add coefficient_185\n    let t214 = circuit_mul(t213, in44); // Eval big_Q Horner step: multiply by z\n    let t215 = circuit_add(in234, t214); // Eval big_Q Horner step: add coefficient_184\n    let t216 = circuit_mul(t215, in44); // Eval big_Q Horner step: multiply by z\n    let t217 = circuit_add(in233, t216); // Eval big_Q Horner step: add coefficient_183\n    let t218 = circuit_mul(t217, in44); // Eval big_Q Horner step: multiply by z\n    let t219 = circuit_add(in232, t218); // Eval big_Q Horner step: add coefficient_182\n    let t220 = circuit_mul(t219, in44); // Eval big_Q Horner step: multiply by z\n    let t221 = circuit_add(in231, t220); // Eval big_Q Horner step: add coefficient_181\n    let t222 = circuit_mul(t221, in44); // Eval big_Q Horner step: multiply by z\n    let t223 = circuit_add(in230, t222); // Eval big_Q Horner step: add coefficient_180\n    let t224 = circuit_mul(t223, in44); // Eval big_Q Horner step: multiply by z\n    let t225 = circuit_add(in229, t224); // Eval big_Q Horner step: add coefficient_179\n    let t226 = circuit_mul(t225, in44); // Eval big_Q Horner step: multiply by z\n    let t227 = circuit_add(in228, t226); // Eval big_Q Horner step: add coefficient_178\n    let t228 = circuit_mul(t227, in44); // Eval big_Q Horner step: multiply by z\n    let t229 = circuit_add(in227, t228); // Eval big_Q Horner step: add coefficient_177\n    let t230 = circuit_mul(t229, in44); // Eval big_Q Horner step: multiply by z\n    let t231 = circuit_add(in226, t230); // Eval big_Q Horner step: add coefficient_176\n    let t232 = circuit_mul(t231, in44); // Eval big_Q Horner step: multiply by z\n    let t233 = circuit_add(in225, t232); // Eval big_Q Horner step: add coefficient_175\n    let t234 = circuit_mul(t233, in44); // Eval big_Q Horner step: multiply by z\n    let t235 = circuit_add(in224, t234); // Eval big_Q Horner step: add coefficient_174\n    let t236 = circuit_mul(t235, in44); // Eval big_Q Horner step: multiply by z\n    let t237 = circuit_add(in223, t236); // Eval big_Q Horner step: add coefficient_173\n    let t238 = circuit_mul(t237, in44); // Eval big_Q Horner step: multiply by z\n    let t239 = circuit_add(in222, t238); // Eval big_Q Horner step: add coefficient_172\n    let t240 = circuit_mul(t239, in44); // Eval big_Q Horner step: multiply by z\n    let t241 = circuit_add(in221, t240); // Eval big_Q Horner step: add coefficient_171\n    let t242 = circuit_mul(t241, in44); // Eval big_Q Horner step: multiply by z\n    let t243 = circuit_add(in220, t242); // Eval big_Q Horner step: add coefficient_170\n    let t244 = circuit_mul(t243, in44); // Eval big_Q Horner step: multiply by z\n    let t245 = circuit_add(in219, t244); // Eval big_Q Horner step: add coefficient_169\n    let t246 = circuit_mul(t245, in44); // Eval big_Q Horner step: multiply by z\n    let t247 = circuit_add(in218, t246); // Eval big_Q Horner step: add coefficient_168\n    let t248 = circuit_mul(t247, in44); // Eval big_Q Horner step: multiply by z\n    let t249 = circuit_add(in217, t248); // Eval big_Q Horner step: add coefficient_167\n    let t250 = circuit_mul(t249, in44); // Eval big_Q Horner step: multiply by z\n    let t251 = circuit_add(in216, t250); // Eval big_Q Horner step: add coefficient_166\n    let t252 = circuit_mul(t251, in44); // Eval big_Q Horner step: multiply by z\n    let t253 = circuit_add(in215, t252); // Eval big_Q Horner step: add coefficient_165\n    let t254 = circuit_mul(t253, in44); // Eval big_Q Horner step: multiply by z\n    let t255 = circuit_add(in214, t254); // Eval big_Q Horner step: add coefficient_164\n    let t256 = circuit_mul(t255, in44); // Eval big_Q Horner step: multiply by z\n    let t257 = circuit_add(in213, t256); // Eval big_Q Horner step: add coefficient_163\n    let t258 = circuit_mul(t257, in44); // Eval big_Q Horner step: multiply by z\n    let t259 = circuit_add(in212, t258); // Eval big_Q Horner step: add coefficient_162\n    let t260 = circuit_mul(t259, in44); // Eval big_Q Horner step: multiply by z\n    let t261 = circuit_add(in211, t260); // Eval big_Q Horner step: add coefficient_161\n    let t262 = circuit_mul(t261, in44); // Eval big_Q Horner step: multiply by z\n    let t263 = circuit_add(in210, t262); // Eval big_Q Horner step: add coefficient_160\n    let t264 = circuit_mul(t263, in44); // Eval big_Q Horner step: multiply by z\n    let t265 = circuit_add(in209, t264); // Eval big_Q Horner step: add coefficient_159\n    let t266 = circuit_mul(t265, in44); // Eval big_Q Horner step: multiply by z\n    let t267 = circuit_add(in208, t266); // Eval big_Q Horner step: add coefficient_158\n    let t268 = circuit_mul(t267, in44); // Eval big_Q Horner step: multiply by z\n    let t269 = circuit_add(in207, t268); // Eval big_Q Horner step: add coefficient_157\n    let t270 = circuit_mul(t269, in44); // Eval big_Q Horner step: multiply by z\n    let t271 = circuit_add(in206, t270); // Eval big_Q Horner step: add coefficient_156\n    let t272 = circuit_mul(t271, in44); // Eval big_Q Horner step: multiply by z\n    let t273 = circuit_add(in205, t272); // Eval big_Q Horner step: add coefficient_155\n    let t274 = circuit_mul(t273, in44); // Eval big_Q Horner step: multiply by z\n    let t275 = circuit_add(in204, t274); // Eval big_Q Horner step: add coefficient_154\n    let t276 = circuit_mul(t275, in44); // Eval big_Q Horner step: multiply by z\n    let t277 = circuit_add(in203, t276); // Eval big_Q Horner step: add coefficient_153\n    let t278 = circuit_mul(t277, in44); // Eval big_Q Horner step: multiply by z\n    let t279 = circuit_add(in202, t278); // Eval big_Q Horner step: add coefficient_152\n    let t280 = circuit_mul(t279, in44); // Eval big_Q Horner step: multiply by z\n    let t281 = circuit_add(in201, t280); // Eval big_Q Horner step: add coefficient_151\n    let t282 = circuit_mul(t281, in44); // Eval big_Q Horner step: multiply by z\n    let t283 = circuit_add(in200, t282); // Eval big_Q Horner step: add coefficient_150\n    let t284 = circuit_mul(t283, in44); // Eval big_Q Horner step: multiply by z\n    let t285 = circuit_add(in199, t284); // Eval big_Q Horner step: add coefficient_149\n    let t286 = circuit_mul(t285, in44); // Eval big_Q Horner step: multiply by z\n    let t287 = circuit_add(in198, t286); // Eval big_Q Horner step: add coefficient_148\n    let t288 = circuit_mul(t287, in44); // Eval big_Q Horner step: multiply by z\n    let t289 = circuit_add(in197, t288); // Eval big_Q Horner step: add coefficient_147\n    let t290 = circuit_mul(t289, in44); // Eval big_Q Horner step: multiply by z\n    let t291 = circuit_add(in196, t290); // Eval big_Q Horner step: add coefficient_146\n    let t292 = circuit_mul(t291, in44); // Eval big_Q Horner step: multiply by z\n    let t293 = circuit_add(in195, t292); // Eval big_Q Horner step: add coefficient_145\n    let t294 = circuit_mul(t293, in44); // Eval big_Q Horner step: multiply by z\n    let t295 = circuit_add(in194, t294); // Eval big_Q Horner step: add coefficient_144\n    let t296 = circuit_mul(t295, in44); // Eval big_Q Horner step: multiply by z\n    let t297 = circuit_add(in193, t296); // Eval big_Q Horner step: add coefficient_143\n    let t298 = circuit_mul(t297, in44); // Eval big_Q Horner step: multiply by z\n    let t299 = circuit_add(in192, t298); // Eval big_Q Horner step: add coefficient_142\n    let t300 = circuit_mul(t299, in44); // Eval big_Q Horner step: multiply by z\n    let t301 = circuit_add(in191, t300); // Eval big_Q Horner step: add coefficient_141\n    let t302 = circuit_mul(t301, in44); // Eval big_Q Horner step: multiply by z\n    let t303 = circuit_add(in190, t302); // Eval big_Q Horner step: add coefficient_140\n    let t304 = circuit_mul(t303, in44); // Eval big_Q Horner step: multiply by z\n    let t305 = circuit_add(in189, t304); // Eval big_Q Horner step: add coefficient_139\n    let t306 = circuit_mul(t305, in44); // Eval big_Q Horner step: multiply by z\n    let t307 = circuit_add(in188, t306); // Eval big_Q Horner step: add coefficient_138\n    let t308 = circuit_mul(t307, in44); // Eval big_Q Horner step: multiply by z\n    let t309 = circuit_add(in187, t308); // Eval big_Q Horner step: add coefficient_137\n    let t310 = circuit_mul(t309, in44); // Eval big_Q Horner step: multiply by z\n    let t311 = circuit_add(in186, t310); // Eval big_Q Horner step: add coefficient_136\n    let t312 = circuit_mul(t311, in44); // Eval big_Q Horner step: multiply by z\n    let t313 = circuit_add(in185, t312); // Eval big_Q Horner step: add coefficient_135\n    let t314 = circuit_mul(t313, in44); // Eval big_Q Horner step: multiply by z\n    let t315 = circuit_add(in184, t314); // Eval big_Q Horner step: add coefficient_134\n    let t316 = circuit_mul(t315, in44); // Eval big_Q Horner step: multiply by z\n    let t317 = circuit_add(in183, t316); // Eval big_Q Horner step: add coefficient_133\n    let t318 = circuit_mul(t317, in44); // Eval big_Q Horner step: multiply by z\n    let t319 = circuit_add(in182, t318); // Eval big_Q Horner step: add coefficient_132\n    let t320 = circuit_mul(t319, in44); // Eval big_Q Horner step: multiply by z\n    let t321 = circuit_add(in181, t320); // Eval big_Q Horner step: add coefficient_131\n    let t322 = circuit_mul(t321, in44); // Eval big_Q Horner step: multiply by z\n    let t323 = circuit_add(in180, t322); // Eval big_Q Horner step: add coefficient_130\n    let t324 = circuit_mul(t323, in44); // Eval big_Q Horner step: multiply by z\n    let t325 = circuit_add(in179, t324); // Eval big_Q Horner step: add coefficient_129\n    let t326 = circuit_mul(t325, in44); // Eval big_Q Horner step: multiply by z\n    let t327 = circuit_add(in178, t326); // Eval big_Q Horner step: add coefficient_128\n    let t328 = circuit_mul(t327, in44); // Eval big_Q Horner step: multiply by z\n    let t329 = circuit_add(in177, t328); // Eval big_Q Horner step: add coefficient_127\n    let t330 = circuit_mul(t329, in44); // Eval big_Q Horner step: multiply by z\n    let t331 = circuit_add(in176, t330); // Eval big_Q Horner step: add coefficient_126\n    let t332 = circuit_mul(t331, in44); // Eval big_Q Horner step: multiply by z\n    let t333 = circuit_add(in175, t332); // Eval big_Q Horner step: add coefficient_125\n    let t334 = circuit_mul(t333, in44); // Eval big_Q Horner step: multiply by z\n    let t335 = circuit_add(in174, t334); // Eval big_Q Horner step: add coefficient_124\n    let t336 = circuit_mul(t335, in44); // Eval big_Q Horner step: multiply by z\n    let t337 = circuit_add(in173, t336); // Eval big_Q Horner step: add coefficient_123\n    let t338 = circuit_mul(t337, in44); // Eval big_Q Horner step: multiply by z\n    let t339 = circuit_add(in172, t338); // Eval big_Q Horner step: add coefficient_122\n    let t340 = circuit_mul(t339, in44); // Eval big_Q Horner step: multiply by z\n    let t341 = circuit_add(in171, t340); // Eval big_Q Horner step: add coefficient_121\n    let t342 = circuit_mul(t341, in44); // Eval big_Q Horner step: multiply by z\n    let t343 = circuit_add(in170, t342); // Eval big_Q Horner step: add coefficient_120\n    let t344 = circuit_mul(t343, in44); // Eval big_Q Horner step: multiply by z\n    let t345 = circuit_add(in169, t344); // Eval big_Q Horner step: add coefficient_119\n    let t346 = circuit_mul(t345, in44); // Eval big_Q Horner step: multiply by z\n    let t347 = circuit_add(in168, t346); // Eval big_Q Horner step: add coefficient_118\n    let t348 = circuit_mul(t347, in44); // Eval big_Q Horner step: multiply by z\n    let t349 = circuit_add(in167, t348); // Eval big_Q Horner step: add coefficient_117\n    let t350 = circuit_mul(t349, in44); // Eval big_Q Horner step: multiply by z\n    let t351 = circuit_add(in166, t350); // Eval big_Q Horner step: add coefficient_116\n    let t352 = circuit_mul(t351, in44); // Eval big_Q Horner step: multiply by z\n    let t353 = circuit_add(in165, t352); // Eval big_Q Horner step: add coefficient_115\n    let t354 = circuit_mul(t353, in44); // Eval big_Q Horner step: multiply by z\n    let t355 = circuit_add(in164, t354); // Eval big_Q Horner step: add coefficient_114\n    let t356 = circuit_mul(t355, in44); // Eval big_Q Horner step: multiply by z\n    let t357 = circuit_add(in163, t356); // Eval big_Q Horner step: add coefficient_113\n    let t358 = circuit_mul(t357, in44); // Eval big_Q Horner step: multiply by z\n    let t359 = circuit_add(in162, t358); // Eval big_Q Horner step: add coefficient_112\n    let t360 = circuit_mul(t359, in44); // Eval big_Q Horner step: multiply by z\n    let t361 = circuit_add(in161, t360); // Eval big_Q Horner step: add coefficient_111\n    let t362 = circuit_mul(t361, in44); // Eval big_Q Horner step: multiply by z\n    let t363 = circuit_add(in160, t362); // Eval big_Q Horner step: add coefficient_110\n    let t364 = circuit_mul(t363, in44); // Eval big_Q Horner step: multiply by z\n    let t365 = circuit_add(in159, t364); // Eval big_Q Horner step: add coefficient_109\n    let t366 = circuit_mul(t365, in44); // Eval big_Q Horner step: multiply by z\n    let t367 = circuit_add(in158, t366); // Eval big_Q Horner step: add coefficient_108\n    let t368 = circuit_mul(t367, in44); // Eval big_Q Horner step: multiply by z\n    let t369 = circuit_add(in157, t368); // Eval big_Q Horner step: add coefficient_107\n    let t370 = circuit_mul(t369, in44); // Eval big_Q Horner step: multiply by z\n    let t371 = circuit_add(in156, t370); // Eval big_Q Horner step: add coefficient_106\n    let t372 = circuit_mul(t371, in44); // Eval big_Q Horner step: multiply by z\n    let t373 = circuit_add(in155, t372); // Eval big_Q Horner step: add coefficient_105\n    let t374 = circuit_mul(t373, in44); // Eval big_Q Horner step: multiply by z\n    let t375 = circuit_add(in154, t374); // Eval big_Q Horner step: add coefficient_104\n    let t376 = circuit_mul(t375, in44); // Eval big_Q Horner step: multiply by z\n    let t377 = circuit_add(in153, t376); // Eval big_Q Horner step: add coefficient_103\n    let t378 = circuit_mul(t377, in44); // Eval big_Q Horner step: multiply by z\n    let t379 = circuit_add(in152, t378); // Eval big_Q Horner step: add coefficient_102\n    let t380 = circuit_mul(t379, in44); // Eval big_Q Horner step: multiply by z\n    let t381 = circuit_add(in151, t380); // Eval big_Q Horner step: add coefficient_101\n    let t382 = circuit_mul(t381, in44); // Eval big_Q Horner step: multiply by z\n    let t383 = circuit_add(in150, t382); // Eval big_Q Horner step: add coefficient_100\n    let t384 = circuit_mul(t383, in44); // Eval big_Q Horner step: multiply by z\n    let t385 = circuit_add(in149, t384); // Eval big_Q Horner step: add coefficient_99\n    let t386 = circuit_mul(t385, in44); // Eval big_Q Horner step: multiply by z\n    let t387 = circuit_add(in148, t386); // Eval big_Q Horner step: add coefficient_98\n    let t388 = circuit_mul(t387, in44); // Eval big_Q Horner step: multiply by z\n    let t389 = circuit_add(in147, t388); // Eval big_Q Horner step: add coefficient_97\n    let t390 = circuit_mul(t389, in44); // Eval big_Q Horner step: multiply by z\n    let t391 = circuit_add(in146, t390); // Eval big_Q Horner step: add coefficient_96\n    let t392 = circuit_mul(t391, in44); // Eval big_Q Horner step: multiply by z\n    let t393 = circuit_add(in145, t392); // Eval big_Q Horner step: add coefficient_95\n    let t394 = circuit_mul(t393, in44); // Eval big_Q Horner step: multiply by z\n    let t395 = circuit_add(in144, t394); // Eval big_Q Horner step: add coefficient_94\n    let t396 = circuit_mul(t395, in44); // Eval big_Q Horner step: multiply by z\n    let t397 = circuit_add(in143, t396); // Eval big_Q Horner step: add coefficient_93\n    let t398 = circuit_mul(t397, in44); // Eval big_Q Horner step: multiply by z\n    let t399 = circuit_add(in142, t398); // Eval big_Q Horner step: add coefficient_92\n    let t400 = circuit_mul(t399, in44); // Eval big_Q Horner step: multiply by z\n    let t401 = circuit_add(in141, t400); // Eval big_Q Horner step: add coefficient_91\n    let t402 = circuit_mul(t401, in44); // Eval big_Q Horner step: multiply by z\n    let t403 = circuit_add(in140, t402); // Eval big_Q Horner step: add coefficient_90\n    let t404 = circuit_mul(t403, in44); // Eval big_Q Horner step: multiply by z\n    let t405 = circuit_add(in139, t404); // Eval big_Q Horner step: add coefficient_89\n    let t406 = circuit_mul(t405, in44); // Eval big_Q Horner step: multiply by z\n    let t407 = circuit_add(in138, t406); // Eval big_Q Horner step: add coefficient_88\n    let t408 = circuit_mul(t407, in44); // Eval big_Q Horner step: multiply by z\n    let t409 = circuit_add(in137, t408); // Eval big_Q Horner step: add coefficient_87\n    let t410 = circuit_mul(t409, in44); // Eval big_Q Horner step: multiply by z\n    let t411 = circuit_add(in136, t410); // Eval big_Q Horner step: add coefficient_86\n    let t412 = circuit_mul(t411, in44); // Eval big_Q Horner step: multiply by z\n    let t413 = circuit_add(in135, t412); // Eval big_Q Horner step: add coefficient_85\n    let t414 = circuit_mul(t413, in44); // Eval big_Q Horner step: multiply by z\n    let t415 = circuit_add(in134, t414); // Eval big_Q Horner step: add coefficient_84\n    let t416 = circuit_mul(t415, in44); // Eval big_Q Horner step: multiply by z\n    let t417 = circuit_add(in133, t416); // Eval big_Q Horner step: add coefficient_83\n    let t418 = circuit_mul(t417, in44); // Eval big_Q Horner step: multiply by z\n    let t419 = circuit_add(in132, t418); // Eval big_Q Horner step: add coefficient_82\n    let t420 = circuit_mul(t419, in44); // Eval big_Q Horner step: multiply by z\n    let t421 = circuit_add(in131, t420); // Eval big_Q Horner step: add coefficient_81\n    let t422 = circuit_mul(t421, in44); // Eval big_Q Horner step: multiply by z\n    let t423 = circuit_add(in130, t422); // Eval big_Q Horner step: add coefficient_80\n    let t424 = circuit_mul(t423, in44); // Eval big_Q Horner step: multiply by z\n    let t425 = circuit_add(in129, t424); // Eval big_Q Horner step: add coefficient_79\n    let t426 = circuit_mul(t425, in44); // Eval big_Q Horner step: multiply by z\n    let t427 = circuit_add(in128, t426); // Eval big_Q Horner step: add coefficient_78\n    let t428 = circuit_mul(t427, in44); // Eval big_Q Horner step: multiply by z\n    let t429 = circuit_add(in127, t428); // Eval big_Q Horner step: add coefficient_77\n    let t430 = circuit_mul(t429, in44); // Eval big_Q Horner step: multiply by z\n    let t431 = circuit_add(in126, t430); // Eval big_Q Horner step: add coefficient_76\n    let t432 = circuit_mul(t431, in44); // Eval big_Q Horner step: multiply by z\n    let t433 = circuit_add(in125, t432); // Eval big_Q Horner step: add coefficient_75\n    let t434 = circuit_mul(t433, in44); // Eval big_Q Horner step: multiply by z\n    let t435 = circuit_add(in124, t434); // Eval big_Q Horner step: add coefficient_74\n    let t436 = circuit_mul(t435, in44); // Eval big_Q Horner step: multiply by z\n    let t437 = circuit_add(in123, t436); // Eval big_Q Horner step: add coefficient_73\n    let t438 = circuit_mul(t437, in44); // Eval big_Q Horner step: multiply by z\n    let t439 = circuit_add(in122, t438); // Eval big_Q Horner step: add coefficient_72\n    let t440 = circuit_mul(t439, in44); // Eval big_Q Horner step: multiply by z\n    let t441 = circuit_add(in121, t440); // Eval big_Q Horner step: add coefficient_71\n    let t442 = circuit_mul(t441, in44); // Eval big_Q Horner step: multiply by z\n    let t443 = circuit_add(in120, t442); // Eval big_Q Horner step: add coefficient_70\n    let t444 = circuit_mul(t443, in44); // Eval big_Q Horner step: multiply by z\n    let t445 = circuit_add(in119, t444); // Eval big_Q Horner step: add coefficient_69\n    let t446 = circuit_mul(t445, in44); // Eval big_Q Horner step: multiply by z\n    let t447 = circuit_add(in118, t446); // Eval big_Q Horner step: add coefficient_68\n    let t448 = circuit_mul(t447, in44); // Eval big_Q Horner step: multiply by z\n    let t449 = circuit_add(in117, t448); // Eval big_Q Horner step: add coefficient_67\n    let t450 = circuit_mul(t449, in44); // Eval big_Q Horner step: multiply by z\n    let t451 = circuit_add(in116, t450); // Eval big_Q Horner step: add coefficient_66\n    let t452 = circuit_mul(t451, in44); // Eval big_Q Horner step: multiply by z\n    let t453 = circuit_add(in115, t452); // Eval big_Q Horner step: add coefficient_65\n    let t454 = circuit_mul(t453, in44); // Eval big_Q Horner step: multiply by z\n    let t455 = circuit_add(in114, t454); // Eval big_Q Horner step: add coefficient_64\n    let t456 = circuit_mul(t455, in44); // Eval big_Q Horner step: multiply by z\n    let t457 = circuit_add(in113, t456); // Eval big_Q Horner step: add coefficient_63\n    let t458 = circuit_mul(t457, in44); // Eval big_Q Horner step: multiply by z\n    let t459 = circuit_add(in112, t458); // Eval big_Q Horner step: add coefficient_62\n    let t460 = circuit_mul(t459, in44); // Eval big_Q Horner step: multiply by z\n    let t461 = circuit_add(in111, t460); // Eval big_Q Horner step: add coefficient_61\n    let t462 = circuit_mul(t461, in44); // Eval big_Q Horner step: multiply by z\n    let t463 = circuit_add(in110, t462); // Eval big_Q Horner step: add coefficient_60\n    let t464 = circuit_mul(t463, in44); // Eval big_Q Horner step: multiply by z\n    let t465 = circuit_add(in109, t464); // Eval big_Q Horner step: add coefficient_59\n    let t466 = circuit_mul(t465, in44); // Eval big_Q Horner step: multiply by z\n    let t467 = circuit_add(in108, t466); // Eval big_Q Horner step: add coefficient_58\n    let t468 = circuit_mul(t467, in44); // Eval big_Q Horner step: multiply by z\n    let t469 = circuit_add(in107, t468); // Eval big_Q Horner step: add coefficient_57\n    let t470 = circuit_mul(t469, in44); // Eval big_Q Horner step: multiply by z\n    let t471 = circuit_add(in106, t470); // Eval big_Q Horner step: add coefficient_56\n    let t472 = circuit_mul(t471, in44); // Eval big_Q Horner step: multiply by z\n    let t473 = circuit_add(in105, t472); // Eval big_Q Horner step: add coefficient_55\n    let t474 = circuit_mul(t473, in44); // Eval big_Q Horner step: multiply by z\n    let t475 = circuit_add(in104, t474); // Eval big_Q Horner step: add coefficient_54\n    let t476 = circuit_mul(t475, in44); // Eval big_Q Horner step: multiply by z\n    let t477 = circuit_add(in103, t476); // Eval big_Q Horner step: add coefficient_53\n    let t478 = circuit_mul(t477, in44); // Eval big_Q Horner step: multiply by z\n    let t479 = circuit_add(in102, t478); // Eval big_Q Horner step: add coefficient_52\n    let t480 = circuit_mul(t479, in44); // Eval big_Q Horner step: multiply by z\n    let t481 = circuit_add(in101, t480); // Eval big_Q Horner step: add coefficient_51\n    let t482 = circuit_mul(t481, in44); // Eval big_Q Horner step: multiply by z\n    let t483 = circuit_add(in100, t482); // Eval big_Q Horner step: add coefficient_50\n    let t484 = circuit_mul(t483, in44); // Eval big_Q Horner step: multiply by z\n    let t485 = circuit_add(in99, t484); // Eval big_Q Horner step: add coefficient_49\n    let t486 = circuit_mul(t485, in44); // Eval big_Q Horner step: multiply by z\n    let t487 = circuit_add(in98, t486); // Eval big_Q Horner step: add coefficient_48\n    let t488 = circuit_mul(t487, in44); // Eval big_Q Horner step: multiply by z\n    let t489 = circuit_add(in97, t488); // Eval big_Q Horner step: add coefficient_47\n    let t490 = circuit_mul(t489, in44); // Eval big_Q Horner step: multiply by z\n    let t491 = circuit_add(in96, t490); // Eval big_Q Horner step: add coefficient_46\n    let t492 = circuit_mul(t491, in44); // Eval big_Q Horner step: multiply by z\n    let t493 = circuit_add(in95, t492); // Eval big_Q Horner step: add coefficient_45\n    let t494 = circuit_mul(t493, in44); // Eval big_Q Horner step: multiply by z\n    let t495 = circuit_add(in94, t494); // Eval big_Q Horner step: add coefficient_44\n    let t496 = circuit_mul(t495, in44); // Eval big_Q Horner step: multiply by z\n    let t497 = circuit_add(in93, t496); // Eval big_Q Horner step: add coefficient_43\n    let t498 = circuit_mul(t497, in44); // Eval big_Q Horner step: multiply by z\n    let t499 = circuit_add(in92, t498); // Eval big_Q Horner step: add coefficient_42\n    let t500 = circuit_mul(t499, in44); // Eval big_Q Horner step: multiply by z\n    let t501 = circuit_add(in91, t500); // Eval big_Q Horner step: add coefficient_41\n    let t502 = circuit_mul(t501, in44); // Eval big_Q Horner step: multiply by z\n    let t503 = circuit_add(in90, t502); // Eval big_Q Horner step: add coefficient_40\n    let t504 = circuit_mul(t503, in44); // Eval big_Q Horner step: multiply by z\n    let t505 = circuit_add(in89, t504); // Eval big_Q Horner step: add coefficient_39\n    let t506 = circuit_mul(t505, in44); // Eval big_Q Horner step: multiply by z\n    let t507 = circuit_add(in88, t506); // Eval big_Q Horner step: add coefficient_38\n    let t508 = circuit_mul(t507, in44); // Eval big_Q Horner step: multiply by z\n    let t509 = circuit_add(in87, t508); // Eval big_Q Horner step: add coefficient_37\n    let t510 = circuit_mul(t509, in44); // Eval big_Q Horner step: multiply by z\n    let t511 = circuit_add(in86, t510); // Eval big_Q Horner step: add coefficient_36\n    let t512 = circuit_mul(t511, in44); // Eval big_Q Horner step: multiply by z\n    let t513 = circuit_add(in85, t512); // Eval big_Q Horner step: add coefficient_35\n    let t514 = circuit_mul(t513, in44); // Eval big_Q Horner step: multiply by z\n    let t515 = circuit_add(in84, t514); // Eval big_Q Horner step: add coefficient_34\n    let t516 = circuit_mul(t515, in44); // Eval big_Q Horner step: multiply by z\n    let t517 = circuit_add(in83, t516); // Eval big_Q Horner step: add coefficient_33\n    let t518 = circuit_mul(t517, in44); // Eval big_Q Horner step: multiply by z\n    let t519 = circuit_add(in82, t518); // Eval big_Q Horner step: add coefficient_32\n    let t520 = circuit_mul(t519, in44); // Eval big_Q Horner step: multiply by z\n    let t521 = circuit_add(in81, t520); // Eval big_Q Horner step: add coefficient_31\n    let t522 = circuit_mul(t521, in44); // Eval big_Q Horner step: multiply by z\n    let t523 = circuit_add(in80, t522); // Eval big_Q Horner step: add coefficient_30\n    let t524 = circuit_mul(t523, in44); // Eval big_Q Horner step: multiply by z\n    let t525 = circuit_add(in79, t524); // Eval big_Q Horner step: add coefficient_29\n    let t526 = circuit_mul(t525, in44); // Eval big_Q Horner step: multiply by z\n    let t527 = circuit_add(in78, t526); // Eval big_Q Horner step: add coefficient_28\n    let t528 = circuit_mul(t527, in44); // Eval big_Q Horner step: multiply by z\n    let t529 = circuit_add(in77, t528); // Eval big_Q Horner step: add coefficient_27\n    let t530 = circuit_mul(t529, in44); // Eval big_Q Horner step: multiply by z\n    let t531 = circuit_add(in76, t530); // Eval big_Q Horner step: add coefficient_26\n    let t532 = circuit_mul(t531, in44); // Eval big_Q Horner step: multiply by z\n    let t533 = circuit_add(in75, t532); // Eval big_Q Horner step: add coefficient_25\n    let t534 = circuit_mul(t533, in44); // Eval big_Q Horner step: multiply by z\n    let t535 = circuit_add(in74, t534); // Eval big_Q Horner step: add coefficient_24\n    let t536 = circuit_mul(t535, in44); // Eval big_Q Horner step: multiply by z\n    let t537 = circuit_add(in73, t536); // Eval big_Q Horner step: add coefficient_23\n    let t538 = circuit_mul(t537, in44); // Eval big_Q Horner step: multiply by z\n    let t539 = circuit_add(in72, t538); // Eval big_Q Horner step: add coefficient_22\n    let t540 = circuit_mul(t539, in44); // Eval big_Q Horner step: multiply by z\n    let t541 = circuit_add(in71, t540); // Eval big_Q Horner step: add coefficient_21\n    let t542 = circuit_mul(t541, in44); // Eval big_Q Horner step: multiply by z\n    let t543 = circuit_add(in70, t542); // Eval big_Q Horner step: add coefficient_20\n    let t544 = circuit_mul(t543, in44); // Eval big_Q Horner step: multiply by z\n    let t545 = circuit_add(in69, t544); // Eval big_Q Horner step: add coefficient_19\n    let t546 = circuit_mul(t545, in44); // Eval big_Q Horner step: multiply by z\n    let t547 = circuit_add(in68, t546); // Eval big_Q Horner step: add coefficient_18\n    let t548 = circuit_mul(t547, in44); // Eval big_Q Horner step: multiply by z\n    let t549 = circuit_add(in67, t548); // Eval big_Q Horner step: add coefficient_17\n    let t550 = circuit_mul(t549, in44); // Eval big_Q Horner step: multiply by z\n    let t551 = circuit_add(in66, t550); // Eval big_Q Horner step: add coefficient_16\n    let t552 = circuit_mul(t551, in44); // Eval big_Q Horner step: multiply by z\n    let t553 = circuit_add(in65, t552); // Eval big_Q Horner step: add coefficient_15\n    let t554 = circuit_mul(t553, in44); // Eval big_Q Horner step: multiply by z\n    let t555 = circuit_add(in64, t554); // Eval big_Q Horner step: add coefficient_14\n    let t556 = circuit_mul(t555, in44); // Eval big_Q Horner step: multiply by z\n    let t557 = circuit_add(in63, t556); // Eval big_Q Horner step: add coefficient_13\n    let t558 = circuit_mul(t557, in44); // Eval big_Q Horner step: multiply by z\n    let t559 = circuit_add(in62, t558); // Eval big_Q Horner step: add coefficient_12\n    let t560 = circuit_mul(t559, in44); // Eval big_Q Horner step: multiply by z\n    let t561 = circuit_add(in61, t560); // Eval big_Q Horner step: add coefficient_11\n    let t562 = circuit_mul(t561, in44); // Eval big_Q Horner step: multiply by z\n    let t563 = circuit_add(in60, t562); // Eval big_Q Horner step: add coefficient_10\n    let t564 = circuit_mul(t563, in44); // Eval big_Q Horner step: multiply by z\n    let t565 = circuit_add(in59, t564); // Eval big_Q Horner step: add coefficient_9\n    let t566 = circuit_mul(t565, in44); // Eval big_Q Horner step: multiply by z\n    let t567 = circuit_add(in58, t566); // Eval big_Q Horner step: add coefficient_8\n    let t568 = circuit_mul(t567, in44); // Eval big_Q Horner step: multiply by z\n    let t569 = circuit_add(in57, t568); // Eval big_Q Horner step: add coefficient_7\n    let t570 = circuit_mul(t569, in44); // Eval big_Q Horner step: multiply by z\n    let t571 = circuit_add(in56, t570); // Eval big_Q Horner step: add coefficient_6\n    let t572 = circuit_mul(t571, in44); // Eval big_Q Horner step: multiply by z\n    let t573 = circuit_add(in55, t572); // Eval big_Q Horner step: add coefficient_5\n    let t574 = circuit_mul(t573, in44); // Eval big_Q Horner step: multiply by z\n    let t575 = circuit_add(in54, t574); // Eval big_Q Horner step: add coefficient_4\n    let t576 = circuit_mul(t575, in44); // Eval big_Q Horner step: multiply by z\n    let t577 = circuit_add(in53, t576); // Eval big_Q Horner step: add coefficient_3\n    let t578 = circuit_mul(t577, in44); // Eval big_Q Horner step: multiply by z\n    let t579 = circuit_add(in52, t578); // Eval big_Q Horner step: add coefficient_2\n    let t580 = circuit_mul(t579, in44); // Eval big_Q Horner step: multiply by z\n    let t581 = circuit_add(in51, t580); // Eval big_Q Horner step: add coefficient_1\n    let t582 = circuit_mul(t581, in44); // Eval big_Q Horner step: multiply by z\n    let t583 = circuit_add(in50, t582); // Eval big_Q Horner step: add coefficient_0\n    let t584 = circuit_mul(in9, t2); // Eval sparse poly P_irr step coeff_6 * z^6\n    let t585 = circuit_add(in8, t584); // Eval sparse poly P_irr step + coeff_6 * z^6\n    let t586 = circuit_add(t585, t5); // Eval sparse poly P_irr step + 1*z^12\n    let t587 = circuit_mul(t583, t586);\n    let t588 = circuit_sub(t205, t587);\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t588,).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(MP_CHECK_FINALIZE_3P_2F_EXT_MLR_BN254_CONSTANTS.span()); // in0 - in9\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in10\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in11\n    circuit_inputs = circuit_inputs.next_2(line_1_0.r0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(line_1_0.r0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(line_1_0.r1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(line_1_0.r1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(line_2_0.r0a0); // in16\n    circuit_inputs = circuit_inputs.next_2(line_2_0.r0a1); // in17\n    circuit_inputs = circuit_inputs.next_2(line_2_0.r1a0); // in18\n    circuit_inputs = circuit_inputs.next_2(line_2_0.r1a1); // in19\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in20\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in21\n    circuit_inputs = circuit_inputs.next_2(line_1_1.r0a0); // in22\n    circuit_inputs = circuit_inputs.next_2(line_1_1.r0a1); // in23\n    circuit_inputs = circuit_inputs.next_2(line_1_1.r1a0); // in24\n    circuit_inputs = circuit_inputs.next_2(line_1_1.r1a1); // in25\n    circuit_inputs = circuit_inputs.next_2(line_2_1.r0a0); // in26\n    circuit_inputs = circuit_inputs.next_2(line_2_1.r0a1); // in27\n    circuit_inputs = circuit_inputs.next_2(line_2_1.r1a0); // in28\n    circuit_inputs = circuit_inputs.next_2(line_2_1.r1a1); // in29\n    circuit_inputs = circuit_inputs.next_2(original_Q2.x0); // in30\n    circuit_inputs = circuit_inputs.next_2(original_Q2.x1); // in31\n    circuit_inputs = circuit_inputs.next_2(original_Q2.y0); // in32\n    circuit_inputs = circuit_inputs.next_2(original_Q2.y1); // in33\n    circuit_inputs = circuit_inputs.next_2(yInv_2); // in34\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_2); // in35\n    circuit_inputs = circuit_inputs.next_2(Q_2.x0); // in36\n    circuit_inputs = circuit_inputs.next_2(Q_2.x1); // in37\n    circuit_inputs = circuit_inputs.next_2(Q_2.y0); // in38\n    circuit_inputs = circuit_inputs.next_2(Q_2.y1); // in39\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_2_of_z); // in40\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_1_of_z); // in41\n    circuit_inputs = circuit_inputs.next_2(c_0); // in42\n    circuit_inputs = circuit_inputs.next_2(w_of_z); // in43\n    circuit_inputs = circuit_inputs.next_2(z); // in44\n    circuit_inputs = circuit_inputs.next_2(c_inv_frob_1_of_z); // in45\n    circuit_inputs = circuit_inputs.next_2(c_frob_2_of_z); // in46\n    circuit_inputs = circuit_inputs.next_2(c_inv_frob_3_of_z); // in47\n    circuit_inputs = circuit_inputs.next_2(previous_lhs); // in48\n    circuit_inputs = circuit_inputs.next_2(R_n_minus_3_of_z); // in49\n\n    for val in Q.span() {\n        circuit_inputs = circuit_inputs.next_2(*val);\n    } // in50 - in239\n\n    circuit_inputs = circuit_inputs.next_2(precomputed_miller_loop_result_of_z); // in240\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let final_check: u384 = outputs.get_output(t588);\n    return (final_check,);\n}\nconst MP_CHECK_FINALIZE_3P_2F_EXT_MLR_BN254_CONSTANTS: [u384; 10] = [\n    u384 {\n        limb0: 0xc2c3330c99e39557176f553d,\n        limb1: 0x4c0bec3cf559b143b78cc310,\n        limb2: 0x2fb347984f7911f7,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb7c9dce1665d51c640fcba2,\n        limb1: 0x4ba4cc8bd75a079432ae2a1d,\n        limb2: 0x16c9e55061ebae20,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa9c95998dc54014671a0135a,\n        limb1: 0xdc5ec698b6e2f9b9dbaae0ed,\n        limb2: 0x63cf305489af5dc,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8fa25bd282d37f632623b0e3,\n        limb1: 0x704b5a7ec796f2b21807dc9,\n        limb2: 0x7c03cbcac41049a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbb966e3de4bd44e5607cfd48,\n        limb1: 0x5e6dd9e7e0acccb0c28f069f,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x6871ca8d3c208c16d87cfd3e,\n        limb1: 0xb85045b68181585d97816a91,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 { limb0: 0x52, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x6871ca8d3c208c16d87cfd35,\n        limb1: 0xb85045b68181585d97816a91,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n];\n#[inline(always)]\npub fn run_BN254_MP_CHECK_INIT_BIT_2P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_0: G2Line<u288>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_1: G2Line<u288>,\n    R_i_of_z: u384,\n    z: u384,\n    c_inv_of_z: u384,\n    c1: u384,\n    previous_lhs: u384,\n) -> (u384,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // -0x9 % p\n    let in1 = CE::<CI<1>> {}; // 0x1\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18) = (CE::<CI<17>> {}, CE::<CI<18>> {});\n    let t0 = circuit_mul(in15, in15); // compute z^2\n    let t1 = circuit_mul(t0, in15); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, in15); // compute z^7\n    let t4 = circuit_mul(t3, t0); // compute z^9\n    let t5 = circuit_mul(in16, in16);\n    let t6 = circuit_mul(in0, in5);\n    let t7 = circuit_add(in4, t6);\n    let t8 = circuit_mul(t7, in3); // eval bn line by xNegOverY\n    let t9 = circuit_mul(in0, in7);\n    let t10 = circuit_add(in6, t9);\n    let t11 = circuit_mul(t10, in2); // eval bn line by yInv\n    let t12 = circuit_mul(in5, in3); // eval bn line by xNegOverY\n    let t13 = circuit_mul(in7, in2); // eval bn line by yInv\n    let t14 = circuit_mul(t8, in15); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t15 = circuit_add(in1, t14); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t16 = circuit_mul(t11, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t17 = circuit_add(t15, t16); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t18 = circuit_mul(t12, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t19 = circuit_add(t17, t18); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t20 = circuit_mul(t13, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t21 = circuit_add(t19, t20); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t22 = circuit_mul(t5, t21);\n    let t23 = circuit_mul(in0, in11);\n    let t24 = circuit_add(in10, t23);\n    let t25 = circuit_mul(t24, in9); // eval bn line by xNegOverY\n    let t26 = circuit_mul(in0, in13);\n    let t27 = circuit_add(in12, t26);\n    let t28 = circuit_mul(t27, in8); // eval bn line by yInv\n    let t29 = circuit_mul(in11, in9); // eval bn line by xNegOverY\n    let t30 = circuit_mul(in13, in8); // eval bn line by yInv\n    let t31 = circuit_mul(t25, in15); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t32 = circuit_add(in1, t31); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t33 = circuit_mul(t28, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t34 = circuit_add(t32, t33); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t35 = circuit_mul(t29, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t36 = circuit_add(t34, t35); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t37 = circuit_mul(t30, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t38 = circuit_add(t36, t37); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t39 = circuit_mul(t22, t38);\n    let t40 = circuit_sub(t39, in14); // ((Π(i,k) (Pk(z)) - Ri(z))\n    let t41 = circuit_mul(in17, in18);\n    let t42 = circuit_add(t40, t41);\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t42,).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd3e, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in2\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in3\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r0a0); // in4\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r0a1); // in5\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r1a0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r1a1); // in7\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in8\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r0a0); // in10\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r0a1); // in11\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r1a0); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r1a1); // in13\n    circuit_inputs = circuit_inputs.next_2(R_i_of_z); // in14\n    circuit_inputs = circuit_inputs.next_2(z); // in15\n    circuit_inputs = circuit_inputs.next_2(c_inv_of_z); // in16\n    circuit_inputs = circuit_inputs.next_2(c1); // in17\n    circuit_inputs = circuit_inputs.next_2(previous_lhs); // in18\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let new_lhs: u384 = outputs.get_output(t42);\n    return (new_lhs,);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_INIT_BIT_3P_2F_circuit(\n    yInv_0: u384,\n    xNegOverY_0: u384,\n    G2_line_0: G2Line<u288>,\n    yInv_1: u384,\n    xNegOverY_1: u384,\n    G2_line_1: G2Line<u288>,\n    yInv_2: u384,\n    xNegOverY_2: u384,\n    Q_2: G2Point,\n    R_i_of_z: u384,\n    z: u384,\n    c_inv_of_z: u384,\n    c1: u384,\n    previous_lhs: u384,\n) -> (G2Point, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // -0x9 % p\n    let in1 = CE::<CI<1>> {}; // 0x1\n    let in2 = CE::<CI<2>> {}; // 0x3\n    let in3 = CE::<CI<3>> {}; // 0x6\n    let in4 = CE::<CI<4>> {}; // 0x0\n\n    // INPUT stack\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let (in23, in24, in25) = (CE::<CI<23>> {}, CE::<CI<24>> {}, CE::<CI<25>> {});\n    let (in26, in27) = (CE::<CI<26>> {}, CE::<CI<27>> {});\n    let t0 = circuit_mul(in24, in24); // compute z^2\n    let t1 = circuit_mul(t0, in24); // compute z^3\n    let t2 = circuit_mul(t1, t1); // compute z^6\n    let t3 = circuit_mul(t2, in24); // compute z^7\n    let t4 = circuit_mul(t3, t0); // compute z^9\n    let t5 = circuit_mul(in25, in25);\n    let t6 = circuit_mul(in0, in8);\n    let t7 = circuit_add(in7, t6);\n    let t8 = circuit_mul(t7, in6); // eval bn line by xNegOverY\n    let t9 = circuit_mul(in0, in10);\n    let t10 = circuit_add(in9, t9);\n    let t11 = circuit_mul(t10, in5); // eval bn line by yInv\n    let t12 = circuit_mul(in8, in6); // eval bn line by xNegOverY\n    let t13 = circuit_mul(in10, in5); // eval bn line by yInv\n    let t14 = circuit_mul(t8, in24); // Eval sparse poly line_0p_1 step coeff_1 * z^1\n    let t15 = circuit_add(in1, t14); // Eval sparse poly line_0p_1 step + coeff_1 * z^1\n    let t16 = circuit_mul(t11, t1); // Eval sparse poly line_0p_1 step coeff_3 * z^3\n    let t17 = circuit_add(t15, t16); // Eval sparse poly line_0p_1 step + coeff_3 * z^3\n    let t18 = circuit_mul(t12, t3); // Eval sparse poly line_0p_1 step coeff_7 * z^7\n    let t19 = circuit_add(t17, t18); // Eval sparse poly line_0p_1 step + coeff_7 * z^7\n    let t20 = circuit_mul(t13, t4); // Eval sparse poly line_0p_1 step coeff_9 * z^9\n    let t21 = circuit_add(t19, t20); // Eval sparse poly line_0p_1 step + coeff_9 * z^9\n    let t22 = circuit_mul(t5, t21);\n    let t23 = circuit_mul(in0, in14);\n    let t24 = circuit_add(in13, t23);\n    let t25 = circuit_mul(t24, in12); // eval bn line by xNegOverY\n    let t26 = circuit_mul(in0, in16);\n    let t27 = circuit_add(in15, t26);\n    let t28 = circuit_mul(t27, in11); // eval bn line by yInv\n    let t29 = circuit_mul(in14, in12); // eval bn line by xNegOverY\n    let t30 = circuit_mul(in16, in11); // eval bn line by yInv\n    let t31 = circuit_mul(t25, in24); // Eval sparse poly line_1p_1 step coeff_1 * z^1\n    let t32 = circuit_add(in1, t31); // Eval sparse poly line_1p_1 step + coeff_1 * z^1\n    let t33 = circuit_mul(t28, t1); // Eval sparse poly line_1p_1 step coeff_3 * z^3\n    let t34 = circuit_add(t32, t33); // Eval sparse poly line_1p_1 step + coeff_3 * z^3\n    let t35 = circuit_mul(t29, t3); // Eval sparse poly line_1p_1 step coeff_7 * z^7\n    let t36 = circuit_add(t34, t35); // Eval sparse poly line_1p_1 step + coeff_7 * z^7\n    let t37 = circuit_mul(t30, t4); // Eval sparse poly line_1p_1 step coeff_9 * z^9\n    let t38 = circuit_add(t36, t37); // Eval sparse poly line_1p_1 step + coeff_9 * z^9\n    let t39 = circuit_mul(t22, t38);\n    let t40 = circuit_add(in19, in20); // Doubling slope numerator start\n    let t41 = circuit_sub(in19, in20);\n    let t42 = circuit_mul(t40, t41);\n    let t43 = circuit_mul(in19, in20);\n    let t44 = circuit_mul(t42, in2);\n    let t45 = circuit_mul(t43, in3); // Doubling slope numerator end\n    let t46 = circuit_add(in21, in21); // Fp2 add coeff 0/1\n    let t47 = circuit_add(in22, in22); // Fp2 add coeff 1/1\n    let t48 = circuit_mul(t46, t46); // Fp2 Inv start\n    let t49 = circuit_mul(t47, t47);\n    let t50 = circuit_add(t48, t49);\n    let t51 = circuit_inverse(t50);\n    let t52 = circuit_mul(t46, t51); // Fp2 Inv real part end\n    let t53 = circuit_mul(t47, t51);\n    let t54 = circuit_sub(in4, t53); // Fp2 Inv imag part end\n    let t55 = circuit_mul(t44, t52); // Fp2 mul start\n    let t56 = circuit_mul(t45, t54);\n    let t57 = circuit_sub(t55, t56); // Fp2 mul real part end\n    let t58 = circuit_mul(t44, t54);\n    let t59 = circuit_mul(t45, t52);\n    let t60 = circuit_add(t58, t59); // Fp2 mul imag part end\n    let t61 = circuit_add(t57, t60);\n    let t62 = circuit_sub(t57, t60);\n    let t63 = circuit_mul(t61, t62);\n    let t64 = circuit_mul(t57, t60);\n    let t65 = circuit_add(t64, t64);\n    let t66 = circuit_add(in19, in19); // Fp2 add coeff 0/1\n    let t67 = circuit_add(in20, in20); // Fp2 add coeff 1/1\n    let t68 = circuit_sub(t63, t66); // Fp2 sub coeff 0/1\n    let t69 = circuit_sub(t65, t67); // Fp2 sub coeff 1/1\n    let t70 = circuit_sub(in19, t68); // Fp2 sub coeff 0/1\n    let t71 = circuit_sub(in20, t69); // Fp2 sub coeff 1/1\n    let t72 = circuit_mul(t57, t70); // Fp2 mul start\n    let t73 = circuit_mul(t60, t71);\n    let t74 = circuit_sub(t72, t73); // Fp2 mul real part end\n    let t75 = circuit_mul(t57, t71);\n    let t76 = circuit_mul(t60, t70);\n    let t77 = circuit_add(t75, t76); // Fp2 mul imag part end\n    let t78 = circuit_sub(t74, in21); // Fp2 sub coeff 0/1\n    let t79 = circuit_sub(t77, in22); // Fp2 sub coeff 1/1\n    let t80 = circuit_mul(t57, in19); // Fp2 mul start\n    let t81 = circuit_mul(t60, in20);\n    let t82 = circuit_sub(t80, t81); // Fp2 mul real part end\n    let t83 = circuit_mul(t57, in20);\n    let t84 = circuit_mul(t60, in19);\n    let t85 = circuit_add(t83, t84); // Fp2 mul imag part end\n    let t86 = circuit_sub(t82, in21); // Fp2 sub coeff 0/1\n    let t87 = circuit_sub(t85, in22); // Fp2 sub coeff 1/1\n    let t88 = circuit_mul(in0, t60);\n    let t89 = circuit_add(t57, t88);\n    let t90 = circuit_mul(t89, in18); // eval bn line by xNegOverY\n    let t91 = circuit_mul(in0, t87);\n    let t92 = circuit_add(t86, t91);\n    let t93 = circuit_mul(t92, in17); // eval bn line by yInv\n    let t94 = circuit_mul(t60, in18); // eval bn line by xNegOverY\n    let t95 = circuit_mul(t87, in17); // eval bn line by yInv\n    let t96 = circuit_mul(t90, in24); // Eval sparse poly line_2p_1 step coeff_1 * z^1\n    let t97 = circuit_add(in1, t96); // Eval sparse poly line_2p_1 step + coeff_1 * z^1\n    let t98 = circuit_mul(t93, t1); // Eval sparse poly line_2p_1 step coeff_3 * z^3\n    let t99 = circuit_add(t97, t98); // Eval sparse poly line_2p_1 step + coeff_3 * z^3\n    let t100 = circuit_mul(t94, t3); // Eval sparse poly line_2p_1 step coeff_7 * z^7\n    let t101 = circuit_add(t99, t100); // Eval sparse poly line_2p_1 step + coeff_7 * z^7\n    let t102 = circuit_mul(t95, t4); // Eval sparse poly line_2p_1 step coeff_9 * z^9\n    let t103 = circuit_add(t101, t102); // Eval sparse poly line_2p_1 step + coeff_9 * z^9\n    let t104 = circuit_mul(t39, t103);\n    let t105 = circuit_sub(t104, in23); // ((Π(i,k) (Pk(z)) - Ri(z))\n    let t106 = circuit_mul(in26, in27);\n    let t107 = circuit_add(t105, t106);\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t68, t69, t78, t79, t107).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd3e, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in2\n    circuit_inputs = circuit_inputs.next_2([0x6, 0x0, 0x0, 0x0]); // in3\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in4\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in5\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in6\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r0a0); // in7\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r0a1); // in8\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r1a0); // in9\n    circuit_inputs = circuit_inputs.next_2(G2_line_0.r1a1); // in10\n    circuit_inputs = circuit_inputs.next_2(yInv_1); // in11\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_1); // in12\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r0a0); // in13\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r0a1); // in14\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r1a0); // in15\n    circuit_inputs = circuit_inputs.next_2(G2_line_1.r1a1); // in16\n    circuit_inputs = circuit_inputs.next_2(yInv_2); // in17\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_2); // in18\n    circuit_inputs = circuit_inputs.next_2(Q_2.x0); // in19\n    circuit_inputs = circuit_inputs.next_2(Q_2.x1); // in20\n    circuit_inputs = circuit_inputs.next_2(Q_2.y0); // in21\n    circuit_inputs = circuit_inputs.next_2(Q_2.y1); // in22\n    circuit_inputs = circuit_inputs.next_2(R_i_of_z); // in23\n    circuit_inputs = circuit_inputs.next_2(z); // in24\n    circuit_inputs = circuit_inputs.next_2(c_inv_of_z); // in25\n    circuit_inputs = circuit_inputs.next_2(c1); // in26\n    circuit_inputs = circuit_inputs.next_2(previous_lhs); // in27\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t68),\n        x1: outputs.get_output(t69),\n        y0: outputs.get_output(t78),\n        y1: outputs.get_output(t79),\n    };\n    let new_lhs: u384 = outputs.get_output(t107);\n    return (Q0, new_lhs);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_PREPARE_PAIRS_1P_circuit(\n    p_0: G1Point, Qy0_0: u384, Qy1_0: u384,\n) -> (BNProcessedPair,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let in4 = CE::<CI<4>> {};\n    let t0 = circuit_inverse(in2);\n    let t1 = circuit_mul(in1, t0);\n    let t2 = circuit_sub(in0, t1);\n    let t3 = circuit_sub(in0, in3);\n    let t4 = circuit_sub(in0, in4);\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t0, t2, t3, t4).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p_0.x); // in1\n    circuit_inputs = circuit_inputs.next_2(p_0.y); // in2\n    circuit_inputs = circuit_inputs.next_2(Qy0_0); // in3\n    circuit_inputs = circuit_inputs.next_2(Qy1_0); // in4\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let p_0: BNProcessedPair = BNProcessedPair {\n        yInv: outputs.get_output(t0),\n        xNegOverY: outputs.get_output(t2),\n        QyNeg0: outputs.get_output(t3),\n        QyNeg1: outputs.get_output(t4),\n    };\n    return (p_0,);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_PREPARE_PAIRS_2P_circuit(\n    p_0: G1Point, Qy0_0: u384, Qy1_0: u384, p_1: G1Point, Qy0_1: u384, Qy1_1: u384,\n) -> (BNProcessedPair, BNProcessedPair) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8) = (CE::<CI<7>> {}, CE::<CI<8>> {});\n    let t0 = circuit_inverse(in2);\n    let t1 = circuit_mul(in1, t0);\n    let t2 = circuit_sub(in0, t1);\n    let t3 = circuit_sub(in0, in3);\n    let t4 = circuit_sub(in0, in4);\n    let t5 = circuit_inverse(in6);\n    let t6 = circuit_mul(in5, t5);\n    let t7 = circuit_sub(in0, t6);\n    let t8 = circuit_sub(in0, in7);\n    let t9 = circuit_sub(in0, in8);\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t0, t2, t3, t4, t5, t7, t8, t9).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p_0.x); // in1\n    circuit_inputs = circuit_inputs.next_2(p_0.y); // in2\n    circuit_inputs = circuit_inputs.next_2(Qy0_0); // in3\n    circuit_inputs = circuit_inputs.next_2(Qy1_0); // in4\n    circuit_inputs = circuit_inputs.next_2(p_1.x); // in5\n    circuit_inputs = circuit_inputs.next_2(p_1.y); // in6\n    circuit_inputs = circuit_inputs.next_2(Qy0_1); // in7\n    circuit_inputs = circuit_inputs.next_2(Qy1_1); // in8\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let p_0: BNProcessedPair = BNProcessedPair {\n        yInv: outputs.get_output(t0),\n        xNegOverY: outputs.get_output(t2),\n        QyNeg0: outputs.get_output(t3),\n        QyNeg1: outputs.get_output(t4),\n    };\n    let p_1: BNProcessedPair = BNProcessedPair {\n        yInv: outputs.get_output(t5),\n        xNegOverY: outputs.get_output(t7),\n        QyNeg0: outputs.get_output(t8),\n        QyNeg1: outputs.get_output(t9),\n    };\n    return (p_0, p_1);\n}\n#[inline(always)]\npub fn run_BN254_MP_CHECK_PREPARE_PAIRS_3P_circuit(\n    p_0: G1Point,\n    Qy0_0: u384,\n    Qy1_0: u384,\n    p_1: G1Point,\n    Qy0_1: u384,\n    Qy1_1: u384,\n    p_2: G1Point,\n    Qy0_2: u384,\n    Qy1_2: u384,\n) -> (BNProcessedPair, BNProcessedPair, BNProcessedPair) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8, in9) = (CE::<CI<7>> {}, CE::<CI<8>> {}, CE::<CI<9>> {});\n    let (in10, in11, in12) = (CE::<CI<10>> {}, CE::<CI<11>> {}, CE::<CI<12>> {});\n    let t0 = circuit_inverse(in2);\n    let t1 = circuit_mul(in1, t0);\n    let t2 = circuit_sub(in0, t1);\n    let t3 = circuit_sub(in0, in3);\n    let t4 = circuit_sub(in0, in4);\n    let t5 = circuit_inverse(in6);\n    let t6 = circuit_mul(in5, t5);\n    let t7 = circuit_sub(in0, t6);\n    let t8 = circuit_sub(in0, in7);\n    let t9 = circuit_sub(in0, in8);\n    let t10 = circuit_inverse(in10);\n    let t11 = circuit_mul(in9, t10);\n    let t12 = circuit_sub(in0, t11);\n    let t13 = circuit_sub(in0, in11);\n    let t14 = circuit_sub(in0, in12);\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t0, t2, t3, t4, t5, t7, t8, t9, t10, t12, t13, t14).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(p_0.x); // in1\n    circuit_inputs = circuit_inputs.next_2(p_0.y); // in2\n    circuit_inputs = circuit_inputs.next_2(Qy0_0); // in3\n    circuit_inputs = circuit_inputs.next_2(Qy1_0); // in4\n    circuit_inputs = circuit_inputs.next_2(p_1.x); // in5\n    circuit_inputs = circuit_inputs.next_2(p_1.y); // in6\n    circuit_inputs = circuit_inputs.next_2(Qy0_1); // in7\n    circuit_inputs = circuit_inputs.next_2(Qy1_1); // in8\n    circuit_inputs = circuit_inputs.next_2(p_2.x); // in9\n    circuit_inputs = circuit_inputs.next_2(p_2.y); // in10\n    circuit_inputs = circuit_inputs.next_2(Qy0_2); // in11\n    circuit_inputs = circuit_inputs.next_2(Qy1_2); // in12\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let p_0: BNProcessedPair = BNProcessedPair {\n        yInv: outputs.get_output(t0),\n        xNegOverY: outputs.get_output(t2),\n        QyNeg0: outputs.get_output(t3),\n        QyNeg1: outputs.get_output(t4),\n    };\n    let p_1: BNProcessedPair = BNProcessedPair {\n        yInv: outputs.get_output(t5),\n        xNegOverY: outputs.get_output(t7),\n        QyNeg0: outputs.get_output(t8),\n        QyNeg1: outputs.get_output(t9),\n    };\n    let p_2: BNProcessedPair = BNProcessedPair {\n        yInv: outputs.get_output(t10),\n        xNegOverY: outputs.get_output(t12),\n        QyNeg0: outputs.get_output(t13),\n        QyNeg1: outputs.get_output(t14),\n    };\n    return (p_0, p_1, p_2);\n}\n"
  },
  {
    "path": "src/src/circuits/rsa.cairo",
    "content": "use core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitOutputsTrait, EvalCircuitTrait,\n    circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::{RSA2048Chunks, RSA2048ReductionWitness};\n\nimpl CircuitDefinition17<\n    E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15, E16,\n> of core::circuit::CircuitDefinition<\n    (\n        CE<E0>,\n        CE<E1>,\n        CE<E2>,\n        CE<E3>,\n        CE<E4>,\n        CE<E5>,\n        CE<E6>,\n        CE<E7>,\n        CE<E8>,\n        CE<E9>,\n        CE<E10>,\n        CE<E11>,\n        CE<E12>,\n        CE<E13>,\n        CE<E14>,\n        CE<E15>,\n        CE<E16>,\n    ),\n> {\n    type CircuitType =\n        core::circuit::Circuit<\n            (E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15, E16),\n        >;\n}\nimpl MyDrp_17<\n    E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15, E16,\n> of Drop<\n    (\n        CE<E0>,\n        CE<E1>,\n        CE<E2>,\n        CE<E3>,\n        CE<E4>,\n        CE<E5>,\n        CE<E6>,\n        CE<E7>,\n        CE<E8>,\n        CE<E9>,\n        CE<E10>,\n        CE<E11>,\n        CE<E12>,\n        CE<E13>,\n        CE<E14>,\n        CE<E15>,\n        CE<E16>,\n    ),\n>;\n#[inline(always)]\npub fn run_RSA_FULL_VERIFICATION_circuit(\n    mod_chunks: RSA2048Chunks,\n    sig_chunks: RSA2048Chunks,\n    w_0: RSA2048ReductionWitness,\n    w_1: RSA2048ReductionWitness,\n    w_2: RSA2048ReductionWitness,\n    w_3: RSA2048ReductionWitness,\n    w_4: RSA2048ReductionWitness,\n    w_5: RSA2048ReductionWitness,\n    w_6: RSA2048ReductionWitness,\n    w_7: RSA2048ReductionWitness,\n    w_8: RSA2048ReductionWitness,\n    w_9: RSA2048ReductionWitness,\n    w_10: RSA2048ReductionWitness,\n    w_11: RSA2048ReductionWitness,\n    w_12: RSA2048ReductionWitness,\n    w_13: RSA2048ReductionWitness,\n    w_14: RSA2048ReductionWitness,\n    w_15: RSA2048ReductionWitness,\n    w_16: RSA2048ReductionWitness,\n    step: u384,\n    modulus: core::circuit::CircuitModulus,\n) -> (\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n    u384,\n) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let (in24, in25, in26) = (CE::<CI<24>> {}, CE::<CI<25>> {}, CE::<CI<26>> {});\n    let (in27, in28, in29) = (CE::<CI<27>> {}, CE::<CI<28>> {}, CE::<CI<29>> {});\n    let (in30, in31, in32) = (CE::<CI<30>> {}, CE::<CI<31>> {}, CE::<CI<32>> {});\n    let (in33, in34, in35) = (CE::<CI<33>> {}, CE::<CI<34>> {}, CE::<CI<35>> {});\n    let (in36, in37, in38) = (CE::<CI<36>> {}, CE::<CI<37>> {}, CE::<CI<38>> {});\n    let (in39, in40, in41) = (CE::<CI<39>> {}, CE::<CI<40>> {}, CE::<CI<41>> {});\n    let (in42, in43, in44) = (CE::<CI<42>> {}, CE::<CI<43>> {}, CE::<CI<44>> {});\n    let (in45, in46, in47) = (CE::<CI<45>> {}, CE::<CI<46>> {}, CE::<CI<47>> {});\n    let (in48, in49, in50) = (CE::<CI<48>> {}, CE::<CI<49>> {}, CE::<CI<50>> {});\n    let (in51, in52, in53) = (CE::<CI<51>> {}, CE::<CI<52>> {}, CE::<CI<53>> {});\n    let (in54, in55, in56) = (CE::<CI<54>> {}, CE::<CI<55>> {}, CE::<CI<56>> {});\n    let (in57, in58, in59) = (CE::<CI<57>> {}, CE::<CI<58>> {}, CE::<CI<59>> {});\n    let (in60, in61, in62) = (CE::<CI<60>> {}, CE::<CI<61>> {}, CE::<CI<62>> {});\n    let (in63, in64, in65) = (CE::<CI<63>> {}, CE::<CI<64>> {}, CE::<CI<65>> {});\n    let (in66, in67, in68) = (CE::<CI<66>> {}, CE::<CI<67>> {}, CE::<CI<68>> {});\n    let (in69, in70, in71) = (CE::<CI<69>> {}, CE::<CI<70>> {}, CE::<CI<71>> {});\n    let (in72, in73, in74) = (CE::<CI<72>> {}, CE::<CI<73>> {}, CE::<CI<74>> {});\n    let (in75, in76, in77) = (CE::<CI<75>> {}, CE::<CI<76>> {}, CE::<CI<77>> {});\n    let (in78, in79, in80) = (CE::<CI<78>> {}, CE::<CI<79>> {}, CE::<CI<80>> {});\n    let (in81, in82, in83) = (CE::<CI<81>> {}, CE::<CI<82>> {}, CE::<CI<83>> {});\n    let (in84, in85, in86) = (CE::<CI<84>> {}, CE::<CI<85>> {}, CE::<CI<86>> {});\n    let (in87, in88, in89) = (CE::<CI<87>> {}, CE::<CI<88>> {}, CE::<CI<89>> {});\n    let (in90, in91, in92) = (CE::<CI<90>> {}, CE::<CI<91>> {}, CE::<CI<92>> {});\n    let (in93, in94, in95) = (CE::<CI<93>> {}, CE::<CI<94>> {}, CE::<CI<95>> {});\n    let (in96, in97, in98) = (CE::<CI<96>> {}, CE::<CI<97>> {}, CE::<CI<98>> {});\n    let (in99, in100, in101) = (CE::<CI<99>> {}, CE::<CI<100>> {}, CE::<CI<101>> {});\n    let (in102, in103, in104) = (CE::<CI<102>> {}, CE::<CI<103>> {}, CE::<CI<104>> {});\n    let (in105, in106, in107) = (CE::<CI<105>> {}, CE::<CI<106>> {}, CE::<CI<107>> {});\n    let (in108, in109, in110) = (CE::<CI<108>> {}, CE::<CI<109>> {}, CE::<CI<110>> {});\n    let (in111, in112, in113) = (CE::<CI<111>> {}, CE::<CI<112>> {}, CE::<CI<113>> {});\n    let (in114, in115, in116) = (CE::<CI<114>> {}, CE::<CI<115>> {}, CE::<CI<116>> {});\n    let (in117, in118, in119) = (CE::<CI<117>> {}, CE::<CI<118>> {}, CE::<CI<119>> {});\n    let (in120, in121, in122) = (CE::<CI<120>> {}, CE::<CI<121>> {}, CE::<CI<122>> {});\n    let (in123, in124, in125) = (CE::<CI<123>> {}, CE::<CI<124>> {}, CE::<CI<125>> {});\n    let (in126, in127, in128) = (CE::<CI<126>> {}, CE::<CI<127>> {}, CE::<CI<128>> {});\n    let (in129, in130, in131) = (CE::<CI<129>> {}, CE::<CI<130>> {}, CE::<CI<131>> {});\n    let (in132, in133, in134) = (CE::<CI<132>> {}, CE::<CI<133>> {}, CE::<CI<134>> {});\n    let (in135, in136, in137) = (CE::<CI<135>> {}, CE::<CI<136>> {}, CE::<CI<137>> {});\n    let (in138, in139, in140) = (CE::<CI<138>> {}, CE::<CI<139>> {}, CE::<CI<140>> {});\n    let (in141, in142, in143) = (CE::<CI<141>> {}, CE::<CI<142>> {}, CE::<CI<143>> {});\n    let (in144, in145, in146) = (CE::<CI<144>> {}, CE::<CI<145>> {}, CE::<CI<146>> {});\n    let (in147, in148, in149) = (CE::<CI<147>> {}, CE::<CI<148>> {}, CE::<CI<149>> {});\n    let (in150, in151, in152) = (CE::<CI<150>> {}, CE::<CI<151>> {}, CE::<CI<152>> {});\n    let (in153, in154, in155) = (CE::<CI<153>> {}, CE::<CI<154>> {}, CE::<CI<155>> {});\n    let (in156, in157, in158) = (CE::<CI<156>> {}, CE::<CI<157>> {}, CE::<CI<158>> {});\n    let (in159, in160, in161) = (CE::<CI<159>> {}, CE::<CI<160>> {}, CE::<CI<161>> {});\n    let (in162, in163, in164) = (CE::<CI<162>> {}, CE::<CI<163>> {}, CE::<CI<164>> {});\n    let (in165, in166, in167) = (CE::<CI<165>> {}, CE::<CI<166>> {}, CE::<CI<167>> {});\n    let (in168, in169, in170) = (CE::<CI<168>> {}, CE::<CI<169>> {}, CE::<CI<170>> {});\n    let (in171, in172, in173) = (CE::<CI<171>> {}, CE::<CI<172>> {}, CE::<CI<173>> {});\n    let (in174, in175, in176) = (CE::<CI<174>> {}, CE::<CI<175>> {}, CE::<CI<176>> {});\n    let (in177, in178, in179) = (CE::<CI<177>> {}, CE::<CI<178>> {}, CE::<CI<179>> {});\n    let (in180, in181, in182) = (CE::<CI<180>> {}, CE::<CI<181>> {}, CE::<CI<182>> {});\n    let (in183, in184, in185) = (CE::<CI<183>> {}, CE::<CI<184>> {}, CE::<CI<185>> {});\n    let (in186, in187, in188) = (CE::<CI<186>> {}, CE::<CI<187>> {}, CE::<CI<188>> {});\n    let (in189, in190, in191) = (CE::<CI<189>> {}, CE::<CI<190>> {}, CE::<CI<191>> {});\n    let (in192, in193, in194) = (CE::<CI<192>> {}, CE::<CI<193>> {}, CE::<CI<194>> {});\n    let (in195, in196, in197) = (CE::<CI<195>> {}, CE::<CI<196>> {}, CE::<CI<197>> {});\n    let (in198, in199, in200) = (CE::<CI<198>> {}, CE::<CI<199>> {}, CE::<CI<200>> {});\n    let (in201, in202, in203) = (CE::<CI<201>> {}, CE::<CI<202>> {}, CE::<CI<203>> {});\n    let (in204, in205, in206) = (CE::<CI<204>> {}, CE::<CI<205>> {}, CE::<CI<206>> {});\n    let (in207, in208, in209) = (CE::<CI<207>> {}, CE::<CI<208>> {}, CE::<CI<209>> {});\n    let (in210, in211, in212) = (CE::<CI<210>> {}, CE::<CI<211>> {}, CE::<CI<212>> {});\n    let (in213, in214, in215) = (CE::<CI<213>> {}, CE::<CI<214>> {}, CE::<CI<215>> {});\n    let in216 = CE::<CI<216>> {};\n    let t0 = circuit_mul(in5, in216); // Eval mod_chunks Horner step: multiply by STEP\n    let t1 = circuit_add(in4, t0); // Eval mod_chunks Horner step: add coefficient_4\n    let t2 = circuit_mul(t1, in216); // Eval mod_chunks Horner step: multiply by STEP\n    let t3 = circuit_add(in3, t2); // Eval mod_chunks Horner step: add coefficient_3\n    let t4 = circuit_mul(t3, in216); // Eval mod_chunks Horner step: multiply by STEP\n    let t5 = circuit_add(in2, t4); // Eval mod_chunks Horner step: add coefficient_2\n    let t6 = circuit_mul(t5, in216); // Eval mod_chunks Horner step: multiply by STEP\n    let t7 = circuit_add(in1, t6); // Eval mod_chunks Horner step: add coefficient_1\n    let t8 = circuit_mul(t7, in216); // Eval mod_chunks Horner step: multiply by STEP\n    let t9 = circuit_add(in0, t8); // Eval mod_chunks Horner step: add coefficient_0\n    let t10 = circuit_mul(in11, in216); // Eval sig_chunks Horner step: multiply by STEP\n    let t11 = circuit_add(in10, t10); // Eval sig_chunks Horner step: add coefficient_4\n    let t12 = circuit_mul(t11, in216); // Eval sig_chunks Horner step: multiply by STEP\n    let t13 = circuit_add(in9, t12); // Eval sig_chunks Horner step: add coefficient_3\n    let t14 = circuit_mul(t13, in216); // Eval sig_chunks Horner step: multiply by STEP\n    let t15 = circuit_add(in8, t14); // Eval sig_chunks Horner step: add coefficient_2\n    let t16 = circuit_mul(t15, in216); // Eval sig_chunks Horner step: multiply by STEP\n    let t17 = circuit_add(in7, t16); // Eval sig_chunks Horner step: add coefficient_1\n    let t18 = circuit_mul(t17, in216); // Eval sig_chunks Horner step: multiply by STEP\n    let t19 = circuit_add(in6, t18); // Eval sig_chunks Horner step: add coefficient_0\n    let t20 = circuit_mul(in17, in216); // Eval quot_0 Horner step: multiply by STEP\n    let t21 = circuit_add(in16, t20); // Eval quot_0 Horner step: add coefficient_4\n    let t22 = circuit_mul(t21, in216); // Eval quot_0 Horner step: multiply by STEP\n    let t23 = circuit_add(in15, t22); // Eval quot_0 Horner step: add coefficient_3\n    let t24 = circuit_mul(t23, in216); // Eval quot_0 Horner step: multiply by STEP\n    let t25 = circuit_add(in14, t24); // Eval quot_0 Horner step: add coefficient_2\n    let t26 = circuit_mul(t25, in216); // Eval quot_0 Horner step: multiply by STEP\n    let t27 = circuit_add(in13, t26); // Eval quot_0 Horner step: add coefficient_1\n    let t28 = circuit_mul(t27, in216); // Eval quot_0 Horner step: multiply by STEP\n    let t29 = circuit_add(in12, t28); // Eval quot_0 Horner step: add coefficient_0\n    let t30 = circuit_mul(in23, in216); // Eval rem_0 Horner step: multiply by STEP\n    let t31 = circuit_add(in22, t30); // Eval rem_0 Horner step: add coefficient_4\n    let t32 = circuit_mul(t31, in216); // Eval rem_0 Horner step: multiply by STEP\n    let t33 = circuit_add(in21, t32); // Eval rem_0 Horner step: add coefficient_3\n    let t34 = circuit_mul(t33, in216); // Eval rem_0 Horner step: multiply by STEP\n    let t35 = circuit_add(in20, t34); // Eval rem_0 Horner step: add coefficient_2\n    let t36 = circuit_mul(t35, in216); // Eval rem_0 Horner step: multiply by STEP\n    let t37 = circuit_add(in19, t36); // Eval rem_0 Horner step: add coefficient_1\n    let t38 = circuit_mul(t37, in216); // Eval rem_0 Horner step: multiply by STEP\n    let t39 = circuit_add(in18, t38); // Eval rem_0 Horner step: add coefficient_0\n    let t40 = circuit_mul(t19, t19); // square_0\n    let t41 = circuit_mul(t29, t9); // quot*mod_0\n    let t42 = circuit_sub(t40, t41); // ab-qn_0\n    let t43 = circuit_sub(t42, t39); // ab-qn-rem_0\n    let t44 = circuit_mul(in29, in216); // Eval quot_1 Horner step: multiply by STEP\n    let t45 = circuit_add(in28, t44); // Eval quot_1 Horner step: add coefficient_4\n    let t46 = circuit_mul(t45, in216); // Eval quot_1 Horner step: multiply by STEP\n    let t47 = circuit_add(in27, t46); // Eval quot_1 Horner step: add coefficient_3\n    let t48 = circuit_mul(t47, in216); // Eval quot_1 Horner step: multiply by STEP\n    let t49 = circuit_add(in26, t48); // Eval quot_1 Horner step: add coefficient_2\n    let t50 = circuit_mul(t49, in216); // Eval quot_1 Horner step: multiply by STEP\n    let t51 = circuit_add(in25, t50); // Eval quot_1 Horner step: add coefficient_1\n    let t52 = circuit_mul(t51, in216); // Eval quot_1 Horner step: multiply by STEP\n    let t53 = circuit_add(in24, t52); // Eval quot_1 Horner step: add coefficient_0\n    let t54 = circuit_mul(in35, in216); // Eval rem_1 Horner step: multiply by STEP\n    let t55 = circuit_add(in34, t54); // Eval rem_1 Horner step: add coefficient_4\n    let t56 = circuit_mul(t55, in216); // Eval rem_1 Horner step: multiply by STEP\n    let t57 = circuit_add(in33, t56); // Eval rem_1 Horner step: add coefficient_3\n    let t58 = circuit_mul(t57, in216); // Eval rem_1 Horner step: multiply by STEP\n    let t59 = circuit_add(in32, t58); // Eval rem_1 Horner step: add coefficient_2\n    let t60 = circuit_mul(t59, in216); // Eval rem_1 Horner step: multiply by STEP\n    let t61 = circuit_add(in31, t60); // Eval rem_1 Horner step: add coefficient_1\n    let t62 = circuit_mul(t61, in216); // Eval rem_1 Horner step: multiply by STEP\n    let t63 = circuit_add(in30, t62); // Eval rem_1 Horner step: add coefficient_0\n    let t64 = circuit_mul(t39, t39); // square_1\n    let t65 = circuit_mul(t53, t9); // quot*mod_1\n    let t66 = circuit_sub(t64, t65); // ab-qn_1\n    let t67 = circuit_sub(t66, t63); // ab-qn-rem_1\n    let t68 = circuit_mul(in41, in216); // Eval quot_2 Horner step: multiply by STEP\n    let t69 = circuit_add(in40, t68); // Eval quot_2 Horner step: add coefficient_4\n    let t70 = circuit_mul(t69, in216); // Eval quot_2 Horner step: multiply by STEP\n    let t71 = circuit_add(in39, t70); // Eval quot_2 Horner step: add coefficient_3\n    let t72 = circuit_mul(t71, in216); // Eval quot_2 Horner step: multiply by STEP\n    let t73 = circuit_add(in38, t72); // Eval quot_2 Horner step: add coefficient_2\n    let t74 = circuit_mul(t73, in216); // Eval quot_2 Horner step: multiply by STEP\n    let t75 = circuit_add(in37, t74); // Eval quot_2 Horner step: add coefficient_1\n    let t76 = circuit_mul(t75, in216); // Eval quot_2 Horner step: multiply by STEP\n    let t77 = circuit_add(in36, t76); // Eval quot_2 Horner step: add coefficient_0\n    let t78 = circuit_mul(in47, in216); // Eval rem_2 Horner step: multiply by STEP\n    let t79 = circuit_add(in46, t78); // Eval rem_2 Horner step: add coefficient_4\n    let t80 = circuit_mul(t79, in216); // Eval rem_2 Horner step: multiply by STEP\n    let t81 = circuit_add(in45, t80); // Eval rem_2 Horner step: add coefficient_3\n    let t82 = circuit_mul(t81, in216); // Eval rem_2 Horner step: multiply by STEP\n    let t83 = circuit_add(in44, t82); // Eval rem_2 Horner step: add coefficient_2\n    let t84 = circuit_mul(t83, in216); // Eval rem_2 Horner step: multiply by STEP\n    let t85 = circuit_add(in43, t84); // Eval rem_2 Horner step: add coefficient_1\n    let t86 = circuit_mul(t85, in216); // Eval rem_2 Horner step: multiply by STEP\n    let t87 = circuit_add(in42, t86); // Eval rem_2 Horner step: add coefficient_0\n    let t88 = circuit_mul(t63, t63); // square_2\n    let t89 = circuit_mul(t77, t9); // quot*mod_2\n    let t90 = circuit_sub(t88, t89); // ab-qn_2\n    let t91 = circuit_sub(t90, t87); // ab-qn-rem_2\n    let t92 = circuit_mul(in53, in216); // Eval quot_3 Horner step: multiply by STEP\n    let t93 = circuit_add(in52, t92); // Eval quot_3 Horner step: add coefficient_4\n    let t94 = circuit_mul(t93, in216); // Eval quot_3 Horner step: multiply by STEP\n    let t95 = circuit_add(in51, t94); // Eval quot_3 Horner step: add coefficient_3\n    let t96 = circuit_mul(t95, in216); // Eval quot_3 Horner step: multiply by STEP\n    let t97 = circuit_add(in50, t96); // Eval quot_3 Horner step: add coefficient_2\n    let t98 = circuit_mul(t97, in216); // Eval quot_3 Horner step: multiply by STEP\n    let t99 = circuit_add(in49, t98); // Eval quot_3 Horner step: add coefficient_1\n    let t100 = circuit_mul(t99, in216); // Eval quot_3 Horner step: multiply by STEP\n    let t101 = circuit_add(in48, t100); // Eval quot_3 Horner step: add coefficient_0\n    let t102 = circuit_mul(in59, in216); // Eval rem_3 Horner step: multiply by STEP\n    let t103 = circuit_add(in58, t102); // Eval rem_3 Horner step: add coefficient_4\n    let t104 = circuit_mul(t103, in216); // Eval rem_3 Horner step: multiply by STEP\n    let t105 = circuit_add(in57, t104); // Eval rem_3 Horner step: add coefficient_3\n    let t106 = circuit_mul(t105, in216); // Eval rem_3 Horner step: multiply by STEP\n    let t107 = circuit_add(in56, t106); // Eval rem_3 Horner step: add coefficient_2\n    let t108 = circuit_mul(t107, in216); // Eval rem_3 Horner step: multiply by STEP\n    let t109 = circuit_add(in55, t108); // Eval rem_3 Horner step: add coefficient_1\n    let t110 = circuit_mul(t109, in216); // Eval rem_3 Horner step: multiply by STEP\n    let t111 = circuit_add(in54, t110); // Eval rem_3 Horner step: add coefficient_0\n    let t112 = circuit_mul(t87, t87); // square_3\n    let t113 = circuit_mul(t101, t9); // quot*mod_3\n    let t114 = circuit_sub(t112, t113); // ab-qn_3\n    let t115 = circuit_sub(t114, t111); // ab-qn-rem_3\n    let t116 = circuit_mul(in65, in216); // Eval quot_4 Horner step: multiply by STEP\n    let t117 = circuit_add(in64, t116); // Eval quot_4 Horner step: add coefficient_4\n    let t118 = circuit_mul(t117, in216); // Eval quot_4 Horner step: multiply by STEP\n    let t119 = circuit_add(in63, t118); // Eval quot_4 Horner step: add coefficient_3\n    let t120 = circuit_mul(t119, in216); // Eval quot_4 Horner step: multiply by STEP\n    let t121 = circuit_add(in62, t120); // Eval quot_4 Horner step: add coefficient_2\n    let t122 = circuit_mul(t121, in216); // Eval quot_4 Horner step: multiply by STEP\n    let t123 = circuit_add(in61, t122); // Eval quot_4 Horner step: add coefficient_1\n    let t124 = circuit_mul(t123, in216); // Eval quot_4 Horner step: multiply by STEP\n    let t125 = circuit_add(in60, t124); // Eval quot_4 Horner step: add coefficient_0\n    let t126 = circuit_mul(in71, in216); // Eval rem_4 Horner step: multiply by STEP\n    let t127 = circuit_add(in70, t126); // Eval rem_4 Horner step: add coefficient_4\n    let t128 = circuit_mul(t127, in216); // Eval rem_4 Horner step: multiply by STEP\n    let t129 = circuit_add(in69, t128); // Eval rem_4 Horner step: add coefficient_3\n    let t130 = circuit_mul(t129, in216); // Eval rem_4 Horner step: multiply by STEP\n    let t131 = circuit_add(in68, t130); // Eval rem_4 Horner step: add coefficient_2\n    let t132 = circuit_mul(t131, in216); // Eval rem_4 Horner step: multiply by STEP\n    let t133 = circuit_add(in67, t132); // Eval rem_4 Horner step: add coefficient_1\n    let t134 = circuit_mul(t133, in216); // Eval rem_4 Horner step: multiply by STEP\n    let t135 = circuit_add(in66, t134); // Eval rem_4 Horner step: add coefficient_0\n    let t136 = circuit_mul(t111, t111); // square_4\n    let t137 = circuit_mul(t125, t9); // quot*mod_4\n    let t138 = circuit_sub(t136, t137); // ab-qn_4\n    let t139 = circuit_sub(t138, t135); // ab-qn-rem_4\n    let t140 = circuit_mul(in77, in216); // Eval quot_5 Horner step: multiply by STEP\n    let t141 = circuit_add(in76, t140); // Eval quot_5 Horner step: add coefficient_4\n    let t142 = circuit_mul(t141, in216); // Eval quot_5 Horner step: multiply by STEP\n    let t143 = circuit_add(in75, t142); // Eval quot_5 Horner step: add coefficient_3\n    let t144 = circuit_mul(t143, in216); // Eval quot_5 Horner step: multiply by STEP\n    let t145 = circuit_add(in74, t144); // Eval quot_5 Horner step: add coefficient_2\n    let t146 = circuit_mul(t145, in216); // Eval quot_5 Horner step: multiply by STEP\n    let t147 = circuit_add(in73, t146); // Eval quot_5 Horner step: add coefficient_1\n    let t148 = circuit_mul(t147, in216); // Eval quot_5 Horner step: multiply by STEP\n    let t149 = circuit_add(in72, t148); // Eval quot_5 Horner step: add coefficient_0\n    let t150 = circuit_mul(in83, in216); // Eval rem_5 Horner step: multiply by STEP\n    let t151 = circuit_add(in82, t150); // Eval rem_5 Horner step: add coefficient_4\n    let t152 = circuit_mul(t151, in216); // Eval rem_5 Horner step: multiply by STEP\n    let t153 = circuit_add(in81, t152); // Eval rem_5 Horner step: add coefficient_3\n    let t154 = circuit_mul(t153, in216); // Eval rem_5 Horner step: multiply by STEP\n    let t155 = circuit_add(in80, t154); // Eval rem_5 Horner step: add coefficient_2\n    let t156 = circuit_mul(t155, in216); // Eval rem_5 Horner step: multiply by STEP\n    let t157 = circuit_add(in79, t156); // Eval rem_5 Horner step: add coefficient_1\n    let t158 = circuit_mul(t157, in216); // Eval rem_5 Horner step: multiply by STEP\n    let t159 = circuit_add(in78, t158); // Eval rem_5 Horner step: add coefficient_0\n    let t160 = circuit_mul(t135, t135); // square_5\n    let t161 = circuit_mul(t149, t9); // quot*mod_5\n    let t162 = circuit_sub(t160, t161); // ab-qn_5\n    let t163 = circuit_sub(t162, t159); // ab-qn-rem_5\n    let t164 = circuit_mul(in89, in216); // Eval quot_6 Horner step: multiply by STEP\n    let t165 = circuit_add(in88, t164); // Eval quot_6 Horner step: add coefficient_4\n    let t166 = circuit_mul(t165, in216); // Eval quot_6 Horner step: multiply by STEP\n    let t167 = circuit_add(in87, t166); // Eval quot_6 Horner step: add coefficient_3\n    let t168 = circuit_mul(t167, in216); // Eval quot_6 Horner step: multiply by STEP\n    let t169 = circuit_add(in86, t168); // Eval quot_6 Horner step: add coefficient_2\n    let t170 = circuit_mul(t169, in216); // Eval quot_6 Horner step: multiply by STEP\n    let t171 = circuit_add(in85, t170); // Eval quot_6 Horner step: add coefficient_1\n    let t172 = circuit_mul(t171, in216); // Eval quot_6 Horner step: multiply by STEP\n    let t173 = circuit_add(in84, t172); // Eval quot_6 Horner step: add coefficient_0\n    let t174 = circuit_mul(in95, in216); // Eval rem_6 Horner step: multiply by STEP\n    let t175 = circuit_add(in94, t174); // Eval rem_6 Horner step: add coefficient_4\n    let t176 = circuit_mul(t175, in216); // Eval rem_6 Horner step: multiply by STEP\n    let t177 = circuit_add(in93, t176); // Eval rem_6 Horner step: add coefficient_3\n    let t178 = circuit_mul(t177, in216); // Eval rem_6 Horner step: multiply by STEP\n    let t179 = circuit_add(in92, t178); // Eval rem_6 Horner step: add coefficient_2\n    let t180 = circuit_mul(t179, in216); // Eval rem_6 Horner step: multiply by STEP\n    let t181 = circuit_add(in91, t180); // Eval rem_6 Horner step: add coefficient_1\n    let t182 = circuit_mul(t181, in216); // Eval rem_6 Horner step: multiply by STEP\n    let t183 = circuit_add(in90, t182); // Eval rem_6 Horner step: add coefficient_0\n    let t184 = circuit_mul(t159, t159); // square_6\n    let t185 = circuit_mul(t173, t9); // quot*mod_6\n    let t186 = circuit_sub(t184, t185); // ab-qn_6\n    let t187 = circuit_sub(t186, t183); // ab-qn-rem_6\n    let t188 = circuit_mul(in101, in216); // Eval quot_7 Horner step: multiply by STEP\n    let t189 = circuit_add(in100, t188); // Eval quot_7 Horner step: add coefficient_4\n    let t190 = circuit_mul(t189, in216); // Eval quot_7 Horner step: multiply by STEP\n    let t191 = circuit_add(in99, t190); // Eval quot_7 Horner step: add coefficient_3\n    let t192 = circuit_mul(t191, in216); // Eval quot_7 Horner step: multiply by STEP\n    let t193 = circuit_add(in98, t192); // Eval quot_7 Horner step: add coefficient_2\n    let t194 = circuit_mul(t193, in216); // Eval quot_7 Horner step: multiply by STEP\n    let t195 = circuit_add(in97, t194); // Eval quot_7 Horner step: add coefficient_1\n    let t196 = circuit_mul(t195, in216); // Eval quot_7 Horner step: multiply by STEP\n    let t197 = circuit_add(in96, t196); // Eval quot_7 Horner step: add coefficient_0\n    let t198 = circuit_mul(in107, in216); // Eval rem_7 Horner step: multiply by STEP\n    let t199 = circuit_add(in106, t198); // Eval rem_7 Horner step: add coefficient_4\n    let t200 = circuit_mul(t199, in216); // Eval rem_7 Horner step: multiply by STEP\n    let t201 = circuit_add(in105, t200); // Eval rem_7 Horner step: add coefficient_3\n    let t202 = circuit_mul(t201, in216); // Eval rem_7 Horner step: multiply by STEP\n    let t203 = circuit_add(in104, t202); // Eval rem_7 Horner step: add coefficient_2\n    let t204 = circuit_mul(t203, in216); // Eval rem_7 Horner step: multiply by STEP\n    let t205 = circuit_add(in103, t204); // Eval rem_7 Horner step: add coefficient_1\n    let t206 = circuit_mul(t205, in216); // Eval rem_7 Horner step: multiply by STEP\n    let t207 = circuit_add(in102, t206); // Eval rem_7 Horner step: add coefficient_0\n    let t208 = circuit_mul(t183, t183); // square_7\n    let t209 = circuit_mul(t197, t9); // quot*mod_7\n    let t210 = circuit_sub(t208, t209); // ab-qn_7\n    let t211 = circuit_sub(t210, t207); // ab-qn-rem_7\n    let t212 = circuit_mul(in113, in216); // Eval quot_8 Horner step: multiply by STEP\n    let t213 = circuit_add(in112, t212); // Eval quot_8 Horner step: add coefficient_4\n    let t214 = circuit_mul(t213, in216); // Eval quot_8 Horner step: multiply by STEP\n    let t215 = circuit_add(in111, t214); // Eval quot_8 Horner step: add coefficient_3\n    let t216 = circuit_mul(t215, in216); // Eval quot_8 Horner step: multiply by STEP\n    let t217 = circuit_add(in110, t216); // Eval quot_8 Horner step: add coefficient_2\n    let t218 = circuit_mul(t217, in216); // Eval quot_8 Horner step: multiply by STEP\n    let t219 = circuit_add(in109, t218); // Eval quot_8 Horner step: add coefficient_1\n    let t220 = circuit_mul(t219, in216); // Eval quot_8 Horner step: multiply by STEP\n    let t221 = circuit_add(in108, t220); // Eval quot_8 Horner step: add coefficient_0\n    let t222 = circuit_mul(in119, in216); // Eval rem_8 Horner step: multiply by STEP\n    let t223 = circuit_add(in118, t222); // Eval rem_8 Horner step: add coefficient_4\n    let t224 = circuit_mul(t223, in216); // Eval rem_8 Horner step: multiply by STEP\n    let t225 = circuit_add(in117, t224); // Eval rem_8 Horner step: add coefficient_3\n    let t226 = circuit_mul(t225, in216); // Eval rem_8 Horner step: multiply by STEP\n    let t227 = circuit_add(in116, t226); // Eval rem_8 Horner step: add coefficient_2\n    let t228 = circuit_mul(t227, in216); // Eval rem_8 Horner step: multiply by STEP\n    let t229 = circuit_add(in115, t228); // Eval rem_8 Horner step: add coefficient_1\n    let t230 = circuit_mul(t229, in216); // Eval rem_8 Horner step: multiply by STEP\n    let t231 = circuit_add(in114, t230); // Eval rem_8 Horner step: add coefficient_0\n    let t232 = circuit_mul(t207, t207); // square_8\n    let t233 = circuit_mul(t221, t9); // quot*mod_8\n    let t234 = circuit_sub(t232, t233); // ab-qn_8\n    let t235 = circuit_sub(t234, t231); // ab-qn-rem_8\n    let t236 = circuit_mul(in125, in216); // Eval quot_9 Horner step: multiply by STEP\n    let t237 = circuit_add(in124, t236); // Eval quot_9 Horner step: add coefficient_4\n    let t238 = circuit_mul(t237, in216); // Eval quot_9 Horner step: multiply by STEP\n    let t239 = circuit_add(in123, t238); // Eval quot_9 Horner step: add coefficient_3\n    let t240 = circuit_mul(t239, in216); // Eval quot_9 Horner step: multiply by STEP\n    let t241 = circuit_add(in122, t240); // Eval quot_9 Horner step: add coefficient_2\n    let t242 = circuit_mul(t241, in216); // Eval quot_9 Horner step: multiply by STEP\n    let t243 = circuit_add(in121, t242); // Eval quot_9 Horner step: add coefficient_1\n    let t244 = circuit_mul(t243, in216); // Eval quot_9 Horner step: multiply by STEP\n    let t245 = circuit_add(in120, t244); // Eval quot_9 Horner step: add coefficient_0\n    let t246 = circuit_mul(in131, in216); // Eval rem_9 Horner step: multiply by STEP\n    let t247 = circuit_add(in130, t246); // Eval rem_9 Horner step: add coefficient_4\n    let t248 = circuit_mul(t247, in216); // Eval rem_9 Horner step: multiply by STEP\n    let t249 = circuit_add(in129, t248); // Eval rem_9 Horner step: add coefficient_3\n    let t250 = circuit_mul(t249, in216); // Eval rem_9 Horner step: multiply by STEP\n    let t251 = circuit_add(in128, t250); // Eval rem_9 Horner step: add coefficient_2\n    let t252 = circuit_mul(t251, in216); // Eval rem_9 Horner step: multiply by STEP\n    let t253 = circuit_add(in127, t252); // Eval rem_9 Horner step: add coefficient_1\n    let t254 = circuit_mul(t253, in216); // Eval rem_9 Horner step: multiply by STEP\n    let t255 = circuit_add(in126, t254); // Eval rem_9 Horner step: add coefficient_0\n    let t256 = circuit_mul(t231, t231); // square_9\n    let t257 = circuit_mul(t245, t9); // quot*mod_9\n    let t258 = circuit_sub(t256, t257); // ab-qn_9\n    let t259 = circuit_sub(t258, t255); // ab-qn-rem_9\n    let t260 = circuit_mul(in137, in216); // Eval quot_10 Horner step: multiply by STEP\n    let t261 = circuit_add(in136, t260); // Eval quot_10 Horner step: add coefficient_4\n    let t262 = circuit_mul(t261, in216); // Eval quot_10 Horner step: multiply by STEP\n    let t263 = circuit_add(in135, t262); // Eval quot_10 Horner step: add coefficient_3\n    let t264 = circuit_mul(t263, in216); // Eval quot_10 Horner step: multiply by STEP\n    let t265 = circuit_add(in134, t264); // Eval quot_10 Horner step: add coefficient_2\n    let t266 = circuit_mul(t265, in216); // Eval quot_10 Horner step: multiply by STEP\n    let t267 = circuit_add(in133, t266); // Eval quot_10 Horner step: add coefficient_1\n    let t268 = circuit_mul(t267, in216); // Eval quot_10 Horner step: multiply by STEP\n    let t269 = circuit_add(in132, t268); // Eval quot_10 Horner step: add coefficient_0\n    let t270 = circuit_mul(in143, in216); // Eval rem_10 Horner step: multiply by STEP\n    let t271 = circuit_add(in142, t270); // Eval rem_10 Horner step: add coefficient_4\n    let t272 = circuit_mul(t271, in216); // Eval rem_10 Horner step: multiply by STEP\n    let t273 = circuit_add(in141, t272); // Eval rem_10 Horner step: add coefficient_3\n    let t274 = circuit_mul(t273, in216); // Eval rem_10 Horner step: multiply by STEP\n    let t275 = circuit_add(in140, t274); // Eval rem_10 Horner step: add coefficient_2\n    let t276 = circuit_mul(t275, in216); // Eval rem_10 Horner step: multiply by STEP\n    let t277 = circuit_add(in139, t276); // Eval rem_10 Horner step: add coefficient_1\n    let t278 = circuit_mul(t277, in216); // Eval rem_10 Horner step: multiply by STEP\n    let t279 = circuit_add(in138, t278); // Eval rem_10 Horner step: add coefficient_0\n    let t280 = circuit_mul(t255, t255); // square_10\n    let t281 = circuit_mul(t269, t9); // quot*mod_10\n    let t282 = circuit_sub(t280, t281); // ab-qn_10\n    let t283 = circuit_sub(t282, t279); // ab-qn-rem_10\n    let t284 = circuit_mul(in149, in216); // Eval quot_11 Horner step: multiply by STEP\n    let t285 = circuit_add(in148, t284); // Eval quot_11 Horner step: add coefficient_4\n    let t286 = circuit_mul(t285, in216); // Eval quot_11 Horner step: multiply by STEP\n    let t287 = circuit_add(in147, t286); // Eval quot_11 Horner step: add coefficient_3\n    let t288 = circuit_mul(t287, in216); // Eval quot_11 Horner step: multiply by STEP\n    let t289 = circuit_add(in146, t288); // Eval quot_11 Horner step: add coefficient_2\n    let t290 = circuit_mul(t289, in216); // Eval quot_11 Horner step: multiply by STEP\n    let t291 = circuit_add(in145, t290); // Eval quot_11 Horner step: add coefficient_1\n    let t292 = circuit_mul(t291, in216); // Eval quot_11 Horner step: multiply by STEP\n    let t293 = circuit_add(in144, t292); // Eval quot_11 Horner step: add coefficient_0\n    let t294 = circuit_mul(in155, in216); // Eval rem_11 Horner step: multiply by STEP\n    let t295 = circuit_add(in154, t294); // Eval rem_11 Horner step: add coefficient_4\n    let t296 = circuit_mul(t295, in216); // Eval rem_11 Horner step: multiply by STEP\n    let t297 = circuit_add(in153, t296); // Eval rem_11 Horner step: add coefficient_3\n    let t298 = circuit_mul(t297, in216); // Eval rem_11 Horner step: multiply by STEP\n    let t299 = circuit_add(in152, t298); // Eval rem_11 Horner step: add coefficient_2\n    let t300 = circuit_mul(t299, in216); // Eval rem_11 Horner step: multiply by STEP\n    let t301 = circuit_add(in151, t300); // Eval rem_11 Horner step: add coefficient_1\n    let t302 = circuit_mul(t301, in216); // Eval rem_11 Horner step: multiply by STEP\n    let t303 = circuit_add(in150, t302); // Eval rem_11 Horner step: add coefficient_0\n    let t304 = circuit_mul(t279, t279); // square_11\n    let t305 = circuit_mul(t293, t9); // quot*mod_11\n    let t306 = circuit_sub(t304, t305); // ab-qn_11\n    let t307 = circuit_sub(t306, t303); // ab-qn-rem_11\n    let t308 = circuit_mul(in161, in216); // Eval quot_12 Horner step: multiply by STEP\n    let t309 = circuit_add(in160, t308); // Eval quot_12 Horner step: add coefficient_4\n    let t310 = circuit_mul(t309, in216); // Eval quot_12 Horner step: multiply by STEP\n    let t311 = circuit_add(in159, t310); // Eval quot_12 Horner step: add coefficient_3\n    let t312 = circuit_mul(t311, in216); // Eval quot_12 Horner step: multiply by STEP\n    let t313 = circuit_add(in158, t312); // Eval quot_12 Horner step: add coefficient_2\n    let t314 = circuit_mul(t313, in216); // Eval quot_12 Horner step: multiply by STEP\n    let t315 = circuit_add(in157, t314); // Eval quot_12 Horner step: add coefficient_1\n    let t316 = circuit_mul(t315, in216); // Eval quot_12 Horner step: multiply by STEP\n    let t317 = circuit_add(in156, t316); // Eval quot_12 Horner step: add coefficient_0\n    let t318 = circuit_mul(in167, in216); // Eval rem_12 Horner step: multiply by STEP\n    let t319 = circuit_add(in166, t318); // Eval rem_12 Horner step: add coefficient_4\n    let t320 = circuit_mul(t319, in216); // Eval rem_12 Horner step: multiply by STEP\n    let t321 = circuit_add(in165, t320); // Eval rem_12 Horner step: add coefficient_3\n    let t322 = circuit_mul(t321, in216); // Eval rem_12 Horner step: multiply by STEP\n    let t323 = circuit_add(in164, t322); // Eval rem_12 Horner step: add coefficient_2\n    let t324 = circuit_mul(t323, in216); // Eval rem_12 Horner step: multiply by STEP\n    let t325 = circuit_add(in163, t324); // Eval rem_12 Horner step: add coefficient_1\n    let t326 = circuit_mul(t325, in216); // Eval rem_12 Horner step: multiply by STEP\n    let t327 = circuit_add(in162, t326); // Eval rem_12 Horner step: add coefficient_0\n    let t328 = circuit_mul(t303, t303); // square_12\n    let t329 = circuit_mul(t317, t9); // quot*mod_12\n    let t330 = circuit_sub(t328, t329); // ab-qn_12\n    let t331 = circuit_sub(t330, t327); // ab-qn-rem_12\n    let t332 = circuit_mul(in173, in216); // Eval quot_13 Horner step: multiply by STEP\n    let t333 = circuit_add(in172, t332); // Eval quot_13 Horner step: add coefficient_4\n    let t334 = circuit_mul(t333, in216); // Eval quot_13 Horner step: multiply by STEP\n    let t335 = circuit_add(in171, t334); // Eval quot_13 Horner step: add coefficient_3\n    let t336 = circuit_mul(t335, in216); // Eval quot_13 Horner step: multiply by STEP\n    let t337 = circuit_add(in170, t336); // Eval quot_13 Horner step: add coefficient_2\n    let t338 = circuit_mul(t337, in216); // Eval quot_13 Horner step: multiply by STEP\n    let t339 = circuit_add(in169, t338); // Eval quot_13 Horner step: add coefficient_1\n    let t340 = circuit_mul(t339, in216); // Eval quot_13 Horner step: multiply by STEP\n    let t341 = circuit_add(in168, t340); // Eval quot_13 Horner step: add coefficient_0\n    let t342 = circuit_mul(in179, in216); // Eval rem_13 Horner step: multiply by STEP\n    let t343 = circuit_add(in178, t342); // Eval rem_13 Horner step: add coefficient_4\n    let t344 = circuit_mul(t343, in216); // Eval rem_13 Horner step: multiply by STEP\n    let t345 = circuit_add(in177, t344); // Eval rem_13 Horner step: add coefficient_3\n    let t346 = circuit_mul(t345, in216); // Eval rem_13 Horner step: multiply by STEP\n    let t347 = circuit_add(in176, t346); // Eval rem_13 Horner step: add coefficient_2\n    let t348 = circuit_mul(t347, in216); // Eval rem_13 Horner step: multiply by STEP\n    let t349 = circuit_add(in175, t348); // Eval rem_13 Horner step: add coefficient_1\n    let t350 = circuit_mul(t349, in216); // Eval rem_13 Horner step: multiply by STEP\n    let t351 = circuit_add(in174, t350); // Eval rem_13 Horner step: add coefficient_0\n    let t352 = circuit_mul(t327, t327); // square_13\n    let t353 = circuit_mul(t341, t9); // quot*mod_13\n    let t354 = circuit_sub(t352, t353); // ab-qn_13\n    let t355 = circuit_sub(t354, t351); // ab-qn-rem_13\n    let t356 = circuit_mul(in185, in216); // Eval quot_14 Horner step: multiply by STEP\n    let t357 = circuit_add(in184, t356); // Eval quot_14 Horner step: add coefficient_4\n    let t358 = circuit_mul(t357, in216); // Eval quot_14 Horner step: multiply by STEP\n    let t359 = circuit_add(in183, t358); // Eval quot_14 Horner step: add coefficient_3\n    let t360 = circuit_mul(t359, in216); // Eval quot_14 Horner step: multiply by STEP\n    let t361 = circuit_add(in182, t360); // Eval quot_14 Horner step: add coefficient_2\n    let t362 = circuit_mul(t361, in216); // Eval quot_14 Horner step: multiply by STEP\n    let t363 = circuit_add(in181, t362); // Eval quot_14 Horner step: add coefficient_1\n    let t364 = circuit_mul(t363, in216); // Eval quot_14 Horner step: multiply by STEP\n    let t365 = circuit_add(in180, t364); // Eval quot_14 Horner step: add coefficient_0\n    let t366 = circuit_mul(in191, in216); // Eval rem_14 Horner step: multiply by STEP\n    let t367 = circuit_add(in190, t366); // Eval rem_14 Horner step: add coefficient_4\n    let t368 = circuit_mul(t367, in216); // Eval rem_14 Horner step: multiply by STEP\n    let t369 = circuit_add(in189, t368); // Eval rem_14 Horner step: add coefficient_3\n    let t370 = circuit_mul(t369, in216); // Eval rem_14 Horner step: multiply by STEP\n    let t371 = circuit_add(in188, t370); // Eval rem_14 Horner step: add coefficient_2\n    let t372 = circuit_mul(t371, in216); // Eval rem_14 Horner step: multiply by STEP\n    let t373 = circuit_add(in187, t372); // Eval rem_14 Horner step: add coefficient_1\n    let t374 = circuit_mul(t373, in216); // Eval rem_14 Horner step: multiply by STEP\n    let t375 = circuit_add(in186, t374); // Eval rem_14 Horner step: add coefficient_0\n    let t376 = circuit_mul(t351, t351); // square_14\n    let t377 = circuit_mul(t365, t9); // quot*mod_14\n    let t378 = circuit_sub(t376, t377); // ab-qn_14\n    let t379 = circuit_sub(t378, t375); // ab-qn-rem_14\n    let t380 = circuit_mul(in197, in216); // Eval quot_15 Horner step: multiply by STEP\n    let t381 = circuit_add(in196, t380); // Eval quot_15 Horner step: add coefficient_4\n    let t382 = circuit_mul(t381, in216); // Eval quot_15 Horner step: multiply by STEP\n    let t383 = circuit_add(in195, t382); // Eval quot_15 Horner step: add coefficient_3\n    let t384 = circuit_mul(t383, in216); // Eval quot_15 Horner step: multiply by STEP\n    let t385 = circuit_add(in194, t384); // Eval quot_15 Horner step: add coefficient_2\n    let t386 = circuit_mul(t385, in216); // Eval quot_15 Horner step: multiply by STEP\n    let t387 = circuit_add(in193, t386); // Eval quot_15 Horner step: add coefficient_1\n    let t388 = circuit_mul(t387, in216); // Eval quot_15 Horner step: multiply by STEP\n    let t389 = circuit_add(in192, t388); // Eval quot_15 Horner step: add coefficient_0\n    let t390 = circuit_mul(in203, in216); // Eval rem_15 Horner step: multiply by STEP\n    let t391 = circuit_add(in202, t390); // Eval rem_15 Horner step: add coefficient_4\n    let t392 = circuit_mul(t391, in216); // Eval rem_15 Horner step: multiply by STEP\n    let t393 = circuit_add(in201, t392); // Eval rem_15 Horner step: add coefficient_3\n    let t394 = circuit_mul(t393, in216); // Eval rem_15 Horner step: multiply by STEP\n    let t395 = circuit_add(in200, t394); // Eval rem_15 Horner step: add coefficient_2\n    let t396 = circuit_mul(t395, in216); // Eval rem_15 Horner step: multiply by STEP\n    let t397 = circuit_add(in199, t396); // Eval rem_15 Horner step: add coefficient_1\n    let t398 = circuit_mul(t397, in216); // Eval rem_15 Horner step: multiply by STEP\n    let t399 = circuit_add(in198, t398); // Eval rem_15 Horner step: add coefficient_0\n    let t400 = circuit_mul(t375, t375); // square_15\n    let t401 = circuit_mul(t389, t9); // quot*mod_15\n    let t402 = circuit_sub(t400, t401); // ab-qn_15\n    let t403 = circuit_sub(t402, t399); // ab-qn-rem_15\n    let t404 = circuit_mul(in209, in216); // Eval quot_16 Horner step: multiply by STEP\n    let t405 = circuit_add(in208, t404); // Eval quot_16 Horner step: add coefficient_4\n    let t406 = circuit_mul(t405, in216); // Eval quot_16 Horner step: multiply by STEP\n    let t407 = circuit_add(in207, t406); // Eval quot_16 Horner step: add coefficient_3\n    let t408 = circuit_mul(t407, in216); // Eval quot_16 Horner step: multiply by STEP\n    let t409 = circuit_add(in206, t408); // Eval quot_16 Horner step: add coefficient_2\n    let t410 = circuit_mul(t409, in216); // Eval quot_16 Horner step: multiply by STEP\n    let t411 = circuit_add(in205, t410); // Eval quot_16 Horner step: add coefficient_1\n    let t412 = circuit_mul(t411, in216); // Eval quot_16 Horner step: multiply by STEP\n    let t413 = circuit_add(in204, t412); // Eval quot_16 Horner step: add coefficient_0\n    let t414 = circuit_mul(in215, in216); // Eval rem_16 Horner step: multiply by STEP\n    let t415 = circuit_add(in214, t414); // Eval rem_16 Horner step: add coefficient_4\n    let t416 = circuit_mul(t415, in216); // Eval rem_16 Horner step: multiply by STEP\n    let t417 = circuit_add(in213, t416); // Eval rem_16 Horner step: add coefficient_3\n    let t418 = circuit_mul(t417, in216); // Eval rem_16 Horner step: multiply by STEP\n    let t419 = circuit_add(in212, t418); // Eval rem_16 Horner step: add coefficient_2\n    let t420 = circuit_mul(t419, in216); // Eval rem_16 Horner step: multiply by STEP\n    let t421 = circuit_add(in211, t420); // Eval rem_16 Horner step: add coefficient_1\n    let t422 = circuit_mul(t421, in216); // Eval rem_16 Horner step: multiply by STEP\n    let t423 = circuit_add(in210, t422); // Eval rem_16 Horner step: add coefficient_0\n    let t424 = circuit_mul(t399, t19); // final_multiply\n    let t425 = circuit_mul(t413, t9); // quot*mod_16\n    let t426 = circuit_sub(t424, t425); // ab-qn_16\n    let t427 = circuit_sub(t426, t423); // ab-qn-rem_16\n\n    let modulus = modulus;\n\n    let mut circuit_inputs = (\n        t43,\n        t67,\n        t91,\n        t115,\n        t139,\n        t163,\n        t187,\n        t211,\n        t235,\n        t259,\n        t283,\n        t307,\n        t331,\n        t355,\n        t379,\n        t403,\n        t427,\n    )\n        .new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(mod_chunks.w0); // in0\n    circuit_inputs = circuit_inputs.next_2(mod_chunks.w1); // in1\n    circuit_inputs = circuit_inputs.next_2(mod_chunks.w2); // in2\n    circuit_inputs = circuit_inputs.next_2(mod_chunks.w3); // in3\n    circuit_inputs = circuit_inputs.next_2(mod_chunks.w4); // in4\n    circuit_inputs = circuit_inputs.next_2(mod_chunks.w5); // in5\n    circuit_inputs = circuit_inputs.next_2(sig_chunks.w0); // in6\n    circuit_inputs = circuit_inputs.next_2(sig_chunks.w1); // in7\n    circuit_inputs = circuit_inputs.next_2(sig_chunks.w2); // in8\n    circuit_inputs = circuit_inputs.next_2(sig_chunks.w3); // in9\n    circuit_inputs = circuit_inputs.next_2(sig_chunks.w4); // in10\n    circuit_inputs = circuit_inputs.next_2(sig_chunks.w5); // in11\n    circuit_inputs = circuit_inputs.next_2(w_0.quotient.w0); // in12\n    circuit_inputs = circuit_inputs.next_2(w_0.quotient.w1); // in13\n    circuit_inputs = circuit_inputs.next_2(w_0.quotient.w2); // in14\n    circuit_inputs = circuit_inputs.next_2(w_0.quotient.w3); // in15\n    circuit_inputs = circuit_inputs.next_2(w_0.quotient.w4); // in16\n    circuit_inputs = circuit_inputs.next_2(w_0.quotient.w5); // in17\n    circuit_inputs = circuit_inputs.next_2(w_0.remainder.w0); // in18\n    circuit_inputs = circuit_inputs.next_2(w_0.remainder.w1); // in19\n    circuit_inputs = circuit_inputs.next_2(w_0.remainder.w2); // in20\n    circuit_inputs = circuit_inputs.next_2(w_0.remainder.w3); // in21\n    circuit_inputs = circuit_inputs.next_2(w_0.remainder.w4); // in22\n    circuit_inputs = circuit_inputs.next_2(w_0.remainder.w5); // in23\n    circuit_inputs = circuit_inputs.next_2(w_1.quotient.w0); // in24\n    circuit_inputs = circuit_inputs.next_2(w_1.quotient.w1); // in25\n    circuit_inputs = circuit_inputs.next_2(w_1.quotient.w2); // in26\n    circuit_inputs = circuit_inputs.next_2(w_1.quotient.w3); // in27\n    circuit_inputs = circuit_inputs.next_2(w_1.quotient.w4); // in28\n    circuit_inputs = circuit_inputs.next_2(w_1.quotient.w5); // in29\n    circuit_inputs = circuit_inputs.next_2(w_1.remainder.w0); // in30\n    circuit_inputs = circuit_inputs.next_2(w_1.remainder.w1); // in31\n    circuit_inputs = circuit_inputs.next_2(w_1.remainder.w2); // in32\n    circuit_inputs = circuit_inputs.next_2(w_1.remainder.w3); // in33\n    circuit_inputs = circuit_inputs.next_2(w_1.remainder.w4); // in34\n    circuit_inputs = circuit_inputs.next_2(w_1.remainder.w5); // in35\n    circuit_inputs = circuit_inputs.next_2(w_2.quotient.w0); // in36\n    circuit_inputs = circuit_inputs.next_2(w_2.quotient.w1); // in37\n    circuit_inputs = circuit_inputs.next_2(w_2.quotient.w2); // in38\n    circuit_inputs = circuit_inputs.next_2(w_2.quotient.w3); // in39\n    circuit_inputs = circuit_inputs.next_2(w_2.quotient.w4); // in40\n    circuit_inputs = circuit_inputs.next_2(w_2.quotient.w5); // in41\n    circuit_inputs = circuit_inputs.next_2(w_2.remainder.w0); // in42\n    circuit_inputs = circuit_inputs.next_2(w_2.remainder.w1); // in43\n    circuit_inputs = circuit_inputs.next_2(w_2.remainder.w2); // in44\n    circuit_inputs = circuit_inputs.next_2(w_2.remainder.w3); // in45\n    circuit_inputs = circuit_inputs.next_2(w_2.remainder.w4); // in46\n    circuit_inputs = circuit_inputs.next_2(w_2.remainder.w5); // in47\n    circuit_inputs = circuit_inputs.next_2(w_3.quotient.w0); // in48\n    circuit_inputs = circuit_inputs.next_2(w_3.quotient.w1); // in49\n    circuit_inputs = circuit_inputs.next_2(w_3.quotient.w2); // in50\n    circuit_inputs = circuit_inputs.next_2(w_3.quotient.w3); // in51\n    circuit_inputs = circuit_inputs.next_2(w_3.quotient.w4); // in52\n    circuit_inputs = circuit_inputs.next_2(w_3.quotient.w5); // in53\n    circuit_inputs = circuit_inputs.next_2(w_3.remainder.w0); // in54\n    circuit_inputs = circuit_inputs.next_2(w_3.remainder.w1); // in55\n    circuit_inputs = circuit_inputs.next_2(w_3.remainder.w2); // in56\n    circuit_inputs = circuit_inputs.next_2(w_3.remainder.w3); // in57\n    circuit_inputs = circuit_inputs.next_2(w_3.remainder.w4); // in58\n    circuit_inputs = circuit_inputs.next_2(w_3.remainder.w5); // in59\n    circuit_inputs = circuit_inputs.next_2(w_4.quotient.w0); // in60\n    circuit_inputs = circuit_inputs.next_2(w_4.quotient.w1); // in61\n    circuit_inputs = circuit_inputs.next_2(w_4.quotient.w2); // in62\n    circuit_inputs = circuit_inputs.next_2(w_4.quotient.w3); // in63\n    circuit_inputs = circuit_inputs.next_2(w_4.quotient.w4); // in64\n    circuit_inputs = circuit_inputs.next_2(w_4.quotient.w5); // in65\n    circuit_inputs = circuit_inputs.next_2(w_4.remainder.w0); // in66\n    circuit_inputs = circuit_inputs.next_2(w_4.remainder.w1); // in67\n    circuit_inputs = circuit_inputs.next_2(w_4.remainder.w2); // in68\n    circuit_inputs = circuit_inputs.next_2(w_4.remainder.w3); // in69\n    circuit_inputs = circuit_inputs.next_2(w_4.remainder.w4); // in70\n    circuit_inputs = circuit_inputs.next_2(w_4.remainder.w5); // in71\n    circuit_inputs = circuit_inputs.next_2(w_5.quotient.w0); // in72\n    circuit_inputs = circuit_inputs.next_2(w_5.quotient.w1); // in73\n    circuit_inputs = circuit_inputs.next_2(w_5.quotient.w2); // in74\n    circuit_inputs = circuit_inputs.next_2(w_5.quotient.w3); // in75\n    circuit_inputs = circuit_inputs.next_2(w_5.quotient.w4); // in76\n    circuit_inputs = circuit_inputs.next_2(w_5.quotient.w5); // in77\n    circuit_inputs = circuit_inputs.next_2(w_5.remainder.w0); // in78\n    circuit_inputs = circuit_inputs.next_2(w_5.remainder.w1); // in79\n    circuit_inputs = circuit_inputs.next_2(w_5.remainder.w2); // in80\n    circuit_inputs = circuit_inputs.next_2(w_5.remainder.w3); // in81\n    circuit_inputs = circuit_inputs.next_2(w_5.remainder.w4); // in82\n    circuit_inputs = circuit_inputs.next_2(w_5.remainder.w5); // in83\n    circuit_inputs = circuit_inputs.next_2(w_6.quotient.w0); // in84\n    circuit_inputs = circuit_inputs.next_2(w_6.quotient.w1); // in85\n    circuit_inputs = circuit_inputs.next_2(w_6.quotient.w2); // in86\n    circuit_inputs = circuit_inputs.next_2(w_6.quotient.w3); // in87\n    circuit_inputs = circuit_inputs.next_2(w_6.quotient.w4); // in88\n    circuit_inputs = circuit_inputs.next_2(w_6.quotient.w5); // in89\n    circuit_inputs = circuit_inputs.next_2(w_6.remainder.w0); // in90\n    circuit_inputs = circuit_inputs.next_2(w_6.remainder.w1); // in91\n    circuit_inputs = circuit_inputs.next_2(w_6.remainder.w2); // in92\n    circuit_inputs = circuit_inputs.next_2(w_6.remainder.w3); // in93\n    circuit_inputs = circuit_inputs.next_2(w_6.remainder.w4); // in94\n    circuit_inputs = circuit_inputs.next_2(w_6.remainder.w5); // in95\n    circuit_inputs = circuit_inputs.next_2(w_7.quotient.w0); // in96\n    circuit_inputs = circuit_inputs.next_2(w_7.quotient.w1); // in97\n    circuit_inputs = circuit_inputs.next_2(w_7.quotient.w2); // in98\n    circuit_inputs = circuit_inputs.next_2(w_7.quotient.w3); // in99\n    circuit_inputs = circuit_inputs.next_2(w_7.quotient.w4); // in100\n    circuit_inputs = circuit_inputs.next_2(w_7.quotient.w5); // in101\n    circuit_inputs = circuit_inputs.next_2(w_7.remainder.w0); // in102\n    circuit_inputs = circuit_inputs.next_2(w_7.remainder.w1); // in103\n    circuit_inputs = circuit_inputs.next_2(w_7.remainder.w2); // in104\n    circuit_inputs = circuit_inputs.next_2(w_7.remainder.w3); // in105\n    circuit_inputs = circuit_inputs.next_2(w_7.remainder.w4); // in106\n    circuit_inputs = circuit_inputs.next_2(w_7.remainder.w5); // in107\n    circuit_inputs = circuit_inputs.next_2(w_8.quotient.w0); // in108\n    circuit_inputs = circuit_inputs.next_2(w_8.quotient.w1); // in109\n    circuit_inputs = circuit_inputs.next_2(w_8.quotient.w2); // in110\n    circuit_inputs = circuit_inputs.next_2(w_8.quotient.w3); // in111\n    circuit_inputs = circuit_inputs.next_2(w_8.quotient.w4); // in112\n    circuit_inputs = circuit_inputs.next_2(w_8.quotient.w5); // in113\n    circuit_inputs = circuit_inputs.next_2(w_8.remainder.w0); // in114\n    circuit_inputs = circuit_inputs.next_2(w_8.remainder.w1); // in115\n    circuit_inputs = circuit_inputs.next_2(w_8.remainder.w2); // in116\n    circuit_inputs = circuit_inputs.next_2(w_8.remainder.w3); // in117\n    circuit_inputs = circuit_inputs.next_2(w_8.remainder.w4); // in118\n    circuit_inputs = circuit_inputs.next_2(w_8.remainder.w5); // in119\n    circuit_inputs = circuit_inputs.next_2(w_9.quotient.w0); // in120\n    circuit_inputs = circuit_inputs.next_2(w_9.quotient.w1); // in121\n    circuit_inputs = circuit_inputs.next_2(w_9.quotient.w2); // in122\n    circuit_inputs = circuit_inputs.next_2(w_9.quotient.w3); // in123\n    circuit_inputs = circuit_inputs.next_2(w_9.quotient.w4); // in124\n    circuit_inputs = circuit_inputs.next_2(w_9.quotient.w5); // in125\n    circuit_inputs = circuit_inputs.next_2(w_9.remainder.w0); // in126\n    circuit_inputs = circuit_inputs.next_2(w_9.remainder.w1); // in127\n    circuit_inputs = circuit_inputs.next_2(w_9.remainder.w2); // in128\n    circuit_inputs = circuit_inputs.next_2(w_9.remainder.w3); // in129\n    circuit_inputs = circuit_inputs.next_2(w_9.remainder.w4); // in130\n    circuit_inputs = circuit_inputs.next_2(w_9.remainder.w5); // in131\n    circuit_inputs = circuit_inputs.next_2(w_10.quotient.w0); // in132\n    circuit_inputs = circuit_inputs.next_2(w_10.quotient.w1); // in133\n    circuit_inputs = circuit_inputs.next_2(w_10.quotient.w2); // in134\n    circuit_inputs = circuit_inputs.next_2(w_10.quotient.w3); // in135\n    circuit_inputs = circuit_inputs.next_2(w_10.quotient.w4); // in136\n    circuit_inputs = circuit_inputs.next_2(w_10.quotient.w5); // in137\n    circuit_inputs = circuit_inputs.next_2(w_10.remainder.w0); // in138\n    circuit_inputs = circuit_inputs.next_2(w_10.remainder.w1); // in139\n    circuit_inputs = circuit_inputs.next_2(w_10.remainder.w2); // in140\n    circuit_inputs = circuit_inputs.next_2(w_10.remainder.w3); // in141\n    circuit_inputs = circuit_inputs.next_2(w_10.remainder.w4); // in142\n    circuit_inputs = circuit_inputs.next_2(w_10.remainder.w5); // in143\n    circuit_inputs = circuit_inputs.next_2(w_11.quotient.w0); // in144\n    circuit_inputs = circuit_inputs.next_2(w_11.quotient.w1); // in145\n    circuit_inputs = circuit_inputs.next_2(w_11.quotient.w2); // in146\n    circuit_inputs = circuit_inputs.next_2(w_11.quotient.w3); // in147\n    circuit_inputs = circuit_inputs.next_2(w_11.quotient.w4); // in148\n    circuit_inputs = circuit_inputs.next_2(w_11.quotient.w5); // in149\n    circuit_inputs = circuit_inputs.next_2(w_11.remainder.w0); // in150\n    circuit_inputs = circuit_inputs.next_2(w_11.remainder.w1); // in151\n    circuit_inputs = circuit_inputs.next_2(w_11.remainder.w2); // in152\n    circuit_inputs = circuit_inputs.next_2(w_11.remainder.w3); // in153\n    circuit_inputs = circuit_inputs.next_2(w_11.remainder.w4); // in154\n    circuit_inputs = circuit_inputs.next_2(w_11.remainder.w5); // in155\n    circuit_inputs = circuit_inputs.next_2(w_12.quotient.w0); // in156\n    circuit_inputs = circuit_inputs.next_2(w_12.quotient.w1); // in157\n    circuit_inputs = circuit_inputs.next_2(w_12.quotient.w2); // in158\n    circuit_inputs = circuit_inputs.next_2(w_12.quotient.w3); // in159\n    circuit_inputs = circuit_inputs.next_2(w_12.quotient.w4); // in160\n    circuit_inputs = circuit_inputs.next_2(w_12.quotient.w5); // in161\n    circuit_inputs = circuit_inputs.next_2(w_12.remainder.w0); // in162\n    circuit_inputs = circuit_inputs.next_2(w_12.remainder.w1); // in163\n    circuit_inputs = circuit_inputs.next_2(w_12.remainder.w2); // in164\n    circuit_inputs = circuit_inputs.next_2(w_12.remainder.w3); // in165\n    circuit_inputs = circuit_inputs.next_2(w_12.remainder.w4); // in166\n    circuit_inputs = circuit_inputs.next_2(w_12.remainder.w5); // in167\n    circuit_inputs = circuit_inputs.next_2(w_13.quotient.w0); // in168\n    circuit_inputs = circuit_inputs.next_2(w_13.quotient.w1); // in169\n    circuit_inputs = circuit_inputs.next_2(w_13.quotient.w2); // in170\n    circuit_inputs = circuit_inputs.next_2(w_13.quotient.w3); // in171\n    circuit_inputs = circuit_inputs.next_2(w_13.quotient.w4); // in172\n    circuit_inputs = circuit_inputs.next_2(w_13.quotient.w5); // in173\n    circuit_inputs = circuit_inputs.next_2(w_13.remainder.w0); // in174\n    circuit_inputs = circuit_inputs.next_2(w_13.remainder.w1); // in175\n    circuit_inputs = circuit_inputs.next_2(w_13.remainder.w2); // in176\n    circuit_inputs = circuit_inputs.next_2(w_13.remainder.w3); // in177\n    circuit_inputs = circuit_inputs.next_2(w_13.remainder.w4); // in178\n    circuit_inputs = circuit_inputs.next_2(w_13.remainder.w5); // in179\n    circuit_inputs = circuit_inputs.next_2(w_14.quotient.w0); // in180\n    circuit_inputs = circuit_inputs.next_2(w_14.quotient.w1); // in181\n    circuit_inputs = circuit_inputs.next_2(w_14.quotient.w2); // in182\n    circuit_inputs = circuit_inputs.next_2(w_14.quotient.w3); // in183\n    circuit_inputs = circuit_inputs.next_2(w_14.quotient.w4); // in184\n    circuit_inputs = circuit_inputs.next_2(w_14.quotient.w5); // in185\n    circuit_inputs = circuit_inputs.next_2(w_14.remainder.w0); // in186\n    circuit_inputs = circuit_inputs.next_2(w_14.remainder.w1); // in187\n    circuit_inputs = circuit_inputs.next_2(w_14.remainder.w2); // in188\n    circuit_inputs = circuit_inputs.next_2(w_14.remainder.w3); // in189\n    circuit_inputs = circuit_inputs.next_2(w_14.remainder.w4); // in190\n    circuit_inputs = circuit_inputs.next_2(w_14.remainder.w5); // in191\n    circuit_inputs = circuit_inputs.next_2(w_15.quotient.w0); // in192\n    circuit_inputs = circuit_inputs.next_2(w_15.quotient.w1); // in193\n    circuit_inputs = circuit_inputs.next_2(w_15.quotient.w2); // in194\n    circuit_inputs = circuit_inputs.next_2(w_15.quotient.w3); // in195\n    circuit_inputs = circuit_inputs.next_2(w_15.quotient.w4); // in196\n    circuit_inputs = circuit_inputs.next_2(w_15.quotient.w5); // in197\n    circuit_inputs = circuit_inputs.next_2(w_15.remainder.w0); // in198\n    circuit_inputs = circuit_inputs.next_2(w_15.remainder.w1); // in199\n    circuit_inputs = circuit_inputs.next_2(w_15.remainder.w2); // in200\n    circuit_inputs = circuit_inputs.next_2(w_15.remainder.w3); // in201\n    circuit_inputs = circuit_inputs.next_2(w_15.remainder.w4); // in202\n    circuit_inputs = circuit_inputs.next_2(w_15.remainder.w5); // in203\n    circuit_inputs = circuit_inputs.next_2(w_16.quotient.w0); // in204\n    circuit_inputs = circuit_inputs.next_2(w_16.quotient.w1); // in205\n    circuit_inputs = circuit_inputs.next_2(w_16.quotient.w2); // in206\n    circuit_inputs = circuit_inputs.next_2(w_16.quotient.w3); // in207\n    circuit_inputs = circuit_inputs.next_2(w_16.quotient.w4); // in208\n    circuit_inputs = circuit_inputs.next_2(w_16.quotient.w5); // in209\n    circuit_inputs = circuit_inputs.next_2(w_16.remainder.w0); // in210\n    circuit_inputs = circuit_inputs.next_2(w_16.remainder.w1); // in211\n    circuit_inputs = circuit_inputs.next_2(w_16.remainder.w2); // in212\n    circuit_inputs = circuit_inputs.next_2(w_16.remainder.w3); // in213\n    circuit_inputs = circuit_inputs.next_2(w_16.remainder.w4); // in214\n    circuit_inputs = circuit_inputs.next_2(w_16.remainder.w5); // in215\n    circuit_inputs = circuit_inputs.next_2(step); // in216\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let diff_0: u384 = outputs.get_output(t43);\n    let diff_1: u384 = outputs.get_output(t67);\n    let diff_2: u384 = outputs.get_output(t91);\n    let diff_3: u384 = outputs.get_output(t115);\n    let diff_4: u384 = outputs.get_output(t139);\n    let diff_5: u384 = outputs.get_output(t163);\n    let diff_6: u384 = outputs.get_output(t187);\n    let diff_7: u384 = outputs.get_output(t211);\n    let diff_8: u384 = outputs.get_output(t235);\n    let diff_9: u384 = outputs.get_output(t259);\n    let diff_10: u384 = outputs.get_output(t283);\n    let diff_11: u384 = outputs.get_output(t307);\n    let diff_12: u384 = outputs.get_output(t331);\n    let diff_13: u384 = outputs.get_output(t355);\n    let diff_14: u384 = outputs.get_output(t379);\n    let diff_15: u384 = outputs.get_output(t403);\n    let diff_16: u384 = outputs.get_output(t427);\n    return (\n        diff_0,\n        diff_1,\n        diff_2,\n        diff_3,\n        diff_4,\n        diff_5,\n        diff_6,\n        diff_7,\n        diff_8,\n        diff_9,\n        diff_10,\n        diff_11,\n        diff_12,\n        diff_13,\n        diff_14,\n        diff_15,\n        diff_16,\n    );\n}\n"
  },
  {
    "path": "src/src/circuits/tower_circuits.cairo",
    "content": "use core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitOutputsTrait, EvalCircuitTrait,\n    circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::{E12T, G2Point};\n#[inline(always)]\npub fn run_BLS12_381_E12T_CYCLOTOMIC_SQUARE_circuit(M: E12T) -> (E12T,) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let t0 = circuit_add(in8, in9);\n    let t1 = circuit_sub(in8, in9);\n    let t2 = circuit_mul(t0, t1);\n    let t3 = circuit_mul(in8, in9);\n    let t4 = circuit_add(t3, t3);\n    let t5 = circuit_add(in0, in1);\n    let t6 = circuit_sub(in0, in1);\n    let t7 = circuit_mul(t5, t6);\n    let t8 = circuit_mul(in0, in1);\n    let t9 = circuit_add(t8, t8);\n    let t10 = circuit_add(in8, in0); // Fp2 add coeff 0/1\n    let t11 = circuit_add(in9, in1); // Fp2 add coeff 1/1\n    let t12 = circuit_add(t10, t11);\n    let t13 = circuit_sub(t10, t11);\n    let t14 = circuit_mul(t12, t13);\n    let t15 = circuit_mul(t10, t11);\n    let t16 = circuit_add(t15, t15);\n    let t17 = circuit_sub(t14, t2); // Fp2 sub coeff 0/1\n    let t18 = circuit_sub(t16, t4); // Fp2 sub coeff 1/1\n    let t19 = circuit_sub(t17, t7); // Fp2 sub coeff 0/1\n    let t20 = circuit_sub(t18, t9); // Fp2 sub coeff 1/1\n    let t21 = circuit_add(in4, in5);\n    let t22 = circuit_sub(in4, in5);\n    let t23 = circuit_mul(t21, t22);\n    let t24 = circuit_mul(in4, in5);\n    let t25 = circuit_add(t24, t24);\n    let t26 = circuit_add(in6, in7);\n    let t27 = circuit_sub(in6, in7);\n    let t28 = circuit_mul(t26, t27);\n    let t29 = circuit_mul(in6, in7);\n    let t30 = circuit_add(t29, t29);\n    let t31 = circuit_add(in4, in6); // Fp2 add coeff 0/1\n    let t32 = circuit_add(in5, in7); // Fp2 add coeff 1/1\n    let t33 = circuit_add(t31, t32);\n    let t34 = circuit_sub(t31, t32);\n    let t35 = circuit_mul(t33, t34);\n    let t36 = circuit_mul(t31, t32);\n    let t37 = circuit_add(t36, t36);\n    let t38 = circuit_sub(t35, t23); // Fp2 sub coeff 0/1\n    let t39 = circuit_sub(t37, t25); // Fp2 sub coeff 1/1\n    let t40 = circuit_sub(t38, t28); // Fp2 sub coeff 0/1\n    let t41 = circuit_sub(t39, t30); // Fp2 sub coeff 1/1\n    let t42 = circuit_add(in10, in11);\n    let t43 = circuit_sub(in10, in11);\n    let t44 = circuit_mul(t42, t43);\n    let t45 = circuit_mul(in10, in11);\n    let t46 = circuit_add(t45, t45);\n    let t47 = circuit_add(in2, in3);\n    let t48 = circuit_sub(in2, in3);\n    let t49 = circuit_mul(t47, t48);\n    let t50 = circuit_mul(in2, in3);\n    let t51 = circuit_add(t50, t50);\n    let t52 = circuit_add(in10, in2); // Fp2 add coeff 0/1\n    let t53 = circuit_add(in11, in3); // Fp2 add coeff 1/1\n    let t54 = circuit_add(t52, t53);\n    let t55 = circuit_sub(t52, t53);\n    let t56 = circuit_mul(t54, t55);\n    let t57 = circuit_mul(t52, t53);\n    let t58 = circuit_add(t57, t57);\n    let t59 = circuit_sub(t56, t44); // Fp2 sub coeff 0/1\n    let t60 = circuit_sub(t58, t46); // Fp2 sub coeff 1/1\n    let t61 = circuit_sub(t59, t49); // Fp2 sub coeff 0/1\n    let t62 = circuit_sub(t60, t51); // Fp2 sub coeff 1/1\n    let t63 = circuit_add(t61, t62);\n    let t64 = circuit_add(t63, t63);\n    let t65 = circuit_sub(t61, t62);\n    let t66 = circuit_sub(t64, t61);\n    let t67 = circuit_sub(t66, t62);\n    let t68 = circuit_add(t2, t4);\n    let t69 = circuit_add(t68, t68);\n    let t70 = circuit_sub(t2, t4);\n    let t71 = circuit_sub(t69, t2);\n    let t72 = circuit_sub(t71, t4);\n    let t73 = circuit_add(t70, t7); // Fp2 add coeff 0/1\n    let t74 = circuit_add(t72, t9); // Fp2 add coeff 1/1\n    let t75 = circuit_add(t23, t25);\n    let t76 = circuit_add(t75, t75);\n    let t77 = circuit_sub(t23, t25);\n    let t78 = circuit_sub(t76, t23);\n    let t79 = circuit_sub(t78, t25);\n    let t80 = circuit_add(t77, t28); // Fp2 add coeff 0/1\n    let t81 = circuit_add(t79, t30); // Fp2 add coeff 1/1\n    let t82 = circuit_add(t44, t46);\n    let t83 = circuit_add(t82, t82);\n    let t84 = circuit_sub(t44, t46);\n    let t85 = circuit_sub(t83, t44);\n    let t86 = circuit_sub(t85, t46);\n    let t87 = circuit_add(t84, t49); // Fp2 add coeff 0/1\n    let t88 = circuit_add(t86, t51); // Fp2 add coeff 1/1\n    let t89 = circuit_sub(t73, in0); // Fp2 sub coeff 0/1\n    let t90 = circuit_sub(t74, in1); // Fp2 sub coeff 1/1\n    let t91 = circuit_add(t89, t89); // Fp2 add coeff 0/1\n    let t92 = circuit_add(t90, t90); // Fp2 add coeff 1/1\n    let t93 = circuit_add(t91, t73); // Fp2 add coeff 0/1\n    let t94 = circuit_add(t92, t74); // Fp2 add coeff 1/1\n    let t95 = circuit_sub(t80, in2); // Fp2 sub coeff 0/1\n    let t96 = circuit_sub(t81, in3); // Fp2 sub coeff 1/1\n    let t97 = circuit_add(t95, t95); // Fp2 add coeff 0/1\n    let t98 = circuit_add(t96, t96); // Fp2 add coeff 1/1\n    let t99 = circuit_add(t97, t80); // Fp2 add coeff 0/1\n    let t100 = circuit_add(t98, t81); // Fp2 add coeff 1/1\n    let t101 = circuit_sub(t87, in4); // Fp2 sub coeff 0/1\n    let t102 = circuit_sub(t88, in5); // Fp2 sub coeff 1/1\n    let t103 = circuit_add(t101, t101); // Fp2 add coeff 0/1\n    let t104 = circuit_add(t102, t102); // Fp2 add coeff 1/1\n    let t105 = circuit_add(t103, t87); // Fp2 add coeff 0/1\n    let t106 = circuit_add(t104, t88); // Fp2 add coeff 1/1\n    let t107 = circuit_add(t65, in6); // Fp2 add coeff 0/1\n    let t108 = circuit_add(t67, in7); // Fp2 add coeff 1/1\n    let t109 = circuit_add(t107, t107); // Fp2 add coeff 0/1\n    let t110 = circuit_add(t108, t108); // Fp2 add coeff 1/1\n    let t111 = circuit_add(t109, t65); // Fp2 add coeff 0/1\n    let t112 = circuit_add(t110, t67); // Fp2 add coeff 1/1\n    let t113 = circuit_add(t19, in8); // Fp2 add coeff 0/1\n    let t114 = circuit_add(t20, in9); // Fp2 add coeff 1/1\n    let t115 = circuit_add(t113, t113); // Fp2 add coeff 0/1\n    let t116 = circuit_add(t114, t114); // Fp2 add coeff 1/1\n    let t117 = circuit_add(t115, t19); // Fp2 add coeff 0/1\n    let t118 = circuit_add(t116, t20); // Fp2 add coeff 1/1\n    let t119 = circuit_add(t40, in10); // Fp2 add coeff 0/1\n    let t120 = circuit_add(t41, in11); // Fp2 add coeff 1/1\n    let t121 = circuit_add(t119, t119); // Fp2 add coeff 0/1\n    let t122 = circuit_add(t120, t120); // Fp2 add coeff 1/1\n    let t123 = circuit_add(t121, t40); // Fp2 add coeff 0/1\n    let t124 = circuit_add(t122, t41); // Fp2 add coeff 1/1\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t93, t94, t99, t100, t105, t106, t111, t112, t117, t118, t123, t124)\n        .new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a0); // in0\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a1); // in1\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a0); // in2\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a1); // in3\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a0); // in4\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a1); // in5\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a0); // in6\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a1); // in7\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a0); // in8\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a1); // in9\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a0); // in10\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a1); // in11\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t93),\n        c0b0a1: outputs.get_output(t94),\n        c0b1a0: outputs.get_output(t99),\n        c0b1a1: outputs.get_output(t100),\n        c0b2a0: outputs.get_output(t105),\n        c0b2a1: outputs.get_output(t106),\n        c1b0a0: outputs.get_output(t111),\n        c1b0a1: outputs.get_output(t112),\n        c1b1a0: outputs.get_output(t117),\n        c1b1a1: outputs.get_output(t118),\n        c1b2a0: outputs.get_output(t123),\n        c1b2a1: outputs.get_output(t124),\n    };\n    return (res,);\n}\n#[inline(always)]\npub fn run_BLS12_381_E12T_CYCLO_SQUARE_COMPRESSED_circuit(\n    xc0b1a0: u384,\n    xc0b1a1: u384,\n    xc0b2a0: u384,\n    xc0b2a1: u384,\n    xc1b0a0: u384,\n    xc1b0a1: u384,\n    xc1b2a0: u384,\n    xc1b2a1: u384,\n) -> (u384, u384, u384, u384, u384, u384, u384, u384) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7) = (CE::<CI<6>> {}, CE::<CI<7>> {});\n    let t0 = circuit_add(in0, in1);\n    let t1 = circuit_sub(in0, in1);\n    let t2 = circuit_mul(t0, t1);\n    let t3 = circuit_mul(in0, in1);\n    let t4 = circuit_add(t3, t3);\n    let t5 = circuit_add(in6, in7);\n    let t6 = circuit_sub(in6, in7);\n    let t7 = circuit_mul(t5, t6);\n    let t8 = circuit_mul(in6, in7);\n    let t9 = circuit_add(t8, t8);\n    let t10 = circuit_add(in0, in6); // Fp2 add coeff 0/1\n    let t11 = circuit_add(in1, in7); // Fp2 add coeff 1/1\n    let t12 = circuit_add(t10, t11);\n    let t13 = circuit_sub(t10, t11);\n    let t14 = circuit_mul(t12, t13);\n    let t15 = circuit_mul(t10, t11);\n    let t16 = circuit_add(t15, t15);\n    let t17 = circuit_add(t2, t7); // Fp2 add coeff 0/1\n    let t18 = circuit_add(t4, t9); // Fp2 add coeff 1/1\n    let t19 = circuit_sub(t14, t17); // Fp2 sub coeff 0/1\n    let t20 = circuit_sub(t16, t18); // Fp2 sub coeff 1/1\n    let t21 = circuit_add(in4, in2); // Fp2 add coeff 0/1\n    let t22 = circuit_add(in5, in3); // Fp2 add coeff 1/1\n    let t23 = circuit_add(t21, t22);\n    let t24 = circuit_sub(t21, t22);\n    let t25 = circuit_mul(t23, t24);\n    let t26 = circuit_mul(t21, t22);\n    let t27 = circuit_add(t26, t26);\n    let t28 = circuit_add(in4, in5);\n    let t29 = circuit_sub(in4, in5);\n    let t30 = circuit_mul(t28, t29);\n    let t31 = circuit_mul(in4, in5);\n    let t32 = circuit_add(t31, t31);\n    let t33 = circuit_add(t19, t20);\n    let t34 = circuit_add(t33, t33);\n    let t35 = circuit_sub(t19, t20);\n    let t36 = circuit_sub(t34, t19);\n    let t37 = circuit_sub(t36, t20);\n    let t38 = circuit_add(t35, in4); // Fp2 add coeff 0/1\n    let t39 = circuit_add(t37, in5); // Fp2 add coeff 1/1\n    let t40 = circuit_add(t38, t38); // Fp2 add coeff 0/1\n    let t41 = circuit_add(t39, t39); // Fp2 add coeff 1/1\n    let t42 = circuit_add(t40, t35); // Fp2 add coeff 0/1\n    let t43 = circuit_add(t41, t37); // Fp2 add coeff 1/1\n    let t44 = circuit_add(t7, t9);\n    let t45 = circuit_add(t44, t44);\n    let t46 = circuit_sub(t7, t9);\n    let t47 = circuit_sub(t45, t7);\n    let t48 = circuit_sub(t47, t9);\n    let t49 = circuit_add(t2, t46); // Fp2 add coeff 0/1\n    let t50 = circuit_add(t4, t48); // Fp2 add coeff 1/1\n    let t51 = circuit_sub(t49, in2); // Fp2 sub coeff 0/1\n    let t52 = circuit_sub(t50, in3); // Fp2 sub coeff 1/1\n    let t53 = circuit_add(in2, in3);\n    let t54 = circuit_sub(in2, in3);\n    let t55 = circuit_mul(t53, t54);\n    let t56 = circuit_mul(in2, in3);\n    let t57 = circuit_add(t56, t56);\n    let t58 = circuit_add(t51, t51); // Fp2 add coeff 0/1\n    let t59 = circuit_add(t52, t52); // Fp2 add coeff 1/1\n    let t60 = circuit_add(t58, t49); // Fp2 add coeff 0/1\n    let t61 = circuit_add(t59, t50); // Fp2 add coeff 1/1\n    let t62 = circuit_add(t55, t57);\n    let t63 = circuit_add(t62, t62);\n    let t64 = circuit_sub(t55, t57);\n    let t65 = circuit_sub(t63, t55);\n    let t66 = circuit_sub(t65, t57);\n    let t67 = circuit_add(t30, t64); // Fp2 add coeff 0/1\n    let t68 = circuit_add(t32, t66); // Fp2 add coeff 1/1\n    let t69 = circuit_sub(t67, in0); // Fp2 sub coeff 0/1\n    let t70 = circuit_sub(t68, in1); // Fp2 sub coeff 1/1\n    let t71 = circuit_add(t69, t69); // Fp2 add coeff 0/1\n    let t72 = circuit_add(t70, t70); // Fp2 add coeff 1/1\n    let t73 = circuit_add(t71, t67); // Fp2 add coeff 0/1\n    let t74 = circuit_add(t72, t68); // Fp2 add coeff 1/1\n    let t75 = circuit_add(t30, t55); // Fp2 add coeff 0/1\n    let t76 = circuit_add(t32, t57); // Fp2 add coeff 1/1\n    let t77 = circuit_sub(t25, t75); // Fp2 sub coeff 0/1\n    let t78 = circuit_sub(t27, t76); // Fp2 sub coeff 1/1\n    let t79 = circuit_add(t77, in6); // Fp2 add coeff 0/1\n    let t80 = circuit_add(t78, in7); // Fp2 add coeff 1/1\n    let t81 = circuit_add(t79, t79); // Fp2 add coeff 0/1\n    let t82 = circuit_add(t80, t80); // Fp2 add coeff 1/1\n    let t83 = circuit_add(t77, t81); // Fp2 add coeff 0/1\n    let t84 = circuit_add(t78, t82); // Fp2 add coeff 1/1\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t73, t74, t60, t61, t42, t43, t83, t84).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(xc0b1a0); // in0\n    circuit_inputs = circuit_inputs.next_2(xc0b1a1); // in1\n    circuit_inputs = circuit_inputs.next_2(xc0b2a0); // in2\n    circuit_inputs = circuit_inputs.next_2(xc0b2a1); // in3\n    circuit_inputs = circuit_inputs.next_2(xc1b0a0); // in4\n    circuit_inputs = circuit_inputs.next_2(xc1b0a1); // in5\n    circuit_inputs = circuit_inputs.next_2(xc1b2a0); // in6\n    circuit_inputs = circuit_inputs.next_2(xc1b2a1); // in7\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let xc0b1a0: u384 = outputs.get_output(t73);\n    let xc0b1a1: u384 = outputs.get_output(t74);\n    let xc0b2a0: u384 = outputs.get_output(t60);\n    let xc0b2a1: u384 = outputs.get_output(t61);\n    let xc1b0a0: u384 = outputs.get_output(t42);\n    let xc1b0a1: u384 = outputs.get_output(t43);\n    let xc1b2a0: u384 = outputs.get_output(t83);\n    let xc1b2a1: u384 = outputs.get_output(t84);\n    return (xc0b1a0, xc0b1a1, xc0b2a0, xc0b2a1, xc1b0a0, xc1b0a1, xc1b2a0, xc1b2a1);\n}\n#[inline(always)]\npub fn run_BLS12_381_E12T_DECOMP_KARABINA_II_circuit(\n    t0a0: u384,\n    t0a1: u384,\n    t1a0: u384,\n    t1a1: u384,\n    xc0b1a0: u384,\n    xc0b1a1: u384,\n    xc0b2a0: u384,\n    xc0b2a1: u384,\n    xc1b0a0: u384,\n    xc1b0a1: u384,\n    xc1b2a0: u384,\n    xc1b2a1: u384,\n) -> (u384, u384, u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x1\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let t0 = circuit_mul(in4, in4); // Fp2 Inv start\n    let t1 = circuit_mul(in5, in5);\n    let t2 = circuit_add(t0, t1);\n    let t3 = circuit_inverse(t2);\n    let t4 = circuit_mul(in4, t3); // Fp2 Inv real part end\n    let t5 = circuit_mul(in5, t3);\n    let t6 = circuit_sub(in0, t5); // Fp2 Inv imag part end\n    let t7 = circuit_mul(in2, t4); // Fp2 mul start\n    let t8 = circuit_mul(in3, t6);\n    let t9 = circuit_sub(t7, t8); // Fp2 mul real part end\n    let t10 = circuit_mul(in2, t6);\n    let t11 = circuit_mul(in3, t4);\n    let t12 = circuit_add(t10, t11); // Fp2 mul imag part end\n    let t13 = circuit_mul(in8, in6); // Fp2 mul start\n    let t14 = circuit_mul(in9, in7);\n    let t15 = circuit_sub(t13, t14); // Fp2 mul real part end\n    let t16 = circuit_mul(in8, in7);\n    let t17 = circuit_mul(in9, in6);\n    let t18 = circuit_add(t16, t17); // Fp2 mul imag part end\n    let t19 = circuit_add(t9, t12);\n    let t20 = circuit_sub(t9, t12);\n    let t21 = circuit_mul(t19, t20);\n    let t22 = circuit_mul(t9, t12);\n    let t23 = circuit_add(t22, t22);\n    let t24 = circuit_sub(t21, t15); // Fp2 sub coeff 0/1\n    let t25 = circuit_sub(t23, t18); // Fp2 sub coeff 1/1\n    let t26 = circuit_add(t24, t24); // Fp2 add coeff 0/1\n    let t27 = circuit_add(t25, t25); // Fp2 add coeff 1/1\n    let t28 = circuit_sub(t26, t15); // Fp2 sub coeff 0/1\n    let t29 = circuit_sub(t27, t18); // Fp2 sub coeff 1/1\n    let t30 = circuit_mul(in10, in12); // Fp2 mul start\n    let t31 = circuit_mul(in11, in13);\n    let t32 = circuit_sub(t30, t31); // Fp2 mul real part end\n    let t33 = circuit_mul(in10, in13);\n    let t34 = circuit_mul(in11, in12);\n    let t35 = circuit_add(t33, t34); // Fp2 mul imag part end\n    let t36 = circuit_add(t28, t32); // Fp2 add coeff 0/1\n    let t37 = circuit_add(t29, t35); // Fp2 add coeff 1/1\n    let t38 = circuit_add(t36, t37);\n    let t39 = circuit_add(t38, t38);\n    let t40 = circuit_sub(t36, t37);\n    let t41 = circuit_sub(t39, t36);\n    let t42 = circuit_sub(t41, t37);\n    let t43 = circuit_add(t40, in1);\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t43, t42, t9, t12).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(t0a0); // in2\n    circuit_inputs = circuit_inputs.next_2(t0a1); // in3\n    circuit_inputs = circuit_inputs.next_2(t1a0); // in4\n    circuit_inputs = circuit_inputs.next_2(t1a1); // in5\n    circuit_inputs = circuit_inputs.next_2(xc0b1a0); // in6\n    circuit_inputs = circuit_inputs.next_2(xc0b1a1); // in7\n    circuit_inputs = circuit_inputs.next_2(xc0b2a0); // in8\n    circuit_inputs = circuit_inputs.next_2(xc0b2a1); // in9\n    circuit_inputs = circuit_inputs.next_2(xc1b0a0); // in10\n    circuit_inputs = circuit_inputs.next_2(xc1b0a1); // in11\n    circuit_inputs = circuit_inputs.next_2(xc1b2a0); // in12\n    circuit_inputs = circuit_inputs.next_2(xc1b2a1); // in13\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let zc0b0a0: u384 = outputs.get_output(t43);\n    let zc0b0a1: u384 = outputs.get_output(t42);\n    let zc1b1a0: u384 = outputs.get_output(t9);\n    let zc1b1a1: u384 = outputs.get_output(t12);\n    return (zc0b0a0, zc0b0a1, zc1b1a0, zc1b1a1);\n}\n#[inline(always)]\npub fn run_BLS12_381_E12T_DECOMP_KARABINA_I_NZ_circuit(\n    xc0b1a0: u384,\n    xc0b1a1: u384,\n    xc0b2a0: u384,\n    xc0b2a1: u384,\n    xc1b0a0: u384,\n    xc1b0a1: u384,\n    xc1b2a0: u384,\n    xc1b2a1: u384,\n) -> (u384, u384, u384, u384) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7) = (CE::<CI<6>> {}, CE::<CI<7>> {});\n    let t0 = circuit_add(in0, in1);\n    let t1 = circuit_sub(in0, in1);\n    let t2 = circuit_mul(t0, t1);\n    let t3 = circuit_mul(in0, in1);\n    let t4 = circuit_add(t3, t3);\n    let t5 = circuit_sub(t2, in2); // Fp2 sub coeff 0/1\n    let t6 = circuit_sub(t4, in3); // Fp2 sub coeff 1/1\n    let t7 = circuit_add(t5, t5); // Fp2 add coeff 0/1\n    let t8 = circuit_add(t6, t6); // Fp2 add coeff 1/1\n    let t9 = circuit_add(t7, t2); // Fp2 add coeff 0/1\n    let t10 = circuit_add(t8, t4); // Fp2 add coeff 1/1\n    let t11 = circuit_add(in6, in7);\n    let t12 = circuit_sub(in6, in7);\n    let t13 = circuit_mul(t11, t12);\n    let t14 = circuit_mul(in6, in7);\n    let t15 = circuit_add(t14, t14);\n    let t16 = circuit_add(t13, t15);\n    let t17 = circuit_add(t16, t16);\n    let t18 = circuit_sub(t13, t15);\n    let t19 = circuit_sub(t17, t13);\n    let t20 = circuit_sub(t19, t15);\n    let t21 = circuit_add(t18, t9); // Fp2 add coeff 0/1\n    let t22 = circuit_add(t20, t10); // Fp2 add coeff 1/1\n    let t23 = circuit_add(in4, in4); // Fp2 add coeff 0/1\n    let t24 = circuit_add(in5, in5); // Fp2 add coeff 1/1\n    let t25 = circuit_add(t23, t23); // Fp2 add coeff 0/1\n    let t26 = circuit_add(t24, t24); // Fp2 add coeff 1/1\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t21, t22, t25, t26).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(xc0b1a0); // in0\n    circuit_inputs = circuit_inputs.next_2(xc0b1a1); // in1\n    circuit_inputs = circuit_inputs.next_2(xc0b2a0); // in2\n    circuit_inputs = circuit_inputs.next_2(xc0b2a1); // in3\n    circuit_inputs = circuit_inputs.next_2(xc1b0a0); // in4\n    circuit_inputs = circuit_inputs.next_2(xc1b0a1); // in5\n    circuit_inputs = circuit_inputs.next_2(xc1b2a0); // in6\n    circuit_inputs = circuit_inputs.next_2(xc1b2a1); // in7\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let t0a0: u384 = outputs.get_output(t21);\n    let t0a1: u384 = outputs.get_output(t22);\n    let t1a0: u384 = outputs.get_output(t25);\n    let t1a1: u384 = outputs.get_output(t26);\n    return (t0a0, t0a1, t1a0, t1a1);\n}\n#[inline(always)]\npub fn run_BLS12_381_E12T_DECOMP_KARABINA_I_Z_circuit(\n    xc0b1a0: u384, xc0b1a1: u384, xc1b2a0: u384, xc1b2a1: u384,\n) -> (u384, u384) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let in3 = CE::<CI<3>> {};\n    let t0 = circuit_mul(in0, in2); // Fp2 mul start\n    let t1 = circuit_mul(in1, in3);\n    let t2 = circuit_sub(t0, t1); // Fp2 mul real part end\n    let t3 = circuit_mul(in0, in3);\n    let t4 = circuit_mul(in1, in2);\n    let t5 = circuit_add(t3, t4); // Fp2 mul imag part end\n    let t6 = circuit_add(t2, t2); // Fp2 add coeff 0/1\n    let t7 = circuit_add(t5, t5); // Fp2 add coeff 1/1\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t6, t7).new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(xc0b1a0); // in0\n    circuit_inputs = circuit_inputs.next_2(xc0b1a1); // in1\n    circuit_inputs = circuit_inputs.next_2(xc1b2a0); // in2\n    circuit_inputs = circuit_inputs.next_2(xc1b2a1); // in3\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res0: u384 = outputs.get_output(t6);\n    let res1: u384 = outputs.get_output(t7);\n    return (res0, res1);\n}\n#[inline(always)]\npub fn run_BLS12_381_E12T_FROBENIUS_CUBE_circuit(M: E12T) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x1\n    let in2 = CE::<CI<2>> {}; // -0x1 % p\n    let in3 = CE::<\n        CI<3>,\n    > {}; // 0x135203e60180a68ee2e9c448d77a2cd91c3dedd930b1cf60ef396489f61eb45e304466cf3e67fa0af1ee7b04121bdea2\n    let in4 = CE::<\n        CI<4>,\n    > {}; // 0x6af0e0437ff400b6831e36d6bd17ffe48395dabc2d3435e77f76e17009241c5ee67992f72ec05f4c81084fbede3cc09\n\n    // INPUT stack\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let t0 = circuit_sub(in0, in6);\n    let t1 = circuit_add(in5, in0);\n    let t2 = circuit_sub(in0, in8);\n    let t3 = circuit_sub(in0, in10);\n    let t4 = circuit_sub(in0, in12);\n    let t5 = circuit_sub(in0, in14);\n    let t6 = circuit_sub(in0, in16);\n    let t7 = circuit_mul(in0, in7); // Fp2 mul start\n    let t8 = circuit_mul(in1, t2);\n    let t9 = circuit_sub(t7, t8); // Fp2 mul real part end\n    let t10 = circuit_mul(in0, t2);\n    let t11 = circuit_mul(in1, in7);\n    let t12 = circuit_add(t10, t11); // Fp2 mul imag part end\n    let t13 = circuit_mul(in2, in9);\n    let t14 = circuit_mul(in2, t3);\n    let t15 = circuit_mul(in3, in11); // Fp2 mul start\n    let t16 = circuit_mul(in4, t4);\n    let t17 = circuit_sub(t15, t16); // Fp2 mul real part end\n    let t18 = circuit_mul(in3, t4);\n    let t19 = circuit_mul(in4, in11);\n    let t20 = circuit_add(t18, t19); // Fp2 mul imag part end\n    let t21 = circuit_mul(in3, in13); // Fp2 mul start\n    let t22 = circuit_mul(in3, t5);\n    let t23 = circuit_sub(t21, t22); // Fp2 mul real part end\n    let t24 = circuit_mul(in3, t5);\n    let t25 = circuit_mul(in3, in13);\n    let t26 = circuit_add(t24, t25); // Fp2 mul imag part end\n    let t27 = circuit_mul(in4, in15); // Fp2 mul start\n    let t28 = circuit_mul(in3, t6);\n    let t29 = circuit_sub(t27, t28); // Fp2 mul real part end\n    let t30 = circuit_mul(in4, t6);\n    let t31 = circuit_mul(in3, in15);\n    let t32 = circuit_add(t30, t31); // Fp2 mul imag part end\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t1, t0, t9, t12, t13, t14, t17, t20, t23, t26, t29, t32).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0xb153ffffb9feffffffffaaaa, 0x6730d2a0f6b0f6241eabfffe, 0x434bacd764774b84f38512bf,\n                0x1a0111ea397fe69a4b1ba7b6,\n            ],\n        ); // in2\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0x3e67fa0af1ee7b04121bdea2, 0xef396489f61eb45e304466cf, 0xd77a2cd91c3dedd930b1cf60,\n                0x135203e60180a68ee2e9c448,\n            ],\n        ); // in3\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0x72ec05f4c81084fbede3cc09, 0x77f76e17009241c5ee67992f, 0x6bd17ffe48395dabc2d3435e,\n                0x6af0e0437ff400b6831e36d,\n            ],\n        ); // in4\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a0); // in5\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a1); // in6\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a0); // in7\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a1); // in8\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a0); // in9\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a1); // in10\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a0); // in11\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a1); // in12\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a0); // in13\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a1); // in14\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a0); // in15\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a1); // in16\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t1),\n        c0b0a1: outputs.get_output(t0),\n        c0b1a0: outputs.get_output(t9),\n        c0b1a1: outputs.get_output(t12),\n        c0b2a0: outputs.get_output(t13),\n        c0b2a1: outputs.get_output(t14),\n        c1b0a0: outputs.get_output(t17),\n        c1b0a1: outputs.get_output(t20),\n        c1b1a0: outputs.get_output(t23),\n        c1b1a1: outputs.get_output(t26),\n        c1b2a0: outputs.get_output(t29),\n        c1b2a1: outputs.get_output(t32),\n    };\n    return (res,);\n}\n#[inline(always)]\npub fn run_BLS12_381_E12T_FROBENIUS_SQUARE_circuit(M: E12T) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<\n        CI<1>,\n    > {}; // 0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe\n    let in2 = CE::<\n        CI<2>,\n    > {}; // 0x1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaac\n    let in3 = CE::<\n        CI<3>,\n    > {}; // 0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffeffff\n    let in4 = CE::<CI<4>> {}; // -0x1 % p\n    let in5 = CE::<\n        CI<5>,\n    > {}; // 0x1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaad\n\n    // INPUT stack\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let t0 = circuit_add(in6, in0);\n    let t1 = circuit_add(in7, in0);\n    let t2 = circuit_mul(in1, in8);\n    let t3 = circuit_mul(in1, in9);\n    let t4 = circuit_mul(in2, in10);\n    let t5 = circuit_mul(in2, in11);\n    let t6 = circuit_mul(in3, in12);\n    let t7 = circuit_mul(in3, in13);\n    let t8 = circuit_mul(in4, in14);\n    let t9 = circuit_mul(in4, in15);\n    let t10 = circuit_mul(in5, in16);\n    let t11 = circuit_mul(in5, in17);\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0x620a00022e01fffffffefffe, 0xddb3a93be6f89688de17d813, 0xdf76ce51ba69c6076a0f77ea,\n                0x5f19672f,\n            ],\n        ); // in1\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0x4f49fffd8bfd00000000aaac, 0x897d29650fb85f9b409427eb, 0x63d4de85aa0d857d89759ad4,\n                0x1a0111ea397fe699ec024086,\n            ],\n        ); // in2\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0x620a00022e01fffffffeffff, 0xddb3a93be6f89688de17d813, 0xdf76ce51ba69c6076a0f77ea,\n                0x5f19672f,\n            ],\n        ); // in3\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0xb153ffffb9feffffffffaaaa, 0x6730d2a0f6b0f6241eabfffe, 0x434bacd764774b84f38512bf,\n                0x1a0111ea397fe69a4b1ba7b6,\n            ],\n        ); // in4\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [\n                0x4f49fffd8bfd00000000aaad, 0x897d29650fb85f9b409427eb, 0x63d4de85aa0d857d89759ad4,\n                0x1a0111ea397fe699ec024086,\n            ],\n        ); // in5\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a0); // in6\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a1); // in7\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a0); // in8\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a1); // in9\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a0); // in10\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a1); // in11\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a0); // in16\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a1); // in17\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t0),\n        c0b0a1: outputs.get_output(t1),\n        c0b1a0: outputs.get_output(t2),\n        c0b1a1: outputs.get_output(t3),\n        c0b2a0: outputs.get_output(t4),\n        c0b2a1: outputs.get_output(t5),\n        c1b0a0: outputs.get_output(t6),\n        c1b0a1: outputs.get_output(t7),\n        c1b1a0: outputs.get_output(t8),\n        c1b1a1: outputs.get_output(t9),\n        c1b2a0: outputs.get_output(t10),\n        c1b2a1: outputs.get_output(t11),\n    };\n    return (res,);\n}\n#[inline(always)]\npub fn run_BLS12_381_E12T_FROBENIUS_circuit(M: E12T) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<\n        CI<1>,\n    > {}; // 0x1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaac\n    let in2 = CE::<\n        CI<2>,\n    > {}; // 0x1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaad\n    let in3 = CE::<\n        CI<3>,\n    > {}; // 0x1904d3bf02bb0667c231beb4202c0d1f0fd603fd3cbd5f4f7b2443d784bab9c4f67ea53d63e7813d8d0775ed92235fb8\n    let in4 = CE::<\n        CI<4>,\n    > {}; // 0xfc3e2b36c4e03288e9e902231f9fb854a14787b6c7b36fec0c8ec971f63c5f282d5ac14d6c7ec22cf78a126ddc4af3\n    let in5 = CE::<\n        CI<5>,\n    > {}; // 0x6af0e0437ff400b6831e36d6bd17ffe48395dabc2d3435e77f76e17009241c5ee67992f72ec05f4c81084fbede3cc09\n    let in6 = CE::<\n        CI<6>,\n    > {}; // 0x5b2cfd9013a5fd8df47fa6b48b1e045f39816240c0b8fee8beadf4d8e9c0566c63a3e6e257f87329b18fae980078116\n    let in7 = CE::<\n        CI<7>,\n    > {}; // 0x144e4211384586c16bd3ad4afa99cc9170df3560e77982d0db45f3536814f0bd5871c1908bd478cd1ee605167ff82995\n\n    // INPUT stack\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let t0 = circuit_sub(in0, in9);\n    let t1 = circuit_add(in8, in0);\n    let t2 = circuit_sub(in0, in11);\n    let t3 = circuit_sub(in0, in13);\n    let t4 = circuit_sub(in0, in15);\n    let t5 = circuit_sub(in0, in17);\n    let t6 = circuit_sub(in0, in19);\n    let t7 = circuit_mul(in0, in10); // Fp2 mul start\n    let t8 = circuit_mul(in1, t2);\n    let t9 = circuit_sub(t7, t8); // Fp2 mul real part end\n    let t10 = circuit_mul(in0, t2);\n    let t11 = circuit_mul(in1, in10);\n    let t12 = circuit_add(t10, t11); // Fp2 mul imag part end\n    let t13 = circuit_mul(in2, in12);\n    let t14 = circuit_mul(in2, t3);\n    let t15 = circuit_mul(in3, in14); // Fp2 mul start\n    let t16 = circuit_mul(in4, t4);\n    let t17 = circuit_sub(t15, t16); // Fp2 mul real part end\n    let t18 = circuit_mul(in3, t4);\n    let t19 = circuit_mul(in4, in14);\n    let t20 = circuit_add(t18, t19); // Fp2 mul imag part end\n    let t21 = circuit_mul(in5, in16); // Fp2 mul start\n    let t22 = circuit_mul(in5, t5);\n    let t23 = circuit_sub(t21, t22); // Fp2 mul real part end\n    let t24 = circuit_mul(in5, t5);\n    let t25 = circuit_mul(in5, in16);\n    let t26 = circuit_add(t24, t25); // Fp2 mul imag part end\n    let t27 = circuit_mul(in6, in18); // Fp2 mul start\n    let t28 = circuit_mul(in7, t6);\n    let t29 = circuit_sub(t27, t28); // Fp2 mul real part end\n    let t30 = circuit_mul(in6, t6);\n    let t31 = circuit_mul(in7, in18);\n    let t32 = circuit_add(t30, t31); // Fp2 mul imag part end\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (t1, t0, t9, t12, t13, t14, t17, t20, t23, t26, t29, t32).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(E12T_FROBENIUS_BLS12_381_CONSTANTS.span()); // in0 - in7\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a0); // in8\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a1); // in9\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a0); // in10\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a1); // in11\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a0); // in12\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a1); // in13\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a0); // in14\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a1); // in15\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a0); // in16\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a1); // in17\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a0); // in18\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a1); // in19\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t1),\n        c0b0a1: outputs.get_output(t0),\n        c0b1a0: outputs.get_output(t9),\n        c0b1a1: outputs.get_output(t12),\n        c0b2a0: outputs.get_output(t13),\n        c0b2a1: outputs.get_output(t14),\n        c1b0a0: outputs.get_output(t17),\n        c1b0a1: outputs.get_output(t20),\n        c1b1a0: outputs.get_output(t23),\n        c1b1a1: outputs.get_output(t26),\n        c1b2a0: outputs.get_output(t29),\n        c1b2a1: outputs.get_output(t32),\n    };\n    return (res,);\n}\nconst E12T_FROBENIUS_BLS12_381_CONSTANTS: [u384; 8] = [\n    u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x4f49fffd8bfd00000000aaac,\n        limb1: 0x897d29650fb85f9b409427eb,\n        limb2: 0x63d4de85aa0d857d89759ad4,\n        limb3: 0x1a0111ea397fe699ec024086,\n    },\n    u384 {\n        limb0: 0x4f49fffd8bfd00000000aaad,\n        limb1: 0x897d29650fb85f9b409427eb,\n        limb2: 0x63d4de85aa0d857d89759ad4,\n        limb3: 0x1a0111ea397fe699ec024086,\n    },\n    u384 {\n        limb0: 0x63e7813d8d0775ed92235fb8,\n        limb1: 0x7b2443d784bab9c4f67ea53d,\n        limb2: 0x202c0d1f0fd603fd3cbd5f4f,\n        limb3: 0x1904d3bf02bb0667c231beb4,\n    },\n    u384 {\n        limb0: 0x4d6c7ec22cf78a126ddc4af3,\n        limb1: 0xec0c8ec971f63c5f282d5ac1,\n        limb2: 0x231f9fb854a14787b6c7b36f,\n        limb3: 0xfc3e2b36c4e03288e9e902,\n    },\n    u384 {\n        limb0: 0x72ec05f4c81084fbede3cc09,\n        limb1: 0x77f76e17009241c5ee67992f,\n        limb2: 0x6bd17ffe48395dabc2d3435e,\n        limb3: 0x6af0e0437ff400b6831e36d,\n    },\n    u384 {\n        limb0: 0x257f87329b18fae980078116,\n        limb1: 0x8beadf4d8e9c0566c63a3e6e,\n        limb2: 0x48b1e045f39816240c0b8fee,\n        limb3: 0x5b2cfd9013a5fd8df47fa6b,\n    },\n    u384 {\n        limb0: 0x8bd478cd1ee605167ff82995,\n        limb1: 0xdb45f3536814f0bd5871c190,\n        limb2: 0xfa99cc9170df3560e77982d0,\n        limb3: 0x144e4211384586c16bd3ad4a,\n    },\n];\n#[inline(always)]\npub fn run_BLS12_381_E12T_INVERSE_circuit(M: E12T) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8, in9) = (CE::<CI<7>> {}, CE::<CI<8>> {}, CE::<CI<9>> {});\n    let (in10, in11, in12) = (CE::<CI<10>> {}, CE::<CI<11>> {}, CE::<CI<12>> {});\n    let t0 = circuit_mul(in1, in3); // Fp2 mul start\n    let t1 = circuit_mul(in2, in4);\n    let t2 = circuit_sub(t0, t1); // Fp2 mul real part end\n    let t3 = circuit_mul(in1, in4);\n    let t4 = circuit_mul(in2, in3);\n    let t5 = circuit_add(t3, t4); // Fp2 mul imag part end\n    let t6 = circuit_add(t2, t2); // Fp2 add coeff 0/1\n    let t7 = circuit_add(t5, t5); // Fp2 add coeff 1/1\n    let t8 = circuit_add(in5, in6);\n    let t9 = circuit_sub(in5, in6);\n    let t10 = circuit_mul(t8, t9);\n    let t11 = circuit_mul(in5, in6);\n    let t12 = circuit_add(t11, t11);\n    let t13 = circuit_add(t10, t12);\n    let t14 = circuit_add(t13, t13);\n    let t15 = circuit_sub(t10, t12);\n    let t16 = circuit_sub(t14, t10);\n    let t17 = circuit_sub(t16, t12);\n    let t18 = circuit_add(t15, t6); // Fp2 add coeff 0/1\n    let t19 = circuit_add(t17, t7); // Fp2 add coeff 1/1\n    let t20 = circuit_sub(t6, t10); // Fp2 sub coeff 0/1\n    let t21 = circuit_sub(t7, t12); // Fp2 sub coeff 1/1\n    let t22 = circuit_add(in1, in2);\n    let t23 = circuit_sub(in1, in2);\n    let t24 = circuit_mul(t22, t23);\n    let t25 = circuit_mul(in1, in2);\n    let t26 = circuit_add(t25, t25);\n    let t27 = circuit_sub(in1, in3); // Fp2 sub coeff 0/1\n    let t28 = circuit_sub(in2, in4); // Fp2 sub coeff 1/1\n    let t29 = circuit_add(t27, in5); // Fp2 add coeff 0/1\n    let t30 = circuit_add(t28, in6); // Fp2 add coeff 1/1\n    let t31 = circuit_mul(in3, in5); // Fp2 mul start\n    let t32 = circuit_mul(in4, in6);\n    let t33 = circuit_sub(t31, t32); // Fp2 mul real part end\n    let t34 = circuit_mul(in3, in6);\n    let t35 = circuit_mul(in4, in5);\n    let t36 = circuit_add(t34, t35); // Fp2 mul imag part end\n    let t37 = circuit_add(t33, t33); // Fp2 add coeff 0/1\n    let t38 = circuit_add(t36, t36); // Fp2 add coeff 1/1\n    let t39 = circuit_add(t29, t30);\n    let t40 = circuit_sub(t29, t30);\n    let t41 = circuit_mul(t39, t40);\n    let t42 = circuit_mul(t29, t30);\n    let t43 = circuit_add(t42, t42);\n    let t44 = circuit_add(t37, t38);\n    let t45 = circuit_add(t44, t44);\n    let t46 = circuit_sub(t37, t38);\n    let t47 = circuit_sub(t45, t37);\n    let t48 = circuit_sub(t47, t38);\n    let t49 = circuit_add(t46, t24); // Fp2 add coeff 0/1\n    let t50 = circuit_add(t48, t26); // Fp2 add coeff 1/1\n    let t51 = circuit_add(t20, t41); // Fp2 add coeff 0/1\n    let t52 = circuit_add(t21, t43); // Fp2 add coeff 1/1\n    let t53 = circuit_add(t51, t37); // Fp2 add coeff 0/1\n    let t54 = circuit_add(t52, t38); // Fp2 add coeff 1/1\n    let t55 = circuit_sub(t53, t24); // Fp2 sub coeff 0/1\n    let t56 = circuit_sub(t54, t26); // Fp2 sub coeff 1/1\n    let t57 = circuit_mul(in7, in9); // Fp2 mul start\n    let t58 = circuit_mul(in8, in10);\n    let t59 = circuit_sub(t57, t58); // Fp2 mul real part end\n    let t60 = circuit_mul(in7, in10);\n    let t61 = circuit_mul(in8, in9);\n    let t62 = circuit_add(t60, t61); // Fp2 mul imag part end\n    let t63 = circuit_add(t59, t59); // Fp2 add coeff 0/1\n    let t64 = circuit_add(t62, t62); // Fp2 add coeff 1/1\n    let t65 = circuit_add(in11, in12);\n    let t66 = circuit_sub(in11, in12);\n    let t67 = circuit_mul(t65, t66);\n    let t68 = circuit_mul(in11, in12);\n    let t69 = circuit_add(t68, t68);\n    let t70 = circuit_add(t67, t69);\n    let t71 = circuit_add(t70, t70);\n    let t72 = circuit_sub(t67, t69);\n    let t73 = circuit_sub(t71, t67);\n    let t74 = circuit_sub(t73, t69);\n    let t75 = circuit_add(t72, t63); // Fp2 add coeff 0/1\n    let t76 = circuit_add(t74, t64); // Fp2 add coeff 1/1\n    let t77 = circuit_sub(t63, t67); // Fp2 sub coeff 0/1\n    let t78 = circuit_sub(t64, t69); // Fp2 sub coeff 1/1\n    let t79 = circuit_add(in7, in8);\n    let t80 = circuit_sub(in7, in8);\n    let t81 = circuit_mul(t79, t80);\n    let t82 = circuit_mul(in7, in8);\n    let t83 = circuit_add(t82, t82);\n    let t84 = circuit_sub(in7, in9); // Fp2 sub coeff 0/1\n    let t85 = circuit_sub(in8, in10); // Fp2 sub coeff 1/1\n    let t86 = circuit_add(t84, in11); // Fp2 add coeff 0/1\n    let t87 = circuit_add(t85, in12); // Fp2 add coeff 1/1\n    let t88 = circuit_mul(in9, in11); // Fp2 mul start\n    let t89 = circuit_mul(in10, in12);\n    let t90 = circuit_sub(t88, t89); // Fp2 mul real part end\n    let t91 = circuit_mul(in9, in12);\n    let t92 = circuit_mul(in10, in11);\n    let t93 = circuit_add(t91, t92); // Fp2 mul imag part end\n    let t94 = circuit_add(t90, t90); // Fp2 add coeff 0/1\n    let t95 = circuit_add(t93, t93); // Fp2 add coeff 1/1\n    let t96 = circuit_add(t86, t87);\n    let t97 = circuit_sub(t86, t87);\n    let t98 = circuit_mul(t96, t97);\n    let t99 = circuit_mul(t86, t87);\n    let t100 = circuit_add(t99, t99);\n    let t101 = circuit_add(t94, t95);\n    let t102 = circuit_add(t101, t101);\n    let t103 = circuit_sub(t94, t95);\n    let t104 = circuit_sub(t102, t94);\n    let t105 = circuit_sub(t104, t95);\n    let t106 = circuit_add(t103, t81); // Fp2 add coeff 0/1\n    let t107 = circuit_add(t105, t83); // Fp2 add coeff 1/1\n    let t108 = circuit_add(t77, t98); // Fp2 add coeff 0/1\n    let t109 = circuit_add(t78, t100); // Fp2 add coeff 1/1\n    let t110 = circuit_add(t108, t94); // Fp2 add coeff 0/1\n    let t111 = circuit_add(t109, t95); // Fp2 add coeff 1/1\n    let t112 = circuit_sub(t110, t81); // Fp2 sub coeff 0/1\n    let t113 = circuit_sub(t111, t83); // Fp2 sub coeff 1/1\n    let t114 = circuit_add(t112, t113);\n    let t115 = circuit_add(t114, t114);\n    let t116 = circuit_sub(t112, t113);\n    let t117 = circuit_sub(t115, t112);\n    let t118 = circuit_sub(t117, t113);\n    let t119 = circuit_sub(t49, t116); // Fp6 sub coeff 0/5\n    let t120 = circuit_sub(t50, t118); // Fp6 sub coeff 1/5\n    let t121 = circuit_sub(t18, t106); // Fp6 sub coeff 2/5\n    let t122 = circuit_sub(t19, t107); // Fp6 sub coeff 3/5\n    let t123 = circuit_sub(t55, t75); // Fp6 sub coeff 4/5\n    let t124 = circuit_sub(t56, t76); // Fp6 sub coeff 5/5\n    let t125 = circuit_add(t119, t120);\n    let t126 = circuit_sub(t119, t120);\n    let t127 = circuit_mul(t125, t126);\n    let t128 = circuit_mul(t119, t120);\n    let t129 = circuit_add(t128, t128);\n    let t130 = circuit_add(t121, t122);\n    let t131 = circuit_sub(t121, t122);\n    let t132 = circuit_mul(t130, t131);\n    let t133 = circuit_mul(t121, t122);\n    let t134 = circuit_add(t133, t133);\n    let t135 = circuit_add(t123, t124);\n    let t136 = circuit_sub(t123, t124);\n    let t137 = circuit_mul(t135, t136);\n    let t138 = circuit_mul(t123, t124);\n    let t139 = circuit_add(t138, t138);\n    let t140 = circuit_mul(t119, t121); // Fp2 mul start\n    let t141 = circuit_mul(t120, t122);\n    let t142 = circuit_sub(t140, t141); // Fp2 mul real part end\n    let t143 = circuit_mul(t119, t122);\n    let t144 = circuit_mul(t120, t121);\n    let t145 = circuit_add(t143, t144); // Fp2 mul imag part end\n    let t146 = circuit_mul(t119, t123); // Fp2 mul start\n    let t147 = circuit_mul(t120, t124);\n    let t148 = circuit_sub(t146, t147); // Fp2 mul real part end\n    let t149 = circuit_mul(t119, t124);\n    let t150 = circuit_mul(t120, t123);\n    let t151 = circuit_add(t149, t150); // Fp2 mul imag part end\n    let t152 = circuit_mul(t121, t123); // Fp2 mul start\n    let t153 = circuit_mul(t122, t124);\n    let t154 = circuit_sub(t152, t153); // Fp2 mul real part end\n    let t155 = circuit_mul(t121, t124);\n    let t156 = circuit_mul(t122, t123);\n    let t157 = circuit_add(t155, t156); // Fp2 mul imag part end\n    let t158 = circuit_add(t154, t157);\n    let t159 = circuit_add(t158, t158);\n    let t160 = circuit_sub(t154, t157);\n    let t161 = circuit_sub(t159, t154);\n    let t162 = circuit_sub(t161, t157);\n    let t163 = circuit_sub(in0, t160); // Fp2 neg coeff 0/1\n    let t164 = circuit_sub(in0, t162); // Fp2 neg coeff 1/1\n    let t165 = circuit_add(t163, t127); // Fp2 add coeff 0/1\n    let t166 = circuit_add(t164, t129); // Fp2 add coeff 1/1\n    let t167 = circuit_add(t137, t139);\n    let t168 = circuit_add(t167, t167);\n    let t169 = circuit_sub(t137, t139);\n    let t170 = circuit_sub(t168, t137);\n    let t171 = circuit_sub(t170, t139);\n    let t172 = circuit_sub(t169, t142); // Fp2 sub coeff 0/1\n    let t173 = circuit_sub(t171, t145); // Fp2 sub coeff 1/1\n    let t174 = circuit_sub(t132, t148); // Fp2 sub coeff 0/1\n    let t175 = circuit_sub(t134, t151); // Fp2 sub coeff 1/1\n    let t176 = circuit_mul(t119, t165); // Fp2 mul start\n    let t177 = circuit_mul(t120, t166);\n    let t178 = circuit_sub(t176, t177); // Fp2 mul real part end\n    let t179 = circuit_mul(t119, t166);\n    let t180 = circuit_mul(t120, t165);\n    let t181 = circuit_add(t179, t180); // Fp2 mul imag part end\n    let t182 = circuit_mul(t123, t172); // Fp2 mul start\n    let t183 = circuit_mul(t124, t173);\n    let t184 = circuit_sub(t182, t183); // Fp2 mul real part end\n    let t185 = circuit_mul(t123, t173);\n    let t186 = circuit_mul(t124, t172);\n    let t187 = circuit_add(t185, t186); // Fp2 mul imag part end\n    let t188 = circuit_mul(t121, t174); // Fp2 mul start\n    let t189 = circuit_mul(t122, t175);\n    let t190 = circuit_sub(t188, t189); // Fp2 mul real part end\n    let t191 = circuit_mul(t121, t175);\n    let t192 = circuit_mul(t122, t174);\n    let t193 = circuit_add(t191, t192); // Fp2 mul imag part end\n    let t194 = circuit_add(t184, t190); // Fp2 add coeff 0/1\n    let t195 = circuit_add(t187, t193); // Fp2 add coeff 1/1\n    let t196 = circuit_add(t194, t195);\n    let t197 = circuit_add(t196, t196);\n    let t198 = circuit_sub(t194, t195);\n    let t199 = circuit_sub(t197, t194);\n    let t200 = circuit_sub(t199, t195);\n    let t201 = circuit_add(t178, t198); // Fp2 add coeff 0/1\n    let t202 = circuit_add(t181, t200); // Fp2 add coeff 1/1\n    let t203 = circuit_mul(t201, t201); // Fp2 Inv start\n    let t204 = circuit_mul(t202, t202);\n    let t205 = circuit_add(t203, t204);\n    let t206 = circuit_inverse(t205);\n    let t207 = circuit_mul(t201, t206); // Fp2 Inv real part end\n    let t208 = circuit_mul(t202, t206);\n    let t209 = circuit_sub(in0, t208); // Fp2 Inv imag part end\n    let t210 = circuit_mul(t165, t207); // Fp2 mul start\n    let t211 = circuit_mul(t166, t209);\n    let t212 = circuit_sub(t210, t211); // Fp2 mul real part end\n    let t213 = circuit_mul(t165, t209);\n    let t214 = circuit_mul(t166, t207);\n    let t215 = circuit_add(t213, t214); // Fp2 mul imag part end\n    let t216 = circuit_mul(t172, t207); // Fp2 mul start\n    let t217 = circuit_mul(t173, t209);\n    let t218 = circuit_sub(t216, t217); // Fp2 mul real part end\n    let t219 = circuit_mul(t172, t209);\n    let t220 = circuit_mul(t173, t207);\n    let t221 = circuit_add(t219, t220); // Fp2 mul imag part end\n    let t222 = circuit_mul(t174, t207); // Fp2 mul start\n    let t223 = circuit_mul(t175, t209);\n    let t224 = circuit_sub(t222, t223); // Fp2 mul real part end\n    let t225 = circuit_mul(t174, t209);\n    let t226 = circuit_mul(t175, t207);\n    let t227 = circuit_add(t225, t226); // Fp2 mul imag part end\n    let t228 = circuit_mul(in1, t212); // Fp2 mul start\n    let t229 = circuit_mul(in2, t215);\n    let t230 = circuit_sub(t228, t229); // Fp2 mul real part end\n    let t231 = circuit_mul(in1, t215);\n    let t232 = circuit_mul(in2, t212);\n    let t233 = circuit_add(t231, t232); // Fp2 mul imag part end\n    let t234 = circuit_mul(in3, t218); // Fp2 mul start\n    let t235 = circuit_mul(in4, t221);\n    let t236 = circuit_sub(t234, t235); // Fp2 mul real part end\n    let t237 = circuit_mul(in3, t221);\n    let t238 = circuit_mul(in4, t218);\n    let t239 = circuit_add(t237, t238); // Fp2 mul imag part end\n    let t240 = circuit_mul(in5, t224); // Fp2 mul start\n    let t241 = circuit_mul(in6, t227);\n    let t242 = circuit_sub(t240, t241); // Fp2 mul real part end\n    let t243 = circuit_mul(in5, t227);\n    let t244 = circuit_mul(in6, t224);\n    let t245 = circuit_add(t243, t244); // Fp2 mul imag part end\n    let t246 = circuit_add(in3, in5); // Fp2 add coeff 0/1\n    let t247 = circuit_add(in4, in6); // Fp2 add coeff 1/1\n    let t248 = circuit_add(t218, t224); // Fp2 add coeff 0/1\n    let t249 = circuit_add(t221, t227); // Fp2 add coeff 1/1\n    let t250 = circuit_mul(t246, t248); // Fp2 mul start\n    let t251 = circuit_mul(t247, t249);\n    let t252 = circuit_sub(t250, t251); // Fp2 mul real part end\n    let t253 = circuit_mul(t246, t249);\n    let t254 = circuit_mul(t247, t248);\n    let t255 = circuit_add(t253, t254); // Fp2 mul imag part end\n    let t256 = circuit_sub(t252, t236); // Fp2 sub coeff 0/1\n    let t257 = circuit_sub(t255, t239); // Fp2 sub coeff 1/1\n    let t258 = circuit_sub(t256, t242); // Fp2 sub coeff 0/1\n    let t259 = circuit_sub(t257, t245); // Fp2 sub coeff 1/1\n    let t260 = circuit_add(t258, t259);\n    let t261 = circuit_add(t260, t260);\n    let t262 = circuit_sub(t258, t259);\n    let t263 = circuit_sub(t261, t258);\n    let t264 = circuit_sub(t263, t259);\n    let t265 = circuit_add(t262, t230); // Fp2 add coeff 0/1\n    let t266 = circuit_add(t264, t233); // Fp2 add coeff 1/1\n    let t267 = circuit_add(in1, in3); // Fp2 add coeff 0/1\n    let t268 = circuit_add(in2, in4); // Fp2 add coeff 1/1\n    let t269 = circuit_add(t212, t218); // Fp2 add coeff 0/1\n    let t270 = circuit_add(t215, t221); // Fp2 add coeff 1/1\n    let t271 = circuit_mul(t267, t269); // Fp2 mul start\n    let t272 = circuit_mul(t268, t270);\n    let t273 = circuit_sub(t271, t272); // Fp2 mul real part end\n    let t274 = circuit_mul(t267, t270);\n    let t275 = circuit_mul(t268, t269);\n    let t276 = circuit_add(t274, t275); // Fp2 mul imag part end\n    let t277 = circuit_sub(t273, t230); // Fp2 sub coeff 0/1\n    let t278 = circuit_sub(t276, t233); // Fp2 sub coeff 1/1\n    let t279 = circuit_sub(t277, t236); // Fp2 sub coeff 0/1\n    let t280 = circuit_sub(t278, t239); // Fp2 sub coeff 1/1\n    let t281 = circuit_add(t242, t245);\n    let t282 = circuit_add(t281, t281);\n    let t283 = circuit_sub(t242, t245);\n    let t284 = circuit_sub(t282, t242);\n    let t285 = circuit_sub(t284, t245);\n    let t286 = circuit_add(t279, t283); // Fp2 add coeff 0/1\n    let t287 = circuit_add(t280, t285); // Fp2 add coeff 1/1\n    let t288 = circuit_add(in1, in5); // Fp2 add coeff 0/1\n    let t289 = circuit_add(in2, in6); // Fp2 add coeff 1/1\n    let t290 = circuit_add(t212, t224); // Fp2 add coeff 0/1\n    let t291 = circuit_add(t215, t227); // Fp2 add coeff 1/1\n    let t292 = circuit_mul(t290, t288); // Fp2 mul start\n    let t293 = circuit_mul(t291, t289);\n    let t294 = circuit_sub(t292, t293); // Fp2 mul real part end\n    let t295 = circuit_mul(t290, t289);\n    let t296 = circuit_mul(t291, t288);\n    let t297 = circuit_add(t295, t296); // Fp2 mul imag part end\n    let t298 = circuit_sub(t294, t230); // Fp2 sub coeff 0/1\n    let t299 = circuit_sub(t297, t233); // Fp2 sub coeff 1/1\n    let t300 = circuit_sub(t298, t242); // Fp2 sub coeff 0/1\n    let t301 = circuit_sub(t299, t245); // Fp2 sub coeff 1/1\n    let t302 = circuit_add(t300, t236); // Fp2 add coeff 0/1\n    let t303 = circuit_add(t301, t239); // Fp2 add coeff 1/1\n    let t304 = circuit_mul(in7, t212); // Fp2 mul start\n    let t305 = circuit_mul(in8, t215);\n    let t306 = circuit_sub(t304, t305); // Fp2 mul real part end\n    let t307 = circuit_mul(in7, t215);\n    let t308 = circuit_mul(in8, t212);\n    let t309 = circuit_add(t307, t308); // Fp2 mul imag part end\n    let t310 = circuit_mul(in9, t218); // Fp2 mul start\n    let t311 = circuit_mul(in10, t221);\n    let t312 = circuit_sub(t310, t311); // Fp2 mul real part end\n    let t313 = circuit_mul(in9, t221);\n    let t314 = circuit_mul(in10, t218);\n    let t315 = circuit_add(t313, t314); // Fp2 mul imag part end\n    let t316 = circuit_mul(in11, t224); // Fp2 mul start\n    let t317 = circuit_mul(in12, t227);\n    let t318 = circuit_sub(t316, t317); // Fp2 mul real part end\n    let t319 = circuit_mul(in11, t227);\n    let t320 = circuit_mul(in12, t224);\n    let t321 = circuit_add(t319, t320); // Fp2 mul imag part end\n    let t322 = circuit_add(in9, in11); // Fp2 add coeff 0/1\n    let t323 = circuit_add(in10, in12); // Fp2 add coeff 1/1\n    let t324 = circuit_add(t218, t224); // Fp2 add coeff 0/1\n    let t325 = circuit_add(t221, t227); // Fp2 add coeff 1/1\n    let t326 = circuit_mul(t322, t324); // Fp2 mul start\n    let t327 = circuit_mul(t323, t325);\n    let t328 = circuit_sub(t326, t327); // Fp2 mul real part end\n    let t329 = circuit_mul(t322, t325);\n    let t330 = circuit_mul(t323, t324);\n    let t331 = circuit_add(t329, t330); // Fp2 mul imag part end\n    let t332 = circuit_sub(t328, t312); // Fp2 sub coeff 0/1\n    let t333 = circuit_sub(t331, t315); // Fp2 sub coeff 1/1\n    let t334 = circuit_sub(t332, t318); // Fp2 sub coeff 0/1\n    let t335 = circuit_sub(t333, t321); // Fp2 sub coeff 1/1\n    let t336 = circuit_add(t334, t335);\n    let t337 = circuit_add(t336, t336);\n    let t338 = circuit_sub(t334, t335);\n    let t339 = circuit_sub(t337, t334);\n    let t340 = circuit_sub(t339, t335);\n    let t341 = circuit_add(t338, t306); // Fp2 add coeff 0/1\n    let t342 = circuit_add(t340, t309); // Fp2 add coeff 1/1\n    let t343 = circuit_add(in7, in9); // Fp2 add coeff 0/1\n    let t344 = circuit_add(in8, in10); // Fp2 add coeff 1/1\n    let t345 = circuit_add(t212, t218); // Fp2 add coeff 0/1\n    let t346 = circuit_add(t215, t221); // Fp2 add coeff 1/1\n    let t347 = circuit_mul(t343, t345); // Fp2 mul start\n    let t348 = circuit_mul(t344, t346);\n    let t349 = circuit_sub(t347, t348); // Fp2 mul real part end\n    let t350 = circuit_mul(t343, t346);\n    let t351 = circuit_mul(t344, t345);\n    let t352 = circuit_add(t350, t351); // Fp2 mul imag part end\n    let t353 = circuit_sub(t349, t306); // Fp2 sub coeff 0/1\n    let t354 = circuit_sub(t352, t309); // Fp2 sub coeff 1/1\n    let t355 = circuit_sub(t353, t312); // Fp2 sub coeff 0/1\n    let t356 = circuit_sub(t354, t315); // Fp2 sub coeff 1/1\n    let t357 = circuit_add(t318, t321);\n    let t358 = circuit_add(t357, t357);\n    let t359 = circuit_sub(t318, t321);\n    let t360 = circuit_sub(t358, t318);\n    let t361 = circuit_sub(t360, t321);\n    let t362 = circuit_add(t355, t359); // Fp2 add coeff 0/1\n    let t363 = circuit_add(t356, t361); // Fp2 add coeff 1/1\n    let t364 = circuit_add(in7, in11); // Fp2 add coeff 0/1\n    let t365 = circuit_add(in8, in12); // Fp2 add coeff 1/1\n    let t366 = circuit_add(t212, t224); // Fp2 add coeff 0/1\n    let t367 = circuit_add(t215, t227); // Fp2 add coeff 1/1\n    let t368 = circuit_mul(t366, t364); // Fp2 mul start\n    let t369 = circuit_mul(t367, t365);\n    let t370 = circuit_sub(t368, t369); // Fp2 mul real part end\n    let t371 = circuit_mul(t366, t365);\n    let t372 = circuit_mul(t367, t364);\n    let t373 = circuit_add(t371, t372); // Fp2 mul imag part end\n    let t374 = circuit_sub(t370, t306); // Fp2 sub coeff 0/1\n    let t375 = circuit_sub(t373, t309); // Fp2 sub coeff 1/1\n    let t376 = circuit_sub(t374, t318); // Fp2 sub coeff 0/1\n    let t377 = circuit_sub(t375, t321); // Fp2 sub coeff 1/1\n    let t378 = circuit_add(t376, t312); // Fp2 add coeff 0/1\n    let t379 = circuit_add(t377, t315); // Fp2 add coeff 1/1\n    let t380 = circuit_sub(in0, t341); // Fp6 neg coeff 0/5\n    let t381 = circuit_sub(in0, t342); // Fp6 neg coeff 1/5\n    let t382 = circuit_sub(in0, t362); // Fp6 neg coeff 2/5\n    let t383 = circuit_sub(in0, t363); // Fp6 neg coeff 3/5\n    let t384 = circuit_sub(in0, t378); // Fp6 neg coeff 4/5\n    let t385 = circuit_sub(in0, t379); // Fp6 neg coeff 5/5\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (\n        t265, t266, t286, t287, t302, t303, t380, t381, t382, t383, t384, t385,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a0); // in1\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a1); // in2\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a0); // in3\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a1); // in4\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a0); // in5\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a1); // in6\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a0); // in7\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a1); // in8\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a0); // in9\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a1); // in10\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a0); // in11\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a1); // in12\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t265),\n        c0b0a1: outputs.get_output(t266),\n        c0b1a0: outputs.get_output(t286),\n        c0b1a1: outputs.get_output(t287),\n        c0b2a0: outputs.get_output(t302),\n        c0b2a1: outputs.get_output(t303),\n        c1b0a0: outputs.get_output(t380),\n        c1b0a1: outputs.get_output(t381),\n        c1b1a0: outputs.get_output(t382),\n        c1b1a1: outputs.get_output(t383),\n        c1b2a0: outputs.get_output(t384),\n        c1b2a1: outputs.get_output(t385),\n    };\n    return (res,);\n}\n#[inline(always)]\npub fn run_BLS12_381_E12T_MUL_circuit(X: E12T, Y: E12T) -> (E12T,) {\n    // INPUT stack\n    let (in0, in1, in2) = (CE::<CI<0>> {}, CE::<CI<1>> {}, CE::<CI<2>> {});\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let t0 = circuit_add(in0, in6); // Fp6 add coeff 0/5\n    let t1 = circuit_add(in1, in7); // Fp6 add coeff 1/5\n    let t2 = circuit_add(in2, in8); // Fp6 add coeff 2/5\n    let t3 = circuit_add(in3, in9); // Fp6 add coeff 3/5\n    let t4 = circuit_add(in4, in10); // Fp6 add coeff 4/5\n    let t5 = circuit_add(in5, in11); // Fp6 add coeff 5/5\n    let t6 = circuit_add(in12, in18); // Fp6 add coeff 0/5\n    let t7 = circuit_add(in13, in19); // Fp6 add coeff 1/5\n    let t8 = circuit_add(in14, in20); // Fp6 add coeff 2/5\n    let t9 = circuit_add(in15, in21); // Fp6 add coeff 3/5\n    let t10 = circuit_add(in16, in22); // Fp6 add coeff 4/5\n    let t11 = circuit_add(in17, in23); // Fp6 add coeff 5/5\n    let t12 = circuit_mul(t0, t6); // Fp2 mul start\n    let t13 = circuit_mul(t1, t7);\n    let t14 = circuit_sub(t12, t13); // Fp2 mul real part end\n    let t15 = circuit_mul(t0, t7);\n    let t16 = circuit_mul(t1, t6);\n    let t17 = circuit_add(t15, t16); // Fp2 mul imag part end\n    let t18 = circuit_mul(t2, t8); // Fp2 mul start\n    let t19 = circuit_mul(t3, t9);\n    let t20 = circuit_sub(t18, t19); // Fp2 mul real part end\n    let t21 = circuit_mul(t2, t9);\n    let t22 = circuit_mul(t3, t8);\n    let t23 = circuit_add(t21, t22); // Fp2 mul imag part end\n    let t24 = circuit_mul(t4, t10); // Fp2 mul start\n    let t25 = circuit_mul(t5, t11);\n    let t26 = circuit_sub(t24, t25); // Fp2 mul real part end\n    let t27 = circuit_mul(t4, t11);\n    let t28 = circuit_mul(t5, t10);\n    let t29 = circuit_add(t27, t28); // Fp2 mul imag part end\n    let t30 = circuit_add(t2, t4); // Fp2 add coeff 0/1\n    let t31 = circuit_add(t3, t5); // Fp2 add coeff 1/1\n    let t32 = circuit_add(t8, t10); // Fp2 add coeff 0/1\n    let t33 = circuit_add(t9, t11); // Fp2 add coeff 1/1\n    let t34 = circuit_mul(t30, t32); // Fp2 mul start\n    let t35 = circuit_mul(t31, t33);\n    let t36 = circuit_sub(t34, t35); // Fp2 mul real part end\n    let t37 = circuit_mul(t30, t33);\n    let t38 = circuit_mul(t31, t32);\n    let t39 = circuit_add(t37, t38); // Fp2 mul imag part end\n    let t40 = circuit_sub(t36, t20); // Fp2 sub coeff 0/1\n    let t41 = circuit_sub(t39, t23); // Fp2 sub coeff 1/1\n    let t42 = circuit_sub(t40, t26); // Fp2 sub coeff 0/1\n    let t43 = circuit_sub(t41, t29); // Fp2 sub coeff 1/1\n    let t44 = circuit_add(t42, t43);\n    let t45 = circuit_add(t44, t44);\n    let t46 = circuit_sub(t42, t43);\n    let t47 = circuit_sub(t45, t42);\n    let t48 = circuit_sub(t47, t43);\n    let t49 = circuit_add(t46, t14); // Fp2 add coeff 0/1\n    let t50 = circuit_add(t48, t17); // Fp2 add coeff 1/1\n    let t51 = circuit_add(t0, t2); // Fp2 add coeff 0/1\n    let t52 = circuit_add(t1, t3); // Fp2 add coeff 1/1\n    let t53 = circuit_add(t6, t8); // Fp2 add coeff 0/1\n    let t54 = circuit_add(t7, t9); // Fp2 add coeff 1/1\n    let t55 = circuit_mul(t51, t53); // Fp2 mul start\n    let t56 = circuit_mul(t52, t54);\n    let t57 = circuit_sub(t55, t56); // Fp2 mul real part end\n    let t58 = circuit_mul(t51, t54);\n    let t59 = circuit_mul(t52, t53);\n    let t60 = circuit_add(t58, t59); // Fp2 mul imag part end\n    let t61 = circuit_sub(t57, t14); // Fp2 sub coeff 0/1\n    let t62 = circuit_sub(t60, t17); // Fp2 sub coeff 1/1\n    let t63 = circuit_sub(t61, t20); // Fp2 sub coeff 0/1\n    let t64 = circuit_sub(t62, t23); // Fp2 sub coeff 1/1\n    let t65 = circuit_add(t26, t29);\n    let t66 = circuit_add(t65, t65);\n    let t67 = circuit_sub(t26, t29);\n    let t68 = circuit_sub(t66, t26);\n    let t69 = circuit_sub(t68, t29);\n    let t70 = circuit_add(t63, t67); // Fp2 add coeff 0/1\n    let t71 = circuit_add(t64, t69); // Fp2 add coeff 1/1\n    let t72 = circuit_add(t0, t4); // Fp2 add coeff 0/1\n    let t73 = circuit_add(t1, t5); // Fp2 add coeff 1/1\n    let t74 = circuit_add(t6, t10); // Fp2 add coeff 0/1\n    let t75 = circuit_add(t7, t11); // Fp2 add coeff 1/1\n    let t76 = circuit_mul(t74, t72); // Fp2 mul start\n    let t77 = circuit_mul(t75, t73);\n    let t78 = circuit_sub(t76, t77); // Fp2 mul real part end\n    let t79 = circuit_mul(t74, t73);\n    let t80 = circuit_mul(t75, t72);\n    let t81 = circuit_add(t79, t80); // Fp2 mul imag part end\n    let t82 = circuit_sub(t78, t14); // Fp2 sub coeff 0/1\n    let t83 = circuit_sub(t81, t17); // Fp2 sub coeff 1/1\n    let t84 = circuit_sub(t82, t26); // Fp2 sub coeff 0/1\n    let t85 = circuit_sub(t83, t29); // Fp2 sub coeff 1/1\n    let t86 = circuit_add(t84, t20); // Fp2 add coeff 0/1\n    let t87 = circuit_add(t85, t23); // Fp2 add coeff 1/1\n    let t88 = circuit_mul(in0, in12); // Fp2 mul start\n    let t89 = circuit_mul(in1, in13);\n    let t90 = circuit_sub(t88, t89); // Fp2 mul real part end\n    let t91 = circuit_mul(in0, in13);\n    let t92 = circuit_mul(in1, in12);\n    let t93 = circuit_add(t91, t92); // Fp2 mul imag part end\n    let t94 = circuit_mul(in2, in14); // Fp2 mul start\n    let t95 = circuit_mul(in3, in15);\n    let t96 = circuit_sub(t94, t95); // Fp2 mul real part end\n    let t97 = circuit_mul(in2, in15);\n    let t98 = circuit_mul(in3, in14);\n    let t99 = circuit_add(t97, t98); // Fp2 mul imag part end\n    let t100 = circuit_mul(in4, in16); // Fp2 mul start\n    let t101 = circuit_mul(in5, in17);\n    let t102 = circuit_sub(t100, t101); // Fp2 mul real part end\n    let t103 = circuit_mul(in4, in17);\n    let t104 = circuit_mul(in5, in16);\n    let t105 = circuit_add(t103, t104); // Fp2 mul imag part end\n    let t106 = circuit_add(in2, in4); // Fp2 add coeff 0/1\n    let t107 = circuit_add(in3, in5); // Fp2 add coeff 1/1\n    let t108 = circuit_add(in14, in16); // Fp2 add coeff 0/1\n    let t109 = circuit_add(in15, in17); // Fp2 add coeff 1/1\n    let t110 = circuit_mul(t106, t108); // Fp2 mul start\n    let t111 = circuit_mul(t107, t109);\n    let t112 = circuit_sub(t110, t111); // Fp2 mul real part end\n    let t113 = circuit_mul(t106, t109);\n    let t114 = circuit_mul(t107, t108);\n    let t115 = circuit_add(t113, t114); // Fp2 mul imag part end\n    let t116 = circuit_sub(t112, t96); // Fp2 sub coeff 0/1\n    let t117 = circuit_sub(t115, t99); // Fp2 sub coeff 1/1\n    let t118 = circuit_sub(t116, t102); // Fp2 sub coeff 0/1\n    let t119 = circuit_sub(t117, t105); // Fp2 sub coeff 1/1\n    let t120 = circuit_add(t118, t119);\n    let t121 = circuit_add(t120, t120);\n    let t122 = circuit_sub(t118, t119);\n    let t123 = circuit_sub(t121, t118);\n    let t124 = circuit_sub(t123, t119);\n    let t125 = circuit_add(t122, t90); // Fp2 add coeff 0/1\n    let t126 = circuit_add(t124, t93); // Fp2 add coeff 1/1\n    let t127 = circuit_add(in0, in2); // Fp2 add coeff 0/1\n    let t128 = circuit_add(in1, in3); // Fp2 add coeff 1/1\n    let t129 = circuit_add(in12, in14); // Fp2 add coeff 0/1\n    let t130 = circuit_add(in13, in15); // Fp2 add coeff 1/1\n    let t131 = circuit_mul(t127, t129); // Fp2 mul start\n    let t132 = circuit_mul(t128, t130);\n    let t133 = circuit_sub(t131, t132); // Fp2 mul real part end\n    let t134 = circuit_mul(t127, t130);\n    let t135 = circuit_mul(t128, t129);\n    let t136 = circuit_add(t134, t135); // Fp2 mul imag part end\n    let t137 = circuit_sub(t133, t90); // Fp2 sub coeff 0/1\n    let t138 = circuit_sub(t136, t93); // Fp2 sub coeff 1/1\n    let t139 = circuit_sub(t137, t96); // Fp2 sub coeff 0/1\n    let t140 = circuit_sub(t138, t99); // Fp2 sub coeff 1/1\n    let t141 = circuit_add(t102, t105);\n    let t142 = circuit_add(t141, t141);\n    let t143 = circuit_sub(t102, t105);\n    let t144 = circuit_sub(t142, t102);\n    let t145 = circuit_sub(t144, t105);\n    let t146 = circuit_add(t139, t143); // Fp2 add coeff 0/1\n    let t147 = circuit_add(t140, t145); // Fp2 add coeff 1/1\n    let t148 = circuit_add(in0, in4); // Fp2 add coeff 0/1\n    let t149 = circuit_add(in1, in5); // Fp2 add coeff 1/1\n    let t150 = circuit_add(in12, in16); // Fp2 add coeff 0/1\n    let t151 = circuit_add(in13, in17); // Fp2 add coeff 1/1\n    let t152 = circuit_mul(t150, t148); // Fp2 mul start\n    let t153 = circuit_mul(t151, t149);\n    let t154 = circuit_sub(t152, t153); // Fp2 mul real part end\n    let t155 = circuit_mul(t150, t149);\n    let t156 = circuit_mul(t151, t148);\n    let t157 = circuit_add(t155, t156); // Fp2 mul imag part end\n    let t158 = circuit_sub(t154, t90); // Fp2 sub coeff 0/1\n    let t159 = circuit_sub(t157, t93); // Fp2 sub coeff 1/1\n    let t160 = circuit_sub(t158, t102); // Fp2 sub coeff 0/1\n    let t161 = circuit_sub(t159, t105); // Fp2 sub coeff 1/1\n    let t162 = circuit_add(t160, t96); // Fp2 add coeff 0/1\n    let t163 = circuit_add(t161, t99); // Fp2 add coeff 1/1\n    let t164 = circuit_mul(in6, in18); // Fp2 mul start\n    let t165 = circuit_mul(in7, in19);\n    let t166 = circuit_sub(t164, t165); // Fp2 mul real part end\n    let t167 = circuit_mul(in6, in19);\n    let t168 = circuit_mul(in7, in18);\n    let t169 = circuit_add(t167, t168); // Fp2 mul imag part end\n    let t170 = circuit_mul(in8, in20); // Fp2 mul start\n    let t171 = circuit_mul(in9, in21);\n    let t172 = circuit_sub(t170, t171); // Fp2 mul real part end\n    let t173 = circuit_mul(in8, in21);\n    let t174 = circuit_mul(in9, in20);\n    let t175 = circuit_add(t173, t174); // Fp2 mul imag part end\n    let t176 = circuit_mul(in10, in22); // Fp2 mul start\n    let t177 = circuit_mul(in11, in23);\n    let t178 = circuit_sub(t176, t177); // Fp2 mul real part end\n    let t179 = circuit_mul(in10, in23);\n    let t180 = circuit_mul(in11, in22);\n    let t181 = circuit_add(t179, t180); // Fp2 mul imag part end\n    let t182 = circuit_add(in8, in10); // Fp2 add coeff 0/1\n    let t183 = circuit_add(in9, in11); // Fp2 add coeff 1/1\n    let t184 = circuit_add(in20, in22); // Fp2 add coeff 0/1\n    let t185 = circuit_add(in21, in23); // Fp2 add coeff 1/1\n    let t186 = circuit_mul(t182, t184); // Fp2 mul start\n    let t187 = circuit_mul(t183, t185);\n    let t188 = circuit_sub(t186, t187); // Fp2 mul real part end\n    let t189 = circuit_mul(t182, t185);\n    let t190 = circuit_mul(t183, t184);\n    let t191 = circuit_add(t189, t190); // Fp2 mul imag part end\n    let t192 = circuit_sub(t188, t172); // Fp2 sub coeff 0/1\n    let t193 = circuit_sub(t191, t175); // Fp2 sub coeff 1/1\n    let t194 = circuit_sub(t192, t178); // Fp2 sub coeff 0/1\n    let t195 = circuit_sub(t193, t181); // Fp2 sub coeff 1/1\n    let t196 = circuit_add(t194, t195);\n    let t197 = circuit_add(t196, t196);\n    let t198 = circuit_sub(t194, t195);\n    let t199 = circuit_sub(t197, t194);\n    let t200 = circuit_sub(t199, t195);\n    let t201 = circuit_add(t198, t166); // Fp2 add coeff 0/1\n    let t202 = circuit_add(t200, t169); // Fp2 add coeff 1/1\n    let t203 = circuit_add(in6, in8); // Fp2 add coeff 0/1\n    let t204 = circuit_add(in7, in9); // Fp2 add coeff 1/1\n    let t205 = circuit_add(in18, in20); // Fp2 add coeff 0/1\n    let t206 = circuit_add(in19, in21); // Fp2 add coeff 1/1\n    let t207 = circuit_mul(t203, t205); // Fp2 mul start\n    let t208 = circuit_mul(t204, t206);\n    let t209 = circuit_sub(t207, t208); // Fp2 mul real part end\n    let t210 = circuit_mul(t203, t206);\n    let t211 = circuit_mul(t204, t205);\n    let t212 = circuit_add(t210, t211); // Fp2 mul imag part end\n    let t213 = circuit_sub(t209, t166); // Fp2 sub coeff 0/1\n    let t214 = circuit_sub(t212, t169); // Fp2 sub coeff 1/1\n    let t215 = circuit_sub(t213, t172); // Fp2 sub coeff 0/1\n    let t216 = circuit_sub(t214, t175); // Fp2 sub coeff 1/1\n    let t217 = circuit_add(t178, t181);\n    let t218 = circuit_add(t217, t217);\n    let t219 = circuit_sub(t178, t181);\n    let t220 = circuit_sub(t218, t178);\n    let t221 = circuit_sub(t220, t181);\n    let t222 = circuit_add(t215, t219); // Fp2 add coeff 0/1\n    let t223 = circuit_add(t216, t221); // Fp2 add coeff 1/1\n    let t224 = circuit_add(in6, in10); // Fp2 add coeff 0/1\n    let t225 = circuit_add(in7, in11); // Fp2 add coeff 1/1\n    let t226 = circuit_add(in18, in22); // Fp2 add coeff 0/1\n    let t227 = circuit_add(in19, in23); // Fp2 add coeff 1/1\n    let t228 = circuit_mul(t226, t224); // Fp2 mul start\n    let t229 = circuit_mul(t227, t225);\n    let t230 = circuit_sub(t228, t229); // Fp2 mul real part end\n    let t231 = circuit_mul(t226, t225);\n    let t232 = circuit_mul(t227, t224);\n    let t233 = circuit_add(t231, t232); // Fp2 mul imag part end\n    let t234 = circuit_sub(t230, t166); // Fp2 sub coeff 0/1\n    let t235 = circuit_sub(t233, t169); // Fp2 sub coeff 1/1\n    let t236 = circuit_sub(t234, t178); // Fp2 sub coeff 0/1\n    let t237 = circuit_sub(t235, t181); // Fp2 sub coeff 1/1\n    let t238 = circuit_add(t236, t172); // Fp2 add coeff 0/1\n    let t239 = circuit_add(t237, t175); // Fp2 add coeff 1/1\n    let t240 = circuit_sub(t49, t125); // Fp6 sub coeff 0/5\n    let t241 = circuit_sub(t50, t126); // Fp6 sub coeff 1/5\n    let t242 = circuit_sub(t70, t146); // Fp6 sub coeff 2/5\n    let t243 = circuit_sub(t71, t147); // Fp6 sub coeff 3/5\n    let t244 = circuit_sub(t86, t162); // Fp6 sub coeff 4/5\n    let t245 = circuit_sub(t87, t163); // Fp6 sub coeff 5/5\n    let t246 = circuit_sub(t240, t201); // Fp6 sub coeff 0/5\n    let t247 = circuit_sub(t241, t202); // Fp6 sub coeff 1/5\n    let t248 = circuit_sub(t242, t222); // Fp6 sub coeff 2/5\n    let t249 = circuit_sub(t243, t223); // Fp6 sub coeff 3/5\n    let t250 = circuit_sub(t244, t238); // Fp6 sub coeff 4/5\n    let t251 = circuit_sub(t245, t239); // Fp6 sub coeff 5/5\n    let t252 = circuit_add(t238, t239);\n    let t253 = circuit_add(t252, t252);\n    let t254 = circuit_sub(t238, t239);\n    let t255 = circuit_sub(t253, t238);\n    let t256 = circuit_sub(t255, t239);\n    let t257 = circuit_add(t254, t125); // Fp6 add coeff 0/5\n    let t258 = circuit_add(t256, t126); // Fp6 add coeff 1/5\n    let t259 = circuit_add(t201, t146); // Fp6 add coeff 2/5\n    let t260 = circuit_add(t202, t147); // Fp6 add coeff 3/5\n    let t261 = circuit_add(t222, t162); // Fp6 add coeff 4/5\n    let t262 = circuit_add(t223, t163); // Fp6 add coeff 5/5\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (\n        t257, t258, t259, t260, t261, t262, t246, t247, t248, t249, t250, t251,\n    )\n        .new_inputs();\n    // Prefill constants:\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(X.c0b0a0); // in0\n    circuit_inputs = circuit_inputs.next_2(X.c0b0a1); // in1\n    circuit_inputs = circuit_inputs.next_2(X.c0b1a0); // in2\n    circuit_inputs = circuit_inputs.next_2(X.c0b1a1); // in3\n    circuit_inputs = circuit_inputs.next_2(X.c0b2a0); // in4\n    circuit_inputs = circuit_inputs.next_2(X.c0b2a1); // in5\n    circuit_inputs = circuit_inputs.next_2(X.c1b0a0); // in6\n    circuit_inputs = circuit_inputs.next_2(X.c1b0a1); // in7\n    circuit_inputs = circuit_inputs.next_2(X.c1b1a0); // in8\n    circuit_inputs = circuit_inputs.next_2(X.c1b1a1); // in9\n    circuit_inputs = circuit_inputs.next_2(X.c1b2a0); // in10\n    circuit_inputs = circuit_inputs.next_2(X.c1b2a1); // in11\n    circuit_inputs = circuit_inputs.next_2(Y.c0b0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(Y.c0b0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(Y.c0b1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(Y.c0b1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(Y.c0b2a0); // in16\n    circuit_inputs = circuit_inputs.next_2(Y.c0b2a1); // in17\n    circuit_inputs = circuit_inputs.next_2(Y.c1b0a0); // in18\n    circuit_inputs = circuit_inputs.next_2(Y.c1b0a1); // in19\n    circuit_inputs = circuit_inputs.next_2(Y.c1b1a0); // in20\n    circuit_inputs = circuit_inputs.next_2(Y.c1b1a1); // in21\n    circuit_inputs = circuit_inputs.next_2(Y.c1b2a0); // in22\n    circuit_inputs = circuit_inputs.next_2(Y.c1b2a1); // in23\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t257),\n        c0b0a1: outputs.get_output(t258),\n        c0b1a0: outputs.get_output(t259),\n        c0b1a1: outputs.get_output(t260),\n        c0b2a0: outputs.get_output(t261),\n        c0b2a1: outputs.get_output(t262),\n        c1b0a0: outputs.get_output(t246),\n        c1b0a1: outputs.get_output(t247),\n        c1b1a0: outputs.get_output(t248),\n        c1b1a1: outputs.get_output(t249),\n        c1b2a0: outputs.get_output(t250),\n        c1b2a1: outputs.get_output(t251),\n    };\n    return (res,);\n}\n#[inline(always)]\npub fn run_BLS12_381_TOWER_MILLER_BIT0_1P_circuit(\n    yInv_0: u384, xNegOverY_0: u384, Q_0: G2Point, M_i: E12T,\n) -> (G2Point, E12T) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x3\n    let in2 = CE::<CI<2>> {}; // 0x6\n    let in3 = CE::<CI<3>> {}; // 0x1\n\n    // INPUT stack\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8, in9) = (CE::<CI<7>> {}, CE::<CI<8>> {}, CE::<CI<9>> {});\n    let (in10, in11, in12) = (CE::<CI<10>> {}, CE::<CI<11>> {}, CE::<CI<12>> {});\n    let (in13, in14, in15) = (CE::<CI<13>> {}, CE::<CI<14>> {}, CE::<CI<15>> {});\n    let (in16, in17, in18) = (CE::<CI<16>> {}, CE::<CI<17>> {}, CE::<CI<18>> {});\n    let (in19, in20, in21) = (CE::<CI<19>> {}, CE::<CI<20>> {}, CE::<CI<21>> {});\n    let t0 = circuit_sub(in10, in16); // Fp6 sub coeff 0/5\n    let t1 = circuit_sub(in11, in17); // Fp6 sub coeff 1/5\n    let t2 = circuit_sub(in12, in18); // Fp6 sub coeff 2/5\n    let t3 = circuit_sub(in13, in19); // Fp6 sub coeff 3/5\n    let t4 = circuit_sub(in14, in20); // Fp6 sub coeff 4/5\n    let t5 = circuit_sub(in15, in21); // Fp6 sub coeff 5/5\n    let t6 = circuit_add(in20, in21);\n    let t7 = circuit_add(t6, t6);\n    let t8 = circuit_sub(in20, in21);\n    let t9 = circuit_sub(t7, in20);\n    let t10 = circuit_sub(t9, in21);\n    let t11 = circuit_sub(in0, t8); // Fp6 neg coeff 0/5\n    let t12 = circuit_sub(in0, t10); // Fp6 neg coeff 1/5\n    let t13 = circuit_sub(in0, in16); // Fp6 neg coeff 2/5\n    let t14 = circuit_sub(in0, in17); // Fp6 neg coeff 3/5\n    let t15 = circuit_sub(in0, in18); // Fp6 neg coeff 4/5\n    let t16 = circuit_sub(in0, in19); // Fp6 neg coeff 5/5\n    let t17 = circuit_add(in10, t11); // Fp6 add coeff 0/5\n    let t18 = circuit_add(in11, t12); // Fp6 add coeff 1/5\n    let t19 = circuit_add(in12, t13); // Fp6 add coeff 2/5\n    let t20 = circuit_add(in13, t14); // Fp6 add coeff 3/5\n    let t21 = circuit_add(in14, t15); // Fp6 add coeff 4/5\n    let t22 = circuit_add(in15, t16); // Fp6 add coeff 5/5\n    let t23 = circuit_mul(in10, in16); // Fp2 mul start\n    let t24 = circuit_mul(in11, in17);\n    let t25 = circuit_sub(t23, t24); // Fp2 mul real part end\n    let t26 = circuit_mul(in10, in17);\n    let t27 = circuit_mul(in11, in16);\n    let t28 = circuit_add(t26, t27); // Fp2 mul imag part end\n    let t29 = circuit_mul(in12, in18); // Fp2 mul start\n    let t30 = circuit_mul(in13, in19);\n    let t31 = circuit_sub(t29, t30); // Fp2 mul real part end\n    let t32 = circuit_mul(in12, in19);\n    let t33 = circuit_mul(in13, in18);\n    let t34 = circuit_add(t32, t33); // Fp2 mul imag part end\n    let t35 = circuit_mul(in14, in20); // Fp2 mul start\n    let t36 = circuit_mul(in15, in21);\n    let t37 = circuit_sub(t35, t36); // Fp2 mul real part end\n    let t38 = circuit_mul(in14, in21);\n    let t39 = circuit_mul(in15, in20);\n    let t40 = circuit_add(t38, t39); // Fp2 mul imag part end\n    let t41 = circuit_add(in12, in14); // Fp2 add coeff 0/1\n    let t42 = circuit_add(in13, in15); // Fp2 add coeff 1/1\n    let t43 = circuit_add(in18, in20); // Fp2 add coeff 0/1\n    let t44 = circuit_add(in19, in21); // Fp2 add coeff 1/1\n    let t45 = circuit_mul(t41, t43); // Fp2 mul start\n    let t46 = circuit_mul(t42, t44);\n    let t47 = circuit_sub(t45, t46); // Fp2 mul real part end\n    let t48 = circuit_mul(t41, t44);\n    let t49 = circuit_mul(t42, t43);\n    let t50 = circuit_add(t48, t49); // Fp2 mul imag part end\n    let t51 = circuit_sub(t47, t31); // Fp2 sub coeff 0/1\n    let t52 = circuit_sub(t50, t34); // Fp2 sub coeff 1/1\n    let t53 = circuit_sub(t51, t37); // Fp2 sub coeff 0/1\n    let t54 = circuit_sub(t52, t40); // Fp2 sub coeff 1/1\n    let t55 = circuit_add(t53, t54);\n    let t56 = circuit_add(t55, t55);\n    let t57 = circuit_sub(t53, t54);\n    let t58 = circuit_sub(t56, t53);\n    let t59 = circuit_sub(t58, t54);\n    let t60 = circuit_add(t57, t25); // Fp2 add coeff 0/1\n    let t61 = circuit_add(t59, t28); // Fp2 add coeff 1/1\n    let t62 = circuit_add(in10, in12); // Fp2 add coeff 0/1\n    let t63 = circuit_add(in11, in13); // Fp2 add coeff 1/1\n    let t64 = circuit_add(in16, in18); // Fp2 add coeff 0/1\n    let t65 = circuit_add(in17, in19); // Fp2 add coeff 1/1\n    let t66 = circuit_mul(t62, t64); // Fp2 mul start\n    let t67 = circuit_mul(t63, t65);\n    let t68 = circuit_sub(t66, t67); // Fp2 mul real part end\n    let t69 = circuit_mul(t62, t65);\n    let t70 = circuit_mul(t63, t64);\n    let t71 = circuit_add(t69, t70); // Fp2 mul imag part end\n    let t72 = circuit_sub(t68, t25); // Fp2 sub coeff 0/1\n    let t73 = circuit_sub(t71, t28); // Fp2 sub coeff 1/1\n    let t74 = circuit_sub(t72, t31); // Fp2 sub coeff 0/1\n    let t75 = circuit_sub(t73, t34); // Fp2 sub coeff 1/1\n    let t76 = circuit_add(t37, t40);\n    let t77 = circuit_add(t76, t76);\n    let t78 = circuit_sub(t37, t40);\n    let t79 = circuit_sub(t77, t37);\n    let t80 = circuit_sub(t79, t40);\n    let t81 = circuit_add(t74, t78); // Fp2 add coeff 0/1\n    let t82 = circuit_add(t75, t80); // Fp2 add coeff 1/1\n    let t83 = circuit_add(in10, in14); // Fp2 add coeff 0/1\n    let t84 = circuit_add(in11, in15); // Fp2 add coeff 1/1\n    let t85 = circuit_add(in16, in20); // Fp2 add coeff 0/1\n    let t86 = circuit_add(in17, in21); // Fp2 add coeff 1/1\n    let t87 = circuit_mul(t85, t83); // Fp2 mul start\n    let t88 = circuit_mul(t86, t84);\n    let t89 = circuit_sub(t87, t88); // Fp2 mul real part end\n    let t90 = circuit_mul(t85, t84);\n    let t91 = circuit_mul(t86, t83);\n    let t92 = circuit_add(t90, t91); // Fp2 mul imag part end\n    let t93 = circuit_sub(t89, t25); // Fp2 sub coeff 0/1\n    let t94 = circuit_sub(t92, t28); // Fp2 sub coeff 1/1\n    let t95 = circuit_sub(t93, t37); // Fp2 sub coeff 0/1\n    let t96 = circuit_sub(t94, t40); // Fp2 sub coeff 1/1\n    let t97 = circuit_add(t95, t31); // Fp2 add coeff 0/1\n    let t98 = circuit_add(t96, t34); // Fp2 add coeff 1/1\n    let t99 = circuit_mul(t0, t17); // Fp2 mul start\n    let t100 = circuit_mul(t1, t18);\n    let t101 = circuit_sub(t99, t100); // Fp2 mul real part end\n    let t102 = circuit_mul(t0, t18);\n    let t103 = circuit_mul(t1, t17);\n    let t104 = circuit_add(t102, t103); // Fp2 mul imag part end\n    let t105 = circuit_mul(t2, t19); // Fp2 mul start\n    let t106 = circuit_mul(t3, t20);\n    let t107 = circuit_sub(t105, t106); // Fp2 mul real part end\n    let t108 = circuit_mul(t2, t20);\n    let t109 = circuit_mul(t3, t19);\n    let t110 = circuit_add(t108, t109); // Fp2 mul imag part end\n    let t111 = circuit_mul(t4, t21); // Fp2 mul start\n    let t112 = circuit_mul(t5, t22);\n    let t113 = circuit_sub(t111, t112); // Fp2 mul real part end\n    let t114 = circuit_mul(t4, t22);\n    let t115 = circuit_mul(t5, t21);\n    let t116 = circuit_add(t114, t115); // Fp2 mul imag part end\n    let t117 = circuit_add(t2, t4); // Fp2 add coeff 0/1\n    let t118 = circuit_add(t3, t5); // Fp2 add coeff 1/1\n    let t119 = circuit_add(t19, t21); // Fp2 add coeff 0/1\n    let t120 = circuit_add(t20, t22); // Fp2 add coeff 1/1\n    let t121 = circuit_mul(t117, t119); // Fp2 mul start\n    let t122 = circuit_mul(t118, t120);\n    let t123 = circuit_sub(t121, t122); // Fp2 mul real part end\n    let t124 = circuit_mul(t117, t120);\n    let t125 = circuit_mul(t118, t119);\n    let t126 = circuit_add(t124, t125); // Fp2 mul imag part end\n    let t127 = circuit_sub(t123, t107); // Fp2 sub coeff 0/1\n    let t128 = circuit_sub(t126, t110); // Fp2 sub coeff 1/1\n    let t129 = circuit_sub(t127, t113); // Fp2 sub coeff 0/1\n    let t130 = circuit_sub(t128, t116); // Fp2 sub coeff 1/1\n    let t131 = circuit_add(t129, t130);\n    let t132 = circuit_add(t131, t131);\n    let t133 = circuit_sub(t129, t130);\n    let t134 = circuit_sub(t132, t129);\n    let t135 = circuit_sub(t134, t130);\n    let t136 = circuit_add(t133, t101); // Fp2 add coeff 0/1\n    let t137 = circuit_add(t135, t104); // Fp2 add coeff 1/1\n    let t138 = circuit_add(t0, t2); // Fp2 add coeff 0/1\n    let t139 = circuit_add(t1, t3); // Fp2 add coeff 1/1\n    let t140 = circuit_add(t17, t19); // Fp2 add coeff 0/1\n    let t141 = circuit_add(t18, t20); // Fp2 add coeff 1/1\n    let t142 = circuit_mul(t138, t140); // Fp2 mul start\n    let t143 = circuit_mul(t139, t141);\n    let t144 = circuit_sub(t142, t143); // Fp2 mul real part end\n    let t145 = circuit_mul(t138, t141);\n    let t146 = circuit_mul(t139, t140);\n    let t147 = circuit_add(t145, t146); // Fp2 mul imag part end\n    let t148 = circuit_sub(t144, t101); // Fp2 sub coeff 0/1\n    let t149 = circuit_sub(t147, t104); // Fp2 sub coeff 1/1\n    let t150 = circuit_sub(t148, t107); // Fp2 sub coeff 0/1\n    let t151 = circuit_sub(t149, t110); // Fp2 sub coeff 1/1\n    let t152 = circuit_add(t113, t116);\n    let t153 = circuit_add(t152, t152);\n    let t154 = circuit_sub(t113, t116);\n    let t155 = circuit_sub(t153, t113);\n    let t156 = circuit_sub(t155, t116);\n    let t157 = circuit_add(t150, t154); // Fp2 add coeff 0/1\n    let t158 = circuit_add(t151, t156); // Fp2 add coeff 1/1\n    let t159 = circuit_add(t0, t4); // Fp2 add coeff 0/1\n    let t160 = circuit_add(t1, t5); // Fp2 add coeff 1/1\n    let t161 = circuit_add(t17, t21); // Fp2 add coeff 0/1\n    let t162 = circuit_add(t18, t22); // Fp2 add coeff 1/1\n    let t163 = circuit_mul(t161, t159); // Fp2 mul start\n    let t164 = circuit_mul(t162, t160);\n    let t165 = circuit_sub(t163, t164); // Fp2 mul real part end\n    let t166 = circuit_mul(t161, t160);\n    let t167 = circuit_mul(t162, t159);\n    let t168 = circuit_add(t166, t167); // Fp2 mul imag part end\n    let t169 = circuit_sub(t165, t101); // Fp2 sub coeff 0/1\n    let t170 = circuit_sub(t168, t104); // Fp2 sub coeff 1/1\n    let t171 = circuit_sub(t169, t113); // Fp2 sub coeff 0/1\n    let t172 = circuit_sub(t170, t116); // Fp2 sub coeff 1/1\n    let t173 = circuit_add(t171, t107); // Fp2 add coeff 0/1\n    let t174 = circuit_add(t172, t110); // Fp2 add coeff 1/1\n    let t175 = circuit_add(t136, t60); // Fp6 add coeff 0/5\n    let t176 = circuit_add(t137, t61); // Fp6 add coeff 1/5\n    let t177 = circuit_add(t157, t81); // Fp6 add coeff 2/5\n    let t178 = circuit_add(t158, t82); // Fp6 add coeff 3/5\n    let t179 = circuit_add(t173, t97); // Fp6 add coeff 4/5\n    let t180 = circuit_add(t174, t98); // Fp6 add coeff 5/5\n    let t181 = circuit_add(t60, t60); // Fp6 add coeff 0/5\n    let t182 = circuit_add(t61, t61); // Fp6 add coeff 1/5\n    let t183 = circuit_add(t81, t81); // Fp6 add coeff 2/5\n    let t184 = circuit_add(t82, t82); // Fp6 add coeff 3/5\n    let t185 = circuit_add(t97, t97); // Fp6 add coeff 4/5\n    let t186 = circuit_add(t98, t98); // Fp6 add coeff 5/5\n    let t187 = circuit_add(t97, t98);\n    let t188 = circuit_add(t187, t187);\n    let t189 = circuit_sub(t97, t98);\n    let t190 = circuit_sub(t188, t97);\n    let t191 = circuit_sub(t190, t98);\n    let t192 = circuit_add(t175, t189); // Fp6 add coeff 0/5\n    let t193 = circuit_add(t176, t191); // Fp6 add coeff 1/5\n    let t194 = circuit_add(t177, t60); // Fp6 add coeff 2/5\n    let t195 = circuit_add(t178, t61); // Fp6 add coeff 3/5\n    let t196 = circuit_add(t179, t81); // Fp6 add coeff 4/5\n    let t197 = circuit_add(t180, t82); // Fp6 add coeff 5/5\n    let t198 = circuit_add(in6, in7); // Doubling slope numerator start\n    let t199 = circuit_sub(in6, in7);\n    let t200 = circuit_mul(t198, t199);\n    let t201 = circuit_mul(in6, in7);\n    let t202 = circuit_mul(t200, in1);\n    let t203 = circuit_mul(t201, in2); // Doubling slope numerator end\n    let t204 = circuit_add(in8, in8); // Fp2 add coeff 0/1\n    let t205 = circuit_add(in9, in9); // Fp2 add coeff 1/1\n    let t206 = circuit_mul(t204, t204); // Fp2 Inv start\n    let t207 = circuit_mul(t205, t205);\n    let t208 = circuit_add(t206, t207);\n    let t209 = circuit_inverse(t208);\n    let t210 = circuit_mul(t204, t209); // Fp2 Inv real part end\n    let t211 = circuit_mul(t205, t209);\n    let t212 = circuit_sub(in0, t211); // Fp2 Inv imag part end\n    let t213 = circuit_mul(t202, t210); // Fp2 mul start\n    let t214 = circuit_mul(t203, t212);\n    let t215 = circuit_sub(t213, t214); // Fp2 mul real part end\n    let t216 = circuit_mul(t202, t212);\n    let t217 = circuit_mul(t203, t210);\n    let t218 = circuit_add(t216, t217); // Fp2 mul imag part end\n    let t219 = circuit_add(t215, t218);\n    let t220 = circuit_sub(t215, t218);\n    let t221 = circuit_mul(t219, t220);\n    let t222 = circuit_mul(t215, t218);\n    let t223 = circuit_add(t222, t222);\n    let t224 = circuit_add(in6, in6); // Fp2 add coeff 0/1\n    let t225 = circuit_add(in7, in7); // Fp2 add coeff 1/1\n    let t226 = circuit_sub(t221, t224); // Fp2 sub coeff 0/1\n    let t227 = circuit_sub(t223, t225); // Fp2 sub coeff 1/1\n    let t228 = circuit_sub(in6, t226); // Fp2 sub coeff 0/1\n    let t229 = circuit_sub(in7, t227); // Fp2 sub coeff 1/1\n    let t230 = circuit_mul(t215, t228); // Fp2 mul start\n    let t231 = circuit_mul(t218, t229);\n    let t232 = circuit_sub(t230, t231); // Fp2 mul real part end\n    let t233 = circuit_mul(t215, t229);\n    let t234 = circuit_mul(t218, t228);\n    let t235 = circuit_add(t233, t234); // Fp2 mul imag part end\n    let t236 = circuit_sub(t232, in8); // Fp2 sub coeff 0/1\n    let t237 = circuit_sub(t235, in9); // Fp2 sub coeff 1/1\n    let t238 = circuit_mul(t215, in6); // Fp2 mul start\n    let t239 = circuit_mul(t218, in7);\n    let t240 = circuit_sub(t238, t239); // Fp2 mul real part end\n    let t241 = circuit_mul(t215, in7);\n    let t242 = circuit_mul(t218, in6);\n    let t243 = circuit_add(t241, t242); // Fp2 mul imag part end\n    let t244 = circuit_sub(t240, in8); // Fp2 sub coeff 0/1\n    let t245 = circuit_sub(t243, in9); // Fp2 sub coeff 1/1\n    let t246 = circuit_mul(t244, in4);\n    let t247 = circuit_mul(t245, in4);\n    let t248 = circuit_mul(t215, in5);\n    let t249 = circuit_mul(t218, in5);\n    let t250 = circuit_mul(t192, t246); // Fp2 mul start\n    let t251 = circuit_mul(t193, t247);\n    let t252 = circuit_sub(t250, t251); // Fp2 mul real part end\n    let t253 = circuit_mul(t192, t247);\n    let t254 = circuit_mul(t193, t246);\n    let t255 = circuit_add(t253, t254); // Fp2 mul imag part end\n    let t256 = circuit_mul(t194, t248); // Fp2 mul start\n    let t257 = circuit_mul(t195, t249);\n    let t258 = circuit_sub(t256, t257); // Fp2 mul real part end\n    let t259 = circuit_mul(t194, t249);\n    let t260 = circuit_mul(t195, t248);\n    let t261 = circuit_add(t259, t260); // Fp2 mul imag part end\n    let t262 = circuit_add(t194, t196); // Fp2 add coeff 0/1\n    let t263 = circuit_add(t195, t197); // Fp2 add coeff 1/1\n    let t264 = circuit_mul(t248, t262); // Fp2 mul start\n    let t265 = circuit_mul(t249, t263);\n    let t266 = circuit_sub(t264, t265); // Fp2 mul real part end\n    let t267 = circuit_mul(t248, t263);\n    let t268 = circuit_mul(t249, t262);\n    let t269 = circuit_add(t267, t268); // Fp2 mul imag part end\n    let t270 = circuit_sub(t266, t258); // Fp2 sub coeff 0/1\n    let t271 = circuit_sub(t269, t261); // Fp2 sub coeff 1/1\n    let t272 = circuit_add(t270, t271);\n    let t273 = circuit_add(t272, t272);\n    let t274 = circuit_sub(t270, t271);\n    let t275 = circuit_sub(t273, t270);\n    let t276 = circuit_sub(t275, t271);\n    let t277 = circuit_add(t274, t252); // Fp2 add coeff 0/1\n    let t278 = circuit_add(t276, t255); // Fp2 add coeff 1/1\n    let t279 = circuit_add(t192, t196); // Fp2 add coeff 0/1\n    let t280 = circuit_add(t193, t197); // Fp2 add coeff 1/1\n    let t281 = circuit_mul(t246, t279); // Fp2 mul start\n    let t282 = circuit_mul(t247, t280);\n    let t283 = circuit_sub(t281, t282); // Fp2 mul real part end\n    let t284 = circuit_mul(t246, t280);\n    let t285 = circuit_mul(t247, t279);\n    let t286 = circuit_add(t284, t285); // Fp2 mul imag part end\n    let t287 = circuit_sub(t283, t252); // Fp2 sub coeff 0/1\n    let t288 = circuit_sub(t286, t255); // Fp2 sub coeff 1/1\n    let t289 = circuit_add(t287, t258); // Fp2 add coeff 0/1\n    let t290 = circuit_add(t288, t261); // Fp2 add coeff 1/1\n    let t291 = circuit_add(t246, t248); // Fp2 add coeff 0/1\n    let t292 = circuit_add(t247, t249); // Fp2 add coeff 1/1\n    let t293 = circuit_add(t192, t194); // Fp2 add coeff 0/1\n    let t294 = circuit_add(t193, t195); // Fp2 add coeff 1/1\n    let t295 = circuit_mul(t291, t293); // Fp2 mul start\n    let t296 = circuit_mul(t292, t294);\n    let t297 = circuit_sub(t295, t296); // Fp2 mul real part end\n    let t298 = circuit_mul(t291, t294);\n    let t299 = circuit_mul(t292, t293);\n    let t300 = circuit_add(t298, t299); // Fp2 mul imag part end\n    let t301 = circuit_sub(t297, t252); // Fp2 sub coeff 0/1\n    let t302 = circuit_sub(t300, t255); // Fp2 sub coeff 1/1\n    let t303 = circuit_sub(t301, t258); // Fp2 sub coeff 0/1\n    let t304 = circuit_sub(t302, t261); // Fp2 sub coeff 1/1\n    let t305 = circuit_add(t185, t186);\n    let t306 = circuit_add(t305, t305);\n    let t307 = circuit_sub(t185, t186);\n    let t308 = circuit_sub(t306, t185);\n    let t309 = circuit_sub(t308, t186);\n    let t310 = circuit_add(in3, t248);\n    let t311 = circuit_add(t181, t192); // Fp6 add coeff 0/5\n    let t312 = circuit_add(t182, t193); // Fp6 add coeff 1/5\n    let t313 = circuit_add(t183, t194); // Fp6 add coeff 2/5\n    let t314 = circuit_add(t184, t195); // Fp6 add coeff 3/5\n    let t315 = circuit_add(t185, t196); // Fp6 add coeff 4/5\n    let t316 = circuit_add(t186, t197); // Fp6 add coeff 5/5\n    let t317 = circuit_mul(t311, t246); // Fp2 mul start\n    let t318 = circuit_mul(t312, t247);\n    let t319 = circuit_sub(t317, t318); // Fp2 mul real part end\n    let t320 = circuit_mul(t311, t247);\n    let t321 = circuit_mul(t312, t246);\n    let t322 = circuit_add(t320, t321); // Fp2 mul imag part end\n    let t323 = circuit_mul(t313, t310); // Fp2 mul start\n    let t324 = circuit_mul(t314, t249);\n    let t325 = circuit_sub(t323, t324); // Fp2 mul real part end\n    let t326 = circuit_mul(t313, t249);\n    let t327 = circuit_mul(t314, t310);\n    let t328 = circuit_add(t326, t327); // Fp2 mul imag part end\n    let t329 = circuit_add(t313, t315); // Fp2 add coeff 0/1\n    let t330 = circuit_add(t314, t316); // Fp2 add coeff 1/1\n    let t331 = circuit_mul(t310, t329); // Fp2 mul start\n    let t332 = circuit_mul(t249, t330);\n    let t333 = circuit_sub(t331, t332); // Fp2 mul real part end\n    let t334 = circuit_mul(t310, t330);\n    let t335 = circuit_mul(t249, t329);\n    let t336 = circuit_add(t334, t335); // Fp2 mul imag part end\n    let t337 = circuit_sub(t333, t325); // Fp2 sub coeff 0/1\n    let t338 = circuit_sub(t336, t328); // Fp2 sub coeff 1/1\n    let t339 = circuit_add(t337, t338);\n    let t340 = circuit_add(t339, t339);\n    let t341 = circuit_sub(t337, t338);\n    let t342 = circuit_sub(t340, t337);\n    let t343 = circuit_sub(t342, t338);\n    let t344 = circuit_add(t341, t319); // Fp2 add coeff 0/1\n    let t345 = circuit_add(t343, t322); // Fp2 add coeff 1/1\n    let t346 = circuit_add(t311, t315); // Fp2 add coeff 0/1\n    let t347 = circuit_add(t312, t316); // Fp2 add coeff 1/1\n    let t348 = circuit_mul(t246, t346); // Fp2 mul start\n    let t349 = circuit_mul(t247, t347);\n    let t350 = circuit_sub(t348, t349); // Fp2 mul real part end\n    let t351 = circuit_mul(t246, t347);\n    let t352 = circuit_mul(t247, t346);\n    let t353 = circuit_add(t351, t352); // Fp2 mul imag part end\n    let t354 = circuit_sub(t350, t319); // Fp2 sub coeff 0/1\n    let t355 = circuit_sub(t353, t322); // Fp2 sub coeff 1/1\n    let t356 = circuit_add(t354, t325); // Fp2 add coeff 0/1\n    let t357 = circuit_add(t355, t328); // Fp2 add coeff 1/1\n    let t358 = circuit_add(t246, t310); // Fp2 add coeff 0/1\n    let t359 = circuit_add(t247, t249); // Fp2 add coeff 1/1\n    let t360 = circuit_add(t311, t313); // Fp2 add coeff 0/1\n    let t361 = circuit_add(t312, t314); // Fp2 add coeff 1/1\n    let t362 = circuit_mul(t358, t360); // Fp2 mul start\n    let t363 = circuit_mul(t359, t361);\n    let t364 = circuit_sub(t362, t363); // Fp2 mul real part end\n    let t365 = circuit_mul(t358, t361);\n    let t366 = circuit_mul(t359, t360);\n    let t367 = circuit_add(t365, t366); // Fp2 mul imag part end\n    let t368 = circuit_sub(t364, t319); // Fp2 sub coeff 0/1\n    let t369 = circuit_sub(t367, t322); // Fp2 sub coeff 1/1\n    let t370 = circuit_sub(t368, t325); // Fp2 sub coeff 0/1\n    let t371 = circuit_sub(t369, t328); // Fp2 sub coeff 1/1\n    let t372 = circuit_sub(t344, t277); // Fp6 sub coeff 0/5\n    let t373 = circuit_sub(t345, t278); // Fp6 sub coeff 1/5\n    let t374 = circuit_sub(t370, t303); // Fp6 sub coeff 2/5\n    let t375 = circuit_sub(t371, t304); // Fp6 sub coeff 3/5\n    let t376 = circuit_sub(t356, t289); // Fp6 sub coeff 4/5\n    let t377 = circuit_sub(t357, t290); // Fp6 sub coeff 5/5\n    let t378 = circuit_sub(t372, t307); // Fp6 sub coeff 0/5\n    let t379 = circuit_sub(t373, t309); // Fp6 sub coeff 1/5\n    let t380 = circuit_sub(t374, t181); // Fp6 sub coeff 2/5\n    let t381 = circuit_sub(t375, t182); // Fp6 sub coeff 3/5\n    let t382 = circuit_sub(t376, t183); // Fp6 sub coeff 4/5\n    let t383 = circuit_sub(t377, t184); // Fp6 sub coeff 5/5\n    let t384 = circuit_add(t183, t184);\n    let t385 = circuit_add(t384, t384);\n    let t386 = circuit_sub(t183, t184);\n    let t387 = circuit_sub(t385, t183);\n    let t388 = circuit_sub(t387, t184);\n    let t389 = circuit_add(t386, t277); // Fp6 add coeff 0/5\n    let t390 = circuit_add(t388, t278); // Fp6 add coeff 1/5\n    let t391 = circuit_add(t307, t303); // Fp6 add coeff 2/5\n    let t392 = circuit_add(t309, t304); // Fp6 add coeff 3/5\n    let t393 = circuit_add(t181, t289); // Fp6 add coeff 4/5\n    let t394 = circuit_add(t182, t290); // Fp6 add coeff 5/5\n    let t395 = circuit_add(t226, t227);\n    let t396 = circuit_add(t395, t236);\n    let t397 = circuit_add(t396, t237);\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (\n        t397, t389, t390, t391, t392, t393, t394, t378, t379, t380, t381, t382, t383,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x6, 0x0, 0x0, 0x0]); // in2\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in3\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in4\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in5\n    circuit_inputs = circuit_inputs.next_2(Q_0.x0); // in6\n    circuit_inputs = circuit_inputs.next_2(Q_0.x1); // in7\n    circuit_inputs = circuit_inputs.next_2(Q_0.y0); // in8\n    circuit_inputs = circuit_inputs.next_2(Q_0.y1); // in9\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b0a0); // in10\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b0a1); // in11\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b1a0); // in12\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b1a1); // in13\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b2a0); // in14\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b2a1); // in15\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b0a0); // in16\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b0a1); // in17\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b1a0); // in18\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b1a1); // in19\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b2a0); // in20\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b2a1); // in21\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t226),\n        x1: outputs.get_output(t227),\n        y0: outputs.get_output(t236),\n        y1: outputs.get_output(t237),\n    };\n    let Mi_plus_one: E12T = E12T {\n        c0b0a0: outputs.get_output(t389),\n        c0b0a1: outputs.get_output(t390),\n        c0b1a0: outputs.get_output(t391),\n        c0b1a1: outputs.get_output(t392),\n        c0b2a0: outputs.get_output(t393),\n        c0b2a1: outputs.get_output(t394),\n        c1b0a0: outputs.get_output(t378),\n        c1b0a1: outputs.get_output(t379),\n        c1b1a0: outputs.get_output(t380),\n        c1b1a1: outputs.get_output(t381),\n        c1b2a0: outputs.get_output(t382),\n        c1b2a1: outputs.get_output(t383),\n    };\n    return (Q0, Mi_plus_one);\n}\n#[inline(always)]\npub fn run_BLS12_381_TOWER_MILLER_BIT1_1P_circuit(\n    yInv_0: u384, xNegOverY_0: u384, Q_0: G2Point, Q_or_Q_neg_0: G2Point, M_i: E12T,\n) -> (G2Point, E12T) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x1\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let in23 = CE::<CI<23>> {};\n    let t0 = circuit_sub(in12, in18); // Fp6 sub coeff 0/5\n    let t1 = circuit_sub(in13, in19); // Fp6 sub coeff 1/5\n    let t2 = circuit_sub(in14, in20); // Fp6 sub coeff 2/5\n    let t3 = circuit_sub(in15, in21); // Fp6 sub coeff 3/5\n    let t4 = circuit_sub(in16, in22); // Fp6 sub coeff 4/5\n    let t5 = circuit_sub(in17, in23); // Fp6 sub coeff 5/5\n    let t6 = circuit_add(in22, in23);\n    let t7 = circuit_add(t6, t6);\n    let t8 = circuit_sub(in22, in23);\n    let t9 = circuit_sub(t7, in22);\n    let t10 = circuit_sub(t9, in23);\n    let t11 = circuit_sub(in0, t8); // Fp6 neg coeff 0/5\n    let t12 = circuit_sub(in0, t10); // Fp6 neg coeff 1/5\n    let t13 = circuit_sub(in0, in18); // Fp6 neg coeff 2/5\n    let t14 = circuit_sub(in0, in19); // Fp6 neg coeff 3/5\n    let t15 = circuit_sub(in0, in20); // Fp6 neg coeff 4/5\n    let t16 = circuit_sub(in0, in21); // Fp6 neg coeff 5/5\n    let t17 = circuit_add(in12, t11); // Fp6 add coeff 0/5\n    let t18 = circuit_add(in13, t12); // Fp6 add coeff 1/5\n    let t19 = circuit_add(in14, t13); // Fp6 add coeff 2/5\n    let t20 = circuit_add(in15, t14); // Fp6 add coeff 3/5\n    let t21 = circuit_add(in16, t15); // Fp6 add coeff 4/5\n    let t22 = circuit_add(in17, t16); // Fp6 add coeff 5/5\n    let t23 = circuit_mul(in12, in18); // Fp2 mul start\n    let t24 = circuit_mul(in13, in19);\n    let t25 = circuit_sub(t23, t24); // Fp2 mul real part end\n    let t26 = circuit_mul(in12, in19);\n    let t27 = circuit_mul(in13, in18);\n    let t28 = circuit_add(t26, t27); // Fp2 mul imag part end\n    let t29 = circuit_mul(in14, in20); // Fp2 mul start\n    let t30 = circuit_mul(in15, in21);\n    let t31 = circuit_sub(t29, t30); // Fp2 mul real part end\n    let t32 = circuit_mul(in14, in21);\n    let t33 = circuit_mul(in15, in20);\n    let t34 = circuit_add(t32, t33); // Fp2 mul imag part end\n    let t35 = circuit_mul(in16, in22); // Fp2 mul start\n    let t36 = circuit_mul(in17, in23);\n    let t37 = circuit_sub(t35, t36); // Fp2 mul real part end\n    let t38 = circuit_mul(in16, in23);\n    let t39 = circuit_mul(in17, in22);\n    let t40 = circuit_add(t38, t39); // Fp2 mul imag part end\n    let t41 = circuit_add(in14, in16); // Fp2 add coeff 0/1\n    let t42 = circuit_add(in15, in17); // Fp2 add coeff 1/1\n    let t43 = circuit_add(in20, in22); // Fp2 add coeff 0/1\n    let t44 = circuit_add(in21, in23); // Fp2 add coeff 1/1\n    let t45 = circuit_mul(t41, t43); // Fp2 mul start\n    let t46 = circuit_mul(t42, t44);\n    let t47 = circuit_sub(t45, t46); // Fp2 mul real part end\n    let t48 = circuit_mul(t41, t44);\n    let t49 = circuit_mul(t42, t43);\n    let t50 = circuit_add(t48, t49); // Fp2 mul imag part end\n    let t51 = circuit_sub(t47, t31); // Fp2 sub coeff 0/1\n    let t52 = circuit_sub(t50, t34); // Fp2 sub coeff 1/1\n    let t53 = circuit_sub(t51, t37); // Fp2 sub coeff 0/1\n    let t54 = circuit_sub(t52, t40); // Fp2 sub coeff 1/1\n    let t55 = circuit_add(t53, t54);\n    let t56 = circuit_add(t55, t55);\n    let t57 = circuit_sub(t53, t54);\n    let t58 = circuit_sub(t56, t53);\n    let t59 = circuit_sub(t58, t54);\n    let t60 = circuit_add(t57, t25); // Fp2 add coeff 0/1\n    let t61 = circuit_add(t59, t28); // Fp2 add coeff 1/1\n    let t62 = circuit_add(in12, in14); // Fp2 add coeff 0/1\n    let t63 = circuit_add(in13, in15); // Fp2 add coeff 1/1\n    let t64 = circuit_add(in18, in20); // Fp2 add coeff 0/1\n    let t65 = circuit_add(in19, in21); // Fp2 add coeff 1/1\n    let t66 = circuit_mul(t62, t64); // Fp2 mul start\n    let t67 = circuit_mul(t63, t65);\n    let t68 = circuit_sub(t66, t67); // Fp2 mul real part end\n    let t69 = circuit_mul(t62, t65);\n    let t70 = circuit_mul(t63, t64);\n    let t71 = circuit_add(t69, t70); // Fp2 mul imag part end\n    let t72 = circuit_sub(t68, t25); // Fp2 sub coeff 0/1\n    let t73 = circuit_sub(t71, t28); // Fp2 sub coeff 1/1\n    let t74 = circuit_sub(t72, t31); // Fp2 sub coeff 0/1\n    let t75 = circuit_sub(t73, t34); // Fp2 sub coeff 1/1\n    let t76 = circuit_add(t37, t40);\n    let t77 = circuit_add(t76, t76);\n    let t78 = circuit_sub(t37, t40);\n    let t79 = circuit_sub(t77, t37);\n    let t80 = circuit_sub(t79, t40);\n    let t81 = circuit_add(t74, t78); // Fp2 add coeff 0/1\n    let t82 = circuit_add(t75, t80); // Fp2 add coeff 1/1\n    let t83 = circuit_add(in12, in16); // Fp2 add coeff 0/1\n    let t84 = circuit_add(in13, in17); // Fp2 add coeff 1/1\n    let t85 = circuit_add(in18, in22); // Fp2 add coeff 0/1\n    let t86 = circuit_add(in19, in23); // Fp2 add coeff 1/1\n    let t87 = circuit_mul(t85, t83); // Fp2 mul start\n    let t88 = circuit_mul(t86, t84);\n    let t89 = circuit_sub(t87, t88); // Fp2 mul real part end\n    let t90 = circuit_mul(t85, t84);\n    let t91 = circuit_mul(t86, t83);\n    let t92 = circuit_add(t90, t91); // Fp2 mul imag part end\n    let t93 = circuit_sub(t89, t25); // Fp2 sub coeff 0/1\n    let t94 = circuit_sub(t92, t28); // Fp2 sub coeff 1/1\n    let t95 = circuit_sub(t93, t37); // Fp2 sub coeff 0/1\n    let t96 = circuit_sub(t94, t40); // Fp2 sub coeff 1/1\n    let t97 = circuit_add(t95, t31); // Fp2 add coeff 0/1\n    let t98 = circuit_add(t96, t34); // Fp2 add coeff 1/1\n    let t99 = circuit_mul(t0, t17); // Fp2 mul start\n    let t100 = circuit_mul(t1, t18);\n    let t101 = circuit_sub(t99, t100); // Fp2 mul real part end\n    let t102 = circuit_mul(t0, t18);\n    let t103 = circuit_mul(t1, t17);\n    let t104 = circuit_add(t102, t103); // Fp2 mul imag part end\n    let t105 = circuit_mul(t2, t19); // Fp2 mul start\n    let t106 = circuit_mul(t3, t20);\n    let t107 = circuit_sub(t105, t106); // Fp2 mul real part end\n    let t108 = circuit_mul(t2, t20);\n    let t109 = circuit_mul(t3, t19);\n    let t110 = circuit_add(t108, t109); // Fp2 mul imag part end\n    let t111 = circuit_mul(t4, t21); // Fp2 mul start\n    let t112 = circuit_mul(t5, t22);\n    let t113 = circuit_sub(t111, t112); // Fp2 mul real part end\n    let t114 = circuit_mul(t4, t22);\n    let t115 = circuit_mul(t5, t21);\n    let t116 = circuit_add(t114, t115); // Fp2 mul imag part end\n    let t117 = circuit_add(t2, t4); // Fp2 add coeff 0/1\n    let t118 = circuit_add(t3, t5); // Fp2 add coeff 1/1\n    let t119 = circuit_add(t19, t21); // Fp2 add coeff 0/1\n    let t120 = circuit_add(t20, t22); // Fp2 add coeff 1/1\n    let t121 = circuit_mul(t117, t119); // Fp2 mul start\n    let t122 = circuit_mul(t118, t120);\n    let t123 = circuit_sub(t121, t122); // Fp2 mul real part end\n    let t124 = circuit_mul(t117, t120);\n    let t125 = circuit_mul(t118, t119);\n    let t126 = circuit_add(t124, t125); // Fp2 mul imag part end\n    let t127 = circuit_sub(t123, t107); // Fp2 sub coeff 0/1\n    let t128 = circuit_sub(t126, t110); // Fp2 sub coeff 1/1\n    let t129 = circuit_sub(t127, t113); // Fp2 sub coeff 0/1\n    let t130 = circuit_sub(t128, t116); // Fp2 sub coeff 1/1\n    let t131 = circuit_add(t129, t130);\n    let t132 = circuit_add(t131, t131);\n    let t133 = circuit_sub(t129, t130);\n    let t134 = circuit_sub(t132, t129);\n    let t135 = circuit_sub(t134, t130);\n    let t136 = circuit_add(t133, t101); // Fp2 add coeff 0/1\n    let t137 = circuit_add(t135, t104); // Fp2 add coeff 1/1\n    let t138 = circuit_add(t0, t2); // Fp2 add coeff 0/1\n    let t139 = circuit_add(t1, t3); // Fp2 add coeff 1/1\n    let t140 = circuit_add(t17, t19); // Fp2 add coeff 0/1\n    let t141 = circuit_add(t18, t20); // Fp2 add coeff 1/1\n    let t142 = circuit_mul(t138, t140); // Fp2 mul start\n    let t143 = circuit_mul(t139, t141);\n    let t144 = circuit_sub(t142, t143); // Fp2 mul real part end\n    let t145 = circuit_mul(t138, t141);\n    let t146 = circuit_mul(t139, t140);\n    let t147 = circuit_add(t145, t146); // Fp2 mul imag part end\n    let t148 = circuit_sub(t144, t101); // Fp2 sub coeff 0/1\n    let t149 = circuit_sub(t147, t104); // Fp2 sub coeff 1/1\n    let t150 = circuit_sub(t148, t107); // Fp2 sub coeff 0/1\n    let t151 = circuit_sub(t149, t110); // Fp2 sub coeff 1/1\n    let t152 = circuit_add(t113, t116);\n    let t153 = circuit_add(t152, t152);\n    let t154 = circuit_sub(t113, t116);\n    let t155 = circuit_sub(t153, t113);\n    let t156 = circuit_sub(t155, t116);\n    let t157 = circuit_add(t150, t154); // Fp2 add coeff 0/1\n    let t158 = circuit_add(t151, t156); // Fp2 add coeff 1/1\n    let t159 = circuit_add(t0, t4); // Fp2 add coeff 0/1\n    let t160 = circuit_add(t1, t5); // Fp2 add coeff 1/1\n    let t161 = circuit_add(t17, t21); // Fp2 add coeff 0/1\n    let t162 = circuit_add(t18, t22); // Fp2 add coeff 1/1\n    let t163 = circuit_mul(t161, t159); // Fp2 mul start\n    let t164 = circuit_mul(t162, t160);\n    let t165 = circuit_sub(t163, t164); // Fp2 mul real part end\n    let t166 = circuit_mul(t161, t160);\n    let t167 = circuit_mul(t162, t159);\n    let t168 = circuit_add(t166, t167); // Fp2 mul imag part end\n    let t169 = circuit_sub(t165, t101); // Fp2 sub coeff 0/1\n    let t170 = circuit_sub(t168, t104); // Fp2 sub coeff 1/1\n    let t171 = circuit_sub(t169, t113); // Fp2 sub coeff 0/1\n    let t172 = circuit_sub(t170, t116); // Fp2 sub coeff 1/1\n    let t173 = circuit_add(t171, t107); // Fp2 add coeff 0/1\n    let t174 = circuit_add(t172, t110); // Fp2 add coeff 1/1\n    let t175 = circuit_add(t136, t60); // Fp6 add coeff 0/5\n    let t176 = circuit_add(t137, t61); // Fp6 add coeff 1/5\n    let t177 = circuit_add(t157, t81); // Fp6 add coeff 2/5\n    let t178 = circuit_add(t158, t82); // Fp6 add coeff 3/5\n    let t179 = circuit_add(t173, t97); // Fp6 add coeff 4/5\n    let t180 = circuit_add(t174, t98); // Fp6 add coeff 5/5\n    let t181 = circuit_add(t60, t60); // Fp6 add coeff 0/5\n    let t182 = circuit_add(t61, t61); // Fp6 add coeff 1/5\n    let t183 = circuit_add(t81, t81); // Fp6 add coeff 2/5\n    let t184 = circuit_add(t82, t82); // Fp6 add coeff 3/5\n    let t185 = circuit_add(t97, t97); // Fp6 add coeff 4/5\n    let t186 = circuit_add(t98, t98); // Fp6 add coeff 5/5\n    let t187 = circuit_add(t97, t98);\n    let t188 = circuit_add(t187, t187);\n    let t189 = circuit_sub(t97, t98);\n    let t190 = circuit_sub(t188, t97);\n    let t191 = circuit_sub(t190, t98);\n    let t192 = circuit_add(t175, t189); // Fp6 add coeff 0/5\n    let t193 = circuit_add(t176, t191); // Fp6 add coeff 1/5\n    let t194 = circuit_add(t177, t60); // Fp6 add coeff 2/5\n    let t195 = circuit_add(t178, t61); // Fp6 add coeff 3/5\n    let t196 = circuit_add(t179, t81); // Fp6 add coeff 4/5\n    let t197 = circuit_add(t180, t82); // Fp6 add coeff 5/5\n    let t198 = circuit_sub(in6, in10); // Fp2 sub coeff 0/1\n    let t199 = circuit_sub(in7, in11); // Fp2 sub coeff 1/1\n    let t200 = circuit_sub(in4, in8); // Fp2 sub coeff 0/1\n    let t201 = circuit_sub(in5, in9); // Fp2 sub coeff 1/1\n    let t202 = circuit_mul(t200, t200); // Fp2 Inv start\n    let t203 = circuit_mul(t201, t201);\n    let t204 = circuit_add(t202, t203);\n    let t205 = circuit_inverse(t204);\n    let t206 = circuit_mul(t200, t205); // Fp2 Inv real part end\n    let t207 = circuit_mul(t201, t205);\n    let t208 = circuit_sub(in0, t207); // Fp2 Inv imag part end\n    let t209 = circuit_mul(t198, t206); // Fp2 mul start\n    let t210 = circuit_mul(t199, t208);\n    let t211 = circuit_sub(t209, t210); // Fp2 mul real part end\n    let t212 = circuit_mul(t198, t208);\n    let t213 = circuit_mul(t199, t206);\n    let t214 = circuit_add(t212, t213); // Fp2 mul imag part end\n    let t215 = circuit_add(t211, t214);\n    let t216 = circuit_sub(t211, t214);\n    let t217 = circuit_mul(t215, t216);\n    let t218 = circuit_mul(t211, t214);\n    let t219 = circuit_add(t218, t218);\n    let t220 = circuit_add(in4, in8); // Fp2 add coeff 0/1\n    let t221 = circuit_add(in5, in9); // Fp2 add coeff 1/1\n    let t222 = circuit_sub(t217, t220); // Fp2 sub coeff 0/1\n    let t223 = circuit_sub(t219, t221); // Fp2 sub coeff 1/1\n    let t224 = circuit_mul(t211, in4); // Fp2 mul start\n    let t225 = circuit_mul(t214, in5);\n    let t226 = circuit_sub(t224, t225); // Fp2 mul real part end\n    let t227 = circuit_mul(t211, in5);\n    let t228 = circuit_mul(t214, in4);\n    let t229 = circuit_add(t227, t228); // Fp2 mul imag part end\n    let t230 = circuit_sub(t226, in6); // Fp2 sub coeff 0/1\n    let t231 = circuit_sub(t229, in7); // Fp2 sub coeff 1/1\n    let t232 = circuit_add(in6, in6); // Fp2 add coeff 0/1\n    let t233 = circuit_add(in7, in7); // Fp2 add coeff 1/1\n    let t234 = circuit_sub(t222, in4); // Fp2 sub coeff 0/1\n    let t235 = circuit_sub(t223, in5); // Fp2 sub coeff 1/1\n    let t236 = circuit_mul(t234, t234); // Fp2 Inv start\n    let t237 = circuit_mul(t235, t235);\n    let t238 = circuit_add(t236, t237);\n    let t239 = circuit_inverse(t238);\n    let t240 = circuit_mul(t234, t239); // Fp2 Inv real part end\n    let t241 = circuit_mul(t235, t239);\n    let t242 = circuit_sub(in0, t241); // Fp2 Inv imag part end\n    let t243 = circuit_mul(t232, t240); // Fp2 mul start\n    let t244 = circuit_mul(t233, t242);\n    let t245 = circuit_sub(t243, t244); // Fp2 mul real part end\n    let t246 = circuit_mul(t232, t242);\n    let t247 = circuit_mul(t233, t240);\n    let t248 = circuit_add(t246, t247); // Fp2 mul imag part end\n    let t249 = circuit_add(t211, t245); // Fp2 add coeff 0/1\n    let t250 = circuit_add(t214, t248); // Fp2 add coeff 1/1\n    let t251 = circuit_sub(in0, t249); // Fp2 neg coeff 0/1\n    let t252 = circuit_sub(in0, t250); // Fp2 neg coeff 1/1\n    let t253 = circuit_add(t251, t252);\n    let t254 = circuit_sub(t251, t252);\n    let t255 = circuit_mul(t253, t254);\n    let t256 = circuit_mul(t251, t252);\n    let t257 = circuit_add(t256, t256);\n    let t258 = circuit_sub(t255, in4); // Fp2 sub coeff 0/1\n    let t259 = circuit_sub(t257, in5); // Fp2 sub coeff 1/1\n    let t260 = circuit_sub(t258, t222); // Fp2 sub coeff 0/1\n    let t261 = circuit_sub(t259, t223); // Fp2 sub coeff 1/1\n    let t262 = circuit_sub(in4, t260); // Fp2 sub coeff 0/1\n    let t263 = circuit_sub(in5, t261); // Fp2 sub coeff 1/1\n    let t264 = circuit_mul(t251, t262); // Fp2 mul start\n    let t265 = circuit_mul(t252, t263);\n    let t266 = circuit_sub(t264, t265); // Fp2 mul real part end\n    let t267 = circuit_mul(t251, t263);\n    let t268 = circuit_mul(t252, t262);\n    let t269 = circuit_add(t267, t268); // Fp2 mul imag part end\n    let t270 = circuit_sub(t266, in6); // Fp2 sub coeff 0/1\n    let t271 = circuit_sub(t269, in7); // Fp2 sub coeff 1/1\n    let t272 = circuit_mul(t251, in4); // Fp2 mul start\n    let t273 = circuit_mul(t252, in5);\n    let t274 = circuit_sub(t272, t273); // Fp2 mul real part end\n    let t275 = circuit_mul(t251, in5);\n    let t276 = circuit_mul(t252, in4);\n    let t277 = circuit_add(t275, t276); // Fp2 mul imag part end\n    let t278 = circuit_sub(t274, in6); // Fp2 sub coeff 0/1\n    let t279 = circuit_sub(t277, in7); // Fp2 sub coeff 1/1\n    let t280 = circuit_mul(t230, in2);\n    let t281 = circuit_mul(t231, in2);\n    let t282 = circuit_mul(t211, in3);\n    let t283 = circuit_mul(t214, in3);\n    let t284 = circuit_mul(t278, in2);\n    let t285 = circuit_mul(t279, in2);\n    let t286 = circuit_mul(t251, in3);\n    let t287 = circuit_mul(t252, in3);\n    let t288 = circuit_mul(t192, t280); // Fp2 mul start\n    let t289 = circuit_mul(t193, t281);\n    let t290 = circuit_sub(t288, t289); // Fp2 mul real part end\n    let t291 = circuit_mul(t192, t281);\n    let t292 = circuit_mul(t193, t280);\n    let t293 = circuit_add(t291, t292); // Fp2 mul imag part end\n    let t294 = circuit_mul(t194, t282); // Fp2 mul start\n    let t295 = circuit_mul(t195, t283);\n    let t296 = circuit_sub(t294, t295); // Fp2 mul real part end\n    let t297 = circuit_mul(t194, t283);\n    let t298 = circuit_mul(t195, t282);\n    let t299 = circuit_add(t297, t298); // Fp2 mul imag part end\n    let t300 = circuit_add(t194, t196); // Fp2 add coeff 0/1\n    let t301 = circuit_add(t195, t197); // Fp2 add coeff 1/1\n    let t302 = circuit_mul(t282, t300); // Fp2 mul start\n    let t303 = circuit_mul(t283, t301);\n    let t304 = circuit_sub(t302, t303); // Fp2 mul real part end\n    let t305 = circuit_mul(t282, t301);\n    let t306 = circuit_mul(t283, t300);\n    let t307 = circuit_add(t305, t306); // Fp2 mul imag part end\n    let t308 = circuit_sub(t304, t296); // Fp2 sub coeff 0/1\n    let t309 = circuit_sub(t307, t299); // Fp2 sub coeff 1/1\n    let t310 = circuit_add(t308, t309);\n    let t311 = circuit_add(t310, t310);\n    let t312 = circuit_sub(t308, t309);\n    let t313 = circuit_sub(t311, t308);\n    let t314 = circuit_sub(t313, t309);\n    let t315 = circuit_add(t312, t290); // Fp2 add coeff 0/1\n    let t316 = circuit_add(t314, t293); // Fp2 add coeff 1/1\n    let t317 = circuit_add(t192, t196); // Fp2 add coeff 0/1\n    let t318 = circuit_add(t193, t197); // Fp2 add coeff 1/1\n    let t319 = circuit_mul(t280, t317); // Fp2 mul start\n    let t320 = circuit_mul(t281, t318);\n    let t321 = circuit_sub(t319, t320); // Fp2 mul real part end\n    let t322 = circuit_mul(t280, t318);\n    let t323 = circuit_mul(t281, t317);\n    let t324 = circuit_add(t322, t323); // Fp2 mul imag part end\n    let t325 = circuit_sub(t321, t290); // Fp2 sub coeff 0/1\n    let t326 = circuit_sub(t324, t293); // Fp2 sub coeff 1/1\n    let t327 = circuit_add(t325, t296); // Fp2 add coeff 0/1\n    let t328 = circuit_add(t326, t299); // Fp2 add coeff 1/1\n    let t329 = circuit_add(t280, t282); // Fp2 add coeff 0/1\n    let t330 = circuit_add(t281, t283); // Fp2 add coeff 1/1\n    let t331 = circuit_add(t192, t194); // Fp2 add coeff 0/1\n    let t332 = circuit_add(t193, t195); // Fp2 add coeff 1/1\n    let t333 = circuit_mul(t329, t331); // Fp2 mul start\n    let t334 = circuit_mul(t330, t332);\n    let t335 = circuit_sub(t333, t334); // Fp2 mul real part end\n    let t336 = circuit_mul(t329, t332);\n    let t337 = circuit_mul(t330, t331);\n    let t338 = circuit_add(t336, t337); // Fp2 mul imag part end\n    let t339 = circuit_sub(t335, t290); // Fp2 sub coeff 0/1\n    let t340 = circuit_sub(t338, t293); // Fp2 sub coeff 1/1\n    let t341 = circuit_sub(t339, t296); // Fp2 sub coeff 0/1\n    let t342 = circuit_sub(t340, t299); // Fp2 sub coeff 1/1\n    let t343 = circuit_add(t185, t186);\n    let t344 = circuit_add(t343, t343);\n    let t345 = circuit_sub(t185, t186);\n    let t346 = circuit_sub(t344, t185);\n    let t347 = circuit_sub(t346, t186);\n    let t348 = circuit_add(in1, t282);\n    let t349 = circuit_add(t181, t192); // Fp6 add coeff 0/5\n    let t350 = circuit_add(t182, t193); // Fp6 add coeff 1/5\n    let t351 = circuit_add(t183, t194); // Fp6 add coeff 2/5\n    let t352 = circuit_add(t184, t195); // Fp6 add coeff 3/5\n    let t353 = circuit_add(t185, t196); // Fp6 add coeff 4/5\n    let t354 = circuit_add(t186, t197); // Fp6 add coeff 5/5\n    let t355 = circuit_mul(t349, t280); // Fp2 mul start\n    let t356 = circuit_mul(t350, t281);\n    let t357 = circuit_sub(t355, t356); // Fp2 mul real part end\n    let t358 = circuit_mul(t349, t281);\n    let t359 = circuit_mul(t350, t280);\n    let t360 = circuit_add(t358, t359); // Fp2 mul imag part end\n    let t361 = circuit_mul(t351, t348); // Fp2 mul start\n    let t362 = circuit_mul(t352, t283);\n    let t363 = circuit_sub(t361, t362); // Fp2 mul real part end\n    let t364 = circuit_mul(t351, t283);\n    let t365 = circuit_mul(t352, t348);\n    let t366 = circuit_add(t364, t365); // Fp2 mul imag part end\n    let t367 = circuit_add(t351, t353); // Fp2 add coeff 0/1\n    let t368 = circuit_add(t352, t354); // Fp2 add coeff 1/1\n    let t369 = circuit_mul(t348, t367); // Fp2 mul start\n    let t370 = circuit_mul(t283, t368);\n    let t371 = circuit_sub(t369, t370); // Fp2 mul real part end\n    let t372 = circuit_mul(t348, t368);\n    let t373 = circuit_mul(t283, t367);\n    let t374 = circuit_add(t372, t373); // Fp2 mul imag part end\n    let t375 = circuit_sub(t371, t363); // Fp2 sub coeff 0/1\n    let t376 = circuit_sub(t374, t366); // Fp2 sub coeff 1/1\n    let t377 = circuit_add(t375, t376);\n    let t378 = circuit_add(t377, t377);\n    let t379 = circuit_sub(t375, t376);\n    let t380 = circuit_sub(t378, t375);\n    let t381 = circuit_sub(t380, t376);\n    let t382 = circuit_add(t379, t357); // Fp2 add coeff 0/1\n    let t383 = circuit_add(t381, t360); // Fp2 add coeff 1/1\n    let t384 = circuit_add(t349, t353); // Fp2 add coeff 0/1\n    let t385 = circuit_add(t350, t354); // Fp2 add coeff 1/1\n    let t386 = circuit_mul(t280, t384); // Fp2 mul start\n    let t387 = circuit_mul(t281, t385);\n    let t388 = circuit_sub(t386, t387); // Fp2 mul real part end\n    let t389 = circuit_mul(t280, t385);\n    let t390 = circuit_mul(t281, t384);\n    let t391 = circuit_add(t389, t390); // Fp2 mul imag part end\n    let t392 = circuit_sub(t388, t357); // Fp2 sub coeff 0/1\n    let t393 = circuit_sub(t391, t360); // Fp2 sub coeff 1/1\n    let t394 = circuit_add(t392, t363); // Fp2 add coeff 0/1\n    let t395 = circuit_add(t393, t366); // Fp2 add coeff 1/1\n    let t396 = circuit_add(t280, t348); // Fp2 add coeff 0/1\n    let t397 = circuit_add(t281, t283); // Fp2 add coeff 1/1\n    let t398 = circuit_add(t349, t351); // Fp2 add coeff 0/1\n    let t399 = circuit_add(t350, t352); // Fp2 add coeff 1/1\n    let t400 = circuit_mul(t396, t398); // Fp2 mul start\n    let t401 = circuit_mul(t397, t399);\n    let t402 = circuit_sub(t400, t401); // Fp2 mul real part end\n    let t403 = circuit_mul(t396, t399);\n    let t404 = circuit_mul(t397, t398);\n    let t405 = circuit_add(t403, t404); // Fp2 mul imag part end\n    let t406 = circuit_sub(t402, t357); // Fp2 sub coeff 0/1\n    let t407 = circuit_sub(t405, t360); // Fp2 sub coeff 1/1\n    let t408 = circuit_sub(t406, t363); // Fp2 sub coeff 0/1\n    let t409 = circuit_sub(t407, t366); // Fp2 sub coeff 1/1\n    let t410 = circuit_sub(t382, t315); // Fp6 sub coeff 0/5\n    let t411 = circuit_sub(t383, t316); // Fp6 sub coeff 1/5\n    let t412 = circuit_sub(t408, t341); // Fp6 sub coeff 2/5\n    let t413 = circuit_sub(t409, t342); // Fp6 sub coeff 3/5\n    let t414 = circuit_sub(t394, t327); // Fp6 sub coeff 4/5\n    let t415 = circuit_sub(t395, t328); // Fp6 sub coeff 5/5\n    let t416 = circuit_sub(t410, t345); // Fp6 sub coeff 0/5\n    let t417 = circuit_sub(t411, t347); // Fp6 sub coeff 1/5\n    let t418 = circuit_sub(t412, t181); // Fp6 sub coeff 2/5\n    let t419 = circuit_sub(t413, t182); // Fp6 sub coeff 3/5\n    let t420 = circuit_sub(t414, t183); // Fp6 sub coeff 4/5\n    let t421 = circuit_sub(t415, t184); // Fp6 sub coeff 5/5\n    let t422 = circuit_add(t183, t184);\n    let t423 = circuit_add(t422, t422);\n    let t424 = circuit_sub(t183, t184);\n    let t425 = circuit_sub(t423, t183);\n    let t426 = circuit_sub(t425, t184);\n    let t427 = circuit_add(t424, t315); // Fp6 add coeff 0/5\n    let t428 = circuit_add(t426, t316); // Fp6 add coeff 1/5\n    let t429 = circuit_add(t345, t341); // Fp6 add coeff 2/5\n    let t430 = circuit_add(t347, t342); // Fp6 add coeff 3/5\n    let t431 = circuit_add(t181, t327); // Fp6 add coeff 4/5\n    let t432 = circuit_add(t182, t328); // Fp6 add coeff 5/5\n    let t433 = circuit_mul(t427, t284); // Fp2 mul start\n    let t434 = circuit_mul(t428, t285);\n    let t435 = circuit_sub(t433, t434); // Fp2 mul real part end\n    let t436 = circuit_mul(t427, t285);\n    let t437 = circuit_mul(t428, t284);\n    let t438 = circuit_add(t436, t437); // Fp2 mul imag part end\n    let t439 = circuit_mul(t429, t286); // Fp2 mul start\n    let t440 = circuit_mul(t430, t287);\n    let t441 = circuit_sub(t439, t440); // Fp2 mul real part end\n    let t442 = circuit_mul(t429, t287);\n    let t443 = circuit_mul(t430, t286);\n    let t444 = circuit_add(t442, t443); // Fp2 mul imag part end\n    let t445 = circuit_add(t429, t431); // Fp2 add coeff 0/1\n    let t446 = circuit_add(t430, t432); // Fp2 add coeff 1/1\n    let t447 = circuit_mul(t286, t445); // Fp2 mul start\n    let t448 = circuit_mul(t287, t446);\n    let t449 = circuit_sub(t447, t448); // Fp2 mul real part end\n    let t450 = circuit_mul(t286, t446);\n    let t451 = circuit_mul(t287, t445);\n    let t452 = circuit_add(t450, t451); // Fp2 mul imag part end\n    let t453 = circuit_sub(t449, t441); // Fp2 sub coeff 0/1\n    let t454 = circuit_sub(t452, t444); // Fp2 sub coeff 1/1\n    let t455 = circuit_add(t453, t454);\n    let t456 = circuit_add(t455, t455);\n    let t457 = circuit_sub(t453, t454);\n    let t458 = circuit_sub(t456, t453);\n    let t459 = circuit_sub(t458, t454);\n    let t460 = circuit_add(t457, t435); // Fp2 add coeff 0/1\n    let t461 = circuit_add(t459, t438); // Fp2 add coeff 1/1\n    let t462 = circuit_add(t427, t431); // Fp2 add coeff 0/1\n    let t463 = circuit_add(t428, t432); // Fp2 add coeff 1/1\n    let t464 = circuit_mul(t284, t462); // Fp2 mul start\n    let t465 = circuit_mul(t285, t463);\n    let t466 = circuit_sub(t464, t465); // Fp2 mul real part end\n    let t467 = circuit_mul(t284, t463);\n    let t468 = circuit_mul(t285, t462);\n    let t469 = circuit_add(t467, t468); // Fp2 mul imag part end\n    let t470 = circuit_sub(t466, t435); // Fp2 sub coeff 0/1\n    let t471 = circuit_sub(t469, t438); // Fp2 sub coeff 1/1\n    let t472 = circuit_add(t470, t441); // Fp2 add coeff 0/1\n    let t473 = circuit_add(t471, t444); // Fp2 add coeff 1/1\n    let t474 = circuit_add(t284, t286); // Fp2 add coeff 0/1\n    let t475 = circuit_add(t285, t287); // Fp2 add coeff 1/1\n    let t476 = circuit_add(t427, t429); // Fp2 add coeff 0/1\n    let t477 = circuit_add(t428, t430); // Fp2 add coeff 1/1\n    let t478 = circuit_mul(t474, t476); // Fp2 mul start\n    let t479 = circuit_mul(t475, t477);\n    let t480 = circuit_sub(t478, t479); // Fp2 mul real part end\n    let t481 = circuit_mul(t474, t477);\n    let t482 = circuit_mul(t475, t476);\n    let t483 = circuit_add(t481, t482); // Fp2 mul imag part end\n    let t484 = circuit_sub(t480, t435); // Fp2 sub coeff 0/1\n    let t485 = circuit_sub(t483, t438); // Fp2 sub coeff 1/1\n    let t486 = circuit_sub(t484, t441); // Fp2 sub coeff 0/1\n    let t487 = circuit_sub(t485, t444); // Fp2 sub coeff 1/1\n    let t488 = circuit_add(t420, t421);\n    let t489 = circuit_add(t488, t488);\n    let t490 = circuit_sub(t420, t421);\n    let t491 = circuit_sub(t489, t420);\n    let t492 = circuit_sub(t491, t421);\n    let t493 = circuit_add(in1, t286);\n    let t494 = circuit_add(t416, t427); // Fp6 add coeff 0/5\n    let t495 = circuit_add(t417, t428); // Fp6 add coeff 1/5\n    let t496 = circuit_add(t418, t429); // Fp6 add coeff 2/5\n    let t497 = circuit_add(t419, t430); // Fp6 add coeff 3/5\n    let t498 = circuit_add(t420, t431); // Fp6 add coeff 4/5\n    let t499 = circuit_add(t421, t432); // Fp6 add coeff 5/5\n    let t500 = circuit_mul(t494, t284); // Fp2 mul start\n    let t501 = circuit_mul(t495, t285);\n    let t502 = circuit_sub(t500, t501); // Fp2 mul real part end\n    let t503 = circuit_mul(t494, t285);\n    let t504 = circuit_mul(t495, t284);\n    let t505 = circuit_add(t503, t504); // Fp2 mul imag part end\n    let t506 = circuit_mul(t496, t493); // Fp2 mul start\n    let t507 = circuit_mul(t497, t287);\n    let t508 = circuit_sub(t506, t507); // Fp2 mul real part end\n    let t509 = circuit_mul(t496, t287);\n    let t510 = circuit_mul(t497, t493);\n    let t511 = circuit_add(t509, t510); // Fp2 mul imag part end\n    let t512 = circuit_add(t496, t498); // Fp2 add coeff 0/1\n    let t513 = circuit_add(t497, t499); // Fp2 add coeff 1/1\n    let t514 = circuit_mul(t493, t512); // Fp2 mul start\n    let t515 = circuit_mul(t287, t513);\n    let t516 = circuit_sub(t514, t515); // Fp2 mul real part end\n    let t517 = circuit_mul(t493, t513);\n    let t518 = circuit_mul(t287, t512);\n    let t519 = circuit_add(t517, t518); // Fp2 mul imag part end\n    let t520 = circuit_sub(t516, t508); // Fp2 sub coeff 0/1\n    let t521 = circuit_sub(t519, t511); // Fp2 sub coeff 1/1\n    let t522 = circuit_add(t520, t521);\n    let t523 = circuit_add(t522, t522);\n    let t524 = circuit_sub(t520, t521);\n    let t525 = circuit_sub(t523, t520);\n    let t526 = circuit_sub(t525, t521);\n    let t527 = circuit_add(t524, t502); // Fp2 add coeff 0/1\n    let t528 = circuit_add(t526, t505); // Fp2 add coeff 1/1\n    let t529 = circuit_add(t494, t498); // Fp2 add coeff 0/1\n    let t530 = circuit_add(t495, t499); // Fp2 add coeff 1/1\n    let t531 = circuit_mul(t284, t529); // Fp2 mul start\n    let t532 = circuit_mul(t285, t530);\n    let t533 = circuit_sub(t531, t532); // Fp2 mul real part end\n    let t534 = circuit_mul(t284, t530);\n    let t535 = circuit_mul(t285, t529);\n    let t536 = circuit_add(t534, t535); // Fp2 mul imag part end\n    let t537 = circuit_sub(t533, t502); // Fp2 sub coeff 0/1\n    let t538 = circuit_sub(t536, t505); // Fp2 sub coeff 1/1\n    let t539 = circuit_add(t537, t508); // Fp2 add coeff 0/1\n    let t540 = circuit_add(t538, t511); // Fp2 add coeff 1/1\n    let t541 = circuit_add(t284, t493); // Fp2 add coeff 0/1\n    let t542 = circuit_add(t285, t287); // Fp2 add coeff 1/1\n    let t543 = circuit_add(t494, t496); // Fp2 add coeff 0/1\n    let t544 = circuit_add(t495, t497); // Fp2 add coeff 1/1\n    let t545 = circuit_mul(t541, t543); // Fp2 mul start\n    let t546 = circuit_mul(t542, t544);\n    let t547 = circuit_sub(t545, t546); // Fp2 mul real part end\n    let t548 = circuit_mul(t541, t544);\n    let t549 = circuit_mul(t542, t543);\n    let t550 = circuit_add(t548, t549); // Fp2 mul imag part end\n    let t551 = circuit_sub(t547, t502); // Fp2 sub coeff 0/1\n    let t552 = circuit_sub(t550, t505); // Fp2 sub coeff 1/1\n    let t553 = circuit_sub(t551, t508); // Fp2 sub coeff 0/1\n    let t554 = circuit_sub(t552, t511); // Fp2 sub coeff 1/1\n    let t555 = circuit_sub(t527, t460); // Fp6 sub coeff 0/5\n    let t556 = circuit_sub(t528, t461); // Fp6 sub coeff 1/5\n    let t557 = circuit_sub(t553, t486); // Fp6 sub coeff 2/5\n    let t558 = circuit_sub(t554, t487); // Fp6 sub coeff 3/5\n    let t559 = circuit_sub(t539, t472); // Fp6 sub coeff 4/5\n    let t560 = circuit_sub(t540, t473); // Fp6 sub coeff 5/5\n    let t561 = circuit_sub(t555, t490); // Fp6 sub coeff 0/5\n    let t562 = circuit_sub(t556, t492); // Fp6 sub coeff 1/5\n    let t563 = circuit_sub(t557, t416); // Fp6 sub coeff 2/5\n    let t564 = circuit_sub(t558, t417); // Fp6 sub coeff 3/5\n    let t565 = circuit_sub(t559, t418); // Fp6 sub coeff 4/5\n    let t566 = circuit_sub(t560, t419); // Fp6 sub coeff 5/5\n    let t567 = circuit_add(t418, t419);\n    let t568 = circuit_add(t567, t567);\n    let t569 = circuit_sub(t418, t419);\n    let t570 = circuit_sub(t568, t418);\n    let t571 = circuit_sub(t570, t419);\n    let t572 = circuit_add(t569, t460); // Fp6 add coeff 0/5\n    let t573 = circuit_add(t571, t461); // Fp6 add coeff 1/5\n    let t574 = circuit_add(t490, t486); // Fp6 add coeff 2/5\n    let t575 = circuit_add(t492, t487); // Fp6 add coeff 3/5\n    let t576 = circuit_add(t416, t472); // Fp6 add coeff 4/5\n    let t577 = circuit_add(t417, t473); // Fp6 add coeff 5/5\n    let t578 = circuit_add(t260, t261);\n    let t579 = circuit_add(t578, t270);\n    let t580 = circuit_add(t579, t271);\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (\n        t580, t572, t573, t574, t575, t576, t577, t561, t562, t563, t564, t565, t566,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in2\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in3\n    circuit_inputs = circuit_inputs.next_2(Q_0.x0); // in4\n    circuit_inputs = circuit_inputs.next_2(Q_0.x1); // in5\n    circuit_inputs = circuit_inputs.next_2(Q_0.y0); // in6\n    circuit_inputs = circuit_inputs.next_2(Q_0.y1); // in7\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_0.x0); // in8\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_0.x1); // in9\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_0.y0); // in10\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_0.y1); // in11\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b2a0); // in16\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b2a1); // in17\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b0a0); // in18\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b0a1); // in19\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b1a0); // in20\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b1a1); // in21\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b2a0); // in22\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b2a1); // in23\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t260),\n        x1: outputs.get_output(t261),\n        y0: outputs.get_output(t270),\n        y1: outputs.get_output(t271),\n    };\n    let Mi_plus_one: E12T = E12T {\n        c0b0a0: outputs.get_output(t572),\n        c0b0a1: outputs.get_output(t573),\n        c0b1a0: outputs.get_output(t574),\n        c0b1a1: outputs.get_output(t575),\n        c0b2a0: outputs.get_output(t576),\n        c0b2a1: outputs.get_output(t577),\n        c1b0a0: outputs.get_output(t561),\n        c1b0a1: outputs.get_output(t562),\n        c1b1a0: outputs.get_output(t563),\n        c1b1a1: outputs.get_output(t564),\n        c1b2a0: outputs.get_output(t565),\n        c1b2a1: outputs.get_output(t566),\n    };\n    return (Q0, Mi_plus_one);\n}\n#[inline(always)]\npub fn run_BLS12_381_TOWER_MILLER_INIT_BIT_1P_circuit(\n    yInv_0: u384, xNegOverY_0: u384, Q_0: G2Point,\n) -> (G2Point, u384, u384, u384, u384, u384, u384, u384, u384, u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x3\n    let in1 = CE::<CI<1>> {}; // 0x6\n    let in2 = CE::<CI<2>> {}; // 0x0\n    let in3 = CE::<CI<3>> {}; // 0x1\n\n    // INPUT stack\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8, in9) = (CE::<CI<7>> {}, CE::<CI<8>> {}, CE::<CI<9>> {});\n    let t0 = circuit_add(in6, in7);\n    let t1 = circuit_sub(in6, in7);\n    let t2 = circuit_mul(t0, t1);\n    let t3 = circuit_mul(in6, in7);\n    let t4 = circuit_mul(t2, in0);\n    let t5 = circuit_mul(t3, in1);\n    let t6 = circuit_add(in8, in8); // Fp2 add coeff 0/1\n    let t7 = circuit_add(in9, in9); // Fp2 add coeff 1/1\n    let t8 = circuit_mul(t6, t6); // Fp2 Inv start\n    let t9 = circuit_mul(t7, t7);\n    let t10 = circuit_add(t8, t9);\n    let t11 = circuit_inverse(t10);\n    let t12 = circuit_mul(t6, t11); // Fp2 Inv real part end\n    let t13 = circuit_mul(t7, t11);\n    let t14 = circuit_sub(in2, t13); // Fp2 Inv imag part end\n    let t15 = circuit_mul(t4, t12); // Fp2 mul start\n    let t16 = circuit_mul(t5, t14);\n    let t17 = circuit_sub(t15, t16); // Fp2 mul real part end\n    let t18 = circuit_mul(t4, t14);\n    let t19 = circuit_mul(t5, t12);\n    let t20 = circuit_add(t18, t19); // Fp2 mul imag part end\n    let t21 = circuit_mul(t17, in6); // Fp2 mul start\n    let t22 = circuit_mul(t20, in7);\n    let t23 = circuit_sub(t21, t22); // Fp2 mul real part end\n    let t24 = circuit_mul(t17, in7);\n    let t25 = circuit_mul(t20, in6);\n    let t26 = circuit_add(t24, t25); // Fp2 mul imag part end\n    let t27 = circuit_sub(t23, in8); // Fp2 sub coeff 0/1\n    let t28 = circuit_sub(t26, in9); // Fp2 sub coeff 1/1\n    let t29 = circuit_add(t17, t20);\n    let t30 = circuit_sub(t17, t20);\n    let t31 = circuit_mul(t29, t30);\n    let t32 = circuit_mul(t17, t20);\n    let t33 = circuit_add(t32, t32);\n    let t34 = circuit_add(in6, in6); // Fp2 add coeff 0/1\n    let t35 = circuit_add(in7, in7); // Fp2 add coeff 1/1\n    let t36 = circuit_sub(t31, t34); // Fp2 sub coeff 0/1\n    let t37 = circuit_sub(t33, t35); // Fp2 sub coeff 1/1\n    let t38 = circuit_sub(in6, t36); // Fp2 sub coeff 0/1\n    let t39 = circuit_sub(in7, t37); // Fp2 sub coeff 1/1\n    let t40 = circuit_mul(t38, t38); // Fp2 Inv start\n    let t41 = circuit_mul(t39, t39);\n    let t42 = circuit_add(t40, t41);\n    let t43 = circuit_inverse(t42);\n    let t44 = circuit_mul(t38, t43); // Fp2 Inv real part end\n    let t45 = circuit_mul(t39, t43);\n    let t46 = circuit_sub(in2, t45); // Fp2 Inv imag part end\n    let t47 = circuit_mul(t6, t44); // Fp2 mul start\n    let t48 = circuit_mul(t7, t46);\n    let t49 = circuit_sub(t47, t48); // Fp2 mul real part end\n    let t50 = circuit_mul(t6, t46);\n    let t51 = circuit_mul(t7, t44);\n    let t52 = circuit_add(t50, t51); // Fp2 mul imag part end\n    let t53 = circuit_sub(t49, t17); // Fp2 sub coeff 0/1\n    let t54 = circuit_sub(t52, t20); // Fp2 sub coeff 1/1\n    let t55 = circuit_mul(t53, in6); // Fp2 mul start\n    let t56 = circuit_mul(t54, in7);\n    let t57 = circuit_sub(t55, t56); // Fp2 mul real part end\n    let t58 = circuit_mul(t53, in7);\n    let t59 = circuit_mul(t54, in6);\n    let t60 = circuit_add(t58, t59); // Fp2 mul imag part end\n    let t61 = circuit_sub(t57, in8); // Fp2 sub coeff 0/1\n    let t62 = circuit_sub(t60, in9); // Fp2 sub coeff 1/1\n    let t63 = circuit_add(t53, t54);\n    let t64 = circuit_sub(t53, t54);\n    let t65 = circuit_mul(t63, t64);\n    let t66 = circuit_mul(t53, t54);\n    let t67 = circuit_add(t66, t66);\n    let t68 = circuit_add(in6, t36); // Fp2 add coeff 0/1\n    let t69 = circuit_add(in7, t37); // Fp2 add coeff 1/1\n    let t70 = circuit_sub(t65, t68); // Fp2 sub coeff 0/1\n    let t71 = circuit_sub(t67, t69); // Fp2 sub coeff 1/1\n    let t72 = circuit_sub(in6, t70); // Fp2 sub coeff 0/1\n    let t73 = circuit_sub(in7, t71); // Fp2 sub coeff 1/1\n    let t74 = circuit_mul(t53, t72); // Fp2 mul start\n    let t75 = circuit_mul(t54, t73);\n    let t76 = circuit_sub(t74, t75); // Fp2 mul real part end\n    let t77 = circuit_mul(t53, t73);\n    let t78 = circuit_mul(t54, t72);\n    let t79 = circuit_add(t77, t78); // Fp2 mul imag part end\n    let t80 = circuit_sub(t76, in8); // Fp2 sub coeff 0/1\n    let t81 = circuit_sub(t79, in9); // Fp2 sub coeff 1/1\n    let t82 = circuit_mul(t27, in4);\n    let t83 = circuit_mul(t28, in4);\n    let t84 = circuit_mul(t17, in5);\n    let t85 = circuit_mul(t20, in5);\n    let t86 = circuit_mul(t61, in4);\n    let t87 = circuit_mul(t62, in4);\n    let t88 = circuit_mul(t53, in5);\n    let t89 = circuit_mul(t54, in5);\n    let t90 = circuit_mul(t86, t82); // Fp2 mul start\n    let t91 = circuit_mul(t87, t83);\n    let t92 = circuit_sub(t90, t91); // Fp2 mul real part end\n    let t93 = circuit_mul(t86, t83);\n    let t94 = circuit_mul(t87, t82);\n    let t95 = circuit_add(t93, t94); // Fp2 mul imag part end\n    let t96 = circuit_mul(t88, t84); // Fp2 mul start\n    let t97 = circuit_mul(t89, t85);\n    let t98 = circuit_sub(t96, t97); // Fp2 mul real part end\n    let t99 = circuit_mul(t88, t85);\n    let t100 = circuit_mul(t89, t84);\n    let t101 = circuit_add(t99, t100); // Fp2 mul imag part end\n    let t102 = circuit_add(t82, t86); // Fp2 add coeff 0/1\n    let t103 = circuit_add(t83, t87); // Fp2 add coeff 1/1\n    let t104 = circuit_add(t86, t88); // Fp2 add coeff 0/1\n    let t105 = circuit_add(t87, t89); // Fp2 add coeff 1/1\n    let t106 = circuit_add(t82, t84); // Fp2 add coeff 0/1\n    let t107 = circuit_add(t83, t85); // Fp2 add coeff 1/1\n    let t108 = circuit_mul(t106, t104); // Fp2 mul start\n    let t109 = circuit_mul(t107, t105);\n    let t110 = circuit_sub(t108, t109); // Fp2 mul real part end\n    let t111 = circuit_mul(t106, t105);\n    let t112 = circuit_mul(t107, t104);\n    let t113 = circuit_add(t111, t112); // Fp2 mul imag part end\n    let t114 = circuit_sub(t110, t92); // Fp2 sub coeff 0/1\n    let t115 = circuit_sub(t113, t95); // Fp2 sub coeff 1/1\n    let t116 = circuit_sub(t114, t98); // Fp2 sub coeff 0/1\n    let t117 = circuit_sub(t115, t101); // Fp2 sub coeff 1/1\n    let t118 = circuit_add(t84, t88); // Fp2 add coeff 0/1\n    let t119 = circuit_add(t85, t89); // Fp2 add coeff 1/1\n    let t120 = circuit_add(in3, in2);\n    let t121 = circuit_add(t120, t120);\n    let t122 = circuit_sub(in3, in2);\n    let t123 = circuit_sub(t121, in3);\n    let t124 = circuit_sub(t123, in2);\n    let t125 = circuit_add(t122, t92); // Fp2 add coeff 0/1\n    let t126 = circuit_add(t124, t95); // Fp2 add coeff 1/1\n\n    let modulus = crate::definitions::get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n\n    let mut circuit_inputs = (\n        t70, t71, t80, t81, t125, t126, t116, t117, t98, t101, t102, t103, t118, t119,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x6, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in2\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in3\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in4\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in5\n    circuit_inputs = circuit_inputs.next_2(Q_0.x0); // in6\n    circuit_inputs = circuit_inputs.next_2(Q_0.x1); // in7\n    circuit_inputs = circuit_inputs.next_2(Q_0.y0); // in8\n    circuit_inputs = circuit_inputs.next_2(Q_0.y1); // in9\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t70),\n        x1: outputs.get_output(t71),\n        y0: outputs.get_output(t80),\n        y1: outputs.get_output(t81),\n    };\n    let c0b0a0: u384 = outputs.get_output(t125);\n    let c0b0a1: u384 = outputs.get_output(t126);\n    let c0b1a0: u384 = outputs.get_output(t116);\n    let c0b1a1: u384 = outputs.get_output(t117);\n    let c0b2a0: u384 = outputs.get_output(t98);\n    let c0b2a1: u384 = outputs.get_output(t101);\n    let c1b1a0: u384 = outputs.get_output(t102);\n    let c1b1a1: u384 = outputs.get_output(t103);\n    let c1b2a0: u384 = outputs.get_output(t118);\n    let c1b2a1: u384 = outputs.get_output(t119);\n    return (Q0, c0b0a0, c0b0a1, c0b1a0, c0b1a1, c0b2a0, c0b2a1, c1b1a0, c1b1a1, c1b2a0, c1b2a1);\n}\n#[inline(always)]\npub fn run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(M: E12T) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0xa\n    let in1 = CE::<CI<1>> {}; // 0x9\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let t0 = circuit_add(in10, in11);\n    let t1 = circuit_sub(in10, in11);\n    let t2 = circuit_mul(t0, t1);\n    let t3 = circuit_mul(in10, in11);\n    let t4 = circuit_add(t3, t3);\n    let t5 = circuit_add(in2, in3);\n    let t6 = circuit_sub(in2, in3);\n    let t7 = circuit_mul(t5, t6);\n    let t8 = circuit_mul(in2, in3);\n    let t9 = circuit_add(t8, t8);\n    let t10 = circuit_add(in10, in2); // Fp2 add coeff 0/1\n    let t11 = circuit_add(in11, in3); // Fp2 add coeff 1/1\n    let t12 = circuit_add(t10, t11);\n    let t13 = circuit_sub(t10, t11);\n    let t14 = circuit_mul(t12, t13);\n    let t15 = circuit_mul(t10, t11);\n    let t16 = circuit_add(t15, t15);\n    let t17 = circuit_sub(t14, t2); // Fp2 sub coeff 0/1\n    let t18 = circuit_sub(t16, t4); // Fp2 sub coeff 1/1\n    let t19 = circuit_sub(t17, t7); // Fp2 sub coeff 0/1\n    let t20 = circuit_sub(t18, t9); // Fp2 sub coeff 1/1\n    let t21 = circuit_add(in6, in7);\n    let t22 = circuit_sub(in6, in7);\n    let t23 = circuit_mul(t21, t22);\n    let t24 = circuit_mul(in6, in7);\n    let t25 = circuit_add(t24, t24);\n    let t26 = circuit_add(in8, in9);\n    let t27 = circuit_sub(in8, in9);\n    let t28 = circuit_mul(t26, t27);\n    let t29 = circuit_mul(in8, in9);\n    let t30 = circuit_add(t29, t29);\n    let t31 = circuit_add(in6, in8); // Fp2 add coeff 0/1\n    let t32 = circuit_add(in7, in9); // Fp2 add coeff 1/1\n    let t33 = circuit_add(t31, t32);\n    let t34 = circuit_sub(t31, t32);\n    let t35 = circuit_mul(t33, t34);\n    let t36 = circuit_mul(t31, t32);\n    let t37 = circuit_add(t36, t36);\n    let t38 = circuit_sub(t35, t23); // Fp2 sub coeff 0/1\n    let t39 = circuit_sub(t37, t25); // Fp2 sub coeff 1/1\n    let t40 = circuit_sub(t38, t28); // Fp2 sub coeff 0/1\n    let t41 = circuit_sub(t39, t30); // Fp2 sub coeff 1/1\n    let t42 = circuit_add(in12, in13);\n    let t43 = circuit_sub(in12, in13);\n    let t44 = circuit_mul(t42, t43);\n    let t45 = circuit_mul(in12, in13);\n    let t46 = circuit_add(t45, t45);\n    let t47 = circuit_add(in4, in5);\n    let t48 = circuit_sub(in4, in5);\n    let t49 = circuit_mul(t47, t48);\n    let t50 = circuit_mul(in4, in5);\n    let t51 = circuit_add(t50, t50);\n    let t52 = circuit_add(in12, in4); // Fp2 add coeff 0/1\n    let t53 = circuit_add(in13, in5); // Fp2 add coeff 1/1\n    let t54 = circuit_add(t52, t53);\n    let t55 = circuit_sub(t52, t53);\n    let t56 = circuit_mul(t54, t55);\n    let t57 = circuit_mul(t52, t53);\n    let t58 = circuit_add(t57, t57);\n    let t59 = circuit_sub(t56, t44); // Fp2 sub coeff 0/1\n    let t60 = circuit_sub(t58, t46); // Fp2 sub coeff 1/1\n    let t61 = circuit_sub(t59, t49); // Fp2 sub coeff 0/1\n    let t62 = circuit_sub(t60, t51); // Fp2 sub coeff 1/1\n    let t63 = circuit_add(t61, t62);\n    let t64 = circuit_mul(t63, in0);\n    let t65 = circuit_mul(t61, in1);\n    let t66 = circuit_sub(t65, t62);\n    let t67 = circuit_sub(t64, t65);\n    let t68 = circuit_sub(t67, t62);\n    let t69 = circuit_add(t2, t4);\n    let t70 = circuit_mul(t69, in0);\n    let t71 = circuit_mul(t2, in1);\n    let t72 = circuit_sub(t71, t4);\n    let t73 = circuit_sub(t70, t71);\n    let t74 = circuit_sub(t73, t4);\n    let t75 = circuit_add(t72, t7); // Fp2 add coeff 0/1\n    let t76 = circuit_add(t74, t9); // Fp2 add coeff 1/1\n    let t77 = circuit_add(t23, t25);\n    let t78 = circuit_mul(t77, in0);\n    let t79 = circuit_mul(t23, in1);\n    let t80 = circuit_sub(t79, t25);\n    let t81 = circuit_sub(t78, t79);\n    let t82 = circuit_sub(t81, t25);\n    let t83 = circuit_add(t80, t28); // Fp2 add coeff 0/1\n    let t84 = circuit_add(t82, t30); // Fp2 add coeff 1/1\n    let t85 = circuit_add(t44, t46);\n    let t86 = circuit_mul(t85, in0);\n    let t87 = circuit_mul(t44, in1);\n    let t88 = circuit_sub(t87, t46);\n    let t89 = circuit_sub(t86, t87);\n    let t90 = circuit_sub(t89, t46);\n    let t91 = circuit_add(t88, t49); // Fp2 add coeff 0/1\n    let t92 = circuit_add(t90, t51); // Fp2 add coeff 1/1\n    let t93 = circuit_sub(t75, in2); // Fp2 sub coeff 0/1\n    let t94 = circuit_sub(t76, in3); // Fp2 sub coeff 1/1\n    let t95 = circuit_add(t93, t93); // Fp2 add coeff 0/1\n    let t96 = circuit_add(t94, t94); // Fp2 add coeff 1/1\n    let t97 = circuit_add(t95, t75); // Fp2 add coeff 0/1\n    let t98 = circuit_add(t96, t76); // Fp2 add coeff 1/1\n    let t99 = circuit_sub(t83, in4); // Fp2 sub coeff 0/1\n    let t100 = circuit_sub(t84, in5); // Fp2 sub coeff 1/1\n    let t101 = circuit_add(t99, t99); // Fp2 add coeff 0/1\n    let t102 = circuit_add(t100, t100); // Fp2 add coeff 1/1\n    let t103 = circuit_add(t101, t83); // Fp2 add coeff 0/1\n    let t104 = circuit_add(t102, t84); // Fp2 add coeff 1/1\n    let t105 = circuit_sub(t91, in6); // Fp2 sub coeff 0/1\n    let t106 = circuit_sub(t92, in7); // Fp2 sub coeff 1/1\n    let t107 = circuit_add(t105, t105); // Fp2 add coeff 0/1\n    let t108 = circuit_add(t106, t106); // Fp2 add coeff 1/1\n    let t109 = circuit_add(t107, t91); // Fp2 add coeff 0/1\n    let t110 = circuit_add(t108, t92); // Fp2 add coeff 1/1\n    let t111 = circuit_add(t66, in8); // Fp2 add coeff 0/1\n    let t112 = circuit_add(t68, in9); // Fp2 add coeff 1/1\n    let t113 = circuit_add(t111, t111); // Fp2 add coeff 0/1\n    let t114 = circuit_add(t112, t112); // Fp2 add coeff 1/1\n    let t115 = circuit_add(t113, t66); // Fp2 add coeff 0/1\n    let t116 = circuit_add(t114, t68); // Fp2 add coeff 1/1\n    let t117 = circuit_add(t19, in10); // Fp2 add coeff 0/1\n    let t118 = circuit_add(t20, in11); // Fp2 add coeff 1/1\n    let t119 = circuit_add(t117, t117); // Fp2 add coeff 0/1\n    let t120 = circuit_add(t118, t118); // Fp2 add coeff 1/1\n    let t121 = circuit_add(t119, t19); // Fp2 add coeff 0/1\n    let t122 = circuit_add(t120, t20); // Fp2 add coeff 1/1\n    let t123 = circuit_add(t40, in12); // Fp2 add coeff 0/1\n    let t124 = circuit_add(t41, in13); // Fp2 add coeff 1/1\n    let t125 = circuit_add(t123, t123); // Fp2 add coeff 0/1\n    let t126 = circuit_add(t124, t124); // Fp2 add coeff 1/1\n    let t127 = circuit_add(t125, t40); // Fp2 add coeff 0/1\n    let t128 = circuit_add(t126, t41); // Fp2 add coeff 1/1\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t97, t98, t103, t104, t109, t110, t115, t116, t121, t122, t127, t128)\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0xa, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x9, 0x0, 0x0, 0x0]); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a0); // in2\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a1); // in3\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a0); // in4\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a1); // in5\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a0); // in6\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a1); // in7\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a0); // in8\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a1); // in9\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a0); // in10\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a1); // in11\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a0); // in12\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a1); // in13\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t97),\n        c0b0a1: outputs.get_output(t98),\n        c0b1a0: outputs.get_output(t103),\n        c0b1a1: outputs.get_output(t104),\n        c0b2a0: outputs.get_output(t109),\n        c0b2a1: outputs.get_output(t110),\n        c1b0a0: outputs.get_output(t115),\n        c1b0a1: outputs.get_output(t116),\n        c1b1a0: outputs.get_output(t121),\n        c1b1a1: outputs.get_output(t122),\n        c1b2a0: outputs.get_output(t127),\n        c1b2a1: outputs.get_output(t128),\n    };\n    return (res,);\n}\n#[inline(always)]\npub fn run_BN254_E12T_FROBENIUS_CUBE_circuit(M: E12T) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x856e078b755ef0abaff1c77959f25ac805ffd3d5d6942d37b746ee87bdcfb6d\n    let in2 = CE::<CI<2>> {}; // 0x4f1de41b3d1766fa9f30e6dec26094f0fdf31bf98ff2631380cab2baaa586de\n    let in3 = CE::<CI<3>> {}; // 0xbc58c6611c08dab19bee0f7b5b2444ee633094575b06bcb0e1a92bc3ccbf066\n    let in4 = CE::<CI<4>> {}; // 0x23d5e999e1910a12feb0f6ef0cd21d04a44a9e08737f96e55fe3ed9d730c239f\n    let in5 = CE::<CI<5>> {}; // 0x19dc81cfcc82e4bbefe9608cd0acaa90894cb38dbe55d24ae86f7d391ed4a67f\n    let in6 = CE::<CI<6>> {}; // 0xabf8b60be77d7306cbeee33576139d7f03a5e397d439ec7694aa2bf4c0c101\n    let in7 = CE::<CI<7>> {}; // 0x2a275b6d9896aa4cdbf17f1dca9e5ea3bbd689a3bea870f45fcc8ad066dce9ed\n    let in8 = CE::<CI<8>> {}; // 0x28a411b634f09b8fb14b900e9507e9327600ecc7d8cf6ebab94d0cb3b2594c64\n    let in9 = CE::<CI<9>> {}; // 0x13c49044952c0905711699fa3b4d3f692ed68098967c84a5ebde847076261b43\n    let in10 = CE::<\n        CI<10>,\n    > {}; // 0x16db366a59b1dd0b9fb1b2282a48633d3e2ddaea200280211f25041384282499\n\n    // INPUT stack\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let t0 = circuit_sub(in0, in12);\n    let t1 = circuit_add(in11, in0);\n    let t2 = circuit_sub(in0, in14);\n    let t3 = circuit_sub(in0, in16);\n    let t4 = circuit_sub(in0, in18);\n    let t5 = circuit_sub(in0, in20);\n    let t6 = circuit_sub(in0, in22);\n    let t7 = circuit_mul(in1, in13); // Fp2 mul start\n    let t8 = circuit_mul(in2, t2);\n    let t9 = circuit_sub(t7, t8); // Fp2 mul real part end\n    let t10 = circuit_mul(in1, t2);\n    let t11 = circuit_mul(in2, in13);\n    let t12 = circuit_add(t10, t11); // Fp2 mul imag part end\n    let t13 = circuit_mul(in3, in15); // Fp2 mul start\n    let t14 = circuit_mul(in4, t3);\n    let t15 = circuit_sub(t13, t14); // Fp2 mul real part end\n    let t16 = circuit_mul(in3, t3);\n    let t17 = circuit_mul(in4, in15);\n    let t18 = circuit_add(t16, t17); // Fp2 mul imag part end\n    let t19 = circuit_mul(in5, in17); // Fp2 mul start\n    let t20 = circuit_mul(in6, t4);\n    let t21 = circuit_sub(t19, t20); // Fp2 mul real part end\n    let t22 = circuit_mul(in5, t4);\n    let t23 = circuit_mul(in6, in17);\n    let t24 = circuit_add(t22, t23); // Fp2 mul imag part end\n    let t25 = circuit_mul(in7, in19); // Fp2 mul start\n    let t26 = circuit_mul(in8, t5);\n    let t27 = circuit_sub(t25, t26); // Fp2 mul real part end\n    let t28 = circuit_mul(in7, t5);\n    let t29 = circuit_mul(in8, in19);\n    let t30 = circuit_add(t28, t29); // Fp2 mul imag part end\n    let t31 = circuit_mul(in9, in21); // Fp2 mul start\n    let t32 = circuit_mul(in10, t6);\n    let t33 = circuit_sub(t31, t32); // Fp2 mul real part end\n    let t34 = circuit_mul(in9, t6);\n    let t35 = circuit_mul(in10, in21);\n    let t36 = circuit_add(t34, t35); // Fp2 mul imag part end\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t1, t0, t9, t12, t15, t18, t21, t24, t27, t30, t33, t36).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(E12T_FROBENIUS_CUBE_BN254_CONSTANTS.span()); // in0 - in10\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a0); // in11\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a1); // in12\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a0); // in13\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a1); // in14\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a0); // in15\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a1); // in16\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a0); // in17\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a1); // in18\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a0); // in19\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a1); // in20\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a0); // in21\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a1); // in22\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t1),\n        c0b0a1: outputs.get_output(t0),\n        c0b1a0: outputs.get_output(t9),\n        c0b1a1: outputs.get_output(t12),\n        c0b2a0: outputs.get_output(t15),\n        c0b2a1: outputs.get_output(t18),\n        c1b0a0: outputs.get_output(t21),\n        c1b0a1: outputs.get_output(t24),\n        c1b1a0: outputs.get_output(t27),\n        c1b1a1: outputs.get_output(t30),\n        c1b2a0: outputs.get_output(t33),\n        c1b2a1: outputs.get_output(t36),\n    };\n    return (res,);\n}\nconst E12T_FROBENIUS_CUBE_BN254_CONSTANTS: [u384; 11] = [\n    u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x5d6942d37b746ee87bdcfb6d,\n        limb1: 0xbaff1c77959f25ac805ffd3d,\n        limb2: 0x856e078b755ef0a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x98ff2631380cab2baaa586de,\n        limb1: 0xa9f30e6dec26094f0fdf31bf,\n        limb2: 0x4f1de41b3d1766f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x75b06bcb0e1a92bc3ccbf066,\n        limb1: 0x19bee0f7b5b2444ee6330945,\n        limb2: 0xbc58c6611c08dab,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x737f96e55fe3ed9d730c239f,\n        limb1: 0xfeb0f6ef0cd21d04a44a9e08,\n        limb2: 0x23d5e999e1910a12,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbe55d24ae86f7d391ed4a67f,\n        limb1: 0xefe9608cd0acaa90894cb38d,\n        limb2: 0x19dc81cfcc82e4bb,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x97d439ec7694aa2bf4c0c101,\n        limb1: 0x6cbeee33576139d7f03a5e3,\n        limb2: 0xabf8b60be77d73,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbea870f45fcc8ad066dce9ed,\n        limb1: 0xdbf17f1dca9e5ea3bbd689a3,\n        limb2: 0x2a275b6d9896aa4c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd8cf6ebab94d0cb3b2594c64,\n        limb1: 0xb14b900e9507e9327600ecc7,\n        limb2: 0x28a411b634f09b8f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x967c84a5ebde847076261b43,\n        limb1: 0x711699fa3b4d3f692ed68098,\n        limb2: 0x13c49044952c0905,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x200280211f25041384282499,\n        limb1: 0x9fb1b2282a48633d3e2ddaea,\n        limb2: 0x16db366a59b1dd0b,\n        limb3: 0x0,\n    },\n];\n#[inline(always)]\npub fn run_BN254_E12T_FROBENIUS_SQUARE_circuit(M: E12T) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd48\n    let in2 = CE::<CI<2>> {}; // 0x59e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe\n    let in3 = CE::<CI<3>> {}; // 0x30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd49\n    let in4 = CE::<CI<4>> {}; // -0x1 % p\n    let in5 = CE::<CI<5>> {}; // 0x59e26bcea0d48bacd4f263f1acdb5c4f5763473177ffffff\n\n    // INPUT stack\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let t0 = circuit_add(in6, in0);\n    let t1 = circuit_add(in7, in0);\n    let t2 = circuit_mul(in1, in8);\n    let t3 = circuit_mul(in1, in9);\n    let t4 = circuit_mul(in2, in10);\n    let t5 = circuit_mul(in2, in11);\n    let t6 = circuit_mul(in3, in12);\n    let t7 = circuit_mul(in3, in13);\n    let t8 = circuit_mul(in4, in14);\n    let t9 = circuit_mul(in4, in15);\n    let t10 = circuit_mul(in5, in16);\n    let t11 = circuit_mul(in5, in17);\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0xbb966e3de4bd44e5607cfd48, 0x5e6dd9e7e0acccb0c28f069f, 0x30644e72e131a029, 0x0],\n        ); // in1\n    circuit_inputs = circuit_inputs\n        .next_2([0xacdb5c4f5763473177fffffe, 0x59e26bcea0d48bacd4f263f1, 0x0, 0x0]); // in2\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0xbb966e3de4bd44e5607cfd49, 0x5e6dd9e7e0acccb0c28f069f, 0x30644e72e131a029, 0x0],\n        ); // in3\n    circuit_inputs = circuit_inputs\n        .next_2(\n            [0x6871ca8d3c208c16d87cfd46, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n        ); // in4\n    circuit_inputs = circuit_inputs\n        .next_2([0xacdb5c4f5763473177ffffff, 0x59e26bcea0d48bacd4f263f1, 0x0, 0x0]); // in5\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a0); // in6\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a1); // in7\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a0); // in8\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a1); // in9\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a0); // in10\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a1); // in11\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a0); // in16\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a1); // in17\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t0),\n        c0b0a1: outputs.get_output(t1),\n        c0b1a0: outputs.get_output(t2),\n        c0b1a1: outputs.get_output(t3),\n        c0b2a0: outputs.get_output(t4),\n        c0b2a1: outputs.get_output(t5),\n        c1b0a0: outputs.get_output(t6),\n        c1b0a1: outputs.get_output(t7),\n        c1b1a0: outputs.get_output(t8),\n        c1b1a1: outputs.get_output(t9),\n        c1b2a0: outputs.get_output(t10),\n        c1b2a1: outputs.get_output(t11),\n    };\n    return (res,);\n}\n#[inline(always)]\npub fn run_BN254_E12T_FROBENIUS_circuit(M: E12T) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0x2fb347984f7911f74c0bec3cf559b143b78cc310c2c3330c99e39557176f553d\n    let in2 = CE::<CI<2>> {}; // 0x16c9e55061ebae204ba4cc8bd75a079432ae2a1d0b7c9dce1665d51c640fcba2\n    let in3 = CE::<CI<3>> {}; // 0x5b54f5e64eea80180f3c0b75a181e84d33365f7be94ec72848a1f55921ea762\n    let in4 = CE::<CI<4>> {}; // 0x2c145edbe7fd8aee9f3a80b03b0b1c923685d2ea1bdec763c13b4711cd2b8126\n    let in5 = CE::<CI<5>> {}; // 0x1284b71c2865a7dfe8b99fdd76e68b605c521e08292f2176d60b35dadcc9e470\n    let in6 = CE::<CI<6>> {}; // 0x246996f3b4fae7e6a6327cfe12150b8e747992778eeec7e5ca5cf05f80f362ac\n    let in7 = CE::<CI<7>> {}; // 0x63cf305489af5dcdc5ec698b6e2f9b9dbaae0eda9c95998dc54014671a0135a\n    let in8 = CE::<CI<8>> {}; // 0x7c03cbcac41049a0704b5a7ec796f2b21807dc98fa25bd282d37f632623b0e3\n    let in9 = CE::<CI<9>> {}; // 0x183c1e74f798649e93a3661a4353ff4425c459b55aa1bd32ea2c810eab7692f\n    let in10 = CE::<\n        CI<10>,\n    > {}; // 0x12acf2ca76fd0675a27fb246c7729f7db080cb99678e2ac024c6b8ee6e0c2c4b\n\n    // INPUT stack\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let t0 = circuit_sub(in0, in12);\n    let t1 = circuit_add(in11, in0);\n    let t2 = circuit_sub(in0, in14);\n    let t3 = circuit_sub(in0, in16);\n    let t4 = circuit_sub(in0, in18);\n    let t5 = circuit_sub(in0, in20);\n    let t6 = circuit_sub(in0, in22);\n    let t7 = circuit_mul(in1, in13); // Fp2 mul start\n    let t8 = circuit_mul(in2, t2);\n    let t9 = circuit_sub(t7, t8); // Fp2 mul real part end\n    let t10 = circuit_mul(in1, t2);\n    let t11 = circuit_mul(in2, in13);\n    let t12 = circuit_add(t10, t11); // Fp2 mul imag part end\n    let t13 = circuit_mul(in3, in15); // Fp2 mul start\n    let t14 = circuit_mul(in4, t3);\n    let t15 = circuit_sub(t13, t14); // Fp2 mul real part end\n    let t16 = circuit_mul(in3, t3);\n    let t17 = circuit_mul(in4, in15);\n    let t18 = circuit_add(t16, t17); // Fp2 mul imag part end\n    let t19 = circuit_mul(in5, in17); // Fp2 mul start\n    let t20 = circuit_mul(in6, t4);\n    let t21 = circuit_sub(t19, t20); // Fp2 mul real part end\n    let t22 = circuit_mul(in5, t4);\n    let t23 = circuit_mul(in6, in17);\n    let t24 = circuit_add(t22, t23); // Fp2 mul imag part end\n    let t25 = circuit_mul(in7, in19); // Fp2 mul start\n    let t26 = circuit_mul(in8, t5);\n    let t27 = circuit_sub(t25, t26); // Fp2 mul real part end\n    let t28 = circuit_mul(in7, t5);\n    let t29 = circuit_mul(in8, in19);\n    let t30 = circuit_add(t28, t29); // Fp2 mul imag part end\n    let t31 = circuit_mul(in9, in21); // Fp2 mul start\n    let t32 = circuit_mul(in10, t6);\n    let t33 = circuit_sub(t31, t32); // Fp2 mul real part end\n    let t34 = circuit_mul(in9, t6);\n    let t35 = circuit_mul(in10, in21);\n    let t36 = circuit_add(t34, t35); // Fp2 mul imag part end\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (t1, t0, t9, t12, t15, t18, t21, t24, t27, t30, t33, t36).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs.next_span(E12T_FROBENIUS_BN254_CONSTANTS.span()); // in0 - in10\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a0); // in11\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a1); // in12\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a0); // in13\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a1); // in14\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a0); // in15\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a1); // in16\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a0); // in17\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a1); // in18\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a0); // in19\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a1); // in20\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a0); // in21\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a1); // in22\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t1),\n        c0b0a1: outputs.get_output(t0),\n        c0b1a0: outputs.get_output(t9),\n        c0b1a1: outputs.get_output(t12),\n        c0b2a0: outputs.get_output(t15),\n        c0b2a1: outputs.get_output(t18),\n        c1b0a0: outputs.get_output(t21),\n        c1b0a1: outputs.get_output(t24),\n        c1b1a0: outputs.get_output(t27),\n        c1b1a1: outputs.get_output(t30),\n        c1b2a0: outputs.get_output(t33),\n        c1b2a1: outputs.get_output(t36),\n    };\n    return (res,);\n}\nconst E12T_FROBENIUS_BN254_CONSTANTS: [u384; 11] = [\n    u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0xc2c3330c99e39557176f553d,\n        limb1: 0x4c0bec3cf559b143b78cc310,\n        limb2: 0x2fb347984f7911f7,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb7c9dce1665d51c640fcba2,\n        limb1: 0x4ba4cc8bd75a079432ae2a1d,\n        limb2: 0x16c9e55061ebae20,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbe94ec72848a1f55921ea762,\n        limb1: 0x80f3c0b75a181e84d33365f7,\n        limb2: 0x5b54f5e64eea801,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x1bdec763c13b4711cd2b8126,\n        limb1: 0x9f3a80b03b0b1c923685d2ea,\n        limb2: 0x2c145edbe7fd8aee,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x292f2176d60b35dadcc9e470,\n        limb1: 0xe8b99fdd76e68b605c521e08,\n        limb2: 0x1284b71c2865a7df,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8eeec7e5ca5cf05f80f362ac,\n        limb1: 0xa6327cfe12150b8e74799277,\n        limb2: 0x246996f3b4fae7e6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa9c95998dc54014671a0135a,\n        limb1: 0xdc5ec698b6e2f9b9dbaae0ed,\n        limb2: 0x63cf305489af5dc,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8fa25bd282d37f632623b0e3,\n        limb1: 0x704b5a7ec796f2b21807dc9,\n        limb2: 0x7c03cbcac41049a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x55aa1bd32ea2c810eab7692f,\n        limb1: 0xe93a3661a4353ff4425c459b,\n        limb2: 0x183c1e74f798649,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x678e2ac024c6b8ee6e0c2c4b,\n        limb1: 0xa27fb246c7729f7db080cb99,\n        limb2: 0x12acf2ca76fd0675,\n        limb3: 0x0,\n    },\n];\n#[inline(always)]\npub fn run_BN254_E12T_INVERSE_circuit(M: E12T) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0xa\n    let in1 = CE::<CI<1>> {}; // 0x9\n    let in2 = CE::<CI<2>> {}; // 0x0\n\n    // INPUT stack\n    let (in3, in4, in5) = (CE::<CI<3>> {}, CE::<CI<4>> {}, CE::<CI<5>> {});\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let t0 = circuit_mul(in3, in5); // Fp2 mul start\n    let t1 = circuit_mul(in4, in6);\n    let t2 = circuit_sub(t0, t1); // Fp2 mul real part end\n    let t3 = circuit_mul(in3, in6);\n    let t4 = circuit_mul(in4, in5);\n    let t5 = circuit_add(t3, t4); // Fp2 mul imag part end\n    let t6 = circuit_add(t2, t2); // Fp2 add coeff 0/1\n    let t7 = circuit_add(t5, t5); // Fp2 add coeff 1/1\n    let t8 = circuit_add(in7, in8);\n    let t9 = circuit_sub(in7, in8);\n    let t10 = circuit_mul(t8, t9);\n    let t11 = circuit_mul(in7, in8);\n    let t12 = circuit_add(t11, t11);\n    let t13 = circuit_add(t10, t12);\n    let t14 = circuit_mul(t13, in0);\n    let t15 = circuit_mul(t10, in1);\n    let t16 = circuit_sub(t15, t12);\n    let t17 = circuit_sub(t14, t15);\n    let t18 = circuit_sub(t17, t12);\n    let t19 = circuit_add(t16, t6); // Fp2 add coeff 0/1\n    let t20 = circuit_add(t18, t7); // Fp2 add coeff 1/1\n    let t21 = circuit_sub(t6, t10); // Fp2 sub coeff 0/1\n    let t22 = circuit_sub(t7, t12); // Fp2 sub coeff 1/1\n    let t23 = circuit_add(in3, in4);\n    let t24 = circuit_sub(in3, in4);\n    let t25 = circuit_mul(t23, t24);\n    let t26 = circuit_mul(in3, in4);\n    let t27 = circuit_add(t26, t26);\n    let t28 = circuit_sub(in3, in5); // Fp2 sub coeff 0/1\n    let t29 = circuit_sub(in4, in6); // Fp2 sub coeff 1/1\n    let t30 = circuit_add(t28, in7); // Fp2 add coeff 0/1\n    let t31 = circuit_add(t29, in8); // Fp2 add coeff 1/1\n    let t32 = circuit_mul(in5, in7); // Fp2 mul start\n    let t33 = circuit_mul(in6, in8);\n    let t34 = circuit_sub(t32, t33); // Fp2 mul real part end\n    let t35 = circuit_mul(in5, in8);\n    let t36 = circuit_mul(in6, in7);\n    let t37 = circuit_add(t35, t36); // Fp2 mul imag part end\n    let t38 = circuit_add(t34, t34); // Fp2 add coeff 0/1\n    let t39 = circuit_add(t37, t37); // Fp2 add coeff 1/1\n    let t40 = circuit_add(t30, t31);\n    let t41 = circuit_sub(t30, t31);\n    let t42 = circuit_mul(t40, t41);\n    let t43 = circuit_mul(t30, t31);\n    let t44 = circuit_add(t43, t43);\n    let t45 = circuit_add(t38, t39);\n    let t46 = circuit_mul(t45, in0);\n    let t47 = circuit_mul(t38, in1);\n    let t48 = circuit_sub(t47, t39);\n    let t49 = circuit_sub(t46, t47);\n    let t50 = circuit_sub(t49, t39);\n    let t51 = circuit_add(t48, t25); // Fp2 add coeff 0/1\n    let t52 = circuit_add(t50, t27); // Fp2 add coeff 1/1\n    let t53 = circuit_add(t21, t42); // Fp2 add coeff 0/1\n    let t54 = circuit_add(t22, t44); // Fp2 add coeff 1/1\n    let t55 = circuit_add(t53, t38); // Fp2 add coeff 0/1\n    let t56 = circuit_add(t54, t39); // Fp2 add coeff 1/1\n    let t57 = circuit_sub(t55, t25); // Fp2 sub coeff 0/1\n    let t58 = circuit_sub(t56, t27); // Fp2 sub coeff 1/1\n    let t59 = circuit_mul(in9, in11); // Fp2 mul start\n    let t60 = circuit_mul(in10, in12);\n    let t61 = circuit_sub(t59, t60); // Fp2 mul real part end\n    let t62 = circuit_mul(in9, in12);\n    let t63 = circuit_mul(in10, in11);\n    let t64 = circuit_add(t62, t63); // Fp2 mul imag part end\n    let t65 = circuit_add(t61, t61); // Fp2 add coeff 0/1\n    let t66 = circuit_add(t64, t64); // Fp2 add coeff 1/1\n    let t67 = circuit_add(in13, in14);\n    let t68 = circuit_sub(in13, in14);\n    let t69 = circuit_mul(t67, t68);\n    let t70 = circuit_mul(in13, in14);\n    let t71 = circuit_add(t70, t70);\n    let t72 = circuit_add(t69, t71);\n    let t73 = circuit_mul(t72, in0);\n    let t74 = circuit_mul(t69, in1);\n    let t75 = circuit_sub(t74, t71);\n    let t76 = circuit_sub(t73, t74);\n    let t77 = circuit_sub(t76, t71);\n    let t78 = circuit_add(t75, t65); // Fp2 add coeff 0/1\n    let t79 = circuit_add(t77, t66); // Fp2 add coeff 1/1\n    let t80 = circuit_sub(t65, t69); // Fp2 sub coeff 0/1\n    let t81 = circuit_sub(t66, t71); // Fp2 sub coeff 1/1\n    let t82 = circuit_add(in9, in10);\n    let t83 = circuit_sub(in9, in10);\n    let t84 = circuit_mul(t82, t83);\n    let t85 = circuit_mul(in9, in10);\n    let t86 = circuit_add(t85, t85);\n    let t87 = circuit_sub(in9, in11); // Fp2 sub coeff 0/1\n    let t88 = circuit_sub(in10, in12); // Fp2 sub coeff 1/1\n    let t89 = circuit_add(t87, in13); // Fp2 add coeff 0/1\n    let t90 = circuit_add(t88, in14); // Fp2 add coeff 1/1\n    let t91 = circuit_mul(in11, in13); // Fp2 mul start\n    let t92 = circuit_mul(in12, in14);\n    let t93 = circuit_sub(t91, t92); // Fp2 mul real part end\n    let t94 = circuit_mul(in11, in14);\n    let t95 = circuit_mul(in12, in13);\n    let t96 = circuit_add(t94, t95); // Fp2 mul imag part end\n    let t97 = circuit_add(t93, t93); // Fp2 add coeff 0/1\n    let t98 = circuit_add(t96, t96); // Fp2 add coeff 1/1\n    let t99 = circuit_add(t89, t90);\n    let t100 = circuit_sub(t89, t90);\n    let t101 = circuit_mul(t99, t100);\n    let t102 = circuit_mul(t89, t90);\n    let t103 = circuit_add(t102, t102);\n    let t104 = circuit_add(t97, t98);\n    let t105 = circuit_mul(t104, in0);\n    let t106 = circuit_mul(t97, in1);\n    let t107 = circuit_sub(t106, t98);\n    let t108 = circuit_sub(t105, t106);\n    let t109 = circuit_sub(t108, t98);\n    let t110 = circuit_add(t107, t84); // Fp2 add coeff 0/1\n    let t111 = circuit_add(t109, t86); // Fp2 add coeff 1/1\n    let t112 = circuit_add(t80, t101); // Fp2 add coeff 0/1\n    let t113 = circuit_add(t81, t103); // Fp2 add coeff 1/1\n    let t114 = circuit_add(t112, t97); // Fp2 add coeff 0/1\n    let t115 = circuit_add(t113, t98); // Fp2 add coeff 1/1\n    let t116 = circuit_sub(t114, t84); // Fp2 sub coeff 0/1\n    let t117 = circuit_sub(t115, t86); // Fp2 sub coeff 1/1\n    let t118 = circuit_add(t116, t117);\n    let t119 = circuit_mul(t118, in0);\n    let t120 = circuit_mul(t116, in1);\n    let t121 = circuit_sub(t120, t117);\n    let t122 = circuit_sub(t119, t120);\n    let t123 = circuit_sub(t122, t117);\n    let t124 = circuit_sub(t51, t121); // Fp6 sub coeff 0/5\n    let t125 = circuit_sub(t52, t123); // Fp6 sub coeff 1/5\n    let t126 = circuit_sub(t19, t110); // Fp6 sub coeff 2/5\n    let t127 = circuit_sub(t20, t111); // Fp6 sub coeff 3/5\n    let t128 = circuit_sub(t57, t78); // Fp6 sub coeff 4/5\n    let t129 = circuit_sub(t58, t79); // Fp6 sub coeff 5/5\n    let t130 = circuit_add(t124, t125);\n    let t131 = circuit_sub(t124, t125);\n    let t132 = circuit_mul(t130, t131);\n    let t133 = circuit_mul(t124, t125);\n    let t134 = circuit_add(t133, t133);\n    let t135 = circuit_add(t126, t127);\n    let t136 = circuit_sub(t126, t127);\n    let t137 = circuit_mul(t135, t136);\n    let t138 = circuit_mul(t126, t127);\n    let t139 = circuit_add(t138, t138);\n    let t140 = circuit_add(t128, t129);\n    let t141 = circuit_sub(t128, t129);\n    let t142 = circuit_mul(t140, t141);\n    let t143 = circuit_mul(t128, t129);\n    let t144 = circuit_add(t143, t143);\n    let t145 = circuit_mul(t124, t126); // Fp2 mul start\n    let t146 = circuit_mul(t125, t127);\n    let t147 = circuit_sub(t145, t146); // Fp2 mul real part end\n    let t148 = circuit_mul(t124, t127);\n    let t149 = circuit_mul(t125, t126);\n    let t150 = circuit_add(t148, t149); // Fp2 mul imag part end\n    let t151 = circuit_mul(t124, t128); // Fp2 mul start\n    let t152 = circuit_mul(t125, t129);\n    let t153 = circuit_sub(t151, t152); // Fp2 mul real part end\n    let t154 = circuit_mul(t124, t129);\n    let t155 = circuit_mul(t125, t128);\n    let t156 = circuit_add(t154, t155); // Fp2 mul imag part end\n    let t157 = circuit_mul(t126, t128); // Fp2 mul start\n    let t158 = circuit_mul(t127, t129);\n    let t159 = circuit_sub(t157, t158); // Fp2 mul real part end\n    let t160 = circuit_mul(t126, t129);\n    let t161 = circuit_mul(t127, t128);\n    let t162 = circuit_add(t160, t161); // Fp2 mul imag part end\n    let t163 = circuit_add(t159, t162);\n    let t164 = circuit_mul(t163, in0);\n    let t165 = circuit_mul(t159, in1);\n    let t166 = circuit_sub(t165, t162);\n    let t167 = circuit_sub(t164, t165);\n    let t168 = circuit_sub(t167, t162);\n    let t169 = circuit_sub(in2, t166); // Fp2 neg coeff 0/1\n    let t170 = circuit_sub(in2, t168); // Fp2 neg coeff 1/1\n    let t171 = circuit_add(t169, t132); // Fp2 add coeff 0/1\n    let t172 = circuit_add(t170, t134); // Fp2 add coeff 1/1\n    let t173 = circuit_add(t142, t144);\n    let t174 = circuit_mul(t173, in0);\n    let t175 = circuit_mul(t142, in1);\n    let t176 = circuit_sub(t175, t144);\n    let t177 = circuit_sub(t174, t175);\n    let t178 = circuit_sub(t177, t144);\n    let t179 = circuit_sub(t176, t147); // Fp2 sub coeff 0/1\n    let t180 = circuit_sub(t178, t150); // Fp2 sub coeff 1/1\n    let t181 = circuit_sub(t137, t153); // Fp2 sub coeff 0/1\n    let t182 = circuit_sub(t139, t156); // Fp2 sub coeff 1/1\n    let t183 = circuit_mul(t124, t171); // Fp2 mul start\n    let t184 = circuit_mul(t125, t172);\n    let t185 = circuit_sub(t183, t184); // Fp2 mul real part end\n    let t186 = circuit_mul(t124, t172);\n    let t187 = circuit_mul(t125, t171);\n    let t188 = circuit_add(t186, t187); // Fp2 mul imag part end\n    let t189 = circuit_mul(t128, t179); // Fp2 mul start\n    let t190 = circuit_mul(t129, t180);\n    let t191 = circuit_sub(t189, t190); // Fp2 mul real part end\n    let t192 = circuit_mul(t128, t180);\n    let t193 = circuit_mul(t129, t179);\n    let t194 = circuit_add(t192, t193); // Fp2 mul imag part end\n    let t195 = circuit_mul(t126, t181); // Fp2 mul start\n    let t196 = circuit_mul(t127, t182);\n    let t197 = circuit_sub(t195, t196); // Fp2 mul real part end\n    let t198 = circuit_mul(t126, t182);\n    let t199 = circuit_mul(t127, t181);\n    let t200 = circuit_add(t198, t199); // Fp2 mul imag part end\n    let t201 = circuit_add(t191, t197); // Fp2 add coeff 0/1\n    let t202 = circuit_add(t194, t200); // Fp2 add coeff 1/1\n    let t203 = circuit_add(t201, t202);\n    let t204 = circuit_mul(t203, in0);\n    let t205 = circuit_mul(t201, in1);\n    let t206 = circuit_sub(t205, t202);\n    let t207 = circuit_sub(t204, t205);\n    let t208 = circuit_sub(t207, t202);\n    let t209 = circuit_add(t185, t206); // Fp2 add coeff 0/1\n    let t210 = circuit_add(t188, t208); // Fp2 add coeff 1/1\n    let t211 = circuit_mul(t209, t209); // Fp2 Inv start\n    let t212 = circuit_mul(t210, t210);\n    let t213 = circuit_add(t211, t212);\n    let t214 = circuit_inverse(t213);\n    let t215 = circuit_mul(t209, t214); // Fp2 Inv real part end\n    let t216 = circuit_mul(t210, t214);\n    let t217 = circuit_sub(in2, t216); // Fp2 Inv imag part end\n    let t218 = circuit_mul(t171, t215); // Fp2 mul start\n    let t219 = circuit_mul(t172, t217);\n    let t220 = circuit_sub(t218, t219); // Fp2 mul real part end\n    let t221 = circuit_mul(t171, t217);\n    let t222 = circuit_mul(t172, t215);\n    let t223 = circuit_add(t221, t222); // Fp2 mul imag part end\n    let t224 = circuit_mul(t179, t215); // Fp2 mul start\n    let t225 = circuit_mul(t180, t217);\n    let t226 = circuit_sub(t224, t225); // Fp2 mul real part end\n    let t227 = circuit_mul(t179, t217);\n    let t228 = circuit_mul(t180, t215);\n    let t229 = circuit_add(t227, t228); // Fp2 mul imag part end\n    let t230 = circuit_mul(t181, t215); // Fp2 mul start\n    let t231 = circuit_mul(t182, t217);\n    let t232 = circuit_sub(t230, t231); // Fp2 mul real part end\n    let t233 = circuit_mul(t181, t217);\n    let t234 = circuit_mul(t182, t215);\n    let t235 = circuit_add(t233, t234); // Fp2 mul imag part end\n    let t236 = circuit_mul(in3, t220); // Fp2 mul start\n    let t237 = circuit_mul(in4, t223);\n    let t238 = circuit_sub(t236, t237); // Fp2 mul real part end\n    let t239 = circuit_mul(in3, t223);\n    let t240 = circuit_mul(in4, t220);\n    let t241 = circuit_add(t239, t240); // Fp2 mul imag part end\n    let t242 = circuit_mul(in5, t226); // Fp2 mul start\n    let t243 = circuit_mul(in6, t229);\n    let t244 = circuit_sub(t242, t243); // Fp2 mul real part end\n    let t245 = circuit_mul(in5, t229);\n    let t246 = circuit_mul(in6, t226);\n    let t247 = circuit_add(t245, t246); // Fp2 mul imag part end\n    let t248 = circuit_mul(in7, t232); // Fp2 mul start\n    let t249 = circuit_mul(in8, t235);\n    let t250 = circuit_sub(t248, t249); // Fp2 mul real part end\n    let t251 = circuit_mul(in7, t235);\n    let t252 = circuit_mul(in8, t232);\n    let t253 = circuit_add(t251, t252); // Fp2 mul imag part end\n    let t254 = circuit_add(in5, in7); // Fp2 add coeff 0/1\n    let t255 = circuit_add(in6, in8); // Fp2 add coeff 1/1\n    let t256 = circuit_add(t226, t232); // Fp2 add coeff 0/1\n    let t257 = circuit_add(t229, t235); // Fp2 add coeff 1/1\n    let t258 = circuit_mul(t254, t256); // Fp2 mul start\n    let t259 = circuit_mul(t255, t257);\n    let t260 = circuit_sub(t258, t259); // Fp2 mul real part end\n    let t261 = circuit_mul(t254, t257);\n    let t262 = circuit_mul(t255, t256);\n    let t263 = circuit_add(t261, t262); // Fp2 mul imag part end\n    let t264 = circuit_sub(t260, t244); // Fp2 sub coeff 0/1\n    let t265 = circuit_sub(t263, t247); // Fp2 sub coeff 1/1\n    let t266 = circuit_sub(t264, t250); // Fp2 sub coeff 0/1\n    let t267 = circuit_sub(t265, t253); // Fp2 sub coeff 1/1\n    let t268 = circuit_add(t266, t267);\n    let t269 = circuit_mul(t268, in0);\n    let t270 = circuit_mul(t266, in1);\n    let t271 = circuit_sub(t270, t267);\n    let t272 = circuit_sub(t269, t270);\n    let t273 = circuit_sub(t272, t267);\n    let t274 = circuit_add(t271, t238); // Fp2 add coeff 0/1\n    let t275 = circuit_add(t273, t241); // Fp2 add coeff 1/1\n    let t276 = circuit_add(in3, in5); // Fp2 add coeff 0/1\n    let t277 = circuit_add(in4, in6); // Fp2 add coeff 1/1\n    let t278 = circuit_add(t220, t226); // Fp2 add coeff 0/1\n    let t279 = circuit_add(t223, t229); // Fp2 add coeff 1/1\n    let t280 = circuit_mul(t276, t278); // Fp2 mul start\n    let t281 = circuit_mul(t277, t279);\n    let t282 = circuit_sub(t280, t281); // Fp2 mul real part end\n    let t283 = circuit_mul(t276, t279);\n    let t284 = circuit_mul(t277, t278);\n    let t285 = circuit_add(t283, t284); // Fp2 mul imag part end\n    let t286 = circuit_sub(t282, t238); // Fp2 sub coeff 0/1\n    let t287 = circuit_sub(t285, t241); // Fp2 sub coeff 1/1\n    let t288 = circuit_sub(t286, t244); // Fp2 sub coeff 0/1\n    let t289 = circuit_sub(t287, t247); // Fp2 sub coeff 1/1\n    let t290 = circuit_add(t250, t253);\n    let t291 = circuit_mul(t290, in0);\n    let t292 = circuit_mul(t250, in1);\n    let t293 = circuit_sub(t292, t253);\n    let t294 = circuit_sub(t291, t292);\n    let t295 = circuit_sub(t294, t253);\n    let t296 = circuit_add(t288, t293); // Fp2 add coeff 0/1\n    let t297 = circuit_add(t289, t295); // Fp2 add coeff 1/1\n    let t298 = circuit_add(in3, in7); // Fp2 add coeff 0/1\n    let t299 = circuit_add(in4, in8); // Fp2 add coeff 1/1\n    let t300 = circuit_add(t220, t232); // Fp2 add coeff 0/1\n    let t301 = circuit_add(t223, t235); // Fp2 add coeff 1/1\n    let t302 = circuit_mul(t300, t298); // Fp2 mul start\n    let t303 = circuit_mul(t301, t299);\n    let t304 = circuit_sub(t302, t303); // Fp2 mul real part end\n    let t305 = circuit_mul(t300, t299);\n    let t306 = circuit_mul(t301, t298);\n    let t307 = circuit_add(t305, t306); // Fp2 mul imag part end\n    let t308 = circuit_sub(t304, t238); // Fp2 sub coeff 0/1\n    let t309 = circuit_sub(t307, t241); // Fp2 sub coeff 1/1\n    let t310 = circuit_sub(t308, t250); // Fp2 sub coeff 0/1\n    let t311 = circuit_sub(t309, t253); // Fp2 sub coeff 1/1\n    let t312 = circuit_add(t310, t244); // Fp2 add coeff 0/1\n    let t313 = circuit_add(t311, t247); // Fp2 add coeff 1/1\n    let t314 = circuit_mul(in9, t220); // Fp2 mul start\n    let t315 = circuit_mul(in10, t223);\n    let t316 = circuit_sub(t314, t315); // Fp2 mul real part end\n    let t317 = circuit_mul(in9, t223);\n    let t318 = circuit_mul(in10, t220);\n    let t319 = circuit_add(t317, t318); // Fp2 mul imag part end\n    let t320 = circuit_mul(in11, t226); // Fp2 mul start\n    let t321 = circuit_mul(in12, t229);\n    let t322 = circuit_sub(t320, t321); // Fp2 mul real part end\n    let t323 = circuit_mul(in11, t229);\n    let t324 = circuit_mul(in12, t226);\n    let t325 = circuit_add(t323, t324); // Fp2 mul imag part end\n    let t326 = circuit_mul(in13, t232); // Fp2 mul start\n    let t327 = circuit_mul(in14, t235);\n    let t328 = circuit_sub(t326, t327); // Fp2 mul real part end\n    let t329 = circuit_mul(in13, t235);\n    let t330 = circuit_mul(in14, t232);\n    let t331 = circuit_add(t329, t330); // Fp2 mul imag part end\n    let t332 = circuit_add(in11, in13); // Fp2 add coeff 0/1\n    let t333 = circuit_add(in12, in14); // Fp2 add coeff 1/1\n    let t334 = circuit_add(t226, t232); // Fp2 add coeff 0/1\n    let t335 = circuit_add(t229, t235); // Fp2 add coeff 1/1\n    let t336 = circuit_mul(t332, t334); // Fp2 mul start\n    let t337 = circuit_mul(t333, t335);\n    let t338 = circuit_sub(t336, t337); // Fp2 mul real part end\n    let t339 = circuit_mul(t332, t335);\n    let t340 = circuit_mul(t333, t334);\n    let t341 = circuit_add(t339, t340); // Fp2 mul imag part end\n    let t342 = circuit_sub(t338, t322); // Fp2 sub coeff 0/1\n    let t343 = circuit_sub(t341, t325); // Fp2 sub coeff 1/1\n    let t344 = circuit_sub(t342, t328); // Fp2 sub coeff 0/1\n    let t345 = circuit_sub(t343, t331); // Fp2 sub coeff 1/1\n    let t346 = circuit_add(t344, t345);\n    let t347 = circuit_mul(t346, in0);\n    let t348 = circuit_mul(t344, in1);\n    let t349 = circuit_sub(t348, t345);\n    let t350 = circuit_sub(t347, t348);\n    let t351 = circuit_sub(t350, t345);\n    let t352 = circuit_add(t349, t316); // Fp2 add coeff 0/1\n    let t353 = circuit_add(t351, t319); // Fp2 add coeff 1/1\n    let t354 = circuit_add(in9, in11); // Fp2 add coeff 0/1\n    let t355 = circuit_add(in10, in12); // Fp2 add coeff 1/1\n    let t356 = circuit_add(t220, t226); // Fp2 add coeff 0/1\n    let t357 = circuit_add(t223, t229); // Fp2 add coeff 1/1\n    let t358 = circuit_mul(t354, t356); // Fp2 mul start\n    let t359 = circuit_mul(t355, t357);\n    let t360 = circuit_sub(t358, t359); // Fp2 mul real part end\n    let t361 = circuit_mul(t354, t357);\n    let t362 = circuit_mul(t355, t356);\n    let t363 = circuit_add(t361, t362); // Fp2 mul imag part end\n    let t364 = circuit_sub(t360, t316); // Fp2 sub coeff 0/1\n    let t365 = circuit_sub(t363, t319); // Fp2 sub coeff 1/1\n    let t366 = circuit_sub(t364, t322); // Fp2 sub coeff 0/1\n    let t367 = circuit_sub(t365, t325); // Fp2 sub coeff 1/1\n    let t368 = circuit_add(t328, t331);\n    let t369 = circuit_mul(t368, in0);\n    let t370 = circuit_mul(t328, in1);\n    let t371 = circuit_sub(t370, t331);\n    let t372 = circuit_sub(t369, t370);\n    let t373 = circuit_sub(t372, t331);\n    let t374 = circuit_add(t366, t371); // Fp2 add coeff 0/1\n    let t375 = circuit_add(t367, t373); // Fp2 add coeff 1/1\n    let t376 = circuit_add(in9, in13); // Fp2 add coeff 0/1\n    let t377 = circuit_add(in10, in14); // Fp2 add coeff 1/1\n    let t378 = circuit_add(t220, t232); // Fp2 add coeff 0/1\n    let t379 = circuit_add(t223, t235); // Fp2 add coeff 1/1\n    let t380 = circuit_mul(t378, t376); // Fp2 mul start\n    let t381 = circuit_mul(t379, t377);\n    let t382 = circuit_sub(t380, t381); // Fp2 mul real part end\n    let t383 = circuit_mul(t378, t377);\n    let t384 = circuit_mul(t379, t376);\n    let t385 = circuit_add(t383, t384); // Fp2 mul imag part end\n    let t386 = circuit_sub(t382, t316); // Fp2 sub coeff 0/1\n    let t387 = circuit_sub(t385, t319); // Fp2 sub coeff 1/1\n    let t388 = circuit_sub(t386, t328); // Fp2 sub coeff 0/1\n    let t389 = circuit_sub(t387, t331); // Fp2 sub coeff 1/1\n    let t390 = circuit_add(t388, t322); // Fp2 add coeff 0/1\n    let t391 = circuit_add(t389, t325); // Fp2 add coeff 1/1\n    let t392 = circuit_sub(in2, t352); // Fp6 neg coeff 0/5\n    let t393 = circuit_sub(in2, t353); // Fp6 neg coeff 1/5\n    let t394 = circuit_sub(in2, t374); // Fp6 neg coeff 2/5\n    let t395 = circuit_sub(in2, t375); // Fp6 neg coeff 3/5\n    let t396 = circuit_sub(in2, t390); // Fp6 neg coeff 4/5\n    let t397 = circuit_sub(in2, t391); // Fp6 neg coeff 5/5\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (\n        t274, t275, t296, t297, t312, t313, t392, t393, t394, t395, t396, t397,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0xa, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x9, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in2\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a0); // in3\n    circuit_inputs = circuit_inputs.next_2(M.c0b0a1); // in4\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a0); // in5\n    circuit_inputs = circuit_inputs.next_2(M.c0b1a1); // in6\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a0); // in7\n    circuit_inputs = circuit_inputs.next_2(M.c0b2a1); // in8\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a0); // in9\n    circuit_inputs = circuit_inputs.next_2(M.c1b0a1); // in10\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a0); // in11\n    circuit_inputs = circuit_inputs.next_2(M.c1b1a1); // in12\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a0); // in13\n    circuit_inputs = circuit_inputs.next_2(M.c1b2a1); // in14\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t274),\n        c0b0a1: outputs.get_output(t275),\n        c0b1a0: outputs.get_output(t296),\n        c0b1a1: outputs.get_output(t297),\n        c0b2a0: outputs.get_output(t312),\n        c0b2a1: outputs.get_output(t313),\n        c1b0a0: outputs.get_output(t392),\n        c1b0a1: outputs.get_output(t393),\n        c1b1a0: outputs.get_output(t394),\n        c1b1a1: outputs.get_output(t395),\n        c1b2a0: outputs.get_output(t396),\n        c1b2a1: outputs.get_output(t397),\n    };\n    return (res,);\n}\n#[inline(always)]\npub fn run_BN254_E12T_MUL_circuit(X: E12T, Y: E12T) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0xa\n    let in1 = CE::<CI<1>> {}; // 0x9\n\n    // INPUT stack\n    let (in2, in3, in4) = (CE::<CI<2>> {}, CE::<CI<3>> {}, CE::<CI<4>> {});\n    let (in5, in6, in7) = (CE::<CI<5>> {}, CE::<CI<6>> {}, CE::<CI<7>> {});\n    let (in8, in9, in10) = (CE::<CI<8>> {}, CE::<CI<9>> {}, CE::<CI<10>> {});\n    let (in11, in12, in13) = (CE::<CI<11>> {}, CE::<CI<12>> {}, CE::<CI<13>> {});\n    let (in14, in15, in16) = (CE::<CI<14>> {}, CE::<CI<15>> {}, CE::<CI<16>> {});\n    let (in17, in18, in19) = (CE::<CI<17>> {}, CE::<CI<18>> {}, CE::<CI<19>> {});\n    let (in20, in21, in22) = (CE::<CI<20>> {}, CE::<CI<21>> {}, CE::<CI<22>> {});\n    let (in23, in24, in25) = (CE::<CI<23>> {}, CE::<CI<24>> {}, CE::<CI<25>> {});\n    let t0 = circuit_add(in2, in8); // Fp6 add coeff 0/5\n    let t1 = circuit_add(in3, in9); // Fp6 add coeff 1/5\n    let t2 = circuit_add(in4, in10); // Fp6 add coeff 2/5\n    let t3 = circuit_add(in5, in11); // Fp6 add coeff 3/5\n    let t4 = circuit_add(in6, in12); // Fp6 add coeff 4/5\n    let t5 = circuit_add(in7, in13); // Fp6 add coeff 5/5\n    let t6 = circuit_add(in14, in20); // Fp6 add coeff 0/5\n    let t7 = circuit_add(in15, in21); // Fp6 add coeff 1/5\n    let t8 = circuit_add(in16, in22); // Fp6 add coeff 2/5\n    let t9 = circuit_add(in17, in23); // Fp6 add coeff 3/5\n    let t10 = circuit_add(in18, in24); // Fp6 add coeff 4/5\n    let t11 = circuit_add(in19, in25); // Fp6 add coeff 5/5\n    let t12 = circuit_mul(t0, t6); // Fp2 mul start\n    let t13 = circuit_mul(t1, t7);\n    let t14 = circuit_sub(t12, t13); // Fp2 mul real part end\n    let t15 = circuit_mul(t0, t7);\n    let t16 = circuit_mul(t1, t6);\n    let t17 = circuit_add(t15, t16); // Fp2 mul imag part end\n    let t18 = circuit_mul(t2, t8); // Fp2 mul start\n    let t19 = circuit_mul(t3, t9);\n    let t20 = circuit_sub(t18, t19); // Fp2 mul real part end\n    let t21 = circuit_mul(t2, t9);\n    let t22 = circuit_mul(t3, t8);\n    let t23 = circuit_add(t21, t22); // Fp2 mul imag part end\n    let t24 = circuit_mul(t4, t10); // Fp2 mul start\n    let t25 = circuit_mul(t5, t11);\n    let t26 = circuit_sub(t24, t25); // Fp2 mul real part end\n    let t27 = circuit_mul(t4, t11);\n    let t28 = circuit_mul(t5, t10);\n    let t29 = circuit_add(t27, t28); // Fp2 mul imag part end\n    let t30 = circuit_add(t2, t4); // Fp2 add coeff 0/1\n    let t31 = circuit_add(t3, t5); // Fp2 add coeff 1/1\n    let t32 = circuit_add(t8, t10); // Fp2 add coeff 0/1\n    let t33 = circuit_add(t9, t11); // Fp2 add coeff 1/1\n    let t34 = circuit_mul(t30, t32); // Fp2 mul start\n    let t35 = circuit_mul(t31, t33);\n    let t36 = circuit_sub(t34, t35); // Fp2 mul real part end\n    let t37 = circuit_mul(t30, t33);\n    let t38 = circuit_mul(t31, t32);\n    let t39 = circuit_add(t37, t38); // Fp2 mul imag part end\n    let t40 = circuit_sub(t36, t20); // Fp2 sub coeff 0/1\n    let t41 = circuit_sub(t39, t23); // Fp2 sub coeff 1/1\n    let t42 = circuit_sub(t40, t26); // Fp2 sub coeff 0/1\n    let t43 = circuit_sub(t41, t29); // Fp2 sub coeff 1/1\n    let t44 = circuit_add(t42, t43);\n    let t45 = circuit_mul(t44, in0);\n    let t46 = circuit_mul(t42, in1);\n    let t47 = circuit_sub(t46, t43);\n    let t48 = circuit_sub(t45, t46);\n    let t49 = circuit_sub(t48, t43);\n    let t50 = circuit_add(t47, t14); // Fp2 add coeff 0/1\n    let t51 = circuit_add(t49, t17); // Fp2 add coeff 1/1\n    let t52 = circuit_add(t0, t2); // Fp2 add coeff 0/1\n    let t53 = circuit_add(t1, t3); // Fp2 add coeff 1/1\n    let t54 = circuit_add(t6, t8); // Fp2 add coeff 0/1\n    let t55 = circuit_add(t7, t9); // Fp2 add coeff 1/1\n    let t56 = circuit_mul(t52, t54); // Fp2 mul start\n    let t57 = circuit_mul(t53, t55);\n    let t58 = circuit_sub(t56, t57); // Fp2 mul real part end\n    let t59 = circuit_mul(t52, t55);\n    let t60 = circuit_mul(t53, t54);\n    let t61 = circuit_add(t59, t60); // Fp2 mul imag part end\n    let t62 = circuit_sub(t58, t14); // Fp2 sub coeff 0/1\n    let t63 = circuit_sub(t61, t17); // Fp2 sub coeff 1/1\n    let t64 = circuit_sub(t62, t20); // Fp2 sub coeff 0/1\n    let t65 = circuit_sub(t63, t23); // Fp2 sub coeff 1/1\n    let t66 = circuit_add(t26, t29);\n    let t67 = circuit_mul(t66, in0);\n    let t68 = circuit_mul(t26, in1);\n    let t69 = circuit_sub(t68, t29);\n    let t70 = circuit_sub(t67, t68);\n    let t71 = circuit_sub(t70, t29);\n    let t72 = circuit_add(t64, t69); // Fp2 add coeff 0/1\n    let t73 = circuit_add(t65, t71); // Fp2 add coeff 1/1\n    let t74 = circuit_add(t0, t4); // Fp2 add coeff 0/1\n    let t75 = circuit_add(t1, t5); // Fp2 add coeff 1/1\n    let t76 = circuit_add(t6, t10); // Fp2 add coeff 0/1\n    let t77 = circuit_add(t7, t11); // Fp2 add coeff 1/1\n    let t78 = circuit_mul(t76, t74); // Fp2 mul start\n    let t79 = circuit_mul(t77, t75);\n    let t80 = circuit_sub(t78, t79); // Fp2 mul real part end\n    let t81 = circuit_mul(t76, t75);\n    let t82 = circuit_mul(t77, t74);\n    let t83 = circuit_add(t81, t82); // Fp2 mul imag part end\n    let t84 = circuit_sub(t80, t14); // Fp2 sub coeff 0/1\n    let t85 = circuit_sub(t83, t17); // Fp2 sub coeff 1/1\n    let t86 = circuit_sub(t84, t26); // Fp2 sub coeff 0/1\n    let t87 = circuit_sub(t85, t29); // Fp2 sub coeff 1/1\n    let t88 = circuit_add(t86, t20); // Fp2 add coeff 0/1\n    let t89 = circuit_add(t87, t23); // Fp2 add coeff 1/1\n    let t90 = circuit_mul(in2, in14); // Fp2 mul start\n    let t91 = circuit_mul(in3, in15);\n    let t92 = circuit_sub(t90, t91); // Fp2 mul real part end\n    let t93 = circuit_mul(in2, in15);\n    let t94 = circuit_mul(in3, in14);\n    let t95 = circuit_add(t93, t94); // Fp2 mul imag part end\n    let t96 = circuit_mul(in4, in16); // Fp2 mul start\n    let t97 = circuit_mul(in5, in17);\n    let t98 = circuit_sub(t96, t97); // Fp2 mul real part end\n    let t99 = circuit_mul(in4, in17);\n    let t100 = circuit_mul(in5, in16);\n    let t101 = circuit_add(t99, t100); // Fp2 mul imag part end\n    let t102 = circuit_mul(in6, in18); // Fp2 mul start\n    let t103 = circuit_mul(in7, in19);\n    let t104 = circuit_sub(t102, t103); // Fp2 mul real part end\n    let t105 = circuit_mul(in6, in19);\n    let t106 = circuit_mul(in7, in18);\n    let t107 = circuit_add(t105, t106); // Fp2 mul imag part end\n    let t108 = circuit_add(in4, in6); // Fp2 add coeff 0/1\n    let t109 = circuit_add(in5, in7); // Fp2 add coeff 1/1\n    let t110 = circuit_add(in16, in18); // Fp2 add coeff 0/1\n    let t111 = circuit_add(in17, in19); // Fp2 add coeff 1/1\n    let t112 = circuit_mul(t108, t110); // Fp2 mul start\n    let t113 = circuit_mul(t109, t111);\n    let t114 = circuit_sub(t112, t113); // Fp2 mul real part end\n    let t115 = circuit_mul(t108, t111);\n    let t116 = circuit_mul(t109, t110);\n    let t117 = circuit_add(t115, t116); // Fp2 mul imag part end\n    let t118 = circuit_sub(t114, t98); // Fp2 sub coeff 0/1\n    let t119 = circuit_sub(t117, t101); // Fp2 sub coeff 1/1\n    let t120 = circuit_sub(t118, t104); // Fp2 sub coeff 0/1\n    let t121 = circuit_sub(t119, t107); // Fp2 sub coeff 1/1\n    let t122 = circuit_add(t120, t121);\n    let t123 = circuit_mul(t122, in0);\n    let t124 = circuit_mul(t120, in1);\n    let t125 = circuit_sub(t124, t121);\n    let t126 = circuit_sub(t123, t124);\n    let t127 = circuit_sub(t126, t121);\n    let t128 = circuit_add(t125, t92); // Fp2 add coeff 0/1\n    let t129 = circuit_add(t127, t95); // Fp2 add coeff 1/1\n    let t130 = circuit_add(in2, in4); // Fp2 add coeff 0/1\n    let t131 = circuit_add(in3, in5); // Fp2 add coeff 1/1\n    let t132 = circuit_add(in14, in16); // Fp2 add coeff 0/1\n    let t133 = circuit_add(in15, in17); // Fp2 add coeff 1/1\n    let t134 = circuit_mul(t130, t132); // Fp2 mul start\n    let t135 = circuit_mul(t131, t133);\n    let t136 = circuit_sub(t134, t135); // Fp2 mul real part end\n    let t137 = circuit_mul(t130, t133);\n    let t138 = circuit_mul(t131, t132);\n    let t139 = circuit_add(t137, t138); // Fp2 mul imag part end\n    let t140 = circuit_sub(t136, t92); // Fp2 sub coeff 0/1\n    let t141 = circuit_sub(t139, t95); // Fp2 sub coeff 1/1\n    let t142 = circuit_sub(t140, t98); // Fp2 sub coeff 0/1\n    let t143 = circuit_sub(t141, t101); // Fp2 sub coeff 1/1\n    let t144 = circuit_add(t104, t107);\n    let t145 = circuit_mul(t144, in0);\n    let t146 = circuit_mul(t104, in1);\n    let t147 = circuit_sub(t146, t107);\n    let t148 = circuit_sub(t145, t146);\n    let t149 = circuit_sub(t148, t107);\n    let t150 = circuit_add(t142, t147); // Fp2 add coeff 0/1\n    let t151 = circuit_add(t143, t149); // Fp2 add coeff 1/1\n    let t152 = circuit_add(in2, in6); // Fp2 add coeff 0/1\n    let t153 = circuit_add(in3, in7); // Fp2 add coeff 1/1\n    let t154 = circuit_add(in14, in18); // Fp2 add coeff 0/1\n    let t155 = circuit_add(in15, in19); // Fp2 add coeff 1/1\n    let t156 = circuit_mul(t154, t152); // Fp2 mul start\n    let t157 = circuit_mul(t155, t153);\n    let t158 = circuit_sub(t156, t157); // Fp2 mul real part end\n    let t159 = circuit_mul(t154, t153);\n    let t160 = circuit_mul(t155, t152);\n    let t161 = circuit_add(t159, t160); // Fp2 mul imag part end\n    let t162 = circuit_sub(t158, t92); // Fp2 sub coeff 0/1\n    let t163 = circuit_sub(t161, t95); // Fp2 sub coeff 1/1\n    let t164 = circuit_sub(t162, t104); // Fp2 sub coeff 0/1\n    let t165 = circuit_sub(t163, t107); // Fp2 sub coeff 1/1\n    let t166 = circuit_add(t164, t98); // Fp2 add coeff 0/1\n    let t167 = circuit_add(t165, t101); // Fp2 add coeff 1/1\n    let t168 = circuit_mul(in8, in20); // Fp2 mul start\n    let t169 = circuit_mul(in9, in21);\n    let t170 = circuit_sub(t168, t169); // Fp2 mul real part end\n    let t171 = circuit_mul(in8, in21);\n    let t172 = circuit_mul(in9, in20);\n    let t173 = circuit_add(t171, t172); // Fp2 mul imag part end\n    let t174 = circuit_mul(in10, in22); // Fp2 mul start\n    let t175 = circuit_mul(in11, in23);\n    let t176 = circuit_sub(t174, t175); // Fp2 mul real part end\n    let t177 = circuit_mul(in10, in23);\n    let t178 = circuit_mul(in11, in22);\n    let t179 = circuit_add(t177, t178); // Fp2 mul imag part end\n    let t180 = circuit_mul(in12, in24); // Fp2 mul start\n    let t181 = circuit_mul(in13, in25);\n    let t182 = circuit_sub(t180, t181); // Fp2 mul real part end\n    let t183 = circuit_mul(in12, in25);\n    let t184 = circuit_mul(in13, in24);\n    let t185 = circuit_add(t183, t184); // Fp2 mul imag part end\n    let t186 = circuit_add(in10, in12); // Fp2 add coeff 0/1\n    let t187 = circuit_add(in11, in13); // Fp2 add coeff 1/1\n    let t188 = circuit_add(in22, in24); // Fp2 add coeff 0/1\n    let t189 = circuit_add(in23, in25); // Fp2 add coeff 1/1\n    let t190 = circuit_mul(t186, t188); // Fp2 mul start\n    let t191 = circuit_mul(t187, t189);\n    let t192 = circuit_sub(t190, t191); // Fp2 mul real part end\n    let t193 = circuit_mul(t186, t189);\n    let t194 = circuit_mul(t187, t188);\n    let t195 = circuit_add(t193, t194); // Fp2 mul imag part end\n    let t196 = circuit_sub(t192, t176); // Fp2 sub coeff 0/1\n    let t197 = circuit_sub(t195, t179); // Fp2 sub coeff 1/1\n    let t198 = circuit_sub(t196, t182); // Fp2 sub coeff 0/1\n    let t199 = circuit_sub(t197, t185); // Fp2 sub coeff 1/1\n    let t200 = circuit_add(t198, t199);\n    let t201 = circuit_mul(t200, in0);\n    let t202 = circuit_mul(t198, in1);\n    let t203 = circuit_sub(t202, t199);\n    let t204 = circuit_sub(t201, t202);\n    let t205 = circuit_sub(t204, t199);\n    let t206 = circuit_add(t203, t170); // Fp2 add coeff 0/1\n    let t207 = circuit_add(t205, t173); // Fp2 add coeff 1/1\n    let t208 = circuit_add(in8, in10); // Fp2 add coeff 0/1\n    let t209 = circuit_add(in9, in11); // Fp2 add coeff 1/1\n    let t210 = circuit_add(in20, in22); // Fp2 add coeff 0/1\n    let t211 = circuit_add(in21, in23); // Fp2 add coeff 1/1\n    let t212 = circuit_mul(t208, t210); // Fp2 mul start\n    let t213 = circuit_mul(t209, t211);\n    let t214 = circuit_sub(t212, t213); // Fp2 mul real part end\n    let t215 = circuit_mul(t208, t211);\n    let t216 = circuit_mul(t209, t210);\n    let t217 = circuit_add(t215, t216); // Fp2 mul imag part end\n    let t218 = circuit_sub(t214, t170); // Fp2 sub coeff 0/1\n    let t219 = circuit_sub(t217, t173); // Fp2 sub coeff 1/1\n    let t220 = circuit_sub(t218, t176); // Fp2 sub coeff 0/1\n    let t221 = circuit_sub(t219, t179); // Fp2 sub coeff 1/1\n    let t222 = circuit_add(t182, t185);\n    let t223 = circuit_mul(t222, in0);\n    let t224 = circuit_mul(t182, in1);\n    let t225 = circuit_sub(t224, t185);\n    let t226 = circuit_sub(t223, t224);\n    let t227 = circuit_sub(t226, t185);\n    let t228 = circuit_add(t220, t225); // Fp2 add coeff 0/1\n    let t229 = circuit_add(t221, t227); // Fp2 add coeff 1/1\n    let t230 = circuit_add(in8, in12); // Fp2 add coeff 0/1\n    let t231 = circuit_add(in9, in13); // Fp2 add coeff 1/1\n    let t232 = circuit_add(in20, in24); // Fp2 add coeff 0/1\n    let t233 = circuit_add(in21, in25); // Fp2 add coeff 1/1\n    let t234 = circuit_mul(t232, t230); // Fp2 mul start\n    let t235 = circuit_mul(t233, t231);\n    let t236 = circuit_sub(t234, t235); // Fp2 mul real part end\n    let t237 = circuit_mul(t232, t231);\n    let t238 = circuit_mul(t233, t230);\n    let t239 = circuit_add(t237, t238); // Fp2 mul imag part end\n    let t240 = circuit_sub(t236, t170); // Fp2 sub coeff 0/1\n    let t241 = circuit_sub(t239, t173); // Fp2 sub coeff 1/1\n    let t242 = circuit_sub(t240, t182); // Fp2 sub coeff 0/1\n    let t243 = circuit_sub(t241, t185); // Fp2 sub coeff 1/1\n    let t244 = circuit_add(t242, t176); // Fp2 add coeff 0/1\n    let t245 = circuit_add(t243, t179); // Fp2 add coeff 1/1\n    let t246 = circuit_sub(t50, t128); // Fp6 sub coeff 0/5\n    let t247 = circuit_sub(t51, t129); // Fp6 sub coeff 1/5\n    let t248 = circuit_sub(t72, t150); // Fp6 sub coeff 2/5\n    let t249 = circuit_sub(t73, t151); // Fp6 sub coeff 3/5\n    let t250 = circuit_sub(t88, t166); // Fp6 sub coeff 4/5\n    let t251 = circuit_sub(t89, t167); // Fp6 sub coeff 5/5\n    let t252 = circuit_sub(t246, t206); // Fp6 sub coeff 0/5\n    let t253 = circuit_sub(t247, t207); // Fp6 sub coeff 1/5\n    let t254 = circuit_sub(t248, t228); // Fp6 sub coeff 2/5\n    let t255 = circuit_sub(t249, t229); // Fp6 sub coeff 3/5\n    let t256 = circuit_sub(t250, t244); // Fp6 sub coeff 4/5\n    let t257 = circuit_sub(t251, t245); // Fp6 sub coeff 5/5\n    let t258 = circuit_add(t244, t245);\n    let t259 = circuit_mul(t258, in0);\n    let t260 = circuit_mul(t244, in1);\n    let t261 = circuit_sub(t260, t245);\n    let t262 = circuit_sub(t259, t260);\n    let t263 = circuit_sub(t262, t245);\n    let t264 = circuit_add(t261, t128); // Fp6 add coeff 0/5\n    let t265 = circuit_add(t263, t129); // Fp6 add coeff 1/5\n    let t266 = circuit_add(t206, t150); // Fp6 add coeff 2/5\n    let t267 = circuit_add(t207, t151); // Fp6 add coeff 3/5\n    let t268 = circuit_add(t228, t166); // Fp6 add coeff 4/5\n    let t269 = circuit_add(t229, t167); // Fp6 add coeff 5/5\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (\n        t264, t265, t266, t267, t268, t269, t252, t253, t254, t255, t256, t257,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0xa, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x9, 0x0, 0x0, 0x0]); // in1\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(X.c0b0a0); // in2\n    circuit_inputs = circuit_inputs.next_2(X.c0b0a1); // in3\n    circuit_inputs = circuit_inputs.next_2(X.c0b1a0); // in4\n    circuit_inputs = circuit_inputs.next_2(X.c0b1a1); // in5\n    circuit_inputs = circuit_inputs.next_2(X.c0b2a0); // in6\n    circuit_inputs = circuit_inputs.next_2(X.c0b2a1); // in7\n    circuit_inputs = circuit_inputs.next_2(X.c1b0a0); // in8\n    circuit_inputs = circuit_inputs.next_2(X.c1b0a1); // in9\n    circuit_inputs = circuit_inputs.next_2(X.c1b1a0); // in10\n    circuit_inputs = circuit_inputs.next_2(X.c1b1a1); // in11\n    circuit_inputs = circuit_inputs.next_2(X.c1b2a0); // in12\n    circuit_inputs = circuit_inputs.next_2(X.c1b2a1); // in13\n    circuit_inputs = circuit_inputs.next_2(Y.c0b0a0); // in14\n    circuit_inputs = circuit_inputs.next_2(Y.c0b0a1); // in15\n    circuit_inputs = circuit_inputs.next_2(Y.c0b1a0); // in16\n    circuit_inputs = circuit_inputs.next_2(Y.c0b1a1); // in17\n    circuit_inputs = circuit_inputs.next_2(Y.c0b2a0); // in18\n    circuit_inputs = circuit_inputs.next_2(Y.c0b2a1); // in19\n    circuit_inputs = circuit_inputs.next_2(Y.c1b0a0); // in20\n    circuit_inputs = circuit_inputs.next_2(Y.c1b0a1); // in21\n    circuit_inputs = circuit_inputs.next_2(Y.c1b1a0); // in22\n    circuit_inputs = circuit_inputs.next_2(Y.c1b1a1); // in23\n    circuit_inputs = circuit_inputs.next_2(Y.c1b2a0); // in24\n    circuit_inputs = circuit_inputs.next_2(Y.c1b2a1); // in25\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let res: E12T = E12T {\n        c0b0a0: outputs.get_output(t264),\n        c0b0a1: outputs.get_output(t265),\n        c0b1a0: outputs.get_output(t266),\n        c0b1a1: outputs.get_output(t267),\n        c0b2a0: outputs.get_output(t268),\n        c0b2a1: outputs.get_output(t269),\n        c1b0a0: outputs.get_output(t252),\n        c1b0a1: outputs.get_output(t253),\n        c1b1a0: outputs.get_output(t254),\n        c1b1a1: outputs.get_output(t255),\n        c1b2a0: outputs.get_output(t256),\n        c1b2a1: outputs.get_output(t257),\n    };\n    return (res,);\n}\n#[inline(always)]\npub fn run_BN254_TOWER_MILLER_BIT0_1P_circuit(\n    yInv_0: u384, xNegOverY_0: u384, Q_0: G2Point, M_i: E12T,\n) -> (G2Point, E12T) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0xa\n    let in1 = CE::<CI<1>> {}; // 0x9\n    let in2 = CE::<CI<2>> {}; // 0x0\n    let in3 = CE::<CI<3>> {}; // 0x3\n    let in4 = CE::<CI<4>> {}; // 0x6\n    let in5 = CE::<CI<5>> {}; // 0x1\n\n    // INPUT stack\n    let (in6, in7, in8) = (CE::<CI<6>> {}, CE::<CI<7>> {}, CE::<CI<8>> {});\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let t0 = circuit_sub(in12, in18); // Fp6 sub coeff 0/5\n    let t1 = circuit_sub(in13, in19); // Fp6 sub coeff 1/5\n    let t2 = circuit_sub(in14, in20); // Fp6 sub coeff 2/5\n    let t3 = circuit_sub(in15, in21); // Fp6 sub coeff 3/5\n    let t4 = circuit_sub(in16, in22); // Fp6 sub coeff 4/5\n    let t5 = circuit_sub(in17, in23); // Fp6 sub coeff 5/5\n    let t6 = circuit_add(in22, in23);\n    let t7 = circuit_mul(t6, in0);\n    let t8 = circuit_mul(in22, in1);\n    let t9 = circuit_sub(t8, in23);\n    let t10 = circuit_sub(t7, t8);\n    let t11 = circuit_sub(t10, in23);\n    let t12 = circuit_sub(in2, t9); // Fp6 neg coeff 0/5\n    let t13 = circuit_sub(in2, t11); // Fp6 neg coeff 1/5\n    let t14 = circuit_sub(in2, in18); // Fp6 neg coeff 2/5\n    let t15 = circuit_sub(in2, in19); // Fp6 neg coeff 3/5\n    let t16 = circuit_sub(in2, in20); // Fp6 neg coeff 4/5\n    let t17 = circuit_sub(in2, in21); // Fp6 neg coeff 5/5\n    let t18 = circuit_add(in12, t12); // Fp6 add coeff 0/5\n    let t19 = circuit_add(in13, t13); // Fp6 add coeff 1/5\n    let t20 = circuit_add(in14, t14); // Fp6 add coeff 2/5\n    let t21 = circuit_add(in15, t15); // Fp6 add coeff 3/5\n    let t22 = circuit_add(in16, t16); // Fp6 add coeff 4/5\n    let t23 = circuit_add(in17, t17); // Fp6 add coeff 5/5\n    let t24 = circuit_mul(in12, in18); // Fp2 mul start\n    let t25 = circuit_mul(in13, in19);\n    let t26 = circuit_sub(t24, t25); // Fp2 mul real part end\n    let t27 = circuit_mul(in12, in19);\n    let t28 = circuit_mul(in13, in18);\n    let t29 = circuit_add(t27, t28); // Fp2 mul imag part end\n    let t30 = circuit_mul(in14, in20); // Fp2 mul start\n    let t31 = circuit_mul(in15, in21);\n    let t32 = circuit_sub(t30, t31); // Fp2 mul real part end\n    let t33 = circuit_mul(in14, in21);\n    let t34 = circuit_mul(in15, in20);\n    let t35 = circuit_add(t33, t34); // Fp2 mul imag part end\n    let t36 = circuit_mul(in16, in22); // Fp2 mul start\n    let t37 = circuit_mul(in17, in23);\n    let t38 = circuit_sub(t36, t37); // Fp2 mul real part end\n    let t39 = circuit_mul(in16, in23);\n    let t40 = circuit_mul(in17, in22);\n    let t41 = circuit_add(t39, t40); // Fp2 mul imag part end\n    let t42 = circuit_add(in14, in16); // Fp2 add coeff 0/1\n    let t43 = circuit_add(in15, in17); // Fp2 add coeff 1/1\n    let t44 = circuit_add(in20, in22); // Fp2 add coeff 0/1\n    let t45 = circuit_add(in21, in23); // Fp2 add coeff 1/1\n    let t46 = circuit_mul(t42, t44); // Fp2 mul start\n    let t47 = circuit_mul(t43, t45);\n    let t48 = circuit_sub(t46, t47); // Fp2 mul real part end\n    let t49 = circuit_mul(t42, t45);\n    let t50 = circuit_mul(t43, t44);\n    let t51 = circuit_add(t49, t50); // Fp2 mul imag part end\n    let t52 = circuit_sub(t48, t32); // Fp2 sub coeff 0/1\n    let t53 = circuit_sub(t51, t35); // Fp2 sub coeff 1/1\n    let t54 = circuit_sub(t52, t38); // Fp2 sub coeff 0/1\n    let t55 = circuit_sub(t53, t41); // Fp2 sub coeff 1/1\n    let t56 = circuit_add(t54, t55);\n    let t57 = circuit_mul(t56, in0);\n    let t58 = circuit_mul(t54, in1);\n    let t59 = circuit_sub(t58, t55);\n    let t60 = circuit_sub(t57, t58);\n    let t61 = circuit_sub(t60, t55);\n    let t62 = circuit_add(t59, t26); // Fp2 add coeff 0/1\n    let t63 = circuit_add(t61, t29); // Fp2 add coeff 1/1\n    let t64 = circuit_add(in12, in14); // Fp2 add coeff 0/1\n    let t65 = circuit_add(in13, in15); // Fp2 add coeff 1/1\n    let t66 = circuit_add(in18, in20); // Fp2 add coeff 0/1\n    let t67 = circuit_add(in19, in21); // Fp2 add coeff 1/1\n    let t68 = circuit_mul(t64, t66); // Fp2 mul start\n    let t69 = circuit_mul(t65, t67);\n    let t70 = circuit_sub(t68, t69); // Fp2 mul real part end\n    let t71 = circuit_mul(t64, t67);\n    let t72 = circuit_mul(t65, t66);\n    let t73 = circuit_add(t71, t72); // Fp2 mul imag part end\n    let t74 = circuit_sub(t70, t26); // Fp2 sub coeff 0/1\n    let t75 = circuit_sub(t73, t29); // Fp2 sub coeff 1/1\n    let t76 = circuit_sub(t74, t32); // Fp2 sub coeff 0/1\n    let t77 = circuit_sub(t75, t35); // Fp2 sub coeff 1/1\n    let t78 = circuit_add(t38, t41);\n    let t79 = circuit_mul(t78, in0);\n    let t80 = circuit_mul(t38, in1);\n    let t81 = circuit_sub(t80, t41);\n    let t82 = circuit_sub(t79, t80);\n    let t83 = circuit_sub(t82, t41);\n    let t84 = circuit_add(t76, t81); // Fp2 add coeff 0/1\n    let t85 = circuit_add(t77, t83); // Fp2 add coeff 1/1\n    let t86 = circuit_add(in12, in16); // Fp2 add coeff 0/1\n    let t87 = circuit_add(in13, in17); // Fp2 add coeff 1/1\n    let t88 = circuit_add(in18, in22); // Fp2 add coeff 0/1\n    let t89 = circuit_add(in19, in23); // Fp2 add coeff 1/1\n    let t90 = circuit_mul(t88, t86); // Fp2 mul start\n    let t91 = circuit_mul(t89, t87);\n    let t92 = circuit_sub(t90, t91); // Fp2 mul real part end\n    let t93 = circuit_mul(t88, t87);\n    let t94 = circuit_mul(t89, t86);\n    let t95 = circuit_add(t93, t94); // Fp2 mul imag part end\n    let t96 = circuit_sub(t92, t26); // Fp2 sub coeff 0/1\n    let t97 = circuit_sub(t95, t29); // Fp2 sub coeff 1/1\n    let t98 = circuit_sub(t96, t38); // Fp2 sub coeff 0/1\n    let t99 = circuit_sub(t97, t41); // Fp2 sub coeff 1/1\n    let t100 = circuit_add(t98, t32); // Fp2 add coeff 0/1\n    let t101 = circuit_add(t99, t35); // Fp2 add coeff 1/1\n    let t102 = circuit_mul(t0, t18); // Fp2 mul start\n    let t103 = circuit_mul(t1, t19);\n    let t104 = circuit_sub(t102, t103); // Fp2 mul real part end\n    let t105 = circuit_mul(t0, t19);\n    let t106 = circuit_mul(t1, t18);\n    let t107 = circuit_add(t105, t106); // Fp2 mul imag part end\n    let t108 = circuit_mul(t2, t20); // Fp2 mul start\n    let t109 = circuit_mul(t3, t21);\n    let t110 = circuit_sub(t108, t109); // Fp2 mul real part end\n    let t111 = circuit_mul(t2, t21);\n    let t112 = circuit_mul(t3, t20);\n    let t113 = circuit_add(t111, t112); // Fp2 mul imag part end\n    let t114 = circuit_mul(t4, t22); // Fp2 mul start\n    let t115 = circuit_mul(t5, t23);\n    let t116 = circuit_sub(t114, t115); // Fp2 mul real part end\n    let t117 = circuit_mul(t4, t23);\n    let t118 = circuit_mul(t5, t22);\n    let t119 = circuit_add(t117, t118); // Fp2 mul imag part end\n    let t120 = circuit_add(t2, t4); // Fp2 add coeff 0/1\n    let t121 = circuit_add(t3, t5); // Fp2 add coeff 1/1\n    let t122 = circuit_add(t20, t22); // Fp2 add coeff 0/1\n    let t123 = circuit_add(t21, t23); // Fp2 add coeff 1/1\n    let t124 = circuit_mul(t120, t122); // Fp2 mul start\n    let t125 = circuit_mul(t121, t123);\n    let t126 = circuit_sub(t124, t125); // Fp2 mul real part end\n    let t127 = circuit_mul(t120, t123);\n    let t128 = circuit_mul(t121, t122);\n    let t129 = circuit_add(t127, t128); // Fp2 mul imag part end\n    let t130 = circuit_sub(t126, t110); // Fp2 sub coeff 0/1\n    let t131 = circuit_sub(t129, t113); // Fp2 sub coeff 1/1\n    let t132 = circuit_sub(t130, t116); // Fp2 sub coeff 0/1\n    let t133 = circuit_sub(t131, t119); // Fp2 sub coeff 1/1\n    let t134 = circuit_add(t132, t133);\n    let t135 = circuit_mul(t134, in0);\n    let t136 = circuit_mul(t132, in1);\n    let t137 = circuit_sub(t136, t133);\n    let t138 = circuit_sub(t135, t136);\n    let t139 = circuit_sub(t138, t133);\n    let t140 = circuit_add(t137, t104); // Fp2 add coeff 0/1\n    let t141 = circuit_add(t139, t107); // Fp2 add coeff 1/1\n    let t142 = circuit_add(t0, t2); // Fp2 add coeff 0/1\n    let t143 = circuit_add(t1, t3); // Fp2 add coeff 1/1\n    let t144 = circuit_add(t18, t20); // Fp2 add coeff 0/1\n    let t145 = circuit_add(t19, t21); // Fp2 add coeff 1/1\n    let t146 = circuit_mul(t142, t144); // Fp2 mul start\n    let t147 = circuit_mul(t143, t145);\n    let t148 = circuit_sub(t146, t147); // Fp2 mul real part end\n    let t149 = circuit_mul(t142, t145);\n    let t150 = circuit_mul(t143, t144);\n    let t151 = circuit_add(t149, t150); // Fp2 mul imag part end\n    let t152 = circuit_sub(t148, t104); // Fp2 sub coeff 0/1\n    let t153 = circuit_sub(t151, t107); // Fp2 sub coeff 1/1\n    let t154 = circuit_sub(t152, t110); // Fp2 sub coeff 0/1\n    let t155 = circuit_sub(t153, t113); // Fp2 sub coeff 1/1\n    let t156 = circuit_add(t116, t119);\n    let t157 = circuit_mul(t156, in0);\n    let t158 = circuit_mul(t116, in1);\n    let t159 = circuit_sub(t158, t119);\n    let t160 = circuit_sub(t157, t158);\n    let t161 = circuit_sub(t160, t119);\n    let t162 = circuit_add(t154, t159); // Fp2 add coeff 0/1\n    let t163 = circuit_add(t155, t161); // Fp2 add coeff 1/1\n    let t164 = circuit_add(t0, t4); // Fp2 add coeff 0/1\n    let t165 = circuit_add(t1, t5); // Fp2 add coeff 1/1\n    let t166 = circuit_add(t18, t22); // Fp2 add coeff 0/1\n    let t167 = circuit_add(t19, t23); // Fp2 add coeff 1/1\n    let t168 = circuit_mul(t166, t164); // Fp2 mul start\n    let t169 = circuit_mul(t167, t165);\n    let t170 = circuit_sub(t168, t169); // Fp2 mul real part end\n    let t171 = circuit_mul(t166, t165);\n    let t172 = circuit_mul(t167, t164);\n    let t173 = circuit_add(t171, t172); // Fp2 mul imag part end\n    let t174 = circuit_sub(t170, t104); // Fp2 sub coeff 0/1\n    let t175 = circuit_sub(t173, t107); // Fp2 sub coeff 1/1\n    let t176 = circuit_sub(t174, t116); // Fp2 sub coeff 0/1\n    let t177 = circuit_sub(t175, t119); // Fp2 sub coeff 1/1\n    let t178 = circuit_add(t176, t110); // Fp2 add coeff 0/1\n    let t179 = circuit_add(t177, t113); // Fp2 add coeff 1/1\n    let t180 = circuit_add(t140, t62); // Fp6 add coeff 0/5\n    let t181 = circuit_add(t141, t63); // Fp6 add coeff 1/5\n    let t182 = circuit_add(t162, t84); // Fp6 add coeff 2/5\n    let t183 = circuit_add(t163, t85); // Fp6 add coeff 3/5\n    let t184 = circuit_add(t178, t100); // Fp6 add coeff 4/5\n    let t185 = circuit_add(t179, t101); // Fp6 add coeff 5/5\n    let t186 = circuit_add(t62, t62); // Fp6 add coeff 0/5\n    let t187 = circuit_add(t63, t63); // Fp6 add coeff 1/5\n    let t188 = circuit_add(t84, t84); // Fp6 add coeff 2/5\n    let t189 = circuit_add(t85, t85); // Fp6 add coeff 3/5\n    let t190 = circuit_add(t100, t100); // Fp6 add coeff 4/5\n    let t191 = circuit_add(t101, t101); // Fp6 add coeff 5/5\n    let t192 = circuit_add(t100, t101);\n    let t193 = circuit_mul(t192, in0);\n    let t194 = circuit_mul(t100, in1);\n    let t195 = circuit_sub(t194, t101);\n    let t196 = circuit_sub(t193, t194);\n    let t197 = circuit_sub(t196, t101);\n    let t198 = circuit_add(t180, t195); // Fp6 add coeff 0/5\n    let t199 = circuit_add(t181, t197); // Fp6 add coeff 1/5\n    let t200 = circuit_add(t182, t62); // Fp6 add coeff 2/5\n    let t201 = circuit_add(t183, t63); // Fp6 add coeff 3/5\n    let t202 = circuit_add(t184, t84); // Fp6 add coeff 4/5\n    let t203 = circuit_add(t185, t85); // Fp6 add coeff 5/5\n    let t204 = circuit_add(in8, in9); // Doubling slope numerator start\n    let t205 = circuit_sub(in8, in9);\n    let t206 = circuit_mul(t204, t205);\n    let t207 = circuit_mul(in8, in9);\n    let t208 = circuit_mul(t206, in3);\n    let t209 = circuit_mul(t207, in4); // Doubling slope numerator end\n    let t210 = circuit_add(in10, in10); // Fp2 add coeff 0/1\n    let t211 = circuit_add(in11, in11); // Fp2 add coeff 1/1\n    let t212 = circuit_mul(t210, t210); // Fp2 Inv start\n    let t213 = circuit_mul(t211, t211);\n    let t214 = circuit_add(t212, t213);\n    let t215 = circuit_inverse(t214);\n    let t216 = circuit_mul(t210, t215); // Fp2 Inv real part end\n    let t217 = circuit_mul(t211, t215);\n    let t218 = circuit_sub(in2, t217); // Fp2 Inv imag part end\n    let t219 = circuit_mul(t208, t216); // Fp2 mul start\n    let t220 = circuit_mul(t209, t218);\n    let t221 = circuit_sub(t219, t220); // Fp2 mul real part end\n    let t222 = circuit_mul(t208, t218);\n    let t223 = circuit_mul(t209, t216);\n    let t224 = circuit_add(t222, t223); // Fp2 mul imag part end\n    let t225 = circuit_add(t221, t224);\n    let t226 = circuit_sub(t221, t224);\n    let t227 = circuit_mul(t225, t226);\n    let t228 = circuit_mul(t221, t224);\n    let t229 = circuit_add(t228, t228);\n    let t230 = circuit_add(in8, in8); // Fp2 add coeff 0/1\n    let t231 = circuit_add(in9, in9); // Fp2 add coeff 1/1\n    let t232 = circuit_sub(t227, t230); // Fp2 sub coeff 0/1\n    let t233 = circuit_sub(t229, t231); // Fp2 sub coeff 1/1\n    let t234 = circuit_sub(in8, t232); // Fp2 sub coeff 0/1\n    let t235 = circuit_sub(in9, t233); // Fp2 sub coeff 1/1\n    let t236 = circuit_mul(t221, t234); // Fp2 mul start\n    let t237 = circuit_mul(t224, t235);\n    let t238 = circuit_sub(t236, t237); // Fp2 mul real part end\n    let t239 = circuit_mul(t221, t235);\n    let t240 = circuit_mul(t224, t234);\n    let t241 = circuit_add(t239, t240); // Fp2 mul imag part end\n    let t242 = circuit_sub(t238, in10); // Fp2 sub coeff 0/1\n    let t243 = circuit_sub(t241, in11); // Fp2 sub coeff 1/1\n    let t244 = circuit_mul(t221, in8); // Fp2 mul start\n    let t245 = circuit_mul(t224, in9);\n    let t246 = circuit_sub(t244, t245); // Fp2 mul real part end\n    let t247 = circuit_mul(t221, in9);\n    let t248 = circuit_mul(t224, in8);\n    let t249 = circuit_add(t247, t248); // Fp2 mul imag part end\n    let t250 = circuit_sub(t246, in10); // Fp2 sub coeff 0/1\n    let t251 = circuit_sub(t249, in11); // Fp2 sub coeff 1/1\n    let t252 = circuit_mul(t221, in7);\n    let t253 = circuit_mul(t224, in7);\n    let t254 = circuit_mul(t250, in6);\n    let t255 = circuit_mul(t251, in6);\n    let t256 = circuit_mul(t186, t252); // Fp2 mul start\n    let t257 = circuit_mul(t187, t253);\n    let t258 = circuit_sub(t256, t257); // Fp2 mul real part end\n    let t259 = circuit_mul(t186, t253);\n    let t260 = circuit_mul(t187, t252);\n    let t261 = circuit_add(t259, t260); // Fp2 mul imag part end\n    let t262 = circuit_mul(t188, t254); // Fp2 mul start\n    let t263 = circuit_mul(t189, t255);\n    let t264 = circuit_sub(t262, t263); // Fp2 mul real part end\n    let t265 = circuit_mul(t188, t255);\n    let t266 = circuit_mul(t189, t254);\n    let t267 = circuit_add(t265, t266); // Fp2 mul imag part end\n    let t268 = circuit_add(t188, t190); // Fp2 add coeff 0/1\n    let t269 = circuit_add(t189, t191); // Fp2 add coeff 1/1\n    let t270 = circuit_mul(t254, t268); // Fp2 mul start\n    let t271 = circuit_mul(t255, t269);\n    let t272 = circuit_sub(t270, t271); // Fp2 mul real part end\n    let t273 = circuit_mul(t254, t269);\n    let t274 = circuit_mul(t255, t268);\n    let t275 = circuit_add(t273, t274); // Fp2 mul imag part end\n    let t276 = circuit_sub(t272, t264); // Fp2 sub coeff 0/1\n    let t277 = circuit_sub(t275, t267); // Fp2 sub coeff 1/1\n    let t278 = circuit_add(t276, t277);\n    let t279 = circuit_mul(t278, in0);\n    let t280 = circuit_mul(t276, in1);\n    let t281 = circuit_sub(t280, t277);\n    let t282 = circuit_sub(t279, t280);\n    let t283 = circuit_sub(t282, t277);\n    let t284 = circuit_add(t281, t258); // Fp2 add coeff 0/1\n    let t285 = circuit_add(t283, t261); // Fp2 add coeff 1/1\n    let t286 = circuit_add(t186, t190); // Fp2 add coeff 0/1\n    let t287 = circuit_add(t187, t191); // Fp2 add coeff 1/1\n    let t288 = circuit_mul(t252, t286); // Fp2 mul start\n    let t289 = circuit_mul(t253, t287);\n    let t290 = circuit_sub(t288, t289); // Fp2 mul real part end\n    let t291 = circuit_mul(t252, t287);\n    let t292 = circuit_mul(t253, t286);\n    let t293 = circuit_add(t291, t292); // Fp2 mul imag part end\n    let t294 = circuit_sub(t290, t258); // Fp2 sub coeff 0/1\n    let t295 = circuit_sub(t293, t261); // Fp2 sub coeff 1/1\n    let t296 = circuit_add(t294, t264); // Fp2 add coeff 0/1\n    let t297 = circuit_add(t295, t267); // Fp2 add coeff 1/1\n    let t298 = circuit_add(t252, t254); // Fp2 add coeff 0/1\n    let t299 = circuit_add(t253, t255); // Fp2 add coeff 1/1\n    let t300 = circuit_add(t186, t188); // Fp2 add coeff 0/1\n    let t301 = circuit_add(t187, t189); // Fp2 add coeff 1/1\n    let t302 = circuit_mul(t298, t300); // Fp2 mul start\n    let t303 = circuit_mul(t299, t301);\n    let t304 = circuit_sub(t302, t303); // Fp2 mul real part end\n    let t305 = circuit_mul(t298, t301);\n    let t306 = circuit_mul(t299, t300);\n    let t307 = circuit_add(t305, t306); // Fp2 mul imag part end\n    let t308 = circuit_sub(t304, t258); // Fp2 sub coeff 0/1\n    let t309 = circuit_sub(t307, t261); // Fp2 sub coeff 1/1\n    let t310 = circuit_sub(t308, t264); // Fp2 sub coeff 0/1\n    let t311 = circuit_sub(t309, t267); // Fp2 sub coeff 1/1\n    let t312 = circuit_add(in5, t252); // Fp2 add coeff 0/1\n    let t313 = circuit_add(in2, t253); // Fp2 add coeff 1/1\n    let t314 = circuit_add(t198, t186); // Fp6 add coeff 0/5\n    let t315 = circuit_add(t199, t187); // Fp6 add coeff 1/5\n    let t316 = circuit_add(t200, t188); // Fp6 add coeff 2/5\n    let t317 = circuit_add(t201, t189); // Fp6 add coeff 3/5\n    let t318 = circuit_add(t202, t190); // Fp6 add coeff 4/5\n    let t319 = circuit_add(t203, t191); // Fp6 add coeff 5/5\n    let t320 = circuit_mul(t314, t312); // Fp2 mul start\n    let t321 = circuit_mul(t315, t313);\n    let t322 = circuit_sub(t320, t321); // Fp2 mul real part end\n    let t323 = circuit_mul(t314, t313);\n    let t324 = circuit_mul(t315, t312);\n    let t325 = circuit_add(t323, t324); // Fp2 mul imag part end\n    let t326 = circuit_mul(t316, t254); // Fp2 mul start\n    let t327 = circuit_mul(t317, t255);\n    let t328 = circuit_sub(t326, t327); // Fp2 mul real part end\n    let t329 = circuit_mul(t316, t255);\n    let t330 = circuit_mul(t317, t254);\n    let t331 = circuit_add(t329, t330); // Fp2 mul imag part end\n    let t332 = circuit_add(t316, t318); // Fp2 add coeff 0/1\n    let t333 = circuit_add(t317, t319); // Fp2 add coeff 1/1\n    let t334 = circuit_mul(t254, t332); // Fp2 mul start\n    let t335 = circuit_mul(t255, t333);\n    let t336 = circuit_sub(t334, t335); // Fp2 mul real part end\n    let t337 = circuit_mul(t254, t333);\n    let t338 = circuit_mul(t255, t332);\n    let t339 = circuit_add(t337, t338); // Fp2 mul imag part end\n    let t340 = circuit_sub(t336, t328); // Fp2 sub coeff 0/1\n    let t341 = circuit_sub(t339, t331); // Fp2 sub coeff 1/1\n    let t342 = circuit_add(t340, t341);\n    let t343 = circuit_mul(t342, in0);\n    let t344 = circuit_mul(t340, in1);\n    let t345 = circuit_sub(t344, t341);\n    let t346 = circuit_sub(t343, t344);\n    let t347 = circuit_sub(t346, t341);\n    let t348 = circuit_add(t345, t322); // Fp2 add coeff 0/1\n    let t349 = circuit_add(t347, t325); // Fp2 add coeff 1/1\n    let t350 = circuit_add(t314, t318); // Fp2 add coeff 0/1\n    let t351 = circuit_add(t315, t319); // Fp2 add coeff 1/1\n    let t352 = circuit_mul(t312, t350); // Fp2 mul start\n    let t353 = circuit_mul(t313, t351);\n    let t354 = circuit_sub(t352, t353); // Fp2 mul real part end\n    let t355 = circuit_mul(t312, t351);\n    let t356 = circuit_mul(t313, t350);\n    let t357 = circuit_add(t355, t356); // Fp2 mul imag part end\n    let t358 = circuit_sub(t354, t322); // Fp2 sub coeff 0/1\n    let t359 = circuit_sub(t357, t325); // Fp2 sub coeff 1/1\n    let t360 = circuit_add(t358, t328); // Fp2 add coeff 0/1\n    let t361 = circuit_add(t359, t331); // Fp2 add coeff 1/1\n    let t362 = circuit_add(t312, t254); // Fp2 add coeff 0/1\n    let t363 = circuit_add(t313, t255); // Fp2 add coeff 1/1\n    let t364 = circuit_add(t314, t316); // Fp2 add coeff 0/1\n    let t365 = circuit_add(t315, t317); // Fp2 add coeff 1/1\n    let t366 = circuit_mul(t362, t364); // Fp2 mul start\n    let t367 = circuit_mul(t363, t365);\n    let t368 = circuit_sub(t366, t367); // Fp2 mul real part end\n    let t369 = circuit_mul(t362, t365);\n    let t370 = circuit_mul(t363, t364);\n    let t371 = circuit_add(t369, t370); // Fp2 mul imag part end\n    let t372 = circuit_sub(t368, t322); // Fp2 sub coeff 0/1\n    let t373 = circuit_sub(t371, t325); // Fp2 sub coeff 1/1\n    let t374 = circuit_sub(t372, t328); // Fp2 sub coeff 0/1\n    let t375 = circuit_sub(t373, t331); // Fp2 sub coeff 1/1\n    let t376 = circuit_add(t198, t284); // Fp6 add coeff 0/5\n    let t377 = circuit_add(t199, t285); // Fp6 add coeff 1/5\n    let t378 = circuit_add(t200, t310); // Fp6 add coeff 2/5\n    let t379 = circuit_add(t201, t311); // Fp6 add coeff 3/5\n    let t380 = circuit_add(t202, t296); // Fp6 add coeff 4/5\n    let t381 = circuit_add(t203, t297); // Fp6 add coeff 5/5\n    let t382 = circuit_sub(in2, t376); // Fp6 neg coeff 0/5\n    let t383 = circuit_sub(in2, t377); // Fp6 neg coeff 1/5\n    let t384 = circuit_sub(in2, t378); // Fp6 neg coeff 2/5\n    let t385 = circuit_sub(in2, t379); // Fp6 neg coeff 3/5\n    let t386 = circuit_sub(in2, t380); // Fp6 neg coeff 4/5\n    let t387 = circuit_sub(in2, t381); // Fp6 neg coeff 5/5\n    let t388 = circuit_add(t382, t348); // Fp6 add coeff 0/5\n    let t389 = circuit_add(t383, t349); // Fp6 add coeff 1/5\n    let t390 = circuit_add(t384, t374); // Fp6 add coeff 2/5\n    let t391 = circuit_add(t385, t375); // Fp6 add coeff 3/5\n    let t392 = circuit_add(t386, t360); // Fp6 add coeff 4/5\n    let t393 = circuit_add(t387, t361); // Fp6 add coeff 5/5\n    let t394 = circuit_add(t296, t297);\n    let t395 = circuit_mul(t394, in0);\n    let t396 = circuit_mul(t296, in1);\n    let t397 = circuit_sub(t396, t297);\n    let t398 = circuit_sub(t395, t396);\n    let t399 = circuit_sub(t398, t297);\n    let t400 = circuit_add(t397, t198); // Fp6 add coeff 0/5\n    let t401 = circuit_add(t399, t199); // Fp6 add coeff 1/5\n    let t402 = circuit_add(t284, t200); // Fp6 add coeff 2/5\n    let t403 = circuit_add(t285, t201); // Fp6 add coeff 3/5\n    let t404 = circuit_add(t310, t202); // Fp6 add coeff 4/5\n    let t405 = circuit_add(t311, t203); // Fp6 add coeff 5/5\n    let t406 = circuit_add(t232, t233);\n    let t407 = circuit_add(t406, t242);\n    let t408 = circuit_add(t407, t243);\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (\n        t408, t400, t401, t402, t403, t404, t405, t388, t389, t390, t391, t392, t393,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0xa, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x9, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in2\n    circuit_inputs = circuit_inputs.next_2([0x3, 0x0, 0x0, 0x0]); // in3\n    circuit_inputs = circuit_inputs.next_2([0x6, 0x0, 0x0, 0x0]); // in4\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in5\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in6\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in7\n    circuit_inputs = circuit_inputs.next_2(Q_0.x0); // in8\n    circuit_inputs = circuit_inputs.next_2(Q_0.x1); // in9\n    circuit_inputs = circuit_inputs.next_2(Q_0.y0); // in10\n    circuit_inputs = circuit_inputs.next_2(Q_0.y1); // in11\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b0a0); // in12\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b0a1); // in13\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b1a0); // in14\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b1a1); // in15\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b2a0); // in16\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b2a1); // in17\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b0a0); // in18\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b0a1); // in19\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b1a0); // in20\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b1a1); // in21\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b2a0); // in22\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b2a1); // in23\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t232),\n        x1: outputs.get_output(t233),\n        y0: outputs.get_output(t242),\n        y1: outputs.get_output(t243),\n    };\n    let Mi_plus_one: E12T = E12T {\n        c0b0a0: outputs.get_output(t400),\n        c0b0a1: outputs.get_output(t401),\n        c0b1a0: outputs.get_output(t402),\n        c0b1a1: outputs.get_output(t403),\n        c0b2a0: outputs.get_output(t404),\n        c0b2a1: outputs.get_output(t405),\n        c1b0a0: outputs.get_output(t388),\n        c1b0a1: outputs.get_output(t389),\n        c1b1a0: outputs.get_output(t390),\n        c1b1a1: outputs.get_output(t391),\n        c1b2a0: outputs.get_output(t392),\n        c1b2a1: outputs.get_output(t393),\n    };\n    return (Q0, Mi_plus_one);\n}\n#[inline(always)]\npub fn run_BN254_TOWER_MILLER_BIT1_1P_circuit(\n    yInv_0: u384, xNegOverY_0: u384, Q_0: G2Point, Q_or_Q_neg_0: G2Point, M_i: E12T,\n) -> (G2Point, E12T) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0xa\n    let in1 = CE::<CI<1>> {}; // 0x9\n    let in2 = CE::<CI<2>> {}; // 0x0\n    let in3 = CE::<CI<3>> {}; // 0x1\n\n    // INPUT stack\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let (in7, in8, in9) = (CE::<CI<7>> {}, CE::<CI<8>> {}, CE::<CI<9>> {});\n    let (in10, in11, in12) = (CE::<CI<10>> {}, CE::<CI<11>> {}, CE::<CI<12>> {});\n    let (in13, in14, in15) = (CE::<CI<13>> {}, CE::<CI<14>> {}, CE::<CI<15>> {});\n    let (in16, in17, in18) = (CE::<CI<16>> {}, CE::<CI<17>> {}, CE::<CI<18>> {});\n    let (in19, in20, in21) = (CE::<CI<19>> {}, CE::<CI<20>> {}, CE::<CI<21>> {});\n    let (in22, in23, in24) = (CE::<CI<22>> {}, CE::<CI<23>> {}, CE::<CI<24>> {});\n    let in25 = CE::<CI<25>> {};\n    let t0 = circuit_sub(in14, in20); // Fp6 sub coeff 0/5\n    let t1 = circuit_sub(in15, in21); // Fp6 sub coeff 1/5\n    let t2 = circuit_sub(in16, in22); // Fp6 sub coeff 2/5\n    let t3 = circuit_sub(in17, in23); // Fp6 sub coeff 3/5\n    let t4 = circuit_sub(in18, in24); // Fp6 sub coeff 4/5\n    let t5 = circuit_sub(in19, in25); // Fp6 sub coeff 5/5\n    let t6 = circuit_add(in24, in25);\n    let t7 = circuit_mul(t6, in0);\n    let t8 = circuit_mul(in24, in1);\n    let t9 = circuit_sub(t8, in25);\n    let t10 = circuit_sub(t7, t8);\n    let t11 = circuit_sub(t10, in25);\n    let t12 = circuit_sub(in2, t9); // Fp6 neg coeff 0/5\n    let t13 = circuit_sub(in2, t11); // Fp6 neg coeff 1/5\n    let t14 = circuit_sub(in2, in20); // Fp6 neg coeff 2/5\n    let t15 = circuit_sub(in2, in21); // Fp6 neg coeff 3/5\n    let t16 = circuit_sub(in2, in22); // Fp6 neg coeff 4/5\n    let t17 = circuit_sub(in2, in23); // Fp6 neg coeff 5/5\n    let t18 = circuit_add(in14, t12); // Fp6 add coeff 0/5\n    let t19 = circuit_add(in15, t13); // Fp6 add coeff 1/5\n    let t20 = circuit_add(in16, t14); // Fp6 add coeff 2/5\n    let t21 = circuit_add(in17, t15); // Fp6 add coeff 3/5\n    let t22 = circuit_add(in18, t16); // Fp6 add coeff 4/5\n    let t23 = circuit_add(in19, t17); // Fp6 add coeff 5/5\n    let t24 = circuit_mul(in14, in20); // Fp2 mul start\n    let t25 = circuit_mul(in15, in21);\n    let t26 = circuit_sub(t24, t25); // Fp2 mul real part end\n    let t27 = circuit_mul(in14, in21);\n    let t28 = circuit_mul(in15, in20);\n    let t29 = circuit_add(t27, t28); // Fp2 mul imag part end\n    let t30 = circuit_mul(in16, in22); // Fp2 mul start\n    let t31 = circuit_mul(in17, in23);\n    let t32 = circuit_sub(t30, t31); // Fp2 mul real part end\n    let t33 = circuit_mul(in16, in23);\n    let t34 = circuit_mul(in17, in22);\n    let t35 = circuit_add(t33, t34); // Fp2 mul imag part end\n    let t36 = circuit_mul(in18, in24); // Fp2 mul start\n    let t37 = circuit_mul(in19, in25);\n    let t38 = circuit_sub(t36, t37); // Fp2 mul real part end\n    let t39 = circuit_mul(in18, in25);\n    let t40 = circuit_mul(in19, in24);\n    let t41 = circuit_add(t39, t40); // Fp2 mul imag part end\n    let t42 = circuit_add(in16, in18); // Fp2 add coeff 0/1\n    let t43 = circuit_add(in17, in19); // Fp2 add coeff 1/1\n    let t44 = circuit_add(in22, in24); // Fp2 add coeff 0/1\n    let t45 = circuit_add(in23, in25); // Fp2 add coeff 1/1\n    let t46 = circuit_mul(t42, t44); // Fp2 mul start\n    let t47 = circuit_mul(t43, t45);\n    let t48 = circuit_sub(t46, t47); // Fp2 mul real part end\n    let t49 = circuit_mul(t42, t45);\n    let t50 = circuit_mul(t43, t44);\n    let t51 = circuit_add(t49, t50); // Fp2 mul imag part end\n    let t52 = circuit_sub(t48, t32); // Fp2 sub coeff 0/1\n    let t53 = circuit_sub(t51, t35); // Fp2 sub coeff 1/1\n    let t54 = circuit_sub(t52, t38); // Fp2 sub coeff 0/1\n    let t55 = circuit_sub(t53, t41); // Fp2 sub coeff 1/1\n    let t56 = circuit_add(t54, t55);\n    let t57 = circuit_mul(t56, in0);\n    let t58 = circuit_mul(t54, in1);\n    let t59 = circuit_sub(t58, t55);\n    let t60 = circuit_sub(t57, t58);\n    let t61 = circuit_sub(t60, t55);\n    let t62 = circuit_add(t59, t26); // Fp2 add coeff 0/1\n    let t63 = circuit_add(t61, t29); // Fp2 add coeff 1/1\n    let t64 = circuit_add(in14, in16); // Fp2 add coeff 0/1\n    let t65 = circuit_add(in15, in17); // Fp2 add coeff 1/1\n    let t66 = circuit_add(in20, in22); // Fp2 add coeff 0/1\n    let t67 = circuit_add(in21, in23); // Fp2 add coeff 1/1\n    let t68 = circuit_mul(t64, t66); // Fp2 mul start\n    let t69 = circuit_mul(t65, t67);\n    let t70 = circuit_sub(t68, t69); // Fp2 mul real part end\n    let t71 = circuit_mul(t64, t67);\n    let t72 = circuit_mul(t65, t66);\n    let t73 = circuit_add(t71, t72); // Fp2 mul imag part end\n    let t74 = circuit_sub(t70, t26); // Fp2 sub coeff 0/1\n    let t75 = circuit_sub(t73, t29); // Fp2 sub coeff 1/1\n    let t76 = circuit_sub(t74, t32); // Fp2 sub coeff 0/1\n    let t77 = circuit_sub(t75, t35); // Fp2 sub coeff 1/1\n    let t78 = circuit_add(t38, t41);\n    let t79 = circuit_mul(t78, in0);\n    let t80 = circuit_mul(t38, in1);\n    let t81 = circuit_sub(t80, t41);\n    let t82 = circuit_sub(t79, t80);\n    let t83 = circuit_sub(t82, t41);\n    let t84 = circuit_add(t76, t81); // Fp2 add coeff 0/1\n    let t85 = circuit_add(t77, t83); // Fp2 add coeff 1/1\n    let t86 = circuit_add(in14, in18); // Fp2 add coeff 0/1\n    let t87 = circuit_add(in15, in19); // Fp2 add coeff 1/1\n    let t88 = circuit_add(in20, in24); // Fp2 add coeff 0/1\n    let t89 = circuit_add(in21, in25); // Fp2 add coeff 1/1\n    let t90 = circuit_mul(t88, t86); // Fp2 mul start\n    let t91 = circuit_mul(t89, t87);\n    let t92 = circuit_sub(t90, t91); // Fp2 mul real part end\n    let t93 = circuit_mul(t88, t87);\n    let t94 = circuit_mul(t89, t86);\n    let t95 = circuit_add(t93, t94); // Fp2 mul imag part end\n    let t96 = circuit_sub(t92, t26); // Fp2 sub coeff 0/1\n    let t97 = circuit_sub(t95, t29); // Fp2 sub coeff 1/1\n    let t98 = circuit_sub(t96, t38); // Fp2 sub coeff 0/1\n    let t99 = circuit_sub(t97, t41); // Fp2 sub coeff 1/1\n    let t100 = circuit_add(t98, t32); // Fp2 add coeff 0/1\n    let t101 = circuit_add(t99, t35); // Fp2 add coeff 1/1\n    let t102 = circuit_mul(t0, t18); // Fp2 mul start\n    let t103 = circuit_mul(t1, t19);\n    let t104 = circuit_sub(t102, t103); // Fp2 mul real part end\n    let t105 = circuit_mul(t0, t19);\n    let t106 = circuit_mul(t1, t18);\n    let t107 = circuit_add(t105, t106); // Fp2 mul imag part end\n    let t108 = circuit_mul(t2, t20); // Fp2 mul start\n    let t109 = circuit_mul(t3, t21);\n    let t110 = circuit_sub(t108, t109); // Fp2 mul real part end\n    let t111 = circuit_mul(t2, t21);\n    let t112 = circuit_mul(t3, t20);\n    let t113 = circuit_add(t111, t112); // Fp2 mul imag part end\n    let t114 = circuit_mul(t4, t22); // Fp2 mul start\n    let t115 = circuit_mul(t5, t23);\n    let t116 = circuit_sub(t114, t115); // Fp2 mul real part end\n    let t117 = circuit_mul(t4, t23);\n    let t118 = circuit_mul(t5, t22);\n    let t119 = circuit_add(t117, t118); // Fp2 mul imag part end\n    let t120 = circuit_add(t2, t4); // Fp2 add coeff 0/1\n    let t121 = circuit_add(t3, t5); // Fp2 add coeff 1/1\n    let t122 = circuit_add(t20, t22); // Fp2 add coeff 0/1\n    let t123 = circuit_add(t21, t23); // Fp2 add coeff 1/1\n    let t124 = circuit_mul(t120, t122); // Fp2 mul start\n    let t125 = circuit_mul(t121, t123);\n    let t126 = circuit_sub(t124, t125); // Fp2 mul real part end\n    let t127 = circuit_mul(t120, t123);\n    let t128 = circuit_mul(t121, t122);\n    let t129 = circuit_add(t127, t128); // Fp2 mul imag part end\n    let t130 = circuit_sub(t126, t110); // Fp2 sub coeff 0/1\n    let t131 = circuit_sub(t129, t113); // Fp2 sub coeff 1/1\n    let t132 = circuit_sub(t130, t116); // Fp2 sub coeff 0/1\n    let t133 = circuit_sub(t131, t119); // Fp2 sub coeff 1/1\n    let t134 = circuit_add(t132, t133);\n    let t135 = circuit_mul(t134, in0);\n    let t136 = circuit_mul(t132, in1);\n    let t137 = circuit_sub(t136, t133);\n    let t138 = circuit_sub(t135, t136);\n    let t139 = circuit_sub(t138, t133);\n    let t140 = circuit_add(t137, t104); // Fp2 add coeff 0/1\n    let t141 = circuit_add(t139, t107); // Fp2 add coeff 1/1\n    let t142 = circuit_add(t0, t2); // Fp2 add coeff 0/1\n    let t143 = circuit_add(t1, t3); // Fp2 add coeff 1/1\n    let t144 = circuit_add(t18, t20); // Fp2 add coeff 0/1\n    let t145 = circuit_add(t19, t21); // Fp2 add coeff 1/1\n    let t146 = circuit_mul(t142, t144); // Fp2 mul start\n    let t147 = circuit_mul(t143, t145);\n    let t148 = circuit_sub(t146, t147); // Fp2 mul real part end\n    let t149 = circuit_mul(t142, t145);\n    let t150 = circuit_mul(t143, t144);\n    let t151 = circuit_add(t149, t150); // Fp2 mul imag part end\n    let t152 = circuit_sub(t148, t104); // Fp2 sub coeff 0/1\n    let t153 = circuit_sub(t151, t107); // Fp2 sub coeff 1/1\n    let t154 = circuit_sub(t152, t110); // Fp2 sub coeff 0/1\n    let t155 = circuit_sub(t153, t113); // Fp2 sub coeff 1/1\n    let t156 = circuit_add(t116, t119);\n    let t157 = circuit_mul(t156, in0);\n    let t158 = circuit_mul(t116, in1);\n    let t159 = circuit_sub(t158, t119);\n    let t160 = circuit_sub(t157, t158);\n    let t161 = circuit_sub(t160, t119);\n    let t162 = circuit_add(t154, t159); // Fp2 add coeff 0/1\n    let t163 = circuit_add(t155, t161); // Fp2 add coeff 1/1\n    let t164 = circuit_add(t0, t4); // Fp2 add coeff 0/1\n    let t165 = circuit_add(t1, t5); // Fp2 add coeff 1/1\n    let t166 = circuit_add(t18, t22); // Fp2 add coeff 0/1\n    let t167 = circuit_add(t19, t23); // Fp2 add coeff 1/1\n    let t168 = circuit_mul(t166, t164); // Fp2 mul start\n    let t169 = circuit_mul(t167, t165);\n    let t170 = circuit_sub(t168, t169); // Fp2 mul real part end\n    let t171 = circuit_mul(t166, t165);\n    let t172 = circuit_mul(t167, t164);\n    let t173 = circuit_add(t171, t172); // Fp2 mul imag part end\n    let t174 = circuit_sub(t170, t104); // Fp2 sub coeff 0/1\n    let t175 = circuit_sub(t173, t107); // Fp2 sub coeff 1/1\n    let t176 = circuit_sub(t174, t116); // Fp2 sub coeff 0/1\n    let t177 = circuit_sub(t175, t119); // Fp2 sub coeff 1/1\n    let t178 = circuit_add(t176, t110); // Fp2 add coeff 0/1\n    let t179 = circuit_add(t177, t113); // Fp2 add coeff 1/1\n    let t180 = circuit_add(t140, t62); // Fp6 add coeff 0/5\n    let t181 = circuit_add(t141, t63); // Fp6 add coeff 1/5\n    let t182 = circuit_add(t162, t84); // Fp6 add coeff 2/5\n    let t183 = circuit_add(t163, t85); // Fp6 add coeff 3/5\n    let t184 = circuit_add(t178, t100); // Fp6 add coeff 4/5\n    let t185 = circuit_add(t179, t101); // Fp6 add coeff 5/5\n    let t186 = circuit_add(t62, t62); // Fp6 add coeff 0/5\n    let t187 = circuit_add(t63, t63); // Fp6 add coeff 1/5\n    let t188 = circuit_add(t84, t84); // Fp6 add coeff 2/5\n    let t189 = circuit_add(t85, t85); // Fp6 add coeff 3/5\n    let t190 = circuit_add(t100, t100); // Fp6 add coeff 4/5\n    let t191 = circuit_add(t101, t101); // Fp6 add coeff 5/5\n    let t192 = circuit_add(t100, t101);\n    let t193 = circuit_mul(t192, in0);\n    let t194 = circuit_mul(t100, in1);\n    let t195 = circuit_sub(t194, t101);\n    let t196 = circuit_sub(t193, t194);\n    let t197 = circuit_sub(t196, t101);\n    let t198 = circuit_add(t180, t195); // Fp6 add coeff 0/5\n    let t199 = circuit_add(t181, t197); // Fp6 add coeff 1/5\n    let t200 = circuit_add(t182, t62); // Fp6 add coeff 2/5\n    let t201 = circuit_add(t183, t63); // Fp6 add coeff 3/5\n    let t202 = circuit_add(t184, t84); // Fp6 add coeff 4/5\n    let t203 = circuit_add(t185, t85); // Fp6 add coeff 5/5\n    let t204 = circuit_sub(in8, in12); // Fp2 sub coeff 0/1\n    let t205 = circuit_sub(in9, in13); // Fp2 sub coeff 1/1\n    let t206 = circuit_sub(in6, in10); // Fp2 sub coeff 0/1\n    let t207 = circuit_sub(in7, in11); // Fp2 sub coeff 1/1\n    let t208 = circuit_mul(t206, t206); // Fp2 Inv start\n    let t209 = circuit_mul(t207, t207);\n    let t210 = circuit_add(t208, t209);\n    let t211 = circuit_inverse(t210);\n    let t212 = circuit_mul(t206, t211); // Fp2 Inv real part end\n    let t213 = circuit_mul(t207, t211);\n    let t214 = circuit_sub(in2, t213); // Fp2 Inv imag part end\n    let t215 = circuit_mul(t204, t212); // Fp2 mul start\n    let t216 = circuit_mul(t205, t214);\n    let t217 = circuit_sub(t215, t216); // Fp2 mul real part end\n    let t218 = circuit_mul(t204, t214);\n    let t219 = circuit_mul(t205, t212);\n    let t220 = circuit_add(t218, t219); // Fp2 mul imag part end\n    let t221 = circuit_add(t217, t220);\n    let t222 = circuit_sub(t217, t220);\n    let t223 = circuit_mul(t221, t222);\n    let t224 = circuit_mul(t217, t220);\n    let t225 = circuit_add(t224, t224);\n    let t226 = circuit_add(in6, in10); // Fp2 add coeff 0/1\n    let t227 = circuit_add(in7, in11); // Fp2 add coeff 1/1\n    let t228 = circuit_sub(t223, t226); // Fp2 sub coeff 0/1\n    let t229 = circuit_sub(t225, t227); // Fp2 sub coeff 1/1\n    let t230 = circuit_mul(t217, in6); // Fp2 mul start\n    let t231 = circuit_mul(t220, in7);\n    let t232 = circuit_sub(t230, t231); // Fp2 mul real part end\n    let t233 = circuit_mul(t217, in7);\n    let t234 = circuit_mul(t220, in6);\n    let t235 = circuit_add(t233, t234); // Fp2 mul imag part end\n    let t236 = circuit_sub(t232, in8); // Fp2 sub coeff 0/1\n    let t237 = circuit_sub(t235, in9); // Fp2 sub coeff 1/1\n    let t238 = circuit_add(in8, in8); // Fp2 add coeff 0/1\n    let t239 = circuit_add(in9, in9); // Fp2 add coeff 1/1\n    let t240 = circuit_sub(t228, in6); // Fp2 sub coeff 0/1\n    let t241 = circuit_sub(t229, in7); // Fp2 sub coeff 1/1\n    let t242 = circuit_mul(t240, t240); // Fp2 Inv start\n    let t243 = circuit_mul(t241, t241);\n    let t244 = circuit_add(t242, t243);\n    let t245 = circuit_inverse(t244);\n    let t246 = circuit_mul(t240, t245); // Fp2 Inv real part end\n    let t247 = circuit_mul(t241, t245);\n    let t248 = circuit_sub(in2, t247); // Fp2 Inv imag part end\n    let t249 = circuit_mul(t238, t246); // Fp2 mul start\n    let t250 = circuit_mul(t239, t248);\n    let t251 = circuit_sub(t249, t250); // Fp2 mul real part end\n    let t252 = circuit_mul(t238, t248);\n    let t253 = circuit_mul(t239, t246);\n    let t254 = circuit_add(t252, t253); // Fp2 mul imag part end\n    let t255 = circuit_add(t217, t251); // Fp2 add coeff 0/1\n    let t256 = circuit_add(t220, t254); // Fp2 add coeff 1/1\n    let t257 = circuit_sub(in2, t255); // Fp2 neg coeff 0/1\n    let t258 = circuit_sub(in2, t256); // Fp2 neg coeff 1/1\n    let t259 = circuit_add(t257, t258);\n    let t260 = circuit_sub(t257, t258);\n    let t261 = circuit_mul(t259, t260);\n    let t262 = circuit_mul(t257, t258);\n    let t263 = circuit_add(t262, t262);\n    let t264 = circuit_sub(t261, in6); // Fp2 sub coeff 0/1\n    let t265 = circuit_sub(t263, in7); // Fp2 sub coeff 1/1\n    let t266 = circuit_sub(t264, t228); // Fp2 sub coeff 0/1\n    let t267 = circuit_sub(t265, t229); // Fp2 sub coeff 1/1\n    let t268 = circuit_sub(in6, t266); // Fp2 sub coeff 0/1\n    let t269 = circuit_sub(in7, t267); // Fp2 sub coeff 1/1\n    let t270 = circuit_mul(t257, t268); // Fp2 mul start\n    let t271 = circuit_mul(t258, t269);\n    let t272 = circuit_sub(t270, t271); // Fp2 mul real part end\n    let t273 = circuit_mul(t257, t269);\n    let t274 = circuit_mul(t258, t268);\n    let t275 = circuit_add(t273, t274); // Fp2 mul imag part end\n    let t276 = circuit_sub(t272, in8); // Fp2 sub coeff 0/1\n    let t277 = circuit_sub(t275, in9); // Fp2 sub coeff 1/1\n    let t278 = circuit_mul(t257, in6); // Fp2 mul start\n    let t279 = circuit_mul(t258, in7);\n    let t280 = circuit_sub(t278, t279); // Fp2 mul real part end\n    let t281 = circuit_mul(t257, in7);\n    let t282 = circuit_mul(t258, in6);\n    let t283 = circuit_add(t281, t282); // Fp2 mul imag part end\n    let t284 = circuit_sub(t280, in8); // Fp2 sub coeff 0/1\n    let t285 = circuit_sub(t283, in9); // Fp2 sub coeff 1/1\n    let t286 = circuit_mul(t217, in5);\n    let t287 = circuit_mul(t220, in5);\n    let t288 = circuit_mul(t236, in4);\n    let t289 = circuit_mul(t237, in4);\n    let t290 = circuit_mul(t257, in5);\n    let t291 = circuit_mul(t258, in5);\n    let t292 = circuit_mul(t284, in4);\n    let t293 = circuit_mul(t285, in4);\n    let t294 = circuit_mul(t186, t286); // Fp2 mul start\n    let t295 = circuit_mul(t187, t287);\n    let t296 = circuit_sub(t294, t295); // Fp2 mul real part end\n    let t297 = circuit_mul(t186, t287);\n    let t298 = circuit_mul(t187, t286);\n    let t299 = circuit_add(t297, t298); // Fp2 mul imag part end\n    let t300 = circuit_mul(t188, t288); // Fp2 mul start\n    let t301 = circuit_mul(t189, t289);\n    let t302 = circuit_sub(t300, t301); // Fp2 mul real part end\n    let t303 = circuit_mul(t188, t289);\n    let t304 = circuit_mul(t189, t288);\n    let t305 = circuit_add(t303, t304); // Fp2 mul imag part end\n    let t306 = circuit_add(t188, t190); // Fp2 add coeff 0/1\n    let t307 = circuit_add(t189, t191); // Fp2 add coeff 1/1\n    let t308 = circuit_mul(t288, t306); // Fp2 mul start\n    let t309 = circuit_mul(t289, t307);\n    let t310 = circuit_sub(t308, t309); // Fp2 mul real part end\n    let t311 = circuit_mul(t288, t307);\n    let t312 = circuit_mul(t289, t306);\n    let t313 = circuit_add(t311, t312); // Fp2 mul imag part end\n    let t314 = circuit_sub(t310, t302); // Fp2 sub coeff 0/1\n    let t315 = circuit_sub(t313, t305); // Fp2 sub coeff 1/1\n    let t316 = circuit_add(t314, t315);\n    let t317 = circuit_mul(t316, in0);\n    let t318 = circuit_mul(t314, in1);\n    let t319 = circuit_sub(t318, t315);\n    let t320 = circuit_sub(t317, t318);\n    let t321 = circuit_sub(t320, t315);\n    let t322 = circuit_add(t319, t296); // Fp2 add coeff 0/1\n    let t323 = circuit_add(t321, t299); // Fp2 add coeff 1/1\n    let t324 = circuit_add(t186, t190); // Fp2 add coeff 0/1\n    let t325 = circuit_add(t187, t191); // Fp2 add coeff 1/1\n    let t326 = circuit_mul(t286, t324); // Fp2 mul start\n    let t327 = circuit_mul(t287, t325);\n    let t328 = circuit_sub(t326, t327); // Fp2 mul real part end\n    let t329 = circuit_mul(t286, t325);\n    let t330 = circuit_mul(t287, t324);\n    let t331 = circuit_add(t329, t330); // Fp2 mul imag part end\n    let t332 = circuit_sub(t328, t296); // Fp2 sub coeff 0/1\n    let t333 = circuit_sub(t331, t299); // Fp2 sub coeff 1/1\n    let t334 = circuit_add(t332, t302); // Fp2 add coeff 0/1\n    let t335 = circuit_add(t333, t305); // Fp2 add coeff 1/1\n    let t336 = circuit_add(t286, t288); // Fp2 add coeff 0/1\n    let t337 = circuit_add(t287, t289); // Fp2 add coeff 1/1\n    let t338 = circuit_add(t186, t188); // Fp2 add coeff 0/1\n    let t339 = circuit_add(t187, t189); // Fp2 add coeff 1/1\n    let t340 = circuit_mul(t336, t338); // Fp2 mul start\n    let t341 = circuit_mul(t337, t339);\n    let t342 = circuit_sub(t340, t341); // Fp2 mul real part end\n    let t343 = circuit_mul(t336, t339);\n    let t344 = circuit_mul(t337, t338);\n    let t345 = circuit_add(t343, t344); // Fp2 mul imag part end\n    let t346 = circuit_sub(t342, t296); // Fp2 sub coeff 0/1\n    let t347 = circuit_sub(t345, t299); // Fp2 sub coeff 1/1\n    let t348 = circuit_sub(t346, t302); // Fp2 sub coeff 0/1\n    let t349 = circuit_sub(t347, t305); // Fp2 sub coeff 1/1\n    let t350 = circuit_add(in3, t286); // Fp2 add coeff 0/1\n    let t351 = circuit_add(in2, t287); // Fp2 add coeff 1/1\n    let t352 = circuit_add(t198, t186); // Fp6 add coeff 0/5\n    let t353 = circuit_add(t199, t187); // Fp6 add coeff 1/5\n    let t354 = circuit_add(t200, t188); // Fp6 add coeff 2/5\n    let t355 = circuit_add(t201, t189); // Fp6 add coeff 3/5\n    let t356 = circuit_add(t202, t190); // Fp6 add coeff 4/5\n    let t357 = circuit_add(t203, t191); // Fp6 add coeff 5/5\n    let t358 = circuit_mul(t352, t350); // Fp2 mul start\n    let t359 = circuit_mul(t353, t351);\n    let t360 = circuit_sub(t358, t359); // Fp2 mul real part end\n    let t361 = circuit_mul(t352, t351);\n    let t362 = circuit_mul(t353, t350);\n    let t363 = circuit_add(t361, t362); // Fp2 mul imag part end\n    let t364 = circuit_mul(t354, t288); // Fp2 mul start\n    let t365 = circuit_mul(t355, t289);\n    let t366 = circuit_sub(t364, t365); // Fp2 mul real part end\n    let t367 = circuit_mul(t354, t289);\n    let t368 = circuit_mul(t355, t288);\n    let t369 = circuit_add(t367, t368); // Fp2 mul imag part end\n    let t370 = circuit_add(t354, t356); // Fp2 add coeff 0/1\n    let t371 = circuit_add(t355, t357); // Fp2 add coeff 1/1\n    let t372 = circuit_mul(t288, t370); // Fp2 mul start\n    let t373 = circuit_mul(t289, t371);\n    let t374 = circuit_sub(t372, t373); // Fp2 mul real part end\n    let t375 = circuit_mul(t288, t371);\n    let t376 = circuit_mul(t289, t370);\n    let t377 = circuit_add(t375, t376); // Fp2 mul imag part end\n    let t378 = circuit_sub(t374, t366); // Fp2 sub coeff 0/1\n    let t379 = circuit_sub(t377, t369); // Fp2 sub coeff 1/1\n    let t380 = circuit_add(t378, t379);\n    let t381 = circuit_mul(t380, in0);\n    let t382 = circuit_mul(t378, in1);\n    let t383 = circuit_sub(t382, t379);\n    let t384 = circuit_sub(t381, t382);\n    let t385 = circuit_sub(t384, t379);\n    let t386 = circuit_add(t383, t360); // Fp2 add coeff 0/1\n    let t387 = circuit_add(t385, t363); // Fp2 add coeff 1/1\n    let t388 = circuit_add(t352, t356); // Fp2 add coeff 0/1\n    let t389 = circuit_add(t353, t357); // Fp2 add coeff 1/1\n    let t390 = circuit_mul(t350, t388); // Fp2 mul start\n    let t391 = circuit_mul(t351, t389);\n    let t392 = circuit_sub(t390, t391); // Fp2 mul real part end\n    let t393 = circuit_mul(t350, t389);\n    let t394 = circuit_mul(t351, t388);\n    let t395 = circuit_add(t393, t394); // Fp2 mul imag part end\n    let t396 = circuit_sub(t392, t360); // Fp2 sub coeff 0/1\n    let t397 = circuit_sub(t395, t363); // Fp2 sub coeff 1/1\n    let t398 = circuit_add(t396, t366); // Fp2 add coeff 0/1\n    let t399 = circuit_add(t397, t369); // Fp2 add coeff 1/1\n    let t400 = circuit_add(t350, t288); // Fp2 add coeff 0/1\n    let t401 = circuit_add(t351, t289); // Fp2 add coeff 1/1\n    let t402 = circuit_add(t352, t354); // Fp2 add coeff 0/1\n    let t403 = circuit_add(t353, t355); // Fp2 add coeff 1/1\n    let t404 = circuit_mul(t400, t402); // Fp2 mul start\n    let t405 = circuit_mul(t401, t403);\n    let t406 = circuit_sub(t404, t405); // Fp2 mul real part end\n    let t407 = circuit_mul(t400, t403);\n    let t408 = circuit_mul(t401, t402);\n    let t409 = circuit_add(t407, t408); // Fp2 mul imag part end\n    let t410 = circuit_sub(t406, t360); // Fp2 sub coeff 0/1\n    let t411 = circuit_sub(t409, t363); // Fp2 sub coeff 1/1\n    let t412 = circuit_sub(t410, t366); // Fp2 sub coeff 0/1\n    let t413 = circuit_sub(t411, t369); // Fp2 sub coeff 1/1\n    let t414 = circuit_add(t198, t322); // Fp6 add coeff 0/5\n    let t415 = circuit_add(t199, t323); // Fp6 add coeff 1/5\n    let t416 = circuit_add(t200, t348); // Fp6 add coeff 2/5\n    let t417 = circuit_add(t201, t349); // Fp6 add coeff 3/5\n    let t418 = circuit_add(t202, t334); // Fp6 add coeff 4/5\n    let t419 = circuit_add(t203, t335); // Fp6 add coeff 5/5\n    let t420 = circuit_sub(in2, t414); // Fp6 neg coeff 0/5\n    let t421 = circuit_sub(in2, t415); // Fp6 neg coeff 1/5\n    let t422 = circuit_sub(in2, t416); // Fp6 neg coeff 2/5\n    let t423 = circuit_sub(in2, t417); // Fp6 neg coeff 3/5\n    let t424 = circuit_sub(in2, t418); // Fp6 neg coeff 4/5\n    let t425 = circuit_sub(in2, t419); // Fp6 neg coeff 5/5\n    let t426 = circuit_add(t420, t386); // Fp6 add coeff 0/5\n    let t427 = circuit_add(t421, t387); // Fp6 add coeff 1/5\n    let t428 = circuit_add(t422, t412); // Fp6 add coeff 2/5\n    let t429 = circuit_add(t423, t413); // Fp6 add coeff 3/5\n    let t430 = circuit_add(t424, t398); // Fp6 add coeff 4/5\n    let t431 = circuit_add(t425, t399); // Fp6 add coeff 5/5\n    let t432 = circuit_add(t334, t335);\n    let t433 = circuit_mul(t432, in0);\n    let t434 = circuit_mul(t334, in1);\n    let t435 = circuit_sub(t434, t335);\n    let t436 = circuit_sub(t433, t434);\n    let t437 = circuit_sub(t436, t335);\n    let t438 = circuit_add(t435, t198); // Fp6 add coeff 0/5\n    let t439 = circuit_add(t437, t199); // Fp6 add coeff 1/5\n    let t440 = circuit_add(t322, t200); // Fp6 add coeff 2/5\n    let t441 = circuit_add(t323, t201); // Fp6 add coeff 3/5\n    let t442 = circuit_add(t348, t202); // Fp6 add coeff 4/5\n    let t443 = circuit_add(t349, t203); // Fp6 add coeff 5/5\n    let t444 = circuit_mul(t426, t290); // Fp2 mul start\n    let t445 = circuit_mul(t427, t291);\n    let t446 = circuit_sub(t444, t445); // Fp2 mul real part end\n    let t447 = circuit_mul(t426, t291);\n    let t448 = circuit_mul(t427, t290);\n    let t449 = circuit_add(t447, t448); // Fp2 mul imag part end\n    let t450 = circuit_mul(t428, t292); // Fp2 mul start\n    let t451 = circuit_mul(t429, t293);\n    let t452 = circuit_sub(t450, t451); // Fp2 mul real part end\n    let t453 = circuit_mul(t428, t293);\n    let t454 = circuit_mul(t429, t292);\n    let t455 = circuit_add(t453, t454); // Fp2 mul imag part end\n    let t456 = circuit_add(t428, t430); // Fp2 add coeff 0/1\n    let t457 = circuit_add(t429, t431); // Fp2 add coeff 1/1\n    let t458 = circuit_mul(t292, t456); // Fp2 mul start\n    let t459 = circuit_mul(t293, t457);\n    let t460 = circuit_sub(t458, t459); // Fp2 mul real part end\n    let t461 = circuit_mul(t292, t457);\n    let t462 = circuit_mul(t293, t456);\n    let t463 = circuit_add(t461, t462); // Fp2 mul imag part end\n    let t464 = circuit_sub(t460, t452); // Fp2 sub coeff 0/1\n    let t465 = circuit_sub(t463, t455); // Fp2 sub coeff 1/1\n    let t466 = circuit_add(t464, t465);\n    let t467 = circuit_mul(t466, in0);\n    let t468 = circuit_mul(t464, in1);\n    let t469 = circuit_sub(t468, t465);\n    let t470 = circuit_sub(t467, t468);\n    let t471 = circuit_sub(t470, t465);\n    let t472 = circuit_add(t469, t446); // Fp2 add coeff 0/1\n    let t473 = circuit_add(t471, t449); // Fp2 add coeff 1/1\n    let t474 = circuit_add(t426, t430); // Fp2 add coeff 0/1\n    let t475 = circuit_add(t427, t431); // Fp2 add coeff 1/1\n    let t476 = circuit_mul(t290, t474); // Fp2 mul start\n    let t477 = circuit_mul(t291, t475);\n    let t478 = circuit_sub(t476, t477); // Fp2 mul real part end\n    let t479 = circuit_mul(t290, t475);\n    let t480 = circuit_mul(t291, t474);\n    let t481 = circuit_add(t479, t480); // Fp2 mul imag part end\n    let t482 = circuit_sub(t478, t446); // Fp2 sub coeff 0/1\n    let t483 = circuit_sub(t481, t449); // Fp2 sub coeff 1/1\n    let t484 = circuit_add(t482, t452); // Fp2 add coeff 0/1\n    let t485 = circuit_add(t483, t455); // Fp2 add coeff 1/1\n    let t486 = circuit_add(t290, t292); // Fp2 add coeff 0/1\n    let t487 = circuit_add(t291, t293); // Fp2 add coeff 1/1\n    let t488 = circuit_add(t426, t428); // Fp2 add coeff 0/1\n    let t489 = circuit_add(t427, t429); // Fp2 add coeff 1/1\n    let t490 = circuit_mul(t486, t488); // Fp2 mul start\n    let t491 = circuit_mul(t487, t489);\n    let t492 = circuit_sub(t490, t491); // Fp2 mul real part end\n    let t493 = circuit_mul(t486, t489);\n    let t494 = circuit_mul(t487, t488);\n    let t495 = circuit_add(t493, t494); // Fp2 mul imag part end\n    let t496 = circuit_sub(t492, t446); // Fp2 sub coeff 0/1\n    let t497 = circuit_sub(t495, t449); // Fp2 sub coeff 1/1\n    let t498 = circuit_sub(t496, t452); // Fp2 sub coeff 0/1\n    let t499 = circuit_sub(t497, t455); // Fp2 sub coeff 1/1\n    let t500 = circuit_add(in3, t290); // Fp2 add coeff 0/1\n    let t501 = circuit_add(in2, t291); // Fp2 add coeff 1/1\n    let t502 = circuit_add(t438, t426); // Fp6 add coeff 0/5\n    let t503 = circuit_add(t439, t427); // Fp6 add coeff 1/5\n    let t504 = circuit_add(t440, t428); // Fp6 add coeff 2/5\n    let t505 = circuit_add(t441, t429); // Fp6 add coeff 3/5\n    let t506 = circuit_add(t442, t430); // Fp6 add coeff 4/5\n    let t507 = circuit_add(t443, t431); // Fp6 add coeff 5/5\n    let t508 = circuit_mul(t502, t500); // Fp2 mul start\n    let t509 = circuit_mul(t503, t501);\n    let t510 = circuit_sub(t508, t509); // Fp2 mul real part end\n    let t511 = circuit_mul(t502, t501);\n    let t512 = circuit_mul(t503, t500);\n    let t513 = circuit_add(t511, t512); // Fp2 mul imag part end\n    let t514 = circuit_mul(t504, t292); // Fp2 mul start\n    let t515 = circuit_mul(t505, t293);\n    let t516 = circuit_sub(t514, t515); // Fp2 mul real part end\n    let t517 = circuit_mul(t504, t293);\n    let t518 = circuit_mul(t505, t292);\n    let t519 = circuit_add(t517, t518); // Fp2 mul imag part end\n    let t520 = circuit_add(t504, t506); // Fp2 add coeff 0/1\n    let t521 = circuit_add(t505, t507); // Fp2 add coeff 1/1\n    let t522 = circuit_mul(t292, t520); // Fp2 mul start\n    let t523 = circuit_mul(t293, t521);\n    let t524 = circuit_sub(t522, t523); // Fp2 mul real part end\n    let t525 = circuit_mul(t292, t521);\n    let t526 = circuit_mul(t293, t520);\n    let t527 = circuit_add(t525, t526); // Fp2 mul imag part end\n    let t528 = circuit_sub(t524, t516); // Fp2 sub coeff 0/1\n    let t529 = circuit_sub(t527, t519); // Fp2 sub coeff 1/1\n    let t530 = circuit_add(t528, t529);\n    let t531 = circuit_mul(t530, in0);\n    let t532 = circuit_mul(t528, in1);\n    let t533 = circuit_sub(t532, t529);\n    let t534 = circuit_sub(t531, t532);\n    let t535 = circuit_sub(t534, t529);\n    let t536 = circuit_add(t533, t510); // Fp2 add coeff 0/1\n    let t537 = circuit_add(t535, t513); // Fp2 add coeff 1/1\n    let t538 = circuit_add(t502, t506); // Fp2 add coeff 0/1\n    let t539 = circuit_add(t503, t507); // Fp2 add coeff 1/1\n    let t540 = circuit_mul(t500, t538); // Fp2 mul start\n    let t541 = circuit_mul(t501, t539);\n    let t542 = circuit_sub(t540, t541); // Fp2 mul real part end\n    let t543 = circuit_mul(t500, t539);\n    let t544 = circuit_mul(t501, t538);\n    let t545 = circuit_add(t543, t544); // Fp2 mul imag part end\n    let t546 = circuit_sub(t542, t510); // Fp2 sub coeff 0/1\n    let t547 = circuit_sub(t545, t513); // Fp2 sub coeff 1/1\n    let t548 = circuit_add(t546, t516); // Fp2 add coeff 0/1\n    let t549 = circuit_add(t547, t519); // Fp2 add coeff 1/1\n    let t550 = circuit_add(t500, t292); // Fp2 add coeff 0/1\n    let t551 = circuit_add(t501, t293); // Fp2 add coeff 1/1\n    let t552 = circuit_add(t502, t504); // Fp2 add coeff 0/1\n    let t553 = circuit_add(t503, t505); // Fp2 add coeff 1/1\n    let t554 = circuit_mul(t550, t552); // Fp2 mul start\n    let t555 = circuit_mul(t551, t553);\n    let t556 = circuit_sub(t554, t555); // Fp2 mul real part end\n    let t557 = circuit_mul(t550, t553);\n    let t558 = circuit_mul(t551, t552);\n    let t559 = circuit_add(t557, t558); // Fp2 mul imag part end\n    let t560 = circuit_sub(t556, t510); // Fp2 sub coeff 0/1\n    let t561 = circuit_sub(t559, t513); // Fp2 sub coeff 1/1\n    let t562 = circuit_sub(t560, t516); // Fp2 sub coeff 0/1\n    let t563 = circuit_sub(t561, t519); // Fp2 sub coeff 1/1\n    let t564 = circuit_add(t438, t472); // Fp6 add coeff 0/5\n    let t565 = circuit_add(t439, t473); // Fp6 add coeff 1/5\n    let t566 = circuit_add(t440, t498); // Fp6 add coeff 2/5\n    let t567 = circuit_add(t441, t499); // Fp6 add coeff 3/5\n    let t568 = circuit_add(t442, t484); // Fp6 add coeff 4/5\n    let t569 = circuit_add(t443, t485); // Fp6 add coeff 5/5\n    let t570 = circuit_sub(in2, t564); // Fp6 neg coeff 0/5\n    let t571 = circuit_sub(in2, t565); // Fp6 neg coeff 1/5\n    let t572 = circuit_sub(in2, t566); // Fp6 neg coeff 2/5\n    let t573 = circuit_sub(in2, t567); // Fp6 neg coeff 3/5\n    let t574 = circuit_sub(in2, t568); // Fp6 neg coeff 4/5\n    let t575 = circuit_sub(in2, t569); // Fp6 neg coeff 5/5\n    let t576 = circuit_add(t570, t536); // Fp6 add coeff 0/5\n    let t577 = circuit_add(t571, t537); // Fp6 add coeff 1/5\n    let t578 = circuit_add(t572, t562); // Fp6 add coeff 2/5\n    let t579 = circuit_add(t573, t563); // Fp6 add coeff 3/5\n    let t580 = circuit_add(t574, t548); // Fp6 add coeff 4/5\n    let t581 = circuit_add(t575, t549); // Fp6 add coeff 5/5\n    let t582 = circuit_add(t484, t485);\n    let t583 = circuit_mul(t582, in0);\n    let t584 = circuit_mul(t484, in1);\n    let t585 = circuit_sub(t584, t485);\n    let t586 = circuit_sub(t583, t584);\n    let t587 = circuit_sub(t586, t485);\n    let t588 = circuit_add(t585, t438); // Fp6 add coeff 0/5\n    let t589 = circuit_add(t587, t439); // Fp6 add coeff 1/5\n    let t590 = circuit_add(t472, t440); // Fp6 add coeff 2/5\n    let t591 = circuit_add(t473, t441); // Fp6 add coeff 3/5\n    let t592 = circuit_add(t498, t442); // Fp6 add coeff 4/5\n    let t593 = circuit_add(t499, t443); // Fp6 add coeff 5/5\n    let t594 = circuit_add(t266, t267);\n    let t595 = circuit_add(t594, t276);\n    let t596 = circuit_add(t595, t277);\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (\n        t596, t588, t589, t590, t591, t592, t593, t576, t577, t578, t579, t580, t581,\n    )\n        .new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0xa, 0x0, 0x0, 0x0]); // in0\n    circuit_inputs = circuit_inputs.next_2([0x9, 0x0, 0x0, 0x0]); // in1\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in2\n    circuit_inputs = circuit_inputs.next_2([0x1, 0x0, 0x0, 0x0]); // in3\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in4\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in5\n    circuit_inputs = circuit_inputs.next_2(Q_0.x0); // in6\n    circuit_inputs = circuit_inputs.next_2(Q_0.x1); // in7\n    circuit_inputs = circuit_inputs.next_2(Q_0.y0); // in8\n    circuit_inputs = circuit_inputs.next_2(Q_0.y1); // in9\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_0.x0); // in10\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_0.x1); // in11\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_0.y0); // in12\n    circuit_inputs = circuit_inputs.next_2(Q_or_Q_neg_0.y1); // in13\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b0a0); // in14\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b0a1); // in15\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b1a0); // in16\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b1a1); // in17\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b2a0); // in18\n    circuit_inputs = circuit_inputs.next_2(M_i.c0b2a1); // in19\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b0a0); // in20\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b0a1); // in21\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b1a0); // in22\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b1a1); // in23\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b2a0); // in24\n    circuit_inputs = circuit_inputs.next_2(M_i.c1b2a1); // in25\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Q0: G2Point = G2Point {\n        x0: outputs.get_output(t266),\n        x1: outputs.get_output(t267),\n        y0: outputs.get_output(t276),\n        y1: outputs.get_output(t277),\n    };\n    let Mi_plus_one: E12T = E12T {\n        c0b0a0: outputs.get_output(t588),\n        c0b0a1: outputs.get_output(t589),\n        c0b1a0: outputs.get_output(t590),\n        c0b1a1: outputs.get_output(t591),\n        c0b2a0: outputs.get_output(t592),\n        c0b2a1: outputs.get_output(t593),\n        c1b0a0: outputs.get_output(t576),\n        c1b0a1: outputs.get_output(t577),\n        c1b1a0: outputs.get_output(t578),\n        c1b1a1: outputs.get_output(t579),\n        c1b2a0: outputs.get_output(t580),\n        c1b2a1: outputs.get_output(t581),\n    };\n    return (Q0, Mi_plus_one);\n}\n#[inline(always)]\npub fn run_BN254_TOWER_MILLER_FINALIZE_BN_1P_circuit(\n    original_Q0: G2Point, yInv_0: u384, xNegOverY_0: u384, Q_0: G2Point, Mi: E12T,\n) -> (E12T,) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x2fb347984f7911f74c0bec3cf559b143b78cc310c2c3330c99e39557176f553d\n    let in1 = CE::<CI<1>> {}; // 0x16c9e55061ebae204ba4cc8bd75a079432ae2a1d0b7c9dce1665d51c640fcba2\n    let in2 = CE::<CI<2>> {}; // 0x63cf305489af5dcdc5ec698b6e2f9b9dbaae0eda9c95998dc54014671a0135a\n    let in3 = CE::<CI<3>> {}; // 0x7c03cbcac41049a0704b5a7ec796f2b21807dc98fa25bd282d37f632623b0e3\n    let in4 = CE::<CI<4>> {}; // 0x30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd48\n    let in5 = CE::<CI<5>> {}; // 0x1\n    let in6 = CE::<CI<6>> {}; // 0x0\n    let in7 = CE::<CI<7>> {}; // 0xa\n    let in8 = CE::<CI<8>> {}; // 0x9\n\n    // INPUT stack\n    let (in9, in10, in11) = (CE::<CI<9>> {}, CE::<CI<10>> {}, CE::<CI<11>> {});\n    let (in12, in13, in14) = (CE::<CI<12>> {}, CE::<CI<13>> {}, CE::<CI<14>> {});\n    let (in15, in16, in17) = (CE::<CI<15>> {}, CE::<CI<16>> {}, CE::<CI<17>> {});\n    let (in18, in19, in20) = (CE::<CI<18>> {}, CE::<CI<19>> {}, CE::<CI<20>> {});\n    let (in21, in22, in23) = (CE::<CI<21>> {}, CE::<CI<22>> {}, CE::<CI<23>> {});\n    let (in24, in25, in26) = (CE::<CI<24>> {}, CE::<CI<25>> {}, CE::<CI<26>> {});\n    let (in27, in28, in29) = (CE::<CI<27>> {}, CE::<CI<28>> {}, CE::<CI<29>> {});\n    let in30 = CE::<CI<30>> {};\n    let t0 = circuit_sub(in6, in10);\n    let t1 = circuit_sub(in6, in12);\n    let t2 = circuit_mul(in9, in0); // Fp2 mul start\n    let t3 = circuit_mul(t0, in1);\n    let t4 = circuit_sub(t2, t3); // Fp2 mul real part end\n    let t5 = circuit_mul(in9, in1);\n    let t6 = circuit_mul(t0, in0);\n    let t7 = circuit_add(t5, t6); // Fp2 mul imag part end\n    let t8 = circuit_mul(in11, in2); // Fp2 mul start\n    let t9 = circuit_mul(t1, in3);\n    let t10 = circuit_sub(t8, t9); // Fp2 mul real part end\n    let t11 = circuit_mul(in11, in3);\n    let t12 = circuit_mul(t1, in2);\n    let t13 = circuit_add(t11, t12); // Fp2 mul imag part end\n    let t14 = circuit_mul(in9, in4); // Fp2 scalar mul coeff 0/1\n    let t15 = circuit_mul(in10, in4); // Fp2 scalar mul coeff 1/1\n    let t16 = circuit_mul(in11, in5); // Fp2 scalar mul coeff 0/1\n    let t17 = circuit_mul(in12, in5); // Fp2 scalar mul coeff 1/1\n    let t18 = circuit_sub(in17, t10); // Fp2 sub coeff 0/1\n    let t19 = circuit_sub(in18, t13); // Fp2 sub coeff 1/1\n    let t20 = circuit_sub(in15, t4); // Fp2 sub coeff 0/1\n    let t21 = circuit_sub(in16, t7); // Fp2 sub coeff 1/1\n    let t22 = circuit_mul(t20, t20); // Fp2 Inv start\n    let t23 = circuit_mul(t21, t21);\n    let t24 = circuit_add(t22, t23);\n    let t25 = circuit_inverse(t24);\n    let t26 = circuit_mul(t20, t25); // Fp2 Inv real part end\n    let t27 = circuit_mul(t21, t25);\n    let t28 = circuit_sub(in6, t27); // Fp2 Inv imag part end\n    let t29 = circuit_mul(t18, t26); // Fp2 mul start\n    let t30 = circuit_mul(t19, t28);\n    let t31 = circuit_sub(t29, t30); // Fp2 mul real part end\n    let t32 = circuit_mul(t18, t28);\n    let t33 = circuit_mul(t19, t26);\n    let t34 = circuit_add(t32, t33); // Fp2 mul imag part end\n    let t35 = circuit_add(t31, t34);\n    let t36 = circuit_sub(t31, t34);\n    let t37 = circuit_mul(t35, t36);\n    let t38 = circuit_mul(t31, t34);\n    let t39 = circuit_add(t38, t38);\n    let t40 = circuit_add(in15, t4); // Fp2 add coeff 0/1\n    let t41 = circuit_add(in16, t7); // Fp2 add coeff 1/1\n    let t42 = circuit_sub(t37, t40); // Fp2 sub coeff 0/1\n    let t43 = circuit_sub(t39, t41); // Fp2 sub coeff 1/1\n    let t44 = circuit_sub(in15, t42); // Fp2 sub coeff 0/1\n    let t45 = circuit_sub(in16, t43); // Fp2 sub coeff 1/1\n    let t46 = circuit_mul(t31, t44); // Fp2 mul start\n    let t47 = circuit_mul(t34, t45);\n    let t48 = circuit_sub(t46, t47); // Fp2 mul real part end\n    let t49 = circuit_mul(t31, t45);\n    let t50 = circuit_mul(t34, t44);\n    let t51 = circuit_add(t49, t50); // Fp2 mul imag part end\n    let t52 = circuit_sub(t48, in17); // Fp2 sub coeff 0/1\n    let t53 = circuit_sub(t51, in18); // Fp2 sub coeff 1/1\n    let t54 = circuit_mul(t31, in15); // Fp2 mul start\n    let t55 = circuit_mul(t34, in16);\n    let t56 = circuit_sub(t54, t55); // Fp2 mul real part end\n    let t57 = circuit_mul(t31, in16);\n    let t58 = circuit_mul(t34, in15);\n    let t59 = circuit_add(t57, t58); // Fp2 mul imag part end\n    let t60 = circuit_sub(t56, in17); // Fp2 sub coeff 0/1\n    let t61 = circuit_sub(t59, in18); // Fp2 sub coeff 1/1\n    let t62 = circuit_sub(t52, t16); // Fp2 sub coeff 0/1\n    let t63 = circuit_sub(t53, t17); // Fp2 sub coeff 1/1\n    let t64 = circuit_sub(t42, t14); // Fp2 sub coeff 0/1\n    let t65 = circuit_sub(t43, t15); // Fp2 sub coeff 1/1\n    let t66 = circuit_mul(t64, t64); // Fp2 Inv start\n    let t67 = circuit_mul(t65, t65);\n    let t68 = circuit_add(t66, t67);\n    let t69 = circuit_inverse(t68);\n    let t70 = circuit_mul(t64, t69); // Fp2 Inv real part end\n    let t71 = circuit_mul(t65, t69);\n    let t72 = circuit_sub(in6, t71); // Fp2 Inv imag part end\n    let t73 = circuit_mul(t62, t70); // Fp2 mul start\n    let t74 = circuit_mul(t63, t72);\n    let t75 = circuit_sub(t73, t74); // Fp2 mul real part end\n    let t76 = circuit_mul(t62, t72);\n    let t77 = circuit_mul(t63, t70);\n    let t78 = circuit_add(t76, t77); // Fp2 mul imag part end\n    let t79 = circuit_mul(t75, t42); // Fp2 mul start\n    let t80 = circuit_mul(t78, t43);\n    let t81 = circuit_sub(t79, t80); // Fp2 mul real part end\n    let t82 = circuit_mul(t75, t43);\n    let t83 = circuit_mul(t78, t42);\n    let t84 = circuit_add(t82, t83); // Fp2 mul imag part end\n    let t85 = circuit_sub(t81, t52); // Fp2 sub coeff 0/1\n    let t86 = circuit_sub(t84, t53); // Fp2 sub coeff 1/1\n    let t87 = circuit_mul(t31, in14);\n    let t88 = circuit_mul(t34, in14);\n    let t89 = circuit_mul(t60, in13);\n    let t90 = circuit_mul(t61, in13);\n    let t91 = circuit_mul(t75, in14);\n    let t92 = circuit_mul(t78, in14);\n    let t93 = circuit_mul(t85, in13);\n    let t94 = circuit_mul(t86, in13);\n    let t95 = circuit_mul(t91, t87); // Fp2 mul start\n    let t96 = circuit_mul(t92, t88);\n    let t97 = circuit_sub(t95, t96); // Fp2 mul real part end\n    let t98 = circuit_mul(t91, t88);\n    let t99 = circuit_mul(t92, t87);\n    let t100 = circuit_add(t98, t99); // Fp2 mul imag part end\n    let t101 = circuit_mul(t93, t89); // Fp2 mul start\n    let t102 = circuit_mul(t94, t90);\n    let t103 = circuit_sub(t101, t102); // Fp2 mul real part end\n    let t104 = circuit_mul(t93, t90);\n    let t105 = circuit_mul(t94, t89);\n    let t106 = circuit_add(t104, t105); // Fp2 mul imag part end\n    let t107 = circuit_add(t93, t89); // Fp2 add coeff 0/1\n    let t108 = circuit_add(t94, t90); // Fp2 add coeff 1/1\n    let t109 = circuit_add(t91, t87); // Fp2 add coeff 0/1\n    let t110 = circuit_add(t92, t88); // Fp2 add coeff 1/1\n    let t111 = circuit_add(t91, t93); // Fp2 add coeff 0/1\n    let t112 = circuit_add(t92, t94); // Fp2 add coeff 1/1\n    let t113 = circuit_add(t87, t89); // Fp2 add coeff 0/1\n    let t114 = circuit_add(t88, t90); // Fp2 add coeff 1/1\n    let t115 = circuit_mul(t113, t111); // Fp2 mul start\n    let t116 = circuit_mul(t114, t112);\n    let t117 = circuit_sub(t115, t116); // Fp2 mul real part end\n    let t118 = circuit_mul(t113, t112);\n    let t119 = circuit_mul(t114, t111);\n    let t120 = circuit_add(t118, t119); // Fp2 mul imag part end\n    let t121 = circuit_sub(t117, t97); // Fp2 sub coeff 0/1\n    let t122 = circuit_sub(t120, t100); // Fp2 sub coeff 1/1\n    let t123 = circuit_sub(t121, t103); // Fp2 sub coeff 0/1\n    let t124 = circuit_sub(t122, t106); // Fp2 sub coeff 1/1\n    let t125 = circuit_add(t103, t106);\n    let t126 = circuit_mul(t125, in7);\n    let t127 = circuit_mul(t103, in8);\n    let t128 = circuit_sub(t127, t106);\n    let t129 = circuit_sub(t126, t127);\n    let t130 = circuit_sub(t129, t106);\n    let t131 = circuit_add(t128, in5);\n    let t132 = circuit_add(in19, in25); // Fp6 add coeff 0/5\n    let t133 = circuit_add(in20, in26); // Fp6 add coeff 1/5\n    let t134 = circuit_add(in21, in27); // Fp6 add coeff 2/5\n    let t135 = circuit_add(in22, in28); // Fp6 add coeff 3/5\n    let t136 = circuit_add(in23, in29); // Fp6 add coeff 4/5\n    let t137 = circuit_add(in24, in30); // Fp6 add coeff 5/5\n    let t138 = circuit_add(t131, t109); // Fp6 add coeff 0/5\n    let t139 = circuit_add(t130, t110); // Fp6 add coeff 1/5\n    let t140 = circuit_add(t97, t107); // Fp6 add coeff 2/5\n    let t141 = circuit_add(t100, t108); // Fp6 add coeff 3/5\n    let t142 = circuit_add(t123, in6); // Fp6 add coeff 4/5\n    let t143 = circuit_add(t124, in6); // Fp6 add coeff 5/5\n    let t144 = circuit_mul(t132, t138); // Fp2 mul start\n    let t145 = circuit_mul(t133, t139);\n    let t146 = circuit_sub(t144, t145); // Fp2 mul real part end\n    let t147 = circuit_mul(t132, t139);\n    let t148 = circuit_mul(t133, t138);\n    let t149 = circuit_add(t147, t148); // Fp2 mul imag part end\n    let t150 = circuit_mul(t134, t140); // Fp2 mul start\n    let t151 = circuit_mul(t135, t141);\n    let t152 = circuit_sub(t150, t151); // Fp2 mul real part end\n    let t153 = circuit_mul(t134, t141);\n    let t154 = circuit_mul(t135, t140);\n    let t155 = circuit_add(t153, t154); // Fp2 mul imag part end\n    let t156 = circuit_mul(t136, t142); // Fp2 mul start\n    let t157 = circuit_mul(t137, t143);\n    let t158 = circuit_sub(t156, t157); // Fp2 mul real part end\n    let t159 = circuit_mul(t136, t143);\n    let t160 = circuit_mul(t137, t142);\n    let t161 = circuit_add(t159, t160); // Fp2 mul imag part end\n    let t162 = circuit_add(t134, t136); // Fp2 add coeff 0/1\n    let t163 = circuit_add(t135, t137); // Fp2 add coeff 1/1\n    let t164 = circuit_add(t140, t142); // Fp2 add coeff 0/1\n    let t165 = circuit_add(t141, t143); // Fp2 add coeff 1/1\n    let t166 = circuit_mul(t162, t164); // Fp2 mul start\n    let t167 = circuit_mul(t163, t165);\n    let t168 = circuit_sub(t166, t167); // Fp2 mul real part end\n    let t169 = circuit_mul(t162, t165);\n    let t170 = circuit_mul(t163, t164);\n    let t171 = circuit_add(t169, t170); // Fp2 mul imag part end\n    let t172 = circuit_sub(t168, t152); // Fp2 sub coeff 0/1\n    let t173 = circuit_sub(t171, t155); // Fp2 sub coeff 1/1\n    let t174 = circuit_sub(t172, t158); // Fp2 sub coeff 0/1\n    let t175 = circuit_sub(t173, t161); // Fp2 sub coeff 1/1\n    let t176 = circuit_add(t174, t175);\n    let t177 = circuit_mul(t176, in7);\n    let t178 = circuit_mul(t174, in8);\n    let t179 = circuit_sub(t178, t175);\n    let t180 = circuit_sub(t177, t178);\n    let t181 = circuit_sub(t180, t175);\n    let t182 = circuit_add(t179, t146); // Fp2 add coeff 0/1\n    let t183 = circuit_add(t181, t149); // Fp2 add coeff 1/1\n    let t184 = circuit_add(t132, t134); // Fp2 add coeff 0/1\n    let t185 = circuit_add(t133, t135); // Fp2 add coeff 1/1\n    let t186 = circuit_add(t138, t140); // Fp2 add coeff 0/1\n    let t187 = circuit_add(t139, t141); // Fp2 add coeff 1/1\n    let t188 = circuit_mul(t184, t186); // Fp2 mul start\n    let t189 = circuit_mul(t185, t187);\n    let t190 = circuit_sub(t188, t189); // Fp2 mul real part end\n    let t191 = circuit_mul(t184, t187);\n    let t192 = circuit_mul(t185, t186);\n    let t193 = circuit_add(t191, t192); // Fp2 mul imag part end\n    let t194 = circuit_sub(t190, t146); // Fp2 sub coeff 0/1\n    let t195 = circuit_sub(t193, t149); // Fp2 sub coeff 1/1\n    let t196 = circuit_sub(t194, t152); // Fp2 sub coeff 0/1\n    let t197 = circuit_sub(t195, t155); // Fp2 sub coeff 1/1\n    let t198 = circuit_add(t158, t161);\n    let t199 = circuit_mul(t198, in7);\n    let t200 = circuit_mul(t158, in8);\n    let t201 = circuit_sub(t200, t161);\n    let t202 = circuit_sub(t199, t200);\n    let t203 = circuit_sub(t202, t161);\n    let t204 = circuit_add(t196, t201); // Fp2 add coeff 0/1\n    let t205 = circuit_add(t197, t203); // Fp2 add coeff 1/1\n    let t206 = circuit_add(t132, t136); // Fp2 add coeff 0/1\n    let t207 = circuit_add(t133, t137); // Fp2 add coeff 1/1\n    let t208 = circuit_add(t138, t142); // Fp2 add coeff 0/1\n    let t209 = circuit_add(t139, t143); // Fp2 add coeff 1/1\n    let t210 = circuit_mul(t208, t206); // Fp2 mul start\n    let t211 = circuit_mul(t209, t207);\n    let t212 = circuit_sub(t210, t211); // Fp2 mul real part end\n    let t213 = circuit_mul(t208, t207);\n    let t214 = circuit_mul(t209, t206);\n    let t215 = circuit_add(t213, t214); // Fp2 mul imag part end\n    let t216 = circuit_sub(t212, t146); // Fp2 sub coeff 0/1\n    let t217 = circuit_sub(t215, t149); // Fp2 sub coeff 1/1\n    let t218 = circuit_sub(t216, t158); // Fp2 sub coeff 0/1\n    let t219 = circuit_sub(t217, t161); // Fp2 sub coeff 1/1\n    let t220 = circuit_add(t218, t152); // Fp2 add coeff 0/1\n    let t221 = circuit_add(t219, t155); // Fp2 add coeff 1/1\n    let t222 = circuit_mul(in19, t131); // Fp2 mul start\n    let t223 = circuit_mul(in20, t130);\n    let t224 = circuit_sub(t222, t223); // Fp2 mul real part end\n    let t225 = circuit_mul(in19, t130);\n    let t226 = circuit_mul(in20, t131);\n    let t227 = circuit_add(t225, t226); // Fp2 mul imag part end\n    let t228 = circuit_mul(in21, t97); // Fp2 mul start\n    let t229 = circuit_mul(in22, t100);\n    let t230 = circuit_sub(t228, t229); // Fp2 mul real part end\n    let t231 = circuit_mul(in21, t100);\n    let t232 = circuit_mul(in22, t97);\n    let t233 = circuit_add(t231, t232); // Fp2 mul imag part end\n    let t234 = circuit_mul(in23, t123); // Fp2 mul start\n    let t235 = circuit_mul(in24, t124);\n    let t236 = circuit_sub(t234, t235); // Fp2 mul real part end\n    let t237 = circuit_mul(in23, t124);\n    let t238 = circuit_mul(in24, t123);\n    let t239 = circuit_add(t237, t238); // Fp2 mul imag part end\n    let t240 = circuit_add(in21, in23); // Fp2 add coeff 0/1\n    let t241 = circuit_add(in22, in24); // Fp2 add coeff 1/1\n    let t242 = circuit_add(t97, t123); // Fp2 add coeff 0/1\n    let t243 = circuit_add(t100, t124); // Fp2 add coeff 1/1\n    let t244 = circuit_mul(t240, t242); // Fp2 mul start\n    let t245 = circuit_mul(t241, t243);\n    let t246 = circuit_sub(t244, t245); // Fp2 mul real part end\n    let t247 = circuit_mul(t240, t243);\n    let t248 = circuit_mul(t241, t242);\n    let t249 = circuit_add(t247, t248); // Fp2 mul imag part end\n    let t250 = circuit_sub(t246, t230); // Fp2 sub coeff 0/1\n    let t251 = circuit_sub(t249, t233); // Fp2 sub coeff 1/1\n    let t252 = circuit_sub(t250, t236); // Fp2 sub coeff 0/1\n    let t253 = circuit_sub(t251, t239); // Fp2 sub coeff 1/1\n    let t254 = circuit_add(t252, t253);\n    let t255 = circuit_mul(t254, in7);\n    let t256 = circuit_mul(t252, in8);\n    let t257 = circuit_sub(t256, t253);\n    let t258 = circuit_sub(t255, t256);\n    let t259 = circuit_sub(t258, t253);\n    let t260 = circuit_add(t257, t224); // Fp2 add coeff 0/1\n    let t261 = circuit_add(t259, t227); // Fp2 add coeff 1/1\n    let t262 = circuit_add(in19, in21); // Fp2 add coeff 0/1\n    let t263 = circuit_add(in20, in22); // Fp2 add coeff 1/1\n    let t264 = circuit_add(t131, t97); // Fp2 add coeff 0/1\n    let t265 = circuit_add(t130, t100); // Fp2 add coeff 1/1\n    let t266 = circuit_mul(t262, t264); // Fp2 mul start\n    let t267 = circuit_mul(t263, t265);\n    let t268 = circuit_sub(t266, t267); // Fp2 mul real part end\n    let t269 = circuit_mul(t262, t265);\n    let t270 = circuit_mul(t263, t264);\n    let t271 = circuit_add(t269, t270); // Fp2 mul imag part end\n    let t272 = circuit_sub(t268, t224); // Fp2 sub coeff 0/1\n    let t273 = circuit_sub(t271, t227); // Fp2 sub coeff 1/1\n    let t274 = circuit_sub(t272, t230); // Fp2 sub coeff 0/1\n    let t275 = circuit_sub(t273, t233); // Fp2 sub coeff 1/1\n    let t276 = circuit_add(t236, t239);\n    let t277 = circuit_mul(t276, in7);\n    let t278 = circuit_mul(t236, in8);\n    let t279 = circuit_sub(t278, t239);\n    let t280 = circuit_sub(t277, t278);\n    let t281 = circuit_sub(t280, t239);\n    let t282 = circuit_add(t274, t279); // Fp2 add coeff 0/1\n    let t283 = circuit_add(t275, t281); // Fp2 add coeff 1/1\n    let t284 = circuit_add(in19, in23); // Fp2 add coeff 0/1\n    let t285 = circuit_add(in20, in24); // Fp2 add coeff 1/1\n    let t286 = circuit_add(t131, t123); // Fp2 add coeff 0/1\n    let t287 = circuit_add(t130, t124); // Fp2 add coeff 1/1\n    let t288 = circuit_mul(t286, t284); // Fp2 mul start\n    let t289 = circuit_mul(t287, t285);\n    let t290 = circuit_sub(t288, t289); // Fp2 mul real part end\n    let t291 = circuit_mul(t286, t285);\n    let t292 = circuit_mul(t287, t284);\n    let t293 = circuit_add(t291, t292); // Fp2 mul imag part end\n    let t294 = circuit_sub(t290, t224); // Fp2 sub coeff 0/1\n    let t295 = circuit_sub(t293, t227); // Fp2 sub coeff 1/1\n    let t296 = circuit_sub(t294, t236); // Fp2 sub coeff 0/1\n    let t297 = circuit_sub(t295, t239); // Fp2 sub coeff 1/1\n    let t298 = circuit_add(t296, t230); // Fp2 add coeff 0/1\n    let t299 = circuit_add(t297, t233); // Fp2 add coeff 1/1\n    let t300 = circuit_mul(in25, t109); // Fp2 mul start\n    let t301 = circuit_mul(in26, t110);\n    let t302 = circuit_sub(t300, t301); // Fp2 mul real part end\n    let t303 = circuit_mul(in25, t110);\n    let t304 = circuit_mul(in26, t109);\n    let t305 = circuit_add(t303, t304); // Fp2 mul imag part end\n    let t306 = circuit_mul(in27, t107); // Fp2 mul start\n    let t307 = circuit_mul(in28, t108);\n    let t308 = circuit_sub(t306, t307); // Fp2 mul real part end\n    let t309 = circuit_mul(in27, t108);\n    let t310 = circuit_mul(in28, t107);\n    let t311 = circuit_add(t309, t310); // Fp2 mul imag part end\n    let t312 = circuit_mul(in29, in6); // Fp2 mul start\n    let t313 = circuit_mul(in30, in6);\n    let t314 = circuit_sub(t312, t313); // Fp2 mul real part end\n    let t315 = circuit_mul(in29, in6);\n    let t316 = circuit_mul(in30, in6);\n    let t317 = circuit_add(t315, t316); // Fp2 mul imag part end\n    let t318 = circuit_add(in27, in29); // Fp2 add coeff 0/1\n    let t319 = circuit_add(in28, in30); // Fp2 add coeff 1/1\n    let t320 = circuit_add(t107, in6); // Fp2 add coeff 0/1\n    let t321 = circuit_add(t108, in6); // Fp2 add coeff 1/1\n    let t322 = circuit_mul(t318, t320); // Fp2 mul start\n    let t323 = circuit_mul(t319, t321);\n    let t324 = circuit_sub(t322, t323); // Fp2 mul real part end\n    let t325 = circuit_mul(t318, t321);\n    let t326 = circuit_mul(t319, t320);\n    let t327 = circuit_add(t325, t326); // Fp2 mul imag part end\n    let t328 = circuit_sub(t324, t308); // Fp2 sub coeff 0/1\n    let t329 = circuit_sub(t327, t311); // Fp2 sub coeff 1/1\n    let t330 = circuit_sub(t328, t314); // Fp2 sub coeff 0/1\n    let t331 = circuit_sub(t329, t317); // Fp2 sub coeff 1/1\n    let t332 = circuit_add(t330, t331);\n    let t333 = circuit_mul(t332, in7);\n    let t334 = circuit_mul(t330, in8);\n    let t335 = circuit_sub(t334, t331);\n    let t336 = circuit_sub(t333, t334);\n    let t337 = circuit_sub(t336, t331);\n    let t338 = circuit_add(t335, t302); // Fp2 add coeff 0/1\n    let t339 = circuit_add(t337, t305); // Fp2 add coeff 1/1\n    let t340 = circuit_add(in25, in27); // Fp2 add coeff 0/1\n    let t341 = circuit_add(in26, in28); // Fp2 add coeff 1/1\n    let t342 = circuit_add(t109, t107); // Fp2 add coeff 0/1\n    let t343 = circuit_add(t110, t108); // Fp2 add coeff 1/1\n    let t344 = circuit_mul(t340, t342); // Fp2 mul start\n    let t345 = circuit_mul(t341, t343);\n    let t346 = circuit_sub(t344, t345); // Fp2 mul real part end\n    let t347 = circuit_mul(t340, t343);\n    let t348 = circuit_mul(t341, t342);\n    let t349 = circuit_add(t347, t348); // Fp2 mul imag part end\n    let t350 = circuit_sub(t346, t302); // Fp2 sub coeff 0/1\n    let t351 = circuit_sub(t349, t305); // Fp2 sub coeff 1/1\n    let t352 = circuit_sub(t350, t308); // Fp2 sub coeff 0/1\n    let t353 = circuit_sub(t351, t311); // Fp2 sub coeff 1/1\n    let t354 = circuit_add(t314, t317);\n    let t355 = circuit_mul(t354, in7);\n    let t356 = circuit_mul(t314, in8);\n    let t357 = circuit_sub(t356, t317);\n    let t358 = circuit_sub(t355, t356);\n    let t359 = circuit_sub(t358, t317);\n    let t360 = circuit_add(t352, t357); // Fp2 add coeff 0/1\n    let t361 = circuit_add(t353, t359); // Fp2 add coeff 1/1\n    let t362 = circuit_add(in25, in29); // Fp2 add coeff 0/1\n    let t363 = circuit_add(in26, in30); // Fp2 add coeff 1/1\n    let t364 = circuit_add(t109, in6); // Fp2 add coeff 0/1\n    let t365 = circuit_add(t110, in6); // Fp2 add coeff 1/1\n    let t366 = circuit_mul(t364, t362); // Fp2 mul start\n    let t367 = circuit_mul(t365, t363);\n    let t368 = circuit_sub(t366, t367); // Fp2 mul real part end\n    let t369 = circuit_mul(t364, t363);\n    let t370 = circuit_mul(t365, t362);\n    let t371 = circuit_add(t369, t370); // Fp2 mul imag part end\n    let t372 = circuit_sub(t368, t302); // Fp2 sub coeff 0/1\n    let t373 = circuit_sub(t371, t305); // Fp2 sub coeff 1/1\n    let t374 = circuit_sub(t372, t314); // Fp2 sub coeff 0/1\n    let t375 = circuit_sub(t373, t317); // Fp2 sub coeff 1/1\n    let t376 = circuit_add(t374, t308); // Fp2 add coeff 0/1\n    let t377 = circuit_add(t375, t311); // Fp2 add coeff 1/1\n    let t378 = circuit_sub(t182, t260); // Fp6 sub coeff 0/5\n    let t379 = circuit_sub(t183, t261); // Fp6 sub coeff 1/5\n    let t380 = circuit_sub(t204, t282); // Fp6 sub coeff 2/5\n    let t381 = circuit_sub(t205, t283); // Fp6 sub coeff 3/5\n    let t382 = circuit_sub(t220, t298); // Fp6 sub coeff 4/5\n    let t383 = circuit_sub(t221, t299); // Fp6 sub coeff 5/5\n    let t384 = circuit_sub(t378, t338); // Fp6 sub coeff 0/5\n    let t385 = circuit_sub(t379, t339); // Fp6 sub coeff 1/5\n    let t386 = circuit_sub(t380, t360); // Fp6 sub coeff 2/5\n    let t387 = circuit_sub(t381, t361); // Fp6 sub coeff 3/5\n    let t388 = circuit_sub(t382, t376); // Fp6 sub coeff 4/5\n    let t389 = circuit_sub(t383, t377); // Fp6 sub coeff 5/5\n    let t390 = circuit_add(t376, t377);\n    let t391 = circuit_mul(t390, in7);\n    let t392 = circuit_mul(t376, in8);\n    let t393 = circuit_sub(t392, t377);\n    let t394 = circuit_sub(t391, t392);\n    let t395 = circuit_sub(t394, t377);\n    let t396 = circuit_add(t393, t260); // Fp6 add coeff 0/5\n    let t397 = circuit_add(t395, t261); // Fp6 add coeff 1/5\n    let t398 = circuit_add(t338, t282); // Fp6 add coeff 2/5\n    let t399 = circuit_add(t339, t283); // Fp6 add coeff 3/5\n    let t400 = circuit_add(t360, t298); // Fp6 add coeff 4/5\n    let t401 = circuit_add(t361, t299); // Fp6 add coeff 5/5\n\n    let modulus = crate::definitions::get_BN254_modulus(); // BN254 prime field modulus\n\n    let mut circuit_inputs = (\n        t396, t397, t398, t399, t400, t401, t384, t385, t386, t387, t388, t389,\n    )\n        .new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(TOWER_MILLER_FINALIZE_BN_1P_BN254_CONSTANTS.span()); // in0 - in8\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(original_Q0.x0); // in9\n    circuit_inputs = circuit_inputs.next_2(original_Q0.x1); // in10\n    circuit_inputs = circuit_inputs.next_2(original_Q0.y0); // in11\n    circuit_inputs = circuit_inputs.next_2(original_Q0.y1); // in12\n    circuit_inputs = circuit_inputs.next_2(yInv_0); // in13\n    circuit_inputs = circuit_inputs.next_2(xNegOverY_0); // in14\n    circuit_inputs = circuit_inputs.next_2(Q_0.x0); // in15\n    circuit_inputs = circuit_inputs.next_2(Q_0.x1); // in16\n    circuit_inputs = circuit_inputs.next_2(Q_0.y0); // in17\n    circuit_inputs = circuit_inputs.next_2(Q_0.y1); // in18\n    circuit_inputs = circuit_inputs.next_2(Mi.c0b0a0); // in19\n    circuit_inputs = circuit_inputs.next_2(Mi.c0b0a1); // in20\n    circuit_inputs = circuit_inputs.next_2(Mi.c0b1a0); // in21\n    circuit_inputs = circuit_inputs.next_2(Mi.c0b1a1); // in22\n    circuit_inputs = circuit_inputs.next_2(Mi.c0b2a0); // in23\n    circuit_inputs = circuit_inputs.next_2(Mi.c0b2a1); // in24\n    circuit_inputs = circuit_inputs.next_2(Mi.c1b0a0); // in25\n    circuit_inputs = circuit_inputs.next_2(Mi.c1b0a1); // in26\n    circuit_inputs = circuit_inputs.next_2(Mi.c1b1a0); // in27\n    circuit_inputs = circuit_inputs.next_2(Mi.c1b1a1); // in28\n    circuit_inputs = circuit_inputs.next_2(Mi.c1b2a0); // in29\n    circuit_inputs = circuit_inputs.next_2(Mi.c1b2a1); // in30\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let Mi: E12T = E12T {\n        c0b0a0: outputs.get_output(t396),\n        c0b0a1: outputs.get_output(t397),\n        c0b1a0: outputs.get_output(t398),\n        c0b1a1: outputs.get_output(t399),\n        c0b2a0: outputs.get_output(t400),\n        c0b2a1: outputs.get_output(t401),\n        c1b0a0: outputs.get_output(t384),\n        c1b0a1: outputs.get_output(t385),\n        c1b1a0: outputs.get_output(t386),\n        c1b1a1: outputs.get_output(t387),\n        c1b2a0: outputs.get_output(t388),\n        c1b2a1: outputs.get_output(t389),\n    };\n    return (Mi,);\n}\nconst TOWER_MILLER_FINALIZE_BN_1P_BN254_CONSTANTS: [u384; 9] = [\n    u384 {\n        limb0: 0xc2c3330c99e39557176f553d,\n        limb1: 0x4c0bec3cf559b143b78cc310,\n        limb2: 0x2fb347984f7911f7,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb7c9dce1665d51c640fcba2,\n        limb1: 0x4ba4cc8bd75a079432ae2a1d,\n        limb2: 0x16c9e55061ebae20,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa9c95998dc54014671a0135a,\n        limb1: 0xdc5ec698b6e2f9b9dbaae0ed,\n        limb2: 0x63cf305489af5dc,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8fa25bd282d37f632623b0e3,\n        limb1: 0x704b5a7ec796f2b21807dc9,\n        limb2: 0x7c03cbcac41049a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbb966e3de4bd44e5607cfd48,\n        limb1: 0x5e6dd9e7e0acccb0c28f069f,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0xa, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x9, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n];\n#[inline(always)]\npub fn run_FP6_NEG_circuit(\n    b0a0: u384, b0a1: u384, b1a0: u384, b1a1: u384, b2a0: u384, b2a1: u384, curve_index: usize,\n) -> (u384, u384, u384, u384, u384, u384) {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n\n    // INPUT stack\n    let (in1, in2, in3) = (CE::<CI<1>> {}, CE::<CI<2>> {}, CE::<CI<3>> {});\n    let (in4, in5, in6) = (CE::<CI<4>> {}, CE::<CI<5>> {}, CE::<CI<6>> {});\n    let t0 = circuit_sub(in0, in1);\n    let t1 = circuit_sub(in0, in2);\n    let t2 = circuit_sub(in0, in3);\n    let t3 = circuit_sub(in0, in4);\n    let t4 = circuit_sub(in0, in5);\n    let t5 = circuit_sub(in0, in6);\n\n    let modulus = crate::definitions::get_modulus(curve_index);\n\n    let mut circuit_inputs = (t0, t1, t2, t3, t4, t5).new_inputs();\n    // Prefill constants:\n    circuit_inputs = circuit_inputs.next_2([0x0, 0x0, 0x0, 0x0]); // in0\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(b0a0); // in1\n    circuit_inputs = circuit_inputs.next_2(b0a1); // in2\n    circuit_inputs = circuit_inputs.next_2(b1a0); // in3\n    circuit_inputs = circuit_inputs.next_2(b1a1); // in4\n    circuit_inputs = circuit_inputs.next_2(b2a0); // in5\n    circuit_inputs = circuit_inputs.next_2(b2a1); // in6\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let r0: u384 = outputs.get_output(t0);\n    let r1: u384 = outputs.get_output(t1);\n    let r2: u384 = outputs.get_output(t2);\n    let r3: u384 = outputs.get_output(t3);\n    let r4: u384 = outputs.get_output(t4);\n    let r5: u384 = outputs.get_output(t5);\n    return (r0, r1, r2, r3, r4, r5);\n}\n"
  },
  {
    "path": "src/src/core/circuit.cairo",
    "content": "use core::panic_with_felt252;\nuse corelib_imports::bounded_int::bounded_int;\nuse corelib_imports::circuit::conversions::{\n    AddHelperTo128By64Impl, AddHelperTo128By96Impl, AddHelperTo96By32Impl, DivRemU128By96,\n    DivRemU96By32, DivRemU96By64, MulHelper32By96Impl, MulHelper64By32Impl, MulHelper64By64Impl,\n    NZ_POW32_TYPED, NZ_POW64_TYPED, NZ_POW96_TYPED, POW64_TYPED, POW96_TYPED, upcast,\n};\nuse corelib_imports::circuit::{\n    AddInputResult, CircuitData, IntoCircuitInputValue, U96Guarantee, add_circuit_input,\n    into_u96_guarantee, u384, u96,\n};\nuse garaga::definitions::u288;\n\n\npub impl U32IntoU384 of Into<u32, u384> {\n    fn into(self: u32) -> u384 {\n        u384 { limb0: upcast(self), limb1: 0, limb2: 0, limb3: 0 }\n    }\n}\n\npub impl U64IntoU384 of Into<u64, u384> {\n    fn into(self: u64) -> u384 {\n        u384 { limb0: upcast(self), limb1: 0, limb2: 0, limb3: 0 }\n    }\n}\n\n\n// Cuts a u384 into a u256.\n// This is unsafe because it assumes the value is less than 2^256.\n// Only use when computing circuit with a modulus less than 2^256.\n#[inline(never)]\npub fn into_u256_unchecked(value: u384) -> u256 {\n    let (_, limb2_low) = bounded_int::div_rem(value.limb2, NZ_POW64_TYPED);\n    let (limb1_high, limb1_low) = bounded_int::div_rem(value.limb1, NZ_POW32_TYPED);\n    u256 {\n        high: upcast(bounded_int::add(bounded_int::mul(limb2_low, POW64_TYPED), limb1_high)),\n        low: upcast(bounded_int::add(bounded_int::mul(limb1_low, POW96_TYPED), value.limb0)),\n    }\n}\n\npub fn u256_to_u384(value: u256) -> u384 {\n    value.into()\n}\n\npub impl u288IntoCircuitInputValue of IntoCircuitInputValue<u288> {\n    fn into_circuit_input_value(self: u288) -> [U96Guarantee; 4] {\n        [\n            into_u96_guarantee(self.limb0), into_u96_guarantee(self.limb1),\n            into_u96_guarantee(self.limb2), into_u96_guarantee(0_u8),\n        ]\n    }\n}\n\n#[generate_trait]\npub impl AddInputResultImpl2<C> of AddInputResultTrait2<C> {\n    /// Adds an input to the accumulator.\n    // Inlining to make sure possibly huge `C` won't be in a user function name.\n    // #[inline(never)]\n    fn next_2<Value, +IntoCircuitInputValue<Value>, +Drop<Value>>(\n        self: AddInputResult<C>, value: Value,\n    ) -> AddInputResult<C> {\n        match self {\n            AddInputResult::More(accumulator) => add_circuit_input(\n                accumulator, value.into_circuit_input_value(),\n            ),\n            AddInputResult::Done(_) => panic_with_felt252('All inputs have been filled'),\n        }\n    }\n    // #[inline(never)]\n    fn next_u256(self: AddInputResult<C>, value: u256) -> AddInputResult<C> {\n        let val_u384: u384 = value.into();\n        self.next_2(val_u384)\n    }\n    // #[inline(never)]\n    fn next_u128(self: AddInputResult<C>, value: u128) -> AddInputResult<C> {\n        let (limb1, limb0) = bounded_int::div_rem(value, NZ_POW96_TYPED);\n        let limb1: u96 = upcast(limb1);\n        let c = match self {\n            AddInputResult::More(accumulator) => add_circuit_input(\n                accumulator,\n                [\n                    into_u96_guarantee(limb0), into_u96_guarantee(limb1), into_u96_guarantee(0_u8),\n                    into_u96_guarantee(0_u8),\n                ],\n            ),\n            AddInputResult::Done(_) => panic_with_felt252(0),\n        };\n        c\n    }\n    // fn next_e12d(self: AddInputResult<C>, value: E12D<u384>) -> AddInputResult<C> {\n    //     let c = match self {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w0.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w1.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w2.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w3.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w4.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w5.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w6.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w7.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w8.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w9.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w10.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     let c = match c {\n    //         AddInputResult::More(accumulator) => add_circuit_input(\n    //             accumulator, value.w11.into_circuit_input_value()\n    //         ),\n    //         AddInputResult::Done(_) => panic_with_felt252(0),\n    //     };\n    //     c\n    // }\n\n    // #[inline]\n    // fn next_array<Value, +IntoCircuitInputValue<Value>, +Drop<Value>>(\n    //     self: AddInputResult<C>, value: Array<Value>\n    // ) -> AddInputResult<C> {\n    //     let mut add_input_result = self;\n    //     for v in value {\n    //         add_input_result =\n    //             add_circuit_input(\n    //                 match add_input_result {\n    //                     AddInputResult::More(acc) => acc,\n    //                     AddInputResult::Done(_) => panic_with_felt252(0),\n    //                 },\n    //                 v.into_circuit_input_value()\n    //             );\n    //     };\n    //     add_input_result\n    // }\n    #[inline]\n    fn next_span(self: AddInputResult<C>, value: Span<u384>) -> AddInputResult<C> {\n        let mut add_input_result = self;\n        for v in value {\n            add_input_result =\n                add_circuit_input(\n                    match add_input_result {\n                        AddInputResult::More(acc) => acc,\n                        AddInputResult::Done(_) => panic_with_felt252('all inputs filled'),\n                    },\n                    (*v).into_circuit_input_value(),\n                );\n        }\n        add_input_result\n    }\n    // Inlining to make sure possibly huge `C` won't be in a user function name.\n    #[inline(always)]\n    fn done_2(self: AddInputResult<C>) -> CircuitData<C> {\n        match self {\n            AddInputResult::Done(data) => data,\n            AddInputResult::More(_) => panic_with_felt252('not all inputs filled'),\n        }\n    }\n}\n"
  },
  {
    "path": "src/src/crypto/mmr.cairo",
    "content": "use crate::hashes::poseidon_bn254::poseidon_hash_2;\n// Return the number of trailing ones in a 64-bit unsigned integer.\n// Ex : trailing_ones(0b111) = 3\n// The number of parents that need to be added when a new leaf is inserted (using the # of leaves\n// before insertion)\n// Ex if n=1 leaf, trailing_ones(1) = 1, when adding a new leave, 1 parent will be created.\npub fn trailing_ones(n: u64) -> usize {\n    if n == 0 {\n        return 0;\n    }\n    let mut count = 0;\n    let (mut n, mut mod_n) = DivRem::div_rem(n, 2);\n    while mod_n != 0 {\n        let (_n, _mod_n) = DivRem::div_rem(n, 2);\n        n = _n;\n        mod_n = _mod_n;\n        count += 1;\n    }\n    return count;\n}\n\n// //\n// def bag_peaks(self, peaks: List[int]) -> int:\n// bags = peaks[-1]\n// for peak in reversed(peaks[:-1]):\n//     self._hasher.update(peak)\n//     self._hasher.update(bags)\n\n//     bags = self._hasher.digest()\n\n// return bags\n\npub fn root_from_peaks(n_leaves: u64, peaks: Span<u256>) -> u256 {\n    let bagged_peaks = bag_peaks(peaks);\n    return bagged_peaks;\n}\n\npub fn bag_peaks(mut peaks: Span<u256>) -> u256 {\n    let mut res = *peaks.pop_back().unwrap();\n    while let Some(peak) = peaks.pop_back() {\n        res = poseidon_hash_2(*peak, res);\n    }\n    return res;\n}\n\n\n#[cfg(test)]\nmod tests {\n    use super::trailing_ones;\n    #[test]\n    fn test_trailing_ones() {\n        assert(trailing_ones(7) == 3, 'Invalid trailing_ones');\n        assert(trailing_ones(11) == 2, 'Invalid trailing_ones');\n        assert(trailing_ones(0) == 0, 'Invalid trailing_ones');\n        assert(trailing_ones(1) == 1, 'Invalid trailing_ones');\n        assert(trailing_ones(2) == 0, 'Invalid trailing_ones');\n        assert(trailing_ones(3) == 2, 'Invalid trailing_ones');\n        assert(trailing_ones(9) == 1, 'Invalid trailing_ones');\n        assert(trailing_ones(5) == 1, 'Invalid trailing_ones');\n        assert(trailing_ones(6) == 0, 'Invalid trailing_ones');\n    }\n}\n"
  },
  {
    "path": "src/src/definitions/curves.cairo",
    "content": "pub use core::circuit::{CircuitModulus, u384, u96};\nuse garaga::definitions::{G1Point, G1PointZero, G2Point};\n\n/// Square of the BLS12-381 x seed parameter used in curve generation\npub const BLS_X_SEED_SQ: u128 = 0xac45a4010001a4020000000100000000;\n\n\n// Curve indices used throughout Garaga:\n// curve_index 0: BN254\n// curve_index 1: BLS12_381\n// curve_index 2: SECP256K1\n// curve_index 3: SECP256R1\n// curve_index 4: ED25519 (stored in Weierstrass form)\n// curve_index 5: GRUMPKIN\n\n/// Complete curve parameters for elliptic curves in Weierstrass form: y² = x³ + ax + b\n///\n/// # Fields\n/// * `p`: Prime modulus of the base field Fp\n/// * `n`: Order of the curve (number of points in the prime-order subgroup)\n/// * `a`: Weierstrass a parameter\n/// * `b`: Weierstrass b parameter\n/// * `g`: Generator of the multiplicative group Fp* (for field operations)\n/// * `min_one`: (-1) mod p, precomputed for efficiency\n/// * `min_one_order`: (-1) mod n, precomputed for efficiency\n/// * `G`: Generator point of the curve's prime-order subgroup\n/// * `b_twist`: Twist curve b parameter (b₀, b₁) where b = b₀ + i·b₁ in Fp2 (for pairing\n/// curves only)\n/// * `modulus`: Prime modulus p as 4 limbs of u96 for CircuitModulus operations\n/// * `order_modulus`: Curve order n as 4 limbs of u96 for CircuitModulus operations\n/// * `eigenvalue`: GLV endomorphism eigenvalue λ (for curves with efficient endomorphism)\n/// * `nG_glv_fake_glv`: Precomputed point 2^(nbits-1)·G for GLV decomposition\n/// * `third_root_of_unity`: Cubic root of unity in Fp (for curves supporting GLV/fake-GLV)\npub struct Curve {\n    pub p: u384, // Prime modulus\n    pub n: u256, // Order of the curve\n    pub a: u384, // Weierstrass a parameter in eqn: y^2 = x^3 + ax + b\n    pub b: u384, // Weierstrass b parameter in eqn: y^2 = x^3 + ax + b\n    pub g: u384, // Generator of Fp* (the multiplicative group of the field)\n    pub min_one: u384, // (-1) % p\n    pub min_one_order: u384, // (-1) % n\n    pub G: G1Point, // Generator of the curve\n    pub b_twist: Option<\n        (u384, u384),\n    >, // b parameter for twisted curve (b0, b1) such that b = b0 + i*b1\n    pub modulus: [u96; 4], // Prime modulus as 4 limbs for CircuitModulus\n    pub order_modulus: [u96; 4], // Curve order as 4 limbs for CircuitModulus\n    pub eigenvalue: Option<u384>, // Eigenvalue for endomorphism (if available)\n    pub nG_glv_fake_glv: Option<G1Point>, // 2^(nbits-1)*G for GLV/fake GLV (if available)\n    pub third_root_of_unity: Option<u384> // Third root of unity in the base field (if available)\n}\n\npub const BN254: Curve = Curve {\n    p: u384 {\n        limb0: 0x6871ca8d3c208c16d87cfd47,\n        limb1: 0xb85045b68181585d97816a91,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    n: u256 { low: 0x2833e84879b9709143e1f593f0000001, high: 0x30644e72e131a029b85045b68181585d },\n    a: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    b: u384 { limb0: 0x3, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    g: u384 { limb0: 0x3, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    min_one: u384 {\n        limb0: 0x6871ca8d3c208c16d87cfd46,\n        limb1: 0xb85045b68181585d97816a91,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    min_one_order: u384 {\n        limb0: 0x79b9709143e1f593f0000000,\n        limb1: 0xb85045b68181585d2833e848,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    G: G1Point {\n        x: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        y: u384 { limb0: 0x2, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    },\n    b_twist: Some(\n        (\n            u384 {\n                limb0: 27810052284636130223308486885,\n                limb1: 40153378333836448380344387045,\n                limb2: 3104278944836790958,\n                limb3: 0,\n            },\n            u384 {\n                limb0: 70926583776874220189091304914,\n                limb1: 63498449372070794915149226116,\n                limb2: 42524369107353300,\n                limb3: 0,\n            },\n        ),\n    ),\n    modulus: [0x6871ca8d3c208c16d87cfd47, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0],\n    order_modulus: [\n        0x79b9709143e1f593f0000001, 0xb85045b68181585d2833e848, 0x30644e72e131a029, 0x0,\n    ],\n    eigenvalue: Some(\n        u384 {\n            limb0: 0x8d8daaa78b17ea66b99c90dd,\n            limb1: 0xb3c4d79d41a917585bfc4108,\n            limb2: 0x0,\n            limb3: 0x0,\n        },\n    ),\n    nG_glv_fake_glv: Some(\n        G1Point {\n            x: u384 {\n                limb0: 0x804f4c2700adf08a0214e529,\n                limb1: 0xa68b293da254e1b0049b5825,\n                limb2: 0x2715e750e68b52fa,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x15c090b1de77447950003fc9,\n                limb1: 0xfb5afe510e7c4e23f41e4bad,\n                limb2: 0x3921d1862445f32,\n                limb3: 0x0,\n            },\n        },\n    ),\n    third_root_of_unity: Some(\n        u384 {\n            limb0: 0xacdb5c4f5763473177fffffe,\n            limb1: 0x59e26bcea0d48bacd4f263f1,\n            limb2: 0x0,\n            limb3: 0x0,\n        },\n    ),\n};\n\npub const BLS12_381: Curve = Curve {\n    p: u384 {\n        limb0: 0xb153ffffb9feffffffffaaab,\n        limb1: 0x6730d2a0f6b0f6241eabfffe,\n        limb2: 0x434bacd764774b84f38512bf,\n        limb3: 0x1a0111ea397fe69a4b1ba7b6,\n    },\n    n: u256 { low: 0x53bda402fffe5bfeffffffff00000001, high: 0x73eda753299d7d483339d80809a1d805 },\n    a: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    b: u384 { limb0: 0x4, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    g: u384 { limb0: 0x3, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    min_one: u384 {\n        limb0: 0xb153ffffb9feffffffffaaaa,\n        limb1: 0x6730d2a0f6b0f6241eabfffe,\n        limb2: 0x434bacd764774b84f38512bf,\n        limb3: 0x1a0111ea397fe69a4b1ba7b6,\n    },\n    min_one_order: u384 {\n        limb0: 0xfffe5bfeffffffff00000000,\n        limb1: 0x3339d80809a1d80553bda402,\n        limb2: 0x73eda753299d7d48,\n        limb3: 0x0,\n    },\n    G: G1Point {\n        x: u384 {\n            limb0: 0xf97a1aeffb3af00adb22c6bb,\n            limb1: 0xa14e3a3f171bac586c55e83f,\n            limb2: 0x4fa9ac0fc3688c4f9774b905,\n            limb3: 0x17f1d3a73197d7942695638c,\n        },\n        y: u384 {\n            limb0: 0xa2888ae40caa232946c5e7e1,\n            limb1: 0xdb18cb2c04b3edd03cc744,\n            limb2: 0x741d8ae4fcf5e095d5d00af6,\n            limb3: 0x8b3f481e3aaa0f1a09e30ed,\n        },\n    },\n    b_twist: Some(\n        (\n            u384 { limb0: 4, limb1: 0, limb2: 0, limb3: 0 },\n            u384 { limb0: 4, limb1: 0, limb2: 0, limb3: 0 },\n        ),\n    ),\n    modulus: [\n        0xb153ffffb9feffffffffaaab, 0x6730d2a0f6b0f6241eabfffe, 0x434bacd764774b84f38512bf,\n        0x1a0111ea397fe69a4b1ba7b6,\n    ],\n    order_modulus: [\n        0xfffe5bfeffffffff00000001, 0x3339d80809a1d80553bda402, 0x73eda753299d7d48, 0x0,\n    ],\n    eigenvalue: Some(\n        u384 { limb0: 0x1a40200000000ffffffff, limb1: 0xac45a401, limb2: 0x0, limb3: 0x0 },\n    ),\n    nG_glv_fake_glv: Some(\n        G1Point {\n            x: u384 {\n                limb0: 0xcf4357bd59d6560f96d34480,\n                limb1: 0x1c2b3f4bb7a8579e7473612d,\n                limb2: 0x44f04a3ee426074a0864fc6e,\n                limb3: 0x60aa1307100d28a9c44cc51,\n            },\n            y: u384 {\n                limb0: 0x365913fecd5eb4667fe5e1ea,\n                limb1: 0xa456de882c324863cdfcf5b5,\n                limb2: 0xbaaa2be88ae9a807b36465b8,\n                limb3: 0x31152c621ab7ca0e5a2ab1c,\n            },\n        },\n    ),\n    third_root_of_unity: Some(\n        u384 {\n            limb0: 0x4f49fffd8bfd00000000aaac,\n            limb1: 0x897d29650fb85f9b409427eb,\n            limb2: 0x63d4de85aa0d857d89759ad4,\n            limb3: 0x1a0111ea397fe699ec024086,\n        },\n    ),\n};\n\npub const SECP256K1: Curve = Curve {\n    p: u384 {\n        limb0: 0xfffffffffffffffefffffc2f,\n        limb1: 0xffffffffffffffffffffffff,\n        limb2: 0xffffffffffffffff,\n        limb3: 0x0,\n    },\n    n: u256 { low: 0xbaaedce6af48a03bbfd25e8cd0364141, high: 0xfffffffffffffffffffffffffffffffe },\n    a: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    b: u384 { limb0: 0x7, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    g: u384 { limb0: 0x3, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    min_one: u384 {\n        limb0: 0xfffffffffffffffefffffc2e,\n        limb1: 0xffffffffffffffffffffffff,\n        limb2: 0xffffffffffffffff,\n        limb3: 0x0,\n    },\n    min_one_order: u384 {\n        limb0: 0xaf48a03bbfd25e8cd0364140,\n        limb1: 0xfffffffffffffffebaaedce6,\n        limb2: 0xffffffffffffffff,\n        limb3: 0x0,\n    },\n    G: G1Point {\n        x: u384 {\n            limb0: 0x2dce28d959f2815b16f81798,\n            limb1: 0x55a06295ce870b07029bfcdb,\n            limb2: 0x79be667ef9dcbbac,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xa68554199c47d08ffb10d4b8,\n            limb1: 0x5da4fbfc0e1108a8fd17b448,\n            limb2: 0x483ada7726a3c465,\n            limb3: 0x0,\n        },\n    },\n    b_twist: Option::None,\n    modulus: [0xfffffffffffffffefffffc2f, 0xffffffffffffffffffffffff, 0xffffffffffffffff, 0x0],\n    order_modulus: [\n        0xaf48a03bbfd25e8cd0364141, 0xfffffffffffffffebaaedce6, 0xffffffffffffffff, 0x0,\n    ],\n    eigenvalue: Some(\n        u384 {\n            limb0: 0x20816678df02967c1b23bd72,\n            limb1: 0xa5261c028812645a122e22ea,\n            limb2: 0x5363ad4cc05c30e0,\n            limb3: 0x0,\n        },\n    ),\n    nG_glv_fake_glv: Some(\n        G1Point {\n            x: u384 {\n                limb0: 0xf668832ffd959af60c82a0a,\n                limb1: 0x6b06c9f1919413b10f9226c6,\n                limb2: 0x948bf809b1988a4,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xc97cd2bed4cb7f88d8c8e589,\n                limb1: 0xdc6b74c5d1c3418c6d4dff08,\n                limb2: 0x53a562856dcb6646,\n                limb3: 0x0,\n            },\n        },\n    ),\n    third_root_of_unity: Some(\n        u384 {\n            limb0: 0x12f58995c1396c28719501ee,\n            limb1: 0x6e64479eac3434e99cf04975,\n            limb2: 0x7ae96a2b657c0710,\n            limb3: 0x0,\n        },\n    ),\n};\n\npub const SECP256R1: Curve = Curve {\n    p: u384 {\n        limb0: 0xffffffffffffffffffffffff, limb1: 0x0, limb2: 0xffffffff00000001, limb3: 0x0,\n    },\n    n: u256 { low: 0xbce6faada7179e84f3b9cac2fc632551, high: 0xffffffff00000000ffffffffffffffff },\n    a: u384 {\n        limb0: 0xfffffffffffffffffffffffc, limb1: 0x0, limb2: 0xffffffff00000001, limb3: 0x0,\n    },\n    b: u384 {\n        limb0: 0xcc53b0f63bce3c3e27d2604b,\n        limb1: 0xb3ebbd55769886bc651d06b0,\n        limb2: 0x5ac635d8aa3a93e7,\n        limb3: 0x0,\n    },\n    g: u384 { limb0: 0x6, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    min_one: u384 {\n        limb0: 0xfffffffffffffffffffffffe, limb1: 0x0, limb2: 0xffffffff00000001, limb3: 0x0,\n    },\n    min_one_order: u384 {\n        limb0: 0xa7179e84f3b9cac2fc632550,\n        limb1: 0xffffffffffffffffbce6faad,\n        limb2: 0xffffffff00000000,\n        limb3: 0x0,\n    },\n    G: G1Point {\n        x: u384 {\n            limb0: 0x2deb33a0f4a13945d898c296,\n            limb1: 0xf8bce6e563a440f277037d81,\n            limb2: 0x6b17d1f2e12c4247,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x6b315ececbb6406837bf51f5,\n            limb1: 0x8ee7eb4a7c0f9e162bce3357,\n            limb2: 0x4fe342e2fe1a7f9b,\n            limb3: 0x0,\n        },\n    },\n    b_twist: None,\n    modulus: [0xffffffffffffffffffffffff, 0x0, 0xffffffff00000001, 0x0],\n    order_modulus: [\n        0xa7179e84f3b9cac2fc632551, 0xffffffffffffffffbce6faad, 0xffffffff00000000, 0x0,\n    ],\n    eigenvalue: None,\n    nG_glv_fake_glv: None,\n    third_root_of_unity: None,\n};\n\npub const ED25519: Curve = Curve {\n    p: u384 {\n        limb0: 0xffffffffffffffffffffffed,\n        limb1: 0xffffffffffffffffffffffff,\n        limb2: 0x7fffffffffffffff,\n        limb3: 0x0,\n    },\n    n: u256 { low: 0x14def9dea2f79cd65812631a5cf5d3ed, high: 0x10000000000000000000000000000000 },\n    a: u384 {\n        limb0: 0xca52af7ac71e18ef8bc172d,\n        limb1: 0x3197e10d617b3dd66bb8b65d,\n        limb2: 0x5d4eacd3a5b9bee6,\n        limb3: 0x0,\n    },\n    b: u384 {\n        limb0: 0x6b9fbc329004ebc1f364b2a4,\n        limb1: 0x550ddb06105780d5f5483197,\n        limb2: 0x1d11b29bcfd0b3e0,\n        limb3: 0x0,\n    },\n    g: u384 { limb0: 0x6, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    min_one: u384 {\n        limb0: 0xffffffffffffffffffffffec,\n        limb1: 0xffffffffffffffffffffffff,\n        limb2: 0x7fffffffffffffff,\n        limb3: 0x0,\n    },\n    min_one_order: u384 {\n        limb0: 0xa2f79cd65812631a5cf5d3ec, limb1: 0x14def9de, limb2: 0x1000000000000000, limb3: 0x0,\n    },\n    G: G1Point {\n        x: u384 {\n            limb0: 0xd617c9aca55c89b025aef35,\n            limb1: 0xf00b8f02f1c20618a9c13fdf,\n            limb2: 0x2a78dd0fd02c0339,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x807131659b7830f3f62c1d14,\n            limb1: 0xbe483ba563798323cf6fd061,\n            limb2: 0x29c644a5c71da22e,\n            limb3: 0x0,\n        },\n    },\n    b_twist: None,\n    modulus: [0xffffffffffffffffffffffed, 0xffffffffffffffffffffffff, 0x7fffffffffffffff, 0x0],\n    order_modulus: [0xa2f79cd65812631a5cf5d3ed, 0x14def9de, 0x1000000000000000, 0x0],\n    eigenvalue: None,\n    nG_glv_fake_glv: None,\n    third_root_of_unity: None,\n};\n\npub const GRUMPKIN: Curve = Curve {\n    p: u384 {\n        limb0: 0x79b9709143e1f593f0000001,\n        limb1: 0xb85045b68181585d2833e848,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    n: u256 { low: 0x97816a916871ca8d3c208c16d87cfd47, high: 0x30644e72e131a029b85045b68181585d },\n    a: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    b: u384 {\n        limb0: 0x79b9709143e1f593effffff0,\n        limb1: 0xb85045b68181585d2833e848,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    g: u384 { limb0: 0x5, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    min_one: u384 {\n        limb0: 0x79b9709143e1f593f0000000,\n        limb1: 0xb85045b68181585d2833e848,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    min_one_order: u384 {\n        limb0: 0x6871ca8d3c208c16d87cfd46,\n        limb1: 0xb85045b68181585d97816a91,\n        limb2: 0x30644e72e131a029,\n        limb3: 0x0,\n    },\n    G: G1Point {\n        x: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        y: u384 {\n            limb0: 0xf1181294833fc48d823f272c,\n            limb1: 0xcf135e7506a45d632d270d45,\n            limb2: 0x2,\n            limb3: 0x0,\n        },\n    },\n    b_twist: None,\n    modulus: [0x79b9709143e1f593f0000001, 0xb85045b68181585d2833e848, 0x30644e72e131a029, 0x0],\n    order_modulus: [\n        0x6871ca8d3c208c16d87cfd47, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0,\n    ],\n    eigenvalue: None,\n    nG_glv_fake_glv: None,\n    third_root_of_unity: None,\n};\n\n/// Generator point for the G2 subgroup of BLS12-381's twisted curve E'(Fp2)\n/// Coordinates are in Fp2 represented as (x₀ + i·x₁, y₀ + i·y₁)\npub const BLS_G2_GENERATOR: G2Point = G2Point {\n    x0: u384 {\n        limb0: 0xa805bbefd48056c8c121bdb8,\n        limb1: 0xb4510b647ae3d1770bac0326,\n        limb2: 0x2dc51051c6e47ad4fa403b02,\n        limb3: 0x24aa2b2f08f0a9126080527,\n    },\n    x1: u384 {\n        limb0: 0x13945d57e5ac7d055d042b7e,\n        limb1: 0xb5da61bbdc7f5049334cf112,\n        limb2: 0x88274f65596bd0d09920b61a,\n        limb3: 0x13e02b6052719f607dacd3a0,\n    },\n    y0: u384 {\n        limb0: 0x3baca289e193548608b82801,\n        limb1: 0x6d429a695160d12c923ac9cc,\n        limb2: 0xda2e351aadfd9baa8cbdd3a7,\n        limb3: 0xce5d527727d6e118cc9cdc6,\n    },\n    y1: u384 {\n        limb0: 0x5cec1da1aaa9075ff05f79be,\n        limb1: 0x267492ab572e99ab3f370d27,\n        limb2: 0x2bc28b99cb3e287e85a763af,\n        limb3: 0x606c4a02ea734cc32acd2b0,\n    },\n};\n\n\n/// Compressed NAF (Non-Adjacent Form) representation of BN254 seed parameter\n/// for efficient Miller loop computation in pairing operations.\n///\n/// Computed as: recode_naf_bits(jy00(6·x + 2)[2:]) where x = 0x44E992B44A6909F1\n/// Encoding: \"00\"→0, \"10\"→1, \"-10\"→2, \"01\"→3, \"0-1\"→4\n/// See hydra/garaga/definitions.py for the encoding algorithm\npub const BN254_SEED_BITS_JY00_COMPRESSED: [felt252; 32] = [\n    2, 1, 0, 2, 2, 0, 2, 3, 1, 4, 0, 0, 3, 0, 2, 1, 4, 0, 0, 2, 1, 0, 2, 2, 3, 0, 4, 0, 4, 4, 2, 0,\n];\n\n/// Compressed binary representation of BLS12-381 seed parameter x = 0xD201000000010000\n/// for efficient Miller loop computation.\n///\n/// Binary digits with consecutive zeros replaced by 3 for compression\n/// Format: bin(x)[2:][2:] with \"00\" → 3\npub const BLS12_381_SEED_BITS_COMPRESSED: [felt252; 34] = [\n    0, 1, 3, 1, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 1, 3, 3, 3, 3, 3, 3,\n    3, 3,\n];\n\n/// NAF (Non-Adjacent Form) representation of BN254 seed parameter\n/// for Miller loop computation in pairing operations.\n///\n/// Computed as: NAF(6·x + 2)[1:] where x = 0x44E992B44A6909F1\n/// Encoding: -1 is replaced by 2 (values are 0, 1, or 2)\n/// See hydra/garaga/definitions.py for the NAF algorithm\npub const BN254_SEED_BITS_NAF: [usize; 65] = [\n    0, 2, 0, 1, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 1,\n    0, 0, 2, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 2, 0, 2, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 2, 0, 0,\n    0,\n];\n\n/// Standard binary representation of BLS12-381 seed parameter x = 0xD201000000010000\n/// Used for basic Miller loop operations\n/// Format: bin(x)[2:][2:] (binary digits after \"0b\" prefix, skipping first two)\npub const BLS12_381_SEED_BITS: [usize; 62] = [\n    0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n];\n\n\n/// GETTER FUNCTIONS ///\n\n/// Returns the prime modulus p of the base field Fp for a given curve.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (0-5, see curve index mapping above)\n///\n/// # Returns\n/// * The prime modulus p as u384, or zero for invalid indices\npub fn get_p(curve_index: usize) -> u384 {\n    match curve_index {\n        0 => BN254.p,\n        1 => BLS12_381.p,\n        2 => SECP256K1.p,\n        3 => SECP256R1.p,\n        4 => ED25519.p,\n        5 => GRUMPKIN.p,\n        _ => u384 { limb0: 0, limb1: 0, limb2: 0, limb3: 0 },\n    }\n}\n\n/// Checks if a curve has an efficient endomorphism available for GLV decomposition.\n///\n/// GLV (Gallant-Lambert-Vanstone) decomposition accelerates scalar multiplication\n/// by utilizing the curve's endomorphism structure.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve\n///\n/// # Returns\n/// * `true` for BN254, BLS12_381, and SECP256K1 (curves 0, 1, 2)\n/// * `false` for all other curves\npub fn has_endomorphism_available(curve_index: usize) -> bool {\n    match curve_index {\n        0 | 1 | 2 => true,\n        _ => false,\n    }\n}\n\n/// Returns the Weierstrass 'a' parameter for a given curve.\n///\n/// For Weierstrass curves: y² = x³ + ax + b\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (0-5)\n///\n/// # Returns\n/// * The 'a' parameter as u384, or zero for invalid indices\n///\n/// # Note\n/// For ED25519 (index 4), this returns the 'a' parameter of the birationally\n/// equivalent Weierstrass curve, not the Edwards curve parameter.\npub fn get_a(curve_index: usize) -> u384 {\n    match curve_index {\n        0 => BN254.a,\n        1 => BLS12_381.a,\n        2 => SECP256K1.a,\n        3 => SECP256R1.a,\n        4 => ED25519.a,\n        5 => GRUMPKIN.a,\n        _ => u384 { limb0: 0, limb1: 0, limb2: 0, limb3: 0 },\n    }\n}\n\n/// Returns the Weierstrass 'b' parameter for a given curve.\n///\n/// For Weierstrass curves: y² = x³ + ax + b\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (0-5)\n///\n/// # Returns\n/// * The 'b' parameter as u384, or zero for invalid indices\n///\n/// # Note\n/// For ED25519 (index 4), this returns the 'b' parameter of the birationally\n/// equivalent Weierstrass curve, not the Edwards curve parameter.\npub fn get_b(curve_index: usize) -> u384 {\n    match curve_index {\n        0 => BN254.b,\n        1 => BLS12_381.b,\n        2 => SECP256K1.b,\n        3 => SECP256R1.b,\n        4 => ED25519.b,\n        5 => GRUMPKIN.b,\n        _ => u384 { limb0: 0, limb1: 0, limb2: 0, limb3: 0 },\n    }\n}\n\n/// Returns the b parameter for the twisted curve E'(Fp2) used in pairing operations.\n///\n/// The twisted curve has equation: y² = x³ + b' where b' is in Fp2.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (must be 0 for BN254 or 1 for BLS12_381)\n///\n/// # Returns\n/// * Tuple (b₀, b₁) where b' = b₀ + i·b₁ in Fp2 = Fp[i]/(i² + 1)\n///\n/// # Panics\n/// * Panics for curves without pairing support (not BN254 or BLS12_381)\npub fn get_b_twist(curve_index: usize) -> (u384, u384) {\n    match curve_index {\n        0 => BN254.b_twist.unwrap(),\n        1 => BLS12_381.b_twist.unwrap(),\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns a generator g of the multiplicative group Fp* for a given curve.\n///\n/// This generator is used for various field operations and exponentiations.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (0-5)\n///\n/// # Returns\n/// * A generator element g ∈ Fp* as u384\n///\n/// # Panics\n/// * Panics for invalid curve indices\npub fn get_g(curve_index: usize) -> u384 {\n    match curve_index {\n        0 => BN254.g,\n        1 => BLS12_381.g,\n        2 => SECP256K1.g,\n        3 => SECP256R1.g,\n        4 => ED25519.g,\n        5 => GRUMPKIN.g,\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns the order n of the curve's prime-order subgroup.\n///\n/// This is the number of points in the main cryptographic subgroup.\n/// For most curves, this equals #E(Fp)/cofactor.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (0-5)\n///\n/// # Returns\n/// * The subgroup order n as u256\n///\n/// # Panics\n/// * Panics for invalid curve indices\npub fn get_n(curve_index: usize) -> u256 {\n    match curve_index {\n        0 => BN254.n,\n        1 => BLS12_381.n,\n        2 => SECP256K1.n,\n        3 => SECP256R1.n,\n        4 => ED25519.n,\n        5 => GRUMPKIN.n,\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns (-1) mod p precomputed for the base field Fp.\n///\n/// This is equivalent to (p - 1) and is frequently used in field arithmetic.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (0-5)\n///\n/// # Returns\n/// * The value (-1) mod p as u384\n///\n/// # Panics\n/// * Panics for invalid curve indices\npub fn get_min_one(curve_index: usize) -> u384 {\n    match curve_index {\n        0 => BN254.min_one,\n        1 => BLS12_381.min_one,\n        2 => SECP256K1.min_one,\n        3 => SECP256R1.min_one,\n        4 => ED25519.min_one,\n        5 => GRUMPKIN.min_one,\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns (-1) mod n precomputed for the scalar field (curve order).\n///\n/// This is equivalent to (n - 1) and is used for scalar arithmetic operations.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (0-5)\n///\n/// # Returns\n/// * The value (-1) mod n as u384\n///\n/// # Panics\n/// * Panics for invalid curve indices\npub fn get_min_one_order(curve_index: usize) -> u384 {\n    match curve_index {\n        0 => BN254.min_one_order,\n        1 => BLS12_381.min_one_order,\n        2 => SECP256K1.min_one_order,\n        3 => SECP256R1.min_one_order,\n        4 => ED25519.min_one_order,\n        5 => GRUMPKIN.min_one_order,\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns the base field modulus p as a CircuitModulus for circuit operations.\n///\n/// CircuitModulus is used by Cairo's circuit builtins for modular arithmetic.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (0-5)\n///\n/// # Returns\n/// * The prime modulus p as CircuitModulus\n///\n/// # Panics\n/// * Panics for invalid curve indices\npub fn get_modulus(curve_index: usize) -> CircuitModulus {\n    match curve_index {\n        0 => get_BN254_modulus(),\n        1 => get_BLS12_381_modulus(),\n        2 => get_SECP256K1_modulus(),\n        3 => get_SECP256R1_modulus(),\n        4 => get_ED25519_modulus(),\n        5 => get_GRUMPKIN_modulus(),\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns the curve order n as a CircuitModulus for circuit operations.\n///\n/// CircuitModulus is used by Cairo's circuit builtins for modular arithmetic\n/// in the scalar field.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (0-5)\n///\n/// # Returns\n/// * The curve order n as CircuitModulus\n///\n/// # Panics\n/// * Panics for invalid curve indices\npub fn get_curve_order_modulus(curve_index: usize) -> CircuitModulus {\n    match curve_index {\n        0 => get_BN254_order_modulus(),\n        1 => get_BLS12_381_order_modulus(),\n        2 => get_SECP256K1_order_modulus(),\n        3 => get_SECP256R1_order_modulus(),\n        4 => get_ED25519_order_modulus(),\n        5 => get_GRUMPKIN_order_modulus(),\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns the standard generator point G of the curve's prime-order subgroup.\n///\n/// This is the base point used for scalar multiplication and key generation.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (0-5)\n///\n/// # Returns\n/// * The generator point G as G1Point\n///\n/// # Panics\n/// * Panics for invalid curve indices\n///\n/// # Note\n/// For ED25519 (index 4), returns the generator in Weierstrass form.\npub fn get_G(curve_index: usize) -> G1Point {\n    match curve_index {\n        0 => BN254.G,\n        1 => BLS12_381.G,\n        2 => SECP256K1.G,\n        3 => SECP256R1.G,\n        4 => ED25519.G,\n        5 => GRUMPKIN.G,\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns the eigenvalue λ for the curve's efficiently computable endomorphism.\n///\n/// The endomorphism φ satisfies φ(P) = λ·P for points P on the curve.\n/// This eigenvalue is used in GLV decomposition to accelerate scalar multiplication.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (must be 0, 1, or 2)\n///\n/// # Returns\n/// * The eigenvalue λ as u384\n///\n/// # Panics\n/// * Panics for curves without efficient endomorphism (not BN254, BLS12_381, or SECP256K1)\npub fn get_eigenvalue(curve_index: usize) -> u384 {\n    match curve_index {\n        0 => BN254.eigenvalue.unwrap(),\n        1 => BLS12_381.eigenvalue.unwrap(),\n        2 => SECP256K1.eigenvalue.unwrap(),\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns the precomputed point 2^(nbits-1)·G for GLV/fake-GLV decomposition.\n///\n/// This precomputed value is used to accelerate scalar multiplication via\n/// GLV (Gallant-Lambert-Vanstone) or fake-GLV decomposition techniques.\n///\n/// The nbits parameter is computed as: nbits = n.bit_length() // 4 + 9\n/// where n is the curve order.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (must be 0, 1, or 2)\n///\n/// # Returns\n/// * The point 2^(nbits-1)·G as G1Point\n///   - For BN254: 2^72·G (nbits=73)\n///   - For BLS12_381: 2^72·G (nbits=73)\n///   - For SECP256K1: 2^72·G (nbits=73)\n///\n/// # Panics\n/// * Panics for curves without efficient endomorphism (not BN254, BLS12_381, or SECP256K1)\npub fn get_nG_glv_fake_glv(curve_index: usize) -> G1Point {\n    match curve_index {\n        0 => BN254.nG_glv_fake_glv.unwrap(),\n        1 => BLS12_381.nG_glv_fake_glv.unwrap(),\n        2 => SECP256K1.nG_glv_fake_glv.unwrap(),\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns a primitive cube root of unity ω in the base field Fp.\n///\n/// This element satisfies ω³ = 1 and ω ≠ 1, and is used in GLV endomorphism\n/// computations for accelerating scalar multiplication.\n///\n/// # Arguments\n/// * `curve_index` - Index of the curve (must be 0, 1, or 2)\n///\n/// # Returns\n/// * A third root of unity ω ∈ Fp as u384\n///\n/// # Panics\n/// * Panics for curves without efficient endomorphism (not BN254, BLS12_381, or SECP256K1)\npub fn get_third_root_of_unity(curve_index: usize) -> u384 {\n    match curve_index {\n        0 => BN254.third_root_of_unity.unwrap(),\n        1 => BLS12_381.third_root_of_unity.unwrap(),\n        2 => SECP256K1.third_root_of_unity.unwrap(),\n        _ => core::panic_with_felt252('Invalid curve index'),\n    }\n}\n\n/// Returns the BLS12-381 base field modulus as CircuitModulus.\n#[inline(always)]\npub fn get_BLS12_381_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(BLS12_381.modulus).unwrap()\n}\n\n/// Returns the BN254 base field modulus as CircuitModulus.\n#[inline(always)]\npub fn get_BN254_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(BN254.modulus).unwrap()\n}\n\n/// Returns the SECP256K1 base field modulus as CircuitModulus.\n#[inline(always)]\npub fn get_SECP256K1_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(SECP256K1.modulus).unwrap()\n}\n\n/// Returns the SECP256R1 (P-256) base field modulus as CircuitModulus.\n#[inline(always)]\npub fn get_SECP256R1_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(SECP256R1.modulus).unwrap()\n}\n\n/// Returns the ED25519 base field modulus as CircuitModulus.\n/// (Modulus of the birationally equivalent Weierstrass curve)\n#[inline(always)]\npub fn get_ED25519_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(ED25519.modulus).unwrap()\n}\n\n/// Returns the GRUMPKIN base field modulus as CircuitModulus.\n#[inline(always)]\npub fn get_GRUMPKIN_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(GRUMPKIN.modulus).unwrap()\n}\n\n/// Returns the BN254 curve order as CircuitModulus.\n#[inline(always)]\npub fn get_BN254_order_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(BN254.order_modulus).unwrap()\n}\n\n/// Returns the BLS12-381 curve order as CircuitModulus.\n#[inline(always)]\npub fn get_BLS12_381_order_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(BLS12_381.order_modulus).unwrap()\n}\n\n/// Returns the SECP256K1 curve order as CircuitModulus.\n#[inline(always)]\npub fn get_SECP256K1_order_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(SECP256K1.order_modulus).unwrap()\n}\n\n/// Returns the SECP256R1 (P-256) curve order as CircuitModulus.\n#[inline(always)]\npub fn get_SECP256R1_order_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(SECP256R1.order_modulus).unwrap()\n}\n\n/// Returns the ED25519 curve order as CircuitModulus.\n#[inline(always)]\npub fn get_ED25519_order_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(ED25519.order_modulus).unwrap()\n}\n\n/// Returns the GRUMPKIN curve order as CircuitModulus.\n#[inline(always)]\npub fn get_GRUMPKIN_order_modulus() -> CircuitModulus {\n    TryInto::<_, CircuitModulus>::try_into(GRUMPKIN.order_modulus).unwrap()\n}\n"
  },
  {
    "path": "src/src/definitions/structs/fields.cairo",
    "content": "//! Field structures for degree-12 extension fields used by the circuits.\n//!\n//! - [`E12D`] models a polynomial representation with 12 coefficients.\n//! - [`E12T`] models a 2-3-2 tower representation with named coefficients.\n//!\n//! Documentation follows Scarb's doc conventions (`///` and `//!` comments), so it can be\n//! rendered with `scarb doc`.\nuse core::circuit::{u384, u96};\nuse core::num;\nuse core::num::traits::{One, Zero};\nuse core::serde::Serde;\nuse corelib_imports::bounded_int::downcast;\n\n\n#[derive(Copy, Drop, Debug, PartialEq)]\npub struct u288 {\n    pub limb0: u96,\n    pub limb1: u96,\n    pub limb2: u96,\n}\n\n/// A 2048-bit integer packed into 6 chunks of at most 384 bits each\n/// (the top chunk w5 is constrained to 128 bits).\n///\n/// Given 22 limbs of 96 bits, groups of 4 consecutive limbs form one u384\n/// chunk. The last group uses only 2 limbs, yielding a 128-bit top chunk.\n#[derive(Copy, Drop, Debug, PartialEq)]\npub struct RSA2048Chunks {\n    pub w0: u384,\n    pub w1: u384,\n    pub w2: u384,\n    pub w3: u384,\n    pub w4: u384,\n    pub w5: u384,\n}\n\n/// Witness for one modular reduction a * b = q * n + r over Z,\n/// where q (quotient) and r (remainder) are 2048-bit integers\n/// in chunk representation.\n#[derive(Copy, Drop, Debug, PartialEq)]\npub struct RSA2048ReductionWitness {\n    pub quotient: RSA2048Chunks,\n    pub remainder: RSA2048Chunks,\n}\n\n/// Degree-12 extension field element (generic coefficients).\n///\n/// Represents an element of the extension field F_{q^12} modeled as the\n/// quotient ring F_q[w]/p(w), where p(w) is an irreducible polynomial of\n/// degree 12. Canonical polynomial form:\n///\n/// ```text\n/// w0 + w1*w + w2*w^2 + w3*w^3 + w4*w^4 + w5*w^5\n/// + w6*w^6 + w7*w^7 + w8*w^8 + w9*w^9 + w10*w^10 + w11*w^11\n/// ```\n///\n/// Coefficients w0 ... w11 are of type `T`.\n///\n/// When `T` is a limb-based integer type used in this codebase:\n/// - `T = [u384]` (4 x u96 limbs) or `T = [u288]` (3 x u96 limbs). Helpers\n///   below serialize/deserialize to a flat `Array<felt252>` (12x4 for `u384`,\n///   12x3 for `u288`).\n/// - [`num::traits::One`] is implemented for `E12D<u384>` and `E12D<u288>`; the\n///   multiplicative identity is `w0 = 1` and all other coefficients are zero.\n///\n/// Example: create the multiplicative identity for `u288` coefficients.\n/// ```text\n/// let one: E12D<u288> = E12D {\n///     w0: U288One::one(),\n///     w1: U288Zero::zero(),\n///     w2: U288Zero::zero(),\n///     w3: U288Zero::zero(),\n///     w4: U288Zero::zero(),\n///     w5: U288Zero::zero(),\n///     w6: U288Zero::zero(),\n///     w7: U288Zero::zero(),\n///     w8: U288Zero::zero(),\n///     w9: U288Zero::zero(),\n///     w10: U288Zero::zero(),\n///     w11: U288Zero::zero(),\n/// };\n/// ```\n#[derive(Copy, Drop, Debug, PartialEq)]\npub struct E12D<T> {\n    pub w0: T,\n    pub w1: T,\n    pub w2: T,\n    pub w3: T,\n    pub w4: T,\n    pub w5: T,\n    pub w6: T,\n    pub w7: T,\n    pub w8: T,\n    pub w9: T,\n    pub w10: T,\n    pub w11: T,\n}\n\n/// Degree-12 extension field element using a 2-3-2 tower construction.\n///\n/// The field F_{q^12} is built in three steps:\n/// - F_{q^2} ~= F_q[u]/p1(u)\n/// - F_{q^6} ~= F_{q^2}[v]/p2(v)\n/// - F_{q^12} ~= F_{q^6}[w]/p3(w)\n///\n/// Any element has the form:\n///\n/// ```text\n/// [ (c1b2a1*u + c1b2a0)*v^2 + (c1b1a1*u + c1b1a0)*v + (c1b0a1*u + c1b0a0) ]*w\n/// + [ (c0b2a1*u + c0b2a0)*v^2 + (c0b1a1*u + c0b1a0)*v + (c0b0a1*u + c0b0a0) ]\n/// ```\n///\n/// This yields 12 base-field coefficients. Field names follow `c{c}b{b}a{a}`:\n/// - `c` in {0,1} selects the coefficient of 1 (c=0) or of w (c=1)\n/// - `b` in {0,1,2} selects the power of v (0, 1, or 2)\n/// - `a` in {0,1} selects the component in the quadratic basis over u\n///\n/// All twelve attributes are [`u384`] values (unsigned 384-bit integers) used by\n/// the surrounding circuits and serializers.\n///\n/// Example: zero element (schematic — any `u384` zero can be reused across fields).\n/// ```cairo\n/// let z: u384 = Zero::zero();\n/// let e = E12T {\n///     c0b0a0: z, c0b0a1: z,\n///     c0b1a0: z, c0b1a1: z,\n///     c0b2a0: z, c0b2a1: z,\n///     c1b0a0: z, c1b0a1: z,\n///     c1b1a0: z, c1b1a1: z,\n///     c1b2a0: z, c1b2a1: z,\n/// };\n/// ```\n#[derive(Drop, Copy, Debug, PartialEq)]\npub struct E12T {\n    pub c0b0a0: u384,\n    pub c0b0a1: u384,\n    pub c0b1a0: u384,\n    pub c0b1a1: u384,\n    pub c0b2a0: u384,\n    pub c0b2a1: u384,\n    pub c1b0a0: u384,\n    pub c1b0a1: u384,\n    pub c1b1a0: u384,\n    pub c1b1a1: u384,\n    pub c1b2a0: u384,\n    pub c1b2a1: u384,\n}\n\n\npub fn serialize_u384(self: @u384, ref output: Array<felt252>) {\n    output.append((*self.limb0).into());\n    output.append((*self.limb1).into());\n    output.append((*self.limb2).into());\n    output.append((*self.limb3).into());\n}\npub fn deserialize_u384(ref serialized: Span<felt252>) -> u384 {\n    let [l0, l1, l2, l3] = (*serialized.multi_pop_front::<4>().unwrap()).unbox();\n    let limb0: u96 = downcast(l0).unwrap();\n    let limb1: u96 = downcast(l1).unwrap();\n    let limb2: u96 = downcast(l2).unwrap();\n    let limb3: u96 = downcast(l3).unwrap();\n    return u384 { limb0: limb0, limb1: limb1, limb2: limb2, limb3: limb3 };\n}\n\npub fn serialize_u384_array(self: @Array<u384>, ref output: Array<felt252>) {\n    self.len().serialize(ref output);\n    serialize_u384_array_helper(self.span(), ref output);\n}\n\npub impl RSA2048ChunksSerde of Serde<RSA2048Chunks> {\n    fn serialize(self: @RSA2048Chunks, ref output: Array<felt252>) {\n        serialize_u384(self.w0, ref output);\n        serialize_u384(self.w1, ref output);\n        serialize_u384(self.w2, ref output);\n        serialize_u384(self.w3, ref output);\n        serialize_u384(self.w4, ref output);\n        serialize_u384(self.w5, ref output);\n    }\n    fn deserialize(ref serialized: Span<felt252>) -> Option<RSA2048Chunks> {\n        let w0 = deserialize_u384(ref serialized);\n        let w1 = deserialize_u384(ref serialized);\n        let w2 = deserialize_u384(ref serialized);\n        let w3 = deserialize_u384(ref serialized);\n        let w4 = deserialize_u384(ref serialized);\n        let w5 = deserialize_u384(ref serialized);\n        return Option::Some(RSA2048Chunks { w0, w1, w2, w3, w4, w5 });\n    }\n}\n\npub fn serialize_u384_array_helper(mut input: Span<u384>, ref output: Array<felt252>) {\n    if let Option::Some(value) = input.pop_front() {\n        serialize_u384(value, ref output);\n        serialize_u384_array_helper(input, ref output);\n    }\n}\n\npub fn deserialize_u384_array(ref serialized: Span<felt252>) -> Array<u384> {\n    let length = *serialized.pop_front().unwrap();\n    let mut arr = array![];\n    deserialize_u384_array_helper(ref serialized, arr, length)\n}\n\npub fn deserialize_u384_array_helper(\n    ref serialized: Span<felt252>, mut curr_output: Array<u384>, remaining: felt252,\n) -> Array<u384> {\n    if remaining == 0 {\n        return curr_output;\n    }\n    curr_output.append(deserialize_u384(ref serialized));\n    deserialize_u384_array_helper(ref serialized, curr_output, remaining - 1)\n}\n\npub impl u288Serde of Serde<u288> {\n    fn serialize(self: @u288, ref output: Array<felt252>) {\n        output.append((*self.limb0).into());\n        output.append((*self.limb1).into());\n        output.append((*self.limb2).into());\n    }\n    fn deserialize(ref serialized: Span<felt252>) -> Option<u288> {\n        let [l0, l1, l2] = (*serialized.multi_pop_front::<3>().unwrap()).unbox();\n        let limb0 = downcast(l0).unwrap();\n        let limb1 = downcast(l1).unwrap();\n        let limb2 = downcast(l2).unwrap();\n        return Option::Some(u288 { limb0: limb0, limb1: limb1, limb2: limb2 });\n    }\n}\n\n\nimpl U288Zero of num::traits::Zero<u288> {\n    fn zero() -> u288 {\n        u288 { limb0: 0, limb1: 0, limb2: 0 }\n    }\n    fn is_zero(self: @u288) -> bool {\n        *self == Self::zero()\n    }\n    fn is_non_zero(self: @u288) -> bool {\n        !self.is_zero()\n    }\n}\n\nimpl U288One of num::traits::One<u288> {\n    fn one() -> u288 {\n        u288 { limb0: 1, limb1: 0, limb2: 0 }\n    }\n    fn is_one(self: @u288) -> bool {\n        *self == Self::one()\n    }\n    fn is_non_one(self: @u288) -> bool {\n        !self.is_one()\n    }\n}\n\nimpl E12DOneU384 of num::traits::One<E12D<u384>> {\n    fn one() -> E12D<u384> {\n        E12D {\n            w0: One::one(),\n            w1: Zero::zero(),\n            w2: Zero::zero(),\n            w3: Zero::zero(),\n            w4: Zero::zero(),\n            w5: Zero::zero(),\n            w6: Zero::zero(),\n            w7: Zero::zero(),\n            w8: Zero::zero(),\n            w9: Zero::zero(),\n            w10: Zero::zero(),\n            w11: Zero::zero(),\n        }\n    }\n\n    fn is_one(self: @E12D<u384>) -> bool {\n        *self == Self::one()\n    }\n\n    fn is_non_one(self: @E12D<u384>) -> bool {\n        !self.is_one()\n    }\n}\n\nimpl E12DOneU288 of num::traits::One<E12D<u288>> {\n    fn one() -> E12D<u288> {\n        E12D {\n            w0: U288One::one(),\n            w1: U288Zero::zero(),\n            w2: U288Zero::zero(),\n            w3: U288Zero::zero(),\n            w4: U288Zero::zero(),\n            w5: U288Zero::zero(),\n            w6: U288Zero::zero(),\n            w7: U288Zero::zero(),\n            w8: U288Zero::zero(),\n            w9: U288Zero::zero(),\n            w10: U288Zero::zero(),\n            w11: U288Zero::zero(),\n        }\n    }\n\n    fn is_one(self: @E12D<u288>) -> bool {\n        *self == Self::one()\n    }\n\n    fn is_non_one(self: @E12D<u288>) -> bool {\n        !self.is_one()\n    }\n}\n\npub impl E12TOne of One<E12T> {\n    fn one() -> E12T {\n        E12T {\n            c0b0a0: One::one(),\n            c0b0a1: Zero::zero(),\n            c0b1a0: Zero::zero(),\n            c0b1a1: Zero::zero(),\n            c0b2a0: Zero::zero(),\n            c0b2a1: Zero::zero(),\n            c1b0a0: Zero::zero(),\n            c1b0a1: Zero::zero(),\n            c1b1a0: Zero::zero(),\n            c1b1a1: Zero::zero(),\n            c1b2a0: Zero::zero(),\n            c1b2a1: Zero::zero(),\n        }\n    }\n    fn is_one(self: @E12T) -> bool {\n        *self == Self::one()\n    }\n    fn is_non_one(self: @E12T) -> bool {\n        !Self::is_one(self)\n    }\n}\n\nimpl E12DSerde384 of Serde<E12D<u384>> {\n    fn serialize(self: @E12D<u384>, ref output: Array<felt252>) {\n        let val = *self;\n        output.append(val.w0.limb0.into());\n        output.append(val.w0.limb1.into());\n        output.append(val.w0.limb2.into());\n        output.append(val.w0.limb3.into());\n        output.append(val.w1.limb0.into());\n        output.append(val.w1.limb1.into());\n        output.append(val.w1.limb2.into());\n        output.append(val.w1.limb3.into());\n\n        output.append(val.w2.limb0.into());\n        output.append(val.w2.limb1.into());\n        output.append(val.w2.limb2.into());\n        output.append(val.w2.limb3.into());\n\n        output.append(val.w3.limb0.into());\n        output.append(val.w3.limb1.into());\n        output.append(val.w3.limb2.into());\n        output.append(val.w3.limb3.into());\n\n        output.append(val.w4.limb0.into());\n        output.append(val.w4.limb1.into());\n        output.append(val.w4.limb2.into());\n        output.append(val.w4.limb3.into());\n\n        output.append(val.w5.limb0.into());\n        output.append(val.w5.limb1.into());\n        output.append(val.w5.limb2.into());\n        output.append(val.w5.limb3.into());\n\n        output.append(val.w6.limb0.into());\n        output.append(val.w6.limb1.into());\n        output.append(val.w6.limb2.into());\n        output.append(val.w6.limb3.into());\n\n        output.append(val.w7.limb0.into());\n        output.append(val.w7.limb1.into());\n        output.append(val.w7.limb2.into());\n        output.append(val.w7.limb3.into());\n\n        output.append(val.w8.limb0.into());\n        output.append(val.w8.limb1.into());\n        output.append(val.w8.limb2.into());\n        output.append(val.w8.limb3.into());\n\n        output.append(val.w9.limb0.into());\n        output.append(val.w9.limb1.into());\n        output.append(val.w9.limb2.into());\n        output.append(val.w9.limb3.into());\n\n        output.append(val.w10.limb0.into());\n        output.append(val.w10.limb1.into());\n        output.append(val.w10.limb2.into());\n        output.append(val.w10.limb3.into());\n\n        output.append(val.w11.limb0.into());\n        output.append(val.w11.limb1.into());\n        output.append(val.w11.limb2.into());\n        output.append(val.w11.limb3.into());\n    }\n\n    fn deserialize(ref serialized: Span<felt252>) -> Option<E12D<u384>> {\n        let [\n            w0l0,\n            w0l1,\n            w0l2,\n            w0l3,\n            w1l0,\n            w1l1,\n            w1l2,\n            w1l3,\n            w2l0,\n            w2l1,\n            w2l2,\n            w2l3,\n            w3l0,\n            w3l1,\n            w3l2,\n            w3l3,\n            w4l0,\n            w4l1,\n            w4l2,\n            w4l3,\n            w5l0,\n            w5l1,\n            w5l2,\n            w5l3,\n            w6l0,\n            w6l1,\n            w6l2,\n            w6l3,\n            w7l0,\n            w7l1,\n            w7l2,\n            w7l3,\n            w8l0,\n            w8l1,\n            w8l2,\n            w8l3,\n            w9l0,\n            w9l1,\n            w9l2,\n            w9l3,\n            w10l0,\n            w10l1,\n            w10l2,\n            w10l3,\n            w11l0,\n            w11l1,\n            w11l2,\n            w11l3,\n        ] =\n            (*serialized\n            .multi_pop_front::<48>()\n            .unwrap())\n            .unbox();\n        Option::Some(\n            E12D {\n                w0: u384 {\n                    limb0: downcast(w0l0).unwrap(),\n                    limb1: downcast(w0l1).unwrap(),\n                    limb2: downcast(w0l2).unwrap(),\n                    limb3: downcast(w0l3).unwrap(),\n                },\n                w1: u384 {\n                    limb0: downcast(w1l0).unwrap(),\n                    limb1: downcast(w1l1).unwrap(),\n                    limb2: downcast(w1l2).unwrap(),\n                    limb3: downcast(w1l3).unwrap(),\n                },\n                w2: u384 {\n                    limb0: downcast(w2l0).unwrap(),\n                    limb1: downcast(w2l1).unwrap(),\n                    limb2: downcast(w2l2).unwrap(),\n                    limb3: downcast(w2l3).unwrap(),\n                },\n                w3: u384 {\n                    limb0: downcast(w3l0).unwrap(),\n                    limb1: downcast(w3l1).unwrap(),\n                    limb2: downcast(w3l2).unwrap(),\n                    limb3: downcast(w3l3).unwrap(),\n                },\n                w4: u384 {\n                    limb0: downcast(w4l0).unwrap(),\n                    limb1: downcast(w4l1).unwrap(),\n                    limb2: downcast(w4l2).unwrap(),\n                    limb3: downcast(w4l3).unwrap(),\n                },\n                w5: u384 {\n                    limb0: downcast(w5l0).unwrap(),\n                    limb1: downcast(w5l1).unwrap(),\n                    limb2: downcast(w5l2).unwrap(),\n                    limb3: downcast(w5l3).unwrap(),\n                },\n                w6: u384 {\n                    limb0: downcast(w6l0).unwrap(),\n                    limb1: downcast(w6l1).unwrap(),\n                    limb2: downcast(w6l2).unwrap(),\n                    limb3: downcast(w6l3).unwrap(),\n                },\n                w7: u384 {\n                    limb0: downcast(w7l0).unwrap(),\n                    limb1: downcast(w7l1).unwrap(),\n                    limb2: downcast(w7l2).unwrap(),\n                    limb3: downcast(w7l3).unwrap(),\n                },\n                w8: u384 {\n                    limb0: downcast(w8l0).unwrap(),\n                    limb1: downcast(w8l1).unwrap(),\n                    limb2: downcast(w8l2).unwrap(),\n                    limb3: downcast(w8l3).unwrap(),\n                },\n                w9: u384 {\n                    limb0: downcast(w9l0).unwrap(),\n                    limb1: downcast(w9l1).unwrap(),\n                    limb2: downcast(w9l2).unwrap(),\n                    limb3: downcast(w9l3).unwrap(),\n                },\n                w10: u384 {\n                    limb0: downcast(w10l0).unwrap(),\n                    limb1: downcast(w10l1).unwrap(),\n                    limb2: downcast(w10l2).unwrap(),\n                    limb3: downcast(w10l3).unwrap(),\n                },\n                w11: u384 {\n                    limb0: downcast(w11l0).unwrap(),\n                    limb1: downcast(w11l1).unwrap(),\n                    limb2: downcast(w11l2).unwrap(),\n                    limb3: downcast(w11l3).unwrap(),\n                },\n            },\n        )\n    }\n}\n\n\nimpl E12DSerde288 of Serde<E12D<u288>> {\n    fn serialize(self: @E12D<u288>, ref output: Array<felt252>) {\n        let val = *self;\n        output.append(val.w0.limb0.into());\n        output.append(val.w0.limb1.into());\n        output.append(val.w0.limb2.into());\n        output.append(val.w1.limb0.into());\n        output.append(val.w1.limb1.into());\n        output.append(val.w1.limb2.into());\n\n        output.append(val.w2.limb0.into());\n        output.append(val.w2.limb1.into());\n        output.append(val.w2.limb2.into());\n\n        output.append(val.w3.limb0.into());\n        output.append(val.w3.limb1.into());\n        output.append(val.w3.limb2.into());\n\n        output.append(val.w4.limb0.into());\n        output.append(val.w4.limb1.into());\n        output.append(val.w4.limb2.into());\n\n        output.append(val.w5.limb0.into());\n        output.append(val.w5.limb1.into());\n        output.append(val.w5.limb2.into());\n\n        output.append(val.w6.limb0.into());\n        output.append(val.w6.limb1.into());\n        output.append(val.w6.limb2.into());\n\n        output.append(val.w7.limb0.into());\n        output.append(val.w7.limb1.into());\n        output.append(val.w7.limb2.into());\n\n        output.append(val.w8.limb0.into());\n        output.append(val.w8.limb1.into());\n        output.append(val.w8.limb2.into());\n\n        output.append(val.w9.limb0.into());\n        output.append(val.w9.limb1.into());\n        output.append(val.w9.limb2.into());\n\n        output.append(val.w10.limb0.into());\n        output.append(val.w10.limb1.into());\n        output.append(val.w10.limb2.into());\n\n        output.append(val.w11.limb0.into());\n        output.append(val.w11.limb1.into());\n        output.append(val.w11.limb2.into());\n    }\n\n    fn deserialize(ref serialized: Span<felt252>) -> Option<E12D<u288>> {\n        let [\n            w0l0,\n            w0l1,\n            w0l2,\n            w1l0,\n            w1l1,\n            w1l2,\n            w2l0,\n            w2l1,\n            w2l2,\n            w3l0,\n            w3l1,\n            w3l2,\n            w4l0,\n            w4l1,\n            w4l2,\n            w5l0,\n            w5l1,\n            w5l2,\n            w6l0,\n            w6l1,\n            w6l2,\n            w7l0,\n            w7l1,\n            w7l2,\n            w8l0,\n            w8l1,\n            w8l2,\n            w9l0,\n            w9l1,\n            w9l2,\n            w10l0,\n            w10l1,\n            w10l2,\n            w11l0,\n            w11l1,\n            w11l2,\n        ] =\n            (*serialized\n            .multi_pop_front::<36>()\n            .unwrap())\n            .unbox();\n        Option::Some(\n            E12D {\n                w0: u288 {\n                    limb0: downcast(w0l0).unwrap(),\n                    limb1: downcast(w0l1).unwrap(),\n                    limb2: downcast(w0l2).unwrap(),\n                },\n                w1: u288 {\n                    limb0: downcast(w1l0).unwrap(),\n                    limb1: downcast(w1l1).unwrap(),\n                    limb2: downcast(w1l2).unwrap(),\n                },\n                w2: u288 {\n                    limb0: downcast(w2l0).unwrap(),\n                    limb1: downcast(w2l1).unwrap(),\n                    limb2: downcast(w2l2).unwrap(),\n                },\n                w3: u288 {\n                    limb0: downcast(w3l0).unwrap(),\n                    limb1: downcast(w3l1).unwrap(),\n                    limb2: downcast(w3l2).unwrap(),\n                },\n                w4: u288 {\n                    limb0: downcast(w4l0).unwrap(),\n                    limb1: downcast(w4l1).unwrap(),\n                    limb2: downcast(w4l2).unwrap(),\n                },\n                w5: u288 {\n                    limb0: downcast(w5l0).unwrap(),\n                    limb1: downcast(w5l1).unwrap(),\n                    limb2: downcast(w5l2).unwrap(),\n                },\n                w6: u288 {\n                    limb0: downcast(w6l0).unwrap(),\n                    limb1: downcast(w6l1).unwrap(),\n                    limb2: downcast(w6l2).unwrap(),\n                },\n                w7: u288 {\n                    limb0: downcast(w7l0).unwrap(),\n                    limb1: downcast(w7l1).unwrap(),\n                    limb2: downcast(w7l2).unwrap(),\n                },\n                w8: u288 {\n                    limb0: downcast(w8l0).unwrap(),\n                    limb1: downcast(w8l1).unwrap(),\n                    limb2: downcast(w8l2).unwrap(),\n                },\n                w9: u288 {\n                    limb0: downcast(w9l0).unwrap(),\n                    limb1: downcast(w9l1).unwrap(),\n                    limb2: downcast(w9l2).unwrap(),\n                },\n                w10: u288 {\n                    limb0: downcast(w10l0).unwrap(),\n                    limb1: downcast(w10l1).unwrap(),\n                    limb2: downcast(w10l2).unwrap(),\n                },\n                w11: u288 {\n                    limb0: downcast(w11l0).unwrap(),\n                    limb1: downcast(w11l1).unwrap(),\n                    limb2: downcast(w11l2).unwrap(),\n                },\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "src/src/definitions/structs/points.cairo",
    "content": "use core::circuit::u384;\nuse core::num::traits::Zero;\nuse core::serde::Serde;\nuse corelib_imports::circuit::conversions;\nuse garaga::definitions::{deserialize_u384, serialize_u384};\nuse starknet::storage_access::StorePacking;\n\n#[derive(Copy, Drop, Debug, PartialEq)]\npub struct G1Point {\n    pub x: u384,\n    pub y: u384,\n}\n\npub impl G1PointSerde of Serde<G1Point> {\n    fn serialize(self: @G1Point, ref output: Array<felt252>) {\n        serialize_u384(self.x, ref output);\n        serialize_u384(self.y, ref output);\n    }\n    fn deserialize(ref serialized: Span<felt252>) -> Option<G1Point> {\n        let x = deserialize_u384(ref serialized);\n        let y = deserialize_u384(ref serialized);\n        return Option::Some(G1Point { x: x, y: y });\n    }\n}\n\npub impl G1PointStorePacking of StorePacking<G1Point, [felt252; 4]> {\n    fn pack(value: G1Point) -> [felt252; 4] {\n        let x0 = conversions::two_u96_into_felt252(value.x.limb0, value.x.limb1);\n        let x1 = conversions::two_u96_into_felt252(value.x.limb2, value.x.limb3);\n        let y0 = conversions::two_u96_into_felt252(value.y.limb0, value.y.limb1);\n        let y1 = conversions::two_u96_into_felt252(value.y.limb2, value.y.limb3);\n        [x0, x1, y0, y1]\n    }\n\n    fn unpack(value: [felt252; 4]) -> G1Point {\n        let [x0, x1, y0, y1] = value;\n        let x = {\n            let (limb0, limb1) = conversions::felt252_try_into_two_u96(x0).unwrap();\n            let (limb2, limb3) = conversions::felt252_try_into_two_u96(x1).unwrap();\n            u384 { limb0, limb1, limb2, limb3 }\n        };\n        let y = {\n            let (limb0, limb1) = conversions::felt252_try_into_two_u96(y0).unwrap();\n            let (limb2, limb3) = conversions::felt252_try_into_two_u96(y1).unwrap();\n            u384 { limb0, limb1, limb2, limb3 }\n        };\n        return G1Point { x: x, y: y };\n    }\n}\n\n\n#[derive(Copy, Drop, Debug, PartialEq)]\npub struct G2Point {\n    pub x0: u384,\n    pub x1: u384,\n    pub y0: u384,\n    pub y1: u384,\n}\npub impl G2PointSerde of Serde<G2Point> {\n    fn serialize(self: @G2Point, ref output: Array<felt252>) {\n        serialize_u384(self.x0, ref output);\n        serialize_u384(self.x1, ref output);\n        serialize_u384(self.y0, ref output);\n        serialize_u384(self.y1, ref output);\n    }\n    fn deserialize(ref serialized: Span<felt252>) -> Option<G2Point> {\n        let x0 = deserialize_u384(ref serialized);\n        let x1 = deserialize_u384(ref serialized);\n        let y0 = deserialize_u384(ref serialized);\n        let y1 = deserialize_u384(ref serialized);\n        return Option::Some(G2Point { x0: x0, x1: x1, y0: y0, y1: y1 });\n    }\n}\n\n\n#[derive(Copy, Drop, Debug, PartialEq)]\npub struct G2Line<T> {\n    pub r0a0: T,\n    pub r0a1: T,\n    pub r1a0: T,\n    pub r1a1: T,\n}\n\n#[derive(Copy, Drop, Debug, PartialEq, Serde)]\npub struct G1G2Pair {\n    pub p: G1Point,\n    pub q: G2Point,\n}\n\n\n// Represents the point at infinity\npub impl G1PointZero of Zero<G1Point> {\n    fn zero() -> G1Point {\n        G1Point { x: Zero::zero(), y: Zero::zero() }\n    }\n    fn is_zero(self: @G1Point) -> bool {\n        *self == Self::zero()\n    }\n    fn is_non_zero(self: @G1Point) -> bool {\n        !self.is_zero()\n    }\n}\n\n// Represents the point at infinity\npub impl G2PointZero of Zero<G2Point> {\n    fn zero() -> G2Point {\n        G2Point { x0: Zero::zero(), x1: Zero::zero(), y0: Zero::zero(), y1: Zero::zero() }\n    }\n    fn is_zero(self: @G2Point) -> bool {\n        *self == Self::zero()\n    }\n    fn is_non_zero(self: @G2Point) -> bool {\n        !self.is_zero()\n    }\n}\n"
  },
  {
    "path": "src/src/definitions.cairo",
    "content": "pub mod curves;\npub mod structs {\n    pub mod fields;\n    pub mod points;\n}\n\npub use core::circuit::{u384, u96};\npub use core::num::traits::{One, Zero};\n\n\npub use curves::{\n    BLS12_381, BLS12_381_SEED_BITS, BLS12_381_SEED_BITS_COMPRESSED, BLS_G2_GENERATOR, BLS_X_SEED_SQ,\n    BN254, BN254_SEED_BITS_JY00_COMPRESSED, BN254_SEED_BITS_NAF, Curve, ED25519, GRUMPKIN,\n    SECP256K1, SECP256R1, get_BLS12_381_modulus, get_BLS12_381_order_modulus, get_BN254_modulus,\n    get_BN254_order_modulus, get_ED25519_modulus, get_ED25519_order_modulus, get_G,\n    get_GRUMPKIN_modulus, get_GRUMPKIN_order_modulus, get_SECP256K1_modulus,\n    get_SECP256K1_order_modulus, get_SECP256R1_modulus, get_SECP256R1_order_modulus, get_a, get_b,\n    get_b_twist, get_curve_order_modulus, get_eigenvalue, get_g, get_min_one, get_min_one_order,\n    get_modulus, get_n, get_nG_glv_fake_glv, get_p, get_third_root_of_unity,\n    has_endomorphism_available,\n};\npub use structs::fields::{\n    E12D, E12T, RSA2048Chunks, RSA2048ChunksSerde, RSA2048ReductionWitness, deserialize_u384,\n    deserialize_u384_array, serialize_u384, serialize_u384_array, u288, u288Serde,\n};\npub use structs::points::{\n    G1G2Pair, G1Point, G1PointSerde, G1PointStorePacking, G1PointZero, G2Line, G2Point,\n    G2PointSerde, G2PointZero,\n};\npub use crate::ec::pairing::pairing_check::{\n    BLSProcessedPair, BNProcessedPair, MillerLoopResultScalingFactor,\n};\n"
  },
  {
    "path": "src/src/ec/ec_ops.cairo",
    "content": "use core::array::ArrayTrait;\nuse core::circuit::{\n    CircuitElement, CircuitInput, CircuitInputs, CircuitModulus, CircuitOutputsTrait,\n    EvalCircuitTrait, circuit_add, circuit_inverse, circuit_mul, circuit_sub, u384, u96,\n};\nuse core::num::traits::{One, Zero};\nuse core::panic_with_felt252;\nuse core::poseidon::hades_permutation;\nuse core::result::ResultTrait;\nuse corelib_imports::bounded_int::{downcast, upcast};\nuse corelib_imports::integer::{U128sFromFelt252Result, u128s_from_felt252};\nuse garaga::basic_field_ops::{is_opposite_mod_p, mul_mod_p, neg_mod_p, sub_mod_p};\nuse garaga::circuits::ec;\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::{\n    G1Point, G1PointZero, get_G, get_a, get_b, get_curve_order_modulus, get_eigenvalue, get_min_one,\n    get_min_one_order, get_modulus, get_n, get_nG_glv_fake_glv, get_third_root_of_unity,\n};\nuse garaga::ec::selectors;\n\n#[generate_trait]\npub impl G1PointImpl of G1PointTrait {\n    fn assert_on_curve_excluding_infinity(self: @G1Point, curve_index: usize) {\n        if self.is_on_curve_excluding_infinity(curve_index) == false {\n            panic_with_felt252('point not on curve');\n        }\n    }\n    fn is_on_curve_excluding_infinity(self: @G1Point, curve_index: usize) -> bool {\n        let (check) = ec::run_IS_ON_CURVE_G1_circuit(\n            *self, get_a(curve_index), get_b(curve_index), curve_index,\n        );\n        check.is_zero()\n    }\n    fn negate(self: @G1Point, curve_index: usize) -> G1Point {\n        let modulus = get_modulus(curve_index);\n        G1Point { x: *self.x, y: neg_mod_p(*self.y, modulus) }\n    }\n    fn assert_in_subgroup_excluding_infinity(self: @G1Point, curve_index: usize) {\n        self.assert_on_curve_excluding_infinity(curve_index);\n        match curve_index {\n            0 => {}, // BN254 (cofactor 1)\n            1 => {\n                // https://github.com/Consensys/gnark-crypto/blob/ff4c0ddbe1ef37d1c1c6bec8c36fc43a84c86be5/ecc/bls12-381/g1.go#L492\n                let modulus = get_modulus(curve_index);\n                let phi_p = G1Point {\n                    x: mul_mod_p(get_third_root_of_unity(curve_index), *self.x, modulus),\n                    y: *self.y,\n                };\n\n                let x_sq_phi_P = scalar_mul_by_bls12_381_seed_square(phi_p);\n                if !ec_safe_add(*self, x_sq_phi_P, curve_index).is_infinity() {\n                    panic_with_felt252('bls12-381 pt not in subgroup');\n                }\n            }, // BLS12-381\n            2 => {}, // SECP256K1 (cofactor 1)\n            3 => {}, // SECP256R1 (cofactor 1)\n            4 => { panic_with_felt252('ED25519 not implemented'); },\n            5 => {}, // GRUMPKIN (cofactor 1)\n            _ => { panic_with_felt252('invalid curve index') },\n        }\n    }\n    fn is_infinity(self: @G1Point) -> bool {\n        return self.is_zero();\n    }\n    fn update_hash_state(\n        self: @G1Point, s0: felt252, s1: felt252, s2: felt252,\n    ) -> (felt252, felt252, felt252) {\n        let base: felt252 = 79228162514264337593543950336; // 2**96\n        let self = *self;\n        let in_1 = s0 + self.x.limb0.into() + base * self.x.limb1.into();\n        let in_2 = s1 + self.x.limb2.into() + base * self.x.limb3.into();\n        let (s0, s1, s2) = hades_permutation(in_1, in_2, s2);\n        let in_1 = s0 + self.y.limb0.into() + base * self.y.limb1.into();\n        let in_2 = s1 + self.y.limb2.into() + base * self.y.limb3.into();\n        let (s0, s1, s2) = hades_permutation(in_1, in_2, s2);\n        return (s0, s1, s2);\n    }\n}\n\n// Adds two elliptic curve points on a given curve.\n// Does not check the input points are on the curve.\npub fn ec_safe_add(p: G1Point, q: G1Point, curve_index: usize) -> G1Point {\n    if p.is_infinity() {\n        return q;\n    }\n    if q.is_infinity() {\n        return p;\n    }\n    let modulus = get_modulus(curve_index);\n    let same_x = sub_mod_p(p.x, q.x, modulus).is_zero();\n\n    if same_x {\n        let opposite_y = is_opposite_mod_p(p.y, q.y, modulus);\n        if opposite_y {\n            return G1PointZero::zero();\n        } else {\n            let (res) = ec::run_DOUBLE_EC_POINT_circuit(p, get_a(curve_index), modulus);\n            return res;\n        }\n    } else {\n        let (res) = ec::run_ADD_EC_POINT_circuit(p, q, modulus);\n        return res;\n    }\n}\n\npub fn _ec_safe_add(\n    p: G1Point, q: G1Point, modulus: CircuitModulus, curve_index: usize,\n) -> G1Point {\n    if p.is_infinity() {\n        return q;\n    }\n    if q.is_infinity() {\n        return p;\n    }\n    let same_x = sub_mod_p(p.x, q.x, modulus).is_zero();\n\n    if same_x {\n        let opposite_y = is_opposite_mod_p(p.y, q.y, modulus);\n        if opposite_y {\n            return G1PointZero::zero();\n        } else {\n            let (res) = ec::run_DOUBLE_EC_POINT_circuit(p, get_a(curve_index), modulus);\n            return res;\n        }\n    } else {\n        let (res) = ec::run_ADD_EC_POINT_circuit(p, q, modulus);\n        return res;\n    }\n}\n\n#[derive(Drop, Serde)]\npub struct GlvFakeGlvHint {\n    pub Q: G1Point,\n    pub u1: felt252, // Encoded as 2^128 * sign + abs(u1)\n    pub u2: felt252, // Encoded as 2^128 * sign + abs(u2)\n    pub v1: felt252, // Encoded as 2^128 * sign + abs(v1)\n    pub v2: felt252 // Encoded as 2^128 * sign + abs(v2)\n}\n\n#[derive(Drop, Serde)]\npub struct FakeGlvHint {\n    pub Q: G1Point,\n    pub s1: u128, // (s1)_u128 (always positive)\n    pub s2: felt252 // Encoded as 2^128 * sign + abs(s2)_u128\n}\n\npub fn msm_g1(\n    points: Span<G1Point>, scalars: Span<u256>, curve_index: usize, mut hint: Span<felt252>,\n) -> G1Point {\n    match curve_index {\n        0 | 1 | 2 => { return msm_glv_fake_glv(points, scalars, curve_index, ref hint); },\n        _ => { return msm_fake_glv(points, scalars, curve_index, ref hint); },\n    }\n}\n\n\npub fn msm_fake_glv(\n    mut points: Span<G1Point>, mut scalars: Span<u256>, curve_index: usize, ref hint: Span<felt252>,\n) -> G1Point {\n    let n = scalars.len();\n    assert(n == points.len(), 'n_pts!=n_scalars');\n    if n == 0 {\n        panic_with_felt252('Msm size must be >= 1');\n    }\n    assert(hint.len() == n * 10, 'wrong fakeglv hint size');\n\n    let order_modulus = get_curve_order_modulus(curve_index);\n    let curve_order: u256 = get_n(curve_index);\n    let modulus = get_modulus(curve_index);\n    let A_weirstrass = get_a(curve_index);\n    let order_minus_one = get_min_one_order(curve_index);\n    let base_min_one = get_min_one(curve_index);\n    let mut acc = G1PointZero::zero();\n\n    while hint.len() != 0 {\n        let pt = *points.pop_front().unwrap();\n        let scalar = *scalars.pop_front().unwrap();\n        assert(scalar < curve_order, 'unreduced scalar');\n        let scalar_u384: u384 = scalar.into();\n        let fake_glv_hint: FakeGlvHint = Serde::deserialize(ref hint).unwrap();\n        let temp = _scalar_mul_fake_glv(\n            pt,\n            scalar_u384,\n            order_modulus,\n            modulus,\n            A_weirstrass,\n            order_minus_one,\n            base_min_one,\n            fake_glv_hint,\n            curve_index,\n        );\n        acc = _ec_safe_add(acc, temp, modulus, curve_index);\n    }\n    return acc;\n}\n\npub fn _scalar_mul_fake_glv(\n    point: G1Point,\n    scalar: u384,\n    order_modulus: CircuitModulus,\n    modulus: CircuitModulus,\n    A_weirstrass: u384,\n    order_minus_one: u384,\n    base_min_one: u384,\n    hint: FakeGlvHint,\n    curve_index: usize,\n) -> G1Point {\n    if scalar.is_zero() || point.is_infinity() {\n        return G1PointZero::zero();\n    }\n    point.assert_on_curve_excluding_infinity(curve_index);\n\n    if scalar.is_one() {\n        return point;\n    }\n    if scalar == order_minus_one {\n        return G1Point { x: point.x, y: neg_mod_p(point.y, modulus) };\n    }\n\n    hint.Q.assert_on_curve_excluding_infinity(curve_index);\n\n    let (_s2_sign_order, _s2_sign_base, _s2_abs): (u384, u384, u128) =\n        match u128s_from_felt252(hint.s2) {\n        U128sFromFelt252Result::Narrow(low) => {\n            (\n                u384 { limb0: 1, limb1: 0, limb2: 0, limb3: 0 },\n                u384 { limb0: 1, limb1: 0, limb2: 0, limb3: 0 },\n                low,\n            )\n        },\n        U128sFromFelt252Result::Wide((_, low)) => { (order_minus_one, base_min_one, low) },\n    };\n\n    // Verify decomposition : s1 + scalar*s2 = 0 mod n && s2!=0.\n    let s1 = CircuitElement::<CircuitInput<0>> {};\n    let S = CircuitElement::<CircuitInput<1>> {};\n    let s2 = CircuitElement::<CircuitInput<2>> {};\n    let s2_sign = CircuitElement::<CircuitInput<3>> {};\n\n    let check = circuit_add(s1, circuit_mul(S, circuit_mul(s2_sign, s2)));\n\n    let s1_u384: u384 = hint.s1.into();\n    let s2_u384: u384 = _s2_abs.into();\n    let outputs = (check,)\n        .new_inputs()\n        .next_2(s1_u384)\n        .next_2(scalar)\n        .next_2(s2_u384)\n        .next_2(_s2_sign_order)\n        .done_2()\n        .eval(order_modulus)\n        .unwrap();\n\n    assert(_s2_abs != 0, 'FakeGLV: s2=0');\n    assert(outputs.get_output(check).is_zero(), 'Wrong FakeGLV decomposition');\n\n    let (T1, T2, T3, T4, T5y, T6y, T7y, T8y, T9, T10, T11, T12, T13y, T14y, T15y, T16y, R2, R0y) =\n        ec::run_PREPARE_FAKE_GLV_PTS_circuit(\n        point, hint.Q, _s2_sign_base, A_weirstrass, modulus,\n    );\n\n    // ['T6', 'T7', 'T10', 'T11', 'T8', 'T5', 'T12', 'T9', 'T14', 'T15', 'T2', 'T3', 'T16', 'T13',\n    // 'T4', 'T1']\n    let mut Ts: Array<G1Point> = array![\n        G1Point { x: T1.x, y: T6y }, G1Point { x: T4.x, y: T7y }, T10, T11,\n        G1Point { x: T3.x, y: T8y }, G1Point { x: T2.x, y: T5y }, T12, T9,\n        G1Point { x: T9.x, y: T14y }, G1Point { x: T12.x, y: T15y }, T2, T3,\n        G1Point { x: T11.x, y: T16y }, G1Point { x: T10.x, y: T13y }, T4, T1,\n    ];\n\n    let (mut selectors, s1lsb, s2lsb) = selectors::build_selectors_inlined_fake_glv(\n        hint.s1, _s2_abs,\n    );\n\n    // Add corrected point for the last bits 2-1 at position 16 in Ts array.\n    let last_selector = *selectors.pop_front().unwrap();\n    let last_selector_pt = *Ts[last_selector];\n    let (last_selector_pt_corrected) = ec::run_ADD_EC_POINT_circuit(last_selector_pt, R2, modulus);\n    Ts.append(last_selector_pt_corrected);\n\n    let Ts = Ts.span();\n\n    // now the first selector should be 16 and will select the corrected point in the last\n    // iteration.\n\n    // First iteration (bit 128)\n    let selector_y = *selectors.pop_back().unwrap();\n    let Bi = *Ts[selector_y];\n\n    let (Acc) = ec::run_DOUBLE_EC_POINT_circuit(T2, A_weirstrass, modulus);\n    let (mut Acc) = ec::run_ADD_EC_POINT_circuit(Acc, Bi, modulus);\n\n    // assert(selectors.len() == 63, 'wrong number of selectors');\n    // 7 iterations* 9 * 2 bits = 63 * 2 = 126 bits.\n    while let Some(selector_y) = selectors.multi_pop_back::<9>() {\n        let [\n            selector_y8,\n            selector_y7,\n            selector_y6,\n            selector_y5,\n            selector_y4,\n            selector_y3,\n            selector_y2,\n            selector_y1,\n            selector_y0,\n        ] =\n            selector_y\n            .unbox();\n\n        let Bi = *Ts.at(selector_y0);\n        let Bi1 = *Ts.at(selector_y1);\n        let Bi2 = *Ts.at(selector_y2);\n        let Bi3 = *Ts.at(selector_y3);\n        let Bi4 = *Ts.at(selector_y4);\n        let Bi5 = *Ts.at(selector_y5);\n        let Bi6 = *Ts.at(selector_y6);\n        let Bi7 = *Ts.at(selector_y7);\n        let Bi8 = *Ts.at(selector_y8);\n\n        let (_Acc) = ec::run_QUADRUPLE_AND_ADD_9_circuit(\n            Acc, Bi, Bi1, Bi2, Bi3, Bi4, Bi5, Bi6, Bi7, Bi8, A_weirstrass, modulus,\n        );\n        Acc = _Acc;\n    }\n\n    let (Acc) = if s1lsb == 0 {\n        ec::run_ADD_EC_POINT_circuit(\n            Acc, G1Point { x: point.x, y: neg_mod_p(point.y, modulus) }, modulus,\n        )\n    } else {\n        (Acc,)\n    };\n    let (Acc) = if s2lsb == 0 {\n        ec::run_ADD_EC_POINT_circuit(Acc, G1Point { x: hint.Q.x, y: R0y }, modulus)\n    } else {\n        (Acc,)\n    };\n\n    // Assert.\n    assert(Acc == R2, 'wrong FakeGLV result');\n\n    return hint.Q;\n}\n\n\nfn msm_glv_fake_glv(\n    mut points: Span<G1Point>, mut scalars: Span<u256>, curve_index: usize, ref hint: Span<felt252>,\n) -> G1Point {\n    let n = scalars.len();\n    assert!(n == points.len(), \"scalars and points length mismatch\");\n    if n == 0 {\n        panic_with_felt252('Msm size must be >= 1');\n    }\n    assert(hint.len() == n * 12, 'wrong glv&fakeglv hint size');\n    let eigen = get_eigenvalue(curve_index);\n    let third_root_of_unity = get_third_root_of_unity(curve_index);\n    let modulus = get_modulus(curve_index);\n    let order_modulus = get_curve_order_modulus(curve_index);\n    let curve_order: u256 = get_n(curve_index);\n    let min_one = get_min_one_order(curve_index);\n    let nG = get_nG_glv_fake_glv(curve_index);\n\n    let mut acc = G1PointZero::zero();\n\n    while hint.len() != 0 {\n        let pt = *points.pop_front().unwrap();\n        let scalar = *scalars.pop_front().unwrap();\n        assert(scalar < curve_order, 'unreduced scalar');\n        let scalar_u384: u384 = scalar.into();\n        let glv_fake_glv_hint: GlvFakeGlvHint = Serde::deserialize(ref hint).unwrap();\n        match pt.is_infinity() {\n            true => { acc = acc; },\n            false => {\n                pt.assert_on_curve_excluding_infinity(curve_index);\n                let temp = _scalar_mul_glv_and_fake_glv(\n                    pt,\n                    scalar_u384,\n                    order_modulus,\n                    modulus,\n                    glv_fake_glv_hint,\n                    eigen,\n                    third_root_of_unity,\n                    min_one,\n                    nG,\n                    curve_index,\n                );\n                acc = _ec_safe_add(acc, temp, modulus, curve_index);\n            },\n        }\n    }\n\n    return acc;\n}\n\n\n#[inline(always)]\n// /!\\ Assumes point is on curve (not infinity) and scalar is reduced mod n. /!\\\npub fn _scalar_mul_glv_and_fake_glv(\n    point: G1Point,\n    scalar: u384,\n    order_modulus: CircuitModulus,\n    modulus: CircuitModulus,\n    hint: GlvFakeGlvHint,\n    _lambda: u384,\n    third_root_of_unity: u384,\n    minus_one: u384,\n    n_bits_G: G1Point,\n    curve_index: usize,\n) -> G1Point {\n    if scalar.is_zero() {\n        return G1PointZero::zero();\n    }\n    if scalar.is_one() {\n        return point;\n    }\n\n    hint.Q.assert_on_curve_excluding_infinity(curve_index);\n\n    if scalar == minus_one {\n        return G1Point { x: point.x, y: neg_mod_p(point.y, modulus) };\n    }\n\n    let one_u384: u384 = u384 { limb0: 1, limb1: 0, limb2: 0, limb3: 0 };\n\n    // Retrieve the u1, u2, v1, v2 values from the hint\n    // They are encoded as 2^128 * sign + abs(value)\n    // If high_128 limbs are != 0, we consider the value is negative, otherwise it is positive.\n    // We also precompute the negated value of the y coordinate of the points based on the sign in\n    // the same match condition for efficiency.\n\n    let (_u1_sign, _u1_abs, P0y, P1y): (u384, u96, u384, u384) = match u128s_from_felt252(hint.u1) {\n        U128sFromFelt252Result::Narrow(low) => {\n            (one_u384, downcast(low).unwrap(), neg_mod_p(point.y, modulus), point.y)\n        },\n        U128sFromFelt252Result::Wide((\n            _, low,\n        )) => { (minus_one, downcast(low).unwrap(), point.y, neg_mod_p(point.y, modulus)) },\n    };\n    let (_u2_sign, _u2_abs, Phi_P0y, Phi_P1y): (u384, u96, u384, u384) =\n        match u128s_from_felt252(hint.u2) {\n        U128sFromFelt252Result::Narrow(low) => {\n            (one_u384, downcast(low).unwrap(), neg_mod_p(point.y, modulus), point.y)\n        },\n        U128sFromFelt252Result::Wide((\n            _, low,\n        )) => { (minus_one, downcast(low).unwrap(), point.y, neg_mod_p(point.y, modulus)) },\n    };\n    let (_v1_sign, _v1_abs, Q0y): (u384, u96, u384) = match u128s_from_felt252(hint.v1) {\n        U128sFromFelt252Result::Narrow(low) => {\n            (one_u384, downcast(low).unwrap(), neg_mod_p(hint.Q.y, modulus))\n        },\n        U128sFromFelt252Result::Wide((_, low)) => { (minus_one, downcast(low).unwrap(), hint.Q.y) },\n    };\n    let (_v2_sign, _v2_abs, Phi_Q0y): (u384, u96, u384) = match u128s_from_felt252(hint.v2) {\n        U128sFromFelt252Result::Narrow(low) => {\n            (one_u384, downcast(low).unwrap(), neg_mod_p(hint.Q.y, modulus))\n        },\n        U128sFromFelt252Result::Wide((_, low)) => { (minus_one, downcast(low).unwrap(), hint.Q.y) },\n    };\n\n    // At this point ~ 631 steps.\n\n    // Check that the GLV/FakeGLV decomposition is valid:\n    // # s*(v1 + λ*v2) + u1 + λ*u2 = 0\n    let s = CircuitElement::<CircuitInput<0>> {};\n    let lambda = CircuitElement::<CircuitInput<1>> {};\n    let u1_abs = CircuitElement::<CircuitInput<2>> {};\n    let u1_sign = CircuitElement::<CircuitInput<3>> {};\n    let u2_abs = CircuitElement::<CircuitInput<4>> {};\n    let u2_sign = CircuitElement::<CircuitInput<5>> {};\n    let v1_abs = CircuitElement::<CircuitInput<6>> {};\n    let v1_sign = CircuitElement::<CircuitInput<7>> {};\n    let v2_abs = CircuitElement::<CircuitInput<8>> {};\n    let v2_sign = CircuitElement::<CircuitInput<9>> {};\n\n    let u1 = circuit_mul(u1_abs, u1_sign);\n    let u2 = circuit_mul(u2_abs, u2_sign);\n    let v1 = circuit_mul(v1_abs, v1_sign);\n    let v2 = circuit_mul(v2_abs, v2_sign);\n\n    // u1 + λ*u2\n    let lambda_u2 = circuit_mul(lambda, u2);\n    let u1_lambda_u2 = circuit_add(u1, lambda_u2);\n\n    // s*(v1 + λ*v2)\n    let lambda_v2 = circuit_mul(lambda, v2);\n    let v1_lambda_v2 = circuit_add(v1, lambda_v2);\n    let s_v1_lambda_v2 = circuit_mul(s, v1_lambda_v2);\n\n    // s*(v1 + λ*v2) + u1 + λ*u2\n    let res = circuit_add(s_v1_lambda_v2, u1_lambda_u2);\n\n    let outputs = (res,)\n        .new_inputs()\n        .next_2(scalar)\n        .next_2(_lambda)\n        .next_2([_u1_abs, 0, 0, 0])\n        .next_2(_u1_sign)\n        .next_2([_u2_abs, 0, 0, 0])\n        .next_2(_u2_sign)\n        .next_2([_v1_abs, 0, 0, 0])\n        .next_2(_v1_sign)\n        .next_2([_v2_abs, 0, 0, 0])\n        .next_2(_v2_sign)\n        .done_2()\n        .eval(order_modulus)\n        .unwrap();\n\n    assert(outputs.get_output(res).is_zero(), 'Wrong GLV/FakeGLV decomposition');\n\n    // At this point, ~ 836 steps\n\n    // Note : P != Q (scalar != 1)\n    let P0 = G1Point { x: point.x, y: P0y };\n    let Q0 = G1Point { x: hint.Q.x, y: Q0y };\n\n    let (\n        B1,\n        B2,\n        B3,\n        B4,\n        B5,\n        B6,\n        B7,\n        B8,\n        B9y,\n        B10y,\n        B11y,\n        B12y,\n        B13y,\n        B14y,\n        B15y,\n        B16y,\n        Phi_P0x,\n        Phi_Q0x,\n        mut Acc,\n    ) =\n        ec::run_PREPARE_GLV_FAKE_GLV_PTS_circuit(\n        point.x,\n        P0y,\n        P1y,\n        hint.Q.x,\n        Q0y,\n        Phi_P0y,\n        Phi_P1y,\n        Phi_Q0y,\n        get_G(curve_index),\n        third_root_of_unity,\n        modulus,\n    );\n    let Bs: Span<G1Point> = array![\n        G1Point { x: B1.x, y: B16y }, B8, G1Point { x: B3.x, y: B14y }, B6,\n        G1Point { x: B5.x, y: B12y }, B4, G1Point { x: B7.x, y: B10y }, B2,\n        G1Point { x: B2.x, y: B15y }, B7, G1Point { x: B4.x, y: B13y }, B5,\n        G1Point { x: B6.x, y: B11y }, B3, G1Point { x: B8.x, y: B9y }, B1,\n    ]\n        .span();\n\n    // At this point, ~ 1643 steps.\n\n    // println!(\"Bs: {:?}\", Bs);\n    // println!(\"Acc: {:?}\", Acc);\n    let mut _u1: u128 = upcast(_u1_abs);\n    let mut _u2: u128 = upcast(_u2_abs);\n    let mut _v1: u128 = upcast(_v1_abs);\n    let mut _v2: u128 = upcast(_v2_abs);\n\n    let (mut selectors, u1lsb, u2lsb, v1lsb, v2lsb) = selectors::build_selectors_inlined(\n        _u1, _u2, _v1, _v2,\n    );\n\n    // Process 8 bits per iteration\n    while let Some(selector_y) = selectors.multi_pop_back::<8>() {\n        let [\n            selector_y7,\n            selector_y6,\n            selector_y5,\n            selector_y4,\n            selector_y3,\n            selector_y2,\n            selector_y1,\n            selector_y0,\n        ] =\n            (*selector_y)\n            .unbox();\n        let Bi = *Bs.at(selector_y0);\n        let Bi1 = *Bs.at(selector_y1);\n        let Bi2 = *Bs.at(selector_y2);\n        let Bi3 = *Bs.at(selector_y3);\n        let Bi4 = *Bs.at(selector_y4);\n        let Bi5 = *Bs.at(selector_y5);\n        let Bi6 = *Bs.at(selector_y6);\n        let Bi7 = *Bs.at(selector_y7);\n\n        Acc = double_and_add_8(Acc, Bi, Bi1, Bi2, Bi3, Bi4, Bi5, Bi6, Bi7, modulus);\n    }\n\n    // println!(\"Acc final: {:?}\", Acc);\n    let (Acc) = if u1lsb == 0 {\n        ec::run_ADD_EC_POINT_circuit(Acc, P0, modulus)\n    } else {\n        (Acc,)\n    };\n    let (Acc) = if u2lsb == 0 {\n        ec::run_ADD_EC_POINT_circuit(Acc, G1Point { x: Phi_P0x, y: Phi_P0y }, modulus)\n    } else {\n        (Acc,)\n    };\n\n    let (Acc) = if v1lsb == 0 {\n        ec::run_ADD_EC_POINT_circuit(Acc, Q0, modulus)\n    } else {\n        (Acc,)\n    };\n\n    let (Acc) = if v2lsb == 0 {\n        ec::run_ADD_EC_POINT_circuit(Acc, G1Point { x: Phi_Q0x, y: Phi_Q0y }, modulus)\n    } else {\n        (Acc,)\n    };\n\n    assert(Acc == n_bits_G, 'Wrong Glv&FakeGLV result');\n\n    return hint.Q;\n}\n\nfn scalar_mul_by_bls12_381_seed_square(q: G1Point) -> G1Point {\n    let a = get_a(1);\n    let modulus = get_modulus(1);\n    let (z) = ec::run_DOUBLE_EC_POINT_circuit(q, a, modulus); // z := g1.double(q)\n    let (z) = ec::run_ADD_EC_POINT_circuit(q, z, modulus); // z = g1.add(q, z)\n    let (z) = ec::run_DOUBLE_EC_POINT_circuit(z, a, modulus); // z = g1.double(z)\n    let z = double_and_add(z, q, modulus); // z = g1.doubleAndAdd(z, q)\n    let z = double_n_times(z, 2, modulus, a); // z = g1.doubleN(z, 2)\n    let z = double_and_add(z, q, modulus); // z = g1.doubleAndAdd(z, q)\n    let z = double_n_times(z, 8, modulus, a); // z = g1.doubleN(z, 8)\n    let z = double_and_add(z, q, modulus); // z = g1.doubleAndAdd(z, q)\n    let (t0) = ec::run_DOUBLE_EC_POINT_circuit(z, a, modulus); // t0 := g1.double(z)\n    let (t0) = ec::run_ADD_EC_POINT_circuit(z, t0, modulus); // t0 = g1.add(z, t0)\n    let (t0) = ec::run_DOUBLE_EC_POINT_circuit(t0, a, modulus); // t0 = g1.double(t0)\n    let t0 = double_and_add(t0, z, modulus); // t0 = g1.doubleAndAdd(t0, z)\n    let t0 = double_n_times(t0, 2, modulus, a); // t0 = g1.doubleN(t0, 2)\n    let t0 = double_and_add(t0, z, modulus); // t0 = g1.doubleAndAdd(t0, z)\n    let t0 = double_n_times(t0, 8, modulus, a); // t0 = g1.doubleN(t0, 8)\n    let t0 = double_and_add(t0, z, modulus); // t0 = g1.doubleAndAdd(t0, z)\n    let t0 = double_n_times(t0, 31, modulus, a); // t0 = g1.doubleN(t0, 31)\n    let (z) = ec::run_ADD_EC_POINT_circuit(t0, z, modulus); // z = g1.add(t0, z)\n    let z = double_n_times(z, 32, modulus, a); // z = g1.doubleN(z, 32)\n    let z = double_and_add(z, q, modulus); // z = g1.doubleAndAdd(z, q)\n    let z = double_n_times(z, 32, modulus, a); // z = g1.doubleN(z, 32)\n    return z;\n}\n\npub fn double_n_times(p: G1Point, n: usize, modulus: CircuitModulus, a: u384) -> G1Point {\n    let mut res = p;\n    for _ in 0..n {\n        let (tmp) = ec::run_DOUBLE_EC_POINT_circuit(res, a, modulus);\n        res = tmp;\n    }\n    return res;\n}\n\n\n// Computes 2*P + Q\npub fn double_and_add(p: G1Point, q: G1Point, modulus: CircuitModulus) -> G1Point {\n    let px = CircuitElement::<CircuitInput<0>> {};\n    let py = CircuitElement::<CircuitInput<1>> {};\n    let qx = CircuitElement::<CircuitInput<2>> {};\n    let qy = CircuitElement::<CircuitInput<3>> {};\n\n    // Compute lambda1 for P + Q\n    let num_lambda1 = circuit_sub(qy, py);\n    let den_lambda1 = circuit_sub(qx, px);\n    let lambda1 = circuit_mul(num_lambda1, circuit_inverse(den_lambda1));\n\n    // Compute x-coordinate of P + Q\n    let lambda1_sq = circuit_mul(lambda1, lambda1);\n    let x2 = circuit_sub(lambda1_sq, px);\n    let x2 = circuit_sub(x2, qx);\n\n    // Compute lambda2 for 2*P\n    let den_lambda2 = circuit_sub(x2, px);\n    let num_lambda2 = circuit_add(py, py);\n    let term2_lambda2 = circuit_mul(num_lambda2, circuit_inverse(den_lambda2));\n    let lambda2 = circuit_add(lambda1, term2_lambda2);\n\n    // Compute final coordinates of 2*P + Q\n    let lambda2_sq = circuit_mul(lambda2, lambda2);\n    let tx_temp = circuit_sub(lambda2_sq, px);\n    let result_x = circuit_sub(tx_temp, x2);\n\n    let tx_sub_px = circuit_sub(result_x, px);\n    let term1_ty = circuit_mul(lambda2, tx_sub_px);\n    let result_y = circuit_sub(term1_ty, py);\n\n    let outputs = (result_x, result_y)\n        .new_inputs()\n        .next_2(p.x)\n        .next_2(p.y)\n        .next_2(q.x)\n        .next_2(q.y)\n        .done_2()\n        .eval(modulus)\n        .expect('double_and_add failed');\n\n    return G1Point { x: outputs.get_output(result_x), y: outputs.get_output(result_y) };\n}\n\n\n// Computes 2*(2*(2*(2*(2*(2*(2*(2*P + Q0) + Q1) + Q2) + Q3) + Q4) + Q5) + Q6) + Q7\n#[inline(always)]\npub fn double_and_add_8(\n    p: G1Point,\n    q0: G1Point,\n    q1: G1Point,\n    q2: G1Point,\n    q3: G1Point,\n    q4: G1Point,\n    q5: G1Point,\n    q6: G1Point,\n    q7: G1Point,\n    modulus: CircuitModulus,\n) -> G1Point {\n    let px = CircuitElement::<CircuitInput<0>> {};\n    let py = CircuitElement::<CircuitInput<1>> {};\n    let q0x = CircuitElement::<CircuitInput<2>> {};\n    let q0y = CircuitElement::<CircuitInput<3>> {};\n    let q1x = CircuitElement::<CircuitInput<4>> {};\n    let q1y = CircuitElement::<CircuitInput<5>> {};\n    let q2x = CircuitElement::<CircuitInput<6>> {};\n    let q2y = CircuitElement::<CircuitInput<7>> {};\n    let q3x = CircuitElement::<CircuitInput<8>> {};\n    let q3y = CircuitElement::<CircuitInput<9>> {};\n    let q4x = CircuitElement::<CircuitInput<10>> {};\n    let q4y = CircuitElement::<CircuitInput<11>> {};\n    let q5x = CircuitElement::<CircuitInput<12>> {};\n    let q5y = CircuitElement::<CircuitInput<13>> {};\n    let q6x = CircuitElement::<CircuitInput<14>> {};\n    let q6y = CircuitElement::<CircuitInput<15>> {};\n    let q7x = CircuitElement::<CircuitInput<16>> {};\n    let q7y = CircuitElement::<CircuitInput<17>> {};\n\n    // --- Step 1: (2 * CurrentP) + Q0 ---\n    let num_lambda1_0 = circuit_sub(q0y, py);\n    let den_lambda1_0 = circuit_sub(q0x, px);\n    let lambda1_0 = circuit_mul(num_lambda1_0, circuit_inverse(den_lambda1_0));\n\n    let lambda1_sq_0 = circuit_mul(lambda1_0, lambda1_0);\n    let x2_0 = circuit_sub(lambda1_sq_0, px);\n    let x2_0 = circuit_sub(x2_0, q0x);\n\n    let den_lambda2_0 = circuit_sub(x2_0, px);\n    let num_lambda2_0 = circuit_add(py, py);\n    let term2_lambda2_0 = circuit_mul(num_lambda2_0, circuit_inverse(den_lambda2_0));\n    let lambda2_0 = circuit_add(lambda1_0, term2_lambda2_0);\n\n    let lambda2_sq_0 = circuit_mul(lambda2_0, lambda2_0);\n    let tx_temp_0 = circuit_sub(lambda2_sq_0, px);\n    let T1x = circuit_sub(tx_temp_0, x2_0);\n\n    let tx_sub_px_0 = circuit_sub(T1x, px);\n    let term1_ty_0 = circuit_mul(lambda2_0, tx_sub_px_0);\n    let T1y = circuit_sub(term1_ty_0, py);\n\n    // --- Step 2: (2 * CurrentP) + Q1 ---\n    let num_lambda1_1 = circuit_sub(q1y, T1y);\n    let den_lambda1_1 = circuit_sub(q1x, T1x);\n    let lambda1_1 = circuit_mul(num_lambda1_1, circuit_inverse(den_lambda1_1));\n\n    let lambda1_sq_1 = circuit_mul(lambda1_1, lambda1_1);\n    let x2_1 = circuit_sub(lambda1_sq_1, T1x);\n    let x2_1 = circuit_sub(x2_1, q1x);\n\n    let den_lambda2_1 = circuit_sub(x2_1, T1x);\n    let num_lambda2_1 = circuit_add(T1y, T1y);\n    let term2_lambda2_1 = circuit_mul(num_lambda2_1, circuit_inverse(den_lambda2_1));\n    let lambda2_1 = circuit_add(lambda1_1, term2_lambda2_1);\n\n    let lambda2_sq_1 = circuit_mul(lambda2_1, lambda2_1);\n    let tx_temp_1 = circuit_sub(lambda2_sq_1, T1x);\n    let T2x = circuit_sub(tx_temp_1, x2_1);\n\n    let tx_sub_px_1 = circuit_sub(T2x, T1x);\n    let term1_ty_1 = circuit_mul(lambda2_1, tx_sub_px_1);\n    let T2y = circuit_sub(term1_ty_1, T1y);\n\n    // --- Step 3: (2 * CurrentP) + Q2 ---\n    let num_lambda1_2 = circuit_sub(q2y, T2y);\n    let den_lambda1_2 = circuit_sub(q2x, T2x);\n    let lambda1_2 = circuit_mul(num_lambda1_2, circuit_inverse(den_lambda1_2));\n\n    let lambda1_sq_2 = circuit_mul(lambda1_2, lambda1_2);\n    let x2_2 = circuit_sub(lambda1_sq_2, T2x);\n    let x2_2 = circuit_sub(x2_2, q2x);\n\n    let den_lambda2_2 = circuit_sub(x2_2, T2x);\n    let num_lambda2_2 = circuit_add(T2y, T2y);\n    let term2_lambda2_2 = circuit_mul(num_lambda2_2, circuit_inverse(den_lambda2_2));\n    let lambda2_2 = circuit_add(lambda1_2, term2_lambda2_2);\n\n    let lambda2_sq_2 = circuit_mul(lambda2_2, lambda2_2);\n    let tx_temp_2 = circuit_sub(lambda2_sq_2, T2x);\n    let T3x = circuit_sub(tx_temp_2, x2_2);\n\n    let tx_sub_px_2 = circuit_sub(T3x, T2x);\n    let term1_ty_2 = circuit_mul(lambda2_2, tx_sub_px_2);\n    let T3y = circuit_sub(term1_ty_2, T2y);\n\n    // --- Step 4: (2 * CurrentP) + Q3 ---\n    let num_lambda1_3 = circuit_sub(q3y, T3y);\n    let den_lambda1_3 = circuit_sub(q3x, T3x);\n    let lambda1_3 = circuit_mul(num_lambda1_3, circuit_inverse(den_lambda1_3));\n\n    let lambda1_sq_3 = circuit_mul(lambda1_3, lambda1_3);\n    let x2_3 = circuit_sub(lambda1_sq_3, T3x);\n    let x2_3 = circuit_sub(x2_3, q3x);\n\n    let den_lambda2_3 = circuit_sub(x2_3, T3x);\n    let num_lambda2_3 = circuit_add(T3y, T3y);\n    let term2_lambda2_3 = circuit_mul(num_lambda2_3, circuit_inverse(den_lambda2_3));\n    let lambda2_3 = circuit_add(lambda1_3, term2_lambda2_3);\n\n    let lambda2_sq_3 = circuit_mul(lambda2_3, lambda2_3);\n    let tx_temp_3 = circuit_sub(lambda2_sq_3, T3x);\n    let T4x = circuit_sub(tx_temp_3, x2_3);\n\n    let tx_sub_px_3 = circuit_sub(T4x, T3x);\n    let term1_ty_3 = circuit_mul(lambda2_3, tx_sub_px_3);\n    let T4y = circuit_sub(term1_ty_3, T3y);\n\n    // --- Step 5: (2 * CurrentP) + Q4 ---\n    let num_lambda1_4 = circuit_sub(q4y, T4y);\n    let den_lambda1_4 = circuit_sub(q4x, T4x);\n    let lambda1_4 = circuit_mul(num_lambda1_4, circuit_inverse(den_lambda1_4));\n\n    let lambda1_sq_4 = circuit_mul(lambda1_4, lambda1_4);\n    let x2_4 = circuit_sub(lambda1_sq_4, T4x);\n    let x2_4 = circuit_sub(x2_4, q4x);\n\n    let den_lambda2_4 = circuit_sub(x2_4, T4x);\n    let num_lambda2_4 = circuit_add(T4y, T4y);\n    let term2_lambda2_4 = circuit_mul(num_lambda2_4, circuit_inverse(den_lambda2_4));\n    let lambda2_4 = circuit_add(lambda1_4, term2_lambda2_4);\n\n    let lambda2_sq_4 = circuit_mul(lambda2_4, lambda2_4);\n    let tx_temp_4 = circuit_sub(lambda2_sq_4, T4x);\n    let T5x = circuit_sub(tx_temp_4, x2_4);\n\n    let tx_sub_px_4 = circuit_sub(T5x, T4x);\n    let term1_ty_4 = circuit_mul(lambda2_4, tx_sub_px_4);\n    let T5y = circuit_sub(term1_ty_4, T4y);\n\n    // --- Step 6: (2 * CurrentP) + Q5 ---\n    let num_lambda1_5 = circuit_sub(q5y, T5y);\n    let den_lambda1_5 = circuit_sub(q5x, T5x);\n    let lambda1_5 = circuit_mul(num_lambda1_5, circuit_inverse(den_lambda1_5));\n\n    let lambda1_sq_5 = circuit_mul(lambda1_5, lambda1_5);\n    let x2_5 = circuit_sub(lambda1_sq_5, T5x);\n    let x2_5 = circuit_sub(x2_5, q5x);\n\n    let den_lambda2_5 = circuit_sub(x2_5, T5x);\n    let num_lambda2_5 = circuit_add(T5y, T5y);\n    let term2_lambda2_5 = circuit_mul(num_lambda2_5, circuit_inverse(den_lambda2_5));\n    let lambda2_5 = circuit_add(lambda1_5, term2_lambda2_5);\n\n    let lambda2_sq_5 = circuit_mul(lambda2_5, lambda2_5);\n    let tx_temp_5 = circuit_sub(lambda2_sq_5, T5x);\n    let T6x = circuit_sub(tx_temp_5, x2_5);\n\n    let tx_sub_px_5 = circuit_sub(T6x, T5x);\n    let term1_ty_5 = circuit_mul(lambda2_5, tx_sub_px_5);\n    let T6y = circuit_sub(term1_ty_5, T5y);\n\n    // --- Step 7: (2 * CurrentP) + Q6 ---\n    let num_lambda1_6 = circuit_sub(q6y, T6y);\n    let den_lambda1_6 = circuit_sub(q6x, T6x);\n    let lambda1_6 = circuit_mul(num_lambda1_6, circuit_inverse(den_lambda1_6));\n\n    let lambda1_sq_6 = circuit_mul(lambda1_6, lambda1_6);\n    let x2_6 = circuit_sub(lambda1_sq_6, T6x);\n    let x2_6 = circuit_sub(x2_6, q6x);\n\n    let den_lambda2_6 = circuit_sub(x2_6, T6x);\n    let num_lambda2_6 = circuit_add(T6y, T6y);\n    let term2_lambda2_6 = circuit_mul(num_lambda2_6, circuit_inverse(den_lambda2_6));\n    let lambda2_6 = circuit_add(lambda1_6, term2_lambda2_6);\n\n    let lambda2_sq_6 = circuit_mul(lambda2_6, lambda2_6);\n    let tx_temp_6 = circuit_sub(lambda2_sq_6, T6x);\n    let T7x = circuit_sub(tx_temp_6, x2_6);\n\n    let tx_sub_px_6 = circuit_sub(T7x, T6x);\n    let term1_ty_6 = circuit_mul(lambda2_6, tx_sub_px_6);\n    let T7y = circuit_sub(term1_ty_6, T6y);\n\n    // --- Step 8: (2 * CurrentP) + Q7 ---\n    let num_lambda1_7 = circuit_sub(q7y, T7y);\n    let den_lambda1_7 = circuit_sub(q7x, T7x);\n    let lambda1_7 = circuit_mul(num_lambda1_7, circuit_inverse(den_lambda1_7));\n\n    let lambda1_sq_7 = circuit_mul(lambda1_7, lambda1_7);\n    let x2_7 = circuit_sub(lambda1_sq_7, T7x);\n    let x2_7 = circuit_sub(x2_7, q7x);\n\n    let den_lambda2_7 = circuit_sub(x2_7, T7x);\n    let num_lambda2_7 = circuit_add(T7y, T7y);\n    let term2_lambda2_7 = circuit_mul(num_lambda2_7, circuit_inverse(den_lambda2_7));\n    let lambda2_7 = circuit_add(lambda1_7, term2_lambda2_7);\n\n    let lambda2_sq_7 = circuit_mul(lambda2_7, lambda2_7);\n    let tx_temp_7 = circuit_sub(lambda2_sq_7, T7x);\n    let T8x = circuit_sub(tx_temp_7, x2_7);\n\n    let tx_sub_px_7 = circuit_sub(T8x, T7x);\n    let term1_ty_7 = circuit_mul(lambda2_7, tx_sub_px_7);\n    let T8y = circuit_sub(term1_ty_7, T7y);\n\n    let outputs = (T8x, T8y)\n        .new_inputs()\n        .next_2(p.x)\n        .next_2(p.y)\n        .next_2(q0.x)\n        .next_2(q0.y)\n        .next_2(q1.x)\n        .next_2(q1.y)\n        .next_2(q2.x)\n        .next_2(q2.y)\n        .next_2(q3.x)\n        .next_2(q3.y)\n        .next_2(q4.x)\n        .next_2(q4.y)\n        .next_2(q5.x)\n        .next_2(q5.y)\n        .next_2(q6.x)\n        .next_2(q6.y)\n        .next_2(q7.x)\n        .next_2(q7.y)\n        .done_2()\n        .eval(modulus)\n        .expect('double_and_add_8 failed');\n\n    return G1Point { x: outputs.get_output(T8x), y: outputs.get_output(T8y) };\n}\n\n"
  },
  {
    "path": "src/src/ec/ec_ops_g2.cairo",
    "content": "use core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitModulus, CircuitOutputsTrait,\n    EvalCircuitTrait, circuit_add, circuit_sub, u384,\n};\nuse core::num::traits::Zero;\nuse core::option::Option;\nuse garaga::basic_field_ops::{neg_mod_p, reduce_mod_p};\nuse garaga::circuits::ec;\nuse garaga::core::circuit::AddInputResultTrait2;\nuse garaga::definitions::{G2Point, G2PointZero, get_a, get_b_twist, get_modulus};\nuse garaga::utils::u384_assert_zero;\n\n\n#[generate_trait]\npub impl G2PointImpl of G2PointTrait {\n    fn assert_on_curve_excluding_infinity(self: @G2Point, curve_index: usize) {\n        let (b20, b21) = get_b_twist(curve_index);\n        let (check0, check1) = ec::run_IS_ON_CURVE_G2_circuit(\n            *self, get_a(curve_index), b20, b21, curve_index,\n        );\n        u384_assert_zero(check0);\n        u384_assert_zero(check1);\n    }\n    fn is_on_curve_excluding_infinity(self: @G2Point, curve_index: usize) -> bool {\n        let (b20, b21) = get_b_twist(curve_index);\n        let (check0, check1) = ec::run_IS_ON_CURVE_G2_circuit(\n            *self, get_a(curve_index), b20, b21, curve_index,\n        );\n        return check0.is_zero() && check1.is_zero();\n    }\n    fn is_infinity(self: @G2Point) -> bool {\n        return self.is_zero();\n    }\n    fn negate(self: @G2Point, curve_index: usize) -> G2Point {\n        let modulus = get_modulus(curve_index);\n        G2Point {\n            x0: *self.x0,\n            x1: *self.x1,\n            y0: neg_mod_p(*self.y0, modulus),\n            y1: neg_mod_p(*self.y1, modulus),\n        }\n    }\n    fn assert_in_subgroup_excluding_infinity(self: @G2Point, curve_index: usize) {\n        self.assert_on_curve_excluding_infinity(curve_index);\n        match curve_index {\n            0 => {}, // BN254 (cofactor 1, nothing to do)\n            1 => {\n                let modulus = get_modulus(curve_index);\n                let (psi_Q) = ec::run_PSI_G2_BLS12_381_circuit(*self, modulus);\n                let seed_Q = scalar_mul_by_bls12_381_seed(*self);\n                if psi_Q != seed_Q {\n                    core::panic_with_felt252('bls12-381 pt not in subgroup');\n                }\n            },\n            _ => { core::panic_with_felt252('invalid curve index') },\n        }\n    }\n}\n\n/// G2 Ops for BLS12-381.\n\n/// Adds two elliptic curve points on a given curve twist.\n///\n/// # Assumptions\n/// - The curve equation is of the form y^2 = x^3 + b [Fp2] (i.e. a = 0) for the given curve index.\n/// - The curve index should be either 0 (BN254) or 1 (BLS12_381). Behavior is undefined otherwise.\n/// - The points are on the curve (can be the point at infinity as well).\n///\n/// # Returns\n/// - Point at infinity if the points have the same x coordinate and opposite y coordinates.\n/// - The result of the addition otherwise.\npub fn ec_safe_add_g2(p: G2Point, q: G2Point, curve_index: usize) -> G2Point {\n    if p.is_infinity() {\n        return q;\n    }\n    if q.is_infinity() {\n        return p;\n    }\n    let modulus = get_modulus(curve_index);\n    let same_x = eq_mod_p(p.x0, p.x1, q.x0, q.x1, modulus);\n\n    if same_x {\n        let opposite_y = eq_neg_mod_p(p.y0, p.y1, q.y0, q.y1, modulus);\n\n        if opposite_y {\n            return G2PointZero::zero(); // Point at infinity\n        } else {\n            let (res) = ec::run_DOUBLE_EC_POINT_G2_A_EQ_0_circuit(p, modulus);\n            return res;\n        }\n    } else {\n        let (res) = ec::run_ADD_EC_POINTS_G2_circuit(p, q, modulus);\n        return res;\n    }\n}\n\n/// Multiplies a G2 point by a u256 scalar.\n///\n/// # Returns\n/// - `Option::None` if the point is not on the curve.\n///\n/// # Notes\n/// - `curve_index` should be either 0 (BN254) or 1 (BLS12_381). Behavior is undefined otherwise.\n/// - Input points outside of the r-torsion subgroup are supported.\npub fn ec_mul(pt: G2Point, s: u256, curve_index: usize) -> Option<G2Point> {\n    if pt.is_zero() {\n        // Input point is at infinity, return it\n        return Option::Some(pt);\n    } else if pt.is_on_curve_excluding_infinity(curve_index) {\n        if s == 0 {\n            return Option::Some(G2PointZero::zero());\n        } else if s == 1 {\n            return Option::Some(pt);\n        } else {\n            // Point is on the curve.\n            // s is >= 2.\n            let bits = get_bits_little(s);\n            let pt = ec_mul_inner(pt, bits, curve_index);\n            return Option::Some(pt);\n        }\n    } else {\n        // Point is not on the curve\n        return Option::None;\n    }\n}\n\n// Returns the bits of a 256 bit number in little endian format.\npub fn get_bits_little(s: u256) -> Array<felt252> {\n    let mut bits = ArrayTrait::new();\n    let mut s_low = s.low;\n    while s_low != 0 {\n        let (q, r) = core::traits::DivRem::div_rem(s_low, 2);\n        bits.append(r.into());\n        s_low = q;\n    }\n    let mut s_high = s.high;\n    if s_high != 0 {\n        while bits.len() != 128 {\n            bits.append(0);\n        }\n    }\n    while s_high != 0 {\n        let (q, r) = core::traits::DivRem::div_rem(s_high, 2);\n        bits.append(r.into());\n        s_high = q;\n    }\n    bits\n}\n\n\n// Should not be called outside of ec_mul.\n// The size of bits array must be at minimum 2 and the point must be strictly on the curve.\nfn ec_mul_inner(pt: G2Point, mut bits: Array<felt252>, curve_index: usize) -> G2Point {\n    let mut temp = pt; // 2^0 * pt\n    let mut result: G2Point = G2PointZero::zero();\n    let modulus = get_modulus(curve_index);\n\n    // Make sure input x coordinate is reduced mod p before the loop for check inside ec_add_inner.\n    temp.x0 = reduce_mod_p(temp.x0, modulus);\n    temp.x1 = reduce_mod_p(temp.x1, modulus);\n    // Make sure input y coordinate is reduced mod p before the loop for the check before doubling.\n    temp.y0 = reduce_mod_p(temp.y0, modulus);\n    temp.y1 = reduce_mod_p(temp.y1, modulus);\n\n    for bit in bits {\n        if bit != 0 {\n            result = _ec_add_inner(temp, result, modulus);\n        }\n        if temp.y0.is_zero() && temp.y1.is_zero() {\n            // P = -P. Doubling will result in a point at infinity.\n            temp = G2PointZero::zero();\n        } else {\n            let (_temp) = ec::run_DOUBLE_EC_POINT_G2_A_EQ_0_circuit(temp, modulus);\n            temp = _temp; // 2^i * pt\n        }\n    }\n\n    return result;\n}\n\n// Inner add function for ec_mul_inner.\n// Assumptions:\n//     - The points are on the curve (can be the point at infinity as well)\n//     - p and q have their coordinates in reduced form.\n#[inline]\nfn _ec_add_inner(p: G2Point, q: G2Point, modulus: CircuitModulus) -> G2Point {\n    if p.is_infinity() {\n        return q;\n    }\n    if q.is_infinity() {\n        return p;\n    }\n    let same_x = (p.x0 == q.x0 && p.x1 == q.x1);\n\n    if same_x {\n        let opposite_y = eq_neg_mod_p(p.y0, p.y1, q.y0, q.y1, modulus);\n\n        if opposite_y {\n            return G2PointZero::zero(); // Point at infinity\n        } else {\n            let (res) = ec::run_DOUBLE_EC_POINT_G2_A_EQ_0_circuit(p, modulus);\n            return res;\n        }\n    } else {\n        let (res) = ec::run_ADD_EC_POINTS_G2_circuit(p, q, modulus);\n        return res;\n    }\n}\n\n\n// returns true if a == b mod p bls12-381\n#[inline]\npub fn eq_mod_p(a0: u384, a1: u384, b0: u384, b1: u384, modulus: CircuitModulus) -> bool {\n    let _a0 = CE::<CI<0>> {};\n    let _a1 = CE::<CI<1>> {};\n    let _b0 = CE::<CI<2>> {};\n    let _b1 = CE::<CI<3>> {};\n    let sub0 = circuit_sub(_a0, _b0);\n    let sub1 = circuit_sub(_a1, _b1);\n\n    let outputs = (sub0, sub1)\n        .new_inputs()\n        .next_2(a0)\n        .next_2(a1)\n        .next_2(b0)\n        .next_2(b1)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    return outputs.get_output(sub0).is_zero() && outputs.get_output(sub1).is_zero();\n}\n\n// returns true if a == -b mod p bls12-381\n#[inline]\npub fn eq_neg_mod_p(a0: u384, a1: u384, b0: u384, b1: u384, modulus: CircuitModulus) -> bool {\n    let _a0 = CE::<CI<0>> {};\n    let _a1 = CE::<CI<1>> {};\n    let _b0 = CE::<CI<2>> {};\n    let _b1 = CE::<CI<3>> {};\n    let check0 = circuit_add(_a0, _b0);\n    let check1 = circuit_add(_a1, _b1);\n\n    let outputs = (check0, check1)\n        .new_inputs()\n        .next_2(a0)\n        .next_2(a1)\n        .next_2(b0)\n        .next_2(b1)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    return outputs.get_output(check0).is_zero() && outputs.get_output(check1).is_zero();\n}\n\n\n// Computes [x]Q where x is the BLS12-381 seed parameter.\n//\n// # Assumptions\n// - Q lies on the BLS12-381 G2 twist curve\n// - Q is not the point at infinity\n//\n// # Completeness\n// During the fixed addition chain an intermediate point may become\n// P = (x, 0). Such a point is a 2-torsion element (order 2) and doubling it\n// yields the point at infinity, causing the doubling circuit to fail.\n//\n// The BLS12-381 G2 twist contains exactly three finite 2-torsion points\n// (all with y = (0,0)) plus the point at infinity.\n//\n// • If the input Q is already in the prime-order subgroup r,\n//   no 2-torsion point can ever be reached; the probability is exactly 0.\n// • For a uniformly random point of E(Fₚ²) the probability of hitting such an\n//   intermediate is 3 / |E(Fₚ²)| ≈ 2⁻⁷⁶¹, which is cryptographically\n//   negligible.\n//\n// Hence the routine is complete for all subgroup inputs and may only fail on\n// an astronomically small fraction of out-of-subgroup points.\n// This is acceptable because the function is invoked precisely for subgroup testing.\npub fn scalar_mul_by_bls12_381_seed(q: G2Point) -> G2Point {\n    let modulus = get_modulus(1);\n    // Triple.\n    let (z) = ec::run_DOUBLE_EC_POINT_G2_A_EQ_0_circuit(q, modulus);\n    let (z) = ec::run_ADD_EC_POINTS_G2_circuit(z, q, modulus);\n    // Double.\n    let (z) = ec::run_DOUBLE_EC_POINT_G2_A_EQ_0_circuit(z, modulus);\n    // Double and add.\n    let (z) = ec::run_DOUBLE_AND_ADD_EC_POINTS_G2_circuit(z, q, modulus);\n    // Double 2 times.\n    let (z) = double_n_times(z, 2, modulus);\n    // Double and add.\n    let (z) = ec::run_DOUBLE_AND_ADD_EC_POINTS_G2_circuit(z, q, modulus);\n    // Double 8 times.\n    let (z) = double_n_times(z, 8, modulus);\n    // Double and add.\n    let (z) = ec::run_DOUBLE_AND_ADD_EC_POINTS_G2_circuit(z, q, modulus);\n    // Double 31 times.\n    let (z) = double_n_times(z, 31, modulus);\n    // Double and add.\n    let (z) = ec::run_DOUBLE_AND_ADD_EC_POINTS_G2_circuit(z, q, modulus);\n    // Double 16 times.\n    let (z) = double_n_times(z, 16, modulus);\n    return z.negate(1); // Negative seed parameter.\n}\n\n\nfn double_n_times(p: G2Point, n: usize, modulus: CircuitModulus) -> (G2Point,) {\n    let mut res = p;\n    for _ in 0..n {\n        let (tmp) = ec::run_DOUBLE_EC_POINT_G2_A_EQ_0_circuit(res, modulus);\n        res = tmp;\n    }\n    return (res,);\n}\n#[cfg(test)]\nmod tests {\n    use garaga::definitions::BLS_G2_GENERATOR;\n    use super::{G2Point, G2PointZero, ec_mul, u384};\n    #[test]\n    fn test_ec_mul_g2() {\n        let g = BLS_G2_GENERATOR;\n\n        let s = 0;\n        let curve_index = 1;\n        let r = ec_mul(g, s, curve_index).unwrap();\n        assert!(r == G2PointZero::zero());\n\n        let s: u256 = 1;\n        let r = ec_mul(g, s, curve_index).unwrap();\n        assert!(r == g);\n\n        let s: u256 = 2;\n        let g2: G2Point = G2Point {\n            x0: u384 {\n                limb0: 0xf3611b78c952aacab827a053,\n                limb1: 0xe1ea1e1e4d00dbae81f14b0b,\n                limb2: 0xcc7ed5863bc0b995b8825e0e,\n                limb3: 0x1638533957d540a9d2370f17,\n            },\n            x1: u384 {\n                limb0: 0xb57ec72a6178288c47c33577,\n                limb1: 0x728114d1031e1572c6c886f6,\n                limb2: 0x730a124fd70662a904ba1074,\n                limb3: 0xa4edef9c1ed7f729f520e47,\n            },\n            y0: u384 {\n                limb0: 0x764bf3bd999d95d71e4c9899,\n                limb1: 0xbfe6bd221e47aa8ae88dece9,\n                limb2: 0x2b5256789a66da69bf91009c,\n                limb3: 0x468fb440d82b0630aeb8dca,\n            },\n            y1: u384 {\n                limb0: 0xa59c8967acdefd8b6e36ccf3,\n                limb1: 0x97003f7a13c308f5422e1aa0,\n                limb2: 0x3f887136a43253d9c66c4116,\n                limb3: 0xf6d4552fa65dd2638b36154,\n            },\n        };\n        let r = ec_mul(g, s, curve_index).unwrap();\n        assert!(r == g2);\n\n        let s: u256 = 3;\n        let g3: G2Point = G2Point {\n            x0: u384 {\n                limb0: 0x866f09d516020ef82324afae,\n                limb1: 0xa0c75df1c04d6d7a50a030fc,\n                limb2: 0xdccb23ae691ae54329781315,\n                limb3: 0x122915c824a0857e2ee414a3,\n            },\n            x1: u384 {\n                limb0: 0x937cc6d9d6a44aaa56ca66dc,\n                limb1: 0x5062650f8d251c96eb480673,\n                limb2: 0x7e0550ff2ac480905396eda5,\n                limb3: 0x9380275bbc8e5dcea7dc4dd,\n            },\n            y0: u384 {\n                limb0: 0x8b52fdf2455e44813ecfd892,\n                limb1: 0x326ac738fef5c721479dfd94,\n                limb2: 0xbc1a6f0136961d1e3b20b1a7,\n                limb3: 0xb21da7955969e61010c7a1a,\n            },\n            y1: u384 {\n                limb0: 0xb975b9edea56d53f23a0e849,\n                limb1: 0x714150a166bfbd6bcf6b3b58,\n                limb2: 0xa36cfe5f62a7e42e0bf1c1ed,\n                limb3: 0x8f239ba329b3967fe48d718,\n            },\n        };\n        let r = ec_mul(g, s, curve_index).unwrap();\n        assert!(r == g3);\n\n        let s = 0xffffffffffffffffffffffffffffffff;\n        let g4: G2Point = G2Point {\n            x0: u384 {\n                limb0: 0xae40a8b5aee95e54aedee2e7,\n                limb1: 0x6e0699501c5035eed8fc5162,\n                limb2: 0xbee76829b76806d1b6617bf8,\n                limb3: 0x5026c3305c1267922077393,\n            },\n            x1: u384 {\n                limb0: 0x10c08c4b0a70e02491c3c435,\n                limb1: 0x591ef738050b3ce067e2016f,\n                limb2: 0xdd6e0a179e2ce3c1399c5273,\n                limb3: 0xd5c9af9b97e94f90cb4aba3,\n            },\n            y0: u384 {\n                limb0: 0x93be53660cebb92c90d4fa87,\n                limb1: 0xfbf63ca94e1d0ffd65801863,\n                limb2: 0xd24fd9a06d72f1dc57f15f0a,\n                limb3: 0x100dbfd4f271378e85171313,\n            },\n            y1: u384 {\n                limb0: 0xb7296e587409163eecd3ef5d,\n                limb1: 0x8a065d6871fa185d15703e78,\n                limb2: 0x8a85fb95bb90eb5c7a0d81a9,\n                limb3: 0x157cf362e91a3c96640bd973,\n            },\n        };\n        let r = ec_mul(g, s, curve_index).unwrap();\n        assert!(r == g4);\n\n        //\n        let s = 0x100000000000000000000000000000001;\n        let g5: G2Point = G2Point {\n            x0: u384 {\n                limb0: 0x2131be4b061714de5a11407d,\n                limb1: 0xd41318f9bcade1fee985310b,\n                limb2: 0xb2669e638a7b78b7ba5c6751,\n                limb3: 0xa5284fb2911d4e2f445e714,\n            },\n            x1: u384 {\n                limb0: 0x712edcaf95ed642a8237e6fd,\n                limb1: 0xed6fccd7b64896ebb6ffb3d9,\n                limb2: 0xfcb88d23294a46657b8d2482,\n                limb3: 0x143ef485b660d37036fc18e2,\n            },\n            y0: u384 {\n                limb0: 0xaa5b7ff57bdbf47e6ab49121,\n                limb1: 0xc14cded56b4a44e022320616,\n                limb2: 0xdd5105feb3fdc5b10edb5afa,\n                limb3: 0x175d2c78538490ce02fcead8,\n            },\n            y1: u384 {\n                limb0: 0x23893f1bb0fdb0533584b05f,\n                limb1: 0x420d425d79dcd48b26d87814,\n                limb2: 0xc932fa90468e6b9dfd658cc9,\n                limb3: 0xe5fac70e9096e97adc6dd89,\n            },\n        };\n        let r = ec_mul(g, s, curve_index).unwrap();\n        assert!(r == g5);\n    }\n}\n\n"
  },
  {
    "path": "src/src/ec/generate_selector_code.py",
    "content": "# generate_selector_code.py\nimport os  # Import os module for path manipulation\nimport subprocess  # Import subprocess to run scarb fmt\nimport sys\nimport textwrap\n\n# Header content including necessary imports, constants, and impls\nCAIRO_HEADER = \"\"\"\\\nuse core::internal::bounded_int;\nuse core::internal::bounded_int::{AddHelper, BoundedInt, DivRemHelper, MulHelper, UnitInt, upcast};\n\nconst TWO: felt252 = 2;\nconst TWO_UI: UnitInt<TWO> = 2;\nconst FOUR_UI: UnitInt<FOUR> = 4;\nconst EIGHT_UI: UnitInt<EIGHT> = 8;\nconst TWO_NZ_TYPED: NonZero<UnitInt<TWO>> = 2;\nconst FOUR_NZ_TYPED: NonZero<UnitInt<FOUR>> = 4;\nconst POW128_DIV_2: felt252 = 0x7fffffffffffffffffffffffffffffff; // ((2^128-1) // 2)\nconst POW128_DIV_4: felt252 = 0x3fffffffffffffffffffffffffffffff; // ((2^128-1) // 4)\nconst POW128: felt252 = 0x100000000000000000000000000000000;\n\nconst FOUR: felt252 = 4;\nconst EIGHT: felt252 = 8;\n\n\npub type u15_bi = BoundedInt<0, { 15 }>;\npub type u12_bi = BoundedInt<0, { 12 }>;\npub type u1_bi = BoundedInt<0, { 1 }>;\npub type u2_bi = BoundedInt<0, { 2 }>;\npub type u3_bi = BoundedInt<0, { 3 }>;\npub type u4_bi = BoundedInt<0, { 4 }>;\npub type u5_bi = BoundedInt<0, { 5 }>;\npub type u6_bi = BoundedInt<0, { 6 }>;\npub type u7_bi = BoundedInt<0, { 7 }>;\npub type u8_bi = BoundedInt<0, { 8 }>;\n\nimpl DivRemU128By2 of DivRemHelper<BoundedInt<0, { POW128 - 1 }>, UnitInt<TWO>> {\n    type DivT = BoundedInt<0, { POW128_DIV_2 }>;\n    type RemT = u1_bi;\n}\n\nimpl DivRemU128By4 of DivRemHelper<BoundedInt<0, { POW128 - 1 }>, UnitInt<FOUR>> {\n    type DivT = BoundedInt<0, { POW128_DIV_4 }>;\n    type RemT = u3_bi;\n}\n\nimpl MulHelperBitBy2Impl of MulHelper<u1_bi, UnitInt<TWO>> {\n    type Result = u2_bi;\n}\n\nimpl MulHelperBitBy4Impl of MulHelper<u1_bi, UnitInt<FOUR>> {\n    type Result = u4_bi;\n}\n\nimpl MulHelperBit3By4Impl of MulHelper<u3_bi, UnitInt<FOUR>> {\n    type Result = u12_bi;\n}\n\nimpl MulHelperBitBy8Impl of MulHelper<u1_bi, UnitInt<EIGHT>> {\n    type Result = u8_bi;\n}\n\nimpl AddHelperU1ByU2Impl of AddHelper<u1_bi, u2_bi> {\n    type Result = u3_bi;\n}\n\nimpl AddHelperU3ByU4Impl of AddHelper<u3_bi, u4_bi> {\n    type Result = u7_bi;\n}\n\nimpl AddHelperU7ByU8Impl of AddHelper<u7_bi, u8_bi> {\n    type Result = u15_bi;\n}\n\nimpl AddHelperU3ByU12Impl of AddHelper<u3_bi, u12_bi> {\n    type Result = u15_bi;\n}\n\n\"\"\"  # Removed extra newline for cleaner concatenation\n\n\n# Define the new helper function as a string first\nCAIRO_HELPER_FUNCTION = \"\"\"\\\n#[inline(always)]\nfn _extract_and_calculate_selector_bit_inlined(\n    mut u1: BoundedInt<0, { POW128 - 1 }>,\n    mut u2: BoundedInt<0, { POW128 - 1 }>,\n    mut v1: BoundedInt<0, { POW128 - 1 }>,\n    mut v2: BoundedInt<0, { POW128 - 1 }>,\n) -> (BoundedInt<0, { POW128 - 1 }>, BoundedInt<0, { POW128 - 1 }>, BoundedInt<0, { POW128 - 1 }>, BoundedInt<0, { POW128 - 1 }>, u15_bi) {\n    let (qu1, u1b) = bounded_int::div_rem(u1, TWO_NZ_TYPED);\n    let (qu2, u2b) = bounded_int::div_rem(u2, TWO_NZ_TYPED);\n    let (qv1, v1b) = bounded_int::div_rem(v1, TWO_NZ_TYPED);\n    let (qv2, v2b) = bounded_int::div_rem(v2, TWO_NZ_TYPED);\n    u1 = upcast(qu1);\n    u2 = upcast(qu2);\n    v1 = upcast(qv1);\n    v2 = upcast(qv2);\n    let selector: u15_bi = bounded_int::add(bounded_int::add(bounded_int::add(u1b, bounded_int::mul(u2b, TWO_UI)),bounded_int::mul(v1b, FOUR_UI)),bounded_int::mul(v2b, EIGHT_UI));\n    return (u1, u2, v1, v2, selector);\n}\n\n#[inline(always)]\nfn _extract_and_calculate_selector_bit_inlined_fake_glv(\n    mut s1: BoundedInt<0, { POW128 - 1 }>,\n    mut s2: BoundedInt<0, { POW128 - 1 }>,\n) -> (\n    BoundedInt<0, { POW128 - 1 }>,\n    BoundedInt<0, { POW128 - 1 }>,\n    u15_bi,\n) {\n    let (qs1, s1b) = bounded_int::div_rem(s1, FOUR_NZ_TYPED);\n    let (qs2, s2b) = bounded_int::div_rem(s2, FOUR_NZ_TYPED);\n    s1 = upcast(qs1);\n    s2 = upcast(qs2);\n    let selector: u15_bi = bounded_int::add(\n        s1b,\n        bounded_int::mul(s2b, FOUR_UI),\n    );\n    return (s1, s2, selector);\n}\n\n\"\"\"\n\n\ndef generate_build_selectors_inlined(n_bits: int) -> str:\n    \"\"\"\n    Generates a complete Cairo module string containing the\n    build_selectors_inlined function, which calls an inlined helper\n    for its main loop.\n\n    Args:\n        n_bits: The number of bits, determining the loop count.\n\n    Returns:\n        A string containing the complete generated Cairo module code.\n\n    Raises:\n        ValueError: If n_bits is not positive.\n    \"\"\"\n    if n_bits <= 0:\n        raise ValueError(\"n_bits must be positive\")\n\n    code = [\n        \"#[inline(always)]\",\n        \"pub fn build_selectors_inlined(_u1: u128, _u2: u128, _v1: u128, _v2: u128) -> (Span<usize>, u128, u128, u128, u128) {\",\n        \"    // Generated code for n_bits = {}\".format(n_bits),\n        \"    let mut selectors: Array<usize> = array![];\",\n        \"\",\n        \"    let mut u1: BoundedInt<0, { POW128 - 1 }> = upcast(_u1);\",\n        \"    let mut u2: BoundedInt<0, { POW128 - 1 }> = upcast(_u2);\",\n        \"    let mut v1: BoundedInt<0, { POW128 - 1 }> = upcast(_v1);\",\n        \"    let mut v2: BoundedInt<0, { POW128 - 1 }> = upcast(_v2);\",\n        \"\",\n        \"    // Initial division and remainder to get LSBs\",\n        \"    let (qu1, u1lsb) = bounded_int::div_rem(u1, TWO_NZ_TYPED);\",\n        \"    let (qu2, u2lsb) = bounded_int::div_rem(u2, TWO_NZ_TYPED);\",\n        \"    let (qv1, v1lsb) = bounded_int::div_rem(v1, TWO_NZ_TYPED);\",\n        \"    let (qv2, v2lsb) = bounded_int::div_rem(v2, TWO_NZ_TYPED);\",\n        \"    u1 = upcast(qu1);\",\n        \"    u2 = upcast(qu2);\",\n        \"    v1 = upcast(qv1);\",\n        \"    v2 = upcast(qv2);\",\n        \"\",\n        f\"    // Inlined loop ({n_bits - 1} iterations)\",\n    ]\n\n    for i in range(n_bits - 2):\n        code.extend(\n            [\n                f\"    let (u1, u2, v1, v2, selector_{i}) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\",\n                f\"    selectors.append(upcast(selector_{i}));\",\n            ]\n        )\n\n    code.extend(\n        [\n            f\"    let (_, _, _, _, selector_{n_bits - 2}) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\",\n            f\"    selectors.append(upcast(selector_{n_bits - 2}));\",\n        ]\n    )\n\n    code.append(\n        \"    return (selectors.span(), upcast(u1lsb), upcast(u2lsb), upcast(v1lsb), upcast(v2lsb));\"\n    )\n    code.append(\"}\")\n\n    function_body_str = \"\\n\".join(code[1:])\n    indented_body = textwrap.indent(function_body_str, \"    \")\n    generated_function_code = code[0] + \"\\n\" + indented_body\n\n    # Combine header, helper function, and main generated function\n    return CAIRO_HEADER + \"\\n\" + CAIRO_HELPER_FUNCTION + \"\\n\" + generated_function_code\n\n\ndef generate_build_selectors_inlined_fake_glv(n_bits: int = 128) -> str:\n    \"\"\"\n    Generates a complete Cairo module string containing the\n    build_selectors_inlined function, which calls an inlined helper\n    for its main loop.\n\n    Args:\n        n_bits: The number of bits, determining the loop count.\n\n    Returns:\n        A string containing the complete generated Cairo module code.\n\n    Raises:\n        ValueError: If n_bits is not positive.\n    \"\"\"\n    if n_bits <= 0:\n        raise ValueError(\"n_bits must be positive\")\n\n    code = [\n        \"#[inline(always)]\",\n        \"pub fn build_selectors_inlined_fake_glv(_s1: u128, _s2: u128) -> (Span<usize>, u128, u128) {\",\n        \"    // Generated code for n_bits = {}\".format(n_bits),\n        \"    let mut selectors: Array<usize> = array![];\",\n        \"\",\n        \"    let mut s1: BoundedInt<0, { POW128 - 1 }> = upcast(_s1);\",\n        \"    let mut s2: BoundedInt<0, { POW128 - 1 }> = upcast(_s2);\",\n        \"\",\n        \"    // Initial division and remainder to get LSBs\",\n        \"    let (qs1, s1lsb) = bounded_int::div_rem(s1, TWO_NZ_TYPED);\",\n        \"    let (qs2, s2lsb) = bounded_int::div_rem(s2, TWO_NZ_TYPED);\",\n        \"    s1 = upcast(qs1);\",\n        \"    s2 = upcast(qs2);\",\n        \"\",\n        f\"    // Inlined loop (63 2-bit iterations for 128 bits)\",\n    ]\n\n    for i in range(63):\n        code.extend(\n            [\n                f\"    let (s1, s2, selector_{i}) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\",\n                f\"    selectors.append(upcast(selector_{i}));\",\n            ]\n        )\n        if i == 0:\n            code.extend(\n                [\n                    \"    // Correction for the last bits 2-1.\",\n                    \"    selectors.append(16);\",\n                ]\n            )\n    code.extend(\n        [\n            \"// At this point s1, and s2 are the MSB (last bit).\",\n            \"   if s1 != 0 {\",\n            \"    if s2 != 0 {\",\n            \"        // 11 T2 index : 10\",\n            \"        selectors.append(10);\",\n            \"    } else {\",\n            \"        // 10 T12 index : 6\",\n            \"        selectors.append(6);\",\n            \"    }\",\n            \"   } else {\",\n            \"    if s2 != 0 {\",\n            \"        // 01 T15 index : 9\",\n            \"        selectors.append(9);\",\n            \"    } else {\",\n            \"        // 00 T5 index : 5\",\n            \"        selectors.append(5);\",\n            \"    }\",\n            \"   }\",\n            \"    return (selectors.span(), upcast(s1lsb), upcast(s2lsb));\",\n        ]\n    )\n    code.append(\"}\")\n\n    function_body_str = \"\\n\".join(code[1:])\n    indented_body = textwrap.indent(function_body_str, \"    \")\n    generated_function_code = code[0] + \"\\n\" + indented_body\n\n    # Combine header, helper function, and main generated function\n    return generated_function_code\n\n\ndef generate_double_and_add_n(n_points: int) -> str:\n    \"\"\"\n    Generates Cairo code for a double_and_add function variant that processes\n    n_points additions.\n    Assumes necessary imports (G1Point, CircuitElement, CircuitInput, CircuitModulus,\n    circuit_add, circuit_sub, circuit_mul, circuit_inverse, etc.) are in scope.\n\n    Args:\n        n_points: The number of Q points to add (e.g., 1, 2, 4, 8).\n\n    Returns:\n        A string containing the generated Cairo function code.\n    \"\"\"\n    if n_points not in [1, 2, 4, 8]:  # Or check if it's a power of 2\n        raise ValueError(\n            \"n_points must be 1, 2, 4, or 8 for this specific generator pattern\"\n        )\n\n    func_name = f\"double_and_add_{n_points}\"\n    if n_points == 1:\n        func_name = \"double_and_add\"  # Match original naming for n=1\n\n    # Function signature\n    q_params = [f\"q{i}: G1Point\" for i in range(n_points)]\n    signature = f\"pub fn {func_name}(p: G1Point, {', '.join(q_params)}, modulus: CircuitModulus) -> G1Point {{\"\n\n    lines = [\"#[inline(always)]\", signature]\n\n    # CircuitElement inputs\n    lines.append(f\"    let px = CircuitElement::<CircuitInput<0>> {{}}; \")\n    lines.append(f\"    let py = CircuitElement::<CircuitInput<1>> {{}}; \")\n    for i in range(n_points):\n        lines.append(\n            f\"    let q{i}x = CircuitElement::<CircuitInput<{2 + 2*i}>> {{}}; \"\n        )\n        lines.append(\n            f\"    let q{i}y = CircuitElement::<CircuitInput<{3 + 2*i}>> {{}}; \"\n        )\n    lines.append(\"\")\n\n    current_px = \"px\"\n    current_py = \"py\"\n    next_tx = \"\"\n    next_ty = \"\"\n\n    # Doubling and Adding loop\n    for i in range(n_points):\n        lines.append(f\"    // --- Step {i+1}: (2 * CurrentP) + Q{i} --- \")\n        qix = f\"q{i}x\"\n        qiy = f\"q{i}y\"\n\n        # Compute λ1 = (qiy - current_py) / (qix - current_px)\n        lines.append(f\"    let num_lambda1_{i} = circuit_sub({qiy}, {current_py});\")\n        lines.append(f\"    let den_lambda1_{i} = circuit_sub({qix}, {current_px});\")\n        lines.append(\n            f\"    let lambda1_{i} = circuit_mul(num_lambda1_{i}, circuit_inverse(den_lambda1_{i}));\"\n        )\n        lines.append(\"\")\n\n        # Compute x2 = λ1² - current_px - qix\n        lines.append(f\"    let lambda1_sq_{i} = circuit_mul(lambda1_{i}, lambda1_{i});\")\n        lines.append(f\"    let x2_{i} = circuit_sub(lambda1_sq_{i}, {current_px});\")\n        lines.append(f\"    let x2_{i} = circuit_sub(x2_{i}, {qix});\")\n        lines.append(\"\")\n\n        # Compute -λ2 = λ1 + 2 * current_py / (x2 - current_px)\n        lines.append(f\"    let den_lambda2_{i} = circuit_sub(x2_{i}, {current_px});\")\n        lines.append(\n            f\"    let num_lambda2_{i} = circuit_add({current_py}, {current_py});\"\n        )\n        lines.append(\n            f\"    let term2_lambda2_{i} = circuit_mul(num_lambda2_{i}, circuit_inverse(den_lambda2_{i}));\"\n        )\n        lines.append(\n            f\"    let lambda2_{i} = circuit_add(lambda1_{i}, term2_lambda2_{i});\"\n        )\n        lines.append(\"\")\n\n        # Compute intermediate Tx = (-λ2)² - current_px - x2\n        lines.append(f\"    let lambda2_sq_{i} = circuit_mul(lambda2_{i}, lambda2_{i});\")\n        lines.append(\n            f\"    let tx_temp_{i} = circuit_sub(lambda2_sq_{i}, {current_px});\"\n        )\n        next_tx = f\"T{i+1}x\"\n        lines.append(f\"    let {next_tx} = circuit_sub(tx_temp_{i}, x2_{i});\")\n        lines.append(\"\")\n\n        # Compute intermediate Ty = -λ2 * (Tx - current_px) - current_py\n        lines.append(f\"    let tx_sub_px_{i} = circuit_sub({next_tx}, {current_px});\")\n        lines.append(f\"    let term1_ty_{i} = circuit_mul(lambda2_{i}, tx_sub_px_{i});\")\n        next_ty = f\"T{i+1}y\"\n        lines.append(\n            f\"    let {next_ty} = circuit_sub(term1_ty_{i}, {current_py});\"\n        )  # Note: lambda2 corresponds to -lambda2 in standard formulas\n        lines.append(\"\")\n\n        # Update current P for the next iteration\n        current_px = next_tx\n        current_py = next_ty\n\n    # Final outputs and evaluation\n    final_x = current_px\n    final_y = current_py\n    lines.append(f\"    let outputs = ({final_x}, {final_y})\")\n    lines.append(f\"        .new_inputs()\")\n    lines.append(f\"        .next_2(p.x)\")\n    lines.append(f\"        .next_2(p.y)\")\n    for i in range(n_points):\n        lines.append(f\"        .next_2(q{i}.x)\")\n        lines.append(f\"        .next_2(q{i}.y)\")\n    lines.append(f\"        .done_2()\")\n    lines.append(f\"        .eval(modulus)\")\n    lines.append(f\"        .expect('{func_name} failed');\")\n    lines.append(\"\")\n    lines.append(\n        f\"    return G1Point {{ x: outputs.get_output({final_x}), y: outputs.get_output({final_y}) }};\"\n    )\n    lines.append(\"}\")\n\n    # Join lines with proper indentation\n    # Indent lines starting from the third line (index 2)\n    indented_body = textwrap.indent(\"\\n\".join(lines[2:]), \"    \")\n    return \"\\n\".join(lines[:2]) + \"\\n\" + indented_body\n\n\nif __name__ == \"__main__\":\n    # Example usage: Generate selectors.cairo with n_bits=71 (default/example)\n    # To generate double_and_add_8, you might run this script differently\n    # or integrate argument parsing. For now, demonstrating selector generation.\n\n    # --- Selector Generation ---\n    try:\n        n_bits_arg = 73  # Default or example value\n        if len(sys.argv) > 1:\n            try:\n                n_bits_arg = int(sys.argv[1])\n            except ValueError:\n                print(\n                    \"Warning: Invalid integer for n_bits, using default {}. Usage: python ... <n_bits>\".format(\n                        n_bits_arg\n                    )\n                )\n\n        if n_bits_arg < 1:\n            raise ValueError(\"n_bits must be at least 1\")\n\n        # Generate the complete Cairo code for selectors\n        generated_cairo_code_selectors = generate_build_selectors_inlined(n_bits_arg)\n        generated_cairo_code_selectors_fake_glv = (\n            generate_build_selectors_inlined_fake_glv()\n        )\n        # Define the output file path\n        output_file_path_selectors = \"src/src/ec/selectors.cairo\"\n\n        # Write the generated code to the file\n        with open(output_file_path_selectors, \"w\") as f:\n            f.write(\n                generated_cairo_code_selectors\n                + \"\\n\\n\"\n                + generated_cairo_code_selectors_fake_glv\n            )\n\n        print(\n            f\"Successfully generated Cairo code to {output_file_path_selectors} for n_bits = {n_bits_arg}\"\n        )\n\n        # Format the generated file using scarb fmt\n        try:\n            print(\n                f\"Attempting to format {output_file_path_selectors} using scarb fmt...\"\n            )\n            process = subprocess.run(\n                [\"scarb\", \"fmt\", output_file_path_selectors],\n                check=True,\n                capture_output=True,\n                text=True,\n            )\n            print(\"Formatting successful.\")\n        except FileNotFoundError:\n            print(\n                \"Error: 'scarb' command not found. Please ensure Scarb is installed and in your PATH.\"\n            )\n        except subprocess.CalledProcessError as e:\n            print(f\"Error during formatting: {e}\")\n            print(f\"scarb fmt stdout:\\n{e.stdout}\")\n            print(f\"scarb fmt stderr:\\n{e.stderr}\")\n\n    except ValueError as e:\n        print(f\"Error generating selectors: {e}\")\n        # Decide if we should exit here or continue to double_and_add generation\n    except Exception as e:\n        print(f\"An unexpected error occurred during selector generation: {e}\")\n\n    print(\"\\n\" + \"-\" * 20 + \"\\n\")\n\n    # --- Double and Add 8 Generation (Example) ---\n    try:\n        n_points_to_gen = 8\n        print(f\"Generating Cairo code for double_and_add_{n_points_to_gen}...\")\n        generated_double_add_code = generate_double_and_add_n(n_points_to_gen)\n\n        # Print the generated code to console (or write to a file)\n        print(f\"\\n// --- Generated code for double_and_add_{n_points_to_gen} ---\")\n        print(\"// Add this function to your ec_ops.cairo or similar file.\")\n        print(\n            \"// Ensure necessary imports and structs (G1Point, CircuitElement, etc.) are available.\"\n        )\n        print(generated_double_add_code)\n\n        # Example: Write to a separate file\n        # output_file_path_double_add = f\"src/src/ec/double_and_add_{n_points_to_gen}_generated.cairo\"\n        # with open(output_file_path_double_add, 'w') as f:\n        #     f.write(\"// NOTE: This file needs imports like G1Point, circuit ops etc.\\n\")\n        #     f.write(generated_double_add_code)\n        # print(f\"\\nCode also written to {output_file_path_double_add}\")\n        # # Optionally format this file too\n        # try:\n        #     subprocess.run([\"scarb\", \"fmt\", output_file_path_double_add], check=True)\n        # except Exception as fmt_e:\n        #     print(f\"Could not format {output_file_path_double_add}: {fmt_e}\")\n\n    except ValueError as e:\n        print(f\"Error generating double_and_add: {e}\")\n    except Exception as e:\n        print(f\"An unexpected error occurred during double_and_add generation: {e}\")\n        sys.exit(1)\n"
  },
  {
    "path": "src/src/ec/pairing/groth16.cairo",
    "content": "/// This file contains utilities to verify a pairing check of the form :\n/// e(P1, Qf1) * e(P2, Qf2) * e(P3, Q3) * e(Pf4, Qf4) == 1, where\n/// - Qf1 and Qf2 are fixed known G2 points.\n/// - Pf4 and Qf4 is a fixed pair of G1 and G2 points.\n/// The result of e(Pf4, Qf4) is precomputed and provided to the circuit as a the miller loop result\n/// precomputed_miller_loop_result = MillerLoop(Pf4, Qf4) ∈ Gt/Fp12.\n///\n/// MultiPairing chekcs circuit in the \"3P_2F\" mode is used for triple pairs and double fixed G2\n/// points\n///\n/// Qf1 and Qf2 are represented by their pre-computed line functions for the specifc miller loop\n/// implementation.\n///\n/// Two functions are provided for BN254 and BLS12-381 respectively.\n/// To generate the lines functions and the precomputed miller loop result, refer to garaga's\n/// documentation.\n///\n/// Moreover, the file contains the full groth16 verification function for BN254 and BLS12-381.\nuse core::circuit::u384;\nuse core::num::traits::{One, Zero};\nuse core::option::Option;\nuse garaga::basic_field_ops;\nuse garaga::basic_field_ops::neg_mod_p;\nuse garaga::circuits::multi_pairing_check as mpc;\nuse garaga::circuits::multi_pairing_check::{\n    run_BLS12_381_INITIALIZE_MPCHECK_EXT_MLR_circuit,\n    run_BLS12_381_MP_CHECK_PREPARE_PAIRS_3P_circuit, run_BN254_INITIALIZE_MPCHECK_EXT_MLR_circuit,\n    run_BN254_MP_CHECK_PREPARE_PAIRS_1P_circuit,\n};\nuse garaga::definitions::{\n    BLS12_381_SEED_BITS_COMPRESSED, BN254_SEED_BITS_JY00_COMPRESSED, E12D, G1G2Pair, G1Point,\n    G2Line, G2Point, get_BN254_modulus, get_modulus, u288,\n};\nuse garaga::ec_ops::{G1PointTrait, ec_safe_add, msm_g1};\nuse garaga::ec_ops_g2::G2PointTrait;\nuse garaga::pairing_check::{\n    BLSProcessedPair, BNProcessedPair, MPCheckHintBLS12_381, MPCheckHintBN254,\n    compute_yInvXnegOverY,\n};\nuse garaga::utils::hashing;\nuse garaga::utils::hashing::{PoseidonState, TWO_POW_96};\n\n\n#[derive(Copy, Drop, Serde, Debug, PartialEq)]\npub struct Groth16ProofRaw {\n    pub a: G1Point,\n    pub b: G2Point,\n    pub c: G1Point,\n}\n\n// Groth16 proof structure, generic for both BN254 and BLS12-381.\n#[derive(Copy, Drop, Serde, Debug, PartialEq)]\npub struct Groth16Proof {\n    pub raw: Groth16ProofRaw,\n    pub public_inputs: Span<u256>,\n}\n\n// Groth16 verifying key structure, consisting of the two fixed G2 points and the precomputed\n// miller loop result miller_loop(alpha, beta)\n// Does not include gamma and delta lines inside, although it should be part of the key.\n// Does not include IC either as its size is not fixed and we want to write it as constant in smart\n// contracts.\n#[derive(Drop)]\npub struct Groth16VerifyingKey<T> {\n    pub alpha_beta_miller_loop_result: E12D<T>,\n    pub gamma_g2: G2Point,\n    pub delta_g2: G2Point,\n}\n\n#[generate_trait]\npub impl Groth16RawProofImpl of Groth16ProofRawTrait {\n    fn check_proof_points(self: @Groth16ProofRaw, curve_id: u32) {\n        self.a.assert_in_subgroup_excluding_infinity(curve_id);\n        self.b.assert_in_subgroup_excluding_infinity(curve_id);\n        self.c.assert_in_subgroup_excluding_infinity(curve_id);\n    }\n}\n\n#[inline]\nfn _groth16_get_vk_x(\n    proof: Groth16Proof, ic: Span<G1Point>, public_inputs_msm_hint: Span<felt252>, curve_id: u32,\n) -> G1Point {\n    let vk_x_x: G1Point = msm_g1(\n        ic.slice(1, ic.len() - 1), proof.public_inputs, curve_id, public_inputs_msm_hint,\n    );\n    let vk_x = ec_safe_add(vk_x_x, *ic.at(0), curve_id);\n    return vk_x;\n}\n\n\n// Verify a groth16 proof for BN254.\n// Parameters:\n// - proof: the proof to verify\n// - verification_key: the verifying key\n// - lines: the lines of the gamma and delta points. Must correspond to the ones of gamma and\n// delta.\n// - ic: the points in the VK corresponding to the public inputs. The length must correspond to the\n// number of public inputs in the proof.\n// - public_inputs_msm_hint: the MSM hint of the public inputs\n// - mpcheck_hint: the MPCheck hint of the proof\npub fn verify_groth16_bn254(\n    verification_key: Groth16VerifyingKey<u288>,\n    mut lines: Span<G2Line<u288>>,\n    ic: Span<G1Point>,\n    proof: Groth16Proof,\n    public_inputs_msm_hint: Span<felt252>,\n    mpcheck_hint: MPCheckHintBN254,\n) -> Result<Span<u256>, felt252> {\n    proof.raw.check_proof_points(0);\n    let vk_x = _groth16_get_vk_x(proof, ic, public_inputs_msm_hint, 0);\n    let check = multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result(\n        G1G2Pair { p: vk_x, q: verification_key.gamma_g2 },\n        G1G2Pair { p: proof.raw.c, q: verification_key.delta_g2 },\n        G1G2Pair { p: proof.raw.a.negate(0), q: proof.raw.b },\n        verification_key.alpha_beta_miller_loop_result,\n        lines,\n        mpcheck_hint,\n    );\n\n    match check {\n        Result::Ok(_) => Result::Ok(proof.public_inputs),\n        Result::Err(error) => Result::Err(error),\n    }\n}\n\n// Verify a groth16 proof for BN254.\n// Parameters:\n// - proof: the proof to verify\n// - verification_key: the verifying key\n// - lines: the lines of the gamma and delta points. Must correspond to the ones of gamma and\n// delta.\n// - ic: the points in the VK corresponding to the public inputs. The length must correspond to the\n// number of public inputs in the proof.\n// - public_inputs_msm_hint: the MSM hint of the public inputs\n// - mpcheck_hint: the MPCheck hint of the proof\npub fn verify_groth16_bls12_381(\n    proof: Groth16Proof,\n    verification_key: Groth16VerifyingKey<u384>,\n    mut lines: Span<G2Line<u384>>,\n    ic: Span<G1Point>,\n    public_inputs_msm_hint: Span<felt252>,\n    mpcheck_hint: MPCheckHintBLS12_381,\n) -> Result<Span<u256>, felt252> {\n    proof.raw.check_proof_points(1);\n    let vk_x = _groth16_get_vk_x(proof, ic, public_inputs_msm_hint, 1);\n\n    let check = multi_pairing_check_bls12_381_3P_2F_with_extra_miller_loop_result(\n        G1G2Pair { p: vk_x, q: verification_key.gamma_g2 },\n        G1G2Pair { p: proof.raw.c, q: verification_key.delta_g2 },\n        G1G2Pair { p: proof.raw.a.negate(1), q: proof.raw.b },\n        verification_key.alpha_beta_miller_loop_result,\n        lines,\n        mpcheck_hint,\n    );\n    match check {\n        Result::Ok(_) => Result::Ok(proof.public_inputs),\n        Result::Err(error) => Result::Err(error),\n    }\n}\n\n\n// This function verifies that\n// miller(P0, Q0) * miller(P1, Q1) * miller(P2, Q2) * precomputed_miller_loop_result *\n// hint.MillerLoopResultScalingFactor == hint.lambda_root ^ λ (1)\n// <=> e(P0, Q0) * e(P1, Q1) * e(P2, Q2) * final_exp(precomputed_miller_loop_result) == 1 (2)\n// It is based on the paper \"On Proving Pairings\" by Andrija Novakovic and Liam Eagen:\n// https://eprint.iacr.org/2024/640 to eliminate the cost of the final exponentiation.\n\n// Where :\n// - Q1 and Q2 are known G2 points, represented by their precomputed lines functions.\n// - λ = 6x + 2 + q - q^2 + q^3 with x the seed of the bn curve, and q the prime modulus of\n// the base field.\n// - MillerLoopResultScalingFactor is a factor lying in the Fq6 subfield such that it makes\n// miller(P0, Q0) * miller(P1, Q1) * miller(P2, Q2) * precomputed_miller_loop_result a lambda\n// residue.\n// To compute efficiently lambda_root^λ in (1) and take advantage of the squarings in the miller\n// function that is iterating over the bits of x, we initialize the miller loop result to\n// (1/hint.lambda_root), obtaining as an intermediate result in M = (f/hint.lambda_root^x),\n// where f = miller(P0, Q0) * miller(P1, Q1) * miller(P2, Q2) * precomputed_miller_loop_result.\n//\n// Finally, we verify that M * hint.MillerLoopResultScalingFactor * (1/hint.lambda_root)^q == 1,\n// using the Frobenius endomorphism for cheap exponentiation by q.\n\n// On top of this, all extension fields multiplications are verified and batched using\n// randomized extension field arithmetic.\n// For each bit of the miller loop (0, 1, -1, or 00), we compute the next miller loop intermediate,\n// depending on the bit case:\n//\n// - 0: f₍ᵢ₊₁₎ = fᵢ² * Πⱼ (Lᵢⱼ),\n// - (+1): f₍ᵢ₊₁₎ = fᵢ² * Πⱼ (Lᵢⱼ) * (1/lambda_root)\n// - (-1): f₍ᵢ₊₁₎ = fᵢ² * Πⱼ (Lᵢⱼ) * (lambda_root)\n// - 00: f₍ᵢ₊₂₎ = (fᵢ² * Πⱼ (Lᵢⱼ) )² * Πⱼ (L₍ᵢ₊₁₎ⱼ)\n//\n// where Lᵢⱼ is the j-th line of the i-th bit of the miller loop, evaluated at point Pⱼ.\n// Since we have 3 pairs, for bit \"0\", we have 3 lines, and for bit \"1\", we have 6 lines.\n// Instead of performing full extension field multiplications, we ask the caller to provide as hint\n// all the fᵢ as Fq12 elements inside hint.Ris.\n// We then hash (s₀, c₀, _) = Poseidon(Pair₀, Pair₁, Pair₂,\n// hint.MillerLoopResultScalingFactor, hint.Ris)\n// And we use the definition cᵢ₊₁ = cᵢ² to derive a random coefficient for all relations.\n// We also ask the prover to provide a quotient polynomial big_Q such that\n// Σᵢ cᵢ * (fᵢ₋₁)² * Πⱼ (Lᵢⱼ) = big_Q * P_irr + Σᵢ cᵢ * fᵢ , where P_irr\n// is the irreducible polynomial of the extension field.\n// From this, we derive a random point z = Poseidon(s0, hint.big_Q)\n// And finally verify that\n// Σᵢ cᵢ * (fᵢ₋₁(z))² * Πⱼ (Lᵢⱼ(z)) = big_Q(z) * P_irr(z) + Σᵢ cᵢ * fᵢ(z),\n// reusing fᵢ(z) evaluations in the next step.\n#[inline]\npub fn multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result(\n    pair0: G1G2Pair,\n    pair1: G1G2Pair,\n    pair2: G1G2Pair,\n    precomputed_miller_loop_result: E12D<u288>,\n    mut lines: Span<G2Line<u288>>,\n    mpcheck_hint: MPCheckHintBN254,\n) -> Result<bool, felt252> {\n    if mpcheck_hint.big_Q.len() != 190 {\n        return Result::Err('WRONG_BIG_Q_LEN');\n    }\n    if mpcheck_hint.Ris.len() != 34 {\n        return Result::Err('WRONG_RIS_LEN');\n    }\n\n    let modulus = get_BN254_modulus(); // BN254 prime field modulus\n    let (yInv_0, xNegOverY_0) = compute_yInvXnegOverY(pair0.p.x, pair0.p.y, modulus);\n    let (yInv_1, xNegOverY_1) = compute_yInvXnegOverY(pair1.p.x, pair1.p.y, modulus);\n    let (processed_pair2): (BNProcessedPair,) = run_BN254_MP_CHECK_PREPARE_PAIRS_1P_circuit(\n        pair2.p, pair2.q.y0, pair2.q.y1,\n    );\n\n    // Init sponge state == hades_permutation(0, 0, int.from_bytes(b\"MPCHECK_BN254_3P_2F\", \"big\"))\n    let hash_state = PoseidonState {\n        s0: 0x63dd5cf2946ee642aef494d22ee96f6e9168664a2f9c485a6084bd03289b83f,\n        s1: 0x22380e74267f899ea972f4f0fc327a181ed44093d778c9ad778437c7a41e418,\n        s2: 0x3c3e169429d0a04b80b97617d27b5b37b8e7734bf57faaffc841b8f2cfb6bc7,\n    };\n    // Hash Inputs\n    let hash_state = hashing::hash_G1G2Pair(pair0, hash_state);\n    let hash_state = hashing::hash_G1G2Pair(pair1, hash_state);\n    let hash_state = hashing::hash_G1G2Pair(pair2, hash_state);\n    let hash_state = hashing::hash_E12D_u288(mpcheck_hint.lambda_root, hash_state);\n    let hash_state = hashing::hash_E12D_u288(mpcheck_hint.lambda_root_inverse, hash_state);\n    let hash_state = hashing::hash_MillerLoopResultScalingFactor_u288(mpcheck_hint.w, hash_state);\n    // Hash Ris to obtain base random coefficient c1\n    let z: u384 = mpcheck_hint.z.into();\n    let (hash_state, mut evals) = basic_field_ops::eval_and_hash_E12D_u288_transcript(\n        mpcheck_hint.Ris, hash_state, z,\n    );\n    let hash_state = hashing::hash_E12D_one_u288(hash_state);\n\n    let hash_state = hashing::hash_E12D_u288(precomputed_miller_loop_result, hash_state);\n\n    let mut evals = evals.span();\n    let c_1: u384 = hash_state.s1.into();\n\n    // hades_permutation(0,0,int.from_bytes(b\"MPCHECK_BN254_3P_2F_II\", \"big\"))\n    let part_II_state = PoseidonState {\n        s0: 0xe973a7c87240c35289f5fdac2ea94f1848022f9499f37b4ab94172b6742649,\n        s1: 0x30d584d4a24b6615090c37103916bac45ed17401b63596cd0c29167e5fe1267,\n        s2: 0x2073c3846b613a00ccc615a8ac460c372105a979ddde4ef9d484c15aca2b874,\n    };\n    let hash_state = hashing::hash_u384(c_1, TWO_POW_96, part_II_state);\n\n    // Hash Q = (Σ_i c_i*Q_i) to obtain random evaluation point z\n    let z_felt252 = hashing::hash_u288_transcript(mpcheck_hint.big_Q.span(), hash_state).s0;\n\n    if z_felt252 != mpcheck_hint.z {\n        return Result::Err('WRONG_Z');\n    }\n\n    let (\n        c_of_z,\n        w_of_z,\n        c_inv_of_z,\n        LHS,\n        c_inv_frob_1_of_z,\n        c_frob_2_of_z,\n        c_inv_frob_3_of_z,\n        mlr_of_z,\n    ): (u384, u384, u384, u384, u384, u384, u384, u384) =\n        run_BN254_INITIALIZE_MPCHECK_EXT_MLR_circuit(\n        mpcheck_hint.lambda_root,\n        z,\n        mpcheck_hint.w,\n        mpcheck_hint.lambda_root_inverse,\n        precomputed_miller_loop_result,\n    );\n\n    // init bit for bn254 is 0:\n    // let mut Ris = mpcheck_hint.Ris;\n    let R_0_of_Z = *evals.pop_front().unwrap();\n    let [l0, l1] = (*lines.multi_pop_front::<2>().unwrap()).unbox();\n\n    let (_Q2, _lhs) = mpc::run_BN254_MP_CHECK_INIT_BIT_3P_2F_circuit(\n        yInv_0,\n        xNegOverY_0,\n        l0,\n        yInv_1,\n        xNegOverY_1,\n        l1,\n        processed_pair2.yInv,\n        processed_pair2.xNegOverY,\n        pair2.q,\n        R_0_of_Z,\n        z,\n        c_inv_of_z,\n        c_1,\n        LHS,\n    );\n\n    let mut Q2 = _Q2;\n    let mut LHS = _lhs;\n    let mut f_i_of_z = R_0_of_Z;\n\n    // rest of miller loop\n    let mut bits = BN254_SEED_BITS_JY00_COMPRESSED.span();\n    while let Option::Some(bit) = bits.pop_front() {\n        let R_i_of_z = *evals.pop_front().unwrap();\n        let (_Q2, _LHS): (G2Point, u384) = match *bit {\n            0 => {\n                let [l0, l1, l2, l3] = (*lines.multi_pop_front::<4>().unwrap()).unbox();\n                mpc::run_BN254_MP_CHECK_BIT00_3P_2F_circuit(\n                    yInv_0,\n                    xNegOverY_0,\n                    l0,\n                    l1,\n                    yInv_1,\n                    xNegOverY_1,\n                    l2,\n                    l3,\n                    processed_pair2.yInv,\n                    processed_pair2.xNegOverY,\n                    Q2,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    z,\n                    c_1,\n                )\n            },\n            1 |\n            2 => {\n                // 1 -> 10\n                // 2 -> -10\n                let [l0, l1, l2, l3, l4, l5] = (*lines.multi_pop_front::<6>().unwrap()).unbox();\n                let (Q_or_Q_neg, c_or_c_inv_of_z) = match (*bit - 1) {\n                    0 => (pair2.q, c_inv_of_z),\n                    _ => (\n                        G2Point {\n                            x0: pair2.q.x0,\n                            x1: pair2.q.x1,\n                            y0: processed_pair2.QyNeg0,\n                            y1: processed_pair2.QyNeg1,\n                        },\n                        c_of_z,\n                    ),\n                };\n                mpc::run_BN254_MP_CHECK_BIT10_3P_2F_circuit(\n                    yInv_0,\n                    xNegOverY_0,\n                    l0,\n                    l1,\n                    l2,\n                    yInv_1,\n                    xNegOverY_1,\n                    l3,\n                    l4,\n                    l5,\n                    processed_pair2.yInv,\n                    processed_pair2.xNegOverY,\n                    Q2,\n                    Q_or_Q_neg,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    c_or_c_inv_of_z,\n                    z,\n                    c_1,\n                )\n            },\n            _ => {\n                // 3 -> 01, 4 -> 0-1\n                let [l0, l1, l2, l3, l4, l5] = (*lines.multi_pop_front::<6>().unwrap()).unbox();\n                let (Q_or_Q_neg, c_or_c_inv_of_z) = match (*bit - 3) {\n                    0 => (pair2.q, c_inv_of_z),\n                    _ => (\n                        G2Point {\n                            x0: pair2.q.x0,\n                            x1: pair2.q.x1,\n                            y0: processed_pair2.QyNeg0,\n                            y1: processed_pair2.QyNeg1,\n                        },\n                        c_of_z,\n                    ),\n                };\n                mpc::run_BN254_MP_CHECK_BIT01_3P_2F_circuit(\n                    yInv_0,\n                    xNegOverY_0,\n                    l0,\n                    l1,\n                    l2,\n                    yInv_1,\n                    xNegOverY_1,\n                    l3,\n                    l4,\n                    l5,\n                    processed_pair2.yInv,\n                    processed_pair2.xNegOverY,\n                    Q2,\n                    Q_or_Q_neg,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    c_or_c_inv_of_z,\n                    z,\n                    c_1,\n                )\n            },\n        };\n        Q2 = _Q2;\n        LHS = _LHS;\n        f_i_of_z = R_i_of_z;\n    }\n    let R_n_minus_2_of_z = *evals.pop_front().unwrap();\n    let R_n_minus_1_of_z: u384 = One::one();\n\n    let [l0, l1, l2, l3] = (*lines.multi_pop_front::<4>().unwrap()).unbox();\n    let (check) = mpc::run_BN254_MP_CHECK_FINALIZE_3P_2F_EXT_MLR_circuit(\n        yInv_0,\n        xNegOverY_0,\n        l0,\n        l1,\n        yInv_1,\n        xNegOverY_1,\n        l2,\n        l3,\n        pair2.q,\n        processed_pair2.yInv,\n        processed_pair2.xNegOverY,\n        Q2,\n        R_n_minus_2_of_z,\n        R_n_minus_1_of_z,\n        c_1,\n        w_of_z,\n        z,\n        c_inv_frob_1_of_z,\n        c_frob_2_of_z,\n        c_inv_frob_3_of_z,\n        LHS,\n        f_i_of_z,\n        mpcheck_hint.big_Q,\n        mlr_of_z,\n    );\n\n    // Checks that LHS = Q(z) * P_irr(z)\n    match check.is_zero() {\n        true => Result::Ok(true),\n        false => Result::Err('FINAL_CHECK_FAILED'),\n    }\n}\n\n\n// This function verifies that\n// miller(P0, Q0) * miller(P1, Q1) * miller(P2, Q2) * precomputed_miller_loop_result *\n// hint.MillerLoopResultScalingFactor == hint.lambda_root ^ λ (1)\n// <=> e(P0, Q0) * e(P1, Q1) * e(P2, Q2) * final_exp(precomputed_miller_loop_result) == 1 (2)\n// It is based on the paper \"On Proving Pairings\" by Andrija Novakovic and Liam Eagen:\n// https://eprint.iacr.org/2024/640 to eliminate the cost of the final exponentiation.\n\n// Where :\n// - Q1 and Q2 are known G2 points, represented by their precomputed lines functions.\n// - λ = -x + q, with x the seed of the bls curve, and q the prime modulus of the base field.\n// - MillerLoopResultScalingFactor is a factor lying in the Fq6 subfield such that it makes\n// miller(P0, Q0) * miller(P1, Q1) * miller(P2, Q2) * precomputed_miller_loop_result a lambda\n// residue.\n// To compute efficiently lambda_root^λ in (1) and take advantage of the squarings in the miller\n// function that is iterating over the bits of x, we initialize the miller loop result to\n// (1/hint.lambda_root), obtaining as an intermediate result in M = (f/hint.lambda_root^x),\n// where f = miller(P0, Q0) * miller(P1, Q1) * miller(P2, Q2) * precomputed_miller_loop_result.\n//\n// Finally, we verify that M * hint.MillerLoopResultScalingFactor * (1/hint.lambda_root)^q == 1,\n// using the Frobenius endomorphism for cheap exponentiation by q.\n\n// On top of this, all extension fields multiplications are verified and batched using\n// randomized extension field arithmetic.\n// For each bit of the miller loop (0, 1, or 00), we compute the next miller loop intermediate,\n// depending on the bit case:\n//\n// - 0: f₍ᵢ₊₁₎ = fᵢ² * Πⱼ (Lᵢⱼ),\n// - 1: f₍ᵢ₊₁₎ = fᵢ² * Πⱼ (Lᵢⱼ) * (1/lambda_root)\n// - 00: f₍ᵢ₊₂₎ = (fᵢ² * Πⱼ (Lᵢⱼ) )² * Πⱼ (L₍ᵢ₊₁₎ⱼ)\n//\n// where Lᵢⱼ is the j-th line of the i-th bit of the miller loop.\n// Since we have 3 pairs, for bit \"0\", we have 3 lines, and for bit \"1\", we have 6 lines.\n// Instead of performing full extension field multiplications, we ask the caller to provide as hint\n// all the fᵢ as Fq12 elements inside hint.Ris.\n// We then hash (s₀, c₀, _) = Poseidon(Pair₀, Pair₁, Pair₂,\n// hint.MillerLoopResultScalingFactor, hint.Ris)\n// And we use the definition cᵢ₊₁ = cᵢ² to derive a random coefficient for all relations.\n\n// We also ask the prover to provide a quotient polynomial big_Q such that\n// Σᵢ cᵢ * (fᵢ₋₁)² * Πⱼ (Lᵢⱼ) = big_Q * P_irr + Σᵢ cᵢ * fᵢ , where P_irr\n// is the irreducible polynomial of the extension field.\n// From this, we derive a random point z = Poseidon(s0, hint.big_Q)\n// And finally verify that\n// Σᵢ cᵢ * (fᵢ₋₁(z))² * Πⱼ (Lᵢⱼ(z)) = big_Q(z) * P_irr(z) + Σᵢ cᵢ * fᵢ(z),\n// reusing fᵢ(z) evaluations in the next step.\n#[inline]\npub fn multi_pairing_check_bls12_381_3P_2F_with_extra_miller_loop_result(\n    pair0: G1G2Pair,\n    pair1: G1G2Pair,\n    pair2: G1G2Pair,\n    precomputed_miller_loop_result: E12D<u384>,\n    mut lines: Span<G2Line<u384>>,\n    hint: MPCheckHintBLS12_381,\n) -> Result<bool, felt252> {\n    if hint.big_Q.len() != 105 {\n        return Result::Err('WRONG_BIG_Q_LEN');\n    }\n    if hint.Ris.len() != 35 {\n        return Result::Err('WRONG_RIS_LEN');\n    }\n\n    let (\n        processed_pair0, processed_pair1, processed_pair2,\n    ): (BLSProcessedPair, BLSProcessedPair, BLSProcessedPair) =\n        run_BLS12_381_MP_CHECK_PREPARE_PAIRS_3P_circuit(\n        pair0.p, pair1.p, pair2.p,\n    );\n\n    // Init sponge state :\n    // >>> hades_permutation(0, 0, int.from_bytes(b\"MPCHECK_BLS12_381_3P_2F\", \"big\"))\n    let hash_state = PoseidonState {\n        s0: 0x2cdfabd228064e9e12d17c6b3c59bff3db6b737403a03e9b5f5e9f53409097b,\n        s1: 0x37fe3519c1f442f6e45b0abd23d975f1937365ed27e08019d58d011269ecac2,\n        s2: 0x2eec9f98b93d8f14927c5de60386404306a0e55acb61076c1ad847b456efe0e,\n    };\n\n    // Hash Inputs.\n    let hash_state = hashing::hash_G1G2Pair(pair0, hash_state);\n    let hash_state = hashing::hash_G1G2Pair(pair1, hash_state);\n    let hash_state = hashing::hash_G1G2Pair(pair2, hash_state);\n    let hash_state = hashing::hash_E12D_u384(hint.lambda_root_inverse, hash_state);\n    let hash_state = hashing::hash_MillerLoopResultScalingFactor_u384(hint.w, hash_state);\n    // Hash Ris to obtain base random coefficient c0\n    let z: u384 = hint.z.into();\n    let (hash_state, mut evals) = basic_field_ops::eval_and_hash_E12D_u384_transcript(\n        hint.Ris, hash_state, z,\n    );\n    let hash_state = hashing::hash_E12D_one_u384(hash_state);\n\n    let hash_state = hashing::hash_E12D_u384(precomputed_miller_loop_result, hash_state);\n\n    let mut evals = evals.span();\n\n    let c_1: u384 = hash_state.s1.into();\n\n    // hades_permutation(0,0,int.from_bytes(b\"MPCHECK_BLS12_381_3P_2F_II\", \"big\"))\n    let part_II_state = PoseidonState {\n        s0: 0x145195a6df395d777bf1be74601510cbf888ca638394385ade2f0bd91396a34,\n        s1: 0x1f144143bab9bbc63c8376ae067c0b15ae4611b1aa725dd654cd41c25e0c20f,\n        s2: 0x25df9ac859e9e9db19383887d5c27d94b619b6c8d1de37b8e713cb653f7b55f,\n    };\n    let hash_state = hashing::hash_u384(c_1, TWO_POW_96, part_II_state);\n\n    // Hash Q = (Σ_i c_i*Q_i) to obtain random evaluation point z\n    let z_felt252 = hashing::hash_u384_transcript(hint.big_Q.span(), hash_state).s0;\n\n    if z_felt252 != hint.z {\n        return Result::Err('WRONG_Z');\n    }\n\n    // Precompute lambda root evaluated in Z:\n    let (conjugate_c_inv_of_z, w_of_z, c_inv_of_z_frob_1, mlr_of_z): (u384, u384, u384, u384) =\n        run_BLS12_381_INITIALIZE_MPCHECK_EXT_MLR_circuit(\n        hint.lambda_root_inverse, z, hint.w, precomputed_miller_loop_result,\n    );\n\n    // init bit for bls is 1:\n    let R_0_of_Z = *evals.pop_front().unwrap();\n    let [l0, l1, l2, l3] = (*lines.multi_pop_front::<4>().unwrap()).unbox();\n    let (_Q2, _lhs) = mpc::run_BLS12_381_MP_CHECK_INIT_BIT_3P_2F_circuit(\n        processed_pair0.yInv,\n        processed_pair0.xNegOverY,\n        l0,\n        l1,\n        processed_pair1.yInv,\n        processed_pair1.xNegOverY,\n        l2,\n        l3,\n        processed_pair2.yInv,\n        processed_pair2.xNegOverY,\n        pair2.q,\n        R_0_of_Z,\n        z,\n        conjugate_c_inv_of_z,\n    );\n\n    let mut Q2 = _Q2;\n    let mut LHS = _lhs;\n    let mut f_i_of_z = R_0_of_Z;\n    // Σ_i (Π_k (c_i*P_k(z)))  = (Σ_i c_i*Q_i(z)) * P(z) + Σ_i c_i * R_i(z)\n    // <=> Σ_i (Π_k (c_i*P_k(z))) - Σ_i c_i * R_i(z) = (Σ_i c_i*Q_i(z)) * P(z)\n    // => LHS = Σ_i (Π_k (c_i*P_k(z))) - Σ_i c_i * R_i(z)\n\n    // rest of miller loop\n    let mut bits = BLS12_381_SEED_BITS_COMPRESSED.span();\n\n    while let Option::Some(bit) = bits.pop_front() {\n        let R_i_of_z = *evals.pop_front().unwrap();\n        let (_Q2, _LHS): (G2Point, u384) = match *bit {\n            0 => {\n                let [l0, l1] = (*lines.multi_pop_front::<2>().unwrap()).unbox();\n                mpc::run_BLS12_381_MP_CHECK_BIT0_3P_2F_circuit(\n                    processed_pair0.yInv,\n                    processed_pair0.xNegOverY,\n                    l0,\n                    processed_pair1.yInv,\n                    processed_pair1.xNegOverY,\n                    l1,\n                    processed_pair2.yInv,\n                    processed_pair2.xNegOverY,\n                    Q2,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    z,\n                    c_1,\n                )\n            },\n            1 => {\n                let [l0, l1, l2, l3] = (*lines.multi_pop_front::<4>().unwrap()).unbox();\n                mpc::run_BLS12_381_MP_CHECK_BIT1_3P_2F_circuit(\n                    processed_pair0.yInv,\n                    processed_pair0.xNegOverY,\n                    l0,\n                    l1,\n                    processed_pair1.yInv,\n                    processed_pair1.xNegOverY,\n                    l2,\n                    l3,\n                    processed_pair2.yInv,\n                    processed_pair2.xNegOverY,\n                    Q2,\n                    pair2.q,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    conjugate_c_inv_of_z,\n                    z,\n                    c_1,\n                )\n            },\n            _ => {\n                let [l0, l1, l2, l3] = (*lines.multi_pop_front::<4>().unwrap()).unbox();\n                mpc::run_BLS12_381_MP_CHECK_BIT00_3P_2F_circuit(\n                    processed_pair0.yInv,\n                    processed_pair0.xNegOverY,\n                    l0,\n                    l1,\n                    processed_pair1.yInv,\n                    processed_pair1.xNegOverY,\n                    l2,\n                    l3,\n                    processed_pair2.yInv,\n                    processed_pair2.xNegOverY,\n                    Q2,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    z,\n                    c_1,\n                )\n            },\n        };\n        Q2 = _Q2;\n        LHS = _LHS;\n        f_i_of_z = R_i_of_z;\n    }\n\n    let R_last_of_z: u384 = One::one();\n\n    // Checks that LHS = Q(z) * P_irr(z)\n    let (check) = mpc::run_BLS12_381_MP_CHECK_FINALIZE_3P_EXT_MLR_circuit(\n        R_last_of_z, c_1, w_of_z, z, c_inv_of_z_frob_1, LHS, *hint.Ris.at(34), hint.big_Q, mlr_of_z,\n    );\n\n    match check.is_zero() {\n        true => Result::Ok(true),\n        false => Result::Err('FINAL_CHECK_FAILED'),\n    }\n}\n\npub fn conjugate_e12D(self: E12D<u384>, curve_index: usize) -> E12D<u384> {\n    let modulus = get_modulus(curve_index);\n    E12D {\n        w0: self.w0,\n        w1: neg_mod_p(self.w1, modulus),\n        w2: self.w2,\n        w3: neg_mod_p(self.w3, modulus),\n        w4: self.w4,\n        w5: neg_mod_p(self.w5, modulus),\n        w6: self.w6,\n        w7: neg_mod_p(self.w7, modulus),\n        w8: self.w8,\n        w9: neg_mod_p(self.w9, modulus),\n        w10: self.w10,\n        w11: neg_mod_p(self.w11, modulus),\n    }\n}\n"
  },
  {
    "path": "src/src/ec/pairing/pairing_check.cairo",
    "content": "use core::array::{ArrayTrait, SpanTrait};\nuse core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitModulus, CircuitOutputsTrait,\n    EvalCircuitTrait, circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse core::num::traits::{One, Zero};\nuse core::option::Option;\n\n/// This file contains utilities to verify a pairing check of the form :\n/// e(P1, Qf1) * e(P2, Qf2) == 1, where Qf1 and Qf2 are fixed known points. (2P_2F circuits are used\n/// for double pairs and double fixed G2 points)\n/// Qf1 and Qf2 are represented by their pre-computed line functions for the specifc miller loop\n/// implementation.\n/// Two functions are provided for BN254 and BLS12-381 respectively.\n/// To generate the lines functions, you can use garaga's python backend.\n\nuse core::option::OptionTrait;\nuse garaga::basic_field_ops;\nuse garaga::circuits::multi_pairing_check::{\n    run_BLS12_381_INITIALIZE_MPCHECK_circuit, run_BLS12_381_MP_CHECK_BIT00_2P_2F_circuit,\n    run_BLS12_381_MP_CHECK_BIT0_2P_2F_circuit, run_BLS12_381_MP_CHECK_BIT1_2P_2F_circuit,\n    run_BLS12_381_MP_CHECK_FINALIZE_2P_circuit, run_BLS12_381_MP_CHECK_INIT_BIT_2P_2F_circuit,\n    run_BN254_INITIALIZE_MPCHECK_circuit, run_BN254_MP_CHECK_BIT00_2P_2F_circuit,\n    run_BN254_MP_CHECK_BIT01_2P_2F_circuit, run_BN254_MP_CHECK_BIT10_2P_2F_circuit,\n    run_BN254_MP_CHECK_FINALIZE_2P_2F_circuit, run_BN254_MP_CHECK_INIT_BIT_2P_2F_circuit,\n};\nuse garaga::definitions::{\n    BLS12_381_SEED_BITS_COMPRESSED, BN254_SEED_BITS_JY00_COMPRESSED, E12D, G1G2Pair, G2Line,\n    get_BLS12_381_modulus, get_BN254_modulus, u288,\n};\nuse garaga::utils::hashing;\nuse garaga::utils::hashing::{PoseidonState, TWO_POW_96};\nuse crate::core::circuit::AddInputResultTrait2;\n\n\n#[derive(Copy, Drop, Debug, PartialEq, Serde)]\npub struct MillerLoopResultScalingFactor<T> {\n    pub w0: T,\n    pub w2: T,\n    pub w4: T,\n    pub w6: T,\n    pub w8: T,\n    pub w10: T,\n}\n\n#[derive(Drop, Serde, Debug)]\npub struct MPCheckHintBN254 {\n    pub lambda_root: E12D<u288>,\n    pub lambda_root_inverse: E12D<u288>,\n    pub w: MillerLoopResultScalingFactor<u288>,\n    pub Ris: Span<E12D<u288>>,\n    pub big_Q: Array<u288>,\n    pub z: felt252,\n}\n\n#[derive(Drop, Debug, PartialEq)]\npub struct MPCheckHintBLS12_381 {\n    pub lambda_root_inverse: E12D<u384>,\n    pub w: MillerLoopResultScalingFactor<u384>,\n    pub Ris: Span<E12D<u384>>,\n    pub big_Q: Array<u384>,\n    pub z: felt252,\n}\n\n// From a G1G2Pair(Px, Py, Qx0, Qx1, Qy0, Qy1), returns (1/Py, -Px/Py)\n#[derive(Drop, Debug, PartialEq)]\npub struct BLSProcessedPair {\n    pub yInv: u384,\n    pub xNegOverY: u384,\n}\n\n// From a G1G2Pair(Px, Py, Qx0, Qx1, Qy0, Qy1), returns (1/Py, -Px/Py,-Qy0, -Qy1)\n#[derive(Drop, Debug, PartialEq)]\npub struct BNProcessedPair {\n    pub yInv: u384,\n    pub xNegOverY: u384,\n    pub QyNeg0: u384,\n    pub QyNeg1: u384,\n}\n\n// From a point (x, y), returns (1/y, -x/y)\npub fn compute_yInvXnegOverY(x: u384, y: u384, modulus: CircuitModulus) -> (u384, u384) {\n    let in1 = CE::<CI<0>> {};\n    let in2 = CE::<CI<1>> {};\n    let in3 = CE::<CI<2>> {};\n    let yInv = circuit_inverse(in3);\n    let xNeg = circuit_sub(in1, in2);\n    let xNegOverY = circuit_mul(xNeg, yInv);\n\n    let outputs = (yInv, xNegOverY)\n        .new_inputs()\n        .next_2([0, 0, 0, 0])\n        .next_2(x)\n        .next_2(y)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    return (outputs.get_output(yInv), outputs.get_output(xNegOverY));\n}\n#[inline(always)]\npub fn multi_pairing_check_bn254_2P_2F(\n    pair0: G1G2Pair, pair1: G1G2Pair, mut lines: Span<G2Line<u288>>, hint: MPCheckHintBN254,\n) -> Result<bool, felt252> {\n    if hint.big_Q.len() != 145 {\n        return Result::Err('WRONG_BIG_Q_LEN');\n    }\n    if hint.Ris.len() != 34 {\n        return Result::Err('WRONG_RIS_LEN');\n    }\n\n    let modulus = get_BN254_modulus(); // BN254 prime field modulus\n    let (yInv_0, xNegOverY_0) = compute_yInvXnegOverY(pair0.p.x, pair0.p.y, modulus);\n    let (yInv_1, xNegOverY_1) = compute_yInvXnegOverY(pair1.p.x, pair1.p.y, modulus);\n\n    // Init sponge state\n    // >>> hades_permutation(0, 0, int.from_bytes(b\"MPCHECK_BN254_2P_2F\", \"big\"))\n\n    let hash_state = PoseidonState {\n        s0: 0x1a0eeac356472db3074d1ca6bb7bbb60fa9f0d53b34ef38a4eddde21b332b28,\n        s1: 0x2783a4227674921675bfa12e30fda0dad992bb9be9785908ac1338b14018182,\n        s2: 0x5d4b7659197d4e54258057765dd5e6dbf106bb3bd5a559fe1951303901e2e81,\n    };\n    // Hash Inputs\n    let hash_state = hashing::hash_G1G2Pair(pair0, hash_state);\n    let hash_state = hashing::hash_G1G2Pair(pair1, hash_state);\n    let hash_state = hashing::hash_E12D_u288(hint.lambda_root, hash_state);\n    let hash_state = hashing::hash_E12D_u288(hint.lambda_root_inverse, hash_state);\n    let hash_state = hashing::hash_MillerLoopResultScalingFactor_u288(hint.w, hash_state);\n    // Hash Ris to obtain base random coefficient c0 and evals\n\n    let z: u384 = hint.z.into();\n\n    let (hash_state, mut evals) = basic_field_ops::eval_and_hash_E12D_u288_transcript(\n        hint.Ris, hash_state, z,\n    );\n\n    // Last Ri is known to be 1:\n    let hash_state = hashing::hash_E12D_one_u288(hash_state);\n\n    let mut evals = evals.span();\n    let c_1: u384 = hash_state.s1.into();\n\n    // hades_permutation(0,0,int.from_bytes(b\"MPCHECK_BN254_2P_2F_II\", \"big\"))\n    let part_II_state = PoseidonState {\n        s0: 0x61306dbf52f13cce66776e642d58f27a1dc58ae7172565dd1d1555ac3bfbede,\n        s1: 0x5895a3e8e579ff7c9a9bda84916ace794bc48e009dc6c76104a127111aef035,\n        s2: 0x5ff2c406897ea02acecbbc03b4718c8e4a42cc5bb60d738ad60a58918aaa868,\n    };\n\n    let hash_state = hashing::hash_u384(c_1, TWO_POW_96, part_II_state);\n\n    // Hash Q = (Σ_i c_i*Q_i) to obtain random evaluation point z\n    let z_felt252 = hashing::hash_u288_transcript(hint.big_Q.span(), hash_state).s0;\n\n    if z_felt252 != hint.z {\n        return Result::Err('WRONG_Z');\n    }\n\n    let (\n        c_of_z, w_of_z, c_inv_of_z, LHS, c_inv_frob_1_of_z, c_frob_2_of_z, c_inv_frob_3_of_z,\n    ): (u384, u384, u384, u384, u384, u384, u384) =\n        run_BN254_INITIALIZE_MPCHECK_circuit(\n        hint.lambda_root, z, hint.w, hint.lambda_root_inverse,\n    );\n\n    let R_0_of_Z = *evals.pop_front().unwrap();\n    let [l0, l1] = (*lines.multi_pop_front::<2>().unwrap()).unbox();\n    let (_lhs) = run_BN254_MP_CHECK_INIT_BIT_2P_2F_circuit(\n        yInv_0, xNegOverY_0, l0, yInv_1, xNegOverY_1, l1, R_0_of_Z, z, c_inv_of_z, c_1, LHS,\n    );\n\n    let mut LHS = _lhs;\n    let mut f_i_of_z = R_0_of_Z;\n\n    // rest of miller loop\n    let mut bits = BN254_SEED_BITS_JY00_COMPRESSED.span();\n\n    while let Option::Some(bit) = bits.pop_front() {\n        // println!(\"bit {}\", *bit);\n        let R_i_of_z = *evals.pop_front().unwrap();\n        let (_LHS): (u384,) = match *bit {\n            0 => {\n                let [l0, l1, l2, l3] = (*lines.multi_pop_front::<4>().unwrap()).unbox();\n                run_BN254_MP_CHECK_BIT00_2P_2F_circuit(\n                    yInv_0,\n                    xNegOverY_0,\n                    l0,\n                    l1,\n                    yInv_1,\n                    xNegOverY_1,\n                    l2,\n                    l3,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    z,\n                    c_1,\n                )\n            },\n            1 |\n            2 => {\n                let [l0, l1, l2, l3, l4, l5] = (*lines.multi_pop_front::<6>().unwrap()).unbox();\n                let c_or_c_inv_of_z = match (*bit - 1) {\n                    0 => c_inv_of_z,\n                    _ => c_of_z,\n                };\n                run_BN254_MP_CHECK_BIT10_2P_2F_circuit(\n                    yInv_0,\n                    xNegOverY_0,\n                    l0,\n                    l1,\n                    l2,\n                    yInv_1,\n                    xNegOverY_1,\n                    l3,\n                    l4,\n                    l5,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    c_or_c_inv_of_z,\n                    z,\n                    c_1,\n                )\n            },\n            _ => {\n                // 3 -> 01, 4 -> 10\n                let [l0, l1, l2, l3, l4, l5] = (*lines.multi_pop_front::<6>().unwrap()).unbox();\n                let c_or_c_inv_of_z = match (*bit - 3) {\n                    0 => c_inv_of_z,\n                    _ => c_of_z,\n                };\n                run_BN254_MP_CHECK_BIT01_2P_2F_circuit(\n                    yInv_0,\n                    xNegOverY_0,\n                    l0,\n                    l1,\n                    l2,\n                    yInv_1,\n                    xNegOverY_1,\n                    l3,\n                    l4,\n                    l5,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    c_or_c_inv_of_z,\n                    z,\n                    c_1,\n                )\n            },\n        };\n        LHS = _LHS;\n        f_i_of_z = R_i_of_z;\n    }\n    let R_n_minus_2_of_z = *evals.pop_front().unwrap();\n    let R_n_minus_1_of_z: u384 = One::one();\n    let [l0, l1, l2, l3] = (*lines.multi_pop_front::<4>().unwrap()).unbox();\n    let (check) = run_BN254_MP_CHECK_FINALIZE_2P_2F_circuit(\n        yInv_0,\n        xNegOverY_0,\n        l0,\n        l1,\n        yInv_1,\n        xNegOverY_1,\n        l2,\n        l3,\n        R_n_minus_2_of_z,\n        R_n_minus_1_of_z,\n        c_1,\n        w_of_z,\n        z,\n        c_inv_frob_1_of_z,\n        c_frob_2_of_z,\n        c_inv_frob_3_of_z,\n        LHS,\n        f_i_of_z,\n        hint.big_Q,\n    );\n\n    match check.is_zero() {\n        true => Result::Ok(true),\n        false => Result::Err('FINAL_CHECK_FAILED'),\n    }\n}\n\n#[inline(always)]\npub fn multi_pairing_check_bls12_381_2P_2F(\n    pair0: G1G2Pair, pair1: G1G2Pair, mut lines: Span<G2Line<u384>>, hint: MPCheckHintBLS12_381,\n) -> Result<bool, felt252> {\n    if hint.big_Q.len() != 81 {\n        return Result::Err('WRONG_BIG_Q_LEN');\n    }\n    if hint.Ris.len() != 35 {\n        return Result::Err('WRONG_RIS_LEN');\n    }\n\n    let modulus = get_BLS12_381_modulus(); // BLS12_381 prime field modulus\n    let (yInv_0, xNegOverY_0) = compute_yInvXnegOverY(pair0.p.x, pair0.p.y, modulus);\n    let (yInv_1, xNegOverY_1) = compute_yInvXnegOverY(pair1.p.x, pair1.p.y, modulus);\n\n    // Init sponge state\n    // >>> hades_permutation(0, 0, int.from_bytes(b\"MPCHECK_BLS12_381_2P_2F\", \"big\"))\n    let hash_state = PoseidonState {\n        s0: 0x38fc487c6a5413cb099f102857912e93570c7a3628b34722ec1fff8cefa6f5f,\n        s1: 0x3cec4f7f551bccf7cbfbfd86cde672f2104b89d5443707c7ca7aca8196f4d0f,\n        s2: 0x5ff52024b20f5cd082b347b5455a15a265874a39983c38ed544090b750ee718,\n    };\n\n    // Hash Inputs\n\n    let hash_state = hashing::hash_G1G2Pair(pair0, hash_state);\n    let hash_state = hashing::hash_G1G2Pair(pair1, hash_state);\n    let hash_state = hashing::hash_E12D_u384(hint.lambda_root_inverse, hash_state);\n    let hash_state = hashing::hash_MillerLoopResultScalingFactor_u384(hint.w, hash_state);\n    // Hash Ris to obtain base random coefficient c0 & evaluate all Ris at z (given in advance).\n    let z: u384 = hint.z.into();\n    let (hash_state, mut evals) = basic_field_ops::eval_and_hash_E12D_u384_transcript(\n        hint.Ris, hash_state, z,\n    );\n    // Last Ri is known to be 1:\n    let hash_state = hashing::hash_E12D_one_u384(hash_state);\n\n    let mut evals = evals.span();\n\n    let c_1: u384 = hash_state.s1.into();\n\n    // hades_permutation(0,0,int.from_bytes(b\"MPCHECK_BLS12_381_2P_2F_II\", \"big\"))\n    let part_II_state = PoseidonState {\n        s0: 0x68148a435d9f7b0d7bfa42c9fa6b8c0441fd8a741fc024c547445b689d294b9,\n        s1: 0x3076763e35be672b2cc79293b3d9c3899d8b4f083b484ae6d591b8d582e3471,\n        s2: 0x29153e786b3c7f75891c98d853cf2db3125f434b25f2b38fb8be850009713d0,\n    };\n    let hash_state = hashing::hash_u384(c_1, TWO_POW_96, part_II_state);\n\n    // Hash Q = (Σ_i c_i*Q_i) to obtain random evaluation point z\n    let z_felt252 = hashing::hash_u384_transcript(hint.big_Q.span(), hash_state).s0;\n    if z_felt252 != hint.z {\n        return Result::Err('WRONG_Z');\n    }\n\n    // Precompute lambda root evaluated in Z:\n    let (conjugate_c_inv_of_z, w_of_z, c_inv_of_z_frob_1): (u384, u384, u384) =\n        run_BLS12_381_INITIALIZE_MPCHECK_circuit(\n        hint.lambda_root_inverse, z, hint.w,\n    );\n\n    // init bit for bls is 1:\n    let R_0_of_Z = *evals.pop_front().unwrap();\n    let [l0, l1, l2, l3] = (*lines.multi_pop_front::<4>().unwrap()).unbox();\n    let (_lhs) = run_BLS12_381_MP_CHECK_INIT_BIT_2P_2F_circuit(\n        yInv_0, xNegOverY_0, l0, l1, yInv_1, xNegOverY_1, l2, l3, R_0_of_Z, z, conjugate_c_inv_of_z,\n    );\n\n    let mut LHS = _lhs;\n    let mut f_i_of_z = R_0_of_Z;\n\n    // Σ_i (Π_k (c_i*P_k(z)))  = (Σ_i c_i*Q_i(z)) * P(z) + Σ_i c_i * R_i(z)\n    // <=> Σ_i (Π_k (c_i*P_k(z))) - Σ_i c_i * R_i(z) = (Σ_i c_i*Q_i(z)) * P(z)\n    // => LHS = Σ_i (Π_k (c_i*P_k(z))) - Σ_i c_i * R_i(z)\n\n    // rest of miller loop\n    let mut bits = BLS12_381_SEED_BITS_COMPRESSED.span();\n\n    while let Option::Some(bit) = bits.pop_front() {\n        let R_i_of_z = *evals.pop_front().unwrap();\n        let (_LHS): (u384,) = match *bit {\n            0 => {\n                let [l0, l1] = (*lines.multi_pop_front::<2>().unwrap()).unbox();\n                run_BLS12_381_MP_CHECK_BIT0_2P_2F_circuit(\n                    yInv_0,\n                    xNegOverY_0,\n                    l0,\n                    yInv_1,\n                    xNegOverY_1,\n                    l1,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    z,\n                    c_1,\n                )\n            },\n            1 => {\n                let [l0, l1, l2, l3] = (*lines.multi_pop_front::<4>().unwrap()).unbox();\n                run_BLS12_381_MP_CHECK_BIT1_2P_2F_circuit(\n                    yInv_0,\n                    xNegOverY_0,\n                    l0,\n                    l1,\n                    yInv_1,\n                    xNegOverY_1,\n                    l2,\n                    l3,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    conjugate_c_inv_of_z,\n                    z,\n                    c_1,\n                )\n            },\n            _ => {\n                let [l0, l1, l2, l3] = (*lines.multi_pop_front::<4>().unwrap()).unbox();\n                run_BLS12_381_MP_CHECK_BIT00_2P_2F_circuit(\n                    yInv_0,\n                    xNegOverY_0,\n                    l0,\n                    l1,\n                    yInv_1,\n                    xNegOverY_1,\n                    l2,\n                    l3,\n                    LHS,\n                    f_i_of_z,\n                    R_i_of_z,\n                    z,\n                    c_1,\n                )\n            },\n        };\n        LHS = _LHS;\n        f_i_of_z = R_i_of_z;\n    }\n\n    let R_last_of_z: u384 = One::one();\n    let (check,) = run_BLS12_381_MP_CHECK_FINALIZE_2P_circuit(\n        R_last_of_z, c_1, w_of_z, z, c_inv_of_z_frob_1, LHS, *hint.Ris.at(34), hint.big_Q,\n    );\n\n    match check.is_zero() {\n        true => Result::Ok(true),\n        false => Result::Err('FINAL_CHECK_FAILED'),\n    }\n}\n"
  },
  {
    "path": "src/src/ec/pairing/single_pairing_tower.cairo",
    "content": "use core::circuit::u384;\nuse core::num::traits::{One, Zero};\nuse garaga::circuits::multi_pairing_check::run_BN254_MP_CHECK_PREPARE_PAIRS_1P_circuit;\nuse garaga::circuits::tower_circuits as tw;\nuse garaga::definitions::curves::{BLS12_381_SEED_BITS, BN254_SEED_BITS_NAF, get_BLS12_381_modulus};\nuse garaga::definitions::{BNProcessedPair, E12T, G1Point, G2Point};\nuse garaga::ec::pairing::pairing_check::compute_yInvXnegOverY;\n\n\npub fn miller_loop_bn254_tower(P: G1Point, Q: G2Point) -> (E12T,) {\n    let bits = BN254_SEED_BITS_NAF.span();\n\n    let (processed_pair): (BNProcessedPair,) = run_BN254_MP_CHECK_PREPARE_PAIRS_1P_circuit(\n        P, Q.y0, Q.y1,\n    );\n\n    let mut Mi: E12T = One::one();\n    let mut Qi = Q;\n\n    for bit in bits {\n        let (_Qi, _Mi) = match *bit {\n            0 => {\n                tw::run_BN254_TOWER_MILLER_BIT0_1P_circuit(\n                    processed_pair.yInv, processed_pair.xNegOverY, Qi, Mi,\n                )\n            },\n            1 => {\n                tw::run_BN254_TOWER_MILLER_BIT1_1P_circuit(\n                    processed_pair.yInv, processed_pair.xNegOverY, Qi, Q, Mi,\n                )\n            },\n            _ => {\n                tw::run_BN254_TOWER_MILLER_BIT1_1P_circuit(\n                    processed_pair.yInv,\n                    processed_pair.xNegOverY,\n                    Qi,\n                    G2Point {\n                        x0: Q.x0, x1: Q.x1, y0: processed_pair.QyNeg0, y1: processed_pair.QyNeg1,\n                    },\n                    Mi,\n                )\n            },\n        };\n        Qi = _Qi;\n        Mi = _Mi;\n    }\n\n    tw::run_BN254_TOWER_MILLER_FINALIZE_BN_1P_circuit(\n        Q, processed_pair.yInv, processed_pair.xNegOverY, Qi, Mi,\n    )\n}\n\npub fn expt_bn254_tower(X: E12T) -> (E12T,) {\n    // Step 1\n    let (t3) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(X);\n    // Step 2\n    let (t5) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t3);\n    // Step 3\n    let (result) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t5);\n    // Step 4\n    let (t0) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(result);\n    // Step 5\n    let (t2) = tw::run_BN254_E12T_MUL_circuit(X, t0);\n    // Step 6\n    let (t0) = tw::run_BN254_E12T_MUL_circuit(t3, t2);\n    // Step 7\n    let (t1) = tw::run_BN254_E12T_MUL_circuit(X, t0);\n    // Step 8\n    let (t4) = tw::run_BN254_E12T_MUL_circuit(result, t2);\n    // Step 9\n    let (t6) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t2);\n    // Step 10\n    let (t1) = tw::run_BN254_E12T_MUL_circuit(t0, t1);\n    // Step 11\n    let (t0) = tw::run_BN254_E12T_MUL_circuit(t3, t1);\n    // Step 17\n    let mut t6 = t6;\n    for _ in 0..6_u8 {\n        let (_t6) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t6);\n        t6 = _t6;\n    }\n    // Step 18\n    let (t5) = tw::run_BN254_E12T_MUL_circuit(t5, t6);\n    // Step 19\n    let (mut t5) = tw::run_BN254_E12T_MUL_circuit(t4, t5);\n    // Step 26\n    for _ in 0..7_u8 {\n        let (_t5) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t5);\n        t5 = _t5;\n    }\n    // Step 27\n    let (mut t4) = tw::run_BN254_E12T_MUL_circuit(t4, t5);\n    // Step 35\n    for _ in 0..8_u8 {\n        let (_t4) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t4);\n        t4 = _t4;\n    }\n    // Step 36\n    let (t4) = tw::run_BN254_E12T_MUL_circuit(t0, t4);\n    // Step 37\n    let (mut t3) = tw::run_BN254_E12T_MUL_circuit(t3, t4);\n    // Step 43\n    for _ in 0..6_u8 {\n        let (_t3) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t3);\n        t3 = _t3;\n    }\n    // Step 44\n    let (mut t2) = tw::run_BN254_E12T_MUL_circuit(t2, t3);\n    // Step 52\n    for _ in 0..8_u8 {\n        let (_t2) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t2);\n        t2 = _t2;\n    }\n    // Step 53\n    let (mut t2) = tw::run_BN254_E12T_MUL_circuit(t0, t2);\n\n    // Step 59\n    for _ in 0..6_u8 {\n        let (_t2) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t2);\n        t2 = _t2;\n    }\n\n    // Step 60\n    let (mut t2) = tw::run_BN254_E12T_MUL_circuit(t0, t2);\n    // Step 70\n    for _ in 0..10_u8 {\n        let (_t2) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t2);\n        t2 = _t2;\n    }\n    // Step 71\n    let (mut t1) = tw::run_BN254_E12T_MUL_circuit(t1, t2);\n    // Step 77\n    for _ in 0..6_u8 {\n        let (_t1) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t1);\n        t1 = _t1;\n    }\n    // Step 78\n    let (t0) = tw::run_BN254_E12T_MUL_circuit(t0, t1);\n    // Step 79\n    let (result) = tw::run_BN254_E12T_MUL_circuit(result, t0);\n\n    return (result,);\n}\n\npub fn final_exp_bn254_tower(M: E12T) -> E12T {\n    let curve_id = 0;\n    let (t0) = fp12_conjugate(M, curve_id);\n    let (result) = tw::run_BN254_E12T_INVERSE_circuit(M);\n    let (t0) = tw::run_BN254_E12T_MUL_circuit(t0, result);\n    let (result) = tw::run_BN254_E12T_FROBENIUS_SQUARE_circuit(t0);\n    let (result) = tw::run_BN254_E12T_MUL_circuit(result, t0);\n\n    // Hard part\n    let (t0) = expt_bn254_tower(result);\n    let (t0) = fp12_conjugate(t0, curve_id);\n    let (t0) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t0);\n    let (t1) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t0);\n    let (t1) = tw::run_BN254_E12T_MUL_circuit(t0, t1);\n    let (t2) = expt_bn254_tower(t1);\n    let (t2) = fp12_conjugate(t2, curve_id);\n    let (t3) = fp12_conjugate(t1, curve_id);\n    let (t1) = tw::run_BN254_E12T_MUL_circuit(t2, t3);\n    let (t3) = tw::run_BN254_E12T_CYCLOTOMIC_SQUARE_circuit(t2);\n    let (t4) = expt_bn254_tower(t3);\n    let (t4) = tw::run_BN254_E12T_MUL_circuit(t1, t4);\n    let (t3) = tw::run_BN254_E12T_MUL_circuit(t0, t4);\n    let (t0) = tw::run_BN254_E12T_MUL_circuit(t2, t4);\n    let (t0) = tw::run_BN254_E12T_MUL_circuit(result, t0);\n    let (t2) = tw::run_BN254_E12T_FROBENIUS_circuit(t3);\n    let (t0) = tw::run_BN254_E12T_MUL_circuit(t2, t0);\n    let (t2) = tw::run_BN254_E12T_FROBENIUS_SQUARE_circuit(t4);\n    let (t0) = tw::run_BN254_E12T_MUL_circuit(t2, t0);\n    let (t2) = fp12_conjugate(result, curve_id);\n    let (t2) = tw::run_BN254_E12T_MUL_circuit(t2, t3);\n    let (t2) = tw::run_BN254_E12T_FROBENIUS_CUBE_circuit(t2);\n    let (result) = tw::run_BN254_E12T_MUL_circuit(t2, t0);\n\n    result\n}\n\n#[inline]\npub fn fp12_conjugate(X: E12T, curve_id: usize) -> (E12T,) {\n    let (b0a0, b0a1, b1a0, b1a1, b2a0, b2a1) = tw::run_FP6_NEG_circuit(\n        X.c1b0a0, X.c1b0a1, X.c1b1a0, X.c1b1a1, X.c1b2a0, X.c1b2a1, curve_id,\n    );\n    (\n        E12T {\n            c0b0a0: X.c0b0a0,\n            c0b0a1: X.c0b0a1,\n            c0b1a0: X.c0b1a0,\n            c0b1a1: X.c0b1a1,\n            c0b2a0: X.c0b2a0,\n            c0b2a1: X.c0b2a1,\n            c1b0a0: b0a0,\n            c1b0a1: b0a1,\n            c1b1a0: b1a0,\n            c1b1a1: b1a1,\n            c1b2a0: b2a0,\n            c1b2a1: b2a1,\n        },\n    )\n}\n\npub fn final_exp_bls12_381_tower(M: E12T) -> E12T {\n    let result = M;\n    let (t0) = fp12_conjugate(M, 1);\n    let (result) = tw::run_BLS12_381_E12T_INVERSE_circuit(result);\n    let (t0) = tw::run_BLS12_381_E12T_MUL_circuit(t0, result);\n    let (result) = tw::run_BLS12_381_E12T_FROBENIUS_SQUARE_circuit(t0);\n    let (result) = tw::run_BLS12_381_E12T_MUL_circuit(result, t0);\n\n    let (t0) = tw::run_BLS12_381_E12T_CYCLOTOMIC_SQUARE_circuit(result);\n    let (t1) = expt_half_bls12_381_tower(t0);\n    let (t2) = fp12_conjugate(result, 1);\n    let (t1) = tw::run_BLS12_381_E12T_MUL_circuit(t1, t2);\n    let (t2) = expt_bls12_381_tower(t1);\n    let (t1) = fp12_conjugate(t1, 1);\n    let (t1) = tw::run_BLS12_381_E12T_MUL_circuit(t1, t2);\n    let (t2) = expt_bls12_381_tower(t1);\n    let (t1) = tw::run_BLS12_381_E12T_FROBENIUS_circuit(t1);\n    let (t1) = tw::run_BLS12_381_E12T_MUL_circuit(t1, t2);\n    let (result) = tw::run_BLS12_381_E12T_MUL_circuit(result, t0);\n    let (t0) = expt_bls12_381_tower(t1);\n    let (t2) = expt_bls12_381_tower(t0);\n    let (t0) = tw::run_BLS12_381_E12T_FROBENIUS_SQUARE_circuit(t1);\n    let (t1) = fp12_conjugate(t1, 1);\n    let (t1) = tw::run_BLS12_381_E12T_MUL_circuit(t1, t2);\n    let (t1) = tw::run_BLS12_381_E12T_MUL_circuit(t1, t0);\n    let (result) = tw::run_BLS12_381_E12T_MUL_circuit(result, t1);\n    result\n}\n\n/// Dedicated structure for compressed elements in the cyclotomic subgroup G_phi ⊂ Fq^12\n///\n/// Background and intent (Observation 47):\n/// - Elements in the cyclotomic subgroup admit the Karabina compression where two of the\n///   Fp6 components (c0.b0 and c1.b1 in our tower representation) can be recovered from the\n///   remaining ones. Squaring in this form is cheaper and is implemented by the circuit\n///   `run_BLS12_381_E12T_CYCLO_SQUARE_COMPRESSED_circuit` that takes eight Fp limbs.\n/// - We represent such compressed elements explicitly instead of overloading `E12T`.\n///   This avoids confusing unused fields and makes the intent of “compressed cyclotomic\n///   value” explicit at the type level.\n///\n/// Representation details:\n/// - `E12T` is modeled as Fp12 via the tower (Fp2 → Fp6 → Fp12) with coordinates\n///   `c{i}.b{j}.a{k}`. The compressed form stores exactly the eight limbs required by the\n///   Karabina formulas: c0.b1, c0.b2, c1.b0 and c1.b2 (each over Fp2 → a0,a1).\n/// - The fields `c0.b0` and `c1.b1` are intentionally absent; they are reconstructed during\n///   decompression using `DECOMP_KARABINA_*` circuits.\n/// - Validity invariant: values of this type must come from the cyclotomic subgroup; using\n///   arbitrary Fp12 elements here is undefined.\n///\n/// Usage:\n/// - Squaring: feed the eight limbs directly to\n///   `run_BLS12_381_E12T_CYCLO_SQUARE_COMPRESSED_circuit`.\n/// - Multiplication or any generic operation: first call\n///   `decompress_karabina_bls12_381_compressed` to recover a full `E12T`.\n/// - Zero-branch: when `c1b2 == 0`, decompression uses the cheaper \"I_Z\" path.\n///\n/// Security/correctness notes:\n/// - Decompression returns `One` when the Karabina t1 component is zero, matching the\n///   standard algorithmic edge case.\n/// - The helper `to_compressed(E12T)` merely copies the eight required limbs; it does not\n///   check subgroup membership.\n#[derive(Copy, Drop, Debug, PartialEq)]\npub struct CompressedE12T {\n    pub c0b1a0: u384,\n    pub c0b1a1: u384,\n    pub c0b2a0: u384,\n    pub c0b2a1: u384,\n    pub c1b0a0: u384,\n    pub c1b0a1: u384,\n    pub c1b2a0: u384,\n    pub c1b2a1: u384,\n}\n\n/// Convert a full `E12T` (assumed in G_phi) into its Karabina compressed form by\n/// extracting the eight required limbs (c0.b1, c0.b2, c1.b0, c1.b2).\n#[inline]\nfn to_compressed(X: E12T) -> (CompressedE12T,) {\n    (\n        CompressedE12T {\n            c0b1a0: X.c0b1a0,\n            c0b1a1: X.c0b1a1,\n            c0b2a0: X.c0b2a0,\n            c0b2a1: X.c0b2a1,\n            c1b0a0: X.c1b0a0,\n            c1b0a1: X.c1b0a1,\n            c1b2a0: X.c1b2a0,\n            c1b2a1: X.c1b2a1,\n        },\n    )\n}\n\n/// Decompress a Karabina-compressed cyclotomic element back to `E12T`.\n///\n/// The implementation mirrors the two-step Karabina decompression and branches between\n/// the “I_Z” and “I_NZ” circuits depending on whether `c1b2 == 0`.\npub fn decompress_karabina_bls12_381_compressed(X: CompressedE12T) -> (E12T,) {\n    let (t0a0, t0a1, t1a0, t1a1) = match (X.c1b2a0.is_zero() && X.c1b2a1.is_zero()) {\n        true => {\n            let (t0a0, t0a1) = tw::run_BLS12_381_E12T_DECOMP_KARABINA_I_Z_circuit(\n                X.c0b1a0, X.c0b1a1, X.c1b2a0, X.c1b2a1,\n            );\n            (t0a0, t0a1, X.c0b2a0, X.c0b2a1)\n        },\n        false => {\n            tw::run_BLS12_381_E12T_DECOMP_KARABINA_I_NZ_circuit(\n                X.c0b1a0, X.c0b1a1, X.c0b2a0, X.c0b2a1, X.c1b0a0, X.c1b0a1, X.c1b2a0, X.c1b2a1,\n            )\n        },\n    };\n\n    if t1a0.is_zero() && t1a1.is_zero() {\n        return (One::one(),);\n    }\n\n    let (zc0b0a0, zc0b0a1, zc1b1a0, zc1b1a1) = tw::run_BLS12_381_E12T_DECOMP_KARABINA_II_circuit(\n        t0a0,\n        t0a1,\n        t1a0,\n        t1a1,\n        X.c0b1a0,\n        X.c0b1a1,\n        X.c0b2a0,\n        X.c0b2a1,\n        X.c1b0a0,\n        X.c1b0a1,\n        X.c1b2a0,\n        X.c1b2a1,\n    );\n\n    (\n        E12T {\n            c0b0a0: zc0b0a0,\n            c0b0a1: zc0b0a1,\n            c0b1a0: X.c0b1a0,\n            c0b1a1: X.c0b1a1,\n            c0b2a0: X.c0b2a0,\n            c0b2a1: X.c0b2a1,\n            c1b0a0: X.c1b0a0,\n            c1b0a1: X.c1b0a1,\n            c1b1a0: zc1b1a0,\n            c1b1a1: zc1b1a1,\n            c1b2a0: X.c1b2a0,\n            c1b2a1: X.c1b2a1,\n        },\n    )\n}\n\n/// Apply `times` Karabina cyclotomic squarings on a value in the compressed domain and\n/// return the decompressed `E12T`.\n///\n/// This keeps the element compressed between squarings (cheap), and only performs the\n/// final decompression once at the end when a full `E12T` is needed for multiplication or\n/// other generic operations.\nfn cyclo_square_compressed_then_decompress_k(X: E12T, times: u32) -> (E12T,) {\n    let (mut C) = to_compressed(X);\n    for _ in 0..times {\n        let (_c0b1a0, _c0b1a1, _c0b2a0, _c0b2a1, _c1b0a0, _c1b0a1, _c1b2a0, _c1b2a1) =\n            tw::run_BLS12_381_E12T_CYCLO_SQUARE_COMPRESSED_circuit(\n            C.c0b1a0, C.c0b1a1, C.c0b2a0, C.c0b2a1, C.c1b0a0, C.c1b0a1, C.c1b2a0, C.c1b2a1,\n        );\n        C =\n            CompressedE12T {\n                c0b1a0: _c0b1a0,\n                c0b1a1: _c0b1a1,\n                c0b2a0: _c0b2a0,\n                c0b2a1: _c0b2a1,\n                c1b0a0: _c1b0a0,\n                c1b0a1: _c1b0a1,\n                c1b2a0: _c1b2a0,\n                c1b2a1: _c1b2a1,\n            };\n    }\n    decompress_karabina_bls12_381_compressed(C)\n}\npub fn expt_half_bls12_381_tower(M: E12T) -> (E12T,) {\n    let (t0) = cyclo_square_compressed_then_decompress_k(M, 15_u32);\n    let (t1) = cyclo_square_compressed_then_decompress_k(t0, 32_u32);\n\n    let (mut result) = tw::run_BLS12_381_E12T_MUL_circuit(t0, t1);\n\n    let (t1) = cyclo_square_compressed_then_decompress_k(t1, 9_u32);\n    let (result) = tw::run_BLS12_381_E12T_MUL_circuit(result, t1);\n    let (t1) = cyclo_square_compressed_then_decompress_k(t1, 3_u32);\n    let (result) = tw::run_BLS12_381_E12T_MUL_circuit(result, t1);\n    let (t1) = cyclo_square_compressed_then_decompress_k(t1, 2_u32);\n    let (result) = tw::run_BLS12_381_E12T_MUL_circuit(result, t1);\n    let (t1) = tw::run_BLS12_381_E12T_CYCLOTOMIC_SQUARE_circuit(t1);\n    let (result) = tw::run_BLS12_381_E12T_MUL_circuit(result, t1);\n    let (result) = fp12_conjugate(result, 1);\n    (result,)\n}\n\npub fn expt_bls12_381_tower(M: E12T) -> (E12T,) {\n    let (t0) = expt_half_bls12_381_tower(M);\n    return tw::run_BLS12_381_E12T_CYCLOTOMIC_SQUARE_circuit(t0);\n}\n\npub fn miller_loop_bls12_381_tower(P: G1Point, Q: G2Point) -> (E12T,) {\n    let bits = BLS12_381_SEED_BITS.span();\n    let modulus = get_BLS12_381_modulus();\n    let (yInv, xNegOverY) = compute_yInvXnegOverY(P.x, P.y, modulus);\n\n    let (TripleQ, c0b0a0, c0b0a1, c0b1a0, c0b1a1, c0b2a0, c0b2a1, c1b1a0, c1b1a1, c1b2a0, c1b2a1) =\n        tw::run_BLS12_381_TOWER_MILLER_INIT_BIT_1P_circuit(\n        yInv, xNegOverY, Q,\n    );\n\n    let mut Mi: E12T = E12T {\n        c0b0a0: c0b0a0,\n        c0b0a1: c0b0a1,\n        c0b1a0: c0b1a0,\n        c0b1a1: c0b1a1,\n        c0b2a0: c0b2a0,\n        c0b2a1: c0b2a1,\n        c1b0a0: Zero::zero(),\n        c1b0a1: Zero::zero(),\n        c1b1a0: c1b1a0,\n        c1b1a1: c1b1a1,\n        c1b2a0: c1b2a0,\n        c1b2a1: c1b2a1,\n    };\n\n    let mut Qi = TripleQ;\n    for bit in bits {\n        let (_Qi, _Mi) = match *bit {\n            0 => { tw::run_BLS12_381_TOWER_MILLER_BIT0_1P_circuit(yInv, xNegOverY, Qi, Mi) },\n            _ => { tw::run_BLS12_381_TOWER_MILLER_BIT1_1P_circuit(yInv, xNegOverY, Qi, Q, Mi) },\n        };\n        Qi = _Qi;\n        Mi = _Mi;\n    }\n\n    return fp12_conjugate(Mi, 1);\n}\n"
  },
  {
    "path": "src/src/ec/selectors.cairo",
    "content": "use corelib_imports::bounded_int::{\n    AddHelper, BoundedInt, DivRemHelper, MulHelper, UnitInt, bounded_int, upcast,\n};\n\nconst TWO: felt252 = 2;\nconst TWO_UI: UnitInt<TWO> = 2;\nconst FOUR_UI: UnitInt<FOUR> = 4;\nconst EIGHT_UI: UnitInt<EIGHT> = 8;\nconst TWO_NZ_TYPED: NonZero<UnitInt<TWO>> = 2;\nconst FOUR_NZ_TYPED: NonZero<UnitInt<FOUR>> = 4;\nconst POW128_DIV_2: felt252 = 0x7fffffffffffffffffffffffffffffff; // ((2^128-1) // 2)\nconst POW128_DIV_4: felt252 = 0x3fffffffffffffffffffffffffffffff; // ((2^128-1) // 4)\nconst POW128: felt252 = 0x100000000000000000000000000000000;\n\nconst FOUR: felt252 = 4;\nconst EIGHT: felt252 = 8;\n\n\npub type u15_bi = BoundedInt<0, { 15 }>;\npub type u12_bi = BoundedInt<0, { 12 }>;\npub type u1_bi = BoundedInt<0, { 1 }>;\npub type u2_bi = BoundedInt<0, { 2 }>;\npub type u3_bi = BoundedInt<0, { 3 }>;\npub type u4_bi = BoundedInt<0, { 4 }>;\npub type u5_bi = BoundedInt<0, { 5 }>;\npub type u6_bi = BoundedInt<0, { 6 }>;\npub type u7_bi = BoundedInt<0, { 7 }>;\npub type u8_bi = BoundedInt<0, { 8 }>;\n\nimpl DivRemU128By2 of DivRemHelper<BoundedInt<0, { POW128 - 1 }>, UnitInt<TWO>> {\n    type DivT = BoundedInt<0, { POW128_DIV_2 }>;\n    type RemT = u1_bi;\n}\n\nimpl DivRemU128By4 of DivRemHelper<BoundedInt<0, { POW128 - 1 }>, UnitInt<FOUR>> {\n    type DivT = BoundedInt<0, { POW128_DIV_4 }>;\n    type RemT = u3_bi;\n}\n\nimpl MulHelperBitBy2Impl of MulHelper<u1_bi, UnitInt<TWO>> {\n    type Result = u2_bi;\n}\n\nimpl MulHelperBitBy4Impl of MulHelper<u1_bi, UnitInt<FOUR>> {\n    type Result = u4_bi;\n}\n\nimpl MulHelperBit3By4Impl of MulHelper<u3_bi, UnitInt<FOUR>> {\n    type Result = u12_bi;\n}\n\nimpl MulHelperBitBy8Impl of MulHelper<u1_bi, UnitInt<EIGHT>> {\n    type Result = u8_bi;\n}\n\nimpl AddHelperU1ByU2Impl of AddHelper<u1_bi, u2_bi> {\n    type Result = u3_bi;\n}\n\nimpl AddHelperU3ByU4Impl of AddHelper<u3_bi, u4_bi> {\n    type Result = u7_bi;\n}\n\nimpl AddHelperU7ByU8Impl of AddHelper<u7_bi, u8_bi> {\n    type Result = u15_bi;\n}\n\nimpl AddHelperU3ByU12Impl of AddHelper<u3_bi, u12_bi> {\n    type Result = u15_bi;\n}\n\n\n#[inline(always)]\nfn _extract_and_calculate_selector_bit_inlined(\n    mut u1: BoundedInt<0, { POW128 - 1 }>,\n    mut u2: BoundedInt<0, { POW128 - 1 }>,\n    mut v1: BoundedInt<0, { POW128 - 1 }>,\n    mut v2: BoundedInt<0, { POW128 - 1 }>,\n) -> (\n    BoundedInt<0, { POW128 - 1 }>,\n    BoundedInt<0, { POW128 - 1 }>,\n    BoundedInt<0, { POW128 - 1 }>,\n    BoundedInt<0, { POW128 - 1 }>,\n    u15_bi,\n) {\n    let (qu1, u1b) = bounded_int::div_rem(u1, TWO_NZ_TYPED);\n    let (qu2, u2b) = bounded_int::div_rem(u2, TWO_NZ_TYPED);\n    let (qv1, v1b) = bounded_int::div_rem(v1, TWO_NZ_TYPED);\n    let (qv2, v2b) = bounded_int::div_rem(v2, TWO_NZ_TYPED);\n    u1 = upcast(qu1);\n    u2 = upcast(qu2);\n    v1 = upcast(qv1);\n    v2 = upcast(qv2);\n    let selector: u15_bi = bounded_int::add(\n        bounded_int::add(\n            bounded_int::add(u1b, bounded_int::mul(u2b, TWO_UI)), bounded_int::mul(v1b, FOUR_UI),\n        ),\n        bounded_int::mul(v2b, EIGHT_UI),\n    );\n    return (u1, u2, v1, v2, selector);\n}\n\n#[inline(always)]\nfn _extract_and_calculate_selector_bit_inlined_fake_glv(\n    mut s1: BoundedInt<0, { POW128 - 1 }>, mut s2: BoundedInt<0, { POW128 - 1 }>,\n) -> (BoundedInt<0, { POW128 - 1 }>, BoundedInt<0, { POW128 - 1 }>, u15_bi) {\n    let (qs1, s1b) = bounded_int::div_rem(s1, FOUR_NZ_TYPED);\n    let (qs2, s2b) = bounded_int::div_rem(s2, FOUR_NZ_TYPED);\n    s1 = upcast(qs1);\n    s2 = upcast(qs2);\n    let selector: u15_bi = bounded_int::add(s1b, bounded_int::mul(s2b, FOUR_UI));\n    return (s1, s2, selector);\n}\n\n\n#[inline(always)]\npub fn build_selectors_inlined(\n    _u1: u128, _u2: u128, _v1: u128, _v2: u128,\n) -> (Span<usize>, u128, u128, u128, u128) {\n    // Generated code for n_bits = 73\n    let mut selectors: Array<usize> = array![];\n\n    let mut u1: BoundedInt<0, { POW128 - 1 }> = upcast(_u1);\n    let mut u2: BoundedInt<0, { POW128 - 1 }> = upcast(_u2);\n    let mut v1: BoundedInt<0, { POW128 - 1 }> = upcast(_v1);\n    let mut v2: BoundedInt<0, { POW128 - 1 }> = upcast(_v2);\n\n    // Initial division and remainder to get LSBs\n    let (qu1, u1lsb) = bounded_int::div_rem(u1, TWO_NZ_TYPED);\n    let (qu2, u2lsb) = bounded_int::div_rem(u2, TWO_NZ_TYPED);\n    let (qv1, v1lsb) = bounded_int::div_rem(v1, TWO_NZ_TYPED);\n    let (qv2, v2lsb) = bounded_int::div_rem(v2, TWO_NZ_TYPED);\n    u1 = upcast(qu1);\n    u2 = upcast(qu2);\n    v1 = upcast(qv1);\n    v2 = upcast(qv2);\n\n    // Inlined loop (72 iterations)\n    let (u1, u2, v1, v2, selector_0) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_0));\n    let (u1, u2, v1, v2, selector_1) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_1));\n    let (u1, u2, v1, v2, selector_2) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_2));\n    let (u1, u2, v1, v2, selector_3) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_3));\n    let (u1, u2, v1, v2, selector_4) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_4));\n    let (u1, u2, v1, v2, selector_5) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_5));\n    let (u1, u2, v1, v2, selector_6) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_6));\n    let (u1, u2, v1, v2, selector_7) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_7));\n    let (u1, u2, v1, v2, selector_8) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_8));\n    let (u1, u2, v1, v2, selector_9) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_9));\n    let (u1, u2, v1, v2, selector_10) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_10));\n    let (u1, u2, v1, v2, selector_11) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_11));\n    let (u1, u2, v1, v2, selector_12) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_12));\n    let (u1, u2, v1, v2, selector_13) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_13));\n    let (u1, u2, v1, v2, selector_14) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_14));\n    let (u1, u2, v1, v2, selector_15) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_15));\n    let (u1, u2, v1, v2, selector_16) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_16));\n    let (u1, u2, v1, v2, selector_17) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_17));\n    let (u1, u2, v1, v2, selector_18) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_18));\n    let (u1, u2, v1, v2, selector_19) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_19));\n    let (u1, u2, v1, v2, selector_20) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_20));\n    let (u1, u2, v1, v2, selector_21) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_21));\n    let (u1, u2, v1, v2, selector_22) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_22));\n    let (u1, u2, v1, v2, selector_23) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_23));\n    let (u1, u2, v1, v2, selector_24) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_24));\n    let (u1, u2, v1, v2, selector_25) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_25));\n    let (u1, u2, v1, v2, selector_26) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_26));\n    let (u1, u2, v1, v2, selector_27) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_27));\n    let (u1, u2, v1, v2, selector_28) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_28));\n    let (u1, u2, v1, v2, selector_29) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_29));\n    let (u1, u2, v1, v2, selector_30) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_30));\n    let (u1, u2, v1, v2, selector_31) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_31));\n    let (u1, u2, v1, v2, selector_32) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_32));\n    let (u1, u2, v1, v2, selector_33) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_33));\n    let (u1, u2, v1, v2, selector_34) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_34));\n    let (u1, u2, v1, v2, selector_35) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_35));\n    let (u1, u2, v1, v2, selector_36) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_36));\n    let (u1, u2, v1, v2, selector_37) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_37));\n    let (u1, u2, v1, v2, selector_38) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_38));\n    let (u1, u2, v1, v2, selector_39) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_39));\n    let (u1, u2, v1, v2, selector_40) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_40));\n    let (u1, u2, v1, v2, selector_41) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_41));\n    let (u1, u2, v1, v2, selector_42) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_42));\n    let (u1, u2, v1, v2, selector_43) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_43));\n    let (u1, u2, v1, v2, selector_44) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_44));\n    let (u1, u2, v1, v2, selector_45) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_45));\n    let (u1, u2, v1, v2, selector_46) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_46));\n    let (u1, u2, v1, v2, selector_47) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_47));\n    let (u1, u2, v1, v2, selector_48) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_48));\n    let (u1, u2, v1, v2, selector_49) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_49));\n    let (u1, u2, v1, v2, selector_50) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_50));\n    let (u1, u2, v1, v2, selector_51) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_51));\n    let (u1, u2, v1, v2, selector_52) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_52));\n    let (u1, u2, v1, v2, selector_53) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_53));\n    let (u1, u2, v1, v2, selector_54) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_54));\n    let (u1, u2, v1, v2, selector_55) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_55));\n    let (u1, u2, v1, v2, selector_56) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_56));\n    let (u1, u2, v1, v2, selector_57) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_57));\n    let (u1, u2, v1, v2, selector_58) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_58));\n    let (u1, u2, v1, v2, selector_59) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_59));\n    let (u1, u2, v1, v2, selector_60) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_60));\n    let (u1, u2, v1, v2, selector_61) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_61));\n    let (u1, u2, v1, v2, selector_62) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_62));\n    let (u1, u2, v1, v2, selector_63) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_63));\n    let (u1, u2, v1, v2, selector_64) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_64));\n    let (u1, u2, v1, v2, selector_65) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_65));\n    let (u1, u2, v1, v2, selector_66) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_66));\n    let (u1, u2, v1, v2, selector_67) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_67));\n    let (u1, u2, v1, v2, selector_68) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_68));\n    let (u1, u2, v1, v2, selector_69) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_69));\n    let (u1, u2, v1, v2, selector_70) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_70));\n    let (_, _, _, _, selector_71) = _extract_and_calculate_selector_bit_inlined(u1, u2, v1, v2);\n    selectors.append(upcast(selector_71));\n    return (selectors.span(), upcast(u1lsb), upcast(u2lsb), upcast(v1lsb), upcast(v2lsb));\n}\n\n#[inline(always)]\npub fn build_selectors_inlined_fake_glv(_s1: u128, _s2: u128) -> (Span<usize>, u128, u128) {\n    // Generated code for n_bits = 128\n    let mut selectors: Array<usize> = array![];\n\n    let mut s1: BoundedInt<0, { POW128 - 1 }> = upcast(_s1);\n    let mut s2: BoundedInt<0, { POW128 - 1 }> = upcast(_s2);\n\n    // Initial division and remainder to get LSBs\n    let (qs1, s1lsb) = bounded_int::div_rem(s1, TWO_NZ_TYPED);\n    let (qs2, s2lsb) = bounded_int::div_rem(s2, TWO_NZ_TYPED);\n    s1 = upcast(qs1);\n    s2 = upcast(qs2);\n\n    // Inlined loop (63 2-bit iterations for 128 bits)\n    let (s1, s2, selector_0) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_0));\n    // Correction for the last bits 2-1.\n    selectors.append(16);\n    let (s1, s2, selector_1) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_1));\n    let (s1, s2, selector_2) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_2));\n    let (s1, s2, selector_3) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_3));\n    let (s1, s2, selector_4) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_4));\n    let (s1, s2, selector_5) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_5));\n    let (s1, s2, selector_6) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_6));\n    let (s1, s2, selector_7) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_7));\n    let (s1, s2, selector_8) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_8));\n    let (s1, s2, selector_9) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_9));\n    let (s1, s2, selector_10) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_10));\n    let (s1, s2, selector_11) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_11));\n    let (s1, s2, selector_12) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_12));\n    let (s1, s2, selector_13) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_13));\n    let (s1, s2, selector_14) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_14));\n    let (s1, s2, selector_15) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_15));\n    let (s1, s2, selector_16) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_16));\n    let (s1, s2, selector_17) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_17));\n    let (s1, s2, selector_18) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_18));\n    let (s1, s2, selector_19) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_19));\n    let (s1, s2, selector_20) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_20));\n    let (s1, s2, selector_21) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_21));\n    let (s1, s2, selector_22) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_22));\n    let (s1, s2, selector_23) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_23));\n    let (s1, s2, selector_24) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_24));\n    let (s1, s2, selector_25) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_25));\n    let (s1, s2, selector_26) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_26));\n    let (s1, s2, selector_27) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_27));\n    let (s1, s2, selector_28) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_28));\n    let (s1, s2, selector_29) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_29));\n    let (s1, s2, selector_30) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_30));\n    let (s1, s2, selector_31) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_31));\n    let (s1, s2, selector_32) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_32));\n    let (s1, s2, selector_33) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_33));\n    let (s1, s2, selector_34) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_34));\n    let (s1, s2, selector_35) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_35));\n    let (s1, s2, selector_36) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_36));\n    let (s1, s2, selector_37) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_37));\n    let (s1, s2, selector_38) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_38));\n    let (s1, s2, selector_39) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_39));\n    let (s1, s2, selector_40) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_40));\n    let (s1, s2, selector_41) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_41));\n    let (s1, s2, selector_42) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_42));\n    let (s1, s2, selector_43) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_43));\n    let (s1, s2, selector_44) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_44));\n    let (s1, s2, selector_45) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_45));\n    let (s1, s2, selector_46) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_46));\n    let (s1, s2, selector_47) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_47));\n    let (s1, s2, selector_48) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_48));\n    let (s1, s2, selector_49) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_49));\n    let (s1, s2, selector_50) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_50));\n    let (s1, s2, selector_51) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_51));\n    let (s1, s2, selector_52) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_52));\n    let (s1, s2, selector_53) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_53));\n    let (s1, s2, selector_54) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_54));\n    let (s1, s2, selector_55) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_55));\n    let (s1, s2, selector_56) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_56));\n    let (s1, s2, selector_57) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_57));\n    let (s1, s2, selector_58) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_58));\n    let (s1, s2, selector_59) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_59));\n    let (s1, s2, selector_60) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_60));\n    let (s1, s2, selector_61) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_61));\n    let (s1, s2, selector_62) = _extract_and_calculate_selector_bit_inlined_fake_glv(s1, s2);\n    selectors.append(upcast(selector_62));\n    // At this point s1, and s2 are the MSB (last bit).\n    if s1 != 0 {\n        if s2 != 0 {\n            // 11 T2 index : 10\n            selectors.append(10);\n        } else {\n            // 10 T12 index : 6\n            selectors.append(6);\n        }\n    } else {\n        if s2 != 0 {\n            // 01 T15 index : 9\n            selectors.append(9);\n        } else {\n            // 00 T5 index : 5\n            selectors.append(5);\n        }\n    }\n    return (selectors.span(), upcast(s1lsb), upcast(s2lsb));\n}\n"
  },
  {
    "path": "src/src/hashes/poseidon_bn254.cairo",
    "content": "use core::circuit::{\n    CircuitElement as CE, CircuitInput as CI, CircuitInputs, CircuitOutputsTrait, EvalCircuitTrait,\n    circuit_add, circuit_mul, u384,\n};\nuse garaga::core::circuit::AddInputResultTrait2;\nuse garaga::definitions::get_GRUMPKIN_modulus;\n\n\npub fn poseidon_hash_2(x: u256, y: u256) -> u256 {\n    let x_u384: u384 = x.into();\n    let y_u384: u384 = y.into();\n    poseidon_hash_2_bn254(x_u384, y_u384).try_into().unwrap()\n}\n// Compute the poseidon hash of two elements for the BN254 scalar field (Fr).\n// Comptaible with circomlib poseidon hash (2 inputs) and Noir's hash 2 poseidon::bn254::hash_2\npub fn poseidon_hash_2_bn254(x: u384, y: u384) -> u384 {\n    // CONSTANT stack\n    let in0 = CE::<CI<0>> {}; // 0x0\n    let in1 = CE::<CI<1>> {}; // 0xee9a592ba9a9518d05986d656f40c2114c4993c11bb29938d21d47304cd8e6e\n    let in2 = CE::<CI<2>> {}; // 0xf1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e864\n    let in3 = CE::<CI<3>> {}; // 0x8dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f5\n    let in4 = CE::<CI<4>> {}; // 0x84d520e4e5bb469e1f9075cb7c490efa59565eedae2d00ca8ef88ceea2b0197\n    let in5 = CE::<CI<5>> {}; // 0x2d15d982d99577fa33da56722416fd734b3e667a2f9f15d8eb3e767ae0fd811e\n    let in6 = CE::<CI<6>> {}; // 0xed2538844aba161cf1578a43cf0364e91601f6536a5996d0efbe65632c41b6d\n    let in7 = CE::<CI<7>> {}; // 0x2600c27d879fbca186e739e6363c71cf804c877d829b735dcc3e3af02955e60a\n    let in8 = CE::<CI<8>> {}; // 0x28f8bd44a583cbaa475bd15396430e7ccb99a5517440dfd970058558282bf2c5\n    let in9 = CE::<CI<9>> {}; // 0x9cd7d4c380dc5488781aad012e7eaef1ed314d7f697a5572d030c55df153221\n    let in10 = CE::<\n        CI<10>,\n    > {}; // 0x11bb6ee1291aabb206120ecaace460d24b6713febe82234951e2bee7d0f855f5\n    let in11 = CE::<\n        CI<11>,\n    > {}; // 0x2d74e8fa0637d9853310f3c0e3fae1d06f171580f5b8fd05349cadeecfceb230\n    let in12 = CE::<\n        CI<12>,\n    > {}; // 0x2735e4ec9d39bdffac9bef31bacba338b1a09559a511a18be4b4d316ed889033\n    let in13 = CE::<CI<13>> {}; // 0xf03c1e9e0895db1a5da6312faa78e971106c33f826e08dcf617e24213132dfd\n    let in14 = CE::<\n        CI<14>,\n    > {}; // 0x17094cd297bf827caf92920205b719c18741090b8f777811848a7e9ead6778c4\n    let in15 = CE::<CI<15>> {}; // 0xdb8f419c21f92461fc2b3219465798348df90d4178042c81ba7d4b4d559e2b8\n    let in16 = CE::<\n        CI<16>,\n    > {}; // 0x243443613f64ffa417427ed5933fcfbc66809db60b9ca1724a22709ceceeece2\n    let in17 = CE::<\n        CI<17>,\n    > {}; // 0x22af49fbfd5d7e9fcd256c25c07d3dd8ecbbae6deecd03aa04bb191fada75411\n    let in18 = CE::<\n        CI<18>,\n    > {}; // 0x14fbd37fa8ad6e4e0c78a20d93c7230c4677f797b4327323f7f7c097c19420e0\n    let in19 = CE::<\n        CI<19>,\n    > {}; // 0x15a9298bbb882534d4b2c9fbc6e4ef4189420c4eb3f3e1ea22faa7e18b5ae625\n    let in20 = CE::<\n        CI<20>,\n    > {}; // 0x2f7de75f23ddaaa5221323ebceb2f2ac83eef92e854e75434c2f1d90562232bc\n    let in21 = CE::<CI<21>> {}; // 0x36a4432a868283b78a315e84c4ae5aeca216f2ff9e9b2e623584f7479cd5c27\n    let in22 = CE::<\n        CI<22>,\n    > {}; // 0x2180d7786a8cf810e277218ab14a11e5e39f3c962f11e860ae1c5682c797de5c\n    let in23 = CE::<CI<23>> {}; // 0xa268ef870736eebd0cb55be640d73ee3778990484cc03ce53572377eefff8e4\n    let in24 = CE::<\n        CI<24>,\n    > {}; // 0x1eefefe11c0be4664f2999031f15994829e982e8c90e09069df9bae16809a5b2\n    let in25 = CE::<\n        CI<25>,\n    > {}; // 0x27e87f033bd1e0a89ca596e8cb77fe3a4b8fb93d9a1129946571a3c3cf244c52\n    let in26 = CE::<CI<26>> {}; // 0x1498a3e6599fe243321f57d6c5435889979c4f9d2a3e184d21451809178ee39\n    let in27 = CE::<\n        CI<27>,\n    > {}; // 0x27c0a41f4cb9fe67e9dd4d7ce33707f74d5d6bcc235bef108dea1bbebde507aa\n    let in28 = CE::<\n        CI<28>,\n    > {}; // 0x1f75230908b141b46637238b120fc770f4f4ae825d5004c16a7c91fe1dae280f\n    let in29 = CE::<\n        CI<29>,\n    > {}; // 0x25f99a9198e923167bba831b15fffd2d7b97b3a089808d4eb1f0a085bee21656\n    let in30 = CE::<\n        CI<30>,\n    > {}; // 0x101bc318e9ea5920d0f6acdc2bb526593d3d56ec8ed14c67622974228ba900c6\n    let in31 = CE::<\n        CI<31>,\n    > {}; // 0x1a175607067d517397c1334ecb019754ebc0c852a3cf091ec1ccc43207a83c76\n    let in32 = CE::<CI<32>> {}; // 0xf02f0e6d25f9ea3deb245f3e8c381ee6b2eb380ba4af5c1c4d89770155df37b\n    let in33 = CE::<\n        CI<33>,\n    > {}; // 0x151d757acc8237af08d8a6677203ec9692565de456ae789ff358b3163b393bc9\n    let in34 = CE::<\n        CI<34>,\n    > {}; // 0x256cd9577cea143049e0a1fe0068dd20084980ee5b757890a79d13a3a624fad4\n    let in35 = CE::<CI<35>> {}; // 0x513abaff6195ea48833b13da50e0884476682c3fbdd195497b8ae86e1937c61\n    let in36 = CE::<\n        CI<36>,\n    > {}; // 0x1d9570dc70a205f36f610251ee6e2e8039246e84e4ac448386d19dbac4e4a655\n    let in37 = CE::<\n        CI<37>,\n    > {}; // 0x18f1a5194755b8c5d5d7f1bf8aaa6f56effb012dd784cf5e044eec50b29fc9d4\n    let in38 = CE::<\n        CI<38>,\n    > {}; // 0x266b53b615ef73ac866512c091e4a4f2fa4bb0af966ef420d88163238eebbca8\n    let in39 = CE::<\n        CI<39>,\n    > {}; // 0x2d63234c9207438aa42b8de27644c02268304dfeb8c89a1a3f4fd6e8344ae0f7\n    let in40 = CE::<\n        CI<40>,\n    > {}; // 0x2ab30fbe51ee49bc7b3adde219a6f0b5fbb976205ef8df7e0021daee6f55c693\n    let in41 = CE::<\n        CI<41>,\n    > {}; // 0x1aee6d4b3ebe9366dcb9cce48969d4df1dc42abcd528b270068d9207fa6a45c9\n    let in42 = CE::<\n        CI<42>,\n    > {}; // 0x1891aeab71e34b895a79452e5864ae1d11f57646c60bb34aa211d123f6095219\n    let in43 = CE::<\n        CI<43>,\n    > {}; // 0x24492b5f95c0b0876437e94b4101c69118e16b2657771bd3a7caab01c818aa4b\n    let in44 = CE::<CI<44>> {}; // 0x1752161b3350f7e1b3b2c8663a0d642964628213d66c10ab2fddf71bcfde68f\n    let in45 = CE::<CI<45>> {}; // 0xab676935722e2f67cfb84938e614c6c2f445b8d148de54368cfb8f90a00f3a7\n    let in46 = CE::<CI<46>> {}; // 0xb0f72472b9a2f5f45bc730117ed9ae5683fc2e6e227e3d4fe0da1f7aa348189\n    let in47 = CE::<\n        CI<47>,\n    > {}; // 0x16aa6f9273acd5631c201d1a52fc4f8acaf2b2152c3ae6df13a78a513edcd369\n    let in48 = CE::<\n        CI<48>,\n    > {}; // 0x2f60b987e63614eb13c324c1d8716eb0bf62d9b155d23281a45c08d52435cd60\n    let in49 = CE::<\n        CI<49>,\n    > {}; // 0x18d24ae01dde92fd7606bb7884554e9df1cb89b042f508fd9db76b7cc1b21212\n    let in50 = CE::<CI<50>> {}; // 0x4fc3bf76fe31e2f8d776373130df79d18c3185fdf1593960715d4724cffa586\n    let in51 = CE::<CI<51>> {}; // 0xd18f6b53fc69546cfdd670b41732bdf6dee9e06b21260c6b5d26270468dbf82\n    let in52 = CE::<CI<52>> {}; // 0xba4231a918f13acec11fbafa17c5223f1f70b4cdb045036fa5d7045bd10e24\n    let in53 = CE::<CI<53>> {}; // 0x7b458b2e00cd7c6100985301663e7ec33c826da0635ff1ebedd0dd86120b4c8\n    let in54 = CE::<\n        CI<54>,\n    > {}; // 0x1c35c2d96db90f4f6058e76f15a0c8286bba24e2ed40b16cec39e9fd7baa5799\n    let in55 = CE::<\n        CI<55>,\n    > {}; // 0x1d12bea3d8c32a5d766568f03dd1ecdb0a4f589abbef96945e0dde688e292050\n    let in56 = CE::<CI<56>> {}; // 0xd953e20022003270525f9a73526e9889c995bb62fdea94313db405a61300286\n    let in57 = CE::<\n        CI<57>,\n    > {}; // 0x29f053ec388795d786a40bec4c875047f06ff0b610b4040a760e33506d2671e1\n    let in58 = CE::<CI<58>> {}; // 0x4188e33735f46b14a4952a98463bc12e264d5f446e0c3f64b9679caaae44fc2\n    let in59 = CE::<\n        CI<59>,\n    > {}; // 0x149ec28846d4f438a84f1d0529431bb9e996a408b7e97eb3bf1735cdbe96f68f\n    let in60 = CE::<CI<60>> {}; // 0xde20fae0af5188bca24b5f63630bad47aeafd98e651922d148cce1c5fdddee8\n    let in61 = CE::<\n        CI<61>,\n    > {}; // 0x12d650e8f790b1253ea94350e722ad2f7d836c234b8660edf449fba6984c6709\n    let in62 = CE::<\n        CI<62>,\n    > {}; // 0x22ab53aa39f34ad30ea96717ba7446aafdadbc1a8abe28d78340dfc4babb8f6c\n    let in63 = CE::<\n        CI<63>,\n    > {}; // 0x26503e8d4849bdf5450dabea7907bc3de0de109871dd776904a129db9149166c\n    let in64 = CE::<\n        CI<64>,\n    > {}; // 0x1d5e7a0e2965dffa00f5454f5003c5c8ec34b23d897e7fc4c8064035b0d33850\n    let in65 = CE::<CI<65>> {}; // 0xee3d8daa098bee012d96b7ec48448c6bc9a6aefa544615b9cb3c7bbd07104cb\n    let in66 = CE::<\n        CI<66>,\n    > {}; // 0x1bf282082a04979955d30754cd4d9056fa9ef7a7175703d91dc232b5f98ead00\n    let in67 = CE::<CI<67>> {}; // 0x7ae1344abfc6c2ce3e951bc316bee49971645f16b693733a0272173ee9ad461\n    let in68 = CE::<\n        CI<68>,\n    > {}; // 0x217e3a247827c376ec21b131d511d7dbdc98a36b7a47d97a5c8e89762ee80488\n    let in69 = CE::<\n        CI<69>,\n    > {}; // 0x215ffe584b0eb067a003d438e2fbe28babe1e50efc2894117509b616addc30ee\n    let in70 = CE::<\n        CI<70>,\n    > {}; // 0x1e770fc8ecbfdc8692dcedc597c4ca0fbec19b84e33da57412a92d1d3ce3ec20\n    let in71 = CE::<\n        CI<71>,\n    > {}; // 0x2f6243cda919bf4c9f1e3a8a6d66a05742914fc19338b3c0e50e828f69ff6d1f\n    let in72 = CE::<\n        CI<72>,\n    > {}; // 0x246efddc3117ecd39595d0046f44ab303a195d0e9cc89345d3c03ff87a11b693\n    let in73 = CE::<CI<73>> {}; // 0x53e8d9b3ea5b8ed4fe006f139cbc4e0168b1c89a918dfbe602bc62cec6adf1\n    let in74 = CE::<\n        CI<74>,\n    > {}; // 0x1b894a2f45cb96647d910f6a710d38b7eb4f261beefff135aec04c1abe59427b\n    let in75 = CE::<CI<75>> {}; // 0xaeb1554e266693d8212652479107d5fdc077abf88651f5a42553d54ec242cc0\n    let in76 = CE::<\n        CI<76>,\n    > {}; // 0x16a735f6f7209d24e6888680d1781c7f04ba7d71bd4b7d0e11faf9da8d9ca28e\n    let in77 = CE::<CI<77>> {}; // 0x487b8b7fab5fc8fd7c13b4df0543cd260e4bcbb615b19374ff549dcf073d41b\n    let in78 = CE::<\n        CI<78>,\n    > {}; // 0x1e75b9d2c2006307124bea26b0772493cfb5d512068c3ad677fdf51c92388793\n    let in79 = CE::<CI<79>> {}; // 0x5120e3d0e28003c253b46d5ff77d272ae46fa1e239d1c6c961dcb02da3b388f\n    let in80 = CE::<CI<80>> {}; // 0xda5feb534576492b822e8763240119ac0900a053b171823f890f5fd55d78372\n    let in81 = CE::<\n        CI<81>,\n    > {}; // 0x2e211b39a023031a22acc1a1f5f3bb6d8c2666a6379d9d2c40cc8f78b7bd9abe\n    let in82 = CE::<\n        CI<82>,\n    > {}; // 0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\n    let in83 = CE::<\n        CI<83>,\n    > {}; // 0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771\n    let in84 = CE::<\n        CI<84>,\n    > {}; // 0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7\n    let in85 = CE::<\n        CI<85>,\n    > {}; // 0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0\n    let in86 = CE::<\n        CI<86>,\n    > {}; // 0x2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe23\n    let in87 = CE::<\n        CI<87>,\n    > {}; // 0x176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911\n    let in88 = CE::<\n        CI<88>,\n    > {}; // 0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d\n    let in89 = CE::<\n        CI<89>,\n    > {}; // 0x101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa\n    let in90 = CE::<\n        CI<90>,\n    > {}; // 0x19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0\n    let in91 = CE::<\n        CI<91>,\n    > {}; // 0x1e6f20a11d1e31e43f83dcedddb9a0236203f5f24ae72c925a8a79a66831f51d\n    let in92 = CE::<\n        CI<92>,\n    > {}; // 0x1bd8c528472e57bdc722a141f8785694484f426725403ae24084e3027e782467\n    let in93 = CE::<\n        CI<93>,\n    > {}; // 0x2d51ba82c8073c6d6bacf1ad5e56655b7143625b0a9e9c3190527a1a5f05079a\n    let in94 = CE::<\n        CI<94>,\n    > {}; // 0x1b07d6d51e6f7e97e0ab10fc2e51ea83ce0611f940ff0731b5f927fe8d6a77c9\n    let in95 = CE::<\n        CI<95>,\n    > {}; // 0x11e12a40d262ae88e8376f62d19edf43093cdef1ccf34d985a3e53f0bc5765a0\n    let in96 = CE::<\n        CI<96>,\n    > {}; // 0x221c170e4d02a2479c6f3e47b5ff55781574f980d89038308a3ef37cce8463bd\n    let in97 = CE::<CI<97>> {}; // 0x3f0815ab463f1b76ee25a9b8768b3231a89752f427f4f063ab718e707576b31\n    let in98 = CE::<\n        CI<98>,\n    > {}; // 0x15648bf46f60d82954c7e33029b3617357012a3d3b1d34c8e008859f1dbfb317\n    let in99 = CE::<\n        CI<99>,\n    > {}; // 0x127e00c2253de07818ca7f2eafdd7564d05ea850cf61f1daa0cfefbf7fbfba85\n    let in100 = CE::<\n        CI<100>,\n    > {}; // 0x66365afd18a41ef9382fc0b1d265cb4d3ce470a8cbbb878f7d48051630747bd\n    let in101 = CE::<\n        CI<101>,\n    > {}; // 0x219d14f823513140dc69a96f7fe7e086f4fa24c84e57dcf2b099715c4404aae7\n    let in102 = CE::<\n        CI<102>,\n    > {}; // 0x3a30bfbbf2cb86d4a6a63a8050d91f9f14f4d33696d37ebaefa9ac2302132d5\n    let in103 = CE::<\n        CI<103>,\n    > {}; // 0x2121bbcdeaa33a35b0270fb7d5c9f94edad5a84d74b06e3385104b0b41935bcc\n    let in104 = CE::<\n        CI<104>,\n    > {}; // 0x196b544fbeb0a792cfbb82c289e579b7cd5580c2e338a389d053ef8b3d10e70e\n    let in105 = CE::<\n        CI<105>,\n    > {}; // 0x2809c3a1547c0cee89c1db270ef479c26973ec73edb4bd4e7d907ea0202f560f\n    let in106 = CE::<\n        CI<106>,\n    > {}; // 0x11c34446b083ef92ca157585a02b8b342a4c67175b31f4b5d40d4e96dfc5c8f1\n    let in107 = CE::<\n        CI<107>,\n    > {}; // 0x253ea0b33a8bf3b2367c030e3289cbe0f6242ad7709d90b86d9d8026e2e39925\n    let in108 = CE::<\n        CI<108>,\n    > {}; // 0x30467dc1930f6afe90c89d4007ad29fc4f5a19c006d1030438c16df85637bd5f\n    let in109 = CE::<\n        CI<109>,\n    > {}; // 0x2f9d4b55495f7e377e20e6f5a3a88af7aa6a536458b38bbe13c8ebfbbba54f44\n    let in110 = CE::<\n        CI<110>,\n    > {}; // 0x1d9e9d5c736e3151f11d36d499e7e093d8ee2353be18aad54cfd03ff0feac4b8\n    let in111 = CE::<\n        CI<111>,\n    > {}; // 0x124b617b43e598f9ebf622f7823a3de7d1bfedb87e097c315f343de301e54841\n    let in112 = CE::<\n        CI<112>,\n    > {}; // 0x198e7cfc66ae45774055cf073bedc945a5f9c5b19cae08d789cc5748ffe199b2\n    let in113 = CE::<\n        CI<113>,\n    > {}; // 0x2eac25b3498dfadffd124ab3aad57789eb945ba57443099c5bb6c27ed977fe24\n    let in114 = CE::<\n        CI<114>,\n    > {}; // 0x1ee02c175cdfe1871b378305c1bb9c904e8af1d4454ed3550b3c6ab5f4f90126\n    let in115 = CE::<\n        CI<115>,\n    > {}; // 0x616f8c34c607266b29ea8f9d2dfa47ff6fbb1d9745c48609fa98301d0f679d5\n    let in116 = CE::<\n        CI<116>,\n    > {}; // 0x181d68b0a188504958b9f19cbbdb972a853e51ed385e4883a43a42832803370b\n    let in117 = CE::<\n        CI<117>,\n    > {}; // 0x2d5397ce863464a25d6b7f5b015d579181d1ce2f24cbabf6059e9327f5ba7004\n    let in118 = CE::<\n        CI<118>,\n    > {}; // 0x15bf817491b94d71e8912940cc0b80277713e7d32da2b6591724d8dbd4bc2618\n    let in119 = CE::<\n        CI<119>,\n    > {}; // 0x2a7cbd11460b177ab76feab28b69485ac8cc687740bc910994a3827d29c08714\n    let in120 = CE::<\n        CI<120>,\n    > {}; // 0xf7cd5ffa4661730ab56e447fae5cc1763cb462da80a85614c237b290de9d502\n    let in121 = CE::<\n        CI<121>,\n    > {}; // 0xe0766004b4c4176eb13273508eb6575f768137d86d305be644ce04531008100\n    let in122 = CE::<\n        CI<122>,\n    > {}; // 0x625fa7145813481f6d148be6b9c8bb7b54ee3c1afac00104e1f763000b9924c\n    let in123 = CE::<\n        CI<123>,\n    > {}; // 0x7c5472508b459916ee0f5461aad2e0b19cd9c7b184f515b65136318ce2c6a5\n    let in124 = CE::<\n        CI<124>,\n    > {}; // 0x567375470d189b693ac77ab3fb7557231d53073951d43c54685879cb7a89fcb\n    let in125 = CE::<\n        CI<125>,\n    > {}; // 0x1d0406bcbec83f8d5165f56c063e42108ad21f51ea4bfc71601174ba5c7b8bcc\n    let in126 = CE::<\n        CI<126>,\n    > {}; // 0xc02b18eef22332d280a8aa1f86405f3375f06342f8696ee7c73b46c63272cb7\n    let in127 = CE::<\n        CI<127>,\n    > {}; // 0x17c1fc174cd9a6ebeaa7add2f801a664823509ad4fd1b15aad053a55ad6da4cf\n    let in128 = CE::<\n        CI<128>,\n    > {}; // 0x5f843c23024eb1dab7ebbc86709a021aaa6caf433f7ed258a08638e9584b32d\n    let in129 = CE::<\n        CI<129>,\n    > {}; // 0x22df2420697ca28b5cc51c53165e002727b45ccd90a55c87589f792f0ad8cb37\n    let in130 = CE::<\n        CI<130>,\n    > {}; // 0x2f1438303a7b49d473400aaedf0f48009fd3af804b76be86417588efc4d7302a\n    let in131 = CE::<\n        CI<131>,\n    > {}; // 0x2323d5fcf2da8965c6b2b7b4fbf9a24bbaa7f4dccd35d5ca6155c5463093b23b\n    let in132 = CE::<\n        CI<132>,\n    > {}; // 0x26c85b9dfbbe48fe83b753a5e7336b9f40f7b961e9c54f94e37700073d4d26e\n    let in133 = CE::<\n        CI<133>,\n    > {}; // 0x31511000251ec86feb38b5ab4e335f070b271df4c20979528e41d65384c318f\n    let in134 = CE::<\n        CI<134>,\n    > {}; // 0x18e588324a9bbaacb42fa69e5d90a0c0e27cd16b941e34a60ff5df9a26c03af1\n    let in135 = CE::<\n        CI<135>,\n    > {}; // 0x2642b5d8e16b953b070635775c8d3c9498357d6ad9bef2e7d99f03c10ea1f95f\n    let in136 = CE::<\n        CI<136>,\n    > {}; // 0x21fc313ba11c60e8e84ff60db906a0f031189b0b48335c4221f909aef836c133\n    let in137 = CE::<\n        CI<137>,\n    > {}; // 0x2d3562e3d4b42bc6890b698cc6ab89f7311298bcbac6e4e9f2f4d93d06dae151\n    let in138 = CE::<\n        CI<138>,\n    > {}; // 0xa74ef541d360e842e3e0b6ff7e5c7c77934a5f67616f01c189d886dfd2e0808\n    let in139 = CE::<\n        CI<139>,\n    > {}; // 0x140564b53e0a812ac3983d6e3b433afa43f434087d9e754967c2c9b1b02caf8a\n    let in140 = CE::<\n        CI<140>,\n    > {}; // 0x14709e32d98ae4cd18b400181e71ab9759c436c8e83fa6993adb6f2db6bba9d0\n    let in141 = CE::<\n        CI<141>,\n    > {}; // 0x734b2366c59e394423f179e1266dd392372db4f2dba651f4a619a4b52bdc010\n    let in142 = CE::<\n        CI<142>,\n    > {}; // 0x11fb2d705c94b08d5ad3e3c5fb6629abe963ed92913642c7d02d7e71088fd2d4\n    let in143 = CE::<\n        CI<143>,\n    > {}; // 0x27d03abf5c1f290e5d715eba19371050ef6eb7f78fd84be834e4cc3618059484\n    let in144 = CE::<\n        CI<144>,\n    > {}; // 0x13ed9e9e6b452df27fb3353cfc2cd63ebe817f212a39c6a8bb9b441ac1395861\n    let in145 = CE::<\n        CI<145>,\n    > {}; // 0x1319c51cf37aaa10246cdaaa04a12e88795de4452604263a7c5b79ab99cbd23c\n    let in146 = CE::<CI<146>> {}; // 0xbca25588d187b7f9dad839f2c8cb526a4cf444eebbd0e715b6cea019ac3f2\n    let in147 = CE::<\n        CI<147>,\n    > {}; // 0x1d837ea0341c5964181226874b923cd01a069b493f02f7a3c01be23cf51d593f\n    let in148 = CE::<\n        CI<148>,\n    > {}; // 0x1b41ce9ed3634cbd42c427ce4c5c83774149e2a6dbd25f24012090db7de4e7f9\n    let in149 = CE::<\n        CI<149>,\n    > {}; // 0x671f0e3b674ae7cddc790ecc4e946f4bca74b98b78a127c7b56bd6673f1ce1f\n    let in150 = CE::<\n        CI<150>,\n    > {}; // 0x19fc073797a39b272e40cd30615f55fefeb682c1ac14143071d0449a5426e4e\n    let in151 = CE::<\n        CI<151>,\n    > {}; // 0x17bee47d262a497fd1f7c5c6d5a7c70fa4209480bf5d97311c5096619e9fd13\n    let in152 = CE::<\n        CI<152>,\n    > {}; // 0x2073cff92d3141b480763539cff2978a4c7944721cc937ba00cc8527274471e3\n    let in153 = CE::<\n        CI<153>,\n    > {}; // 0x3bd7b3e2c1885877f43182a55a91d48f9c58d152e730fe2c7aa46b1fa663baa\n    let in154 = CE::<\n        CI<154>,\n    > {}; // 0x226ebc9a538b5bbaff128edfb9bbf5fa0ceb100719a14c8dfed9ffbbbad9b6b7\n    let in155 = CE::<\n        CI<155>,\n    > {}; // 0xd395f0b08b9fede0373a06e1552c0e634a49572af1d830dc6e394e8a5d3b21a\n    let in156 = CE::<\n        CI<156>,\n    > {}; // 0x28242439b524540a30d49b68e19e31ba5284bd3bcf1e0f2f41f77d5331f99ffa\n    let in157 = CE::<\n        CI<157>,\n    > {}; // 0x370d6fa19eaac142d2de034801ab85e0b457e129e91f929754b48c6154d4df6\n    let in158 = CE::<\n        CI<158>,\n    > {}; // 0x9a16f573b3280f390762abf269579eaa37939bc0c753feb0a2b2e0bcbde1659\n    let in159 = CE::<\n        CI<159>,\n    > {}; // 0x2228e360fb5b162b496ac443f98127ee3c0021a690b71b268d99981368231d97\n    let in160 = CE::<\n        CI<160>,\n    > {}; // 0x7e42c2ca633d2c49fabf83991476d209431e34d8032b6a1b97675f3c567f944\n    let in161 = CE::<\n        CI<161>,\n    > {}; // 0x2ce12d7269663770c3cab85a6215a32eed35fda1d8e9d753a50fe96097724a9f\n    let in162 = CE::<\n        CI<162>,\n    > {}; // 0x3d7427704c61e2009eeb9b1b45a0125084bc4daf70973a7ba0b2231815b15de\n    let in163 = CE::<\n        CI<163>,\n    > {}; // 0x10f8abf0764185861c1267fcf4b4b33ca096fb4ddc4626732d86921e553e69c6\n    let in164 = CE::<\n        CI<164>,\n    > {}; // 0x17ccaf6f26f7267a025d7cb456e3aeb251a1a620aaf6568a5c95644c7c5914cc\n    let in165 = CE::<\n        CI<165>,\n    > {}; // 0x63bb306b96310051385c3ce00ca820ad0e3651a6e55754d59de6df28cea4d51\n    let in166 = CE::<\n        CI<166>,\n    > {}; // 0x1f761ee5553c5e86f2c304a18095ab7403242e0b65e608bc920cf993a4169974\n    let in167 = CE::<\n        CI<167>,\n    > {}; // 0xdc5f00bbfd7c1d9a23c0e666859ba6564bcde8761b45717cd6bdfc09de4e8f2\n    let in168 = CE::<\n        CI<168>,\n    > {}; // 0x6de511520e277b7df07c3536381c13eb44cf790a230abc391089760bfc40ef2\n    let in169 = CE::<\n        CI<169>,\n    > {}; // 0x2a134348c8660efcf9ef54863e70528a1fd4481b50a1fe21f24a8c06e10cca03\n    let in170 = CE::<\n        CI<170>,\n    > {}; // 0xaeb5023bbb9a64c4bd80089e99edf8ed5f6f1ffb63a7dbba1b33520bcfce37b\n    let in171 = CE::<\n        CI<171>,\n    > {}; // 0x141a6d0810366ae225ecb5f0bfdc9995406c5960ab26155836fc51fb7cb933d1\n    let in172 = CE::<\n        CI<172>,\n    > {}; // 0x9d2ea05ef54dadbbe776f404dca6626cc0b2539990bc0b8bfe87497f1e2c5b7\n    let in173 = CE::<\n        CI<173>,\n    > {}; // 0x1e56d244a8e41be5d104d5f8ef70891d22d4a5432441bfe8ff1a16e91719cdde\n    let in174 = CE::<\n        CI<174>,\n    > {}; // 0x1d4f020c57c4f14aec908b2f99b5c4fd5e09447fa85c2fd68ba4d5c5f50c7b49\n    let in175 = CE::<\n        CI<175>,\n    > {}; // 0x763911a3a92a4f0e09f4e14cd03398d8d82a1e09db80fb0ee1e833764c18fd3\n    let in176 = CE::<\n        CI<176>,\n    > {}; // 0x12857275be2fe6b9ba2ec68f9061643f1fc5d9a2c5e47e55684366e54b302946\n    let in177 = CE::<\n        CI<177>,\n    > {}; // 0x2ed11ccd2e2e2376655ffe9a96c4b81adc0a60353c5d83d4d0ebf50d1bbf87c0\n    let in178 = CE::<\n        CI<178>,\n    > {}; // 0x3e31de8958e82645b320d5e3e966ef4726d5b1c2cfbb4acd288a21543c6d594\n    let in179 = CE::<\n        CI<179>,\n    > {}; // 0x11e880dfefdbd08858ae890046533d58da28a608d7e905366ec2ca4a36e71963\n    let in180 = CE::<\n        CI<180>,\n    > {}; // 0x1835b275deaed2d00704a9c3cc21ab7a44a34662978d53c190dc25e969a507b2\n    let in181 = CE::<\n        CI<181>,\n    > {}; // 0x68b75315e25ed4ace5a4a9480e1d82ce5d44f76f1324240419f372ff8d3c3f5\n    let in182 = CE::<\n        CI<182>,\n    > {}; // 0x1b7ef7d04aec73d62b052d2ad12b92a4268fccd795c839d698ad3b22823274d1\n    let in183 = CE::<\n        CI<183>,\n    > {}; // 0x28c0c848022a90606f6193ff5501b57216b670727f4b8efcc240d30bbaa9f03f\n    let in184 = CE::<\n        CI<184>,\n    > {}; // 0x13bda49296cbcc51686a7bfb1c39f3f254370985a16660efd6e5d82d4f068e1b\n    let in185 = CE::<\n        CI<185>,\n    > {}; // 0x2e7987ea8204389d11eb10b34265e378a945729f86c3e0e2fd38490d3a594141\n    let in186 = CE::<\n        CI<186>,\n    > {}; // 0x826d4a2324ad3aa4b2b45c10a190fedef702aeffda3226ce5415fffd03935c8\n    let in187 = CE::<\n        CI<187>,\n    > {}; // 0x2dbeee85eaeaa9fa3675ef541c9df7bb964a85435c3b59685f93b434036ded\n    let in188 = CE::<\n        CI<188>,\n    > {}; // 0x227ee7a945edaee6919418ecb3279b11e6fa44f5f5c5abfb966a4be599cb86c7\n    let in189 = CE::<\n        CI<189>,\n    > {}; // 0x1d0a6d1a9519877805ac90d696faf2a5ffadc23986de8c698d541471c7244220\n    let in190 = CE::<\n        CI<190>,\n    > {}; // 0x2208aaba508ae816da4f333b7854fbbcd10eea1db284ec3e9f4de02b25f6e9d4\n    let in191 = CE::<\n        CI<191>,\n    > {}; // 0x28a58901035b2c99e36a7d29b587a215c9e59268e2f8e01a175720971ccf04ec\n    let in192 = CE::<\n        CI<192>,\n    > {}; // 0x112f6d8d42b0a0d123a07865ca1376df317a2a14ffc0191226f38a8adfd6238\n    let in193 = CE::<\n        CI<193>,\n    > {}; // 0x8c6eb19c016d1833174dda182d266d5c727f97fb4d01f1daf906b6d3c6e2308\n    let in194 = CE::<\n        CI<194>,\n    > {}; // 0x1359d2d6c8b5a116d0b38b95f9c642df75b1be9a48c8698ecfea9103f73f1879\n    let in195 = CE::<\n        CI<195>,\n    > {}; // 0x10c5052ec67ab9b6a467c1cc1878d91aaa07aacf7725f8a5ed42b699c4af3ca7\n    let in196 = CE::<\n        CI<196>,\n    > {}; // 0x583c4d292d54f3cdb708803e6338fc6afdb188d5d4e9f060193823684c96c75\n    let in197 = CE::<\n        CI<197>,\n    > {}; // 0x2d94a1c55be382151a4054c5b96322e7bcd1fe2b3e076e16ee2c18bfc06f57b4\n    let in198 = CE::<\n        CI<198>,\n    > {}; // 0x15e3402fdde8770fb997369579c1b1703ef77c671927ead80dbc64dd2211c3ec\n    let in199 = CE::<\n        CI<199>,\n    > {}; // 0x185be98784817f22f7b21e6b867d5a71b5000bef8bb902eb302677e20a727be3\n    let in200 = CE::<\n        CI<200>,\n    > {}; // 0x18db4321c721c03666ed8927c89890aa8aad1b00c054547b5ca14cd94de467b6\n    let in201 = CE::<\n        CI<201>,\n    > {}; // 0x2a852b6247f5d61f0c390b3f3d799188528849bcd2cd0aff4eb2134a039b5126\n    let in202 = CE::<\n        CI<202>,\n    > {}; // 0x2510aeed51b7f506e65fb9a18ee0124aa5276f6de1cd771b165930204da58f22\n    let in203 = CE::<\n        CI<203>,\n    > {}; // 0xf2074a32eb8260fb5bd3a236f03a47b47b7fb54dcad1d7977d6486513bab5f2\n    let in204 = CE::<\n        CI<204>,\n    > {}; // 0x2f4c69297866bd45a8270e19941926cec3531c9e12c4c2c84971404bfa044090\n    let in205 = CE::<\n        CI<205>,\n    > {}; // 0x154668727d2dbadf05d083a65093c0d0e92df5fd5f3fd75e9b792c562a37473f\n    let in206 = CE::<\n        CI<206>,\n    > {}; // 0x1e6ffc5d6a1ff5dc4fd77fc5ab5c8c4e8d3e2e375bcd1194a91e5b0f7b13cadf\n    let in207 = CE::<\n        CI<207>,\n    > {}; // 0x2cf1a1d7c44309109d75acbc9395cb8398c8b2d428538571fafa389da29990c6\n    let in208 = CE::<\n        CI<208>,\n    > {}; // 0x140fb39a89f26f6d87cf76cd5ce8da47aa5d8a023e24cf016ecf64cf793c9880\n    let in209 = CE::<\n        CI<209>,\n    > {}; // 0x1289d13d58a17b5bf0712b201fb3cddfce2c16dac159990b8298a93a8589f9e8\n    let in210 = CE::<\n        CI<210>,\n    > {}; // 0xf45cf974d2c9edb5781e8d3d207adc8370cf56bc5218749610920fe98b2db2e\n    let in211 = CE::<\n        CI<211>,\n    > {}; // 0x11909c81a16518046b79edfd24f5abcc585a81d1b333568b8687a1c9eceb44d4\n    let in212 = CE::<\n        CI<212>,\n    > {}; // 0x2990b23c81882f7709f3b891a0e3da4d6917672f2d5a1041fd7bbd6792330d16\n    let in213 = CE::<\n        CI<213>,\n    > {}; // 0x609551b14716ca3cd5560e0821e7285e0a083ea9a16dc102ecf461e4aef7277\n    let in214 = CE::<\n        CI<214>,\n    > {}; // 0xc8c1abdfab99d03fd93dced2467354b6175de1755f4f93dc0880eaa08d03f77\n    let in215 = CE::<\n        CI<215>,\n    > {}; // 0x138bd098c4923b9fbd02f33f8bec6c730db3fed298ec09f78a7a55d08f2e0b10\n    let in216 = CE::<\n        CI<216>,\n    > {}; // 0x2e61e4bc021630114673f0f77161ae55dcd0b45ce07d9ae3f21bb5a3190f14c0\n    let in217 = CE::<\n        CI<217>,\n    > {}; // 0x124860913e3df8f65a9c4060ce3297c626abd1c22401c905ddb408260d8e910\n    let in218 = CE::<\n        CI<218>,\n    > {}; // 0x13807f89c394a133ec104804d955cbe125f24c5701d98286c6ac8b7ed052ec8\n    let in219 = CE::<\n        CI<219>,\n    > {}; // 0x2e88d1a6938f0788132aa9eeaec08d2f59aa444050c8f4c4e85578abb0fc2fe5\n    let in220 = CE::<\n        CI<220>,\n    > {}; // 0x1f3d24f17cfc6050a0cbf64e1f1787e2257be3c3ba607c2e8fcc1f26abf3104\n    let in221 = CE::<\n        CI<221>,\n    > {}; // 0x1fe1cb0e2ae169f83b9d4f133d41fb5b3fe6c76a82a916bfd9b62f82f0f8d0bf\n    let in222 = CE::<\n        CI<222>,\n    > {}; // 0xef79351229409cd353329221229827e19946f3d8d1c48bf5e3377f9177071f3\n    let in223 = CE::<\n        CI<223>,\n    > {}; // 0x18fb2e46fc1b90fe1c4893ef77a9d111507551883127860e89088608373beda9\n    let in224 = CE::<\n        CI<224>,\n    > {}; // 0x77afe2579f42ec14c32ef0761e23a3cc0ad6263a68c5cb61916bd57120d1868\n    let in225 = CE::<\n        CI<225>,\n    > {}; // 0x79769092daa5a752642c04ccf8a6ea54e2ac9836fdd65d248b186f1490b7b99\n    let in226 = CE::<\n        CI<226>,\n    > {}; // 0x1d8bf229c19968f0254eb6e09c5c8bfd67eb9734606b676b663c76cf76bab4a5\n    let in227 = CE::<\n        CI<227>,\n    > {}; // 0x2a33b7d855e7fe55f93556e49e4b37737664f14236f17256428f29f6ec1bddad\n    let in228 = CE::<\n        CI<228>,\n    > {}; // 0x25b0331d7e2b15af4ec161c86e84ba6ab2056077e7aa7536340dc3187ccca8b2\n    let in229 = CE::<\n        CI<229>,\n    > {}; // 0x762098f5fe26598ccbf45e4810211b0ffcf8ccbb92c16e2f4f13f22342474e2\n    let in230 = CE::<\n        CI<230>,\n    > {}; // 0xe234d720d70b2886d0da4c007b1bda42362e144185c70716dece2b6172c2514\n    let in231 = CE::<\n        CI<231>,\n    > {}; // 0x1d82bedccd2bc8a06e3742e720b7fec2ea72182f11c0c60d135c811152aa4b60\n    let in232 = CE::<\n        CI<232>,\n    > {}; // 0x480064d4b3eb0ada5e9a3e7d05930b7c3397fd6b94d481314bd1c690a17c979\n    let in233 = CE::<\n        CI<233>,\n    > {}; // 0x10a892763b3cca9ef7593fbb1140edc8c8e4580568560cf41867f7464fb0c11a\n    let in234 = CE::<\n        CI<234>,\n    > {}; // 0xb5ec64548ea841ac921f9b2553680785978b315667ae4714dde4cd7f4de8b91\n    let in235 = CE::<\n        CI<235>,\n    > {}; // 0x10554aca4e348e5949761bd7131dfaebd78010edd030e1a9ce3c65c9db931d46\n    let in236 = CE::<\n        CI<236>,\n    > {}; // 0x15be66f38d86b0998b93655462b1f475b9be9de306e150d4ac648fab3db0cff6\n    let in237 = CE::<\n        CI<237>,\n    > {}; // 0x176ad3600fd3491182d182957ffad01bf6c26e9d4ab0c23caaf308e427d3dbe8\n    let in238 = CE::<\n        CI<238>,\n    > {}; // 0x2b6f355b3dbf65f09335001d705ac125e3beb20f4fc11bd3ce82b5cf0af2e6f2\n    let in239 = CE::<\n        CI<239>,\n    > {}; // 0x1c85c06a6d5d40d81d7c89edefb32d1a8448c51288fa296b6de9ff788c77451\n    let in240 = CE::<\n        CI<240>,\n    > {}; // 0x20e1e876c4746a0cbd9a51d76b2e25f82361c389e43f7d1f51a70aaac2460d79\n    let in241 = CE::<\n        CI<241>,\n    > {}; // 0x20e46219f684186d2a024b637bc35a29ee3b08ce737701392d987dda9217fa08\n    let in242 = CE::<\n        CI<242>,\n    > {}; // 0x2ea7279db9f2aa0f654e987907277c24480766367a8bd90e28be0f2ed6091367\n    let in243 = CE::<\n        CI<243>,\n    > {}; // 0x136be2a7f18924c9362096d472bc75ca0969dc077c9171b1641be95091780f74\n    let in244 = CE::<\n        CI<244>,\n    > {}; // 0x1ca2033501baa3f73067c4300fb0f51119ed5736fbc8f1f6c924baf0df5a0e9e\n    let in245 = CE::<\n        CI<245>,\n    > {}; // 0xa82f199c2505277ecaa75e495f34e3525824f7a4a9d9fa1da810832b48a50c7\n    let in246 = CE::<\n        CI<246>,\n    > {}; // 0xecf10485307b4bae92fefb0d7f7782a9f37a2722e7ed9eb7925a2dea580b7d5\n    let in247 = CE::<\n        CI<247>,\n    > {}; // 0x7b642138dfd6a6dd12aa22f08a8296d68615c8478f13af16aebbbb339a3936b\n    let in248 = CE::<\n        CI<248>,\n    > {}; // 0x1d9dda43a25593ffd2256d34921fb86ed70e760ba76d61e9cbc3b6dd0f1a2150\n    let in249 = CE::<\n        CI<249>,\n    > {}; // 0x2f1af228520c8b751dc91136c91c6bccd5367eb08213d392958ce2fd3d7d2fce\n    let in250 = CE::<\n        CI<250>,\n    > {}; // 0x1fecfe833ad540455c6d6c1ab3de4abae61ada625a1a2b6b18551a45a6cde123\n    let in251 = CE::<\n        CI<251>,\n    > {}; // 0x18fc8e608c735b2b3b0d7583460227575657ff8a77abe637bdd3ad28e4a23c88\n    let in252 = CE::<\n        CI<252>,\n    > {}; // 0x28f740bc1182e9706ebf03cb3f53aba8a43ce0b618783a5586388a7547faa815\n    let in253 = CE::<\n        CI<253>,\n    > {}; // 0x47998cc0af5a26b94ad301e4b998d29e960a4851cfd13822bed35b7146966a4\n    let in254 = CE::<\n        CI<254>,\n    > {}; // 0x1b5f1525b31db911dda43e415e1b9a3a9725c7b52e880ee130a14a692b777b70\n    let in255 = CE::<\n        CI<255>,\n    > {}; // 0x275a83fa5d19b4535f65e965a90eac9bf770ae9bd1d7b1af945fa57ed5c8de6e\n    let in256 = CE::<\n        CI<256>,\n    > {}; // 0x2e8789257ed2cbcccb430568e49bc9dc2a563359808c9897ce3e40a6f6a27aa8\n    let in257 = CE::<\n        CI<257>,\n    > {}; // 0x927f46cfe80feefeb2721a4c09e9d17f60c34500dcd6e41e2925a39c8e2c7c1\n    let in258 = CE::<\n        CI<258>,\n    > {}; // 0x1f868ae04832a5dbc37619bfe6ab6a97fd8fb2cfbc1ecf9e0e484bbfe7698101\n    let in259 = CE::<\n        CI<259>,\n    > {}; // 0x9d7a11e27d2f53109b73f745b2defed65d94ba80f308fb19ce6d56c9b45eff4\n    let in260 = CE::<\n        CI<260>,\n    > {}; // 0x282d857cfe8da3b5104e1c2823fb7c5b9a7b25924fda5995b0c351aa2b879dff\n    let in261 = CE::<\n        CI<261>,\n    > {}; // 0x20ba8a9fcec815b13f349ff830ae663b27576e135c0744f6987fb0f6ff49c217\n    let in262 = CE::<\n        CI<262>,\n    > {}; // 0x11b6afc91e32f1ca4589fba12e657d226d57b471ddd2ab1b66a8ae4dcbfb136e\n    let in263 = CE::<\n        CI<263>,\n    > {}; // 0x2e666402ac9cc588316e335c7d93db344788eec2c72ddf3f908141736cebc3be\n    let in264 = CE::<\n        CI<264>,\n    > {}; // 0x17522e0e9e64f795a202a110e283faad7057aec5c9ed9a1a74920f2794f18595\n    let in265 = CE::<\n        CI<265>,\n    > {}; // 0x2d2ed17f7a1f3ee9e20b470cad4cc7319e6adb40e2ff24b7878cb9878edbd3b9\n    let in266 = CE::<\n        CI<266>,\n    > {}; // 0x1a81efb19d7e1edaa96fa276e89e85d08f75e54a8136f4d73c937da16c7bf9f4\n    let in267 = CE::<\n        CI<267>,\n    > {}; // 0x27ff57c1ca847e57210a7b44e52e5630f299c5f451c7a0d515a16bb3bd33e237\n    let in268 = CE::<\n        CI<268>,\n    > {}; // 0x1c1a8e22230abcd13c5be96031bfa167840d117b3c6a5a0a11be26a7f5fb1a94\n    let in269 = CE::<\n        CI<269>,\n    > {}; // 0x2a1c3f15d4927c843627a9cd533e4250d81e7774d2c32b59d5836f9c19a5657\n    let in270 = CE::<\n        CI<270>,\n    > {}; // 0x2ddbb7239eb904d81c52499b37cb4be1af0373a10ac112e185acb219899357e4\n    let in271 = CE::<\n        CI<271>,\n    > {}; // 0xdff198393085a754e0d6faec54be81d8edf8bc25edadab48a86fad6da0afb60\n    let in272 = CE::<\n        CI<272>,\n    > {}; // 0x10d50c2473146bbc76275fcc589d038dec8db28728789f28b6d5f504bd1645ca\n    let in273 = CE::<\n        CI<273>,\n    > {}; // 0x61e8328fb5593f92a53dfd40e1022e6231ba45948506282536b08b4476c1538\n    let in274 = CE::<\n        CI<274>,\n    > {}; // 0x1b589243847198ded90b644bee31ac58067debf3f07d3c51cfa5a0dd9f6d9784\n    let in275 = CE::<\n        CI<275>,\n    > {}; // 0x4b00c0da1f851e59863b053bd4c6087190f0bdcced99d5ce6f67a420a3bd1f7\n    let in276 = CE::<\n        CI<276>,\n    > {}; // 0x239941a46c2b93d9126a70163009a7ac27f8a8d42e35018b3bec8cdcb5ddfd67\n    let in277 = CE::<\n        CI<277>,\n    > {}; // 0x204f26ca7993b03ac2c35377cb0a3712bfc9bc3ec0bfecb4e87ef6814acf2ea2\n    let in278 = CE::<\n        CI<278>,\n    > {}; // 0x85aff9c7fdadba039d832d8be165a1e5747cf7308d515e348ef117e926d721c\n    let in279 = CE::<\n        CI<279>,\n    > {}; // 0x249042a8dc111f27c4ae9db044c0b0b3f10e57d05e093158efd375df00ea2068\n    let in280 = CE::<\n        CI<280>,\n    > {}; // 0x6e799bcdf2b4a74542854f3029803e2f84550665203327b3e0825977413e96b\n    let in281 = CE::<\n        CI<281>,\n    > {}; // 0x1cb3caed4bffb6aca9f4d2c002921bc3fffed333cae12085c612496183b87996\n    let in282 = CE::<\n        CI<282>,\n    > {}; // 0xb47e9755fae480128a128bfd4faa6a3dd6ea03cab566889dcd99e84d310d51c\n    let in283 = CE::<\n        CI<283>,\n    > {}; // 0xc7e4cea365c2061920a0c9fd2c360a6506293bc024fd1ca3f0bb730da886a4f\n    let in284 = CE::<\n        CI<284>,\n    > {}; // 0x21da1f701bac77bcbbaa30d964d6f6f63dbe1b20d9d6988c8dcd7ba4187215df\n    let in285 = CE::<\n        CI<285>,\n    > {}; // 0x9ae612e8ba1ca1370905fb67899d10db86b47bd19965b6edd1a9486e3c6cc55\n    let in286 = CE::<\n        CI<286>,\n    > {}; // 0x262e1e0b56cac47fc150f284491190e6aab75445b0c99373fe1f7a0e3b95cf3d\n    let in287 = CE::<\n        CI<287>,\n    > {}; // 0x234bf4a7dce7587c2c87c293e3bb7c9e2a7bfa5f29fd4ddeaa5d3f67491d34bd\n    let in288 = CE::<\n        CI<288>,\n    > {}; // 0x2f6cbac694c886b02d0a527cac744fb658d2690e213d7432eee67f6cb69f70c2\n    let in289 = CE::<\n        CI<289>,\n    > {}; // 0x22accb18b7c49b4b7bb8c9fdf78b7aded52aa1842fff818d9a3300876dec3ad9\n    let in290 = CE::<\n        CI<290>,\n    > {}; // 0x81e2f0652f898c6d659f22d2c77be302eabd9182a0b3d3cbf623a1df7f8f2fc\n    let in291 = CE::<\n        CI<291>,\n    > {}; // 0x12c0a25e70d006eccea3ada75d669b8c534b962890f3ffc016b3186ad675b935\n    let in292 = CE::<\n        CI<292>,\n    > {}; // 0x10ef9c23848128cc2fd6fc869df24d7ab56efd349edd56f49f8d4f2381df3259\n    let in293 = CE::<\n        CI<293>,\n    > {}; // 0x2161cd280772819dd4a81262b71df1bcc2c1d41b9491e0620bda347962b240f0\n    let in294 = CE::<\n        CI<294>,\n    > {}; // 0x2cebb0ae5108318eb406590041b5248292533364f799bc41b7f4fdd12cb8d38a\n    let in295 = CE::<\n        CI<295>,\n    > {}; // 0x2b2092f86b5979a7fe4f7c22d9561f3bf2852283a656880fb759e08709a0a62f\n    let in296 = CE::<\n        CI<296>,\n    > {}; // 0x1566b3402d774b8c08146188425a442450cfc900cf643e7382b2d8507a065fed\n    let in297 = CE::<\n        CI<297>,\n    > {}; // 0x11a316aa31607f268fb4c56d6c57ba01627c3635fccf8d3d1a163e601d1a0173\n    let in298 = CE::<\n        CI<298>,\n    > {}; // 0xde7ee069c934256b782648b560e595408a5e8434644609152e353d9c2874e44\n    let in299 = CE::<\n        CI<299>,\n    > {}; // 0x2d36f4029245704cc84df0297708c5e5845c36ae706c72e67128b8949eab1af\n    let in300 = CE::<\n        CI<300>,\n    > {}; // 0x1b8cc326b5ee160f53198c217fb34e899bde46cd82dabdc284d7951d546f858\n    let in301 = CE::<\n        CI<301>,\n    > {}; // 0x27625da0f73ea07110689fb2187b71694cbf9203fd4ddf8a96ece85407550ebb\n    let in302 = CE::<\n        CI<302>,\n    > {}; // 0x1cd8338a3e5b1ad7cdc0da581a6950f6dea349c3edda06cb99ba025b94e4790d\n    let in303 = CE::<\n        CI<303>,\n    > {}; // 0x5ea02d65b209f6da763856c94b6438c78a8aed8d3e67e877a10a84072741a56\n    let in304 = CE::<\n        CI<304>,\n    > {}; // 0x9f7cb68d4e388f85366cfcf284a895d8b6250ced627e810817743ce03330a55\n    let in305 = CE::<\n        CI<305>,\n    > {}; // 0x18c6230ddc0f896827b043f5e58dbd1aec13995a202e4ebcdfeb969e9d5c1212\n    let in306 = CE::<\n        CI<306>,\n    > {}; // 0x73a6114b997285e1a91c0a0fdccdaa8452e4f07bfd2e1a10578232096db6dcd\n    let in307 = CE::<\n        CI<307>,\n    > {}; // 0x2e78746340b2a6d222c6a1fc0838adf5fe013f39b1660ce7a3e7742b2f37be7f\n    let in308 = CE::<\n        CI<308>,\n    > {}; // 0x7aa27e7150baddd06303ad8e5e4bf4249b7ea846553def28e675259d3e5c851\n    let in309 = CE::<\n        CI<309>,\n    > {}; // 0xb66fdec210ea4eabf623d2712cf4d9fa90273ccb4643f680cbc98345715ead8\n    let in310 = CE::<\n        CI<310>,\n    > {}; // 0x2fb6a29d9f394a589b633b8a4d6be51c9c0601ce0b140be641acea41c49aa5e3\n    let in311 = CE::<\n        CI<311>,\n    > {}; // 0x29025cc66fd041c4fc845e9c1c2cd1288569fb243d049bd675a69dc889b2ce2a\n    let in312 = CE::<\n        CI<312>,\n    > {}; // 0x150963f0aca9bcbe4126214ab9c627a6f7ed731cfa695168b85d534b17be3f48\n    let in313 = CE::<\n        CI<313>,\n    > {}; // 0xed59780302257663f72c1bfc6656eb7b5bca2e47bec0d5798a08a32a61a8a65\n    let in314 = CE::<\n        CI<314>,\n    > {}; // 0x7e19cb8a893369b3d30ae188c767f391c11888a3000debfc8d30c06143cc084\n    let in315 = CE::<\n        CI<315>,\n    > {}; // 0x600c7d2b6946345e5f1eeeafb5eb8ec2b6ecfe528d2c052cd860afb4a3aa272\n    let in316 = CE::<\n        CI<316>,\n    > {}; // 0x596083b6c972bc13022a1f33d6523b4773f2cd0a480e19ea0125119f0385705\n    let in317 = CE::<\n        CI<317>,\n    > {}; // 0x210b5c36f27a07d97f98b9d8663d85db2e64513099a8e1ef6db21043631e24c4\n    let in318 = CE::<\n        CI<318>,\n    > {}; // 0x13bb2764bf1475cfc7bb9f3d563c5cc201c2489874e9159326a8f4930b7883f9\n    let in319 = CE::<\n        CI<319>,\n    > {}; // 0x202cf557d625c26080eb082862a76757287872b181e89997219e4b7576e24d30\n    let in320 = CE::<\n        CI<320>,\n    > {}; // 0xe561c3f8bd4f76e76d49e97142d220601fbc5a03d905a4728ea1f95fd8824b2\n    let in321 = CE::<\n        CI<321>,\n    > {}; // 0xde20097480e7555471785de07bd9809d57dd859bbe827307c33ae9ed7890597\n    let in322 = CE::<\n        CI<322>,\n    > {}; // 0x72f2a6287fb984bb810df8c5788eebcfd2825613cb72bb80cde8edd76d2e97d\n\n    // INPUT stack\n    let (in323, in324) = (CE::<CI<323>> {}, CE::<CI<324>> {});\n    let t0 = circuit_add(in0, in1);\n    let t1 = circuit_add(in323, in2);\n    let t2 = circuit_add(in324, in3);\n    let t3 = circuit_mul(t0, t0);\n    let t4 = circuit_mul(t3, t3);\n    let t5 = circuit_mul(t4, t0);\n    let t6 = circuit_mul(t1, t1);\n    let t7 = circuit_mul(t6, t6);\n    let t8 = circuit_mul(t7, t1);\n    let t9 = circuit_mul(t2, t2);\n    let t10 = circuit_mul(t9, t9);\n    let t11 = circuit_mul(t10, t2);\n    let t12 = circuit_add(t5, in4);\n    let t13 = circuit_add(t8, in5);\n    let t14 = circuit_add(t11, in6);\n    let t15 = circuit_mul(in82, t12);\n    let t16 = circuit_mul(in85, t13);\n    let t17 = circuit_mul(in88, t14);\n    let t18 = circuit_add(t15, t16);\n    let t19 = circuit_add(t18, t17);\n    let t20 = circuit_mul(in83, t12);\n    let t21 = circuit_mul(in86, t13);\n    let t22 = circuit_mul(in89, t14);\n    let t23 = circuit_add(t20, t21);\n    let t24 = circuit_add(t23, t22);\n    let t25 = circuit_mul(in84, t12);\n    let t26 = circuit_mul(in87, t13);\n    let t27 = circuit_mul(in90, t14);\n    let t28 = circuit_add(t25, t26);\n    let t29 = circuit_add(t28, t27);\n    let t30 = circuit_mul(t19, t19);\n    let t31 = circuit_mul(t30, t30);\n    let t32 = circuit_mul(t31, t19);\n    let t33 = circuit_mul(t24, t24);\n    let t34 = circuit_mul(t33, t33);\n    let t35 = circuit_mul(t34, t24);\n    let t36 = circuit_mul(t29, t29);\n    let t37 = circuit_mul(t36, t36);\n    let t38 = circuit_mul(t37, t29);\n    let t39 = circuit_add(t32, in7);\n    let t40 = circuit_add(t35, in8);\n    let t41 = circuit_add(t38, in9);\n    let t42 = circuit_mul(in82, t39);\n    let t43 = circuit_mul(in85, t40);\n    let t44 = circuit_mul(in88, t41);\n    let t45 = circuit_add(t42, t43);\n    let t46 = circuit_add(t45, t44);\n    let t47 = circuit_mul(in83, t39);\n    let t48 = circuit_mul(in86, t40);\n    let t49 = circuit_mul(in89, t41);\n    let t50 = circuit_add(t47, t48);\n    let t51 = circuit_add(t50, t49);\n    let t52 = circuit_mul(in84, t39);\n    let t53 = circuit_mul(in87, t40);\n    let t54 = circuit_mul(in90, t41);\n    let t55 = circuit_add(t52, t53);\n    let t56 = circuit_add(t55, t54);\n    let t57 = circuit_mul(t46, t46);\n    let t58 = circuit_mul(t57, t57);\n    let t59 = circuit_mul(t58, t46);\n    let t60 = circuit_mul(t51, t51);\n    let t61 = circuit_mul(t60, t60);\n    let t62 = circuit_mul(t61, t51);\n    let t63 = circuit_mul(t56, t56);\n    let t64 = circuit_mul(t63, t63);\n    let t65 = circuit_mul(t64, t56);\n    let t66 = circuit_add(t59, in10);\n    let t67 = circuit_add(t62, in11);\n    let t68 = circuit_add(t65, in12);\n    let t69 = circuit_mul(in82, t66);\n    let t70 = circuit_mul(in85, t67);\n    let t71 = circuit_mul(in88, t68);\n    let t72 = circuit_add(t69, t70);\n    let t73 = circuit_add(t72, t71);\n    let t74 = circuit_mul(in83, t66);\n    let t75 = circuit_mul(in86, t67);\n    let t76 = circuit_mul(in89, t68);\n    let t77 = circuit_add(t74, t75);\n    let t78 = circuit_add(t77, t76);\n    let t79 = circuit_mul(in84, t66);\n    let t80 = circuit_mul(in87, t67);\n    let t81 = circuit_mul(in90, t68);\n    let t82 = circuit_add(t79, t80);\n    let t83 = circuit_add(t82, t81);\n    let t84 = circuit_mul(t73, t73);\n    let t85 = circuit_mul(t84, t84);\n    let t86 = circuit_mul(t85, t73);\n    let t87 = circuit_mul(t78, t78);\n    let t88 = circuit_mul(t87, t87);\n    let t89 = circuit_mul(t88, t78);\n    let t90 = circuit_mul(t83, t83);\n    let t91 = circuit_mul(t90, t90);\n    let t92 = circuit_mul(t91, t83);\n    let t93 = circuit_add(t86, in13);\n    let t94 = circuit_add(t89, in14);\n    let t95 = circuit_add(t92, in15);\n    let t96 = circuit_mul(in82, t93);\n    let t97 = circuit_mul(in85, t94);\n    let t98 = circuit_mul(in88, t95);\n    let t99 = circuit_add(t96, t97);\n    let t100 = circuit_add(t99, t98);\n    let t101 = circuit_mul(in91, t93);\n    let t102 = circuit_mul(in93, t94);\n    let t103 = circuit_mul(in95, t95);\n    let t104 = circuit_add(t101, t102);\n    let t105 = circuit_add(t104, t103);\n    let t106 = circuit_mul(in92, t93);\n    let t107 = circuit_mul(in94, t94);\n    let t108 = circuit_mul(in96, t95);\n    let t109 = circuit_add(t106, t107);\n    let t110 = circuit_add(t109, t108);\n    let t111 = circuit_mul(t100, t100);\n    let t112 = circuit_mul(t111, t111);\n    let t113 = circuit_mul(t112, t100);\n    let t114 = circuit_add(t113, in16);\n    let t115 = circuit_mul(in82, t114);\n    let t116 = circuit_mul(in97, t105);\n    let t117 = circuit_mul(in98, t110);\n    let t118 = circuit_add(t115, t116);\n    let t119 = circuit_add(t118, t117);\n    let t120 = circuit_mul(t114, in99);\n    let t121 = circuit_add(t105, t120);\n    let t122 = circuit_mul(t114, in100);\n    let t123 = circuit_add(t110, t122);\n    let t124 = circuit_mul(t119, t119);\n    let t125 = circuit_mul(t124, t124);\n    let t126 = circuit_mul(t125, t119);\n    let t127 = circuit_add(t126, in17);\n    let t128 = circuit_mul(in82, t127);\n    let t129 = circuit_mul(in101, t121);\n    let t130 = circuit_mul(in102, t123);\n    let t131 = circuit_add(t128, t129);\n    let t132 = circuit_add(t131, t130);\n    let t133 = circuit_mul(t127, in103);\n    let t134 = circuit_add(t121, t133);\n    let t135 = circuit_mul(t127, in104);\n    let t136 = circuit_add(t123, t135);\n    let t137 = circuit_mul(t132, t132);\n    let t138 = circuit_mul(t137, t137);\n    let t139 = circuit_mul(t138, t132);\n    let t140 = circuit_add(t139, in18);\n    let t141 = circuit_mul(in82, t140);\n    let t142 = circuit_mul(in105, t134);\n    let t143 = circuit_mul(in106, t136);\n    let t144 = circuit_add(t141, t142);\n    let t145 = circuit_add(t144, t143);\n    let t146 = circuit_mul(t140, in107);\n    let t147 = circuit_add(t134, t146);\n    let t148 = circuit_mul(t140, in108);\n    let t149 = circuit_add(t136, t148);\n    let t150 = circuit_mul(t145, t145);\n    let t151 = circuit_mul(t150, t150);\n    let t152 = circuit_mul(t151, t145);\n    let t153 = circuit_add(t152, in19);\n    let t154 = circuit_mul(in82, t153);\n    let t155 = circuit_mul(in109, t147);\n    let t156 = circuit_mul(in110, t149);\n    let t157 = circuit_add(t154, t155);\n    let t158 = circuit_add(t157, t156);\n    let t159 = circuit_mul(t153, in111);\n    let t160 = circuit_add(t147, t159);\n    let t161 = circuit_mul(t153, in112);\n    let t162 = circuit_add(t149, t161);\n    let t163 = circuit_mul(t158, t158);\n    let t164 = circuit_mul(t163, t163);\n    let t165 = circuit_mul(t164, t158);\n    let t166 = circuit_add(t165, in20);\n    let t167 = circuit_mul(in82, t166);\n    let t168 = circuit_mul(in113, t160);\n    let t169 = circuit_mul(in114, t162);\n    let t170 = circuit_add(t167, t168);\n    let t171 = circuit_add(t170, t169);\n    let t172 = circuit_mul(t166, in115);\n    let t173 = circuit_add(t160, t172);\n    let t174 = circuit_mul(t166, in116);\n    let t175 = circuit_add(t162, t174);\n    let t176 = circuit_mul(t171, t171);\n    let t177 = circuit_mul(t176, t176);\n    let t178 = circuit_mul(t177, t171);\n    let t179 = circuit_add(t178, in21);\n    let t180 = circuit_mul(in82, t179);\n    let t181 = circuit_mul(in117, t173);\n    let t182 = circuit_mul(in118, t175);\n    let t183 = circuit_add(t180, t181);\n    let t184 = circuit_add(t183, t182);\n    let t185 = circuit_mul(t179, in119);\n    let t186 = circuit_add(t173, t185);\n    let t187 = circuit_mul(t179, in120);\n    let t188 = circuit_add(t175, t187);\n    let t189 = circuit_mul(t184, t184);\n    let t190 = circuit_mul(t189, t189);\n    let t191 = circuit_mul(t190, t184);\n    let t192 = circuit_add(t191, in22);\n    let t193 = circuit_mul(in82, t192);\n    let t194 = circuit_mul(in121, t186);\n    let t195 = circuit_mul(in122, t188);\n    let t196 = circuit_add(t193, t194);\n    let t197 = circuit_add(t196, t195);\n    let t198 = circuit_mul(t192, in123);\n    let t199 = circuit_add(t186, t198);\n    let t200 = circuit_mul(t192, in124);\n    let t201 = circuit_add(t188, t200);\n    let t202 = circuit_mul(t197, t197);\n    let t203 = circuit_mul(t202, t202);\n    let t204 = circuit_mul(t203, t197);\n    let t205 = circuit_add(t204, in23);\n    let t206 = circuit_mul(in82, t205);\n    let t207 = circuit_mul(in125, t199);\n    let t208 = circuit_mul(in126, t201);\n    let t209 = circuit_add(t206, t207);\n    let t210 = circuit_add(t209, t208);\n    let t211 = circuit_mul(t205, in127);\n    let t212 = circuit_add(t199, t211);\n    let t213 = circuit_mul(t205, in128);\n    let t214 = circuit_add(t201, t213);\n    let t215 = circuit_mul(t210, t210);\n    let t216 = circuit_mul(t215, t215);\n    let t217 = circuit_mul(t216, t210);\n    let t218 = circuit_add(t217, in24);\n    let t219 = circuit_mul(in82, t218);\n    let t220 = circuit_mul(in129, t212);\n    let t221 = circuit_mul(in130, t214);\n    let t222 = circuit_add(t219, t220);\n    let t223 = circuit_add(t222, t221);\n    let t224 = circuit_mul(t218, in131);\n    let t225 = circuit_add(t212, t224);\n    let t226 = circuit_mul(t218, in132);\n    let t227 = circuit_add(t214, t226);\n    let t228 = circuit_mul(t223, t223);\n    let t229 = circuit_mul(t228, t228);\n    let t230 = circuit_mul(t229, t223);\n    let t231 = circuit_add(t230, in25);\n    let t232 = circuit_mul(in82, t231);\n    let t233 = circuit_mul(in133, t225);\n    let t234 = circuit_mul(in134, t227);\n    let t235 = circuit_add(t232, t233);\n    let t236 = circuit_add(t235, t234);\n    let t237 = circuit_mul(t231, in135);\n    let t238 = circuit_add(t225, t237);\n    let t239 = circuit_mul(t231, in136);\n    let t240 = circuit_add(t227, t239);\n    let t241 = circuit_mul(t236, t236);\n    let t242 = circuit_mul(t241, t241);\n    let t243 = circuit_mul(t242, t236);\n    let t244 = circuit_add(t243, in26);\n    let t245 = circuit_mul(in82, t244);\n    let t246 = circuit_mul(in137, t238);\n    let t247 = circuit_mul(in138, t240);\n    let t248 = circuit_add(t245, t246);\n    let t249 = circuit_add(t248, t247);\n    let t250 = circuit_mul(t244, in139);\n    let t251 = circuit_add(t238, t250);\n    let t252 = circuit_mul(t244, in140);\n    let t253 = circuit_add(t240, t252);\n    let t254 = circuit_mul(t249, t249);\n    let t255 = circuit_mul(t254, t254);\n    let t256 = circuit_mul(t255, t249);\n    let t257 = circuit_add(t256, in27);\n    let t258 = circuit_mul(in82, t257);\n    let t259 = circuit_mul(in141, t251);\n    let t260 = circuit_mul(in142, t253);\n    let t261 = circuit_add(t258, t259);\n    let t262 = circuit_add(t261, t260);\n    let t263 = circuit_mul(t257, in143);\n    let t264 = circuit_add(t251, t263);\n    let t265 = circuit_mul(t257, in144);\n    let t266 = circuit_add(t253, t265);\n    let t267 = circuit_mul(t262, t262);\n    let t268 = circuit_mul(t267, t267);\n    let t269 = circuit_mul(t268, t262);\n    let t270 = circuit_add(t269, in28);\n    let t271 = circuit_mul(in82, t270);\n    let t272 = circuit_mul(in145, t264);\n    let t273 = circuit_mul(in146, t266);\n    let t274 = circuit_add(t271, t272);\n    let t275 = circuit_add(t274, t273);\n    let t276 = circuit_mul(t270, in147);\n    let t277 = circuit_add(t264, t276);\n    let t278 = circuit_mul(t270, in148);\n    let t279 = circuit_add(t266, t278);\n    let t280 = circuit_mul(t275, t275);\n    let t281 = circuit_mul(t280, t280);\n    let t282 = circuit_mul(t281, t275);\n    let t283 = circuit_add(t282, in29);\n    let t284 = circuit_mul(in82, t283);\n    let t285 = circuit_mul(in149, t277);\n    let t286 = circuit_mul(in150, t279);\n    let t287 = circuit_add(t284, t285);\n    let t288 = circuit_add(t287, t286);\n    let t289 = circuit_mul(t283, in151);\n    let t290 = circuit_add(t277, t289);\n    let t291 = circuit_mul(t283, in152);\n    let t292 = circuit_add(t279, t291);\n    let t293 = circuit_mul(t288, t288);\n    let t294 = circuit_mul(t293, t293);\n    let t295 = circuit_mul(t294, t288);\n    let t296 = circuit_add(t295, in30);\n    let t297 = circuit_mul(in82, t296);\n    let t298 = circuit_mul(in153, t290);\n    let t299 = circuit_mul(in154, t292);\n    let t300 = circuit_add(t297, t298);\n    let t301 = circuit_add(t300, t299);\n    let t302 = circuit_mul(t296, in155);\n    let t303 = circuit_add(t290, t302);\n    let t304 = circuit_mul(t296, in156);\n    let t305 = circuit_add(t292, t304);\n    let t306 = circuit_mul(t301, t301);\n    let t307 = circuit_mul(t306, t306);\n    let t308 = circuit_mul(t307, t301);\n    let t309 = circuit_add(t308, in31);\n    let t310 = circuit_mul(in82, t309);\n    let t311 = circuit_mul(in157, t303);\n    let t312 = circuit_mul(in158, t305);\n    let t313 = circuit_add(t310, t311);\n    let t314 = circuit_add(t313, t312);\n    let t315 = circuit_mul(t309, in159);\n    let t316 = circuit_add(t303, t315);\n    let t317 = circuit_mul(t309, in160);\n    let t318 = circuit_add(t305, t317);\n    let t319 = circuit_mul(t314, t314);\n    let t320 = circuit_mul(t319, t319);\n    let t321 = circuit_mul(t320, t314);\n    let t322 = circuit_add(t321, in32);\n    let t323 = circuit_mul(in82, t322);\n    let t324 = circuit_mul(in161, t316);\n    let t325 = circuit_mul(in162, t318);\n    let t326 = circuit_add(t323, t324);\n    let t327 = circuit_add(t326, t325);\n    let t328 = circuit_mul(t322, in163);\n    let t329 = circuit_add(t316, t328);\n    let t330 = circuit_mul(t322, in164);\n    let t331 = circuit_add(t318, t330);\n    let t332 = circuit_mul(t327, t327);\n    let t333 = circuit_mul(t332, t332);\n    let t334 = circuit_mul(t333, t327);\n    let t335 = circuit_add(t334, in33);\n    let t336 = circuit_mul(in82, t335);\n    let t337 = circuit_mul(in165, t329);\n    let t338 = circuit_mul(in166, t331);\n    let t339 = circuit_add(t336, t337);\n    let t340 = circuit_add(t339, t338);\n    let t341 = circuit_mul(t335, in167);\n    let t342 = circuit_add(t329, t341);\n    let t343 = circuit_mul(t335, in168);\n    let t344 = circuit_add(t331, t343);\n    let t345 = circuit_mul(t340, t340);\n    let t346 = circuit_mul(t345, t345);\n    let t347 = circuit_mul(t346, t340);\n    let t348 = circuit_add(t347, in34);\n    let t349 = circuit_mul(in82, t348);\n    let t350 = circuit_mul(in169, t342);\n    let t351 = circuit_mul(in170, t344);\n    let t352 = circuit_add(t349, t350);\n    let t353 = circuit_add(t352, t351);\n    let t354 = circuit_mul(t348, in171);\n    let t355 = circuit_add(t342, t354);\n    let t356 = circuit_mul(t348, in172);\n    let t357 = circuit_add(t344, t356);\n    let t358 = circuit_mul(t353, t353);\n    let t359 = circuit_mul(t358, t358);\n    let t360 = circuit_mul(t359, t353);\n    let t361 = circuit_add(t360, in35);\n    let t362 = circuit_mul(in82, t361);\n    let t363 = circuit_mul(in173, t355);\n    let t364 = circuit_mul(in174, t357);\n    let t365 = circuit_add(t362, t363);\n    let t366 = circuit_add(t365, t364);\n    let t367 = circuit_mul(t361, in175);\n    let t368 = circuit_add(t355, t367);\n    let t369 = circuit_mul(t361, in176);\n    let t370 = circuit_add(t357, t369);\n    let t371 = circuit_mul(t366, t366);\n    let t372 = circuit_mul(t371, t371);\n    let t373 = circuit_mul(t372, t366);\n    let t374 = circuit_add(t373, in36);\n    let t375 = circuit_mul(in82, t374);\n    let t376 = circuit_mul(in177, t368);\n    let t377 = circuit_mul(in178, t370);\n    let t378 = circuit_add(t375, t376);\n    let t379 = circuit_add(t378, t377);\n    let t380 = circuit_mul(t374, in179);\n    let t381 = circuit_add(t368, t380);\n    let t382 = circuit_mul(t374, in180);\n    let t383 = circuit_add(t370, t382);\n    let t384 = circuit_mul(t379, t379);\n    let t385 = circuit_mul(t384, t384);\n    let t386 = circuit_mul(t385, t379);\n    let t387 = circuit_add(t386, in37);\n    let t388 = circuit_mul(in82, t387);\n    let t389 = circuit_mul(in181, t381);\n    let t390 = circuit_mul(in182, t383);\n    let t391 = circuit_add(t388, t389);\n    let t392 = circuit_add(t391, t390);\n    let t393 = circuit_mul(t387, in183);\n    let t394 = circuit_add(t381, t393);\n    let t395 = circuit_mul(t387, in184);\n    let t396 = circuit_add(t383, t395);\n    let t397 = circuit_mul(t392, t392);\n    let t398 = circuit_mul(t397, t397);\n    let t399 = circuit_mul(t398, t392);\n    let t400 = circuit_add(t399, in38);\n    let t401 = circuit_mul(in82, t400);\n    let t402 = circuit_mul(in185, t394);\n    let t403 = circuit_mul(in186, t396);\n    let t404 = circuit_add(t401, t402);\n    let t405 = circuit_add(t404, t403);\n    let t406 = circuit_mul(t400, in187);\n    let t407 = circuit_add(t394, t406);\n    let t408 = circuit_mul(t400, in188);\n    let t409 = circuit_add(t396, t408);\n    let t410 = circuit_mul(t405, t405);\n    let t411 = circuit_mul(t410, t410);\n    let t412 = circuit_mul(t411, t405);\n    let t413 = circuit_add(t412, in39);\n    let t414 = circuit_mul(in82, t413);\n    let t415 = circuit_mul(in189, t407);\n    let t416 = circuit_mul(in190, t409);\n    let t417 = circuit_add(t414, t415);\n    let t418 = circuit_add(t417, t416);\n    let t419 = circuit_mul(t413, in191);\n    let t420 = circuit_add(t407, t419);\n    let t421 = circuit_mul(t413, in192);\n    let t422 = circuit_add(t409, t421);\n    let t423 = circuit_mul(t418, t418);\n    let t424 = circuit_mul(t423, t423);\n    let t425 = circuit_mul(t424, t418);\n    let t426 = circuit_add(t425, in40);\n    let t427 = circuit_mul(in82, t426);\n    let t428 = circuit_mul(in193, t420);\n    let t429 = circuit_mul(in194, t422);\n    let t430 = circuit_add(t427, t428);\n    let t431 = circuit_add(t430, t429);\n    let t432 = circuit_mul(t426, in195);\n    let t433 = circuit_add(t420, t432);\n    let t434 = circuit_mul(t426, in196);\n    let t435 = circuit_add(t422, t434);\n    let t436 = circuit_mul(t431, t431);\n    let t437 = circuit_mul(t436, t436);\n    let t438 = circuit_mul(t437, t431);\n    let t439 = circuit_add(t438, in41);\n    let t440 = circuit_mul(in82, t439);\n    let t441 = circuit_mul(in197, t433);\n    let t442 = circuit_mul(in198, t435);\n    let t443 = circuit_add(t440, t441);\n    let t444 = circuit_add(t443, t442);\n    let t445 = circuit_mul(t439, in199);\n    let t446 = circuit_add(t433, t445);\n    let t447 = circuit_mul(t439, in200);\n    let t448 = circuit_add(t435, t447);\n    let t449 = circuit_mul(t444, t444);\n    let t450 = circuit_mul(t449, t449);\n    let t451 = circuit_mul(t450, t444);\n    let t452 = circuit_add(t451, in42);\n    let t453 = circuit_mul(in82, t452);\n    let t454 = circuit_mul(in201, t446);\n    let t455 = circuit_mul(in202, t448);\n    let t456 = circuit_add(t453, t454);\n    let t457 = circuit_add(t456, t455);\n    let t458 = circuit_mul(t452, in203);\n    let t459 = circuit_add(t446, t458);\n    let t460 = circuit_mul(t452, in204);\n    let t461 = circuit_add(t448, t460);\n    let t462 = circuit_mul(t457, t457);\n    let t463 = circuit_mul(t462, t462);\n    let t464 = circuit_mul(t463, t457);\n    let t465 = circuit_add(t464, in43);\n    let t466 = circuit_mul(in82, t465);\n    let t467 = circuit_mul(in205, t459);\n    let t468 = circuit_mul(in206, t461);\n    let t469 = circuit_add(t466, t467);\n    let t470 = circuit_add(t469, t468);\n    let t471 = circuit_mul(t465, in207);\n    let t472 = circuit_add(t459, t471);\n    let t473 = circuit_mul(t465, in208);\n    let t474 = circuit_add(t461, t473);\n    let t475 = circuit_mul(t470, t470);\n    let t476 = circuit_mul(t475, t475);\n    let t477 = circuit_mul(t476, t470);\n    let t478 = circuit_add(t477, in44);\n    let t479 = circuit_mul(in82, t478);\n    let t480 = circuit_mul(in209, t472);\n    let t481 = circuit_mul(in210, t474);\n    let t482 = circuit_add(t479, t480);\n    let t483 = circuit_add(t482, t481);\n    let t484 = circuit_mul(t478, in211);\n    let t485 = circuit_add(t472, t484);\n    let t486 = circuit_mul(t478, in212);\n    let t487 = circuit_add(t474, t486);\n    let t488 = circuit_mul(t483, t483);\n    let t489 = circuit_mul(t488, t488);\n    let t490 = circuit_mul(t489, t483);\n    let t491 = circuit_add(t490, in45);\n    let t492 = circuit_mul(in82, t491);\n    let t493 = circuit_mul(in213, t485);\n    let t494 = circuit_mul(in214, t487);\n    let t495 = circuit_add(t492, t493);\n    let t496 = circuit_add(t495, t494);\n    let t497 = circuit_mul(t491, in215);\n    let t498 = circuit_add(t485, t497);\n    let t499 = circuit_mul(t491, in216);\n    let t500 = circuit_add(t487, t499);\n    let t501 = circuit_mul(t496, t496);\n    let t502 = circuit_mul(t501, t501);\n    let t503 = circuit_mul(t502, t496);\n    let t504 = circuit_add(t503, in46);\n    let t505 = circuit_mul(in82, t504);\n    let t506 = circuit_mul(in217, t498);\n    let t507 = circuit_mul(in218, t500);\n    let t508 = circuit_add(t505, t506);\n    let t509 = circuit_add(t508, t507);\n    let t510 = circuit_mul(t504, in219);\n    let t511 = circuit_add(t498, t510);\n    let t512 = circuit_mul(t504, in220);\n    let t513 = circuit_add(t500, t512);\n    let t514 = circuit_mul(t509, t509);\n    let t515 = circuit_mul(t514, t514);\n    let t516 = circuit_mul(t515, t509);\n    let t517 = circuit_add(t516, in47);\n    let t518 = circuit_mul(in82, t517);\n    let t519 = circuit_mul(in221, t511);\n    let t520 = circuit_mul(in222, t513);\n    let t521 = circuit_add(t518, t519);\n    let t522 = circuit_add(t521, t520);\n    let t523 = circuit_mul(t517, in223);\n    let t524 = circuit_add(t511, t523);\n    let t525 = circuit_mul(t517, in224);\n    let t526 = circuit_add(t513, t525);\n    let t527 = circuit_mul(t522, t522);\n    let t528 = circuit_mul(t527, t527);\n    let t529 = circuit_mul(t528, t522);\n    let t530 = circuit_add(t529, in48);\n    let t531 = circuit_mul(in82, t530);\n    let t532 = circuit_mul(in225, t524);\n    let t533 = circuit_mul(in226, t526);\n    let t534 = circuit_add(t531, t532);\n    let t535 = circuit_add(t534, t533);\n    let t536 = circuit_mul(t530, in227);\n    let t537 = circuit_add(t524, t536);\n    let t538 = circuit_mul(t530, in228);\n    let t539 = circuit_add(t526, t538);\n    let t540 = circuit_mul(t535, t535);\n    let t541 = circuit_mul(t540, t540);\n    let t542 = circuit_mul(t541, t535);\n    let t543 = circuit_add(t542, in49);\n    let t544 = circuit_mul(in82, t543);\n    let t545 = circuit_mul(in229, t537);\n    let t546 = circuit_mul(in230, t539);\n    let t547 = circuit_add(t544, t545);\n    let t548 = circuit_add(t547, t546);\n    let t549 = circuit_mul(t543, in231);\n    let t550 = circuit_add(t537, t549);\n    let t551 = circuit_mul(t543, in232);\n    let t552 = circuit_add(t539, t551);\n    let t553 = circuit_mul(t548, t548);\n    let t554 = circuit_mul(t553, t553);\n    let t555 = circuit_mul(t554, t548);\n    let t556 = circuit_add(t555, in50);\n    let t557 = circuit_mul(in82, t556);\n    let t558 = circuit_mul(in233, t550);\n    let t559 = circuit_mul(in234, t552);\n    let t560 = circuit_add(t557, t558);\n    let t561 = circuit_add(t560, t559);\n    let t562 = circuit_mul(t556, in235);\n    let t563 = circuit_add(t550, t562);\n    let t564 = circuit_mul(t556, in236);\n    let t565 = circuit_add(t552, t564);\n    let t566 = circuit_mul(t561, t561);\n    let t567 = circuit_mul(t566, t566);\n    let t568 = circuit_mul(t567, t561);\n    let t569 = circuit_add(t568, in51);\n    let t570 = circuit_mul(in82, t569);\n    let t571 = circuit_mul(in237, t563);\n    let t572 = circuit_mul(in238, t565);\n    let t573 = circuit_add(t570, t571);\n    let t574 = circuit_add(t573, t572);\n    let t575 = circuit_mul(t569, in239);\n    let t576 = circuit_add(t563, t575);\n    let t577 = circuit_mul(t569, in240);\n    let t578 = circuit_add(t565, t577);\n    let t579 = circuit_mul(t574, t574);\n    let t580 = circuit_mul(t579, t579);\n    let t581 = circuit_mul(t580, t574);\n    let t582 = circuit_add(t581, in52);\n    let t583 = circuit_mul(in82, t582);\n    let t584 = circuit_mul(in241, t576);\n    let t585 = circuit_mul(in242, t578);\n    let t586 = circuit_add(t583, t584);\n    let t587 = circuit_add(t586, t585);\n    let t588 = circuit_mul(t582, in243);\n    let t589 = circuit_add(t576, t588);\n    let t590 = circuit_mul(t582, in244);\n    let t591 = circuit_add(t578, t590);\n    let t592 = circuit_mul(t587, t587);\n    let t593 = circuit_mul(t592, t592);\n    let t594 = circuit_mul(t593, t587);\n    let t595 = circuit_add(t594, in53);\n    let t596 = circuit_mul(in82, t595);\n    let t597 = circuit_mul(in245, t589);\n    let t598 = circuit_mul(in246, t591);\n    let t599 = circuit_add(t596, t597);\n    let t600 = circuit_add(t599, t598);\n    let t601 = circuit_mul(t595, in247);\n    let t602 = circuit_add(t589, t601);\n    let t603 = circuit_mul(t595, in248);\n    let t604 = circuit_add(t591, t603);\n    let t605 = circuit_mul(t600, t600);\n    let t606 = circuit_mul(t605, t605);\n    let t607 = circuit_mul(t606, t600);\n    let t608 = circuit_add(t607, in54);\n    let t609 = circuit_mul(in82, t608);\n    let t610 = circuit_mul(in249, t602);\n    let t611 = circuit_mul(in250, t604);\n    let t612 = circuit_add(t609, t610);\n    let t613 = circuit_add(t612, t611);\n    let t614 = circuit_mul(t608, in251);\n    let t615 = circuit_add(t602, t614);\n    let t616 = circuit_mul(t608, in252);\n    let t617 = circuit_add(t604, t616);\n    let t618 = circuit_mul(t613, t613);\n    let t619 = circuit_mul(t618, t618);\n    let t620 = circuit_mul(t619, t613);\n    let t621 = circuit_add(t620, in55);\n    let t622 = circuit_mul(in82, t621);\n    let t623 = circuit_mul(in253, t615);\n    let t624 = circuit_mul(in254, t617);\n    let t625 = circuit_add(t622, t623);\n    let t626 = circuit_add(t625, t624);\n    let t627 = circuit_mul(t621, in255);\n    let t628 = circuit_add(t615, t627);\n    let t629 = circuit_mul(t621, in256);\n    let t630 = circuit_add(t617, t629);\n    let t631 = circuit_mul(t626, t626);\n    let t632 = circuit_mul(t631, t631);\n    let t633 = circuit_mul(t632, t626);\n    let t634 = circuit_add(t633, in56);\n    let t635 = circuit_mul(in82, t634);\n    let t636 = circuit_mul(in257, t628);\n    let t637 = circuit_mul(in258, t630);\n    let t638 = circuit_add(t635, t636);\n    let t639 = circuit_add(t638, t637);\n    let t640 = circuit_mul(t634, in259);\n    let t641 = circuit_add(t628, t640);\n    let t642 = circuit_mul(t634, in260);\n    let t643 = circuit_add(t630, t642);\n    let t644 = circuit_mul(t639, t639);\n    let t645 = circuit_mul(t644, t644);\n    let t646 = circuit_mul(t645, t639);\n    let t647 = circuit_add(t646, in57);\n    let t648 = circuit_mul(in82, t647);\n    let t649 = circuit_mul(in261, t641);\n    let t650 = circuit_mul(in262, t643);\n    let t651 = circuit_add(t648, t649);\n    let t652 = circuit_add(t651, t650);\n    let t653 = circuit_mul(t647, in263);\n    let t654 = circuit_add(t641, t653);\n    let t655 = circuit_mul(t647, in264);\n    let t656 = circuit_add(t643, t655);\n    let t657 = circuit_mul(t652, t652);\n    let t658 = circuit_mul(t657, t657);\n    let t659 = circuit_mul(t658, t652);\n    let t660 = circuit_add(t659, in58);\n    let t661 = circuit_mul(in82, t660);\n    let t662 = circuit_mul(in265, t654);\n    let t663 = circuit_mul(in266, t656);\n    let t664 = circuit_add(t661, t662);\n    let t665 = circuit_add(t664, t663);\n    let t666 = circuit_mul(t660, in267);\n    let t667 = circuit_add(t654, t666);\n    let t668 = circuit_mul(t660, in268);\n    let t669 = circuit_add(t656, t668);\n    let t670 = circuit_mul(t665, t665);\n    let t671 = circuit_mul(t670, t670);\n    let t672 = circuit_mul(t671, t665);\n    let t673 = circuit_add(t672, in59);\n    let t674 = circuit_mul(in82, t673);\n    let t675 = circuit_mul(in269, t667);\n    let t676 = circuit_mul(in270, t669);\n    let t677 = circuit_add(t674, t675);\n    let t678 = circuit_add(t677, t676);\n    let t679 = circuit_mul(t673, in271);\n    let t680 = circuit_add(t667, t679);\n    let t681 = circuit_mul(t673, in272);\n    let t682 = circuit_add(t669, t681);\n    let t683 = circuit_mul(t678, t678);\n    let t684 = circuit_mul(t683, t683);\n    let t685 = circuit_mul(t684, t678);\n    let t686 = circuit_add(t685, in60);\n    let t687 = circuit_mul(in82, t686);\n    let t688 = circuit_mul(in273, t680);\n    let t689 = circuit_mul(in274, t682);\n    let t690 = circuit_add(t687, t688);\n    let t691 = circuit_add(t690, t689);\n    let t692 = circuit_mul(t686, in275);\n    let t693 = circuit_add(t680, t692);\n    let t694 = circuit_mul(t686, in276);\n    let t695 = circuit_add(t682, t694);\n    let t696 = circuit_mul(t691, t691);\n    let t697 = circuit_mul(t696, t696);\n    let t698 = circuit_mul(t697, t691);\n    let t699 = circuit_add(t698, in61);\n    let t700 = circuit_mul(in82, t699);\n    let t701 = circuit_mul(in277, t693);\n    let t702 = circuit_mul(in278, t695);\n    let t703 = circuit_add(t700, t701);\n    let t704 = circuit_add(t703, t702);\n    let t705 = circuit_mul(t699, in279);\n    let t706 = circuit_add(t693, t705);\n    let t707 = circuit_mul(t699, in280);\n    let t708 = circuit_add(t695, t707);\n    let t709 = circuit_mul(t704, t704);\n    let t710 = circuit_mul(t709, t709);\n    let t711 = circuit_mul(t710, t704);\n    let t712 = circuit_add(t711, in62);\n    let t713 = circuit_mul(in82, t712);\n    let t714 = circuit_mul(in281, t706);\n    let t715 = circuit_mul(in282, t708);\n    let t716 = circuit_add(t713, t714);\n    let t717 = circuit_add(t716, t715);\n    let t718 = circuit_mul(t712, in283);\n    let t719 = circuit_add(t706, t718);\n    let t720 = circuit_mul(t712, in284);\n    let t721 = circuit_add(t708, t720);\n    let t722 = circuit_mul(t717, t717);\n    let t723 = circuit_mul(t722, t722);\n    let t724 = circuit_mul(t723, t717);\n    let t725 = circuit_add(t724, in63);\n    let t726 = circuit_mul(in82, t725);\n    let t727 = circuit_mul(in285, t719);\n    let t728 = circuit_mul(in286, t721);\n    let t729 = circuit_add(t726, t727);\n    let t730 = circuit_add(t729, t728);\n    let t731 = circuit_mul(t725, in287);\n    let t732 = circuit_add(t719, t731);\n    let t733 = circuit_mul(t725, in288);\n    let t734 = circuit_add(t721, t733);\n    let t735 = circuit_mul(t730, t730);\n    let t736 = circuit_mul(t735, t735);\n    let t737 = circuit_mul(t736, t730);\n    let t738 = circuit_add(t737, in64);\n    let t739 = circuit_mul(in82, t738);\n    let t740 = circuit_mul(in289, t732);\n    let t741 = circuit_mul(in290, t734);\n    let t742 = circuit_add(t739, t740);\n    let t743 = circuit_add(t742, t741);\n    let t744 = circuit_mul(t738, in291);\n    let t745 = circuit_add(t732, t744);\n    let t746 = circuit_mul(t738, in292);\n    let t747 = circuit_add(t734, t746);\n    let t748 = circuit_mul(t743, t743);\n    let t749 = circuit_mul(t748, t748);\n    let t750 = circuit_mul(t749, t743);\n    let t751 = circuit_add(t750, in65);\n    let t752 = circuit_mul(in82, t751);\n    let t753 = circuit_mul(in293, t745);\n    let t754 = circuit_mul(in294, t747);\n    let t755 = circuit_add(t752, t753);\n    let t756 = circuit_add(t755, t754);\n    let t757 = circuit_mul(t751, in295);\n    let t758 = circuit_add(t745, t757);\n    let t759 = circuit_mul(t751, in296);\n    let t760 = circuit_add(t747, t759);\n    let t761 = circuit_mul(t756, t756);\n    let t762 = circuit_mul(t761, t761);\n    let t763 = circuit_mul(t762, t756);\n    let t764 = circuit_add(t763, in66);\n    let t765 = circuit_mul(in82, t764);\n    let t766 = circuit_mul(in297, t758);\n    let t767 = circuit_mul(in298, t760);\n    let t768 = circuit_add(t765, t766);\n    let t769 = circuit_add(t768, t767);\n    let t770 = circuit_mul(t764, in299);\n    let t771 = circuit_add(t758, t770);\n    let t772 = circuit_mul(t764, in300);\n    let t773 = circuit_add(t760, t772);\n    let t774 = circuit_mul(t769, t769);\n    let t775 = circuit_mul(t774, t774);\n    let t776 = circuit_mul(t775, t769);\n    let t777 = circuit_add(t776, in67);\n    let t778 = circuit_mul(in82, t777);\n    let t779 = circuit_mul(in301, t771);\n    let t780 = circuit_mul(in302, t773);\n    let t781 = circuit_add(t778, t779);\n    let t782 = circuit_add(t781, t780);\n    let t783 = circuit_mul(t777, in303);\n    let t784 = circuit_add(t771, t783);\n    let t785 = circuit_mul(t777, in304);\n    let t786 = circuit_add(t773, t785);\n    let t787 = circuit_mul(t782, t782);\n    let t788 = circuit_mul(t787, t787);\n    let t789 = circuit_mul(t788, t782);\n    let t790 = circuit_add(t789, in68);\n    let t791 = circuit_mul(in82, t790);\n    let t792 = circuit_mul(in305, t784);\n    let t793 = circuit_mul(in306, t786);\n    let t794 = circuit_add(t791, t792);\n    let t795 = circuit_add(t794, t793);\n    let t796 = circuit_mul(t790, in307);\n    let t797 = circuit_add(t784, t796);\n    let t798 = circuit_mul(t790, in308);\n    let t799 = circuit_add(t786, t798);\n    let t800 = circuit_mul(t795, t795);\n    let t801 = circuit_mul(t800, t800);\n    let t802 = circuit_mul(t801, t795);\n    let t803 = circuit_add(t802, in69);\n    let t804 = circuit_mul(in82, t803);\n    let t805 = circuit_mul(in309, t797);\n    let t806 = circuit_mul(in310, t799);\n    let t807 = circuit_add(t804, t805);\n    let t808 = circuit_add(t807, t806);\n    let t809 = circuit_mul(t803, in311);\n    let t810 = circuit_add(t797, t809);\n    let t811 = circuit_mul(t803, in312);\n    let t812 = circuit_add(t799, t811);\n    let t813 = circuit_mul(t808, t808);\n    let t814 = circuit_mul(t813, t813);\n    let t815 = circuit_mul(t814, t808);\n    let t816 = circuit_add(t815, in70);\n    let t817 = circuit_mul(in82, t816);\n    let t818 = circuit_mul(in313, t810);\n    let t819 = circuit_mul(in314, t812);\n    let t820 = circuit_add(t817, t818);\n    let t821 = circuit_add(t820, t819);\n    let t822 = circuit_mul(t816, in315);\n    let t823 = circuit_add(t810, t822);\n    let t824 = circuit_mul(t816, in316);\n    let t825 = circuit_add(t812, t824);\n    let t826 = circuit_mul(t821, t821);\n    let t827 = circuit_mul(t826, t826);\n    let t828 = circuit_mul(t827, t821);\n    let t829 = circuit_add(t828, in71);\n    let t830 = circuit_mul(in82, t829);\n    let t831 = circuit_mul(in317, t823);\n    let t832 = circuit_mul(in318, t825);\n    let t833 = circuit_add(t830, t831);\n    let t834 = circuit_add(t833, t832);\n    let t835 = circuit_mul(t829, in319);\n    let t836 = circuit_add(t823, t835);\n    let t837 = circuit_mul(t829, in320);\n    let t838 = circuit_add(t825, t837);\n    let t839 = circuit_mul(t834, t834);\n    let t840 = circuit_mul(t839, t839);\n    let t841 = circuit_mul(t840, t834);\n    let t842 = circuit_add(t841, in72);\n    let t843 = circuit_mul(in82, t842);\n    let t844 = circuit_mul(in321, t836);\n    let t845 = circuit_mul(in322, t838);\n    let t846 = circuit_add(t843, t844);\n    let t847 = circuit_add(t846, t845);\n    let t848 = circuit_mul(t842, in83);\n    let t849 = circuit_add(t836, t848);\n    let t850 = circuit_mul(t842, in84);\n    let t851 = circuit_add(t838, t850);\n    let t852 = circuit_mul(t847, t847);\n    let t853 = circuit_mul(t852, t852);\n    let t854 = circuit_mul(t853, t847);\n    let t855 = circuit_mul(t849, t849);\n    let t856 = circuit_mul(t855, t855);\n    let t857 = circuit_mul(t856, t849);\n    let t858 = circuit_mul(t851, t851);\n    let t859 = circuit_mul(t858, t858);\n    let t860 = circuit_mul(t859, t851);\n    let t861 = circuit_add(t854, in73);\n    let t862 = circuit_add(t857, in74);\n    let t863 = circuit_add(t860, in75);\n    let t864 = circuit_mul(in82, t861);\n    let t865 = circuit_mul(in85, t862);\n    let t866 = circuit_mul(in88, t863);\n    let t867 = circuit_add(t864, t865);\n    let t868 = circuit_add(t867, t866);\n    let t869 = circuit_mul(in83, t861);\n    let t870 = circuit_mul(in86, t862);\n    let t871 = circuit_mul(in89, t863);\n    let t872 = circuit_add(t869, t870);\n    let t873 = circuit_add(t872, t871);\n    let t874 = circuit_mul(in84, t861);\n    let t875 = circuit_mul(in87, t862);\n    let t876 = circuit_mul(in90, t863);\n    let t877 = circuit_add(t874, t875);\n    let t878 = circuit_add(t877, t876);\n    let t879 = circuit_mul(t868, t868);\n    let t880 = circuit_mul(t879, t879);\n    let t881 = circuit_mul(t880, t868);\n    let t882 = circuit_mul(t873, t873);\n    let t883 = circuit_mul(t882, t882);\n    let t884 = circuit_mul(t883, t873);\n    let t885 = circuit_mul(t878, t878);\n    let t886 = circuit_mul(t885, t885);\n    let t887 = circuit_mul(t886, t878);\n    let t888 = circuit_add(t881, in76);\n    let t889 = circuit_add(t884, in77);\n    let t890 = circuit_add(t887, in78);\n    let t891 = circuit_mul(in82, t888);\n    let t892 = circuit_mul(in85, t889);\n    let t893 = circuit_mul(in88, t890);\n    let t894 = circuit_add(t891, t892);\n    let t895 = circuit_add(t894, t893);\n    let t896 = circuit_mul(in83, t888);\n    let t897 = circuit_mul(in86, t889);\n    let t898 = circuit_mul(in89, t890);\n    let t899 = circuit_add(t896, t897);\n    let t900 = circuit_add(t899, t898);\n    let t901 = circuit_mul(in84, t888);\n    let t902 = circuit_mul(in87, t889);\n    let t903 = circuit_mul(in90, t890);\n    let t904 = circuit_add(t901, t902);\n    let t905 = circuit_add(t904, t903);\n    let t906 = circuit_mul(t895, t895);\n    let t907 = circuit_mul(t906, t906);\n    let t908 = circuit_mul(t907, t895);\n    let t909 = circuit_mul(t900, t900);\n    let t910 = circuit_mul(t909, t909);\n    let t911 = circuit_mul(t910, t900);\n    let t912 = circuit_mul(t905, t905);\n    let t913 = circuit_mul(t912, t912);\n    let t914 = circuit_mul(t913, t905);\n    let t915 = circuit_add(t908, in79);\n    let t916 = circuit_add(t911, in80);\n    let t917 = circuit_add(t914, in81);\n    let t918 = circuit_mul(in82, t915);\n    let t919 = circuit_mul(in85, t916);\n    let t920 = circuit_mul(in88, t917);\n    let t921 = circuit_add(t918, t919);\n    let t922 = circuit_add(t921, t920);\n    let t923 = circuit_mul(in83, t915);\n    let t924 = circuit_mul(in86, t916);\n    let t925 = circuit_mul(in89, t917);\n    let t926 = circuit_add(t923, t924);\n    let t927 = circuit_add(t926, t925);\n    let t928 = circuit_mul(in84, t915);\n    let t929 = circuit_mul(in87, t916);\n    let t930 = circuit_mul(in90, t917);\n    let t931 = circuit_add(t928, t929);\n    let t932 = circuit_add(t931, t930);\n    let t933 = circuit_mul(t922, t922);\n    let t934 = circuit_mul(t933, t933);\n    let t935 = circuit_mul(t934, t922);\n    let t936 = circuit_mul(t927, t927);\n    let t937 = circuit_mul(t936, t936);\n    let t938 = circuit_mul(t937, t927);\n    let t939 = circuit_mul(t932, t932);\n    let t940 = circuit_mul(t939, t939);\n    let t941 = circuit_mul(t940, t932);\n    let t942 = circuit_mul(in82, t935);\n    let t943 = circuit_mul(in85, t938);\n    let t944 = circuit_mul(in88, t941);\n    let t945 = circuit_add(t942, t943);\n    let t946 = circuit_add(t945, t944);\n\n    let modulus = get_GRUMPKIN_modulus(); // GRUMPKIN prime field modulus\n\n    let mut circuit_inputs = (t946,).new_inputs();\n    // Prefill constants:\n\n    circuit_inputs = circuit_inputs\n        .next_span(POSEIDON_GRUMPKIN_GRUMPKIN_CONSTANTS.span()); // in0 - in322\n\n    // Fill inputs:\n    circuit_inputs = circuit_inputs.next_2(x); // in323\n    circuit_inputs = circuit_inputs.next_2(y); // in324\n\n    let outputs = circuit_inputs.done_2().eval(modulus).unwrap();\n    let z: u384 = outputs.get_output(t946);\n    return z;\n}\n\n\nconst POSEIDON_GRUMPKIN_GRUMPKIN_CONSTANTS: [u384; 323] = [\n    u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 {\n        limb0: 0x11bb29938d21d47304cd8e6e,\n        limb1: 0xd05986d656f40c2114c4993c,\n        limb2: 0xee9a592ba9a9518,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd00868df5696fff40956e864,\n        limb1: 0x5986587169fc1bcd887b08d4,\n        limb2: 0xf1445235f2148c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb7ab36ce879f3890ecf73f5,\n        limb1: 0x1f29a058d0fa80b930c72873,\n        limb2: 0x8dff3487e8ac99e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xdae2d00ca8ef88ceea2b0197,\n        limb1: 0xe1f9075cb7c490efa59565ee,\n        limb2: 0x84d520e4e5bb469,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2f9f15d8eb3e767ae0fd811e,\n        limb1: 0x33da56722416fd734b3e667a,\n        limb2: 0x2d15d982d99577fa,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x36a5996d0efbe65632c41b6d,\n        limb1: 0xcf1578a43cf0364e91601f65,\n        limb2: 0xed2538844aba161,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x829b735dcc3e3af02955e60a,\n        limb1: 0x86e739e6363c71cf804c877d,\n        limb2: 0x2600c27d879fbca1,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7440dfd970058558282bf2c5,\n        limb1: 0x475bd15396430e7ccb99a551,\n        limb2: 0x28f8bd44a583cbaa,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf697a5572d030c55df153221,\n        limb1: 0x8781aad012e7eaef1ed314d7,\n        limb2: 0x9cd7d4c380dc548,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbe82234951e2bee7d0f855f5,\n        limb1: 0x6120ecaace460d24b6713fe,\n        limb2: 0x11bb6ee1291aabb2,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf5b8fd05349cadeecfceb230,\n        limb1: 0x3310f3c0e3fae1d06f171580,\n        limb2: 0x2d74e8fa0637d985,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa511a18be4b4d316ed889033,\n        limb1: 0xac9bef31bacba338b1a09559,\n        limb2: 0x2735e4ec9d39bdff,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x826e08dcf617e24213132dfd,\n        limb1: 0xa5da6312faa78e971106c33f,\n        limb2: 0xf03c1e9e0895db1,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8f777811848a7e9ead6778c4,\n        limb1: 0xaf92920205b719c18741090b,\n        limb2: 0x17094cd297bf827c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x178042c81ba7d4b4d559e2b8,\n        limb1: 0x1fc2b3219465798348df90d4,\n        limb2: 0xdb8f419c21f9246,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb9ca1724a22709ceceeece2,\n        limb1: 0x17427ed5933fcfbc66809db6,\n        limb2: 0x243443613f64ffa4,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xeecd03aa04bb191fada75411,\n        limb1: 0xcd256c25c07d3dd8ecbbae6d,\n        limb2: 0x22af49fbfd5d7e9f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb4327323f7f7c097c19420e0,\n        limb1: 0xc78a20d93c7230c4677f797,\n        limb2: 0x14fbd37fa8ad6e4e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb3f3e1ea22faa7e18b5ae625,\n        limb1: 0xd4b2c9fbc6e4ef4189420c4e,\n        limb2: 0x15a9298bbb882534,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x854e75434c2f1d90562232bc,\n        limb1: 0x221323ebceb2f2ac83eef92e,\n        limb2: 0x2f7de75f23ddaaa5,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf9e9b2e623584f7479cd5c27,\n        limb1: 0x78a315e84c4ae5aeca216f2f,\n        limb2: 0x36a4432a868283b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2f11e860ae1c5682c797de5c,\n        limb1: 0xe277218ab14a11e5e39f3c96,\n        limb2: 0x2180d7786a8cf810,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x84cc03ce53572377eefff8e4,\n        limb1: 0xd0cb55be640d73ee37789904,\n        limb2: 0xa268ef870736eeb,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xc90e09069df9bae16809a5b2,\n        limb1: 0x4f2999031f15994829e982e8,\n        limb2: 0x1eefefe11c0be466,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9a1129946571a3c3cf244c52,\n        limb1: 0x9ca596e8cb77fe3a4b8fb93d,\n        limb2: 0x27e87f033bd1e0a8,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd2a3e184d21451809178ee39,\n        limb1: 0x3321f57d6c5435889979c4f9,\n        limb2: 0x1498a3e6599fe24,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x235bef108dea1bbebde507aa,\n        limb1: 0xe9dd4d7ce33707f74d5d6bcc,\n        limb2: 0x27c0a41f4cb9fe67,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5d5004c16a7c91fe1dae280f,\n        limb1: 0x6637238b120fc770f4f4ae82,\n        limb2: 0x1f75230908b141b4,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x89808d4eb1f0a085bee21656,\n        limb1: 0x7bba831b15fffd2d7b97b3a0,\n        limb2: 0x25f99a9198e92316,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8ed14c67622974228ba900c6,\n        limb1: 0xd0f6acdc2bb526593d3d56ec,\n        limb2: 0x101bc318e9ea5920,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa3cf091ec1ccc43207a83c76,\n        limb1: 0x97c1334ecb019754ebc0c852,\n        limb2: 0x1a175607067d5173,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xba4af5c1c4d89770155df37b,\n        limb1: 0xdeb245f3e8c381ee6b2eb380,\n        limb2: 0xf02f0e6d25f9ea3,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x56ae789ff358b3163b393bc9,\n        limb1: 0x8d8a6677203ec9692565de4,\n        limb2: 0x151d757acc8237af,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5b757890a79d13a3a624fad4,\n        limb1: 0x49e0a1fe0068dd20084980ee,\n        limb2: 0x256cd9577cea1430,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfbdd195497b8ae86e1937c61,\n        limb1: 0x8833b13da50e0884476682c3,\n        limb2: 0x513abaff6195ea4,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe4ac448386d19dbac4e4a655,\n        limb1: 0x6f610251ee6e2e8039246e84,\n        limb2: 0x1d9570dc70a205f3,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd784cf5e044eec50b29fc9d4,\n        limb1: 0xd5d7f1bf8aaa6f56effb012d,\n        limb2: 0x18f1a5194755b8c5,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x966ef420d88163238eebbca8,\n        limb1: 0x866512c091e4a4f2fa4bb0af,\n        limb2: 0x266b53b615ef73ac,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb8c89a1a3f4fd6e8344ae0f7,\n        limb1: 0xa42b8de27644c02268304dfe,\n        limb2: 0x2d63234c9207438a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5ef8df7e0021daee6f55c693,\n        limb1: 0x7b3adde219a6f0b5fbb97620,\n        limb2: 0x2ab30fbe51ee49bc,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd528b270068d9207fa6a45c9,\n        limb1: 0xdcb9cce48969d4df1dc42abc,\n        limb2: 0x1aee6d4b3ebe9366,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xc60bb34aa211d123f6095219,\n        limb1: 0x5a79452e5864ae1d11f57646,\n        limb2: 0x1891aeab71e34b89,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x57771bd3a7caab01c818aa4b,\n        limb1: 0x6437e94b4101c69118e16b26,\n        limb2: 0x24492b5f95c0b087,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3d66c10ab2fddf71bcfde68f,\n        limb1: 0x1b3b2c8663a0d64296462821,\n        limb2: 0x1752161b3350f7e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x148de54368cfb8f90a00f3a7,\n        limb1: 0x7cfb84938e614c6c2f445b8d,\n        limb2: 0xab676935722e2f6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe227e3d4fe0da1f7aa348189,\n        limb1: 0x45bc730117ed9ae5683fc2e6,\n        limb2: 0xb0f72472b9a2f5f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2c3ae6df13a78a513edcd369,\n        limb1: 0x1c201d1a52fc4f8acaf2b215,\n        limb2: 0x16aa6f9273acd563,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x55d23281a45c08d52435cd60,\n        limb1: 0x13c324c1d8716eb0bf62d9b1,\n        limb2: 0x2f60b987e63614eb,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x42f508fd9db76b7cc1b21212,\n        limb1: 0x7606bb7884554e9df1cb89b0,\n        limb2: 0x18d24ae01dde92fd,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xdf1593960715d4724cffa586,\n        limb1: 0x8d776373130df79d18c3185f,\n        limb2: 0x4fc3bf76fe31e2f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb21260c6b5d26270468dbf82,\n        limb1: 0xcfdd670b41732bdf6dee9e06,\n        limb2: 0xd18f6b53fc69546,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xcdb045036fa5d7045bd10e24,\n        limb1: 0xcec11fbafa17c5223f1f70b4,\n        limb2: 0xba4231a918f13a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x635ff1ebedd0dd86120b4c8,\n        limb1: 0x100985301663e7ec33c826da,\n        limb2: 0x7b458b2e00cd7c6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xed40b16cec39e9fd7baa5799,\n        limb1: 0x6058e76f15a0c8286bba24e2,\n        limb2: 0x1c35c2d96db90f4f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbbef96945e0dde688e292050,\n        limb1: 0x766568f03dd1ecdb0a4f589a,\n        limb2: 0x1d12bea3d8c32a5d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2fdea94313db405a61300286,\n        limb1: 0x525f9a73526e9889c995bb6,\n        limb2: 0xd953e2002200327,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x10b4040a760e33506d2671e1,\n        limb1: 0x86a40bec4c875047f06ff0b6,\n        limb2: 0x29f053ec388795d7,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x46e0c3f64b9679caaae44fc2,\n        limb1: 0x4a4952a98463bc12e264d5f4,\n        limb2: 0x4188e33735f46b1,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb7e97eb3bf1735cdbe96f68f,\n        limb1: 0xa84f1d0529431bb9e996a408,\n        limb2: 0x149ec28846d4f438,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe651922d148cce1c5fdddee8,\n        limb1: 0xca24b5f63630bad47aeafd98,\n        limb2: 0xde20fae0af5188b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4b8660edf449fba6984c6709,\n        limb1: 0x3ea94350e722ad2f7d836c23,\n        limb2: 0x12d650e8f790b125,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8abe28d78340dfc4babb8f6c,\n        limb1: 0xea96717ba7446aafdadbc1a,\n        limb2: 0x22ab53aa39f34ad3,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x71dd776904a129db9149166c,\n        limb1: 0x450dabea7907bc3de0de1098,\n        limb2: 0x26503e8d4849bdf5,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x897e7fc4c8064035b0d33850,\n        limb1: 0xf5454f5003c5c8ec34b23d,\n        limb2: 0x1d5e7a0e2965dffa,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa544615b9cb3c7bbd07104cb,\n        limb1: 0x12d96b7ec48448c6bc9a6aef,\n        limb2: 0xee3d8daa098bee0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x175703d91dc232b5f98ead00,\n        limb1: 0x55d30754cd4d9056fa9ef7a7,\n        limb2: 0x1bf282082a049799,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6b693733a0272173ee9ad461,\n        limb1: 0xe3e951bc316bee49971645f1,\n        limb2: 0x7ae1344abfc6c2c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7a47d97a5c8e89762ee80488,\n        limb1: 0xec21b131d511d7dbdc98a36b,\n        limb2: 0x217e3a247827c376,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfc2894117509b616addc30ee,\n        limb1: 0xa003d438e2fbe28babe1e50e,\n        limb2: 0x215ffe584b0eb067,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe33da57412a92d1d3ce3ec20,\n        limb1: 0x92dcedc597c4ca0fbec19b84,\n        limb2: 0x1e770fc8ecbfdc86,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9338b3c0e50e828f69ff6d1f,\n        limb1: 0x9f1e3a8a6d66a05742914fc1,\n        limb2: 0x2f6243cda919bf4c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9cc89345d3c03ff87a11b693,\n        limb1: 0x9595d0046f44ab303a195d0e,\n        limb2: 0x246efddc3117ecd3,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9a918dfbe602bc62cec6adf1,\n        limb1: 0xd4fe006f139cbc4e0168b1c8,\n        limb2: 0x53e8d9b3ea5b8e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xeefff135aec04c1abe59427b,\n        limb1: 0x7d910f6a710d38b7eb4f261b,\n        limb2: 0x1b894a2f45cb9664,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x88651f5a42553d54ec242cc0,\n        limb1: 0x8212652479107d5fdc077abf,\n        limb2: 0xaeb1554e266693d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbd4b7d0e11faf9da8d9ca28e,\n        limb1: 0xe6888680d1781c7f04ba7d71,\n        limb2: 0x16a735f6f7209d24,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x615b19374ff549dcf073d41b,\n        limb1: 0xd7c13b4df0543cd260e4bcbb,\n        limb2: 0x487b8b7fab5fc8f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x68c3ad677fdf51c92388793,\n        limb1: 0x124bea26b0772493cfb5d512,\n        limb2: 0x1e75b9d2c2006307,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x239d1c6c961dcb02da3b388f,\n        limb1: 0x253b46d5ff77d272ae46fa1e,\n        limb2: 0x5120e3d0e28003c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3b171823f890f5fd55d78372,\n        limb1: 0xb822e8763240119ac0900a05,\n        limb2: 0xda5feb534576492,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x379d9d2c40cc8f78b7bd9abe,\n        limb1: 0x22acc1a1f5f3bb6d8c2666a6,\n        limb2: 0x2e211b39a023031a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xad24378bfedb68592ba8118b,\n        limb1: 0xb2b70caf5c36a7b194be7c11,\n        limb2: 0x109b7f411ba0e4c9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x415c3dded62940bcde0bd771,\n        limb1: 0xb9c36c764379dbca2cc8fdd1,\n        limb2: 0x2969f27eed31a480,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8c5b3753326244ee65a1b1a7,\n        limb1: 0xd5f9e654638065ce6cd79e2,\n        limb2: 0x143021ec686a3f33,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xdbdeea55d6c64543dc4903e0,\n        limb1: 0x6ae119424fddbcbc9314dc9f,\n        limb2: 0x16ed41e13bb9c0c6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8c7b964029b2311687b1fe23,\n        limb1: 0x4c9871c832963dc1b89d743c,\n        limb2: 0x2e2419f9ec02ec39,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x58e7d7b6b16cdfabc8ee2911,\n        limb1: 0x82a70eff08a6fd99d057e12e,\n        limb2: 0x176cc029695ad025,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xceb247b791a93b74e36736d,\n        limb1: 0xf617e7dcbfe82e0df706ab64,\n        limb2: 0x2b90bba00fca0589,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9f5fb065c8aacc55a0f89bfa,\n        limb1: 0x97315876690f053d148d4e10,\n        limb2: 0x101071f0032379b6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7043f7773279cd71d25d5e0,\n        limb1: 0x17ba7fee3802593fa6444703,\n        limb2: 0x19a3fc0a56702bf4,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4ae72c925a8a79a66831f51d,\n        limb1: 0x3f83dcedddb9a0236203f5f2,\n        limb2: 0x1e6f20a11d1e31e4,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x25403ae24084e3027e782467,\n        limb1: 0xc722a141f8785694484f4267,\n        limb2: 0x1bd8c528472e57bd,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa9e9c3190527a1a5f05079a,\n        limb1: 0x6bacf1ad5e56655b7143625b,\n        limb2: 0x2d51ba82c8073c6d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x40ff0731b5f927fe8d6a77c9,\n        limb1: 0xe0ab10fc2e51ea83ce0611f9,\n        limb2: 0x1b07d6d51e6f7e97,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xccf34d985a3e53f0bc5765a0,\n        limb1: 0xe8376f62d19edf43093cdef1,\n        limb2: 0x11e12a40d262ae88,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd89038308a3ef37cce8463bd,\n        limb1: 0x9c6f3e47b5ff55781574f980,\n        limb2: 0x221c170e4d02a247,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x427f4f063ab718e707576b31,\n        limb1: 0x6ee25a9b8768b3231a89752f,\n        limb2: 0x3f0815ab463f1b7,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3b1d34c8e008859f1dbfb317,\n        limb1: 0x54c7e33029b3617357012a3d,\n        limb2: 0x15648bf46f60d829,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xcf61f1daa0cfefbf7fbfba85,\n        limb1: 0x18ca7f2eafdd7564d05ea850,\n        limb2: 0x127e00c2253de078,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8cbbb878f7d48051630747bd,\n        limb1: 0x9382fc0b1d265cb4d3ce470a,\n        limb2: 0x66365afd18a41ef,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4e57dcf2b099715c4404aae7,\n        limb1: 0xdc69a96f7fe7e086f4fa24c8,\n        limb2: 0x219d14f823513140,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x696d37ebaefa9ac2302132d5,\n        limb1: 0x4a6a63a8050d91f9f14f4d33,\n        limb2: 0x3a30bfbbf2cb86d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x74b06e3385104b0b41935bcc,\n        limb1: 0xb0270fb7d5c9f94edad5a84d,\n        limb2: 0x2121bbcdeaa33a35,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe338a389d053ef8b3d10e70e,\n        limb1: 0xcfbb82c289e579b7cd5580c2,\n        limb2: 0x196b544fbeb0a792,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xedb4bd4e7d907ea0202f560f,\n        limb1: 0x89c1db270ef479c26973ec73,\n        limb2: 0x2809c3a1547c0cee,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5b31f4b5d40d4e96dfc5c8f1,\n        limb1: 0xca157585a02b8b342a4c6717,\n        limb2: 0x11c34446b083ef92,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x709d90b86d9d8026e2e39925,\n        limb1: 0x367c030e3289cbe0f6242ad7,\n        limb2: 0x253ea0b33a8bf3b2,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6d1030438c16df85637bd5f,\n        limb1: 0x90c89d4007ad29fc4f5a19c0,\n        limb2: 0x30467dc1930f6afe,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x58b38bbe13c8ebfbbba54f44,\n        limb1: 0x7e20e6f5a3a88af7aa6a5364,\n        limb2: 0x2f9d4b55495f7e37,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbe18aad54cfd03ff0feac4b8,\n        limb1: 0xf11d36d499e7e093d8ee2353,\n        limb2: 0x1d9e9d5c736e3151,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7e097c315f343de301e54841,\n        limb1: 0xebf622f7823a3de7d1bfedb8,\n        limb2: 0x124b617b43e598f9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9cae08d789cc5748ffe199b2,\n        limb1: 0x4055cf073bedc945a5f9c5b1,\n        limb2: 0x198e7cfc66ae4577,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7443099c5bb6c27ed977fe24,\n        limb1: 0xfd124ab3aad57789eb945ba5,\n        limb2: 0x2eac25b3498dfadf,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x454ed3550b3c6ab5f4f90126,\n        limb1: 0x1b378305c1bb9c904e8af1d4,\n        limb2: 0x1ee02c175cdfe187,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x745c48609fa98301d0f679d5,\n        limb1: 0xb29ea8f9d2dfa47ff6fbb1d9,\n        limb2: 0x616f8c34c607266,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x385e4883a43a42832803370b,\n        limb1: 0x58b9f19cbbdb972a853e51ed,\n        limb2: 0x181d68b0a1885049,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x24cbabf6059e9327f5ba7004,\n        limb1: 0x5d6b7f5b015d579181d1ce2f,\n        limb2: 0x2d5397ce863464a2,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2da2b6591724d8dbd4bc2618,\n        limb1: 0xe8912940cc0b80277713e7d3,\n        limb2: 0x15bf817491b94d71,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x40bc910994a3827d29c08714,\n        limb1: 0xb76feab28b69485ac8cc6877,\n        limb2: 0x2a7cbd11460b177a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa80a85614c237b290de9d502,\n        limb1: 0xab56e447fae5cc1763cb462d,\n        limb2: 0xf7cd5ffa4661730,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x86d305be644ce04531008100,\n        limb1: 0xeb13273508eb6575f768137d,\n        limb2: 0xe0766004b4c4176,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xafac00104e1f763000b9924c,\n        limb1: 0xf6d148be6b9c8bb7b54ee3c1,\n        limb2: 0x625fa7145813481,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb184f515b65136318ce2c6a5,\n        limb1: 0x16ee0f5461aad2e0b19cd9c7,\n        limb2: 0x7c5472508b4599,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x951d43c54685879cb7a89fcb,\n        limb1: 0x93ac77ab3fb7557231d53073,\n        limb2: 0x567375470d189b6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xea4bfc71601174ba5c7b8bcc,\n        limb1: 0x5165f56c063e42108ad21f51,\n        limb2: 0x1d0406bcbec83f8d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2f8696ee7c73b46c63272cb7,\n        limb1: 0x280a8aa1f86405f3375f0634,\n        limb2: 0xc02b18eef22332d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4fd1b15aad053a55ad6da4cf,\n        limb1: 0xeaa7add2f801a664823509ad,\n        limb2: 0x17c1fc174cd9a6eb,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x33f7ed258a08638e9584b32d,\n        limb1: 0xab7ebbc86709a021aaa6caf4,\n        limb2: 0x5f843c23024eb1d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x90a55c87589f792f0ad8cb37,\n        limb1: 0x5cc51c53165e002727b45ccd,\n        limb2: 0x22df2420697ca28b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4b76be86417588efc4d7302a,\n        limb1: 0x73400aaedf0f48009fd3af80,\n        limb2: 0x2f1438303a7b49d4,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xcd35d5ca6155c5463093b23b,\n        limb1: 0xc6b2b7b4fbf9a24bbaa7f4dc,\n        limb2: 0x2323d5fcf2da8965,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x1e9c54f94e37700073d4d26e,\n        limb1: 0xe83b753a5e7336b9f40f7b96,\n        limb2: 0x26c85b9dfbbe48f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4c20979528e41d65384c318f,\n        limb1: 0xfeb38b5ab4e335f070b271df,\n        limb2: 0x31511000251ec86,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x941e34a60ff5df9a26c03af1,\n        limb1: 0xb42fa69e5d90a0c0e27cd16b,\n        limb2: 0x18e588324a9bbaac,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd9bef2e7d99f03c10ea1f95f,\n        limb1: 0x70635775c8d3c9498357d6a,\n        limb2: 0x2642b5d8e16b953b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x48335c4221f909aef836c133,\n        limb1: 0xe84ff60db906a0f031189b0b,\n        limb2: 0x21fc313ba11c60e8,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbac6e4e9f2f4d93d06dae151,\n        limb1: 0x890b698cc6ab89f7311298bc,\n        limb2: 0x2d3562e3d4b42bc6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7616f01c189d886dfd2e0808,\n        limb1: 0x2e3e0b6ff7e5c7c77934a5f6,\n        limb2: 0xa74ef541d360e84,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7d9e754967c2c9b1b02caf8a,\n        limb1: 0xc3983d6e3b433afa43f43408,\n        limb2: 0x140564b53e0a812a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe83fa6993adb6f2db6bba9d0,\n        limb1: 0x18b400181e71ab9759c436c8,\n        limb2: 0x14709e32d98ae4cd,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2dba651f4a619a4b52bdc010,\n        limb1: 0x423f179e1266dd392372db4f,\n        limb2: 0x734b2366c59e394,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x913642c7d02d7e71088fd2d4,\n        limb1: 0x5ad3e3c5fb6629abe963ed92,\n        limb2: 0x11fb2d705c94b08d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8fd84be834e4cc3618059484,\n        limb1: 0x5d715eba19371050ef6eb7f7,\n        limb2: 0x27d03abf5c1f290e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2a39c6a8bb9b441ac1395861,\n        limb1: 0x7fb3353cfc2cd63ebe817f21,\n        limb2: 0x13ed9e9e6b452df2,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2604263a7c5b79ab99cbd23c,\n        limb1: 0x246cdaaa04a12e88795de445,\n        limb2: 0x1319c51cf37aaa10,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4eebbd0e715b6cea019ac3f2,\n        limb1: 0x7f9dad839f2c8cb526a4cf44,\n        limb2: 0xbca25588d187b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3f02f7a3c01be23cf51d593f,\n        limb1: 0x181226874b923cd01a069b49,\n        limb2: 0x1d837ea0341c5964,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xdbd25f24012090db7de4e7f9,\n        limb1: 0x42c427ce4c5c83774149e2a6,\n        limb2: 0x1b41ce9ed3634cbd,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb78a127c7b56bd6673f1ce1f,\n        limb1: 0xddc790ecc4e946f4bca74b98,\n        limb2: 0x671f0e3b674ae7c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x1ac14143071d0449a5426e4e,\n        limb1: 0x72e40cd30615f55fefeb682c,\n        limb2: 0x19fc073797a39b2,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbf5d97311c5096619e9fd13,\n        limb1: 0xfd1f7c5c6d5a7c70fa420948,\n        limb2: 0x17bee47d262a497,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x1cc937ba00cc8527274471e3,\n        limb1: 0x80763539cff2978a4c794472,\n        limb2: 0x2073cff92d3141b4,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2e730fe2c7aa46b1fa663baa,\n        limb1: 0x7f43182a55a91d48f9c58d15,\n        limb2: 0x3bd7b3e2c188587,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x19a14c8dfed9ffbbbad9b6b7,\n        limb1: 0xff128edfb9bbf5fa0ceb1007,\n        limb2: 0x226ebc9a538b5bba,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xaf1d830dc6e394e8a5d3b21a,\n        limb1: 0x373a06e1552c0e634a49572,\n        limb2: 0xd395f0b08b9fede,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xcf1e0f2f41f77d5331f99ffa,\n        limb1: 0x30d49b68e19e31ba5284bd3b,\n        limb2: 0x28242439b524540a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9e91f929754b48c6154d4df6,\n        limb1: 0x2d2de034801ab85e0b457e12,\n        limb2: 0x370d6fa19eaac14,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xc753feb0a2b2e0bcbde1659,\n        limb1: 0x90762abf269579eaa37939bc,\n        limb2: 0x9a16f573b3280f3,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x90b71b268d99981368231d97,\n        limb1: 0x496ac443f98127ee3c0021a6,\n        limb2: 0x2228e360fb5b162b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8032b6a1b97675f3c567f944,\n        limb1: 0x9fabf83991476d209431e34d,\n        limb2: 0x7e42c2ca633d2c4,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd8e9d753a50fe96097724a9f,\n        limb1: 0xc3cab85a6215a32eed35fda1,\n        limb2: 0x2ce12d7269663770,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf70973a7ba0b2231815b15de,\n        limb1: 0x9eeb9b1b45a0125084bc4da,\n        limb2: 0x3d7427704c61e20,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xdc4626732d86921e553e69c6,\n        limb1: 0x1c1267fcf4b4b33ca096fb4d,\n        limb2: 0x10f8abf076418586,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xaaf6568a5c95644c7c5914cc,\n        limb1: 0x25d7cb456e3aeb251a1a620,\n        limb2: 0x17ccaf6f26f7267a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6e55754d59de6df28cea4d51,\n        limb1: 0x1385c3ce00ca820ad0e3651a,\n        limb2: 0x63bb306b9631005,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x65e608bc920cf993a4169974,\n        limb1: 0xf2c304a18095ab7403242e0b,\n        limb2: 0x1f761ee5553c5e86,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x61b45717cd6bdfc09de4e8f2,\n        limb1: 0xa23c0e666859ba6564bcde87,\n        limb2: 0xdc5f00bbfd7c1d9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa230abc391089760bfc40ef2,\n        limb1: 0xdf07c3536381c13eb44cf790,\n        limb2: 0x6de511520e277b7,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x50a1fe21f24a8c06e10cca03,\n        limb1: 0xf9ef54863e70528a1fd4481b,\n        limb2: 0x2a134348c8660efc,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb63a7dbba1b33520bcfce37b,\n        limb1: 0x4bd80089e99edf8ed5f6f1ff,\n        limb2: 0xaeb5023bbb9a64c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xab26155836fc51fb7cb933d1,\n        limb1: 0x25ecb5f0bfdc9995406c5960,\n        limb2: 0x141a6d0810366ae2,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x990bc0b8bfe87497f1e2c5b7,\n        limb1: 0xbe776f404dca6626cc0b2539,\n        limb2: 0x9d2ea05ef54dadb,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2441bfe8ff1a16e91719cdde,\n        limb1: 0xd104d5f8ef70891d22d4a543,\n        limb2: 0x1e56d244a8e41be5,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa85c2fd68ba4d5c5f50c7b49,\n        limb1: 0xec908b2f99b5c4fd5e09447f,\n        limb2: 0x1d4f020c57c4f14a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9db80fb0ee1e833764c18fd3,\n        limb1: 0xe09f4e14cd03398d8d82a1e0,\n        limb2: 0x763911a3a92a4f0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xc5e47e55684366e54b302946,\n        limb1: 0xba2ec68f9061643f1fc5d9a2,\n        limb2: 0x12857275be2fe6b9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3c5d83d4d0ebf50d1bbf87c0,\n        limb1: 0x655ffe9a96c4b81adc0a6035,\n        limb2: 0x2ed11ccd2e2e2376,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2cfbb4acd288a21543c6d594,\n        limb1: 0x5b320d5e3e966ef4726d5b1c,\n        limb2: 0x3e31de8958e8264,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd7e905366ec2ca4a36e71963,\n        limb1: 0x58ae890046533d58da28a608,\n        limb2: 0x11e880dfefdbd088,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x978d53c190dc25e969a507b2,\n        limb1: 0x704a9c3cc21ab7a44a34662,\n        limb2: 0x1835b275deaed2d0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf1324240419f372ff8d3c3f5,\n        limb1: 0xce5a4a9480e1d82ce5d44f76,\n        limb2: 0x68b75315e25ed4a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x95c839d698ad3b22823274d1,\n        limb1: 0x2b052d2ad12b92a4268fccd7,\n        limb2: 0x1b7ef7d04aec73d6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7f4b8efcc240d30bbaa9f03f,\n        limb1: 0x6f6193ff5501b57216b67072,\n        limb2: 0x28c0c848022a9060,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa16660efd6e5d82d4f068e1b,\n        limb1: 0x686a7bfb1c39f3f254370985,\n        limb2: 0x13bda49296cbcc51,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x86c3e0e2fd38490d3a594141,\n        limb1: 0x11eb10b34265e378a945729f,\n        limb2: 0x2e7987ea8204389d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfda3226ce5415fffd03935c8,\n        limb1: 0x4b2b45c10a190fedef702aef,\n        limb2: 0x826d4a2324ad3aa,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x435c3b59685f93b434036ded,\n        limb1: 0xfa3675ef541c9df7bb964a85,\n        limb2: 0x2dbeee85eaeaa9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf5c5abfb966a4be599cb86c7,\n        limb1: 0x919418ecb3279b11e6fa44f5,\n        limb2: 0x227ee7a945edaee6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x86de8c698d541471c7244220,\n        limb1: 0x5ac90d696faf2a5ffadc239,\n        limb2: 0x1d0a6d1a95198778,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb284ec3e9f4de02b25f6e9d4,\n        limb1: 0xda4f333b7854fbbcd10eea1d,\n        limb2: 0x2208aaba508ae816,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe2f8e01a175720971ccf04ec,\n        limb1: 0xe36a7d29b587a215c9e59268,\n        limb2: 0x28a58901035b2c99,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4ffc0191226f38a8adfd6238,\n        limb1: 0x123a07865ca1376df317a2a1,\n        limb2: 0x112f6d8d42b0a0d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb4d01f1daf906b6d3c6e2308,\n        limb1: 0x3174dda182d266d5c727f97f,\n        limb2: 0x8c6eb19c016d183,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x48c8698ecfea9103f73f1879,\n        limb1: 0xd0b38b95f9c642df75b1be9a,\n        limb2: 0x1359d2d6c8b5a116,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7725f8a5ed42b699c4af3ca7,\n        limb1: 0xa467c1cc1878d91aaa07aacf,\n        limb2: 0x10c5052ec67ab9b6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5d4e9f060193823684c96c75,\n        limb1: 0xdb708803e6338fc6afdb188d,\n        limb2: 0x583c4d292d54f3c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3e076e16ee2c18bfc06f57b4,\n        limb1: 0x1a4054c5b96322e7bcd1fe2b,\n        limb2: 0x2d94a1c55be38215,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x1927ead80dbc64dd2211c3ec,\n        limb1: 0xb997369579c1b1703ef77c67,\n        limb2: 0x15e3402fdde8770f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8bb902eb302677e20a727be3,\n        limb1: 0xf7b21e6b867d5a71b5000bef,\n        limb2: 0x185be98784817f22,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xc054547b5ca14cd94de467b6,\n        limb1: 0x66ed8927c89890aa8aad1b00,\n        limb2: 0x18db4321c721c036,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd2cd0aff4eb2134a039b5126,\n        limb1: 0xc390b3f3d799188528849bc,\n        limb2: 0x2a852b6247f5d61f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe1cd771b165930204da58f22,\n        limb1: 0xe65fb9a18ee0124aa5276f6d,\n        limb2: 0x2510aeed51b7f506,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xdcad1d7977d6486513bab5f2,\n        limb1: 0xb5bd3a236f03a47b47b7fb54,\n        limb2: 0xf2074a32eb8260f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x12c4c2c84971404bfa044090,\n        limb1: 0xa8270e19941926cec3531c9e,\n        limb2: 0x2f4c69297866bd45,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5f3fd75e9b792c562a37473f,\n        limb1: 0x5d083a65093c0d0e92df5fd,\n        limb2: 0x154668727d2dbadf,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5bcd1194a91e5b0f7b13cadf,\n        limb1: 0x4fd77fc5ab5c8c4e8d3e2e37,\n        limb2: 0x1e6ffc5d6a1ff5dc,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x28538571fafa389da29990c6,\n        limb1: 0x9d75acbc9395cb8398c8b2d4,\n        limb2: 0x2cf1a1d7c4430910,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3e24cf016ecf64cf793c9880,\n        limb1: 0x87cf76cd5ce8da47aa5d8a02,\n        limb2: 0x140fb39a89f26f6d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xc159990b8298a93a8589f9e8,\n        limb1: 0xf0712b201fb3cddfce2c16da,\n        limb2: 0x1289d13d58a17b5b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xc5218749610920fe98b2db2e,\n        limb1: 0x5781e8d3d207adc8370cf56b,\n        limb2: 0xf45cf974d2c9edb,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb333568b8687a1c9eceb44d4,\n        limb1: 0x6b79edfd24f5abcc585a81d1,\n        limb2: 0x11909c81a1651804,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2d5a1041fd7bbd6792330d16,\n        limb1: 0x9f3b891a0e3da4d6917672f,\n        limb2: 0x2990b23c81882f77,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9a16dc102ecf461e4aef7277,\n        limb1: 0xcd5560e0821e7285e0a083ea,\n        limb2: 0x609551b14716ca3,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x55f4f93dc0880eaa08d03f77,\n        limb1: 0xfd93dced2467354b6175de17,\n        limb2: 0xc8c1abdfab99d03,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x98ec09f78a7a55d08f2e0b10,\n        limb1: 0xbd02f33f8bec6c730db3fed2,\n        limb2: 0x138bd098c4923b9f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe07d9ae3f21bb5a3190f14c0,\n        limb1: 0x4673f0f77161ae55dcd0b45c,\n        limb2: 0x2e61e4bc02163011,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x22401c905ddb408260d8e910,\n        limb1: 0x65a9c4060ce3297c626abd1c,\n        limb2: 0x124860913e3df8f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x701d98286c6ac8b7ed052ec8,\n        limb1: 0x3ec104804d955cbe125f24c5,\n        limb2: 0x13807f89c394a13,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x50c8f4c4e85578abb0fc2fe5,\n        limb1: 0x132aa9eeaec08d2f59aa4440,\n        limb2: 0x2e88d1a6938f0788,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3ba607c2e8fcc1f26abf3104,\n        limb1: 0xa0cbf64e1f1787e2257be3c,\n        limb2: 0x1f3d24f17cfc605,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x82a916bfd9b62f82f0f8d0bf,\n        limb1: 0x3b9d4f133d41fb5b3fe6c76a,\n        limb2: 0x1fe1cb0e2ae169f8,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8d1c48bf5e3377f9177071f3,\n        limb1: 0x353329221229827e19946f3d,\n        limb2: 0xef79351229409cd,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3127860e89088608373beda9,\n        limb1: 0x1c4893ef77a9d11150755188,\n        limb2: 0x18fb2e46fc1b90fe,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa68c5cb61916bd57120d1868,\n        limb1: 0x4c32ef0761e23a3cc0ad6263,\n        limb2: 0x77afe2579f42ec1,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6fdd65d248b186f1490b7b99,\n        limb1: 0x2642c04ccf8a6ea54e2ac983,\n        limb2: 0x79769092daa5a75,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x606b676b663c76cf76bab4a5,\n        limb1: 0x254eb6e09c5c8bfd67eb9734,\n        limb2: 0x1d8bf229c19968f0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x36f17256428f29f6ec1bddad,\n        limb1: 0xf93556e49e4b37737664f142,\n        limb2: 0x2a33b7d855e7fe55,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe7aa7536340dc3187ccca8b2,\n        limb1: 0x4ec161c86e84ba6ab2056077,\n        limb2: 0x25b0331d7e2b15af,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb92c16e2f4f13f22342474e2,\n        limb1: 0xccbf45e4810211b0ffcf8ccb,\n        limb2: 0x762098f5fe26598,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x185c70716dece2b6172c2514,\n        limb1: 0x6d0da4c007b1bda42362e144,\n        limb2: 0xe234d720d70b288,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x11c0c60d135c811152aa4b60,\n        limb1: 0x6e3742e720b7fec2ea72182f,\n        limb2: 0x1d82bedccd2bc8a0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb94d481314bd1c690a17c979,\n        limb1: 0xa5e9a3e7d05930b7c3397fd6,\n        limb2: 0x480064d4b3eb0ad,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x68560cf41867f7464fb0c11a,\n        limb1: 0xf7593fbb1140edc8c8e45805,\n        limb2: 0x10a892763b3cca9e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x667ae4714dde4cd7f4de8b91,\n        limb1: 0xc921f9b2553680785978b315,\n        limb2: 0xb5ec64548ea841a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd030e1a9ce3c65c9db931d46,\n        limb1: 0x49761bd7131dfaebd78010ed,\n        limb2: 0x10554aca4e348e59,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6e150d4ac648fab3db0cff6,\n        limb1: 0x8b93655462b1f475b9be9de3,\n        limb2: 0x15be66f38d86b099,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4ab0c23caaf308e427d3dbe8,\n        limb1: 0x82d182957ffad01bf6c26e9d,\n        limb2: 0x176ad3600fd34911,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4fc11bd3ce82b5cf0af2e6f2,\n        limb1: 0x9335001d705ac125e3beb20f,\n        limb2: 0x2b6f355b3dbf65f0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x288fa296b6de9ff788c77451,\n        limb1: 0x81d7c89edefb32d1a8448c51,\n        limb2: 0x1c85c06a6d5d40d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe43f7d1f51a70aaac2460d79,\n        limb1: 0xbd9a51d76b2e25f82361c389,\n        limb2: 0x20e1e876c4746a0c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x737701392d987dda9217fa08,\n        limb1: 0x2a024b637bc35a29ee3b08ce,\n        limb2: 0x20e46219f684186d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7a8bd90e28be0f2ed6091367,\n        limb1: 0x654e987907277c2448076636,\n        limb2: 0x2ea7279db9f2aa0f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7c9171b1641be95091780f74,\n        limb1: 0x362096d472bc75ca0969dc07,\n        limb2: 0x136be2a7f18924c9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfbc8f1f6c924baf0df5a0e9e,\n        limb1: 0x3067c4300fb0f51119ed5736,\n        limb2: 0x1ca2033501baa3f7,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4a9d9fa1da810832b48a50c7,\n        limb1: 0xecaa75e495f34e3525824f7a,\n        limb2: 0xa82f199c2505277,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2e7ed9eb7925a2dea580b7d5,\n        limb1: 0xe92fefb0d7f7782a9f37a272,\n        limb2: 0xecf10485307b4ba,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x78f13af16aebbbb339a3936b,\n        limb1: 0xd12aa22f08a8296d68615c84,\n        limb2: 0x7b642138dfd6a6d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa76d61e9cbc3b6dd0f1a2150,\n        limb1: 0xd2256d34921fb86ed70e760b,\n        limb2: 0x1d9dda43a25593ff,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8213d392958ce2fd3d7d2fce,\n        limb1: 0x1dc91136c91c6bccd5367eb0,\n        limb2: 0x2f1af228520c8b75,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5a1a2b6b18551a45a6cde123,\n        limb1: 0x5c6d6c1ab3de4abae61ada62,\n        limb2: 0x1fecfe833ad54045,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x77abe637bdd3ad28e4a23c88,\n        limb1: 0x3b0d7583460227575657ff8a,\n        limb2: 0x18fc8e608c735b2b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x18783a5586388a7547faa815,\n        limb1: 0x6ebf03cb3f53aba8a43ce0b6,\n        limb2: 0x28f740bc1182e970,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x1cfd13822bed35b7146966a4,\n        limb1: 0x94ad301e4b998d29e960a485,\n        limb2: 0x47998cc0af5a26b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2e880ee130a14a692b777b70,\n        limb1: 0xdda43e415e1b9a3a9725c7b5,\n        limb2: 0x1b5f1525b31db911,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd1d7b1af945fa57ed5c8de6e,\n        limb1: 0x5f65e965a90eac9bf770ae9b,\n        limb2: 0x275a83fa5d19b453,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x808c9897ce3e40a6f6a27aa8,\n        limb1: 0xcb430568e49bc9dc2a563359,\n        limb2: 0x2e8789257ed2cbcc,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xdcd6e41e2925a39c8e2c7c1,\n        limb1: 0xeb2721a4c09e9d17f60c3450,\n        limb2: 0x927f46cfe80feef,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbc1ecf9e0e484bbfe7698101,\n        limb1: 0xc37619bfe6ab6a97fd8fb2cf,\n        limb2: 0x1f868ae04832a5db,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf308fb19ce6d56c9b45eff4,\n        limb1: 0x9b73f745b2defed65d94ba8,\n        limb2: 0x9d7a11e27d2f531,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4fda5995b0c351aa2b879dff,\n        limb1: 0x104e1c2823fb7c5b9a7b2592,\n        limb2: 0x282d857cfe8da3b5,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5c0744f6987fb0f6ff49c217,\n        limb1: 0x3f349ff830ae663b27576e13,\n        limb2: 0x20ba8a9fcec815b1,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xddd2ab1b66a8ae4dcbfb136e,\n        limb1: 0x4589fba12e657d226d57b471,\n        limb2: 0x11b6afc91e32f1ca,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xc72ddf3f908141736cebc3be,\n        limb1: 0x316e335c7d93db344788eec2,\n        limb2: 0x2e666402ac9cc588,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xc9ed9a1a74920f2794f18595,\n        limb1: 0xa202a110e283faad7057aec5,\n        limb2: 0x17522e0e9e64f795,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe2ff24b7878cb9878edbd3b9,\n        limb1: 0xe20b470cad4cc7319e6adb40,\n        limb2: 0x2d2ed17f7a1f3ee9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8136f4d73c937da16c7bf9f4,\n        limb1: 0xa96fa276e89e85d08f75e54a,\n        limb2: 0x1a81efb19d7e1eda,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x51c7a0d515a16bb3bd33e237,\n        limb1: 0x210a7b44e52e5630f299c5f4,\n        limb2: 0x27ff57c1ca847e57,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3c6a5a0a11be26a7f5fb1a94,\n        limb1: 0x3c5be96031bfa167840d117b,\n        limb2: 0x1c1a8e22230abcd1,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4d2c32b59d5836f9c19a5657,\n        limb1: 0x43627a9cd533e4250d81e777,\n        limb2: 0x2a1c3f15d4927c8,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xac112e185acb219899357e4,\n        limb1: 0x1c52499b37cb4be1af0373a1,\n        limb2: 0x2ddbb7239eb904d8,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5edadab48a86fad6da0afb60,\n        limb1: 0x4e0d6faec54be81d8edf8bc2,\n        limb2: 0xdff198393085a75,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x28789f28b6d5f504bd1645ca,\n        limb1: 0x76275fcc589d038dec8db287,\n        limb2: 0x10d50c2473146bbc,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x48506282536b08b4476c1538,\n        limb1: 0x2a53dfd40e1022e6231ba459,\n        limb2: 0x61e8328fb5593f9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf07d3c51cfa5a0dd9f6d9784,\n        limb1: 0xd90b644bee31ac58067debf3,\n        limb2: 0x1b589243847198de,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xced99d5ce6f67a420a3bd1f7,\n        limb1: 0x9863b053bd4c6087190f0bdc,\n        limb2: 0x4b00c0da1f851e5,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2e35018b3bec8cdcb5ddfd67,\n        limb1: 0x126a70163009a7ac27f8a8d4,\n        limb2: 0x239941a46c2b93d9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xc0bfecb4e87ef6814acf2ea2,\n        limb1: 0xc2c35377cb0a3712bfc9bc3e,\n        limb2: 0x204f26ca7993b03a,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x8d515e348ef117e926d721c,\n        limb1: 0x39d832d8be165a1e5747cf73,\n        limb2: 0x85aff9c7fdadba0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5e093158efd375df00ea2068,\n        limb1: 0xc4ae9db044c0b0b3f10e57d0,\n        limb2: 0x249042a8dc111f27,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x5203327b3e0825977413e96b,\n        limb1: 0x542854f3029803e2f8455066,\n        limb2: 0x6e799bcdf2b4a74,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xcae12085c612496183b87996,\n        limb1: 0xa9f4d2c002921bc3fffed333,\n        limb2: 0x1cb3caed4bffb6ac,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xab566889dcd99e84d310d51c,\n        limb1: 0x28a128bfd4faa6a3dd6ea03c,\n        limb2: 0xb47e9755fae4801,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x24fd1ca3f0bb730da886a4f,\n        limb1: 0x920a0c9fd2c360a6506293bc,\n        limb2: 0xc7e4cea365c2061,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd9d6988c8dcd7ba4187215df,\n        limb1: 0xbbaa30d964d6f6f63dbe1b20,\n        limb2: 0x21da1f701bac77bc,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x19965b6edd1a9486e3c6cc55,\n        limb1: 0x70905fb67899d10db86b47bd,\n        limb2: 0x9ae612e8ba1ca13,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb0c99373fe1f7a0e3b95cf3d,\n        limb1: 0xc150f284491190e6aab75445,\n        limb2: 0x262e1e0b56cac47f,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x29fd4ddeaa5d3f67491d34bd,\n        limb1: 0x2c87c293e3bb7c9e2a7bfa5f,\n        limb2: 0x234bf4a7dce7587c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x213d7432eee67f6cb69f70c2,\n        limb1: 0x2d0a527cac744fb658d2690e,\n        limb2: 0x2f6cbac694c886b0,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2fff818d9a3300876dec3ad9,\n        limb1: 0x7bb8c9fdf78b7aded52aa184,\n        limb2: 0x22accb18b7c49b4b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x2a0b3d3cbf623a1df7f8f2fc,\n        limb1: 0xd659f22d2c77be302eabd918,\n        limb2: 0x81e2f0652f898c6,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x90f3ffc016b3186ad675b935,\n        limb1: 0xcea3ada75d669b8c534b9628,\n        limb2: 0x12c0a25e70d006ec,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9edd56f49f8d4f2381df3259,\n        limb1: 0x2fd6fc869df24d7ab56efd34,\n        limb2: 0x10ef9c23848128cc,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x9491e0620bda347962b240f0,\n        limb1: 0xd4a81262b71df1bcc2c1d41b,\n        limb2: 0x2161cd280772819d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xf799bc41b7f4fdd12cb8d38a,\n        limb1: 0xb406590041b5248292533364,\n        limb2: 0x2cebb0ae5108318e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa656880fb759e08709a0a62f,\n        limb1: 0xfe4f7c22d9561f3bf2852283,\n        limb2: 0x2b2092f86b5979a7,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xcf643e7382b2d8507a065fed,\n        limb1: 0x8146188425a442450cfc900,\n        limb2: 0x1566b3402d774b8c,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfccf8d3d1a163e601d1a0173,\n        limb1: 0x8fb4c56d6c57ba01627c3635,\n        limb2: 0x11a316aa31607f26,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x4644609152e353d9c2874e44,\n        limb1: 0xb782648b560e595408a5e843,\n        limb2: 0xde7ee069c934256,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xe706c72e67128b8949eab1af,\n        limb1: 0xcc84df0297708c5e5845c36a,\n        limb2: 0x2d36f4029245704,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd82dabdc284d7951d546f858,\n        limb1: 0xf53198c217fb34e899bde46c,\n        limb2: 0x1b8cc326b5ee160,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfd4ddf8a96ece85407550ebb,\n        limb1: 0x10689fb2187b71694cbf9203,\n        limb2: 0x27625da0f73ea071,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xedda06cb99ba025b94e4790d,\n        limb1: 0xcdc0da581a6950f6dea349c3,\n        limb2: 0x1cd8338a3e5b1ad7,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd3e67e877a10a84072741a56,\n        limb1: 0xa763856c94b6438c78a8aed8,\n        limb2: 0x5ea02d65b209f6d,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xd627e810817743ce03330a55,\n        limb1: 0x5366cfcf284a895d8b6250ce,\n        limb2: 0x9f7cb68d4e388f8,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x202e4ebcdfeb969e9d5c1212,\n        limb1: 0x27b043f5e58dbd1aec13995a,\n        limb2: 0x18c6230ddc0f8968,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbfd2e1a10578232096db6dcd,\n        limb1: 0x1a91c0a0fdccdaa8452e4f07,\n        limb2: 0x73a6114b997285e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb1660ce7a3e7742b2f37be7f,\n        limb1: 0x22c6a1fc0838adf5fe013f39,\n        limb2: 0x2e78746340b2a6d2,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x6553def28e675259d3e5c851,\n        limb1: 0x6303ad8e5e4bf4249b7ea84,\n        limb2: 0x7aa27e7150baddd,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb4643f680cbc98345715ead8,\n        limb1: 0xbf623d2712cf4d9fa90273cc,\n        limb2: 0xb66fdec210ea4ea,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xb140be641acea41c49aa5e3,\n        limb1: 0x9b633b8a4d6be51c9c0601ce,\n        limb2: 0x2fb6a29d9f394a58,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3d049bd675a69dc889b2ce2a,\n        limb1: 0xfc845e9c1c2cd1288569fb24,\n        limb2: 0x29025cc66fd041c4,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xfa695168b85d534b17be3f48,\n        limb1: 0x4126214ab9c627a6f7ed731c,\n        limb2: 0x150963f0aca9bcbe,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x7bec0d5798a08a32a61a8a65,\n        limb1: 0x3f72c1bfc6656eb7b5bca2e4,\n        limb2: 0xed5978030225766,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3000debfc8d30c06143cc084,\n        limb1: 0x3d30ae188c767f391c11888a,\n        limb2: 0x7e19cb8a893369b,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x28d2c052cd860afb4a3aa272,\n        limb1: 0xe5f1eeeafb5eb8ec2b6ecfe5,\n        limb2: 0x600c7d2b6946345,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xa480e19ea0125119f0385705,\n        limb1: 0x3022a1f33d6523b4773f2cd0,\n        limb2: 0x596083b6c972bc1,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x99a8e1ef6db21043631e24c4,\n        limb1: 0x7f98b9d8663d85db2e645130,\n        limb2: 0x210b5c36f27a07d9,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x74e9159326a8f4930b7883f9,\n        limb1: 0xc7bb9f3d563c5cc201c24898,\n        limb2: 0x13bb2764bf1475cf,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x81e89997219e4b7576e24d30,\n        limb1: 0x80eb082862a76757287872b1,\n        limb2: 0x202cf557d625c260,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3d905a4728ea1f95fd8824b2,\n        limb1: 0x76d49e97142d220601fbc5a0,\n        limb2: 0xe561c3f8bd4f76e,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0xbbe827307c33ae9ed7890597,\n        limb1: 0x471785de07bd9809d57dd859,\n        limb2: 0xde20097480e7555,\n        limb3: 0x0,\n    },\n    u384 {\n        limb0: 0x3cb72bb80cde8edd76d2e97d,\n        limb1: 0xb810df8c5788eebcfd282561,\n        limb2: 0x72f2a6287fb984b,\n        limb3: 0x0,\n    },\n];\n\n#[cfg(test)]\nmod tests {\n    use core::circuit::u384;\n    use super::poseidon_hash_2_bn254;\n\n    #[test]\n    fn test_run_poseidon_grumpkin_circuit_1() {\n        let x: u384 = u384 { limb0: 1, limb1: 0, limb2: 0, limb3: 0 };\n        let y: u384 = u384 { limb0: 2, limb1: 0, limb2: 0, limb3: 0 };\n        let z: u384 = u384 {\n            limb0: 35961034779122590217458358426,\n            limb1: 19176342235218042678530152434,\n            limb2: 1251086958891274305,\n            limb3: 0,\n        };\n        assert_eq!(poseidon_hash_2_bn254(x, y), z);\n    }\n\n    #[ignore] // Ignored for auto-benchmarks\n    #[test]\n    fn test_run_poseidon_grumpkin_circuit_2() {\n        let x: u384 = u384 { limb0: 1234556789, limb1: 0, limb2: 0, limb3: 0 };\n        let y: u384 = u384 { limb0: 987654321, limb1: 0, limb2: 0, limb3: 0 };\n        let z: u384 = u384 {\n            limb0: 8305167385555799669027062613,\n            limb1: 57704763612671584465832054609,\n            limb2: 430243426511221670,\n            limb3: 0,\n        };\n        assert_eq!(poseidon_hash_2_bn254(x, y), z);\n    }\n}\n\n"
  },
  {
    "path": "src/src/hashes/sha_512.cairo",
    "content": "// Optimized version, originally from Alexandria library.\n// use core::integer::{bitwise, u64_bitwise};\nuse core::num::traits::WrappingAdd;\nuse core::traits::{BitAnd, BitNot, BitOr, BitXor};\n\n\n// Variable naming is compliant to RFC-6234 (https://datatracker.ietf.org/doc/html/rfc6234)\n\npub const SHA512_LEN: usize = 64;\n\npub const TWO_POW_56_NZ: NonZero<u64> = 0x100000000000000;\npub const TWO_POW_48_NZ: NonZero<u64> = 0x1000000000000;\npub const TWO_POW_40_NZ: NonZero<u64> = 0x10000000000;\npub const TWO_POW_32_NZ: NonZero<u64> = 0x100000000;\npub const TWO_POW_24_NZ: NonZero<u64> = 0x1000000;\npub const TWO_POW_16_NZ: NonZero<u64> = 0x10000;\npub const TWO_POW_8_NZ: NonZero<u64> = 0x100;\n\npub const TWO_POW_56: u64 = 0x100000000000000;\npub const TWO_POW_48: u64 = 0x1000000000000;\npub const TWO_POW_40: u64 = 0x10000000000;\npub const TWO_POW_32: u64 = 0x100000000;\npub const TWO_POW_24: u64 = 0x1000000;\npub const TWO_POW_16: u64 = 0x10000;\npub const TWO_POW_8: u64 = 0x100;\n\n\npub const TWO_POW_4: u64 = 0x10;\npub const TWO_POW_2: u64 = 0x4;\npub const TWO_POW_1: u64 = 0x2;\npub const TWO_POW_0: u64 = 0x1;\n\nconst TWO_POW_6: u64 = 0x40;\nconst TWO_POW_7: u64 = 0x80;\nconst TWO_POW_14: u64 = 0x4000;\nconst TWO_POW_18: u64 = 0x40000;\nconst TWO_POW_19: u64 = 0x80000;\nconst TWO_POW_28: u64 = 0x10000000;\nconst TWO_POW_34: u64 = 0x400000000;\nconst TWO_POW_39: u64 = 0x8000000000;\nconst TWO_POW_41: u64 = 0x20000000000;\nconst TWO_POW_61: u64 = 0x2000000000000000;\nconst TWO_POW_64: u128 = 0x10000000000000000;\n\nconst TWO_POW_64_MINUS_1: u64 = 0x8000000000000000;\nconst TWO_POW_64_MINUS_8: u64 = 0x100000000000000;\nconst TWO_POW_64_MINUS_14: u64 = 0x4000000000000;\nconst TWO_POW_64_MINUS_18: u64 = 0x400000000000;\nconst TWO_POW_64_MINUS_19: u64 = 0x200000000000;\nconst TWO_POW_64_MINUS_28: u64 = 0x1000000000;\nconst TWO_POW_64_MINUS_34: u64 = 0x40000000;\nconst TWO_POW_64_MINUS_39: u64 = 0x2000000;\nconst TWO_POW_64_MINUS_41: u64 = 0x800000;\nconst TWO_POW_64_MINUS_61: u64 = 0x8;\n\n// Max u8 and u64 for bitwise operations\npub const MAX_U8: u64 = 0xff;\npub const MAX_U64: u128 = 0xffffffffffffffff;\n\n#[derive(Drop, Copy)]\npub struct Word64 {\n    pub data: u64,\n}\n\nimpl WordBitAnd of BitAnd<Word64> {\n    fn bitand(lhs: Word64, rhs: Word64) -> Word64 {\n        Word64 { data: lhs.data & rhs.data }\n    }\n}\n\nimpl WordBitXor of BitXor<Word64> {\n    fn bitxor(lhs: Word64, rhs: Word64) -> Word64 {\n        Word64 { data: lhs.data ^ rhs.data }\n    }\n}\n\nimpl WordBitOr of BitOr<Word64> {\n    fn bitor(lhs: Word64, rhs: Word64) -> Word64 {\n        Word64 { data: lhs.data | rhs.data }\n    }\n}\n\nimpl WordBitNot of BitNot<Word64> {\n    fn bitnot(a: Word64) -> Word64 {\n        Word64 { data: ~a.data }\n    }\n}\n\nimpl WordAdd of Add<Word64> {\n    fn add(lhs: Word64, rhs: Word64) -> Word64 {\n        Word64 { data: lhs.data.wrapping_add(rhs.data) }\n    }\n}\n\nimpl U128IntoWord of Into<u128, Word64> {\n    fn into(self: u128) -> Word64 {\n        Word64 { data: self.try_into().unwrap() }\n    }\n}\n\nimpl U64IntoWord of Into<u64, Word64> {\n    fn into(self: u64) -> Word64 {\n        Word64 { data: self }\n    }\n}\n\nimpl WordIntoFelt252 of Into<Word64, felt252> {\n    fn into(self: Word64) -> felt252 {\n        self.data.into()\n    }\n}\nuse corelib_imports::bounded_int::{bounded_int, upcast};\nuse corelib_imports::circuit::conversions::{DivRemU128By64, NZ_POW64_TYPED};\n\nimpl Felt252IntoWord of Into<felt252, Word64> {\n    fn into(self: felt252) -> Word64 {\n        let f_128: u128 = self.try_into().unwrap();\n        let (_, rem) = bounded_int::div_rem(f_128, NZ_POW64_TYPED);\n        Word64 { data: upcast(rem) }\n    }\n}\n\npub trait WordOperations<T> {\n    fn rotr_precomputed(self: T, two_pow_n: u64, two_pow_64_n: u64) -> u128;\n}\n\npub impl Word64WordOperations of WordOperations<Word64> {\n    // does the work of rotr but with precomputed values 2**n and 2**(64-n)\n    fn rotr_precomputed(self: Word64, two_pow_n: u64, two_pow_64_n: u64) -> u128 {\n        let data = self.data.into();\n        let data: u128 = math_shr_precomputed::<u128>(data, two_pow_n.into())\n            | math_shl_precomputed_u128(data, two_pow_64_n.into());\n\n        data\n    }\n}\n\n\nfn ch(e: Word64, f: Word64, g: Word64) -> felt252 {\n    (e & f).into() + (~e & g).into()\n}\n\nfn maj(x: Word64, y: Word64, z: Word64) -> felt252 {\n    // (x & y) ^ (x & z) ^ (y & z)\n    let x_xor_y = x ^ y;\n    let x_xor_y_xor_z = x_xor_y ^ z;\n\n    let res: felt252 = core::felt252_div(\n        (x.into() + y.into() + z.into() - x_xor_y_xor_z.into()), 2,\n    );\n    res\n}\n\n/// Performs x.rotr(28) ^ x.rotr(34) ^ x.rotr(39),\n/// Using precomputed values to avoid recomputation\nfn bsig0(x: Word64) -> u128 {\n    // x.rotr(28) ^ x.rotr(34) ^ x.rotr(39)\n    x.rotr_precomputed(TWO_POW_28, TWO_POW_64_MINUS_28)\n        ^ x.rotr_precomputed(TWO_POW_34, TWO_POW_64_MINUS_34)\n        ^ x.rotr_precomputed(TWO_POW_39, TWO_POW_64_MINUS_39)\n}\n\n/// Performs x.rotr(14) ^ x.rotr(18) ^ x.rotr(41),\n/// Using precomputed values to avoid recomputation\nfn bsig1(x: Word64) -> u128 {\n    // x.rotr(14) ^ x.rotr(18) ^ x.rotr(41)\n    x.rotr_precomputed(TWO_POW_14, TWO_POW_64_MINUS_14)\n        ^ x.rotr_precomputed(TWO_POW_18, TWO_POW_64_MINUS_18)\n        ^ x.rotr_precomputed(TWO_POW_41, TWO_POW_64_MINUS_41)\n}\n\n/// Performs x.rotr(1) ^ x.rotr(8) ^ x.shr(7),\n/// Using precomputed values to avoid recomputation\nfn ssig0(x: Word64) -> u128 {\n    // x.rotr(1) ^ x.rotr(8) ^ x.shr(7)\n    x.rotr_precomputed(TWO_POW_1, TWO_POW_64_MINUS_1)\n        ^ x.rotr_precomputed(TWO_POW_8, TWO_POW_64_MINUS_8)\n        ^ math_shr_precomputed::<u64>(x.data.into(), TWO_POW_7).into() // 2 ** 7\n}\n\n/// Performs x.rotr(19) ^ x.rotr(61) ^ x.shr(6),\n/// Using precomputed values to avoid recomputation\nfn ssig1(x: Word64) -> u128 {\n    // x.rotr(19) ^ x.rotr(61) ^ x.shr(6)\n    x.rotr_precomputed(TWO_POW_19, TWO_POW_64_MINUS_19)\n        ^ x.rotr_precomputed(TWO_POW_61, TWO_POW_64_MINUS_61)\n        ^ math_shr_precomputed::<u64>(x.data, TWO_POW_6).into() // 2 ** 6\n}\n\n\n// Shift left with precomputed powers of 2\n// Only use in this file. Unsafe otherwise.\nfn math_shl_precomputed_u128(x: u128, two_power_n: u128) -> u128 {\n    let mul: felt252 = x.into() * two_power_n.into();\n    mul.try_into().unwrap()\n}\n\n// Shift right with precomputed powers of 2\nfn math_shr_precomputed<T, +Div<T>, +Rem<T>, +Drop<T>, +Copy<T>, +Into<T, u128>>(\n    x: T, two_power_n: T,\n) -> T {\n    x / two_power_n\n}\n\nfn add_trailing_zeroes(ref data: Array<u8>, msg_len: usize) {\n    let mdi = msg_len % 128;\n    let padding_len = if (mdi < 112) {\n        119 - mdi\n    } else {\n        247 - mdi\n    };\n\n    let mut i = 0;\n    while (i != padding_len) {\n        data.append(0);\n        i += 1;\n    };\n}\n\n// Input must be a multiple of 8.\nfn from_u8Array_to_WordArray(mut data: Span<u8>) -> Array<Word64> {\n    let mut new_arr: Array<Word64> = array![];\n\n    while let Some(b8) = data.multi_pop_front::<8>() {\n        let [b7, b6, b5, b4, b3, b2, b1, b0] = b8.unbox();\n        let b0: felt252 = b0.into();\n        let b1: felt252 = b1.into();\n        let b2: felt252 = b2.into();\n        let b3: felt252 = b3.into();\n        let b4: felt252 = b4.into();\n        let b5: felt252 = b5.into();\n        let b6: felt252 = b6.into();\n        let b7: felt252 = b7.into();\n\n        let new_word: felt252 = b0\n            + 256\n                * (b1 + 256 * (b2 + 256 * (b3 + 256 * (b4 + 256 * (b5 + 256 * (b6 + 256 * b7))))));\n\n        new_arr.append(Word64 { data: new_word.try_into().unwrap() });\n    }\n    new_arr\n}\n\nfn from_WordArray_to_u8array(data: Span<Word64>) -> Array<u8> {\n    let mut arr: Array<u8> = array![];\n\n    // Use precomputed powers of 2 for shift right to avoid recomputation\n    for word in data {\n        let data_i: u64 = *word.data;\n        let (w7, w) = DivRem::div_rem(data_i, TWO_POW_56_NZ);\n        let (w6, w) = DivRem::div_rem(w, TWO_POW_48_NZ);\n        let (w5, w) = DivRem::div_rem(w, TWO_POW_40_NZ);\n        let (w4, w) = DivRem::div_rem(w, TWO_POW_32_NZ);\n        let (w3, w) = DivRem::div_rem(w, TWO_POW_24_NZ);\n        let (w2, w) = DivRem::div_rem(w, TWO_POW_16_NZ);\n        let (w1, w0) = DivRem::div_rem(w, TWO_POW_8_NZ);\n\n        arr.append(w7.try_into().unwrap());\n        arr.append(w6.try_into().unwrap());\n        arr.append(w5.try_into().unwrap());\n        arr.append(w4.try_into().unwrap());\n        arr.append(w3.try_into().unwrap());\n        arr.append(w2.try_into().unwrap());\n        arr.append(w1.try_into().unwrap());\n        arr.append(w0.try_into().unwrap());\n    }\n    arr\n}\n\nfn digest_hash(data: Span<Word64>, msg_len: usize) -> [Word64; 8] {\n    let k = K.span();\n\n    let block_nb = msg_len / 128;\n\n    let [mut h_0, mut h_1, mut h_2, mut h_3, mut h_4, mut h_5, mut h_6, mut h_7] = H;\n\n    let mut i = 0;\n\n    while (i != block_nb) {\n        // Prepare message schedule\n        let mut t: usize = 0;\n\n        let mut W: Array<Word64> = array![];\n        while (t != 80) {\n            if t < 16 {\n                W.append(*data.at(i * 16 + t));\n            } else {\n                let buf_felt252: felt252 = ssig1(*W.at(t - 2)).into()\n                    + (*W.at(t - 7)).into()\n                    + ssig0(*W.at(t - 15)).into()\n                    + (*W.at(t - 16)).into();\n                let buf: Word64 = buf_felt252.into();\n                W.append(buf);\n            }\n            t += 1;\n        }\n\n        let mut a = h_0;\n        let mut b = h_1;\n        let mut c = h_2;\n        let mut d = h_3;\n        let mut e = h_4;\n        let mut f = h_5;\n        let mut g = h_6;\n        let mut h = h_7;\n\n        let mut W = W.span();\n        for _k in k {\n            let T1_felt252: felt252 = h.into()\n                + bsig1(e).into()\n                + ch(e, f, g)\n                + (*_k).into()\n                + (*W.pop_front().unwrap()).into();\n\n            let T1_T2_felt252: felt252 = bsig0(a).into() + maj(a, b, c) + T1_felt252;\n            h = g;\n            g = f;\n            f = e;\n            e = d + T1_felt252.into();\n            d = c;\n            c = b;\n            b = a;\n            a = T1_T2_felt252.into();\n        }\n\n        h_0 = a + h_0;\n        h_1 = b + h_1;\n        h_2 = c + h_2;\n        h_3 = d + h_3;\n        h_4 = e + h_4;\n        h_5 = f + h_5;\n        h_6 = g + h_6;\n        h_7 = h + h_7;\n\n        i += 1;\n    }\n\n    return [h_0, h_1, h_2, h_3, h_4, h_5, h_6, h_7];\n}\n\npub fn sha512(mut data: Array<u8>) -> Array<u8> {\n    let hash = _sha512(data);\n    from_WordArray_to_u8array(hash.span())\n}\n\npub fn _sha512(mut data: Array<u8>) -> [Word64; 8] {\n    let bit_numbers: u128 = data.len().into() * 8;\n    // any u32 * 8 fits in u64\n    // let bit_numbers = bit_numbers & Bounded::<u64>::MAX.into();\n\n    let max_u8: u128 = MAX_U8.into();\n    let mut msg_len = data.len();\n\n    // Appends 1\n    data.append(0x80);\n\n    add_trailing_zeroes(ref data, msg_len);\n\n    // add length to the end\n    // Use precomputed powers of 2 for shift right to avoid recomputation\n    let mut res: u128 = math_shr_precomputed(bit_numbers, TWO_POW_56.into()) & max_u8;\n    data.append(res.try_into().unwrap());\n    res = math_shr_precomputed(bit_numbers, TWO_POW_48.into()) & max_u8;\n    data.append(res.try_into().unwrap());\n    res = math_shr_precomputed(bit_numbers, TWO_POW_40.into()) & max_u8;\n    data.append(res.try_into().unwrap());\n    res = math_shr_precomputed(bit_numbers, TWO_POW_32.into()) & max_u8;\n    data.append(res.try_into().unwrap());\n    res = math_shr_precomputed(bit_numbers, TWO_POW_24.into()) & max_u8;\n    data.append(res.try_into().unwrap());\n    res = math_shr_precomputed(bit_numbers, TWO_POW_16.into()) & max_u8;\n    data.append(res.try_into().unwrap());\n    res = math_shr_precomputed(bit_numbers, TWO_POW_8.into()) & max_u8;\n    data.append(res.try_into().unwrap());\n    res = math_shr_precomputed(bit_numbers, TWO_POW_0.into()) & max_u8;\n    data.append(res.try_into().unwrap());\n\n    msg_len = data.len();\n\n    let mut data = from_u8Array_to_WordArray(data.span());\n\n    let hash = digest_hash(data.span(), msg_len);\n    hash\n}\n\n\nconst H: [Word64; 8] = [\n    Word64 { data: 0x6a09e667f3bcc908 }, Word64 { data: 0xbb67ae8584caa73b },\n    Word64 { data: 0x3c6ef372fe94f82b }, Word64 { data: 0xa54ff53a5f1d36f1 },\n    Word64 { data: 0x510e527fade682d1 }, Word64 { data: 0x9b05688c2b3e6c1f },\n    Word64 { data: 0x1f83d9abfb41bd6b }, Word64 { data: 0x5be0cd19137e2179 },\n];\n\n\nconst K: [Word64; 80] = [\n    Word64 { data: 0x428a2f98d728ae22 }, Word64 { data: 0x7137449123ef65cd },\n    Word64 { data: 0xb5c0fbcfec4d3b2f }, Word64 { data: 0xe9b5dba58189dbbc },\n    Word64 { data: 0x3956c25bf348b538 }, Word64 { data: 0x59f111f1b605d019 },\n    Word64 { data: 0x923f82a4af194f9b }, Word64 { data: 0xab1c5ed5da6d8118 },\n    Word64 { data: 0xd807aa98a3030242 }, Word64 { data: 0x12835b0145706fbe },\n    Word64 { data: 0x243185be4ee4b28c }, Word64 { data: 0x550c7dc3d5ffb4e2 },\n    Word64 { data: 0x72be5d74f27b896f }, Word64 { data: 0x80deb1fe3b1696b1 },\n    Word64 { data: 0x9bdc06a725c71235 }, Word64 { data: 0xc19bf174cf692694 },\n    Word64 { data: 0xe49b69c19ef14ad2 }, Word64 { data: 0xefbe4786384f25e3 },\n    Word64 { data: 0x0fc19dc68b8cd5b5 }, Word64 { data: 0x240ca1cc77ac9c65 },\n    Word64 { data: 0x2de92c6f592b0275 }, Word64 { data: 0x4a7484aa6ea6e483 },\n    Word64 { data: 0x5cb0a9dcbd41fbd4 }, Word64 { data: 0x76f988da831153b5 },\n    Word64 { data: 0x983e5152ee66dfab }, Word64 { data: 0xa831c66d2db43210 },\n    Word64 { data: 0xb00327c898fb213f }, Word64 { data: 0xbf597fc7beef0ee4 },\n    Word64 { data: 0xc6e00bf33da88fc2 }, Word64 { data: 0xd5a79147930aa725 },\n    Word64 { data: 0x06ca6351e003826f }, Word64 { data: 0x142929670a0e6e70 },\n    Word64 { data: 0x27b70a8546d22ffc }, Word64 { data: 0x2e1b21385c26c926 },\n    Word64 { data: 0x4d2c6dfc5ac42aed }, Word64 { data: 0x53380d139d95b3df },\n    Word64 { data: 0x650a73548baf63de }, Word64 { data: 0x766a0abb3c77b2a8 },\n    Word64 { data: 0x81c2c92e47edaee6 }, Word64 { data: 0x92722c851482353b },\n    Word64 { data: 0xa2bfe8a14cf10364 }, Word64 { data: 0xa81a664bbc423001 },\n    Word64 { data: 0xc24b8b70d0f89791 }, Word64 { data: 0xc76c51a30654be30 },\n    Word64 { data: 0xd192e819d6ef5218 }, Word64 { data: 0xd69906245565a910 },\n    Word64 { data: 0xf40e35855771202a }, Word64 { data: 0x106aa07032bbd1b8 },\n    Word64 { data: 0x19a4c116b8d2d0c8 }, Word64 { data: 0x1e376c085141ab53 },\n    Word64 { data: 0x2748774cdf8eeb99 }, Word64 { data: 0x34b0bcb5e19b48a8 },\n    Word64 { data: 0x391c0cb3c5c95a63 }, Word64 { data: 0x4ed8aa4ae3418acb },\n    Word64 { data: 0x5b9cca4f7763e373 }, Word64 { data: 0x682e6ff3d6b2b8a3 },\n    Word64 { data: 0x748f82ee5defb2fc }, Word64 { data: 0x78a5636f43172f60 },\n    Word64 { data: 0x84c87814a1f0ab72 }, Word64 { data: 0x8cc702081a6439ec },\n    Word64 { data: 0x90befffa23631e28 }, Word64 { data: 0xa4506cebde82bde9 },\n    Word64 { data: 0xbef9a3f7b2c67915 }, Word64 { data: 0xc67178f2e372532b },\n    Word64 { data: 0xca273eceea26619c }, Word64 { data: 0xd186b8c721c0c207 },\n    Word64 { data: 0xeada7dd6cde0eb1e }, Word64 { data: 0xf57d4f7fee6ed178 },\n    Word64 { data: 0x06f067aa72176fba }, Word64 { data: 0x0a637dc5a2c898a6 },\n    Word64 { data: 0x113f9804bef90dae }, Word64 { data: 0x1b710b35131c471b },\n    Word64 { data: 0x28db77f523047d84 }, Word64 { data: 0x32caab7b40c72493 },\n    Word64 { data: 0x3c9ebe0a15c9bebc }, Word64 { data: 0x431d67c49c100d4c },\n    Word64 { data: 0x4cc5d4becb3e42b6 }, Word64 { data: 0x597f299cfc657e2a },\n    Word64 { data: 0x5fcb6fab3ad6faec }, Word64 { data: 0x6c44198c4a475817 },\n];\n"
  },
  {
    "path": "src/src/lib.cairo",
    "content": "pub mod apps {\n    pub mod drand;\n    pub mod noir;\n    pub mod risc0;\n    pub mod sp1;\n    pub mod sp1_constants;\n}\n\npub mod basic_field_ops;\npub mod core {\n    pub mod circuit;\n}\npub mod circuits {\n    pub(crate) mod dummy;\n    pub(crate) mod ec;\n    pub(crate) mod extf_mul;\n    pub(crate) mod isogeny;\n    pub(crate) mod multi_pairing_check;\n    pub(crate) mod rsa;\n    pub(crate) mod tower_circuits;\n}\npub mod crypto {\n    pub mod mmr;\n}\n\npub mod definitions;\n\npub mod ec {\n    pub mod ec_ops;\n    pub mod ec_ops_g2;\n    pub mod selectors;\n    pub mod pairing {\n        pub mod groth16;\n        pub mod pairing_check;\n        pub mod single_pairing_tower;\n    }\n}\n\npub mod hashes {\n    pub mod poseidon_bn254;\n    pub mod sha_512;\n    pub use poseidon_bn254::poseidon_hash_2_bn254;\n    pub use sha_512::sha512;\n}\n\npub mod signatures {\n    pub mod ecdsa;\n    pub mod eddsa_25519;\n    pub mod rsa;\n    pub mod schnorr;\n}\n\nmod tests {\n    mod autogenerated {\n        #[cfg(test)]\n        mod ecdsa_tests;\n        #[cfg(test)]\n        mod eddsa_tests;\n        #[cfg(test)]\n        mod msm_tests;\n        #[cfg(test)]\n        mod pairing_tests;\n        #[cfg(test)]\n        mod rsa_tests;\n        #[cfg(test)]\n        mod schnorr_tests;\n        #[cfg(test)]\n        mod tower_pairing_tests;\n    }\n    #[cfg(test)]\n    mod calldata_tests;\n    #[cfg(test)]\n    mod sha512_tests;\n    #[cfg(test)]\n    mod sp1_groth_16_tests;\n}\n\npub mod utils {\n    pub mod calldata;\n    pub mod hashing;\n    pub mod neg_3;\n    use core::circuit::u384;\n    use core::panic_with_felt252;\n\n    pub fn u384_assert_zero(x: u384) {\n        if x.limb0 != 0 {\n            panic_with_felt252('not zero l0');\n        }\n        if x.limb1 != 0 {\n            panic_with_felt252('not zero l1');\n        }\n        if x.limb2 != 0 {\n            panic_with_felt252('not zero l2');\n        }\n        if x.limb3 != 0 {\n            panic_with_felt252('not zero l3');\n        }\n    }\n\n    pub fn u384_assert_eq(x: u384, y: u384) {\n        if x.limb0 != y.limb0 {\n            panic_with_felt252('not equal l0');\n        }\n        if x.limb1 != y.limb1 {\n            panic_with_felt252('not equal l1');\n        }\n        if x.limb2 != y.limb2 {\n            panic_with_felt252('not equal l2');\n        }\n        if x.limb3 != y.limb3 {\n            panic_with_felt252('not equal l3');\n        }\n    }\n    pub fn usize_assert_eq(x: usize, y: usize) {\n        if x != y {\n            panic_with_felt252('not equal usize');\n        }\n    }\n\n\n    // Returns true if all limbs of x are zero, false otherwise.\n    pub fn u384_eq_zero(x: u384) -> bool {\n        if x.limb0 != 0 {\n            return false;\n        }\n        if x.limb1 != 0 {\n            return false;\n        }\n        if x.limb2 != 0 {\n            return false;\n        }\n        if x.limb3 != 0 {\n            return false;\n        }\n        true\n    }\n}\n\n\npub use garaga::ec::ec_ops;\npub use garaga::ec::ec_ops_g2;\npub use garaga::ec::pairing::{groth16, pairing_check, single_pairing_tower};\n\n\n#[cfg(test)]\nmod tests_lib {\n    use core::circuit::{\n        AddInputResultTrait, AddMod, CircuitElement, CircuitInput, CircuitInputs, CircuitModulus,\n        CircuitOutputsTrait, EvalCircuitTrait, MulMod, RangeCheck96, circuit_add, circuit_inverse,\n        circuit_mul, circuit_sub, u384, u96,\n    };\n    use core::traits::TryInto;\n    #[test]\n    #[ignore] // Ignored for auto-benchmarks\n    fn test_u96() {\n        let a: u96 = 0x123;\n        assert_eq!(a, 0x123);\n    }\n    #[test]\n    #[ignore] // Ignored for auto-benchmarks\n    fn test_builtins() {\n        core::internal::require_implicit::<RangeCheck96>();\n        core::internal::require_implicit::<AddMod>();\n        core::internal::require_implicit::<MulMod>();\n    }\n    #[test]\n    #[ignore] // Ignored for auto-benchmarks\n    fn test_circuit_success() {\n        let in1 = CircuitElement::<CircuitInput<0>> {};\n        let in2 = CircuitElement::<CircuitInput<1>> {};\n        let add = circuit_add(in1, in2);\n        let inv = circuit_inverse(add);\n        let sub = circuit_sub(inv, in2);\n        let mul = circuit_mul(inv, sub);\n\n        let modulus = TryInto::<_, CircuitModulus>::try_into([7, 0, 0, 0]).unwrap();\n        let outputs = (mul, add, inv)\n            .new_inputs()\n            .next([3, 0, 0, 0])\n            .next([6, 0, 0, 0])\n            .done()\n            .eval(modulus)\n            .unwrap();\n\n        assert_eq!(outputs.get_output(add), u384 { limb0: 2, limb1: 0, limb2: 0, limb3: 0 });\n        assert_eq!(outputs.get_output(inv), u384 { limb0: 4, limb1: 0, limb2: 0, limb3: 0 });\n        assert_eq!(outputs.get_output(sub), u384 { limb0: 5, limb1: 0, limb2: 0, limb3: 0 });\n        assert_eq!(outputs.get_output(mul), u384 { limb0: 6, limb1: 0, limb2: 0, limb3: 0 });\n    }\n\n    #[test]\n    #[ignore] // Ignored for auto-benchmarks\n    fn test_circuit_failure() {\n        let in0 = CircuitElement::<CircuitInput<0>> {};\n        let out0 = circuit_inverse(in0);\n\n        let modulus = TryInto::<_, CircuitModulus>::try_into([55, 0, 0, 0]).unwrap();\n        (out0,).new_inputs().next([11, 0, 0, 0]).done().eval(modulus).unwrap_err();\n    }\n    #[test]\n    #[ignore] // Ignored for auto-benchmarks\n    fn test_fill_inputs_loop() {\n        let in1 = CircuitElement::<CircuitInput<0>> {};\n        let in2 = CircuitElement::<CircuitInput<1>> {};\n        let add = circuit_add(in1, in2);\n\n        let mut inputs: Array<[u96; 4]> = array![[1, 0, 0, 0], [2, 0, 0, 0]];\n        let mut circuit_inputs = (add,).new_inputs();\n\n        while let Option::Some(input) = inputs.pop_front() {\n            circuit_inputs = circuit_inputs.next(input);\n        }\n\n        let modulus = TryInto::<_, CircuitModulus>::try_into([55, 0, 0, 0]).unwrap();\n        circuit_inputs.done().eval(modulus).unwrap();\n    }\n}\n"
  },
  {
    "path": "src/src/signatures/ecdsa.cairo",
    "content": "use garaga::basic_field_ops::{inv_mod_p, is_even_u384, mul_mod_p, reduce_mod_p};\nuse garaga::definitions::{\n    G1Point, Zero, deserialize_u384, get_G, get_curve_order_modulus, get_n, serialize_u384, u384,\n};\nuse garaga::ec_ops::{G1PointTrait, msm_g1};\nuse garaga::utils::u384_eq_zero;\n\n/// An ECDSA signature with message hash.\n///\n/// # Fields\n/// * `rx`: `u384` - The r component (R.x mod n) of the signature.\n/// * `s`: `u256` - The s component of the signature.\n/// * `v`: `bool` - The parity of R.y (false if R.y is even, true if odd).\n/// * `z`: `u256` - The message hash.\n#[derive(Drop, Debug, PartialEq)]\npub struct ECDSASignature {\n    pub rx: u384,\n    pub s: u256,\n    pub v: bool,\n    pub z: u256,\n}\n\npub impl SerdeECDSASignature of Serde<ECDSASignature> {\n    fn serialize(self: @ECDSASignature, ref output: Array<felt252>) {\n        serialize_u384(self.rx, ref output);\n        Serde::<u256>::serialize(self.s, ref output);\n        Serde::<bool>::serialize(self.v, ref output);\n        Serde::<u256>::serialize(self.z, ref output);\n    }\n    fn deserialize(ref serialized: Span<felt252>) -> Option<ECDSASignature> {\n        let rx = deserialize_u384(ref serialized);\n        let s = Serde::<u256>::deserialize(ref serialized).unwrap();\n        let v = Serde::<bool>::deserialize(ref serialized).unwrap();\n        let z = Serde::<u256>::deserialize(ref serialized).unwrap();\n        return Option::Some(ECDSASignature { rx, s, v, z });\n    }\n}\n\n/// An ECDSA signature bundled with computation hints required for Cairo verification.\n///\n/// # Fields\n/// * `signature`: `ECDSASignature` - The core signature data.\n/// * `msm_hint`: `Span<felt252>` - Hint for multi-scalar multiplication computation.\n#[derive(Drop, Debug, PartialEq, Serde)]\npub struct ECDSASignatureWithHint {\n    pub signature: ECDSASignature,\n    pub msm_hint: Span<felt252>,\n}\n\n/// Verifies an ECDSA signature with associated hints, assuming the message hash is correct.\n///\n/// # Important Assumption\n/// **This function assumes that the message hash `z` has been correctly computed from the message\n/// by the caller.** It does not compute or verify the hash derivation itself. The caller is\n/// responsible for ensuring that `z = H(message)` (or the appropriate hash function for their\n/// protocol) before calling this function.\n///\n/// # Arguments\n/// * `signature`: `ECDSASignatureWithHint` - The signature and verification data bundle containing:\n///     - rx: The r component (R.x mod n) of the signature\n///     - s: The s component of the signature\n///     - v: The parity of R.y\n///     - z: The message hash (assumed to be correctly computed by the caller)\n///     - msm_hint: Hint for multi-scalar multiplication\n/// * `public_key`: `G1Point` - The public key to verify against.\n/// * `curve_id`: `usize` - The curve identifier\n///\n/// # Algorithm\n/// The ECDSA signature verification checks if the signature (r,s) is valid for a given message hash\n/// z:\n/// 1. Verify that r is non-zero and s ∈ {1, ..., n-1}\n/// 2. Verify that the public key P is on the curve\n/// 3. Compute w = s⁻¹ mod n\n/// 4. Compute u₁ = zw mod n and u₂ = rw mod n\n/// 5. Compute R' = u₁G + u₂P\n/// 6. Verify that R'.x mod n equals r (implicitly checks r < n) and R'.y's parity does NOT match v\n/// /!\\ Note: Behaviour for cofactor > 1 only tested on curves with cofactor 1\n/// (BN254, SECP256K1/R1, GRUMPKIN).\npub fn is_valid_ecdsa_signature_assuming_hash(\n    signature: ECDSASignatureWithHint, public_key: G1Point, curve_id: usize,\n) -> bool {\n    let ECDSASignatureWithHint { signature, msm_hint } = signature;\n    let ECDSASignature { rx, s, v, z } = signature;\n\n    let n: u256 = get_n(curve_id);\n    let modulus = get_curve_order_modulus(curve_id);\n\n    // Check that r is non-zero and s is in range {1, ..., n-1}\n    // Note: r < n is implicitly checked later when comparing r_prime.x mod n == r\n    if u384_eq_zero(rx) || s >= n || s == 0 {\n        return false;\n    }\n\n    // Verify public key is on curve\n    if !public_key.is_on_curve_excluding_infinity(curve_id) {\n        return false;\n    }\n\n    // Compute s⁻¹ mod n using the inv_mod_p function\n    let s_u384: u384 = s.into();\n    let s_inv = inv_mod_p(s_u384, modulus);\n\n    // Compute u₁ = z·s⁻¹ mod n and u₂ = r·s⁻¹ mod n\n    let u1: u256 = mul_mod_p(z.into(), s_inv, modulus).try_into().unwrap();\n    let u2: u256 = mul_mod_p(rx, s_inv, modulus).try_into().unwrap();\n\n    // Compute R' = u₁G + u₂P using MSM\n    let points = array![get_G(curve_id), public_key].span();\n    let scalars = array![u1, u2].span();\n    let R_prime = msm_g1(points, scalars, curve_id, msm_hint);\n\n    // Check R'.x mod n equals r and R'.y parity matches v\n    // Note : if cofactor is 1, no need to reduce r_prime.x mod n\n    let ry_prime_parity = is_even_u384(R_prime.y);\n    let r_prime_x_mod_n = reduce_mod_p(R_prime.x, modulus);\n\n    if R_prime.is_zero() || r_prime_x_mod_n != rx || ry_prime_parity == v {\n        return false;\n    }\n\n    true\n}\n"
  },
  {
    "path": "src/src/signatures/eddsa_25519.cairo",
    "content": "use core::circuit::{\n    CircuitElement, CircuitInput, CircuitInputs, CircuitOutputsTrait, EvalCircuitTrait, circuit_add,\n    circuit_inverse, circuit_mul, circuit_sub, u384,\n};\nuse core::integer::u128_byte_reverse;\nuse garaga::basic_field_ops::{neg_mod_p, u512_mod_p};\nuse garaga::circuits::ec;\nuse garaga::core::circuit::{AddInputResultTrait2, u288IntoCircuitInputValue};\nuse garaga::definitions::{\n    G1Point, Zero, get_ED25519_modulus, get_a, get_curve_order_modulus, get_modulus, u288Serde,\n};\nuse garaga::ec_ops::{G1PointTrait, ec_safe_add, msm_fake_glv};\nuse garaga::hashes::sha_512::_sha512;\n\nconst POW_2_32_u64: NonZero<u64> = 0x100000000;\nconst POW_2_127_u128: NonZero<u128> = 0x80000000000000000000000000000000;\nconst POW_2_8_u128: NonZero<u128> = 0x100;\n\nconst POW_2_64_u128: u128 = 0x10000000000000000;\nconst X22519_u256: u256 = 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed;\nconst D_TWISTED: u384 = u384 {\n    limb0: 0x4141d8ab75eb4dca135978a3,\n    limb1: 0x8cc740797779e89800700a4d,\n    limb2: 0x52036cee2b6ffe73,\n    limb3: 0x0,\n};\nconst A_TWISTED: u384 = u384 {\n    limb0: 0xffffffffffffffffffffffec,\n    limb1: 0xffffffffffffffffffffffff,\n    limb2: 0x7fffffffffffffff,\n    limb3: 0x0,\n};\n\nconst G_neg: G1Point = G1Point {\n    x: u384 {\n        limb0: 0xd617c9aca55c89b025aef35,\n        limb1: 0xf00b8f02f1c20618a9c13fdf,\n        limb2: 0x2a78dd0fd02c0339,\n        limb3: 0x0,\n    },\n    y: u384 {\n        limb0: 0x7f8ece9a6487cf0c09d3e2d9,\n        limb1: 0x41b7c45a9c867cdc30902f9e,\n        limb2: 0x5639bb5a38e25dd1,\n        limb3: 0x0,\n    },\n};\n\n\n#[derive(Copy, Drop, Debug, PartialEq, Serde)]\npub struct EdDSASignature {\n    pub Ry_twisted: u256, // Compressed form of Ry (converted to integer from little endian bytes)\n    pub s: u256,\n    pub msg: Span<u8>,\n}\n\n#[derive(Copy, Drop, Debug, PartialEq, Serde)]\npub struct EdDSASignatureWithHint {\n    pub signature: EdDSASignature,\n    pub msm_hint: Span<felt252>,\n    pub sqrt_Rx_hint: u256,\n    pub sqrt_Px_hint: u256,\n}\n\n\n/// Verifies an Ed25519 signature according to RFC 8032.\n///\n/// # Security\n/// This implementation follows RFC 8032 Section 5.1.7 by explicitly rejecting\n/// small-order points. Both the signature point R and public key A are tested\n/// to ensure [8]P ≠ 𝒪, preventing key-compromise and signature-malleability\n/// attacks that could arise from small-order components.\n///\n/// # Parameters\n/// - `signature`: The signature with hints for point decompression and MSM\n/// - `Py_twisted`: Compressed form of Public Key y-coordinate (converted to integer from little\n/// endian bytes)\n///\n/// # Returns\n/// - `true` if the signature is valid\n/// - `false` if the signature is invalid or contains small-order points\npub fn is_valid_eddsa_signature(signature: EdDSASignatureWithHint, Py_twisted: u256) -> bool {\n    let EdDSASignatureWithHint { signature, mut msm_hint, sqrt_Rx_hint, sqrt_Px_hint } = signature;\n    let EdDSASignature { Ry_twisted, s, msg } = signature;\n\n    let R_opt: Option<G1Point> = decompress_edwards_pt_from_y_compressed_le_into_weirstrass_point(\n        Ry_twisted, sqrt_Rx_hint,\n    );\n    let P_opt: Option<G1Point> = decompress_edwards_pt_from_y_compressed_le_into_weirstrass_point(\n        Py_twisted, sqrt_Px_hint,\n    );\n\n    if P_opt.is_none() || R_opt.is_none() {\n        return false;\n    }\n\n    let P: G1Point = P_opt.unwrap();\n    let R: G1Point = R_opt.unwrap();\n\n    // Verify points lie on the curve (but may be outside the prime-order subgroup)\n    if !R.is_on_curve_excluding_infinity(4) || !P.is_on_curve_excluding_infinity(4) {\n        return false;\n    }\n\n    // Reject small-order points explicitly to prevent key-compromise and\n    // signature-malleability attacks. Check [8]P = 𝒪 for both R and the public key.\n    if is_small_order_point(R, 4) || is_small_order_point(P, 4) {\n        return false;\n    }\n\n    let mut data: Array<u8> = array![];\n\n    // Hash(Ry + Py + msg)\n    append_u256_le_to_u8_be_array(Ry_twisted, ref data);\n    append_u256_le_to_u8_be_array(Py_twisted, ref data);\n    for byte in msg {\n        data.append(*byte);\n    }\n\n    // println!(\"preimage: {:?}\", data);\n\n    let hash = _sha512(data);\n    let [h0, h1, h2, h3, h4, h5, h6, h7] = hash;\n\n    // println!(\"hash_bytes: {:?}\", hash_bytes);\n\n    let high_high_128: u128 = h1.data.into() + h0.data.into() * POW_2_64_u128;\n    let high_low_128: u128 = h3.data.into() + h2.data.into() * POW_2_64_u128;\n    let low_high_128: u128 = h5.data.into() + h4.data.into() * POW_2_64_u128;\n    let low_low_128: u128 = h7.data.into() + h6.data.into() * POW_2_64_u128;\n\n    let high_256 = u256 { low: high_low_128, high: high_high_128 };\n    let low_256 = u256 { low: low_low_128, high: low_high_128 };\n\n    // [hh0, ..., hh15] [hl0, ..., hl15] [lh0, ..., lh15] [ll0, ..., ll15]\n\n    let hh_le = u128_byte_reverse(low_256.low);\n    let hl_le = u128_byte_reverse(low_256.high);\n    let lh_le = u128_byte_reverse(high_256.low);\n    let ll_le = u128_byte_reverse(high_256.high);\n\n    // u512 from hash bytes (little endian)\n    // [ll15, ..., ll0] [lh15, ..., lh0] [hl15, ..., hl0] [hh15, ..., hh0]\n\n    let h_le: u384 = u256 { low: hl_le, high: hh_le }.into();\n    let l_le: u384 = u256 { low: ll_le, high: lh_le }.into();\n\n    // println!(\"h_le: {:?}\", h_le);\n    // println!(\"l_le: {:?}\", l_le);\n\n    let order_modulus = get_curve_order_modulus(4);\n\n    let h_mod_p = u512_mod_p(h_le, l_le, order_modulus);\n\n    // Calculate h = hash(R + pubKey + msg) mod q\n    // Calculate P1 = s * G\n    // Calculate P2 = R + h * pubKey\n    // Return s*G == R + h * pubKey\n    // <=> s*(-G) +  h * pubKey + R == 0\n\n    let points: Span<G1Point> = array![G_neg, P].span();\n    let scalars: Span<u256> = array![s, h_mod_p.try_into().unwrap()].span();\n\n    let msm_result = msm_fake_glv(points, scalars, 4, ref msm_hint);\n\n    return ec_safe_add(msm_result, R, 4).is_infinity();\n}\n\n/// Checks if a point has small order (order dividing the cofactor 8).\n///\n/// For Ed25519 the full curve has order 8×ℓ where ℓ is the prime-order subgroup.\n/// Small-order points (orders 1, 2, 4, 8) can enable attacks, so they must be rejected.\n///\n/// # Implementation\n/// Tests for small-order by checking if [2^k]P = 𝒪 for k = 1, 2, or 3 (i.e., orders 2, 4, or 8).\n/// Uses the fact that on Weierstrass curves, a point equals its negation (hence has order 2)\n/// iff its y-coordinate is zero. Returns true if P has order dividing 8.\n///\n/// # Parameters\n/// - `p`: The point to test\n/// - `curve_index`: Must be 4 (Ed25519)\n///\n/// # Returns\n/// - `true` if P has small order (should be rejected)\n/// - `false` if P is in the large subgroup (acceptable)\nfn is_small_order_point(p: G1Point, curve_index: usize) -> bool {\n    // Compute [8]P = [2^3]P by three doublings\n\n    if p.y.is_zero() {\n        // => P=-P => 2P = 0\n        return true;\n    }\n\n    let modulus = get_modulus(curve_index);\n    let a = get_a(curve_index);\n    let (p2) = ec::run_DOUBLE_EC_POINT_circuit(p, a, modulus);\n\n    if p2.y.is_zero() {\n        // => 2P=-2P => 4P = 0\n        return true;\n    }\n\n    let (p4) = ec::run_DOUBLE_EC_POINT_circuit(p2, a, modulus);\n\n    if p4.y.is_zero() {\n        // => 4P=-4P => 8P = 0\n        return true;\n    }\n\n    // If [8]P = 𝒪 then P has order dividing 8 (small-order point)\n    return false;\n}\n\n\npub fn decompress_edwards_pt_from_y_compressed_le_into_weirstrass_point(\n    y_twisted_compressed: u256, sqrt_hint: u256,\n) -> Option<G1Point> {\n    let (bit_sign, y_high): (u128, u128) = DivRem::div_rem(\n        y_twisted_compressed.high, POW_2_127_u128,\n    );\n    let modulus = get_ED25519_modulus();\n\n    // println!(\"sqrt_hint: 0x{:x}\", sqrt_hint);\n    let sqrt_hint_384: u384 = sqrt_hint.into();\n\n    let x_384: u384 = match sqrt_hint.low % 2 == bit_sign % 2 {\n        true => sqrt_hint_384,\n        false => neg_mod_p(sqrt_hint_384, modulus),\n    };\n\n    let y = u256 { low: y_twisted_compressed.low, high: y_high };\n    let y_u384: u384 = y.into();\n\n    let y = CircuitElement::<CircuitInput<0>> {};\n    let f1 = CircuitElement::<CircuitInput<1>> {};\n    let d = CircuitElement::<CircuitInput<2>> {};\n    let sqrt_x = CircuitElement::<CircuitInput<3>> {};\n\n    let y_sq = circuit_mul(y, y);\n    let num = circuit_sub(y_sq, f1);\n    let d_mul_y_sq = circuit_mul(d, y_sq);\n    let den = circuit_add(d_mul_y_sq, f1);\n\n    let inv_den = circuit_inverse(den);\n    let x_sq = circuit_mul(num, inv_den);\n\n    let sqrt_x_sq = circuit_mul(sqrt_x, sqrt_x);\n    let check = circuit_sub(sqrt_x_sq, x_sq);\n\n    let outputs = (check,)\n        .new_inputs()\n        .next_2(y_u384)\n        .next_2([1, 0, 0, 0])\n        .next_2([0x4141d8ab75eb4dca135978a3, 0x8cc740797779e89800700a4d, 0x52036cee2b6ffe73, 0x0])\n        .next_2(x_384)\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    let sqrt_check = outputs.get_output(check);\n\n    if sqrt_check.is_non_zero() {\n        return None;\n    }\n\n    if sqrt_hint >= X22519_u256 {\n        return None;\n    }\n\n    return Some(to_weierstrass(x_384, y_u384));\n}\n\n// Convert twisted Edwards Ed25519 point to equivalent Weierstrass point\npub fn to_weierstrass(x_twisted: u384, y_twisted: u384) -> G1Point {\n    let x_t = CircuitElement::<CircuitInput<0>> {};\n    let y_t = CircuitElement::<CircuitInput<1>> {};\n    let a = CircuitElement::<CircuitInput<2>> {};\n    let d = CircuitElement::<CircuitInput<3>> {};\n    let four = CircuitElement::<CircuitInput<4>> {};\n    let five = CircuitElement::<CircuitInput<5>> {};\n    let twelve = CircuitElement::<CircuitInput<6>> {};\n    let modulus = get_ED25519_modulus();\n\n    let five_a = circuit_mul(five, a);\n    let a_y_twisted = circuit_mul(a, y_t);\n    let d_y_twisted = circuit_mul(d, y_t);\n    let five_d_y_twisted = circuit_mul(five, d_y_twisted);\n\n    let num_x = circuit_sub(circuit_add(five_a, a_y_twisted), circuit_add(five_d_y_twisted, d));\n    let den_x = circuit_sub(twelve, circuit_mul(twelve, y_t));\n    let _x = circuit_mul(num_x, circuit_inverse(den_x));\n\n    let num_y = circuit_sub(circuit_add(a, a_y_twisted), circuit_add(d_y_twisted, d));\n    let four_xt = circuit_mul(four, x_t);\n    let den_y = circuit_sub(four_xt, circuit_mul(four_xt, y_t));\n    let _y = circuit_mul(num_y, circuit_inverse(den_y));\n\n    let outputs = (_x, _y)\n        .new_inputs()\n        .next_2(x_twisted)\n        .next_2(y_twisted)\n        .next_2(A_TWISTED)\n        .next_2(D_TWISTED)\n        .next_2([4, 0, 0, 0])\n        .next_2([5, 0, 0, 0])\n        .next_2([12, 0, 0, 0])\n        .done_2()\n        .eval(modulus)\n        .unwrap();\n\n    let x = outputs.get_output(_x);\n    let y = outputs.get_output(_y);\n\n    G1Point { x: x, y: y }\n}\n\n\n#[inline]\npub fn u256_byte_reverse(word: u256) -> u256 {\n    u256 {\n        low: core::integer::u128_byte_reverse(word.high),\n        high: core::integer::u128_byte_reverse(word.low),\n    }\n}\n\n\n// Append u256 as little endian to u8 array\nfn append_u256_le_to_u8_be_array(x_le: u256, ref arr: Array<u8>) {\n    let mut high = x_le.high;\n    let mut low = x_le.low;\n\n    let mut i: felt252 = 0;\n    while (i != 16) {\n        let (temp_remaining, byte) = DivRem::div_rem(low, POW_2_8_u128);\n        arr.append(byte.try_into().unwrap());\n        low = temp_remaining;\n        i += 1;\n    }\n\n    let mut j: felt252 = 0;\n    while (j != 16) {\n        let (temp_remaining, byte) = DivRem::div_rem(high, POW_2_8_u128);\n        arr.append(byte.try_into().unwrap());\n        high = temp_remaining;\n        j += 1;\n    }\n}\n"
  },
  {
    "path": "src/src/signatures/rsa.cairo",
    "content": "//! RSA-2048 signature verification via multi-channel RNS arithmetic.\n//!\n//! Verifies s^{65537} ≡ m (mod n) for a 2048-bit RSA modulus n without\n//! native 2048-bit arithmetic. Integers are represented in a Residue Number\n//! System (RNS) defined by 11 pairwise coprime ~384-bit primes p_1, ..., p_{11}.\n//!\n//! Each modular reduction a·b = q·n + r in the exponentiation chain is verified\n//! by evaluating chunk polynomials at α_i = (2^{96})^4 mod p_i via Horner's method\n//! and checking a(α_i)·b(α_i) - q(α_i)·n(α_i) - r(α_i) = 0 for all i.\n//!\n//! The CRT exactness theorem guarantees that if all 11 channel checks pass and\n//! ∏ p_i exceeds the maximum deviation |a·b - q·n - r|, then the integer\n//! relation holds exactly.\n\nuse core::circuit::{CircuitModulus, u384, u96};\nuse core::num::traits::Zero;\nuse core::serde::Serde;\nuse core::sha256::compute_sha256_byte_array;\nuse core::traits::TryInto;\nuse corelib_imports::bounded_int::{downcast, upcast};\nuse garaga::basic_field_ops::is_even_u384;\nuse garaga::circuits::rsa::run_RSA_FULL_VERIFICATION_circuit;\nuse garaga::definitions::{RSA2048Chunks, RSA2048ReductionWitness, deserialize_u384, serialize_u384};\n\nconst RSA_TOP_CHUNK_LIMB1_MAX: u128 = 0xFFFF_FFFF_u128;\nconst RSA2048_CHUNKS_SERIALIZED_LEN: usize = 24;\nconst RSA2048_REDUCTION_WITNESS_SERIALIZED_LEN: usize = 2 * RSA2048_CHUNKS_SERIALIZED_LEN;\nconst RSA2048_REDUCTION_COUNT: usize = 17;\nconst RSA2048_REDUCTIONS_HINT_SERIALIZED_LEN: usize = RSA2048_REDUCTION_COUNT\n    * RSA2048_REDUCTION_WITNESS_SERIALIZED_LEN;\nconst RSA_CHANNEL_MODULI: [[u96; 4]; 11] = [\n    [\n        0xfffffffffffffffffffffd21, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n    [\n        0xfffffffffffffffffffffb4d, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n    [\n        0xfffffffffffffffffffff3ed, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n    [\n        0xfffffffffffffffffffff05d, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n    [\n        0xffffffffffffffffffffed33, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n    [\n        0xffffffffffffffffffffe9b9, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n    [\n        0xffffffffffffffffffffe877, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n    [\n        0xffffffffffffffffffffe4db, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n    [\n        0xffffffffffffffffffffe40f, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n    [\n        0xffffffffffffffffffffe083, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n    [\n        0xffffffffffffffffffffdd1d, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0x1fffffffffffffffffffffff,\n    ],\n];\nconst U384_ZERO: u384 = u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 };\nconst U384_ONE: u384 = u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 };\n/// The multiplicative identity 1 in chunk representation.\nconst RSA_ONE_CHUNKS: RSA2048Chunks = RSA2048Chunks {\n    w0: U384_ONE, w1: U384_ZERO, w2: U384_ZERO, w3: U384_ZERO, w4: U384_ZERO, w5: U384_ZERO,\n};\n\n/// Horner evaluation bases: α_i = (2^96)^4 mod p_i for each of the 11 channel primes.\n/// Used to evaluate the chunk polynomial representation of 2048-bit integers\n/// within each RNS channel circuit.\nconst RSA_CHUNK_STEPS: [u384; 11] = [\n    u384 { limb0: 0x16f8, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x2598, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x6098, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x7d18, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x9668, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0xb238, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0xbc48, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0xd928, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0xdf88, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0xfbe8, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    u384 { limb0: 0x11718, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n];\n\n\nfn serialize_rsa2048_chunks(self: @RSA2048Chunks, ref output: Array<felt252>) {\n    serialize_u384(self.w0, ref output);\n    serialize_u384(self.w1, ref output);\n    serialize_u384(self.w2, ref output);\n    serialize_u384(self.w3, ref output);\n    serialize_u384(self.w4, ref output);\n    serialize_u384(self.w5, ref output);\n}\n\nfn deserialize_rsa2048_chunks(ref serialized: Span<felt252>) -> RSA2048Chunks {\n    let w0 = deserialize_u384(ref serialized);\n    let w1 = deserialize_u384(ref serialized);\n    let w2 = deserialize_u384(ref serialized);\n    let w3 = deserialize_u384(ref serialized);\n    let w4 = deserialize_u384(ref serialized);\n    let w5 = deserialize_u384(ref serialized);\n    RSA2048Chunks { w0, w1, w2, w3, w4, w5 }\n}\n\n#[derive(Copy, Drop, Debug, PartialEq)]\npub struct RSA2048PublicKey {\n    pub modulus: RSA2048Chunks,\n}\n\npub impl RSA2048PublicKeySerde of Serde<RSA2048PublicKey> {\n    fn serialize(self: @RSA2048PublicKey, ref output: Array<felt252>) {\n        serialize_rsa2048_chunks(self.modulus, ref output);\n    }\n\n    fn deserialize(ref serialized: Span<felt252>) -> Option<RSA2048PublicKey> {\n        Option::Some(RSA2048PublicKey { modulus: deserialize_rsa2048_chunks(ref serialized) })\n    }\n}\n\n#[derive(Copy, Drop, Debug, PartialEq)]\npub struct RSA2048Signature {\n    pub signature: RSA2048Chunks,\n    pub expected_message: RSA2048Chunks,\n}\n\npub impl RSA2048SignatureSerde of Serde<RSA2048Signature> {\n    fn serialize(self: @RSA2048Signature, ref output: Array<felt252>) {\n        serialize_rsa2048_chunks(self.signature, ref output);\n        serialize_rsa2048_chunks(self.expected_message, ref output);\n    }\n\n    fn deserialize(ref serialized: Span<felt252>) -> Option<RSA2048Signature> {\n        let signature = deserialize_rsa2048_chunks(ref serialized);\n        let expected_message = deserialize_rsa2048_chunks(ref serialized);\n        Option::Some(RSA2048Signature { signature, expected_message })\n    }\n}\n\npub impl RSA2048ReductionWitnessSerde of Serde<RSA2048ReductionWitness> {\n    fn serialize(self: @RSA2048ReductionWitness, ref output: Array<felt252>) {\n        serialize_rsa2048_chunks(self.quotient, ref output);\n        serialize_rsa2048_chunks(self.remainder, ref output);\n    }\n\n    fn deserialize(ref serialized: Span<felt252>) -> Option<RSA2048ReductionWitness> {\n        let quotient = deserialize_rsa2048_chunks(ref serialized);\n        let remainder = deserialize_rsa2048_chunks(ref serialized);\n        Option::Some(RSA2048ReductionWitness { quotient, remainder })\n    }\n}\n\n#[derive(Drop, Debug, PartialEq)]\npub struct RSA2048SignatureWithHint {\n    pub signature: RSA2048Signature,\n    pub reductions_hint: Span<felt252>,\n}\n\npub impl SerdeRSA2048SignatureWithHint of Serde<RSA2048SignatureWithHint> {\n    fn serialize(self: @RSA2048SignatureWithHint, ref output: Array<felt252>) {\n        Serde::<RSA2048Signature>::serialize(self.signature, ref output);\n        output.append_span(*self.reductions_hint);\n    }\n\n    fn deserialize(ref serialized: Span<felt252>) -> Option<RSA2048SignatureWithHint> {\n        let signature = Serde::<RSA2048Signature>::deserialize(ref serialized)?;\n        let serialized_len = serialized.len();\n        if serialized_len < RSA2048_REDUCTIONS_HINT_SERIALIZED_LEN {\n            return Option::None;\n        }\n        let reductions_hint = serialized.slice(0, RSA2048_REDUCTIONS_HINT_SERIALIZED_LEN);\n        serialized = serialized\n            .slice(\n                RSA2048_REDUCTIONS_HINT_SERIALIZED_LEN,\n                serialized_len - RSA2048_REDUCTIONS_HINT_SERIALIZED_LEN,\n            );\n        Option::Some(RSA2048SignatureWithHint { signature, reductions_hint })\n    }\n}\n\nfn limb_lt(lhs: u96, rhs: u96) -> bool {\n    let lhs_u128: u128 = upcast(lhs);\n    let rhs_u128: u128 = upcast(rhs);\n    lhs_u128 < rhs_u128\n}\n\nfn u384_lt(lhs: u384, rhs: u384) -> bool {\n    if lhs.limb3 != rhs.limb3 {\n        return limb_lt(lhs.limb3, rhs.limb3);\n    }\n    if lhs.limb2 != rhs.limb2 {\n        return limb_lt(lhs.limb2, rhs.limb2);\n    }\n    if lhs.limb1 != rhs.limb1 {\n        return limb_lt(lhs.limb1, rhs.limb1);\n    }\n    return limb_lt(lhs.limb0, rhs.limb0);\n}\n\nfn chunks_lt(lhs: RSA2048Chunks, rhs: RSA2048Chunks) -> bool {\n    if lhs.w5 != rhs.w5 {\n        return u384_lt(lhs.w5, rhs.w5);\n    }\n    if lhs.w4 != rhs.w4 {\n        return u384_lt(lhs.w4, rhs.w4);\n    }\n    if lhs.w3 != rhs.w3 {\n        return u384_lt(lhs.w3, rhs.w3);\n    }\n    if lhs.w2 != rhs.w2 {\n        return u384_lt(lhs.w2, rhs.w2);\n    }\n    if lhs.w1 != rhs.w1 {\n        return u384_lt(lhs.w1, rhs.w1);\n    }\n    return u384_lt(lhs.w0, rhs.w0);\n}\n\nfn chunks_le(lhs: RSA2048Chunks, rhs: RSA2048Chunks) -> bool {\n    lhs == rhs || chunks_lt(lhs, rhs)\n}\n\nfn top_chunk_is_well_formed(top: u384) -> bool {\n    if top.limb2 != 0 {\n        return false;\n    }\n    if top.limb3 != 0 {\n        return false;\n    }\n    let limb1: u128 = upcast(top.limb1);\n    limb1 <= RSA_TOP_CHUNK_LIMB1_MAX\n}\n\n/// Deserialize and validate a modular reduction witness (q, r) from raw felt252 data.\n/// Checks that both quotient and remainder have well-formed top chunks,\n/// and that the remainder is strictly less than the modulus.\nfn deserialize_and_validate_witness(\n    ref hint: Span<felt252>, modulus_chunks: RSA2048Chunks,\n) -> RSA2048ReductionWitness {\n    let quotient = deserialize_rsa2048_chunks(ref hint);\n    let remainder = deserialize_rsa2048_chunks(ref hint);\n    assert(top_chunk_is_well_formed(quotient.w5), 'RSA:bad quotient top chunk');\n    assert(top_chunk_is_well_formed(remainder.w5), 'RSA:bad remainder top chunk');\n    assert(chunks_lt(remainder, modulus_chunks), 'RSA:remainder >= modulus');\n    RSA2048ReductionWitness { quotient, remainder }\n}\n\n/// Verify an RSA-2048 signature assuming the message is already encoded.\n///\n/// Given public key n and signature data (s, m, 17 reduction witnesses),\n/// verifies s^{65537} ≡ m (mod n) by:\n///   1. Well-formedness: n > 1 odd, 0 ≤ s < n, 0 ≤ m < n, valid chunk bounds.\n///   2. For each of 11 RNS channels: run the mega-circuit to verify all 17\n///      reduction steps of the square-and-multiply chain.\n///   3. Final equality: the last reduction remainder equals the expected message m.\n#[inline(never)]\npub fn is_valid_rsa2048_signature_assuming_encoded_message(\n    signature: @RSA2048SignatureWithHint, public_key: @RSA2048PublicKey,\n) -> bool {\n    let modulus_chunks = *public_key.modulus;\n    let sig_chunks = *signature.signature.signature;\n    let expected_message_chunks = *signature.signature.expected_message;\n\n    if !top_chunk_is_well_formed(modulus_chunks.w5) {\n        return false;\n    }\n    if !top_chunk_is_well_formed(sig_chunks.w5) {\n        return false;\n    }\n    if !top_chunk_is_well_formed(expected_message_chunks.w5) {\n        return false;\n    }\n\n    if chunks_le(modulus_chunks, RSA_ONE_CHUNKS) {\n        return false;\n    }\n    if is_even_u384(modulus_chunks.w0) {\n        return false;\n    }\n    if !chunks_lt(sig_chunks, modulus_chunks) {\n        return false;\n    }\n    if !chunks_lt(expected_message_chunks, modulus_chunks) {\n        return false;\n    }\n\n    let mut reductions_hint = *signature.reductions_hint;\n\n    // Deserialize and validate all 17 modular reduction witnesses (q_i, r_i)\n    if reductions_hint.len() < RSA2048_REDUCTIONS_HINT_SERIALIZED_LEN {\n        return false;\n    }\n\n    let w0 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w1 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w2 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w3 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w4 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w5 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w6 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w7 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w8 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w9 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w10 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w11 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w12 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w13 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w14 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w15 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n    let w16 = deserialize_and_validate_witness(ref reductions_hint, modulus_chunks);\n\n    if !reductions_hint.is_empty() {\n        return false;\n    }\n\n    // For each RNS channel p_i, verify all 17 reductions via the fused circuit\n    let mut steps = RSA_CHUNK_STEPS.span();\n    for channel_modulus_limbs in RSA_CHANNEL_MODULI.span() {\n        let step = *steps.pop_front().unwrap();\n        let channel_modulus: CircuitModulus = (*channel_modulus_limbs).try_into().unwrap();\n        let (d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16) =\n            run_RSA_FULL_VERIFICATION_circuit(\n            modulus_chunks,\n            sig_chunks,\n            w0,\n            w1,\n            w2,\n            w3,\n            w4,\n            w5,\n            w6,\n            w7,\n            w8,\n            w9,\n            w10,\n            w11,\n            w12,\n            w13,\n            w14,\n            w15,\n            w16,\n            step,\n            channel_modulus,\n        );\n        if !d0.is_zero()\n            || !d1.is_zero()\n            || !d2.is_zero()\n            || !d3.is_zero()\n            || !d4.is_zero()\n            || !d5.is_zero()\n            || !d6.is_zero()\n            || !d7.is_zero()\n            || !d8.is_zero()\n            || !d9.is_zero()\n            || !d10.is_zero()\n            || !d11.is_zero()\n            || !d12.is_zero()\n            || !d13.is_zero()\n            || !d14.is_zero()\n            || !d15.is_zero()\n            || !d16.is_zero() {\n            return false;\n        }\n    }\n\n    // The final remainder r_{16} must equal the expected message m\n    w16.remainder == expected_message_chunks\n}\n\n// PKCS#1 v1.5 SHA-256 constant chunks (W1..W5).\n// These encode: 0x00||0x01||0xFF×202||0x00||DigestInfo[12:19]\n// W0 depends on the hash and is built dynamically.\n\nconst PKCS1_SHA256_W5: u384 = u384 {\n    limb0: 0xffffffffffffffffffffffff, limb1: 0x0001ffff, limb2: 0x0, limb3: 0x0,\n};\nconst PKCS1_SHA256_W4: u384 = u384 {\n    limb0: 0xffffffffffffffffffffffff,\n    limb1: 0xffffffffffffffffffffffff,\n    limb2: 0xffffffffffffffffffffffff,\n    limb3: 0xffffffffffffffffffffffff,\n};\nconst PKCS1_SHA256_W3: u384 = u384 {\n    limb0: 0xffffffffffffffffffffffff,\n    limb1: 0xffffffffffffffffffffffff,\n    limb2: 0xffffffffffffffffffffffff,\n    limb3: 0xffffffffffffffffffffffff,\n};\nconst PKCS1_SHA256_W2: u384 = u384 {\n    limb0: 0xffffffffffffffffffffffff,\n    limb1: 0xffffffffffffffffffffffff,\n    limb2: 0xffffffffffffffffffffffff,\n    limb3: 0xffffffffffffffffffffffff,\n};\nconst PKCS1_SHA256_W1: u384 = u384 {\n    limb0: 0xffffffffffffffff00303130,\n    limb1: 0xffffffffffffffffffffffff,\n    limb2: 0xffffffffffffffffffffffff,\n    limb3: 0xffffffffffffffffffffffff,\n};\n// W0.limb3 is the constant part: DigestInfo[3:15] encoded as 96 bits.\nconst PKCS1_SHA256_W0_LIMB3: u96 = 0x0d0609608648016503040201;\n\n/// Build the PKCS#1 v1.5 SHA-256 encoded message from 8 hash words.\n///\n/// Layout (256 bytes big-endian):\n///   0x00||0x01||PS(0xFF×202)||0x00||DigestInfo(19)||SHA-256(32)\n///\n/// W0 limb packing:\n///   limb0 = hw5 * 2^64 + hw6 * 2^32 + hw7\n///   limb1 = hw2 * 2^64 + hw3 * 2^32 + hw4\n///   limb2 = 0x05000420 * 2^64 + hw0 * 2^32 + hw1\n///   limb3 = 0x0d0609608648016503040201 (constant)\nfn pkcs1_v1_5_sha256_encode(hash: [u32; 8]) -> RSA2048Chunks {\n    let [hw0, hw1, hw2, hw3, hw4, hw5, hw6, hw7] = hash;\n\n    let hw0: felt252 = hw0.into();\n    let hw1: felt252 = hw1.into();\n    let hw2: felt252 = hw2.into();\n    let hw3: felt252 = hw3.into();\n    let hw4: felt252 = hw4.into();\n    let hw5: felt252 = hw5.into();\n    let hw6: felt252 = hw6.into();\n    let hw7: felt252 = hw7.into();\n\n    let limb0: u96 = downcast(hw5 * 0x10000000000000000 + hw6 * 0x100000000 + hw7).unwrap();\n    let limb1: u96 = downcast(hw2 * 0x10000000000000000 + hw3 * 0x100000000 + hw4).unwrap();\n    let limb2: u96 = downcast(0x05000420 * 0x10000000000000000 + hw0 * 0x100000000 + hw1).unwrap();\n\n    let w0 = u384 { limb0, limb1, limb2, limb3: PKCS1_SHA256_W0_LIMB3 };\n\n    RSA2048Chunks {\n        w0,\n        w1: PKCS1_SHA256_W1,\n        w2: PKCS1_SHA256_W2,\n        w3: PKCS1_SHA256_W3,\n        w4: PKCS1_SHA256_W4,\n        w5: PKCS1_SHA256_W5,\n    }\n}\n\n/// Verify an RSA-2048 signature against a raw message using SHA-256.\n///\n/// Computes SHA-256(message) on-chain, constructs the PKCS#1 v1.5 encoding,\n/// asserts it matches the expected_message hint, then delegates to the\n/// existing RNS-based RSA verification.\n#[inline(never)]\npub fn is_valid_rsa2048_sha256_signature(\n    signature: @RSA2048SignatureWithHint, public_key: @RSA2048PublicKey, message: @ByteArray,\n) -> bool {\n    // Compute SHA-256 of the message on-chain\n    let hash: [u32; 8] = compute_sha256_byte_array(message);\n\n    // Build the PKCS#1 v1.5 encoded message from the hash\n    let encoded = pkcs1_v1_5_sha256_encode(hash);\n\n    // Assert the hint matches the on-chain computation\n    if encoded != *signature.signature.expected_message {\n        return false;\n    }\n\n    // Delegate to the existing RSA verifier\n    is_valid_rsa2048_signature_assuming_encoded_message(signature, public_key)\n}\n"
  },
  {
    "path": "src/src/signatures/schnorr.cairo",
    "content": "use garaga::basic_field_ops::{is_even_u384, neg_mod_p};\nuse garaga::definitions::{\n    G1Point, Zero, deserialize_u384, get_G, get_curve_order_modulus, get_n, serialize_u384, u384,\n};\nuse garaga::ec_ops::{G1PointTrait, msm_g1};\nuse garaga::utils::u384_eq_zero;\n\n/// A Schnorr signature.\n///\n/// # Fields\n/// * `rx`: `u384` - The x-coordinate of the R point from the signature.\n/// * `s`: `u256` - The s component of the signature.\n/// * `e`: `u256` - The challenge hash.\n#[derive(Drop, Debug, PartialEq)]\npub struct SchnorrSignature {\n    pub rx: u384,\n    pub s: u256,\n    pub e: u256,\n}\n\npub impl SerdeSchnorrSignature of Serde<SchnorrSignature> {\n    fn serialize(self: @SchnorrSignature, ref output: Array<felt252>) {\n        serialize_u384(self.rx, ref output);\n        Serde::<u256>::serialize(self.s, ref output);\n        Serde::<u256>::serialize(self.e, ref output);\n    }\n    fn deserialize(ref serialized: Span<felt252>) -> Option<SchnorrSignature> {\n        let rx = deserialize_u384(ref serialized);\n        let s = Serde::<u256>::deserialize(ref serialized).unwrap();\n        let e = Serde::<u256>::deserialize(ref serialized).unwrap();\n        return Option::Some(SchnorrSignature { rx: rx, s: s, e: e });\n    }\n}\n\n/// A Schnorr signature bundled with computation hints required for Cairo verification.\n///\n/// # Fields\n/// * `signature`: `SchnorrSignature` - The core signature data.\n/// * `msm_hint`: `Span<felt252>` - Hint for multi-scalar multiplication computation.\n#[derive(Drop, Debug, PartialEq, Serde)]\npub struct SchnorrSignatureWithHint {\n    pub signature: SchnorrSignature,\n    pub msm_hint: Span<felt252>,\n}\n\n/// Verifies a Schnorr signature with associated hints, assuming the hash challenge is correct.\n///\n/// # Important Assumption\n/// **This function assumes that the hash `e` has been correctly derived from `x_R` and the message\n/// by the caller.** It does not compute or verify the hash derivation itself. The caller is\n/// responsible for ensuring that `e = H(x_R || message)` (or the appropriate hash construction for\n/// their protocol) before calling this function.\n///\n/// # Arguments\n/// * `signature`: `SchnorrSignatureWithHint` - The signature and verification data bundle\n/// containing:\n///     - rx: The x-coordinate of the R point\n///     - s: The s component of the signature\n///     - e: The challenge hash (assumed to be correctly computed by the caller)\n///     - msm_hint: Hint for multi-scalar multiplication\n/// * `public_key`: `G1Point` - The public key to verify against.\n/// * `curve_id`: `usize` - The id of the curve. (0 for BN254, 1 for BLS12_381, 2 for SECP256K1, 3\n/// for SECP256R1, 4 for ED25519, 5 for GRUMPKIN)\n///\n/// # Algorithm\n/// The Schnorr signature verification checks if the signature (R, s) is valid for a given challenge\n/// hash e and public key P:\n/// 1. Verify that all inputs (rx, s, e) are non-zero and less than the curve order n\n/// 2. Verify that the public key P is on the curve and has even y-coordinate (BIP340 requirement,\n/// see\n/// https://github.com/bitcoin/bips/blob/58ffd93812ff25e87d53d1f202fbb389fdfb85bb/bip-0340/reference.py#L71)\n/// 3. Compute sG - eP where G is the generator point (using MSM)\n/// 4. Verify that the result equals R (matching x-coordinate and even y-coordinate)\n/// 5. The signature is valid if all checks pass\n///\n/// This implements the verification equation: sG - eP = R\n/// Which proves the signer knew the private key x where P = xG, given that e was correctly derived.\n/// Returns false if the signature is invalid.\npub fn is_valid_schnorr_signature_assuming_hash(\n    signature: SchnorrSignatureWithHint, public_key: G1Point, curve_id: usize,\n) -> bool {\n    let SchnorrSignatureWithHint { signature, msm_hint } = signature;\n    let SchnorrSignature { rx, s, e } = signature;\n\n    let n: u256 = get_n(curve_id);\n\n    if u384_eq_zero(rx)\n        || s >= n\n        || s == 0\n        || e >= n\n        || e == 0\n        || is_even_u384(public_key.y) == false {\n        return false;\n    }\n\n    let pk_on_curve = public_key.is_on_curve_excluding_infinity(curve_id);\n\n    if pk_on_curve == false {\n        return false;\n    }\n\n    let n_modulus = get_curve_order_modulus(curve_id);\n\n    let e_neg: u256 = neg_mod_p(e.into(), n_modulus).try_into().unwrap();\n\n    let points = array![get_G(curve_id), public_key].span();\n    let scalars = array![s, e_neg].span();\n\n    let res = msm_g1(points, scalars, curve_id, msm_hint);\n\n    let ry_l0_f252: felt252 = res.y.limb0.into();\n    let ry_l0_u128: u128 = ry_l0_f252.try_into().unwrap();\n\n    if res.is_zero() || res.x != rx || (ry_l0_u128 % 2) != 0 {\n        return false;\n    }\n\n    true\n}\n\n"
  },
  {
    "path": "src/src/tests/autogenerated/ecdsa_tests.cairo",
    "content": "use garaga::core::circuit::u288IntoCircuitInputValue;\nuse garaga::definitions::G1Point;\nuse garaga::signatures::ecdsa::{ECDSASignatureWithHint, is_valid_ecdsa_signature_assuming_hash};\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_ecdsa_BN254() {\n    let mut ecdsa_sig_with_hints_serialized = array![\n        0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0x772ca79c580e121ca148fe75, 0xce2f55e418ca01b3d6d1014b, 0x2884b1dc4e84e30f, 0x0,\n        0x236ca9312dad3661a37f2d6f, 0x98424c01caad7592315715d1, 0x795b9fd941b23c4, 0x0,\n        0xbf6659a4013d8a0bc49c2bba0fe0b551, 0x2667e798582a362fb041cb7c36d149a8, 0x1,\n        0xb4862b21fb97d43588561712e8e5216b, 0x967d0cae6f4590b9a164106cf6a659e, 0x18,\n        0x1f553b3c905bf06693d39af3, 0x22a1bf1fdfb897a2e2368128, 0x56d66d1d4d06ac4, 0x0,\n        0xf6482bdbc7401ca9a5730403, 0x75053f99e9420c530d43ee42, 0x1fe46da1cc905e5d, 0x0,\n        0x1a59f6054bfb443f, 0x1000000000000000005d7679874156a92, 0xa19cd0d3b84ff34,\n        0x4aae535488bc0171, 0xb2b487addb0999f4b7e26ef8, 0xab2d694c6f3e51b16518f05b,\n        0x206ee9b43426de0b, 0x0, 0x43ad5aba55c006f840ef53f6, 0xd90cb92d61bdf082a563725f,\n        0x28e0a95f5fae45b5, 0x0, 0xa0b063933d8e3f54, 0x1000000000000000003fc2ccc129935ee,\n        0x1000000000000000030112506a6d6deff, 0x21d269100269048a,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let ecdsa_with_hints = Serde::<\n        ECDSASignatureWithHint,\n    >::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_ecdsa_signature_assuming_hash(ecdsa_with_hints, public_key, 0);\n    assert!(is_valid);\n}\n\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_ecdsa_BLS12_381() {\n    let mut ecdsa_sig_with_hints_serialized = array![\n        0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x3d77d61326ef5a9a5a681757, 0xd3070afd4f0e121de7fcee60,\n        0xdf9ef4088763fe611fb85858, 0x11a612bdd0bc09562856a70, 0x867620dc5a8fd7ecbe07be76,\n        0x11d338240a4de8ca41217d43, 0x2c7753c1707137bf, 0x0, 0x94796ffb457f39ac41d6612e5ce0a191,\n        0x356631f83b3d990d4f60bada0d2ecc95, 0x1, 0xb4862b21fb97d43588561712e8e5216b,\n        0x12cfa194e6f4590b9a164106cf6a659e, 0x18, 0x6c178cfd0b3cfa1cdc9611c2,\n        0x2e2e9b5b3dc7495056fcb216, 0xdc6b710b9b8d6af1b0d9662f, 0x144281277c62ad45fcc361df,\n        0xdd51112be4c794ba47bc61bb, 0xba737e0b6d17079da040afaf, 0x93d8c4b8589d2520cda8c68a,\n        0x1492245eaba8fad13666bf8, 0x2da17082600f7add, 0x1cbcf87b9857ba44, 0x989a085f93dfee0,\n        0x100000000000000002e5733515f6dc037, 0xcb7778677f6122a2ad987779, 0xf6d1d01660d142741ae0a2c9,\n        0x5d1be8a4ebf8d22589f99a46, 0xbcaa099b6ef5b8ac192db47, 0xe6dd3401412576d3a894bcf2,\n        0x2a839ac601bb4ed694e4724b, 0xa6ee37842198c02e8bc4074b, 0x107f65d9ec3f6a9587cfe814,\n        0x4c5ccbf186df2adb, 0x100000000000000009289460599d5e6be,\n        0x100000000000000003f0c985cb7645566, 0x396e116d375dd2dd,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let ecdsa_with_hints = Serde::<\n        ECDSASignatureWithHint,\n    >::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_ecdsa_signature_assuming_hash(ecdsa_with_hints, public_key, 1);\n    assert!(is_valid);\n}\n\n\n#[test]\nfn test_ecdsa_SECP256R1() {\n    let mut ecdsa_sig_with_hints_serialized = array![\n        0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0,\n        0x46ae31f6fc294ad0814552b6, 0x2d54cc811efaf988efb3de23, 0x2a2cc02b8f0c419f, 0x0,\n        0x47e8f962616a171283a1176e90490f33, 0xde5c72ea3ea08688ab2876686671cca8, 0x1,\n        0xeb1167b367a9c3787c65c1e582e2e663, 0xf7c1bd874da5e709d4713d60c8a70639, 0x14,\n        0x286091616e02ba0069d28be8, 0x1d9745f8427b797bfae94bc9, 0xb3eb1f4823aa5b9f, 0x0,\n        0xd955b1c2d5dbf2b7ce1f8cc0, 0xd9d9fdc9f4834421e0583e30, 0x8bab0f5e16efdcd5, 0x0,\n        0xeae9da0724797b8c4deebd03881e0a93, 0x168a1a12c6aaa58209ea9db2a7f1a2b2f,\n        0x94038dc6b682d83583f52251, 0x2c3509157e0085975bedd577, 0x1e00bb14af9e8bf8, 0x0,\n        0x3017341aa1f59a0d17c013c5, 0x51583e6cc584e0a8145045aa, 0xb9220afd0e923820, 0x0,\n        0xd0446b1605d4f3bfb5a82b168ba1b43, 0x1ab0f41000c73e671352e746066899a70,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let ecdsa_with_hints = Serde::<\n        ECDSASignatureWithHint,\n    >::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_ecdsa_signature_assuming_hash(ecdsa_with_hints, public_key, 3);\n    assert!(is_valid);\n}\n\n\n#[test]\nfn test_ecdsa_SECP256K1() {\n    let mut ecdsa_sig_with_hints_serialized = array![\n        0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0,\n        0x2965eeb3ec1fe786a6abe874, 0x33e2545f82bb6add02788b8e, 0xf586bc0db335d7b8, 0x0,\n        0x6bb797837f385ccf8ea3b9b6e7074b68, 0x123ea74e335845008c7f5f797313610f, 0x0,\n        0xeb1167b367a9c3787c65c1e582e2e663, 0xf7c1bd874da5e709d4713d60c8a70639, 0x18,\n        0xed540ba7da3f81bbaa728909, 0x893eeca8c449fc9407668128, 0x4c72a831e28b48, 0x0,\n        0xf7ae1bf4ac84c840ee8163eb, 0xfb80d24687ae79865523f56d, 0xebddaf8646d563b7, 0x0,\n        0x5763a6a1517232b0, 0x100000000000000003fa616b9d1aa135b, 0x2ee3ef80f868d011,\n        0x100000000000000003fe78eccc1da3303, 0x3baca0be7f388c0f13f91502, 0x279cead44672432f6083c7de,\n        0x7b7ead3b5811d2dd, 0x0, 0x5bbc00623473536e653b34f3, 0xe4d94e156ddc62c1d41c68f4,\n        0xe635b285558b642c, 0x0, 0x1000000000000000097e848fb19a47c06,\n        0x100000000000000003dc81ff2129521cf, 0xdfac131bb3bb11de, 0xafc939cc6fed0eee,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let ecdsa_with_hints = Serde::<\n        ECDSASignatureWithHint,\n    >::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_ecdsa_signature_assuming_hash(ecdsa_with_hints, public_key, 2);\n    assert!(is_valid);\n}\n\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_ecdsa_ED25519() {\n    let mut ecdsa_sig_with_hints_serialized = array![\n        0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xf046f8cd6e5a75fca71dd19b, 0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0,\n        0xd4b581f1ee29a4dfba0aa2d4, 0xf18a70dbf1dc5a76494bff12, 0xac1b7bfc409119f, 0x0,\n        0xd75af662c90a1cb06a531ce8992bfda2, 0x9c65af0ba668f70fb54682dc51dddb4, 0x1,\n        0xb4862b21fb97d43588561712e8e5216b, 0x4b3e865e6f4590b9a164106cf6a659e, 0x14,\n        0x8e4ebbfe9103ea220b651a02, 0x18ce985bbcad7e677405dafb, 0x69d6abb9648d50ad, 0x0,\n        0xc1ce73f105e57f3a39f4ed13, 0xcd2f4939fe1a2abf2a689253, 0x34f18a43f7786d73, 0x0,\n        0x28c38021207719b4c15ec8e3585a12b, 0x12f56bf5ab761b880d6d797751d76c911,\n        0x378b92a7d8456bc43b2417e1, 0xca39a3a66b3713d3f07aa06c, 0x2aa069ab39cf3c36, 0x0,\n        0x3d54f7790b6544e46aa424c4, 0x2fad442bf9ae38403e9616c2, 0xda201ff9acac7ac, 0x0,\n        0xa9c80a21b193cc891541d32627df585, 0x113108f379dac95a41e3221331fd0f214,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let ecdsa_with_hints = Serde::<\n        ECDSASignatureWithHint,\n    >::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_ecdsa_signature_assuming_hash(ecdsa_with_hints, public_key, 4);\n    assert!(is_valid);\n}\n\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_ecdsa_GRUMPKIN() {\n    let mut ecdsa_sig_with_hints_serialized = array![\n        0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x371e7b6a5c01505bd4334e81, 0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0,\n        0x3c26f4ff476ab777dc184776, 0xbccb2cba46cf421f11eb4d14, 0x27ec44064c727a3d, 0x0,\n        0x4be0b43c26c6f414a5ea9ea34cff6d0c, 0x14d85887ecbe1e0c06e6a8310bf6d595, 0x0,\n        0xb4862b21fb97d43588561712e8e5216b, 0x967d0cae6f4590b9a164106cf6a659e, 0x14,\n        0xa92ff39dc786d18400f152fa, 0x20eafe86707668d52aa0d2, 0x6b08f8ea2e0d3ff, 0x0,\n        0x7e5a501bb54172443d6608ac, 0xe03026c1fc3a1c6ead58dafd, 0xa6f4d2409778496, 0x0,\n        0x5291f4cf1867b05ae7b1d1bbabfd2ac3, 0x26042d2cad5454bf11c7d3f813c42338,\n        0x3b840ebf6e6c7b9ad848e269, 0xc10e351a38f60bd193db9784, 0x16a66333126cff05, 0x0,\n        0x8f5f58884224366a4b4708a4, 0xee5fc2fc6e001cdb0584bd57, 0x1d311cc64e5601b2, 0x0,\n        0xab7959b0b8b002ec27721af3d0ccf03, 0x357d7828010d521de3fe6fc9427ab043,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let ecdsa_with_hints = Serde::<\n        ECDSASignatureWithHint,\n    >::deserialize(ref ecdsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_ecdsa_signature_assuming_hash(ecdsa_with_hints, public_key, 5);\n    assert!(is_valid);\n}\n\n"
  },
  {
    "path": "src/src/tests/autogenerated/eddsa_tests.cairo",
    "content": "use garaga::signatures::eddsa_25519::{EdDSASignatureWithHint, is_valid_eddsa_signature};\n\n#[test]\nfn test_eddsa_0_0B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x3a0764c9d3fe4bd5b70ab18201985ad7, 0x1a5107f7681a02af2523a6daf372e10e,\n        0x8a826e80cce2869072ac60c3004356e5, 0x5501492265e073d874d9e5b81e7f8784,\n        0x6bb4f91c70391ec6ac3ba3901582b85f, 0xb107a8e4341516524be5b59f0f55bd2, 0x0, 0x14,\n        0xea59f1a1b369842eaf693886, 0xf9224e07ed11424e3ec1fa70, 0x4a92acec2f8e1cbe, 0x0,\n        0xe590d7d2c7256a3e0ead52f, 0xd86b5e53124f1f969c189730, 0x537563cb5552be8d, 0x0,\n        0x138c5052d6a27a4e4c9560fdd264cfd3, 0x11a2728b581551e5fb75531f987dd1989,\n        0x21ed5fd748dd92098b05acad, 0x7994ad2b8159fd82cc56b3ef, 0x50b6933858654726, 0x0,\n        0xe2c7733e684c969b9e877cc9, 0x5b1f73e8e98e8c71a215ef2d, 0x697849ab9ad5648, 0x0,\n        0x336adfeb48576dcc2cbe3d6bcebf0290, 0xde93b33a51de734be6bf4494c1e417d,\n        0x82324bd01ce6f3cf81ab44e62959c82a, 0x6218e309d40065fcc338b3127f468371,\n        0xc513d47253187c24b12786bd777645ce, 0x55d0e09a2b9d34292297e08d60d0f620,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_1_2B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x58f03002d07ea48da3a118628ecd51fc, 0x258090481591eb5dac0333ba13ed1608,\n        0xa301be3a9ce627480224ecde57d69162, 0xacc35adbd780365e443a7484a248e50c,\n        0x59c64d9860f767ae90f2168d539bff18, 0xac41eeacebe27c08dd26e71e9157c4a, 0x2, 0xaf, 0x82,\n        0x14, 0x6dcaf738b22009c93c0bdb87, 0x3bf824e64854c39e4f4b4d71, 0x2ba562c0a5855870, 0x0,\n        0xd156c934e0630b6b1cade37c, 0xf9592c2a8d4525621a66ff9e, 0x6ea3c2799dcb0791, 0x0,\n        0x2b7d8065ce28f598d400cb3247955529, 0x11805a2d4008709e8bf8df99ecd21a9c8,\n        0xbea748bd8161e9392414c6af, 0xfb78a46df09a3550b0f40b90, 0x1736a99e1e6b6b2a, 0x0,\n        0xcd40357ed01033e3ff528c49, 0xc3d6cd32c65892252ebd9898, 0x11d058072223478a, 0x0,\n        0x941c53d6db9e9db6634c5d73d8a9cf3, 0x12d39e660f6e64df38adf8625e063b3cf,\n        0x98f8f7962a1ed013293448bba5b444f, 0x39a50ed09ff56e66f9db162c5fb6791a,\n        0x18236f1734e3e9b945a9ff5486cdbd02, 0x61213aa2dc9d68833f65d1b48dcf8598,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_2_4B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x5323472831c45de2863153c402c1dac0, 0xa73302d9921f008eeb2a158b87dbabea,\n        0x4d6630d51be769278400d1b0c66f4f12, 0x1634b9ae09b5fded6dc5f67d50f88d88,\n        0x2a8bc1975609f35d3006aa388d916be2, 0x70c155ea8e5ba9fe40adc2ea5ea32a8, 0x4, 0x5f, 0x4c,\n        0x89, 0x89, 0x14, 0xfc2e795891abcdefc79c39ab, 0xc39ec060c9acab62d783f744,\n        0x7edd959fdf5944aa, 0x0, 0xb9af3f53cf443ce8258ce9d8, 0x25a93844e779d9acf1a76582,\n        0x6044e088dd26d914, 0x0, 0x367ea01340ed3f4eb35fc0b5d6909880,\n        0x65becb59a33390e7a8eeb2961732995, 0x4d1173ab1a7126cd6f3553e5, 0x737d4ab842a32b29798c247e,\n        0x7175327fc8d35a1d, 0x0, 0xd940bd48ba9f49f998750045, 0x6a748e9b4454606da58d20fa,\n        0x1e0a3bd228532c1, 0x0, 0x683951430b64535637cbe187fb571f2,\n        0x1426013715579b3cf9108dacbc5d24c5, 0xafd7a14549a75297ba0c7c7b8bf58cc2,\n        0x6b0c3a1c5526758320ce254b6896d815, 0x44c071ef224e23c3376a6cfaf588f8b1,\n        0x15daf15d98e9a7cec9a0d949aa8a1010,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_3_6B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x54cc85d1334a44bef2d70505a4bfcffb, 0x3d64e33eb887502b0b64e16052616de1,\n        0x3f5a6d63ff558746e1e99c1dfc29d66e, 0x29fae5f73018249db793fd1ac9d9a540,\n        0x994ed1168dbd8d24bbec6ecc208f4b85, 0x239d831895634dc7094d90e4942175, 0x6, 0x89, 0x1, 0xd,\n        0x85, 0x59, 0x72, 0x14, 0x80741b4318d18819882bb551, 0xb2779f18fc7fb12feb65a53,\n        0x142ca3875044978f, 0x0, 0xa93609d4fc6719102719e96b, 0x6d8f72df2fdf0661b61a1139,\n        0x2a9bc38a67fdf1af, 0x0, 0xeba21cc2b39436195b0b53a4dd3d7e5,\n        0x126aa5d255d4eb38e1d8919974d3f183e, 0x72b49563bd0280d6978d8f59, 0xee4b484f08eead598602db92,\n        0x1d762afb1672ad6f, 0x0, 0x54194dff66204d8aa3eef75b, 0xc8e4dab18ef2e40c806b2245,\n        0x5b786f9856ffe227, 0x0, 0x3c7b94be6b7e6bfa95bee538eefe5fef,\n        0x94070cbd62a695ecf77e388896f23b0, 0x166b7bb41838af3515acc516812d7b0a,\n        0xc9430416260957f2798ebc1f4c0820, 0xfd1009be194ba52c4c3af995f41ea6de,\n        0x28ea2ab7b73169d1eb053770cc4c90cc,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_4_8B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x403164cdaf33b05ed9ce5f824ab51ff8, 0x63b8346f4303258970a920bd0afbab75,\n        0x88f2e7d378b17bc18a52b0afc5deadd6, 0x23def957bcf35e5410e116adb1db9a7f,\n        0x59620cc93a0fbe07893b728f38c8a514, 0x8fa05f888d4b73ddf4576c1ec85e8bb, 0x8, 0x42, 0x84,\n        0xab, 0xc5, 0x1b, 0xb6, 0x72, 0x35, 0x14, 0x62920ccda7a4a43580c16a97,\n        0xbc42ab1a6625ff1e10cf6704, 0xddd34ffe3defba, 0x0, 0x21bd69a53ef0e957f99488cf,\n        0x951d5e6a7d167e2c8b9c8ee8, 0x27d72985e7a6135f, 0x0, 0x3af1a7897e95058b0a1f9e6f8c89504a,\n        0x228f99300a1dbd3aa20393f9adaa37c9, 0x99acfb45641fa7e3e18424da, 0x44eec67bb79d7b7b0a740c2f,\n        0x102c2cdf25176fb7, 0x0, 0x1b86dd209edc5f7108c52dd0, 0x67ab6794197e33768c702848,\n        0x754e75fee6b042b, 0x0, 0x39e458b6a016bff5cc4ee182498edeaa,\n        0x3489b4d0d7178376a2f9c2366c0d415, 0xba02b3f75514da3d99a7c37c948ff75a,\n        0x758f833d060d0a8a117ec27148c907fd, 0x46eadcf85f952099fbb70cdb91f10610,\n        0x54c40a9283a8e6206a15e02b64b46288,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_5_10B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xe938c55c67fafa1dabf748834b52b231, 0xff4d6ea3c1bbd82ac1279e81e53f4ea8,\n        0x914eab3f9f3ff001dee95a418c59e428, 0x9949c55e6b9796edf0c2bdd37f58b9e,\n        0x258894367c6237391983f0404c1a15d9, 0x8ced65d6a69a67f49870a9f5ada999e, 0xa, 0x33, 0xd7,\n        0xa7, 0x86, 0xad, 0xed, 0x8c, 0x1b, 0xf6, 0x91, 0x14, 0x38c8023c9fb41d7b6939d204,\n        0x6c47c9dcf6dd08f0027d26cb, 0x7643328979691ed8, 0x0, 0xf539d2a0878555c6a28113ce,\n        0xd28009225c7af9f44698b284, 0x748c3d43195e54b8, 0x0, 0x37fb348b196c8215fbfea725d82bec57,\n        0x1070137c89b13bc46aaaa21e205c4982d, 0xb35abd3c324790d8a654aa98, 0xe5e89428ddbb53e8b5978536,\n        0x107329dcf2c18f83, 0x0, 0xc569bab4c0dd2d506349ad99, 0x40a1ce7bc71879d83ddb9493,\n        0x7d172c2321d811d4, 0x0, 0x238c19411579a152ed700c6fed5a148d,\n        0x1265553ee261600443f5b5980f90b6abe, 0x75f6f309f81f9e8aa1f24f9c28eab288,\n        0x256a25046b0c5c6e6e7a0eee192ff255, 0x26d6d2c886c8d8938da2c0c48aaa27ab,\n        0x4cd530baaf96cfce24c4baf37493d3cc,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_6_12B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xa940aaba3f4f1c1311d111d09336e86f, 0x5782b17ac29ee3b03bf72f01306bd7d3,\n        0x1e38377d274b6106faa2333079d99a0f, 0x582292ced69ed05845a9a5c25af6946d,\n        0xddc8d0c0c3ae9742c93a862e9567a5c1, 0xec4ad559b4427bab60b8604e58410f7, 0xc, 0x5a, 0x8d,\n        0x9d, 0xa, 0x22, 0x35, 0x7e, 0x66, 0x55, 0xf9, 0xc7, 0x85, 0x14, 0x9b1776a1824355ed0f31d4b6,\n        0x9ba13aeac727ec1c4c3989d7, 0x1c20c27b1b41836f, 0x0, 0xad7ca35f9f1a595260a64136,\n        0x9b28c807d04f47f3e7ba89ae, 0x76a7aad88686c4cd, 0x0, 0x360399ddbc65be2e628e3fae9ee6d55c,\n        0x11c8a2911627601b102062e50546df703, 0xfbc5708cfe886fd0498219ad, 0xbd3fded76459b0468208d2b7,\n        0x66086effa4c818f0, 0x0, 0xbcdf5d18e7a01ecc5fcbc1aa, 0xb7733fa1f254458c678f0c4,\n        0x6ade3a37aaa14389, 0x0, 0x1b635746f2ada962d38fcba9f0aec343,\n        0x193ab04b7e052b85dcd94e7d6e265dfc, 0x7ec01a0af470fa5a48b1b20af07af00a,\n        0x5fca1ee5ddca2e7454275f8125d54949, 0x141afcb83c809f637a968f7a694d9a6a,\n        0xb2e763e5c5d8d490ad567a99d254c52,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_7_14B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x267e03bc533dd3527a5b7a4698f83acf, 0x91f2e233c0e9172225fc036999daa842,\n        0xe6253b6b00b21223eb603ce281fee36e, 0xb06ad6af8ddb4ec444f8236610028e83,\n        0x9042af526e1d8af5b8f55d19fd871067, 0x6cf94ef95877492000121735cd55380, 0xe, 0x55, 0xc7,\n        0xfa, 0x43, 0x4f, 0x5e, 0xd8, 0xcd, 0xec, 0x2b, 0x7a, 0xea, 0xc1, 0x73, 0x14,\n        0xc1e32736d15729299aaa09e7, 0x8e424562b0b2d4e10849f3f7, 0x4638985f6c4eecb8, 0x0,\n        0xf6f8582e11475ecce6e33473, 0x602deb6eefe4e4c17c82e744, 0x3abfa51751dcd4a0, 0x0,\n        0x249f7fab0b194de4a84fcbf4d04b48a2, 0x12e9de13153f96a14ecb14d5df17d9e2d,\n        0x63296c74f8e9485907858fda, 0xa300e4caed5ea8cfc94893a3, 0x4a781002e18f5dea, 0x0,\n        0xb6accf3462884fda4c7da786, 0x57c6fccffb3d8e0dd16d6d28, 0x184c57d464a36acc, 0x0,\n        0x227d1381630c922e8c77a0be24f969f7, 0x983ecf169859b172a652dab7630e8b,\n        0xf51214784e30f6963636248940f4bd31, 0x673970dc3e5bec3f2a44fc4e7518e66d,\n        0x1750714406fc2d2876ff75bc2cad8e11, 0x100e3069d5815a94db87c734f43b368b,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_8_16B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xa2debae466c062697443478c50a8e534, 0x5b954321cd6c47944f5cde84b48a1b20,\n        0x68b308f9b7a3497912a8d040dc273d2a, 0x87ae2db0b9415d7ac1a654ff1b7638f,\n        0x53ce87ba90a44fe4e1b07af442c1aa09, 0xc5054ae7c364ceff1ca3915893af392, 0x10, 0xc9, 0x42,\n        0xfa, 0x7a, 0xc6, 0xb2, 0x3a, 0xb7, 0xff, 0x61, 0x2f, 0xdc, 0x8e, 0x68, 0xef, 0x39, 0x14,\n        0x2ccc5c7cac2eee8b2e47375, 0xbe3457718bcbd53b10b92cf9, 0x47d2b530179b9892, 0x0,\n        0xa0d5148d627eff7de3695066, 0xfbbf54cf338c905e6d373cd9, 0x51a1142c5de46d49, 0x0,\n        0x3540f747691b1589c7246b2a16cb78f, 0x127059d142c92015acd6f16fcc0f6aca0,\n        0xcf28c60e976b78e041947ee, 0xd1a14bd8d8623e6a8a8e9b0a, 0x21bcebc8f8c18ced, 0x0,\n        0x5e9d79fb649eeffc22a13d52, 0x6d83860361dd3223bf842efe, 0x4e148cceb02ebe6f, 0x0,\n        0x1175e121aacfeb9369560423064b5895, 0x101759331499142832f566dbd72c777cb,\n        0x1ea7db3fb12901a9622ff15d26e3634e, 0x5b4066ef8eb5ea44ae38dc24f9b8ce84,\n        0x6fe7a48b2b9e4c036d80526005e9e3aa, 0x64599205bcb26f328e09b76cea8e9f6,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_9_18B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xf2e34c3bc3ae76866ad899f12791d274, 0x6b3a2165ca8c1ecd1c192cf591b1cc25,\n        0xee92302f49750591173ca043d729e9fb, 0xf5134738ca574ecacfca3604af12b2a,\n        0x80db0a70f1418c6c2d32912758db62c2, 0xa3e62e73eae4434700b2714bcca7e02, 0x12, 0xbd, 0x8e,\n        0x5, 0x3, 0x3f, 0x3a, 0x8b, 0xcd, 0xcb, 0xf4, 0xbe, 0xce, 0xb7, 0x9, 0x1, 0xc8, 0x2e, 0x31,\n        0x14, 0xfa1252aa123e86ee87f8c8c7, 0xa2218cc84ca64ab31a5bdbf9, 0x760ea6e91bcff0fd, 0x0,\n        0xbc93a87ac4c455717816c9d1, 0x88c7777545d6c5afdfd4387a, 0x4dd7be231e07a6b8, 0x0,\n        0x3662cbc08efd2b73724c4b64e181fe3f, 0x220b0e53b6a13c6efb4727fc6922ae1c,\n        0x20ff2c17be4383c0c7b3461, 0xcee6248e4f8755edfae5b7e, 0x7584f114bf6892a4, 0x0,\n        0xeb29df4ea33769a5027a031, 0x677e70b90c46b0141bae3def, 0x5bee213f1981b3be, 0x0,\n        0x379f66621fb39f0dcb0c73e8ad7ba68f, 0x129078edcd97e548881a71998959917dc,\n        0x12f9c9f73a8645fb1ec4f7e542186624, 0x1faf3db7e89ef842c31398dc78b1d6a4,\n        0xbb608ba1755964b8a7e626f14eb5a33c, 0x46e151b817dfa0805ffc863f3ba6a850,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_10_20B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x5b0884354e71a735658929859381a21c, 0x7f81008c5dddc89f81423f72ec9fef86,\n        0x4d42f6df7f7e676206982d6abcc2ada1, 0x85326f256ee9f3fd90ca95570fa5dbe7,\n        0xc44c74eba94023d992e4860331dc7ca, 0x5f193db373926046e3ee85ff3fdaf61, 0x14, 0x8b, 0xa6,\n        0xa4, 0xc9, 0xa1, 0x5a, 0x24, 0x4a, 0x9c, 0x26, 0xbb, 0x2a, 0x59, 0xb1, 0x2, 0x6f, 0x21,\n        0x34, 0x8b, 0x49, 0x14, 0x937d82291b7f8dc2781d4e5f, 0xa937d9ca11ae15eff034e737,\n        0x34b1848dd33cc4bc, 0x0, 0x1aa605be8f31fb5fa2f72f6d, 0x2b625f928529ba42e9970fea,\n        0x52f1e366d79e7073, 0x0, 0x387306bd9bc7a9af9d7ca633a58771b9,\n        0x243411ab947bef8f30e95cdb895fa8c1, 0x37e3b62e93ef9a9e5987db54, 0x1ffee904ff81caa82c12aba7,\n        0x18f6049707602a63, 0x0, 0xe2045701aec1245297f05444, 0xf0506a3f16f97c20c745af91,\n        0x6341e55f4b7c38c7, 0x0, 0x29ddad2d13e8fcc5f380cdc5ad8dc7fb,\n        0x1df6c6969ff415bd6ab279f827575811, 0x6120e97100cf4aaebfcf1db80e51bdbb,\n        0x6ef0677f61dbc7d5f23697cafb1ff6af, 0xc0decbf4f20c787447d823b0dd40639c,\n        0x37a3fb1811a6325320bf08033e450a8f,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_11_22B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x147e5eb78bbb945d71f0230d859b3548, 0x85fc02a0bd3f4005a8286ff014af2e32,\n        0x1d6e8787cea32243c5badf8999d0dcb6, 0x6ad897a7a6d70bb5249dc798a94d1362,\n        0x9fecfb2c653c674ac1d691749ddc140e, 0x13928ab6d079082f3bda45c9382a96, 0x16, 0x1b, 0xa, 0xfb,\n        0xa, 0xc4, 0xba, 0x9a, 0xb7, 0xb7, 0x17, 0x2c, 0xdd, 0xc9, 0xeb, 0x42, 0xbb, 0xa1, 0xa6,\n        0x4b, 0xce, 0x47, 0xd4, 0x14, 0x95156f4654352c47d318d763, 0x60bbfcd2afac5410c4e71df8,\n        0x15b6c8789497160a, 0x0, 0x8b5ca313032ef0415a347710, 0x5804f93938239c9afbc99e9e,\n        0x7c65c4735c4ffbd8, 0x0, 0x28a74c9dce2b2e4a842e33e399863e1f,\n        0x11da7a8750a2ce61ed28c38c0d512155d, 0x189e561188bc49a918bafffe, 0xfc6b5aae2395e9e47a2ba2a2,\n        0xc37c6f902c1d20c, 0x0, 0x876528e8db7ca14d83a81e9c, 0xaacbaa6e2bb209db25f41261,\n        0x370d6bc6274f3efe, 0x0, 0x196f76c318589c37468b549f759bb8bb,\n        0x117d80ddf19758192660aa5d7d49050f3, 0xc0d2ff32c5a6af243630ec9259c6af2c,\n        0x61aea3a5983fd6cae64eb8e88b96850d, 0xafe00c80288a3f318befb32b139a5437,\n        0x5c7c637a089f1adb6ead8f3bf7b7eddf,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_12_24B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x5819635133648c8ad52720890198d3b1, 0x71137301f7e496032cabe1db6c1bf93,\n        0x974e658b38a47047aa489c4d76fa6a83, 0x24d9df7dc42f7fa2bcfe6729086fc1b3,\n        0x230bb64643700951cf8a6929c7cf034b, 0xae72d12d199239156dc9d083054250f, 0x18, 0xd3, 0xd6,\n        0x15, 0xa8, 0x47, 0x2d, 0x99, 0x62, 0xbb, 0x70, 0xc5, 0xb5, 0x46, 0x6a, 0x3d, 0x98, 0x3a,\n        0x48, 0x11, 0x4, 0x6e, 0x2a, 0xe, 0xf5, 0x14, 0x93365d4deeadd32cb6bef2eb,\n        0xb1e8c7218c86075e32aee0, 0x1d7d22ed34f1149, 0x0, 0xe0f56ac073d697677a6fe5e5,\n        0x96d8c7060abc38fe9aca1fa8, 0x49724abc771d47ee, 0x0, 0x160b0f9b0c4c14a731464bb6d1b233d7,\n        0xd2e63ee4fa297d82b689e05eb59b317, 0xb184e835deae44e701bcd4c3, 0x89e0109a1956c9ad42d7eb0e,\n        0x4c9b77572f7eba05, 0x0, 0x6d672251bdafa6854506ba2c, 0xed6dbbf342430dda8e232a5,\n        0x522281f8c2485961, 0x0, 0x12bc7ea1134aefe5e5b12d22ad5b534d,\n        0x1243a10433596b92d64a074d7e1776fca, 0x82b993a0531c7dd032b01d860a0439de,\n        0x7bd75a648b9b9f011eb35a457c8f0fa8, 0xfae6685f07ce72100cf3cb675d2dff5e,\n        0x71631f2614a7d8451b8e92b94431e353,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_13_26B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xa0ee85cd9ee2f3d82246ba42a12bf32b, 0x238b21dd270b519b2c41649dbe479c7b,\n        0x27dd70b034665bf7f00d035a8c5b1f88, 0xf9bb6964eeb3389334ae3887c0e31ebd,\n        0x2831212de5e5382517d238a57130b76, 0xf9a04447ba0dc37653ad665f8b5907a, 0x1a, 0x82, 0xcb,\n        0x53, 0xc4, 0xd5, 0xa0, 0x13, 0xba, 0xe5, 0x7, 0x7, 0x59, 0xec, 0x6, 0xc3, 0xc6, 0x95, 0x5a,\n        0xb7, 0xa4, 0x5, 0x9, 0x58, 0xec, 0x32, 0x8c, 0x14, 0xdc02485645b64ce43298b09c,\n        0xc5b33942074cdd7280920b92, 0x6ab46e3a2ba409d6, 0x0, 0x41ba3f26848b6a909d587a94,\n        0xfdbf13ee5884324e413206d9, 0x3a09c07e27fd90b2, 0x0, 0x16e65808b9c27d57d7cd996821a0eff,\n        0x22b34ea38eebdbf4fbfde51a1faefa0e, 0xf772d2a88ec86f5ce6a7877e, 0x117c7f63e5c11f2b8d94f370,\n        0x692164d4228964e1, 0x0, 0x320d098d9fa46ac8495c66a0, 0xfd7ce2c6687abd6fb03ed1a0,\n        0x7b1010a7831bec78, 0x0, 0x3102b7637f8a45b26c33aaf26633fd91,\n        0x11c35669269462aabc3a7d66234b45bb3, 0xc9035a46924bf4932cd117694695e539,\n        0x6ce4dac054bc1a31f39854152016223e, 0x667226bfd4e63a2380c6eb6b8f164376,\n        0x7287797999af616511d3b1c69188181c,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_14_28B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x336ff7c6db96a4af9b6b7ab9a84a089d, 0x7e426943910f0a5281e617d9c916a106,\n        0xffd9e58d99e8b56c21661b78235487f5, 0x81efc3a9034537e3ac547010671d9dc2,\n        0xca78c41a6f70bd44672981de69f27715, 0x191cba6f957bd02f8b371f8cd549bf0, 0x1c, 0x5c, 0xb6,\n        0xf9, 0xaa, 0x59, 0xb8, 0xe, 0xca, 0x14, 0xf6, 0xa6, 0x8f, 0xb4, 0xc, 0xf0, 0x7b, 0x79,\n        0x4e, 0x75, 0x17, 0x1f, 0xba, 0x96, 0x26, 0x2c, 0x1c, 0x6a, 0xdc, 0x14,\n        0xc64d7b617fdd5e1dbfba3d1c, 0xdfc0e53f0dc3699f5e6cc2c6, 0x144281755c7dcb1f, 0x0,\n        0xd2a954957a5a6f44af21b472, 0x32241a2bbac5dcaa73d93ee7, 0x3f300f37829c6980, 0x0,\n        0x2db8a4f9c475029ff4a31fd1468b1d9d, 0x105400ba14430012a90e043fe206b7f80,\n        0x2916403d6d09a3606f2bb0e1, 0x9a8c140557d268d2555dc87d, 0x2750f18a91ffb29f, 0x0,\n        0xc0ea955da0b0dd810bdc057c, 0xaa16523f1baed52398fc986e, 0x76b7543e99975ea1, 0x0,\n        0xaea7956216a955368dbcfbf36879b7f, 0x1226e3a51516bc1bad4960660c8167217,\n        0xb4bd4eea06387163676c44a6cd8d3bd3, 0x7001ba4f029bd407b7f030ec050834e8,\n        0xac5166adc37dd52a5364e38f13cd26e0, 0x2eca1086c3bd55727b33c81bb9a08aa2,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_15_30B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xa3746aa5bbf565ce71fd2d563c32be23, 0x5b5afdb4f9c735f6942f3d576bc3dfa6,\n        0x8b375cc7ea20544f1b77de6b1ead8f0f, 0x482b433b82c110c22bcd5066acb56dae,\n        0xce93b289897a2fb9fa8f459505b116e0, 0x26ff1aa2a6506fc38203a246ceddfb8, 0x1e, 0xbb, 0x31,\n        0x72, 0x79, 0x57, 0x10, 0xfe, 0x0, 0x5, 0x4d, 0x3b, 0x5d, 0xfe, 0xf8, 0xa1, 0x16, 0x23,\n        0x58, 0x2d, 0xa6, 0x8b, 0xf8, 0xe4, 0x6d, 0x72, 0xd2, 0x7c, 0xec, 0xe2, 0xaa, 0x14,\n        0x695dff34554d1a4dc482d768, 0xd80b6ba6d7fa574d4d3290e7, 0x2a7ec089be1f9cbc, 0x0,\n        0x9d67cc27cacb90f274d3b80e, 0xe5f1d418344e291b7d9b6672, 0x1a29179e69f6518b, 0x0,\n        0x2148218957c9696ee542bcbdba204bb4, 0x10c6379409ee699507ba2a0c374d2adf7,\n        0x4739284c7860670641e3c224, 0xda1134a29f016547e345c4f0, 0x59dd1b7111fe87a, 0x0,\n        0x410b16bb6b54b3fe38806104, 0xaee2032adbd06d2248f8bfd5, 0x57dc9745231a60b, 0x0,\n        0xe956cf464450cbc9d6b0fba01bc8249, 0x1227d4b51278afc080aecbff814bf4a0f,\n        0x51dbe64d8ca775957a1e4bc33415af30, 0x4f2937cc1546c324d01dbb640cb6b0e9,\n        0x9b9a4ef694420c49e77e74c2e8d4b572, 0x2a0ac0449362354f213d5b96a050528c,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\nfn test_eddsa_16_32B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x920ebc336f46f3a8fca7c6b1783a9fb4, 0xd9169375c3465f46a7c20643a0fb019f,\n        0xcfff01c94634eb2c32c1913b036c2604, 0xb33a73b89a17c59c987e834400cc43c,\n        0xf96da651bac612c035ef4281b4d8bbec, 0xb79952410703eb0e4b1d68a26b68c30, 0x20, 0xa7, 0x50,\n        0xc2, 0x32, 0x93, 0x3d, 0xc1, 0x4b, 0x11, 0x84, 0xd8, 0x6d, 0x8b, 0x4c, 0xe7, 0x2e, 0x16,\n        0xd6, 0x97, 0x44, 0xba, 0x69, 0x81, 0x8b, 0x6a, 0xc3, 0x3b, 0x1d, 0x82, 0x3b, 0xb2, 0xc3,\n        0x14, 0x662dc9a0c76e92de64ec1a88, 0xd2d804748dd9b3bca82dd8bd, 0x457a1c7d45c2e9a7, 0x0,\n        0x11a47f8c54b597cc233eb3c6, 0x63336aece841abd85253fd9a, 0x6ea4440a5a4d3f30, 0x0,\n        0x25bf29e718cebe0ce36dd0d4940f9d9d, 0x14fba393e8cd1b8036af3f707a8d9bfc,\n        0xfe9858637aa58ff5156e78d4, 0x956a2b8e1e2e952d10372d02, 0x6e43afd2c1a07d87, 0x0,\n        0x427e477e25b26ddcf82d0b31, 0xcbbb0211b0fa3200f1155f46, 0x78d4ba282e9fa7d4, 0x0,\n        0x28a9d1a11a601216ef8957600ea23a3f, 0x256a50b455e31ea6fd318955d93f2727,\n        0x9256394c23e0a68b4782cb46ae015318, 0x3357ca9c3c92a0fbc7694fcf95f4a6,\n        0x454ef0b5785b42c24de91294328ace85, 0x7dc110abca7f279ee8797a0fbd3d1bc0,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_17_34B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x4434db9c3af99a4b95c94d4745716baf, 0xc059ce3300b930e2244d821c657c5b9d,\n        0x7e2eb16ba77c2fdee09a99f2b1edc16, 0x3cc381f6897a04c578de3c14915edab8,\n        0x522d00ec11a803590928c9d528344e4e, 0x43eabb9d06d0c202719feb3f8d79ea3, 0x22, 0x8b, 0xc4,\n        0x18, 0x5e, 0x50, 0xe5, 0x7d, 0x5f, 0x87, 0xf4, 0x75, 0x15, 0xfe, 0x2b, 0x18, 0x37, 0xd5,\n        0x85, 0xf0, 0xaa, 0xe9, 0xe1, 0xca, 0x38, 0x3b, 0x3e, 0xc9, 0x8, 0x88, 0x4b, 0xb9, 0x0,\n        0xff, 0x27, 0x14, 0x8574ce95d05ba104575918c8, 0x478f99955bb34eafda2c4ef3,\n        0x76569cefd127cdc3, 0x0, 0x431e7bf616e082984d43819b, 0xd3de171509f57d53c66792c1,\n        0x12e6b6b75421ba59, 0x0, 0x42d2ba3c9b2a04ea6efa1fb2c448b27,\n        0x13c1fbc940e682b14e2822fd823c59374, 0x5a14bca84136abbbf31fa2b5, 0xc6a3506b2be99c8ce20d3fdf,\n        0x48fb6aec47c72452, 0x0, 0x5da1125f4fa6cded1ed8e483, 0xc2b212667311e55132b3860c,\n        0x3ac68f0d30d25ab2, 0x0, 0xae2fc31954b7bc1d2b8aac8de538e91,\n        0x12f8f3fcfcd9732eb74c7f05846518331, 0x4b0a8d3f7b856f0ccd6b58fa2d44a71c,\n        0x83744d08483ecb443579ded32c9c548, 0x40d42f7668f5a94e643c14c7da1fdebd,\n        0x6d275cfcf946e02027096f961f1121f2,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_18_36B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xaae380fcc272f2c7810a0979c8707301, 0x265b74ab60116998fc9a37cb3f60bcc2,\n        0xeecce3639db5961e14a75a33827f95ac, 0xfdd53395dc42afc24065027dc4a2c395,\n        0xb1755e913478f3ea7a18ad79167d8281, 0xc5e1a05dd43ba167501c8066828a947, 0x24, 0xe0, 0x5f,\n        0x71, 0xe4, 0xe4, 0x9a, 0x72, 0xec, 0x55, 0xc, 0x44, 0xa3, 0xb8, 0x5a, 0xca, 0x8f, 0x20,\n        0xff, 0x26, 0xc3, 0xee, 0x94, 0xa8, 0xf, 0x1b, 0x43, 0x1c, 0x7d, 0x15, 0x4e, 0xc9, 0x60,\n        0x3e, 0xe0, 0x25, 0x31, 0x14, 0xae93b41734e620cdee334fa0, 0xd352ee5d019527eb8c98e8f1,\n        0x33ec5f8898a0b075, 0x0, 0xb7b28970512e699b3a38463f, 0x6ddca8144ee02b3057724405,\n        0x38d2dfd4057d68ba, 0x0, 0xbd218002a44c7b51960ce902651c697,\n        0x1111b38650a75851b477de2ab9df44637, 0x84021670d8df0bfb2b628b5d, 0x11e4264eb37f2d5374f3a81,\n        0x7411fca07291f143, 0x0, 0xeb56b6b0af302d8903d0f9b7, 0x1ecf1d9759518efbfbce8f53,\n        0x6fab7cf11da9bf96, 0x0, 0x99aea252a91ad794073425c9eb7ca69,\n        0x16838f2988f00e1efa919551d94ce0b8, 0x115b8c0b51e3124c0c202c162992a1ab,\n        0x78e0429e2308507c6259d6eeeb977dde, 0x8e42671bc55a1b56d9411c574a12fdb0,\n        0x3f318627b427cd4f04c4bcb332869caf,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_19_38B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x3df5a88a1f2b1ca8076556b2bd0fad34, 0x30e9ee070d903e901ba9ad87cc64aacc,\n        0x4973c8372e2332c7549c489c1655b22a, 0xfd08ef29d3fee7abdb0905a2ebb186d4,\n        0x43b3ca51ccb56ca22e7be645d11cba75, 0x5f979b9d9fc6a4cecb0d71ffe85b0ee, 0x26, 0x83, 0x83,\n        0x67, 0x47, 0x11, 0x83, 0xc7, 0x1f, 0x7e, 0x71, 0x77, 0x24, 0xf8, 0x9d, 0x40, 0x1c, 0x3a,\n        0xd9, 0x86, 0x3f, 0xd9, 0xcc, 0x7a, 0xa3, 0xcf, 0x33, 0xd3, 0xc5, 0x29, 0x86, 0xc, 0xb5,\n        0x81, 0xf3, 0x9, 0x3d, 0x87, 0xda, 0x14, 0xa6292f8e5d044b22c5c63f84,\n        0xb5185d5bf28c5010285e7757, 0x455da0f9cd7bf6b0, 0x0, 0x765e6b22af349115fad57451,\n        0x59540b16237f6a1b57b61ec9, 0x62f01856724d22d6, 0x0, 0x17e85b805b8f90696245d1b1b1649e49,\n        0x3d44174a16f4dfe2ba3435e92180d6c8, 0x4981e32164acf5f47ec1644b, 0xc9771971ecf4273b72688ecf,\n        0x6d903846fdffebc, 0x0, 0xf9f67f8a29cbbb2787d26da9, 0xe579cb390629c7b291f9b184,\n        0x59c8c0216b2de9e0, 0x0, 0x2248d914e046643681fcff8df64e4d19,\n        0x110cf02766d970c48e424aa5132ad8c4a, 0x26c5bcd8bb36d24db3e484b1d29db41d,\n        0x5a146fe46aad15a653ebf45fc80274c1, 0xc49b3df64adbc040338abbe815fd2b80,\n        0x5fd235e9d5bdd1630c10d1de12b63e15,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_20_40B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x3cbce77b25c3d1f9d23fd2c2abc57217, 0xb864f9d243773a9b744b8440ee9cd71c,\n        0x5b972a3c6db9cea4b893e72476cd2868, 0x5283581e6258406153f34566ffe573f7,\n        0x321e5144266f736dafe6df421ff3e789, 0x8cbe8d30e73188d77792a5898a60f0c, 0x28, 0xda, 0x9c,\n        0x55, 0x59, 0xd0, 0xea, 0x51, 0xd2, 0x55, 0xb6, 0xbd, 0x9d, 0x76, 0x38, 0xb8, 0x76, 0x47,\n        0x2f, 0x94, 0x2b, 0x33, 0xf, 0xc0, 0xe2, 0xb3, 0xa, 0xea, 0x68, 0xd7, 0x73, 0x68, 0xfc,\n        0xe4, 0x94, 0x82, 0x72, 0x99, 0x1d, 0x25, 0x7e, 0x14, 0x5fa522a4fef55e8e23ddadc9,\n        0x4162b9c3d065c6877fcae158, 0x2c69d38963d3bbb0, 0x0, 0xa32c421a1744326f2487aa9d,\n        0x5d3a2032e251af5714e7268, 0x6f0b4dcca7119894, 0x0, 0x1eb1fc609d94408338932e6571331544,\n        0x106e4b717d15ec8ce530c18b4be2f30bf, 0x948833f5f59ff99bb96d7d9a, 0x1972451c30b9681ac6cc4894,\n        0x71db24cb9a8e37e5, 0x0, 0x5b05737bf52d3fac0da1105c, 0xdb567e54ca42d6c5bcaee354,\n        0xd21c41d6e5278aa, 0x0, 0x4a10590868e679657c16429324bdd19,\n        0x363fc94159c3ad82e51877bd206d3da4, 0x649a1364d8d8f4e98bc74329570bfc96,\n        0x3a80f629c7d3bc576d89c9d496ee9f95, 0x57b85b2b20263ab1877dcbc3614d71ed,\n        0x39711965fa2e49141a67dce0499f9413,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_21_42B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xa3ff77a0b64bf8a53add37c4208b76da, 0x8d39c2e67fcefdc35c2b35c50185b64a,\n        0x6e7ca9c4d5e470a6262477c6203a721c, 0x2203296e40441e6315a4b01bf74791be,\n        0x5fe90f5d23dc8e6a85e78f347d97cae4, 0xa2f558ffddbc7e2778af2ddef1ad97e, 0x2a, 0x56, 0xf1,\n        0x32, 0x9d, 0x9a, 0x6b, 0xe2, 0x5a, 0x61, 0x59, 0xc7, 0x2f, 0x12, 0x68, 0x8d, 0xc8, 0x31,\n        0x4e, 0x85, 0xdd, 0x9e, 0x7e, 0x4d, 0xc0, 0x5b, 0xbe, 0xcb, 0x77, 0x29, 0xe0, 0x23, 0xc8,\n        0x6f, 0x8e, 0x9, 0x37, 0x35, 0x3f, 0x27, 0xc7, 0xed, 0xe9, 0x14, 0x6b84c39c4ad9cb2e9fa5c149,\n        0x78c59746fc3088327d4bbd98, 0x68c11f92ae24ca72, 0x0, 0x1ced9f7228d7051e25a21ff2,\n        0x5ad874fcfa9ef5ba64690548, 0x51bb8c3d280a1573, 0x0, 0x13a34b7d33dc76aaae012b70bcf1acd0,\n        0x2e42e245d8c7acb1d38141d0f2db3a2d, 0x3e1169a11a78e93989c338ab, 0x899bef2f13548199aa4ef880,\n        0x4f1ae0fecc6a40e4, 0x0, 0x99a7d8e333508e404954f77b, 0x6a763523b369a5647f1c3231,\n        0x24569ad8c201845a, 0x0, 0x66ff6748d8f79e3c78e61150ca8a367,\n        0x222ba2090a2091dccb807d3796e4bcba, 0xe4a0af74125fe32ce5ba54d9150a8f70,\n        0x2f9b4728682aa4dc6c45b098f9fa09c7, 0xe1c91d844f3ac84d0a918cb52493a511,\n        0x3b5e09022b3317db3e3908788aa7e0f8,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_22_44B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x476be4e75dba5012b6312fd42b6afbec, 0x37be3a0a7bdfd17b1ab70d66bcdfaf19,\n        0xb801bc80df12f7989423c74c3485f89a, 0xf6e2727a014555aa8bd2a1d41e293806,\n        0xa46c3a54f5b9fa5beba63d60f9cc4956, 0xcb015f6de95bf66bf763c156638afa7, 0x2c, 0x63, 0xb8,\n        0xb, 0x79, 0x56, 0xac, 0xbe, 0xcf, 0xc, 0x35, 0xe9, 0xab, 0x6, 0xb9, 0x14, 0xb0, 0xc7, 0x1,\n        0x4f, 0xe1, 0xa4, 0xbb, 0xc0, 0x21, 0x72, 0x40, 0xc1, 0xa3, 0x30, 0x95, 0xd7, 0x7, 0x95,\n        0x3e, 0xd7, 0x7b, 0x15, 0xd2, 0x11, 0xad, 0xaf, 0x9b, 0x97, 0xdc, 0x14,\n        0x8e7a92dea46f5561cf42f4bf, 0x3c16c9f7e12c8031937b5841, 0x2fad501544bd25c3, 0x0,\n        0x9a42264efd722de5794de5a1, 0x8ad70bf5e54d7c1e3e4833a8, 0x52e0fbeffe0d8623, 0x0,\n        0x63dda375cf39add7aff7470ead0dda5, 0x128071e01fe406fbeba88b7ccaa65a4a4,\n        0x6527a45e52b613894241f38, 0x27f84d85b97550d9cff0469e, 0xeff192310afb7, 0x0,\n        0x57d8a273d2fa8a6a0a827f15, 0xca33afdf5da8a3e129924e5e, 0x17dbe1f0ad58ba4e, 0x0,\n        0x235bfdd3d4df5fbab9ebc276cf04fa73, 0x1024324259d46313353e5ba361cda0906,\n        0x20866b32fd08893480bdca692eb706b5, 0x44899a259832955b940237cc48fa0d8,\n        0x396285d427e7e9697dd65ae4a51141ba, 0x257ce91e91c41dabaf781533a67e1b9e,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_23_46B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xeedad93b7bddeacc2a01b2aa95e7a3ab, 0x32386e83a3c29936c9d7dc8b25f56fed,\n        0xe016915541fad2d520ce87d4a81f692c, 0xf76cd64135185625150e24f57c39f4bb,\n        0x4347384defdb3903398d38a401245853, 0xb6e8a1a13b9a78ba6ab8d5ff546a3ca, 0x2e, 0x4f, 0x18,\n        0x46, 0xdd, 0x7a, 0xd5, 0xe, 0x54, 0x5d, 0x4c, 0xfb, 0xff, 0xbb, 0x1d, 0xc2, 0xff, 0x14,\n        0x5d, 0xc1, 0x23, 0x75, 0x4d, 0x8, 0xaf, 0x4e, 0x44, 0xec, 0xc0, 0xbc, 0x8c, 0x91, 0x41,\n        0x13, 0x88, 0xbc, 0x76, 0x53, 0xe2, 0xd8, 0x93, 0xd1, 0xea, 0xc2, 0x10, 0x7d, 0x5, 0x14,\n        0xf6aa1c3bcc6e9700fc72b9ec, 0x681c04f4d32e18731212375d, 0x5e0dd71647da599c, 0x0,\n        0x8e0f72c3b68f7ebafcec36a9, 0xbfdb6659c14511f534e282e1, 0x560f035da03f446c, 0x0,\n        0x6754299b9230b4b748b81c8773dcc0b, 0x11e0735b5b5d8d1e8a026d71f4944f30f,\n        0x7b9ba4e30b721ef913b4b6af, 0x23173f3fe90e6b5dec2fab9b, 0x230513fc8fe0951c, 0x0,\n        0x561a02e5dfbd78c8fb30a94b, 0x9b595711a1baf14fbec9b24b, 0x4c2dfe6dc0026e8b, 0x0,\n        0xffb8cc0ac6f793bee4a03695b069793, 0x1028d22f7af6abfad53ca95e74b6d75dc,\n        0x5c419a73d0a5de49c039f6583bfa4681, 0x6706312f873431995171f83697a97122,\n        0xc3aee7a86e08b3325330143719401486, 0x6faf8d956cf70dd2ebc8a45c3391c21,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_24_48B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xcfdb8360a12c992b6b3ed4a4bbefd290, 0x7fc4d34558e9f375eeb007393822b3a2,\n        0xd2cb053d81746685d5f1ae2144992efa, 0x60fec2bdfdc60dcd6eaf24b45eef84cf,\n        0x9e14c9f1b2bf594ff3ec12338885e95f, 0xbaedd28edf3301173b205daecc99c5b, 0x30, 0x78, 0x3e,\n        0x33, 0xc3, 0xac, 0xbd, 0xbb, 0x36, 0xe8, 0x19, 0xf5, 0x44, 0xa7, 0x78, 0x1d, 0x83, 0xfc,\n        0x28, 0x3d, 0x33, 0x9, 0xf5, 0xd3, 0xd1, 0x2c, 0x8d, 0xcd, 0x6b, 0xb, 0x3d, 0xe, 0x89, 0xe3,\n        0x8c, 0xfd, 0x3b, 0x4d, 0x8, 0x85, 0x66, 0x1c, 0xa5, 0x47, 0xfb, 0x97, 0x64, 0xab, 0xff,\n        0x14, 0xc17a6d05aaa41f9149dcdb2b, 0x402616ffdb4be4a39136a15a, 0x5ba0b15e673922b, 0x0,\n        0xdf4a5ed66de118a654bb55b4, 0x49018cec5c513896e1d4a5e6, 0x6ae98c1c50103d05, 0x0,\n        0x723647dbe73565e7b296b665b6be597, 0x19ef237fc11b456bec481912e370bb95,\n        0x71388f6384ec1f413bb64710, 0x5df63eb4f74230be958e4991, 0x562fa915201de425, 0x0,\n        0xa445ce534badd02fdfd8f5cc, 0x73ac7e1c6a395204156ead87, 0x3824d1eac362f57c, 0x0,\n        0x334bb82d22d7cc13bf79805b67a26a85, 0x12582916a2d746811cf563824ac031712,\n        0xce5742cee59b900d9b3befe2ee496042, 0x5d32a7afdf3f080544d2ce6e7ca33834,\n        0x69b771d216a328ed57ed6b4ec1cad004, 0x75fe7470f00d84132c4a40f8d601283c,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_25_50B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x9fb36f3a5f8c20a6bb348ee70f8502c, 0xea3e15166e0a2078e025ccdb5030110b,\n        0xdcda74b5f6ae8167383631a49a4e669, 0x82d3d8fdbe897cc664a2d0f158cc1e73,\n        0x579680c715179313f50bcc333be18d9d, 0xe593607433d771c964c7e560b9bfe2, 0x32, 0xf3, 0x99,\n        0x2c, 0xde, 0x64, 0x93, 0xe6, 0x71, 0xf1, 0xe1, 0x29, 0xdd, 0xca, 0x80, 0x38, 0xb0, 0xab,\n        0xdb, 0x77, 0xbb, 0x90, 0x35, 0xf9, 0xf8, 0xbe, 0x54, 0xbd, 0x5d, 0x68, 0xc1, 0xae, 0xff,\n        0x72, 0x4f, 0xf4, 0x7d, 0x29, 0x34, 0x43, 0x91, 0xdc, 0x53, 0x61, 0x66, 0xb8, 0x67, 0x1c,\n        0xbb, 0xf1, 0x23, 0x14, 0xb3b35fd5c7c76a8ea5b2a6ba, 0x6c0a0a53693666bd25ee428c,\n        0x202f90c8ef321f6f, 0x0, 0x3c08c085af81e14f87c4bc03, 0x3afe55b3061dc180489354f,\n        0x837540e0ecd67a3, 0x0, 0x333eda5ec9a4997625f1b53f1102021d,\n        0x1079bddd98bb1a199c2d8b57dcb5dc00f, 0xa9db5a3566d6d7bf3cf98b58, 0xd867c7904c4254f037ab74f5,\n        0x19c96b03ef8562cd, 0x0, 0xaae27af9c2298bc97cd34493, 0xfc562747747b0394b3f02019,\n        0x1a01d22c3d2fa4a0, 0x0, 0x111acf0e8d550078a432773811d0e09,\n        0x21bb5e205ac4f9c793f53dabc51b401e, 0x83c9cb27881166dc58f55d24a3cc5629,\n        0x13943760e9fccf769ae50fa9cbe54f4, 0xac766d9b53daefcb66a02c6d840691a3,\n        0x49509ad5e9d477ad6c36d0b0d515bdb4,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_26_52B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xe1405cbd4e9a829f72cf5a41f2193c5e, 0x1ae53709ed876037a90357a9bc9fbca6,\n        0xcc2c3c13dd3b0b36d4f91e81a1c3d427, 0x139b7f17e47eb06c771582242f2cd030,\n        0x2e187f3c66c725f2d8fec2a670dd42fc, 0x1eab1c54e83d5e1b0c70df2cfece87e, 0x34, 0xf8, 0xb2,\n        0x19, 0x62, 0x44, 0x7b, 0xa, 0x8f, 0x2e, 0x42, 0x79, 0xde, 0x41, 0x1b, 0xea, 0x12, 0x8e,\n        0xb, 0xe4, 0x4b, 0x69, 0x15, 0xe6, 0xcd, 0xa8, 0x83, 0x41, 0xa6, 0x8a, 0xd, 0x81, 0x83,\n        0x57, 0xdb, 0x93, 0x8e, 0xac, 0x73, 0xe0, 0xaf, 0x6d, 0x31, 0x20, 0x6b, 0x39, 0x48, 0xf8,\n        0xc4, 0x8a, 0x44, 0x73, 0x8, 0x14, 0xe65e7fe469389002fc7e8a57, 0xf5b85bed46a00c3b565ebe3,\n        0xdfb32e26ef297ed, 0x0, 0xafa8530415d22760c6d2b82a, 0x3d4cf9af9e321a9d52458d29,\n        0x1017dee106d78e13, 0x0, 0x204988f6a59dff4ef4bfb55d11ab1ec5,\n        0x1c7564759fa0994497c7b23d5195c3af, 0x67cd465864680f744b4c139f, 0x1f6118c3db728c0b671289a0,\n        0x526a6d0a81c6de17, 0x0, 0x7e2abbcc7e46b7f2a07873eb, 0x6d925be11b749e01fbed5766,\n        0x42b07313b6687cad, 0x0, 0x753cc470c1cbef106b37c0820954b69,\n        0x107776920c1afb3097c6af04856fcc034, 0x2949b860890c89625374cd3a9b74b1b2,\n        0x3e8bf981fa03c01cc7dccd738a261f28, 0x8ab1c1445f2f250fc8c354c959da80,\n        0x238e9c2dd40f5ec92dd14281c6e86509,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_27_54B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xe205910db2c633ec94a8fe163e9ca965, 0x2e4aabfeac8b4dbd9b9d76a464274ea0,\n        0xa27b806af44a61d382b6b8831d90bb01, 0x75a50aff49f523345d3275b7fe581369,\n        0xf4d419b354f3d821970fc7e9741a4e7e, 0xd736446d6fe94fb0ffd70c84514d9a1, 0x36, 0xe0, 0x72,\n        0x41, 0xdb, 0xd3, 0xad, 0xbe, 0x61, 0xb, 0xbe, 0x4d, 0x0, 0x5d, 0xd4, 0x67, 0x32, 0xa4,\n        0xc2, 0x50, 0x86, 0xec, 0xb8, 0xec, 0x29, 0xcd, 0x7b, 0xca, 0x11, 0x6e, 0x1b, 0xf9, 0xf5,\n        0x3b, 0xfb, 0xf3, 0xe1, 0x1f, 0xa4, 0x90, 0x18, 0xd3, 0x9f, 0xf1, 0x15, 0x4a, 0x6, 0x66,\n        0x8e, 0xf7, 0xdf, 0x5c, 0x67, 0x8e, 0x6a, 0x14, 0x8fd48a5f0cbc7cd551b22b8f,\n        0xf70280b61c3739182e9707c5, 0x1bb4d9afe2b6388a, 0x0, 0xedd3e73dfef36cf88bd9c61d,\n        0xaec12bf9f55127130f8749cc, 0x4c9f640f4dd1e2af, 0x0, 0x188b5300042082233b95b31db38d6faf,\n        0x9223932d7b504223f930056888ac19c, 0x2e970b3220987939bb229eaa, 0x47a6fa0b58ad803d3daaf244,\n        0x5f1c153a8b5f9869, 0x0, 0xb3795852b41dd54acd555598, 0x8d67b51c5ff50eb415b43815,\n        0x326cc94912a4cc3e, 0x0, 0x165d26c1c61e237b08433ed3d7ee3ca7,\n        0x124bbe48efb6b7c2e2caf70c2e3cb5d1c, 0xe98560f4b05a42b6abfd7d4381e6ea5c,\n        0x791bc3d6e37de6c41a20af9aac189a7d, 0x4c6aaaebe23953c625e6c2ce955a818c,\n        0x6286fc75f531a5a68b22af0e38eb4903,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_28_56B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x6cd49146124c9ae4dfcd13517a4ca057, 0xda1fa7ec0a33a172cb9d3f348fdc9c1f,\n        0x90c02885701acf55147dc8f947c9cba6, 0xfa55dea45474f4adba1d5d85e4ce1ef1,\n        0x2d9921cf8c29598f5f5b3ad7364be84c, 0xb66c3f2329d7e3b75873d1634ef92f4, 0x38, 0x7f, 0x31,\n        0x8d, 0xbd, 0x12, 0x1c, 0x8, 0xbf, 0xdd, 0xfe, 0xff, 0x4f, 0x6a, 0xff, 0x4e, 0x45, 0x79,\n        0x32, 0x51, 0xf8, 0xab, 0xf6, 0x58, 0x40, 0x33, 0x58, 0x23, 0x89, 0x84, 0x36, 0x0, 0x54,\n        0xf2, 0xa8, 0x62, 0xc5, 0xbb, 0x83, 0xed, 0x89, 0x2, 0x5d, 0x20, 0x14, 0xa7, 0xa0, 0xce,\n        0xe5, 0xd, 0xa3, 0xcb, 0xe, 0x76, 0xbb, 0xb6, 0xbf, 0x14, 0x221f8ae08ba5a8b36e213773,\n        0x3b5c2e1a0eb0f0dbbf806105, 0x4193c37bae1895cf, 0x0, 0x93b2e4cb7b4cb75620dd80ad,\n        0x30c7fe492e2173818988c7b, 0x13c907b836ebd26d, 0x0, 0x1892c94646453a6599670cbf4d7329cb,\n        0x26c90b82594af5ef94487cfcd2106d53, 0xd9ddc94af516fb8449f061a8, 0xc0fb572fdbe70b1d59d80007,\n        0x2d8b0f14c92d1cdd, 0x0, 0xcddf1ba9914ce12c8cc36a68, 0x79e032c4c246b23cd4943fa7,\n        0x33443ad08a8b45d4, 0x0, 0x2e324828471c960e7c93d1f2920a0f3b,\n        0x10d9e8be6f56de45c5a85896623d83ef0, 0x7d5783030cd8e4017806134ff0ebf737,\n        0x3e70836352841b985940286dd86ee97e, 0xe730705124f314044c5f7421d9b16011,\n        0x90ad7fad39fa85be8e39c6bed340cbb,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_29_58B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xa5cd35ea3685ae2b5e62991409da7e0f, 0x123634832c6f1d346b417e9c6ad13b48,\n        0xe074ecb682f8165568625d6af241bdef, 0x78659c9ae9268f2431c203d23018a7d5,\n        0x9fbcecf9240dad1672fab8cd680d90ec, 0x4a71fa395536426f6826566515365fa, 0x3a, 0x8d, 0xdc,\n        0xd6, 0x30, 0x43, 0xf5, 0x5e, 0xc3, 0xbf, 0xc8, 0x3d, 0xce, 0xae, 0x69, 0xd8, 0xf8, 0xb3,\n        0x2f, 0x4c, 0xdb, 0x6e, 0x2a, 0xeb, 0xd9, 0x4b, 0x43, 0x14, 0xf8, 0xfe, 0x72, 0x87, 0xdc,\n        0xb6, 0x27, 0x32, 0xc9, 0x5, 0x2e, 0x75, 0x57, 0xfe, 0x63, 0x53, 0x43, 0x38, 0xef, 0xb5,\n        0xb6, 0x25, 0x4c, 0x5d, 0x41, 0xd2, 0x69, 0xc, 0xf5, 0x14, 0x4f, 0x14,\n        0x9b1c19208091298d52b36ff8, 0x86a37c43e6283f0de97ec43c, 0x4a72aab104cfe59c, 0x0,\n        0xdea3ba3657ed19626b8a6032, 0x41ae598bba09f743633bf037, 0x1dbd4c50f393a85f, 0x0,\n        0x1bc74f1028aeb6f6970483ae9cc95d63, 0x2025f40277c842f6a70792a848c26cb4,\n        0x50994f1284796db6fad98849, 0x30278b2241f9ac8d9d9adcfb, 0x6ae23674d14c9829, 0x0,\n        0x4ee6e2f223e8d6739f5f5880, 0x236022ff45332e17e050ef89, 0x4e62795b32055a40, 0x0,\n        0x3e5d60e5fc3b1f7d57a9c5f4a661cef3, 0x134cf865b10157749c76a5699e5a54c9f,\n        0xf044d65abce84b8879ae487d70dbcb0c, 0x18b94c37ce13d3ab114b84324e8fd5e7,\n        0xe2358f86e3017a6600ec864c9b562c80, 0x4252d8aff604e746087ad8b8c79e7bd5,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_30_60B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x9b7290b34092910ceb3f4d5440e58d78, 0x135f2ec69465bb63e97ad644be987e4,\n        0x409078c3a7fa07258520e79127e0fdd2, 0x42154902407f55ac13f321636486efd9,\n        0x88515dbc1f5095d4b0cd90695cd067dd, 0xf69c27fa40306ee8b09f61bdc84bbbf, 0x3c, 0x3a, 0x53,\n        0x59, 0x4f, 0x3f, 0xba, 0x3, 0x2, 0x93, 0x18, 0xf5, 0x12, 0xb0, 0x84, 0xa0, 0x71, 0xeb,\n        0xd6, 0xb, 0xae, 0xc7, 0xf5, 0x5b, 0x2, 0x8d, 0xc7, 0x3b, 0xfc, 0x9c, 0x74, 0xe0, 0xca,\n        0x49, 0x6b, 0xf8, 0x19, 0xdd, 0x92, 0xab, 0x61, 0xcd, 0x8b, 0x74, 0xbe, 0x3c, 0xd, 0x6d,\n        0xcd, 0x12, 0x8e, 0xfc, 0x5e, 0xd3, 0x34, 0x2c, 0xba, 0x12, 0x4f, 0x72, 0x6c, 0x14,\n        0x767582504fcdf5c532ae821f, 0x369283997ece24f13874c7f3, 0x2c98a25fbbac87a0, 0x0,\n        0xb605dd1a7fd4bc65bfa1cc37, 0xa8f7771da5567342f07d981f, 0x70c2347f0c6cad9d, 0x0,\n        0x2374543478d593b0338a55f4bfc170d1, 0x1091fb47f6277c497014342fd6302db4f,\n        0x75607a81fc9dfdbce0a61099, 0xaaf1cdc31dac2c136d9f0796, 0x320d0d002388dca2, 0x0,\n        0xd52681f4406522dfe89abd4b, 0x16c7f383c6733c5126d3ef23, 0x705ed4abf42a6a8b, 0x0,\n        0x28b688ea47e475fbe26e2054b2f25ec5, 0x12c0f45dc3f535dd3bda5ee32c863aa05,\n        0x3c11a7163b0a795314eedc7f9f209cf2, 0x38b48bcaf3ce9863ef2021828e2f49c3,\n        0x25b049f36336d365154fee2d92f7209a, 0x7afa60ee9713dfea9945e105904bb927,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_eddsa_31_62B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0xe2c6f49b0327d5e1b001737df5ea1005, 0xb15103103c20f3345476b4613a0a3092,\n        0xec38dd1c63f1903a5b70c76a43d8e506, 0xad60d5e7a4be5efaf2b9a97897a43f1a,\n        0xca1a7642373220a48bfafa42ff26dda7, 0xb435db4aa2df73ff6be1bc20d940469, 0x3e, 0x54, 0xe0,\n        0xca, 0xa8, 0xe6, 0x39, 0x19, 0xca, 0x61, 0x4b, 0x2b, 0xfd, 0x30, 0x8c, 0xcf, 0xe5, 0xc,\n        0x9e, 0xa8, 0x88, 0xe1, 0xee, 0x44, 0x46, 0xd6, 0x82, 0xcb, 0x50, 0x34, 0x62, 0x7f, 0x97,\n        0xb0, 0x53, 0x92, 0xc0, 0x4e, 0x83, 0x55, 0x56, 0xc3, 0x1c, 0x52, 0x81, 0x6a, 0x48, 0xe4,\n        0xfb, 0x19, 0x66, 0x93, 0x20, 0x6b, 0x8a, 0xfb, 0x44, 0x8, 0x66, 0x2b, 0x3c, 0xb5, 0x75,\n        0x14, 0x962624a2b58a3398a4cb5f20, 0xa2f7b76e2e5211d70478e1c4, 0x34f1dbb6c3a2820f, 0x0,\n        0xb1959060b4fbc9fdbf1fbd3d, 0xb65e79dd2152fee4e722175b, 0x1e30caa19014bf94, 0x0,\n        0x566024cc1d8444077611d2dbc0124c0, 0x838993ad8b06741eb5a8c34b36a8ab9,\n        0xa8daf3da5d467d1f8f78fa2e, 0xda73157212cd2884342c6fe5, 0x2027ede735f65b7d, 0x0,\n        0x66c3c9bb08d3e040fcfc08b1, 0x2653aa90486e889f8d9527d9, 0x5fd1337521e862db, 0x0,\n        0x5dca01e9cbf9f2873a07d909c4bc1d9, 0x1703982ac551c4c9dbe2856f29d22033,\n        0xbed3d85b70b069b3447e8327aaf8695f, 0x408a942fe8f45cddd22487f5180e39a3,\n        0x8c9bf6a015c76f19883037c34ca77b45, 0x566af0d91aa86827627d0323bd33fdb9,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n\n#[test]\nfn test_eddsa_32_64B() {\n    let mut eddsa_sig_with_hints_serialized = array![\n        0x51e367ada5fda575b66d4bf876a03ff7, 0xccc6e9870301ca0968d1ad297f8e1ea4,\n        0xa1ea48dde7ba2174837f2011a7d2b957, 0x3a8f457be1fe065830f1a0709a1aab8e,\n        0x770b006f49e8c90a3e4d83d102b36409, 0x66aee0e84c7fb32e657a9f8413b08f0, 0x40, 0x4b, 0xaf,\n        0xda, 0xc9, 0x9, 0x9d, 0x40, 0x57, 0xed, 0x6d, 0xd0, 0x8b, 0xca, 0xee, 0x87, 0x56, 0xe9,\n        0xa4, 0xf, 0x2c, 0xb9, 0x59, 0x80, 0x20, 0xeb, 0x95, 0x1, 0x95, 0x28, 0x40, 0x9b, 0xbe,\n        0xa3, 0x8b, 0x38, 0x4a, 0x59, 0xf1, 0x19, 0xf5, 0x72, 0x97, 0xbf, 0xb2, 0xfa, 0x14, 0x2f,\n        0xc7, 0xbb, 0x1d, 0x90, 0xdb, 0xdd, 0xde, 0x77, 0x2b, 0xcd, 0xe4, 0x8c, 0x56, 0x70, 0xd5,\n        0xfa, 0x13, 0x14, 0xd161fc726de012c0e0743e7, 0x42acee4e16921c0867f97342, 0x3df8d27df4355025,\n        0x0, 0x417af9c7a0442b578a1bc6fd, 0x8b47ac563f259260e2b0f80, 0x6c6ff02c28f84b7c, 0x0,\n        0xa02b77f8fd8b7c1eb63155c5ea920a5, 0x106d7cd46cb0e0c81f3d995c3bc47503d,\n        0xb4630746992c8a357d6df9eb, 0x5fdba5230f13b83f1c2abc8e, 0x23b4e6d66fd0dd34, 0x0,\n        0x7670dc68e4c7436863f0f4e, 0xf570573dc0f1cc0cdc47bf49, 0x5e0b72bc8a7978af, 0x0,\n        0x211da8e595abb9413372df7309b63acf, 0x1085d544d1097dd536984587f626dac87,\n        0xf72722a04d4e780bc03c03781212ceac, 0x7d057bb78a4c6624f1754cb4366b1757,\n        0xdb32bb362e6f4e4ab652852ea150f205, 0x745397cfb61e599ed42508c8e6169142,\n    ]\n        .span();\n    let public_key_y = Serde::<u256>::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let eddsa_with_hints = Serde::<\n        EdDSASignatureWithHint,\n    >::deserialize(ref eddsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_eddsa_signature(eddsa_with_hints, public_key_y);\n    assert!(is_valid);\n}\n"
  },
  {
    "path": "src/src/tests/autogenerated/msm_tests.cairo",
    "content": "use garaga::core::circuit::u288IntoCircuitInputValue;\nuse garaga::definitions::{G1Point, u384};\nuse garaga::ec_ops::msm_g1;\n\n#[test]\n#[ignore]\nfn test_msm_BN254_1P() {\n    let mut data = array![\n        0x1, 0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0x772ca79c580e121ca148fe75, 0xce2f55e418ca01b3d6d1014b, 0x2884b1dc4e84e30f, 0x0, 0x1,\n        0xb4862b21fb97d43588561712e8e5216a, 0x967d0cae6f4590b9a164106cf6a659e, 0x0,\n        0xa9f0001b3fc543c76e78dbe5, 0x59d3efe5fc893f110337f203, 0x2a3c4edaf4eb5933, 0x0,\n        0x47c7d40af526b19cd3c8e9d6, 0x77e086d9ab1747415c8a345, 0x2ecf62cd2d14d49c, 0x0,\n        0x10000000000000000358f1af3ace11fdc, 0x100000000000000004ac9542b22967d33,\n        0x100000000000000000cf05f964742cc6d, 0x1000000000000000081d342cffb91cba7,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xa9f0001b3fc543c76e78dbe5,\n                limb1: 0x59d3efe5fc893f110337f203,\n                limb2: 0x2a3c4edaf4eb5933,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x47c7d40af526b19cd3c8e9d6,\n                limb1: 0x77e086d9ab1747415c8a345,\n                limb2: 0x2ecf62cd2d14d49c,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BN254_2P() {\n    let mut data = array![\n        0x2, 0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0x772ca79c580e121ca148fe75, 0xce2f55e418ca01b3d6d1014b, 0x2884b1dc4e84e30f, 0x0,\n        0x536c985db33c69f7c242e07a, 0xfc531bccffafcf1e59d91fb9, 0x2585e4f8a31664cb, 0x0,\n        0x57fa42444057cf0c1d62ae3c, 0x4f48d341183118d68ea41313, 0x1d2d2799db056ed1, 0x0, 0x2,\n        0x12e0c8b2bad640fb19488dec4f65d4d9, 0x1521f387af19922ad9b8a714e61a441c,\n        0x5a92118719c78df48f4ff31e78de5857, 0x28fcb26f9c6316b950f244556f25e2a2, 0x0,\n        0x3e478e7543d16c51c9284bef, 0xc686c1c872c6e2c5037128b3, 0x199c5e1c0cdf53c8, 0x0,\n        0xf388e0c9512c46adb6327d02, 0xfeecfb56cfd9a1509392beb3, 0x2ccad398d3b28843, 0x0,\n        0x9be5263ddc8a3746, 0x3b9c1e56ffcfcc82, 0x1000000000000000041c754da808c6d02,\n        0x277449c3e218531f, 0x5211712cf983c9bb37a437a3, 0x3c9da9e18a4323d2ed3b9bcb,\n        0x135de21f5341b7ec, 0x0, 0x3c22df03e388c6cea0664c2b, 0xc1036691dedbab22e63b1e2a,\n        0x104e399500d777b8, 0x0, 0x100000000000000005fcd1b724f1296a6,\n        0x1000000000000000016e3236cbd22722f, 0x4dac40f4f32b51f2,\n        0x1000000000000000000417aa85f133ffd,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x9234d7617541ef6bd6a55e9e,\n                limb1: 0x7a1353bb00de9de1d818c849,\n                limb2: 0x21e43e4fdf41dbf4,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x30dd41ab3aae480eb7924f99,\n                limb1: 0xa94c0b54f99635a912b59f0f,\n                limb2: 0x187498a467804f5b,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BN254_3P() {\n    let mut data = array![\n        0x3, 0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0x772ca79c580e121ca148fe75, 0xce2f55e418ca01b3d6d1014b, 0x2884b1dc4e84e30f, 0x0,\n        0x536c985db33c69f7c242e07a, 0xfc531bccffafcf1e59d91fb9, 0x2585e4f8a31664cb, 0x0,\n        0x57fa42444057cf0c1d62ae3c, 0x4f48d341183118d68ea41313, 0x1d2d2799db056ed1, 0x0,\n        0x236ca9312dad3661a37f2d6f, 0x98424c01caad7592315715d1, 0x795b9fd941b23c4, 0x0,\n        0xc7ab5834609a54b8993ffd79, 0xe81cd490528b814ca632aace, 0x2d9ff53d3009e6f7, 0x0, 0x3,\n        0x5a92118719c78df48f4ff31e78de5857, 0x28fcb26f9c6316b950f244556f25e2a2,\n        0x8d723104f77383c13458a748e9bb17bc, 0x215ddba6dd84f39e71545a137a1d5006,\n        0xeb2083e6ce164dba0ff18e0242af9fc3, 0x5f82a8f03983ca8ea7e9d498c778ea6, 0x0,\n        0xeb6c64e1541feb4cd5958beb, 0x69953b682ac9e3bef74198ea, 0xf357da3c551bd01, 0x0,\n        0x8cf96097b6703380dee48cfa, 0xaf4c872e1b6551bf875c946f, 0x30549c20b1c1e0ff, 0x0,\n        0x100000000000000005fcd1b724f1296a6, 0x1000000000000000016e3236cbd22722f,\n        0x4dac40f4f32b51f2, 0x1000000000000000000417aa85f133ffd, 0x71c5aa9b358faf4569aead5,\n        0x5b16db715ec2839da79801db, 0x33ab1528e0d2ba4, 0x0, 0x1d4cf315732c8bfaf74e675a,\n        0x81e4a39e6f6fca6f89cc94f0, 0x2939221afe7a9318, 0x0, 0x100000000000000001ab0231e3f1af32b,\n        0x1f1689eda0b7325, 0x8211c744ee497946, 0x100000000000000001401005296ba5335,\n        0x9f30216b591e9f34501cf268, 0x7aebbd8d9c7bedb729aab01f, 0x16413acc47520c69, 0x0,\n        0x596a902a02766a7777a12a86, 0xcd89979d5d539a6d7dfb9208, 0x12c9d036ab478f21, 0x0,\n        0x257275fdb7e6a5fd, 0x437a0a16546be43f, 0x100000000000000001e20dc33694e8500,\n        0x4c004b142b3cda1a,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xa505aa539534e1ed3825e1d3,\n                limb1: 0xd3d6e50ccbd336be810ae134,\n                limb2: 0x2b8806194c015dab,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xe3066db5d6cc9577162aa35c,\n                limb1: 0x3ab20c13b3f5fdea9441aaa8,\n                limb2: 0xc21ee843d06bdd4,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BN254_4P() {\n    let mut data = array![\n        0x4, 0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0x772ca79c580e121ca148fe75, 0xce2f55e418ca01b3d6d1014b, 0x2884b1dc4e84e30f, 0x0,\n        0x536c985db33c69f7c242e07a, 0xfc531bccffafcf1e59d91fb9, 0x2585e4f8a31664cb, 0x0,\n        0x57fa42444057cf0c1d62ae3c, 0x4f48d341183118d68ea41313, 0x1d2d2799db056ed1, 0x0,\n        0x236ca9312dad3661a37f2d6f, 0x98424c01caad7592315715d1, 0x795b9fd941b23c4, 0x0,\n        0xc7ab5834609a54b8993ffd79, 0xe81cd490528b814ca632aace, 0x2d9ff53d3009e6f7, 0x0,\n        0x163df40cafbf585ca5b2ab44, 0xb4752e4666c88dbbe23783a0, 0x1a801462ac9cb657, 0x0,\n        0xac9b557d7ca8625d957263c6, 0xdc6f75fa8339a78b998ae54a, 0x28683293b6494d9f, 0x0, 0x4,\n        0x8d723104f77383c13458a748e9bb17bc, 0x215ddba6dd84f39e71545a137a1d5006,\n        0xeb2083e6ce164dba0ff18e0242af9fc3, 0x5f82a8f03983ca8ea7e9d498c778ea6,\n        0xb5d32b1666194cb1d71037d1b83e90ec, 0x28045af9ab0c1681c8f8e3d0d3290a4c,\n        0xd3fbf47a7e5b1e7f9ca5499d004ae545, 0x2ebce25e3e70f16a55485822de1b372a, 0x0,\n        0x6cb501b0f2f9a414f1369408, 0x6ca7b1f397dfefc2369e7f77, 0x135eb18352681cd0, 0x0,\n        0xbddf987b8ac91c298eae5fb6, 0x9c1baec61cca6ff8093200df, 0x1db47142bcb9084e, 0x0,\n        0x100000000000000001ab0231e3f1af32b, 0x1f1689eda0b7325, 0x8211c744ee497946,\n        0x100000000000000001401005296ba5335, 0x975b5f57e34be656906b1316, 0x4365ddb9eb3fb542f4a81fa5,\n        0x1e4b71ab4bb74438, 0x0, 0x661840b85c4650ab80d6abfc, 0x6bedd43f4682513b3f26e3b9,\n        0x1bfbc09bedc6e6a1, 0x0, 0x257275fdb7e6a5fd, 0x437a0a16546be43f,\n        0x100000000000000001e20dc33694e8500, 0x4c004b142b3cda1a, 0x15e4e2a08ec22ffe7c9bb956,\n        0x50cedfd39b0f587f62445c96, 0xbfefc101da6032d, 0x0, 0x626cafb2e14919812dc11374,\n        0xd8702613e26c1c5acbb0502a, 0xac9c3b014f6663, 0x0, 0x1000000000000000001067d48d1582ff7,\n        0x35ded9055ac1fce, 0x100000000000000009f949519947d21c6, 0x1000000000000000008e3b423119eedaf,\n        0xfa187fa0605efdbcf49ce5e0, 0x9bba09b74197b6f6a0c7d548, 0x15f5043298d09f8f, 0x0,\n        0x69bb1bf803d830390621ff4b, 0xeab9213022b9471b2f5ffb27, 0x20e0ff3bce0d13ab, 0x0,\n        0x6d0d75af97fefa50, 0x1000000000000000021d60bf2c3658c74,\n        0x1000000000000000034f51fecbdff851a, 0x1000000000000000002c54143b4f61e7f,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xda530556c75d2e27b35e716b,\n                limb1: 0xe263c10943a7c230d41bb940,\n                limb2: 0x1d051a29c6a2eafe,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x679ed4b58350eefe8c88ae2a,\n                limb1: 0x46b4e4ba8a6a9374a0120664,\n                limb2: 0x121c2c711b7c7f40,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BN254_10P() {\n    let mut data = array![\n        0xa, 0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0x772ca79c580e121ca148fe75, 0xce2f55e418ca01b3d6d1014b, 0x2884b1dc4e84e30f, 0x0,\n        0x536c985db33c69f7c242e07a, 0xfc531bccffafcf1e59d91fb9, 0x2585e4f8a31664cb, 0x0,\n        0x57fa42444057cf0c1d62ae3c, 0x4f48d341183118d68ea41313, 0x1d2d2799db056ed1, 0x0,\n        0x236ca9312dad3661a37f2d6f, 0x98424c01caad7592315715d1, 0x795b9fd941b23c4, 0x0,\n        0xc7ab5834609a54b8993ffd79, 0xe81cd490528b814ca632aace, 0x2d9ff53d3009e6f7, 0x0,\n        0x163df40cafbf585ca5b2ab44, 0xb4752e4666c88dbbe23783a0, 0x1a801462ac9cb657, 0x0,\n        0xac9b557d7ca8625d957263c6, 0xdc6f75fa8339a78b998ae54a, 0x28683293b6494d9f, 0x0,\n        0x5c4f5dca0c973b7f70bfff9, 0x188c2afab11eef5d48ecda3c, 0xc2fed35d36c49f1, 0x0,\n        0x9d7244ea10697ca42e2e066b, 0xfe18a519c7d68770dc48dbf9, 0x149bb528db998529, 0x0,\n        0xffc057151b06c496e6fdd440, 0x5a01bae0c7441f08c7af1cf9, 0x274e0e02529e6d26, 0x0,\n        0x65ceb8977413bc9798681ecb, 0x19ffb287b45234f0c28fd1a7, 0x28dbbd2f9267be76, 0x0,\n        0xcfcdbfdb2056ff1a64bf1d47, 0xf26fe2dae9f693d9b4aab2e6, 0x12d66ad4802d841e, 0x0,\n        0xe6e34ebfa2e18dce86cadbdc, 0x7ce096238b3d4b1b8fba6a55, 0x2e0a660b1549800c, 0x0,\n        0xd2dd03b29d58d045656ecf33, 0xeddac3cf7a123aae2180739b, 0x215bec6e0a03c924, 0x0,\n        0xe5201e51828eb11589d8619f, 0xa6563c760aa3a2c9d15af235, 0x7ed0c9b2e7811fb, 0x0,\n        0xc33ac21c67b06a9994457b4c, 0xa9aa5573bf7a92aab85366eb, 0x1a407281e1d92e91, 0x0,\n        0x5a306649d971b115d71a78b1, 0xa70687a9b5132e26b2cfbb37, 0x2031920af5d6c9db, 0x0,\n        0x58a3cea1103f16402eb74c08, 0xdfefcd91df2f4295ec21e03a, 0x1150bcc09ac40007, 0x0,\n        0x57ed7d356f91abcef751889f, 0x5c668cded3599c9af5a7e5fa, 0x2ccf74197cb9bc13, 0x0, 0xa,\n        0xe005b86051ef1922fe43c49e149818d1, 0x1f507980eece328bff7b118e820865d6,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x154bc8ce8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x2305d1699a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x144a7edf6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x21c38572fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0x2b70369e16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x522c9d6d7ab792809e469e6ec62b2c8,\n        0x85940927468ff53d864a7a50b48d73f1, 0xdc5dba1d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x119d0dd09466e4726b5f5241f323ca74,\n        0x5306f3f5151665705b7c709acb175a5a, 0x2592a1c37c879b741d878f9f9cdf5a86, 0x0,\n        0x61e02fbc1bed21b7bcf46f4c, 0xa6effae60cef67c2b63c39bb, 0x2ab9fc18a6615fb, 0x0,\n        0x4b3724a1eaa0e523a8201b45, 0x62b04965c68922390462b7a3, 0x2198f058f64e1c43, 0x0,\n        0x100000000000000003ff332cfc13ea1b7, 0x1000000000000000017a384910097a0a6,\n        0x100000000000000008a1753b1b37a6668, 0xbf55a306145dc38, 0x698fa5385db63a1c306f31a6,\n        0xbf42f2af27151fb1080c4e1b, 0x1fb3b32ec12c4f, 0x0, 0xce605cbc0a47803533df71b7,\n        0x5e11c8521b0dd8cf8f000ffe, 0x7cb22177b9f6c9f, 0x0, 0x7661ed95c25cdb91, 0x10b644cef3d30c35,\n        0x100000000000000006f577c0b4a402ddc, 0x100000000000000001a7d3ea294939351,\n        0xa645e8eb1794e374ba58a593, 0x1efd47471ced39aacc2c4663, 0x2728f58a400a469f, 0x0,\n        0x9bd43dd33e0aab21c26f95c5, 0xd0e362800d54bbfbc6c4fe83, 0x2f76d907a29973cd, 0x0,\n        0x3d2887de3517544e, 0x7509da3e05adfa0a, 0x1000000000000000008604e989fdb09b5,\n        0x100000000000000002c850eaa7c78bdc0, 0x5fe0d34aad545b3c4ef06b35, 0x5bff1849e6dc24399ac732fd,\n        0x1e6185c8691064be, 0x0, 0xea77a9d5f1cd74b987667e33, 0xdc6d8e6d769c20731a299dbc,\n        0x1198dca5bf14851b, 0x0, 0x10000000000000000026898e43eca56c7, 0x30387575e4bac6c6,\n        0x20776c3ca242b7de, 0x100000000000000007d486e28cf4b0e10, 0x4d7402b67e248a1511a0841e,\n        0x9c7a8605f376bd75aeb721e4, 0x16a48728caed67a6, 0x0, 0x3269769473a96aba2d5b866a,\n        0x9fa613baafe4ff9c9827622, 0x83acb5fbc7fad50, 0x0, 0x1000000000000000025897c91d7b8d1f1,\n        0x3fd9c240adbcce3, 0x100000000000000009a89d61b8c513677, 0x100000000000000001d92935462ea59df,\n        0x8373942d7372f9b1f8b95c4c, 0x3d9f31bb677a013ba4cdd49f, 0x2a30441dde9012f4, 0x0,\n        0x7d526a9f384aa7db749876de, 0x9c9092ab98018ed02c205430, 0xcdd28eac120a42f, 0x0,\n        0x100000000000000002fc911da020d2f55, 0x11da5e7b097ee9cd,\n        0x10000000000000000ad5176da721b78b7, 0x100000000000000004102d2a01b7fbf5f,\n        0x7d8d69262635c81c7aef2d75, 0xa11a1dba95b5b955c00180c3, 0x76e4b2ad1aa3378, 0x0,\n        0xb71796d33a53c64cf156350c, 0x2a66cebb6ad6a9131e268eb8, 0xb500720ebb9a86d, 0x0,\n        0x35d8a8c78484d0c2, 0x37b379080cbcb6f7, 0x6b7a53f07ab793f1, 0x449bac4fffe801bc,\n        0x71c6ac67d5825359f2b87c45, 0xd7353e8c0a5d50546cf6c671, 0x2ae62bb2dabe475f, 0x0,\n        0xf0766ee822be9548105cadfb, 0x3a54b0466d91cbcacb90e0a, 0x5e9d7884973f330, 0x0,\n        0x10b1947ddf58a676, 0x103c836271b652be, 0x100000000000000007e3b371d8da612a2,\n        0x10000000000000000afdc716fd42dcebf, 0xb0bf2c61b4f4cbdead74273e, 0xb96526c6288d150336e0ee96,\n        0x12948db5514c09a7, 0x0, 0xf3d8437a14c19236c52edcfc, 0xffd55886b031537735e02f78,\n        0x2ce46f7b1c749b99, 0x0, 0x62e2e02294e2c662, 0xb7b29a6b2600fb8d, 0x12dfa3a68a5aa4b8,\n        0x15945e750a0443c5, 0x7f83b4b51d00fc80bb831daf, 0x25d239976a348f767993ced5,\n        0x2b84658d4f6cb5c8, 0x0, 0xfff31f69291319d397b31124, 0x156bf2f02ea3e4621278874b,\n        0x103cc7bade9316ae, 0x0, 0x1ac00f1b74998794, 0x1000000000000000024c1b4e8a2305293,\n        0x59d3cc6f01477796, 0xc9c2a2cd82f7e2d,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x7f5a9b9409f2cc39825a02c,\n                limb1: 0xcae0e79fbccb0daf22e3d147,\n                limb2: 0xe6a2d797f40f61,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x2a28940c5db0b16b11bcb83b,\n                limb1: 0x909e67a632b9f3e09db0636b,\n                limb2: 0x18643fa5fa438363,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BN254_11P() {\n    let mut data = array![\n        0xb, 0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0x772ca79c580e121ca148fe75, 0xce2f55e418ca01b3d6d1014b, 0x2884b1dc4e84e30f, 0x0,\n        0x536c985db33c69f7c242e07a, 0xfc531bccffafcf1e59d91fb9, 0x2585e4f8a31664cb, 0x0,\n        0x57fa42444057cf0c1d62ae3c, 0x4f48d341183118d68ea41313, 0x1d2d2799db056ed1, 0x0,\n        0x236ca9312dad3661a37f2d6f, 0x98424c01caad7592315715d1, 0x795b9fd941b23c4, 0x0,\n        0xc7ab5834609a54b8993ffd79, 0xe81cd490528b814ca632aace, 0x2d9ff53d3009e6f7, 0x0,\n        0x163df40cafbf585ca5b2ab44, 0xb4752e4666c88dbbe23783a0, 0x1a801462ac9cb657, 0x0,\n        0xac9b557d7ca8625d957263c6, 0xdc6f75fa8339a78b998ae54a, 0x28683293b6494d9f, 0x0,\n        0x5c4f5dca0c973b7f70bfff9, 0x188c2afab11eef5d48ecda3c, 0xc2fed35d36c49f1, 0x0,\n        0x9d7244ea10697ca42e2e066b, 0xfe18a519c7d68770dc48dbf9, 0x149bb528db998529, 0x0,\n        0xffc057151b06c496e6fdd440, 0x5a01bae0c7441f08c7af1cf9, 0x274e0e02529e6d26, 0x0,\n        0x65ceb8977413bc9798681ecb, 0x19ffb287b45234f0c28fd1a7, 0x28dbbd2f9267be76, 0x0,\n        0xcfcdbfdb2056ff1a64bf1d47, 0xf26fe2dae9f693d9b4aab2e6, 0x12d66ad4802d841e, 0x0,\n        0xe6e34ebfa2e18dce86cadbdc, 0x7ce096238b3d4b1b8fba6a55, 0x2e0a660b1549800c, 0x0,\n        0xd2dd03b29d58d045656ecf33, 0xeddac3cf7a123aae2180739b, 0x215bec6e0a03c924, 0x0,\n        0xe5201e51828eb11589d8619f, 0xa6563c760aa3a2c9d15af235, 0x7ed0c9b2e7811fb, 0x0,\n        0xc33ac21c67b06a9994457b4c, 0xa9aa5573bf7a92aab85366eb, 0x1a407281e1d92e91, 0x0,\n        0x5a306649d971b115d71a78b1, 0xa70687a9b5132e26b2cfbb37, 0x2031920af5d6c9db, 0x0,\n        0x58a3cea1103f16402eb74c08, 0xdfefcd91df2f4295ec21e03a, 0x1150bcc09ac40007, 0x0,\n        0x57ed7d356f91abcef751889f, 0x5c668cded3599c9af5a7e5fa, 0x2ccf74197cb9bc13, 0x0,\n        0x529118e291927516dfbcba2d, 0x440af959472c61e99aac7977, 0x218bbc79509b59ce, 0x0,\n        0x226044f7331ccf82af7afb39, 0xc1953da25a89d084dcfaea76, 0x1042fdc36b43dac3, 0x0, 0xb,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x154bc8ce8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x2305d1699a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x144a7edf6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x21c38572fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0x2b70369e16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x522c9d6d7ab792809e469e6ec62b2c8,\n        0x85940927468ff53d864a7a50b48d73f1, 0xdc5dba1d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x119d0dd09466e4726b5f5241f323ca74,\n        0x5306f3f5151665705b7c709acb175a5a, 0x2592a1c37c879b741d878f9f9cdf5a86,\n        0x30bcab0ed857010255d44936a1515607, 0x1158af9fbb42e0b20426465e3e37952d,\n        0x5f3f563838701a14b490b6081dfc8352, 0x1b45bb86552116dd2ba4b180cb69ca38, 0x0,\n        0xf59b76239fad9eb74730cd7, 0xa1143b2f09cd01fbb559c486, 0x2f8d04122e8fbde7, 0x0,\n        0xa4777776f13805422915c296, 0x1c2749af3d7f4b652217ddae, 0xd4e2c28702c3059, 0x0,\n        0x7661ed95c25cdb91, 0x10b644cef3d30c35, 0x100000000000000006f577c0b4a402ddc,\n        0x100000000000000001a7d3ea294939351, 0x38ffcd70be2dbbae82096a26, 0xcfeb56ca9f8a8a2384543b8e,\n        0x73059fa2677d1e5, 0x0, 0xa84366869190b93d9d917bf, 0xc455446eda9f79d73aa0cbad,\n        0x2641bc3008f8cc9e, 0x0, 0x3d2887de3517544e, 0x7509da3e05adfa0a,\n        0x1000000000000000008604e989fdb09b5, 0x100000000000000002c850eaa7c78bdc0,\n        0xb4ec8b46be22584530b7b3e, 0xb6fd065dbd73e3d763c2e67c, 0x2e111c1d191de144, 0x0,\n        0x81464c2ae0122148a3ddad93, 0x44c76e3df069bedffabb2d13, 0x1bf97d9ca1c2f369, 0x0,\n        0x10000000000000000026898e43eca56c7, 0x30387575e4bac6c6, 0x20776c3ca242b7de,\n        0x100000000000000007d486e28cf4b0e10, 0x64b2119b459e63324fbafc05, 0x66502154bd1382ce47b7681e,\n        0x2ddfe6039dcfde7, 0x0, 0x529aa77c8e7a1d4ca0e64359, 0x2e01879e99328b28e513ff1c,\n        0x44ef12a2f42ec77, 0x0, 0x1000000000000000025897c91d7b8d1f1, 0x3fd9c240adbcce3,\n        0x100000000000000009a89d61b8c513677, 0x100000000000000001d92935462ea59df,\n        0x8d414937f9c4a302b137537b, 0xa386777f18abfefe85c31058, 0x257b5a32a23f40a3, 0x0,\n        0x3e95a9ff945e0553c85cfe2c, 0x4c5e5834c653623c13fec9b6, 0x1664b40825e1a905, 0x0,\n        0x100000000000000002fc911da020d2f55, 0x11da5e7b097ee9cd,\n        0x10000000000000000ad5176da721b78b7, 0x100000000000000004102d2a01b7fbf5f,\n        0xa66fcc2f529276b780499985, 0xf69c7da32d819f1f4f193fc1, 0x1805e698d92c3ac0, 0x0,\n        0xb9abf7ad6d28c58e2cc31b94, 0xf074390b2247dfaf60121eda, 0x27b2e899ed29cf1a, 0x0,\n        0x35d8a8c78484d0c2, 0x37b379080cbcb6f7, 0x6b7a53f07ab793f1, 0x449bac4fffe801bc,\n        0x5a1cd56b595531e6a3d814bf, 0x525e7a8c84a1f276259877a8, 0x7d7c34039bc644d, 0x0,\n        0x97125887d88507b5fe4333b9, 0xdf81a585fe7f350ed9d80836, 0x197c0dbf47481ded, 0x0,\n        0x10b1947ddf58a676, 0x103c836271b652be, 0x100000000000000007e3b371d8da612a2,\n        0x10000000000000000afdc716fd42dcebf, 0xca590b79acc3248cf7071af2, 0xf8f64dd38ddb672cfe35764,\n        0xa4a93bb49cda78e, 0x0, 0x7fca5043edf56dfce89121b9, 0x5a1191ede225c26c4e2fdd0e,\n        0x1b28478576081b5e, 0x0, 0x62e2e02294e2c662, 0xb7b29a6b2600fb8d, 0x12dfa3a68a5aa4b8,\n        0x15945e750a0443c5, 0x29281279f0958f532340b1e, 0x9c3f90c5b44db2da51242b88,\n        0x18c51e06011b8dbf, 0x0, 0x1fce97d7fe0ad6091ef99256, 0x37115682a1c2995a8f46348,\n        0x1fe22395832d2e61, 0x0, 0x1ac00f1b74998794, 0x1000000000000000024c1b4e8a2305293,\n        0x59d3cc6f01477796, 0xc9c2a2cd82f7e2d, 0x3bb0f32e0eb9448943980b5c,\n        0xaf7fdc854146e31d92761fa8, 0x247b7d3680ef0e4b, 0x0, 0xb46343f09e9d87fd5b9796cd,\n        0xd0a6f8103729c2dc3c47dbe9, 0x2eaaab3d9d415e13, 0x0, 0x1000000000000000057e1f3bedd0842d4,\n        0x10000000000000000255df8d996acfae5, 0x100000000000000000318c2486aecb245,\n        0x1000000000000000023ae98fa95aa07b8, 0x4b9261005811ccafc4725902, 0x689c7c5528fbcab2ffdd0e45,\n        0xee7f574a2b0c0fe, 0x0, 0x98e15c5c68cffe74a22c43c7, 0x77bc1a28c4ad8e05bfa5a214,\n        0xb4a65415b0eba66, 0x0, 0x1000000000000000059cfa117d9318779,\n        0x100000000000000008ef4027bb5693ee0, 0x3ae8a87244a109a4, 0x558c79eb7e83bb58,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x8f1d04d9dacdeb4b06745aae,\n                limb1: 0x5c68471b1c99a97baed7f423,\n                limb2: 0x1e8ed25080c73efd,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xc479efb2cb1c33352e438dbe,\n                limb1: 0x1f9fcbf3fb537094c9816470,\n                limb2: 0x2e15234a5a95acac,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BN254_12P() {\n    let mut data = array![\n        0xc, 0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0x772ca79c580e121ca148fe75, 0xce2f55e418ca01b3d6d1014b, 0x2884b1dc4e84e30f, 0x0,\n        0x536c985db33c69f7c242e07a, 0xfc531bccffafcf1e59d91fb9, 0x2585e4f8a31664cb, 0x0,\n        0x57fa42444057cf0c1d62ae3c, 0x4f48d341183118d68ea41313, 0x1d2d2799db056ed1, 0x0,\n        0x236ca9312dad3661a37f2d6f, 0x98424c01caad7592315715d1, 0x795b9fd941b23c4, 0x0,\n        0xc7ab5834609a54b8993ffd79, 0xe81cd490528b814ca632aace, 0x2d9ff53d3009e6f7, 0x0,\n        0x163df40cafbf585ca5b2ab44, 0xb4752e4666c88dbbe23783a0, 0x1a801462ac9cb657, 0x0,\n        0xac9b557d7ca8625d957263c6, 0xdc6f75fa8339a78b998ae54a, 0x28683293b6494d9f, 0x0,\n        0x5c4f5dca0c973b7f70bfff9, 0x188c2afab11eef5d48ecda3c, 0xc2fed35d36c49f1, 0x0,\n        0x9d7244ea10697ca42e2e066b, 0xfe18a519c7d68770dc48dbf9, 0x149bb528db998529, 0x0,\n        0xffc057151b06c496e6fdd440, 0x5a01bae0c7441f08c7af1cf9, 0x274e0e02529e6d26, 0x0,\n        0x65ceb8977413bc9798681ecb, 0x19ffb287b45234f0c28fd1a7, 0x28dbbd2f9267be76, 0x0,\n        0xcfcdbfdb2056ff1a64bf1d47, 0xf26fe2dae9f693d9b4aab2e6, 0x12d66ad4802d841e, 0x0,\n        0xe6e34ebfa2e18dce86cadbdc, 0x7ce096238b3d4b1b8fba6a55, 0x2e0a660b1549800c, 0x0,\n        0xd2dd03b29d58d045656ecf33, 0xeddac3cf7a123aae2180739b, 0x215bec6e0a03c924, 0x0,\n        0xe5201e51828eb11589d8619f, 0xa6563c760aa3a2c9d15af235, 0x7ed0c9b2e7811fb, 0x0,\n        0xc33ac21c67b06a9994457b4c, 0xa9aa5573bf7a92aab85366eb, 0x1a407281e1d92e91, 0x0,\n        0x5a306649d971b115d71a78b1, 0xa70687a9b5132e26b2cfbb37, 0x2031920af5d6c9db, 0x0,\n        0x58a3cea1103f16402eb74c08, 0xdfefcd91df2f4295ec21e03a, 0x1150bcc09ac40007, 0x0,\n        0x57ed7d356f91abcef751889f, 0x5c668cded3599c9af5a7e5fa, 0x2ccf74197cb9bc13, 0x0,\n        0x529118e291927516dfbcba2d, 0x440af959472c61e99aac7977, 0x218bbc79509b59ce, 0x0,\n        0x226044f7331ccf82af7afb39, 0xc1953da25a89d084dcfaea76, 0x1042fdc36b43dac3, 0x0,\n        0xf1581f4d2c98dddd1045823a, 0x4c70cf5d1fe8d72e2b0eda8, 0x2dd6cf0e5b99415d, 0x0,\n        0xc3ebcba51d8891914acc5129, 0xa68f2b05936baf6578514dbf, 0xc4404c6b9b7453d, 0x0, 0xc,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x2305d1699a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x144a7edf6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x21c38572fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0x2b70369e16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x522c9d6d7ab792809e469e6ec62b2c8,\n        0x85940927468ff53d864a7a50b48d73f1, 0xdc5dba1d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x119d0dd09466e4726b5f5241f323ca74,\n        0x5306f3f5151665705b7c709acb175a5a, 0x2592a1c37c879b741d878f9f9cdf5a86,\n        0x30bcab0ed857010255d44936a1515607, 0x1158af9fbb42e0b20426465e3e37952d,\n        0x5f3f563838701a14b490b6081dfc8352, 0x1b45bb86552116dd2ba4b180cb69ca38,\n        0xc87a746319c16a0d0febd845d0dfae43, 0xe0062d1b29a8b06daf66c5f2577bffa,\n        0xa25b59fd92e8e269d12ecbc40b9475b1, 0x2689f61688c132adefbfc19ee8f6cf32, 0x0,\n        0xa35f081ddc3964fef11b87ba, 0x7926593494405c5ed2a7c203, 0xb1fe4cb2b23209a, 0x0,\n        0x1c0a838ac08fb4060688ee71, 0xfce2bda26b33f861d57cd974, 0x1ac64db61ee9a873, 0x0,\n        0x3d2887de3517544e, 0x7509da3e05adfa0a, 0x1000000000000000008604e989fdb09b5,\n        0x100000000000000002c850eaa7c78bdc0, 0xa74372df079d8431e9b18880, 0x6cd132648c2b9586f34ba4e5,\n        0x17c5e79c26faf814, 0x0, 0x4e00fca0765a5dc39716592c, 0x62608fda1d9eb8ac692327ab,\n        0x2efd2837ff622761, 0x0, 0x10000000000000000026898e43eca56c7, 0x30387575e4bac6c6,\n        0x20776c3ca242b7de, 0x100000000000000007d486e28cf4b0e10, 0x7948eabf056257f90152cce1,\n        0xfbefb6402b0f561fc2895f89, 0x7f3f0f1b174e884, 0x0, 0x3c76805faa60392fe4b110d3,\n        0xba4b2232318a58138b8716b0, 0x31586d69a9e9d5f, 0x0, 0x1000000000000000025897c91d7b8d1f1,\n        0x3fd9c240adbcce3, 0x100000000000000009a89d61b8c513677, 0x100000000000000001d92935462ea59df,\n        0x68e1b7bda4cc53d96d5d21fc, 0x224cbbd937d29f5c8f33af33, 0x1eecbf09aea2ba62, 0x0,\n        0x9ba28499df4dc86dba4834c9, 0x593878cb3634fbf4ad666d2f, 0x8d61bffa7ed1cf4, 0x0,\n        0x100000000000000002fc911da020d2f55, 0x11da5e7b097ee9cd,\n        0x10000000000000000ad5176da721b78b7, 0x100000000000000004102d2a01b7fbf5f,\n        0x6404129b95705ec3758c3c32, 0xfee2f803c30b9c60ec9058c9, 0x1c4acdc80de3ff15, 0x0,\n        0xeef9c5c2c7dd04d9ef28627, 0x85f67ca8fb3693eb3d49e733, 0x23179b3241d8554e, 0x0,\n        0x35d8a8c78484d0c2, 0x37b379080cbcb6f7, 0x6b7a53f07ab793f1, 0x449bac4fffe801bc,\n        0x127b307b02001ee53147974e, 0x19d13f1496e714d0e81eb452, 0x2d6284b456ce4016, 0x0,\n        0xddba124fb48f7a6a17ffd3e9, 0xf09236f948f55c12f051316d, 0x1d89cad2e98d792b, 0x0,\n        0x10b1947ddf58a676, 0x103c836271b652be, 0x100000000000000007e3b371d8da612a2,\n        0x10000000000000000afdc716fd42dcebf, 0x9933f565ff29445c4095b6bc, 0x657f8c9411abc5bbcc136d8a,\n        0x73e7ef94ba9d52e, 0x0, 0x6c40ee001e861af8b54083f9, 0xcd5e9710c4a04d282ce7349a,\n        0x690a0b30371b326, 0x0, 0x62e2e02294e2c662, 0xb7b29a6b2600fb8d, 0x12dfa3a68a5aa4b8,\n        0x15945e750a0443c5, 0xe73c8b0ec70203c2e8989117, 0x7ddfadad5f08ce1aa07c411c,\n        0x13613f779a31d6ff, 0x0, 0x638429e6306a39c9e31a3603, 0x327c5d8bef475c0133cb5d8b,\n        0x27096fced1ae8ce9, 0x0, 0x1ac00f1b74998794, 0x1000000000000000024c1b4e8a2305293,\n        0x59d3cc6f01477796, 0xc9c2a2cd82f7e2d, 0xdcaf34a4eef803781d3022, 0xbc09ae870f85a6cf01c65e44,\n        0x385ae0f48077e7e, 0x0, 0x61a1baa7bab47c085609a548, 0x914206f8e0e04938aee16726,\n        0x389734c913660f7, 0x0, 0x1000000000000000057e1f3bedd0842d4,\n        0x10000000000000000255df8d996acfae5, 0x100000000000000000318c2486aecb245,\n        0x1000000000000000023ae98fa95aa07b8, 0x88adbf9219029597e553bb04, 0xeb6747eb6284e8b022461ec2,\n        0x14a572f4f58c464f, 0x0, 0xeb6bac7a6c66241c45996655, 0xbd605734ae6e9a1ddcf2eb6e,\n        0x7fbe6469eaad0bb, 0x0, 0x1000000000000000059cfa117d9318779,\n        0x100000000000000008ef4027bb5693ee0, 0x3ae8a87244a109a4, 0x558c79eb7e83bb58,\n        0xd37309fe22d9e35f307c3a6b, 0xe5de80a909551c749fca4879, 0x21fd1084d81d15e7, 0x0,\n        0x8a05d9d6713308396ada192b, 0x5126361876e6ce50233c747c, 0x21db15f93ac460fe, 0x0,\n        0x9af91b3e36abc612, 0x86643c813ecda430, 0x100000000000000000e467a16915fd7e5,\n        0x100000000000000004a115b9161854fec, 0xe936353409de55cec6156fe6, 0xcb2d34e3b109e4ab4f9bfac3,\n        0x8435d0668aada26, 0x0, 0x6d5907f5ae10fced2d3d609d, 0x4720c6ca15b721ac824fd1dc,\n        0x28fd8e028bbd4327, 0x0, 0x100000000000000000615f3f7b8d448b9,\n        0x100000000000000007f9651eee6b31ff4, 0x1000000000000000016a63b2f0da9904c,\n        0x1000000000000000047f4ef94b6a2cc82,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x744865055917ca125348c4f8,\n                limb1: 0x5c545244519dd218c72f1665,\n                limb2: 0xcc6f1868dc806a6,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xcbb128d3e724151be03bef12,\n                limb1: 0x3d9dca95a86b6ea20b40f368,\n                limb2: 0x1d2cfc3fd3c3ff7f,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BLS12_381_1P() {\n    let mut data = array![\n        0x1, 0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x3d77d61326ef5a9a5a681757, 0xd3070afd4f0e121de7fcee60,\n        0xdf9ef4088763fe611fb85858, 0x11a612bdd0bc09562856a70, 0x1,\n        0xb4862b21fb97d43588561712e8e5216a, 0x12cfa194e6f4590b9a164106cf6a659e, 0x1,\n        0xb603ffc901ec7f3e42216ae4, 0x269adaf11286bf338b9dacb1, 0xab33b097e05378c0867894f,\n        0xbfd8ef26d4610b8e77f5c28, 0x9afe78c2bb0f305eccbffb90, 0xc8b06f9aaf49eda1f9fd6cfd,\n        0xc422cd476b9611aef3a1ee3, 0x1201e1e9a2b0867eb9da1725, 0x1000000000000000062a39ac9655a0af5,\n        0x10000000000000000b59da527feb9e759, 0x885278dc00a1125a, 0x2fe0754b9fadfe7b,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xb603ffc901ec7f3e42216ae4,\n                limb1: 0x269adaf11286bf338b9dacb1,\n                limb2: 0xab33b097e05378c0867894f,\n                limb3: 0xbfd8ef26d4610b8e77f5c28,\n            },\n            y: u384 {\n                limb0: 0x9afe78c2bb0f305eccbffb90,\n                limb1: 0xc8b06f9aaf49eda1f9fd6cfd,\n                limb2: 0xc422cd476b9611aef3a1ee3,\n                limb3: 0x1201e1e9a2b0867eb9da1725,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BLS12_381_2P() {\n    let mut data = array![\n        0x2, 0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x3d77d61326ef5a9a5a681757, 0xd3070afd4f0e121de7fcee60,\n        0xdf9ef4088763fe611fb85858, 0x11a612bdd0bc09562856a70, 0xde4f62a6588c9401ffefbd3,\n        0x9bb5f797ac6d3395b71420b5, 0xdc39e973aaf31de52219df08, 0x105dcc4dce3960447d21d3c1,\n        0xaefd0d854043fd325dd3c34f, 0x9b63c98d9a7845c52e1e2b0f, 0x9db0be660d847ccc58358f3f,\n        0x17cb6c41f0c4e1a7394ab62a, 0x2, 0x12e0c8b2bad640fb19488dec4f65d4d9,\n        0x2a43e70faf19922ad9b8a714e61a441c, 0x5a92118719c78df48f4ff31e78de5857,\n        0x51f964df9c6316b950f244556f25e2a2, 0x1, 0x767bdb83da4925db077ac23d,\n        0x51fcd455bd59b97a1e4a2d02, 0xf9650cba7ed29c8f01577a4d, 0x13e6deb52a57b03867f2c663,\n        0x2170a02826a65df5fff9fc69, 0xcdef32f5872257c0f74a4983, 0x275718e62abbba48d224fc01,\n        0x16e4935008c1ecbfc238a44c, 0x97ac96128760678, 0x1b8269c5da3a7aa, 0x946f8bb609f9ba7d,\n        0x4e77077ba28bdfd6, 0xe6c4136fba2947157839fc3f, 0x58df45b89ea1d6fd003f377d,\n        0x428ff9cfd30586deea516488, 0xc0c17be01b5ec83544d88ff, 0xfdf2fbfb66f355ed990a534f,\n        0x98f6b2b220c2c0e179e4d145, 0xe2766e3b994a5f31518b1b4, 0xb1861e2a35c8eceb1eb84bf,\n        0x3827704126429022, 0x59c3b34a3b390fcf, 0x1000000000000000076a605fca076460a,\n        0x2f4183d416809c9a,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x32321a942ef961780ca91c06,\n                limb1: 0x57e5605fbba104f908e63665,\n                limb2: 0x843c0bbd70b5a837b690bd95,\n                limb3: 0xbe7f58485672327a5c447c1,\n            },\n            y: u384 {\n                limb0: 0x2150b2afd97c7793d20d0ecc,\n                limb1: 0x4f6a0ae7eaf68e727f2fcb5d,\n                limb2: 0x96407ddecb1fe770faf07c8c,\n                limb3: 0x4c4183b2e457821188d59e7,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BLS12_381_3P() {\n    let mut data = array![\n        0x3, 0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x3d77d61326ef5a9a5a681757, 0xd3070afd4f0e121de7fcee60,\n        0xdf9ef4088763fe611fb85858, 0x11a612bdd0bc09562856a70, 0xde4f62a6588c9401ffefbd3,\n        0x9bb5f797ac6d3395b71420b5, 0xdc39e973aaf31de52219df08, 0x105dcc4dce3960447d21d3c1,\n        0xaefd0d854043fd325dd3c34f, 0x9b63c98d9a7845c52e1e2b0f, 0x9db0be660d847ccc58358f3f,\n        0x17cb6c41f0c4e1a7394ab62a, 0xcf86158ab69213388e721bb7, 0x5f7812269d790797cad9aa15,\n        0xb1c3622a0177001d9ed8e25f, 0x115cf429f459884785c6ba46, 0x1e81341e2f3f988ff115dda3,\n        0xad22946489db6ee4954fa5e1, 0x83bed94412e19d92b73cc763, 0x2074c7bceff87d0d41edba1, 0x3,\n        0x5a92118719c78df48f4ff31e78de5857, 0x51f964df9c6316b950f244556f25e2a2,\n        0x8d723104f77383c13458a748e9bb17bc, 0x42bbb74ddd84f39e71545a137a1d5006,\n        0xeb2083e6ce164dba0ff18e0242af9fc3, 0xbf0551e03983ca8ea7e9d498c778ea6, 0x1,\n        0xa212d9c99e9c04c4d5c9413e, 0x396a875482462ca6c1340431, 0xc2162538b674feeff3abfd69,\n        0x753e02471aea6c84aaa5ffc, 0x929a8f9dbb886a14600841b2, 0xd2549b8930caba7ed2b7f6f0,\n        0x35911c87fe8cfc373e803e14, 0x180e16c3ae7f7949857d4ca0, 0x3827704126429022,\n        0x59c3b34a3b390fcf, 0x1000000000000000076a605fca076460a, 0x2f4183d416809c9a,\n        0x201564ee2f51efc0dd066bf4, 0x631f5532a8b44cccd0c4ae3a, 0x56a5d8f1e24804c51d3baba8,\n        0x155dcc0adb758a4caede5e39, 0x4e0b78c88baeacb640f333c4, 0x2a16352f6da4000344ea35b3,\n        0xe58d1f7ed72ebc3a1aced4bb, 0x7b09c3c38b9665bb6dcd1a3, 0x89ec0bb47cfdf6b1,\n        0xb71533d7b1764557, 0x340a863c788b8bd1, 0x100000000000000001b03838bf180c6bb,\n        0x8070e05e9145d1c520b0bc9f, 0xd2505d00fcfa7f814e629e1f, 0x789f47493e01360b240d31be,\n        0xd4d252b4e71c49b728891b0, 0x32fd0164a7284bf6631f2131, 0xbf29e9b9d14edb8796f7c003,\n        0x73032a27b08ccde5970c792a, 0x14128a5b1473f5285668a863, 0x29d77abed65ff201,\n        0x4ea390aeeae13c8a, 0x426754eb9138bd09, 0x100000000000000007ebb92a3d2545c26,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x21b85c07d97d8ad7ed64cf5c,\n                limb1: 0xc68ab576217c87f6afe7e8f6,\n                limb2: 0x8aecb918175dcc693f68b02c,\n                limb3: 0x16bdc982d01b9f8d1782060e,\n            },\n            y: u384 {\n                limb0: 0x11cf0b8dceb54a416ec13f47,\n                limb1: 0x81a05b3acc5b76a765127289,\n                limb2: 0xcdbd38ba08efd726fae10661,\n                limb3: 0x9747640d51b315635b0059a,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BLS12_381_4P() {\n    let mut data = array![\n        0x4, 0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x3d77d61326ef5a9a5a681757, 0xd3070afd4f0e121de7fcee60,\n        0xdf9ef4088763fe611fb85858, 0x11a612bdd0bc09562856a70, 0xde4f62a6588c9401ffefbd3,\n        0x9bb5f797ac6d3395b71420b5, 0xdc39e973aaf31de52219df08, 0x105dcc4dce3960447d21d3c1,\n        0xaefd0d854043fd325dd3c34f, 0x9b63c98d9a7845c52e1e2b0f, 0x9db0be660d847ccc58358f3f,\n        0x17cb6c41f0c4e1a7394ab62a, 0xcf86158ab69213388e721bb7, 0x5f7812269d790797cad9aa15,\n        0xb1c3622a0177001d9ed8e25f, 0x115cf429f459884785c6ba46, 0x1e81341e2f3f988ff115dda3,\n        0xad22946489db6ee4954fa5e1, 0x83bed94412e19d92b73cc763, 0x2074c7bceff87d0d41edba1,\n        0xe2955c55da59eba4b7b57d3d, 0x1e6629b0431bce67cf28c22, 0x1c35b7efd5b67f87221b8bfc,\n        0x3e53df9e3488a9e42acd87e, 0x2e089afa726154d40dd12102, 0x5391613ecf49db2bcf1cad86,\n        0x84a2abb2de6b3a6e09026a50, 0x19557a3a3c1d62a205d5dc87, 0x4,\n        0x8d723104f77383c13458a748e9bb17bc, 0x42bbb74ddd84f39e71545a137a1d5006,\n        0xeb2083e6ce164dba0ff18e0242af9fc3, 0xbf0551e03983ca8ea7e9d498c778ea6,\n        0xb5d32b1666194cb1d71037d1b83e90ec, 0x5008b5f2ab0c1681c8f8e3d0d3290a4c,\n        0xd3fbf47a7e5b1e7f9ca5499d004ae545, 0x5d79c4bd3e70f16a55485822de1b372a, 0x1,\n        0x44bb6f75a004bca814756b12, 0x1818b158d2190e6e0fc9e550, 0x2c30743bfb89fd6efbecc08b,\n        0x37837c70d528dd05cbf07e7, 0x492cb4f7c261d2d0b24d8b02, 0x230240dd9634dc222a23cb1a,\n        0xe3eec79d41d215665e8c84cb, 0xeff88e6c2c0702d1d489a73, 0x89ec0bb47cfdf6b1,\n        0xb71533d7b1764557, 0x340a863c788b8bd1, 0x100000000000000001b03838bf180c6bb,\n        0xf88a71d0107733babbd62a8a, 0x5c8822f79ed71c8bbfa7ff17, 0x7a8298e09fc3cb760af959c9,\n        0x71970cd5e563018d29192bc, 0x6d859bf8574d99e4aa0d6235, 0x743b1ed749ce3385e004fd1e,\n        0x40b348aadf32289fd4ba39a2, 0x117e2219a46e398da3a4bcfb, 0x29d77abed65ff201,\n        0x4ea390aeeae13c8a, 0x426754eb9138bd09, 0x100000000000000007ebb92a3d2545c26,\n        0x62a1dd00d0d70c14a6483357, 0xd3311030294d0ecbd126a83c, 0x9ab588fa5774077b42bfaf84,\n        0x2ca8d2c572fb8a41c46768, 0x9078c212d37a3119918e97e2, 0x7bfd90eaf25c921f82205790,\n        0x87a6d075aaafcb12c6615ced, 0x14c4cdf3aa2c27b1ab23e540, 0x3a52f2488abaf3cf,\n        0x100000000000000002db717c471a1fc21, 0x10000000000000000644c4a2d385dbb8f,\n        0x10000000000000000a04a3389734226f8, 0xae129d9a602a42cc514ab5bd, 0x6b8ff0a7bab2c6cf01ab2b0d,\n        0xe54a1c91c8cebd80422d7472, 0x18f20ed943760167480b399c, 0x3c855ffac29166b79418290c,\n        0x16673746c28add51dbb908b6, 0x6bba7b68853a2592c3ab118d, 0x56b1a0d430dbe3db167379b,\n        0x100000000000000004bed5581e0e7a253, 0x100000000000000009c34387abab6c0fe,\n        0xb72bffe782e92797, 0x3a8e5d970236b4f1,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x7406fee5d57362d0bd20a5fe,\n                limb1: 0x9c148946ef3f3c63933238ab,\n                limb2: 0x29449d34c8a2d4f2985f3c36,\n                limb3: 0xa598551ba8198a566f2d4be,\n            },\n            y: u384 {\n                limb0: 0x79e483b729f05957e7c73f33,\n                limb1: 0x3a0046ded0b81194df4ad0d5,\n                limb2: 0x6bb49380867caf051586303a,\n                limb3: 0xc750343cc7a561d93f3d0c0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BLS12_381_10P() {\n    let mut data = array![\n        0xa, 0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x3d77d61326ef5a9a5a681757, 0xd3070afd4f0e121de7fcee60,\n        0xdf9ef4088763fe611fb85858, 0x11a612bdd0bc09562856a70, 0xde4f62a6588c9401ffefbd3,\n        0x9bb5f797ac6d3395b71420b5, 0xdc39e973aaf31de52219df08, 0x105dcc4dce3960447d21d3c1,\n        0xaefd0d854043fd325dd3c34f, 0x9b63c98d9a7845c52e1e2b0f, 0x9db0be660d847ccc58358f3f,\n        0x17cb6c41f0c4e1a7394ab62a, 0xcf86158ab69213388e721bb7, 0x5f7812269d790797cad9aa15,\n        0xb1c3622a0177001d9ed8e25f, 0x115cf429f459884785c6ba46, 0x1e81341e2f3f988ff115dda3,\n        0xad22946489db6ee4954fa5e1, 0x83bed94412e19d92b73cc763, 0x2074c7bceff87d0d41edba1,\n        0xe2955c55da59eba4b7b57d3d, 0x1e6629b0431bce67cf28c22, 0x1c35b7efd5b67f87221b8bfc,\n        0x3e53df9e3488a9e42acd87e, 0x2e089afa726154d40dd12102, 0x5391613ecf49db2bcf1cad86,\n        0x84a2abb2de6b3a6e09026a50, 0x19557a3a3c1d62a205d5dc87, 0x490bf40774926e8b279947c,\n        0xeabab6aef9e9d2a4f64f4e7d, 0x3e309fe1b1c8247abab20d7e, 0x79c527862917f69ac58fcc4,\n        0xacb18f2da2b425c2ff50dafd, 0x7623850d87e279a8a30f31ff, 0x777564c7291d95fa80203ade,\n        0x1764ce0e7fb626109b63789b, 0x42f2f3f4f6b9d2c2b73a361f, 0xcd78c070c184c38b1e5716aa,\n        0x72cbc24cd90da89e0e3cefe4, 0x19485e1c46d0dce75f8b192b, 0xb56b3539074b3c47b3f504d9,\n        0x2c229530bddedd8851b03dcc, 0xc93eef8474c4e18d6378e7f0, 0x173d36f17a3c9ae77a2acc25,\n        0x5fbf29cf20556a11621a6639, 0xdfda5b7dbf0b226822094787, 0x4a3b059e521b4b0445df96d5,\n        0x333988c2c09f5af061cdfb, 0x13d3570be6d27d1d588b22fc, 0x20c763e58d4df3e4990cdae9,\n        0x2c3301367f400c31f4bded26, 0x16a6c25d133fba74b4c55972, 0xcb24d12438557639f52df5fd,\n        0x4a6a46feebe8a88a8062bd0e, 0x65f04211af4b168b1e25787d, 0x17935d6f4fa575744ca46f75,\n        0x644f324be8a5c152625a5b8a, 0x501e52e8c5707d7a3a77ee18, 0x9636c463c14c5b85c2e6d3b1,\n        0x1939b6f297f7b5b7fd0ac458, 0xde1d8e2670532ec5bba60ade, 0x1154f5064f7dd38656f7f82b,\n        0xc9bec68372b7d07dcf66270c, 0x315ced00b3153219bbd430, 0xc48b3bc110e208d827b13f4d,\n        0x87d82592699bca3dbf847c2b, 0xff04f0f2c8be12365aa73443, 0x1739c8c450ac994a5326c809,\n        0x8904b74d5d114b5416df0ed6, 0x479ee13e49cde067742c2655, 0x45b9359bfa338dd432ca9ff1,\n        0x12bf6460e7a42942be6c16a0, 0x3a8b37aacb2f620bc41c6109, 0x91f68edf90b5947273b0aadf,\n        0x265d48695a73800b7404124c, 0x141e3d99b3ab683bdb0ce70f, 0xa,\n        0xe005b86051ef1922fe43c49e149818d1, 0x3ea0f301eece328bff7b118e820865d6,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x2a97919d8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x460ba2d39a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x2894fdbe6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x43870ae2fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0x56e06d3d16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0xa4593acd7ab792809e469e6ec62b2c8,\n        0xd450fe4aec4f217bb306d1a8e5eeac76, 0x6b3f2afe642bfa42aef9c00b8a64c1b9,\n        0x85940927468ff53d864a7a50b48d73f1, 0x1b8bb742d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x233a1ba09466e4726b5f5241f323ca74, 0x1,\n        0x4fec1bc3c60e1e8698dead7e, 0x5d71a7fdab6311661050245a, 0xe05d09f0bc4a8f934ca0be3,\n        0x3e410c8ef8929e597fc5e16, 0x2cb369f5527d80a3f85dfe16, 0x23136c25c83e8f7bbec1cf73,\n        0xff512e4a07edaf5b49d3d728, 0x12d5dbede4328cb09da72b84, 0x100000000000000004292942fff5c5c73,\n        0x100000000000000006f8e81274b1b80e7, 0x3b3d1e96d895314d,\n        0x1000000000000000084bf5385aab534ac, 0x60a1a3ab0c7177eab76fff39, 0xc0be22d12b053ffe9ca14f59,\n        0x181af3ad4d7e2a3d70d0d390, 0xa7fcec07bd4cbf86517c4ab, 0x225dafa45afbf8fdc096ca46,\n        0x83fe86ca3674bc4f0fa1be03, 0x1419a6d50b39b38488129411, 0x673aa0dca89d43027ecf344,\n        0x10000000000000000cea55d261de27134, 0x4945ad0e7a3ff67, 0x2fc459c3edadc3a2,\n        0x10000000000000000061e3b8d4a2b7b49, 0x17f488f0ade4733d6ef16e5, 0x2345447ae416edecd39537f0,\n        0xb6b696b8639e7cf9895c5cc4, 0x9e0e0023c554f7dcea9988f, 0x9d39eb85ff093ed952b7b83e,\n        0xe97ebfec0868fb25fc01f0d2, 0x10ad24a237318d2b9652aa09, 0x13254cc65058dd9358b96239,\n        0xab1e43002be79daa, 0x4647693a000da8bb, 0x100000000000000007d866035ad43d2cd,\n        0x100000000000000008ac469986dc04381, 0x1c0101fbd27c0a2fce7dea00, 0xa1754f662e645363a3d7555e,\n        0xf500d7bbb858b228f7566d60, 0x123c9acdbe8c6cd24ca87a2d, 0x49abf7cca1720df09b8013e8,\n        0x58d4d7df624dc9492bdd5f14, 0xd885e40ee88b16151fc21f83, 0x18bc3ac505215228c26ed360,\n        0x100000000000000008f832425d3465a7d, 0x100000000000000007a1648de1b75e170,\n        0x10000000000000000782f24b2b6f99caa, 0x10000000000000000a46207414514e0b7,\n        0xb680e2ee3456fa57129b0045, 0xfc71104d4fa38e9455aa5cd8, 0x9d5f6b4a7451e6cd2c4f7c7e,\n        0xfefc054f2225661c3586c55, 0xbabd33086acd589bbb7df2d8, 0xea6d9ef8b309c10adde6756d,\n        0x717bd330e5157289ed69b9ba, 0xb919c30025518a30b26a33b, 0x10000000000000000ae0ed118d80201db,\n        0x100000000000000007dad72d6582f2e8a, 0x3e9b7c2f776f9ad1, 0x33c103bec8d8dd99,\n        0xa05e97f79f1da1a74d36f934, 0x82cf8025c3bdc887ecdaff73, 0x24a11bec2b7777732ea49307,\n        0x156f141bcbaef8188730e3d3, 0x5630c9208c0eb9c6338de7e, 0x1b5aaef757b58eb36a731689,\n        0x3fa1031d312ad2881206f852, 0x12b8899d4af7a8c34e2a9d46, 0x10000000000000000022bf071f1160083,\n        0x1000000000000000057d827f50ce811a1, 0x21e30fccd874a3e1,\n        0x1000000000000000081bff70857d935ca, 0x7053f48d9623a0772224604c, 0xb11da71ba9823dc5c04dd4dd,\n        0x184deafecb58abd1e56400b1, 0x157346717db5b34fd548cd32, 0xd9cadf87641980d152d6537d,\n        0xee861d7d0a13c67b7217634, 0x7826079f0eee56e4e5c062fc, 0x191da207fdd5403838e0728e,\n        0x10000000000000000ed6a42a626d0b5c2, 0x100000000000000008251f67200c0fd29,\n        0x3753a6d93f053e65, 0x39f069691aa27848, 0xc378beb21e5b84edd744923f,\n        0x9b228eaa8c0baec7dadb455a, 0x186026cdb53d6b03ac71faf9, 0x30663d24fb4b20705ac56ce,\n        0x8b26b689e5b52df6b3b59981, 0x49a372daaf7ae6845981a370, 0x191c1c0b1921fa467089cad9,\n        0x11bd657f852a9cc7b38ac45, 0xabf8f0133c1f072e, 0x161489d2a4ae8501,\n        0x10000000000000000a422466a58575055, 0x100000000000000010d01a10c0ddec2b7,\n        0xc17c00c80be4888b417fcab7, 0x237837a17d7f044145e07dd0, 0xdd4c4c3ee185dede22941eee,\n        0x10bcc285e222e3edf5a3bb26, 0x3e1c8591502f1fa558f9f37f, 0xd279a8b40c7d82a067c1a9e0,\n        0x8ebeb1d2a390ea6cc8282d68, 0x1859d1c72735f018ea45dea3, 0x1000000000000000005f68a6ba1476c4c,\n        0x1badaadb9ef013b5, 0x100000000000000009d7e4713e105078d,\n        0x10000000000000000704d4f90616d782f, 0xd7734cfb87bdee6ddbecba22, 0xb5be04f83be44ace5a664a82,\n        0xa924b5316afad687fc174c75, 0x136a13276f643b22873d7490, 0xfa56e794ab2e49db1a65d154,\n        0xa8c32e8861e673612ae9f3a2, 0xd12e4badeb492211212793, 0x5fe3e9844a34155419eb432,\n        0x100000000000000000d9e2865dd56177d, 0x1000000000000000027d8ecbd5198c228,\n        0x1000000000000000022c5f7e952ac9b2b, 0x10000000000000000a2e9b304305db746,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x85cd6b5af7b7cca272f94a3,\n                limb1: 0x55be389217b4b81baee9530f,\n                limb2: 0x1b5a70fff8b31b3cfc4b68de,\n                limb3: 0x101c3dcc7f2a1be1afe50e39,\n            },\n            y: u384 {\n                limb0: 0xdc944be6d0d78b23304e3193,\n                limb1: 0xe1cdd664f4036ec4bd90db8,\n                limb2: 0xf9e55c43073f3a6163464638,\n                limb3: 0x14396fc17f6c6bc8f76ea501,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BLS12_381_11P() {\n    let mut data = array![\n        0xb, 0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x3d77d61326ef5a9a5a681757, 0xd3070afd4f0e121de7fcee60,\n        0xdf9ef4088763fe611fb85858, 0x11a612bdd0bc09562856a70, 0xde4f62a6588c9401ffefbd3,\n        0x9bb5f797ac6d3395b71420b5, 0xdc39e973aaf31de52219df08, 0x105dcc4dce3960447d21d3c1,\n        0xaefd0d854043fd325dd3c34f, 0x9b63c98d9a7845c52e1e2b0f, 0x9db0be660d847ccc58358f3f,\n        0x17cb6c41f0c4e1a7394ab62a, 0xcf86158ab69213388e721bb7, 0x5f7812269d790797cad9aa15,\n        0xb1c3622a0177001d9ed8e25f, 0x115cf429f459884785c6ba46, 0x1e81341e2f3f988ff115dda3,\n        0xad22946489db6ee4954fa5e1, 0x83bed94412e19d92b73cc763, 0x2074c7bceff87d0d41edba1,\n        0xe2955c55da59eba4b7b57d3d, 0x1e6629b0431bce67cf28c22, 0x1c35b7efd5b67f87221b8bfc,\n        0x3e53df9e3488a9e42acd87e, 0x2e089afa726154d40dd12102, 0x5391613ecf49db2bcf1cad86,\n        0x84a2abb2de6b3a6e09026a50, 0x19557a3a3c1d62a205d5dc87, 0x490bf40774926e8b279947c,\n        0xeabab6aef9e9d2a4f64f4e7d, 0x3e309fe1b1c8247abab20d7e, 0x79c527862917f69ac58fcc4,\n        0xacb18f2da2b425c2ff50dafd, 0x7623850d87e279a8a30f31ff, 0x777564c7291d95fa80203ade,\n        0x1764ce0e7fb626109b63789b, 0x42f2f3f4f6b9d2c2b73a361f, 0xcd78c070c184c38b1e5716aa,\n        0x72cbc24cd90da89e0e3cefe4, 0x19485e1c46d0dce75f8b192b, 0xb56b3539074b3c47b3f504d9,\n        0x2c229530bddedd8851b03dcc, 0xc93eef8474c4e18d6378e7f0, 0x173d36f17a3c9ae77a2acc25,\n        0x5fbf29cf20556a11621a6639, 0xdfda5b7dbf0b226822094787, 0x4a3b059e521b4b0445df96d5,\n        0x333988c2c09f5af061cdfb, 0x13d3570be6d27d1d588b22fc, 0x20c763e58d4df3e4990cdae9,\n        0x2c3301367f400c31f4bded26, 0x16a6c25d133fba74b4c55972, 0xcb24d12438557639f52df5fd,\n        0x4a6a46feebe8a88a8062bd0e, 0x65f04211af4b168b1e25787d, 0x17935d6f4fa575744ca46f75,\n        0x644f324be8a5c152625a5b8a, 0x501e52e8c5707d7a3a77ee18, 0x9636c463c14c5b85c2e6d3b1,\n        0x1939b6f297f7b5b7fd0ac458, 0xde1d8e2670532ec5bba60ade, 0x1154f5064f7dd38656f7f82b,\n        0xc9bec68372b7d07dcf66270c, 0x315ced00b3153219bbd430, 0xc48b3bc110e208d827b13f4d,\n        0x87d82592699bca3dbf847c2b, 0xff04f0f2c8be12365aa73443, 0x1739c8c450ac994a5326c809,\n        0x8904b74d5d114b5416df0ed6, 0x479ee13e49cde067742c2655, 0x45b9359bfa338dd432ca9ff1,\n        0x12bf6460e7a42942be6c16a0, 0x3a8b37aacb2f620bc41c6109, 0x91f68edf90b5947273b0aadf,\n        0x265d48695a73800b7404124c, 0x141e3d99b3ab683bdb0ce70f, 0x6d6db022a8549ee86374b69a,\n        0x3e98f7258170733507d8709b, 0x10b4337a56d4cd17ab2fe1d5, 0x11366a6fecb124757076f4b6,\n        0x77b25b600d3baa1a2f54f826, 0x924c3c1a699e9b27b3612246, 0x6a253cae0097b1955d4f0cfd,\n        0xd2bd6591140d2faabafefac, 0xb, 0x4a84eb038d1fd9b74d2b9deb1beb3711,\n        0x2a97919d8c25166a1ff39849b4e1357d, 0x3405095c8a5006c1ec188efbd080e66e,\n        0x460ba2d39a6a5f92cca74147f6be1f72, 0x1775336d71eacd0549a3e80e966e1277,\n        0x2894fdbe6288e1a5cc45782198a6416d, 0x2f1205544a5308cc3dfabc08935ddd72,\n        0x43870ae2fcd81b5d24bace4307bf326, 0x42930b33a81ad477fb3675b89cdeb3e6,\n        0x56e06d3d16febaa011af923d79fdef7c, 0x2648ee38e07405eb215663abc1f254b8,\n        0xa4593acd7ab792809e469e6ec62b2c8, 0xd450fe4aec4f217bb306d1a8e5eeac76,\n        0x6b3f2afe642bfa42aef9c00b8a64c1b9, 0x85940927468ff53d864a7a50b48d73f1,\n        0x1b8bb742d977e9933c49d76fcfc6e625, 0xd344749096fd35d0adf20806e5214606,\n        0x233a1ba09466e4726b5f5241f323ca74, 0x5306f3f5151665705b7c709acb175a5a,\n        0x4b2543867c879b741d878f9f9cdf5a86, 0x30bcab0ed857010255d44936a1515607,\n        0x22b15f3fbb42e0b20426465e3e37952d, 0x1, 0x19eea9b02b0269a828e87bbc,\n        0x67bd46455c26c6ca390ae0ba, 0xa9dc83672893066741fa95e1, 0x14a2ab6a3bc68452c5582829,\n        0x2a53345d1b34e4641cc38c3d, 0xc82502e6ee206ff835917eb7, 0xb6c87f3b28288a29296a7059,\n        0x1361292ebd69db3c0b2f9180, 0x10000000000000000cea55d261de27134, 0x4945ad0e7a3ff67,\n        0x2fc459c3edadc3a2, 0x10000000000000000061e3b8d4a2b7b49, 0xcca46ee7e7d728cf4687644,\n        0x3ade741f416cf509a8d72a4c, 0x8e7572df6c768d460cb201d1, 0x1298c2031c383f68f18d47,\n        0xa554139550742d2c1c2dbfcc, 0x179852f9e707ce5dfc6c509, 0x307f6d2c8b88fb29906b9668,\n        0xce27f25b13c90cd75581cd7, 0xab1e43002be79daa, 0x4647693a000da8bb,\n        0x100000000000000007d866035ad43d2cd, 0x100000000000000008ac469986dc04381,\n        0x77117911414f1a8ba740937f, 0xfa4b42c9e27b825abb6e1932, 0x1957cbae8168c2a9ea426a5a,\n        0x10cae1885e14624756a7eba6, 0xa3cd665fc42827532aaa2ea, 0x8af3e1bc51da81d7990f227e,\n        0x788c055adcefcc69a3a5d382, 0x1003592246083ca043286287, 0x100000000000000008f832425d3465a7d,\n        0x100000000000000007a1648de1b75e170, 0x10000000000000000782f24b2b6f99caa,\n        0x10000000000000000a46207414514e0b7, 0xbe9bca3bf5eec6cc9844c551, 0xe0d5a94e288ef5adcba43ed7,\n        0xe9e85c194dff7c219c6d8ca3, 0x1254bb7494352e470a3b0a40, 0x747bed6d938a5434bfd865e3,\n        0x3d5af5929e771b0b1a09959b, 0x78e81d642b9ecee32d559eb, 0x14cc935a8ea60d9c8231390c,\n        0x10000000000000000ae0ed118d80201db, 0x100000000000000007dad72d6582f2e8a,\n        0x3e9b7c2f776f9ad1, 0x33c103bec8d8dd99, 0xac99a8072958d59134f663b9,\n        0xb30bb7a088fd8458abe354a5, 0x1d1dacff16391acd20b4eaea, 0x7b73f92d3f09b43016e07b3,\n        0xf6ae86523c0174ca5b1b0fc8, 0x73380bbaaba7c2034a6c5c63, 0x74bb326851d9f4a7c3e2c22,\n        0xbadb8e20341bc68ee0d62fb, 0x10000000000000000022bf071f1160083,\n        0x1000000000000000057d827f50ce811a1, 0x21e30fccd874a3e1,\n        0x1000000000000000081bff70857d935ca, 0xd1db88e35a5fd4b22e8a7242, 0xcf4280e99dabae608abafd04,\n        0x46af27b56584cc2c598e71ed, 0x14e9eb8a645712d6102c0a9e, 0xd7eb2bc34e0a3094c44bacf3,\n        0xd0c67ab4ba8aaa1ddd0d6652, 0xb581c278d1737880614fa64d, 0x99a3a36cbc29026cdb989a3,\n        0x10000000000000000ed6a42a626d0b5c2, 0x100000000000000008251f67200c0fd29,\n        0x3753a6d93f053e65, 0x39f069691aa27848, 0xb96cfe43c16c753450704e86,\n        0x2a10f11f55f81a94dd748595, 0x974380349665cfafcdae9c95, 0x866a4b640813c8ed4602e74,\n        0xda29c08c0e39dbfd34e194b7, 0x76eda22634152a733d1bb476, 0x3ccf70b893cad74b3949dcab,\n        0x11ae5fe6d5c14a6d2752cef6, 0xabf8f0133c1f072e, 0x161489d2a4ae8501,\n        0x10000000000000000a422466a58575055, 0x100000000000000010d01a10c0ddec2b7,\n        0xdc59ecc95ada6a3cddec47f, 0xbd9358cf424cddcab08790fa, 0x50659409e42159c50d14ced0,\n        0x8306fb79b2c290cc5c1fd38, 0x4ca0ea4e89d982c06289a0c4, 0x37e68136c605119f244d8150,\n        0xab4fee3c3a973c68f7f97975, 0xf51d92010bec98bd50ac787, 0x1000000000000000005f68a6ba1476c4c,\n        0x1badaadb9ef013b5, 0x100000000000000009d7e4713e105078d,\n        0x10000000000000000704d4f90616d782f, 0x86c26fd1dd2a50ee0449c352, 0x1b4d11d7f532f65e13dcba4e,\n        0x9015975fbc0102c1ff188862, 0x7e1482bb4fc0ef8853ca0c, 0x94cc4d2e3c7efb6f9333e845,\n        0xb0e5f311c82f55c14cd25a55, 0x507353e7c8312a9919c42bd9, 0xd36d6a8ef21c5f12abba7b0,\n        0x100000000000000000d9e2865dd56177d, 0x1000000000000000027d8ecbd5198c228,\n        0x1000000000000000022c5f7e952ac9b2b, 0x10000000000000000a2e9b304305db746,\n        0x6c4a291f3b18b98c85df2dc3, 0xc22d37b8b13205d494623e06, 0x4d3d27bda9b62c0f25a91194,\n        0x11bc318214ab34ab5197de3d, 0xf96d5803e611f1ad039b8569, 0x8846b82a7c6d0744b0ce648d,\n        0x4a92230e8cec10baf31a9ca8, 0x61491babdbf49d8a7f52951, 0xbda83aa75e798d1,\n        0x100000000000000006286d6ba5e14f26e, 0x38e7f7d2ae5ed155, 0x568116e3630d2d3c,\n        0x6eda656d7e631870e3600441, 0x170f2b8ebab1a7c6884463a3, 0xd7bfea3459a831bff9178452,\n        0xf1e34eceee6376fc7ca9b25, 0x9245d44dca719c11569e91c5, 0x829977ffedfa58f78ae0959e,\n        0xcbb65cb0a53b9639d2fcd418, 0x7635fac8f26c4762db2fb7, 0x100000000000000003b4d8d413c8654e3,\n        0x480407e0ff6c1d6c, 0x1011af9ee2cc20e6, 0x2dde429d4509a6dc,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x20ed31b5bd1a6a99cbc5f536,\n                limb1: 0x455cd2878abeba8b867a4290,\n                limb2: 0x9dfb4341a83a69b41feb23e4,\n                limb3: 0x16dfcd6d60e4be40819587ca,\n            },\n            y: u384 {\n                limb0: 0xe898728a87fdf94569d6fc7b,\n                limb1: 0xebd6dcf86bcbaf6626552df1,\n                limb2: 0x3892cf6167890a8cfbb63c03,\n                limb3: 0xcc772bf8b9e03accf1bd62,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BLS12_381_12P() {\n    let mut data = array![\n        0xc, 0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x3d77d61326ef5a9a5a681757, 0xd3070afd4f0e121de7fcee60,\n        0xdf9ef4088763fe611fb85858, 0x11a612bdd0bc09562856a70, 0xde4f62a6588c9401ffefbd3,\n        0x9bb5f797ac6d3395b71420b5, 0xdc39e973aaf31de52219df08, 0x105dcc4dce3960447d21d3c1,\n        0xaefd0d854043fd325dd3c34f, 0x9b63c98d9a7845c52e1e2b0f, 0x9db0be660d847ccc58358f3f,\n        0x17cb6c41f0c4e1a7394ab62a, 0xcf86158ab69213388e721bb7, 0x5f7812269d790797cad9aa15,\n        0xb1c3622a0177001d9ed8e25f, 0x115cf429f459884785c6ba46, 0x1e81341e2f3f988ff115dda3,\n        0xad22946489db6ee4954fa5e1, 0x83bed94412e19d92b73cc763, 0x2074c7bceff87d0d41edba1,\n        0xe2955c55da59eba4b7b57d3d, 0x1e6629b0431bce67cf28c22, 0x1c35b7efd5b67f87221b8bfc,\n        0x3e53df9e3488a9e42acd87e, 0x2e089afa726154d40dd12102, 0x5391613ecf49db2bcf1cad86,\n        0x84a2abb2de6b3a6e09026a50, 0x19557a3a3c1d62a205d5dc87, 0x490bf40774926e8b279947c,\n        0xeabab6aef9e9d2a4f64f4e7d, 0x3e309fe1b1c8247abab20d7e, 0x79c527862917f69ac58fcc4,\n        0xacb18f2da2b425c2ff50dafd, 0x7623850d87e279a8a30f31ff, 0x777564c7291d95fa80203ade,\n        0x1764ce0e7fb626109b63789b, 0x42f2f3f4f6b9d2c2b73a361f, 0xcd78c070c184c38b1e5716aa,\n        0x72cbc24cd90da89e0e3cefe4, 0x19485e1c46d0dce75f8b192b, 0xb56b3539074b3c47b3f504d9,\n        0x2c229530bddedd8851b03dcc, 0xc93eef8474c4e18d6378e7f0, 0x173d36f17a3c9ae77a2acc25,\n        0x5fbf29cf20556a11621a6639, 0xdfda5b7dbf0b226822094787, 0x4a3b059e521b4b0445df96d5,\n        0x333988c2c09f5af061cdfb, 0x13d3570be6d27d1d588b22fc, 0x20c763e58d4df3e4990cdae9,\n        0x2c3301367f400c31f4bded26, 0x16a6c25d133fba74b4c55972, 0xcb24d12438557639f52df5fd,\n        0x4a6a46feebe8a88a8062bd0e, 0x65f04211af4b168b1e25787d, 0x17935d6f4fa575744ca46f75,\n        0x644f324be8a5c152625a5b8a, 0x501e52e8c5707d7a3a77ee18, 0x9636c463c14c5b85c2e6d3b1,\n        0x1939b6f297f7b5b7fd0ac458, 0xde1d8e2670532ec5bba60ade, 0x1154f5064f7dd38656f7f82b,\n        0xc9bec68372b7d07dcf66270c, 0x315ced00b3153219bbd430, 0xc48b3bc110e208d827b13f4d,\n        0x87d82592699bca3dbf847c2b, 0xff04f0f2c8be12365aa73443, 0x1739c8c450ac994a5326c809,\n        0x8904b74d5d114b5416df0ed6, 0x479ee13e49cde067742c2655, 0x45b9359bfa338dd432ca9ff1,\n        0x12bf6460e7a42942be6c16a0, 0x3a8b37aacb2f620bc41c6109, 0x91f68edf90b5947273b0aadf,\n        0x265d48695a73800b7404124c, 0x141e3d99b3ab683bdb0ce70f, 0x6d6db022a8549ee86374b69a,\n        0x3e98f7258170733507d8709b, 0x10b4337a56d4cd17ab2fe1d5, 0x11366a6fecb124757076f4b6,\n        0x77b25b600d3baa1a2f54f826, 0x924c3c1a699e9b27b3612246, 0x6a253cae0097b1955d4f0cfd,\n        0xd2bd6591140d2faabafefac, 0xe706f12d726b82e518e76de2, 0xcbc3fafc8178466a6bfb6b20,\n        0x27d77f8bd8c4a2d2333b94e2, 0x3fd4d3cb36a5470ac66276d, 0xaa24c8373ee67a1fdcfeddd6,\n        0xb14ff80cfb97cbe0062505e6, 0x1f3cff0169eb74ea25e4b514, 0x9c9767230b739e24df854f7, 0xc,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x460ba2d39a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x2894fdbe6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x43870ae2fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0x56e06d3d16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0xa4593acd7ab792809e469e6ec62b2c8,\n        0xd450fe4aec4f217bb306d1a8e5eeac76, 0x6b3f2afe642bfa42aef9c00b8a64c1b9,\n        0x85940927468ff53d864a7a50b48d73f1, 0x1b8bb742d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x233a1ba09466e4726b5f5241f323ca74,\n        0x5306f3f5151665705b7c709acb175a5a, 0x4b2543867c879b741d878f9f9cdf5a86,\n        0x30bcab0ed857010255d44936a1515607, 0x22b15f3fbb42e0b20426465e3e37952d,\n        0x5f3f563838701a14b490b6081dfc8352, 0x368b770c552116dd2ba4b180cb69ca38,\n        0xc87a746319c16a0d0febd845d0dfae43, 0x1c00c5a3b29a8b06daf66c5f2577bffa, 0x1,\n        0x662eb982d85d057e3ecd3e80, 0xb4a9a06f1870cef04d259893, 0x13c63b08919789f6693ac767,\n        0x46b57475ebe2592c180602a, 0xa29ba889efae66ae28b5a21c, 0x90db50a5f6fd2bd2f903028a,\n        0x2ff1e2429fbd64dfa2d6ad63, 0x12dafd8eb8056d84ec28ec15, 0xab1e43002be79daa,\n        0x4647693a000da8bb, 0x100000000000000007d866035ad43d2cd,\n        0x100000000000000008ac469986dc04381, 0xae2f33a9d9cb4b15ee0ad6b1, 0xf3a69411c14fe8a373bca88b,\n        0x217b85cd445d90ff0e4660be, 0xcd5e4ff4b00690b55b4ccab, 0x6eed9ed30f4774665c816e0c,\n        0x41cd754068d68ea27a0b5a89, 0xa959aebee91fe56aa2e55599, 0x1979875ae2f9097a371a56f,\n        0x100000000000000008f832425d3465a7d, 0x100000000000000007a1648de1b75e170,\n        0x10000000000000000782f24b2b6f99caa, 0x10000000000000000a46207414514e0b7,\n        0xdfb5306dcb37c28c478de377, 0x82bf6e7247d010b3b88124e, 0x1350fed73699712cd10e4997,\n        0x264ec684e80ad573730987b, 0x7e9381355a8d8cf41277ab35, 0x1dd2f50a04724803c09295fb,\n        0xd59632cde5cb28cb87504b56, 0x150c5c0d0a3bcdb7fd2c4431, 0x10000000000000000ae0ed118d80201db,\n        0x100000000000000007dad72d6582f2e8a, 0x3e9b7c2f776f9ad1, 0x33c103bec8d8dd99,\n        0x6adb19e05054bbfb8a53d37b, 0x2c394966e7282d8a110f2653, 0x512faaf7af9cfceb077d30e7,\n        0x13427ec47a05bb56e340d4d7, 0xc5ee5e3724d194a0d2791d0f, 0x5d820084f43d9203e1e31a16,\n        0xa67dc8923161c3bc6ae1f4f5, 0x1dc8d7785737a204ad5d5e5, 0x10000000000000000022bf071f1160083,\n        0x1000000000000000057d827f50ce811a1, 0x21e30fccd874a3e1,\n        0x1000000000000000081bff70857d935ca, 0x382cac990c38c14a85724327, 0x98521dab0ab80ddee741516f,\n        0xafe85b60155438f1d4633925, 0x45c68724b994edb98efb200, 0xdbf686bb85160b27e6488220,\n        0x59414eea0e11ecf7c9d22ae3, 0x40d4f4747cb840ea3899a9b, 0x2861afe5dbb737326928b2b,\n        0x10000000000000000ed6a42a626d0b5c2, 0x100000000000000008251f67200c0fd29,\n        0x3753a6d93f053e65, 0x39f069691aa27848, 0x849645de9e01e7a980f44c83,\n        0x73c2ecb8cb203193684963db, 0x9945175490a2d564c0840500, 0x15307d5f56f347db9f7d7438,\n        0x376ccbcc1e7cff3de0291c4d, 0xaea02820b94f9707dd1845c, 0x352c307a3c4c5a6903a65295,\n        0x136ac345ecdf8cdb887a13e5, 0xabf8f0133c1f072e, 0x161489d2a4ae8501,\n        0x10000000000000000a422466a58575055, 0x100000000000000010d01a10c0ddec2b7,\n        0x71a63008c587621a4f6f2fa1, 0x82ce5f249132fd11542b71b2, 0x4069ad0155b3070b2b6f4203,\n        0x1126657c4bb0502d5248df50, 0x97eb128e69157b31c5de2a51, 0x627ccbf06c57855ca24f82a3,\n        0xba851322224041050c2c7b0b, 0x166b10a0c76fedee06db3e9a, 0x1000000000000000005f68a6ba1476c4c,\n        0x1badaadb9ef013b5, 0x100000000000000009d7e4713e105078d,\n        0x10000000000000000704d4f90616d782f, 0xda173dac5e6d0480ba667f76, 0x322fa6cc1fec8d7c415cf100,\n        0xfef7b6962ba4e32e16c004d7, 0xabbcb2d8ced3d51e8a78865, 0x2d862d3014969ce931cd1262,\n        0xcafd95d76195abeda17c7f45, 0x69277501e6ac90cabbfd905b, 0x2104682267f86645d8554d4,\n        0x100000000000000000d9e2865dd56177d, 0x1000000000000000027d8ecbd5198c228,\n        0x1000000000000000022c5f7e952ac9b2b, 0x10000000000000000a2e9b304305db746,\n        0xe86bdaffc7d80a66c773f278, 0xa3367d8c785f430e9f7ab55c, 0x347404e9a1d224b1a7e64804,\n        0x17887f8a85307d4c5ccc2bbc, 0xdcd40632f732048108cef9f5, 0x494a6fe05b3b9d1ebc125f36,\n        0x18a01df527ac65db6aa8e28b, 0x15157ba64035c63122bcc5cf, 0xbda83aa75e798d1,\n        0x100000000000000006286d6ba5e14f26e, 0x38e7f7d2ae5ed155, 0x568116e3630d2d3c,\n        0x65253fd616826b1dd8c6236a, 0x493a8f8b6538bb9a725be42c, 0x5a1a1e203464a4e5f03885d8,\n        0xf2c7a601a50541e04819723, 0x9fdb8a5060ab7533fe50a415, 0xf4dd7e344ccc7f09843b76af,\n        0xc660f2fffacb256a3e366c57, 0xcc76384b035432da44ba0c3, 0x100000000000000003b4d8d413c8654e3,\n        0x480407e0ff6c1d6c, 0x1011af9ee2cc20e6, 0x2dde429d4509a6dc, 0x9a04f7c7cf9cf95db3549484,\n        0x4a0c467c3a6e7c13b6bbb2e6, 0xdb99b99a930fe293db1b8e80, 0x10c8dfe8a58baf24cbb10f59,\n        0xc6d991cbebf3f9fa457915ba, 0xa520ddf24608d77a970d70ae, 0x1c1b315ab5926bca556680a7,\n        0x55733b5e405e88290930f38, 0x10000000000000000a857f257ed546ea8,\n        0x100000000000000001c358602b6f2cc63, 0x100000000000000000cfc85c4f3f5d8b2,\n        0x5dc2c695f99c34b6, 0x15fe07945fe2e77a80e4179c, 0x1ec2648a2cb50e385ba8a01a,\n        0x4ad0adea7d44208504ffa544, 0x122dbd49c1be9a7cede8f22d, 0xa7a998d5d885d32646167830,\n        0x5f83ce9f704555fd5177aa16, 0x95cdcf02e2e556a08a988e4, 0xdac0c3fac6c4b903f15e3af,\n        0x6249de39f2cc9280, 0x100000000000000008d2562f99f8222e7, 0x28c4e5bf72e345ad,\n        0x10000000000000000222b64363b6a2501,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x8bce5042829fff73a3bcf235,\n                limb1: 0x24302605af7afd068c1bac35,\n                limb2: 0x37e884c17dfeef6ccab457b5,\n                limb3: 0xd33acb51b348e3a6fe9f58b,\n            },\n            y: u384 {\n                limb0: 0x26976f00ce9dc19a844a55bf,\n                limb1: 0x305566a6af04e25742e40b78,\n                limb2: 0xeb73722c02dbef5226438532,\n                limb3: 0x1618caeaf7d7b6c6e1bf656,\n            },\n        },\n    );\n}\n\n\n#[test]\nfn test_msm_SECP256R1_1P() {\n    let mut data = array![\n        0x1, 0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0, 0x1,\n        0xeb1167b367a9c3787c65c1e582e2e662, 0xf7c1bd874da5e709d4713d60c8a70639, 0x3,\n        0x5ecaccc77099015edd4567b8, 0xa82e8c31fd89230e9e054b35, 0x9b8f95662d8ac62b, 0x0,\n        0x197a10d65c49dfb9020a06d1, 0x385d645da0e58782b062bea8, 0xce16e956485f6821, 0x0,\n        0x35a5b9ab55bd33dd4dec8ec8c85b8754, 0x1256a1018e9a2606d3efc444e5bc9e97,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x5ecaccc77099015edd4567b8,\n                limb1: 0xa82e8c31fd89230e9e054b35,\n                limb2: 0x9b8f95662d8ac62b,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x197a10d65c49dfb9020a06d1,\n                limb1: 0x385d645da0e58782b062bea8,\n                limb2: 0xce16e956485f6821,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\nfn test_msm_SECP256R1_2P() {\n    let mut data = array![\n        0x2, 0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0,\n        0xd3ff147ff0ee4213f51f677d, 0x431366a7732a6e4a6b942255, 0x9fe743b25d39a591, 0x0,\n        0x7f8bb562ff60a902ef14bcb0, 0xeb9420089fa531db62e806a6, 0xfd028df433dfd5cc, 0x0, 0x2,\n        0xe443df789558867f5ba91faf7a024204, 0x23a7711a8133287637ebdcd9e87a1613,\n        0x1846d424c17c627923c6612f48268673, 0xfcbd04c340212ef7cca5a5a19e4d6e3c, 0x3,\n        0x69ad05b5d409fdd74ff3606a, 0xa4cd8f1dd82b0b833eb4f2e7, 0x24b24c3d5a6a9dfd, 0x0,\n        0xd836719652e6763c9000c8bf, 0xf5a12b525077946be38f884b, 0x648707519821f2b4, 0x0,\n        0x29fa93ff2e088f257810ffaf340cbe2f, 0x67db401fe06eea845a19e61367b76a34,\n        0xf89789bfc970e55d00b6c590, 0xf75a68e0b3fa2545ac20867c, 0x2960649db3055cd8, 0x0,\n        0x89f368de0f28fdf05075bde, 0x528cd10ce08cfe5ddb208066, 0xda975b1ed45230dd, 0x0,\n        0x44faf735503f8d6a4fd7c1f1541b0e83, 0x108efc1b039167d94064f65615a509dcb,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x7c99e6e15710cca6d05a228c,\n                limb1: 0xb3b0695cd0bcf4e2fff2aa40,\n                limb2: 0xf51b415c36a8d206,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x3ed9af037beeebe8a4e51272,\n                limb1: 0x59c17339e41ffb8881d8ff31,\n                limb2: 0x8659e768c3fbaf89,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\nfn test_msm_SECP256R1_3P() {\n    let mut data = array![\n        0x3, 0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0,\n        0xd3ff147ff0ee4213f51f677d, 0x431366a7732a6e4a6b942255, 0x9fe743b25d39a591, 0x0,\n        0x7f8bb562ff60a902ef14bcb0, 0xeb9420089fa531db62e806a6, 0xfd028df433dfd5cc, 0x0,\n        0x46ae31f6fc294ad0814552b6, 0x2d54cc811efaf988efb3de23, 0x2a2cc02b8f0c419f, 0x0,\n        0xaec889b9d8ce51c4a2c3586f, 0xa2b07874c333bfee9f78e13e, 0xc445de21be8d8709, 0x0, 0x3,\n        0x1846d424c17c627923c6612f48268673, 0xfcbd04c340212ef7cca5a5a19e4d6e3c,\n        0xb4862b21fb97d43588561712e8e5216a, 0x259f4329e6f4590b9a164106cf6a659e,\n        0x12e0c8b2bad640fb19488dec4f65d4d9, 0x5487ce1eaf19922ad9b8a714e61a441c, 0x3,\n        0x21932ec80e1487c9cfaca85, 0xc186376df1525312e49b706e, 0xc31cc2013df9b079, 0x0,\n        0xfc2a2329e088a2bf919713c2, 0x6f226891c087240877728fb4, 0x8c2581e103f28987, 0x0,\n        0x44faf735503f8d6a4fd7c1f1541b0e83, 0x108efc1b039167d94064f65615a509dcb,\n        0x771ae9413e9a50212f4cab04, 0xe237a7ac362eb52c39a5693d, 0xfed723892728a27d, 0x0,\n        0x22cef04d0e2d637e3ac6f9dc, 0xfe6992a829bc39d46025402c, 0xf9f46dc5ec2a3be2, 0x0,\n        0x97f029beb074caf4db383ce1b6f43018, 0x676a9d25b186deaeeb154f6f81c3cac5,\n        0xcb6fdbee18c8593a5411d8d4, 0xb5481fe44962e7d3e222115, 0x871c9156dc079065, 0x0,\n        0x8c26b99697ee8e8f646fc0eb, 0x73d06be2b40891cb15d4a6c8, 0x97c7a60ae52be2f, 0x0,\n        0xe1a61de4d41b08744b95b20a4e12fcb3, 0x153b6b6be0d5eaf38f83e1294ef38c98b,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x60a04d1cd61720fd649a635,\n                limb1: 0x4de992ec1fe826266faf9542,\n                limb2: 0x7fcc86284cb4d8d5,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xc5cc56bee25131b3aec25cee,\n                limb1: 0x60f429ebbf34f181ee9e0f69,\n                limb2: 0xeaba7780c9c9f8a8,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256R1_4P() {\n    let mut data = array![\n        0x4, 0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0,\n        0xd3ff147ff0ee4213f51f677d, 0x431366a7732a6e4a6b942255, 0x9fe743b25d39a591, 0x0,\n        0x7f8bb562ff60a902ef14bcb0, 0xeb9420089fa531db62e806a6, 0xfd028df433dfd5cc, 0x0,\n        0x46ae31f6fc294ad0814552b6, 0x2d54cc811efaf988efb3de23, 0x2a2cc02b8f0c419f, 0x0,\n        0xaec889b9d8ce51c4a2c3586f, 0xa2b07874c333bfee9f78e13e, 0xc445de21be8d8709, 0x0,\n        0x7e47d1c2d19c21b2f6870259, 0xe701b40af42001c38bca00db, 0xd87ea1720d4dd3d6, 0x0,\n        0x5b1d6cc74985ce49a1f737fe, 0xb9127c572c3f091c031c249c, 0x1392711e1576aa6f, 0x0, 0x4,\n        0xb4862b21fb97d43588561712e8e5216a, 0x259f4329e6f4590b9a164106cf6a659e,\n        0x12e0c8b2bad640fb19488dec4f65d4d9, 0x5487ce1eaf19922ad9b8a714e61a441c,\n        0x5a92118719c78df48f4ff31e78de5857, 0xa3f2c9bf9c6316b950f244556f25e2a2,\n        0x8d723104f77383c13458a748e9bb17bc, 0x85776e9add84f39e71545a137a1d5006, 0x3,\n        0x9921ded7d529ce361c8e3ff0, 0xdc220d0b5287d69a714d190b, 0x1b76478b4180189d, 0x0,\n        0xb1d2a54b21c1ad7f7d0f9027, 0x7e58d3d0b7e2a537a993411c, 0x7985849f9dd8119, 0x0,\n        0x97f029beb074caf4db383ce1b6f43018, 0x676a9d25b186deaeeb154f6f81c3cac5,\n        0xe25b3d09a0ca15758eec5c35, 0x4eb2ac787bfa862b05c37a19, 0x485dc9be973d40ad, 0x0,\n        0xc544faf31ae71d76185ae1c9, 0xe7c7a3e02b520e65be0e955f, 0x56d97c994d146f8a, 0x0,\n        0xe1a61de4d41b08744b95b20a4e12fcb3, 0x153b6b6be0d5eaf38f83e1294ef38c98b,\n        0x57748c8a004a6262d9e306a3, 0x96a084f871c636d34425a103, 0xb3c2b8700cd7d920, 0x0,\n        0x4ad02dbf9a1e3ee40e1e3d8d, 0xf797030462c8333af23d3f54, 0x1dc280acb99e5f4c, 0x0,\n        0x26994a6057531b28435aaa960f280193, 0x30924dc9b5e85e844f4ee14d4bfe0e12,\n        0xfeea2dd70b8a91873d10df4b, 0xb8e2d33a659ef7fa87e3fa0, 0x74fc51cbe8e5400d, 0x0,\n        0xe4d3e3cf55a86291a7c5da22, 0xd3b103edfa5860bd1f94cdf8, 0x3480d7e452a5d2b5, 0x0,\n        0x935644fe1e5f8844579a502568d12dc6, 0x177896bfd1e087a003ea64e9eaecd32d3,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x34c12d0510448edd8a4f435e,\n                limb1: 0x1c1b70597d3d6f0ffda68cdc,\n                limb2: 0x8f60be7a69fb2da6,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x67b330ca24613a628c5f1d44,\n                limb1: 0xa12378b8d8a57f7ee45cf035,\n                limb2: 0x7f7102c7548d7593,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256R1_10P() {\n    let mut data = array![\n        0xa, 0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0,\n        0xd3ff147ff0ee4213f51f677d, 0x431366a7732a6e4a6b942255, 0x9fe743b25d39a591, 0x0,\n        0x7f8bb562ff60a902ef14bcb0, 0xeb9420089fa531db62e806a6, 0xfd028df433dfd5cc, 0x0,\n        0x46ae31f6fc294ad0814552b6, 0x2d54cc811efaf988efb3de23, 0x2a2cc02b8f0c419f, 0x0,\n        0xaec889b9d8ce51c4a2c3586f, 0xa2b07874c333bfee9f78e13e, 0xc445de21be8d8709, 0x0,\n        0x7e47d1c2d19c21b2f6870259, 0xe701b40af42001c38bca00db, 0xd87ea1720d4dd3d6, 0x0,\n        0x5b1d6cc74985ce49a1f737fe, 0xb9127c572c3f091c031c249c, 0x1392711e1576aa6f, 0x0,\n        0xb71f95ea692ed186e06e4c37, 0x807276cd9cc59718bb11dbe9, 0x10756a25836d67ca, 0x0,\n        0xd34211b3520c83c5f9be99af, 0x8f19a28ceef67bbda102ffe7, 0x7ac2b92030d351cc, 0x0,\n        0x411bb5d0fbe844f025c7178c, 0xcf603787227b7ac499d6d1c4, 0x5f6b2479862eb2f8, 0x0,\n        0xce60303cfcb98726ff64a1e5, 0xa64534c614754b3527588d25, 0x44f75e245622181, 0x0,\n        0x8a703177da18d4ede707c057, 0x7d6c11e754ab6fbe73deea43, 0xdf9787168190a047, 0x0,\n        0x2e6585ab5f125a34fef37875, 0xb70e9f02ce7744197172a117, 0x60e305f9fe6f2298, 0x0,\n        0x712f72f3929408ff68af059d, 0x4f72cea12cd115dc1c8639f5, 0xc6d5ae1b897ffe77, 0x0,\n        0xfcf91f56bad0659142668837, 0xa15458b49bcdad6c870e3889, 0x81a1342e70b1b765, 0x0,\n        0x461d7579f9613d3168fc6220, 0x7626024a6195fe0eafcea08b, 0x32e91b268a032443, 0x0,\n        0xcdc7ae298071a741aafd4035, 0x9a9bdfbdb824dc1278457a10, 0x17fbec3713dfd145, 0x0,\n        0x9b85054533e9d24310265ee0, 0x51cbb79b2625c435ba43bbef, 0x1fd81fcb136c629b, 0x0,\n        0x96378a2e47ab50246a9cf131, 0x4d0f08867537268cf39eae04, 0x4eeb60396f3e5f52, 0x0, 0xa,\n        0xd3fbf47a7e5b1e7f9ca5499d004ae545, 0xbaf3897a3e70f16a55485822de1b372a,\n        0x101fbcccded733e8b421eaeb534097ca, 0x38c1962e9148624feac1c14f30e9c5cc,\n        0x247a8333f7b0b7d2cda8056c3d15eef7, 0x1759edc372ae22448b0163c1cd9d2b7d,\n        0xe005b86051ef1922fe43c49e149818d1, 0x7d41e602eece328bff7b118e820865d6,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x552f233a8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x8c1745a79a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x5129fb7c6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x870e15c2fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0xadc0da7a16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x148b2758d7ab792809e469e6ec62b2c8, 0x3,\n        0x38561918155956c9814da8c1, 0x4ee05f58a1e16b839f0d9c00, 0xecde93203b4a7dfa, 0x0,\n        0xa685cbd24295124d7e743db7, 0x839d0ebc27e44d043d77eded, 0xe795a8a4341deaa3, 0x0,\n        0xed0428b23446f2526c2e4e7b07209994, 0x10210ae4a0d0485cb56c075354424cf5d,\n        0xa3dad4276a73d4c09d6159d4, 0x993f51a3b23380f272860899, 0x32c55c9bd7a08a15, 0x0,\n        0xc5e4a047ae1c8e94b7d2caf4, 0xb641a3a56bdde831271d3274, 0x33595945536b7789, 0x0,\n        0xc0845253484d89c1d1ccaf50b5524f81, 0x559558f8096b66022bac83a15eb9ff6f,\n        0x6b1cb9b2433fb61e81654c3b, 0x67617c9e3a607fac036ceecb, 0x97c35ee2d0c73db6, 0x0,\n        0xf0c3a4705c96d01f668e05ce, 0xeafdbf139502919889b40454, 0xc935a5c99c11cf36, 0x0,\n        0x44922bc02cadce44e7b7886df54150df, 0x1c077ddb46086b3c48c0151e702cff2f6,\n        0x65677810a039bc3e3c9be37c, 0x7d16040d79afaf58b3f80fa9, 0xfae349c7861f6f48, 0x0,\n        0xd89bebc35496c77341e51852, 0x2358a145b3d17fa89be6dbdc, 0xd3b85a68d5dc2676, 0x0,\n        0xc9ed151811182720cf9615e71e9fa060, 0x142125c7f17a0f71398604210c95e5ca5,\n        0x4b3c7e7ccefc0fae7b0f55bb, 0xef7afabc6323803d011d8d2, 0x60a2c23d746b1a06, 0x0,\n        0xb25819a91f97473e0339cd04, 0xaf305d5c7986ca879648d39e, 0xda3801752ba46faa, 0x0,\n        0xae8d22acf2919234f64b2558ab7b67df, 0x11041f8236fcac05059b625657966610f,\n        0x4c3728ed346a68dbf7e146f7, 0x678f6cd8ef42911e63db5bec, 0x77f7f11c0623961b, 0x0,\n        0x685ae2d8682fb6e5bddbf735, 0x1f03b99ca6329f7dc3a47dd, 0x711f6d38f7342bbc, 0x0,\n        0x1f14954c7b5ac5b971b602c56df47bc3, 0x12d076b9e2d6f7ff90377d25582942bfe,\n        0x3b04be6e199cf2f9e01b8e25, 0xfcf54a6935861246f40ccf8c, 0xfbadcace1d51d441, 0x0,\n        0xd70f738575d4a0269184b8ff, 0x3b4408df2be178958c3bf10c, 0x79e7079bd76a7b55, 0x0,\n        0x6436caaee772af5fc76e60b7db77afc1, 0x1c3e3905b638753f3071cef680336e7fe,\n        0xfe871f11377ae9427e3685f9, 0x7e050d6b4465549c28c47dc0, 0xc4902f8601ad20c0, 0x0,\n        0xe79c221af2b5a795ce938be6, 0x97c17d2cd373c628e73940b, 0xe94b501243f485aa, 0x0,\n        0x16f8de87b088d889a9fe62c941cfad9b, 0x181d97eccb30bde04756f33bbfe09ac77,\n        0x34be9f4109fde722b0ad2953, 0x61c76a815bc4e8e49f2f6f22, 0x45c8af482d122938, 0x0,\n        0x23cef567487cef807c8f37df, 0xb06e7986c8691afa2c56be48, 0x2f6997e366662173, 0x0,\n        0x10c6c0d26e3816ea1b2e066d32578f8e, 0xe883f51850260b2857cb5d63a26adb1d,\n        0x642b3b250974accb2a19bddd, 0xab3e89d8cf48dc55485119e6, 0xc5f80116c5e9c74, 0x0,\n        0xff9bfb138c144d05684a114c, 0x7e7e1ae6a3570325390ed38e, 0x92eb23ab15e45e63, 0x0,\n        0xa318a477495afb754a1e314186443137, 0x1a9d9d5e84e930f6526918aa8ca162b82,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xfba2105cfbf4fb86b8691c25,\n                limb1: 0x737afa206da896812a1683ed,\n                limb2: 0x3770a73db013e250,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x5590076303a44e451ab3856b,\n                limb1: 0xd5fcd660db51d063c730f5c7,\n                limb2: 0x506410f9c703c100,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256R1_11P() {\n    let mut data = array![\n        0xb, 0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0,\n        0xd3ff147ff0ee4213f51f677d, 0x431366a7732a6e4a6b942255, 0x9fe743b25d39a591, 0x0,\n        0x7f8bb562ff60a902ef14bcb0, 0xeb9420089fa531db62e806a6, 0xfd028df433dfd5cc, 0x0,\n        0x46ae31f6fc294ad0814552b6, 0x2d54cc811efaf988efb3de23, 0x2a2cc02b8f0c419f, 0x0,\n        0xaec889b9d8ce51c4a2c3586f, 0xa2b07874c333bfee9f78e13e, 0xc445de21be8d8709, 0x0,\n        0x7e47d1c2d19c21b2f6870259, 0xe701b40af42001c38bca00db, 0xd87ea1720d4dd3d6, 0x0,\n        0x5b1d6cc74985ce49a1f737fe, 0xb9127c572c3f091c031c249c, 0x1392711e1576aa6f, 0x0,\n        0xb71f95ea692ed186e06e4c37, 0x807276cd9cc59718bb11dbe9, 0x10756a25836d67ca, 0x0,\n        0xd34211b3520c83c5f9be99af, 0x8f19a28ceef67bbda102ffe7, 0x7ac2b92030d351cc, 0x0,\n        0x411bb5d0fbe844f025c7178c, 0xcf603787227b7ac499d6d1c4, 0x5f6b2479862eb2f8, 0x0,\n        0xce60303cfcb98726ff64a1e5, 0xa64534c614754b3527588d25, 0x44f75e245622181, 0x0,\n        0x8a703177da18d4ede707c057, 0x7d6c11e754ab6fbe73deea43, 0xdf9787168190a047, 0x0,\n        0x2e6585ab5f125a34fef37875, 0xb70e9f02ce7744197172a117, 0x60e305f9fe6f2298, 0x0,\n        0x712f72f3929408ff68af059d, 0x4f72cea12cd115dc1c8639f5, 0xc6d5ae1b897ffe77, 0x0,\n        0xfcf91f56bad0659142668837, 0xa15458b49bcdad6c870e3889, 0x81a1342e70b1b765, 0x0,\n        0x461d7579f9613d3168fc6220, 0x7626024a6195fe0eafcea08b, 0x32e91b268a032443, 0x0,\n        0xcdc7ae298071a741aafd4035, 0x9a9bdfbdb824dc1278457a10, 0x17fbec3713dfd145, 0x0,\n        0x9b85054533e9d24310265ee0, 0x51cbb79b2625c435ba43bbef, 0x1fd81fcb136c629b, 0x0,\n        0x96378a2e47ab50246a9cf131, 0x4d0f08867537268cf39eae04, 0x4eeb60396f3e5f52, 0x0,\n        0x4e9960d402494fb117251955, 0xc0fb055de656d6ac2ba4da86, 0x800a21e8619f448f, 0x0,\n        0x21ba9af739425b664464e3d5, 0xd09194888c2ffcf16e93e0c9, 0x5d4d3cd0684b6cd1, 0x0, 0xb,\n        0x101fbcccded733e8b421eaeb534097ca, 0x38c1962e9148624feac1c14f30e9c5cc,\n        0x247a8333f7b0b7d2cda8056c3d15eef7, 0x1759edc372ae22448b0163c1cd9d2b7d,\n        0xe005b86051ef1922fe43c49e149818d1, 0x7d41e602eece328bff7b118e820865d6,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x552f233a8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x8c1745a79a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x5129fb7c6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x870e15c2fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0xadc0da7a16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x148b2758d7ab792809e469e6ec62b2c8,\n        0xd450fe4aec4f217bb306d1a8e5eeac76, 0xd67e55fd642bfa42aef9c00b8a64c1b9,\n        0x85940927468ff53d864a7a50b48d73f1, 0x37176e84d977e9933c49d76fcfc6e625, 0x3,\n        0xb16bff1ced538bfd53bae25e, 0xbf1402b7e25844a265c1bdd5, 0x1be24841a28b989f, 0x0,\n        0xf986f402c5573e161419f24a, 0x7b675d2f5f2da582d6fe8f9e, 0x6aeca6fa85a397dc, 0x0,\n        0xc0845253484d89c1d1ccaf50b5524f81, 0x559558f8096b66022bac83a15eb9ff6f,\n        0x962f32f58256def96811a9d0, 0xa1b9c86a62821a4cfcd4a227, 0xef591311df6d01e4, 0x0,\n        0x742d94ecec04d08af134a72f, 0xad0028269dacda27bef683c4, 0x298a3de72a4ed3cf, 0x0,\n        0x44922bc02cadce44e7b7886df54150df, 0x1c077ddb46086b3c48c0151e702cff2f6,\n        0x45a06c488f5dcafb092b1d04, 0x1da9b0f063b8d103454f7cc4, 0xd913f452d9dd6f57, 0x0,\n        0x75d6dd631f23b758508fcb4, 0xf21f94eae9d1c6ed2aa4fb67, 0xdf5004b53571e9a9, 0x0,\n        0xc9ed151811182720cf9615e71e9fa060, 0x142125c7f17a0f71398604210c95e5ca5,\n        0x8d9a40cc54f2cc7d02b7e0b0, 0xe36d1ca0c233cf2ec25c402f, 0x94f2e92234345839, 0x0,\n        0x7939e94d8e6282dd8964091f, 0x98530c37ba4b3964a3a0fe4a, 0x982d6fbcc9b50a64, 0x0,\n        0xae8d22acf2919234f64b2558ab7b67df, 0x11041f8236fcac05059b625657966610f,\n        0x21c3e96235c9016bf0a84114, 0x247ff7af02d28a262889b947, 0x92f35a496b19286d, 0x0,\n        0x343cd3d8bf84c15a702e7657, 0x5e021f090c2b6c54bb8bcf1f, 0x5d1e6f00fb3793c5, 0x0,\n        0x1f14954c7b5ac5b971b602c56df47bc3, 0x12d076b9e2d6f7ff90377d25582942bfe,\n        0x2b574bbd9c8f851c273ff965, 0x6e259626c2a5c8caa331135b, 0x36ae66488788bb25, 0x0,\n        0xb143e40a36ef2d4c7875e024, 0x62bbca04aa3439b4100d24c9, 0x49c3be30dc73a5fe, 0x0,\n        0x6436caaee772af5fc76e60b7db77afc1, 0x1c3e3905b638753f3071cef680336e7fe,\n        0xb50c01b147f62f5ced402fc7, 0x916dc3141db597cb65f49535, 0xfa26dd483341953, 0x0,\n        0x83482d67557d46be990aeb2b, 0x879cc943ac21722d332e0387, 0x53e3c2b4d5a19544, 0x0,\n        0x16f8de87b088d889a9fe62c941cfad9b, 0x181d97eccb30bde04756f33bbfe09ac77,\n        0x39a4c7a121736d93c8c46aca, 0xd75c5f684d85cbf35b9f803d, 0xa71f416ba3e8524f, 0x0,\n        0x3fb43e42616b1d7de570fd52, 0xe64815507843d1afb0823f58, 0xb0ed6357a48b8b89, 0x0,\n        0x10c6c0d26e3816ea1b2e066d32578f8e, 0xe883f51850260b2857cb5d63a26adb1d,\n        0xd9b0171c1f079d16eb88b0b5, 0xc10f56ec85cc7f859a09f8de, 0x215108f002c87662, 0x0,\n        0x5e4c522f974963e8bf756e19, 0xe603a1ddbea2d112fc889233, 0x5fc356df32962109, 0x0,\n        0xa318a477495afb754a1e314186443137, 0x1a9d9d5e84e930f6526918aa8ca162b82,\n        0x145a727889f0bb4d53d6fbaa, 0x4155f220ac0460cd7ed04829, 0xb3ed8c7049dc43dc, 0x0,\n        0x8a4850ae0cc7d3a0fc4a4a8e, 0x47478a0e45160288b6680b05, 0x10bdda9cc7016108, 0x0,\n        0x2785e73e00b487bf30548408ffb58c02, 0x15f510a537d9b81be6f4a2335fa207095,\n        0xff532f80c81fe274ac646064, 0x8c46882da4fde0295beab9e1, 0xc2b5cd8a7a93240a, 0x0,\n        0xc949597e8e67ebee593df861, 0xa4849c0210fd9206fdaffcfd, 0x510cde5a5da7c46e, 0x0,\n        0xe293dda213f46bf461aba1d96a9d193b, 0x15cb16111d99d7ae505af716e48e6b599,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xe702738c3be4c98312c6fd8,\n                limb1: 0xdf289702da4292e2baf6d123,\n                limb2: 0xd2e3d9fa85ae9ec9,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xb24620fd1d6468e74e756e09,\n                limb1: 0xa92f0cfbb6159a6b7d73d3c8,\n                limb2: 0xfdfb28f19d569756,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256R1_12P() {\n    let mut data = array![\n        0xc, 0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0,\n        0xd3ff147ff0ee4213f51f677d, 0x431366a7732a6e4a6b942255, 0x9fe743b25d39a591, 0x0,\n        0x7f8bb562ff60a902ef14bcb0, 0xeb9420089fa531db62e806a6, 0xfd028df433dfd5cc, 0x0,\n        0x46ae31f6fc294ad0814552b6, 0x2d54cc811efaf988efb3de23, 0x2a2cc02b8f0c419f, 0x0,\n        0xaec889b9d8ce51c4a2c3586f, 0xa2b07874c333bfee9f78e13e, 0xc445de21be8d8709, 0x0,\n        0x7e47d1c2d19c21b2f6870259, 0xe701b40af42001c38bca00db, 0xd87ea1720d4dd3d6, 0x0,\n        0x5b1d6cc74985ce49a1f737fe, 0xb9127c572c3f091c031c249c, 0x1392711e1576aa6f, 0x0,\n        0xb71f95ea692ed186e06e4c37, 0x807276cd9cc59718bb11dbe9, 0x10756a25836d67ca, 0x0,\n        0xd34211b3520c83c5f9be99af, 0x8f19a28ceef67bbda102ffe7, 0x7ac2b92030d351cc, 0x0,\n        0x411bb5d0fbe844f025c7178c, 0xcf603787227b7ac499d6d1c4, 0x5f6b2479862eb2f8, 0x0,\n        0xce60303cfcb98726ff64a1e5, 0xa64534c614754b3527588d25, 0x44f75e245622181, 0x0,\n        0x8a703177da18d4ede707c057, 0x7d6c11e754ab6fbe73deea43, 0xdf9787168190a047, 0x0,\n        0x2e6585ab5f125a34fef37875, 0xb70e9f02ce7744197172a117, 0x60e305f9fe6f2298, 0x0,\n        0x712f72f3929408ff68af059d, 0x4f72cea12cd115dc1c8639f5, 0xc6d5ae1b897ffe77, 0x0,\n        0xfcf91f56bad0659142668837, 0xa15458b49bcdad6c870e3889, 0x81a1342e70b1b765, 0x0,\n        0x461d7579f9613d3168fc6220, 0x7626024a6195fe0eafcea08b, 0x32e91b268a032443, 0x0,\n        0xcdc7ae298071a741aafd4035, 0x9a9bdfbdb824dc1278457a10, 0x17fbec3713dfd145, 0x0,\n        0x9b85054533e9d24310265ee0, 0x51cbb79b2625c435ba43bbef, 0x1fd81fcb136c629b, 0x0,\n        0x96378a2e47ab50246a9cf131, 0x4d0f08867537268cf39eae04, 0x4eeb60396f3e5f52, 0x0,\n        0x4e9960d402494fb117251955, 0xc0fb055de656d6ac2ba4da86, 0x800a21e8619f448f, 0x0,\n        0x21ba9af739425b664464e3d5, 0xd09194888c2ffcf16e93e0c9, 0x5d4d3cd0684b6cd1, 0x0,\n        0x4bec631b62d40e5b8aaff33e, 0xf7161e0a086fb1c95bc84eab, 0xfbff400a905bf4cf, 0x0,\n        0x482ffa9e045ec6f1e1e09d6e, 0x9a75ce6f11a020bef0b9b3f3, 0x253b9af963b9e192, 0x0, 0xc,\n        0x247a8333f7b0b7d2cda8056c3d15eef7, 0x1759edc372ae22448b0163c1cd9d2b7d,\n        0xe005b86051ef1922fe43c49e149818d1, 0x7d41e602eece328bff7b118e820865d6,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x552f233a8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x8c1745a79a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x5129fb7c6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x870e15c2fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0xadc0da7a16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x148b2758d7ab792809e469e6ec62b2c8,\n        0xd450fe4aec4f217bb306d1a8e5eeac76, 0xd67e55fd642bfa42aef9c00b8a64c1b9,\n        0x85940927468ff53d864a7a50b48d73f1, 0x37176e84d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x467437419466e4726b5f5241f323ca74,\n        0xa425799aa905d7507e1ea9c573581a81, 0xfb82860deabca8d0b341facdff0ac0f1, 0x3,\n        0xf21b3e6af6d840760fa8411f, 0xd677b055694872a38d273ef1, 0x150932895e8f8c82, 0x0,\n        0x45195680cc81c556f391cc4b, 0xdde61f43811514fa59ed06e9, 0x220cfb9298b8cc55, 0x0,\n        0x44922bc02cadce44e7b7886df54150df, 0x1c077ddb46086b3c48c0151e702cff2f6,\n        0x2b346d6b79e589393cf0d61b, 0x4f58aa4dd49fc3dd5924c7f9, 0x386d7047f06ea697, 0x0,\n        0x3a470a888b07a992eebf9389, 0x8324abb26382c12bce482ab1, 0xb384c6bec834d324, 0x0,\n        0xc9ed151811182720cf9615e71e9fa060, 0x142125c7f17a0f71398604210c95e5ca5,\n        0x9c891702b89da5331cb7832e, 0x2731f6bc2f1aa2eb186b25c5, 0x2ad90d0df0c3682c, 0x0,\n        0xcd1df42426c63336a3458fe5, 0x7c918ae249bb546477383a55, 0x44e172d8e00fd452, 0x0,\n        0xae8d22acf2919234f64b2558ab7b67df, 0x11041f8236fcac05059b625657966610f,\n        0xd6cf6a25a18ed80eb0e6190e, 0x3c774b8768bc771fab9fdcc9, 0x47c91895e8b1d94e, 0x0,\n        0x272762d65915cc5033c101ea, 0x99426a49b9b07e18aded6f42, 0xca92ae7e999ccfaa, 0x0,\n        0x1f14954c7b5ac5b971b602c56df47bc3, 0x12d076b9e2d6f7ff90377d25582942bfe,\n        0x394cc425f5996a29056252d1, 0xd2b3ec664a7880e8d35f183f, 0xc828b02c43406f58, 0x0,\n        0x804960c086f17cae9d5ad279, 0x484702a1d46ed78aefb3e507, 0x1e99ac387923772, 0x0,\n        0x6436caaee772af5fc76e60b7db77afc1, 0x1c3e3905b638753f3071cef680336e7fe,\n        0x26ce92552827bb2fa63cca66, 0xc39a63811359b427370b0575, 0xae807a141eaa26dc, 0x0,\n        0xc0c2b78a71d509508baf0f2a, 0x2feadccb72de72e9f5fc6138, 0xc0382fd27bb08ce3, 0x0,\n        0x16f8de87b088d889a9fe62c941cfad9b, 0x181d97eccb30bde04756f33bbfe09ac77,\n        0x78113c1d4dfdf1520f3f1999, 0x2c5b0f78ece4dbf13818b6da, 0x91423833a8a23044, 0x0,\n        0x4f72d597c449ae91c028fe43, 0x6254a79f46e2eba930ff0922, 0x2fe944a98818b85, 0x0,\n        0x10c6c0d26e3816ea1b2e066d32578f8e, 0xe883f51850260b2857cb5d63a26adb1d,\n        0x6623d54c69187cc05a7d25f1, 0x4f1c622a1f647d93565c3832, 0x6a79e7e30dd11556, 0x0,\n        0x1fce6face866ebb2c02113a5, 0xdeff94345f28459d5573a31b, 0xae91e80a1d94d7e5, 0x0,\n        0xa318a477495afb754a1e314186443137, 0x1a9d9d5e84e930f6526918aa8ca162b82,\n        0x8cf51eb38bcb71c8f648bcff, 0x4c19c480af80b7e6a658baa2, 0xcf2c5e5a5d2ebee5, 0x0,\n        0x19103765b836ea25211d48d7, 0xfe67a940dcd330efe84be2dd, 0x8d56f6b8b35dbce5, 0x0,\n        0x2785e73e00b487bf30548408ffb58c02, 0x15f510a537d9b81be6f4a2335fa207095,\n        0x8bfd5afc63995feebc71e165, 0xe7d8abd837751c2eb24eef3e, 0xee5889cb9dcfbaf5, 0x0,\n        0x1f5083d084d6f44e5bfbbb5b, 0x2b94b883ed3e33932b61c480, 0xe267eab32408be05, 0x0,\n        0xe293dda213f46bf461aba1d96a9d193b, 0x15cb16111d99d7ae505af716e48e6b599,\n        0x5c19035d92c3b9e269ca9231, 0x305af2b3721b71e18b9f971, 0x174d9aaf6ed44af2, 0x0,\n        0x7b91bd8b08dd4844dd8b2f3e, 0xe8174f87ddde9f6c71c644ff, 0x8b0c88aa96b2ff53, 0x0,\n        0x5747d2a86b06c3af37767b79685e955a, 0x12d5f64271c5145c58fdf6149840ae47,\n        0x93b81d705fbc02e172727cfd, 0x4de473fa4428b4c924d7bd53, 0x1939f32498b8d75d, 0x0,\n        0x8ab3d19f0f073043eb950bf9, 0xee1962e119ef85b4c508ad6d, 0x6808f2627e81135c, 0x0,\n        0xf49af9f8629ea294f624aa92983015e9, 0x1046b42b340cdb380acd6a9b3aecef690,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xce6a9b69daea1558dcbe14f1,\n                limb1: 0x3d82daa514f325d29522e5e7,\n                limb2: 0xc9833209611997e9,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x84af480eeea70b1a6120dc57,\n                limb1: 0xc6df620bb03464672b4e6d28,\n                limb2: 0x53ae491c8e1b5177,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\nfn test_msm_SECP256K1_1P() {\n    let mut data = array![\n        0x1, 0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0, 0x1,\n        0xeb1167b367a9c3787c65c1e582e2e662, 0xf7c1bd874da5e709d4713d60c8a70639, 0x2,\n        0xc20f5aa13afc3a2097ce088b, 0x50220928f8ca04bf313c1d7, 0x70743ffac9bb07f9, 0x0,\n        0xfa42792834ae5445fcaca832, 0x6796f84b7340adf44ed49d33, 0x62fd8a76eedcb778, 0x0,\n        0x100000000000000006d17da9dde38d3aa, 0x100000000000000008e0801a3d001f325, 0x87ea3597eb650e8,\n        0xe42d003a1f0e89bd,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xc20f5aa13afc3a2097ce088b,\n                limb1: 0x50220928f8ca04bf313c1d7,\n                limb2: 0x70743ffac9bb07f9,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xfa42792834ae5445fcaca832,\n                limb1: 0x6796f84b7340adf44ed49d33,\n                limb2: 0x62fd8a76eedcb778,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\nfn test_msm_SECP256K1_2P() {\n    let mut data = array![\n        0x2, 0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0,\n        0xfdfdc509f368ba4395773d3a, 0x8de2b60b577a13d0f83b578e, 0xc2dd970269530ba2, 0x0,\n        0x589fa250d638e35400c12ddf, 0xb3aac19fcb5095808402aa7f, 0xed6de6590d0195d1, 0x0, 0x2,\n        0xe443df789558867f5ba91faf7a024204, 0x23a7711a8133287637ebdcd9e87a1613,\n        0x1846d424c17c627923c6612f48268673, 0xfcbd04c340212ef7cca5a5a19e4d6e3c, 0x2,\n        0x889ef9db2dcca93176722661, 0x30f90e4e5ea1e991ccf9dd07, 0xe840f7e9e3d96c65, 0x0,\n        0x6b95984b663cf4ffcd07d9c7, 0x952dac88c6a40f73979028d6, 0xc5e5fd89e078d389, 0x0,\n        0x4bab076cac43472e, 0x896dcc1031d19f2d, 0x100000000000000006f45630d920758e7,\n        0x13bfcc5670fee7eb, 0xef8bfd5fa527215c20165899, 0x7e263c9c3df47bc32eb4890b,\n        0x9a3ee712d779bbf1, 0x0, 0x7d54e9e980c0873b3755c17e, 0x22a963dcae22fec5cacd5431,\n        0x817adf30a086d140, 0x0, 0x40c3f72fa123bad6, 0x461e3a87e8955f53, 0x53ec0e0286c9f6ad,\n        0x1000000000000000074832ec5bb09d4f6,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x97ad9ae598203a75c13a895,\n                limb1: 0xed9fb4bee5b2f54ca5cffb42,\n                limb2: 0x284782b62d08871c,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xfb082c65dab4069694f90f18,\n                limb1: 0xb12d25f5fb5e746c12686571,\n                limb2: 0x7d0eb16046d10c7e,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\nfn test_msm_SECP256K1_3P() {\n    let mut data = array![\n        0x3, 0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0,\n        0xfdfdc509f368ba4395773d3a, 0x8de2b60b577a13d0f83b578e, 0xc2dd970269530ba2, 0x0,\n        0x589fa250d638e35400c12ddf, 0xb3aac19fcb5095808402aa7f, 0xed6de6590d0195d1, 0x0,\n        0x2965eeb3ec1fe786a6abe874, 0x33e2545f82bb6add02788b8e, 0xf586bc0db335d7b8, 0x0,\n        0x155b35991489db2fdf4de620, 0xf24ce461346a182d67eeccf0, 0xb4122bb4b37cc7d5, 0x0, 0x3,\n        0x1846d424c17c627923c6612f48268673, 0xfcbd04c340212ef7cca5a5a19e4d6e3c,\n        0xb4862b21fb97d43588561712e8e5216a, 0x259f4329e6f4590b9a164106cf6a659e,\n        0x12e0c8b2bad640fb19488dec4f65d4d9, 0x5487ce1eaf19922ad9b8a714e61a441c, 0x2,\n        0xa9ca5eaf239f624e5f32d52c, 0xe8781b10ffc1e9d6b65fcf8e, 0xa99e25b10243bc1b, 0x0,\n        0x48c471108b3d056fc7043965, 0xa13fee6c99e702aaa40e511e, 0x3dabf3e8f614a3e, 0x0,\n        0x40c3f72fa123bad6, 0x461e3a87e8955f53, 0x53ec0e0286c9f6ad,\n        0x1000000000000000074832ec5bb09d4f6, 0x280f3fa841c7bf6d615bcb53, 0x276795ef2ecbbe7e2012f4cd,\n        0x81043aa56aa2d4a, 0x0, 0x6ed67d338a2a9b542f54ec66, 0x6b2b2546eb3b1938441381f5,\n        0x4dbf81ca0dfc9cdf, 0x0, 0x100000000000000008a16fd00888d3c49,\n        0x10000000000000000701b1de1a64611a5, 0x7bb19b6adc4d85f4, 0x2fd5ac7d0446c0d3,\n        0x8a41f2a7e7ad4089990a1bcd, 0xec1d1ff466f58331529b0acd, 0x5649d8d001330363, 0x0,\n        0xfc543db1835e8a78f0994291, 0x43c390ccae632a174f607c8a, 0x813ee8122c9dfa7b, 0x0,\n        0x7f7b9792bad13df8, 0xf56d08780b0b13f5, 0x535b7499f702bf5d, 0xce3ee818c4660dc,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x793f03cb81255db0817da454,\n                limb1: 0x5ed27cf7207443f37bfeee3c,\n                limb2: 0x42943c6416752a12,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xf2d25838b8b95a3caaef5ce4,\n                limb1: 0xce58bfff9d25e997305603f3,\n                limb2: 0x5d776495b03d0b6c,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256K1_4P() {\n    let mut data = array![\n        0x4, 0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0,\n        0xfdfdc509f368ba4395773d3a, 0x8de2b60b577a13d0f83b578e, 0xc2dd970269530ba2, 0x0,\n        0x589fa250d638e35400c12ddf, 0xb3aac19fcb5095808402aa7f, 0xed6de6590d0195d1, 0x0,\n        0x2965eeb3ec1fe786a6abe874, 0x33e2545f82bb6add02788b8e, 0xf586bc0db335d7b8, 0x0,\n        0x155b35991489db2fdf4de620, 0xf24ce461346a182d67eeccf0, 0xb4122bb4b37cc7d5, 0x0,\n        0x12815740835b12f70b96c66f, 0xbfa76a8b80aec9f2e31c40cc, 0xcd8a26d17d33c7c1, 0x0,\n        0x9a8f496f09402b8fd6beb89b, 0x28e48918dad2123d7f202bef, 0xcdd11b6ffb3f8614, 0x0, 0x4,\n        0xb4862b21fb97d43588561712e8e5216a, 0x259f4329e6f4590b9a164106cf6a659e,\n        0x12e0c8b2bad640fb19488dec4f65d4d9, 0x5487ce1eaf19922ad9b8a714e61a441c,\n        0x5a92118719c78df48f4ff31e78de5857, 0xa3f2c9bf9c6316b950f244556f25e2a2,\n        0x8d723104f77383c13458a748e9bb17bc, 0x85776e9add84f39e71545a137a1d5006, 0x2,\n        0x7c5bbcc9341cd7fab6ad4876, 0x3c6a25a05d905654bd812731, 0xf473dbb400e14df5, 0x0,\n        0x5f748642ae1443931d093af4, 0xddca2248291c024312127d87, 0xbbb00af8a51cc511, 0x0,\n        0x100000000000000008a16fd00888d3c49, 0x10000000000000000701b1de1a64611a5,\n        0x7bb19b6adc4d85f4, 0x2fd5ac7d0446c0d3, 0xd548dda6e1f541d784d4c228,\n        0x3bc7fbd282f26a90865b5b09, 0x3b648ed118007c3, 0x0, 0x5a28118c93a1de7664b1d6ba,\n        0x919d9a3d5dfce3b255589541, 0x883bab5b394b16cf, 0x0, 0x7f7b9792bad13df8, 0xf56d08780b0b13f5,\n        0x535b7499f702bf5d, 0xce3ee818c4660dc, 0xbc08950bb2cf7b7d9eeda922,\n        0xb2b86106457dfc8ec9cffb7e, 0xe835a6fda5354661, 0x0, 0xdca7ee443dbdfb5bab9335d5,\n        0x1e062663e3974b0f7b798cb4, 0x37d153aaefa189f2, 0x0, 0x5aba5c5df852e79b,\n        0x10000000000000000a37bff5d07f4f628, 0x399451b7748ce4b8,\n        0x1000000000000000006a4728421f58565, 0xa46be4f636be4779570df4e8, 0x7380a6e3dc3aa91b3650ca10,\n        0x3ef088ac9bc45c0e, 0x0, 0xce7710a9c0715f82fea0f76a, 0xf51283a23eaaaca518d43319,\n        0x5069f990b18886d0, 0x0, 0xa5ba5bf9830a178c, 0xf8d715433d751f7e,\n        0x1000000000000000001b585fab6a98780, 0x100000000000000001ee3ebda652c4c63,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xafc19dabd2b0bef1f47a78e4,\n                limb1: 0x64c8cfa2f6ce21bd45380a70,\n                limb2: 0xd6ec71e82872d984,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x1afed7037f7e7362dceb03ec,\n                limb1: 0x149013c6ed7333d6e4ded96a,\n                limb2: 0xaf1489c5a6180b55,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256K1_10P() {\n    let mut data = array![\n        0xa, 0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0,\n        0xfdfdc509f368ba4395773d3a, 0x8de2b60b577a13d0f83b578e, 0xc2dd970269530ba2, 0x0,\n        0x589fa250d638e35400c12ddf, 0xb3aac19fcb5095808402aa7f, 0xed6de6590d0195d1, 0x0,\n        0x2965eeb3ec1fe786a6abe874, 0x33e2545f82bb6add02788b8e, 0xf586bc0db335d7b8, 0x0,\n        0x155b35991489db2fdf4de620, 0xf24ce461346a182d67eeccf0, 0xb4122bb4b37cc7d5, 0x0,\n        0x12815740835b12f70b96c66f, 0xbfa76a8b80aec9f2e31c40cc, 0xcd8a26d17d33c7c1, 0x0,\n        0x9a8f496f09402b8fd6beb89b, 0x28e48918dad2123d7f202bef, 0xcdd11b6ffb3f8614, 0x0,\n        0xb5076be8537cff2a42c6db68, 0x1066d40cbd01a3752e4e069c, 0x123ec2fd302cb0f9, 0x0,\n        0xc85f5e5efdf415f8081bf53f, 0xadc5010e9d9ac6c64000d33d, 0xf81314011d8852e4, 0x0,\n        0xd5915098d3d2001310b0b935, 0x88bb4507ebf1be82cfba2397, 0x8a463f1c00ce885f, 0x0,\n        0x414858f8a83f9d4498890137, 0xa09c4658c47ace74c42cdb60, 0x8aaf300ff3ab7d98, 0x0,\n        0x1772eb803ddc8a82e23b1c05, 0xc26baeb89b03fd69eb64b337, 0x4ea7131b2d873a45, 0x0,\n        0xc9d16330db15efd90235eed9, 0x1b586ef360673d36baa16189, 0xee652d2b848ad111, 0x0,\n        0x68f9e7942638253f3b596f1f, 0xb37e6153d9accd97a344f384, 0xda48eae9ff614551, 0x0,\n        0xc58be8ed857035b34f51c620, 0x3b14ed53116cb7c1db000006, 0x7dfa292fe99b77dd, 0x0,\n        0xf7f7bd2513c1b31de932bbd2, 0x627e2fa74b7ac891f7d555c7, 0x7f8a094f818e7192, 0x0,\n        0x9b47b9326b668e62071faf18, 0xe21058cb6937afa89be6931a, 0x21a4bfb4cce2ac8c, 0x0,\n        0xaf4ad4d7d582b10b14c97e6c, 0xadf808c85e766e997e470fd0, 0x2714571e587ce46d, 0x0,\n        0x86a7815dad7e8a53b19fee2, 0x1922fc1efcc51e68146ffa1b, 0x9e19b7c1f886488e, 0x0, 0xa,\n        0xd3fbf47a7e5b1e7f9ca5499d004ae545, 0xbaf3897a3e70f16a55485822de1b372a,\n        0x101fbcccded733e8b421eaeb534097ca, 0x38c1962e9148624feac1c14f30e9c5cc,\n        0x247a8333f7b0b7d2cda8056c3d15eef7, 0x1759edc372ae22448b0163c1cd9d2b7d,\n        0xe005b86051ef1922fe43c49e149818d1, 0x7d41e602eece328bff7b118e820865d6,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x552f233a8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x8c1745a79a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x5129fb7c6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x870e15c2fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0xadc0da7a16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x148b2758d7ab792809e469e6ec62b2c8, 0x2,\n        0x278357bca21047e53cebcc8a, 0x5e183af032bbb7d3addb0053, 0x69f0f0d699ad0da, 0x0,\n        0x4f4baec4857a9e113c4bc046, 0x59934dd81f724602c55be112, 0x8ce0ab262b3c3676, 0x0,\n        0x2ef5cbfbef5479e9, 0x6fffb6b3d9f3ca00, 0xf99949f846de0180, 0x19226f35ed7d16dd,\n        0xb153c64d6f19ccd0278c6b94, 0x398a04c551fc8f74aa610c1, 0x2d39d1e12f83b407, 0x0,\n        0x8feed9f3a486593099594eab, 0x2571bc5e1f54fbed340811bf, 0xbbd2a19c5275b47c, 0x0,\n        0x8950a7e57cb188c3, 0x915677115b4cd35f, 0x10000000000000000adff605ec8f8e9b5,\n        0x10000000000000000ebfc6d2272e97ea1, 0x4caef24e507f272f30b7c823, 0x5273dc9feb3629a58072cedb,\n        0x2854b0b223aa71f0, 0x0, 0xac66b42ece626c4bf206c037, 0xc8b1c6f40a2edf407ce41397,\n        0x7c13db0a671e8662, 0x0, 0xa5060dbc57d602fe, 0x6914b48dc0c5534, 0x1b984728b0823ac8,\n        0x10000000000000000040e1ff5866bad1f, 0xc0ea96b4755baeb8090366aa, 0xcbfcbba1c8e0c3aa488fe399,\n        0xb1f7eea21e3d2ebe, 0x0, 0x769b003ec5b35afb7a3a9dbb, 0x2a28c3b33652ef6083180502,\n        0xb8a171b80bdab536, 0x0, 0x100000000000000007cbe66bb133fe6dc,\n        0x10000000000000000f0156c908c9d979c, 0x6b7c419ad9ed10d3, 0x1007811bd8c66050,\n        0x196c84114c4e6fd84943ae10, 0xb2b1bfb6e4a2d665b61a30e8, 0x3f7696cdb3ac6c, 0x0,\n        0x532d5b9de002db8f9775590d, 0x113ca5d5d68dbb4ad52542cb, 0xd4ebd6d9511abbd8, 0x0,\n        0x100000000000000001ee58c7660c5446b, 0x6ec3e8f177762e53,\n        0x100000000000000004538bd9c129bed52, 0x10000000000000000680a1770588f346e,\n        0x7d64eea8c9bb0b269ceb0809, 0x35432fa6ed8233fa1a176ea9, 0x4bb75b24119f877, 0x0,\n        0x68c57d7b2100616b5d4f104e, 0x8f4d438beb46139b440e571a, 0x3e63373ef063d4df, 0x0,\n        0x31b70045caadb0df, 0x3c110d9c03771d4f, 0x10000000000000000d3c49e4016b7ecb4,\n        0x10000000000000000cc890a6969b1a6e8, 0x2b695a4e6347bbe52bec6d29, 0xdd7ea9c6e862c5502f09e620,\n        0x94eed93be116d060, 0x0, 0xdbc07e9625599f80c1d400b, 0x33ba3da84dfdc5a2156437fc,\n        0x5baa7e2b8dd19cf3, 0x0, 0x22c35f43afc49a04, 0x267ff348a27461d3, 0x4a5f5d7ebb83d89c,\n        0x100000000000000002481d409cb1131a6, 0x25d13d57845635a3e479c501, 0x4bf3cea4d7858ac08ea61048,\n        0xeb01baa639087890, 0x0, 0xbf474987bdb67ad514ce70d, 0x25fa6f5fd0491ecf3c292ad7,\n        0xc7fdc6797752a36f, 0x0, 0x7c6ad3604c315150, 0x100000000000000002bc61778337cab95,\n        0xa8c3d96ce6c35e35, 0x79d7ca1b47402407, 0xc67a7a0c9df3fdf85ec5e7bb,\n        0x5670672aadc54cf37a60ad0f, 0xa123dd3cd9abff2, 0x0, 0x7df5d7f0d76e984c5f7c7d1b,\n        0x28ea2c9960be29367b03d650, 0x217ad558610431f, 0x0, 0x4dcbb5eb0dd68cef, 0x85c36b384754ae7e,\n        0x100000000000000006cb2ed250bb203bb, 0x100000000000000004be1fd4931e473e2,\n        0x5d40472f64481ec66b6dfdcb, 0xd9d5a457d4f31dcc2466d69c, 0x449dc00f6eae442, 0x0,\n        0x6c92237c0eb59cbc2c25069c, 0x11d28a7835aabe323b14a8c6, 0x921e2140e6ae64cd, 0x0,\n        0x1000000000000000065147afbdc695a04, 0x10000000000000000018d0e419fe453c3,\n        0x1000000000000000032ded75d2eb0eb80, 0x10000000000000000ee7c926d371453c4,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x1c835913f9cca4833f4dee66,\n                limb1: 0x192924721b46c95f86539366,\n                limb2: 0xb6324fc7eea725e5,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x1655ccd2f516c24c8b23cd23,\n                limb1: 0x5a78708d282fbf676e9eafa4,\n                limb2: 0x8f71e12b03a69c94,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256K1_11P() {\n    let mut data = array![\n        0xb, 0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0,\n        0xfdfdc509f368ba4395773d3a, 0x8de2b60b577a13d0f83b578e, 0xc2dd970269530ba2, 0x0,\n        0x589fa250d638e35400c12ddf, 0xb3aac19fcb5095808402aa7f, 0xed6de6590d0195d1, 0x0,\n        0x2965eeb3ec1fe786a6abe874, 0x33e2545f82bb6add02788b8e, 0xf586bc0db335d7b8, 0x0,\n        0x155b35991489db2fdf4de620, 0xf24ce461346a182d67eeccf0, 0xb4122bb4b37cc7d5, 0x0,\n        0x12815740835b12f70b96c66f, 0xbfa76a8b80aec9f2e31c40cc, 0xcd8a26d17d33c7c1, 0x0,\n        0x9a8f496f09402b8fd6beb89b, 0x28e48918dad2123d7f202bef, 0xcdd11b6ffb3f8614, 0x0,\n        0xb5076be8537cff2a42c6db68, 0x1066d40cbd01a3752e4e069c, 0x123ec2fd302cb0f9, 0x0,\n        0xc85f5e5efdf415f8081bf53f, 0xadc5010e9d9ac6c64000d33d, 0xf81314011d8852e4, 0x0,\n        0xd5915098d3d2001310b0b935, 0x88bb4507ebf1be82cfba2397, 0x8a463f1c00ce885f, 0x0,\n        0x414858f8a83f9d4498890137, 0xa09c4658c47ace74c42cdb60, 0x8aaf300ff3ab7d98, 0x0,\n        0x1772eb803ddc8a82e23b1c05, 0xc26baeb89b03fd69eb64b337, 0x4ea7131b2d873a45, 0x0,\n        0xc9d16330db15efd90235eed9, 0x1b586ef360673d36baa16189, 0xee652d2b848ad111, 0x0,\n        0x68f9e7942638253f3b596f1f, 0xb37e6153d9accd97a344f384, 0xda48eae9ff614551, 0x0,\n        0xc58be8ed857035b34f51c620, 0x3b14ed53116cb7c1db000006, 0x7dfa292fe99b77dd, 0x0,\n        0xf7f7bd2513c1b31de932bbd2, 0x627e2fa74b7ac891f7d555c7, 0x7f8a094f818e7192, 0x0,\n        0x9b47b9326b668e62071faf18, 0xe21058cb6937afa89be6931a, 0x21a4bfb4cce2ac8c, 0x0,\n        0xaf4ad4d7d582b10b14c97e6c, 0xadf808c85e766e997e470fd0, 0x2714571e587ce46d, 0x0,\n        0x86a7815dad7e8a53b19fee2, 0x1922fc1efcc51e68146ffa1b, 0x9e19b7c1f886488e, 0x0,\n        0x17bc74c409191a2b2249d987, 0xf4fe5f79db38f3064f7d093e, 0x3536ce04295e2a42, 0x0,\n        0xb1d36a10f008c1c24de1ad7d, 0xa4f2190c71ee5e0ff07c48f8, 0x21c1a2d4cfff3233, 0x0, 0xb,\n        0x101fbcccded733e8b421eaeb534097ca, 0x38c1962e9148624feac1c14f30e9c5cc,\n        0x247a8333f7b0b7d2cda8056c3d15eef7, 0x1759edc372ae22448b0163c1cd9d2b7d,\n        0xe005b86051ef1922fe43c49e149818d1, 0x7d41e602eece328bff7b118e820865d6,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x552f233a8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x8c1745a79a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x5129fb7c6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x870e15c2fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0xadc0da7a16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x148b2758d7ab792809e469e6ec62b2c8,\n        0xd450fe4aec4f217bb306d1a8e5eeac76, 0xd67e55fd642bfa42aef9c00b8a64c1b9,\n        0x85940927468ff53d864a7a50b48d73f1, 0x37176e84d977e9933c49d76fcfc6e625, 0x2,\n        0x7a385b48241ff9b7472584bc, 0xfb86d85d87b00caed733ad64, 0xa1b750a9ad42265e, 0x0,\n        0x3c91608638f07e6b127effa, 0xbeb39c70848314492f0b1e9c, 0xba02c3181f197560, 0x0,\n        0x8950a7e57cb188c3, 0x915677115b4cd35f, 0x10000000000000000adff605ec8f8e9b5,\n        0x10000000000000000ebfc6d2272e97ea1, 0x17404de3e819f065de7c1017, 0x536d661a4644833c20a0cb4,\n        0x1f70dd88b20f7871, 0x0, 0x1aaa9311df61995c80ac577e, 0xa164780ea8788997ea2c423f,\n        0x83592576e08cd1fc, 0x0, 0xa5060dbc57d602fe, 0x6914b48dc0c5534, 0x1b984728b0823ac8,\n        0x10000000000000000040e1ff5866bad1f, 0x20ff56624796b65fd048677d, 0xe383e9098b0d38b210aecacc,\n        0xc935268d99a6ed4f, 0x0, 0xa4c981a051c154841b31dd75, 0x13a468f6a24a22757a8a9380,\n        0x3d65cc664e17a287, 0x0, 0x100000000000000007cbe66bb133fe6dc,\n        0x10000000000000000f0156c908c9d979c, 0x6b7c419ad9ed10d3, 0x1007811bd8c66050,\n        0x72ce4e4dc43d1db4a97b15eb, 0x9ac63f1462d8befc6ff716f2, 0xdd1b010de89e6bc9, 0x0,\n        0xc040c8c28bb16bed1cb5c089, 0xdb44fcda4787ab558fea8dd4, 0xd22d7176551ddc90, 0x0,\n        0x100000000000000001ee58c7660c5446b, 0x6ec3e8f177762e53,\n        0x100000000000000004538bd9c129bed52, 0x10000000000000000680a1770588f346e,\n        0xd7ed39d04214f124fb9a5454, 0x86156f125d3f2fd0836c41f4, 0x5b9651563d384ca0, 0x0,\n        0x1b663c9b6d949019c972b35f, 0x57c5020ee6fa7595d7ff9733, 0x34a8daa071411071, 0x0,\n        0x31b70045caadb0df, 0x3c110d9c03771d4f, 0x10000000000000000d3c49e4016b7ecb4,\n        0x10000000000000000cc890a6969b1a6e8, 0xfd20e510eb06b6b6cd26caa1, 0x4ed7a07b13deb87f778930b1,\n        0xf32b6d3cca1243b3, 0x0, 0x3cc0c83359b0da6a89b90f6f, 0xcc2ad62f07d5162679f1aead,\n        0xfab1a759721ba470, 0x0, 0x22c35f43afc49a04, 0x267ff348a27461d3, 0x4a5f5d7ebb83d89c,\n        0x100000000000000002481d409cb1131a6, 0x7ab94096eb99e777f21f264a, 0x2833b6cb1e9b57aca3255927,\n        0xe9577cffafa96848, 0x0, 0x211e8205578e14223b57d0e, 0x7524d5e57dfb8062ee504b92,\n        0x699257546ab9c7fc, 0x0, 0x7c6ad3604c315150, 0x100000000000000002bc61778337cab95,\n        0xa8c3d96ce6c35e35, 0x79d7ca1b47402407, 0xaa1d36523b9bbf173e28862b,\n        0x5cef005c976b645423a14da0, 0x5457f1479f27d0c4, 0x0, 0x6e15d05091cef49e6e490159,\n        0xebc02df9a0a4608fe67588c1, 0x23eaba74cbb63d26, 0x0, 0x4dcbb5eb0dd68cef, 0x85c36b384754ae7e,\n        0x100000000000000006cb2ed250bb203bb, 0x100000000000000004be1fd4931e473e2,\n        0x910d0a96046e92b7cd582798, 0xbff23854f39adfd43e26c5d4, 0xb51e917d6c662c76, 0x0,\n        0x292829fd70bf0df94c146d72, 0xdca27ae811d3ebc462421967, 0x1b2a813516fdba2c, 0x0,\n        0x1000000000000000065147afbdc695a04, 0x10000000000000000018d0e419fe453c3,\n        0x1000000000000000032ded75d2eb0eb80, 0x10000000000000000ee7c926d371453c4,\n        0xe5fe5d19f302b11f287cc8be, 0x247647c30315ec0eb6056189, 0x9de7876737227ed5, 0x0,\n        0xf98723a6e18a798271d5b545, 0x58f73113c3451ed86535f3f2, 0x7c4449246418862d, 0x0,\n        0x100000000000000000139803cda63f3ba, 0x1000000000000000016b7cf2653dc74a8,\n        0x1089abd09e19fd5df, 0xc69eeeb967755694, 0xfdaa8c8434c1fdf1f6736acd,\n        0xbb1563781b62fc9b97ec831c, 0x4a33d42ad138f3ae, 0x0, 0x61cfb29de0788d394e459f95,\n        0x4c2cf12dc88f92c32a6186ae, 0xa44f474e566f0d73, 0x0, 0x4f62e61d803963a6, 0x6f08b65992670489,\n        0x67cea05dbb9a909d, 0x96fb2bd0b03403bc,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x64fc5a7a1dbb0ded5877d244,\n                limb1: 0x690efd6ba8db4b9093e04859,\n                limb2: 0x4a95e2ad2036bb89,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x787161946cccf45a982322c8,\n                limb1: 0xfb559d2c2a26b632cf7c2894,\n                limb2: 0x4ed9af33445b7a3f,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256K1_12P() {\n    let mut data = array![\n        0xc, 0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0,\n        0xfdfdc509f368ba4395773d3a, 0x8de2b60b577a13d0f83b578e, 0xc2dd970269530ba2, 0x0,\n        0x589fa250d638e35400c12ddf, 0xb3aac19fcb5095808402aa7f, 0xed6de6590d0195d1, 0x0,\n        0x2965eeb3ec1fe786a6abe874, 0x33e2545f82bb6add02788b8e, 0xf586bc0db335d7b8, 0x0,\n        0x155b35991489db2fdf4de620, 0xf24ce461346a182d67eeccf0, 0xb4122bb4b37cc7d5, 0x0,\n        0x12815740835b12f70b96c66f, 0xbfa76a8b80aec9f2e31c40cc, 0xcd8a26d17d33c7c1, 0x0,\n        0x9a8f496f09402b8fd6beb89b, 0x28e48918dad2123d7f202bef, 0xcdd11b6ffb3f8614, 0x0,\n        0xb5076be8537cff2a42c6db68, 0x1066d40cbd01a3752e4e069c, 0x123ec2fd302cb0f9, 0x0,\n        0xc85f5e5efdf415f8081bf53f, 0xadc5010e9d9ac6c64000d33d, 0xf81314011d8852e4, 0x0,\n        0xd5915098d3d2001310b0b935, 0x88bb4507ebf1be82cfba2397, 0x8a463f1c00ce885f, 0x0,\n        0x414858f8a83f9d4498890137, 0xa09c4658c47ace74c42cdb60, 0x8aaf300ff3ab7d98, 0x0,\n        0x1772eb803ddc8a82e23b1c05, 0xc26baeb89b03fd69eb64b337, 0x4ea7131b2d873a45, 0x0,\n        0xc9d16330db15efd90235eed9, 0x1b586ef360673d36baa16189, 0xee652d2b848ad111, 0x0,\n        0x68f9e7942638253f3b596f1f, 0xb37e6153d9accd97a344f384, 0xda48eae9ff614551, 0x0,\n        0xc58be8ed857035b34f51c620, 0x3b14ed53116cb7c1db000006, 0x7dfa292fe99b77dd, 0x0,\n        0xf7f7bd2513c1b31de932bbd2, 0x627e2fa74b7ac891f7d555c7, 0x7f8a094f818e7192, 0x0,\n        0x9b47b9326b668e62071faf18, 0xe21058cb6937afa89be6931a, 0x21a4bfb4cce2ac8c, 0x0,\n        0xaf4ad4d7d582b10b14c97e6c, 0xadf808c85e766e997e470fd0, 0x2714571e587ce46d, 0x0,\n        0x86a7815dad7e8a53b19fee2, 0x1922fc1efcc51e68146ffa1b, 0x9e19b7c1f886488e, 0x0,\n        0x17bc74c409191a2b2249d987, 0xf4fe5f79db38f3064f7d093e, 0x3536ce04295e2a42, 0x0,\n        0xb1d36a10f008c1c24de1ad7d, 0xa4f2190c71ee5e0ff07c48f8, 0x21c1a2d4cfff3233, 0x0,\n        0xef493bf7016f192140ec0c20, 0x489bc5a24a83819834b3c08c, 0xcccdd6728670ed1e, 0x0,\n        0xb2d8f23e9b244453602fae5a, 0x76fafc92aa2ea44429a3050e, 0xc6c6fb7c62dc6c2f, 0x0, 0xc,\n        0x247a8333f7b0b7d2cda8056c3d15eef7, 0x1759edc372ae22448b0163c1cd9d2b7d,\n        0xe005b86051ef1922fe43c49e149818d1, 0x7d41e602eece328bff7b118e820865d6,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x552f233a8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x8c1745a79a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x5129fb7c6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x870e15c2fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0xadc0da7a16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x148b2758d7ab792809e469e6ec62b2c8,\n        0xd450fe4aec4f217bb306d1a8e5eeac76, 0xd67e55fd642bfa42aef9c00b8a64c1b9,\n        0x85940927468ff53d864a7a50b48d73f1, 0x37176e84d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x467437419466e4726b5f5241f323ca74,\n        0xa425799aa905d7507e1ea9c573581a81, 0xfb82860deabca8d0b341facdff0ac0f1, 0x2,\n        0xa87e6d457192ad65d259e791, 0x9228287912a17822cfae6f8f, 0x622e90ac5ea25d59, 0x0,\n        0xef651884d008a32a2d116a87, 0xbdc4cdc9a1445b7005e4b44c, 0xdf1337bf8228bb28, 0x0,\n        0xa5060dbc57d602fe, 0x6914b48dc0c5534, 0x1b984728b0823ac8,\n        0x10000000000000000040e1ff5866bad1f, 0x48ff078b363f5d94cc9f63eb, 0x115c8cf2a38d0da440ebcbae,\n        0x1b816a5e72b58557, 0x0, 0xfb6369ff14a7b85e6d35f7bf, 0x4e00e50aca1aa90a598bd7b3,\n        0x8e70e3f336057410, 0x0, 0x100000000000000007cbe66bb133fe6dc,\n        0x10000000000000000f0156c908c9d979c, 0x6b7c419ad9ed10d3, 0x1007811bd8c66050,\n        0x8780bf2048f368173bec0c07, 0x5be44a71954e17bc36eccfd5, 0x4236fb0e86bcdf32, 0x0,\n        0x8ec2eb1532b2b96c14bebef9, 0x7b980c967373d71a38ebf92, 0xb4336cf34bb238f5, 0x0,\n        0x100000000000000001ee58c7660c5446b, 0x6ec3e8f177762e53,\n        0x100000000000000004538bd9c129bed52, 0x10000000000000000680a1770588f346e,\n        0x2b4f07edf389acd027af1e2b, 0xab8850651076565399b13fb, 0x501f99d468b51a7e, 0x0,\n        0x8d3259be568e4af9d34e488a, 0x11366602fb75ddb2a230c632, 0x2eb403dd3d7fa0e8, 0x0,\n        0x31b70045caadb0df, 0x3c110d9c03771d4f, 0x10000000000000000d3c49e4016b7ecb4,\n        0x10000000000000000cc890a6969b1a6e8, 0xf1d15e674b76c9d0cb85672c, 0x2e8098be6d52b92e20c98bab,\n        0x8acdee9ae1736d12, 0x0, 0x24f1249583774bb75801caa3, 0xaead17e1dc834bd1a624ac48,\n        0x6a22bf5e98d9d9b7, 0x0, 0x22c35f43afc49a04, 0x267ff348a27461d3, 0x4a5f5d7ebb83d89c,\n        0x100000000000000002481d409cb1131a6, 0x3494a03c71f4399881fd8880, 0x6ac1b4b6ca039c3d1286e70e,\n        0xf2d9a056ea050a57, 0x0, 0xeaf37f80878445372361b216, 0xd41e8bc2aadf12bbc38751ef,\n        0xa79a8a4e997661e5, 0x0, 0x7c6ad3604c315150, 0x100000000000000002bc61778337cab95,\n        0xa8c3d96ce6c35e35, 0x79d7ca1b47402407, 0x6b284c5645d14cd1e45ce41d,\n        0xef7365195e7be14a08d63f9, 0x79ebfed96dcb4d8c, 0x0, 0xa32f8ed8fc4e2819dbf5d354,\n        0xbe62aa24eb445342493fb1c4, 0xdcc7ad508612f5f4, 0x0, 0x4dcbb5eb0dd68cef, 0x85c36b384754ae7e,\n        0x100000000000000006cb2ed250bb203bb, 0x100000000000000004be1fd4931e473e2,\n        0x13b1bbb13f7da105749db0c7, 0x65d1c3c7fbdeb2befeb39fec, 0x24e9141cf844f065, 0x0,\n        0xfbb506c8ebd4fc51735b3359, 0x6319c6fb9d75f3f8d0fb8575, 0xc49721294a562789, 0x0,\n        0x1000000000000000065147afbdc695a04, 0x10000000000000000018d0e419fe453c3,\n        0x1000000000000000032ded75d2eb0eb80, 0x10000000000000000ee7c926d371453c4,\n        0x93c576094dc85b72f72c8832, 0x654b95f3c73106a0d4381f75, 0xd731fce177c83fd9, 0x0,\n        0xabbb1b3a35e3d538325af014, 0x259217577cc285a6b83953ee, 0x6383caf5d18c3339, 0x0,\n        0x100000000000000000139803cda63f3ba, 0x1000000000000000016b7cf2653dc74a8,\n        0x1089abd09e19fd5df, 0xc69eeeb967755694, 0xfb261e5abbce9c6f9a27475e,\n        0x60775102ab55d73e343fc464, 0x92ed6dd8fd0f867a, 0x0, 0xf5668dbab0802c48eca685fb,\n        0xe0ee5cbcf3dda9b624126e28, 0xd133f8ecb79a5748, 0x0, 0x4f62e61d803963a6, 0x6f08b65992670489,\n        0x67cea05dbb9a909d, 0x96fb2bd0b03403bc, 0xdb5b96b385bbefcb8a8381ba,\n        0x356746189fa0ba9f09af67fb, 0xb0aa6be9137e6b04, 0x0, 0x504768e8026a92690411fdf1,\n        0x8f2862bfadfa61b926a651c7, 0xa2b129ae94ecfbc0, 0x0, 0x903c783ffbbcfae,\n        0x10000000000000000a9647c65c4885765, 0x100000000000000004b4be4ce034de996,\n        0x8fc19cd46a492745, 0x278a81bdcc0f4f0f1b17c004, 0xf44d7e6bc07af6f2ee512475,\n        0x999ae67b5d65554a, 0x0, 0x6f57b1bfa3ea31cc6d8812f7, 0x709574ee1724876336af416d,\n        0x6b54f96429ec82f6, 0x0, 0x984e110d1ee38dcc, 0x1000000000000000004d4f2a3b925c2b8,\n        0x1000000000000000008b29d4fa5dec6e5, 0x100000000000000004e45715b78d9bfec,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x37558e45b8041762de768836,\n                limb1: 0x5d514037c232b89fb7a06905,\n                limb2: 0x2515485638a3a199,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xb85967bc1c9cde890f6a236f,\n                limb1: 0xeece653858fb74a34a817724,\n                limb2: 0x71995703660dd489,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_ED25519_1P() {\n    let mut data = array![\n        0x1, 0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xf046f8cd6e5a75fca71dd19b, 0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0, 0x1,\n        0xb4862b21fb97d43588561712e8e5216a, 0x4b3e865e6f4590b9a164106cf6a659e, 0x4,\n        0x62c2b89a3152e22243cf864d, 0xaf83913cf31609fd7b4f9a32, 0x6da9a48b077c3954, 0x0,\n        0xa54703c64365ab4373eae904, 0x87e47f46101c003371e14338, 0x462e50d88b5b5c17, 0x0,\n        0x21ef407bea1953254c1bc318a0af2527, 0x1c147c0993c84eed5f426b94b3350045,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x62c2b89a3152e22243cf864d,\n                limb1: 0xaf83913cf31609fd7b4f9a32,\n                limb2: 0x6da9a48b077c3954,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xa54703c64365ab4373eae904,\n                limb1: 0x87e47f46101c003371e14338,\n                limb2: 0x462e50d88b5b5c17,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_ED25519_2P() {\n    let mut data = array![\n        0x2, 0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xf046f8cd6e5a75fca71dd19b, 0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0,\n        0x82e4a33f8e4e5881e791d86b, 0xbcb062435ae8ec5fdaeac4bf, 0x179e1bae9e0f9f34, 0x0,\n        0x19657783ba5660e255c21849, 0x7ed7474bcea7551fc71e46bc, 0x596c0a76b75f4756, 0x0, 0x2,\n        0x12e0c8b2bad640fb19488dec4f65d4d9, 0xa90f9c3af19922ad9b8a714e61a441c,\n        0xeb2083e6ce164dba0ff18e0242af9fc3, 0x2fc154703983ca8ea7e9d498c778ea6, 0x4,\n        0xcd7471596402adb99c204f6a, 0x71072cc6a799ca5492c35787, 0xaaecc4b08ca80c, 0x0,\n        0x9df62dff1b19647a74925491, 0xcff3a8ebb8f88bfdab94c62, 0x7561a9c9a4e6450a, 0x0,\n        0x211c4f690d00cb3af0b34c381ddf6429, 0x10dbbf233e0f266b14c85329c2440c426,\n        0x20b84e815be93309f3490609, 0xcddf2646d9499c09fa01ac80, 0x47a3d45b5433479c, 0x0,\n        0x257b7612e4301ed9448341a6, 0x4f3236c077377add9253d652, 0x3b0d15e6632e50c, 0x0,\n        0x3242668a77ced3cb6ca4b87c1b759c91, 0x128e825972592d2a632df711368a1c105,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x78cd6990a813b6a2588ccb19,\n                limb1: 0xcb57433fd1eaa5787491656f,\n                limb2: 0x70e4c58e64e4a9f3,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x428873cad69986b7befbd0f0,\n                limb1: 0x5dde16f78dd45ec0c5a51f9d,\n                limb2: 0x67295fe953f1c748,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_ED25519_3P() {\n    let mut data = array![\n        0x3, 0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xf046f8cd6e5a75fca71dd19b, 0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0,\n        0x82e4a33f8e4e5881e791d86b, 0xbcb062435ae8ec5fdaeac4bf, 0x179e1bae9e0f9f34, 0x0,\n        0x19657783ba5660e255c21849, 0x7ed7474bcea7551fc71e46bc, 0x596c0a76b75f4756, 0x0,\n        0xa6832ef7fe97f77de7cd9a62, 0xf18a70dbf1dc5a76c685da4a, 0x6ac1b7bfc409119f, 0x0,\n        0x7751161b1a9ef600b865a5af, 0xed28aad4835a39a9e8318ceb, 0x572e95c429f0e07a, 0x0, 0x3,\n        0xeb2083e6ce164dba0ff18e0242af9fc3, 0x2fc154703983ca8ea7e9d498c778ea6,\n        0x101fbcccded733e8b421eaeb534097ca, 0x71832c59148624feac1c14f30e9c5cc,\n        0x247a8333f7b0b7d2cda8056c3d15eef7, 0x2eb3db872ae22448b0163c1cd9d2b7d, 0x4,\n        0xac2b5804f3b5ea6a7c385142, 0x67878b88a9a9d518e06d811c, 0x4549187a243009c8, 0x0,\n        0x77b113304bc4ddbb1d09761d, 0xdeac72115bc7d3e18f4a0a72, 0x52c6b8f99ceb4be4, 0x0,\n        0x3242668a77ced3cb6ca4b87c1b759c91, 0x128e825972592d2a632df711368a1c105,\n        0xd4eecb0109a013892abd75e5, 0x167aa57abaa882be1301e3dd, 0x2457e48112697980, 0x0,\n        0xb26742ddc3687f7d8983bc6e, 0xc6eb0f3fd431dccb4cd39680, 0x31fb690012ae0317, 0x0,\n        0x25b58a4ace1755dfa44b5f1f5d91fdcb, 0x23fa824d04875112a551d6ef70fef39,\n        0x6444144efd61c928f158778, 0x90d9eaffbf7e696c0b22614, 0x6879c7c3d7314db0, 0x0,\n        0xd6ae7f02956e20ce1359317d, 0x3545b77c84a0952ba44fa34, 0x54c416a35489a439, 0x0,\n        0x46f42706c0113ff0ccf72fe8f742fd2, 0x1035b8cd8e980519d9ab6ef3f50ee8fa9,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x9292b7770106624b91a73738,\n                limb1: 0x2c9a7c1a0496485effe3922e,\n                limb2: 0x7cc025fefaaec43f,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x44e571d5378b2d6e5b1d7114,\n                limb1: 0x5d34cb1a17260d862ef07e73,\n                limb2: 0x3d6ee7ee0c8df451,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_ED25519_4P() {\n    let mut data = array![\n        0x4, 0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xf046f8cd6e5a75fca71dd19b, 0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0,\n        0x82e4a33f8e4e5881e791d86b, 0xbcb062435ae8ec5fdaeac4bf, 0x179e1bae9e0f9f34, 0x0,\n        0x19657783ba5660e255c21849, 0x7ed7474bcea7551fc71e46bc, 0x596c0a76b75f4756, 0x0,\n        0xa6832ef7fe97f77de7cd9a62, 0xf18a70dbf1dc5a76c685da4a, 0x6ac1b7bfc409119f, 0x0,\n        0x7751161b1a9ef600b865a5af, 0xed28aad4835a39a9e8318ceb, 0x572e95c429f0e07a, 0x0,\n        0x5e71d0fc5d1c016834779173, 0xadd002dfc0ebf1b25c23c252, 0x40a868d928ae5233, 0x0,\n        0x423fa293418d6e3f59c2e830, 0x7a4bcf26f93e71ffd903e68e, 0x7837b851ad8da6e3, 0x0, 0x4,\n        0x101fbcccded733e8b421eaeb534097ca, 0x71832c59148624feac1c14f30e9c5cc,\n        0x247a8333f7b0b7d2cda8056c3d15eef7, 0x2eb3db872ae22448b0163c1cd9d2b7d,\n        0xe005b86051ef1922fe43c49e149818d1, 0xfa83cc0eece328bff7b118e820865d6,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0xaa5e4678c25166a1ff39849b4e1357d, 0x4,\n        0x338e295a7da6c8dc47afeb59, 0x93a4ff4ae149504868278a09, 0x418e9170913c0f5b, 0x0,\n        0x5b20ca7e0ef2c05cc66e6a84, 0xdc8feaa2fc336cdbce46f0fa, 0x5e556f7c5bd833ed, 0x0,\n        0x25b58a4ace1755dfa44b5f1f5d91fdcb, 0x23fa824d04875112a551d6ef70fef39,\n        0xdf877be8a80fdde7e3b855b0, 0x91e54f2f86bd9262717e6b75, 0x7062334bd4c7b885, 0x0,\n        0x9320d417f7513821af6e0284, 0x96ed52f40e0c8b60098260d8, 0xf8afa50615dfd75, 0x0,\n        0x46f42706c0113ff0ccf72fe8f742fd2, 0x1035b8cd8e980519d9ab6ef3f50ee8fa9,\n        0xfeec5e7debf32dad5e019ae9, 0x8bf005c9328632982aeaeed2, 0x1933fdb9e8d9ea7a, 0x0,\n        0x56826fcbe77185341a6d2b8f, 0x69cbccb406ae88585a522de9, 0x76fc50497be174d7, 0x0,\n        0x25f8e65eae4eb72e4febaca4a978a32e, 0x3138e75e7839c1e424a845740cd897e1,\n        0xa2afdf272784379c88d18a53, 0x15e4f535a988eb9702bc3741, 0x2317d852a07769d1, 0x0,\n        0x29cd9f41fe12ae23c14fe282, 0x85611a868445899f82b3529c, 0x676eb93f52742f3f, 0x0,\n        0x1efc8eeeff5d60d288b61287fc750073, 0x1205819efd721c8fa9d99528aa8086dd8,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x54e30b1dbc54acd91542088c,\n                limb1: 0x702b532dab377f0636d9f465,\n                limb2: 0x25ee2efd1d7ca3f6,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xd25f547d7c2f7258cbdb9c6b,\n                limb1: 0xcae4d4cae9a1aba26935de1e,\n                limb2: 0x277ff10c5815321e,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_ED25519_10P() {\n    let mut data = array![\n        0xa, 0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xf046f8cd6e5a75fca71dd19b, 0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0,\n        0x82e4a33f8e4e5881e791d86b, 0xbcb062435ae8ec5fdaeac4bf, 0x179e1bae9e0f9f34, 0x0,\n        0x19657783ba5660e255c21849, 0x7ed7474bcea7551fc71e46bc, 0x596c0a76b75f4756, 0x0,\n        0xa6832ef7fe97f77de7cd9a62, 0xf18a70dbf1dc5a76c685da4a, 0x6ac1b7bfc409119f, 0x0,\n        0x7751161b1a9ef600b865a5af, 0xed28aad4835a39a9e8318ceb, 0x572e95c429f0e07a, 0x0,\n        0x5e71d0fc5d1c016834779173, 0xadd002dfc0ebf1b25c23c252, 0x40a868d928ae5233, 0x0,\n        0x423fa293418d6e3f59c2e830, 0x7a4bcf26f93e71ffd903e68e, 0x7837b851ad8da6e3, 0x0,\n        0x5907087f8e8e4dacdd039371, 0xc390e2073b4e64b9ede0570d, 0x6b039a85962f1594, 0x0,\n        0xc45eefa03155b8f7eb780b42, 0x3db57eb22f9b0394a4d7b78e, 0x6cf45b6d90883f60, 0x0,\n        0x60dd8ed0a614b596fb37eb1f, 0xabb99f371be41e26ec2d8e4b, 0x187ecd72c40f159d, 0x0,\n        0x7b66c9263de5e1663622985d, 0x118b032cc27a1d6dd192eca6, 0x312fb405788616e8, 0x0,\n        0xf4ac3e1f1f068dd64c86fdda, 0x24594e591d82a7f964b5ec9f, 0x6ca311b5421c57fc, 0x0,\n        0x42745cd7b146012455434d0f, 0x6aa4f552b7bdc93a613bd9df, 0x5832a065d7199c7a, 0x0,\n        0x341786b7854e3e0104e2e416, 0xbb368441c295043bee7b1d2f, 0x35c88542e11463b4, 0x0,\n        0x3c36e7fcc4e2fde28308132, 0xf58043d0e3d1a36d1f8137fc, 0x58c1508fbe8868a8, 0x0,\n        0x560a37951d69a6c8d7138239, 0x462d454a509846714184ef71, 0x3aaf8fb4f60e3e9c, 0x0,\n        0xb70cea4e13db5322899753f9, 0x6c62656b6d7ffb5c2af44fd5, 0x4b5ae4567dc6a7c0, 0x0,\n        0xb06cccb4b425d5179f528270, 0xce017c281a3861570706cd86, 0x42d14846dc4860ab, 0x0,\n        0x646bf486f6e77663c597ece8, 0xd87c8c36a430a6fe42305b88, 0x7964c7742b6f13da, 0x0, 0xa,\n        0x2648ee38e07405eb215663abc1f254b8, 0x29164ebd7ab792809e469e6ec62b2c8,\n        0x85940927468ff53d864a7a50b48d73f1, 0x6e2edd0d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x8ce86e89466e4726b5f5241f323ca74,\n        0x30bcab0ed857010255d44936a1515607, 0x8ac57cfbb42e0b20426465e3e37952d,\n        0x5f3f563838701a14b490b6081dfc8352, 0xda2ddc3552116dd2ba4b180cb69ca38,\n        0xc87a746319c16a0d0febd845d0dfae43, 0x7003168b29a8b06daf66c5f2577bffa,\n        0x176ea1b164264cd51ea45cd69371a71f, 0x3b6a666fb0323a1d576d4155ec17dbe,\n        0x9edfa3da6cf55b158b53031d05d51433, 0x23d79a9428a1c22d5fdb76a19fbeb1d,\n        0x4d125e7fa59cec98126cbc8f38884479, 0x1f40f472e2950656fa231e959acdd98,\n        0x98b33c6e0a14b90a7795e98680ee526e, 0xc8555a9fcfcfa81b306d70019d5f970, 0x4,\n        0xb51ed06dd615b64d198d6b40, 0xc6014a9ec6d192c15f73d83, 0x4236ece07ab7f046, 0x0,\n        0x8f62a668da7f4862606fc8ee, 0xc2af7ed7c76e0384d7f30cb1, 0x2ee4a538de1cb3e1, 0x0,\n        0x109e48ca918759429cee2d75a919bf, 0x254dce38863be7379de4e89912d39a24,\n        0xd64052a1c3dddd0acfc5f6de, 0x81b4284ddeec997a06f7adbb, 0x2a3e2e0b8b6db118, 0x0,\n        0xeb1fb40ed774d5a5a932cbcd, 0x69a12cf14a2add045b8a6b2a, 0x5b9b707cde7cba42, 0x0,\n        0x62af3a314ed8541630e74b78e9f03a0, 0x3e5106e138112347fd7dbb662f3fb959,\n        0x76a17d0e9a7acdde761cf17e, 0x9df10374167580666440f792, 0x71e338c631665afe, 0x0,\n        0xa37e8ec892cfd84673ff810f, 0x4ff99d688a4d76e5fae62c7c, 0x10ab842e4b509be8, 0x0,\n        0x100999da2383a787fc58bce955201c59, 0x2d492fcea91c7b9e8fa3931db543fa13,\n        0x9c40d5ca5c4f37890bb899f8, 0x39b20e332317d1cc680cac6b, 0x2c9116e237dcd2c2, 0x0,\n        0xee4f6acf3ccd375ceb6fda83, 0x82a46494eb678a382d67337b, 0xa451fa8fc325a99, 0x0,\n        0x2be10b93bdf768ae7778b99191b2cf05, 0x19d5b37430b75b04d20856a7ba530478,\n        0xde61d931ad4af1b6aa3b7420, 0xebfb852ab0963b3bd6b97d01, 0x62f2626356a4e691, 0x0,\n        0x311bab2cac0350b9be3e7c11, 0x213c4209753d44f212a6085f, 0x7ef9ef4df118cf30, 0x0,\n        0x306359e58443dc9fa7b677c05b67bc03, 0x22f5c652ce175682bece3c707b7f0c64,\n        0xc22428dd359a4d97677d1a2a, 0x6a403588ae0f11e6852c9003, 0x265ca2a9c81b7fcd, 0x0,\n        0x41e8bf26a5f61a80ed2a1a4f, 0x4816633adc2e1a1ecbdefd13, 0x78d97cf47703cd10, 0x0,\n        0x1af8531e7421e1b5fc3f282922950413, 0x12802c684a9d9ebd5f6c8d17c2c0dce9a,\n        0xf78d57c527f35f5b17341ad, 0x9b93fae1633f0f504ea60e41, 0x23373872d46eb70b, 0x0,\n        0x654177c81ab44be525fc8a10, 0xcf56847d39c0dc1808c5626c, 0x692fda489d9ad018, 0x0,\n        0x3e15cff10f1609922ab32f8f9278107, 0x10a16e8bfef9be00041b12d3df0ab90d2,\n        0x32ffdcb0ebe78606cfda3864, 0x810f43c0463b6222100c039d, 0x2676d3d3af79c942, 0x0,\n        0xe20135efdb9ce9d0b1f0b087, 0x16a1b8a19bb224519871ad10, 0x54b74ede0f974b53, 0x0,\n        0x2be5e02dea43047daaed4fbaf06fafca, 0x1de6096b4f0d2f729b2b56af6ca9e273,\n        0x1395db0ef36c4e2931f84d21, 0x27adbaec38ab1b5c362047ca, 0x39e135d80347ccff, 0x0,\n        0xddfc395884c79d27da8fb121, 0x3ed6197d9e6d701775f0b246, 0x4f49fa341a6be18, 0x0,\n        0x5e0ad7648a4f59729af8617b82d4b15, 0x1204a5942db3ff32572d539505799c162,\n        0xfed466728e21ebb6ec730686, 0x4c84b97d2b2b549c0205e93d, 0x6d18c143ec437b75, 0x0,\n        0x1375c64d45b624c9fcbbbfc7, 0xa154d66ebcc37fc1b61f1bd0, 0x35765a06dfd06c00, 0x0,\n        0x1bb625624ceab37b75f8eb6d9baaec37, 0x8869d6e2bfcd45999b706e500bdf6e9,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x9dd56ed7fdf1e5a3e9cbb3b5,\n                limb1: 0xd0df8ca018c550bbd230f67,\n                limb2: 0x75b3c38a01fed369,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xa1bb56d8c1b7c9598a692c1c,\n                limb1: 0xc940b96f597931f22e3c4b07,\n                limb2: 0x41ca6082f12494f3,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_ED25519_11P() {\n    let mut data = array![\n        0xb, 0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xf046f8cd6e5a75fca71dd19b, 0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0,\n        0x82e4a33f8e4e5881e791d86b, 0xbcb062435ae8ec5fdaeac4bf, 0x179e1bae9e0f9f34, 0x0,\n        0x19657783ba5660e255c21849, 0x7ed7474bcea7551fc71e46bc, 0x596c0a76b75f4756, 0x0,\n        0xa6832ef7fe97f77de7cd9a62, 0xf18a70dbf1dc5a76c685da4a, 0x6ac1b7bfc409119f, 0x0,\n        0x7751161b1a9ef600b865a5af, 0xed28aad4835a39a9e8318ceb, 0x572e95c429f0e07a, 0x0,\n        0x5e71d0fc5d1c016834779173, 0xadd002dfc0ebf1b25c23c252, 0x40a868d928ae5233, 0x0,\n        0x423fa293418d6e3f59c2e830, 0x7a4bcf26f93e71ffd903e68e, 0x7837b851ad8da6e3, 0x0,\n        0x5907087f8e8e4dacdd039371, 0xc390e2073b4e64b9ede0570d, 0x6b039a85962f1594, 0x0,\n        0xc45eefa03155b8f7eb780b42, 0x3db57eb22f9b0394a4d7b78e, 0x6cf45b6d90883f60, 0x0,\n        0x60dd8ed0a614b596fb37eb1f, 0xabb99f371be41e26ec2d8e4b, 0x187ecd72c40f159d, 0x0,\n        0x7b66c9263de5e1663622985d, 0x118b032cc27a1d6dd192eca6, 0x312fb405788616e8, 0x0,\n        0xf4ac3e1f1f068dd64c86fdda, 0x24594e591d82a7f964b5ec9f, 0x6ca311b5421c57fc, 0x0,\n        0x42745cd7b146012455434d0f, 0x6aa4f552b7bdc93a613bd9df, 0x5832a065d7199c7a, 0x0,\n        0x341786b7854e3e0104e2e416, 0xbb368441c295043bee7b1d2f, 0x35c88542e11463b4, 0x0,\n        0x3c36e7fcc4e2fde28308132, 0xf58043d0e3d1a36d1f8137fc, 0x58c1508fbe8868a8, 0x0,\n        0x560a37951d69a6c8d7138239, 0x462d454a509846714184ef71, 0x3aaf8fb4f60e3e9c, 0x0,\n        0xb70cea4e13db5322899753f9, 0x6c62656b6d7ffb5c2af44fd5, 0x4b5ae4567dc6a7c0, 0x0,\n        0xb06cccb4b425d5179f528270, 0xce017c281a3861570706cd86, 0x42d14846dc4860ab, 0x0,\n        0x646bf486f6e77663c597ece8, 0xd87c8c36a430a6fe42305b88, 0x7964c7742b6f13da, 0x0,\n        0x52c487a17925c92335926072, 0x13155d04b743220ba9c4dd31, 0x1106c832e8e52057, 0x0,\n        0xbc69df5aa9a21ba08f160d5f, 0xc207c95ac5d454f546b05fc3, 0x574515b32b35f440, 0x0, 0xb,\n        0x85940927468ff53d864a7a50b48d73f1, 0x6e2edd0d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x8ce86e89466e4726b5f5241f323ca74,\n        0x30bcab0ed857010255d44936a1515607, 0x8ac57cfbb42e0b20426465e3e37952d,\n        0x5f3f563838701a14b490b6081dfc8352, 0xda2ddc3552116dd2ba4b180cb69ca38,\n        0xc87a746319c16a0d0febd845d0dfae43, 0x7003168b29a8b06daf66c5f2577bffa,\n        0x176ea1b164264cd51ea45cd69371a71f, 0x3b6a666fb0323a1d576d4155ec17dbe,\n        0x9edfa3da6cf55b158b53031d05d51433, 0x23d79a9428a1c22d5fdb76a19fbeb1d,\n        0x4d125e7fa59cec98126cbc8f38884479, 0x1f40f472e2950656fa231e959acdd98,\n        0x98b33c6e0a14b90a7795e98680ee526e, 0xc8555a9fcfcfa81b306d70019d5f970,\n        0xebe2136898c752051e01a934402d0baf, 0x6c2a492cc0f859aa6524ab713b7e05,\n        0x637e0edc5b6e4ae7a62081434fbaecc0, 0x4e8c1e4403d1f83a859890cd670f668, 0x4,\n        0x8d9da7701d08684a79c3c9a, 0x7b0faee9af3327934d090e7b, 0x151533e6a0b794f9, 0x0,\n        0xac7e4649ec69e08fa2aa440b, 0xd82ea8c5365beebbfc40ecc, 0x38290dcf3704f737, 0x0,\n        0x62af3a314ed8541630e74b78e9f03a0, 0x3e5106e138112347fd7dbb662f3fb959,\n        0x78f18f4fb87ce5e32a5ac01, 0x84e0525afbc64b068cb6e83f, 0x679bfbb0e8f543d, 0x0,\n        0x6fc9c69b7f2a72ee149372db, 0x5365848854ebf2c4cc13846c, 0x159f12f1f03023c3, 0x0,\n        0x100999da2383a787fc58bce955201c59, 0x2d492fcea91c7b9e8fa3931db543fa13,\n        0x9c5453b82378379d24968334, 0xfd07ecb3fa7e01e989a2c80e, 0x2abb3011d1e59739, 0x0,\n        0x70aab3462dc41390fb5d5945, 0x370b9445bf570bbc08f08c5e, 0x5a10e78a2d5b49fe, 0x0,\n        0x2be10b93bdf768ae7778b99191b2cf05, 0x19d5b37430b75b04d20856a7ba530478,\n        0xe20e3a8f807f193989382239, 0x3ab3cda492b3306dc2b43c41, 0x6c0baedb36072eff, 0x0,\n        0xd3c4bb13b9e5e81a81545d4e, 0xd51c83211a5f2730fbba7376, 0x4a495b6570c26a1e, 0x0,\n        0x306359e58443dc9fa7b677c05b67bc03, 0x22f5c652ce175682bece3c707b7f0c64,\n        0x6e30168d06be82ea3d69d68a, 0xda5ae968ed031509a07db5ea, 0x5762b3c39c6fe86f, 0x0,\n        0x74419c84014bf3e0732f88a3, 0x838840e4c0101d2d3541fb62, 0x74c06cf05074141d, 0x0,\n        0x1af8531e7421e1b5fc3f282922950413, 0x12802c684a9d9ebd5f6c8d17c2c0dce9a,\n        0xbb52092c3e73614686ee83b5, 0xf204cfa0ed9c00d274e448af, 0x588759dedfb95ed, 0x0,\n        0x13596038783eaa2228a4350d, 0x8ae684504a218717c9e052a4, 0x5bd31f41a2d7a4e4, 0x0,\n        0x3e15cff10f1609922ab32f8f9278107, 0x10a16e8bfef9be00041b12d3df0ab90d2,\n        0x8df66128d3c7762f2e4ddc59, 0x183a5335a9b651a5d1e85f56, 0x1619dd97c40a41f0, 0x0,\n        0x552c3d261e98b36a60543610, 0x24f4791bbcdc4290045ca9c, 0x3c7f7ce3551d7fdd, 0x0,\n        0x2be5e02dea43047daaed4fbaf06fafca, 0x1de6096b4f0d2f729b2b56af6ca9e273,\n        0xbf23cd7c25b12a0d92c6b1c2, 0x821033c574b23f4fbc286f90, 0xfa21edaab8d6f72, 0x0,\n        0xc9ac857dc9f3d10bbb9e967c, 0x644a0414354d3a76d9c25fdd, 0x51b76f634c812ae6, 0x0,\n        0x5e0ad7648a4f59729af8617b82d4b15, 0x1204a5942db3ff32572d539505799c162,\n        0xcf1ad31679ec4c27e3830f3a, 0xa017f3868f913c86551ad885, 0x314bccf1c49a9154, 0x0,\n        0x3fbe277240930e0039b24d90, 0x44c3f435ed00859eaef40526, 0xaf4e10850bd6cb6, 0x0,\n        0x1bb625624ceab37b75f8eb6d9baaec37, 0x8869d6e2bfcd45999b706e500bdf6e9,\n        0x9008bb2465decd0de32e352b, 0xde20aad12ffa049c38c36b98, 0x7f70d611ad868171, 0x0,\n        0xe1e028e0788998638bf9bac7, 0xfa52b231caf7768fab52216a, 0x597888666ca85946, 0x0,\n        0x4f7c63b27ca63da0b0528098af0dab, 0xf35e51f8509ab42e70f2e964b3fd8c,\n        0x93dd0836e7e13591e646d775, 0x165ef3a2c6f0a3c905a9eb74, 0x41d60538e230bb0, 0x0,\n        0xa8dc2a660b9336e923e82fd8, 0xf329310a470287aef66cbfc9, 0x5d6441cffa1f00d2, 0x0,\n        0x122200117465217fb53ec8140b91481, 0x13d5f8e8fedb409022970ed842b78a9c4,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x1518e158cd20a0734c8395d6,\n                limb1: 0x9e542f72e122bba6f1c46e7,\n                limb2: 0x74cb223a70d329c9,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x779bfa346b625483d1999346,\n                limb1: 0xf6901ab1d5d3d000b7fb3634,\n                limb2: 0x6898c5fa74d3665a,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_ED25519_12P() {\n    let mut data = array![\n        0xc, 0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xf046f8cd6e5a75fca71dd19b, 0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0,\n        0x82e4a33f8e4e5881e791d86b, 0xbcb062435ae8ec5fdaeac4bf, 0x179e1bae9e0f9f34, 0x0,\n        0x19657783ba5660e255c21849, 0x7ed7474bcea7551fc71e46bc, 0x596c0a76b75f4756, 0x0,\n        0xa6832ef7fe97f77de7cd9a62, 0xf18a70dbf1dc5a76c685da4a, 0x6ac1b7bfc409119f, 0x0,\n        0x7751161b1a9ef600b865a5af, 0xed28aad4835a39a9e8318ceb, 0x572e95c429f0e07a, 0x0,\n        0x5e71d0fc5d1c016834779173, 0xadd002dfc0ebf1b25c23c252, 0x40a868d928ae5233, 0x0,\n        0x423fa293418d6e3f59c2e830, 0x7a4bcf26f93e71ffd903e68e, 0x7837b851ad8da6e3, 0x0,\n        0x5907087f8e8e4dacdd039371, 0xc390e2073b4e64b9ede0570d, 0x6b039a85962f1594, 0x0,\n        0xc45eefa03155b8f7eb780b42, 0x3db57eb22f9b0394a4d7b78e, 0x6cf45b6d90883f60, 0x0,\n        0x60dd8ed0a614b596fb37eb1f, 0xabb99f371be41e26ec2d8e4b, 0x187ecd72c40f159d, 0x0,\n        0x7b66c9263de5e1663622985d, 0x118b032cc27a1d6dd192eca6, 0x312fb405788616e8, 0x0,\n        0xf4ac3e1f1f068dd64c86fdda, 0x24594e591d82a7f964b5ec9f, 0x6ca311b5421c57fc, 0x0,\n        0x42745cd7b146012455434d0f, 0x6aa4f552b7bdc93a613bd9df, 0x5832a065d7199c7a, 0x0,\n        0x341786b7854e3e0104e2e416, 0xbb368441c295043bee7b1d2f, 0x35c88542e11463b4, 0x0,\n        0x3c36e7fcc4e2fde28308132, 0xf58043d0e3d1a36d1f8137fc, 0x58c1508fbe8868a8, 0x0,\n        0x560a37951d69a6c8d7138239, 0x462d454a509846714184ef71, 0x3aaf8fb4f60e3e9c, 0x0,\n        0xb70cea4e13db5322899753f9, 0x6c62656b6d7ffb5c2af44fd5, 0x4b5ae4567dc6a7c0, 0x0,\n        0xb06cccb4b425d5179f528270, 0xce017c281a3861570706cd86, 0x42d14846dc4860ab, 0x0,\n        0x646bf486f6e77663c597ece8, 0xd87c8c36a430a6fe42305b88, 0x7964c7742b6f13da, 0x0,\n        0x52c487a17925c92335926072, 0x13155d04b743220ba9c4dd31, 0x1106c832e8e52057, 0x0,\n        0xbc69df5aa9a21ba08f160d5f, 0xc207c95ac5d454f546b05fc3, 0x574515b32b35f440, 0x0,\n        0x4f068c66f642eed6b2a9cf28, 0x5cde9d21988aa8eed49fbe13, 0x5847165150f2b16b, 0x0,\n        0xdf6b306bce93c8248de1b0ab, 0x5d126993fea5de605b6d6f73, 0xb2fd0f2d63c2503, 0x0, 0xc,\n        0xd344749096fd35d0adf20806e5214606, 0x8ce86e89466e4726b5f5241f323ca74,\n        0x30bcab0ed857010255d44936a1515607, 0x8ac57cfbb42e0b20426465e3e37952d,\n        0x5f3f563838701a14b490b6081dfc8352, 0xda2ddc3552116dd2ba4b180cb69ca38,\n        0xc87a746319c16a0d0febd845d0dfae43, 0x7003168b29a8b06daf66c5f2577bffa,\n        0x176ea1b164264cd51ea45cd69371a71f, 0x3b6a666fb0323a1d576d4155ec17dbe,\n        0x9edfa3da6cf55b158b53031d05d51433, 0x23d79a9428a1c22d5fdb76a19fbeb1d,\n        0x4d125e7fa59cec98126cbc8f38884479, 0x1f40f472e2950656fa231e959acdd98,\n        0x98b33c6e0a14b90a7795e98680ee526e, 0xc8555a9fcfcfa81b306d70019d5f970,\n        0xebe2136898c752051e01a934402d0baf, 0x6c2a492cc0f859aa6524ab713b7e05,\n        0x637e0edc5b6e4ae7a62081434fbaecc0, 0x4e8c1e4403d1f83a859890cd670f668,\n        0x2284b7a447e7f5938b5885ca0bb2c3f0, 0xf6b20a3f40048d7c31d5a973d792fa1,\n        0xc5adf6816b10e53a9145de05b3ab1b2c, 0x54d35980bf9c0efb5816b74a985ab61, 0x4,\n        0xfa06825a3970e5b2395be2b, 0x4e5a7ba3551df3652d46082d, 0xcfca9a525fe359, 0x0,\n        0x4b5b3f76f46f535ef91e563e, 0x7966c4c81669a7d88fb8ff47, 0x5319f116c45c71a8, 0x0,\n        0x100999da2383a787fc58bce955201c59, 0x2d492fcea91c7b9e8fa3931db543fa13,\n        0x7f99cd69e93181300ddb085a, 0x2a1d1771927bbfe32603da8b, 0x1b74f12f3379df06, 0x0,\n        0x9c6622f17ebe2c6e5ff51ed2, 0x204fecff8a5332121c431d6c, 0x5aef5ec5cb6f461e, 0x0,\n        0x2be10b93bdf768ae7778b99191b2cf05, 0x19d5b37430b75b04d20856a7ba530478,\n        0xfb04ee0dc3febe0615ddb0f8, 0xdb1a0ab954022ed49344333d, 0xc954e46c5b77f1, 0x0,\n        0x9ce91f8ebf3d15bd8a382b6e, 0xdfabad49441c0d28944c6b9c, 0x50386dc8735ea9aa, 0x0,\n        0x306359e58443dc9fa7b677c05b67bc03, 0x22f5c652ce175682bece3c707b7f0c64,\n        0x4a3eb763e06c59a43ee29389, 0x1bccf75e9f35eef7529a1ef5, 0x10fda802117cdfa6, 0x0,\n        0xa7ef2ec0616f2443afd7cfbb, 0xd9cea79fbf13150fc3cd14eb, 0x4716f7e70987aa10, 0x0,\n        0x1af8531e7421e1b5fc3f282922950413, 0x12802c684a9d9ebd5f6c8d17c2c0dce9a,\n        0x8d97858df9c229a8d620899, 0x7db5c765b658f7a25710c917, 0xcf309068ad0dba9, 0x0,\n        0x910500da56aeb50040a7dcc4, 0x3f3a644f90034e28ba18da95, 0x175ed58aa3954930, 0x0,\n        0x3e15cff10f1609922ab32f8f9278107, 0x10a16e8bfef9be00041b12d3df0ab90d2,\n        0x979bd1588dea18a8b58a36af, 0x3b2b0ed61e1178cba7126bb7, 0x785cdb331bd169df, 0x0,\n        0xfa4fe3f5b031c72c034663a2, 0xb0e20f66408902c55e655ba1, 0x75bd7b3b090eed75, 0x0,\n        0x2be5e02dea43047daaed4fbaf06fafca, 0x1de6096b4f0d2f729b2b56af6ca9e273,\n        0x3fce6566c5bcd92f4f85fa83, 0x623822e4a6f44b0bf23c8675, 0x6e423031e41718c0, 0x0,\n        0x16cc5bb608bc6da0bdb24659, 0x14a20f3a350b3c92c8985f2c, 0x62b6194db85582a7, 0x0,\n        0x5e0ad7648a4f59729af8617b82d4b15, 0x1204a5942db3ff32572d539505799c162,\n        0x695752f39d6ec14aacfbee31, 0xf8dd60148b6b6cd713f249de, 0x4ae3fa433428da67, 0x0,\n        0x2fc01927924d2423beeabc84, 0x8d3ab58869e8b96487a1c521, 0x47292b4a7182ce7f, 0x0,\n        0x1bb625624ceab37b75f8eb6d9baaec37, 0x8869d6e2bfcd45999b706e500bdf6e9,\n        0x6474fbdb6af73701de45f274, 0x6094e5f591a45f3bf08427c8, 0x103a5881e0aef8e4, 0x0,\n        0xa14105659db45179803bc1ee, 0xcd28f77e60c994a87a8e0d3d, 0x57e7812e2c87633c, 0x0,\n        0x4f7c63b27ca63da0b0528098af0dab, 0xf35e51f8509ab42e70f2e964b3fd8c,\n        0xa25e04756aa0d3cf7a58d681, 0xf525fde801d661e742afdf23, 0xb8057a3525f95e3, 0x0,\n        0x6423b1c187fb4699d91e7961, 0x97ed6053542a17b2ee5a276d, 0x24f4c3823852a469, 0x0,\n        0x122200117465217fb53ec8140b91481, 0x13d5f8e8fedb409022970ed842b78a9c4,\n        0xc4c0db3983aec6a159c5bc04, 0x5f92edcb20df32b1cfb385f, 0x300014ec8791a43a, 0x0,\n        0x17b89b207ec56f494c10480a, 0x610f69ebee5483ba4bd0d917, 0x2bec654de3ea3a80, 0x0,\n        0x37b10ae5354582f85190f7870b858c63, 0x1316ba5fddb42e06735d0f1fdcc24a38,\n        0x45a14721d6abe459bc5aea8, 0x1568bffaa9565041d7dbaf28, 0x3e6067b9f8935c8, 0x0,\n        0x26d59ad679daa7e759147eba, 0x9503c0a1029b0f7ce7406c4b, 0x3db5661841ebce66, 0x0,\n        0x121b5378cd43ffc919a2305e76423029, 0x18300af219c488c1a25884d5c7401c30,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x4ee4167708b29620b1a9e142,\n                limb1: 0x6fd520385a98769aa6f2e833,\n                limb2: 0x29e58ca78283490e,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xf78829d77fe7c51b0788aa60,\n                limb1: 0x98af3b491451a91c0de5fdab,\n                limb2: 0x4ba4b20ac788a99,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_GRUMPKIN_1P() {\n    let mut data = array![\n        0x1, 0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x371e7b6a5c01505bd4334e81, 0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0, 0x1,\n        0xb4862b21fb97d43588561712e8e5216a, 0x967d0cae6f4590b9a164106cf6a659e, 0x5,\n        0x41c610705003caeb41ebc2e1, 0x7e86ece0ef89d80aca46deac, 0x121b38a9ddb387ef, 0x0,\n        0x5d4d7ed98f7bc32e88ca220f, 0xc1b7d0a1662fc4fbf7fefffe, 0x24a447a3fd6b6dd0, 0x0,\n        0x5520c252aad219e02bf5055a4ed023b7, 0x197e50b8e7adb6dd93eeede129c12721,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x41c610705003caeb41ebc2e1,\n                limb1: 0x7e86ece0ef89d80aca46deac,\n                limb2: 0x121b38a9ddb387ef,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x5d4d7ed98f7bc32e88ca220f,\n                limb1: 0xc1b7d0a1662fc4fbf7fefffe,\n                limb2: 0x24a447a3fd6b6dd0,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_GRUMPKIN_2P() {\n    let mut data = array![\n        0x2, 0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x371e7b6a5c01505bd4334e81, 0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0,\n        0x20669ef12954f8e3bbc8b4d3, 0x396a6f7243c27ce553121ee3, 0x11438ca2ec259aed, 0x0,\n        0xa560a5759c90985fde99aca0, 0xc5b21186cc6dcd0421026513, 0x21fb1f47c6ac55b3, 0x0, 0x2,\n        0x12e0c8b2bad640fb19488dec4f65d4d9, 0x1521f387af19922ad9b8a714e61a441c,\n        0x5a92118719c78df48f4ff31e78de5857, 0x28fcb26f9c6316b950f244556f25e2a2, 0x5,\n        0x32536984a4baf6f115cbb0bd, 0xdae1afb06300dbd4fde0fe2a, 0x1f1896139ffba76b, 0x0,\n        0xdf40e1ffc936ca509fbb16a8, 0xca2a5643c84ea6749543ee4c, 0x29b131b03ad6f119, 0x0,\n        0x39dea48eef47b3e6bcae980c9112d477, 0x538cc4627274d8f320bf5df15c887356,\n        0xc0a469a5b7f47ad22e92fe7d, 0xd7d5b526e50c6900bdcfeb9d, 0x21df2654af8f907c, 0x0,\n        0x19ca14fef97aef829a022e99, 0x3436a3a9d29787ffa53573f3, 0x16d3f0d2e78b2950, 0x0,\n        0x10a2e45b33049f11b360c09b6389565b, 0x63f1d0c59d848c415389772b72561b3d,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x512920e074cbe690304d839e,\n                limb1: 0xb077d5884dbdc5fcb9424a35,\n                limb2: 0x16cd67edce8be7ac,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x70cd2c4a003d407aabc7cc,\n                limb1: 0xe2748dd5f8c2a0e1dadd02d5,\n                limb2: 0x1c1cfa79fda07581,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_GRUMPKIN_3P() {\n    let mut data = array![\n        0x3, 0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x371e7b6a5c01505bd4334e81, 0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0,\n        0x20669ef12954f8e3bbc8b4d3, 0x396a6f7243c27ce553121ee3, 0x11438ca2ec259aed, 0x0,\n        0xa560a5759c90985fde99aca0, 0xc5b21186cc6dcd0421026513, 0x21fb1f47c6ac55b3, 0x0,\n        0x3c26f4ff476ab777dc184776, 0xbccb2cba46cf421f11eb4d14, 0x27ec44064c727a3d, 0x0,\n        0xa893636703904fcbe984618c, 0x73b210a224190b9b7b28784c, 0x20f05486689dff6c, 0x0, 0x3,\n        0x5a92118719c78df48f4ff31e78de5857, 0x28fcb26f9c6316b950f244556f25e2a2,\n        0x8d723104f77383c13458a748e9bb17bc, 0x215ddba6dd84f39e71545a137a1d5006,\n        0xeb2083e6ce164dba0ff18e0242af9fc3, 0x5f82a8f03983ca8ea7e9d498c778ea6, 0x5,\n        0xe7bee0981732826e6716a8b9, 0x8001b0e38269465d6a3ba48f, 0x1a727a8f4b29ab8, 0x0,\n        0x8180b66bf02ff17b607d43de, 0xfaf5d89afaaafcba4c3a43ef, 0xb1992b294551079, 0x0,\n        0x10a2e45b33049f11b360c09b6389565b, 0x63f1d0c59d848c415389772b72561b3d,\n        0x74575ca46c143d22121ea904, 0x77200655d23500648b27cb30, 0xaa0637dd46a67ab, 0x0,\n        0xfe93e7c36bbe7d7cde12c6ac, 0x51cb8066bcd86f62f01ec58, 0x1f28f657f6b9dadd, 0x0,\n        0x4330e45cf056866449d6d2b7255a6d25, 0x102e9d68e73086da22f4b98d2103a3c22,\n        0x2e20c00e88de121d37fa2696, 0x86ac870558aabfae43dc69a0, 0x26095fa9606bf53, 0x0,\n        0x327031fef1203666f47f2099, 0xdb951627a7f45379f1e51f4f, 0x376fe09acf51529, 0x0,\n        0x32cbca2bbd2f37ecb19ba4403b940cc1, 0x12977bae8a28f111cf0a43807982d3bb7,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x213a074a0215934c65d47250,\n                limb1: 0x57ceadf09cd8ebde50476db0,\n                limb2: 0x1f82780f1a4c3d23,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x7282af42d1608d1f8c034960,\n                limb1: 0x81214b248c88a391f72dd6e0,\n                limb2: 0x5df1db744450be3,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_GRUMPKIN_4P() {\n    let mut data = array![\n        0x4, 0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x371e7b6a5c01505bd4334e81, 0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0,\n        0x20669ef12954f8e3bbc8b4d3, 0x396a6f7243c27ce553121ee3, 0x11438ca2ec259aed, 0x0,\n        0xa560a5759c90985fde99aca0, 0xc5b21186cc6dcd0421026513, 0x21fb1f47c6ac55b3, 0x0,\n        0x3c26f4ff476ab777dc184776, 0xbccb2cba46cf421f11eb4d14, 0x27ec44064c727a3d, 0x0,\n        0xa893636703904fcbe984618c, 0x73b210a224190b9b7b28784c, 0x20f05486689dff6c, 0x0,\n        0x74f2a24c1853d803c1b9e310, 0x9e78bb9233603b686b9d27, 0x1d13a84fbcd96e81, 0x0,\n        0xe5bc08950f2f1accd92245f4, 0x3b653bbe7b6cfd9074b07f89, 0x1638a8a07b89463b, 0x0, 0x4,\n        0x8d723104f77383c13458a748e9bb17bc, 0x215ddba6dd84f39e71545a137a1d5006,\n        0xeb2083e6ce164dba0ff18e0242af9fc3, 0x5f82a8f03983ca8ea7e9d498c778ea6,\n        0xb5d32b1666194cb1d71037d1b83e90ec, 0x28045af9ab0c1681c8f8e3d0d3290a4c,\n        0xd3fbf47a7e5b1e7f9ca5499d004ae545, 0x2ebce25e3e70f16a55485822de1b372a, 0x5,\n        0x6463bd58916931d0ac4eb128, 0x36bcb9db9fbc494127d685b9, 0xbe0d59677fd6637, 0x0,\n        0xfdfd5ee62a80a8195a667cd1, 0x8eb9b531d1c1bed421f1d865, 0x2fbd2d2aa811c3e1, 0x0,\n        0x4330e45cf056866449d6d2b7255a6d25, 0x102e9d68e73086da22f4b98d2103a3c22,\n        0x8fd7943c409c6d0b97790c17, 0x6609bc50ae73b6db4a08db2e, 0x1a5a408e625e1019, 0x0,\n        0x56e67a10d45628f5fcf8d390, 0xe19469815ce43c544151b3ac, 0xeb5ad829227a07f, 0x0,\n        0x32cbca2bbd2f37ecb19ba4403b940cc1, 0x12977bae8a28f111cf0a43807982d3bb7,\n        0xd49218ddf86e81250924e4ed, 0xf193c73d0d41e7f71dd4d878, 0x21192796ca5e2dac, 0x0,\n        0xbb5b1bfe4b3be7d06581a624, 0x57281f4af424359f81b5526a, 0x2f72bb4496fb4ce4, 0x0,\n        0x453503237fe891d4168e4f9228c400b7, 0x72e13e861339a4b3dab61e0d640fc66,\n        0x7ec3a5c2c9499344ac050cdd, 0x791b53545bf433b7079614ac, 0x21453b32e9702074, 0x0,\n        0xdb015deb84bb2b7b687999ca, 0xf553ab53e8fed39de94cc1f5, 0x1c73bed188a1cf2f, 0x0,\n        0x3370dc3b2f6a7a7d6a4917e6cae4e0e1, 0x14488bb2a825221dfb2b87de071f1b27c,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x577ddc8cb42b7a3b83e4d525,\n                limb1: 0x74e9415eb1dbca9529930fc,\n                limb2: 0x26b61a5d6d67dd31,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x6cc0d22d0549fc5bbbb24080,\n                limb1: 0x315ae072448564ca12dc062e,\n                limb2: 0x2d218fcb973e8f23,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_GRUMPKIN_10P() {\n    let mut data = array![\n        0xa, 0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x371e7b6a5c01505bd4334e81, 0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0,\n        0x20669ef12954f8e3bbc8b4d3, 0x396a6f7243c27ce553121ee3, 0x11438ca2ec259aed, 0x0,\n        0xa560a5759c90985fde99aca0, 0xc5b21186cc6dcd0421026513, 0x21fb1f47c6ac55b3, 0x0,\n        0x3c26f4ff476ab777dc184776, 0xbccb2cba46cf421f11eb4d14, 0x27ec44064c727a3d, 0x0,\n        0xa893636703904fcbe984618c, 0x73b210a224190b9b7b28784c, 0x20f05486689dff6c, 0x0,\n        0x74f2a24c1853d803c1b9e310, 0x9e78bb9233603b686b9d27, 0x1d13a84fbcd96e81, 0x0,\n        0xe5bc08950f2f1accd92245f4, 0x3b653bbe7b6cfd9074b07f89, 0x1638a8a07b89463b, 0x0,\n        0x549a4dee31909bd274709d7c, 0x2628a928b4ed90e98d5de1f, 0x1f2c2eeb200495b, 0x0,\n        0xbae71f4f781675cce1119290, 0x18995b20b8d0966bac7f5c23, 0x1f7a255155ab7785, 0x0,\n        0x616d2877cb47206e625b0076, 0xa7255531af3575b0a682d6df, 0xdd4a0db8187661d, 0x0,\n        0xea99c54030edacb739c9ad0f, 0x1e2e84792f7a12b330406ecd, 0x70f1e1a9673a240, 0x0,\n        0x4ca9473b8cae66da0baf8eca, 0x9ca627187edabffeb80da281, 0xda800cad866dc3c, 0x0,\n        0x6dcd62554ccd88a00f3e90b3, 0x141b8118cd6873dc9ac01a64, 0x19146bc96fa6a4bd, 0x0,\n        0xd21eca6170588371cf0fef12, 0x2aae89b6d1784d7fe5d6f233, 0x2fa67b7cd137898c, 0x0,\n        0xb20856046d39da92c0a6898a, 0xc9dba030db3ed937e781ae4d, 0x695a8c76fb0f771, 0x0,\n        0x919e8724022c5bd17875261b, 0x3a2b09cc9362be43a8573a0, 0x2cf4abb949016ad7, 0x0,\n        0x89062bf5adf784b526337420, 0xf710d8fb0beb9551fe0e08f3, 0x1577b6c8f024c52d, 0x0,\n        0x2cb6c8386e51647e028876a2, 0x3eeb71e38623705690872fa1, 0xbf610b0d76e1a8f, 0x0,\n        0x92f468ac225e9f9a2b52929d, 0x28e7d79e30f3f4d4abf38c05, 0x2e2ba523e6456871, 0x0, 0xa,\n        0xe005b86051ef1922fe43c49e149818d1, 0x1f507980eece328bff7b118e820865d6,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x154bc8ce8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x2305d1699a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x144a7edf6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x21c38572fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0x2b70369e16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x522c9d6d7ab792809e469e6ec62b2c8,\n        0x85940927468ff53d864a7a50b48d73f1, 0xdc5dba1d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x119d0dd09466e4726b5f5241f323ca74,\n        0x5306f3f5151665705b7c709acb175a5a, 0x2592a1c37c879b741d878f9f9cdf5a86, 0x5,\n        0x32eb30f6f18b90fd2c54a7bc, 0x3c30d2c79fedd11320172c6b, 0x1c24ff684f9b5d37, 0x0,\n        0x30da50af17d999a6e4f507cc, 0x8b68b2e39f2184199c693db6, 0x29406ed67ec36daa, 0x0,\n        0x44a6ec700b7df57842dc495ff54035ab, 0x1a16322818541ea7ff83fb7401b38645,\n        0xf988d8bc102cc5827e4caa0f, 0x49d307fa622f159f155a1d5d, 0x279bbe5814108d5, 0x0,\n        0x8175447243fbd59a37850f7e, 0x97eab11e0760e9d18ebd0279, 0x207bde70fd6ed720, 0x0,\n        0x2f98f4efaa736ab4d7bfb789bfba3055, 0x13cd9b8573802529fd653bb6e0d2b9003,\n        0x52463a5e56dce95d52653f6c, 0xc486275eefc0a3085d30994f, 0x1911dc07106bf4ba, 0x0,\n        0x50eeee6f973b2226963afb66, 0x1afe5cccc2c986ed4ae0d870, 0x1164fff2e2c71e0a, 0x0,\n        0x4bf90ecc32be6be1a6c37a7a9d07c71d, 0xf44e3c518c0a9551bc4adf61e4848ba,\n        0x2704d0e441c6416e0fca2d7c, 0x2210d1dbdbe71c652f93ab45, 0x22a59daf5cbe974b, 0x0,\n        0xfa94c262d139c0ee254542eb, 0x2d6985158d5a69f37216750b, 0x196f95cbe169d63, 0x0,\n        0x5ef24d1d34d20af1accc99a7a47ced7, 0x15a3bf99ae0dc9de808f9f24fc67eb36b,\n        0x90e925805f4e493a98513928, 0x20747869ef32538aca7f3a98, 0x1d9ba510fc4dbce1, 0x0,\n        0x19866ab554bc8233e08b4443, 0xa95c235c28b853948e2ab1bf, 0x167644ace98da43f, 0x0,\n        0x2cb938e8d1c7a21ed6905354bb26d393, 0x5531d3f34afddbea08c69f58e5606d44,\n        0xe8975bf70ea1a1253b0d37d2, 0xc825272fb51f264751b2a16e, 0x82a1f118fcda22c, 0x0,\n        0x2f242762bb612f6c60c0126c, 0x919d79be09b46ad1f5cebf8e, 0x6b9c0cfd4951eec, 0x0,\n        0x60e45e17bea8d8126f02e5a29022aee5, 0x132504ebb936117e97628b682972007b8,\n        0x6fd67ead04596b5005a7175b, 0x9da6449170ac81a2f6cc28a, 0x1413b85981e32e9e, 0x0,\n        0x3ff0bf0cd595a2bd615527a3, 0x94482e2708c6ae32d5bd1b5f, 0xfcfed4eeb170294, 0x0,\n        0x516c64bbee2a8bf42f7414f288f1f846, 0x145799d59f914437c97585c53ceb86623,\n        0xc71e8a64b2f862ae51d2200a, 0x39cef19185293495361def27, 0x2e0a4cb3b5568f75, 0x0,\n        0x85d0d27771793625c874ebbf, 0xce9e91179dc4f4b408181c1f, 0x261a1cca4c19631a, 0x0,\n        0xcefe84e1bdce362a5bd286f90a8b1cb, 0x3717c82dc5b0858c3ba6f188e61330a,\n        0x67427da6ac310253c4305f51, 0x4b8a13108dbfa4be65e8debc, 0x17a3550c4017bb7a, 0x0,\n        0xc1b3b3c0adb4ea9812127500, 0xe8a20b9f8ad97a21e3450200, 0x1dcd89db1920a499, 0x0,\n        0x146dc11c44642a7552be554048969667, 0x1240b81ea23b0099fa77c5be92a2a8286,\n        0xead19fc6d1fe6777fc7fe69f, 0x75f5a9115bf9d3ee7a306806, 0x325b9bf2679afd4, 0x0,\n        0x69479ee6fe51ea5b53a60c39, 0xb467acaf148cd9cc4e51a679, 0x1aa47e4314e976ec, 0x0,\n        0x2024c45822518dadf0322fb9e8b505e1, 0x1581e6419c45af5a4b61bbe76efb6a640,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x664e7a2a841e9440a32b6d19,\n                limb1: 0xafdb5f6d16a62de9213ee040,\n                limb2: 0x13f95a9cdebbf34c,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x7ff039b0dc46b2d7c69d0faf,\n                limb1: 0x2e4a2bd3a50e076ea1b3056,\n                limb2: 0x2dbf12d12987fc34,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_GRUMPKIN_11P() {\n    let mut data = array![\n        0xb, 0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x371e7b6a5c01505bd4334e81, 0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0,\n        0x20669ef12954f8e3bbc8b4d3, 0x396a6f7243c27ce553121ee3, 0x11438ca2ec259aed, 0x0,\n        0xa560a5759c90985fde99aca0, 0xc5b21186cc6dcd0421026513, 0x21fb1f47c6ac55b3, 0x0,\n        0x3c26f4ff476ab777dc184776, 0xbccb2cba46cf421f11eb4d14, 0x27ec44064c727a3d, 0x0,\n        0xa893636703904fcbe984618c, 0x73b210a224190b9b7b28784c, 0x20f05486689dff6c, 0x0,\n        0x74f2a24c1853d803c1b9e310, 0x9e78bb9233603b686b9d27, 0x1d13a84fbcd96e81, 0x0,\n        0xe5bc08950f2f1accd92245f4, 0x3b653bbe7b6cfd9074b07f89, 0x1638a8a07b89463b, 0x0,\n        0x549a4dee31909bd274709d7c, 0x2628a928b4ed90e98d5de1f, 0x1f2c2eeb200495b, 0x0,\n        0xbae71f4f781675cce1119290, 0x18995b20b8d0966bac7f5c23, 0x1f7a255155ab7785, 0x0,\n        0x616d2877cb47206e625b0076, 0xa7255531af3575b0a682d6df, 0xdd4a0db8187661d, 0x0,\n        0xea99c54030edacb739c9ad0f, 0x1e2e84792f7a12b330406ecd, 0x70f1e1a9673a240, 0x0,\n        0x4ca9473b8cae66da0baf8eca, 0x9ca627187edabffeb80da281, 0xda800cad866dc3c, 0x0,\n        0x6dcd62554ccd88a00f3e90b3, 0x141b8118cd6873dc9ac01a64, 0x19146bc96fa6a4bd, 0x0,\n        0xd21eca6170588371cf0fef12, 0x2aae89b6d1784d7fe5d6f233, 0x2fa67b7cd137898c, 0x0,\n        0xb20856046d39da92c0a6898a, 0xc9dba030db3ed937e781ae4d, 0x695a8c76fb0f771, 0x0,\n        0x919e8724022c5bd17875261b, 0x3a2b09cc9362be43a8573a0, 0x2cf4abb949016ad7, 0x0,\n        0x89062bf5adf784b526337420, 0xf710d8fb0beb9551fe0e08f3, 0x1577b6c8f024c52d, 0x0,\n        0x2cb6c8386e51647e028876a2, 0x3eeb71e38623705690872fa1, 0xbf610b0d76e1a8f, 0x0,\n        0x92f468ac225e9f9a2b52929d, 0x28e7d79e30f3f4d4abf38c05, 0x2e2ba523e6456871, 0x0,\n        0x7bfeb500d87c8d6a89e3b500, 0x114bfa8db0c1f0065e73cf9a, 0x129e9c5a3641b28e, 0x0,\n        0x755ef61cf917721bfef36992, 0x8f3d6b6348b89a2c0cfa9d3f, 0x272de7db2186fd11, 0x0, 0xb,\n        0x4a84eb038d1fd9b74d2b9deb1beb3711, 0x154bc8ce8c25166a1ff39849b4e1357d,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x2305d1699a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x144a7edf6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x21c38572fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0x2b70369e16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x522c9d6d7ab792809e469e6ec62b2c8,\n        0x85940927468ff53d864a7a50b48d73f1, 0xdc5dba1d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x119d0dd09466e4726b5f5241f323ca74,\n        0x5306f3f5151665705b7c709acb175a5a, 0x2592a1c37c879b741d878f9f9cdf5a86,\n        0x30bcab0ed857010255d44936a1515607, 0x1158af9fbb42e0b20426465e3e37952d,\n        0x5f3f563838701a14b490b6081dfc8352, 0x1b45bb86552116dd2ba4b180cb69ca38, 0x5,\n        0x82a38d8c5a5ed06e02f523ea, 0x82af79a6bf3ac89993eab3e8, 0x1be27c5dcf4d031, 0x0,\n        0x47cd0a6bf8f3e2719f3676c3, 0xb52e9a47fb56e1d543047f8b, 0x2d0102ccf985e7db, 0x0,\n        0x2f98f4efaa736ab4d7bfb789bfba3055, 0x13cd9b8573802529fd653bb6e0d2b9003,\n        0xfc1dd0e74df0a1a8d64f91ef, 0x7152ce13dd09af9d91af51a5, 0x1f20f94df2d7fe74, 0x0,\n        0x7e05f6cc422c4a84b77ae1c4, 0xce37231b21808d9920cd5380, 0x111ebb3c2386a02a, 0x0,\n        0x4bf90ecc32be6be1a6c37a7a9d07c71d, 0xf44e3c518c0a9551bc4adf61e4848ba,\n        0xa237e5e2279f34d3f8c9d69c, 0xff7f5d3ae502e52c40306b83, 0x1337f2421463490b, 0x0,\n        0x45b6a863b5abf54962d9b884, 0x30a306da962a35989645725e, 0x99a1ae365a1daf2, 0x0,\n        0x5ef24d1d34d20af1accc99a7a47ced7, 0x15a3bf99ae0dc9de808f9f24fc67eb36b,\n        0xb84b0e70b2875bab51e9d89a, 0x2091fcf632cf164d90c07d54, 0x1817470ef8567bdd, 0x0,\n        0x6cfa31ea1faa7f591e0c9898, 0x91ae224d73336f6aea463d10, 0x1a76f383b7ffeff9, 0x0,\n        0x2cb938e8d1c7a21ed6905354bb26d393, 0x5531d3f34afddbea08c69f58e5606d44,\n        0x70b4837532b9116ba15cb044, 0x8dc6e9f1aec52fcb46bbea60, 0x1de8b549ffcc3ab3, 0x0,\n        0x8ebe92f66b5744c974e0ae04, 0xf4f8ffe04323fde3bc621b11, 0x177ac0d85f238570, 0x0,\n        0x60e45e17bea8d8126f02e5a29022aee5, 0x132504ebb936117e97628b682972007b8,\n        0xf69fee0280761794b8af094d, 0x2cab3532c766373f21f01ea1, 0xb2a41c7c05cf495, 0x0,\n        0x47c5682cc4d62cd6a6b5c399, 0xff9caa6f33c1d17ec353d81e, 0x424b8d93bc33ee3, 0x0,\n        0x516c64bbee2a8bf42f7414f288f1f846, 0x145799d59f914437c97585c53ceb86623,\n        0x91abb630ebe86fa5ed36f08, 0x8792ec1248359362df03ea13, 0xa395ae138e67d28, 0x0,\n        0xea244ec29efaa151ea8df973, 0x1066b45d5cfb0ecf6b1c83d, 0x29bc678e1f1a863b, 0x0,\n        0xcefe84e1bdce362a5bd286f90a8b1cb, 0x3717c82dc5b0858c3ba6f188e61330a,\n        0x4e0af46df62ebdf83ef8427a, 0xe920eb4917f8088bed5a0ff1, 0x290d2f419d55f05, 0x0,\n        0xc99e48407b226ca08f8edcd0, 0xa26bf316d4aa7e7801849498, 0xe537c8f794284fb, 0x0,\n        0x146dc11c44642a7552be554048969667, 0x1240b81ea23b0099fa77c5be92a2a8286,\n        0x4e0ff52d69dc8189069ca894, 0xbb8275552c772e2c5ab6a827, 0x304d9f7b60971a3a, 0x0,\n        0x2c86e8197dada4886b64d972, 0x7c82e3ee4a0890e23f95a00e, 0x223e0af0a2ca1d7f, 0x0,\n        0x2024c45822518dadf0322fb9e8b505e1, 0x1581e6419c45af5a4b61bbe76efb6a640,\n        0xd2f1ac9e8e396d2773eb4815, 0xff66e9037c285a85f82cd552, 0x17f35aece5c7a033, 0x0,\n        0xa9f477c2284f410dcf3e9b, 0x4c5370e3920042051b704352, 0x16d56bd7c7796d7c, 0x0,\n        0x32d3a03325ee181cc9c2b39a4e2916d9, 0x219449b8074d447b4f3f2fb27633a5e1,\n        0x85028124eee08fb0e6ef7707, 0x91fb6fec286026bab476ba92, 0x2733c400e9b74caf, 0x0,\n        0x7660634344195f9b47cdb6ca, 0x4fdc765e611b89333602fe6d, 0x1152965b31d3e6b7, 0x0,\n        0xa131e2b48ec3bee1efa6016b50ac441, 0x10c7fd5e62bf48ea70c58c0cfa9a06e45,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xffdf31426d80fe0e0c50bc6c,\n                limb1: 0x3f2ee5e0c6081e2b90431a5d,\n                limb2: 0xee45d84f0c8d969,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xe2ce9a7cc98cfccbbfd0057,\n                limb1: 0xcb704f80e53cbafb61a4cf65,\n                limb2: 0x2249c2809c6b67ce,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_GRUMPKIN_12P() {\n    let mut data = array![\n        0xc, 0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x371e7b6a5c01505bd4334e81, 0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0,\n        0x20669ef12954f8e3bbc8b4d3, 0x396a6f7243c27ce553121ee3, 0x11438ca2ec259aed, 0x0,\n        0xa560a5759c90985fde99aca0, 0xc5b21186cc6dcd0421026513, 0x21fb1f47c6ac55b3, 0x0,\n        0x3c26f4ff476ab777dc184776, 0xbccb2cba46cf421f11eb4d14, 0x27ec44064c727a3d, 0x0,\n        0xa893636703904fcbe984618c, 0x73b210a224190b9b7b28784c, 0x20f05486689dff6c, 0x0,\n        0x74f2a24c1853d803c1b9e310, 0x9e78bb9233603b686b9d27, 0x1d13a84fbcd96e81, 0x0,\n        0xe5bc08950f2f1accd92245f4, 0x3b653bbe7b6cfd9074b07f89, 0x1638a8a07b89463b, 0x0,\n        0x549a4dee31909bd274709d7c, 0x2628a928b4ed90e98d5de1f, 0x1f2c2eeb200495b, 0x0,\n        0xbae71f4f781675cce1119290, 0x18995b20b8d0966bac7f5c23, 0x1f7a255155ab7785, 0x0,\n        0x616d2877cb47206e625b0076, 0xa7255531af3575b0a682d6df, 0xdd4a0db8187661d, 0x0,\n        0xea99c54030edacb739c9ad0f, 0x1e2e84792f7a12b330406ecd, 0x70f1e1a9673a240, 0x0,\n        0x4ca9473b8cae66da0baf8eca, 0x9ca627187edabffeb80da281, 0xda800cad866dc3c, 0x0,\n        0x6dcd62554ccd88a00f3e90b3, 0x141b8118cd6873dc9ac01a64, 0x19146bc96fa6a4bd, 0x0,\n        0xd21eca6170588371cf0fef12, 0x2aae89b6d1784d7fe5d6f233, 0x2fa67b7cd137898c, 0x0,\n        0xb20856046d39da92c0a6898a, 0xc9dba030db3ed937e781ae4d, 0x695a8c76fb0f771, 0x0,\n        0x919e8724022c5bd17875261b, 0x3a2b09cc9362be43a8573a0, 0x2cf4abb949016ad7, 0x0,\n        0x89062bf5adf784b526337420, 0xf710d8fb0beb9551fe0e08f3, 0x1577b6c8f024c52d, 0x0,\n        0x2cb6c8386e51647e028876a2, 0x3eeb71e38623705690872fa1, 0xbf610b0d76e1a8f, 0x0,\n        0x92f468ac225e9f9a2b52929d, 0x28e7d79e30f3f4d4abf38c05, 0x2e2ba523e6456871, 0x0,\n        0x7bfeb500d87c8d6a89e3b500, 0x114bfa8db0c1f0065e73cf9a, 0x129e9c5a3641b28e, 0x0,\n        0x755ef61cf917721bfef36992, 0x8f3d6b6348b89a2c0cfa9d3f, 0x272de7db2186fd11, 0x0,\n        0x499828e9a86afe3b8c909275, 0xb8910cabe37f6e8f4bd4b4c1, 0x2634fe56d6751316, 0x0,\n        0x777228ef48ddade6caeb3c9, 0x6e0e16c7f54463307a858b78, 0x6e2e3e3a1dc83da, 0x0, 0xc,\n        0x3405095c8a5006c1ec188efbd080e66e, 0x2305d1699a6a5f92cca74147f6be1f72,\n        0x1775336d71eacd0549a3e80e966e1277, 0x144a7edf6288e1a5cc45782198a6416d,\n        0x2f1205544a5308cc3dfabc08935ddd72, 0x21c38572fcd81b5d24bace4307bf326,\n        0x42930b33a81ad477fb3675b89cdeb3e6, 0x2b70369e16febaa011af923d79fdef7c,\n        0x2648ee38e07405eb215663abc1f254b8, 0x522c9d6d7ab792809e469e6ec62b2c8,\n        0x85940927468ff53d864a7a50b48d73f1, 0xdc5dba1d977e9933c49d76fcfc6e625,\n        0xd344749096fd35d0adf20806e5214606, 0x119d0dd09466e4726b5f5241f323ca74,\n        0x5306f3f5151665705b7c709acb175a5a, 0x2592a1c37c879b741d878f9f9cdf5a86,\n        0x30bcab0ed857010255d44936a1515607, 0x1158af9fbb42e0b20426465e3e37952d,\n        0x5f3f563838701a14b490b6081dfc8352, 0x1b45bb86552116dd2ba4b180cb69ca38,\n        0xc87a746319c16a0d0febd845d0dfae43, 0xe0062d1b29a8b06daf66c5f2577bffa,\n        0xa25b59fd92e8e269d12ecbc40b9475b1, 0x2689f61688c132adefbfc19ee8f6cf32, 0x5,\n        0xf9033eff6f190d31c0c4211d, 0x5695a5c1624dd1742a3cdfe9, 0x179c263b9b4504b8, 0x0,\n        0x28d168c4ac03deddb2bfced2, 0x70704860340808682034ce25, 0x128005647d6a6d42, 0x0,\n        0x4bf90ecc32be6be1a6c37a7a9d07c71d, 0xf44e3c518c0a9551bc4adf61e4848ba,\n        0x8064a8fdea100eeea33de95e, 0x48241e9bcc914c3f4688d747, 0x36d11122251d0be, 0x0,\n        0xed92f97ad0666c54c0c7c322, 0xb8286940afc6cb2b56a8186f, 0x2998081bd2a6cc53, 0x0,\n        0x5ef24d1d34d20af1accc99a7a47ced7, 0x15a3bf99ae0dc9de808f9f24fc67eb36b,\n        0x9091115a73842d352e7260c2, 0x7c9c3b4234d11be97c3a47c2, 0x20f7f327ca913b6, 0x0,\n        0x554304ae2efdf0b481bef53a, 0x2ec24f5512a59f6d9389adb7, 0xf108022c4d70cb1, 0x0,\n        0x2cb938e8d1c7a21ed6905354bb26d393, 0x5531d3f34afddbea08c69f58e5606d44,\n        0xaf21babf96dd103773c072ef, 0x7ce5ce3522b6ea4c0e3ec87c, 0x949d7f5b6f58cf0, 0x0,\n        0x997fee3b8a7a55ed6c3ce35a, 0x85dc08d63c739254f7cd9e08, 0x1e8720754774e3be, 0x0,\n        0x60e45e17bea8d8126f02e5a29022aee5, 0x132504ebb936117e97628b682972007b8,\n        0x949ac2b0821b3f17297f3379, 0x68229918ea7af402a38533f4, 0x2218e85e6418087f, 0x0,\n        0x8240596af6fd6399672c6fc7, 0x7f7eb048cdb769efa3581400, 0x2300655984a19dfc, 0x0,\n        0x516c64bbee2a8bf42f7414f288f1f846, 0x145799d59f914437c97585c53ceb86623,\n        0xf2116223dcea1035d6598225, 0xec21b290a7a3b366b93dc6c5, 0x19ba2583fa478605, 0x0,\n        0xe2501715d7aa98cae184ce22, 0x23c9c5d67009ad497435a9cd, 0x17f114ad703e0cf1, 0x0,\n        0xcefe84e1bdce362a5bd286f90a8b1cb, 0x3717c82dc5b0858c3ba6f188e61330a,\n        0x6b7bafcd4192510084e8f673, 0x4fac1a2d0116dc53ad2667fa, 0x1ed9f98441a2478c, 0x0,\n        0xf1355b40d63ec40e1e343f5c, 0x4cada2fa0416e8c573e54188, 0x2c486d8ca96cef62, 0x0,\n        0x146dc11c44642a7552be554048969667, 0x1240b81ea23b0099fa77c5be92a2a8286,\n        0x5b9ecbfbecd3454955d82d52, 0xdb7b0c28a61b88ec3874eaf4, 0x1d92b948e287e544, 0x0,\n        0xbc95b0afca3a981ea9d42a63, 0xf6b2fcafda97e7d50eae45a2, 0x67531d1cc994e69, 0x0,\n        0x2024c45822518dadf0322fb9e8b505e1, 0x1581e6419c45af5a4b61bbe76efb6a640,\n        0xeccb4b446b26500e9b2af328, 0x438e22ee4ae8272a0464cc1a, 0x1187394d50486a03, 0x0,\n        0x28bb06c6fbae4aa8769a05e1, 0x3c6ae34464712ecdb77f360f, 0x141ed6d5a2aba61e, 0x0,\n        0x32d3a03325ee181cc9c2b39a4e2916d9, 0x219449b8074d447b4f3f2fb27633a5e1,\n        0x7d2d0722d87337ba712167c5, 0xc3cc9233aa74d73f553e65b6, 0x518142076033a0c, 0x0,\n        0x5669e2a9f99dec284bd9833e, 0x7ff81fdc9b9fe048166702e, 0x23306f377d466ff8, 0x0,\n        0xa131e2b48ec3bee1efa6016b50ac441, 0x10c7fd5e62bf48ea70c58c0cfa9a06e45,\n        0xac500059bd0254354a7eb10d, 0x57846864e2cc212729077c5f, 0x1779a3734e112297, 0x0,\n        0x95dab19850fefcce556c2e45, 0x8508e9c2e5ccb68087e137a9, 0x47ca47056355729, 0x0,\n        0x14a37dd97b695d69cf3442e2c033af3c, 0x21a0482fffb4108132fea168f764c63f,\n        0x6ea786336e5cc29f4f62bb0a, 0xfe31116e59152678d3e658f7, 0x1d659cd996e57821, 0x0,\n        0x7f9bfd31230be6f74a939865, 0xceae5af5704b817d79a4b61e, 0x11c5608e4816db0f, 0x0,\n        0x5396fa1ad3cb506768c58b91578ff06d, 0x542910fa71de1143e977087fee8f6313,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xcb36822ddaf2d31c783a48a,\n                limb1: 0x8bdd749154654edb9553e2d,\n                limb2: 0x27b9db3dc009b797,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x98d17fd0a10d23d8218f14dc,\n                limb1: 0xe9084619146a3dc82331192,\n                limb2: 0xd5e171223497006,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BN254_1P_edge_case() {\n    let mut data = array![\n        0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2,\n        0x0, 0x0, 0x2833e84879b9709143e1f593f0000000, 0x30644e72e131a029b85045b68181585d, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,\n        0x6871ca8d3c208c16d87cfd45, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0,\n        0x100000000000000000000000000000001, 0x0, 0x1, 0x0,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            y: u384 {\n                limb0: 0x6871ca8d3c208c16d87cfd45,\n                limb1: 0xb85045b68181585d97816a91,\n                limb2: 0x30644e72e131a029,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BN254_2P_edge_case() {\n    let mut data = array![\n        0x3, 0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0x772ca79c580e121ca148fe75, 0xce2f55e418ca01b3d6d1014b, 0x2884b1dc4e84e30f, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0,\n        0xb4862b21fb97d43588561712e8e5216a, 0x967d0cae6f4590b9a164106cf6a659e,\n        0x2833e84879b9709143e1f593f0000000, 0x30644e72e131a029b85045b68181585d, 0x0, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x10000000000000000358f1af3ace11fdc, 0x100000000000000004ac9542b22967d33,\n        0x100000000000000000cf05f964742cc6d, 0x1000000000000000081d342cffb91cba7, 0x1, 0x0, 0x0,\n        0x0, 0x6871ca8d3c208c16d87cfd45, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0,\n        0x100000000000000000000000000000001, 0x0, 0x1, 0x0,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            y: u384 {\n                limb0: 0x6871ca8d3c208c16d87cfd45,\n                limb1: 0xb85045b68181585d97816a91,\n                limb2: 0x30644e72e131a029,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BN254_3P_edge_case() {\n    let mut data = array![\n        0x4, 0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0x772ca79c580e121ca148fe75, 0xce2f55e418ca01b3d6d1014b, 0x2884b1dc4e84e30f, 0x0,\n        0x536c985db33c69f7c242e07a, 0xfc531bccffafcf1e59d91fb9, 0x2585e4f8a31664cb, 0x0,\n        0x57fa42444057cf0c1d62ae3c, 0x4f48d341183118d68ea41313, 0x1d2d2799db056ed1, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0,\n        0x12e0c8b2bad640fb19488dec4f65d4d9, 0x1521f387af19922ad9b8a714e61a441c,\n        0x5a92118719c78df48f4ff31e78de5857, 0x28fcb26f9c6316b950f244556f25e2a2,\n        0x2833e84879b9709143e1f593f0000000, 0x30644e72e131a029b85045b68181585d, 0x0, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x21725fdb9f487676e547051,\n        0xc23930e4f96498a77a316418, 0x1244cb13309195ed, 0x0, 0x6251c487cf0f5a44ac24a45b,\n        0xf1db336c10ce7fae206dd8dd, 0x1da9c56792006d76, 0x0, 0x9be5263ddc8a3746, 0x3b9c1e56ffcfcc82,\n        0x1000000000000000041c754da808c6d02, 0x277449c3e218531f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x0, 0x100000000000000005fcd1b724f1296a6, 0x1000000000000000016e3236cbd22722f,\n        0x4dac40f4f32b51f2, 0x1000000000000000000417aa85f133ffd, 0x1, 0x0, 0x0, 0x0,\n        0x6871ca8d3c208c16d87cfd45, 0xb85045b68181585d97816a91, 0x30644e72e131a029, 0x0,\n        0x100000000000000000000000000000001, 0x0, 0x1, 0x0,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x8cb92121f4f98343b28bd83d,\n                limb1: 0xa60bedf2a6dc9ea3a4503a84,\n                limb2: 0x242282a9381754f,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x41c01095a54c1bf16eec174b,\n                limb1: 0x84b781a7f16d430823b44408,\n                limb2: 0x26bc23f1f4abf016,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BLS12_381_1P_edge_case() {\n    let mut data = array![\n        0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf97a1aeffb3af00adb22c6bb,\n        0xa14e3a3f171bac586c55e83f, 0x4fa9ac0fc3688c4f9774b905, 0x17f1d3a73197d7942695638c,\n        0xa2888ae40caa232946c5e7e1, 0xdb18cb2c04b3edd03cc744, 0x741d8ae4fcf5e095d5d00af6,\n        0x8b3f481e3aaa0f1a09e30ed, 0x2, 0x0, 0x0, 0x53bda402fffe5bfeffffffff00000000,\n        0x73eda753299d7d483339d80809a1d805, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x1, 0x0, 0xf97a1aeffb3af00adb22c6bb, 0xa14e3a3f171bac586c55e83f,\n        0x4fa9ac0fc3688c4f9774b905, 0x17f1d3a73197d7942695638c, 0xecb751bad54dcd6b939c2ca,\n        0x6655b9d5caac42364e6f38ba, 0xcf2e21f267816aef1db507c9, 0x114d1d6855d545a8aa7d76c8,\n        0x100000000000000000000000000000001, 0x0, 0x1, 0x0,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xf97a1aeffb3af00adb22c6bb,\n                limb1: 0xa14e3a3f171bac586c55e83f,\n                limb2: 0x4fa9ac0fc3688c4f9774b905,\n                limb3: 0x17f1d3a73197d7942695638c,\n            },\n            y: u384 {\n                limb0: 0xecb751bad54dcd6b939c2ca,\n                limb1: 0x6655b9d5caac42364e6f38ba,\n                limb2: 0xcf2e21f267816aef1db507c9,\n                limb3: 0x114d1d6855d545a8aa7d76c8,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BLS12_381_2P_edge_case() {\n    let mut data = array![\n        0x3, 0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x3d77d61326ef5a9a5a681757, 0xd3070afd4f0e121de7fcee60,\n        0xdf9ef4088763fe611fb85858, 0x11a612bdd0bc09562856a70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x0, 0xf97a1aeffb3af00adb22c6bb, 0xa14e3a3f171bac586c55e83f, 0x4fa9ac0fc3688c4f9774b905,\n        0x17f1d3a73197d7942695638c, 0xa2888ae40caa232946c5e7e1, 0xdb18cb2c04b3edd03cc744,\n        0x741d8ae4fcf5e095d5d00af6, 0x8b3f481e3aaa0f1a09e30ed, 0x3, 0x0, 0x0,\n        0xb4862b21fb97d43588561712e8e5216a, 0x12cfa194e6f4590b9a164106cf6a659e,\n        0x53bda402fffe5bfeffffffff00000000, 0x73eda753299d7d483339d80809a1d805, 0x1, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x1000000000000000062a39ac9655a0af5, 0x10000000000000000b59da527feb9e759,\n        0x885278dc00a1125a, 0x2fe0754b9fadfe7b, 0xf97a1aeffb3af00adb22c6bb,\n        0xa14e3a3f171bac586c55e83f, 0x4fa9ac0fc3688c4f9774b905, 0x17f1d3a73197d7942695638c,\n        0xecb751bad54dcd6b939c2ca, 0x6655b9d5caac42364e6f38ba, 0xcf2e21f267816aef1db507c9,\n        0x114d1d6855d545a8aa7d76c8, 0x100000000000000000000000000000001, 0x0, 0x1, 0x0,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xf97a1aeffb3af00adb22c6bb,\n                limb1: 0xa14e3a3f171bac586c55e83f,\n                limb2: 0x4fa9ac0fc3688c4f9774b905,\n                limb3: 0x17f1d3a73197d7942695638c,\n            },\n            y: u384 {\n                limb0: 0xecb751bad54dcd6b939c2ca,\n                limb1: 0x6655b9d5caac42364e6f38ba,\n                limb2: 0xcf2e21f267816aef1db507c9,\n                limb3: 0x114d1d6855d545a8aa7d76c8,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_BLS12_381_3P_edge_case() {\n    let mut data = array![\n        0x4, 0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x3d77d61326ef5a9a5a681757, 0xd3070afd4f0e121de7fcee60,\n        0xdf9ef4088763fe611fb85858, 0x11a612bdd0bc09562856a70, 0xde4f62a6588c9401ffefbd3,\n        0x9bb5f797ac6d3395b71420b5, 0xdc39e973aaf31de52219df08, 0x105dcc4dce3960447d21d3c1,\n        0xaefd0d854043fd325dd3c34f, 0x9b63c98d9a7845c52e1e2b0f, 0x9db0be660d847ccc58358f3f,\n        0x17cb6c41f0c4e1a7394ab62a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0xf97a1aeffb3af00adb22c6bb, 0xa14e3a3f171bac586c55e83f, 0x4fa9ac0fc3688c4f9774b905,\n        0x17f1d3a73197d7942695638c, 0xa2888ae40caa232946c5e7e1, 0xdb18cb2c04b3edd03cc744,\n        0x741d8ae4fcf5e095d5d00af6, 0x8b3f481e3aaa0f1a09e30ed, 0x4, 0x0, 0x0,\n        0x12e0c8b2bad640fb19488dec4f65d4d9, 0x2a43e70faf19922ad9b8a714e61a441c,\n        0x5a92118719c78df48f4ff31e78de5857, 0x51f964df9c6316b950f244556f25e2a2,\n        0x53bda402fffe5bfeffffffff00000000, 0x73eda753299d7d483339d80809a1d805, 0x1, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2b828af1f5fe30bbe7a1074a,\n        0x5669beaa69827b52dc874c9f, 0x648af2c24d82a5a758c96b8e, 0x188bc245620ae6b6afec9dc3,\n        0xdc96192f803ef92f56d59758, 0xfc6139925c05a030065d564, 0xb24447300bec56efec94dcf4,\n        0x156f97e5d31055c0a5fe154d, 0x97ac96128760678, 0x1b8269c5da3a7aa, 0x946f8bb609f9ba7d,\n        0x4e77077ba28bdfd6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3827704126429022,\n        0x59c3b34a3b390fcf, 0x1000000000000000076a605fca076460a, 0x2f4183d416809c9a,\n        0xf97a1aeffb3af00adb22c6bb, 0xa14e3a3f171bac586c55e83f, 0x4fa9ac0fc3688c4f9774b905,\n        0x17f1d3a73197d7942695638c, 0xecb751bad54dcd6b939c2ca, 0x6655b9d5caac42364e6f38ba,\n        0xcf2e21f267816aef1db507c9, 0x114d1d6855d545a8aa7d76c8, 0x100000000000000000000000000000001,\n        0x0, 0x1, 0x0,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xba6f9a258a5c81eb5c00d6d3,\n                limb1: 0xa5d26fbf164440da345149b7,\n                limb2: 0xf226b85ccdee44779e368a95,\n                limb3: 0x187795607228007e29c792fb,\n            },\n            y: u384 {\n                limb0: 0x7393cfd2196053529ef8ea01,\n                limb1: 0xf856ee4c4e2adaa88c09b7d9,\n                limb2: 0x499710d15a098f2ff8b26e13,\n                limb3: 0x119aed04afd21b50d616ee0e,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256R1_1P_edge_case() {\n    let mut data = array![\n        0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2deb33a0f4a13945d898c296,\n        0xf8bce6e563a440f277037d81, 0x6b17d1f2e12c4247, 0x0, 0x6b315ececbb6406837bf51f5,\n        0x8ee7eb4a7c0f9e162bce3357, 0x4fe342e2fe1a7f9b, 0x0, 0x2, 0x0, 0x0,\n        0xbce6faada7179e84f3b9cac2fc632550, 0xffffffff00000000ffffffffffffffff, 0x3, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x100000000000000000000000000000001,\n        0x2deb33a0f4a13945d898c296, 0xf8bce6e563a440f277037d81, 0x6b17d1f2e12c4247, 0x0,\n        0x94cea1313449bf97c840ae0a, 0x711814b583f061e9d431cca9, 0xb01cbd1c01e58065, 0x0, 0x1, 0x1,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x2deb33a0f4a13945d898c296,\n                limb1: 0xf8bce6e563a440f277037d81,\n                limb2: 0x6b17d1f2e12c4247,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x94cea1313449bf97c840ae0a,\n                limb1: 0x711814b583f061e9d431cca9,\n                limb2: 0xb01cbd1c01e58065,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256R1_2P_edge_case() {\n    let mut data = array![\n        0x3, 0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2deb33a0f4a13945d898c296, 0xf8bce6e563a440f277037d81,\n        0x6b17d1f2e12c4247, 0x0, 0x6b315ececbb6406837bf51f5, 0x8ee7eb4a7c0f9e162bce3357,\n        0x4fe342e2fe1a7f9b, 0x0, 0x3, 0x0, 0x0, 0xeb1167b367a9c3787c65c1e582e2e662,\n        0xf7c1bd874da5e709d4713d60c8a70639, 0xbce6faada7179e84f3b9cac2fc632550,\n        0xffffffff00000000ffffffffffffffff, 0x3, 0x113c8d620e3745e45e4389b8,\n        0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0, 0x60c0ba1b358f375b2362662e,\n        0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0, 0x1,\n        0x100000000000000000000000000000001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x35a5b9ab55bd33dd4dec8ec8c85b8754, 0x1256a1018e9a2606d3efc444e5bc9e97,\n        0x2deb33a0f4a13945d898c296, 0xf8bce6e563a440f277037d81, 0x6b17d1f2e12c4247, 0x0,\n        0x94cea1313449bf97c840ae0a, 0x711814b583f061e9d431cca9, 0xb01cbd1c01e58065, 0x0, 0x1, 0x1,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x2deb33a0f4a13945d898c296,\n                limb1: 0xf8bce6e563a440f277037d81,\n                limb2: 0x6b17d1f2e12c4247,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x94cea1313449bf97c840ae0a,\n                limb1: 0x711814b583f061e9d431cca9,\n                limb2: 0xb01cbd1c01e58065,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256R1_3P_edge_case() {\n    let mut data = array![\n        0x4, 0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0,\n        0xd3ff147ff0ee4213f51f677d, 0x431366a7732a6e4a6b942255, 0x9fe743b25d39a591, 0x0,\n        0x7f8bb562ff60a902ef14bcb0, 0xeb9420089fa531db62e806a6, 0xfd028df433dfd5cc, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2deb33a0f4a13945d898c296, 0xf8bce6e563a440f277037d81,\n        0x6b17d1f2e12c4247, 0x0, 0x6b315ececbb6406837bf51f5, 0x8ee7eb4a7c0f9e162bce3357,\n        0x4fe342e2fe1a7f9b, 0x0, 0x4, 0x0, 0x0, 0xe443df789558867f5ba91faf7a024204,\n        0x23a7711a8133287637ebdcd9e87a1613, 0x1846d424c17c627923c6612f48268673,\n        0xfcbd04c340212ef7cca5a5a19e4d6e3c, 0xbce6faada7179e84f3b9cac2fc632550,\n        0xffffffff00000000ffffffffffffffff, 0x3, 0x113c8d620e3745e45e4389b8,\n        0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0, 0x60c0ba1b358f375b2362662e,\n        0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0, 0x1,\n        0x100000000000000000000000000000001, 0x33ee7695471a03192ef22266, 0xb449dd8cfd0c3438e14a718c,\n        0x1fbb33f079b828e2, 0x0, 0xb411f97aeec2eae6044122ec, 0xcdce180b60667260d7ce284e,\n        0xa73a7381dd3b07c, 0x0, 0x29fa93ff2e088f257810ffaf340cbe2f,\n        0x67db401fe06eea845a19e61367b76a34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x44faf735503f8d6a4fd7c1f1541b0e83, 0x108efc1b039167d94064f65615a509dcb,\n        0x2deb33a0f4a13945d898c296, 0xf8bce6e563a440f277037d81, 0x6b17d1f2e12c4247, 0x0,\n        0x94cea1313449bf97c840ae0a, 0x711814b583f061e9d431cca9, 0xb01cbd1c01e58065, 0x0, 0x1, 0x1,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xdffcaf62be678f4d3d103700,\n                limb1: 0x4ae0c3b5a4fb0e4e7ee75279,\n                limb2: 0x651ce75927276c9a,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xb27867c3cd0eb05ed74c5f9c,\n                limb1: 0xd30f6d2e04931e22def1d510,\n                limb2: 0x645a0d9d9776e75f,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256K1_1P_edge_case() {\n    let mut data = array![\n        0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2dce28d959f2815b16f81798,\n        0x55a06295ce870b07029bfcdb, 0x79be667ef9dcbbac, 0x0, 0xa68554199c47d08ffb10d4b8,\n        0x5da4fbfc0e1108a8fd17b448, 0x483ada7726a3c465, 0x0, 0x2, 0x0, 0x0,\n        0xbaaedce6af48a03bbfd25e8cd0364140, 0xfffffffffffffffffffffffffffffffe, 0x2, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2dce28d959f2815b16f81798,\n        0x55a06295ce870b07029bfcdb, 0x79be667ef9dcbbac, 0x0, 0x597aabe663b82f6f04ef2777,\n        0xa25b0403f1eef75702e84bb7, 0xb7c52588d95c3b9a, 0x0, 0x100000000000000000000000000000001,\n        0x0, 0x1, 0x0,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x2dce28d959f2815b16f81798,\n                limb1: 0x55a06295ce870b07029bfcdb,\n                limb2: 0x79be667ef9dcbbac,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x597aabe663b82f6f04ef2777,\n                limb1: 0xa25b0403f1eef75702e84bb7,\n                limb2: 0xb7c52588d95c3b9a,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256K1_2P_edge_case() {\n    let mut data = array![\n        0x3, 0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2dce28d959f2815b16f81798, 0x55a06295ce870b07029bfcdb,\n        0x79be667ef9dcbbac, 0x0, 0xa68554199c47d08ffb10d4b8, 0x5da4fbfc0e1108a8fd17b448,\n        0x483ada7726a3c465, 0x0, 0x3, 0x0, 0x0, 0xeb1167b367a9c3787c65c1e582e2e662,\n        0xf7c1bd874da5e709d4713d60c8a70639, 0xbaaedce6af48a03bbfd25e8cd0364140,\n        0xfffffffffffffffffffffffffffffffe, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100000000000000006d17da9dde38d3aa,\n        0x100000000000000008e0801a3d001f325, 0x87ea3597eb650e8, 0xe42d003a1f0e89bd,\n        0x2dce28d959f2815b16f81798, 0x55a06295ce870b07029bfcdb, 0x79be667ef9dcbbac, 0x0,\n        0x597aabe663b82f6f04ef2777, 0xa25b0403f1eef75702e84bb7, 0xb7c52588d95c3b9a, 0x0,\n        0x100000000000000000000000000000001, 0x0, 0x1, 0x0,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x2dce28d959f2815b16f81798,\n                limb1: 0x55a06295ce870b07029bfcdb,\n                limb2: 0x79be667ef9dcbbac,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x597aabe663b82f6f04ef2777,\n                limb1: 0xa25b0403f1eef75702e84bb7,\n                limb2: 0xb7c52588d95c3b9a,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_SECP256K1_3P_edge_case() {\n    let mut data = array![\n        0x4, 0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0,\n        0xfdfdc509f368ba4395773d3a, 0x8de2b60b577a13d0f83b578e, 0xc2dd970269530ba2, 0x0,\n        0x589fa250d638e35400c12ddf, 0xb3aac19fcb5095808402aa7f, 0xed6de6590d0195d1, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2dce28d959f2815b16f81798, 0x55a06295ce870b07029bfcdb,\n        0x79be667ef9dcbbac, 0x0, 0xa68554199c47d08ffb10d4b8, 0x5da4fbfc0e1108a8fd17b448,\n        0x483ada7726a3c465, 0x0, 0x4, 0x0, 0x0, 0xe443df789558867f5ba91faf7a024204,\n        0x23a7711a8133287637ebdcd9e87a1613, 0x1846d424c17c627923c6612f48268673,\n        0xfcbd04c340212ef7cca5a5a19e4d6e3c, 0xbaaedce6af48a03bbfd25e8cd0364140,\n        0xfffffffffffffffffffffffffffffffe, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x1, 0x0, 0x55909ba28af82ea934a4b85d, 0x4bf448ca5d57fb119c843e0a, 0x6a2275491b991ee3, 0x0,\n        0x5bf4bf0cefc9553422e60eb0, 0x178d55925d3d72f44783f626, 0xe13a21d7302f8139, 0x0,\n        0x4bab076cac43472e, 0x896dcc1031d19f2d, 0x100000000000000006f45630d920758e7,\n        0x13bfcc5670fee7eb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40c3f72fa123bad6,\n        0x461e3a87e8955f53, 0x53ec0e0286c9f6ad, 0x1000000000000000074832ec5bb09d4f6,\n        0x2dce28d959f2815b16f81798, 0x55a06295ce870b07029bfcdb, 0x79be667ef9dcbbac, 0x0,\n        0x597aabe663b82f6f04ef2777, 0xa25b0403f1eef75702e84bb7, 0xb7c52588d95c3b9a, 0x0,\n        0x100000000000000000000000000000001, 0x0, 0x1, 0x0,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0x8ae1b945a4bee5df2482580e,\n                limb1: 0x113a509c4213fb90b017895a,\n                limb2: 0xdb53345431b0c359,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x5f8a05f7d421794bf1c2f718,\n                limb1: 0xf026f2017517996e6dc446ce,\n                limb2: 0xc09762999f005286,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_ED25519_1P_edge_case() {\n    let mut data = array![\n        0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd617c9aca55c89b025aef35,\n        0xf00b8f02f1c20618a9c13fdf, 0x2a78dd0fd02c0339, 0x0, 0x807131659b7830f3f62c1d14,\n        0xbe483ba563798323cf6fd061, 0x29c644a5c71da22e, 0x0, 0x2, 0x0, 0x0,\n        0x14def9dea2f79cd65812631a5cf5d3ec, 0x10000000000000000000000000000000, 0x4, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x100000000000000000000000000000001,\n        0xd617c9aca55c89b025aef35, 0xf00b8f02f1c20618a9c13fdf, 0x2a78dd0fd02c0339, 0x0,\n        0x7f8ece9a6487cf0c09d3e2d9, 0x41b7c45a9c867cdc30902f9e, 0x5639bb5a38e25dd1, 0x0, 0x1, 0x1,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xd617c9aca55c89b025aef35,\n                limb1: 0xf00b8f02f1c20618a9c13fdf,\n                limb2: 0x2a78dd0fd02c0339,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x7f8ece9a6487cf0c09d3e2d9,\n                limb1: 0x41b7c45a9c867cdc30902f9e,\n                limb2: 0x5639bb5a38e25dd1,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_ED25519_2P_edge_case() {\n    let mut data = array![\n        0x3, 0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xf046f8cd6e5a75fca71dd19b, 0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd617c9aca55c89b025aef35, 0xf00b8f02f1c20618a9c13fdf,\n        0x2a78dd0fd02c0339, 0x0, 0x807131659b7830f3f62c1d14, 0xbe483ba563798323cf6fd061,\n        0x29c644a5c71da22e, 0x0, 0x3, 0x0, 0x0, 0xb4862b21fb97d43588561712e8e5216a,\n        0x4b3e865e6f4590b9a164106cf6a659e, 0x14def9dea2f79cd65812631a5cf5d3ec,\n        0x10000000000000000000000000000000, 0x4, 0x7238f02b9f20e09c2181a557,\n        0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0, 0xf046f8cd6e5a75fca71dd19b,\n        0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0, 0x1,\n        0x100000000000000000000000000000001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x21ef407bea1953254c1bc318a0af2527, 0x1c147c0993c84eed5f426b94b3350045,\n        0xd617c9aca55c89b025aef35, 0xf00b8f02f1c20618a9c13fdf, 0x2a78dd0fd02c0339, 0x0,\n        0x7f8ece9a6487cf0c09d3e2d9, 0x41b7c45a9c867cdc30902f9e, 0x5639bb5a38e25dd1, 0x0, 0x1, 0x1,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xd617c9aca55c89b025aef35,\n                limb1: 0xf00b8f02f1c20618a9c13fdf,\n                limb2: 0x2a78dd0fd02c0339,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x7f8ece9a6487cf0c09d3e2d9,\n                limb1: 0x41b7c45a9c867cdc30902f9e,\n                limb2: 0x5639bb5a38e25dd1,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_ED25519_3P_edge_case() {\n    let mut data = array![\n        0x4, 0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xf046f8cd6e5a75fca71dd19b, 0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0,\n        0x82e4a33f8e4e5881e791d86b, 0xbcb062435ae8ec5fdaeac4bf, 0x179e1bae9e0f9f34, 0x0,\n        0x19657783ba5660e255c21849, 0x7ed7474bcea7551fc71e46bc, 0x596c0a76b75f4756, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd617c9aca55c89b025aef35, 0xf00b8f02f1c20618a9c13fdf,\n        0x2a78dd0fd02c0339, 0x0, 0x807131659b7830f3f62c1d14, 0xbe483ba563798323cf6fd061,\n        0x29c644a5c71da22e, 0x0, 0x4, 0x0, 0x0, 0x12e0c8b2bad640fb19488dec4f65d4d9,\n        0xa90f9c3af19922ad9b8a714e61a441c, 0xeb2083e6ce164dba0ff18e0242af9fc3,\n        0x2fc154703983ca8ea7e9d498c778ea6, 0x14def9dea2f79cd65812631a5cf5d3ec,\n        0x10000000000000000000000000000000, 0x4, 0x7238f02b9f20e09c2181a557,\n        0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0, 0xf046f8cd6e5a75fca71dd19b,\n        0x892b4613ef5c58df4ef692a4, 0x7527fa36f5738847, 0x0, 0x1,\n        0x100000000000000000000000000000001, 0xf7d884feff5aba51d9990dce, 0x999f1d302046c6266257ff5,\n        0x7f9caa5ee5815899, 0x0, 0x6d71279424538e87f8ecf2cc, 0x8a8a1d74581da5996a52bbaf,\n        0x29acff692eccea25, 0x0, 0x211c4f690d00cb3af0b34c381ddf6429,\n        0x10dbbf233e0f266b14c85329c2440c426, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x3242668a77ced3cb6ca4b87c1b759c91, 0x128e825972592d2a632df711368a1c105,\n        0xd617c9aca55c89b025aef35, 0xf00b8f02f1c20618a9c13fdf, 0x2a78dd0fd02c0339, 0x0,\n        0x7f8ece9a6487cf0c09d3e2d9, 0x41b7c45a9c867cdc30902f9e, 0x5639bb5a38e25dd1, 0x0, 0x1, 0x1,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xea1930f7f9c99711b76d5726,\n                limb1: 0xa06d0a2a0011cdaa581c307a,\n                limb2: 0x6a9d379c7dcfb5b6,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xe529194a47d7db7a9a8b88b1,\n                limb1: 0xebb88d8901d42d55b9966ff5,\n                limb2: 0x2ea083fb0eb0877c,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_GRUMPKIN_1P_edge_case() {\n    let mut data = array![\n        0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xf1181294833fc48d823f272c,\n        0xcf135e7506a45d632d270d45, 0x2, 0x0, 0x2, 0x0, 0x0, 0x97816a916871ca8d3c208c16d87cfd46,\n        0x30644e72e131a029b85045b68181585d, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,\n        0x100000000000000000000000000000001, 0x1, 0x0, 0x0, 0x0, 0x88a15dfcc0a231066dc0d8d5,\n        0xe93ce7417adcfaf9fb0cdb02, 0x30644e72e131a026, 0x0, 0x1, 0x1,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            y: u384 {\n                limb0: 0x88a15dfcc0a231066dc0d8d5,\n                limb1: 0xe93ce7417adcfaf9fb0cdb02,\n                limb2: 0x30644e72e131a026,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_GRUMPKIN_2P_edge_case() {\n    let mut data = array![\n        0x3, 0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x371e7b6a5c01505bd4334e81, 0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xf1181294833fc48d823f272c,\n        0xcf135e7506a45d632d270d45, 0x2, 0x0, 0x3, 0x0, 0x0, 0xb4862b21fb97d43588561712e8e5216a,\n        0x967d0cae6f4590b9a164106cf6a659e, 0x97816a916871ca8d3c208c16d87cfd46,\n        0x30644e72e131a029b85045b68181585d, 0x5, 0x86b402ce02e7c7ca81f13d51,\n        0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0, 0x371e7b6a5c01505bd4334e81,\n        0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0, 0x1,\n        0x100000000000000000000000000000001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x5520c252aad219e02bf5055a4ed023b7, 0x197e50b8e7adb6dd93eeede129c12721, 0x1, 0x0, 0x0, 0x0,\n        0x88a15dfcc0a231066dc0d8d5, 0xe93ce7417adcfaf9fb0cdb02, 0x30644e72e131a026, 0x0, 0x1, 0x1,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            y: u384 {\n                limb0: 0x88a15dfcc0a231066dc0d8d5,\n                limb1: 0xe93ce7417adcfaf9fb0cdb02,\n                limb2: 0x30644e72e131a026,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\n#[ignore]\nfn test_msm_GRUMPKIN_3P_edge_case() {\n    let mut data = array![\n        0x4, 0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x371e7b6a5c01505bd4334e81, 0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0,\n        0x20669ef12954f8e3bbc8b4d3, 0x396a6f7243c27ce553121ee3, 0x11438ca2ec259aed, 0x0,\n        0xa560a5759c90985fde99aca0, 0xc5b21186cc6dcd0421026513, 0x21fb1f47c6ac55b3, 0x0, 0x0, 0x0,\n        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xf1181294833fc48d823f272c,\n        0xcf135e7506a45d632d270d45, 0x2, 0x0, 0x4, 0x0, 0x0, 0x12e0c8b2bad640fb19488dec4f65d4d9,\n        0x1521f387af19922ad9b8a714e61a441c, 0x5a92118719c78df48f4ff31e78de5857,\n        0x28fcb26f9c6316b950f244556f25e2a2, 0x97816a916871ca8d3c208c16d87cfd46,\n        0x30644e72e131a029b85045b68181585d, 0x5, 0x86b402ce02e7c7ca81f13d51,\n        0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0, 0x371e7b6a5c01505bd4334e81,\n        0x2f596ae4492a87c66f7bda1a, 0x9dffb4dcdb94df9, 0x0, 0x1,\n        0x100000000000000000000000000000001, 0xf47b4ee8eecf8576c38173d8, 0x755d90a26c30d7d6fb33afd3,\n        0x5e835e05fdb55c5, 0x0, 0x990d5f4767a8d057f8695e4e, 0x5f8dd4e272c268c0d2ce4a39,\n        0x1704905427d31a82, 0x0, 0x39dea48eef47b3e6bcae980c9112d477,\n        0x538cc4627274d8f320bf5df15c887356, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,\n        0x10a2e45b33049f11b360c09b6389565b, 0x63f1d0c59d848c415389772b72561b3d, 0x1, 0x0, 0x0, 0x0,\n        0x88a15dfcc0a231066dc0d8d5, 0xe93ce7417adcfaf9fb0cdb02, 0x30644e72e131a026, 0x0, 0x1, 0x1,\n    ]\n        .span();\n    let points = Serde::deserialize(ref data).unwrap();\n    let scalars = Serde::deserialize(ref data).unwrap();\n    let curve_id = Serde::deserialize(ref data).unwrap();\n    let res = msm_g1(points, scalars, curve_id, data);\n    assert!(\n        res == G1Point {\n            x: u384 {\n                limb0: 0xf8c1f1ea2f76ef32e8aaa1e5,\n                limb1: 0x4f332469fd3c88e2a2a255c6,\n                limb2: 0x25bea91cb12ea60f,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x13dd399b7d2ee3c5048e382d,\n                limb1: 0x8d9fd23cff123740ae29ea9a,\n                limb2: 0x8aa44466337bea4,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n"
  },
  {
    "path": "src/src/tests/autogenerated/pairing_tests.cairo",
    "content": "use garaga::definitions::{\n    E12D, G1G2Pair, G1Point, G2Line, G2Point, MillerLoopResultScalingFactor, u288, u384,\n};\nuse garaga::groth16::{\n    multi_pairing_check_bls12_381_3P_2F_with_extra_miller_loop_result,\n    multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result,\n};\nuse garaga::pairing_check::{\n    MPCheckHintBLS12_381, MPCheckHintBN254, multi_pairing_check_bls12_381_2P_2F,\n    multi_pairing_check_bn254_2P_2F,\n};\n\n#[test]\nfn test_BN254_mpcheck_2P_2F() {\n    let pair0: G1G2Pair = G1G2Pair {\n        p: G1Point {\n            x: u384 {\n                limb0: 0xcdb6d03cb7b9a5409b7efcd8,\n                limb1: 0xd1df87eab84852372b905c9c,\n                limb2: 0x1d0634f3f21e7890,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0xaa1d4f4d3021032564460978,\n                limb1: 0xeb3f1d6ba3b10e2b53dc193b,\n                limb2: 0x24c53532773dce26,\n                limb3: 0x0,\n            },\n        },\n        q: G2Point {\n            x0: u384 {\n                limb0: 0xf75edadd46debd5cd992f6ed,\n                limb1: 0x426a00665e5c4479674322d4,\n                limb2: 0x1800deef121f1e76,\n                limb3: 0x0,\n            },\n            x1: u384 {\n                limb0: 0x35a9e71297e485b7aef312c2,\n                limb1: 0x7260bfb731fb5d25f1aa4933,\n                limb2: 0x198e9393920d483a,\n                limb3: 0x0,\n            },\n            y0: u384 {\n                limb0: 0xc43d37b4ce6cc0166fa7daa,\n                limb1: 0x4aab71808dcb408fe3d1e769,\n                limb2: 0x12c85ea5db8c6deb,\n                limb3: 0x0,\n            },\n            y1: u384 {\n                limb0: 0x70b38ef355acdadcd122975b,\n                limb1: 0xec9e99ad690c3395bc4b3133,\n                limb2: 0x90689d0585ff075,\n                limb3: 0x0,\n            },\n        },\n    };\n    let pair1: G1G2Pair = G1G2Pair {\n        p: G1Point {\n            x: u384 {\n                limb0: 0x536c985db33c69f7c242e07a,\n                limb1: 0xfc531bccffafcf1e59d91fb9,\n                limb2: 0x2585e4f8a31664cb,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x57fa42444057cf0c1d62ae3c,\n                limb1: 0x4f48d341183118d68ea41313,\n                limb2: 0x1d2d2799db056ed1,\n                limb3: 0x0,\n            },\n        },\n        q: G2Point {\n            x0: u384 {\n                limb0: 0x335eb0538f718d8e6651eeb1,\n                limb1: 0x635e573808d9d5c7178bdce7,\n                limb2: 0x1314aaf1c372e6d7,\n                limb3: 0x0,\n            },\n            x1: u384 {\n                limb0: 0x5289f29ccc5acf5e81526673,\n                limb1: 0x2d4aba9e1448a8cc1048d01a,\n                limb2: 0x14c25d3aec745e5a,\n                limb3: 0x0,\n            },\n            y0: u384 {\n                limb0: 0x10d1d0efd5869ecd23aab8e9,\n                limb1: 0xba7d1de6d86501d49b6a8dab,\n                limb2: 0x397391b7b25e2f,\n                limb3: 0x0,\n            },\n            y1: u384 {\n                limb0: 0x385a553ea12434f4eda6db36,\n                limb1: 0xb058c1ff7e4c5c7ec7e5859b,\n                limb2: 0x1863ac65eca09e89,\n                limb3: 0x0,\n            },\n        },\n    };\n    let lines = array![\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4d347301094edcbfa224d3d5,\n                limb1: 0x98005e68cacde68a193b54e6,\n                limb2: 0x237db2935c4432bc,\n            },\n            r0a1: u288 {\n                limb0: 0x6b4ba735fba44e801d415637,\n                limb1: 0x707c3ec1809ae9bafafa05dd,\n                limb2: 0x124077e14a7d826a,\n            },\n            r1a0: u288 {\n                limb0: 0x49a8dc1dd6e067932b6a7e0d,\n                limb1: 0x7676d0000961488f8fbce033,\n                limb2: 0x3b7178c857630da,\n            },\n            r1a1: u288 {\n                limb0: 0x98c81278efe1e96b86397652,\n                limb1: 0xe3520b9dfa601ead6f0bf9cd,\n                limb2: 0x2b17c2b12c26fdd0,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7e165b3014d84802bf01484e,\n                limb1: 0x3260b32ceced0b1243d4c84e,\n                limb2: 0x2d4b148197812cd9,\n            },\n            r0a1: u288 {\n                limb0: 0xed50630084c5fc98c14adf76,\n                limb1: 0x8b3e4e11609f5b1ec2a4a3fd,\n                limb2: 0x9449ebaa6581db4,\n            },\n            r1a0: u288 {\n                limb0: 0x6dbbec1fa71f727fad9c2035,\n                limb1: 0x2d74c51612b1473f7a789efb,\n                limb2: 0x219b1595f2e94586,\n            },\n            r1a1: u288 {\n                limb0: 0x18b802809d63c96cb122eb63,\n                limb1: 0x971ad93ce0fb9233480bfe98,\n                limb2: 0x1cf3a36431cdb52c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x1b3d578c32d1af5736582972,\n                limb1: 0x204fe74db6b371d37e4615ab,\n                limb2: 0xce69bdf84ed6d6d,\n            },\n            r0a1: u288 {\n                limb0: 0xfd262357407c3d96bb3ba710,\n                limb1: 0x47d406f500e66ea29c8764b3,\n                limb2: 0x1e23d69196b41dbf,\n            },\n            r1a0: u288 {\n                limb0: 0x1ec8ee6f65402483ad127f3a,\n                limb1: 0x41d975b678200fce07c48a5e,\n                limb2: 0x2cad36e65bbb6f4f,\n            },\n            r1a1: u288 {\n                limb0: 0xcfa9b8144c3ea2ab524386f5,\n                limb1: 0xd4fe3a18872139b0287570c3,\n                limb2: 0x54c8bc1b50aa258,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb5ee22ba52a7ed0c533b7173,\n                limb1: 0xbfa13123614ecf9c4853249b,\n                limb2: 0x6567a7f6972b7bb,\n            },\n            r0a1: u288 {\n                limb0: 0xcf422f26ac76a450359f819e,\n                limb1: 0xc42d7517ae6f59453eaf32c7,\n                limb2: 0x899cb1e339f7582,\n            },\n            r1a0: u288 {\n                limb0: 0x9f287f4842d688d7afd9cd67,\n                limb1: 0x30af75417670de33dfa95eda,\n                limb2: 0x1121d4ca1c2cab36,\n            },\n            r1a1: u288 {\n                limb0: 0x7c4c55c27110f2c9a228f7d8,\n                limb1: 0x8f14f6c3a2e2c9d74b347bfe,\n                limb2: 0x83ef274ba7913a5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xea5b6f5d27484414197bb4f9,\n                limb1: 0x85ef928994944d4b53aca242,\n                limb2: 0x31939f149b07350,\n            },\n            r0a1: u288 {\n                limb0: 0x7b21678cb75a8f7e17321dd1,\n                limb1: 0x2d11f7a520e1fd3ed4dcc693,\n                limb2: 0x271fafb83ad98275,\n            },\n            r1a0: u288 {\n                limb0: 0xfab5de6d950119972ae0dd12,\n                limb1: 0x8adb80a06ed0111e1d08cb95,\n                limb2: 0xec938dcee485aa3,\n            },\n            r1a1: u288 {\n                limb0: 0x4fb9c80c9ebcc2aa275a11e4,\n                limb1: 0x21356c79a085c62a4f756bf9,\n                limb2: 0x1370ab0eaf63eafd,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc0f94eb338d27e3d9c3c54bf,\n                limb1: 0xcbc81234f5e7a25b356780b1,\n                limb2: 0x2d7855cb075109f7,\n            },\n            r0a1: u288 {\n                limb0: 0x284c304021c8efe832d4019,\n                limb1: 0xcf072fe1e6a5712c6939b2e5,\n                limb2: 0x2aebdfbcb148dbd2,\n            },\n            r1a0: u288 {\n                limb0: 0xd7b47c349d5fa8cbc0c0bdc4,\n                limb1: 0x262a79a0c9001db94d4629e6,\n                limb2: 0x229b6a2be2e077d7,\n            },\n            r1a1: u288 {\n                limb0: 0x5ac06a263b3dad67c61b9b1a,\n                limb1: 0x218d4cdc4cddee7306803f0c,\n                limb2: 0x2c404c393f42c23c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xfc23a674d089e9cfdefb1db8,\n                limb1: 0x9ddfd61d289b65a9b4254476,\n                limb2: 0x1e2f561324ef4447,\n            },\n            r0a1: u288 {\n                limb0: 0xf67a6a9e31f6975b220642ea,\n                limb1: 0xccd852893796296e4d1ed330,\n                limb2: 0x94ff1987d19b62,\n            },\n            r1a0: u288 {\n                limb0: 0x360c2a5aca59996d24cc1947,\n                limb1: 0x66c2d7d0d176a3bc53f386e8,\n                limb2: 0x2cfcc62a17fbeecb,\n            },\n            r1a1: u288 {\n                limb0: 0x2ddc73389dd9a9e34168d8a9,\n                limb1: 0xae9afc57944748b835cbda0f,\n                limb2: 0x12f0a1f8cf564067,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9e2613c20164688ed46379a,\n                limb1: 0x716db3679a44c686aa59d1ab,\n                limb2: 0x15001844790ca939,\n            },\n            r0a1: u288 {\n                limb0: 0x6fbc98bc7a182aa3dd0cb359,\n                limb1: 0xc97408d0c1cf3952033b11b0,\n                limb2: 0x1ab481f0cb16916b,\n            },\n            r1a0: u288 {\n                limb0: 0x7f38f154b08df182e2924e74,\n                limb1: 0xba31b530302528255113573a,\n                limb2: 0x933362e822d9bbb,\n            },\n            r1a1: u288 {\n                limb0: 0xfe131760a10954277d407df3,\n                limb1: 0x7fa6f47454535d07b1c8ffad,\n                limb2: 0x966415d59cef8df,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9c963c4bdade6ce3d460b077,\n                limb1: 0x1738311feefc76f565e34e8a,\n                limb2: 0x1aae0d6c9e9888ad,\n            },\n            r0a1: u288 {\n                limb0: 0x9272581fdf80b045c9c3f0a,\n                limb1: 0x3946807b0756e87666798edb,\n                limb2: 0x2bf6eeda2d8be192,\n            },\n            r1a0: u288 {\n                limb0: 0x3e957661b35995552fb475de,\n                limb1: 0xd8076fa48f93f09d8128a2a8,\n                limb2: 0xb6f87c3f00a6fcf,\n            },\n            r1a1: u288 {\n                limb0: 0xcf17d6cd2101301246a8f264,\n                limb1: 0x514d04ad989b91e697aa5a0e,\n                limb2: 0x175f17bbd0ad1219,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x894bc18cc70ca1987e3b8f9f,\n                limb1: 0xd4bfa535181f0f8659b063e3,\n                limb2: 0x19168d524164f463,\n            },\n            r0a1: u288 {\n                limb0: 0x850ee8d0e9b58b82719a6e92,\n                limb1: 0x9fc4eb75cbb027c137d48341,\n                limb2: 0x2b2f8a383d944fa0,\n            },\n            r1a0: u288 {\n                limb0: 0x5451c8974a709483c2b07fbd,\n                limb1: 0xd7e09837b8a2a3b78e7fe525,\n                limb2: 0x347d96be5e7fa31,\n            },\n            r1a1: u288 {\n                limb0: 0x823f2ba2743ee254e4c18a1e,\n                limb1: 0x6a61af5db035c443ed0f8172,\n                limb2: 0x1e840eee275d1063,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x97890ec993740b1ca0337563,\n                limb1: 0x4fa454f0d8b7b9f3e996a148,\n                limb2: 0x2687d9105ae36d86,\n            },\n            r0a1: u288 {\n                limb0: 0x94553c479c2341dd9d19c228,\n                limb1: 0xf3893568e1c69e8691e6d21d,\n                limb2: 0x176dd970f5c96141,\n            },\n            r1a0: u288 {\n                limb0: 0x10b35743d178c928ae8988f3,\n                limb1: 0x4e09ad83d2ef00527273723e,\n                limb2: 0x2357f050a2e191c4,\n            },\n            r1a1: u288 {\n                limb0: 0x4c47ba83a5200a671c9a6e66,\n                limb1: 0x9ed7cd2e0db8b052d78aeccf,\n                limb2: 0x2b778d052020e24f,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x38f9cedd0c82018426759a6e,\n                limb1: 0x44c9564dd70a19718df031b9,\n                limb2: 0x2c123a573f011ecf,\n            },\n            r0a1: u288 {\n                limb0: 0xdc5f6dd6fabcfd365452fd48,\n                limb1: 0x3be2013bcd845c73bef09c2a,\n                limb2: 0x20a73a0d44be878,\n            },\n            r1a0: u288 {\n                limb0: 0x9d6fc1cc6d53b9b473418843,\n                limb1: 0x179167ea194fa9a3fb5546bf,\n                limb2: 0x122aeeaaf6e42f52,\n            },\n            r1a1: u288 {\n                limb0: 0x3b7e8d815b2f3ad687c6b33b,\n                limb1: 0xbfacefc007f6e8b61a5b0930,\n                limb2: 0x14d40bc6eff71288,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x18d630598e58bb5d0102b30e,\n                limb1: 0x9767e27b02a8da37411a2787,\n                limb2: 0x100a541662b9cd7c,\n            },\n            r0a1: u288 {\n                limb0: 0x4ca7313df2e168e7e5ea70,\n                limb1: 0xd49cce6abd50b574f31c2d72,\n                limb2: 0x78a2afbf72317e7,\n            },\n            r1a0: u288 {\n                limb0: 0x6d99388b0a1a67d6b48d87e0,\n                limb1: 0x1d8711d321a193be3333bc68,\n                limb2: 0x27e76de53a010ce1,\n            },\n            r1a1: u288 {\n                limb0: 0x77341bf4e1605e982fa50abd,\n                limb1: 0xc5cf10db170b4feaaf5f8f1b,\n                limb2: 0x762adef02274807,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3896b4539101a9d082d01df0,\n                limb1: 0x1bdd4fa3c048c10eb04232b4,\n                limb2: 0x2bbc70702a7f5b2d,\n            },\n            r0a1: u288 {\n                limb0: 0x617716ce0b0fc90781832057,\n                limb1: 0x800927818218483eb3cf9245,\n                limb2: 0x211e4fc4a1ae2c66,\n            },\n            r1a0: u288 {\n                limb0: 0xe7b44e14a444b645b8c0b11f,\n                limb1: 0x2b07f556a654bd49cd865885,\n                limb2: 0x1866e4634404cecf,\n            },\n            r1a1: u288 {\n                limb0: 0x48a0768996bd4017ff614ce,\n                limb1: 0x4f0066744ba90bd46ee6e88e,\n                limb2: 0x1de00ce581b3556f,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa137b991ba9048aee9fa0bc7,\n                limb1: 0xf5433785c186cd1100ab6b80,\n                limb2: 0xab519fd7cf8e7f9,\n            },\n            r0a1: u288 {\n                limb0: 0x90832f45d3398c60aa1a74e2,\n                limb1: 0x17f7ac209532723f22a344b,\n                limb2: 0x23db979f8481c5f,\n            },\n            r1a0: u288 {\n                limb0: 0x723b0e23c2808a5d1ea6b11d,\n                limb1: 0x3030030d26411f84235c3af5,\n                limb2: 0x122e78da5509eddb,\n            },\n            r1a1: u288 {\n                limb0: 0xf1718c1e21a9bc3ec822f319,\n                limb1: 0xf5ee6dfa3bd3272b2f09f0c7,\n                limb2: 0x5a29c1e27616b34,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7369b6adc59d1ad1956aa29c,\n                limb1: 0x5a1a92f3dda868e7423f70bd,\n                limb2: 0x13da850286346586,\n            },\n            r0a1: u288 {\n                limb0: 0x5eedbb4b5f1b8c52d4ff5734,\n                limb1: 0x9988f4f6e06343ab4f5831ad,\n                limb2: 0xfbbd4d49b51a489,\n            },\n            r1a0: u288 {\n                limb0: 0x9cd983785651ba1c2c06bf74,\n                limb1: 0x21f088328b5920e22e7a73f6,\n                limb2: 0x1e16dd13e77f83f4,\n            },\n            r1a1: u288 {\n                limb0: 0x44bdd6e622016e7b7287c24f,\n                limb1: 0xb454bfef81527e305bd509e6,\n                limb2: 0x25b37c864eb9335d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xbc1ede480873fceb8739511e,\n                limb1: 0xd5a60533bd0ce7869efbc15,\n                limb2: 0x182c17d793eba74d,\n            },\n            r0a1: u288 {\n                limb0: 0x83bf38d91876ad8999516bc2,\n                limb1: 0x7756322ea3dc079289d51f2d,\n                limb2: 0x1d0f6156a89a4244,\n            },\n            r1a0: u288 {\n                limb0: 0x6aba652f197be8f99707b88c,\n                limb1: 0xbf94286c245794ea0f562f32,\n                limb2: 0x25a358967a2ca81d,\n            },\n            r1a1: u288 {\n                limb0: 0xc028cbff48c01433e8b23568,\n                limb1: 0xd2e791f5772ed43b056beba1,\n                limb2: 0x83eb38dff4960e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xea4e2dfe89a1e44be7ce1e1c,\n                limb1: 0x5a92c01d769c449c202b3214,\n                limb2: 0xff9af539be5c8c9,\n            },\n            r0a1: u288 {\n                limb0: 0x787ac32ae432e43bed70fb07,\n                limb1: 0x4a33b653a031d4b9f2785ff3,\n                limb2: 0x26614c3211203a55,\n            },\n            r1a0: u288 {\n                limb0: 0xb191249d1a1f0c8c86ebe4ea,\n                limb1: 0xad273f446b939f4f1f361ebf,\n                limb2: 0xedc66a88aa083a1,\n            },\n            r1a1: u288 {\n                limb0: 0xdca5c397dab1714ac36c1bc8,\n                limb1: 0x924f9820543a3519c11d3f74,\n                limb2: 0x1ad8a781081d4a96,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc2a2b787d8e718e81970db80,\n                limb1: 0x5372abeaf56844dee60d6198,\n                limb2: 0x131210153a2217d6,\n            },\n            r0a1: u288 {\n                limb0: 0x70421980313e09a8a0e5a82d,\n                limb1: 0xf75ca1f68f4b8deafb1d3b48,\n                limb2: 0x102113c9b6feb035,\n            },\n            r1a0: u288 {\n                limb0: 0x4654c11d73bda84873de9b86,\n                limb1: 0xa67601bca2e595339833191a,\n                limb2: 0x1c2b76e439adc8cc,\n            },\n            r1a1: u288 {\n                limb0: 0x9c53a48cc66c1f4d644105f2,\n                limb1: 0xa17a18867557d96fb7c2f849,\n                limb2: 0x1deb99799bd8b63a,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc32026c56341297fa080790c,\n                limb1: 0xe23ad2ff283399133533b31f,\n                limb2: 0xa6860f5c968f7ad,\n            },\n            r0a1: u288 {\n                limb0: 0x2966cf259dc612c6a4d8957d,\n                limb1: 0xfba87ea86054f3db5774a08f,\n                limb2: 0xc73408b6a646780,\n            },\n            r1a0: u288 {\n                limb0: 0x6272ce5976d8eeba08f66b48,\n                limb1: 0x7dfbd78fa06509604c0cec8d,\n                limb2: 0x181ec0eaa6660e45,\n            },\n            r1a1: u288 {\n                limb0: 0x48af37c1a2343555fbf8a357,\n                limb1: 0xa7b5e1e20e64d6a9a9ce8e61,\n                limb2: 0x1147dcea39a47abd,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9fd5ab512989c347dc77f420,\n                limb1: 0xc1c85ee38ca3eb02a0a92db3,\n                limb2: 0x2134aa9ca8e8d251,\n            },\n            r0a1: u288 {\n                limb0: 0xe4f274770138210ec97f351c,\n                limb1: 0x95d8dbdcefe97681885f8ca3,\n                limb2: 0x25c205641353bd02,\n            },\n            r1a0: u288 {\n                limb0: 0x67e5fc30cb9d54c952e30530,\n                limb1: 0xbed1776ffd1f34cef4d280ba,\n                limb2: 0x9bfcdc38d2edfbc,\n            },\n            r1a1: u288 {\n                limb0: 0x2cdc4960c64fd9f1e1d8c062,\n                limb1: 0x25ab4699c0326eb69704502c,\n                limb2: 0x1a1bfdd2477bfb3,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc01f15fdcbfada9ddb6d29e5,\n                limb1: 0x1c597a278f91d2146e39417b,\n                limb2: 0x1e738c819e505603,\n            },\n            r0a1: u288 {\n                limb0: 0xc448617c638a5f5a3d7bb80b,\n                limb1: 0xe5c0daa3ccc9d0066e8748e6,\n                limb2: 0x1531822272e52502,\n            },\n            r1a0: u288 {\n                limb0: 0xe6dcbe5738e474a779a48437,\n                limb1: 0x778679b9709f1160945eb1f4,\n                limb2: 0x1c4c788451e4cdd3,\n            },\n            r1a1: u288 {\n                limb0: 0x9bb0e3bca45c662cc5a01154,\n                limb1: 0xdcc6384e4ed67039e4f3a54d,\n                limb2: 0x1e8aea6fd2e608bf,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4033c51e6e469818521cd2ae,\n                limb1: 0xb71a4629a4696b2759f8e19e,\n                limb2: 0x4f5744e29c1eb30,\n            },\n            r0a1: u288 {\n                limb0: 0xa4f47bbc60cb0649dca1c772,\n                limb1: 0x835f427106f4a6b897c6cf23,\n                limb2: 0x17ca6ea4855756bb,\n            },\n            r1a0: u288 {\n                limb0: 0x7f844a35c7eeadf511e67e57,\n                limb1: 0x8bb54fb0b3688cac8860f10,\n                limb2: 0x1c7258499a6bbebf,\n            },\n            r1a1: u288 {\n                limb0: 0x10d269c1779f96946e518246,\n                limb1: 0xce6fcef6676d0dacd395dc1a,\n                limb2: 0x2cf4c6ae1b55d87d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc55a9ab2be5b1c5f99b4afdf,\n                limb1: 0x443b75328adfb9d1d45195be,\n                limb2: 0x568d5a8780d1576,\n            },\n            r0a1: u288 {\n                limb0: 0x85b522186579e779a3606ede,\n                limb1: 0x1ebb4d198b300f1f7309a38f,\n                limb2: 0x9f9cb82898a523d,\n            },\n            r1a0: u288 {\n                limb0: 0x731bed2ccf3a6cbf023ed5b,\n                limb1: 0xcf340b50f74cdea1da20612a,\n                limb2: 0x21d63865d400949d,\n            },\n            r1a1: u288 {\n                limb0: 0x552864462eb5b6c21cb44edb,\n                limb1: 0x79eaf9afc4175e8707d58a17,\n                limb2: 0x2f0de7da33934176,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xab74a6bae36b17b1d2cc1081,\n                limb1: 0x904cf03d9d30b1fe9dc71374,\n                limb2: 0x14ffdd55685b7d82,\n            },\n            r0a1: u288 {\n                limb0: 0x277f7180b7cf33feded1583c,\n                limb1: 0xc029c3968a75b612303c4298,\n                limb2: 0x20ef4ba03605cdc6,\n            },\n            r1a0: u288 {\n                limb0: 0xd5a7a27c1baba3791ab18957,\n                limb1: 0x973730213d5d70d3e62d6db,\n                limb2: 0x24ca121c566eb857,\n            },\n            r1a1: u288 {\n                limb0: 0x9f4c2dea0492f548ae7d9e93,\n                limb1: 0xe584b6b251a5227c70c5188,\n                limb2: 0x22bcecac2bd5e51b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x340c82974f7221a53fc2f3ac,\n                limb1: 0x7146f18cd591d423874996e7,\n                limb2: 0xa6d154791056f46,\n            },\n            r0a1: u288 {\n                limb0: 0x70894ea6418890d53b5ee12a,\n                limb1: 0x882290cb53b795b0e7c8c208,\n                limb2: 0x1b5777dc18b2899b,\n            },\n            r1a0: u288 {\n                limb0: 0x99a0e528d582006a626206b6,\n                limb1: 0xb1cf825d80e199c5c9c795b5,\n                limb2: 0x2a97495b032f0542,\n            },\n            r1a1: u288 {\n                limb0: 0xc7cf5b455d6f3ba73debeba5,\n                limb1: 0xbb0a01235687223b7b71d0e5,\n                limb2: 0x250024ac44c35e3f,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd60abda751022b3ab52a71fb,\n                limb1: 0xac2bdbc297c0590db6bfc3f6,\n                limb2: 0x8eb71504cf2858c,\n            },\n            r0a1: u288 {\n                limb0: 0x6120b9134e8c6243cb4b6ab2,\n                limb1: 0xd2116c2eb5a22f2b5c828eb8,\n                limb2: 0x659ba27e279a722,\n            },\n            r1a0: u288 {\n                limb0: 0x89052eb421e5e6c50c145ffa,\n                limb1: 0x61d9216517954ead7424ae94,\n                limb2: 0x284310b8977a380c,\n            },\n            r1a1: u288 {\n                limb0: 0xbb92f5394c4983a885a8f465,\n                limb1: 0x6246bb3479c74157b24f6745,\n                limb2: 0x24da3c02db70be46,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb876e41dfcbf9c2c748bcbbf,\n                limb1: 0xa86948ab4d29ceba965253f9,\n                limb2: 0xd0080dd30431eab,\n            },\n            r0a1: u288 {\n                limb0: 0x1f7efe01d08f305661f923b3,\n                limb1: 0xf265d5179bafe8cf813b9077,\n                limb2: 0x1f37e85fd504232f,\n            },\n            r1a0: u288 {\n                limb0: 0xdeb3dcf52e8219964b3ca860,\n                limb1: 0x8b80044bac7a9a9540370b1d,\n                limb2: 0x208591589c3eecb3,\n            },\n            r1a1: u288 {\n                limb0: 0x32af49c4ba67546152124706,\n                limb1: 0xf1767348c820427b48c1137d,\n                limb2: 0x248a2111fa7d4710,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xccf841cf5c1cf8f4a0485e28,\n                limb1: 0xb5077662d0ce9d755af1446b,\n                limb2: 0x2b08658e9d5ba5cb,\n            },\n            r0a1: u288 {\n                limb0: 0x6ce62184a15685babd77f27f,\n                limb1: 0x5ff9bb7d74505b0542578299,\n                limb2: 0x7244563488bab2,\n            },\n            r1a0: u288 {\n                limb0: 0xec778048d344ac71275d961d,\n                limb1: 0x1273984019753000ad890d33,\n                limb2: 0x27c2855e60d361bd,\n            },\n            r1a1: u288 {\n                limb0: 0xa7a0071e22af2f3a79a12da,\n                limb1: 0xc84a6fd41c20759ff6ff169a,\n                limb2: 0x23e7ef2a308e49d1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x159e03e80a712c3eb4bb2322,\n                limb1: 0x152e9c0687bd5b6ed027fddc,\n                limb2: 0xa5e3c400f76af96,\n            },\n            r0a1: u288 {\n                limb0: 0xad170c2df32989054acf70f0,\n                limb1: 0x90e09c7dcbb9bf4ceb2c5ea4,\n                limb2: 0xe20987b18a95c02,\n            },\n            r1a0: u288 {\n                limb0: 0xd41b9cbc90b68f69379ec96b,\n                limb1: 0x6c8e7199aa1fea5f81256ace,\n                limb2: 0xbacee39e0dd19dd,\n            },\n            r1a1: u288 {\n                limb0: 0xcf578a12f806c50b19311642,\n                limb1: 0x2e7d9a7d24ff529e1b2e6943,\n                limb2: 0x262bbe97a5dc53fe,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7105024c431a33683d9d0b9d,\n                limb1: 0x12e23637b641ab0e5b322ad8,\n                limb2: 0x2918e9e08c764c28,\n            },\n            r0a1: u288 {\n                limb0: 0x26384979d1f5417e451aeabf,\n                limb1: 0xacfb499e362291d0b053bbf6,\n                limb2: 0x2a6ad1a1f7b04ef6,\n            },\n            r1a0: u288 {\n                limb0: 0xba4db515be70c384080fc9f9,\n                limb1: 0x5a983a6afa9cb830fa5b66e6,\n                limb2: 0x8cc1fa494726a0c,\n            },\n            r1a1: u288 {\n                limb0: 0x59c9af9399ed004284eb6105,\n                limb1: 0xef37f66b058b4c971d9c96b0,\n                limb2: 0x2c1839afde65bafa,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x5725ce4f02f7ca75d7189073,\n                limb1: 0xd105fefd57a1a89e7a69faa3,\n                limb2: 0x16a43b8238e9776f,\n            },\n            r0a1: u288 {\n                limb0: 0x25c4f2d5b972ced61efac33b,\n                limb1: 0x7b68646179eb9d2ceda7914a,\n                limb2: 0x1652bf6b8b1d3e3e,\n            },\n            r1a0: u288 {\n                limb0: 0xcb753ca19e3c38273d73e58a,\n                limb1: 0xa9a697028f43b5b5c1faf7f8,\n                limb2: 0x176d848a309eb7a,\n            },\n            r1a1: u288 {\n                limb0: 0x88a5193c45c3a80b0e66981a,\n                limb1: 0xfd6ff58f8f6f9027281fb5f9,\n                limb2: 0x25df2ca1dfba7366,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6bf13a27b0f4eb6657abc4b,\n                limb1: 0xf78d57f089bffdf07c676bb3,\n                limb2: 0x228e4aefbdd738df,\n            },\n            r0a1: u288 {\n                limb0: 0x4f41a40b04ec964619823053,\n                limb1: 0xfa3fb44f4a80641a9bb3bc09,\n                limb2: 0x29bf29a3d071ec4b,\n            },\n            r1a0: u288 {\n                limb0: 0x83823dcdff02bdc8a0e6aa03,\n                limb1: 0x79ac92f113de29251cd73a98,\n                limb2: 0x1ccdb791718d144,\n            },\n            r1a1: u288 {\n                limb0: 0xa074add9d066db9a2a6046b6,\n                limb1: 0xef3a70034497456c7d001a5,\n                limb2: 0x27d09562d815b4a6,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x25e816712be02294b62c3be3,\n                limb1: 0x13d1d46cbede4847bb0625b8,\n                limb2: 0x9e1d1ffd8abfd4b,\n            },\n            r0a1: u288 {\n                limb0: 0x1c0d2715920fb25f1c6ffee5,\n                limb1: 0x8f525d4d78921ab44b02a8ea,\n                limb2: 0x1db798591d05a543,\n            },\n            r1a0: u288 {\n                limb0: 0x3329e474cb10234c64b9ee03,\n                limb1: 0x576667fe79436c09a72a1e34,\n                limb2: 0x134ac3bce6fa1ffc,\n            },\n            r1a1: u288 {\n                limb0: 0xfc08e5edb8edfaf73ad7f2b6,\n                limb1: 0x781debc0d2178605c6f59e3f,\n                limb2: 0x1f267149e0cc2034,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x87a44d343cc761056f4f2eae,\n                limb1: 0x18016f16818253360d2c8adf,\n                limb2: 0x1bcd5c6e597d735e,\n            },\n            r0a1: u288 {\n                limb0: 0x593d7444c376f6d69289660b,\n                limb1: 0x1d6d97020b59cf2e4b38be4f,\n                limb2: 0x17133b62617f63a7,\n            },\n            r1a0: u288 {\n                limb0: 0x88cac99869bb335ec9553a70,\n                limb1: 0x95bcfa7f7c0b708b4d737afc,\n                limb2: 0x1eec79b9db274c09,\n            },\n            r1a1: u288 {\n                limb0: 0xe465a53e9fe085eb58a6be75,\n                limb1: 0x868e45cc13e7fd9d34e11839,\n                limb2: 0x2b401ce0f05ee6bb,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x83f48fbac5c1b94486c2d037,\n                limb1: 0xf95d9333449543de78c69e75,\n                limb2: 0x7bca8163e842be7,\n            },\n            r0a1: u288 {\n                limb0: 0x60157b2ff6e4d737e2dac26b,\n                limb1: 0x30ab91893fcf39d9dcf1b89,\n                limb2: 0x29a58a02490d7f53,\n            },\n            r1a0: u288 {\n                limb0: 0x520f9cb580066bcf2ce872db,\n                limb1: 0x24a6e42c185fd36abb66c4ba,\n                limb2: 0x309b07583317a13,\n            },\n            r1a1: u288 {\n                limb0: 0x5a4c61efaa3d09a652c72471,\n                limb1: 0xfcb2676d6aa28ca318519d2,\n                limb2: 0x1405483699afa209,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x96239ccb1673794f48c3814e,\n                limb1: 0xa9424d7fd8d1cb457d8106a8,\n                limb2: 0x18f633ca15146197,\n            },\n            r0a1: u288 {\n                limb0: 0x83821511cecf8050ab30d09b,\n                limb1: 0xabe9d19055677c64212fb315,\n                limb2: 0x17e8e943d4dd53dc,\n            },\n            r1a0: u288 {\n                limb0: 0xa3635311eefb6d8f006727b6,\n                limb1: 0xe67ebc4b351851a29c182f14,\n                limb2: 0x20be5ef63fa9f566,\n            },\n            r1a1: u288 {\n                limb0: 0xbdb0a8b8e3e37a1cad4fab9f,\n                limb1: 0x12270bf0d7ba9cdcffa36b1c,\n                limb2: 0x29de034e18f7685e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x208dc70e391d90d0bfb98656,\n                limb1: 0xbfa819c7c80fa22a3aa2e036,\n                limb2: 0x1a1213ebcb6adb0e,\n            },\n            r0a1: u288 {\n                limb0: 0xd6ae81e1044113f735597233,\n                limb1: 0x43cc8817df94943fc400f20e,\n                limb2: 0x2c4b9b2ee1ce9b7e,\n            },\n            r1a0: u288 {\n                limb0: 0x44af7f302b92dee29928a9b1,\n                limb1: 0x4e6e061af95bc50d61b54813,\n                limb2: 0x184eaff39795e0b5,\n            },\n            r1a1: u288 {\n                limb0: 0xd7f6b1aace297a73b349891,\n                limb1: 0x3f66972428dc9236b93f8718,\n                limb2: 0xf54166413a83eb9,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xbfdfdae86101e29da3e869b8,\n                limb1: 0xf969a9b961a28b872e56aac2,\n                limb2: 0x1afdc719440d90f0,\n            },\n            r0a1: u288 {\n                limb0: 0xee43c995686f13baa9b07266,\n                limb1: 0xbfa387a694c641cceee4443a,\n                limb2: 0x104d8c02eb7f60c8,\n            },\n            r1a0: u288 {\n                limb0: 0x8d451602b3593e798aecd7fb,\n                limb1: 0x69ffbefe7c5ac2cf68e8691e,\n                limb2: 0x2ea064a1bc373d28,\n            },\n            r1a1: u288 {\n                limb0: 0x6e7a663073bfe88a2b02326f,\n                limb1: 0x5faadb36847ca0103793fa4a,\n                limb2: 0x26c09a8ec9303836,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xda7e32ff636bb66ede683e6,\n                limb1: 0x72508ca3cb51c08078df9e81,\n                limb2: 0xcbffc477cdc6d53,\n            },\n            r0a1: u288 {\n                limb0: 0xec389fc066f7281a57220f62,\n                limb1: 0xcb8aa465fb7a1fbef606f5f4,\n                limb2: 0xae52f9f10665ce1,\n            },\n            r1a0: u288 {\n                limb0: 0x38510c3e655d75deba1be8d1,\n                limb1: 0xeedd4d29f92ac584ba92062d,\n                limb2: 0x2f2000eea8290b01,\n            },\n            r1a1: u288 {\n                limb0: 0x4d27e3af8c4b7ee38398ca08,\n                limb1: 0x10704138acc1ba6a0c2845ed,\n                limb2: 0x2a7ab438d02abe84,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3d038747ebac16adc1c50bdd,\n                limb1: 0xe3706a783e99f73ac742aa1a,\n                limb2: 0x17eac23b00b545ff,\n            },\n            r0a1: u288 {\n                limb0: 0xdc25ff0bd02abcbe502c4e37,\n                limb1: 0x39b92e6ebb65e5f2d8504f90,\n                limb2: 0x2415b5f61301dff6,\n            },\n            r1a0: u288 {\n                limb0: 0x9cdcb2146d15f37900db82ac,\n                limb1: 0x96c3940e2f5c5f8198fadee3,\n                limb2: 0x2f662ea79b473fc2,\n            },\n            r1a1: u288 {\n                limb0: 0xc0fb95686de65e504ed4c57a,\n                limb1: 0xec396c7c4275d4e493b00713,\n                limb2: 0x106d2aab8d90d517,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9c305c582cfb7a7d23b95811,\n                limb1: 0x4bb6df7058c076c8852077bc,\n                limb2: 0x260910f89761bfb5,\n            },\n            r0a1: u288 {\n                limb0: 0x7f49c8cd61b91f52a6e78d0b,\n                limb1: 0x3a2ca7573f8e189320281763,\n                limb2: 0x285987c9b92ff007,\n            },\n            r1a0: u288 {\n                limb0: 0xd9a09c023a61fcc1548df2ce,\n                limb1: 0xa6582f6b78778a7cb28e1c1a,\n                limb2: 0x1895d97b6e5913a6,\n            },\n            r1a1: u288 {\n                limb0: 0x6afbf3e269da5ffaac177f8e,\n                limb1: 0x654e37e37a96d0e9327281d7,\n                limb2: 0x7834cf60dd26f16,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x49bbb4d856921e3177c0b5bf,\n                limb1: 0x76d84d273694e662bdd5d364,\n                limb2: 0xea5dc611bdd369d,\n            },\n            r0a1: u288 {\n                limb0: 0x9e9fc3adc530fa3c5c6fd7fe,\n                limb1: 0x114bb0c0e8bd247da41b3883,\n                limb2: 0x6044124f85d2ce,\n            },\n            r1a0: u288 {\n                limb0: 0xa6e604cdb4e40982a97c084,\n                limb1: 0xef485caa56c7820be2f6b11d,\n                limb2: 0x280de6387dcbabe1,\n            },\n            r1a1: u288 {\n                limb0: 0xcaceaf6df5ca9f8a18bf2e1e,\n                limb1: 0xc5cce932cc6818b53136c142,\n                limb2: 0x12f1cd688682030c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x37497c23dcf629df58a5fa12,\n                limb1: 0x4fcd5534ae47bded76245ac9,\n                limb2: 0x1715ab081e32ac95,\n            },\n            r0a1: u288 {\n                limb0: 0x856275471989e2c288e3c83,\n                limb1: 0xb42d81a575b89b127a7821a,\n                limb2: 0x5fa75a0e4ae3118,\n            },\n            r1a0: u288 {\n                limb0: 0xeb22351e8cd345c23c0a3fef,\n                limb1: 0x271feb16d4b47d2267ac9d57,\n                limb2: 0x258f9950b9a2dee5,\n            },\n            r1a1: u288 {\n                limb0: 0xb5f75468922dc025ba7916fa,\n                limb1: 0x7e24515de90edf1bde4edd9,\n                limb2: 0x289145b3512d4d81,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x474d539c09e56d254248eb2b,\n                limb1: 0xfd31c4dda0194dfc995c9a7,\n                limb2: 0xc3a11eb34327e4,\n            },\n            r0a1: u288 {\n                limb0: 0x9c159e673fc04e4708c12343,\n                limb1: 0xb4f305fcf82d9e1fc29c5be4,\n                limb2: 0x1f4075ebbb40ae4f,\n            },\n            r1a0: u288 {\n                limb0: 0xb3c06a6a7da6cae6418b20f1,\n                limb1: 0x52fd9665f418fc28d1a1c512,\n                limb2: 0x15dcb567f6ba3f15,\n            },\n            r1a1: u288 {\n                limb0: 0x68eef22325cbe13b51e949ef,\n                limb1: 0x58ff6f0479b6dba68c5b5457,\n                limb2: 0x1b2faffca46537d7,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xe2b891b2e4ab31d41c1e862d,\n                limb1: 0x5e80a5ab28e058fe3363fad3,\n                limb2: 0x1881cd458e4900fd,\n            },\n            r0a1: u288 {\n                limb0: 0xacf99791bc8df6a58559a444,\n                limb1: 0x3c5ae5820c97272c6ecc3a34,\n                limb2: 0x1ae9629d591a5874,\n            },\n            r1a0: u288 {\n                limb0: 0x83a000d401b2be3889b14e33,\n                limb1: 0xa6d94925a487bed7783b13e9,\n                limb2: 0x1460eb18169abc7,\n            },\n            r1a1: u288 {\n                limb0: 0x68a0fe19092799473fa1ecca,\n                limb1: 0x4a5f3a56311ba88915d67614,\n                limb2: 0x2fa198a45edde900,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x95b7b32bcc3119c64a62a8de,\n                limb1: 0xe07184496f17bbd59a4b7bbd,\n                limb2: 0x1708c536fd78b531,\n            },\n            r0a1: u288 {\n                limb0: 0xfa85b5778c77166c1523a75e,\n                limb1: 0x89a00c53309a9e525bef171a,\n                limb2: 0x2d2287dd024e421,\n            },\n            r1a0: u288 {\n                limb0: 0x31fd0884eaf2208bf8831e72,\n                limb1: 0x537e04ea344beb57ee645026,\n                limb2: 0x23c7f99715257261,\n            },\n            r1a1: u288 {\n                limb0: 0x8c38b3aeea525f3c2d2fdc22,\n                limb1: 0xf838a99d9ec8ed6dcec6a2a8,\n                limb2: 0x2973d5159ddc479a,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3f058d8c63fd905d3ca29b42,\n                limb1: 0x1f0a90982cc68e4ddcd83e57,\n                limb2: 0x240aeaae0783fbfa,\n            },\n            r0a1: u288 {\n                limb0: 0xedfee81d80da310fdf0d0d8,\n                limb1: 0xc2208e6de8806cf491bd74d4,\n                limb2: 0xb7318be62a476af,\n            },\n            r1a0: u288 {\n                limb0: 0x3c6920c8a24454c634f388fe,\n                limb1: 0x23328a006312a722ae09548b,\n                limb2: 0x1d2f1c58b80432e2,\n            },\n            r1a1: u288 {\n                limb0: 0xb72980574f7a877586de3a63,\n                limb1: 0xcd773b87ef4a29c16784c5ae,\n                limb2: 0x1f812c7e22f339c5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xe72c7bcd2ec07cf939c82bf2,\n                limb1: 0xf20f143e871594e88e02564f,\n                limb2: 0x28a1e3b81f977f43,\n            },\n            r0a1: u288 {\n                limb0: 0xf5788be1af3d8de8da67b79f,\n                limb1: 0x48f88a4e0abb1434db9e7304,\n                limb2: 0x292130cc233b4429,\n            },\n            r1a0: u288 {\n                limb0: 0x1e5eac242edb50874c5dde70,\n                limb1: 0x24febedd561c1b49f93efde4,\n                limb2: 0x2673053ad23b2f55,\n            },\n            r1a1: u288 {\n                limb0: 0x3dcc892c39d59e3cb3ab2dc7,\n                limb1: 0xbf90bfbeeaf31e4569c33b0f,\n                limb2: 0x241dd4018555da7,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd8e8c28949cdca3f8d4385d7,\n                limb1: 0x98fe4c263e58d50c230f9604,\n                limb2: 0x96e498dd6ed6312,\n            },\n            r0a1: u288 {\n                limb0: 0x693f5c59849b8c6dab40e573,\n                limb1: 0xb9754e3f3c99b4c9a9d3e253,\n                limb2: 0x2333f41aae69fc1,\n            },\n            r1a0: u288 {\n                limb0: 0xc7c0fb6603257da254a953d7,\n                limb1: 0xaf2914e88ac303e54c672acd,\n                limb2: 0x25a52f889cfe814f,\n            },\n            r1a1: u288 {\n                limb0: 0x6502eb82951b4604da30a2a9,\n                limb1: 0x9b317811fb6785bac19a8203,\n                limb2: 0x1cb5c238f6a8f6c8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xfeebe92941f95b6ea1d095bb,\n                limb1: 0x9c7962eb8bbeb95a9ca7cf50,\n                limb2: 0x290bdaf3b9a08dc3,\n            },\n            r0a1: u288 {\n                limb0: 0x686cfa11c9d4b93675495599,\n                limb1: 0xb1d69e17b4b5ebf64f0d51e1,\n                limb2: 0x2c18bb4bdc2e9567,\n            },\n            r1a0: u288 {\n                limb0: 0x17419b0f6a04bfc98d71527,\n                limb1: 0x80eba6ff02787e3de964a4d1,\n                limb2: 0x26087bb100e7ff9f,\n            },\n            r1a1: u288 {\n                limb0: 0x17c4ee42c3f612c43a08f689,\n                limb1: 0x7276bdda2df6d51a291dba69,\n                limb2: 0x40a7220ddb393e1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x917d90650b71f1ab46bab72,\n                limb1: 0xc1918cfed77a56e1070c0641,\n                limb2: 0xed0bb71254b669b,\n            },\n            r0a1: u288 {\n                limb0: 0x3ea287920147db34d6f66f4f,\n                limb1: 0x79077d9eba0a62a9cd93b232,\n                limb2: 0x10741ac25481e28a,\n            },\n            r1a0: u288 {\n                limb0: 0x619c7fea78e866aba4198715,\n                limb1: 0x34846c0b78033f9da1fad5e5,\n                limb2: 0x154d8e87a1d50a8a,\n            },\n            r1a1: u288 {\n                limb0: 0xf07d32dec360fffd6db7bc17,\n                limb1: 0x73f267153a367f1bd57f5383,\n                limb2: 0x12c09b76a9ecb04b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x830d777c19040571a1d72fd0,\n                limb1: 0x651b2c6b8c292020817a633f,\n                limb2: 0x268af1e285bc59ff,\n            },\n            r0a1: u288 {\n                limb0: 0xede78baa381c5bce077f443d,\n                limb1: 0x540ff96bae21cd8b9ae5438b,\n                limb2: 0x12a1fa7e3b369242,\n            },\n            r1a0: u288 {\n                limb0: 0x797c0608e5a535d8736d4bc5,\n                limb1: 0x375faf00f1147656b7c1075f,\n                limb2: 0xda60fab2dc5a639,\n            },\n            r1a1: u288 {\n                limb0: 0x610d26085cfbebdb30ce476e,\n                limb1: 0x5bc55890ff076827a09e8444,\n                limb2: 0x14272ee2d25f20b7,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x5cc8ee1ae0c281270770770a,\n                limb1: 0x875f773ac9a2f4453b76031d,\n                limb2: 0x2e18a40702156e7e,\n            },\n            r0a1: u288 {\n                limb0: 0x9a868b9382515fe16c1eacb0,\n                limb1: 0x6c9facfbe6243346ad5d6c8a,\n                limb2: 0x16555ceba9837031,\n            },\n            r1a0: u288 {\n                limb0: 0xf764e54b3fc901693aae459a,\n                limb1: 0xa67ee51e4af1452067ac0ffe,\n                limb2: 0x2826818194b192f5,\n            },\n            r1a1: u288 {\n                limb0: 0x61936eafb15f6a8062be4bb7,\n                limb1: 0x9e1a4b26df02958fcf88f197,\n                limb2: 0x1aa2bcb13967fa84,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd6862e1a4ca3b2baf6f8d8aa,\n                limb1: 0x96f9066dded3a3d899025af4,\n                limb2: 0x1a98af9f0d48fd3,\n            },\n            r0a1: u288 {\n                limb0: 0x276b417cc61ea259c114314e,\n                limb1: 0x464399e5e0037b159866b246,\n                limb2: 0x12cc97dcf32896b5,\n            },\n            r1a0: u288 {\n                limb0: 0xef72647f4c2d08fc038c4377,\n                limb1: 0x34883cea19be9a490a93cf2b,\n                limb2: 0x10d01394daa61ed0,\n            },\n            r1a1: u288 {\n                limb0: 0xdf345239ece3acaa62919643,\n                limb1: 0x914780908ece64e763cca062,\n                limb2: 0xee2a80dbd2012a3,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x1d5a31f4d08a0ebf7e071e00,\n                limb1: 0xcd1244dd95dd30005f531f81,\n                limb2: 0xb4cb469a2dcf4f1,\n            },\n            r0a1: u288 {\n                limb0: 0x7c5938adaf38b355092de1f1,\n                limb1: 0x292ab08995b293abfcba14b,\n                limb2: 0x1fd126a2b9f37c67,\n            },\n            r1a0: u288 {\n                limb0: 0x6e9d352b02a7cb771fcc33f9,\n                limb1: 0x7754d8536eefda2025a07340,\n                limb2: 0x1840289291c35a72,\n            },\n            r1a1: u288 {\n                limb0: 0xe85f465417b7bd758c547b2e,\n                limb1: 0xf7f703c3bc55ff8a01fa9365,\n                limb2: 0xfa301227880a841,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x214fc3a8db005247daee136a,\n                limb1: 0xc37ebf6b47552b9bee766d92,\n                limb2: 0xb58ed274feb30f6,\n            },\n            r0a1: u288 {\n                limb0: 0x905dea9364094d99ec8a9045,\n                limb1: 0x3bfd9fbe57a1d2815913812e,\n                limb2: 0x10dfd90843c03ab4,\n            },\n            r1a0: u288 {\n                limb0: 0x118f7a0e148e4bda7446fe05,\n                limb1: 0x66583235f020b02a817ec6db,\n                limb2: 0x2352079b097fceea,\n            },\n            r1a1: u288 {\n                limb0: 0xba58bc60f29736ec6df2a879,\n                limb1: 0xbaf7d69e4f04d094074ffad5,\n                limb2: 0x27b1c5d0ef78b4e7,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x79be48160d704f2e2e5dca40,\n                limb1: 0x8fbf9f087c596616cea86512,\n                limb2: 0x1d8a89117fbc7c8,\n            },\n            r0a1: u288 {\n                limb0: 0xfe8a0cc5bc30a043cb039f3e,\n                limb1: 0xba2d3630acdf8e20b9dd3c3c,\n                limb2: 0xba977bc2fb18b8f,\n            },\n            r1a0: u288 {\n                limb0: 0x487697b042f01992743cef38,\n                limb1: 0xcdf5ff596e895a68f81f7db9,\n                limb2: 0x2e8c6bec9fdf6256,\n            },\n            r1a1: u288 {\n                limb0: 0x26b24c68c759e3a6c6a1e1be,\n                limb1: 0xd110ce390b2cc30f60e04272,\n                limb2: 0x2ef61a9ef3261262,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa4058149e82ea51362b79be4,\n                limb1: 0x734eba2621918a820ae44684,\n                limb2: 0x110a314a02272b1,\n            },\n            r0a1: u288 {\n                limb0: 0xe2b43963ef5055df3c249613,\n                limb1: 0x409c246f762c0126a1b3b7b7,\n                limb2: 0x19aa27f34ab03585,\n            },\n            r1a0: u288 {\n                limb0: 0x179aad5f620193f228031d62,\n                limb1: 0x6ba32299b05f31b099a3ef0d,\n                limb2: 0x157724be2a0a651f,\n            },\n            r1a1: u288 {\n                limb0: 0xa33b28d9a50300e4bbc99137,\n                limb1: 0x262a51847049d9b4d8cea297,\n                limb2: 0x189acb4571d50692,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd946f57b3b0729afee82f5bd,\n                limb1: 0xadf28363d79debf1404ef6f1,\n                limb2: 0x1c6ec53f8e1f685,\n            },\n            r0a1: u288 {\n                limb0: 0x6326670cc780b7709928fbc2,\n                limb1: 0x6911b53a757220cba583023,\n                limb2: 0x1a8b3686dff0d70f,\n            },\n            r1a0: u288 {\n                limb0: 0xa8749fb48ebbe0aabb71ba75,\n                limb1: 0xf8d9ab7f732d405fedd6ee74,\n                limb2: 0x5bfdc6f295776f0,\n            },\n            r1a1: u288 {\n                limb0: 0x894b9e4055ffeec20a7953e1,\n                limb1: 0xdff2a1fba1c35348b8749de3,\n                limb2: 0x48735157c274b95,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x29bd4381ae4afc677ee37ed6,\n                limb1: 0x29ed43453f9a008d9176f004,\n                limb2: 0x24134eb915104f43,\n            },\n            r0a1: u288 {\n                limb0: 0x81597f82bb67e90a3e72bdd2,\n                limb1: 0xab3bbde5f7bbb4df6a6b5c19,\n                limb2: 0x19ac61eea40a367c,\n            },\n            r1a0: u288 {\n                limb0: 0xe30a79342fb3199651aee2fa,\n                limb1: 0xf500f028a73ab7b7db0104a3,\n                limb2: 0x808b50e0ecb5e4d,\n            },\n            r1a1: u288 {\n                limb0: 0x55f2818453c31d942444d9d6,\n                limb1: 0xf6dd80c71ab6e893f2cf48db,\n                limb2: 0x13c3ac4488abd138,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb7fc2c73d3a21478886c6925,\n                limb1: 0x83f8f0f69bd418cd15cecf76,\n                limb2: 0x4986ef1d1f37c0c,\n            },\n            r0a1: u288 {\n                limb0: 0x8929725c8a1d7ff0eb249763,\n                limb1: 0x7b7a6c18c6e1940a7bd582a6,\n                limb2: 0x1dd6e84a61cc2752,\n            },\n            r1a0: u288 {\n                limb0: 0x46c48446768009b8c1a0d40a,\n                limb1: 0xd20a4867c595c48f2334a8c4,\n                limb2: 0x51eeff6aec94138,\n            },\n            r1a1: u288 {\n                limb0: 0x55eafe5e395404eb31dcfe4,\n                limb1: 0xa820fd20250cef46f2825458,\n                limb2: 0xb96eb80fbf2d040,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd1464269bbeafa546f559b8f,\n                limb1: 0xab7f7dcd1ac32b86979471cf,\n                limb2: 0x6a38256ee96f113,\n            },\n            r0a1: u288 {\n                limb0: 0xf14d50984e65f9bc41df4e7e,\n                limb1: 0x350aff9be6f9652ad441a3ad,\n                limb2: 0x1b1e60534b0a6aba,\n            },\n            r1a0: u288 {\n                limb0: 0x9e98507da6cc50a56f023849,\n                limb1: 0xcf8925e03f2bb5c1ba0962dd,\n                limb2: 0x2b18961810a62f87,\n            },\n            r1a1: u288 {\n                limb0: 0x3a4c61b937d4573e3f2da299,\n                limb1: 0x6f4c6c13fd90f4edc322796f,\n                limb2: 0x13f4e99b6a2f025e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2c7391fd0efbf9f8fa7d70bf,\n                limb1: 0xeccd6c2bae8d56b800dc1353,\n                limb2: 0xe5303c0689a9e57,\n            },\n            r0a1: u288 {\n                limb0: 0x19598ac1ef4eec1aa65bb9df,\n                limb1: 0x96a88b783dca84fc7c04537,\n                limb2: 0x25b5447946e3c22c,\n            },\n            r1a0: u288 {\n                limb0: 0xf554c51a85400690cf66eb6f,\n                limb1: 0x1c6de9e803bcd80689072c29,\n                limb2: 0xa476f32f5dd7149,\n            },\n            r1a1: u288 {\n                limb0: 0xfa6d6f282b1884f75fb19c3,\n                limb1: 0x9e2279e2cceadbb22bb4936f,\n                limb2: 0x1022cdda753274dc,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xe0115a79120ae892a72f3dcb,\n                limb1: 0xec67b5fc9ea414a4020135f,\n                limb2: 0x1ee364e12321904a,\n            },\n            r0a1: u288 {\n                limb0: 0xa74d09666f9429c1f2041cd9,\n                limb1: 0x57ffe0951f863dd0c1c2e97a,\n                limb2: 0x154877b2d1908995,\n            },\n            r1a0: u288 {\n                limb0: 0xcbe5e4d2d2c91cdd4ccca0,\n                limb1: 0xe6acea145563a04b2821d120,\n                limb2: 0x18213221f2937afb,\n            },\n            r1a1: u288 {\n                limb0: 0xfe20afa6f6ddeb2cb768a5ae,\n                limb1: 0x1a3b509131945337c3568fcf,\n                limb2: 0x127b5788263a927e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa3d871626cafc52591cba2f5,\n                limb1: 0x9eb27d36f9d6ff81a65e608f,\n                limb2: 0xc3d9b045879a885,\n            },\n            r0a1: u288 {\n                limb0: 0x33d9d97851c4759eaa3ec41e,\n                limb1: 0xdef827b9a238dce09fd9a98b,\n                limb2: 0x3b3e7b317193c08,\n            },\n            r1a0: u288 {\n                limb0: 0x73bce84ace690975f772498d,\n                limb1: 0xc7dd71cceb715cbeaba0300b,\n                limb2: 0xda625363f371385,\n            },\n            r1a1: u288 {\n                limb0: 0x7ccf1f4e92457cc060cc2dd2,\n                limb1: 0x57a9867b1da25533618b0a38,\n                limb2: 0x2ce2445b6d3b5d47,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xe7c658aecdab4db3c83f7927,\n                limb1: 0xfbf162264ca04ee50c70bde8,\n                limb2: 0x2a20f4565b7ff885,\n            },\n            r0a1: u288 {\n                limb0: 0x45b1c2f0a1226361f42683c0,\n                limb1: 0x9acdd892c48c08de047296bc,\n                limb2: 0x27836373108925d4,\n            },\n            r1a0: u288 {\n                limb0: 0xc0ea9294b345e6d4892676a7,\n                limb1: 0xcba74eca77086af245d1606e,\n                limb2: 0xf20edac89053e72,\n            },\n            r1a1: u288 {\n                limb0: 0x4c92a28f2779a527a68a938c,\n                limb1: 0x3a1c3c55ff9d20eac109fab3,\n                limb2: 0x21c4a8c524b1ee7d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2c5b2b73977e0bbe733f02f1,\n                limb1: 0x941ef3cc68b0ec1c58733f97,\n                limb2: 0x109dfb4fec8eeaa9,\n            },\n            r0a1: u288 {\n                limb0: 0x5e519b7be134d6e5176eb638,\n                limb1: 0x8a154c6ff9c0c0e682d51638,\n                limb2: 0x15abca9e5e8debfd,\n            },\n            r1a0: u288 {\n                limb0: 0x589fe2b1434b6c3ccdd54b47,\n                limb1: 0x2d3af377839237e5a832dd21,\n                limb2: 0x1cc7d69606c03fed,\n            },\n            r1a1: u288 {\n                limb0: 0xde1899cc358ffca1459c4725,\n                limb1: 0x3b61b22ac1e07c00ed9a6e90,\n                limb2: 0xc4ba7a6f58eb44,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa68021d593c46246af22559e,\n                limb1: 0x5c2cfc5bc4cd1b48f4704134,\n                limb2: 0x296066ede1298f8c,\n            },\n            r0a1: u288 {\n                limb0: 0xfe17dd6765eb9b9625eb6a84,\n                limb1: 0x4e35dd8e8f6088bb14299f8d,\n                limb2: 0x1a380ab2689106e4,\n            },\n            r1a0: u288 {\n                limb0: 0x82bacf337ca09853df42bc59,\n                limb1: 0xa15de4ef34a30014c5a2e9ae,\n                limb2: 0x243cc0cec53c778b,\n            },\n            r1a1: u288 {\n                limb0: 0xcb2a1bf18e3ba9349b0a8bf2,\n                limb1: 0x35134b2505cbb5a4c91f0ac4,\n                limb2: 0x25e45206b13f43c4,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8e97b007ffd9891bd0e77650,\n                limb1: 0x77671278ac33f17df6b1db88,\n                limb2: 0x243daddc47f5d5c2,\n            },\n            r0a1: u288 {\n                limb0: 0x655fe4c8bbe5ee06aaa0054b,\n                limb1: 0xf751450b02c93c7ddea95938,\n                limb2: 0x21aa988e950d563f,\n            },\n            r1a0: u288 {\n                limb0: 0xb51b3b6b8582de3eb0549518,\n                limb1: 0x84a1031766b7e465f5bbf40c,\n                limb2: 0xd46c2d5b95e5532,\n            },\n            r1a1: u288 {\n                limb0: 0x50b6ddd8a5eef0067652191e,\n                limb1: 0x298832a0bc46ebed8bff6190,\n                limb2: 0xb568b4fe8311f93,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xdbcb8097378d390b07da248a,\n                limb1: 0x8c1663634643ccfc902fb9ab,\n                limb2: 0xc86707944dd94dc,\n            },\n            r0a1: u288 {\n                limb0: 0x9e8793757f235c776197a40c,\n                limb1: 0x7dbd3da8b7acc50b88b81d13,\n                limb2: 0x30275a0ea994486a,\n            },\n            r1a0: u288 {\n                limb0: 0xef0575f2db98a6990b5e711a,\n                limb1: 0x435f838e3006b8a20f712ed7,\n                limb2: 0x17966a602fe26c9a,\n            },\n            r1a1: u288 {\n                limb0: 0x5d4bfdefb19390640b2ed319,\n                limb1: 0xa78667173fb7df5f94b4a16a,\n                limb2: 0x8e4352fb4ae51a2,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6cd6297331a7caa0be521395,\n                limb1: 0x7e756b60245d002f45c0fb0e,\n                limb2: 0x184bca44f635d83c,\n            },\n            r0a1: u288 {\n                limb0: 0xf90865285ead353404073268,\n                limb1: 0x602b0cb51354964341f10596,\n                limb2: 0x2f9be8e4ee793677,\n            },\n            r1a0: u288 {\n                limb0: 0x6690385e85e2502acccf0f73,\n                limb1: 0x75cde4d65e511fd1f30fdbfb,\n                limb2: 0x201c80aa6ed20e16,\n            },\n            r1a1: u288 {\n                limb0: 0x968094989f04e6e32c57134e,\n                limb1: 0xced44e94479ad20ef1a76854,\n                limb2: 0xc8cc909f185a534,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xddb4db99db681d35f71a159c,\n                limb1: 0xf71a330019414e6fdee75700,\n                limb2: 0x14d9838e7d1918bb,\n            },\n            r0a1: u288 {\n                limb0: 0x203c8bac71951a5f2c653710,\n                limb1: 0x9fc93f8da38ecc2957313982,\n                limb2: 0x7b6d981259cabd9,\n            },\n            r1a0: u288 {\n                limb0: 0xa7297cdb5be0cc45d48ca6af,\n                limb1: 0xa07b4b025ebe6c960eddfc56,\n                limb2: 0xef2a5c30ef00652,\n            },\n            r1a1: u288 {\n                limb0: 0xb7f05c76d860e9122b36ecd7,\n                limb1: 0x407d6522e1f9ce2bcbf80eda,\n                limb2: 0x197625a558f32c36,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x97e789e67f556840749976fc,\n                limb1: 0xd84af043e944d5b04a2b8bf2,\n                limb2: 0x2b12733b29b0d0f2,\n            },\n            r0a1: u288 {\n                limb0: 0xc26f93b9a33a3a014aa0d63e,\n                limb1: 0xa7bb6212b74b1d178ca2c461,\n                limb2: 0x7ff0135d877564a,\n            },\n            r1a0: u288 {\n                limb0: 0xafd419b0ec21da02a2ab2d18,\n                limb1: 0x2a4be9f89330466fbf862ab6,\n                limb2: 0x86ef4c7ef738225,\n            },\n            r1a1: u288 {\n                limb0: 0xa09427825229ef33a181b63a,\n                limb1: 0xe6ad699b1fab9a393ee44509,\n                limb2: 0x277c698746a431ea,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb0f04df9dec94801e48a6ff7,\n                limb1: 0xdc59d087c627d38334e5b969,\n                limb2: 0x3d36e11420be053,\n            },\n            r0a1: u288 {\n                limb0: 0xc80f070001aa1586189e0215,\n                limb1: 0xff849fcbbbe7c00c83ab5282,\n                limb2: 0x2a2354b2882706a6,\n            },\n            r1a0: u288 {\n                limb0: 0x48cf70c80f08b6c7dc78adb2,\n                limb1: 0xc6632efa77b36a4a1551d003,\n                limb2: 0xc2d3533ece75879,\n            },\n            r1a1: u288 {\n                limb0: 0x63e82ba26617416a0b76ddaa,\n                limb1: 0xdaceb24adda5a049bed29a50,\n                limb2: 0x1a82061a3344043b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x473461f8672727e9ffa7c398,\n                limb1: 0xaf2ae23f8f850a93ca51d377,\n                limb2: 0x2a2aa81268836446,\n            },\n            r0a1: u288 {\n                limb0: 0x678d0df15b589c522e0f6d57,\n                limb1: 0xf5bb7af20c01400bafb375ab,\n                limb2: 0xfb0dcf47bd22abe,\n            },\n            r1a0: u288 {\n                limb0: 0x840273537792af0d0fa5532a,\n                limb1: 0xceebd5b43f66b4e252465428,\n                limb2: 0x126f3ae4ddbc2031,\n            },\n            r1a1: u288 {\n                limb0: 0xff451566c1fcfe01edf44a57,\n                limb1: 0x90ad9e37524e5aa9552f4848,\n                limb2: 0x1afee273872f8558,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9152fecf0f523415acc7c7be,\n                limb1: 0xd9632cbfccc4ea5d7bf31177,\n                limb2: 0x2d7288c5f8c83ab1,\n            },\n            r0a1: u288 {\n                limb0: 0x53144bfe4030f3f9f5efda8,\n                limb1: 0xfeec394fbf392b11c66bae27,\n                limb2: 0x28840813ab8a200b,\n            },\n            r1a0: u288 {\n                limb0: 0xdec3b11fbc28b305d9996ec7,\n                limb1: 0x5b5f8d9d17199e149c9def6e,\n                limb2: 0x10c1a149b6751bae,\n            },\n            r1a1: u288 {\n                limb0: 0x665e8eb7e7d376a2d921c889,\n                limb1: 0xfdd76d06e46ee1a943b8788d,\n                limb2: 0x8bb21d9960e837b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3a67c28a175200e631aa506a,\n                limb1: 0x7397303a34968ff17c06e801,\n                limb2: 0x1b81e0c63123688b,\n            },\n            r0a1: u288 {\n                limb0: 0x3490cfd4f076c621dac4a12c,\n                limb1: 0xec183578c91b90b72e5887b7,\n                limb2: 0x179fb354f608da00,\n            },\n            r1a0: u288 {\n                limb0: 0x9322bde2044dde580a78ba33,\n                limb1: 0xfc74821b668d3570cad38f8b,\n                limb2: 0x8cec54a291f5e57,\n            },\n            r1a1: u288 {\n                limb0: 0xc2818b6a9530ee85d4b2ae49,\n                limb1: 0x8d7b651ad167f2a43d7a2d0a,\n                limb2: 0x7c9ca9bab0ffc7f,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x5fd646ef2dbbf7900b22c4f9,\n                limb1: 0xb570d4b312025ab6a457a604,\n                limb2: 0x15705c5227a054f9,\n            },\n            r0a1: u288 {\n                limb0: 0x250623965dd8aa6332d6b309,\n                limb1: 0x983ac0634d10fad03a2b04e3,\n                limb2: 0x2066f7571a63d80b,\n            },\n            r1a0: u288 {\n                limb0: 0xa0a6c604d57330312d443bf4,\n                limb1: 0x18e4218e5fe795fd18bbb5a3,\n                limb2: 0x230c3fe7c21093e4,\n            },\n            r1a1: u288 {\n                limb0: 0xa516edc5b6c21a7a3b76eb39,\n                limb1: 0x33e9b3d9d3cb10e483760299,\n                limb2: 0x21691bae8377c5d3,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd0e45dcb44d7ac9f608ff467,\n                limb1: 0xa5caf677a2dba4ef48ee021,\n                limb2: 0x2059a94678da4ba,\n            },\n            r0a1: u288 {\n                limb0: 0xcc69cd267c7d0aa927d5a5ee,\n                limb1: 0x284683ac1a2dc9daee692408,\n                limb2: 0x19f923f3b031dd2c,\n            },\n            r1a0: u288 {\n                limb0: 0x52d42ec97ef4ee35e35e8afb,\n                limb1: 0x42fa4e25346a269577c06677,\n                limb2: 0xfa902cc6767142e,\n            },\n            r1a1: u288 {\n                limb0: 0x7d08d1a81f6af3a722eaca21,\n                limb1: 0xaec250560f8a402fcdb429aa,\n                limb2: 0x1867fe2267bae5b6,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa576408f8300de3a7714e6ae,\n                limb1: 0xe1072c9a16f202ecf37fbc34,\n                limb2: 0x1b0cb1e2b5871263,\n            },\n            r0a1: u288 {\n                limb0: 0x2128e2314694b663286e231e,\n                limb1: 0x54bea71957426f002508f715,\n                limb2: 0x36ecc5dbe069dca,\n            },\n            r1a0: u288 {\n                limb0: 0x17c77cd88f9d5870957850ce,\n                limb1: 0xb7f4ec2bc270ce30538fe9b8,\n                limb2: 0x766279e588592bf,\n            },\n            r1a1: u288 {\n                limb0: 0x1b6caddf18de2f30fa650122,\n                limb1: 0x40b77237a29cada253c126c6,\n                limb2: 0x74ff1349b1866c8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xdfe2149e4c340f0f977818e,\n                limb1: 0x4aa73da39507ab61393b0a8f,\n                limb2: 0x55afd3af80c6333,\n            },\n            r0a1: u288 {\n                limb0: 0xeb0ba65f392d7776bc4e594d,\n                limb1: 0x79270f23defb3919d03163eb,\n                limb2: 0x1432e9c69f6597cd,\n            },\n            r1a0: u288 {\n                limb0: 0x75e1c3546129fe4dfa15b4d1,\n                limb1: 0xe2fede56842e4f6a87600bf2,\n                limb2: 0x1f5fceb2bd6baf44,\n            },\n            r1a1: u288 {\n                limb0: 0x1d016f0eb8fdd05e6d13013b,\n                limb1: 0x84b16f8cbdf1fe877670baa9,\n                limb2: 0x2827768073a428fe,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3603266e05560becab36faef,\n                limb1: 0x8c3b88c9390278873dd4b048,\n                limb2: 0x24a715a5d9880f38,\n            },\n            r0a1: u288 {\n                limb0: 0xe9f595b111cfd00d1dd28891,\n                limb1: 0x75c6a392ab4a627f642303e1,\n                limb2: 0x17b34a30def82ab6,\n            },\n            r1a0: u288 {\n                limb0: 0xe706de8f35ac8372669fc8d3,\n                limb1: 0x16cc7f4032b3f3ebcecd997d,\n                limb2: 0x166eba592eb1fc78,\n            },\n            r1a1: u288 {\n                limb0: 0x7d584f102b8e64dcbbd1be9,\n                limb1: 0x2ead4092f009a9c0577f7d3,\n                limb2: 0x2fe2c31ee6b1d41e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x72253d939632f8c28fb5763,\n                limb1: 0x9b943ab13cad451aed1b08a2,\n                limb2: 0xdb9b2068e450f10,\n            },\n            r0a1: u288 {\n                limb0: 0x80f025dcbce32f6449fa7719,\n                limb1: 0x8a0791d4d1ed60b86e4fe813,\n                limb2: 0x1b1bd5dbce0ea966,\n            },\n            r1a0: u288 {\n                limb0: 0xaa72a31de7d815ae717165d4,\n                limb1: 0x501c29c7b6aebc4a1b44407f,\n                limb2: 0x464aa89f8631b3a,\n            },\n            r1a1: u288 {\n                limb0: 0x6b8d137e1ea43cd4b1f616b1,\n                limb1: 0xdd526a510cc84f150cc4d55a,\n                limb2: 0x1da2ed980ebd3f29,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xf7550f29b2490e0f2a4e2c7f,\n                limb1: 0x5da7008505dcd72e4af83d81,\n                limb2: 0xa635c82bc641341,\n            },\n            r0a1: u288 {\n                limb0: 0xb4536bb43ce47f44107ecdae,\n                limb1: 0x978283d291702bf7d638b1b2,\n                limb2: 0xbfb8f1b15e61cee,\n            },\n            r1a0: u288 {\n                limb0: 0x595ecaca9a66ba86e5ee25be,\n                limb1: 0x7e4182944606a828e57d7d07,\n                limb2: 0x2069fe9edc3b22cf,\n            },\n            r1a1: u288 {\n                limb0: 0x798b743b9edabbb12e77e4d,\n                limb1: 0x572ba71d9d2370e5cd0d86c9,\n                limb2: 0x2412d38ad51d6d9d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x590a676d88841cb9954ee256,\n                limb1: 0xbd64d85d808c1d1b6245a8f8,\n                limb2: 0x2214134d4b92a04e,\n            },\n            r0a1: u288 {\n                limb0: 0x8390497531c6174c7fef5c8d,\n                limb1: 0xe89cdbcdaed094595402d9cd,\n                limb2: 0x3002adf5ee15c58d,\n            },\n            r1a0: u288 {\n                limb0: 0xee4e55dfd0cbfb767d77958d,\n                limb1: 0xfb99c38c54dde247e8c16ec3,\n                limb2: 0x25be0a00eeacced2,\n            },\n            r1a1: u288 {\n                limb0: 0x3332c7176c86556812fd074e,\n                limb1: 0x2df615b45b95ec14c9b6ca59,\n                limb2: 0x24ca6b711f0b9158,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x867cced8a010850958f41ff5,\n                limb1: 0x6a37fdb2b8993eed18bafe8e,\n                limb2: 0x21b9f782109e5a7,\n            },\n            r0a1: u288 {\n                limb0: 0x7307477d650618e66de38d0f,\n                limb1: 0xacb622ce92a7e393dbe10ba1,\n                limb2: 0x236e70838cee0ed5,\n            },\n            r1a0: u288 {\n                limb0: 0xb564a308aaf5dda0f4af0f0d,\n                limb1: 0x55fc71e2f13d8cb12bd51e74,\n                limb2: 0x294cf115a234a9e9,\n            },\n            r1a1: u288 {\n                limb0: 0xbd166057df55c135b87f35f3,\n                limb1: 0xf9f29b6c50f1cce9b85ec9b,\n                limb2: 0x2e8448d167f20f96,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xfc8b7ceec44c187218b0a628,\n                limb1: 0xad8ab26e533851f6964cf080,\n                limb2: 0x141e03c350014d73,\n            },\n            r0a1: u288 {\n                limb0: 0xa99377ed869aed282af105bd,\n                limb1: 0x1e539a6a00a53a3a7116a5bb,\n                limb2: 0x1843fc93640235e5,\n            },\n            r1a0: u288 {\n                limb0: 0x4eaed4a7f79772e125537900,\n                limb1: 0x99a9d1eb5ae07f5ffce34a0e,\n                limb2: 0x30509134887182b0,\n            },\n            r1a1: u288 {\n                limb0: 0x2afd0eba785d800601426d67,\n                limb1: 0x2a95a13d8a163a4d9c942149,\n                limb2: 0x1744f70d096b1075,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xdedaff3205bb953b2c390b8a,\n                limb1: 0xe1a899da21c1dafb485c707e,\n                limb2: 0x1ec897e7a041493e,\n            },\n            r0a1: u288 {\n                limb0: 0xf52c3c30cd4d3202b34089e0,\n                limb1: 0xc652aa1ff533e1aad7532305,\n                limb2: 0x2a1df766e5e3aa2e,\n            },\n            r1a0: u288 {\n                limb0: 0x7ac695d3e19d79b234daaf3d,\n                limb1: 0x5ce2f92666aec92a650feee1,\n                limb2: 0x21ab4fe20d978e77,\n            },\n            r1a1: u288 {\n                limb0: 0xa64a913a29a1aed4e0798664,\n                limb1: 0x66bc208b511503d127ff5ede,\n                limb2: 0x2389ba056de56a8d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xbe894c9cefe9c46c519951de,\n                limb1: 0x6a41efe6eec9e31520053d44,\n                limb2: 0xf4b593a835cf530,\n            },\n            r0a1: u288 {\n                limb0: 0xeb27d1c9157c9746c3575d80,\n                limb1: 0xcc0bfd86a701af6652a47ff,\n                limb2: 0xf70ea9c35108131,\n            },\n            r1a0: u288 {\n                limb0: 0x86c07fbaa913e6826b293b91,\n                limb1: 0xb18a5a5f195d0c8fcf4c9b96,\n                limb2: 0x21116cc6ff2a6341,\n            },\n            r1a1: u288 {\n                limb0: 0xa2edb14bb741154545792f12,\n                limb1: 0x89644490effc10bc0b9c087,\n                limb2: 0x255559b492be7e42,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd88b16e68600a12e6c1f6006,\n                limb1: 0x333243b43d3b7ff18d0cc671,\n                limb2: 0x2b84b2a9b0f03ed8,\n            },\n            r0a1: u288 {\n                limb0: 0xf3e2b57ddaac822c4da09991,\n                limb1: 0xd7c894b3fe515296bb054d2f,\n                limb2: 0x10a75e4c6dddb441,\n            },\n            r1a0: u288 {\n                limb0: 0x73c65fbbb06a7b21b865ac56,\n                limb1: 0x21f4ecd1403bb78729c7e99b,\n                limb2: 0xaf88a160a6b35d4,\n            },\n            r1a1: u288 {\n                limb0: 0xade61ce10b8492d659ff68d0,\n                limb1: 0x1476e76cf3a8e0df086ad9eb,\n                limb2: 0x2e28cfc65d61e946,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xdf8b54b244108008e7f93350,\n                limb1: 0x2ae9a68b9d6b96f392decd6b,\n                limb2: 0x160b19eed152271c,\n            },\n            r0a1: u288 {\n                limb0: 0xc18a8994cfbb2e8df446e449,\n                limb1: 0x408d51e7e4adedd8f4f94d06,\n                limb2: 0x27661b404fe90162,\n            },\n            r1a0: u288 {\n                limb0: 0x1390b2a3b27f43f7ac73832c,\n                limb1: 0x14d57301f6002fd328f2d64d,\n                limb2: 0x17f3fa337367dddc,\n            },\n            r1a1: u288 {\n                limb0: 0x79cab8ff5bf2f762c5372f80,\n                limb1: 0xc979d6f385fae4b5e4785acf,\n                limb2: 0x60c5307a735b00f,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9c63cc02c784e055248c3eed,\n                limb1: 0xfd16031abbbc57c520b3448c,\n                limb2: 0x123ce33363d29152,\n            },\n            r0a1: u288 {\n                limb0: 0xfda091461a1cef9950d3d452,\n                limb1: 0x637d5ff5a189c44f2f3be15c,\n                limb2: 0x1ce131a349febf1c,\n            },\n            r1a0: u288 {\n                limb0: 0x388902ae8f293fda6dd5e253,\n                limb1: 0xd65a5c2dd9ba165e52942ce5,\n                limb2: 0x9b4d425a8b8716a,\n            },\n            r1a1: u288 {\n                limb0: 0x32d6961e3fded32a7f74b3c3,\n                limb1: 0x69e203465d4f4f5de03b6304,\n                limb2: 0x1ea4dd6337833093,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x13e26ec64f90f19a9fc24a14,\n                limb1: 0xb723427b23f8f37bc71be2c3,\n                limb2: 0x2011d52c72ddcb87,\n            },\n            r0a1: u288 {\n                limb0: 0xf2e7ebf099f1b3e5d8b28a20,\n                limb1: 0x35b51b2f930d6b7f41ab3f1b,\n                limb2: 0x26f365ce86167188,\n            },\n            r1a0: u288 {\n                limb0: 0x10e32b59b52b0906b96d83df,\n                limb1: 0xefbd70cad041c74a3ef1bda0,\n                limb2: 0x2589877cff897640,\n            },\n            r1a1: u288 {\n                limb0: 0x8df3430f6a567e745f702992,\n                limb1: 0xfc341d1eaf0c10eec340bf9b,\n                limb2: 0x1e4c94f61793bb7b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x386d7b23c6dccb87637018c9,\n                limb1: 0xfed2ea478e9a2210289079e2,\n                limb2: 0x100aa83cb843353e,\n            },\n            r0a1: u288 {\n                limb0: 0x229c5c285f049d04c3dc5ce7,\n                limb1: 0x28110670fe1d38c53ffcc6f7,\n                limb2: 0x1778918279578f50,\n            },\n            r1a0: u288 {\n                limb0: 0xe9ad2c7b8a17a1f1627ff09d,\n                limb1: 0xedff5563c3c3e7d2dcc402ec,\n                limb2: 0xa8bd6770b6d5aa8,\n            },\n            r1a1: u288 {\n                limb0: 0x66c5c1aeed5c04470b4e8a3d,\n                limb1: 0x846e73d11f2d18fe7e1e1aa2,\n                limb2: 0x10a60eabe0ec3d78,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x675cc9c385f8658ad4f95b8f,\n                limb1: 0x46072c9276ee065cea42b3bf,\n                limb2: 0xbd1d099998eaab5,\n            },\n            r0a1: u288 {\n                limb0: 0xb5a009ebdae77421ca09efdd,\n                limb1: 0x247d947b95fe2e8593afcfb8,\n                limb2: 0x1169983817087c53,\n            },\n            r1a0: u288 {\n                limb0: 0xafecdb2936ac4202959a366d,\n                limb1: 0xa952b225eacf34300e3b2c11,\n                limb2: 0x2d3452e5608ee9db,\n            },\n            r1a1: u288 {\n                limb0: 0x86acf5efc205740641f2f711,\n                limb1: 0x23725a6d2ce73462f6496ae3,\n                limb2: 0x2d2908ce56b326cd,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x88ca191d85be1f6c205257ef,\n                limb1: 0xd0cecf5c5f80926c77fd4870,\n                limb2: 0x16ec42b5cae83200,\n            },\n            r0a1: u288 {\n                limb0: 0x154cba82460752b94916186d,\n                limb1: 0x564f6bebac05a4f3fb1353ac,\n                limb2: 0x2d47a47da836d1a7,\n            },\n            r1a0: u288 {\n                limb0: 0xb39c4d6150bd64b4674f42ba,\n                limb1: 0x93c967a38fe86f0779bf4163,\n                limb2: 0x1a51995a49d50f26,\n            },\n            r1a1: u288 {\n                limb0: 0xeb7bdec4b7e304bbb0450608,\n                limb1: 0x11fc9a124b8c74b3d5560ea4,\n                limb2: 0xbfa9bd7f55ad8ac,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8ac4b290d5156e3e7fa4eb6c,\n                limb1: 0x8d74a3b09d5503f6542b071a,\n                limb2: 0x1c7c5837e2e98023,\n            },\n            r0a1: u288 {\n                limb0: 0xf62d5c02d7029d7049a05e29,\n                limb1: 0xceeca19b95c93209d1eddf4c,\n                limb2: 0x289ba7fe4810af60,\n            },\n            r1a0: u288 {\n                limb0: 0xa1ff7e417257a17c65e1a90d,\n                limb1: 0x2ba9075ef59406b3a2499cd7,\n                limb2: 0x19c14ffdfa679063,\n            },\n            r1a1: u288 {\n                limb0: 0xc4002e7f1c1427dd90e32241,\n                limb1: 0xf0c32e9566ed7b68d43b5f1c,\n                limb2: 0x10ed8a335bc8ef5e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2fdc574c85cf0c0ce5e07a51,\n                limb1: 0xd2439bf7b00bddc4cfb01b0c,\n                limb2: 0x125c3bbdeb0bd2da,\n            },\n            r0a1: u288 {\n                limb0: 0x9d664714bae53cafcb5ef55d,\n                limb1: 0x495c01724790853548f5e4de,\n                limb2: 0x2ce5e2e263725941,\n            },\n            r1a0: u288 {\n                limb0: 0x98071eb7fe88c9124aee3774,\n                limb1: 0xc3f66947a52bd2f6d520579f,\n                limb2: 0x2eaf775dbd52f7d3,\n            },\n            r1a1: u288 {\n                limb0: 0x23e5594948e21db2061dca92,\n                limb1: 0xd0ffa6f6c77290531c185431,\n                limb2: 0x604c085de03afb1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4983b91e0e5edcba05059d54,\n                limb1: 0x5f3145341793c07682b08603,\n                limb2: 0x108ceb28246075ac,\n            },\n            r0a1: u288 {\n                limb0: 0xca59dfe54f67accbd8399b9e,\n                limb1: 0xef2c5096cdbac06f799c31b9,\n                limb2: 0x7d170f63d0bc9f5,\n            },\n            r1a0: u288 {\n                limb0: 0x74e9b29b0793f5101b19e7db,\n                limb1: 0xd34343845d2d6a013ffe76b0,\n                limb2: 0x2119d53a2fbaebff,\n            },\n            r1a1: u288 {\n                limb0: 0x904bb445baeac56041fc9a41,\n                limb1: 0xc300a959bcbab62e415c9599,\n                limb2: 0x188e914b6ea3a25e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xeec2912e15f6bda39d4e005e,\n                limb1: 0x2b8610c44d27bdbc6ba2aac5,\n                limb2: 0x78ddc4573fc1fed,\n            },\n            r0a1: u288 {\n                limb0: 0x48099a0da11ea21de015229d,\n                limb1: 0x5fe937100967d5cc544f4af1,\n                limb2: 0x2c9ffe6d7d7e9631,\n            },\n            r1a0: u288 {\n                limb0: 0xa70d251296ef1ae37ceb7d03,\n                limb1: 0x2adadcb7d219bb1580e6e9c,\n                limb2: 0x180481a57f22fd03,\n            },\n            r1a1: u288 {\n                limb0: 0xacf46db9631037dd933eb72a,\n                limb1: 0x8a58491815c7656292a77d29,\n                limb2: 0x261e3516c348ae12,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8629cdd5e145fde3568fd43,\n                limb1: 0x400c419a21cc9444e939cf6b,\n                limb2: 0x2595c12cfa11df93,\n            },\n            r0a1: u288 {\n                limb0: 0x7912da4ae785a0a99325a792,\n                limb1: 0x113296d83e3a33cc4d0e2171,\n                limb2: 0x18916b0e597ec399,\n            },\n            r1a0: u288 {\n                limb0: 0xd9d365d20926cd19d741fac,\n                limb1: 0xfb8e91f161e3e857edf0f5f1,\n                limb2: 0x2aa07a692a41ed18,\n            },\n            r1a1: u288 {\n                limb0: 0xf40d0720adcc24c769e341a5,\n                limb1: 0xb97e4af1a0dc0cb5e1ef38ef,\n                limb2: 0x53c33301c8fed90,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2bfa32f0a09c3e2cfb8f6a38,\n                limb1: 0x7a24df3ff3c7119a59d49318,\n                limb2: 0x10e42281d64907ba,\n            },\n            r0a1: u288 {\n                limb0: 0xce42177a66cdeb4207d11e0c,\n                limb1: 0x3322aa425a9ca270152372ad,\n                limb2: 0x2f7fa83db407600c,\n            },\n            r1a0: u288 {\n                limb0: 0x62a8ff94fd1c7b9035af4446,\n                limb1: 0x3ad500601bbb6e7ed1301377,\n                limb2: 0x254d253ca06928f,\n            },\n            r1a1: u288 {\n                limb0: 0xf8f1787cd8e730c904b4386d,\n                limb1: 0x7fd3744349918d62c42d24cc,\n                limb2: 0x28a05e105d652eb8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6ef31e059d602897fa8e80a8,\n                limb1: 0x66a0710847b6609ceda5140,\n                limb2: 0x228c0e568f1eb9c0,\n            },\n            r0a1: u288 {\n                limb0: 0x7b47b1b133c1297b45cdd79b,\n                limb1: 0x6b4f04ed71b58dafd06b527b,\n                limb2: 0x13ae6db5254df01a,\n            },\n            r1a0: u288 {\n                limb0: 0xbeca2fccf7d0754dcf23ddda,\n                limb1: 0xe3d0bcd7d9496d1e5afb0a59,\n                limb2: 0x305a0afb142cf442,\n            },\n            r1a1: u288 {\n                limb0: 0x2d299847431477c899560ecf,\n                limb1: 0xbcd9e6c30bedee116b043d8d,\n                limb2: 0x79473a2a7438353,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4bf333418ae65a79be01b42c,\n                limb1: 0x7b21ed1382c0c50e2ff44e84,\n                limb2: 0x826d5429701ad4f,\n            },\n            r0a1: u288 {\n                limb0: 0x659ec0ccc8a54d15f40741a5,\n                limb1: 0xdef9f8893fcdc429f575ff81,\n                limb2: 0x2521f3f6a385ce88,\n            },\n            r1a0: u288 {\n                limb0: 0xe2475c786cf18c448c10cfba,\n                limb1: 0xf6fd377e663cd8f70113485e,\n                limb2: 0x2f866df9d71d1203,\n            },\n            r1a1: u288 {\n                limb0: 0x6e6154e7fb702e585b725874,\n                limb1: 0x3dd6afe8713ee4a89150e941,\n                limb2: 0x1ad82561f12faf96,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa2ae1484e410f15d4c865c6f,\n                limb1: 0x38c03955a4b41b98ec168058,\n                limb2: 0x2c11dc796ade582e,\n            },\n            r0a1: u288 {\n                limb0: 0x9f01d36070072f1f68f59e40,\n                limb1: 0x7d698d2f45990590d450e964,\n                limb2: 0x18f20c083a7436da,\n            },\n            r1a0: u288 {\n                limb0: 0x8e7784ed907dbd25195d7da1,\n                limb1: 0x4e659132fef2b2a014a8658,\n                limb2: 0x191000817c8dfb33,\n            },\n            r1a1: u288 {\n                limb0: 0xb1973c468f164953864b0c33,\n                limb1: 0x1382dbba13d9a77b7fb2fba1,\n                limb2: 0x1935eee5346c0bf,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x65b71fe695e7ccd4b460dace,\n                limb1: 0xa6ceba62ef334e6fe91301d5,\n                limb2: 0x299f578d0f3554e6,\n            },\n            r0a1: u288 {\n                limb0: 0xaf781dd030a274e7ecf0cfa4,\n                limb1: 0x2095020d373a14d7967797aa,\n                limb2: 0x6a7f9df6f185bf8,\n            },\n            r1a0: u288 {\n                limb0: 0x8e91e2dba67d130a0b274df3,\n                limb1: 0xe192a19fce285c12c6770089,\n                limb2: 0x6e9acf4205c2e22,\n            },\n            r1a1: u288 {\n                limb0: 0xbcd5c206b5f9c77d667189bf,\n                limb1: 0x656a7e2ebc78255d5242ca9,\n                limb2: 0x25f43fec41d2b245,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x16a01fe226cb906356469222,\n                limb1: 0x4277d50794500ca8a6d93550,\n                limb2: 0x2cc16a055b005e1c,\n            },\n            r0a1: u288 {\n                limb0: 0xf08176a2a762310c7f5a0d79,\n                limb1: 0xe8ff955f36e956afcc65b18d,\n                limb2: 0x104c3fa43e0144ca,\n            },\n            r1a0: u288 {\n                limb0: 0x83d1006aac3dc6164c2f5349,\n                limb1: 0x8b6949205e118d87a41bd72,\n                limb2: 0x1c8bfbcb7a77e435,\n            },\n            r1a1: u288 {\n                limb0: 0xbaabbd1ebf18244d71fe44d,\n                limb1: 0x84d1ad747d88667827607b5d,\n                limb2: 0x2987105c580454ce,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4e56e6733cce20d9c5b16d96,\n                limb1: 0xc7ef260535fb75b9d3e089f,\n                limb2: 0x292dd4aa636e7729,\n            },\n            r0a1: u288 {\n                limb0: 0x6e7e1038b336f36519c9faaf,\n                limb1: 0x3c66bd609510309485e225c7,\n                limb2: 0x10cacac137411eb,\n            },\n            r1a0: u288 {\n                limb0: 0x4a3e8b96278ac092fe4f3b15,\n                limb1: 0xba47e583e2750b42f93c9631,\n                limb2: 0x125da6bd69495bb9,\n            },\n            r1a1: u288 {\n                limb0: 0xae7a56ab4b959a5f6060d529,\n                limb1: 0xc3c263bfd58c0030c063a48e,\n                limb2: 0x2f4d15f13fae788c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x301e0885c84d273b6d323124,\n                limb1: 0x11fd5c75e269f7a30fa4154f,\n                limb2: 0x19afdcfdcce2fc0d,\n            },\n            r0a1: u288 {\n                limb0: 0x3d13519f934526be815c38b0,\n                limb1: 0xd43735909547da73838874fc,\n                limb2: 0x255d8aca30f4e0f6,\n            },\n            r1a0: u288 {\n                limb0: 0x90a505b76f25a3396e2cea79,\n                limb1: 0x3957a2d0848c54b9079fc114,\n                limb2: 0x1ba0cd3a9fe6d4bb,\n            },\n            r1a1: u288 {\n                limb0: 0xc47930fba77a46ebb1db30a9,\n                limb1: 0x993a1cb166e9d40bebab02b2,\n                limb2: 0x1deb16166d48118b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x85d75bc97d6ce75681261b3,\n                limb1: 0x2fec226ae2f731465e5d00d8,\n                limb2: 0x28981b581f2938b5,\n            },\n            r0a1: u288 {\n                limb0: 0xff0800b8ac67a7469eaf7059,\n                limb1: 0x6bca9de9f4b635539aece92e,\n                limb2: 0x9faf1bbdd82d5d9,\n            },\n            r1a0: u288 {\n                limb0: 0x6a2f4abab426bb0010eeb544,\n                limb1: 0xa661d1118e1148d0282bb0b,\n                limb2: 0xea1783c4b4d0286,\n            },\n            r1a1: u288 {\n                limb0: 0xea7b56e271cab7e34832f740,\n                limb1: 0x837870da6880f80599bd20d8,\n                limb2: 0x1a71c24986082f98,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3ad19b6290bbdc1dcb374f45,\n                limb1: 0x5b3cbe16738e22f510bf853,\n                limb2: 0x75dc530769d3659,\n            },\n            r0a1: u288 {\n                limb0: 0xe13917b29527fdef53c1f4f0,\n                limb1: 0x379f0d852369306386826c17,\n                limb2: 0x1a9ceb06ec2e4ea0,\n            },\n            r1a0: u288 {\n                limb0: 0xb2f002fa616d4a7b93abfb51,\n                limb1: 0xa37249159878c2ef9759fe0f,\n                limb2: 0x25f0b5adc278194f,\n            },\n            r1a1: u288 {\n                limb0: 0xb80c5c2e9ddecdb709e24e8,\n                limb1: 0x8b7a18df0908d921c5ef7660,\n                limb2: 0x25d48dad31745ad8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb15bbaec50ff49d30e49f74a,\n                limb1: 0xc90a8c79fb045c5468f14151,\n                limb2: 0x25e47927e92df0e3,\n            },\n            r0a1: u288 {\n                limb0: 0x57f66909d5d40dfb8c7b4d5c,\n                limb1: 0xea5265282e2139c48c1953f2,\n                limb2: 0x2d7f5e6aff2381f6,\n            },\n            r1a0: u288 {\n                limb0: 0x2a2f573b189a3c8832231394,\n                limb1: 0x738abc15844895ffd4733587,\n                limb2: 0x20aa11739c4b9bb4,\n            },\n            r1a1: u288 {\n                limb0: 0x51695ec614f1ff4cce2f65d1,\n                limb1: 0x6765aae6cb895a2406a6dd7e,\n                limb2: 0x1126ee431c522da0,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xdea6e74d7541442273a4472d,\n                limb1: 0xb3334895c3208e142ac30e24,\n                limb2: 0x2b0fcbe08687c750,\n            },\n            r0a1: u288 {\n                limb0: 0x3957f9dc02bb02c18ac723bd,\n                limb1: 0x586e97ed1f709b3712f554d6,\n                limb2: 0x84f6ca831418acf,\n            },\n            r1a0: u288 {\n                limb0: 0x62ba0827259d2266495c096f,\n                limb1: 0xbea933ce9db90f69205e1b2f,\n                limb2: 0x283c87d1f0ab6104,\n            },\n            r1a1: u288 {\n                limb0: 0xc4e6d8a17b596384257bdaa2,\n                limb1: 0x8d079c21e392ac8e92047ee8,\n                limb2: 0x30478961a7077b85,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9214fc3209f1518b05fd21c6,\n                limb1: 0x9bc8ce4f56423009710770e8,\n                limb2: 0x32445cc6972799c,\n            },\n            r0a1: u288 {\n                limb0: 0x93ef401ecd9cfae3644d22e6,\n                limb1: 0xce5a741a9847a144cfaf8c96,\n                limb2: 0xf7a814d5726da4a,\n            },\n            r1a0: u288 {\n                limb0: 0xd19264d986f163b133a91c0c,\n                limb1: 0x529dc5ce4b193c0f672c6a32,\n                limb2: 0x2e9a118959353374,\n            },\n            r1a1: u288 {\n                limb0: 0x3d97d6e8f45072cc9e85e412,\n                limb1: 0x4dafecb04c3bb23c374f0486,\n                limb2: 0xa174dd4ac8ee628,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x5db1ec127cfbf594acb0d677,\n                limb1: 0x70e07fb9d781d02bdc15179d,\n                limb2: 0x1aaa890030a85a3b,\n            },\n            r0a1: u288 {\n                limb0: 0x4226bf211011503eb035974d,\n                limb1: 0x7514439dfc133ee1243ebf61,\n                limb2: 0x1f2d401912f7031,\n            },\n            r1a0: u288 {\n                limb0: 0x23dff8cf641642f05e6b24bf,\n                limb1: 0x4c4a46758c95697b75a19661,\n                limb2: 0x3a93b0d88f96961,\n            },\n            r1a1: u288 {\n                limb0: 0x491f63f36d8623ebb5a8b06c,\n                limb1: 0x888445ac9aacda055152af5d,\n                limb2: 0x264f06d6ffd0a23f,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x98d8b0c4adcf27bceb305c2c,\n                limb1: 0x859afa9c7668ed6152d8cba3,\n                limb2: 0x29e7694f46e3a272,\n            },\n            r0a1: u288 {\n                limb0: 0x1d970845365594307ba97556,\n                limb1: 0xd002d93ad793e154afe5b49b,\n                limb2: 0x12ca77d3fb8eee63,\n            },\n            r1a0: u288 {\n                limb0: 0x9f2934faefb8268e20d0e337,\n                limb1: 0xbc4b5e1ec056881319f08766,\n                limb2: 0x2e103461759a9ee4,\n            },\n            r1a1: u288 {\n                limb0: 0x7adc6cb87d6b43000e2466b6,\n                limb1: 0x65e5cefa42b25a7ee8925fa6,\n                limb2: 0x2560115898d7362a,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xf84b2de12d9e988b4d350c4f,\n                limb1: 0x3588bddeca93ec6153032d9f,\n                limb2: 0x136d6e97720234,\n            },\n            r0a1: u288 {\n                limb0: 0x33d4fe3de71e57161d0ced84,\n                limb1: 0xa313e00e4b35a0cfbaf78b9e,\n                limb2: 0x2b15c2ef1e5b52bb,\n            },\n            r1a0: u288 {\n                limb0: 0xd5b6ed885e00cc8a89a25ad3,\n                limb1: 0x330b2ac992f206b8a3888a1f,\n                limb2: 0x2901d74097b5d222,\n            },\n            r1a1: u288 {\n                limb0: 0x841242f062bc3c4c64658ef5,\n                limb1: 0x1ca54f523273c11520333ceb,\n                limb2: 0xbb657e4adcfaec1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x64d864643668392c0e357cc4,\n                limb1: 0x4c9bf66853f1b287015ab84c,\n                limb2: 0x2f5f1b92ad7ee4d4,\n            },\n            r0a1: u288 {\n                limb0: 0xdc33c8da5c575eef6987a0e1,\n                limb1: 0x51cc07c7ef28e1b8d934bc32,\n                limb2: 0x2358d94a17ec2a44,\n            },\n            r1a0: u288 {\n                limb0: 0xf659845b829bbba363a2497b,\n                limb1: 0x440f348e4e7bed1fb1eb47b2,\n                limb2: 0x1ad0eaab0fb0bdab,\n            },\n            r1a1: u288 {\n                limb0: 0x1944bb6901a1af6ea9afa6fc,\n                limb1: 0x132319df135dedddf5baae67,\n                limb2: 0x52598294643a4aa,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x76fd94c5e6f17fa6741bd7de,\n                limb1: 0xc2e0831024f67d21013e0bdd,\n                limb2: 0x21e2af6a43119665,\n            },\n            r0a1: u288 {\n                limb0: 0xad290eab38c64c0d8b13879b,\n                limb1: 0xdd67f881be32b09d9a6c76a0,\n                limb2: 0x8000712ce0392f2,\n            },\n            r1a0: u288 {\n                limb0: 0xd30a46f4ba2dee3c7ace0a37,\n                limb1: 0x3914314f4ec56ff61e2c29e,\n                limb2: 0x22ae1ba6cd84d822,\n            },\n            r1a1: u288 {\n                limb0: 0x5d888a78f6dfce9e7544f142,\n                limb1: 0x9439156de974d3fb6d6bda6e,\n                limb2: 0x106c8f9a27d41a4f,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x56a94c2fcadf8b52b57b8f16,\n                limb1: 0x80d337d9ea7500c2e01eaae7,\n                limb2: 0x1d6437b87b74fef6,\n            },\n            r0a1: u288 {\n                limb0: 0x96b387e99073b5baa97385b8,\n                limb1: 0x7f6930e3a08e255019cbc377,\n                limb2: 0x117e2a946aaec899,\n            },\n            r1a0: u288 {\n                limb0: 0x69f533dfd8f123baa11e736f,\n                limb1: 0xe83cb98efc4de9eefca878ca,\n                limb2: 0x448df583ab25788,\n            },\n            r1a1: u288 {\n                limb0: 0x987e50cc7863442bca3ce7c7,\n                limb1: 0xdef540ff995f9f94d1ae5032,\n                limb2: 0x4701d89fe1b1f2d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3f3c2f2df60d0e302fe746ac,\n                limb1: 0xe174a6c9c3a94ee55f704207,\n                limb2: 0x48d2ba2cb93eec,\n            },\n            r0a1: u288 {\n                limb0: 0xcc882073b44068d32f2f81fa,\n                limb1: 0x8e1bd5b442ef660b7e32e2c3,\n                limb2: 0x1e10b37996fa5061,\n            },\n            r1a0: u288 {\n                limb0: 0x40caa7ce29ce7fbe398494e2,\n                limb1: 0x5170335f58724675cf628614,\n                limb2: 0x1640a6bf828d2dfc,\n            },\n            r1a1: u288 {\n                limb0: 0xb4df27375cabcfb846fda30a,\n                limb1: 0x95396691a8861f2fdd10f5cd,\n                limb2: 0x18d60a694ad55b7a,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x92c09e4796207b802168341b,\n                limb1: 0xd2d9d6acffd7829066cc49ce,\n                limb2: 0xc89c2d0a7b2c81e,\n            },\n            r0a1: u288 {\n                limb0: 0x47e3c1cf6cdb6f3efe778c7f,\n                limb1: 0x66b347099b6436794cf062eb,\n                limb2: 0x18b4ccc64ae0a857,\n            },\n            r1a0: u288 {\n                limb0: 0x7d5793606a73b2740c71484a,\n                limb1: 0xa0070135ca2dc571b28e3c9c,\n                limb2: 0x1bc03576e04b94cf,\n            },\n            r1a1: u288 {\n                limb0: 0x1ba85b29875e638c10f16c99,\n                limb1: 0x158f2f2acc3c2300bb9f9225,\n                limb2: 0x42d8a8c36ea97c6,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xec4681e764cfbf7c538af2a,\n                limb1: 0x4565ebc52b5d8a85adf19252,\n                limb2: 0x44752fa5fffc699,\n            },\n            r0a1: u288 {\n                limb0: 0x2495ee358b1d2f7cb852e0df,\n                limb1: 0x7e8e47f572051e45b148fabc,\n                limb2: 0x1d2a5085edd69eec,\n            },\n            r1a0: u288 {\n                limb0: 0xcce126e911fe5179a3065fd0,\n                limb1: 0x89eb158a703c3fb083d6ab63,\n                limb2: 0xae09fb55487cf84,\n            },\n            r1a1: u288 {\n                limb0: 0xfc6ecc9bb6ab90610c6aa279,\n                limb1: 0x2ec9dc3ab4fc89ec3d07455f,\n                limb2: 0x2ce2a7db016dd063,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9440ad13408319cecb07087b,\n                limb1: 0x537afc0c0cfe8ff761c24e08,\n                limb2: 0x48e4ac10081048d,\n            },\n            r0a1: u288 {\n                limb0: 0xa37fb82b03a2c0bb2aa50c4f,\n                limb1: 0xd3797f05c8fb84f6b630dfb,\n                limb2: 0x2dffde2d6c7e43ff,\n            },\n            r1a0: u288 {\n                limb0: 0xc55d2eb1ea953275e780e65b,\n                limb1: 0xe141cf680cab57483c02e4c7,\n                limb2: 0x1b71395ce5ce20ae,\n            },\n            r1a1: u288 {\n                limb0: 0xe4fab521f1212a1d301065de,\n                limb1: 0x4f8d31c78df3dbe4ab721ef2,\n                limb2: 0x2828f21554706a0e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8cefc2f2af2a3082b790784e,\n                limb1: 0x97ac13b37c6fbfc736a3d456,\n                limb2: 0x683b1cdffd60acd,\n            },\n            r0a1: u288 {\n                limb0: 0xa266a8188a8c933dcffe2d02,\n                limb1: 0x18d3934c1838d7bce81b2eeb,\n                limb2: 0x206ac5cdda42377,\n            },\n            r1a0: u288 {\n                limb0: 0x90332652437f6e177dc3b28c,\n                limb1: 0x75bd8199433d607735414ee8,\n                limb2: 0x29d6842d8298cf7e,\n            },\n            r1a1: u288 {\n                limb0: 0xadedf46d8ea11932db0018e1,\n                limb1: 0xbc7239ae9d1453258037befb,\n                limb2: 0x22e7ebdd72c6f7a1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc91d19e8cd7e4fdc6f2ae8f2,\n                limb1: 0xcbf567879da5ca68ae340836,\n                limb2: 0x68d72bbf2d7a0c4,\n            },\n            r0a1: u288 {\n                limb0: 0x66b6b80f1f9f8466d38016f3,\n                limb1: 0x58d023bc4c07e5afb96e55ba,\n                limb2: 0xd4b76c1f3e9020a,\n            },\n            r1a0: u288 {\n                limb0: 0x7206444d57fa4b28cba07bd2,\n                limb1: 0x2e3dde1511954bf0289531a8,\n                limb2: 0x19556e38e7487eff,\n            },\n            r1a1: u288 {\n                limb0: 0x78784fe92d67b4363ebba156,\n                limb1: 0xa325432ea8c347a555dafae8,\n                limb2: 0xd956a5c41160f33,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x415ddcddbf4b35a40861ba44,\n                limb1: 0x937c973a9afa8c8a22f6b860,\n                limb2: 0x1ca76ac0498591da,\n            },\n            r0a1: u288 {\n                limb0: 0xbcd94af7ee9c9c97c101a809,\n                limb1: 0x9742c5dad21578a02495abdc,\n                limb2: 0x2ae764c7a4fd325a,\n            },\n            r1a0: u288 {\n                limb0: 0xbb401a5b76780512474a588c,\n                limb1: 0xf1438ea37e57137ce6b956bc,\n                limb2: 0xa7a831e9e824aa2,\n            },\n            r1a1: u288 {\n                limb0: 0x958c06ec31ff5fe5bbc5289b,\n                limb1: 0x73d96c6c37c1ec4fd0edd7e4,\n                limb2: 0x1456a4a521213afc,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x348e15357d9299e582033136,\n                limb1: 0x53578c46b15abb39da35a56e,\n                limb2: 0x1043b711f86bb33f,\n            },\n            r0a1: u288 {\n                limb0: 0x9fa230a629b75217f0518e7c,\n                limb1: 0x77012a4bb8751322a406024d,\n                limb2: 0x121e2d845d972695,\n            },\n            r1a0: u288 {\n                limb0: 0x5600f2d51f21d9dfac35eb10,\n                limb1: 0x6fde61f876fb76611fb86c1a,\n                limb2: 0x2bf4fbaf5bd0d0df,\n            },\n            r1a1: u288 {\n                limb0: 0xd732aa0b6161aaffdae95324,\n                limb1: 0xb3c4f8c3770402d245692464,\n                limb2: 0x2a0f1740a293e6f0,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x89a2e58c2cb8dcd6a3b6565,\n                limb1: 0x3bd4d0baf1f4a145223a5392,\n                limb2: 0x1e7f97dea0eda0ac,\n            },\n            r0a1: u288 {\n                limb0: 0xabd7d7c71e35e233c23def95,\n                limb1: 0x1366e53cff57cb47898bd655,\n                limb2: 0x26d9ff9260bdff42,\n            },\n            r1a0: u288 {\n                limb0: 0x5d0a41a37eff48760e049506,\n                limb1: 0xbca1a785a1639bafcdd56bc3,\n                limb2: 0x1137a7fb31d90907,\n            },\n            r1a1: u288 {\n                limb0: 0xcf403ab36cd112c5e8039a5b,\n                limb1: 0x2a71e15f5920519f6a592f3a,\n                limb2: 0x2eb83824faf1b67c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa9e2efa41aaa98ab59728940,\n                limb1: 0x163c0425f66ce72daef2f53e,\n                limb2: 0x2feaf1b1770aa7d8,\n            },\n            r0a1: u288 {\n                limb0: 0x3bb7afd3c0a79b6ac2c4c063,\n                limb1: 0xee5cb42e8b2bc999e312e032,\n                limb2: 0x1af2071ae77151c3,\n            },\n            r1a0: u288 {\n                limb0: 0x1cef1c0d8956d7ceb2b162e7,\n                limb1: 0x202b4af9e51edfc81a943ded,\n                limb2: 0xc9e943ffbdcfdcb,\n            },\n            r1a1: u288 {\n                limb0: 0xe18b1b34798b0a18d5ad43dd,\n                limb1: 0x55e8237731941007099af6b8,\n                limb2: 0x1472c0290db54042,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xbbac3856a8e87a2e9a8b22c6,\n                limb1: 0xdbfdecaed05832138ee553fe,\n                limb2: 0x97e02cb38d8d7e9,\n            },\n            r0a1: u288 {\n                limb0: 0x9e1446fcf7d293a2469d0044,\n                limb1: 0x463357a0f467ffc3d1ac9329,\n                limb2: 0x134bb66656265af1,\n            },\n            r1a0: u288 {\n                limb0: 0x35197469de9782f565552391,\n                limb1: 0x9a40559fee880b7ce57dc096,\n                limb2: 0x135c6b73ad046335,\n            },\n            r1a1: u288 {\n                limb0: 0xf58099b0098ba0a363307259,\n                limb1: 0x3aafc38f65f0115c8d769619,\n                limb2: 0x1da35e56a76aff8e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb4c7963e0d1dc082de0725e,\n                limb1: 0x375a7a3d765918de24804223,\n                limb2: 0xf177b77b031596d,\n            },\n            r0a1: u288 {\n                limb0: 0x87a7b9c5f10500b0b40d7a1e,\n                limb1: 0x6f234d1dc7f1394b55858810,\n                limb2: 0x26288146660a3914,\n            },\n            r1a0: u288 {\n                limb0: 0xa6308c89cebe40447abf4a9a,\n                limb1: 0x657f0fdda13b1f8ee314c22,\n                limb2: 0x1701aabc250a9cc7,\n            },\n            r1a1: u288 {\n                limb0: 0x9db9bf660dc77cbe2788a755,\n                limb1: 0xbdf9c1c15a4bd502a119fb98,\n                limb2: 0x14b4de3d26bd66e1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x53c49c62ca96007e14435295,\n                limb1: 0x85aeb885e4123ca8d3232fdf,\n                limb2: 0x750017ce108abf3,\n            },\n            r0a1: u288 {\n                limb0: 0xba6bf3e25d370182e4821239,\n                limb1: 0x39de83bf370bd2ba116e8405,\n                limb2: 0x2b8417a72ba6d940,\n            },\n            r1a0: u288 {\n                limb0: 0xa922f50550d349849b14307b,\n                limb1: 0x569766b6feca6143a5ddde9d,\n                limb2: 0x2c3c6765b25a01d,\n            },\n            r1a1: u288 {\n                limb0: 0x6016011bdc3b506563b0f117,\n                limb1: 0xbab4932beab93dde9b5b8a5c,\n                limb2: 0x1bf3f698de0ace60,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x93bebaf7f40eb00912ee1ff8,\n                limb1: 0x79a91520a19787b125796c6b,\n                limb2: 0x45adea0cdba580c,\n            },\n            r0a1: u288 {\n                limb0: 0xea59a573b5d16f4b827e1209,\n                limb1: 0x6202955602c536e53bd3387a,\n                limb2: 0x1a511f3a72b13857,\n            },\n            r1a0: u288 {\n                limb0: 0xb745e4750bc9124d4e73ea0b,\n                limb1: 0x2f33d8eeba9cc1435bbdc73f,\n                limb2: 0x2e6777231d16918a,\n            },\n            r1a1: u288 {\n                limb0: 0x368391ad32f8bb4668d49a0d,\n                limb1: 0x43450eb1798b1dd83825ef2a,\n                limb2: 0x22bc511bb4630eea,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4ad06cb41fe56d977307ab2c,\n                limb1: 0x3f5bc61856be34d17d908fa0,\n                limb2: 0x99af0cec206d510,\n            },\n            r0a1: u288 {\n                limb0: 0x1ced159a6a98e98171d4669e,\n                limb1: 0xafcae556259b99f38d59aa5,\n                limb2: 0x89b4d02984287ec,\n            },\n            r1a0: u288 {\n                limb0: 0xd22b2495d2cc326e755b7f8e,\n                limb1: 0xa1ccc284e75a8859266377a,\n                limb2: 0x19fd2f610a91515c,\n            },\n            r1a1: u288 {\n                limb0: 0xc1c66a79e4a73dd8a34fafa6,\n                limb1: 0xb9f0070e903de41bb0622c24,\n                limb2: 0xbefae3b58cda298,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb9f05ffda3ee208f990ff3a8,\n                limb1: 0x6201d08440b28ea672b9ea93,\n                limb2: 0x1ed60e5a5e778b42,\n            },\n            r0a1: u288 {\n                limb0: 0x8e8468b937854c9c00582d36,\n                limb1: 0x7888fa8b2850a0c555adb743,\n                limb2: 0xd1342bd01402f29,\n            },\n            r1a0: u288 {\n                limb0: 0xf5c4c66a974d45ec754b3873,\n                limb1: 0x34322544ed59f01c835dd28b,\n                limb2: 0x10fe4487a871a419,\n            },\n            r1a1: u288 {\n                limb0: 0xedf4af2df7c13d6340069716,\n                limb1: 0x8592eea593ece446e8b2c83b,\n                limb2: 0x12f9280ce8248724,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4470eba4d9b59b96407ee453,\n                limb1: 0x42e5bebde803009771b64e57,\n                limb2: 0x15a127d5b9249aaf,\n            },\n            r0a1: u288 {\n                limb0: 0xd6cb50a7a92876580b531620,\n                limb1: 0xef70fbfdb45b07e8f7babf8f,\n                limb2: 0xe69823faec6b62f,\n            },\n            r1a0: u288 {\n                limb0: 0xf656b93207a60f9ea4b3b77a,\n                limb1: 0xb0b29dbe81cee075c4d2f88f,\n                limb2: 0x27e43cc268f2839d,\n            },\n            r1a1: u288 {\n                limb0: 0xdf8504b3164d07aa4f703b8e,\n                limb1: 0xad4fb7395eb3b6d4e78fef42,\n                limb2: 0x25065b36a637c585,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xe67f72c6d45f1bb04403139f,\n                limb1: 0x9233e2a95d3f3c3ff2f7e5b8,\n                limb2: 0x1f931e8e4343b028,\n            },\n            r0a1: u288 {\n                limb0: 0x20ef53907af71803ce3ca5ca,\n                limb1: 0xd99b6637ee9c73150b503ea4,\n                limb2: 0x1c9759def8a98ea8,\n            },\n            r1a0: u288 {\n                limb0: 0xa0a3b24c9089d224822fad53,\n                limb1: 0xdfa2081342a7a895062f3e50,\n                limb2: 0x185e8cf6b3e494e6,\n            },\n            r1a1: u288 {\n                limb0: 0x8752a12394b29d0ba799e476,\n                limb1: 0x1493421da067a42e7f3d0f8f,\n                limb2: 0x67e7fa3e3035edf,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd4e7008d0b092bfff8fe7b22,\n                limb1: 0x8917ebc9b364042de59b88bb,\n                limb2: 0x2059627f035f9cd,\n            },\n            r0a1: u288 {\n                limb0: 0xbb1b0a9dbb59e8f877edf020,\n                limb1: 0x8c8dc3726e82e68ba21b6b69,\n                limb2: 0x1ba5cd54073c1cea,\n            },\n            r1a0: u288 {\n                limb0: 0x6a2c5a3d8e6236240edaf594,\n                limb1: 0xe68677bda7793cb801acebcc,\n                limb2: 0xc02f104a4e15c01,\n            },\n            r1a1: u288 {\n                limb0: 0x5c0bc4dce23d8b6bc29ae908,\n                limb1: 0x6127032066da7babc36ec0d7,\n                limb2: 0x1e697536f2da52d0,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6d6138c95464e5e774ae7ba0,\n                limb1: 0xe6ca73a5498e4ccd4bb68fc7,\n                limb2: 0x15bf8aa8ed1beff6,\n            },\n            r0a1: u288 {\n                limb0: 0xabd7c55a134ed405b4966d3c,\n                limb1: 0xe69dd725ccc4f9dd537fe558,\n                limb2: 0x2df4a03e2588a8f1,\n            },\n            r1a0: u288 {\n                limb0: 0x7cf42890de0355ffc2480d46,\n                limb1: 0xe33c2ad9627bcb4b028c2358,\n                limb2: 0x2a18767b40de20bd,\n            },\n            r1a1: u288 {\n                limb0: 0x79737d4a87fab560f3d811c6,\n                limb1: 0xa88fee5629b91721f2ccdcf7,\n                limb2: 0x2b51c831d3404d5e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6bec21174a07a597502dcb70,\n                limb1: 0xc8bfda289a81e43dd23758ac,\n                limb2: 0x269f86504baa3fef,\n            },\n            r0a1: u288 {\n                limb0: 0x6ba3eb4f98c964368c0baea8,\n                limb1: 0x95c9a6540a00750faa184469,\n                limb2: 0xacf594a3e59eb53,\n            },\n            r1a0: u288 {\n                limb0: 0xcc5ab24e082353dce083cba0,\n                limb1: 0x71aae3696df376a2733a9dae,\n                limb2: 0xc8ffa16612417f8,\n            },\n            r1a1: u288 {\n                limb0: 0x23fc9d7be4a172856d916171,\n                limb1: 0x1ea89e6339555c15f01d35eb,\n                limb2: 0x1df21e5cd24fb7ca,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9812f6145cf7e949fa207f20,\n                limb1: 0x4061c36b08d5bcd408b14f19,\n                limb2: 0x8332e08b2eb51ed,\n            },\n            r0a1: u288 {\n                limb0: 0xa4a7ae8f65ba180c523cb33,\n                limb1: 0xb71fabbdc78b1128712d32a5,\n                limb2: 0x2acd1052fd0fefa7,\n            },\n            r1a0: u288 {\n                limb0: 0x6ea5598e221f25bf27efc618,\n                limb1: 0xa2c2521a6dd8f306f86d6db7,\n                limb2: 0x13af144288655944,\n            },\n            r1a1: u288 {\n                limb0: 0xea469c4b390716a6810fff5d,\n                limb1: 0xf8052694d0fdd3f40b596c20,\n                limb2: 0x24d0ea6c86e48c5c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2e39be614d904bafea58a8cd,\n                limb1: 0xf53f0a6a20a1f1783b0ea2d0,\n                limb2: 0x99c451b7bb726d7,\n            },\n            r0a1: u288 {\n                limb0: 0x28ec54a4ca8da838800c573d,\n                limb1: 0xb78365fa47b5e192307b7b87,\n                limb2: 0x2df87aa88e012fec,\n            },\n            r1a0: u288 {\n                limb0: 0xfb7022881c6a6fdfb18de4aa,\n                limb1: 0xb9bd30f0e93c5b93ad333bab,\n                limb2: 0x1dd20cbccdeb9924,\n            },\n            r1a1: u288 {\n                limb0: 0x16d8dfdf790a6be16a0e55ba,\n                limb1: 0x90ab884395509b9a264472d4,\n                limb2: 0xeaec571657b6e9d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x83df0f14548cb4d3df297098,\n                limb1: 0x6fce5768b8d9280342dc4f15,\n                limb2: 0x1b847c02d5d13372,\n            },\n            r0a1: u288 {\n                limb0: 0xe0ad398e46dde2df37d57ea2,\n                limb1: 0xfc42e5247aa2311cd279d7f5,\n                limb2: 0x1b7988b75c25371e,\n            },\n            r1a0: u288 {\n                limb0: 0xfec8a1c309a7cb375e664afb,\n                limb1: 0x5e17576eee68f0fee50010d3,\n                limb2: 0x20d165c95da78c9e,\n            },\n            r1a1: u288 {\n                limb0: 0x747ef37118468b0e3d86f0d1,\n                limb1: 0xe585b56f5e9bc73693416049,\n                limb2: 0x16d647b984100e57,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x32a896c88589d1e2d820d4b7,\n                limb1: 0x6cddfd3af2415ef1287e3821,\n                limb2: 0x168029eaf79f17fd,\n            },\n            r0a1: u288 {\n                limb0: 0x1380ac0f4d217fab84bcbd16,\n                limb1: 0x1732a0408706c4c9fbe7d02e,\n                limb2: 0x1a067f72a0e57d5e,\n            },\n            r1a0: u288 {\n                limb0: 0x52b10f62e67a60a9c6985c56,\n                limb1: 0x59bfd92a57a9cc81693f91a0,\n                limb2: 0x17885ada1c8800dd,\n            },\n            r1a1: u288 {\n                limb0: 0xc5c177df970ad4eb4a6f9410,\n                limb1: 0x6eb19f03cfb97f703881fb87,\n                limb2: 0x20884457b2d3a8ec,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xce78fc6505db036c10fac771,\n                limb1: 0x61f8c0bc7f60ad6415d5e419,\n                limb2: 0x59009c5cf9ea663,\n            },\n            r0a1: u288 {\n                limb0: 0xb3b3f697fc34d64ba053b914,\n                limb1: 0x317af5815ce5bfffc5a6bc97,\n                limb2: 0x23f97fee4deda847,\n            },\n            r1a0: u288 {\n                limb0: 0xf559e09cf7a02674ac2fa642,\n                limb1: 0x4fa7548b79cdd054e203689c,\n                limb2: 0x2173b379d546fb47,\n            },\n            r1a1: u288 {\n                limb0: 0x758feb5b51caccff9da0f78f,\n                limb1: 0xd7f37a1008233b74c4894f55,\n                limb2: 0x917c640b4b9627e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x438bae16b78f8d4c6d3db30a,\n                limb1: 0x8445211ebf9bfcba1c776529,\n                limb2: 0x2f481a220dd1622a,\n            },\n            r0a1: u288 {\n                limb0: 0x3482b3e989656e30cb35b229,\n                limb1: 0x42347ba4b55db7dd069c1a86,\n                limb2: 0xde1fa929f76dbd7,\n            },\n            r1a0: u288 {\n                limb0: 0x8bc590876697c6fa8681219b,\n                limb1: 0xe6bafedd88cafa369275dc4e,\n                limb2: 0x145b451118b58bdf,\n            },\n            r1a1: u288 {\n                limb0: 0x730bdbb324324be339d39111,\n                limb1: 0xc10f98222a10e6cc998a1a62,\n                limb2: 0x1bb0517beaddec5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x72548e0d946b796842cfecd8,\n                limb1: 0x78b54b355e3c26476b0fab82,\n                limb2: 0x2dc9f32c90b6ba31,\n            },\n            r0a1: u288 {\n                limb0: 0xa943be83a6fc90414320753b,\n                limb1: 0xd708fde97241095833ce5a08,\n                limb2: 0x142111e6a73d2e82,\n            },\n            r1a0: u288 {\n                limb0: 0xc79e8d5465ec5f28781e30a2,\n                limb1: 0x697fb9430b9ad050ced6cce,\n                limb2: 0x1a9d647149842c53,\n            },\n            r1a1: u288 {\n                limb0: 0x9bab496952559362586725cd,\n                limb1: 0xbe78e5a416d9665be64806de,\n                limb2: 0x147b550afb4b8b84,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xe7596a824a07b270ac4188c8,\n                limb1: 0xe6c994e9676625d23213b4a2,\n                limb2: 0x81a26c392dcf2c5,\n            },\n            r0a1: u288 {\n                limb0: 0xb2ea042038d6d50de71e18e4,\n                limb1: 0x90341ba13db1bf782d7ee4e5,\n                limb2: 0x271d330705e070b4,\n            },\n            r1a0: u288 {\n                limb0: 0xd33feb213584e1aff376fc48,\n                limb1: 0x1e000c3d2386eea0df68e9ca,\n                limb2: 0x130ed249899a2898,\n            },\n            r1a1: u288 {\n                limb0: 0xfacb4dd4ede95483ef565396,\n                limb1: 0xa8089c5ac03ab4c520fd3549,\n                limb2: 0x2dd9fb297e9a38bd,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x1422e11013fe6cdd7f843391,\n                limb1: 0xfb96092ab69fc530e27d8d8e,\n                limb2: 0xe39e04564fedd0,\n            },\n            r0a1: u288 {\n                limb0: 0xbd4e81e3b4db192e11192788,\n                limb1: 0x805257d3c2bdbc344a15ce0d,\n                limb2: 0x10ddd4f47445106b,\n            },\n            r1a0: u288 {\n                limb0: 0x87ab7f750b693ec75bce04e1,\n                limb1: 0x128ba38ebed26d74d26e4d69,\n                limb2: 0x2f1d22a64c983ab8,\n            },\n            r1a1: u288 {\n                limb0: 0x74207c17f5c8335183649f77,\n                limb1: 0x7144cd3520ac2e1be3204133,\n                limb2: 0xb38d0645ab3499d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6a6ef43c964cb860b38e6603,\n                limb1: 0xd1b6d2306114c2a9d0d5ab8a,\n                limb2: 0x25fca3e4a6ad8136,\n            },\n            r0a1: u288 {\n                limb0: 0x2ad046669b8551d7488add7,\n                limb1: 0x84ac1d26252119712a5ceb2,\n                limb2: 0x19f02ee8b1efc961,\n            },\n            r1a0: u288 {\n                limb0: 0x3cef7dc2c32f78d6c7d5a42c,\n                limb1: 0xfa2616aba4343d1d5a9a0e2e,\n                limb2: 0x17106b4d22f8d241,\n            },\n            r1a1: u288 {\n                limb0: 0xc701c3ffc4426f752e0b58c2,\n                limb1: 0x96f0ac67850fb5c266cf5c,\n                limb2: 0x1a16e16ce5a84c54,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x49173a889c697b0ab07f35bc,\n                limb1: 0xdcffb65f4b4c21ced6b623af,\n                limb2: 0x1366d12ee6022f7b,\n            },\n            r0a1: u288 {\n                limb0: 0x285fdce362f7a79b89c49b5c,\n                limb1: 0xae9358c8eaf26e2fed7353f5,\n                limb2: 0x21c91fefaf522b5f,\n            },\n            r1a0: u288 {\n                limb0: 0x748798f96436e3b18c64964a,\n                limb1: 0xfc3bb221103d3966d0510599,\n                limb2: 0x167859ae2ebc5e27,\n            },\n            r1a1: u288 {\n                limb0: 0xe3b55b05bb30e23fa7eba05b,\n                limb1: 0xa5fc8b7f7bc6abe91c90ddd5,\n                limb2: 0xe0da83c6cdebb5a,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x30a4abff5957209783681bfb,\n                limb1: 0x82d868d5ca421e4f1a0daf79,\n                limb2: 0x1ba96ef98093d510,\n            },\n            r0a1: u288 {\n                limb0: 0xd9132c7f206a6c036a39e432,\n                limb1: 0x8a2dfb94aba29a87046110b8,\n                limb2: 0x1fad2fd5e5e37395,\n            },\n            r1a0: u288 {\n                limb0: 0x76b136dc82b82e411b2c44f6,\n                limb1: 0xe405f12052823a54abb9ea95,\n                limb2: 0xf125ba508c26ddc,\n            },\n            r1a1: u288 {\n                limb0: 0x1bae07f5f0cc48e5f7aac169,\n                limb1: 0x47d1288d741496a960e1a979,\n                limb2: 0xa0911f6cc5eb84e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x14d30fda811521117927311a,\n                limb1: 0xe1d92f17817d1a06eb5e3a2,\n                limb2: 0x1281bb804fdd92a6,\n            },\n            r0a1: u288 {\n                limb0: 0x589100b3cd0e2be3feb99497,\n                limb1: 0x763b459cdca3ea4cee8f3085,\n                limb2: 0x15a8a70126af58f8,\n            },\n            r1a0: u288 {\n                limb0: 0xb77343171852732d4297b40d,\n                limb1: 0xf26c00e232ec8878efd4e75c,\n                limb2: 0x60d465fbdb8a07d,\n            },\n            r1a1: u288 {\n                limb0: 0xd8d997b09eab02f6a0a29be4,\n                limb1: 0x1aca09f7a6558306fdb5d3e4,\n                limb2: 0x2fbab16347a0f9ff,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x857d0968bb488b80633a8bc1,\n                limb1: 0xf2014971f9c6044a1e4c78a7,\n                limb2: 0x1cc072450b90ed16,\n            },\n            r0a1: u288 {\n                limb0: 0x846981ea26f3e279d3dfba61,\n                limb1: 0xf4f358cf12810a94e2e4f7f4,\n                limb2: 0x779e8b7c7a46866,\n            },\n            r1a0: u288 {\n                limb0: 0x4228e32ecea217f455d31a3a,\n                limb1: 0x2b56b887827ea6e4f7a91c37,\n                limb2: 0x1a7a9910164d6252,\n            },\n            r1a1: u288 {\n                limb0: 0xdee06b1e3e0558ae82bee505,\n                limb1: 0x163e51dfac33f9152680c9eb,\n                limb2: 0x2a487bb7ad7218f3,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2e7b3a5a35456f42e87968e6,\n                limb1: 0xb4303f5093c3a460674a2fcd,\n                limb2: 0x2b5331f03b8fa15f,\n            },\n            r0a1: u288 {\n                limb0: 0x7cea371d64d8bd0fc5b9427e,\n                limb1: 0x76208e15fc175e352c274fbe,\n                limb2: 0x5ceb46647d41234,\n            },\n            r1a0: u288 {\n                limb0: 0x6cdac06bfcf041a30435a560,\n                limb1: 0x15a7ab7ed1df6d7ed12616a6,\n                limb2: 0x2520b0f462ad4724,\n            },\n            r1a1: u288 {\n                limb0: 0xe8b65c5fff04e6a19310802f,\n                limb1: 0xc96324a563d5dab3cd304c64,\n                limb2: 0x230de25606159b1e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xe2031868c812b8cecacd7a4a,\n                limb1: 0x50546c799ceed3c43c41f4ba,\n                limb2: 0x25cc77c74cbabdbd,\n            },\n            r0a1: u288 {\n                limb0: 0x295bae77b9ad4b6c97646232,\n                limb1: 0x75621d2aff5e576b7d6fe300,\n                limb2: 0x143043b86b1ca5b4,\n            },\n            r1a0: u288 {\n                limb0: 0xca3c979fa4d3b18d2f7b1bcc,\n                limb1: 0xdd2c365809773b6e09ccb2b9,\n                limb2: 0x14391c33bfc390d8,\n            },\n            r1a1: u288 {\n                limb0: 0x5e861ecfb9119d168163c202,\n                limb1: 0xcdbc50774ab2e9bee2b80649,\n                limb2: 0x1fbe4fcdc5c5a57e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb2236e5462d1e11842039bb5,\n                limb1: 0x8d746dd0bb8bb2a455d505c1,\n                limb2: 0x2fd3f4a905e027ce,\n            },\n            r0a1: u288 {\n                limb0: 0x3d6d9836d71ddf8e3b741b09,\n                limb1: 0x443f16e368feb4cb20a5a1ab,\n                limb2: 0xb5f19dda13bdfad,\n            },\n            r1a0: u288 {\n                limb0: 0x4e5612c2b64a1045a590a938,\n                limb1: 0xbca215d075ce5769db2a29d7,\n                limb2: 0x161e651ebdfb5065,\n            },\n            r1a1: u288 {\n                limb0: 0xc02a55b6685351f24e4bf9c7,\n                limb1: 0x4134240119050f22bc4991c8,\n                limb2: 0x300bd9f8d76bbc11,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xe9296a3a3aed4c4143d2e0ba,\n                limb1: 0x7de973514b499b2da739b3e6,\n                limb2: 0x1b4b807986fcdee0,\n            },\n            r0a1: u288 {\n                limb0: 0xb9295fecce961afe0c5e6dad,\n                limb1: 0xc4e30c322bcae6d526c4de95,\n                limb2: 0x1fee592f513ed6b2,\n            },\n            r1a0: u288 {\n                limb0: 0x7245f5e5e803d0d448fafe21,\n                limb1: 0xcbdc032ecb3b7a63899c53d0,\n                limb2: 0x1fde9ffc17accfc3,\n            },\n            r1a1: u288 {\n                limb0: 0x8edcc1b2fdd35c87a7814a87,\n                limb1: 0x99d54b5c2fe171c49aa9cb08,\n                limb2: 0x130ef740e416a6fe,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x50cb7f4b087200d53fa86cb2,\n                limb1: 0xff132c0ccf9286b3bc6e72f8,\n                limb2: 0xd1d98c6aa4cbd20,\n            },\n            r0a1: u288 {\n                limb0: 0x5cb371016b5e5346aa276b94,\n                limb1: 0xb4491b5077bb58bcf9cd8f43,\n                limb2: 0xd51bc57128e720a,\n            },\n            r1a0: u288 {\n                limb0: 0x397965b705cdb46b061f25e8,\n                limb1: 0xd1ed8b8fa62c5c50b27dc115,\n                limb2: 0x395493fce79da18,\n            },\n            r1a1: u288 {\n                limb0: 0x8964d77b83faf3ac3f972566,\n                limb1: 0x6c73a21e7e6db17d8f89f9fa,\n                limb2: 0x7ed3c0d414cddf7,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xed3ac7bc560f29f1d5148309,\n                limb1: 0xd4bc60d88edc82f6a9336b9a,\n                limb2: 0x1af46a921f0bb17,\n            },\n            r0a1: u288 {\n                limb0: 0xf5a22ff7d977b6b6acf9f3ca,\n                limb1: 0xad4b2299bff7a855dfde34df,\n                limb2: 0x2176ace7d56a9ff2,\n            },\n            r1a0: u288 {\n                limb0: 0xdc5d8bbb9566386bdca9619e,\n                limb1: 0x518f514d6bf9082b5e1ca06a,\n                limb2: 0x28162e5d570380f,\n            },\n            r1a1: u288 {\n                limb0: 0x448f699ecddf33780c7293a,\n                limb1: 0x147b945d1db66b75de1d0e11,\n                limb2: 0x2c3dec42b83ab6d5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x537ecf0916b38aeea21d4e47,\n                limb1: 0x181a00de27ba4be1b380d6c8,\n                limb2: 0x8c2fe2799316543,\n            },\n            r0a1: u288 {\n                limb0: 0xe68fff5ee73364fff3fe403b,\n                limb1: 0x7b8685c8a725ae79cfac8f99,\n                limb2: 0x7b4be349766aba4,\n            },\n            r1a0: u288 {\n                limb0: 0xdf7c93c0095545ad5e5361ea,\n                limb1: 0xce316c76191f1e7cd7d03f3,\n                limb2: 0x22ea21f18ddec947,\n            },\n            r1a1: u288 {\n                limb0: 0xa19620b4c32db68cc1c2ef0c,\n                limb1: 0xffa1e4be3bed5faba2ccbbf4,\n                limb2: 0x16fc78a64c45f518,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2b6af476f520b4bf804415bc,\n                limb1: 0xd949ee7f9e8874698b090fca,\n                limb2: 0x34db5e5ec2180cf,\n            },\n            r0a1: u288 {\n                limb0: 0x3e06a324f038ac8abcfb28d7,\n                limb1: 0xc2e6375b7a83c0a0145f8942,\n                limb2: 0x2247e79161483763,\n            },\n            r1a0: u288 {\n                limb0: 0x708773d8ae3a13918382fb9d,\n                limb1: 0xaf83f409556e32aa85ae92bf,\n                limb2: 0x9af0a924ae43ba,\n            },\n            r1a1: u288 {\n                limb0: 0xa6fded212ff5b2ce79755af7,\n                limb1: 0x55a2adfb2699ef5de6581b21,\n                limb2: 0x2476e83cfe8daa5c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x88da3121b35160882a1c7589,\n                limb1: 0x65804a112b6f3376e944918a,\n                limb2: 0x16dacfb60b1ce19a,\n            },\n            r0a1: u288 {\n                limb0: 0xeff82aff39cb798ce9b8b0d9,\n                limb1: 0xa90ce85c7d5f232be9d0aa48,\n                limb2: 0x193c05a28703b386,\n            },\n            r1a0: u288 {\n                limb0: 0x20ad3c10b068e055950db02d,\n                limb1: 0x7f126eebf19b02a0833fe0ce,\n                limb2: 0x297139b7691ecc5,\n            },\n            r1a1: u288 {\n                limb0: 0x1b6a771c255179179254a975,\n                limb1: 0x6e8c9e35001729b1f77e9eb2,\n                limb2: 0x3e2e494608e33c7,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7f9803672c5c3c3885d9f98a,\n                limb1: 0xde4f0a101b3d8f9ee11d42b2,\n                limb2: 0x20a37cabfbfa257,\n            },\n            r0a1: u288 {\n                limb0: 0x26838cb91e386068a3da1af1,\n                limb1: 0xee22b598ea3b51661d35cff3,\n                limb2: 0x1919454dad133f1c,\n            },\n            r1a0: u288 {\n                limb0: 0x7c23a02fb58896140cab4a26,\n                limb1: 0xb61a77a33f73616e4ebaac8a,\n                limb2: 0x98a546ad9b9c556,\n            },\n            r1a1: u288 {\n                limb0: 0xa4bc65cb502123f8cab8a370,\n                limb1: 0x8be2308b4f0c0dd30f4f47e8,\n                limb2: 0x20ccdec6f5186f9e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x1c4759bcf7c607fe3f839d4d,\n                limb1: 0xea91f311da73327e2ed40785,\n                limb2: 0x2017052c72360f42,\n            },\n            r0a1: u288 {\n                limb0: 0x38cf8a4368c0709980199fc3,\n                limb1: 0xfc9047885996c19e84d7d4ea,\n                limb2: 0x1795549eb0b97783,\n            },\n            r1a0: u288 {\n                limb0: 0xb70f7ecfbec0eaf46845e8cc,\n                limb1: 0x9ddf274c2a9f89ea3bc4d66f,\n                limb2: 0xcc6f106abfcf377,\n            },\n            r1a1: u288 {\n                limb0: 0xf6ff11ce29186237468c2698,\n                limb1: 0x5c629ad27bb61e4826bb1313,\n                limb2: 0x2014c6623f1fb55e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x5c4102ef74201f7de38e0463,\n                limb1: 0xb1ef54e99607be59909009bb,\n                limb2: 0x25ff50f42e66453b,\n            },\n            r0a1: u288 {\n                limb0: 0x76c0ba1f7c7f207460e65d58,\n                limb1: 0x878854c0c07edabf3d15a5c9,\n                limb2: 0x182311cfea026538,\n            },\n            r1a0: u288 {\n                limb0: 0xc8bbb32e6a668cf1e33ec2d8,\n                limb1: 0x23c6efb2db33c7221af7e56c,\n                limb2: 0x22c07d0e7f650e9a,\n            },\n            r1a1: u288 {\n                limb0: 0xadf5b275b9ae0362598bc296,\n                limb1: 0x70f05b3cbfa5ee508c52d108,\n                limb2: 0x2c76c696e1630aa3,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc648054e4b6134bbfd68487f,\n                limb1: 0xdf0506dad3f3d098c13a6386,\n                limb2: 0x26bebeb6f46c2e8c,\n            },\n            r0a1: u288 {\n                limb0: 0x9d0cdb28a94204776c6e6ba6,\n                limb1: 0x303f02dfe619752b1607951d,\n                limb2: 0x1127d8b17ef2c064,\n            },\n            r1a0: u288 {\n                limb0: 0xe34ca1188b8db4e4694a696c,\n                limb1: 0x243553602481d9b88ca1211,\n                limb2: 0x1f8ef034831d0132,\n            },\n            r1a1: u288 {\n                limb0: 0xe3a5dfb1785690dad89ad10c,\n                limb1: 0xd690b583ace24ba033dd23e0,\n                limb2: 0x405d0709e110c03,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9f395ba5aff2b0485d02ad3,\n                limb1: 0xd745a02f5dda7608c1aa5b6c,\n                limb2: 0x2c12ce79338fb06c,\n            },\n            r0a1: u288 {\n                limb0: 0x6bbfa55a1d9bfb38880150f5,\n                limb1: 0x3a352c8ebceaab1b84fddea8,\n                limb2: 0x1ef234624c2a4dd1,\n            },\n            r1a0: u288 {\n                limb0: 0xce4d0f18e7500ec5e79f5c9b,\n                limb1: 0x806d4caac7b410b45752f986,\n                limb2: 0x12ec5a5f04110219,\n            },\n            r1a1: u288 {\n                limb0: 0x1cacd816d2c00f06c10b8405,\n                limb1: 0xfa95cba80a6fa53f6e8fcdbd,\n                limb2: 0xd5b083f527eaaf5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x72cc2cef2785ce4ff4e9b7af,\n                limb1: 0x60ed5b9c207d7f31fb6234ab,\n                limb2: 0x1bb17a4bc7b643ed,\n            },\n            r0a1: u288 {\n                limb0: 0x9424eb15b502cde7927c7530,\n                limb1: 0xa0e33edbbaa9de8e9c206059,\n                limb2: 0x2b9a3a63bbf4af99,\n            },\n            r1a0: u288 {\n                limb0: 0x423811cb6386e606cf274a3c,\n                limb1: 0x8adcc0e471ecfe526f56dc39,\n                limb2: 0x9169a8660d14368,\n            },\n            r1a1: u288 {\n                limb0: 0xf616c863890c3c8e33127931,\n                limb1: 0xcc9414078a6da6989dae6b91,\n                limb2: 0x594d6a7e6b34ab2,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7fb74b75258ad974f27f0b99,\n                limb1: 0x84f19bd902fadad4d0bcd73c,\n                limb2: 0xce721ef63bddc72,\n            },\n            r0a1: u288 {\n                limb0: 0xaaa754b4283ded9567a7ebe6,\n                limb1: 0x8680b8bb98776864cf0b9a91,\n                limb2: 0x2c654975f8cf5aac,\n            },\n            r1a0: u288 {\n                limb0: 0x15b404bb99c14804cb871df0,\n                limb1: 0x28f2373909ce28eab3269ad5,\n                limb2: 0x23f0beb80a0dc66f,\n            },\n            r1a1: u288 {\n                limb0: 0x1a40652ffabc01487ee07368,\n                limb1: 0xfb7d1ac226c315f73ba10295,\n                limb2: 0xd4a4463afd8862a,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xf2d619ae78049bf9141c35cf,\n                limb1: 0x717f8b10d469a1ee2d91f191,\n                limb2: 0x2c72c82fa8afe345,\n            },\n            r0a1: u288 {\n                limb0: 0xb89321223b82a2dc793c0185,\n                limb1: 0x71506a0cf4adb8e51bb7b759,\n                limb2: 0x2c13b92a98651492,\n            },\n            r1a0: u288 {\n                limb0: 0x4947ef2c89276f77f9d20942,\n                limb1: 0xb454d68685ab6b6976e71ec5,\n                limb2: 0x19a938d0e78a3593,\n            },\n            r1a1: u288 {\n                limb0: 0xbe883eb119609b489c01c905,\n                limb1: 0xaa06779922047f52feac5ce6,\n                limb2: 0x76977a3015dc164,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x43a96a588005043a46aadf2c,\n                limb1: 0xa37b89d8a1784582f0c52126,\n                limb2: 0x22e9ef3f5d4b2297,\n            },\n            r0a1: u288 {\n                limb0: 0x8c6f6d8474cf6e5a58468a31,\n                limb1: 0xeb1ce6ac75930ef1c79b07e5,\n                limb2: 0xf49839a756c7230,\n            },\n            r1a0: u288 {\n                limb0: 0x82b84693a656c8e8c1f962fd,\n                limb1: 0x2c1c8918ae80282208b6b23d,\n                limb2: 0x14d3504b5c8d428f,\n            },\n            r1a1: u288 {\n                limb0: 0x60ef4f4324d5619b60a3bb84,\n                limb1: 0x6d3090caefeedbc33638c77a,\n                limb2: 0x159264c370c89fec,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8fac42bd654a73e6e06cd8cf,\n                limb1: 0xc3830a580c7ae62ca9a58036,\n                limb2: 0xb1a750d7380c19e,\n            },\n            r0a1: u288 {\n                limb0: 0x4e8496aad8f6ac809fd15dae,\n                limb1: 0xb51505336049b39b3fe98502,\n                limb2: 0xc2e5994cb400618,\n            },\n            r1a0: u288 {\n                limb0: 0x2fc55d31524d834b260b3051,\n                limb1: 0xe465c3c590247c88422d26c8,\n                limb2: 0x10322a13b180bb0a,\n            },\n            r1a1: u288 {\n                limb0: 0x25a29688c4e32c67cb1134a8,\n                limb1: 0x651bc8b0deb27bdb5762232f,\n                limb2: 0x117dd3744aca1f64,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xee89d2a59689701ecf4a31f2,\n                limb1: 0xefc968d4b47e143fc28040f3,\n                limb2: 0x1a5b2ca3ba6945b3,\n            },\n            r0a1: u288 {\n                limb0: 0x981810f00669aa9ef6a5c331,\n                limb1: 0x483396ddbc880f5c1a0a0915,\n                limb2: 0x85f453a76b6bc86,\n            },\n            r1a0: u288 {\n                limb0: 0xe25dfca55ef96a66eb1a716a,\n                limb1: 0xa36d2f86b377aeddc41b101b,\n                limb2: 0x36848c2314fd3a7,\n            },\n            r1a1: u288 {\n                limb0: 0xac4c5ac54d6c417facda3992,\n                limb1: 0xd0b77b71f704c0930adeef4c,\n                limb2: 0x8c773a6db51d65d,\n            },\n        },\n    ]\n        .span();\n    let hint = MPCheckHintBN254 {\n        lambda_root: E12D {\n            w0: u288 {\n                limb0: 0x195c16df4a0f8f9dcb48bee9,\n                limb1: 0x27f3cb7c50eca75e794d2f14,\n                limb2: 0x14156ca1853095df,\n            },\n            w1: u288 {\n                limb0: 0xf01d099a6df0a4a55ed21b59,\n                limb1: 0x9fed6b2018946bcc2a8dad06,\n                limb2: 0xdc2a20a6107d4c4,\n            },\n            w2: u288 {\n                limb0: 0x6c1817c4efa721fc98f69503,\n                limb1: 0xed80f8339cf9e06ff04257cb,\n                limb2: 0x14260c5afb0b1148,\n            },\n            w3: u288 {\n                limb0: 0xf98323135baab8ae3c766c60,\n                limb1: 0xffefe512eb9448ef436dd090,\n                limb2: 0xafe8a09df07bf3d,\n            },\n            w4: u288 {\n                limb0: 0x1707d6579371dae20368253c,\n                limb1: 0x7bb02cc2b5dc98aff593681,\n                limb2: 0x114692950f53d4f7,\n            },\n            w5: u288 {\n                limb0: 0xa9da397fe12d4a3939ce650c,\n                limb1: 0x49646f1e106dc0ee917551f5,\n                limb2: 0x2dd3fca725919631,\n            },\n            w6: u288 {\n                limb0: 0xd6054be99a9248497b82062a,\n                limb1: 0x2ea3f1b228beff5fd364a127,\n                limb2: 0x1750bd450b85cbd6,\n            },\n            w7: u288 {\n                limb0: 0x4b83377c168d89b919386546,\n                limb1: 0x26169d3ce55db12ecafd74bc,\n                limb2: 0x1248cfad33a21477,\n            },\n            w8: u288 {\n                limb0: 0x724e5f5589d549a709b2b5ef,\n                limb1: 0x8816b055888399c99a954b82,\n                limb2: 0x28d156bac04e6493,\n            },\n            w9: u288 {\n                limb0: 0x56fbb49c235bc75082f5f26e,\n                limb1: 0x56afece475580f453f9126f2,\n                limb2: 0x39e1ab153bd7095,\n            },\n            w10: u288 {\n                limb0: 0x4fd83597fed1d7e7b9d09e04,\n                limb1: 0x7c7f558d3e74e6617d7f08b5,\n                limb2: 0x14853f940bf5c55,\n            },\n            w11: u288 {\n                limb0: 0xae3473546aa01a618b78b125,\n                limb1: 0xfee14a3ce2b7af4e1872fe49,\n                limb2: 0xaa480d613601947,\n            },\n        },\n        lambda_root_inverse: E12D {\n            w0: u288 {\n                limb0: 0xd4445d3e89123811ede12825,\n                limb1: 0x7794dbccbd7925ea98507cf8,\n                limb2: 0x1d7a9ffbbe137d69,\n            },\n            w1: u288 {\n                limb0: 0xe7642301653a6307c7467811,\n                limb1: 0x75e5c1fc0ff08be0981a61d8,\n                limb2: 0x1f45aa2ee73f15e2,\n            },\n            w2: u288 {\n                limb0: 0x9865533968e39b5083fc576e,\n                limb1: 0xc63d81e8d0c1e37c901a5a56,\n                limb2: 0x2446d99f276e4c8b,\n            },\n            w3: u288 {\n                limb0: 0x31b5aada49be919aaa447cc7,\n                limb1: 0x5131a5f04c3c634c9df3447,\n                limb2: 0x223bd50b771fcaa9,\n            },\n            w4: u288 {\n                limb0: 0x6aefbf4a9ce706bc36252c47,\n                limb1: 0x4d7ddfacdd59750105dcc37f,\n                limb2: 0x24cfef2958a7c9c,\n            },\n            w5: u288 {\n                limb0: 0xe9789fb7259c294210f7720e,\n                limb1: 0x4955cb370b0ac66e3e295ea6,\n                limb2: 0x3a974db52b27468,\n            },\n            w6: u288 {\n                limb0: 0x3fb8266ad697b531de5e2fb6,\n                limb1: 0x41feb355a44845dc30c2a9ae,\n                limb2: 0x160b7346ec9fdd98,\n            },\n            w7: u288 {\n                limb0: 0xa56b5d534495a358f9c739f,\n                limb1: 0x5f204fa5ce1c9a99c7979911,\n                limb2: 0xe46af84e1cbba80,\n            },\n            w8: u288 {\n                limb0: 0xa9b51192113e131bd5572a21,\n                limb1: 0x9b9524e9708ac412d3fa05fe,\n                limb2: 0x1f2b5709d0d7c949,\n            },\n            w9: u288 {\n                limb0: 0x1052a86d50224b92838c5d76,\n                limb1: 0xf690cd9eab121b1f329194c,\n                limb2: 0x8a75eef583ffc3b,\n            },\n            w10: u288 {\n                limb0: 0x9764f07572ce9593878da9fb,\n                limb1: 0xde7ec74175c125ac7e878050,\n                limb2: 0xef3a64570d17038,\n            },\n            w11: u288 {\n                limb0: 0x35825f15893ad52a39f54331,\n                limb1: 0x7b87bc78053320664e06d12b,\n                limb2: 0x2a6290607745b58a,\n            },\n        },\n        w: MillerLoopResultScalingFactor {\n            w0: u288 { limb0: 0x1, limb1: 0x0, limb2: 0x0 },\n            w2: u288 { limb0: 0x0, limb1: 0x0, limb2: 0x0 },\n            w4: u288 { limb0: 0x0, limb1: 0x0, limb2: 0x0 },\n            w6: u288 { limb0: 0x0, limb1: 0x0, limb2: 0x0 },\n            w8: u288 { limb0: 0x0, limb1: 0x0, limb2: 0x0 },\n            w10: u288 { limb0: 0x0, limb1: 0x0, limb2: 0x0 },\n        },\n        Ris: array![\n            E12D {\n                w0: u288 {\n                    limb0: 0xf2fa8194a9fdd627525394de,\n                    limb1: 0xe1d604e9b0c0efb376aaa3e1,\n                    limb2: 0x6e2d5c667e253ff,\n                },\n                w1: u288 {\n                    limb0: 0x9d2d152e532c421b7834a99d,\n                    limb1: 0xe2c971b204e63954fbc8ad23,\n                    limb2: 0x2dc3c5e55face7c5,\n                },\n                w2: u288 {\n                    limb0: 0xa81940aec94ea9901fcac97d,\n                    limb1: 0xea2801041714bcb5d41a0ff,\n                    limb2: 0x2ff4750593044152,\n                },\n                w3: u288 {\n                    limb0: 0x55867c1f0779e0422d545f0c,\n                    limb1: 0xf76a2af1d6b410d8639501aa,\n                    limb2: 0xdab9fd3d1ef5226,\n                },\n                w4: u288 {\n                    limb0: 0x845bfd3e55f70e8272c8fb3,\n                    limb1: 0x3ffd60992916c6410e0f5352,\n                    limb2: 0x2fea029bdb6a10f5,\n                },\n                w5: u288 {\n                    limb0: 0xc46ce45b66636cb6ba1ee436,\n                    limb1: 0xb7d8f5bedbe3c09728563ff0,\n                    limb2: 0x2f329aa1c588e3e4,\n                },\n                w6: u288 {\n                    limb0: 0x100fa50e29907ad3283e7b83,\n                    limb1: 0xa405ca3722d951cb9a512f1c,\n                    limb2: 0x2290e74d07afff26,\n                },\n                w7: u288 {\n                    limb0: 0x7f4ccb1aa1cff1983d7d2ae4,\n                    limb1: 0x8be6fdabbb6f2986a20934fe,\n                    limb2: 0x6bd6eba6eb034c9,\n                },\n                w8: u288 {\n                    limb0: 0x49149a6939c1e7afec80ee3c,\n                    limb1: 0xb3543992e315765cb35d0f7d,\n                    limb2: 0x1ca0c85d7f94b5c6,\n                },\n                w9: u288 {\n                    limb0: 0x3e916ca84262a68f9eea11f9,\n                    limb1: 0x5ecce1f7718bba441de2df4f,\n                    limb2: 0x1f70622e79ccbeb3,\n                },\n                w10: u288 {\n                    limb0: 0x9e62952be0e54c3427ea8aab,\n                    limb1: 0xc1ad39913d06e14c6ad3a156,\n                    limb2: 0x2492333e1554b6d2,\n                },\n                w11: u288 {\n                    limb0: 0xb40efced523794fd2aa17d4a,\n                    limb1: 0xe1f6f435746d944886953830,\n                    limb2: 0x2a9baf66b1ec17a,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xa1fc4e1e3b65f7f7793d75d7,\n                    limb1: 0xae4e796f20d02f00e403c73f,\n                    limb2: 0x21c18c15eaf2e543,\n                },\n                w1: u288 {\n                    limb0: 0x3199827390abbe9ca30d6d5e,\n                    limb1: 0x730b129db4170c217248713c,\n                    limb2: 0x1ea8d6f41a6171e5,\n                },\n                w2: u288 {\n                    limb0: 0x78d14fddb4434f077e2deab0,\n                    limb1: 0x9663d11277af92fcfe15e610,\n                    limb2: 0x19210af828cd091a,\n                },\n                w3: u288 {\n                    limb0: 0x4de887d39eee6cb04c395b87,\n                    limb1: 0xc2ff130aea14a5d78e28cf8d,\n                    limb2: 0x2b61bdd91c851524,\n                },\n                w4: u288 {\n                    limb0: 0xf2b2ba244a309375052c4f42,\n                    limb1: 0xacf0b149db02d1722805cad4,\n                    limb2: 0x1b3d1b4d652e719c,\n                },\n                w5: u288 {\n                    limb0: 0x8f6d0954663be60b848af91b,\n                    limb1: 0x4cd56e52e93373b68f6d679d,\n                    limb2: 0x2e72ef29d615a4a,\n                },\n                w6: u288 {\n                    limb0: 0xe4d9fbc1e47fc17f958217f,\n                    limb1: 0x1866843e972eb31da1b03a09,\n                    limb2: 0x17626c9319fd1b0e,\n                },\n                w7: u288 {\n                    limb0: 0x6e90014bb73ec0e94d75f1ae,\n                    limb1: 0x8ce846c86c0d98599ea26c73,\n                    limb2: 0x1c2a1cb42ebfeca2,\n                },\n                w8: u288 {\n                    limb0: 0x59885f5adfdafec208157d20,\n                    limb1: 0xc06108cd50dca18c6f38d6bc,\n                    limb2: 0x6cd036a10985c09,\n                },\n                w9: u288 {\n                    limb0: 0x585e0bc54c4d2fe3d596b2e3,\n                    limb1: 0x5927149279279dcadf8c97b5,\n                    limb2: 0x2b1fa6025f359ad2,\n                },\n                w10: u288 {\n                    limb0: 0x2b7b8c0f7639faad593e8383,\n                    limb1: 0xfcf8631ba48c4afe18d80c85,\n                    limb2: 0x966e5a47631686f,\n                },\n                w11: u288 {\n                    limb0: 0x69461bc00469ae6f14b23750,\n                    limb1: 0xbc63f9e8cb37c1f943bf0690,\n                    limb2: 0x1d4e149f8299aa2d,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xbfcbda7691d6021a784022d5,\n                    limb1: 0xf407b3b09ed4b94542a95f63,\n                    limb2: 0x484ab1dd7428e01,\n                },\n                w1: u288 {\n                    limb0: 0xb133cd33b820c39fb9fef059,\n                    limb1: 0x254f89192819893523420d52,\n                    limb2: 0x181f7e2c71063ffc,\n                },\n                w2: u288 {\n                    limb0: 0x6386c277c18b70fbeccdb0ac,\n                    limb1: 0x830322bd75699347acf10beb,\n                    limb2: 0x25b122a978cff8b4,\n                },\n                w3: u288 {\n                    limb0: 0x43de51582c42a09b767cb0db,\n                    limb1: 0x38fbf88e5df42583be8f94b5,\n                    limb2: 0x425b802f131c9cb,\n                },\n                w4: u288 {\n                    limb0: 0x79e8bf369ece3027d02d9b23,\n                    limb1: 0xc43d966f8d7269715ebecee4,\n                    limb2: 0x10b0ade019bf9b51,\n                },\n                w5: u288 {\n                    limb0: 0x25fb1663997d761c2d966543,\n                    limb1: 0xbc90d7df362a1172ac8ad1d7,\n                    limb2: 0x1236e39a09e91ce8,\n                },\n                w6: u288 {\n                    limb0: 0x7519170922b5b0bdd65be6a7,\n                    limb1: 0x8d728cf7e9203cdde92b6b1a,\n                    limb2: 0x1559bd06e06a1748,\n                },\n                w7: u288 {\n                    limb0: 0x3522045a369b7bbb242270df,\n                    limb1: 0xd947b9644921f9337a72005e,\n                    limb2: 0xdcb748b310acabf,\n                },\n                w8: u288 {\n                    limb0: 0xca82b75883645f8fd56ce314,\n                    limb1: 0x48e0e79fa58c59fd9d8355f8,\n                    limb2: 0x101f82655362fa7b,\n                },\n                w9: u288 {\n                    limb0: 0x61742edaa0da46b51a3efb80,\n                    limb1: 0x20dc1158e04bce1a5dc049e0,\n                    limb2: 0x1cf24ce8520c3a8b,\n                },\n                w10: u288 {\n                    limb0: 0x37ffb162df38cdcb561cd489,\n                    limb1: 0x16b25873b29fdfb563b16a9f,\n                    limb2: 0x2375d4bad02acd4,\n                },\n                w11: u288 {\n                    limb0: 0x2c023248737e318d2195a92,\n                    limb1: 0xaca7d0297ea2a7757d8cc9e1,\n                    limb2: 0x251260ddb7f1756d,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x81fe8c8afe6873cf3f7b5cd,\n                    limb1: 0x4ec5d556e1a946d1ddcb069a,\n                    limb2: 0xca3291e3f6ef12e,\n                },\n                w1: u288 {\n                    limb0: 0x474f1efbda01f550d6c04a8a,\n                    limb1: 0x59446cd0acd4c47c9c9dce4f,\n                    limb2: 0x210465e49e0a585b,\n                },\n                w2: u288 {\n                    limb0: 0xad9aeb3a7e41876c9e3ef2d2,\n                    limb1: 0xb4967ef0d9e28b41cfb7752e,\n                    limb2: 0x1579d33d082372e9,\n                },\n                w3: u288 {\n                    limb0: 0x8897068598400e625d41936c,\n                    limb1: 0x3630dc545ed7f6dd2996f95d,\n                    limb2: 0xe7b6ee901988b96,\n                },\n                w4: u288 {\n                    limb0: 0x56832f4842ec5db2742798ab,\n                    limb1: 0xe2699baf1ca60a52f7018e62,\n                    limb2: 0x135c42195434dfb8,\n                },\n                w5: u288 {\n                    limb0: 0x152cc078fbb77283d8258c18,\n                    limb1: 0xbf47d56bbf8a81ad6350e169,\n                    limb2: 0x1c7c8963acb4f782,\n                },\n                w6: u288 {\n                    limb0: 0xbe58ec496805ce645c12ea57,\n                    limb1: 0x3dee712fe63432f75fa00299,\n                    limb2: 0x230af637699638ee,\n                },\n                w7: u288 {\n                    limb0: 0xa24d5cf767d2273e5a46a6de,\n                    limb1: 0x9d31117f3370645b3f8ba4d3,\n                    limb2: 0x20db0eb3812b696a,\n                },\n                w8: u288 {\n                    limb0: 0xb177322e3c461ec3a18fab81,\n                    limb1: 0x4e10f0ab4925d0caa9f27a52,\n                    limb2: 0x1c467f5ac56d1ba3,\n                },\n                w9: u288 {\n                    limb0: 0x6582d9e0006027351cb08356,\n                    limb1: 0x9e577626acb2a07771557dbe,\n                    limb2: 0xd7c96fe485899f0,\n                },\n                w10: u288 {\n                    limb0: 0x100017574dd91436dbce587a,\n                    limb1: 0xbdda3d96d428123f881648ff,\n                    limb2: 0x2b7e0871d76d7562,\n                },\n                w11: u288 {\n                    limb0: 0x534b2d82060ca792890071fb,\n                    limb1: 0x28eb9400b69a85997c673f39,\n                    limb2: 0x26256194b2d8184d,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x7a0590f085219d1e49b1a202,\n                    limb1: 0xc263a8319f723136aa0b96a3,\n                    limb2: 0x679690afb81dbda,\n                },\n                w1: u288 {\n                    limb0: 0x71b85226100a44d0bf7d832a,\n                    limb1: 0x3067f6fbf94ee90ffad1172,\n                    limb2: 0x1736140d66ba7277,\n                },\n                w2: u288 {\n                    limb0: 0x623d0ea9bc4d6d56f1f30d4a,\n                    limb1: 0x2ab6f8d1d518c5bf6193d719,\n                    limb2: 0x9f1bd18e2b9ee3a,\n                },\n                w3: u288 {\n                    limb0: 0x6761411697651fc6c319f2f6,\n                    limb1: 0x61d48ed7306e80c3c447cc50,\n                    limb2: 0x18b5b8fee4c3bed9,\n                },\n                w4: u288 {\n                    limb0: 0xb09464e6861e5ed9142f517a,\n                    limb1: 0x3697362f33ee1b6a2ffca931,\n                    limb2: 0x251eca3eb15ae1bb,\n                },\n                w5: u288 {\n                    limb0: 0xb753d0fb3ef0221f38b3777d,\n                    limb1: 0x2b3cba72ef077890d91f7d72,\n                    limb2: 0xcac0c0d82a467de,\n                },\n                w6: u288 {\n                    limb0: 0xacf131a2e4a8ac99cb66c4c7,\n                    limb1: 0xf0ba7668749554c860961672,\n                    limb2: 0x2b83f6926886f3ff,\n                },\n                w7: u288 {\n                    limb0: 0xa57b1654a5ea8d73e9cb6916,\n                    limb1: 0x37d0bb062363510695f11887,\n                    limb2: 0x1025a3438e62a335,\n                },\n                w8: u288 {\n                    limb0: 0xa6e8bde02fc0040222948861,\n                    limb1: 0xb3cd895a379088da54e7d665,\n                    limb2: 0xf239a541e2db6d9,\n                },\n                w9: u288 {\n                    limb0: 0x150ab124c283da1a24aaa28f,\n                    limb1: 0x7b68a368f3df8a541116a40,\n                    limb2: 0x29dabc63d0f5e9a1,\n                },\n                w10: u288 {\n                    limb0: 0xfcc3ffb404bd1c0effcc67fc,\n                    limb1: 0xa99cc3a1080e8fa3eac0f79d,\n                    limb2: 0x16b2ab0f6fefb72b,\n                },\n                w11: u288 {\n                    limb0: 0xf4fab8a30df710b0a7aa23e4,\n                    limb1: 0xee08aba39e9b86d66f89b09,\n                    limb2: 0x10297d8dba978173,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x7f1da8d717c321da92620a38,\n                    limb1: 0x1c34d5a41dd1580cad5da4bb,\n                    limb2: 0x264c35a795ea35b3,\n                },\n                w1: u288 {\n                    limb0: 0x93ef419e31d7e04fbfe40f26,\n                    limb1: 0x8dcee057ceb6a01686e7055a,\n                    limb2: 0x1c2f5969c7a2c07e,\n                },\n                w2: u288 {\n                    limb0: 0x8fe175866e96f98fff3a22a0,\n                    limb1: 0x9e8081541ccefcb53c7eb2d,\n                    limb2: 0x2244e4f0ae949c4,\n                },\n                w3: u288 {\n                    limb0: 0xf44cab93381d8325a2fc894e,\n                    limb1: 0x21e4d8a6a1c197c760b4b674,\n                    limb2: 0x2e70f85fae87c741,\n                },\n                w4: u288 {\n                    limb0: 0x2b9421d1f4a75279a4a37950,\n                    limb1: 0xa40bf928ba237c3b64bd886b,\n                    limb2: 0x2181a8053d4d2243,\n                },\n                w5: u288 {\n                    limb0: 0x551eedbb1be148ec878c8497,\n                    limb1: 0x63cfbe2727afbb1c9ab904d8,\n                    limb2: 0x1201390258b7fa5c,\n                },\n                w6: u288 {\n                    limb0: 0x3413023817ffe912237924bb,\n                    limb1: 0xc8ec7546fa50a3a5bf73ef64,\n                    limb2: 0x154b10842ab9f08e,\n                },\n                w7: u288 {\n                    limb0: 0x3433f3946abd235f4852671f,\n                    limb1: 0x4f0065f08eeb7ee8349bf5b9,\n                    limb2: 0x25af5a4af220ec11,\n                },\n                w8: u288 {\n                    limb0: 0xdf980696295073821473e3a9,\n                    limb1: 0xe1d5ffff2ee85385ae1d84ed,\n                    limb2: 0x998add2cc38123b,\n                },\n                w9: u288 {\n                    limb0: 0xa4460f4fa19d7da44b6d37d6,\n                    limb1: 0x21a63d9ac273152908e20cf4,\n                    limb2: 0xb43c05ecc1a46d7,\n                },\n                w10: u288 {\n                    limb0: 0xfa2ac15271ea1ea122a7f7c2,\n                    limb1: 0x98ccdf1be55f7224639cae5a,\n                    limb2: 0x128165600a34f4d8,\n                },\n                w11: u288 {\n                    limb0: 0x880fb407eaa05426a8a3699f,\n                    limb1: 0x13b039a6d088cde86bc99280,\n                    limb2: 0x25f0ddbe00bfe102,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xe79a1a3b581b15c6552fee96,\n                    limb1: 0x623169860e532b6833adaed0,\n                    limb2: 0xdf2e1bc3f49b17f,\n                },\n                w1: u288 {\n                    limb0: 0x82fbfcc8e320d1a559108ebd,\n                    limb1: 0x398449cedc8a6c95fb7efba7,\n                    limb2: 0xe3f4dc0728dd65a,\n                },\n                w2: u288 {\n                    limb0: 0xd42e5660c7259f239e94e9e6,\n                    limb1: 0x56a59f4335e45444ad6f0ab9,\n                    limb2: 0x717e8c6b06e6d07,\n                },\n                w3: u288 {\n                    limb0: 0x959c3512c9bb1d3663382bf5,\n                    limb1: 0x25061bc0e8ad631f66c35752,\n                    limb2: 0x1be6180a76fe2379,\n                },\n                w4: u288 {\n                    limb0: 0x113a01a95ff0b7344a6ed1fa,\n                    limb1: 0xed275900f8b636a554551b04,\n                    limb2: 0x1ed20c5fe3160f13,\n                },\n                w5: u288 {\n                    limb0: 0xda5b00dcbf123e7ef0e22ecb,\n                    limb1: 0x4712a15f67df4356961b91b0,\n                    limb2: 0x191a6e54a247677e,\n                },\n                w6: u288 {\n                    limb0: 0x8727e056ef1f2e00001ee30b,\n                    limb1: 0xa5899f981336f6b6ffb14600,\n                    limb2: 0x2ba9019a071ff9e7,\n                },\n                w7: u288 {\n                    limb0: 0x430616f2db6ce63405b60234,\n                    limb1: 0x38853a1ed4fe555eb90e9387,\n                    limb2: 0xeb9cf3c0e1b1390,\n                },\n                w8: u288 {\n                    limb0: 0x48f41979d7ee62a531dc11b1,\n                    limb1: 0xbf258b286416b510392d3426,\n                    limb2: 0x586a2b2130ac60c,\n                },\n                w9: u288 {\n                    limb0: 0x12a3062d7cf738e164cab726,\n                    limb1: 0xd7c481cf0010024424dad92,\n                    limb2: 0x240e926f21d6137a,\n                },\n                w10: u288 {\n                    limb0: 0xde116640887cb84fb5764ef7,\n                    limb1: 0xced8e2d7611e1b329248dc19,\n                    limb2: 0x6b9c04f96a0360e,\n                },\n                w11: u288 {\n                    limb0: 0xc8f83c2f3507e8a16a023597,\n                    limb1: 0x7a1d65fb1bc859ac0b9a3af6,\n                    limb2: 0x2dbdf00f63e255a2,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x9f1833d4ee6e05b2e98eb194,\n                    limb1: 0xdf61e89608afbbff54451d49,\n                    limb2: 0x7341a57c8351835,\n                },\n                w1: u288 {\n                    limb0: 0x396bde8ca73f5e0e52f1bcc3,\n                    limb1: 0xb41de7c6525d9097f89f9874,\n                    limb2: 0x1fee062ab770bd4a,\n                },\n                w2: u288 {\n                    limb0: 0xde88c90e56f5efff42fc5ae5,\n                    limb1: 0x70eb11756f50d40816fa1a84,\n                    limb2: 0x1f35fa63de82bc30,\n                },\n                w3: u288 {\n                    limb0: 0xaacbc7daaefa32f112ff727,\n                    limb1: 0x55e72851bb33661f52250a3f,\n                    limb2: 0x18c4cc5aa53fa8ab,\n                },\n                w4: u288 {\n                    limb0: 0x4d832925bb29a07f12600b73,\n                    limb1: 0x4d648c8bf3aef6e9dc8f3eca,\n                    limb2: 0x468982847f8a07e,\n                },\n                w5: u288 {\n                    limb0: 0x6865044fe86fc113321d84b3,\n                    limb1: 0x4afb949d44ddc19a50d76746,\n                    limb2: 0x1c4878b6bc126ea,\n                },\n                w6: u288 {\n                    limb0: 0xcdb1ec52b0efcf2a333cb03e,\n                    limb1: 0x1d47715e046d09a63bd817b5,\n                    limb2: 0x47664218590ab80,\n                },\n                w7: u288 {\n                    limb0: 0x9354e8a50050939f807da303,\n                    limb1: 0xdd6956fd5c5a1aab21b97b7c,\n                    limb2: 0x1bf57342d5e7ec73,\n                },\n                w8: u288 {\n                    limb0: 0xf18eec3aaeee1eea6b00228e,\n                    limb1: 0x90405b5368a83b8e3e141abd,\n                    limb2: 0x5489f27d98c5a6d,\n                },\n                w9: u288 {\n                    limb0: 0x33372084065e44dcd5edfe77,\n                    limb1: 0x9ea7ef66db0f0ff55972dbea,\n                    limb2: 0x20d81d5b8dd287c6,\n                },\n                w10: u288 {\n                    limb0: 0xf95c243e1128f75841ac88a8,\n                    limb1: 0xe39101c1f545587666fc99c9,\n                    limb2: 0x1332f858bc2d9ed6,\n                },\n                w11: u288 {\n                    limb0: 0x3dda3f6e97341fc9cbbe60d7,\n                    limb1: 0x7214e1d782068b63e36e074f,\n                    limb2: 0x7087cef01dfb965,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xee419f4271957570f4b1c32,\n                    limb1: 0xee1f110052ca2e56a97efb6c,\n                    limb2: 0xad375e8d172d961,\n                },\n                w1: u288 {\n                    limb0: 0x63ebd35fc505842517b7e802,\n                    limb1: 0x62c3623a58ae1bd17f9436b7,\n                    limb2: 0x249b716ea1290d35,\n                },\n                w2: u288 {\n                    limb0: 0x21b92dabf6e5280c26e361ee,\n                    limb1: 0x3c390fa8b8657c4f4fe50e82,\n                    limb2: 0x585285292095c27,\n                },\n                w3: u288 {\n                    limb0: 0x755a1f81220bff5c131d7e96,\n                    limb1: 0x4df7a8ee45d3302f30ff29a8,\n                    limb2: 0x10d1d361cff8aba5,\n                },\n                w4: u288 {\n                    limb0: 0xa2041d8fc2c467e3f1bac97a,\n                    limb1: 0x48e7421f5ec41f255b8c45ce,\n                    limb2: 0xca996570d833fcf,\n                },\n                w5: u288 {\n                    limb0: 0x2183fed77e39e6b8807abd2c,\n                    limb1: 0xda8b0ba5b995978dd002d1ef,\n                    limb2: 0x25ba30a10ab4363f,\n                },\n                w6: u288 {\n                    limb0: 0x44a4271d7e7d6e2372deb46f,\n                    limb1: 0x6ebe794b43059afaf191747a,\n                    limb2: 0x62cd7ea75a47f9d,\n                },\n                w7: u288 {\n                    limb0: 0xb01b410bdd4f7d17faad0b02,\n                    limb1: 0x92b6fa71257d0e35216b8d76,\n                    limb2: 0x234c010bcace1d9e,\n                },\n                w8: u288 {\n                    limb0: 0x2dba0f00a37d7388eb27942d,\n                    limb1: 0xb2148684b3580c6d45dfc7f8,\n                    limb2: 0x2286172b9d954df5,\n                },\n                w9: u288 {\n                    limb0: 0xe48a688bec46fdf3a2b3458d,\n                    limb1: 0xc0dd157ca14a9dddee9f0749,\n                    limb2: 0x29b03a6b1d1d3ec9,\n                },\n                w10: u288 {\n                    limb0: 0x7cf25068f4085c9a3552b26b,\n                    limb1: 0x51c51346bf9ee9478e82069a,\n                    limb2: 0x1c3b363ed4ad026a,\n                },\n                w11: u288 {\n                    limb0: 0x32055cc475ed2979ba936b5d,\n                    limb1: 0x3a76365f65bb11dfa20f6f03,\n                    limb2: 0x14e82b52083c1950,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x86528ff5d288de551ba82e20,\n                    limb1: 0x779518dbb60908f0c9f431,\n                    limb2: 0x17e7b0c198e5fbb4,\n                },\n                w1: u288 {\n                    limb0: 0xa6b91b5273ad23056d2b5571,\n                    limb1: 0x18283f4038662f9f2d32aa6d,\n                    limb2: 0x26250f9c485aaafe,\n                },\n                w2: u288 {\n                    limb0: 0xff4b38ab950cec36907872c,\n                    limb1: 0xe8220a80ab1a1ebfb4a6b5ad,\n                    limb2: 0x16a38cdcffaa084e,\n                },\n                w3: u288 {\n                    limb0: 0x30fe4c50e7cfb82354077ff9,\n                    limb1: 0xd825202a8b56831d4cb461f8,\n                    limb2: 0xacbc4404e784841,\n                },\n                w4: u288 {\n                    limb0: 0x2f290a090b14ab72c573f72d,\n                    limb1: 0x28fe7dd957a3fea3a48824a3,\n                    limb2: 0x8d4fde60889f05e,\n                },\n                w5: u288 {\n                    limb0: 0x78e4ad232628f93493799b05,\n                    limb1: 0x853fa0b232ed0e0fe4c72ee8,\n                    limb2: 0x1905420adaee585,\n                },\n                w6: u288 {\n                    limb0: 0xf5b5ceac316dae7d4b72f222,\n                    limb1: 0xda7b251194b88252808ac1a8,\n                    limb2: 0xc2ad9e69e7a3c18,\n                },\n                w7: u288 {\n                    limb0: 0x871823350e01e7c076568b23,\n                    limb1: 0xc2fcb7b9ab99f9ea2de64a6f,\n                    limb2: 0xcbca7c0f294b05,\n                },\n                w8: u288 {\n                    limb0: 0x58214cf485aa2980892ab270,\n                    limb1: 0x38ae8b1a6d563a6e90b57720,\n                    limb2: 0xadc0f206a82720c,\n                },\n                w9: u288 {\n                    limb0: 0xe47d85736adce266525b33a5,\n                    limb1: 0x75f41b36a691ecb3f1af75f,\n                    limb2: 0x2aaaad4a322f5ca2,\n                },\n                w10: u288 {\n                    limb0: 0x449e76f3e507d1e4f79b2b41,\n                    limb1: 0xa66a19bfc8476c6ef9730a71,\n                    limb2: 0x1c4a7da448d6a424,\n                },\n                w11: u288 {\n                    limb0: 0xaa745ba79deacfc0e958305c,\n                    limb1: 0x771b3d2cba2c850277042d9f,\n                    limb2: 0x2bbe2dd81ae206bf,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x89800871747a5772af0a4a5a,\n                    limb1: 0xc77aea4a034bd02c1a52fda4,\n                    limb2: 0x7696ff7e1b8f387,\n                },\n                w1: u288 {\n                    limb0: 0xdc9663d006102d510d74c328,\n                    limb1: 0xfa5faa547c8a1b45034a3b2,\n                    limb2: 0x260faf1bbeb9d987,\n                },\n                w2: u288 {\n                    limb0: 0x1bc1799be4bb7102992ecd13,\n                    limb1: 0x94e15f371c06ced1fde0dd3,\n                    limb2: 0x665a3a12509ed21,\n                },\n                w3: u288 {\n                    limb0: 0xdcd827948ef109459f3b29fb,\n                    limb1: 0xa669670e935b5b5f278378c2,\n                    limb2: 0x2d04dee2ca1ba30c,\n                },\n                w4: u288 {\n                    limb0: 0x63cc8b1759ef1e93c126782a,\n                    limb1: 0xe01767580df775dd4a40d5e5,\n                    limb2: 0x161187b33f992c8b,\n                },\n                w5: u288 {\n                    limb0: 0xfe53c1faf8ba08de077db23f,\n                    limb1: 0x6ac9f2dc628f14bdf063327f,\n                    limb2: 0xec69da938087b0,\n                },\n                w6: u288 {\n                    limb0: 0xead0bc1f5077694dad55c03f,\n                    limb1: 0xd6e68bf4d6cc956adcf2c643,\n                    limb2: 0x2dbf0ee9310afb09,\n                },\n                w7: u288 {\n                    limb0: 0x863a0a8f4e19da762f117929,\n                    limb1: 0xdcf7e18447603c210882cb78,\n                    limb2: 0xdf9e8f70db03ce1,\n                },\n                w8: u288 {\n                    limb0: 0xedf02766e9b8595f63abd18c,\n                    limb1: 0x784e4d5d60f519796f01cde8,\n                    limb2: 0x8671ab547845137,\n                },\n                w9: u288 {\n                    limb0: 0x5b506c6c1ece6c888adc5d1a,\n                    limb1: 0x4ac5204b72b2c1a7db79a319,\n                    limb2: 0x1f01964bf79ce370,\n                },\n                w10: u288 {\n                    limb0: 0x50e0979033627a4231737ef9,\n                    limb1: 0x9547f6bbfc8dee1f09baa0d9,\n                    limb2: 0xc73a07daa4654d3,\n                },\n                w11: u288 {\n                    limb0: 0x152d341606f78da11aad9ad2,\n                    limb1: 0xdda73da51b1d63f6e0ba9b3,\n                    limb2: 0xf3378aada8698c6,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xc8a1ffbcd36ed4cf96782047,\n                    limb1: 0xd674cc0260707439a67f952c,\n                    limb2: 0x2bf4eb8f91fe5fe,\n                },\n                w1: u288 {\n                    limb0: 0x87b77db32833cadca24eb37e,\n                    limb1: 0xf97e1ee9a29b1b3c4719de34,\n                    limb2: 0x10126e19d78ecaaa,\n                },\n                w2: u288 {\n                    limb0: 0xf98f2fabd09b0a5b9eafd15a,\n                    limb1: 0x551baec50edb12da0d5439db,\n                    limb2: 0x14143683bf9b20b6,\n                },\n                w3: u288 {\n                    limb0: 0x889655ca288b714f93f77428,\n                    limb1: 0x427cb28612597746a1372e94,\n                    limb2: 0x179e4eb714c7ff5c,\n                },\n                w4: u288 {\n                    limb0: 0xf013770528f37122163612df,\n                    limb1: 0x8508416610e03d5e483e931f,\n                    limb2: 0x1a3cffaf3e762f1f,\n                },\n                w5: u288 {\n                    limb0: 0x68d9bce40de25a34c00673f8,\n                    limb1: 0x9c697c919600f1ac723e8196,\n                    limb2: 0x19b88d8ac3b0e9a6,\n                },\n                w6: u288 {\n                    limb0: 0xb41eaaa12e51e41f4a63d546,\n                    limb1: 0x7c859bffe9718b4e4b70d5af,\n                    limb2: 0x759e326dd6510bb,\n                },\n                w7: u288 {\n                    limb0: 0xd160d856a92451c9341c729d,\n                    limb1: 0xdb907261b307fcd1e3a6d643,\n                    limb2: 0x21bbcee531c7850a,\n                },\n                w8: u288 {\n                    limb0: 0x9b5f4ee4a91ab24f1fc4a252,\n                    limb1: 0x6ef085e2d7b9323fccd45f17,\n                    limb2: 0x7ddd2baeb8903da,\n                },\n                w9: u288 {\n                    limb0: 0x356ca7b20da6a61328d2e6f8,\n                    limb1: 0xfe0a1835633574cddc743244,\n                    limb2: 0x260d783f746548,\n                },\n                w10: u288 {\n                    limb0: 0x54119d293bba5a7b8c911e9a,\n                    limb1: 0x4c8bec82c87653b80179260,\n                    limb2: 0xc719d4761fc3dc3,\n                },\n                w11: u288 {\n                    limb0: 0x27f9c5cf95c7c1614561860a,\n                    limb1: 0x2b6222d4d1199c76ca386b22,\n                    limb2: 0x16c8ee50f9adc5ac,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x6f3f7d0292c186ae873944f,\n                    limb1: 0x35c8a1bf39fa92a9f242fd69,\n                    limb2: 0x14b95f826ac74736,\n                },\n                w1: u288 {\n                    limb0: 0x1c8deec644cf2503777cd0e9,\n                    limb1: 0xe390b3744ef378a066993673,\n                    limb2: 0x1ce103c73af34607,\n                },\n                w2: u288 {\n                    limb0: 0xe51b2b5264cab98b0dce20e3,\n                    limb1: 0x12baa9b4a22f7f60f5a9e8a7,\n                    limb2: 0x199e6082a24e29fc,\n                },\n                w3: u288 {\n                    limb0: 0x8ccec4fd0f4c40b24c174906,\n                    limb1: 0xd0eb4c466b50542bdd1f7ccd,\n                    limb2: 0x130c4888c5671589,\n                },\n                w4: u288 {\n                    limb0: 0x841b256a04eb7ee8c763a86,\n                    limb1: 0x44dcb7ccff639f5cf00547f6,\n                    limb2: 0x43826f4900a3942,\n                },\n                w5: u288 {\n                    limb0: 0x9dd7608e2f8eaab2cf59cf27,\n                    limb1: 0x6c531affa90ee4c3e6b1315b,\n                    limb2: 0x14c5bbbc9b662751,\n                },\n                w6: u288 {\n                    limb0: 0x40ead5c383741f5e94a372dd,\n                    limb1: 0x63456b35874faf8614778b7e,\n                    limb2: 0x160428014e84270e,\n                },\n                w7: u288 {\n                    limb0: 0x77ca9da77c9c26fa4eddeffb,\n                    limb1: 0xd64c0c2e0baa8971ce138592,\n                    limb2: 0x2532dd267a25b4f,\n                },\n                w8: u288 {\n                    limb0: 0x8f0b492fe9cbb6713b3ae0b9,\n                    limb1: 0x6cd8f706cbc20ff6c2978d34,\n                    limb2: 0x25b8b619c12b4d53,\n                },\n                w9: u288 {\n                    limb0: 0xb9f16df613dc83610524ae59,\n                    limb1: 0x999af8cf94fe6e9155b24ee,\n                    limb2: 0x2d763001f6ee910a,\n                },\n                w10: u288 {\n                    limb0: 0x72e6293fa1874d4456f6a7ab,\n                    limb1: 0xbba9e551a891ac14dc529d7,\n                    limb2: 0x2fe56f474f803a1a,\n                },\n                w11: u288 {\n                    limb0: 0xddef305ed66e797eb44cc927,\n                    limb1: 0x46cf45a1ffa3be343166c96a,\n                    limb2: 0x2c91340e7201c8e7,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xacd367bfb3a86503c4696228,\n                    limb1: 0xe5bebb9f891e0fcf9bb400df,\n                    limb2: 0x1f053bcf8dd0c40e,\n                },\n                w1: u288 {\n                    limb0: 0xaa5f25aba69edf7eb3fbac7f,\n                    limb1: 0xa57c44bfb7a813d9565c6f4e,\n                    limb2: 0x1cbd2cad199b90af,\n                },\n                w2: u288 {\n                    limb0: 0x1e3561ce4486f49c51c4841,\n                    limb1: 0x5d707d777cc267134dcb4a3e,\n                    limb2: 0x2d4f1b6b1704fcf8,\n                },\n                w3: u288 {\n                    limb0: 0x8133df3d973205e2a6667b05,\n                    limb1: 0xd71333cad7c23d6436f895b1,\n                    limb2: 0xb96c7c4d9019afe,\n                },\n                w4: u288 {\n                    limb0: 0x4c82c43fae3e6a4e9ac79773,\n                    limb1: 0xd632da8c8fade4bdd6d055b5,\n                    limb2: 0x1493c61b79713a9c,\n                },\n                w5: u288 {\n                    limb0: 0x14f7514b5a6375a0ba02dfdd,\n                    limb1: 0xdb0492be6d819a64e5c8e869,\n                    limb2: 0x29ce11799d8ce7f6,\n                },\n                w6: u288 {\n                    limb0: 0x88e5da8addd545f6e1828516,\n                    limb1: 0x59ab28d6dd8eb6ea501d3cb9,\n                    limb2: 0xe761374e20c2910,\n                },\n                w7: u288 {\n                    limb0: 0x494bfaefdde4921257b3c8ff,\n                    limb1: 0xc560828dcd36efd417e936e7,\n                    limb2: 0x19065a582b0bfe84,\n                },\n                w8: u288 {\n                    limb0: 0x54aed757dacfad3714775cd3,\n                    limb1: 0xc84bdb236c7d909b5a8a3cfc,\n                    limb2: 0x1568bd40a8a5b14d,\n                },\n                w9: u288 {\n                    limb0: 0x5b800e067bb87a8edd6ba6f4,\n                    limb1: 0x72fafdbd2943d900f8330a8a,\n                    limb2: 0x203214386552455e,\n                },\n                w10: u288 {\n                    limb0: 0x79c850293dd1ed17289f8d7a,\n                    limb1: 0x23514882c698d62934f0b85c,\n                    limb2: 0x2c8da86af166ec2,\n                },\n                w11: u288 {\n                    limb0: 0x3149423b81d0601bf6983f66,\n                    limb1: 0xfdab0d5a898edf32625fdbe6,\n                    limb2: 0x81a2800e45aa663,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x8b51da2d8c55494918df21dd,\n                    limb1: 0xe08f0cc653fff5f77d129809,\n                    limb2: 0xac43cdef76e8e2b,\n                },\n                w1: u288 {\n                    limb0: 0xe88d81f8cdf9db6cc3d7a8e3,\n                    limb1: 0xbbb798eb9215c4e9215009f5,\n                    limb2: 0x2b6e67c7cd78b23c,\n                },\n                w2: u288 {\n                    limb0: 0x95fbbffc4a22fefe6ed6f466,\n                    limb1: 0x44b328ca91837bc5f2813bea,\n                    limb2: 0x15a0aa861322fe8e,\n                },\n                w3: u288 {\n                    limb0: 0x230d31e951092a571dd5146,\n                    limb1: 0x1a87d85d215cd450d2691c01,\n                    limb2: 0x273b3d4ad1da0c4f,\n                },\n                w4: u288 {\n                    limb0: 0xe13981b2395738db11f814d4,\n                    limb1: 0x96f3b24aa8b0e2286829b356,\n                    limb2: 0x17ca1b6c416d0b08,\n                },\n                w5: u288 {\n                    limb0: 0x8a2711890225f3347def3ac,\n                    limb1: 0xaff7929a071b6d219ecc0d90,\n                    limb2: 0x13ab0ad11f39ed5c,\n                },\n                w6: u288 {\n                    limb0: 0x131141a0e2587df1ed43c57a,\n                    limb1: 0xee8de29045aa8df56e7bf4d3,\n                    limb2: 0x53d8a8045aced2a,\n                },\n                w7: u288 {\n                    limb0: 0x751db179fd8b0dd97ab90b62,\n                    limb1: 0xb24fa4509ea9a05ea3a0820e,\n                    limb2: 0x1b94eafd5f42b129,\n                },\n                w8: u288 {\n                    limb0: 0x54d9a3cce32c8d336a38434,\n                    limb1: 0x8ef332aae2744817c97aa9fc,\n                    limb2: 0x5acd19414989ac9,\n                },\n                w9: u288 {\n                    limb0: 0xdcd805c3441bf8da9f078037,\n                    limb1: 0x9d7cef94b46af01f54df6022,\n                    limb2: 0x13e81873c53f7de,\n                },\n                w10: u288 {\n                    limb0: 0xd188a8da6b09f460a30ea7d4,\n                    limb1: 0x5e7d133426f98ced17f967ed,\n                    limb2: 0x2f9622f5e2961afd,\n                },\n                w11: u288 {\n                    limb0: 0x835b65476aa69e0fee8add66,\n                    limb1: 0xf7eb0db4196481743f7c8536,\n                    limb2: 0x2420247c2eae05,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x1b9b3275438def2b14d3d6ec,\n                    limb1: 0x215e7ca4b8e610b90aea1fe2,\n                    limb2: 0xc57e1f84bab1fde,\n                },\n                w1: u288 {\n                    limb0: 0xa3aa8bb56e04c330c70af082,\n                    limb1: 0x762683dea3a91a1813ebbe47,\n                    limb2: 0x1db06cf6c01944ef,\n                },\n                w2: u288 {\n                    limb0: 0x6d3534ad1666ff07aef8ee5e,\n                    limb1: 0x95034543d303718bdddd0876,\n                    limb2: 0x4ffb855d2c5477a,\n                },\n                w3: u288 {\n                    limb0: 0x9de5ea1d4cd7b93d85eef3a3,\n                    limb1: 0x7a3b2e8a90f40fbe7afa11b,\n                    limb2: 0x286259c2593cd27f,\n                },\n                w4: u288 {\n                    limb0: 0xdb82f137af29e3458455efc4,\n                    limb1: 0x8b665e9e0eb3b9c8f027e3c9,\n                    limb2: 0x20fefbc49fb31a8e,\n                },\n                w5: u288 {\n                    limb0: 0x6efd0bb670c6350880f786b3,\n                    limb1: 0x205615a0185a1b00916d37b7,\n                    limb2: 0x6375097bd6ed176,\n                },\n                w6: u288 {\n                    limb0: 0x5e049cdbb227617f099b81d,\n                    limb1: 0x7c89c3a84805e47debd2d9b0,\n                    limb2: 0x90ad0e891a3872a,\n                },\n                w7: u288 {\n                    limb0: 0x8deade236dc1f483f78b820,\n                    limb1: 0xa22016ef71d65892b510b65a,\n                    limb2: 0x15b035673845e2ba,\n                },\n                w8: u288 {\n                    limb0: 0x28cce0800fcaeca24e4a1f11,\n                    limb1: 0xc873a609eb7443c53cc2146e,\n                    limb2: 0xed7bc75055a0bee,\n                },\n                w9: u288 {\n                    limb0: 0xfdb3d8249042253ea50045c3,\n                    limb1: 0x1873c79692308a13011bf359,\n                    limb2: 0x1a1644f1a3d5b115,\n                },\n                w10: u288 {\n                    limb0: 0x5c988b98ae035a4304a5f88d,\n                    limb1: 0x8a2936146d5703d9604e064c,\n                    limb2: 0x29b6437df8007dea,\n                },\n                w11: u288 {\n                    limb0: 0x86051e2a2aaadd941e2a9241,\n                    limb1: 0xbf728a94603ee43956adbfb9,\n                    limb2: 0x2d4db3ebddcfd258,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x92acc012d562dfdfb6481b25,\n                    limb1: 0x3e64355b8e9e3082f99d33c5,\n                    limb2: 0x290b6aea5955f671,\n                },\n                w1: u288 {\n                    limb0: 0xea2dac1a1640a6ac9b9ad377,\n                    limb1: 0xe1775d01c8f21468867a89ff,\n                    limb2: 0x1cf6cdd23f7ccb8b,\n                },\n                w2: u288 {\n                    limb0: 0xd51e98bf9719380b097ea1fb,\n                    limb1: 0xd74149401b7667643b22e27f,\n                    limb2: 0x129b599f9eed72c9,\n                },\n                w3: u288 {\n                    limb0: 0x66f868e872b587c8e5a18431,\n                    limb1: 0x5ce11b08a6e0fe0e0f9b96f1,\n                    limb2: 0xcecf76d78ff36b2,\n                },\n                w4: u288 {\n                    limb0: 0x5ccd6edc479aeaf571c0890d,\n                    limb1: 0x91881d482210406422d39529,\n                    limb2: 0x2b1eefab1035d22a,\n                },\n                w5: u288 {\n                    limb0: 0x10b346eae6854f264c866223,\n                    limb1: 0xece7a4751aad88e0d43ff850,\n                    limb2: 0x26ac9d94ac41a06c,\n                },\n                w6: u288 {\n                    limb0: 0xdca528ca6016058cf3e5fae2,\n                    limb1: 0x78690b84e775a92f8bc8a4ed,\n                    limb2: 0x212be7d16a5f6c89,\n                },\n                w7: u288 {\n                    limb0: 0xf3e83e445c62eeeb7ec84ce0,\n                    limb1: 0xdd116e6e8364db0a64b50304,\n                    limb2: 0x279d1022cd3e3e1f,\n                },\n                w8: u288 {\n                    limb0: 0x65f73450ca7a1766028a9d92,\n                    limb1: 0xf27270b3123129865bf05ad5,\n                    limb2: 0x26bc3d97ad8925f4,\n                },\n                w9: u288 {\n                    limb0: 0x944c276de7f91d41bcc4127e,\n                    limb1: 0xa89166f745e7e0640866c8db,\n                    limb2: 0xe7f920bd863ceb4,\n                },\n                w10: u288 {\n                    limb0: 0xa31d4c6a3bdcbe04860624d4,\n                    limb1: 0x7c504b80689c987f9708269e,\n                    limb2: 0x27550021cf25c30d,\n                },\n                w11: u288 {\n                    limb0: 0x91cb5c5218981603a881667f,\n                    limb1: 0xa0905ee77f1c0e9a5f9de4,\n                    limb2: 0xcc2ecbee6addff5,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x27ea098c66c31201eefb8430,\n                    limb1: 0x289402da5fe4bd14d8ef6edf,\n                    limb2: 0x1259961e054d6cd7,\n                },\n                w1: u288 {\n                    limb0: 0xdf5835eb2fd6b73c5dba911a,\n                    limb1: 0xca03ca62684adaa9524cea2,\n                    limb2: 0x2eb6accd5526bb8c,\n                },\n                w2: u288 {\n                    limb0: 0x30900fcfe01bded79b3d2477,\n                    limb1: 0xb279579672976833505fa71d,\n                    limb2: 0x162ac340cc3a9243,\n                },\n                w3: u288 {\n                    limb0: 0xea6f09f94f1137fe93d6e281,\n                    limb1: 0xabf9e0b69162edef149ff1f3,\n                    limb2: 0xff91140a0ef8671,\n                },\n                w4: u288 {\n                    limb0: 0x202e27f741f1e2b81753060e,\n                    limb1: 0x26a9a0ce89b8f06fa7d6326,\n                    limb2: 0x1c707bf011a33ace,\n                },\n                w5: u288 {\n                    limb0: 0x95578a2c8e1895ac184cabfb,\n                    limb1: 0xbb75389aaa763c673982ea8,\n                    limb2: 0x607a8649a7b2555,\n                },\n                w6: u288 {\n                    limb0: 0x71d90544c20a5aed5f41931,\n                    limb1: 0x16847c43a0cdfc05ebe58815,\n                    limb2: 0x4721c3f212088b0,\n                },\n                w7: u288 {\n                    limb0: 0xc360aaad2a45074edfb74e14,\n                    limb1: 0x77f564b43fa632bde8eec9d,\n                    limb2: 0x250afa706df6d5e2,\n                },\n                w8: u288 {\n                    limb0: 0x8bde53cc45322245c61c9a8b,\n                    limb1: 0xbb082994c8f59570001a3550,\n                    limb2: 0x27b5ec7a33a77874,\n                },\n                w9: u288 {\n                    limb0: 0xd33f34a1a253f871c0f128e9,\n                    limb1: 0x88e401602a88af3bb22d4b4f,\n                    limb2: 0x8194f6251e043d8,\n                },\n                w10: u288 {\n                    limb0: 0x37787931890dad2749f4172f,\n                    limb1: 0xb781b6da2911d39376770d8a,\n                    limb2: 0xf86cba82a2a63ca,\n                },\n                w11: u288 {\n                    limb0: 0xb283d3c5e1df307fbded08de,\n                    limb1: 0x845c1e02379ee7fb83ade74d,\n                    limb2: 0x113edfefc35c7b27,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x800d14c753c40eb876da5bb8,\n                    limb1: 0xdd394093deedc4a58300a401,\n                    limb2: 0x20bbc62916a1c1c5,\n                },\n                w1: u288 {\n                    limb0: 0x1ff3c025cb5fe163ac6341a1,\n                    limb1: 0x3492edb1001d97c57690e3ea,\n                    limb2: 0x2af5edbf90641874,\n                },\n                w2: u288 {\n                    limb0: 0xa01ab0362ad9941df67212b5,\n                    limb1: 0x1273a4cfacad5b920f984247,\n                    limb2: 0x2c8dfd25ae12d28b,\n                },\n                w3: u288 {\n                    limb0: 0xc72f15c7299855613325128d,\n                    limb1: 0xa7e25f6a3deaf4f7be35e120,\n                    limb2: 0x2607d100cbda5ad,\n                },\n                w4: u288 {\n                    limb0: 0x2e236358d7c29fcbc45476ce,\n                    limb1: 0x696b09274ac45b177403228f,\n                    limb2: 0x22e618af62719cf3,\n                },\n                w5: u288 {\n                    limb0: 0x81b4d1b3b2d2686cc3a33fac,\n                    limb1: 0xf5c5ffadb6ae0769530803d7,\n                    limb2: 0xe18f6caa2f9150,\n                },\n                w6: u288 {\n                    limb0: 0x820aefb2f234355503fd73f6,\n                    limb1: 0xee49d901c9c66c15af10aafc,\n                    limb2: 0x2cf38629461bbcbd,\n                },\n                w7: u288 {\n                    limb0: 0x702e95e8e205ab0d73f4d645,\n                    limb1: 0x6cc8a9e2e5bd482c2d970d01,\n                    limb2: 0x26c6783eedf68370,\n                },\n                w8: u288 {\n                    limb0: 0xb083a4ca598ff879ef7aa527,\n                    limb1: 0x5310d5c6e27bf7bfa6681a70,\n                    limb2: 0x29480250c596232a,\n                },\n                w9: u288 {\n                    limb0: 0x6cfaa3e7f9ac2fd8645db473,\n                    limb1: 0xb2739d025d0bf248c2d4e1a2,\n                    limb2: 0x912e2dc7402cd4f,\n                },\n                w10: u288 {\n                    limb0: 0x2bd49d41f5a3e28554df2631,\n                    limb1: 0x8065584c5473ee5f56b0993e,\n                    limb2: 0xfb04b567cc1113a,\n                },\n                w11: u288 {\n                    limb0: 0xf5cd0cfcb2e6ff69bf4754a5,\n                    limb1: 0xdb8d57f575f0a9e1419111fe,\n                    limb2: 0x1d1cea3ff669ce4e,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x61d29bcc1a3f6167a79d8c38,\n                    limb1: 0x532714800454848152e1c0e0,\n                    limb2: 0x132484d6b22372ae,\n                },\n                w1: u288 {\n                    limb0: 0x108ce4183553945caff854,\n                    limb1: 0xbd70dd52d149435432ea127f,\n                    limb2: 0x189cdc05d04909b0,\n                },\n                w2: u288 {\n                    limb0: 0x5ad21b0a5646ad085f528109,\n                    limb1: 0x1a9fc07a354670945f565e9e,\n                    limb2: 0x1e93c1c3e4b89488,\n                },\n                w3: u288 {\n                    limb0: 0xa2b07e2a8ba8644821d8d454,\n                    limb1: 0xb04d7421f3ac6397e80a92a1,\n                    limb2: 0xe2e5a47221b2430,\n                },\n                w4: u288 {\n                    limb0: 0x60e96edf654796d2d1e7ad12,\n                    limb1: 0xc053caa606b820b7bc203105,\n                    limb2: 0x23de5802449e2d0d,\n                },\n                w5: u288 {\n                    limb0: 0x33531996505d714b68e97cdc,\n                    limb1: 0xb2f7f6dacae5650c70369c5,\n                    limb2: 0x2b9c8a1bd70d65c8,\n                },\n                w6: u288 {\n                    limb0: 0x29c656ded9d8ede8b14e133a,\n                    limb1: 0x3251a0119e1def6470a73ee1,\n                    limb2: 0x108ccfd72642f085,\n                },\n                w7: u288 {\n                    limb0: 0x59d63f9e2a5252d394fb3b13,\n                    limb1: 0x6af3a4182c974a4a4cb8cb43,\n                    limb2: 0x1a0d6334a517c128,\n                },\n                w8: u288 {\n                    limb0: 0x1f9c66a90a3636f14efcc3bb,\n                    limb1: 0xbcf2e4dd6a6a18e0f4032755,\n                    limb2: 0xf77ce25573b3637,\n                },\n                w9: u288 {\n                    limb0: 0x8629d396f0cbb19e5e5ae3ef,\n                    limb1: 0x8999b95d2cef1a967c52155e,\n                    limb2: 0x1a651bad046779e8,\n                },\n                w10: u288 {\n                    limb0: 0x4136e2e567c71c7327bb5498,\n                    limb1: 0xfc077703802a973be3e1b595,\n                    limb2: 0x164eecf7e317e50f,\n                },\n                w11: u288 {\n                    limb0: 0xa675d361f8324c4030afe60,\n                    limb1: 0xa5a92a85a22d4b737612f493,\n                    limb2: 0x1904c09382a0596a,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x7430544030d0c5607d8574fa,\n                    limb1: 0x948e3aa4cdc35494aa3d0c22,\n                    limb2: 0x149ca9118143d93b,\n                },\n                w1: u288 {\n                    limb0: 0xe2ca69dc59b49107e665c357,\n                    limb1: 0xdff3f92ef170aba8ecbfed91,\n                    limb2: 0xc0020a7d7b54ee9,\n                },\n                w2: u288 {\n                    limb0: 0x70927630b958392565150156,\n                    limb1: 0x50bccd63e76535da30f22410,\n                    limb2: 0x85f6272d3683e99,\n                },\n                w3: u288 {\n                    limb0: 0x18b10fe562294e1493d32869,\n                    limb1: 0x7e3a83f64e5b06dad1f392f0,\n                    limb2: 0x7e60317cbbc746e,\n                },\n                w4: u288 {\n                    limb0: 0x77d3f868cb018f42a51a098f,\n                    limb1: 0x3b28392831d5cdaf18471e03,\n                    limb2: 0x11b5be48a78a0132,\n                },\n                w5: u288 {\n                    limb0: 0x8d1ce97123cff01dbf56879c,\n                    limb1: 0x2f02af85223c497ff5b2e11a,\n                    limb2: 0x1d3f1a99dfbd1384,\n                },\n                w6: u288 {\n                    limb0: 0x3fd75ee1c489f88b2fc32243,\n                    limb1: 0x737aae095a654f624b6f63f9,\n                    limb2: 0x2f4b2b139fdc4fa9,\n                },\n                w7: u288 {\n                    limb0: 0xa450865b8dc8ad706d913ad1,\n                    limb1: 0x6568246a5878ce9e6911b5d5,\n                    limb2: 0xd1505e942ab53fc,\n                },\n                w8: u288 {\n                    limb0: 0x803cfc36831117d202a58c58,\n                    limb1: 0xc6daa54242c30c5d44005261,\n                    limb2: 0x27e112ce5019213,\n                },\n                w9: u288 {\n                    limb0: 0x1381248822859f125ce62cd4,\n                    limb1: 0xfc617ab7f0e7bc85a514d322,\n                    limb2: 0x2a4e7ebc04f2a885,\n                },\n                w10: u288 {\n                    limb0: 0x70e8bced7cd129b4096b8665,\n                    limb1: 0x8f4670dd657fde1c37ca0a3d,\n                    limb2: 0x9b49f8885959fcd,\n                },\n                w11: u288 {\n                    limb0: 0x20534cc97052c24c0833ee05,\n                    limb1: 0xe9fe07db116fc63f2e2a4c5c,\n                    limb2: 0x1e017a6b3eebf717,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x6e6bdf80500cb854f5dd0bff,\n                    limb1: 0xbf9a626b9cbccc283c57700b,\n                    limb2: 0x20f5c7f5f71cb22d,\n                },\n                w1: u288 {\n                    limb0: 0xdb32a31be60950339fb1122a,\n                    limb1: 0xf752607f2d770dbc152220c2,\n                    limb2: 0x119f27829f3f396b,\n                },\n                w2: u288 {\n                    limb0: 0x9d48d334e95302c9d457e824,\n                    limb1: 0x71e66184e0c417cc823bcb6d,\n                    limb2: 0x230fd13d768e195b,\n                },\n                w3: u288 {\n                    limb0: 0x2cce2b592737976adcdeb399,\n                    limb1: 0x6f7e7895cc9ac490802fc64c,\n                    limb2: 0x2e34a9c5e37e2c13,\n                },\n                w4: u288 {\n                    limb0: 0x1b78faac53b2579e5036465a,\n                    limb1: 0x3dd4cb80488ff8f5cac70df4,\n                    limb2: 0x29834f6805b456e1,\n                },\n                w5: u288 {\n                    limb0: 0xbeb6734949c1988a2bab2b43,\n                    limb1: 0x2551b72dc3bd9631884c52eb,\n                    limb2: 0x2a7502d7a3ab80e4,\n                },\n                w6: u288 {\n                    limb0: 0xc862806b3e7a8b9b9c55054,\n                    limb1: 0x874d4d7db6cd2dc1c25218dc,\n                    limb2: 0x102e882c30c3623e,\n                },\n                w7: u288 {\n                    limb0: 0xf303abb1515fa0b31a804e39,\n                    limb1: 0x240918f6ba89758a1c7d1cfa,\n                    limb2: 0x7f3dfb58aa1125b,\n                },\n                w8: u288 {\n                    limb0: 0x3f1cfdf33cad91734b211407,\n                    limb1: 0x17c4a8522daa84de4bad7323,\n                    limb2: 0x19c76e0eb6c3b0c3,\n                },\n                w9: u288 {\n                    limb0: 0x3a57bba7ae1b75fc6df7c6c0,\n                    limb1: 0xac20c3a4dd640432204a0563,\n                    limb2: 0x23288051e80e08eb,\n                },\n                w10: u288 {\n                    limb0: 0x5e00c38b0e2a7ce9098d68b0,\n                    limb1: 0x66eae940dafebe8c421747aa,\n                    limb2: 0x9136eb12adac86f,\n                },\n                w11: u288 {\n                    limb0: 0xf157c33f547ac7f32e5da8f0,\n                    limb1: 0xf76a7a02c64558b3145a2909,\n                    limb2: 0x260334b73e26b56,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xd4841712eb8b92acbedd7923,\n                    limb1: 0xdcc6cee17886abdb1007239,\n                    limb2: 0x150b39f44b2070e0,\n                },\n                w1: u288 {\n                    limb0: 0x5693a871b5fcffa2aa8b4aaf,\n                    limb1: 0xf260475042f99b758ffee0f5,\n                    limb2: 0x10a5018f8eb12723,\n                },\n                w2: u288 {\n                    limb0: 0x43308af7aa07017ad6f06355,\n                    limb1: 0xc9bed74aa5c3e515055e74bb,\n                    limb2: 0x281c1906fc2d8afe,\n                },\n                w3: u288 {\n                    limb0: 0xaa4bf5eb2f5748f9b858b3ac,\n                    limb1: 0x903bb70501a35aac3f678acf,\n                    limb2: 0x1eb2165addc33abe,\n                },\n                w4: u288 {\n                    limb0: 0xfc14dce79b687ac1377a374f,\n                    limb1: 0x18252db25bc6c91e70b57c56,\n                    limb2: 0x250aa6edf0514ce,\n                },\n                w5: u288 {\n                    limb0: 0x229282724410b8e16b0f2fa7,\n                    limb1: 0x43c0ab0e53479a84a0f564b1,\n                    limb2: 0x277ac6336a1a9b7d,\n                },\n                w6: u288 {\n                    limb0: 0xdeed55ef2faf345e53af52ec,\n                    limb1: 0x3bce9ebf3a661964cfe37503,\n                    limb2: 0x97f9056a20ad491,\n                },\n                w7: u288 {\n                    limb0: 0x5f69ceece471cc3ebd6aa0f8,\n                    limb1: 0x32189eba17079bfd1de6d1a9,\n                    limb2: 0x12a79a708bf4a5f3,\n                },\n                w8: u288 {\n                    limb0: 0xccbdec684569a23bb8881bd3,\n                    limb1: 0xd74a36913d0eb6e13ae1583b,\n                    limb2: 0xced65adac6fe081,\n                },\n                w9: u288 {\n                    limb0: 0x37e051b03ff0ee8df34ca1d1,\n                    limb1: 0xc09812bdf872a01279ba5ec7,\n                    limb2: 0xc1c7be819a2edf5,\n                },\n                w10: u288 {\n                    limb0: 0xdfb1cb3fd176963ae1e316f5,\n                    limb1: 0xdfef2969e0f31e316ae3b98,\n                    limb2: 0x16ce939a24e83d96,\n                },\n                w11: u288 {\n                    limb0: 0x4def6d08fe4f8a3b36f8e4e4,\n                    limb1: 0x25c0237a5c43846680868d,\n                    limb2: 0x28301a94744a9062,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x51d791055394af3437707fca,\n                    limb1: 0x23d9d4f513172857b91ac570,\n                    limb2: 0x12d712a33c1350ef,\n                },\n                w1: u288 {\n                    limb0: 0x6ebaf7ae16d5257aa23557c3,\n                    limb1: 0x7e85a68783668f379c36a3df,\n                    limb2: 0x1b780a9a09031ddc,\n                },\n                w2: u288 {\n                    limb0: 0xfec2358627a9becd5a63e12e,\n                    limb1: 0xe9bef5e0c521222e0b7da3b1,\n                    limb2: 0x1296f365f4cf82fb,\n                },\n                w3: u288 {\n                    limb0: 0x6cc4cf9d0dad41495180590b,\n                    limb1: 0x9f70ac798e90cf1ea4b1c1c8,\n                    limb2: 0x87c41a6c59dfc2d,\n                },\n                w4: u288 {\n                    limb0: 0xe8febbc4d69a96df764a0a62,\n                    limb1: 0x1fb35aecac9dae22ec85780a,\n                    limb2: 0xdf36c808d1b34d,\n                },\n                w5: u288 {\n                    limb0: 0x2e55c0606268af7f04a33d7c,\n                    limb1: 0xa3ea362cb853b36d21362864,\n                    limb2: 0x2440dcee8b02c1d8,\n                },\n                w6: u288 {\n                    limb0: 0xef7561c98b669e09fef5573b,\n                    limb1: 0x9faf5b92dae5c40288b29667,\n                    limb2: 0x211a161b16c7393a,\n                },\n                w7: u288 {\n                    limb0: 0x24d4a044898ad07d62fa1828,\n                    limb1: 0xf0baabec5df39b859a9a23b6,\n                    limb2: 0x26521f9732987047,\n                },\n                w8: u288 {\n                    limb0: 0x7229c3d55422cc60a2776f2c,\n                    limb1: 0x22befd3a50a7a7e04032a122,\n                    limb2: 0x105baaf5e920b8c2,\n                },\n                w9: u288 {\n                    limb0: 0x4390439b3b081876e13423a3,\n                    limb1: 0xb568d6eb2f6f72b6c3159bcc,\n                    limb2: 0x169d5ab5a0f60736,\n                },\n                w10: u288 {\n                    limb0: 0x2f0b3c9576e4fd67031ca87d,\n                    limb1: 0x22e0bc83c4170a8aa384e3dd,\n                    limb2: 0x2872abcaeb098125,\n                },\n                w11: u288 {\n                    limb0: 0xe52e2fb0028f73e921534e74,\n                    limb1: 0xf6cfd97c1d181d7750441ac9,\n                    limb2: 0x1c56ef8977682024,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xae28d327617f61548f759aba,\n                    limb1: 0x1401aa78c9ec2231ff346415,\n                    limb2: 0x113fb038206ddf58,\n                },\n                w1: u288 {\n                    limb0: 0x42996e09532c7a0cefd8a71e,\n                    limb1: 0x69c61eb722a1e7209c4cd611,\n                    limb2: 0x13a6cbdff96772d,\n                },\n                w2: u288 {\n                    limb0: 0xbf63f1fcc51ddcc897f42363,\n                    limb1: 0x707fca9fe10a26f918b0ca37,\n                    limb2: 0x669edeff7d809fe,\n                },\n                w3: u288 {\n                    limb0: 0x8bb34e49a388ddc9b04b2180,\n                    limb1: 0x38dcd13822ba4ee2a5cdd793,\n                    limb2: 0x1d5dac515eaa51b8,\n                },\n                w4: u288 {\n                    limb0: 0xa0125e6adb1681a41dbbf2d6,\n                    limb1: 0x3e2cccd5ac961e1a78aab8ce,\n                    limb2: 0x13d6bd7db8c4b48e,\n                },\n                w5: u288 {\n                    limb0: 0x737b7f10bf6822280731a819,\n                    limb1: 0x69bd4676e8f1e6a89c10d4e7,\n                    limb2: 0x19ba69c1ce404728,\n                },\n                w6: u288 {\n                    limb0: 0x4309f0c42a45a1cd80562659,\n                    limb1: 0xdda759df4dc118a6bb9c4ff4,\n                    limb2: 0x1fef98dddc22b559,\n                },\n                w7: u288 {\n                    limb0: 0x16e4b900d586497d3c45f6df,\n                    limb1: 0x49f7f05337ad0de92e3b353d,\n                    limb2: 0x2a317f6bb6771fc4,\n                },\n                w8: u288 {\n                    limb0: 0xdb1d34070b21596c13268b11,\n                    limb1: 0xaa74ad91700236cbbbdc34ff,\n                    limb2: 0x1f3d2738883aba1b,\n                },\n                w9: u288 {\n                    limb0: 0x5dd4d2f3b2fa8a97fa8ea9f9,\n                    limb1: 0x2c5dc834a8f95e902710f4df,\n                    limb2: 0x138f968bf21498ba,\n                },\n                w10: u288 {\n                    limb0: 0xabdbabb3b67443c8a7106c79,\n                    limb1: 0xb0ae2b75703e953d30907447,\n                    limb2: 0x190bab990471c462,\n                },\n                w11: u288 {\n                    limb0: 0xcf34ae390b76e945d679a1ba,\n                    limb1: 0x4f4ea018b12e85eefbae6240,\n                    limb2: 0x11b6508aaf7e8efa,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x1d3d00823688d41dfa0aa2b3,\n                    limb1: 0x9b15db2c2993d757e61bb1c0,\n                    limb2: 0x2ae11207cfbeafa3,\n                },\n                w1: u288 {\n                    limb0: 0x98d01e898aa5900d5e36c127,\n                    limb1: 0x5758a38ee763892c547b2b91,\n                    limb2: 0x10637e0aedce350d,\n                },\n                w2: u288 {\n                    limb0: 0x7e29a433af8412d07647248,\n                    limb1: 0xa64f271a5fcb6111d0d23fe5,\n                    limb2: 0x19b1b1819c206eb3,\n                },\n                w3: u288 {\n                    limb0: 0x76c3391612430b219f11873,\n                    limb1: 0x10b12d6e15c51b81da686386,\n                    limb2: 0x2e39ee00a0dd8a97,\n                },\n                w4: u288 {\n                    limb0: 0x1a95ae61cf5a0ed10ad477b2,\n                    limb1: 0x288278e4057eea5d43aa3a66,\n                    limb2: 0xb2bb0125965187e,\n                },\n                w5: u288 {\n                    limb0: 0xdcec59caea988d5ed8354e57,\n                    limb1: 0xd9de2dbed0736af7fb5adde9,\n                    limb2: 0x139627bfb4249292,\n                },\n                w6: u288 {\n                    limb0: 0xb1a085a9c20d52aff5c6f0be,\n                    limb1: 0x9a17337ed73c52ccead8864e,\n                    limb2: 0xdcfc8e7b31d6b15,\n                },\n                w7: u288 {\n                    limb0: 0x1ded66fd8aec0a04c911f1a3,\n                    limb1: 0x2814204faef35f41e3f1cc8b,\n                    limb2: 0x1999b17d88973015,\n                },\n                w8: u288 {\n                    limb0: 0xa9969aafed2e81fe21fceccc,\n                    limb1: 0xde819f6c6186b981c324bd60,\n                    limb2: 0x2ea9d87f146b9984,\n                },\n                w9: u288 {\n                    limb0: 0xa576384a80333dedf9e88310,\n                    limb1: 0x364ad41f1043ed9c6286cf5d,\n                    limb2: 0x185381ccca5628e0,\n                },\n                w10: u288 {\n                    limb0: 0xec6a507f1e942bf671d63ab3,\n                    limb1: 0xf9ec826df2822a61bc36725,\n                    limb2: 0x14ce04de4bbb61da,\n                },\n                w11: u288 {\n                    limb0: 0x168a2628e665ca7591760e15,\n                    limb1: 0x115842818d09028abf06552f,\n                    limb2: 0x1c7b912d4cec67a3,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xf73192b2fe5dc1293422b385,\n                    limb1: 0x7c0b272084084d471108c781,\n                    limb2: 0x3020dd2bb1971af4,\n                },\n                w1: u288 {\n                    limb0: 0x30a64137b7e95ebfcdab4d96,\n                    limb1: 0x229f57d761eeb3876b51cd56,\n                    limb2: 0x19a596949310e6ad,\n                },\n                w2: u288 {\n                    limb0: 0x6a8e194198a83adeb7bb2d57,\n                    limb1: 0xdd72e054a7572ae9694e527b,\n                    limb2: 0x1e166b19fd03f8da,\n                },\n                w3: u288 {\n                    limb0: 0x89955ac52e292b8ef51fee5b,\n                    limb1: 0xb4a02290d35f652e34e4160c,\n                    limb2: 0x25f5a19aec7507fc,\n                },\n                w4: u288 {\n                    limb0: 0xfd26f66a7e8b7c9b65ccf82f,\n                    limb1: 0x885924961e16baba1430bbff,\n                    limb2: 0x340f95fa56b75d0,\n                },\n                w5: u288 {\n                    limb0: 0xef273d28469f2f491bbcd40a,\n                    limb1: 0xe90efb0fe5cac233218f725e,\n                    limb2: 0x2270370eed956191,\n                },\n                w6: u288 {\n                    limb0: 0xca9dcd949b9485cbb6caf5,\n                    limb1: 0xf042772fe0b0a8d9ca424d0d,\n                    limb2: 0x6d8cd4db60bffeb,\n                },\n                w7: u288 {\n                    limb0: 0x62143619306fd7c0b3b08cc9,\n                    limb1: 0xe18c5df14640cc99bb874bd4,\n                    limb2: 0x1e30a97ba92bbad6,\n                },\n                w8: u288 {\n                    limb0: 0x25f8c1f28cee5b135d48cdb6,\n                    limb1: 0x9acc1820c130cb285092986d,\n                    limb2: 0x2f167bb2de542dc7,\n                },\n                w9: u288 {\n                    limb0: 0xdfd9bc4b5d951cf27288f3d8,\n                    limb1: 0x20e76c8c514cfc034e8cee6c,\n                    limb2: 0x8b4f5acd534d42,\n                },\n                w10: u288 {\n                    limb0: 0x8e677eb53bf14698e8b36257,\n                    limb1: 0x9aea99485edddd73910e5d7b,\n                    limb2: 0x1973552b29e8f190,\n                },\n                w11: u288 {\n                    limb0: 0xd5b7c92c3679269e6e89fe4d,\n                    limb1: 0x571711871632367838fd954f,\n                    limb2: 0xca34d2d34fc803f,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x5a115fd010369153e97447d6,\n                    limb1: 0x30bec73abe3a59b63e145fad,\n                    limb2: 0x13cad9f295161d7b,\n                },\n                w1: u288 {\n                    limb0: 0xa241b367a81e2287bcb61b16,\n                    limb1: 0x46dcbe36594cfb18595a8f0,\n                    limb2: 0xab01b7e5df25989,\n                },\n                w2: u288 {\n                    limb0: 0x958fca463d9bb5661f0b2fd9,\n                    limb1: 0xe06657821675ca026783130d,\n                    limb2: 0x59ffe9952b66fb9,\n                },\n                w3: u288 {\n                    limb0: 0x574fb844c92111198355d520,\n                    limb1: 0xa14dab7a5284adcd16f40ce5,\n                    limb2: 0x1806c0e26ec0aee7,\n                },\n                w4: u288 {\n                    limb0: 0xe7172a20883b7e788bde9782,\n                    limb1: 0xcf0a0721de528a49cb3dd1c4,\n                    limb2: 0x25972b2764f33320,\n                },\n                w5: u288 {\n                    limb0: 0x731c250de9790bc763ae6475,\n                    limb1: 0x2a9161ea6cab27c57ed08479,\n                    limb2: 0xbba79ad176ebf3d,\n                },\n                w6: u288 {\n                    limb0: 0x1883e2d532d070e92581f205,\n                    limb1: 0x3ee4f828dc142213ed8af967,\n                    limb2: 0x2e502ad8c56d0a28,\n                },\n                w7: u288 {\n                    limb0: 0x5e8c5fa9891c0aba3c546e3b,\n                    limb1: 0xef69eec871a7317eb48f3c4c,\n                    limb2: 0x15527229b85df416,\n                },\n                w8: u288 {\n                    limb0: 0xf9d9b27fb6982c16115b072a,\n                    limb1: 0x25855f7b17b4ab7d777c5a71,\n                    limb2: 0x17b488bbc4482f41,\n                },\n                w9: u288 {\n                    limb0: 0xc8d3bb50e255913069e7e85a,\n                    limb1: 0x24471c0093ed7d60d8ec93fe,\n                    limb2: 0x1d25a04ef49a8340,\n                },\n                w10: u288 {\n                    limb0: 0x8469405a54b25563e06b7556,\n                    limb1: 0x362aa168589a62d47f199abd,\n                    limb2: 0x144504d5e88c24cd,\n                },\n                w11: u288 {\n                    limb0: 0x6ecf9040c554795e77fbc3d,\n                    limb1: 0xce3f520885d6702426c67484,\n                    limb2: 0x1729093a618f3459,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x4e76344718fef690a24dad4a,\n                    limb1: 0xc77cee5e9c5a4c63dcec6df,\n                    limb2: 0x2eabcc53f3044ba2,\n                },\n                w1: u288 {\n                    limb0: 0xff72f26ff560d5c610868418,\n                    limb1: 0xcf976dd967e078f76ffa7f14,\n                    limb2: 0x2c4c3336767ab0f8,\n                },\n                w2: u288 {\n                    limb0: 0x74290c1a859b6a664515c7ec,\n                    limb1: 0x4018fec3da718ea7ce725e7a,\n                    limb2: 0x2c0acbaf6d3dda8c,\n                },\n                w3: u288 {\n                    limb0: 0x9e24330df30e289200970ddc,\n                    limb1: 0x2c7506954dfbab29debdcc33,\n                    limb2: 0x19e88e5ba2f32c9e,\n                },\n                w4: u288 {\n                    limb0: 0x92b81688683664e49ad6c207,\n                    limb1: 0x950a1848e1e7bd3bee4e9648,\n                    limb2: 0x245fb841e1ea7f20,\n                },\n                w5: u288 {\n                    limb0: 0xc0f5268607b5fb01ab981f8,\n                    limb1: 0x92b4bd8b0642eb9b8125e71e,\n                    limb2: 0x832b45514154898,\n                },\n                w6: u288 {\n                    limb0: 0x18faa9f18edac485d6a7b190,\n                    limb1: 0xc374fb5ae398115c8cc5d4f,\n                    limb2: 0x1b89ed6497f7528b,\n                },\n                w7: u288 {\n                    limb0: 0x60c6513ff564579e1988b356,\n                    limb1: 0x829048cc61af118a911e5195,\n                    limb2: 0x4b67c5750b2a6c8,\n                },\n                w8: u288 {\n                    limb0: 0x2ad1d470e7cbba646712536d,\n                    limb1: 0xebf4f74cfd00385bc9700205,\n                    limb2: 0x21fb3b56977d6981,\n                },\n                w9: u288 {\n                    limb0: 0xc193efe12433a6a7cd169fd5,\n                    limb1: 0x8e27c0d34ce21cff9d29399a,\n                    limb2: 0x132d71372731fcc8,\n                },\n                w10: u288 {\n                    limb0: 0x556a4d23d4f86a177341b2e5,\n                    limb1: 0x383fea5b5626cc64d9e66b7a,\n                    limb2: 0x1ce052cbe93337d,\n                },\n                w11: u288 {\n                    limb0: 0x4e56bc802b5abe09ee095df,\n                    limb1: 0x37fb83a829d63d38ea7fe544,\n                    limb2: 0x2b3dbc96d14de0ea,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x672f14cd0b10414f1a06ab0e,\n                    limb1: 0xbc03210758f55bd394a8677b,\n                    limb2: 0x1919a01fe8398d6e,\n                },\n                w1: u288 {\n                    limb0: 0x994ec01c61f79b37735fb04e,\n                    limb1: 0x9f89038d35f704713d113e7c,\n                    limb2: 0x2fb067f3596c6f5d,\n                },\n                w2: u288 {\n                    limb0: 0xc4db13525dd2ebf1798bc011,\n                    limb1: 0xd7f230dddfb10272addc3ac5,\n                    limb2: 0x129d55618745bdb6,\n                },\n                w3: u288 {\n                    limb0: 0x4df6042036cc4e73caee7fd1,\n                    limb1: 0xf39bb2f57992a78b7f562caf,\n                    limb2: 0x10b637bffbf9e3b6,\n                },\n                w4: u288 {\n                    limb0: 0xaf7ef004ea70cae206949fe0,\n                    limb1: 0x746537a320de6c4a8a3597ea,\n                    limb2: 0x2aaeaf029d031dc,\n                },\n                w5: u288 {\n                    limb0: 0xc621594a078899f8c62a9cdb,\n                    limb1: 0x89e9884f3bf39f6476b7b0ea,\n                    limb2: 0x272b433fbcd53b5c,\n                },\n                w6: u288 {\n                    limb0: 0xed69fdcb268caf1bf4e7be79,\n                    limb1: 0xd64e544332ba16059fbe6f21,\n                    limb2: 0x453884fd8055fc7,\n                },\n                w7: u288 {\n                    limb0: 0xfcb53a4db14a035bb31b8e42,\n                    limb1: 0xcb56190ac6955b4789800190,\n                    limb2: 0x1948730c4a6d36a3,\n                },\n                w8: u288 {\n                    limb0: 0xf71fef15f0a4caabc93864d4,\n                    limb1: 0x533dd6e3aef09b50136b0424,\n                    limb2: 0x26d7908e833342d0,\n                },\n                w9: u288 {\n                    limb0: 0xa7702df86f4ffe60b5fcd8be,\n                    limb1: 0x82f85e85117830f257dc4449,\n                    limb2: 0x1beb171bf8d70197,\n                },\n                w10: u288 {\n                    limb0: 0x31fc4912bfb5683fe07e25cb,\n                    limb1: 0xd283fd947a39cca9cf8bad14,\n                    limb2: 0x115ec5f3559e2fc,\n                },\n                w11: u288 {\n                    limb0: 0xa9507d23f9e956aa9f5be47d,\n                    limb1: 0x20a327008223620fe131958e,\n                    limb2: 0x1e5fc15a15ef1efa,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x2a32729f621dc67e38a9e308,\n                    limb1: 0x3c7a4c38ab41463dd90d71e6,\n                    limb2: 0x164410a5de4f6a31,\n                },\n                w1: u288 {\n                    limb0: 0x7c865da012acb0d622f3e6af,\n                    limb1: 0x6efcde33e8cb90fe34763281,\n                    limb2: 0x8bb58070cb757b0,\n                },\n                w2: u288 {\n                    limb0: 0x102a4c45e1c7dc9a185096a6,\n                    limb1: 0x939ac06cca64b4059b650779,\n                    limb2: 0x18d0f097d8f27ead,\n                },\n                w3: u288 {\n                    limb0: 0x5604d370b04f242174dfdc19,\n                    limb1: 0x3f2331ab9d6af28b81d598d7,\n                    limb2: 0x14096280fdb84ef2,\n                },\n                w4: u288 {\n                    limb0: 0x4412fcdec6354f32bbfff8ab,\n                    limb1: 0xb2455bc4da7ee0be75af5185,\n                    limb2: 0x1a06f1d06514810a,\n                },\n                w5: u288 {\n                    limb0: 0x5b518b0ce27ac5904af109d2,\n                    limb1: 0x505b8452fe08ea12e98c5709,\n                    limb2: 0xb8fe7b802f5d89a,\n                },\n                w6: u288 {\n                    limb0: 0xd0c037f851034b765eed83e4,\n                    limb1: 0xb208cada98ad38bb65fa1eac,\n                    limb2: 0xad14e495078b750,\n                },\n                w7: u288 {\n                    limb0: 0x27c34e9def3b3769635e71be,\n                    limb1: 0xb2ec25f739ecf7d9600f51a6,\n                    limb2: 0x2865787fdd12b638,\n                },\n                w8: u288 {\n                    limb0: 0x639142ced19d81d2bb7fab2e,\n                    limb1: 0x7c2168110de34c92009b4685,\n                    limb2: 0x1c898a9a832e3d64,\n                },\n                w9: u288 {\n                    limb0: 0x1f5eb66df1fdc41bf0ce081e,\n                    limb1: 0xafbc19ef146651ce2da77852,\n                    limb2: 0xe6eac8e4ccd9b71,\n                },\n                w10: u288 {\n                    limb0: 0xf57e46ceab88a82e3a3f41c0,\n                    limb1: 0xb9c56b5c009ea3787342009,\n                    limb2: 0x2b02ef12c18f1e03,\n                },\n                w11: u288 {\n                    limb0: 0xfb98309dd05609eb835a18ea,\n                    limb1: 0x831938e89a1a52e80f384288,\n                    limb2: 0x2f28355805f38fcd,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xbc95d451e65b0289c2f0d9f4,\n                    limb1: 0x29864b5c2006361c7ec32dbc,\n                    limb2: 0x231b97e42e88b4ff,\n                },\n                w1: u288 {\n                    limb0: 0x4bc818c5e9f6ed62903ac570,\n                    limb1: 0xa6da69d8d95bf6c6529bfd2e,\n                    limb2: 0x9e56c349c350628,\n                },\n                w2: u288 {\n                    limb0: 0xed520f5d2e7e426947558231,\n                    limb1: 0x407b04e8f131e18a83493135,\n                    limb2: 0xa24acdc96970f27,\n                },\n                w3: u288 {\n                    limb0: 0x1d6c5e4e2aeea52567838f68,\n                    limb1: 0x3bdb301020d1702216efd42d,\n                    limb2: 0x2b59a5b8dcb0422b,\n                },\n                w4: u288 {\n                    limb0: 0xf85e1201fcab94bada581d84,\n                    limb1: 0xe0efe6f4951ed52abf8b76af,\n                    limb2: 0xa6ae5af3e8d245c,\n                },\n                w5: u288 {\n                    limb0: 0x51002d24f61e489d8c153193,\n                    limb1: 0xb32c323348563ffd15f5c33c,\n                    limb2: 0x26c4b2966b0b0244,\n                },\n                w6: u288 {\n                    limb0: 0xb16e8f73703c8fc9cbe27a54,\n                    limb1: 0xe85c673315e3ff3bd80c385a,\n                    limb2: 0x1097084941caa56b,\n                },\n                w7: u288 {\n                    limb0: 0x418c90f7a9ddb4b009516166,\n                    limb1: 0x6b3e04040348ba6064a95888,\n                    limb2: 0x1109803e56079bbf,\n                },\n                w8: u288 {\n                    limb0: 0xfba73400ff9d91da0d4bb12f,\n                    limb1: 0xaa1955281d88ef0e24a3555b,\n                    limb2: 0x2eb930dc35c971e5,\n                },\n                w9: u288 {\n                    limb0: 0x5cf265fa7a069ab0faf07634,\n                    limb1: 0x1fc2d713371237aca902f86b,\n                    limb2: 0x239dbccb24faaa,\n                },\n                w10: u288 {\n                    limb0: 0x2b4f288428a4b9bbe4f2fa4c,\n                    limb1: 0x7623c03640928ed49d920ddf,\n                    limb2: 0x13201c25a3d33428,\n                },\n                w11: u288 {\n                    limb0: 0x40775c9ff8a831905a097195,\n                    limb1: 0x26f944b86fd036f02e3194c7,\n                    limb2: 0x28d19be843b3ff3c,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x189cb16fa9189ecd4fbb9343,\n                    limb1: 0x3b0200dcdda749a4ac7badd1,\n                    limb2: 0x127325cd0676619e,\n                },\n                w1: u288 {\n                    limb0: 0x69426bc4ac151ab78084bd46,\n                    limb1: 0x6ed73cc76b2e6866f2bb6e99,\n                    limb2: 0xa8a06bc3b26bf4d,\n                },\n                w2: u288 {\n                    limb0: 0x773e7d09877a907af19e3b20,\n                    limb1: 0xceef25b4bf04c5319d48ec40,\n                    limb2: 0x1551ac68039dc2ff,\n                },\n                w3: u288 {\n                    limb0: 0x5109ce5668e51d98d7e472da,\n                    limb1: 0x79997b0e4983fd2528c1da6,\n                    limb2: 0x47a2e7358f796cc,\n                },\n                w4: u288 {\n                    limb0: 0xab89501874d5d5203a865933,\n                    limb1: 0xd17c5b1d843b9ac35877d3b7,\n                    limb2: 0x1b0b482637ee8296,\n                },\n                w5: u288 {\n                    limb0: 0x2409320a513ccf12624ea83d,\n                    limb1: 0x4e71c7cafee4e2c6029411d3,\n                    limb2: 0x3f88321fd8d60cb,\n                },\n                w6: u288 {\n                    limb0: 0xda33ccef60ef4ad0f7de09a4,\n                    limb1: 0x896d7cf80ee703d4a76ea589,\n                    limb2: 0x26c5d68117d6cd8b,\n                },\n                w7: u288 {\n                    limb0: 0xaae41113d58ca2d0b98fdc40,\n                    limb1: 0xb2b5035495fad57c313b39c7,\n                    limb2: 0x2332fb21abcde1dc,\n                },\n                w8: u288 {\n                    limb0: 0x2265477f67c8e381757e2444,\n                    limb1: 0xff72e21f4c00cdb8045fe56a,\n                    limb2: 0xe369c6ccb5e2670,\n                },\n                w9: u288 {\n                    limb0: 0xa47c80b7062c0a20d48497b6,\n                    limb1: 0x89c328f7723a88bdc303660f,\n                    limb2: 0x233963ef5c38065c,\n                },\n                w10: u288 {\n                    limb0: 0xeaee6b9ebb4333692353011d,\n                    limb1: 0xd5b4ec24d21d826b39675fc1,\n                    limb2: 0x1ddb842c4860ed55,\n                },\n                w11: u288 {\n                    limb0: 0x905d5ae2cb91239753abae8b,\n                    limb1: 0xe05b3862330500c4e491581a,\n                    limb2: 0x2a0484f49430b2f4,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x322ea1fa72a31dba5d539d3c,\n                    limb1: 0x7a42a67f2be67efd3656ce90,\n                    limb2: 0x20b10c4394721d38,\n                },\n                w1: u288 {\n                    limb0: 0x8d4223351a2c2e79c68f7016,\n                    limb1: 0x7780a8b63715a853e1637024,\n                    limb2: 0x4840a61778756f7,\n                },\n                w2: u288 {\n                    limb0: 0xd33364f24b90b7283e555f03,\n                    limb1: 0x2725b6c80c1db189e6c6030f,\n                    limb2: 0xd0e44a0d823a67e,\n                },\n                w3: u288 {\n                    limb0: 0x882366ae98da604af6b4b252,\n                    limb1: 0xb3c7302035df6f08fe1bb60f,\n                    limb2: 0x1a9eb767ddd9d0d,\n                },\n                w4: u288 {\n                    limb0: 0xcfbe7c69e24937ff2679bd74,\n                    limb1: 0xa52b7b97b50a452b511dc5ec,\n                    limb2: 0x1b0e7a47140766b2,\n                },\n                w5: u288 {\n                    limb0: 0x31951de26a27a91be138fa32,\n                    limb1: 0x47bc4f53494987139e77af9a,\n                    limb2: 0x1149a75ca93cba86,\n                },\n                w6: u288 {\n                    limb0: 0x88cbc9cc41de5834f9fb4004,\n                    limb1: 0x5bb1bdd77409a1a3e8607b84,\n                    limb2: 0xcec6462b9b83783,\n                },\n                w7: u288 {\n                    limb0: 0xe8cca50626729793c273633c,\n                    limb1: 0xa94a00b04453b3af1fcda1e7,\n                    limb2: 0xe304d8c44e2ad29,\n                },\n                w8: u288 {\n                    limb0: 0x6d79c62f33ef542ee031b10b,\n                    limb1: 0xa853b8626dc0f8edc9dae8a2,\n                    limb2: 0x25a442e527fb55ae,\n                },\n                w9: u288 {\n                    limb0: 0xb73c62448fcc061b7461540,\n                    limb1: 0xd36efa0f2e61f0bdf4f23d5e,\n                    limb2: 0x146329a5e06f73d8,\n                },\n                w10: u288 {\n                    limb0: 0xa78188e4bc75e2262a094916,\n                    limb1: 0xe7126a1cbcb03e681a2f9eb0,\n                    limb2: 0x22b08cfb6cb34c00,\n                },\n                w11: u288 {\n                    limb0: 0x93651f5e4cfcfd80ebae9e97,\n                    limb1: 0x2ad39d6d02435965ab528f04,\n                    limb2: 0x162d5418053965e7,\n                },\n            },\n        ]\n            .span(),\n        big_Q: array![\n            u288 {\n                limb0: 0x65737383940f52cb41c10526,\n                limb1: 0xf877e2e11c81d1fe760106bd,\n                limb2: 0x227bda5a9bc6a20e,\n            },\n            u288 {\n                limb0: 0x1b3e8afea54678452808b494,\n                limb1: 0x9a314566b20243000ffffaeb,\n                limb2: 0x2e7746007ddf67d0,\n            },\n            u288 {\n                limb0: 0x62312dca7c275ac579aa50b8,\n                limb1: 0xf46480fdc504a9bfbbc4d484,\n                limb2: 0x973352f03b73eb5,\n            },\n            u288 {\n                limb0: 0xf3e2a6ba0b03b85ba1a3d01f,\n                limb1: 0xb75994964b34677afb4326c3,\n                limb2: 0x2000dc479e26f767,\n            },\n            u288 {\n                limb0: 0xd28d9a9818914178a09ab2e1,\n                limb1: 0x7c7bb2b2e8c6993ca5b22dfe,\n                limb2: 0x2ace321a82a4946d,\n            },\n            u288 {\n                limb0: 0xe7618ac141da3f2a9cd88d4f,\n                limb1: 0xc9e921b7c54826a2c05273f,\n                limb2: 0xa0dbf3389c7693b,\n            },\n            u288 {\n                limb0: 0xd299bc32e8f8e3cfcf4a7951,\n                limb1: 0xcc425bfa75ea83022df159f5,\n                limb2: 0x2a0e7b987dcfc752,\n            },\n            u288 {\n                limb0: 0x5940490ce87cef6a1d683434,\n                limb1: 0xf2a0bd534e512ab07f43dc60,\n                limb2: 0x289b342909df402c,\n            },\n            u288 {\n                limb0: 0x4157b535898f4ac32665d693,\n                limb1: 0x1294e90c8a878a83addcdeec,\n                limb2: 0x111795c8e87e87e6,\n            },\n            u288 {\n                limb0: 0xf4946ecd90cbbe2a82d22192,\n                limb1: 0x1673fe41abc7a1c647582820,\n                limb2: 0x12c8712a6681aff,\n            },\n            u288 {\n                limb0: 0x58840247ec3072352a2436d8,\n                limb1: 0xb9d1028c2ecf0ea62b75f040,\n                limb2: 0xd9c766fe79efe29,\n            },\n            u288 {\n                limb0: 0x7a36509d8837f009f250638e,\n                limb1: 0x39bd2832439963a5fabea7bb,\n                limb2: 0x26b08d333be665a2,\n            },\n            u288 {\n                limb0: 0x27e8487adb1d7c397d6ae2ff,\n                limb1: 0x84fc3e5163b8e8c4e1606423,\n                limb2: 0x12587e73d6fc88de,\n            },\n            u288 {\n                limb0: 0x17d0cc1a1f014726c1756720,\n                limb1: 0x4c49a0d2b899436dcfa60a17,\n                limb2: 0x2031cb449bac71ef,\n            },\n            u288 {\n                limb0: 0xc1994b8b1ad7facc2b20714f,\n                limb1: 0x408ad2da3c40c1583f435ced,\n                limb2: 0x1cdd005343419923,\n            },\n            u288 {\n                limb0: 0x7192520798c7483048248305,\n                limb1: 0x47570633706991802a32c541,\n                limb2: 0xeff568c923639e3,\n            },\n            u288 {\n                limb0: 0xbbf35db39a27767feb832057,\n                limb1: 0x203f23aa27600216bc8856ca,\n                limb2: 0x2c2fd033052e757,\n            },\n            u288 {\n                limb0: 0xd3196cbda080a96247007100,\n                limb1: 0x4eae81309fe277a7d0d0eb2a,\n                limb2: 0x1dec8b9ced6b73be,\n            },\n            u288 {\n                limb0: 0xe3ea031455b3dcf3a338a2a5,\n                limb1: 0x96a31cb6bed1b090796f17a2,\n                limb2: 0x2d639fe20c5b7055,\n            },\n            u288 {\n                limb0: 0xfa5499dc15c57a673779365,\n                limb1: 0x5319f9fbaed02e58712b4fab,\n                limb2: 0x216a8d7703b5ea74,\n            },\n            u288 {\n                limb0: 0x6ca0334674fac04c4351fdb2,\n                limb1: 0xa7ed5a4b9a39700c623a465a,\n                limb2: 0x2af6b33e02766932,\n            },\n            u288 {\n                limb0: 0x16a300b622102f6ddfd50be4,\n                limb1: 0x665bcea4feed0f376e68d6d7,\n                limb2: 0x2e3bb074536f0017,\n            },\n            u288 {\n                limb0: 0x5276a15b47f6e6c42261ad6c,\n                limb1: 0x62673ce1b21738a7ccd6d56d,\n                limb2: 0x16ed04838657204f,\n            },\n            u288 {\n                limb0: 0xee7853338912309287f8739c,\n                limb1: 0xefd280a5048adb0ba5462896,\n                limb2: 0x27da826c28d92d30,\n            },\n            u288 {\n                limb0: 0xc34d441c21867dabc4b1f264,\n                limb1: 0x5dcea75877acd6c5296b6ad5,\n                limb2: 0x892c761d623cc04,\n            },\n            u288 {\n                limb0: 0xe9f90e469898a79f40614764,\n                limb1: 0xc142083a1130f216ffc912d2,\n                limb2: 0x21bb09e89928b149,\n            },\n            u288 {\n                limb0: 0x7e5bdcdfbe5ac4eb13de7dca,\n                limb1: 0xeee19a6658e3624065afb9a6,\n                limb2: 0x20bdf08dc3365687,\n            },\n            u288 {\n                limb0: 0xec25ba4c96690601d0b0f490,\n                limb1: 0x6ec04fe5fe236f9bc9d64510,\n                limb2: 0x266cf88c56925bd9,\n            },\n            u288 {\n                limb0: 0x7e121bd46267bfa3df513c05,\n                limb1: 0xf9708c81d16338da715c13c9,\n                limb2: 0x16c1954ab2f0af5b,\n            },\n            u288 {\n                limb0: 0xad5f27f54ace39f1cd84d321,\n                limb1: 0x1fcb650aec6368640ea19142,\n                limb2: 0x1eb87bfe0c5e61fa,\n            },\n            u288 {\n                limb0: 0x8e4316f2e2689a9e222e7a84,\n                limb1: 0x3d4a1e12d7b67c84e7deca00,\n                limb2: 0x2f029b5f06637f1,\n            },\n            u288 {\n                limb0: 0xa2b4163147fdc053aa030788,\n                limb1: 0x85c25a982acbba90843f0416,\n                limb2: 0x183c679f44c5be6d,\n            },\n            u288 {\n                limb0: 0x8db8d4b353d5981714045a8a,\n                limb1: 0x1ace7b14c205a096179743dc,\n                limb2: 0x1b0e7a4ac6f217b2,\n            },\n            u288 {\n                limb0: 0x95395ac90a6c97863f1e99c5,\n                limb1: 0x122416857760cc28685f379c,\n                limb2: 0x12b222ed222108a0,\n            },\n            u288 {\n                limb0: 0x7bf057670e0f97f68f41ac36,\n                limb1: 0xa5149ce14da71f38eea56eae,\n                limb2: 0x1265243bc3e2c5ea,\n            },\n            u288 {\n                limb0: 0x8418d3f7d98fe9987d89ff14,\n                limb1: 0xfed069ffae0d9cb6a51a8a2f,\n                limb2: 0x2a338413f6d3d270,\n            },\n            u288 {\n                limb0: 0x930982b0b2a2c2dd50b5fb41,\n                limb1: 0xd02e2da9dc7699a6f64cbb9a,\n                limb2: 0x2b8ffa317e3f1276,\n            },\n            u288 {\n                limb0: 0x84ddad0f9fbbfb45198e1eb6,\n                limb1: 0x6c57e5b7ede33cb3a3d8c675,\n                limb2: 0x2fb2f04dcf704896,\n            },\n            u288 {\n                limb0: 0xdad9472c14c10ca87c130d21,\n                limb1: 0x35755bbc84d811a3e8e9ce70,\n                limb2: 0xbcccd8d0f4d1423,\n            },\n            u288 {\n                limb0: 0x9170ab0a3e8284a1652685a,\n                limb1: 0xb27161bf3a4bc605c5c6e394,\n                limb2: 0xf6610847ddda1ee,\n            },\n            u288 {\n                limb0: 0xf2f95683561514b88e7077ea,\n                limb1: 0xcc9a1d69042ff42dfd44c06e,\n                limb2: 0x4a13455f13f8129,\n            },\n            u288 {\n                limb0: 0xe69dcd8cb1f8d892fc5b1de6,\n                limb1: 0x5572c2eda4130dc648323493,\n                limb2: 0x1f31b37597f56798,\n            },\n            u288 {\n                limb0: 0x3c77fb7eeeb2eccee412ce42,\n                limb1: 0xa0084c8adaca1fbfd63e0e1a,\n                limb2: 0x52a40914c24671c,\n            },\n            u288 {\n                limb0: 0x7d2b7da76474dad36585b7e7,\n                limb1: 0x1856c12452f710321181642a,\n                limb2: 0x301b940b1447d9d7,\n            },\n            u288 {\n                limb0: 0xeb5b4277911371980f0a8e0f,\n                limb1: 0x72a0d5cc46fc87b1b904798c,\n                limb2: 0x26179cf8bc651947,\n            },\n            u288 {\n                limb0: 0xc4454bdc9ed97d4d4cebac0d,\n                limb1: 0x472c451a131eefcb9a20f2fa,\n                limb2: 0x7167de917f08a21,\n            },\n            u288 {\n                limb0: 0x8d3ae2d5ae3a4e8ad956ebde,\n                limb1: 0xefba75c073f4c61d864a44bb,\n                limb2: 0x2e54b53dbc14f1ce,\n            },\n            u288 {\n                limb0: 0x21f168553a19be49d69a62cf,\n                limb1: 0x22278eca7d66db2b705abc3,\n                limb2: 0x2a412839bb20990b,\n            },\n            u288 {\n                limb0: 0x89bddbae4532b67868621489,\n                limb1: 0xc24b8bc8442e69f7ba3f012e,\n                limb2: 0x23a975b0b27d8919,\n            },\n            u288 {\n                limb0: 0xd1f53ffdd65c12f10925aa2a,\n                limb1: 0xe25c1506b9f657ed30591141,\n                limb2: 0x2e9d671126870c77,\n            },\n            u288 {\n                limb0: 0x9f2238288028f1a0a906e7f4,\n                limb1: 0x256ee6b35d0d1307f4a96a06,\n                limb2: 0x2a2873a5811be00,\n            },\n            u288 {\n                limb0: 0x5c721328e7855f7cd92461da,\n                limb1: 0xe523939450d66f776a0d1d9a,\n                limb2: 0x2733e21226a65f57,\n            },\n            u288 {\n                limb0: 0x9d49104a6082e6461b5251f3,\n                limb1: 0x97f939c1674c3a77f8fd1c8a,\n                limb2: 0x1b1ae367faf61893,\n            },\n            u288 {\n                limb0: 0x203697dd0f77fde667a1b8ff,\n                limb1: 0x8d37ec43eed86d9edbeb144a,\n                limb2: 0xe4ea7c7c2018303,\n            },\n            u288 {\n                limb0: 0x3989ece6a86c080321c59298,\n                limb1: 0xdb5be74e7eac5d30a82687ce,\n                limb2: 0x86b221dfe010f48,\n            },\n            u288 {\n                limb0: 0xe91073f8e8aec3dcb6339829,\n                limb1: 0x5d0a659556a66c7faf3ccf21,\n                limb2: 0x2d88336a3579f01f,\n            },\n            u288 {\n                limb0: 0xd0c992cadc60ce354bb942d9,\n                limb1: 0xfd81dc22df69375ae81238c1,\n                limb2: 0x2a7e860facc9ab07,\n            },\n            u288 {\n                limb0: 0x28b45bdd853dd5275b09dac9,\n                limb1: 0x5fa3a187169c4e4a9a95e563,\n                limb2: 0xc6488cce84dd457,\n            },\n            u288 {\n                limb0: 0x1af383d9a35d68787de29a9b,\n                limb1: 0x41ae22353da6ee5bfbfc8cb3,\n                limb2: 0x10032c451fac66f2,\n            },\n            u288 {\n                limb0: 0x9b0ba48929069d11e54d3a28,\n                limb1: 0x94c838f8a6b82ae2a78f40e9,\n                limb2: 0x2dd220670eefe0bc,\n            },\n            u288 {\n                limb0: 0x47aee8581eafe04a4d9bbe8,\n                limb1: 0x881497fdf299664132dc1c07,\n                limb2: 0xb48b5b90f9bfab0,\n            },\n            u288 {\n                limb0: 0xf9a38a2af8fd95bb7076182a,\n                limb1: 0xc52749ed432931bab7f2c984,\n                limb2: 0x1db740a2ed8d996e,\n            },\n            u288 {\n                limb0: 0x99501e686fd0c40a91d7339,\n                limb1: 0x312713aa76ddf7899ec3be0e,\n                limb2: 0xc2e45782111c9ec,\n            },\n            u288 {\n                limb0: 0x4b26aeea21ebea59eb45a277,\n                limb1: 0xf7565927060460e6136894d6,\n                limb2: 0x114c739f89f57783,\n            },\n            u288 {\n                limb0: 0xace0689de7241e39a8c5b741,\n                limb1: 0xe5ec1dbd6be215989a022025,\n                limb2: 0x15c9b8143d1b0459,\n            },\n            u288 {\n                limb0: 0x963a09b1a3be2d806d510987,\n                limb1: 0x3ef22a80958e58c4e7a292e7,\n                limb2: 0x1946197258afc02,\n            },\n            u288 {\n                limb0: 0x24928648fed6706ecbc49c01,\n                limb1: 0x727fd4565aa57ef92a6847aa,\n                limb2: 0xff86864724d1210,\n            },\n            u288 {\n                limb0: 0x11a8806083074e6f4b5333bc,\n                limb1: 0xb7d18840bbd9d7a5fcac5b8a,\n                limb2: 0xcd8f13cec101102,\n            },\n            u288 {\n                limb0: 0x2e4bb08279d7d379dfe755b2,\n                limb1: 0xdfd2fa1b0bcb643e6899c4e0,\n                limb2: 0x25d2897397289b6b,\n            },\n            u288 {\n                limb0: 0x4da2928a57e87b95cccb0606,\n                limb1: 0xc826ac4d7d09d3541f02b690,\n                limb2: 0x27024317b96d05e6,\n            },\n            u288 {\n                limb0: 0x21f7a234c2eca483bf63e97,\n                limb1: 0x24ef5412bf566c923335cc65,\n                limb2: 0x7e7a0567070412d,\n            },\n            u288 {\n                limb0: 0xfbcc1c256e4e4ea76d383599,\n                limb1: 0xf8361521fd76d36c13f5f506,\n                limb2: 0x225b98b21b4df6e,\n            },\n            u288 {\n                limb0: 0xec6979f93f3b0f212177704b,\n                limb1: 0xe814bbf588b1a5123dc9bfae,\n                limb2: 0x2e1e2b4af68bf630,\n            },\n            u288 {\n                limb0: 0xe156ff3ef47a782f39214b71,\n                limb1: 0x219a2571471341f90450f81,\n                limb2: 0x12e14004dc3b0bc,\n            },\n            u288 {\n                limb0: 0xe3b78487836c7a76d11c552c,\n                limb1: 0xa26caa1fb963f8ac995ccfe9,\n                limb2: 0x2def85303108814d,\n            },\n            u288 {\n                limb0: 0x993960bc2433b5dd9f376783,\n                limb1: 0xe22bf6bff4f4d68da7ba3bf2,\n                limb2: 0x10ec5d253a033584,\n            },\n            u288 {\n                limb0: 0xc91f7662afadb5fe56bc1204,\n                limb1: 0x5e9e290047e612784d4ce7da,\n                limb2: 0x20493df7e73c9196,\n            },\n            u288 {\n                limb0: 0x1f1249c2117de52d6a375e55,\n                limb1: 0xe8d8f26caa81ab31192a8de9,\n                limb2: 0xf6000293ab458a2,\n            },\n            u288 {\n                limb0: 0x67a3596196f7534ec359923f,\n                limb1: 0xc05e84b28d399cbed93451ef,\n                limb2: 0xf0f41b5cd3e66ac,\n            },\n            u288 {\n                limb0: 0xf01c7b113d1ef665738769f6,\n                limb1: 0xc2072270705c535b08cc8b01,\n                limb2: 0x20be8e10e1839dd,\n            },\n            u288 {\n                limb0: 0xf3c7417504cc5431edbddf69,\n                limb1: 0xf38f5c163db628f2d66ac4c4,\n                limb2: 0x1b623c118836b5d3,\n            },\n            u288 {\n                limb0: 0x698ed5ad549e485869420b2b,\n                limb1: 0xe7bd25db6fdce6a19a93c3f5,\n                limb2: 0x2302a5d85daf7b71,\n            },\n            u288 {\n                limb0: 0xe7aab79261f7f0936432d2fc,\n                limb1: 0x85f5a2c4515978d4cc616978,\n                limb2: 0x14688896bdcc620f,\n            },\n            u288 {\n                limb0: 0x6e8efdac8caea05377f67a60,\n                limb1: 0x5f0ba3a9597f39c98ee70b29,\n                limb2: 0x17d6a6de6b12ecb2,\n            },\n            u288 {\n                limb0: 0xfe224f039e8d7e6e2c3c3a73,\n                limb1: 0x724cd3adc07ad7e9bcc4de70,\n                limb2: 0x28b85c96eae71882,\n            },\n            u288 {\n                limb0: 0xd6b7d623500f22e1cd6d94e,\n                limb1: 0x88682e65ca47af510f9629e6,\n                limb2: 0x166bde77a6a4cd5,\n            },\n            u288 {\n                limb0: 0x4c8dbe4dda56d6d79118c47c,\n                limb1: 0xaf23c3262ad453c47bbea1f9,\n                limb2: 0xc2030a03f8c2e93,\n            },\n            u288 {\n                limb0: 0x5c56451a911c7475df12a87b,\n                limb1: 0x4577a074de41ebed5149081c,\n                limb2: 0x2d39c50207684dc4,\n            },\n            u288 {\n                limb0: 0x6d62d9a0fea7bfbf070f1b9c,\n                limb1: 0x4483879e5ecdc3e6f8812593,\n                limb2: 0x1075781151708126,\n            },\n            u288 {\n                limb0: 0xa16c617126712421b4b5b710,\n                limb1: 0x50751b90a3e365b886b04617,\n                limb2: 0x2b772e6c40aef488,\n            },\n            u288 {\n                limb0: 0xf24251c9552e54d41aff488c,\n                limb1: 0x48a4c73b42d3a254d532212d,\n                limb2: 0x2ebf160545b189f4,\n            },\n            u288 {\n                limb0: 0x18dd18e3728ba83abbdb93c6,\n                limb1: 0xccbfeb55ef935c5d34424267,\n                limb2: 0x6e88d6bf23145f9,\n            },\n            u288 {\n                limb0: 0xff96a29e81b676f30e4feed9,\n                limb1: 0x8ce71c9c3ed3603df82b9616,\n                limb2: 0x157edea68745c496,\n            },\n            u288 {\n                limb0: 0x2a847e87b3e55e1b8bad8a4e,\n                limb1: 0x9fdfaf093751b0a93b2ef710,\n                limb2: 0x176da02630c9ec63,\n            },\n            u288 {\n                limb0: 0x9fce3cee88000b812536c2b8,\n                limb1: 0xb62aaeb06cfb6e41b21327e2,\n                limb2: 0x1bfafb13dcbb30ac,\n            },\n            u288 {\n                limb0: 0x8ac628d91bfc5197e12e8f4b,\n                limb1: 0x2d9d9c60e02b821f1e5c7080,\n                limb2: 0x6e515c438d56f3b,\n            },\n            u288 {\n                limb0: 0xfcb74c9102b255b70b0b5318,\n                limb1: 0xdeebbfb69a31f4660008dbb8,\n                limb2: 0xc8b2d7406314c83,\n            },\n            u288 {\n                limb0: 0x62a47c1f65acc0d1ce233774,\n                limb1: 0x7609ae2edbbbe51609ab180b,\n                limb2: 0x363ae70a06cbfa3,\n            },\n            u288 {\n                limb0: 0x9e3d397bc9b81c8be9b7cfd8,\n                limb1: 0xe0c4c9bf47c6ff5a90929303,\n                limb2: 0x1dc25695b77d3691,\n            },\n            u288 {\n                limb0: 0xa06aa3e4e2291d2dfcae3775,\n                limb1: 0x42aa7f7795410fbc95a339,\n                limb2: 0x2297d4db99d2906b,\n            },\n            u288 {\n                limb0: 0xb655744c405a773d5b40b257,\n                limb1: 0x8f0fd82f059bb162c5b2846f,\n                limb2: 0x10e6484f8beea051,\n            },\n            u288 {\n                limb0: 0x14d7daf97828687c2d22980a,\n                limb1: 0xb6f930d9108048fd2648f607,\n                limb2: 0x2e00304eafbb8a51,\n            },\n            u288 {\n                limb0: 0xb2a700e4dc38a7d29da9994f,\n                limb1: 0xba450072ae7efcd133857642,\n                limb2: 0x1d515f53f3be4db2,\n            },\n            u288 {\n                limb0: 0x5811fb9edd7738b6670ed3f9,\n                limb1: 0x761f9d119293c9c95cedb3db,\n                limb2: 0xcec7cc48032b1dc,\n            },\n            u288 {\n                limb0: 0xaffb69a1a6a320aa053d25d9,\n                limb1: 0xfaa4a45760ffdf2e0f74e70b,\n                limb2: 0xea26f67002f8990,\n            },\n            u288 {\n                limb0: 0x9649c3ea51c372ab9baad2a8,\n                limb1: 0x30c7e36f9b542795d00a328,\n                limb2: 0x2c25e8eedafc696e,\n            },\n            u288 {\n                limb0: 0xa717c23cd1d18fbe615839a2,\n                limb1: 0xfe6ec0991f95d579f569267f,\n                limb2: 0x2c2f14ce0fea96b3,\n            },\n            u288 {\n                limb0: 0x68addc6917cd7b2a68d60e8b,\n                limb1: 0xf3298ab850ab7615287a2a61,\n                limb2: 0xddd18f560259d64,\n            },\n            u288 {\n                limb0: 0x166e15ff9e0eb53e72da2396,\n                limb1: 0x406d31053934866d1bbab5a2,\n                limb2: 0x1c7234f6e4d26970,\n            },\n            u288 {\n                limb0: 0x569c66127dd9957769b660fd,\n                limb1: 0x273dbad8b1aa38de08b9f709,\n                limb2: 0x6a76281eafe9599,\n            },\n            u288 {\n                limb0: 0x45cf087f8571c36ecaadd2a5,\n                limb1: 0x463fda5b62a264b996947faa,\n                limb2: 0x184c2f79cadf48a5,\n            },\n            u288 {\n                limb0: 0xee49cb77bfe6a700add0c1f2,\n                limb1: 0x6d7dd7786657f9d054439451,\n                limb2: 0x18b6c6c7049b5f50,\n            },\n            u288 {\n                limb0: 0x683b9997727b9a9e67c6471b,\n                limb1: 0x8716f102d32c3ce725df8169,\n                limb2: 0x111048345498a7a3,\n            },\n            u288 {\n                limb0: 0xc1bf5c3589496ab6d7595e46,\n                limb1: 0xf007453ce629fcf20634dff1,\n                limb2: 0x158c33f50d4b8116,\n            },\n            u288 {\n                limb0: 0xf7705b7b76a6c33bcd218968,\n                limb1: 0x8319fe8b5dd4bb0fe9a7f86c,\n                limb2: 0x9d1a1848abb76cb,\n            },\n            u288 {\n                limb0: 0xe126329ee21b76c790e81302,\n                limb1: 0x9abbee7b21ea11a7ba796135,\n                limb2: 0x106b34443f87265b,\n            },\n            u288 {\n                limb0: 0xcad4ede64aa9f7184a78da58,\n                limb1: 0x195ccfcab97b6f2bc0af932c,\n                limb2: 0xe6149e62bd9cd99,\n            },\n            u288 {\n                limb0: 0xfca6890b61e4ae37626aea9f,\n                limb1: 0xefd7f6a4e50af11fbb574989,\n                limb2: 0x2708074111d394f4,\n            },\n            u288 {\n                limb0: 0x3a5685f239bbb7516a9ce4f0,\n                limb1: 0x9e27ca310f6eed7da9da0ae3,\n                limb2: 0x856156f2344cd99,\n            },\n            u288 {\n                limb0: 0xdc860e4205aac0d4a119db7a,\n                limb1: 0xcab98cf8c47fe661e5e51751,\n                limb2: 0xa6b9ecbecc92920,\n            },\n            u288 {\n                limb0: 0x421f4f31e89cd635f715f0b2,\n                limb1: 0xf7438c10f4292abac4911cb1,\n                limb2: 0xca7cb6b53e66e2d,\n            },\n            u288 {\n                limb0: 0xff8730c83666f03b63c82e9a,\n                limb1: 0xbf15a711d60434a18ad0b332,\n                limb2: 0x1e4e0174abb3ff35,\n            },\n            u288 {\n                limb0: 0xddaa0774bd9d3400487b3332,\n                limb1: 0xa47169b652481e69cdbd586,\n                limb2: 0x1077eff1074d9cf8,\n            },\n            u288 {\n                limb0: 0xb9d99431843de1c6e03930cf,\n                limb1: 0x48055c4caf106ecdba4ac34,\n                limb2: 0x1d85593859c0a084,\n            },\n            u288 {\n                limb0: 0x4d70a2f8aadfaef4a1684fc3,\n                limb1: 0x851a661cb719732bb10a8605,\n                limb2: 0x77fb033385f4d55,\n            },\n            u288 {\n                limb0: 0xa8df36d7fc5dde16f2f92d30,\n                limb1: 0x3828c87739f9975c4679f6e3,\n                limb2: 0x1e49eba589ab9049,\n            },\n            u288 {\n                limb0: 0x8afb36ffc90cdfb2c394054c,\n                limb1: 0x68e2f7def70b6b68fd976374,\n                limb2: 0x14f9b073519d71ca,\n            },\n            u288 {\n                limb0: 0x537ea3eac7013cbef6144e1f,\n                limb1: 0x237fb1851dbe67882d4d5c11,\n                limb2: 0x11ebc5003e3b3263,\n            },\n            u288 {\n                limb0: 0xfcced309e1dd2f53c834728c,\n                limb1: 0xf9516f53eecb333fc95a18e4,\n                limb2: 0x29f5bbf3dd9109e3,\n            },\n            u288 {\n                limb0: 0x938889c1b734d1489d03cad1,\n                limb1: 0x1db581687ac5c8a9a17ed553,\n                limb2: 0x161ecb984fb856e3,\n            },\n            u288 {\n                limb0: 0xa268de500efb03f7bea07973,\n                limb1: 0x6c4a37b98bad9ddb8cfbd6d0,\n                limb2: 0x1524755288056cda,\n            },\n            u288 {\n                limb0: 0x7d4497670d42bbf1c2145bc9,\n                limb1: 0x7abbbc4122653cc6ca902869,\n                limb2: 0x261090fa8aee41bb,\n            },\n            u288 {\n                limb0: 0x151b2312dc16eaa91f70b86d,\n                limb1: 0xdb244db1311f915d8c6552d1,\n                limb2: 0xf78ff35f48b050e,\n            },\n            u288 {\n                limb0: 0x583a0c5dabf9c29cb843214e,\n                limb1: 0xd11a9ac8a4d814eab40581,\n                limb2: 0xa40191c26327e38,\n            },\n            u288 {\n                limb0: 0x42d106709fde0376b3baaf29,\n                limb1: 0xeade8db6e8f2d9a0f908711a,\n                limb2: 0x1bc9aa9ee2ecedc9,\n            },\n            u288 {\n                limb0: 0xb1e8bdc9ae134a052e65b82f,\n                limb1: 0xe9a3b46a54f1aa42cc41f70d,\n                limb2: 0x2a5ab4034d9620c8,\n            },\n            u288 {\n                limb0: 0x6cd32ed3f988bd665ae0c4ad,\n                limb1: 0xdba8bd99a74f29cf958bbd93,\n                limb2: 0x30211dca93e1d47e,\n            },\n            u288 {\n                limb0: 0x7c7eedd9922c46ad005dbc1d,\n                limb1: 0xbef703824144548d2ec5d752,\n                limb2: 0x1d6d3e4b54788235,\n            },\n            u288 {\n                limb0: 0x3bb2440fa67475f383044802,\n                limb1: 0xe4557d5ab9325d4dbe872115,\n                limb2: 0x672a865f51eb536,\n            },\n            u288 {\n                limb0: 0x2e915fc6800aa8adc2dc20c3,\n                limb1: 0x46bd6375ff3d31847846dbc2,\n                limb2: 0x2c9d928ee5f7e380,\n            },\n            u288 {\n                limb0: 0x886a5670bcf95b46c8f20ad9,\n                limb1: 0x77ee46095f8543fad0b9cfc5,\n                limb2: 0x3db727715156be8,\n            },\n            u288 {\n                limb0: 0xbae6bfa1ab50e3f01425a433,\n                limb1: 0x47856f2553698328e4e579f0,\n                limb2: 0x190d21e247afb41a,\n            },\n            u288 {\n                limb0: 0xa5d50f00f3e9814c6440dfab,\n                limb1: 0xb6a91c5c710bd62ee2b58fb7,\n                limb2: 0x21aef87938c717b1,\n            },\n            u288 {\n                limb0: 0xf470603734c27f99d0c0182f,\n                limb1: 0x377ba5790ad04eb84bbd37eb,\n                limb2: 0x1e8b05f3cfda0857,\n            },\n            u288 {\n                limb0: 0x77d147b35e8a28c9a8f59a25,\n                limb1: 0x475d3713be9110798f8ea60e,\n                limb2: 0xa54c2f08056d9a0,\n            },\n        ],\n        z: 0x7f997c7ceaaa93d340bc143f505f6d8423271960d6604ea8bf9d8c50dc40977,\n    };\n    let res = multi_pairing_check_bn254_2P_2F(pair0, pair1, lines, hint);\n    assert!(res.is_ok());\n}\n\n\n#[test]\nfn test_BN254_mpcheck_3P_2F_with_extra_miller_loop_result() {\n    let pair0: G1G2Pair = G1G2Pair {\n        p: G1Point {\n            x: u384 {\n                limb0: 0x5c724369afbc772d02aed58e,\n                limb1: 0x2cd3bc838c66439a3d6160b,\n                limb2: 0x72f26b55fb56be1,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x772ca79c580e121ca148fe75,\n                limb1: 0xce2f55e418ca01b3d6d1014b,\n                limb2: 0x2884b1dc4e84e30f,\n                limb3: 0x0,\n            },\n        },\n        q: G2Point {\n            x0: u384 {\n                limb0: 0xa30b422f34656d6c94e40be,\n                limb1: 0x83069b5050fd7194c7e35d0c,\n                limb2: 0xf0e8184945e8d34,\n                limb3: 0x0,\n            },\n            x1: u384 {\n                limb0: 0xde9079ee8fa5e15901dfef27,\n                limb1: 0xdb602cf367841e5047ffab14,\n                limb2: 0x1752c7b6b35af45,\n                limb3: 0x0,\n            },\n            y0: u384 {\n                limb0: 0x4dafbd7f615fd2aa9f5a0acc,\n                limb1: 0x35c8bbffe201ffd56deb5dea,\n                limb2: 0xa822a5ba029a283,\n                limb3: 0x0,\n            },\n            y1: u384 {\n                limb0: 0xec6d9e4fafec17b8404c0341,\n                limb1: 0x17fe961ad4b8ee3bf2ade626,\n                limb2: 0x1228147f83e3ea5,\n                limb3: 0x0,\n            },\n        },\n    };\n    let pair1: G1G2Pair = G1G2Pair {\n        p: G1Point {\n            x: u384 {\n                limb0: 0x5c724369afbc772d02aed58e,\n                limb1: 0x2cd3bc838c66439a3d6160b,\n                limb2: 0x72f26b55fb56be1,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x772ca79c580e121ca148fe75,\n                limb1: 0xce2f55e418ca01b3d6d1014b,\n                limb2: 0x2884b1dc4e84e30f,\n                limb3: 0x0,\n            },\n        },\n        q: G2Point {\n            x0: u384 {\n                limb0: 0xa30b422f34656d6c94e40be,\n                limb1: 0x83069b5050fd7194c7e35d0c,\n                limb2: 0xf0e8184945e8d34,\n                limb3: 0x0,\n            },\n            x1: u384 {\n                limb0: 0xde9079ee8fa5e15901dfef27,\n                limb1: 0xdb602cf367841e5047ffab14,\n                limb2: 0x1752c7b6b35af45,\n                limb3: 0x0,\n            },\n            y0: u384 {\n                limb0: 0x4dafbd7f615fd2aa9f5a0acc,\n                limb1: 0x35c8bbffe201ffd56deb5dea,\n                limb2: 0xa822a5ba029a283,\n                limb3: 0x0,\n            },\n            y1: u384 {\n                limb0: 0xec6d9e4fafec17b8404c0341,\n                limb1: 0x17fe961ad4b8ee3bf2ade626,\n                limb2: 0x1228147f83e3ea5,\n                limb3: 0x0,\n            },\n        },\n    };\n    let pair2: G1G2Pair = G1G2Pair {\n        p: G1Point {\n            x: u384 {\n                limb0: 0x5c724369afbc772d02aed58e,\n                limb1: 0x2cd3bc838c66439a3d6160b,\n                limb2: 0x72f26b55fb56be1,\n                limb3: 0x0,\n            },\n            y: u384 {\n                limb0: 0x772ca79c580e121ca148fe75,\n                limb1: 0xce2f55e418ca01b3d6d1014b,\n                limb2: 0x2884b1dc4e84e30f,\n                limb3: 0x0,\n            },\n        },\n        q: G2Point {\n            x0: u384 {\n                limb0: 0xa30b422f34656d6c94e40be,\n                limb1: 0x83069b5050fd7194c7e35d0c,\n                limb2: 0xf0e8184945e8d34,\n                limb3: 0x0,\n            },\n            x1: u384 {\n                limb0: 0xde9079ee8fa5e15901dfef27,\n                limb1: 0xdb602cf367841e5047ffab14,\n                limb2: 0x1752c7b6b35af45,\n                limb3: 0x0,\n            },\n            y0: u384 {\n                limb0: 0x4dafbd7f615fd2aa9f5a0acc,\n                limb1: 0x35c8bbffe201ffd56deb5dea,\n                limb2: 0xa822a5ba029a283,\n                limb3: 0x0,\n            },\n            y1: u384 {\n                limb0: 0xec6d9e4fafec17b8404c0341,\n                limb1: 0x17fe961ad4b8ee3bf2ade626,\n                limb2: 0x1228147f83e3ea5,\n                limb3: 0x0,\n            },\n        },\n    };\n    let precomputed_miller_loop_result = E12D {\n        w0: u288 {\n            limb0: 0xfaccb300f066ee143625434e,\n            limb1: 0x12bfc53caae870d85457c4bc,\n            limb2: 0x590ff61397d0dd2,\n        },\n        w1: u288 {\n            limb0: 0x3d74a2131fff08abcc77f5ff,\n            limb1: 0xcc055f39a02506234d00e8eb,\n            limb2: 0xf706ef44c1d0af1,\n        },\n        w2: u288 {\n            limb0: 0x4605464626791e8c2d23914a,\n            limb1: 0x7da5ae6eba3609b9a258aeb5,\n            limb2: 0x22a5875254921ffd,\n        },\n        w3: u288 {\n            limb0: 0xa36080e7d54da24b20b89bf4,\n            limb1: 0x701510a38855b7b7bbcf7e5b,\n            limb2: 0xae461e60176f9fc,\n        },\n        w4: u288 {\n            limb0: 0x310a2f82381041f00ab0a97b,\n            limb1: 0x4ec0223c3dc06216c285cccb,\n            limb2: 0xaae21f01619c3fa,\n        },\n        w5: u288 {\n            limb0: 0xa206b95ba090599b7a5e8c2e,\n            limb1: 0xac945c0f61fb2673fb43b2aa,\n            limb2: 0xe203da0f9a03b1a,\n        },\n        w6: u288 {\n            limb0: 0x280fda652c0775ee0202237c,\n            limb1: 0x4ad4e2c546956c34ec381b30,\n            limb2: 0x1e2de9ed7968cac1,\n        },\n        w7: u288 {\n            limb0: 0xdff110a40e2837285a53cdc9,\n            limb1: 0x303a0db8cbb989aa911eec40,\n            limb2: 0xf3b13b4d08af03,\n        },\n        w8: u288 {\n            limb0: 0x622927b875c780e6f64e6abe,\n            limb1: 0xc79a5ba5d705c69b59a88b64,\n            limb2: 0x242bd1109f659686,\n        },\n        w9: u288 {\n            limb0: 0x47a207ed1fe3501ee8a66a12,\n            limb1: 0x92d2dc829a2f34f4ee684f04,\n            limb2: 0x1f626f25b03417e4,\n        },\n        w10: u288 {\n            limb0: 0x9cf6ea1c727f2d3d16f4095b,\n            limb1: 0xdca506524d7f4aeb8f093970,\n            limb2: 0x234cc399b032b927,\n        },\n        w11: u288 {\n            limb0: 0xc04208d92713b2b39e39f93,\n            limb1: 0x339c2266bcf3504782285acc,\n            limb2: 0x8dd178fb6d5acd8,\n        },\n    };\n    let lines = array![\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x13fc2cd2d19c89caf55a13a8,\n                limb1: 0x6a3f58c82d87f618a84e2bf0,\n                limb2: 0x18b4a261a618f14c,\n            },\n            r0a1: u288 {\n                limb0: 0xa12d7217806e8da77076b27c,\n                limb1: 0x868641e2c5440aefc45ec097,\n                limb2: 0x21a23fb8ecb967b4,\n            },\n            r1a0: u288 {\n                limb0: 0x9c39813fffc4c7b20cc17a76,\n                limb1: 0xf4a2427d51f32abb183e2860,\n                limb2: 0x2687525f35660d8f,\n            },\n            r1a1: u288 {\n                limb0: 0xc039aad6d5de6af4f5c6c0bb,\n                limb1: 0x3750d73ecbf7e1bca03d1cf2,\n                limb2: 0xecbbbebf08974c8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x13fc2cd2d19c89caf55a13a8,\n                limb1: 0x6a3f58c82d87f618a84e2bf0,\n                limb2: 0x18b4a261a618f14c,\n            },\n            r0a1: u288 {\n                limb0: 0xa12d7217806e8da77076b27c,\n                limb1: 0x868641e2c5440aefc45ec097,\n                limb2: 0x21a23fb8ecb967b4,\n            },\n            r1a0: u288 {\n                limb0: 0x9c39813fffc4c7b20cc17a76,\n                limb1: 0xf4a2427d51f32abb183e2860,\n                limb2: 0x2687525f35660d8f,\n            },\n            r1a1: u288 {\n                limb0: 0xc039aad6d5de6af4f5c6c0bb,\n                limb1: 0x3750d73ecbf7e1bca03d1cf2,\n                limb2: 0xecbbbebf08974c8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x54759dba6a84024be322e99f,\n                limb1: 0x4e10ecee53f96244ef333ea1,\n                limb2: 0x17afac113b18aedd,\n            },\n            r0a1: u288 {\n                limb0: 0xc7445875bbb1fe6f68064acb,\n                limb1: 0x31ca03d3bc3d4d6dd322a9f9,\n                limb2: 0xec20eb9f4783875,\n            },\n            r1a0: u288 {\n                limb0: 0xcc38494d3c5bc464cbbb82d1,\n                limb1: 0xc3ae03392f8e2da27f434230,\n                limb2: 0x9dcfc13abcb9299,\n            },\n            r1a1: u288 {\n                limb0: 0xa8381fb666422121e2b63c8c,\n                limb1: 0x80ff6e77b58976a0f7444d9e,\n                limb2: 0x21989286f0a82b61,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x52cd2431a88ef78ec482ce43,\n                limb1: 0xdb994b0266c17f5e8dded89e,\n                limb2: 0x107cd7f4d3a5c20f,\n            },\n            r0a1: u288 {\n                limb0: 0xb4e4c1a20d77277f1ecef6b,\n                limb1: 0x3fc13dd5746446d4e724e645,\n                limb2: 0x18ed3b584ac56dfe,\n            },\n            r1a0: u288 {\n                limb0: 0x3a537f5b220d3afddbd3be9d,\n                limb1: 0xeddb087729b8776323c5b8ee,\n                limb2: 0x1f5e5f61ae8c59e6,\n            },\n            r1a1: u288 {\n                limb0: 0x4fe2c98dc347d3ceb841acdf,\n                limb1: 0xe6a7f4bdda3390e40c62a288,\n                limb2: 0x2a277c878fe85394,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x54759dba6a84024be322e99f,\n                limb1: 0x4e10ecee53f96244ef333ea1,\n                limb2: 0x17afac113b18aedd,\n            },\n            r0a1: u288 {\n                limb0: 0xc7445875bbb1fe6f68064acb,\n                limb1: 0x31ca03d3bc3d4d6dd322a9f9,\n                limb2: 0xec20eb9f4783875,\n            },\n            r1a0: u288 {\n                limb0: 0xcc38494d3c5bc464cbbb82d1,\n                limb1: 0xc3ae03392f8e2da27f434230,\n                limb2: 0x9dcfc13abcb9299,\n            },\n            r1a1: u288 {\n                limb0: 0xa8381fb666422121e2b63c8c,\n                limb1: 0x80ff6e77b58976a0f7444d9e,\n                limb2: 0x21989286f0a82b61,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x52cd2431a88ef78ec482ce43,\n                limb1: 0xdb994b0266c17f5e8dded89e,\n                limb2: 0x107cd7f4d3a5c20f,\n            },\n            r0a1: u288 {\n                limb0: 0xb4e4c1a20d77277f1ecef6b,\n                limb1: 0x3fc13dd5746446d4e724e645,\n                limb2: 0x18ed3b584ac56dfe,\n            },\n            r1a0: u288 {\n                limb0: 0x3a537f5b220d3afddbd3be9d,\n                limb1: 0xeddb087729b8776323c5b8ee,\n                limb2: 0x1f5e5f61ae8c59e6,\n            },\n            r1a1: u288 {\n                limb0: 0x4fe2c98dc347d3ceb841acdf,\n                limb1: 0xe6a7f4bdda3390e40c62a288,\n                limb2: 0x2a277c878fe85394,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x53e743cfae97f5f975cf49cd,\n                limb1: 0x4a80ced31104872cc46b3fa6,\n                limb2: 0x26af32e1e4b51233,\n            },\n            r0a1: u288 {\n                limb0: 0x20537276ce9b6d318ea2f567,\n                limb1: 0xf0d44c7024c00ead73f13f53,\n                limb2: 0x13e665e776128b92,\n            },\n            r1a0: u288 {\n                limb0: 0xad9a173a5d331f5e8221dedc,\n                limb1: 0x11fc759697a8b7533cf8e7fd,\n                limb2: 0x281514af188294d6,\n            },\n            r1a1: u288 {\n                limb0: 0xcd59e5219230c0937878feff,\n                limb1: 0x85d1c954acb2bf4803a9e200,\n                limb2: 0x4229bcd8d07f251,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x53e743cfae97f5f975cf49cd,\n                limb1: 0x4a80ced31104872cc46b3fa6,\n                limb2: 0x26af32e1e4b51233,\n            },\n            r0a1: u288 {\n                limb0: 0x20537276ce9b6d318ea2f567,\n                limb1: 0xf0d44c7024c00ead73f13f53,\n                limb2: 0x13e665e776128b92,\n            },\n            r1a0: u288 {\n                limb0: 0xad9a173a5d331f5e8221dedc,\n                limb1: 0x11fc759697a8b7533cf8e7fd,\n                limb2: 0x281514af188294d6,\n            },\n            r1a1: u288 {\n                limb0: 0xcd59e5219230c0937878feff,\n                limb1: 0x85d1c954acb2bf4803a9e200,\n                limb2: 0x4229bcd8d07f251,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa4e9586d1e24c4e20dafd647,\n                limb1: 0x7f88fb247cdc95b6010d9e1,\n                limb2: 0x2fc2b7b6b4abaf58,\n            },\n            r0a1: u288 {\n                limb0: 0x9bbcc4481ffe859db49e1d98,\n                limb1: 0x13be783da3c9bea06995338d,\n                limb2: 0x2041db55312bcc8b,\n            },\n            r1a0: u288 {\n                limb0: 0x89721c899fdfd2776e1d4131,\n                limb1: 0x602e0c14a55d62b055ca8113,\n                limb2: 0x1fbed06b550ce696,\n            },\n            r1a1: u288 {\n                limb0: 0xfff5deaaf0a2cf3cca44de5c,\n                limb1: 0xd5efcfc87d7bc3cc0d3d9be1,\n                limb2: 0x18106453c47c63f5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x33720aad04d475cab632ceb4,\n                limb1: 0xd7b4eef636fd40d7ad28aaf7,\n                limb2: 0x25e952c734deb4a7,\n            },\n            r0a1: u288 {\n                limb0: 0x8c407e44689ce2ec6ea22bb3,\n                limb1: 0x10ab4ebbd57974771a9bfe37,\n                limb2: 0xc2d6b95efdcdb61,\n            },\n            r1a0: u288 {\n                limb0: 0xb03dd6a767461c482dcafa86,\n                limb1: 0xbbde25f51257025e9a28974,\n                limb2: 0x278e5fd00fb1b935,\n            },\n            r1a1: u288 {\n                limb0: 0x7bbd2c1bbf42867093a08f41,\n                limb1: 0xcc4d5b03ab2a82a219b80b43,\n                limb2: 0x2105554776d3cf89,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa4e9586d1e24c4e20dafd647,\n                limb1: 0x7f88fb247cdc95b6010d9e1,\n                limb2: 0x2fc2b7b6b4abaf58,\n            },\n            r0a1: u288 {\n                limb0: 0x9bbcc4481ffe859db49e1d98,\n                limb1: 0x13be783da3c9bea06995338d,\n                limb2: 0x2041db55312bcc8b,\n            },\n            r1a0: u288 {\n                limb0: 0x89721c899fdfd2776e1d4131,\n                limb1: 0x602e0c14a55d62b055ca8113,\n                limb2: 0x1fbed06b550ce696,\n            },\n            r1a1: u288 {\n                limb0: 0xfff5deaaf0a2cf3cca44de5c,\n                limb1: 0xd5efcfc87d7bc3cc0d3d9be1,\n                limb2: 0x18106453c47c63f5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x33720aad04d475cab632ceb4,\n                limb1: 0xd7b4eef636fd40d7ad28aaf7,\n                limb2: 0x25e952c734deb4a7,\n            },\n            r0a1: u288 {\n                limb0: 0x8c407e44689ce2ec6ea22bb3,\n                limb1: 0x10ab4ebbd57974771a9bfe37,\n                limb2: 0xc2d6b95efdcdb61,\n            },\n            r1a0: u288 {\n                limb0: 0xb03dd6a767461c482dcafa86,\n                limb1: 0xbbde25f51257025e9a28974,\n                limb2: 0x278e5fd00fb1b935,\n            },\n            r1a1: u288 {\n                limb0: 0x7bbd2c1bbf42867093a08f41,\n                limb1: 0xcc4d5b03ab2a82a219b80b43,\n                limb2: 0x2105554776d3cf89,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x32e40fb4d2025cd0e82ced6f,\n                limb1: 0xbc0608261a5f898f868a08d8,\n                limb2: 0x282ba090b78fca30,\n            },\n            r0a1: u288 {\n                limb0: 0xdfe55dec41a63986c6aceff7,\n                limb1: 0x2555dd47b4f4cd057f63d51,\n                limb2: 0xf5a1242bc10ee1f,\n            },\n            r1a0: u288 {\n                limb0: 0x590c3a14f70d93710ad8d62d,\n                limb1: 0x91b6b9b5a53eb9825ebe4230,\n                limb2: 0x2f3c78d5b1a40d44,\n            },\n            r1a1: u288 {\n                limb0: 0x7fa2feee5a3d934393f3dcdb,\n                limb1: 0x216af82d8ef724bef3a0cff9,\n                limb2: 0x2a3b1b41079d39de,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x32e40fb4d2025cd0e82ced6f,\n                limb1: 0xbc0608261a5f898f868a08d8,\n                limb2: 0x282ba090b78fca30,\n            },\n            r0a1: u288 {\n                limb0: 0xdfe55dec41a63986c6aceff7,\n                limb1: 0x2555dd47b4f4cd057f63d51,\n                limb2: 0xf5a1242bc10ee1f,\n            },\n            r1a0: u288 {\n                limb0: 0x590c3a14f70d93710ad8d62d,\n                limb1: 0x91b6b9b5a53eb9825ebe4230,\n                limb2: 0x2f3c78d5b1a40d44,\n            },\n            r1a1: u288 {\n                limb0: 0x7fa2feee5a3d934393f3dcdb,\n                limb1: 0x216af82d8ef724bef3a0cff9,\n                limb2: 0x2a3b1b41079d39de,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x70f807c9bd9cc653569a88c0,\n                limb1: 0xd3bd9e80a4c0879b8c54502f,\n                limb2: 0x78f06a79ebcc122,\n            },\n            r0a1: u288 {\n                limb0: 0x1f4b6ad4455ba03d167d7fb3,\n                limb1: 0xd11276f3c684ac26d1a62390,\n                limb2: 0x2e376293ba7c79b7,\n            },\n            r1a0: u288 {\n                limb0: 0xe7a2888c80e82ed69b2c357d,\n                limb1: 0xa5057b1db97b9c3edd232a43,\n                limb2: 0x1eed211bc2e66931,\n            },\n            r1a1: u288 {\n                limb0: 0xaca29d5ef46c59744a30d2e,\n                limb1: 0xfeb93f366d5295ce80bf592,\n                limb2: 0x697b2aa97f68681,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x70f807c9bd9cc653569a88c0,\n                limb1: 0xd3bd9e80a4c0879b8c54502f,\n                limb2: 0x78f06a79ebcc122,\n            },\n            r0a1: u288 {\n                limb0: 0x1f4b6ad4455ba03d167d7fb3,\n                limb1: 0xd11276f3c684ac26d1a62390,\n                limb2: 0x2e376293ba7c79b7,\n            },\n            r1a0: u288 {\n                limb0: 0xe7a2888c80e82ed69b2c357d,\n                limb1: 0xa5057b1db97b9c3edd232a43,\n                limb2: 0x1eed211bc2e66931,\n            },\n            r1a1: u288 {\n                limb0: 0xaca29d5ef46c59744a30d2e,\n                limb1: 0xfeb93f366d5295ce80bf592,\n                limb2: 0x697b2aa97f68681,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x21c98846074d27fd948bf071,\n                limb1: 0x2677e986de7a6bb799458f9,\n                limb2: 0xbfae24b95db3021,\n            },\n            r0a1: u288 {\n                limb0: 0x241a18abd825d1d53b4b1cd1,\n                limb1: 0x1153ff7044093f39311453e,\n                limb2: 0x7ef5b22d955cb08,\n            },\n            r1a0: u288 {\n                limb0: 0xfde2d3f182c7404c916ddaee,\n                limb1: 0x51059992e83a57e0357b63f3,\n                limb2: 0x5de94c1a6dce11c,\n            },\n            r1a1: u288 {\n                limb0: 0xa897c205d1548b407d3c7597,\n                limb1: 0x3e8437329ebf4e2f1fe3b370,\n                limb2: 0x1e321d523b1a40f8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x21c98846074d27fd948bf071,\n                limb1: 0x2677e986de7a6bb799458f9,\n                limb2: 0xbfae24b95db3021,\n            },\n            r0a1: u288 {\n                limb0: 0x241a18abd825d1d53b4b1cd1,\n                limb1: 0x1153ff7044093f39311453e,\n                limb2: 0x7ef5b22d955cb08,\n            },\n            r1a0: u288 {\n                limb0: 0xfde2d3f182c7404c916ddaee,\n                limb1: 0x51059992e83a57e0357b63f3,\n                limb2: 0x5de94c1a6dce11c,\n            },\n            r1a1: u288 {\n                limb0: 0xa897c205d1548b407d3c7597,\n                limb1: 0x3e8437329ebf4e2f1fe3b370,\n                limb2: 0x1e321d523b1a40f8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3b7c7dfdc0377c6e77a69a78,\n                limb1: 0x56046802d2acc2048f6473b0,\n                limb2: 0x1e538130528f2037,\n            },\n            r0a1: u288 {\n                limb0: 0xf8d9c38bafe394d496ec036b,\n                limb1: 0xa7178b19843c74a1c9ffdec9,\n                limb2: 0x754d38a41b241f5,\n            },\n            r1a0: u288 {\n                limb0: 0x5399cd6b03cd5dd0e202dc18,\n                limb1: 0x27132b0286f70ab0f9d3f154,\n                limb2: 0x209e0408c047ebf6,\n            },\n            r1a1: u288 {\n                limb0: 0xa73bf15125290077d6d0d018,\n                limb1: 0xe07ebcc1ab67f9cf97be2e80,\n                limb2: 0x217014f56f93c3a2,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb565c9168c2f34f5d1a48833,\n                limb1: 0x9f2143f7ae3a47cffb1e8fda,\n                limb2: 0xaebc823dc1fcd02,\n            },\n            r0a1: u288 {\n                limb0: 0x59b0e8a0118c2f5ec29f117b,\n                limb1: 0xd1d302931406f12c6271f149,\n                limb2: 0x18a65ecc25e7a0e3,\n            },\n            r1a0: u288 {\n                limb0: 0xcf4c8bcea64951980f866870,\n                limb1: 0xd708dcd6450bd5f68bed09a3,\n                limb2: 0xb3c0fa83c8b5f48,\n            },\n            r1a1: u288 {\n                limb0: 0xc45fac32b4b9fb37bdaea5f3,\n                limb1: 0xc46068320849da30be837df5,\n                limb2: 0x2c6ea62118c44345,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3b7c7dfdc0377c6e77a69a78,\n                limb1: 0x56046802d2acc2048f6473b0,\n                limb2: 0x1e538130528f2037,\n            },\n            r0a1: u288 {\n                limb0: 0xf8d9c38bafe394d496ec036b,\n                limb1: 0xa7178b19843c74a1c9ffdec9,\n                limb2: 0x754d38a41b241f5,\n            },\n            r1a0: u288 {\n                limb0: 0x5399cd6b03cd5dd0e202dc18,\n                limb1: 0x27132b0286f70ab0f9d3f154,\n                limb2: 0x209e0408c047ebf6,\n            },\n            r1a1: u288 {\n                limb0: 0xa73bf15125290077d6d0d018,\n                limb1: 0xe07ebcc1ab67f9cf97be2e80,\n                limb2: 0x217014f56f93c3a2,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb565c9168c2f34f5d1a48833,\n                limb1: 0x9f2143f7ae3a47cffb1e8fda,\n                limb2: 0xaebc823dc1fcd02,\n            },\n            r0a1: u288 {\n                limb0: 0x59b0e8a0118c2f5ec29f117b,\n                limb1: 0xd1d302931406f12c6271f149,\n                limb2: 0x18a65ecc25e7a0e3,\n            },\n            r1a0: u288 {\n                limb0: 0xcf4c8bcea64951980f866870,\n                limb1: 0xd708dcd6450bd5f68bed09a3,\n                limb2: 0xb3c0fa83c8b5f48,\n            },\n            r1a1: u288 {\n                limb0: 0xc45fac32b4b9fb37bdaea5f3,\n                limb1: 0xc46068320849da30be837df5,\n                limb2: 0x2c6ea62118c44345,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9611d44432206361cd7f3473,\n                limb1: 0xd34ce79c946302bdbf8f72de,\n                limb2: 0x1fd5b330038873b0,\n            },\n            r0a1: u288 {\n                limb0: 0x71a17fc89e530dda653c4220,\n                limb1: 0x37852a7f67a5fa74c6613c00,\n                limb2: 0x1e11dde6c5c9261d,\n            },\n            r1a0: u288 {\n                limb0: 0xf8f9c22149b11566f643511e,\n                limb1: 0xeafd5e990baff3df753b4545,\n                limb2: 0x2e3219be0c5ae36a,\n            },\n            r1a1: u288 {\n                limb0: 0x8e2193129c343cb3a4db1f47,\n                limb1: 0xf56af697b4d714d190d603dd,\n                limb2: 0x2d3349ba9a465783,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9611d44432206361cd7f3473,\n                limb1: 0xd34ce79c946302bdbf8f72de,\n                limb2: 0x1fd5b330038873b0,\n            },\n            r0a1: u288 {\n                limb0: 0x71a17fc89e530dda653c4220,\n                limb1: 0x37852a7f67a5fa74c6613c00,\n                limb2: 0x1e11dde6c5c9261d,\n            },\n            r1a0: u288 {\n                limb0: 0xf8f9c22149b11566f643511e,\n                limb1: 0xeafd5e990baff3df753b4545,\n                limb2: 0x2e3219be0c5ae36a,\n            },\n            r1a1: u288 {\n                limb0: 0x8e2193129c343cb3a4db1f47,\n                limb1: 0xf56af697b4d714d190d603dd,\n                limb2: 0x2d3349ba9a465783,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x196665c03009ef576fd6961,\n                limb1: 0x2719b6e1af31847d795deb9e,\n                limb2: 0x155d054c2097ab50,\n            },\n            r0a1: u288 {\n                limb0: 0x4e6b687ca0dfecf549daeef5,\n                limb1: 0xb4e4f54e1d35a5cd994c6054,\n                limb2: 0x11c8b740bfbe502,\n            },\n            r1a0: u288 {\n                limb0: 0xbc9857a840b86d1d7ffb6b9d,\n                limb1: 0x3315341c9d5a9ff2955435b2,\n                limb2: 0x30447649e2f50c77,\n            },\n            r1a1: u288 {\n                limb0: 0x9a187f6cc5ad3146f48c70be,\n                limb1: 0x9809e5f4637c60447e7cfdef,\n                limb2: 0x667330690960cd,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x215d0ebb801c8a2c8b0ef9e1,\n                limb1: 0x89edb45dc7e6f74cc7304d78,\n                limb2: 0x2edb9f6a4282ba3f,\n            },\n            r0a1: u288 {\n                limb0: 0x78cef612dbc9013e22395718,\n                limb1: 0x68c8984791d65522cdabe9da,\n                limb2: 0x5cd4d2fb36b3baf,\n            },\n            r1a0: u288 {\n                limb0: 0x28728de61873d65855d29e69,\n                limb1: 0x74abfdede8c4f6d81e7da1bd,\n                limb2: 0x199f58d62645184b,\n            },\n            r1a1: u288 {\n                limb0: 0xaff5645c427c1f808f890796,\n                limb1: 0x6040d76177456d9ec3d7dd19,\n                limb2: 0xdead02313d94e2c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x196665c03009ef576fd6961,\n                limb1: 0x2719b6e1af31847d795deb9e,\n                limb2: 0x155d054c2097ab50,\n            },\n            r0a1: u288 {\n                limb0: 0x4e6b687ca0dfecf549daeef5,\n                limb1: 0xb4e4f54e1d35a5cd994c6054,\n                limb2: 0x11c8b740bfbe502,\n            },\n            r1a0: u288 {\n                limb0: 0xbc9857a840b86d1d7ffb6b9d,\n                limb1: 0x3315341c9d5a9ff2955435b2,\n                limb2: 0x30447649e2f50c77,\n            },\n            r1a1: u288 {\n                limb0: 0x9a187f6cc5ad3146f48c70be,\n                limb1: 0x9809e5f4637c60447e7cfdef,\n                limb2: 0x667330690960cd,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x215d0ebb801c8a2c8b0ef9e1,\n                limb1: 0x89edb45dc7e6f74cc7304d78,\n                limb2: 0x2edb9f6a4282ba3f,\n            },\n            r0a1: u288 {\n                limb0: 0x78cef612dbc9013e22395718,\n                limb1: 0x68c8984791d65522cdabe9da,\n                limb2: 0x5cd4d2fb36b3baf,\n            },\n            r1a0: u288 {\n                limb0: 0x28728de61873d65855d29e69,\n                limb1: 0x74abfdede8c4f6d81e7da1bd,\n                limb2: 0x199f58d62645184b,\n            },\n            r1a1: u288 {\n                limb0: 0xaff5645c427c1f808f890796,\n                limb1: 0x6040d76177456d9ec3d7dd19,\n                limb2: 0xdead02313d94e2c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7e32624925ec3a6751ef2472,\n                limb1: 0x454a7f1340778a7b5e1fe904,\n                limb2: 0x20906f33c00c8d33,\n            },\n            r0a1: u288 {\n                limb0: 0x11710c1c383a8014976022cf,\n                limb1: 0x62f932c9ffa1da884f9fceaa,\n                limb2: 0xb62b0be184f4494,\n            },\n            r1a0: u288 {\n                limb0: 0xebd3310b943ec2f49ece0892,\n                limb1: 0x6a06d1930900d0bbc6221220,\n                limb2: 0x116715e97fb69aaa,\n            },\n            r1a1: u288 {\n                limb0: 0x1cc4a1667629f976c64db1fd,\n                limb1: 0x965c2705725d60a7cc1550d2,\n                limb2: 0x10a0fbe4d0a5883d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7e32624925ec3a6751ef2472,\n                limb1: 0x454a7f1340778a7b5e1fe904,\n                limb2: 0x20906f33c00c8d33,\n            },\n            r0a1: u288 {\n                limb0: 0x11710c1c383a8014976022cf,\n                limb1: 0x62f932c9ffa1da884f9fceaa,\n                limb2: 0xb62b0be184f4494,\n            },\n            r1a0: u288 {\n                limb0: 0xebd3310b943ec2f49ece0892,\n                limb1: 0x6a06d1930900d0bbc6221220,\n                limb2: 0x116715e97fb69aaa,\n            },\n            r1a1: u288 {\n                limb0: 0x1cc4a1667629f976c64db1fd,\n                limb1: 0x965c2705725d60a7cc1550d2,\n                limb2: 0x10a0fbe4d0a5883d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xf29c8da48273fcc3ed42600f,\n                limb1: 0xc9085080314ee52208dbeaa3,\n                limb2: 0x1c97df69a5dee342,\n            },\n            r0a1: u288 {\n                limb0: 0xe90ffc7dc1134df60473a9b0,\n                limb1: 0x1785bba891bbf8bf4d028c93,\n                limb2: 0x2c73ffd5720b59fe,\n            },\n            r1a0: u288 {\n                limb0: 0xaa4625384e00cc7a1d26f59c,\n                limb1: 0x7e2bd7ea82f7679164b9a298,\n                limb2: 0x1ceb19ac1c28c731,\n            },\n            r1a1: u288 {\n                limb0: 0x8570cac2138c94f9d261d52,\n                limb1: 0x4750472206e83d3ee38e9950,\n                limb2: 0x159e78c2f8fb9e87,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xf29c8da48273fcc3ed42600f,\n                limb1: 0xc9085080314ee52208dbeaa3,\n                limb2: 0x1c97df69a5dee342,\n            },\n            r0a1: u288 {\n                limb0: 0xe90ffc7dc1134df60473a9b0,\n                limb1: 0x1785bba891bbf8bf4d028c93,\n                limb2: 0x2c73ffd5720b59fe,\n            },\n            r1a0: u288 {\n                limb0: 0xaa4625384e00cc7a1d26f59c,\n                limb1: 0x7e2bd7ea82f7679164b9a298,\n                limb2: 0x1ceb19ac1c28c731,\n            },\n            r1a1: u288 {\n                limb0: 0x8570cac2138c94f9d261d52,\n                limb1: 0x4750472206e83d3ee38e9950,\n                limb2: 0x159e78c2f8fb9e87,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xf0061f0ffdd6c080cb6db4f2,\n                limb1: 0x3156ebb6ec8163f1daaf0fef,\n                limb2: 0x16a1d8e8a632ecda,\n            },\n            r0a1: u288 {\n                limb0: 0x8944acaa1fea52aec014ca14,\n                limb1: 0xaef310c4279054f6513952eb,\n                limb2: 0x187dba91d42da551,\n            },\n            r1a0: u288 {\n                limb0: 0x115802cd86218654ef41231b,\n                limb1: 0x6d01289ae998e8d09b1c7304,\n                limb2: 0x8e3eaae865b5448,\n            },\n            r1a1: u288 {\n                limb0: 0x9562b590b59641ca26308faa,\n                limb1: 0x75559bf6ea06aaf7df07c197,\n                limb2: 0x8245163a7eeeada,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xf0061f0ffdd6c080cb6db4f2,\n                limb1: 0x3156ebb6ec8163f1daaf0fef,\n                limb2: 0x16a1d8e8a632ecda,\n            },\n            r0a1: u288 {\n                limb0: 0x8944acaa1fea52aec014ca14,\n                limb1: 0xaef310c4279054f6513952eb,\n                limb2: 0x187dba91d42da551,\n            },\n            r1a0: u288 {\n                limb0: 0x115802cd86218654ef41231b,\n                limb1: 0x6d01289ae998e8d09b1c7304,\n                limb2: 0x8e3eaae865b5448,\n            },\n            r1a1: u288 {\n                limb0: 0x9562b590b59641ca26308faa,\n                limb1: 0x75559bf6ea06aaf7df07c197,\n                limb2: 0x8245163a7eeeada,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2cd350402831a212e938de81,\n                limb1: 0xed9a7a80de5e1ec0f4b2c4db,\n                limb2: 0x2f04e512c778c8a3,\n            },\n            r0a1: u288 {\n                limb0: 0x8cd4823620230108e89a1e94,\n                limb1: 0x2dc2d1e59111f47e7663cb36,\n                limb2: 0x8cbcece7fd20252,\n            },\n            r1a0: u288 {\n                limb0: 0x6bbf0471a8988b16ca947450,\n                limb1: 0xf7911a0d3db83d1956cc277b,\n                limb2: 0x7db791f07f93808,\n            },\n            r1a1: u288 {\n                limb0: 0xd46f340dfdea0b0bef63e487,\n                limb1: 0xbd7520f6a22899dfe8887b8b,\n                limb2: 0x10f9c9a88e425f37,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6e52232ec1b38ff612c0a492,\n                limb1: 0x7839f69ef41e655aea744d38,\n                limb2: 0x20ab9a05d7ad1f52,\n            },\n            r0a1: u288 {\n                limb0: 0x8bcdd6166e6ee552371e4636,\n                limb1: 0x1db9fb889b69e26b47964933,\n                limb2: 0x15c1b7b4dc794f53,\n            },\n            r1a0: u288 {\n                limb0: 0xdb2e4167ad301668392630d4,\n                limb1: 0x78d41ddd629aa47464b2954,\n                limb2: 0x122cf4989cd8fabc,\n            },\n            r1a1: u288 {\n                limb0: 0xd20b6faf7e40f5ceda0b861d,\n                limb1: 0xaa5af5b00dbdc5f5712dc3bc,\n                limb2: 0x447f15fd6766a8b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2cd350402831a212e938de81,\n                limb1: 0xed9a7a80de5e1ec0f4b2c4db,\n                limb2: 0x2f04e512c778c8a3,\n            },\n            r0a1: u288 {\n                limb0: 0x8cd4823620230108e89a1e94,\n                limb1: 0x2dc2d1e59111f47e7663cb36,\n                limb2: 0x8cbcece7fd20252,\n            },\n            r1a0: u288 {\n                limb0: 0x6bbf0471a8988b16ca947450,\n                limb1: 0xf7911a0d3db83d1956cc277b,\n                limb2: 0x7db791f07f93808,\n            },\n            r1a1: u288 {\n                limb0: 0xd46f340dfdea0b0bef63e487,\n                limb1: 0xbd7520f6a22899dfe8887b8b,\n                limb2: 0x10f9c9a88e425f37,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6e52232ec1b38ff612c0a492,\n                limb1: 0x7839f69ef41e655aea744d38,\n                limb2: 0x20ab9a05d7ad1f52,\n            },\n            r0a1: u288 {\n                limb0: 0x8bcdd6166e6ee552371e4636,\n                limb1: 0x1db9fb889b69e26b47964933,\n                limb2: 0x15c1b7b4dc794f53,\n            },\n            r1a0: u288 {\n                limb0: 0xdb2e4167ad301668392630d4,\n                limb1: 0x78d41ddd629aa47464b2954,\n                limb2: 0x122cf4989cd8fabc,\n            },\n            r1a1: u288 {\n                limb0: 0xd20b6faf7e40f5ceda0b861d,\n                limb1: 0xaa5af5b00dbdc5f5712dc3bc,\n                limb2: 0x447f15fd6766a8b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6411c143a41cb76ad19b3fe9,\n                limb1: 0xa0a964f97d57b7b7db78d2bb,\n                limb2: 0x2bf9110ff7c2fdb2,\n            },\n            r0a1: u288 {\n                limb0: 0xe183b2e52b5137dcbd33bcb9,\n                limb1: 0xa82fec8a97ce059d24aa3b35,\n                limb2: 0x19d11db2c569eece,\n            },\n            r1a0: u288 {\n                limb0: 0xcce8df3877331ae709ba92e,\n                limb1: 0x77be8fc4e226cee90a7f955a,\n                limb2: 0x1609775efcfbed68,\n            },\n            r1a1: u288 {\n                limb0: 0x39a8e985d0dad03eb162f6be,\n                limb1: 0x6e34512435de4fa5a24bd9f1,\n                limb2: 0x48ac1c32967705c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6411c143a41cb76ad19b3fe9,\n                limb1: 0xa0a964f97d57b7b7db78d2bb,\n                limb2: 0x2bf9110ff7c2fdb2,\n            },\n            r0a1: u288 {\n                limb0: 0xe183b2e52b5137dcbd33bcb9,\n                limb1: 0xa82fec8a97ce059d24aa3b35,\n                limb2: 0x19d11db2c569eece,\n            },\n            r1a0: u288 {\n                limb0: 0xcce8df3877331ae709ba92e,\n                limb1: 0x77be8fc4e226cee90a7f955a,\n                limb2: 0x1609775efcfbed68,\n            },\n            r1a1: u288 {\n                limb0: 0x39a8e985d0dad03eb162f6be,\n                limb1: 0x6e34512435de4fa5a24bd9f1,\n                limb2: 0x48ac1c32967705c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x278415dcf736521423d0298,\n                limb1: 0x55397f4f2d8ce7f19b570e77,\n                limb2: 0x2a99b961769beca0,\n            },\n            r0a1: u288 {\n                limb0: 0xe29c48b2596ae6288dbb21a1,\n                limb1: 0x9588bace99c7dd5849e0b5de,\n                limb2: 0x266a6e7880114997,\n            },\n            r1a0: u288 {\n                limb0: 0x67864f025c9d20172d805f80,\n                limb1: 0xf9b4700f91ec6d99a9fbabcc,\n                limb2: 0x72e5c24a77ea6eb,\n            },\n            r1a1: u288 {\n                limb0: 0x71a14ab9325b2c9548564f04,\n                limb1: 0xc2155e899962d27d2aa8947e,\n                limb2: 0x60eb66c4c422714,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x278415dcf736521423d0298,\n                limb1: 0x55397f4f2d8ce7f19b570e77,\n                limb2: 0x2a99b961769beca0,\n            },\n            r0a1: u288 {\n                limb0: 0xe29c48b2596ae6288dbb21a1,\n                limb1: 0x9588bace99c7dd5849e0b5de,\n                limb2: 0x266a6e7880114997,\n            },\n            r1a0: u288 {\n                limb0: 0x67864f025c9d20172d805f80,\n                limb1: 0xf9b4700f91ec6d99a9fbabcc,\n                limb2: 0x72e5c24a77ea6eb,\n            },\n            r1a1: u288 {\n                limb0: 0x71a14ab9325b2c9548564f04,\n                limb1: 0xc2155e899962d27d2aa8947e,\n                limb2: 0x60eb66c4c422714,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x14d6ff22b6658a773bf98a76,\n                limb1: 0x68581150a1ef5c63bc535636,\n                limb2: 0x2e657f4210ad1c7f,\n            },\n            r0a1: u288 {\n                limb0: 0x7b86a06e863df1f55189a452,\n                limb1: 0xebbdb11f75deaae91545eb38,\n                limb2: 0x226b31e0c2e0506a,\n            },\n            r1a0: u288 {\n                limb0: 0x68adcad192fe0de39e37b0a9,\n                limb1: 0xcd9ca0c35ee7a0d1b7f70eb0,\n                limb2: 0x1c98b0667298ccde,\n            },\n            r1a1: u288 {\n                limb0: 0x803a0d1125f5fa7b64acaedc,\n                limb1: 0xf2f903ea7789b90ca1596a30,\n                limb2: 0x1864a718bd9a7a91,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x64f25c9b7128e749ef25f105,\n                limb1: 0xa5df6656e0fe3aa5e76219c,\n                limb2: 0x10eefd3c4ed405d9,\n            },\n            r0a1: u288 {\n                limb0: 0x5cfdf017ce0e5290a9af8685,\n                limb1: 0xfef7491b535ef1df815f8e9,\n                limb2: 0x14736e677cde8946,\n            },\n            r1a0: u288 {\n                limb0: 0x105ce8ec6221751c0a741801,\n                limb1: 0xc8a91f64511eb8ec67bd0a5e,\n                limb2: 0x24b72e0bef64ca50,\n            },\n            r1a1: u288 {\n                limb0: 0x7b6d0c7da1f527d186f153f4,\n                limb1: 0x3af4476ab8b4bf6bfaa284c4,\n                limb2: 0x14fd84d626179073,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x14d6ff22b6658a773bf98a76,\n                limb1: 0x68581150a1ef5c63bc535636,\n                limb2: 0x2e657f4210ad1c7f,\n            },\n            r0a1: u288 {\n                limb0: 0x7b86a06e863df1f55189a452,\n                limb1: 0xebbdb11f75deaae91545eb38,\n                limb2: 0x226b31e0c2e0506a,\n            },\n            r1a0: u288 {\n                limb0: 0x68adcad192fe0de39e37b0a9,\n                limb1: 0xcd9ca0c35ee7a0d1b7f70eb0,\n                limb2: 0x1c98b0667298ccde,\n            },\n            r1a1: u288 {\n                limb0: 0x803a0d1125f5fa7b64acaedc,\n                limb1: 0xf2f903ea7789b90ca1596a30,\n                limb2: 0x1864a718bd9a7a91,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x64f25c9b7128e749ef25f105,\n                limb1: 0xa5df6656e0fe3aa5e76219c,\n                limb2: 0x10eefd3c4ed405d9,\n            },\n            r0a1: u288 {\n                limb0: 0x5cfdf017ce0e5290a9af8685,\n                limb1: 0xfef7491b535ef1df815f8e9,\n                limb2: 0x14736e677cde8946,\n            },\n            r1a0: u288 {\n                limb0: 0x105ce8ec6221751c0a741801,\n                limb1: 0xc8a91f64511eb8ec67bd0a5e,\n                limb2: 0x24b72e0bef64ca50,\n            },\n            r1a1: u288 {\n                limb0: 0x7b6d0c7da1f527d186f153f4,\n                limb1: 0x3af4476ab8b4bf6bfaa284c4,\n                limb2: 0x14fd84d626179073,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x95531ad3030b96d815ffc130,\n                limb1: 0x3e57484f7c4a6080aeeb5389,\n                limb2: 0x258e31db306db347,\n            },\n            r0a1: u288 {\n                limb0: 0x9083b01855e312eac6d42b37,\n                limb1: 0x2345be89c9e05ddcaca68d44,\n                limb2: 0x23c9dd3674d542b2,\n            },\n            r1a0: u288 {\n                limb0: 0xc79418d3ebbe74ae9a0dfa4,\n                limb1: 0x14b66f0d16a1c604533cf0d6,\n                limb2: 0x3acddc2145f3eec,\n            },\n            r1a1: u288 {\n                limb0: 0x1288e3b3be0ac21711e0f760,\n                limb1: 0xd0bc22f88b8051ffc112590a,\n                limb2: 0xdd5bdbb302158c1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xdf325bffc4f75bde16339c21,\n                limb1: 0x59e1b11a922fd25b46da34ad,\n                limb2: 0x1df431a8b518c319,\n            },\n            r0a1: u288 {\n                limb0: 0xa34e525fbce9d573f316a8e1,\n                limb1: 0x5715c100bd0d4bc47e1199aa,\n                limb2: 0x111fd4d9fe3f4aa8,\n            },\n            r1a0: u288 {\n                limb0: 0x4ddeb02cca8556d49bb4d13b,\n                limb1: 0x56b8e64426fbb6983377fe9f,\n                limb2: 0x166b7c9a7bb6eb74,\n            },\n            r1a1: u288 {\n                limb0: 0x8ef5c3ef69254a68b5ffcf4d,\n                limb1: 0xd6eaa92d6814c39953c833ca,\n                limb2: 0x8cda70783ba41fc,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x95531ad3030b96d815ffc130,\n                limb1: 0x3e57484f7c4a6080aeeb5389,\n                limb2: 0x258e31db306db347,\n            },\n            r0a1: u288 {\n                limb0: 0x9083b01855e312eac6d42b37,\n                limb1: 0x2345be89c9e05ddcaca68d44,\n                limb2: 0x23c9dd3674d542b2,\n            },\n            r1a0: u288 {\n                limb0: 0xc79418d3ebbe74ae9a0dfa4,\n                limb1: 0x14b66f0d16a1c604533cf0d6,\n                limb2: 0x3acddc2145f3eec,\n            },\n            r1a1: u288 {\n                limb0: 0x1288e3b3be0ac21711e0f760,\n                limb1: 0xd0bc22f88b8051ffc112590a,\n                limb2: 0xdd5bdbb302158c1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xdf325bffc4f75bde16339c21,\n                limb1: 0x59e1b11a922fd25b46da34ad,\n                limb2: 0x1df431a8b518c319,\n            },\n            r0a1: u288 {\n                limb0: 0xa34e525fbce9d573f316a8e1,\n                limb1: 0x5715c100bd0d4bc47e1199aa,\n                limb2: 0x111fd4d9fe3f4aa8,\n            },\n            r1a0: u288 {\n                limb0: 0x4ddeb02cca8556d49bb4d13b,\n                limb1: 0x56b8e64426fbb6983377fe9f,\n                limb2: 0x166b7c9a7bb6eb74,\n            },\n            r1a1: u288 {\n                limb0: 0x8ef5c3ef69254a68b5ffcf4d,\n                limb1: 0xd6eaa92d6814c39953c833ca,\n                limb2: 0x8cda70783ba41fc,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4e44a9b72f424336295cd2d4,\n                limb1: 0xe43008eebda999077f586dd0,\n                limb2: 0x2833eade2a41fefe,\n            },\n            r0a1: u288 {\n                limb0: 0xa23faf119ba1e712eaa2ad9d,\n                limb1: 0xffd42ca54f7c46f0e5dd7375,\n                limb2: 0x14f3d66f92191f3d,\n            },\n            r1a0: u288 {\n                limb0: 0xde664b9a5bb68f83b166d13f,\n                limb1: 0x504eada56a1604828ac250aa,\n                limb2: 0x1a59ac93ced3882,\n            },\n            r1a1: u288 {\n                limb0: 0x57e2ca35f761f0a43dca1cf5,\n                limb1: 0x9d1dae4b976d26ff058b20f6,\n                limb2: 0x27083f11525f853e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4e44a9b72f424336295cd2d4,\n                limb1: 0xe43008eebda999077f586dd0,\n                limb2: 0x2833eade2a41fefe,\n            },\n            r0a1: u288 {\n                limb0: 0xa23faf119ba1e712eaa2ad9d,\n                limb1: 0xffd42ca54f7c46f0e5dd7375,\n                limb2: 0x14f3d66f92191f3d,\n            },\n            r1a0: u288 {\n                limb0: 0xde664b9a5bb68f83b166d13f,\n                limb1: 0x504eada56a1604828ac250aa,\n                limb2: 0x1a59ac93ced3882,\n            },\n            r1a1: u288 {\n                limb0: 0x57e2ca35f761f0a43dca1cf5,\n                limb1: 0x9d1dae4b976d26ff058b20f6,\n                limb2: 0x27083f11525f853e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xacffdc27d3923f5779c9f561,\n                limb1: 0x6acc5c81d640b06edf8669e7,\n                limb2: 0x23d3ecf6cd5ae000,\n            },\n            r0a1: u288 {\n                limb0: 0xc576257e34519bcbfe12a0e5,\n                limb1: 0x6dfda810453128aa1b9ff5f3,\n                limb2: 0x272b3f6cde8f6f3d,\n            },\n            r1a0: u288 {\n                limb0: 0x3314182b61b3a1153d51085c,\n                limb1: 0x78d944875a2068000dc27e73,\n                limb2: 0x2184b9ce45b284ff,\n            },\n            r1a1: u288 {\n                limb0: 0xa3831da9efe63936fe510a88,\n                limb1: 0xd853b46a2f7648744b5bbcea,\n                limb2: 0x2437a9f7f5559f66,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xacffdc27d3923f5779c9f561,\n                limb1: 0x6acc5c81d640b06edf8669e7,\n                limb2: 0x23d3ecf6cd5ae000,\n            },\n            r0a1: u288 {\n                limb0: 0xc576257e34519bcbfe12a0e5,\n                limb1: 0x6dfda810453128aa1b9ff5f3,\n                limb2: 0x272b3f6cde8f6f3d,\n            },\n            r1a0: u288 {\n                limb0: 0x3314182b61b3a1153d51085c,\n                limb1: 0x78d944875a2068000dc27e73,\n                limb2: 0x2184b9ce45b284ff,\n            },\n            r1a1: u288 {\n                limb0: 0xa3831da9efe63936fe510a88,\n                limb1: 0xd853b46a2f7648744b5bbcea,\n                limb2: 0x2437a9f7f5559f66,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x373d78cacc3a213ab7a5dc77,\n                limb1: 0x2c4c9295f1b3e767a376d95a,\n                limb2: 0x6fa8606535c131,\n            },\n            r0a1: u288 {\n                limb0: 0x7a037d066e3015f12b9bb899,\n                limb1: 0x2df06eb9be7dd1d34dd0ce6e,\n                limb2: 0x2bfecfb6faa40681,\n            },\n            r1a0: u288 {\n                limb0: 0x767f84f556bc0e82acc4c2fc,\n                limb1: 0xdc285959286fe86c69fd09c6,\n                limb2: 0xddf35d64e052591,\n            },\n            r1a1: u288 {\n                limb0: 0xba3bf8a2a744c4be716d10a3,\n                limb1: 0x704558fde5a2dd4610092a58,\n                limb2: 0x24381fac38d1c2f4,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8bfb882fe3e87bf7f06a534,\n                limb1: 0x60e74ba16f35b38925253fa1,\n                limb2: 0x105952dd8d3cb0fb,\n            },\n            r0a1: u288 {\n                limb0: 0x86a65a5ae488b0d28900cf53,\n                limb1: 0x4fca5c6edee392882c778363,\n                limb2: 0x160b4e8a7969f551,\n            },\n            r1a0: u288 {\n                limb0: 0x7b126c951fa4afc0c2ebda0c,\n                limb1: 0x85834d2eff18413563bf9144,\n                limb2: 0x8f905b15b3b2add,\n            },\n            r1a1: u288 {\n                limb0: 0xa595d6853747f798b16d2eca,\n                limb1: 0x42d7941f6581b069059ed186,\n                limb2: 0x2eb502b9a9b7169b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x373d78cacc3a213ab7a5dc77,\n                limb1: 0x2c4c9295f1b3e767a376d95a,\n                limb2: 0x6fa8606535c131,\n            },\n            r0a1: u288 {\n                limb0: 0x7a037d066e3015f12b9bb899,\n                limb1: 0x2df06eb9be7dd1d34dd0ce6e,\n                limb2: 0x2bfecfb6faa40681,\n            },\n            r1a0: u288 {\n                limb0: 0x767f84f556bc0e82acc4c2fc,\n                limb1: 0xdc285959286fe86c69fd09c6,\n                limb2: 0xddf35d64e052591,\n            },\n            r1a1: u288 {\n                limb0: 0xba3bf8a2a744c4be716d10a3,\n                limb1: 0x704558fde5a2dd4610092a58,\n                limb2: 0x24381fac38d1c2f4,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8bfb882fe3e87bf7f06a534,\n                limb1: 0x60e74ba16f35b38925253fa1,\n                limb2: 0x105952dd8d3cb0fb,\n            },\n            r0a1: u288 {\n                limb0: 0x86a65a5ae488b0d28900cf53,\n                limb1: 0x4fca5c6edee392882c778363,\n                limb2: 0x160b4e8a7969f551,\n            },\n            r1a0: u288 {\n                limb0: 0x7b126c951fa4afc0c2ebda0c,\n                limb1: 0x85834d2eff18413563bf9144,\n                limb2: 0x8f905b15b3b2add,\n            },\n            r1a1: u288 {\n                limb0: 0xa595d6853747f798b16d2eca,\n                limb1: 0x42d7941f6581b069059ed186,\n                limb2: 0x2eb502b9a9b7169b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xe6dbfdaa4aaed35ae46b7e36,\n                limb1: 0x954a32448a2c26964f83e2ff,\n                limb2: 0x23fe11d86de21bf3,\n            },\n            r0a1: u288 {\n                limb0: 0x390ec78bb0c63fea5a5112ca,\n                limb1: 0x5eaba420296488bd9ad78ba4,\n                limb2: 0x179a2336d20f9552,\n            },\n            r1a0: u288 {\n                limb0: 0x451d421ca57949d9274eaee9,\n                limb1: 0xd85aee99f3f7b33bdddf1b37,\n                limb2: 0x1b83c0b80546357d,\n            },\n            r1a1: u288 {\n                limb0: 0x94c9276300f21460bd558c41,\n                limb1: 0x89efceec3bb694f4c41487d3,\n                limb2: 0x44375dd912e436b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xe6dbfdaa4aaed35ae46b7e36,\n                limb1: 0x954a32448a2c26964f83e2ff,\n                limb2: 0x23fe11d86de21bf3,\n            },\n            r0a1: u288 {\n                limb0: 0x390ec78bb0c63fea5a5112ca,\n                limb1: 0x5eaba420296488bd9ad78ba4,\n                limb2: 0x179a2336d20f9552,\n            },\n            r1a0: u288 {\n                limb0: 0x451d421ca57949d9274eaee9,\n                limb1: 0xd85aee99f3f7b33bdddf1b37,\n                limb2: 0x1b83c0b80546357d,\n            },\n            r1a1: u288 {\n                limb0: 0x94c9276300f21460bd558c41,\n                limb1: 0x89efceec3bb694f4c41487d3,\n                limb2: 0x44375dd912e436b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x90c98d8d59246f7ac71cbc7,\n                limb1: 0x603dd0e0dd09fb8ad13dbbb,\n                limb2: 0x1d068d315771a3c1,\n            },\n            r0a1: u288 {\n                limb0: 0x2bb3f34aa59b0e052ec56b80,\n                limb1: 0xb239e8dca49685c638327d9e,\n                limb2: 0x11e46c1f8395f739,\n            },\n            r1a0: u288 {\n                limb0: 0x2f114895453b5cf23b04678c,\n                limb1: 0x99cdbda7fef0644b67d48e85,\n                limb2: 0x6d8bc66cf89ee21,\n            },\n            r1a1: u288 {\n                limb0: 0x903c6ead9a344fceaab2dd24,\n                limb1: 0x97063cfc1096d628d7979e2c,\n                limb2: 0x49f8c496be2ccd4,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x90c98d8d59246f7ac71cbc7,\n                limb1: 0x603dd0e0dd09fb8ad13dbbb,\n                limb2: 0x1d068d315771a3c1,\n            },\n            r0a1: u288 {\n                limb0: 0x2bb3f34aa59b0e052ec56b80,\n                limb1: 0xb239e8dca49685c638327d9e,\n                limb2: 0x11e46c1f8395f739,\n            },\n            r1a0: u288 {\n                limb0: 0x2f114895453b5cf23b04678c,\n                limb1: 0x99cdbda7fef0644b67d48e85,\n                limb2: 0x6d8bc66cf89ee21,\n            },\n            r1a1: u288 {\n                limb0: 0x903c6ead9a344fceaab2dd24,\n                limb1: 0x97063cfc1096d628d7979e2c,\n                limb2: 0x49f8c496be2ccd4,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3778e71e52e9cd8a2efaae30,\n                limb1: 0x1510f4be21ae0d4ce4e9c407,\n                limb2: 0x87f2c39614ed514,\n            },\n            r0a1: u288 {\n                limb0: 0x9425b553c85be9f8eab4827e,\n                limb1: 0xd75d6f1a6013f310d81e5f6e,\n                limb2: 0x188c2e53470ad6dc,\n            },\n            r1a0: u288 {\n                limb0: 0xd6715a5f7fb9d3f64160e303,\n                limb1: 0xfb0e7cb89f7e8c3908e859f9,\n                limb2: 0x84f3df13ca3d149,\n            },\n            r1a1: u288 {\n                limb0: 0xea46b6a8dbd35d5c7098c283,\n                limb1: 0xff4f98d6447bac1d056ea3b3,\n                limb2: 0xd6d18364b06a02c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3778e71e52e9cd8a2efaae30,\n                limb1: 0x1510f4be21ae0d4ce4e9c407,\n                limb2: 0x87f2c39614ed514,\n            },\n            r0a1: u288 {\n                limb0: 0x9425b553c85be9f8eab4827e,\n                limb1: 0xd75d6f1a6013f310d81e5f6e,\n                limb2: 0x188c2e53470ad6dc,\n            },\n            r1a0: u288 {\n                limb0: 0xd6715a5f7fb9d3f64160e303,\n                limb1: 0xfb0e7cb89f7e8c3908e859f9,\n                limb2: 0x84f3df13ca3d149,\n            },\n            r1a1: u288 {\n                limb0: 0xea46b6a8dbd35d5c7098c283,\n                limb1: 0xff4f98d6447bac1d056ea3b3,\n                limb2: 0xd6d18364b06a02c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6f6d3e211d26957a67f263c,\n                limb1: 0x8da5874752e96d222d666c7e,\n                limb2: 0x266336ff63f6cae,\n            },\n            r0a1: u288 {\n                limb0: 0xb3b8c3099016c6a6814524b4,\n                limb1: 0x4b7c12934d9309f8cb6fe11,\n                limb2: 0x24a297917e6d2286,\n            },\n            r1a0: u288 {\n                limb0: 0x29f2516e3c81dc23beb0b4a5,\n                limb1: 0x66af1f7514ccca035bf4bd08,\n                limb2: 0x1c93fbb41c5a080f,\n            },\n            r1a1: u288 {\n                limb0: 0x1d9a69028cdcd85247c47085,\n                limb1: 0xca54eb95e7fb935d08e1e49,\n                limb2: 0x25c558909e8ce210,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x6f6d3e211d26957a67f263c,\n                limb1: 0x8da5874752e96d222d666c7e,\n                limb2: 0x266336ff63f6cae,\n            },\n            r0a1: u288 {\n                limb0: 0xb3b8c3099016c6a6814524b4,\n                limb1: 0x4b7c12934d9309f8cb6fe11,\n                limb2: 0x24a297917e6d2286,\n            },\n            r1a0: u288 {\n                limb0: 0x29f2516e3c81dc23beb0b4a5,\n                limb1: 0x66af1f7514ccca035bf4bd08,\n                limb2: 0x1c93fbb41c5a080f,\n            },\n            r1a1: u288 {\n                limb0: 0x1d9a69028cdcd85247c47085,\n                limb1: 0xca54eb95e7fb935d08e1e49,\n                limb2: 0x25c558909e8ce210,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa2877a17d6822fdbec0a419a,\n                limb1: 0xff617440635bbeae917acf03,\n                limb2: 0x302aa8c0c25edf9c,\n            },\n            r0a1: u288 {\n                limb0: 0xa0509fbe6fedb1a1d6bc0fa0,\n                limb1: 0xb6f674c844db3046d0228a67,\n                limb2: 0x275d1093fe789296,\n            },\n            r1a0: u288 {\n                limb0: 0x252b1469a10bf6c0e8441f2e,\n                limb1: 0xe3f275f7dc0d10062fa24067,\n                limb2: 0x5938d22b9b86d1f,\n            },\n            r1a1: u288 {\n                limb0: 0xfb5f636c62c36f78c5062f30,\n                limb1: 0x150a99ab14007914780e49f1,\n                limb2: 0x9e0bccb105b14f4,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa2877a17d6822fdbec0a419a,\n                limb1: 0xff617440635bbeae917acf03,\n                limb2: 0x302aa8c0c25edf9c,\n            },\n            r0a1: u288 {\n                limb0: 0xa0509fbe6fedb1a1d6bc0fa0,\n                limb1: 0xb6f674c844db3046d0228a67,\n                limb2: 0x275d1093fe789296,\n            },\n            r1a0: u288 {\n                limb0: 0x252b1469a10bf6c0e8441f2e,\n                limb1: 0xe3f275f7dc0d10062fa24067,\n                limb2: 0x5938d22b9b86d1f,\n            },\n            r1a1: u288 {\n                limb0: 0xfb5f636c62c36f78c5062f30,\n                limb1: 0x150a99ab14007914780e49f1,\n                limb2: 0x9e0bccb105b14f4,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc5eaebad6bd5beb92e09aade,\n                limb1: 0xcbd48c7eb96beac635eddee1,\n                limb2: 0x6b94aae5ea30073,\n            },\n            r0a1: u288 {\n                limb0: 0x882af1093bd174803a58f378,\n                limb1: 0x9ec588e092fc5b155ebeec2e,\n                limb2: 0x1ca1957381eeeaf6,\n            },\n            r1a0: u288 {\n                limb0: 0x85f75492a545f601ebdaeca3,\n                limb1: 0xb76104e8575174401e8c88d3,\n                limb2: 0x2f386789cd7045e0,\n            },\n            r1a1: u288 {\n                limb0: 0x21695ebadab2d91e4fdb6459,\n                limb1: 0x76f7be32767094c83713ad27,\n                limb2: 0x11f63fe7a6d180b6,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xbff947921ed15906d7d1a15d,\n                limb1: 0x801c1b9c79563f2e5bce21e1,\n                limb2: 0x956f2ac3e4fe88a,\n            },\n            r0a1: u288 {\n                limb0: 0x5b2798f11186aa7db5373cdd,\n                limb1: 0xa5023b2f0c8bab4ec100bf18,\n                limb2: 0x13a0cace49d5eade,\n            },\n            r1a0: u288 {\n                limb0: 0x9b0527939d6c45e657273a85,\n                limb1: 0x76cb75e8dc534ecd7e917521,\n                limb2: 0x12e40c7aed42af34,\n            },\n            r1a1: u288 {\n                limb0: 0x77da98dd73c9603932b79af4,\n                limb1: 0xfaac3a02aea7867b5226fa70,\n                limb2: 0x8e2f40461279814,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc5eaebad6bd5beb92e09aade,\n                limb1: 0xcbd48c7eb96beac635eddee1,\n                limb2: 0x6b94aae5ea30073,\n            },\n            r0a1: u288 {\n                limb0: 0x882af1093bd174803a58f378,\n                limb1: 0x9ec588e092fc5b155ebeec2e,\n                limb2: 0x1ca1957381eeeaf6,\n            },\n            r1a0: u288 {\n                limb0: 0x85f75492a545f601ebdaeca3,\n                limb1: 0xb76104e8575174401e8c88d3,\n                limb2: 0x2f386789cd7045e0,\n            },\n            r1a1: u288 {\n                limb0: 0x21695ebadab2d91e4fdb6459,\n                limb1: 0x76f7be32767094c83713ad27,\n                limb2: 0x11f63fe7a6d180b6,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xbff947921ed15906d7d1a15d,\n                limb1: 0x801c1b9c79563f2e5bce21e1,\n                limb2: 0x956f2ac3e4fe88a,\n            },\n            r0a1: u288 {\n                limb0: 0x5b2798f11186aa7db5373cdd,\n                limb1: 0xa5023b2f0c8bab4ec100bf18,\n                limb2: 0x13a0cace49d5eade,\n            },\n            r1a0: u288 {\n                limb0: 0x9b0527939d6c45e657273a85,\n                limb1: 0x76cb75e8dc534ecd7e917521,\n                limb2: 0x12e40c7aed42af34,\n            },\n            r1a1: u288 {\n                limb0: 0x77da98dd73c9603932b79af4,\n                limb1: 0xfaac3a02aea7867b5226fa70,\n                limb2: 0x8e2f40461279814,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xac907bc1f092e5e0913e845c,\n                limb1: 0x5964ee4cf6c9a38642dd0517,\n                limb2: 0x1719e7b29682420d,\n            },\n            r0a1: u288 {\n                limb0: 0x74d7d423222f8b95733071c5,\n                limb1: 0x86f3c3861a5f4d9c59281db1,\n                limb2: 0x2e4ed8b13095cb38,\n            },\n            r1a0: u288 {\n                limb0: 0x4967b22d6ffa060c3d0f2c5f,\n                limb1: 0x48dc68663059b322a3bdeaa4,\n                limb2: 0x166e533bd057aeaf,\n            },\n            r1a1: u288 {\n                limb0: 0xcdd096c0af346e40e770fa2b,\n                limb1: 0x6a8d2b8bc4369ae60bcd1a63,\n                limb2: 0x2fd98e44a782d9d9,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xac907bc1f092e5e0913e845c,\n                limb1: 0x5964ee4cf6c9a38642dd0517,\n                limb2: 0x1719e7b29682420d,\n            },\n            r0a1: u288 {\n                limb0: 0x74d7d423222f8b95733071c5,\n                limb1: 0x86f3c3861a5f4d9c59281db1,\n                limb2: 0x2e4ed8b13095cb38,\n            },\n            r1a0: u288 {\n                limb0: 0x4967b22d6ffa060c3d0f2c5f,\n                limb1: 0x48dc68663059b322a3bdeaa4,\n                limb2: 0x166e533bd057aeaf,\n            },\n            r1a1: u288 {\n                limb0: 0xcdd096c0af346e40e770fa2b,\n                limb1: 0x6a8d2b8bc4369ae60bcd1a63,\n                limb2: 0x2fd98e44a782d9d9,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xcae2854ff6a3816300716e11,\n                limb1: 0x24542ac4d609ab52f57a1cf6,\n                limb2: 0x130bee99db1c1a6,\n            },\n            r0a1: u288 {\n                limb0: 0x7a097fcb199569eb2020a518,\n                limb1: 0xc59e26079797276de74d2710,\n                limb2: 0x205de761540e71f0,\n            },\n            r1a0: u288 {\n                limb0: 0xaa1ad54be641d1006740583,\n                limb1: 0x3b2a9d3fc0122931ae274736,\n                limb2: 0xbe53b90a6b0a84e,\n            },\n            r1a1: u288 {\n                limb0: 0xd74fcd1e68f4e37eb864c664,\n                limb1: 0x148c5cb80d01f6a428be16e8,\n                limb2: 0x12f83a1b869c2d94,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xcae2854ff6a3816300716e11,\n                limb1: 0x24542ac4d609ab52f57a1cf6,\n                limb2: 0x130bee99db1c1a6,\n            },\n            r0a1: u288 {\n                limb0: 0x7a097fcb199569eb2020a518,\n                limb1: 0xc59e26079797276de74d2710,\n                limb2: 0x205de761540e71f0,\n            },\n            r1a0: u288 {\n                limb0: 0xaa1ad54be641d1006740583,\n                limb1: 0x3b2a9d3fc0122931ae274736,\n                limb2: 0xbe53b90a6b0a84e,\n            },\n            r1a1: u288 {\n                limb0: 0xd74fcd1e68f4e37eb864c664,\n                limb1: 0x148c5cb80d01f6a428be16e8,\n                limb2: 0x12f83a1b869c2d94,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc45d014325b07ba0dd2d4f10,\n                limb1: 0x361ef3f040192c17167b900c,\n                limb2: 0xf09fdc89e100ba7,\n            },\n            r0a1: u288 {\n                limb0: 0x19de05e48711d6d787de58a5,\n                limb1: 0x52290b2ee0a6dae953c249cf,\n                limb2: 0xf136a05d822f41d,\n            },\n            r1a0: u288 {\n                limb0: 0x17b39f9e05d9816d69d3a613,\n                limb1: 0x643e9006b7b05faa90e6a8,\n                limb2: 0x20e7d1e6a4c0547c,\n            },\n            r1a1: u288 {\n                limb0: 0x2fee0ea45053ae644c4e684f,\n                limb1: 0xbb2e7afad484141b0be42479,\n                limb2: 0x187df546a9ccfb69,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xada5bca8b46adc829ca20edf,\n                limb1: 0xa9cc28a9116efbf02609e3f2,\n                limb2: 0xaedc7dd73b536f3,\n            },\n            r0a1: u288 {\n                limb0: 0xab9510ead48ad195261ddc88,\n                limb1: 0xc202a7ba9dfce6d86664504e,\n                limb2: 0x2ce423186cc9b5a9,\n            },\n            r1a0: u288 {\n                limb0: 0x8f2b148f9ab7585ea1a6c347,\n                limb1: 0x508884251415af912a5d0a42,\n                limb2: 0x1dbbf26d101af06d,\n            },\n            r1a1: u288 {\n                limb0: 0x68b9f7cab6f91619604f8061,\n                limb1: 0xd94ab22c8f954516f2d2de81,\n                limb2: 0x16aa4a653b525fb1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc45d014325b07ba0dd2d4f10,\n                limb1: 0x361ef3f040192c17167b900c,\n                limb2: 0xf09fdc89e100ba7,\n            },\n            r0a1: u288 {\n                limb0: 0x19de05e48711d6d787de58a5,\n                limb1: 0x52290b2ee0a6dae953c249cf,\n                limb2: 0xf136a05d822f41d,\n            },\n            r1a0: u288 {\n                limb0: 0x17b39f9e05d9816d69d3a613,\n                limb1: 0x643e9006b7b05faa90e6a8,\n                limb2: 0x20e7d1e6a4c0547c,\n            },\n            r1a1: u288 {\n                limb0: 0x2fee0ea45053ae644c4e684f,\n                limb1: 0xbb2e7afad484141b0be42479,\n                limb2: 0x187df546a9ccfb69,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xada5bca8b46adc829ca20edf,\n                limb1: 0xa9cc28a9116efbf02609e3f2,\n                limb2: 0xaedc7dd73b536f3,\n            },\n            r0a1: u288 {\n                limb0: 0xab9510ead48ad195261ddc88,\n                limb1: 0xc202a7ba9dfce6d86664504e,\n                limb2: 0x2ce423186cc9b5a9,\n            },\n            r1a0: u288 {\n                limb0: 0x8f2b148f9ab7585ea1a6c347,\n                limb1: 0x508884251415af912a5d0a42,\n                limb2: 0x1dbbf26d101af06d,\n            },\n            r1a1: u288 {\n                limb0: 0x68b9f7cab6f91619604f8061,\n                limb1: 0xd94ab22c8f954516f2d2de81,\n                limb2: 0x16aa4a653b525fb1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc4a85cff6912d5bfd21136b3,\n                limb1: 0x34488d83eff390d6a141392c,\n                limb2: 0xdd68be1560fdaae,\n            },\n            r0a1: u288 {\n                limb0: 0x25abfb1fa590f9ccb71b8e0,\n                limb1: 0x43c63f304c5602ef9de96df6,\n                limb2: 0x21e65c606ce32d5a,\n            },\n            r1a0: u288 {\n                limb0: 0x6e4626b5e644b7a440e1b381,\n                limb1: 0xa29ef58cc4acec20c08690c,\n                limb2: 0x1eca054ddf87b2a4,\n            },\n            r1a1: u288 {\n                limb0: 0xc220eeaf9d6200717abc6724,\n                limb1: 0x702fffe80bce126803560a40,\n                limb2: 0x2e0f90625bd64073,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc4a85cff6912d5bfd21136b3,\n                limb1: 0x34488d83eff390d6a141392c,\n                limb2: 0xdd68be1560fdaae,\n            },\n            r0a1: u288 {\n                limb0: 0x25abfb1fa590f9ccb71b8e0,\n                limb1: 0x43c63f304c5602ef9de96df6,\n                limb2: 0x21e65c606ce32d5a,\n            },\n            r1a0: u288 {\n                limb0: 0x6e4626b5e644b7a440e1b381,\n                limb1: 0xa29ef58cc4acec20c08690c,\n                limb2: 0x1eca054ddf87b2a4,\n            },\n            r1a1: u288 {\n                limb0: 0xc220eeaf9d6200717abc6724,\n                limb1: 0x702fffe80bce126803560a40,\n                limb2: 0x2e0f90625bd64073,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x59f254cb97c8a519e0461a6,\n                limb1: 0xb4542e9c6bb21b7d9648e1d4,\n                limb2: 0x22dc33964ee2947b,\n            },\n            r0a1: u288 {\n                limb0: 0x5e83c2931befc562e4c93cee,\n                limb1: 0x675b3e97b43eba3f75101885,\n                limb2: 0x11d20ed3321c48f,\n            },\n            r1a0: u288 {\n                limb0: 0x11e5d20e996d12471ceb3541,\n                limb1: 0x229064d01b397b4af809e840,\n                limb2: 0x21834a1301ac5984,\n            },\n            r1a1: u288 {\n                limb0: 0xbe43cdde5117c697882c850f,\n                limb1: 0x1bc4151048af9bbd27f7e82a,\n                limb2: 0x2501d9aca420d21e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x134b53d15a50fc2bed6d2f3d,\n                limb1: 0xd4f8c40bf294c7e18346462d,\n                limb2: 0x1aad2161b8c9e68e,\n            },\n            r0a1: u288 {\n                limb0: 0x88262244e0b154b0ca5b5d9a,\n                limb1: 0xd288b3c01ba5c293f8c800f8,\n                limb2: 0xf0ac20574e1aede,\n            },\n            r1a0: u288 {\n                limb0: 0xe5373b9b81964332b6771878,\n                limb1: 0x80e60988bd2e9de7f4395ae6,\n                limb2: 0x2e916f6959fa27f0,\n            },\n            r1a1: u288 {\n                limb0: 0x3f67c739560ef94c04b58369,\n                limb1: 0x1ee07a68fb111967cd5b15b8,\n                limb2: 0x1b7e48fae034571,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x59f254cb97c8a519e0461a6,\n                limb1: 0xb4542e9c6bb21b7d9648e1d4,\n                limb2: 0x22dc33964ee2947b,\n            },\n            r0a1: u288 {\n                limb0: 0x5e83c2931befc562e4c93cee,\n                limb1: 0x675b3e97b43eba3f75101885,\n                limb2: 0x11d20ed3321c48f,\n            },\n            r1a0: u288 {\n                limb0: 0x11e5d20e996d12471ceb3541,\n                limb1: 0x229064d01b397b4af809e840,\n                limb2: 0x21834a1301ac5984,\n            },\n            r1a1: u288 {\n                limb0: 0xbe43cdde5117c697882c850f,\n                limb1: 0x1bc4151048af9bbd27f7e82a,\n                limb2: 0x2501d9aca420d21e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x134b53d15a50fc2bed6d2f3d,\n                limb1: 0xd4f8c40bf294c7e18346462d,\n                limb2: 0x1aad2161b8c9e68e,\n            },\n            r0a1: u288 {\n                limb0: 0x88262244e0b154b0ca5b5d9a,\n                limb1: 0xd288b3c01ba5c293f8c800f8,\n                limb2: 0xf0ac20574e1aede,\n            },\n            r1a0: u288 {\n                limb0: 0xe5373b9b81964332b6771878,\n                limb1: 0x80e60988bd2e9de7f4395ae6,\n                limb2: 0x2e916f6959fa27f0,\n            },\n            r1a1: u288 {\n                limb0: 0x3f67c739560ef94c04b58369,\n                limb1: 0x1ee07a68fb111967cd5b15b8,\n                limb2: 0x1b7e48fae034571,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x65bb9e7438a232dad6eb7f96,\n                limb1: 0x5cf05222319fe00305afe0bf,\n                limb2: 0x1c6d87b3a5aabb43,\n            },\n            r0a1: u288 {\n                limb0: 0xb8e845bbd71aa9644432eaa6,\n                limb1: 0xcdbf988db0903b19b07b9f3,\n                limb2: 0x107ca76698ca0dcd,\n            },\n            r1a0: u288 {\n                limb0: 0x5ba7979e387e50b016321956,\n                limb1: 0x2ee41a1e59ccbc1350611d32,\n                limb2: 0x11a3b7b762eec2c5,\n            },\n            r1a1: u288 {\n                limb0: 0xb3f5edfecf19d6f82799dd03,\n                limb1: 0xc0d095110dad9ebbefe29784,\n                limb2: 0x1f63c13501eeeaf5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x65bb9e7438a232dad6eb7f96,\n                limb1: 0x5cf05222319fe00305afe0bf,\n                limb2: 0x1c6d87b3a5aabb43,\n            },\n            r0a1: u288 {\n                limb0: 0xb8e845bbd71aa9644432eaa6,\n                limb1: 0xcdbf988db0903b19b07b9f3,\n                limb2: 0x107ca76698ca0dcd,\n            },\n            r1a0: u288 {\n                limb0: 0x5ba7979e387e50b016321956,\n                limb1: 0x2ee41a1e59ccbc1350611d32,\n                limb2: 0x11a3b7b762eec2c5,\n            },\n            r1a1: u288 {\n                limb0: 0xb3f5edfecf19d6f82799dd03,\n                limb1: 0xc0d095110dad9ebbefe29784,\n                limb2: 0x1f63c13501eeeaf5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xde29dd2c7147403100fa258c,\n                limb1: 0xbfc33c64aa2cdfd5f33f638d,\n                limb2: 0x139edaa5713a8a73,\n            },\n            r0a1: u288 {\n                limb0: 0x8de2a4556c0698bd62bdc91d,\n                limb1: 0x497ed1dffa7e70b6c15dad0c,\n                limb2: 0x2cd9650c8add9b02,\n            },\n            r1a0: u288 {\n                limb0: 0x2357739dff7746f02bf5d5cd,\n                limb1: 0x37396bdbe70cf65e7f7ed43b,\n                limb2: 0x16571ebe2a0acf51,\n            },\n            r1a1: u288 {\n                limb0: 0x5df40d02171f3aa50f4f1b23,\n                limb1: 0x3d504cd9327215bf089595d0,\n                limb2: 0x2598b49390b4ab86,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xde29dd2c7147403100fa258c,\n                limb1: 0xbfc33c64aa2cdfd5f33f638d,\n                limb2: 0x139edaa5713a8a73,\n            },\n            r0a1: u288 {\n                limb0: 0x8de2a4556c0698bd62bdc91d,\n                limb1: 0x497ed1dffa7e70b6c15dad0c,\n                limb2: 0x2cd9650c8add9b02,\n            },\n            r1a0: u288 {\n                limb0: 0x2357739dff7746f02bf5d5cd,\n                limb1: 0x37396bdbe70cf65e7f7ed43b,\n                limb2: 0x16571ebe2a0acf51,\n            },\n            r1a1: u288 {\n                limb0: 0x5df40d02171f3aa50f4f1b23,\n                limb1: 0x3d504cd9327215bf089595d0,\n                limb2: 0x2598b49390b4ab86,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4360e486f47a872ae0460f44,\n                limb1: 0x7bb35bfed6fcfcf8779029e1,\n                limb2: 0x1390b4c7cb6b52f1,\n            },\n            r0a1: u288 {\n                limb0: 0xa628a0a5b10cbbd6c74c24ee,\n                limb1: 0x7470f4707a0cc892ebefded7,\n                limb2: 0x1ff4ca8749a8104e,\n            },\n            r1a0: u288 {\n                limb0: 0xff60a007ec6c8b1e83574f3d,\n                limb1: 0xce3526917a6268d71609c0a1,\n                limb2: 0x3016dc03227dad67,\n            },\n            r1a1: u288 {\n                limb0: 0x3989e237ecb0bc27e6ad5d37,\n                limb1: 0x91acde41c342e92417210e02,\n                limb2: 0x2c602bf496b1e2b8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x103a372c78fa5b2a67d01204,\n                limb1: 0x675f1cbc7aebe1140e8bed2a,\n                limb2: 0x2532e98456a291c3,\n            },\n            r0a1: u288 {\n                limb0: 0xc0be03786bd147df08fa1ece,\n                limb1: 0x7878592e1699337b543a6fa2,\n                limb2: 0x9e2390310f5b3d7,\n            },\n            r1a0: u288 {\n                limb0: 0x6d973cc33a79ba068e6572ad,\n                limb1: 0xc2fddbd0c013d321cabfbf43,\n                limb2: 0x249b679f9a94f336,\n            },\n            r1a1: u288 {\n                limb0: 0xe20f26b34d3756b2b9519351,\n                limb1: 0xde793f45fed2b6ad4576aaf8,\n                limb2: 0x2cc11b280706670a,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x4360e486f47a872ae0460f44,\n                limb1: 0x7bb35bfed6fcfcf8779029e1,\n                limb2: 0x1390b4c7cb6b52f1,\n            },\n            r0a1: u288 {\n                limb0: 0xa628a0a5b10cbbd6c74c24ee,\n                limb1: 0x7470f4707a0cc892ebefded7,\n                limb2: 0x1ff4ca8749a8104e,\n            },\n            r1a0: u288 {\n                limb0: 0xff60a007ec6c8b1e83574f3d,\n                limb1: 0xce3526917a6268d71609c0a1,\n                limb2: 0x3016dc03227dad67,\n            },\n            r1a1: u288 {\n                limb0: 0x3989e237ecb0bc27e6ad5d37,\n                limb1: 0x91acde41c342e92417210e02,\n                limb2: 0x2c602bf496b1e2b8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x103a372c78fa5b2a67d01204,\n                limb1: 0x675f1cbc7aebe1140e8bed2a,\n                limb2: 0x2532e98456a291c3,\n            },\n            r0a1: u288 {\n                limb0: 0xc0be03786bd147df08fa1ece,\n                limb1: 0x7878592e1699337b543a6fa2,\n                limb2: 0x9e2390310f5b3d7,\n            },\n            r1a0: u288 {\n                limb0: 0x6d973cc33a79ba068e6572ad,\n                limb1: 0xc2fddbd0c013d321cabfbf43,\n                limb2: 0x249b679f9a94f336,\n            },\n            r1a1: u288 {\n                limb0: 0xe20f26b34d3756b2b9519351,\n                limb1: 0xde793f45fed2b6ad4576aaf8,\n                limb2: 0x2cc11b280706670a,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x551986dc96f0443f7ac4ba73,\n                limb1: 0x78107a0c01ea8e3f9bd2e6fd,\n                limb2: 0x201da6796dee986f,\n            },\n            r0a1: u288 {\n                limb0: 0xb29fe7d173b13e6ed7b96297,\n                limb1: 0x77342f3c7dfec27fe1753e85,\n                limb2: 0x1fa36d6151f8156e,\n            },\n            r1a0: u288 {\n                limb0: 0xcfbc59734fa247fead294d84,\n                limb1: 0x95cf28f410134c75494cc333,\n                limb2: 0x2fdd98603896fb30,\n            },\n            r1a1: u288 {\n                limb0: 0x225b0b0fef9e6d36d471d78e,\n                limb1: 0x278c8534902d21f77aef3522,\n                limb2: 0xe42d7fa7de4d6c8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x551986dc96f0443f7ac4ba73,\n                limb1: 0x78107a0c01ea8e3f9bd2e6fd,\n                limb2: 0x201da6796dee986f,\n            },\n            r0a1: u288 {\n                limb0: 0xb29fe7d173b13e6ed7b96297,\n                limb1: 0x77342f3c7dfec27fe1753e85,\n                limb2: 0x1fa36d6151f8156e,\n            },\n            r1a0: u288 {\n                limb0: 0xcfbc59734fa247fead294d84,\n                limb1: 0x95cf28f410134c75494cc333,\n                limb2: 0x2fdd98603896fb30,\n            },\n            r1a1: u288 {\n                limb0: 0x225b0b0fef9e6d36d471d78e,\n                limb1: 0x278c8534902d21f77aef3522,\n                limb2: 0xe42d7fa7de4d6c8,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd524080ad04473596afdaafb,\n                limb1: 0x9da4392d65be1f8372c18a53,\n                limb2: 0xbccb6baf45de67c,\n            },\n            r0a1: u288 {\n                limb0: 0x336813e1fb5e17e81b5b051b,\n                limb1: 0xe98e855ed4992521f93709a4,\n                limb2: 0x297b055bd5622a18,\n            },\n            r1a0: u288 {\n                limb0: 0x2e761701f878006486dedec1,\n                limb1: 0x677ff8e5f6b82a95401407f,\n                limb2: 0x2f5725fecfef8317,\n            },\n            r1a1: u288 {\n                limb0: 0x839358e9dd8ffc54f27fca9c,\n                limb1: 0xa4a0948db4162fdf44aee0f6,\n                limb2: 0x2849739e5c4e2ee3,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd524080ad04473596afdaafb,\n                limb1: 0x9da4392d65be1f8372c18a53,\n                limb2: 0xbccb6baf45de67c,\n            },\n            r0a1: u288 {\n                limb0: 0x336813e1fb5e17e81b5b051b,\n                limb1: 0xe98e855ed4992521f93709a4,\n                limb2: 0x297b055bd5622a18,\n            },\n            r1a0: u288 {\n                limb0: 0x2e761701f878006486dedec1,\n                limb1: 0x677ff8e5f6b82a95401407f,\n                limb2: 0x2f5725fecfef8317,\n            },\n            r1a1: u288 {\n                limb0: 0x839358e9dd8ffc54f27fca9c,\n                limb1: 0xa4a0948db4162fdf44aee0f6,\n                limb2: 0x2849739e5c4e2ee3,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc9cde220c427e6e795c276ea,\n                limb1: 0xf16a4bf65aa097b4b2102d3a,\n                limb2: 0x107f879bc0743525,\n            },\n            r0a1: u288 {\n                limb0: 0x5edbca4d3c47278b7e543edc,\n                limb1: 0xe6280d0a1160bc4062c712a2,\n                limb2: 0xd65ce18e50f6e9f,\n            },\n            r1a0: u288 {\n                limb0: 0x922d89859e41d74f44066e94,\n                limb1: 0x92d65b7ea0039b0163ab463,\n                limb2: 0x233cfba3a88b3b44,\n            },\n            r1a1: u288 {\n                limb0: 0xbaceedcb5732d6a04a4a3ba2,\n                limb1: 0xe586d3e9d7583a9b9956674c,\n                limb2: 0x1b35c7bee23e7274,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc9cde220c427e6e795c276ea,\n                limb1: 0xf16a4bf65aa097b4b2102d3a,\n                limb2: 0x107f879bc0743525,\n            },\n            r0a1: u288 {\n                limb0: 0x5edbca4d3c47278b7e543edc,\n                limb1: 0xe6280d0a1160bc4062c712a2,\n                limb2: 0xd65ce18e50f6e9f,\n            },\n            r1a0: u288 {\n                limb0: 0x922d89859e41d74f44066e94,\n                limb1: 0x92d65b7ea0039b0163ab463,\n                limb2: 0x233cfba3a88b3b44,\n            },\n            r1a1: u288 {\n                limb0: 0xbaceedcb5732d6a04a4a3ba2,\n                limb1: 0xe586d3e9d7583a9b9956674c,\n                limb2: 0x1b35c7bee23e7274,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7dc2872c3517c1e449fc4122,\n                limb1: 0x705ab5ca7266a5ffa614625b,\n                limb2: 0x166c4d11551f6f6d,\n            },\n            r0a1: u288 {\n                limb0: 0x492f67a4ba40719208859c1b,\n                limb1: 0x7a676c7fc4295e5aab645973,\n                limb2: 0x2d03ea35dec3ab5d,\n            },\n            r1a0: u288 {\n                limb0: 0x529cb1e346af0b40e0e2e6b9,\n                limb1: 0xe42e697812ceb8a7c51f85b3,\n                limb2: 0x2b5f25393ba2c781,\n            },\n            r1a1: u288 {\n                limb0: 0x3d2f685444515b3441d54cee,\n                limb1: 0xed7dcc8e1781c6d4006bba3f,\n                limb2: 0x26f0fac3db26fe20,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7dc2872c3517c1e449fc4122,\n                limb1: 0x705ab5ca7266a5ffa614625b,\n                limb2: 0x166c4d11551f6f6d,\n            },\n            r0a1: u288 {\n                limb0: 0x492f67a4ba40719208859c1b,\n                limb1: 0x7a676c7fc4295e5aab645973,\n                limb2: 0x2d03ea35dec3ab5d,\n            },\n            r1a0: u288 {\n                limb0: 0x529cb1e346af0b40e0e2e6b9,\n                limb1: 0xe42e697812ceb8a7c51f85b3,\n                limb2: 0x2b5f25393ba2c781,\n            },\n            r1a1: u288 {\n                limb0: 0x3d2f685444515b3441d54cee,\n                limb1: 0xed7dcc8e1781c6d4006bba3f,\n                limb2: 0x26f0fac3db26fe20,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x1e691060b09334f4d4d11564,\n                limb1: 0xc2f23d460e32ab29aac9a462,\n                limb2: 0x1f52946e8ab57b9d,\n            },\n            r0a1: u288 {\n                limb0: 0xb8f6cec3d46206bf11579e06,\n                limb1: 0x6b82224b4c502934276477ce,\n                limb2: 0x4263847a3546583,\n            },\n            r1a0: u288 {\n                limb0: 0x3e02aba94130839fdfb531d3,\n                limb1: 0x89b37e5ce7cd94f86280b704,\n                limb2: 0x25f502760510099,\n            },\n            r1a1: u288 {\n                limb0: 0xef21ddf9cebf3491c94329fd,\n                limb1: 0xb2577ec6fa2817d5e8a2aaad,\n                limb2: 0x2e0a1cc9617d5d85,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8ccc1f1b7b7c84a2fb81a4d1,\n                limb1: 0x1fd835bf3d332347a842499,\n                limb2: 0x105f1e2419d5da43,\n            },\n            r0a1: u288 {\n                limb0: 0xce0594565bc3f6746917fac1,\n                limb1: 0x10f45021d35f29b40306afa2,\n                limb2: 0x175b0196bc37d977,\n            },\n            r1a0: u288 {\n                limb0: 0x3bfc77f3df29fdb7446275fd,\n                limb1: 0x761a984dcc263e2a7230a42c,\n                limb2: 0xdc47d8f8fd9a377,\n            },\n            r1a1: u288 {\n                limb0: 0x5310a14e6b20a87bded6741b,\n                limb1: 0xaf75a4d44565ed067c32308e,\n                limb2: 0x1745ddfc2f0f2db5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x1e691060b09334f4d4d11564,\n                limb1: 0xc2f23d460e32ab29aac9a462,\n                limb2: 0x1f52946e8ab57b9d,\n            },\n            r0a1: u288 {\n                limb0: 0xb8f6cec3d46206bf11579e06,\n                limb1: 0x6b82224b4c502934276477ce,\n                limb2: 0x4263847a3546583,\n            },\n            r1a0: u288 {\n                limb0: 0x3e02aba94130839fdfb531d3,\n                limb1: 0x89b37e5ce7cd94f86280b704,\n                limb2: 0x25f502760510099,\n            },\n            r1a1: u288 {\n                limb0: 0xef21ddf9cebf3491c94329fd,\n                limb1: 0xb2577ec6fa2817d5e8a2aaad,\n                limb2: 0x2e0a1cc9617d5d85,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8ccc1f1b7b7c84a2fb81a4d1,\n                limb1: 0x1fd835bf3d332347a842499,\n                limb2: 0x105f1e2419d5da43,\n            },\n            r0a1: u288 {\n                limb0: 0xce0594565bc3f6746917fac1,\n                limb1: 0x10f45021d35f29b40306afa2,\n                limb2: 0x175b0196bc37d977,\n            },\n            r1a0: u288 {\n                limb0: 0x3bfc77f3df29fdb7446275fd,\n                limb1: 0x761a984dcc263e2a7230a42c,\n                limb2: 0xdc47d8f8fd9a377,\n            },\n            r1a1: u288 {\n                limb0: 0x5310a14e6b20a87bded6741b,\n                limb1: 0xaf75a4d44565ed067c32308e,\n                limb2: 0x1745ddfc2f0f2db5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9002fa9c872aa1591cb2e83c,\n                limb1: 0x18092dea89807d07c96f5cee,\n                limb2: 0x5e775cc8d0e2333,\n            },\n            r0a1: u288 {\n                limb0: 0x6e55603f23c1e2f40ecbc3be,\n                limb1: 0x9ef6bba8f2ca071759eee99a,\n                limb2: 0x66cf6e10d463eb6,\n            },\n            r1a0: u288 {\n                limb0: 0x30131216b55fd9bf4d2cbe86,\n                limb1: 0xbaa5fde208b9fceda4ed5946,\n                limb2: 0xdbb530576beae47,\n            },\n            r1a1: u288 {\n                limb0: 0xe09b26e7b2fe48a7f274d02d,\n                limb1: 0x9e41ae04207fa2eb5f641fed,\n                limb2: 0x511a273c2863628,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9002fa9c872aa1591cb2e83c,\n                limb1: 0x18092dea89807d07c96f5cee,\n                limb2: 0x5e775cc8d0e2333,\n            },\n            r0a1: u288 {\n                limb0: 0x6e55603f23c1e2f40ecbc3be,\n                limb1: 0x9ef6bba8f2ca071759eee99a,\n                limb2: 0x66cf6e10d463eb6,\n            },\n            r1a0: u288 {\n                limb0: 0x30131216b55fd9bf4d2cbe86,\n                limb1: 0xbaa5fde208b9fceda4ed5946,\n                limb2: 0xdbb530576beae47,\n            },\n            r1a1: u288 {\n                limb0: 0xe09b26e7b2fe48a7f274d02d,\n                limb1: 0x9e41ae04207fa2eb5f641fed,\n                limb2: 0x511a273c2863628,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9e446957265af1f6cdcb9e15,\n                limb1: 0x6c10753b3e38581919c0cc4d,\n                limb2: 0x3049507b97cd2ae3,\n            },\n            r0a1: u288 {\n                limb0: 0x81d9c4ec56b0c577f646eb40,\n                limb1: 0x2e5a0918579e398c48776ad2,\n                limb2: 0x3d00590d1493ac8,\n            },\n            r1a0: u288 {\n                limb0: 0xa5ffc6ee3bc132f1681fe84f,\n                limb1: 0x6906fa22a16540a098a498a7,\n                limb2: 0xd23995e1c7ff58d,\n            },\n            r1a1: u288 {\n                limb0: 0x99b1ea789cd8357bbc2d09d8,\n                limb1: 0x2fde0375bb34e500582e9729,\n                limb2: 0xfad5daa8506bc1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc627fa78d0f6604cfc6262bc,\n                limb1: 0x1a3f0695ff6e8412d1ea0eda,\n                limb2: 0x1b1754c1a9e0cea9,\n            },\n            r0a1: u288 {\n                limb0: 0x8fbb7ca95e11dda5d5f44cc0,\n                limb1: 0xaab02dc7e290087c8d9224dc,\n                limb2: 0x4c39cf6e88ea4d8,\n            },\n            r1a0: u288 {\n                limb0: 0x66b308f30b0a27dfb743a053,\n                limb1: 0xc24b32150e094160eb1e6e20,\n                limb2: 0x16091aac6ef81c7,\n            },\n            r1a1: u288 {\n                limb0: 0x7e3aeab40b6fb8507a19662f,\n                limb1: 0x8fa259d1ce6d3db3ba6cbcd,\n                limb2: 0x2c175175b8686be5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9e446957265af1f6cdcb9e15,\n                limb1: 0x6c10753b3e38581919c0cc4d,\n                limb2: 0x3049507b97cd2ae3,\n            },\n            r0a1: u288 {\n                limb0: 0x81d9c4ec56b0c577f646eb40,\n                limb1: 0x2e5a0918579e398c48776ad2,\n                limb2: 0x3d00590d1493ac8,\n            },\n            r1a0: u288 {\n                limb0: 0xa5ffc6ee3bc132f1681fe84f,\n                limb1: 0x6906fa22a16540a098a498a7,\n                limb2: 0xd23995e1c7ff58d,\n            },\n            r1a1: u288 {\n                limb0: 0x99b1ea789cd8357bbc2d09d8,\n                limb1: 0x2fde0375bb34e500582e9729,\n                limb2: 0xfad5daa8506bc1,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc627fa78d0f6604cfc6262bc,\n                limb1: 0x1a3f0695ff6e8412d1ea0eda,\n                limb2: 0x1b1754c1a9e0cea9,\n            },\n            r0a1: u288 {\n                limb0: 0x8fbb7ca95e11dda5d5f44cc0,\n                limb1: 0xaab02dc7e290087c8d9224dc,\n                limb2: 0x4c39cf6e88ea4d8,\n            },\n            r1a0: u288 {\n                limb0: 0x66b308f30b0a27dfb743a053,\n                limb1: 0xc24b32150e094160eb1e6e20,\n                limb2: 0x16091aac6ef81c7,\n            },\n            r1a1: u288 {\n                limb0: 0x7e3aeab40b6fb8507a19662f,\n                limb1: 0x8fa259d1ce6d3db3ba6cbcd,\n                limb2: 0x2c175175b8686be5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x391e6f951049b131d70e651,\n                limb1: 0x5c0f54485e635304e14ce30e,\n                limb2: 0x221ee8dc68dde949,\n            },\n            r0a1: u288 {\n                limb0: 0xac8ba155c82a61103e2963c1,\n                limb1: 0x8559d1265b1f4418a886b3aa,\n                limb2: 0x140ce9c3c2eb5374,\n            },\n            r1a0: u288 {\n                limb0: 0x73ebb164ba66b89f6ac09079,\n                limb1: 0x3699654a08147615c793b6b5,\n                limb2: 0xaa97a901c3147f3,\n            },\n            r1a1: u288 {\n                limb0: 0x9666d2cab8edbbffe6ede238,\n                limb1: 0xc28b607bd98c0f9789de1cb4,\n                limb2: 0xcb0f83e0497f81e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x391e6f951049b131d70e651,\n                limb1: 0x5c0f54485e635304e14ce30e,\n                limb2: 0x221ee8dc68dde949,\n            },\n            r0a1: u288 {\n                limb0: 0xac8ba155c82a61103e2963c1,\n                limb1: 0x8559d1265b1f4418a886b3aa,\n                limb2: 0x140ce9c3c2eb5374,\n            },\n            r1a0: u288 {\n                limb0: 0x73ebb164ba66b89f6ac09079,\n                limb1: 0x3699654a08147615c793b6b5,\n                limb2: 0xaa97a901c3147f3,\n            },\n            r1a1: u288 {\n                limb0: 0x9666d2cab8edbbffe6ede238,\n                limb1: 0xc28b607bd98c0f9789de1cb4,\n                limb2: 0xcb0f83e0497f81e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd9cb0120b4122fb011495b79,\n                limb1: 0xb13527eef1359006fb9859de,\n                limb2: 0x240401f012c778a3,\n            },\n            r0a1: u288 {\n                limb0: 0x9cc1ae143c291244678b0671,\n                limb1: 0x3f4bdf8e0d1bb7d8d2c700d7,\n                limb2: 0x12fc2e1a9bd4d4fb,\n            },\n            r1a0: u288 {\n                limb0: 0x4d62fe7db900df0085dff093,\n                limb1: 0x424c17123aa393f8a5520eb9,\n                limb2: 0x8df0bf255c22f60,\n            },\n            r1a1: u288 {\n                limb0: 0x4caa438a70cd1b3862c1618e,\n                limb1: 0x3e479829171b3521b4952056,\n                limb2: 0x828e185bcf93935,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd9cb0120b4122fb011495b79,\n                limb1: 0xb13527eef1359006fb9859de,\n                limb2: 0x240401f012c778a3,\n            },\n            r0a1: u288 {\n                limb0: 0x9cc1ae143c291244678b0671,\n                limb1: 0x3f4bdf8e0d1bb7d8d2c700d7,\n                limb2: 0x12fc2e1a9bd4d4fb,\n            },\n            r1a0: u288 {\n                limb0: 0x4d62fe7db900df0085dff093,\n                limb1: 0x424c17123aa393f8a5520eb9,\n                limb2: 0x8df0bf255c22f60,\n            },\n            r1a1: u288 {\n                limb0: 0x4caa438a70cd1b3862c1618e,\n                limb1: 0x3e479829171b3521b4952056,\n                limb2: 0x828e185bcf93935,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb862a4ff37044dbe06e91363,\n                limb1: 0xaf8e301a655e3e4a00bc528,\n                limb2: 0x1b35ba3ad1783bfa,\n            },\n            r0a1: u288 {\n                limb0: 0x4d069af037c7fa2d75a8135b,\n                limb1: 0xe23f93edb80bda1ddf6c3d8b,\n                limb2: 0x734462d6e70bd6,\n            },\n            r1a0: u288 {\n                limb0: 0xca21499f48088a3152f20477,\n                limb1: 0xfb6ff15c58fd656c3a068ba7,\n                limb2: 0x129921fd1af30952,\n            },\n            r1a1: u288 {\n                limb0: 0xe182d8890b92a8c636cfc2d5,\n                limb1: 0xcf37e9714eabfb65cd257a30,\n                limb2: 0x19c5b0d5affa1c21,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb862a4ff37044dbe06e91363,\n                limb1: 0xaf8e301a655e3e4a00bc528,\n                limb2: 0x1b35ba3ad1783bfa,\n            },\n            r0a1: u288 {\n                limb0: 0x4d069af037c7fa2d75a8135b,\n                limb1: 0xe23f93edb80bda1ddf6c3d8b,\n                limb2: 0x734462d6e70bd6,\n            },\n            r1a0: u288 {\n                limb0: 0xca21499f48088a3152f20477,\n                limb1: 0xfb6ff15c58fd656c3a068ba7,\n                limb2: 0x129921fd1af30952,\n            },\n            r1a1: u288 {\n                limb0: 0xe182d8890b92a8c636cfc2d5,\n                limb1: 0xcf37e9714eabfb65cd257a30,\n                limb2: 0x19c5b0d5affa1c21,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8d30e8f01b6acf088a9bd5a6,\n                limb1: 0xb440d1794eef76a66e0fdb32,\n                limb2: 0x16655a68127499b0,\n            },\n            r0a1: u288 {\n                limb0: 0xf12061678632cd148d1be332,\n                limb1: 0x3aa5b5ac85bb5c32e7c93d40,\n                limb2: 0x2f885ae792f2779e,\n            },\n            r1a0: u288 {\n                limb0: 0x1de53ae1c1e6c599d4a495e4,\n                limb1: 0x8ef188b9abb6e97a0375dee6,\n                limb2: 0x9507d99d56d4d1d,\n            },\n            r1a1: u288 {\n                limb0: 0x9a83ce73013109f348314267,\n                limb1: 0xffd1a4c21374ab0fcece03f4,\n                limb2: 0x7570f2346d80d71,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xffb932597fa8bdce8de82fd9,\n                limb1: 0xc9265a1ac66f25b59b4c7222,\n                limb2: 0x2a43f963f80117be,\n            },\n            r0a1: u288 {\n                limb0: 0x9b6456669db38b591a35fa4e,\n                limb1: 0x31aa367c72c0f07897f7d4a4,\n                limb2: 0x28d40172399c3b03,\n            },\n            r1a0: u288 {\n                limb0: 0xca95f93e068ff337f73f54d5,\n                limb1: 0xabbf9fdc66cc4b10f9da741,\n                limb2: 0x22f1e27d902fc3ff,\n            },\n            r1a1: u288 {\n                limb0: 0xd12f8d49ae60289c48850a68,\n                limb1: 0xc27491d681fc8ec1edf9d749,\n                limb2: 0x14e28f1895e25047,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x8d30e8f01b6acf088a9bd5a6,\n                limb1: 0xb440d1794eef76a66e0fdb32,\n                limb2: 0x16655a68127499b0,\n            },\n            r0a1: u288 {\n                limb0: 0xf12061678632cd148d1be332,\n                limb1: 0x3aa5b5ac85bb5c32e7c93d40,\n                limb2: 0x2f885ae792f2779e,\n            },\n            r1a0: u288 {\n                limb0: 0x1de53ae1c1e6c599d4a495e4,\n                limb1: 0x8ef188b9abb6e97a0375dee6,\n                limb2: 0x9507d99d56d4d1d,\n            },\n            r1a1: u288 {\n                limb0: 0x9a83ce73013109f348314267,\n                limb1: 0xffd1a4c21374ab0fcece03f4,\n                limb2: 0x7570f2346d80d71,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xffb932597fa8bdce8de82fd9,\n                limb1: 0xc9265a1ac66f25b59b4c7222,\n                limb2: 0x2a43f963f80117be,\n            },\n            r0a1: u288 {\n                limb0: 0x9b6456669db38b591a35fa4e,\n                limb1: 0x31aa367c72c0f07897f7d4a4,\n                limb2: 0x28d40172399c3b03,\n            },\n            r1a0: u288 {\n                limb0: 0xca95f93e068ff337f73f54d5,\n                limb1: 0xabbf9fdc66cc4b10f9da741,\n                limb2: 0x22f1e27d902fc3ff,\n            },\n            r1a1: u288 {\n                limb0: 0xd12f8d49ae60289c48850a68,\n                limb1: 0xc27491d681fc8ec1edf9d749,\n                limb2: 0x14e28f1895e25047,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x473f1af712fdc704395691fd,\n                limb1: 0xb051550f381c34c4b0734c3b,\n                limb2: 0x268983f32c1ff74a,\n            },\n            r0a1: u288 {\n                limb0: 0xcd3e26d45de18312b60f63b3,\n                limb1: 0x4b1cf3f0c70a35c9ed0e7627,\n                limb2: 0x5faf0f8c5417fac,\n            },\n            r1a0: u288 {\n                limb0: 0x7186248c0f4f620c4db44b27,\n                limb1: 0xbaee201f71b6213a513c8c05,\n                limb2: 0x10696dfde75b0f74,\n            },\n            r1a1: u288 {\n                limb0: 0x47fce5c1d2e0b960d052202,\n                limb1: 0x12588735814120777f589cc7,\n                limb2: 0x755d1d035d5e613,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x473f1af712fdc704395691fd,\n                limb1: 0xb051550f381c34c4b0734c3b,\n                limb2: 0x268983f32c1ff74a,\n            },\n            r0a1: u288 {\n                limb0: 0xcd3e26d45de18312b60f63b3,\n                limb1: 0x4b1cf3f0c70a35c9ed0e7627,\n                limb2: 0x5faf0f8c5417fac,\n            },\n            r1a0: u288 {\n                limb0: 0x7186248c0f4f620c4db44b27,\n                limb1: 0xbaee201f71b6213a513c8c05,\n                limb2: 0x10696dfde75b0f74,\n            },\n            r1a1: u288 {\n                limb0: 0x47fce5c1d2e0b960d052202,\n                limb1: 0x12588735814120777f589cc7,\n                limb2: 0x755d1d035d5e613,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb069903d83fafb38587039b1,\n                limb1: 0x8c9aaa21806e5257331c422c,\n                limb2: 0x13dd740437a116d8,\n            },\n            r0a1: u288 {\n                limb0: 0x49d24e3bc669a61d3ec25caa,\n                limb1: 0xeca54bbcf540ef02c5af1e2d,\n                limb2: 0x193a4e0703852e04,\n            },\n            r1a0: u288 {\n                limb0: 0x40ed8176e59843d8d045473f,\n                limb1: 0xdb66931824221a92af499752,\n                limb2: 0x187f887f2aa471b3,\n            },\n            r1a1: u288 {\n                limb0: 0x5fb9760acf925b445a49c759,\n                limb1: 0xfc8fbbd94b6f146f5b998e84,\n                limb2: 0x79720a00d9dea8a,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9ea0a9193ffeb1be07f5f80b,\n                limb1: 0xfec5948eaf1002c198e0e6d5,\n                limb2: 0x2a4574fe23c4019d,\n            },\n            r0a1: u288 {\n                limb0: 0x192d77825dd5d0e9571db112,\n                limb1: 0x8b6f1079f2f153206cc2a502,\n                limb2: 0x247f3bad9ba3c5fe,\n            },\n            r1a0: u288 {\n                limb0: 0x250463ee5fe1aecbafe35d74,\n                limb1: 0xfb14416968302aaa18aca8dd,\n                limb2: 0x2667d8c8779f5e63,\n            },\n            r1a1: u288 {\n                limb0: 0x933a251b9bf2654b8cde705,\n                limb1: 0x5b666a17b42cebd66d4dc4a4,\n                limb2: 0xfbadfc59294fbce,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb069903d83fafb38587039b1,\n                limb1: 0x8c9aaa21806e5257331c422c,\n                limb2: 0x13dd740437a116d8,\n            },\n            r0a1: u288 {\n                limb0: 0x49d24e3bc669a61d3ec25caa,\n                limb1: 0xeca54bbcf540ef02c5af1e2d,\n                limb2: 0x193a4e0703852e04,\n            },\n            r1a0: u288 {\n                limb0: 0x40ed8176e59843d8d045473f,\n                limb1: 0xdb66931824221a92af499752,\n                limb2: 0x187f887f2aa471b3,\n            },\n            r1a1: u288 {\n                limb0: 0x5fb9760acf925b445a49c759,\n                limb1: 0xfc8fbbd94b6f146f5b998e84,\n                limb2: 0x79720a00d9dea8a,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9ea0a9193ffeb1be07f5f80b,\n                limb1: 0xfec5948eaf1002c198e0e6d5,\n                limb2: 0x2a4574fe23c4019d,\n            },\n            r0a1: u288 {\n                limb0: 0x192d77825dd5d0e9571db112,\n                limb1: 0x8b6f1079f2f153206cc2a502,\n                limb2: 0x247f3bad9ba3c5fe,\n            },\n            r1a0: u288 {\n                limb0: 0x250463ee5fe1aecbafe35d74,\n                limb1: 0xfb14416968302aaa18aca8dd,\n                limb2: 0x2667d8c8779f5e63,\n            },\n            r1a1: u288 {\n                limb0: 0x933a251b9bf2654b8cde705,\n                limb1: 0x5b666a17b42cebd66d4dc4a4,\n                limb2: 0xfbadfc59294fbce,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x46cedc1a7916cd4758546b8f,\n                limb1: 0xc0301e8d2df36447a89fb4e8,\n                limb2: 0xd2ca8656d93e09e,\n            },\n            r0a1: u288 {\n                limb0: 0xb3e000fc3f43a66bd80ccccd,\n                limb1: 0x4f3937ef435c74591278ec30,\n                limb2: 0x2cacd585791ab63b,\n            },\n            r1a0: u288 {\n                limb0: 0x124b8c1a597cadcb6e4cd237,\n                limb1: 0x8ff0b0f8077033669214f5a4,\n                limb2: 0x2d6762b5646a6eab,\n            },\n            r1a1: u288 {\n                limb0: 0x2ac1adef2ec8f4f11dc21d70,\n                limb1: 0xa47ce6dfc3545d78d6b35874,\n                limb2: 0x1e66cdeff84b898e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x46cedc1a7916cd4758546b8f,\n                limb1: 0xc0301e8d2df36447a89fb4e8,\n                limb2: 0xd2ca8656d93e09e,\n            },\n            r0a1: u288 {\n                limb0: 0xb3e000fc3f43a66bd80ccccd,\n                limb1: 0x4f3937ef435c74591278ec30,\n                limb2: 0x2cacd585791ab63b,\n            },\n            r1a0: u288 {\n                limb0: 0x124b8c1a597cadcb6e4cd237,\n                limb1: 0x8ff0b0f8077033669214f5a4,\n                limb2: 0x2d6762b5646a6eab,\n            },\n            r1a1: u288 {\n                limb0: 0x2ac1adef2ec8f4f11dc21d70,\n                limb1: 0xa47ce6dfc3545d78d6b35874,\n                limb2: 0x1e66cdeff84b898e,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7bded937b16de0bd513a7142,\n                limb1: 0xcfbbf3d13e42ad1b5895e0f2,\n                limb2: 0x1eca553e197cc436,\n            },\n            r0a1: u288 {\n                limb0: 0x1326b172ffdca7374561eaa7,\n                limb1: 0x1b78b181955868c0feac1a4d,\n                limb2: 0x27e90d835140fdf2,\n            },\n            r1a0: u288 {\n                limb0: 0xabe4a2e309f9a3632b4ed1ce,\n                limb1: 0xcea1bbacd364563ad1a77ebb,\n                limb2: 0x13127af43089e05a,\n            },\n            r1a1: u288 {\n                limb0: 0x87d1cfadbc1dc69a79324026,\n                limb1: 0x9c9c2c5e286779e0a0d895fc,\n                limb2: 0x111e946cf01322eb,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x7bded937b16de0bd513a7142,\n                limb1: 0xcfbbf3d13e42ad1b5895e0f2,\n                limb2: 0x1eca553e197cc436,\n            },\n            r0a1: u288 {\n                limb0: 0x1326b172ffdca7374561eaa7,\n                limb1: 0x1b78b181955868c0feac1a4d,\n                limb2: 0x27e90d835140fdf2,\n            },\n            r1a0: u288 {\n                limb0: 0xabe4a2e309f9a3632b4ed1ce,\n                limb1: 0xcea1bbacd364563ad1a77ebb,\n                limb2: 0x13127af43089e05a,\n            },\n            r1a1: u288 {\n                limb0: 0x87d1cfadbc1dc69a79324026,\n                limb1: 0x9c9c2c5e286779e0a0d895fc,\n                limb2: 0x111e946cf01322eb,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9defc443a5f969707c567481,\n                limb1: 0x55f8307d8694c3cec8cca946,\n                limb2: 0x1279f1c85384c33f,\n            },\n            r0a1: u288 {\n                limb0: 0xc45f4019a78bd32e0bdd4a1b,\n                limb1: 0xaf7ddf8600e2296ceaf95d02,\n                limb2: 0xbe5e1b962492d36,\n            },\n            r1a0: u288 {\n                limb0: 0x76245039bfb721ca1e2a0ee5,\n                limb1: 0x8645cf7b04c2c109a1286acc,\n                limb2: 0x295c9183ac4c0896,\n            },\n            r1a1: u288 {\n                limb0: 0xc074cb54759eec430185578f,\n                limb1: 0x5eccd5653e9f7f02ed581abc,\n                limb2: 0x14cf7692e622fcc5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xf8027d9e6b0a7844673e1245,\n                limb1: 0x694d9db62bf7bb9a41262f0b,\n                limb2: 0x58b480579c361aa,\n            },\n            r0a1: u288 {\n                limb0: 0x91e7cecfe16bbaaaf0e19fda,\n                limb1: 0xb9179883e4b271385d9f0518,\n                limb2: 0x1b352e7a150ca82b,\n            },\n            r1a0: u288 {\n                limb0: 0xaca0ba97589ae090a84d3146,\n                limb1: 0x6e9a896c16ec429fab404849,\n                limb2: 0x2360e6d4bbcf90f8,\n            },\n            r1a1: u288 {\n                limb0: 0xbb779a84783aa4ae72c18ceb,\n                limb1: 0x27e540fc9069d0a5ef39760c,\n                limb2: 0x114c9874632415bb,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9defc443a5f969707c567481,\n                limb1: 0x55f8307d8694c3cec8cca946,\n                limb2: 0x1279f1c85384c33f,\n            },\n            r0a1: u288 {\n                limb0: 0xc45f4019a78bd32e0bdd4a1b,\n                limb1: 0xaf7ddf8600e2296ceaf95d02,\n                limb2: 0xbe5e1b962492d36,\n            },\n            r1a0: u288 {\n                limb0: 0x76245039bfb721ca1e2a0ee5,\n                limb1: 0x8645cf7b04c2c109a1286acc,\n                limb2: 0x295c9183ac4c0896,\n            },\n            r1a1: u288 {\n                limb0: 0xc074cb54759eec430185578f,\n                limb1: 0x5eccd5653e9f7f02ed581abc,\n                limb2: 0x14cf7692e622fcc5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xf8027d9e6b0a7844673e1245,\n                limb1: 0x694d9db62bf7bb9a41262f0b,\n                limb2: 0x58b480579c361aa,\n            },\n            r0a1: u288 {\n                limb0: 0x91e7cecfe16bbaaaf0e19fda,\n                limb1: 0xb9179883e4b271385d9f0518,\n                limb2: 0x1b352e7a150ca82b,\n            },\n            r1a0: u288 {\n                limb0: 0xaca0ba97589ae090a84d3146,\n                limb1: 0x6e9a896c16ec429fab404849,\n                limb2: 0x2360e6d4bbcf90f8,\n            },\n            r1a1: u288 {\n                limb0: 0xbb779a84783aa4ae72c18ceb,\n                limb1: 0x27e540fc9069d0a5ef39760c,\n                limb2: 0x114c9874632415bb,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2ec97171b355380af9597308,\n                limb1: 0x5c98f31e4243eabcdc9c4d0a,\n                limb2: 0x189272184abbc67e,\n            },\n            r0a1: u288 {\n                limb0: 0x70b2a249ee2b52a2be3d20c1,\n                limb1: 0x64f57fa1aabf12824a116967,\n                limb2: 0x2eff2b0744e46233,\n            },\n            r1a0: u288 {\n                limb0: 0x745cbcaad594ddd38a5f1f4e,\n                limb1: 0x95d1063847bfb4d5e006aa7d,\n                limb2: 0x16f68ed87066356e,\n            },\n            r1a1: u288 {\n                limb0: 0xf642b7b361d87b9f994ddd0d,\n                limb1: 0xdd217c0a6997dd8ec2539a54,\n                limb2: 0xeb46e09edaa161c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x2ec97171b355380af9597308,\n                limb1: 0x5c98f31e4243eabcdc9c4d0a,\n                limb2: 0x189272184abbc67e,\n            },\n            r0a1: u288 {\n                limb0: 0x70b2a249ee2b52a2be3d20c1,\n                limb1: 0x64f57fa1aabf12824a116967,\n                limb2: 0x2eff2b0744e46233,\n            },\n            r1a0: u288 {\n                limb0: 0x745cbcaad594ddd38a5f1f4e,\n                limb1: 0x95d1063847bfb4d5e006aa7d,\n                limb2: 0x16f68ed87066356e,\n            },\n            r1a1: u288 {\n                limb0: 0xf642b7b361d87b9f994ddd0d,\n                limb1: 0xdd217c0a6997dd8ec2539a54,\n                limb2: 0xeb46e09edaa161c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x75698f1cd702ddc2b33e1a09,\n                limb1: 0x491bab5348fd4670d338478a,\n                limb2: 0xf12d300f3713d8,\n            },\n            r0a1: u288 {\n                limb0: 0x7f8777ccc370604bba36f21e,\n                limb1: 0x9249013429c123002a183f50,\n                limb2: 0x1fcfca1835131e72,\n            },\n            r1a0: u288 {\n                limb0: 0x8847a89e94951a7f1402ca0a,\n                limb1: 0xcf6292aefd5885587e4b501a,\n                limb2: 0x1f79fc126e4b16c6,\n            },\n            r1a1: u288 {\n                limb0: 0x9d2a84ea463b4f6fa6bdef4f,\n                limb1: 0x757ea11f432296fd22343447,\n                limb2: 0x2679fc65403a5f42,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x75698f1cd702ddc2b33e1a09,\n                limb1: 0x491bab5348fd4670d338478a,\n                limb2: 0xf12d300f3713d8,\n            },\n            r0a1: u288 {\n                limb0: 0x7f8777ccc370604bba36f21e,\n                limb1: 0x9249013429c123002a183f50,\n                limb2: 0x1fcfca1835131e72,\n            },\n            r1a0: u288 {\n                limb0: 0x8847a89e94951a7f1402ca0a,\n                limb1: 0xcf6292aefd5885587e4b501a,\n                limb2: 0x1f79fc126e4b16c6,\n            },\n            r1a1: u288 {\n                limb0: 0x9d2a84ea463b4f6fa6bdef4f,\n                limb1: 0x757ea11f432296fd22343447,\n                limb2: 0x2679fc65403a5f42,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x34f8267fb775f59435a975a3,\n                limb1: 0x5e24c3e432badae39861f051,\n                limb2: 0x172b5256de7536ee,\n            },\n            r0a1: u288 {\n                limb0: 0x5c68fe19ba153dcabad4077e,\n                limb1: 0xfcc73acc37bc3efd49f1611c,\n                limb2: 0x23e6dc58075ef8d9,\n            },\n            r1a0: u288 {\n                limb0: 0x4459c03b4d093ccedd5d9bb8,\n                limb1: 0xe78ba9031b31e2be3ed8f2ca,\n                limb2: 0x22ca3c03e154d61,\n            },\n            r1a1: u288 {\n                limb0: 0xe3ddeffb8c8f1a4cffd5c3f8,\n                limb1: 0x1241cc4c4b10d455e4d51279,\n                limb2: 0x1198575579f06677,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x34f8267fb775f59435a975a3,\n                limb1: 0x5e24c3e432badae39861f051,\n                limb2: 0x172b5256de7536ee,\n            },\n            r0a1: u288 {\n                limb0: 0x5c68fe19ba153dcabad4077e,\n                limb1: 0xfcc73acc37bc3efd49f1611c,\n                limb2: 0x23e6dc58075ef8d9,\n            },\n            r1a0: u288 {\n                limb0: 0x4459c03b4d093ccedd5d9bb8,\n                limb1: 0xe78ba9031b31e2be3ed8f2ca,\n                limb2: 0x22ca3c03e154d61,\n            },\n            r1a1: u288 {\n                limb0: 0xe3ddeffb8c8f1a4cffd5c3f8,\n                limb1: 0x1241cc4c4b10d455e4d51279,\n                limb2: 0x1198575579f06677,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb18b3c24e43743bdb2cdbd80,\n                limb1: 0xe998c4bba97ba39223cf4a9c,\n                limb2: 0x19dc441e0f76e9e1,\n            },\n            r0a1: u288 {\n                limb0: 0x4c5d0509f4c4d4eac63f9f95,\n                limb1: 0x5d3dd460fa5eec27c0f1c16d,\n                limb2: 0x1ce5fefb5da40fc0,\n            },\n            r1a0: u288 {\n                limb0: 0x817ac722e3b0875c94d0c02d,\n                limb1: 0x92716a07a8780a22c240503b,\n                limb2: 0x14624b4326fac880,\n            },\n            r1a1: u288 {\n                limb0: 0x8f2279554369817a9f36b5b2,\n                limb1: 0x6b6125c5be4c3c62b2ffbe7,\n                limb2: 0x1e71362b2df417b3,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x5dbc257e7bb51557102dbe2a,\n                limb1: 0xce362ed76472b2864c5f5b6f,\n                limb2: 0xbd519ac92f31216,\n            },\n            r0a1: u288 {\n                limb0: 0xe24007146139cc5810b3cbd1,\n                limb1: 0xef3e2e5013aee1213c842bfb,\n                limb2: 0x1f9eea9d2acec058,\n            },\n            r1a0: u288 {\n                limb0: 0x913167d6677c3bc99423eaeb,\n                limb1: 0xa2fa67dadc942e074343364,\n                limb2: 0x264f390c803c8e6,\n            },\n            r1a1: u288 {\n                limb0: 0x96fe98ba8d3de40aa91c7cef,\n                limb1: 0x9c98ececaf9210453a32c237,\n                limb2: 0xbe97bca2544faec,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb18b3c24e43743bdb2cdbd80,\n                limb1: 0xe998c4bba97ba39223cf4a9c,\n                limb2: 0x19dc441e0f76e9e1,\n            },\n            r0a1: u288 {\n                limb0: 0x4c5d0509f4c4d4eac63f9f95,\n                limb1: 0x5d3dd460fa5eec27c0f1c16d,\n                limb2: 0x1ce5fefb5da40fc0,\n            },\n            r1a0: u288 {\n                limb0: 0x817ac722e3b0875c94d0c02d,\n                limb1: 0x92716a07a8780a22c240503b,\n                limb2: 0x14624b4326fac880,\n            },\n            r1a1: u288 {\n                limb0: 0x8f2279554369817a9f36b5b2,\n                limb1: 0x6b6125c5be4c3c62b2ffbe7,\n                limb2: 0x1e71362b2df417b3,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x5dbc257e7bb51557102dbe2a,\n                limb1: 0xce362ed76472b2864c5f5b6f,\n                limb2: 0xbd519ac92f31216,\n            },\n            r0a1: u288 {\n                limb0: 0xe24007146139cc5810b3cbd1,\n                limb1: 0xef3e2e5013aee1213c842bfb,\n                limb2: 0x1f9eea9d2acec058,\n            },\n            r1a0: u288 {\n                limb0: 0x913167d6677c3bc99423eaeb,\n                limb1: 0xa2fa67dadc942e074343364,\n                limb2: 0x264f390c803c8e6,\n            },\n            r1a1: u288 {\n                limb0: 0x96fe98ba8d3de40aa91c7cef,\n                limb1: 0x9c98ececaf9210453a32c237,\n                limb2: 0xbe97bca2544faec,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9fdc0157c3f6d20bf1149a1e,\n                limb1: 0x8dfe542e1b42911f5be6b44f,\n                limb2: 0x1777319f3952635d,\n            },\n            r0a1: u288 {\n                limb0: 0x63c6acb2bb3dd9747a3a9e32,\n                limb1: 0xc1c8cdb31066df4015d898a0,\n                limb2: 0xa1a8086940fa431,\n            },\n            r1a0: u288 {\n                limb0: 0x26964bc2ff40bddadf582927,\n                limb1: 0x5b95722b0f70f6745c2bdbff,\n                limb2: 0x236b02ee4ba7fc42,\n            },\n            r1a1: u288 {\n                limb0: 0xfc468b651b4a0b741fcab682,\n                limb1: 0x947fdb5abdbbf09b1861c9ff,\n                limb2: 0x168fbfc692ed02,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9fdc0157c3f6d20bf1149a1e,\n                limb1: 0x8dfe542e1b42911f5be6b44f,\n                limb2: 0x1777319f3952635d,\n            },\n            r0a1: u288 {\n                limb0: 0x63c6acb2bb3dd9747a3a9e32,\n                limb1: 0xc1c8cdb31066df4015d898a0,\n                limb2: 0xa1a8086940fa431,\n            },\n            r1a0: u288 {\n                limb0: 0x26964bc2ff40bddadf582927,\n                limb1: 0x5b95722b0f70f6745c2bdbff,\n                limb2: 0x236b02ee4ba7fc42,\n            },\n            r1a1: u288 {\n                limb0: 0xfc468b651b4a0b741fcab682,\n                limb1: 0x947fdb5abdbbf09b1861c9ff,\n                limb2: 0x168fbfc692ed02,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3b05d569dd3cfe7e6ef2d371,\n                limb1: 0x1ab213c78ac4d75edd6143b4,\n                limb2: 0x1bb1c4d653a5216f,\n            },\n            r0a1: u288 {\n                limb0: 0x9b92fea68b4f30a46556d398,\n                limb1: 0x83327fb29ce9aca58bde417a,\n                limb2: 0x16153220e81ed45d,\n            },\n            r1a0: u288 {\n                limb0: 0xb0d2a345496d30460462033c,\n                limb1: 0xa40b16c304ff5061144ae50f,\n                limb2: 0x26721ea54af25d00,\n            },\n            r1a1: u288 {\n                limb0: 0xa5ccabe21466c944dbb14095,\n                limb1: 0xa4c756d31e5d0f448cde68b2,\n                limb2: 0x2ae93a053a3d338d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3b05d569dd3cfe7e6ef2d371,\n                limb1: 0x1ab213c78ac4d75edd6143b4,\n                limb2: 0x1bb1c4d653a5216f,\n            },\n            r0a1: u288 {\n                limb0: 0x9b92fea68b4f30a46556d398,\n                limb1: 0x83327fb29ce9aca58bde417a,\n                limb2: 0x16153220e81ed45d,\n            },\n            r1a0: u288 {\n                limb0: 0xb0d2a345496d30460462033c,\n                limb1: 0xa40b16c304ff5061144ae50f,\n                limb2: 0x26721ea54af25d00,\n            },\n            r1a1: u288 {\n                limb0: 0xa5ccabe21466c944dbb14095,\n                limb1: 0xa4c756d31e5d0f448cde68b2,\n                limb2: 0x2ae93a053a3d338d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x423870b6e907bad3e53a1eb8,\n                limb1: 0xa40d0139dec99f50870dad86,\n                limb2: 0xb478020107ff84a,\n            },\n            r0a1: u288 {\n                limb0: 0x7955bbd3730aa19c17ab5055,\n                limb1: 0xaa78ed37b06b1fd334e3d3cf,\n                limb2: 0xd4f1f559a4fe8c6,\n            },\n            r1a0: u288 {\n                limb0: 0xe660ec3b96e88f895941963f,\n                limb1: 0x58b13980728f7f2cb5a5434b,\n                limb2: 0x10784713fb59eeec,\n            },\n            r1a1: u288 {\n                limb0: 0x90ac547745e13ed221e7ff6d,\n                limb1: 0x72fd8ba2100b52edc8fe6adf,\n                limb2: 0xb07cd596e668799,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x423870b6e907bad3e53a1eb8,\n                limb1: 0xa40d0139dec99f50870dad86,\n                limb2: 0xb478020107ff84a,\n            },\n            r0a1: u288 {\n                limb0: 0x7955bbd3730aa19c17ab5055,\n                limb1: 0xaa78ed37b06b1fd334e3d3cf,\n                limb2: 0xd4f1f559a4fe8c6,\n            },\n            r1a0: u288 {\n                limb0: 0xe660ec3b96e88f895941963f,\n                limb1: 0x58b13980728f7f2cb5a5434b,\n                limb2: 0x10784713fb59eeec,\n            },\n            r1a1: u288 {\n                limb0: 0x90ac547745e13ed221e7ff6d,\n                limb1: 0x72fd8ba2100b52edc8fe6adf,\n                limb2: 0xb07cd596e668799,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc63bfc22e89cbddab53d25fe,\n                limb1: 0x5bfa33f41b648419dad6ecee,\n                limb2: 0x29f285f798b40610,\n            },\n            r0a1: u288 {\n                limb0: 0x685052730566d5e671c6896a,\n                limb1: 0x9d632cc21dc7d36c01732c8d,\n                limb2: 0x2d2e5f43b41debb,\n            },\n            r1a0: u288 {\n                limb0: 0xa08a1b8fcecc8a0833b4cfba,\n                limb1: 0x72be9ff16897e8415c88d391,\n                limb2: 0x2f11915e5dbfe4db,\n            },\n            r1a1: u288 {\n                limb0: 0x25ccf150d767c294c0340770,\n                limb1: 0x18c22516696708d37018fa53,\n                limb2: 0x2f6ceab98e5c92ec,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x99481a4102c53eac80f3388e,\n                limb1: 0xf5f8486ec984928173976d3f,\n                limb2: 0x1bd283b4cb081855,\n            },\n            r0a1: u288 {\n                limb0: 0x5b874e4477dc6e06572fb2b7,\n                limb1: 0x249ee0ef06247fa425a3fef5,\n                limb2: 0x1ae0e74588a52b14,\n            },\n            r1a0: u288 {\n                limb0: 0xea5de795431401fb27840e3c,\n                limb1: 0x6faf5d812e5867e03f3e342c,\n                limb2: 0x275215ae272382f9,\n            },\n            r1a1: u288 {\n                limb0: 0x486aa5eeaec04f001c7ff5,\n                limb1: 0xd41375319ea34adc1551d9a3,\n                limb2: 0x3cf1dc61b974fbb,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xc63bfc22e89cbddab53d25fe,\n                limb1: 0x5bfa33f41b648419dad6ecee,\n                limb2: 0x29f285f798b40610,\n            },\n            r0a1: u288 {\n                limb0: 0x685052730566d5e671c6896a,\n                limb1: 0x9d632cc21dc7d36c01732c8d,\n                limb2: 0x2d2e5f43b41debb,\n            },\n            r1a0: u288 {\n                limb0: 0xa08a1b8fcecc8a0833b4cfba,\n                limb1: 0x72be9ff16897e8415c88d391,\n                limb2: 0x2f11915e5dbfe4db,\n            },\n            r1a1: u288 {\n                limb0: 0x25ccf150d767c294c0340770,\n                limb1: 0x18c22516696708d37018fa53,\n                limb2: 0x2f6ceab98e5c92ec,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x99481a4102c53eac80f3388e,\n                limb1: 0xf5f8486ec984928173976d3f,\n                limb2: 0x1bd283b4cb081855,\n            },\n            r0a1: u288 {\n                limb0: 0x5b874e4477dc6e06572fb2b7,\n                limb1: 0x249ee0ef06247fa425a3fef5,\n                limb2: 0x1ae0e74588a52b14,\n            },\n            r1a0: u288 {\n                limb0: 0xea5de795431401fb27840e3c,\n                limb1: 0x6faf5d812e5867e03f3e342c,\n                limb2: 0x275215ae272382f9,\n            },\n            r1a1: u288 {\n                limb0: 0x486aa5eeaec04f001c7ff5,\n                limb1: 0xd41375319ea34adc1551d9a3,\n                limb2: 0x3cf1dc61b974fbb,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa32359cf0ec38b184a1dcea9,\n                limb1: 0x6bbbc5ef1267f2d51a878381,\n                limb2: 0x28df1061f929b4db,\n            },\n            r0a1: u288 {\n                limb0: 0xd675802cc8b672fe8783e2d6,\n                limb1: 0xbb7d5e433d79fd50d9469a7d,\n                limb2: 0x2784b6b89b7aa3ce,\n            },\n            r1a0: u288 {\n                limb0: 0x249ea526c4c84209df18e160,\n                limb1: 0x6b7ecab858c43a482ff55a47,\n                limb2: 0x45d81dac9b9b8ec,\n            },\n            r1a1: u288 {\n                limb0: 0x2e044de8199d7a5654fd9506,\n                limb1: 0x17bae9b6381270ae16b4dded,\n                limb2: 0xfebafd1c55a0818,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa32359cf0ec38b184a1dcea9,\n                limb1: 0x6bbbc5ef1267f2d51a878381,\n                limb2: 0x28df1061f929b4db,\n            },\n            r0a1: u288 {\n                limb0: 0xd675802cc8b672fe8783e2d6,\n                limb1: 0xbb7d5e433d79fd50d9469a7d,\n                limb2: 0x2784b6b89b7aa3ce,\n            },\n            r1a0: u288 {\n                limb0: 0x249ea526c4c84209df18e160,\n                limb1: 0x6b7ecab858c43a482ff55a47,\n                limb2: 0x45d81dac9b9b8ec,\n            },\n            r1a1: u288 {\n                limb0: 0x2e044de8199d7a5654fd9506,\n                limb1: 0x17bae9b6381270ae16b4dded,\n                limb2: 0xfebafd1c55a0818,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd813dc3ba36fadef5eefdba8,\n                limb1: 0x6d01874326cb306accf0faff,\n                limb2: 0x1c464c65c360a4c8,\n            },\n            r0a1: u288 {\n                limb0: 0xb7d92aae88aac832f2fa8c2e,\n                limb1: 0xf57a537d0bbdac821cb31ab3,\n                limb2: 0x527b1aec5c0d2f1,\n            },\n            r1a0: u288 {\n                limb0: 0xa07f43936bdbdf1dec60500b,\n                limb1: 0x742456f2a8b6a9bae91cb16,\n                limb2: 0x1c4033eb3eba0cc5,\n            },\n            r1a1: u288 {\n                limb0: 0x94b3709ef3fc176b25617e7d,\n                limb1: 0xaf22d45fcd3d4e3d14874fa,\n                limb2: 0x183887caa720ba0d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3f02b00de6315b49872daa4d,\n                limb1: 0xc303ab1deabf850249e8315f,\n                limb2: 0x1bdb6a8f0f0fdd3,\n            },\n            r0a1: u288 {\n                limb0: 0x92fce2a1127ff2f9b751e30d,\n                limb1: 0x3eb729d57b891ac828eb15c3,\n                limb2: 0x2b484f5877256bb1,\n            },\n            r1a0: u288 {\n                limb0: 0xf89b2f972cb4f7f4c599e891,\n                limb1: 0xb4f5d2a5bde63ee512f11d9e,\n                limb2: 0x2dcdbce01b88089,\n            },\n            r1a1: u288 {\n                limb0: 0xa7a47fc449bb8a9d2562bfcd,\n                limb1: 0xc4e2d6ba5582860d7339459e,\n                limb2: 0x1d55e010c99b8d6c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd813dc3ba36fadef5eefdba8,\n                limb1: 0x6d01874326cb306accf0faff,\n                limb2: 0x1c464c65c360a4c8,\n            },\n            r0a1: u288 {\n                limb0: 0xb7d92aae88aac832f2fa8c2e,\n                limb1: 0xf57a537d0bbdac821cb31ab3,\n                limb2: 0x527b1aec5c0d2f1,\n            },\n            r1a0: u288 {\n                limb0: 0xa07f43936bdbdf1dec60500b,\n                limb1: 0x742456f2a8b6a9bae91cb16,\n                limb2: 0x1c4033eb3eba0cc5,\n            },\n            r1a1: u288 {\n                limb0: 0x94b3709ef3fc176b25617e7d,\n                limb1: 0xaf22d45fcd3d4e3d14874fa,\n                limb2: 0x183887caa720ba0d,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3f02b00de6315b49872daa4d,\n                limb1: 0xc303ab1deabf850249e8315f,\n                limb2: 0x1bdb6a8f0f0fdd3,\n            },\n            r0a1: u288 {\n                limb0: 0x92fce2a1127ff2f9b751e30d,\n                limb1: 0x3eb729d57b891ac828eb15c3,\n                limb2: 0x2b484f5877256bb1,\n            },\n            r1a0: u288 {\n                limb0: 0xf89b2f972cb4f7f4c599e891,\n                limb1: 0xb4f5d2a5bde63ee512f11d9e,\n                limb2: 0x2dcdbce01b88089,\n            },\n            r1a1: u288 {\n                limb0: 0xa7a47fc449bb8a9d2562bfcd,\n                limb1: 0xc4e2d6ba5582860d7339459e,\n                limb2: 0x1d55e010c99b8d6c,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd6632e909bb2d794dcbb2d61,\n                limb1: 0x7457873febfef7ae91c35b58,\n                limb2: 0x9a9ca4c4d09e546,\n            },\n            r0a1: u288 {\n                limb0: 0x94c62fe653f917fc33a9d5b5,\n                limb1: 0x8bc51d76a334c7a433ae35ab,\n                limb2: 0xb27ad066a166ac4,\n            },\n            r1a0: u288 {\n                limb0: 0x96db5ee9875982bf556c73e9,\n                limb1: 0xe9f1ec9f66254c4f268a27f,\n                limb2: 0x1eef6e016b9ca6ff,\n            },\n            r1a1: u288 {\n                limb0: 0xf6d057dbafe03b544a69128f,\n                limb1: 0xe03743865a854f3f554c95b7,\n                limb2: 0x29c21dd74cd29781,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb964e3c6d975ca8cf820a505,\n                limb1: 0x58cf1dfe1e77f86538998d74,\n                limb2: 0x253f8f7c9eb4af1,\n            },\n            r0a1: u288 {\n                limb0: 0x751409cbae1c0030ee5977d1,\n                limb1: 0xe203b703551126fdae59e500,\n                limb2: 0x2e4d7a2dbc83f9b5,\n            },\n            r1a0: u288 {\n                limb0: 0x3bb2d7500573a130dfcc7b70,\n                limb1: 0x2e94772d1e8a4db8783ea2f7,\n                limb2: 0xb43fdec6bd93bce,\n            },\n            r1a1: u288 {\n                limb0: 0xdcad2320f5fe6edb3ee742ff,\n                limb1: 0xdb00d689081d6770c6978582,\n                limb2: 0x6029475ae5587e5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xd6632e909bb2d794dcbb2d61,\n                limb1: 0x7457873febfef7ae91c35b58,\n                limb2: 0x9a9ca4c4d09e546,\n            },\n            r0a1: u288 {\n                limb0: 0x94c62fe653f917fc33a9d5b5,\n                limb1: 0x8bc51d76a334c7a433ae35ab,\n                limb2: 0xb27ad066a166ac4,\n            },\n            r1a0: u288 {\n                limb0: 0x96db5ee9875982bf556c73e9,\n                limb1: 0xe9f1ec9f66254c4f268a27f,\n                limb2: 0x1eef6e016b9ca6ff,\n            },\n            r1a1: u288 {\n                limb0: 0xf6d057dbafe03b544a69128f,\n                limb1: 0xe03743865a854f3f554c95b7,\n                limb2: 0x29c21dd74cd29781,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xb964e3c6d975ca8cf820a505,\n                limb1: 0x58cf1dfe1e77f86538998d74,\n                limb2: 0x253f8f7c9eb4af1,\n            },\n            r0a1: u288 {\n                limb0: 0x751409cbae1c0030ee5977d1,\n                limb1: 0xe203b703551126fdae59e500,\n                limb2: 0x2e4d7a2dbc83f9b5,\n            },\n            r1a0: u288 {\n                limb0: 0x3bb2d7500573a130dfcc7b70,\n                limb1: 0x2e94772d1e8a4db8783ea2f7,\n                limb2: 0xb43fdec6bd93bce,\n            },\n            r1a1: u288 {\n                limb0: 0xdcad2320f5fe6edb3ee742ff,\n                limb1: 0xdb00d689081d6770c6978582,\n                limb2: 0x6029475ae5587e5,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x44ec71963665d6ec8ad74841,\n                limb1: 0x8403830d652edbde8339e929,\n                limb2: 0x100fb102d85f5085,\n            },\n            r0a1: u288 {\n                limb0: 0xc055c9daf26d35310e7b1e74,\n                limb1: 0x40cdbeaffc8383e3cdc8926,\n                limb2: 0x6fd31831cc5c2e2,\n            },\n            r1a0: u288 {\n                limb0: 0xad2ce478f7297f6138ae1c8c,\n                limb1: 0x4d31d6f7382542621c5b6e17,\n                limb2: 0x7dbf7c3c0f14e33,\n            },\n            r1a1: u288 {\n                limb0: 0xe4640196247c27251483088e,\n                limb1: 0x34dea70f9956ebc54e0606ba,\n                limb2: 0x8b41cd44b48eaaa,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x44ec71963665d6ec8ad74841,\n                limb1: 0x8403830d652edbde8339e929,\n                limb2: 0x100fb102d85f5085,\n            },\n            r0a1: u288 {\n                limb0: 0xc055c9daf26d35310e7b1e74,\n                limb1: 0x40cdbeaffc8383e3cdc8926,\n                limb2: 0x6fd31831cc5c2e2,\n            },\n            r1a0: u288 {\n                limb0: 0xad2ce478f7297f6138ae1c8c,\n                limb1: 0x4d31d6f7382542621c5b6e17,\n                limb2: 0x7dbf7c3c0f14e33,\n            },\n            r1a1: u288 {\n                limb0: 0xe4640196247c27251483088e,\n                limb1: 0x34dea70f9956ebc54e0606ba,\n                limb2: 0x8b41cd44b48eaaa,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa4dc3d37041029c7b2f1bb9,\n                limb1: 0xf72869e330906647a7d54af8,\n                limb2: 0x705bd30bad6ce42,\n            },\n            r0a1: u288 {\n                limb0: 0xb00eef39b09348fd65e27aec,\n                limb1: 0xd5e053aa5ae39359fac6cdbc,\n                limb2: 0x90e03f1f820fe9a,\n            },\n            r1a0: u288 {\n                limb0: 0x7f56704e86148b1a5595647e,\n                limb1: 0xb8e4acc00d27e4eaf2d3de14,\n                limb2: 0x160398dceafe1fbe,\n            },\n            r1a1: u288 {\n                limb0: 0x7c39f499101722b5d82ceec4,\n                limb1: 0xaf99a11bb8ab6c8134832009,\n                limb2: 0x2d7388a9d5187a36,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0xa4dc3d37041029c7b2f1bb9,\n                limb1: 0xf72869e330906647a7d54af8,\n                limb2: 0x705bd30bad6ce42,\n            },\n            r0a1: u288 {\n                limb0: 0xb00eef39b09348fd65e27aec,\n                limb1: 0xd5e053aa5ae39359fac6cdbc,\n                limb2: 0x90e03f1f820fe9a,\n            },\n            r1a0: u288 {\n                limb0: 0x7f56704e86148b1a5595647e,\n                limb1: 0xb8e4acc00d27e4eaf2d3de14,\n                limb2: 0x160398dceafe1fbe,\n            },\n            r1a1: u288 {\n                limb0: 0x7c39f499101722b5d82ceec4,\n                limb1: 0xaf99a11bb8ab6c8134832009,\n                limb2: 0x2d7388a9d5187a36,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x26743d3c5ceab5151856abc8,\n                limb1: 0x2bc840c6b3375132f6df6c4d,\n                limb2: 0xf20cc4455c9206b,\n            },\n            r0a1: u288 {\n                limb0: 0x75257f283994114ee03b667e,\n                limb1: 0xb71eada78256c22a8b22564d,\n                limb2: 0x2c4f6002e64db7e4,\n            },\n            r1a0: u288 {\n                limb0: 0xadeaeea86f50da58c232d0b5,\n                limb1: 0xe988059d0234448257239cec,\n                limb2: 0x23c7423d92bbc634,\n            },\n            r1a1: u288 {\n                limb0: 0x6afee648e46e570b43f3696d,\n                limb1: 0x9a3f1aae0067f1de3d0a489,\n                limb2: 0xa7256957d6a8ed,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x26743d3c5ceab5151856abc8,\n                limb1: 0x2bc840c6b3375132f6df6c4d,\n                limb2: 0xf20cc4455c9206b,\n            },\n            r0a1: u288 {\n                limb0: 0x75257f283994114ee03b667e,\n                limb1: 0xb71eada78256c22a8b22564d,\n                limb2: 0x2c4f6002e64db7e4,\n            },\n            r1a0: u288 {\n                limb0: 0xadeaeea86f50da58c232d0b5,\n                limb1: 0xe988059d0234448257239cec,\n                limb2: 0x23c7423d92bbc634,\n            },\n            r1a1: u288 {\n                limb0: 0x6afee648e46e570b43f3696d,\n                limb1: 0x9a3f1aae0067f1de3d0a489,\n                limb2: 0xa7256957d6a8ed,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9894b9b6df6285e00cb3ef9d,\n                limb1: 0xc7799b231f547596527979f9,\n                limb2: 0x1873cf42f2befcbc,\n            },\n            r0a1: u288 {\n                limb0: 0xea5b37d753c87bdd55f0ed0,\n                limb1: 0x70d0582e29fd33896e945be5,\n                limb2: 0x273059304eef6b83,\n            },\n            r1a0: u288 {\n                limb0: 0x1a8c1b6d717a3b41ece55725,\n                limb1: 0x7b31c1b97f15745a6d80ea0d,\n                limb2: 0x2cd26d3a7bbe93e6,\n            },\n            r1a1: u288 {\n                limb0: 0xe2ad8bc0279b5c304c489ca6,\n                limb1: 0x176d1c945108ce77fcd238cd,\n                limb2: 0xde3c7c3f1c3d01b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3980a9ac8c34a235d2616212,\n                limb1: 0x84c8a8ab074ce118b68f30e9,\n                limb2: 0x13d1902579c8a95e,\n            },\n            r0a1: u288 {\n                limb0: 0x84b1be8046674b6544cdbd07,\n                limb1: 0x198c1a70db0768c46ee0879f,\n                limb2: 0xb7e46866f7c1d4f,\n            },\n            r1a0: u288 {\n                limb0: 0x5aa04f6da050797974642dff,\n                limb1: 0x67018b676db95697c6fc0e94,\n                limb2: 0x174b5365db908344,\n            },\n            r1a1: u288 {\n                limb0: 0x12ae4d7bff5800094457c75f,\n                limb1: 0xaf7fb1cf0adfdefc0943c20d,\n                limb2: 0x2e168cd37dc90c25,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x9894b9b6df6285e00cb3ef9d,\n                limb1: 0xc7799b231f547596527979f9,\n                limb2: 0x1873cf42f2befcbc,\n            },\n            r0a1: u288 {\n                limb0: 0xea5b37d753c87bdd55f0ed0,\n                limb1: 0x70d0582e29fd33896e945be5,\n                limb2: 0x273059304eef6b83,\n            },\n            r1a0: u288 {\n                limb0: 0x1a8c1b6d717a3b41ece55725,\n                limb1: 0x7b31c1b97f15745a6d80ea0d,\n                limb2: 0x2cd26d3a7bbe93e6,\n            },\n            r1a1: u288 {\n                limb0: 0xe2ad8bc0279b5c304c489ca6,\n                limb1: 0x176d1c945108ce77fcd238cd,\n                limb2: 0xde3c7c3f1c3d01b,\n            },\n        },\n        G2Line {\n            r0a0: u288 {\n                limb0: 0x3980a9ac8c34a235d2616212,\n                limb1: 0x84c8a8ab074ce118b68f30e9,\n                limb2: 0x13d1902579c8a95e,\n            },\n            r0a1: u288 {\n                limb0: 0x84b1be8046674b6544cdbd07,\n                limb1: 0x198c1a70db0768c46ee0879f,\n                limb2: 0xb7e46866f7c1d4f,\n            },\n            r1a0: u288 {\n                limb0: 0x5aa04f6da050797974642dff,\n                limb1: 0x67018b676db95697c6fc0e94,\n                limb2: 0x174b5365db908344,\n            },\n            r1a1: u288 {\n                limb0: 0x12ae4d7bff5800094457c75f,\n                limb1: 0xaf7fb1cf0adfdefc0943c20d,\n                limb2: 0x2e168cd37dc90c25,\n            },\n        },\n    ]\n        .span();\n    let hint = MPCheckHintBN254 {\n        lambda_root: E12D {\n            w0: u288 {\n                limb0: 0x23ca9e30f07b55b24f193b0f,\n                limb1: 0xe87a29af47945c59bebde6e3,\n                limb2: 0x25202875a18b48d6,\n            },\n            w1: u288 {\n                limb0: 0x73c45803819fb7aff4be48d4,\n                limb1: 0xbc4e8cdff399f10e04552e9e,\n                limb2: 0xe200b0579a47bb3,\n            },\n            w2: u288 {\n                limb0: 0xb7e202dd946f1c1e893294f5,\n                limb1: 0x9b242eecb685264d1d38f92,\n                limb2: 0x2743277dfb400b12,\n            },\n            w3: u288 {\n                limb0: 0x713dcf49af707a72abcdd23f,\n                limb1: 0x297d2b276e1e10592a67e028,\n                limb2: 0x7ce37c37c9a9830,\n            },\n            w4: u288 {\n                limb0: 0x1a1e7136ddb0226444e3dd93,\n                limb1: 0x10ec67e9ba10af63294f9067,\n                limb2: 0x2209ca34e9632ffe,\n            },\n            w5: u288 {\n                limb0: 0x282b36f9275c1d75a96b4bba,\n                limb1: 0xcd30a7361a37968571854966,\n                limb2: 0x56824745ec0be7e,\n            },\n            w6: u288 {\n                limb0: 0xfd161b3f69becd983863c1f8,\n                limb1: 0x9e173cc60a49b16b0ae54cb6,\n                limb2: 0x21c2ff8564f4b359,\n            },\n            w7: u288 {\n                limb0: 0x83b2b95b17f74a4135c8f0ec,\n                limb1: 0x1d49d1548ca28958a1477f77,\n                limb2: 0x21dfaf1ab1424f7a,\n            },\n            w8: u288 {\n                limb0: 0x9f42e8c899eb37b1c750776a,\n                limb1: 0x1d527af4bf9944d9cacfc9b6,\n                limb2: 0x2cedae6373f81ff3,\n            },\n            w9: u288 {\n                limb0: 0x5826957af02c5ff75ecf2f7f,\n                limb1: 0x63de3d3ed13db73b40636e33,\n                limb2: 0x1b4e8f8bab34df27,\n            },\n            w10: u288 {\n                limb0: 0xe47acbb5fc054b575c4de206,\n                limb1: 0x21c9659455fa7db99219fcb1,\n                limb2: 0x1da51303ee50de45,\n            },\n            w11: u288 {\n                limb0: 0xfba59dce6d63b61b27c81f88,\n                limb1: 0xdcca144de9ddd923bbb33c4b,\n                limb2: 0x291ee2a6f851083a,\n            },\n        },\n        lambda_root_inverse: E12D {\n            w0: u288 {\n                limb0: 0xb5c3eabbd3b1eef8ea5617f4,\n                limb1: 0x11833d922f25b3a34d3fca8f,\n                limb2: 0x13750c425c423ee,\n            },\n            w1: u288 {\n                limb0: 0x8983bd9d7448c89812be4350,\n                limb1: 0xcc0a0b4ca76d768c80ff8e55,\n                limb2: 0xfb6e764fd741485,\n            },\n            w2: u288 {\n                limb0: 0x3edb9b44088f29518c1cf962,\n                limb1: 0x3800221baf8e4d5d69808d93,\n                limb2: 0x14d575b46d080633,\n            },\n            w3: u288 {\n                limb0: 0x132e0ad247c2f54fbe52f5bb,\n                limb1: 0x4b0a3207c00cd30d7bdcf774,\n                limb2: 0x1a93653a38cb2fe4,\n            },\n            w4: u288 {\n                limb0: 0xad30ef932f284898d3a7a46b,\n                limb1: 0x4163e6658533a807cd45d00d,\n                limb2: 0xddb14c4f82f8631,\n            },\n            w5: u288 {\n                limb0: 0x6b8e30e4eaa63a9ed81168d8,\n                limb1: 0x313309f6dbce4e865d4fedb1,\n                limb2: 0x2d3f5b1fefcb56f,\n            },\n            w6: u288 {\n                limb0: 0x4ef02281cc723a6da515811a,\n                limb1: 0x14ff8ed665651ab8ce848f43,\n                limb2: 0x131a42012d97077d,\n            },\n            w7: u288 {\n                limb0: 0x9378001a32c652b319e017f4,\n                limb1: 0x7adaa3bb782735807171c8ee,\n                limb2: 0x26a3c45ea339b47e,\n            },\n            w8: u288 {\n                limb0: 0xb45f0d072cee9451b2ef6bcd,\n                limb1: 0xb5c79d9af82faa633c46c783,\n                limb2: 0x288162b64a95050e,\n            },\n            w9: u288 {\n                limb0: 0xb400e23dbb10336db8e3e567,\n                limb1: 0xf8be889f6826d20f76b01fa,\n                limb2: 0x2a6ee642f39f6ea8,\n            },\n            w10: u288 {\n                limb0: 0xaa002ca04722ef6e113c90c7,\n                limb1: 0x4a44cfbf7d0d8a113c67d3b8,\n                limb2: 0x1b19f196206d8a99,\n            },\n            w11: u288 {\n                limb0: 0x3b36e8198a598435a63c262d,\n                limb1: 0x5bd67fccbd394684e1e4c572,\n                limb2: 0x166091a34daab9c1,\n            },\n        },\n        w: MillerLoopResultScalingFactor {\n            w0: u288 { limb0: 0x1, limb1: 0x0, limb2: 0x0 },\n            w2: u288 { limb0: 0x0, limb1: 0x0, limb2: 0x0 },\n            w4: u288 { limb0: 0x0, limb1: 0x0, limb2: 0x0 },\n            w6: u288 { limb0: 0x0, limb1: 0x0, limb2: 0x0 },\n            w8: u288 { limb0: 0x0, limb1: 0x0, limb2: 0x0 },\n            w10: u288 { limb0: 0x0, limb1: 0x0, limb2: 0x0 },\n        },\n        Ris: array![\n            E12D {\n                w0: u288 {\n                    limb0: 0xe2f6acee09a64156c15e3478,\n                    limb1: 0xed70b0971287f50104248a93,\n                    limb2: 0x127703e3d61d8953,\n                },\n                w1: u288 {\n                    limb0: 0x3f33ed733eb4838ff43a064d,\n                    limb1: 0x261b3bb5a0d1e3b1fc2eea8d,\n                    limb2: 0x1b45799651c4e710,\n                },\n                w2: u288 {\n                    limb0: 0xfef7aacba92a3760281d63cc,\n                    limb1: 0xd3c17160fa29274e8fb29068,\n                    limb2: 0xd4e6a9fe3bada06,\n                },\n                w3: u288 {\n                    limb0: 0xf8318240f89419438fe2d639,\n                    limb1: 0xe998e7c29f76b508e0538e38,\n                    limb2: 0xfb03e005dbba59f,\n                },\n                w4: u288 {\n                    limb0: 0x70c9890149ae3e2742c5c731,\n                    limb1: 0xe9a6d4fc61f71f5d5ed989d4,\n                    limb2: 0x2dad8e036bd59924,\n                },\n                w5: u288 {\n                    limb0: 0xd7b63c2f5eed5c20e605768d,\n                    limb1: 0xb0003493ed0492f6fa50f418,\n                    limb2: 0x17228fa4697986c7,\n                },\n                w6: u288 {\n                    limb0: 0xa3dc70c11244fb2deda36cb2,\n                    limb1: 0xb8fb759606fba9d97587f0e8,\n                    limb2: 0x2e2f815e063bb0,\n                },\n                w7: u288 {\n                    limb0: 0x686d29a44e7110ac6c8b9505,\n                    limb1: 0x74ac5a716ee1e9d44b50960f,\n                    limb2: 0x2152b931c3859503,\n                },\n                w8: u288 {\n                    limb0: 0x5868412c8c818820977a66f0,\n                    limb1: 0x2f9e83b27ce0c185c6f1c18f,\n                    limb2: 0x14fac55b88d3ce93,\n                },\n                w9: u288 {\n                    limb0: 0xb78d2652e51b3c673a385a19,\n                    limb1: 0x795b0f1a23960c7aca666e05,\n                    limb2: 0x12a1f27a3602498a,\n                },\n                w10: u288 {\n                    limb0: 0xaccfdbe167c5f15ccbe8a10b,\n                    limb1: 0xe7f7a9853750e8e77d47908,\n                    limb2: 0x1b9bfc8952b7f369,\n                },\n                w11: u288 {\n                    limb0: 0x149b5924ec95ec9b05da4bf8,\n                    limb1: 0x7567100511e744c551a6e4ea,\n                    limb2: 0x2b223a2dfd168795,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xa72a4848e30642eded615898,\n                    limb1: 0xbef543f14f1aad5e18139eb6,\n                    limb2: 0x2c7bcf2fddd1e961,\n                },\n                w1: u288 {\n                    limb0: 0x46fd177379d58e372b9b6f07,\n                    limb1: 0x517211fbf41f194c331f00e5,\n                    limb2: 0x2f5c91ca28636a00,\n                },\n                w2: u288 {\n                    limb0: 0xe41a3ec01dc8bb8501df492e,\n                    limb1: 0xd7f7ab9d0f2782f2373b5314,\n                    limb2: 0x91712eca3f77452,\n                },\n                w3: u288 {\n                    limb0: 0x133e5c67a8f2690bc04b91b9,\n                    limb1: 0x8582c464e09299148f27b703,\n                    limb2: 0x249bfada0b86ef33,\n                },\n                w4: u288 {\n                    limb0: 0xeeb02ca00147f12d2e8458f7,\n                    limb1: 0xceaae80445f4c7407c02c1da,\n                    limb2: 0x25e046234afd2a85,\n                },\n                w5: u288 {\n                    limb0: 0x64b3d4f3d18031d4235862df,\n                    limb1: 0x92f83b81871013f01b47013c,\n                    limb2: 0x15fe7761fa1f33ac,\n                },\n                w6: u288 {\n                    limb0: 0x3fb298307f41db600150f88c,\n                    limb1: 0x3da094ebafc14d7eb2182997,\n                    limb2: 0x818cb4e830ba356,\n                },\n                w7: u288 {\n                    limb0: 0x12ef8a22b1bc73ea237df6f6,\n                    limb1: 0x9d344aace728adbd489c9720,\n                    limb2: 0x821d3466302b0d2,\n                },\n                w8: u288 {\n                    limb0: 0x638f4928fe9fe06b17f5d2db,\n                    limb1: 0x596ab928517338096d96b2f6,\n                    limb2: 0x29e68f04a0ee89be,\n                },\n                w9: u288 {\n                    limb0: 0x67f1e11e7d4fea0d7745eb44,\n                    limb1: 0x105e36bfdc4442638522b7d5,\n                    limb2: 0x2593d5a9dac5df2c,\n                },\n                w10: u288 {\n                    limb0: 0x453ddfce74fe7c8b9bc7ea76,\n                    limb1: 0x73264637eb39edbe0400abf1,\n                    limb2: 0x2f665b3f82c255a5,\n                },\n                w11: u288 {\n                    limb0: 0xa64871f14a5c040bc6216bc1,\n                    limb1: 0xc3071982e7657ce273aafe11,\n                    limb2: 0x25c2ccc6a7f12699,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x8d5b811a09caa58be413ffdb,\n                    limb1: 0xaec13af0ff4aa5a9b3dcb582,\n                    limb2: 0xb759534e5c8811b,\n                },\n                w1: u288 {\n                    limb0: 0x8bfd162f232d87d70447c4fb,\n                    limb1: 0x5b714a61f27eeeb66210a238,\n                    limb2: 0x235eb11b01463a62,\n                },\n                w2: u288 {\n                    limb0: 0xa97e216801ac38c907ba52a0,\n                    limb1: 0x70ae4f1968af5555df98298f,\n                    limb2: 0x95e6702a59e1a6a,\n                },\n                w3: u288 {\n                    limb0: 0x9cd4ed96bdec2348819310c,\n                    limb1: 0x4766b2e8e7e732e7970b9689,\n                    limb2: 0x149bdcbd6a7afcb9,\n                },\n                w4: u288 {\n                    limb0: 0xbe702be60291c9e6e885e5c3,\n                    limb1: 0xe93a545111f29c9592a036c4,\n                    limb2: 0x1591e5e82ed4b4dc,\n                },\n                w5: u288 {\n                    limb0: 0x8d199a3abe5faaff7a3bc9f8,\n                    limb1: 0x7cc933e5a020b4766ac8a761,\n                    limb2: 0x2fe6b400ae57faae,\n                },\n                w6: u288 {\n                    limb0: 0xaec592ab3c28bfe83c215cfa,\n                    limb1: 0xac24f84ed0a437939c2000e9,\n                    limb2: 0x1f2843afe30b053a,\n                },\n                w7: u288 {\n                    limb0: 0x6d2d0627cede31c8eb85e75e,\n                    limb1: 0x7bdddc87f039012eb3b77194,\n                    limb2: 0x178660f13401179e,\n                },\n                w8: u288 {\n                    limb0: 0x62368134bd89bd0f837ed4d4,\n                    limb1: 0x6dc31aed6fb226f4b4c0f22c,\n                    limb2: 0x24e758c4f9d85d63,\n                },\n                w9: u288 {\n                    limb0: 0x2f1d16930c76c2c58ded454a,\n                    limb1: 0xd31b8e954fb055fe7ca38da,\n                    limb2: 0xdc52b7ecb883c77,\n                },\n                w10: u288 {\n                    limb0: 0x709c6bce583682d54711f158,\n                    limb1: 0xb32e399977ba98f1dbf49828,\n                    limb2: 0x1ff3ce291ef8cdaa,\n                },\n                w11: u288 {\n                    limb0: 0xfedfcfb5ac3535fd88a15183,\n                    limb1: 0xe97e7b5d3bf6635f37dd122d,\n                    limb2: 0x22a38c2aae1e8fc9,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x4e15598d95c5f7c52c6b9226,\n                    limb1: 0x7260273fb797ec0382fc0b74,\n                    limb2: 0x1b4722521d49dd9c,\n                },\n                w1: u288 {\n                    limb0: 0x41a84bd4c94bd9e253b5dbe8,\n                    limb1: 0x4f06564a6624a9a4b1f4922f,\n                    limb2: 0x154f62ec865e8ec2,\n                },\n                w2: u288 {\n                    limb0: 0x25ed47681b082c51b72e1c67,\n                    limb1: 0xfdab86c84aa645fdcc31d18d,\n                    limb2: 0x824a28773085f87,\n                },\n                w3: u288 {\n                    limb0: 0x725527ec8d20e00f959c8e4b,\n                    limb1: 0x5f0a9b28686d3343669aa6dd,\n                    limb2: 0x24b7b0049449f95c,\n                },\n                w4: u288 {\n                    limb0: 0xbbe336284924385760066449,\n                    limb1: 0xf34b401046c192b98e0b8e64,\n                    limb2: 0x22a2832e9e2adf52,\n                },\n                w5: u288 {\n                    limb0: 0x49e39158392c0ff5930f63bd,\n                    limb1: 0xdc907401ccc882dbb3d29c09,\n                    limb2: 0x135a779eb01ae2a9,\n                },\n                w6: u288 {\n                    limb0: 0x27f79ea3a7d57234b676f496,\n                    limb1: 0x75257d3143963669b9c2f6a,\n                    limb2: 0x2b202d6fa27717e1,\n                },\n                w7: u288 {\n                    limb0: 0xff147074bd0eb0177d13885d,\n                    limb1: 0x75c3a42b9b267b3842b6b4c7,\n                    limb2: 0x54de18ae56affbc,\n                },\n                w8: u288 {\n                    limb0: 0xea9ab70d9faddee08a3d721,\n                    limb1: 0x2799218b0495f05389162288,\n                    limb2: 0x1b188d8d706d0da5,\n                },\n                w9: u288 {\n                    limb0: 0xc78b4fdfd2c7f08de090785a,\n                    limb1: 0xb0ed8ae4c9d8f8cf66b189a3,\n                    limb2: 0x3ef3e9bb717b0be,\n                },\n                w10: u288 {\n                    limb0: 0xa95f9089c84967d73eeb7c72,\n                    limb1: 0xfcc8b694c6dab512b6097cc7,\n                    limb2: 0x185f26ab25337e83,\n                },\n                w11: u288 {\n                    limb0: 0x10a59371fd44cdb8de434ac6,\n                    limb1: 0x3c17b135fbcb13d74e419dfb,\n                    limb2: 0x278311e97f6ef4,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xe7df08107e805939ebd064d1,\n                    limb1: 0x84eaf0a72178fea0cd7fdda3,\n                    limb2: 0x1a3c2d31a8a1ee84,\n                },\n                w1: u288 {\n                    limb0: 0xac6519066bbcb1864ae2773,\n                    limb1: 0xc26038949c313989e0054bbe,\n                    limb2: 0x28eb7e83ec81a257,\n                },\n                w2: u288 {\n                    limb0: 0x11e340e6c9fe6671a0adb177,\n                    limb1: 0x92b97e720c203dfe72f47426,\n                    limb2: 0xb846a3ae27eaf33,\n                },\n                w3: u288 {\n                    limb0: 0xe04834e31217e48f0e8eb14e,\n                    limb1: 0x8935efe701ea6319c4ec860f,\n                    limb2: 0x13f14982cf2bc20c,\n                },\n                w4: u288 {\n                    limb0: 0x82dc6d9f7406f0a279ef8a56,\n                    limb1: 0x51d959b05efad385a218b2bb,\n                    limb2: 0x103a320e5b6a9452,\n                },\n                w5: u288 {\n                    limb0: 0x2ed59048aebb44b229f7267a,\n                    limb1: 0xc8a4f65f52a1922dec503120,\n                    limb2: 0x2d8aad0d7b0b6937,\n                },\n                w6: u288 {\n                    limb0: 0xdf4cb0cb215170ff0a6b3c1e,\n                    limb1: 0x18ee79ed0b8c2cd754f322a6,\n                    limb2: 0xbd8cb5657cc0178,\n                },\n                w7: u288 {\n                    limb0: 0x440e6b453eda236f95430186,\n                    limb1: 0x39d4deb16fd3ecee0a714cf7,\n                    limb2: 0x26574156175bc55,\n                },\n                w8: u288 {\n                    limb0: 0x1f4caed0971cc3ed8347723d,\n                    limb1: 0x28a247d79794bcee6045e924,\n                    limb2: 0x2657b147233a6fc4,\n                },\n                w9: u288 {\n                    limb0: 0xf26b32e9d9a108813f659c6b,\n                    limb1: 0x876ed468fa80b8be08c0b09b,\n                    limb2: 0x10ca44b2c6d4f9da,\n                },\n                w10: u288 {\n                    limb0: 0xa8ab369559d68eb036cd3db,\n                    limb1: 0x723fdc5ac4ca2c61a5a1ffe9,\n                    limb2: 0x12199d02a50f2c5,\n                },\n                w11: u288 {\n                    limb0: 0x1a376782048bbe32096ddea0,\n                    limb1: 0xa715d036367bef48038ea78d,\n                    limb2: 0x14e09936f8a93c9e,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x5c840d64ee3e008381f3e04,\n                    limb1: 0x243b2760acc2f44649a5b24f,\n                    limb2: 0x2e6cfbab4b3fed61,\n                },\n                w1: u288 {\n                    limb0: 0x9743d90c3eef67f5cdf72c19,\n                    limb1: 0xf3b5548f9d13f9dc940fa4b2,\n                    limb2: 0x13b8b4c7ca5ec4a2,\n                },\n                w2: u288 {\n                    limb0: 0xf97c58447c8b03814fa6103f,\n                    limb1: 0x30d22f3e8c4c7d8523c76597,\n                    limb2: 0x872b0b5d8b48bd1,\n                },\n                w3: u288 {\n                    limb0: 0x78947a908649525b01ca6334,\n                    limb1: 0xcfe0ba68f50e623a89171963,\n                    limb2: 0x29503e874bbfec29,\n                },\n                w4: u288 {\n                    limb0: 0x1dae9e71040fd1230c92cbb1,\n                    limb1: 0x65a3011a3d4b8129b45eaad6,\n                    limb2: 0x81795daa56a29d3,\n                },\n                w5: u288 {\n                    limb0: 0xd7376a308b09572a31465eb8,\n                    limb1: 0x9a987b8f5f86b01cd050946c,\n                    limb2: 0x1b4cef85ace274fe,\n                },\n                w6: u288 {\n                    limb0: 0x121c88496e9a87e389aabc55,\n                    limb1: 0x53070d5039789dbe1ff3c5d9,\n                    limb2: 0x6f0665bfd35e8c7,\n                },\n                w7: u288 {\n                    limb0: 0xdd9ddf4069428e4d4bdf5f7d,\n                    limb1: 0x6dace55e5658b1bf8c3a2093,\n                    limb2: 0x29485c58194eed74,\n                },\n                w8: u288 {\n                    limb0: 0x5ee1da4b7149da261bda9305,\n                    limb1: 0x7601e480e9a8d7be7979c77e,\n                    limb2: 0x14cffa23faf832a0,\n                },\n                w9: u288 {\n                    limb0: 0xb4e59ad341d4b129ba6ce9a2,\n                    limb1: 0xaa1fd997e27e7f4f5fab6918,\n                    limb2: 0x157b9b49aca1ab9,\n                },\n                w10: u288 {\n                    limb0: 0xfff92978e32c48590140bfab,\n                    limb1: 0xe1cc130cb1566161f46fa326,\n                    limb2: 0x11f2a66bd21895fe,\n                },\n                w11: u288 {\n                    limb0: 0x4a8d0b05c8ab2197c89b44f2,\n                    limb1: 0x48260cd32fd7d0452d9aa26,\n                    limb2: 0x1ff38242cb34892c,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x20f9010789e7b152257be743,\n                    limb1: 0x41355459a9e13ce010e9491c,\n                    limb2: 0x175f282d0d7ac03e,\n                },\n                w1: u288 {\n                    limb0: 0xd61a99e14e1f68ea78858dfe,\n                    limb1: 0xdb29e70187d87a8d1f4d27a1,\n                    limb2: 0x17afeea1b34fc021,\n                },\n                w2: u288 {\n                    limb0: 0x3c9e6fb3d89216edef33a1d7,\n                    limb1: 0x3dd931680d2bb7651f688b2a,\n                    limb2: 0x13e86a7233e4491b,\n                },\n                w3: u288 {\n                    limb0: 0x377d4b442701faa12601d1f0,\n                    limb1: 0xfa864548c3a1a262fd21db8c,\n                    limb2: 0x8c5a91f3fe9bf24,\n                },\n                w4: u288 {\n                    limb0: 0xdc1920a9ba58d700bf2b145c,\n                    limb1: 0xd46f80f0104c31aa036d6a0b,\n                    limb2: 0x1073f44a4d433e6b,\n                },\n                w5: u288 {\n                    limb0: 0xbe5e796a5bd4049ddad323b0,\n                    limb1: 0xe7bc4d5004bad605fd02a27,\n                    limb2: 0x3028bf8868ed598a,\n                },\n                w6: u288 {\n                    limb0: 0x40b609fabc6888cab7f4019d,\n                    limb1: 0x7bcf89f3bd29e5c43d4f02ce,\n                    limb2: 0x16a2865923d5b251,\n                },\n                w7: u288 {\n                    limb0: 0x70655717bb0c1ed90589d31c,\n                    limb1: 0xd8f6e54cc87b156c80122aad,\n                    limb2: 0x1854b621bdf3aa08,\n                },\n                w8: u288 {\n                    limb0: 0x25e6085c5d718fa434af198d,\n                    limb1: 0x243092e705cd68fcd328a2a3,\n                    limb2: 0xabda9d2c0c69f93,\n                },\n                w9: u288 {\n                    limb0: 0x12d9ff05f7fd76b25f56ee31,\n                    limb1: 0xff2e5068668cbd41d6a8d70e,\n                    limb2: 0x30318bdd373e291,\n                },\n                w10: u288 {\n                    limb0: 0x5b6d9d5299e67c2427987d3,\n                    limb1: 0x60309cea9bcde182039deaf7,\n                    limb2: 0x1eeb35c995c1375b,\n                },\n                w11: u288 {\n                    limb0: 0xf6c6a575126d36fb8016d94a,\n                    limb1: 0x9a38ec893c85a4a110a3845e,\n                    limb2: 0x2992a2b7e6cd37c2,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x2513fcc1815172e2acb78c48,\n                    limb1: 0xf1fb049b85c85a858e3796f5,\n                    limb2: 0x300c791e8d042987,\n                },\n                w1: u288 {\n                    limb0: 0xb5f548909a82f0ce9b151b26,\n                    limb1: 0x8087f9db3ad26d11c3dcd0d3,\n                    limb2: 0xbe98e54b599db1f,\n                },\n                w2: u288 {\n                    limb0: 0x1e55ee1359e4dacd0a224ac,\n                    limb1: 0xc049969cc268c7302cbbb96,\n                    limb2: 0x292939420dc4994c,\n                },\n                w3: u288 {\n                    limb0: 0x9a439ef1b4b8a3e5e0d131ee,\n                    limb1: 0x5243b76e0bffe1ad4934762b,\n                    limb2: 0x10b7c0e8f5e55d8e,\n                },\n                w4: u288 {\n                    limb0: 0x472318a31d61843dc0ac35a3,\n                    limb1: 0xfdc8264ebbe6c3255fd45fbd,\n                    limb2: 0x23cab8acf199a2a6,\n                },\n                w5: u288 {\n                    limb0: 0x3c5f90aa19be5ca9d586b983,\n                    limb1: 0xcba0d66ca2dc42a68f4136fa,\n                    limb2: 0x23d949165118abea,\n                },\n                w6: u288 {\n                    limb0: 0x7aff327e17d6666c7f90c4a7,\n                    limb1: 0x2f133759ea769762428ca397,\n                    limb2: 0x229a3fc5c84e256a,\n                },\n                w7: u288 {\n                    limb0: 0xe2793380656d37b00873ec9a,\n                    limb1: 0x1338f4f95cf705ab40325500,\n                    limb2: 0xf5ae003d907d6e1,\n                },\n                w8: u288 {\n                    limb0: 0x85c6f4773db45818f2a0edfa,\n                    limb1: 0x11b541412c501fd59d939141,\n                    limb2: 0x25f1c74f47ddcbbc,\n                },\n                w9: u288 {\n                    limb0: 0x79f213447462cc95732ff6eb,\n                    limb1: 0xa2d558f0e0eca18cfa84426,\n                    limb2: 0x1ab5af6e2200b5a6,\n                },\n                w10: u288 {\n                    limb0: 0x7bae196bef0db195215adf17,\n                    limb1: 0xd0a4b5dc5a11d37222964f4d,\n                    limb2: 0x4f26d49b9bc199a,\n                },\n                w11: u288 {\n                    limb0: 0xb16717e715fbc76c3bac66f1,\n                    limb1: 0x3ebe263de3e1a89803bc0da8,\n                    limb2: 0xfb0595b5b9d8246,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x4691a6b6d8442401fdb5fd61,\n                    limb1: 0x1a4aa6fd9f3cfbd122b2cd2b,\n                    limb2: 0x254267bcadf6ce8b,\n                },\n                w1: u288 {\n                    limb0: 0xe22fbb9f0206f7b3b78be6ee,\n                    limb1: 0xf6e0deb6e65d40117da6b2fd,\n                    limb2: 0x2a4f1a801c3cd205,\n                },\n                w2: u288 {\n                    limb0: 0x163800b0a0c25286cf11a38b,\n                    limb1: 0xac61df59604318c6fcd74d67,\n                    limb2: 0x1a9633d30804c9cf,\n                },\n                w3: u288 {\n                    limb0: 0x7333b8203f73c7c30b504051,\n                    limb1: 0xa080c3854f1a6a8a917b0366,\n                    limb2: 0x276eac4715fb20ca,\n                },\n                w4: u288 {\n                    limb0: 0x399e6af618d4d4f3d6b6df5,\n                    limb1: 0xc75b47790bdefc3a4c3f9514,\n                    limb2: 0x29d9317f2b639acd,\n                },\n                w5: u288 {\n                    limb0: 0x3c127769d3815a3c70c1ee1e,\n                    limb1: 0xfd2b1eee94f11e14c21a9358,\n                    limb2: 0x350f2baa271499a,\n                },\n                w6: u288 {\n                    limb0: 0x16ad4469d442f5ad7e3a969b,\n                    limb1: 0xa319c77cf65f5ddf06c79804,\n                    limb2: 0xfc01932cb22cac6,\n                },\n                w7: u288 {\n                    limb0: 0xd3ec2fe1d535457c02b0abdb,\n                    limb1: 0x9336d37bd33818f9e69963f8,\n                    limb2: 0x221133208264ed33,\n                },\n                w8: u288 {\n                    limb0: 0xba4ad8aa28c47ead56764d20,\n                    limb1: 0x60ea71535c537102ff8591aa,\n                    limb2: 0x99bbc9915f4f422,\n                },\n                w9: u288 {\n                    limb0: 0xd10f7b7b93fff77a5af1c82a,\n                    limb1: 0x54501ad6471fd3ea73f001d2,\n                    limb2: 0x218c4075b09ef652,\n                },\n                w10: u288 {\n                    limb0: 0x6656f1088f37e6bae8831fe4,\n                    limb1: 0xd3542728908036bec18ddee4,\n                    limb2: 0x16fe23702ee4af80,\n                },\n                w11: u288 {\n                    limb0: 0x8bf6a24658757bdf96918d6d,\n                    limb1: 0x1e72bce9091c22a645562e32,\n                    limb2: 0x1856aa098aa33d63,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x5eaa057c5e9d338929a7ad43,\n                    limb1: 0x7ae96e982db7587ba91a1736,\n                    limb2: 0x72cb1aafef8fc8e,\n                },\n                w1: u288 {\n                    limb0: 0x1bb7723ff47ccb109a4226ec,\n                    limb1: 0x328efe288a27af15b2af6381,\n                    limb2: 0x2dccf1917c988cef,\n                },\n                w2: u288 {\n                    limb0: 0xcc638278fb869f3c6930e578,\n                    limb1: 0x685535107befb2dbff15dcb0,\n                    limb2: 0x1552b4647293ddad,\n                },\n                w3: u288 {\n                    limb0: 0x6a2bab4ed331aeb86499d23f,\n                    limb1: 0x3e6ac194919d26afeae1c7e6,\n                    limb2: 0xa3bd7d404906b4a,\n                },\n                w4: u288 {\n                    limb0: 0xd0f18a8f6bcb2c54d031eae7,\n                    limb1: 0x428e6f2b4d1b1d15ecbfeaf5,\n                    limb2: 0x2f7d795e0c7bb871,\n                },\n                w5: u288 {\n                    limb0: 0x9fa385290e5a47297dba3917,\n                    limb1: 0xb79650782cdb39ff5a1f208,\n                    limb2: 0x15d475f38ea7476b,\n                },\n                w6: u288 {\n                    limb0: 0x7bb49cca7dfd0cb7e3f79b2c,\n                    limb1: 0x8c7bac4c06a9d05c2accbd03,\n                    limb2: 0x1fa0d8145555736d,\n                },\n                w7: u288 {\n                    limb0: 0xf736aafbbf8cd7e7c4065e91,\n                    limb1: 0x43830e9122457788cb86d1ab,\n                    limb2: 0x135aa9aaad9954db,\n                },\n                w8: u288 {\n                    limb0: 0xbed546ba0b8744fcb9d52660,\n                    limb1: 0xfbc7f3baa7c7119fcce3e80,\n                    limb2: 0x15a9f9b27f95df27,\n                },\n                w9: u288 {\n                    limb0: 0xb4f28322f24bab28cefc2b81,\n                    limb1: 0xbb67c1a9879e054fb1dd9bd3,\n                    limb2: 0x6dc479b44e4a35,\n                },\n                w10: u288 {\n                    limb0: 0xc55900f2e2fcb03d4745b72e,\n                    limb1: 0x789b848782d349549f5f1e85,\n                    limb2: 0x13a9a01aff27a9ae,\n                },\n                w11: u288 {\n                    limb0: 0xec2faefd68343ff84384d5e8,\n                    limb1: 0x1a7cf79c9cfdf71ef2008e74,\n                    limb2: 0x29c5f1ef7cfa4e48,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x7da07b86a17f90a2b01f070,\n                    limb1: 0x32e6cbe8bb76431d030b6541,\n                    limb2: 0x169136ca3fcbd52e,\n                },\n                w1: u288 {\n                    limb0: 0x14b5cdc5d62216c47192de8b,\n                    limb1: 0xd1e61add783e061d23aa8b5b,\n                    limb2: 0xd15a28ca328e478,\n                },\n                w2: u288 {\n                    limb0: 0xc481cc31c16863df81e8b67d,\n                    limb1: 0xe43107afa658bd6eab99baad,\n                    limb2: 0x2dbb3774b86ff414,\n                },\n                w3: u288 {\n                    limb0: 0x2b792a9e9477d0720b49c556,\n                    limb1: 0x6ee0355be00472bf4c29595c,\n                    limb2: 0x1250c722f7dce651,\n                },\n                w4: u288 {\n                    limb0: 0x4f155753d7ca72726d9c5ede,\n                    limb1: 0x68c513a27a582318aba863b2,\n                    limb2: 0x268c4cff2a0868af,\n                },\n                w5: u288 {\n                    limb0: 0xee23384132ef355ea4c9cd2f,\n                    limb1: 0x769a778520242fa9be2b4b86,\n                    limb2: 0x619b6540902c8da,\n                },\n                w6: u288 {\n                    limb0: 0xcf619319e7da22d2d87ded3b,\n                    limb1: 0x55bc420f357a9f9af7f3fc27,\n                    limb2: 0x2c6d25af354a8c0a,\n                },\n                w7: u288 {\n                    limb0: 0x897b30003ba50ceffa155118,\n                    limb1: 0xcd16b98450f6e704b376af36,\n                    limb2: 0x387312925d56e5e,\n                },\n                w8: u288 {\n                    limb0: 0x1547ce758af5caac5f3cba19,\n                    limb1: 0xd2759b5209f5ccde276ae2b9,\n                    limb2: 0x8bebfeee0e486ee,\n                },\n                w9: u288 {\n                    limb0: 0x158e0f0bc8649c7c9458ccf5,\n                    limb1: 0xf20a2eae3793c6df722b69bb,\n                    limb2: 0xb7e139783caa97b,\n                },\n                w10: u288 {\n                    limb0: 0xb214433bcc9c61f41a672fe5,\n                    limb1: 0xae856be4ca18bfeeb97256e7,\n                    limb2: 0x2ff69682f9db28ad,\n                },\n                w11: u288 {\n                    limb0: 0x8cbe2f6182148a74244954ac,\n                    limb1: 0xc968190da741992ceeeac286,\n                    limb2: 0x296c04958814178f,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xaabe5805d69bcf87faaa0624,\n                    limb1: 0x478fadd1e2384b0d94ffd427,\n                    limb2: 0x1778a52ea6419cbb,\n                },\n                w1: u288 {\n                    limb0: 0x3a2bb7367f836fd33e72bc42,\n                    limb1: 0x9ed4175a04e317113a9bf7cc,\n                    limb2: 0x1bd3b89c53bba237,\n                },\n                w2: u288 {\n                    limb0: 0x283ba112d1a901a2963ebce9,\n                    limb1: 0xb88b6d8c90c32641cd8de77c,\n                    limb2: 0x4330ff81bbf1aaa,\n                },\n                w3: u288 {\n                    limb0: 0xef466974e62e9d7175c4cb8c,\n                    limb1: 0x96bfc81d65fe336227113e7d,\n                    limb2: 0x231f3ab8575b8204,\n                },\n                w4: u288 {\n                    limb0: 0x6032f7ceed8d763a3c16ca06,\n                    limb1: 0xbd357cd0947f134569dd65c,\n                    limb2: 0x24d6a3c8b70196e5,\n                },\n                w5: u288 {\n                    limb0: 0x4d47e505d9d4281c38d84f9a,\n                    limb1: 0x86fdc9b122276e23bdaef6c4,\n                    limb2: 0x2d2a5a3cfec76827,\n                },\n                w6: u288 {\n                    limb0: 0x10764f6301da0139409355eb,\n                    limb1: 0x169023ab7ba2af2701d8ee7,\n                    limb2: 0xa8fd0478a5bd5b3,\n                },\n                w7: u288 {\n                    limb0: 0x36fbb7632c5e32ac4d439c06,\n                    limb1: 0x77e68a927e6bf7b50f468589,\n                    limb2: 0xd712970fe77ed33,\n                },\n                w8: u288 {\n                    limb0: 0xc6333c4fb88e300a722635d2,\n                    limb1: 0x3bd0a9d311c8a7a2a831fc13,\n                    limb2: 0x24a2803265596f98,\n                },\n                w9: u288 {\n                    limb0: 0x602f27f3c41e13f70ec306ac,\n                    limb1: 0xa2d9c70458bc21b31e4e8bbb,\n                    limb2: 0x2318628ab88e0d2e,\n                },\n                w10: u288 {\n                    limb0: 0x31d07509de71e84d70fc3597,\n                    limb1: 0x63a67db560e7854c1b9ffbe6,\n                    limb2: 0x24630165d03ca7e4,\n                },\n                w11: u288 {\n                    limb0: 0x7f01293d47393ed8f8faacfd,\n                    limb1: 0x693d55d27d34d8d82a45ded6,\n                    limb2: 0x2e982efc254e90e2,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x7a0151622f32149cc39127,\n                    limb1: 0xb7d82d0d7cbfc0854dc18a81,\n                    limb2: 0x15121c24c444fb2f,\n                },\n                w1: u288 {\n                    limb0: 0xfe3069d46d030b7bfeb319c7,\n                    limb1: 0x92e43b1c259b05e959a29443,\n                    limb2: 0x2f82238cefd08b68,\n                },\n                w2: u288 {\n                    limb0: 0xffacb1a6cd1e11dec597ebce,\n                    limb1: 0xd482f37e951b21ac15bda39,\n                    limb2: 0xd4d51a607e5c451,\n                },\n                w3: u288 {\n                    limb0: 0xc8c7f69a0db529acbb725a01,\n                    limb1: 0x56ba1fcd17ca509c764236b9,\n                    limb2: 0x266c3b87a040d37e,\n                },\n                w4: u288 {\n                    limb0: 0x4571f5a426917bcc6db587c7,\n                    limb1: 0x37b7677a534ffa0b66876d0b,\n                    limb2: 0x242bb826f4dad2b9,\n                },\n                w5: u288 {\n                    limb0: 0x3b306aacc86c5e63e826c06,\n                    limb1: 0x71a1e66a7cf1dd9abd8f6be3,\n                    limb2: 0xf55d9b7d527f5bd,\n                },\n                w6: u288 {\n                    limb0: 0xc2334694e7214460556de85d,\n                    limb1: 0x44f339ca483ed2f8e20760e0,\n                    limb2: 0x1543c07af87205ef,\n                },\n                w7: u288 {\n                    limb0: 0x193cbdd9bd6c91872b1446e8,\n                    limb1: 0x390ed7d90a9e41dd08eb0563,\n                    limb2: 0x69314f2882ec9bf,\n                },\n                w8: u288 {\n                    limb0: 0x3e0e5deb39dfbceb0c50cccb,\n                    limb1: 0x5359859220ecaaed1bb1d8d5,\n                    limb2: 0x2c243e59d1644b8c,\n                },\n                w9: u288 {\n                    limb0: 0x63a83a2e6ee175fe65f5b650,\n                    limb1: 0x6d0dae1d5b365f909737b583,\n                    limb2: 0x2e16f1774475930e,\n                },\n                w10: u288 {\n                    limb0: 0x4bf38c8f50cf94e94ac2eefe,\n                    limb1: 0x91db1898abcd99d2828dcd2b,\n                    limb2: 0x2a7826645be14d28,\n                },\n                w11: u288 {\n                    limb0: 0x88d5c83684006468edcfb23a,\n                    limb1: 0x52c496f1f5f22ebee63f5006,\n                    limb2: 0xf75dc2e7a584b21,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x1d5b005c0f05c5913d89d3b8,\n                    limb1: 0x1e9c6e293e242c3b4c758f7f,\n                    limb2: 0x303cc3f8883df373,\n                },\n                w1: u288 {\n                    limb0: 0x97919a6105618116083ae38,\n                    limb1: 0x548b96828190b58631bd017f,\n                    limb2: 0xd62fd4a5522751e,\n                },\n                w2: u288 {\n                    limb0: 0xb90c093c24bd6b00dcaef48e,\n                    limb1: 0x332793bc6fe8daec55a499e3,\n                    limb2: 0x1a62c1adf27dcf4,\n                },\n                w3: u288 {\n                    limb0: 0xed9979bdbc911880b0f2993a,\n                    limb1: 0xb9b3d9a78d1ba75a2054dcb6,\n                    limb2: 0x1139bc2af9fc7062,\n                },\n                w4: u288 {\n                    limb0: 0xd01ad4e199459d8cfb34022d,\n                    limb1: 0xaa55da20d2c29e4f72e8428f,\n                    limb2: 0x19408bc263e8c5e3,\n                },\n                w5: u288 {\n                    limb0: 0xe6b6ec6c97330d7bd862275e,\n                    limb1: 0xfc7647d2e15333b7f1dc16df,\n                    limb2: 0xe8505d43bbb0de1,\n                },\n                w6: u288 {\n                    limb0: 0xac1553394c20ce85bac73bc9,\n                    limb1: 0xfd38aa3ace7885aeac4f9c51,\n                    limb2: 0x14bf831b8d59488a,\n                },\n                w7: u288 {\n                    limb0: 0xe7b696d082fe6624d2f66473,\n                    limb1: 0x19efee72fac6dc76acb45556,\n                    limb2: 0x2c27a0376c0c6cd0,\n                },\n                w8: u288 {\n                    limb0: 0x587829d461e3ac5dd4c122b0,\n                    limb1: 0x1489d76e7d359134feda6f9d,\n                    limb2: 0x2bf00f05d6d34be6,\n                },\n                w9: u288 {\n                    limb0: 0x68c5607a34b7e03c4ad3e625,\n                    limb1: 0x34a43c63330e1744beef8754,\n                    limb2: 0x56191473aed3f7,\n                },\n                w10: u288 {\n                    limb0: 0x9b9361a588fabd5162e75e94,\n                    limb1: 0xbca7aeef2e209ac40e230e6f,\n                    limb2: 0x241e1b5b17b02573,\n                },\n                w11: u288 {\n                    limb0: 0x6466ba52d605bf43dcc711a6,\n                    limb1: 0x4fd443195501e425d1d0dc3,\n                    limb2: 0x2b1b1a35b478f840,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x37359d1ca3169479a4787c63,\n                    limb1: 0xe6959b34e4552a7091baa5c2,\n                    limb2: 0x251e2d6fc02a0dd1,\n                },\n                w1: u288 {\n                    limb0: 0xff5382744072d73ab25ff20d,\n                    limb1: 0x899afcd9d3ae5e06050f28f,\n                    limb2: 0x69671dfe2d55cc2,\n                },\n                w2: u288 {\n                    limb0: 0x4c5bc5ee2d1c3c29908f93b9,\n                    limb1: 0x818cc183be27df97d8e39ad3,\n                    limb2: 0x136a07953bb41b63,\n                },\n                w3: u288 {\n                    limb0: 0xc8ba1092a51526df08511ece,\n                    limb1: 0xca463cae871d2aa4f117545d,\n                    limb2: 0x2ec243402bbea649,\n                },\n                w4: u288 {\n                    limb0: 0x73459af87f990777dd76405b,\n                    limb1: 0x9167416ccd1679acd9c0dc19,\n                    limb2: 0x25d92fc30a1b3c13,\n                },\n                w5: u288 {\n                    limb0: 0xe7d616bf546a691f57deb700,\n                    limb1: 0xb6ee6aefa4852dc03975ecac,\n                    limb2: 0xb46a9fae190dacc,\n                },\n                w6: u288 {\n                    limb0: 0xc858c3ec3ca78161afa95440,\n                    limb1: 0x88e7ab9779f7b3100a561d0c,\n                    limb2: 0x4646ce8e109b9ec,\n                },\n                w7: u288 {\n                    limb0: 0x6078ed80374f164838d05309,\n                    limb1: 0x49036f0001a89a5411eacecd,\n                    limb2: 0x17d15ad5a21e80c,\n                },\n                w8: u288 {\n                    limb0: 0xfbf54aa1649f1360f628f647,\n                    limb1: 0x873566f2575908c732fa2601,\n                    limb2: 0x8081b2cbe570dc9,\n                },\n                w9: u288 {\n                    limb0: 0xdd3685fd23d83f41b8fef63b,\n                    limb1: 0x570af8337c272785be94352a,\n                    limb2: 0x24153962f93d7ca0,\n                },\n                w10: u288 {\n                    limb0: 0x6b6fc38cd84153e3d243c8eb,\n                    limb1: 0x70e90d7590bb138f44afe58a,\n                    limb2: 0x27de5024e0c84f0c,\n                },\n                w11: u288 {\n                    limb0: 0x3fdd6c208244f367bff5c112,\n                    limb1: 0x91e2f705ede749a13823072b,\n                    limb2: 0xe1375efaa7677ef,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xff28b79435eb24678e3c8eb2,\n                    limb1: 0xc0ba0a6fad1811714d5c9c79,\n                    limb2: 0x303a480b499d41e7,\n                },\n                w1: u288 {\n                    limb0: 0xfa7877caa1e87cb6765e080,\n                    limb1: 0xa17c36fc7d0139b6b04e701b,\n                    limb2: 0x100468da3cdddbdf,\n                },\n                w2: u288 {\n                    limb0: 0x556a84f960de5f80740c18f1,\n                    limb1: 0xbc003e85b28d9419b1321c41,\n                    limb2: 0x2486957161a92fa6,\n                },\n                w3: u288 {\n                    limb0: 0xee123f2e218e5fc7636d043b,\n                    limb1: 0x2b4620d525e7c98b54118214,\n                    limb2: 0x1ced0e32a4c0e974,\n                },\n                w4: u288 {\n                    limb0: 0xf456e317add8dd976e4f5ec3,\n                    limb1: 0xe1f85ddcbcd7b5d860ee1fbe,\n                    limb2: 0x20bdfcffe9078da6,\n                },\n                w5: u288 {\n                    limb0: 0xa2e12460aebe22abbb6623d,\n                    limb1: 0x3243bd5a49f9c15ce84b992e,\n                    limb2: 0xa794ff503d2eb58,\n                },\n                w6: u288 {\n                    limb0: 0xb2013aea1419e59761f6c6b,\n                    limb1: 0x18c41d13e9b5ae46b4fbe2c5,\n                    limb2: 0x243e8aea6f4bc41f,\n                },\n                w7: u288 {\n                    limb0: 0x834bff6b7ec9caf258fa8481,\n                    limb1: 0xd5e3f6fb4e5949909942a836,\n                    limb2: 0xf5651e38a53058f,\n                },\n                w8: u288 {\n                    limb0: 0x2392f32d40ef4fdcb8f7bde1,\n                    limb1: 0xd92211269e6981a3796f748b,\n                    limb2: 0x1cdde6b416be4e91,\n                },\n                w9: u288 {\n                    limb0: 0x627d6f1b96532fc7f042aa71,\n                    limb1: 0xbc546773f537f33e8088aa6b,\n                    limb2: 0x165110d82726d415,\n                },\n                w10: u288 {\n                    limb0: 0xd218510f5366a09241344258,\n                    limb1: 0x5687f91e9d385ff162a2ca58,\n                    limb2: 0xa3e9521fd2d3236,\n                },\n                w11: u288 {\n                    limb0: 0x96ab37c321ac8988f874caf6,\n                    limb1: 0x1d6deccbe79c563f085d2193,\n                    limb2: 0x2f84f7ff1d8e8ee6,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x5f32f9a8eeade34241b12810,\n                    limb1: 0x133593b9a4a6f381aada074b,\n                    limb2: 0x19a32273e388ac99,\n                },\n                w1: u288 {\n                    limb0: 0xbb69e4856293ec3d92e7d805,\n                    limb1: 0x14b85538654531e02cc5932f,\n                    limb2: 0x2491b31e28bd44cb,\n                },\n                w2: u288 {\n                    limb0: 0x7d82d03af6f8c76c427ba75e,\n                    limb1: 0x967b04b92b39941ab44d08d0,\n                    limb2: 0x2ed3f4a2944bbc22,\n                },\n                w3: u288 {\n                    limb0: 0xa67689abcb222c5eb04f50c2,\n                    limb1: 0xe0d373c25972b07e166bbcea,\n                    limb2: 0x1a446eebcb6a1bee,\n                },\n                w4: u288 {\n                    limb0: 0x144f30062c10c29bc8be47e4,\n                    limb1: 0x64ff3ba7a156ef19d36084b,\n                    limb2: 0x1cc5ff275bd1ad9f,\n                },\n                w5: u288 {\n                    limb0: 0x4056c33c3a351381152ed01f,\n                    limb1: 0xb7b9abe58c58333fc5e0adf8,\n                    limb2: 0xdc9e6ce6f13cf11,\n                },\n                w6: u288 {\n                    limb0: 0x859bc9e4ea2fc918100b2aac,\n                    limb1: 0xc35b40b2582eadc5a1bfe918,\n                    limb2: 0x26298d0dffc77744,\n                },\n                w7: u288 {\n                    limb0: 0x291737ba242cd9b07c66d388,\n                    limb1: 0x333115d29458501e74089135,\n                    limb2: 0x19226600b340c7ad,\n                },\n                w8: u288 {\n                    limb0: 0xee5f0962e034c8abc8d0ba4d,\n                    limb1: 0xc7427067383034c39b47f730,\n                    limb2: 0x2ae92f519b17a927,\n                },\n                w9: u288 {\n                    limb0: 0xadcd32340a46dbcdcf713132,\n                    limb1: 0x14238f7af8998c11c93864c3,\n                    limb2: 0x2d78f33e6b135046,\n                },\n                w10: u288 {\n                    limb0: 0xccce7f0390dcb48a4fc658a,\n                    limb1: 0xb02ef39422aed2a4dd9d99c7,\n                    limb2: 0x22b7c12ee728e4b0,\n                },\n                w11: u288 {\n                    limb0: 0xa55e6345f04363f98e39d62c,\n                    limb1: 0x83304eb48f67c3e63068f9,\n                    limb2: 0x1b26fcc2e690d30e,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x78827305894f7d7c8cb42cd8,\n                    limb1: 0x603660b8ffde85ba43f25540,\n                    limb2: 0x1f8bbd81eceac6fa,\n                },\n                w1: u288 {\n                    limb0: 0x20d1c2265d7c54a7c13d661f,\n                    limb1: 0x5a6375fef487fe0e27db784f,\n                    limb2: 0x11c961fd171a5f7f,\n                },\n                w2: u288 {\n                    limb0: 0x6c3b26607fea356bde658104,\n                    limb1: 0xf70ad1941455882811fe366c,\n                    limb2: 0xbf839d2222b9e50,\n                },\n                w3: u288 {\n                    limb0: 0xf2d7051b992886c2de350c7c,\n                    limb1: 0x559005099aae5b1e262c07e9,\n                    limb2: 0x1add5d82450dbff0,\n                },\n                w4: u288 {\n                    limb0: 0x56cda0fca379e7b056f95ebf,\n                    limb1: 0x103bb7ec80c51b58ea745255,\n                    limb2: 0x1508ea36a5f7ad14,\n                },\n                w5: u288 {\n                    limb0: 0x8ecd2696af2a0932ff92660f,\n                    limb1: 0x200362b96b74147636a81336,\n                    limb2: 0x2857fb636f1f4016,\n                },\n                w6: u288 {\n                    limb0: 0xfec4a1335fdd5fd059a8dd8e,\n                    limb1: 0x75c2b9cd1be202f40e13c3d4,\n                    limb2: 0xbb3d42cdbcbd58d,\n                },\n                w7: u288 {\n                    limb0: 0x4e763270d3457d2f36ffc8bb,\n                    limb1: 0xd51b5ff1fa57c35d5c9fccd7,\n                    limb2: 0xfb41479fa0f3e95,\n                },\n                w8: u288 {\n                    limb0: 0xf3d9559364d6b5acabe4fd40,\n                    limb1: 0xa442dd432e5e47e74e99435c,\n                    limb2: 0x207acb81831a892,\n                },\n                w9: u288 {\n                    limb0: 0xcb48f0d150ce1d5da376de1c,\n                    limb1: 0xda6dcb76b3d2babe3f7c0af3,\n                    limb2: 0x29de187ceb63f010,\n                },\n                w10: u288 {\n                    limb0: 0xbd50ea4093b9a099bb8a9ef8,\n                    limb1: 0xbfb8d8b5eeda12c6a0e3711b,\n                    limb2: 0x2de77f287de6bb26,\n                },\n                w11: u288 {\n                    limb0: 0xd4ac588d5c0eaafc31b2a954,\n                    limb1: 0xd4ee68fb818201cd7e229bb6,\n                    limb2: 0x4f268dcccb4c9e7,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x336e696338af25774cbde6ba,\n                    limb1: 0x69dc4b06614375293bcddb42,\n                    limb2: 0x17bed31b51d2bccf,\n                },\n                w1: u288 {\n                    limb0: 0xee67b2a9992ca2297a33680b,\n                    limb1: 0x1d3067d4e8bb0562cfc0e586,\n                    limb2: 0x2cd961c43819130e,\n                },\n                w2: u288 {\n                    limb0: 0xba1d54e30e624b6576fa30e4,\n                    limb1: 0xa664731781f4d006a5e8f83a,\n                    limb2: 0x1acc8a751e4fa7c5,\n                },\n                w3: u288 {\n                    limb0: 0xe4c3723499688f9a8dea5008,\n                    limb1: 0x26989a78c35cc577065d49ea,\n                    limb2: 0x25aa6ae3c7e3ca0b,\n                },\n                w4: u288 {\n                    limb0: 0xbf23d984a1987abc8698d6fe,\n                    limb1: 0xdd4d0bf7124d07e5bdb0ccbf,\n                    limb2: 0x120468245f03f2c5,\n                },\n                w5: u288 {\n                    limb0: 0xb7ce1be795587bce1bec22d2,\n                    limb1: 0xc1741799c9616ccbda199640,\n                    limb2: 0x18e8aabf72cf2545,\n                },\n                w6: u288 {\n                    limb0: 0xcf933e271bebd4985302d609,\n                    limb1: 0xe2765fd44c8c12899cdeafec,\n                    limb2: 0x2469cab8cca6a721,\n                },\n                w7: u288 {\n                    limb0: 0xf4e8330657ffd4d21e3489ad,\n                    limb1: 0xeaa193edb41eca1d92439dff,\n                    limb2: 0x2bdca29cc4f5e24f,\n                },\n                w8: u288 {\n                    limb0: 0xc1bbfb6aff365e98d6f377ce,\n                    limb1: 0xd798f860fbf687b45aedbcb,\n                    limb2: 0x1816a7d7508073be,\n                },\n                w9: u288 {\n                    limb0: 0x1751153c6447e4dd744cb3d6,\n                    limb1: 0xb5575d0d3a63675f38f68fb7,\n                    limb2: 0xcf079455eea2772,\n                },\n                w10: u288 {\n                    limb0: 0x9103d7708c70e7ca7c1afb54,\n                    limb1: 0x269475ce46651c528d3ba3b0,\n                    limb2: 0x1612bee0a4422ef0,\n                },\n                w11: u288 {\n                    limb0: 0x7e74e496a46aa542d7ba3398,\n                    limb1: 0x38381d151f53772b3c7b6ac5,\n                    limb2: 0x2627da3091fe9618,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x4a472c78419727c213f1ecb7,\n                    limb1: 0x52e7713a969eea3195477e0d,\n                    limb2: 0x2452ff1793e9989f,\n                },\n                w1: u288 {\n                    limb0: 0x5af2af840a414c07f88aafe7,\n                    limb1: 0x84d438781dc331e9f8dbe5c7,\n                    limb2: 0xa08c364dac40aa7,\n                },\n                w2: u288 {\n                    limb0: 0x7544947cd54dce3b7db3f88a,\n                    limb1: 0xb21db0825eb2c743a0974622,\n                    limb2: 0x99e9f9e14609b3a,\n                },\n                w3: u288 {\n                    limb0: 0x3df463ae1c6f6e33af40b4ed,\n                    limb1: 0x6e6bf88773cfb5481ed3a5ef,\n                    limb2: 0x18093f68aa581ebb,\n                },\n                w4: u288 {\n                    limb0: 0x2e9083725e6fafe12ada88db,\n                    limb1: 0x5c7f7db97c54dd97d496e7dd,\n                    limb2: 0x169da8674967384c,\n                },\n                w5: u288 {\n                    limb0: 0xc3e8ae8e4f6250be5ce5700e,\n                    limb1: 0x551ed24f2d0023c301973675,\n                    limb2: 0x4d06cb38306e620,\n                },\n                w6: u288 {\n                    limb0: 0xd07fd97a4c34b22e94e00333,\n                    limb1: 0x44142bc7fa2c3c38bd001770,\n                    limb2: 0x26cb2e67195220a9,\n                },\n                w7: u288 {\n                    limb0: 0x4d74de63b523c2d231d42069,\n                    limb1: 0xb755b6feb43d9e3b85679a26,\n                    limb2: 0x8ef130214a48a61,\n                },\n                w8: u288 {\n                    limb0: 0x92d0adc0007a60452b2b1d1,\n                    limb1: 0x6ebdf8fb1be942eae576175e,\n                    limb2: 0x1487691fffafabad,\n                },\n                w9: u288 {\n                    limb0: 0x3da0ccf413998d4af4fff3c2,\n                    limb1: 0xaae02debc708b689df0b0507,\n                    limb2: 0x24db0f80bd712d56,\n                },\n                w10: u288 {\n                    limb0: 0xe0cf1a580089999c4ee222c0,\n                    limb1: 0xbf0ae87f88101f422985bd99,\n                    limb2: 0x12f407eec0475734,\n                },\n                w11: u288 {\n                    limb0: 0xc8783d4bc08a2731ab3bfa93,\n                    limb1: 0x7d26093e383c18102ae4cb0b,\n                    limb2: 0x1f96be2222d525ac,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xda5fa34846746a819c442983,\n                    limb1: 0xb0cda896f70d81847cc85ed8,\n                    limb2: 0x16f7dc8dd816b6ef,\n                },\n                w1: u288 {\n                    limb0: 0xd598894ff54bdafbad9f94c6,\n                    limb1: 0x67341e698880b16e06df5b4,\n                    limb2: 0xe0a2eba838a6862,\n                },\n                w2: u288 {\n                    limb0: 0x2d4fdc3d1173c7dfb46e7170,\n                    limb1: 0x4a30acf8b62d37adef886fec,\n                    limb2: 0x2f262ecea836ecc8,\n                },\n                w3: u288 {\n                    limb0: 0x4d2de3a485f44ce40095aca,\n                    limb1: 0x4f6ebf38f1b4a74b022a98ba,\n                    limb2: 0x2b98abba58a8b9c0,\n                },\n                w4: u288 {\n                    limb0: 0x99eec2af9a4b45e84482053a,\n                    limb1: 0xdef95a01ab7f2212fd6f0ddf,\n                    limb2: 0x20ca7118bbba9b13,\n                },\n                w5: u288 {\n                    limb0: 0xf62ca396c4cd4f9a37c0ec41,\n                    limb1: 0xf80e07d6f2016fced6c1a99d,\n                    limb2: 0x27e0a522003ad386,\n                },\n                w6: u288 {\n                    limb0: 0x31af536e3dcc88a84fc144d,\n                    limb1: 0x48f7d70e0e9d5af9cbaf031,\n                    limb2: 0x2f1467cd5d03c065,\n                },\n                w7: u288 {\n                    limb0: 0x4b8a521ef408c203f233db65,\n                    limb1: 0x50bfacca6815a45eb7cabce8,\n                    limb2: 0x1340f48baad171ef,\n                },\n                w8: u288 {\n                    limb0: 0xb74e02f678431063c3f330c9,\n                    limb1: 0x48c8b7fb6de93b918a05dfa3,\n                    limb2: 0x19d05aab262398f6,\n                },\n                w9: u288 {\n                    limb0: 0x4e020ba19bfe30be269bc882,\n                    limb1: 0x309357da0126dcc065d540a3,\n                    limb2: 0x1b5842e9443aad53,\n                },\n                w10: u288 {\n                    limb0: 0xaf0d9cd44dcdb29271788d84,\n                    limb1: 0x655b4319e3a14fb30daf866a,\n                    limb2: 0x25d96272a676a0a5,\n                },\n                w11: u288 {\n                    limb0: 0xcf12e3f075ae79dd26bf1616,\n                    limb1: 0xb383301919d9fa2d99fd0ab3,\n                    limb2: 0x229dfa1b1e366c8c,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x62979183e1e24b624116a174,\n                    limb1: 0xbdba041021322754848f1d61,\n                    limb2: 0xa476d754210008a,\n                },\n                w1: u288 {\n                    limb0: 0x4287ad8fa4e3fda207b68f52,\n                    limb1: 0xcd665ac9b975b2aff1f8dd08,\n                    limb2: 0xfe07d087ed107ab,\n                },\n                w2: u288 {\n                    limb0: 0x308669cfeafff59899fa785e,\n                    limb1: 0x829fc34300d1e178417143de,\n                    limb2: 0xd874d7418c3b242,\n                },\n                w3: u288 {\n                    limb0: 0x675789df45cb28ed6b2f322,\n                    limb1: 0x6829dd797f7f7a6f1fc6bf04,\n                    limb2: 0x268ec7b4c8e79e67,\n                },\n                w4: u288 {\n                    limb0: 0x5b0a25b74c83183bc84f5d0e,\n                    limb1: 0x6c375c7e4a8f194cfcc07c38,\n                    limb2: 0x21dd433dcc0e0ce5,\n                },\n                w5: u288 {\n                    limb0: 0xa042285feb04a253194546ae,\n                    limb1: 0x36b0350cc940c7e0f0a1ec94,\n                    limb2: 0x2b85fd9d9e053b76,\n                },\n                w6: u288 {\n                    limb0: 0x2b65196fb3229731e0e0639c,\n                    limb1: 0x5365707554bc24f77ea1439e,\n                    limb2: 0x73310d2feb86b4,\n                },\n                w7: u288 {\n                    limb0: 0xda9afd8f517d9c0088de82a6,\n                    limb1: 0x3a334adbafdc8c0fe20dd788,\n                    limb2: 0x12bc5ca2182ea4c0,\n                },\n                w8: u288 {\n                    limb0: 0x30f3db4d6495b2ae35511824,\n                    limb1: 0x96e95c10e585fe2e57ce7be8,\n                    limb2: 0x1fca4754d1120ebf,\n                },\n                w9: u288 {\n                    limb0: 0x411d4e59d273304e5653544,\n                    limb1: 0x2b76a536fa12d1623f35eaa5,\n                    limb2: 0x1f9ebab7aa9085b1,\n                },\n                w10: u288 {\n                    limb0: 0x21016f80ced8c3d9272193ab,\n                    limb1: 0xdd9f7de1487853a3ac2db25b,\n                    limb2: 0xfb3e5578686ac87,\n                },\n                w11: u288 {\n                    limb0: 0x7c123e62ef78fe69adf00547,\n                    limb1: 0x468ac789efbe486f5b24bdae,\n                    limb2: 0x2d5f9d45750a66f9,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xf49ddda8e747747083079d37,\n                    limb1: 0x68a320e1b5f8a55def8eb451,\n                    limb2: 0x1d8d87d7afc034c6,\n                },\n                w1: u288 {\n                    limb0: 0xd0e8f83930e790d0cf7aa4f3,\n                    limb1: 0xdc51e7ce79d82f0986e755e3,\n                    limb2: 0xb35f2092f80a77a,\n                },\n                w2: u288 {\n                    limb0: 0xd9e56962870a50e84be40dd8,\n                    limb1: 0x9f1423b923aef765c9073547,\n                    limb2: 0x2407cef32c374634,\n                },\n                w3: u288 {\n                    limb0: 0x8a6e91e2640524e91ca9e5c0,\n                    limb1: 0x60cfea5268e4f21f3c9385ba,\n                    limb2: 0x2d57872e784ffe8f,\n                },\n                w4: u288 {\n                    limb0: 0x610c92d3030b34c8fe759af4,\n                    limb1: 0xccef054c52c61f91aec59117,\n                    limb2: 0x2a7fdfb70893c87f,\n                },\n                w5: u288 {\n                    limb0: 0xdc3871296f6b5fb090ff3d84,\n                    limb1: 0x7a2b2003194e22958c65aad,\n                    limb2: 0x11330e4b772d813,\n                },\n                w6: u288 {\n                    limb0: 0xc2c316717393e539996e2dfa,\n                    limb1: 0x6dbced58e49bc602d3ecb633,\n                    limb2: 0x2b493ea7f055a49f,\n                },\n                w7: u288 {\n                    limb0: 0x4e7a8676b9ce8022f6546955,\n                    limb1: 0x8d4e830787b1fde166a8a9df,\n                    limb2: 0x1e95fcd6da158d5f,\n                },\n                w8: u288 {\n                    limb0: 0x61aeabf44d5b761527cd6678,\n                    limb1: 0xdd5f062d6ff2ff617a9bade5,\n                    limb2: 0x2e9d36256b9199be,\n                },\n                w9: u288 {\n                    limb0: 0x27a4291e6987daf0dbe6e8ae,\n                    limb1: 0x84b47163847a8f4d8682775a,\n                    limb2: 0x27cdc91e5d2053dc,\n                },\n                w10: u288 {\n                    limb0: 0xef2510a74d7892233c254ea,\n                    limb1: 0x7cc4faf9b18401574a7fd4c7,\n                    limb2: 0x9da984836efee50,\n                },\n                w11: u288 {\n                    limb0: 0x21081127deea91bde61024b2,\n                    limb1: 0xf193ac5ac85dd5ec608e1907,\n                    limb2: 0x2a555324963199e5,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x231431a681ca1912d93c493c,\n                    limb1: 0x7cd5100d863f21b7b69548cf,\n                    limb2: 0x6be1a88eb32559b,\n                },\n                w1: u288 {\n                    limb0: 0x26fe843824491895c70e6492,\n                    limb1: 0xad3f2925ef00c47f85f0c5cb,\n                    limb2: 0x1c25f399327375f2,\n                },\n                w2: u288 {\n                    limb0: 0x1d64a276a7ca6a07f378c73c,\n                    limb1: 0x2d2741e0d465bc545054a3d8,\n                    limb2: 0x1bf7749bd948c147,\n                },\n                w3: u288 {\n                    limb0: 0xd28017558ebe08c23c711eb,\n                    limb1: 0x49b4bfd3c9086160e68f932a,\n                    limb2: 0x7c63194c9b2d822,\n                },\n                w4: u288 {\n                    limb0: 0xc66f31af760d6d857ef14191,\n                    limb1: 0x3d37853c09dfc5735f6ab95a,\n                    limb2: 0x4c9d5f418fc2eca,\n                },\n                w5: u288 {\n                    limb0: 0x9d28f5110dcb53d41cb6a236,\n                    limb1: 0x4b42d62aba0e8095600662f9,\n                    limb2: 0x222dbbf0d045f1e4,\n                },\n                w6: u288 {\n                    limb0: 0x855491cbc4c074f566c1ff07,\n                    limb1: 0x3d2ad6ec1c1b07319336b1c0,\n                    limb2: 0x2216d43a7fc3d867,\n                },\n                w7: u288 {\n                    limb0: 0xa2d181effcab2485fd0929b1,\n                    limb1: 0xbd1dbcdda521d518016ab038,\n                    limb2: 0x17da64f8a088f289,\n                },\n                w8: u288 {\n                    limb0: 0x7e4609531a9a80575e4fc446,\n                    limb1: 0x7fc0249541f923b62c80b7ab,\n                    limb2: 0x1b1f3ca3a35aed95,\n                },\n                w9: u288 {\n                    limb0: 0x6bde512b2db44cc14aaab80b,\n                    limb1: 0x3332a36522218d5054b2df73,\n                    limb2: 0x16cc444aacfea675,\n                },\n                w10: u288 {\n                    limb0: 0x9d073f56f1ef70e1409f958f,\n                    limb1: 0x11ef505741b46c711501e196,\n                    limb2: 0x37e686418823710,\n                },\n                w11: u288 {\n                    limb0: 0x7d2b23008dd91058e4fe64f9,\n                    limb1: 0x914180e46029b050930de287,\n                    limb2: 0xcae32e2fb03a1cf,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xec5d0a0dbf26b9244185606,\n                    limb1: 0x2577b931ba5d8d5cde41b68d,\n                    limb2: 0x5e96e308db4b280,\n                },\n                w1: u288 {\n                    limb0: 0xbaa744f3269430ce568e50bd,\n                    limb1: 0x60f2b1523bf010f9abc7a2c8,\n                    limb2: 0x8e4f258d7ed76a4,\n                },\n                w2: u288 {\n                    limb0: 0x2342a9e354749981838268ee,\n                    limb1: 0xaf2ecea58318aed3b37f5692,\n                    limb2: 0x291525813b88babf,\n                },\n                w3: u288 {\n                    limb0: 0xdc734db514a13e85b5204e5d,\n                    limb1: 0x122d47c0509cc9315fcc9d29,\n                    limb2: 0x23d67f47908d3e5,\n                },\n                w4: u288 {\n                    limb0: 0x56558781f1a6382f991559cb,\n                    limb1: 0xd87862bbd0f987a16c7df25d,\n                    limb2: 0x7281838826ccd22,\n                },\n                w5: u288 {\n                    limb0: 0x288fc284a7951c14de8da86e,\n                    limb1: 0x69d04a96c38b3cc0548f7544,\n                    limb2: 0xf60950d3a14b67b,\n                },\n                w6: u288 {\n                    limb0: 0x318952aeb73d7b08c5fe781b,\n                    limb1: 0x901f81c957993437980ea613,\n                    limb2: 0x119433627695ee93,\n                },\n                w7: u288 {\n                    limb0: 0x595a69d331001fb9c7a9f006,\n                    limb1: 0x1e4cc5c97a405d3e3f5b53fe,\n                    limb2: 0x1348746ac61470a,\n                },\n                w8: u288 {\n                    limb0: 0x9c061b99db93b1ebce5d9fe6,\n                    limb1: 0x1cfe992ec44f28737dff910b,\n                    limb2: 0x2ef11c4ef77570ee,\n                },\n                w9: u288 {\n                    limb0: 0xea82ad0d20f75a7fcb7131a,\n                    limb1: 0xa08d4a3e487358d11c698ece,\n                    limb2: 0x1b26098d599d7ae1,\n                },\n                w10: u288 {\n                    limb0: 0xc022d7a34d19af209e5bd73e,\n                    limb1: 0xe7579941b62b48517495a22,\n                    limb2: 0x4624fa9f3c5da9a,\n                },\n                w11: u288 {\n                    limb0: 0xda5e34b4246623fb0f08bbeb,\n                    limb1: 0x5b88dd2c5f4e947261dbf571,\n                    limb2: 0x14fb70e3a5644ab9,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x37435bacb68ebcdf3ca0f9e6,\n                    limb1: 0x95680e9183aeea980381c2ff,\n                    limb2: 0x2e0b176a2f536c6e,\n                },\n                w1: u288 {\n                    limb0: 0x5d257200e0e3f0f8260548a1,\n                    limb1: 0x43ac10e47e02c1a9d08110ee,\n                    limb2: 0x656613d14e5d850,\n                },\n                w2: u288 {\n                    limb0: 0x29edc8659226397445adcfd7,\n                    limb1: 0x1cb605f25f1232c4b97003b8,\n                    limb2: 0x13a6a30088bf9a55,\n                },\n                w3: u288 {\n                    limb0: 0x4837b7e02ab5c97e266a9eb2,\n                    limb1: 0xefb32f653bbae6f3eb726d8c,\n                    limb2: 0xceb8c4e50028cc4,\n                },\n                w4: u288 {\n                    limb0: 0x17fdc9308535284c68a7ac7d,\n                    limb1: 0x8f766d31c197ea65a39bc4ca,\n                    limb2: 0x11acbfcb24ad2ba8,\n                },\n                w5: u288 {\n                    limb0: 0x967bd60ae3efddda5dfbec81,\n                    limb1: 0xad70c14c97b8c7380a686e0f,\n                    limb2: 0x30371ad6bf543c10,\n                },\n                w6: u288 {\n                    limb0: 0xd6adaf61b6d0903807ee7c9a,\n                    limb1: 0xee225f52f407d4ac976ef50a,\n                    limb2: 0x2bda417303c6e24,\n                },\n                w7: u288 {\n                    limb0: 0x65b3fb8257e7965d755002d2,\n                    limb1: 0xfeb9878a646b31e21f1bc4dd,\n                    limb2: 0x3fabd669db5667,\n                },\n                w8: u288 {\n                    limb0: 0xc8927e2bf2fd8606dc9b6e85,\n                    limb1: 0x9ddb06748b2b5d9c90979f30,\n                    limb2: 0x24bbdf3df96e6ea1,\n                },\n                w9: u288 {\n                    limb0: 0xd7eba07d8fb5fcb950830fc7,\n                    limb1: 0x1c092ce0a8e62ed5de82e1d8,\n                    limb2: 0x7e9c4205bfb999c,\n                },\n                w10: u288 {\n                    limb0: 0x22d58baa6c70b1c140f13e2b,\n                    limb1: 0x38546fe262f003b039568289,\n                    limb2: 0x13eb0f5e2523f2ca,\n                },\n                w11: u288 {\n                    limb0: 0xe6fdf4239d6fe039730db80e,\n                    limb1: 0x81fc600118834bde7b210e33,\n                    limb2: 0x23e94c10560dd48f,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x126dcabb9c83e55788a421b5,\n                    limb1: 0x2e5a8020d31d184d2bd680f8,\n                    limb2: 0x176e9e74d5123bec,\n                },\n                w1: u288 {\n                    limb0: 0x732eaa22202d100e390b18ca,\n                    limb1: 0x2595de575d6260fc6337efbc,\n                    limb2: 0xf59c55b16fb73c0,\n                },\n                w2: u288 {\n                    limb0: 0x8454d677091dc5fd7e035f79,\n                    limb1: 0x6a2dd013fb3bc6a2e5003d7,\n                    limb2: 0x1c39b76d67404b64,\n                },\n                w3: u288 {\n                    limb0: 0x4fc8609d589ce3d8c239a3dd,\n                    limb1: 0xa8f08cf1f22a3c5957b65a22,\n                    limb2: 0x241f11fcdd196ec,\n                },\n                w4: u288 {\n                    limb0: 0x67e9b76b6ba40ce55cf6ab86,\n                    limb1: 0x8efa4d2d0eabda1157c2bb0d,\n                    limb2: 0x252d5836afe72740,\n                },\n                w5: u288 {\n                    limb0: 0x44c643bb39ed068dead8aca2,\n                    limb1: 0xa1da68cdcb0915ecad11d33c,\n                    limb2: 0x102404f3b319bf2a,\n                },\n                w6: u288 {\n                    limb0: 0xb5b9204c239db4019c1fdb3b,\n                    limb1: 0xf9e229ea94fa5218d7c1fc77,\n                    limb2: 0x143ceec4f0df474,\n                },\n                w7: u288 {\n                    limb0: 0x453b36a8489031e742fad6a5,\n                    limb1: 0x9092027d3685f9f1c9d26cfb,\n                    limb2: 0x50420383217b07e,\n                },\n                w8: u288 {\n                    limb0: 0x23c8b1a3576fc3fe496deedc,\n                    limb1: 0x17660d0f8467bc551b9d0bdd,\n                    limb2: 0x103804c850751821,\n                },\n                w9: u288 {\n                    limb0: 0x1d3bb90042e840d2625d12ea,\n                    limb1: 0xf92dc5238204717730ffb1ce,\n                    limb2: 0x246eb81f06275fc2,\n                },\n                w10: u288 {\n                    limb0: 0x53509e255bff37a25830dbe3,\n                    limb1: 0x985df0466ce0dcec904b0fd7,\n                    limb2: 0x908c8217e42cd80,\n                },\n                w11: u288 {\n                    limb0: 0x3e912b9df8245fa466263f73,\n                    limb1: 0xaefb85c91fb824510a98d40a,\n                    limb2: 0xff2b69e5bfe0481,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0x56b32d16ca998bb70b7788b2,\n                    limb1: 0xb01d382c48614d4ead2ee20f,\n                    limb2: 0x9a64fc7378b5983,\n                },\n                w1: u288 {\n                    limb0: 0xa6231f1419290d1fe863d395,\n                    limb1: 0xa558113440db59f078ce3064,\n                    limb2: 0xae4a839007bf42e,\n                },\n                w2: u288 {\n                    limb0: 0x75ef5211c2b0d3fb68e934fe,\n                    limb1: 0x4b999ebd29af21abdebfd167,\n                    limb2: 0x1300c3b30e57dd45,\n                },\n                w3: u288 {\n                    limb0: 0x20db161a9639e8681ce22733,\n                    limb1: 0x59edc8f158aeb79b697b9c19,\n                    limb2: 0xf3607616f05f4f4,\n                },\n                w4: u288 {\n                    limb0: 0x8e0047a94f779f1b616a665e,\n                    limb1: 0x7bf323f05fe820cd6b92f8c1,\n                    limb2: 0x255f3301a994d38,\n                },\n                w5: u288 {\n                    limb0: 0x7cce5d4463609087e5be3f9b,\n                    limb1: 0xf5ba833a41f0ba18432a33f1,\n                    limb2: 0x2251cd91d4cb556a,\n                },\n                w6: u288 {\n                    limb0: 0x1c4f0dfbc693f258d4248701,\n                    limb1: 0x77e4e4829a6bc521b295a18,\n                    limb2: 0xbfac02addd7ca9,\n                },\n                w7: u288 {\n                    limb0: 0xfd7f0f015d04a59f87d0cc26,\n                    limb1: 0xe29e4605e3049af9e29c2f97,\n                    limb2: 0x2a8c7ce36cd38433,\n                },\n                w8: u288 {\n                    limb0: 0x11d34ee47ec5a24c6604f5fc,\n                    limb1: 0x30be471321da0d345f4143f9,\n                    limb2: 0x2c5fa2db51bc0d96,\n                },\n                w9: u288 {\n                    limb0: 0x1502abefbd9b920aec4bea87,\n                    limb1: 0x9639b012f620a9a4549f90ee,\n                    limb2: 0x276a2c92cd4b35c4,\n                },\n                w10: u288 {\n                    limb0: 0xf17b79c9b6aeb4d04783926c,\n                    limb1: 0x9c1643fc7f0a9517dab75329,\n                    limb2: 0x147a63c2afd56d1a,\n                },\n                w11: u288 {\n                    limb0: 0xe66eec94302fe7c283b5bd88,\n                    limb1: 0x727ac48a4b194db5633b8172,\n                    limb2: 0x256a4b164497e127,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xcf8cd1f2d235c546a64155e1,\n                    limb1: 0x49f94fe26f2f8dc3c32b753d,\n                    limb2: 0x90af94bddbbae6,\n                },\n                w1: u288 {\n                    limb0: 0x5f46fc7fd14501d9b48e3f00,\n                    limb1: 0xd6a0531b22317d46ae0f7263,\n                    limb2: 0x29090bfeabc27bd9,\n                },\n                w2: u288 {\n                    limb0: 0x5a83a53c14292881b779531a,\n                    limb1: 0xf2ea658491724e9014f110eb,\n                    limb2: 0xb760c5729a55ed5,\n                },\n                w3: u288 {\n                    limb0: 0xcf101de6acf2078bfe7b48e4,\n                    limb1: 0xbf896390bca819f7001bf1c,\n                    limb2: 0x1216bca4050f3d36,\n                },\n                w4: u288 {\n                    limb0: 0x1bc0ecc2ac251eaa5f21d71a,\n                    limb1: 0x587b63c9693e42ba2ecbc329,\n                    limb2: 0xe831722223e7137,\n                },\n                w5: u288 {\n                    limb0: 0x6f420c9c7b0f3f6216d8b5d7,\n                    limb1: 0x2cf500acafedbc3812a974a1,\n                    limb2: 0x16c6c0d66ff0e496,\n                },\n                w6: u288 {\n                    limb0: 0x6b80583ddb0da3dc147a8761,\n                    limb1: 0xd2ab1ecd4915c94f067bb706,\n                    limb2: 0x5becfa1995ffb0b,\n                },\n                w7: u288 {\n                    limb0: 0x735f62f6dc9d27b0c99a7afc,\n                    limb1: 0x9b049dab7d2617bd302e6ca1,\n                    limb2: 0xc1d8f04d1a37743,\n                },\n                w8: u288 {\n                    limb0: 0x1b6e19f6d80457fbd011fdf8,\n                    limb1: 0x60bdc4f77e10fdedb4718dbc,\n                    limb2: 0x250fbdefea34c70e,\n                },\n                w9: u288 {\n                    limb0: 0x86a9b4513fb51e5cb981fea3,\n                    limb1: 0x3b7f9a4e04823b4667573b4e,\n                    limb2: 0x23be804fbf7fc5ba,\n                },\n                w10: u288 {\n                    limb0: 0xd632f7614d5fab9d356c0fd9,\n                    limb1: 0x9a02bfc36db366078d9b9289,\n                    limb2: 0xc077e1b37c3db7,\n                },\n                w11: u288 {\n                    limb0: 0xb85605ecfcfe3176c018bc6f,\n                    limb1: 0x25fddd5b4babdaf0e7ebc66c,\n                    limb2: 0x2d126fc19343eb6d,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xe0eb79ef697704f9f88009a7,\n                    limb1: 0xf84e9fd2b03ff24c279431ef,\n                    limb2: 0x1ecafc868da37277,\n                },\n                w1: u288 {\n                    limb0: 0x2ac72b964e5cc678d621ba0b,\n                    limb1: 0xb71c8056e530a371916123aa,\n                    limb2: 0xa6a0ceb5f1b6d2d,\n                },\n                w2: u288 {\n                    limb0: 0xb6bad8778afe2fef077674ba,\n                    limb1: 0x7a16c7fd65c6f7f2e37b1e23,\n                    limb2: 0x22a5e8a58f9c582b,\n                },\n                w3: u288 {\n                    limb0: 0xb396d10dfc48fc667c7690c3,\n                    limb1: 0x16d22ca57a88a11bca38ff4a,\n                    limb2: 0x20ef9698b6d40399,\n                },\n                w4: u288 {\n                    limb0: 0xa2c377682b43313850d5bceb,\n                    limb1: 0x278d711737f6ea40b0dce47c,\n                    limb2: 0x295158b2625822c,\n                },\n                w5: u288 {\n                    limb0: 0xda0ba60542bf2bcbc9602228,\n                    limb1: 0x7cc8b336d9d47520093bb1ba,\n                    limb2: 0x300a142a2850796f,\n                },\n                w6: u288 {\n                    limb0: 0x73fc5bdded39397faec57d1a,\n                    limb1: 0x93befe8f64a746ca03d89fb8,\n                    limb2: 0xd34647249cce294,\n                },\n                w7: u288 {\n                    limb0: 0x949decf431ad41a4c35769a8,\n                    limb1: 0xe75de8c12021d75cc1efb433,\n                    limb2: 0x1a5f238d6dce3644,\n                },\n                w8: u288 {\n                    limb0: 0xb63f0e9fb3fee04aeace972f,\n                    limb1: 0x5764b150d8ed8b5cdfaaee7f,\n                    limb2: 0x1154bf9d5bd93772,\n                },\n                w9: u288 {\n                    limb0: 0x954e689968960d0c6a3a5be9,\n                    limb1: 0x9f6a3e9cc45fbcb1a92c2433,\n                    limb2: 0x403a6d1d9e0e3f3,\n                },\n                w10: u288 {\n                    limb0: 0xe8cb3b0bc09991bdbc73f57b,\n                    limb1: 0x7b7e751a540e324065a25619,\n                    limb2: 0x2f223fa11d10f5f9,\n                },\n                w11: u288 {\n                    limb0: 0xec0d73c52157b51a5163723,\n                    limb1: 0x5b46f935b0ed7732d2de6790,\n                    limb2: 0x28dfc542f18824d9,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xe2fea35c4a5b28c62048e60a,\n                    limb1: 0xaf70594c4748f6aec0400b42,\n                    limb2: 0x3ce671704d55a22,\n                },\n                w1: u288 {\n                    limb0: 0x978176f558827db938ce63cb,\n                    limb1: 0x5de249f88953aba9e96e95f6,\n                    limb2: 0xd03c2c5a6e7a15d,\n                },\n                w2: u288 {\n                    limb0: 0x1d20a8027dff3e64687b0caa,\n                    limb1: 0x448f6d039cfcc3132aeb2043,\n                    limb2: 0xd84a765a1ed7869,\n                },\n                w3: u288 {\n                    limb0: 0x1703cf57601441d313ce9f6,\n                    limb1: 0xb4db90a6e191a4af88fe5033,\n                    limb2: 0x678587681e1f62d,\n                },\n                w4: u288 {\n                    limb0: 0x36cff464be8bd512f26bce5c,\n                    limb1: 0xb716aac34db1dc56b2294b3d,\n                    limb2: 0x1bf3f2db255639d1,\n                },\n                w5: u288 {\n                    limb0: 0xeac83ef4b82b4b763bac4e8b,\n                    limb1: 0xf4cde6c8121a2baa622243a6,\n                    limb2: 0xb2055633f438f3b,\n                },\n                w6: u288 {\n                    limb0: 0xda63aa46e3f37283a06151c7,\n                    limb1: 0x8ee3b65ce2564d4c7b5f483f,\n                    limb2: 0x297ecb7fdeba1aa4,\n                },\n                w7: u288 {\n                    limb0: 0xfb59559a190f305cac04eaf9,\n                    limb1: 0xa90e8d265b71e75a7341b23f,\n                    limb2: 0xcb8a82d979e7ea2,\n                },\n                w8: u288 {\n                    limb0: 0xc58bf182be372c06687de495,\n                    limb1: 0xf4cb50f848c1e0e2072c7486,\n                    limb2: 0x2b107173b97495a9,\n                },\n                w9: u288 {\n                    limb0: 0xe0eabd65692464ca0dd92b1f,\n                    limb1: 0x56abb5cb408d804cc85bf34a,\n                    limb2: 0xc80e3c37d6cad8a,\n                },\n                w10: u288 {\n                    limb0: 0x2ee21b700c674b257b1831d7,\n                    limb1: 0x3d01c28bcd9b53ad28d0864f,\n                    limb2: 0x51f5ebd4bc028b9,\n                },\n                w11: u288 {\n                    limb0: 0x5ec5d4da4056deda36f904a,\n                    limb1: 0x168e485c29ffe2be92bd8ea9,\n                    limb2: 0x2c51b496555823dc,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xa8471dd55603384b42066496,\n                    limb1: 0xe46eee6fcaba6ee1116284f5,\n                    limb2: 0x2575472a96ec8df,\n                },\n                w1: u288 {\n                    limb0: 0x9b001b2c565f0ddfa573296c,\n                    limb1: 0x5debea2a4077e45fd6049d3e,\n                    limb2: 0x10ea438a1d19edf5,\n                },\n                w2: u288 {\n                    limb0: 0x459fab1d8fcf4bb48996829,\n                    limb1: 0x1beefd7fc2a65a73c031c7f3,\n                    limb2: 0xbfde865e2af211d,\n                },\n                w3: u288 {\n                    limb0: 0x127b67ab28f4648ccd7298af,\n                    limb1: 0x8d1a33c8a95c07a2d8182b51,\n                    limb2: 0x154f5a2a8978766f,\n                },\n                w4: u288 {\n                    limb0: 0xa843c7b6cdbfec70273c7179,\n                    limb1: 0x451376ff143138b26508e149,\n                    limb2: 0x27ee093ad5b5641d,\n                },\n                w5: u288 {\n                    limb0: 0xe46d7ddc38e93e5d4539397e,\n                    limb1: 0x10c546e7762036ef0406b68e,\n                    limb2: 0x1e5de28d570d8c23,\n                },\n                w6: u288 {\n                    limb0: 0x1d71841c43b80d2bfc818be0,\n                    limb1: 0x9ed8354ed235ab98dcbafdfd,\n                    limb2: 0xc7832fd4bcfdd58,\n                },\n                w7: u288 {\n                    limb0: 0x9120a99dcef073912a3fbe11,\n                    limb1: 0xc99085975b31be35943fe6de,\n                    limb2: 0x19b2aeb3f9a37fc0,\n                },\n                w8: u288 {\n                    limb0: 0xfdd9ded7b646da18595ccac2,\n                    limb1: 0x7326e81c5c4d6cd485a95afc,\n                    limb2: 0xb12576c70934ed4,\n                },\n                w9: u288 {\n                    limb0: 0x761820abaa0929428358b641,\n                    limb1: 0x49c5bd0dedc35fae8f0ae35e,\n                    limb2: 0x179d6cc8ca4c2127,\n                },\n                w10: u288 {\n                    limb0: 0x337630f723038a58f57b249a,\n                    limb1: 0xb6754ac913be8838812111fe,\n                    limb2: 0xc811873605012b5,\n                },\n                w11: u288 {\n                    limb0: 0xd311f807d8869697ae180475,\n                    limb1: 0x3184bc6814d397f313fcd460,\n                    limb2: 0x335982df9e3c62a,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xd43b4f3fddaca664aeb0609a,\n                    limb1: 0x4bfc6836c701691c4414eee0,\n                    limb2: 0x2fb3fa9c32523106,\n                },\n                w1: u288 {\n                    limb0: 0x8e7ad226defaa97d7f70c6e6,\n                    limb1: 0x857e2881a21df90f085e3b8a,\n                    limb2: 0xe37b527e826d61c,\n                },\n                w2: u288 {\n                    limb0: 0x30530cf277d3ac15f532bb98,\n                    limb1: 0x88cbcea6dfad7de0cfc2ba7d,\n                    limb2: 0x2eca3af594e50fbf,\n                },\n                w3: u288 {\n                    limb0: 0xef4cc3ba0de6966b75295de8,\n                    limb1: 0xaf8676b848865e67c0f26489,\n                    limb2: 0x1460c0fd900d19c,\n                },\n                w4: u288 {\n                    limb0: 0xc01ef62a31ee02de38d89329,\n                    limb1: 0x1d525f597b96d81d5254e48e,\n                    limb2: 0x14221da9a4fc3c02,\n                },\n                w5: u288 {\n                    limb0: 0xadc48338e7db4e11166052f6,\n                    limb1: 0x9e68b555bddbd64621247d0c,\n                    limb2: 0x5a77fdfda3d9125,\n                },\n                w6: u288 {\n                    limb0: 0x63d9fa8e08c9954284f16245,\n                    limb1: 0xca621cede38d19231a12d63,\n                    limb2: 0xd27fe5bd781b034,\n                },\n                w7: u288 {\n                    limb0: 0x77a9046ebfaeabcd937b61aa,\n                    limb1: 0xdfa2e67db4bb78ec8cab398f,\n                    limb2: 0x1dd3f480cadc51bf,\n                },\n                w8: u288 {\n                    limb0: 0xf65c9e4d2df095b6d942b195,\n                    limb1: 0xd6ebcf23f6276b9f4398ca5b,\n                    limb2: 0x1685cb6183c850a4,\n                },\n                w9: u288 {\n                    limb0: 0xe5ce6d51f5c7a2aeec8cada,\n                    limb1: 0x516cacc2dabd97d328953757,\n                    limb2: 0x1974d6cc4195d3f0,\n                },\n                w10: u288 {\n                    limb0: 0xc2dc450c125c4f157be8a0ed,\n                    limb1: 0x4de5175e01fcec11f2943446,\n                    limb2: 0x94d92ac291aff6d,\n                },\n                w11: u288 {\n                    limb0: 0xab272482c2c48dac7030c6fb,\n                    limb1: 0xad02ca14f40e608b78e0d102,\n                    limb2: 0x1bb830e6999b29a3,\n                },\n            },\n            E12D {\n                w0: u288 {\n                    limb0: 0xc83eac5d253a3c206da26863,\n                    limb1: 0x1a2947347e60ca31a19b795a,\n                    limb2: 0x19d283eb90879408,\n                },\n                w1: u288 {\n                    limb0: 0xfe29e4f1c7f2933ca1484bb7,\n                    limb1: 0xa467cb57c5dd3ee90eb9b1fd,\n                    limb2: 0x5af95cf457531b6,\n                },\n                w2: u288 {\n                    limb0: 0x5219339ef8753869ba2e72df,\n                    limb1: 0xf6edbe19ee9528b014d5c5e4,\n                    limb2: 0x17e4d2b93b5a24d6,\n                },\n                w3: u288 {\n                    limb0: 0x702d294fada771a134eda0dd,\n                    limb1: 0x6f78dce21c0fa36347352189,\n                    limb2: 0x271fd9860e85dc01,\n                },\n                w4: u288 {\n                    limb0: 0xcdae44d3e06c07681ae14c73,\n                    limb1: 0xe07fa16b28b87a358d682e14,\n                    limb2: 0x1b33f9d4bedad80f,\n                },\n                w5: u288 {\n                    limb0: 0x527e57b7206c1f1abed0556,\n                    limb1: 0xc5f02956f7dd77fc77040195,\n                    limb2: 0x1917515d732e83cf,\n                },\n                w6: u288 {\n                    limb0: 0x821089dfaa7ef412763e67ff,\n                    limb1: 0xfd54fe4da59d3b34626aa0a3,\n                    limb2: 0x1f646c3c1ce572a3,\n                },\n                w7: u288 {\n                    limb0: 0x2266b08b3a2f19ef3dfde72f,\n                    limb1: 0x8b17232a32f1d284469f812a,\n                    limb2: 0x3d46d9f79f4918e,\n                },\n                w8: u288 {\n                    limb0: 0x8bc72d70c71f6a14c2015aec,\n                    limb1: 0x3e3b1d0272aeee3c95095070,\n                    limb2: 0x1401f32c5bdc074d,\n                },\n                w9: u288 {\n                    limb0: 0x6b9fdcc49f933192fdd316d9,\n                    limb1: 0x51b8f8765258f14ff0b91b7f,\n                    limb2: 0x2d04765080f5aa72,\n                },\n                w10: u288 {\n                    limb0: 0x282af58df7dd63615218a4db,\n                    limb1: 0xdb5b2942254b35298f473dfa,\n                    limb2: 0x19371f2e44f2642f,\n                },\n                w11: u288 {\n                    limb0: 0xf656fcc4885e9bac2311a500,\n                    limb1: 0xb86e168eccc1490248a1bbcf,\n                    limb2: 0x1e94a5f389c1134f,\n                },\n            },\n        ]\n            .span(),\n        big_Q: array![\n            u288 {\n                limb0: 0xcd9ecd0e7e0de83876860721,\n                limb1: 0x7a0e802a360ad60fb6b3ba6,\n                limb2: 0x1f26bff9d463a948,\n            },\n            u288 {\n                limb0: 0xc45197a61e985bb95c93982,\n                limb1: 0x2b04ba2a8963f7ae0fa62ce7,\n                limb2: 0x2d01448cacdad685,\n            },\n            u288 {\n                limb0: 0x588f7a63bbaf841b308e5cb1,\n                limb1: 0xa0de63d533eccee6a673d8f6,\n                limb2: 0x1c044a4e0a5d5939,\n            },\n            u288 {\n                limb0: 0x3499e2c2ef45664c1c7cfc31,\n                limb1: 0x7046243b95e70d66fd128d3d,\n                limb2: 0x1badeff894c418b2,\n            },\n            u288 {\n                limb0: 0x9d4d9b283dda2d4cf3b482ca,\n                limb1: 0xe8f67766ff9b89e228118e0,\n                limb2: 0x12cf4b1f6ca74656,\n            },\n            u288 {\n                limb0: 0x7f78b962b9a9586c785bf41d,\n                limb1: 0x942b1fd431968dcb396f0ea6,\n                limb2: 0x21f639eb74937d42,\n            },\n            u288 {\n                limb0: 0xcf363881046546501cf425ea,\n                limb1: 0x443c6e66796429495be332e5,\n                limb2: 0x14e45de7b5461b27,\n            },\n            u288 {\n                limb0: 0xf6f3d82bef402316dfeb53e7,\n                limb1: 0xda01fc4dbf0d0280eb89e6ec,\n                limb2: 0x402be40fe8cf55d,\n            },\n            u288 {\n                limb0: 0x43ff2f5f02c99faf8526decc,\n                limb1: 0x979a21765f207f8c3f88f9f3,\n                limb2: 0x1a50d93e54087d54,\n            },\n            u288 {\n                limb0: 0xeae0f77e14ad1d010fed4797,\n                limb1: 0x86a3801139a2f3b0ba5ac0,\n                limb2: 0x1c16aa3c3908741d,\n            },\n            u288 {\n                limb0: 0xdf7f8f09db39050b510740c4,\n                limb1: 0x88a3c866773a26b91a70377c,\n                limb2: 0xf5dcebb0a8eb1bf,\n            },\n            u288 {\n                limb0: 0xe509b26f0280664ececb3be8,\n                limb1: 0xdb438338837751f01dce4b67,\n                limb2: 0x166a10efa92b6056,\n            },\n            u288 {\n                limb0: 0x82875b919a173ea8a3511d48,\n                limb1: 0xf9b0528311202cfd6db28337,\n                limb2: 0x1ac72f8b464f7578,\n            },\n            u288 {\n                limb0: 0x2b0709cd2f982e17d43ce465,\n                limb1: 0x85605341bfd989b9e558a9e8,\n                limb2: 0x29d232336b682435,\n            },\n            u288 {\n                limb0: 0xe080bdc4d14676d875f5ca74,\n                limb1: 0xef83976d59ee48dab51aed6c,\n                limb2: 0x2597d1c934d909c7,\n            },\n            u288 {\n                limb0: 0x4e15c1b6fd41bc38a5b7a5e0,\n                limb1: 0x29058fd34d46cbb1d2cd7e9d,\n                limb2: 0x153c756a13e16b87,\n            },\n            u288 {\n                limb0: 0x110465de721c0a397c95788,\n                limb1: 0x339beb1394a74bf7fac9e22e,\n                limb2: 0x136b97bb54329558,\n            },\n            u288 {\n                limb0: 0x4cc1dc324e163ccc6884836c,\n                limb1: 0xee91e93251059174573ef629,\n                limb2: 0x2e207e483b0fd5c6,\n            },\n            u288 {\n                limb0: 0xac5b393cd606a10dd8a89e51,\n                limb1: 0xe2babe1352a2ac60c4f9033c,\n                limb2: 0x300370ae36800f97,\n            },\n            u288 {\n                limb0: 0xebb8e75229ae08a0e0425b33,\n                limb1: 0x78b9ecf71e5ef222976daa3,\n                limb2: 0x154407d45ce0fcd3,\n            },\n            u288 {\n                limb0: 0x95119019b9386ee462a8ccd8,\n                limb1: 0x431aba6ef81c2a9699eea450,\n                limb2: 0x4564056387a17b0,\n            },\n            u288 {\n                limb0: 0x10eadf8480859a90430d0518,\n                limb1: 0x3a4e3e5be0e7dd36aba57ad4,\n                limb2: 0x12f4b351402098eb,\n            },\n            u288 {\n                limb0: 0xc96e5311b9a34a252ef24927,\n                limb1: 0xc6bce3be0e5ca2a07424c205,\n                limb2: 0x248132cfddd4df2a,\n            },\n            u288 {\n                limb0: 0x673824c0f93813a2d66d7215,\n                limb1: 0x3e733001aa8c9dde8e5ad458,\n                limb2: 0xba398158cb0eab8,\n            },\n            u288 {\n                limb0: 0x51a4016794c88913507629c1,\n                limb1: 0x912fd8dee344710fdafb700c,\n                limb2: 0x2ae28b98c05f9f6b,\n            },\n            u288 {\n                limb0: 0x79a009fe57a9b359b4adb352,\n                limb1: 0x1372ca03aacbb433e1226a55,\n                limb2: 0x12617bd21c0abb52,\n            },\n            u288 {\n                limb0: 0x7eaf2f952174f82c330b95e8,\n                limb1: 0x4eb90281cfd1dd1c4671b9b,\n                limb2: 0x20bac73e741ffc3e,\n            },\n            u288 {\n                limb0: 0x982bce06f0d39bb2cdc5accb,\n                limb1: 0xb050fa46b9b7dd28cfa99214,\n                limb2: 0x2af9624e1b305800,\n            },\n            u288 {\n                limb0: 0x3a27a0a47e34c1af07bee4e5,\n                limb1: 0x4a217069cf62a8cb5dc21be0,\n                limb2: 0x113cf013ea01537b,\n            },\n            u288 {\n                limb0: 0x397138d3414f0ce30034c150,\n                limb1: 0x78a5fc50efeccd0380f5f953,\n                limb2: 0x2bbf36d098bc85cb,\n            },\n            u288 {\n                limb0: 0x1dd90e3163d35b29a4df6324,\n                limb1: 0xf4f174473f47e8f6d85260d7,\n                limb2: 0x177ea72f9955fb3f,\n            },\n            u288 {\n                limb0: 0xf5f2e7bde58014b48317751f,\n                limb1: 0xff017eda0d8456f5c6fbd91f,\n                limb2: 0xbfd8d46a321cd92,\n            },\n            u288 {\n                limb0: 0x703202d10d086be3180bb09f,\n                limb1: 0x4777e8d0e0172a43f3bc41fd,\n                limb2: 0x86c412c67ea9a24,\n            },\n            u288 {\n                limb0: 0x828ef41cae766d576be8e58e,\n                limb1: 0xbb9975959f9e49b0d1d47d5e,\n                limb2: 0x214d2c6480221840,\n            },\n            u288 {\n                limb0: 0xd6fbfa1e1ce00ffa4643b274,\n                limb1: 0xdce6d04cbe36a1f9c1f68d3b,\n                limb2: 0x249a0a2cef1fcf37,\n            },\n            u288 {\n                limb0: 0xb9fb8ad79768b63fc7a465c4,\n                limb1: 0x47908a6e2af2ba3361c8aaff,\n                limb2: 0x119055b6663e7b1f,\n            },\n            u288 {\n                limb0: 0x7c1cddcc18521e4581a65fa5,\n                limb1: 0xce811a3bf18b91a42cf807d4,\n                limb2: 0xb9c97707c1dfb5e,\n            },\n            u288 {\n                limb0: 0x82cf50a98d6a60d98898f,\n                limb1: 0xfb8668942142c8ed097fd49c,\n                limb2: 0xa33341d40ab89c1,\n            },\n            u288 {\n                limb0: 0x944ad8e61fe850d38033ce23,\n                limb1: 0x33595a089ea014ad58f9bd71,\n                limb2: 0x2e0f1bfcb86fb4c6,\n            },\n            u288 {\n                limb0: 0x637e01f7ce86989ac3bbc8a0,\n                limb1: 0x103ca90052a9d3cc1071872a,\n                limb2: 0x1afb86c103e88176,\n            },\n            u288 {\n                limb0: 0x1f082eeca6098eccfcb5f394,\n                limb1: 0xf3456368bf412757e690b18e,\n                limb2: 0xf2df40ce38dfa9f,\n            },\n            u288 {\n                limb0: 0x334b5616731bda1e93099512,\n                limb1: 0x9da6bbfc03dfb03d67bdf53,\n                limb2: 0x15aa211a87b2137e,\n            },\n            u288 {\n                limb0: 0xf282c83a11343e347e30120,\n                limb1: 0x4d683ae65f5a7e8f7c4e845d,\n                limb2: 0x244c10d60252be9d,\n            },\n            u288 {\n                limb0: 0x86cb9a2bc80a9396e05e6a31,\n                limb1: 0x9d91ba4be143eb493f6a7dfd,\n                limb2: 0x22e6cb69f0e48722,\n            },\n            u288 {\n                limb0: 0xf9ce34ca7f58a460c0ab03e2,\n                limb1: 0xb24fdc31808aa1aa652d2373,\n                limb2: 0x16271dc397abc2d0,\n            },\n            u288 {\n                limb0: 0x90b7836ac52290f685e38858,\n                limb1: 0x3d6bcd1716684e0f79af6add,\n                limb2: 0x1c1d91fd1b172cf3,\n            },\n            u288 {\n                limb0: 0x61363d39d930cfa7e7efdbdf,\n                limb1: 0xfd93b569a8206d555229c16a,\n                limb2: 0x1e98a6aa74f629c2,\n            },\n            u288 {\n                limb0: 0x15ce60589452ecb11866120b,\n                limb1: 0xe50dff8fe0f59568560ff039,\n                limb2: 0x1e280d5a22136a7c,\n            },\n            u288 {\n                limb0: 0xfc490e9f2a962e6e87d9ea27,\n                limb1: 0xae538485491902fbf60f604d,\n                limb2: 0xba325703cb9d622,\n            },\n            u288 {\n                limb0: 0x611de88bd1e06877f38545a5,\n                limb1: 0xde29c8fb70cabae4e03fcfc0,\n                limb2: 0x3040033c88c2ee9f,\n            },\n            u288 {\n                limb0: 0xaae7db4415d65b00609f5931,\n                limb1: 0x125a49ea3b009299fe42e200,\n                limb2: 0x2f27237befc96a46,\n            },\n            u288 {\n                limb0: 0xbac1d16fd779c3681906273,\n                limb1: 0xe5faff69c63d4509d664660e,\n                limb2: 0x176cc60c39ad7261,\n            },\n            u288 {\n                limb0: 0x1dff6ba32886a747f4028ce1,\n                limb1: 0x7d3dc0f77f55a160febe9533,\n                limb2: 0x41eb1e2cc9620ef,\n            },\n            u288 {\n                limb0: 0x6f159369a14c55f116b056a1,\n                limb1: 0x4d6a71d44a9e5f4b416bedaa,\n                limb2: 0x1e7d1caf0a514c8,\n            },\n            u288 {\n                limb0: 0x3eaae80d65438be521ccaa8f,\n                limb1: 0xb3cb70353f9ab7c9308878e0,\n                limb2: 0x2d350bb0c9f123e7,\n            },\n            u288 {\n                limb0: 0xe77de25e924a9438bc2d2579,\n                limb1: 0x3216dba677f2373aa5eda53f,\n                limb2: 0x160132292ce63351,\n            },\n            u288 {\n                limb0: 0x5ddd066193a6571bf767252,\n                limb1: 0xade2aa51ce1f6d0167d2cdce,\n                limb2: 0x22b9b35dfb6453be,\n            },\n            u288 {\n                limb0: 0xf2416d3109c8288e4cb6712a,\n                limb1: 0xde2b753d3e58b2b0c782c8a4,\n                limb2: 0x1348223d65a12acc,\n            },\n            u288 {\n                limb0: 0xbb0d97f224dba4d652a2dabc,\n                limb1: 0x3f95b239ab0dbaa27173d9b1,\n                limb2: 0x2f64f705d36cc41c,\n            },\n            u288 {\n                limb0: 0x2163cdc628d8567cbda19c4d,\n                limb1: 0xc862355b5465dbf60091c369,\n                limb2: 0x1b9809750c79c782,\n            },\n            u288 {\n                limb0: 0x8e504e33fc82c74075eae228,\n                limb1: 0xd3b485261c8f02eeb5ffe430,\n                limb2: 0x304d56234330259d,\n            },\n            u288 {\n                limb0: 0x622c02a4c964ebae2e9b484d,\n                limb1: 0x1b004d10e41ae67ddcbdbe62,\n                limb2: 0x1c300204506d6375,\n            },\n            u288 {\n                limb0: 0x7db8b7c5992df6fb4d576bf4,\n                limb1: 0x532d02b911256a4943d9631f,\n                limb2: 0x20d8df68c3f824cb,\n            },\n            u288 {\n                limb0: 0xba7e5a11ed1ff84a46e8ec4b,\n                limb1: 0xdfb9cb9359f71439d053d0f3,\n                limb2: 0x16cea713913e18d5,\n            },\n            u288 {\n                limb0: 0x707f838159485f761efa549c,\n                limb1: 0x88b7b4f8bdefc096d9e0d966,\n                limb2: 0x9ef20993676422,\n            },\n            u288 {\n                limb0: 0xd539b4fa1bd35ede24476341,\n                limb1: 0x8b7b5c055f3051248086ec57,\n                limb2: 0x1900b53d5fa3e38a,\n            },\n            u288 {\n                limb0: 0xeb52e994f9e72556725ee062,\n                limb1: 0xa75aba745ef74b8ee321d612,\n                limb2: 0x1a4fac0822cb2e6e,\n            },\n            u288 {\n                limb0: 0x391de54c6399c5e314219378,\n                limb1: 0xeab39215d590c0a5fe445627,\n                limb2: 0x1769e948746069b6,\n            },\n            u288 {\n                limb0: 0x68e08426167cf3d52b299276,\n                limb1: 0x3322b75fe2846840ffe8a647,\n                limb2: 0x15f5cba7c399346d,\n            },\n            u288 {\n                limb0: 0x2c6681c92d003adf9da531d,\n                limb1: 0x476fcd0b1bc75eb002229140,\n                limb2: 0x2acafdaa38a9b0f1,\n            },\n            u288 {\n                limb0: 0x9f4926869a7f3a29a2b5ae6b,\n                limb1: 0x8003f333ed5dd75a27239f34,\n                limb2: 0x23cf0a113c266a71,\n            },\n            u288 {\n                limb0: 0xfe79de39e9ac712141eb1e79,\n                limb1: 0xfbeef59d9f181cec39a142fa,\n                limb2: 0x7368d16dc93dd5f,\n            },\n            u288 {\n                limb0: 0x24f569e0749e4dad272d9a85,\n                limb1: 0xd83db10446c41cfb9739d412,\n                limb2: 0x2744e7e08b7ef64f,\n            },\n            u288 {\n                limb0: 0x3df5b88d482d57436f3d19ad,\n                limb1: 0xefcb6162d7d4182956c44a92,\n                limb2: 0x2a4ba6e026f277f,\n            },\n            u288 {\n                limb0: 0x9b0cdbd6b0fa3b683b98d54,\n                limb1: 0x64b553449acafff2c667ef40,\n                limb2: 0x21897f20c41cdb6c,\n            },\n            u288 {\n                limb0: 0xc96e1f94e1f300b6760d2c71,\n                limb1: 0x842b9e011fc4cc50bf23e8ad,\n                limb2: 0x943d19d540a93ad,\n            },\n            u288 {\n                limb0: 0x2cadea54397e41ac535a4a4e,\n                limb1: 0xd29391e14eb3c897d513cbda,\n                limb2: 0x18f65a4c0f7ad471,\n            },\n            u288 {\n                limb0: 0x199e106b6e9655c2f2db8e94,\n                limb1: 0xce6ea09ade8fcac3358e8f0f,\n                limb2: 0x25abf56cb3789872,\n            },\n            u288 {\n                limb0: 0xb398fcf7c25c747f09277a93,\n                limb1: 0xc63dee51c375ba4d24497f6b,\n                limb2: 0x130bb5b0cd93e097,\n            },\n            u288 {\n                limb0: 0x140cb7e20f30cc4d12d7c295,\n                limb1: 0x57c6440b63d64e81ae2910b0,\n                limb2: 0x1d2214d2b8f5c135,\n            },\n            u288 {\n                limb0: 0xb012688dbed3bf82c34b4903,\n                limb1: 0xdcedb9d3062e18c49b95394d,\n                limb2: 0x1009df2e386f90b5,\n            },\n            u288 {\n                limb0: 0x93b4b0ea687383e24ae3f5f0,\n                limb1: 0xb2788fb1d2ed1167268f40a5,\n                limb2: 0x133f4cd254fe0509,\n            },\n            u288 {\n                limb0: 0xe358e0e21896d72a7b964dc0,\n                limb1: 0xbf06829be21718978e1b2489,\n                limb2: 0x225f6a4f57157620,\n            },\n            u288 {\n                limb0: 0x794f77c3b786b0961426d9dc,\n                limb1: 0xee5580a7829747832f246f15,\n                limb2: 0xa2122360f5b1f89,\n            },\n            u288 {\n                limb0: 0xcff3e42c1de58bc1d88dd6a7,\n                limb1: 0x138f0628c0be5a1bb9618f00,\n                limb2: 0x13bda44ab4916c91,\n            },\n            u288 {\n                limb0: 0x260b310379f2b1ab351836fb,\n                limb1: 0xe945fc4f9e76930fb8782132,\n                limb2: 0x17b4850c6f61e1bc,\n            },\n            u288 {\n                limb0: 0x29f71cc65b41fde8c310531c,\n                limb1: 0x82110cf9b87ee0350e352128,\n                limb2: 0x2de6c43136c2a4c0,\n            },\n            u288 {\n                limb0: 0x680cf8d39f7a4cb427d1f7e3,\n                limb1: 0x8f36c365137d663bdc44adf6,\n                limb2: 0x28bc55a10a79fc6e,\n            },\n            u288 {\n                limb0: 0x4f72af30c794deec4daa1aba,\n                limb1: 0x5a61823f3ec26a66ea729460,\n                limb2: 0xf9fcc5d60431bc4,\n            },\n            u288 {\n                limb0: 0x1b2164526ac9853b86aba042,\n                limb1: 0x5ea6866ad965059ee3966723,\n                limb2: 0x292923ef2a5d538,\n            },\n            u288 {\n                limb0: 0xa24eef3357935b44d2bf84f3,\n                limb1: 0x17ede7d5dbea54ca62d39e60,\n                limb2: 0x1d47968cd691e1b2,\n            },\n            u288 {\n                limb0: 0xd8eff186b18cd6808dc008a2,\n                limb1: 0xb55b7c5e09af50acfb35beb8,\n                limb2: 0x170e527baf76072a,\n            },\n            u288 {\n                limb0: 0x7f57d08ca1f28f7c01a7ec99,\n                limb1: 0x187aacd2ee225e4e07cbf333,\n                limb2: 0x12efa830f22aa695,\n            },\n            u288 {\n                limb0: 0x78a370809f4e58d4712c0b49,\n                limb1: 0x9691d2a7a809482fcdea3f0,\n                limb2: 0x2c4fe9d95a17d925,\n            },\n            u288 {\n                limb0: 0x48f0c21db44296fd6662781,\n                limb1: 0x9bd31dd6f9ab8ba74967ddbd,\n                limb2: 0x2eb1c82eca76f7c9,\n            },\n            u288 {\n                limb0: 0x7d5845a89d0f2b149719af0,\n                limb1: 0x4127afef8486b02ae612a7b,\n                limb2: 0x1e1c08ef05c131c9,\n            },\n            u288 {\n                limb0: 0x96ee5150c56e9f4b071af91,\n                limb1: 0xb92146c9cdff145e79630861,\n                limb2: 0x131f667026fbf033,\n            },\n            u288 {\n                limb0: 0x3651e4ded6039d3824961147,\n                limb1: 0xd99373ccc9fae186d390715b,\n                limb2: 0x3c013320050adb,\n            },\n            u288 {\n                limb0: 0xa8b6b4c80aa27ed10f251c4e,\n                limb1: 0x5ede4e700c4e0dea4f455121,\n                limb2: 0x1b4c34069918cb7,\n            },\n            u288 {\n                limb0: 0xb16c3caf794d22d7cee9b0e7,\n                limb1: 0xb3e5ff03298b79eb38bcada9,\n                limb2: 0x213b8b9080afe8b0,\n            },\n            u288 {\n                limb0: 0x7d76f66dbbc1bb77cc78f482,\n                limb1: 0xf7179ed8d9b7c44ea298fe4b,\n                limb2: 0x20c8413d71b2ad0,\n            },\n            u288 {\n                limb0: 0xdb9bca348789a70043219156,\n                limb1: 0xb930d7bd11923cc488d3828c,\n                limb2: 0x1f70653776068f52,\n            },\n            u288 {\n                limb0: 0x5222536f1bb172cc8d5ba1e,\n                limb1: 0x63fa41c52cec432405a54695,\n                limb2: 0x17ed96930067ccb4,\n            },\n            u288 {\n                limb0: 0x587fb32e628380a9fc5e8f55,\n                limb1: 0x3848dacc82cae2187d9b68a0,\n                limb2: 0x1e3a1e6ecea2f326,\n            },\n            u288 {\n                limb0: 0xfd92eb013caf532acaeb1353,\n                limb1: 0x343f3adec30039d8e521932a,\n                limb2: 0x2e539c88529ffcac,\n            },\n            u288 {\n                limb0: 0xd386bf875be26f9df6d48bd8,\n                limb1: 0xb63f0bd1cdc223e9d8417262,\n                limb2: 0x2b14841bc6b26d1b,\n            },\n            u288 {\n                limb0: 0x260288bdb6c3c1615d315058,\n                limb1: 0x2d1c58cd2009e97fe4ff62a0,\n                limb2: 0x850a0cc3be6cb02,\n            },\n            u288 {\n                limb0: 0x4eed9c68152dc32d62708d16,\n                limb1: 0x939102ad69fcc314aee1d539,\n                limb2: 0x13d4c22548844741,\n            },\n            u288 {\n                limb0: 0x7c7d5146604601417eb17335,\n                limb1: 0xb1da8f9a38cb13c90227f90c,\n                limb2: 0xc3c49f892eda484,\n            },\n            u288 {\n                limb0: 0x47563ec73200475051175427,\n                limb1: 0xd47f031d1731c23e567c39d8,\n                limb2: 0x26621e3ef622f8d8,\n            },\n            u288 {\n                limb0: 0x37695782b7c1a487cf5db646,\n                limb1: 0x96c9c3e4b403f60f20bd35ef,\n                limb2: 0x59308e19c985156,\n            },\n            u288 {\n                limb0: 0x4034b4dd6e266aaea0b0cad3,\n                limb1: 0x96cf0e54eed6229cb778111,\n                limb2: 0x6c53c2d4717a539,\n            },\n            u288 {\n                limb0: 0x291b550caf9cfc5e80c92e36,\n                limb1: 0xe4664957bc677af793349b1f,\n                limb2: 0x1dfd5ca9e7ea62c8,\n            },\n            u288 {\n                limb0: 0xd9ce00efde6e96989b41f7c0,\n                limb1: 0x2fa252909400cac06931a877,\n                limb2: 0x52e63695c1c39ff,\n            },\n            u288 {\n                limb0: 0x12c5a340607a0e5f8b40c8b9,\n                limb1: 0x7230484474d5a864caa2e57f,\n                limb2: 0x1808d958a8b06380,\n            },\n            u288 {\n                limb0: 0x20da3e69864fd0cae69fd25f,\n                limb1: 0x46d475005b5841a7f23bad17,\n                limb2: 0x6fc94164be62f34,\n            },\n            u288 {\n                limb0: 0x85790e9faab46ba4b144da52,\n                limb1: 0x846cd87ae5c551a22c8d32d0,\n                limb2: 0x1645e1cb9e8c42c4,\n            },\n            u288 {\n                limb0: 0x3aa39d1e1104cf52ed75ad61,\n                limb1: 0x31a16fe525ae71a10e12ad9a,\n                limb2: 0x13140bdcf11e2680,\n            },\n            u288 {\n                limb0: 0x6a76ae6a62ad31c32aa42b00,\n                limb1: 0x65bbab5b583d0edd1e76c96c,\n                limb2: 0x196a582a7c4ed738,\n            },\n            u288 {\n                limb0: 0x4274108f40f8b99cfc50a637,\n                limb1: 0x5c2ad00e64005d86e3db656f,\n                limb2: 0x27a66a769dde31fe,\n            },\n            u288 {\n                limb0: 0xb703b0977c5b4a4587bcbc73,\n                limb1: 0x5304a3a24713a77fc5d4523f,\n                limb2: 0x1f6edb8971bf1a02,\n            },\n            u288 {\n                limb0: 0xa4e49d165dea352da5e91073,\n                limb1: 0x33d7a43c7b5d2f064f50cb34,\n                limb2: 0x10f2b641213ce9b8,\n            },\n            u288 {\n                limb0: 0x7667894a30b5a1599017cafd,\n                limb1: 0xc43504bdca87afbd1f1bf3e2,\n                limb2: 0x26136292049cff88,\n            },\n            u288 {\n                limb0: 0xa5f6fe6950f80eea81ba60aa,\n                limb1: 0xc496c6371972a373fd4935fc,\n                limb2: 0x24d25939fb490f67,\n            },\n            u288 {\n                limb0: 0x6e51f17f9da9dc4e91c0211f,\n                limb1: 0x29246cb4860c854c43456d7,\n                limb2: 0x25cc502d181db1ac,\n            },\n            u288 {\n                limb0: 0xbb3572277d9a318ee7d1485d,\n                limb1: 0x63539d2a5d7de813a12b1557,\n                limb2: 0x196cd15fd6191f83,\n            },\n            u288 {\n                limb0: 0xc289a092df7b9922387772b2,\n                limb1: 0xf6db28b743850da2cff75ad4,\n                limb2: 0x197832651a6680e2,\n            },\n            u288 {\n                limb0: 0x33fb1942bbbc35f8d89947f8,\n                limb1: 0xdf420e4a445363547145af3,\n                limb2: 0x39c2dfef594fc2a,\n            },\n            u288 {\n                limb0: 0x9edb6834a304836837d7df06,\n                limb1: 0xb957af2167687663613975ba,\n                limb2: 0x26813386c6ae53dd,\n            },\n            u288 {\n                limb0: 0x67e42cccf219e667b8042023,\n                limb1: 0x64c429eda86c60cf63c2345a,\n                limb2: 0x2954387696ce9e73,\n            },\n            u288 {\n                limb0: 0x85e6ec46b51a680fc875dfdf,\n                limb1: 0x335ec08a773887841ec1d38d,\n                limb2: 0x5e8dcf603f60cc1,\n            },\n            u288 {\n                limb0: 0x6a645fdcb10d2601d9afb0bc,\n                limb1: 0xd7f90625ab78b1cfd37959ea,\n                limb2: 0xb6249433c6b5d2,\n            },\n            u288 {\n                limb0: 0x324db7a2be658d2ff7b7b813,\n                limb1: 0xb16cedb961ccc959cc0e8abd,\n                limb2: 0x23b29f7b86e3b291,\n            },\n            u288 {\n                limb0: 0xd680b7ddd933df47745d329d,\n                limb1: 0x1a69d60c9611b610294540e2,\n                limb2: 0x70e0c0c145bd457,\n            },\n            u288 {\n                limb0: 0x75fe1ca84d50716b581193ac,\n                limb1: 0x53666a7cc64971c7cfd40fb,\n                limb2: 0x1bc99d66e8920376,\n            },\n            u288 {\n                limb0: 0x129a6fa8aced9e86a95cda1d,\n                limb1: 0x56c723353e4b5810f0fe54a7,\n                limb2: 0x2e7ddf704f34aba8,\n            },\n            u288 {\n                limb0: 0xc4f5028aeb5fec91cffdcadc,\n                limb1: 0x75c5fc2c5567dcca1609e150,\n                limb2: 0x1ccb00903261b963,\n            },\n            u288 {\n                limb0: 0xa5b5e438511b9249c7752e1e,\n                limb1: 0xe9b1442620cacd46ec2b1782,\n                limb2: 0x25660cb0865db165,\n            },\n            u288 {\n                limb0: 0x21e80b75d90f4c0f0f0f8fcd,\n                limb1: 0x75ff38de274801350e168f13,\n                limb2: 0xe864649052a78c9,\n            },\n            u288 {\n                limb0: 0x9fbd53d1139051c58a503ee8,\n                limb1: 0x2e171cd994c025cadf34f74c,\n                limb2: 0x4f2f935b3244403,\n            },\n            u288 {\n                limb0: 0x3c2f06c18915794941e07541,\n                limb1: 0x1600fd9f682e0ff99a15ea0d,\n                limb2: 0x2b58b6bc9b85f0c1,\n            },\n            u288 {\n                limb0: 0x4e5fe68d9ba5773e7771b872,\n                limb1: 0x7936589153302c6c592d395b,\n                limb2: 0x219e2cee8031beeb,\n            },\n            u288 {\n                limb0: 0xccc79196e9ef9aa525f266e4,\n                limb1: 0x3e1ae17dac5192f16e62f66a,\n                limb2: 0x3a22caf84670270,\n            },\n            u288 {\n                limb0: 0xecded52f9fafd2633b1ad2c7,\n                limb1: 0x98959a6c3d5399fde2d07d11,\n                limb2: 0x290eb87cfd056bb7,\n            },\n            u288 {\n                limb0: 0x2ca6dbf8cec521166c1e97a9,\n                limb1: 0x2e2b858c4306e88ca2e8ff59,\n                limb2: 0x227a49d0bd01b2f4,\n            },\n            u288 {\n                limb0: 0x9ec2575cc0b5fe4256e8b852,\n                limb1: 0x8deb570e05656ac1107314f7,\n                limb2: 0xb2ae1edc8dc724b,\n            },\n            u288 {\n                limb0: 0xc5c4103c9ddcf67f12831332,\n                limb1: 0x20a744564004311579d6d043,\n                limb2: 0xa79c37f3a01eae1,\n            },\n            u288 {\n                limb0: 0xfe34d0e72860ca2604b579de,\n                limb1: 0x788273ec407801dec428be1e,\n                limb2: 0x2586374a9a097166,\n            },\n            u288 {\n                limb0: 0xb0fb767fc04377fe20f9dcc,\n                limb1: 0x1ce9876fcd691843205d64b7,\n                limb2: 0x44ae36eb57cd277,\n            },\n            u288 {\n                limb0: 0x5b74bcd56a4b675933eefc3e,\n                limb1: 0x7e0a410a95c66196da409a3e,\n                limb2: 0x20e165eace83395c,\n            },\n            u288 {\n                limb0: 0xc36a1f1000f2286946c1bfad,\n                limb1: 0x2114fb0ccbaec5b7d65ed6bd,\n                limb2: 0x27b6db404330f016,\n            },\n            u288 {\n                limb0: 0xc0d451163d2863540f542959,\n                limb1: 0x2181f17c75d24c8ba146892a,\n                limb2: 0x2966e3ed60cf8a57,\n            },\n            u288 {\n                limb0: 0x4b284bb776e51123d8f268e9,\n                limb1: 0x3d372bde57b729c62f279e1b,\n                limb2: 0xc63be6a864a95e8,\n            },\n            u288 {\n                limb0: 0xaeaf6afe5e6bb3e2122e2257,\n                limb1: 0x28c887774a654d9c8a17d72e,\n                limb2: 0x820b5fcbf4d2cf3,\n            },\n            u288 {\n                limb0: 0xa44798fb7ad9897db6711b2b,\n                limb1: 0x66c91a4805eced1102bad669,\n                limb2: 0x272054a71e48b500,\n            },\n            u288 {\n                limb0: 0x1d973d5b4a27f95cdc6f0ab5,\n                limb1: 0x3aefb7b9886f26a604a19e82,\n                limb2: 0x17f1944ba3e1175,\n            },\n            u288 {\n                limb0: 0x4d248b009602ad73ee032a7f,\n                limb1: 0x2a90d813247450c741d6daba,\n                limb2: 0x2049c006c8c998c1,\n            },\n            u288 {\n                limb0: 0xb80af382f7eb90ee32391c3a,\n                limb1: 0x9ec80567300207085edbe9ba,\n                limb2: 0x13ca657b7e06d07c,\n            },\n            u288 {\n                limb0: 0xf4c86461890d84e08ed7c16c,\n                limb1: 0x116146b9f61005ec013c4d43,\n                limb2: 0x8e8d54d9ed83293,\n            },\n            u288 {\n                limb0: 0x8318657d34c008025954ba86,\n                limb1: 0x940231cb0f486be6f4ac6171,\n                limb2: 0x1b7ea288cf13a06b,\n            },\n            u288 {\n                limb0: 0xc3d4eed63203aab4c38a3111,\n                limb1: 0xfad79defa990cea7d5c200ea,\n                limb2: 0x2210bff25e88bd73,\n            },\n            u288 {\n                limb0: 0x6fda628410202b0b14f337f7,\n                limb1: 0x599c8a114cb4da42b053219e,\n                limb2: 0x1f017f8c17f0c3dc,\n            },\n            u288 {\n                limb0: 0x5501887efd29362d9e6ca6c1,\n                limb1: 0xe327a683c786b87a42361856,\n                limb2: 0x1a6bd509d9992232,\n            },\n            u288 {\n                limb0: 0xcc19dab54c52fae73dffc82f,\n                limb1: 0x679d43b5253684a8217099b0,\n                limb2: 0x27494786e1544f80,\n            },\n            u288 {\n                limb0: 0x7a7b264924956990fa05c109,\n                limb1: 0xb882e52469497eef57a26247,\n                limb2: 0x2712898ef350edd,\n            },\n            u288 {\n                limb0: 0x9315f3b371bf19053455aef0,\n                limb1: 0x63da3f4b148dce3e61b1a2e2,\n                limb2: 0x26ef8ae2ac1f477a,\n            },\n            u288 {\n                limb0: 0xfbd5da98cff0c5f05048d31e,\n                limb1: 0x9aa05823bfdbea9169923efa,\n                limb2: 0x1e00960f3554662c,\n            },\n            u288 {\n                limb0: 0xe0a9648905d32ace43e00780,\n                limb1: 0x588fd7f9e24dcf80a5522401,\n                limb2: 0xa5a092184d66473,\n            },\n            u288 {\n                limb0: 0x84d9a3c6deb2713364a064b0,\n                limb1: 0xb610b760f1001653c933a024,\n                limb2: 0x1968e1893eb30c9b,\n            },\n            u288 {\n                limb0: 0xac7bf4cbaedf593cdb277057,\n                limb1: 0x9336a854a2df58513e9edf63,\n                limb2: 0xc81898868b07b79,\n            },\n            u288 {\n                limb0: 0xeecbadccd1d275e446ac3a33,\n                limb1: 0x506cd52599c77350f42f16ee,\n                limb2: 0x63e2586f6f6376d,\n            },\n            u288 {\n                limb0: 0xc18861e743b6b4a487b26f34,\n                limb1: 0x4cddf18c09efe58f28311709,\n                limb2: 0x27b189983e38077c,\n            },\n            u288 {\n                limb0: 0xa5cc95d266d8f435df7981c4,\n                limb1: 0x9de157b88197f4675a2e363a,\n                limb2: 0x2626992437d7f5bd,\n            },\n            u288 {\n                limb0: 0x5e069927eade8753b47fc485,\n                limb1: 0x13bd965d6aff06b1d31c4c8c,\n                limb2: 0x79e0d8769a2562e,\n            },\n            u288 {\n                limb0: 0x48cda8ef2853ed45f44fa16f,\n                limb1: 0x23859acb7880001c93ba3422,\n                limb2: 0x20d1e3a290b3743e,\n            },\n            u288 {\n                limb0: 0x6bc0f19069ecdd41c0ba5813,\n                limb1: 0xe26d07160218d9e6ac4c1c7,\n                limb2: 0xe500a5f059031bd,\n            },\n            u288 {\n                limb0: 0xacd2adc377d226f3c39b9bba,\n                limb1: 0x20f87518d8ab8ba203290541,\n                limb2: 0xf7d610d3297206a,\n            },\n            u288 {\n                limb0: 0x8aab358efa338335b31d0147,\n                limb1: 0x5f4e5a44da9ad6c4218dfd97,\n                limb2: 0x2f3f46e3829e99cb,\n            },\n            u288 {\n                limb0: 0xf49e59675e5c2652fc98844d,\n                limb1: 0xd4bdc00b82ea2265bbe602dd,\n                limb2: 0x30251b1b43b631d4,\n            },\n            u288 {\n                limb0: 0x53e92cc28af4d05059a215d7,\n                limb1: 0xec3f188236f6a503ed4de17b,\n                limb2: 0x21d1ac20cfce9e56,\n            },\n            u288 {\n                limb0: 0x40b7cc38ac8cba869c4afaa5,\n                limb1: 0x6a7d5059f4ccf26c9162c85c,\n                limb2: 0x9a20817bb9320b0,\n            },\n            u288 {\n                limb0: 0xec4e50920da4ab9fcd8e2b98,\n                limb1: 0xfa4314350e1a3bd41ad3375a,\n                limb2: 0x27f28542e7c4496,\n            },\n            u288 {\n                limb0: 0xc1838416f745382de4bf708,\n                limb1: 0x7d0cb6e1d7f2f300b1d371ba,\n                limb2: 0x22ef95e852a3eaf2,\n            },\n            u288 {\n                limb0: 0xca3ffa0e2c0bb3d1925994c8,\n                limb1: 0x621ce4f0702f6072f260282f,\n                limb2: 0x14426488bea03e8d,\n            },\n            u288 {\n                limb0: 0xf4e9eb97bcc3eff6268102a1,\n                limb1: 0x79bc7b771d048af610d0167a,\n                limb2: 0x229cc7e1937fb40d,\n            },\n            u288 {\n                limb0: 0xba9ce540f58ea008c3fa4ec3,\n                limb1: 0x5d9219cfc8d5ca6ef93f34d,\n                limb2: 0x2b1322f0eff448ec,\n            },\n            u288 {\n                limb0: 0x4cca24b0b778472065b78f26,\n                limb1: 0xf97924058d24e5673c16c4aa,\n                limb2: 0x185b829c05f1f99c,\n            },\n            u288 {\n                limb0: 0x3eee6f0043b04acd6bbf71db,\n                limb1: 0x7c8f4c1a93ae3ea5b9ca3414,\n                limb2: 0x1d71ed45dd37c55e,\n            },\n            u288 {\n                limb0: 0x9e1311913e9c2052a16dca48,\n                limb1: 0xcdcaa853fb8f8267ebdfc69e,\n                limb2: 0x2abcb6f497eeaf02,\n            },\n            u288 {\n                limb0: 0x79c438d659c0c62ac1fec12,\n                limb1: 0x775044aec0471597922e3111,\n                limb2: 0x6214986f36bba06,\n            },\n        ],\n        z: 0x690450caee78b3590fe0ce78a9df9ca1987c494b5ca8e9629f81245f1099f16,\n    };\n    let res = multi_pairing_check_bn254_3P_2F_with_extra_miller_loop_result(\n        pair0, pair1, pair2, precomputed_miller_loop_result, lines, hint,\n    );\n    assert!(res.is_ok());\n}\n\n\n#[test]\nfn test_BLS12_381_mpcheck_2P_2F() {\n    let pair0: G1G2Pair = G1G2Pair {\n        p: G1Point {\n            x: u384 {\n                limb0: 0xfe174bb39be8658ef83c8c2d,\n                limb1: 0xdb24ddec0e0c3b63d82efa81,\n                limb2: 0xe360a80121d5ef96fd687003,\n                limb3: 0x59d2a79bda5f8a941d4db9,\n            },\n            y: u384 {\n                limb0: 0x7f68344f543e52fe891285a9,\n                limb1: 0x6f6992be16bc35f88c471acf,\n                limb2: 0xcebb5ee96e40a033f5d3b798,\n                limb3: 0x2df47e8cdf189985d5085bd,\n            },\n        },\n        q: G2Point {\n            x0: u384 {\n                limb0: 0xa805bbefd48056c8c121bdb8,\n                limb1: 0xb4510b647ae3d1770bac0326,\n                limb2: 0x2dc51051c6e47ad4fa403b02,\n                limb3: 0x24aa2b2f08f0a9126080527,\n            },\n            x1: u384 {\n                limb0: 0x13945d57e5ac7d055d042b7e,\n                limb1: 0xb5da61bbdc7f5049334cf112,\n                limb2: 0x88274f65596bd0d09920b61a,\n                limb3: 0x13e02b6052719f607dacd3a0,\n            },\n            y0: u384 {\n                limb0: 0x3baca289e193548608b82801,\n                limb1: 0x6d429a695160d12c923ac9cc,\n                limb2: 0xda2e351aadfd9baa8cbdd3a7,\n                limb3: 0xce5d527727d6e118cc9cdc6,\n            },\n            y1: u384 {\n                limb0: 0x5cec1da1aaa9075ff05f79be,\n                limb1: 0x267492ab572e99ab3f370d27,\n                limb2: 0x2bc28b99cb3e287e85a763af,\n                limb3: 0x606c4a02ea734cc32acd2b0,\n            },\n        },\n    };\n    let pair1: G1G2Pair = G1G2Pair {\n        p: G1Point {\n            x: u384 {\n                limb0: 0xde4f62a6588c9401ffefbd3,\n                limb1: 0x9bb5f797ac6d3395b71420b5,\n                limb2: 0xdc39e973aaf31de52219df08,\n                limb3: 0x105dcc4dce3960447d21d3c1,\n            },\n            y: u384 {\n                limb0: 0xaefd0d854043fd325dd3c34f,\n                limb1: 0x9b63c98d9a7845c52e1e2b0f,\n                limb2: 0x9db0be660d847ccc58358f3f,\n                limb3: 0x17cb6c41f0c4e1a7394ab62a,\n            },\n        },\n        q: G2Point {\n            x0: u384 {\n                limb0: 0x3b3d3c305a70960906e6cb09,\n                limb1: 0x40e5bf3ff02d81e98b75703a,\n                limb2: 0x665a5fc010510bd690ddd7b5,\n                limb3: 0x82dc9154807866eb0f36ccb,\n            },\n            x1: u384 {\n                limb0: 0xe6709deb0dcf81d4285e5e60,\n                limb1: 0xb4dcf956002c4efb974ffcee,\n                limb2: 0x4a6ceebe6375a83dd242851b,\n                limb3: 0xdd18d077ad5bd58dabb18d8,\n            },\n            y0: u384 {\n                limb0: 0x61535fe1a90bae7e6692f9b0,\n                limb1: 0xc91aa58105d3a281b2e84ddb,\n                limb2: 0x197d3446652372ce5ef50e93,\n                limb3: 0x4a468eb9e206b9833d8e8e2,\n            },\n            y1: u384 {\n                limb0: 0x27115c334e82ed4be8da6c10,\n                limb1: 0x194fa3bf769a2e5a52535277,\n                limb2: 0x8be8992de81f47ae3341c590,\n                limb3: 0x198fd0ab6249082bf7007d7e,\n            },\n        },\n    };\n    let lines = array![\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x36701a5831c9fb39250e2ea9,\n                limb1: 0x26ad0ec05ad6440f1df034cf,\n                limb2: 0x67cd27cf7598a85f81c23cd9,\n                limb3: 0x15a76ee3d8d1c3451005d560,\n            },\n            r0a1: u384 {\n                limb0: 0x9009367bbf6e6aa19488df66,\n                limb1: 0xce5cd2ccda4704dc0e4b92b6,\n                limb2: 0xd7656829a6a71c42deb7dd,\n                limb3: 0x16d96e785c797fb5d6afcb14,\n            },\n            r1a0: u384 {\n                limb0: 0x9d68b0bdf431a2f53189c109,\n                limb1: 0x70e39167384e44fdaf716fa4,\n                limb2: 0x3768099390a3f9d581d88280,\n                limb3: 0x4c208bdb300097927393e96,\n            },\n            r1a1: u384 {\n                limb0: 0x68ab4b88cf058f147ba2cda9,\n                limb1: 0xce3b4d4da03cbdac75933b54,\n                limb2: 0x1be2f7e6eaa0f1474cb64c53,\n                limb3: 0x546ca700477f9c2f9def969,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x96e0f84058018a4538d64e8b,\n                limb1: 0xdb7b84172cb1e68ddd09eb12,\n                limb2: 0xcf3aaa45c2b370e810ea9361,\n                limb3: 0x14b92565b748c30f253912c6,\n            },\n            r0a1: u384 {\n                limb0: 0x9cdcddf4728a38086aebcd7,\n                limb1: 0x7b8d9115b96656327dd79780,\n                limb2: 0xbf914addbdcbe307142bf7cc,\n                limb3: 0x3c50d0829bdc305ff694cc9,\n            },\n            r1a0: u384 {\n                limb0: 0xcc0dbe864e35231bdec2ef76,\n                limb1: 0x4efa339ef551d8f751da95ba,\n                limb2: 0xfde5910a13d5c428549ed3f5,\n                limb3: 0x105e4803f5b8472a138e00b,\n            },\n            r1a1: u384 {\n                limb0: 0x584879d210eb30bfd6518cf2,\n                limb1: 0xa7c4af01b40d0e68243b050c,\n                limb2: 0xade596dd94a41e4aedec2196,\n                limb3: 0x162a46f819eba8e3b9d215f9,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3717dfec242e39e2ff1f466e,\n                limb1: 0x2e1a47c8b52d2a155331b3bf,\n                limb2: 0xb9705c11a0dc1b7a21290360,\n                limb3: 0x186349066cd6c743642100bc,\n            },\n            r0a1: u384 {\n                limb0: 0xc653dbae90aec138bdc66689,\n                limb1: 0x84a0e18292766501cc981050,\n                limb2: 0xcb8cbe9f0dad8baba490c814,\n                limb3: 0x49af016994f800024ad3138,\n            },\n            r1a0: u384 {\n                limb0: 0xaae746564160600e87f79910,\n                limb1: 0x9b0e53f36f1c737506ce80ce,\n                limb2: 0xc88af441fe63a2b5746950e6,\n                limb3: 0x9e6e8335a28c0593fb7797f,\n            },\n            r1a1: u384 {\n                limb0: 0x3353ff16d642750e655d9250,\n                limb1: 0x1c83cf0f79a4997f9f673aab,\n                limb2: 0x5ec8ef641f38e8160f0fafc8,\n                limb3: 0xd6e97ce3437dbe7066bb16c,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xebdfba548549869254397482,\n                limb1: 0x59fe075d9bedf0d74abf57be,\n                limb2: 0xabab1d37873d3366c37fca47,\n                limb3: 0x1538a52f8fae05fcab86cb76,\n            },\n            r0a1: u384 {\n                limb0: 0x1d682b553c5f64f0dade7dbc,\n                limb1: 0x3ab75e8798604af41cea2a02,\n                limb2: 0xe905b5289633293089e66f7d,\n                limb3: 0x1952802636ce6e28657b087,\n            },\n            r1a0: u384 {\n                limb0: 0x4634dee1af84530ccf6b310e,\n                limb1: 0x2648d262401e3b709787473a,\n                limb2: 0x17a30eb731c1037d19aa1fdd,\n                limb3: 0x2d6c23a0ffe044c163492a7,\n            },\n            r1a1: u384 {\n                limb0: 0x9c68a627823ca443a9e945b,\n                limb1: 0xb3c2ff91b20c36d112c61699,\n                limb2: 0xc263985d3095da2f3db9773e,\n                limb3: 0xa1e844c3f1cb15b6b809857,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6a72f085ee4e78bd4c2aef8e,\n                limb1: 0xdec05cffe4a869aed2a64ee8,\n                limb2: 0xd41aa908b1a833b94e768d2,\n                limb3: 0x56ceab5d5d994dee0ca07fc,\n            },\n            r0a1: u384 {\n                limb0: 0xd23aad6cd3e84e398a4e7bc8,\n                limb1: 0xb343a6878db6ec20bcac1275,\n                limb2: 0x3111e14b674a67295a242cf3,\n                limb3: 0x39b596a976f556e5ea4016a,\n            },\n            r1a0: u384 {\n                limb0: 0x19fcdcac7feb1f0edbefdbf8,\n                limb1: 0x71bc60f1a68459eb52df6a92,\n                limb2: 0x2827dbba9d5d8516fb557dfb,\n                limb3: 0x4786cc02b147d13e701c1f5,\n            },\n            r1a1: u384 {\n                limb0: 0xcb7555c0db86510eb99cfadd,\n                limb1: 0x43387d10f8329296e43e6610,\n                limb2: 0xbf6789475132950c583823a,\n                limb3: 0x145f508c63c10d270e027b2b,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x61e12a1921e9e0192225eb47,\n                limb1: 0xe7959ccf3ab7897b63eaea0a,\n                limb2: 0x44172872757e4112552dfda0,\n                limb3: 0x140a9f8fd2d77ee9ce9eda9e,\n            },\n            r0a1: u384 {\n                limb0: 0xc4bd827c5fcc80aeefab436d,\n                limb1: 0xed5133aed1007276d5defd61,\n                limb2: 0xeae0d97e880c76210872600,\n                limb3: 0x12f12f5d73e707622f58355,\n            },\n            r1a0: u384 {\n                limb0: 0x641d998236970e3d020b53af,\n                limb1: 0xe7cbadbae704bf8e96b8a6b4,\n                limb2: 0x2b9f4df44bf2e79afe0c94f2,\n                limb3: 0x955b0249e73e276cc78deb7,\n            },\n            r1a1: u384 {\n                limb0: 0xd8ed50e5cdfbf761b34675d9,\n                limb1: 0xd1070d143ecc709daf022bbd,\n                limb2: 0x5df7054bb133a14672778550,\n                limb3: 0x17b953a66b43816b30bac24,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7bd212f8f60967471e995a8e,\n                limb1: 0xec76fa31d0fd358f36ee756e,\n                limb2: 0xa63e06c40964532a724817c3,\n                limb3: 0xd860767952ed2b694b64eea,\n            },\n            r0a1: u384 {\n                limb0: 0xd18f8b1de21e64c50d3c6fc2,\n                limb1: 0x456cec057d45521c48d0b547,\n                limb2: 0x23fb8276293fac77c9a38c1b,\n                limb3: 0x1469d7cf50d58855fa523aa8,\n            },\n            r1a0: u384 {\n                limb0: 0x52f1d22ea6bfc23435bf7e3b,\n                limb1: 0x3e2d5122467bf39f2573a57b,\n                limb2: 0x378db9e77f53b5b1e38981da,\n                limb3: 0x1015deb442db265529d8948,\n            },\n            r1a1: u384 {\n                limb0: 0x73c44618fb7917b2596bd460,\n                limb1: 0x598ee13313073cf3232e1b37,\n                limb2: 0xbd63e58ae4aa477bcd459ef2,\n                limb3: 0x272bfde06aa8302ab8c70d6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x84d7880d9c5ad98d07f1b961,\n                limb1: 0xd5be4b6e58ad745353113073,\n                limb2: 0x592ecc7534e44983a06d755c,\n                limb3: 0x15d60a0d6d8a2e4543194737,\n            },\n            r0a1: u384 {\n                limb0: 0x9ba63990e4f1ea4875173006,\n                limb1: 0xf84fa98d5f3742b3c571f427,\n                limb2: 0xdd28189a4a2e3a70f78a170e,\n                limb3: 0x1ad5bc82425c66f655a75db,\n            },\n            r1a0: u384 {\n                limb0: 0x49306522c22ca321950bf155,\n                limb1: 0x369a747f27aa6472ebc5d290,\n                limb2: 0x20d8977cbe5acf112574c70a,\n                limb3: 0xcdc103da1aac9ec5f855b64,\n            },\n            r1a1: u384 {\n                limb0: 0x74517cbd651af3940075c057,\n                limb1: 0x94d3802d81c93d69eb13518b,\n                limb2: 0x76411c393dd03e5381661629,\n                limb3: 0x16e57b05faef24ef64868a07,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xaa72fbca0fc809a3c04cfe63,\n                limb1: 0xb197b948b9fb7b1d17db7811,\n                limb2: 0x912c914d3a6ff39a540a4f3d,\n                limb3: 0x16cacbdaa9c89addb1ab2cbe,\n            },\n            r0a1: u384 {\n                limb0: 0xbc48a5607d4379fef56b2969,\n                limb1: 0xc1f23a19f0081d7a3e19795d,\n                limb2: 0xd3b68107f121763ac21a3013,\n                limb3: 0x105753740850ad267b13b914,\n            },\n            r1a0: u384 {\n                limb0: 0x9922c12ecdd8f9f562a9ffbf,\n                limb1: 0xd3ddfb6bca4e7fcf1de87fe4,\n                limb2: 0x43cafb5ca79d345cd7fb414f,\n                limb3: 0xcf76a75d055e5103c1f3bb4,\n            },\n            r1a1: u384 {\n                limb0: 0xfe0eed2060bf837fabeb633c,\n                limb1: 0x7647ff2029a177beb2026c82,\n                limb2: 0x6c89e5be509cdaa5d0724f48,\n                limb3: 0x18e2495d0e738bcb51e26445,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xaf7eb92e30bb53c95dbc4140,\n                limb1: 0x9792c2287a214b5e4a26edb0,\n                limb2: 0x9e2e1f53797f04ffeabc4a20,\n                limb3: 0x11ffc63e88b938e0364be5e7,\n            },\n            r0a1: u384 {\n                limb0: 0x23f6838c52c8c103f492d019,\n                limb1: 0xc28ff9b5147ad2c6e80ba89,\n                limb2: 0x54862dd590b2cefb84f4884e,\n                limb3: 0x137f181e7bc2d6e0858337e0,\n            },\n            r1a0: u384 {\n                limb0: 0xf25f4290fc34cdb084e88912,\n                limb1: 0xb45c1d0b4bb37399c6f2f06f,\n                limb2: 0x1c520b9c1f9a27c6dc5ce1f2,\n                limb3: 0x8f5b2f168533ac53479939d,\n            },\n            r1a1: u384 {\n                limb0: 0x90f6fed4ce70be068a771f84,\n                limb1: 0x6c083f0007d7b530d7bb7762,\n                limb2: 0x621955ba256f0878ab3f71cf,\n                limb3: 0x147b25e183343ffa8070b1c0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xb5abe92a46d0ff04a4205803,\n                limb1: 0xdb760c98b7aad959e5dfc28d,\n                limb2: 0xbea9b6e4adf41fa1060713ee,\n                limb3: 0x75707a467e7543c28370330,\n            },\n            r0a1: u384 {\n                limb0: 0x8b0715d2f6a16be8d5828197,\n                limb1: 0x598a8a6da7ed2bcc091f594d,\n                limb2: 0x18cfc9c1ee8960c06ff2c240,\n                limb3: 0x14061839f139644bb20e8647,\n            },\n            r1a0: u384 {\n                limb0: 0xd529f0561fff46258f565dec,\n                limb1: 0x80402f61ae7ce96272aff23b,\n                limb2: 0x883367465c3a4bde2507377a,\n                limb3: 0x14fc234296369891318c6245,\n            },\n            r1a1: u384 {\n                limb0: 0x9fdc0242b4d20c44b72c8d49,\n                limb1: 0x37e047238dd417acab9ea0c2,\n                limb2: 0xc424c8845919fe27ac23e9,\n                limb3: 0x151e87d65d95c3b1cc9b1de6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6d3e75c7266836a5f88da38f,\n                limb1: 0x9f0dcd126bc3eb7a57863065,\n                limb2: 0x2dd839b48eaaf3738b6378c3,\n                limb3: 0xaaa2a6bcd21b87d1c17c1d7,\n            },\n            r0a1: u384 {\n                limb0: 0xd751d74691ccfbf8a2e44893,\n                limb1: 0x39dc71f7d866971a5b34a793,\n                limb2: 0x61f4c7b07c463740fdfa24ca,\n                limb3: 0x7aaec7413e01006276f927b,\n            },\n            r1a0: u384 {\n                limb0: 0xc02a7ffd3ac8b07a8351a74,\n                limb1: 0x3e5cf07a7c56c9a5eb07e2e4,\n                limb2: 0x3e8a62aa55827a8825e3a32b,\n                limb3: 0x17607fbb8f27884431eb0d0e,\n            },\n            r1a1: u384 {\n                limb0: 0x67fe51eac141e68a4dc9a759,\n                limb1: 0xa4ffe5ceccd1cdfd737bd38,\n                limb2: 0x3efc4588564baa38aef1502e,\n                limb3: 0x19a6b0517bf3ba0a12058062,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x9bd8fa7a943e0e3a924e7492,\n                limb1: 0xad948685eedfe9d3ac7315ff,\n                limb2: 0x8148910d6004895792caa88d,\n                limb3: 0x1deabfaeb3374b50119ecb9,\n            },\n            r0a1: u384 {\n                limb0: 0xfedf28954ae85d6e9f58c709,\n                limb1: 0x7c01f5d8a4b9368fc9cbb8eb,\n                limb2: 0xbe98bf07cbd25fe6f4ac154f,\n                limb3: 0x7c9b05e8adef4de506459f7,\n            },\n            r1a0: u384 {\n                limb0: 0x71812aeba8c33457117bfb0,\n                limb1: 0xaf1a11b5a7571775ec17c1,\n                limb2: 0x721e08542ff85e7037b2c02f,\n                limb3: 0x991d1db86230da71efb4475,\n            },\n            r1a1: u384 {\n                limb0: 0x4122fa433f37c5e6888de07c,\n                limb1: 0x144d977681671d8cd0854c34,\n                limb2: 0x93981673fae1df08d18161aa,\n                limb3: 0x145eae6a49c250f2435d1ec8,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x468d577fdfbdbc46e423962d,\n                limb1: 0x5bee3b6cf7059efb0069632a,\n                limb2: 0xc1effa8ed920dfc235de8974,\n                limb3: 0x13d2fffc28b953d3ca80ffa1,\n            },\n            r0a1: u384 {\n                limb0: 0xdefb34cc5a85aabacaaacdd9,\n                limb1: 0xfac8915a4c4373e6a38752dd,\n                limb2: 0xbe1dce6fa4eaa80db5298aef,\n                limb3: 0xbb539e692a1a2274f4304f4,\n            },\n            r1a0: u384 {\n                limb0: 0x615c9153f8460e09de46571d,\n                limb1: 0x4f55bef9c25736ce73e4eec3,\n                limb2: 0xbfe37903c95e022709a17263,\n                limb3: 0x1d523a97a76bc409ae24135,\n            },\n            r1a1: u384 {\n                limb0: 0xeaec0a3f08b499ac07b95ea8,\n                limb1: 0xae9a839b303953da2d3fe15c,\n                limb2: 0x97307b6e3e3abcb8ecd98686,\n                limb3: 0x77101a8f07adfc3ad5c763a,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xa8af53d78f2fa38c6e213a84,\n                limb1: 0xc908fd45d36e147e8a3449ea,\n                limb2: 0x9224181cd573d3836b141129,\n                limb3: 0x140090a04158ea562a90ed5,\n            },\n            r0a1: u384 {\n                limb0: 0x95e6526648a96a5a43488327,\n                limb1: 0x5f5e4c24465495ee0dcb3055,\n                limb2: 0x49f0985811804cda4142ca8c,\n                limb3: 0x9619ac570f151f7baaa7ae,\n            },\n            r1a0: u384 {\n                limb0: 0xc2ef8275baa5e3b836a847d7,\n                limb1: 0x9835333ce4136fda57f9c31e,\n                limb2: 0x8392d675aba184475007124a,\n                limb3: 0x10f9170d8f4e3130ef5a354e,\n            },\n            r1a1: u384 {\n                limb0: 0x4db131e9b2a50df6253da27e,\n                limb1: 0x3210503344192c1a1d83234c,\n                limb2: 0xb84a1ae100e6602d2a3eaa1d,\n                limb3: 0x146401ace26dcc76ec7cb805,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x9a29bb6c54b018b4ed75888b,\n                limb1: 0x1437b2d93b1ecc564157059c,\n                limb2: 0xf0add7baf8cfe1ddc30f0754,\n                limb3: 0x86553ec1cc3cc6a38436fbb,\n            },\n            r0a1: u384 {\n                limb0: 0x516be99929795e7ae5112f30,\n                limb1: 0xb182ffdb6110024a0018e3e7,\n                limb2: 0x8e468869d60b7ae7fc6004bd,\n                limb3: 0x4916e8c2d5820861e32013a,\n            },\n            r1a0: u384 {\n                limb0: 0x78554bdd8568c0e9686a510e,\n                limb1: 0x97bc0c8b458fe7d5dcf2264c,\n                limb2: 0xfcc4906709b359120a9e0158,\n                limb3: 0x193f60f20d1cc7f2b1bf553c,\n            },\n            r1a1: u384 {\n                limb0: 0x2713699297ab49a2d9bf4f6d,\n                limb1: 0xb396d1c4590471bf032b959c,\n                limb2: 0x350113633de03c6e721c7597,\n                limb3: 0x79ef6c98d71e95eb13fae02,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4e82e124ce1338d2ca7ee6db,\n                limb1: 0xbf32616d15749f858b667a29,\n                limb2: 0x3b302144f036cf4dc3b92682,\n                limb3: 0xcc6fe5a628f46c5d62c7a31,\n            },\n            r0a1: u384 {\n                limb0: 0xecb00dceaf06cc77baed0784,\n                limb1: 0x906e4821956579932758a3ef,\n                limb2: 0x5e9a74901fc7ebfbf3ef3ea0,\n                limb3: 0xf2962ecb7b0ebb3db941738,\n            },\n            r1a0: u384 {\n                limb0: 0x6297c3b80090ce9f80979905,\n                limb1: 0xfcbfa064302ba8944f913e4e,\n                limb2: 0x37d76df0505819fe8a947b55,\n                limb3: 0x197300faabd06b7cc1d54ff1,\n            },\n            r1a1: u384 {\n                limb0: 0xa7da1d558e1c2417133fcd88,\n                limb1: 0x48a63ff7ea1a7d1ad817b2ab,\n                limb2: 0x4766bb1efe7584e02416845d,\n                limb3: 0xadbeeec2cf952ed27e6a3d3,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xeafeff598e54b30cb6c1251a,\n                limb1: 0xafc0b2ad47726720fb51bdf8,\n                limb2: 0x7c63073beb0d24a81f6784e7,\n                limb3: 0x417c39c09d75dbe141715ba,\n            },\n            r0a1: u384 {\n                limb0: 0x7bc206e25555dee3daa1ee4d,\n                limb1: 0x9c28ec5fa7bc8f485bb6cfba,\n                limb2: 0x530c402c723fa11f1f84b46b,\n                limb3: 0x104053ab3ea6fb21777f84fd,\n            },\n            r1a0: u384 {\n                limb0: 0xbe16b2bf7765b4bb12696340,\n                limb1: 0x5c585ec795eaf69ee156c464,\n                limb2: 0x494e9230ed370a9bc47be6e9,\n                limb3: 0x75ceaee051b984083fec3e3,\n            },\n            r1a1: u384 {\n                limb0: 0xec732bc23b7b6a5b6c0490e9,\n                limb1: 0x2108ecfe0e567019997043d,\n                limb2: 0xe7c1c8eaeed7a6be30a560b6,\n                limb3: 0xdc4b83fea429d673069ad66,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4396189ffbd89d01fe27fa5b,\n                limb1: 0xe81217db1696daa3753ccd84,\n                limb2: 0x55c6ad903c2a3e4b9f14a8da,\n                limb3: 0x15f5f0afe4eeb7545fb13eb0,\n            },\n            r0a1: u384 {\n                limb0: 0xd3da9931ffbf361f326b7282,\n                limb1: 0xc9d2464eda778b0051c1027e,\n                limb2: 0xb8f5f46e2bd5fc15d81b368a,\n                limb3: 0x1040f087e9a0b6633fa13692,\n            },\n            r1a0: u384 {\n                limb0: 0xf986f1a7ae6234649c858e8a,\n                limb1: 0x4644ba4e2b6b06ac11907477,\n                limb2: 0x95bcd96412c2b77c798589bf,\n                limb3: 0x122a0d20337a4865af008b55,\n            },\n            r1a1: u384 {\n                limb0: 0x201ad08d1e12f22740a2d61f,\n                limb1: 0x4ec7ca2abf73f04dd4d3c1cc,\n                limb2: 0xbe2da8c0b44af69f8c08bbe5,\n                limb3: 0x3bac9dd093b57980816b067,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6082c0eb907cf5276747f318,\n                limb1: 0xdfacc4aee13bf3da9397c201,\n                limb2: 0xcebd5d30c1b12b2267e81f02,\n                limb3: 0x160e8d207ecfa4ee319cf8dc,\n            },\n            r0a1: u384 {\n                limb0: 0x885a1a2e5b088d3b11726fd3,\n                limb1: 0xbcb3b4daf110df0f500a1339,\n                limb2: 0xe16ba85f2dd0f2272c0b6647,\n                limb3: 0x6822c6c8ea10aef46b89423,\n            },\n            r1a0: u384 {\n                limb0: 0x3730e4d5494e51774471ba91,\n                limb1: 0xf1af0b885a3b8f02eaf969f6,\n                limb2: 0x7ee91c1608eb59fffe1ae7fa,\n                limb3: 0x149fb1c9f23c4b2da52a5247,\n            },\n            r1a1: u384 {\n                limb0: 0x85d3ce78367e3de8ca2b82fa,\n                limb1: 0x11c52b8d92a1622e604c4ed9,\n                limb2: 0x9638c9f8c2f0becfe2f26e25,\n                limb3: 0xdf957915588e3d3a3b5b30a,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4527a34a70ec377ccd63a5b2,\n                limb1: 0x351c7771105a0a1096dd87f0,\n                limb2: 0x57630dce3b4db45cbad696a6,\n                limb3: 0xf10733fed03fc5b7ae27fc4,\n            },\n            r0a1: u384 {\n                limb0: 0x53a208df401e3d6bf657857c,\n                limb1: 0x306991a8af53fac94e1e9b52,\n                limb2: 0x324634590aee6093dd239d9,\n                limb3: 0x855b8b1eedbf578f7498f37,\n            },\n            r1a0: u384 {\n                limb0: 0x71e5471ff515d0d4982815b6,\n                limb1: 0x9a63281835ec15935519deca,\n                limb2: 0x17a64faa9e7e4ab574a3f785,\n                limb3: 0x134b4a48f53fff9361e1952c,\n            },\n            r1a1: u384 {\n                limb0: 0x56dc56f73bd268799b824fa3,\n                limb1: 0x4180514d6004cf446a366719,\n                limb2: 0x193a82567b226e738b11a0af,\n                limb3: 0x1498d7e7ad2a68346f7d2199,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd7496e71fc42ba4ca4a3e125,\n                limb1: 0x3045d9e3b7e4e521f2dec347,\n                limb2: 0x53d9d04eac9ca0b33af5f5dc,\n                limb3: 0x6208127dc6aaedad6a3682b,\n            },\n            r0a1: u384 {\n                limb0: 0x4567073497754e2d4414c821,\n                limb1: 0xb600e3160bc87f68920d2e38,\n                limb2: 0xa591b968314d40db6548d766,\n                limb3: 0x1922ebba883aa4ac7ccac6bc,\n            },\n            r1a0: u384 {\n                limb0: 0x74b133dfab8505c15b559a41,\n                limb1: 0x63786daabceed65d189742c5,\n                limb2: 0xdbecebda30efe3de4467f495,\n                limb3: 0x11998abbc2dcb0074bdcf880,\n            },\n            r1a1: u384 {\n                limb0: 0xe933be0b1bb7e7a435070362,\n                limb1: 0x107d55d6f69931a5d73cf90a,\n                limb2: 0x1cd139553284736dd7d96a0,\n                limb3: 0x11f10e3b6bb5601c6033673f,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6c92af226aa27e2cbe8fae21,\n                limb1: 0xbc299acce5e8da96b6b932d,\n                limb2: 0xec46a86181ef1ff2f8317201,\n                limb3: 0x17900cb270764782b3eca3d2,\n            },\n            r0a1: u384 {\n                limb0: 0x82358801a5440afa7826f03e,\n                limb1: 0xd09104615d27b1dba405157c,\n                limb2: 0xda33c37fe337917d32826e1b,\n                limb3: 0x1be7df7094ce56532653ce2,\n            },\n            r1a0: u384 {\n                limb0: 0xd33c9c433bdeabd28a276748,\n                limb1: 0x5dd445f6fe3bb3070cd0d395,\n                limb2: 0x8b092b49f4fdf2a38337a44c,\n                limb3: 0x4e047a80a74764555b1ea3d,\n            },\n            r1a1: u384 {\n                limb0: 0xd83bc84b011c607d97684972,\n                limb1: 0x2b14aae22370badd22ec77ba,\n                limb2: 0xd29b9c7b77c3f08055bb8a9,\n                limb3: 0x125b416bddff21db8d6f42ed,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5be94bbb61ae69bfb97c1797,\n                limb1: 0x5dd4679408b689cd73c98a54,\n                limb2: 0xe9ca66bf05d57e3775833e49,\n                limb3: 0x1245b62efbcc482d11a1f506,\n            },\n            r0a1: u384 {\n                limb0: 0x89bc52e555d0351b5fdf9289,\n                limb1: 0x25d5f95e819a92cfa5c9eedf,\n                limb2: 0x868fb6bab1644af652495492,\n                limb3: 0xfb6960d2b936f83c386e1bc,\n            },\n            r1a0: u384 {\n                limb0: 0x3682f4a1c6b6695783cdffad,\n                limb1: 0xb200ca645c7de79024156c46,\n                limb2: 0x6c37635d197c82752cd229bb,\n                limb3: 0x38ca157b9d7f6458c3e568c,\n            },\n            r1a1: u384 {\n                limb0: 0x2cfee4af636c40073d3b4a1b,\n                limb1: 0xf414198593f1ec8b43e3f792,\n                limb2: 0xb6d0d7a2aee4516e0d748d20,\n                limb3: 0xfa1dcda8c387ca159f89933,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6cf96397e7b79f2fc8c8275d,\n                limb1: 0xfc7cd3706f331af3de61fabf,\n                limb2: 0x78630a1ca624fae6d5770503,\n                limb3: 0x15ed1256df8e5e5ca95b56c8,\n            },\n            r0a1: u384 {\n                limb0: 0xee76aa06cc2a711c9ed0f30e,\n                limb1: 0xffa3eb442aaeb1342a8a3887,\n                limb2: 0xcd5194bd83d804f9da8e5cda,\n                limb3: 0xf5886abb33616f07cfac605,\n            },\n            r1a0: u384 {\n                limb0: 0x3e0ff1e7d1f926d905c0e89f,\n                limb1: 0x3fff1943b59d697a741845cd,\n                limb2: 0x4e362d7df69aa3269ea5a418,\n                limb3: 0x13a520fad90f72497a67b697,\n            },\n            r1a1: u384 {\n                limb0: 0xce7bf1da23ccce53d8e13b8,\n                limb1: 0x56957fccf1163143404a68dd,\n                limb2: 0xd26ebbc9548a9897d0383b14,\n                limb3: 0x329392268b1afdd087dd27b,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x1af14241809b40be9e3465e5,\n                limb1: 0xaa6af72c340012f9c342ed55,\n                limb2: 0xbd274776fdde7d41f1c648bc,\n                limb3: 0x139b56d4b863bf5a4ec4b049,\n            },\n            r0a1: u384 {\n                limb0: 0xfd79bc60d2afcce54c7a7d50,\n                limb1: 0xe8aeb68543d2d716d2dc9004,\n                limb2: 0x268109c94878da47a4fadd5c,\n                limb3: 0x11f2684f4000c4c639319b03,\n            },\n            r1a0: u384 {\n                limb0: 0xab0257058b3ceebf3856360a,\n                limb1: 0x83546bb85bbd4521ef2c15d7,\n                limb2: 0xb64ba4fcc5f5017bcd494e2a,\n                limb3: 0xb1553a9da615189266752ea,\n            },\n            r1a1: u384 {\n                limb0: 0xbdcbe0809eed404aaf6bfe78,\n                limb1: 0xb1362562e968fe7fbea0ac52,\n                limb2: 0xbd3b947e8a8fcf148e1a38f6,\n                limb3: 0x11b7ca6951f2354ee8e4035b,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x765ce308dd13ea9ec917f81d,\n                limb1: 0x4c2cdefe8611811647fac337,\n                limb2: 0x9e01fde22386755f816c125f,\n                limb3: 0x249a870907df1494e56fc21,\n            },\n            r0a1: u384 {\n                limb0: 0xc3cd52b28123518842661348,\n                limb1: 0x6678659f6f9ca9e64f594e30,\n                limb2: 0xbdde01f23d77cc2219a64e1,\n                limb3: 0xa59546d0d9d0d18614e9879,\n            },\n            r1a0: u384 {\n                limb0: 0x7e7be141202ac55eb1d4a8b8,\n                limb1: 0x22ee295a285099a1bdc85200,\n                limb2: 0x7d274b729c40bb351c2bdd3c,\n                limb3: 0x105edf80625508ee7473afc3,\n            },\n            r1a1: u384 {\n                limb0: 0x8d19d95e92eb2f4d361b91e,\n                limb1: 0xf6cc461a1b4bd0202cc3590b,\n                limb2: 0x87ebac45146065b2dc8d4bde,\n                limb3: 0x1375f5a114849a9f8e0c3d37,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xfd9edf6f28adce5f4beebf6e,\n                limb1: 0xf724947c45d624088ca78f8c,\n                limb2: 0x20b6c59e637f510e8f4a8b47,\n                limb3: 0x18088dc11568a6afa4ab3948,\n            },\n            r0a1: u384 {\n                limb0: 0x326d9eb3b7fd6666e4dfe426,\n                limb1: 0x7fa3c89d89204877db8eea9b,\n                limb2: 0x763eebc05a7142c40f835528,\n                limb3: 0xbcb69318eafdf385a86d0d1,\n            },\n            r1a0: u384 {\n                limb0: 0xca94ab9874f3014495f9cda4,\n                limb1: 0xe7794778e18217766f5e4602,\n                limb2: 0xc91a61c5cf05cf2822345aa9,\n                limb3: 0x792b27535901b050d8e5527,\n            },\n            r1a1: u384 {\n                limb0: 0x91ec1515549ee918829c4f28,\n                limb1: 0xdc2b66119fcf23cb6b822b2a,\n                limb2: 0x32919541ad67e68b00f465d2,\n                limb3: 0xa312627d104cde1072922c0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x58f86bbd730aa1df76e95257,\n                limb1: 0x3832640fbf5ff16fd5c86613,\n                limb2: 0xaf56bfc4d589fd5479b90e9a,\n                limb3: 0x3ca74026cf32fba56ec4ff,\n            },\n            r0a1: u384 {\n                limb0: 0x577775e0ba37cd47da598900,\n                limb1: 0xf402fb94e1c54fc0073a49b0,\n                limb2: 0x2e06dce324741a7e96cd8fcc,\n                limb3: 0x16f491b5bd383da7e70c001,\n            },\n            r1a0: u384 {\n                limb0: 0xf906737c542dde2e8b5d7bf7,\n                limb1: 0x93d207424c8f01f866d09071,\n                limb2: 0x7a8dc05cf5ae45304b21d8d,\n                limb3: 0x1d432a9b400dc09515479f5,\n            },\n            r1a1: u384 {\n                limb0: 0x533a88fd57c73a7a668d47a8,\n                limb1: 0x11cd23f02ff6e7610e1522a9,\n                limb2: 0xbb9e0293df841db5d616e680,\n                limb3: 0x19f2811473fbfa9dddb16249,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xb04ec27c52875dc87d300a4d,\n                limb1: 0xbe11f68dc22d7c89a578a63,\n                limb2: 0xb0557578664d37b4747b7a9f,\n                limb3: 0x12f5295a85f5353593bc2be4,\n            },\n            r0a1: u384 {\n                limb0: 0xe2f1989d941ed5564cd41c3e,\n                limb1: 0x688749fe66ae67951f20c5cd,\n                limb2: 0x1e342023b9900ec7038c108e,\n                limb3: 0x36e5e429874afc784f21116,\n            },\n            r1a0: u384 {\n                limb0: 0x2ee5450e51f44191eacbc602,\n                limb1: 0x85a343b7b9054589be26e47c,\n                limb2: 0x7f0d17d39a05bf1af4d36372,\n                limb3: 0xdeafa2ba02325a88b4c6cbc,\n            },\n            r1a1: u384 {\n                limb0: 0x715bdc99b0a7881ac0663f5b,\n                limb1: 0xfdc24e93292c1ee0678f2abe,\n                limb2: 0x8c276d6704a0c9e510c84f16,\n                limb3: 0x14796c0842ef2f1021a202cc,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x453bf5d35812bbf0123c972a,\n                limb1: 0x3a9bcdec2fe60921bf629abd,\n                limb2: 0x8d4d0d00c4d2739ae3a0b176,\n                limb3: 0x9a76bae205af60fb63330d3,\n            },\n            r0a1: u384 {\n                limb0: 0xa5e2fc320bd337a5e6bf6e59,\n                limb1: 0x649bf53444907381a7d0f976,\n                limb2: 0x57cfc1f1da9301aff5ef309c,\n                limb3: 0x79042a88c84c694ffd3fa12,\n            },\n            r1a0: u384 {\n                limb0: 0x8149e3cbfdcb7c4749e0ba73,\n                limb1: 0x72f87f4ff2d25e09a5eae7db,\n                limb2: 0x1d01fadf84a7202ce4489428,\n                limb3: 0x15652f54b134df28e3b93c7,\n            },\n            r1a1: u384 {\n                limb0: 0xa1b43fd866b4d217c50e744a,\n                limb1: 0xce197f05b592d754e8f84093,\n                limb2: 0xbc7dc9245b7e2113d675abe4,\n                limb3: 0x2f8afc77fac6bc37b0c7667,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x50e7013b12d7186ced76039f,\n                limb1: 0x721a7975c8378d2a726c7ae9,\n                limb2: 0xa73c62577fb438f12bf208de,\n                limb3: 0x26dc14d778403bf116e912c,\n            },\n            r0a1: u384 {\n                limb0: 0x29689dc66843d300ece6c677,\n                limb1: 0xf07525c97e59cd38bb4fbf8c,\n                limb2: 0xd52ba746bdaa1cabecd2c22f,\n                limb3: 0x2af3f0e70834774a2a73eac,\n            },\n            r1a0: u384 {\n                limb0: 0x7a93d76e421c2471b470689,\n                limb1: 0xa8513b1c40dbc11e983c16dc,\n                limb2: 0x2b12f3f2ca12077d1ce8a979,\n                limb3: 0xe71d0fb35e1b4017a0d875c,\n            },\n            r1a1: u384 {\n                limb0: 0xa979b1ba179da53c69aed5a8,\n                limb1: 0xf5591963958c0dc86b906f70,\n                limb2: 0x8461006ca66ecff10d3b0159,\n                limb3: 0x9d803979983001a16b8f24a,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xa36890bfc74afe64e9f3840c,\n                limb1: 0x8eeaf2f380047dfe3a21b11b,\n                limb2: 0xeb84e8fad6b7625c837aa272,\n                limb3: 0x135ff64b4d73a3a2d0f886b2,\n            },\n            r0a1: u384 {\n                limb0: 0x6fa3e40ac2853a97b01176dd,\n                limb1: 0xcd16a519987e4aabf6bd8d1,\n                limb2: 0xe4ee3c4f4c650fbfe5a0a370,\n                limb3: 0xcc7efdc19164223dbcb0b43,\n            },\n            r1a0: u384 {\n                limb0: 0x9ed5597f7236b21674d039f4,\n                limb1: 0x5cce2f4074bfb9593d07dcab,\n                limb2: 0x1467dedd98c377f9f9b46e75,\n                limb3: 0x89f8ba7d879e18afda115ac,\n            },\n            r1a1: u384 {\n                limb0: 0xce1eb5fb3e129849b7af9b61,\n                limb1: 0xbb388e5edcc82d67d7e505d1,\n                limb2: 0x37f0c598b86ce85a7ccc5e90,\n                limb3: 0xf3dfe35088599f2eeb97849,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x703411c08ba63253b98e71d2,\n                limb1: 0x51c06ae22b02444abf9cac41,\n                limb2: 0xa022f80a1a965f69f5d1f383,\n                limb3: 0x12fd2662087ac6751f157414,\n            },\n            r0a1: u384 {\n                limb0: 0xa277095e594bc58c46d54dde,\n                limb1: 0x8ca1a613e0d12d38a7cddd17,\n                limb2: 0xf0211ed10bf0f743dbc32801,\n                limb3: 0xebf6d5e9967bf3328026291,\n            },\n            r1a0: u384 {\n                limb0: 0xa39b2f0abb5ff02a8af6ad9d,\n                limb1: 0x404802001d459f026e2fb9fd,\n                limb2: 0x11cdb22b6ba1b2bad0344e21,\n                limb3: 0x772eca503810eaefb95c2fc,\n            },\n            r1a1: u384 {\n                limb0: 0x1879ebc05549a3ea69bf9c79,\n                limb1: 0x3d68ffd86dae89a1de6536de,\n                limb2: 0xce0084f9fba0a4087e5191c9,\n                limb3: 0x141788fb821ea65aed14d5a1,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xb9289920fc29c178a0728467,\n                limb1: 0xf35e17ec8a43244f4e0efb63,\n                limb2: 0xa46135ade487bf1a95a36590,\n                limb3: 0x4597ae1f4cfcdaacff3f6,\n            },\n            r0a1: u384 {\n                limb0: 0xe926fdfcdb55d8651b029bb7,\n                limb1: 0x741390b7035f30b98e2dcd27,\n                limb2: 0x697fa3901ef0c0d6f4f0693b,\n                limb3: 0xcc420802c358e2dedfc71d4,\n            },\n            r1a0: u384 {\n                limb0: 0x404a03b34791ba0f3fa9761,\n                limb1: 0x50d30e7876bb541f3ef689f6,\n                limb2: 0x7eca4b1c1a04fdc1c58f3065,\n                limb3: 0xa9e0b8c0194468d35c05fbd,\n            },\n            r1a1: u384 {\n                limb0: 0xb370e739ea46b6699276bb50,\n                limb1: 0x39805df77c609ca4cb80f044,\n                limb2: 0x1f93a5fc91ea7ec7048f46d8,\n                limb3: 0x109841b0d6d23c644d831b58,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x696c2443a8baa527eef5ec6e,\n                limb1: 0x7c385a900f4614f62a38d2e7,\n                limb2: 0xecef959f527ae42bb1b2a0ed,\n                limb3: 0x7fac72373dec09eeaf6db37,\n            },\n            r0a1: u384 {\n                limb0: 0xc84aa165d81984cbd1d40498,\n                limb1: 0x7ef2f6d8a1b0b82a86a8aea1,\n                limb2: 0x9f04cb828903af563a7ce955,\n                limb3: 0x1260f88b57dddd5bf01540db,\n            },\n            r1a0: u384 {\n                limb0: 0x7d666c3a74212ecb676ee24e,\n                limb1: 0x8ddff061953f45de2460c7ee,\n                limb2: 0xb69a343af7532ec4af3c8894,\n                limb3: 0x213c5dddce502302ac58fec,\n            },\n            r1a1: u384 {\n                limb0: 0x9b68c470206e0a6b23d993d7,\n                limb1: 0x8e64f45ab3906177fca690b,\n                limb2: 0x6b3ba9665c9e8cdb62669c9b,\n                limb3: 0x4535c1e41f9fe732b7c4780,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x98b0e7890c15a7a839d3b10e,\n                limb1: 0xf4700f5af67e79881b903235,\n                limb2: 0x7f26d7f900cd57991171081b,\n                limb3: 0xa11c46b99ac9b5f162650e0,\n            },\n            r0a1: u384 {\n                limb0: 0x8a0a163b8e5919da774d6514,\n                limb1: 0x5b711ae4ea88feca76813413,\n                limb2: 0x3cfe334352e602ed13efcdbe,\n                limb3: 0x170158694b626c2fc61e87b1,\n            },\n            r1a0: u384 {\n                limb0: 0xe2bcaf25cb4ec37db7539e18,\n                limb1: 0xf529b82b627e809c817fa0b2,\n                limb2: 0x1fe26f773f8d5e39076934e,\n                limb3: 0x98193b4da3aac7d8e92f5f3,\n            },\n            r1a1: u384 {\n                limb0: 0x5d20cd8b1cdf94ce27802746,\n                limb1: 0x2877bd487e7fefe25dc052ef,\n                limb2: 0xc8fd066838059eeb41c965ec,\n                limb3: 0x178ed199c2fb2d36df7fcd0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4790112971f4fd8af8c65cf3,\n                limb1: 0x2a207f9a2516cd19d12e489,\n                limb2: 0x9ff7a28cec268524a01123a2,\n                limb3: 0x19c97c4cda4b8effc6fd8caf,\n            },\n            r0a1: u384 {\n                limb0: 0x186239a1ec3cf10b8286a2b2,\n                limb1: 0x3ef3e7aabde5155a565ba9df,\n                limb2: 0x87f2c71389dd8222c768baaf,\n                limb3: 0x27192c74c599b1228aaf1a8,\n            },\n            r1a0: u384 {\n                limb0: 0x8f69417d578d338a6f398545,\n                limb1: 0x7bf1e9c47453d7351c93abfd,\n                limb2: 0x35f77c3144b037f01890517a,\n                limb3: 0xa405425f46c150020d41e02,\n            },\n            r1a1: u384 {\n                limb0: 0x31bd174ae90756d6a59e0c49,\n                limb1: 0x83fb482d1737f7e4d899670c,\n                limb2: 0x9109ccd8f333598149678681,\n                limb3: 0xa5e61d696e11d7f360e20c7,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x14e4f467f4709129c1d6d6d7,\n                limb1: 0x33e67ed9f2b5e1802523571,\n                limb2: 0x3e76ea8acb143c96671cbc65,\n                limb3: 0x1137f470c8f7d00baa56e5c0,\n            },\n            r0a1: u384 {\n                limb0: 0xa2a95cfa92d0088ab1308e85,\n                limb1: 0x85a5304db0b3422f71d7ac93,\n                limb2: 0xbc8572953d8f42a55fe99700,\n                limb3: 0xf23701cea5719c6d8b0d3f3,\n            },\n            r1a0: u384 {\n                limb0: 0x380e418e3c32756e123587f9,\n                limb1: 0x8a39d6b5872d774c57af0ba1,\n                limb2: 0x11473256ad05f9eaac305647,\n                limb3: 0xa642f0b83f002f2b82a1d3f,\n            },\n            r1a1: u384 {\n                limb0: 0xd5b5c903360b3614bde608b6,\n                limb1: 0x407e2bf83df10c320c4ddafa,\n                limb2: 0x3771cad615e4d7b5de69e962,\n                limb3: 0x105334af5850345d42c10c17,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5c9c29ca75d35044e8ef21c3,\n                limb1: 0x998cb3a19513ab7f61414601,\n                limb2: 0xab00762e628d907a2ae1af86,\n                limb3: 0x1169ce82fb0de161f3893d09,\n            },\n            r0a1: u384 {\n                limb0: 0xf3a9a8d35f18f808693ffd33,\n                limb1: 0x73f3c4fd6045a7f4571f21bc,\n                limb2: 0xdf7c2193567b491c867fdf00,\n                limb3: 0x16e98d0dd48da5e0edfff5c3,\n            },\n            r1a0: u384 {\n                limb0: 0xaf283e3c6ef8a94336bc120,\n                limb1: 0xf60a1f61fc714e75be0aadd4,\n                limb2: 0x11634a0b524e6d80246509d7,\n                limb3: 0x16e9e7d8a952a7b31c855f16,\n            },\n            r1a1: u384 {\n                limb0: 0xc775b52b48f308cf0eda40a5,\n                limb1: 0x8e5b8d423e5aa68c1d100384,\n                limb2: 0x60bf337ffbd88ec5c5c9f419,\n                limb3: 0x89182d6b9c183e0d7ce7769,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe8ab375f9e79671f77c33b38,\n                limb1: 0x32c9317a9c538a1808d10350,\n                limb2: 0x39b7c7695d2524211d5341f3,\n                limb3: 0x373d7203575fda92e7b4b02,\n            },\n            r0a1: u384 {\n                limb0: 0x54a74ef22bb2c45a0f0992be,\n                limb1: 0xe9d5746328bce07da2a04f41,\n                limb2: 0xf657d148ed56fbf731787b28,\n                limb3: 0x7b03ee28e327f04166f5075,\n            },\n            r1a0: u384 {\n                limb0: 0x754ae620f48dd7de6afcbb5b,\n                limb1: 0x488b7b5de47bfe76c7d7f1ce,\n                limb2: 0x5a2e05b269b38310ba8b4159,\n                limb3: 0x41965ba496910c39d2c8167,\n            },\n            r1a1: u384 {\n                limb0: 0xe544c97bb363e3619c50c630,\n                limb1: 0x7fec53ec738123389016bbf,\n                limb2: 0xb12f6ffb0998373cb04be875,\n                limb3: 0x4bf5cef5067781b9809ec64,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xbf2c9e34e6bc1bd091b45f67,\n                limb1: 0x5c346e3b836520851797b6d8,\n                limb2: 0x6069138a6940bb4584d47a8b,\n                limb3: 0x1ec9cbb12630fd6ccc6c9c,\n            },\n            r0a1: u384 {\n                limb0: 0xafbc54c8ade09192bfd558f6,\n                limb1: 0x1faee0208ac7d1e69f12c285,\n                limb2: 0x63c00188230e79c0d80db365,\n                limb3: 0xc8eab23b2d1473ed2b2a733,\n            },\n            r1a0: u384 {\n                limb0: 0xb63308c849127dc268a45cd6,\n                limb1: 0x36c18af5bbec9380f565bae8,\n                limb2: 0xf0de12a8c99254f36cf0dee2,\n                limb3: 0x2d8f12634dcf817db2f2721,\n            },\n            r1a1: u384 {\n                limb0: 0xca376f99a70d9e829232cd97,\n                limb1: 0x2444f064f27f2388ae65f100,\n                limb2: 0xbbb2d21896e41edec0347853,\n                limb3: 0x135ff883551823e93448609e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4d2b6e4cdcfd83a0692003b0,\n                limb1: 0x41629374ff0d1ac17362c794,\n                limb2: 0x18b16faf0521c1c5a11c3523,\n                limb3: 0x18b70eb629a79ff3f9834985,\n            },\n            r0a1: u384 {\n                limb0: 0xf6dd615a649c30b33d8b88ac,\n                limb1: 0x526f609b923d7ba3b37b63c,\n                limb2: 0x4289133e7279c670978cd569,\n                limb3: 0x11fa0abe9f21dc673b14d917,\n            },\n            r1a0: u384 {\n                limb0: 0x7f14d726cf9a27a8c970bb68,\n                limb1: 0xe380e6b07cde1eb0fffd95e6,\n                limb2: 0x2c5722bd0e114b506bddd89a,\n                limb3: 0xd3fb948d9f8e2c898c1b3c,\n            },\n            r1a1: u384 {\n                limb0: 0x86aed9389c52f71bde01a5e0,\n                limb1: 0x4c6baca3b4494d3a4a88343a,\n                limb2: 0xe1083c4faf04588a29999bbc,\n                limb3: 0xcddd31531e910375fb212ff,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x235a9f01452a4060e9666d57,\n                limb1: 0xd5d02fd4f582c83fc011b621,\n                limb2: 0x6d73a1f62f157668ad2fde7b,\n                limb3: 0x10506e79bec17d8e51a8464e,\n            },\n            r0a1: u384 {\n                limb0: 0x18cf57bcbb92130baae8f6c2,\n                limb1: 0x6d9d5afd47ece7697d3e9c13,\n                limb2: 0x2e57a93ee5ece50b3fff8e9,\n                limb3: 0xe6806ed105ec93b0fb969c2,\n            },\n            r1a0: u384 {\n                limb0: 0xf5fa5b82be86b88814b2d06d,\n                limb1: 0x2ab27456d28150f5ee3375d6,\n                limb2: 0x32b1ec76959111a17a5fa1fc,\n                limb3: 0x7c1d13dcf400899c66a8e7f,\n            },\n            r1a1: u384 {\n                limb0: 0xa5626b5549a39034af1af868,\n                limb1: 0x1bea223a1c5580bdcbda7e8a,\n                limb2: 0xf29f63f5c820b06bb690a9d3,\n                limb3: 0xc546ee8fac366005eb69d82,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x2d6310ed50636162786d1b75,\n                limb1: 0x5cac54906e73bae3b4359998,\n                limb2: 0xbd428c9c44f9a83980265ddd,\n                limb3: 0x2fc21e36ad4d0da0a00add9,\n            },\n            r0a1: u384 {\n                limb0: 0x80e8a4f63bb295c1f909c9f8,\n                limb1: 0x76045a0b6f715c18ef69c37a,\n                limb2: 0x8e2d6c8495568d22744ab3f3,\n                limb3: 0x2b70c4ecc512e5b7a263f20,\n            },\n            r1a0: u384 {\n                limb0: 0x74f73dffd0f8db5344a575d1,\n                limb1: 0x8e6d3150c6b50fb0f30b8d42,\n                limb2: 0x1caf7885c868849e8e700707,\n                limb3: 0x130fa43ef7b10a6b7c72a4af,\n            },\n            r1a1: u384 {\n                limb0: 0x1cd953b2a94a0b0460118689,\n                limb1: 0x5c361d5ff78164edfe007331,\n                limb2: 0x61315250d28c9b99d174dab6,\n                limb3: 0x252277581829378760d4033,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x47f1657643a1cbb2571eb8bb,\n                limb1: 0x8914631858f8b77d7a349849,\n                limb2: 0x436fcdebfd20c5f2c775777b,\n                limb3: 0x15d2dad8f611743307bbcb8c,\n            },\n            r0a1: u384 {\n                limb0: 0x76e0666924671f3fa1e8305c,\n                limb1: 0x99f366ed9ecdc252b3780f8b,\n                limb2: 0xde576eafe0fb738d0ef77352,\n                limb3: 0x900b9e3957454d7bf885b,\n            },\n            r1a0: u384 {\n                limb0: 0xc288c6a7c06ef42c5512ffbd,\n                limb1: 0x2101acee5d3a6f42634fdb52,\n                limb2: 0x87f97207b5422a53fa6febaa,\n                limb3: 0x468108ffae130a39d212d39,\n            },\n            r1a1: u384 {\n                limb0: 0x71959c4ce40fbe9db7b7402c,\n                limb1: 0xf04a57d060ab29acaba357bd,\n                limb2: 0x88ead6a27e0673b01bc7797d,\n                limb3: 0xe7b10501dd492414f7f5320,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf313b674fee5c83040549617,\n                limb1: 0x864b49b4b96dc11dcb31a6b2,\n                limb2: 0x7afa88358fa085d4db1d9e6f,\n                limb3: 0x10b916005fc2476498beed41,\n            },\n            r0a1: u384 {\n                limb0: 0xa5f1bacd2bc2f38d4e1a34d,\n                limb1: 0x45d1d4d76b0b03b8d7da125b,\n                limb2: 0x74a0ba0ae49290dd243bdc61,\n                limb3: 0x185827ff9e3c833ac46e1e16,\n            },\n            r1a0: u384 {\n                limb0: 0xffae650825626bdffd8ed424,\n                limb1: 0x126a57866536ac1d0b34b17b,\n                limb2: 0x517ba3e3b50188d25dc23dc8,\n                limb3: 0x1276dc74f1b2a7173802ff0f,\n            },\n            r1a1: u384 {\n                limb0: 0xa73951cadbaab9fe957c0fed,\n                limb1: 0xa232a5178de78c8f681635e5,\n                limb2: 0x30adf5deb8ee4da1fcc053b2,\n                limb3: 0xd840dfc0aae66492a176a2e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x25d4b59740f7116cb1780a57,\n                limb1: 0xf66599aadea648fbb82567e2,\n                limb2: 0xe3cb94f5929ba09bc594b6f3,\n                limb3: 0x14aea73a1e5255d84243cf1b,\n            },\n            r0a1: u384 {\n                limb0: 0xb4ab235afcaa352751b232b7,\n                limb1: 0x39d514cae45e5f1ca2163b13,\n                limb2: 0x24d5c8e93eafc5a989dd917e,\n                limb3: 0x3f325c33f3120c94b570157,\n            },\n            r1a0: u384 {\n                limb0: 0x19fc8f20184d782d19ad14ad,\n                limb1: 0x25cb2fec959a766536d22d3f,\n                limb2: 0x3c33822ddba88cb8c5660a53,\n                limb3: 0x577aed0bad6b8ef9bc471ff,\n            },\n            r1a1: u384 {\n                limb0: 0x83e60f0903c16e1bcae23f39,\n                limb1: 0xc6fe7fe7835463a27bac9a8c,\n                limb2: 0x5c8c12c6fc626555c235f443,\n                limb3: 0x265e58c13368ec3d3828fe2,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3ce32e18da41a2016fbf41b1,\n                limb1: 0xda3e0d01e0bbb52a301585cf,\n                limb2: 0xaf508b2248a1fe6ffc5d18d0,\n                limb3: 0x1274aa625858db0bb675b3bf,\n            },\n            r0a1: u384 {\n                limb0: 0x4cbc0be362614fff6f6d4898,\n                limb1: 0xdf8603dfa938bc22d0aa98e,\n                limb2: 0xaf3784151a3a1a7585c177cf,\n                limb3: 0xcd9b76612194b440cbd9c67,\n            },\n            r1a0: u384 {\n                limb0: 0x93de5b0d4ce155335ed8a6ff,\n                limb1: 0x9dc6c21cddb15edd7f401cc4,\n                limb2: 0x2601d5b08d144c3608181a8f,\n                limb3: 0x872d334a6e81b6937f7580f,\n            },\n            r1a1: u384 {\n                limb0: 0xa90ea56305b0b457ffd7dfd9,\n                limb1: 0x3fd7486324393fe073a67746,\n                limb2: 0x22aaac8be67217e0e49366ff,\n                limb3: 0xdc78f4f3c40b0984ec316e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x91b78bd7e557f93a24ee04c0,\n                limb1: 0xd19051b09bfc86047a41c109,\n                limb2: 0x3402bf57b1f9b24014dc32f9,\n                limb3: 0x13e3027846c5080d9adcee97,\n            },\n            r0a1: u384 {\n                limb0: 0x7e481c05e40434785193ab1d,\n                limb1: 0xe6af27502aacea453841adeb,\n                limb2: 0x386742381e57d6086584e277,\n                limb3: 0x1135a6ddee7eb562ea6e21dc,\n            },\n            r1a0: u384 {\n                limb0: 0x76c4a8400e82be43993db399,\n                limb1: 0x9b4212fb3eacecbbe7d9d4ec,\n                limb2: 0xc0d9b62cd322c550cdf92dd,\n                limb3: 0x7529a6acf7161d423b23562,\n            },\n            r1a1: u384 {\n                limb0: 0xbbea5748b91520366f556220,\n                limb1: 0x99e0ff5b1475c3a1439dcd18,\n                limb2: 0x4927045dd9b230c874e0a4cf,\n                limb3: 0x569e18a0165d0c89300f772,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x35a50965750c7716c237772d,\n                limb1: 0xe96b0c22d39fbbbe7f55d6bc,\n                limb2: 0x40864a9ec51fc3fceddf7498,\n                limb3: 0x232f7c41bf2d0ca9a4a6560,\n            },\n            r0a1: u384 {\n                limb0: 0xebd5d6880bc93e525c5283bd,\n                limb1: 0x911e6efcf7cc8f0983f3a122,\n                limb2: 0xeb2d53ffa24eaa0527809305,\n                limb3: 0x126b7366a9ba4cdc1648b905,\n            },\n            r1a0: u384 {\n                limb0: 0xd7789f5359bb3bd4b674719b,\n                limb1: 0xecaa3bff242dc5a63ed57279,\n                limb2: 0x85e8faaf82c119cc47bdfe4d,\n                limb3: 0x1042198c5b912b48953f03ee,\n            },\n            r1a1: u384 {\n                limb0: 0x52c926fe4d73775c8dcc54b9,\n                limb1: 0x56410c723b730b245d2639ae,\n                limb2: 0xe6b9bc3d2b2a15155d82e48f,\n                limb3: 0x11772d7a9fa0b3530a88bfa,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd49d530d6471b000aaa0f15f,\n                limb1: 0x6419093f265991b02bffc7ce,\n                limb2: 0xa00c1451a79e01585e4326eb,\n                limb3: 0x6346c6eff4ca91de5b05384,\n            },\n            r0a1: u384 {\n                limb0: 0xdfa15634bfcff7dadc461eb5,\n                limb1: 0x29af4f6d3d69636b5928e5d2,\n                limb2: 0xfde39f21b4d6e713d0d155d2,\n                limb3: 0xca4f08ed6e2bdb29750675c,\n            },\n            r1a0: u384 {\n                limb0: 0x81ff98c5082a2bd3e42457b0,\n                limb1: 0x63554fb7f83f1d8dad23dd52,\n                limb2: 0x2c485af67a9cec9a384d38b5,\n                limb3: 0xd327461f217051c60e87f40,\n            },\n            r1a1: u384 {\n                limb0: 0x3da25c53119715454f53681b,\n                limb1: 0xc91752cc6b4bdbdfe38db6f2,\n                limb2: 0xe72f2af727bb791caabbec47,\n                limb3: 0x127c4a3487c7d32f6f36e4e8,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x90b1d3aaedd7ae3ae5ef62ec,\n                limb1: 0x9c2237332a12d63f617991e0,\n                limb2: 0x88f758a89df448c1dd45282d,\n                limb3: 0x3c52126f27d2dd758ab0770,\n            },\n            r0a1: u384 {\n                limb0: 0x8bf85f2a28b11ffbcc48f29d,\n                limb1: 0xb79fc38b4398e2af5a4ac3f4,\n                limb2: 0x877b0d7e053d12f91fa49c91,\n                limb3: 0x19ee364564c01cbdf0bd4257,\n            },\n            r1a0: u384 {\n                limb0: 0xfbe824718174525ae3cbf681,\n                limb1: 0xb434f93ab3f012e5c5fab625,\n                limb2: 0xfaaa0bb2878017e90fb07ac6,\n                limb3: 0x616944a1484a78b2946360a,\n            },\n            r1a1: u384 {\n                limb0: 0x84c489abf936bfadd293c732,\n                limb1: 0xaa7ca8e76a07f14d2a712245,\n                limb2: 0xef338c44111cd8f2538f16e0,\n                limb3: 0x2f06c9cef716ae3e32a1bd1,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd396b680a9f4f7c6bd038aea,\n                limb1: 0x986cf9351d6ab286ee985c18,\n                limb2: 0x3fb1d1f309c22962f47ec31a,\n                limb3: 0x10fb4fd3b7ad82cb7a20f545,\n            },\n            r0a1: u384 {\n                limb0: 0x1ed74a546ca919799c8dc7fc,\n                limb1: 0xad96bb817657c40d87a9d3e0,\n                limb2: 0xaae8cd21d5514a6bad3ed8c4,\n                limb3: 0x8d73f64be809e1cf6c21ba3,\n            },\n            r1a0: u384 {\n                limb0: 0x5ec7fd9fa8d7f0d23ba3e8ad,\n                limb1: 0x6b74854455e59da09187bba,\n                limb2: 0xa36996b7529b95dae966c75d,\n                limb3: 0xcdea79528317107cbfd85dc,\n            },\n            r1a1: u384 {\n                limb0: 0x3880ae8a1f6f37a409313c14,\n                limb1: 0xa07694a5bc51a90f14a6c6,\n                limb2: 0xdd33ffd933cac57b8cb1b24b,\n                limb3: 0xc48ad7503d01f14954b7e4a,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x49369971c3fc33245bb7b9cb,\n                limb1: 0xce9896e5addb637375420be1,\n                limb2: 0x7d4c97a8e9d64c41cf2dffa1,\n                limb3: 0x287b1e39767a3c2d102a825,\n            },\n            r0a1: u384 {\n                limb0: 0x6f6e6c10c2da68b535025ac5,\n                limb1: 0x9b6128f5e000427659557e1,\n                limb2: 0xba4e1537236425a49e10a76b,\n                limb3: 0xdccc3a8b263abdc2c1112a2,\n            },\n            r1a0: u384 {\n                limb0: 0xf0f26fb9d99f34211c52ec21,\n                limb1: 0xb091a74cf88bb5563ee29bd1,\n                limb2: 0xb1a3c0e6479e60ec2bf5e312,\n                limb3: 0x6ea612bf02bd6df77f7af9a,\n            },\n            r1a1: u384 {\n                limb0: 0x773745b51d209d3643ac70f3,\n                limb1: 0xb837418d0188d5d41911d38c,\n                limb2: 0xae750841ca68ec61dd2fac9a,\n                limb3: 0x9b4aec971d45aee69870aa6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x1ea080f661e3664f40e86e5c,\n                limb1: 0x68cfee40024ac6d125d379dd,\n                limb2: 0x629e60758e07b9b05c61ba2b,\n                limb3: 0x1689e26966100efaf80d13ed,\n            },\n            r0a1: u384 {\n                limb0: 0x320d0999b19811ce060215db,\n                limb1: 0xd9502d1b7afa257773be4230,\n                limb2: 0xc988439b0216e219b7140ccb,\n                limb3: 0x27f9715fcd39d7ac02d48f,\n            },\n            r1a0: u384 {\n                limb0: 0xc0ef32fd00dded29b70a8660,\n                limb1: 0xaed80ea139f12376a3886fc8,\n                limb2: 0xc3fdb8d6a2210be1cda0c165,\n                limb3: 0x724e4ec574990cb0e7f2fff,\n            },\n            r1a1: u384 {\n                limb0: 0xf76e88a2a84b78507079bb92,\n                limb1: 0xa85c3a62cb47c5e940583dd0,\n                limb2: 0xcdca5b44b5708fb75e277a0b,\n                limb3: 0x197734db8752e982455cec8,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x9658e94dff575b044fd12535,\n                limb1: 0x9e633711f24267eeff96b84c,\n                limb2: 0xd09be055097f3f4285b74b29,\n                limb3: 0xeba32ca0fdf04b16e700d02,\n            },\n            r0a1: u384 {\n                limb0: 0xdac31a776bf2f2a7eb8d07b1,\n                limb1: 0x99ff3b68fe53867aeee330e,\n                limb2: 0xfc016b0e19f5a9dafe6150af,\n                limb3: 0x1853f7c388088cef95618ee7,\n            },\n            r1a0: u384 {\n                limb0: 0x25afd3c9e43a6bd85d8f83da,\n                limb1: 0x6636bcf8f7c4ffb03262b3ad,\n                limb2: 0xfab2ea835f15ffa64289aee0,\n                limb3: 0x19a40512a2bc92b145d4a15f,\n            },\n            r1a1: u384 {\n                limb0: 0x457e5f8262a3fb1f68e2ee64,\n                limb1: 0x2c8e29f8273ba32411548171,\n                limb2: 0x6b7ec622d4cf5c7605c02c7f,\n                limb3: 0x16d592d1bda21aa16790c116,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd80a4ced539c150c77292976,\n                limb1: 0xd1018cbfc2e4ad4590fdd9c5,\n                limb2: 0x65eef4175a5f35f468647ff1,\n                limb3: 0xd47fd0789b1a92106cd2ad0,\n            },\n            r0a1: u384 {\n                limb0: 0xd0f1e84b8f833d7979a1154,\n                limb1: 0x9ab45965049706c23a88af3a,\n                limb2: 0xb0231a5c90a4e465df178981,\n                limb3: 0x14edfc6d170bd35b2c5c4da,\n            },\n            r1a0: u384 {\n                limb0: 0xdc1d49daf3fc4c0995bc8e2d,\n                limb1: 0x17d2159bae7cc0df66ddd2f1,\n                limb2: 0x554dbdd1925e2b9c7e37a286,\n                limb3: 0x1660a21b43940b8c8015db0e,\n            },\n            r1a1: u384 {\n                limb0: 0x251a422c67cfa51ded81106f,\n                limb1: 0xae838377475ad4866ca7cf3a,\n                limb2: 0x97c1cb95155232e345faaa6a,\n                limb3: 0x2730486142b7fc674f5426b,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x1393c1940f25665663934fc8,\n                limb1: 0xea7d0b2339e762ea1d7417bc,\n                limb2: 0x38e8c939bcfc597914fa0bc4,\n                limb3: 0x10e5f821e745ef290f773399,\n            },\n            r0a1: u384 {\n                limb0: 0x3fb68057499c7406aa1ace48,\n                limb1: 0x41257c93b17f3e38108e6f37,\n                limb2: 0x6e97eb8687dab2a2a640c57f,\n                limb3: 0x14df29fafe098da44c7fd33,\n            },\n            r1a0: u384 {\n                limb0: 0x59456b76c2b8257a9ee80887,\n                limb1: 0xb92657cb2cd74cfb0e2e2af8,\n                limb2: 0x74366a9ca17b733790bace94,\n                limb3: 0x18a62b6be3320f12ef9121ed,\n            },\n            r1a1: u384 {\n                limb0: 0xd05f8b04255c124be737ddfb,\n                limb1: 0xcaf73bd136dd217b40f1b669,\n                limb2: 0xda811888424a2ec800ca2f97,\n                limb3: 0x157c5205e1188acb79fbef71,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x551d19a32197678e501a12c4,\n                limb1: 0x3102f2c93053ce62da9a1b0b,\n                limb2: 0x769adf2e8ae80c60c5c99139,\n                limb3: 0x14fe0b69dfab2ad91193c4a5,\n            },\n            r0a1: u384 {\n                limb0: 0xe86cd19c62b7325309625290,\n                limb1: 0x9512dfe7f8a0a85b5b129f5a,\n                limb2: 0xe93b9e5ed1d785c66f3d5c64,\n                limb3: 0x65e688294775d76e5ab924f,\n            },\n            r1a0: u384 {\n                limb0: 0x7dd30ad71ce6a81d732c1d0b,\n                limb1: 0x352705fb9beba70b1561a320,\n                limb2: 0x5f08143a55c4e1b470430252,\n                limb3: 0xb8154b1f10e74f69706d330,\n            },\n            r1a1: u384 {\n                limb0: 0xc48c1339b316415bca3bb4cc,\n                limb1: 0x510780292ce3d9843a65b76d,\n                limb2: 0xbaba64e0ba594669eb8e95e3,\n                limb3: 0x6a3ff7eb4d1089f7273bf29,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x54863ab6d50bc9ff4874b6e6,\n                limb1: 0x937c0d4560eae2eee4b7ce1e,\n                limb2: 0x337805ebca15d19f40277942,\n                limb3: 0x10ff70c91cbb8869a0659bf2,\n            },\n            r0a1: u384 {\n                limb0: 0x7b3cfe640c29faece9a85e53,\n                limb1: 0xcddbe3decddda92adfd9039a,\n                limb2: 0x42f145b0f85554ee195ae299,\n                limb3: 0x1951ff3142b9a208e5e69e59,\n            },\n            r1a0: u384 {\n                limb0: 0x94a7ee20add6c18015e26733,\n                limb1: 0xd0f2a6ab15fefff1caa7366a,\n                limb2: 0x9c055a1d93c3f27e46d0b3da,\n                limb3: 0x60f554e35125b7f5d7aac8b,\n            },\n            r1a1: u384 {\n                limb0: 0xd92e5b001022ee7874cbebeb,\n                limb1: 0x4aed0fd23b92aebc139f77db,\n                limb2: 0xd2bca1fe5ad39a274c9dfeec,\n                limb3: 0xcfab0e5b8e8d7c7a8765b15,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x101a676fbbe065b8b0413cd0,\n                limb1: 0xd7be780e12266c035435d9ad,\n                limb2: 0xd7fdc11fb76bab59a38fdb76,\n                limb3: 0x188fd7a942ff955e8dedd5cc,\n            },\n            r0a1: u384 {\n                limb0: 0xf4267e2accb1a831f299e5ef,\n                limb1: 0xc72c0e3ca886a34323f98177,\n                limb2: 0x3944a21e29b7d7482c48c0a2,\n                limb3: 0x19e2d02a05f168b8c487fced,\n            },\n            r1a0: u384 {\n                limb0: 0xa7c84f708c6c422e0b09d8be,\n                limb1: 0x8262fa2f39a6188d2d55dbf1,\n                limb2: 0xdfa1e441b0e33621ff08a9fc,\n                limb3: 0x16835a4c15044f6074fb2395,\n            },\n            r1a1: u384 {\n                limb0: 0xe4e0728b3d36c7178fd1c85,\n                limb1: 0x8dc9951af0d0d139b48a6a19,\n                limb2: 0xef3bffc1480b3d46ce6884aa,\n                limb3: 0x10cba92e51537ca3cb71c662,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x21805f763874894483dc214c,\n                limb1: 0x2c02b4ccd505fbbb8d8bd064,\n                limb2: 0xe32a1465866e01898f1f3b14,\n                limb3: 0x15d2f6b35415870ddc7054f2,\n            },\n            r0a1: u384 {\n                limb0: 0xf6749d4bc9865ee9e261110a,\n                limb1: 0x81c4e72fdd8802ef73ab15ef,\n                limb2: 0xb89ca852d2ba8b3590cd5301,\n                limb3: 0x183abed5b2d1d128fa596426,\n            },\n            r1a0: u384 {\n                limb0: 0xf71ebb04aab85e83aec862c0,\n                limb1: 0xf473b3e5a56fd96d60f8a264,\n                limb2: 0x3e4b66f8493911a4a00afa1e,\n                limb3: 0x12be1dc90541ee9c7cb4fa59,\n            },\n            r1a1: u384 {\n                limb0: 0xba5f7a9ccd0748c2fa4e54c8,\n                limb1: 0x1640f7800984bafe7fa1a76d,\n                limb2: 0x48e76aab062b19911f92bcd,\n                limb3: 0x72cecd9e5c7c437cbbc1e4a,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3856dc19dfda21ef560eb176,\n                limb1: 0x932f2c020e0784cc0b8e2582,\n                limb2: 0x9efd70aa14438ded0e7dfcc6,\n                limb3: 0xa60015a3a9584830c4ff86c,\n            },\n            r0a1: u384 {\n                limb0: 0x4449acbaeda777c3805d02a7,\n                limb1: 0xc1bfdc4d4b74f4fdaf35202d,\n                limb2: 0x4aeb28b040467a2dc5803704,\n                limb3: 0x1993ceccd531b2a68cefc981,\n            },\n            r1a0: u384 {\n                limb0: 0x942f300d9689f481285d418a,\n                limb1: 0x6df8e92708f641bf87425ab4,\n                limb2: 0xcc53e2815e0e9c8c8771ecd9,\n                limb3: 0x152fd67eeca4f89f468127f7,\n            },\n            r1a1: u384 {\n                limb0: 0x8babc72b284c008ffe395a3c,\n                limb1: 0xa9986da25d6c33d1781a02e2,\n                limb2: 0xfcf47ee90047077c0ecf5120,\n                limb3: 0xb04a2d97df30a6a7673d205,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x1f078a90be515d55a39025dd,\n                limb1: 0xa69e73a9a0f2894ad32c28d8,\n                limb2: 0x406d92af351a91a43b294110,\n                limb3: 0xab36c91eeeaabb24820b390,\n            },\n            r0a1: u384 {\n                limb0: 0x873b5a72e8ea0e7d255b970a,\n                limb1: 0xf64973cbec18695bfc945495,\n                limb2: 0x533e34319846e866ad7ddd36,\n                limb3: 0x1029fa62305109a4d20176b9,\n            },\n            r1a0: u384 {\n                limb0: 0x429cba0cb76b0c492577722a,\n                limb1: 0x771bc089fee5e3632dbffa1a,\n                limb2: 0xa7c64b6f38e532de16959d0d,\n                limb3: 0xf38b71fb4269dd2e038223a,\n            },\n            r1a1: u384 {\n                limb0: 0xddc796c5033428b0b8111c4f,\n                limb1: 0x60ad337fb316c52ef8de0b21,\n                limb2: 0x951808daa18d3ec520bd6279,\n                limb3: 0x3455cf600b5f6c549f38f14,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc431f00ed9ace3016fb073c9,\n                limb1: 0x5ae25790d51ab15f49a22131,\n                limb2: 0x901a956cb84b3957b3a84e64,\n                limb3: 0x2e0a35d40d9a1a94b3497b6,\n            },\n            r0a1: u384 {\n                limb0: 0xc7231eba998997f68e57ceda,\n                limb1: 0x20d31de71c175ad7214de622,\n                limb2: 0x158aeffac71897dcc253069f,\n                limb3: 0x16e88228b697db4f6c224b34,\n            },\n            r1a0: u384 {\n                limb0: 0xfa62c8122e911349b00f63f0,\n                limb1: 0x45308aa0b0564ebd07848a22,\n                limb2: 0x487ab0912d2d5ab27c7795dd,\n                limb3: 0x11a0c48848f0d7b20b46fa15,\n            },\n            r1a1: u384 {\n                limb0: 0xe26fabf8b78e9f83692cff15,\n                limb1: 0xf65d91db0bceb59d3adb17ae,\n                limb2: 0x116f3ba0a3285c727189a385,\n                limb3: 0x7587cc9d7fbe80757df4ca0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x8deb02d48f2ee3be7ae899ed,\n                limb1: 0x4b66f01a40c86e83fded6847,\n                limb2: 0x9c08bb4fe0abcaefc921a40,\n                limb3: 0x8bda1d762c986632aeaca1e,\n            },\n            r0a1: u384 {\n                limb0: 0x72be08cacb4795f5ddd8497f,\n                limb1: 0xfaddee2a55b5154b35e26966,\n                limb2: 0x7c67f5884f061f219cb8ff55,\n                limb3: 0x6d4fe75b0153bdec12dba82,\n            },\n            r1a0: u384 {\n                limb0: 0xc235fffbfefdf8e9ef54d2bc,\n                limb1: 0x6581ebd151a1e73c53b163cb,\n                limb2: 0xf60ffd0dd3608c742fba7902,\n                limb3: 0xe9437af3be8b35cbae1f171,\n            },\n            r1a1: u384 {\n                limb0: 0xdb98cff46b3033365ae5b731,\n                limb1: 0x19f3ec2adf9517d4533cdf7c,\n                limb2: 0xa60fbca3376090bf8f17f4b9,\n                limb3: 0x169bff5211482ee5e64f50ae,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7f3e552c73b94ea5aca6813a,\n                limb1: 0x5b9fb1191df92133f21209d2,\n                limb2: 0xed1129c457c9879b802641a3,\n                limb3: 0x19ac6d2e632d656188368724,\n            },\n            r0a1: u384 {\n                limb0: 0x4e5019a71576de9d1b3b34e9,\n                limb1: 0x8a250f675e1a5c87b1cafeed,\n                limb2: 0x1f045e71d9147c0c2a877e9,\n                limb3: 0x971468e238ef09daf2a1503,\n            },\n            r1a0: u384 {\n                limb0: 0x3da11ff3ac1dc5d5f3787156,\n                limb1: 0x41d8b0def9b93b1a5da143b0,\n                limb2: 0xfc9aa67ffbf77864568ad693,\n                limb3: 0x14f2603e77b3d32b5eedb50f,\n            },\n            r1a1: u384 {\n                limb0: 0x75d221048a3c1136668545d8,\n                limb1: 0xbf498d49345585ec9ec0151c,\n                limb2: 0x87fab9b2ed3acc02eb3065e7,\n                limb3: 0x4ab44ace239f75c81b269a6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x89eec90cedffb5559d9f7cd6,\n                limb1: 0x838145c7842da8419fcaba0e,\n                limb2: 0xa322ce58631513aed92ce0df,\n                limb3: 0x5a79df85b0a96adf6e2dab8,\n            },\n            r0a1: u384 {\n                limb0: 0xf36133a552f9211634fe2feb,\n                limb1: 0x712f911d31ea73387b467687,\n                limb2: 0xfb3d98acbbe375c161f9d2a8,\n                limb3: 0x11b7c924610a8268c34b8259,\n            },\n            r1a0: u384 {\n                limb0: 0x50e7cae27aa8b11d0d2bfe43,\n                limb1: 0xf88979ed0a59e7daa98895c9,\n                limb2: 0xdf00ec512e87f5862a699c22,\n                limb3: 0xcad7fd28c40cc541a820fe4,\n            },\n            r1a1: u384 {\n                limb0: 0x936b0157ffd80fabb32930f9,\n                limb1: 0xc6bffa14bca99e467c671b75,\n                limb2: 0x609410c23cb1d2ce4e5e9242,\n                limb3: 0x5aeec94c1d7d2fb257ce4f7,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x25287a87c1b2c3c6b31918d2,\n                limb1: 0xe370de594155a8f78023525d,\n                limb2: 0xfc32f19a5634c28d0fdade43,\n                limb3: 0x11e418fce45f7a3c6e512efa,\n            },\n            r0a1: u384 {\n                limb0: 0x75d5d71838d8ea9715fe06d7,\n                limb1: 0xa80c2c0bffa400aba5251040,\n                limb2: 0xc0278abc40904092e90b6e66,\n                limb3: 0x108ef6d09cde908ef27196e3,\n            },\n            r1a0: u384 {\n                limb0: 0xea269f730e5fe202ad27713a,\n                limb1: 0xe4c1f7d6b6c0b1f42caabd9d,\n                limb2: 0xfe90faef2c44002d8cc77466,\n                limb3: 0x11fc2e9b168eebd97097581e,\n            },\n            r1a1: u384 {\n                limb0: 0x36ca7984ec68a9173c99469d,\n                limb1: 0xbbea51c381392b3f2b8b23a1,\n                limb2: 0x24151a6b372c24850563fe68,\n                limb3: 0xcc41f12dd415378503ddbf1,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xa05df784a5a683833d2e1464,\n                limb1: 0x544aef13d7757e76ac4a6a2c,\n                limb2: 0x337b308d7d37a5e715e2c6a7,\n                limb3: 0x1971f0b4a71e609b35922e78,\n            },\n            r0a1: u384 {\n                limb0: 0x9afd8643829c2749745e919d,\n                limb1: 0x3fe5162dcc95efeedb645acb,\n                limb2: 0x771a45a92c45f43bb070b7fd,\n                limb3: 0x503aa962b29d72a5d9f6cf2,\n            },\n            r1a0: u384 {\n                limb0: 0x8e80c44f884a20fe7070ea42,\n                limb1: 0x78c55b9104f9b5b599cf0cf7,\n                limb2: 0x6aa9312bbcf5dad8ca58d47c,\n                limb3: 0xa42156c0b189a8b23065b2c,\n            },\n            r1a1: u384 {\n                limb0: 0x507ea5597266a41fa17c0e3e,\n                limb1: 0x61ca6c9ff959cacbd2e0502f,\n                limb2: 0xe921d3d10d8336d32c718050,\n                limb3: 0x15bd96df3160aaf601255ae2,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xa71edee844109581d751e805,\n                limb1: 0xb8a00b098913a289f078c56d,\n                limb2: 0x6da478fc532b7fca09418a40,\n                limb3: 0x1191d99b1ef0e58862d80422,\n            },\n            r0a1: u384 {\n                limb0: 0x75c2f440eb09724c5176a9d0,\n                limb1: 0xab65773d99721ebb172611d0,\n                limb2: 0xa99eaa66657366b3e9a3e3b5,\n                limb3: 0x15c7e46ba45790e4ec829ff,\n            },\n            r1a0: u384 {\n                limb0: 0x12c4394ba8b401e3d2cdee10,\n                limb1: 0x8d9953e7ef6751d3e9bea36d,\n                limb2: 0x10a977ee7f951ac566733a4f,\n                limb3: 0x16a460e20580c71c1c0744c2,\n            },\n            r1a1: u384 {\n                limb0: 0x9b4d92a98ad79937fb74c008,\n                limb1: 0xa800cb5b3af4b7be504667bb,\n                limb2: 0xb141cfd96b37e06a8df4fcdb,\n                limb3: 0x128942ad0ff6774eac6dca11,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xbb42fc51b2f0d50a3d7a6796,\n                limb1: 0xfcbc9d2df3136cbd1a372ac4,\n                limb2: 0xea313e60d4b8240679b0175e,\n                limb3: 0x1657a4b33e1400ef6e296282,\n            },\n            r0a1: u384 {\n                limb0: 0xaf91b402ecc6cf1a742796cf,\n                limb1: 0xab44b72c1fc2f89b5eaa0345,\n                limb2: 0x9f6a20404576105e15a4930c,\n                limb3: 0x10992497f5f8bf4451121322,\n            },\n            r1a0: u384 {\n                limb0: 0xd9355bfe72d92c6a0950eafd,\n                limb1: 0x89de0bfbfd06c9911cb2d6fb,\n                limb2: 0xe2092d1e99ab65a7a33ba1cd,\n                limb3: 0x1c317a68eeef4d833e396de,\n            },\n            r1a1: u384 {\n                limb0: 0x631d3efa10e591b7ebcb8dbc,\n                limb1: 0x6a4a0815d19cf339e4663ba9,\n                limb2: 0xe2fb7d9878d26c7c97299a01,\n                limb3: 0x4c4dc455aad226b744ebdd4,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x363f9f6e9d53eca0328e6c4c,\n                limb1: 0x43eec7c74e3ff2fa2180ef98,\n                limb2: 0xc59a9948223dbc16b551291f,\n                limb3: 0x284cfe02b07d3ff39333c3d,\n            },\n            r0a1: u384 {\n                limb0: 0xea6c388e24151607794c7237,\n                limb1: 0x7943928adc33394fb552687f,\n                limb2: 0x76103a90d6ab3bee6e576dbb,\n                limb3: 0x17eec2ea2baa42a1bf9e89fb,\n            },\n            r1a0: u384 {\n                limb0: 0x93b180c3b870b89a8483888a,\n                limb1: 0x16af0053338af8df2cd3e9ce,\n                limb2: 0xbf7031c6cce8d2490b7ab5bb,\n                limb3: 0x164ea73315847832dfc59d1c,\n            },\n            r1a1: u384 {\n                limb0: 0x2687d52f75d77442d4eb40fc,\n                limb1: 0x933ac245443011fac81f5ea0,\n                limb2: 0xa5b52ffa9e6d58739784a7fc,\n                limb3: 0x19fe25a70e38b245e579dbf2,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe51e461db9c85f42519fea6,\n                limb1: 0x234a9695204bd44f55ea4de6,\n                limb2: 0xc8d34c6b4580edfc55e023b1,\n                limb3: 0x16691c1bdf57ba041abb3d97,\n            },\n            r0a1: u384 {\n                limb0: 0xa81022cb0b3b0c523ae71819,\n                limb1: 0x47f7df16fff0877b21676607,\n                limb2: 0xdee4fe1d3c64b3fedec56326,\n                limb3: 0xcfbf5ccb325675b1a3becef,\n            },\n            r1a0: u384 {\n                limb0: 0x6d42b9d9e765f92b0817551,\n                limb1: 0x352adc09dd7760a5f4208a1e,\n                limb2: 0x5397846e3fff77f500da6dbc,\n                limb3: 0xe26d685c4365e342109d0ba,\n            },\n            r1a1: u384 {\n                limb0: 0x9bc1051782d84793806d878b,\n                limb1: 0x1642edf27f040ad57feb6f89,\n                limb2: 0x11a5d3523a88580869d28ca2,\n                limb3: 0xd22ff50c5a9bd729115a889,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe4efea113446e8fd94f1eea8,\n                limb1: 0xcb18c21d8448136352da4336,\n                limb2: 0xfc8cdfdaea1682e6fd084488,\n                limb3: 0xfc8dd7ffecc5c9c8a69491d,\n            },\n            r0a1: u384 {\n                limb0: 0x263cdfc966929543ffe7f0a1,\n                limb1: 0xaa611b31adcfed73c638211a,\n                limb2: 0x42cdea07a698860d491399b,\n                limb3: 0x4d0e0f7ef49a732e7480260,\n            },\n            r1a0: u384 {\n                limb0: 0xd6d8da1b24a4d916d664dba5,\n                limb1: 0x8eb3998d61387861f1455690,\n                limb2: 0xae1c21768b9aa7f3e94df161,\n                limb3: 0x3cc2fe6e6345650436278fb,\n            },\n            r1a1: u384 {\n                limb0: 0x3d6ed02228497455788a84b7,\n                limb1: 0x5671f2ed36be99f2c0aa4b99,\n                limb2: 0x64f760aec59aec125ee684b8,\n                limb3: 0x72922fee279ca672ae012c,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x30d36077b6d0262e218111c1,\n                limb1: 0xc74774ca1af660eaed4d8329,\n                limb2: 0x6448cecfde912a7d2029dbc,\n                limb3: 0xe743528ce0c94e1a76f2f60,\n            },\n            r0a1: u384 {\n                limb0: 0xe1f8a574cee0dad622d6fead,\n                limb1: 0xcd681358d077b827cc148be2,\n                limb2: 0xc8fb346621601764fa91b40a,\n                limb3: 0x133d21c52017365921207d63,\n            },\n            r1a0: u384 {\n                limb0: 0x5cb088f57e1e3f6a62571b37,\n                limb1: 0x4089cdf0fb67a7b1d79838b3,\n                limb2: 0x62401a2e57abb0652e0fee81,\n                limb3: 0xcc83c46ac38241e1c33aca2,\n            },\n            r1a1: u384 {\n                limb0: 0xfd94f04ec006d63b4825ecfa,\n                limb1: 0x96ef1f9240c32fdc393b81e2,\n                limb2: 0x6d46c2685a1a1c50e84c8b24,\n                limb3: 0x1528bf72bee83f2c80884dd2,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x967edf63810f66378035d9a9,\n                limb1: 0xbb41210c71a8e730070081a4,\n                limb2: 0x2b3e319d53a9ed42860fa77f,\n                limb3: 0x6278b145b3c7a6a3036ea47,\n            },\n            r0a1: u384 {\n                limb0: 0xaf80f0c00386668cb5abd055,\n                limb1: 0x65fd0d8e2a2e33029c34cd23,\n                limb2: 0x248c0e19a9bf0ed6ee322967,\n                limb3: 0x15b221eee9671d26db719f3,\n            },\n            r1a0: u384 {\n                limb0: 0x84c7a67ad0a0908ffed8fa8d,\n                limb1: 0x36968614bc1f3278ab15d41b,\n                limb2: 0xafbcdf72844d192abdb3ed34,\n                limb3: 0xb4edb23cae78d3d9b83472a,\n            },\n            r1a1: u384 {\n                limb0: 0xcd0ab14fee3b152169cc5f6a,\n                limb1: 0xf7e829100f6fe0680a97d094,\n                limb2: 0x733af72dfcd1b57ddb6a0304,\n                limb3: 0x1418dc868da9b223b09467e8,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x8f8bf2310745715d8e60675,\n                limb1: 0xe7983befc104f7bd4886ad3a,\n                limb2: 0xd6b5d3a93563b2103c29cec1,\n                limb3: 0x1902b1e10713c8d95829b014,\n            },\n            r0a1: u384 {\n                limb0: 0x392c934ad398e9471a2a3e6f,\n                limb1: 0xc81c0dc22eff61dca36ea27f,\n                limb2: 0x4605027ef09f9b7d03fcc1c2,\n                limb3: 0x142c2105c569b0e7aee457f1,\n            },\n            r1a0: u384 {\n                limb0: 0x86fc12d4ddb34349e58e0713,\n                limb1: 0x9a132e3db41060771e480d9f,\n                limb2: 0x6e00f3b7a9cbdf6ba01f3694,\n                limb3: 0xf3f4843686de973131d67ee,\n            },\n            r1a1: u384 {\n                limb0: 0xf7b6328930ed21138fcd8f92,\n                limb1: 0x354fd9f9ec8f828426279c4c,\n                limb2: 0x3df938a725947d029e1edf6f,\n                limb3: 0x1143440784148d84b5ae0952,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xb17b80c761f951e735a2d041,\n                limb1: 0xafc877c0c04208f63bf8a886,\n                limb2: 0x153ba811a82f51f9aa3b6016,\n                limb3: 0x184116d06dccf1c2017108ad,\n            },\n            r0a1: u384 {\n                limb0: 0x4c7b228ff22ef777b4f4ffe6,\n                limb1: 0x8a18bc657a788290b4a1a781,\n                limb2: 0x2222b3823a8b65258b2ef246,\n                limb3: 0x55c2710bd65597460c0f6b,\n            },\n            r1a0: u384 {\n                limb0: 0x81df44a2a9b9e826d77b92d3,\n                limb1: 0xad7a849671b36dcbfca86928,\n                limb2: 0x18fffc9503099b88e7cac1c1,\n                limb3: 0x315cb565ecea51d7c74a7d6,\n            },\n            r1a1: u384 {\n                limb0: 0x39e35c74aeb90d9fffb28774,\n                limb1: 0x91c388c611ba957ed3ed4f81,\n                limb2: 0xbfbc4f99e318cbc41997f64b,\n                limb3: 0x862e32a5891b9194a707270,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x8acd42eff277e12a1c665cd8,\n                limb1: 0xc8dd9dfb56ea54ca5c9d26e6,\n                limb2: 0x803b24ff12a9cd7524a26b87,\n                limb3: 0x27b1b3c904791e3fa942dcd,\n            },\n            r0a1: u384 {\n                limb0: 0x7a880435688221e820d4164e,\n                limb1: 0x9754d630e027f9217dd0fba6,\n                limb2: 0xee6cbf6da2000115b0cca0d8,\n                limb3: 0x162f5c264c2d2728aaa1f652,\n            },\n            r1a0: u384 {\n                limb0: 0x314a0d54f7db63dcd3d6c0e0,\n                limb1: 0x793c614f53a688375ca369e8,\n                limb2: 0x296c4ccd5f785e294abeb492,\n                limb3: 0x20d58632925a8df2d3d48bd,\n            },\n            r1a1: u384 {\n                limb0: 0x82c581e26e2e612aceaca787,\n                limb1: 0xe02d73cc25449c92dfd7f088,\n                limb2: 0x732270a5ec065ff678b3666e,\n                limb3: 0x17e813008da019a1fab544c,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x73932e90ae81b714f637b41,\n                limb1: 0xd8f3711a8fd93fd72b37a9cc,\n                limb2: 0x8f6ada570f26c1e6a53f2861,\n                limb3: 0x5731c6aa600bd4532b267cc,\n            },\n            r0a1: u384 {\n                limb0: 0x8a8109f0ca0fb9562c4d64ce,\n                limb1: 0xbf3993ec4da2f3066fc4d1a8,\n                limb2: 0x82967409e5b8929a76f60185,\n                limb3: 0x312bc2fe319294c401a076d,\n            },\n            r1a0: u384 {\n                limb0: 0x56ddd8c196371fb0093419b,\n                limb1: 0x806528309800613a1b0c9257,\n                limb2: 0x807a35a60f04f01393185f4d,\n                limb3: 0xccbed56d82049855d897609,\n            },\n            r1a1: u384 {\n                limb0: 0x2e1a6d5e5b690ebddb441dd2,\n                limb1: 0xf56e9d8601eb09c2491a54d,\n                limb2: 0xeb1109351a3c57b119c23f9b,\n                limb3: 0xff06fbf0813213028c7e555,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4a074239eac7dc93b8113ddd,\n                limb1: 0x64192efc9a09299ad173b34e,\n                limb2: 0x3e86b7943ceda2cc678e6719,\n                limb3: 0x13a3cf500109646aac4d69e3,\n            },\n            r0a1: u384 {\n                limb0: 0x89c20af4b5a694d4d6d9d45d,\n                limb1: 0x76071bd0d45623a4cfe9647,\n                limb2: 0xbaeda04445ec73fe1fd859d6,\n                limb3: 0x12f734fc3463dc7adb90dccb,\n            },\n            r1a0: u384 {\n                limb0: 0xa12928a1d5d6408853a05ae7,\n                limb1: 0xa8fc3f1aa38f3d6554357b31,\n                limb2: 0xbb5e7127cb9669d52daff069,\n                limb3: 0x525a9e909f39cb2e32cb71a,\n            },\n            r1a1: u384 {\n                limb0: 0x2bf733d3a23d1446da39720e,\n                limb1: 0x69c363f32dc0ed3a22acc728,\n                limb2: 0x3eb64a364ee2cb63222dc046,\n                limb3: 0x1e78c4855ad25e4e08ba1eb,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x9f063deced8ca77530af3f4c,\n                limb1: 0x144bdfaa00467ce19a578f40,\n                limb2: 0x3953497d0771124d9b67e427,\n                limb3: 0x12edfb0c935168616a313c49,\n            },\n            r0a1: u384 {\n                limb0: 0x10dc1d7902422eab8ec34907,\n                limb1: 0x12d2e25b0784cd54e8882aa,\n                limb2: 0x6c8797bc383b2c8d8dcbe8ae,\n                limb3: 0x9d9bc82c6c7d33addea4394,\n            },\n            r1a0: u384 {\n                limb0: 0x8ad26ea41a8e5290d3cfe9df,\n                limb1: 0x1477ceb694cc8d76e65b3892,\n                limb2: 0x6f7feca1d527322d8f55c7d9,\n                limb3: 0xe209e705b596e62d29d30f5,\n            },\n            r1a1: u384 {\n                limb0: 0x388372fda80402fd47838445,\n                limb1: 0xfc177a37cf1bab02000be775,\n                limb2: 0xe42caa0cb14387e64244843b,\n                limb3: 0x32e8d8f3a7bf87f74c34b23,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x1ed40e3c2cfcc055cd4958d6,\n                limb1: 0xd1453a4587d6c2ca2341043e,\n                limb2: 0xf79c2172e21b91ba79a5ea2d,\n                limb3: 0x65c82633f9d4d20c07f6ad4,\n            },\n            r0a1: u384 {\n                limb0: 0xc8398341fc07277f183c17d5,\n                limb1: 0x86bc2e62775af5eae61d9aa,\n                limb2: 0x403276e7635ed1cd34473d3d,\n                limb3: 0x18a18bd0be954bbff600c7c1,\n            },\n            r1a0: u384 {\n                limb0: 0x8b17fbda26b7133b0600c51e,\n                limb1: 0x48147de60df80344b55d8fb8,\n                limb2: 0xa0e018e36cfa14e2a39e57fe,\n                limb3: 0x70aed2d475ad180844d7587,\n            },\n            r1a1: u384 {\n                limb0: 0xf1d8e65deba9a3605b50946b,\n                limb1: 0x3677c5769dea1762e0a3a25d,\n                limb2: 0x5d4399ba6a9742e8f2aa1928,\n                limb3: 0x2d57160d6c66d1e0c2f0c0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd0df9414ab14375fa6806880,\n                limb1: 0xca2fbde48dfa612dd7651818,\n                limb2: 0x94d4d577683866abf9418786,\n                limb3: 0x7276c58d38d334aeb17d21d,\n            },\n            r0a1: u384 {\n                limb0: 0x33624773e56782652526199f,\n                limb1: 0xb8b611175cbe6c3cffc5ac81,\n                limb2: 0xed0e2567d17dff5ac900f3cd,\n                limb3: 0x98cb18ca7165c32cd3cc152,\n            },\n            r1a0: u384 {\n                limb0: 0x2dc597c44838dee671473465,\n                limb1: 0x42ece025c559c8181b720c1e,\n                limb2: 0xa5788ae10bc5c64c059e3798,\n                limb3: 0x16539b3c5dec7ca770e60c8b,\n            },\n            r1a1: u384 {\n                limb0: 0x4910c40e6111f70dcb5d6293,\n                limb1: 0x72177ec41f90ef3573b914af,\n                limb2: 0xfcdb8e13aecc36bc984d7dad,\n                limb3: 0x13b535802eb52f78f52b67aa,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe6882416d7bc0be138e4eeb2,\n                limb1: 0x1ffc8c27a2046327376e250,\n                limb2: 0xf96a7955cf8a3345e89477c1,\n                limb3: 0x31ae02e34d7d21957899dbe,\n            },\n            r0a1: u384 {\n                limb0: 0x148232d34a8da37b7adc99a7,\n                limb1: 0xd0a0095db108dfd24e92848f,\n                limb2: 0x89fb49e1a36591a6b189f964,\n                limb3: 0x1900bee131450e7d7a914ea4,\n            },\n            r1a0: u384 {\n                limb0: 0x97018429f16d24bc1e7f8af0,\n                limb1: 0x1f68aaf8291a6decfb708b43,\n                limb2: 0x1f700e88b537bffef39907e4,\n                limb3: 0x9cb633f82c6e595f1785e5e,\n            },\n            r1a1: u384 {\n                limb0: 0xd8d9d3a12a0dd7b129ffda0,\n                limb1: 0x7a94e9da792505fe4fbdb0da,\n                limb2: 0xf16eaac379266d5a4210e839,\n                limb3: 0xc24197c1ceaa3dd3de58b21,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5121ed1a88616e4d4db0595f,\n                limb1: 0x33dbd46ed7b06175cf41f23e,\n                limb2: 0xae1887221e200e7b0b2dd28f,\n                limb3: 0x179fae6949c974ac074721d7,\n            },\n            r0a1: u384 {\n                limb0: 0xec69c8ab1d267c9a6a6d05f7,\n                limb1: 0xa25badc2829f833ff2ba42c0,\n                limb2: 0x64aa44e985590c9763d34b19,\n                limb3: 0x13f17206143b411a732e3c25,\n            },\n            r1a0: u384 {\n                limb0: 0x33b78c61366dc7410c76b8f2,\n                limb1: 0x3a9f753c7f24e8f6f4fd395f,\n                limb2: 0xa6211e1c84e26ce0a0835268,\n                limb3: 0xce1328e759d3bc77c72f6b2,\n            },\n            r1a1: u384 {\n                limb0: 0xb82a77bba83aa44b3fe6d3c5,\n                limb1: 0x7a2266cc1586e32b4ce8c11b,\n                limb2: 0x6faabb2d25781b305c25694d,\n                limb3: 0x13ac4d9a6834b95da26fa06b,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6231a3597b09b6d5fda5c712,\n                limb1: 0x3f3bd12ca9ef48ef6199a7f4,\n                limb2: 0x6883383b5a445ca79fc407ee,\n                limb3: 0x141accc8970ace156fe95a36,\n            },\n            r0a1: u384 {\n                limb0: 0xe0c805067330b20430c585c8,\n                limb1: 0x8ff3e0c3028ea8f24ee6fb30,\n                limb2: 0xa368fc9a21efabd91ace37d9,\n                limb3: 0x18b35a8fd65ba4cbd734a0ee,\n            },\n            r1a0: u384 {\n                limb0: 0xf4e1f73d2ed7ccded6c419de,\n                limb1: 0xf379cd28811f89aeea7aee67,\n                limb2: 0x727c64c0e714ab6ea82391e8,\n                limb3: 0xf454aa00efef9460f382b49,\n            },\n            r1a1: u384 {\n                limb0: 0x952793660f1fe4300657022a,\n                limb1: 0xe8fa6c2b1aa542384940d1ec,\n                limb2: 0x5a1f19c729b4b225b1501e31,\n                limb3: 0xa5b1272b68436f9433d112f,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xb5c7f333fb77fb640c54d364,\n                limb1: 0xb370f382462c835aab5cc997,\n                limb2: 0x3d5c94deb689f57008552a5c,\n                limb3: 0x11ae8eb40f5e055e30da56e3,\n            },\n            r0a1: u384 {\n                limb0: 0x67851527c4720d34d6bcaaa8,\n                limb1: 0x924dd3f263abdaf7b83f876b,\n                limb2: 0xae1834310910f611638e9935,\n                limb3: 0xc901716635675ee60505d5d,\n            },\n            r1a0: u384 {\n                limb0: 0xe65e10fdcc7035244523c278,\n                limb1: 0x6d6579ed84fe7ac624373c96,\n                limb2: 0x216959b27efc3c4aef7344d3,\n                limb3: 0x16ea4125e47ade4a534b117d,\n            },\n            r1a1: u384 {\n                limb0: 0xd4486351851ac10086e252a6,\n                limb1: 0x71da57cafc2206d7b9f3e19c,\n                limb2: 0xa20b7261682609eedc279d10,\n                limb3: 0x59452018f5c136620b13c6e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7ee6a5f3ce669de80b52ba42,\n                limb1: 0xa7d66db543d3c6a626f79dea,\n                limb2: 0x135c684f9ac0e0a34315e044,\n                limb3: 0xaaafef3c4298542248b3a58,\n            },\n            r0a1: u384 {\n                limb0: 0xe0b267ea1f8e8dc2b83d62e,\n                limb1: 0xabac56946f0699334fa765e6,\n                limb2: 0xee0060a937926e9b6d6adb90,\n                limb3: 0x13d96385b510deff2f4d1d32,\n            },\n            r1a0: u384 {\n                limb0: 0x1271c3349afe8fbfd4d7ee54,\n                limb1: 0xc4df31a1a0ae89c5728ee819,\n                limb2: 0xa0de891b771af1ba8a67f8db,\n                limb3: 0xf69200f56879e50a92ecd6e,\n            },\n            r1a1: u384 {\n                limb0: 0x3260bde1e37542b8b8465e10,\n                limb1: 0x7c3420aa9e48318a6606ee07,\n                limb2: 0x126b5e1ded963ffbb6adb4e2,\n                limb3: 0x18d1f7ae28741bb590bb39a6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x181fe8e691b0734fc6c8b3e3,\n                limb1: 0x616410c0af8a1e197fb5f75a,\n                limb2: 0xb38eb80de6b3b0f7f71aef9,\n                limb3: 0xcb084d46b4282aacbed6a60,\n            },\n            r0a1: u384 {\n                limb0: 0x8a6b2c47cc1ca9c98045b7f6,\n                limb1: 0xcbe8b14d674bbf60db98d808,\n                limb2: 0x46b9bb451cf32e861adae13a,\n                limb3: 0x53d38b36897a4aeb430bd04,\n            },\n            r1a0: u384 {\n                limb0: 0x23a3e6d947b9435c66858403,\n                limb1: 0xf2ec49526cefd9e1a3004d7,\n                limb2: 0x9b3b0253588d874ed9d95a3,\n                limb3: 0x13ab2d7c5d048283d6322ddf,\n            },\n            r1a1: u384 {\n                limb0: 0x8c68e023a6d85684960340a1,\n                limb1: 0x779e01cddbe6c1a646dfe94e,\n                limb2: 0xaf9acf72586d61ea2e56cbe8,\n                limb3: 0x1978e28ea8606bfa979cd91,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x95db0469c00d953ee476c048,\n                limb1: 0xa412df73ae5febbec296a5fb,\n                limb2: 0x16b9fdec9340c8f3aefa561c,\n                limb3: 0xfc955cb99bde258d8760197,\n            },\n            r0a1: u384 {\n                limb0: 0x83c7d7a804031b10c844d0cb,\n                limb1: 0xfb88180286d20648b40806c0,\n                limb2: 0x31368cfad1bcb8ef19b9d382,\n                limb3: 0x8fd02881a5331dfb0922a3b,\n            },\n            r1a0: u384 {\n                limb0: 0x2513b777e720406cfba171f4,\n                limb1: 0x9d9da48be5e4bae3bd3e8c84,\n                limb2: 0x8d75547712fc62f6f651762d,\n                limb3: 0x5f0f52ede58374df52c0643,\n            },\n            r1a1: u384 {\n                limb0: 0x13d6b4aa8d9a46d5720e1b74,\n                limb1: 0x5b93ebf4000945ce87c9dcf1,\n                limb2: 0xffe34203a0c826e972d857bd,\n                limb3: 0x1870c14dc5ad5a661156fd61,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4d1cdbf8dbab3c8928b0ea75,\n                limb1: 0x58191227095b21b380520bca,\n                limb2: 0xc8b2edfc1fcf1d47ba6bd853,\n                limb3: 0x165cefae4bd7b09e83aea4ac,\n            },\n            r0a1: u384 {\n                limb0: 0x13f43fbb712c938711770d43,\n                limb1: 0x67b7fe6c084a6b9d0d02edda,\n                limb2: 0x7b0238d25ec12dfd2bc787a9,\n                limb3: 0x11065816aed6fac8813b29d4,\n            },\n            r1a0: u384 {\n                limb0: 0xdf7a103b140e34e5fe400ff2,\n                limb1: 0xad80cb5f3e6cbfca0f9ba6c2,\n                limb2: 0xd22ace697a5990edb0d940f4,\n                limb3: 0x185537f3f8bb62a81efb3777,\n            },\n            r1a1: u384 {\n                limb0: 0x78081d7fc6aa11ec6d3eac29,\n                limb1: 0x4c8089e6844b749eabf183cb,\n                limb2: 0x7005abf6c23d8902a06826c0,\n                limb3: 0x1ec6348dffbfbdf92d2018e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x31f476324f857ca9daa71d3f,\n                limb1: 0x5b64b681867d0f5505b9f139,\n                limb2: 0xb89e509fc5decaef9cb221f1,\n                limb3: 0x5b8f08ef767ca4cf5f36622,\n            },\n            r0a1: u384 {\n                limb0: 0x8f44b24a23750c8f0fa6270d,\n                limb1: 0x554f99004f5b1f2a21b02609,\n                limb2: 0x3710c6daa7cac50a8ca6de8,\n                limb3: 0xa3b4aea7c32a8fc4d9a662b,\n            },\n            r1a0: u384 {\n                limb0: 0x93f0fbf4c4d931c3a733902b,\n                limb1: 0x3a038220fa2da3a7087689cd,\n                limb2: 0x5bc677d1583979bda5797f17,\n                limb3: 0x11996e8759ccb1bda7042160,\n            },\n            r1a1: u384 {\n                limb0: 0x1ee1d1db6f033786016fd46,\n                limb1: 0x2d4942546551a7b5afb1ee11,\n                limb2: 0x5c0b006bc71d7e27359f5f02,\n                limb3: 0x35c97a7e460075f4d915117,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc17720fe750cb299759cac,\n                limb1: 0x3099fd19a6b92e3ee803934a,\n                limb2: 0x346f95d569d19d6f13b360ae,\n                limb3: 0xfe3b36652505dca379b0de1,\n            },\n            r0a1: u384 {\n                limb0: 0xe79d54704a2ac5fe8ec036b3,\n                limb1: 0xd0c59443c6fe3cfc7ed07143,\n                limb2: 0xd35ba6f1be9ef2a32df5ce99,\n                limb3: 0x13c0add36a1987486340d508,\n            },\n            r1a0: u384 {\n                limb0: 0xa7dbcd98dc000e769a0c1640,\n                limb1: 0x4669b3e3c0832faa8a1bc742,\n                limb2: 0x7f86a3143278c34ce3f7ff7b,\n                limb3: 0xb1d5e7632fb29ed83475f08,\n            },\n            r1a1: u384 {\n                limb0: 0x7e5b15b8d85c3ddb341f6b3b,\n                limb1: 0xd7a537aa55ed85a2aac5ad6c,\n                limb2: 0x188d659313156b445ea5eb05,\n                limb3: 0x504c8faecb23614b32d77a9,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x813cf8d46ec722731cb2e790,\n                limb1: 0x3ae401e3a2c43950dd3e14a5,\n                limb2: 0x7f1e2595a7bf3cb9644dc3a2,\n                limb3: 0x9a64184b516425353d3342b,\n            },\n            r0a1: u384 {\n                limb0: 0x1be4ad4c913b7f23ef8afc45,\n                limb1: 0x4b9c5ee3da9ae172d5612c39,\n                limb2: 0x362a12402d4cd3c50c5a5bc1,\n                limb3: 0xaf426e78303a8cf5a43520e,\n            },\n            r1a0: u384 {\n                limb0: 0x1a1fbd631479e96bc85c9b39,\n                limb1: 0x755e043e52470551dc47fa77,\n                limb2: 0x2fd80441adcf386b79dfadce,\n                limb3: 0x15cdd2f908202480bb0f56fb,\n            },\n            r1a1: u384 {\n                limb0: 0x493a7937f956ab6960bb1a74,\n                limb1: 0xec402c0b38b6cc4d5094363,\n                limb2: 0x3d52461743a5dfe63d2e7a33,\n                limb3: 0x92150697852cb2d08c3521b,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc944c320bf8646db058b9131,\n                limb1: 0x31a88361a84a466aa6b36d75,\n                limb2: 0xdac588f1f3c7445319f734c1,\n                limb3: 0xcac64965fdc6b4f2086ec4d,\n            },\n            r0a1: u384 {\n                limb0: 0xa9525478edbdf7abe422ecde,\n                limb1: 0x4e92c811d5f5d89e35dbfc2a,\n                limb2: 0x5d684f4f06473e718f79f00c,\n                limb3: 0x88952df34006bf1b7ce357a,\n            },\n            r1a0: u384 {\n                limb0: 0xa1b9405e17e76b1755dfb581,\n                limb1: 0x30a164060d8e4bb7b88a1c77,\n                limb2: 0x5972aaf0140f12d11fbbf2ab,\n                limb3: 0x483fd927267aa9641997b1a,\n            },\n            r1a1: u384 {\n                limb0: 0xad6cac2f613f81aa42d4a895,\n                limb1: 0x40f8cc01303a5997e99bda9a,\n                limb2: 0xb01bfb6633906b1ea0a12e46,\n                limb3: 0x101863ec8507dd5b31e4faa4,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3c31209a4897e0f66a542078,\n                limb1: 0xaca6cfb5457ca1adc99138fe,\n                limb2: 0x72bf4739ae7b1a8652c823a2,\n                limb3: 0xdd9144f8c45e6091a6714d7,\n            },\n            r0a1: u384 {\n                limb0: 0xc8942e9d5abaeec4938f2308,\n                limb1: 0x30ff4bdf679bd4a2b87fa34c,\n                limb2: 0x21acf101ca7ff6cd9129e67a,\n                limb3: 0xda6ef8b0ede3a09d1a5c00b,\n            },\n            r1a0: u384 {\n                limb0: 0x2c5038a7eeaa757c15d205e,\n                limb1: 0xe9d28bbd2c18d52e1b9024f2,\n                limb2: 0x959d4240dbbc46a2c5bbb5b,\n                limb3: 0x9cd8b42cb440fc77607b954,\n            },\n            r1a1: u384 {\n                limb0: 0xd35f7d36be1bf213c01aba98,\n                limb1: 0x655bc51b43c6394245778244,\n                limb2: 0xd626d74e22844c1a8e2cc950,\n                limb3: 0x28c4b291b492ca43266277d,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xfc9082f258930992ee9bf761,\n                limb1: 0x25180c08fdde19200beedd44,\n                limb2: 0xc756fce25d6036e074aefc7e,\n                limb3: 0x7d15791c8dae11ef3f925f2,\n            },\n            r0a1: u384 {\n                limb0: 0x4e583c6a2d448a423dbdf113,\n                limb1: 0x9ba1612b6d352bf5ce49bc71,\n                limb2: 0x351d8295b8c7a5bc97d6f32f,\n                limb3: 0x2b7203697312b8ecf30eb04,\n            },\n            r1a0: u384 {\n                limb0: 0x356ba3cff7bdc33fc3b23217,\n                limb1: 0xe25f4f3ce36e7bd6de98a7c,\n                limb2: 0x217dca629473abb6c457c67b,\n                limb3: 0x104fd19f688af37eb9fd0d17,\n            },\n            r1a1: u384 {\n                limb0: 0xd2ba6cc56638c175356a56da,\n                limb1: 0xac2ab9c65110ca454592199,\n                limb2: 0x87b1ec93cb67f7b775213e56,\n                limb3: 0x102d4a4c73948b8b8ab0444e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xabb764ac8036eb503e39861f,\n                limb1: 0x22e8fa738389a0378352e2d2,\n                limb2: 0xab10fb803ca53103ce99fc28,\n                limb3: 0x831ad8b93ffed9245877b44,\n            },\n            r0a1: u384 {\n                limb0: 0xf721e83ab0eb9fa28b5d9349,\n                limb1: 0x71c18646ef565689efc545c0,\n                limb2: 0x590ec1d6f3abfbdb3f9f8b0d,\n                limb3: 0x17707d0e47e7a1044a4fd9c6,\n            },\n            r1a0: u384 {\n                limb0: 0x16d0a838f9b0fc16504dd27,\n                limb1: 0x5ad87ce7ad12ae830368b776,\n                limb2: 0x62490899b4f397e09c44152f,\n                limb3: 0x15528a389da1580f43d95ade,\n            },\n            r1a1: u384 {\n                limb0: 0xa715dcbb03bc2faac9d64bc7,\n                limb1: 0xbd9b3ab159baa441a3ff56ad,\n                limb2: 0x257f876f487a6dab4fa17c81,\n                limb3: 0xecfcaeb005ca1b7f92bf862,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x84bef2ae28f4fb378ec1eeb6,\n                limb1: 0x1189e835406150f7fbe047cd,\n                limb2: 0x8d7fa056d5bff703455219b9,\n                limb3: 0x17b55cffc9c559918a9ffbca,\n            },\n            r0a1: u384 {\n                limb0: 0xbcd55d1a045238c11947faae,\n                limb1: 0xfddd35b7f062ea97fa82612f,\n                limb2: 0x73dbd0a4863e8634338c4c3,\n                limb3: 0xfd6b167fe3d1476b5da9dfe,\n            },\n            r1a0: u384 {\n                limb0: 0xbcf99cf3772f639491c9a228,\n                limb1: 0x1f8ca8645ecbeb98bb9ff5ae,\n                limb2: 0x82f62cc92f240ff8bc4fca5,\n                limb3: 0x6b4211c4d1b18ea0c5a5e4c,\n            },\n            r1a1: u384 {\n                limb0: 0xe60a226e7c7d83e720ce3f23,\n                limb1: 0xe357a6f93412eb508cc034c3,\n                limb2: 0x532ca9a4ca346dd2e0913328,\n                limb3: 0xae125a2c4b74ea5caf9317f,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x81c96089bfd7744eef34464e,\n                limb1: 0x37583018d3364f85efd0c5ec,\n                limb2: 0x20c144a0d93e6ccdc66c38ae,\n                limb3: 0x9751fa26963b775df8f3962,\n            },\n            r0a1: u384 {\n                limb0: 0x5c8323716b77fe057a8cb7ba,\n                limb1: 0xc82e11ccf5b11d49ed4b32b0,\n                limb2: 0xe56585a0b82123c633345703,\n                limb3: 0x13f124a0518f365218b1a009,\n            },\n            r1a0: u384 {\n                limb0: 0xa093dab7e233ac8439570651,\n                limb1: 0xd901c2049a6a54c71e11808a,\n                limb2: 0x1e692509d6d11c02341d4d0c,\n                limb3: 0x12fb44f950a81879a6c0334c,\n            },\n            r1a1: u384 {\n                limb0: 0x4c6dfaea5424692f1a1e29d2,\n                limb1: 0x5abec8e383520c70a53a980e,\n                limb2: 0xd1285ddbd456d6b3671ea61c,\n                limb3: 0xbe7bde925a4027b9de0a86e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xcee35811d6215a2f4fbcca7e,\n                limb1: 0x87a9f5ffd94e460a020bdc94,\n                limb2: 0x7b4027d6083e7b569c7b1c5b,\n                limb3: 0xfc0537dcd5dd9e6b1ad6751,\n            },\n            r0a1: u384 {\n                limb0: 0xf9d48875a4a0ea5b6dc1ccf,\n                limb1: 0x25cc4de42d310d432c6d742a,\n                limb2: 0x6ee89fc1eee14096b8eaced3,\n                limb3: 0x1796255a42c0c51c278aec7a,\n            },\n            r1a0: u384 {\n                limb0: 0x25a248f2439f04533e64d80f,\n                limb1: 0x98efa1a63ae245d749997366,\n                limb2: 0x475443b9af6f362e8d49e2f3,\n                limb3: 0xcac2920de98589be71736c8,\n            },\n            r1a1: u384 {\n                limb0: 0x7f87ae7bb3fbc7cd3298c3a8,\n                limb1: 0x3a353e1542c8d7044c554347,\n                limb2: 0x582f0c10eae19c9dbdd6b54e,\n                limb3: 0x143d3dbcf094964341111145,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x9c4a4d3c7bb2576aeac0337b,\n                limb1: 0x8b9250b2bed82359a757e126,\n                limb2: 0x2d7dd2e4d3d0945ac3d9cb88,\n                limb3: 0xa0bad126c265d46d51689b7,\n            },\n            r0a1: u384 {\n                limb0: 0xf65a98dff64d2a0fc947454f,\n                limb1: 0xa50259b7484098611c2cb9fd,\n                limb2: 0x5a51b1c4671888accdca74af,\n                limb3: 0x133a4335f59c0259f1a3ff19,\n            },\n            r1a0: u384 {\n                limb0: 0xdde88be699f516d731c68610,\n                limb1: 0xce004ded1806688e8e7c458a,\n                limb2: 0x932f3c1c8e56d4b9f19eb7e9,\n                limb3: 0x124f291f47d76455477102fe,\n            },\n            r1a1: u384 {\n                limb0: 0xa97c633609d63d754d4a2692,\n                limb1: 0x3c5ba5df2f9bb1cdcfb55e97,\n                limb2: 0x19aa69b7f4751e5e39459c7e,\n                limb3: 0x3f5780b2dcaccad745e1d15,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x176b393abcd0ce4e1a0abfe6,\n                limb1: 0xa27e43c4813e25e3825d4305,\n                limb2: 0xa2b625e708805f3d8329056e,\n                limb3: 0xbe9471b1fa793d178fafaa5,\n            },\n            r0a1: u384 {\n                limb0: 0x8772f1e72349ac1c28dd93f1,\n                limb1: 0x7f3ca6e092edc430dfdae0d4,\n                limb2: 0x99aea3d3180417f157e0a1d5,\n                limb3: 0x107589eb5f841423b30267db,\n            },\n            r1a0: u384 {\n                limb0: 0x6f3192c426a15b366fd68e0c,\n                limb1: 0xa09c70b764bac8ec13b8e84c,\n                limb2: 0x9f4166c3a19ec3bade0deeba,\n                limb3: 0x113ef2d7612b466865ed0d14,\n            },\n            r1a1: u384 {\n                limb0: 0xf51d41ee3760589f1a38cb60,\n                limb1: 0x8366651516bb0321ba4e5071,\n                limb2: 0xcc73dc7bd0438d3fc3993c27,\n                limb3: 0xcddb0e17a1abc6f8779d547,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xdd3830612c58d544327ca0f0,\n                limb1: 0x1142cd575c788d8d19a24ba9,\n                limb2: 0x45ea7f0421cb2dd4e5b4ed7b,\n                limb3: 0xfb69c6a2cbfc9dfb9b01427,\n            },\n            r0a1: u384 {\n                limb0: 0x875ab3c75d3a4e43d10b2503,\n                limb1: 0xf7cee1313a095fe9e31b7072,\n                limb2: 0xe85be88d689d67e6e9835268,\n                limb3: 0x10635d3a601f92ab21801ab8,\n            },\n            r1a0: u384 {\n                limb0: 0x9eb9ef4ae7e0f7713d97450c,\n                limb1: 0x8dfc81038830750d79da8b26,\n                limb2: 0xc17475937901d8cadba451ca,\n                limb3: 0x6f9f723841ae3e1a88c34f4,\n            },\n            r1a1: u384 {\n                limb0: 0x71e84e872166781dda7182bc,\n                limb1: 0x9dde7059d6c002a7f762da96,\n                limb2: 0x2b9353ca4892a788389ca0fd,\n                limb3: 0xd413552182113308d1bf463,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3d43ae9828f4d7d32e67b5b,\n                limb1: 0xc911d37f003edcf2ffc8c9fa,\n                limb2: 0x6c001f16c0f2e789787cbf46,\n                limb3: 0x77e0463d05f6290d05e7dfd,\n            },\n            r0a1: u384 {\n                limb0: 0x2ec1174f60371df515bea212,\n                limb1: 0xaa40ca6330076c4664c991be,\n                limb2: 0xaf5afb2da2bbd96b3b9faaf4,\n                limb3: 0x5aebe5e1b60777fd8bcbd90,\n            },\n            r1a0: u384 {\n                limb0: 0x8d11d501bb6fd58ab12db0a6,\n                limb1: 0x789e3289a146ee25ee0a86eb,\n                limb2: 0x8c876d8e1b63dbfcc9427e3c,\n                limb3: 0xd8ed1716d646a39571c3cef,\n            },\n            r1a1: u384 {\n                limb0: 0x52421b90854ae1be38c267b8,\n                limb1: 0x50070ae589f60e3c6b251b88,\n                limb2: 0xeff601c6612d2135059bce20,\n                limb3: 0x15001445b3ca05704edef7b7,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xcc1f58585e1d7b5bd45c4c1f,\n                limb1: 0x745110cbba12e028cd54150c,\n                limb2: 0x2ce6cbed2508c5d828082677,\n                limb3: 0x28a36f542a28f6997a811fc,\n            },\n            r0a1: u384 {\n                limb0: 0x541d567dcc7fbea97520cd94,\n                limb1: 0x65d407bf06f076619981fe2e,\n                limb2: 0xd583e9bfd967becef21bf75f,\n                limb3: 0xac2c40f46751f043fe2833b,\n            },\n            r1a0: u384 {\n                limb0: 0x92c58aae975c98038f79305,\n                limb1: 0x7d1ce0079826b8902c5d46d3,\n                limb2: 0xf99d7ba5cb12513a32fb5eec,\n                limb3: 0x7cc8363ce478f6d8f184c26,\n            },\n            r1a1: u384 {\n                limb0: 0x8397c406c8e69df7b1cea699,\n                limb1: 0x4a543e21f4fd830fab085fcf,\n                limb2: 0x25a94f2ddc7a920fd1361d5b,\n                limb3: 0x16a2f7057acf7d7df785557d,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x87937770aff1215b3c8aa2ef,\n                limb1: 0x7af4729d092f8c530e0d5d53,\n                limb2: 0x72dceca83166ae9b74e474e3,\n                limb3: 0xe4dab5809b2b1b131aea3fc,\n            },\n            r0a1: u384 {\n                limb0: 0x149aba7a16585e9fbdfde171,\n                limb1: 0x272eab65584693c7f1473254,\n                limb2: 0x7ab33331899bbd8cf6d0eb1a,\n                limb3: 0x1a698cde3793a423932d0f1,\n            },\n            r1a0: u384 {\n                limb0: 0xc1206df604eca5f7f500aaa0,\n                limb1: 0xdd96a086a731b8db0ce56191,\n                limb2: 0x65310d5aa0d6051cd1892f3d,\n                limb3: 0xae6c26b6f048aaa9fb89d4e,\n            },\n            r1a1: u384 {\n                limb0: 0x32d38f22f61a778309b0d9d5,\n                limb1: 0x6e22b0d5bae04b5bcc4f1200,\n                limb2: 0xc486b7747b268b5e4e7c5e50,\n                limb3: 0x1932e2f6edad976aba23c400,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf8c9e8b4405badfa94226735,\n                limb1: 0xe35370c03766b0439ba9bc0c,\n                limb2: 0xefd8d2d0063990aea5570748,\n                limb3: 0x125e8f976f7536a2e85ea3cf,\n            },\n            r0a1: u384 {\n                limb0: 0x8f2d3d1bd687824c71ce27fa,\n                limb1: 0xd5946aef2f36a4cb42aee9b,\n                limb2: 0xce15918bb8dbd901b9685864,\n                limb3: 0xc0299d504b8b7bb5ff23b7f,\n            },\n            r1a0: u384 {\n                limb0: 0x9a63e8f36e7127f93b5fab1e,\n                limb1: 0x52d9ab603e72bca7b8fc5284,\n                limb2: 0x8f734c44e7ba040f4a30952b,\n                limb3: 0x1478222c63826742286f720,\n            },\n            r1a1: u384 {\n                limb0: 0x57fd0e62234f512c20e97da2,\n                limb1: 0x876dd44c8838d26ecfad71b0,\n                limb2: 0x9c591e15eb6492035916a674,\n                limb3: 0x13830268b58006ff03775156,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3f1a504c2ca77f19997e6f9e,\n                limb1: 0xc0280e01fb002d9cf729292a,\n                limb2: 0x94b16f0117372c50814ed689,\n                limb3: 0x93fcabcbff9725332fceca8,\n            },\n            r0a1: u384 {\n                limb0: 0x640748b204326bc404360efa,\n                limb1: 0xcd8d364f90ded1150e8a1cbd,\n                limb2: 0x5bfd4271d8985fc5165ac886,\n                limb3: 0x808eccc45ff3c8d95d12bdf,\n            },\n            r1a0: u384 {\n                limb0: 0xc3ddbc8776cf4adad76e60c2,\n                limb1: 0xa4d94ec522c73e9132d0828f,\n                limb2: 0xcdc071c7519d2add39a87784,\n                limb3: 0x999ac8cb855c030ea4823ff,\n            },\n            r1a1: u384 {\n                limb0: 0x87d3939873b4d0b73bebc618,\n                limb1: 0x477c4bd9edf9b8d0a6814448,\n                limb2: 0xc4785670713282577ce1b06f,\n                limb3: 0xcbb49b77bbb8dfff876c014,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5863cf017f4f31c0054a3612,\n                limb1: 0x5a1ef8d1d2c315dd8bc6212,\n                limb2: 0xe33ed175b6d1a029dda7c9aa,\n                limb3: 0x182115eb42220d34f08e487d,\n            },\n            r0a1: u384 {\n                limb0: 0xb90bfad204b39a3cbcac7b4,\n                limb1: 0x73b8d9e10bc6022a0994e39a,\n                limb2: 0x7f5daebc21a409de8913242d,\n                limb3: 0xfc2db9cb25d08faf7c832,\n            },\n            r1a0: u384 {\n                limb0: 0x26d0221ad0d5ae39d7d33a8,\n                limb1: 0xbae8e0d584ccaa52aeab179,\n                limb2: 0x59de453ae38340185debc29f,\n                limb3: 0xc5a021a1d3134aa31cb39ed,\n            },\n            r1a1: u384 {\n                limb0: 0x7472a64d3fccc64229059166,\n                limb1: 0x361a6711e93f12f3d1cb0320,\n                limb2: 0x6bf192bb96314516f10b7449,\n                limb3: 0xcaf028327c4bc3f8af13387,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xeb0944547700f042e0e585e6,\n                limb1: 0xcb54fa1bd3a22b31e146eba9,\n                limb2: 0x7f8b0b22ccce3ab5d4c4a6c2,\n                limb3: 0x8db684ceb39ca0328b9483d,\n            },\n            r0a1: u384 {\n                limb0: 0x4160e63c5da74cdf92293b93,\n                limb1: 0xcaca05d0a73b8498b9a903a0,\n                limb2: 0xd515d294c426597840e358b6,\n                limb3: 0x13f4bc5ec404f999bb87d398,\n            },\n            r1a0: u384 {\n                limb0: 0x6b103da093cfc45f10c1717e,\n                limb1: 0x5adae0ed434b279585a01644,\n                limb2: 0x8713ed279b4ef038593b6ff2,\n                limb3: 0xc1283b57d9bf775bac4baf,\n            },\n            r1a1: u384 {\n                limb0: 0xf0902dcb78708b121be9c5e5,\n                limb1: 0xe54c2b77058ade926b8d6d31,\n                limb2: 0x8ff0eb114bc9ab91b267f33a,\n                limb3: 0x3bb58ab0df4567eb62c2fb8,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd53473f5ac7b5e99de412ea4,\n                limb1: 0xf6c216059e7a2a6b1a09d23c,\n                limb2: 0x5de59d8956f5a84da299063e,\n                limb3: 0x159ff2806d40ff15099d5204,\n            },\n            r0a1: u384 {\n                limb0: 0xfdccb0d7c9716c23df3ced8f,\n                limb1: 0x14e4ca22ebdbc559a20177,\n                limb2: 0x5b60b25f325eb68e4cbd45d,\n                limb3: 0x69a7d5ac5a38cce584e0b0f,\n            },\n            r1a0: u384 {\n                limb0: 0x903bac45b703185c327d9669,\n                limb1: 0xe524dad4130c677c5a3b0f31,\n                limb2: 0x11518ec180b31fd2f516e8b1,\n                limb3: 0x29448dd80ce3c75c8b0d685,\n            },\n            r1a1: u384 {\n                limb0: 0x134286c732f95142935a2a98,\n                limb1: 0xc493200ca6cd119550bafdd3,\n                limb2: 0x7008cba4cae32054d22edea4,\n                limb3: 0x15da5ffa50e36869f0f2ac43,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe5d3fc39844c4e589e7eb492,\n                limb1: 0xb684f2aca8ad6c2ad9ccb7b8,\n                limb2: 0xf0b5af70fc13951f7f39d7df,\n                limb3: 0x16d3fc0506ddb9ebfdb25df6,\n            },\n            r0a1: u384 {\n                limb0: 0xdd6f7e7bd7a0a9950245a69c,\n                limb1: 0x3b1450c65c42587028404440,\n                limb2: 0x3254fe16f1c0a3448b21df94,\n                limb3: 0xa6be2d559107c2bc483a8f,\n            },\n            r1a0: u384 {\n                limb0: 0xbddf678368c48a8e85f5c779,\n                limb1: 0x41200c401f8eab124f7a1368,\n                limb2: 0x42f89ddb63ec260743821878,\n                limb3: 0xb89fcbcdafbf02998d7d39c,\n            },\n            r1a1: u384 {\n                limb0: 0xdf81c700b8bbb46d56e45aba,\n                limb1: 0xafff8fb495808b125943f958,\n                limb2: 0x781365baaf374f6c695e0135,\n                limb3: 0xb9f91a65aebc5ddd1c03eee,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5edf9450f71e9104f1c374e9,\n                limb1: 0xcfd112580006deba5077fd8a,\n                limb2: 0x289c80bcf75761bc030bda9d,\n                limb3: 0x142182d337d4bdd0a9dc0152,\n            },\n            r0a1: u384 {\n                limb0: 0xe3f1affdcbbd3809a6881f8e,\n                limb1: 0x55f40359611c687f96c91dbe,\n                limb2: 0xb90435a9e7260873c34a0cd4,\n                limb3: 0x113f465ca312058e0cd541d6,\n            },\n            r1a0: u384 {\n                limb0: 0x85f3a8c5d4928087f1ef8229,\n                limb1: 0x62e48188da4d79f1a88f24ba,\n                limb2: 0x58691c7e87e7ecb6e855a469,\n                limb3: 0x25bacfd7256f159ca3eb0e5,\n            },\n            r1a1: u384 {\n                limb0: 0xfc830160c50a4b17a2dde63b,\n                limb1: 0x1bf46813a25e8e58ff928d53,\n                limb2: 0xe63b74e85e2032c28808627d,\n                limb3: 0x9e218f143196d00fadb36c6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x12d7f5c02580ec2a4ba0a629,\n                limb1: 0x1ca40d1ec830247ff1341e78,\n                limb2: 0x593e73ea84eba1c996c852c3,\n                limb3: 0x84ab3d52609f5caf813d26f,\n            },\n            r0a1: u384 {\n                limb0: 0xdc2b9a2a9b72f187cb411858,\n                limb1: 0x90c4f86b4683bec50d580ed,\n                limb2: 0x5ba5198fcbb94aa3717bd5c2,\n                limb3: 0x5236a5b01a4fd2c95dbe588,\n            },\n            r1a0: u384 {\n                limb0: 0xdd048a19481a00e4f3165462,\n                limb1: 0xe828205548a806450d618e75,\n                limb2: 0x9ee5b67676d457e228884f60,\n                limb3: 0x128250d867da43f6fb557d16,\n            },\n            r1a1: u384 {\n                limb0: 0x906239db66fe95321faa08f5,\n                limb1: 0xd546336aeca0472ea130a9b7,\n                limb2: 0x70ac85b42ab50da2baf4dd17,\n                limb3: 0xaaaf2e3d7a2240eb213f3fa,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x2639eca99f5b1f6e6d095faa,\n                limb1: 0x7322d2c5cd33e33d6fd2e0ca,\n                limb2: 0x1c7bca0054ff60c0db156676,\n                limb3: 0x10933118bcf1940615957a6c,\n            },\n            r0a1: u384 {\n                limb0: 0x43e0d74cf14359d83cc60326,\n                limb1: 0x3d49af8c8914a76283667614,\n                limb2: 0xc090bf9a071c2af83528b361,\n                limb3: 0x14ef91f0b47d2bf1313ba159,\n            },\n            r1a0: u384 {\n                limb0: 0xe45466ca7f8b6f5920570127,\n                limb1: 0x1554654b09b57871c2ba8a9b,\n                limb2: 0xf66b8bb3a005585c18db86b0,\n                limb3: 0xd28c63f8635e2ca59c7dc45,\n            },\n            r1a1: u384 {\n                limb0: 0xdc559ff81728e932b3c79d12,\n                limb1: 0xec4893ef0a2c9367a4d736d6,\n                limb2: 0x8b0a21bcded904e222dbf14b,\n                limb3: 0x8c51553f23145b85ca33fbe,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x47c09068a72c1519575654f5,\n                limb1: 0x2f216b499e363f8bccb9b68d,\n                limb2: 0x8d117e630991ed6543c83bbf,\n                limb3: 0xece81448505f80c199eedf2,\n            },\n            r0a1: u384 {\n                limb0: 0x5cfdb49df58c7449bb4d119a,\n                limb1: 0xc86b91022e40b847d4ca6067,\n                limb2: 0xb745a4c4e9730ab196797891,\n                limb3: 0x853f0c583c651c57bdd903d,\n            },\n            r1a0: u384 {\n                limb0: 0xfac548de6238b1c07e9c8d34,\n                limb1: 0xda71dff567e93e8a1d7d33c0,\n                limb2: 0xc9cefb30737b47af261ab581,\n                limb3: 0xbdcd5f00d079c1a871baeba,\n            },\n            r1a1: u384 {\n                limb0: 0xb52005aa240ff1c85f7c18bd,\n                limb1: 0x435d4c338a9db0fdeadbff48,\n                limb2: 0x1a3008b87a1d6a2d1d12b9b3,\n                limb3: 0xf4835d66a5b1c168f6371bb,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7a3deb7872768f839060087e,\n                limb1: 0xae5017af4c09ed67c5c2e525,\n                limb2: 0xef2bbb3e118498031e2471f,\n                limb3: 0x5cf357e8473bba00386d238,\n            },\n            r0a1: u384 {\n                limb0: 0x3b373a0d0a649113f5c7b2fe,\n                limb1: 0xa3913baa2c3f8f7499ac76a6,\n                limb2: 0x425aed5972aa5f4b4d21ffc7,\n                limb3: 0x82938f41814229b1224b32b,\n            },\n            r1a0: u384 {\n                limb0: 0x5b130ec9295aaeb79868e7d6,\n                limb1: 0xda6c9ffb04ff597a83b36114,\n                limb2: 0xc09586dc17dbca59627bbce4,\n                limb3: 0xd8431f93c66d78cf5b81228,\n            },\n            r1a1: u384 {\n                limb0: 0xe35d56023ffa020c373e6d85,\n                limb1: 0x22972df9b6181d6397c5ee58,\n                limb2: 0x933a967160fc487717775d67,\n                limb3: 0x19c24474e43b997ab5364a65,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xab4a47c9e460a6ab079bc9f4,\n                limb1: 0xa52d15592f6e629c8ed4e221,\n                limb2: 0x6770a2fbfd963ac4ba4c7711,\n                limb3: 0x176bfba99edfa7e6ea9b4180,\n            },\n            r0a1: u384 {\n                limb0: 0x75096b535e73515e0077950,\n                limb1: 0x4e543e3117b31ed795fc87bc,\n                limb2: 0x3c61b46cdb8ec4196b82a6c6,\n                limb3: 0xe180fc0b5335f6b7320f37,\n            },\n            r1a0: u384 {\n                limb0: 0x6906e7b73a18fc659f673646,\n                limb1: 0xbf5b4487d46103b30587303e,\n                limb2: 0x8674cc39b5d030003362b6e5,\n                limb3: 0x11d1e6708ce7fc3ee159cced,\n            },\n            r1a1: u384 {\n                limb0: 0x99596ab37e2a0986bcf42bb7,\n                limb1: 0x1a88d084e06ac121ef049a81,\n                limb2: 0xd0de51ee3dda5694d8704419,\n                limb3: 0x18c7467be5ba537fff691007,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6acbdd11b2e3bf3c4e9a8fc7,\n                limb1: 0xa65c7c83d9e863106be2e6e,\n                limb2: 0xba622ef466154b88c6206dc0,\n                limb3: 0x13847679c97ef8978b3f64c9,\n            },\n            r0a1: u384 {\n                limb0: 0xa29270a27fe8eff7ff52747,\n                limb1: 0x1b86d1ea5e2cb0e565695293,\n                limb2: 0x5d46595304e94133e1524dc4,\n                limb3: 0x5c65be3c6a8b37e95aaa472,\n            },\n            r1a0: u384 {\n                limb0: 0x4c113034a2b4e8c08494656,\n                limb1: 0x113bdfa06dc6105f0cee337c,\n                limb2: 0x5ab2297e7c609e4044c01f70,\n                limb3: 0xe5ba46e7903db0416c5e85d,\n            },\n            r1a1: u384 {\n                limb0: 0x1af25f25f85e2fe5769d4db0,\n                limb1: 0xc25dd758f010619bdce139cb,\n                limb2: 0x539682ada1e9af81af49cbb4,\n                limb3: 0x63c25d8d6ffab7a17da8252,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd9bfc7bee1ea2c4b44bdf384,\n                limb1: 0xcae101c36024fea8c88acb5,\n                limb2: 0x5442f686fb8c7e3cd159699e,\n                limb3: 0x81a70f202f8c7a9ab6ac16e,\n            },\n            r0a1: u384 {\n                limb0: 0xf79e89f10551862af2ab4d,\n                limb1: 0x9ef28d1b3d37544d0c5c2b63,\n                limb2: 0x10755eab03732c2d03d477cf,\n                limb3: 0xc230221d279a52930a327ec,\n            },\n            r1a0: u384 {\n                limb0: 0x4909e0184d0d6a6e27087c3e,\n                limb1: 0x867ff3844dd99659a6660bc1,\n                limb2: 0x63a84310b08ecb9919f0f41,\n                limb3: 0x72f48e980ebef31c44fe110,\n            },\n            r1a1: u384 {\n                limb0: 0xed834e1b94dfdd91c8d4311d,\n                limb1: 0xe0efd3a3e73341c128668e23,\n                limb2: 0xad8f2be3d52a01168b375d5d,\n                limb3: 0xa34b7e1dee43f4de567f3e3,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xee48f089c7a4594a201092eb,\n                limb1: 0xc9d8a7b7d87389e25b856b97,\n                limb2: 0x74d54bf4748e38d3b2c782b3,\n                limb3: 0x78af2f8549231aa92bba1b3,\n            },\n            r0a1: u384 {\n                limb0: 0x61acc46ca422be84be4fee75,\n                limb1: 0xf425406455688e07fe496eb2,\n                limb2: 0x1151b627d67176b268c6b18b,\n                limb3: 0x157a7e87571314c4eeffcc64,\n            },\n            r1a0: u384 {\n                limb0: 0xd95d245c747804a8f3bd59ab,\n                limb1: 0xb3c7108b5d8ce6d797a8ab29,\n                limb2: 0x452fc047d47ec02830b1b9c1,\n                limb3: 0x12ea35020ddc17232447b57c,\n            },\n            r1a1: u384 {\n                limb0: 0xb027d5b2037b8170fb63b93a,\n                limb1: 0xf317c06fee2a5ef8113fd9d3,\n                limb2: 0xdd1a58fc8de1d70f065c435c,\n                limb3: 0x11d55ce218987319447cc925,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xed2bfa7ce99d4f69b850d09c,\n                limb1: 0x5efc2ec9bfecf49ff6bd1417,\n                limb2: 0xf733724aff4a909b6a9579c4,\n                limb3: 0x129d26f7087d748c81d164c8,\n            },\n            r0a1: u384 {\n                limb0: 0x4fe6ed09a9ce55efa63b7173,\n                limb1: 0xacdf286e6dda680bd7f43d82,\n                limb2: 0x157ceffdd1328af6f6e5b95c,\n                limb3: 0x160cbfb08a54af89dfeb868a,\n            },\n            r1a0: u384 {\n                limb0: 0x4ec774d0354010b5e861fe21,\n                limb1: 0xe9ed591725d9834344f2c119,\n                limb2: 0x6381097476472bf91dd79d7,\n                limb3: 0xd2c74ef03918d458f67a780,\n            },\n            r1a1: u384 {\n                limb0: 0x818639c9a397b4bf6f38e3d3,\n                limb1: 0xa7c0dbcc3c17ee84d28afb8e,\n                limb2: 0xe2e3c55da00c29aaff4a0571,\n                limb3: 0x13b5dbdad3c6aeb8219944e7,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x1b9ff207335fcb7b28f48654,\n                limb1: 0xaa059fc26f53a4b15d861e5d,\n                limb2: 0x7409e84a31ef57e217e3d45d,\n                limb3: 0x8f022244af0b719146e8cfb,\n            },\n            r0a1: u384 {\n                limb0: 0x1fa9d79eb0320e586c2d096a,\n                limb1: 0x8fde2d5c9ef41c1612865896,\n                limb2: 0xec88b9f86c99799b380ebac9,\n                limb3: 0x72c117c18b8dfa89321c27c,\n            },\n            r1a0: u384 {\n                limb0: 0x4570eb295684cad19e7cfded,\n                limb1: 0x2e204f8114c805f866cca868,\n                limb2: 0xba0509fc0eea7cc65c8b3dee,\n                limb3: 0xc7c1e717bb7b078054d3851,\n            },\n            r1a1: u384 {\n                limb0: 0x25eb9fba51d76d2292c1e2bf,\n                limb1: 0xa43de47dba6db4c3e5c3d8b8,\n                limb2: 0x365ea08af8998db774b8b61e,\n                limb3: 0x6367ffd71d3c44095424fc7,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xbc6935d4f6d5d4aa0ec642b,\n                limb1: 0x1d6e2d4d9106b5ecff982a66,\n                limb2: 0x5e8531cb5f36f807288638c1,\n                limb3: 0xa7631b901291f87b31ffb35,\n            },\n            r0a1: u384 {\n                limb0: 0x65c64711fddc1f635ae6e574,\n                limb1: 0x9e9ea3a84804bd3fb56c4c1e,\n                limb2: 0x91aa460ccbc52472b90ce0b3,\n                limb3: 0x13b3c25d2edef40f806ef614,\n            },\n            r1a0: u384 {\n                limb0: 0x9b3f8b6844ada64077c6dc45,\n                limb1: 0x78a3cdbb5ad78183e72572d,\n                limb2: 0x34763f876de5f0004af6d3b9,\n                limb3: 0x148f019d0a59b993e259d612,\n            },\n            r1a1: u384 {\n                limb0: 0x95843db564a4b5a94a1b14c4,\n                limb1: 0x832d5ca2f0420c55f9007f4a,\n                limb2: 0x56047bf28b726775ad1f126a,\n                limb3: 0x13283203fb6b13b007258900,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd8934218abbe5eda42e0374,\n                limb1: 0x4efa70797ab04d5777f18cae,\n                limb2: 0x657bd72dc32622552c01c3a1,\n                limb3: 0x86675ec3781ecc255b9b8f,\n            },\n            r0a1: u384 {\n                limb0: 0xdb3cdd784259d6f00a05188,\n                limb1: 0x4d7d18f24dc5139d8829c6be,\n                limb2: 0x9067fb6cb2810aa19e5e838d,\n                limb3: 0x99b7b955ea60c02306dd019,\n            },\n            r1a0: u384 {\n                limb0: 0x9569e6a9a6dfc936dc66c37d,\n                limb1: 0x8ce5600bf62265cce1600d14,\n                limb2: 0xe437be1358f94ae1da7ba693,\n                limb3: 0x26001dbd81fb98024703f0a,\n            },\n            r1a1: u384 {\n                limb0: 0x38347efb475ef26461922ce8,\n                limb1: 0x434f13930fd2a42336fc5a71,\n                limb2: 0xa611a973d0bf99e3535651af,\n                limb3: 0xf623d241cf8d903d2d48305,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x1bcaf5fed0bbcd1a934472b1,\n                limb1: 0xbd468b117d710b48e9e33679,\n                limb2: 0x705c11550a052c1bb8ccc4ea,\n                limb3: 0x6f15de535822689ea86e65e,\n            },\n            r0a1: u384 {\n                limb0: 0x95d3b31c7228eccaeaf12838,\n                limb1: 0xa92a1590da11c257350bbf1f,\n                limb2: 0xd4e2202f05265990a6557be7,\n                limb3: 0x11f8c21a8309afd4c60ea316,\n            },\n            r1a0: u384 {\n                limb0: 0xa27a54fe04de2265b2fe96e8,\n                limb1: 0x53dcd9b100331a701e8ba5f9,\n                limb2: 0x57845f6219e44f2109c795e5,\n                limb3: 0x22a93fc0d0171aa6e5a89a2,\n            },\n            r1a1: u384 {\n                limb0: 0x95504a55dc0699b071a8dd33,\n                limb1: 0x372f0a3e8d642e214174c90a,\n                limb2: 0xcf8e1be4fec9c43ae6e6c879,\n                limb3: 0x112c15cec305822060501913,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7464425eeb75a1d3a3486fba,\n                limb1: 0xd4f0931c31459109811008d1,\n                limb2: 0x5aac0cfc9b43343826136afb,\n                limb3: 0xf16056dd2e8b5f8240d4ac7,\n            },\n            r0a1: u384 {\n                limb0: 0xee0993ef125a22747400b5ea,\n                limb1: 0x438805278ea9e18b001cf7da,\n                limb2: 0x11c5cbb3ae17332e06f5b415,\n                limb3: 0x134957b7abe963c5d074abc9,\n            },\n            r1a0: u384 {\n                limb0: 0xacf8eb684fdd044dd83f813e,\n                limb1: 0xcb5dae51f81a4969f0370c67,\n                limb2: 0x491fc4a63ef64f17b8aa0d30,\n                limb3: 0x188b4199d41c95a7991f2d89,\n            },\n            r1a1: u384 {\n                limb0: 0x1f69582489be9a39cb94c326,\n                limb1: 0xdfa20ef759cc430ed060c20b,\n                limb2: 0xeab00aeca148c6a408bcd34a,\n                limb3: 0xd6a605bcb73c8061942fb57,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x1a00fe857129fb0706afc443,\n                limb1: 0x699bd305a05a49e5376fa125,\n                limb2: 0x5123ef38664f302385f6e355,\n                limb3: 0x1138d923f33a7667d3f218ec,\n            },\n            r0a1: u384 {\n                limb0: 0xa8b0789c07a18e1212c35b42,\n                limb1: 0xe6062cdb7c672277492e486f,\n                limb2: 0x21d77ef2efc7c58cc7f07fa,\n                limb3: 0xe1c4f192a69167da717d052,\n            },\n            r1a0: u384 {\n                limb0: 0x1083df31373d17c10c6f96ce,\n                limb1: 0x3c0db10e3745399ce144521,\n                limb2: 0x4be19a961fa7762df7e8174f,\n                limb3: 0x157ba9b5969d3125fa86ea07,\n            },\n            r1a1: u384 {\n                limb0: 0xd3bd3b38817ebc095decab10,\n                limb1: 0x99d4b7d79829b113b4490f45,\n                limb2: 0x205d4e72b9d31001a602b263,\n                limb3: 0x16fedb246b41f78c5a46ac30,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xed72eccb4e30eeaf3b992446,\n                limb1: 0x14e0585cd696c72e9adb4736,\n                limb2: 0x7df5eabb84672fab4d4a6e10,\n                limb3: 0x2d6c8112234d7f18ea478ea,\n            },\n            r0a1: u384 {\n                limb0: 0x95586dac212579b39f39df97,\n                limb1: 0xff0488c63a739029f85aec22,\n                limb2: 0x38ce286aeea4511ddcb23d59,\n                limb3: 0x444323d14c7a3549b9f6b27,\n            },\n            r1a0: u384 {\n                limb0: 0xac929d1bb6bfa0df5bd0b951,\n                limb1: 0x9a5e39e018083d89aeeaee3d,\n                limb2: 0xc84698d95675ba2c1b93662e,\n                limb3: 0xa82a23fd9338c15ba09139b,\n            },\n            r1a1: u384 {\n                limb0: 0x8a89d4ebf46cc78b9a67add2,\n                limb1: 0x1761e578b693547ecbf4817f,\n                limb2: 0xbd9d23d081864a636a27dce,\n                limb3: 0x40d68a72ee4363db50d3c92,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5a204b2b8496bf6fd941adbe,\n                limb1: 0x9c069a02ba48bdf34aed625e,\n                limb2: 0x5459c5d76fa5925ae4b04121,\n                limb3: 0x2c12f82e0dcd33df5ac48a7,\n            },\n            r0a1: u384 {\n                limb0: 0x38870a783f4004476ddafcab,\n                limb1: 0xa98e80effda828b7a2908d37,\n                limb2: 0x8152285afd4302b3b87447d1,\n                limb3: 0x183817defa2bfa474a6e1fdf,\n            },\n            r1a0: u384 {\n                limb0: 0x6bceb45fb77a9e20a0152815,\n                limb1: 0x20636e0b8ad36f12a65176b1,\n                limb2: 0x7ee4c1a972b5386c1303665e,\n                limb3: 0x71199de43d6e23e8d666f51,\n            },\n            r1a1: u384 {\n                limb0: 0x4f26920f05c3d38669cade7a,\n                limb1: 0x9028c6ddc1cd21f516bc0d4,\n                limb2: 0xca7680b59d22ca8045eba3d1,\n                limb3: 0xc81627ec1998db363f1c26,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xbdda2d3c31051f4071ae2945,\n                limb1: 0xbc66726ddee31b37d058d7e5,\n                limb2: 0x9f4eb741ac78b510ccf452ab,\n                limb3: 0x65fb0c0d47de8795557bd2f,\n            },\n            r0a1: u384 {\n                limb0: 0xb9c37518dd4a05df7a4d6dc1,\n                limb1: 0xd4ee64da91ea67b8a4525b4,\n                limb2: 0x73a813ffff40ee810a12214b,\n                limb3: 0x7f9fda3fa03c5295720441d,\n            },\n            r1a0: u384 {\n                limb0: 0xaa6d391bd6b4113145484e4f,\n                limb1: 0x86d3fa56727d8879496d1827,\n                limb2: 0x71223351a13a9577646c0ec3,\n                limb3: 0x5c4513dff602b8ec227f711,\n            },\n            r1a1: u384 {\n                limb0: 0xb9b127f0cbfc3172bba7a933,\n                limb1: 0x10d730ec07d1e0f84c5c6c34,\n                limb2: 0x693e354e2246bf96f3ebf563,\n                limb3: 0x1163f7e15fbd10f4086aad86,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x324f76ca3eb989e9ccb12696,\n                limb1: 0xeb1a302ddcf16336370c347d,\n                limb2: 0xcd35a0d29495cd0999ca03e2,\n                limb3: 0xa74e5ad34004c7e57d2a14e,\n            },\n            r0a1: u384 {\n                limb0: 0x525e1ef1f8480fcfda387f8b,\n                limb1: 0xaf0c314992fa29dd3e45eeec,\n                limb2: 0xae09cf42c0a53751919fe1b1,\n                limb3: 0x106562358cc0ca813815bb1f,\n            },\n            r1a0: u384 {\n                limb0: 0x19d180d969228995aa21a1e5,\n                limb1: 0x34f6f5fbd9b098d1b3efd0b,\n                limb2: 0x3533d5af99af7a4dc323297a,\n                limb3: 0x1604dfd23c32fe35ae8fd03,\n            },\n            r1a1: u384 {\n                limb0: 0x95f9c758ce1e361efe4c0032,\n                limb1: 0x910fa18b85ad81540e31e1ff,\n                limb2: 0x564537d6beb09c576a28d18f,\n                limb3: 0xa483de0527b3738ae218c4c,\n            },\n        },\n    ]\n        .span();\n    let hint = MPCheckHintBLS12_381 {\n        lambda_root_inverse: E12D {\n            w0: u384 {\n                limb0: 0x1d4eab620cf33a8eded7fd2c,\n                limb1: 0x45778308171f9267fab69519,\n                limb2: 0x874b1a6540a5a24a4fd9c68f,\n                limb3: 0x521ad898cee9071ebcbf44d,\n            },\n            w1: u384 {\n                limb0: 0xa9f581d9c26c7bc732af4135,\n                limb1: 0x5cecf0013c8d5695a1e6a597,\n                limb2: 0x66651ab83510fb89f6b2afe4,\n                limb3: 0x5966d7f6d173ea01e1a5869,\n            },\n            w2: u384 {\n                limb0: 0x7a64d089a1a115a3eab1a695,\n                limb1: 0xccdc16d44e3cbdf8393eb355,\n                limb2: 0xccd24b9c3e637b240a4100a3,\n                limb3: 0x110012a0987f151e6eacf408,\n            },\n            w3: u384 {\n                limb0: 0xd7d9acb3a8622465c6b1c0fe,\n                limb1: 0xcdaab0fcd1147d96b5521ac4,\n                limb2: 0xae897c7118bbf9c0479cff61,\n                limb3: 0xfc350acc198fbd5b4d95cfc,\n            },\n            w4: u384 {\n                limb0: 0x32d5c3bbed4da9a68948c926,\n                limb1: 0x6f68e9017165ef8db1a4f975,\n                limb2: 0x8c36a4b56c817816904d0605,\n                limb3: 0x6d44964cce393f36664dfb7,\n            },\n            w5: u384 {\n                limb0: 0x9715bc72d9969488889a609f,\n                limb1: 0x2b0c186b4950da2943f4ad01,\n                limb2: 0x9a49542de5fc03a989fe46f8,\n                limb3: 0x86f3ebd100f5f5157bc57f7,\n            },\n            w6: u384 {\n                limb0: 0x54e14ea09aad1c01c5c5faac,\n                limb1: 0x65bf572081d748820d57d62d,\n                limb2: 0xe04c49ded673151413b8ce9b,\n                limb3: 0x18776284b17c0858f647e075,\n            },\n            w7: u384 {\n                limb0: 0xd4ff280a7232eada165a4400,\n                limb1: 0xf5bd8e019057fb48dad4ea34,\n                limb2: 0xae5bd1a1ce889e14808c4ee8,\n                limb3: 0x647bb2047c521d397fd0f7,\n            },\n            w8: u384 {\n                limb0: 0xc8266658d2a03e597cfec8fc,\n                limb1: 0x62aae0152d3543705d87df48,\n                limb2: 0xfc4fae663d5040baacca25a8,\n                limb3: 0xa97b4be53ee479681acc5eb,\n            },\n            w9: u384 {\n                limb0: 0x45b2fc96a09f2ffc8b84a4dc,\n                limb1: 0x22bbd02e82d79e84d590ca96,\n                limb2: 0xf24bb9b22ece2fe9e392d6ff,\n                limb3: 0x1338aeb075e78cc7505a5d70,\n            },\n            w10: u384 {\n                limb0: 0xe4354c04ab5208100a0129af,\n                limb1: 0x4675bf96847cb9d629da62d1,\n                limb2: 0xcbb4b845ab04d0a51ea25ee0,\n                limb3: 0xe608702099837e04fc2e999,\n            },\n            w11: u384 {\n                limb0: 0x3cca5a2ae19eefaf128521,\n                limb1: 0x7a10d38aa97360f22cd213ab,\n                limb2: 0xe8162fd74d36e0786ea6a88c,\n                limb3: 0x12c968f3ea7364e3ee21b8b2,\n            },\n        },\n        w: MillerLoopResultScalingFactor {\n            w0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            w2: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            w4: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            w6: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            w8: u384 {\n                limb0: 0xf1ca42a0e74df934924892fb,\n                limb1: 0x91e7a80fe41d8f58d83f1513,\n                limb2: 0x8e9a0930581e2c940247cd09,\n                limb3: 0x18bc5b99f39cbf0fd8d08768,\n            },\n            w10: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        },\n        Ris: array![\n            E12D {\n                w0: u384 {\n                    limb0: 0xf63d7acf09f9e238c86f7575,\n                    limb1: 0xaf8ac67e915aa56c1f18943c,\n                    limb2: 0x1f0d89e52ce00053fb4cd271,\n                    limb3: 0x6dcf1ec2bee9d55fd7c7dd0,\n                },\n                w1: u384 {\n                    limb0: 0x8c542fcbddc8a2f30326ff28,\n                    limb1: 0x93400f32912e689ef50ff729,\n                    limb2: 0x5e397600577a07eddd78a637,\n                    limb3: 0x7f05f480f32402899fc238d,\n                },\n                w2: u384 {\n                    limb0: 0xfc8e47f2ce78aed551c79270,\n                    limb1: 0xb7505079976315ae30aea8c7,\n                    limb2: 0x1397705b5336a8c404e29aba,\n                    limb3: 0x71d870e4553f214175e57f7,\n                },\n                w3: u384 {\n                    limb0: 0x32f0ae88611fa10260d597c0,\n                    limb1: 0x29a0888f8ce8b899253e37ae,\n                    limb2: 0x7123a17956e452893cabef6a,\n                    limb3: 0x37df42454ed3974bb2b32f9,\n                },\n                w4: u384 {\n                    limb0: 0xa72f0e1e9c109d242988e116,\n                    limb1: 0x54b5dec1284a8c9177b3c945,\n                    limb2: 0x815f8322190dde62bdc8a55e,\n                    limb3: 0xba703f387adf415b877fd75,\n                },\n                w5: u384 {\n                    limb0: 0x1f07d02f85fc8a875e197521,\n                    limb1: 0x5585ddebaf32dc4e03ae577f,\n                    limb2: 0x6f8907d9616c496a0f51dbcc,\n                    limb3: 0x14068f72159c932c910dd512,\n                },\n                w6: u384 {\n                    limb0: 0xce6bb359366acbb7781372b9,\n                    limb1: 0x7c5e8df6083d142e2fd17ccf,\n                    limb2: 0x1174df6680c4991d4d20cc80,\n                    limb3: 0x17dfc12834ee7334831b24af,\n                },\n                w7: u384 {\n                    limb0: 0x95daa3bc8b9ac34a59ff12f0,\n                    limb1: 0xa2349e79dd3de20eea74d8b,\n                    limb2: 0x90308dd36ed98b5e1d50a816,\n                    limb3: 0x17d3b0da632dabdf4ba0f6c8,\n                },\n                w8: u384 {\n                    limb0: 0x4c5d01ef3358bf5ad26286cc,\n                    limb1: 0xed0c77db94e0738119993eb,\n                    limb2: 0xfd31f8f2bab3cabf17b82c77,\n                    limb3: 0x17ddaa28e29c2317b96c21b7,\n                },\n                w9: u384 {\n                    limb0: 0xea817f28532b8d5198e199dd,\n                    limb1: 0x99aeb257fdcdc23c15eb5315,\n                    limb2: 0x31387bb67348f155192cf97f,\n                    limb3: 0x22b2500baf6ce28a86979f,\n                },\n                w10: u384 {\n                    limb0: 0xb0e382b90ef6654c3bd2e20c,\n                    limb1: 0x4d096e4e54120fe17325dec0,\n                    limb2: 0xc2d4414912600bfec37d116a,\n                    limb3: 0x6524f53a10bd1ed1f7de6ac,\n                },\n                w11: u384 {\n                    limb0: 0x8a680e766390ddaa62af47cd,\n                    limb1: 0xf23d641db780ebb70c7fbfbe,\n                    limb2: 0x531a0f1fc69bf6acd1695e9a,\n                    limb3: 0xebb85352772f284d12c95bf,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x46f601ab362202e8276c007d,\n                    limb1: 0x586b3c2927dbffdd38a1a44b,\n                    limb2: 0x6b07370100418d3fcd5ad5c5,\n                    limb3: 0x1727a4684524eb2175d31f50,\n                },\n                w1: u384 {\n                    limb0: 0x73738bbe4943b6aee387caa1,\n                    limb1: 0x755dec64232750ca866647b3,\n                    limb2: 0x52a64d020d10ab12ab460dd,\n                    limb3: 0x57d77a9e8e6cd838edc1e63,\n                },\n                w2: u384 {\n                    limb0: 0x5f2c12da594e423a2108737d,\n                    limb1: 0x3aa7e22e27bccb5d4840ac81,\n                    limb2: 0x40d4f01ea67f2f082b59dec0,\n                    limb3: 0x42e0115d1c7594745490233,\n                },\n                w3: u384 {\n                    limb0: 0x9fe7471a196e8bd9a0db6863,\n                    limb1: 0x27379618cb58b0b55c0acff3,\n                    limb2: 0x1d61ee1f8c5c6c2e40b633da,\n                    limb3: 0x54735182a914667a25226c9,\n                },\n                w4: u384 {\n                    limb0: 0xeb6d788023db42ceefa73d8b,\n                    limb1: 0x983e97ed4491a3cda57fabeb,\n                    limb2: 0x9449deaf0a40d6de94e8347d,\n                    limb3: 0x14276d83ecbbeddabdf9bf5d,\n                },\n                w5: u384 {\n                    limb0: 0x411db147cc5627ef50c9210d,\n                    limb1: 0xa34577b4dcbbb76911a90cbb,\n                    limb2: 0x5523d4d906c194a134c2695b,\n                    limb3: 0xda9195159528161fa4960f2,\n                },\n                w6: u384 {\n                    limb0: 0x7df4506c40e2424b24c6b69b,\n                    limb1: 0x934699dcb5cf7eab408dbe02,\n                    limb2: 0xf98880b746c6ce0f7f41377d,\n                    limb3: 0x9552828c7dcc07d56efc554,\n                },\n                w7: u384 {\n                    limb0: 0x7f232224b4fe0b20245f2fd4,\n                    limb1: 0xc9d51a652303decdf4907f6e,\n                    limb2: 0x71ae0aeab8e0333d7ff3018,\n                    limb3: 0x122dcaa1ba9a8a8613064735,\n                },\n                w8: u384 {\n                    limb0: 0x697c449335ca5f9d21b7f654,\n                    limb1: 0xf8a13e81943a4a18f4896097,\n                    limb2: 0xde94de861275afae359c3016,\n                    limb3: 0x112f00e12354b1ad57581a4d,\n                },\n                w9: u384 {\n                    limb0: 0xfc2ecc6d437c20102b74f4ae,\n                    limb1: 0x3fc77a685f0e4ae94092405a,\n                    limb2: 0xbd067589e294b4d708407307,\n                    limb3: 0x13bbf456483cd4566ed59718,\n                },\n                w10: u384 {\n                    limb0: 0x920a2dc4d6405a69dafd98b8,\n                    limb1: 0xaefdccb098674950b928bb5c,\n                    limb2: 0x2e93db68f2ed629f9872a3b1,\n                    limb3: 0xeef615cd28929e56a59bf2e,\n                },\n                w11: u384 {\n                    limb0: 0x32fb24bfa3edf65997e82785,\n                    limb1: 0x11a11c3e6606acd9cd851f81,\n                    limb2: 0x55f01d098689453651a335e7,\n                    limb3: 0xebec00852daa59ee4861f6c,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x49168a1f3a22e43aa9131c14,\n                    limb1: 0x6ff87ec4e2647706b3fde592,\n                    limb2: 0x9ebb9d7748bb4b630bb9e8ad,\n                    limb3: 0x10bbd67a2e6b8bd12ca2a8fc,\n                },\n                w1: u384 {\n                    limb0: 0x4dbbf2265569906a0d24b1bb,\n                    limb1: 0x4e4e1893305748d5ffd9fef1,\n                    limb2: 0xf13628a4c95b6fc55a9eef6a,\n                    limb3: 0x10b832788eae08063407690b,\n                },\n                w2: u384 {\n                    limb0: 0x1acce936e2cf8c477b127acb,\n                    limb1: 0xd6ec68233a19bba472836ae0,\n                    limb2: 0x45a97406d2a99dc971e2c9eb,\n                    limb3: 0x19496c56f34ced68a7cd75ca,\n                },\n                w3: u384 {\n                    limb0: 0x22cc017e588ebe02c9d8944d,\n                    limb1: 0x4a12e88d4c855c6e93e88d24,\n                    limb2: 0xac08da0adfb221ad320d929c,\n                    limb3: 0x925d1d1ef9c0beba6f0a34c,\n                },\n                w4: u384 {\n                    limb0: 0x3de8b6df17b043f047eb3d95,\n                    limb1: 0xa0f7fe84c2f3b0c22ea84f0e,\n                    limb2: 0x9fc100a34798496f25a17711,\n                    limb3: 0x63551db5a468540a882a52a,\n                },\n                w5: u384 {\n                    limb0: 0x6acb9303682c1c8ca5fac965,\n                    limb1: 0x5743d3be8818de60a9a1a515,\n                    limb2: 0x7df5b7b9df88e4cf55e829b7,\n                    limb3: 0x1452bf2c3fe715937d83b5c5,\n                },\n                w6: u384 {\n                    limb0: 0xbe1e1ab9e46108a3da2287de,\n                    limb1: 0xe10d9eea83bb012f8e01a28e,\n                    limb2: 0x4e0f865fe70bcd3a215ac2d2,\n                    limb3: 0x159fe260119fbb98baf253f,\n                },\n                w7: u384 {\n                    limb0: 0xbe7a9434b3beb015897656bd,\n                    limb1: 0x6fa097bc9669f5a4c6e33dbe,\n                    limb2: 0x7884c156e8281d85d5a0ee4e,\n                    limb3: 0x2cf0869f40402c8b1642954,\n                },\n                w8: u384 {\n                    limb0: 0x95cdf327419c78b6710a6c8c,\n                    limb1: 0xd3dded1b3595c3ce4312a36a,\n                    limb2: 0xc2ccd8f589dd387f86500444,\n                    limb3: 0xd2c631a38ce47d9e8f0ee1f,\n                },\n                w9: u384 {\n                    limb0: 0x7e6f24ade84350245ac9e72,\n                    limb1: 0xb504394fbc5fc5b04e7a8465,\n                    limb2: 0xc8fb3405378036f4c5867363,\n                    limb3: 0xcaa4d999eec4b8f23cb8406,\n                },\n                w10: u384 {\n                    limb0: 0xe7e990c95a109a8caa63a02b,\n                    limb1: 0xde60f93bdf429d379caaf598,\n                    limb2: 0x434f9cece5b000d281057b64,\n                    limb3: 0xdca015d5a2e52becd816f7a,\n                },\n                w11: u384 {\n                    limb0: 0x1b9bf5b1707249c394b385b4,\n                    limb1: 0x591ab99d664c7bb9537bd1bd,\n                    limb2: 0x663ec0365e65c06194887eb1,\n                    limb3: 0x6995ffd83bb53d7b9787c81,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x4aa7f5d7f85dd4c4af5e97a3,\n                    limb1: 0x4c65d12afeff17a68cd917da,\n                    limb2: 0x6530b54704b338c9e41d551b,\n                    limb3: 0x7f7956e7258b204e6bb76fb,\n                },\n                w1: u384 {\n                    limb0: 0xc3b5ae69e8bc70cc1642be88,\n                    limb1: 0x9e9f6a61c9d21a413a15b875,\n                    limb2: 0xfb2649c3298b59c310e02346,\n                    limb3: 0x61f63de6863a0737ea4c564,\n                },\n                w2: u384 {\n                    limb0: 0xe65eff130e3bf3e78e64a8d5,\n                    limb1: 0x3c7415a182a906c0c440ec19,\n                    limb2: 0xb16f94ad9149d23b673b8b03,\n                    limb3: 0xd54ccfbe6ce28ca435fb866,\n                },\n                w3: u384 {\n                    limb0: 0xd59039e2f71aab9d24fe1f50,\n                    limb1: 0x77632f67dd17dd934dcdc3b3,\n                    limb2: 0x49405e14816e285681f6d108,\n                    limb3: 0x5b0b2403b504c7c3c04fa26,\n                },\n                w4: u384 {\n                    limb0: 0xeef17c2cd5a8e39666056b16,\n                    limb1: 0x2a2d7664553675a1cd30ab8,\n                    limb2: 0x112482fcc1899b14e6ac805c,\n                    limb3: 0x120e02660f9058203246fbf0,\n                },\n                w5: u384 {\n                    limb0: 0x224a2242169998bd45bcfecd,\n                    limb1: 0xf40bce68d096dad390d28e98,\n                    limb2: 0xd0f1e29a3fe03f4e210140c9,\n                    limb3: 0x848bb58f7c097a46b3a03e,\n                },\n                w6: u384 {\n                    limb0: 0x95f2d0acc60f04b266569319,\n                    limb1: 0x7dd58a061d1a3e0141a6e2e,\n                    limb2: 0x494f27de393ef818bbd4517d,\n                    limb3: 0xdc72aced2c6f4a5c4819c14,\n                },\n                w7: u384 {\n                    limb0: 0xd77df88de226de432ab03d2b,\n                    limb1: 0x333622e9b8f46b0713f2f072,\n                    limb2: 0xea5a83207f896f6abf8ab0e2,\n                    limb3: 0x4a715b7a58dc6543add0fc9,\n                },\n                w8: u384 {\n                    limb0: 0xc2816abbab513ff9a9c7b5d1,\n                    limb1: 0x82fde4beda8b9e6a5885c858,\n                    limb2: 0x1f84be86960bad82590ceca,\n                    limb3: 0xc04235cb1fe7822f16be8bc,\n                },\n                w9: u384 {\n                    limb0: 0xedb79bdcbaa9dc247ec2effa,\n                    limb1: 0xa269f5787fd2b0bd9ed885f0,\n                    limb2: 0x8bf6b02312251b650e69f258,\n                    limb3: 0xe44406c2cb2d23cae0a6ab3,\n                },\n                w10: u384 {\n                    limb0: 0x29dfd9eaed5f6ee84dbefdc7,\n                    limb1: 0x4efb1890226e01d82c5dd985,\n                    limb2: 0x485f10c54276bce940584dc7,\n                    limb3: 0x86501a5cf1b338e3103b59e,\n                },\n                w11: u384 {\n                    limb0: 0x7302b90bf0cd9d620156bc89,\n                    limb1: 0x7f5499c66dc28fbd4c320700,\n                    limb2: 0x34cc18aa5ab46c409e63ff3,\n                    limb3: 0x10a91f5f4e43b2f252c415e2,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xb719f9dec03ab8f164bb3a6b,\n                    limb1: 0x20cb7011e080d653d9dcc756,\n                    limb2: 0xe2dbfe688c03d53d6a00fef1,\n                    limb3: 0x813beb1246503c45e0f230,\n                },\n                w1: u384 {\n                    limb0: 0xeb0491457c8c6edc155753c1,\n                    limb1: 0xd0271cbb54b204bf4b295f5d,\n                    limb2: 0xb26e1eb4fab09d1d4faefd5b,\n                    limb3: 0x15dd36f07b01019665228060,\n                },\n                w2: u384 {\n                    limb0: 0xbaee8621d18761c3b2904a73,\n                    limb1: 0x816d9cac84eb28a5e7d9e25,\n                    limb2: 0xcd1c794f2313f6772e45355d,\n                    limb3: 0x124a87dab04b19db1b8bd588,\n                },\n                w3: u384 {\n                    limb0: 0xfb0de8939a0760770b40a9cb,\n                    limb1: 0x917a039550c37cea059c85e8,\n                    limb2: 0xc5edbc8267c1b80ef97cef18,\n                    limb3: 0x324f9d878506723c60a4345,\n                },\n                w4: u384 {\n                    limb0: 0x83c439e7eafe348b8671a385,\n                    limb1: 0x3bf1e6a663a56bf87b16e6f6,\n                    limb2: 0xe5ca68a4b426e6b7c000e7a0,\n                    limb3: 0xc7c38ce48b61dd7513469c4,\n                },\n                w5: u384 {\n                    limb0: 0x32bad965995076769d669ace,\n                    limb1: 0xd5949cc1627771c51c0bb4d3,\n                    limb2: 0x5d34827387c8e3fa45ba7b49,\n                    limb3: 0x14a6bccbc3a0c7ead062ac2b,\n                },\n                w6: u384 {\n                    limb0: 0x5221d77a4e1c87eb4fd9fcc5,\n                    limb1: 0x9aee6eec1d7ec0ce27a00cea,\n                    limb2: 0x8181e5c1b1a7a1b1e6454e58,\n                    limb3: 0x16364ed330a5e5ac2211ed9c,\n                },\n                w7: u384 {\n                    limb0: 0xd0db08209c90ad48501b74ca,\n                    limb1: 0x6b1f991adece59fe7b2d5db8,\n                    limb2: 0x2a617c6295c1be2c062284a1,\n                    limb3: 0x15df50360a83866f4fa35544,\n                },\n                w8: u384 {\n                    limb0: 0x4200fde82b3f83f87f7adc25,\n                    limb1: 0xba304360e4b83811e874ab86,\n                    limb2: 0xc8370b31cae44f74c2d81952,\n                    limb3: 0x113787d1e314b4473cc3f55,\n                },\n                w9: u384 {\n                    limb0: 0xe403a7fa1d756ed0dba8fb34,\n                    limb1: 0xccf3814c1270f5a1212a245e,\n                    limb2: 0xdc74463c46f3f26d79630a77,\n                    limb3: 0x3dee0d30b7bb94689c6daee,\n                },\n                w10: u384 {\n                    limb0: 0x3c74ad56a6efcb3c5c1d9c8b,\n                    limb1: 0x25d0f254898fb3c093097f4,\n                    limb2: 0xf5331098d7ed88bea4215633,\n                    limb3: 0x1f45a4472f7628ea0cba303,\n                },\n                w11: u384 {\n                    limb0: 0x7290b9b901cdb657a706a75b,\n                    limb1: 0x54d189205a59a1173bb4f663,\n                    limb2: 0xe75abfbc13c6d01ac5579e1e,\n                    limb3: 0x345cf5c394a7ac50eee7a9f,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x344bd25fb7f83d9dfae06f6a,\n                    limb1: 0x22fde129b885f0c710ff71ac,\n                    limb2: 0x783a03d3f6609e73117cb2d7,\n                    limb3: 0xe37e60a61076748d0233945,\n                },\n                w1: u384 {\n                    limb0: 0x29e60bd8298eaf694914bf96,\n                    limb1: 0x4d570c1cab177ec2719c02ba,\n                    limb2: 0x2b7031090424638824b4463e,\n                    limb3: 0xc26aba31fe7a05a5bbc7e8f,\n                },\n                w2: u384 {\n                    limb0: 0x574b39c83abd56863e6172a,\n                    limb1: 0xc54b9b6afa11629a99d4636f,\n                    limb2: 0xa12f92bcc3f8005b33eec0d,\n                    limb3: 0x8d4ad3c7fa6a1b149c19888,\n                },\n                w3: u384 {\n                    limb0: 0x2c11d194c9576b7f466f32d9,\n                    limb1: 0x7c55ac60cbb6cb8a927390d5,\n                    limb2: 0x57cb35bcc9af97e319be764e,\n                    limb3: 0x11c8f585011f475dce234ff7,\n                },\n                w4: u384 {\n                    limb0: 0x33bff81455e77429bd4ee8aa,\n                    limb1: 0x1cba0458d1e364c2c64ece45,\n                    limb2: 0x8c03288861b89e4335b14d14,\n                    limb3: 0x64b8c93dfa5c160f9493484,\n                },\n                w5: u384 {\n                    limb0: 0x2aba92419b5fd3f35844fce4,\n                    limb1: 0x429bb226e16a911555eedda0,\n                    limb2: 0xc2c54fa7a26bb7296669f9a0,\n                    limb3: 0xedb5a603fb61c4588349061,\n                },\n                w6: u384 {\n                    limb0: 0x71a798b6e55ee50c3f59159e,\n                    limb1: 0x858e9f261b23e89b180b4c4a,\n                    limb2: 0x751305c885f1a21af7ed4e1e,\n                    limb3: 0x10964f9f66dc1a6d9df88ce6,\n                },\n                w7: u384 {\n                    limb0: 0x15bad475a51bb3db482ae425,\n                    limb1: 0x7254f373bd19c4481767607c,\n                    limb2: 0xc11e80391c7c6aaadbfdde61,\n                    limb3: 0x15e22e3a46ee30b26a98c6d8,\n                },\n                w8: u384 {\n                    limb0: 0xf78a0e313b61e2ac5105e1a3,\n                    limb1: 0x47ec84e1592e649c61bd8776,\n                    limb2: 0xe7189f594aba4ccfc6a5a11c,\n                    limb3: 0x2f7c3dbf00640bb0148a21b,\n                },\n                w9: u384 {\n                    limb0: 0xc41f29e4dd6b145c6b661df5,\n                    limb1: 0x673062ba459b3d042a0cee5f,\n                    limb2: 0xcf47a3f2dfef1e55b3e97b8,\n                    limb3: 0x19a49c7db5078a54448a9c32,\n                },\n                w10: u384 {\n                    limb0: 0x7da75932777016e386681a3b,\n                    limb1: 0x5dfa78392bafdfe2ea984a6e,\n                    limb2: 0xfa0b5780b4722ac13170d67,\n                    limb3: 0xdca20a45aac899ff8534471,\n                },\n                w11: u384 {\n                    limb0: 0x20d272afe37306d5a752a35c,\n                    limb1: 0x3cb6565178072916bd25bcee,\n                    limb2: 0x84f886cd8d78cde2acb45c73,\n                    limb3: 0x166ebbd52543e9a2ad6f564f,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x71bb2c644889a2139f430cad,\n                    limb1: 0xf453e8802ab1059d1d517b47,\n                    limb2: 0x8e72791f4287dfbb95ce68f5,\n                    limb3: 0x19452bfa0813f110ecc74e8f,\n                },\n                w1: u384 {\n                    limb0: 0x2daf0b4287be1963023f46d5,\n                    limb1: 0x534ae95e7dd740e2800fd7,\n                    limb2: 0xd5e9e2cb66b4ffcb00e4fb35,\n                    limb3: 0xca9bc3e4e55c038c84e0b99,\n                },\n                w2: u384 {\n                    limb0: 0x5a1a5909ad03ea711e0f7d50,\n                    limb1: 0x4f450184eb018a3bbee2646c,\n                    limb2: 0x132d9cf05d2a74ea4af12f6a,\n                    limb3: 0xea601cf5926174f615ae34d,\n                },\n                w3: u384 {\n                    limb0: 0x56009030241b25051e7c60ab,\n                    limb1: 0x49653a64f27328b24b36a431,\n                    limb2: 0xcb3f2876ee487db94d9a8c8e,\n                    limb3: 0x176ccfe7df56c88d4d77e6b0,\n                },\n                w4: u384 {\n                    limb0: 0x777b0007ff8949336580dafd,\n                    limb1: 0x6240fd408535fd5d5e2a239e,\n                    limb2: 0x1a8a6e4d29d8df1d1a44f128,\n                    limb3: 0xb900c08323d8fad4afd7461,\n                },\n                w5: u384 {\n                    limb0: 0x4804154f8db931d57b3d4952,\n                    limb1: 0x589692071a72e7feaab93c58,\n                    limb2: 0x4893fc502e75c3fafb3cffa2,\n                    limb3: 0x78ee6e0f71424add9367862,\n                },\n                w6: u384 {\n                    limb0: 0x56f1e165c65d6701d9c8d72d,\n                    limb1: 0xc70ec69746317ab3eb2e5b49,\n                    limb2: 0xeb1c562f709f33c0e19f16e0,\n                    limb3: 0xaed371d73f9f750e9779d14,\n                },\n                w7: u384 {\n                    limb0: 0xa011a3fd58c09a6e7f3f76d2,\n                    limb1: 0x5d34d82a867f4d1c3bd46279,\n                    limb2: 0xae3b42bb54a050efd9902ac0,\n                    limb3: 0x10084af27180873684abfaf8,\n                },\n                w8: u384 {\n                    limb0: 0x8c40fae1d51740fbd0c540ce,\n                    limb1: 0x69fff344d5f472a1c52d83c0,\n                    limb2: 0x7b8df84c1f122b0449441a27,\n                    limb3: 0x142a792323b26d9f32f310d5,\n                },\n                w9: u384 {\n                    limb0: 0x4173f4024c385b2b52eabf19,\n                    limb1: 0x4debf14fe4434f2cfa941bd8,\n                    limb2: 0x62eba10a2346416ae61c056d,\n                    limb3: 0x9baea19f3c57310aa68d30f,\n                },\n                w10: u384 {\n                    limb0: 0x470c9a5918ea3b12844359f1,\n                    limb1: 0xf97a14494853215d38d3754f,\n                    limb2: 0xd23e9687409056661abb709f,\n                    limb3: 0x11394e84e3642ccb7ec05dad,\n                },\n                w11: u384 {\n                    limb0: 0xe732350ab1f36f07bde5c4a7,\n                    limb1: 0x265db95a4305a9c4ee911f7a,\n                    limb2: 0x330e500f64fd18af7a3c3d78,\n                    limb3: 0x114243c10cb4e98eaa22527c,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x5c2cfc6a914fa5d7980965e,\n                    limb1: 0x80de48670c60e5949512196f,\n                    limb2: 0x23d4df1b56009e60e26dc15b,\n                    limb3: 0x9129169ad34aad0171a90d1,\n                },\n                w1: u384 {\n                    limb0: 0x1b23a1da94d4d9ad13969f10,\n                    limb1: 0x96cb9baefc5a118f384b27d7,\n                    limb2: 0xa0992f485a9410d7cce6e205,\n                    limb3: 0xbb7b5611649e884b101d9c3,\n                },\n                w2: u384 {\n                    limb0: 0x60891a8a266a27cee0a09a1c,\n                    limb1: 0xfd9b045e70482ec052ffd6c,\n                    limb2: 0x4a82d989d3fcfda3d23d0789,\n                    limb3: 0xbefe911ada4c0fd8150056e,\n                },\n                w3: u384 {\n                    limb0: 0x7109634c22a12f03bc7575,\n                    limb1: 0x3560465146565541ff8326a4,\n                    limb2: 0x9e4388d110bae139a5146460,\n                    limb3: 0x18df1bb4889f0e8436e35316,\n                },\n                w4: u384 {\n                    limb0: 0x38819b839225ab70bb79ae23,\n                    limb1: 0x2640a881db6fa15743615201,\n                    limb2: 0x61801751cd1a8742d06e98e7,\n                    limb3: 0x5b766333766879a731ad833,\n                },\n                w5: u384 {\n                    limb0: 0xe3650f335d56af0a89dd5cf7,\n                    limb1: 0x5437795ba9d2867f64f5dc8f,\n                    limb2: 0x41358fb12e6a5ed63208bea,\n                    limb3: 0x1304e9875fcf1bbe0cf4984f,\n                },\n                w6: u384 {\n                    limb0: 0xe06199520d32463c4895fb76,\n                    limb1: 0x239e44a1b7472bb9e3928c3,\n                    limb2: 0x3faaa7126afa86e0ccac02b4,\n                    limb3: 0xba0b261bef58dc64082d841,\n                },\n                w7: u384 {\n                    limb0: 0x80579b7ecabe4b1c6bd27e7f,\n                    limb1: 0xda54e55ee34e1ce69eb01380,\n                    limb2: 0xc5e78f1b6a7bb2c57094c127,\n                    limb3: 0x3d4150c6b4a01b418d9646c,\n                },\n                w8: u384 {\n                    limb0: 0xb2ecc04591fdd668de2d86e2,\n                    limb1: 0xa63ad6aa31101e6c4be44934,\n                    limb2: 0x77fa5f8d2026c8f0256fcf43,\n                    limb3: 0xea684e10899989d49474ed2,\n                },\n                w9: u384 {\n                    limb0: 0x67f59a72e128d99d7b3a3bdc,\n                    limb1: 0x997cb42e388262b6a92cd769,\n                    limb2: 0xf23c7a0ea08062d3297e0143,\n                    limb3: 0xce8caed0b31565408c2a7e9,\n                },\n                w10: u384 {\n                    limb0: 0x4be943eafe89a30984531544,\n                    limb1: 0xa2d077ae492d257ff11bb7ae,\n                    limb2: 0xa222ba8de8769fd438c2817,\n                    limb3: 0x2255ba650dce97fbed316b2,\n                },\n                w11: u384 {\n                    limb0: 0x4d21bea6b45611509ce730eb,\n                    limb1: 0x340fb492f0558334acb4ccf8,\n                    limb2: 0x5c3040b88f05c25acb8b35ce,\n                    limb3: 0x155847f8080fd6991320f9ca,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x25d13b5892adacfaeffe2aea,\n                    limb1: 0x2aee4febbea2f40459b107eb,\n                    limb2: 0x19c5c4c41dcd61a6f4ba7579,\n                    limb3: 0x13241af723624918fd903b28,\n                },\n                w1: u384 {\n                    limb0: 0x8ff9b04334f08e4c49e8ce2,\n                    limb1: 0x28c2966f31e0e08817c5cf74,\n                    limb2: 0xd60b874eea904a280be515a4,\n                    limb3: 0x18f183d3d62072e6b66f4110,\n                },\n                w2: u384 {\n                    limb0: 0xa22500a03ee8ebf353a15614,\n                    limb1: 0x279f607a1d94cf8727ad1ac3,\n                    limb2: 0x9d5cc495009b0929965f222c,\n                    limb3: 0x1029d8c9b14ba02bd2caacfa,\n                },\n                w3: u384 {\n                    limb0: 0xd425541781902201ec22f2a1,\n                    limb1: 0x3c388cd7504114ac6bbb4136,\n                    limb2: 0xe6bf8d9f49e199cf7eedb194,\n                    limb3: 0x11afbc718969caad2d3f7e1b,\n                },\n                w4: u384 {\n                    limb0: 0x4f585eeaad43f01857265b34,\n                    limb1: 0x77e04d4ab93fd04750b8072b,\n                    limb2: 0xc00bc285a02119ea4c1da23a,\n                    limb3: 0x1382db753f8c3905e0e47311,\n                },\n                w5: u384 {\n                    limb0: 0x8e61233422edad3f37a8b352,\n                    limb1: 0xd8dc773a6ff4059b9a0a4cb3,\n                    limb2: 0xeccbe35b88a061471dd93af5,\n                    limb3: 0x104353579926809447957e97,\n                },\n                w6: u384 {\n                    limb0: 0x384c2b731d616e06b9706b87,\n                    limb1: 0x6184e0c8e2d7efb1e06154b8,\n                    limb2: 0x8167168429698bc7c087ab2a,\n                    limb3: 0x194e8c9db8ffa492523d7bdb,\n                },\n                w7: u384 {\n                    limb0: 0xef02a778fe63a32428538720,\n                    limb1: 0x93bfb3a65c893583a3688fe,\n                    limb2: 0x1175ee9952b07130cc8b3cc9,\n                    limb3: 0xb2d14a4629987e71acd5e81,\n                },\n                w8: u384 {\n                    limb0: 0xa816c07b4cc35518ff83c9ab,\n                    limb1: 0x1ccdac7487bad56114ab2569,\n                    limb2: 0xb390f4a4c15354c6338643b7,\n                    limb3: 0xe8e333eb89e659ea821952e,\n                },\n                w9: u384 {\n                    limb0: 0xaeaf2010379242754f5b7f2e,\n                    limb1: 0xe2f1bb28b645f9572ab5f6c4,\n                    limb2: 0xfe5084401ff0479a6a180942,\n                    limb3: 0x18ccc973cf5a7599815ebc7f,\n                },\n                w10: u384 {\n                    limb0: 0xfbcc6f1a1d48a24160749924,\n                    limb1: 0xac2ee791fd07a94084c429e,\n                    limb2: 0xaaab252962e1102b2892410a,\n                    limb3: 0x2c0dbce2c7ff58b3fb2dfa6,\n                },\n                w11: u384 {\n                    limb0: 0xee87fa8cda7e1bd7d4ae31,\n                    limb1: 0x5530a68eec71db3821d5eba9,\n                    limb2: 0x7c8c0427d82dab63686794e8,\n                    limb3: 0xa033e5036049bb12eac6c9b,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x3959ad574bcacfbd805a4570,\n                    limb1: 0xaab9f932204b35ccad7fb2d7,\n                    limb2: 0x6fa101b072d1313611453bf6,\n                    limb3: 0x34e294724006c7c710d628b,\n                },\n                w1: u384 {\n                    limb0: 0x155d3e49d0ccb5b95d9e1c27,\n                    limb1: 0x1b86b23f1cef30c30980eb2a,\n                    limb2: 0x874af95f2c59ddcd93d76006,\n                    limb3: 0x1112ad6169cb6e63e65235e,\n                },\n                w2: u384 {\n                    limb0: 0x82ed5ab9afa68983dc9ba552,\n                    limb1: 0x9357cfcf9e6e32dd53c8c666,\n                    limb2: 0x79a16ac1fb53afd7a079392a,\n                    limb3: 0x12a89edea194c648bfaf42e7,\n                },\n                w3: u384 {\n                    limb0: 0x5eca27f7deb3e9c8c10c08f8,\n                    limb1: 0x35321bd9e01f65b62ca2aecc,\n                    limb2: 0xc5cc73f3e11486f5229b5b4b,\n                    limb3: 0x78a5b9ae5119db042c5e071,\n                },\n                w4: u384 {\n                    limb0: 0xf83ea19e58f36dfb00f5ce55,\n                    limb1: 0xa9e201136fafc1bff43560d8,\n                    limb2: 0x23fd58ab1bf41c10792d7ffd,\n                    limb3: 0x4ebec45d01da532c22ab1bb,\n                },\n                w5: u384 {\n                    limb0: 0x684275e8d953a79f60899ccb,\n                    limb1: 0xb18e874d63bf59ce2c949011,\n                    limb2: 0x457fb3e09f148575e172066c,\n                    limb3: 0x150b00dfaa17d829b6dd5c03,\n                },\n                w6: u384 {\n                    limb0: 0xd149a0d4da27002a5642c37b,\n                    limb1: 0xa71fea7579ac00de168a813d,\n                    limb2: 0x117b36766caa30b7cc54cf39,\n                    limb3: 0x5376ad503028c81c1359a67,\n                },\n                w7: u384 {\n                    limb0: 0x60cf60a90b0f985ac2aacdd7,\n                    limb1: 0x20ed4c6d121128b29ca8c7f2,\n                    limb2: 0x9d9a5f70c09f70c572cdb9f8,\n                    limb3: 0x33b86259bf794af7ff4b871,\n                },\n                w8: u384 {\n                    limb0: 0x247e6ab4517b16d9454b428a,\n                    limb1: 0xb3647e9f6093737762a5c15b,\n                    limb2: 0x4764994dbefe4268f940353,\n                    limb3: 0x9e9e48f06256acea0e845ea,\n                },\n                w9: u384 {\n                    limb0: 0x3fa933373fcb565bb588371f,\n                    limb1: 0x53babd42743d6d401b70dc45,\n                    limb2: 0xc61d4b87a359271a9318d7c6,\n                    limb3: 0xadd5ef0316a5b7771a60136,\n                },\n                w10: u384 {\n                    limb0: 0x97038a4a9cdb7d2fcec42361,\n                    limb1: 0x59ce5adedbdb2b586a82e8ad,\n                    limb2: 0xf22dbf3800a4a169d3c6c7e2,\n                    limb3: 0x173f59f580a1bedc1b8f8674,\n                },\n                w11: u384 {\n                    limb0: 0xccc37b11a6abd0b1c43eca61,\n                    limb1: 0xc2e453ad058b0159b3bb8b88,\n                    limb2: 0x291724dc796ab3a452decb5e,\n                    limb3: 0x167c4d498cafbbc0709a910b,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xfb6f2dc21108c4b5151f2644,\n                    limb1: 0xb62a4d04de63665a00a57773,\n                    limb2: 0x1670b2eaf514bfc8fc53ce22,\n                    limb3: 0x130f529c90d3b568aca6e087,\n                },\n                w1: u384 {\n                    limb0: 0x19d81dc0086b598004e3bef7,\n                    limb1: 0xbc1384c369a618483eaa5567,\n                    limb2: 0x6ad960cc8a498524c1ec078,\n                    limb3: 0xadf4daf613e0d097995aa8d,\n                },\n                w2: u384 {\n                    limb0: 0xd29b5724f6b6860e8fa58b56,\n                    limb1: 0x8b377db541dbbe2b9fa2b31e,\n                    limb2: 0xc3478090367667b8c7c40a96,\n                    limb3: 0xd8ae4c4ab61a3b7237a8395,\n                },\n                w3: u384 {\n                    limb0: 0x18098cdc0aaa9de5d90d4785,\n                    limb1: 0x415b7efa58b50be0b4e2264c,\n                    limb2: 0x93e4c08ac1b499e1f0d6f521,\n                    limb3: 0xaaf94e53139efb216ce5e0e,\n                },\n                w4: u384 {\n                    limb0: 0xdf4ed64059dec768e050c2f6,\n                    limb1: 0xd3c1316e6a8799940ab2d258,\n                    limb2: 0x549413f970f60e7dc26655e2,\n                    limb3: 0x35a9aeaa9102416916b2e5f,\n                },\n                w5: u384 {\n                    limb0: 0x7442c43542d7f96a0bdc28a,\n                    limb1: 0xf422506e4ba33649decea164,\n                    limb2: 0x3aebe61dd6543439953778c,\n                    limb3: 0xabdb4ce21a40381201b2705,\n                },\n                w6: u384 {\n                    limb0: 0xbe15abd3c348ddad19da6a10,\n                    limb1: 0x9e7d94492b6507ff377fb04f,\n                    limb2: 0x3bf64c8180bdc3335507a487,\n                    limb3: 0xecfb1e3d52594e2d494e792,\n                },\n                w7: u384 {\n                    limb0: 0x5b2b533a56d49245ab6788c6,\n                    limb1: 0xd86f1adc31c48edff72fd114,\n                    limb2: 0x9ab458995b092274677e207c,\n                    limb3: 0x23ca282bada7d44f7cfd31,\n                },\n                w8: u384 {\n                    limb0: 0x3437d71285507fca4851f133,\n                    limb1: 0x54ab8dd4a4a49d8ae172e8e0,\n                    limb2: 0xdad31a35129c5da141a6a49d,\n                    limb3: 0xbc19f605351e55b755d68d7,\n                },\n                w9: u384 {\n                    limb0: 0xa4b79c920e09f351a49d7de5,\n                    limb1: 0x984bf5dc7d5fde910df79900,\n                    limb2: 0xc5088d8b76f99b9fa536dc41,\n                    limb3: 0x12e688e9f1f4fad3711d14c2,\n                },\n                w10: u384 {\n                    limb0: 0x9167cf28f421e605fc529bc1,\n                    limb1: 0x245b24732934cfbc08caed20,\n                    limb2: 0xc5635e145d2eef79f98fce36,\n                    limb3: 0x180e73749e24faf4fcfd3b2,\n                },\n                w11: u384 {\n                    limb0: 0xde97ba398aa3a54028ab5184,\n                    limb1: 0xfa8f2784a38b5421adc6b4e4,\n                    limb2: 0xe3c7c2b40b1fe9a3e96c2c4,\n                    limb3: 0x58f95a0d10e29ba75f4abfd,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xf7cb9c74a2c111c0755ef704,\n                    limb1: 0x67a7bdc548d00ca24752db6e,\n                    limb2: 0x5fc2a7a5510431696ab76c19,\n                    limb3: 0x15249501304492c16d83291f,\n                },\n                w1: u384 {\n                    limb0: 0x55f588a277bf5c8a379a1f94,\n                    limb1: 0xaecf9b67ff5e644c13cb3993,\n                    limb2: 0x6bb2f12ba2cbe23fb8247d67,\n                    limb3: 0x3ed46f7421c5162ca6ba24f,\n                },\n                w2: u384 {\n                    limb0: 0x2fb039392e1e9eacfe012783,\n                    limb1: 0xcc550086b3d01a606a030eb1,\n                    limb2: 0xdfc6d4c564c0695c34dfb6e6,\n                    limb3: 0x11edbc923f8ebc5aefd70289,\n                },\n                w3: u384 {\n                    limb0: 0x59e9ad36dff5f9b289a66f0b,\n                    limb1: 0xfe0cd6c3385d435faea3fe13,\n                    limb2: 0xb1111302e6d8f88878cd2fb2,\n                    limb3: 0x1073ed5e414f7f7e3aab4cc9,\n                },\n                w4: u384 {\n                    limb0: 0x6d6ea80c99c8af39666df7b4,\n                    limb1: 0x87e26f50b2a298723ca31b49,\n                    limb2: 0x95aef7220ca22268bf66ed32,\n                    limb3: 0x6cc0c6596529932a385f7f9,\n                },\n                w5: u384 {\n                    limb0: 0xaf8a21cc737ec216405b6b30,\n                    limb1: 0x2731f6ef5d655a1368fc7bd1,\n                    limb2: 0xd5428f0c318cd5fa09e854c5,\n                    limb3: 0xade1e414a93505d63733946,\n                },\n                w6: u384 {\n                    limb0: 0x3fd711e86acf882a1f403cb2,\n                    limb1: 0x7c503cfca897c07df4c5cb3b,\n                    limb2: 0x46843cb1e9ef833a5869650d,\n                    limb3: 0xa033c2879d1aaf7a54d0c45,\n                },\n                w7: u384 {\n                    limb0: 0x2236aa04d4af4cd7a32dc9e2,\n                    limb1: 0x480f9dcff78b12a690d0cb8d,\n                    limb2: 0x6fa9da69e4a1c1a4fae93140,\n                    limb3: 0x4ecc0f925cf79952426f74,\n                },\n                w8: u384 {\n                    limb0: 0x281d06a57030b61135cef166,\n                    limb1: 0xb35e03f80e56523abe9bd62d,\n                    limb2: 0xbff83152f2b6238494d8da43,\n                    limb3: 0x16f23db2174fd855bbc9f573,\n                },\n                w9: u384 {\n                    limb0: 0x2ae34f5f1b961e31cff788e6,\n                    limb1: 0xd5208cd2ba55b284bcb6a740,\n                    limb2: 0x8def14ec173b046b77cee877,\n                    limb3: 0x8b924b8f096c955fa87bdb,\n                },\n                w10: u384 {\n                    limb0: 0xdd1563aa8adc394ba1bb510e,\n                    limb1: 0xe6a4f47eafd98a1d57f7618c,\n                    limb2: 0xf0fde0fde71032421d34c342,\n                    limb3: 0xbe1046e6670770c40f83d9e,\n                },\n                w11: u384 {\n                    limb0: 0x6c23f54e964a04cc93accd7a,\n                    limb1: 0xd64796555b1e02e20e137d7a,\n                    limb2: 0xd6306e03d1e023aebfd884b0,\n                    limb3: 0xeb55ee41c0d9903f5481cfb,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x4fd806a0c08d7cb1d8f5576,\n                    limb1: 0x947475d806bb8e73d72c6bb1,\n                    limb2: 0x58fd15305c66b78a447558b5,\n                    limb3: 0xa07c3e28c6576058ea12204,\n                },\n                w1: u384 {\n                    limb0: 0x58244662118b67b83218a6eb,\n                    limb1: 0xebb5e2e2db5b9e0a6b3f5b2e,\n                    limb2: 0x3e1042fb26fbbae62ffe0728,\n                    limb3: 0x15c39aa7cb6464b8bbdd9a54,\n                },\n                w2: u384 {\n                    limb0: 0xf23ae0578867c5ec6121c5a0,\n                    limb1: 0x839ffceb9d2fd41b0648690c,\n                    limb2: 0x957e160add723e94eea2c76d,\n                    limb3: 0x11c8875c282e2bffa22a4025,\n                },\n                w3: u384 {\n                    limb0: 0x436161c822e4491dd8ccef2a,\n                    limb1: 0xdeef4e125ba9fdcb262e6af2,\n                    limb2: 0x1402cd92e91d2d46e4a5d6ed,\n                    limb3: 0xa15d9e59cadf2cd29423a8f,\n                },\n                w4: u384 {\n                    limb0: 0x689749a0ebda6921732143a0,\n                    limb1: 0x5baf655dbcffa4154f1278cd,\n                    limb2: 0x274b7ef4bb61387d8ae1f60c,\n                    limb3: 0x17824661dbd47612ae5a5460,\n                },\n                w5: u384 {\n                    limb0: 0x38248e96afa3964a27770f54,\n                    limb1: 0xcdbf91a995b3b0f56e64c291,\n                    limb2: 0xd6305f44de865a7dc66ad423,\n                    limb3: 0x181c47228172dfa2880b24ee,\n                },\n                w6: u384 {\n                    limb0: 0xf831ce78619934b9c066f9ad,\n                    limb1: 0xbb8b831e8ae9c18e7247d2f5,\n                    limb2: 0x9e4e8fed49a8161f9a7d6f41,\n                    limb3: 0xd6f8228befd39ea769d2e22,\n                },\n                w7: u384 {\n                    limb0: 0x26f6e50a7dae368f03b9203f,\n                    limb1: 0xe8254786b607c0c264159695,\n                    limb2: 0xf8df238611d760e21a824ae9,\n                    limb3: 0xcb9d2a40bc4c198dadc7fc7,\n                },\n                w8: u384 {\n                    limb0: 0xa31618232fc0a276fa8a13bc,\n                    limb1: 0xb2e5fd1cbe70792b1ae5be4e,\n                    limb2: 0xcad2bef61d3eb16dbe304133,\n                    limb3: 0x746908f8e2904c17b88295,\n                },\n                w9: u384 {\n                    limb0: 0xf7fbbcd3a09d95a4b4b4271d,\n                    limb1: 0x53013b5b2cb87122125471ff,\n                    limb2: 0xb8ada555618e2cdd4bffab84,\n                    limb3: 0x9f993ee384df146cd8df4ea,\n                },\n                w10: u384 {\n                    limb0: 0x7d6ce0b7c1cb3e2498f54294,\n                    limb1: 0xa261c1bd75d838bfb7082bf4,\n                    limb2: 0x4006f75c1d6b50133de4326f,\n                    limb3: 0x836a75393f4c32f8c93b0f,\n                },\n                w11: u384 {\n                    limb0: 0x516f6021bc449c6442591c40,\n                    limb1: 0x846385bc47d8d5d7462de9de,\n                    limb2: 0xa46c395391341a99e731bb63,\n                    limb3: 0xe3c1b8abb46081754501420,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x7ecbc81a3c1252aed2cb5af1,\n                    limb1: 0x3383e4f86811fd96196f89a5,\n                    limb2: 0xe681090ab10830dd807c3443,\n                    limb3: 0x1ee0f0a189fe6cf9eb5af7f,\n                },\n                w1: u384 {\n                    limb0: 0xedf1f516e56499b6fb02c1c8,\n                    limb1: 0xc1f92022dc8805e7d95a1106,\n                    limb2: 0xe33f8dab8d7737441529e8ac,\n                    limb3: 0x146e3b7474e409260572871b,\n                },\n                w2: u384 {\n                    limb0: 0x9673e873b8a7c3418ebf8d4c,\n                    limb1: 0x7a783f69e749f4f29453c545,\n                    limb2: 0x69f350e484834de9d8fa34a,\n                    limb3: 0xe9ca5bcc844976bf619effc,\n                },\n                w3: u384 {\n                    limb0: 0x5fcf82227a8ea8b3254820c9,\n                    limb1: 0xa2bd05419c073d586a41cf6e,\n                    limb2: 0xe518de71e6ac729107926d7c,\n                    limb3: 0x844ea5cfff361a9705930cc,\n                },\n                w4: u384 {\n                    limb0: 0x429c3618d116a80c181685fa,\n                    limb1: 0x486ce09af708401f4a6c7ee6,\n                    limb2: 0x15bbecd706ca76d65704416c,\n                    limb3: 0x142489c0fe2e40be632effe2,\n                },\n                w5: u384 {\n                    limb0: 0x6c35d18f3e06bc51f762cf95,\n                    limb1: 0x6e5f3313f423ad6904300234,\n                    limb2: 0xc28cb4900bf47d29c3fbfc30,\n                    limb3: 0x18d6a6340f2f9ddc473dcd7e,\n                },\n                w6: u384 {\n                    limb0: 0x77f90efb84d14408e59f1c03,\n                    limb1: 0xb049cbfe6bcd8d08b28e8ce9,\n                    limb2: 0xbb35bf3bf049671de2d64cff,\n                    limb3: 0x173d7f74864e93e2060343f3,\n                },\n                w7: u384 {\n                    limb0: 0x52c3924e0df7f728e4b119c9,\n                    limb1: 0xeec6fa434e31cf84d10575b3,\n                    limb2: 0x34fc4325ef25b4772cf88be3,\n                    limb3: 0x103bdbad7f3c5e4347f78e23,\n                },\n                w8: u384 {\n                    limb0: 0x50b2cfe1dc1c01ae0e5969a,\n                    limb1: 0x2a9b3221a11e330465ef0595,\n                    limb2: 0x958ce0c16afbe3fc0276051d,\n                    limb3: 0xfabbe257f75d65c2add5f22,\n                },\n                w9: u384 {\n                    limb0: 0x6b8eb7bd4aefc50c3c79931,\n                    limb1: 0xb8857fda7cc456e68b528569,\n                    limb2: 0x95a710c446e6af9dd11f75b3,\n                    limb3: 0x15f22d94f0a51b34b4dd51c3,\n                },\n                w10: u384 {\n                    limb0: 0xc47dbd473089bd4709414e0f,\n                    limb1: 0xf549310959600107d2281325,\n                    limb2: 0x909324fa4a1e59755e5aca2c,\n                    limb3: 0x12f9ee461775892889de4320,\n                },\n                w11: u384 {\n                    limb0: 0xd8dd2af7e3ae6a18cd4251d3,\n                    limb1: 0x41f1e4e4c3e7daf40c677808,\n                    limb2: 0x4748497b4e11c79b39dce7e3,\n                    limb3: 0x53e7ea7549b6f013ee9cb12,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x7380438f87399c7e3609ef99,\n                    limb1: 0xae251f1bb307841b8e3b97ff,\n                    limb2: 0x10586f0049d74ac499bb10f1,\n                    limb3: 0x15d69ce6494624b9dfaf148a,\n                },\n                w1: u384 {\n                    limb0: 0xe70f2186c12698f57901bcc,\n                    limb1: 0x6853377d8eb10f90ffcddf81,\n                    limb2: 0x7fe7ce6260e8ccacd34aa93a,\n                    limb3: 0x11c3d29b6bed3f8ec66ccf9e,\n                },\n                w2: u384 {\n                    limb0: 0x8de574f1fa8df34dd4436614,\n                    limb1: 0x3d2468e8d3fe2f1b89bb129a,\n                    limb2: 0xe5c565c90b6e45bf3d6ef92a,\n                    limb3: 0x2fdec231c7a259d6b274cc7,\n                },\n                w3: u384 {\n                    limb0: 0x381afcca5edd7ab2c2ee55d3,\n                    limb1: 0xdb0d28a944c5b5e6f1de9d1a,\n                    limb2: 0xca789736a75cd4847472db80,\n                    limb3: 0xb8857429befc7d11918d904,\n                },\n                w4: u384 {\n                    limb0: 0x8aae77fae75932fd56ef1ed3,\n                    limb1: 0x1dcb6c6eff6602f4efc533c2,\n                    limb2: 0xb0853b8091023746c6956eb4,\n                    limb3: 0x158e6193740bfac3349cae31,\n                },\n                w5: u384 {\n                    limb0: 0xae2e48564c4d12a418a56403,\n                    limb1: 0x668c45ed4e3b77890ca488d,\n                    limb2: 0x758af6b95f421af2b9e80dda,\n                    limb3: 0x829bbd81deb660c5c410ebc,\n                },\n                w6: u384 {\n                    limb0: 0x2b33f8be265845893a4d2cdf,\n                    limb1: 0xadab60575595c27d3a695f56,\n                    limb2: 0x2bb38114e26dcff01b3c7a,\n                    limb3: 0xb15f5d3fcb62c5c1cb0103d,\n                },\n                w7: u384 {\n                    limb0: 0xf547b3d2ddb97a0ec597c1e4,\n                    limb1: 0x4dfe359dcb7415317a0d96c6,\n                    limb2: 0x4db32c68ccb2fff63d900b3a,\n                    limb3: 0xf40331313d149fd78f8999f,\n                },\n                w8: u384 {\n                    limb0: 0xe1859718ba67a65d2f7dd9e1,\n                    limb1: 0x7f66d368473637540d2de335,\n                    limb2: 0x94d70dd4d71f90a6b8996edd,\n                    limb3: 0x7f11bf976be5160fff2b5e8,\n                },\n                w9: u384 {\n                    limb0: 0xcb043aa483655ca971eb708,\n                    limb1: 0xc6514161d25e989cfe0eb910,\n                    limb2: 0x4b03463f10bd5486a5150bf6,\n                    limb3: 0x19207d670b11d96e63c9c7f3,\n                },\n                w10: u384 {\n                    limb0: 0x518d10761529279fc06a4e8,\n                    limb1: 0x64139e4ea8660ee98b864aea,\n                    limb2: 0x1aa32f01ce8213c10b08030c,\n                    limb3: 0x15064a81f43178365db85227,\n                },\n                w11: u384 {\n                    limb0: 0x14ddb10fd846711efe04e524,\n                    limb1: 0x34676af4100eeb93fc894295,\n                    limb2: 0x2bbf7682b985b2187e2ad98c,\n                    limb3: 0xb2c84517ed0cae95c0fd980,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x7053639bdef1a630ad4f5af6,\n                    limb1: 0x739c43473d55a600db56c9ab,\n                    limb2: 0x6a2e59a43b3e0b5a88499b12,\n                    limb3: 0xe1d00aa3380a50f80ff85d2,\n                },\n                w1: u384 {\n                    limb0: 0x3f2e33d1598a70be6cb11313,\n                    limb1: 0x1486afa60b15b33b54cfb747,\n                    limb2: 0x81bf2a71d10300239b7aaf1f,\n                    limb3: 0x9b35119c385fc20a0386282,\n                },\n                w2: u384 {\n                    limb0: 0x31d6979bfefd74931a576d6,\n                    limb1: 0x90a0c3530607355c33b0fd0c,\n                    limb2: 0x65fba06248d03e088f1d48a,\n                    limb3: 0x11395dbf5901f9d349f3b984,\n                },\n                w3: u384 {\n                    limb0: 0x4291c385689ad964bc8bf72a,\n                    limb1: 0xb0737aaac176737a1ecf6ac3,\n                    limb2: 0xce8664f73ce5a6aaf0f10ca7,\n                    limb3: 0xb6a7d5c46340b57ed0472e5,\n                },\n                w4: u384 {\n                    limb0: 0xd4e72b1d919d76e6f7c68488,\n                    limb1: 0xec2f0d04a7a2f7d4d7a31590,\n                    limb2: 0x4112c57e0a9dcfedf038c956,\n                    limb3: 0x1928f6565ead905c25593eb9,\n                },\n                w5: u384 {\n                    limb0: 0x92b1d18299192443eab3cf31,\n                    limb1: 0x363339f1c99447dbe74383f3,\n                    limb2: 0xdcac6005cc60106f88576c3a,\n                    limb3: 0x261463ad40df4e97165053e,\n                },\n                w6: u384 {\n                    limb0: 0x45616d4a15bc7f5c57750089,\n                    limb1: 0x19ac60bbc57465009e3dcb1b,\n                    limb2: 0x7ceb498d022dfcfcae9aec60,\n                    limb3: 0x19c44919e9fa2e772d9dccf7,\n                },\n                w7: u384 {\n                    limb0: 0x74d7db77e3c5ea2003e6de14,\n                    limb1: 0x7f694b25adcf375071dc2f54,\n                    limb2: 0xf3d7f4f1a8dcb8d0debb2bcd,\n                    limb3: 0x14c0504bbd68a3b627e1d579,\n                },\n                w8: u384 {\n                    limb0: 0xbf696e7d082490ab2a810909,\n                    limb1: 0xdce3d8459c86e173b9b814d9,\n                    limb2: 0x7d35e60fe95d54b4297c06ea,\n                    limb3: 0xe0428d15a83059ac75d4252,\n                },\n                w9: u384 {\n                    limb0: 0xf15b4e3caed564cfc1168aa8,\n                    limb1: 0xfa6ecde037cb585b65aa3b52,\n                    limb2: 0xe2a2b5aede3c734d6530056f,\n                    limb3: 0x14109312a06f6c1e8250362,\n                },\n                w10: u384 {\n                    limb0: 0x9f4a8b4546befff0a6481af8,\n                    limb1: 0xdce5e22b5ea0a42e8928c84a,\n                    limb2: 0xe59648247bf7715701129ca8,\n                    limb3: 0x1209e1d34b0c1d14ec7839cf,\n                },\n                w11: u384 {\n                    limb0: 0xf2a74f539bad5a4682af3491,\n                    limb1: 0x93097b4ae591134223d3a872,\n                    limb2: 0xd33d11a3041a2bd1bbd4cfce,\n                    limb3: 0x43584ae57d4f086e437d219,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xccd3861f8b36806faafb781d,\n                    limb1: 0x6dda1400a7c6d4456935dd83,\n                    limb2: 0x20b444358405090025a9b7cf,\n                    limb3: 0xf54e285bf8f9c32d389d6db,\n                },\n                w1: u384 {\n                    limb0: 0xe9b4bf3d1c5b280abc31ebfc,\n                    limb1: 0xd862307b44fcf93aae7b11ba,\n                    limb2: 0xe232ba534a45a34a7432f6ea,\n                    limb3: 0x82261cd3aeaa85fbe4c96df,\n                },\n                w2: u384 {\n                    limb0: 0x2c7b8a630170b7f631239855,\n                    limb1: 0x853e2961c8b4130c85116507,\n                    limb2: 0xbf9ce9a53e945b9c6d7b5f1b,\n                    limb3: 0x145d89cb83700774a22db1bc,\n                },\n                w3: u384 {\n                    limb0: 0xa74c5c7e5df8d3667adf1671,\n                    limb1: 0x52de2b913d78406ec8f99a,\n                    limb2: 0xc812988870f9f7517c79ff58,\n                    limb3: 0xb223e7cfbc3fc377b1fe75d,\n                },\n                w4: u384 {\n                    limb0: 0x8cfdf31674b93a20c992a24b,\n                    limb1: 0x8f21312988d7da962d321bc0,\n                    limb2: 0x2dbf0528a791ea0d5f981e13,\n                    limb3: 0x15aac1f8e330eff4e20ab3fe,\n                },\n                w5: u384 {\n                    limb0: 0xf685ec483cea983d1a69a4d7,\n                    limb1: 0xb82b746d8797df323095a302,\n                    limb2: 0x534715a12884e752ec62c600,\n                    limb3: 0x1639bc27f80a1b9be7937efa,\n                },\n                w6: u384 {\n                    limb0: 0x2bfbdf97d360b348dc75d028,\n                    limb1: 0x3e93c81c56c9d7703ac2d15,\n                    limb2: 0x3ecb33be37dc97e5a75ba27,\n                    limb3: 0x14ec70fdfe7e62ee63fd9e82,\n                },\n                w7: u384 {\n                    limb0: 0xecabff100ee999721d0aeedb,\n                    limb1: 0x408694288104b8240aefef54,\n                    limb2: 0xae05168387150e2c1c0b069b,\n                    limb3: 0xf14bd4f7226a16796796e6b,\n                },\n                w8: u384 {\n                    limb0: 0x779e398587211c93d2d419af,\n                    limb1: 0xf33f48e9339556264944ed85,\n                    limb2: 0x641e8d0911a2129916d623a9,\n                    limb3: 0xda22254161644c0d73135b3,\n                },\n                w9: u384 {\n                    limb0: 0x97edd0906ebc8269feff2745,\n                    limb1: 0x9faf40b4f990563dbb8b6a9b,\n                    limb2: 0x55e5557db5d8f738aca6cfce,\n                    limb3: 0xf13fb2d9a5e619a1e10167d,\n                },\n                w10: u384 {\n                    limb0: 0x7fc2ba107c37bf200a3d128e,\n                    limb1: 0x9bb0216dec247ae73a8d8f46,\n                    limb2: 0x1ddfeeb377abfa6a56ce7bd7,\n                    limb3: 0x152f629874880c14a7fc9709,\n                },\n                w11: u384 {\n                    limb0: 0x29793cf627b6c775b761a603,\n                    limb1: 0x2d71f3cf25ee0423e7c54f3c,\n                    limb2: 0x8470327513832374e529222e,\n                    limb3: 0xd8a7063ea9e13a1184eb587,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xc98374fb3b44c0e6942ba4a3,\n                    limb1: 0x67de3f6c038ef1323a6aa322,\n                    limb2: 0xb2277b3b25524d61527bacd7,\n                    limb3: 0x14d40787156e7ebfa93f6f99,\n                },\n                w1: u384 {\n                    limb0: 0xced08def20a48570ef18bf4,\n                    limb1: 0xdb6983a66359c51f2ab71327,\n                    limb2: 0xe099b96500cdab825f87b7fd,\n                    limb3: 0x14e67481e4aec8ffb05fbb17,\n                },\n                w2: u384 {\n                    limb0: 0x7f465e87c522bb9f7df6a9f9,\n                    limb1: 0xda4ccc6d47457fd8073dac50,\n                    limb2: 0x52533bf52010ae930ae384f3,\n                    limb3: 0x36f4d9a630f659ee0049940,\n                },\n                w3: u384 {\n                    limb0: 0x9458ec32cf854cf87179a081,\n                    limb1: 0x3708fddeb7317f93acfb1b9,\n                    limb2: 0x45e25f7a68c0c63865dc7169,\n                    limb3: 0x17cc7f665ab618af9bb8ed0a,\n                },\n                w4: u384 {\n                    limb0: 0x85fbbd958c9517c58a72f4eb,\n                    limb1: 0xeb94429d923c8f57aa64659d,\n                    limb2: 0x53d22d4278caae28dee0ab98,\n                    limb3: 0x77749f245b0607f9a8266dc,\n                },\n                w5: u384 {\n                    limb0: 0x4a9e638a04d4cdefa92a921b,\n                    limb1: 0xa751ed26127bdae0471e4d66,\n                    limb2: 0xcaa20c710aaaf86cf3509376,\n                    limb3: 0x754e574bc910d618dc31dea,\n                },\n                w6: u384 {\n                    limb0: 0x5d9f22fb58b20cb89b60a7a2,\n                    limb1: 0xa2d39e0d29c61b355f9f8221,\n                    limb2: 0x5b42ad2b0cdd40f198fb4933,\n                    limb3: 0x146b356a1037d82e3fd60a35,\n                },\n                w7: u384 {\n                    limb0: 0x8c8f7c35ea3ba1960632cbb2,\n                    limb1: 0x88989dfeb7c7f7c108812866,\n                    limb2: 0x5d65fb080c6c9703c3de7da3,\n                    limb3: 0x17f80c85d8708e2c4e0f76db,\n                },\n                w8: u384 {\n                    limb0: 0xe72c663563a2683a88282047,\n                    limb1: 0x9f896928b8f68240ae87318d,\n                    limb2: 0xae2fe9dae790ab09f051d396,\n                    limb3: 0x103c85e204ea356a1df02170,\n                },\n                w9: u384 {\n                    limb0: 0x8b2a42e00385585058c6871d,\n                    limb1: 0xca757495dd55992019b0532e,\n                    limb2: 0xddc38038d9b6c6b0c1191c19,\n                    limb3: 0x456598325b3e07c16f6cb90,\n                },\n                w10: u384 {\n                    limb0: 0xc0a98bdc8196fd8b9bf4edf2,\n                    limb1: 0x971354e815f09e434646dc35,\n                    limb2: 0x8848e0035a10ca071f522483,\n                    limb3: 0xea464fda93a90c2f0c6cbc,\n                },\n                w11: u384 {\n                    limb0: 0x125314c8b22d6dc1d849816f,\n                    limb1: 0x81596b8b1354b4a79eff397b,\n                    limb2: 0x6fd4eae90dc4ca7a020c0d58,\n                    limb3: 0x633d54eba634239e2224280,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x7664507d65379e09b0cc8081,\n                    limb1: 0xa7214a05165e9dd1cb822746,\n                    limb2: 0xdaa4b32cd1894fcb5869da3e,\n                    limb3: 0x11dd5a0d713ff9a4216dc02,\n                },\n                w1: u384 {\n                    limb0: 0x72c884220671860deab6fe4c,\n                    limb1: 0xf7edb308d081aad11737b2aa,\n                    limb2: 0x179a550ac8de7988cb51745f,\n                    limb3: 0x18c92348bd738ff79eb51da6,\n                },\n                w2: u384 {\n                    limb0: 0xd0997e854e959e9fcf50612a,\n                    limb1: 0x731bde68fbe33e65958e25a5,\n                    limb2: 0x5c75550140147ca50f03f4c1,\n                    limb3: 0x1724f1c48007969b733593aa,\n                },\n                w3: u384 {\n                    limb0: 0x8cdd8173b838cbfa5e716055,\n                    limb1: 0x7cce9c3704cca203a84d1eaf,\n                    limb2: 0x609798ba1aa28ffaff08d41,\n                    limb3: 0x17815ba1eca35154689bbbd,\n                },\n                w4: u384 {\n                    limb0: 0x1c7e64b6dbfeaca240b5ce1c,\n                    limb1: 0x334cf124f9c76e1e2c54997f,\n                    limb2: 0x64e29de5338a04c86a571534,\n                    limb3: 0x4322d1d2e68ad82e5576014,\n                },\n                w5: u384 {\n                    limb0: 0x8e8720162d72df7b82b54ddc,\n                    limb1: 0xf9a9d4e498d4932f72861daf,\n                    limb2: 0xa62955f8bf4d62ab5326d370,\n                    limb3: 0xe10f22c8698bbbb16ce96ab,\n                },\n                w6: u384 {\n                    limb0: 0x7e12194ea7c3af3ca1f4627e,\n                    limb1: 0x57c3921b26b0c0f8ae782c80,\n                    limb2: 0x7807e0e72a965c15e92a3692,\n                    limb3: 0x10d5c83fc7687bdeda2fa6a9,\n                },\n                w7: u384 {\n                    limb0: 0x6c3118b5d18f2ba8f3358410,\n                    limb1: 0xdbd08498b72968ac4f865556,\n                    limb2: 0x1606bcc23a2fefcd7b98b187,\n                    limb3: 0x1836f088bafe98f9f35b628d,\n                },\n                w8: u384 {\n                    limb0: 0xb3ec8857a717227fd2e410c7,\n                    limb1: 0xf71681b713d44faee8ccade2,\n                    limb2: 0x1a889225d6c3ae543975d7ab,\n                    limb3: 0x4042e6058ba0ed258215db8,\n                },\n                w9: u384 {\n                    limb0: 0x92dca3c8ef22f5c5ad68411e,\n                    limb1: 0xea04b401e31bd03c03f45391,\n                    limb2: 0xf274818f73907b389eee6555,\n                    limb3: 0x110981e160f9a1144b049f6d,\n                },\n                w10: u384 {\n                    limb0: 0x7809289b28677816d3d20f51,\n                    limb1: 0x2b325b38281ca3d9447717a8,\n                    limb2: 0x750a16aae8cec71a981e64f9,\n                    limb3: 0x4c4bb16a4d45dbfcdd6de82,\n                },\n                w11: u384 {\n                    limb0: 0xa19d86a548a59b31bee7330d,\n                    limb1: 0xbab4358db8efdc356098935c,\n                    limb2: 0xecf4b1e2071637cfa269d441,\n                    limb3: 0xfdc8efae68b158880892941,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x731a6668a56fb2e638b5386d,\n                    limb1: 0x2f6050b816d5da56d8b4aeac,\n                    limb2: 0x9f8cc60a1825ed2bc48ced64,\n                    limb3: 0x14d27ab7d2dd9d4dfc62f9b4,\n                },\n                w1: u384 {\n                    limb0: 0x36e235511e3aba57cd7a4166,\n                    limb1: 0x651418ba41dd7e611da499af,\n                    limb2: 0xa2443f20594fb2be6da75cc3,\n                    limb3: 0xe5b76d2ac4d96fc0a324e20,\n                },\n                w2: u384 {\n                    limb0: 0xd9a45f081496460d0c0ed0ac,\n                    limb1: 0x2e77975aa2352664d6adb2e4,\n                    limb2: 0x2faa41b81ca6013a7f61b19a,\n                    limb3: 0x486d9ef9a7963973b526016,\n                },\n                w3: u384 {\n                    limb0: 0xa30b18466742d1c3215c7ca9,\n                    limb1: 0x76bb8e0f21ed01073e7cd26d,\n                    limb2: 0x72e300f6162dfb4f824322b3,\n                    limb3: 0x170086077deae464de32c314,\n                },\n                w4: u384 {\n                    limb0: 0xb98779fe717a76947ffc64a8,\n                    limb1: 0x22829a2223d7a3c1e115868,\n                    limb2: 0xfd92daccd29c35d6e9891f91,\n                    limb3: 0xc8cd313b3bac470a84c06c,\n                },\n                w5: u384 {\n                    limb0: 0xd7fb2ab79ade8db9f0753816,\n                    limb1: 0xc8e90a86892a3f9973f3a709,\n                    limb2: 0x439586d8958df5477546a8c9,\n                    limb3: 0x11c5062a433f8a665d2fec03,\n                },\n                w6: u384 {\n                    limb0: 0xec349f8ca4e9628ef8ad1d0f,\n                    limb1: 0x41ed7cebf144cf0991fd449f,\n                    limb2: 0x83fd7077e122719cd9a150db,\n                    limb3: 0x4f4f8cab62516e0bd8eed4,\n                },\n                w7: u384 {\n                    limb0: 0xd65b0369dac2474a3360256c,\n                    limb1: 0x73aa7477aa55f747c118bde4,\n                    limb2: 0x166c215a026d96f815575905,\n                    limb3: 0x19ef4018eacc8cec0d7c2952,\n                },\n                w8: u384 {\n                    limb0: 0xaf93f1012698bd074cae6d2a,\n                    limb1: 0xf1dd95a8d7d4c5624dc77fab,\n                    limb2: 0x22ad91dc94c520bed552ce68,\n                    limb3: 0x7149e3ea5cbb31d49fa48d4,\n                },\n                w9: u384 {\n                    limb0: 0x309be21144e9429149f5ea74,\n                    limb1: 0x5a23ebfb744401c93d028104,\n                    limb2: 0x1328c0e96b3dc98cf9ca2178,\n                    limb3: 0x4a0a0910ab2af1883e3bd42,\n                },\n                w10: u384 {\n                    limb0: 0xd096a251af3d32c676bb4288,\n                    limb1: 0x81a2455886a5de7de17a3a3d,\n                    limb2: 0x785780c752a0fec2ab697d7f,\n                    limb3: 0x424eb933d2f578926758c8c,\n                },\n                w11: u384 {\n                    limb0: 0x9bbf4ea4c5f12c0f3a80655a,\n                    limb1: 0x6c3952358a56be8b39ffc122,\n                    limb2: 0xaabdbf346cb1e900c6fa6ef7,\n                    limb3: 0xfc816c836e1f58f9bc2ee34,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x423f069d338c478ec1af9c39,\n                    limb1: 0x29b54a9a019077a85febd5b1,\n                    limb2: 0xd6c54429887f79c4f5e8537e,\n                    limb3: 0x2d645e495b1ae162900aa5d,\n                },\n                w1: u384 {\n                    limb0: 0x15924967d61c029186ecddf3,\n                    limb1: 0xad51150b9a239c5f6107f3e,\n                    limb2: 0xc131c14b453f056fdeb354d0,\n                    limb3: 0x7ce2f5cee25ccf4630a4da6,\n                },\n                w2: u384 {\n                    limb0: 0x24cffdd2b4963236469c595b,\n                    limb1: 0x1cedb62a0a9a9d19ec0ef73b,\n                    limb2: 0xc83e7dc874bd3671d4079d93,\n                    limb3: 0x54f10b385a7cc18a25a48e9,\n                },\n                w3: u384 {\n                    limb0: 0x51156a1330e11e4107978c65,\n                    limb1: 0x126d680056df9e678c923a15,\n                    limb2: 0xc88a5e31000b304a279d33c3,\n                    limb3: 0x5add5bf0e3de07507b300e9,\n                },\n                w4: u384 {\n                    limb0: 0xaabb4da106a561c89da6e640,\n                    limb1: 0x67706e7ff291eb8350fe823f,\n                    limb2: 0xa2a5b3a4109b157167daed75,\n                    limb3: 0x3a53fba9d2b86d5617419bd,\n                },\n                w5: u384 {\n                    limb0: 0x49f0d1228f3483ea001e89c,\n                    limb1: 0x2904017f1a05647ad6b814bc,\n                    limb2: 0x32c50c7b36360c7072b97c5e,\n                    limb3: 0x4a4b35d842e9157f9452ef4,\n                },\n                w6: u384 {\n                    limb0: 0xe910ff959aa337ba694b3103,\n                    limb1: 0x1eb7de8661a5aa726957afc5,\n                    limb2: 0xf46dc87d119c3f6b7bc26c47,\n                    limb3: 0x16d4d3eee5db3369b1cd5095,\n                },\n                w7: u384 {\n                    limb0: 0x2b2ebbf8ed056759bb5ad089,\n                    limb1: 0xc997a5c29ff182751a7a4a1f,\n                    limb2: 0xd4255d635200af86412c0d3c,\n                    limb3: 0x133e3849f5abe45d50ebd4f3,\n                },\n                w8: u384 {\n                    limb0: 0xc646891ae42a453618bf6946,\n                    limb1: 0x6cdba6a4c36531001a999ba9,\n                    limb2: 0x4f8028f68a1b39ea09f81c8c,\n                    limb3: 0x5a4a8424db89080f7ef2d4c,\n                },\n                w9: u384 {\n                    limb0: 0xcfad8c2e4174ad2ae083acd8,\n                    limb1: 0x11fa7404e0d60cc8429a7206,\n                    limb2: 0x16f6645ea542f26a2bbb02c2,\n                    limb3: 0xe221955c928cb0869ff1e7e,\n                },\n                w10: u384 {\n                    limb0: 0xa55f4a4e3b44b7435f37266c,\n                    limb1: 0xde3c9ef2eb0e12ebacbf789b,\n                    limb2: 0xec729141e4b14e595a75e170,\n                    limb3: 0x9d7eb5a60f56f8c5b9cc908,\n                },\n                w11: u384 {\n                    limb0: 0x51393b6db9309927d8ab8093,\n                    limb1: 0x81b817c741b2485a83aade8b,\n                    limb2: 0x45548c3f24b4ce607a7498a1,\n                    limb3: 0x1329d0b6119a0a2fb95f1365,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x22d7122b0c05411b942f9640,\n                    limb1: 0x1bcc87de4a309fbcf7df22c1,\n                    limb2: 0x3dbff192e88552ff01ec54f2,\n                    limb3: 0x16453c594411bc9614273cb,\n                },\n                w1: u384 {\n                    limb0: 0x3cdd3cbd9b5ef16b0ab5d12e,\n                    limb1: 0xc9b831682cc9f7562631eb82,\n                    limb2: 0xd8c0b4a326e6d711af1c6fcc,\n                    limb3: 0x15999f5b65933e477e527ca2,\n                },\n                w2: u384 {\n                    limb0: 0x8e1e5c76737a52e34970f54a,\n                    limb1: 0x13e660457b4680094701954,\n                    limb2: 0x8ef5bfc33edf509615dba422,\n                    limb3: 0xaf25c6ba9a9da6f8d1d8d84,\n                },\n                w3: u384 {\n                    limb0: 0xc6158c9388e8d4cdf213db7,\n                    limb1: 0x99bf0fc5cd55777088191fa4,\n                    limb2: 0xca9fb43a85b157663614f5e7,\n                    limb3: 0xe19f5a790b81946863c09,\n                },\n                w4: u384 {\n                    limb0: 0xaaf5ae0abc93c789d2f553f5,\n                    limb1: 0xb0e4d0b4161db236bfdded84,\n                    limb2: 0xcb1b789e885ae9f7603d7597,\n                    limb3: 0x173a004b4ac0b6990ce57848,\n                },\n                w5: u384 {\n                    limb0: 0xb8270359d997a568b9ca2d,\n                    limb1: 0x6c3f97a0095424bac05918c8,\n                    limb2: 0x4fc75521f68391b186c98d69,\n                    limb3: 0x179c925b368a6922c052109a,\n                },\n                w6: u384 {\n                    limb0: 0x4a64cd8043d641ec589cbced,\n                    limb1: 0xc32ad31f1e72fbf5ad938a1d,\n                    limb2: 0x394ab548e7bbdcecd04cfa57,\n                    limb3: 0x1903183cfe25996781a6f138,\n                },\n                w7: u384 {\n                    limb0: 0x95d6117e159fd5a627fbf3c8,\n                    limb1: 0x8bb75a8e2cca90dca43db09d,\n                    limb2: 0x52ac5959acb24c2975de0b46,\n                    limb3: 0xc733099ca61082513b739d0,\n                },\n                w8: u384 {\n                    limb0: 0xc254c0d7ebcfb3e456d4db70,\n                    limb1: 0x841731cd2f31e3eb6dc2cb83,\n                    limb2: 0xbd575ed553cf9d9f4fe2d195,\n                    limb3: 0xb9b6dbbc6b7b7a3872452d6,\n                },\n                w9: u384 {\n                    limb0: 0xc35f21cbc3ac37bfefbb62b,\n                    limb1: 0x6d0f6d5a72fb9754dd45e03e,\n                    limb2: 0x115c5b6547d1b15f1ab880c8,\n                    limb3: 0x49fc712ba5a255dbc3c3734,\n                },\n                w10: u384 {\n                    limb0: 0x455d3b2f4797212bc3a8eb2a,\n                    limb1: 0xcb84367fab4cc67d4a608ee7,\n                    limb2: 0x27c5381bf627b1f6770fb730,\n                    limb3: 0xda5838799c2b92a9a46f93b,\n                },\n                w11: u384 {\n                    limb0: 0xe377b673276f66aed0431e2e,\n                    limb1: 0x22424ab805248189df3bbc60,\n                    limb2: 0xe8df0a999d7ea73c0e5c21c6,\n                    limb3: 0xa1a1a982e74b25c855c6630,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xd8de7c0a020c2bfab98f462b,\n                    limb1: 0x4259e1a06cc5c0d48aa4b7b5,\n                    limb2: 0xa600cfba72cd0eefd68378ca,\n                    limb3: 0x16d21a98b960ac0a3ce99480,\n                },\n                w1: u384 {\n                    limb0: 0x9c441104f663c6cfd27a21f,\n                    limb1: 0xa2538fbacb469c18af6f6d36,\n                    limb2: 0xaca0084cb5ce246d9e004b86,\n                    limb3: 0x1818d39bf51f5701a630cd13,\n                },\n                w2: u384 {\n                    limb0: 0x83662e661b082815e9b3291e,\n                    limb1: 0x953c223a59774cd045bb2e72,\n                    limb2: 0xd965efa4e0a2b9c6d63ed7bc,\n                    limb3: 0x75910bff00e3ebfb430ea1d,\n                },\n                w3: u384 {\n                    limb0: 0x21f101851b5e6a66fe5fb3cc,\n                    limb1: 0x2078ad4044a6e58b48b2fcad,\n                    limb2: 0xb95b15546d0fb95d6af37e7f,\n                    limb3: 0xc85bc26e7c69777a5b73186,\n                },\n                w4: u384 {\n                    limb0: 0x2813b1a799ef66155d7a5ff5,\n                    limb1: 0x706d19aaf61ac615d8d7a776,\n                    limb2: 0x35b48c7bae00bb479924c911,\n                    limb3: 0x113f0545928ec85fc72b3b83,\n                },\n                w5: u384 {\n                    limb0: 0x29ac845c79e1955587d53a3f,\n                    limb1: 0xb889fc1aef4cf20aff2f8c4f,\n                    limb2: 0x50fef6b1712a33cba0703bf4,\n                    limb3: 0x149cfd613a758a131850b749,\n                },\n                w6: u384 {\n                    limb0: 0xa74862c7c240e22184bb0faa,\n                    limb1: 0xe185dab81bd7e850ecfe6e7e,\n                    limb2: 0x579166b24e863176b906fc26,\n                    limb3: 0x4d862301cdecd83870cf1d3,\n                },\n                w7: u384 {\n                    limb0: 0xd63ac2c17c787ffef5f67ac5,\n                    limb1: 0x490f34bd28d97037038b425c,\n                    limb2: 0x8eaaea7d3e9970844eca0bb7,\n                    limb3: 0x12ff4861711d4f5fc6c7df52,\n                },\n                w8: u384 {\n                    limb0: 0xa77d513840181e6049eb2cfd,\n                    limb1: 0x29144762781008597f248817,\n                    limb2: 0x29ddbf8ae66b47d99b8f144b,\n                    limb3: 0x33b700fe7d54ab6cc6366d8,\n                },\n                w9: u384 {\n                    limb0: 0x7c605b80a783b29fbdb7913a,\n                    limb1: 0x8b972070a4c66018b2157c13,\n                    limb2: 0x9b41fbff0b39b434d4fc621e,\n                    limb3: 0x3642078114e5416bdd1743b,\n                },\n                w10: u384 {\n                    limb0: 0xb65736f5f91bc2870134be37,\n                    limb1: 0xe433e5c3d68b7ae3c424715a,\n                    limb2: 0x9fd29af8fc74edec039d14b7,\n                    limb3: 0x77405e5599759db17b993e5,\n                },\n                w11: u384 {\n                    limb0: 0x5ebf0ff64d839d1b21510f03,\n                    limb1: 0x2ecb8cc84c90c881b6abd4f4,\n                    limb2: 0x1cce59b581d9b2b04bdce6c0,\n                    limb3: 0x13c54e92b75b47920c1bc23c,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xd230ba8192574b8f0d2e8d0d,\n                    limb1: 0x8d46a7f9896bc752e15f2bd1,\n                    limb2: 0x4c46523f3eaeb3d3c195cc64,\n                    limb3: 0x9a8c180064d8e4aa41a3fb8,\n                },\n                w1: u384 {\n                    limb0: 0x6b41258f53e02a3f4f4080b9,\n                    limb1: 0xae4efe95de593debca9447c8,\n                    limb2: 0x53fa98259797f7b69a5a740c,\n                    limb3: 0x1e723f2e6d538ec35ab098a,\n                },\n                w2: u384 {\n                    limb0: 0xa82549fa15fa37278e37e54f,\n                    limb1: 0xf3e4bcc528ef5b1739c54e51,\n                    limb2: 0x23325e087bd1e6be95bc9c2,\n                    limb3: 0x3d06b79028ddad39882372,\n                },\n                w3: u384 {\n                    limb0: 0xb8692892001c9cb56b90952c,\n                    limb1: 0x733b4da305705ade344a3621,\n                    limb2: 0xdfe666914d66fb6ab1d4c9bf,\n                    limb3: 0x89317029155d09a628dc7ad,\n                },\n                w4: u384 {\n                    limb0: 0x92116763fe48fd34e5fcde4c,\n                    limb1: 0xbc96d0f997ba650008ac0eac,\n                    limb2: 0x770993a8f2ddc97a352efec4,\n                    limb3: 0x1584ba5015a2629d14debb7d,\n                },\n                w5: u384 {\n                    limb0: 0xfcfe8c0df558699103baf566,\n                    limb1: 0x5435e711fabc8e56bf54699b,\n                    limb2: 0xeb0c73e7b22d70352bb5a564,\n                    limb3: 0x343483df7a88d987c69408a,\n                },\n                w6: u384 {\n                    limb0: 0x384d80fe4e9e50d65ceae168,\n                    limb1: 0x74f4dcd19aed7592bc9593ab,\n                    limb2: 0xe493540b588ffd977f4ee0ca,\n                    limb3: 0x23ed7611ed958da6db24d3b,\n                },\n                w7: u384 {\n                    limb0: 0x2eec2f1a902b21208d2243b1,\n                    limb1: 0x3ff398adc2bf7b18affd6970,\n                    limb2: 0xfe74e53e674476aad89727fe,\n                    limb3: 0x17adfbe5a9f0d328bed1b1d5,\n                },\n                w8: u384 {\n                    limb0: 0xb3c26226f8db87e4acd22a19,\n                    limb1: 0x74b1ff048bb0cee38198e560,\n                    limb2: 0xf91b63c44856aa5995195c7a,\n                    limb3: 0x57ae60555c4dfbb9f119dd0,\n                },\n                w9: u384 {\n                    limb0: 0x391b35c3b492a2b733913137,\n                    limb1: 0x1b718fb7d4529435ea05e0ff,\n                    limb2: 0x7628c94eae8736f7066faa73,\n                    limb3: 0x12482498758030e4cf058fa1,\n                },\n                w10: u384 {\n                    limb0: 0x6fe096b1a72856d5ff144f61,\n                    limb1: 0xe7e8e20c91eb503e936201d3,\n                    limb2: 0xa873f6f582a8c5e528b7e017,\n                    limb3: 0xac11b393a2ca9b81f52d7e2,\n                },\n                w11: u384 {\n                    limb0: 0xbbcfbb7847f1fc7f5c887867,\n                    limb1: 0x8ca064238b30c902565c58f4,\n                    limb2: 0x3b342400e4bf64f5cfe303f8,\n                    limb3: 0x141881c8cb4ac57fdd2421d0,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x57c1e0a314f410d7c80f0d6c,\n                    limb1: 0x188efa3af0e9a15ae09a39a6,\n                    limb2: 0x8549ddd8cee9cc24a76927f5,\n                    limb3: 0x828abb514c39b36af5e5e59,\n                },\n                w1: u384 {\n                    limb0: 0x86b5e60ab6d06ad115373349,\n                    limb1: 0x30ec5eab948a288e962221e0,\n                    limb2: 0xa5ece7da90052d41645094dc,\n                    limb3: 0x292b0c29d2ca5076acaa1f7,\n                },\n                w2: u384 {\n                    limb0: 0x53fa181062874a0e2952a6bd,\n                    limb1: 0x139aea9f3d57245a94f247b8,\n                    limb2: 0x13e918fdbed0933c9e1e4691,\n                    limb3: 0x129ab8b6bedb190996697c6c,\n                },\n                w3: u384 {\n                    limb0: 0x8c94450ce70b11a241947381,\n                    limb1: 0xa6c255e7d67f8a5466c2d100,\n                    limb2: 0xa28b8d54a0eb9220bda7f20b,\n                    limb3: 0x9645f3081882f29208bc4ca,\n                },\n                w4: u384 {\n                    limb0: 0xdb6f564cc32943107d116638,\n                    limb1: 0xd9799a7f993d67fe769b8272,\n                    limb2: 0x861d137dc34f59e9b52ea65d,\n                    limb3: 0x10da20caed9c13858e34bfd5,\n                },\n                w5: u384 {\n                    limb0: 0x223bada77c016723d852006d,\n                    limb1: 0x95041b73eafb915659a2fff7,\n                    limb2: 0x36b777b400b7e9e299363ccd,\n                    limb3: 0x17c8527995c3f0b83cbe83b,\n                },\n                w6: u384 {\n                    limb0: 0x387c0822da34f6001fe9f474,\n                    limb1: 0x7ca208b866f7d21734a55544,\n                    limb2: 0x7415b9fff8e87b99635abfd3,\n                    limb3: 0xcae06be69307d97643444a3,\n                },\n                w7: u384 {\n                    limb0: 0x7826924ebf635fa31599f2d8,\n                    limb1: 0x255b41d4dcc5e9df82f2bc5,\n                    limb2: 0x742046a3d48ba8fd2ded46fa,\n                    limb3: 0x14e1a77687c2fafa04ad3cc5,\n                },\n                w8: u384 {\n                    limb0: 0xd1861303b32847e9dfa309b,\n                    limb1: 0x95643d858f4ab818e1429eb4,\n                    limb2: 0xf5f69835e9e3219e541e489a,\n                    limb3: 0x106791b088d3043aec789d2,\n                },\n                w9: u384 {\n                    limb0: 0x3fbf8473656db45761cd4577,\n                    limb1: 0x95dfb9c6f2581b80ca9c6e0d,\n                    limb2: 0x19cdeb22dd3af66c09886e0,\n                    limb3: 0x46d1856bcf6eb442eaa0dd1,\n                },\n                w10: u384 {\n                    limb0: 0xfc5db242d9eef89d6b2b0ead,\n                    limb1: 0xa441afa00af0ebf9e4a5566d,\n                    limb2: 0x737340b78921c31e7d6b998b,\n                    limb3: 0x152c1e8a7645e37878c00117,\n                },\n                w11: u384 {\n                    limb0: 0x707b12110eb67f3f3e25082d,\n                    limb1: 0xadfe406a34710c9b1f1a67f9,\n                    limb2: 0xcf700552ca3b4a453710e271,\n                    limb3: 0x1329ce5688848746b4cdb9c6,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x63ea02a83316ced86cff7bc3,\n                    limb1: 0xad3cc1665ec97ed103bf2a97,\n                    limb2: 0x66e914ba49a82240606bef39,\n                    limb3: 0xbe1aae2e0755468744c9cf8,\n                },\n                w1: u384 {\n                    limb0: 0xdd0988f0f7381759cede6cf1,\n                    limb1: 0x8c668cf30f6b849f93e18738,\n                    limb2: 0x17677bd95c25553069f8d3bb,\n                    limb3: 0x213b88bd1d59c856f22c57a,\n                },\n                w2: u384 {\n                    limb0: 0x468ebd74785e502a030b2d64,\n                    limb1: 0x99e6500a6eec17b7582c46de,\n                    limb2: 0xca602fa99428bb3096ed2234,\n                    limb3: 0x221c7127baba56f36027a78,\n                },\n                w3: u384 {\n                    limb0: 0xecf5c97a4baeeec96686a951,\n                    limb1: 0x8a858ecbe3f7428c1e485263,\n                    limb2: 0x7a93d3d522c174fc7563ce8,\n                    limb3: 0x6b458b1280095fbd58dced3,\n                },\n                w4: u384 {\n                    limb0: 0xf7235d01c69ea79eb8c3f3c8,\n                    limb1: 0x1e8d53af3b6a8c0d384dba87,\n                    limb2: 0x7219df5572fc6a5fb03c3640,\n                    limb3: 0x4a28cd8ddddd35c4a2bc756,\n                },\n                w5: u384 {\n                    limb0: 0xea22308af0e9f3e49bc2073,\n                    limb1: 0xe16fb20226994cd501b48956,\n                    limb2: 0x8b5463f6a25ad49ef766f7c9,\n                    limb3: 0x920549318b13fd2a55438e,\n                },\n                w6: u384 {\n                    limb0: 0x72d478cbbd10de13e7840523,\n                    limb1: 0x61148bd13cf2cd5f974ef513,\n                    limb2: 0x14fc5faacaf5f306eca036dd,\n                    limb3: 0xd5c18cfe88ef2a96785e79,\n                },\n                w7: u384 {\n                    limb0: 0xedaaa07fbc739502463ef449,\n                    limb1: 0x8756dc3df79501b08bcfd30a,\n                    limb2: 0x41db0294140d03ab93ac331a,\n                    limb3: 0x2faf35b55c223051329f5f9,\n                },\n                w8: u384 {\n                    limb0: 0xf4ddf6770b28a0e39c42e1,\n                    limb1: 0x1bc579527a6d36ebcb9c1e43,\n                    limb2: 0xd8d3dda24eb2d5c51e94fbf7,\n                    limb3: 0x1929169f16f2bb1805258a1f,\n                },\n                w9: u384 {\n                    limb0: 0xb7c17acd08c863c5de00ab8e,\n                    limb1: 0xd061e541ab904021cb7415f3,\n                    limb2: 0x4e4103b8a474b65ca3b96404,\n                    limb3: 0x43f042bfe3512474ab82a6,\n                },\n                w10: u384 {\n                    limb0: 0xdf4f7f352c2231ba350a5e09,\n                    limb1: 0x436f7c965c9cba8884ee1f92,\n                    limb2: 0x8820c54c22fc9835d6d63889,\n                    limb3: 0x137b29d6f48df1e1e6a859e3,\n                },\n                w11: u384 {\n                    limb0: 0x213101a3e3c1d0de36762bb2,\n                    limb1: 0x2841a7df27a0c7cd8324b382,\n                    limb2: 0xf3aa170a745fb830cf57da1e,\n                    limb3: 0x34d8b8302b0f58d9d5a85e4,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xc102bc3e2c1431657103a4a8,\n                    limb1: 0x3aba49ff88c4ee3806b04d0d,\n                    limb2: 0x985c1f9d4156682f0c5aef65,\n                    limb3: 0xc0561c0e6c3d1cc794c57dd,\n                },\n                w1: u384 {\n                    limb0: 0x9c02003f65c233b63f5d57df,\n                    limb1: 0x675a9896c5ebc6c86acfe082,\n                    limb2: 0xf10e29c84b756a49c862026e,\n                    limb3: 0x397c60ac478f6f3d04dd211,\n                },\n                w2: u384 {\n                    limb0: 0xde0ab514224b0a09d4470108,\n                    limb1: 0x30cffe24a16eef64a4e3f8d9,\n                    limb2: 0x250e573cf0cdc9d0474a96a5,\n                    limb3: 0x320c97808c919b6bc77a6b9,\n                },\n                w3: u384 {\n                    limb0: 0x22e1478aaa8dbef5b7eb5c75,\n                    limb1: 0xd73e5649b061e7dec320410,\n                    limb2: 0x9e5973e5c196af20a9522b87,\n                    limb3: 0x888405f1b7e02f51d25e4cc,\n                },\n                w4: u384 {\n                    limb0: 0x7d63d9cb91c7e6ecea27bd0f,\n                    limb1: 0xafd606d67aec5132495aea6e,\n                    limb2: 0x89d9cc366cd70849bf7a6c5a,\n                    limb3: 0x6a1cdcfbb9094ed585438,\n                },\n                w5: u384 {\n                    limb0: 0xc63d5979f095ce42b97ffe02,\n                    limb1: 0xf0b1958f676e488a85a463d3,\n                    limb2: 0x579f2806dc3a11e99b548e2c,\n                    limb3: 0xd3efe9be9e8ed6f0311f48a,\n                },\n                w6: u384 {\n                    limb0: 0x241c2c02a7a3ed68c8347454,\n                    limb1: 0x3c2e082d9d49bc403f20af15,\n                    limb2: 0xffb91438b7adbf0fd03b8452,\n                    limb3: 0x9f4a8a1c2bd71edd80fc8fa,\n                },\n                w7: u384 {\n                    limb0: 0x7a09864d807d30f8134e35af,\n                    limb1: 0x4909a61fde584e8a97843962,\n                    limb2: 0xb0ae7df0ca31783cdef766ec,\n                    limb3: 0xab6c21fb130ff409a076e98,\n                },\n                w8: u384 {\n                    limb0: 0xa4cf4a4bfb9a8696346ae5f2,\n                    limb1: 0xf441ab330a1a48b023ea4b16,\n                    limb2: 0xccbedbb5d89afd778ebbe2c6,\n                    limb3: 0xba098deb3929c27bad2d7cf,\n                },\n                w9: u384 {\n                    limb0: 0x15ecdee09158e723e156143a,\n                    limb1: 0x2d88661ce3e7ed32f1813f83,\n                    limb2: 0x9268f857661e69f43c1006e9,\n                    limb3: 0x1baab7bc3df8b069e7921d3,\n                },\n                w10: u384 {\n                    limb0: 0x8851dedab1e371b332830bb3,\n                    limb1: 0xe53bc821c7dd0054d6f6f857,\n                    limb2: 0x46240f19ae951bc875a2c8d5,\n                    limb3: 0xe7507265782567bc614a60b,\n                },\n                w11: u384 {\n                    limb0: 0x9cace8682481da13c90f59c7,\n                    limb1: 0x79b9f6744c3fa34fa7ff5e2c,\n                    limb2: 0xa95279fc2041e30178a37645,\n                    limb3: 0x1201d399c1c8c0f103f8acf8,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xfe58f82f5a9a9486897fd7e1,\n                    limb1: 0x2f004eba229cefab93da839d,\n                    limb2: 0x3002f2bb83b58880f0d25efa,\n                    limb3: 0x122600e61fb5e8a8f3a87752,\n                },\n                w1: u384 {\n                    limb0: 0xdcc4e4defac8110561f0b81f,\n                    limb1: 0xe4595573f7563e76b39ecf25,\n                    limb2: 0xe9a4f842ebb4b0f21e7e6904,\n                    limb3: 0x1b7035165596268ab55405,\n                },\n                w2: u384 {\n                    limb0: 0xe2a1e6ad130b5dec5a307b9c,\n                    limb1: 0xa0715f0bb37946dee0717185,\n                    limb2: 0x89926a4a4bd27b0dcb987e4,\n                    limb3: 0xfa2213bf1fa84f02b4f4886,\n                },\n                w3: u384 {\n                    limb0: 0xf7a4cd53187cf70d56c22d5b,\n                    limb1: 0xe27c4a45b50546e7d688b66b,\n                    limb2: 0xfffbb1435cd3e4d84e85fca7,\n                    limb3: 0xeef721f1ff2d893b897c350,\n                },\n                w4: u384 {\n                    limb0: 0xf91449f591421e2ef6a486e7,\n                    limb1: 0xeeef2201ee263b14b45d18e4,\n                    limb2: 0xbd80060590e3e6b8ea5c51c9,\n                    limb3: 0x265aec09b58dacbb7a04b17,\n                },\n                w5: u384 {\n                    limb0: 0xa799249a4b8a0bf74c5885dc,\n                    limb1: 0xf3369cf6149d51d50c53050f,\n                    limb2: 0x94e0a1d05c1748dbf29dcddb,\n                    limb3: 0x1025ab4a8aff8453c776f76,\n                },\n                w6: u384 {\n                    limb0: 0xab0a9cbc3226d768b05be455,\n                    limb1: 0xda1ec9b71b4492481506fcd7,\n                    limb2: 0xdc657a6b18a8b49f20be7022,\n                    limb3: 0x16501c8c3d498fdd182c68da,\n                },\n                w7: u384 {\n                    limb0: 0xda69756ffc4c2cc6785aea22,\n                    limb1: 0xf61431a0fb779cd2dcd9d576,\n                    limb2: 0x13bf99c01ad490a1b53665f8,\n                    limb3: 0x18af034f82f45856ec965578,\n                },\n                w8: u384 {\n                    limb0: 0xd266c249f052d3f201c1b0d2,\n                    limb1: 0x13da63c60e3566cc4f009ccc,\n                    limb2: 0x3333fc6cdb72a6194cde21f6,\n                    limb3: 0x1604d59edc49752480de7888,\n                },\n                w9: u384 {\n                    limb0: 0x440a479dbe693668b173c604,\n                    limb1: 0xe7aa2e5dcfda7aacf9e06a79,\n                    limb2: 0x659ba8b7e2702424fd322b71,\n                    limb3: 0x15f91e27f1ea647ab5b891a2,\n                },\n                w10: u384 {\n                    limb0: 0x7d84e72876d78a543b85f35,\n                    limb1: 0x41d7a06e4188086be325658c,\n                    limb2: 0x4a3001b914f7fb1079e14d4e,\n                    limb3: 0x167fc4dc25373f64678594d7,\n                },\n                w11: u384 {\n                    limb0: 0x82563c053c16182776849317,\n                    limb1: 0x6700ae4d019967f052b9feec,\n                    limb2: 0x78546ed88fbe3f4cb7f7a30c,\n                    limb3: 0x534411f7b6d38c591965d08,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x43cfc7d230ced51564ac1d27,\n                    limb1: 0x3f27df63705e89b5887f6ef6,\n                    limb2: 0xed962f37b246373dbe286875,\n                    limb3: 0x1153ae983b4bebeb96cee574,\n                },\n                w1: u384 {\n                    limb0: 0x796edbbce52298f87a09de3c,\n                    limb1: 0x28594a3a94d2643da1f44c88,\n                    limb2: 0x1122679cf2a223c7641eba1,\n                    limb3: 0xec358db63b010a5f0195832,\n                },\n                w2: u384 {\n                    limb0: 0x65114260981734bbd0c401dc,\n                    limb1: 0xaece96d8df427dc37661c427,\n                    limb2: 0xee18de1e045a8e8f278623ac,\n                    limb3: 0x119fd094c25c6ad221e4b923,\n                },\n                w3: u384 {\n                    limb0: 0x2260aed58c6f1839b18780e0,\n                    limb1: 0xff136cb3f7910868a9bd9f6b,\n                    limb2: 0xa8eac3560aa6f0b6e9ce27f9,\n                    limb3: 0x147713d9a2ed668c5f769433,\n                },\n                w4: u384 {\n                    limb0: 0xbfa0b51b9f28c1f41615b31a,\n                    limb1: 0xafe3bdfe46e1df691c9e4a8b,\n                    limb2: 0x8ec87ae1766b9944f1d28933,\n                    limb3: 0x173b1e22848118b6d362da12,\n                },\n                w5: u384 {\n                    limb0: 0x3cb1473e40e34bac4f045ec0,\n                    limb1: 0xffe3bde303763828c46764b2,\n                    limb2: 0x2b156470816c102ef2910681,\n                    limb3: 0xff3da5b54bbef112da2264a,\n                },\n                w6: u384 {\n                    limb0: 0xe700fcac3096a1a6fd859886,\n                    limb1: 0x31262c27298b10b8d1a8355,\n                    limb2: 0x7a0c2177d76d700ef9d473a0,\n                    limb3: 0xf68f4e6113a631c0da8e2fa,\n                },\n                w7: u384 {\n                    limb0: 0x74b654d838f7a245bee7f39f,\n                    limb1: 0x665df41d4d1641df03af8d97,\n                    limb2: 0xd3ddeee4890b0c01b82e54c5,\n                    limb3: 0x12c5046f460d2c4e5b4384dc,\n                },\n                w8: u384 {\n                    limb0: 0xfccdc5d4095fc526da571897,\n                    limb1: 0x83b7338c59475d4d75e801d,\n                    limb2: 0x402d5fd5dae3ea66188e61c0,\n                    limb3: 0xa4242530cd7992d10545d7f,\n                },\n                w9: u384 {\n                    limb0: 0x8f330139a313def3b14a4191,\n                    limb1: 0xbbc6ef1fb35d0f418f9f78b5,\n                    limb2: 0xbb0532bb79ba32741aed8541,\n                    limb3: 0xece0fdc026b4f6a1a0e84ea,\n                },\n                w10: u384 {\n                    limb0: 0xcd423bcb1fbc2198f7bfc5bc,\n                    limb1: 0xb2829a2104116480290ac2de,\n                    limb2: 0xbab0876e094583ff5a08ffe5,\n                    limb3: 0x9566104e8e04e6378963df0,\n                },\n                w11: u384 {\n                    limb0: 0xcbcb4e81ebceca9d4be2280f,\n                    limb1: 0x46236f243dc5d2907d7cb0e6,\n                    limb2: 0x886438c7d5394b0df090d49c,\n                    limb3: 0x1736df2c975b470c28a0dfb8,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x41aaffbd4ffbc921fa99dafc,\n                    limb1: 0xe10f7c7325899560c7dc1a15,\n                    limb2: 0xc24436ca6dd16b7441353e1a,\n                    limb3: 0x768fbbaedb7eb6fa18ee62a,\n                },\n                w1: u384 {\n                    limb0: 0xa237ae4d25932d4ea5316730,\n                    limb1: 0x2d696a5048a33ad2fe17b0fd,\n                    limb2: 0x2748a8d213d462a9afaf75d1,\n                    limb3: 0x1537e87dbfb1af57898e5a44,\n                },\n                w2: u384 {\n                    limb0: 0x77e95072df611554c6efed5a,\n                    limb1: 0xb1a40cdb1e3fd9dc0c2f0268,\n                    limb2: 0xafa4361c57a92f48e272fd3c,\n                    limb3: 0x19670062e69cf3c129c6037b,\n                },\n                w3: u384 {\n                    limb0: 0x35569a07f433ce179f869383,\n                    limb1: 0x2da70c3d64dc95f2a35dc5da,\n                    limb2: 0x5b6e4b1ebc196d9275e65fcd,\n                    limb3: 0xf527e45157446612739f8ea,\n                },\n                w4: u384 {\n                    limb0: 0x52794dcb5d3a71e191ca9117,\n                    limb1: 0x1081a05756e17821c1a6b318,\n                    limb2: 0x7806bbf278080f55a756ac75,\n                    limb3: 0xa02c71394733385a722a842,\n                },\n                w5: u384 {\n                    limb0: 0x488205f5f0ed76726dc2e4a8,\n                    limb1: 0x2156776174a8c26fcb09988,\n                    limb2: 0x48ed81cc7d76f82b1770c797,\n                    limb3: 0x581d27120bc189525f2a93d,\n                },\n                w6: u384 {\n                    limb0: 0x5bd47af3f999778815753987,\n                    limb1: 0xb6749ec4bc2deb56879c4187,\n                    limb2: 0x12f25e541c1a97a1a04db98a,\n                    limb3: 0x29634e7d8dbbf051cac5686,\n                },\n                w7: u384 {\n                    limb0: 0xb63879d6fdc4ddd1f14e0d7e,\n                    limb1: 0x5502d042b5ca2ca1fd1c87d,\n                    limb2: 0xde0a342fb21dec963cb42765,\n                    limb3: 0x9e6bd948d174830a6c0bdb5,\n                },\n                w8: u384 {\n                    limb0: 0xbab8115cffcdaa9e9ffdd880,\n                    limb1: 0x507a287e0529113ee7c9872a,\n                    limb2: 0x8c9a7d3cd5caf1cbf71ea4f,\n                    limb3: 0x171c19b44ea2abed89e0eee7,\n                },\n                w9: u384 {\n                    limb0: 0x3bdbf8f85ceba757f787a73f,\n                    limb1: 0x55e0e28688c74db104715a2d,\n                    limb2: 0x1d8c0545ec4eb386da5973c,\n                    limb3: 0xc12462e516c1d11b83d70c0,\n                },\n                w10: u384 {\n                    limb0: 0x589e9e0e262699811b884e88,\n                    limb1: 0x849f9b1f3bfbecd0815d022,\n                    limb2: 0x72e87be328e66292abc0bfa0,\n                    limb3: 0xc20248f3856e6b79db43f4f,\n                },\n                w11: u384 {\n                    limb0: 0xa0d3c01dc5b590235ed2b4a8,\n                    limb1: 0x36a65d97aa5e2789abe72557,\n                    limb2: 0x4dc3c2f633d2e2bf574872ac,\n                    limb3: 0x9b01ee1082798777c0ba5ce,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x3f8f38e60deac05c2621e24f,\n                    limb1: 0xd09553fa481657f8340e5069,\n                    limb2: 0xc4822e62b67cb0f3512ed972,\n                    limb3: 0x8fdd89171a3d99d824644e3,\n                },\n                w1: u384 {\n                    limb0: 0x9f974bcce04ca7c552cefc61,\n                    limb1: 0x7d1e97af057c4e8bd1237e3a,\n                    limb2: 0xf6c412a8f240fdb471a4e6e8,\n                    limb3: 0x12798c3ef22db33c453af285,\n                },\n                w2: u384 {\n                    limb0: 0x351067948f68705deef729f0,\n                    limb1: 0xdac1ded2ce3421f0f1c2a824,\n                    limb2: 0x8d9e3cebc0f199ce2dba4472,\n                    limb3: 0x37aca41f4d506c7b78e5a97,\n                },\n                w3: u384 {\n                    limb0: 0xb7ff11075c5dfb0889eb8cf9,\n                    limb1: 0xdd6620d6caebf6d2c4bc9fe4,\n                    limb2: 0x78ebf44c90eb026aef8a4723,\n                    limb3: 0x11df205507286f5912bb28f9,\n                },\n                w4: u384 {\n                    limb0: 0x2184c9e357e8fc5938e9f91e,\n                    limb1: 0xf6b93e6931861792051e41e8,\n                    limb2: 0xfa6774f07bec91d5b9056ac0,\n                    limb3: 0x5fd1e8fcb66b2024f4770cb,\n                },\n                w5: u384 {\n                    limb0: 0xd34e1ed35b4acef37cdfcfcf,\n                    limb1: 0x3a3af4aade2ca0b690f8b745,\n                    limb2: 0xf18dd5095a8e61ebe9ec15c0,\n                    limb3: 0x14ac25a5dd1932d42434e64f,\n                },\n                w6: u384 {\n                    limb0: 0x8deb2453cc29535af302a32a,\n                    limb1: 0x47377a569ca788bd447d51a,\n                    limb2: 0x7473f95b420a7a96033055b2,\n                    limb3: 0x1368da24ff42c9dbaddd1fd9,\n                },\n                w7: u384 {\n                    limb0: 0x8a006d92f0f659b5879128c,\n                    limb1: 0x91a706c5249b0611411ef8,\n                    limb2: 0x476806b8ff9f387448c2283f,\n                    limb3: 0x86486211f2b7a69d85e6cc,\n                },\n                w8: u384 {\n                    limb0: 0x359fb6053a482fd881477b73,\n                    limb1: 0x2e56ddae282b251bd26dc277,\n                    limb2: 0x9cc9414eb0de5930e18c2aef,\n                    limb3: 0xba5c3dae029b3461c4d83e3,\n                },\n                w9: u384 {\n                    limb0: 0xd0329a1bee072189c5ee820d,\n                    limb1: 0x606c86092ed3d4c42466d4ed,\n                    limb2: 0xf05b66e3549519f50780d211,\n                    limb3: 0x9a4267bb540004634129449,\n                },\n                w10: u384 {\n                    limb0: 0x7aac5888cca570c157bf526f,\n                    limb1: 0x37f49ebc8a648980697e0e77,\n                    limb2: 0xf97e721d54c47e0de9076619,\n                    limb3: 0x142cb1de4579b0555e3da41c,\n                },\n                w11: u384 {\n                    limb0: 0x1ed3e34a9c2bf2a76e006e02,\n                    limb1: 0x295f1656ab393d271edff1c6,\n                    limb2: 0x5420889deecb1a07595e00d9,\n                    limb3: 0x4283e729218065b6577b5e2,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x5075209593337486e18df46d,\n                    limb1: 0xf0356df4c7181711fc91a827,\n                    limb2: 0xd97a31f91df154f5bb5851cc,\n                    limb3: 0x171ad2856e94d72ca9a24f15,\n                },\n                w1: u384 {\n                    limb0: 0xff1d933543c728b07bca89f9,\n                    limb1: 0xccef75c4f943b25f9239cb2d,\n                    limb2: 0x5c4ebc877307706d280a3dbb,\n                    limb3: 0x1eb968438d74e489e2b3144,\n                },\n                w2: u384 {\n                    limb0: 0x8cc0fc5028083749c6f1aba5,\n                    limb1: 0xf1a9d3c2e0265d84355ba0f4,\n                    limb2: 0x335a9d47fd282d5dce169790,\n                    limb3: 0x10f93b957c6f10e331c414bc,\n                },\n                w3: u384 {\n                    limb0: 0x46ec651152db5023c9f201ed,\n                    limb1: 0xfb6d11467392f49bb22c65c9,\n                    limb2: 0xa591f73affc1eab979a3e88b,\n                    limb3: 0x826052b7ce51942a2ef191e,\n                },\n                w4: u384 {\n                    limb0: 0x33ba6d3afeb674e23e5875d0,\n                    limb1: 0x59f23b1c3550f6e384c0f685,\n                    limb2: 0xda5c8ec47b003492848f9ced,\n                    limb3: 0x1693006cebfdda8888546ed4,\n                },\n                w5: u384 {\n                    limb0: 0xd6d0c83bf1cad49129736afe,\n                    limb1: 0x9649be7e294be8399af5d37f,\n                    limb2: 0x4aa71b90ad07b5b8a36e6c12,\n                    limb3: 0x35aec40aaf79e7d69ccbee7,\n                },\n                w6: u384 {\n                    limb0: 0xdb5a92f23380dee1624ece55,\n                    limb1: 0x5134a328c29fbe8f507b8e9,\n                    limb2: 0xc945ce072ddf331a76668f54,\n                    limb3: 0x16394a30abe069b9227e1c33,\n                },\n                w7: u384 {\n                    limb0: 0xa23da0b9f52799a68dc93f24,\n                    limb1: 0x87cdda8d4a6217959ec51377,\n                    limb2: 0x57249de4c45419d6599ad204,\n                    limb3: 0x42312785159ea4b25189b90,\n                },\n                w8: u384 {\n                    limb0: 0xbf4121cb4d006fe76a80ea73,\n                    limb1: 0x7572811c50bd43f4651663cc,\n                    limb2: 0xe1efd672ed967d2245b943d8,\n                    limb3: 0x1787f0a67f549962e9c14900,\n                },\n                w9: u384 {\n                    limb0: 0x46eeec468b79d350dd499738,\n                    limb1: 0x2ea49c3b0d31b16e48774d10,\n                    limb2: 0x310dc8b2a2ce05fee1740e93,\n                    limb3: 0xc87d0f3e5646d57ba0f3aa3,\n                },\n                w10: u384 {\n                    limb0: 0x342ee816cba104cc57c6c72f,\n                    limb1: 0x786438adbb7043c5ca348854,\n                    limb2: 0x493f49c69d99c3d0ab1ba333,\n                    limb3: 0x14f90bf3e332bc9472da656d,\n                },\n                w11: u384 {\n                    limb0: 0xc34c780a191b063eee244f53,\n                    limb1: 0x4e65b486457bf36ded6b97be,\n                    limb2: 0xbfc811de2f4a72e871385095,\n                    limb3: 0x8e6f83135818adcffa10fb9,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xb672236717111ed916845c5d,\n                    limb1: 0xe05ed5f5b63130ce5ed7ce8d,\n                    limb2: 0xeb31d1721af0fc01c6a57a35,\n                    limb3: 0x39032c279eab78dcba6e6ed,\n                },\n                w1: u384 {\n                    limb0: 0xb5fd928b359354dc3322587b,\n                    limb1: 0xe23b26cd9dcb026a63d7bd14,\n                    limb2: 0xe0c70e5315487d5185137fc0,\n                    limb3: 0x350b47980276bd086fb0081,\n                },\n                w2: u384 {\n                    limb0: 0x35f10b2645a702ea20eb8a58,\n                    limb1: 0x8daf440feacc4167bd29f29f,\n                    limb2: 0x8aa066da8142908fd9dd00b9,\n                    limb3: 0xd808b595dfc641171a4589a,\n                },\n                w3: u384 {\n                    limb0: 0x1a92f884e524af5ef9c51b4f,\n                    limb1: 0xa420b70bacb14c6241ffde9b,\n                    limb2: 0x5f3bbe9b0ed979e4a113a09f,\n                    limb3: 0x9362ed73e972e33f186b81e,\n                },\n                w4: u384 {\n                    limb0: 0xc38fa3335d37ad7b433afc9a,\n                    limb1: 0x233c0caa5edcf5a96d0e9df4,\n                    limb2: 0x1bd45454abb2f3b001e563ff,\n                    limb3: 0x12ccd66a1baf7b9f617dc713,\n                },\n                w5: u384 {\n                    limb0: 0x113ef84207dd50c3add3fb08,\n                    limb1: 0x803162a58c79355e6436964e,\n                    limb2: 0x27dbde708a2b5bcd71d8a803,\n                    limb3: 0x111e309aec4985bdbc80882c,\n                },\n                w6: u384 {\n                    limb0: 0xbd293026b3eb9df6867cb268,\n                    limb1: 0xe20ee1bf24af986d5cd083f7,\n                    limb2: 0x5ef64ec24565ce144c3829bf,\n                    limb3: 0x11dd5ad08abb5b561a3f55a9,\n                },\n                w7: u384 {\n                    limb0: 0xfbabf0ed3f8a0d795e246760,\n                    limb1: 0xe9f3f24bc74110c7a273f445,\n                    limb2: 0x55201b84cd4c2ed4db4b827c,\n                    limb3: 0x7581bdc02eb21512e4e5199,\n                },\n                w8: u384 {\n                    limb0: 0x50990b07d3ad07f5cda1df83,\n                    limb1: 0x632286f3bbfcad27346d18bc,\n                    limb2: 0x57ddc3d0b6196616acbbf690,\n                    limb3: 0x12cb2e180657e981fd9f6793,\n                },\n                w9: u384 {\n                    limb0: 0xb4a25977ccb83376385bcc3f,\n                    limb1: 0x409e0fc5843535e7b6ed163e,\n                    limb2: 0x7ee8e7148fce7871fc278d1e,\n                    limb3: 0x10956002d20d7414b33e971d,\n                },\n                w10: u384 {\n                    limb0: 0xd2cad3667d7c91db4583301f,\n                    limb1: 0xce857381a82611c73427cf30,\n                    limb2: 0xd7519dec35afa6c62fdf1a93,\n                    limb3: 0x457e7d9af1ed868a22feb53,\n                },\n                w11: u384 {\n                    limb0: 0xc5f0ce046d88cc73490b1ba2,\n                    limb1: 0xfa220bea70edb53dc7864606,\n                    limb2: 0x2918cf7c1e8cc362d0e91f41,\n                    limb3: 0x12c017f62533b0ecd49a3ec7,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x4518aac78144e2db1d690fe4,\n                    limb1: 0x8ee22fb09c4090a1c02db65,\n                    limb2: 0x8a5c9ae4cbcaac8abb408bf2,\n                    limb3: 0x9651c5934720322443f5a11,\n                },\n                w1: u384 {\n                    limb0: 0x6494b375c23dfcce21c4995e,\n                    limb1: 0x41ecb011428f2cb8862ef588,\n                    limb2: 0xf99f42bcd9191bca26998f29,\n                    limb3: 0xaa56757b8a17fc161800337,\n                },\n                w2: u384 {\n                    limb0: 0x49ed4b52c0e1957338585f16,\n                    limb1: 0xec9df95dec8748f334e0f2e1,\n                    limb2: 0x7de0ae19ffdac0ccb39246a2,\n                    limb3: 0xfb3acdb8486b68439e30548,\n                },\n                w3: u384 {\n                    limb0: 0xfef29938a4d46b29fc1ab8ec,\n                    limb1: 0xb4893ab6f86df3d65f57ba5c,\n                    limb2: 0xd0404e3bd8ec3026aa989c65,\n                    limb3: 0x271d6ebc660acd8d80a0656,\n                },\n                w4: u384 {\n                    limb0: 0x61ae001710978b805f2424d7,\n                    limb1: 0x641045bf7c449640c468a29e,\n                    limb2: 0x36471cc643cd1ac29df0fecb,\n                    limb3: 0x133f2d50d17aae7195255662,\n                },\n                w5: u384 {\n                    limb0: 0x9ce3fa0f813dfdc1e58f1ba3,\n                    limb1: 0xda6067cb476596387621fd0c,\n                    limb2: 0xc4e9614cae2d4dbdedf3b5c9,\n                    limb3: 0x85036d8b38d3ec0fcf70a7c,\n                },\n                w6: u384 {\n                    limb0: 0xfd1f35878f06df50b774ff5c,\n                    limb1: 0x50feeff3c2321474b6452db4,\n                    limb2: 0x9f7493a63e0d85a47fd3e297,\n                    limb3: 0x62dc9eb788448f8540cd8dc,\n                },\n                w7: u384 {\n                    limb0: 0xc4a0867d87c7ad51322cb810,\n                    limb1: 0xd8ef0e23b67744060ef9dfb7,\n                    limb2: 0x40fd187e3a88eb2b97cfbeb2,\n                    limb3: 0xaa2506dbbb4b40e1160280f,\n                },\n                w8: u384 {\n                    limb0: 0xc1dcb7d5d062a5a166387c7c,\n                    limb1: 0x6562c45c946f18353a39c690,\n                    limb2: 0xf6e93d09b449f23d816feb2c,\n                    limb3: 0x11fcfa1ad45d21f75f769cea,\n                },\n                w9: u384 {\n                    limb0: 0xc01a508042b05e97a5f4713b,\n                    limb1: 0x34d0b623b7a887b7b8cd2b48,\n                    limb2: 0x3bdf0590b650cf2abd0cb69e,\n                    limb3: 0xd40ad6f197e440c5d882cfb,\n                },\n                w10: u384 {\n                    limb0: 0xda450f4ec50e45a1aa05c7df,\n                    limb1: 0x8ed297199f1e04707e165a6f,\n                    limb2: 0x9953fd6d893f944489b6f265,\n                    limb3: 0x151f722a9d71cdbbc3f64572,\n                },\n                w11: u384 {\n                    limb0: 0xab94a633f81012d0aa0a1123,\n                    limb1: 0x1fee996f53b99d7f880cd81f,\n                    limb2: 0x2eba0e596f0cb217540a9f6f,\n                    limb3: 0x6a3beb6e5c4d83dac52cd9c,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xe0bce0d55a595944dab6dbfa,\n                    limb1: 0x6a8646a7ccf054a613ef1054,\n                    limb2: 0xba8e1f16cf4e8c395896994c,\n                    limb3: 0x162d381237a930f8b29e736a,\n                },\n                w1: u384 {\n                    limb0: 0xf1f266735451b2d2d7f1d30a,\n                    limb1: 0xa7218efef53e9dffab65229c,\n                    limb2: 0xb7c5e4dc5293bd7f9783effc,\n                    limb3: 0x11b0811580e449f355565e71,\n                },\n                w2: u384 {\n                    limb0: 0x80d5d222072028933b28d7b2,\n                    limb1: 0xee7584721937fe2ab48078cb,\n                    limb2: 0x4df768bf695ffd52b0fd1c32,\n                    limb3: 0x1855a6b25e83bf66d4356b58,\n                },\n                w3: u384 {\n                    limb0: 0x3a3df0e6083bf4bbe71e8c4f,\n                    limb1: 0x4fb213df213dbee762ab39c7,\n                    limb2: 0xca84e456f84ba4f61d280ed2,\n                    limb3: 0xcfc546b353f4c6f5d27dbe7,\n                },\n                w4: u384 {\n                    limb0: 0x9cfab6d9fafadbd0e1c42893,\n                    limb1: 0xb5fb4e768002cba4b920caed,\n                    limb2: 0x506afea26fc4c7c654f4e050,\n                    limb3: 0x1583e33fd9048512c2a5c9fe,\n                },\n                w5: u384 {\n                    limb0: 0xb3811bd3567d02c9c8ffb739,\n                    limb1: 0xcd49c3a01653b401503ab6c0,\n                    limb2: 0x56c65a37847a8f7251aa3148,\n                    limb3: 0x900ced571b08ea59f466697,\n                },\n                w6: u384 {\n                    limb0: 0x3db7e62a39526ebeabbc5d95,\n                    limb1: 0x2a409338985dd19e8c1439bf,\n                    limb2: 0xce7718a40c9c26112265bf75,\n                    limb3: 0x105d6bb94f794d207e8dccf2,\n                },\n                w7: u384 {\n                    limb0: 0x4a9921138c1b9724c664dad0,\n                    limb1: 0xe16e3e800231777a1b18f5e0,\n                    limb2: 0x406d5a7ed31a84b8c7e805b,\n                    limb3: 0x119e145f07bc6e23006475a8,\n                },\n                w8: u384 {\n                    limb0: 0x91390ea551d00747d4835f37,\n                    limb1: 0xe8dded89909fe1429974f19,\n                    limb2: 0x36fc694a2d1a3d77ceb70cfa,\n                    limb3: 0x19f915fd54dfc09d92f03acf,\n                },\n                w9: u384 {\n                    limb0: 0xb10a5bb15622ec5835700d8,\n                    limb1: 0x989765daca6c7f7b3a9cee46,\n                    limb2: 0xeb8d07dda116e084c5d9987f,\n                    limb3: 0x4b16db66ec480015be50763,\n                },\n                w10: u384 {\n                    limb0: 0x1a0cb2b253062c1b6714614c,\n                    limb1: 0x1346a04f437bbb3430c7afbc,\n                    limb2: 0x9ee70f56486f1312034e6782,\n                    limb3: 0x8c8bfb66fadd2f5708f4ac0,\n                },\n                w11: u384 {\n                    limb0: 0x8e4fa36170fcf1446bb898c0,\n                    limb1: 0x4b7035e4e8270f856e5671ed,\n                    limb2: 0x8cacdde4a419ed5e07bccd6f,\n                    limb3: 0xe892aa8d03b1e9dec74558a,\n                },\n            },\n        ]\n            .span(),\n        big_Q: array![\n            u384 {\n                limb0: 0x445d6baafba8450dd13ed7b1,\n                limb1: 0x290c9657f4f55cea043fdd38,\n                limb2: 0x9325259addf718d6d8287cff,\n                limb3: 0x1d9331cfa3c9e50315038fa,\n            },\n            u384 {\n                limb0: 0x4b3082298a1e64aeadf6bf90,\n                limb1: 0x4073d7bf69cf718d0056a5c6,\n                limb2: 0xe00ddf4c12751e4cfccfd895,\n                limb3: 0x259e13c714da7cdadc58791,\n            },\n            u384 {\n                limb0: 0x3a1c999d4db095eb59dcab4,\n                limb1: 0x2d7de69e089b90aaa2d37e93,\n                limb2: 0xf1be9d13ca73d61ed6817074,\n                limb3: 0x97c9b09076cb34cee98515a,\n            },\n            u384 {\n                limb0: 0xa2c1efb24769a664c8b5fd35,\n                limb1: 0x83a2af13670211bb0d69e600,\n                limb2: 0xb1257a3a2c065750ddb409ba,\n                limb3: 0x8c516dd5cc0af28b42feb7a,\n            },\n            u384 {\n                limb0: 0xb842c53b0590a848831e42f9,\n                limb1: 0xb19e34913aff2326ef7a4358,\n                limb2: 0x326f8de9bd1da5637f27ecc9,\n                limb3: 0xdd6b998d03b616754dd2745,\n            },\n            u384 {\n                limb0: 0x6b61729e36ac7dc6f5114f96,\n                limb1: 0xd67d641943aaa49b670230b0,\n                limb2: 0xa2742c61b2099b163d2f67a2,\n                limb3: 0xaff98133b5513c388c77286,\n            },\n            u384 {\n                limb0: 0x6c662edd7ccaf9aff500ed55,\n                limb1: 0xd9aff80b364e3e5ab855a905,\n                limb2: 0x286b7ac3c97fda4c95bd5fc0,\n                limb3: 0xa2a508ed4fbf2d5ed430d8a,\n            },\n            u384 {\n                limb0: 0x7d3c3e63daa6a1ba97034b14,\n                limb1: 0xa274ec2fe88d6f6509fed56d,\n                limb2: 0xd2e7878eda9439d8d344d66a,\n                limb3: 0xce409e0c30a390acd5cb44c,\n            },\n            u384 {\n                limb0: 0x217d423b495dc5ae1a3ebb46,\n                limb1: 0xbad9b357090039ce2657b4ac,\n                limb2: 0x4b7d3dbf36446dbb89dc0a97,\n                limb3: 0x14dbe2f3ac60d09cf4d130b8,\n            },\n            u384 {\n                limb0: 0xcb0e3cb62edd80a81422c3f,\n                limb1: 0x284dd7b6213f74f850e5a00,\n                limb2: 0xee16b1f7b204b3379109d597,\n                limb3: 0x159214b5b6cdbe70787026a1,\n            },\n            u384 {\n                limb0: 0x890f89db0a2e6271f1c5b430,\n                limb1: 0x28bec49f958bb579f22ab228,\n                limb2: 0x4ae230efdbd46047ad515117,\n                limb3: 0x19a91b845ba6892ce3bef339,\n            },\n            u384 {\n                limb0: 0x738e91e3ecfbd258f8fe8a6e,\n                limb1: 0xf796d5a8506ed71d63fec016,\n                limb2: 0x4c4e70198951e55aa23495c,\n                limb3: 0x14cca87e427a70b85b070c0f,\n            },\n            u384 {\n                limb0: 0x1573dafb3e3cc8f7087e2baa,\n                limb1: 0xc24144c0ef7d7c40d7cc7a28,\n                limb2: 0xe7ec035065fef9dfdf8f89a3,\n                limb3: 0x106c1926f28babab7d8c16cb,\n            },\n            u384 {\n                limb0: 0x22081492011aae7272771a1b,\n                limb1: 0x5c9f5077ca48e0ee885c6ffe,\n                limb2: 0x529b91af0e34992c4e6bcc84,\n                limb3: 0xcc8121d3536a7a113bca097,\n            },\n            u384 {\n                limb0: 0xaf6cc43bbd7f160a7e936e79,\n                limb1: 0x2492c5c3c94b513a864cf1e1,\n                limb2: 0x413026ea3fcfee76f31caa1d,\n                limb3: 0x9f639d622d22ffab05ccfb4,\n            },\n            u384 {\n                limb0: 0xa877cd8f36cb3fad2288d537,\n                limb1: 0x6d098c614d17493d58c3c12a,\n                limb2: 0xd3a0579b4b38d611668682d5,\n                limb3: 0xe77527e6087815c6f095c7a,\n            },\n            u384 {\n                limb0: 0xfa0ce8e766acf11630ac4ed1,\n                limb1: 0x12148dd86cbeb22d385c029b,\n                limb2: 0xcc1cb77fabb58425e96a9996,\n                limb3: 0x10239f2110b3cbb1f9fa2ec9,\n            },\n            u384 {\n                limb0: 0x750d10e2bd02a6c51086cab4,\n                limb1: 0x9d29bb0591e7f1a185d6a776,\n                limb2: 0x6f9be5ccb0ab1c3fe3d823d6,\n                limb3: 0x18a3598c016c5e90fc1c8f93,\n            },\n            u384 {\n                limb0: 0x9283ce36ff033ab356f55ba,\n                limb1: 0xf6fccbb17c45b9432dd6ca1f,\n                limb2: 0xfa06112ff2521c21241b2f4c,\n                limb3: 0x1778d3acef5459b9a2e97de3,\n            },\n            u384 {\n                limb0: 0x67ebade07e5471b202335db2,\n                limb1: 0xfc73e15d09d8a445fc192c6a,\n                limb2: 0x496a96cc7341206bc41eb57c,\n                limb3: 0x11c3434c4f2c87f3e8015fa1,\n            },\n            u384 {\n                limb0: 0xc68e6c66eeb7b465b7a91053,\n                limb1: 0x8d32cd1f66e178c5551f52ab,\n                limb2: 0x6607f3d6497797b353046088,\n                limb3: 0x14c3d0025036e6b347df5690,\n            },\n            u384 {\n                limb0: 0x70b5f2016163fb80daf98105,\n                limb1: 0x53531c225664a31d885c9f09,\n                limb2: 0x972f54744c8910194d46b123,\n                limb3: 0x2dff63e76a655c07087f97c,\n            },\n            u384 {\n                limb0: 0xe6301609c8d5798ee22c1634,\n                limb1: 0xab940f7cc6a16e27f73d7bf1,\n                limb2: 0xd83458215932fa14abc055f3,\n                limb3: 0xb092a78ebfefa3b0e719d2a,\n            },\n            u384 {\n                limb0: 0xa9f81870938647e39e5a22e3,\n                limb1: 0x6c8ece4ae0c4af6863738aa4,\n                limb2: 0xccf0c9038baa5c9ea8f6a27c,\n                limb3: 0x3d1f8e8e7891e4c79a2b0a1,\n            },\n            u384 {\n                limb0: 0x3971f6e183c521ccc4c00f1b,\n                limb1: 0x1c4c8c97c639b207b8334f11,\n                limb2: 0xe680de4e5fb8abf302d2f58b,\n                limb3: 0x17be4592af7a922cca9c9fc3,\n            },\n            u384 {\n                limb0: 0x87c35e39141341ca2e0d8508,\n                limb1: 0x3e32e84fe81062ada2274c5e,\n                limb2: 0x7f158c23738383ccea5ed387,\n                limb3: 0x2acdbe9122d2488cffaad06,\n            },\n            u384 {\n                limb0: 0x53e7b760e7074537bf97d1b1,\n                limb1: 0xbddef09a5d237ab04bc1758a,\n                limb2: 0x796e09ce6356693c2c754faf,\n                limb3: 0x190c405bbe626263a60ac287,\n            },\n            u384 {\n                limb0: 0x259984eb9d3cbf91b1e9a850,\n                limb1: 0x86793adaf8b0d344f2beaabb,\n                limb2: 0x7756383d853d7f737c71c33a,\n                limb3: 0x19714a1835930d5c7f5cd913,\n            },\n            u384 {\n                limb0: 0xc5ae3086a997b7d18c2d4b28,\n                limb1: 0x13ad293d82c1ac29f38ffe23,\n                limb2: 0x31b2e0aa3407a25ed34c91f8,\n                limb3: 0xa8f492b622aaefbdc4da524,\n            },\n            u384 {\n                limb0: 0x557ec346c69c378c38506f20,\n                limb1: 0x29c46724103db6643eccd29c,\n                limb2: 0xc5397b60e6ac233c35673a04,\n                limb3: 0x19b827ff25ac18face681427,\n            },\n            u384 {\n                limb0: 0x140a82fed9826ee3a61c5da9,\n                limb1: 0x1b69c21c770397907d5a8576,\n                limb2: 0xb189950ab3596e8822c02df1,\n                limb3: 0xb3fd0ef8640d326a5093267,\n            },\n            u384 {\n                limb0: 0xf584f2222babbd504f512a06,\n                limb1: 0xb5c7167d437b911cdb124a20,\n                limb2: 0x9d31759b776236e702a59c4,\n                limb3: 0x5620a9e0b882123b8c43352,\n            },\n            u384 {\n                limb0: 0xb47cc9d50f5c044ef3fc54ff,\n                limb1: 0xce9e44ddec479c872583193b,\n                limb2: 0x1278be54a9143510810a44e2,\n                limb3: 0x14c158919eb2b2b17ae59dcb,\n            },\n            u384 {\n                limb0: 0x6510443a881532d33252a377,\n                limb1: 0xab07a032dad31a1fd281ece1,\n                limb2: 0x8268c9bec54ed78904bd2ec3,\n                limb3: 0x19b2d416d9612fc5f1270b6,\n            },\n            u384 {\n                limb0: 0xb09728c1e17000e2a3adca0f,\n                limb1: 0x7484c18a5ae8b6cb9e65a9ca,\n                limb2: 0x9eb0da27d0ddd54d0bff2cdd,\n                limb3: 0x59e4c1fc0b81222a58f48af,\n            },\n            u384 {\n                limb0: 0xb3d5cfcc42af3d890070a1f6,\n                limb1: 0x633a89c63d397a8dbd0dc25,\n                limb2: 0xad82bbba57b2be1082e3235f,\n                limb3: 0x12d31cdd24655dd244b0404f,\n            },\n            u384 {\n                limb0: 0x122ff70798de075749ce2d26,\n                limb1: 0xd5b4963a1b98a82c73786fbf,\n                limb2: 0x372484de20675fa54dc2cf9f,\n                limb3: 0x2a445bfa7323e30a092f5b,\n            },\n            u384 {\n                limb0: 0x77f0cb8771beabc8ea2c4272,\n                limb1: 0xe0b49b26fb8aeb933a750769,\n                limb2: 0x84abeca7fef536bdd473ab51,\n                limb3: 0x14851f0a498cd44b8afb6001,\n            },\n            u384 {\n                limb0: 0x6a468d6d89d57fe33804ff0,\n                limb1: 0xc4e66bc6e60b089dae3d5ad7,\n                limb2: 0xd3ab3db43c216558e8c77290,\n                limb3: 0x40f13e37975ec01631d71f3,\n            },\n            u384 {\n                limb0: 0x85425db02fcadd803a092e2e,\n                limb1: 0x28638cae2487483c84297b8f,\n                limb2: 0x945bfcd8bee8582abc15e530,\n                limb3: 0x13c56cdb8fcf524429af5173,\n            },\n            u384 {\n                limb0: 0xc6d332dc2c22eff4ac31e3f7,\n                limb1: 0xab10f60e98c90fa3ec89aef0,\n                limb2: 0xde024ec2857f5a84fc6db8c4,\n                limb3: 0x2964e03f7fc83afe59cde96,\n            },\n            u384 {\n                limb0: 0xd4925da47f5e2e95b67a3ced,\n                limb1: 0x6e6d8b1e0d6a29fe41045062,\n                limb2: 0xd27a4e1e277668d8bda45b13,\n                limb3: 0xbdf5a29b9faecbc2d3177d6,\n            },\n            u384 {\n                limb0: 0x434c8372e10401e48ec2429f,\n                limb1: 0x69d82c824fdc0d3805790867,\n                limb2: 0xe7ed7a57583b5216053c9db9,\n                limb3: 0x17f4f9de7e48979601c1c2a2,\n            },\n            u384 {\n                limb0: 0xa0d11eb6a504d256679608e5,\n                limb1: 0x29c90c255da6fbb5cfc4495f,\n                limb2: 0xca47b1abd20a31804f8930db,\n                limb3: 0xbbd83ec78a6166ef36aa1fb,\n            },\n            u384 {\n                limb0: 0x7289808af814df23d6c89d00,\n                limb1: 0x43453d1ce5e8e05dbb839b05,\n                limb2: 0xa97d31b161062d0943e6f9a6,\n                limb3: 0x9c04f649cb1a2e07c8773e8,\n            },\n            u384 {\n                limb0: 0x20586d603e1ddff39a084aed,\n                limb1: 0xf31785a3ac061168a03aa547,\n                limb2: 0xf814cb5325da93c4f837d4b2,\n                limb3: 0x81783db43513c9c522bbc62,\n            },\n            u384 {\n                limb0: 0x6fbdc21a5be36a2e3010fbfa,\n                limb1: 0x6bc5468e17f4418d53ebd302,\n                limb2: 0x601c35ccaad0d6f3e1b3a8ac,\n                limb3: 0x1973786c55c0ba2f6b87f117,\n            },\n            u384 {\n                limb0: 0x78aebf2ddcc087a32daa8eca,\n                limb1: 0xb61ae20d301ccd65afcbde1b,\n                limb2: 0xa3a00d31127efee85171b8a8,\n                limb3: 0x37fe11b1a206af95bb12277,\n            },\n            u384 {\n                limb0: 0x812d7f20aca719c4e96ef68c,\n                limb1: 0xb793866373bb9784eca7769f,\n                limb2: 0x77d685e75d4c729ee2f5aa1e,\n                limb3: 0x96bae5729b3ff540ca2e986,\n            },\n            u384 {\n                limb0: 0xb68666a1db42879ded98f557,\n                limb1: 0x9dd8d5a6b735fd37f11c7d0a,\n                limb2: 0xdccd06cb933682744b6edec1,\n                limb3: 0x13f9cffbe7dfca805ca43c1c,\n            },\n            u384 {\n                limb0: 0x3b0007fe2df3aa78e4d00825,\n                limb1: 0x87f41fa9a1e246c025a48aae,\n                limb2: 0x13bd23d6f9969a42cbf12ad5,\n                limb3: 0x329bcac3396e175891f5e45,\n            },\n            u384 {\n                limb0: 0x2fd7716c4a48ac8b434706b3,\n                limb1: 0xd21d16d7856b1674f1dc39ae,\n                limb2: 0xb43394cda9fe62e8d377d54,\n                limb3: 0x8ad7cfe0094ae811e0a3063,\n            },\n            u384 {\n                limb0: 0x58cf88bebce17edd906ae443,\n                limb1: 0x94a46cad8c18eade64faded7,\n                limb2: 0xae14dd193ff4541d23d85e17,\n                limb3: 0x13360e00eb699cc99be490e9,\n            },\n            u384 {\n                limb0: 0x1a7e23cb5791836fe922268d,\n                limb1: 0xde8655a6b4507b002bd271b7,\n                limb2: 0x4710dbc3fdb420049b6c64fa,\n                limb3: 0x2db26a62c747dc5bdd7b775,\n            },\n            u384 {\n                limb0: 0xebeafa29827e65bb15878c9d,\n                limb1: 0x14681e2120d0cd6e6336c9e3,\n                limb2: 0x5485292282ed8e1294af5d54,\n                limb3: 0xa26f69d8c76f9c959e41210,\n            },\n            u384 {\n                limb0: 0xcc466e1b38a8dff604c867f8,\n                limb1: 0x16c8fe03017f1c81ae02d22,\n                limb2: 0xa179039f6497c0a5fc60b563,\n                limb3: 0x19066a33a7e3ed1118e61830,\n            },\n            u384 {\n                limb0: 0xc346d0995967c29aa92807b9,\n                limb1: 0x85f1f66d99d64af8bf82b8b0,\n                limb2: 0x8187274b1c52c1da8f724a15,\n                limb3: 0x18ba38267c30aba28957f941,\n            },\n            u384 {\n                limb0: 0x646086cb2ac155e1ec929d86,\n                limb1: 0x531e5f581431c7586f5e2110,\n                limb2: 0x93f08aaaa048fa9e4bfcad79,\n                limb3: 0x19451eb73b51d2550bf756d1,\n            },\n            u384 {\n                limb0: 0xe873237c87e085a9d92c285c,\n                limb1: 0xc005d71145372f35f6e41051,\n                limb2: 0x53d935a5d3983508180a8b39,\n                limb3: 0x29b1bb36952f26c9ab9cb09,\n            },\n            u384 {\n                limb0: 0x801be88517a11ef1b6fd18a3,\n                limb1: 0x9e2732f2abe69238df87e036,\n                limb2: 0xcd6b60dca61b24f8bd2a8142,\n                limb3: 0x28b7a065b5815f550404fd3,\n            },\n            u384 {\n                limb0: 0x917514fee5ea2267d6e33cd5,\n                limb1: 0xcc67cdf72598354987d6755f,\n                limb2: 0x25a5303b6c2af70c314ce7a5,\n                limb3: 0x19e3c56d8709c7c04df676ae,\n            },\n            u384 {\n                limb0: 0x26bfe1899ae9dfd5b4da3b4,\n                limb1: 0x969e22add3fd0aab63ad293,\n                limb2: 0x48b187c212b3c7a4e7921c71,\n                limb3: 0x672ed7e345d5f8a631c3304,\n            },\n            u384 {\n                limb0: 0xd20189c1a4bb67316333ae21,\n                limb1: 0xc954417d074501388e7f6f86,\n                limb2: 0xb5bd8dfb4efa8691c82c5800,\n                limb3: 0x222584ecf600b97d162905e,\n            },\n            u384 {\n                limb0: 0xe60621f5521bd7ad8ad8b96c,\n                limb1: 0x22475963b9bc603f561d5380,\n                limb2: 0xf7ac4167352d3fc0b99fdf27,\n                limb3: 0x150dd6bc480b181487774516,\n            },\n            u384 {\n                limb0: 0x7ca855b1cb1b28d86747f5a7,\n                limb1: 0x53c0147cb1c13d8013522d02,\n                limb2: 0x8ec52bfd40787ffbff320a9b,\n                limb3: 0x182a5b33ef92df1c12447743,\n            },\n            u384 {\n                limb0: 0x9114a84f9bf4bd50874294fb,\n                limb1: 0x5c0ae0681a57917c99e1426d,\n                limb2: 0x6ad9a76609db5dc5c675c791,\n                limb3: 0x19c1ec699482671fcaf1b19c,\n            },\n            u384 {\n                limb0: 0x2a3fd6b81e91f29b4d984e09,\n                limb1: 0x50d301fab9c7d2f4779f90b1,\n                limb2: 0xe6c8ccba191f1a279aee7e85,\n                limb3: 0x136aa0c1143935a5e1a88ffc,\n            },\n            u384 {\n                limb0: 0x80a7670da417aa6f772cbfde,\n                limb1: 0x61a344bfe57ffda8583dce50,\n                limb2: 0xaeff7716b9b0e2a62feb3444,\n                limb3: 0x2d4acc5a6afcbbdd3ec1106,\n            },\n            u384 {\n                limb0: 0x676c32bbca3e50f9280e1061,\n                limb1: 0x721511fc5f703e9ee9cc8da7,\n                limb2: 0xe4c28b279f46d1cae3f54872,\n                limb3: 0x15d485af475c1ec9dbe78064,\n            },\n            u384 {\n                limb0: 0xed174e0ba434acd83711140,\n                limb1: 0x42582904c61a29492ae17412,\n                limb2: 0x3a8c7681f1eea64ae9caf7e9,\n                limb3: 0x114f3cbdcbb37059a0b84f27,\n            },\n            u384 {\n                limb0: 0xad20ab5616fdbbbc85cff83d,\n                limb1: 0x6b942863e803e855a12ae040,\n                limb2: 0x49b20e2216eeafa9f267a636,\n                limb3: 0xe96b66c6575d66a4ca5151d,\n            },\n            u384 {\n                limb0: 0x39ee6f5f837a2777769add11,\n                limb1: 0x6da3d6ae14650170b03ee541,\n                limb2: 0x5b568a3fc770bbc64a7abe0f,\n                limb3: 0x2eb487d6806532733c3d5fc,\n            },\n            u384 {\n                limb0: 0xcbd78245c1111c2acf1cef7d,\n                limb1: 0x2911da3ac9da565e05474a87,\n                limb2: 0xb674717dd54246d1432893f7,\n                limb3: 0x17d72d4450da66be3e21d845,\n            },\n            u384 {\n                limb0: 0xe8768aa2b9f49c1c9b179f7d,\n                limb1: 0x8e87b8af5558360512405719,\n                limb2: 0x2156d221f1eb0cd2ed4dea1a,\n                limb3: 0x100512b562db61ca04587345,\n            },\n            u384 {\n                limb0: 0x2c7c6d4b54613235e5cfdbd8,\n                limb1: 0xba509a15aba288f06e03b94b,\n                limb2: 0x90018281875bf77714f47bd7,\n                limb3: 0x68ccc6e229baf5e85a3eb3a,\n            },\n            u384 {\n                limb0: 0x2fe1317b1246c3d092d82bdd,\n                limb1: 0xea756691cedf3b7369b482a5,\n                limb2: 0x4eb31426855d031dede7aca0,\n                limb3: 0x19285fe3057c4fff419fa3c4,\n            },\n            u384 {\n                limb0: 0xa3e0fe5805b346066bc4765c,\n                limb1: 0xe6925e5999a25ae2beffa0d,\n                limb2: 0xc009e4bb5bedc77b372b3277,\n                limb3: 0x7940eb50b0ca5cc3b3bfe6d,\n            },\n            u384 {\n                limb0: 0x893e34d59249b8ef88b06c0c,\n                limb1: 0x5e5488f21489b1d42d4febd7,\n                limb2: 0xab8d85a40ac50c5467e84a53,\n                limb3: 0x130cf982003e63a5c952d9a3,\n            },\n            u384 {\n                limb0: 0x859ef9e375fa2adec571eed0,\n                limb1: 0xb90ec8bfa8bd1f80c7e76d4,\n                limb2: 0x8f340c9d3ba7ceeac975a64,\n                limb3: 0xd081f665e8f9b330e06062b,\n            },\n            u384 {\n                limb0: 0x7b665812578a7a35233cb10,\n                limb1: 0x4424006d3b8b0e80e45cce9d,\n                limb2: 0xd8dcfef05921b7a43d2e5a2a,\n                limb3: 0x134f53443d962f815cb5ed9d,\n            },\n            u384 {\n                limb0: 0xc834d23469e835f617f80a52,\n                limb1: 0x5efea47890e7f384560bcf1e,\n                limb2: 0xc90a7871da96e44eaf467fb3,\n                limb3: 0xe142bddd0e6505216e1da4,\n            },\n        ],\n        z: 0x73e890d1574ee2b2f3ca3ceae9c940462f46109b37cd53e4f1b245027a6ccfa,\n    };\n    let res = multi_pairing_check_bls12_381_2P_2F(pair0, pair1, lines, hint);\n    assert!(res.is_ok());\n}\n\n\n#[test]\nfn test_BLS12_381_mpcheck_3P_2F_with_extra_miller_loop_result() {\n    let pair0: G1G2Pair = G1G2Pair {\n        p: G1Point {\n            x: u384 {\n                limb0: 0xe4f817e54aede0613c17035c,\n                limb1: 0xdff1f15010392a6da1f95a6,\n                limb2: 0xbed78d3d341e911d49f15454,\n                limb3: 0x18154782ce0913b21588066d,\n            },\n            y: u384 {\n                limb0: 0x3d77d61326ef5a9a5a681757,\n                limb1: 0xd3070afd4f0e121de7fcee60,\n                limb2: 0xdf9ef4088763fe611fb85858,\n                limb3: 0x11a612bdd0bc09562856a70,\n            },\n        },\n        q: G2Point {\n            x0: u384 {\n                limb0: 0x30d2fddc2fa171cdd4d31a55,\n                limb1: 0x92fab4f255a20d09700542e5,\n                limb2: 0x4d92a8c02d22b8cea4ff21ab,\n                limb3: 0x120a838699abaae7ed948194,\n            },\n            x1: u384 {\n                limb0: 0x51cd5fdc71cf4557ef606935,\n                limb1: 0x92e1b13e2c93fc9957b17841,\n                limb2: 0x6143a906b63b7f3476ad6819,\n                limb3: 0x158186f6f2dd04cfa4e78547,\n            },\n            y0: u384 {\n                limb0: 0x9f1c7dcdbe4574f05d0c093b,\n                limb1: 0xcde395f3ee4e353cf25a2e21,\n                limb2: 0x6a44c4a6d642c3dd98128703,\n                limb3: 0x2bd32fdfe26d866771e2180,\n            },\n            y1: u384 {\n                limb0: 0x7060005397ea11f7e9a26050,\n                limb1: 0xeb8540654b533da9b594fc27,\n                limb2: 0xfc83cf9d283b7231df1db3f9,\n                limb3: 0x7ff9623d918ca12e0ff6cce,\n            },\n        },\n    };\n    let pair1: G1G2Pair = G1G2Pair {\n        p: G1Point {\n            x: u384 {\n                limb0: 0xe4f817e54aede0613c17035c,\n                limb1: 0xdff1f15010392a6da1f95a6,\n                limb2: 0xbed78d3d341e911d49f15454,\n                limb3: 0x18154782ce0913b21588066d,\n            },\n            y: u384 {\n                limb0: 0x3d77d61326ef5a9a5a681757,\n                limb1: 0xd3070afd4f0e121de7fcee60,\n                limb2: 0xdf9ef4088763fe611fb85858,\n                limb3: 0x11a612bdd0bc09562856a70,\n            },\n        },\n        q: G2Point {\n            x0: u384 {\n                limb0: 0x30d2fddc2fa171cdd4d31a55,\n                limb1: 0x92fab4f255a20d09700542e5,\n                limb2: 0x4d92a8c02d22b8cea4ff21ab,\n                limb3: 0x120a838699abaae7ed948194,\n            },\n            x1: u384 {\n                limb0: 0x51cd5fdc71cf4557ef606935,\n                limb1: 0x92e1b13e2c93fc9957b17841,\n                limb2: 0x6143a906b63b7f3476ad6819,\n                limb3: 0x158186f6f2dd04cfa4e78547,\n            },\n            y0: u384 {\n                limb0: 0x9f1c7dcdbe4574f05d0c093b,\n                limb1: 0xcde395f3ee4e353cf25a2e21,\n                limb2: 0x6a44c4a6d642c3dd98128703,\n                limb3: 0x2bd32fdfe26d866771e2180,\n            },\n            y1: u384 {\n                limb0: 0x7060005397ea11f7e9a26050,\n                limb1: 0xeb8540654b533da9b594fc27,\n                limb2: 0xfc83cf9d283b7231df1db3f9,\n                limb3: 0x7ff9623d918ca12e0ff6cce,\n            },\n        },\n    };\n    let pair2: G1G2Pair = G1G2Pair {\n        p: G1Point {\n            x: u384 {\n                limb0: 0xe4f817e54aede0613c17035c,\n                limb1: 0xdff1f15010392a6da1f95a6,\n                limb2: 0xbed78d3d341e911d49f15454,\n                limb3: 0x18154782ce0913b21588066d,\n            },\n            y: u384 {\n                limb0: 0x3d77d61326ef5a9a5a681757,\n                limb1: 0xd3070afd4f0e121de7fcee60,\n                limb2: 0xdf9ef4088763fe611fb85858,\n                limb3: 0x11a612bdd0bc09562856a70,\n            },\n        },\n        q: G2Point {\n            x0: u384 {\n                limb0: 0x30d2fddc2fa171cdd4d31a55,\n                limb1: 0x92fab4f255a20d09700542e5,\n                limb2: 0x4d92a8c02d22b8cea4ff21ab,\n                limb3: 0x120a838699abaae7ed948194,\n            },\n            x1: u384 {\n                limb0: 0x51cd5fdc71cf4557ef606935,\n                limb1: 0x92e1b13e2c93fc9957b17841,\n                limb2: 0x6143a906b63b7f3476ad6819,\n                limb3: 0x158186f6f2dd04cfa4e78547,\n            },\n            y0: u384 {\n                limb0: 0x9f1c7dcdbe4574f05d0c093b,\n                limb1: 0xcde395f3ee4e353cf25a2e21,\n                limb2: 0x6a44c4a6d642c3dd98128703,\n                limb3: 0x2bd32fdfe26d866771e2180,\n            },\n            y1: u384 {\n                limb0: 0x7060005397ea11f7e9a26050,\n                limb1: 0xeb8540654b533da9b594fc27,\n                limb2: 0xfc83cf9d283b7231df1db3f9,\n                limb3: 0x7ff9623d918ca12e0ff6cce,\n            },\n        },\n    };\n    let precomputed_miller_loop_result = E12D {\n        w0: u384 {\n            limb0: 0xb911c83d732e7d278eca2b2,\n            limb1: 0x371bde647281b4f0753c7b54,\n            limb2: 0x32f3136b6412048dad82afcf,\n            limb3: 0x276d8a09b1ef471d61e1fe9,\n        },\n        w1: u384 {\n            limb0: 0x2d08819331e98c628ad7e6a4,\n            limb1: 0xf78975823557a6eaed403568,\n            limb2: 0xd357bcaa08f3bcf837b69302,\n            limb3: 0x84dc8eb534426c70fdeb97a,\n        },\n        w2: u384 {\n            limb0: 0xd8ab7356837a3539e775e8a4,\n            limb1: 0xeac85ffce2bc7b2518fb953c,\n            limb2: 0xdb2e7f9897c5d9aac15601e7,\n            limb3: 0xad1ecf602d65fe881eaa6e0,\n        },\n        w3: u384 {\n            limb0: 0xb4bbd298bab0e4881a5ebb34,\n            limb1: 0x14d8b2b539c52b38e862bb30,\n            limb2: 0xc1ba1386389c858a2803bf51,\n            limb3: 0xc44713fa939be012d57473a,\n        },\n        w4: u384 {\n            limb0: 0x8c8a60ac405578242750266c,\n            limb1: 0x1f6ed0fc4768c4d33ae5bde9,\n            limb2: 0x74356664cf5f284c5d9047dd,\n            limb3: 0x17d27924032bad1b96b038a7,\n        },\n        w5: u384 {\n            limb0: 0xdca890b5c14238be57f05981,\n            limb1: 0x5d5411099e394511d4bf5f21,\n            limb2: 0x529d5c8a74ead9d439593056,\n            limb3: 0x252d46d43966352b46ef871,\n        },\n        w6: u384 {\n            limb0: 0x1e65e90c6094915aaef973cd,\n            limb1: 0x606ac452167328657347b203,\n            limb2: 0x6198bb2924ef03ae600f7222,\n            limb3: 0xdb2280eeda7144c402dfe7f,\n        },\n        w7: u384 {\n            limb0: 0x71c5034bc18b6d1c45a03c30,\n            limb1: 0x31f94b4bb159c235c039f752,\n            limb2: 0xdf1e1ed1387d8c002c5f3a20,\n            limb3: 0x190ab4a19e1f1b981b892bae,\n        },\n        w8: u384 {\n            limb0: 0xf00e883b8262021a004b9fc8,\n            limb1: 0x369f48c0083f000e7eeec362,\n            limb2: 0x9170f7ea386763607860320a,\n            limb3: 0x16e03a19b04611cdff78c5fd,\n        },\n        w9: u384 {\n            limb0: 0xf3b76b5dfdcf84760b96fa0c,\n            limb1: 0x4ba7b263cc869557904c59cf,\n            limb2: 0xbed73f63ea723c5eca33d491,\n            limb3: 0x128d8d88c3c8616ff326a554,\n        },\n        w10: u384 {\n            limb0: 0x4380616825a3a723a4dc2b5c,\n            limb1: 0x712262fd5e7ddfa653a4708e,\n            limb2: 0x303031f5c1bf5e2f73d4750a,\n            limb3: 0x36d2ef1d9b923357234e298,\n        },\n        w11: u384 {\n            limb0: 0xbe53e886831d35b55f343069,\n            limb1: 0x34b2a5b11f48e46a872245a2,\n            limb2: 0x6afab08a2bc52479f09c105f,\n            limb3: 0x329f18e7852fa05613e9204,\n        },\n    };\n    let lines = array![\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xa5165654d48ad38da89955b2,\n                limb1: 0x36388a52d2379c53735285c1,\n                limb2: 0xb1cba90b5a7d592a905913f6,\n                limb3: 0xf04eef4de6a895d29865a33,\n            },\n            r0a1: u384 {\n                limb0: 0x11170525e014139da401da13,\n                limb1: 0xdfc4d38dc6621f61b8834990,\n                limb2: 0xb86906ab9966ab43169ba396,\n                limb3: 0x104b8a575e67290a4d8e5d0,\n            },\n            r1a0: u384 {\n                limb0: 0x2fddaa92e366f11a886242bb,\n                limb1: 0xf7255a5c3e06de681d21207f,\n                limb2: 0x544afd5f8c149ed0980ad33f,\n                limb3: 0x18ff3a5ad5398470eec050cd,\n            },\n            r1a1: u384 {\n                limb0: 0x5ebc8ff3cef71a1b2b0ce5d9,\n                limb1: 0xf4093ee74d1a5714b4562355,\n                limb2: 0xe6d400f1614d23e5b0b3831f,\n                limb3: 0x4e3cba1ec100020f137797e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xcf94aa0961ba244fb7b34f8,\n                limb1: 0x9eedbbaadfb34c820b7b9046,\n                limb2: 0xdfdb0674b62b2c9622a321e9,\n                limb3: 0x18745455fc3b957175dbaaab,\n            },\n            r0a1: u384 {\n                limb0: 0xb18b9b496c7e76d19d0476a3,\n                limb1: 0x532e40e737e71a727e36699d,\n                limb2: 0x1173a4db0c906464c9c6dfe5,\n                limb3: 0x14436970af87927ca25ab397,\n            },\n            r1a0: u384 {\n                limb0: 0x2b8bedf7ace9601914137555,\n                limb1: 0x8e5a6616ba6b5a7c0a4b60cc,\n                limb2: 0xeed2fb7a6b6951d08720afd2,\n                limb3: 0x6e20b841803b78a54cb51f0,\n            },\n            r1a1: u384 {\n                limb0: 0xe2f3cc1d38637307df479c33,\n                limb1: 0x553fbfecff64b0f8513ea53,\n                limb2: 0xc35e934c2f0dd0dfc36fb764,\n                limb3: 0xfe253f73265563f5da37bf0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xa5165654d48ad38da89955b2,\n                limb1: 0x36388a52d2379c53735285c1,\n                limb2: 0xb1cba90b5a7d592a905913f6,\n                limb3: 0xf04eef4de6a895d29865a33,\n            },\n            r0a1: u384 {\n                limb0: 0x11170525e014139da401da13,\n                limb1: 0xdfc4d38dc6621f61b8834990,\n                limb2: 0xb86906ab9966ab43169ba396,\n                limb3: 0x104b8a575e67290a4d8e5d0,\n            },\n            r1a0: u384 {\n                limb0: 0x2fddaa92e366f11a886242bb,\n                limb1: 0xf7255a5c3e06de681d21207f,\n                limb2: 0x544afd5f8c149ed0980ad33f,\n                limb3: 0x18ff3a5ad5398470eec050cd,\n            },\n            r1a1: u384 {\n                limb0: 0x5ebc8ff3cef71a1b2b0ce5d9,\n                limb1: 0xf4093ee74d1a5714b4562355,\n                limb2: 0xe6d400f1614d23e5b0b3831f,\n                limb3: 0x4e3cba1ec100020f137797e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xcf94aa0961ba244fb7b34f8,\n                limb1: 0x9eedbbaadfb34c820b7b9046,\n                limb2: 0xdfdb0674b62b2c9622a321e9,\n                limb3: 0x18745455fc3b957175dbaaab,\n            },\n            r0a1: u384 {\n                limb0: 0xb18b9b496c7e76d19d0476a3,\n                limb1: 0x532e40e737e71a727e36699d,\n                limb2: 0x1173a4db0c906464c9c6dfe5,\n                limb3: 0x14436970af87927ca25ab397,\n            },\n            r1a0: u384 {\n                limb0: 0x2b8bedf7ace9601914137555,\n                limb1: 0x8e5a6616ba6b5a7c0a4b60cc,\n                limb2: 0xeed2fb7a6b6951d08720afd2,\n                limb3: 0x6e20b841803b78a54cb51f0,\n            },\n            r1a1: u384 {\n                limb0: 0xe2f3cc1d38637307df479c33,\n                limb1: 0x553fbfecff64b0f8513ea53,\n                limb2: 0xc35e934c2f0dd0dfc36fb764,\n                limb3: 0xfe253f73265563f5da37bf0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf63d5adf98504eb919404838,\n                limb1: 0x322c7fec39e0dbb7e3fab671,\n                limb2: 0x66a7d9554b938f680e363589,\n                limb3: 0x168b865e60bf25b5f80efdba,\n            },\n            r0a1: u384 {\n                limb0: 0xa19475051f484344fbfcb94,\n                limb1: 0xecab432b31e20fd481ef1641,\n                limb2: 0x9aef0e4871833b8e86498442,\n                limb3: 0xbfbebd5fe20e6b34cd10d52,\n            },\n            r1a0: u384 {\n                limb0: 0x3034c4ead4a9ecca97ef227f,\n                limb1: 0x3ff722abdd9b1b4fb2ed76a2,\n                limb2: 0x89478f4e3e947df714a9fb5e,\n                limb3: 0xf7d15d762bc99988f9d789d,\n            },\n            r1a1: u384 {\n                limb0: 0xe7309c91453760cefb576bc9,\n                limb1: 0xc04e0c62e92a4efd0f9d9c3b,\n                limb2: 0xada0f0a505209353f4b17f24,\n                limb3: 0x185b2e9615659da43b50282e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf63d5adf98504eb919404838,\n                limb1: 0x322c7fec39e0dbb7e3fab671,\n                limb2: 0x66a7d9554b938f680e363589,\n                limb3: 0x168b865e60bf25b5f80efdba,\n            },\n            r0a1: u384 {\n                limb0: 0xa19475051f484344fbfcb94,\n                limb1: 0xecab432b31e20fd481ef1641,\n                limb2: 0x9aef0e4871833b8e86498442,\n                limb3: 0xbfbebd5fe20e6b34cd10d52,\n            },\n            r1a0: u384 {\n                limb0: 0x3034c4ead4a9ecca97ef227f,\n                limb1: 0x3ff722abdd9b1b4fb2ed76a2,\n                limb2: 0x89478f4e3e947df714a9fb5e,\n                limb3: 0xf7d15d762bc99988f9d789d,\n            },\n            r1a1: u384 {\n                limb0: 0xe7309c91453760cefb576bc9,\n                limb1: 0xc04e0c62e92a4efd0f9d9c3b,\n                limb2: 0xada0f0a505209353f4b17f24,\n                limb3: 0x185b2e9615659da43b50282e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xacd0c846fbba57a06a86174d,\n                limb1: 0xb3559bb08ff796c300ff2163,\n                limb2: 0xb7ebbcfa41b1f30d02874a61,\n                limb3: 0x7a87f7612c63af0969932c,\n            },\n            r0a1: u384 {\n                limb0: 0xd4f55c22c625dddb92b73bd7,\n                limb1: 0x681facc4bfa2b130fcf3dacd,\n                limb2: 0x3bd92d164662bbb7f99c1b5a,\n                limb3: 0x12ac7263968961adecde567f,\n            },\n            r1a0: u384 {\n                limb0: 0x81f5ef562d3dfd1fe4780fbf,\n                limb1: 0xcb396419628f7f02f0f0e2f8,\n                limb2: 0x3012e01dd8fc025163ad5e2a,\n                limb3: 0x1c053f246178e26fa6d3dea,\n            },\n            r1a1: u384 {\n                limb0: 0xc81f62215d8116e0b580ac54,\n                limb1: 0xef2e48f58ffbbafac5b2b827,\n                limb2: 0xe22598ad9700d53d0ab24440,\n                limb3: 0xeec459ce4be55ed92aa3f08,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x628192ce61515a10db139388,\n                limb1: 0xdf2fbc87bd9658e30ab5ca96,\n                limb2: 0x81420786279bf4a2c17ecbee,\n                limb3: 0x7cd8317980fac457217aa73,\n            },\n            r0a1: u384 {\n                limb0: 0xad2f18fc2c832eedc6828d6a,\n                limb1: 0x2c62b1d26ffe93fb41fbf6a6,\n                limb2: 0x54a6928b6b6cb48d95627389,\n                limb3: 0x155b45f029858968773bd77a,\n            },\n            r1a0: u384 {\n                limb0: 0x3a4649b4ea519194273b8413,\n                limb1: 0x39ed13d914c220a2a8621253,\n                limb2: 0xb2c2fe85ccf72ab37ef6d3e8,\n                limb3: 0x2f73caef28adb638d772f51,\n            },\n            r1a1: u384 {\n                limb0: 0x9a5228bb86ec7a83fc86d719,\n                limb1: 0x7b209838f6c5a27f3b13850e,\n                limb2: 0x2f682efc7c8f9d868bb155a0,\n                limb3: 0x14e1ffb93bd477d5824891f6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xacd0c846fbba57a06a86174d,\n                limb1: 0xb3559bb08ff796c300ff2163,\n                limb2: 0xb7ebbcfa41b1f30d02874a61,\n                limb3: 0x7a87f7612c63af0969932c,\n            },\n            r0a1: u384 {\n                limb0: 0xd4f55c22c625dddb92b73bd7,\n                limb1: 0x681facc4bfa2b130fcf3dacd,\n                limb2: 0x3bd92d164662bbb7f99c1b5a,\n                limb3: 0x12ac7263968961adecde567f,\n            },\n            r1a0: u384 {\n                limb0: 0x81f5ef562d3dfd1fe4780fbf,\n                limb1: 0xcb396419628f7f02f0f0e2f8,\n                limb2: 0x3012e01dd8fc025163ad5e2a,\n                limb3: 0x1c053f246178e26fa6d3dea,\n            },\n            r1a1: u384 {\n                limb0: 0xc81f62215d8116e0b580ac54,\n                limb1: 0xef2e48f58ffbbafac5b2b827,\n                limb2: 0xe22598ad9700d53d0ab24440,\n                limb3: 0xeec459ce4be55ed92aa3f08,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x628192ce61515a10db139388,\n                limb1: 0xdf2fbc87bd9658e30ab5ca96,\n                limb2: 0x81420786279bf4a2c17ecbee,\n                limb3: 0x7cd8317980fac457217aa73,\n            },\n            r0a1: u384 {\n                limb0: 0xad2f18fc2c832eedc6828d6a,\n                limb1: 0x2c62b1d26ffe93fb41fbf6a6,\n                limb2: 0x54a6928b6b6cb48d95627389,\n                limb3: 0x155b45f029858968773bd77a,\n            },\n            r1a0: u384 {\n                limb0: 0x3a4649b4ea519194273b8413,\n                limb1: 0x39ed13d914c220a2a8621253,\n                limb2: 0xb2c2fe85ccf72ab37ef6d3e8,\n                limb3: 0x2f73caef28adb638d772f51,\n            },\n            r1a1: u384 {\n                limb0: 0x9a5228bb86ec7a83fc86d719,\n                limb1: 0x7b209838f6c5a27f3b13850e,\n                limb2: 0x2f682efc7c8f9d868bb155a0,\n                limb3: 0x14e1ffb93bd477d5824891f6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x1aade009b16b47d1f727828e,\n                limb1: 0xc03ad66ffa3eb3facb3162dd,\n                limb2: 0x89fc57933c577fcb302abd31,\n                limb3: 0x14a7ae423327b8eb4258ddc7,\n            },\n            r0a1: u384 {\n                limb0: 0xb11c5c536b7a01248a05036e,\n                limb1: 0x4b63f65385cbfd77dd0c6b99,\n                limb2: 0xfc1bd30c87ae38746b0ea7ed,\n                limb3: 0xb343c5f6d66a234c16e751f,\n            },\n            r1a0: u384 {\n                limb0: 0xbfc9b6d848bfcfc1500c9e92,\n                limb1: 0xe6aca7c5d29a818829b8fcd6,\n                limb2: 0xf14399d2c3b586fa7369ef82,\n                limb3: 0x16fe63f10adc6d94ef6ac666,\n            },\n            r1a1: u384 {\n                limb0: 0x788c4a6c2cc0d6d1431f8fe0,\n                limb1: 0x6fbb017725bc437f59472864,\n                limb2: 0x7af112586422e8b451fff86f,\n                limb3: 0x8f33c7c0369d6bf05923ec6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x1aade009b16b47d1f727828e,\n                limb1: 0xc03ad66ffa3eb3facb3162dd,\n                limb2: 0x89fc57933c577fcb302abd31,\n                limb3: 0x14a7ae423327b8eb4258ddc7,\n            },\n            r0a1: u384 {\n                limb0: 0xb11c5c536b7a01248a05036e,\n                limb1: 0x4b63f65385cbfd77dd0c6b99,\n                limb2: 0xfc1bd30c87ae38746b0ea7ed,\n                limb3: 0xb343c5f6d66a234c16e751f,\n            },\n            r1a0: u384 {\n                limb0: 0xbfc9b6d848bfcfc1500c9e92,\n                limb1: 0xe6aca7c5d29a818829b8fcd6,\n                limb2: 0xf14399d2c3b586fa7369ef82,\n                limb3: 0x16fe63f10adc6d94ef6ac666,\n            },\n            r1a1: u384 {\n                limb0: 0x788c4a6c2cc0d6d1431f8fe0,\n                limb1: 0x6fbb017725bc437f59472864,\n                limb2: 0x7af112586422e8b451fff86f,\n                limb3: 0x8f33c7c0369d6bf05923ec6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc8e72714e847363877b7a8f7,\n                limb1: 0xe3e3fa798cae86df2a30d4aa,\n                limb2: 0x7459f8d7d611e2cb2ec54a0e,\n                limb3: 0x152cd68e17604069ec445769,\n            },\n            r0a1: u384 {\n                limb0: 0x8314b69d7f735267593148b,\n                limb1: 0xee63002a2560cba68706d4d8,\n                limb2: 0xfaa3112fa6d55883c688d4cb,\n                limb3: 0x14bb5f09c9b3530802a1e99f,\n            },\n            r1a0: u384 {\n                limb0: 0x5f0624eb82fb7ea0161d7d4f,\n                limb1: 0xd71eb5753a71df931abdea02,\n                limb2: 0x7e9d29717cc3a362d2351d9a,\n                limb3: 0x10bb67b2ea7e11fa4f644370,\n            },\n            r1a1: u384 {\n                limb0: 0xca7b1c09d30828e75c7c7281,\n                limb1: 0x5c8c1483d8402202dd0de198,\n                limb2: 0x2228fda9f92014d9870c7f11,\n                limb3: 0x6e2f5953b1cc17a41a0cf1b,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc8e72714e847363877b7a8f7,\n                limb1: 0xe3e3fa798cae86df2a30d4aa,\n                limb2: 0x7459f8d7d611e2cb2ec54a0e,\n                limb3: 0x152cd68e17604069ec445769,\n            },\n            r0a1: u384 {\n                limb0: 0x8314b69d7f735267593148b,\n                limb1: 0xee63002a2560cba68706d4d8,\n                limb2: 0xfaa3112fa6d55883c688d4cb,\n                limb3: 0x14bb5f09c9b3530802a1e99f,\n            },\n            r1a0: u384 {\n                limb0: 0x5f0624eb82fb7ea0161d7d4f,\n                limb1: 0xd71eb5753a71df931abdea02,\n                limb2: 0x7e9d29717cc3a362d2351d9a,\n                limb3: 0x10bb67b2ea7e11fa4f644370,\n            },\n            r1a1: u384 {\n                limb0: 0xca7b1c09d30828e75c7c7281,\n                limb1: 0x5c8c1483d8402202dd0de198,\n                limb2: 0x2228fda9f92014d9870c7f11,\n                limb3: 0x6e2f5953b1cc17a41a0cf1b,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc9b70b573ab2dbee53352a96,\n                limb1: 0xcc8c7eca86c99d50d3e90936,\n                limb2: 0x7d70aa72c271b1f8c15ad43e,\n                limb3: 0xe499ea04ed9644c9f31ff2c,\n            },\n            r0a1: u384 {\n                limb0: 0xa0f9073cb60f9d948336700a,\n                limb1: 0xbcba195f8a338d4cfe326b7d,\n                limb2: 0x830451f120569c1ba8a262fc,\n                limb3: 0x7d35ad7c0095f289f76c6bd,\n            },\n            r1a0: u384 {\n                limb0: 0x6ef4a7e1adac7589cf5b1154,\n                limb1: 0xaca7ecc39f53183948238de2,\n                limb2: 0x7b65183abb9d2d0be2a6d539,\n                limb3: 0x63e7285b3dc806c2788d0e8,\n            },\n            r1a1: u384 {\n                limb0: 0x263affe0370ee6f1853c2fb0,\n                limb1: 0xc73621e485f5fef86ded3d9,\n                limb2: 0x4a9c22bbb63a9b67c98dc2df,\n                limb3: 0x10a59819d699abac0f845268,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x842113d6568cc4a0ff417952,\n                limb1: 0xbf9bf6040bcf98685b071730,\n                limb2: 0xc764bd69e11c73f3ecaf8d07,\n                limb3: 0xd587218a1496f9351f01e73,\n            },\n            r0a1: u384 {\n                limb0: 0xbc9127de7d6cf406424d7f15,\n                limb1: 0x8168235c896874ad54d9512,\n                limb2: 0xdcf79d8a1a168ae1c6dfa2e4,\n                limb3: 0xf95426d8e89954dee065f67,\n            },\n            r1a0: u384 {\n                limb0: 0x229ab89c13125cc2bf25a72d,\n                limb1: 0xd5a7df3aaaa0c0353dcac5a7,\n                limb2: 0x7c94527fabc77777ff2464ab,\n                limb3: 0x110918e757ed869ea437e672,\n            },\n            r1a1: u384 {\n                limb0: 0xe982d22571f2f17aa68f712c,\n                limb1: 0xa48a9b75c7c89bfab5f5d1eb,\n                limb2: 0x1b89a01e72668b0a30e747fb,\n                limb3: 0xaa126ea871c3e3ca7d0b445,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc9b70b573ab2dbee53352a96,\n                limb1: 0xcc8c7eca86c99d50d3e90936,\n                limb2: 0x7d70aa72c271b1f8c15ad43e,\n                limb3: 0xe499ea04ed9644c9f31ff2c,\n            },\n            r0a1: u384 {\n                limb0: 0xa0f9073cb60f9d948336700a,\n                limb1: 0xbcba195f8a338d4cfe326b7d,\n                limb2: 0x830451f120569c1ba8a262fc,\n                limb3: 0x7d35ad7c0095f289f76c6bd,\n            },\n            r1a0: u384 {\n                limb0: 0x6ef4a7e1adac7589cf5b1154,\n                limb1: 0xaca7ecc39f53183948238de2,\n                limb2: 0x7b65183abb9d2d0be2a6d539,\n                limb3: 0x63e7285b3dc806c2788d0e8,\n            },\n            r1a1: u384 {\n                limb0: 0x263affe0370ee6f1853c2fb0,\n                limb1: 0xc73621e485f5fef86ded3d9,\n                limb2: 0x4a9c22bbb63a9b67c98dc2df,\n                limb3: 0x10a59819d699abac0f845268,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x842113d6568cc4a0ff417952,\n                limb1: 0xbf9bf6040bcf98685b071730,\n                limb2: 0xc764bd69e11c73f3ecaf8d07,\n                limb3: 0xd587218a1496f9351f01e73,\n            },\n            r0a1: u384 {\n                limb0: 0xbc9127de7d6cf406424d7f15,\n                limb1: 0x8168235c896874ad54d9512,\n                limb2: 0xdcf79d8a1a168ae1c6dfa2e4,\n                limb3: 0xf95426d8e89954dee065f67,\n            },\n            r1a0: u384 {\n                limb0: 0x229ab89c13125cc2bf25a72d,\n                limb1: 0xd5a7df3aaaa0c0353dcac5a7,\n                limb2: 0x7c94527fabc77777ff2464ab,\n                limb3: 0x110918e757ed869ea437e672,\n            },\n            r1a1: u384 {\n                limb0: 0xe982d22571f2f17aa68f712c,\n                limb1: 0xa48a9b75c7c89bfab5f5d1eb,\n                limb2: 0x1b89a01e72668b0a30e747fb,\n                limb3: 0xaa126ea871c3e3ca7d0b445,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x8856fcd611eaccb5398098b3,\n                limb1: 0xf99e4037ab06eee76202c0a7,\n                limb2: 0x661b47fbe6e707a1da016abb,\n                limb3: 0x14d41350bc68e30131fda152,\n            },\n            r0a1: u384 {\n                limb0: 0xa330e089de7e62d03d0d8381,\n                limb1: 0xb89bc0fa83c738dbed74992b,\n                limb2: 0x76e01692ebe0ab4a7bbc1cdf,\n                limb3: 0x119ff3df49b55e97212b9137,\n            },\n            r1a0: u384 {\n                limb0: 0x17f35432949ee63be1b62fb4,\n                limb1: 0x558e84d6438f3f13cb52798,\n                limb2: 0x49ae9bb91dbd154524d0b491,\n                limb3: 0xa4ecb322f18755a2d7de6cb,\n            },\n            r1a1: u384 {\n                limb0: 0x16493c6765e497627871029a,\n                limb1: 0x31a7d00a47e2cdb224ef5050,\n                limb2: 0x140290a6f2fa5cb13477f571,\n                limb3: 0x1846bb57be1afd1089f8faa2,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x8856fcd611eaccb5398098b3,\n                limb1: 0xf99e4037ab06eee76202c0a7,\n                limb2: 0x661b47fbe6e707a1da016abb,\n                limb3: 0x14d41350bc68e30131fda152,\n            },\n            r0a1: u384 {\n                limb0: 0xa330e089de7e62d03d0d8381,\n                limb1: 0xb89bc0fa83c738dbed74992b,\n                limb2: 0x76e01692ebe0ab4a7bbc1cdf,\n                limb3: 0x119ff3df49b55e97212b9137,\n            },\n            r1a0: u384 {\n                limb0: 0x17f35432949ee63be1b62fb4,\n                limb1: 0x558e84d6438f3f13cb52798,\n                limb2: 0x49ae9bb91dbd154524d0b491,\n                limb3: 0xa4ecb322f18755a2d7de6cb,\n            },\n            r1a1: u384 {\n                limb0: 0x16493c6765e497627871029a,\n                limb1: 0x31a7d00a47e2cdb224ef5050,\n                limb2: 0x140290a6f2fa5cb13477f571,\n                limb3: 0x1846bb57be1afd1089f8faa2,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xcab2483e7d8dd3fc04231f3e,\n                limb1: 0x6e798d52173fbcf7011727cf,\n                limb2: 0x3aa288e6664238899e96388,\n                limb3: 0xbed7f1cb0f29dbd779eb4db,\n            },\n            r0a1: u384 {\n                limb0: 0xda17dc08cb341a88d345029c,\n                limb1: 0xca9a84bc1b03f8ae6f50eb29,\n                limb2: 0xfab0923470c6c01cd53037f7,\n                limb3: 0x11b814eb656959f8bcd55260,\n            },\n            r1a0: u384 {\n                limb0: 0x2f5c03f8edc8ef9851eca211,\n                limb1: 0xb8f62bffa8430def4963177c,\n                limb2: 0x285721fd3cb9239504693349,\n                limb3: 0x19697adae2f920497006cf60,\n            },\n            r1a1: u384 {\n                limb0: 0x8ba36c1c6a84f64c58779c66,\n                limb1: 0xd8d040c366aee8415c83abc5,\n                limb2: 0x80bdb025a81cc5fca162bc55,\n                limb3: 0x132455e68b47f0c80c186c5e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xcab2483e7d8dd3fc04231f3e,\n                limb1: 0x6e798d52173fbcf7011727cf,\n                limb2: 0x3aa288e6664238899e96388,\n                limb3: 0xbed7f1cb0f29dbd779eb4db,\n            },\n            r0a1: u384 {\n                limb0: 0xda17dc08cb341a88d345029c,\n                limb1: 0xca9a84bc1b03f8ae6f50eb29,\n                limb2: 0xfab0923470c6c01cd53037f7,\n                limb3: 0x11b814eb656959f8bcd55260,\n            },\n            r1a0: u384 {\n                limb0: 0x2f5c03f8edc8ef9851eca211,\n                limb1: 0xb8f62bffa8430def4963177c,\n                limb2: 0x285721fd3cb9239504693349,\n                limb3: 0x19697adae2f920497006cf60,\n            },\n            r1a1: u384 {\n                limb0: 0x8ba36c1c6a84f64c58779c66,\n                limb1: 0xd8d040c366aee8415c83abc5,\n                limb2: 0x80bdb025a81cc5fca162bc55,\n                limb3: 0x132455e68b47f0c80c186c5e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc339cdf7e4e5e3a44dbaacae,\n                limb1: 0xf7b3d92dcf1e19226487efff,\n                limb2: 0xeebbb6f12ddfff580bdaf23e,\n                limb3: 0x885c7a835866bb3f2618531,\n            },\n            r0a1: u384 {\n                limb0: 0xfd8a9b43a96749b067da9ea7,\n                limb1: 0x1a45ef3bc3a624fa6a875a42,\n                limb2: 0x871092b7aae86db98a4839e3,\n                limb3: 0x42fdd240a03c256c99338a4,\n            },\n            r1a0: u384 {\n                limb0: 0x34fac230b4cd059f4d142d09,\n                limb1: 0x578becad930850ec442c0499,\n                limb2: 0xdb467db9f5beceb2b12f240b,\n                limb3: 0x8715bbc83d753dac30ee064,\n            },\n            r1a1: u384 {\n                limb0: 0xbe4bacb87a4297599bed4a75,\n                limb1: 0x15bab163a1bec103441823b0,\n                limb2: 0xf6b498ea628259382f611e1,\n                limb3: 0x25cec6e6bc8e2b0ac8eaa18,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc339cdf7e4e5e3a44dbaacae,\n                limb1: 0xf7b3d92dcf1e19226487efff,\n                limb2: 0xeebbb6f12ddfff580bdaf23e,\n                limb3: 0x885c7a835866bb3f2618531,\n            },\n            r0a1: u384 {\n                limb0: 0xfd8a9b43a96749b067da9ea7,\n                limb1: 0x1a45ef3bc3a624fa6a875a42,\n                limb2: 0x871092b7aae86db98a4839e3,\n                limb3: 0x42fdd240a03c256c99338a4,\n            },\n            r1a0: u384 {\n                limb0: 0x34fac230b4cd059f4d142d09,\n                limb1: 0x578becad930850ec442c0499,\n                limb2: 0xdb467db9f5beceb2b12f240b,\n                limb3: 0x8715bbc83d753dac30ee064,\n            },\n            r1a1: u384 {\n                limb0: 0xbe4bacb87a4297599bed4a75,\n                limb1: 0x15bab163a1bec103441823b0,\n                limb2: 0xf6b498ea628259382f611e1,\n                limb3: 0x25cec6e6bc8e2b0ac8eaa18,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x62ac6bd3e467b6012ed51077,\n                limb1: 0xba3ff2d1e2f398b07962d460,\n                limb2: 0x5f87a3069c6c9317d90fe448,\n                limb3: 0x17828eef82575ad624b7eb8,\n            },\n            r0a1: u384 {\n                limb0: 0x60f822b2434ac1915436b6a2,\n                limb1: 0xc280dfe322af22994c4f583a,\n                limb2: 0x2eb22edf843a31f56924e264,\n                limb3: 0xaa3dff436448f24891ce347,\n            },\n            r1a0: u384 {\n                limb0: 0xc957369365d1f757dc7e1b60,\n                limb1: 0xf8fe29b2dfecfb3445695b50,\n                limb2: 0x93b4be33129e250ba6e9d713,\n                limb3: 0x54e2b0392e3280c73e25db7,\n            },\n            r1a1: u384 {\n                limb0: 0x147632c4b781c87049f2585a,\n                limb1: 0xb96a476595a9eec08470167a,\n                limb2: 0xa692b500ee1328d089d355c9,\n                limb3: 0xe3b9ccbcbf1842377715224,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x62ac6bd3e467b6012ed51077,\n                limb1: 0xba3ff2d1e2f398b07962d460,\n                limb2: 0x5f87a3069c6c9317d90fe448,\n                limb3: 0x17828eef82575ad624b7eb8,\n            },\n            r0a1: u384 {\n                limb0: 0x60f822b2434ac1915436b6a2,\n                limb1: 0xc280dfe322af22994c4f583a,\n                limb2: 0x2eb22edf843a31f56924e264,\n                limb3: 0xaa3dff436448f24891ce347,\n            },\n            r1a0: u384 {\n                limb0: 0xc957369365d1f757dc7e1b60,\n                limb1: 0xf8fe29b2dfecfb3445695b50,\n                limb2: 0x93b4be33129e250ba6e9d713,\n                limb3: 0x54e2b0392e3280c73e25db7,\n            },\n            r1a1: u384 {\n                limb0: 0x147632c4b781c87049f2585a,\n                limb1: 0xb96a476595a9eec08470167a,\n                limb2: 0xa692b500ee1328d089d355c9,\n                limb3: 0xe3b9ccbcbf1842377715224,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x64d16d41b66a102c9b553ea3,\n                limb1: 0x295cac58ddcb86c19d5085a6,\n                limb2: 0x7e2cd8cb5856d2d8e7eed046,\n                limb3: 0x15dbe6d70fdbc55ae84afa69,\n            },\n            r0a1: u384 {\n                limb0: 0x54565b8fd91f675d7f4459f2,\n                limb1: 0x272f73f709855d58fb90690e,\n                limb2: 0x55e2996b05c2d49f2a82120c,\n                limb3: 0xec904bbad282fc6edb48286,\n            },\n            r1a0: u384 {\n                limb0: 0xb8bb51ac0ae45391324c34ee,\n                limb1: 0x1eed107f37cd128849f36954,\n                limb2: 0xee5c6663ab2ffe95b57e90a0,\n                limb3: 0x10059eac9c018522626ea231,\n            },\n            r1a1: u384 {\n                limb0: 0xe2ccd1c7748f1dad4aa6574,\n                limb1: 0x3f7f644aea9f5ef5c21d6b1d,\n                limb2: 0x78437a492823073bab9f2f24,\n                limb3: 0x154ca2c1025881bb42f419c9,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x64d16d41b66a102c9b553ea3,\n                limb1: 0x295cac58ddcb86c19d5085a6,\n                limb2: 0x7e2cd8cb5856d2d8e7eed046,\n                limb3: 0x15dbe6d70fdbc55ae84afa69,\n            },\n            r0a1: u384 {\n                limb0: 0x54565b8fd91f675d7f4459f2,\n                limb1: 0x272f73f709855d58fb90690e,\n                limb2: 0x55e2996b05c2d49f2a82120c,\n                limb3: 0xec904bbad282fc6edb48286,\n            },\n            r1a0: u384 {\n                limb0: 0xb8bb51ac0ae45391324c34ee,\n                limb1: 0x1eed107f37cd128849f36954,\n                limb2: 0xee5c6663ab2ffe95b57e90a0,\n                limb3: 0x10059eac9c018522626ea231,\n            },\n            r1a1: u384 {\n                limb0: 0xe2ccd1c7748f1dad4aa6574,\n                limb1: 0x3f7f644aea9f5ef5c21d6b1d,\n                limb2: 0x78437a492823073bab9f2f24,\n                limb3: 0x154ca2c1025881bb42f419c9,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xa148fed9dcfdb8471e37e2cf,\n                limb1: 0x33498344be66beb21dacb6cc,\n                limb2: 0xdb2dab4272dd7e03d560ec7c,\n                limb3: 0x11377cdcdb4dce503806d536,\n            },\n            r0a1: u384 {\n                limb0: 0x4bdd4af2794e5ba563dea99d,\n                limb1: 0xb686ccbe1211bc916075f1f0,\n                limb2: 0x8275da72cc81642b581cd3c,\n                limb3: 0xdc4f2a881416ee0d2a76b19,\n            },\n            r1a0: u384 {\n                limb0: 0xd911cc786bf78185445a5728,\n                limb1: 0xc4fc6828294ec360441828a0,\n                limb2: 0x5710cbd08f34cb4b1d311efd,\n                limb3: 0x10911287680bf76d68b048fa,\n            },\n            r1a1: u384 {\n                limb0: 0xa06d07ee3f35ed581feb7120,\n                limb1: 0x7ec15bc93962ff96203e99ef,\n                limb2: 0x6459955c3f1acf888a31b71c,\n                limb3: 0x163cfbb725456b1e3f8a2a52,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xa148fed9dcfdb8471e37e2cf,\n                limb1: 0x33498344be66beb21dacb6cc,\n                limb2: 0xdb2dab4272dd7e03d560ec7c,\n                limb3: 0x11377cdcdb4dce503806d536,\n            },\n            r0a1: u384 {\n                limb0: 0x4bdd4af2794e5ba563dea99d,\n                limb1: 0xb686ccbe1211bc916075f1f0,\n                limb2: 0x8275da72cc81642b581cd3c,\n                limb3: 0xdc4f2a881416ee0d2a76b19,\n            },\n            r1a0: u384 {\n                limb0: 0xd911cc786bf78185445a5728,\n                limb1: 0xc4fc6828294ec360441828a0,\n                limb2: 0x5710cbd08f34cb4b1d311efd,\n                limb3: 0x10911287680bf76d68b048fa,\n            },\n            r1a1: u384 {\n                limb0: 0xa06d07ee3f35ed581feb7120,\n                limb1: 0x7ec15bc93962ff96203e99ef,\n                limb2: 0x6459955c3f1acf888a31b71c,\n                limb3: 0x163cfbb725456b1e3f8a2a52,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe681d22feda4a7f061e8f6b3,\n                limb1: 0xad9da9a0f9e44384ff71b25a,\n                limb2: 0x25b7987299c14b92935df59b,\n                limb3: 0xe18539ac218e8292f772d49,\n            },\n            r0a1: u384 {\n                limb0: 0xbbab4a0c7d4380e59aaf4a14,\n                limb1: 0x92300d61ef168a3b7f078369,\n                limb2: 0x88740486a05e8355a2f396a6,\n                limb3: 0x1312ea288e7ab2c682515d55,\n            },\n            r1a0: u384 {\n                limb0: 0x5cf20f4d699d245a06e981a4,\n                limb1: 0x4ada2dc6c16584036497194a,\n                limb2: 0x69d2a6a56d565893c5dc5cee,\n                limb3: 0xe83ade7bf2df02d06d669f9,\n            },\n            r1a1: u384 {\n                limb0: 0xdde1fccec9bcee2c65bb7113,\n                limb1: 0xbd3a4889309b7b362a350027,\n                limb2: 0xab1aabdde55d523dd61bd16a,\n                limb3: 0x8e64666e47f311366b84b22,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe681d22feda4a7f061e8f6b3,\n                limb1: 0xad9da9a0f9e44384ff71b25a,\n                limb2: 0x25b7987299c14b92935df59b,\n                limb3: 0xe18539ac218e8292f772d49,\n            },\n            r0a1: u384 {\n                limb0: 0xbbab4a0c7d4380e59aaf4a14,\n                limb1: 0x92300d61ef168a3b7f078369,\n                limb2: 0x88740486a05e8355a2f396a6,\n                limb3: 0x1312ea288e7ab2c682515d55,\n            },\n            r1a0: u384 {\n                limb0: 0x5cf20f4d699d245a06e981a4,\n                limb1: 0x4ada2dc6c16584036497194a,\n                limb2: 0x69d2a6a56d565893c5dc5cee,\n                limb3: 0xe83ade7bf2df02d06d669f9,\n            },\n            r1a1: u384 {\n                limb0: 0xdde1fccec9bcee2c65bb7113,\n                limb1: 0xbd3a4889309b7b362a350027,\n                limb2: 0xab1aabdde55d523dd61bd16a,\n                limb3: 0x8e64666e47f311366b84b22,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf9b090fdb3bf0f5be038a031,\n                limb1: 0xec03d47d7f362f2f46b88120,\n                limb2: 0xcf4ea7dfdbf684e0c9c3c73,\n                limb3: 0x11dd63055f71654adf72fdf4,\n            },\n            r0a1: u384 {\n                limb0: 0x9eb8ba348aa55966b2360dbb,\n                limb1: 0x48dd21f65324b91c93beb3f,\n                limb2: 0x79f6c38f8f7656836cb1317d,\n                limb3: 0x108bdc14fca7e6d3304b3f3b,\n            },\n            r1a0: u384 {\n                limb0: 0xbf74876b9993b6ea79d756e1,\n                limb1: 0xd5e5d391946b6572594a23d1,\n                limb2: 0xf16cf2d26319a001b024184f,\n                limb3: 0xe47f5f42a8c539bf4c4aabc,\n            },\n            r1a1: u384 {\n                limb0: 0xd16c2d990821fee62aea0c7,\n                limb1: 0x9fcd17773a83125f41a6e06e,\n                limb2: 0x97ed32a632508ccadf843b41,\n                limb3: 0xb98f51a6d9ef1cf288747c5,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf9b090fdb3bf0f5be038a031,\n                limb1: 0xec03d47d7f362f2f46b88120,\n                limb2: 0xcf4ea7dfdbf684e0c9c3c73,\n                limb3: 0x11dd63055f71654adf72fdf4,\n            },\n            r0a1: u384 {\n                limb0: 0x9eb8ba348aa55966b2360dbb,\n                limb1: 0x48dd21f65324b91c93beb3f,\n                limb2: 0x79f6c38f8f7656836cb1317d,\n                limb3: 0x108bdc14fca7e6d3304b3f3b,\n            },\n            r1a0: u384 {\n                limb0: 0xbf74876b9993b6ea79d756e1,\n                limb1: 0xd5e5d391946b6572594a23d1,\n                limb2: 0xf16cf2d26319a001b024184f,\n                limb3: 0xe47f5f42a8c539bf4c4aabc,\n            },\n            r1a1: u384 {\n                limb0: 0xd16c2d990821fee62aea0c7,\n                limb1: 0x9fcd17773a83125f41a6e06e,\n                limb2: 0x97ed32a632508ccadf843b41,\n                limb3: 0xb98f51a6d9ef1cf288747c5,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc04588c9f09fa499106bc8c9,\n                limb1: 0x7a64ff03080c6dd7d7e9eac2,\n                limb2: 0xf4f302730238d347b951a1f3,\n                limb3: 0xbc95c23d2aa850d9637039c,\n            },\n            r0a1: u384 {\n                limb0: 0x982410511881122d237bcf90,\n                limb1: 0x69908a3359202333b8494da3,\n                limb2: 0xd8845b29dfc85657a12e1e6b,\n                limb3: 0x861225fbc10126c68b47fbb,\n            },\n            r1a0: u384 {\n                limb0: 0x307f66feb496a692288ee79c,\n                limb1: 0xea2a865ce7b1a83eb71f516e,\n                limb2: 0x3acfdeb605537b1db464d091,\n                limb3: 0x199bcae152e692669ca36f70,\n            },\n            r1a1: u384 {\n                limb0: 0x67ed8bd9d8b3671bc52dd01a,\n                limb1: 0xa128cb4f4b3fb9f78826fa5c,\n                limb2: 0xdc60b2aeb8989c43359f9ee4,\n                limb3: 0x154183d7ad332d63192fd716,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4c1b7c692bcb90fc6da4682a,\n                limb1: 0xdee0840ffe02e6822d2fbc52,\n                limb2: 0x76f9d61c6685c1019409e2e6,\n                limb3: 0x131589c0f041ca383a010a65,\n            },\n            r0a1: u384 {\n                limb0: 0x5f44efbb5a56642b645b251d,\n                limb1: 0xcc0b6a435e33cf7e66f796ef,\n                limb2: 0x2afead4ba783ddd084a2de2,\n                limb3: 0x14fb18cfb114fe90def3b975,\n            },\n            r1a0: u384 {\n                limb0: 0x6738569610d2c81b6648b199,\n                limb1: 0x3d70fbe299588075a3c0cd65,\n                limb2: 0x9fb99753b8fe3603ef293640,\n                limb3: 0xb0c1cb2bfa9049055dc042a,\n            },\n            r1a1: u384 {\n                limb0: 0xcf4196c9021ca7f093cfb891,\n                limb1: 0xdc602f37532b7f244f265bb4,\n                limb2: 0x2eda24acdd8ac91dba31011a,\n                limb3: 0x831f465b19f5e211770a330,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc04588c9f09fa499106bc8c9,\n                limb1: 0x7a64ff03080c6dd7d7e9eac2,\n                limb2: 0xf4f302730238d347b951a1f3,\n                limb3: 0xbc95c23d2aa850d9637039c,\n            },\n            r0a1: u384 {\n                limb0: 0x982410511881122d237bcf90,\n                limb1: 0x69908a3359202333b8494da3,\n                limb2: 0xd8845b29dfc85657a12e1e6b,\n                limb3: 0x861225fbc10126c68b47fbb,\n            },\n            r1a0: u384 {\n                limb0: 0x307f66feb496a692288ee79c,\n                limb1: 0xea2a865ce7b1a83eb71f516e,\n                limb2: 0x3acfdeb605537b1db464d091,\n                limb3: 0x199bcae152e692669ca36f70,\n            },\n            r1a1: u384 {\n                limb0: 0x67ed8bd9d8b3671bc52dd01a,\n                limb1: 0xa128cb4f4b3fb9f78826fa5c,\n                limb2: 0xdc60b2aeb8989c43359f9ee4,\n                limb3: 0x154183d7ad332d63192fd716,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4c1b7c692bcb90fc6da4682a,\n                limb1: 0xdee0840ffe02e6822d2fbc52,\n                limb2: 0x76f9d61c6685c1019409e2e6,\n                limb3: 0x131589c0f041ca383a010a65,\n            },\n            r0a1: u384 {\n                limb0: 0x5f44efbb5a56642b645b251d,\n                limb1: 0xcc0b6a435e33cf7e66f796ef,\n                limb2: 0x2afead4ba783ddd084a2de2,\n                limb3: 0x14fb18cfb114fe90def3b975,\n            },\n            r1a0: u384 {\n                limb0: 0x6738569610d2c81b6648b199,\n                limb1: 0x3d70fbe299588075a3c0cd65,\n                limb2: 0x9fb99753b8fe3603ef293640,\n                limb3: 0xb0c1cb2bfa9049055dc042a,\n            },\n            r1a1: u384 {\n                limb0: 0xcf4196c9021ca7f093cfb891,\n                limb1: 0xdc602f37532b7f244f265bb4,\n                limb2: 0x2eda24acdd8ac91dba31011a,\n                limb3: 0x831f465b19f5e211770a330,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xbead4997832000eec2d23426,\n                limb1: 0x70326bda198a624d79fe5b6e,\n                limb2: 0x34320ab5d9d57a16f9b3335d,\n                limb3: 0x15ed7fcb0bbd153b17bd9ab7,\n            },\n            r0a1: u384 {\n                limb0: 0xeef082656c66bb5b7891e0fa,\n                limb1: 0x5c3a8513f52f57cb1b0c7958,\n                limb2: 0xcd1545fd6d3fca90cca7ddbf,\n                limb3: 0x14a5d26055e3895cc2078189,\n            },\n            r1a0: u384 {\n                limb0: 0x51fd450f49e14cf29994d0d8,\n                limb1: 0x352df17adf32a543695add5b,\n                limb2: 0x620770f7a8734b83419a0015,\n                limb3: 0x3bed8150b4306f815c54ae0,\n            },\n            r1a1: u384 {\n                limb0: 0xdcda7311d4becff3df733d35,\n                limb1: 0x6d1b5d403a8a86fa9c0ad26b,\n                limb2: 0x41249656cda2d1314833048c,\n                limb3: 0x18fa645f04346cb55df845ec,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xbead4997832000eec2d23426,\n                limb1: 0x70326bda198a624d79fe5b6e,\n                limb2: 0x34320ab5d9d57a16f9b3335d,\n                limb3: 0x15ed7fcb0bbd153b17bd9ab7,\n            },\n            r0a1: u384 {\n                limb0: 0xeef082656c66bb5b7891e0fa,\n                limb1: 0x5c3a8513f52f57cb1b0c7958,\n                limb2: 0xcd1545fd6d3fca90cca7ddbf,\n                limb3: 0x14a5d26055e3895cc2078189,\n            },\n            r1a0: u384 {\n                limb0: 0x51fd450f49e14cf29994d0d8,\n                limb1: 0x352df17adf32a543695add5b,\n                limb2: 0x620770f7a8734b83419a0015,\n                limb3: 0x3bed8150b4306f815c54ae0,\n            },\n            r1a1: u384 {\n                limb0: 0xdcda7311d4becff3df733d35,\n                limb1: 0x6d1b5d403a8a86fa9c0ad26b,\n                limb2: 0x41249656cda2d1314833048c,\n                limb3: 0x18fa645f04346cb55df845ec,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd9186b9c733a20289999898e,\n                limb1: 0x6de39966328adffa7073a300,\n                limb2: 0xf15f1d47e489cb0211ae9365,\n                limb3: 0x130c5531b0d8c306969ed394,\n            },\n            r0a1: u384 {\n                limb0: 0xdb40370c9fc08d2498113f0e,\n                limb1: 0x52a13a99df87505995085459,\n                limb2: 0xef9d808d7ee6f27a05e1b801,\n                limb3: 0x50452f33ca7e399a6020469,\n            },\n            r1a0: u384 {\n                limb0: 0x36def0c15c3f8e182c9ea44d,\n                limb1: 0x326195297234c6d7a93109a7,\n                limb2: 0x87a1563a69011deff0488ae7,\n                limb3: 0x132a2fc3be8766a1177e52aa,\n            },\n            r1a1: u384 {\n                limb0: 0x62378fa1506521802106b7e5,\n                limb1: 0xd8cc0cff92a519c933c28a36,\n                limb2: 0xa1102e8ae53eaf25f786453b,\n                limb3: 0x9a64df029f7f27d39d0dc0e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd9186b9c733a20289999898e,\n                limb1: 0x6de39966328adffa7073a300,\n                limb2: 0xf15f1d47e489cb0211ae9365,\n                limb3: 0x130c5531b0d8c306969ed394,\n            },\n            r0a1: u384 {\n                limb0: 0xdb40370c9fc08d2498113f0e,\n                limb1: 0x52a13a99df87505995085459,\n                limb2: 0xef9d808d7ee6f27a05e1b801,\n                limb3: 0x50452f33ca7e399a6020469,\n            },\n            r1a0: u384 {\n                limb0: 0x36def0c15c3f8e182c9ea44d,\n                limb1: 0x326195297234c6d7a93109a7,\n                limb2: 0x87a1563a69011deff0488ae7,\n                limb3: 0x132a2fc3be8766a1177e52aa,\n            },\n            r1a1: u384 {\n                limb0: 0x62378fa1506521802106b7e5,\n                limb1: 0xd8cc0cff92a519c933c28a36,\n                limb2: 0xa1102e8ae53eaf25f786453b,\n                limb3: 0x9a64df029f7f27d39d0dc0e,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x25ea37848e0ac8549a3cfea4,\n                limb1: 0x4769da5b3fdb93516843dcc4,\n                limb2: 0x25c2fee69d51e108950ee66c,\n                limb3: 0xcbe02237fb28faee0f0f322,\n            },\n            r0a1: u384 {\n                limb0: 0xeb04a575e069162f1fbffeac,\n                limb1: 0x70a494b054c8efcb93da1757,\n                limb2: 0x47f9c06eaaca8c969afabd71,\n                limb3: 0x161220a792413bbe47629580,\n            },\n            r1a0: u384 {\n                limb0: 0xdcd325a8ba5cef5390f5d151,\n                limb1: 0xcdc42d134b74aa1a5062ce50,\n                limb2: 0x60be437e1aa4a9878448da68,\n                limb3: 0x3afadaca8a96f634f1a416c,\n            },\n            r1a1: u384 {\n                limb0: 0x2a305361b67f6592fa2a5b23,\n                limb1: 0x60950369afb1c2180ac6372,\n                limb2: 0x18abd84df73559c2ec121d5d,\n                limb3: 0x30f5ef160b1fd967f8015ab,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x25ea37848e0ac8549a3cfea4,\n                limb1: 0x4769da5b3fdb93516843dcc4,\n                limb2: 0x25c2fee69d51e108950ee66c,\n                limb3: 0xcbe02237fb28faee0f0f322,\n            },\n            r0a1: u384 {\n                limb0: 0xeb04a575e069162f1fbffeac,\n                limb1: 0x70a494b054c8efcb93da1757,\n                limb2: 0x47f9c06eaaca8c969afabd71,\n                limb3: 0x161220a792413bbe47629580,\n            },\n            r1a0: u384 {\n                limb0: 0xdcd325a8ba5cef5390f5d151,\n                limb1: 0xcdc42d134b74aa1a5062ce50,\n                limb2: 0x60be437e1aa4a9878448da68,\n                limb3: 0x3afadaca8a96f634f1a416c,\n            },\n            r1a1: u384 {\n                limb0: 0x2a305361b67f6592fa2a5b23,\n                limb1: 0x60950369afb1c2180ac6372,\n                limb2: 0x18abd84df73559c2ec121d5d,\n                limb3: 0x30f5ef160b1fd967f8015ab,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x57e9ad17c997b15ffbad6d82,\n                limb1: 0xb58a8d3786323d96d83553ef,\n                limb2: 0x7ebd9eee07a5e594ba52aa95,\n                limb3: 0x111e440bd97eda09284f64eb,\n            },\n            r0a1: u384 {\n                limb0: 0xd3b88ae51c3481402eba34a1,\n                limb1: 0x2d45a1eeba9f7b3b15c0f834,\n                limb2: 0xf01e42935934d35517d5917f,\n                limb3: 0x17873198e39dea6b3fe5129f,\n            },\n            r1a0: u384 {\n                limb0: 0x2f6c420e2c5b378a9412c0d0,\n                limb1: 0x955d38483a2f278270b22268,\n                limb2: 0x51a730b71b201f7aae89b10b,\n                limb3: 0x1085c28c787add8dcd06245a,\n            },\n            r1a1: u384 {\n                limb0: 0x6e0644b1126aa50e5b4773e6,\n                limb1: 0xdcbb3ddbc7340820e35af7a2,\n                limb2: 0x92c56f71378f46d9681bc464,\n                limb3: 0x14e782a8eeff9d9dd580cc4,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x57e9ad17c997b15ffbad6d82,\n                limb1: 0xb58a8d3786323d96d83553ef,\n                limb2: 0x7ebd9eee07a5e594ba52aa95,\n                limb3: 0x111e440bd97eda09284f64eb,\n            },\n            r0a1: u384 {\n                limb0: 0xd3b88ae51c3481402eba34a1,\n                limb1: 0x2d45a1eeba9f7b3b15c0f834,\n                limb2: 0xf01e42935934d35517d5917f,\n                limb3: 0x17873198e39dea6b3fe5129f,\n            },\n            r1a0: u384 {\n                limb0: 0x2f6c420e2c5b378a9412c0d0,\n                limb1: 0x955d38483a2f278270b22268,\n                limb2: 0x51a730b71b201f7aae89b10b,\n                limb3: 0x1085c28c787add8dcd06245a,\n            },\n            r1a1: u384 {\n                limb0: 0x6e0644b1126aa50e5b4773e6,\n                limb1: 0xdcbb3ddbc7340820e35af7a2,\n                limb2: 0x92c56f71378f46d9681bc464,\n                limb3: 0x14e782a8eeff9d9dd580cc4,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xa17319d2ed4a91226b6d3089,\n                limb1: 0x1d8f224ab570fde86c7f2048,\n                limb2: 0xd622960850d94ec99de711af,\n                limb3: 0x124395d2fa862d11c431fefa,\n            },\n            r0a1: u384 {\n                limb0: 0x6ddb45f997e48b97942d9c3f,\n                limb1: 0x3d8b7f429593a772eb589e3a,\n                limb2: 0xbd411a9a2e3bafe120332263,\n                limb3: 0x4ae24dd579f310ebebb670a,\n            },\n            r1a0: u384 {\n                limb0: 0x700c5258e540544c8801a1d2,\n                limb1: 0x40032ac207f46794aacd4702,\n                limb2: 0x664658ab49940041c676ae29,\n                limb3: 0xbba2393a3187f3acdec0862,\n            },\n            r1a1: u384 {\n                limb0: 0x1fb806ee192d153b8c48f37f,\n                limb1: 0xd8d017e6d2d0a8aade0c5570,\n                limb2: 0x8e857d4ca13adcefbf7a644c,\n                limb3: 0x5eeb6818a540c068177383c,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xa17319d2ed4a91226b6d3089,\n                limb1: 0x1d8f224ab570fde86c7f2048,\n                limb2: 0xd622960850d94ec99de711af,\n                limb3: 0x124395d2fa862d11c431fefa,\n            },\n            r0a1: u384 {\n                limb0: 0x6ddb45f997e48b97942d9c3f,\n                limb1: 0x3d8b7f429593a772eb589e3a,\n                limb2: 0xbd411a9a2e3bafe120332263,\n                limb3: 0x4ae24dd579f310ebebb670a,\n            },\n            r1a0: u384 {\n                limb0: 0x700c5258e540544c8801a1d2,\n                limb1: 0x40032ac207f46794aacd4702,\n                limb2: 0x664658ab49940041c676ae29,\n                limb3: 0xbba2393a3187f3acdec0862,\n            },\n            r1a1: u384 {\n                limb0: 0x1fb806ee192d153b8c48f37f,\n                limb1: 0xd8d017e6d2d0a8aade0c5570,\n                limb2: 0x8e857d4ca13adcefbf7a644c,\n                limb3: 0x5eeb6818a540c068177383c,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7ad0e4fa558ef8b11384085e,\n                limb1: 0x4329afaeac994168fe5e0cd7,\n                limb2: 0xb34e8702ef6b72f9a6008fa,\n                limb3: 0x99d918594ec79185a3f5298,\n            },\n            r0a1: u384 {\n                limb0: 0xbf74c3bbc5fa4f115e66c539,\n                limb1: 0x7da649aab4c450a071647d9d,\n                limb2: 0x3de1249ed9c917ba907ae87e,\n                limb3: 0x17fb63a54ba4b99d958c47f5,\n            },\n            r1a0: u384 {\n                limb0: 0x29a111bd2ddf9b91308af11b,\n                limb1: 0xc6f5fc9404a96ca03bae4905,\n                limb2: 0x4cf974b0c052477bbda2b847,\n                limb3: 0x1825483020fd8780c86b1015,\n            },\n            r1a1: u384 {\n                limb0: 0xbc7ecc69f7efad3e70b125e4,\n                limb1: 0x91fecbb081beb006bf85d061,\n                limb2: 0xc0eb86316968cc75b5960f2b,\n                limb3: 0xe38ff44ac8be45215c49ab0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7ad0e4fa558ef8b11384085e,\n                limb1: 0x4329afaeac994168fe5e0cd7,\n                limb2: 0xb34e8702ef6b72f9a6008fa,\n                limb3: 0x99d918594ec79185a3f5298,\n            },\n            r0a1: u384 {\n                limb0: 0xbf74c3bbc5fa4f115e66c539,\n                limb1: 0x7da649aab4c450a071647d9d,\n                limb2: 0x3de1249ed9c917ba907ae87e,\n                limb3: 0x17fb63a54ba4b99d958c47f5,\n            },\n            r1a0: u384 {\n                limb0: 0x29a111bd2ddf9b91308af11b,\n                limb1: 0xc6f5fc9404a96ca03bae4905,\n                limb2: 0x4cf974b0c052477bbda2b847,\n                limb3: 0x1825483020fd8780c86b1015,\n            },\n            r1a1: u384 {\n                limb0: 0xbc7ecc69f7efad3e70b125e4,\n                limb1: 0x91fecbb081beb006bf85d061,\n                limb2: 0xc0eb86316968cc75b5960f2b,\n                limb3: 0xe38ff44ac8be45215c49ab0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xceb6d3ab08b373dc22ba995f,\n                limb1: 0x43d108be275c4c77ddb43e08,\n                limb2: 0xe516383196fb48b7d3febb1d,\n                limb3: 0xe4c3290d4c9ba0a816475d3,\n            },\n            r0a1: u384 {\n                limb0: 0xd1fc69b97fb0e00d2934ae95,\n                limb1: 0xfc2f8a30bfd324e8dba3d887,\n                limb2: 0x160584b561794cc64271dc15,\n                limb3: 0x1009e338dbc724df50993a65,\n            },\n            r1a0: u384 {\n                limb0: 0x475f046f42faf48c326b4bf1,\n                limb1: 0xb713074989c0643fceb94c0f,\n                limb2: 0xe26638cb83c9c26a954a45d9,\n                limb3: 0x1754c6aae904e4e80cd79f52,\n            },\n            r1a1: u384 {\n                limb0: 0xd7db51e3579f8a30ee0b70aa,\n                limb1: 0x25e0748f0cfe2d0aa5c0c8a0,\n                limb2: 0x6d0c3361c1683f7dc395ddf0,\n                limb3: 0x1348bfc584e6abb75e34a3a6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xceb6d3ab08b373dc22ba995f,\n                limb1: 0x43d108be275c4c77ddb43e08,\n                limb2: 0xe516383196fb48b7d3febb1d,\n                limb3: 0xe4c3290d4c9ba0a816475d3,\n            },\n            r0a1: u384 {\n                limb0: 0xd1fc69b97fb0e00d2934ae95,\n                limb1: 0xfc2f8a30bfd324e8dba3d887,\n                limb2: 0x160584b561794cc64271dc15,\n                limb3: 0x1009e338dbc724df50993a65,\n            },\n            r1a0: u384 {\n                limb0: 0x475f046f42faf48c326b4bf1,\n                limb1: 0xb713074989c0643fceb94c0f,\n                limb2: 0xe26638cb83c9c26a954a45d9,\n                limb3: 0x1754c6aae904e4e80cd79f52,\n            },\n            r1a1: u384 {\n                limb0: 0xd7db51e3579f8a30ee0b70aa,\n                limb1: 0x25e0748f0cfe2d0aa5c0c8a0,\n                limb2: 0x6d0c3361c1683f7dc395ddf0,\n                limb3: 0x1348bfc584e6abb75e34a3a6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xb50d817096bd5c150cd6a82b,\n                limb1: 0x6bcc034040210fda6c8b4cff,\n                limb2: 0x9be137b6cb13d4ebe5a30e0e,\n                limb3: 0x84b37e667ea19363ed3ffd0,\n            },\n            r0a1: u384 {\n                limb0: 0x11c9654f31306495f8e6bc94,\n                limb1: 0xba6a2171d247ebe2b0f7f696,\n                limb2: 0xa6d4bf1963b95bcfb7c93d93,\n                limb3: 0x15ac996599cf39209a84ea5a,\n            },\n            r1a0: u384 {\n                limb0: 0x8d27e960a12b8ec9372cca66,\n                limb1: 0xaaba63010526c24d3c2840b7,\n                limb2: 0xaa25dc5b42e3ed60c93463ce,\n                limb3: 0x7fe44d4a1e4791800b1e0fa,\n            },\n            r1a1: u384 {\n                limb0: 0xfc3e99620792c110703978d5,\n                limb1: 0xf4db1062eef1c755a07fbde6,\n                limb2: 0xf570179ead4983a489316019,\n                limb3: 0x46aaa91f573494bb66d079,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xb50d817096bd5c150cd6a82b,\n                limb1: 0x6bcc034040210fda6c8b4cff,\n                limb2: 0x9be137b6cb13d4ebe5a30e0e,\n                limb3: 0x84b37e667ea19363ed3ffd0,\n            },\n            r0a1: u384 {\n                limb0: 0x11c9654f31306495f8e6bc94,\n                limb1: 0xba6a2171d247ebe2b0f7f696,\n                limb2: 0xa6d4bf1963b95bcfb7c93d93,\n                limb3: 0x15ac996599cf39209a84ea5a,\n            },\n            r1a0: u384 {\n                limb0: 0x8d27e960a12b8ec9372cca66,\n                limb1: 0xaaba63010526c24d3c2840b7,\n                limb2: 0xaa25dc5b42e3ed60c93463ce,\n                limb3: 0x7fe44d4a1e4791800b1e0fa,\n            },\n            r1a1: u384 {\n                limb0: 0xfc3e99620792c110703978d5,\n                limb1: 0xf4db1062eef1c755a07fbde6,\n                limb2: 0xf570179ead4983a489316019,\n                limb3: 0x46aaa91f573494bb66d079,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe9f685c65bd9792c8adee32,\n                limb1: 0xecc42b0c513df20e80dfcb0c,\n                limb2: 0xf97767f63bec29912643b18c,\n                limb3: 0x658e5d9dd13b65d9d50e485,\n            },\n            r0a1: u384 {\n                limb0: 0xd80080e976138f1d433aee10,\n                limb1: 0xd60db98a0a46712bf28de887,\n                limb2: 0x9ec4a90a9b07bdfb9a8f9cac,\n                limb3: 0x1269ede044c4c6361453dbd4,\n            },\n            r1a0: u384 {\n                limb0: 0x33266d196827c62d12d911f5,\n                limb1: 0x3273f6ca8f6ac372356ac475,\n                limb2: 0x3dbd80e6d1898f8e7cefbbd8,\n                limb3: 0x17b88f8e9c438e00a591eb3,\n            },\n            r1a1: u384 {\n                limb0: 0x6bf73b94433c19c358c705da,\n                limb1: 0xa52a6f1848089194d82c9450,\n                limb2: 0x41a0fcd2736929e504cab889,\n                limb3: 0xe660555872f31d5085b6c20,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe9f685c65bd9792c8adee32,\n                limb1: 0xecc42b0c513df20e80dfcb0c,\n                limb2: 0xf97767f63bec29912643b18c,\n                limb3: 0x658e5d9dd13b65d9d50e485,\n            },\n            r0a1: u384 {\n                limb0: 0xd80080e976138f1d433aee10,\n                limb1: 0xd60db98a0a46712bf28de887,\n                limb2: 0x9ec4a90a9b07bdfb9a8f9cac,\n                limb3: 0x1269ede044c4c6361453dbd4,\n            },\n            r1a0: u384 {\n                limb0: 0x33266d196827c62d12d911f5,\n                limb1: 0x3273f6ca8f6ac372356ac475,\n                limb2: 0x3dbd80e6d1898f8e7cefbbd8,\n                limb3: 0x17b88f8e9c438e00a591eb3,\n            },\n            r1a1: u384 {\n                limb0: 0x6bf73b94433c19c358c705da,\n                limb1: 0xa52a6f1848089194d82c9450,\n                limb2: 0x41a0fcd2736929e504cab889,\n                limb3: 0xe660555872f31d5085b6c20,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xade8d05561fb99ceb1b398dc,\n                limb1: 0x9e365afb0af81213414cfaf7,\n                limb2: 0x7f77a69390559e530043141a,\n                limb3: 0xc209c5c88e6c6f2b043351b,\n            },\n            r0a1: u384 {\n                limb0: 0x7565700ffe842d640fc1ead7,\n                limb1: 0xd7a72ca686ca6e365e66674f,\n                limb2: 0x74d23c8889d674ed594cdeba,\n                limb3: 0x3b785972f83859804ba7b9f,\n            },\n            r1a0: u384 {\n                limb0: 0x6762e6916c0e2c81f7508214,\n                limb1: 0xd0d08610571c6228f47f1451,\n                limb2: 0x81ec1b03edd35c515bf8d1cd,\n                limb3: 0x41a7141598d94d8d557ea13,\n            },\n            r1a1: u384 {\n                limb0: 0xc76846d9fc76bba55279cd97,\n                limb1: 0xf475886e2b2e07119618d34c,\n                limb2: 0x7cbf7dfaa9bdf3f6b1b6add8,\n                limb3: 0xe697b86b1a1a256ea1fc7bd,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xade8d05561fb99ceb1b398dc,\n                limb1: 0x9e365afb0af81213414cfaf7,\n                limb2: 0x7f77a69390559e530043141a,\n                limb3: 0xc209c5c88e6c6f2b043351b,\n            },\n            r0a1: u384 {\n                limb0: 0x7565700ffe842d640fc1ead7,\n                limb1: 0xd7a72ca686ca6e365e66674f,\n                limb2: 0x74d23c8889d674ed594cdeba,\n                limb3: 0x3b785972f83859804ba7b9f,\n            },\n            r1a0: u384 {\n                limb0: 0x6762e6916c0e2c81f7508214,\n                limb1: 0xd0d08610571c6228f47f1451,\n                limb2: 0x81ec1b03edd35c515bf8d1cd,\n                limb3: 0x41a7141598d94d8d557ea13,\n            },\n            r1a1: u384 {\n                limb0: 0xc76846d9fc76bba55279cd97,\n                limb1: 0xf475886e2b2e07119618d34c,\n                limb2: 0x7cbf7dfaa9bdf3f6b1b6add8,\n                limb3: 0xe697b86b1a1a256ea1fc7bd,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3e2bda3bb882029aa8c68c07,\n                limb1: 0xa0a7e087ad38e14e08cef273,\n                limb2: 0x5808f126af4a19c3133f879a,\n                limb3: 0x19bd29ab402e8d268fcb24d2,\n            },\n            r0a1: u384 {\n                limb0: 0xcd0ea0d4ee5a1532a9730806,\n                limb1: 0x7845796a605b0f7861d95340,\n                limb2: 0x89ef8948802539a10a58b812,\n                limb3: 0x1053849b92ac68c309e109c1,\n            },\n            r1a0: u384 {\n                limb0: 0xa3815eaa263de8563f27a5a9,\n                limb1: 0xde94b962e70316398ed6dca9,\n                limb2: 0xa87f14f61a4ac2b9e62df692,\n                limb3: 0x252bb6ddefddda543bb5ffd,\n            },\n            r1a1: u384 {\n                limb0: 0x60d60e0da595356015916692,\n                limb1: 0x4b828f50f32b12b44b33e235,\n                limb2: 0x769ed0c50fe7fa25ffdc245a,\n                limb3: 0x6e387748806b8214f1b79e3,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3e2bda3bb882029aa8c68c07,\n                limb1: 0xa0a7e087ad38e14e08cef273,\n                limb2: 0x5808f126af4a19c3133f879a,\n                limb3: 0x19bd29ab402e8d268fcb24d2,\n            },\n            r0a1: u384 {\n                limb0: 0xcd0ea0d4ee5a1532a9730806,\n                limb1: 0x7845796a605b0f7861d95340,\n                limb2: 0x89ef8948802539a10a58b812,\n                limb3: 0x1053849b92ac68c309e109c1,\n            },\n            r1a0: u384 {\n                limb0: 0xa3815eaa263de8563f27a5a9,\n                limb1: 0xde94b962e70316398ed6dca9,\n                limb2: 0xa87f14f61a4ac2b9e62df692,\n                limb3: 0x252bb6ddefddda543bb5ffd,\n            },\n            r1a1: u384 {\n                limb0: 0x60d60e0da595356015916692,\n                limb1: 0x4b828f50f32b12b44b33e235,\n                limb2: 0x769ed0c50fe7fa25ffdc245a,\n                limb3: 0x6e387748806b8214f1b79e3,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xfd057da0cb173025ce2f998a,\n                limb1: 0x9e4d6149a2fc05606e592731,\n                limb2: 0x8b1847b9941797009134cfa1,\n                limb3: 0x18da833da14d6db1d7986937,\n            },\n            r0a1: u384 {\n                limb0: 0x5eb7e3f27b2ab2f1c56f91cb,\n                limb1: 0x3b6645812dc68a27333141f2,\n                limb2: 0xfb06e0ba9a36c40cbd2837b9,\n                limb3: 0xb998d9cd4e1fdb1c7673a4d,\n            },\n            r1a0: u384 {\n                limb0: 0xea6b77d2854c6efa8751c13,\n                limb1: 0x2a8bc25dab4cbfb0083ad510,\n                limb2: 0xc394a4e0f3acd2aa2f2e5029,\n                limb3: 0x4737c2c084ac35ec59d139d,\n            },\n            r1a1: u384 {\n                limb0: 0xaff0146957bcf99d6005201c,\n                limb1: 0x5cc5e1fb8259ea6e5ffe87dc,\n                limb2: 0xd9372a44e3423a7331ac2435,\n                limb3: 0x15d0e555bcdc0d8d48cad595,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xfd057da0cb173025ce2f998a,\n                limb1: 0x9e4d6149a2fc05606e592731,\n                limb2: 0x8b1847b9941797009134cfa1,\n                limb3: 0x18da833da14d6db1d7986937,\n            },\n            r0a1: u384 {\n                limb0: 0x5eb7e3f27b2ab2f1c56f91cb,\n                limb1: 0x3b6645812dc68a27333141f2,\n                limb2: 0xfb06e0ba9a36c40cbd2837b9,\n                limb3: 0xb998d9cd4e1fdb1c7673a4d,\n            },\n            r1a0: u384 {\n                limb0: 0xea6b77d2854c6efa8751c13,\n                limb1: 0x2a8bc25dab4cbfb0083ad510,\n                limb2: 0xc394a4e0f3acd2aa2f2e5029,\n                limb3: 0x4737c2c084ac35ec59d139d,\n            },\n            r1a1: u384 {\n                limb0: 0xaff0146957bcf99d6005201c,\n                limb1: 0x5cc5e1fb8259ea6e5ffe87dc,\n                limb2: 0xd9372a44e3423a7331ac2435,\n                limb3: 0x15d0e555bcdc0d8d48cad595,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x828425fca9d6cd76f222c299,\n                limb1: 0x2b0db667ad7776a32372e139,\n                limb2: 0x7ff7fb851413603a6f0d2fef,\n                limb3: 0x166c41ed7430420750164f1a,\n            },\n            r0a1: u384 {\n                limb0: 0xe3788c1577b092a1a89686b2,\n                limb1: 0x5fdf8356c68add3572e76a25,\n                limb2: 0x37115b7994287a9b345dd0ed,\n                limb3: 0xffcc588c7d1b96c86dc3aaf,\n            },\n            r1a0: u384 {\n                limb0: 0xbc7e65f493e052b119a9c84f,\n                limb1: 0x11aa017bcbfc878c46a18c52,\n                limb2: 0xa65af0bdbf93483836c11b4d,\n                limb3: 0xd2f8087436fff404d7e6bc,\n            },\n            r1a1: u384 {\n                limb0: 0xc171d5e78129decdde583c1f,\n                limb1: 0x300b7521c43311b00cb16b80,\n                limb2: 0xbccbe679495d33a3fcb98e54,\n                limb3: 0x13fe5206e449d407a961a9d0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x828425fca9d6cd76f222c299,\n                limb1: 0x2b0db667ad7776a32372e139,\n                limb2: 0x7ff7fb851413603a6f0d2fef,\n                limb3: 0x166c41ed7430420750164f1a,\n            },\n            r0a1: u384 {\n                limb0: 0xe3788c1577b092a1a89686b2,\n                limb1: 0x5fdf8356c68add3572e76a25,\n                limb2: 0x37115b7994287a9b345dd0ed,\n                limb3: 0xffcc588c7d1b96c86dc3aaf,\n            },\n            r1a0: u384 {\n                limb0: 0xbc7e65f493e052b119a9c84f,\n                limb1: 0x11aa017bcbfc878c46a18c52,\n                limb2: 0xa65af0bdbf93483836c11b4d,\n                limb3: 0xd2f8087436fff404d7e6bc,\n            },\n            r1a1: u384 {\n                limb0: 0xc171d5e78129decdde583c1f,\n                limb1: 0x300b7521c43311b00cb16b80,\n                limb2: 0xbccbe679495d33a3fcb98e54,\n                limb3: 0x13fe5206e449d407a961a9d0,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe075c3e46497811318f1aafc,\n                limb1: 0xc9ee6637a1f378458c67a6a2,\n                limb2: 0x584f8f6bff2beb100c77bbaa,\n                limb3: 0xcabbaeccf33edbba456b3aa,\n            },\n            r0a1: u384 {\n                limb0: 0xf15b790c2edf5b3c99fe4876,\n                limb1: 0x875fb1351df4569cb81efb59,\n                limb2: 0xfacb5e54e4995b34f5ea8a9d,\n                limb3: 0x498c1832574b066e7f66b65,\n            },\n            r1a0: u384 {\n                limb0: 0xd7010c92fd3eb8bf086d7a51,\n                limb1: 0x43899406a876ca11b6a17538,\n                limb2: 0x3c5f51da0ddee80dbc5b343b,\n                limb3: 0xf44ad67280e30f4d6191d23,\n            },\n            r1a1: u384 {\n                limb0: 0xb622b3289749d00b16b02f9d,\n                limb1: 0xbc460741ba8c03787b256be9,\n                limb2: 0x53b5ac101f741bc6ba3a412f,\n                limb3: 0x14610dd7fe56661dc12e7017,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe075c3e46497811318f1aafc,\n                limb1: 0xc9ee6637a1f378458c67a6a2,\n                limb2: 0x584f8f6bff2beb100c77bbaa,\n                limb3: 0xcabbaeccf33edbba456b3aa,\n            },\n            r0a1: u384 {\n                limb0: 0xf15b790c2edf5b3c99fe4876,\n                limb1: 0x875fb1351df4569cb81efb59,\n                limb2: 0xfacb5e54e4995b34f5ea8a9d,\n                limb3: 0x498c1832574b066e7f66b65,\n            },\n            r1a0: u384 {\n                limb0: 0xd7010c92fd3eb8bf086d7a51,\n                limb1: 0x43899406a876ca11b6a17538,\n                limb2: 0x3c5f51da0ddee80dbc5b343b,\n                limb3: 0xf44ad67280e30f4d6191d23,\n            },\n            r1a1: u384 {\n                limb0: 0xb622b3289749d00b16b02f9d,\n                limb1: 0xbc460741ba8c03787b256be9,\n                limb2: 0x53b5ac101f741bc6ba3a412f,\n                limb3: 0x14610dd7fe56661dc12e7017,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3289f694418a3355784156cd,\n                limb1: 0x9e5388d5b5d0a75275470869,\n                limb2: 0x8a84b134b920014341616e0c,\n                limb3: 0x17e7c92f7ff289ec1b0eb4a4,\n            },\n            r0a1: u384 {\n                limb0: 0xfb2bdc0a4813315c10592f30,\n                limb1: 0xfe0a10e2cefd8e957736628b,\n                limb2: 0x968cc921ed9abec9269b5786,\n                limb3: 0xb36f790715d65f359921941,\n            },\n            r1a0: u384 {\n                limb0: 0xf9994278889345a5e3e525b,\n                limb1: 0x8279eab2379884433bc2637e,\n                limb2: 0x73d76c8ecc39d1f8cc458824,\n                limb3: 0xd3fe945a75801d2acc3134a,\n            },\n            r1a1: u384 {\n                limb0: 0x55d20208b88794ff0fe6ff65,\n                limb1: 0xc346b74aab2344fca9ff5c62,\n                limb2: 0x9dde8f58210d2b715eb4384,\n                limb3: 0x6ab0c2780fd0aadedb1ffa6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3289f694418a3355784156cd,\n                limb1: 0x9e5388d5b5d0a75275470869,\n                limb2: 0x8a84b134b920014341616e0c,\n                limb3: 0x17e7c92f7ff289ec1b0eb4a4,\n            },\n            r0a1: u384 {\n                limb0: 0xfb2bdc0a4813315c10592f30,\n                limb1: 0xfe0a10e2cefd8e957736628b,\n                limb2: 0x968cc921ed9abec9269b5786,\n                limb3: 0xb36f790715d65f359921941,\n            },\n            r1a0: u384 {\n                limb0: 0xf9994278889345a5e3e525b,\n                limb1: 0x8279eab2379884433bc2637e,\n                limb2: 0x73d76c8ecc39d1f8cc458824,\n                limb3: 0xd3fe945a75801d2acc3134a,\n            },\n            r1a1: u384 {\n                limb0: 0x55d20208b88794ff0fe6ff65,\n                limb1: 0xc346b74aab2344fca9ff5c62,\n                limb2: 0x9dde8f58210d2b715eb4384,\n                limb3: 0x6ab0c2780fd0aadedb1ffa6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5a3e5e1697e09425b898db66,\n                limb1: 0xbc1396eefa2c96a1be6ba4c4,\n                limb2: 0x94851b8964323d7c8ed145f7,\n                limb3: 0x89a8fd1fd59927115c38ef8,\n            },\n            r0a1: u384 {\n                limb0: 0xa410a6b40708300c5ff93622,\n                limb1: 0x9f8390f98fd525a678892dda,\n                limb2: 0xa799373de5c454a11e12b305,\n                limb3: 0x101747fa8b1d04dee8f363b0,\n            },\n            r1a0: u384 {\n                limb0: 0xa807f8a5b13ceb81cda82fa8,\n                limb1: 0xb2f165c491d5c47bfe65453,\n                limb2: 0x215cdd59a4776d378aa1dcd3,\n                limb3: 0x19a8a47644e2d5c48fb32261,\n            },\n            r1a1: u384 {\n                limb0: 0xacb3c56efc35cb7292cd16e7,\n                limb1: 0x290fd760f9c8ecd7cecb08dd,\n                limb2: 0x41a779eb8cecbc69db519618,\n                limb3: 0x185772d8ebcc6861748d643b,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5a3e5e1697e09425b898db66,\n                limb1: 0xbc1396eefa2c96a1be6ba4c4,\n                limb2: 0x94851b8964323d7c8ed145f7,\n                limb3: 0x89a8fd1fd59927115c38ef8,\n            },\n            r0a1: u384 {\n                limb0: 0xa410a6b40708300c5ff93622,\n                limb1: 0x9f8390f98fd525a678892dda,\n                limb2: 0xa799373de5c454a11e12b305,\n                limb3: 0x101747fa8b1d04dee8f363b0,\n            },\n            r1a0: u384 {\n                limb0: 0xa807f8a5b13ceb81cda82fa8,\n                limb1: 0xb2f165c491d5c47bfe65453,\n                limb2: 0x215cdd59a4776d378aa1dcd3,\n                limb3: 0x19a8a47644e2d5c48fb32261,\n            },\n            r1a1: u384 {\n                limb0: 0xacb3c56efc35cb7292cd16e7,\n                limb1: 0x290fd760f9c8ecd7cecb08dd,\n                limb2: 0x41a779eb8cecbc69db519618,\n                limb3: 0x185772d8ebcc6861748d643b,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x11845c8f378370c5ea1988eb,\n                limb1: 0x1a26c58a1b5b3e9927e386f7,\n                limb2: 0x1614136e352ccbeb1a708bc6,\n                limb3: 0x14b59d16f3f82c70a6dc9542,\n            },\n            r0a1: u384 {\n                limb0: 0xa6251ffb4e4ec02c6eb099d4,\n                limb1: 0xa1486c797b3c5efa056554a9,\n                limb2: 0x951b07cb2f028ead174faf1d,\n                limb3: 0x16995470027165033faaff45,\n            },\n            r1a0: u384 {\n                limb0: 0x831c44b21a6d609bdeec639d,\n                limb1: 0xe2f69c85767b04a7d61fe433,\n                limb2: 0x9639ab56e254ed60a9ec5dc3,\n                limb3: 0x176c34a0e3901325d8694c42,\n            },\n            r1a1: u384 {\n                limb0: 0xd41f8075420515c9666697e6,\n                limb1: 0xf8df73883c6237c933f15eb5,\n                limb2: 0xb1ed39ecead4669251ce42d2,\n                limb3: 0x1bbe08120ec3b54286df6bc,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x11845c8f378370c5ea1988eb,\n                limb1: 0x1a26c58a1b5b3e9927e386f7,\n                limb2: 0x1614136e352ccbeb1a708bc6,\n                limb3: 0x14b59d16f3f82c70a6dc9542,\n            },\n            r0a1: u384 {\n                limb0: 0xa6251ffb4e4ec02c6eb099d4,\n                limb1: 0xa1486c797b3c5efa056554a9,\n                limb2: 0x951b07cb2f028ead174faf1d,\n                limb3: 0x16995470027165033faaff45,\n            },\n            r1a0: u384 {\n                limb0: 0x831c44b21a6d609bdeec639d,\n                limb1: 0xe2f69c85767b04a7d61fe433,\n                limb2: 0x9639ab56e254ed60a9ec5dc3,\n                limb3: 0x176c34a0e3901325d8694c42,\n            },\n            r1a1: u384 {\n                limb0: 0xd41f8075420515c9666697e6,\n                limb1: 0xf8df73883c6237c933f15eb5,\n                limb2: 0xb1ed39ecead4669251ce42d2,\n                limb3: 0x1bbe08120ec3b54286df6bc,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3b2682846d33d1bb2910ba03,\n                limb1: 0x6a05f306d95cf531380ee7da,\n                limb2: 0x21435eb65c2bd413387d1df3,\n                limb3: 0x1982379e444b697d0a073d6e,\n            },\n            r0a1: u384 {\n                limb0: 0x8bd63863d4cfeee42b281a67,\n                limb1: 0x53c8de84ace44e226eb06d6d,\n                limb2: 0xe55bb6fa2841cb1731cb6a13,\n                limb3: 0x348ea88fa28ae0657275530,\n            },\n            r1a0: u384 {\n                limb0: 0xdc0ab5703b9d7522611edee2,\n                limb1: 0xd6e26d354a07ecb4e30de6a8,\n                limb2: 0xbb971530e7c8c7526b599c64,\n                limb3: 0x12e92020be3b6b2a54440bb3,\n            },\n            r1a1: u384 {\n                limb0: 0x419847bd7c1f542e3a38b0ee,\n                limb1: 0x6d81da9fd456c7699ec5a02d,\n                limb2: 0x7bb02418a48065d4a6fbcdd0,\n                limb3: 0x2158e75b3ad1be8adc4f2fd,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3b2682846d33d1bb2910ba03,\n                limb1: 0x6a05f306d95cf531380ee7da,\n                limb2: 0x21435eb65c2bd413387d1df3,\n                limb3: 0x1982379e444b697d0a073d6e,\n            },\n            r0a1: u384 {\n                limb0: 0x8bd63863d4cfeee42b281a67,\n                limb1: 0x53c8de84ace44e226eb06d6d,\n                limb2: 0xe55bb6fa2841cb1731cb6a13,\n                limb3: 0x348ea88fa28ae0657275530,\n            },\n            r1a0: u384 {\n                limb0: 0xdc0ab5703b9d7522611edee2,\n                limb1: 0xd6e26d354a07ecb4e30de6a8,\n                limb2: 0xbb971530e7c8c7526b599c64,\n                limb3: 0x12e92020be3b6b2a54440bb3,\n            },\n            r1a1: u384 {\n                limb0: 0x419847bd7c1f542e3a38b0ee,\n                limb1: 0x6d81da9fd456c7699ec5a02d,\n                limb2: 0x7bb02418a48065d4a6fbcdd0,\n                limb3: 0x2158e75b3ad1be8adc4f2fd,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x9ed5874a93e2a5c1167bd832,\n                limb1: 0xb42afdb134b0481e8259c82a,\n                limb2: 0xbb060f82ea760a3b744f9fd6,\n                limb3: 0xdaf9adced467ce2101b44a9,\n            },\n            r0a1: u384 {\n                limb0: 0x41f8b3d63ecc95fe95813c68,\n                limb1: 0xc4b8e88e7bab1ed199210b24,\n                limb2: 0x74c13644333ee583f9faa830,\n                limb3: 0x893b33fb2141519964b7dd0,\n            },\n            r1a0: u384 {\n                limb0: 0x748cf4d3df15043e0ae8f99e,\n                limb1: 0x4766d8800a6ffc614d6443ab,\n                limb2: 0x5aee246adbf4dda2ea418cbf,\n                limb3: 0x9bc3664485ae5aecc3971ae,\n            },\n            r1a1: u384 {\n                limb0: 0x5983d25e0767a793c41206ca,\n                limb1: 0xde625e19387d9ffd33198b83,\n                limb2: 0xa98eec8506c321eaaeb033aa,\n                limb3: 0x13fb86041982c5d065bd87e9,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x9ed5874a93e2a5c1167bd832,\n                limb1: 0xb42afdb134b0481e8259c82a,\n                limb2: 0xbb060f82ea760a3b744f9fd6,\n                limb3: 0xdaf9adced467ce2101b44a9,\n            },\n            r0a1: u384 {\n                limb0: 0x41f8b3d63ecc95fe95813c68,\n                limb1: 0xc4b8e88e7bab1ed199210b24,\n                limb2: 0x74c13644333ee583f9faa830,\n                limb3: 0x893b33fb2141519964b7dd0,\n            },\n            r1a0: u384 {\n                limb0: 0x748cf4d3df15043e0ae8f99e,\n                limb1: 0x4766d8800a6ffc614d6443ab,\n                limb2: 0x5aee246adbf4dda2ea418cbf,\n                limb3: 0x9bc3664485ae5aecc3971ae,\n            },\n            r1a1: u384 {\n                limb0: 0x5983d25e0767a793c41206ca,\n                limb1: 0xde625e19387d9ffd33198b83,\n                limb2: 0xa98eec8506c321eaaeb033aa,\n                limb3: 0x13fb86041982c5d065bd87e9,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf43059462494151b4ab2087e,\n                limb1: 0x5cd28f7ec6fd9d6b4b086f39,\n                limb2: 0x30dd2311b5bafb9250d116c1,\n                limb3: 0xfc6edf74dff631a32fca3fa,\n            },\n            r0a1: u384 {\n                limb0: 0x22cbcd3ea9f0d0132809d8af,\n                limb1: 0x4cb242156a7cdc2991ee9c0e,\n                limb2: 0x1fe80337fb837a5476523f5c,\n                limb3: 0x7f64410e73c5db773ca6b66,\n            },\n            r1a0: u384 {\n                limb0: 0x32c05aa3eaefba532df15a8,\n                limb1: 0x7bee89a662e4138e44da3c9a,\n                limb2: 0xc92ee59d9405d5a905cf2fdb,\n                limb3: 0x163a2f67158e242bfbb18c52,\n            },\n            r1a1: u384 {\n                limb0: 0x55506de03a538ff69b9622a1,\n                limb1: 0x1883fbdba6795d64f7791ed5,\n                limb2: 0x8d52a259f76a0498bb3b877f,\n                limb3: 0x2cff61e78b0054925baa456,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf43059462494151b4ab2087e,\n                limb1: 0x5cd28f7ec6fd9d6b4b086f39,\n                limb2: 0x30dd2311b5bafb9250d116c1,\n                limb3: 0xfc6edf74dff631a32fca3fa,\n            },\n            r0a1: u384 {\n                limb0: 0x22cbcd3ea9f0d0132809d8af,\n                limb1: 0x4cb242156a7cdc2991ee9c0e,\n                limb2: 0x1fe80337fb837a5476523f5c,\n                limb3: 0x7f64410e73c5db773ca6b66,\n            },\n            r1a0: u384 {\n                limb0: 0x32c05aa3eaefba532df15a8,\n                limb1: 0x7bee89a662e4138e44da3c9a,\n                limb2: 0xc92ee59d9405d5a905cf2fdb,\n                limb3: 0x163a2f67158e242bfbb18c52,\n            },\n            r1a1: u384 {\n                limb0: 0x55506de03a538ff69b9622a1,\n                limb1: 0x1883fbdba6795d64f7791ed5,\n                limb2: 0x8d52a259f76a0498bb3b877f,\n                limb3: 0x2cff61e78b0054925baa456,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5468cccd649f5f50828f6f59,\n                limb1: 0x2ff2349d16035594b6932990,\n                limb2: 0x3a5195f740987d342be92f18,\n                limb3: 0xa20f374eb29e01db8f41902,\n            },\n            r0a1: u384 {\n                limb0: 0xd98a436aeb477edb61c5262d,\n                limb1: 0xc89b894c7895fd21e86b51f7,\n                limb2: 0x926eb138e4aa840edc0e677e,\n                limb3: 0x461388814e94e8fa2a15e40,\n            },\n            r1a0: u384 {\n                limb0: 0x684e1f1e2e72619d41ad8eb7,\n                limb1: 0xd6782445423e580f3476f9f9,\n                limb2: 0x235a44500a9d160446a5bddc,\n                limb3: 0xd00713abd0c5f631c36c5e6,\n            },\n            r1a1: u384 {\n                limb0: 0xf07a607d3ecf101d58fc2489,\n                limb1: 0xcd22610bafa804a71cdce810,\n                limb2: 0x6a02abac5a58c663011aa1f,\n                limb3: 0x29de1350b9fa34cc4874766,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5468cccd649f5f50828f6f59,\n                limb1: 0x2ff2349d16035594b6932990,\n                limb2: 0x3a5195f740987d342be92f18,\n                limb3: 0xa20f374eb29e01db8f41902,\n            },\n            r0a1: u384 {\n                limb0: 0xd98a436aeb477edb61c5262d,\n                limb1: 0xc89b894c7895fd21e86b51f7,\n                limb2: 0x926eb138e4aa840edc0e677e,\n                limb3: 0x461388814e94e8fa2a15e40,\n            },\n            r1a0: u384 {\n                limb0: 0x684e1f1e2e72619d41ad8eb7,\n                limb1: 0xd6782445423e580f3476f9f9,\n                limb2: 0x235a44500a9d160446a5bddc,\n                limb3: 0xd00713abd0c5f631c36c5e6,\n            },\n            r1a1: u384 {\n                limb0: 0xf07a607d3ecf101d58fc2489,\n                limb1: 0xcd22610bafa804a71cdce810,\n                limb2: 0x6a02abac5a58c663011aa1f,\n                limb3: 0x29de1350b9fa34cc4874766,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4e955be131680457999a786e,\n                limb1: 0xb8a3466d1f50dc841f50dd53,\n                limb2: 0x75efb94692f6d5de57fc8609,\n                limb3: 0x1550761b0b00c8008522c3d0,\n            },\n            r0a1: u384 {\n                limb0: 0xdf2281afe41938a9891e0f2,\n                limb1: 0x7338e84c16f4c1a3141c1382,\n                limb2: 0x7269a9e69889291d5395227a,\n                limb3: 0x16cbd178015a8098509e1caa,\n            },\n            r1a0: u384 {\n                limb0: 0x1cef06bbd9e71d4438a5052f,\n                limb1: 0xf045d3479ad9aa40b16601de,\n                limb2: 0xcedb3a06e3bf3805919beac,\n                limb3: 0x664dfb89dd2e293c30d8a80,\n            },\n            r1a1: u384 {\n                limb0: 0x80e3d05acac0a472fad04f82,\n                limb1: 0x583269e3d734e9b15cebbc7d,\n                limb2: 0xea7477948d00c61ec92b10b7,\n                limb3: 0x163a27a5089d314ab8d8cf34,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x4e955be131680457999a786e,\n                limb1: 0xb8a3466d1f50dc841f50dd53,\n                limb2: 0x75efb94692f6d5de57fc8609,\n                limb3: 0x1550761b0b00c8008522c3d0,\n            },\n            r0a1: u384 {\n                limb0: 0xdf2281afe41938a9891e0f2,\n                limb1: 0x7338e84c16f4c1a3141c1382,\n                limb2: 0x7269a9e69889291d5395227a,\n                limb3: 0x16cbd178015a8098509e1caa,\n            },\n            r1a0: u384 {\n                limb0: 0x1cef06bbd9e71d4438a5052f,\n                limb1: 0xf045d3479ad9aa40b16601de,\n                limb2: 0xcedb3a06e3bf3805919beac,\n                limb3: 0x664dfb89dd2e293c30d8a80,\n            },\n            r1a1: u384 {\n                limb0: 0x80e3d05acac0a472fad04f82,\n                limb1: 0x583269e3d734e9b15cebbc7d,\n                limb2: 0xea7477948d00c61ec92b10b7,\n                limb3: 0x163a27a5089d314ab8d8cf34,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7a8b2f99201cf6096d4d4b86,\n                limb1: 0xa896e5b0f4e93d49e8a2691b,\n                limb2: 0xd5d910d71a5706a6f897976c,\n                limb3: 0x10913202008b672fafa4272b,\n            },\n            r0a1: u384 {\n                limb0: 0xbcabe4aba3fd969494c6f463,\n                limb1: 0x416f6d51b78dc628bacd84c1,\n                limb2: 0xb92836a7855f2590720a01c6,\n                limb3: 0x19b605e839e9850b48d8ec2c,\n            },\n            r1a0: u384 {\n                limb0: 0x49620f3d26493fcd7396493b,\n                limb1: 0x17313fc388a7ac05a8b111bb,\n                limb2: 0x292e458d09c07af68fcfc74e,\n                limb3: 0x3a6acacd6cbc411d7eb7947,\n            },\n            r1a1: u384 {\n                limb0: 0xd0fdcd4eeaeb1a6ecccc011b,\n                limb1: 0x40e42fe4d7574bcb53834b69,\n                limb2: 0x799946d2b7b28b127a821e57,\n                limb3: 0x351c5a26dcce6ce7fca6249,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7a8b2f99201cf6096d4d4b86,\n                limb1: 0xa896e5b0f4e93d49e8a2691b,\n                limb2: 0xd5d910d71a5706a6f897976c,\n                limb3: 0x10913202008b672fafa4272b,\n            },\n            r0a1: u384 {\n                limb0: 0xbcabe4aba3fd969494c6f463,\n                limb1: 0x416f6d51b78dc628bacd84c1,\n                limb2: 0xb92836a7855f2590720a01c6,\n                limb3: 0x19b605e839e9850b48d8ec2c,\n            },\n            r1a0: u384 {\n                limb0: 0x49620f3d26493fcd7396493b,\n                limb1: 0x17313fc388a7ac05a8b111bb,\n                limb2: 0x292e458d09c07af68fcfc74e,\n                limb3: 0x3a6acacd6cbc411d7eb7947,\n            },\n            r1a1: u384 {\n                limb0: 0xd0fdcd4eeaeb1a6ecccc011b,\n                limb1: 0x40e42fe4d7574bcb53834b69,\n                limb2: 0x799946d2b7b28b127a821e57,\n                limb3: 0x351c5a26dcce6ce7fca6249,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x56de0d67449950f9a27e88fa,\n                limb1: 0xce138b184f06c8f264650446,\n                limb2: 0x31ca7924a667107cb9380709,\n                limb3: 0x17960cbcef34dc014292ac06,\n            },\n            r0a1: u384 {\n                limb0: 0x31295353150179142d6ddbc1,\n                limb1: 0x2fafe4eb2df7753c10441bf,\n                limb2: 0x403786f898262dcd349b2eb5,\n                limb3: 0x131cc0205e7c06e7d7dfe573,\n            },\n            r1a0: u384 {\n                limb0: 0xd79406d46f1c9d7137fcc172,\n                limb1: 0x84793aeb8b5ca9891e9a6563,\n                limb2: 0x4b1ab7811bfafaf6dfb745fc,\n                limb3: 0x17c50d8fcd5f550d4a2a64ae,\n            },\n            r1a1: u384 {\n                limb0: 0x5c3d7e34c90dc48a32c70868,\n                limb1: 0x4e1b7bc28d0de9519e604184,\n                limb2: 0xf258c4f3f3ba0baaccfac11b,\n                limb3: 0x11ec2c0924dee1e8967b559a,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x56de0d67449950f9a27e88fa,\n                limb1: 0xce138b184f06c8f264650446,\n                limb2: 0x31ca7924a667107cb9380709,\n                limb3: 0x17960cbcef34dc014292ac06,\n            },\n            r0a1: u384 {\n                limb0: 0x31295353150179142d6ddbc1,\n                limb1: 0x2fafe4eb2df7753c10441bf,\n                limb2: 0x403786f898262dcd349b2eb5,\n                limb3: 0x131cc0205e7c06e7d7dfe573,\n            },\n            r1a0: u384 {\n                limb0: 0xd79406d46f1c9d7137fcc172,\n                limb1: 0x84793aeb8b5ca9891e9a6563,\n                limb2: 0x4b1ab7811bfafaf6dfb745fc,\n                limb3: 0x17c50d8fcd5f550d4a2a64ae,\n            },\n            r1a1: u384 {\n                limb0: 0x5c3d7e34c90dc48a32c70868,\n                limb1: 0x4e1b7bc28d0de9519e604184,\n                limb2: 0xf258c4f3f3ba0baaccfac11b,\n                limb3: 0x11ec2c0924dee1e8967b559a,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe60081576a59a2679221795e,\n                limb1: 0x99ee512fdfcd346784f34a48,\n                limb2: 0x735b00cd677e6e1ba38c009f,\n                limb3: 0x178d4accb6fb9b6cbf9df577,\n            },\n            r0a1: u384 {\n                limb0: 0xcd7b2447c71a9e9b8b9db98,\n                limb1: 0x97d5028ae6c2f7027ced11b2,\n                limb2: 0xf8ea35a3d06f6aca9cffd3b,\n                limb3: 0xbec0ed2f513414494bd0f6d,\n            },\n            r1a0: u384 {\n                limb0: 0xca6aca5778f88316e121b6f2,\n                limb1: 0x23c098f55746b7d1c5e168f9,\n                limb2: 0x4be5fc4f8b81d965ec4cd861,\n                limb3: 0x6c156b4f517a9156e82cb14,\n            },\n            r1a1: u384 {\n                limb0: 0x59e184cdff8a20200dee525d,\n                limb1: 0x12327d5b5691bb513688bda3,\n                limb2: 0xa653bf47392176e8a509eb6b,\n                limb3: 0x6302b0d5f33fc6d3799728d,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe60081576a59a2679221795e,\n                limb1: 0x99ee512fdfcd346784f34a48,\n                limb2: 0x735b00cd677e6e1ba38c009f,\n                limb3: 0x178d4accb6fb9b6cbf9df577,\n            },\n            r0a1: u384 {\n                limb0: 0xcd7b2447c71a9e9b8b9db98,\n                limb1: 0x97d5028ae6c2f7027ced11b2,\n                limb2: 0xf8ea35a3d06f6aca9cffd3b,\n                limb3: 0xbec0ed2f513414494bd0f6d,\n            },\n            r1a0: u384 {\n                limb0: 0xca6aca5778f88316e121b6f2,\n                limb1: 0x23c098f55746b7d1c5e168f9,\n                limb2: 0x4be5fc4f8b81d965ec4cd861,\n                limb3: 0x6c156b4f517a9156e82cb14,\n            },\n            r1a1: u384 {\n                limb0: 0x59e184cdff8a20200dee525d,\n                limb1: 0x12327d5b5691bb513688bda3,\n                limb2: 0xa653bf47392176e8a509eb6b,\n                limb3: 0x6302b0d5f33fc6d3799728d,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x8289ee9e6820add91b6e9f3c,\n                limb1: 0x161cccd4985697fa09846edf,\n                limb2: 0x7a16c4169c620eab78a54ae0,\n                limb3: 0xb43112e6bf81d6bf3265d2a,\n            },\n            r0a1: u384 {\n                limb0: 0xa19c344f64ea5350f0a08f3c,\n                limb1: 0x4b3b0b1f34d7db6b30ab1be3,\n                limb2: 0xdd3563e987285c49a9c0ea5f,\n                limb3: 0xa5797654377bf54d8992f94,\n            },\n            r1a0: u384 {\n                limb0: 0xa65f6f3c877ce8e73a114724,\n                limb1: 0x5b64b753040c29a75a01e69b,\n                limb2: 0x628c82c1c0e09f1aaab0a61,\n                limb3: 0x1017f0dd39c644eb0e392947,\n            },\n            r1a1: u384 {\n                limb0: 0xf8a5bcf4817c937d81f315d1,\n                limb1: 0x21f7d8e74be6d6410e62f9e1,\n                limb2: 0xbeafe32cf1ec912b9927be97,\n                limb3: 0x1074d4a9995442048f5dc552,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x8289ee9e6820add91b6e9f3c,\n                limb1: 0x161cccd4985697fa09846edf,\n                limb2: 0x7a16c4169c620eab78a54ae0,\n                limb3: 0xb43112e6bf81d6bf3265d2a,\n            },\n            r0a1: u384 {\n                limb0: 0xa19c344f64ea5350f0a08f3c,\n                limb1: 0x4b3b0b1f34d7db6b30ab1be3,\n                limb2: 0xdd3563e987285c49a9c0ea5f,\n                limb3: 0xa5797654377bf54d8992f94,\n            },\n            r1a0: u384 {\n                limb0: 0xa65f6f3c877ce8e73a114724,\n                limb1: 0x5b64b753040c29a75a01e69b,\n                limb2: 0x628c82c1c0e09f1aaab0a61,\n                limb3: 0x1017f0dd39c644eb0e392947,\n            },\n            r1a1: u384 {\n                limb0: 0xf8a5bcf4817c937d81f315d1,\n                limb1: 0x21f7d8e74be6d6410e62f9e1,\n                limb2: 0xbeafe32cf1ec912b9927be97,\n                limb3: 0x1074d4a9995442048f5dc552,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf5f0bc431d8e3c80c9af43ec,\n                limb1: 0xe1bfd26afc9cc39a0566ce43,\n                limb2: 0x56e0dd02d42fee35ff65330b,\n                limb3: 0xcb5a49bf5f851b8dfe3526c,\n            },\n            r0a1: u384 {\n                limb0: 0x1b9c89ae090424c785c6201e,\n                limb1: 0x9aa7a9da8db576af296e542a,\n                limb2: 0xf2e8447430a25ab638a55680,\n                limb3: 0xa10904e10bf2511e4345039,\n            },\n            r1a0: u384 {\n                limb0: 0x71a9bbb204d330d58a16fddc,\n                limb1: 0xc0b0adcf1611ff894f97933e,\n                limb2: 0x835a3a6abbb86ab551ceb573,\n                limb3: 0x634ccea2a60cdbd34c941c1,\n            },\n            r1a1: u384 {\n                limb0: 0xb5ff392b31c0d3eaba4cd272,\n                limb1: 0x160f3e778181730bdfd887c7,\n                limb2: 0xea813bbe8c520a16b1e7a2c3,\n                limb3: 0x14d73adeb7fdf6a4a22c9ffd,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf5f0bc431d8e3c80c9af43ec,\n                limb1: 0xe1bfd26afc9cc39a0566ce43,\n                limb2: 0x56e0dd02d42fee35ff65330b,\n                limb3: 0xcb5a49bf5f851b8dfe3526c,\n            },\n            r0a1: u384 {\n                limb0: 0x1b9c89ae090424c785c6201e,\n                limb1: 0x9aa7a9da8db576af296e542a,\n                limb2: 0xf2e8447430a25ab638a55680,\n                limb3: 0xa10904e10bf2511e4345039,\n            },\n            r1a0: u384 {\n                limb0: 0x71a9bbb204d330d58a16fddc,\n                limb1: 0xc0b0adcf1611ff894f97933e,\n                limb2: 0x835a3a6abbb86ab551ceb573,\n                limb3: 0x634ccea2a60cdbd34c941c1,\n            },\n            r1a1: u384 {\n                limb0: 0xb5ff392b31c0d3eaba4cd272,\n                limb1: 0x160f3e778181730bdfd887c7,\n                limb2: 0xea813bbe8c520a16b1e7a2c3,\n                limb3: 0x14d73adeb7fdf6a4a22c9ffd,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe99af5be34cdf3b6cd722b90,\n                limb1: 0x43bcb5a3050d0fc3f1656016,\n                limb2: 0xd9565b1e5e510b6264471bfa,\n                limb3: 0x12ee7303ded06b9853cbddbe,\n            },\n            r0a1: u384 {\n                limb0: 0x640c586fa840c267f3b5d99,\n                limb1: 0x9584c14b56c506ef287a149c,\n                limb2: 0x317fe0a92bd878e9d86b616d,\n                limb3: 0x12c415a497b04dbe9c645460,\n            },\n            r1a0: u384 {\n                limb0: 0x3b85dd33ea6b3619236bb988,\n                limb1: 0x7ce7ce7d9b2c5af2cc87a08a,\n                limb2: 0x677951177d5a61f6d3531b7b,\n                limb3: 0x188a8c03315728f1526806d2,\n            },\n            r1a1: u384 {\n                limb0: 0xa585bcb857e792c9af8ddec8,\n                limb1: 0x78f2e972ccd3af64b49ff79b,\n                limb2: 0x10be9acf81fad9cf48dc3e12,\n                limb3: 0x11a11578232a8dd660eaf5b6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xe99af5be34cdf3b6cd722b90,\n                limb1: 0x43bcb5a3050d0fc3f1656016,\n                limb2: 0xd9565b1e5e510b6264471bfa,\n                limb3: 0x12ee7303ded06b9853cbddbe,\n            },\n            r0a1: u384 {\n                limb0: 0x640c586fa840c267f3b5d99,\n                limb1: 0x9584c14b56c506ef287a149c,\n                limb2: 0x317fe0a92bd878e9d86b616d,\n                limb3: 0x12c415a497b04dbe9c645460,\n            },\n            r1a0: u384 {\n                limb0: 0x3b85dd33ea6b3619236bb988,\n                limb1: 0x7ce7ce7d9b2c5af2cc87a08a,\n                limb2: 0x677951177d5a61f6d3531b7b,\n                limb3: 0x188a8c03315728f1526806d2,\n            },\n            r1a1: u384 {\n                limb0: 0xa585bcb857e792c9af8ddec8,\n                limb1: 0x78f2e972ccd3af64b49ff79b,\n                limb2: 0x10be9acf81fad9cf48dc3e12,\n                limb3: 0x11a11578232a8dd660eaf5b6,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc7c0d285262c1b32ca6bc7c3,\n                limb1: 0x66824fd1b6de7089b82d478a,\n                limb2: 0x5e4beb5c4833b2e8f008208a,\n                limb3: 0x11c059b33ca3f500c11ee495,\n            },\n            r0a1: u384 {\n                limb0: 0x66e0f227a61baa52b945ec8a,\n                limb1: 0x6906fbc82d5fd92075ef1513,\n                limb2: 0x55d0fec8a6600cb65d06bdb3,\n                limb3: 0x179aabda1a2af5b5e7777d9a,\n            },\n            r1a0: u384 {\n                limb0: 0xcb7dee20a686dcfcda3ddff8,\n                limb1: 0xfb1119a7914a33be6cb2a22d,\n                limb2: 0xda5c49c13a9c6084ad1ca51d,\n                limb3: 0x105195896eb7f46d1ac77d49,\n            },\n            r1a1: u384 {\n                limb0: 0xe1ae9ed15c3335b8f8b45b63,\n                limb1: 0xd7d2b2b828960267ff16d106,\n                limb2: 0x5fb6174880cb32afa5171325,\n                limb3: 0x73634ad3a80542b79db8125,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xc7c0d285262c1b32ca6bc7c3,\n                limb1: 0x66824fd1b6de7089b82d478a,\n                limb2: 0x5e4beb5c4833b2e8f008208a,\n                limb3: 0x11c059b33ca3f500c11ee495,\n            },\n            r0a1: u384 {\n                limb0: 0x66e0f227a61baa52b945ec8a,\n                limb1: 0x6906fbc82d5fd92075ef1513,\n                limb2: 0x55d0fec8a6600cb65d06bdb3,\n                limb3: 0x179aabda1a2af5b5e7777d9a,\n            },\n            r1a0: u384 {\n                limb0: 0xcb7dee20a686dcfcda3ddff8,\n                limb1: 0xfb1119a7914a33be6cb2a22d,\n                limb2: 0xda5c49c13a9c6084ad1ca51d,\n                limb3: 0x105195896eb7f46d1ac77d49,\n            },\n            r1a1: u384 {\n                limb0: 0xe1ae9ed15c3335b8f8b45b63,\n                limb1: 0xd7d2b2b828960267ff16d106,\n                limb2: 0x5fb6174880cb32afa5171325,\n                limb3: 0x73634ad3a80542b79db8125,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7f6dc6043db1a0981ac8da53,\n                limb1: 0x3faeabcc298b965b8d17dcdc,\n                limb2: 0x41f566c0fb60863429f76f85,\n                limb3: 0xcb0b6d856433854a3196109,\n            },\n            r0a1: u384 {\n                limb0: 0xffba8b95da973789308c3dc5,\n                limb1: 0xbd1b17fcc64e96fca67718a8,\n                limb2: 0xba92704a60c4841667b06ceb,\n                limb3: 0xa0b2c0bbf592c14ec7e5fb,\n            },\n            r1a0: u384 {\n                limb0: 0x92beda1eba9dc43fc36a6079,\n                limb1: 0x91bbd7dad0ab28fca77a03a0,\n                limb2: 0x44f752b68348b2e3a24d3786,\n                limb3: 0x43b6a504a9015e8b46e81f4,\n            },\n            r1a1: u384 {\n                limb0: 0xc907c48da1cd91064530e901,\n                limb1: 0xe87af685a6b1fb6ad930fc15,\n                limb2: 0x4a5990c65cd9027b2c676e6e,\n                limb3: 0x11cde272cfa72574425da27,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x7f6dc6043db1a0981ac8da53,\n                limb1: 0x3faeabcc298b965b8d17dcdc,\n                limb2: 0x41f566c0fb60863429f76f85,\n                limb3: 0xcb0b6d856433854a3196109,\n            },\n            r0a1: u384 {\n                limb0: 0xffba8b95da973789308c3dc5,\n                limb1: 0xbd1b17fcc64e96fca67718a8,\n                limb2: 0xba92704a60c4841667b06ceb,\n                limb3: 0xa0b2c0bbf592c14ec7e5fb,\n            },\n            r1a0: u384 {\n                limb0: 0x92beda1eba9dc43fc36a6079,\n                limb1: 0x91bbd7dad0ab28fca77a03a0,\n                limb2: 0x44f752b68348b2e3a24d3786,\n                limb3: 0x43b6a504a9015e8b46e81f4,\n            },\n            r1a1: u384 {\n                limb0: 0xc907c48da1cd91064530e901,\n                limb1: 0xe87af685a6b1fb6ad930fc15,\n                limb2: 0x4a5990c65cd9027b2c676e6e,\n                limb3: 0x11cde272cfa72574425da27,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xdaf1249cec25e1591d0f9329,\n                limb1: 0x5531582b2fcbc58c12130411,\n                limb2: 0xd5683ab0df6813a370dced9d,\n                limb3: 0x16c61ae7af165d87be0cc2d5,\n            },\n            r0a1: u384 {\n                limb0: 0xb1c04d8f03fb3b2344ac4be5,\n                limb1: 0xb587962043ba3348ccce1f0f,\n                limb2: 0x5dd0fb61f2bcee0210d0af13,\n                limb3: 0x17804c1f2c60a8a7264b6047,\n            },\n            r1a0: u384 {\n                limb0: 0xbb63ccb83f7ed4931470b669,\n                limb1: 0x7fd71cdcbf8b588e2169e56,\n                limb2: 0x497e41bd5035df06befd3d7e,\n                limb3: 0x1106425b52985ab1472f75a9,\n            },\n            r1a1: u384 {\n                limb0: 0xf6dcb781ff977354cbaeca11,\n                limb1: 0x69d27ee516fa1a11f4b63914,\n                limb2: 0x9c9d283771507f24855df134,\n                limb3: 0xf2cfee6977693a3f2b5332c,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xdaf1249cec25e1591d0f9329,\n                limb1: 0x5531582b2fcbc58c12130411,\n                limb2: 0xd5683ab0df6813a370dced9d,\n                limb3: 0x16c61ae7af165d87be0cc2d5,\n            },\n            r0a1: u384 {\n                limb0: 0xb1c04d8f03fb3b2344ac4be5,\n                limb1: 0xb587962043ba3348ccce1f0f,\n                limb2: 0x5dd0fb61f2bcee0210d0af13,\n                limb3: 0x17804c1f2c60a8a7264b6047,\n            },\n            r1a0: u384 {\n                limb0: 0xbb63ccb83f7ed4931470b669,\n                limb1: 0x7fd71cdcbf8b588e2169e56,\n                limb2: 0x497e41bd5035df06befd3d7e,\n                limb3: 0x1106425b52985ab1472f75a9,\n            },\n            r1a1: u384 {\n                limb0: 0xf6dcb781ff977354cbaeca11,\n                limb1: 0x69d27ee516fa1a11f4b63914,\n                limb2: 0x9c9d283771507f24855df134,\n                limb3: 0xf2cfee6977693a3f2b5332c,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x565aac3d5efc089a31139283,\n                limb1: 0x4272752a854538f0b555ac04,\n                limb2: 0x86a5055ded31515c6ec89ebc,\n                limb3: 0x110c5f73e6b0b5c68282aa1a,\n            },\n            r0a1: u384 {\n                limb0: 0x6eb8fad61d6a608c85cf557f,\n                limb1: 0x2f27ec0ec22fc4a9d189e192,\n                limb2: 0xcce849442e970449a41aee87,\n                limb3: 0x3388dc06a8286446a95bb74,\n            },\n            r1a0: u384 {\n                limb0: 0x29822e7214d3ae3a1eaf0881,\n                limb1: 0xb04e459e8d569063d2f1ff84,\n                limb2: 0x61aa79235620ec5c6168cd13,\n                limb3: 0xdb46da5506f25a0ddd9d25e,\n            },\n            r1a1: u384 {\n                limb0: 0x4004047d6627ef4e8a047aeb,\n                limb1: 0x73a8ed1ba044e04a43a99564,\n                limb2: 0x664eedf108865fac5ebba6e1,\n                limb3: 0xe6e3025f09bb9df597b5128,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6acae548b9042589a17cc95f,\n                limb1: 0x217f1e1c11c3011715774d4d,\n                limb2: 0x11a9fb5766b39d430b1c15d0,\n                limb3: 0xe612d859df24842ce33c9d6,\n            },\n            r0a1: u384 {\n                limb0: 0x599285819346fb9c3c28793d,\n                limb1: 0x4d0d0826c6e08cf5059cdc19,\n                limb2: 0xf39b4a96ce83040bf10716ac,\n                limb3: 0xd5c0c7d757310fec39173c7,\n            },\n            r1a0: u384 {\n                limb0: 0x473dcb1b1a73099f9b3d95d2,\n                limb1: 0x7a7ef1c6db2665dfba32be7b,\n                limb2: 0xccb92790901c2f7ceb7fd861,\n                limb3: 0x1015a3839453343c9b0cbc45,\n            },\n            r1a1: u384 {\n                limb0: 0x12d333d5723a566d13e3b9ab,\n                limb1: 0xf96f0e52139baea4bbd3f509,\n                limb2: 0xf775f6c4aa01956effc7bac1,\n                limb3: 0x14f9ac263962844d5d7bfd58,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x565aac3d5efc089a31139283,\n                limb1: 0x4272752a854538f0b555ac04,\n                limb2: 0x86a5055ded31515c6ec89ebc,\n                limb3: 0x110c5f73e6b0b5c68282aa1a,\n            },\n            r0a1: u384 {\n                limb0: 0x6eb8fad61d6a608c85cf557f,\n                limb1: 0x2f27ec0ec22fc4a9d189e192,\n                limb2: 0xcce849442e970449a41aee87,\n                limb3: 0x3388dc06a8286446a95bb74,\n            },\n            r1a0: u384 {\n                limb0: 0x29822e7214d3ae3a1eaf0881,\n                limb1: 0xb04e459e8d569063d2f1ff84,\n                limb2: 0x61aa79235620ec5c6168cd13,\n                limb3: 0xdb46da5506f25a0ddd9d25e,\n            },\n            r1a1: u384 {\n                limb0: 0x4004047d6627ef4e8a047aeb,\n                limb1: 0x73a8ed1ba044e04a43a99564,\n                limb2: 0x664eedf108865fac5ebba6e1,\n                limb3: 0xe6e3025f09bb9df597b5128,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6acae548b9042589a17cc95f,\n                limb1: 0x217f1e1c11c3011715774d4d,\n                limb2: 0x11a9fb5766b39d430b1c15d0,\n                limb3: 0xe612d859df24842ce33c9d6,\n            },\n            r0a1: u384 {\n                limb0: 0x599285819346fb9c3c28793d,\n                limb1: 0x4d0d0826c6e08cf5059cdc19,\n                limb2: 0xf39b4a96ce83040bf10716ac,\n                limb3: 0xd5c0c7d757310fec39173c7,\n            },\n            r1a0: u384 {\n                limb0: 0x473dcb1b1a73099f9b3d95d2,\n                limb1: 0x7a7ef1c6db2665dfba32be7b,\n                limb2: 0xccb92790901c2f7ceb7fd861,\n                limb3: 0x1015a3839453343c9b0cbc45,\n            },\n            r1a1: u384 {\n                limb0: 0x12d333d5723a566d13e3b9ab,\n                limb1: 0xf96f0e52139baea4bbd3f509,\n                limb2: 0xf775f6c4aa01956effc7bac1,\n                limb3: 0x14f9ac263962844d5d7bfd58,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x324273979b43f236c1b6d4b3,\n                limb1: 0x6a44d55ac56823beb8c5cd4d,\n                limb2: 0xf187e87ac0dea83abd11b631,\n                limb3: 0xedbe290b2884e1a7816b064,\n            },\n            r0a1: u384 {\n                limb0: 0xb9c0ebcef8295a5127fabfde,\n                limb1: 0xd8abaec351082a47e7dd0d50,\n                limb2: 0xf7b036dd84a0f094aab5c7c,\n                limb3: 0x14ba1a361d4fb86acc0430ff,\n            },\n            r1a0: u384 {\n                limb0: 0xd6a92564eca59a717cccc180,\n                limb1: 0x7ec4e553b132cfe520138b91,\n                limb2: 0x968b7ccf08d0a2377a2b5d51,\n                limb3: 0x1486effacc4cfe9a2a925700,\n            },\n            r1a1: u384 {\n                limb0: 0xda73fa2984bbcd83191b529c,\n                limb1: 0x3d2797caffd2a9f90addeb7d,\n                limb2: 0x6ae8b01c177a54b6029803c4,\n                limb3: 0x19cd64299c633b6e74933f98,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x324273979b43f236c1b6d4b3,\n                limb1: 0x6a44d55ac56823beb8c5cd4d,\n                limb2: 0xf187e87ac0dea83abd11b631,\n                limb3: 0xedbe290b2884e1a7816b064,\n            },\n            r0a1: u384 {\n                limb0: 0xb9c0ebcef8295a5127fabfde,\n                limb1: 0xd8abaec351082a47e7dd0d50,\n                limb2: 0xf7b036dd84a0f094aab5c7c,\n                limb3: 0x14ba1a361d4fb86acc0430ff,\n            },\n            r1a0: u384 {\n                limb0: 0xd6a92564eca59a717cccc180,\n                limb1: 0x7ec4e553b132cfe520138b91,\n                limb2: 0x968b7ccf08d0a2377a2b5d51,\n                limb3: 0x1486effacc4cfe9a2a925700,\n            },\n            r1a1: u384 {\n                limb0: 0xda73fa2984bbcd83191b529c,\n                limb1: 0x3d2797caffd2a9f90addeb7d,\n                limb2: 0x6ae8b01c177a54b6029803c4,\n                limb3: 0x19cd64299c633b6e74933f98,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xdb2681a0ef5cfd0962c48f6b,\n                limb1: 0x1a2279a74c79a6421bd26c6c,\n                limb2: 0xc48814ce2e29b2263da82a5,\n                limb3: 0x2e3e25f56d91932935f20d,\n            },\n            r0a1: u384 {\n                limb0: 0xd677f32fe7da9736c43634f2,\n                limb1: 0x4285e9705dd9ce8d698d1fe0,\n                limb2: 0x2c7dd9009c4c58184aca558c,\n                limb3: 0x3dcbe4e5594c6ab2d10c16d,\n            },\n            r1a0: u384 {\n                limb0: 0x86e822ce6a692777d529f773,\n                limb1: 0xf92f4c24dd2d1a1ab77fcfe7,\n                limb2: 0xc7f1f61538f225ee52b89f48,\n                limb3: 0x7a08b05e3201602d9216d2d,\n            },\n            r1a1: u384 {\n                limb0: 0x220cfbe9c10884461876ae23,\n                limb1: 0x9e752d4b5482e4c5bbd57488,\n                limb2: 0x72d39a1d6f520311fd389c37,\n                limb3: 0x52542fd6c39f0d99bd6bbd9,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xdb2681a0ef5cfd0962c48f6b,\n                limb1: 0x1a2279a74c79a6421bd26c6c,\n                limb2: 0xc48814ce2e29b2263da82a5,\n                limb3: 0x2e3e25f56d91932935f20d,\n            },\n            r0a1: u384 {\n                limb0: 0xd677f32fe7da9736c43634f2,\n                limb1: 0x4285e9705dd9ce8d698d1fe0,\n                limb2: 0x2c7dd9009c4c58184aca558c,\n                limb3: 0x3dcbe4e5594c6ab2d10c16d,\n            },\n            r1a0: u384 {\n                limb0: 0x86e822ce6a692777d529f773,\n                limb1: 0xf92f4c24dd2d1a1ab77fcfe7,\n                limb2: 0xc7f1f61538f225ee52b89f48,\n                limb3: 0x7a08b05e3201602d9216d2d,\n            },\n            r1a1: u384 {\n                limb0: 0x220cfbe9c10884461876ae23,\n                limb1: 0x9e752d4b5482e4c5bbd57488,\n                limb2: 0x72d39a1d6f520311fd389c37,\n                limb3: 0x52542fd6c39f0d99bd6bbd9,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd2833c6e80915aa802028d91,\n                limb1: 0x74d22878ec75474650117b32,\n                limb2: 0x6cb76ac504f45d442506c3b9,\n                limb3: 0x19a572ff9f78c5689f7e9,\n            },\n            r0a1: u384 {\n                limb0: 0x46249614d83af7e171c6172a,\n                limb1: 0xd2a4f206fa6b7c9dc6276a1d,\n                limb2: 0x1d37284645aeccfa7e55914e,\n                limb3: 0xea73b1772fdeb0d8a80a54,\n            },\n            r1a0: u384 {\n                limb0: 0x985a081123f14663474d6128,\n                limb1: 0x787c1d2cef0eaf6c17b95fa8,\n                limb2: 0xf13630ecc0448c07d7ec98e1,\n                limb3: 0xcd42fb0bd6ca63acd78405b,\n            },\n            r1a1: u384 {\n                limb0: 0xf78e5391e95d1455d6dd1c83,\n                limb1: 0xb1164967a264030c2d76d419,\n                limb2: 0xe1a6bcb4b4b9ee8fddc7315c,\n                limb3: 0x173465e64e00f1cdec28f131,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xd2833c6e80915aa802028d91,\n                limb1: 0x74d22878ec75474650117b32,\n                limb2: 0x6cb76ac504f45d442506c3b9,\n                limb3: 0x19a572ff9f78c5689f7e9,\n            },\n            r0a1: u384 {\n                limb0: 0x46249614d83af7e171c6172a,\n                limb1: 0xd2a4f206fa6b7c9dc6276a1d,\n                limb2: 0x1d37284645aeccfa7e55914e,\n                limb3: 0xea73b1772fdeb0d8a80a54,\n            },\n            r1a0: u384 {\n                limb0: 0x985a081123f14663474d6128,\n                limb1: 0x787c1d2cef0eaf6c17b95fa8,\n                limb2: 0xf13630ecc0448c07d7ec98e1,\n                limb3: 0xcd42fb0bd6ca63acd78405b,\n            },\n            r1a1: u384 {\n                limb0: 0xf78e5391e95d1455d6dd1c83,\n                limb1: 0xb1164967a264030c2d76d419,\n                limb2: 0xe1a6bcb4b4b9ee8fddc7315c,\n                limb3: 0x173465e64e00f1cdec28f131,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5a92b83a440860b31ecb39ab,\n                limb1: 0x6bc88b2098e8aa4f2cbabe29,\n                limb2: 0xa344268cee55846c0d67fc57,\n                limb3: 0xbb3d9a3fd7f583599bea6c8,\n            },\n            r0a1: u384 {\n                limb0: 0x3a6a9d0f4e52f138fe7e33f8,\n                limb1: 0x51afc01b9494c61c5bd1b11e,\n                limb2: 0x3172b05abc177e9cce4b4f0,\n                limb3: 0x17d8ca31211b957fcb12e805,\n            },\n            r1a0: u384 {\n                limb0: 0x6343ff0635ec4e9c9fb709b9,\n                limb1: 0x68e8d08a9f5be219dd16fe6f,\n                limb2: 0xf0fed78a781578b59788720b,\n                limb3: 0xbe842e6fff90d6b069cb70,\n            },\n            r1a1: u384 {\n                limb0: 0xd037592f81aa53124684abf0,\n                limb1: 0xe52aeb7217c82e488907f68e,\n                limb2: 0x3bddbeccd2fae9aedaa083b6,\n                limb3: 0xcdd8a9e7fe7cc350a576aaa,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x5a92b83a440860b31ecb39ab,\n                limb1: 0x6bc88b2098e8aa4f2cbabe29,\n                limb2: 0xa344268cee55846c0d67fc57,\n                limb3: 0xbb3d9a3fd7f583599bea6c8,\n            },\n            r0a1: u384 {\n                limb0: 0x3a6a9d0f4e52f138fe7e33f8,\n                limb1: 0x51afc01b9494c61c5bd1b11e,\n                limb2: 0x3172b05abc177e9cce4b4f0,\n                limb3: 0x17d8ca31211b957fcb12e805,\n            },\n            r1a0: u384 {\n                limb0: 0x6343ff0635ec4e9c9fb709b9,\n                limb1: 0x68e8d08a9f5be219dd16fe6f,\n                limb2: 0xf0fed78a781578b59788720b,\n                limb3: 0xbe842e6fff90d6b069cb70,\n            },\n            r1a1: u384 {\n                limb0: 0xd037592f81aa53124684abf0,\n                limb1: 0xe52aeb7217c82e488907f68e,\n                limb2: 0x3bddbeccd2fae9aedaa083b6,\n                limb3: 0xcdd8a9e7fe7cc350a576aaa,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6ab1f6647ba9ba736f0839ad,\n                limb1: 0xe8204b773672d624630e2384,\n                limb2: 0x9ecdf669a827c29c74daf71b,\n                limb3: 0x2627dd5786ccd48891b28cb,\n            },\n            r0a1: u384 {\n                limb0: 0xd65bc63d35cc0bfb66c2fbf5,\n                limb1: 0xb658ffd3e2b02102a72560b5,\n                limb2: 0x4831f5285ece22bc1c6a1869,\n                limb3: 0x1721967f7d4fc728f65b501c,\n            },\n            r1a0: u384 {\n                limb0: 0x6794d4f4801a0974d863a911,\n                limb1: 0xbecbc2ac5e4c8d8ccf656991,\n                limb2: 0x9ec1f54cdfcb10932d199399,\n                limb3: 0x2406219596075a45c6e0806,\n            },\n            r1a1: u384 {\n                limb0: 0xe78dbc09e2db8d9605dc8f23,\n                limb1: 0xc9303fa646a2966cfd79288,\n                limb2: 0xa61763bd756d1d418bd83966,\n                limb3: 0x198617a89efe66f0fd26cf06,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6ab1f6647ba9ba736f0839ad,\n                limb1: 0xe8204b773672d624630e2384,\n                limb2: 0x9ecdf669a827c29c74daf71b,\n                limb3: 0x2627dd5786ccd48891b28cb,\n            },\n            r0a1: u384 {\n                limb0: 0xd65bc63d35cc0bfb66c2fbf5,\n                limb1: 0xb658ffd3e2b02102a72560b5,\n                limb2: 0x4831f5285ece22bc1c6a1869,\n                limb3: 0x1721967f7d4fc728f65b501c,\n            },\n            r1a0: u384 {\n                limb0: 0x6794d4f4801a0974d863a911,\n                limb1: 0xbecbc2ac5e4c8d8ccf656991,\n                limb2: 0x9ec1f54cdfcb10932d199399,\n                limb3: 0x2406219596075a45c6e0806,\n            },\n            r1a1: u384 {\n                limb0: 0xe78dbc09e2db8d9605dc8f23,\n                limb1: 0xc9303fa646a2966cfd79288,\n                limb2: 0xa61763bd756d1d418bd83966,\n                limb3: 0x198617a89efe66f0fd26cf06,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3d1d195f552c9f18d8d5c535,\n                limb1: 0x1323b299172854615a455e4a,\n                limb2: 0xf7d398cbadc32d691ed52bd6,\n                limb3: 0x659beaad32fe55ba9df44d9,\n            },\n            r0a1: u384 {\n                limb0: 0x98c06f5573cfa234289b62d8,\n                limb1: 0xe515dd299c6e00bc6df14c34,\n                limb2: 0x23b66fe012eb1a443038cb88,\n                limb3: 0x12f810746c2c45af5360d9bc,\n            },\n            r1a0: u384 {\n                limb0: 0x3aae5b2af57f0c9c94bb32,\n                limb1: 0x777a7e6bbc9962ab6be81f76,\n                limb2: 0x14cbce88a915fc5331313d21,\n                limb3: 0x13a52e8a1ac3c04b42218be1,\n            },\n            r1a1: u384 {\n                limb0: 0xd2b673a0bae8bfb28cff0c45,\n                limb1: 0xf95ff65fcc89601198dc8f91,\n                limb2: 0xd77322bf8488715eef3f6fb1,\n                limb3: 0xf1277bfb59098f10a9131b5,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x3d1d195f552c9f18d8d5c535,\n                limb1: 0x1323b299172854615a455e4a,\n                limb2: 0xf7d398cbadc32d691ed52bd6,\n                limb3: 0x659beaad32fe55ba9df44d9,\n            },\n            r0a1: u384 {\n                limb0: 0x98c06f5573cfa234289b62d8,\n                limb1: 0xe515dd299c6e00bc6df14c34,\n                limb2: 0x23b66fe012eb1a443038cb88,\n                limb3: 0x12f810746c2c45af5360d9bc,\n            },\n            r1a0: u384 {\n                limb0: 0x3aae5b2af57f0c9c94bb32,\n                limb1: 0x777a7e6bbc9962ab6be81f76,\n                limb2: 0x14cbce88a915fc5331313d21,\n                limb3: 0x13a52e8a1ac3c04b42218be1,\n            },\n            r1a1: u384 {\n                limb0: 0xd2b673a0bae8bfb28cff0c45,\n                limb1: 0xf95ff65fcc89601198dc8f91,\n                limb2: 0xd77322bf8488715eef3f6fb1,\n                limb3: 0xf1277bfb59098f10a9131b5,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x994b3340947e0dfc5f4449bf,\n                limb1: 0xf2a54d7464f1f50b95abe9d8,\n                limb2: 0xaa05f45202de8ae127c3d64b,\n                limb3: 0x105819b4d71c03790bfeb092,\n            },\n            r0a1: u384 {\n                limb0: 0xdbca0a627c296fe7aad607f1,\n                limb1: 0x7a8255ce902319b92cd065be,\n                limb2: 0x7b50bc220077a52b59ce5307,\n                limb3: 0xf9e05915fae54c347b88c1e,\n            },\n            r1a0: u384 {\n                limb0: 0x2cac98351a30b0b82a54b79e,\n                limb1: 0xed07531e9f2463331277b6f3,\n                limb2: 0x12b3ebca243e04ae826f6c33,\n                limb3: 0x12969325aa2fdc65900e8a68,\n            },\n            r1a1: u384 {\n                limb0: 0xb0799b5a24a5ceb48429df27,\n                limb1: 0x2ee6d0a37a7ddc7798f3bc77,\n                limb2: 0x63ec626451e43c56ff92bafb,\n                limb3: 0x50818d39d6234b4dc233a38,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x994b3340947e0dfc5f4449bf,\n                limb1: 0xf2a54d7464f1f50b95abe9d8,\n                limb2: 0xaa05f45202de8ae127c3d64b,\n                limb3: 0x105819b4d71c03790bfeb092,\n            },\n            r0a1: u384 {\n                limb0: 0xdbca0a627c296fe7aad607f1,\n                limb1: 0x7a8255ce902319b92cd065be,\n                limb2: 0x7b50bc220077a52b59ce5307,\n                limb3: 0xf9e05915fae54c347b88c1e,\n            },\n            r1a0: u384 {\n                limb0: 0x2cac98351a30b0b82a54b79e,\n                limb1: 0xed07531e9f2463331277b6f3,\n                limb2: 0x12b3ebca243e04ae826f6c33,\n                limb3: 0x12969325aa2fdc65900e8a68,\n            },\n            r1a1: u384 {\n                limb0: 0xb0799b5a24a5ceb48429df27,\n                limb1: 0x2ee6d0a37a7ddc7798f3bc77,\n                limb2: 0x63ec626451e43c56ff92bafb,\n                limb3: 0x50818d39d6234b4dc233a38,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xb67cc5f083f96e39a134d194,\n                limb1: 0xaf9e780b6c4a7184061027d7,\n                limb2: 0xdcda4477070e92cdf3397d43,\n                limb3: 0x6a696f2522cc9af3d082748,\n            },\n            r0a1: u384 {\n                limb0: 0x392c02806e22eca0d48618e7,\n                limb1: 0x8aba49a57d2d347b3df198c6,\n                limb2: 0x754cc050d1a93ac3f85ce805,\n                limb3: 0xe759f363f34e4784dc65a71,\n            },\n            r1a0: u384 {\n                limb0: 0xd34741277335bd3799ea321e,\n                limb1: 0xdd6641b8fbd73a1428f041ea,\n                limb2: 0xe38c8915296a5c201145b868,\n                limb3: 0x105d879c98b5261f00ea9de9,\n            },\n            r1a1: u384 {\n                limb0: 0x5c96d186d5a39ffc6149aefc,\n                limb1: 0xe4f274d1b18b7edb57fc9918,\n                limb2: 0xea1f8cfaa190965fbae29234,\n                limb3: 0x110e5f288f9b57423dcde8a7,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xb67cc5f083f96e39a134d194,\n                limb1: 0xaf9e780b6c4a7184061027d7,\n                limb2: 0xdcda4477070e92cdf3397d43,\n                limb3: 0x6a696f2522cc9af3d082748,\n            },\n            r0a1: u384 {\n                limb0: 0x392c02806e22eca0d48618e7,\n                limb1: 0x8aba49a57d2d347b3df198c6,\n                limb2: 0x754cc050d1a93ac3f85ce805,\n                limb3: 0xe759f363f34e4784dc65a71,\n            },\n            r1a0: u384 {\n                limb0: 0xd34741277335bd3799ea321e,\n                limb1: 0xdd6641b8fbd73a1428f041ea,\n                limb2: 0xe38c8915296a5c201145b868,\n                limb3: 0x105d879c98b5261f00ea9de9,\n            },\n            r1a1: u384 {\n                limb0: 0x5c96d186d5a39ffc6149aefc,\n                limb1: 0xe4f274d1b18b7edb57fc9918,\n                limb2: 0xea1f8cfaa190965fbae29234,\n                limb3: 0x110e5f288f9b57423dcde8a7,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xfd988b3fefee9bec8d580624,\n                limb1: 0xea8b268179a0cff5e5a733de,\n                limb2: 0xc3261de3bb0dae36dd3a12d1,\n                limb3: 0xe0311c57778716dd26ec448,\n            },\n            r0a1: u384 {\n                limb0: 0xbd3bb91f6aebae19c756f359,\n                limb1: 0x8ddb3cfc5cbb0a427decde5c,\n                limb2: 0xa3ee67368948da84ef76cc9c,\n                limb3: 0x386b903ec5f7b21375b440b,\n            },\n            r1a0: u384 {\n                limb0: 0xf101c44cc5023657f2d800ce,\n                limb1: 0xe3c33e1823e3fbd36e6ec7f3,\n                limb2: 0xb72b4d93169a4b6f53c98bd8,\n                limb3: 0xfe4e73b7283c84a94493193,\n            },\n            r1a1: u384 {\n                limb0: 0x72d680350e90ad8a1b951514,\n                limb1: 0xbcc457b76fcdb17ec8734b67,\n                limb2: 0xc2f60e7bf5f241b7e5cee4a0,\n                limb3: 0x16aaebbc648697f433c2261d,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xfd988b3fefee9bec8d580624,\n                limb1: 0xea8b268179a0cff5e5a733de,\n                limb2: 0xc3261de3bb0dae36dd3a12d1,\n                limb3: 0xe0311c57778716dd26ec448,\n            },\n            r0a1: u384 {\n                limb0: 0xbd3bb91f6aebae19c756f359,\n                limb1: 0x8ddb3cfc5cbb0a427decde5c,\n                limb2: 0xa3ee67368948da84ef76cc9c,\n                limb3: 0x386b903ec5f7b21375b440b,\n            },\n            r1a0: u384 {\n                limb0: 0xf101c44cc5023657f2d800ce,\n                limb1: 0xe3c33e1823e3fbd36e6ec7f3,\n                limb2: 0xb72b4d93169a4b6f53c98bd8,\n                limb3: 0xfe4e73b7283c84a94493193,\n            },\n            r1a1: u384 {\n                limb0: 0x72d680350e90ad8a1b951514,\n                limb1: 0xbcc457b76fcdb17ec8734b67,\n                limb2: 0xc2f60e7bf5f241b7e5cee4a0,\n                limb3: 0x16aaebbc648697f433c2261d,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6f85133f411d25e0b5f35e4e,\n                limb1: 0xc638badc6521e71c561777f7,\n                limb2: 0x8353d2452d7ab56d813e41e4,\n                limb3: 0x10bc8e7f6b5289bdc1c5fa9f,\n            },\n            r0a1: u384 {\n                limb0: 0xab5f1742cb30521d01daacc0,\n                limb1: 0x9e56c445377075119d1596a4,\n                limb2: 0xa72211611536639fe4976d69,\n                limb3: 0x11f238149a22f79fa16cb32b,\n            },\n            r1a0: u384 {\n                limb0: 0x8367fe7274231c74704c80ff,\n                limb1: 0xa8e2ad1a7f0c36a34b48cd88,\n                limb2: 0x7faca91a72963d25472465c,\n                limb3: 0x1311fd26e3b83c10952fb826,\n            },\n            r1a1: u384 {\n                limb0: 0xae246df1f149439c747384f1,\n                limb1: 0x68a615ee2f9d7f8d56f2174b,\n                limb2: 0xf64d48e37e9111200271d2ee,\n                limb3: 0x2daa9898e27bc3d9ce26195,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x6f85133f411d25e0b5f35e4e,\n                limb1: 0xc638badc6521e71c561777f7,\n                limb2: 0x8353d2452d7ab56d813e41e4,\n                limb3: 0x10bc8e7f6b5289bdc1c5fa9f,\n            },\n            r0a1: u384 {\n                limb0: 0xab5f1742cb30521d01daacc0,\n                limb1: 0x9e56c445377075119d1596a4,\n                limb2: 0xa72211611536639fe4976d69,\n                limb3: 0x11f238149a22f79fa16cb32b,\n            },\n            r1a0: u384 {\n                limb0: 0x8367fe7274231c74704c80ff,\n                limb1: 0xa8e2ad1a7f0c36a34b48cd88,\n                limb2: 0x7faca91a72963d25472465c,\n                limb3: 0x1311fd26e3b83c10952fb826,\n            },\n            r1a1: u384 {\n                limb0: 0xae246df1f149439c747384f1,\n                limb1: 0x68a615ee2f9d7f8d56f2174b,\n                limb2: 0xf64d48e37e9111200271d2ee,\n                limb3: 0x2daa9898e27bc3d9ce26195,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x293cdab968151d9a88ba8197,\n                limb1: 0x91e20a097317fbf539a50489,\n                limb2: 0x60d594dea296004ee2824b62,\n                limb3: 0x190b7e72bd6ee0ed0faf4962,\n            },\n            r0a1: u384 {\n                limb0: 0xb5b5a519c745663a2d0a6a22,\n                limb1: 0xe8d8005fede56d9bb7f102ac,\n                limb2: 0x1534acc00cf17be37afd327d,\n                limb3: 0xb3c34b4025f50c09d86ccf1,\n            },\n            r1a0: u384 {\n                limb0: 0x8a28c9f5c487242be3157d10,\n                limb1: 0x35adb9f220d3910e8e7e628a,\n                limb2: 0x8a53a50706970f599abb8b1,\n                limb3: 0x1813805985492b229d25c9c0,\n            },\n            r1a1: u384 {\n                limb0: 0x53f421abc7375d7ef5f4ea15,\n                limb1: 0x3453e28c8b88718a6bd2122c,\n                limb2: 0x181dbbb6144062890a582400,\n                limb3: 0xe27d7ff293c8253269fc184,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x293cdab968151d9a88ba8197,\n                limb1: 0x91e20a097317fbf539a50489,\n                limb2: 0x60d594dea296004ee2824b62,\n                limb3: 0x190b7e72bd6ee0ed0faf4962,\n            },\n            r0a1: u384 {\n                limb0: 0xb5b5a519c745663a2d0a6a22,\n                limb1: 0xe8d8005fede56d9bb7f102ac,\n                limb2: 0x1534acc00cf17be37afd327d,\n                limb3: 0xb3c34b4025f50c09d86ccf1,\n            },\n            r1a0: u384 {\n                limb0: 0x8a28c9f5c487242be3157d10,\n                limb1: 0x35adb9f220d3910e8e7e628a,\n                limb2: 0x8a53a50706970f599abb8b1,\n                limb3: 0x1813805985492b229d25c9c0,\n            },\n            r1a1: u384 {\n                limb0: 0x53f421abc7375d7ef5f4ea15,\n                limb1: 0x3453e28c8b88718a6bd2122c,\n                limb2: 0x181dbbb6144062890a582400,\n                limb3: 0xe27d7ff293c8253269fc184,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x788ac954b6de3b9ef5a6c12c,\n                limb1: 0xe13873c4ba9728c89be70b9a,\n                limb2: 0x5d6b9d45c0985f271595d4c9,\n                limb3: 0x1954917fe709faff9865ebc3,\n            },\n            r0a1: u384 {\n                limb0: 0x93fca181f0664865a2fc75fe,\n                limb1: 0x535e2e42a4a967f7ca763127,\n                limb2: 0xce90cca6dfec0e2e8fae9e3,\n                limb3: 0xd086b29c92aaddb7245299d,\n            },\n            r1a0: u384 {\n                limb0: 0x4ef1ed09cae08920a78f3bd7,\n                limb1: 0x6714e095d8cc53e3829f2b5a,\n                limb2: 0x9022123e8d70a0049ccb62a6,\n                limb3: 0xef311f53ea87dc5da3ddd33,\n            },\n            r1a1: u384 {\n                limb0: 0xbc5ec58d4c68ebde3ce5d6af,\n                limb1: 0x91f1285170fbc3c4d812f3aa,\n                limb2: 0x13eec60eefd5588477e432d8,\n                limb3: 0x74a34dc5c8359340c5fe4f1,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x788ac954b6de3b9ef5a6c12c,\n                limb1: 0xe13873c4ba9728c89be70b9a,\n                limb2: 0x5d6b9d45c0985f271595d4c9,\n                limb3: 0x1954917fe709faff9865ebc3,\n            },\n            r0a1: u384 {\n                limb0: 0x93fca181f0664865a2fc75fe,\n                limb1: 0x535e2e42a4a967f7ca763127,\n                limb2: 0xce90cca6dfec0e2e8fae9e3,\n                limb3: 0xd086b29c92aaddb7245299d,\n            },\n            r1a0: u384 {\n                limb0: 0x4ef1ed09cae08920a78f3bd7,\n                limb1: 0x6714e095d8cc53e3829f2b5a,\n                limb2: 0x9022123e8d70a0049ccb62a6,\n                limb3: 0xef311f53ea87dc5da3ddd33,\n            },\n            r1a1: u384 {\n                limb0: 0xbc5ec58d4c68ebde3ce5d6af,\n                limb1: 0x91f1285170fbc3c4d812f3aa,\n                limb2: 0x13eec60eefd5588477e432d8,\n                limb3: 0x74a34dc5c8359340c5fe4f1,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x46d409dd77b17a23fc402a34,\n                limb1: 0x26d0e70f78ec18c019c2f074,\n                limb2: 0x98d531c6d1b75c297e5f3c9,\n                limb3: 0x3a571d848cc57291ff2ffa,\n            },\n            r0a1: u384 {\n                limb0: 0x9220d2160322f603fa59c76,\n                limb1: 0xf7811520cd515d496363e693,\n                limb2: 0x2c5614352975026f33861c37,\n                limb3: 0x17644f4fbe80675d0953c99d,\n            },\n            r1a0: u384 {\n                limb0: 0x4aaca6cc8c9d33c63c0f1d1b,\n                limb1: 0xe45b1fa9442911a2857ec8fa,\n                limb2: 0x32c9f0ff272cf03afd720f7d,\n                limb3: 0x1e0242dad0177697c8a0aff,\n            },\n            r1a1: u384 {\n                limb0: 0x728463c48b5aea9ca697e90b,\n                limb1: 0x7b8f08b990bfcb2db30c3193,\n                limb2: 0x7232cfafe8d7566719d9c4af,\n                limb3: 0x5f1c40f1c28ca2cf8f83994,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x46d409dd77b17a23fc402a34,\n                limb1: 0x26d0e70f78ec18c019c2f074,\n                limb2: 0x98d531c6d1b75c297e5f3c9,\n                limb3: 0x3a571d848cc57291ff2ffa,\n            },\n            r0a1: u384 {\n                limb0: 0x9220d2160322f603fa59c76,\n                limb1: 0xf7811520cd515d496363e693,\n                limb2: 0x2c5614352975026f33861c37,\n                limb3: 0x17644f4fbe80675d0953c99d,\n            },\n            r1a0: u384 {\n                limb0: 0x4aaca6cc8c9d33c63c0f1d1b,\n                limb1: 0xe45b1fa9442911a2857ec8fa,\n                limb2: 0x32c9f0ff272cf03afd720f7d,\n                limb3: 0x1e0242dad0177697c8a0aff,\n            },\n            r1a1: u384 {\n                limb0: 0x728463c48b5aea9ca697e90b,\n                limb1: 0x7b8f08b990bfcb2db30c3193,\n                limb2: 0x7232cfafe8d7566719d9c4af,\n                limb3: 0x5f1c40f1c28ca2cf8f83994,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf6913070c37af578aa1b9a37,\n                limb1: 0x664781917f37151d3a0d627a,\n                limb2: 0x9d5cd2ddf7dd66c044a101e6,\n                limb3: 0x13cc21b4e1f7c288d1b899ad,\n            },\n            r0a1: u384 {\n                limb0: 0x5607928bdfad47c77f840a3,\n                limb1: 0xdd3d8bf376d25ba8b3a926aa,\n                limb2: 0x35c034874a2ccd33ec0fedad,\n                limb3: 0x176b6eb4cbcedd0416d8b2e9,\n            },\n            r1a0: u384 {\n                limb0: 0x1f81c4f93cff2721578a1cd7,\n                limb1: 0x7908a9522938e77f3e279a41,\n                limb2: 0x7fdc79ff7c835d873ab01ed2,\n                limb3: 0x11e3d19be097dc7e63b49b10,\n            },\n            r1a1: u384 {\n                limb0: 0x235b99292b27c9efd6a59ff4,\n                limb1: 0x82cb49f680a93e6e718e3689,\n                limb2: 0x710cd7d6390eca09a291ad52,\n                limb3: 0xf60ffe1a70c2771c44ee20f,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xf6913070c37af578aa1b9a37,\n                limb1: 0x664781917f37151d3a0d627a,\n                limb2: 0x9d5cd2ddf7dd66c044a101e6,\n                limb3: 0x13cc21b4e1f7c288d1b899ad,\n            },\n            r0a1: u384 {\n                limb0: 0x5607928bdfad47c77f840a3,\n                limb1: 0xdd3d8bf376d25ba8b3a926aa,\n                limb2: 0x35c034874a2ccd33ec0fedad,\n                limb3: 0x176b6eb4cbcedd0416d8b2e9,\n            },\n            r1a0: u384 {\n                limb0: 0x1f81c4f93cff2721578a1cd7,\n                limb1: 0x7908a9522938e77f3e279a41,\n                limb2: 0x7fdc79ff7c835d873ab01ed2,\n                limb3: 0x11e3d19be097dc7e63b49b10,\n            },\n            r1a1: u384 {\n                limb0: 0x235b99292b27c9efd6a59ff4,\n                limb1: 0x82cb49f680a93e6e718e3689,\n                limb2: 0x710cd7d6390eca09a291ad52,\n                limb3: 0xf60ffe1a70c2771c44ee20f,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x8b2d5026a69128c8dcd7fa01,\n                limb1: 0xa28af7e6845ec126ce674de3,\n                limb2: 0x74618fcee9375eaffe329a57,\n                limb3: 0xd495764b344945c1bbf2528,\n            },\n            r0a1: u384 {\n                limb0: 0xc7191fe7d9c67d8956440c8e,\n                limb1: 0x9886e12a6f751b086c256b4e,\n                limb2: 0x2d800e1229e7acc62268ce86,\n                limb3: 0x8a1766c3924e9fe41995f27,\n            },\n            r1a0: u384 {\n                limb0: 0xe95730415bdae7fa69798292,\n                limb1: 0x550a77eda4e6fd2f0bea1e69,\n                limb2: 0xad91cd00e401b4c4d699ac6,\n                limb3: 0x147171fe6dce69e5291e5d4,\n            },\n            r1a1: u384 {\n                limb0: 0x3950881f65abb4ae1b59bbca,\n                limb1: 0x588580a38b689b30f05b80bd,\n                limb2: 0x77cb4489a340d3748044c17c,\n                limb3: 0xda658ea95a6fefe83fa39d1,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0x8b2d5026a69128c8dcd7fa01,\n                limb1: 0xa28af7e6845ec126ce674de3,\n                limb2: 0x74618fcee9375eaffe329a57,\n                limb3: 0xd495764b344945c1bbf2528,\n            },\n            r0a1: u384 {\n                limb0: 0xc7191fe7d9c67d8956440c8e,\n                limb1: 0x9886e12a6f751b086c256b4e,\n                limb2: 0x2d800e1229e7acc62268ce86,\n                limb3: 0x8a1766c3924e9fe41995f27,\n            },\n            r1a0: u384 {\n                limb0: 0xe95730415bdae7fa69798292,\n                limb1: 0x550a77eda4e6fd2f0bea1e69,\n                limb2: 0xad91cd00e401b4c4d699ac6,\n                limb3: 0x147171fe6dce69e5291e5d4,\n            },\n            r1a1: u384 {\n                limb0: 0x3950881f65abb4ae1b59bbca,\n                limb1: 0x588580a38b689b30f05b80bd,\n                limb2: 0x77cb4489a340d3748044c17c,\n                limb3: 0xda658ea95a6fefe83fa39d1,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xfb36382a07a0546177544af4,\n                limb1: 0x98af0f0579819a56ea21677c,\n                limb2: 0xaba237656261d369d5d808d6,\n                limb3: 0xc9fb6adc6528d40d93c0da4,\n            },\n            r0a1: u384 {\n                limb0: 0x5c117b9250db1f77095f3f80,\n                limb1: 0xda15f91e9282ff6deb2a2558,\n                limb2: 0xaa820f7393229d9126ae7b62,\n                limb3: 0x110c5e918c554c126361e32e,\n            },\n            r1a0: u384 {\n                limb0: 0xac056d30f948e924aa511f05,\n                limb1: 0x31318c843660bb21180267e1,\n                limb2: 0xb22b2d85ae7080079ab0bc7e,\n                limb3: 0x14941dda97edcedd3d32ad23,\n            },\n            r1a1: u384 {\n                limb0: 0x876fd0749511e318e84cc37e,\n                limb1: 0x71b4a1c6b941f0bd7731cf3a,\n                limb2: 0x54e1fb48d3305bd534e5132f,\n                limb3: 0x262c905d8278be2f7a9d1ea,\n            },\n        },\n        G2Line {\n            r0a0: u384 {\n                limb0: 0xfb36382a07a0546177544af4,\n                limb1: 0x98af0f0579819a56ea21677c,\n                limb2: 0xaba237656261d369d5d808d6,\n                limb3: 0xc9fb6adc6528d40d93c0da4,\n            },\n            r0a1: u384 {\n                limb0: 0x5c117b9250db1f77095f3f80,\n                limb1: 0xda15f91e9282ff6deb2a2558,\n                limb2: 0xaa820f7393229d9126ae7b62,\n                limb3: 0x110c5e918c554c126361e32e,\n            },\n            r1a0: u384 {\n                limb0: 0xac056d30f948e924aa511f05,\n                limb1: 0x31318c843660bb21180267e1,\n                limb2: 0xb22b2d85ae7080079ab0bc7e,\n                limb3: 0x14941dda97edcedd3d32ad23,\n            },\n            r1a1: u384 {\n                limb0: 0x876fd0749511e318e84cc37e,\n                limb1: 0x71b4a1c6b941f0bd7731cf3a,\n                limb2: 0x54e1fb48d3305bd534e5132f,\n                limb3: 0x262c905d8278be2f7a9d1ea,\n            },\n        },\n    ]\n        .span();\n    let hint = MPCheckHintBLS12_381 {\n        lambda_root_inverse: E12D {\n            w0: u384 {\n                limb0: 0x8bdaa3278720844c37567039,\n                limb1: 0xd2f1409607d64c54b73d78aa,\n                limb2: 0x2f6a4e683585d4ccc465352a,\n                limb3: 0x105016815aeab4c1b10cba42,\n            },\n            w1: u384 {\n                limb0: 0xf14f1369d17825c133efc2d6,\n                limb1: 0xece7f8c4810788c9023c2ad2,\n                limb2: 0x8a7a3dca8c8fe5ccf68c0b23,\n                limb3: 0xe11367a38a9da9df3424073,\n            },\n            w2: u384 {\n                limb0: 0xbf3c140b105713ed07834b4a,\n                limb1: 0x31325aee1b1dbae62f7c153,\n                limb2: 0xf1712c06213e43c0272585dc,\n                limb3: 0x13e42c3e0801ac2144a06fb,\n            },\n            w3: u384 {\n                limb0: 0x713b362105bba1e8fcbb94a0,\n                limb1: 0x7336f37c2c0d759c4ff697bf,\n                limb2: 0xc61d5ab0a8dc2dffbaa7e2dc,\n                limb3: 0xc759210484ca64b6a064096,\n            },\n            w4: u384 {\n                limb0: 0xdb2b0eb950e9144b7f2f02fa,\n                limb1: 0x83f2d1513c7ce01407cbcbeb,\n                limb2: 0x3acef2763be703fa77d90506,\n                limb3: 0xd6a3922a006a5ac269f1105,\n            },\n            w5: u384 {\n                limb0: 0xd7a563e564895cf2511754e1,\n                limb1: 0xc5ec4b01df1cb55da421916c,\n                limb2: 0x6a17068bd9eb8099e645e126,\n                limb3: 0xde779332fd6d9f465b20e6a,\n            },\n            w6: u384 {\n                limb0: 0x62b4676a303984e5006cae4a,\n                limb1: 0xf48de62916116cc249eda468,\n                limb2: 0x30355b613eab563b9cb9b14a,\n                limb3: 0x92dc96c5c90e4a4e20a4cc8,\n            },\n            w7: u384 {\n                limb0: 0x2adef7cf0ce5e70667934f1c,\n                limb1: 0x49df16aef14c96dda3795592,\n                limb2: 0x90675022b9d62cbd8685978d,\n                limb3: 0xe6467206b01d8ecaea8fdd,\n            },\n            w8: u384 {\n                limb0: 0x5a0918f6778263817954d908,\n                limb1: 0xf1cea39accc8cc574af25807,\n                limb2: 0xeb067bfcab205abe6c371677,\n                limb3: 0x33f8a5722e1821e1f8c5f4a,\n            },\n            w9: u384 {\n                limb0: 0x5bec5a38ecbb7806f62dcc79,\n                limb1: 0xcf4fd2a6884e312f05ffe06b,\n                limb2: 0x59da93e49907f3bcb160ed13,\n                limb3: 0x130fe108a81a7753e3f765d5,\n            },\n            w10: u384 {\n                limb0: 0x675bac7aed2b433f922616d3,\n                limb1: 0x2f2f405981e6aca41db75f4d,\n                limb2: 0x5c5e051f326dbaef7f17399b,\n                limb3: 0xcd24160fefddfaa66c9468a,\n            },\n            w11: u384 {\n                limb0: 0x82d362ba811d62d7264e9909,\n                limb1: 0x6e0c09afc5dbcf4dffd7fc05,\n                limb2: 0x30ce07f0ccb46385c2b2b40a,\n                limb3: 0x17f2b41158bbf2cb53644eae,\n            },\n        },\n        w: MillerLoopResultScalingFactor {\n            w0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            w2: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            w4: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            w6: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            w8: u384 {\n                limb0: 0x79b43033d2c6148ace378dd,\n                limb1: 0xc6a64d7c9213ad89ad6e2940,\n                limb2: 0x6935c3e1b9cf1af588eafb63,\n                limb3: 0x66ba50e8c99edbeedf33b87,\n            },\n            w10: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        },\n        Ris: array![\n            E12D {\n                w0: u384 {\n                    limb0: 0x5e87a33f78e1f9158930afbe,\n                    limb1: 0xb03343f0ba8a9f2239714f7b,\n                    limb2: 0x9b36f2ea6a63c232dd98cdfc,\n                    limb3: 0x12fa722de4e2d3218998c810,\n                },\n                w1: u384 {\n                    limb0: 0xc9f693551a877941adc4d9e5,\n                    limb1: 0x55a0971be122dcda5e5c3c8,\n                    limb2: 0x7c004df041a155e3b48cdf91,\n                    limb3: 0x959ea623e7d5b6f547c34aa,\n                },\n                w2: u384 {\n                    limb0: 0x7b00e2956467ad946b1cbad4,\n                    limb1: 0xb3dddc7d363c4618d35bbfd0,\n                    limb2: 0x67f8fcf4c55fc2cd48e50cff,\n                    limb3: 0x155823e0d57749245ea41a2d,\n                },\n                w3: u384 {\n                    limb0: 0xac48c31201b554c29ed60ab6,\n                    limb1: 0xd5f6cd8404db4fba9b6b1908,\n                    limb2: 0x2a12dd0e1ba2a2c71c111daa,\n                    limb3: 0xeec9f4d9359e16042385ce1,\n                },\n                w4: u384 {\n                    limb0: 0x612b6944bb47d6ef40f0a521,\n                    limb1: 0x8d9728d2c62f0e796f49eef1,\n                    limb2: 0xef1cf82ad9649cdaf92b4dad,\n                    limb3: 0x16338f7d8ffc1e1319fc335b,\n                },\n                w5: u384 {\n                    limb0: 0x9ea8de19e0e2a79e3da646e8,\n                    limb1: 0x71979065bb38d55f71156ee4,\n                    limb2: 0x8f7025473478c1bc198be805,\n                    limb3: 0x187985494ec2b58fdcbde38d,\n                },\n                w6: u384 {\n                    limb0: 0x96686495d190b64a7ea79e6e,\n                    limb1: 0x89a11b76e803f02eb0d472b0,\n                    limb2: 0x6528eebe102cbb5374fe497f,\n                    limb3: 0xd3cc49ff4fec483e733e76d,\n                },\n                w7: u384 {\n                    limb0: 0x82a3ef2511fe244c62bd5677,\n                    limb1: 0x52f0c10aafffafc1cf866828,\n                    limb2: 0x3cfe5bcd4718b63e76a65b17,\n                    limb3: 0x2e63847fb6ea974a63e85df,\n                },\n                w8: u384 {\n                    limb0: 0xe04c4235ae17a9fab047b993,\n                    limb1: 0x9ade428b70a43c53f180123c,\n                    limb2: 0x892fce8b94f415a31260f4a5,\n                    limb3: 0x14939c716e672d2e4f93049d,\n                },\n                w9: u384 {\n                    limb0: 0x2076170f69cca61e8266cf77,\n                    limb1: 0xa94c356ff22eb446d1816afa,\n                    limb2: 0x7b5ee869ff77574fbd075e32,\n                    limb3: 0x18c4c735d8759f9d05c97b53,\n                },\n                w10: u384 {\n                    limb0: 0x87b2d06f00ce9210f880f777,\n                    limb1: 0x270fa1aa87ff48d0c7029e08,\n                    limb2: 0xd7a0a067fdef49ae272a9cee,\n                    limb3: 0x2670fa59b1931a9f41abca2,\n                },\n                w11: u384 {\n                    limb0: 0x1d6670cd3b34ffaf62d4d572,\n                    limb1: 0x2a6da26183af5ba37e45e771,\n                    limb2: 0x2a68a3421c934fb0eb0a917c,\n                    limb3: 0x51f182c87581744f24c2335,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xa5f19f0768085bfad6e01cd4,\n                    limb1: 0xdb5ba1fd09ac91a4ae47652f,\n                    limb2: 0x2b13b3f3a78d5dc5c4d512a1,\n                    limb3: 0x8ce9c32b58bdfd51336a482,\n                },\n                w1: u384 {\n                    limb0: 0xe2f45c49eb706f9f80de75ea,\n                    limb1: 0x2f2a290fef99d780bdbb0c7a,\n                    limb2: 0xde3a67d7d6bc965776584229,\n                    limb3: 0xddda4d389f0c2b9300d301a,\n                },\n                w2: u384 {\n                    limb0: 0x48376e71dfcc68f658e47c4c,\n                    limb1: 0xcac6cb5c19f8d13b4df976d,\n                    limb2: 0x84384bb472feb3909e7ed3f8,\n                    limb3: 0xa4c6d75fd40944d23efad65,\n                },\n                w3: u384 {\n                    limb0: 0x5706ae17c1b9f75e69a7e787,\n                    limb1: 0xc7cec8901103a5ee7bbd04d7,\n                    limb2: 0x8ddb584192f1250140b1ee3,\n                    limb3: 0x13d733d54618baa778469263,\n                },\n                w4: u384 {\n                    limb0: 0x9050e16d385573cfaaf7154a,\n                    limb1: 0x82794a915ed9862237629b23,\n                    limb2: 0xa64cea16d0c28ec3f2bf97df,\n                    limb3: 0xa9ea911e3c1f16f11159bbe,\n                },\n                w5: u384 {\n                    limb0: 0x7e65b51d042ee4735403a47b,\n                    limb1: 0x319fb8dfee0f546bd682f411,\n                    limb2: 0xc23d64d72ebcfddc3ea548e2,\n                    limb3: 0x111a1b915b3b25c5b9ec5052,\n                },\n                w6: u384 {\n                    limb0: 0x7bd1cf57624895a0b3032653,\n                    limb1: 0x4961831e7409f7db175def7a,\n                    limb2: 0xb306db9676eef0f14180f0b4,\n                    limb3: 0x125ee887fc0eef7011ad0bbb,\n                },\n                w7: u384 {\n                    limb0: 0x116cbb348fef5002aab5a1a0,\n                    limb1: 0xb1c8c7d1d9cff958a4004f0c,\n                    limb2: 0xb84a0ac8e21027d24b14ddc4,\n                    limb3: 0x1169229cdff8901d09902cb5,\n                },\n                w8: u384 {\n                    limb0: 0x1046697d16f72172bef7ed16,\n                    limb1: 0xdb516839f9a0cbcbcc73b40b,\n                    limb2: 0xda4b81ca7038c6e7899437b4,\n                    limb3: 0x898ffff0cbbee98eed4ddfa,\n                },\n                w9: u384 {\n                    limb0: 0xc57fc0dc768cc4566d475c1c,\n                    limb1: 0xcd5963a848c0b4c0417f5a2e,\n                    limb2: 0x73ecaffe0aae8b6dbac48037,\n                    limb3: 0x79fd45ff01f26c32e1a83da,\n                },\n                w10: u384 {\n                    limb0: 0x1d5fdcdedff07d7317cb5f87,\n                    limb1: 0xfed3411e06c703dee8b6e5c7,\n                    limb2: 0xb5edc0395ade200d535f84ab,\n                    limb3: 0x3b6c9db7c2bec65f7929ef8,\n                },\n                w11: u384 {\n                    limb0: 0x835a3107a27c76602bb8a4e9,\n                    limb1: 0x9f1a745144ee7c13c69cd736,\n                    limb2: 0xad8ace8310aa4a6b8e6fd789,\n                    limb3: 0x142320e4351ea7b89b1ea055,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xe94b430873c2411e6cd80043,\n                    limb1: 0xe30be01010b7d9c627c228d,\n                    limb2: 0x51c2c7c9b4365780e79dc3c0,\n                    limb3: 0x6f3bceeb9b996819b8ca685,\n                },\n                w1: u384 {\n                    limb0: 0x95c356530e86a107434237b9,\n                    limb1: 0x4aa9d2df5c497600a1e350a1,\n                    limb2: 0x59381ea2332d5b1974e07ee9,\n                    limb3: 0x3049a4a61599e5e8113f1fe,\n                },\n                w2: u384 {\n                    limb0: 0xae504a32d9b39dfef2a23777,\n                    limb1: 0xd9da3a1a5469845953c6d4d7,\n                    limb2: 0x207cdf567143514f2d7f3fc8,\n                    limb3: 0x12974191549a6a396beba2bf,\n                },\n                w3: u384 {\n                    limb0: 0xa112cd0e530a494b22dfca4f,\n                    limb1: 0x18ea6ce26c166e7a7d78de70,\n                    limb2: 0x9cb0e03de354d7bf6282702a,\n                    limb3: 0x909b63c04423c5894538c19,\n                },\n                w4: u384 {\n                    limb0: 0x686333c3d129ac16d5d0ad66,\n                    limb1: 0xb15463f680076cd25cc96a52,\n                    limb2: 0x208b9c263e7d649bb3ac2736,\n                    limb3: 0x48c5ece6bb71a9d77de1d17,\n                },\n                w5: u384 {\n                    limb0: 0x57e69dc9f02cc1dde9971341,\n                    limb1: 0xa7297c6bef065a6a9b542e82,\n                    limb2: 0xc886c7dab888b9c5b38236bc,\n                    limb3: 0xdebc617818a9847334705f1,\n                },\n                w6: u384 {\n                    limb0: 0xe6056f10696a9817a2425aec,\n                    limb1: 0xeb0c85f199cd35e58fe7cbcf,\n                    limb2: 0xa246425777e777880b8a125d,\n                    limb3: 0xda706ead9599d92c2d65149,\n                },\n                w7: u384 {\n                    limb0: 0x9bf16e33aedf71df2d4615be,\n                    limb1: 0xefff1d4d74d22cd6cfaa0d54,\n                    limb2: 0x8f7e66896dad6c69fb46b6a0,\n                    limb3: 0x6025284a12405855f01f281,\n                },\n                w8: u384 {\n                    limb0: 0xc7aa07b19da3addbc2b2a7ac,\n                    limb1: 0x89af564addcf5ac140968e42,\n                    limb2: 0xb0f94c85c9d1a1140317c3f9,\n                    limb3: 0x16ffce50f413f24cc8399c64,\n                },\n                w9: u384 {\n                    limb0: 0xc11681d83427ac2c574dd74e,\n                    limb1: 0xa76eee7857186b0aeae75d7e,\n                    limb2: 0xeccab02a3412fbf189e977ac,\n                    limb3: 0x184a0251d3a98256bf42b0eb,\n                },\n                w10: u384 {\n                    limb0: 0x2c07fdd1036592df4a6f3498,\n                    limb1: 0x10f649a440ac4b37266f2219,\n                    limb2: 0x22a63f7af99b416d9bb930a5,\n                    limb3: 0x115fdf891425fbf6a4362dd6,\n                },\n                w11: u384 {\n                    limb0: 0x411ed4c1110386e3d69aaad8,\n                    limb1: 0xc92f854a1d0559c20cdf125e,\n                    limb2: 0x948d25f76bb996b92261cdc2,\n                    limb3: 0xe201b9e13565fa18bba4420,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x2ee816637d0ff936afb8192a,\n                    limb1: 0x771b55e7479b197971b078f1,\n                    limb2: 0x809429f842e6085d43c2dfd8,\n                    limb3: 0x12623c6450560ceb87d1c6ad,\n                },\n                w1: u384 {\n                    limb0: 0xeb6d6091ca6ac5b35b99eba4,\n                    limb1: 0xa6a7a574ab4b881d5074fc7d,\n                    limb2: 0x43a56d15e2274855ea77e5a1,\n                    limb3: 0x16be7b0f604c838b37f1e747,\n                },\n                w2: u384 {\n                    limb0: 0x555b0c9f5c07106cbb3f5fc5,\n                    limb1: 0xef42d2fe6dacaee0528364c4,\n                    limb2: 0xbd41cc43f3df8706302622af,\n                    limb3: 0xe2dcea4824247cacbfc4297,\n                },\n                w3: u384 {\n                    limb0: 0x93fb255d08dc8e71b39fb796,\n                    limb1: 0x1da87c5554ed815d4aac7141,\n                    limb2: 0xbaf8fdb0836e7741b324217f,\n                    limb3: 0x19e568ec730b0d8fd4db5525,\n                },\n                w4: u384 {\n                    limb0: 0x200e327ef349bbef548d1776,\n                    limb1: 0xb2d456abe3bf1e04b5899611,\n                    limb2: 0xae05f54f4449a81f4604671,\n                    limb3: 0x162689b2975c2604e0a4685c,\n                },\n                w5: u384 {\n                    limb0: 0xc6b02b729ad74be636166fc8,\n                    limb1: 0x2cfefc55cda91fd7a951573a,\n                    limb2: 0x8867af21f665b7a7fd8a6f02,\n                    limb3: 0x176cd52f992ba8fed217c160,\n                },\n                w6: u384 {\n                    limb0: 0x6c354775c20d8791793669d2,\n                    limb1: 0xf380243d419f9aec61c9e9e4,\n                    limb2: 0x24ab6a5a78f417f251ab18b2,\n                    limb3: 0x19f302018bfc588d7199c144,\n                },\n                w7: u384 {\n                    limb0: 0x52f43e2d2f77df98fb709a0c,\n                    limb1: 0x294172d5620df7163a2e150e,\n                    limb2: 0xf24eacdd84d1f5d70b8b68c1,\n                    limb3: 0x162d18d8dab6547e5a096d2f,\n                },\n                w8: u384 {\n                    limb0: 0x892c129896da39f99f72f0e2,\n                    limb1: 0x2c40af61fe531cc67546a683,\n                    limb2: 0xbccbe0a4026db352047dffba,\n                    limb3: 0x8a6b4810628e934e1415956,\n                },\n                w9: u384 {\n                    limb0: 0xa206e84f0a4d23df6ff06511,\n                    limb1: 0x8cbf6576156d7285ec9f1b68,\n                    limb2: 0x116d55d1a59d130f52984060,\n                    limb3: 0x15d4804fc77d3471b7bf1405,\n                },\n                w10: u384 {\n                    limb0: 0x531e0c7406043a22ea3e34ad,\n                    limb1: 0x8d1faf249e41a0a2e8ac800f,\n                    limb2: 0xad7bce015e4d3978fb0cdda1,\n                    limb3: 0xf30f8063668661ca0ebd8c2,\n                },\n                w11: u384 {\n                    limb0: 0x1533da47d1c4ea429dfd2495,\n                    limb1: 0x1c5bdfdd4dc1b9d6e11ffb51,\n                    limb2: 0x853362ef8f300727f4ea8d73,\n                    limb3: 0x2619aecebc65f8daf270bae,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x616ca54bea5ef71f6286e9db,\n                    limb1: 0x6ce5a76d2b62972a2ab13707,\n                    limb2: 0x32b53a08c2162aa1ee95a837,\n                    limb3: 0x128bfd33226c297592d19ded,\n                },\n                w1: u384 {\n                    limb0: 0xcc4facfcbbb91a1e3c3a9aba,\n                    limb1: 0xa590e0a709daa71b0d6fd371,\n                    limb2: 0x906ab38c0a9cfc5bd91564f2,\n                    limb3: 0x14da16be5a21292efdfabb0c,\n                },\n                w2: u384 {\n                    limb0: 0x81a973e5217a805d0f888a36,\n                    limb1: 0x58274f5c6f509cde4b0f4e5a,\n                    limb2: 0xc2440a9e7e7a7a859779f0ba,\n                    limb3: 0x14521550f97d6648241075e6,\n                },\n                w3: u384 {\n                    limb0: 0xb2a9bd1fcaf992c0021668eb,\n                    limb1: 0x9ccf56b74f1ab26b6d6ab9be,\n                    limb2: 0x816fe549db002a04eedb9e09,\n                    limb3: 0x169e5ef8091dccbfaa89609f,\n                },\n                w4: u384 {\n                    limb0: 0x71582a7c30020dc2781a23de,\n                    limb1: 0xfa09bff3c0432c74e8fb9782,\n                    limb2: 0xc060bc37bb18f1f165fe9f21,\n                    limb3: 0xd0d60bbfe488a8943c7382,\n                },\n                w5: u384 {\n                    limb0: 0xe51c7d600a303222b1443dd5,\n                    limb1: 0x2c421d1581bad4b1ce684362,\n                    limb2: 0x240e5e597ff47e268342bc08,\n                    limb3: 0x2ae81d2fb3dbf1912e36c66,\n                },\n                w6: u384 {\n                    limb0: 0xf0cc1dc4593248465748b59c,\n                    limb1: 0x9a31a99ab145a54bccce7dea,\n                    limb2: 0xed2c2e4617c78555f7d61215,\n                    limb3: 0x5e6d735233a245b22780211,\n                },\n                w7: u384 {\n                    limb0: 0x88de0b5fd8db35069051139b,\n                    limb1: 0x52bcf4adb04aae5a93d1eb1a,\n                    limb2: 0x5860e277e6ce67cd26925a08,\n                    limb3: 0x1541095aedd2a87a36fce5cb,\n                },\n                w8: u384 {\n                    limb0: 0xb79b773a3df8822db5cc474e,\n                    limb1: 0x17206d8a558c6ec7b445f402,\n                    limb2: 0x5aeeec6a9815c02665ce217e,\n                    limb3: 0x10abc052332b3bb7fc3fadd4,\n                },\n                w9: u384 {\n                    limb0: 0xeaa86f676206f32bf7169228,\n                    limb1: 0x4432637a0bd250d8204fafdb,\n                    limb2: 0xc1396d9dfe01fbec380c12d9,\n                    limb3: 0xeae8fbe6d882b3953e92e72,\n                },\n                w10: u384 {\n                    limb0: 0xf618e52b9429f1e88d3f1251,\n                    limb1: 0x1c25dcfe5d75ecd687176354,\n                    limb2: 0xf37879c40f1da5f52a2cdb38,\n                    limb3: 0x81232dec101c7c15928ab21,\n                },\n                w11: u384 {\n                    limb0: 0x40b603d2425b79cd710ee557,\n                    limb1: 0xdbb0b89a3646397437da8f84,\n                    limb2: 0x60e361e4ee2f67acda38b14e,\n                    limb3: 0x88d292cadc4d714c0f31fc7,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xfde925b26590efd93b29dc21,\n                    limb1: 0x79fa334e9e39f1cf6d597f85,\n                    limb2: 0x351ca1e01bd6f669cfc33a39,\n                    limb3: 0xaacd403561cecaae25da3e8,\n                },\n                w1: u384 {\n                    limb0: 0xfbf49b1ca286c7f34ca70db4,\n                    limb1: 0x52ae3e3ca34e2a102d3e8acb,\n                    limb2: 0xee70f348286b4f214b7e2a44,\n                    limb3: 0x19adc6e6dd23e9b87918f0d3,\n                },\n                w2: u384 {\n                    limb0: 0x360cc29b8f16a161f0bb5695,\n                    limb1: 0xe23f0c483bc3484ccfbbf75,\n                    limb2: 0x544f00069e83cfa220de35a4,\n                    limb3: 0x145f89ec3fbc9c19593fae68,\n                },\n                w3: u384 {\n                    limb0: 0x32d82fd5786426e4f0249f0e,\n                    limb1: 0xaac0cc9febb225961afd999e,\n                    limb2: 0xbfd0b5657b2f0e275599ec2d,\n                    limb3: 0x64ea70d1faa0e80ec792a74,\n                },\n                w4: u384 {\n                    limb0: 0x836319c6483c95a22c9308b9,\n                    limb1: 0x9d0fcdd8c80002b659c474b7,\n                    limb2: 0xc44e2984149175f867392f06,\n                    limb3: 0x13fdf1738cceefd7c77fccba,\n                },\n                w5: u384 {\n                    limb0: 0x38b69c65caedae1d60f4a6b,\n                    limb1: 0x476a63341944240588cd40a,\n                    limb2: 0x2c822ad9edb35cdb9398c48a,\n                    limb3: 0xfbd30b4e1561b17fad5975c,\n                },\n                w6: u384 {\n                    limb0: 0xaa5dda2031d51398be5cdaa,\n                    limb1: 0x838072096046591839743da0,\n                    limb2: 0x4b2dbad7c26ef3e750e7e8da,\n                    limb3: 0xeda6a14042c9d4e7bf9b02f,\n                },\n                w7: u384 {\n                    limb0: 0xfcc892c0fbf45ec567cf21aa,\n                    limb1: 0xad6b081ad539e5b3f081e6ea,\n                    limb2: 0x9e60e7c195d26421d13f4687,\n                    limb3: 0xe642044d3f37f6ea8897f42,\n                },\n                w8: u384 {\n                    limb0: 0x9d04e86c9b4834f0738e451a,\n                    limb1: 0xd9105203107ce7a46d995976,\n                    limb2: 0x9706b8693910cb373cb60d32,\n                    limb3: 0x14d8f8c68cdab040e35a108a,\n                },\n                w9: u384 {\n                    limb0: 0x9210fb0d45f1817d93bd99fc,\n                    limb1: 0x23c86949a3759639599da994,\n                    limb2: 0xdda9c2a5d34994981322c82b,\n                    limb3: 0xb4dc029e7276741f11943fc,\n                },\n                w10: u384 {\n                    limb0: 0xe89745492c1f82b80e23c8d0,\n                    limb1: 0xb9c873781b1837885be73f64,\n                    limb2: 0x77070c688a2a77abbe11888,\n                    limb3: 0x86daf906e8a95c38a3b481b,\n                },\n                w11: u384 {\n                    limb0: 0x72251fa4e076caba8d7e2596,\n                    limb1: 0xe91daee82b59abd08a9cb5ac,\n                    limb2: 0xc5e4c8122cacedd33cea5be8,\n                    limb3: 0x2fb080bcdfe8c56c90fca2c,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x6cdf3812d7d2ec500440d2bb,\n                    limb1: 0xcde664d9abf0e6043be0c188,\n                    limb2: 0x16e42aa6f1a259a62ebff4b,\n                    limb3: 0x144527f2e63badeffe2607e,\n                },\n                w1: u384 {\n                    limb0: 0xc82526bfc5a307f2b9e9e30b,\n                    limb1: 0xdf63ab3c0f39d7908dde39ce,\n                    limb2: 0x257aa1bc6dc3a1e2b2cb1136,\n                    limb3: 0x4f7492f6a900520c078efba,\n                },\n                w2: u384 {\n                    limb0: 0x5ae59b52a5576a972231e4f4,\n                    limb1: 0x6fdf79c79aaa7ee533f448ae,\n                    limb2: 0x9a6dd69f434272d73d12bd40,\n                    limb3: 0xbaa39a35a43b44bce2325d5,\n                },\n                w3: u384 {\n                    limb0: 0xe504a48ed83f8bcd77382d00,\n                    limb1: 0x1fdb6ea298ac1c3c0af7522d,\n                    limb2: 0x56227bf372218d4677e592a8,\n                    limb3: 0xcaec0e91d882a292e585313,\n                },\n                w4: u384 {\n                    limb0: 0x4f8be2e79b7ba3a3ac9da613,\n                    limb1: 0x7219bc5c36dcdeea294b1d83,\n                    limb2: 0x9f27e9cd48a9ee4d3e2c6383,\n                    limb3: 0x308909137cc1584e7cb9186,\n                },\n                w5: u384 {\n                    limb0: 0x7834a99d69b1f3e2b42bdcd3,\n                    limb1: 0x300aced389ad9948ca1d8c39,\n                    limb2: 0xfe3f888a08ed761acee1b1c,\n                    limb3: 0xdd41de0f3e2890eefbaaf79,\n                },\n                w6: u384 {\n                    limb0: 0xca9ab9a1739b5f5137d4ac40,\n                    limb1: 0x9ba2e33a23bc2b27e91bc510,\n                    limb2: 0xdc366bc48c0a8720af349c88,\n                    limb3: 0xc940b71841009914f7f29dd,\n                },\n                w7: u384 {\n                    limb0: 0x7711c3dd44d84334bd207762,\n                    limb1: 0xba355253aea149c9d273461c,\n                    limb2: 0x8a45011ad06e5acfea138ae1,\n                    limb3: 0xd1b7d2bb8587892435f528e,\n                },\n                w8: u384 {\n                    limb0: 0xd5c10f3e091a9acaf0886474,\n                    limb1: 0x626c2a14805abbb07cae8876,\n                    limb2: 0x66356be50aa68d09b54f071c,\n                    limb3: 0x3f1c0a601bbe3f6575e7477,\n                },\n                w9: u384 {\n                    limb0: 0xfb4552ccdf1883dbe077d13e,\n                    limb1: 0xd8b4b21222a465176a4c7744,\n                    limb2: 0x7347818431aab5489408c638,\n                    limb3: 0xf9d77cf7abe38162019e8df,\n                },\n                w10: u384 {\n                    limb0: 0x81aadeeb9df873401f32a628,\n                    limb1: 0xb93520f726c2d052f5b116d5,\n                    limb2: 0xd00b2c5d62680f3fc93d9a6,\n                    limb3: 0x17b559291ebbfe6e0574534c,\n                },\n                w11: u384 {\n                    limb0: 0x9ad70ac80ce3b8527270dc24,\n                    limb1: 0x5fbd9b265250614247c4f157,\n                    limb2: 0xf0322eaaa789d68a0f83c8f6,\n                    limb3: 0x1323275b562dca758c81b1d4,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xaba7980a06ebfac9ddd04a09,\n                    limb1: 0x26ef9c306f336efa100b11ba,\n                    limb2: 0x40393c1afce51c8f52083a5b,\n                    limb3: 0x88c312a356277e9545f6421,\n                },\n                w1: u384 {\n                    limb0: 0x50fe671710174daa78e31dcf,\n                    limb1: 0x5a2428575d62b8bbdc6bdce1,\n                    limb2: 0x18dbe1b6cdb06e3ecd5497b2,\n                    limb3: 0x63e9335b2697eb47a466830,\n                },\n                w2: u384 {\n                    limb0: 0x243fcb55d2e8070937b2e5f2,\n                    limb1: 0xb3f0fd54bf8cd30335f72fb8,\n                    limb2: 0xdc36b46d1bd1ccd2d5c317e6,\n                    limb3: 0x54fa05e31dcddca0b10647b,\n                },\n                w3: u384 {\n                    limb0: 0x178a369ede0d5f33b4088124,\n                    limb1: 0x688173ffe450814fda34adaf,\n                    limb2: 0x679b60cfa4fa68f7064b124,\n                    limb3: 0x5c210fb56be682d3515a22c,\n                },\n                w4: u384 {\n                    limb0: 0x80e33e3e2bde4084c4ecc31b,\n                    limb1: 0xcc13974ef64aef9cde3aa9f3,\n                    limb2: 0x9f66e9c5ad97d198a2226f6d,\n                    limb3: 0x25b15dff2c6064ec8a6bc71,\n                },\n                w5: u384 {\n                    limb0: 0xfefac90d2c27ea76fadfbdb6,\n                    limb1: 0xe6bcda36951c314c5fd2ca9d,\n                    limb2: 0x6b32e67596b531b9529cf2e9,\n                    limb3: 0x652300a58d5cd6e4e248a96,\n                },\n                w6: u384 {\n                    limb0: 0xb39dcebf1162dc60631b50e,\n                    limb1: 0x9a904262c61ce054c078710b,\n                    limb2: 0xcc950e9965a1b3d7a42d94ac,\n                    limb3: 0x83f7f8554815facc18fdac1,\n                },\n                w7: u384 {\n                    limb0: 0x4628f9c8fe8de0ab7b878521,\n                    limb1: 0xd4e2dc674f4251bb6dcab9c7,\n                    limb2: 0x5e6b8ac26ebd553eca2d6af9,\n                    limb3: 0xa69e14fdd6b8c0a24bc8494,\n                },\n                w8: u384 {\n                    limb0: 0xdcddcf1a486e8fa5de038782,\n                    limb1: 0xda495c8e9a173872cff839fe,\n                    limb2: 0xd503a115971a590b4ca5c531,\n                    limb3: 0x140f92b94c08399b9f00c46,\n                },\n                w9: u384 {\n                    limb0: 0xf45410cf50b2db223627396f,\n                    limb1: 0x518dc7a16e20322edfd1dff7,\n                    limb2: 0xb0ad958b70aea0c767e3cf28,\n                    limb3: 0x8d2d63cfd448ce80af04fbf,\n                },\n                w10: u384 {\n                    limb0: 0xa26f24a5d5acdbebb6ae2597,\n                    limb1: 0xa754c3d093f65f02627ef393,\n                    limb2: 0xc700c9fe30406f4b29029911,\n                    limb3: 0x13f157503df37670cdec5bb5,\n                },\n                w11: u384 {\n                    limb0: 0xf73127358c0f9e89e02146ec,\n                    limb1: 0xee6055a98cfdb3d7bbfb9469,\n                    limb2: 0x5e382cbaff9a0c1e152cfde9,\n                    limb3: 0xd2db85a3b0103b4fd8b4beb,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xb0034c0dc0470e3bd056c655,\n                    limb1: 0x68739ef9acf49ed16185f94b,\n                    limb2: 0xe5397364df8b3c4eccbd060e,\n                    limb3: 0x12bc87cbeb825883cab4c21f,\n                },\n                w1: u384 {\n                    limb0: 0x9a4f283376c9c46e6f449d80,\n                    limb1: 0x3f034aefed75e2faacf1d862,\n                    limb2: 0x7716ffd86a4f3673375706fb,\n                    limb3: 0x3346cfcd71ef93e7f3e58ec,\n                },\n                w2: u384 {\n                    limb0: 0x752d55436d4f77575db3ba3a,\n                    limb1: 0x4b21615ce3a76f38e73528e1,\n                    limb2: 0x2a79467dd6ca41febd836ed5,\n                    limb3: 0xe7558f44fcb9ba3b991a46d,\n                },\n                w3: u384 {\n                    limb0: 0x90b74252285317a40a980d51,\n                    limb1: 0xf625a1046957406fd64d36a3,\n                    limb2: 0xdd287597f3eb9e33e82d2677,\n                    limb3: 0x19d79ac4ee250bd2e0f365fd,\n                },\n                w4: u384 {\n                    limb0: 0xe7b8ebf0928a50cdc097ca80,\n                    limb1: 0x1c75acb67a4fbd8038084a85,\n                    limb2: 0x6700cd4270fb401157a956ef,\n                    limb3: 0x11c418010389f02167f7d294,\n                },\n                w5: u384 {\n                    limb0: 0xe7311b3c007c2ffeaf935df6,\n                    limb1: 0x3a969f26bacb20feb532ccae,\n                    limb2: 0xad9c7997e6a29e0dae2f57c1,\n                    limb3: 0x31d45316bbd38e161892ba1,\n                },\n                w6: u384 {\n                    limb0: 0xb836ac5fff285b97a9cfaf8a,\n                    limb1: 0x11e79fa6603cfd51966395a6,\n                    limb2: 0x241907be43b9b971573a8e1,\n                    limb3: 0x50b992346863b906e942433,\n                },\n                w7: u384 {\n                    limb0: 0x77884fb393767a1d533c0b8a,\n                    limb1: 0x75a3dfc2b4ed6292b7de2d3,\n                    limb2: 0x8db56997d672b7b27505e3ff,\n                    limb3: 0xfd375b7c1ed070088edeb4b,\n                },\n                w8: u384 {\n                    limb0: 0x217ce46babc14c3e6f804698,\n                    limb1: 0x8d2f38976a56c1930e0f9ef2,\n                    limb2: 0x206cf46bdd9bb85ec1788dfb,\n                    limb3: 0x69879bad0032e0b666ef550,\n                },\n                w9: u384 {\n                    limb0: 0xfa6e30d2ab6ea25256a7006d,\n                    limb1: 0xad6c71121a695eeb476a4cbe,\n                    limb2: 0x9ded25624cae3f7bfed45fa7,\n                    limb3: 0xbdc0cac28fed44c8a9974a6,\n                },\n                w10: u384 {\n                    limb0: 0x5f32e37fb43e4fbcd4382886,\n                    limb1: 0x25a8be4ff2142fae23203a90,\n                    limb2: 0x141071f19b469cc0cdbf36e4,\n                    limb3: 0x152a566ca9d531e91f06c8d3,\n                },\n                w11: u384 {\n                    limb0: 0xa9e30bf7189793c3dae917d9,\n                    limb1: 0xcecc2f8cf114f38941cc16e7,\n                    limb2: 0x55a8efcb2983963fd1c5d7ea,\n                    limb3: 0xe0d3178bc1e4a9281acc39d,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x85d69f2d431d2c6f1afe22b3,\n                    limb1: 0xeb3b3ba1d64653e590a78169,\n                    limb2: 0xf2df045d48326a6371a5bffa,\n                    limb3: 0x120ea922564a9885abce0f6e,\n                },\n                w1: u384 {\n                    limb0: 0x5de8b63bf3968b010da3bef4,\n                    limb1: 0xd788608863c1a08d747106fa,\n                    limb2: 0xde6d5d9aae8e97f0c2158038,\n                    limb3: 0x1832c580f19d3f73da7dd439,\n                },\n                w2: u384 {\n                    limb0: 0xf2a1d0325fe6caa419acdc37,\n                    limb1: 0x90897834506f8faa6976e0b9,\n                    limb2: 0x200e730ee8dba54a64266bdb,\n                    limb3: 0x3f427d2880d6471c9b2cec4,\n                },\n                w3: u384 {\n                    limb0: 0x854fb7b9e02882e8e2d3461e,\n                    limb1: 0xc7211649b2fbdb298e6b4935,\n                    limb2: 0xaa8bc4976bc2349ad9bb313c,\n                    limb3: 0x1557211bab3b60506b310219,\n                },\n                w4: u384 {\n                    limb0: 0x485d0305732c8c1f4d6b6f2a,\n                    limb1: 0xfed07e935e4f20dda4935b1,\n                    limb2: 0x2504416e43da5cbf988bf0c,\n                    limb3: 0xfd13a11b696f3d323002b0a,\n                },\n                w5: u384 {\n                    limb0: 0xb39dcfe5381fa64cbe569124,\n                    limb1: 0xfcc10e3db88ee4c11ab8b90c,\n                    limb2: 0x7f3dc79e449233c3c05cd4cc,\n                    limb3: 0x1a68d8218a4a298083c7ac2,\n                },\n                w6: u384 {\n                    limb0: 0x402d97fd8c450137963dc715,\n                    limb1: 0xbaabab131fbf75f84b8c4d09,\n                    limb2: 0xeac1634a2ef470848b63e082,\n                    limb3: 0x18020a7c33b6e6def47b23a7,\n                },\n                w7: u384 {\n                    limb0: 0x40747eb2ed38084318c5fd6a,\n                    limb1: 0x79c80f12fd1e9512f4c815d1,\n                    limb2: 0x3a48a5fc5d3e961ef0543995,\n                    limb3: 0x5c22e5ce258b23d32382246,\n                },\n                w8: u384 {\n                    limb0: 0x58fdf5cf39bed59b75a08248,\n                    limb1: 0xf73f318ea3a19e93473249fa,\n                    limb2: 0x302354c7cec45c0f4e22be73,\n                    limb3: 0x45dc87c70a7f4551180d0af,\n                },\n                w9: u384 {\n                    limb0: 0xea611623da31b1471f9b932,\n                    limb1: 0x32719fa75ff0141d7348d0e9,\n                    limb2: 0xb45905063c07e8c33fb9b2e9,\n                    limb3: 0x687c2df9d7f663be99d9468,\n                },\n                w10: u384 {\n                    limb0: 0xf1d27eab29c68003c6c210e1,\n                    limb1: 0xb8843060c4bc968cb7982d1b,\n                    limb2: 0xeea7620d6be4c290ade9a4fa,\n                    limb3: 0x18fe77343f6e8206f89b9744,\n                },\n                w11: u384 {\n                    limb0: 0xa444a56f7e397cfafb6930c8,\n                    limb1: 0xdae564fe2862cf1cdcad16c0,\n                    limb2: 0xbc4f53f2efefa51fdfac4891,\n                    limb3: 0x551ab423ade813eabb16804,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x5e957ccda4f73f9215fb110d,\n                    limb1: 0xdc36a49661989b5a3b5d79ee,\n                    limb2: 0xdec6eba0b4700511ff1300cc,\n                    limb3: 0x124c0cd615ff328b360ee2b9,\n                },\n                w1: u384 {\n                    limb0: 0xb236047e323f07b02f2ec515,\n                    limb1: 0x583e5738966fa3a8aad40f7f,\n                    limb2: 0xccd1bc05a2119220b4544232,\n                    limb3: 0x780b2230acf081408bbcdda,\n                },\n                w2: u384 {\n                    limb0: 0x260e2e2d6b359ac7810e7275,\n                    limb1: 0xbd1696a0a3bd92fa7fc31844,\n                    limb2: 0x742ff3c39bf81cbb48fa4a4b,\n                    limb3: 0xfe258a1791cd92b4ef3e60e,\n                },\n                w3: u384 {\n                    limb0: 0x54d88d0d9b96f02414851b3f,\n                    limb1: 0x55334650ffc5ec8e900a1d3b,\n                    limb2: 0xad3cb70cc267b5f757f7cef6,\n                    limb3: 0x794700e48a5eb285c05ed22,\n                },\n                w4: u384 {\n                    limb0: 0x1b66b0589fd79fc234125121,\n                    limb1: 0xbda857f94889f518fe44cf86,\n                    limb2: 0x9370106e7bd9937a478134d4,\n                    limb3: 0x167eb12b6b3572f0a3aca9d2,\n                },\n                w5: u384 {\n                    limb0: 0x375981f086e8cb4ef19fc188,\n                    limb1: 0xbdbe1a3fc397484a93a2b29c,\n                    limb2: 0x7a02a3f5fa8210e8f14b2276,\n                    limb3: 0xc67f4b31546be3553dd2985,\n                },\n                w6: u384 {\n                    limb0: 0x600f009107ab2a1da4997be,\n                    limb1: 0x69994acdcbfbe38056baf6f5,\n                    limb2: 0x11ccdd90a6781a41f22c760f,\n                    limb3: 0x13c5f50c127cb29bc0d17999,\n                },\n                w7: u384 {\n                    limb0: 0xffe9f03f0aa94835f9525c88,\n                    limb1: 0xfdde4a867496327c5043cc57,\n                    limb2: 0x3f6144c573c696e50855fc1,\n                    limb3: 0x6b94fcad15ff18a3c2f248f,\n                },\n                w8: u384 {\n                    limb0: 0x8884346bdd2a3341fc7322cd,\n                    limb1: 0x93ab61c19fa719030de7cc2a,\n                    limb2: 0xc757ba65e13b170ca901db80,\n                    limb3: 0x100f6a0711ba91a6f1b251b2,\n                },\n                w9: u384 {\n                    limb0: 0x12a6e600d76166876d9b3f52,\n                    limb1: 0x414068fe6847dd8ebae8539,\n                    limb2: 0xa76a533d9740918d76a56dcd,\n                    limb3: 0x5dc91d58b53e3e96acd6def,\n                },\n                w10: u384 {\n                    limb0: 0x718ec50c1dac99c6d874f4e7,\n                    limb1: 0x16d6a04ccba7bbefb03d6951,\n                    limb2: 0xeb4c2625dd73b31f645168c4,\n                    limb3: 0x6afd115d3d01e4b290b84e5,\n                },\n                w11: u384 {\n                    limb0: 0x52b5c082cd25730db3a34738,\n                    limb1: 0x6967f7eb2ca4e4a712dc0131,\n                    limb2: 0x5c5e6c3183d02ccca35ce987,\n                    limb3: 0x757bb566047196e238a8b26,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x7c9854d25a3cb0be4d2f40d7,\n                    limb1: 0x43fd00e1f4a86259c11e88ef,\n                    limb2: 0xe994cfcb5001b763f7901bb1,\n                    limb3: 0x86155b09edadffde4dfbbd7,\n                },\n                w1: u384 {\n                    limb0: 0x304a578df65f91fee6b573c4,\n                    limb1: 0xec0472b755f143bbb562ab87,\n                    limb2: 0x7277a095088372ca3f0a1d27,\n                    limb3: 0x197e53f43b82cae3374c44d8,\n                },\n                w2: u384 {\n                    limb0: 0xe11977e635d061e6b989c868,\n                    limb1: 0x1e500845921807459e23651b,\n                    limb2: 0xbec3e77afae83a1c5ea6abfb,\n                    limb3: 0x14e286717a22a735ed2bc0ee,\n                },\n                w3: u384 {\n                    limb0: 0xa1e676b1afa2d9ce1870874d,\n                    limb1: 0x7091d51696fde538628c1f6a,\n                    limb2: 0x96df8da6c99457376c4a33a9,\n                    limb3: 0x8e98a801b4c9ab4aa5d063f,\n                },\n                w4: u384 {\n                    limb0: 0xc02c8f24e55e6d222f17ca30,\n                    limb1: 0x76dd4ee9d6b6332479504760,\n                    limb2: 0x197e8f329510abb24930400a,\n                    limb3: 0x16a154ff6848bf4bfdb82d9,\n                },\n                w5: u384 {\n                    limb0: 0xbba922639ae8bf28d410a19c,\n                    limb1: 0x3086e9cd8bb7de09c46ea5d1,\n                    limb2: 0x38963f320b7441e9d6a77a5a,\n                    limb3: 0x12abf3a5df31ef34b735b45b,\n                },\n                w6: u384 {\n                    limb0: 0x8a1312c4fa12d188aa5a2fc5,\n                    limb1: 0xc1a534c21fe8d43d46d061c4,\n                    limb2: 0x19cca041bdb84797c38dd77c,\n                    limb3: 0x90f272bc677afbf4ea47fdb,\n                },\n                w7: u384 {\n                    limb0: 0x742fc53d89d385243fcac586,\n                    limb1: 0x9f1522d5dee448f1ea0bd110,\n                    limb2: 0xa6e48bd6c1d03e300f33a7be,\n                    limb3: 0x14f218097b54f125db0fa277,\n                },\n                w8: u384 {\n                    limb0: 0x4e8d1c9d0611bff11b73be65,\n                    limb1: 0x1d75932dc0fd9604caeee1db,\n                    limb2: 0xc738ab9f0ad9baad911e4207,\n                    limb3: 0x6e45511232a9e5d4095e985,\n                },\n                w9: u384 {\n                    limb0: 0xd52cce486c7f42104e9f3b7a,\n                    limb1: 0x58b30b3f567ae170e66d8aa9,\n                    limb2: 0x5e34ff47bd1c3c1eeda2872d,\n                    limb3: 0xe250f5f3302568adb516219,\n                },\n                w10: u384 {\n                    limb0: 0x7c9a5e6eca301db139ad106,\n                    limb1: 0xc2b3cc3e715be6a7efe28f96,\n                    limb2: 0xd6d1ca55ddaaf9abf16efb04,\n                    limb3: 0x10c5de68ac532bc3f398aed4,\n                },\n                w11: u384 {\n                    limb0: 0x5256c2f9aaa56fdfffc2caff,\n                    limb1: 0x90c30061f644a4c3d03f5830,\n                    limb2: 0x851db2eca15852453ab2d70e,\n                    limb3: 0x201ae57b8bd651a9a211245,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x107a402a8e5fd3d6694e2491,\n                    limb1: 0x2fcd3a87cd5349af3c857428,\n                    limb2: 0x5e7694bbf0930a85be56591b,\n                    limb3: 0x7d93547fc3384cad47215e5,\n                },\n                w1: u384 {\n                    limb0: 0x2d9484d3a15699a7a1f5cdb8,\n                    limb1: 0xf1552b9e00277c8adf417bff,\n                    limb2: 0x797fa3b98f9243d4b02d9431,\n                    limb3: 0xee3f7dfe449d9914888e159,\n                },\n                w2: u384 {\n                    limb0: 0x8cb567b9cd6c029b00fc4e41,\n                    limb1: 0xa86ba8941e760df1c880b78e,\n                    limb2: 0xe39f860fa3f881c589990047,\n                    limb3: 0xcd133ff0a3d963a38f16788,\n                },\n                w3: u384 {\n                    limb0: 0x6e71601b16aa6640cfd5d5de,\n                    limb1: 0x1e4d16be3edc7039f570f547,\n                    limb2: 0xe015353d569f8688f394214f,\n                    limb3: 0x59546e8ca3e361bfa7f3414,\n                },\n                w4: u384 {\n                    limb0: 0xcba11f8010fcb1b7018d4942,\n                    limb1: 0x1936e2410861c27516ef1950,\n                    limb2: 0xba1a67208cba4d4c43b6eb14,\n                    limb3: 0xf3d199823dda0ca4ce0f913,\n                },\n                w5: u384 {\n                    limb0: 0x4141a8ab05e48332c7a97101,\n                    limb1: 0xc11b08f6a7ade95596c91b9d,\n                    limb2: 0xc60f61f46ada4e329659dad5,\n                    limb3: 0xc713a291ca63d714b43b773,\n                },\n                w6: u384 {\n                    limb0: 0xfd82de6406270dbaa131943c,\n                    limb1: 0xd30c660ecf76e1ca4ca5df67,\n                    limb2: 0x7a3ac1af7f68fe980f73984f,\n                    limb3: 0x51b9df004712c0a919c1021,\n                },\n                w7: u384 {\n                    limb0: 0xca9fe85418e99c70b24bfbc9,\n                    limb1: 0x6c09ab753fa1bd7e5eb72928,\n                    limb2: 0x29ac58579f2e59649b78e304,\n                    limb3: 0x19bd14410529841d8976139b,\n                },\n                w8: u384 {\n                    limb0: 0x24dbe1d4f02d7ef87c2cb830,\n                    limb1: 0x16bd5c02c49e80904866a252,\n                    limb2: 0xaf1a9309f3303d6c367356ea,\n                    limb3: 0x1e19bba8cf8459f8f4dfd36,\n                },\n                w9: u384 {\n                    limb0: 0x2d779d40ef68e8d88e174d50,\n                    limb1: 0x3e8cddfef78f63c6b4492711,\n                    limb2: 0xcc77ab33895f03cb0526a45f,\n                    limb3: 0x125fdd8cf5eb4cbf87136c28,\n                },\n                w10: u384 {\n                    limb0: 0xdc1c3be866980e02cb6c6552,\n                    limb1: 0xa95aa3b3e5bd3b4f9e44b20d,\n                    limb2: 0xb044b29c621e7b2dad2234c1,\n                    limb3: 0xce6623d2aafe10b6e17cfdf,\n                },\n                w11: u384 {\n                    limb0: 0x60124efd5e01a25ae6df0508,\n                    limb1: 0x721f5b9120ddb48b58c45e92,\n                    limb2: 0x1dd4bdf5f24d952ff670777d,\n                    limb3: 0x19f4d3c0a17c210e64fdc0d0,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x840e3de720a4548f1da7be6e,\n                    limb1: 0x3ac07781ccebe03234a3c070,\n                    limb2: 0x60a15844dc5503c9619d9185,\n                    limb3: 0xabb0efbdafc1bf8dba79909,\n                },\n                w1: u384 {\n                    limb0: 0x35e738bdafcef08554231156,\n                    limb1: 0x152ec5c04b5d82140676dcb,\n                    limb2: 0x92b8cdb4123580d2823f3463,\n                    limb3: 0x6c6271bd78c3dc0ad928081,\n                },\n                w2: u384 {\n                    limb0: 0xc0885cc50b00d5788f6bfe71,\n                    limb1: 0xe0e2e4020c8e3d3aad0bb4fc,\n                    limb2: 0xa03d4b3f246f40eb91edbd0a,\n                    limb3: 0x2ad754c710d3c5a0a9c8aa7,\n                },\n                w3: u384 {\n                    limb0: 0x150f44c02d8d2ece9cc20e89,\n                    limb1: 0xbe88ea3462b0ac825a3f7683,\n                    limb2: 0x392c7bdfbcadea15c9ec3776,\n                    limb3: 0xcf868bdeb3044866e335299,\n                },\n                w4: u384 {\n                    limb0: 0x5e373df33b60f49f245eeeae,\n                    limb1: 0x32ccc0c3ab265f108c87af10,\n                    limb2: 0x24b304890cb346fddc8baecb,\n                    limb3: 0xa5602cbb5588e7a5347043,\n                },\n                w5: u384 {\n                    limb0: 0x79a45fc3a6b3476edccb39ef,\n                    limb1: 0x699737a3f0a37ccbf1351d50,\n                    limb2: 0x628e055199d024aaae669c51,\n                    limb3: 0xb7a54344f41ac4806f963c,\n                },\n                w6: u384 {\n                    limb0: 0x56763ce8241e2e4c4ebbfdf,\n                    limb1: 0xc7e7f096be44dfd4045256dc,\n                    limb2: 0x59d483ad26bd43de0be0f89b,\n                    limb3: 0x115650afb40f7cc9bfc41d67,\n                },\n                w7: u384 {\n                    limb0: 0xf761296c383bc157c0dc74d2,\n                    limb1: 0xf7ae69719276fa4a8f45a7b1,\n                    limb2: 0x9519a049398c825b8591fd3e,\n                    limb3: 0x116c67cb21786e95c1a81a42,\n                },\n                w8: u384 {\n                    limb0: 0xf88348b16f829f538445e4ae,\n                    limb1: 0x5c59ddf4cb31896b683c0532,\n                    limb2: 0x34a2ed13f5d41b79207f2bb2,\n                    limb3: 0xf05b669ee27d19d64a44624,\n                },\n                w9: u384 {\n                    limb0: 0x60c0435be32f160a839128b2,\n                    limb1: 0x5da4368729030e6e45435c2,\n                    limb2: 0xc3225b269d34d229f0daabe4,\n                    limb3: 0x16bd338ab123444102821db2,\n                },\n                w10: u384 {\n                    limb0: 0xbe99f7a76adf1a39fcd16614,\n                    limb1: 0x455ad4d2c342a9150c205cdf,\n                    limb2: 0x6c7129df025ad6c248cc3e23,\n                    limb3: 0x117d45dac2232adcc3a58865,\n                },\n                w11: u384 {\n                    limb0: 0xe7227b87d84291616d163423,\n                    limb1: 0x62f024ba3b1eeea3201b342a,\n                    limb2: 0xdba6e933ce41754f118a7c3,\n                    limb3: 0xb03ee9bfce34be38e903aa0,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xacbe4cc978644dd3b66d1251,\n                    limb1: 0x8b0827e7f460731253c48669,\n                    limb2: 0xce9fb3a4b707ceedf9e4ccd5,\n                    limb3: 0x13601ecdfe890ac5b6394083,\n                },\n                w1: u384 {\n                    limb0: 0xf7595a279ff9c75a51e66dfd,\n                    limb1: 0xc142b5880c07598137eae9b6,\n                    limb2: 0x7a5bc2021f658c6a85627610,\n                    limb3: 0x132b8e30cfd8515a3df346f7,\n                },\n                w2: u384 {\n                    limb0: 0xf6ba0f17bd64a508a34ff8cf,\n                    limb1: 0x74707c027b3fe929fc806de9,\n                    limb2: 0x22d365a315971b9f0c206a82,\n                    limb3: 0x19dbbd0c7f94d1f4ee79356,\n                },\n                w3: u384 {\n                    limb0: 0x3f626447ce3814e02b1ec0d7,\n                    limb1: 0x5c8f6f2fcf4e7e35083554c4,\n                    limb2: 0x8dbaacc8bf9b1754dfc5c7a,\n                    limb3: 0xb35d9b7d542e11dc9367339,\n                },\n                w4: u384 {\n                    limb0: 0xe625bd4cf03325a6336ecd5d,\n                    limb1: 0xc3e56498d973b972df22643,\n                    limb2: 0x4da8a81d2cb2053b00ea8fcd,\n                    limb3: 0xa642ca8b89b6a1c4e9877db,\n                },\n                w5: u384 {\n                    limb0: 0x90a8380dd53bc5b94dbe3c0f,\n                    limb1: 0x2903c25cab059c295574f591,\n                    limb2: 0xb2377f88137b3e6b90d7ef37,\n                    limb3: 0xb7c1e72e24735bde787a674,\n                },\n                w6: u384 {\n                    limb0: 0x4773b12414a16ce9d033310f,\n                    limb1: 0x9df89f470a41a445b7748c4e,\n                    limb2: 0xa96cdf868e25c1dfa2eae25a,\n                    limb3: 0x160d60066e34bef4bf67e8ba,\n                },\n                w7: u384 {\n                    limb0: 0x97741dddbadcd502d93d1ada,\n                    limb1: 0x91f945eb520c5683d7d835be,\n                    limb2: 0x3acf7014131ff4db19eab525,\n                    limb3: 0xeefb54325e312a77579cfb4,\n                },\n                w8: u384 {\n                    limb0: 0x9d6c29377b2addb30bb07eb6,\n                    limb1: 0x99fdbae79fab5cf167aff047,\n                    limb2: 0x5ade5a8e1c7b6bc090eab03b,\n                    limb3: 0x11d79b9562108c1f05e613e1,\n                },\n                w9: u384 {\n                    limb0: 0x2a7b85423fcc9846cbd9fe8f,\n                    limb1: 0xd29258a1f3d53096b5ef7341,\n                    limb2: 0x6962bcbf5cd737335faf272c,\n                    limb3: 0xbcf4003e7213cf0a16d92a8,\n                },\n                w10: u384 {\n                    limb0: 0x283fa69586ab328da624f05a,\n                    limb1: 0xe538df54e03534989f032f90,\n                    limb2: 0x8def2c7d92aeadbb57db8dd5,\n                    limb3: 0x1023a83a0bc5f302bc4918a8,\n                },\n                w11: u384 {\n                    limb0: 0xf0dd374565f0c70e62ab7914,\n                    limb1: 0xdfb1156b56c464fa271bea64,\n                    limb2: 0xfb31d547c72f0e06b7e95d05,\n                    limb3: 0x199fffdc2a5a3333d46c2722,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x8f76261cf238884bdcac039c,\n                    limb1: 0xf1a631914c8ee95d8d563038,\n                    limb2: 0x7ad15fcf82a1de05d7ca78c4,\n                    limb3: 0x17d503bf7c0186f31fb87cac,\n                },\n                w1: u384 {\n                    limb0: 0x12c73d43b1d6e5e93cffbda9,\n                    limb1: 0xc8f8aebf2cdb43903aaf1fa8,\n                    limb2: 0x5f1bb59cf75e973628df5a3c,\n                    limb3: 0x133637214037ed72a089671b,\n                },\n                w2: u384 {\n                    limb0: 0x99b289b7c895e0389505ae3e,\n                    limb1: 0x807d96bb7abc61490b0b2ae9,\n                    limb2: 0xe901e5c6b224704f999bc014,\n                    limb3: 0xb1762e3a5ab01513e934471,\n                },\n                w3: u384 {\n                    limb0: 0xc2991401ebd01d353eff0e10,\n                    limb1: 0x3f78a46de2ae77e99130d6c4,\n                    limb2: 0xe8076c850bd55b9dc399ef14,\n                    limb3: 0x1959a68b64e006097eedd9ca,\n                },\n                w4: u384 {\n                    limb0: 0x31f962a10ef81a0e881e9412,\n                    limb1: 0xed29acc9384952f5e68bda38,\n                    limb2: 0x5ad6682fe35e6be9e495e035,\n                    limb3: 0x53290025191e515d71e6a4f,\n                },\n                w5: u384 {\n                    limb0: 0x1826298b7042b45f2484b705,\n                    limb1: 0xf7754a63c6f36ead9c0722a6,\n                    limb2: 0x3e19ea5d2569e83b367df44e,\n                    limb3: 0x117cde4851820ba5a6d323a7,\n                },\n                w6: u384 {\n                    limb0: 0xb2c4b66f8d495051b1e92716,\n                    limb1: 0xebf594dc49b44c3275b03925,\n                    limb2: 0x3e1e370a07e830d358d9d527,\n                    limb3: 0x17f0f608ef7e255a7740e438,\n                },\n                w7: u384 {\n                    limb0: 0xf7eb9970e3d485405ed26e6f,\n                    limb1: 0x55504e6108e307d4c105fb01,\n                    limb2: 0x37e5a48b0089379bc4d3a960,\n                    limb3: 0x15542f45dbe73bde5df32e74,\n                },\n                w8: u384 {\n                    limb0: 0xfc2e20fbd6973e5782d582f7,\n                    limb1: 0xb0d924870a4c93a0ee8de35d,\n                    limb2: 0x554637f24083718a82311c10,\n                    limb3: 0x12764367f85796814078b42,\n                },\n                w9: u384 {\n                    limb0: 0x8fd5bd83ed527a4d26c45fe3,\n                    limb1: 0x43b7d218d10ff081da67bf2b,\n                    limb2: 0xf9fc937c157ca5ee08088e73,\n                    limb3: 0x119362054157e7dc5658fc69,\n                },\n                w10: u384 {\n                    limb0: 0xcd2d08d72116be874d6ee56d,\n                    limb1: 0x77c4f1eefb4d35ef0221d5b0,\n                    limb2: 0xacf3b9162ffc9c289bbf6928,\n                    limb3: 0x2e08e8400c38ac22655b3d3,\n                },\n                w11: u384 {\n                    limb0: 0xf4d15b649f3d55ead568462e,\n                    limb1: 0xb567200eda805f6453c250d7,\n                    limb2: 0x7be6abfce3538971d5c5f487,\n                    limb3: 0x9d5f5b42216ceaf147ac21a,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xd347ed30451ff201af63eeca,\n                    limb1: 0xad5110b2aeba89322b006323,\n                    limb2: 0xf82434189453d69149a0c0a6,\n                    limb3: 0x80326dc5e35502bbce7ac6c,\n                },\n                w1: u384 {\n                    limb0: 0xc83c82247fb95b58a4ee3810,\n                    limb1: 0x31a8674c7e68d35d98762cae,\n                    limb2: 0x9cfbb7fec0c26829164628ce,\n                    limb3: 0x16bbaaedd62985c32f4e076,\n                },\n                w2: u384 {\n                    limb0: 0x2fa6372a48bfbaadfa13763e,\n                    limb1: 0x5e40bda6de39b49e34b6cddb,\n                    limb2: 0x112c3d354dca6adf2dca4bbd,\n                    limb3: 0x31f3d996a2adee764770117,\n                },\n                w3: u384 {\n                    limb0: 0xff3ed33234b352e29be10777,\n                    limb1: 0xa48ea598a7173580b764c4b2,\n                    limb2: 0x4f673c656ed817dd15a35331,\n                    limb3: 0x2789ee0833b95e2a631106b,\n                },\n                w4: u384 {\n                    limb0: 0x9ac4d1b96cb51db76fdbee0b,\n                    limb1: 0x803a0ddd0255fcf6dab7617c,\n                    limb2: 0xd6b0af076d77742457695aff,\n                    limb3: 0x43761452a76341901155087,\n                },\n                w5: u384 {\n                    limb0: 0xbe44dbd432d048dd243c8bc3,\n                    limb1: 0x98d9d4bdc6a8954684fcdf2d,\n                    limb2: 0xcfba6c2b4124b837319047eb,\n                    limb3: 0x8a9e73497aafaafe182bc19,\n                },\n                w6: u384 {\n                    limb0: 0x8a3b064f566cf7a95dbe7548,\n                    limb1: 0x3a7f64c477a6e83e434ce861,\n                    limb2: 0x9ba7cae92f44149908673e10,\n                    limb3: 0x45103051f125fedb866d95b,\n                },\n                w7: u384 {\n                    limb0: 0x5ee818e7234e7272ec07f3d1,\n                    limb1: 0xdd4bc27187a7d422aa6df86c,\n                    limb2: 0xcbb7f78d9fe849c55f5caf73,\n                    limb3: 0x1862b91a119174f1c7aff149,\n                },\n                w8: u384 {\n                    limb0: 0xd08c79a7c7850cbda627d11c,\n                    limb1: 0x9d4f4f86dbf4a4ac0d4606f2,\n                    limb2: 0xd464fb70944a1feb5e7f92f0,\n                    limb3: 0xd5b0522da04c9aeca0608e6,\n                },\n                w9: u384 {\n                    limb0: 0x3dbd70f614fc2d3eb4edbcb8,\n                    limb1: 0xcc386604b029681e5d5de15a,\n                    limb2: 0xa03d1c9d026d090768bf5861,\n                    limb3: 0x55ff5a76816f6d652fd986a,\n                },\n                w10: u384 {\n                    limb0: 0x9d633d1f35aea7549904415e,\n                    limb1: 0xb6d0d361ca6497edc9faa721,\n                    limb2: 0x6d5289bb547465b3be8c6ad9,\n                    limb3: 0x985850e8cd4013c4b6d95cc,\n                },\n                w11: u384 {\n                    limb0: 0x7cb50dc102dcb28e77742892,\n                    limb1: 0xe2437d8286205ad782d6b72e,\n                    limb2: 0xda1f62195f31b4783bab661d,\n                    limb3: 0x15ecca5677df076e39049bb8,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x9d72d5db64cb7507239422e0,\n                    limb1: 0x264e7e57b7260676a8bb7688,\n                    limb2: 0x7344113fcc925f1d30d06dcb,\n                    limb3: 0x18de0ecba8fd3371b8aa34ca,\n                },\n                w1: u384 {\n                    limb0: 0x1861183cc4b2f46d87979e5c,\n                    limb1: 0x6e0a01a25c6ebaf9464e11e,\n                    limb2: 0x7f2de4bc5dd520e1c25ddd85,\n                    limb3: 0xe800e85c928ae4a62b295f1,\n                },\n                w2: u384 {\n                    limb0: 0x947b7670a81523ba7d89ed92,\n                    limb1: 0x14b12adacd332e3d09706640,\n                    limb2: 0x11e97f9c6bc126a2f82ea1e6,\n                    limb3: 0x10624939def344ec8c1b3cf4,\n                },\n                w3: u384 {\n                    limb0: 0x3b6a7bcdd62aecc44c37866d,\n                    limb1: 0x4f090d678ea45519842d182d,\n                    limb2: 0xcebc7bf7f3c10bfd2e6639e9,\n                    limb3: 0x1631faf829d85ac9c61de59f,\n                },\n                w4: u384 {\n                    limb0: 0x559cd524045548ae86151607,\n                    limb1: 0x6e006893ba4aa3699195e31e,\n                    limb2: 0xdc1c446eeecc785b43fb9a22,\n                    limb3: 0x123202194c62a4c9baccb009,\n                },\n                w5: u384 {\n                    limb0: 0x11fcaa3dba1a600b6010182f,\n                    limb1: 0xf01f5f9fdeb3c498d7b7cb06,\n                    limb2: 0x882cc64b2d18415e180078fa,\n                    limb3: 0x8b267ee888fef3cd7927dfb,\n                },\n                w6: u384 {\n                    limb0: 0xd6b28085df279d9394b5a7fa,\n                    limb1: 0x763cd39e04067be6fdf56c8,\n                    limb2: 0xe6dc2b118d1a64282a465791,\n                    limb3: 0xf5493b733d5896bc5700fd3,\n                },\n                w7: u384 {\n                    limb0: 0x90a1f465c6e97bcd81222eee,\n                    limb1: 0x7149530fb2e4319be2323f28,\n                    limb2: 0xc88a2ea7d5e7ff07ca2ad206,\n                    limb3: 0x162bb34dcd7e91a975c63630,\n                },\n                w8: u384 {\n                    limb0: 0x170a35595a61d913f682b57c,\n                    limb1: 0xf2c9e682be5246c93b4e6ec3,\n                    limb2: 0x2bf4029c422908fa4563de,\n                    limb3: 0x641187d200dfd28e8e82aa4,\n                },\n                w9: u384 {\n                    limb0: 0x6fa76ba0131b78d2942cadad,\n                    limb1: 0x3bb0f673c1a7b42445c6acb0,\n                    limb2: 0x60a06dde4ec45da8ec121095,\n                    limb3: 0x20100c6e96666951b26138c,\n                },\n                w10: u384 {\n                    limb0: 0xf0b483b7fa8c7e7af338816b,\n                    limb1: 0x56d359ad26375fcae41714a3,\n                    limb2: 0x873b27b4fa0b116a18158d0c,\n                    limb3: 0x12e72267a31cafa207dd8dbc,\n                },\n                w11: u384 {\n                    limb0: 0x77cdf664971600615baaec2c,\n                    limb1: 0x26bf00719aa6690f5b19075,\n                    limb2: 0xdc51ab3277d503c215650c3e,\n                    limb3: 0xc0f9441d20276e0db93c8e5,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x49b8bc0bba1b3b3e63506f5f,\n                    limb1: 0x69ae08affd3b257cc0d8bdc,\n                    limb2: 0x721d9ad5b76a8ba8f139dd3a,\n                    limb3: 0xf8ac0fbc40271dc9a22eff8,\n                },\n                w1: u384 {\n                    limb0: 0xe9e8035fd0a006b598845454,\n                    limb1: 0xdcc25fc32ad1942d93a350ee,\n                    limb2: 0xfd77a0ec6e37dc33615964d1,\n                    limb3: 0xb75169082563e4c6f1be90,\n                },\n                w2: u384 {\n                    limb0: 0xefd32d50a707ddbd100ee51b,\n                    limb1: 0x810cdffcb09eae39f48aa1e1,\n                    limb2: 0xa18a7cf96101b979a65ff7bb,\n                    limb3: 0x6cd39500720118321f2738a,\n                },\n                w3: u384 {\n                    limb0: 0x26986ba695a566d0262b9ee7,\n                    limb1: 0xaab9e0bdc5aed6c48fa8efda,\n                    limb2: 0x72f6704bebcf7ac9af380ed6,\n                    limb3: 0xe16ceb416196f23bc2560a1,\n                },\n                w4: u384 {\n                    limb0: 0x7762c889e40661d695e0dffc,\n                    limb1: 0xb8bc925ae8124f3b8c369b23,\n                    limb2: 0xb522ccf634c91621e1559f97,\n                    limb3: 0x5bacf21780b28756242dcc3,\n                },\n                w5: u384 {\n                    limb0: 0xf90a60c0d778d09b834b48c3,\n                    limb1: 0x3c87554e9260971b487713e2,\n                    limb2: 0x71220ad4dba9858bfc12ccac,\n                    limb3: 0x16db742f5078344568720d98,\n                },\n                w6: u384 {\n                    limb0: 0x485a9dcceae19bdbf2dc0cfc,\n                    limb1: 0x8e2f65401be2d31c093c53c,\n                    limb2: 0x8238a47a96eb2cde2677e2b0,\n                    limb3: 0x6039568233497b9222dfbf5,\n                },\n                w7: u384 {\n                    limb0: 0x6f64078fdd7a425f4436d862,\n                    limb1: 0x64d28a2586ab1e7f2bf280f4,\n                    limb2: 0x1f66c4e09e8145a306b09bea,\n                    limb3: 0x813c1ecd8822f2944b930ae,\n                },\n                w8: u384 {\n                    limb0: 0x4060ce7fd6ea39ae7a74236c,\n                    limb1: 0xd45a1c125ec3bc1614862318,\n                    limb2: 0xa88ab4b47d71797470a4ca95,\n                    limb3: 0x68574f8aed261828f2ba0a2,\n                },\n                w9: u384 {\n                    limb0: 0xc994b57f3410a4503912f0db,\n                    limb1: 0x76871514e839d62296d23629,\n                    limb2: 0x2fde71411b384900f656ab6c,\n                    limb3: 0xdeebb1943725d48b9cdc7cb,\n                },\n                w10: u384 {\n                    limb0: 0xf3ef74f709c6cb45c21cd12e,\n                    limb1: 0xd720f3876bdd542b86eeeb58,\n                    limb2: 0xb85aea0cd816c09909b4d88c,\n                    limb3: 0xa3ce54f3ee833e0bae2cb1c,\n                },\n                w11: u384 {\n                    limb0: 0xf8c6ec38f3b7f955775e2832,\n                    limb1: 0x716a5e0f39967a70c5bd78be,\n                    limb2: 0x61f2e36cf96f821d6a3287d1,\n                    limb3: 0xf19ea07493d608bae66bea0,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x83b19eadcea71010d1565cfa,\n                    limb1: 0x4825e294172616ab26e7eb20,\n                    limb2: 0x54d4259a351535c9cbd1c6a4,\n                    limb3: 0x241d155f21449ca4b5addf7,\n                },\n                w1: u384 {\n                    limb0: 0xde3e245c2756d991ab554365,\n                    limb1: 0xded567d010568eb5ba3ce705,\n                    limb2: 0x327429176a50f14bdc580858,\n                    limb3: 0x156807de27314670790e7ca0,\n                },\n                w2: u384 {\n                    limb0: 0x66bb95d7a4d98dfc50ec8fb1,\n                    limb1: 0xc3c8058f329d30723233d845,\n                    limb2: 0xd30b40aaa7eebcb481e5f715,\n                    limb3: 0x6af8fbe105e0796a8e398ed,\n                },\n                w3: u384 {\n                    limb0: 0xa940b949eb2388785b224608,\n                    limb1: 0x1cec59486fc6a5cd144a91de,\n                    limb2: 0x11402b75ed1bcd6cd14590ec,\n                    limb3: 0x7f1086112d77b89f7582269,\n                },\n                w4: u384 {\n                    limb0: 0x8f257f0a1e6796e78b8f951e,\n                    limb1: 0x48f84ddb963cadbfe5e55521,\n                    limb2: 0x6e427ce34296e0997e34bb67,\n                    limb3: 0x1358d67c804b33fcd6dccd26,\n                },\n                w5: u384 {\n                    limb0: 0xf29a7dc92df446d59d0ae4e5,\n                    limb1: 0x823d3505088601b6a6610c21,\n                    limb2: 0xec67638c41976d4b1caf835e,\n                    limb3: 0x15c8e64bbf555ac7f232789,\n                },\n                w6: u384 {\n                    limb0: 0x658317131159794cfb897b2a,\n                    limb1: 0x3efb5096028939e901d050eb,\n                    limb2: 0xb364141abe4f342b2d342e4c,\n                    limb3: 0x697dece994d9f1cfd79f309,\n                },\n                w7: u384 {\n                    limb0: 0xaadcb5f26d03fad4f28df12c,\n                    limb1: 0x492f0e081e52c8c88fce9f44,\n                    limb2: 0x29717b344f24a9ce5704183b,\n                    limb3: 0x77175c6d4b377dbafe0e4fe,\n                },\n                w8: u384 {\n                    limb0: 0xea668960f018818ab2dc143e,\n                    limb1: 0xd1b189a93d737c7c9df377b2,\n                    limb2: 0xc326f49a444ae09fe755412b,\n                    limb3: 0x9347fcd49e2293efb0a78de,\n                },\n                w9: u384 {\n                    limb0: 0x17514b18815a49976674c5f2,\n                    limb1: 0xeadf8c7afaddb62cb39d0e85,\n                    limb2: 0xb3bad6f772ce35db00653f13,\n                    limb3: 0x17fd638fda925abc9867be18,\n                },\n                w10: u384 {\n                    limb0: 0x824d407e1486549861a4f9b1,\n                    limb1: 0xd708e8188307765b7e7b5c71,\n                    limb2: 0xb458d64fdc3cfcae7d504007,\n                    limb3: 0x11376135f9107c7d85f2d49a,\n                },\n                w11: u384 {\n                    limb0: 0xdd930da650b850fd475ab204,\n                    limb1: 0x6d1c787f7452a96d6fe58ed2,\n                    limb2: 0x77fc37156b99d375a7d16ca6,\n                    limb3: 0x2c52abc9192f9453d49eab3,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xa1f4bb4ceda1931c829fab23,\n                    limb1: 0x804ffc41249665a2790a0228,\n                    limb2: 0x1de01e71f91960ccaf6c410c,\n                    limb3: 0x81b2c2ac7a57744e8e9b410,\n                },\n                w1: u384 {\n                    limb0: 0x130433d5494eebebcfd9df94,\n                    limb1: 0x99364cbac719f5f41ddfa380,\n                    limb2: 0x3f29270ecf71851f43731a20,\n                    limb3: 0x1145c70e232f053297295621,\n                },\n                w2: u384 {\n                    limb0: 0xec442113c386176b32efde95,\n                    limb1: 0x7bd862d3003678d9531d9c1e,\n                    limb2: 0xfc594d12f8c8b42b2e4d6b90,\n                    limb3: 0xeeb75363b656d3ec3fa9b09,\n                },\n                w3: u384 {\n                    limb0: 0x222852bc2d918bd1ac5f63f,\n                    limb1: 0xfe7d5faeb604de77c643a175,\n                    limb2: 0xc65d389008dc614c33e685b9,\n                    limb3: 0x180b7b07d9590c95ef7c4d32,\n                },\n                w4: u384 {\n                    limb0: 0x970068a4b9eec3828487ea39,\n                    limb1: 0xd9327df1470019283e338516,\n                    limb2: 0x5952d080bc8bc07c9a246b5f,\n                    limb3: 0x188de0056afd14bfc26980e5,\n                },\n                w5: u384 {\n                    limb0: 0x1f95997064e7188584c76d47,\n                    limb1: 0xba3e7e6239cb59b9630224f1,\n                    limb2: 0xd02ab63f0952c3a26ac56788,\n                    limb3: 0x6c3f71d101f157a0eb5e8c3,\n                },\n                w6: u384 {\n                    limb0: 0xcf705d3f30333b45aeb056b0,\n                    limb1: 0x3ded81674542b511276368b0,\n                    limb2: 0x1a953a0af3d55e115c95e424,\n                    limb3: 0x12c2bb84d66b242ac047d7a9,\n                },\n                w7: u384 {\n                    limb0: 0x1d84fb17c565be3824c9eb81,\n                    limb1: 0x983f3cef4c3580414e1c63d8,\n                    limb2: 0xc6f813385e3fce4ae1a9f4c7,\n                    limb3: 0x175fdf9433765408fdfc601a,\n                },\n                w8: u384 {\n                    limb0: 0x6c61ac267d1db760fbeaf92f,\n                    limb1: 0x20b3d2e50bab22ff0da90069,\n                    limb2: 0x54860d69bdb67b696fced45c,\n                    limb3: 0x15f95850b768b8a0f63b96d5,\n                },\n                w9: u384 {\n                    limb0: 0x3fa62e0c86ad1d63fbae241f,\n                    limb1: 0xb30f2dea012c94c9c26d22f,\n                    limb2: 0x61befc67d0413374617f46f8,\n                    limb3: 0x4078076119540c4a20693eb,\n                },\n                w10: u384 {\n                    limb0: 0x25e4fe7a019eedeaa28ff1b,\n                    limb1: 0x9324c0e779bd0c9fcd27f7e8,\n                    limb2: 0x24d326b0d8a8c42d982f21c1,\n                    limb3: 0xdfcf7aef0bf4098ae68b1cd,\n                },\n                w11: u384 {\n                    limb0: 0xfe63a0539935bee31d38ec22,\n                    limb1: 0xd033b49fee05e4d97bd6842c,\n                    limb2: 0x78d04ec2b510789e14ee988f,\n                    limb3: 0x17aba0964ab1ddcdf413639a,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x278d77a81d602afd5a52947,\n                    limb1: 0xcb5c30044228bb45093b0d90,\n                    limb2: 0x8e471498d8a8be03dade312b,\n                    limb3: 0x19beee76172ad8aa02dbf3dc,\n                },\n                w1: u384 {\n                    limb0: 0x7c77ce05c4c305a7dc0e5b4d,\n                    limb1: 0x7bd3f5e81744c8fbff1e9d10,\n                    limb2: 0x30ea7f32e968b9454c93c8ca,\n                    limb3: 0x13642c30cde1dbf6af429fd5,\n                },\n                w2: u384 {\n                    limb0: 0x595b8c57681cead9648c7acb,\n                    limb1: 0x689d10dae2cc8e703e53a0e,\n                    limb2: 0x29ae6fb08dc277565e3505c9,\n                    limb3: 0xcf96b5bf70d0ccc001f3322,\n                },\n                w3: u384 {\n                    limb0: 0xd1b554ed5518219199f34526,\n                    limb1: 0x26ac3af216434fe1ed48aa17,\n                    limb2: 0xc07d051d9daf7c6e095e8aa3,\n                    limb3: 0xd6c203b2d9e77cc0cd40bb1,\n                },\n                w4: u384 {\n                    limb0: 0xab65021306a36284149c06e7,\n                    limb1: 0x4e3f42db62b95d309ced3670,\n                    limb2: 0x76fb0b0b7954df85d0d8c050,\n                    limb3: 0x5101d7e82eade26493678b6,\n                },\n                w5: u384 {\n                    limb0: 0x7a6b2765b8a9ccbaaad5c828,\n                    limb1: 0x7f4e8febb620ef2bc2d7a407,\n                    limb2: 0xd30c4bf4b5860ebfbf7e3b9d,\n                    limb3: 0x14d20e5825a0cf0631c843de,\n                },\n                w6: u384 {\n                    limb0: 0x84f1594b851f0ddca968e8c5,\n                    limb1: 0x3a6491a30f5721041f7581c6,\n                    limb2: 0x9169d487e761ae399b754ba9,\n                    limb3: 0x530b8c30d14555dddbf8776,\n                },\n                w7: u384 {\n                    limb0: 0x57ad58f9bd5592d446a6b748,\n                    limb1: 0x135c76ec36e730bf679e1619,\n                    limb2: 0x549cc33448758c73223137e8,\n                    limb3: 0x55d3b3769b18c8c17597c38,\n                },\n                w8: u384 {\n                    limb0: 0xcb42d1d43cdf605892d0b23e,\n                    limb1: 0x2197b1bc85e160f4865d08ef,\n                    limb2: 0x37c01be0fe47d2cce9adbb3e,\n                    limb3: 0x1553b94e1939110d4b99fc57,\n                },\n                w9: u384 {\n                    limb0: 0x6fbad2a03ba0aa5de69f43d3,\n                    limb1: 0x765a3a8b3a2f959e767ed7e9,\n                    limb2: 0x4316e351dc01ca2da29b0710,\n                    limb3: 0x8183e742bf50ac5b25c5617,\n                },\n                w10: u384 {\n                    limb0: 0xae282d2b795b5314b7f53f0d,\n                    limb1: 0x7a64af990d741c0fe71b0b64,\n                    limb2: 0x4fecda665a2e9c0826568d87,\n                    limb3: 0x914cd3723446a757562b82a,\n                },\n                w11: u384 {\n                    limb0: 0xdb326552a864fae27e34e3c0,\n                    limb1: 0xbfd09d5d1e29af9e9d992c5b,\n                    limb2: 0xd6d7663d363167d6317a28f6,\n                    limb3: 0xe66725a5996b856981dbff3,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x925f1548a2586b3c83acb844,\n                    limb1: 0x353b125c82d3547bb22e873e,\n                    limb2: 0x66e1c1174e42b65d840ce5a4,\n                    limb3: 0x16fbfde31f733d31881cdfff,\n                },\n                w1: u384 {\n                    limb0: 0xf48a04b2ecb65b0ec1ee74a7,\n                    limb1: 0xd3ce0c326344e634d721fb34,\n                    limb2: 0xa30496b2da7fb2ea97b754d9,\n                    limb3: 0x107d126f58ec9e97c6cc8e71,\n                },\n                w2: u384 {\n                    limb0: 0xd2ffb5a8958fd358b9a0db9b,\n                    limb1: 0x402808c39b52369ae59fd83a,\n                    limb2: 0x3fe0960e8aa72beb2fa961d9,\n                    limb3: 0x166dc226ccb9eff556343907,\n                },\n                w3: u384 {\n                    limb0: 0x8df0689b8854be488ecb991,\n                    limb1: 0x4795a4cc43a8d4530c1ad931,\n                    limb2: 0xb3bc8527ab33e10f80cfde20,\n                    limb3: 0xba7ae8be240e9d11a287d8b,\n                },\n                w4: u384 {\n                    limb0: 0x7f368c6c241b048fb218dbb8,\n                    limb1: 0xa2476498a10081bfa027924e,\n                    limb2: 0x56b88e4492e6f0c99fa165f0,\n                    limb3: 0x18a38fa4ee9f26ba78fec53c,\n                },\n                w5: u384 {\n                    limb0: 0xe98903321b25313c95f003dc,\n                    limb1: 0x31f82952f9329bd9368402e7,\n                    limb2: 0x54ae4abaa3d2432318e04599,\n                    limb3: 0x128f6b10489dc4631361966f,\n                },\n                w6: u384 {\n                    limb0: 0xd6c9252e840a0651da685774,\n                    limb1: 0x20c689e5be6b3d7db49e75c1,\n                    limb2: 0x49de02ce0f57209e965aab87,\n                    limb3: 0xb84356ad3a02a7a23840580,\n                },\n                w7: u384 {\n                    limb0: 0x4feb2265d9e9cfe5347bcdef,\n                    limb1: 0xdbf93707cc036c505a681a7f,\n                    limb2: 0x991dae2fc5278d2e4c49b442,\n                    limb3: 0x581e622fe997190ffcaff05,\n                },\n                w8: u384 {\n                    limb0: 0x4fed4adee961344d7de4ce04,\n                    limb1: 0xa2179aa116019af6aab8119,\n                    limb2: 0x390cfa09d93c9cf5d45a6f51,\n                    limb3: 0x301f95a1cad02ce95b9e7f4,\n                },\n                w9: u384 {\n                    limb0: 0x839f077e7f1268f3969297a,\n                    limb1: 0xc6678bdf10aac686ea78af9e,\n                    limb2: 0xbded8a9b29e5e041ebcc7d56,\n                    limb3: 0x16f210725bf2a00ce33bb7ad,\n                },\n                w10: u384 {\n                    limb0: 0xa0b68df81c8f7dce35651343,\n                    limb1: 0x948b8def6ecf0f2c1235607b,\n                    limb2: 0x9cacf2c2c4cebabc980ba63c,\n                    limb3: 0x88eb934296e671e6ca4b0bd,\n                },\n                w11: u384 {\n                    limb0: 0x5d277be91e70605270b0736c,\n                    limb1: 0x31a5c600c967c11668a20a8e,\n                    limb2: 0x8ca866246a7e7d273c67c89c,\n                    limb3: 0x1717a1fd9cd5ec3784a48c7e,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xc0cf5bb3ddf86547fe00b03f,\n                    limb1: 0x261d5fdf16216b0b5b2fd0af,\n                    limb2: 0x5090c7ece64dea3b6ef1fe9c,\n                    limb3: 0x127241b7afea2d881250e65,\n                },\n                w1: u384 {\n                    limb0: 0x6e263d81f4a3f1c877c39333,\n                    limb1: 0x1410d9bf499e755eea959c02,\n                    limb2: 0x6ae0b4fa4bdabd77d6114c95,\n                    limb3: 0x18b34ace95b722dd2f0913af,\n                },\n                w2: u384 {\n                    limb0: 0x9e798a325b9b9324627d90a7,\n                    limb1: 0xe44be7d37275a6b9307a4d70,\n                    limb2: 0x60a94c03db1b4341044162b0,\n                    limb3: 0xc5e0af70498faeb66e96c7e,\n                },\n                w3: u384 {\n                    limb0: 0x62c3ec64962f4b5dfd4957e2,\n                    limb1: 0x175b2e34bc0b79de8b26e5ac,\n                    limb2: 0xd00c44dfe200edc1823d4127,\n                    limb3: 0x1f9c390217fc2eab214ec8f,\n                },\n                w4: u384 {\n                    limb0: 0xca1db3d196ebee4afcb49439,\n                    limb1: 0x76c891130d535411b8d13bae,\n                    limb2: 0x1346242621dc20c966481630,\n                    limb3: 0x62a4a8737ee4ed122146323,\n                },\n                w5: u384 {\n                    limb0: 0xd89259ce24c1bc3c80b4c31b,\n                    limb1: 0x6916e85ee261583718b5be9c,\n                    limb2: 0x614b567f265ccea1c3bf6c88,\n                    limb3: 0xd63901d756cb9c4f6e4ebf,\n                },\n                w6: u384 {\n                    limb0: 0x2854083be3f609fb5747a0a4,\n                    limb1: 0xf9363f130c8a061ad4454dca,\n                    limb2: 0x99fa1036b41a93c9bb5f04a5,\n                    limb3: 0x10be26b58c1e20556bf90eca,\n                },\n                w7: u384 {\n                    limb0: 0xcaa7afbc5dd33d0090d478eb,\n                    limb1: 0x33bac5729659b2886831c90e,\n                    limb2: 0x8c228f55fb3b16a6089cfc9b,\n                    limb3: 0x1425aa18228f951444e69bbe,\n                },\n                w8: u384 {\n                    limb0: 0xbd8aa0ce83f76fa3d6195952,\n                    limb1: 0xa49e1c3f96658b0c6984d0e4,\n                    limb2: 0xdfc5f4d167ad19270de11602,\n                    limb3: 0xe8f8eb7f390acecb765644f,\n                },\n                w9: u384 {\n                    limb0: 0x7fa94e38426b019637ed329d,\n                    limb1: 0x8a030e40d455c8eeb294aee7,\n                    limb2: 0x62c6e010ad31dc3e8cdfd551,\n                    limb3: 0x8d9ba6f08f065d3d6b80ab7,\n                },\n                w10: u384 {\n                    limb0: 0x6b2cb77e359c675839c57ed8,\n                    limb1: 0x4ece0febc3fb31c9c799768f,\n                    limb2: 0x20e25d25010860a327da0640,\n                    limb3: 0x12eb1699559e1e7b06f3d0b,\n                },\n                w11: u384 {\n                    limb0: 0x5fcbf346dc790bb6c9e48356,\n                    limb1: 0x8e7801394a1a49b06320bbd9,\n                    limb2: 0x7ac8d93c05e1831764f8daf5,\n                    limb3: 0x102edca82e8f1857ed209bd,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xb15ad72f4fcb2591d1abc46c,\n                    limb1: 0x74d4a9d3481b818b70fdb5eb,\n                    limb2: 0xf8210ae9f2b7df0516a267ba,\n                    limb3: 0xd5a2800ca938c6f7c3113fb,\n                },\n                w1: u384 {\n                    limb0: 0x38b065590c2e60fe7f44767f,\n                    limb1: 0x7eecabf14ae695b8a3360ed8,\n                    limb2: 0x9985104a902c20936ea57238,\n                    limb3: 0x124695215443652ba7e6cf22,\n                },\n                w2: u384 {\n                    limb0: 0x1f9841b55fe2c623f1078c67,\n                    limb1: 0xb9c8a90b95c1f3344984344d,\n                    limb2: 0x2a340ad73875dff79e1352ff,\n                    limb3: 0x18bd138bc116843c32beff0,\n                },\n                w3: u384 {\n                    limb0: 0x56c68b860cbcfc33006bdf0d,\n                    limb1: 0x52813de6808192f9b0c7811b,\n                    limb2: 0x4fc72a2832a54a2c1377aef,\n                    limb3: 0xc240bb809dfa30523851f3,\n                },\n                w4: u384 {\n                    limb0: 0xaf85594768f62ada3aff44ff,\n                    limb1: 0xff3854a044fc5e69851ba430,\n                    limb2: 0xb47e8573d120728f31c90440,\n                    limb3: 0xcaf2c186c804f855cfa2c4d,\n                },\n                w5: u384 {\n                    limb0: 0x4e380f88b214dbbab34dbebb,\n                    limb1: 0xa77d375a8f3582d99d8e771c,\n                    limb2: 0x7ff0478d6f4c30522d5cf061,\n                    limb3: 0xeda4fddf15c6de3928a7494,\n                },\n                w6: u384 {\n                    limb0: 0x53c092ef68bc25c37d25fe15,\n                    limb1: 0x3fd91dbc6dc8c4ce23ddfec8,\n                    limb2: 0x2f533a2c53b9bc59f7da808b,\n                    limb3: 0x54ea204f43fc3cc511e2771,\n                },\n                w7: u384 {\n                    limb0: 0x874484b23512d69c64456edc,\n                    limb1: 0x4bae99896f81ad7e8b33986f,\n                    limb2: 0x315ae13e8f7eef39bb5fc6f3,\n                    limb3: 0x2e3ddb5c86a0d7ffa46ce19,\n                },\n                w8: u384 {\n                    limb0: 0x6ec7f3337526ebcca0cd7a9f,\n                    limb1: 0xd48463f9f2d1f19c3853fbb8,\n                    limb2: 0x7e348340df28aef8d2b5b0d,\n                    limb3: 0x7180eed89e074ef58739ed8,\n                },\n                w9: u384 {\n                    limb0: 0xbe6bdfc582a702b560a6e04d,\n                    limb1: 0x592fe00300d974cb544bb609,\n                    limb2: 0x5585618cce120a0ca8ae3b06,\n                    limb3: 0xd8b2fbd00859855d8059c04,\n                },\n                w10: u384 {\n                    limb0: 0x14bf3cd112d125e4e25a3e65,\n                    limb1: 0x811a1021fa6981370e82b3d3,\n                    limb2: 0x2458fd0cced7cade1c669de9,\n                    limb3: 0x7c3ff3ae5fd17f6a1ce0359,\n                },\n                w11: u384 {\n                    limb0: 0xf1c60ca1b056ed5abf67e04d,\n                    limb1: 0xbc819ca227d2d48d19f96458,\n                    limb2: 0xb390024831387ab08e67c776,\n                    limb3: 0x5f4a62df64a479d75594956,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xf65ce3527d75962dfe24a3f9,\n                    limb1: 0x91e01eaad05aadc43322e7bc,\n                    limb2: 0x1749b8efc10800f0117b9ada,\n                    limb3: 0x63f0bc72657931f9c4c0ec6,\n                },\n                w1: u384 {\n                    limb0: 0xb0a176acec5241ab58a92fe4,\n                    limb1: 0xfff6673048e856befecc052f,\n                    limb2: 0x3aabf57172cbeea4e5656e93,\n                    limb3: 0xf8b8f049c1f37ea1b91f865,\n                },\n                w2: u384 {\n                    limb0: 0x591f822c01335afd1788ae6c,\n                    limb1: 0xacb21dac6272701a054407c5,\n                    limb2: 0x27c93a2906618dc8eac1c17,\n                    limb3: 0x135348203e2ab3a8030bab8e,\n                },\n                w3: u384 {\n                    limb0: 0x83f8664aa234b6ef1bee1838,\n                    limb1: 0xfbe202c883895731f698255b,\n                    limb2: 0xb8ab5bee5b71245380d5a22b,\n                    limb3: 0xdd0f12d1fb706b63a83e4f6,\n                },\n                w4: u384 {\n                    limb0: 0x6c00eabfeaa8a1e18d743643,\n                    limb1: 0x35082c7740b28bed8c2911c4,\n                    limb2: 0x705d87b2509c7563f2f9cd83,\n                    limb3: 0x355565388006efda83748a9,\n                },\n                w5: u384 {\n                    limb0: 0x721da2148c278de04ea6b48,\n                    limb1: 0x1223b5e9df2c7ce207e3cb29,\n                    limb2: 0x9fd921169ebea2d627e0e2b4,\n                    limb3: 0xca348e51467605b1891750f,\n                },\n                w6: u384 {\n                    limb0: 0x567eebe72695309b8b9fa49a,\n                    limb1: 0x9b2ed7c13fcd5218178f6c36,\n                    limb2: 0x69db0caedd82eb26178db3bb,\n                    limb3: 0x10b37cb311f6f5db3cf04ead,\n                },\n                w7: u384 {\n                    limb0: 0x1c36184bcddcb3bef030a967,\n                    limb1: 0x30f09d8bdcd920ef630b29da,\n                    limb2: 0xd99cd4ca8ee16996294d6867,\n                    limb3: 0x14b4ecde21559c315401a904,\n                },\n                w8: u384 {\n                    limb0: 0xbff20fece07ace4ed15c0801,\n                    limb1: 0x8c641efedb23644ab9dac1b6,\n                    limb2: 0x65ed2f82940530717a3a8f6,\n                    limb3: 0xd6faee36c1be2a6bd80aad3,\n                },\n                w9: u384 {\n                    limb0: 0xa45919c319e86e4c7cf0a9aa,\n                    limb1: 0x2c3b3dbcd368facc0fa8a97d,\n                    limb2: 0x18bb74bd046abb617241aa0a,\n                    limb3: 0xe6a08b13a47fee0dea5d182,\n                },\n                w10: u384 {\n                    limb0: 0xad46273f102a1a28b7ea1210,\n                    limb1: 0xbd6857d74c142f5b0750a4c,\n                    limb2: 0xa179b4418056dce93b5d5ebe,\n                    limb3: 0x8edde64f71a1e7a8d5c256b,\n                },\n                w11: u384 {\n                    limb0: 0x40c84a2231765e3ccdd1fee2,\n                    limb1: 0xe23fa47d96e3019174e1e708,\n                    limb2: 0xda247b93ca36f321d7e891a8,\n                    limb3: 0xf3dec99dae8597e09aa6441,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x5c071fe7249396da8890e55b,\n                    limb1: 0x88bf9396d97ac96c8ca065b9,\n                    limb2: 0xaa1bd31d7ac0d0063932745b,\n                    limb3: 0x4f008c1e4e917d1a0388386,\n                },\n                w1: u384 {\n                    limb0: 0xde583cfef9c2b34ea6b3a860,\n                    limb1: 0xe79957b07ce9cf7cc9d7b0fd,\n                    limb2: 0xf9e5d92728e5fee33eb8a4c8,\n                    limb3: 0x7921cbfbdf11fda5479b251,\n                },\n                w2: u384 {\n                    limb0: 0x7fcb1d0ad133dcac3db9691a,\n                    limb1: 0x8b34904f9f4147431e803592,\n                    limb2: 0xaa188d2c64f4ffae74679611,\n                    limb3: 0x6311dfa9565d635c03e0855,\n                },\n                w3: u384 {\n                    limb0: 0xc6e8d1386e240defd0c8b358,\n                    limb1: 0xd916b51af6ef639109f7f064,\n                    limb2: 0x84f668ddc480ae7a6282e8bd,\n                    limb3: 0x14514e50d271db4c38f25c17,\n                },\n                w4: u384 {\n                    limb0: 0xc05129d365f445bca7481a4c,\n                    limb1: 0x732f03651202c5d590aef375,\n                    limb2: 0x861a12d79020a018d52dfb3e,\n                    limb3: 0xf5779b069bb04e8aa65b1b0,\n                },\n                w5: u384 {\n                    limb0: 0x49e85a71966f4085bb96a561,\n                    limb1: 0xa90812c10e7c338efd62e260,\n                    limb2: 0xb4dc3c8f6b473eeff051c55,\n                    limb3: 0xf162180ccd92f8be4baba3,\n                },\n                w6: u384 {\n                    limb0: 0x1fc53cda9e145b9f2fc0958,\n                    limb1: 0xbc91a2f7fe6c04e89954a778,\n                    limb2: 0x713a21c6c35bc119e06027c9,\n                    limb3: 0xb945c61f5ef234c3f61368b,\n                },\n                w7: u384 {\n                    limb0: 0xfc851571d35721bd06ad24ba,\n                    limb1: 0xb0cc8ed633947c99cc26b4bc,\n                    limb2: 0xa96709e905b2f0a160cc731,\n                    limb3: 0x13bb465d841c0df6abe9d8e6,\n                },\n                w8: u384 {\n                    limb0: 0xf420c15aaa99c651e4dcf96f,\n                    limb1: 0x27cf47ecb908e16bb29a5fd,\n                    limb2: 0x5c212064d3152d60db688c4,\n                    limb3: 0xf132a5857b7a6c50640125c,\n                },\n                w9: u384 {\n                    limb0: 0xd596517bf0328136d09b30d,\n                    limb1: 0x731fc3434888560bb4aa0036,\n                    limb2: 0x89171b1a244c1520a1e52cb7,\n                    limb3: 0x13a4065c684afc1509831b34,\n                },\n                w10: u384 {\n                    limb0: 0x62b192ba8953068ad2beeb13,\n                    limb1: 0xf55df8dc4798f0c1303be1fa,\n                    limb2: 0x5586b58227a76995ce18ab1c,\n                    limb3: 0x1765d0dd29b138f1e15317a2,\n                },\n                w11: u384 {\n                    limb0: 0x194160a75b09ead5c093d1f,\n                    limb1: 0x55458b207983cc60044cd893,\n                    limb2: 0x2ec1346ee6df706c64efdd21,\n                    limb3: 0x1889fe7577e0886013ee76a3,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x83a64d1fbd12b2105fd006de,\n                    limb1: 0x1fed0ced58ffc1247b300226,\n                    limb2: 0x40c7a77d43046a8dc496e8f7,\n                    limb3: 0x1273d35b2a7041c0c8e09fa9,\n                },\n                w1: u384 {\n                    limb0: 0xd1bc518cb9f97989e4518323,\n                    limb1: 0xfda16e1ba8f5eee22baff865,\n                    limb2: 0x2282715ec39be7c1d9c05abf,\n                    limb3: 0x14ca6298addcce08172693e7,\n                },\n                w2: u384 {\n                    limb0: 0x581296f543f611452833a9af,\n                    limb1: 0x8f7d57a9ccf015a529c0274f,\n                    limb2: 0xf4cec85b20feb49320169086,\n                    limb3: 0x7294cb9fc3914e72a74f677,\n                },\n                w3: u384 {\n                    limb0: 0xa0d1c30484f8d800aa47cf33,\n                    limb1: 0x7896af58662828a8134758f5,\n                    limb2: 0xf8bf1ed82532b434dd6745f9,\n                    limb3: 0x1480045d9cc01e11e67e1744,\n                },\n                w4: u384 {\n                    limb0: 0xab14069003747ce311deeda8,\n                    limb1: 0x46aee3ebf1505f27b11a43d7,\n                    limb2: 0x441e3585d1d14f573a862938,\n                    limb3: 0xa693eb56c06023e67761b5c,\n                },\n                w5: u384 {\n                    limb0: 0x3b5aa1d13ac4ae07439068e1,\n                    limb1: 0x6bb8a4c24c1d85a23c028385,\n                    limb2: 0x356f653ce96361ec3cb08dd8,\n                    limb3: 0x19470f3488d1b42c710e0403,\n                },\n                w6: u384 {\n                    limb0: 0xc6d25ab33b45985888bbb03d,\n                    limb1: 0x2026eb4eebc11b2af25c91fe,\n                    limb2: 0x84aec238c5ba5499a91244ed,\n                    limb3: 0x16ff44f85dcd5017d4f39ab0,\n                },\n                w7: u384 {\n                    limb0: 0x6357ebc232777ec4f0019a51,\n                    limb1: 0xb2cf574426b91619de6260c7,\n                    limb2: 0xf3c73b5a7864f2a9e9df5921,\n                    limb3: 0xac8b2e81bf45ba782379164,\n                },\n                w8: u384 {\n                    limb0: 0x78111c1a35a4b111e381ee5b,\n                    limb1: 0x87cbda1cc35fd4ffab98097f,\n                    limb2: 0x3785ba57e275cc071106468c,\n                    limb3: 0x887d372d0e2fe0e53316176,\n                },\n                w9: u384 {\n                    limb0: 0x4a426c4f5b404cf8f9058f36,\n                    limb1: 0x6f4e2e0c8dca076756efa639,\n                    limb2: 0x574294ee9354db253276ffb9,\n                    limb3: 0x16453113da3cd9edc0f268cd,\n                },\n                w10: u384 {\n                    limb0: 0x980837e72a53e6da4c4922bd,\n                    limb1: 0xb4f32169b47b9f2ab0864b73,\n                    limb2: 0x85967069c73e3c636b70e667,\n                    limb3: 0xe5e15629c61068bb9a3bf3,\n                },\n                w11: u384 {\n                    limb0: 0x6b4e751b6afbfdc1286e2037,\n                    limb1: 0x2dceab2a8fec6a14f9f2a926,\n                    limb2: 0x67ac3d207965577ee1e47a15,\n                    limb3: 0x16526e02b5ea0131ca58ab70,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x17309de18596c600420fa7f1,\n                    limb1: 0x6ecfdc0a3cc31fcaf8050eac,\n                    limb2: 0x609fdb67c2d4bbd1da92d235,\n                    limb3: 0x17a9bc9c95045b9efdc7f8db,\n                },\n                w1: u384 {\n                    limb0: 0x1c460122fcd6b6ece46d69fe,\n                    limb1: 0xcddd726c39b803c9d61e2ff4,\n                    limb2: 0xb314bb778d464e80e5137e80,\n                    limb3: 0x15f7cda48b321f00b848ba73,\n                },\n                w2: u384 {\n                    limb0: 0xdc79881f76b18acaeca0693a,\n                    limb1: 0x5ced5bc216155207131869a5,\n                    limb2: 0x25abd10b17bb130a7edae34,\n                    limb3: 0xdc3c019b632e3991d4a6b8a,\n                },\n                w3: u384 {\n                    limb0: 0xbfb097d9e966f087325bf903,\n                    limb1: 0x3fb4262eebf93492bbe3ff8b,\n                    limb2: 0x997195ae28496678b778b068,\n                    limb3: 0xb656130b375669e276ed9f1,\n                },\n                w4: u384 {\n                    limb0: 0xc537baabbac6f92b3d4c43ee,\n                    limb1: 0xeee6011b5932150b96520428,\n                    limb2: 0x1632d8218fb9bf323d52bc24,\n                    limb3: 0x1206adf0e4af46155081e668,\n                },\n                w5: u384 {\n                    limb0: 0xf12a97149fe018fa0dd0605f,\n                    limb1: 0x27ce7eaabf9c6f26f66d2e41,\n                    limb2: 0x869e24a6417b5fbecfb2ae7c,\n                    limb3: 0x15359c4c6224b1be86a615b0,\n                },\n                w6: u384 {\n                    limb0: 0xc56549e245c6bbf68d09bc30,\n                    limb1: 0x90446e06fd1130455ef711ac,\n                    limb2: 0x343d611550a4e05dc84d901a,\n                    limb3: 0x198fe7d93aad83e5f503de9f,\n                },\n                w7: u384 {\n                    limb0: 0xb0c7c0f44e04ee29115cb4e8,\n                    limb1: 0xd222e0c76f9d55a44b4eaea2,\n                    limb2: 0x9ec62b435c34f660f31beca1,\n                    limb3: 0x5b9706e9f1da4dd9d3cc2e5,\n                },\n                w8: u384 {\n                    limb0: 0xf05234158a8a37dc15fec48a,\n                    limb1: 0x31d75743addea81c0d768a59,\n                    limb2: 0x460db2475e22f9cd60b2af15,\n                    limb3: 0x9c8e0f3693a433d950421f2,\n                },\n                w9: u384 {\n                    limb0: 0x17b4ab8ab4d7825f202b8075,\n                    limb1: 0x6cb9c1f003024631fa0a9500,\n                    limb2: 0xfa9afda884aaff4eb0ff2eee,\n                    limb3: 0x92e1623974d20acee9fa952,\n                },\n                w10: u384 {\n                    limb0: 0x6c311178704be9f7e65ec330,\n                    limb1: 0x432fab41537509fdc218bc65,\n                    limb2: 0x12ee9a3189d387cff951a877,\n                    limb3: 0x19a486fdde7a19ec3f4ea4ae,\n                },\n                w11: u384 {\n                    limb0: 0x848acd4e5e19ac8787ce01e,\n                    limb1: 0xe23b95c772890cc36eb7edd7,\n                    limb2: 0xa78e19bb81ea2fefc9e5ee40,\n                    limb3: 0x98b9fa87c52256357e6ce9d,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xb1832e7be4513791a1b5a318,\n                    limb1: 0xdab8acfabf82ff15fabe8bde,\n                    limb2: 0xd1448ba915158cf8dd685915,\n                    limb3: 0x8a3480406ef8ab208c666da,\n                },\n                w1: u384 {\n                    limb0: 0x7dc6f41df1fa7200a0e5046,\n                    limb1: 0x82afd83d6d865f579b9d987a,\n                    limb2: 0x3010fccb8d335ce1762c467c,\n                    limb3: 0x12d4daf068c14b93bf91349a,\n                },\n                w2: u384 {\n                    limb0: 0x53b9d0922336710ddf03e6e9,\n                    limb1: 0xa2f7a6a8b7ea63dc7d3e5ce8,\n                    limb2: 0x2bc0e8f29fedb1969d4e5f70,\n                    limb3: 0x19f8ad2a13f5789efa24f88d,\n                },\n                w3: u384 {\n                    limb0: 0x7fc2bba69df28a5e59bcf7e2,\n                    limb1: 0x93d61d335ab812d0fb5713ef,\n                    limb2: 0x86810bcd2b84909a86b9b8c2,\n                    limb3: 0x5c4bd6acfb17dbb0de99e92,\n                },\n                w4: u384 {\n                    limb0: 0xabc6617ab0841c6fdd54cf71,\n                    limb1: 0x496bdff2baf9ba636d2800ca,\n                    limb2: 0xb46135c83828d48109162fc3,\n                    limb3: 0xbe70db79d790397b600b4a7,\n                },\n                w5: u384 {\n                    limb0: 0x3aa09c6a57d7e89443f7196f,\n                    limb1: 0xd3c78490ef6a135ba4118eda,\n                    limb2: 0xd35cf1052a2161b3d1d9311e,\n                    limb3: 0x3a504798d0df370f6dc9e00,\n                },\n                w6: u384 {\n                    limb0: 0x946105209210749c1ad130ec,\n                    limb1: 0xe6944ce1875edfee81ba5ac,\n                    limb2: 0xe803f442e26a40d80220321b,\n                    limb3: 0xa69d4ea6d1551c43e86ec33,\n                },\n                w7: u384 {\n                    limb0: 0x7725777b6dd3a778505d129,\n                    limb1: 0xcf8f223a0ba7f0d56314005,\n                    limb2: 0x50b6542d68bb7e41cbac597d,\n                    limb3: 0x6773d995348c78185a125af,\n                },\n                w8: u384 {\n                    limb0: 0x47dd4b505ece4e63c6a42ab9,\n                    limb1: 0x47b66fcf40b4579f8e7dafa8,\n                    limb2: 0xe1e00a837a5913248e2bc9ec,\n                    limb3: 0x122e42c9101c0f785e0bf0ac,\n                },\n                w9: u384 {\n                    limb0: 0x320bc6a9543249df447ca30b,\n                    limb1: 0xae128dc852cdae534003d880,\n                    limb2: 0x2acf697d73ce229710a1db6f,\n                    limb3: 0x169fa56b9fe0085cd1ec32e7,\n                },\n                w10: u384 {\n                    limb0: 0x9c3dc69b716e4c8b8a63f106,\n                    limb1: 0x7b7677044476f901b21ea7b4,\n                    limb2: 0x42e2af7bb87210cb120f41a7,\n                    limb3: 0x179117c4bf7aeed19202d38a,\n                },\n                w11: u384 {\n                    limb0: 0x578af2d1c50886a02d13c7eb,\n                    limb1: 0x1d251a678674e497bfa5141e,\n                    limb2: 0xd5efc634d0cb4c7c1807787d,\n                    limb3: 0x60538a49b6f95d8179548d1,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x14663ec8aaf41e9dac839168,\n                    limb1: 0x8320d3931ce0be5febdaa063,\n                    limb2: 0xe8a54f2801c82ff94d4af442,\n                    limb3: 0x1537d76fdb6fcc5e66d13c05,\n                },\n                w1: u384 {\n                    limb0: 0xc408aeca0ef982f1d4919f16,\n                    limb1: 0xacf15993d11ed9b848098954,\n                    limb2: 0xe710b0aeaf54ebc0e4f53ef,\n                    limb3: 0x1172e3f6d60f5b8f8275f3a3,\n                },\n                w2: u384 {\n                    limb0: 0x807779f90c7ea090ec58037b,\n                    limb1: 0xfa1c670f3d46124c0962b69f,\n                    limb2: 0x812e66dc9ca6554d3d5fb28e,\n                    limb3: 0xede7d1b272245097eeab0ea,\n                },\n                w3: u384 {\n                    limb0: 0xfac578f3346be762844bd2ec,\n                    limb1: 0x994ad6bbf2b2282021651555,\n                    limb2: 0x20bd8715803ee77607e72467,\n                    limb3: 0x7606e734900bc75f36d5948,\n                },\n                w4: u384 {\n                    limb0: 0xc1ca06dc742aede8e3ed91c5,\n                    limb1: 0x71d50ee0f44520e8b6e60d54,\n                    limb2: 0xd0e04e25c2746017e5d029b8,\n                    limb3: 0xd44f1471bc3b841396c63ee,\n                },\n                w5: u384 {\n                    limb0: 0x8863d4db6f58c06706c68dc,\n                    limb1: 0xcd8010d2fe2689df15faab2c,\n                    limb2: 0xe0bcfa9b2100aa2f75a3064b,\n                    limb3: 0x198af1ae7a81661000298cf3,\n                },\n                w6: u384 {\n                    limb0: 0x584eba278a62b05b865d0046,\n                    limb1: 0xfd3905d4620e04d59c9f9db3,\n                    limb2: 0xb3a6714f1f875f49e045d5fd,\n                    limb3: 0x109ae235efe54330fbaa8ef9,\n                },\n                w7: u384 {\n                    limb0: 0x41056d92722bdd9ef745bb95,\n                    limb1: 0xa49b528aa11e35ff72e1fde6,\n                    limb2: 0x9a18ff2224ff861ac716668c,\n                    limb3: 0x47387893d8d042ea3a4f516,\n                },\n                w8: u384 {\n                    limb0: 0x6f24529271fb5203cfe12902,\n                    limb1: 0x310663d10c2acea99de8b04,\n                    limb2: 0xb5e0fae90872f9a49eaded38,\n                    limb3: 0xd4cdc64cb2b7e85aa244f97,\n                },\n                w9: u384 {\n                    limb0: 0x99ed80f6330c7657ae9b36fa,\n                    limb1: 0xb4ecf4f1f9cc32690999e417,\n                    limb2: 0xd6a74b7ae48b6f4307720772,\n                    limb3: 0xd55e06f38a04ecb830f50ec,\n                },\n                w10: u384 {\n                    limb0: 0x824deee4997b239c579cdfdf,\n                    limb1: 0x64de788297270c01860e025d,\n                    limb2: 0x2c570777664a58e9ed48b38e,\n                    limb3: 0x9845b19e98f1ec8238c635f,\n                },\n                w11: u384 {\n                    limb0: 0x13e8cac3d7640ddbb717cd3b,\n                    limb1: 0x2bb8aa759817d4f5a47fd7b0,\n                    limb2: 0xa1d374b7e02465a35189b692,\n                    limb3: 0x351a9dec88d73a12476d425,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0xc5619e330db7753690d3e4d7,\n                    limb1: 0x47612532deb6199b29ae01f0,\n                    limb2: 0x526a20bf47a55f080f9bad08,\n                    limb3: 0xcda6894283305a7ae037814,\n                },\n                w1: u384 {\n                    limb0: 0xd01df400ca021228f79039cf,\n                    limb1: 0x5079235d8e615126f16b88a7,\n                    limb2: 0x6b29bb389bdfc6cfc202e4df,\n                    limb3: 0x4c469f79ecbf88cf78fba60,\n                },\n                w2: u384 {\n                    limb0: 0x392c76f20e657cca0412ccd2,\n                    limb1: 0x8a03a9b1522a799165f5ce90,\n                    limb2: 0x3f1c10daef22f593d0c939e7,\n                    limb3: 0x114680f68ccb81f99a98d2e3,\n                },\n                w3: u384 {\n                    limb0: 0x1a5d475778ed021bbba71dff,\n                    limb1: 0x3c1dcef8127eb06e3d386b6d,\n                    limb2: 0xa18b55a60be13efc53be2643,\n                    limb3: 0x430d7536307562e71e3b624,\n                },\n                w4: u384 {\n                    limb0: 0x33b945b9e91a613f214c281d,\n                    limb1: 0x5246a0bb4a3b5e88b2a556f7,\n                    limb2: 0x76952d20fa901063986b5af1,\n                    limb3: 0x30dc626b4efb4dcf45dda85,\n                },\n                w5: u384 {\n                    limb0: 0xc91f47f926bf741f50167758,\n                    limb1: 0xb283412e7dec1abf2af4b54c,\n                    limb2: 0x819210cc10240985a197b6fd,\n                    limb3: 0x148983abd0919160ca75ab3a,\n                },\n                w6: u384 {\n                    limb0: 0x3ae52b385b8d7ccd1149b186,\n                    limb1: 0xc2fdad714d3b4f3b44c34b05,\n                    limb2: 0xa2594e80b8a3d876c89a7dd2,\n                    limb3: 0x17e8e95e2e4453a999120f47,\n                },\n                w7: u384 {\n                    limb0: 0x4143d9f9eae7ba680e4ce790,\n                    limb1: 0xc6428a7db6bcfe2c09ff2784,\n                    limb2: 0xb6c49338a7f200baf9ba7b62,\n                    limb3: 0x110a8b846f24a8e5a48f8df8,\n                },\n                w8: u384 {\n                    limb0: 0xec6894f7048d74cc521cfa9e,\n                    limb1: 0x7a74baa8349402edd473262e,\n                    limb2: 0xa587bd8ba9d0db61105a9bfb,\n                    limb3: 0x1542de51d10ad154d14d1ab1,\n                },\n                w9: u384 {\n                    limb0: 0x623d3472956a6fd9dfb57f1c,\n                    limb1: 0xbc706464f02579b27b176261,\n                    limb2: 0x5fbba85d07f3b4037c86332c,\n                    limb3: 0x389948fb6649d454eaafd78,\n                },\n                w10: u384 {\n                    limb0: 0x3d6160146d3ee8bd841a82d8,\n                    limb1: 0xe798a563e2e9319cc47c6e26,\n                    limb2: 0x534d22ca0ba24f883387c567,\n                    limb3: 0x8724e1114e6e80541a91631,\n                },\n                w11: u384 {\n                    limb0: 0x274eb7f12825b047a3a3289c,\n                    limb1: 0x64eaa3423e2a707806fe1205,\n                    limb2: 0xf84ab17d32acb39a3dd6c673,\n                    limb3: 0x127600c6ca9df9612df7b2e5,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x3796de51981f6024fd06174e,\n                    limb1: 0x94d83a402696f8c183f7eaa0,\n                    limb2: 0xc9225b2cfd7c3d5c24574a05,\n                    limb3: 0x10c73e67a277a6aae451031d,\n                },\n                w1: u384 {\n                    limb0: 0xf896b5516da8d004534d0d5e,\n                    limb1: 0x13d040c8b2eb76307a8963e2,\n                    limb2: 0x4106bcea580d4e5cdbac42fb,\n                    limb3: 0x194bcf981b8ad069b42ef14f,\n                },\n                w2: u384 {\n                    limb0: 0xa01d5085551a704cf0fc81f8,\n                    limb1: 0x6f550724287ce9ccd035e27c,\n                    limb2: 0x4ff8a38afc93789bc77d11e3,\n                    limb3: 0x15387fd205f34ad531fb7495,\n                },\n                w3: u384 {\n                    limb0: 0x2d86600edfa521e03bd1e1c7,\n                    limb1: 0x91911144ee37f4bda9841ae8,\n                    limb2: 0x7013dc289771aae3049aa557,\n                    limb3: 0x1264774c7cad53e0ce2c2512,\n                },\n                w4: u384 {\n                    limb0: 0x7b8d55a4e9537ae0138637b9,\n                    limb1: 0xaedbff15cf4e9d82355484c4,\n                    limb2: 0xfa1e2235cecbef2155df3ba,\n                    limb3: 0x151f2f232b2c641091433b1f,\n                },\n                w5: u384 {\n                    limb0: 0x72ec4e504cfb5f2b309e1b1b,\n                    limb1: 0xb307889291791d9836f74c5c,\n                    limb2: 0xcc60fb54fe4ebb3c834028fa,\n                    limb3: 0x73d28c074b6d0a9bbb93a6e,\n                },\n                w6: u384 {\n                    limb0: 0x42714ec1b398c2646a44fc8c,\n                    limb1: 0xf9c8174e936e14a688589f9b,\n                    limb2: 0x74f6aaa1b47f90087951593c,\n                    limb3: 0xf56e6232d6c70f9bfc19e5e,\n                },\n                w7: u384 {\n                    limb0: 0xe304f2b0d829f6d2faa65947,\n                    limb1: 0xa26f23153498cde40f054342,\n                    limb2: 0xfba50877ef63e16fa824a815,\n                    limb3: 0x1256debfa10663438ea50adf,\n                },\n                w8: u384 {\n                    limb0: 0xc757cecbeefd79b47270e6b5,\n                    limb1: 0x3fb9d4754903dc457f7597dd,\n                    limb2: 0x8a9f050e1077482a52f7bef7,\n                    limb3: 0xb1d0a3d278779c2252b7aa7,\n                },\n                w9: u384 {\n                    limb0: 0x5092b50f667acdababf052a9,\n                    limb1: 0x67c7132abfda100e74791ab9,\n                    limb2: 0x679b7be1175e7dab6bbf7b8c,\n                    limb3: 0x769778649047c85b6580077,\n                },\n                w10: u384 {\n                    limb0: 0xfd8979bca7fe4209f707b3a6,\n                    limb1: 0x9ec62bedcbf628a3ceb18d29,\n                    limb2: 0x319886ca998f583080ae6e1b,\n                    limb3: 0x381d855df46f8b4c2c9d6a2,\n                },\n                w11: u384 {\n                    limb0: 0x5724976349a32d6f327568bb,\n                    limb1: 0x17fdebce21bdc92e64f8196b,\n                    limb2: 0xeac82f3bc4b86e5d8147ef45,\n                    limb3: 0x131358e92a4dd1ca0ddb2c80,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x35716cc42b7f43a8fc723ebf,\n                    limb1: 0x22fadd338e2c25972f85dda1,\n                    limb2: 0x46872acb9511d7767537705b,\n                    limb3: 0x155d2de74effe44cf4798599,\n                },\n                w1: u384 {\n                    limb0: 0x376ac4e9b575568e825c5a73,\n                    limb1: 0x2769ef9a9f77e879b6b8a6ec,\n                    limb2: 0xa666a8e2ee113b3b4567435a,\n                    limb3: 0xc6b84a04fd0d0f116ad9e5a,\n                },\n                w2: u384 {\n                    limb0: 0x59d60284544cb1eaec05d203,\n                    limb1: 0xd6cf07d6abaf48adde29bad7,\n                    limb2: 0xf08eaf520c0bc5fe6b8eb966,\n                    limb3: 0x8207e1ac978f7a918c110a2,\n                },\n                w3: u384 {\n                    limb0: 0xbbdf9ed2369c8b7b97583800,\n                    limb1: 0xb649e54a0e1787927560a57f,\n                    limb2: 0xa914d51f826065538792be78,\n                    limb3: 0x16b5820f317d590fbb5896f6,\n                },\n                w4: u384 {\n                    limb0: 0x43ec6635aeecccb9d2c29f78,\n                    limb1: 0x8e2372e1b0e3678817be3069,\n                    limb2: 0xd78c8144a0ea302301b30a98,\n                    limb3: 0x17a61c387bd1ad61e28354de,\n                },\n                w5: u384 {\n                    limb0: 0x4c34bc4845eec9fe3a68d75b,\n                    limb1: 0x314780d022648ad56cb24a5,\n                    limb2: 0x585a32f768086f1fdd9a8da,\n                    limb3: 0x1324f29ce3b3d74e74b08b03,\n                },\n                w6: u384 {\n                    limb0: 0x223401b4185f66cb102dc565,\n                    limb1: 0x46f3ebee9b04e69f007f8111,\n                    limb2: 0xf8ae83de384f52416b6be2,\n                    limb3: 0x13727dee2bab50f43deaa793,\n                },\n                w7: u384 {\n                    limb0: 0xdafd089f3c769cddeb63c576,\n                    limb1: 0x4329764ad1958fba5407edb3,\n                    limb2: 0x832c80c10c3981b2d197d42f,\n                    limb3: 0x14a64986d3b0dbbf0297eac8,\n                },\n                w8: u384 {\n                    limb0: 0xeec166dc39802b9c81e08f7,\n                    limb1: 0x61a05c9d1447aba4d0279bbb,\n                    limb2: 0x5a891acf231010014c92af9d,\n                    limb3: 0x42193c8d6a9bccd990e962e,\n                },\n                w9: u384 {\n                    limb0: 0xdbe5765f57be1a326f0b78bd,\n                    limb1: 0x3417ea0001ea3efb8c6de325,\n                    limb2: 0x80dfc16ab0411f7cb6727faa,\n                    limb3: 0x19415881fac9b97f02c3a6f8,\n                },\n                w10: u384 {\n                    limb0: 0x6440e9bb2320475c39624871,\n                    limb1: 0xc39741e3212573abf24cd446,\n                    limb2: 0xddb817e1e7237e88f9285a4d,\n                    limb3: 0x98fa9061f0a765886c03c21,\n                },\n                w11: u384 {\n                    limb0: 0x91b97eb11b2b9466c4781b02,\n                    limb1: 0x98c2e0826cece826f5d1e2a,\n                    limb2: 0xffdc08767b9c38eb95323f94,\n                    limb3: 0xdb9012a8490308dfbd1ec31,\n                },\n            },\n            E12D {\n                w0: u384 {\n                    limb0: 0x3942fef601ca6d254a68858b,\n                    limb1: 0xea9499ac5e6f2d267cf812f6,\n                    limb2: 0x1ddc6c2df9859ff4f2adf48d,\n                    limb3: 0x2f04749264cbba7320d82c7,\n                },\n                w1: u384 {\n                    limb0: 0xea370966790afa13e5a15b8b,\n                    limb1: 0xcf600ddedf1922470eb6c8f4,\n                    limb2: 0xcc3b2095a20acd637561e075,\n                    limb3: 0x1099a2649fcc6f0876de42f4,\n                },\n                w2: u384 {\n                    limb0: 0xf7c03af81a901c952bb74ab0,\n                    limb1: 0x73344a8772689f0e65751dc,\n                    limb2: 0xad18a2477643704a0385cf67,\n                    limb3: 0x6d8fdc35189573632dcc97,\n                },\n                w3: u384 {\n                    limb0: 0xc40e849145b8a6ac81ba9633,\n                    limb1: 0xaf7eee8a3d8b2ce1ee4f3450,\n                    limb2: 0xeb5dc70d8393cddf4b749d5e,\n                    limb3: 0x3a16616e0857c168005f567,\n                },\n                w4: u384 {\n                    limb0: 0xa46376638fd600b1522df0eb,\n                    limb1: 0xd54238ba273db8846de529d5,\n                    limb2: 0x5c999239af48c2ee8edebd55,\n                    limb3: 0x4573d87029391d0d65f209d,\n                },\n                w5: u384 {\n                    limb0: 0x320028c1a7a461ad9eb19b21,\n                    limb1: 0x3b1235187099e3e7eccea674,\n                    limb2: 0xc63359900cf9bea379c7c265,\n                    limb3: 0x181ece5056a99b30368a01f7,\n                },\n                w6: u384 {\n                    limb0: 0x67c40b01d45218cb7c9261ed,\n                    limb1: 0x5f12224f9bc6f6b0f758ed7c,\n                    limb2: 0xfe65e99f9dba2b226f3bdb14,\n                    limb3: 0xefb00660b8c006503becde6,\n                },\n                w7: u384 {\n                    limb0: 0x98835c191b00687892a50c84,\n                    limb1: 0xd4ce327a1cde229daaf91062,\n                    limb2: 0x41b55aa7f2b569fbe90125b3,\n                    limb3: 0xb5ddb3660a32eb070881b79,\n                },\n                w8: u384 {\n                    limb0: 0xdf1e95ef6d2b993d5a1909e8,\n                    limb1: 0xa22871054afc0a86111e80ac,\n                    limb2: 0x65699d8354776199ea73ba7e,\n                    limb3: 0xad1800f05ab0f5361037f95,\n                },\n                w9: u384 {\n                    limb0: 0x332c0317051a794c9dea2cbf,\n                    limb1: 0xf8a485eae6c2e410a7f79c41,\n                    limb2: 0xffb6acfadd9e81a1d72f7ab5,\n                    limb3: 0x4af742d5ef004df236eac2,\n                },\n                w10: u384 {\n                    limb0: 0x6e7cd75aecd367d01b025d90,\n                    limb1: 0xea672964fdc59edd7195d82a,\n                    limb2: 0x9ef714a07f2ab07c12d493,\n                    limb3: 0x11a59352336ea017c4cf99eb,\n                },\n                w11: u384 {\n                    limb0: 0x499742508d3b02cee2ce2e5f,\n                    limb1: 0x2a7cd0175d28e3847c94e3a7,\n                    limb2: 0xba1633b10be308ed90e705de,\n                    limb3: 0x144cf257dd87eb064641dc1d,\n                },\n            },\n        ]\n            .span(),\n        big_Q: array![\n            u384 {\n                limb0: 0x1bd71287e4906779ed3d3a26,\n                limb1: 0xd6ea2055c878317e8e522dd4,\n                limb2: 0xf4fe9582467798093d5d263c,\n                limb3: 0x11c2da419a6a8b9d227ad990,\n            },\n            u384 {\n                limb0: 0xc4b64371b43a0cbbaf9d662e,\n                limb1: 0xab2cfb720c7749414576a711,\n                limb2: 0x92a2a7b9b8fe2b36c9da54d2,\n                limb3: 0xd7d0a6b6ef80b6d591b0389,\n            },\n            u384 {\n                limb0: 0xfd068547a7981576f0c4eab4,\n                limb1: 0xe3208a0cd42c834c885e3eba,\n                limb2: 0xc9230cd9a7fe97e5b519d330,\n                limb3: 0x8c3edee1458190d7fc7671f,\n            },\n            u384 {\n                limb0: 0xfec91f076649b9094b9dfb07,\n                limb1: 0xa86247f16a24f3301ca06ee1,\n                limb2: 0xfe14f3967c8dd011c2464c84,\n                limb3: 0xe55d8db7f7697b9b674fb85,\n            },\n            u384 {\n                limb0: 0xa6b137189875f80342ffbaa2,\n                limb1: 0xe37567e386092f9fb4b918e,\n                limb2: 0x76317540dbdb5389182fdb22,\n                limb3: 0x19535a1856bd170c6b1566d2,\n            },\n            u384 {\n                limb0: 0x9349bd150ea103338810c7eb,\n                limb1: 0x194631f44c64118bf4948d01,\n                limb2: 0xcddf00a5a0e0129f7c0dacf,\n                limb3: 0x1585b63aca5869287d76ccca,\n            },\n            u384 {\n                limb0: 0xf213beca10de71d6d4bfdd63,\n                limb1: 0x9321b3ed32e293a3d811f88b,\n                limb2: 0x4ce2b9fe3580484b72432cbd,\n                limb3: 0x49fc76b104fb5d550c0ce19,\n            },\n            u384 {\n                limb0: 0x9b78043b0ef59cdd195fc3e2,\n                limb1: 0xe30e5a40e2f5d9b79d51644,\n                limb2: 0x906317a8fb233964738a7ba6,\n                limb3: 0x7f49e99f37b4d2d1b603da6,\n            },\n            u384 {\n                limb0: 0xc28def775de8d2f0de39828b,\n                limb1: 0x3d548f753a65e3a014768533,\n                limb2: 0x7715613c11ffdca201f853ad,\n                limb3: 0x7d643af409084b57b822d69,\n            },\n            u384 {\n                limb0: 0xe0e29a0dc136aae59457c606,\n                limb1: 0xf7d71f6b5d87524d0d943d23,\n                limb2: 0x111166fadfc7e3a266cc28bb,\n                limb3: 0x6af8bddb724e98e205c5283,\n            },\n            u384 {\n                limb0: 0x2697ad39910ece7d8ed5b9a,\n                limb1: 0x7d1911eb0968e4d5eb165c0b,\n                limb2: 0xbb4b11231e556addef54e9d6,\n                limb3: 0x11446940cd2b7dc0d38a7ded,\n            },\n            u384 {\n                limb0: 0xef35f0e98cf3fc950bef6b82,\n                limb1: 0xfb650be4f7bf7a60f0e3c3f0,\n                limb2: 0x8243d4126588d55da730f0,\n                limb3: 0x692a7966594961c2db69273,\n            },\n            u384 {\n                limb0: 0x9a390157a11eb1b42aea41bc,\n                limb1: 0x8023ef1036cf8cf57aceff7,\n                limb2: 0xe9a14efd71cb83b6a03bd56a,\n                limb3: 0x171031a4b2549f628d8f557,\n            },\n            u384 {\n                limb0: 0x5fb64070f77ec2efbd1e2f60,\n                limb1: 0x7aedac149757093b7a21fb,\n                limb2: 0xc734391d5f1f79153379a5c4,\n                limb3: 0x2e4431bd67ad7971fd3853c,\n            },\n            u384 {\n                limb0: 0xed6981f8f4f6e017d40251f,\n                limb1: 0xd1ef4609f089a1fc18e6bbb9,\n                limb2: 0xdf4659d17b22be624a57a90f,\n                limb3: 0xebec9788a27d3a42ef67f66,\n            },\n            u384 {\n                limb0: 0xb4309c259a5e1310b40d0a24,\n                limb1: 0xf20ffbdc1d69b685c69a1f90,\n                limb2: 0xc8614f276879f6797faea9f2,\n                limb3: 0xa01435953aeaef80b73e664,\n            },\n            u384 {\n                limb0: 0xe962fea520fd3cfee77322f6,\n                limb1: 0xea0db9db4549cfbd7e654519,\n                limb2: 0xf2f15d706dd410f74601a948,\n                limb3: 0xb43c39da3af0262718248a9,\n            },\n            u384 {\n                limb0: 0x89af2659aec46adcbc283eb0,\n                limb1: 0x44e22f284d8f97e7b188b4c8,\n                limb2: 0x8f012c6f8148af4043497b90,\n                limb3: 0x568db4fa914b292333eba0,\n            },\n            u384 {\n                limb0: 0x96fc87f0735f521fa9b6ac33,\n                limb1: 0xb5ff33870a9f925b1ea88009,\n                limb2: 0x7674aa497c8cf7b309ef0c5f,\n                limb3: 0x15c240ff0b84df67ba9be747,\n            },\n            u384 {\n                limb0: 0x3858d615f050e01af6284057,\n                limb1: 0x7052ee4a1956878719d6285d,\n                limb2: 0x8dea5552ecfa9cc7ae5bca13,\n                limb3: 0xc05db0ea0bfb4247a01845d,\n            },\n            u384 {\n                limb0: 0x4a0e85645dfccdbdca3a819b,\n                limb1: 0x95ceafd93712eaa349882f33,\n                limb2: 0x11a9b8209be7b8bda0f8bac5,\n                limb3: 0x1187a1136ee5fc0651af6f6,\n            },\n            u384 {\n                limb0: 0xd3d4b65f6177627644271dce,\n                limb1: 0x190991c48a2642418882b846,\n                limb2: 0xe25f3fa16699fc7b12981b44,\n                limb3: 0x14d3886d451365cd2ab9629f,\n            },\n            u384 {\n                limb0: 0x9dd3c016b1cda4f9a3d8dabe,\n                limb1: 0xa1dc52d9783032e16103ff29,\n                limb2: 0x2eeb760dfccd32e7a74e496f,\n                limb3: 0xb0dd812d5b993d258a429f2,\n            },\n            u384 {\n                limb0: 0xc8b6b1d68bc9818f99b76bfe,\n                limb1: 0xdadfc4ddb28936a746a4af8,\n                limb2: 0x806e1b074865fed25de96d6c,\n                limb3: 0x181d8d37ffb1f532bd5aa33d,\n            },\n            u384 {\n                limb0: 0x1d6e65950828510762179474,\n                limb1: 0x7108c95801c369b0c7551ee0,\n                limb2: 0xbeb1e03936499685cd2f0150,\n                limb3: 0x94df4f30a2fffb4042894c7,\n            },\n            u384 {\n                limb0: 0x983c632a3e1a5947b7c7ce7d,\n                limb1: 0x2be8a2b39940f29c12c6cd3f,\n                limb2: 0x587797cc44e4124149751541,\n                limb3: 0x30de53dc59c8860b9c16f7f,\n            },\n            u384 {\n                limb0: 0xeaf612b94d0bc60deb981119,\n                limb1: 0x3b9840081665e52e3bb40328,\n                limb2: 0xc465e07048a44b2ae6654163,\n                limb3: 0x11c10d0e95e42b0240c50e62,\n            },\n            u384 {\n                limb0: 0xab55890011ebbaefa3538ccc,\n                limb1: 0x5e688af48008d385303ff84b,\n                limb2: 0x9a1e17509b5c09ca03249f9a,\n                limb3: 0xef5fd5c3f8fe0595b598a3d,\n            },\n            u384 {\n                limb0: 0x191cf20ea760df983e8b0b72,\n                limb1: 0x6d8cd162272dbbd1c6fff8b4,\n                limb2: 0xaa4f764ac0b0d6f68fdbf162,\n                limb3: 0xd84adfad72ed9e456fa601b,\n            },\n            u384 {\n                limb0: 0xd9880e4da287586fe3129b1a,\n                limb1: 0x66e9a0d449b088f203a3ec47,\n                limb2: 0xd84ecaf86584177be6450249,\n                limb3: 0x3642d36fa62f740e86db979,\n            },\n            u384 {\n                limb0: 0xb4a17111e89cb47a754013b4,\n                limb1: 0xb42368b0f282cf82e2c6cca6,\n                limb2: 0x2a6ad63690743b24f3539bdd,\n                limb3: 0x19658ec275b7492d1dfe64ac,\n            },\n            u384 {\n                limb0: 0x24ee1f851f58a051cd009256,\n                limb1: 0xf9f8f3cc7d416c74a2689447,\n                limb2: 0x7243778aab332312a96edeed,\n                limb3: 0x191189f043eab9fb823e6b07,\n            },\n            u384 {\n                limb0: 0xae250e76dbd459da5fa132b3,\n                limb1: 0x22355b40a8ab9531239d43f5,\n                limb2: 0x6eb78f695a56c09d76521bf2,\n                limb3: 0x1731d8fd2184ba4105a4a229,\n            },\n            u384 {\n                limb0: 0x671dcb205f5f18d66b176193,\n                limb1: 0xb4756273e2d3f131ef547396,\n                limb2: 0xb4e704610e05e40aceabf3e2,\n                limb3: 0xe10b93d6de58686874163f6,\n            },\n            u384 {\n                limb0: 0x39638c7cf8c5ba660d53968c,\n                limb1: 0xbc5fd36fc0bc3338f748b7a5,\n                limb2: 0x5cb957768b2d2991b2f16ae3,\n                limb3: 0x675685ab77f59ec1cf3447e,\n            },\n            u384 {\n                limb0: 0xb1dc8051918f43cd46dff901,\n                limb1: 0x7c7757704dbf37b25a368fa5,\n                limb2: 0xda3a570871cc0e84780027d,\n                limb3: 0x6f3551123964dd05e1dafb0,\n            },\n            u384 {\n                limb0: 0x1d45fe61b35a80a2c80f592b,\n                limb1: 0xa06d85ecc6b734969e9a0eb6,\n                limb2: 0xbd560c030fd6d54a4a8c949e,\n                limb3: 0x3bbdce254a4f9d715fbc81c,\n            },\n            u384 {\n                limb0: 0x3ca2ceab38f0421274b7534c,\n                limb1: 0xf0ff90132756fbb051d8aa4b,\n                limb2: 0x58859f8404a55bd454a5de1f,\n                limb3: 0x9ea264eb37003ba2e196965,\n            },\n            u384 {\n                limb0: 0xb6820f9ae8020c0aa809da67,\n                limb1: 0x8d2b765aaa3cdb50b34b1f08,\n                limb2: 0x750249d318beb2125df15f87,\n                limb3: 0x1edaf94fccb23ffa7f389c,\n            },\n            u384 {\n                limb0: 0x55862e3259ef6862f16ecec7,\n                limb1: 0x7b91a3f930b0944742923ed7,\n                limb2: 0x557d1688f2f93b98dc4b982,\n                limb3: 0xe28648e51b39571ad532a88,\n            },\n            u384 {\n                limb0: 0x12f090e45f01ae193958c82b,\n                limb1: 0x9037ff4c808f2367d58be5f0,\n                limb2: 0x1bb112b91dcab6bb8fcda4d,\n                limb3: 0x170ec6a92ff5df984ccdc533,\n            },\n            u384 {\n                limb0: 0x156d184f364ebb691c75f987,\n                limb1: 0x6d770effc0f532318505945,\n                limb2: 0xc8356e86afaddca62c1cc1ab,\n                limb3: 0xcb3ee3182c3597c54eb338,\n            },\n            u384 {\n                limb0: 0xf417b27304e057bd07c46d86,\n                limb1: 0x7e62858cbc2377e17eb40f95,\n                limb2: 0x36954cb5ded007d2c6ca51fb,\n                limb3: 0x4c09d37e7aeaf8b9747dce,\n            },\n            u384 {\n                limb0: 0x50fa90d805efe8914ff46ae4,\n                limb1: 0x6ddee6e60ae8b0c12747584c,\n                limb2: 0x931d47a2d99037715a8d213d,\n                limb3: 0x16bc62f391ef098c5d89402a,\n            },\n            u384 {\n                limb0: 0x1552e86382234328310450ad,\n                limb1: 0xd78438385562436267a9fe86,\n                limb2: 0xc9d9e66c1b636e4182c42420,\n                limb3: 0x1783646f20e293896acf90d5,\n            },\n            u384 {\n                limb0: 0x1d42fec0e646e25e77f86995,\n                limb1: 0x137cca27775b396c26faf443,\n                limb2: 0xe365d3c83d9c421ee1254536,\n                limb3: 0x472b2f78d789bf9b1f2762d,\n            },\n            u384 {\n                limb0: 0x35876d82ee0d92db0478774f,\n                limb1: 0xa8b9224db7d15be474909274,\n                limb2: 0xad9143269ca1da1b85fc863,\n                limb3: 0x112e2c7730637568391bd4ae,\n            },\n            u384 {\n                limb0: 0x6a0bd1f7640cbe4488273abd,\n                limb1: 0xa11e780f3e28bdd9131da09,\n                limb2: 0x2c35554e941b0f5de2f5c418,\n                limb3: 0x69d31175d11988c85135109,\n            },\n            u384 {\n                limb0: 0x7f71caf4e001e1b0568f3e5,\n                limb1: 0x92233912d20c5526fa8d42cb,\n                limb2: 0xb162077f59fa7ac2e8cb7bf7,\n                limb3: 0x1622697802fff915cc1e1080,\n            },\n            u384 {\n                limb0: 0xf56fd5b7f9ffd0fa52929a2a,\n                limb1: 0xdc74cbb063c5f4a0d7b15de4,\n                limb2: 0x449b4e9b45d4412680b742a0,\n                limb3: 0x12d88dedc3deebd154388d55,\n            },\n            u384 {\n                limb0: 0xad8617f926733972028e1f5d,\n                limb1: 0x55fbcaf8e6fb0c2f362206a9,\n                limb2: 0xb81429cd318e1e736cce078d,\n                limb3: 0x6f9c101123ba0139453231f,\n            },\n            u384 {\n                limb0: 0xd775ebee2c86b41f644f03c2,\n                limb1: 0x531c4d620f411d55b1a94de3,\n                limb2: 0xc155f42f31ccd7954ba6583a,\n                limb3: 0x1387c3f8aede859d1d5b3fe4,\n            },\n            u384 {\n                limb0: 0xc86e265466fd08932ca64167,\n                limb1: 0x88cdb047a6d4264c3cc2523e,\n                limb2: 0xa0d9953a4266dd1d27e7a588,\n                limb3: 0x609de67c510183f4752cba9,\n            },\n            u384 {\n                limb0: 0x59017b9249d2fcb894edec36,\n                limb1: 0x4c8d817ddb8ecac7145a1cfe,\n                limb2: 0x8248676e83742fa4c9460307,\n                limb3: 0x1f84a9b31ce0a25340ef65a,\n            },\n            u384 {\n                limb0: 0xd4e57f2873f7f6cb353910c0,\n                limb1: 0xd488f5b670d47eb81231935b,\n                limb2: 0xc7bd11e77d109294836796bf,\n                limb3: 0xe66dac679006b99972ead25,\n            },\n            u384 {\n                limb0: 0xc5e72ca4699a899f05679a5d,\n                limb1: 0x2e4d56bead2c9e839241aba2,\n                limb2: 0x5f925cd8319353aad49014a0,\n                limb3: 0x24259652398e68d250ae008,\n            },\n            u384 {\n                limb0: 0xf94f6c9ff7c59b13c738f95f,\n                limb1: 0x3bff0eb04836ec96a66c4618,\n                limb2: 0x5de5f0fb1fc22054ea2768c4,\n                limb3: 0x18b8c769a9325f433df2b3c8,\n            },\n            u384 {\n                limb0: 0xfa6cd0021653c7f8b700eb81,\n                limb1: 0x1c3bef5f0deb705a4cfd07c,\n                limb2: 0x3e148cd9648dbe6962737f37,\n                limb3: 0x8c48c803b9df61d5d0f4335,\n            },\n            u384 {\n                limb0: 0x2d13228fc43fa72174e1d79d,\n                limb1: 0x8ceee96560e7839948fd73f5,\n                limb2: 0x7a1ff60936ba067ecf2be4e7,\n                limb3: 0x55e59f6b053aedc954e2f64,\n            },\n            u384 {\n                limb0: 0xa7c35f69c4142f10400830bc,\n                limb1: 0x24262150bc21dff0b6696005,\n                limb2: 0xfce95af53cd4ddfaa700bce1,\n                limb3: 0x11bec78b5abb2ab6854178a,\n            },\n            u384 {\n                limb0: 0x19a5ee954c07b7281089a8e6,\n                limb1: 0xd40256b77a93b72bb5531d26,\n                limb2: 0xadf2b131573cb69c0ae34da1,\n                limb3: 0x16074d4792a0789dc26c48f1,\n            },\n            u384 {\n                limb0: 0xc697db24f748b0859934c9a3,\n                limb1: 0x74969ae8603e2a72639c65c5,\n                limb2: 0xe62e7354ec8af2959199abfe,\n                limb3: 0x4a6f9c7648e14a2039a345f,\n            },\n            u384 {\n                limb0: 0x1b7d1e1cd9070f82a05a1151,\n                limb1: 0x7b4bdbb15ecfa8352bf3cd5,\n                limb2: 0xb0f6cde11169747ceec1f223,\n                limb3: 0x50af2df26d997326dea9c7d,\n            },\n            u384 {\n                limb0: 0xd7db3a18448433fb1c4bb1d9,\n                limb1: 0xcfdd5e74ee538dccaf44e51a,\n                limb2: 0xba81ec9b76bf3b70626faa1f,\n                limb3: 0x1b2ac611094f4ac2ef0cb43,\n            },\n            u384 {\n                limb0: 0x36f4653ad3f0f0630d32acf3,\n                limb1: 0x1127cda884fd049cf5d17efb,\n                limb2: 0x458693ee9c4582a3f9af1391,\n                limb3: 0x1752b89881cf24240c3822d,\n            },\n            u384 {\n                limb0: 0xa52a317d238eb3eb0ff813f6,\n                limb1: 0xa06066005cbc71d651de16eb,\n                limb2: 0xc5b6eb4edc413750b81522e5,\n                limb3: 0x16c66a2b3916bb88e9c219f1,\n            },\n            u384 {\n                limb0: 0xf39b6ed97d58a4149909d14e,\n                limb1: 0xbaa4b842f39d06692eff2cd5,\n                limb2: 0xe0d48869ae01117461e5a9ff,\n                limb3: 0x1766de5097c23481915e97dd,\n            },\n            u384 {\n                limb0: 0xc0da9a67da5938ac5c763fc7,\n                limb1: 0x82bc876fa2ed871c19c33af5,\n                limb2: 0x2ba919e7c8369424a77fe5f5,\n                limb3: 0x4ef14b10234db8ba75cf2d6,\n            },\n            u384 {\n                limb0: 0xc0f0246d30f910f7f4f7bacc,\n                limb1: 0xa4e2b9ce9a30a297d83a0796,\n                limb2: 0xaf667e1daa0e7696f9802aac,\n                limb3: 0x163125067faa7ae61d3ff47f,\n            },\n            u384 {\n                limb0: 0x5cf5fda1c4d762853036b498,\n                limb1: 0x7cd7e6647f670b4d0c2b6905,\n                limb2: 0x88bd728ea76b8c9fe62759e2,\n                limb3: 0xf92379c473f637bdadf46d6,\n            },\n            u384 {\n                limb0: 0x17fb595f33d4288f509c18f7,\n                limb1: 0x76bc6f78fd2c0a0eba1f4c20,\n                limb2: 0x160547d489f3e681f1b6fa64,\n                limb3: 0x1330acf4ae3feafbf7aafe3b,\n            },\n            u384 {\n                limb0: 0x8d5df3e5ea678ee71e59cd1a,\n                limb1: 0xbe91049490dfd32e6ad7a807,\n                limb2: 0xf78eb313f65393a1a3398681,\n                limb3: 0x16cbd3644701e09fcabd2594,\n            },\n            u384 {\n                limb0: 0x6e09472504dd5d81bce3b334,\n                limb1: 0x41468f5dec22b70c3722d5cc,\n                limb2: 0x374a4f7fe05f282dc2be1d52,\n                limb3: 0xf815461ed5859eae9bb0e8b,\n            },\n            u384 {\n                limb0: 0xdd2ffdb4aba3e50f719dba69,\n                limb1: 0x2e420ef25ff984065f707276,\n                limb2: 0xd47eff4408dd3bdad9d78007,\n                limb3: 0xfdee00bf00506d168704e7d,\n            },\n            u384 {\n                limb0: 0x45f6b066bbb7f0cb3c3c233e,\n                limb1: 0xcb2d60923f67fdcee0ccb02f,\n                limb2: 0x311b087540790fbef7288bec,\n                limb3: 0x152f310fa6ad50b6a026dff8,\n            },\n            u384 {\n                limb0: 0x476fcbc57effe3f4a65cd4dc,\n                limb1: 0x4e05361ceef3f561aa29e14,\n                limb2: 0x1e4c75e1332e0af3f9a9ff9f,\n                limb3: 0x8875888546de92902edb37a,\n            },\n            u384 {\n                limb0: 0x55f3a0cf8ed908c42e96d5be,\n                limb1: 0xb83d0572643dd6c39126a152,\n                limb2: 0xb2d2325f1ecdc8a4e76a4901,\n                limb3: 0x15f5e61b210c26915de8e31f,\n            },\n            u384 {\n                limb0: 0xa43c056ead4885b2e99e75ec,\n                limb1: 0x24de1ff766c475543e9c08ea,\n                limb2: 0x146b120194e009008241f009,\n                limb3: 0xd12952df98f8b8411a9ffd1,\n            },\n            u384 {\n                limb0: 0xc36c37c1fb558da5cd73cf40,\n                limb1: 0xac52aa4a715d2825185d2ae8,\n                limb2: 0xd1b77b6a984e9ea14a5c8ba0,\n                limb3: 0x9267a9326170d966179a68a,\n            },\n            u384 {\n                limb0: 0x2c89cfc4db7cf43a294f8f8a,\n                limb1: 0xeeaddf051f0015ba50ec2338,\n                limb2: 0xde7aa569ac55a5bc8d4363c1,\n                limb3: 0xc203f318f1bee0a7226ae73,\n            },\n            u384 {\n                limb0: 0xda5c952362d08ba865626193,\n                limb1: 0xbbeb49ffbbf97b67c903ff69,\n                limb2: 0xf3e184149e42b4d2dd6a5946,\n                limb3: 0x9dd3738ac39100a3ac4c162,\n            },\n            u384 {\n                limb0: 0x56a4fa61ca2b466dc01250da,\n                limb1: 0x63bf3d66be728d50924bc624,\n                limb2: 0xee30c430bdd97d34263b0b28,\n                limb3: 0xc53aab22b677ec2d4aa6710,\n            },\n            u384 {\n                limb0: 0xa074bedc692500027bedb6d3,\n                limb1: 0x3a537d5b75de7ef92b7688cb,\n                limb2: 0x246b5825593b5b9d56a4d9d3,\n                limb3: 0x113c2003c37b1eb947676645,\n            },\n            u384 {\n                limb0: 0xe2af5a83acd48d45e355ac92,\n                limb1: 0xe768b9a9dbf88555c0f48458,\n                limb2: 0x7a72521d4206efcf74f38493,\n                limb3: 0x14677be8d18e0941c802144e,\n            },\n            u384 {\n                limb0: 0xa974f39ec059cbedcbdc7662,\n                limb1: 0x28a5f36c96f7b5889b559318,\n                limb2: 0x8f0b8fe25fe2545fb6858c97,\n                limb3: 0x951deb7764c5542e25187c9,\n            },\n            u384 {\n                limb0: 0x94a5bef76599825c390182a0,\n                limb1: 0x778d1517e3063378cdf51734,\n                limb2: 0x7971f91f1002849ab158bd47,\n                limb3: 0x17a9ace9cd4d35468504f957,\n            },\n            u384 {\n                limb0: 0x96d64f9432d239fb26cdf3cc,\n                limb1: 0x3125e568352713de99062560,\n                limb2: 0xc34e0e636e67217f2181de15,\n                limb3: 0x12bf8fb33bbe5c5ba6a55268,\n            },\n            u384 {\n                limb0: 0x3729d178812e993cb3d59ff2,\n                limb1: 0x7164060bd545db0f5e55e9f0,\n                limb2: 0xc5eb7111ea2fa2d19ed6634c,\n                limb3: 0xb50481d3c4a6f38480415c3,\n            },\n            u384 {\n                limb0: 0xd4496c2106c96bdbc6a5235c,\n                limb1: 0x52d7c52ddf53c605aa610286,\n                limb2: 0x2a8d5d11ba94d192d58b0c6f,\n                limb3: 0x119e88de0eef3cf393d8d315,\n            },\n            u384 {\n                limb0: 0xebae8c783f077fd3c2fba31,\n                limb1: 0x9b868a30413b925f51c33114,\n                limb2: 0x53b5d13cbde84dd58cf4e713,\n                limb3: 0xfecf474b851e762145a27ca,\n            },\n            u384 {\n                limb0: 0x7fad2c76d54e6ac3c73eda24,\n                limb1: 0x7428d7731e6ad0732f6b0067,\n                limb2: 0x611f5cd79e2c44710a59f166,\n                limb3: 0x16c032a5f08ce4f07fe6c985,\n            },\n            u384 {\n                limb0: 0xe3825ea9fcfdededa3e156be,\n                limb1: 0x93f814ed177fcaad9542f2ce,\n                limb2: 0x74e5e08dfc2d39d9cbe41bd4,\n                limb3: 0x14ccd9031b038e809755fe62,\n            },\n            u384 {\n                limb0: 0x541c62f55d52bed742659afb,\n                limb1: 0x9588890d2ba337d20a53f942,\n                limb2: 0x5a1f5b14da9474238b147bb4,\n                limb3: 0x7a691b3ee7c2e5c0c51c8f5,\n            },\n            u384 {\n                limb0: 0x9d12d194ef6623a00266d1dc,\n                limb1: 0x1f5b2f36e044c804845e63f8,\n                limb2: 0x1b5eac5cee412396c2688c55,\n                limb3: 0x73c653497a9f8b9683aec46,\n            },\n            u384 {\n                limb0: 0xff839b6315bb41548d0f065b,\n                limb1: 0x39d44131b83a688dea580cf1,\n                limb2: 0x6a4a6ba320b991421349ced7,\n                limb3: 0x15d23e4230faf11b2d12a1f7,\n            },\n            u384 {\n                limb0: 0x6761fee71ab41ad98ca781fb,\n                limb1: 0xafe1a079c3e99036534f3b73,\n                limb2: 0xda73c296967b61b3bbf4549,\n                limb3: 0xbfab60cf853b369dcaf4e83,\n            },\n            u384 {\n                limb0: 0x8179f1752883102ceb7aa69e,\n                limb1: 0xa13caa48cfe29a2a6846f284,\n                limb2: 0x3e296b59646aec40a2e7f7f5,\n                limb3: 0xc672f3083b9812dc0ad1d0e,\n            },\n            u384 {\n                limb0: 0xabf6b28f2c7b09f7211ff2aa,\n                limb1: 0x1b81548b8b84cdc8196a89b,\n                limb2: 0x48d81c0549c1cd98cd89cd7a,\n                limb3: 0x150a4a35d24be72173ac1335,\n            },\n            u384 {\n                limb0: 0x2cd54ac23ec0fb5d623cb2c9,\n                limb1: 0xfe8d0101b4fae5f0a71b59c2,\n                limb2: 0x935cf0170abc1d88e0e2fb07,\n                limb3: 0xe2dc487c52a2f677e1efec9,\n            },\n            u384 {\n                limb0: 0x29c949ec89d4ed04f794429a,\n                limb1: 0xf1258b9d7e7d8bb80fb58b9a,\n                limb2: 0x4d5ff9db250e0cfe18b02497,\n                limb3: 0x10e30a2eac74c41f16474f61,\n            },\n            u384 {\n                limb0: 0x80b766999bafe7554b1ba789,\n                limb1: 0xceab56251f7fe2864df2ce3b,\n                limb2: 0x1f56382d890248035810f2bd,\n                limb3: 0x7b06a1bffe3bfdea07ba2d2,\n            },\n            u384 {\n                limb0: 0x67cf0f0cedb32104ed3ec1f6,\n                limb1: 0x9dcfa86edb05f376a6de76ef,\n                limb2: 0x6a593cc2d259710819d92dd5,\n                limb3: 0xd6c135c5615705b299a78e2,\n            },\n            u384 {\n                limb0: 0x8e18746f53c857e8a8383a74,\n                limb1: 0x3dddf8b75512376fc42c2458,\n                limb2: 0x4bdb6f1386a9f883b40de577,\n                limb3: 0xcae1edbc64c45c95fc152b1,\n            },\n            u384 {\n                limb0: 0xed4a4581e83c76e945c984ca,\n                limb1: 0xdae5b71fdc78f94ee5b097b0,\n                limb2: 0xbc3d1b1b38b6d13d1629f2ec,\n                limb3: 0x16b1a4eb022c1381f056fb61,\n            },\n            u384 {\n                limb0: 0x6a2cdf284ea9d17e237e14e4,\n                limb1: 0xa029c79c09561485e46ea2a1,\n                limb2: 0x82cd28ab9dc6e2ffab6e2a25,\n                limb3: 0xca4c79a420395c8919f51ab,\n            },\n        ],\n        z: 0x52ef92c6fb1c4777cdbad00b49ca5611928c145e716dfccbc705fdd4a0b02f9,\n    };\n    let res = multi_pairing_check_bls12_381_3P_2F_with_extra_miller_loop_result(\n        pair0, pair1, pair2, precomputed_miller_loop_result, lines, hint,\n    );\n    assert!(res.is_ok());\n}\n\n"
  },
  {
    "path": "src/src/tests/autogenerated/rsa_tests.cairo",
    "content": "use core::serde::Serde;\nuse garaga::signatures::rsa::{\n    RSA2048PublicKey, RSA2048SignatureWithHint, is_valid_rsa2048_sha256_signature,\n    is_valid_rsa2048_signature_assuming_encoded_message,\n};\n\n#[test]\nfn test_rsa2048_positive_seed_0() {\n    let mut rsa_sig_with_hints_serialized = array![\n        0x766ad7a96b6a74dcb0d4ee21, 0x3c31169ffb4c539d20a19c30, 0x4813ed39e65994f370938d52,\n        0x19c0d08706b4597638cc3e30, 0xc7e80539ead20295baaa808a, 0x299992cbadae99aeb97422ae,\n        0xb226c9a7b454cef99bca662d, 0xbf70d4a08cf48ed827e59567, 0x7f746d2d77af83b2122fa87b,\n        0x9aa92b2128d9725d8656dd96, 0x3b526db14be8de881d9d16f0, 0x60ef9dd9b7346128d4904a2d,\n        0xc956b02d42c83dcd03152b6a, 0x417242ec1b72b9d2c28b3a8e, 0x31094b84fe9156b6d0462fe,\n        0xaee058ad4254ba267bfa369f, 0x236079af55b0b25854deb6d, 0x1e371829465e97bdc783fbc4,\n        0x308ac6dcf29aabb20d05c85e, 0x250ca4cbef9a5ded24279a60, 0xc2667b7be6ec40e1236d59df,\n        0x92c2ffdd, 0x0, 0x0, 0xccd4d72e904d8d17594ab5f7, 0x39711006ced57a24b0b3ddc,\n        0x2ccfe85722998e88ce696503, 0xbb4d033f6bc441dd1a08890f, 0x126b5e07fd274f3c18f28ad6,\n        0x6d1e293c0af656e2d1d56a47, 0x311e4ff1497cc51e1df029af, 0x9b5c4fd21b926c416bee361d,\n        0xc2763b9d1cc4af2edb1ed69b, 0x38c872d56da6fbe02f39f2b1, 0xbf55fbbf55d4cc74e2b1257b,\n        0xe6128d2cb2c59820b674fdd2, 0xa13fdbe9e48e2bf32e68a32f, 0xa91b93a068472e0dda54fb2d,\n        0xddb762befe90bd234be8b786, 0x8de87eebcd0e03fcc11febb2, 0x58c09101bebc3bd1c58c0616,\n        0x7ebe6e4cc8aee40772b501ec, 0x8e478ff6dd4c4a4422e8f182, 0x10d134c96c1d30ec1c29823c,\n        0x5dda7fcba4eb273a149eb833, 0x5c6704f1, 0x0, 0x0, 0xa9dc684ea7a072c583378bdc,\n        0x234eebfb13b9f83dbedc9689, 0x46f68cddc2dbc0748d995ad3, 0x4338acea2099179babc1f7ab,\n        0xcc0fca21384a6773f735d8eb, 0x5cc17f9d3c9d8636229c1adf, 0x5af4b70e86e1d9ebcec76328,\n        0x73474b28f23261bbc278997f, 0x60b65df1d9c6c2025877cbc7, 0xe5f371b392daa99d60dc68f5,\n        0x6d459b8018d80c189e4fb2db, 0x3b782f2fb21f91af6f955e29, 0xe58e194ead8b059afb9cc6e5,\n        0x714a92db56aaef13c5eb239d, 0xd17462b734aae256a7c053bb, 0xc7364388960d6831d60e8379,\n        0xa6e642a3822390a909108133, 0xbb3455c47c1d625f04473e54, 0x473a8914fd186b8c2f53bd98,\n        0x56cb778707e253d5bcd9c897, 0xb212545df5bc302598e61647, 0x879e816f, 0x0, 0x0,\n        0xf11082a78e2349176eefb845, 0xa2c474b18dd8215e6ce79a2, 0xaf8397d226331e6fe0287b82,\n        0x2021be0dbe82e1d87ff0464a, 0xf9f671cbb480c9ad30e96b04, 0xbf0341d821907bf2d1714934,\n        0xc4133dd8b0fbec701c6bce5b, 0xab8a9912700daed15fb14efb, 0x6408b84f7f8cfcc466adb647,\n        0xed064d750384670cdc484c57, 0x10d17bd4d1d8b673945244cf, 0x3661fd2009f806b98f962802,\n        0x3ded8d1c80a858c317f106ea, 0x69490720cdaa41dd567bfd75, 0xa2e9da91a7303beb4b22e507,\n        0x63d845332aea5d5d79157f21, 0x1ba1ef9812c965e541b8c9e7, 0xadd80c35198e137ffef51c0c,\n        0xec2ddf921bd92a5be54e75d5, 0x9f260f9358d8c772581bc666, 0x49cb9677cbc1c13c5b5a6b46,\n        0x3a2d6680, 0x0, 0x0, 0x61ae0775f0594f0d3ec84d6c, 0xcdf82c4368c89d619ad6c4ec,\n        0x16634f8f537349438fbf800f, 0x18bb5fd323098da014d9e4e9, 0x3de3d2b1c1ce83174249eac3,\n        0xe04e43c5856d447e64fb2c49, 0x8315c17c23405e47aa9dfdaa, 0xdd3e2d06e6755e5877139c96,\n        0x1de63f44a100a924034140b4, 0xd1c1be2c6c01be2cb6165113, 0xb3f8ef010376c8d557dd3a74,\n        0x5330b322e6537546d099577, 0x50feacf7ef56d00d299880d8, 0xde8af60590cff5c21c9021e0,\n        0xc719c781d43d99eac9c9a446, 0xa03f627aea3b9c54fe08cb8b, 0x2fe3ddee1358fa008dcfbd75,\n        0x183d0552096beeda805632ba, 0xead565b3a9fd13f32d94abbf, 0x8aa3b518bf3670dc8a44dce5,\n        0x7ce23145e486815f1397916a, 0x836001e1, 0x0, 0x0, 0xa50443039d3dd37156158183,\n        0x383a7d1fe53348285bdd2f37, 0x3e634aab243fc03bdd9548c9, 0xf63f0748d8ca9bc50034c997,\n        0x5cc782e51c7c576b5cb62457, 0x767abde2f4d3fc3d27c8dc12, 0xc55ace8470f37a3727c4cdb6,\n        0xa970e7780d86111b86e8184c, 0x3b930d12e10453014f602550, 0xe86920884a33c79d586e5b08,\n        0xe1c35a842d9968776b9a5756, 0x2d87248120b10947502a05c9, 0xce2325942bb6cfc89ac9a16d,\n        0x3023e567a6aeaa0e56e67c5f, 0x931367e2e28f64cf5e67881b, 0x5086944531c4016e1b638c8f,\n        0x2041352d23b8eb7553c90821, 0x45e38d7e09438b118b8c8797, 0xd15618e1fa2be214b20a2b62,\n        0x613c5bc02562fac980d54ff6, 0x3547852fb77b7ad22f7a3809, 0x7599fbf7, 0x0, 0x0,\n        0x25772373859fcc1ff880a9ad, 0xb3d1a77be83203586116cc33, 0x249ddde6a735af8d54f76e5d,\n        0x126236052ece65c16a4f8147, 0xc14108cea2b89f8bd216819b, 0x31e5b9cd08617bfbebc340ec,\n        0xc533488c6e32cee86b51bb65, 0x3427cbf5c389545877454003, 0x5f471a99ed38c12709340c97,\n        0x782d84eec1f578cf6332df12, 0xcff0e44dab2705c3df8ed43b, 0x828932cdc82c07604ed8aa16,\n        0x3f3c04ef18aff4f15ecac8a6, 0xb00f3fd36e39d0b3ba293f0e, 0x98e9053c9079b132080e1433,\n        0x8ae039670f1f588d49b0ead0, 0x84e04057fe631a9950e3741e, 0xf0975e0d1d87294c0779e4a5,\n        0x9af5116c3122c9454c33abf9, 0xfc8e70dd2f1882948bfaa669, 0xc4110d0bb3e3fe5bd4aa3849,\n        0x63ed1112, 0x0, 0x0, 0xdde6339489f82be2a548914, 0xa6129a46e7fa08cf79fe8795,\n        0x4ecf9c35860837ca5cc9964c, 0xce764f24f9a04630792a3962, 0xb037bf199470e6de572c42bd,\n        0x956ff3546d57ee943af1668f, 0x9677e96ffddc8fb4befbe60b, 0xcc50d5f30da8488eda5e2c68,\n        0x5c1aee3bac6f9bfcb475b589, 0x417cbaff0027179506246182, 0x4884fa40151152ccfb8f2361,\n        0x5fad486584738fb532be17dd, 0xdafafed3e1c4cd027bba63c0, 0x7f443066f06aa1556dd9abb5,\n        0x4b627b9936231df8ae4b77a0, 0x84fb2d5a4f24cfe981dbfad0, 0xb876a978d779736ade0abc08,\n        0x5e6ecdc675a0b2c27e3a310, 0x68b895aa08ce6e80cc24b677, 0x933d588163cd237a200f2ec6,\n        0xdf366116dbf8e636789c8917, 0x440972fb, 0x0, 0x0, 0x4c43909d3df7aa01fc8f9b55,\n        0x573f92547eed486eaecf4fc4, 0x706df3b0fa507cf78864078e, 0x72beedac7c3f62c50da7858,\n        0x7b01b47908dafa52fa8f40ca, 0x42c7fe0d226b199ff3a8b27a, 0x2cd291e0f2b7259731ca1103,\n        0x9936fd0d86cce4683dbd3593, 0x6fa4eae97809921e2e8f1c29, 0x61bcf43cb948de83f418604c,\n        0x4be8bf5f7aa4f97164b57e28, 0xb2cac9559ad2a26568d798c7, 0xc9e3f5b00702b0a067b7ce6d,\n        0x42738b954118f7fc09daf06e, 0x936703c37dcc919aeabbf3c2, 0x8234f4da6b15efc32f91b03a,\n        0x51016906f1aba3d0051cc8d8, 0x29c616b65059e5257568c86a, 0x9e7959ef4cbfa69866c3ae8b,\n        0xad55fa216ca080ce5f33515a, 0x4010f7d945e56f9faaaeed47, 0x59c35b15, 0x0, 0x0,\n        0xbd7ab4dca711f0d929017d0a, 0xf6e1b23766720a08df2e064b, 0xf743a47b9ef21525e4a3851f,\n        0x2e9e91630551f14e278d959f, 0x450e114a827f3fe74024242e, 0x768f0b12f0fca0e28cad2d5,\n        0x6f7551b524fa35f7afb69fb0, 0x503e453c615811e1bce63aea, 0x89d3c0aa219ca344b32b4a69,\n        0x9847c02179a77916a0aad3d0, 0x363a2da6bb7cc920afd971f9, 0x105756bde27aa2e4a1654eed,\n        0x782316203cc0dd1bde9739bb, 0x729e9df0a4384508f628312a, 0x7c58ad79ca4ff22633b6c393,\n        0xc25e962083bee700b96ce224, 0x4b99b07dcff3f811dd6d63e2, 0xa07af35bb0745dd4de9d5dc1,\n        0x2362f99b653a6d200acdcf4c, 0x7ed1f7a32c6633f50a1a6d1f, 0xc67831f8385e2ebf6c0e15ce,\n        0x36e6be8d, 0x0, 0x0, 0xaf2e85f517483d20277d9fef, 0xa6c8e9ef245c3cfbe92f5583,\n        0xae0e652d9bfd555164f5dde9, 0xac463ea67f143f6b90484d24, 0x292d0d6d7a0f61537e241903,\n        0x1dbd26b03b4c300939500257, 0x38f5405d2d4eb07f94eb4174, 0xebed3bea8633f2024a17fa8b,\n        0xd8029bd940f48c17be9061cd, 0xdb881dc57fa541995190cffb, 0x28dbb1531a44706a35f17fe9,\n        0x47ad149d189b70df6962e01d, 0xe56b6feae22bea7827cf0aef, 0xca565c0873f303db366b4122,\n        0x18739e8523299686923d88f7, 0xe4c0c42cd30512c887141263, 0xd6664b534d1f54775647116d,\n        0xccdd2182bb113823e3c8cae, 0x5351a577848f05aa228c7e, 0x12209ca46ab63bc8985be0c5,\n        0xe39f22696539616774a946cf, 0x857b13e2, 0x0, 0x0, 0xb4b75cf7190e9fb150c78ed,\n        0xebb37162b1d1a0cc8ed4e70, 0x2e90eaa6bca468a75954af94, 0x921837f27c919b98ea12bd7a,\n        0x938d23cf452c57690e41acd9, 0xeaeb0bbd339278e588377648, 0xea059eb1bcb1327413df220f,\n        0xf3d015ee9a83e173bbfe05db, 0x6eca8ea01474071813e0575f, 0x478da59c5392a7c4859552b0,\n        0xd53538319b99b57602230736, 0xdfa5ccd9411adccaae6481fe, 0xfbb3284f1a46aab145b14e97,\n        0x54ac3cb4084ce72b420b1440, 0xfc0030ee568632dc99eb3e3e, 0x67838dcc7ffababee905e4cb,\n        0x1dccbde1880631c960965f05, 0xd92ae551a3b09f2b1914b2c9, 0xb92dfcad76ba37636909b5ba,\n        0x6d02704ea436775eb9eba0a1, 0x1239f0c36942aa41d0fdb583, 0x7966d36b, 0x0, 0x0,\n        0x2f0370e0de67e0e0204d494, 0x41e6a7ffb185c93fc567919f, 0x33b32ddef77fc52a3e1b5a8c,\n        0xff9cdac2a8555b74120dd0a6, 0x374fe9884c8e839da4c5b64e, 0x765771b2daeb10f3e43d714e,\n        0x6e482c50677c27f548576bb4, 0x1ba9ee7076cc48c2028e07d0, 0x2d544810350024a0c1b4d179,\n        0xb8f7bf71b996e3c125d6df41, 0xe1527c84c71956afc34f6845, 0x8c339e263df547b486a303c1,\n        0xd671bf4705270e96c2dcecf6, 0x8e2ab787b0d997e2c435288d, 0x5aa9c5acfa39c50a3921e905,\n        0x99a4f9d3b39672a4ef023e78, 0x299824406248082c032f9e88, 0x5cce13392a9c02c95f51a627,\n        0x8ad6ee4d053df429a6f03f9d, 0xdcf0e7cafb7fd7f3c7f87d80, 0x9aebea38b3e33b2b482c8a04,\n        0x8bf92cbb, 0x0, 0x0, 0x9f7d6f589e82e9756cb90734, 0x1efc494737c83d8d1e5555e6,\n        0xdc14db376bb2abe4ad6c5145, 0x6350095e5153267e0f7cccd6, 0x2f11b257bb2b86998a1c4fe1,\n        0x1b0f01fffa4cb3d342c3331d, 0x45f2b93d6b87e6c14c8bdb25, 0xe0443287f9111fd56efb078b,\n        0x1560ccb1b67cd638d2ab63d1, 0x48598e67a7c87a38e45761f0, 0x42e95914d4ce2835d31ffdff,\n        0x39b5c97ac03b49dc9f8f6118, 0x1264a7647a6a15794f811a46, 0x83c3d06dbfb2b86373c10c27,\n        0x930c355b5fa314b6b1620102, 0x22692e942620240d77d0c6a9, 0x7b8897708cd33be40719d6e3,\n        0x7df5c691973b2ebe3fad0373, 0x6703a5c064a846c40c588c44, 0x2ae4b8ea5e745d2f0c269bbe,\n        0xfe723d71902007fbc8a70662, 0x857fbb68, 0x0, 0x0, 0xa5af2060ca06c184e5892fdc,\n        0xddc0a0a99021868d6da0893d, 0x24b56567184dc2acbcf5c73e, 0x160ef95f8c1f209f220add52,\n        0x2534d4dbc6d040d83fdb27e, 0xe9975a62f1ec391cc7426ae, 0x491ed56f50664e259b8ebad8,\n        0x7fd81ec116d12e3df8c35dc6, 0x2a894fd7972edf7865cc64f0, 0xcc22be61d6c9dcd87bbd11f7,\n        0xfd08aef895fe6b35568a1478, 0xf859f2778a321a7653ef2225, 0xf76ab371c23da4e6581b30ba,\n        0xeb87317e55dee41753d04513, 0x65f710857dc2c2200f569276, 0xda8ec2912b42abfb71ff2aa0,\n        0xef0a6b1ecc8548494c574227, 0x91b537e4d720dfa8b9997cd2, 0x7c31d1185eca8ca5c6625a84,\n        0xb78354ea69a8e98692057c26, 0x8d1da54563cc19a1f35e8c2f, 0x639a0b16, 0x0, 0x0,\n        0xa875570c9d0284f771cce145, 0x591c0201ab939b39b4e90b8e, 0x637eda8b6d46c7f37c41ba1a,\n        0x4108ec753bdbd2b8355b71da, 0x3e09320343a531c8f224f413, 0x1b9bf7cf3daf215cb444a32d,\n        0x41ce25a20127e9fb2c094c62, 0xace162be846660ab7dbdf99c, 0x2b033b29ca496f3fd509fddb,\n        0x9d4c1e14a408995d3f7c5bbb, 0xa66dc01cfd2bd5f969dd2e4f, 0x627f37970e930fadd339ee01,\n        0xc9aff619c84d5b4d8397cab8, 0xae250d0978d29cc49ab124fa, 0x2a5d7e131b5b9e30a46c41eb,\n        0xd55d087936c566f14dde0f46, 0x69846557a74460713cac372f, 0x8d8ab518931b5aa875a9d0b2,\n        0x27710e2b2af85a3b75ea264e, 0x1d3109d2d289a899712e2dd, 0x61383d251a5299190b540559,\n        0x4398936f, 0x0, 0x0, 0x747e4b323bf2a87bb86f552b, 0xf7f2ab1dff8cc754dcdca592,\n        0x1f34a08fd4c07735a767dc51, 0xe746b680a62bfed15401f9d5, 0x97f4eb618871a00cde3631cb,\n        0x8339d6fbea40aa941ad85327, 0x90c5edb34de4570c96a5a8f0, 0xefd960fb4e9b509a7e987b10,\n        0xc05807b47e82a5d7c3825160, 0x314c4c6704487c24b8f15709, 0xc392683af214f5f11cf3b479,\n        0x948c6d20cd304068c11bdd9, 0x3c78b7c1b58f7f9a72fe71d9, 0x9c5e03c8abda7529065625d5,\n        0x1a01ea030d11b96aebb1a48b, 0x8c7d949a55df28049f8611b0, 0x9e8bf8c8d36ba12e7aa228ac,\n        0xb9fce7d6eefc436c65b5c89b, 0xf8136f55dfb42a001616e769, 0xeeb08cb097dcaeb0f5243d31,\n        0x94d23cd76a90197b1a55f77c, 0x260e3765, 0x0, 0x0, 0xcd3ba7bd04a31b040366053b,\n        0xe6f10c837922880344fc9e38, 0x5d689eba02224e76eb42b684, 0x6e7643cf0b82715749e94cc3,\n        0xd140b4dfeb987b80865ec722, 0xe94da4823df0f77f53fbe6b0, 0xa1464b2c1b416476e7472812,\n        0x94a7a32cff9f1d73f72e09ae, 0x4e74a3c7d9049e7e96cc9ea, 0x1110951d3cc54cf1cf14d94f,\n        0x67cea4b746527cab8d59000, 0x36179b0c462d4f5cf76e42a2, 0x1742726164e268484e912ab,\n        0x22709f163ff2cd135caf2445, 0xf81d959cb2c9f991011eaaab, 0xf4f1c1cc347528cd1a4e1e62,\n        0x4664c8151c0d996bd9f0420f, 0xc086ba3be97b7ee3105c59c4, 0x9672fb601d8e57065a40c748,\n        0x6f878822fca3f1d46f3a48d0, 0xbde69f62a7e1eb664ba1aa3c, 0x9de2bd9, 0x0, 0x0,\n        0x4482aeb75faa1cb499c00e9e, 0x8b344a97e26bd3b78fdf7075, 0xad4d20ca51614ca72be40048,\n        0xaf5d2f7ebfb641ff1b918596, 0xb6d8ec60ccce46edc936e0cb, 0x690e2923dae76b1c1a8a60a2,\n        0x85c2e3ef5f249cd3e100bbac, 0x4d9a6bc3931d8bac5d9ac6ee, 0x169d730a5e2e1b69821c527b,\n        0xc15ca47f3a1729e6c2a9ea74, 0x474fa9cf9bd7331ec6810757, 0xd422d04149b9b0debce1cb01,\n        0xb7efd18fc08f89555d4c11b0, 0x269d2078f1960a85fc421a70, 0x46b5771a2f9d3510c9c3769e,\n        0xb623a42327ee23cbcb526328, 0xbe8a45ec511d7a54c64fde80, 0x3328dfafc42b91b1c69e10fb,\n        0x264c1e6be83c39fecf98268d, 0x25408a50e9b65f70f5df411a, 0x41334cb48418bdccbe5c4a47,\n        0x5c88a46, 0x0, 0x0, 0x25316546d55f7e0dcbe6a3ac, 0xeacfb5cea96b8a320936b33c,\n        0x6f6812d56f2c9d3dad9d17dd, 0x684a95ba1fa821ea81a11556, 0x1641c404477985dffd7cc386,\n        0x871d716b23e46bc3b4cf9c86, 0x8fb05800ce27e75c87859c5f, 0xf74b57029f2826c3d32008f1,\n        0xd5b3c939cbb451990b332659, 0x3a958ecf6774f75eef392e66, 0x5faf5e626a2d5c1986e4531e,\n        0x8579929032fe8da13ad1017a, 0xf19fd7bd978667567947badb, 0x658966b7546c960300b13096,\n        0xaf6c205a1a8f1b46855a36e1, 0xc1c3e6045b8b25a219c1335c, 0xf0fa6ff6bf56bcbb0116f9cf,\n        0xbd84e957d385047457f5b35f, 0x9421fc8ca5d0f21eaa8a7af2, 0xddb3c45dacbe09d2b201c3ce,\n        0xd931044489e3194da19542cb, 0x3a57c4, 0x0, 0x0, 0x9c2e41e8b5c429114a80a858,\n        0x5a966e31657c7f8c4b03d19a, 0xf6d631a3b323e9d2d0bf9577, 0x5344cc9641e9b5f74f7112af,\n        0xe429d282cbf83a3a6b9d4cbd, 0xb7113a43b4dd22a6685afcef, 0x27da7f0630345d55a449bef0,\n        0x20d6e5d82e5c8e25fee2526f, 0xd4713cd17ed740c4e73e65e6, 0xcc3bcbff28c0d7c447d07124,\n        0x23305fe2dee2774c0c4edcdb, 0xd281cfaeed124f6cb215f85e, 0x9601c6e2be06ccdd44830d12,\n        0xe8c75f8ea6aff1231d173084, 0x590ebc020ac0a24a9767b4b3, 0xb8a534f177c2d240170ae8b4,\n        0x792877e41b28f602a3a9af96, 0x187312ca50914f7652ece934, 0x2d4a3f443efdb605e7461262,\n        0x1d7d53cf6231accf900fe2f3, 0xbc39ae48093f0259794962a7, 0x18f99fdb, 0x0, 0x0,\n        0xffa9482e842897e00f682bfd, 0x834c8268bdfe3fe9126289d7, 0x285ef56cdea1beface4af9b9,\n        0xdf26308909c6236175c8b94b, 0xd0f05616288f3037160caaf6, 0xe037d0024d1c561b107d4d59,\n        0xb53d73e81fea4422d6277248, 0xe198cc789000080db790ae73, 0x4a534c95b61cf17c5ba235bc,\n        0x908c97c0440dc62088b9a69e, 0x7ae47a71e12de983ef98db45, 0xf8562cc339b439ad34d2fc63,\n        0x2eb470ce422fcb4897856278, 0xd00c1f59bbf2e4200912498b, 0x46cd5901f82298f50f8f37e0,\n        0xda394bd5a6faa8c6f98d178d, 0x9489f43f270c6bd97a56f14e, 0xba345afd6fa08c5b66103257,\n        0x172117c1bd860df49c7f68f0, 0x693100c5b36bc3d8210615b0, 0x2c8d3dcfb83ac31efe164c, 0x4400815,\n        0x0, 0x0, 0x6505fa9f69a8798873dcbca3, 0x540522659d27e26b155741a5,\n        0xb2cbbe014d7b317df5281b60, 0x3159a1e8a255736027c15b00, 0xec172ec870f4885861fa715,\n        0x450108025ca4fdd95d3ea4be, 0xa7ca5bc05077bd9a6fe4f01e, 0xdeea885ab4bfc82189ac2b72,\n        0x9468616b7bb8b2d1eb378868, 0x56276a0966928b08971684af, 0xd16a3d10a6032348f539e2f7,\n        0xde3dc7466c581674d211cdfb, 0x5440706286f05e61df345166, 0x1cea89c8227619129efbe254,\n        0xf84c4b9dcc9de5cfdd1b745f, 0x7439a70edf670ccdb8757ce, 0x9a9d2a2044ce0c63c7749a64,\n        0xd575c9cb73c6f9d36bb8d1d7, 0x5a9ee0be1abbe2291846dc4b, 0xee674484c468ac3848193a80,\n        0xef5f5b67e32d2ec4ebb4cde5, 0x3080adc, 0x0, 0x0, 0xf6183ed40d6aeb397805b3da,\n        0x8ceb48f0508ff239d7bd175b, 0x9f0b273513d427b0a7d38648, 0x82b3956877f67e15e22f2b4a,\n        0xdbcdf5049103c9c7b7ee4bb5, 0xa4880f67b985ed22f3b7ca29, 0xccc0bac7846da5cc7c7ec380,\n        0x26fada19f84b75c2954ff0d5, 0x607e2a4f32863fead642e8c6, 0xd81931fe7d0a479f060e12a4,\n        0xdb46e7ef3efca9bef3b7728, 0xedba7c2de2c90177fc3f4840, 0x956ce80fa9fdea3dcc2a6ff3,\n        0x5a8e76cc6a2b0143634b7489, 0xff054f521cf0d1a934283a01, 0xbef59d14565d6ba48d073ae4,\n        0x650b2d52c1122a56007b90a, 0x7c76c9af9f608addb1afc04f, 0x2ba9ee990da5b1a115506e61,\n        0x56ffc7c840d5cb87a0d64779, 0xfdad49c955958334a75424e1, 0x100788, 0x0, 0x0,\n        0x40f427e784fe2b4a9eaef4af, 0x2f0795ae8e0911ef1df50341, 0x90df7762e822199b4e8f9dd8,\n        0x3a0b913a4eaf581bb478be28, 0x207103d33ce1e0b8493a8cd4, 0x8656a65ce57b0b8a4dd5622,\n        0x7f95bcb4d175408d176f192c, 0x3e7c781e0afc6ece0cd3fc3f, 0x399d9626316a4a703009d68a,\n        0xa406d4c272643c0e932ccfb, 0xbd7c66e6c97d1c5db9fa9355, 0x8eed69ec5068d7cb399c4ffa,\n        0x79fabd0f06e0921e6cb79d77, 0x8cbbba1bc258146680adf88d, 0x16fcaf5768364d146bb355ad,\n        0x225fe736e47e97ed2f956d95, 0x70d015c5a2328fda9308b98, 0x673d4d765ad984ed15b17de0,\n        0x1e5a5778fc5a30396b36b904, 0xe49771bd3a3478f09574b1ea, 0x35c5a852b2225574a7952926,\n        0x353afb31, 0x0, 0x0, 0xba3c64ce6140f14718d0875d, 0xaea551a60be2bda2d6bf6db3,\n        0xe8a0282d2347aeeb81e33e89, 0xb8c1ab53b1e38117bc833379, 0xf028317bd0b9336aac1c8012,\n        0x3c856cf187839e9d21dfc4c3, 0x880a5e18613966ff8cdd7cd8, 0x79a454208ea16d30679cf088,\n        0xf3ef14e5fbbed7488440d7ea, 0x418e97737d58665881d8462, 0xf4fc8d9df7440e8998f035ce,\n        0xdb8e672415f226facf42e72d, 0xe589c0b91168de2021f13fa8, 0xa3085040132adf68a6e77dad,\n        0x94431ba64e4a6e6b83409212, 0x26e5b535fb3ed44b9a28e8b5, 0x52ce3fd32264c1d47149801e,\n        0x9c8ef28bf945bc77a227b011, 0xabb4c1b5e2a27b69704cac21, 0xcf74f58df7e45d4826769eea,\n        0xb2159f7de25a0c030219cee2, 0x134e7fac, 0x0, 0x0, 0xebd8d90c934d17dd720426a4,\n        0x33bea95aa8ad5797da6c4efc, 0x7fac880279bd173527763ac2, 0xd909e429bd1b54225afb9391,\n        0xcd2c7929287c08f6773cc15b, 0x3dcde19b61dd92d44568e30c, 0xc4fe323e9fcabf11e0fef9f9,\n        0x2c768c0140cad8de1b3f8295, 0x5ec06f9a55af974795824dd4, 0x71249dd9d21a50f8a5dbc25,\n        0x9c236dd1615cc0a9f1cfed04, 0xba5a73986d84f4435169a34a, 0xa02b96c267abf2aa37dde261,\n        0xc2e354265ebf226db4ead96b, 0xe5ce9a686d3e5e30e5e7d927, 0xaa9aa8ff79b86b3c71463e0f,\n        0xc7573536e36cb43693dbd891, 0x23b6e4c59c0de1ac968462d9, 0xb20bf031108b4e72afefe016,\n        0x21e962fb9134282b48547ad, 0xa710aa758ef9c12b377d9d41, 0x66af5f92, 0x0, 0x0,\n        0xfcbe8e8bc2857c63648e74c7, 0x3c387f8020a8e593e0b552fc, 0x8ad201a4b3f0ad06ca1cad3b,\n        0x89172fbe0f87df535688ccce, 0xa60fd06f89622f8e0ab0e81f, 0x9d95dfbbdbfb83d920f26406,\n        0x3100ae331c6bcdbd5bab2863, 0x1cd23a1e15830352e125d568, 0x6d486ad849053b6f55603009,\n        0x119e3472ed62abc0075a2f7c, 0x66cc98c72d2681a98920289f, 0xd6eb1f2dc51f8afa59605173,\n        0x6c3fa021ab66060a374d7ea0, 0x723138898370b39a75ee7b1a, 0xe92d868e3a8be03af9568450,\n        0xf2f5f837b5321258e6bc92be, 0x27361dd77e44ebee906a0ebd, 0x7003f43a6806ccd3b189ba18,\n        0x97b5b27be13f5b8425e2472, 0x855e2bd2e42c6b36bb09545b, 0x7aeebee267ae270f26abcff0,\n        0x47d88976, 0x0, 0x0, 0x8b00c396084b4115f3b0969, 0xfc60246f4f9cfb7e951de468,\n        0x8022a8e11b4f620d48a3ae49, 0xd273b3ebe223884b92885a5f, 0x5f57fa057af4248d7576fa82,\n        0x5e57e11d3c9f89b7cc0e4431, 0xbc5bcef6f56876529e294838, 0x32c32a62b1db35b064a7a2da,\n        0x35bd10f3388759eb1c787e1d, 0x63c601309b69160147d3db35, 0xb1f8bdc3cb3cfd5528610a71,\n        0xcf31a9f03bdfed10e2e83e2d, 0xa80331587c59ced241357ea0, 0x54ba8bd269e3759998fb3358,\n        0xc67a073c9bfd12d1c69480cd, 0x6990cb91da39aacae8f6ce2d, 0x3073b77341d7f8914f23e232,\n        0x39fb609d816e019cc062f795, 0x6c58563224905c46dfc15b2e, 0x1fa29a5d77347775bad7e2d,\n        0x35100e5348a3d6577246b271, 0x1cd09ea0, 0x0, 0x0, 0x254f1d592f204e7e1117be57,\n        0x637fe9b28ec4e1f1fdb5fab3, 0xfde99837ed06ee649f6a5eb9, 0xba50e700e7ce0dd5d699c0ff,\n        0xb89b6c7dbb34bf4c0741c2e8, 0x2c77cbafe161b05a3f5ccf95, 0xc147dafe9d4dd839dc184d0d,\n        0x78ca47ed2f48eabc1b8afe82, 0x368de7c0d41674796d946bf9, 0x88a0432c9a758fd891670603,\n        0xb356dffba421f23219149c12, 0xc0df0de9addab73f0c677b23, 0x87fb6390c845a00a2b8c2549,\n        0x9b188ebfb7e3b513d5ea61d3, 0x7733b7d80a0c1f1fb3b87794, 0x308c820f6a5ab36f0492ce8b,\n        0x5be8d42b69166421dda3b512, 0xd55839cff5548d24ad1cace1, 0xb3cd437bd0293cff21b2402a,\n        0x516f98df61b6536f450f3a71, 0xf3eec531c8051639aeb8eb9b, 0x5a84fc9, 0x0, 0x0,\n        0x3693b7dcdad0fb1d8dae21da, 0xaa2d5a7fee71d0e906cab278, 0x5261e8b980d9f82cf85a741e,\n        0x805979217bb90514988dc3a1, 0x3c6a195de3e6163393f551c8, 0x25a79dcd01f7db4a73a32bdc,\n        0xa7176752a77cd24ee908f424, 0x4b7dd5151993ff88a4c03c25, 0x5dcf4916e368e17734f83d70,\n        0x2e5f1a6e9dde29cbc71f3d81, 0xf3552a7a1a4bd98489ccd41, 0x9ef5fdc24b5f5aaf500cf09f,\n        0xcae76c7fc41ae096aab9df71, 0x579928c3ee25c5800351522c, 0xd5e2ee4cf7c598422d6ae639,\n        0xd5508e83d4ad6c99e73208d7, 0x7523da007c5afd2a33842db4, 0xb293a4cb6cfef6673c866725,\n        0x8b23e76640f41d8d279e3da1, 0xb6493b8f9d86cd0c7a64ca1e, 0x6bf55177b0690d6f60230935,\n        0x8d7f18f0, 0x0, 0x0, 0xcf9b94648da0dc88d439cb42, 0xb19c1b4ed7e72d465dc45fc3,\n        0xe22642c00a0c25f6a008c710, 0x6dbbd01b909f016773fb145f, 0xef242bc362f4d1468c82e39,\n        0xe34317b99d8a82bea65e106b, 0xbc454454e26d6db44e7963ed, 0xedecd51a67f3162e0c834c5e,\n        0xdc830b6c09e84e9eae0a9ca7, 0xbad8f2a473274a65401c1dd5, 0x992e8052530e7b5c61f9a3d5,\n        0xd5315b554e0bcb21a5ace36, 0x6b83a662e5b7114044086c25, 0xff316e31ab82abcec0cc162b,\n        0x8c98f344a4995dbd05e66a77, 0xe81a043b3a0e65a2659c0f30, 0xb36df7f95fd54501774f350b,\n        0xd5e3f5af9878cda0a39a3de5, 0xe6056818952b06acb4c81ed4, 0xe54abb01d005ca29cf99a131,\n        0xd209bc96061f13ab6005f749, 0x886b8d88, 0x0, 0x0, 0xeb52f6df556abbdd63bf5e22,\n        0xaed60e75dae57df80b34ec39, 0x70fcd3e27df287e5753b20d7, 0x128b5971e45761158b8f3dcf,\n        0x16bb42b3873e00053132b0c4, 0x8b0245e9a0219afeafd79a79, 0xdb9e91446865bc1fc657888a,\n        0x25a871a4d2ab4269bbea7ac9, 0x3ddca061ceff660108ef52d4, 0xa7e61c5901838a28c34d99cd,\n        0x7544f5dbb3defa0163d7f17c, 0xca241d14cc49fae4a772b7f5, 0xbe29d28849a5e324aee3408c,\n        0x836767d43077526f48faa2a8, 0x8cd32c65af954bc68d0e493f, 0x7892b889609b1f9e6f0d79c2,\n        0x278ce3abbff2f5263777664b, 0x81cd003b95994a5b17a7a683, 0x9c86115d81e0632d5fc3c81a,\n        0x997516ed4cc19a8a483d09d3, 0x1e179242d56cd19e4f7aa60c, 0x451e7279, 0x0, 0x0,\n        0x1fe5390dd58ec47ccaca6165, 0xee0376fd38d66576b38407b, 0xcf065c5ede16b9078ed8b950,\n        0xe401e1dba006c46264e08784, 0x52c0f066ccb0e51a2836dada, 0x964e301923a41c67dc6b472c,\n        0x3031e417f447570565032bc9, 0x50c821279b44dc3b5b074a72, 0xcd5a7aedb746388d9305d94b,\n        0xe93818f4b95a48f01baaa16e, 0x9d558ad11e2bea56a6739a4a, 0x8f98e3a980cc27f5514501f9,\n        0x1b5009bfd2a8cf3f3dbb7737, 0x6ebe9ac5b62d601eab9605fc, 0xba78365c99e325914055aca7,\n        0x62889d4b8f17ddedd15ad267, 0x1fee7dce2fad2700f8aa8817, 0x5b2a16de45abfaa3ca0f804d,\n        0x348b77de9a9e9fdd39057b1b, 0x2d4143c1cd9b408801ac0932, 0xa3cf55f17eb11d4fb32b9426,\n        0x208d6195, 0x0, 0x0, 0xfc49e873313de2978312887f, 0x5fbe773faa24320f70e6ea6b,\n        0x4256b86e9528473bdd9e6ace, 0xd74f172dbdba542bc9ecda9, 0x96924c9de06632dece3702de,\n        0x69358eb612656ca3198158e2, 0x6d79a01613661779c78e0032, 0x4e3bad2411014a48f1259b42,\n        0xd8871b2ea785f687de8c7952, 0x4be6a0fccf274cf898f145fe, 0x17c2c3616f78801493116b78,\n        0x940f2f0ed4e8f04ff92ffadd, 0x9b5d10dd4a3522d51f93be51, 0x1556a11712de4fac4f6f42a6,\n        0x895f21afa42c4af48861ce0f, 0x226800704f911bf97dfd3f55, 0xe51750defa8db7ae997056cc,\n        0xe037899ffa2f92560d0555c1, 0xd2e12a9746629d0f3e5d14bf, 0xa960a9ca8b8dd7220eb506db,\n        0x66bbd4ab5e553d07fecab1bc, 0x3307cd8a, 0x0, 0x0, 0x67f2457b8c831d56a9929a0d,\n        0x96e370441e52fae5bbcae56d, 0xa93ed687236fc53206e0419a, 0x7fe79b87578b0d38b0d1c317,\n        0xf48d8398df15059bb792f949, 0x2514308d75b0450ea06b07c6, 0xe85e7668282416c14df6e0b7,\n        0x703fae82d76ba4de92480e44, 0xd86b0d011d4e5e495c06d796, 0xb329a5d9c0778130705ba25f,\n        0xbe8a7bef6b49924124bf136d, 0x719510f51704a78a4b63090f, 0x3be3feb5ceb690d534e57107,\n        0xd0a2d35b72ad6978b8bde8b3, 0x936079a39d638c5c33d6eadd, 0xe177aa16d66b4356a9f9bce2,\n        0x9a626604f2f0d249417e0ea9, 0x6be7c6bd4f517bd69fece5bf, 0x923735990296cdfb6fae17d6,\n        0xc1b535aee17900ed24102daa, 0xf2431179faa78ff59fd6503a, 0x202114b4, 0x0, 0x0,\n        0xa9dc684ea7a072c583378bdc, 0x234eebfb13b9f83dbedc9689, 0x46f68cddc2dbc0748d995ad3,\n        0x4338acea2099179babc1f7ab, 0xcc0fca21384a6773f735d8eb, 0x5cc17f9d3c9d8636229c1adf,\n        0x5af4b70e86e1d9ebcec76328, 0x73474b28f23261bbc278997f, 0x60b65df1d9c6c2025877cbc7,\n        0xe5f371b392daa99d60dc68f5, 0x6d459b8018d80c189e4fb2db, 0x3b782f2fb21f91af6f955e29,\n        0xe58e194ead8b059afb9cc6e5, 0x714a92db56aaef13c5eb239d, 0xd17462b734aae256a7c053bb,\n        0xc7364388960d6831d60e8379, 0xa6e642a3822390a909108133, 0xbb3455c47c1d625f04473e54,\n        0x473a8914fd186b8c2f53bd98, 0x56cb778707e253d5bcd9c897, 0xb212545df5bc302598e61647,\n        0x879e816f, 0x0, 0x0,\n    ]\n        .span();\n    let public_key = Serde::<RSA2048PublicKey>::deserialize(ref rsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let rsa_with_hints = Serde::<\n        RSA2048SignatureWithHint,\n    >::deserialize(ref rsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_rsa2048_signature_assuming_encoded_message(\n        @rsa_with_hints, @public_key,\n    );\n    assert!(is_valid);\n}\n\n#[test]\nfn test_rsa2048_tampered_message_seed_0() {\n    let mut rsa_sig_with_hints_serialized = array![\n        0x766ad7a96b6a74dcb0d4ee21, 0x3c31169ffb4c539d20a19c30, 0x4813ed39e65994f370938d52,\n        0x19c0d08706b4597638cc3e30, 0xc7e80539ead20295baaa808a, 0x299992cbadae99aeb97422ae,\n        0xb226c9a7b454cef99bca662d, 0xbf70d4a08cf48ed827e59567, 0x7f746d2d77af83b2122fa87b,\n        0x9aa92b2128d9725d8656dd96, 0x3b526db14be8de881d9d16f0, 0x60ef9dd9b7346128d4904a2d,\n        0xc956b02d42c83dcd03152b6a, 0x417242ec1b72b9d2c28b3a8e, 0x31094b84fe9156b6d0462fe,\n        0xaee058ad4254ba267bfa369f, 0x236079af55b0b25854deb6d, 0x1e371829465e97bdc783fbc4,\n        0x308ac6dcf29aabb20d05c85e, 0x250ca4cbef9a5ded24279a60, 0xc2667b7be6ec40e1236d59df,\n        0x92c2ffdd, 0x0, 0x0, 0xccd4d72e904d8d17594ab5f7, 0x39711006ced57a24b0b3ddc,\n        0x2ccfe85722998e88ce696503, 0xbb4d033f6bc441dd1a08890f, 0x126b5e07fd274f3c18f28ad6,\n        0x6d1e293c0af656e2d1d56a47, 0x311e4ff1497cc51e1df029af, 0x9b5c4fd21b926c416bee361d,\n        0xc2763b9d1cc4af2edb1ed69b, 0x38c872d56da6fbe02f39f2b1, 0xbf55fbbf55d4cc74e2b1257b,\n        0xe6128d2cb2c59820b674fdd2, 0xa13fdbe9e48e2bf32e68a32f, 0xa91b93a068472e0dda54fb2d,\n        0xddb762befe90bd234be8b786, 0x8de87eebcd0e03fcc11febb2, 0x58c09101bebc3bd1c58c0616,\n        0x7ebe6e4cc8aee40772b501ec, 0x8e478ff6dd4c4a4422e8f182, 0x10d134c96c1d30ec1c29823c,\n        0x5dda7fcba4eb273a149eb833, 0x5c6704f1, 0x0, 0x0, 0xa9dc684ea7a072c583378bdd,\n        0x234eebfb13b9f83dbedc9689, 0x46f68cddc2dbc0748d995ad3, 0x4338acea2099179babc1f7ab,\n        0xcc0fca21384a6773f735d8eb, 0x5cc17f9d3c9d8636229c1adf, 0x5af4b70e86e1d9ebcec76328,\n        0x73474b28f23261bbc278997f, 0x60b65df1d9c6c2025877cbc7, 0xe5f371b392daa99d60dc68f5,\n        0x6d459b8018d80c189e4fb2db, 0x3b782f2fb21f91af6f955e29, 0xe58e194ead8b059afb9cc6e5,\n        0x714a92db56aaef13c5eb239d, 0xd17462b734aae256a7c053bb, 0xc7364388960d6831d60e8379,\n        0xa6e642a3822390a909108133, 0xbb3455c47c1d625f04473e54, 0x473a8914fd186b8c2f53bd98,\n        0x56cb778707e253d5bcd9c897, 0xb212545df5bc302598e61647, 0x879e816f, 0x0, 0x0,\n        0xf11082a78e2349176eefb845, 0xa2c474b18dd8215e6ce79a2, 0xaf8397d226331e6fe0287b82,\n        0x2021be0dbe82e1d87ff0464a, 0xf9f671cbb480c9ad30e96b04, 0xbf0341d821907bf2d1714934,\n        0xc4133dd8b0fbec701c6bce5b, 0xab8a9912700daed15fb14efb, 0x6408b84f7f8cfcc466adb647,\n        0xed064d750384670cdc484c57, 0x10d17bd4d1d8b673945244cf, 0x3661fd2009f806b98f962802,\n        0x3ded8d1c80a858c317f106ea, 0x69490720cdaa41dd567bfd75, 0xa2e9da91a7303beb4b22e507,\n        0x63d845332aea5d5d79157f21, 0x1ba1ef9812c965e541b8c9e7, 0xadd80c35198e137ffef51c0c,\n        0xec2ddf921bd92a5be54e75d5, 0x9f260f9358d8c772581bc666, 0x49cb9677cbc1c13c5b5a6b46,\n        0x3a2d6680, 0x0, 0x0, 0x61ae0775f0594f0d3ec84d6c, 0xcdf82c4368c89d619ad6c4ec,\n        0x16634f8f537349438fbf800f, 0x18bb5fd323098da014d9e4e9, 0x3de3d2b1c1ce83174249eac3,\n        0xe04e43c5856d447e64fb2c49, 0x8315c17c23405e47aa9dfdaa, 0xdd3e2d06e6755e5877139c96,\n        0x1de63f44a100a924034140b4, 0xd1c1be2c6c01be2cb6165113, 0xb3f8ef010376c8d557dd3a74,\n        0x5330b322e6537546d099577, 0x50feacf7ef56d00d299880d8, 0xde8af60590cff5c21c9021e0,\n        0xc719c781d43d99eac9c9a446, 0xa03f627aea3b9c54fe08cb8b, 0x2fe3ddee1358fa008dcfbd75,\n        0x183d0552096beeda805632ba, 0xead565b3a9fd13f32d94abbf, 0x8aa3b518bf3670dc8a44dce5,\n        0x7ce23145e486815f1397916a, 0x836001e1, 0x0, 0x0, 0xa50443039d3dd37156158183,\n        0x383a7d1fe53348285bdd2f37, 0x3e634aab243fc03bdd9548c9, 0xf63f0748d8ca9bc50034c997,\n        0x5cc782e51c7c576b5cb62457, 0x767abde2f4d3fc3d27c8dc12, 0xc55ace8470f37a3727c4cdb6,\n        0xa970e7780d86111b86e8184c, 0x3b930d12e10453014f602550, 0xe86920884a33c79d586e5b08,\n        0xe1c35a842d9968776b9a5756, 0x2d87248120b10947502a05c9, 0xce2325942bb6cfc89ac9a16d,\n        0x3023e567a6aeaa0e56e67c5f, 0x931367e2e28f64cf5e67881b, 0x5086944531c4016e1b638c8f,\n        0x2041352d23b8eb7553c90821, 0x45e38d7e09438b118b8c8797, 0xd15618e1fa2be214b20a2b62,\n        0x613c5bc02562fac980d54ff6, 0x3547852fb77b7ad22f7a3809, 0x7599fbf7, 0x0, 0x0,\n        0x25772373859fcc1ff880a9ad, 0xb3d1a77be83203586116cc33, 0x249ddde6a735af8d54f76e5d,\n        0x126236052ece65c16a4f8147, 0xc14108cea2b89f8bd216819b, 0x31e5b9cd08617bfbebc340ec,\n        0xc533488c6e32cee86b51bb65, 0x3427cbf5c389545877454003, 0x5f471a99ed38c12709340c97,\n        0x782d84eec1f578cf6332df12, 0xcff0e44dab2705c3df8ed43b, 0x828932cdc82c07604ed8aa16,\n        0x3f3c04ef18aff4f15ecac8a6, 0xb00f3fd36e39d0b3ba293f0e, 0x98e9053c9079b132080e1433,\n        0x8ae039670f1f588d49b0ead0, 0x84e04057fe631a9950e3741e, 0xf0975e0d1d87294c0779e4a5,\n        0x9af5116c3122c9454c33abf9, 0xfc8e70dd2f1882948bfaa669, 0xc4110d0bb3e3fe5bd4aa3849,\n        0x63ed1112, 0x0, 0x0, 0xdde6339489f82be2a548914, 0xa6129a46e7fa08cf79fe8795,\n        0x4ecf9c35860837ca5cc9964c, 0xce764f24f9a04630792a3962, 0xb037bf199470e6de572c42bd,\n        0x956ff3546d57ee943af1668f, 0x9677e96ffddc8fb4befbe60b, 0xcc50d5f30da8488eda5e2c68,\n        0x5c1aee3bac6f9bfcb475b589, 0x417cbaff0027179506246182, 0x4884fa40151152ccfb8f2361,\n        0x5fad486584738fb532be17dd, 0xdafafed3e1c4cd027bba63c0, 0x7f443066f06aa1556dd9abb5,\n        0x4b627b9936231df8ae4b77a0, 0x84fb2d5a4f24cfe981dbfad0, 0xb876a978d779736ade0abc08,\n        0x5e6ecdc675a0b2c27e3a310, 0x68b895aa08ce6e80cc24b677, 0x933d588163cd237a200f2ec6,\n        0xdf366116dbf8e636789c8917, 0x440972fb, 0x0, 0x0, 0x4c43909d3df7aa01fc8f9b55,\n        0x573f92547eed486eaecf4fc4, 0x706df3b0fa507cf78864078e, 0x72beedac7c3f62c50da7858,\n        0x7b01b47908dafa52fa8f40ca, 0x42c7fe0d226b199ff3a8b27a, 0x2cd291e0f2b7259731ca1103,\n        0x9936fd0d86cce4683dbd3593, 0x6fa4eae97809921e2e8f1c29, 0x61bcf43cb948de83f418604c,\n        0x4be8bf5f7aa4f97164b57e28, 0xb2cac9559ad2a26568d798c7, 0xc9e3f5b00702b0a067b7ce6d,\n        0x42738b954118f7fc09daf06e, 0x936703c37dcc919aeabbf3c2, 0x8234f4da6b15efc32f91b03a,\n        0x51016906f1aba3d0051cc8d8, 0x29c616b65059e5257568c86a, 0x9e7959ef4cbfa69866c3ae8b,\n        0xad55fa216ca080ce5f33515a, 0x4010f7d945e56f9faaaeed47, 0x59c35b15, 0x0, 0x0,\n        0xbd7ab4dca711f0d929017d0a, 0xf6e1b23766720a08df2e064b, 0xf743a47b9ef21525e4a3851f,\n        0x2e9e91630551f14e278d959f, 0x450e114a827f3fe74024242e, 0x768f0b12f0fca0e28cad2d5,\n        0x6f7551b524fa35f7afb69fb0, 0x503e453c615811e1bce63aea, 0x89d3c0aa219ca344b32b4a69,\n        0x9847c02179a77916a0aad3d0, 0x363a2da6bb7cc920afd971f9, 0x105756bde27aa2e4a1654eed,\n        0x782316203cc0dd1bde9739bb, 0x729e9df0a4384508f628312a, 0x7c58ad79ca4ff22633b6c393,\n        0xc25e962083bee700b96ce224, 0x4b99b07dcff3f811dd6d63e2, 0xa07af35bb0745dd4de9d5dc1,\n        0x2362f99b653a6d200acdcf4c, 0x7ed1f7a32c6633f50a1a6d1f, 0xc67831f8385e2ebf6c0e15ce,\n        0x36e6be8d, 0x0, 0x0, 0xaf2e85f517483d20277d9fef, 0xa6c8e9ef245c3cfbe92f5583,\n        0xae0e652d9bfd555164f5dde9, 0xac463ea67f143f6b90484d24, 0x292d0d6d7a0f61537e241903,\n        0x1dbd26b03b4c300939500257, 0x38f5405d2d4eb07f94eb4174, 0xebed3bea8633f2024a17fa8b,\n        0xd8029bd940f48c17be9061cd, 0xdb881dc57fa541995190cffb, 0x28dbb1531a44706a35f17fe9,\n        0x47ad149d189b70df6962e01d, 0xe56b6feae22bea7827cf0aef, 0xca565c0873f303db366b4122,\n        0x18739e8523299686923d88f7, 0xe4c0c42cd30512c887141263, 0xd6664b534d1f54775647116d,\n        0xccdd2182bb113823e3c8cae, 0x5351a577848f05aa228c7e, 0x12209ca46ab63bc8985be0c5,\n        0xe39f22696539616774a946cf, 0x857b13e2, 0x0, 0x0, 0xb4b75cf7190e9fb150c78ed,\n        0xebb37162b1d1a0cc8ed4e70, 0x2e90eaa6bca468a75954af94, 0x921837f27c919b98ea12bd7a,\n        0x938d23cf452c57690e41acd9, 0xeaeb0bbd339278e588377648, 0xea059eb1bcb1327413df220f,\n        0xf3d015ee9a83e173bbfe05db, 0x6eca8ea01474071813e0575f, 0x478da59c5392a7c4859552b0,\n        0xd53538319b99b57602230736, 0xdfa5ccd9411adccaae6481fe, 0xfbb3284f1a46aab145b14e97,\n        0x54ac3cb4084ce72b420b1440, 0xfc0030ee568632dc99eb3e3e, 0x67838dcc7ffababee905e4cb,\n        0x1dccbde1880631c960965f05, 0xd92ae551a3b09f2b1914b2c9, 0xb92dfcad76ba37636909b5ba,\n        0x6d02704ea436775eb9eba0a1, 0x1239f0c36942aa41d0fdb583, 0x7966d36b, 0x0, 0x0,\n        0x2f0370e0de67e0e0204d494, 0x41e6a7ffb185c93fc567919f, 0x33b32ddef77fc52a3e1b5a8c,\n        0xff9cdac2a8555b74120dd0a6, 0x374fe9884c8e839da4c5b64e, 0x765771b2daeb10f3e43d714e,\n        0x6e482c50677c27f548576bb4, 0x1ba9ee7076cc48c2028e07d0, 0x2d544810350024a0c1b4d179,\n        0xb8f7bf71b996e3c125d6df41, 0xe1527c84c71956afc34f6845, 0x8c339e263df547b486a303c1,\n        0xd671bf4705270e96c2dcecf6, 0x8e2ab787b0d997e2c435288d, 0x5aa9c5acfa39c50a3921e905,\n        0x99a4f9d3b39672a4ef023e78, 0x299824406248082c032f9e88, 0x5cce13392a9c02c95f51a627,\n        0x8ad6ee4d053df429a6f03f9d, 0xdcf0e7cafb7fd7f3c7f87d80, 0x9aebea38b3e33b2b482c8a04,\n        0x8bf92cbb, 0x0, 0x0, 0x9f7d6f589e82e9756cb90734, 0x1efc494737c83d8d1e5555e6,\n        0xdc14db376bb2abe4ad6c5145, 0x6350095e5153267e0f7cccd6, 0x2f11b257bb2b86998a1c4fe1,\n        0x1b0f01fffa4cb3d342c3331d, 0x45f2b93d6b87e6c14c8bdb25, 0xe0443287f9111fd56efb078b,\n        0x1560ccb1b67cd638d2ab63d1, 0x48598e67a7c87a38e45761f0, 0x42e95914d4ce2835d31ffdff,\n        0x39b5c97ac03b49dc9f8f6118, 0x1264a7647a6a15794f811a46, 0x83c3d06dbfb2b86373c10c27,\n        0x930c355b5fa314b6b1620102, 0x22692e942620240d77d0c6a9, 0x7b8897708cd33be40719d6e3,\n        0x7df5c691973b2ebe3fad0373, 0x6703a5c064a846c40c588c44, 0x2ae4b8ea5e745d2f0c269bbe,\n        0xfe723d71902007fbc8a70662, 0x857fbb68, 0x0, 0x0, 0xa5af2060ca06c184e5892fdc,\n        0xddc0a0a99021868d6da0893d, 0x24b56567184dc2acbcf5c73e, 0x160ef95f8c1f209f220add52,\n        0x2534d4dbc6d040d83fdb27e, 0xe9975a62f1ec391cc7426ae, 0x491ed56f50664e259b8ebad8,\n        0x7fd81ec116d12e3df8c35dc6, 0x2a894fd7972edf7865cc64f0, 0xcc22be61d6c9dcd87bbd11f7,\n        0xfd08aef895fe6b35568a1478, 0xf859f2778a321a7653ef2225, 0xf76ab371c23da4e6581b30ba,\n        0xeb87317e55dee41753d04513, 0x65f710857dc2c2200f569276, 0xda8ec2912b42abfb71ff2aa0,\n        0xef0a6b1ecc8548494c574227, 0x91b537e4d720dfa8b9997cd2, 0x7c31d1185eca8ca5c6625a84,\n        0xb78354ea69a8e98692057c26, 0x8d1da54563cc19a1f35e8c2f, 0x639a0b16, 0x0, 0x0,\n        0xa875570c9d0284f771cce145, 0x591c0201ab939b39b4e90b8e, 0x637eda8b6d46c7f37c41ba1a,\n        0x4108ec753bdbd2b8355b71da, 0x3e09320343a531c8f224f413, 0x1b9bf7cf3daf215cb444a32d,\n        0x41ce25a20127e9fb2c094c62, 0xace162be846660ab7dbdf99c, 0x2b033b29ca496f3fd509fddb,\n        0x9d4c1e14a408995d3f7c5bbb, 0xa66dc01cfd2bd5f969dd2e4f, 0x627f37970e930fadd339ee01,\n        0xc9aff619c84d5b4d8397cab8, 0xae250d0978d29cc49ab124fa, 0x2a5d7e131b5b9e30a46c41eb,\n        0xd55d087936c566f14dde0f46, 0x69846557a74460713cac372f, 0x8d8ab518931b5aa875a9d0b2,\n        0x27710e2b2af85a3b75ea264e, 0x1d3109d2d289a899712e2dd, 0x61383d251a5299190b540559,\n        0x4398936f, 0x0, 0x0, 0x747e4b323bf2a87bb86f552b, 0xf7f2ab1dff8cc754dcdca592,\n        0x1f34a08fd4c07735a767dc51, 0xe746b680a62bfed15401f9d5, 0x97f4eb618871a00cde3631cb,\n        0x8339d6fbea40aa941ad85327, 0x90c5edb34de4570c96a5a8f0, 0xefd960fb4e9b509a7e987b10,\n        0xc05807b47e82a5d7c3825160, 0x314c4c6704487c24b8f15709, 0xc392683af214f5f11cf3b479,\n        0x948c6d20cd304068c11bdd9, 0x3c78b7c1b58f7f9a72fe71d9, 0x9c5e03c8abda7529065625d5,\n        0x1a01ea030d11b96aebb1a48b, 0x8c7d949a55df28049f8611b0, 0x9e8bf8c8d36ba12e7aa228ac,\n        0xb9fce7d6eefc436c65b5c89b, 0xf8136f55dfb42a001616e769, 0xeeb08cb097dcaeb0f5243d31,\n        0x94d23cd76a90197b1a55f77c, 0x260e3765, 0x0, 0x0, 0xcd3ba7bd04a31b040366053b,\n        0xe6f10c837922880344fc9e38, 0x5d689eba02224e76eb42b684, 0x6e7643cf0b82715749e94cc3,\n        0xd140b4dfeb987b80865ec722, 0xe94da4823df0f77f53fbe6b0, 0xa1464b2c1b416476e7472812,\n        0x94a7a32cff9f1d73f72e09ae, 0x4e74a3c7d9049e7e96cc9ea, 0x1110951d3cc54cf1cf14d94f,\n        0x67cea4b746527cab8d59000, 0x36179b0c462d4f5cf76e42a2, 0x1742726164e268484e912ab,\n        0x22709f163ff2cd135caf2445, 0xf81d959cb2c9f991011eaaab, 0xf4f1c1cc347528cd1a4e1e62,\n        0x4664c8151c0d996bd9f0420f, 0xc086ba3be97b7ee3105c59c4, 0x9672fb601d8e57065a40c748,\n        0x6f878822fca3f1d46f3a48d0, 0xbde69f62a7e1eb664ba1aa3c, 0x9de2bd9, 0x0, 0x0,\n        0x4482aeb75faa1cb499c00e9e, 0x8b344a97e26bd3b78fdf7075, 0xad4d20ca51614ca72be40048,\n        0xaf5d2f7ebfb641ff1b918596, 0xb6d8ec60ccce46edc936e0cb, 0x690e2923dae76b1c1a8a60a2,\n        0x85c2e3ef5f249cd3e100bbac, 0x4d9a6bc3931d8bac5d9ac6ee, 0x169d730a5e2e1b69821c527b,\n        0xc15ca47f3a1729e6c2a9ea74, 0x474fa9cf9bd7331ec6810757, 0xd422d04149b9b0debce1cb01,\n        0xb7efd18fc08f89555d4c11b0, 0x269d2078f1960a85fc421a70, 0x46b5771a2f9d3510c9c3769e,\n        0xb623a42327ee23cbcb526328, 0xbe8a45ec511d7a54c64fde80, 0x3328dfafc42b91b1c69e10fb,\n        0x264c1e6be83c39fecf98268d, 0x25408a50e9b65f70f5df411a, 0x41334cb48418bdccbe5c4a47,\n        0x5c88a46, 0x0, 0x0, 0x25316546d55f7e0dcbe6a3ac, 0xeacfb5cea96b8a320936b33c,\n        0x6f6812d56f2c9d3dad9d17dd, 0x684a95ba1fa821ea81a11556, 0x1641c404477985dffd7cc386,\n        0x871d716b23e46bc3b4cf9c86, 0x8fb05800ce27e75c87859c5f, 0xf74b57029f2826c3d32008f1,\n        0xd5b3c939cbb451990b332659, 0x3a958ecf6774f75eef392e66, 0x5faf5e626a2d5c1986e4531e,\n        0x8579929032fe8da13ad1017a, 0xf19fd7bd978667567947badb, 0x658966b7546c960300b13096,\n        0xaf6c205a1a8f1b46855a36e1, 0xc1c3e6045b8b25a219c1335c, 0xf0fa6ff6bf56bcbb0116f9cf,\n        0xbd84e957d385047457f5b35f, 0x9421fc8ca5d0f21eaa8a7af2, 0xddb3c45dacbe09d2b201c3ce,\n        0xd931044489e3194da19542cb, 0x3a57c4, 0x0, 0x0, 0x9c2e41e8b5c429114a80a858,\n        0x5a966e31657c7f8c4b03d19a, 0xf6d631a3b323e9d2d0bf9577, 0x5344cc9641e9b5f74f7112af,\n        0xe429d282cbf83a3a6b9d4cbd, 0xb7113a43b4dd22a6685afcef, 0x27da7f0630345d55a449bef0,\n        0x20d6e5d82e5c8e25fee2526f, 0xd4713cd17ed740c4e73e65e6, 0xcc3bcbff28c0d7c447d07124,\n        0x23305fe2dee2774c0c4edcdb, 0xd281cfaeed124f6cb215f85e, 0x9601c6e2be06ccdd44830d12,\n        0xe8c75f8ea6aff1231d173084, 0x590ebc020ac0a24a9767b4b3, 0xb8a534f177c2d240170ae8b4,\n        0x792877e41b28f602a3a9af96, 0x187312ca50914f7652ece934, 0x2d4a3f443efdb605e7461262,\n        0x1d7d53cf6231accf900fe2f3, 0xbc39ae48093f0259794962a7, 0x18f99fdb, 0x0, 0x0,\n        0xffa9482e842897e00f682bfd, 0x834c8268bdfe3fe9126289d7, 0x285ef56cdea1beface4af9b9,\n        0xdf26308909c6236175c8b94b, 0xd0f05616288f3037160caaf6, 0xe037d0024d1c561b107d4d59,\n        0xb53d73e81fea4422d6277248, 0xe198cc789000080db790ae73, 0x4a534c95b61cf17c5ba235bc,\n        0x908c97c0440dc62088b9a69e, 0x7ae47a71e12de983ef98db45, 0xf8562cc339b439ad34d2fc63,\n        0x2eb470ce422fcb4897856278, 0xd00c1f59bbf2e4200912498b, 0x46cd5901f82298f50f8f37e0,\n        0xda394bd5a6faa8c6f98d178d, 0x9489f43f270c6bd97a56f14e, 0xba345afd6fa08c5b66103257,\n        0x172117c1bd860df49c7f68f0, 0x693100c5b36bc3d8210615b0, 0x2c8d3dcfb83ac31efe164c, 0x4400815,\n        0x0, 0x0, 0x6505fa9f69a8798873dcbca3, 0x540522659d27e26b155741a5,\n        0xb2cbbe014d7b317df5281b60, 0x3159a1e8a255736027c15b00, 0xec172ec870f4885861fa715,\n        0x450108025ca4fdd95d3ea4be, 0xa7ca5bc05077bd9a6fe4f01e, 0xdeea885ab4bfc82189ac2b72,\n        0x9468616b7bb8b2d1eb378868, 0x56276a0966928b08971684af, 0xd16a3d10a6032348f539e2f7,\n        0xde3dc7466c581674d211cdfb, 0x5440706286f05e61df345166, 0x1cea89c8227619129efbe254,\n        0xf84c4b9dcc9de5cfdd1b745f, 0x7439a70edf670ccdb8757ce, 0x9a9d2a2044ce0c63c7749a64,\n        0xd575c9cb73c6f9d36bb8d1d7, 0x5a9ee0be1abbe2291846dc4b, 0xee674484c468ac3848193a80,\n        0xef5f5b67e32d2ec4ebb4cde5, 0x3080adc, 0x0, 0x0, 0xf6183ed40d6aeb397805b3da,\n        0x8ceb48f0508ff239d7bd175b, 0x9f0b273513d427b0a7d38648, 0x82b3956877f67e15e22f2b4a,\n        0xdbcdf5049103c9c7b7ee4bb5, 0xa4880f67b985ed22f3b7ca29, 0xccc0bac7846da5cc7c7ec380,\n        0x26fada19f84b75c2954ff0d5, 0x607e2a4f32863fead642e8c6, 0xd81931fe7d0a479f060e12a4,\n        0xdb46e7ef3efca9bef3b7728, 0xedba7c2de2c90177fc3f4840, 0x956ce80fa9fdea3dcc2a6ff3,\n        0x5a8e76cc6a2b0143634b7489, 0xff054f521cf0d1a934283a01, 0xbef59d14565d6ba48d073ae4,\n        0x650b2d52c1122a56007b90a, 0x7c76c9af9f608addb1afc04f, 0x2ba9ee990da5b1a115506e61,\n        0x56ffc7c840d5cb87a0d64779, 0xfdad49c955958334a75424e1, 0x100788, 0x0, 0x0,\n        0x40f427e784fe2b4a9eaef4af, 0x2f0795ae8e0911ef1df50341, 0x90df7762e822199b4e8f9dd8,\n        0x3a0b913a4eaf581bb478be28, 0x207103d33ce1e0b8493a8cd4, 0x8656a65ce57b0b8a4dd5622,\n        0x7f95bcb4d175408d176f192c, 0x3e7c781e0afc6ece0cd3fc3f, 0x399d9626316a4a703009d68a,\n        0xa406d4c272643c0e932ccfb, 0xbd7c66e6c97d1c5db9fa9355, 0x8eed69ec5068d7cb399c4ffa,\n        0x79fabd0f06e0921e6cb79d77, 0x8cbbba1bc258146680adf88d, 0x16fcaf5768364d146bb355ad,\n        0x225fe736e47e97ed2f956d95, 0x70d015c5a2328fda9308b98, 0x673d4d765ad984ed15b17de0,\n        0x1e5a5778fc5a30396b36b904, 0xe49771bd3a3478f09574b1ea, 0x35c5a852b2225574a7952926,\n        0x353afb31, 0x0, 0x0, 0xba3c64ce6140f14718d0875d, 0xaea551a60be2bda2d6bf6db3,\n        0xe8a0282d2347aeeb81e33e89, 0xb8c1ab53b1e38117bc833379, 0xf028317bd0b9336aac1c8012,\n        0x3c856cf187839e9d21dfc4c3, 0x880a5e18613966ff8cdd7cd8, 0x79a454208ea16d30679cf088,\n        0xf3ef14e5fbbed7488440d7ea, 0x418e97737d58665881d8462, 0xf4fc8d9df7440e8998f035ce,\n        0xdb8e672415f226facf42e72d, 0xe589c0b91168de2021f13fa8, 0xa3085040132adf68a6e77dad,\n        0x94431ba64e4a6e6b83409212, 0x26e5b535fb3ed44b9a28e8b5, 0x52ce3fd32264c1d47149801e,\n        0x9c8ef28bf945bc77a227b011, 0xabb4c1b5e2a27b69704cac21, 0xcf74f58df7e45d4826769eea,\n        0xb2159f7de25a0c030219cee2, 0x134e7fac, 0x0, 0x0, 0xebd8d90c934d17dd720426a4,\n        0x33bea95aa8ad5797da6c4efc, 0x7fac880279bd173527763ac2, 0xd909e429bd1b54225afb9391,\n        0xcd2c7929287c08f6773cc15b, 0x3dcde19b61dd92d44568e30c, 0xc4fe323e9fcabf11e0fef9f9,\n        0x2c768c0140cad8de1b3f8295, 0x5ec06f9a55af974795824dd4, 0x71249dd9d21a50f8a5dbc25,\n        0x9c236dd1615cc0a9f1cfed04, 0xba5a73986d84f4435169a34a, 0xa02b96c267abf2aa37dde261,\n        0xc2e354265ebf226db4ead96b, 0xe5ce9a686d3e5e30e5e7d927, 0xaa9aa8ff79b86b3c71463e0f,\n        0xc7573536e36cb43693dbd891, 0x23b6e4c59c0de1ac968462d9, 0xb20bf031108b4e72afefe016,\n        0x21e962fb9134282b48547ad, 0xa710aa758ef9c12b377d9d41, 0x66af5f92, 0x0, 0x0,\n        0xfcbe8e8bc2857c63648e74c7, 0x3c387f8020a8e593e0b552fc, 0x8ad201a4b3f0ad06ca1cad3b,\n        0x89172fbe0f87df535688ccce, 0xa60fd06f89622f8e0ab0e81f, 0x9d95dfbbdbfb83d920f26406,\n        0x3100ae331c6bcdbd5bab2863, 0x1cd23a1e15830352e125d568, 0x6d486ad849053b6f55603009,\n        0x119e3472ed62abc0075a2f7c, 0x66cc98c72d2681a98920289f, 0xd6eb1f2dc51f8afa59605173,\n        0x6c3fa021ab66060a374d7ea0, 0x723138898370b39a75ee7b1a, 0xe92d868e3a8be03af9568450,\n        0xf2f5f837b5321258e6bc92be, 0x27361dd77e44ebee906a0ebd, 0x7003f43a6806ccd3b189ba18,\n        0x97b5b27be13f5b8425e2472, 0x855e2bd2e42c6b36bb09545b, 0x7aeebee267ae270f26abcff0,\n        0x47d88976, 0x0, 0x0, 0x8b00c396084b4115f3b0969, 0xfc60246f4f9cfb7e951de468,\n        0x8022a8e11b4f620d48a3ae49, 0xd273b3ebe223884b92885a5f, 0x5f57fa057af4248d7576fa82,\n        0x5e57e11d3c9f89b7cc0e4431, 0xbc5bcef6f56876529e294838, 0x32c32a62b1db35b064a7a2da,\n        0x35bd10f3388759eb1c787e1d, 0x63c601309b69160147d3db35, 0xb1f8bdc3cb3cfd5528610a71,\n        0xcf31a9f03bdfed10e2e83e2d, 0xa80331587c59ced241357ea0, 0x54ba8bd269e3759998fb3358,\n        0xc67a073c9bfd12d1c69480cd, 0x6990cb91da39aacae8f6ce2d, 0x3073b77341d7f8914f23e232,\n        0x39fb609d816e019cc062f795, 0x6c58563224905c46dfc15b2e, 0x1fa29a5d77347775bad7e2d,\n        0x35100e5348a3d6577246b271, 0x1cd09ea0, 0x0, 0x0, 0x254f1d592f204e7e1117be57,\n        0x637fe9b28ec4e1f1fdb5fab3, 0xfde99837ed06ee649f6a5eb9, 0xba50e700e7ce0dd5d699c0ff,\n        0xb89b6c7dbb34bf4c0741c2e8, 0x2c77cbafe161b05a3f5ccf95, 0xc147dafe9d4dd839dc184d0d,\n        0x78ca47ed2f48eabc1b8afe82, 0x368de7c0d41674796d946bf9, 0x88a0432c9a758fd891670603,\n        0xb356dffba421f23219149c12, 0xc0df0de9addab73f0c677b23, 0x87fb6390c845a00a2b8c2549,\n        0x9b188ebfb7e3b513d5ea61d3, 0x7733b7d80a0c1f1fb3b87794, 0x308c820f6a5ab36f0492ce8b,\n        0x5be8d42b69166421dda3b512, 0xd55839cff5548d24ad1cace1, 0xb3cd437bd0293cff21b2402a,\n        0x516f98df61b6536f450f3a71, 0xf3eec531c8051639aeb8eb9b, 0x5a84fc9, 0x0, 0x0,\n        0x3693b7dcdad0fb1d8dae21da, 0xaa2d5a7fee71d0e906cab278, 0x5261e8b980d9f82cf85a741e,\n        0x805979217bb90514988dc3a1, 0x3c6a195de3e6163393f551c8, 0x25a79dcd01f7db4a73a32bdc,\n        0xa7176752a77cd24ee908f424, 0x4b7dd5151993ff88a4c03c25, 0x5dcf4916e368e17734f83d70,\n        0x2e5f1a6e9dde29cbc71f3d81, 0xf3552a7a1a4bd98489ccd41, 0x9ef5fdc24b5f5aaf500cf09f,\n        0xcae76c7fc41ae096aab9df71, 0x579928c3ee25c5800351522c, 0xd5e2ee4cf7c598422d6ae639,\n        0xd5508e83d4ad6c99e73208d7, 0x7523da007c5afd2a33842db4, 0xb293a4cb6cfef6673c866725,\n        0x8b23e76640f41d8d279e3da1, 0xb6493b8f9d86cd0c7a64ca1e, 0x6bf55177b0690d6f60230935,\n        0x8d7f18f0, 0x0, 0x0, 0xcf9b94648da0dc88d439cb42, 0xb19c1b4ed7e72d465dc45fc3,\n        0xe22642c00a0c25f6a008c710, 0x6dbbd01b909f016773fb145f, 0xef242bc362f4d1468c82e39,\n        0xe34317b99d8a82bea65e106b, 0xbc454454e26d6db44e7963ed, 0xedecd51a67f3162e0c834c5e,\n        0xdc830b6c09e84e9eae0a9ca7, 0xbad8f2a473274a65401c1dd5, 0x992e8052530e7b5c61f9a3d5,\n        0xd5315b554e0bcb21a5ace36, 0x6b83a662e5b7114044086c25, 0xff316e31ab82abcec0cc162b,\n        0x8c98f344a4995dbd05e66a77, 0xe81a043b3a0e65a2659c0f30, 0xb36df7f95fd54501774f350b,\n        0xd5e3f5af9878cda0a39a3de5, 0xe6056818952b06acb4c81ed4, 0xe54abb01d005ca29cf99a131,\n        0xd209bc96061f13ab6005f749, 0x886b8d88, 0x0, 0x0, 0xeb52f6df556abbdd63bf5e22,\n        0xaed60e75dae57df80b34ec39, 0x70fcd3e27df287e5753b20d7, 0x128b5971e45761158b8f3dcf,\n        0x16bb42b3873e00053132b0c4, 0x8b0245e9a0219afeafd79a79, 0xdb9e91446865bc1fc657888a,\n        0x25a871a4d2ab4269bbea7ac9, 0x3ddca061ceff660108ef52d4, 0xa7e61c5901838a28c34d99cd,\n        0x7544f5dbb3defa0163d7f17c, 0xca241d14cc49fae4a772b7f5, 0xbe29d28849a5e324aee3408c,\n        0x836767d43077526f48faa2a8, 0x8cd32c65af954bc68d0e493f, 0x7892b889609b1f9e6f0d79c2,\n        0x278ce3abbff2f5263777664b, 0x81cd003b95994a5b17a7a683, 0x9c86115d81e0632d5fc3c81a,\n        0x997516ed4cc19a8a483d09d3, 0x1e179242d56cd19e4f7aa60c, 0x451e7279, 0x0, 0x0,\n        0x1fe5390dd58ec47ccaca6165, 0xee0376fd38d66576b38407b, 0xcf065c5ede16b9078ed8b950,\n        0xe401e1dba006c46264e08784, 0x52c0f066ccb0e51a2836dada, 0x964e301923a41c67dc6b472c,\n        0x3031e417f447570565032bc9, 0x50c821279b44dc3b5b074a72, 0xcd5a7aedb746388d9305d94b,\n        0xe93818f4b95a48f01baaa16e, 0x9d558ad11e2bea56a6739a4a, 0x8f98e3a980cc27f5514501f9,\n        0x1b5009bfd2a8cf3f3dbb7737, 0x6ebe9ac5b62d601eab9605fc, 0xba78365c99e325914055aca7,\n        0x62889d4b8f17ddedd15ad267, 0x1fee7dce2fad2700f8aa8817, 0x5b2a16de45abfaa3ca0f804d,\n        0x348b77de9a9e9fdd39057b1b, 0x2d4143c1cd9b408801ac0932, 0xa3cf55f17eb11d4fb32b9426,\n        0x208d6195, 0x0, 0x0, 0xfc49e873313de2978312887f, 0x5fbe773faa24320f70e6ea6b,\n        0x4256b86e9528473bdd9e6ace, 0xd74f172dbdba542bc9ecda9, 0x96924c9de06632dece3702de,\n        0x69358eb612656ca3198158e2, 0x6d79a01613661779c78e0032, 0x4e3bad2411014a48f1259b42,\n        0xd8871b2ea785f687de8c7952, 0x4be6a0fccf274cf898f145fe, 0x17c2c3616f78801493116b78,\n        0x940f2f0ed4e8f04ff92ffadd, 0x9b5d10dd4a3522d51f93be51, 0x1556a11712de4fac4f6f42a6,\n        0x895f21afa42c4af48861ce0f, 0x226800704f911bf97dfd3f55, 0xe51750defa8db7ae997056cc,\n        0xe037899ffa2f92560d0555c1, 0xd2e12a9746629d0f3e5d14bf, 0xa960a9ca8b8dd7220eb506db,\n        0x66bbd4ab5e553d07fecab1bc, 0x3307cd8a, 0x0, 0x0, 0x67f2457b8c831d56a9929a0d,\n        0x96e370441e52fae5bbcae56d, 0xa93ed687236fc53206e0419a, 0x7fe79b87578b0d38b0d1c317,\n        0xf48d8398df15059bb792f949, 0x2514308d75b0450ea06b07c6, 0xe85e7668282416c14df6e0b7,\n        0x703fae82d76ba4de92480e44, 0xd86b0d011d4e5e495c06d796, 0xb329a5d9c0778130705ba25f,\n        0xbe8a7bef6b49924124bf136d, 0x719510f51704a78a4b63090f, 0x3be3feb5ceb690d534e57107,\n        0xd0a2d35b72ad6978b8bde8b3, 0x936079a39d638c5c33d6eadd, 0xe177aa16d66b4356a9f9bce2,\n        0x9a626604f2f0d249417e0ea9, 0x6be7c6bd4f517bd69fece5bf, 0x923735990296cdfb6fae17d6,\n        0xc1b535aee17900ed24102daa, 0xf2431179faa78ff59fd6503a, 0x202114b4, 0x0, 0x0,\n        0xa9dc684ea7a072c583378bdc, 0x234eebfb13b9f83dbedc9689, 0x46f68cddc2dbc0748d995ad3,\n        0x4338acea2099179babc1f7ab, 0xcc0fca21384a6773f735d8eb, 0x5cc17f9d3c9d8636229c1adf,\n        0x5af4b70e86e1d9ebcec76328, 0x73474b28f23261bbc278997f, 0x60b65df1d9c6c2025877cbc7,\n        0xe5f371b392daa99d60dc68f5, 0x6d459b8018d80c189e4fb2db, 0x3b782f2fb21f91af6f955e29,\n        0xe58e194ead8b059afb9cc6e5, 0x714a92db56aaef13c5eb239d, 0xd17462b734aae256a7c053bb,\n        0xc7364388960d6831d60e8379, 0xa6e642a3822390a909108133, 0xbb3455c47c1d625f04473e54,\n        0x473a8914fd186b8c2f53bd98, 0x56cb778707e253d5bcd9c897, 0xb212545df5bc302598e61647,\n        0x879e816f, 0x0, 0x0,\n    ]\n        .span();\n    let public_key = Serde::<RSA2048PublicKey>::deserialize(ref rsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let rsa_with_hints = Serde::<\n        RSA2048SignatureWithHint,\n    >::deserialize(ref rsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_rsa2048_signature_assuming_encoded_message(\n        @rsa_with_hints, @public_key,\n    );\n    assert!(!is_valid);\n}\n\n#[test]\nfn test_rsa2048_tampered_limb_seed_0() {\n    let mut rsa_sig_with_hints_serialized = array![\n        0x766ad7a96b6a74dcb0d4ee21, 0x3c31169ffb4c539d20a19c30, 0x4813ed39e65994f370938d52,\n        0x19c0d08706b4597638cc3e30, 0xc7e80539ead20295baaa808a, 0x299992cbadae99aeb97422ae,\n        0xb226c9a7b454cef99bca662d, 0xbf70d4a08cf48ed827e59567, 0x7f746d2d77af83b2122fa87b,\n        0x9aa92b2128d9725d8656dd96, 0x3b526db14be8de881d9d16f0, 0x60ef9dd9b7346128d4904a2d,\n        0xc956b02d42c83dcd03152b6a, 0x417242ec1b72b9d2c28b3a8e, 0x31094b84fe9156b6d0462fe,\n        0xaee058ad4254ba267bfa369f, 0x236079af55b0b25854deb6d, 0x1e371829465e97bdc783fbc4,\n        0x308ac6dcf29aabb20d05c85e, 0x250ca4cbef9a5ded24279a60, 0xc2667b7be6ec40e1236d59df,\n        0x92c2ffdd, 0x0, 0x0, 0xccd4d72e904d8d17594ab5f7, 0x39711006ced57a24b0b3ddc,\n        0x2ccfe85722998e88ce696503, 0xbb4d033f6bc441dd1a08890f, 0x126b5e07fd274f3c18f28ad6,\n        0x6d1e293c0af656e2d1d56a47, 0x311e4ff1497cc51e1df029af, 0x9b5c4fd21b926c416bee361d,\n        0xc2763b9d1cc4af2edb1ed69b, 0x38c872d56da6fbe02f39f2b1, 0xbf55fbbf55d4cc74e2b1257b,\n        0xe6128d2cb2c59820b674fdd2, 0xa13fdbe9e48e2bf32e68a32f, 0xa91b93a068472e0dda54fb2d,\n        0xddb762befe90bd234be8b786, 0x8de87eebcd0e03fcc11febb2, 0x58c09101bebc3bd1c58c0616,\n        0x7ebe6e4cc8aee40772b501ec, 0x8e478ff6dd4c4a4422e8f182, 0x10d134c96c1d30ec1c29823c,\n        0x5dda7fcba4eb273a149eb833, 0x5c6704f1, 0x0, 0x0, 0xa9dc684ea7a072c583378bdc,\n        0x234eebfb13b9f83dbedc9689, 0x46f68cddc2dbc0748d995ad3, 0x4338acea2099179babc1f7ab,\n        0xcc0fca21384a6773f735d8eb, 0x5cc17f9d3c9d8636229c1adf, 0x5af4b70e86e1d9ebcec76328,\n        0x73474b28f23261bbc278997f, 0x60b65df1d9c6c2025877cbc7, 0xe5f371b392daa99d60dc68f5,\n        0x6d459b8018d80c189e4fb2db, 0x3b782f2fb21f91af6f955e29, 0xe58e194ead8b059afb9cc6e5,\n        0x714a92db56aaef13c5eb239d, 0xd17462b734aae256a7c053bb, 0xc7364388960d6831d60e8379,\n        0xa6e642a3822390a909108133, 0xbb3455c47c1d625f04473e54, 0x473a8914fd186b8c2f53bd98,\n        0x56cb778707e253d5bcd9c897, 0xb212545df5bc302598e61647, 0x879e816f, 0x0, 0x0,\n        0xf11082a78e2349176eefb845, 0xa2c474b18dd8215e6ce79a3, 0xaf8397d226331e6fe0287b82,\n        0x2021be0dbe82e1d87ff0464a, 0xf9f671cbb480c9ad30e96b04, 0xbf0341d821907bf2d1714934,\n        0xc4133dd8b0fbec701c6bce5b, 0xab8a9912700daed15fb14efb, 0x6408b84f7f8cfcc466adb647,\n        0xed064d750384670cdc484c57, 0x10d17bd4d1d8b673945244cf, 0x3661fd2009f806b98f962802,\n        0x3ded8d1c80a858c317f106ea, 0x69490720cdaa41dd567bfd75, 0xa2e9da91a7303beb4b22e507,\n        0x63d845332aea5d5d79157f21, 0x1ba1ef9812c965e541b8c9e7, 0xadd80c35198e137ffef51c0c,\n        0xec2ddf921bd92a5be54e75d5, 0x9f260f9358d8c772581bc666, 0x49cb9677cbc1c13c5b5a6b46,\n        0x3a2d6680, 0x0, 0x0, 0x61ae0775f0594f0d3ec84d6c, 0xcdf82c4368c89d619ad6c4ec,\n        0x16634f8f537349438fbf800f, 0x18bb5fd323098da014d9e4e9, 0x3de3d2b1c1ce83174249eac3,\n        0xe04e43c5856d447e64fb2c49, 0x8315c17c23405e47aa9dfdaa, 0xdd3e2d06e6755e5877139c96,\n        0x1de63f44a100a924034140b4, 0xd1c1be2c6c01be2cb6165113, 0xb3f8ef010376c8d557dd3a74,\n        0x5330b322e6537546d099577, 0x50feacf7ef56d00d299880d8, 0xde8af60590cff5c21c9021e0,\n        0xc719c781d43d99eac9c9a446, 0xa03f627aea3b9c54fe08cb8b, 0x2fe3ddee1358fa008dcfbd75,\n        0x183d0552096beeda805632ba, 0xead565b3a9fd13f32d94abbf, 0x8aa3b518bf3670dc8a44dce5,\n        0x7ce23145e486815f1397916a, 0x836001e1, 0x0, 0x0, 0xa50443039d3dd37156158183,\n        0x383a7d1fe53348285bdd2f37, 0x3e634aab243fc03bdd9548c9, 0xf63f0748d8ca9bc50034c997,\n        0x5cc782e51c7c576b5cb62457, 0x767abde2f4d3fc3d27c8dc12, 0xc55ace8470f37a3727c4cdb6,\n        0xa970e7780d86111b86e8184c, 0x3b930d12e10453014f602550, 0xe86920884a33c79d586e5b08,\n        0xe1c35a842d9968776b9a5756, 0x2d87248120b10947502a05c9, 0xce2325942bb6cfc89ac9a16d,\n        0x3023e567a6aeaa0e56e67c5f, 0x931367e2e28f64cf5e67881b, 0x5086944531c4016e1b638c8f,\n        0x2041352d23b8eb7553c90821, 0x45e38d7e09438b118b8c8797, 0xd15618e1fa2be214b20a2b62,\n        0x613c5bc02562fac980d54ff6, 0x3547852fb77b7ad22f7a3809, 0x7599fbf7, 0x0, 0x0,\n        0x25772373859fcc1ff880a9ad, 0xb3d1a77be83203586116cc33, 0x249ddde6a735af8d54f76e5d,\n        0x126236052ece65c16a4f8147, 0xc14108cea2b89f8bd216819b, 0x31e5b9cd08617bfbebc340ec,\n        0xc533488c6e32cee86b51bb65, 0x3427cbf5c389545877454003, 0x5f471a99ed38c12709340c97,\n        0x782d84eec1f578cf6332df12, 0xcff0e44dab2705c3df8ed43b, 0x828932cdc82c07604ed8aa16,\n        0x3f3c04ef18aff4f15ecac8a6, 0xb00f3fd36e39d0b3ba293f0e, 0x98e9053c9079b132080e1433,\n        0x8ae039670f1f588d49b0ead0, 0x84e04057fe631a9950e3741e, 0xf0975e0d1d87294c0779e4a5,\n        0x9af5116c3122c9454c33abf9, 0xfc8e70dd2f1882948bfaa669, 0xc4110d0bb3e3fe5bd4aa3849,\n        0x63ed1112, 0x0, 0x0, 0xdde6339489f82be2a548914, 0xa6129a46e7fa08cf79fe8795,\n        0x4ecf9c35860837ca5cc9964c, 0xce764f24f9a04630792a3962, 0xb037bf199470e6de572c42bd,\n        0x956ff3546d57ee943af1668f, 0x9677e96ffddc8fb4befbe60b, 0xcc50d5f30da8488eda5e2c68,\n        0x5c1aee3bac6f9bfcb475b589, 0x417cbaff0027179506246182, 0x4884fa40151152ccfb8f2361,\n        0x5fad486584738fb532be17dd, 0xdafafed3e1c4cd027bba63c0, 0x7f443066f06aa1556dd9abb5,\n        0x4b627b9936231df8ae4b77a0, 0x84fb2d5a4f24cfe981dbfad0, 0xb876a978d779736ade0abc08,\n        0x5e6ecdc675a0b2c27e3a310, 0x68b895aa08ce6e80cc24b677, 0x933d588163cd237a200f2ec6,\n        0xdf366116dbf8e636789c8917, 0x440972fb, 0x0, 0x0, 0x4c43909d3df7aa01fc8f9b55,\n        0x573f92547eed486eaecf4fc4, 0x706df3b0fa507cf78864078e, 0x72beedac7c3f62c50da7858,\n        0x7b01b47908dafa52fa8f40ca, 0x42c7fe0d226b199ff3a8b27a, 0x2cd291e0f2b7259731ca1103,\n        0x9936fd0d86cce4683dbd3593, 0x6fa4eae97809921e2e8f1c29, 0x61bcf43cb948de83f418604c,\n        0x4be8bf5f7aa4f97164b57e28, 0xb2cac9559ad2a26568d798c7, 0xc9e3f5b00702b0a067b7ce6d,\n        0x42738b954118f7fc09daf06e, 0x936703c37dcc919aeabbf3c2, 0x8234f4da6b15efc32f91b03a,\n        0x51016906f1aba3d0051cc8d8, 0x29c616b65059e5257568c86a, 0x9e7959ef4cbfa69866c3ae8b,\n        0xad55fa216ca080ce5f33515a, 0x4010f7d945e56f9faaaeed47, 0x59c35b15, 0x0, 0x0,\n        0xbd7ab4dca711f0d929017d0a, 0xf6e1b23766720a08df2e064b, 0xf743a47b9ef21525e4a3851f,\n        0x2e9e91630551f14e278d959f, 0x450e114a827f3fe74024242e, 0x768f0b12f0fca0e28cad2d5,\n        0x6f7551b524fa35f7afb69fb0, 0x503e453c615811e1bce63aea, 0x89d3c0aa219ca344b32b4a69,\n        0x9847c02179a77916a0aad3d0, 0x363a2da6bb7cc920afd971f9, 0x105756bde27aa2e4a1654eed,\n        0x782316203cc0dd1bde9739bb, 0x729e9df0a4384508f628312a, 0x7c58ad79ca4ff22633b6c393,\n        0xc25e962083bee700b96ce224, 0x4b99b07dcff3f811dd6d63e2, 0xa07af35bb0745dd4de9d5dc1,\n        0x2362f99b653a6d200acdcf4c, 0x7ed1f7a32c6633f50a1a6d1f, 0xc67831f8385e2ebf6c0e15ce,\n        0x36e6be8d, 0x0, 0x0, 0xaf2e85f517483d20277d9fef, 0xa6c8e9ef245c3cfbe92f5583,\n        0xae0e652d9bfd555164f5dde9, 0xac463ea67f143f6b90484d24, 0x292d0d6d7a0f61537e241903,\n        0x1dbd26b03b4c300939500257, 0x38f5405d2d4eb07f94eb4174, 0xebed3bea8633f2024a17fa8b,\n        0xd8029bd940f48c17be9061cd, 0xdb881dc57fa541995190cffb, 0x28dbb1531a44706a35f17fe9,\n        0x47ad149d189b70df6962e01d, 0xe56b6feae22bea7827cf0aef, 0xca565c0873f303db366b4122,\n        0x18739e8523299686923d88f7, 0xe4c0c42cd30512c887141263, 0xd6664b534d1f54775647116d,\n        0xccdd2182bb113823e3c8cae, 0x5351a577848f05aa228c7e, 0x12209ca46ab63bc8985be0c5,\n        0xe39f22696539616774a946cf, 0x857b13e2, 0x0, 0x0, 0xb4b75cf7190e9fb150c78ed,\n        0xebb37162b1d1a0cc8ed4e70, 0x2e90eaa6bca468a75954af94, 0x921837f27c919b98ea12bd7a,\n        0x938d23cf452c57690e41acd9, 0xeaeb0bbd339278e588377648, 0xea059eb1bcb1327413df220f,\n        0xf3d015ee9a83e173bbfe05db, 0x6eca8ea01474071813e0575f, 0x478da59c5392a7c4859552b0,\n        0xd53538319b99b57602230736, 0xdfa5ccd9411adccaae6481fe, 0xfbb3284f1a46aab145b14e97,\n        0x54ac3cb4084ce72b420b1440, 0xfc0030ee568632dc99eb3e3e, 0x67838dcc7ffababee905e4cb,\n        0x1dccbde1880631c960965f05, 0xd92ae551a3b09f2b1914b2c9, 0xb92dfcad76ba37636909b5ba,\n        0x6d02704ea436775eb9eba0a1, 0x1239f0c36942aa41d0fdb583, 0x7966d36b, 0x0, 0x0,\n        0x2f0370e0de67e0e0204d494, 0x41e6a7ffb185c93fc567919f, 0x33b32ddef77fc52a3e1b5a8c,\n        0xff9cdac2a8555b74120dd0a6, 0x374fe9884c8e839da4c5b64e, 0x765771b2daeb10f3e43d714e,\n        0x6e482c50677c27f548576bb4, 0x1ba9ee7076cc48c2028e07d0, 0x2d544810350024a0c1b4d179,\n        0xb8f7bf71b996e3c125d6df41, 0xe1527c84c71956afc34f6845, 0x8c339e263df547b486a303c1,\n        0xd671bf4705270e96c2dcecf6, 0x8e2ab787b0d997e2c435288d, 0x5aa9c5acfa39c50a3921e905,\n        0x99a4f9d3b39672a4ef023e78, 0x299824406248082c032f9e88, 0x5cce13392a9c02c95f51a627,\n        0x8ad6ee4d053df429a6f03f9d, 0xdcf0e7cafb7fd7f3c7f87d80, 0x9aebea38b3e33b2b482c8a04,\n        0x8bf92cbb, 0x0, 0x0, 0x9f7d6f589e82e9756cb90734, 0x1efc494737c83d8d1e5555e6,\n        0xdc14db376bb2abe4ad6c5145, 0x6350095e5153267e0f7cccd6, 0x2f11b257bb2b86998a1c4fe1,\n        0x1b0f01fffa4cb3d342c3331d, 0x45f2b93d6b87e6c14c8bdb25, 0xe0443287f9111fd56efb078b,\n        0x1560ccb1b67cd638d2ab63d1, 0x48598e67a7c87a38e45761f0, 0x42e95914d4ce2835d31ffdff,\n        0x39b5c97ac03b49dc9f8f6118, 0x1264a7647a6a15794f811a46, 0x83c3d06dbfb2b86373c10c27,\n        0x930c355b5fa314b6b1620102, 0x22692e942620240d77d0c6a9, 0x7b8897708cd33be40719d6e3,\n        0x7df5c691973b2ebe3fad0373, 0x6703a5c064a846c40c588c44, 0x2ae4b8ea5e745d2f0c269bbe,\n        0xfe723d71902007fbc8a70662, 0x857fbb68, 0x0, 0x0, 0xa5af2060ca06c184e5892fdc,\n        0xddc0a0a99021868d6da0893d, 0x24b56567184dc2acbcf5c73e, 0x160ef95f8c1f209f220add52,\n        0x2534d4dbc6d040d83fdb27e, 0xe9975a62f1ec391cc7426ae, 0x491ed56f50664e259b8ebad8,\n        0x7fd81ec116d12e3df8c35dc6, 0x2a894fd7972edf7865cc64f0, 0xcc22be61d6c9dcd87bbd11f7,\n        0xfd08aef895fe6b35568a1478, 0xf859f2778a321a7653ef2225, 0xf76ab371c23da4e6581b30ba,\n        0xeb87317e55dee41753d04513, 0x65f710857dc2c2200f569276, 0xda8ec2912b42abfb71ff2aa0,\n        0xef0a6b1ecc8548494c574227, 0x91b537e4d720dfa8b9997cd2, 0x7c31d1185eca8ca5c6625a84,\n        0xb78354ea69a8e98692057c26, 0x8d1da54563cc19a1f35e8c2f, 0x639a0b16, 0x0, 0x0,\n        0xa875570c9d0284f771cce145, 0x591c0201ab939b39b4e90b8e, 0x637eda8b6d46c7f37c41ba1a,\n        0x4108ec753bdbd2b8355b71da, 0x3e09320343a531c8f224f413, 0x1b9bf7cf3daf215cb444a32d,\n        0x41ce25a20127e9fb2c094c62, 0xace162be846660ab7dbdf99c, 0x2b033b29ca496f3fd509fddb,\n        0x9d4c1e14a408995d3f7c5bbb, 0xa66dc01cfd2bd5f969dd2e4f, 0x627f37970e930fadd339ee01,\n        0xc9aff619c84d5b4d8397cab8, 0xae250d0978d29cc49ab124fa, 0x2a5d7e131b5b9e30a46c41eb,\n        0xd55d087936c566f14dde0f46, 0x69846557a74460713cac372f, 0x8d8ab518931b5aa875a9d0b2,\n        0x27710e2b2af85a3b75ea264e, 0x1d3109d2d289a899712e2dd, 0x61383d251a5299190b540559,\n        0x4398936f, 0x0, 0x0, 0x747e4b323bf2a87bb86f552b, 0xf7f2ab1dff8cc754dcdca592,\n        0x1f34a08fd4c07735a767dc51, 0xe746b680a62bfed15401f9d5, 0x97f4eb618871a00cde3631cb,\n        0x8339d6fbea40aa941ad85327, 0x90c5edb34de4570c96a5a8f0, 0xefd960fb4e9b509a7e987b10,\n        0xc05807b47e82a5d7c3825160, 0x314c4c6704487c24b8f15709, 0xc392683af214f5f11cf3b479,\n        0x948c6d20cd304068c11bdd9, 0x3c78b7c1b58f7f9a72fe71d9, 0x9c5e03c8abda7529065625d5,\n        0x1a01ea030d11b96aebb1a48b, 0x8c7d949a55df28049f8611b0, 0x9e8bf8c8d36ba12e7aa228ac,\n        0xb9fce7d6eefc436c65b5c89b, 0xf8136f55dfb42a001616e769, 0xeeb08cb097dcaeb0f5243d31,\n        0x94d23cd76a90197b1a55f77c, 0x260e3765, 0x0, 0x0, 0xcd3ba7bd04a31b040366053b,\n        0xe6f10c837922880344fc9e38, 0x5d689eba02224e76eb42b684, 0x6e7643cf0b82715749e94cc3,\n        0xd140b4dfeb987b80865ec722, 0xe94da4823df0f77f53fbe6b0, 0xa1464b2c1b416476e7472812,\n        0x94a7a32cff9f1d73f72e09ae, 0x4e74a3c7d9049e7e96cc9ea, 0x1110951d3cc54cf1cf14d94f,\n        0x67cea4b746527cab8d59000, 0x36179b0c462d4f5cf76e42a2, 0x1742726164e268484e912ab,\n        0x22709f163ff2cd135caf2445, 0xf81d959cb2c9f991011eaaab, 0xf4f1c1cc347528cd1a4e1e62,\n        0x4664c8151c0d996bd9f0420f, 0xc086ba3be97b7ee3105c59c4, 0x9672fb601d8e57065a40c748,\n        0x6f878822fca3f1d46f3a48d0, 0xbde69f62a7e1eb664ba1aa3c, 0x9de2bd9, 0x0, 0x0,\n        0x4482aeb75faa1cb499c00e9e, 0x8b344a97e26bd3b78fdf7075, 0xad4d20ca51614ca72be40048,\n        0xaf5d2f7ebfb641ff1b918596, 0xb6d8ec60ccce46edc936e0cb, 0x690e2923dae76b1c1a8a60a2,\n        0x85c2e3ef5f249cd3e100bbac, 0x4d9a6bc3931d8bac5d9ac6ee, 0x169d730a5e2e1b69821c527b,\n        0xc15ca47f3a1729e6c2a9ea74, 0x474fa9cf9bd7331ec6810757, 0xd422d04149b9b0debce1cb01,\n        0xb7efd18fc08f89555d4c11b0, 0x269d2078f1960a85fc421a70, 0x46b5771a2f9d3510c9c3769e,\n        0xb623a42327ee23cbcb526328, 0xbe8a45ec511d7a54c64fde80, 0x3328dfafc42b91b1c69e10fb,\n        0x264c1e6be83c39fecf98268d, 0x25408a50e9b65f70f5df411a, 0x41334cb48418bdccbe5c4a47,\n        0x5c88a46, 0x0, 0x0, 0x25316546d55f7e0dcbe6a3ac, 0xeacfb5cea96b8a320936b33c,\n        0x6f6812d56f2c9d3dad9d17dd, 0x684a95ba1fa821ea81a11556, 0x1641c404477985dffd7cc386,\n        0x871d716b23e46bc3b4cf9c86, 0x8fb05800ce27e75c87859c5f, 0xf74b57029f2826c3d32008f1,\n        0xd5b3c939cbb451990b332659, 0x3a958ecf6774f75eef392e66, 0x5faf5e626a2d5c1986e4531e,\n        0x8579929032fe8da13ad1017a, 0xf19fd7bd978667567947badb, 0x658966b7546c960300b13096,\n        0xaf6c205a1a8f1b46855a36e1, 0xc1c3e6045b8b25a219c1335c, 0xf0fa6ff6bf56bcbb0116f9cf,\n        0xbd84e957d385047457f5b35f, 0x9421fc8ca5d0f21eaa8a7af2, 0xddb3c45dacbe09d2b201c3ce,\n        0xd931044489e3194da19542cb, 0x3a57c4, 0x0, 0x0, 0x9c2e41e8b5c429114a80a858,\n        0x5a966e31657c7f8c4b03d19a, 0xf6d631a3b323e9d2d0bf9577, 0x5344cc9641e9b5f74f7112af,\n        0xe429d282cbf83a3a6b9d4cbd, 0xb7113a43b4dd22a6685afcef, 0x27da7f0630345d55a449bef0,\n        0x20d6e5d82e5c8e25fee2526f, 0xd4713cd17ed740c4e73e65e6, 0xcc3bcbff28c0d7c447d07124,\n        0x23305fe2dee2774c0c4edcdb, 0xd281cfaeed124f6cb215f85e, 0x9601c6e2be06ccdd44830d12,\n        0xe8c75f8ea6aff1231d173084, 0x590ebc020ac0a24a9767b4b3, 0xb8a534f177c2d240170ae8b4,\n        0x792877e41b28f602a3a9af96, 0x187312ca50914f7652ece934, 0x2d4a3f443efdb605e7461262,\n        0x1d7d53cf6231accf900fe2f3, 0xbc39ae48093f0259794962a7, 0x18f99fdb, 0x0, 0x0,\n        0xffa9482e842897e00f682bfd, 0x834c8268bdfe3fe9126289d7, 0x285ef56cdea1beface4af9b9,\n        0xdf26308909c6236175c8b94b, 0xd0f05616288f3037160caaf6, 0xe037d0024d1c561b107d4d59,\n        0xb53d73e81fea4422d6277248, 0xe198cc789000080db790ae73, 0x4a534c95b61cf17c5ba235bc,\n        0x908c97c0440dc62088b9a69e, 0x7ae47a71e12de983ef98db45, 0xf8562cc339b439ad34d2fc63,\n        0x2eb470ce422fcb4897856278, 0xd00c1f59bbf2e4200912498b, 0x46cd5901f82298f50f8f37e0,\n        0xda394bd5a6faa8c6f98d178d, 0x9489f43f270c6bd97a56f14e, 0xba345afd6fa08c5b66103257,\n        0x172117c1bd860df49c7f68f0, 0x693100c5b36bc3d8210615b0, 0x2c8d3dcfb83ac31efe164c, 0x4400815,\n        0x0, 0x0, 0x6505fa9f69a8798873dcbca3, 0x540522659d27e26b155741a5,\n        0xb2cbbe014d7b317df5281b60, 0x3159a1e8a255736027c15b00, 0xec172ec870f4885861fa715,\n        0x450108025ca4fdd95d3ea4be, 0xa7ca5bc05077bd9a6fe4f01e, 0xdeea885ab4bfc82189ac2b72,\n        0x9468616b7bb8b2d1eb378868, 0x56276a0966928b08971684af, 0xd16a3d10a6032348f539e2f7,\n        0xde3dc7466c581674d211cdfb, 0x5440706286f05e61df345166, 0x1cea89c8227619129efbe254,\n        0xf84c4b9dcc9de5cfdd1b745f, 0x7439a70edf670ccdb8757ce, 0x9a9d2a2044ce0c63c7749a64,\n        0xd575c9cb73c6f9d36bb8d1d7, 0x5a9ee0be1abbe2291846dc4b, 0xee674484c468ac3848193a80,\n        0xef5f5b67e32d2ec4ebb4cde5, 0x3080adc, 0x0, 0x0, 0xf6183ed40d6aeb397805b3da,\n        0x8ceb48f0508ff239d7bd175b, 0x9f0b273513d427b0a7d38648, 0x82b3956877f67e15e22f2b4a,\n        0xdbcdf5049103c9c7b7ee4bb5, 0xa4880f67b985ed22f3b7ca29, 0xccc0bac7846da5cc7c7ec380,\n        0x26fada19f84b75c2954ff0d5, 0x607e2a4f32863fead642e8c6, 0xd81931fe7d0a479f060e12a4,\n        0xdb46e7ef3efca9bef3b7728, 0xedba7c2de2c90177fc3f4840, 0x956ce80fa9fdea3dcc2a6ff3,\n        0x5a8e76cc6a2b0143634b7489, 0xff054f521cf0d1a934283a01, 0xbef59d14565d6ba48d073ae4,\n        0x650b2d52c1122a56007b90a, 0x7c76c9af9f608addb1afc04f, 0x2ba9ee990da5b1a115506e61,\n        0x56ffc7c840d5cb87a0d64779, 0xfdad49c955958334a75424e1, 0x100788, 0x0, 0x0,\n        0x40f427e784fe2b4a9eaef4af, 0x2f0795ae8e0911ef1df50341, 0x90df7762e822199b4e8f9dd8,\n        0x3a0b913a4eaf581bb478be28, 0x207103d33ce1e0b8493a8cd4, 0x8656a65ce57b0b8a4dd5622,\n        0x7f95bcb4d175408d176f192c, 0x3e7c781e0afc6ece0cd3fc3f, 0x399d9626316a4a703009d68a,\n        0xa406d4c272643c0e932ccfb, 0xbd7c66e6c97d1c5db9fa9355, 0x8eed69ec5068d7cb399c4ffa,\n        0x79fabd0f06e0921e6cb79d77, 0x8cbbba1bc258146680adf88d, 0x16fcaf5768364d146bb355ad,\n        0x225fe736e47e97ed2f956d95, 0x70d015c5a2328fda9308b98, 0x673d4d765ad984ed15b17de0,\n        0x1e5a5778fc5a30396b36b904, 0xe49771bd3a3478f09574b1ea, 0x35c5a852b2225574a7952926,\n        0x353afb31, 0x0, 0x0, 0xba3c64ce6140f14718d0875d, 0xaea551a60be2bda2d6bf6db3,\n        0xe8a0282d2347aeeb81e33e89, 0xb8c1ab53b1e38117bc833379, 0xf028317bd0b9336aac1c8012,\n        0x3c856cf187839e9d21dfc4c3, 0x880a5e18613966ff8cdd7cd8, 0x79a454208ea16d30679cf088,\n        0xf3ef14e5fbbed7488440d7ea, 0x418e97737d58665881d8462, 0xf4fc8d9df7440e8998f035ce,\n        0xdb8e672415f226facf42e72d, 0xe589c0b91168de2021f13fa8, 0xa3085040132adf68a6e77dad,\n        0x94431ba64e4a6e6b83409212, 0x26e5b535fb3ed44b9a28e8b5, 0x52ce3fd32264c1d47149801e,\n        0x9c8ef28bf945bc77a227b011, 0xabb4c1b5e2a27b69704cac21, 0xcf74f58df7e45d4826769eea,\n        0xb2159f7de25a0c030219cee2, 0x134e7fac, 0x0, 0x0, 0xebd8d90c934d17dd720426a4,\n        0x33bea95aa8ad5797da6c4efc, 0x7fac880279bd173527763ac2, 0xd909e429bd1b54225afb9391,\n        0xcd2c7929287c08f6773cc15b, 0x3dcde19b61dd92d44568e30c, 0xc4fe323e9fcabf11e0fef9f9,\n        0x2c768c0140cad8de1b3f8295, 0x5ec06f9a55af974795824dd4, 0x71249dd9d21a50f8a5dbc25,\n        0x9c236dd1615cc0a9f1cfed04, 0xba5a73986d84f4435169a34a, 0xa02b96c267abf2aa37dde261,\n        0xc2e354265ebf226db4ead96b, 0xe5ce9a686d3e5e30e5e7d927, 0xaa9aa8ff79b86b3c71463e0f,\n        0xc7573536e36cb43693dbd891, 0x23b6e4c59c0de1ac968462d9, 0xb20bf031108b4e72afefe016,\n        0x21e962fb9134282b48547ad, 0xa710aa758ef9c12b377d9d41, 0x66af5f92, 0x0, 0x0,\n        0xfcbe8e8bc2857c63648e74c7, 0x3c387f8020a8e593e0b552fc, 0x8ad201a4b3f0ad06ca1cad3b,\n        0x89172fbe0f87df535688ccce, 0xa60fd06f89622f8e0ab0e81f, 0x9d95dfbbdbfb83d920f26406,\n        0x3100ae331c6bcdbd5bab2863, 0x1cd23a1e15830352e125d568, 0x6d486ad849053b6f55603009,\n        0x119e3472ed62abc0075a2f7c, 0x66cc98c72d2681a98920289f, 0xd6eb1f2dc51f8afa59605173,\n        0x6c3fa021ab66060a374d7ea0, 0x723138898370b39a75ee7b1a, 0xe92d868e3a8be03af9568450,\n        0xf2f5f837b5321258e6bc92be, 0x27361dd77e44ebee906a0ebd, 0x7003f43a6806ccd3b189ba18,\n        0x97b5b27be13f5b8425e2472, 0x855e2bd2e42c6b36bb09545b, 0x7aeebee267ae270f26abcff0,\n        0x47d88976, 0x0, 0x0, 0x8b00c396084b4115f3b0969, 0xfc60246f4f9cfb7e951de468,\n        0x8022a8e11b4f620d48a3ae49, 0xd273b3ebe223884b92885a5f, 0x5f57fa057af4248d7576fa82,\n        0x5e57e11d3c9f89b7cc0e4431, 0xbc5bcef6f56876529e294838, 0x32c32a62b1db35b064a7a2da,\n        0x35bd10f3388759eb1c787e1d, 0x63c601309b69160147d3db35, 0xb1f8bdc3cb3cfd5528610a71,\n        0xcf31a9f03bdfed10e2e83e2d, 0xa80331587c59ced241357ea0, 0x54ba8bd269e3759998fb3358,\n        0xc67a073c9bfd12d1c69480cd, 0x6990cb91da39aacae8f6ce2d, 0x3073b77341d7f8914f23e232,\n        0x39fb609d816e019cc062f795, 0x6c58563224905c46dfc15b2e, 0x1fa29a5d77347775bad7e2d,\n        0x35100e5348a3d6577246b271, 0x1cd09ea0, 0x0, 0x0, 0x254f1d592f204e7e1117be57,\n        0x637fe9b28ec4e1f1fdb5fab3, 0xfde99837ed06ee649f6a5eb9, 0xba50e700e7ce0dd5d699c0ff,\n        0xb89b6c7dbb34bf4c0741c2e8, 0x2c77cbafe161b05a3f5ccf95, 0xc147dafe9d4dd839dc184d0d,\n        0x78ca47ed2f48eabc1b8afe82, 0x368de7c0d41674796d946bf9, 0x88a0432c9a758fd891670603,\n        0xb356dffba421f23219149c12, 0xc0df0de9addab73f0c677b23, 0x87fb6390c845a00a2b8c2549,\n        0x9b188ebfb7e3b513d5ea61d3, 0x7733b7d80a0c1f1fb3b87794, 0x308c820f6a5ab36f0492ce8b,\n        0x5be8d42b69166421dda3b512, 0xd55839cff5548d24ad1cace1, 0xb3cd437bd0293cff21b2402a,\n        0x516f98df61b6536f450f3a71, 0xf3eec531c8051639aeb8eb9b, 0x5a84fc9, 0x0, 0x0,\n        0x3693b7dcdad0fb1d8dae21da, 0xaa2d5a7fee71d0e906cab278, 0x5261e8b980d9f82cf85a741e,\n        0x805979217bb90514988dc3a1, 0x3c6a195de3e6163393f551c8, 0x25a79dcd01f7db4a73a32bdc,\n        0xa7176752a77cd24ee908f424, 0x4b7dd5151993ff88a4c03c25, 0x5dcf4916e368e17734f83d70,\n        0x2e5f1a6e9dde29cbc71f3d81, 0xf3552a7a1a4bd98489ccd41, 0x9ef5fdc24b5f5aaf500cf09f,\n        0xcae76c7fc41ae096aab9df71, 0x579928c3ee25c5800351522c, 0xd5e2ee4cf7c598422d6ae639,\n        0xd5508e83d4ad6c99e73208d7, 0x7523da007c5afd2a33842db4, 0xb293a4cb6cfef6673c866725,\n        0x8b23e76640f41d8d279e3da1, 0xb6493b8f9d86cd0c7a64ca1e, 0x6bf55177b0690d6f60230935,\n        0x8d7f18f0, 0x0, 0x0, 0xcf9b94648da0dc88d439cb42, 0xb19c1b4ed7e72d465dc45fc3,\n        0xe22642c00a0c25f6a008c710, 0x6dbbd01b909f016773fb145f, 0xef242bc362f4d1468c82e39,\n        0xe34317b99d8a82bea65e106b, 0xbc454454e26d6db44e7963ed, 0xedecd51a67f3162e0c834c5e,\n        0xdc830b6c09e84e9eae0a9ca7, 0xbad8f2a473274a65401c1dd5, 0x992e8052530e7b5c61f9a3d5,\n        0xd5315b554e0bcb21a5ace36, 0x6b83a662e5b7114044086c25, 0xff316e31ab82abcec0cc162b,\n        0x8c98f344a4995dbd05e66a77, 0xe81a043b3a0e65a2659c0f30, 0xb36df7f95fd54501774f350b,\n        0xd5e3f5af9878cda0a39a3de5, 0xe6056818952b06acb4c81ed4, 0xe54abb01d005ca29cf99a131,\n        0xd209bc96061f13ab6005f749, 0x886b8d88, 0x0, 0x0, 0xeb52f6df556abbdd63bf5e22,\n        0xaed60e75dae57df80b34ec39, 0x70fcd3e27df287e5753b20d7, 0x128b5971e45761158b8f3dcf,\n        0x16bb42b3873e00053132b0c4, 0x8b0245e9a0219afeafd79a79, 0xdb9e91446865bc1fc657888a,\n        0x25a871a4d2ab4269bbea7ac9, 0x3ddca061ceff660108ef52d4, 0xa7e61c5901838a28c34d99cd,\n        0x7544f5dbb3defa0163d7f17c, 0xca241d14cc49fae4a772b7f5, 0xbe29d28849a5e324aee3408c,\n        0x836767d43077526f48faa2a8, 0x8cd32c65af954bc68d0e493f, 0x7892b889609b1f9e6f0d79c2,\n        0x278ce3abbff2f5263777664b, 0x81cd003b95994a5b17a7a683, 0x9c86115d81e0632d5fc3c81a,\n        0x997516ed4cc19a8a483d09d3, 0x1e179242d56cd19e4f7aa60c, 0x451e7279, 0x0, 0x0,\n        0x1fe5390dd58ec47ccaca6165, 0xee0376fd38d66576b38407b, 0xcf065c5ede16b9078ed8b950,\n        0xe401e1dba006c46264e08784, 0x52c0f066ccb0e51a2836dada, 0x964e301923a41c67dc6b472c,\n        0x3031e417f447570565032bc9, 0x50c821279b44dc3b5b074a72, 0xcd5a7aedb746388d9305d94b,\n        0xe93818f4b95a48f01baaa16e, 0x9d558ad11e2bea56a6739a4a, 0x8f98e3a980cc27f5514501f9,\n        0x1b5009bfd2a8cf3f3dbb7737, 0x6ebe9ac5b62d601eab9605fc, 0xba78365c99e325914055aca7,\n        0x62889d4b8f17ddedd15ad267, 0x1fee7dce2fad2700f8aa8817, 0x5b2a16de45abfaa3ca0f804d,\n        0x348b77de9a9e9fdd39057b1b, 0x2d4143c1cd9b408801ac0932, 0xa3cf55f17eb11d4fb32b9426,\n        0x208d6195, 0x0, 0x0, 0xfc49e873313de2978312887f, 0x5fbe773faa24320f70e6ea6b,\n        0x4256b86e9528473bdd9e6ace, 0xd74f172dbdba542bc9ecda9, 0x96924c9de06632dece3702de,\n        0x69358eb612656ca3198158e2, 0x6d79a01613661779c78e0032, 0x4e3bad2411014a48f1259b42,\n        0xd8871b2ea785f687de8c7952, 0x4be6a0fccf274cf898f145fe, 0x17c2c3616f78801493116b78,\n        0x940f2f0ed4e8f04ff92ffadd, 0x9b5d10dd4a3522d51f93be51, 0x1556a11712de4fac4f6f42a6,\n        0x895f21afa42c4af48861ce0f, 0x226800704f911bf97dfd3f55, 0xe51750defa8db7ae997056cc,\n        0xe037899ffa2f92560d0555c1, 0xd2e12a9746629d0f3e5d14bf, 0xa960a9ca8b8dd7220eb506db,\n        0x66bbd4ab5e553d07fecab1bc, 0x3307cd8a, 0x0, 0x0, 0x67f2457b8c831d56a9929a0d,\n        0x96e370441e52fae5bbcae56d, 0xa93ed687236fc53206e0419a, 0x7fe79b87578b0d38b0d1c317,\n        0xf48d8398df15059bb792f949, 0x2514308d75b0450ea06b07c6, 0xe85e7668282416c14df6e0b7,\n        0x703fae82d76ba4de92480e44, 0xd86b0d011d4e5e495c06d796, 0xb329a5d9c0778130705ba25f,\n        0xbe8a7bef6b49924124bf136d, 0x719510f51704a78a4b63090f, 0x3be3feb5ceb690d534e57107,\n        0xd0a2d35b72ad6978b8bde8b3, 0x936079a39d638c5c33d6eadd, 0xe177aa16d66b4356a9f9bce2,\n        0x9a626604f2f0d249417e0ea9, 0x6be7c6bd4f517bd69fece5bf, 0x923735990296cdfb6fae17d6,\n        0xc1b535aee17900ed24102daa, 0xf2431179faa78ff59fd6503a, 0x202114b4, 0x0, 0x0,\n        0xa9dc684ea7a072c583378bdc, 0x234eebfb13b9f83dbedc9689, 0x46f68cddc2dbc0748d995ad3,\n        0x4338acea2099179babc1f7ab, 0xcc0fca21384a6773f735d8eb, 0x5cc17f9d3c9d8636229c1adf,\n        0x5af4b70e86e1d9ebcec76328, 0x73474b28f23261bbc278997f, 0x60b65df1d9c6c2025877cbc7,\n        0xe5f371b392daa99d60dc68f5, 0x6d459b8018d80c189e4fb2db, 0x3b782f2fb21f91af6f955e29,\n        0xe58e194ead8b059afb9cc6e5, 0x714a92db56aaef13c5eb239d, 0xd17462b734aae256a7c053bb,\n        0xc7364388960d6831d60e8379, 0xa6e642a3822390a909108133, 0xbb3455c47c1d625f04473e54,\n        0x473a8914fd186b8c2f53bd98, 0x56cb778707e253d5bcd9c897, 0xb212545df5bc302598e61647,\n        0x879e816f, 0x0, 0x0,\n    ]\n        .span();\n    let public_key = Serde::<RSA2048PublicKey>::deserialize(ref rsa_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let rsa_with_hints = Serde::<\n        RSA2048SignatureWithHint,\n    >::deserialize(ref rsa_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_rsa2048_signature_assuming_encoded_message(\n        @rsa_with_hints, @public_key,\n    );\n    assert!(!is_valid);\n}\n\n#[test]\nfn test_rsa2048_sha256_positive_seed_0() {\n    let mut rsa_sha256_serialized = array![\n        0x766ad7a96b6a74dcb0d4ee21, 0x3c31169ffb4c539d20a19c30, 0x4813ed39e65994f370938d52,\n        0x19c0d08706b4597638cc3e30, 0xc7e80539ead20295baaa808a, 0x299992cbadae99aeb97422ae,\n        0xb226c9a7b454cef99bca662d, 0xbf70d4a08cf48ed827e59567, 0x7f746d2d77af83b2122fa87b,\n        0x9aa92b2128d9725d8656dd96, 0x3b526db14be8de881d9d16f0, 0x60ef9dd9b7346128d4904a2d,\n        0xc956b02d42c83dcd03152b6a, 0x417242ec1b72b9d2c28b3a8e, 0x31094b84fe9156b6d0462fe,\n        0xaee058ad4254ba267bfa369f, 0x236079af55b0b25854deb6d, 0x1e371829465e97bdc783fbc4,\n        0x308ac6dcf29aabb20d05c85e, 0x250ca4cbef9a5ded24279a60, 0xc2667b7be6ec40e1236d59df,\n        0x92c2ffdd, 0x0, 0x0, 0x7f4adbc1493730e14321c70, 0x849a3d79f6c117d6751bab75,\n        0xdef1d75dc88702eca86351bd, 0x6aef5c1c105f674fd757aa13, 0x6124f02cbef475f1cc85d17a,\n        0x28803427b3731834a879e9d, 0x6cd15cf1679c35f246588d95, 0xab5a6c049666f9c22ba7d277,\n        0x12e89c90c000260d5490da8e, 0x25b9bbfa6c68c42f721bbe6f, 0x454e04965f51a38d060dd0fe,\n        0x39a9a0136648523e13fcf263, 0xce9e095c0a64109949379439, 0xd1e4d94562299517fe80da9f,\n        0x76f07578746961dc58bcc72b, 0x3dbe6daa287ba6415eec8541, 0x14ec3fafe6b952ef2b91f61e,\n        0x6d4444f0f7c59726a2fd5f33, 0x87d945fb5629131f7d73deb2, 0x980707f11d31be5557efb7c0,\n        0xa9c4105d7512a9dc58a59c77, 0x8f5855e2, 0x0, 0x0, 0x63daf4f0614487a857aa397,\n        0x4cee11531104e6d3321a6137, 0x500042073e6d1148bd2559c, 0xd0609608648016503040201,\n        0xffffffffffffffff00303130, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0x1ffff, 0x0, 0x0,\n        0xdba5a28d104571ccaf78c101, 0xde0117f8864376d17e88e2c9, 0x31387d8bbe690ba05421b41,\n        0xf673c108d61081ff7c953c48, 0xd9c9a2123806b51703d5777f, 0xe265a231a3561308fbb49d4c,\n        0x2ea20b01ec074f116aabcff2, 0xbd76cb54c0d3d67ad6dc8504, 0x62d001857ed90fd9c70f8fa2,\n        0x5212b17c0cf2b3ab8c00191e, 0x21666c4a4c652d1f4a5d52b3, 0x98a34f392a569608d8d8493c,\n        0xc65cd9cc53784a7c308283f7, 0x62f1d8f077885369d37c61a3, 0x9d63ecf92c1e9b9fab5ff7d7,\n        0xcefd87f373eac3a6af12fd2f, 0xa5f6a5771df42c025f4b0519, 0xc02c4eab0d7cfda3ab49183d,\n        0xdba201748a5570a32f3e6bba, 0xca3a6619ca8b60d71bdf8553, 0x34ae8309fd18234a383d2dc6,\n        0x8c0208b0, 0x0, 0x0, 0x9c87939cedb6fe6f3814e1df, 0xd8cd896842147c97a0490ea0,\n        0x213d73b8263f2f958f6663f4, 0x690232c0e0f0144d0685acac, 0xc84a114f20611bafc7bd30ee,\n        0x33c2ba1feafcfdb7d10cf679, 0xed8dc5f9755ef64c81b46f28, 0xa96ed77ae8898078d8bb61b7,\n        0x73a8776c045f5d0f7680a2bd, 0x847647dae5acf8e1b03e809, 0x463c09c16101b921ea54c4be,\n        0x768425bba132d55771bc78ca, 0x6e0434cfde716fd7c0ceb8b2, 0x917544da08a8b9ee878b2381,\n        0x9466aab26d29e7d673a164a7, 0x97cdb9d7322c80ed8d3ed134, 0x16ef46e3b67f627176ca26d8,\n        0xea77601794d88428cdda4f3d, 0x8664168215ef6f0f6d47c112, 0xb59493de236379caad223952,\n        0xc864adcd34c308060e25c4a1, 0x27880312, 0x0, 0x0, 0x1b078c215f7e30839506357a,\n        0xe8eeade9f2e28e0526abd509, 0x609e1db5293846d19cfd6c09, 0xda08942f4ec9833d381430bd,\n        0x5a39cdcfe8d9f409c73fd30c, 0xdecdb3cf727a5e776e3ce4b2, 0xf5f1c4449ed6addde3e69a97,\n        0xd987cbe3706bf8a2de4d75d9, 0xe1435f64a565ba527abaa25c, 0xeae4659f4f7a72a4ca8aa299,\n        0x457e02417fce6e0177fd025, 0x7b1d76c4aa928c4018f2687e, 0xae05806571542e12952af007,\n        0xfba852a24c29037dc76c8f92, 0x6486e47652c434421a6d65cc, 0x6d7626f77de17de67266bb40,\n        0x9cd5342b860a920e13c22b26, 0x954a74eb36626d553555d51d, 0x338c190d3c06429be7ae25e7,\n        0xae387d46cf8b86579ecfad40, 0x5e06aabdd4c3f2e971a0ed67, 0xaa5e56a, 0x0, 0x0,\n        0x3ca35f4ae5d007a57d956f87, 0xd58e44fec8e6f1e32edaae6e, 0x9036137ecb69e1ce77a61039,\n        0x14dd6aa90c2bdf6ce5739734, 0x10d71cbfb2aa3539aa1f56bb, 0x10f45a90aabecd18b6af19cc,\n        0x3a01e721289d1a8a630bc18c, 0x57c15ae4a7fc259d1eeac0d9, 0xb3e2f6623abcf9c36592977f,\n        0xbaa0551bed2b298958bc096a, 0x125e26df65683a7f9f496247, 0x131e1cc18846a946c21be7ce,\n        0x2bf4cbee40d1e4585d9983fc, 0x29612d8f2af44c050e7a6e47, 0x98d94d7b506f22f348d7b218,\n        0x710fdb924a0d2bd2fda56c0, 0xdd6d98342fe4f67cb05ee54f, 0x596a30326a952e6191185a6f,\n        0x9e6b2e0fa8aaa896014d67e9, 0x2e1d0c4aaa2cc51004adab21, 0x11879893708f3aebaf96f3e0,\n        0x41fd2ad7, 0x0, 0x0, 0xddc793d0f6ded76302697a39, 0xb22b4ba096bbdcedab9c16db,\n        0x73616c77e6e46b41f6af5bc9, 0x3ba104f3aced59dedaef1865, 0x2cc05918fb50406e83e92eff,\n        0x6ad12e22614f551de7c81293, 0xdefa3e8456b59a6371d910fd, 0x554cdf2c7105b45fc800d838,\n        0x793a679a65d68b07844e02d9, 0x1ec761c49dabab9424955eb9, 0xae7084bbd6f9337cf0aa7a5a,\n        0xa7fc8e7eff7a3c4b4e8c03fe, 0xb8aac4ca75210e6ea5c7ab4, 0xebbe07edb0b8334436abfb55,\n        0x883a0d104e6b72e1f32262cf, 0xff52ab49429dc49bf41aba2c, 0x25f95ac11682b4b14b4b4119,\n        0x7490f57a7dbb06fcfd03f72d, 0x90cd6913f9ebfb549d76df3a, 0xf77a906a9f1a245c92c07403,\n        0xffa77bde9d5166a772b0cfde, 0x1dabba6f, 0x0, 0x0, 0x5afffd9f52773bcd134e99d8,\n        0xcc416ef0789bac74567880f3, 0xad42778193d4679231d5f473, 0xf4f26773d02609d7633a2a61,\n        0xa0c22952edad9f723658f6f4, 0x93c8922499bda3bf71a994f2, 0x6f7eae52dfef16bf8ff3a67a,\n        0xdd467265cc3850970deba314, 0x7e8563c73bb63cdec42c041b, 0xa185c8df07c535191a340cd6,\n        0x6fa32662bf558974fac76df, 0x292f85f6ba2c832ee39c5ab7, 0x12a6486c242536e088258404,\n        0x4df8eefd4cf775f72e9ca5b9, 0x61020f7671b569c1dbe31db4, 0x1a111d0b8ce4c16d87231063,\n        0x57bc87bfbd8acde04a824ff8, 0xc5dcb21e8da06528633eda2, 0x9231631a3351430f2dbe84b0,\n        0x2b372f1d9cddade685602ff7, 0xa91f085b78fa241f56866b0d, 0x6cc4b091, 0x0, 0x0,\n        0x2de4528e7b943ad0b8c9f5f, 0xdea1d1df4ba169dc5a1a5776, 0xf11c9b5150d95e3f0c89ff40,\n        0x527cc16aae8858f5a5e4f31e, 0x448f9057581c58075994e074, 0x231063986b1cbb4bd563afd,\n        0x344db7ab3a2d40cec1b173a8, 0xc542682483c9d71617d2eb3d, 0x9ef98379499e539ec46f7074,\n        0x32e52b7738d5b58cacfc4dbe, 0xf7610b5ccb8c9c6b661a1c16, 0xc05f2c6e95d529d28382d2bf,\n        0x4038236c2163c7e6357585dd, 0xe3daf988dac9558969621182, 0x9873f618ff4254711dad9732,\n        0x3643e7c051e76dcb6518b3d0, 0x4a851f8ec41c3c830bacaddf, 0x223c145bf38736959511709c,\n        0x39e9b0b61980a5143db18fdb, 0x1a773aea976c808bbe1d9bf3, 0x157499a5cadea1cef829beed,\n        0x509c4f0b, 0x0, 0x0, 0x62852df9189fdd33a81d0901, 0x255b693e36a6c6c541ab1d7d,\n        0xce7cd3bd2a1a06275a258a5d, 0x1f66e4feae610347d0e0f77e, 0xba53b3e84326580d7f22858d,\n        0x78882c1f8d3fa0a1bc9a81ae, 0xdf99db3c39601ef65bfc1f0f, 0x496c687a779ddce8b94b6a33,\n        0x74378f794ffcbe7e38a80cc3, 0xc723ca3c7897199395ccb800, 0xa8f18815b946f95745fe430,\n        0xa2c332eb85dbebfdf5d21dd9, 0xf9f881512200e348e82a0f3a, 0xda431a30a0c8dd24f4410246,\n        0x62c6db75c3fc7b1dd0283ae6, 0x97023b40f4b8c97815ff92fe, 0xa2396d228e7807eb2b1bd67c,\n        0x410dc34640be2ca8dc373e80, 0xef567bc33ad8c2bde671e4fc, 0x75fee92add7a75af0f0eea88,\n        0x59ab3b009a3fef41785a844b, 0x41f8a5c7, 0x0, 0x0, 0xf8a571c5e36fd078f3ea0d88,\n        0xf8417b317828b6b8d59117c1, 0x2d5bfe87ca678aa61a804879, 0x7f60a51495bdb47fa2d00682,\n        0x3e84116b6dfefcc443ef929c, 0x4c73b96a37578eb1e3482db4, 0x55524215b93774818d8af3bb,\n        0x545bd195e8fe68d6f4c0c2fa, 0x18725691b86ccfd9f50b66a9, 0x6f5dc884624a880ced3a4606,\n        0xa5badaa83d8a7485cc1543b5, 0x7f49cc75e4a6186e6bc9b00b, 0xdd54decc49065e13394e739d,\n        0x10dc460007aa0bea87a3bdc9, 0xc9d8bf28956b4dc557d7b0da, 0x394f1b90b12d42bcd86d862e,\n        0x15e44894ede73370d08e59ad, 0x94414117d8025428f35dcf01, 0x9b0242480d2a9c54411d44c3,\n        0xd87b5eeae928debb12590061, 0x16f5649b2ce3e9b8d13710d, 0x1da7aa12, 0x0, 0x0,\n        0x906592b0bc16f5269c2ae379, 0x99256f481857af00e210dda4, 0x7777212b4f60ef1cf00617c,\n        0xb0f8202589e7b6100f3be304, 0x6917a8d61328f2a770ca118a, 0xa94e1ef270ac393054333f8e,\n        0x1c640ff00acd502c221bfef7, 0xe9d91ec74d699eedb5672d82, 0xf565e341f293d04d4ad52d06,\n        0xf6a5f34ed83861e28435632d, 0xa35fad7204213d1d70464b5c, 0xe637c9258eb9849d6e10248e,\n        0x1bdd6e25736ade18a1f5b00e, 0x7dd09d1716b62ec88e77473a, 0xcbc71657f93fe204cf3550b5,\n        0x921bbefe659d89b06414a332, 0xf82c2528a7f313be5959db3a, 0x7e367d7f36c8fdec7fe7ec74,\n        0xc23b984e4448111cf66f7c7a, 0xaa1715436760433bd6fc628c, 0x3c749f84f3eaafc9f19eb1ea,\n        0x67dcab54, 0x0, 0x0, 0xbca0709005dbf9a6988775b, 0x551d7b228b3033aa0e9530da,\n        0xcb561df63add69ef8950f6ff, 0x4e2d65f439d48d103612e959, 0xc362a4bfed1b1d12258053fc,\n        0x5af4caa06a794b7522b5cde3, 0xe870ff5604fa1e696647930b, 0xcedf73d1770b8d318142cb5a,\n        0x2f9de064cf7f23cee2e9eadb, 0xcdc20801a8162d8e8cbce3ba, 0xfc39fcb82bb701916e545c16,\n        0xb139103bc7e564b05c418ee7, 0xc2cee58a68a843bf9ab7564, 0x7ea65f216dd2c0e512097263,\n        0xeeb54e3f6f2e2971789db32c, 0xb9544c9ee089bb7a4202b84a, 0x1aed6610a32e9c3309dc0056,\n        0xa928799e323b7b279b851cb4, 0xba6cfaee9a097a8643582296, 0xe6deb40950fa7fd606ef3c30,\n        0xef0978dd3c953faa80869fce, 0x498091db, 0x0, 0x0, 0x5af2efbc9f83280d04e9d276,\n        0xdbb564d730b7836d466af4f5, 0x34db186845975a0c64d466, 0x1373ec6ba5b6a9e2dfa065e4,\n        0xdeebec96606fa9c217376709, 0x71d016398339e18787219222, 0x756c4dd9ae6db06a9cadcfed,\n        0x9edd20b4b4436ec9bd7ac698, 0x5316746dab22eda5439c5283, 0xccf492cfc14ced5163cc9d44,\n        0xdad61cba44755c34e2ea50a5, 0xdd787aab1686a30a198a3373, 0x827d1f12072427f2ef96ac8c,\n        0x72919ad9286ee886c633d2f9, 0x46d6c382a8887ee89055a90, 0xd555b4f214c75232da5299be,\n        0xd384ff140c009b4f67b0277e, 0x4f838153528eb7fa81536463, 0x43c263c48e91401a5e004b3c,\n        0x6f3bcdf4e7b2a7fe637fbe87, 0x9b8914d8c7eedca149026eed, 0x909454a3, 0x0, 0x0,\n        0x606dbe268de962f4430bd6ec, 0x34e928a361143cd5c828cea0, 0xf4e9f10d3e6af5e2c3408098,\n        0x8a185ca2b41d9bb0b384bdfe, 0x729f5a2dc19f622ebd647dd2, 0xeabf790a4ef25196f4ae498d,\n        0xb41429bf4e6a51dd18abf37f, 0xfb6808dd834c73e04e116a41, 0x716c7397bf34ae598252b95b,\n        0x2a52ed59c4822b2d7a1372df, 0x8a2cbecb1a10da9c7966c193, 0x18227bde9e9503568f9e9bb0,\n        0x24c2efa2aad6f28e1a6b8202, 0xee607f02b3b5d6d49fd1d6bf, 0xafb8bf42af8d1b7c50aadbac,\n        0xbcd8fe2d79e0c4065a4b681c, 0x7f1f06739621df5914fbafca, 0xdf5c338ab45983c635b3cbb5,\n        0xbd397656f596e27beb9dd370, 0x5a4633f0b08d6a0975c6cb28, 0x16efdc39283fcf0212b9a64,\n        0x8e6df810, 0x0, 0x0, 0xae292636c7a43fee960bb1f8, 0xfdaaf188278ae1ef204ac302,\n        0xbc49345af011ba50c25fd5fd, 0xf1a1851cd188bbcc5491b64, 0xeba9d7e9f386d800b71c8e26,\n        0x8f817f86eecb07b1362e536d, 0xc3b7bf2bf01f5df6becd6421, 0x36847391c28ab53b2a5ff05c,\n        0xd0e255810feba364ba15865d, 0x3a82dc9e268a02f132f16ce7, 0xdf7f70423ae35ea8db61d94e,\n        0xfa28a551d9058f8bebd74f91, 0x112c45d9b3d9b281f720b20b, 0xd2c3fe27e7f780c4104d3d1,\n        0xa8d13a76a001f567393324f8, 0x3c99a65b0848441e81133c20, 0xd199f84025d0889eefd46727,\n        0xd3a63d06644fb8e561a54ac3, 0x1b58308a612ac635943189bc, 0x78a51ce793ff96e37827421c,\n        0x223c97a93cacdc7eb292c7ad, 0x2cb7abe9, 0x0, 0x0, 0xec1d21f34e35d41aaf2dc12e,\n        0xfbfa3c5ec79bb8f3cb1b7110, 0x20f27a2831000976af11bca4, 0xf0d775d468ac9231e42e38e2,\n        0x2d0079dc2ad8c54371ffb7e4, 0xee7e02f8d20efc0ae8eb6c90, 0xad04cebdeea49cd3c60116d9,\n        0xa73bb90bfe501f9192ee97f, 0xb6b34a9c21424d68a57a6672, 0x3619defcb4a725441d3bf760,\n        0xebe3d22504046bf8880cbdc3, 0xfa28eca0111a0257493b886a, 0x93a50c7c721395d9a6a12944,\n        0xaf734caa53b8dcc1c7918d2a, 0x542c2352abf5ec1599fef5e5, 0x60281c2adb6401730c7afb39,\n        0x8c75b1913594aa3a81c5871b, 0x9e9f5823d8b12ca7aed5b694, 0xd4388cb59d4039dab88b73c3,\n        0x2982d5321902c82c52fa6361, 0x5c3ff9adbdc2dba8dbe57e09, 0xda00a79, 0x0, 0x0,\n        0xd6de4aa107825aeae723552, 0x551a40743b1f5265b17ea38a, 0x67bf6c3269336fc22c9c907e,\n        0x53f8c37c58c0045d7207758f, 0xa1b719983754b514810fecaf, 0xd03c31dd37d5327d8ef3f7e0,\n        0x681cd1f74348245665e7c5a6, 0x100ebd9ae191ef5c93d59436, 0xb72dae2c31c134bfc1ad2220,\n        0x57cc5c25aa8006bb1e3d747c, 0x308c4398dc5030cf45d8471c, 0x53286c21aa4b7b58338b26bb,\n        0x9bdf3087b2662da2e3668508, 0xafcdbc80c923a3d50ba414ac, 0xe59bafe7c7879e4523c5b430,\n        0xba67db800092de65412b8d9, 0x86724cf861597406d1e174a0, 0x83d2f4d226c14651d0cbae13,\n        0x3a7fdac3dc449f96dbd5b9a5, 0x5cb526c2805b7876bc2033d0, 0xac2f3eeccf1774fb9348ae32,\n        0x3c5fb589, 0x0, 0x0, 0xdfd726e71c0c3513ff81c5e6, 0x3121d9131877236e73a208e8,\n        0x96566df0832c848537c5aa0c, 0xc0d5f7303f37560ed231db1d, 0x390e08d83c5cb56ac8f76dba,\n        0x8ffccf98d1fd90a6d9699922, 0x297fdc5318c283e648d9307a, 0x2ebce2c6fad38f6b05046fe8,\n        0x7b6f08ebf3fa7127dd9ebbe8, 0xb90e446031bcfde924b52f52, 0x419d0922c0b05c7e80181313,\n        0xc5473a29fb09b64b272a1381, 0x846ad59a4b716e5aacc3c2fc, 0x731c33e242188262aff293da,\n        0x60ed6b92137356d97058082, 0x6c795f87c285918024a2ab0f, 0x8f03dc62a697462ba68b4179,\n        0x4d99077943f1ff184a0bb2d1, 0x9215c7b1eab149b03ca4cd23, 0xff8988e6b9c702dca5a99b1c,\n        0x4dbd2a2419bc1ab70fc22b62, 0x18d6113d, 0x0, 0x0, 0x764ea48bbad71a9a67f4b79e,\n        0x30fc39e1ff88b7555cdafb71, 0xb2a20d2ac2e81d53816f0e99, 0xe0545315cd7982230dfdaa4,\n        0x216c94db5dd9a74dfe44cf39, 0xe334e843f62beda17ce1a7eb, 0xc627a18e99c8026d36ca6c3a,\n        0x8c36c270c46bbe670a0ece17, 0xe9dc4a067e45d18153622975, 0x4f96a4cab2a12309d0a4b0d7,\n        0x51fe0d9634ac22d9db55ad69, 0x3dcf6ea583a2dd2cfcf4d42a, 0x522d0624f5e7bc3cc7ba4d36,\n        0xef8c7b3bdcbd6752cfc2f3c7, 0xe04379228cba51fc162f9b14, 0xa2b22a9f78e43bb8aba0bab4,\n        0x7ef79816262d274aa9beee59, 0x1f151392a6e7ad3ab4f17c11, 0x694a814a74f1e792bb77e43,\n        0x88862340507ffa743d469346, 0x261d5158ed2aea4fb94b2c31, 0x3e0f55f, 0x0, 0x0,\n        0x9d758c993f35908a3d1ac3ff, 0xd2b94a807513da92809e2af3, 0x8c7f76d167a36b770d1e8fa4,\n        0x89f1ab6618af73fdd32c9742, 0xd3026ac7ca72094dcdef5e43, 0x51277cad9de4188a88f05205,\n        0xce988cc6a462e889cffaff52, 0xbb9d54682048ff57329ce071, 0x109c4386ac03768c852f3848,\n        0x18369c66d96acfdfd138fc77, 0xaad15104b9bf4fdb4325f37c, 0xce473563426be11350ced0b,\n        0x90bf39c5762e1e14208f8c49, 0xa167ddb5eb69a2717ab77728, 0x19fd818ac22656b0ca417316,\n        0x4b7dd960656c1d09dc5df2e1, 0x80a10fddb4a0fce45c4c864e, 0xe1911945386c26866097a4d,\n        0xfb8c6404f61a0f9de33c0dd0, 0x6de8e2f0ba7315c0de88f87a, 0x37ab80ab90aa69864fadd20c,\n        0x1a3e25, 0x0, 0x0, 0xf2121f9ce628b5194b0cefa5, 0x6a5f463a796e10ecd42849a,\n        0x5d2a4286654bf665fe101638, 0x885e7b1498dfabffe72a0114, 0x8faba4649f56c58f230fb488,\n        0xb08f24bb73d250bf5db6c955, 0xf1921d98ca9d8aa78882d5a, 0xde67c2bba836959bf7b97c20,\n        0x284c59b4fc41995793ac1874, 0xc849748765ca588d1da02ba1, 0x93f0c43e3e5adcea6ccdfd05,\n        0x149d2a17f987b810b986de40, 0x4bcd3b49ad1d78194272f35f, 0x9deba0daae583afb085b2c4b,\n        0xa76986c51df2ba8b516fa6a8, 0x7d75066a98098577bb52d031, 0xd1325af69dd36c025cd1ad01,\n        0x6e2f3e0ffee43c228cd714b3, 0x6c53b6a8d7afbbb8fbc3f51d, 0xa0b3f87077c8ca62f57609da,\n        0x20e80e03dec15bb183f6b87a, 0x49b4e13a, 0x0, 0x0, 0x1122338bf96c33b2cdc51e1a,\n        0xf3842c58c7e88e85234cc33b, 0x118e93ada3f608f597c05576, 0x820d2fb2071bf3bd88ff1f31,\n        0x794cc1dcd63edadae69b8a19, 0xb9fca35d8f2504354d83fd15, 0xfaf9e42c40499105eb174ddc,\n        0x370da406563897ae26b6c1b5, 0xf06181c301b05608a8fdfe4f, 0x7299598267b24cac1809aaf1,\n        0x2568b0fcc7ccab32b30a764d, 0x32110d2a73226ac45617a6e7, 0x8509ed9c827b09cba0b49328,\n        0x15db7aaed73daae702d23789, 0x4b1b133af3360e316a51f0d0, 0xd70f54a3b7f67beb337c31b4,\n        0x3624811e36b4fc7771580301, 0xc49658f2429e8e7f49ac6290, 0xcf44ee8fa8ab3683fa652219,\n        0x4e83288ad7f11241e2ffd269, 0xa31b40eaf3ce320e1066f68a, 0x250450a1, 0x0, 0x0,\n        0x84870908709c3dab6fe072ff, 0xbf2e1910c1eeec426a2fa60d, 0xb0e14f452c55d16b7c4cc444,\n        0xee8ccd750ea73c3de2e82850, 0x500ea35e8db52a1b6051f685, 0x226854bc552e0877200da28d,\n        0xf318d9e3310ad66aaa6372cc, 0x711f695ee7feac54328be837, 0x6e68ee09cf4c96e48127691e,\n        0xeb6168084fda5a67368fae9a, 0x9d10a86ecc34257da7e4c573, 0xc18dbc3920f13c657979b907,\n        0xfbd2bc041d45131cd095b7, 0x24040e9f7ac50f4c1aede2de, 0x4f667f8bbbdd39b4c400ca1b,\n        0x58116778c283146864a1d725, 0x63227483f6f9a3d1c90d73f8, 0xf911d93f325613704206b4f3,\n        0x8ee124c2a51759408ba640b8, 0x128f8a8d3ae57f0db89a5619, 0x7274ae8fc90d232c639ce516,\n        0x89af86de, 0x0, 0x0, 0x2d3afffa35f4a64d88b011a4, 0x6a72c7b19e17943d45779d61,\n        0xf14546121e1ae073b87dbb04, 0xfcefea93fe20fe9ba6d7e269, 0x3e69d6a1bb5fd0f86e56fc16,\n        0x3dd3149f9ba5dfda0965692a, 0xaff401b42c729bdb3fe17190, 0x8ab45081ffc5295f73890f0e,\n        0x2fbc3ed733a21ceaf8b3ecd1, 0x5d1d52815d3ddcb1c15e4b26, 0x3d7e3f363a4ccac40b62215e,\n        0xe476e9c597a0cba31065be61, 0x969f1b3c01d5b6bae0222865, 0x3f85356074c5685da03f2b8d,\n        0x288892335a945169cf1f575f, 0xd2390ed4b3b3673ed84a9418, 0xfcc210117ef05c47e53fec2b,\n        0x9f7ef4fbf3f2b7b6eeeb9025, 0x7e59451c584b4845e5947a55, 0x840c1a26fa9560be178835b7,\n        0xa7a3d85a2b323f062530bbc5, 0x812bbe28, 0x0, 0x0, 0x1311e5c55dca533ae8ff5bdd,\n        0xc91ed1bb63c5b41390c53a4, 0xd30a95389c9bf8a33b12469d, 0x72a443acc53447f42906d77d,\n        0x4d48d08e2a86f28eda1436f4, 0x68a620e1b477d8abfe2d1e91, 0x5b70f922adb4e53849beb7b3,\n        0x128730d9ab5be441b0511d4c, 0x9dcbb43a9fb54b3aee1e3ea6, 0xd361e43fc318e81efcd2db5b,\n        0x68d06d367ba76425c1cc7726, 0x4ddbbd842d071d3245603b32, 0x45ab54282d4d3e77351a77e0,\n        0x1f56e3371f02d4a951e3bec8, 0x25a78164dc0758dc6a49607e, 0xe62463c0ddcffe7f516e1b37,\n        0x52bd6adc40c4246a21c684c2, 0x88e4071b1ecef5c6a7370623, 0x107634be04f731c2eb9ca6e5,\n        0x71b037cf14fd283826b88d28, 0x268eebfb0ae70481543bb615, 0x2ecb3fdb, 0x0, 0x0,\n        0x228ad4d7f125a5c4634b1466, 0xb613eae860b37f50920f6abf, 0xf0ab9f4db596def6a898d730,\n        0xd92438d0e40cdb17c67ff1ba, 0xfdb76d1b2f881112bcfaf280, 0x289c28eeca9b0434f2e5b9ca,\n        0x852ce01cc3271883b0768054, 0x67106e0d5cdbcff8277527f8, 0xb1b8a3577804682b961d40ac,\n        0x433a2f641eef2d53466d08d5, 0x84e43653e0e42bcfa5fdb450, 0x1e8c2a8aa2eedec5892e1776,\n        0x436c1e68352c53f5fef48cfb, 0x1edeff5a73e37ab057b2f38d, 0xf7bbbb410c00b81892638049,\n        0x8c6ef228fdb39fe535322bc0, 0xe674f4f97307541ec5fa366b, 0xf1109624569638b673c8c5f7,\n        0xb5b893eb13bb43a3cf1737c2, 0x6596ff86d59cf50dccac613a, 0x1d4425bbcf62d4f2a7486364,\n        0xeeb7fe5, 0x0, 0x0, 0x626c679fb93e38e1152067a3, 0xf5894b3b17ac906786800c2c,\n        0x682dbb547f9fd129275273e4, 0xadaa33f94a06e2c49096e4be, 0x53a9843eafa402c191ac52d4,\n        0xa09843114fbed7258d1550d0, 0x162c1ad01e86a8f9fcdb18da, 0x2868f237d3955ba2ad434e5,\n        0xe9ace982cdafd04fd06b1e64, 0xf55d93d36cbfd031ca5379b6, 0x7ced0068126e60248ecd8e0b,\n        0x47c0d7da84813c5b5436a290, 0x88da678da091c09811d45844, 0x382712da51d8204096c1a5b1,\n        0x7a5fc05b3d87dedc06f0ac53, 0x7ac555dadbfb13f23b13f8a3, 0x69b5a79149b02e1bf3237315,\n        0xc31a5209b37aeaa7024e42d4, 0x4a2d64b833d3bf5b25da4c17, 0xd27217840da833f3ca031490,\n        0xe6ba51dc5c9b1e335cef858e, 0x7f3020e, 0x0, 0x0, 0x77ceae4c2b60844b2c20e2b5,\n        0xe98658ee2e0bf9278cb7f742, 0xac62d553376ee518230cd74b, 0x79f7b1537573de2a4ea6982d,\n        0x6572247ce146cc339c0e8ee1, 0x8dc1388c892dbc07297d9c5a, 0x6619297249fffbb578b07cb8,\n        0xb473d090739a369439831f14, 0x5e36758211bd32bb0c810712, 0x3fd2530a4b6a0d4706db6db1,\n        0x2b4f8095fa770105f6026f2b, 0x725a3472870e49daf3a47088, 0x2f2c6284e7d6e535ae8783ad,\n        0x5df46bcb400acc60df3bba1c, 0x3110cc4ea7739dbcb892bedf, 0xd8fc37c1b17df8366a473e5c,\n        0x9c024beec23d515f672ccba6, 0xc8cfac66125f669f89b67f72, 0xb37e158aa7115d973c6df3eb,\n        0x8deddf9428a6ad2cdb6df56f, 0xaa7dce6f5b15deb02979ca3c, 0x6e398f, 0x0, 0x0,\n        0xea47369e330ae2455fcf1274, 0x9443983ce27b276ab6590698, 0x635d0621bf13934b5c5c9173,\n        0x9f3912332e740b9ba725cb3, 0xfd93cb852ed3653884a973d4, 0x61e5be1634839d9bf636b31d,\n        0x474e35474a3714020c89e488, 0x48ca2e24787a25ad9c960303, 0x76dcca8bde3a6d882447dc3e,\n        0x4c2860cada5514f768cbfe9e, 0x61f53b26b08c1eebdaf97907, 0xdfca4ee19639526f131edc99,\n        0xf31234fb5e86f130e9f35eac, 0xcca7639cfba949a6f4717459, 0xaf2e25c83dcf4e7d0b32bd86,\n        0x10fcd46ff86193f73287cb93, 0xf9833a4cd11692ef8d630f19, 0xeaa8d721f4fddfa3409b4345,\n        0x683cf50a0fe2e5df875d534c, 0xa5aa3ddd440adff4b27981d0, 0xa08bb0ad7b6549f3a77a7fbe,\n        0x279bde5, 0x0, 0x0, 0x606e72b70236cb25b787157, 0xd543e7423bb0a0e8a9ed8176,\n        0x6a3c4997523436b8c3c0d84d, 0x3cdf08fb4c1b083c14176ea, 0x197f9cf8e5acf6b1253106c1,\n        0x8337d584f9fd47df2c254539, 0xe3a5747a00c7add6c9746932, 0xe07f9abf4f93d5487adbc175,\n        0x75fd6f77331b6ca643e94cc9, 0x73971719d8b41099f5c4e24, 0xf29ce7b1de96c4c3258c5a16,\n        0x76ad5e8129d19353bb09bb74, 0xdddf9efe5b89ce1e2360d87a, 0x6e7b155ac21b1397605b7f5a,\n        0xdb2d8f1526f928e6cfe57f26, 0x835915c55f3e5c9bb2e41e7c, 0x811e1275ebd4789bfe68c316,\n        0x2f19cebb011c3d9771f7d3f7, 0xf18479a2846adfadf1af3407, 0xbf0a585f2e403c05b6e0cbf1,\n        0x890b4f52eb8897d561eade9a, 0xab09a, 0x0, 0x0, 0xfaf2885c8f07e54380fb0659,\n        0x1369e0c70af691c346ad0451, 0xf9d9dab7e5bf4217125091cf, 0xc94a4ddd4917d6cdaa14e17c,\n        0x16fc1947394f600f32bbdeb8, 0x6ec197ba0ea5948c25dcf903, 0x25b8f2adffec72402f74fc8,\n        0x10b5ae078726bf3ed1ab200c, 0xb7936eee2cbcaef5bdeb6082, 0x9b98e1aaf9ec32882e88eb83,\n        0xf1e0ce0e6d2df5c493671611, 0x56cbd12d9e9272a1b2dd4e0d, 0x4cf48df4a387c7353137d58b,\n        0xe164cb94753c07f1eac3f232, 0xf7c6c4badb977f9c9f72b08e, 0x3ac2f98a7a9780fb6d3cde91,\n        0x8d71aa7c2e2d911fc3b0d0d, 0xa63ebcb0cae8cdd3841b5a00, 0xeb50d80dd1210e3cb09476be,\n        0xd29f8a797919caa073068beb, 0x966eab8edeb0bc4bfe4b28f2, 0x71b86fa5, 0x0, 0x0,\n        0xc152caf76097ab0815045102, 0x3d98c92206b1824b7a7b26b6, 0x955bcbd1546aa595b1c70be6,\n        0xa2a13943bdc3876f39f39029, 0x60cae7e1c63731fa039088f7, 0xe0cd65b3d84f07e24d466ecb,\n        0x7ebd3729a4274ac3ab06260d, 0x99552eb3ebd2167dba704a47, 0x2f85bb7fdb8bb6ef6d7082f5,\n        0x59e12c5dab3d653e8d5dcae, 0x5efb1e847dac8f3c75e6b2dc, 0x5653b10a46f38289a303c60a,\n        0xb55b7ad35a60ee01b2a06c4a, 0x2fc9d6cc476812629f0690b4, 0x127881a109554756878eb900,\n        0xb64d4a9c25bc64493e8b83e7, 0x6f8220072f19c81354045b30, 0xc4b84f9f5cbfad17bb05e85f,\n        0x41e819c22d4771ec5f50b372, 0x6afd6a56fd002341db9aecd7, 0x8195c45613d4712c1545e7e,\n        0x581e31f3, 0x0, 0x0, 0x1039be0899a914834427fdaf, 0x46898826a20e11ccfcc9a6b9,\n        0x35ff691ea831f633237de7fd, 0xae796ca123ba5798fa00d076, 0x83e345f46082ea55b5e73ffb,\n        0x2c1051210027ac1a408050d8, 0xd9e8bdc02a581e56669179d0, 0xfb7f2e57b366f4297774790b,\n        0x9704009b7358e08261ab6a04, 0x38ede9f905cb13659162d038, 0xb27aab1efb2051983cbdcee0,\n        0xfdd5ea62b0b31a4c2516e8b9, 0xa4829e1cd351862e9e452ab6, 0x291f2bea88892dbe735d13b,\n        0xce6527df3fd6ee2cca7903ac, 0x3499269dbc455e3d447b0f5d, 0x8a245660e949239c73fa705d,\n        0x32794bbd8aadb6cf5290c426, 0xe68dda773520f0a862d1907c, 0x1f0329b4a262b8f4bbf513ef,\n        0x824202b9d0f6adc0d9791bc7, 0x168affea, 0x0, 0x0, 0x85e053b71672165b770143d9,\n        0x1435d4d955c76f51109fa271, 0x596f2aa4c7304743cec7e970, 0x81967cb23d3345f3da0d6483,\n        0xcd4ad402a7d80575069686e9, 0x9b9d2cc7150a4c07e8676a2c, 0x34dfc8eab0f7d59bcff3728e,\n        0xe035a0fd9108c35b2d8c53ac, 0xb5565a2c22c8b7ebc1dd0359, 0x503c2ed493799d64966c78a1,\n        0x9a59a23e1521bdcd93f1bd2e, 0xbafc90ae21f0818a58aa0c3c, 0x1ad7ca23fddbf265a8f7468b,\n        0x18dbd08c4b9e816d53551b57, 0xaea8b0fb268ba1a879fa3ead, 0xcc9019294c7af9ba8ea52429,\n        0x81243fc6681f4cc437df5791, 0x1c3973da8c348624795b1b35, 0x6213f497373385d11b004a0b,\n        0x3a15e382fec94f43fedb9fba, 0xdf2658a450ca87bc2b772dfa, 0x1604a62a, 0x0, 0x0,\n        0x63daf4f0614487a857aa397, 0x4cee11531104e6d3321a6137, 0x500042073e6d1148bd2559c,\n        0xd0609608648016503040201, 0xffffffffffffffff00303130, 0xffffffffffffffffffffffff,\n        0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff,\n        0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0xffffffffffffffffffffffff, 0x1ffff,\n        0x0, 0x0, 0x0, 0x68656c6c6f20676172616761, 0xc,\n    ]\n        .span();\n    let public_key = Serde::<RSA2048PublicKey>::deserialize(ref rsa_sha256_serialized)\n        .expect('FailToDeserializePk');\n    let rsa_with_hints = Serde::<RSA2048SignatureWithHint>::deserialize(ref rsa_sha256_serialized)\n        .expect('FailToDeserializeSig');\n    let message = Serde::<ByteArray>::deserialize(ref rsa_sha256_serialized)\n        .expect('FailToDeserializeMsg');\n    let is_valid = is_valid_rsa2048_sha256_signature(@rsa_with_hints, @public_key, @message);\n    assert!(is_valid);\n}\n"
  },
  {
    "path": "src/src/tests/autogenerated/schnorr_tests.cairo",
    "content": "use garaga::core::circuit::u288IntoCircuitInputValue;\nuse garaga::definitions::G1Point;\nuse garaga::signatures::schnorr::{\n    SchnorrSignatureWithHint, is_valid_schnorr_signature_assuming_hash,\n};\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_schnorr_BN254() {\n    let mut sch_sig_with_hints_serialized = array![\n        0x5c724369afbc772d02aed58e, 0x2cd3bc838c66439a3d6160b, 0x72f26b55fb56be1, 0x0,\n        0xf14522f0e41279fa3733fed2, 0xea20efd268b756a9c0b06945, 0x7df9c9692acbd19, 0x0,\n        0x536c985db33c69f7c242e07a, 0xfc531bccffafcf1e59d91fb9, 0x2585e4f8a31664cb, 0x0,\n        0x88be2ce9ce62b465354a3799fa203a0f, 0x153a203b4df3737a1b3372ac547e5fbc,\n        0x12e0c8b2bad640fb19488dec4f65d4da, 0x1521f387af19922ad9b8a714e61a441c, 0x18,\n        0x2c40cb132c58c1528d9f95d4, 0x363f4c34cb9e9ec70646c9a0, 0x283fe6ad6138b4db, 0x0,\n        0x10969c686e4b6ba132f856ea, 0x9a84e9b2de29941e85990dd8, 0xce8c7dd9d8b7727, 0x0,\n        0x15f0bf1ccf4e04fd, 0x100000000000000004d15cba927fede3d,\n        0x100000000000000003fda8089c1ac8853, 0x8309133f4f176e9e, 0x2c41289f2cce1b1d98bc1c58,\n        0x877a1e0880ae4ac2e8cb9898, 0x1f1f91048403230b, 0x0, 0x51b26382cce36f83e9330566,\n        0x9303c191ab170a86a28c3ddd, 0x122b07c7aa481cb, 0x0, 0x100000000000000003a941ddef107f2c9,\n        0x10000000000000000002a2b771d1d6d88, 0x6f26862a18f2c12b, 0x44028f462731bd,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let sch_with_hints = Serde::<\n        SchnorrSignatureWithHint,\n    >::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_schnorr_signature_assuming_hash(sch_with_hints, public_key, 0);\n    assert!(is_valid);\n}\n\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_schnorr_BLS12_381() {\n    let mut sch_sig_with_hints_serialized = array![\n        0xe4f817e54aede0613c17035c, 0xdff1f15010392a6da1f95a6, 0xbed78d3d341e911d49f15454,\n        0x18154782ce0913b21588066d, 0x73dc29ec930fa565a5979354, 0x9429c7a3a7a2e40636af119e,\n        0x63acb8cedd134d23d3ccba66, 0x18e6b0be5c742604e8963d45, 0xde4f62a6588c9401ffefbd3,\n        0x9bb5f797ac6d3395b71420b5, 0xdc39e973aaf31de52219df08, 0x105dcc4dce3960447d21d3c1,\n        0xb83ced7922696854920e4dce5618fd79, 0x1efa0c12855ed037f8665a14d0c63ba1,\n        0x12e0c8b2bad640fb19488dec4f65d4da, 0x2a43e70faf19922ad9b8a714e61a441c, 0x18,\n        0x99c33ff58fea7052bbb086a1, 0x1c359e13cb837e312dddb499, 0xedbe35427d90e4bb5ebcdf77,\n        0xb985b53c974e161da07a472, 0xde25a39170f2c0507b5ed860, 0x994e3ae48dce086260b85782,\n        0x7b22ea9577da0309f37f3ef9, 0x10ea8776b9541b0999d8d9cd, 0x22dbd86bddefd4d2,\n        0x100000000000000002092233c9decb8ff, 0xcd1dbee71ada39b7, 0x9322462863de7845,\n        0x95784ad2a24613cafab3e5ce, 0xdcf21fab1f76105f40e47606, 0x53de1e9b25d4c163c91db04c,\n        0x11a0b3d6dba83f3db716cb0e, 0x79e7b489b946a83ef4db5c0, 0x3b050ac62a98e6a19f9fe1c6,\n        0x93e750c788c6bfeb8566333a, 0x457b247b6591483d8dbf18b, 0x100000000000000008af4c254e183b405,\n        0x100000000000000004cbee0df44e8382c, 0x10000000000000000946f8bb609f9ba7d,\n        0x100000000000000004e77077ba28bdfd6,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let sch_with_hints = Serde::<\n        SchnorrSignatureWithHint,\n    >::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_schnorr_signature_assuming_hash(sch_with_hints, public_key, 1);\n    assert!(is_valid);\n}\n\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_schnorr_SECP256R1() {\n    let mut sch_sig_with_hints_serialized = array![\n        0x113c8d620e3745e45e4389b8, 0x85b8ff52d905fd02fe191c3f, 0xf5d132d685201517, 0x0,\n        0x60c0ba1b358f375b2362662e, 0x6abfc829d93e09aa5174ec04, 0x7bc4637aca93cb5a, 0x0,\n        0xd3ff147ff0ee4213f51f677d, 0x431366a7732a6e4a6b942255, 0x9fe743b25d39a591, 0x0,\n        0x227664fcd18152d34168f6ded74ab915, 0x69b292ba7d07a7c252d76438f5ee7ec1,\n        0xe443df789558867f5ba91faf7a024205, 0x23a7711a8133287637ebdcd9e87a1613, 0x14,\n        0xe7048fa08ff83c48faafa01e, 0x4f5e1916e57a6dbf63c36e8d, 0x72872d18857fcd24, 0x0,\n        0x701ae40e4ba5a9f2e60e57ea, 0xadfda7abf39a0913191769f6, 0x2de1ee879affd779, 0x0,\n        0x434ebc818522df6c3a48fdeffa4bc338, 0x187026bb983fceb4a56a5ca9e9c969631,\n        0x40ab24bf96ae6fa731d65b90, 0x3d2d6da80d5ca858290e1409, 0x953b9901eec6e415, 0x0,\n        0x553919b2bd1f42bea69d67f3, 0x320dbca9f723841d3be6dcf9, 0x936046f4cb8c4595, 0x0,\n        0x3de0ac20b2665b5ee208e66433aaac05, 0x67db401fe06eea845a19e61367b76a34,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let sch_with_hints = Serde::<\n        SchnorrSignatureWithHint,\n    >::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_schnorr_signature_assuming_hash(sch_with_hints, public_key, 3);\n    assert!(is_valid);\n}\n\n\n#[test]\nfn test_schnorr_SECP256K1() {\n    let mut sch_sig_with_hints_serialized = array![\n        0x393dead57bc85a6e9bb44a70, 0x64d4b065b3ede27cf9fb9e5c, 0xda670c8c69a8ce0a, 0x0,\n        0x789872895ad7121175bd78f8, 0xc0deb0b56fb251e8fb5d0a8d, 0x3f10d670dc3297c2, 0x0,\n        0xfdfdc509f368ba4395773d3a, 0x8de2b60b577a13d0f83b578e, 0xc2dd970269530ba2, 0x0,\n        0x2cad564f3e93c6683bd94b5438ce08f0, 0xcbbfcb3b677e87eff66c9a804800a3b3,\n        0xe443df789558867f5ba91faf7a024205, 0x23a7711a8133287637ebdcd9e87a1613, 0x18,\n        0x594f9cb2a86a873bb8d4ccbd, 0xfee1700bc5d2111958ae798c, 0x4d99e99571d0a61e, 0x0,\n        0xf284daf0aabffcef1939ef8, 0x91753b141fbe90ddcb717736, 0x3233811221bd1d30, 0x0,\n        0x100000000000000000a9b06fa280b530a, 0x1000000000000000040415040c7a17610,\n        0x100000000000000002e35f1582f3234ce, 0x100000000000000008f635c9bcb2eefe1,\n        0x79a64775d37621de2372f3cb, 0xd3aa1d3b8418f14398df80f2, 0x2430232b1b17cb55, 0x0,\n        0x895249ed4eaf972102b5c3f5, 0xd35f2675285d8568f81ef0d, 0x1fbd9931c3f2bbf8, 0x0,\n        0x10000000000000000baf06a7a3e4aa015, 0x1000000000000000075adffb9c0d2b742,\n        0x100000000000000006f45630d920758e7, 0x13bfcc5670fee7eb,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let sch_with_hints = Serde::<\n        SchnorrSignatureWithHint,\n    >::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_schnorr_signature_assuming_hash(sch_with_hints, public_key, 2);\n    assert!(is_valid);\n}\n\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_schnorr_ED25519() {\n    let mut sch_sig_with_hints_serialized = array![\n        0x7238f02b9f20e09c2181a557, 0x2cedcc5b0be371c337fd7e9e, 0x41f3bbeb280fe8a2, 0x0,\n        0xfb9073291a58a0358e22e52, 0x76d4b9ec10a3a720b1096d5b, 0xad805c90a8c77b8, 0x0,\n        0x82e4a33f8e4e5881e791d86b, 0xbcb062435ae8ec5fdaeac4bf, 0x179e1bae9e0f9f34, 0x0,\n        0xa84dfdd6e617589384812f69a2d349c1, 0xa968f5c0a623e3b190de39304eb726a,\n        0x12e0c8b2bad640fb19488dec4f65d4da, 0xa90f9c3af19922ad9b8a714e61a441c, 0x14,\n        0x5cba1348511e21f20cd92c86, 0x63fd89d574978c8364a33dc6, 0x7a1a075dacc03bb1, 0x0,\n        0xe16c3afd3bd9d2a736b5cb70, 0xd954e7aefbda0297b7855a5, 0x3285ce7a8018f502, 0x0,\n        0x3315e27d27a210cb7baa18b5f3f0f9b3, 0x10f773711dcf75ce59993cf26c4f5ebf9,\n        0xfbd811bae294558352d2ca8f, 0xc6b9c22af47b1e43d21ba644, 0x5c18972e38278425, 0x0,\n        0x6a687b6263384a17569caeb3, 0x4166dd87f125393bd27679eb, 0x13a8e31e947075f3, 0x0,\n        0x2ed8419cedf331ec3d387ed44220284f, 0xdbbf233e0f266b14c85329c2440c426,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let sch_with_hints = Serde::<\n        SchnorrSignatureWithHint,\n    >::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_schnorr_signature_assuming_hash(sch_with_hints, public_key, 4);\n    assert!(is_valid);\n}\n\n\n#[test]\n#[ignore] // Ignored for auto-benchmarks\nfn test_schnorr_GRUMPKIN() {\n    let mut sch_sig_with_hints_serialized = array![\n        0x86b402ce02e7c7ca81f13d51, 0x39493672733a9289a36020c1, 0x7f40d91dc5413d3, 0x0,\n        0x429af526e7e0a5381bccb180, 0x88f6dad23856d096b8b80e2e, 0x2684532513785230, 0x0,\n        0x20669ef12954f8e3bbc8b4d3, 0x396a6f7243c27ce553121ee3, 0x11438ca2ec259aed, 0x0,\n        0x7c7059f6158e689893dd21a94f41e410, 0x2454f3702220747f9b72cc1f2d34af71,\n        0x12e0c8b2bad640fb19488dec4f65d4da, 0x1521f387af19922ad9b8a714e61a441c, 0x14,\n        0x1619e977386f5b086cdc8857, 0x9ee9c3131ed8c4e6fb8d3b10, 0x2a23881e074bdeda, 0x0,\n        0x783572bfbbe358723c90aaab, 0xf40d2176448bb22e9cbc031d, 0x2be35fe4dd3f44fb, 0x0,\n        0x51cf7b3d0715b44af5d2f31cb1fd7677, 0x15838663fe7e8f8c16583cabb5df7308,\n        0xa8fc937f9ebc90a8a9a2cf09, 0x6c2d666bea9386f60b1a46c2, 0x2244eddd508f6f81, 0x0,\n        0x5ec6d01c41cedc947662556b, 0x4a7cb97d69bce744b75607b3, 0x2e39c1ad41f66954, 0x0,\n        0x19ae1fd3832d250c6410c5e4cb759edf, 0x538cc4627274d8f320bf5df15c887356,\n    ]\n        .span();\n    let public_key = Serde::<G1Point>::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializePk');\n    let sch_with_hints = Serde::<\n        SchnorrSignatureWithHint,\n    >::deserialize(ref sch_sig_with_hints_serialized)\n        .expect('FailToDeserializeSig');\n    let is_valid = is_valid_schnorr_signature_assuming_hash(sch_with_hints, public_key, 5);\n    assert!(is_valid);\n}\n\n"
  },
  {
    "path": "src/src/tests/autogenerated/tower_pairing_tests.cairo",
    "content": "use core::num::traits::One;\nuse garaga::circuits::tower_circuits::{run_BLS12_381_E12T_MUL_circuit, run_BN254_E12T_MUL_circuit};\nuse garaga::definitions::{E12T, G1Point, G2Point, u384};\nuse garaga::ec_ops::G1PointImpl;\nuse garaga::ec_ops_g2::G2PointImpl;\nuse garaga::single_pairing_tower::{\n    final_exp_bls12_381_tower, final_exp_bn254_tower, miller_loop_bls12_381_tower,\n    miller_loop_bn254_tower,\n};\n\n#[test]\nfn test_tower_pairing_BN254_1P() {\n    let mut res: E12T = One::one();\n\n    let p0: G1Point = G1Point {\n        x: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        y: u384 { limb0: 0x2, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n    };\n\n    p0.assert_on_curve_excluding_infinity(0);\n    let q0: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0xf75edadd46debd5cd992f6ed,\n            limb1: 0x426a00665e5c4479674322d4,\n            limb2: 0x1800deef121f1e76,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0x35a9e71297e485b7aef312c2,\n            limb1: 0x7260bfb731fb5d25f1aa4933,\n            limb2: 0x198e9393920d483a,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0xc43d37b4ce6cc0166fa7daa,\n            limb1: 0x4aab71808dcb408fe3d1e769,\n            limb2: 0x12c85ea5db8c6deb,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0x70b38ef355acdadcd122975b,\n            limb1: 0xec9e99ad690c3395bc4b3133,\n            limb2: 0x90689d0585ff075,\n            limb3: 0x0,\n        },\n    };\n\n    q0.assert_on_curve_excluding_infinity(0);\n    let (tmp0) = miller_loop_bn254_tower(p0, q0);\n    let (res) = run_BN254_E12T_MUL_circuit(tmp0, res);\n    let final = final_exp_bn254_tower(res);\n    assert_eq!(\n        final,\n        E12T {\n            c0b0a0: u384 {\n                limb0: 0x898578b55e1f63739d870e95,\n                limb1: 0xda01bde280a3ed6f87e5feb,\n                limb2: 0x262b253feda94cfe,\n                limb3: 0x0,\n            },\n            c0b0a1: u384 {\n                limb0: 0x918ed66b49d34b48efb8a4a,\n                limb1: 0xa1b1f823879abbd397c4dea,\n                limb2: 0x2e02d2cc795a200,\n                limb3: 0x0,\n            },\n            c0b1a0: u384 {\n                limb0: 0x87ecb1fc4e135402fdbd1de0,\n                limb1: 0xa5b1ad44b31977935fd29573,\n                limb2: 0x13a9f2d6e29b128d,\n                limb3: 0x0,\n            },\n            c0b1a1: u384 {\n                limb0: 0x699ce630b130b08a6ea1162b,\n                limb1: 0x4b31984a74e68659c4b420bd,\n                limb2: 0x40ba9fa500f1a5c,\n                limb3: 0x0,\n            },\n            c0b2a0: u384 {\n                limb0: 0x211ce30bf5e3eeaef89eafdb,\n                limb1: 0xbe359d7f9873f052478f590b,\n                limb2: 0xafc2f3fd870678f,\n                limb3: 0x0,\n            },\n            c0b2a1: u384 {\n                limb0: 0xcc5a8243f9cddbd2d98dd1f0,\n                limb1: 0xbdc662d929e645cadda9a712,\n                limb2: 0x1c54a530398c9064,\n                limb3: 0x0,\n            },\n            c1b0a0: u384 {\n                limb0: 0xfd4b7aef5c0d58c5dc2429fe,\n                limb1: 0x23794a0d856f92591ba990ec,\n                limb2: 0x95c0fbf5d5a1ac0,\n                limb3: 0x0,\n            },\n            c1b0a1: u384 {\n                limb0: 0x590cb4a60f8215d4b99f2b4a,\n                limb1: 0xa31dc10f7b4053c9e9ad9ebb,\n                limb2: 0x14d3d6ca72d8a950,\n                limb3: 0x0,\n            },\n            c1b1a0: u384 {\n                limb0: 0x43c585fdfaf545838ca7429,\n                limb1: 0x89dc206b4b91c85759dc1a23,\n                limb2: 0x1dc0e7bbc3d70e66,\n                limb3: 0x0,\n            },\n            c1b1a1: u384 {\n                limb0: 0xac16cc1b7ab2cd3ed5e22b97,\n                limb1: 0x98a855ffc837d2a75ab90d61,\n                limb2: 0xb53320e5a6488cb,\n                limb3: 0x0,\n            },\n            c1b2a0: u384 {\n                limb0: 0xc42a9c0f9bd7fddaf5ebd723,\n                limb1: 0x6c91476ef36cd1d318ce07ba,\n                limb2: 0x13a8afd3085dae4c,\n                limb3: 0x0,\n            },\n            c1b2a1: u384 {\n                limb0: 0x43940c383e5314859e762c97,\n                limb1: 0xb601f3730a3afa965ceee1b3,\n                limb2: 0xf97b5221474526,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\nfn test_tower_pairing_BN254_2P() {\n    let mut res: E12T = One::one();\n\n    let p0: G1Point = G1Point {\n        x: u384 {\n            limb0: 0xcdb6d03cb7b9a5409b7efcd8,\n            limb1: 0xd1df87eab84852372b905c9c,\n            limb2: 0x1d0634f3f21e7890,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0xaa1d4f4d3021032564460978,\n            limb1: 0xeb3f1d6ba3b10e2b53dc193b,\n            limb2: 0x24c53532773dce26,\n            limb3: 0x0,\n        },\n    };\n\n    p0.assert_on_curve_excluding_infinity(0);\n    let q0: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0xf75edadd46debd5cd992f6ed,\n            limb1: 0x426a00665e5c4479674322d4,\n            limb2: 0x1800deef121f1e76,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0x35a9e71297e485b7aef312c2,\n            limb1: 0x7260bfb731fb5d25f1aa4933,\n            limb2: 0x198e9393920d483a,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0xc43d37b4ce6cc0166fa7daa,\n            limb1: 0x4aab71808dcb408fe3d1e769,\n            limb2: 0x12c85ea5db8c6deb,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0x70b38ef355acdadcd122975b,\n            limb1: 0xec9e99ad690c3395bc4b3133,\n            limb2: 0x90689d0585ff075,\n            limb3: 0x0,\n        },\n    };\n\n    q0.assert_on_curve_excluding_infinity(0);\n    let (tmp0) = miller_loop_bn254_tower(p0, q0);\n    let (res) = run_BN254_E12T_MUL_circuit(tmp0, res);\n    let p1: G1Point = G1Point {\n        x: u384 {\n            limb0: 0x536c985db33c69f7c242e07a,\n            limb1: 0xfc531bccffafcf1e59d91fb9,\n            limb2: 0x2585e4f8a31664cb,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x57fa42444057cf0c1d62ae3c,\n            limb1: 0x4f48d341183118d68ea41313,\n            limb2: 0x1d2d2799db056ed1,\n            limb3: 0x0,\n        },\n    };\n\n    p1.assert_on_curve_excluding_infinity(0);\n    let q1: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0x335eb0538f718d8e6651eeb1,\n            limb1: 0x635e573808d9d5c7178bdce7,\n            limb2: 0x1314aaf1c372e6d7,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0x5289f29ccc5acf5e81526673,\n            limb1: 0x2d4aba9e1448a8cc1048d01a,\n            limb2: 0x14c25d3aec745e5a,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0x10d1d0efd5869ecd23aab8e9,\n            limb1: 0xba7d1de6d86501d49b6a8dab,\n            limb2: 0x397391b7b25e2f,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0x385a553ea12434f4eda6db36,\n            limb1: 0xb058c1ff7e4c5c7ec7e5859b,\n            limb2: 0x1863ac65eca09e89,\n            limb3: 0x0,\n        },\n    };\n\n    q1.assert_on_curve_excluding_infinity(0);\n    let (tmp1) = miller_loop_bn254_tower(p1, q1);\n    let (res) = run_BN254_E12T_MUL_circuit(tmp1, res);\n    let final = final_exp_bn254_tower(res);\n    assert_eq!(\n        final,\n        E12T {\n            c0b0a0: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b0a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b1a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b1a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b2a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b2a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b0a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b0a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b1a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b1a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b2a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b2a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        },\n    );\n}\n\n\n#[test]\nfn test_tower_pairing_BN254_3P() {\n    let mut res: E12T = One::one();\n\n    let p0: G1Point = G1Point {\n        x: u384 {\n            limb0: 0x5c724369afbc772d02aed58e,\n            limb1: 0x2cd3bc838c66439a3d6160b,\n            limb2: 0x72f26b55fb56be1,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x772ca79c580e121ca148fe75,\n            limb1: 0xce2f55e418ca01b3d6d1014b,\n            limb2: 0x2884b1dc4e84e30f,\n            limb3: 0x0,\n        },\n    };\n\n    p0.assert_on_curve_excluding_infinity(0);\n    let q0: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0xa30b422f34656d6c94e40be,\n            limb1: 0x83069b5050fd7194c7e35d0c,\n            limb2: 0xf0e8184945e8d34,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0xde9079ee8fa5e15901dfef27,\n            limb1: 0xdb602cf367841e5047ffab14,\n            limb2: 0x1752c7b6b35af45,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0x4dafbd7f615fd2aa9f5a0acc,\n            limb1: 0x35c8bbffe201ffd56deb5dea,\n            limb2: 0xa822a5ba029a283,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0xec6d9e4fafec17b8404c0341,\n            limb1: 0x17fe961ad4b8ee3bf2ade626,\n            limb2: 0x1228147f83e3ea5,\n            limb3: 0x0,\n        },\n    };\n\n    q0.assert_on_curve_excluding_infinity(0);\n    let (tmp0) = miller_loop_bn254_tower(p0, q0);\n    let (res) = run_BN254_E12T_MUL_circuit(tmp0, res);\n    let p1: G1Point = G1Point {\n        x: u384 {\n            limb0: 0x5c724369afbc772d02aed58e,\n            limb1: 0x2cd3bc838c66439a3d6160b,\n            limb2: 0x72f26b55fb56be1,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x772ca79c580e121ca148fe75,\n            limb1: 0xce2f55e418ca01b3d6d1014b,\n            limb2: 0x2884b1dc4e84e30f,\n            limb3: 0x0,\n        },\n    };\n\n    p1.assert_on_curve_excluding_infinity(0);\n    let q1: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0xa30b422f34656d6c94e40be,\n            limb1: 0x83069b5050fd7194c7e35d0c,\n            limb2: 0xf0e8184945e8d34,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0xde9079ee8fa5e15901dfef27,\n            limb1: 0xdb602cf367841e5047ffab14,\n            limb2: 0x1752c7b6b35af45,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0x4dafbd7f615fd2aa9f5a0acc,\n            limb1: 0x35c8bbffe201ffd56deb5dea,\n            limb2: 0xa822a5ba029a283,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0xec6d9e4fafec17b8404c0341,\n            limb1: 0x17fe961ad4b8ee3bf2ade626,\n            limb2: 0x1228147f83e3ea5,\n            limb3: 0x0,\n        },\n    };\n\n    q1.assert_on_curve_excluding_infinity(0);\n    let (tmp1) = miller_loop_bn254_tower(p1, q1);\n    let (res) = run_BN254_E12T_MUL_circuit(tmp1, res);\n    let p2: G1Point = G1Point {\n        x: u384 {\n            limb0: 0x8dcb6db105ead17484cff544,\n            limb1: 0x95151f1c65bf4c2e698b5634,\n            limb2: 0xc83f07e39979c6a,\n            limb3: 0x0,\n        },\n        y: u384 {\n            limb0: 0x38cf77eafd4a4fdd9e46575,\n            limb1: 0x3cf1e428854a9a0e559814bc,\n            limb2: 0x15571140da88fd37,\n            limb3: 0x0,\n        },\n    };\n\n    p2.assert_on_curve_excluding_infinity(0);\n    let q2: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0xa30b422f34656d6c94e40be,\n            limb1: 0x83069b5050fd7194c7e35d0c,\n            limb2: 0xf0e8184945e8d34,\n            limb3: 0x0,\n        },\n        x1: u384 {\n            limb0: 0xde9079ee8fa5e15901dfef27,\n            limb1: 0xdb602cf367841e5047ffab14,\n            limb2: 0x1752c7b6b35af45,\n            limb3: 0x0,\n        },\n        y0: u384 {\n            limb0: 0x4dafbd7f615fd2aa9f5a0acc,\n            limb1: 0x35c8bbffe201ffd56deb5dea,\n            limb2: 0xa822a5ba029a283,\n            limb3: 0x0,\n        },\n        y1: u384 {\n            limb0: 0xec6d9e4fafec17b8404c0341,\n            limb1: 0x17fe961ad4b8ee3bf2ade626,\n            limb2: 0x1228147f83e3ea5,\n            limb3: 0x0,\n        },\n    };\n\n    q2.assert_on_curve_excluding_infinity(0);\n    let (tmp2) = miller_loop_bn254_tower(p2, q2);\n    let (res) = run_BN254_E12T_MUL_circuit(tmp2, res);\n    let final = final_exp_bn254_tower(res);\n    assert_eq!(\n        final,\n        E12T {\n            c0b0a0: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b0a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b1a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b1a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b2a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b2a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b0a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b0a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b1a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b1a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b2a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b2a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        },\n    );\n}\n\n\n#[test]\nfn test_tower_pairing_BLS12_381_1P() {\n    let mut res: E12T = One::one();\n\n    let p0: G1Point = G1Point {\n        x: u384 {\n            limb0: 0xf97a1aeffb3af00adb22c6bb,\n            limb1: 0xa14e3a3f171bac586c55e83f,\n            limb2: 0x4fa9ac0fc3688c4f9774b905,\n            limb3: 0x17f1d3a73197d7942695638c,\n        },\n        y: u384 {\n            limb0: 0xa2888ae40caa232946c5e7e1,\n            limb1: 0xdb18cb2c04b3edd03cc744,\n            limb2: 0x741d8ae4fcf5e095d5d00af6,\n            limb3: 0x8b3f481e3aaa0f1a09e30ed,\n        },\n    };\n\n    p0.assert_on_curve_excluding_infinity(1);\n    let q0: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0xa805bbefd48056c8c121bdb8,\n            limb1: 0xb4510b647ae3d1770bac0326,\n            limb2: 0x2dc51051c6e47ad4fa403b02,\n            limb3: 0x24aa2b2f08f0a9126080527,\n        },\n        x1: u384 {\n            limb0: 0x13945d57e5ac7d055d042b7e,\n            limb1: 0xb5da61bbdc7f5049334cf112,\n            limb2: 0x88274f65596bd0d09920b61a,\n            limb3: 0x13e02b6052719f607dacd3a0,\n        },\n        y0: u384 {\n            limb0: 0x3baca289e193548608b82801,\n            limb1: 0x6d429a695160d12c923ac9cc,\n            limb2: 0xda2e351aadfd9baa8cbdd3a7,\n            limb3: 0xce5d527727d6e118cc9cdc6,\n        },\n        y1: u384 {\n            limb0: 0x5cec1da1aaa9075ff05f79be,\n            limb1: 0x267492ab572e99ab3f370d27,\n            limb2: 0x2bc28b99cb3e287e85a763af,\n            limb3: 0x606c4a02ea734cc32acd2b0,\n        },\n    };\n\n    q0.assert_on_curve_excluding_infinity(1);\n    let (tmp0) = miller_loop_bls12_381_tower(p0, q0);\n    let (res) = run_BLS12_381_E12T_MUL_circuit(tmp0, res);\n    let final = final_exp_bls12_381_tower(res);\n    assert_eq!(\n        final,\n        E12T {\n            c0b0a0: u384 {\n                limb0: 0x839c508a84305aaca1789b6,\n                limb1: 0x3dd8e90ce98db3e7b6d194f6,\n                limb2: 0x68d0d727272d441befa15c50,\n                limb3: 0x1250ebd871fc0a92a7b2d831,\n            },\n            c0b0a1: u384 {\n                limb0: 0x50439f1d59882a98eaa0170f,\n                limb1: 0xaf5af689452eafabf1a8943e,\n                limb2: 0xa532348868a84045483c92b7,\n                limb3: 0x89a1c5b46e5110b86750ec6,\n            },\n            c0b1a0: u384 {\n                limb0: 0x9396b38c881c4c849ec23e87,\n                limb1: 0x16da0e22a5031b54ddff5730,\n                limb2: 0x689ce34c0378a68e72a6b3b2,\n                limb3: 0x1368bb445c7c2d209703f239,\n            },\n            c0b1a1: u384 {\n                limb0: 0x579973b1315021ec3c19934f,\n                limb1: 0x7c90d8bd66065b1fffe51d7a,\n                limb2: 0x5a50512937e0794e1e65a761,\n                limb3: 0x193502b86edb8857c273fa07,\n            },\n            c0b2a0: u384 {\n                limb0: 0xbbaad8431dad1c1fb597aaa5,\n                limb1: 0x185203fcca589ac719c34dff,\n                limb2: 0x4dc4007cfbf2f8da752f7c74,\n                limb3: 0x1b2f522473d171391125ba8,\n            },\n            c0b2a1: u384 {\n                limb0: 0xa35c8ca78beae9624045b4b6,\n                limb1: 0x8061e55cceba478b23f7daca,\n                limb2: 0x7a45b84546da634b8f6be14a,\n                limb3: 0x18107154f25a764bd3c7993,\n            },\n            c1b0a0: u384 {\n                limb0: 0x86a8703e0f948226e47ee89d,\n                limb1: 0xdea54d43b2b73f2cbb12d583,\n                limb2: 0xc3d5a04dc88784fbb3d0b2db,\n                limb3: 0x19f26337d205fb469cd6bd15,\n            },\n            c1b0a1: u384 {\n                limb0: 0xff02f0b8102ae1c2d5d5ab1a,\n                limb1: 0xa7d2809d61bfe02e1bfd1b68,\n                limb2: 0xa771b6ffd5857baaf222eb95,\n                limb3: 0x6fba23eb7c5af0d9f80940c,\n            },\n            c1b1a0: u384 {\n                limb0: 0x1e32fac91b93b47333e2ba57,\n                limb1: 0x7d0d15ff7b984e8978ef4888,\n                limb2: 0x3b0b0ec5c81a93b330ee1a67,\n                limb3: 0x11b8b424cd48bf38fcef6808,\n            },\n            c1b1a1: u384 {\n                limb0: 0xa09ffdd9be2291a0c25a99a2,\n                limb1: 0x20c806ad360829107ba810c5,\n                limb2: 0x6ce5771cc6a0e9786ab59733,\n                limb3: 0x3350f55a7aefcd3c31b4fcb,\n            },\n            c1b2a0: u384 {\n                limb0: 0x66245cb9108f0242d0fe3ef,\n                limb1: 0x1c7cdba7b3872629a4fafc05,\n                limb2: 0x728ffd21a189e87935a95405,\n                limb3: 0x4c581234d086a9902249b64,\n            },\n            c1b2a1: u384 {\n                limb0: 0xafe47e1efde449383b676631,\n                limb1: 0xdeff686bfd6df543d48eaa24,\n                limb2: 0xd01a7ec73baca4d72ca93544,\n                limb3: 0xf41e58663bf08cf068672cb,\n            },\n        },\n    );\n}\n\n\n#[test]\nfn test_tower_pairing_BLS12_381_2P() {\n    let mut res: E12T = One::one();\n\n    let p0: G1Point = G1Point {\n        x: u384 {\n            limb0: 0xfe174bb39be8658ef83c8c2d,\n            limb1: 0xdb24ddec0e0c3b63d82efa81,\n            limb2: 0xe360a80121d5ef96fd687003,\n            limb3: 0x59d2a79bda5f8a941d4db9,\n        },\n        y: u384 {\n            limb0: 0x7f68344f543e52fe891285a9,\n            limb1: 0x6f6992be16bc35f88c471acf,\n            limb2: 0xcebb5ee96e40a033f5d3b798,\n            limb3: 0x2df47e8cdf189985d5085bd,\n        },\n    };\n\n    p0.assert_on_curve_excluding_infinity(1);\n    let q0: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0xa805bbefd48056c8c121bdb8,\n            limb1: 0xb4510b647ae3d1770bac0326,\n            limb2: 0x2dc51051c6e47ad4fa403b02,\n            limb3: 0x24aa2b2f08f0a9126080527,\n        },\n        x1: u384 {\n            limb0: 0x13945d57e5ac7d055d042b7e,\n            limb1: 0xb5da61bbdc7f5049334cf112,\n            limb2: 0x88274f65596bd0d09920b61a,\n            limb3: 0x13e02b6052719f607dacd3a0,\n        },\n        y0: u384 {\n            limb0: 0x3baca289e193548608b82801,\n            limb1: 0x6d429a695160d12c923ac9cc,\n            limb2: 0xda2e351aadfd9baa8cbdd3a7,\n            limb3: 0xce5d527727d6e118cc9cdc6,\n        },\n        y1: u384 {\n            limb0: 0x5cec1da1aaa9075ff05f79be,\n            limb1: 0x267492ab572e99ab3f370d27,\n            limb2: 0x2bc28b99cb3e287e85a763af,\n            limb3: 0x606c4a02ea734cc32acd2b0,\n        },\n    };\n\n    q0.assert_on_curve_excluding_infinity(1);\n    let (tmp0) = miller_loop_bls12_381_tower(p0, q0);\n    let (res) = run_BLS12_381_E12T_MUL_circuit(tmp0, res);\n    let p1: G1Point = G1Point {\n        x: u384 {\n            limb0: 0xde4f62a6588c9401ffefbd3,\n            limb1: 0x9bb5f797ac6d3395b71420b5,\n            limb2: 0xdc39e973aaf31de52219df08,\n            limb3: 0x105dcc4dce3960447d21d3c1,\n        },\n        y: u384 {\n            limb0: 0xaefd0d854043fd325dd3c34f,\n            limb1: 0x9b63c98d9a7845c52e1e2b0f,\n            limb2: 0x9db0be660d847ccc58358f3f,\n            limb3: 0x17cb6c41f0c4e1a7394ab62a,\n        },\n    };\n\n    p1.assert_on_curve_excluding_infinity(1);\n    let q1: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0x3b3d3c305a70960906e6cb09,\n            limb1: 0x40e5bf3ff02d81e98b75703a,\n            limb2: 0x665a5fc010510bd690ddd7b5,\n            limb3: 0x82dc9154807866eb0f36ccb,\n        },\n        x1: u384 {\n            limb0: 0xe6709deb0dcf81d4285e5e60,\n            limb1: 0xb4dcf956002c4efb974ffcee,\n            limb2: 0x4a6ceebe6375a83dd242851b,\n            limb3: 0xdd18d077ad5bd58dabb18d8,\n        },\n        y0: u384 {\n            limb0: 0x61535fe1a90bae7e6692f9b0,\n            limb1: 0xc91aa58105d3a281b2e84ddb,\n            limb2: 0x197d3446652372ce5ef50e93,\n            limb3: 0x4a468eb9e206b9833d8e8e2,\n        },\n        y1: u384 {\n            limb0: 0x27115c334e82ed4be8da6c10,\n            limb1: 0x194fa3bf769a2e5a52535277,\n            limb2: 0x8be8992de81f47ae3341c590,\n            limb3: 0x198fd0ab6249082bf7007d7e,\n        },\n    };\n\n    q1.assert_on_curve_excluding_infinity(1);\n    let (tmp1) = miller_loop_bls12_381_tower(p1, q1);\n    let (res) = run_BLS12_381_E12T_MUL_circuit(tmp1, res);\n    let final = final_exp_bls12_381_tower(res);\n    assert_eq!(\n        final,\n        E12T {\n            c0b0a0: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b0a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b1a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b1a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b2a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b2a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b0a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b0a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b1a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b1a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b2a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b2a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        },\n    );\n}\n\n\n#[test]\nfn test_tower_pairing_BLS12_381_3P() {\n    let mut res: E12T = One::one();\n\n    let p0: G1Point = G1Point {\n        x: u384 {\n            limb0: 0xe4f817e54aede0613c17035c,\n            limb1: 0xdff1f15010392a6da1f95a6,\n            limb2: 0xbed78d3d341e911d49f15454,\n            limb3: 0x18154782ce0913b21588066d,\n        },\n        y: u384 {\n            limb0: 0x3d77d61326ef5a9a5a681757,\n            limb1: 0xd3070afd4f0e121de7fcee60,\n            limb2: 0xdf9ef4088763fe611fb85858,\n            limb3: 0x11a612bdd0bc09562856a70,\n        },\n    };\n\n    p0.assert_on_curve_excluding_infinity(1);\n    let q0: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0x30d2fddc2fa171cdd4d31a55,\n            limb1: 0x92fab4f255a20d09700542e5,\n            limb2: 0x4d92a8c02d22b8cea4ff21ab,\n            limb3: 0x120a838699abaae7ed948194,\n        },\n        x1: u384 {\n            limb0: 0x51cd5fdc71cf4557ef606935,\n            limb1: 0x92e1b13e2c93fc9957b17841,\n            limb2: 0x6143a906b63b7f3476ad6819,\n            limb3: 0x158186f6f2dd04cfa4e78547,\n        },\n        y0: u384 {\n            limb0: 0x9f1c7dcdbe4574f05d0c093b,\n            limb1: 0xcde395f3ee4e353cf25a2e21,\n            limb2: 0x6a44c4a6d642c3dd98128703,\n            limb3: 0x2bd32fdfe26d866771e2180,\n        },\n        y1: u384 {\n            limb0: 0x7060005397ea11f7e9a26050,\n            limb1: 0xeb8540654b533da9b594fc27,\n            limb2: 0xfc83cf9d283b7231df1db3f9,\n            limb3: 0x7ff9623d918ca12e0ff6cce,\n        },\n    };\n\n    q0.assert_on_curve_excluding_infinity(1);\n    let (tmp0) = miller_loop_bls12_381_tower(p0, q0);\n    let (res) = run_BLS12_381_E12T_MUL_circuit(tmp0, res);\n    let p1: G1Point = G1Point {\n        x: u384 {\n            limb0: 0xe4f817e54aede0613c17035c,\n            limb1: 0xdff1f15010392a6da1f95a6,\n            limb2: 0xbed78d3d341e911d49f15454,\n            limb3: 0x18154782ce0913b21588066d,\n        },\n        y: u384 {\n            limb0: 0x3d77d61326ef5a9a5a681757,\n            limb1: 0xd3070afd4f0e121de7fcee60,\n            limb2: 0xdf9ef4088763fe611fb85858,\n            limb3: 0x11a612bdd0bc09562856a70,\n        },\n    };\n\n    p1.assert_on_curve_excluding_infinity(1);\n    let q1: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0x30d2fddc2fa171cdd4d31a55,\n            limb1: 0x92fab4f255a20d09700542e5,\n            limb2: 0x4d92a8c02d22b8cea4ff21ab,\n            limb3: 0x120a838699abaae7ed948194,\n        },\n        x1: u384 {\n            limb0: 0x51cd5fdc71cf4557ef606935,\n            limb1: 0x92e1b13e2c93fc9957b17841,\n            limb2: 0x6143a906b63b7f3476ad6819,\n            limb3: 0x158186f6f2dd04cfa4e78547,\n        },\n        y0: u384 {\n            limb0: 0x9f1c7dcdbe4574f05d0c093b,\n            limb1: 0xcde395f3ee4e353cf25a2e21,\n            limb2: 0x6a44c4a6d642c3dd98128703,\n            limb3: 0x2bd32fdfe26d866771e2180,\n        },\n        y1: u384 {\n            limb0: 0x7060005397ea11f7e9a26050,\n            limb1: 0xeb8540654b533da9b594fc27,\n            limb2: 0xfc83cf9d283b7231df1db3f9,\n            limb3: 0x7ff9623d918ca12e0ff6cce,\n        },\n    };\n\n    q1.assert_on_curve_excluding_infinity(1);\n    let (tmp1) = miller_loop_bls12_381_tower(p1, q1);\n    let (res) = run_BLS12_381_E12T_MUL_circuit(tmp1, res);\n    let p2: G1Point = G1Point {\n        x: u384 {\n            limb0: 0x6b2dbb412523879f8e3a96a0,\n            limb1: 0x6daa411c3d8c33de611bc2fe,\n            limb2: 0x38ff9a4921f13749974e4731,\n            limb3: 0x2b2fcedd1d05f99449b4884,\n        },\n        y: u384 {\n            limb0: 0x845744e5af99690d2a360ec2,\n            limb1: 0x56b0c0147f0ee90a5c1b6e41,\n            limb2: 0xdee769045aef4994aab4b4fc,\n            limb3: 0x32b985c03cd5519d41d0cbb,\n        },\n    };\n\n    p2.assert_on_curve_excluding_infinity(1);\n    let q2: G2Point = G2Point {\n        x0: u384 {\n            limb0: 0x30d2fddc2fa171cdd4d31a55,\n            limb1: 0x92fab4f255a20d09700542e5,\n            limb2: 0x4d92a8c02d22b8cea4ff21ab,\n            limb3: 0x120a838699abaae7ed948194,\n        },\n        x1: u384 {\n            limb0: 0x51cd5fdc71cf4557ef606935,\n            limb1: 0x92e1b13e2c93fc9957b17841,\n            limb2: 0x6143a906b63b7f3476ad6819,\n            limb3: 0x158186f6f2dd04cfa4e78547,\n        },\n        y0: u384 {\n            limb0: 0x9f1c7dcdbe4574f05d0c093b,\n            limb1: 0xcde395f3ee4e353cf25a2e21,\n            limb2: 0x6a44c4a6d642c3dd98128703,\n            limb3: 0x2bd32fdfe26d866771e2180,\n        },\n        y1: u384 {\n            limb0: 0x7060005397ea11f7e9a26050,\n            limb1: 0xeb8540654b533da9b594fc27,\n            limb2: 0xfc83cf9d283b7231df1db3f9,\n            limb3: 0x7ff9623d918ca12e0ff6cce,\n        },\n    };\n\n    q2.assert_on_curve_excluding_infinity(1);\n    let (tmp2) = miller_loop_bls12_381_tower(p2, q2);\n    let (res) = run_BLS12_381_E12T_MUL_circuit(tmp2, res);\n    let final = final_exp_bls12_381_tower(res);\n    assert_eq!(\n        final,\n        E12T {\n            c0b0a0: u384 { limb0: 0x1, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b0a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b1a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b1a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b2a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c0b2a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b0a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b0a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b1a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b1a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b2a0: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n            c1b2a1: u384 { limb0: 0x0, limb1: 0x0, limb2: 0x0, limb3: 0x0 },\n        },\n    );\n}\n\n\n#[test]\nfn test_tower_final_exp_BN254() {\n    let input = E12T {\n        c0b0a0: u384 {\n            limb0: 0x9558867f5ba91faf7a024204,\n            limb1: 0x37ebdcd9e87a1613e443df78,\n            limb2: 0x8e9dc4681332876,\n            limb3: 0x0,\n        },\n        c0b0a1: u384 {\n            limb0: 0xfb97d43588561712e8e5216a,\n            limb1: 0x9a164106cf6a659eb4862b21,\n            limb2: 0x967d0cae6f4590b,\n            limb3: 0x0,\n        },\n        c0b1a0: u384 {\n            limb0: 0xbad640fb19488dec4f65d4d9,\n            limb1: 0xd9b8a714e61a441c12e0c8b2,\n            limb2: 0x1521f387af19922a,\n            limb3: 0x0,\n        },\n        c0b1a1: u384 {\n            limb0: 0x19c78df48f4ff31e78de5857,\n            limb1: 0x50f244556f25e2a25a921187,\n            limb2: 0x28fcb26f9c6316b9,\n            limb3: 0x0,\n        },\n        c0b2a0: u384 {\n            limb0: 0xf77383c13458a748e9bb17bc,\n            limb1: 0x71545a137a1d50068d723104,\n            limb2: 0x215ddba6dd84f39e,\n            limb3: 0x0,\n        },\n        c0b2a1: u384 {\n            limb0: 0xce164dba0ff18e0242af9fc3,\n            limb1: 0xea7e9d498c778ea6eb2083e6,\n            limb2: 0x5f82a8f03983ca8,\n            limb3: 0x0,\n        },\n        c1b0a0: u384 {\n            limb0: 0x66194cb1d71037d1b83e90ec,\n            limb1: 0xc8f8e3d0d3290a4cb5d32b16,\n            limb2: 0x28045af9ab0c1681,\n            limb3: 0x0,\n        },\n        c1b0a1: u384 {\n            limb0: 0x7e5b1e7f9ca5499d004ae545,\n            limb1: 0x55485822de1b372ad3fbf47a,\n            limb2: 0x2ebce25e3e70f16a,\n            limb3: 0x0,\n        },\n        c1b1a0: u384 {\n            limb0: 0xded733e8b421eaeb534097ca,\n            limb1: 0xeac1c14f30e9c5cc101fbccc,\n            limb2: 0xe30658b9148624f,\n            limb3: 0x0,\n        },\n        c1b1a1: u384 {\n            limb0: 0xf7b0b7d2cda8056c3d15eef7,\n            limb1: 0x8b0163c1cd9d2b7d247a8333,\n            limb2: 0x5d67b7072ae2244,\n            limb3: 0x0,\n        },\n        c1b2a0: u384 {\n            limb0: 0x51ef1922fe43c49e149818d1,\n            limb1: 0xff7b118e820865d6e005b860,\n            limb2: 0x1f507980eece328b,\n            limb3: 0x0,\n        },\n        c1b2a1: u384 {\n            limb0: 0x8d1fd9b74d2b9deb1beb3711,\n            limb1: 0x1ff39849b4e1357d4a84eb03,\n            limb2: 0x154bc8ce8c25166a,\n            limb3: 0x0,\n        },\n    };\n\n    let res = final_exp_bn254_tower(input);\n    assert_eq!(\n        res,\n        E12T {\n            c0b0a0: u384 {\n                limb0: 0xdbc3eb4cffd298b3fa7d5a31,\n                limb1: 0x9c46ca08e6740e40f6588c03,\n                limb2: 0x1e656501517e97b6,\n                limb3: 0x0,\n            },\n            c0b0a1: u384 {\n                limb0: 0x5c5f9021ddc05b4e8e458180,\n                limb1: 0xfc9ac0db94ad84f883101197,\n                limb2: 0x10d35fc577ab954a,\n                limb3: 0x0,\n            },\n            c0b1a0: u384 {\n                limb0: 0x8338823c5e5ac5cd9c54b10c,\n                limb1: 0x1749d62236197afa5b52b1b2,\n                limb2: 0xc2fb8c574d4a2aa,\n                limb3: 0x0,\n            },\n            c0b1a1: u384 {\n                limb0: 0x3fed1e7b4d562acb92ab1a7c,\n                limb1: 0x215c21048e64e6366563b7bd,\n                limb2: 0x56befad9198c47f,\n                limb3: 0x0,\n            },\n            c0b2a0: u384 {\n                limb0: 0x2e357f74fb161fde82246aaf,\n                limb1: 0x30461114e53b7faeeabde969,\n                limb2: 0x160bd4f153a876cc,\n                limb3: 0x0,\n            },\n            c0b2a1: u384 {\n                limb0: 0x9953d9fc7152b696a117f008,\n                limb1: 0x3260659f2890ee7e7fef447,\n                limb2: 0x2c09cd97bcdf915f,\n                limb3: 0x0,\n            },\n            c1b0a0: u384 {\n                limb0: 0x68db7596dac15cee7f675e5b,\n                limb1: 0xd64fc7fa279a306f05a4f7bb,\n                limb2: 0x1badb5f4113cf175,\n                limb3: 0x0,\n            },\n            c1b0a1: u384 {\n                limb0: 0xd43446d44724e68a5d3e0ce0,\n                limb1: 0x1ad7eb734406471bac65ff96,\n                limb2: 0x15027bc7d1c7191b,\n                limb3: 0x0,\n            },\n            c1b1a0: u384 {\n                limb0: 0x75668ecaf7e92d7d38d72226,\n                limb1: 0x2f055eefa07fed95961aa90e,\n                limb2: 0x231ea84923202c33,\n                limb3: 0x0,\n            },\n            c1b1a1: u384 {\n                limb0: 0x5d2ac3131b5214c54a04b4ca,\n                limb1: 0x5a879571728f9d6a335a11b6,\n                limb2: 0x1a88b1de9b27f1fe,\n                limb3: 0x0,\n            },\n            c1b2a0: u384 {\n                limb0: 0x1c3137fb1e4efedec89693d5,\n                limb1: 0x90787e810e0d14fcd37605c5,\n                limb2: 0x27a6e50c674c3d45,\n                limb3: 0x0,\n            },\n            c1b2a1: u384 {\n                limb0: 0x36b1cc116e2ac5e8f8918e00,\n                limb1: 0xcb7e94a03ed3261502d9cf46,\n                limb2: 0xbec9af879f51f8,\n                limb3: 0x0,\n            },\n        },\n    );\n}\n\n\n#[test]\nfn test_tower_final_exp_BLS12_381() {\n    let input = E12T {\n        c0b0a0: u384 {\n            limb0: 0x4da5e709d4713d60c8a70639,\n            limb1: 0x5ba91faf7a024204f7c1bd87,\n            limb2: 0xe87a1613e443df789558867f,\n            limb3: 0x474ee238133287637ebdcd9,\n        },\n        c0b0a1: u384 {\n            limb0: 0xc17c627923c6612f48268673,\n            limb1: 0xcca5a5a19e4d6e3c1846d424,\n            limb2: 0xe8e5216afcbd04c340212ef7,\n            limb3: 0x1690c564fb97d43588561712,\n        },\n        c0b1a0: u384 {\n            limb0: 0xe6f4590b9a164106cf6a659e,\n            limb1: 0x19488dec4f65d4d9259f4329,\n            limb2: 0xe61a441c12e0c8b2bad640fb,\n            limb3: 0xa90f9c3af19922ad9b8a714,\n        },\n        c0b1a1: u384 {\n            limb0: 0x19c78df48f4ff31e78de5857,\n            limb1: 0x50f244556f25e2a25a921187,\n            limb2: 0xe9bb17bca3f2c9bf9c6316b9,\n            limb3: 0x11ae4620f77383c13458a748,\n        },\n        c0b2a0: u384 {\n            limb0: 0xdd84f39e71545a137a1d5006,\n            limb1: 0xff18e0242af9fc385776e9a,\n            limb2: 0x8c778ea6eb2083e6ce164dba,\n            limb3: 0x2fc154703983ca8ea7e9d49,\n        },\n        c0b2a1: u384 {\n            limb0: 0x3e70f16a55485822de1b372a,\n            limb1: 0xb421eaeb534097cabaf3897a,\n            limb2: 0x30e9c5cc101fbcccded733e8,\n            limb3: 0x71832c59148624feac1c14f,\n        },\n        c1b0a0: u384 {\n            limb0: 0xeece328bff7b118e820865d6,\n            limb1: 0x4d2b9deb1beb37117d41e602,\n            limb2: 0xb4e1357d4a84eb038d1fd9b7,\n            limb3: 0xaa5e4678c25166a1ff39849,\n        },\n        c1b0a1: u384 {\n            limb0: 0x8a5006c1ec188efbd080e66e,\n            limb1: 0xcca74147f6be1f723405095c,\n            limb2: 0x966e12778c1745a79a6a5f92,\n            limb3: 0x2eea66d71eacd0549a3e80e,\n        },\n        c1b1a0: u384 {\n            limb0: 0x6288e1a5cc45782198a6416d,\n            limb1: 0x3dfabc08935ddd725129fb7c,\n            limb2: 0x307bf3262f1205544a5308cc,\n            limb3: 0x10e1c2b2fcd81b5d24bace4,\n        },\n        c1b1a1: u384 {\n            limb0: 0xa81ad477fb3675b89cdeb3e6,\n            limb1: 0x11af923d79fdef7c42930b33,\n            limb2: 0xc1f254b8adc0da7a16febaa0,\n            limb3: 0x4c91dc7e07405eb215663ab,\n        },\n        c1b2a0: u384 {\n            limb0: 0x151665705b7c709acb175a5a,\n            limb1: 0x1d878f9f9cdf5a865306f3f5,\n            limb2: 0xa1515607964a870c7c879b74,\n            limb3: 0x6179561d857010255d44936,\n        },\n        c1b2a1: u384 {\n            limb0: 0xbb42e0b20426465e3e37952d,\n            limb1: 0xb490b6081dfc83524562be7f,\n            limb2: 0xcb69ca385f3f563838701a14,\n            limb3: 0xda2ddc3552116dd2ba4b180,\n        },\n    };\n\n    let res = final_exp_bls12_381_tower(input);\n    assert_eq!(\n        res,\n        E12T {\n            c0b0a0: u384 {\n                limb0: 0xc47661ee2c6ec195b6465492,\n                limb1: 0x6923c966026d1a5202d2547f,\n                limb2: 0x3ca333e30f3750a593c5dd62,\n                limb3: 0x16211c8f3af6c885d6e7aae7,\n            },\n            c0b0a1: u384 {\n                limb0: 0x18ef376237b7b85323d0d503,\n                limb1: 0x6e98bbb5ebf752814d657668,\n                limb2: 0xf72474b60f257f5566c184d6,\n                limb3: 0x6298b60c51ccfdaa550d764,\n            },\n            c0b1a0: u384 {\n                limb0: 0x348c2c399e7bd6de56256576,\n                limb1: 0xf4a77fefb18543958b97e185,\n                limb2: 0x5d0aab75be4368260e7d2ed9,\n                limb3: 0x158469853e297d165ee80a77,\n            },\n            c0b1a1: u384 {\n                limb0: 0x72f3c5aec1469c18e1fdbce1,\n                limb1: 0x51ddbb4388643f1a6efaf631,\n                limb2: 0x34f1e1e014398ac114bd5c0,\n                limb3: 0x10e831545a67da3f9fdf361a,\n            },\n            c0b2a0: u384 {\n                limb0: 0xf0e118cc2ee8a943979abc0c,\n                limb1: 0x6e7b8556c21ea7bb63547b6d,\n                limb2: 0x4479c64648fd5135f004569a,\n                limb3: 0x9c3267b433303abded9ab0,\n            },\n            c0b2a1: u384 {\n                limb0: 0xe5fa5528617a7773128a3a1f,\n                limb1: 0x6be496fac02353edcae1c79e,\n                limb2: 0x4f9bbd2d6d5199cbf179da1f,\n                limb3: 0x17f02c9ce45af7421efccde,\n            },\n            c1b0a0: u384 {\n                limb0: 0xd2192367be40c767eecd94f0,\n                limb1: 0x5a094323a3c2b121fc6db025,\n                limb2: 0xe70f56b994092e1f7d106f54,\n                limb3: 0x12ac5958b941614ac10d5ff6,\n            },\n            c1b0a1: u384 {\n                limb0: 0x96dcae9f5d11d83ff8ee58e0,\n                limb1: 0x1539f36298c543196ff7521,\n                limb2: 0xf4f41990abca0c681a3221f6,\n                limb3: 0x11aa8e62757ec2cbf6c16ffc,\n            },\n            c1b1a0: u384 {\n                limb0: 0xffb243b8fb10435f6ea824db,\n                limb1: 0x1bda384d4058fd317cf9270f,\n                limb2: 0x3f176c05329fa1b37897428a,\n                limb3: 0x9ffc940d1185cb35015aa48,\n            },\n            c1b1a1: u384 {\n                limb0: 0x74d71b12604949416f2e7fad,\n                limb1: 0x84b612cd1cafbc9b8af3e707,\n                limb2: 0xe4855dd3d16e5ae18223225e,\n                limb3: 0x801946300201b84e305ee6,\n            },\n            c1b2a0: u384 {\n                limb0: 0xbb3b943ceffbff6187a09c3a,\n                limb1: 0x8c71050ce550d5e89695deb2,\n                limb2: 0x2fd70aa73c133a3e0e483ef2,\n                limb3: 0x7f835c51a9434870d20cedf,\n            },\n            c1b2a1: u384 {\n                limb0: 0xcb5beb0bdcff8c233260205d,\n                limb1: 0x987fe621d66e1a6dca01005b,\n                limb2: 0xf19f8ff647ec05851ed472a9,\n                limb3: 0x9f783e3dcba8af017c07469,\n            },\n        },\n    );\n}\n\n"
  },
  {
    "path": "src/src/tests/calldata_tests.cairo",
    "content": "use crate::utils::calldata::deserialize_full_proof_with_hints_bls12_381;\n\n\n#[test]\nfn test_deserialize_full_proof_with_hints_bls12_381() {\n    // garaga calldata --system groth16 --proof\n    // hydra/garaga/starknet/groth16_contract_generator/examples/proof_bls.json --vk\n    // hydra/garaga/starknet/groth16_contract_generator/examples/vk_bls.json --format array\n    let mut serialized = array![\n        77971247423532365748231213480, 68566630218281092565267874044, 69218241659544231899447836734,\n        5210713370446757553310648104, 29975532048713345346728513874, 60131236376572367113577691315,\n        66829595643973230840624156168, 851093425154653346347584866, 36988298159079040949455438986,\n        57841331206497126486942833902, 78394969930433492883730279315, 5168616600757658063044848131,\n        71996036696940156226136278626, 39908840363606579425569960997, 37427347626246260567577938253,\n        7711402467582346430323174384, 61866231490764965852336666920, 1485446282956182122235189114,\n        24505774892507781812596026670, 166936301920675049843325984, 14142961460712467494187312601,\n        59336570766763966042896958993, 33125257106653746636063844303, 6336617002331687822928929267,\n        76208108071419754504567488535, 67522218240854508687713598507, 60778260558056083193758028786,\n        6994315738203844514307689821, 39109476850504384255101416373, 4563203902324250838004362280,\n        74008827421754500938243422144, 4588649057457317000305384776, 1,\n        162188267535021012914933874695527094689, 74351682113781394910510902205804837421,\n        32194719649307445341132812807, 7279752730359835541367473802, 47710710288577935245284447693,\n        1419950009495443211853955399, 3647836096884217263029835403, 56321839293630983331949256555,\n        48457408484169336698114154298, 4033250274037303739812601995, 37791419294239366654696089744,\n        70998552777774589024396988311, 39915671134059625140321314026, 3809343904542700736033250473,\n        33829996627126998929524224821, 61676065104950018712089150876, 68439794587965551511766573689,\n        2865007045925431983911439426, 27112224452789409282270111183, 66906936443170431587936776481,\n        29509391152443426525913329789, 2942044231372461502017727018, 31524594061511080573222581436,\n        14986353866705479312904394863, 71972723636501966110222074452, 5344092690743570953559106774,\n        4765507480019605351198077835, 14908496520367678240933103306, 24908591596218651556279785125,\n        3944092145422224742714103693, 8429801903301466479642247085, 16057780532905072011846247931,\n        17399093308238050206590708045, 5139994617788050452861167220, 73754063866928330632151581570,\n        73714290802177719414194343911, 22445364163983035216803177788, 6366889707934883191084004393,\n        3491039030479184294747549822, 51732121100147969073250799890, 27386944946323904500348273181,\n        4385913456436807188041388171, 63406929780934892902085432865, 13024244925354710667504340948,\n        9818759060015048768231121209, 3940387827675730450538662159, 9498746512908964047922834279,\n        53170642112366515401625025220, 54395118314665947463893798725, 1288128069358204676876048440,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43248345015923410511418527918,\n        2339359598397411241327981188, 73890304341590518017447068133, 6484088522357121612563628351,\n        0, 0, 0, 0, 35, 30027838756051553592474048858, 54101158246873281893268851782,\n        16252313257754462986798756494, 6730039006201148461101016722, 59166942355452517793514621311,\n        29611964699459785437591579035, 8519817219883889074793807703, 5634861121456970087752773730,\n        31628006324283734577903836259, 10539101379075759086036605267, 14510051136041346261035086002,\n        1788279434461014558870064366, 50538859019818205318127166575, 24101814558253546467372316153,\n        36861647121021098091587437350, 2109509723737426726090214104, 50995296157422730826447535567,\n        34115639409343349990007173687, 39889791167462707668956600355, 7139454304258571058057145968,\n        5677486451271889915150751900, 49381072058996141057339648450, 45236818714965917096073435257,\n        5410014512167636985502543724, 52851369230184844446011095835, 26956742559940204615504752861,\n        10586594386753721807366226964, 5285237918858329369750056736, 72491064846101162851502169694,\n        16357430162813483087252302988, 2776322324062868736865069294, 7691450961040902460162854352,\n        28070630466005464928724117413, 64187001067926917335528887714, 46788419336828522044462049855,\n        4382033612830061984319085754, 8034583862966778503247220961, 56096742313325232975868774585,\n        68585550580565240665212971182, 4476353455202817151691083445, 310085044230562831031036615,\n        60617887746516426241306123887, 37826463078236280791329443240, 1011833944445122731301232013,\n        9746904122117636655601728898, 27966741000383526869167288219, 21209996526299107239973360442,\n        3103923575483653836603642308, 72934753446937741447647845012, 47190295587938652246440505693,\n        63247625434314253446260470906, 4162213667224368104349214158, 44116566986492106261260643145,\n        36663164458555541551023132397, 21443211471927538917929059805, 29364840375223351024347720,\n        69133722904601054637541361174, 5824483258086841476910730082, 68503634142372854073292211203,\n        1937841124855622741132428093, 16342922410047931143944537196, 65970020997323617011530981603,\n        35057865146334572145945070096, 3451750236012488220190472699, 4311306230156727887087261132,\n        8695412623966263837937733798, 77176357502616542704656042128, 6101454099849957954515297657,\n        26622917829487454213461225101, 58605703673705566057178169233, 33113413176132064837543231640,\n        995773979584154924305479998, 31053677400349199753754451188, 40713559952895299870148850462,\n        62418803868553690327027026698, 93382446560968940373702036, 37712776509346478393543844243,\n        49864030905083736886253329472, 50632088155738237480407451318, 4206148787912257087329709277,\n        63375650005341941504168657969, 29297861299097956601364333997, 33763825508232552291739922496,\n        1985797962564307174288266194, 66696036047918564881956507309, 77167968750690188742636584677,\n        65054228210931679861446554657, 285937451162313357308376487, 73651724253810292011419259430,\n        70485925834587700255097149228, 77910644048681279676827387407, 5794027271286644917142723998,\n        14033893853278077343078387793, 33280173313783426060203760416, 48372060495225247258877841260,\n        3603717336592238868900693842, 35456068715660483094487770530, 16554550064157054487441106354,\n        14326732948379501626951591875, 3698282433453704050453631894, 19146564924553830738333216240,\n        25020931864070774283275229299, 22211845828645492626018913178, 5083210263577039175223654275,\n        41952074144039335942222955181, 55663683689078188645088175554, 60496493342305037524741110278,\n        4304619539671921717172032133, 50858649693567842098042385967, 52165707910425217246618470427,\n        41339315330087377357294597117, 6539089028599035740094380703, 72053127906157009580161741600,\n        22157559310014076427322619430, 70125657965596091683801708562, 3022877841189616397537213489,\n        6934534485162623435238541802, 47165543872991109029877011528, 2566259322647998968241017753,\n        7067362300862537521110073710, 35413603792063749196537285749, 11933166219420367971739694184,\n        40765194826541066033934446797, 7129410806727453756625011822, 29662307088543837149206305134,\n        65727977531111266904340756978, 42496286358276282218467101201, 7747883663466642582384665508,\n        17669369957595764186984839002, 40677642819188609359029355170, 59164559721383814161088328323,\n        6448449646684808231497776519, 25619368862892179391009855646, 26381527199732177089152363916,\n        14850373154740658284833360333, 1076564188815688551187118834, 32887175812143566285910166960,\n        13249683844989241745607228921, 36456117534193488400480016588, 170141990863262138143052988,\n        61760824788503155462102203539, 67320570476006959596849012803, 7766127653453634897585163528,\n        5812689405665018357313789116, 28344794854282756958093754, 5269947778693928801263573956,\n        53963701928114333840090271243, 4234461668157274586969416989, 20644958011919486212644357036,\n        26027812993954453814277748447, 275941194480212844069522943, 3538313684263000688182076336,\n        32801747500662710107225666753, 72682974215035517456530493687, 11581356430328319373161672017,\n        4533402135467029581720881425, 44058220463589537079385810011, 9333160639543932900599272247,\n        34172223003063687035350629785, 4794543240810738112240156944, 66965669599092548335505382683,\n        7238580231678608477454713965, 594337166918393597453047263, 573384765934888290368105125,\n        5298611690427555842434593544, 72410071650016602831108419020, 62739255899796079018370306360,\n        7849113008352889379633423443, 25258471464787299307135994029, 55762491168129233861203453862,\n        34626239502635003182102731944, 4480270938899930929063085116, 38884223664535909069137747383,\n        60280836569594947747629168214, 32856950205705764745608993213, 2392129868089939474880361662,\n        37838992250108998686527194786, 37288434055699776877846613558, 7949422721057160329636737842,\n        8036696326455776379012768983, 827077001344265445859285175, 13012960033941055488017688611,\n        25173972490487079546640335690, 1925414097850431151291670446, 58595610619929099032787293815,\n        59496529594755496148283316365, 13875217823643943649398141619, 7372094443240058558285115189,\n        15308212201423385157221091191, 32595930911053677946031331419, 61379406643649190572985248884,\n        2996375498768731539234628958, 46936883038348260351614004847, 75148696570210889440602146167,\n        25106178939001538254192127116, 7167710891023322575832224224, 100723146502372083165311896,\n        55751937316279468177742802836, 13871905808263810908577369544, 3737876825512892199597660458,\n        63816212289840684036461122375, 17733810278901303208048721488, 3351835079747659573922533568,\n        3046359189407291089286136161, 13044104993142686637496395172, 9282845231912569956252516712,\n        5761562488028695340583952910, 5921232933352375862448457265, 21518340125394465148399554843,\n        5982470152449697525125353289, 57053181264227943937678085503, 6292711021140480762840428167,\n        20076579190065982979764971926, 53780374660066758165656920782, 36805613003594702952829511499,\n        6547759856425411111890981980, 47512071241281773216035110875, 56022529648726063889428729621,\n        30858618567768404792580768416, 5757919197631638054742627364, 15669019961284650462106553953,\n        66639617563672338978768140574, 8082266105417603982291825844, 4564626181978619405084267045,\n        26009201212564438460739797336, 64572665731556470248113629014, 59252263505414064169597193741,\n        7883562242748919475083180284, 56470253812221414253305276776, 4498045693294739345032368018,\n        8301015289726367266397191053, 5348409005514905968887450762, 51387389277124520529090934476,\n        56941222593669910106396786388, 42622730933944117660047364473, 173196935167601629026012489,\n        41345835421790350935003416835, 21667287315177218504729214260, 22489091250914396077676341317,\n        2742300185381864076197017486, 47167411505437997622504473369, 38171590942991972995898002181,\n        45230515905390045720039559055, 6190428625729966894895772964, 22421896522252105799597726706,\n        22767691098362212992825587837, 8272539897093289253906939946, 6624376755118367265034331918,\n        15661111081153176052555263530, 76520770728514633564622590654, 7514263970502628885483842834,\n        4161399108172689732299496968, 60499668660768151028227772386, 47180509148512048563055856732,\n        54947867068696841243448279979, 3892308014696337859766042527, 52579604138530131332831897276,\n        23848195015190911842220533856, 23144083113629883183090117996, 8039822788758490597926641553,\n        29984552573156797877940033032, 66562098176719407889244652079, 49437533671009460826493634846,\n        1156205892955632813090181532, 50340753975243539886466578963, 71600268508272898437620580476,\n        7749173236713132109818996799, 937217378878921200898898681, 61530787830163118334408183838,\n        46718403155930865835143965039, 3360479066512207989279511115, 1242095274119975861215890980,\n        25631398301122740779039338607, 8684240449838525915272645580, 56524280049856107750242803162,\n        447558878172142624222306080, 36697831213375122858015827821, 31628650890081021735794393291,\n        10505167761437020089256195553, 7979550648404801060728402084, 15222854946553811809213857382,\n        362368517711213651621254492, 74279206026608922070481420749, 3092794960790330037616934773,\n        71047308711017187045446833286, 48750249070047357381136640563, 7790155946834425688504778499,\n        3708264891132854036323403697, 56842018338849698060111848357, 50802117932022113483041384324,\n        37336874720048034806794350614, 4895588030745850609058601494, 15115777534288762562360003423,\n        57880827992436710768134894883, 78908802965706590657916340447, 1290804119042034420664915621,\n        75590233536273098476854528382, 77636907662155293244169600949, 33351005534815941322095884730,\n        1170478044630016756590912765, 10509912641747086730664610520, 22133964085404487253238919615,\n        20911161981958331544968806625, 6637212360591556329346544666, 73177486431845160137729883466,\n        44026662558935744568710650580, 14495791361037296145418236591, 5295181413216706710953951660,\n        68037346221445832564644846512, 60300435330735533486581728723, 33625526396640207342361775872,\n        7045784054069475782743166166, 59924021955096443019291797424, 11245715857680265690633355746,\n        62074117146746076415496043143, 6449638004223019640871772699, 23831108704622803002148189075,\n        55258494757818576261759340480, 43878401466933980305871450343, 51011497341785935180716406,\n        30236711454569494355448163050, 58281189425116526815714389572, 2650824469217319436473037935,\n        6177711757602291324489909454, 42321857842994798624832326055, 75062592133961958274086094500,\n        42630972474476375312971690647, 7822879903927915344780500810, 15270877324564499082516257218,\n        28304670718246938558626287080, 15177089762194746266155761435, 4323287471190366948611609135,\n        63529578509746165721467979416, 18684091350467491952671501580, 31801058421355694835986212594,\n        6167034365774045482528400881, 68187492780300056455073976993, 33736798874529518945031665359,\n        47114121371788285997810630643, 1501014936570666792373955430, 52041900751405202855029540034,\n        53399799398114617616917177467, 60599973595634520941119986919, 2471509822842938738154871328,\n        32930906669861914550471992850, 62459907696276343575769050930, 20973769229046719271897096677,\n        2216765118571989035021197653, 2444469515114379190117267117, 1593615121718257466706426841,\n        35200699556016095687892135576, 2025123411791789833882395552, 16837608098747876337971505429,\n        9017071291289141045978976272, 40652821268431873022960365718, 5957992888410817226660287072,\n        37300311417672933426256048528, 75917638299572906377644069694, 70536739359881221754063443648,\n        7340858359327208778779981552, 11093409205821450748648408933, 38585830861482896222093530158,\n        54170792296898185502622272969, 1346877905588929391750158895, 30696269915566471195120909262,\n        55530173509916245012994256678, 51697488410632794923205428700, 4385361327700098888857863882,\n        7478442493004130455880814380, 57470192341053200803877254389, 44233141764886973843416787445,\n        4627148621413194083359758027, 32470416808412418616335658410, 19715789860892330796109358945,\n        58600670889565152340643330729, 38164712154690634450460350, 9572753909158173136633883269,\n        59397895876836589909855646747, 49485505921090242276800948287, 1433743816046259638551369964,\n        22208809910595598502283304313, 26810099712011058097080267500, 56535210505227237217071136136,\n        5738256825149767963650869515, 37942602700947594161825950483, 2527860273039176414025701008,\n        34598424551400376889619841691, 2004299399674635239141912098, 57179841527777873233441150606,\n        62878085519407360815563731468, 59345469106849910581475320465, 3395334403266530602449977877,\n        10117251411206732658303264377, 22810493895674076366896510863, 54938126211464289763762282544,\n        6209015132996004403752243947, 6896155642293351607797683255, 63108443924953726899515307288,\n        29636751124222599189321690910, 5007235456804803077885075293, 58576233410791600617515833462,\n        12383688749840845605088023298, 21582798689876911995275140027, 421900104999151544997246484,\n        23926685495743689049607347005, 19188298000098357089737886993, 40453937398777810582476803280,\n        2643002570339911223448370193, 6902218623068530992109134156, 79110408071587025128757944463,\n        66007647577498342186247690738, 4928186256994335695446980557, 1053586193107435120194577293,\n        4321786709468376691869005657, 41118220338438369959484838696, 5451899238899767192385697375,\n        77707861581359676195259042580, 66874846464796293707670342079, 55015576382136489126629428626,\n        7465186542558750462337564016, 43919127541821056535296486231, 51086119772406614856178635862,\n        57614227244027104278058575056, 2701005355288941622474441680, 35659563140779643976746402067,\n        19225613912579408702412355208, 74769032093715755415961920118, 7367796381570513984292315602,\n        12332512853959473145696010197, 32862843041063193438202837637, 32555926040716524681024536859,\n        4543167046852320892161923933, 21570270237029720084908450527, 61319428376232904425905363976,\n        7188337897207955025248863773, 7353644398306746046201284117, 19147961767837133928532157144,\n        58632057793931142519448749925, 13151077578807166196696979291, 749628129226871373746552107,\n        47889370124980937447965596511, 36889787006777689854972369946, 12825736468238633184048375989,\n        4025224920561400495701050576, 61695831237722750750456526799, 14096012890956808627406409983,\n        54924240087595531592120419468, 1668015521666605703539863330, 63001231767956487367787152697,\n        36993905627445116468569302991, 70244001995775991219395482875, 3888677350578961294104557513,\n        27560913159461371436648821802, 57968214974510965961588009478, 68172750856178926541876979990,\n        6551603694095947465932822646, 60069425225524883161646020002, 30620811870008527524810233198,\n        22104282873713410129525303520, 6211829194275426404783328990, 47203612852457379943172159874,\n        78660393474497217621015559462, 23163234729202121451962096141, 3990413213471548193142233260,\n        14176896513277304339137699299, 43350905519129868463569945158, 32258473390503962845656421956,\n        4495515813044869824572796314, 50117859028814034199322760851, 4893566796594666124620650351,\n        36003246299541333366137064141, 2506340157917168943012639450, 40087125654745598011122668381,\n        72521426115674872416423668925, 53228566160901782773515914351, 6020868016867097223859386519,\n        11552146036223575832468601002, 62863555513398212891795545788, 49550261182503599966672535214,\n        441032065833442510814515264, 35700882222579625253103742918, 63259542829611034377084589542,\n        51222555645417832181260315547, 6208705469225124585110106374, 59347925002096645277625969819,\n        16099347358444960246399607247, 70121080253549453764522067970, 288509819528328823274714509,\n        28524683391338205570308547828, 6060914935282736155897510887, 65152016006116685450027022554,\n        4507592977334063580246146598, 64742588416344634786668165237, 37139047174998085844464007572,\n        75703358133982836983872846642, 2230901962785229393726300242, 16744409644381213700851045873,\n        55243968790310431950325242914, 66442797228837637650356905704, 932667172795866966417288118,\n        50048277616620645571940332464, 53207414961018849164875552601, 3734931238461097519386140759,\n        7850435637117549087955310166, 64538713991666482472565636572, 10185924500183202381214610142,\n        69596760191143493193649165071, 4464680104681501105481338855, 55228529312861734136732576499,\n        27867546798013737089683952227, 4148010261128211463338577713, 2078307967726869314004844840,\n        79033943338501838103926770529, 40907135521898580705325753790, 9526153234645939642619248228,\n        4052103842956369094946306493, 12480895153317466350436373002, 69883535836489094909415221138,\n        20987741728014481056464712963, 7129208000896903230012860206, 51208100182633173749631257292,\n        69176395624520824636740892815, 23479696282877929541658510975, 5283369300217105948869216085,\n        39419137741684870720661954463, 26198135770033597809184771139, 49301114166813678200369197380,\n        106767274894989460509358523, 61423000119926091049301807944, 3835701576275847581883728851,\n        62226893743200573589730519218, 3295694451341911469313936720, 37299871618170554548336444774,\n        58860076621284075843482753282, 41403697964044073021372728017, 739694273004429771580734356,\n        68567383455466550415424616503, 49726978207887644321659271274, 24169072215317942206944032330,\n        6144262048701641316092031599, 65979274232291901343705200595, 24053477315330997264623564221,\n        911053262565199814055775789, 5056376156992768528182474481, 32429423372909103399033668781,\n        20666944500770492575578752712, 55233615917788141387479418067, 6363163953313799557857270977,\n        36794541303589632153444858749, 43551694206121333946110534740, 44438555154363875159348259941,\n        7014883505703533420762221000, 7895319651597099005928734072, 76314170344906857245909474720,\n        49212582158600760960955464823, 4166561417178306508156125727, 34523631725264394594468331877,\n        12358440483671435961034629222, 49188011806891398603938073241, 2669959877213742953869840437,\n        52121931910412164258933444406, 19387280907093010244009431383, 3060661826370758197353498470,\n        7729298768743175493638432549, 52375200752330531126508359923, 7814239644658421996715334952,\n        13486826543358352031938246186, 1180206440622175292296681267, 47423328109294781705109400879,\n        37224688650990800439077870683, 50619844949847788182762742359, 234289386690392372496677064,\n        24822516268969423068144007068, 8676192756242455340896830974, 44424023484854292639160109139,\n        7520330869784748969251204995, 47027447109887956820397546558, 47952287250142395075074942791,\n        34702269642031399472961001348, 5272406340445671781254194380, 49002653750812487058194412402,\n        14189515943337095285455036035, 15594777859833512486122714453, 4575119918859572755328730785,\n        70667572542077992135744783734, 47931518937596671324910133738, 75149930960996312243986767410,\n        4931930589940708239429688709, 53888909917495276371051957910, 30254689805192687147224026623,\n        79124675839132139896587428915, 4665399039207455897522809723, 43969933827139894792391296397,\n        60721893884063623951088192623, 6832998928656789868139147596, 6341057381954365290740221107,\n        47547615846688881888539789063, 1597187503631053906407013570, 70529817558016860194132642626,\n        6281591102804816031003827628, 46804588257362599456845071391, 52180742308509094407719667301,\n        56157018841917044449401244421, 713805028033245250444279290, 63074414654665066431610736961,\n        70924954912677026606046086559, 18423433620356294627502817162, 3783333642658038195670859551,\n        34726647287110953644809676969, 53048029159587756480581917663, 49371483198087063361754908426,\n        3958493133881163148019374449, 73328974511424071664732962987, 79103331378031831535358812141,\n        44572501644392743585306892940, 6912995223036113470006096191, 72397913909313782932697216309,\n        36279637543965033892539960129, 54260721244570527763003141688, 1130505984659580498899897208,\n        48948441671997059202292767851, 78687020857518535838917734328, 21864902280038004944569043520,\n        3894008781385305260431476365, 26693949420975006721912234580, 33931157160750599146579788986,\n        73359293612452277074768179246, 4771051306902223733466117725, 31478408421776983581628051684,\n        73704779061508240798972114057, 18406339402953850435063690278, 4456541726440093425186251167,\n        24131850833636716475252975233, 58023647367857143964938957441, 36531175382223289401918027597,\n        4835347104138798746431561378, 34194263264879300706435841779, 25341196325130118124477100100,\n        63632880766207887878317934541, 1591280285792601412830392604, 35174264770386591892159063428,\n        15210719376018373635969713829, 63933591383979047010344476762, 1235651865271418123193105285,\n        66664090145363350527777166434, 33510588946402501353800056849, 51508945042542768848752634445,\n        11349950186235885035022820, 54441240230402789568837481356, 51617467771851481179299043535,\n        39698160865638708812321934696, 4115003290562156738589165653, 55662313630126984341604954539,\n        54568433470890282748101437846, 60047785989276458363201201048, 1871332627579000945430151212,\n        25008978972475971289584474872, 7957090116906922265001984660, 48257251238146685995098375475,\n        5682571893777405885524814301, 5319979159019651815194755387, 64938643244502276086071585724,\n        71443718379545620736644552789, 6343972408146499239294447762, 44411603833315453496988438312,\n        24629381206761819292516363598, 9960944947777546706873517798, 7289609385162930776977215615,\n        13236771400819019552681449350, 57128158527259609438490215362, 23566648289377613863977797460,\n        4655391629280433138709429400, 70421375518334181678525848488, 65565261894064879462176556473,\n        8875152260481080948394065172, 4002427658026702485758422672, 24129332213805361046093978475,\n        14694630628094025063749956951, 51786484659045963934936587896, 5956326526644152241760205494,\n        41339185168416912111961074032, 41473902249179974856489041372, 66705118553934319551354363130,\n        3840100462943874650020434382, 68151104952954154215194420867, 31803432075277113069022985827,\n        73262440130576443803446560946, 3750539396653714253142175583, 12062204684148180906586973409,\n        73748858396045179673262900931, 66855989872540047791771763868, 5344178217780099655971982188,\n        35902522755189301046992420962, 48196672551884195228232879484, 30200222050731679596081846193,\n        3380506235499974405983381389, 76760921922026120097486738903, 16177291366459199284695630998,\n        51286704543747517988670312498, 1614432411867339489603303019, 14764890264814636299333500260,\n        7267190588477583853813508919, 48335613504689232946911340191, 3719597349373111452826170793,\n        68287397276414940168756336806, 10735829461158517864885030495, 20088455873539725922369875867,\n        7247898390543313699644545019, 67593496427376753864339545945, 35779617903847381792215924133,\n        43185436168149622949150250218, 1536870322602783949810075911, 79089934764359252407750353955,\n        19100067334677852208179288818, 49147833990627819967395974560, 7133263439373553839195111742,\n        9034429335242996905074335258, 24110573461381644055888165844, 4351882227802499529071348483,\n        4187764228518782386110599333, 36940079339823793091314118357, 68002921560262211027627264381,\n        70937544992863141242010560964, 2004676793665162744447737175, 56735515803963123424806722187,\n        59991971713887647911858199390, 1765968087522342288445564344, 7626900568205763832886389430,\n        26157974971955720664455679790, 30906146864529970262285612389, 3505661151637249187556098562,\n        64589872946195118243935899, 60987943171734305522209246953, 11859781344490962880800321764,\n        5099739585235902484910184936, 5092726637124800870902367566, 77164491185124746659002908097,\n        7557394268218098333109909464, 56652593104913857580548712725, 2719260376570248598643524355,\n        14147405863190491490513178945, 4744616284389165439811047863, 19273106980030716005667704311,\n        2920367520843411911089479097, 75187879959085740765720067616, 11793479709481719262576646598,\n        55559010446300459805240298178, 2326396620363262873663106594, 49641849777288750686395777465,\n        1554148868725290990031772025, 52653719172610587047505091534, 1792003191002954972567101759,\n        2937066288062868253640724492, 65852858606786721122490841777, 24876120216578310434188392651,\n        2303776070757838336608115652, 35343710167441654147004198429, 59459890005073091311766479009,\n        63276783814016177162687693650, 5164066369473238516854645876, 33412244602938822639124389889,\n        69431925178283750485811767957, 76130502568103946940194797605, 3337891617925438254160570302,\n        4313930788702638770937674622, 39834804577732353950509563162, 23824100384272717298830268474,\n        370659842348319131914372421, 33525006046599749009292183549, 50806844257120604264100169703,\n        64816799202473431890323280253, 6286486899655800745773680447, 14096126968390557034601839748,\n        76168731695387377210762633792, 31755672355291238818462919729, 1364820500297519390042066220,\n        50966712027316799958131209303, 72126313200019759301895678823, 69496808351202675952540797659,\n        2973085798761279807248728399, 51262932594107243029246745517, 4835829402085974455989230573,\n        18600418370299690609656079430, 6741105510021350381862174668, 5766428207153539920378004487,\n        66976854393193827999622636893, 1796253414948670083289979436, 5842681502837107188987016298,\n        78350650073328357310735642816, 7459405170208280109817802536, 42950480827821794979342832131,\n        6050679913126654393421396200, 26974315874812646778206686765, 74253592459318364639561686993,\n        32279743267120378905314631765, 880106527360265616785136799, 31892667357610003473218571051,\n        15742610921929308127369015541, 69050953407284695677579678029, 2622883266983245218352159930,\n        48519703488668492889415476310, 27667559731546966903921049451, 11665329888055869766529323620,\n        5608925413750154485366937285, 57069011538281864283512955921, 17288342336006392053729890228,\n        57224971317160350805206188205, 2089188018400347436468308847, 13273689224995891035972765332,\n        1599651155376326347479857334, 53213806380442534216627001490, 1008189372127389936438600676,\n        61432096144179460556968271618, 19790184152939380901235777063, 72357705696325647452435841621,\n        6536459830846823300435099573, 12919483759578460669331334569, 58472648080731143327580950627,\n        14553824480595299370095285813, 5979759151317874476373563507, 70809916954375147149762042322,\n        42622500958994689383239645423, 47083634209957915176104292848, 5127606445581701002485440428,\n        73009609727466074924442341639, 48307782828952017980724212502, 74062586523989694656680696062,\n        7777867756662908008835227140, 59557729122833215643938094404, 14370884944994698736014464171,\n        41206569217598102680974304191, 7021017865995142522345157073, 16429334509466703847476461005,\n        44647348738623546424071062365, 27327953836183590891851090587, 5360858143403109429073297927,\n        52463088659549712053637105628, 64674263064987927072158370856, 35166671347577276097942720835,\n        6848309544546644639843914043, 49831473703460286373445640536, 62031855807478803364852436330,\n        4051326450395650742179043264, 588822488356827452733672780, 60878309648242227014530048695,\n        71136675850986940091992403800, 57298939440074352081267507956, 5921152746283898378565158356,\n        37778716037427177558866556013, 13823977452794933927402817904, 68155252455369147638002518837,\n        2009211036490542063322965042, 57287385075002031334336523780, 61991846912554166428547665587,\n        48080729362860486404556189793, 6050909615272918990699900698, 10165199715393992304186292186,\n        7435165746364075470335326497, 75424923021332657146863810264, 6752406765621654843924334709,\n        57162530546543572953296078218, 9232802719876436293385137627, 64592359921068921341901497275,\n        1504710175595182075705794636, 2765088708712613135711798999, 10541648327222443543409395269,\n        68586881864347362094546768128, 2875959990843272307549726074, 59068795357693294581656186952,\n        41075683849519086768141207126, 41783069423162958072613493797, 2486644955368670166095829693,\n        38698064291954889950609566, 617686573589646302680660620, 36806842984856617812209454609,\n        5772172132882767315611295649, 43122207868533312343983940548, 64192069402451601692678237374,\n        69007230247565397450126478655, 288598039940475262334552820, 25840502059668293749040851358,\n        55730475133898741325040860789, 46035247317502560912643932565, 3123627699924025592966355825,\n        17946599243073859443705940410, 69692434544573612852523159070, 55270919746471220721572455098,\n        4891601178834625792622708165, 1304326483617123795854833210, 27940211484893373627255333378,\n        37164847450336166385557401264, 5279878979459530058781504826, 4715333492760935318276663743,\n        64360039864334907980384705211, 15213098303812791703194631549, 4443205260883079496845534443,\n        42178254959429471820923153121, 42627034203456845012667580042, 34549859621573647565248790399,\n        1607013709487986067854467119, 24713920813379585209215171957, 34947869895448348760075958709,\n        20398085969562276297663739443, 4497496117855686608591627925, 65642396509339063447470252162,\n        51958322891070320905344176094, 53356092615283470215978282753, 5795507882228606523555569265,\n        61381117354884250352818429971, 77586652446402999359350174280, 59030550255077879682918655034,\n        4512003360238204173051505907, 50968433248094052175103851509, 10972699326111792122616474506,\n        77421284460326005681444712579, 6611553969431502413774360740, 67720852498012315538062755182,\n        62000067674072868879854789130, 31862408143045511219621588802, 2382988192232504726318747451,\n        64001503677910105372924827978, 35959375662987282321020312424, 11176499274479087509468535555,\n        131699368033483410059991331, 77458325587492436336047947691, 63419896531366545899413566583,\n        55518488706761527554795887207, 3574160575625377832706582801, 69672419758400166702593993562,\n        51783400285798519303181250795, 7777447636309048250771186755, 6778245906985264530568799420,\n        23724678757573504248853269557, 53158575210279661893951193458, 49505123838572745940025168110,\n        6821765416731099475222962225, 70416530680724964762976778585, 11630259774114850854604064698,\n        70086193137126065257547996498, 1758658780430020399428014867, 42574547673809884975945981445,\n        63396458136673329222696717930, 13846015426629849896859247333, 3339556394711807629779362334,\n        31781051552324736936456252664, 45611384025461071988165970339, 8086346118465515446411954439,\n        7407391238619454801719291274, 57355293852749153854904735328, 17738194997585182774428248794,\n        42979156704757230879140471483, 1337063892112511176289001438, 1007495712458249500606327031,\n        65243575552736979906232611852, 51157257685563209540772327447, 1984095853911792538773346076,\n        55616883595526800439829906729, 12342115663804998085951027805, 75894363678189995911682013518,\n        4032638648100176424502527217, 26001300838081501293210517652, 78810918472946027279749452032,\n        3446736312504960345966149188, 618976503544868083511371388, 9060657806461788511848499035,\n        18113446745121681701656466950, 74709795540999949055038768352, 2611886565404968140827323071,\n        28104870632436054067144640382, 54687145360229752490360986758, 66827381151878701282619531089,\n        4406583573717425557085607342, 55043360061446929619112205266, 77668385262136639305873057588,\n        68012546818512935592739160660, 6599361251263630842895956231, 33832504916706341817478697401,\n        46291966377288089175587650380, 33980583779770110062591928201, 1990226132008350026562878280,\n        31574626629582059011363563953, 13635571232742231691640590292, 33158364802795479142189157265,\n        4828324889455591787564274411, 17535037855892814653994147271, 20058923716022727602161269624,\n        17965304158922622822371532036, 3437724273501538515813973656, 5220329545171532114453860688,\n        43149560117134015660036973156, 77768760376940006554501816092, 1560641474828953350618248150,\n        49772354542680213329364161531, 10186718009711474772536285464, 77238697002232050997683508980,\n        3768784510358097156808588419, 60313870131660341747914054935, 2737593067669786014995952971,\n        71114833240771828878461290615, 5582034700355973553501527194, 32428914664109601732106993331,\n        12644252551235508049763570571, 32235832766126530373362996949, 3579392766767924136122105858,\n        26436016027875746601335420197, 28400568183586126780487789998, 40069374804302449594302545304,\n        5942004056200041491247449089, 56677726280248516116610262997, 8083019231537342525176389160,\n        71108519020278109402233138629, 7640651636624409037446070506, 62625648703470528044106777444,\n        8573897220413372044668896719, 32424961759343376875946757947, 4035726646661086128176689808,\n        4581909083445845684417286160, 33492967701254852330376186937, 65840342692211093198609557093,\n        2817452449465778677742087267, 13114958703162729716128072069, 13669381091054403618604230447,\n        42580609566336668909554031313, 6774242679859832243781246616, 9895387497564933011984618804,\n        73733921755884084444627331637, 5719780092358981497498631560, 7958268352957165391035571795,\n        74139835533605485947854274690, 49928791077337063484670643897, 58099619086346814728372753431,\n        1146756898805037830387038279, 3054468717560843589634303623, 742973120951618748167502777,\n        54693244994833183215153363857, 712374248268113212243058944, 21900319248305098099176017563,\n        34753741121713052921498103470, 62855666892853422266070391693, 3520180218554612705778139279,\n        20545248296462811957342431994, 1086208826407783581132064164, 63829050164887523802980679793,\n        2239699351573858731612767881, 10510884088677399352465376223, 65872785479848895113212254890,\n        74530510286524659923214657527, 165591837595344844721608765, 67445823819940957958131292292,\n        9067613173788365667376354239, 39898309519633019184442266614, 7197562398390026648320130226,\n        22401388610763922844725963254, 71848841418173962748110876738, 20853769040755743534931528220,\n        1729462624269424252463262417, 10690116855626646489042826241, 28851766118161729849414225451,\n        50093965520599608378564849787, 4937509564575665846919809456, 14893059938262461155602639929,\n        54649418109339915539580493866, 49602276349062797137475581365, 3303129251476821872384850312,\n        4605736969133232196516935300, 12649665587015950479974977497, 66993153972993440233736465915,\n        2332813691977292035128943549, 50059248894297640017291628371, 73926617083839669459021812147,\n        73707011449207209203240087017, 3943080403221213575829690506, 58583926686623467347050519359,\n        2745950976692498690655108754, 68628017127050096876626577307, 2038311385646063504641442085,\n        77281303315719493661004238461, 71014079461583021844718656776, 36985645918473975347261232173,\n        5601753096628627807241601239, 34335204382936982122815650234, 44655378179225359287281948510,\n        46110517666645847212965162251, 3776140837617677150853994117, 21459856318267971300627885381,\n        31745109944971358940424143555, 24660534133536600858508517795, 4601943352971946800491761870,\n        16015718385828647436684121781, 46862312578221842081948535383, 56820596435483345269258247196,\n        38780825164957739803764182, 66630132986715194984012994311, 35542885872096341633520608925,\n        32494981052434762207930529379, 3909915731319864608805721624, 41144760195043080522562471177,\n        77443500903802878169210491197, 20290899958132242160159859577, 5400131778565579215618654350,\n        51030893304994402097060654017, 30003756502955825266116641188, 36638046942398940070832719265,\n        6838758091455912386063709233, 20446507430349648310920066026, 55099055067317898375636952109,\n        47287287690799511385922507535, 6440581987154883286897660150, 56544227315405679784505551888,\n        68521080039099228123811716217, 11883625069340275270211624345, 529414625845451057546960825,\n        43768868073121938847187752134, 70823817269398922154026515307, 54773748440281546854025286869,\n        263440217610563024379414639, 419315345844854050309579563, 52767063291503661900485153895,\n        75095310528229039511405007783, 5470510498301762510085114502, 43419626036644518021751079298,\n        48825108719944268854360740942, 11937139940217452636117172545, 922423178666560794182430461,\n        32231858607265970628638643905, 78817736055747559269229886371, 27308872962103991636206567217,\n        4228237623032271891603635127, 45154499047018327863026707233, 40797821102671142764554345672,\n        61695559890360431477191112817, 813077244531636479855087784, 71409658479442892951253950920,\n        35073610158058113023788752287, 23634250214170899770433381421, 6453163343594193687194125001,\n        44067460666702446403354124, 52720120567775761149591550937, 25600044481140266836769985935,\n        6478021601028584188834558030, 38083351210275630438054776030, 46610101620577710353191668064,\n        53889567793435001656750700637, 5389122893158458685707275512, 72450273097109485147088821330,\n        17232366887626586741177523789, 24140511581167074692941817402, 1145954671193807618352049555,\n        6392432165864826946735921221, 33388533391088073407784470271, 7222036367563667407682996626,\n        5298205191728933693443000385, 22609933760619970882647592018, 52503192645522673943821415021,\n        74247656491318970322256050692, 975988721683014372187781097, 62910543686645521696183470812,\n        61413168785921710629967294890, 55975782389961742805061380902, 2512465647614165105457685749,\n        39720863631497607290777189, 16609069296328749855938649541, 57120516272208300619127292405,\n        1963988715833336718657873514, 66348849301178717125882845547, 26061896183681054227612716301,\n        78360141719980111344704357251, 4293620864042213931833654443, 57403478491873699486529608580,\n        22405583288136848069452783675, 20530983627314307746554051912, 3291690265651152478876469729,\n        69607428639324492139189237317, 9918118695602444656242012183, 74112687948635895678350022925,\n        3730597912600903812564137994, 27649167265638358253014429498, 5358378731585711301910973895,\n        4108581923008231311889563138, 3428881697086601295210380662, 19649734304252372209581107481,\n        25057980709573227316821743228, 23296603295330099662809446347, 3295663710121858317492776138,\n        56653272914040430762541686724, 45204438723072110463053947499, 1967481027022321570327781064,\n        7164760637202241270987955081, 36172708366960597143934768288, 77585639880796437262658498458,\n        46243261497119834011959179393, 1643679813635229031218617215, 23743995866860270441568039262,\n        64102912337351786587630466692, 17369019086059592745361915380, 4918904120594348956263063373,\n        2523988036813926354410683386, 41257430407029791433456521048, 73196129096162632801179312154,\n        1143880680408001362264661917, 32195623022190543413428375697, 31030049161763952302223745036,\n        13503071893370970140898688918, 939917594949113938980429033, 52811882316400864453705338526,\n        2815286615841341143663457429, 41992545876615030799195817476, 1818481472437100653664691657,\n        34987691943414107968134744852, 40878801470062288314762248298, 55005697820460466671633894779,\n        6764685233443065517164397490, 79137524665127844464682568957, 15297186351819484478792032785,\n        24087156059087139417906163677, 5556016778993591697165639420, 16200903511171413487609584181,\n        30870253544145312022886336217, 26296489880647376114885834094, 3401412580056458052115504941,\n        17915414154629727586750206765, 67774848999585074196315058076, 15220972798896684984768384723,\n        2329777072247811645741631336, 36742934017992906746164876399, 7265831854207327421111099289,\n        20014651329844495389619549518, 7460667841389298953618829324, 22794349671985817609614005944,\n        23572212611610986511548237800, 71320424350678856466874421645, 7941172209436578575908653318,\n        5499984639108981829388731957, 52852804981679000924197542938, 14922036241730437756087936054,\n        96521867833115396474702337, 35403169172926574366305222973, 14420642188561375117886944280,\n        56907852012997764855810904811, 804005036742096544914802893, 34397447825967925984498641757,\n        77665859389825109045915683770, 41454079762234904500297784432, 4961647032331507187329670924,\n        77380570097195891066244149264, 75985620214896891825333397268, 13537883249188898383107375715,\n        6817133864511212498366745415, 38565639835003983751895836, 5388135464840096083713865046,\n        73079208967064900404190968610, 2168401541985350016536004704, 44331792313615495822089523746,\n        45228015122067175889013749854, 21291826705134395778131984195, 158817786977130603135972819,\n        78937151238428489313752454449, 47852829011551372777516068279, 56231973786443926868846519392,\n        970013318790119295476087699, 66725178863183197620370204142, 39131135066468106450845732685,\n        47309715496012417623698057241, 113265448674245540763942617, 2615732528173447746984356354,\n        31637152253735177259026595443, 17667418927364429160911210876, 5384257139527135367423313157,\n        2927733559426126489357703919, 45996109688963325876331313580, 37308602146515261785465678223,\n        3619601998642510821185236744, 49700123893072691024830229256, 31195539511323778278118125938,\n        24518740102054722009497506150, 345290004122793200958565085, 50311606249724371395846489843,\n        18287977436220244007032901982, 74160620075539302942013148324, 7778608160451970017294857039,\n        6379796592398156915836369417, 44868969698900743831040899164, 56796698225844745631732624047,\n        5040474255292116400606266315, 1155453101237490726964292903, 57723821429642422631781984957,\n        77942597047743092619042378902, 2650140955012459459827579312, 13388636687467698491604091834,\n        12330235428390297342985732601, 479971211624294725086179764, 420279034989139212955075921,\n        61501838956547927422319606941, 53697226978174870157454785705, 78206311853929228287189379757,\n        1262646840330366285138556365, 19792364398909804851416022304, 35186186211818003075676783740,\n        70008984979026718031891338970, 6870117216435495996800098082, 23423611029252176245034709149,\n        49059640829156436668544739175, 60861325491172325792820713981, 5002096035496660432994692393,\n        24539992314468884769924667573, 65995201699619382900680248097, 6375328264358795084797332711,\n        83632214262819946507498841, 20945964158832437453334676628, 10162910035574165168052231625,\n        20780541101648242166533793073, 6228484446721223719386620164, 25688620659294618951728173083,\n        64855233088252483204529593255, 51212506230171808156432848018, 8039311641308787010498509441,\n        38848685132122890414829582185, 70400282338174065197342744713, 2057145576813986050550970382,\n        3521460735344622493041619455, 36777408727014947738481614393, 23428702022065339443091040789,\n        65450096559657761187905698092, 5479757468067807993915876905, 66091376596739195194925267478,\n        60090394155296560628708983537, 11081125536383530458463230503, 4831532029357403488503298864,\n        63002198602282433919492096093, 50491262007579117667162941296, 51853643405753793018981801330,\n        1631071258714018251014592085, 15340012709609678578254712087, 21781225216135288631806926316,\n        72182920758203106611570060527, 2547872850143442774684331541, 75616566127235858162997442709,\n        52447530161257077313031234009, 76132503493569341060237569365, 126930751227008939941232438,\n        18221612743024186000223903186, 9901877825016811357542038891, 53886734601264135257532533301,\n        3197079857400242689429942861, 23357988387387192307327806081, 38576455061337411801829771271,\n        4658332176429907196457996351, 2252532177278711702692416668, 12204050214017207932762103846,\n        12957225015551734129220877642, 37519284047513204564058835932, 3727342192262660800883297275,\n        53128773532433853680677116654, 30598535758166493757895575993, 75255659677709333928390665421,\n        1295752185515089023111379423, 71998014491681310045420650777, 43242986272615679579633907924,\n        31598804946813437060658131839, 5140187780250210454368509967, 56686369375806058019376847645,\n        10735978527746931041711706636, 35269877803484595245653086850, 6275468727283328128222991023,\n        51113726952648489981268517765, 9131675114044160326329666126, 2652036813932860468456338238,\n        138347312785956000827003164, 54073288904655783638240970490, 36535136317031713874324393577,\n        24500919991591773574093995518, 7082584300517979306238687034, 44700836391407559287705076792,\n        22127749464885295834211752091, 49705459724296084486619515011, 6033508345494092819025038411,\n        58201136430380105046811470494, 56603346016848334041217437230, 51444909462204577598058844534,\n        4787966017207094853771683111, 34723032734996368331688696922, 35988226078044733732911630064,\n        57873948250585762640876027425, 7295918603225574426553572521, 74300390063782725584199322425,\n        76290572937038450314483714210, 66199656157205336430839356777, 4994474849695407675762824637,\n        24998822133757583982004722931, 59738097399408101286361900203, 27284442029434015536398842338,\n        4753012387375130020682397448, 40181555844209964641649455025, 73807997668374361537705962353,\n        55416681170176816867959440129, 7853567437740190513628097921, 22574140969975299320189475982,\n        36030772356694162951074232068, 36844614396816803657096810588, 3721630715395751264527173973,\n        8575277412439791895532785126, 33808970360207452577775049037, 10179898088334562113328562772,\n        3894634630293701680835880049, 2829641840354882715376606299, 55046456379595324305573921313,\n        61908504541849150463636733053, 3668933823929448729073653151, 3454811573890510037638485196,\n        15223276567699016690955341790, 51233285994134270409743850035, 5288791552749099157842839295,\n        12928044618889204464167470364, 61882333743347925090067385283, 16035154674495698726353024770,\n        7821232909086408256335935123, 19781382991465993766754254473, 39735755608718942643795998249,\n        42701532154681642931856399512, 7390187142611032603025084440, 57709543692432530758927673133,\n        41790403874013309940821045779, 59409920922052760174072706972, 2028074353963744831258094142,\n        18626042023178516160414689731, 26340691142186367706328132877, 74419148385451143701530302539,\n        7709802561430352689451013781, 23401141773496132509508935372, 68251899931694847129006922451,\n        8369080501910040330268302411, 4745143029867161526255219134, 10905570767412679720280037618,\n        25264149765886313250159150514, 46334599857447896670903170760, 3522933108246036992029970832,\n        34840160578207577665918358073, 47069374867957070988350983030, 59911598892298675458282900261,\n        1799569691127526516404343592, 48041798736446332161335570650, 6523209482320907397905463019,\n        48562549634441655693759140782, 2021572909204703367938645791, 49157649887187583372577123573,\n        12914270604240255295658487679, 47909464082672218664520492892, 977186176154142369512998041,\n        52432458160519067291109127235, 20139985850045880598931339879, 28391153932265829616910657377,\n        1917155728214362387794112812, 49907856608581995462519363567, 67308622951642606481802010814,\n        62017396281584102623188669698, 5406665524418610806319257513, 4334020903340659492689973973,\n        62708595377500444335721341309, 28351749961736128192845915853, 412540683073870586896916883,\n        18453329457008298679606348176, 31892783753562858776707768870, 16930474036344999136165815917,\n        6771817435866936430451785240, 26777095032085545061747283439, 69988319504100277226426572043,\n        7664258337008088055565707182, 1603078236012739893317807393, 48874198478203735279038227216,\n        28674946668287783618333308663, 45158794232697752524814989289, 111491677857059302242472051,\n        76742841162123068548132488826, 1427613579816606026745502988, 51377383104572637706143115784,\n        1187043648577596062616529798, 44001689212682430303086905767, 28448872384398522308739989171,\n        28225461909390354750519545939, 6343501096470810559201856886, 18650610314406046221539691299,\n        53156726602301634312358976395, 65731950520592927105673970550, 6589769835146985603718663456,\n        79116012777178517412401962242, 46153895774180913197806098721, 1621859782927758121978690046,\n        4710709632323947019158176758, 5603882919346817606792404775, 56898420608961791113682106778,\n        28522160877083391715617121065, 4405678069529122100100321219, 56891621628997791375601569669,\n        77388436951549194815491354160, 41454074574001043199061016212, 3735620113066552402358000225,\n        45757187740470657347781811445, 1993465267243524127680203734, 21844099709058409805503137081,\n        763007871069664479987169822, 71954468741987594673578299567, 15529822540426134812143309890,\n        24510539149738767951355265254, 1925066770800010170667074679, 76818283277495551585155220287,\n        52770368523908589185632582873, 7530205527034263491056222638, 7840665559774872594382369808,\n        30393187796009946619000627275, 40195936715542864797941423965, 54429792051118291031018131184,\n        844224739628446582631492082, 72542900238400306529861264186, 9760347851423872372435020632,\n        49644582701954152265109623450, 4372320622446800335960624865, 9455822816736114282915785299,\n        77474549593779357248452583763, 32959568992026965674418678110, 2647211828385677003549549946,\n        4173496134517854605134975358, 11414795704442402006252296348, 78647154787716830585881033380,\n        137290262090624202932262448, 72850622024021382817619671452, 50987527561781487473169224209,\n        55414606479067708732149778735, 5349025964929487316416066949, 71603654272716691861235267247,\n        65212014909960454576855921738, 46756013401355075076709782549, 1236809561924080500705073010,\n        18039339724163619011398110126, 59620412087130777769066780955, 6550882104282349709081151350,\n        6799934861809531242869508711, 37132319630173765004679159427, 1275730058144055754140472956,\n        16679093963139019840126830671, 6041459975942820774259567412, 36667725709264320141658706606,\n        57462809047973763587644779220, 61714746869769338916293441377, 4995020140076354005295896578,\n        39711527656155686751828805000, 61785470334744594838319088951, 9975747533533352729197279381,\n        5989967557280574787532063447, 20688339051488581561768106192, 60328826383283824290398796359,\n        71154871809075511074416130998, 675478839761961322159340433, 33935186420306002622319551570,\n        75650071675037333827499727639, 7978391470928213060547861402, 55229897326522455778577151,\n        5341363232463531648409618164, 4828813981589234029148700730, 17391825957729986968250489839,\n        6728939778814093150028581603, 68759666322420075904381308479, 63745526148382525316646186217,\n        6587167241272766633522681592, 7512842484572317262403448000, 71691906250804315260058274251,\n        22160977991607270792960555007, 74461720445039025630356520159, 7111288948743235820070879461,\n        64384284204592218680838426113, 54290651891501761279382499399, 58920686762254700488328005493,\n        5690102562593053951804362350, 72671979669695885127389166687, 3917098364426562043467829755,\n        30879331403071621185820121104, 3299557160250951397747581959, 33734520293259984621021768456,\n        22247617303580972379383123637, 57064457128121982288576938807, 7729329557670245500980121111,\n        17354970979125391548455335457, 42144218951768969120850558833, 11653720027700183604427347594,\n        950553603085270778976560560, 51517197863846271602443943087, 68726799395261570374862497622,\n        35300152692907580905476964352, 6929994638181078704120425638, 37616288574193235794440892560,\n        71337323622897422153624339189, 61791040319096322990455877510, 3907991303356398894544454121,\n        21636909569355359565771442253, 43048426297338813121594957461, 40538861026956853332103124614,\n        7924573068477480543999362796, 43780939195326928198099606819, 17760911997681000120987283723,\n        79001414550744121433700084461, 6473279825833230557398328121, 44073232209691244252351074665,\n        62715530708434665036435095442, 28808727381105276073494313745, 6894872971632851942397002962,\n        49218162033435703332324726850, 76892980589304011712615965932, 63743137676739485280227658560,\n        2758129353444927133229491833, 30682049436777618766050059286, 66104898373648169915303932340,\n        39599143153597424397398701513, 4722941368969259037631729675, 30920580508168487540467896345,\n        45985939018732626454781452643, 31362170661621610998496058500, 2655458178999222998344262026,\n        27759321959521580336995914024, 55643311922326059969051323107, 79016524687682117370833681096,\n        3652245498914180690702957441, 66387995740340845800365743122, 23850782478992075824609254378,\n        27644688107042638446980691176, 7251352189696564493074424815, 18922994830427180062320520161,\n        57460375473831887570039215560, 25317783527478725180058839357, 2967666455544655950687476640,\n        36833795296224305156121231564, 35175654147200484592801963226, 68576511938554066088113627757,\n        3815143819723157622804171891, 32420183186668328614678705960, 76971791924206157349199812130,\n        35029211973561312461522054006, 2659298902548053776616719971, 38178705022087104087895280199,\n        16491142366407870392745525780, 57471257290520324075928397801, 4644104179700536167148728521,\n        29377835816500910970998555635, 5490222456511355044671593417, 23163064843591028835795983864,\n        6670504722161960240531516398, 77913860937730890477034301602, 31596836924010321165035152101,\n        46200520805046091656143035270, 428693402328928798056554327, 70694224629462102885501367213,\n        30475084998968019261522587276, 15478690021513148253969947288, 7814279447346914064306280223,\n        6986467113613220958358912195, 17746542625444392163736271209, 23187568597672532035007180224,\n        4342862020753968697993315680, 74437127397760668256799691260, 6545940320811808411226632934,\n        63845923844196235924174019284, 3698939782733250683814007624, 4036734324126862158420917011,\n        71343874733480892530699901206, 54487211614737150255729706012, 1203829091081599764080517600,\n        32403792967710163877425295294, 77908630207553479193425901643, 32447467337232535348842579642,\n        144929526500698796355239829, 78652667009715699366867409402, 43904630508002691663995738065,\n        74552803138400173553807774720, 7434255625032443648471308381, 8779801362273925028965699247,\n        8302946271464005465223225932, 40829483796607666727034350548, 218985591658292190617650598,\n        28182775541016175617178150693, 35854141543878247900510347682, 16696830838113034205193365134,\n        3994091707695842966783521997, 105, 57569957471772298309985677194,\n        20841347015807125027101251874, 52454682515082664006363377803, 4390640560175615680642904186,\n        30284098542364417924104472585, 68030772574172999207502174285, 15125041933463746059667904858,\n        7538429599490899187344673149, 24776432571679306442237297131, 77534931994803495171322974876,\n        45031575052415837991172017, 3808374045438580476672720996, 14654321193266796325253566857,\n        47647536351453110959053793457, 29546843809807196686467002605, 3737330214546749177848574375,\n        71264515295546311159929215983, 64208859128949973401652706745, 16981613276024328884112155551,\n        7000081801124001517240136386, 34581855103687045984719534197, 31327332270004409420693372054,\n        75617574277578932830958015216, 1260433202343396221922634466, 28101907824058411241613361659,\n        22714071559724996721334494380, 75754774047528210837896988180, 7884680867620871967668093982,\n        37737135964750224165451434137, 71625407088551334923463439763, 54180158865216069424123277591,\n        4654174475822459457617052644, 56368977538640097788172454212, 29019208332947350707492966660,\n        41632282174472597803021959304, 703937115578829223520272769, 54519099811379762585347732484,\n        17515723328350251062555892557, 58116677835002675708714785004, 7879829267706386479425531267,\n        32344627528181534677973586780, 62880196590146259979239203151, 4695993195560909077958709085,\n        991636292339584748697301403, 9608307570283642921588093058, 29432326224297586876416736032,\n        47691184690128852854041230570, 1142954025102108672587749075, 35320961937940548229635328568,\n        41951455906903482073631116019, 48005398781827351209200134374, 2270283740097886546409331992,\n        5352667027544882920489144841, 72463999891013882382553996391, 5558332468265685238256375376,\n        4688687795717711095041272263, 43816802591506672096554971031, 19430783454911637435153301840,\n        4117459716970098973891994358, 5554041728686274542594300737, 22890882121506216432737144098,\n        67323870082432596390563455355, 71837005490605602883568026715, 6398259231318494667244915967,\n        17481088676555627107063222740, 39497288637622370199097974267, 9563502008480222686223429252,\n        5044167521032245584504661204, 7230407927652202413936552904, 44715978549099569859521752308,\n        35096552720860616720414232487, 2806167346110575915832767610, 478450080628773755963622477,\n        46253743600233108918870166286, 43067288465784178514715840161, 170100288806390428152539429,\n        20397053483705631633514139645, 47658194061255073516102851312, 62256260380255249353748598962,\n        3820831218277786656964321984, 58095294591667453748812323502, 41674326759270639033254966683,\n        56171198445694792218531599332, 545450790238813969361922637, 65499468664997908604682171605,\n        62045366970510216527975656485, 62418911008908659246219830605, 1758084253965484837747474043,\n        37161928560513417365138149017, 61456688364315264978489722441, 13866573997073829975828894057,\n        1101971680556257421366473291, 42238565234501307844565222075, 39092645856164347341218619001,\n        15413012042771176567531261097, 5176308567174431214895492875, 23313780721338148342748085426,\n        74348701442646605960131636721, 54041371037788265965572113400, 4966464828039834339439832006,\n        16162672594497134876297237160, 6557194192784011729221382080, 20904766877202324114454636539,\n        5145894224619201901543114267, 60139574499071955706704108521, 7426961792096724021504737625,\n        62000751472662839080706207680, 7485207025036210933168349545, 66279778652984732597134690095,\n        72903019643825089232335281931, 73386605339332318343485159895, 4039441090047586797679360760,\n        3455631921468245812647047445, 11162497567765394911227272845, 56311330767021156127371568324,\n        5002575456543662471866957506, 16034018106658403834177061217, 10093498259766328409313876049,\n        52200758194300589654259495432, 4784204094467720714230496620, 36360583612891222140243734767,\n        59403116285188244931894058304, 22298954752981142062958720656, 774064557597856823551809951,\n        22975415485210204807018085068, 76665313511437498347079416568, 34528671015935834177902491853,\n        6284483241995564867578236670, 55336989551664458051514852290, 4895639363360157662244382680,\n        15981115433901249347718394196, 1996504551121155675691277796, 10162755981333210334252781268,\n        61563436246602998466527891707, 13105763504547067518011957632, 6026245014278050069473961153,\n        6597656178928834850947296343, 7203082069907764528861731020, 24689036614111271810941222359,\n        5339531751434462347831936257, 29324077287061664848097151181, 16398364951733306447937806987,\n        9629375497507687302672539707, 2169559704401979002213266511, 40954366589761532326288006283,\n        59807622928067214155279140681, 38803421665805242245162616520, 3165461809483398372584290804,\n        8697901618707046586081246251, 61431711486843020173292981886, 62188532232871833000256017826,\n        1624460184206126299189365074, 78151219457189566464403149783, 46934105919414094592197867582,\n        47503134093831854454196080452, 1699677133641776368278641, 65532811718170939799620388807,\n        40762762651263932739996658957, 67850649046684864745635779053, 3902278812446426359890716540,\n        34832411601019705173078629511, 933722803367990924793174908, 69070399278291785909020328655,\n        5569126727446776730707303878, 54645661552735677329975336121, 32675490301821238256100836047,\n        50311157742839489317399778210, 5918173616071926280217401432, 20750103384670827060213064823,\n        28350939018889075072300846868, 50012318082932582318202118939, 3324354507868066052703049589,\n        47026169626090593110260716301, 71253303767706426101810317192, 1858833577213356545552677961,\n        7089387668183075944837551750, 3847051164069809384766196444, 64311647288962200846443052785,\n        30755058091291626139758761239, 7086759067844953278048408167, 50231377188737956453764891643,\n        75622792809805106545120727394, 61281356573713382327959059299, 3607000079439546736961268310,\n        78599385250755698818523324357, 46158010841662604308336464954, 47776660208559614332281101688,\n        7187080050173543354801377213, 69279470175525517466563000382, 78255268272330400545143471558,\n        63376919325157122447485666216, 3665150979503379414660591145, 53589297160884127863650539816,\n        63161587236359944048459512560, 27666260091704453600317488044, 3159458683044602623326611611,\n        47930087031147562031208033368, 7153479503935125555173537233, 12480260155906701755859205437,\n        5327057652332958138856475229, 6267843991441604267108186942, 6430167272385532105652199485,\n        55680441468620597607984410415, 2024061331455076594032052922, 60936829448490367859385855847,\n        70119603717884493224611908509, 38930411112739657989265772559, 3487026885456939735206198355,\n        10966253105485435198055842960, 41206085612313279566266780851, 74039303117606003656574848553,\n        3953615799954577808790635607, 65194235440642422557196002129, 77140671826742690083158189903,\n        22324632480124754871911986261, 5748856202633665892634393662, 51694543686516374380563310045,\n        71507147819456607695613571082, 42550497015381296320285891717, 6365642150386338374029374069,\n        71371324871093116466967797532, 42621007360610670856002431927, 68999158743530494158709149218,\n        7579459710600662571577115739, 79214422400618272032980457485, 19968606810806258968888584149,\n        5828247810899057654918759825, 6337455962993824297299548028, 13572289853426002768302330818,\n        33962244086126136035230793013, 68321539669192944660393676306, 3646886582156193931180533147,\n        14038587961748795478683323288, 695380606258031592094476120, 60140039125568208282071806873,\n        4171815851405786362525535829, 64512879831817828218671641753, 34312184808473484977006420452,\n        46777909319851559726869806641, 795679437296864567762387412, 4214109726787996314527983333,\n        9164619329761235560329844791, 60800501598821333423038526537, 7296665179423728747448978962,\n        58005490863714333636624297557, 63166456180006620783615100124, 36924168066314960251336626545,\n        6853538191058898807594460233, 48192699657892552272001071175, 66207645018610352616799496843,\n        63164833714233397767442100606, 2191163149728417599020953007, 61171096677204442929961848900,\n        34688083595214957086962399174, 41983398412040587452130345639, 884437460770174909969686116,\n        54643665223393105859741104476, 12493522734008592226788688384, 5497697929110909657992588628,\n        570314447736526203265130543, 26737719476081985211399695188, 70211272043060667685833634598,\n        21648364972664990563306703227, 6694819143910656914580013114, 28822375247878771241912329446,\n        21902922234308918939036022699, 60927794564237371652774413065, 7108573136398440490780407188,\n        171409236099598647927471782, 71342831510116737332024685259, 28050618890488807750776868414,\n        4614750561975905278847102664, 74149762004238934846960361996, 67135212843686137988560777666,\n        42261437695558421128762561934, 7708796892063309385208905808, 24546906949960588443148668250,\n        59570589205781355058971623777, 15410917122720372447426093430, 6927842825394446202938705386,\n        14805080493062986537203694149, 21510650262766978816046428852, 33078300342581100420966174050,\n        7257313754528569037963798456, 3937404544144598378083857932, 27752308049903025961744288847,\n        39402326853196034949729231474, 349103933095947443284057756, 62537170469502213699698434723,\n        52290975588857441461668935992, 48895485112302456741763495608, 2484236911201439585423716223,\n        73889469296204351320679005190, 43743934441762401466281648681, 75150421101855792911947751028,\n        7682795315773254238986260360, 38668643724630532773958823596, 73456148051787752711644299632,\n        7552805754028345565483019452, 2292563396593553538797380922, 304387165043884855927344817,\n        44558137965911900603527819120, 35543732514097989421851573973, 843768238483642450596369855,\n        48754036476748603797221220954, 167881729809505939832828515, 17646930318624261778934651222,\n        2224597870370737441488125433, 53448025959626443497958108843, 63936110208100227552449502836,\n        67165485183383006560856274864, 1466780171191186047987577195, 16202402599002751378943224829,\n        62294207847347172074620681173, 13523435353688632549377920685, 7309577892509863023640856834,\n        10932162770803347477428610918, 63505201569702085662947102709, 36860233577201731369502825301,\n        7589973108912111105911438758, 20753788432755689128162714385, 5745843313173529637598197337,\n        25357323099305210324209963596, 330894952411496347338920192, 15214369847968626928483565639,\n        150828347698451724331724810, 24427052518300640692526562237, 4924116368144352932400256860,\n        23473662036715933185233019684, 44763303856708287728147229983, 8231926890847753945185860184,\n        73766220597013929845666337, 3890159043544797159982570930, 16662939536687215380046873036,\n        7707367316452616086372923656, 34348342013042460483661408, 42609990796076350298696272897,\n        35093478742760970004998950305, 12164184558869976573407706014, 6214741244108422667459410876,\n        39129728758893851951241957322, 39533781885891249294044484448, 47179015355225274532101979779,\n        7493709948243950555168689335, 21446427452332739882001837344, 63663556763573993421957977376,\n        15278503831101530506906606574, 1654527047285377043056387038, 57837175518583143845909552947,\n        61053390519012638777112872953, 43544397516813489464938986449, 4963688095975488297555038710,\n        23391805919740709924554264016, 1632831928130573449262077438, 53184059087579340785154585728,\n        2310921454884237285232601827, 60249190940644023992741276756, 63491790167675541476511767267,\n        49079498066429671278855114931, 564055877718191746237317877, 73732261431628513704988464994,\n        17325968930561705548462899459, 72464741485148004170902957119, 2999278546301872075674610238,\n        35696581146285889693745623528, 26406794318009386380128961902, 50514295361424859447077405749,\n        2916353450614086899119500877, 52952980576381310393344559023, 46509316566702344413835645439,\n        30371041607920161854672541305, 43530656068927029016641767, 72338843549834960227348703730,\n        50240304795663297396524514661, 48351238362419983661397662361, 5241891724579335472956155632,\n        16462561091582058726790962386, 42602169289891202813669678566, 71185270322964803188555772080,\n        1701859228417122038397188257, 28835284678614357453774314744, 51290354492169392653046170608,\n        53001535446705559977175304502, 2172878038377862178665191418, 12155766974048670590529868002,\n        4510793860354689659531903916, 17866041145099813977301185821, 2303555036270224435333906139,\n        39417356407044317169745083809, 76806008522698936486979882348, 64923008705597471291748350054,\n        3340710008466835035564458096, 44778228453572876370750336606, 11241298013215380720452226152,\n        238158315980484730688736716, 6948873747953010723409202558, 65338151784520803668145704102,\n        44532371581130946301588525287, 40337404130101800437088977954, 5975657711197055080422110372,\n        12021898650700678680217721976, 26928805862739227022169730045, 6292369161450680010926501031,\n        372209286126994193500065262, 36479489711866011592460305471, 34065619796930938121732339697,\n        66443649579102238669388697374, 5442186522203701522736734422, 24408781584332586598513677854,\n        47064685144829238673430848813, 43496644836301989277872256443, 5248310386799227518353474750,\n        831405378488370047932888917, 49347858366983301500572664748, 6561740100325473314625035282,\n        6821352382034051627623180896, 29671552608295196949489172151, 24240140311428708882692262989,\n        47285802444526084105023757224, 6936446177149881725945942594,\n        3286725750790949516837023925835623603544975291305806739637631881177674914554, 12,\n        50502739391530308824430229837, 60655675897463081423873680591, 66236366336699955268664361355,\n        6487040436002879903850334703, 49461443923296839145664642703, 67622669909088564412041393317,\n        7996524410717796873717795934, 3816626839411767063346110786,\n        340282366920938463477330667205218768792, 670240716356234401,\n        340282366920938463466433545813091659183, 340282366920938463470044337965307187856,\n    ]\n        .span();\n\n    let _ = deserialize_full_proof_with_hints_bls12_381(serialized);\n}\n"
  },
  {
    "path": "src/src/tests/proof_calldata.txt",
    "content": "0xf80739ea729635128f87c9db\n0x8bd62cf3413ae30ccb5cb124\n0x3a67b2b92ec8075\n0x0\n0xbada4d3959a1d0e421bd8617\n0xc89c329c82695448393ef4a1\n0xd73627973ff2282\n0x0\n0xdd0ccfe5917761ef3d5cee7a\n0x9c21c25b35bf74ac737c8c23\n0xbaa720e442de1c1\n0x0\n0xcfed88053163a2ac94869e18\n0x36c0fb4ba2bac814885c06d0\n0x4d40dd04d20f4e1\n0x0\n0x4bc54e609ca3e5cb25e3afc6\n0x5027f40e289a48ce76fa8371\n0x9d21063f8f4c60\n0x0\n0xd2a77bf9fbcf68c8cdec9b6c\n0x95e2f10d7943fa1caf07f9bb\n0xab9f6dc9b4e5ef4\n0x0\n0xc88a87cbf7023df41fa14c0e\n0x221fafd6e9cb82c03c04bf0c\n0x2745103dee46695a\n0x0\n0xee684a4bbf22a139e56f2b17\n0x73292c17bae969c87e752af1\n0x158b03356b5595a5\n0x0\n0x99d2856198792afcc16af2182c56515\n0xe00f8bf845ce217630ab77a3351d3f\n0x3\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0xa\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x37\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x59\n0x722eb85ba595ee4a5653d198\n0x93fe6e1d18c33c34e96bc4cf\n0x13de8cf3b7f90a4a\n0xd7ed6e3bb7e8ed4b796ab5b0\n0xe8dbeccb00ea189954d32682\n0x2b4151c4fe6f8709\n0x41e1961c729c2f10319d41b1\n0xfa72fa5bca35d172179c34d6\n0x1861229c1fd50a13\n0x72057ba2bc6fe43049b3d305\n0x96f0233c2a944df5f0a9650c\n0x25c663fc11975f31\n0xa63a3350751315476c2fb401\n0xb135be310271eff0d8fde8de\n0xf0af755e989ede4\n0xfe4bd9e9f2889230409280e0\n0x96dffc3684889560085bfed\n0x344cee4acb08a9\n0xc695823e6e83d3096e236a9c\n0x695eb72c8dc80dd7b9edcc6e\n0xc2c3eb404b4659f\n0xaf037e0208896f5e9f98f116\n0xcf92a7f6b11b3876c22e2f34\n0x15d17a7d1ff495d2\n0xfc915071a01eda9c0f0162a\n0x3e97caaec2e42a8018031a9d\n0x176cd09f53add701\n0x13d313c7ad7d5b744f4dca27\n0xd8cee2412a1c68754169322a\n0x723ea6b9d6dcd9c\n0x831c33c4b18ec243cee69300\n0xf39157f7826c5efafe344373\n0x157fde2c65713426\n0x7fb81be436ced44825c8beda\n0xc3347df75f7ea57a4b08cb9d\n0x9805414cbec7f00\n0xfe5f88429f733a5c29ef76a6\n0x3c7620f86d49b62b47497d2f\n0x146bdc58364967f1\n0xceca5a22b2301be7079d6da2\n0x845a7d2d53ec0b6398611002\n0x2f6fef0717bae93a\n0x1c2fe7659bbaf32af4d4a289\n0xf58c851287415ff970ea1023\n0x2b329329d4d1fdac\n0xd5ba07de90ba5ae2a654113f\n0xff114b8d2ffc83fa5b1d8ab8\n0x43d9e5ad0ba80f8\n0xcd02c79cf4794fc934733285\n0xe2606ba3b42204c9a79c6cca\n0xd78088291f2194e\n0x23971fc0976965130ab9fa09\n0x18f434f521b4f14660db42f1\n0x5b7a1f4483dac54\n0x23772d9fafe650a5f0769aea\n0x53f4c017797bea0f3f756d1f\n0x2d7f9bb9603f8ad4\n0x516bf66b5c72092ca1531b81\n0x7e4a2de688e3b63de724050b\n0x19edf89a0e062ef4\n0x6caaf8c108277c1cf82c4d6f\n0x4a7477e833ad44eb8a53586\n0x1d2c22701f6deb4b\n0x9686a854f8305703c2968011\n0x6b3f8cf3f643cef8e53c7fe2\n0x4d848f76289cd30\n0xb531d669bf24ad0daea89bb8\n0xb47334a823714044f6819b26\n0x1c9da3a885502b19\n0x1e16ef52cca23d9719d90a6b\n0x8a720ca0043f7a41cf63ab0e\n0x20cac68e1b9a5427\n0x1\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x0\n0x22\n0x899f96c818ac403a0eea08ff\n0x4612678c14001edab0a2283a\n0x1608fe4d3f110f38\n0xf276c0ef6bdb1c5f18bd88ea\n0xd372ad96ab02e51d8fac5089\n0x1e4da800f74aa5a1\n0x237c71a842df80e4ae92d536\n0x989da96f2fd2c33a75549111\n0x2a1bb484bddb021e\n0x67d59d7a0eb0d9110f8a4d11\n0x3eaedb500a0a3cc79b67156\n0x21c0a7203cf660c8\n0xe32d2bf92aecb60f3bf997da\n0xef0960fa4713cb57d808ce5e\n0x2221c072912b2421\n0xb1aa8945e3d4112df5139ddb\n0xfd13eb75d45fd4f36a5632df\n0x2e71922a84e4ffd5\n0xb7058d32b4743d1067ea67fd\n0xda59a5a1cd290f9a74246939\n0xad2d9eb98c7cf07\n0xcf7433be69fe9284ca6f1c84\n0x546d2e640083e4d37fa407f9\n0x1c4217a24775cfe0\n0xc0aeaeac5efa2b7e93e81bf2\n0x1b7a06cd2b85e00e54f60def\n0x90c4716824967a\n0x206926270cc804f7b3d80d6f\n0xf3c6a2ca8205175bc3516ff\n0x1e5a76eacaea5c78\n0xe8ed69b1a18d75a3b02789bc\n0xa42519fa8be45e6e67a78ebe\n0x30a32f24e37c538\n0x47bdff9b2034f6ea0897fb6a\n0x5a3c5f9de776fc99364dd86e\n0x28eaee212f62dece\n0xe8c25e968ae2a22dff93d638\n0xedb7d4ae1f1129eba574bdc\n0x26d7ad2e1618b573\n0xc0127bbca3d571e0dcec54fa\n0x9e23e31aad3906a3a468152c\n0xd3c9da60bef18c\n0xbee3e8e626283ae85f136a\n0x52c41e6e4521301d9cd1ce3a\n0x532fc80b14887c8\n0xe19b85f3fc091152b64278b\n0x9866806a6e92d1864ad6c19b\n0x71418d935c98815\n0xb9573ea3907be3c0cc2e8da\n0x985e757f7c58b10b32e6cb41\n0x2cbc76b5842cafcf\n0x4517ebf3bda6f74c07976fa7\n0xa55f969bcb80139f5cc61a87\n0x15744f5627fd8603\n0xc40cff2e678ff7054556a986\n0x559e28a0a270a94d69c69a3b\n0xaf3e46064dd3a24\n0xd8629b812542e77bdb8abe2c\n0xff70cc97946349457e59db1c\n0x2edf6bcd3005a0b2\n0xaaa652cb3986f89357ca2b8e\n0x1196f2c81ea1138debab00b2\n0x1da1250d000c756e\n0xfff3f23fd6ec6bb7b5bcf975\n0x2382bbfa1883abf27f95343e\n0x170d7fec766c11aa\n0x4a475e6f2d59f7af2601149a\n0xb35e18fce0380b9e9a268080\n0x1c77c6b1d0d29488\n0xeb7cc28be61636214fe6d034\n0x3e6b7ffc307884efd9039657\n0x147f4dcf0da1df88\n0xf123a8fb61d453f457ba102d\n0xa1d566d9cf749657164b282c\n0x1f8fafbc70fe5c25\n0xc70dca82225b4a1416e1024a\n0xfa61fd6f0d1c52e57b5cd186\n0x1e5d6c4cd413a9ae\n0x3cf67c128cab7a4b8295c2ba\n0x9eb55fe22a57dec38727bfed\n0x16df456d8ed02937\n0xa9f76a5f29744dbe699ffe03\n0x9afd0d9f14be821fa04299ca\n0x23cc6746fe097a54\n0xe811a025108cad439f8bec7f\n0x3105f366aea4a9a06f69b87a\n0x1436e4e2b9eb072c\n0x21fb73d34adc475bf3e9d237\n0x5bf29b79076d6576f2bc0b26\n0x75140d15ffc302e\n0x31a8fb1c07b22ec88bcc2f4\n0x736948de3a66884c8600ae2e\n0x2538a773eba2fded\n0xedd0f29c5bb9d35e57e52540\n0x33b1a86d2f0a7c2a96721837\n0x12ec69e6d85a75f\n0xea5f2dd2229b2b57688fd156\n0x23c45650d708b828fe479e71\n0x1b6c1a075d4dcd18\n0x82bfa2719566106791c37da8\n0x4b992b52e994beb5eaa2aab5\n0x1cde51590a621851\n0x8aa5c70e30936567cf59cb5c\n0xd8457831d0d903625d5845ca\n0x284597b9cd2d9adb\n0x7b0b09377318013cfad7da79\n0xfc2b52907dd2beb7f316167e\n0x1c0c62a48ef5d551\n0xa0d1aca5ecc18769ced60cbf\n0xea549c80f0e07d47f54fb4e0\n0x1e501a2dd31d9444\n0x91b4c6c859fd94d2e077cf93\n0x41199218d8f749007871412\n0x19cfa3917d5e0359\n0xcd3f86e757d4aa535f959fdb\n0x161bc39ffbf028b906bf5f61\n0x1375195249b7f051\n0xc4f623f948e0aa5dd5d6929\n0x68bdff335b0cca459de37ac4\n0xb5a131868345af9\n0x4bb0b947dee1825c0bb108fb\n0x8cf9a47ea942fcc600bfaca8\n0x2c026828ade7dfa8\n0x15d6b482c1023197253e7e1a\n0xb2537c5396aceec626b63f02\n0x2f18df721137c9bf\n0x640214f7013afb31e0bdab63\n0xc643538f55b38f3cbff0354\n0x2b391aed098e6ce0\n0x993fd6a74059cd2cc9d2e06b\n0x18e00062ef908b856b8a9bca\n0x431a5b174dc0326\n0xd94a5c873c7aad7596aa65eb\n0xdff93e1d4497383737f6df4e\n0x24d8dbb2b146e438\n0x696d2a2a17cb460915be7cba\n0xbaccf943804e927ad666cceb\n0x163ba394cc43cf91\n0xb74f2e6f3f6f018cfd7d5bca\n0xe5427aca317baff75d2f9f7e\n0x225efe1e7d1c833\n0x8de98cb20848d7f66b9eed77\n0x50bd297812bee675b6c1819\n0x2656c1096f6b9ab9\n0xae77b1e75b5a0f7a7642b32\n0xb3c24d54f4edb5710d719f0a\n0x1b4b45963c363e4\n0xe0ba1bf61dce8dd5d329dc01\n0x957fc3e7c35c766e8361673b\n0x8a56d77f79ee088\n0x7fd5d24cbc990b8a9bcfbb13\n0x4867dc9789f0c46d6e7d884\n0x1129ad24b450cb41\n0x678484ffde0521034191f186\n0xd62fbe112a529424ab45f93c\n0x2966825289f74409\n0x73c35cc9f59af6de638c5bc\n0xd1a2ae7bd5c68c073eb6475c\n0x2678734594e23df8\n0x609d037843c4542ef411f05b\n0xb62e6b352be8ef6f59608396\n0x7bbc722e2c0057e\n0x718e2c6dcc1a131dcb7ff8a9\n0x343d635e263f5533943e038b\n0x2e15cc7c276791e1\n0xaf70094d05924eb44ccc972a\n0xe2305b6b40e39c5ac32e2418\n0xea868b3fa750b92\n0xc27db91f7f14ba30a04772f4\n0xcef52cdfc9fa9f4cb688fc78\n0x2453a69d3d875fbe\n0xed9834e28c1e5e6600fd9d45\n0x62ebdfb861269c4ed8344896\n0x16bc13ba7b402ca7\n0xc6f0a10c9c7ab7d73b336e1\n0x3733fc46abd68ceab848079a\n0x198fbfb653d4f214\n0x265b172d4cb50f6ce5e43271\n0xdf9c550d1c7df6a7efa184d8\n0xced263da575209a\n0x686a5cd5edf3dbee8ba290a\n0xbafee505d302ca0b9736bcbc\n0x2faf4e066b0f299d\n0xbea264e301b0d73c4f14a880\n0x8b14cfdaf988859edfbc0845\n0x2b877e3930d66443\n0xc65cf2020dd51d1acd35dc56\n0x712bbf43c098d915acc9adcd\n0x228b3c57c78fe6c8\n0x3a9f27c3f8ea3671676faea6\n0x2f35074ff6f6c30a8e0bd4a9\n0x2c4e0ee110697f25\n0x17c9c8e6a743ba87226e6b0a\n0x55d2967e82a536795c57cd47\n0x1d88d669fdf058f5\n0x903d34aaca87a3a5856282aa\n0x84375e9139ba261a44d853b\n0x19898994470db313\n0xe97c9a7356212c024fa245da\n0x379e8c74b26e040d9d39edbe\n0x2c91a6a570bc0b4b\n0x8a73b6c68c1d9ae58acb21b5\n0x611b70c069c563e67ff41373\n0x2edfcc446cafac1c\n0xe145cad2675d653ff4228db7\n0x1e1596ec3208aa709731ebdf\n0xcff4fc63cba1162\n0x31655928805b085a5c349a68\n0x71dbbbc7caff1d373d145041\n0x290ca8cadadfa760\n0x367128a4d2c59c333393d53a\n0x9d3428463cc8773b39d36fe\n0x1cf4bd0b1f0873ce\n0xe14a381ffda69240bb20f4d7\n0xcc3ae4d6eab12c4ac47258b0\n0x2e028e13a3c776fe\n0x16b9d220bda66d7f39a53bd9\n0xae704908bfe5dde1379a30eb\n0xe8bfc3d658559f7\n0xf5525a9d15717b048416f77a\n0x177c1d6ceac11ddd763cd999\n0x2d026a2be17e15a2\n0xfe41ab70c728df169f53b4aa\n0x44b62b4a000774d319165bbd\n0x17e21b07c2c93d3d\n0x990b7aaca84eb5b53a578cbf\n0xb15394cde47df013bbe7aa44\n0x192d1f968026cb7d\n0x22adcc1c517f64262c7c4f24\n0xc3eb90a368efffa8afe65969\n0x24ab842108d98c44\n0xb050aa0e75fce4c0d4c4cb51\n0x163f5720a8e720053fbff6d7\n0x251b9a13eb6410ea\n0xef10402a6fa8df96dff5e4b5\n0x37103aa8251e6298f38e5672\n0x2fba38a05a666245\n0x49d8f5909e924b20c2ff45c0\n0xfde01f585366083dfeef111d\n0x7965352b7384e79\n0x60195359a2cd5d4649468db0\n0x6c60e667e0fa405ad3a9f82a\n0xd0a242ac096b5fe\n0x81fc1570c5b9454eee71e297\n0x4cd01dace91180a6753eb951\n0xe4f6816980e76f4\n0x43a2b93b448a3c6c0a0c125d\n0xf8dcc724da05d1c6387c8be8\n0xcf05f6b0dda23f9\n0xc72ec170a7b958cdfb44ad6d\n0x89fe02bf6d3fb3d3a0ecde60\n0x39daa9c34386935\n0x579077636d557340cb5e382d\n0xbb7d5ab032a1c23d990168be\n0x1598b0bba0073ba1\n0xf1ea522ca4f4eaecdaae14d9\n0x573d20d09124cb5ed418fdb1\n0x10ae5cb62763d1a\n0xcbffb5d2bd865703108c1c07\n0xa6d75cf8045f2f3dbfc4fc9a\n0x1c3f437caefbaa55\n0x7cc163cabebe795d001836a\n0xf1e26d6e828923d6198e06a2\n0x1d6eeefdfe21276f\n0x8c9e835a5724dae55017b7a8\n0xfe5a5456d10395f482f29015\n0x3855cdde54606b9\n0xf62fbf77b268e83c2b3a031c\n0x8f80e99ef13a631a67b917e9\n0x616b3b10a32d31b\n0x2f97d43837cc24ebfad0f37b\n0x82149dad8bcd5bf8a6c80bd\n0xed804eb36802ba2\n0x807315006f4d57ae0bc1e23d\n0xbe47112e5d2343610117935a\n0x1647184f2954768c\n0x4e4edf65dd72abe6d3ce11c4\n0x1032a9352976a46d9d0926b9\n0x2c1828c81959f006\n0x4b894fbfb7a79662d25da13\n0xcd74233f3e68b96f1ee69a9c\n0x18b2d969379328df\n0x97aa6b296d138b59ea43e543\n0x4b54e388cb0f6f2c97c110cf\n0x4adc7ed0e6ccbe8\n0x7645fcf6f89a43bf706798f9\n0xdced018326dc665006813b52\n0x2c65dc9b3b3fecec\n0xb407a9b59f8520741d48a863\n0xd9d8ca2ec62047158a8f484c\n0x20fd292afd18238c\n0x3c5592f184a4d6c0dad8620a\n0x9d6bbb8823683fdbfd5b8268\n0x29d59da2627aacc4\n0x76b7409170f9ad694f997067\n0xbf2171a60d3e044b05f8925b\n0x5f26d82e0c97521\n0xa34b126c402dfc992551e029\n0x3939d7178989118b59c761a5\n0x1812f58277cdd348\n0x43bd3130e9e2692cfb839980\n0xd0bf613e380b4d0123268b00\n0xe5395aeb3b4580e\n0xe31c940941ad463c0488747e\n0x8de3002883f66792a235acb2\n0x12c1893d70aab237\n0xf96b11060bbe1b6330c866e1\n0x236dbc1b990d70f89801f2f1\n0xc800fd953cfd23d\n0x1a1e40df4ec2febe0d7aa08c\n0xae1ea99ece01cb0f03d10d52\n0x122cc804195df92\n0xfdd3fe027645ff4a266df359\n0xac78684e8a91bbdd4a13c19e\n0x22e918fcc1822531\n0x3fc1cf1ae95a7023041fbc98\n0xb810c8b8a4439d086c52c4c2\n0x1cce950f07cd49ca\n0x8208234f570da172edcba043\n0xc45c875972f7e2fb154cb1c\n0x1653b9cbe0a6b6ff\n0xe081ea0d72e8e68564485110\n0x6e201ce6e3d99d83686d1d0f\n0xe304a2188060bf0\n0xedf366ed6a90e7bdfc8275c\n0xe6e0b44480a0b5b88ed3d222\n0x20744034b46b848c\n0x512ea166de2a0d30491b3616\n0xf11f499b0ce1a73fa659f918\n0x25af2b04ad9852b6\n0xc73a891fb15e7e756c015c10\n0xc967309fbde7c7df49e2393f\n0x621fda63242329d\n0x9ffada851de4411116872085\n0x90058ddb651c3d96ff7b0e8c\n0x58a5ef17789b73a\n0xc165c96062a899f5d92859bf\n0xc08dcbbdbd79575ac1dbdc44\n0x1c4d509281e0102e\n0x89efdf3f9b0fc52a187b0147\n0x1f68bcb1f9210c3f95bf3125\n0xa4b0399fa5b5b61\n0xdca72dd925a41ed7198d1f38\n0xf8c2faf05ea0823dd3f1064b\n0x270733c9dad76420\n0x612b006fff2faeec0a2d7248\n0x8a5eb4349d1e4922896712fb\n0x273cec4e6308f5a5\n0x5d19c579e42748c160125218\n0x668e00641a2aa8edaf2de293\n0x2482335395750ece\n0x8c70cabfd031645fb3b6acf2\n0x43a9863a0e6c32b306b8ffa8\n0x2a06d620f1bbe8e1\n0xca6fa3e323826e3d7e9995a3\n0xfd3e01109a20c2f81f030588\n0x1b657605ea22d422\n0xb405e6392bcf4e5f8eef6689\n0xb0956028b6f44c32639e7ed4\n0x29c661490fe6e13f\n0x9b4e1418b86c6ac60b9a6e7e\n0xa91614e993ad36faf52efa36\n0x39cff397df3f9c7\n0x2ea0d1c6fce5417747201c46\n0xd071e99bff9d7b19aedb5dad\n0x27b592ecb0d3fa67\n0x989e62a700a17a499f9dc30f\n0xc46ec56c7e343568b1efc15a\n0x2f506fa533746c29\n0x104ed06b6cab1581945397a3\n0xd0c1e65c0c677eb9d430e4bb\n0xb3fddf55b72b817\n0xeeabbe91ab1ddb6e9b13a57d\n0x55ac257409d21598d4143464\n0x2002ba34651a82c4\n0xf688ac401fb5aa1270a2342b\n0x9557250595ea1d3de4d63931\n0x2a054a62077b16ef\n0x9946f8f5ea70b41d9a6ebcc5\n0x5e39fc62260d47ed671e3929\n0x131102025bf8dfa2\n0xdea36b81b9bbcc87169642a1\n0x3b6f8832b932d7064e2e379c\n0x100197149579f7b0\n0x44c2eed475abd3af1f8c787\n0x5dd37f8b5f1aed2edf5dbf0f\n0x6e368bc2faf8847\n0x6d0be0de8b690332a0a90b3a\n0x924f6e2c99e15f9d474b311d\n0x2bf0bdfd4f4db9ff\n0xc35a3d261dab1e12d57045bf\n0xe4960927e056a8d9a261a040\n0xfa2222feaaae1c5\n0x7ba2978ea62f71b12291d0a5\n0x76d98b6ea773ef1849719d5e\n0x16f4de07484d8737\n0x9cfefc70c1b8f7b418c3d39c\n0x884d482af9c008f25f17583d\n0x1dddc0c35b1476f1\n0xe493836538c6bfd27b38910b\n0x57280417108953863c898753\n0x2edcfd52c9324e15\n0x74a86f278a1136542a0ff1ff\n0xce4c8bb59ce9d03aea7e645d\n0x112d75db5c4f29fd\n0xb8ffa255ccc2b61ebd7b6bc3\n0xc8efc77e902bc6a315667786\n0xcf4723cc3e7012b\n0xa22c2f05fdc5c4f3da7332dd\n0x7a817c8e967493806674a973\n0x118a5ce561aa21af\n0xa02c862db92a7038b0581975\n0x18fd1ab7c4e38c1eea7b1949\n0x1a2210e469ebcba6\n0x7e5408aeecdcead7b9b9d89d\n0xc5210931ec51a818dc7d4b79\n0x97c126391df727\n0xa92ae086447d0237e6b065b0\n0x9019f9a361162bf66ee5630a\n0xca6d960085e1031\n0xa5349f651d1635d4104c8717\n0xcdda4a07863829cf5f21d5b4\n0xa3a5c2ca87fcd65\n0xc137370e728fbf79edc5fb97\n0x87a2e081933e0ff3451e2230\n0x186d2ad5dd9a7a02\n0xe684f4dd204232e0b3db7243\n0x4dd9b992fd13b27c89f06c90\n0x11d9b9faf7e7fcca\n0x2953cd3526857c2ec60b406\n0xafb4f73ec710aca029f476d7\n0xd61f6a1aed4bb79\n0x72325823bf7a466f2fab2f4f\n0xbcba2142f345dff3530245ff\n0x19ed75c425caa3ae\n0xd333ee25a3049a73239fdaa2\n0xa65360fec31886da5edd6c98\n0x1ab54213832c02b\n0x757a779503f52ce05040eb20\n0x6d78a51f36be4581ad7a589d\n0x273677d970845959\n0x196de6c5621eb15721d45038\n0x811b8cc0c0981be925e4ab0\n0x111281cb83813039\n0xca21bde88b9e1f9045fea2f8\n0xfaa1c535b61903cb77c59815\n0x130b61c8bff9124a\n0xc1b6d4048fe956b84b50daf2\n0xc8e6fa2184e4f32fa573cbd4\n0x28d693c7c1c21116\n0xfd60ed2372e2084a4d4af9c6\n0xd8f3363039a7cdbcc5869598\n0x5bd9e106aae104c\n0xde0233c7afed414d0be0f658\n0x2c4f578b11fd9ce3b2df914b\n0x85f148cad3e119\n0x848d7282bb37a09d0dc6d6f1\n0x5cfb52d8ba06e1449f15f956\n0x247cadb8a17b182e\n0xc131bcdde35f0e048fa6b050\n0x84f22229e00682e8f9959bc6\n0x243c2123487b8109\n0x887947cf0d2c74c79662e6f0\n0xd09fd14ab371badd309d987e\n0xd64e162ca979f6b\n0x6def6a7d6a1f97a6eac17898\n0x3fcee63459462ab71fbd50a7\n0x77ced2302cea795\n0x3ce80865574a0ac894fe67f0\n0xc147a8869bb9993037a3175e\n0x25a384e430d8d66\n0xef10dbf874449062778a2a67\n0x56c850bbecc848ca096d4f0\n0xa2b6baa0f5c0067\n0xd08c7fff71e191b5bf4c5618\n0xa86a508100d0e11217200db3\n0x1d15d7e3098242cc\n0xf3897745221b33a6975aa18c\n0xeb419c2bd629c305aafc0da9\n0x28481b994e774e99\n0x55b30ae9545a26d41a60941\n0x5bfb93342169bd939f538e69\n0x1cbc7a6778b5168b\n0xedfbc1c8b33430c90444b894\n0x92b034ae625357ecd2acea0\n0x2ed0e273469fdb70\n0x4714af33077172eb839a1ba7\n0x8f3d52c634fba83070c5d07\n0x9ddb2c219a4978e\n0xb9680f1799b45e150afecd93\n0x6089e118a2cf7f2028d4cce8\n0x8caecb0e4513e6f\n0xc0130cdccb9b36bb3bd7f39c\n0x533cf7ecaef4da99c5c78f1\n0x217edc48ed8be519\n0xe8a35534af48ae63208d4b7f\n0xcef6bf025c532b2256706697\n0x126a9ec58c625061\n0xb7de0a7ba3ee337a76adb78b\n0x2bfd43b48a3c3543f4f6a2bc\n0x1a32096355c7e1d3\n0xc31a614fd9a48fc474d63753\n0x868c276abc6e4a027a8b8009\n0x192361c679be3429\n0xfbcfcbbc85d6259f284bb529\n0xc83d14faaf080e66dcb7c147\n0x29c1fa8fdbc0e8de\n0x5889afbc6690df78ad0e10c8\n0xd5e1cf6c4d6b6a5d922a0cc9\n0x2ee9628dda46db5d\n0x6768a79f3ecb36a7f51c16e2\n0x28011fd46670778b45019867\n0xa26c6be06a77a99\n0x1aa8180e672d30fcbd791a01\n0x321dc60a6b314f15424acf09\n0x52098e7616279bc\n0x7d07183d759a4bf20e7dfb69\n0x2f348c12af7899cbeb2aef53\n0x724a487c702fc67\n0xde35accf42d29f796b7fbe6e\n0xce54e4dec438e9e390abbc45\n0x2a131a2d991d9218\n0xbbbd5aef61b25f7a2916dd11\n0xa2f6d3270daf3b452c077639\n0x2d8b2bb64de3513f\n0x67e967a991e04f1830ffc518\n0x8027af404094c1220c50ab8c\n0xcccba1e004153fb\n0x27a28d5bc4f0444586079c72\n0xa2c9dbe4a2ebe45322e762a9\n0x2341181eb21fa521\n0x84c8378248825ed26da3d385\n0x344cc6971136e567995aed7e\n0x2b91ed7ec7342d55\n0x5e57def4e27f10d04b050129\n0x7ba6446829ce29864342aefc\n0x10037325ed9a36d2\n0xc78b901bc423ab046d77b209\n0xfb6a80ca7440fb59b9248e24\n0xa97edb9c6c05b1e\n0x5ca43f21eb994c062587605d\n0x1cb0b82801609fc50985666\n0xdcebc89c0ed6cd7\n0xd30c5f266d4c31e82b5188c9\n0xee74a67ed51970b8288b17c4\n0xc4a667ceebea976\n0xfbc6a91a3b3792e0ae615988\n0x31b0a52429b550d3f2796a2a\n0x25e2fc9d0bda2f12\n0x6fae3acc78f7beb46f8ff26\n0xdb2149e7e413730bf4989c91\n0xbfe8345a1822ee\n0xb29973aafa428b7af5420743\n0x470b56f6d6f708b16462ee84\n0x22c8eeee81515ac\n0x2338cd552ef00a8c37238ecf\n0xb41bc418ca5d7b5af2bbf5f4\n0x1d088c091bb0785f\n0xadb84a430613666d323cedae\n0x671bf042a6262f93391b689c\n0x1389e46a0d08d6a7\n0xf4b5fc67ef4899edca0cb81c\n0x9539ee0a07570a47c21e014f\n0x19c89fe28f4f5992\n0x8ebb79cd4044d7f4f4e3083f\n0x470d31ba83170166a04527a2\n0x1371a783cac91ab2\n0xb2c4d70abe37744838467725\n0xe506a9656fd6a4b9eb3cae94\n0x2196a1ee1d26802a\n0x7d5c92cabaf1fe2086f93e6\n0xf0880388490a9d251d0da3d2\n0x268ea94b49f0acab\n0x183e7a5769e14afcd0828ae9\n0x642ed41000331c4a1f22015f\n0x105a635ef54687b2\n0xf5c106f27dc72d21ac4adcba\n0x9628560defaae8b312862b4c\n0x12def98b8967708f\n0xa7932947493ab0600d70e3d9\n0x74d94f5e29c708d430847132\n0x281c4a75c88fff7a\n0xf1e3d1da393a1222feaa59cf\n0x31e56034818fc6196aec575a\n0x99056270b7575e0\n0x24152a9b82318904fd6fc751\n0x695753cac34b3b3305656622\n0x17a56b921b40b334\n0x5189030aa6e499745f8318a3\n0x312c2d594c2ad4312e827563\n0xf4397377a9fea83\n0x2ccd5168473a73643cf3c781\n0xbf52dc07c3cac2192171ba68\n0x261bc025608bd4a3\n0x1679f8646851790a3f69aa19\n0x4e80550f555efa2191f792d8\n0x17433555e0985d13\n0x912414a09ee06a153822d38e\n0xf5f6b3fbcf0ff3c53b7acf17\n0x7c5d58f8511e650\n0x69f88a30f8e7d99b5ec815c0\n0xe5235407cf1faff1db2b8b30\n0x6db6485eb892335\n0x2da464efef2c1fc9a35bceb6\n0x68055a937b607a665830b148\n0x144c334a9643585a\n0x1be7261a3fca6648bb819b74\n0x5bf3881892b9e70660472534\n0x949bf01b05b54c0\n0x5375ca73fb2432dc642ff267\n0x46035ad5dffc3c279e618494\n0x17957e8aecd4b872\n0x6704db1b062889383b273356\n0x6004db19f5d997dea7ee9655\n0x65c9e90ee078172\n0x7e806e5d549b8309709acc00\n0xb6919212213c939e4a5f2dbe\n0x2940c7fc992a1929\n0x5b22a68aa123a504def7876c\n0xd9e2d34b769b942ef6eebd6c\n0x23bcd34e0b372330\n0xd5ccd186bfcbf63b4d51e741\n0x79ae5611bc1a7e7507cb8078\n0x51b989a016fe267\n0xc4454c62ffb407b1740e73a1\n0xf51be8124d8587de942e1d4\n0x19002ee92e783a6d\n0xa1eb00f79986de1c14674d27\n0x86215fd4433817724e8987e\n0x1f3d64de237593d\n0x283ae7d7bdb2751213873a76\n0xede9af6f345769d843b3d3a5\n0x221b62dbc4779393\n0xae455db401f4de2f990f2225\n0x43c171f6fdd109342c354605\n0x162c996715afb38f\n0xcf537c11f4b0716789d43f10\n0x6ff540f2e4ac08f04c4353f7\n0x27ff4a20cac58f18\n0xa49c8e1a2d4fa32384de3a36\n0x2eb2bd5dbc7065314bb68189\n0x1b969a0633423e6\n0x2dbd2169007fdacbc2384c2c\n0x2bc72b8e9c7adf3f21f41ed0\n0xfbead7960c857d9\n0xb3e05191ae500caa04f1033f\n0x717984e06e5b10555b4a8cdc\n0x1547e3fa47dee36d\n0x6a81da4ffc7d398413f19ded\n0x401a256e0854c04050152073\n0x2267f1c12ad8cf3c\n0xc7bff013fdee93752cc2ca9f\n0x400d59d1113e3c06220eee5a\n0x1609a0ddb68761d\n0x3a8f88cc8750b5cbed8a7fca\n0x5b7efcd3764341c61959f764\n0x13a4e013af8e3885\n0x1704c8053c3ec164154f3442\n0xa0928f712cb9af363f14665d\n0x2c30b42e76ebaa32\n0xbe3677221041f957c027a327\n0xbf1e1f05be077695c723fdb4\n0xe260e5bfc4fdde9\n0x7b1f81983bb326a72722d926\n0x9779cc0c0c388fb633855040\n0x1c0a6002422d51e8\n0xb7f722a61b64593289f231a3\n0x89c1e26ccae5d33f4ef6cda1\n0x20984f632348231e\n0x9ab69b21d54f7116a6c92ef2\n0x8dcd788a37c32585a6a89695\n0x2b83e25d2944c223\n0x7a26dba3db81220259b6e766\n0x8b0181ce01411894b5c6c041\n0x2034301a3c912af5\n0x24dc7a2865665209f4bd74c0\n0x21ae016438a2cb65e77707e2\n0x1d3be23470fafad4\n0x6ef57b548e848493fc24f0af\n0xad5f50801058656bd0db4a66\n0x1ef86ec97ff23215\n0x2a9a21c8d59afcf1e02b6cec\n0x240cc89f76ada418e87f1ca7\n0x6c0418eea2786c7\n0x288bbca31d5b6d14a95b067d\n0x86bd5e20565a28b11b1d836e\n0x11d668866fec65f0\n0x5b8f3eae665ae81878f22b8\n0x7811b33a4d64ffcf1bf96d25\n0x2542d88c9c5608f4\n0x9e01917430efbfc17fe90c7e\n0x637f569a49dc573939722bf5\n0x1d4761a0ca0eaf8a\n0x3bd04c09f1dbcaabf00479bf\n0x308abbfde0fda94c811d160\n0x1a14923c9c1fe249\n0xbf1622313debedfaa72f6b85\n0xb72ffbc2c3f4a0bf6452393c\n0x2317d7ea98b006e2\n0x8f064709acb61eeae10cc45d\n0x8d091f21145a6c47231fe0f6\n0x1d17a1053fa6554c\n0x6183336f72fd9c58436a9932\n0x73f0aaaca97575bd48b69773\n0x2ba812d0a34b84f3\n0x8f3a9c7bc9e27c1476c2c852\n0x7f7960fc437785039e7554a9\n0x29142258ddf5c09f\n0xf06844acd69ba713a6982bbd\n0xf04f28bb9eb42ab47f9bf628\n0x2864a1cbbffcfa31\n0xfef4b46a1e34929bec8f0a3b\n0x38205fa508f4f577b8ed1cb9\n0x2e846ddccb4605ae\n0x7e11c2a573979331e6070e2c\n0x567e039a0a2784fc989bddb1\n0x13cdd838fb3858b5\n0xb42ae7da57191801a0debe3f\n0x1e1564ef05bcbc41caf9f0ea\n0x1ded154d16804cb1\n0x1ddf1a9e8fe3cd4a9b5605b9\n0x16718979dbdb88e349681aec\n0x14ef6160079c68d4\n0xb6ec468611f383558c1f7909\n0x336950d272f6c63bc26e4279\n0x1b3f7b8d803a53f5\n0x2fdc81b4dc65ba42c43dadc\n0x3e59d5ae9c22e958ba00831\n0x1b7408466df74781\n0x488c417f89bee60fd58198de\n0x5ae8aae42c54c8062e0cf537\n0x25a85b6fd0dfbde0\n0xbce10ac393f56398e447f1d\n0x90943f6af4d7e45fcfc67d50\n0x1899b9ac2f78817d\n0xc24e0e268981b78942e84ec6\n0xa3e003154c3e7d96be5df7fb\n0x1aa4b7d55ee56ab\n0x65172348b4c24c53d2fd4da4\n0x82ad7b612fa165a4b80830d\n0x1e3929646dd4dbcc\n0x6e941bc3335d9c0d91b72c\n0x3262ef3b429cccdbb3697f8a\n0x1d4396ba7cf59137\n0x3bad2642b6b18b66a69d2d42\n0xc3e43c8d079c0e401c02dd18\n0x28b37445a14f5790\n0xc259b53b28eb11dfe8d0ec6f\n0xf709c3ca09de11d0166a9784\n0x1d2a2fa81699be1b\n0xcc5a6d6d9f807af2fbc048d3\n0xe97ef4f3fc6b85af3b84c42b\n0x1af954cf211c7cb\n0x97ecce00da988041769fd8e8\n0x78165f49a657855397920aa4\n0x530a7b08d8157d0\n0xa5017f7d923b376355ab52f8\n0x4e61da80790c217c382a70b9\n0xea63416221fa7d2\n0x4a587bc08aa15377afd06467\n0xe88d572857738fdc07604a3c\n0x2bbfdf03cda5ff9b\n0xaca4a8b7012f473564a24cb6\n0x15da6ea54c89a717e9831620\n0x185b3b746bedab7e\n0x2c5ab4a8da80685b0d49ad30\n0x3ac8ac13cebaefb57ccd74b3\n0x279f44f570d29e6d\n0x801b0f03f2160d86b5063e2a\n0x4df5e6cbc3e7eadbdf255318\n0xc234ffc20382722\n0x4ae8014ec6b10f7e1e53716a\n0x813276b8e614ad9ed24bee44\n0x2801c04903bfd5f1\n0xb11132fdb6970def145af512\n0xb5c34bb9956e15ee3f782e0c\n0x1f3c382f6f535fa2\n0x5e1da39d8fe2a2bffc1f1b56\n0xf7de7072e5487eee300d7f0f\n0x2c538b427a36287e\n0x1cebb5bfe6b3d75547092810\n0x8750c27f9a48c32b2fa096d6\n0x129702ff58cccd64\n0x783ed1ba8636522e6c4d7eba\n0x3f6dc8f246dae0f83aeced17\n0x8217b5743e92cfb\n0x8df55a5bbab8863989556ab8\n0xd5debed19451b25e31695365\n0x17ac76c824b1d6ac\n0x4a14f367cf1e041bf486e412\n0xb3766cc489e7e0d88689af\n0xac9b6abe7d58653\n0x23f203c844d8e112794dcf0e\n0x5392969676a28db4d1c55198\n0x7fa4d2ed16a4471\n0x315cfb24de5a8449b4bc2eed\n0x131f9b76bc663dd8b1c0e443\n0x1552acd863cd7d5c\n0x8dc6082e16bd97600b81f248\n0x91c05deb215d5af4e250b572\n0x24f74b92e0284861\n0x9c5584452a429436ff1068ba\n0xd0411e5f9655ede680d2ebb\n0x84d4c13c6bf6b31\n0x5caa82d907a23dbe8e3b743c\n0x7ee6e722664098690011e681\n0x2e114d5aacd431c6\n0x8beb8286185b24dafc9eb019\n0x5cb03a79bf1394c93c6e3539\n0x2aa2dd9b0229859\n0xf02cc88ec1bd9dd7a7e72594\n0x7c9915828bdb184d57d2cf2b\n0x15c680c55ab2aac6\n0x93fe87bdb385f9ab0482d6ee\n0x9edd130d1d34b7ae1f01f613\n0x1eff76f8e78973f7\n0xdab7b4a10cb750257277648\n0xcaf6d957a30cbbbe532a8c12\n0x312630bfb2c6c28\n0xb414a644ab865a4424602e9\n0x4e43c89e87d83d4834d6424b\n0xde5875e886d945\n0x607fb784b0f65bfb723be3d3\n0xc0a54b2414a264cf91a848f4\n0x2818746ff3058edd\n0x9d74ac5e24757b5791234d18\n0x2fc9be67eec1012d92dc12c5\n0x189c1bde64fae37a\n0x740f42486fb6f770abfd1e2\n0x22e84dcb2e96aea7d84533ad\n0x247da657d6bb9d21\n0xd724d0ada9aeeb98cc575db4\n0x393ea029a46e01be02936d41\n0x267ffa4b3db51695\n0x8f1d5152ac05f71ecb65768e\n0x31ab915cb54078f10cf72421\n0x13128ccc8969675b\n0xad2da25e0a748725b5e9828e\n0xd8c268b6f799d6eb4f939753\n0x31f64168fb6221c\n0x3849c7b67c25210b3d47e181\n0xa45bbcbca4a9b2fd199c55b\n0x3b149a318d0e31b\n0xc5fcdf2c91c2cc29cbead35e\n0xe7bb966938e5c0495befd8da\n0x2ba912ffd280de44\n0xe0e7d84fc171425e523a2d3\n0x9e0b0644774b98a085d80ebd\n0xdbeee035875fb89\n0x9555a3d8987157b6871ecafe\n0x97cf53c6ff274a5a8d9ef931\n0x24f04e899895bb87\n0xaacc52aa3213484c145381c9\n0x4db74b2c41335f35c4598556\n0x2b1c332747b7f2ec\n0x2e22af926b2e056d070e1f0c\n0x69e5c4ec6559c8690997ba52\n0x20e462cd4ab31249\n0x94b4f169560e8ff91f6e85ed\n0xf80fe6f2ea96ace8925fe10b\n0xfcfffc4d9d32ded\n0x3b5827d20dbd464c64728b33\n0x178c90cf3a5e75e3cbc72a93\n0x2d8ce391f092fe2b\n0xed2eda335d938146e6ce4f29\n0x459f4323c1ca6d043a2c1971\n0x27743ff7caea6101\n0xf0322141de03fe236a25bb03\n0x8c3a62f9a1ff90db90fe06ab\n0x228d3bae3c2c1630\n0x7cfe5085bb7d3b65aec99fc3\n0x32522c5a20211ab4c4cadd0b\n0x14fddf1df5704350\n0x89a9e45783e29f8e9371f17f\n0x582ec1311b37deac6ae82842\n0x2f9a591f329684ed\n0x3bb94877c61dffa1bf778cc5\n0xb5146ff42c9c7307846d1e5f\n0x85597b478313589\n0xb7b954ada5ae823395131f3d\n0x943a042957d8f0cf0d7e7d74\n0x1ab94002b4272940\n0x5e2ec92d5557a8a497466fed\n0x8955323d70cad9abd6a8d6b3\n0x26d6c63d7bd39531\n0x4841cb047fc9b1dbfd1d85c4\n0xd72496add337e78973db46fb\n0xedbacae16247e9d\n0xd7e6c5572d02a96938438f84\n0x42cc2050148d481e7587878a\n0x209048e571ea55ea\n0xa5e0345c4300eb3e632720de\n0x46d4e1678adfd0b1c52b3f8\n0x11bd0523263dc8be\n0xe878f1242eb9c9331bff664c\n0x1c09a240da01a443e60a9b85\n0xf9a759cfe3b71cf\n0x55f57708115a1ea4d27ef44e\n0xeeda9c1a044f4b864fef072e\n0x1c05a44abaa91dc6\n0x6e42a673bf10a09d17179819\n0xf68337f5157221bf30d92874\n0x813b2b831a7dc2c\n0xfa46032b3829b6c53bfca212\n0xa49904296095be35cfe72f67\n0x2639f45cc6577e86\n0xbea4597d8b05074ce2425818\n0xcaba97e086a1f0267355ef90\n0x2e2b19d78c7294d6\n0xdc10af95812eb400d76bbaed\n0xf966b5b1861fb3824dc9a739\n0x2b182d0a55c0eb4a\n0x9d57d6211ccf51e3a4a841cc\n0xb9a04e1e316c990e4e5874bc\n0x2621c7463b2e5dc4\n0x57b9f879ed8903f8799ddff1\n0xb8671a65c6d38cedec4ea1d2\n0x199efe09ba018c2d\n0xc3187c4591d98a971c0c059d\n0xa3ae351051466d76033d7210\n0x32e02bb63abe0db\n0x9126af1857fe5ca8c664d684\n0x2fcda9e260bece5becb61438\n0x2f0b3a05592c3ff6\n0x10850b0149e031cdcafb1a8b\n0xba9c6cf959d3451e4e10c397\n0xa6953fe001c512\n0x79332fbfb16397af2b5440d6\n0xaa3913817479db7e180b036f\n0xbde229d827dae78\n0x1c3c8076ad0a700f19f36a08\n0x147bbd40344a904884bdc822\n0xc3a374c5f86bc4a\n0x5cf63c2bb60644ad5615a821\n0xdc9e07ee1fde97376e9690eb\n0xcfef261178358b4\n0x3bd13ac6a9a555b679682ab5\n0x338187fcfc3a56f6a08ad949\n0x1c224f124d6cd6fa\n0x72695ddd8d05d28af117c8e0\n0x784a66b23b7fadbc14d524f7\n0x1d2348e7a9d64418\n0x85cc8cffa5504bbe4415a076\n0x57927b36cd32935eb3a2d688\n0x2bedd8289c48f616\n0xafcd7ad59fe90c6c2a581bec\n0xf589c73393d771874cc62dbd\n0xd81036daa0bd7b3\n0x734e674c490678e48c2590ef\n0xd4b962dae92b0883059b0136\n0x215dae8917ca2cf9\n0x950476cc7c54d9c80c11c753\n0xc6807bdff946e86408549518\n0x25242d06d2b50c91\n0x358e4a5513223683b09fa55\n0x65925c7f4f57eae4d8d86c1e\n0xedcaa900b79fe4f\n0x665ed16fdfacd61e588e9850\n0xbaa114a46f354c0e338f0f4a\n0x1ef99bc6a5d6bc58\n0xe36840d69b21202d191528dd\n0x16dffe4fc610ae03ab7cb5e\n0xc101b76b698836\n0x26c2a06b7e86c1eccc4cce0b\n0x5aeab217427adfff179dd966\n0x17ae4d419cdfc968\n0x761b6576ef526213d6f4f8df\n0x371edd0e1f1e49b5758c8e4c\n0x203845e57573ba21\n0x8c7df991457e06b12b6aa814\n0xc696b893f1ac91c1321ee60e\n0x1fece27b81f7ae5f\n0xded0914fe7db94eb9588f8a6\n0xe369074b93bcd2d71f72ee62\n0x1e03877f03d90413\n0x8fb01b06fa1c2655ae57d185\n0x4091630061c56250367ed10\n0x25bbcc77100ffb77\n0x11c9647760fc6144fdfe9112\n0x9c47303a455232c14618fc1f\n0xe00ac5871a29e27\n0x1f97525859af535f915259da\n0x9d1ac403c41514282f162979\n0x280ff4108194889d\n0x3c3a850755e1b57bb620c9e7\n0x320c90661e186770ab810b46\n0x1f27a585641a6fa\n0x3c9b727b050c515a4716c1fd\n0x8445f3449a8e2246f0156f45\n0x7a6d8a7c20b2504\n0x40983304063d49ea6aff0cd9\n0x9a9b237d18104faa4320c3ef\n0x1c9649abb745878d\n0x623b2f2c1d20024ebe205240\n0xaaccd602a40f769b7731280d\n0x29c4407d098125ed\n0x9bba89b933217f950a4da736\n0xcc9c61a00e91168e545f0df8\n0x125a34f9ff08c637\n0x36bd45a2bf84aea1d8a9795e\n0x3b1d3d0b449614a122769f4e\n0x232ac6080a75f09d\n0x81a015e6c0b1b0ca9895c8da\n0x55ee3b739b61f2d9ab51dec9\n0x2b7e549999ad844a\n0xa0ff12f798bcc48218d3138b\n0x63334053a94db9a94b4163fb\n0x2c5c1df3ef8cac3f\n0x7738a1472561d6573d1fc4da\n0x10f00f9c240982772730fefd\n0x1d71cd17987c7d60\n0x44cb61785b134fd33802a26d\n0xe7d350e990859bdf7977032a\n0x14329903439280fa\n0x49eec0d4bfaf77580b5924d7\n0xff7123a5a8974320928a792f\n0x2aa793accd2f8882\n0x893d4e71b776435fe3b3c5d4\n0xe55ec6aaad9cbc7660241ef6\n0x26870e3428da1554\n0xefaac0b02c700f362e2227ff\n0xc338f0040dc47aaf465981ab\n0x132115432cb86f40\n0x68cdebce41d60087fa5fd98c\n0x44b38a56e685ddb44b598584\n0x2b80f095f3ad33d2\n0xb6a669ba36387bc94f5c4586\n0xa7f733dc381f34f63f1aef74\n0x304781252960882a\n0xe2bcbc20ef0d2698590edafa\n0x59df5b21ceb704ff1f81ab08\n0x691df3ef70e4c68\n0x6859787674d56fa1f279683a\n0xa6dde101487c8d3d4ef27aff\n0x2d37984c87cf2993\n0xd01bf7832a5fa8e39da576b8\n0x7152ca583c2b0c6331a67ee4\n0x25996b84e8b8164d\n0x69fbc1b478cf571076963dfe\n0x82ebf6cd223ef57d10db8404\n0x1f0e24d3a0e03fed\n0x3639e8cedcbe61638cbd2eae\n0x89581f998205186f5e120242\n0x4014ba767175617\n0x6ce16184f687054c016e9798\n0x3a9dddad43ae8521ee90f063\n0x1e4cce27b86e8a8a\n0xecb53f23d247a8673c85ce67\n0x39f224726d34d6a5d8be92bd\n0x23dec6a0bf17079b\n0x67829d5c95509bc701ed8e31\n0xa5ce64b51f0b3f957b599a91\n0x1055e299ca971f0b\n0xf87944623325a5fcf0c0750a\n0x8fc3642971a490c061bcab3b\n0x19cd3d838710bd3\n0xe8dd30e98c2f99a2e7310a36\n0x9c1d96ef0a1322964798a8e5\n0xf085168e8f773eb\n0xfbe7d58789c96830e4ac640c\n0x7016112502832eed0ed0096c\n0x2d6d5007439f9d97\n0x134dbd278fa0a0d95bbf592b\n0x879e248f11f855957bb2b194\n0xcd66e35c09aea79\n0x99df7e97033200844c071ab1\n0x1d1ee8f7fb674ebe685bdb2d\n0x24f5c744aa0a131a\n0x85f8c1c0930be32f88117596\n0x7c95e8b1db3fb30abef6fb26\n0x96d8a5f03a54b09\n0x808e85ac20267965b75bcffa\n0x82cbd81df1399af668609688\n0x14224ae99184541c\n0xf7fe82f1432ba2575962935a\n0x6580ddbb6a2b6e2d5c8263e7\n0xe82df38a8bae887\n0x6992c6d0b53eb105bfdf5179\n0x9a24e1c948113ff672baa83f\n0x28bda09af7ad28d8\n0x3a16bbd39848da8396c116ec\n0x9687e58af9bc7aaf3eb185fb\n0x16bf096d88fa2c7\n0x2fe377c3070a70a6b8405f46\n0x4db52166ee3c9a86d8f5bb98\n0x1a9581dc1e7dc478\n0x962b9ae5414d0952107262c6\n0x92be066a538b616850bf0c8b\n0x1f268529727f9ced\n0x785de58d7d65850ab1a67f4f\n0x6f26a391259de6171b157f8f\n0x836fe6173cebce3\n0xf694d63000bc4774ae6a421b\n0x5be1747085a01b52844f539e\n0x1aa51ed5071168e0\n0xd260cbfa5d22806f37ce740a\n0x24c6b1057922340739abf774\n0x176232f9e5f013bb\n0xe9b7571e383ff47fb09add39\n0xaf4420a8d73dd5dbe0ecfdee\n0x3f49ea506d56749\n0xcd2167431f21a02e22e7ea6\n0x1d0457d350e8a33fb8e3322e\n0x2721b33bf2de3ec8\n0x8e618476a9602b8b724b1d0b\n0xdd23b0b566848b52587bb601\n0x1c28ccb53ba82319\n0x3a162e02bebd26eabdabbad0\n0x904e7b96f67faff25f8b8182\n0xe4ba702a3bd3518\n0xaf446eeb21cbd75867d8ab0b\n0xf857ed65a14893fe063622e4\n0x3ceec7fb4107619\n0x7a0b5002b69a9cff60db1bf1\n0xde1ca28733e763c0a2257c60\n0xcc26495aedda7e3\n0x7dc08152689d72bd29aa1bc3\n0x918dace64c1ac126bc4be2ac\n0x36ecbf90d70c8b3\n0x4a829f5dca00bf5b53ce32ea\n0x32285165f0770f1cb522f94b\n0x28d832cf7123c742\n0x4c4d4a223eeff05c647e9753\n0xfdc59aab9f9b22c3deabf819\n0x12b56baf284df18a\n0x82925cb29e7fd70da6666d12\n0xdef73a6032b5b962c7a475d9\n0x13ecd18e2d3dd4d1\n0x5c6b3b642f6984f7d8314eaa\n0xa374aca2cd9d868069e926ad\n0x407df336d23501b\n0x5a1773bf1f8aa7b497d00b4e\n0x4219d81ee475e43842fc5fe0\n0x1479bad1ba5c13d7\n0x3dba9cb83fa6d249e2b350f1\n0xd169df072d10dab404c1f9bb\n0x2345f61f97a2b2a6\n0x631f8592fad0ef5a56b5ad24\n0xe6481289b9585d6f16d3d9da\n0xe4edf1d289e2022\n0x464605440b200f65d95ed837\n0x46e65bf42304c063c8f15b94\n0x16a10296f33ef73e\n0xb042fdaee355a6b893f738da\n0x1fd39a155850789440e003a7\n0x2b3d4573f08f84ec\n0x3233a8a13de8825eac4a9ae2\n0x9fe57847387e651d4885374b\n0x2db5e13315c86603\n0x457f10a07cc4846a5753fe7d\n0x90ff323c9c98cdac6c2108a9\n0x27c3b81298af5557\n0x108f7010e5f2c71a6a65166b\n0xecac05acb9ec29235d367471\n0xdb3069a79dfb67e\n0x215dd9e074d4f42cd554f625\n0x22c0d60a9347784a79198be3\n0x245ceaa355b40370\n0x879dc30e3229c5ecb30c80a8\n0x441d4907e3afd914aa660b6d\n0x32869537e4ba43c\n0x84a64842d7592d98a90087fc\n0xe96d9754d6b9259412d9a8a4\n0x19c04a58bb729898\n0x1a99f5f667582a8cd1c8e622\n0xae3bc938dc68c438865282ac\n0x15b37df75cf88b3b\n0x9e682a2cdcd21d5b89d76ad3\n0x221b131e7dfe00e18ca94e8a\n0x75f107f7d34b703\n0xbf26c4cdb4009452df2660d7\n0xc07d30f48b619765d81eb2e4\n0x25ac8efa3d6226e2\n0xc9a4a6bb6c4b566a4f8c9a70\n0x7df5fd630d6b548cbcf73f4a\n0x6c6ada69107e50e\n0xde90504eed3ef46bbbf5285b\n0x75b4b1694e001edbd165a9e0\n0x20a3664e01ca877f\n0xc1bc16a7dd7df2195401f344\n0xc86897b3ded28770a8c26913\n0x26a99eb7d0dfea28\n0xb0ebb4304a0735b4a5b8432\n0x839a687b8ca279512edbaea8\n0x15ed2943bcb5a067\n0x1aaacb51418bdb0fdf7a2dbf\n0x4d26120382c6ae4e42f5d745\n0x286780475a68cba0\n0x61d0d9b8fe4578cd7b59ce48\n0x851b7352155e2723c7f4e979\n0xd6d4f74564c0b78\n0x90ae6e88c152f0cf9e6e9719\n0x4fa10e5cf7ceec3c01a7a983\n0x1af0d8e0d2fe7441\n0x40310bdf2e1c36843424c4d9\n0xd571481ae42176264fc0c4d\n0x949c7387b5a03ce\n0x889dc625aeb982be4e0905ab\n0x88e5ea7055abc4d11ef35df\n0x2d63f0dbaf73313\n0xd4f6b873eb3791972cf80e81\n0xfc8e09bafb3a24aa0ae2afb7\n0x6b2cb7776f95fc6\n0x73b66ba15956713210538ab1\n0xce98a490bd41331bd01767ff\n0x12bb56a5bd167902\n0xaab97d4ef2fe0e653cd4db4f\n0x7d58276b9a7931fa939eb2c\n0x8a4ab1543939f83\n0x15d46cd1982d465c94f3cace\n0xaf3364c56f88efd69fa68ef6\n0x1fc56209c60d69b9\n0x17bebcee6f60ea826280fe81\n0xd4c85995cf2c350c84168c53\n0x270f38fe74462990\n0x53b5f30eeff5f44a120a2e81\n0x85c53f285b5770bd950d195e\n0x2c03292c76a439cd\n0xa200272423cfb2890c16fef3\n0x17aafbbc105cb92da904fd56\n0x2ae3f14102d27c3\n0x9b5ef8fe7a12c7002f8cb0bc\n0xbdf2add7d81f44e714e4bdb0\n0x3014b6636c18185e\n0xbe\n0xf470b5a840e53edc7b7fe7bf\n0xd03fc86552fe5f6c7049e527\n0x1ffa3b3b7d027f27\n0x5d65e18cd1a19d22e037c1b9\n0xb2d2392531237936b1cf4a82\n0x1cdc43984dda8137\n0x407faf8f4e769815d734c48\n0x51c12e9f92b1a26dec2a386d\n0x2baa55e6f96e544c\n0x861937d3564b7b6855e00f27\n0xa33a3930c7ef9d1fa85688ff\n0x29370d3e73fd48f1\n0xb52c170fb2887cc3b858cb48\n0xe1b3f67b4287365a78cb0b3\n0x234766f2460abfc0\n0xc0618429dc34b1d9ab218736\n0x2044a50d5fc7f906d83936e2\n0x1e063226b8aed800\n0xac4bb04fb4c670e797dacd55\n0xb472d9b02e5dc9975b6edcc2\n0x29b19fab8807d8d0\n0x46b9e755767fd6c69bde1468\n0xd423bfb71daa47cc7afd2182\n0x1e5e5103e6971574\n0xd6058a0ceff2ba1192e8ed23\n0xffb36c7ccb391f4296c3ca3e\n0x23a958d148e68acb\n0x35e74e6fcd2809ce8b563090\n0x1969659221ff4fcaa7f521fb\n0x1f6ba8eb4a232f40\n0xf37b2228fc0ba7e9f1bfc611\n0x10c8955e052cb0e5c791ad72\n0x18e3c1b0db1d1ea2\n0x8be4634bdc8b1aaa60622393\n0xf60839d02b912390202e5a50\n0x2c8d205159dee1b\n0x697cb2ba1717027e9959223c\n0x86bd5a91e38a2f3c13593f19\n0x2c0cb959d187b996\n0xb22efe7699ccafda14124ae\n0xa17a008f2a565fae6b904854\n0x14009f26f8557e5\n0x2a31a28b1b718460e68894c\n0x72c03ef081e5754c9ebc8d7f\n0x2a47892f7ac0f6c0\n0x422013274584cb774ccef21e\n0xb46a2199295f1ac83e852f51\n0x1b1c2ea00512b225\n0x5f883c0d3737dc672e5b1200\n0xebce4d4d207090298eab8137\n0x67eb673edc70bd6\n0xbea765872117f3501ac0949f\n0x25cf00e246cbec82ff5b5f75\n0x9e2ba76487b9d1f\n0xfe8011d81334218f1abc304d\n0x50f6c9549bc7ddb61daa993a\n0x1b21997403112dc4\n0x9692ab9cd391f5ae03b17c2\n0x4be6a364e751d9973f2f42e4\n0xd8571172c1cc0e5\n0x58b31858f294ad4ef0a8261e\n0xd82a6dda36cbfba1ceee5df1\n0xcc8155be30b1d3b\n0x31009dfe4878216d5d9c62ea\n0x23d50f0e7e27dfe69a6f130c\n0x15e6ea6528811799\n0x3f8d606d63cfb9bc2b7e1b31\n0xe6df5f9893ee193cf1acc1cd\n0x15c9e05458716f1a\n0x796af64a9c13971a6845add3\n0xe8cfae955dd17bdb8583f0ae\n0x163e6f39093ef8a1\n0x4c360e0e96d7fe250eb35a8b\n0xff32fc8a83ecf3b211c51de\n0x28079af20595672e\n0x7db765b45a3202b8171b2c8c\n0x5bb3f16a9f62e657f56f9adf\n0x10e2a4acc97eb125\n0x97ff2eb45b2384c2fbcc7476\n0x111cca274772bcdae061ac7d\n0x19bd496c6eeaf10a\n0x5a6ae0d284e820a945c61760\n0xa357835a31baa944fd79b388\n0x2d0629966da3aeaa\n0xfb9b2c8df95a44faef22b228\n0xdd21a031e564cd29ccb092dd\n0x2bf4b110f5a16239\n0xe0d6d8b43552c9f4a674ddea\n0xe319bd156b7010ca77374e30\n0x12fbd6bca06e6455\n0x7bb5275a45047c2ed8bfb06e\n0x7e87bdada507bc4972b2eca7\n0x2c65e565a9c1190a\n0xc56b450f32a15b93ce874be3\n0xd4b2606427f4b51405ae0787\n0x11343b3173b0e724\n0xb5467e42aef4eff709decd1e\n0xa9d73ec61fc34b313a4cffc9\n0x285fa5070a8d516b\n0xac65359a0633f1fd7a41ea87\n0x6b6919c8f8d677cc53766c0b\n0x1abd8bea5f8c68ad\n0xb6435d41cac408ee2a8a9521\n0x86965ed350dd3ea91c56bb30\n0xceb0dd2b3d7b7b6\n0x4236412bce75f2042fe7f9b2\n0xdf192cba0c3aa1682aa1f79f\n0x6f6848c47029e62\n0x1dd1fc5416b0675a2a9b8309\n0x257fac8977dd826e10d9a690\n0x9aefeb6837c0e3a\n0x9a42eb8d9e13dc00d109d688\n0x2c8f7a2e8139f5dddbb05a5c\n0x3b45156b4bde0c0\n0x6589eaa166da56bf788c68e3\n0x133a767524b8a1eceb9cc96e\n0x7fa469e89867c46\n0x8bcce6c0b36bf4cd7ed6d22b\n0x1b367f9243cae1b0874ae26c\n0x2b920081cb333081\n0xe18f90596086bf9fd0de9544\n0xa97c40432125ddab558e370a\n0xae702b61ede4f83\n0x6297e7bf21daebbf3f2e4911\n0x37a4ccf8a80a56ceeac9d390\n0x1f90b2521a7bae49\n0xc6a746498655b71a6860996c\n0x313aa25afa40ecbbc0fde520\n0x14d043c9834e3885\n0xa437dc48ebaf674f4ef058b3\n0x94f7fac798127edaa6870608\n0x1345e0ab5d9c4b7a\n0x48adb73db63f2438d18079d9\n0x89ca8b521a2fabf1610a83a2\n0x16d2774a5acc5558\n0x8f3e6d9e6cbb50dd32518590\n0x415e5d5a31358cb7d0aff02b\n0x21b85d4eca7b34b9\n0x2fcdaf92e74a10b7b38d6008\n0xb018b3cfd5eebd707994002d\n0x210395ff3c92c2eb\n0xc713162a32e0ee938eb72f13\n0x790ed0aa7c1600ba4b84c625\n0x8c9a4a49462c7ca\n0x755d59c67ac5eb3c9ea1bd8d\n0xfea82335621244d346d9f8bf\n0x2a065d2aab28df13\n0x3d8178ec8320ba573a433e18\n0x1fb9e7dc8635b21435f9da9b\n0x2c28da8cc47fdca\n0xaa48d08260bdc4b6ab2eec15\n0x44060d93d8b6e2987b975393\n0x151566663eeff36f\n0x711fbcad6367050c55df9144\n0x970c2a4548b985bd0d517537\n0x2cbd8f5967ac91cf\n0x4dc1628424273b9441a0f559\n0x2f34c1dfe4984b2cb25c3097\n0x19efc9317e805e05\n0x7e53cc1ac917977b235f2914\n0x6a45c9440336bee473a130ca\n0x213771203aed2b15\n0xc4646c86117fb7860e9945f7\n0xf84372e2e922f7c042352eb1\n0x23d5e89244eb035e\n0x78a3ed4c0ede18f0f186ae13\n0x774a4cc9adfccbdfb8a843e3\n0x30312d2b5ca9186b\n0x5fbc954e96b526320a875010\n0xe53533acc8f9f807b5b84927\n0x2cb4ae99766ccb51\n0xdefe31b08ff6d18ea6df83f8\n0x34a3743cbe7e47c91186e757\n0x2c742915f70ad8b4\n0xbf792b6ddaf718aa3d445b0c\n0x297c820b52b3a8052f8660d2\n0x1a81e3eeacf3f1d9\n0x882206ca505a215590106d81\n0xedfd38b2e63038783a526c12\n0x26d5706e8f10e914\n0xb99d5177de8a116dfd1ebeae\n0x30fb7a4fac7704142929890f\n0x8557fb7e96c916e\n0x38baebf50050ad7e785da0a9\n0x251f03e026b72806a002a5e3\n0x11eff1b2f7ab72af\n0xf6e58b58d257b4dd34409df2\n0x7db07056f744040ea27d11fa\n0x14d8a19ee3ae90ac\n0xbbf70e34dd9cc6cb915394e\n0xeac3f337b01d1a9dec6b2ffb\n0x2fbc7c263356b017\n0xa2a3488ee53a49565db5154f\n0x94a744e7e4afde39562c4905\n0xc80f41a269bfe8a\n0xd19639cfe34292ef497191d4\n0x87e2ca0e07fad504e063814c\n0x303d0a4228f627e1\n0x7b7b4626f06a2b0c3f740483\n0x4544c2a1641b48c8df41dc9d\n0x54c4cb94fe71fb8\n0x1e682fa8a53949ade33f5885\n0x2c1f46f84fa329f810ec9659\n0x14a724ab1850f68a\n0x1662d1b16910280aee82412c\n0xbe4cb9dbc8220f2d6ae15c0\n0xa32ed9fa2b38a55\n0xc37b4073da276ef0808e336d\n0x7a6ff6026b128f3820ee3ac6\n0x20628628465b28e4\n0x781a62c95ad5916c4895fa0f\n0x1acfc8b9f93c3e36d8af2dd5\n0x13671a91e3338a39\n0xd5c874039402d5e95277c5af\n0x6dc909a7755e8e7d64ecb574\n0x2c28d760d412cd21\n0x6ec9f68223e26c3894b66131\n0x5db7cd8e925f27ba18ab0e12\n0x2efca34fe528442d\n0xc21e68d7555c840b43c76f11\n0xf094b109e9345cf60db2d395\n0xb5f25c313d7a1e2\n0x848f9079fdcf4742cc97081f\n0x247411f954779cef6474c370\n0x1da7b3db01436cf2\n0xd3deaff8a59b896349f9634\n0xac30f7c31e7eefbd7ab5d1e3\n0x167c9aca3dcfbf71\n0x1c13f78525bd5c5883492251\n0x3ff7cf50e203332a9a48edc\n0x1d14defe30453e33\n0xbd26776b2438522bc2fb7bc5\n0x16c38ddb25608a1646049a65\n0x248bb157197a2a18\n0x787ceb1b528e1521d944e6fc\n0x82a114d50b2a9702290f5f50\n0x255d4c367b902449\n0xcd905c26d107b415378c208\n0x9b76013379cbbef88920d0d9\n0x396c5b405bc4736\n0xfb43f9e5ef990e75a303b374\n0xf63b9b4b7977402fd0a23751\n0x1230224b725fd5ee\n0xfa7a5fcf11912db0be52cf1f\n0x7f02f266825bac8c3452fda6\n0x303260e4f06a89ac\n0x46c82b69353402cd1fd49329\n0xa49addbfc889c238948b9fbe\n0x1f411a8b9fb84b93\n0xf9069012654d17c7e0d5160a\n0xaebd2cf0260e5ee0b190d26c\n0x24b0c79ce5bf9e07\n0x595a902149fdaeea343e3502\n0xe8729dfff844ea89a783df06\n0x224ac3c19ee6df45\n0xa9ba6d412f5eb905bdd03b85\n0x7664025ef70118bf822fc2f\n0x1b0f633d74983dd6\n0x251e84992c4434e6dea326d6\n0xcdd859dcc9ffd480f1aa3927\n0x157a9aaaa67a88e0\n0x705e0ce60bd43b52857675f7\n0x5634b19e69e196061473baf2\n0x20edee5bc0d966cb\n0x7edde2f4b5dc15102295b041\n0x25479423df9cc1f4c4da2a6d\n0x1d536c0f2d592251\n0xe0e58e26102a1efd481fa427\n0x47c056fcfa8345ddb395b181\n0x41463579b410649\n0x8671c276c337f0d67fd4b767\n0xa390f4e34273481042abcfa9\n0x19082adb22a76785\n0x48f2f66d70c49948254fcada\n0x18a7b26cdb8cfcd29a5af574\n0xd385dfc1725db8a\n0x9731a3524738fb2a2ade94\n0xf18a0f2be181c0e2d5799772\n0xa9a508d149df77\n0x2cac25654f6f3520d41f51bc\n0xae1e97a02a8c207a2362d5ef\n0x2854822a831df60\n0xb3a273493fc56f969d02689d\n0xda944401898f74137792a47e\n0xbe5ecba66570e8a\n0x47ded35e5fd09eaaae983289\n0x3be3c65ad326be966f5b3bdf\n0x9b73fec43d95360\n0xa9c94e9eb1e01eab1738ec93\n0x1ac99cab2f7f8a7610f4c6bb\n0x78789fdabaafef1\n0x13810136a81289c29b48b095\n0xd0d069eb9e68c67777f7091a\n0x1fca0d795ecfa7e0\n0x22d7af31cf897ad63c5f5213\n0x47c7030cee042059b6e3577b\n0x1c8c21105f7cd6ff\n0xd4414517bb1b22c4a83284bc\n0x28908dde3ae29858a27f895a\n0xb2d6655a08012dd\n0xcea0bc1ab656b46fc243392d\n0xa0456c77a73015926f7288d3\n0x1c362fc86f8c1d0f\n0x2e565ee8af739e4bbd5e38db\n0xbce29a4d55d14a24f4129745\n0xd3c12d9d9d739c7\n0x7d97750dc38f3abfd3d95cf7\n0x989aaf3ea9ceda9955020b38\n0xae8e94f9a303122\n0x1067f352610a5f0a8359abb8\n0xf9ad807f6761d7c81c4847e2\n0x24c07d9328ac93a7\n0x2ef3565be909a8969147aec4\n0xbc3e2434900f2c41623aae66\n0x198795b30a138234\n0xef23931e156aff3085ffa169\n0x4a2768ef7cac473b0a7675e5\n0x2ae2aec518df716e\n0x23fdf80d710a58367fced932\n0x4b3110f77861b2235b13938f\n0x22b3451e2aba5fa4\n0x489f16ab0f6615b7c0d19f73\n0x74974a86ef5fc0bc57aff13\n0x1cd61166b6ccb3ec\n0x30dc186ddcb7aef6adaa8674\n0xf8d1438e18cb683bd92427a4\n0x1fbccc2ab592ed23\n0x5d7738ec9f55c1f7643f66f5\n0xfd42f4cf748188230b046ca7\n0x24ce5c478d90b4f1\n0xbace1eca3d4eedee40223e0c\n0x97063b3d2a16f38bd39c2164\n0x295c982feff17dd5\n0xebb080a465c9384cc9a14706\n0x3c085a42d48e4b5ab4e6e451\n0x17f3b5c5fa4b6067\n0xc39d3a58152588cf25e876d\n0x3fbecb7fde8c8dde6be615d9\n0x1fb8449a8c0ddbe6\n0x78b44711a98a3f7009635c04\n0x58f519c3e9c701820dde1e46\n0x326955c70081484\n0x308a812b0d52741fb86e6e36\n0xdc2c0f279347d4ffa4b66b94\n0x18bbcc3129b8f07e\n0xe939b4923f0f4cad3cc8bab9\n0x42aa047c4599f8c097081310\n0x14637f70dfd9744c\n0x12c7d7250728f78b7c6ae4fc\n0xf52054abda265b632548f41\n0xd4400c7e62b2e17\n0xbd07a8c650163a134c9dcd21\n0xee43185686c4140abae3c04f\n0xfa5bda5f5845a30\n0xf12af166986aa927d3bee4fa\n0x64946727a0147461cd2fbbae\n0x28eff8b0dd117cdd\n0x625e1ebb0a467d2fa3e160f2\n0x5d9bc850a4c1ace51b330faa\n0x274890368da93ec7\n0x262e259ade4489612ab93dfe\n0xebba03f70326e4f8866942c0\n0xeae132e1272d51b\n0xd779f287f4a7e8bc6af4fe21\n0xa0944d836d4948e34522a7f1\n0x901e46c5763df96\n0x2fee4d9e836a0b206611e20b\n0xf9aa57aec56c665085871187\n0x6e5c856bec75f11\n0x9052dda690ce2b0b5e035adb\n0x6774eba392a4bf969f69c092\n0x168d77fe201f9d8e\n0x1912d68caf290a5619283e2c\n0x33d2feeded410bfcdadf368a\n0x7370e0483bcf693\n0x559e6057b3343663f5d100c0\n0x314e98ffbf39d185a406f2da\n0x1d6356ef82b6ef58\n0x4eda86f5a76b4ec05d118838\n0x4564ccaff026990f3fdf2514\n0xfe99d9b2692ba5\n0x3cd06c15e90bdcb9f7108c8f\n0x5f5edb0776fc6741a4c9e1cc\n0x72691274c56ff9b\n0xd7bb60005edd4b46c84915e2\n0xa5f6dadb8bd2473bf8109b9d\n0x2c85db152ac96a94\n0xca504f5b903ca6c7be8f3e41\n0x2cd2faec6e2d119b70e8a76f\n0x1e289334b44620e2\n0x80c7c03cba28c8a5de7537e5\n0xa0bf9053f68500eec3a5e445\n0x7dd3a63e1689f58\n0x32a6e0f5726cc4862bcd3115\n0xef4dde28bfa4777eaea30e28\n0x5d51ee1fea2599d\n0x2f917c0e966f4d66bf9c409d\n0x41ed268e84f09ee650f8dba7\n0x1cd82511b8140c50\n0x14011024f00040a44f515220\n0xfc037721b586c8e64ec3f4bb\n0x9e6f577b268e123\n0x33f3b6f4c03e2f9675225200\n0x5eb48a3d8a0c6ae9de530884\n0x1802f58b01f0f9df\n0xb33c0a8df8425f666dc4a325\n0x1fd604a845d97b9d1a6abfb1\n0x10d0263aa3966f27\n0x47647f8d8cda848cc561ee70\n0x504552e8bcd10aac1d22c5de\n0xecf446ccf8f2507\n0x14e4e90342ae39a37239bcec\n0x9c591b8b49c877601edaaf34\n0x184d75f770ddfd6a\n0x7bd5d8ae454f82eef8f784ca\n0x3136eb38d4d6f42c2709ba07\n0x4a631f41a61899a\n0x12d3ecd8ce3de9235f6db4d6\n0x8a385bde7951bdad96522d83\n0x118fcc33fcd8f29\n0x8fa37cac496982e16c3f3d1c\n0x2a4775dbbedb9aa90c5ca0c9\n0xfeeb07d13d4d072\n0x87d4967981eaebab0c1848b9\n0x34dbf89140716d3cb59d1178\n0xfd17f7470bed0b2\n0x438964daee329d9d4f25635e\n0xe6b8fecbfc3b43ca353a4d85\n0x1f6454550d171aec\n0x86bd256783731516e12d841\n0xf3a598073bf43db491a7ca3b\n0xb8d0fd39c29ad34\n0xc322648f1f8fc1b0b11f16c2\n0xd462aba8b2e1061e934ada71\n0x8cd28f07fbfe3b3\n0x371992bb4d9396c9b2cee390\n0xe37d5a103d9ac2a543195846\n0x20a1dfe540458fa7\n0x42ea5e8dadd6a35ab38d7dc6\n0xb5695e750bd6e42c94448842\n0x18aea7fbd858d7a2\n0xd22e5fb9111c7a4e515fd735\n0xbcc80764c54f3f43444f8596\n0x1c9781b871a806e3\n0xa819835f4834271f322968d\n0x4c385d52da43811c2246627f\n0x1e5ff805517fb116\n0x794fa21a1f5ac6ca184ea627\n0x595a6a323af35cca759c3022\n0x28efa74764481358\n0x944f97f4d2ba4fd0fe09bc2f\n0x3346308efa509373a3ae1b9c\n0x29489bda26dc69aa\n0x92848583e6fa55d983f09f18\n0x4b4c7be1024b959816864a15\n0x1f1ab8c96a6318ff\n0x7a90edcec14e5366e19b9250\n0xedafa59eca62897f3b575240\n0x55913467a8c2d8\n0x5595f7da741a6503432db33f\n0xc782ef6c0294a8c48bd8da0d\n0x4aaca22a142e7fa\n0xa2ecc10ae40d2a3ae2694ab3\n0x1dc61a1e67fb10cc2c256d87\n0x28556a88b4cb9d27\n0x3755f77f66f035f10a4c4a01\n0x77dc2f78fd85d999768dd34d\n0xb0ebb5c09d4a7ab\n0xba7e4177c34a7041ce32ab87\n0x3a82f6fdb9d328cedbee81a8\n0x28e44212b76c8e7a\n0xaefc515320ad28e6e4f50b5e\n0x96e6277fab17d4ed41b99141\n0x290842a16b803039\n0xac7b0a68c88913a1a6f1f7b3\n0x68271e5e6619548927764e7\n0x9a11b9fc9cfc754\n0x9a81714765462ecba535da3f\n0xb89b810842412e0cc586b937\n0x5b5d02efc51ef81\n0xfb97b4b0992aaebb846c6fdb\n0xb86d2ca524bbc80fb3c1d943\n0x16b5c4b6b4933781\n0xd972323f473dddbcd8df4f4d\n0x18ab92ec7e9eef9a159ca19f\n0x27014ac03ab89e14\n0x65f36423ab5df1f1e1fc1fad\n0x88674a98287a5b2a1d6493e\n0x2e7c3173d63d41b5\n0xf871297b6d892ea871e53557\n0x2d8f695465ded4e336fec31f\n0x268c4dcf343a92f3\n0xf036ccbbf28d705dd9fe9076\n0x1672dd197835b11387aebdb4\n0x3dd3a39ac3a495e\n0xe568ba118f673c080e058705\n0xd2e6a20ecec0853f945ad9b1\n0x16ff71f399a0ce1c\n0x1136522a60e986a1a4d4ed42\n0xb982a6539a0de41eca4683bf\n0x1207b96faae43d8b\n0x520494130f3a3e1abb6a86f4\n0x635fb9cc241c4f4213358c58\n0xf4c2021b1a24b4d\n0x6c152bd72142c5eb9660c538\n0xd54b21f3d7500b5a1c7cc8ec\n0x14ba01b0d4b40025\n0xd7fa7ba63bcadedb1376e198\n0x1a1eef38199512c00b0c15e5\n0x2b7421ac7df102a2\n0x5adce44194063b3ed83e489e\n0x4b2341d78ad8a2ec6c894a44\n0x127b49eb604a949d\n0xa7cdfb61a1dde38f2de5ed\n0xa7d86489ee8e6e4d52b95aa9\n0x1ae739c94714210\n0x94fcfbe072d4728e6c94a8f3\n0xc3e2f291c7ecf69cf872a0bb\n0x2b0b42733730fa9a\n0xfc08e38fd67c2ad89ec0ae77\n0xc6c0450a50b5f23b52e9d60c\n0xafed6a937030032\n0xf5b21edeb8e9b0ef2f2dd9ab\n0x75851ae62a77710331623683\n0x1f27587d48a0456e\n0xbf901a94eefdc040906cb24c\n0xb55d40312466f8da61007aac\n0x1adc712e34758e00\n0x3a2c084122861c501124eef5\n0x30726fc80ea80e4bb353974c\n0x26ecf462327a7e8\n0x24224013052382ced90c0d0c\n0x8c516df74309ad6dc958e6e7\n0x714b668ffe2762a\n0x65d34a86ca1ae8cd1830cdcc\n0x1dcca70d674776424611e81\n0x206bd9adf1f75c97\n0x65f06d57efed4a19c0a2bbf7\n0xc69f4aed70b9ce639b29056a\n0x246ca03381f4edab\n0x903c8a1eb37dd63ba43d3946\n0x3defe3d0f3c682012e000a95\n0x178b3c81a4bc29a7\n0xdc1434ea6fc2f75323ff89f3\n0xa5bbf0df6d19f9521e915bab\n0xd9d8984228ce313\n0xb7024ea8308e553bad8cc9ae\n0xaf6d832a4f2eef3cb50589bf\n0x22be7b5b5e64063b\n0xfa162854b71a190b2e84f641\n0x7e122ea55ed555664c35abf4\n0x2c7604dadfbdd847\n0x7d49177e77ba789d67779320\n0x236d372954f47d635192158a\n0xf3331a562103059\n0x81b7ba4b5d4b33bdfebed111\n0x662a8ed34d3e3de1332d04e4\n0x192771d71469b6d0\n0xa47332ac89e859511fb66294\n0x1fd9c5112304c42740e9f46a\n0x520322f3ba7f38a\n0xb907e30e19d48cffb09fbcf7\n0x2b59e7d4dafc891f08a24416\n0x1e71e1c05c6e4a55\n0x7839ecfb6b9e94ff4c3e9bb1\n0xd36a7eae912afdfce4d6d262\n0x1d6a1da9a2327b0b\n0x1cb355493739dedb1ef42d51\n0xe01e5c211a1f46f2e4094597\n0x269bce40e53ea050\n0x59da2615d5a3b91e937d89159f7380b9669858cc437cebe74adc09d93c99329\n0x18\n0x2a683c7d878585763f8267ea\n0xead8f10ef81f7901ed274b24\n0x25ec385810beaa87\n0x0\n0xf28f9a5faaa6546f997e0949\n0xcd3ecab431257f8b80b8dc77\n0x154e8dd3aac3d42c\n0x0\n0x100000000000000005c19a465cc7cbb28\n0x3378cd034f0d9ebb\n0x24df6021ce19cb18\n0x9c6a591e71b87b32\n0x970e2d83fd3ed91e6df39f2c\n0x85294ea4088b8c3ca50dcf1e\n0x3a237bdbf87287c\n0x0\n0xd13f9298545a1d77942e20d7\n0xa85510aa9d5e7b357755b5d6\n0x15c764c1c5380102\n0x0\n0x100000000000000003aa0eb9486eaea7c\n0x100000000000000003ed064b9068afd7b\n0x100000000000000004e76be5e17f551d8\n0x100000000000000008d717becec440328\n"
  },
  {
    "path": "src/src/tests/sha512_tests.cairo",
    "content": "use garaga::hashes::sha_512::{Word64WordOperations, sha512};\n\nfn get_lorem_ipsum() -> Array<u8> {\n    let mut input: Array<u8> = array![\n        0x4C, 0x6F, 0x72, 0x65, 0x6D, 0x20, 0x69, 0x70, 0x73, 0x75, 0x6D, 0x2C, 0x20, 0x6F, 0x72,\n        0x20, 0x6C, 0x73, 0x69, 0x70, 0x73, 0x75, 0x6D, 0x20, 0x61, 0x73, 0x20, 0x69, 0x74, 0x20,\n        0x69, 0x73, 0x20, 0x73, 0x6F, 0x6D, 0x65, 0x74, 0x69, 0x6D, 0x65, 0x73, 0x20, 0x6B, 0x6E,\n        0x6F, 0x77, 0x6E, 0x2C, 0x20, 0x69, 0x73, 0x20, 0x64, 0x75, 0x6D, 0x6D, 0x79, 0x20, 0x74,\n        0x65, 0x78, 0x74, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6E, 0x20, 0x6C, 0x61, 0x79,\n        0x69, 0x6E, 0x67, 0x20, 0x6F, 0x75, 0x74, 0x20, 0x70, 0x72, 0x69, 0x6E, 0x74, 0x2C, 0x20,\n        0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x6F, 0x72, 0x20, 0x77, 0x65, 0x62, 0x20,\n        0x64, 0x65, 0x73, 0x69, 0x67, 0x6E, 0x73, 0x2E, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x61,\n        0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,\n        0x75, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x61, 0x6E, 0x20, 0x75, 0x6E, 0x6B, 0x6E,\n        0x6F, 0x77, 0x6E, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20,\n        0x69, 0x6E, 0x20, 0x74, 0x68, 0x65, 0x20, 0x31, 0x35, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6E,\n        0x74, 0x75, 0x72, 0x79, 0x20, 0x77, 0x68, 0x6F, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x6F,\n        0x75, 0x67, 0x68, 0x74, 0x20, 0x74, 0x6F, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x63,\n        0x72, 0x61, 0x6D, 0x62, 0x6C, 0x65, 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6F,\n        0x66, 0x20, 0x43, 0x69, 0x63, 0x65, 0x72, 0x6F, 0x27, 0x73, 0x20, 0x44, 0x65, 0x20, 0x46,\n        0x69, 0x6E, 0x69, 0x62, 0x75, 0x73, 0x20, 0x42, 0x6F, 0x6E, 0x6F, 0x72, 0x75, 0x6D, 0x20,\n        0x65, 0x74, 0x20, 0x4D, 0x61, 0x6C, 0x6F, 0x72, 0x75, 0x6D, 0x20, 0x66, 0x6F, 0x72, 0x20,\n        0x75, 0x73, 0x65, 0x20, 0x69, 0x6E, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73,\n        0x70, 0x65, 0x63, 0x69, 0x6D, 0x65, 0x6E, 0x20, 0x62, 0x6F, 0x6F, 0x6B, 0x2E, 0x20, 0x49,\n        0x74, 0x20, 0x75, 0x73, 0x75, 0x61, 0x6C, 0x6C, 0x79, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6E,\n        0x73, 0x20, 0x77, 0x69, 0x74, 0x68,\n    ];\n    input\n}\n\n#[test]\nfn test_sha512_lorem_ipsum() {\n    let msg = get_lorem_ipsum();\n    let res = sha512(msg).span();\n\n    assert_eq!(\n        res,\n        array![\n            0xd5, 0xa2, 0xe1, 0x4e, 0xf4, 0x20, 0xf8, 0x2d, 0x68, 0x2b, 0x19, 0xc3, 0xd0, 0x70,\n            0xf4, 0x81, 0x14, 0xcb, 0xb9, 0x74, 0x7c, 0x7d, 0xb1, 0x15, 0xce, 0xa5, 0x41, 0x3e,\n            0xf8, 0xcb, 0x8f, 0xba, 0xc6, 0x90, 0x17, 0xc5, 0x17, 0x0f, 0x01, 0xc4, 0x77, 0xb3,\n            0xdf, 0x3d, 0xfb, 0x34, 0xd3, 0x50, 0x8f, 0xa0, 0xb2, 0xb1, 0x37, 0xd4, 0xcb, 0x54,\n            0x60, 0x9e, 0x63, 0x3d, 0x14, 0x45, 0x82, 0xc9,\n        ]\n            .span(),\n    );\n}\n\n#[test]\nfn test_sha512_size_one() {\n    let mut arr: Array<u8> = array![49];\n    let res = sha512(arr).span();\n\n    assert_eq!(\n        res,\n        array![\n            0x4d, 0xff, 0x4e, 0xa3, 0x40, 0xf0, 0xa8, 0x23, 0xf1, 0x5d, 0x3f, 0x4f, 0x01, 0xab,\n            0x62, 0xea, 0xe0, 0xe5, 0xda, 0x57, 0x9c, 0xcb, 0x85, 0x1f, 0x8d, 0xb9, 0xdf, 0xe8,\n            0x4c, 0x58, 0xb2, 0xb3, 0x7b, 0x89, 0x90, 0x3a, 0x74, 0x0e, 0x1e, 0xe1, 0x72, 0xda,\n            0x79, 0x3a, 0x6e, 0x79, 0xd5, 0x60, 0xe5, 0xf7, 0xf9, 0xbd, 0x05, 0x8a, 0x12, 0xa2,\n            0x80, 0x43, 0x3e, 0xd6, 0xfa, 0x46, 0x51, 0x0a,\n        ]\n            .span(),\n    );\n}\n\n#[test]\nfn test_size_zero() {\n    let msg = array![];\n\n    let res = sha512(msg).span();\n\n    assert_eq!(\n        res,\n        array![\n            0xcf, 0x83, 0xe1, 0x35, 0x7e, 0xef, 0xb8, 0xbd, 0xf1, 0x54, 0x28, 0x50, 0xd6, 0x6d,\n            0x80, 0x07, 0xd6, 0x20, 0xe4, 0x05, 0x0b, 0x57, 0x15, 0xdc, 0x83, 0xf4, 0xa9, 0x21,\n            0xd3, 0x6c, 0xe9, 0xce, 0x47, 0xd0, 0xd1, 0x3c, 0x5d, 0x85, 0xf2, 0xb0, 0xff, 0x83,\n            0x18, 0xd2, 0x87, 0x7e, 0xec, 0x2f, 0x63, 0xb9, 0x31, 0xbd, 0x47, 0x41, 0x7a, 0x81,\n            0xa5, 0x38, 0x32, 0x7a, 0xf9, 0x27, 0xda, 0x3e,\n        ]\n            .span(),\n    );\n}\n"
  },
  {
    "path": "src/src/tests/sp1_groth_16_tests.cairo",
    "content": "use garaga::apps::sp1::{deserialize_full_proof_with_hints_sp1, verify_groth16_sp1};\nuse snforge_std::fs::{FileTrait, read_txt};\n\n#[test]\nfn test_verify_sp1_groth16_proof_bn254() {\n    let file = FileTrait::new(\"src/tests/proof_calldata.txt\");\n    let calldata = read_txt(@file).span();\n    assert(main(calldata).is_ok(), 'Proof verification failed');\n}\n\n#[executable]\npub fn main(full_proof_with_hints: Span<felt252>) -> Result<Span<u256>, felt252> {\n    let fph = deserialize_full_proof_with_hints_sp1(full_proof_with_hints);\n    return verify_groth16_sp1(fph);\n}\n"
  },
  {
    "path": "src/src/utils/calldata.cairo",
    "content": "use core::circuit::u384;\nuse corelib_imports::bounded_int::downcast;\npub use garaga::definitions::{E12D, G1Point, G2Point, MillerLoopResultScalingFactor, u288};\npub use garaga::groth16::{Groth16Proof, Groth16ProofRaw};\npub use garaga::pairing_check::{MPCheckHintBLS12_381, MPCheckHintBN254};\n\n#[derive(Drop)]\npub struct FullProofWithHintsBN254 {\n    pub groth16_proof: Groth16Proof,\n    pub mpcheck_hint: MPCheckHintBN254,\n    pub msm_hint: Span<felt252>,\n}\n\n#[derive(Drop, Debug)]\npub struct FullProofWithHintsBLS12_381 {\n    pub groth16_proof: Groth16Proof,\n    pub mpcheck_hint: MPCheckHintBLS12_381,\n    pub msm_hint: Span<felt252>,\n}\n\nconst U288_N_LIMBS: usize = 3;\nconst U384_N_LIMBS: usize = 4;\n\n\n#[inline(always)]\nfn downcast_u288(l0: felt252, l1: felt252, l2: felt252) -> u288 {\n    u288 {\n        limb0: downcast(l0).unwrap(), limb1: downcast(l1).unwrap(), limb2: downcast(l2).unwrap(),\n    }\n}\n#[inline(always)]\nfn downcast_u384(l0: felt252, l1: felt252, l2: felt252, l3: felt252) -> u384 {\n    u384 {\n        limb0: downcast(l0).unwrap(),\n        limb1: downcast(l1).unwrap(),\n        limb2: downcast(l2).unwrap(),\n        limb3: downcast(l3).unwrap(),\n    }\n}\n\n#[inline(always)]\npub fn _deserialize_groth16_proof_points(ref serialized: Span<felt252>) -> Groth16ProofRaw {\n    let [\n        a_x_l0,\n        a_x_l1,\n        a_x_l2,\n        a_x_l3,\n        a_y_l0,\n        a_y_l1,\n        a_y_l2,\n        a_y_l3,\n        b_x0_l0,\n        b_x0_l1,\n        b_x0_l2,\n        b_x0_l3,\n        b_x1_l0,\n        b_x1_l1,\n        b_x1_l2,\n        b_x1_l3,\n        b_y0_l0,\n        b_y0_l1,\n        b_y0_l2,\n        b_y0_l3,\n        b_y1_l0,\n        b_y1_l1,\n        b_y1_l2,\n        b_y1_l3,\n        c_x_l0,\n        c_x_l1,\n        c_x_l2,\n        c_x_l3,\n        c_y_l0,\n        c_y_l1,\n        c_y_l2,\n        c_y_l3,\n    ] =\n        (*serialized\n        .multi_pop_front::<32>()\n        .unwrap())\n        .unbox();\n\n    let a = G1Point {\n        x: downcast_u384(a_x_l0, a_x_l1, a_x_l2, a_x_l3),\n        y: downcast_u384(a_y_l0, a_y_l1, a_y_l2, a_y_l3),\n    };\n\n    let b = G2Point {\n        x0: downcast_u384(b_x0_l0, b_x0_l1, b_x0_l2, b_x0_l3),\n        x1: downcast_u384(b_x1_l0, b_x1_l1, b_x1_l2, b_x1_l3),\n        y0: downcast_u384(b_y0_l0, b_y0_l1, b_y0_l2, b_y0_l3),\n        y1: downcast_u384(b_y1_l0, b_y1_l1, b_y1_l2, b_y1_l3),\n    };\n    let c = G1Point {\n        x: downcast_u384(c_x_l0, c_x_l1, c_x_l2, c_x_l3),\n        y: downcast_u384(c_y_l0, c_y_l1, c_y_l2, c_y_l3),\n    };\n    return Groth16ProofRaw { a: a, b: b, c: c };\n}\n\n#[inline(always)]\npub fn _deserialize_E12D_u288(ref serialized: Span<felt252>) -> E12D<u288> {\n    let [\n        w0l0,\n        w0l1,\n        w0l2,\n        w1l0,\n        w1l1,\n        w1l2,\n        w2l0,\n        w2l1,\n        w2l2,\n        w3l0,\n        w3l1,\n        w3l2,\n        w4l0,\n        w4l1,\n        w4l2,\n        w5l0,\n        w5l1,\n        w5l2,\n        w6l0,\n        w6l1,\n        w6l2,\n        w7l0,\n        w7l1,\n        w7l2,\n        w8l0,\n        w8l1,\n        w8l2,\n        w9l0,\n        w9l1,\n        w9l2,\n        w10l0,\n        w10l1,\n        w10l2,\n        w11l0,\n        w11l1,\n        w11l2,\n    ] =\n        (*serialized\n        .multi_pop_front::<36>()\n        .unwrap())\n        .unbox();\n\n    E12D {\n        w0: downcast_u288(w0l0, w0l1, w0l2),\n        w1: downcast_u288(w1l0, w1l1, w1l2),\n        w2: downcast_u288(w2l0, w2l1, w2l2),\n        w3: downcast_u288(w3l0, w3l1, w3l2),\n        w4: downcast_u288(w4l0, w4l1, w4l2),\n        w5: downcast_u288(w5l0, w5l1, w5l2),\n        w6: downcast_u288(w6l0, w6l1, w6l2),\n        w7: downcast_u288(w7l0, w7l1, w7l2),\n        w8: downcast_u288(w8l0, w8l1, w8l2),\n        w9: downcast_u288(w9l0, w9l1, w9l2),\n        w10: downcast_u288(w10l0, w10l1, w10l2),\n        w11: downcast_u288(w11l0, w11l1, w11l2),\n    }\n}\n\n#[inline(always)]\npub fn deserialize_full_proof_with_hints_bn254(\n    mut serialized: Span<felt252>,\n) -> FullProofWithHintsBN254 {\n    let groth16_proof_raw = _deserialize_groth16_proof_points(ref serialized);\n\n    let n_public_inputs: u32 = (*serialized.pop_front().unwrap()).try_into().unwrap();\n    let mut public_inputs = array![];\n    for _ in 0..n_public_inputs {\n        public_inputs\n            .append(\n                u256 {\n                    low: (*serialized.pop_front().unwrap()).try_into().unwrap(),\n                    high: (*serialized.pop_front().unwrap()).try_into().unwrap(),\n                },\n            );\n    }\n\n    let groth16_proof = Groth16Proof {\n        raw: groth16_proof_raw, public_inputs: public_inputs.span(),\n    };\n\n    let mpcheck_hint = _deserialize_mpcheck_hint_bn254(ref serialized);\n\n    let msm_hint = serialized;\n    return FullProofWithHintsBN254 { groth16_proof, mpcheck_hint, msm_hint };\n}\n\n\n#[inline(always)]\npub fn _deserialize_mpcheck_hint_bn254(ref serialized: Span<felt252>) -> MPCheckHintBN254 {\n    let lambda_root = _deserialize_E12D_u288(ref serialized);\n    let lambda_root_inverse = _deserialize_E12D_u288(ref serialized);\n\n    let [\n        w0_l0,\n        w0_l1,\n        w0_l2,\n        w2_l0,\n        w2_l1,\n        w2_l2,\n        w4_l0,\n        w4_l1,\n        w4_l2,\n        w6_l0,\n        w6_l1,\n        w6_l2,\n        w8_l0,\n        w8_l1,\n        w8_l2,\n        w10_l0,\n        w10_l1,\n        w10_l2,\n    ] =\n        (*serialized\n        .multi_pop_front::<18>()\n        .unwrap())\n        .unbox();\n\n    // full_len -= 18;\n    // assert(full_len == serialized.len(), 'F');\n\n    let w = MillerLoopResultScalingFactor {\n        w0: downcast_u288(w0_l0, w0_l1, w0_l2),\n        w2: downcast_u288(w2_l0, w2_l1, w2_l2),\n        w4: downcast_u288(w4_l0, w4_l1, w4_l2),\n        w6: downcast_u288(w6_l0, w6_l1, w6_l2),\n        w8: downcast_u288(w8_l0, w8_l1, w8_l2),\n        w10: downcast_u288(w10_l0, w10_l1, w10_l2),\n    };\n    // usize_assert_eq(mpcheck_hint.Ris.len(), 34);\n    // 34 * 12 * 3 = 1224\n    let mut ris_slice = serialized.slice(1, 1224);\n    // println!(\"ris_slice.len(): {}\", ris_slice.len());\n\n    let end = serialized.len();\n    serialized = serialized.slice(1225, end - 1224 - 1);\n    // println!(\"serialized.len(): {}\", serialized.len());\n    let mut Ris = array![];\n    while let Option::Some(ri) = ris_slice.multi_pop_front::<36>() {\n        let [\n            w0l0,\n            w0l1,\n            w0l2,\n            w1l0,\n            w1l1,\n            w1l2,\n            w2l0,\n            w2l1,\n            w2l2,\n            w3l0,\n            w3l1,\n            w3l2,\n            w4l0,\n            w4l1,\n            w4l2,\n            w5l0,\n            w5l1,\n            w5l2,\n            w6l0,\n            w6l1,\n            w6l2,\n            w7l0,\n            w7l1,\n            w7l2,\n            w8l0,\n            w8l1,\n            w8l2,\n            w9l0,\n            w9l1,\n            w9l2,\n            w10l0,\n            w10l1,\n            w10l2,\n            w11l0,\n            w11l1,\n            w11l2,\n        ] =\n            (*ri)\n            .unbox();\n        Ris\n            .append(\n                E12D {\n                    w0: downcast_u288(w0l0, w0l1, w0l2),\n                    w1: downcast_u288(w1l0, w1l1, w1l2),\n                    w2: downcast_u288(w2l0, w2l1, w2l2),\n                    w3: downcast_u288(w3l0, w3l1, w3l2),\n                    w4: downcast_u288(w4l0, w4l1, w4l2),\n                    w5: downcast_u288(w5l0, w5l1, w5l2),\n                    w6: downcast_u288(w6l0, w6l1, w6l2),\n                    w7: downcast_u288(w7l0, w7l1, w7l2),\n                    w8: downcast_u288(w8l0, w8l1, w8l2),\n                    w9: downcast_u288(w9l0, w9l1, w9l2),\n                    w10: downcast_u288(w10l0, w10l1, w10l2),\n                    w11: downcast_u288(w11l0, w11l1, w11l2),\n                },\n            )\n    }\n    // usize_assert_eq(mpcheck_hint.big_Q.len(), 190);\n    let mut big_q_slice = serialized.slice(1, 190 * 3);\n    let end = serialized.len();\n    serialized = serialized.slice(190 * 3 + 1, end - 190 * 3 - 1);\n    let mut big_q = array![];\n    while let Option::Some(q) = big_q_slice.multi_pop_front::<3>() {\n        let [l0, l1, l2] = (*q).unbox();\n        big_q.append(downcast_u288(l0, l1, l2))\n    }\n\n    let z = (*serialized.pop_front().unwrap()).try_into().unwrap();\n\n    let mpcheck_hint = MPCheckHintBN254 {\n        lambda_root: lambda_root,\n        lambda_root_inverse: lambda_root_inverse,\n        w: w,\n        Ris: Ris.span(),\n        big_Q: big_q,\n        z: z,\n    };\n    return mpcheck_hint;\n}\n\n\npub fn deserialize_mpcheck_hint_bls12_381(ref serialized: Span<felt252>) -> MPCheckHintBLS12_381 {\n    let [\n        w0l0,\n        w0l1,\n        w0l2,\n        w0l3,\n        w1l0,\n        w1l1,\n        w1l2,\n        w1l3,\n        w2l0,\n        w2l1,\n        w2l2,\n        w2l3,\n        w3l0,\n        w3l1,\n        w3l2,\n        w3l3,\n        w4l0,\n        w4l1,\n        w4l2,\n        w4l3,\n        w5l0,\n        w5l1,\n        w5l2,\n        w5l3,\n        w6l0,\n        w6l1,\n        w6l2,\n        w6l3,\n        w7l0,\n        w7l1,\n        w7l2,\n        w7l3,\n        w8l0,\n        w8l1,\n        w8l2,\n        w8l3,\n        w9l0,\n        w9l1,\n        w9l2,\n        w9l3,\n        w10l0,\n        w10l1,\n        w10l2,\n        w10l3,\n        w11l0,\n        w11l1,\n        w11l2,\n        w11l3,\n    ] =\n        (*serialized\n        .multi_pop_front::<48>()\n        .unwrap())\n        .unbox();\n\n    let lambda_root_inverse = E12D {\n        w0: downcast_u384(w0l0, w0l1, w0l2, w0l3),\n        w1: downcast_u384(w1l0, w1l1, w1l2, w1l3),\n        w2: downcast_u384(w2l0, w2l1, w2l2, w2l3),\n        w3: downcast_u384(w3l0, w3l1, w3l2, w3l3),\n        w4: downcast_u384(w4l0, w4l1, w4l2, w4l3),\n        w5: downcast_u384(w5l0, w5l1, w5l2, w5l3),\n        w6: downcast_u384(w6l0, w6l1, w6l2, w6l3),\n        w7: downcast_u384(w7l0, w7l1, w7l2, w7l3),\n        w8: downcast_u384(w8l0, w8l1, w8l2, w8l3),\n        w9: downcast_u384(w9l0, w9l1, w9l2, w9l3),\n        w10: downcast_u384(w10l0, w10l1, w10l2, w10l3),\n        w11: downcast_u384(w11l0, w11l1, w11l2, w11l3),\n    };\n\n    let [\n        w0_l0,\n        w0_l1,\n        w0_l2,\n        w0_l3,\n        w2_l0,\n        w2_l1,\n        w2_l2,\n        w2_l3,\n        w4_l0,\n        w4_l1,\n        w4_l2,\n        w4_l3,\n        w6_l0,\n        w6_l1,\n        w6_l2,\n        w6_l3,\n        w8_l0,\n        w8_l1,\n        w8_l2,\n        w8_l3,\n        w10_l0,\n        w10_l1,\n        w10_l2,\n        w10_l3,\n    ] =\n        (*serialized\n        .multi_pop_front::<24>()\n        .unwrap())\n        .unbox();\n\n    let w = MillerLoopResultScalingFactor {\n        w0: downcast_u384(w0_l0, w0_l1, w0_l2, w0_l3),\n        w2: downcast_u384(w2_l0, w2_l1, w2_l2, w2_l3),\n        w4: downcast_u384(w4_l0, w4_l1, w4_l2, w4_l3),\n        w6: downcast_u384(w6_l0, w6_l1, w6_l2, w6_l3),\n        w8: downcast_u384(w8_l0, w8_l1, w8_l2, w8_l3),\n        w10: downcast_u384(w10_l0, w10_l1, w10_l2, w10_l3),\n    };\n    // assert!(hint.Ris.len() == 35, \"Wrong Number of Ris for BLS12-381 3-Pairs Paring check\");\n    // 35 * 12 * 4 = 1680\n    let end_ris = 1680;\n    let mut ris_slice = serialized.slice(1, end_ris);\n\n    let end = serialized.len();\n    serialized = serialized.slice(end_ris + 1, end - end_ris - 1);\n    let mut Ris = array![];\n    while let Option::Some(ri) = ris_slice.multi_pop_front::<48>() {\n        let [\n            w0l0,\n            w0l1,\n            w0l2,\n            w0l3,\n            w1l0,\n            w1l1,\n            w1l2,\n            w1l3,\n            w2l0,\n            w2l1,\n            w2l2,\n            w2l3,\n            w3l0,\n            w3l1,\n            w3l2,\n            w3l3,\n            w4l0,\n            w4l1,\n            w4l2,\n            w4l3,\n            w5l0,\n            w5l1,\n            w5l2,\n            w5l3,\n            w6l0,\n            w6l1,\n            w6l2,\n            w6l3,\n            w7l0,\n            w7l1,\n            w7l2,\n            w7l3,\n            w8l0,\n            w8l1,\n            w8l2,\n            w8l3,\n            w9l0,\n            w9l1,\n            w9l2,\n            w9l3,\n            w10l0,\n            w10l1,\n            w10l2,\n            w10l3,\n            w11l0,\n            w11l1,\n            w11l2,\n            w11l3,\n        ] =\n            (*ri)\n            .unbox();\n        Ris\n            .append(\n                E12D {\n                    w0: downcast_u384(w0l0, w0l1, w0l2, w0l3),\n                    w1: downcast_u384(w1l0, w1l1, w1l2, w1l3),\n                    w2: downcast_u384(w2l0, w2l1, w2l2, w2l3),\n                    w3: downcast_u384(w3l0, w3l1, w3l2, w3l3),\n                    w4: downcast_u384(w4l0, w4l1, w4l2, w4l3),\n                    w5: downcast_u384(w5l0, w5l1, w5l2, w5l3),\n                    w6: downcast_u384(w6l0, w6l1, w6l2, w6l3),\n                    w7: downcast_u384(w7l0, w7l1, w7l2, w7l3),\n                    w8: downcast_u384(w8l0, w8l1, w8l2, w8l3),\n                    w9: downcast_u384(w9l0, w9l1, w9l2, w9l3),\n                    w10: downcast_u384(w10l0, w10l1, w10l2, w10l3),\n                    w11: downcast_u384(w11l0, w11l1, w11l2, w11l3),\n                },\n            )\n    }\n\n    let big_q_len: u32 = (*serialized.pop_front().unwrap()).try_into().unwrap();\n    let biq_len_n_limbs = big_q_len * 4;\n    let mut big_q_slice = serialized.slice(0, biq_len_n_limbs);\n\n    serialized = serialized.slice(biq_len_n_limbs, serialized.len() - biq_len_n_limbs);\n    let mut big_q = array![];\n    while let Option::Some(q) = big_q_slice.multi_pop_front::<4>() {\n        let [l0, l1, l2, l3] = (*q).unbox();\n        big_q.append(downcast_u384(l0, l1, l2, l3))\n    }\n    let z = *serialized.pop_front().unwrap();\n    let mpcheck_hint = MPCheckHintBLS12_381 {\n        lambda_root_inverse: lambda_root_inverse, w: w, Ris: Ris.span(), big_Q: big_q, z: z,\n    };\n\n    return mpcheck_hint;\n}\n\npub fn deserialize_full_proof_with_hints_bls12_381(\n    mut serialized: Span<felt252>,\n) -> FullProofWithHintsBLS12_381 {\n    let groth16_proof_raw = _deserialize_groth16_proof_points(ref serialized);\n\n    let n_public_inputs: u32 = (*serialized.pop_front().unwrap()).try_into().unwrap();\n    let mut public_inputs = array![];\n    for _ in 0..n_public_inputs {\n        public_inputs\n            .append(\n                u256 {\n                    low: (*serialized.pop_front().unwrap()).try_into().unwrap(),\n                    high: (*serialized.pop_front().unwrap()).try_into().unwrap(),\n                },\n            );\n    }\n\n    // full_len -= (1 + 2 * n_public_inputs);\n    // assert(full_len == serialized.len(), 'C');\n\n    let groth16_proof = Groth16Proof {\n        raw: groth16_proof_raw, public_inputs: public_inputs.span(),\n    };\n    // Deserialize mpcheck_hint\n    let mpcheck_hint = deserialize_mpcheck_hint_bls12_381(ref serialized);\n    let msm_hint = serialized;\n\n    return FullProofWithHintsBLS12_381 { groth16_proof, mpcheck_hint, msm_hint };\n}\n"
  },
  {
    "path": "src/src/utils/hashing.cairo",
    "content": "use core::circuit::u384;\npub use core::poseidon::hades_permutation;\nuse garaga::definitions::{E12D, G1G2Pair, G1Point, MillerLoopResultScalingFactor, u288};\n\npub const TWO_POW_96: felt252 = 79228162514264337593543950336;\n\n#[derive(Copy, Drop)]\npub struct PoseidonState {\n    pub s0: felt252,\n    pub s1: felt252,\n    pub s2: felt252,\n}\n\n#[inline(always)]\npub fn hash_u384(elmt: u384, base: felt252, s: PoseidonState) -> PoseidonState {\n    let in_1 = s.s0 + elmt.limb0.into() + base * elmt.limb1.into();\n    let in_2 = s.s1 + elmt.limb2.into() + base * elmt.limb3.into();\n    let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, s.s2);\n    return PoseidonState { s0: _s0, s1: _s1, s2: _s2 };\n}\n\n#[inline(always)]\npub fn hash_u288(elmt: u288, base: felt252, s: PoseidonState) -> PoseidonState {\n    let in_1 = s.s0 + elmt.limb0.into() + base * elmt.limb1.into();\n    let in_2 = s.s1 + elmt.limb2.into();\n    let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, s.s2);\n    return PoseidonState { s0: _s0, s1: _s1, s2: _s2 };\n}\n\n#[inline(always)]\npub fn hash_quadruple_u288(\n    elmt0: u288, elmt1: u288, elmt2: u288, elmt3: u288, base: felt252, s: PoseidonState,\n) -> PoseidonState {\n    let in_1 = s.s0 + elmt0.limb0.into() + base * elmt0.limb1.into();\n    let in_2 = s.s1 + elmt0.limb2.into() + base * elmt1.limb0.into();\n    let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, s.s2);\n    let in_1 = _s0 + elmt1.limb1.into() + base * elmt1.limb2.into();\n    let in_2 = _s1 + elmt2.limb0.into() + base * elmt2.limb1.into();\n    let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n    let in_1 = _s0 + elmt2.limb2.into() + base * elmt3.limb0.into();\n    let in_2 = _s1 + elmt3.limb1.into() + base * elmt3.limb2.into();\n    let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, _s2);\n    return PoseidonState { s0: _s0, s1: _s1, s2: _s2 };\n}\n// Apply sponge construction to a transcript of u384 elements\n#[inline(always)]\npub fn hash_u384_transcript(transcript: Span<u384>, mut s: PoseidonState) -> PoseidonState {\n    let base: felt252 = TWO_POW_96; // 2**96\n    for elmt in transcript {\n        s = hash_u384(*elmt, base, s);\n    }\n    return s;\n}\n\n#[inline(always)]\npub fn hash_u288_transcript(transcript: Span<u288>, mut s: PoseidonState) -> PoseidonState {\n    let base: felt252 = TWO_POW_96; // 2**96\n    let (n_quadruples, rest) = DivRem::div_rem(transcript.len(), 4);\n    let n_quadruples_index = n_quadruples * 4;\n    let mut transcript_quadruples = transcript.slice(0, n_quadruples_index);\n\n    while let Some(fours) = transcript_quadruples.multi_pop_front::<4>() {\n        let [elmt0, elmt1, elmt2, elmt3] = fours.unbox();\n        let _s = hash_quadruple_u288(elmt0, elmt1, elmt2, elmt3, base, s);\n        s = _s;\n    }\n    let mut rest_transcript = transcript.slice(n_quadruples_index, rest);\n    for elmt in rest_transcript {\n        s = hash_u288(*elmt, base, s);\n    }\n    return s;\n}\n\n// Apply sponge construction to a E12D element from an initial state (s0, s1, s2)\npub fn hash_E12D_u384(elmt: E12D<u384>, mut s: PoseidonState) -> PoseidonState {\n    let base: felt252 = TWO_POW_96; // 2**96\n    let _s = hash_u384(elmt.w0, base, s);\n    let _s = hash_u384(elmt.w1, base, _s);\n    let _s = hash_u384(elmt.w2, base, _s);\n    let _s = hash_u384(elmt.w3, base, _s);\n    let _s = hash_u384(elmt.w4, base, _s);\n    let _s = hash_u384(elmt.w5, base, _s);\n    let _s = hash_u384(elmt.w6, base, _s);\n    let _s = hash_u384(elmt.w7, base, _s);\n    let _s = hash_u384(elmt.w8, base, _s);\n    let _s = hash_u384(elmt.w9, base, _s);\n    let _s = hash_u384(elmt.w10, base, _s);\n    let _s = hash_u384(elmt.w11, base, _s);\n    return _s;\n}\n\npub fn hash_E12D_u288(elmt: E12D<u288>, mut s: PoseidonState) -> PoseidonState {\n    let base: felt252 = TWO_POW_96; // 2**96\n    let _s = hash_quadruple_u288(elmt.w0, elmt.w1, elmt.w2, elmt.w3, base, s);\n    let _s = hash_quadruple_u288(elmt.w4, elmt.w5, elmt.w6, elmt.w7, base, _s);\n    let _s = hash_quadruple_u288(elmt.w8, elmt.w9, elmt.w10, elmt.w11, base, _s);\n    return _s;\n}\n\n// Hash a E12D element known to be 1\npub fn hash_E12D_one_u384(s: PoseidonState) -> PoseidonState {\n    let in_1 = s.s0 + 1;\n    let in_2 = s.s1;\n    let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, s.s2); // 1\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 2\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 3\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 4\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 5\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 6\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 7\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 8\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 9\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 10\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 11\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 12\n    return PoseidonState { s0: _s0, s1: _s1, s2: _s2 };\n}\n\n// Hash a E12D element known to be 1\npub fn hash_E12D_one_u288(s: PoseidonState) -> PoseidonState {\n    let in_1 = s.s0 + 1;\n    let in_2 = s.s1;\n    let (_s0, _s1, _s2) = hades_permutation(in_1, in_2, s.s2); // 1\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 2\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 3\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 4\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 5\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 6\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 7\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 8\n    let (_s0, _s1, _s2) = hades_permutation(_s0, _s1, _s2); // 9\n    return PoseidonState { s0: _s0, s1: _s1, s2: _s2 };\n}\n\n// Apply sponge construction to a MillerLoopResultScalingFactor element from an initial state (s0,\n// s1, s2)\n#[inline(always)]\npub fn hash_MillerLoopResultScalingFactor_u384(\n    elmt: MillerLoopResultScalingFactor<u384>, s: PoseidonState,\n) -> PoseidonState {\n    let base: felt252 = TWO_POW_96; // 2**96\n    let _s = hash_u384(elmt.w0, base, s);\n    let _s = hash_u384(elmt.w2, base, _s);\n    let _s = hash_u384(elmt.w4, base, _s);\n    let _s = hash_u384(elmt.w6, base, _s);\n    let _s = hash_u384(elmt.w8, base, _s);\n    let _s = hash_u384(elmt.w10, base, _s);\n    return _s;\n}\n\n#[inline(always)]\npub fn hash_MillerLoopResultScalingFactor_u288(\n    elmt: MillerLoopResultScalingFactor<u288>, s: PoseidonState,\n) -> PoseidonState {\n    let base: felt252 = TWO_POW_96; // 2**96\n    let _s = hash_quadruple_u288(elmt.w0, elmt.w2, elmt.w4, elmt.w6, base, s);\n    let _s = hash_u288(elmt.w8, base, _s);\n    let _s = hash_u288(elmt.w10, base, _s);\n    return _s;\n}\n\n// Apply sponge construction to a sequence of E12D elements from an initial state (s0, s1, s2)\n#[inline(always)]\npub fn hash_E12D_u384_transcript(\n    transcript: Span<E12D<u384>>, mut s: PoseidonState,\n) -> PoseidonState {\n    let base: felt252 = TWO_POW_96; // 2**96\n\n    for elmt in transcript {\n        let elmt = *elmt;\n        let _s = hash_u384(elmt.w0, base, s);\n        let _s = hash_u384(elmt.w1, base, _s);\n        let _s = hash_u384(elmt.w2, base, _s);\n        let _s = hash_u384(elmt.w3, base, _s);\n        let _s = hash_u384(elmt.w4, base, _s);\n        let _s = hash_u384(elmt.w5, base, _s);\n        let _s = hash_u384(elmt.w6, base, _s);\n        let _s = hash_u384(elmt.w7, base, _s);\n        let _s = hash_u384(elmt.w8, base, _s);\n        let _s = hash_u384(elmt.w9, base, _s);\n        let _s = hash_u384(elmt.w10, base, _s);\n        let _s = hash_u384(elmt.w11, base, _s);\n        s = _s;\n    }\n    return s;\n}\n\n#[inline(always)]\npub fn hash_E12D_u288_transcript(\n    transcript: Span<E12D<u288>>, mut s: PoseidonState,\n) -> PoseidonState {\n    let base: felt252 = TWO_POW_96; // 2**96\n    for elmt in transcript {\n        let elmt = *elmt;\n        let _s = hash_quadruple_u288(elmt.w0, elmt.w1, elmt.w2, elmt.w3, base, s);\n        let _s = hash_quadruple_u288(elmt.w4, elmt.w5, elmt.w6, elmt.w7, base, _s);\n        let _s = hash_quadruple_u288(elmt.w8, elmt.w9, elmt.w10, elmt.w11, base, _s);\n        s = _s;\n    }\n    return s;\n}\n\n\n// Apply sponge construction to a pair of G1 and G2 points from an initial state (s0, s1, s2)\n// #[inline(always)]\npub fn hash_G1G2Pair(pair: G1G2Pair, s: PoseidonState) -> PoseidonState {\n    let base: felt252 = TWO_POW_96; // 2**96\n    let _s = hash_u384(pair.p.x, base, s);\n    let _s = hash_u384(pair.p.y, base, _s);\n    let _s = hash_u384(pair.q.x0, base, _s);\n    let _s = hash_u384(pair.q.x1, base, _s);\n    let _s = hash_u384(pair.q.y0, base, _s);\n    let _s = hash_u384(pair.q.y1, base, _s);\n    return _s;\n}\n\npub fn hash_G1Point(point: G1Point) -> felt252 {\n    let base: felt252 = TWO_POW_96; // 2**96\n    let in_1: felt252 = point.x.limb0.into() + base * point.x.limb1.into();\n    let in_2: felt252 = point.x.limb2.into() + base * point.x.limb3.into();\n    let (s0, s1, s2) = hades_permutation(in_1, in_2, 2);\n    let in_1 = s0 + point.y.limb0.into() + base * point.y.limb1.into();\n    let in_2 = s1 + point.y.limb2.into() + base * point.y.limb3.into();\n    let (s0, _, _) = hades_permutation(in_1, in_2, s2);\n    return s0;\n}\n"
  },
  {
    "path": "src/src/utils/neg_3.cairo",
    "content": "use core::circuit::u384;\nuse corelib_imports::bounded_int::{\n    AddHelper, BoundedInt, DivRemHelper, UnitInt, bounded_int, upcast,\n};\nuse garaga::definitions::get_min_one;\n\n\nconst STARK_MINUS_1_HALF: u256 =\n    180925139433306560684866139154753505281553607665798349986546028067936010240; // (STARK-1)//2\n\n\n// Returns the sign of a felt252.\n// num is considered positive if num <= (STARK-1)//2\n// num is considered negative if num > (STARK-1)//2\npub fn sign(num: felt252) -> felt252 {\n    if num.into() <= STARK_MINUS_1_HALF {\n        return 1;\n    } else {\n        return -1;\n    }\n}\n\n// Maps a sign returned by sign() to a u384 modulo the prime of a given curve index.\npub fn sign_to_u384(sign: felt252, curve_index: usize) -> u384 {\n    if (sign == -1) {\n        return get_min_one(curve_index);\n    } else {\n        return u384 { limb0: 1, limb1: 0, limb2: 0, limb3: 0 };\n    }\n}\n\npub fn u256_array_to_low_high_epns(\n    scalars: Span<u256>,\n    scalars_digits_decompositions: Option<Span<(Span<felt252>, Span<felt252>)>>,\n) -> (Array<(felt252, felt252, felt252, felt252)>, Array<(felt252, felt252, felt252, felt252)>) {\n    let mut epns_low: Array<(felt252, felt252, felt252, felt252)> = ArrayTrait::new();\n    let mut epns_high: Array<(felt252, felt252, felt252, felt252)> = ArrayTrait::new();\n\n    match scalars_digits_decompositions {\n        Option::None(_) => {\n            for scalar in scalars {\n                epns_low.append(scalar_to_epns(*scalar.low));\n                epns_high.append(scalar_to_epns(*scalar.high));\n            }\n        },\n        Option::Some(decompositions) => {\n            let mut i = 0;\n            for scalar in scalars {\n                match decompositions.get(i) {\n                    Option::Some(decompositions) => {\n                        let (decomposition_low, decomposition_high) = decompositions.unbox();\n                        epns_low\n                            .append(scalar_to_epns_with_digits(*scalar.low, *decomposition_low));\n                        epns_high\n                            .append(scalar_to_epns_with_digits(*scalar.high, *decomposition_high));\n                    },\n                    Option::None(_) => {\n                        epns_low.append(scalar_to_epns(*scalar.low));\n                        epns_high.append(scalar_to_epns(*scalar.high));\n                    },\n                }\n                i += 1;\n            }\n        },\n    }\n\n    return (epns_low, epns_high);\n}\n\npub fn u128_array_to_epns(\n    scalars: Span<u128>, scalars_digits_decompositions: Option<Span<Span<felt252>>>,\n) -> Array<(felt252, felt252, felt252, felt252)> {\n    let mut epns: Array<(felt252, felt252, felt252, felt252)> = ArrayTrait::new();\n\n    match scalars_digits_decompositions {\n        Option::None(_) => { for scalar in scalars {\n            epns.append(scalar_to_epns(*scalar));\n        } },\n        Option::Some(decompositions) => {\n            let mut i = 0;\n            for scalar in scalars {\n                match decompositions.get(i) {\n                    Option::Some(decomposition) => {\n                        let decomposition = decomposition.unbox();\n                        epns.append(scalar_to_epns_with_digits(*scalar, *decomposition));\n                    },\n                    Option::None(_) => { epns.append(scalar_to_epns(*scalar)); },\n                }\n                i += 1;\n            }\n        },\n    }\n\n    return epns;\n}\n\nconst THREE: felt252 = 3;\nconst THREE_NZ_TYPED: NonZero<UnitInt<THREE>> = 3;\nconst POW128_DIV_3: felt252 = 113427455640312821154458202477256070485; // ((2^128-1) // 3)\nconst POW128: felt252 = 0x100000000000000000000000000000000;\n\nimpl DivRemU128By3 of DivRemHelper<BoundedInt<0, { POW128 - 1 }>, UnitInt<THREE>> {\n    type DivT = BoundedInt<0, { POW128_DIV_3 }>;\n    type RemT = BoundedInt<0, { THREE - 1 }>;\n}\n\nimpl AddOneHelper of AddHelper<BoundedInt<0, { POW128_DIV_3 }>, BoundedInt<0, 1>> {\n    type Result = BoundedInt<0, { POW128_DIV_3 + 1 }>;\n}\n\n// From a 128 bit scalar, returns the positive and negative multiplicities of the scalar in base\n// (-3)\n// scalar = sum(digits[i] * (-3)^i for i in [0, 81])\n// scalar = sum_p - sum_n\n// Where sum_p = sum(digits[i] * (-3)^i for i in [0, 81] if digits[i]==1)\n// And sum_n = sum(digits[i] * (-3)^i for i in [0, 81] if digits[i]==-1)\n// Returns (abs(sum_p), abs(sum_n), p_sign, n_sign)\npub fn scalar_to_epns(mut _scalar: u128) -> (felt252, felt252, felt252, felt252) {\n    let mut sum_p: felt252 = 0;\n    let mut sum_n: felt252 = 0;\n\n    let mut base_power: felt252 = 1; // Init to (-3)^0\n\n    let mut scalar: BoundedInt<0, { POW128 - 1 }> = upcast(_scalar);\n    while scalar != 0 {\n        let (q0, r0) = bounded_int::div_rem(scalar, THREE_NZ_TYPED);\n        let r0: felt252 = r0.into();\n\n        if r0 == 0 {\n            scalar = upcast(q0);\n        } else if r0 == 2 {\n            scalar = upcast(bounded_int::add(q0, 1));\n            sum_n += base_power;\n        } else {\n            scalar = upcast(q0);\n            sum_p += base_power;\n        }\n        base_power = base_power * (-3);\n\n        let (q1, r1) = bounded_int::div_rem(scalar, THREE_NZ_TYPED);\n        let r1: felt252 = r1.into();\n\n        if r1 == 0 {\n            scalar = upcast(q1);\n        } else if r1 == 2 {\n            scalar = upcast(bounded_int::add(q1, 1));\n            sum_p += base_power;\n        } else {\n            scalar = upcast(q1);\n            sum_n += base_power;\n        }\n\n        base_power = base_power * (-3);\n    }\n\n    let sign_p = sign(sum_p);\n    let sign_n = sign(sum_n);\n    return (sign_p * sum_p, sign_n * sum_n, sign_p, sign_n);\n}\n\n\npub fn scalar_to_epns_with_digits(\n    scalar: u128, mut digits: Span<felt252>,\n) -> (felt252, felt252, felt252, felt252) {\n    assert!(digits.len() <= 82, \"The number of digits must be <= 82 for u128\");\n    let mut sum_p = 0;\n    let mut sum_n = 0;\n\n    let mut base_power = 1; // Init to (-3)^0\n\n    while let Option::Some(digit) = digits.pop_front() {\n        let digit = *digit;\n        if digit != 0 {\n            if digit == 1 {\n                sum_p += base_power;\n            } else {\n                sum_n += base_power;\n            }\n        }\n\n        base_power = base_power * (-3);\n    }\n\n    assert!(\n        scalar.into() == sum_p - sum_n,\n        \"The scalar must be equal to the sum of the positive and negative digits\",\n    );\n\n    let sign_p = sign(sum_p);\n    let sign_n = sign(sum_n);\n    return (sign_p * sum_p, sign_n * sum_n, sign_p, sign_n);\n}\n\n\n#[cfg(test)]\nmod tests {\n    use super::scalar_to_epns;\n\n    #[test]\n    fn test_scalar_to_epns() {\n        let (sum_p, sum_n, sign_p, sign_n) = scalar_to_epns(12);\n\n        assert_eq!(sum_p, 9);\n        assert_eq!(sum_n, 3);\n        assert_eq!(sign_p, 1);\n        assert_eq!(sign_n, -1);\n\n        let (sum_p, sum_n, sign_p, sign_n) = scalar_to_epns(35);\n\n        assert_eq!(sum_p, 9);\n        assert_eq!(sum_n, 26);\n        assert_eq!(sign_p, 1);\n        assert_eq!(sign_n, -1);\n\n        let (sum_p, sum_n, _, _) = scalar_to_epns(0);\n\n        assert_eq!(sum_p, 0);\n        assert_eq!(sum_n, 0);\n\n        let (sum_p, sum_n, sign_p, sign_n) = scalar_to_epns(\n            170141183460469231731687303715884105728,\n        ); //2**127\n\n        assert_eq!(sum_p, 164253760949568696627221936579612523510);\n        assert_eq!(sum_n, 5887422510900535104465367136271582218); //using STARK field\n        assert_eq!(sign_p, 1);\n        assert_eq!(sign_n, -1);\n\n        let (sum_p, sum_n, sign_p, sign_n) = scalar_to_epns(\n            85070591730234615865843651857942052864,\n        ); //2 **126\n\n        assert_eq!(sum_p, 97865891762673628272143863189949020615);\n        assert_eq!(sum_n, 12795300032439012406300211332006967751);\n        assert_eq!(sign_p, 1);\n        assert_eq!(sign_n, 1);\n\n        let (sum_p, sum_n, sign_p, sign_n) = scalar_to_epns(\n            85070591730234615865843651857942052874,\n        ); //2 **126 + 10\n\n        assert_eq!(sum_p, 97865891762673628272143863189949020623);\n        assert_eq!(sum_n, 12795300032439012406300211332006967749);\n        assert_eq!(sign_p, 1);\n        assert_eq!(sign_n, 1);\n    }\n\n    #[test]\n    fn test_scalar_to_epns_single() {\n        let (sum_p, sum_n, sign_p, sign_n) = scalar_to_epns(\n            170141183460469231731687303715884105728,\n        ); //2**127\n\n        assert_eq!(sum_p, 164253760949568696627221936579612523510);\n        assert_eq!(sum_n, 5887422510900535104465367136271582218);\n        assert_eq!(sign_p, 1);\n        assert_eq!(sign_n, -1);\n    }\n}\n\n"
  },
  {
    "path": "tests/benchmarks_compiled.py",
    "content": "import inspect\n\nimport pandas as pd\nfrom tabulate import tabulate\n\nfrom garaga.curves import CurveID\nfrom hydra.garaga.precompiled_circuits.all_circuits import ALL_CAIRO_CIRCUITS\n\n\ndef benchmark_all_cairo_circuits():\n    \"\"\"\n    For each circuit class in ALL_CAIRO_CIRCUITS:\n      - Instantiate the circuit (with any params, for each listed curve_id).\n      - Safe-construct them by removing any kwargs that aren't accepted by their __init__.\n      - finalize the circuit (if not already done).\n      - gather the summary info (MULMOD, ADDMOD, etc.).\n    Then we mark circuits as \"GENERIC\" if they have the same MULMOD/ADDMOD on multiple curves.\n    \"\"\"\n\n    results = []\n\n    for circuit_id, circuit_info in ALL_CAIRO_CIRCUITS.items():\n        # If no curve_ids present, default to [BN254, BLS12_381]\n        curve_ids = circuit_info.get(\"curve_ids\", [CurveID.BN254, CurveID.BLS12_381])\n        # If params is None, turn that into a list of length 1 containing None\n        params_list = circuit_info[\"params\"] or [None]\n        circuit_class = circuit_info[\"class\"]\n\n        # Use inspect to see valid parameters on the circuit class's __init__\n        init_signature = inspect.signature(circuit_class.__init__)\n        valid_params = set(init_signature.parameters.keys())\n\n        for curve_id in curve_ids:\n            for param in params_list:\n                # Build default kwargs\n                kwargs = {\n                    \"name\": f\"{circuit_class.__name__}_bench\",\n                    \"curve_id\": curve_id.value,\n                    \"auto_run\": True,\n                    \"compilation_mode\": 1,\n                }\n\n                # Possibly update with param dict\n                if isinstance(param, dict):\n                    kwargs.update(param)\n\n                # Remove any keys the constructor doesn't accept\n                safe_kwargs = {k: v for k, v in kwargs.items() if k in valid_params}\n\n                # Now instantiate the circuit safely\n                circuit_instance = circuit_class(**safe_kwargs)\n\n                # Summarize\n                summary = circuit_instance.circuit.summarize()\n\n                # Build row for DataFrame, including separate columns for the class, param, curve\n                row = {\n                    \"circuit_class\": circuit_class.__name__,\n                    \"param\": str(param) if param else \"\",\n                    \"curve_id\": curve_id.name,\n                    \"MULMOD\": summary.get(\"MULMOD\", 0),\n                    \"ADDMOD\": summary.get(\"ADDMOD\", 0),\n                }\n                results.append(row)\n\n    # Create a DataFrame\n    df = pd.DataFrame(results)\n\n    # If you want to compute a simple \"~steps\" metric:\n    costs = {\"MULMOD\": 8, \"ADDMOD\": 4}\n\n    def compute_steps(row):\n        return sum(row[op] * wt for op, wt in costs.items())\n\n    df[\"~steps\"] = df.apply(compute_steps, axis=1)\n\n    # Sort by ~steps first\n    df.sort_values(by=\"~steps\", inplace=True, ignore_index=True)\n\n    # 1) Group by (circuit_class, param, MULMOD, ADDMOD).\n    # 2) If multiple distinct curves appear in a group, mark curve_id as \"GENERIC\".\n    df[\"curve_id\"] = df.groupby([\"circuit_class\", \"param\", \"MULMOD\", \"ADDMOD\"])[\n        \"curve_id\"\n    ].transform(lambda g: \"GENERIC\" if g.nunique() > 1 else g)\n\n    # Drop duplicates, so \"GENERIC\" appears only once per group\n    df_unique = df.drop_duplicates(\n        subset=[\"circuit_class\", \"param\", \"MULMOD\", \"ADDMOD\", \"curve_id\"], keep=\"first\"\n    )\n\n    print(\"\\n===== Benchmark Summaries (Filtered) =====\\n\")\n    print(tabulate(df_unique, headers=\"keys\", tablefmt=\"github\", showindex=False))\n\n\nif __name__ == \"__main__\":\n    benchmark_all_cairo_circuits()\n"
  },
  {
    "path": "tests/benchmarks_manual.py",
    "content": "import random\nfrom random import randint\n\nfrom garaga.algebra import ModuloCircuitElement\nfrom garaga.curves import CURVES, STARK, Curve, CurveID, PyFelt, get_base_field\nfrom garaga.extension_field_modulo_circuit import ExtensionFieldModuloCircuit, WriteOps\nfrom garaga.hints import neg_3\nfrom garaga.hints.ecip import zk_ecip_hint\nfrom garaga.hints.io import padd_function_felt, split_128\nfrom garaga.hints.tower_backup import E12\nfrom garaga.points import G1G2Pair, G1Point, G2Point, direct_to_tower\nfrom garaga.precompiled_circuits.ec import BasicEC, DerivePointFromX, ECIPCircuits\nfrom garaga.precompiled_circuits.final_exp import FinalExpTorusCircuit, test_final_exp\nfrom garaga.precompiled_circuits.multi_miller_loop import MultiMillerLoopCircuit\n\nrandom.seed(0)\n\n\ndef test_extf_mul(curve_id: CurveID, extension_degree: int):\n    curve: Curve = CURVES[curve_id.value]\n    p = curve.p\n    X = [PyFelt(randint(0, p - 1), p) for _ in range(extension_degree)]\n    Y = [PyFelt(randint(0, p - 1), p) for _ in range(extension_degree)]\n    circuit = ExtensionFieldModuloCircuit(\n        f\"Fp{extension_degree} MUL\",\n        curve_id=curve_id.value,\n        extension_degree=extension_degree,\n        hash_input=False,\n    )\n    X = circuit.write_elements(X, WriteOps.INPUT)\n    Y = circuit.write_elements(Y, WriteOps.INPUT)\n    circuit.extf_mul([X, Y], extension_degree)\n    circuit.finalize_circuit()\n    return circuit.summarize(), circuit.ops_counter\n\n\ndef test_extf_square(curve_id: CurveID, extension_degree: int):\n    curve: Curve = CURVES[curve_id.value]\n    p = curve.p\n    X = [PyFelt(randint(0, p - 1), p) for _ in range(extension_degree)]\n    circuit = ExtensionFieldModuloCircuit(\n        f\"Fp{extension_degree} SQUARE\",\n        curve_id=curve_id.value,\n        extension_degree=extension_degree,\n        hash_input=False,\n    )\n    X = circuit.write_elements(X, WriteOps.INPUT)\n    circuit.extf_mul([X, X], extension_degree)\n    circuit.finalize_circuit()\n\n    return circuit.summarize(), circuit.ops_counter\n\n\ndef test_extf_mul_circuit_full(curve_id: CurveID, extension_degree: int):\n    curve: Curve = CURVES[curve_id.value]\n    p = curve.p\n    X = [PyFelt(randint(0, p - 1), p) for _ in range(extension_degree)]\n    circuit = ExtensionFieldModuloCircuit(\n        f\"{curve_id.name}_mul_zpow_verif_Fp{extension_degree}\",\n        curve_id=curve_id.value,\n        extension_degree=extension_degree,\n    )\n    X = circuit.write_elements(X, WriteOps.INPUT)\n    circuit.extf_mul(X, X, extension_degree)\n    circuit.finalize_circuit()\n    circuit.values_segment = circuit.values_segment.non_interactive_transform()\n    circuit.print_value_segment()\n    return circuit.summarize(), circuit.ops_counter\n\n\ndef test_square_torus_amortized(curve_id: CurveID, extension_degree: int):\n    curve: Curve = CURVES[curve_id.value]\n    p = curve.p\n    X = [PyFelt(randint(0, p - 1), p) for _ in range(extension_degree)]\n    circuit = FinalExpTorusCircuit(\n        f\"Fp{extension_degree} SQUARE_TORUS\",\n        curve_id=curve_id.value,\n        extension_degree=extension_degree,\n        hash_input=False,\n    )\n    X = circuit.write_elements(X, WriteOps.INPUT)\n    circuit.square_torus(X)\n    circuit.finalize_circuit()\n    return circuit.summarize(), circuit.ops_counter\n\n\ndef test_mul_torus(curve_id: CurveID, extension_degree: int):\n    curve: Curve = CURVES[curve_id.value]\n    p = curve.p\n    X = [PyFelt(randint(0, p - 1), p) for _ in range(extension_degree)]\n    Y = [PyFelt(randint(0, p - 1), p) for _ in range(extension_degree)]\n    circuit = FinalExpTorusCircuit(\n        f\"Fp{extension_degree} MUL_TORUS\",\n        curve_id=curve_id.value,\n        extension_degree=extension_degree,\n        hash_input=False,\n    )\n    X = circuit.write_elements(X, WriteOps.INPUT)\n    Y = circuit.write_elements(Y, WriteOps.INPUT)\n    circuit.mul_torus(X, Y)\n    circuit.finalize_circuit()\n    return circuit.summarize(), circuit.ops_counter\n\n\ndef test_final_exp_circuit(curve_id: CurveID):\n    part1, part2 = test_final_exp(curve_id)\n    summ1 = part1.summarize()\n    summ1[\"circuit\"] = summ1[\"circuit\"]\n    summ2 = part2.summarize()\n    summ2[\"circuit\"] = summ2[\"circuit\"]\n    # part1.print_value_segment()\n    # part1.compile_circuit()\n    summ = {\n        \"circuit\": summ1[\"circuit\"],\n        \"MULMOD\": summ1[\"MULMOD\"] + summ2[\"MULMOD\"],\n        \"ADDMOD\": summ1[\"ADDMOD\"] + summ2[\"ADDMOD\"],\n        \"ASSERT_EQ\": summ1[\"ASSERT_EQ\"] + summ2[\"ASSERT_EQ\"],\n        \"POSEIDON\": summ1[\"POSEIDON\"] + summ2[\"POSEIDON\"],\n        \"RLC\": summ1[\"RLC\"] + summ2[\"RLC\"],\n    }\n    ops_counter = {\n        key: part1.ops_counter.get(key) + part2.ops_counter.get(key)\n        for key in set(part1.ops_counter) | set(part2.ops_counter)\n        if key != \"Circuit\"\n    }\n    ops_counter[\"Circuit\"] = part1.ops_counter[\"Circuit\"]\n    return summ, ops_counter\n\n\ndef test_miller_n(curve_id, n):\n    order = CURVES[curve_id.value].n\n    field = get_base_field(curve_id.value)\n    pair_list = []\n    pairs = []\n    for k in range(n):\n        n1, n2 = randint(1, order), randint(1, order)\n        p1, p2 = G1Point.get_nG(curve_id, n1), G2Point.get_nG(curve_id, n2)\n        pair_list.append(G1G2Pair(p1, p2))\n        pairs.extend([p1.x, p1.y, p2.x[0], p2.x[1], p2.y[0], p2.y[1]])\n\n    c = MultiMillerLoopCircuit(f\"Miller n={n} {curve_id.name}\", curve_id.value, n)\n    c.write_p_and_q_raw([field(x) for x in pairs])\n\n    f = c.miller_loop(n_pairs=n)\n\n    f_tower = E12(\n        direct_to_tower([x.felt for x in f], curve_id.value, 12), curve_id.value\n    )\n    cofactor = CURVES[curve_id.value].final_exp_cofactor\n\n    f = f_tower ** (\n        cofactor * (CURVES[curve_id.value].p ** 12 - 1) // CURVES[curve_id.value].n\n    )\n\n    res = G1G2Pair.pair(pair_list).value_coeffs\n\n    c.finalize_circuit()\n\n    for i, (rg, fv) in enumerate(zip(res, f.value_coeffs)):\n        assert rg == fv, f\"Mismatch at index {i}: {rg=} != {fv=}, {curve_id} {n}\"\n\n    return c.summarize(), c.ops_counter\n\n\ndef test_derive_point_from_x(curve_id: CurveID):\n    field = get_base_field(curve_id.value)\n    c = DerivePointFromX(\n        \"Derive Point From X\",\n        curve_id.value,\n    )\n    x = c.write_element(field(randint(0, STARK - 1)))\n    a = c.write_element(field(CURVES[curve_id.value].a))\n    b = c.write_element(field(CURVES[curve_id.value].b))\n    g = c.write_element(field(CURVES[curve_id.value].fp_generator))\n    c._derive_point_from_x(x, a, b, g)\n    return c.summarize(), None\n\n\ndef test_msm_n_points(curve_id: CurveID, n: int):\n    order = CURVES[curve_id.value].n\n    field = get_base_field(curve_id.value)\n    points_g1 = [G1Point.get_nG(curve_id, i + 1) for i in range(n)]\n    points_values = [(p.x, p.y) for p in points_g1]\n    scalars = [randint(1, order) for _ in range(n)]\n    scalars_split = [split_128(s) for s in scalars]\n    scalars_low, scalars_high = zip(*scalars_split)\n\n    circuit: ECIPCircuits = ECIPCircuits(f\"MSM {n} points\", curve_id.value)\n\n    A0 = G1Point.gen_random_point(curve_id)\n    # A0 = G1Point(\n    #     18428833980079511615272996143804193211436754676692982772704777987001013940329,\n    #     11912813278234620045155380611021998667623598196864500681264424672047345567217,\n    #     curve_id,\n    # )\n    A0: tuple(ModuloCircuitElement, ModuloCircuitElement) = (\n        circuit.write_element(field(A0.x)),\n        circuit.write_element(field(A0.y)),\n    )\n    A_weirstrass = circuit.write_element(field(CURVES[curve_id.value].a))\n    m_A0, b_A0, xA0, yA0, xA2, yA2, coeff0, coeff2 = (\n        circuit._slope_intercept_same_point(A0, A_weirstrass)\n    )\n    points = [\n        (circuit.write_element(field(x)), circuit.write_element(field(y)))\n        for x, y in points_values\n    ]\n\n    def msm_inner(points, scalars):\n        epns = [\n            neg_3.positive_negative_multiplicities(neg_3.neg_3_base_le(s))\n            for s in scalars\n        ]\n\n        first_B = points[0]\n        if isinstance(first_B, G1Point):\n            points_g1 = points\n        elif isinstance(first_B, tuple):\n            if isinstance(first_B[0], int):\n                points_g1 = [G1Point(B[0], B[1], curve_id) for B in points]\n            else:\n                points_g1 = [G1Point(B[0].value, B[1].value, curve_id) for B in points]\n        else:\n            raise ValueError(\"Invalid Bs type\")\n\n        Q, SumDlog = zk_ecip_hint(points_g1, scalars)\n        rhs_acc = circuit.write_element(field(0))\n        for index, (point, epn) in enumerate(zip(points, epns)):\n            # print(f\"RHS INDEX : {index}\")\n            ep = circuit.write_element(field(abs(epn[0])))\n            en = circuit.write_element(field(abs(epn[1])))\n            p_sign = circuit.write_element(field(epn[0] // abs(epn[0])))\n            n_sign = circuit.write_element(field(epn[1] // abs(epn[1])))\n            rhs_acc = circuit._accumulate_eval_point_challenge_signed_same_point(\n                rhs_acc, (m_A0, b_A0), xA0, point, ep, en, p_sign, n_sign\n            )\n            # print(f\"\\trhs_acc_intermediate: {rhs_acc.value}\")\n        Q = (Q.x, Q.y)\n        if Q != (0, 0):\n            Q = (circuit.write_element(field(Q[0])), circuit.write_element(field(Q[1])))\n            rhs_acc = circuit._RHS_finalize_acc(rhs_acc, (m_A0, b_A0), xA0, Q)\n\n        a_num, a_den, b_num, b_den = padd_function_felt(SumDlog, n)\n        a_num, a_den, b_num, b_den = (\n            circuit.write_elements([field(x) for x in a_num], WriteOps.INPUT),\n            circuit.write_elements([field(x) for x in a_den], WriteOps.INPUT),\n            circuit.write_elements([field(x) for x in b_num], WriteOps.INPUT),\n            circuit.write_elements([field(x) for x in b_den], WriteOps.INPUT),\n        )\n        lhs = circuit._eval_function_challenge_dupl(\n            (xA0, yA0), (xA2, yA2), coeff0, coeff2, a_num, a_den, b_num, b_den\n        )\n\n        assert lhs.value == rhs_acc.value, f\"{lhs.value} != {rhs_acc.value}\"\n\n        if Q == (0, 0):\n            return G1Point.infinity(curve_id)\n        return G1Point(Q[0].value, Q[1].value, curve_id)\n        # print(f\"\\tlhs: {lhs.value}\")\n        # print(f\"\\trhs_acc_final: {rhs_acc.value}\")\n\n    Q_low = msm_inner(points, scalars_low)\n    Q_high = msm_inner(points, scalars_high)\n    Q_shift = msm_inner(\n        [\n            (\n                circuit.write_element(field(Q_high.x)),\n                circuit.write_element(field(Q_high.y)),\n            )\n        ],\n        [2**128],\n    )\n\n    scalar_mul_low = G1Point.msm(points_g1, scalars_low)\n    scalar_mul_high = G1Point.msm(points_g1, scalars_high)\n    scalar_mul = G1Point.msm(points_g1, scalars)\n\n    assert Q_low == scalar_mul_low, f\"{Q_low} != {scalar_mul_low}\"\n    assert Q_high == scalar_mul_high, f\"{Q_high} != {scalar_mul_high}\"\n    assert Q_high.scalar_mul(2**128) == Q_shift\n\n    assert Q_low.add(Q_shift) == scalar_mul\n\n    basic_ec = BasicEC(\"Basic EC\", curve_id.value)\n    final_res = basic_ec.add_points(\n        basic_ec.write_elements([field(Q_low.x), field(Q_low.y)], WriteOps.INPUT),\n        basic_ec.write_elements([field(Q_shift.x), field(Q_shift.y)], WriteOps.INPUT),\n    )\n    assert G1Point(final_res[0].value, final_res[1].value, curve_id) == Q_low.add(\n        Q_shift\n    )\n    ec_summary = basic_ec.summarize()\n    circuit.values_segment = circuit.values_segment.non_interactive_transform()\n\n    summary = circuit.summarize()\n    summary[\"MULMOD\"] = summary[\"MULMOD\"] + ec_summary[\"MULMOD\"]\n    summary[\"ADDMOD\"] = summary[\"ADDMOD\"] + ec_summary[\"ADDMOD\"]\n    summary[\"POSEIDON\"] = n * 2  # N points\n    summary[\"POSEIDON\"] += n * 2  # N scalars (spliited in low_high)\n    summary[\"POSEIDON\"] += 3 * 2  # 3 Q result points\n    summary[\"POSEIDON\"] += 2 * (4 * n + 10)  # 2 * Total # of coefficients in SumDlogDiv\n    summary[\"POSEIDON\"] += (\n        4 + 10\n    )  # Total # of coefficients in SumDlogDivShifted (1 point MSM)\n    return summary, None\n\n\nif __name__ == \"__main__\":\n    import pandas as pd\n    from tabulate import tabulate\n\n    pd.set_option(\"display.max_rows\", None)  # None means show all rows\n    pd.set_option(\"display.max_columns\", None)  # None means show all columns\n    pd.set_option(\"display.width\", None)  # None means auto-detect the display width\n    pd.set_option(\"display.max_colwidth\", None)  # None means show full width of columns\n\n    builtin_ops_data = []\n    builtin_ops_data.append(\n        {\n            \"circuit\": \"BLS12FinalExp Fp12 Karabina No EXTF Trick\",\n            \"MULMOD\": 7774,\n            \"ADDMOD\": 26038 + 16964,  # ADD + SUBS.\n            \"ASSERT_EQ\": 0,\n            \"POSEIDON\": 0,\n            \"RLC\": 0,\n        }\n    )\n\n    final_exp_data = {CurveID.BN254: None, CurveID.BLS12_381: None}\n    sub_circuit_count = []\n    # print(f\"Running...\")\n    for curveID in [CurveID.BN254, CurveID.BLS12_381]:\n        builtin_ops, sub_circuits = test_final_exp_circuit(curveID)\n        builtin_ops_data.append(builtin_ops)\n        final_exp_data[curveID] = builtin_ops\n        sub_circuit_count.append(sub_circuits)\n\n    # Sub circuits. Same values for both curves\n    for test_func, curve_id, ext_degree in [\n        (test_extf_square, CurveID.BLS12_381, 12),\n        (test_mul_torus, CurveID.BLS12_381, 6),\n        (test_square_torus_amortized, CurveID.BLS12_381, 6),\n        (test_extf_mul, CurveID.BLS12_381, 12),\n    ]:\n        builtin_ops, _ = test_func(curve_id, ext_degree)\n        builtin_ops_data.append(builtin_ops)\n\n    for test_func, curve_id in [\n        (test_derive_point_from_x, CurveID.BN254),\n    ]:\n        builtin_ops, _ = test_func(curve_id)\n        builtin_ops_data.append(builtin_ops)\n\n    for n in [1, 2, 3]:\n        for curve_id in [CurveID.BLS12_381, CurveID.BN254]:\n\n            # print(f\"Running {curve_id} {n}\")\n            builtin_ops, sub_circuits = test_miller_n(curve_id, n)\n            builtin_ops_data.append(builtin_ops)\n            builtin_ops_data.append(\n                {\n                    \"circuit\": f\"MultiPairing {n=} {curve_id.name}\",\n                    \"MULMOD\": builtin_ops[\"MULMOD\"]\n                    + final_exp_data[curve_id][\"MULMOD\"],\n                    \"ADDMOD\": builtin_ops[\"ADDMOD\"]\n                    + final_exp_data[curve_id][\"ADDMOD\"],\n                    \"ASSERT_EQ\": builtin_ops[\"ASSERT_EQ\"]\n                    + final_exp_data[curve_id][\"ASSERT_EQ\"],\n                    \"POSEIDON\": builtin_ops[\"POSEIDON\"]\n                    + final_exp_data[curve_id][\"POSEIDON\"],\n                    \"RLC\": builtin_ops[\"RLC\"] + final_exp_data[curve_id][\"RLC\"],\n                }\n            )\n            sub_circuit_count.append(sub_circuits)\n\n    for n in [1, 2, 3, 10, 50]:\n        builtin_ops, _ = test_msm_n_points(CurveID.BN254, n)\n        builtin_ops_data.append(builtin_ops)\n\n    df = pd.DataFrame(builtin_ops_data)\n\n    costs = [\n        {\n            \"OP\": \"MULMOD\",\n            \"Weight in steps\": 8,\n            \"Comment\": \"Equivalent cost of a*b % p with the modulo builtin in VM steps\",\n        },\n        {\n            \"OP\": \"ADDMOD\",\n            \"Weight in steps\": 4,\n            \"Comment\": \"Equivalent cost of a+b % p with the modulo builtin in VM steps\",\n        },\n        {\n            \"OP\": \"ASSERT_EQ\",\n            \"Weight in steps\": 2,\n            \"Comment\": \"Equivalent cost of a==b % p with the modulo builtin in VM steps\",\n        },\n        {\n            \"OP\": \"POSEIDON\",\n            \"Weight in steps\": 16,\n            \"Comment\": \"Cost of hashing the first 3 limbs of 384 bits emulated field element with Poseidon\",\n        },\n        {\n            \"OP\": \"RLC\",\n            \"Weight in steps\": 28,\n            \"Comment\": \"Cost of writing a field element to the value segment and retrieving random coefficients\",\n        },\n    ]\n\n    def get_poseidon_cost(curve_name: CurveID) -> int:\n        poseidon_costs = {\n            CurveID.BN254: 14,\n            CurveID.BLS12_381: 17,\n        }\n        return poseidon_costs.get(curve_name, 0)  # Default to 0 if curve_name not found\n\n    def calculate_row_cost(row):\n        total_cost = 0\n        for _row in costs:\n            op, weight = _row[\"OP\"], _row[\"Weight in steps\"]\n            if \"POSEIDON\" in op:\n                # Dynamically adjust Poseidon cost based on the 'circuit' column\n                for curve_id in CurveID:\n                    if curve_id.name in row[\"circuit\"]:\n                        weight = get_poseidon_cost(curve_id)\n                        break  # Stop checking once the first matching CurveID is found\n            total_cost += row[op] * weight\n        return total_cost\n\n    # Apply the function to each row to calculate the total cost\n    df[\"~steps\"] = df.apply(calculate_row_cost, axis=1)\n\n    pd.set_option(\"display.colheader_justify\", \"center\")\n    print(\"\\n\\n\")\n\n    costs = [cost for cost in costs if cost[\"OP\"] != \"POSEIDON\"]\n    costs.extend(\n        [\n            {\n                \"OP\": \"POSEIDON 4 LIMBS\",\n                \"Weight in steps\": 17,\n                \"Comment\": \"Cost of hashing the 4 limbs of 384 bits emulated field element with Poseidon\",\n            },\n        ]\n    )\n\n    df_costs = pd.DataFrame(costs)\n\n    print(tabulate(df_costs, headers=\"keys\", tablefmt=\"github\", showindex=False))\n    print(\"\\n\")\n    df.sort_values(by=\"~steps\", inplace=True)\n    print(\n        tabulate(\n            df,\n            headers=\"keys\",\n            tablefmt=\"github\",\n            showindex=False,\n            floatfmt=\".2f\",\n        )\n    )\n\n    df_sub_circuits = (\n        pd.DataFrame(sub_circuit_count)\n        .set_index(\"Circuit\")\n        .fillna(0)\n        .astype(int)\n        .transpose()\n    )\n\n    # print(\"\\n\")\n    # print(\n    #     tabulate(\n    #         df_sub_circuits,\n    #         headers=\"keys\",\n    #         tablefmt=\"github\",\n    #         showindex=True,\n    #     )\n    # )\n    # print(\"\\n\")\n"
  },
  {
    "path": "tests/conftest.py",
    "content": "import os\nfrom pathlib import Path\n\n# Configure Hypothesis to store all its data in the .cargo/hypothesis directory\nbuild_path = Path(__file__).parent.parent / \".cargo\" / \"hypothesis\"\nbuild_path.mkdir(\n    parents=True, exist_ok=True\n)  # Ensure the .cargo/hypothesis directory exists\n\n# Set the environment variable before importing hypothesis\nos.environ[\"HYPOTHESIS_STORAGE_DIRECTORY\"] = str(build_path)\n\nfrom hypothesis import settings\nfrom hypothesis.database import DirectoryBasedExampleDatabase\n\n# Also set the database for good measure\nsettings.register_profile(\"default\", database=DirectoryBasedExampleDatabase(build_path))\nsettings.load_profile(\"default\")\n\npytest_plugins = [\n    \"tests.contracts_e2e.fixtures.accounts\",\n    \"tests.contracts_e2e.fixtures.clients\",\n    \"tests.contracts_e2e.fixtures.devnet\",\n]\n"
  },
  {
    "path": "tests/contracts_e2e/__init__.py",
    "content": ""
  },
  {
    "path": "tests/contracts_e2e/e2e_test.py",
    "content": "from pathlib import Path\n\nimport pytest\nfrom starknet_py.contract import (\n    Contract,\n    ContractFunction,\n    InvokeResult,\n    PreparedFunctionInvokeV3,\n)\nfrom starknet_py.hash.address import compute_address\nfrom starknet_py.hash.utils import pedersen_hash\nfrom starknet_py.net.account.account import Account, BaseAccount\nfrom starknet_py.net.client_errors import ContractNotFoundError\n\nfrom garaga.curves import ProofSystem\nfrom garaga.hints.io import to_int\nfrom garaga.precompiled_circuits.zk_honk import honk_proof_from_bytes\nfrom garaga.starknet.cli.smart_contract_project import (\n    Groth16SmartContract,\n    SmartContractProject,\n)\nfrom garaga.starknet.groth16_contract_generator.generator import ECIP_OPS_CLASS_HASH\nfrom garaga.starknet.groth16_contract_generator.parsing_utils import (\n    find_item_from_key_patterns,\n)\nfrom garaga.starknet.honk_contract_generator.calldata import (\n    HonkVk,\n    get_ultra_flavor_honk_calldata_from_vk_and_proof,\n)\nfrom garaga.starknet.tests_and_calldata_generators.drand_calldata import (\n    drand_encrypt_to_calldata,\n    drand_round_to_calldata,\n)\n\nCONTRACTS_PATH = Path(\"src/contracts\")\nCONTRACTS_PATH_AUTOGENERATED = CONTRACTS_PATH / \"autogenerated\"\n\nGROTH16_EXAMPLES_PATH = Path(\n    \"hydra/garaga/starknet/groth16_contract_generator/examples\"\n)\nNOIR_EXAMPLES_PATH = Path(\"hydra/garaga/starknet/honk_contract_generator/examples\")\n\n\nALL_GROTH16_CONTRACTS = [\n    {\n        \"contract_project\": Groth16SmartContract(\n            smart_contract_folder=CONTRACTS_PATH_AUTOGENERATED / \"sp1_verifier_bn254\",\n            vk_path=GROTH16_EXAMPLES_PATH / \"vk_sp1.json\",\n        ),\n        \"proof_path\": GROTH16_EXAMPLES_PATH / \"proof_sp1.json\",\n    },\n    {\n        \"contract_project\": Groth16SmartContract(\n            smart_contract_folder=CONTRACTS_PATH_AUTOGENERATED / \"risc0_verifier_bn254\",\n            vk_path=GROTH16_EXAMPLES_PATH / \"vk_risc0.json\",\n        ),\n        \"proof_path\": GROTH16_EXAMPLES_PATH / \"proof_risc0.json\",\n    },\n    {\n        \"contract_project\": Groth16SmartContract(\n            smart_contract_folder=CONTRACTS_PATH_AUTOGENERATED\n            / \"groth16_example_bls12_381\",\n            vk_path=GROTH16_EXAMPLES_PATH / \"vk_bls.json\",\n        ),\n        \"proof_path\": GROTH16_EXAMPLES_PATH / \"proof_bls.json\",\n    },\n    {\n        \"contract_project\": Groth16SmartContract(\n            smart_contract_folder=CONTRACTS_PATH_AUTOGENERATED\n            / \"groth16_example_bn254\",\n            vk_path=GROTH16_EXAMPLES_PATH / \"vk_bn254.json\",\n        ),\n        \"proof_path\": GROTH16_EXAMPLES_PATH / \"proof_bn254.json\",\n    },\n]\n\nECIP_CONTRACT = SmartContractProject(\n    smart_contract_folder=CONTRACTS_PATH / \"universal_ecip\"\n)\n\nDEPLOYER_ADDRESS = 0x41A78E741E5AF2FEC34B695679BC6891742439F7AFB8484ECD7766661AD02BF\n\n\nasync def get_contract_if_exists(\n    account: Account, contract_address: int\n) -> Contract | None:\n    try:\n        res = await Contract.from_address(contract_address, account)\n        return res\n    except ContractNotFoundError:\n\n        return None\n\n\n@pytest.mark.asyncio\n@pytest.mark.parametrize(\"contract_info\", ALL_GROTH16_CONTRACTS)\nasync def test_groth16_contracts(account_devnet: BaseAccount, contract_info: dict):\n    account = account_devnet\n    contract_project: Groth16SmartContract = contract_info[\"contract_project\"]\n    proof_path: Path = contract_info[\"proof_path\"]\n\n    print(f\"ACCOUNT {hex(account.address)}, NONCE {await account.get_nonce()}\")\n\n    for i in range(2):\n        print(f\"\\n\\nROUND {i}\")\n        # Declare the ECIP contract\n        ecip_class_hash, _ = await ECIP_CONTRACT.declare_class_hash(account)\n\n        assert (\n            ecip_class_hash == ECIP_OPS_CLASS_HASH\n        ), f\"ECIP hardcoded class hash is not up to date, got {hex(ecip_class_hash)}, expected {hex(ECIP_OPS_CLASS_HASH)}\"\n\n        # Declare the groth16 contract\n        groth16_class_hash, groth16_abi = await contract_project.declare_class_hash(\n            account\n        )\n\n        print(f\"Declared contract class hash: {hex(groth16_class_hash)}\")\n\n        # Deploy the groth16 contract\n        precomputed_address = compute_address(\n            class_hash=groth16_class_hash,\n            constructor_calldata=[],\n            salt=pedersen_hash(to_int(account.address), 1),\n            deployer_address=DEPLOYER_ADDRESS,\n        )\n\n        try_contract = await get_contract_if_exists(account, precomputed_address)\n        if try_contract is None:\n            deploy_result = await Contract.deploy_contract_v3(\n                account=account,\n                class_hash=groth16_class_hash,\n                abi=groth16_abi,\n                deployer_address=DEPLOYER_ADDRESS,\n                auto_estimate=True,\n                salt=1,\n                cairo_version=1,\n            )\n            await deploy_result.wait_for_acceptance()\n\n            contract = deploy_result.deployed_contract\n        else:\n            print(f\"Contract already deployed at {hex(precomputed_address)}\")\n            contract = try_contract\n\n        print(f\"Deployed contract address: {hex(contract.address)}\")\n        print(f\"Deployed contract: {contract.functions}\")\n\n        function_call: ContractFunction = find_item_from_key_patterns(\n            contract.functions, [\"verify\"]\n        )\n\n        prepare_invoke = PreparedFunctionInvokeV3(\n            to_addr=function_call.contract_data.address,\n            calldata=contract_project.generate_calldata(\n                proof_path=proof_path, public_inputs_path=None\n            ),\n            selector=function_call.get_selector(function_call.name),\n            _contract_data=function_call.contract_data,\n            _client=function_call.client,\n            _account=function_call.account,\n            _payload_transformer=function_call._payload_transformer,\n            resource_bounds=None,\n        )\n\n        invoke_result: InvokeResult = await prepare_invoke.invoke(auto_estimate=True)\n\n        await invoke_result.wait_for_acceptance()\n\n        print(f\"Invoke result : {invoke_result.status}\")\n\n        receipt = await account.client.get_transaction_receipt(invoke_result.hash)\n        print(\n            f\"Execution resources: {contract_project.smart_contract_folder} \\n{receipt.execution_resources}\"\n        )\n\n\n@pytest.mark.asyncio\n@pytest.mark.parametrize(\n    \"contract_info\",\n    [\n        {\n            \"contract_project\": SmartContractProject(\n                smart_contract_folder=CONTRACTS_PATH / \"drand_quicknet\"\n            )\n        },\n    ],\n)\nasync def test_drand_contract(account_devnet: BaseAccount, contract_info: dict):\n    account = account_devnet\n    contract_project: SmartContractProject = contract_info[\"contract_project\"]\n\n    print(f\"ACCOUNT {hex(account.address)}, NONCE {await account.get_nonce()}\")\n\n    drand_class_hash, drand_abi = await contract_project.declare_class_hash(account)\n\n    print(f\"Declared contract class hash: {hex(drand_class_hash)}\")\n\n    # Deploy the drand contract\n    precomputed_address = compute_address(\n        class_hash=drand_class_hash,\n        constructor_calldata=[],\n        salt=pedersen_hash(to_int(account.address), 1),\n        deployer_address=DEPLOYER_ADDRESS,\n    )\n\n    try_contract = await get_contract_if_exists(account, precomputed_address)\n    if try_contract is None:\n        deploy_result = await Contract.deploy_contract_v3(\n            account=account,\n            class_hash=drand_class_hash,\n            abi=drand_abi,\n            deployer_address=DEPLOYER_ADDRESS,\n            auto_estimate=True,\n            salt=1,\n            cairo_version=1,\n        )\n        await deploy_result.wait_for_acceptance()\n\n        contract = deploy_result.deployed_contract\n    else:\n        print(f\"Contract already deployed at {hex(precomputed_address)}\")\n        contract = try_contract\n\n    print(f\"Deployed contract address: {hex(contract.address)}\")\n    print(f\"Deployed contract: {contract.functions}\")\n\n    function_call: ContractFunction = find_item_from_key_patterns(\n        contract.functions, [\"verify\"]\n    )\n\n    for drand_round in range(1, 5):\n        prepare_invoke = PreparedFunctionInvokeV3(\n            to_addr=function_call.contract_data.address,\n            calldata=drand_round_to_calldata(drand_round),\n            selector=function_call.get_selector(function_call.name),\n            _contract_data=function_call.contract_data,\n            _client=function_call.client,\n            _account=function_call.account,\n            _payload_transformer=function_call._payload_transformer,\n            resource_bounds=None,\n        )\n\n        invoke_result: InvokeResult = await prepare_invoke.invoke(auto_estimate=True)\n\n        await invoke_result.wait_for_acceptance()\n\n\n@pytest.mark.asyncio\n@pytest.mark.parametrize(\n    \"contract_info\",\n    [\n        {\n            \"verifier_project\": SmartContractProject(\n                smart_contract_folder=CONTRACTS_PATH / \"drand_quicknet\"\n            ),\n            \"decrypt_project\": SmartContractProject(\n                smart_contract_folder=CONTRACTS_PATH / \"drand_decrypt_quicknet\"\n            ),\n        },\n    ],\n)\nasync def test_drand_decrypt_contract(account_devnet: BaseAccount, contract_info: dict):\n    account = account_devnet\n\n    # Step 1: Declare the verifier class (not deployed) and generate decrypt constants\n    verifier_project: SmartContractProject = contract_info[\"verifier_project\"]\n    verifier_class_hash, _ = await verifier_project.declare_class_hash(account)\n    print(f\"Declared verifier class hash: {hex(verifier_class_hash)}\")\n\n    from garaga.starknet.tests_and_calldata_generators.drand_calldata import (\n        generate_drand_decrypt_constants,\n    )\n\n    decrypt_project: SmartContractProject = contract_info[\"decrypt_project\"]\n    generate_drand_decrypt_constants(\n        verifier_class_hash, decrypt_project.smart_contract_folder\n    )\n\n    # Step 2: Declare and deploy the decrypt contract\n    decrypt_class_hash, decrypt_abi = await decrypt_project.declare_class_hash(account)\n\n    precomputed_address = compute_address(\n        class_hash=decrypt_class_hash,\n        constructor_calldata=[],\n        salt=pedersen_hash(to_int(account.address), 2),\n        deployer_address=DEPLOYER_ADDRESS,\n    )\n\n    try_contract = await get_contract_if_exists(account, precomputed_address)\n    if try_contract is None:\n        deploy_result = await Contract.deploy_contract_v3(\n            account=account,\n            class_hash=decrypt_class_hash,\n            abi=decrypt_abi,\n            deployer_address=DEPLOYER_ADDRESS,\n            auto_estimate=True,\n            salt=2,\n            cairo_version=1,\n        )\n        await deploy_result.wait_for_acceptance()\n        contract = deploy_result.deployed_contract\n    else:\n        contract = try_contract\n\n    print(f\"Deployed decrypt contract at: {hex(contract.address)}\")\n    print(f\"Functions: {contract.functions}\")\n\n    verify_fn: ContractFunction = find_item_from_key_patterns(\n        contract.functions, [\"verify\"]\n    )\n    decrypt_fn: ContractFunction = find_item_from_key_patterns(\n        contract.functions, [\"decrypt\"]\n    )\n\n    # Step 3: Verify round 1 via library_call\n    invoke = PreparedFunctionInvokeV3(\n        to_addr=verify_fn.contract_data.address,\n        calldata=drand_round_to_calldata(1),\n        selector=verify_fn.get_selector(verify_fn.name),\n        _contract_data=verify_fn.contract_data,\n        _client=verify_fn.client,\n        _account=verify_fn.account,\n        _payload_transformer=verify_fn._payload_transformer,\n        resource_bounds=None,\n    )\n    result = await invoke.invoke(auto_estimate=True)\n    await result.wait_for_acceptance()\n    print(\"Round 1 verified via library_call\")\n\n    # Step 4: Decrypt for round 1 (signature already stored)\n    decrypt_calldata = drand_encrypt_to_calldata(\n        1, b\"0000000000000000\", b\"0000000000000000\"\n    )\n    invoke = PreparedFunctionInvokeV3(\n        to_addr=decrypt_fn.contract_data.address,\n        calldata=decrypt_calldata,\n        selector=decrypt_fn.get_selector(decrypt_fn.name),\n        _contract_data=decrypt_fn.contract_data,\n        _client=decrypt_fn.client,\n        _account=decrypt_fn.account,\n        _payload_transformer=decrypt_fn._payload_transformer,\n        resource_bounds=None,\n    )\n    result = await invoke.invoke(auto_estimate=True)\n    await result.wait_for_acceptance()\n    print(\"Round 1 decrypted (stored sig)\")\n\n    # Step 5: Decrypt for round 2 (combined: verify inline + decrypt)\n    encrypt_cd = drand_encrypt_to_calldata(2, b\"0000000000000000\", b\"0000000000000000\")\n    verify_cd = drand_round_to_calldata(2)\n    combined_data = encrypt_cd[1:] + verify_cd[1:]\n    combined_calldata = [len(combined_data)] + combined_data\n    invoke = PreparedFunctionInvokeV3(\n        to_addr=decrypt_fn.contract_data.address,\n        calldata=combined_calldata,\n        selector=decrypt_fn.get_selector(decrypt_fn.name),\n        _contract_data=decrypt_fn.contract_data,\n        _client=decrypt_fn.client,\n        _account=decrypt_fn.account,\n        _payload_transformer=decrypt_fn._payload_transformer,\n        resource_bounds=None,\n    )\n    result = await invoke.invoke(auto_estimate=True)\n    await result.wait_for_acceptance()\n    print(\"Round 2 verified + decrypted in one tx\")\n\n\nHONK_CONTRACTS = [\n    {\n        \"contract_project\": SmartContractProject(\n            smart_contract_folder=CONTRACTS_PATH_AUTOGENERATED\n            / \"noir_ultra_keccak_zk_honk_example\",\n        ),\n        \"vk_path\": NOIR_EXAMPLES_PATH / \"vk_ultra_keccak.bin\",\n        \"public_inputs_path\": NOIR_EXAMPLES_PATH / \"public_inputs_ultra_keccak.bin\",\n        \"proof_path\": NOIR_EXAMPLES_PATH / \"proof_ultra_keccak_zk.bin\",\n        \"system\": ProofSystem.UltraKeccakZKHonk,\n    },\n]\n\n\n@pytest.mark.asyncio\n@pytest.mark.parametrize(\"contract_info\", HONK_CONTRACTS)\nasync def test_honk_contracts(account_devnet: BaseAccount, contract_info: dict):\n    account = account_devnet\n    contract_project: SmartContractProject = contract_info[\"contract_project\"]\n    vk_path: Path = contract_info[\"vk_path\"]\n    proof_path: Path = contract_info[\"proof_path\"]\n    public_inputs_path: Path = contract_info[\"public_inputs_path\"]\n    system: ProofSystem = contract_info[\"system\"]\n\n    vk = HonkVk.from_bytes(open(vk_path, \"rb\").read())\n    proof = honk_proof_from_bytes(\n        open(proof_path, \"rb\").read(), open(public_inputs_path, \"rb\").read(), vk, system\n    )\n\n    print(f\"ACCOUNT {hex(account.address)}, NONCE {await account.get_nonce()}\")\n\n    # Declare the honk contract\n    honk_class_hash, honk_abi = await contract_project.declare_class_hash(account)\n\n    print(f\"Declared contract class hash: {hex(honk_class_hash)}\")\n\n    # Deploy the honk contract\n    precomputed_address = compute_address(\n        class_hash=honk_class_hash,\n        constructor_calldata=[],\n        salt=pedersen_hash(to_int(account.address), 1),\n        deployer_address=DEPLOYER_ADDRESS,\n    )\n\n    try_contract = await get_contract_if_exists(account, precomputed_address)\n    if try_contract is None:\n        deploy_result = await Contract.deploy_contract_v3(\n            account=account,\n            class_hash=honk_class_hash,\n            abi=honk_abi,\n            deployer_address=DEPLOYER_ADDRESS,\n            auto_estimate=True,\n            salt=1,\n            cairo_version=1,\n        )\n        await deploy_result.wait_for_acceptance()\n\n        contract = deploy_result.deployed_contract\n    else:\n        print(f\"Contract already deployed at {hex(precomputed_address)}\")\n        contract = try_contract\n\n    print(f\"Deployed contract address: {hex(contract.address)}\")\n    print(f\"Deployed contract: {contract.functions}\")\n\n    function_call: ContractFunction = find_item_from_key_patterns(\n        contract.functions, [\"verify\"]\n    )\n\n    prepare_invoke = PreparedFunctionInvokeV3(\n        to_addr=function_call.contract_data.address,\n        calldata=get_ultra_flavor_honk_calldata_from_vk_and_proof(\n            vk=vk, proof=proof, system=system\n        ),\n        selector=function_call.get_selector(function_call.name),\n        _contract_data=function_call.contract_data,\n        _client=function_call.client,\n        _account=function_call.account,\n        _payload_transformer=function_call._payload_transformer,\n        resource_bounds=None,\n    )\n\n    invoke_result: InvokeResult = await prepare_invoke.invoke(auto_estimate=True)\n\n    await invoke_result.wait_for_acceptance()\n\n    print(f\"Invoke result : {invoke_result.status}\")\n\n    receipt = await account.client.get_transaction_receipt(invoke_result.hash)\n    print(\n        f\"Execution resources: {contract_project.smart_contract_folder} \\n{receipt.execution_resources}\\n\"\n    )\n\n\n@pytest.mark.asyncio\nasync def test_risc0_sample_app(account_devnet: BaseAccount):\n    account = account_devnet\n\n    lib_contract_project = Groth16SmartContract(\n        smart_contract_folder=CONTRACTS_PATH_AUTOGENERATED / \"risc0_verifier_bn254\",\n        vk_path=GROTH16_EXAMPLES_PATH / \"vk_risc0.json\",\n    )\n\n    contract_project = SmartContractProject(\n        smart_contract_folder=CONTRACTS_PATH\n        / \"risc0_sample_app\"\n        / \"fibonacci_sequencer\",\n    )\n\n    proof_path = CONTRACTS_PATH / \"risc0_sample_app\" / \"fibonacci_prover\" / \"proof.json\"\n\n    src_path = (\n        CONTRACTS_PATH\n        / \"risc0_sample_app\"\n        / \"fibonacci_sequencer\"\n        / \"src\"\n        / \"lib.cairo\"\n    )\n\n    print(f\"ACCOUNT {hex(account.address)}, NONCE {await account.get_nonce()}\")\n\n    # Declare the ECIP contract\n    ecip_class_hash, _ = await ECIP_CONTRACT.declare_class_hash(account)\n\n    assert (\n        ecip_class_hash == ECIP_OPS_CLASS_HASH\n    ), f\"ECIP hardcoded class hash is not up to date, got {hex(ecip_class_hash)}, expected {hex(ECIP_OPS_CLASS_HASH)}\"\n\n    # Declare the risc0 verifier contract\n    lib_groth16_class_hash, _ = await lib_contract_project.declare_class_hash(account)\n\n    print(f\"Declared contract class hash: {hex(lib_groth16_class_hash)}\")\n\n    assert (\n        hex(lib_groth16_class_hash) in open(src_path).read()\n    ), f\"risc0_verifier_bn254 hardcoded class hash is not up to date, expected {hex(lib_groth16_class_hash)}\"\n\n    # Declare the risc0 sample app contract\n    groth16_class_hash, groth16_abi = await contract_project.declare_class_hash(account)\n\n    print(f\"Declared contract class hash: {hex(groth16_class_hash)}\")\n\n    # Deploy the risc0 sample app contract\n    precomputed_address = compute_address(\n        class_hash=groth16_class_hash,\n        constructor_calldata=[],\n        salt=pedersen_hash(to_int(account.address), 1),\n        deployer_address=DEPLOYER_ADDRESS,\n    )\n\n    try_contract = await get_contract_if_exists(account, precomputed_address)\n    if try_contract is None:\n        deploy_result = await Contract.deploy_contract_v3(\n            account=account,\n            class_hash=groth16_class_hash,\n            abi=groth16_abi,\n            deployer_address=DEPLOYER_ADDRESS,\n            auto_estimate=True,\n            salt=1,\n            cairo_version=1,\n        )\n        await deploy_result.wait_for_acceptance()\n\n        contract = deploy_result.deployed_contract\n    else:\n        print(f\"Contract already deployed at {hex(precomputed_address)}\")\n        contract = try_contract\n\n    print(f\"Deployed contract address: {hex(contract.address)}\")\n    print(f\"Deployed contract: {contract.functions}\")\n\n    function_call: ContractFunction = find_item_from_key_patterns(\n        contract.functions, [\"verify\"]\n    )\n\n    prepare_invoke = PreparedFunctionInvokeV3(\n        to_addr=function_call.contract_data.address,\n        calldata=lib_contract_project.generate_calldata(\n            proof_path=proof_path, public_inputs_path=None\n        ),\n        selector=function_call.get_selector(function_call.name),\n        _contract_data=function_call.contract_data,\n        _client=function_call.client,\n        _account=function_call.account,\n        _payload_transformer=function_call._payload_transformer,\n        resource_bounds=None,\n    )\n\n    invoke_result: InvokeResult = await prepare_invoke.invoke(auto_estimate=True)\n\n    await invoke_result.wait_for_acceptance()\n    print(f\"Invoke result : {invoke_result.status}\")\n\n    receipt = await account.client.get_transaction_receipt(invoke_result.hash)\n    print(receipt.execution_resources)\n"
  },
  {
    "path": "tests/contracts_e2e/fixtures/__init__.py",
    "content": ""
  },
  {
    "path": "tests/contracts_e2e/fixtures/accounts.py",
    "content": "# pylint: disable=redefined-outer-name\nfrom dataclasses import dataclass\nfrom typing import List, Optional, Tuple\n\nimport pytest\nimport pytest_asyncio\nfrom starknet_py.contract import Contract\nfrom starknet_py.hash.address import compute_address\nfrom starknet_py.net.account.account import Account\nfrom starknet_py.net.account.base_account import BaseAccount\nfrom starknet_py.net.client_models import PriceUnit\nfrom starknet_py.net.full_node_client import FullNodeClient\nfrom starknet_py.net.http_client import HttpMethod, RpcHttpClient\nfrom starknet_py.net.models import AddressRepresentation, StarknetChainId\nfrom starknet_py.net.signer.key_pair import KeyPair\n\nfrom tests.contracts_e2e.fixtures.constants import (\n    DEVNET_PRE_DEPLOYED_ACCOUNT_ADDRESS,\n    DEVNET_PRE_DEPLOYED_ACCOUNT_PRIVATE_KEY,\n    MAX_RESOURCE_BOUNDS,\n)\nfrom tests.contracts_e2e.utils import (\n    AccountToBeDeployedDetails,\n    _get_random_private_key_unsafe,\n    _new_address,\n    get_deploy_account_transaction,\n    prepay_account,\n)\n\n\n@dataclass\nclass AccountPrerequisites:\n    address: AddressRepresentation\n    salt: int\n    calldata: list[int]\n    key_pair: KeyPair\n\n\nasync def devnet_account_details(\n    client: FullNodeClient,\n    class_hash: int,\n    devnet,\n) -> Tuple[str, str]:\n    \"\"\"\n    Deploys an Account and adds fee tokens to its balance (only on devnet).\n    \"\"\"\n\n    private_key = _get_random_private_key_unsafe()\n    key_pair = KeyPair.from_private_key(private_key)\n    salt = 1\n\n    address = compute_address(\n        class_hash=class_hash,\n        constructor_calldata=[key_pair.public_key],\n        salt=salt,\n        deployer_address=0,\n    )\n\n    await mint_token_on_devnet(devnet, address, int(1e30), PriceUnit.WEI.value)\n    await mint_token_on_devnet(devnet, address, int(1e30), PriceUnit.FRI.value)\n\n    deploy_account_tx = await get_deploy_account_transaction(\n        address=address,\n        key_pair=key_pair,\n        salt=salt,\n        class_hash=class_hash,\n        client=client,\n    )\n\n    account = Account(\n        address=address,\n        client=client,\n        key_pair=key_pair,\n        chain=StarknetChainId.SEPOLIA,\n    )\n    res = await account.client.deploy_account(deploy_account_tx)\n    await account.client.wait_for_tx(res.transaction_hash)\n\n    return hex(address), hex(key_pair.private_key)\n\n\nasync def mint_token_on_devnet(url: str, address: int, amount: int, unit: str):\n    http_client = RpcHttpClient(url)\n    await http_client.request(\n        http_method=HttpMethod.POST,\n        address=f\"{url}/mint\",\n        payload={\"address\": hex(address), \"amount\": amount, \"unit\": unit},\n    )\n\n\n@pytest.fixture(name=\"account_devnet\", scope=\"package\")\ndef full_node_account(client_devnet: FullNodeClient) -> BaseAccount:\n    \"\"\"\n    Returns a new Account created with FullNodeClient.\n    \"\"\"\n    address = DEVNET_PRE_DEPLOYED_ACCOUNT_ADDRESS\n    private_key = DEVNET_PRE_DEPLOYED_ACCOUNT_PRIVATE_KEY\n\n    return Account(\n        address=address,\n        client=client_devnet,\n        key_pair=KeyPair.from_private_key(int(private_key, 0)),\n        chain=StarknetChainId.SEPOLIA,\n    )\n\n\n@dataclass\nclass AccountToBeDeployedDetailsFactory:\n    class_hash: int\n    eth_fee_contract: Contract\n    strk_fee_contract: Contract\n\n    async def get(\n        self,\n        *,\n        class_hash: Optional[int] = None,\n        calldata: Optional[List[int]] = None,\n    ) -> AccountToBeDeployedDetails:\n        key_pair = KeyPair.from_private_key(_get_random_private_key_unsafe())\n\n        calldata = calldata if calldata is not None else []\n        class_hash = class_hash if class_hash is not None else self.class_hash\n\n        if calldata == []:\n            calldata = [key_pair.public_key]\n\n        address, salt = _new_address(\n            class_hash=class_hash,\n            calldata=calldata,\n        )\n\n        await prepay_account(\n            address=address,\n            eth_fee_contract=self.eth_fee_contract,\n            strk_fee_contract=self.strk_fee_contract,\n        )\n        return address, key_pair, salt, class_hash\n\n\n@pytest_asyncio.fixture(scope=\"package\")\nasync def deploy_account_details_factory(\n    account_with_validate_deploy_class_hash: int,\n    eth_fee_contract: Contract,\n    strk_fee_contract: Contract,\n) -> AccountToBeDeployedDetailsFactory:\n    \"\"\"\n    Returns AccountToBeDeployedDetailsFactory.\n\n    The Factory's get() method returns: address, key_pair, salt\n    and class_hash of the account with validate deploy.\n    Prefunds the address with enough tokens to allow for deployment.\n    \"\"\"\n    return AccountToBeDeployedDetailsFactory(\n        class_hash=account_with_validate_deploy_class_hash,\n        eth_fee_contract=eth_fee_contract,\n        strk_fee_contract=strk_fee_contract,\n    )\n\n\n@pytest.fixture(scope=\"package\")\ndef pre_deployed_account_with_validate_deploy(client) -> BaseAccount:\n    \"\"\"\n    Returns an Account pre-deployed on specified network. Used to deploy other accounts.\n    \"\"\"\n\n    address = DEVNET_PRE_DEPLOYED_ACCOUNT_ADDRESS\n    private_key = DEVNET_PRE_DEPLOYED_ACCOUNT_PRIVATE_KEY\n\n    return Account(\n        address=address,\n        client=client,\n        key_pair=KeyPair.from_private_key(int(private_key, 16)),\n        chain=StarknetChainId.SEPOLIA,\n    )\n\n\n@pytest_asyncio.fixture(scope=\"function\")\nasync def argent_account_v040_data(\n    argent_account_v040_class_hash,\n    eth_fee_contract: Contract,\n    strk_fee_contract: Contract,\n) -> AccountPrerequisites:\n    key_pair = KeyPair.from_private_key(_get_random_private_key_unsafe())\n\n    # Based on ABI definition documentation\n    constructor_calldata = [\n        0,\n        key_pair.public_key,\n        1,\n    ]\n\n    address, salt = _new_address(argent_account_v040_class_hash, constructor_calldata)\n\n    await prepay_account(\n        address=address,\n        eth_fee_contract=eth_fee_contract,\n        strk_fee_contract=strk_fee_contract,\n    )\n\n    return AccountPrerequisites(address, salt, constructor_calldata, key_pair)\n\n\n@pytest_asyncio.fixture(scope=\"package\")\nasync def argent_account_v040(\n    argent_account_v040_class_hash,\n    eth_fee_contract: Contract,\n    strk_fee_contract: Contract,\n    client,\n) -> BaseAccount:\n    key_pair = KeyPair.from_private_key(_get_random_private_key_unsafe())\n\n    # Based on ABI definition documentation\n    constructor_calldata = [\n        0,\n        key_pair.public_key,\n        1,\n    ]\n\n    address, salt = _new_address(argent_account_v040_class_hash, constructor_calldata)\n\n    await prepay_account(\n        address=address,\n        eth_fee_contract=eth_fee_contract,\n        strk_fee_contract=strk_fee_contract,\n    )\n\n    deploy_result = await Account.deploy_account_v3(\n        address=address,\n        class_hash=argent_account_v040_class_hash,\n        salt=salt,\n        key_pair=key_pair,\n        client=client,\n        constructor_calldata=constructor_calldata,\n        resource_bounds=MAX_RESOURCE_BOUNDS,\n    )\n\n    await deploy_result.wait_for_acceptance()\n    return deploy_result.account\n"
  },
  {
    "path": "tests/contracts_e2e/fixtures/clients.py",
    "content": "import pytest\nfrom starknet_py.net.full_node_client import FullNodeClient\n\nfrom tests.contracts_e2e.fixtures.constants import SEPOLIA_RPC_URL\n\n\n@pytest.fixture(name=\"client_devnet\", scope=\"package\")\ndef create_full_node_client_devnet(devnet) -> FullNodeClient:\n    return FullNodeClient(node_url=devnet + \"/rpc\")\n\n\n@pytest.fixture(name=\"client_sepolia\", scope=\"package\")\ndef create_full_node_client_sepolia() -> FullNodeClient:\n    return FullNodeClient(node_url=SEPOLIA_RPC_URL)\n"
  },
  {
    "path": "tests/contracts_e2e/fixtures/constants.py",
    "content": "import os\nfrom pathlib import Path\n\nfrom dotenv import load_dotenv\nfrom starknet_py.net.client_models import ResourceBounds, ResourceBoundsMapping\n\nload_dotenv(dotenv_path=Path(os.path.dirname(__file__)) / \"../test-variables.env\")\n\n\ndef _get_env_or_throw(env_name: str) -> str:\n    env = os.getenv(key=env_name)\n    if env is None:\n        raise ValueError(\n            f\"{env_name} environmental variable is not set. \"\n            f\"Update it manually or set it in `starknet_py/tests/e2e/test-variables.env` file. \"\n            f\"More info here: https://starknetpy.readthedocs.io/en/latest/development.html#setup\"\n        )\n    return env\n\n\ndef _get_env_lambda(env_name):\n    return lambda: _get_env_or_throw(env_name)\n\n\n# -------------------------------- SEPOLIA TESTNET -------------------------------------\n\nSEPOLIA_ACCOUNT_PRIVATE_KEY = _get_env_lambda(\"SEPOLIA_ACCOUNT_PRIVATE_KEY\")\n\nSEPOLIA_ACCOUNT_ADDRESS = _get_env_lambda(\"SEPOLIA_ACCOUNT_ADDRESS\")\n\nSEPOLIA_RPC_URL = _get_env_lambda(\"SEPOLIA_RPC_URL\")\n\nEMPTY_CONTRACT_ADDRESS_SEPOLIA = (\n    \"0x06524771cb912945bf2db355b5a12355ca2e2ff05e15ee35366336a602293f2d\"\n)\n\n# -----------------------------------------------------------------------------\n\nDEVNET_PRE_DEPLOYED_ACCOUNT_ADDRESS = (\n    \"0x260a8311b4f1092db620b923e8d7d20e76dedcc615fb4b6fdf28315b81de201\"\n)\nDEVNET_PRE_DEPLOYED_ACCOUNT_PRIVATE_KEY = \"0xc10662b7b247c7cecf7e8a30726cff12\"\n\nSTRK_FEE_CONTRACT_ADDRESS = (\n    \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\"\n)\n\nSTRK_CLASS_HASH = \"0x04ad3c1dc8413453db314497945b6903e1c766495a1e60492d44da9c2a986e4b\"\n\nMAX_RESOURCE_BOUNDS_L1 = ResourceBounds(\n    max_amount=int(1e5), max_price_per_unit=int(1e13)\n)\n\nMAX_RESOURCE_BOUNDS = ResourceBoundsMapping(\n    l1_gas=ResourceBounds(max_amount=int(1e5), max_price_per_unit=int(1e13)),\n    l2_gas=ResourceBounds(max_amount=int(1e10), max_price_per_unit=int(1e20)),\n    l1_data_gas=ResourceBounds(max_amount=int(1e5), max_price_per_unit=int(1e13)),\n)\n\nMAX_RESOURCE_BOUNDS_SEPOLIA = ResourceBoundsMapping(\n    l1_gas=ResourceBounds(max_amount=int(1e4), max_price_per_unit=int(1e15)),\n    l2_gas=ResourceBounds(max_amount=int(1e6), max_price_per_unit=int(1e10)),\n    l1_data_gas=ResourceBounds(max_amount=int(1e4), max_price_per_unit=int(1e15)),\n)\n\nMOCK_DIR = Path(os.path.dirname(__file__)) / \"../mock\"\nTYPED_DATA_DIR = MOCK_DIR / \"typed_data\"\nCONTRACTS_DIR = MOCK_DIR / \"contracts\"\nCONTRACTS_COMPILED_V0_DIR = MOCK_DIR / \"contracts_compiled\"\n\n# PRECOMPILED_CONTRACTS are contracts compiled with various Sierras\n# They are mainly used to verify if we compute class_hash for older Sierras correctly\nPRECOMPILED_CONTRACTS_DIR = MOCK_DIR / \"precompiled_contracts\"\n\nCONTRACTS_V2_COMPILED = MOCK_DIR / \"contracts_v2/target/dev\"\nCONTRACTS_V2_ARTIFACTS_MAP = (\n    CONTRACTS_V2_COMPILED / \"contracts_v2.starknet_artifacts.json\"\n)\n\nCONTRACTS_V1_COMPILED = MOCK_DIR / \"contracts_v1/target/dev\"\nCONTRACTS_V1_ARTIFACTS_MAP = (\n    CONTRACTS_V1_COMPILED / \"contracts_v1.starknet_artifacts.json\"\n)\n"
  },
  {
    "path": "tests/contracts_e2e/fixtures/devnet.py",
    "content": "import socket\nimport subprocess\nimport time\nfrom contextlib import closing\nfrom pathlib import Path\nfrom typing import Generator, List\n\nimport pytest\n\nfrom tests.contracts_e2e.fixtures.constants import SEPOLIA_RPC_URL\n\n\ndef get_available_port() -> int:\n    with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:\n        sock.bind((\"\", 0))\n        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n        return sock.getsockname()[1]\n\n\ndef start_devnet(fork_mode: bool = False):\n    devnet_port = get_available_port()\n    start_devnet_command = get_start_devnet_command(devnet_port, fork_mode=fork_mode)\n\n    # pylint: disable=consider-using-with\n    proc = subprocess.Popen(start_devnet_command)\n    time.sleep(5)\n    return devnet_port, proc\n\n\ndef get_start_devnet_command(devnet_port: int, fork_mode: bool = False) -> List[str]:\n    devnet_path = Path(__file__).parent.parent / \"devnet\" / \"bin\" / \"starknet-devnet\"\n\n    start_command = [\n        str(devnet_path),\n        \"--port\",\n        str(devnet_port),\n        \"--accounts\",  # deploys specified number of accounts\n        str(1),\n        \"--seed\",  # generates same accounts each time\n        str(1),\n        \"--state-archive-capacity\",\n        \"full\",\n        \"--block-generation-on\",\n        \"transaction\",\n        \"--initial-balance\",\n        \"1000000000000000000000000000000000000000000000000000000000000000000\",\n    ]\n\n    if fork_mode:\n        start_command.extend(\n            [\n                \"--fork-network\",\n                str(SEPOLIA_RPC_URL()),\n            ]\n        )\n\n    return start_command\n\n\n@pytest.fixture(scope=\"package\")\ndef devnet() -> Generator[str, None, None]:\n    \"\"\"\n    Runs devnet instance once per module and returns it's address.\n    \"\"\"\n    devnet_port, proc = start_devnet()\n    yield f\"http://localhost:{devnet_port}\"\n    proc.kill()\n\n\n@pytest.fixture(scope=\"package\")\ndef devnet_forking_mode() -> Generator[str, None, None]:\n    \"\"\"\n    Runs devnet instance once per module and returns its address.\n    \"\"\"\n    devnet_port, proc = start_devnet(fork_mode=True)\n    yield f\"http://localhost:{devnet_port}\"\n    proc.kill()\n"
  },
  {
    "path": "tests/contracts_e2e/install_devnet.sh",
    "content": "#!/bin/bash\nset -e\n\nDEVNET_INSTALL_DIR=\"$(git rev-parse --show-toplevel)/tests/contracts_e2e/devnet/bin\"\nDEVNET_REPO=\"https://github.com/0xSpaceShard/starknet-devnet\"\nDEVNET_VERSION=\"v0.5.1\"\n\nrequire_cmd() {\n  if ! command -v \"$1\" >/dev/null 2>&1; then\n      echo \"$1 is not available\"\n      echo \"Please install $1 and run the script again\"\n      exit 1\n  fi\n}\n\nget_architecture() {\n  local _ostype _cputype _arch _clibtype\n  _ostype=\"$(uname -s)\"\n  _cputype=\"$(uname -m)\"\n  _clibtype=\"gnu\"\n\n  if [ \"$_ostype\" = Linux ] && ldd --_requested_version 2>&1 | grep -q 'musl'; then\n    _clibtype=\"musl\"\n  fi\n\n  if [ \"$_ostype\" = Darwin ] && [ \"$_cputype\" = i386 ] && sysctl hw.optional.x86_64 | grep -q ': 1'; then\n    _cputype=x86_64\n  fi\n\n  case \"$_ostype\" in\n  Linux)\n    _ostype=unknown-linux-$_clibtype\n    ;;\n\n  Darwin)\n    _ostype=apple-darwin\n    ;;\n  *)\n    err \"unsupported OS type: $_ostype\"\n    ;;\n  esac\n\n  case \"$_cputype\" in\n  aarch64 | arm64)\n    _cputype=aarch64\n    ;;\n\n  x86_64 | x86-64 | x64 | amd64)\n    _cputype=x86_64\n    ;;\n  *)\n    err \"unknown CPU type: $_cputype\"\n    ;;\n  esac\n\n  _arch=\"${_cputype}-${_ostype}\"\n\n  RETVAL=\"$_arch\"\n}\n\nrequire_cmd curl\nrequire_cmd tar\n\nget_architecture\nSYSTEM_TRIPLET=\"$RETVAL\"\n\nmkdir -p \"${DEVNET_INSTALL_DIR}\"\ncurl -L \"${DEVNET_REPO}/releases/download/${DEVNET_VERSION}/starknet-devnet-${SYSTEM_TRIPLET}.tar.gz\" | tar -xz -C \"${DEVNET_INSTALL_DIR}\" || exit 1\n\necho \"All done!\"\nexit 0\n"
  },
  {
    "path": "tests/contracts_e2e/test-variables.env.template",
    "content": "SEPOLIA_RPC_URL=URL\nSEPOLIA_ACCOUNT_PRIVATE_KEY=0xabcdef\nSEPOLIA_ACCOUNT_ADDRESS=0xfedcba\nSEPOLIA =\n"
  },
  {
    "path": "tests/contracts_e2e/utils.py",
    "content": "import random\nfrom typing import List, Tuple\n\nfrom starknet_py.constants import EC_ORDER\nfrom starknet_py.contract import Contract\nfrom starknet_py.hash.address import compute_address\nfrom starknet_py.net.account.account import Account\nfrom starknet_py.net.client import Client\nfrom starknet_py.net.http_client import HttpClient, HttpMethod\nfrom starknet_py.net.models import DeployAccountV3, StarknetChainId\nfrom starknet_py.net.signer.key_pair import KeyPair\nfrom starknet_py.net.udc_deployer.deployer import _get_random_salt\n\nfrom tests.contracts_e2e.fixtures.constants import MAX_RESOURCE_BOUNDS\n\nAccountToBeDeployedDetails = Tuple[int, KeyPair, int, int]\n\n\ndef _new_address(\n    class_hash: int,\n    calldata: List[int],\n):\n    salt = _get_random_salt()\n    return (\n        compute_address(\n            salt=salt,\n            class_hash=class_hash,\n            constructor_calldata=calldata,\n            deployer_address=0,\n        ),\n        salt,\n    )\n\n\nasync def prepay_account(\n    *,\n    address: int,\n    eth_fee_contract: Contract,\n    strk_fee_contract: Contract,\n):\n    \"\"\"\n    Transfer fees from system contracts (ETH and STRK) to address specified.\n\n    :param address: Address of the account to send funds to.\n    :param eth_fee_contract: Contract for prefunding deployments in ETH.\n    :param strk_fee_contract: Contract for prefunding deployments in STRK.\n    \"\"\"\n    transfer_wei_res = await eth_fee_contract.functions[\"transfer\"].invoke_v3(\n        recipient=address, amount=int(1e40), resource_bounds=MAX_RESOURCE_BOUNDS\n    )\n    await transfer_wei_res.wait_for_acceptance()\n\n    transfer_fri_res = await strk_fee_contract.functions[\"transfer\"].invoke_v3(\n        recipient=address, amount=int(1e40), resource_bounds=MAX_RESOURCE_BOUNDS\n    )\n    await transfer_fri_res.wait_for_acceptance()\n\n\nasync def get_deploy_account_transaction(\n    *, address: int, key_pair: KeyPair, salt: int, class_hash: int, client: Client\n) -> DeployAccountV3:\n    \"\"\"\n    Get a signed DeployAccount transaction from provided details\n    \"\"\"\n\n    account = Account(\n        address=address,\n        client=client,\n        key_pair=key_pair,\n        chain=StarknetChainId.SEPOLIA,\n    )\n    return await account.sign_deploy_account_v3(\n        class_hash=class_hash,\n        contract_address_salt=salt,\n        constructor_calldata=[key_pair.public_key],\n        resource_bounds=MAX_RESOURCE_BOUNDS,\n    )\n\n\ndef _get_random_private_key_unsafe() -> int:\n    \"\"\"\n    Returns a private key in the range [1, EC_ORDER).\n    This is not a safe way of generating private keys and should be used only in tests.\n    \"\"\"\n    return random.randint(1, EC_ORDER - 1)\n\n\nasync def create_empty_block(http_client: HttpClient) -> None:\n    url = http_client.url[:-4] if http_client.url.endswith(\"/rpc\") else http_client.url\n    await http_client.request(\n        address=f\"{url}/create_block\",\n        http_method=HttpMethod.POST,\n    )\n"
  },
  {
    "path": "tests/ed25519_test_vectors.json",
    "content": "[\n    {\n        \"secret_key\": \"9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60\",\n        \"public_key\": \"d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a\",\n        \"message\": \"\",\n        \"signed\": \"e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\",\n        \"signature\": \"e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b\"\n    },\n    {\n        \"secret_key\": \"4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb\",\n        \"public_key\": \"3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c\",\n        \"message\": \"72\",\n        \"signed\": \"92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c0072\",\n        \"signature\": \"92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00\"\n    },\n    {\n        \"secret_key\": \"c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7\",\n        \"public_key\": \"fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025\",\n        \"message\": \"af82\",\n        \"signed\": \"6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40aaf82\",\n        \"signature\": \"6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a\"\n    },\n    {\n        \"secret_key\": \"0d4a05b07352a5436e180356da0ae6efa0345ff7fb1572575772e8005ed978e9\",\n        \"public_key\": \"e61a185bcef2613a6c7cb79763ce945d3b245d76114dd440bcf5f2dc1aa57057\",\n        \"message\": \"cbc77b\",\n        \"signed\": \"d9868d52c2bebce5f3fa5a79891970f309cb6591e3e1702a70276fa97c24b3a8e58606c38c9758529da50ee31b8219cba45271c689afa60b0ea26c99db19b00ccbc77b\",\n        \"signature\": \"d9868d52c2bebce5f3fa5a79891970f309cb6591e3e1702a70276fa97c24b3a8e58606c38c9758529da50ee31b8219cba45271c689afa60b0ea26c99db19b00c\"\n    },\n    {\n        \"secret_key\": \"6df9340c138cc188b5fe4464ebaa3f7fc206a2d55c3434707e74c9fc04e20ebb\",\n        \"public_key\": \"c0dac102c4533186e25dc43128472353eaabdb878b152aeb8e001f92d90233a7\",\n        \"message\": \"5f4c8989\",\n        \"signed\": \"124f6fc6b0d100842769e71bd530664d888df8507df6c56dedfdb509aeb93416e26b918d38aa06305df3095697c18b2aa832eaa52edc0ae49fbae5a85e150c075f4c8989\",\n        \"signature\": \"124f6fc6b0d100842769e71bd530664d888df8507df6c56dedfdb509aeb93416e26b918d38aa06305df3095697c18b2aa832eaa52edc0ae49fbae5a85e150c07\"\n    },\n    {\n        \"secret_key\": \"b780381a65edf8b78f6945e8dbec7941ac049fd4c61040cf0c324357975a293c\",\n        \"public_key\": \"e253af0766804b869bb1595be9765b534886bbaab8305bf50dbc7f899bfb5f01\",\n        \"message\": \"18b6bec097\",\n        \"signed\": \"b2fc46ad47af464478c199e1f8be169f1be6327c7f9a0a6689371ca94caf04064a01b22aff1520abd58951341603faed768cf78ce97ae7b038abfe456aa17c0918b6bec097\",\n        \"signature\": \"b2fc46ad47af464478c199e1f8be169f1be6327c7f9a0a6689371ca94caf04064a01b22aff1520abd58951341603faed768cf78ce97ae7b038abfe456aa17c09\"\n    },\n    {\n        \"secret_key\": \"78ae9effe6f245e924a7be63041146ebc670dbd3060cba67fbc6216febc44546\",\n        \"public_key\": \"fbcfbfa40505d7f2be444a33d185cc54e16d615260e1640b2b5087b83ee3643d\",\n        \"message\": \"89010d855972\",\n        \"signed\": \"6ed629fc1d9ce9e1468755ff636d5a3f40a5d9c91afd93b79d241830f7e5fa29854b8f20cc6eecbb248dbd8d16d14e99752194e4904d09c74d639518839d230089010d855972\",\n        \"signature\": \"6ed629fc1d9ce9e1468755ff636d5a3f40a5d9c91afd93b79d241830f7e5fa29854b8f20cc6eecbb248dbd8d16d14e99752194e4904d09c74d639518839d2300\"\n    },\n    {\n        \"secret_key\": \"691865bfc82a1e4b574eecde4c7519093faf0cf867380234e3664645c61c5f79\",\n        \"public_key\": \"98a5e3a36e67aaba89888bf093de1ad963e774013b3902bfab356d8b90178a63\",\n        \"message\": \"b4a8f381e70e7a\",\n        \"signed\": \"6e0af2fe55ae377a6b7a7278edfb419bd321e06d0df5e27037db8812e7e3529810fa5552f6c0020985ca17a0e02e036d7b222a24f99b77b75fdd16cb05568107b4a8f381e70e7a\",\n        \"signature\": \"6e0af2fe55ae377a6b7a7278edfb419bd321e06d0df5e27037db8812e7e3529810fa5552f6c0020985ca17a0e02e036d7b222a24f99b77b75fdd16cb05568107\"\n    },\n    {\n        \"secret_key\": \"3b26516fb3dc88eb181b9ed73f0bcd52bcd6b4c788e4bcaf46057fd078bee073\",\n        \"public_key\": \"f81fb54a825fced95eb033afcd64314075abfb0abd20a970892503436f34b863\",\n        \"message\": \"4284abc51bb67235\",\n        \"signed\": \"d6addec5afb0528ac17bb178d3e7f2887f9adbb1ad16e110545ef3bc57f9de2314a5c8388f723b8907be0f3ac90c6259bbe885ecc17645df3db7d488f805fa084284abc51bb67235\",\n        \"signature\": \"d6addec5afb0528ac17bb178d3e7f2887f9adbb1ad16e110545ef3bc57f9de2314a5c8388f723b8907be0f3ac90c6259bbe885ecc17645df3db7d488f805fa08\"\n    },\n    {\n        \"secret_key\": \"edc6f5fbdd1cee4d101c063530a30490b221be68c036f5b07d0f953b745df192\",\n        \"public_key\": \"c1a49c66e617f9ef5ec66bc4c6564ca33de2a5fb5e1464062e6d6c6219155efd\",\n        \"message\": \"672bf8965d04bc5146\",\n        \"signed\": \"2c76a04af2391c147082e33faacdbe56642a1e134bd388620b852b901a6bc16ff6c9cc9404c41dea12ed281da067a1513866f9d964f8bdd24953856c50042901672bf8965d04bc5146\",\n        \"signature\": \"2c76a04af2391c147082e33faacdbe56642a1e134bd388620b852b901a6bc16ff6c9cc9404c41dea12ed281da067a1513866f9d964f8bdd24953856c50042901\"\n    },\n    {\n        \"secret_key\": \"4e7d21fb3b1897571a445833be0f9fd41cd62be3aa04040f8934e1fcbdcacd45\",\n        \"public_key\": \"31b2524b8348f7ab1dfafa675cc538e9a84e3fe5819e27c12ad8bbc1a36e4dff\",\n        \"message\": \"33d7a786aded8c1bf691\",\n        \"signed\": \"28e4598c415ae9de01f03f9f3fab4e919e8bf537dd2b0cdf6e79b9e6559c9409d9151a4c40f083193937627c369488259e99da5a9f0a87497fa6696a5dd6ce0833d7a786aded8c1bf691\",\n        \"signature\": \"28e4598c415ae9de01f03f9f3fab4e919e8bf537dd2b0cdf6e79b9e6559c9409d9151a4c40f083193937627c369488259e99da5a9f0a87497fa6696a5dd6ce08\"\n    },\n    {\n        \"secret_key\": \"a980f892db13c99a3e8971e965b2ff3d41eafd54093bc9f34d1fd22d84115bb6\",\n        \"public_key\": \"44b57ee30cdb55829d0a5d4f046baef078f1e97a7f21b62d75f8e96ea139c35f\",\n        \"message\": \"3486f68848a65a0eb5507d\",\n        \"signed\": \"77d389e599630d934076329583cd4105a649a9292abc44cd28c40000c8e2f5ac7660a81c85b72af8452d7d25c070861dae91601c7803d656531650dd4e5c41003486f68848a65a0eb5507d\",\n        \"signature\": \"77d389e599630d934076329583cd4105a649a9292abc44cd28c40000c8e2f5ac7660a81c85b72af8452d7d25c070861dae91601c7803d656531650dd4e5c4100\"\n    },\n    {\n        \"secret_key\": \"5b5a619f8ce1c66d7ce26e5a2ae7b0c04febcd346d286c929e19d0d5973bfef9\",\n        \"public_key\": \"6fe83693d011d111131c4f3fbaaa40a9d3d76b30012ff73bb0e39ec27ab18257\",\n        \"message\": \"5a8d9d0a22357e6655f9c785\",\n        \"signed\": \"0f9ad9793033a2fa06614b277d37381e6d94f65ac2a5a94558d09ed6ce922258c1a567952e863ac94297aec3c0d0c8ddf71084e504860bb6ba27449b55adc40e5a8d9d0a22357e6655f9c785\",\n        \"signature\": \"0f9ad9793033a2fa06614b277d37381e6d94f65ac2a5a94558d09ed6ce922258c1a567952e863ac94297aec3c0d0c8ddf71084e504860bb6ba27449b55adc40e\"\n    },\n    {\n        \"secret_key\": \"940c89fe40a81dafbdb2416d14ae469119869744410c3303bfaa0241dac57800\",\n        \"public_key\": \"a2eb8c0501e30bae0cf842d2bde8dec7386f6b7fc3981b8c57c9792bb94cf2dd\",\n        \"message\": \"b87d3813e03f58cf19fd0b6395\",\n        \"signed\": \"d8bb64aad8c9955a115a793addd24f7f2b077648714f49c4694ec995b330d09d640df310f447fd7b6cb5c14f9fe9f490bcf8cfadbfd2169c8ac20d3b8af49a0cb87d3813e03f58cf19fd0b6395\",\n        \"signature\": \"d8bb64aad8c9955a115a793addd24f7f2b077648714f49c4694ec995b330d09d640df310f447fd7b6cb5c14f9fe9f490bcf8cfadbfd2169c8ac20d3b8af49a0c\"\n    },\n    {\n        \"secret_key\": \"9acad959d216212d789a119252ebfe0c96512a23c73bd9f3b202292d6916a738\",\n        \"public_key\": \"cf3af898467a5b7a52d33d53bc037e2642a8da996903fc252217e9c033e2f291\",\n        \"message\": \"55c7fa434f5ed8cdec2b7aeac173\",\n        \"signed\": \"6ee3fe81e23c60eb2312b2006b3b25e6838e02106623f844c44edb8dafd66ab0671087fd195df5b8f58a1d6e52af42908053d55c7321010092748795ef94cf0655c7fa434f5ed8cdec2b7aeac173\",\n        \"signature\": \"6ee3fe81e23c60eb2312b2006b3b25e6838e02106623f844c44edb8dafd66ab0671087fd195df5b8f58a1d6e52af42908053d55c7321010092748795ef94cf06\"\n    },\n    {\n        \"secret_key\": \"d5aeee41eeb0e9d1bf8337f939587ebe296161e6bf5209f591ec939e1440c300\",\n        \"public_key\": \"fd2a565723163e29f53c9de3d5e8fbe36a7ab66e1439ec4eae9c0a604af291a5\",\n        \"message\": \"0a688e79be24f866286d4646b5d81c\",\n        \"signed\": \"f68d04847e5b249737899c014d31c805c5007a62c0a10d50bb1538c5f35503951fbc1e08682f2cc0c92efe8f4985dec61dcbd54d4b94a22547d24451271c8b000a688e79be24f866286d4646b5d81c\",\n        \"signature\": \"f68d04847e5b249737899c014d31c805c5007a62c0a10d50bb1538c5f35503951fbc1e08682f2cc0c92efe8f4985dec61dcbd54d4b94a22547d24451271c8b00\"\n    },\n    {\n        \"secret_key\": \"0a47d10452ae2febec518a1c7c362890c3fc1a49d34b03b6467d35c904a8362d\",\n        \"public_key\": \"34e5a8508c4743746962c066e4badea2201b8ab484de5c4f94476ccd2143955b\",\n        \"message\": \"c942fa7ac6b23ab7ff612fdc8e68ef39\",\n        \"signed\": \"2a3d27dc40d0a8127949a3b7f908b3688f63b7f14f651aacd715940bdbe27a0809aac142f47ab0e1e44fa490ba87ce5392f33a891539caf1ef4c367cae54500cc942fa7ac6b23ab7ff612fdc8e68ef39\",\n        \"signature\": \"2a3d27dc40d0a8127949a3b7f908b3688f63b7f14f651aacd715940bdbe27a0809aac142f47ab0e1e44fa490ba87ce5392f33a891539caf1ef4c367cae54500c\"\n    },\n    {\n        \"secret_key\": \"f8148f7506b775ef46fdc8e8c756516812d47d6cfbfa318c27c9a22641e56f17\",\n        \"public_key\": \"0445e456dacc7d5b0bbed23c8200cdb74bdcb03e4c7b73f0a2b9b46eac5d4372\",\n        \"message\": \"7368724a5b0efb57d28d97622dbde725af\",\n        \"signed\": \"3653ccb21219202b8436fb41a32ba2618c4a133431e6e63463ceb3b6106c4d56e1d2ba165ba76eaad3dc39bffb130f1de3d8e6427db5b71938db4e272bc3e20b7368724a5b0efb57d28d97622dbde725af\",\n        \"signature\": \"3653ccb21219202b8436fb41a32ba2618c4a133431e6e63463ceb3b6106c4d56e1d2ba165ba76eaad3dc39bffb130f1de3d8e6427db5b71938db4e272bc3e20b\"\n    },\n    {\n        \"secret_key\": \"77f88691c4eff23ebb7364947092951a5ff3f10785b417e918823a552dab7c75\",\n        \"public_key\": \"74d29127f199d86a8676aec33b4ce3f225ccb191f52c191ccd1e8cca65213a6b\",\n        \"message\": \"bd8e05033f3a8bcdcbf4beceb70901c82e31\",\n        \"signed\": \"fbe929d743a03c17910575492f3092ee2a2bf14a60a3fcacec74a58c7334510fc262db582791322d6c8c41f1700adb80027ecabc14270b703444ae3ee7623e0abd8e05033f3a8bcdcbf4beceb70901c82e31\",\n        \"signature\": \"fbe929d743a03c17910575492f3092ee2a2bf14a60a3fcacec74a58c7334510fc262db582791322d6c8c41f1700adb80027ecabc14270b703444ae3ee7623e0a\"\n    },\n    {\n        \"secret_key\": \"ab6f7aee6a0837b334ba5eb1b2ad7fcecfab7e323cab187fe2e0a95d80eff132\",\n        \"public_key\": \"5b96dca497875bf9664c5e75facf3f9bc54bae913d66ca15ee85f1491ca24d2c\",\n        \"message\": \"8171456f8b907189b1d779e26bc5afbb08c67a\",\n        \"signed\": \"73bca64e9dd0db88138eedfafcea8f5436cfb74bfb0e7733cf349baa0c49775c56d5934e1d38e36f39b7c5beb0a836510c45126f8ec4b6810519905b0ca07c098171456f8b907189b1d779e26bc5afbb08c67a\",\n        \"signature\": \"73bca64e9dd0db88138eedfafcea8f5436cfb74bfb0e7733cf349baa0c49775c56d5934e1d38e36f39b7c5beb0a836510c45126f8ec4b6810519905b0ca07c09\"\n    },\n    {\n        \"secret_key\": \"8d135de7c8411bbdbd1b31e5dc678f2ac7109e792b60f38cd24936e8a898c32d\",\n        \"public_key\": \"1ca281938529896535a7714e3584085b86ef9fec723f42819fc8dd5d8c00817f\",\n        \"message\": \"8ba6a4c9a15a244a9c26bb2a59b1026f21348b49\",\n        \"signed\": \"a1adc2bc6a2d980662677e7fdff6424de7dba50f5795ca90fdf3e96e256f3285cac71d3360482e993d0294ba4ec7440c61affdf35fe83e6e04263937db93f1058ba6a4c9a15a244a9c26bb2a59b1026f21348b49\",\n        \"signature\": \"a1adc2bc6a2d980662677e7fdff6424de7dba50f5795ca90fdf3e96e256f3285cac71d3360482e993d0294ba4ec7440c61affdf35fe83e6e04263937db93f105\"\n    },\n    {\n        \"secret_key\": \"0e765d720e705f9366c1ab8c3fa84c9a44370c06969f803296884b2846a652a4\",\n        \"public_key\": \"7fae45dd0a05971026d410bc497af5be7d0827a82a145c203f625dfcb8b03ba8\",\n        \"message\": \"1d566a6232bbaab3e6d8804bb518a498ed0f904986\",\n        \"signed\": \"bb61cf84de61862207c6a455258bc4db4e15eea0317ff88718b882a06b5cf6ec6fd20c5a269e5d5c805bafbcc579e2590af414c7c227273c102a10070cdfe80f1d566a6232bbaab3e6d8804bb518a498ed0f904986\",\n        \"signature\": \"bb61cf84de61862207c6a455258bc4db4e15eea0317ff88718b882a06b5cf6ec6fd20c5a269e5d5c805bafbcc579e2590af414c7c227273c102a10070cdfe80f\"\n    },\n    {\n        \"secret_key\": \"db36e326d676c2d19cc8fe0c14b709202ecfc761d27089eb6ea4b1bb021ecfa7\",\n        \"public_key\": \"48359b850d23f0715d94bb8bb75e7e14322eaf14f06f28a805403fbda002fc85\",\n        \"message\": \"1b0afb0ac4ba9ab7b7172cddc9eb42bba1a64bce47d4\",\n        \"signed\": \"b6dcd09989dfbac54322a3ce87876e1d62134da998c79d24b50bd7a6a797d86a0e14dc9d7491d6c14a673c652cfbec9f962a38c945da3b2f0879d0b68a9213001b0afb0ac4ba9ab7b7172cddc9eb42bba1a64bce47d4\",\n        \"signature\": \"b6dcd09989dfbac54322a3ce87876e1d62134da998c79d24b50bd7a6a797d86a0e14dc9d7491d6c14a673c652cfbec9f962a38c945da3b2f0879d0b68a921300\"\n    },\n    {\n        \"secret_key\": \"c89955e0f7741d905df0730b3dc2b0ce1a13134e44fef3d40d60c020ef19df77\",\n        \"public_key\": \"fdb30673402faf1c8033714f3517e47cc0f91fe70cf3836d6c23636e3fd2287c\",\n        \"message\": \"507c94c8820d2a5793cbf3442b3d71936f35fe3afef316\",\n        \"signed\": \"7ef66e5e86f2360848e0014e94880ae2920ad8a3185a46b35d1e07dea8fa8ae4f6b843ba174d99fa7986654a0891c12a794455669375bf92af4cc2770b579e0c507c94c8820d2a5793cbf3442b3d71936f35fe3afef316\",\n        \"signature\": \"7ef66e5e86f2360848e0014e94880ae2920ad8a3185a46b35d1e07dea8fa8ae4f6b843ba174d99fa7986654a0891c12a794455669375bf92af4cc2770b579e0c\"\n    },\n    {\n        \"secret_key\": \"4e62627fc221142478aee7f00781f817f662e3b75db29bb14ab47cf8e84104d6\",\n        \"public_key\": \"b1d39801892027d58a8c64335163195893bfc1b61dbeca3260497e1f30371107\",\n        \"message\": \"d3d615a8472d9962bb70c5b5466a3d983a4811046e2a0ef5\",\n        \"signed\": \"836afa764d9c48aa4770a4388b654e97b3c16f082967febca27f2fc47ddfd9244b03cfc729698acf5109704346b60b230f255430089ddc56912399d1122de70ad3d615a8472d9962bb70c5b5466a3d983a4811046e2a0ef5\",\n        \"signature\": \"836afa764d9c48aa4770a4388b654e97b3c16f082967febca27f2fc47ddfd9244b03cfc729698acf5109704346b60b230f255430089ddc56912399d1122de70a\"\n    },\n    {\n        \"secret_key\": \"6b83d7da8908c3e7205b39864b56e5f3e17196a3fc9c2f5805aad0f5554c142d\",\n        \"public_key\": \"d0c846f97fe28585c0ee159015d64c56311c886eddcc185d296dbb165d2625d6\",\n        \"message\": \"6ada80b6fa84f7034920789e8536b82d5e4678059aed27f71c\",\n        \"signed\": \"16e462a29a6dd498685a3718b3eed00cc1598601ee47820486032d6b9acc9bf89f57684e08d8c0f05589cda2882a05dc4c63f9d0431d6552710812433003bc086ada80b6fa84f7034920789e8536b82d5e4678059aed27f71c\",\n        \"signature\": \"16e462a29a6dd498685a3718b3eed00cc1598601ee47820486032d6b9acc9bf89f57684e08d8c0f05589cda2882a05dc4c63f9d0431d6552710812433003bc08\"\n    },\n    {\n        \"secret_key\": \"19a91fe23a4e9e33ecc474878f57c64cf154b394203487a7035e1ad9cd697b0d\",\n        \"public_key\": \"2bf32ba142ba4622d8f3e29ecd85eea07b9c47be9d64412c9b510b27dd218b23\",\n        \"message\": \"82cb53c4d5a013bae5070759ec06c3c6955ab7a4050958ec328c\",\n        \"signed\": \"881f5b8c5a030df0f75b6634b070dd27bd1ee3c08738ae349338b3ee6469bbf9760b13578a237d5182535ede121283027a90b5f865d63a6537dca07b44049a0f82cb53c4d5a013bae5070759ec06c3c6955ab7a4050958ec328c\",\n        \"signature\": \"881f5b8c5a030df0f75b6634b070dd27bd1ee3c08738ae349338b3ee6469bbf9760b13578a237d5182535ede121283027a90b5f865d63a6537dca07b44049a0f\"\n    },\n    {\n        \"secret_key\": \"1d5b8cb6215c18141666baeefcf5d69dad5bea9a3493dddaa357a4397a13d4de\",\n        \"public_key\": \"94d23d977c33e49e5e4992c68f25ec99a27c41ce6b91f2bfa0cd8292fe962835\",\n        \"message\": \"a9a8cbb0ad585124e522abbfb40533bdd6f49347b55b18e8558cb0\",\n        \"signed\": \"3acd39bec8c3cd2b44299722b5850a0400c1443590fd4861d59aae7496acb3df73fc3fdf7969ae5f50ba47dddc435246e5fd376f6b891cd4c2caf5d614b6170ca9a8cbb0ad585124e522abbfb40533bdd6f49347b55b18e8558cb0\",\n        \"signature\": \"3acd39bec8c3cd2b44299722b5850a0400c1443590fd4861d59aae7496acb3df73fc3fdf7969ae5f50ba47dddc435246e5fd376f6b891cd4c2caf5d614b6170c\"\n    },\n    {\n        \"secret_key\": \"6a91b3227c472299089bdce9356e726a40efd840f11002708b7ee55b64105ac2\",\n        \"public_key\": \"9d084aa8b97a6b9bafa496dbc6f76f3306a116c9d917e681520a0f914369427e\",\n        \"message\": \"5cb6f9aa59b80eca14f6a68fb40cf07b794e75171fba96262c1c6adc\",\n        \"signed\": \"f5875423781b66216cb5e8998de5d9ffc29d1d67107054ace3374503a9c3ef811577f269de81296744bd706f1ac478caf09b54cdf871b3f802bd57f9a6cb91015cb6f9aa59b80eca14f6a68fb40cf07b794e75171fba96262c1c6adc\",\n        \"signature\": \"f5875423781b66216cb5e8998de5d9ffc29d1d67107054ace3374503a9c3ef811577f269de81296744bd706f1ac478caf09b54cdf871b3f802bd57f9a6cb9101\"\n    },\n    {\n        \"secret_key\": \"93eaa854d791f05372ce72b94fc6503b2ff8ae6819e6a21afe825e27ada9e4fb\",\n        \"public_key\": \"16cee8a3f2631834c88b670897ff0b08ce90cc147b4593b3f1f403727f7e7ad5\",\n        \"message\": \"32fe27994124202153b5c70d3813fdee9c2aa6e7dc743d4d535f1840a5\",\n        \"signed\": \"d834197c1a3080614e0a5fa0aaaa808824f21c38d692e6ffbd200f7dfb3c8f44402a7382180b98ad0afc8eec1a02acecf3cb7fde627b9f18111f260ab1db9a0732fe27994124202153b5c70d3813fdee9c2aa6e7dc743d4d535f1840a5\",\n        \"signature\": \"d834197c1a3080614e0a5fa0aaaa808824f21c38d692e6ffbd200f7dfb3c8f44402a7382180b98ad0afc8eec1a02acecf3cb7fde627b9f18111f260ab1db9a07\"\n    },\n    {\n        \"secret_key\": \"941cac69fb7b1815c57bb987c4d6c2ad2c35d5f9a3182a79d4ba13eab253a8ad\",\n        \"public_key\": \"23be323c562dfd71ce65f5bba56a74a3a6dfc36b573d2f94f635c7f9b4fd5a5b\",\n        \"message\": \"bb3172795710fe00054d3b5dfef8a11623582da68bf8e46d72d27cece2aa\",\n        \"signed\": \"0f8fad1e6bde771b4f5420eac75c378bae6db5ac6650cd2bc210c1823b432b48e016b10595458ffab92f7a8989b293ceb8dfed6c243a2038fc06652aaaf16f02bb3172795710fe00054d3b5dfef8a11623582da68bf8e46d72d27cece2aa\",\n        \"signature\": \"0f8fad1e6bde771b4f5420eac75c378bae6db5ac6650cd2bc210c1823b432b48e016b10595458ffab92f7a8989b293ceb8dfed6c243a2038fc06652aaaf16f02\"\n    },\n    {\n        \"secret_key\": \"1acdbb793b0384934627470d795c3d1dd4d79cea59ef983f295b9b59179cbb28\",\n        \"public_key\": \"3f60c7541afa76c019cf5aa82dcdb088ed9e4ed9780514aefb379dabc844f31a\",\n        \"message\": \"7cf34f75c3dac9a804d0fcd09eba9b29c9484e8a018fa9e073042df88e3c56\",\n        \"signed\": \"be71ef4806cb041d885effd9e6b0fbb73d65d7cdec47a89c8a994892f4e55a568c4cc78d61f901e80dbb628b86a23ccd594e712b57fa94c2d67ec266348785077cf34f75c3dac9a804d0fcd09eba9b29c9484e8a018fa9e073042df88e3c56\",\n        \"signature\": \"be71ef4806cb041d885effd9e6b0fbb73d65d7cdec47a89c8a994892f4e55a568c4cc78d61f901e80dbb628b86a23ccd594e712b57fa94c2d67ec26634878507\"\n    },\n    {\n        \"secret_key\": \"8ed7a797b9cea8a8370d419136bcdf683b759d2e3c6947f17e13e2485aa9d420\",\n        \"public_key\": \"b49f3a78b1c6a7fca8f3466f33bc0e929f01fba04306c2a7465f46c3759316d9\",\n        \"message\": \"a750c232933dc14b1184d86d8b4ce72e16d69744ba69818b6ac33b1d823bb2c3\",\n        \"signed\": \"04266c033b91c1322ceb3446c901ffcf3cc40c4034e887c9597ca1893ba7330becbbd8b48142ef35c012c6ba51a66df9308cb6268ad6b1e4b03e70102495790ba750c232933dc14b1184d86d8b4ce72e16d69744ba69818b6ac33b1d823bb2c3\",\n        \"signature\": \"04266c033b91c1322ceb3446c901ffcf3cc40c4034e887c9597ca1893ba7330becbbd8b48142ef35c012c6ba51a66df9308cb6268ad6b1e4b03e70102495790b\"\n    },\n    {\n        \"secret_key\": \"f2ab396fe8906e3e5633e99cabcd5b09df0859b516230b1e0450b580b65f616c\",\n        \"public_key\": \"8ea074245159a116aa7122a25ec16b891d625a68f33660423908f6bdc44f8c1b\",\n        \"message\": \"5a44e34b746c5fd1898d552ab354d28fb4713856d7697dd63eb9bd6b99c280e187\",\n        \"signed\": \"a06a23d982d81ab883aae230adbc368a6a9977f003cebb00d4c2e4018490191a84d3a282fdbfb2fc88046e62de43e15fb575336b3c8b77d19ce6a009ce51f50c5a44e34b746c5fd1898d552ab354d28fb4713856d7697dd63eb9bd6b99c280e187\",\n        \"signature\": \"a06a23d982d81ab883aae230adbc368a6a9977f003cebb00d4c2e4018490191a84d3a282fdbfb2fc88046e62de43e15fb575336b3c8b77d19ce6a009ce51f50c\"\n    },\n    {\n        \"secret_key\": \"550a41c013f79bab8f06e43ad1836d51312736a9713806fafe6645219eaa1f9d\",\n        \"public_key\": \"af6b7145474dc9954b9af93a9cdb34449d5b7c651c824d24e230b90033ce59c0\",\n        \"message\": \"8bc4185e50e57d5f87f47515fe2b1837d585f0aae9e1ca383b3ec908884bb900ff27\",\n        \"signed\": \"16dc1e2b9fa909eefdc277ba16ebe207b8da5e91143cde78c5047a89f681c33c4e4e3428d5c928095903a811ec002d52a39ed7f8b3fe1927200c6dd0b9ab3e048bc4185e50e57d5f87f47515fe2b1837d585f0aae9e1ca383b3ec908884bb900ff27\",\n        \"signature\": \"16dc1e2b9fa909eefdc277ba16ebe207b8da5e91143cde78c5047a89f681c33c4e4e3428d5c928095903a811ec002d52a39ed7f8b3fe1927200c6dd0b9ab3e04\"\n    },\n    {\n        \"secret_key\": \"19ac3e272438c72ddf7b881964867cb3b31ff4c793bb7ea154613c1db068cb7e\",\n        \"public_key\": \"f85b80e050a1b9620db138bfc9e100327e25c257c59217b601f1f6ac9a413d3f\",\n        \"message\": \"95872d5f789f95484e30cbb0e114028953b16f5c6a8d9f65c003a83543beaa46b38645\",\n        \"signed\": \"ea855d781cbea4682e350173cb89e8619ccfddb97cdce16f9a2f6f6892f46dbe68e04b12b8d88689a7a31670cdff409af98a93b49a34537b6aa009d2eb8b470195872d5f789f95484e30cbb0e114028953b16f5c6a8d9f65c003a83543beaa46b38645\",\n        \"signature\": \"ea855d781cbea4682e350173cb89e8619ccfddb97cdce16f9a2f6f6892f46dbe68e04b12b8d88689a7a31670cdff409af98a93b49a34537b6aa009d2eb8b4701\"\n    },\n    {\n        \"secret_key\": \"ca267de96c93c238fafb1279812059ab93ac03059657fd994f8fa5a09239c821\",\n        \"public_key\": \"017370c879090a81c7f272c2fc80e3aac2bc603fcb379afc98691160ab745b26\",\n        \"message\": \"e05f71e4e49a72ec550c44a3b85aca8f20ff26c3ee94a80f1b431c7d154ec9603ee02531\",\n        \"signed\": \"ac957f82335aa7141e96b59d63e3ccee95c3a2c47d026540c2af42dc9533d5fd81827d1679ad187aeaf37834915e75b147a9286806c8017516ba43dd051a5e0ce05f71e4e49a72ec550c44a3b85aca8f20ff26c3ee94a80f1b431c7d154ec9603ee02531\",\n        \"signature\": \"ac957f82335aa7141e96b59d63e3ccee95c3a2c47d026540c2af42dc9533d5fd81827d1679ad187aeaf37834915e75b147a9286806c8017516ba43dd051a5e0c\"\n    },\n    {\n        \"secret_key\": \"3dff5e899475e7e91dd261322fab09980c52970de1da6e2e201660cc4fce7032\",\n        \"public_key\": \"f30162bac98447c4042fac05da448034629be2c6a58d30dfd578ba9fb5e3930b\",\n        \"message\": \"938f0e77621bf3ea52c7c4911c5157c2d8a2a858093ef16aa9b107e69d98037ba139a3c382\",\n        \"signed\": \"5efe7a92ff9623089b3e3b78f352115366e26ba3fb1a416209bc029e9cadccd9f4affa333555a8f3a35a9d0f7c34b292cae77ec96fa3adfcaadee2d9ced8f805938f0e77621bf3ea52c7c4911c5157c2d8a2a858093ef16aa9b107e69d98037ba139a3c382\",\n        \"signature\": \"5efe7a92ff9623089b3e3b78f352115366e26ba3fb1a416209bc029e9cadccd9f4affa333555a8f3a35a9d0f7c34b292cae77ec96fa3adfcaadee2d9ced8f805\"\n    },\n    {\n        \"secret_key\": \"9a6b847864e70cfe8ba6ab22fa0ca308c0cc8bec7141fbcaa3b81f5d1e1cfcfc\",\n        \"public_key\": \"34ad0fbdb2566507a81c2b1f8aa8f53dccaa64cc87ada91b903e900d07eee930\",\n        \"message\": \"838367471183c71f7e717724f89d401c3ad9863fd9cc7aa3cf33d3c529860cb581f3093d87da\",\n        \"signed\": \"2ab255169c489c54c732232e37c87349d486b1eba20509dbabe7fed329ef08fd75ba1cd145e67b2ea26cb5cc51cab343eeb085fe1fd7b0ec4c6afcd9b979f905838367471183c71f7e717724f89d401c3ad9863fd9cc7aa3cf33d3c529860cb581f3093d87da\",\n        \"signature\": \"2ab255169c489c54c732232e37c87349d486b1eba20509dbabe7fed329ef08fd75ba1cd145e67b2ea26cb5cc51cab343eeb085fe1fd7b0ec4c6afcd9b979f905\"\n    },\n    {\n        \"secret_key\": \"575be07afca5d063c238cd9b8028772cc49cda34471432a2e166e096e2219efc\",\n        \"public_key\": \"94e5eb4d5024f49d7ebf79817c8de11497dc2b55622a51ae123ffc749dbb16e0\",\n        \"message\": \"33e5918b66d33d55fe717ca34383eae78f0af82889caf6696e1ac9d95d1ffb32cba755f9e3503e\",\n        \"signed\": \"58271d44236f3b98c58fd7ae0d2f49ef2b6e3affdb225aa3ba555f0e11cc53c23ad19baf24346590d05d7d5390582082cf94d39cad6530ab93d13efb3927950633e5918b66d33d55fe717ca34383eae78f0af82889caf6696e1ac9d95d1ffb32cba755f9e3503e\",\n        \"signature\": \"58271d44236f3b98c58fd7ae0d2f49ef2b6e3affdb225aa3ba555f0e11cc53c23ad19baf24346590d05d7d5390582082cf94d39cad6530ab93d13efb39279506\"\n    },\n    {\n        \"secret_key\": \"15ffb45514d43444d61fcb105e30e135fd268523dda20b82758b179423110441\",\n        \"public_key\": \"1772c5abc2d23fd2f9d1c3257be7bc3c1cd79cee40844b749b3a7743d2f964b8\",\n        \"message\": \"da9c5559d0ea51d255b6bd9d7638b876472f942b330fc0e2b30aea68d77368fce4948272991d257e\",\n        \"signed\": \"6828cd7624e793b8a4ceb96d3c2a975bf773e5ff6645f353614058621e58835289e7f31f42dfe6af6d736f2644511e320c0fa698582a79778d18730ed3e8cb08da9c5559d0ea51d255b6bd9d7638b876472f942b330fc0e2b30aea68d77368fce4948272991d257e\",\n        \"signature\": \"6828cd7624e793b8a4ceb96d3c2a975bf773e5ff6645f353614058621e58835289e7f31f42dfe6af6d736f2644511e320c0fa698582a79778d18730ed3e8cb08\"\n    },\n    {\n        \"secret_key\": \"fe0568642943b2e1afbfd1f10fe8df87a4236bea40dce742072cb21886eec1fa\",\n        \"public_key\": \"299ebd1f13177dbdb66a912bbf712038fdf73b06c3ac020c7b19126755d47f61\",\n        \"message\": \"c59d0862ec1c9746abcc3cf83c9eeba2c7082a036a8cb57ce487e763492796d47e6e063a0c1feccc2d\",\n        \"signed\": \"d59e6dfcc6d7e3e2c58dec81e985d245e681acf6594a23c59214f7bed8015d813c7682b60b3583440311e72a8665ba2c96dec23ce826e160127e18132b030404c59d0862ec1c9746abcc3cf83c9eeba2c7082a036a8cb57ce487e763492796d47e6e063a0c1feccc2d\",\n        \"signature\": \"d59e6dfcc6d7e3e2c58dec81e985d245e681acf6594a23c59214f7bed8015d813c7682b60b3583440311e72a8665ba2c96dec23ce826e160127e18132b030404\"\n    },\n    {\n        \"secret_key\": \"5ecb16c2df27c8cf58e436a9d3affbd58e9538a92659a0f97c4c4f994635a8ca\",\n        \"public_key\": \"da768b20c437dd3aa5f84bb6a077ffa34ab68501c5352b5cc3fdce7fe6c2398d\",\n        \"message\": \"56f1329d9a6be25a6159c72f12688dc8314e85dd9e7e4dc05bbecb7729e023c86f8e0937353f27c7ede9\",\n        \"signed\": \"1c723a20c6772426a670e4d5c4a97c6ebe9147f71bb0a415631e44406e290322e4ca977d348fe7856a8edc235d0fe95f7ed91aefddf28a77e2c7dbfd8f552f0a56f1329d9a6be25a6159c72f12688dc8314e85dd9e7e4dc05bbecb7729e023c86f8e0937353f27c7ede9\",\n        \"signature\": \"1c723a20c6772426a670e4d5c4a97c6ebe9147f71bb0a415631e44406e290322e4ca977d348fe7856a8edc235d0fe95f7ed91aefddf28a77e2c7dbfd8f552f0a\"\n    },\n    {\n        \"secret_key\": \"d599d637b3c30a82a9984e2f758497d144de6f06b9fba04dd40fd949039d7c84\",\n        \"public_key\": \"6791d8ce50a44689fc178727c5c3a1c959fbeed74ef7d8e7bd3c1ab4da31c51f\",\n        \"message\": \"a7c04e8ba75d0a03d8b166ad7a1d77e1b91c7aaf7befdd99311fc3c54a684ddd971d5b3211c3eeaff1e54e\",\n        \"signed\": \"ebf10d9ac7c96108140e7def6fe9533d727646ff5b3af273c1df95762a66f32b65a09634d013f54b5dd6011f91bc336ca8b355ce33f8cfbec2535a4c427f8205a7c04e8ba75d0a03d8b166ad7a1d77e1b91c7aaf7befdd99311fc3c54a684ddd971d5b3211c3eeaff1e54e\",\n        \"signature\": \"ebf10d9ac7c96108140e7def6fe9533d727646ff5b3af273c1df95762a66f32b65a09634d013f54b5dd6011f91bc336ca8b355ce33f8cfbec2535a4c427f8205\"\n    },\n    {\n        \"secret_key\": \"30ab8232fa7018f0ce6c39bd8f782fe2e159758bb0f2f4386c7f28cfd2c85898\",\n        \"public_key\": \"ecfb6a2bd42f31b61250ba5de7e46b4719afdfbc660db71a7bd1df7b0a3abe37\",\n        \"message\": \"63b80b7956acbecf0c35e9ab06b914b0c7014fe1a4bbc0217240c1a33095d707953ed77b15d211adaf9b97dc\",\n        \"signed\": \"9af885344cc7239498f712df80bc01b80638291ed4a1d28baa5545017a72e2f65649ccf9603da6eb5bfab9f5543a6ca4a7af3866153c76bf66bf95def615b00c63b80b7956acbecf0c35e9ab06b914b0c7014fe1a4bbc0217240c1a33095d707953ed77b15d211adaf9b97dc\",\n        \"signature\": \"9af885344cc7239498f712df80bc01b80638291ed4a1d28baa5545017a72e2f65649ccf9603da6eb5bfab9f5543a6ca4a7af3866153c76bf66bf95def615b00c\"\n    },\n    {\n        \"secret_key\": \"0ddcdc872c7b748d40efe96c2881ae189d87f56148ed8af3ebbbc80324e38bdd\",\n        \"public_key\": \"588ddadcbcedf40df0e9697d8bb277c7bb1498fa1d26ce0a835a760b92ca7c85\",\n        \"message\": \"65641cd402add8bf3d1d67dbeb6d41debfbef67e4317c35b0a6d5bbbae0e034de7d670ba1413d056f2d6f1de12\",\n        \"signed\": \"c179c09456e235fe24105afa6e8ec04637f8f943817cd098ba95387f9653b2add181a31447d92d1a1ddf1ceb0db62118de9dffb7dcd2424057cbdff5d41d040365641cd402add8bf3d1d67dbeb6d41debfbef67e4317c35b0a6d5bbbae0e034de7d670ba1413d056f2d6f1de12\",\n        \"signature\": \"c179c09456e235fe24105afa6e8ec04637f8f943817cd098ba95387f9653b2add181a31447d92d1a1ddf1ceb0db62118de9dffb7dcd2424057cbdff5d41d0403\"\n    },\n    {\n        \"secret_key\": \"89f0d68299ba0a5a83f248ae0c169f8e3849a9b47bd4549884305c9912b46603\",\n        \"public_key\": \"aba3e795aab2012acceadd7b3bd9daeeed6ff5258bdcd7c93699c2a3836e3832\",\n        \"message\": \"4f1846dd7ad50e545d4cfbffbb1dc2ff145dc123754d08af4e44ecc0bc8c91411388bc7653e2d893d1eac2107d05\",\n        \"signed\": \"2c691fa8d487ce20d5d2fa41559116e0bbf4397cf5240e152556183541d66cf753582401a4388d390339dbef4d384743caa346f55f8daba68ba7b9131a8a6e0b4f1846dd7ad50e545d4cfbffbb1dc2ff145dc123754d08af4e44ecc0bc8c91411388bc7653e2d893d1eac2107d05\",\n        \"signature\": \"2c691fa8d487ce20d5d2fa41559116e0bbf4397cf5240e152556183541d66cf753582401a4388d390339dbef4d384743caa346f55f8daba68ba7b9131a8a6e0b\"\n    },\n    {\n        \"secret_key\": \"0a3c1844e2db070fb24e3c95cb1cc6714ef84e2ccd2b9dd2f1460ebf7ecf13b1\",\n        \"public_key\": \"72e409937e0610eb5c20b326dc6ea1bbbc0406701c5cd67d1fbde09192b07c01\",\n        \"message\": \"4c8274d0ed1f74e2c86c08d955bde55b2d54327e82062a1f71f70d536fdc8722cdead7d22aaead2bfaa1ad00b82957\",\n        \"signed\": \"87f7fdf46095201e877a588fe3e5aaf476bd63138d8a878b89d6ac60631b3458b9d41a3c61a588e1db8d29a5968981b018776c588780922f5aa732ba6379dd054c8274d0ed1f74e2c86c08d955bde55b2d54327e82062a1f71f70d536fdc8722cdead7d22aaead2bfaa1ad00b82957\",\n        \"signature\": \"87f7fdf46095201e877a588fe3e5aaf476bd63138d8a878b89d6ac60631b3458b9d41a3c61a588e1db8d29a5968981b018776c588780922f5aa732ba6379dd05\"\n    },\n    {\n        \"secret_key\": \"c8d7a8818b98dfdb20839c871cb5c48e9e9470ca3ad35ba2613a5d3199c8ab23\",\n        \"public_key\": \"90d2efbba4d43e6b2b992ca16083dbcfa2b322383907b0ee75f3e95845d3c47f\",\n        \"message\": \"783e33c3acbdbb36e819f544a7781d83fc283d3309f5d3d12c8dcd6b0b3d0e89e38cfd3b4d0885661ca547fb9764abff\",\n        \"signed\": \"fa2e994421aef1d5856674813d05cbd2cf84ef5eb424af6ecd0dc6fdbdc2fe605fe985883312ecf34f59bfb2f1c9149e5b9cc9ecda05b2731130f3ed28ddae0b783e33c3acbdbb36e819f544a7781d83fc283d3309f5d3d12c8dcd6b0b3d0e89e38cfd3b4d0885661ca547fb9764abff\",\n        \"signature\": \"fa2e994421aef1d5856674813d05cbd2cf84ef5eb424af6ecd0dc6fdbdc2fe605fe985883312ecf34f59bfb2f1c9149e5b9cc9ecda05b2731130f3ed28ddae0b\"\n    },\n    {\n        \"secret_key\": \"b482703612d0c586f76cfcb21cfd2103c957251504a8c0ac4c86c9c6f3e429ff\",\n        \"public_key\": \"fd711dc7dd3b1dfb9df9704be3e6b26f587fe7dd7ba456a91ba43fe51aec09ad\",\n        \"message\": \"29d77acfd99c7a0070a88feb6247a2bce9984fe3e6fbf19d4045042a21ab26cbd771e184a9a75f316b648c6920db92b87b\",\n        \"signed\": \"58832bdeb26feafc31b46277cf3fb5d7a17dfb7ccd9b1f58ecbe6feb979666828f239ba4d75219260ecac0acf40f0e5e2590f4caa16bbbcd8a155d347967a60729d77acfd99c7a0070a88feb6247a2bce9984fe3e6fbf19d4045042a21ab26cbd771e184a9a75f316b648c6920db92b87b\",\n        \"signature\": \"58832bdeb26feafc31b46277cf3fb5d7a17dfb7ccd9b1f58ecbe6feb979666828f239ba4d75219260ecac0acf40f0e5e2590f4caa16bbbcd8a155d347967a607\"\n    },\n    {\n        \"secret_key\": \"84e50dd9a0f197e3893c38dbd91fafc344c1776d3a400e2f0f0ee7aa829eb8a2\",\n        \"public_key\": \"2c50f870ee48b36b0ac2f8a5f336fb090b113050dbcc25e078200a6e16153eea\",\n        \"message\": \"f3992cde6493e671f1e129ddca8038b0abdb77bb9035f9f8be54bd5d68c1aeff724ff47d29344391dc536166b8671cbbf123\",\n        \"signed\": \"69e6a4491a63837316e86a5f4ba7cd0d731ecc58f1d0a264c67c89befdd8d3829d8de13b33cc0bf513931715c7809657e2bfb960e5c764c971d733746093e500f3992cde6493e671f1e129ddca8038b0abdb77bb9035f9f8be54bd5d68c1aeff724ff47d29344391dc536166b8671cbbf123\",\n        \"signature\": \"69e6a4491a63837316e86a5f4ba7cd0d731ecc58f1d0a264c67c89befdd8d3829d8de13b33cc0bf513931715c7809657e2bfb960e5c764c971d733746093e500\"\n    },\n    {\n        \"secret_key\": \"b322d46577a2a991a4d1698287832a39c487ef776b4bff037a05c7f1812bdeec\",\n        \"public_key\": \"eb2bcadfd3eec2986baff32b98e7c4dbf03ff95d8ad5ff9aa9506e5472ff845f\",\n        \"message\": \"19f1bf5dcf1750c611f1c4a2865200504d82298edd72671f62a7b1471ac3d4a30f7de9e5da4108c52a4ce70a3e114a52a3b3c5\",\n        \"signed\": \"c7b55137317ca21e33489ff6a9bfab97c855dc6f85684a70a9125a261b56d5e6f149c5774d734f2d8debfc77b721896a8267c23768e9badb910eef83ec25880219f1bf5dcf1750c611f1c4a2865200504d82298edd72671f62a7b1471ac3d4a30f7de9e5da4108c52a4ce70a3e114a52a3b3c5\",\n        \"signature\": \"c7b55137317ca21e33489ff6a9bfab97c855dc6f85684a70a9125a261b56d5e6f149c5774d734f2d8debfc77b721896a8267c23768e9badb910eef83ec258802\"\n    },\n    {\n        \"secret_key\": \"960cab5034b9838d098d2dcbf4364bec16d388f6376d73a6273b70f82bbc98c0\",\n        \"public_key\": \"5e3c19f2415acf729f829a4ebd5c40e1a6bc9fbca95703a9376087ed0937e51a\",\n        \"message\": \"f8b21962447b0a8f2e4279de411bea128e0be44b6915e6cda88341a68a0d818357db938eac73e0af6d31206b3948f8c48a447308\",\n        \"signed\": \"27d4c3a1811ef9d4360b3bdd133c2ccc30d02c2f248215776cb07ee4177f9b13fc42dd70a6c2fed8f225c7663c7f182e7ee8eccff20dc7b0e1d5834ec5b1ea01f8b21962447b0a8f2e4279de411bea128e0be44b6915e6cda88341a68a0d818357db938eac73e0af6d31206b3948f8c48a447308\",\n        \"signature\": \"27d4c3a1811ef9d4360b3bdd133c2ccc30d02c2f248215776cb07ee4177f9b13fc42dd70a6c2fed8f225c7663c7f182e7ee8eccff20dc7b0e1d5834ec5b1ea01\"\n    },\n    {\n        \"secret_key\": \"eb77b2638f23eebc82efe45ee9e5a0326637401e663ed029699b21e6443fb48e\",\n        \"public_key\": \"9ef27608961ac711de71a6e2d4d4663ea3ecd42fb7e4e8627c39622df4af0bbc\",\n        \"message\": \"99e3d00934003ebafc3e9fdb687b0f5ff9d5782a4b1f56b9700046c077915602c3134e22fc90ed7e690fddd4433e2034dcb2dc99ab\",\n        \"signed\": \"18dc56d7bd9acd4f4daa78540b4ac8ff7aa9815f45a0bba370731a14eaabe96df8b5f37dbf8eae4cb15a64b244651e59d6a3d6761d9e3c50f2d0cbb09c05ec0699e3d00934003ebafc3e9fdb687b0f5ff9d5782a4b1f56b9700046c077915602c3134e22fc90ed7e690fddd4433e2034dcb2dc99ab\",\n        \"signature\": \"18dc56d7bd9acd4f4daa78540b4ac8ff7aa9815f45a0bba370731a14eaabe96df8b5f37dbf8eae4cb15a64b244651e59d6a3d6761d9e3c50f2d0cbb09c05ec06\"\n    },\n    {\n        \"secret_key\": \"b625aa89d3f7308715427b6c39bbac58effd3a0fb7316f7a22b99ee5922f2dc9\",\n        \"public_key\": \"65a99c3e16fea894ec33c6b20d9105e2a04e2764a4769d9bbd4d8bacfeab4a2e\",\n        \"message\": \"e07241dbd3adbe610bbe4d005dd46732a4c25086ecb8ec29cd7bca116e1bf9f53bfbf3e11fa49018d39ff1154a06668ef7df5c678e6a\",\n        \"signed\": \"01bb901d83b8b682d3614af46a807ba2691358feb775325d3423f549ff0aa5757e4e1a74e9c70f9721d8f354b319d4f4a1d91445c870fd0ffb94fed64664730de07241dbd3adbe610bbe4d005dd46732a4c25086ecb8ec29cd7bca116e1bf9f53bfbf3e11fa49018d39ff1154a06668ef7df5c678e6a\",\n        \"signature\": \"01bb901d83b8b682d3614af46a807ba2691358feb775325d3423f549ff0aa5757e4e1a74e9c70f9721d8f354b319d4f4a1d91445c870fd0ffb94fed64664730d\"\n    },\n    {\n        \"secret_key\": \"b1c9f8bd03fe82e78f5c0fb06450f27dacdf716434db268275df3e1dc177af42\",\n        \"public_key\": \"7fc88b1f7b3f11c629be671c21621f5c10672fafc8492da885742059ee6774cf\",\n        \"message\": \"331da7a9c1f87b2ac91ee3b86d06c29163c05ed6f8d8a9725b471b7db0d6acec7f0f702487163f5eda020ca5b493f399e1c8d308c3c0c2\",\n        \"signed\": \"4b229951ef262f16978f7914bc672e7226c5f8379d2778c5a2dc0a2650869f7acfbd0bcd30fdb0619bb44fc1ae5939b87cc318133009c20395b6c7eb98107701331da7a9c1f87b2ac91ee3b86d06c29163c05ed6f8d8a9725b471b7db0d6acec7f0f702487163f5eda020ca5b493f399e1c8d308c3c0c2\",\n        \"signature\": \"4b229951ef262f16978f7914bc672e7226c5f8379d2778c5a2dc0a2650869f7acfbd0bcd30fdb0619bb44fc1ae5939b87cc318133009c20395b6c7eb98107701\"\n    },\n    {\n        \"secret_key\": \"6d8cdb2e075f3a2f86137214cb236ceb89a6728bb4a200806bf3557fb78fac69\",\n        \"public_key\": \"57a04c7a5113cddfe49a4c124691d46c1f9cdc8f343f9dcb72a1330aeca71fda\",\n        \"message\": \"7f318dbd121c08bfddfeff4f6aff4e45793251f8abf658403358238984360054f2a862c5bb83ed89025d2014a7a0cee50da3cb0e76bbb6bf\",\n        \"signed\": \"a6cbc947f9c87d1455cf1a708528c090f11ecee4855d1dbaadf47454a4de55fa4ce84b36d73a5b5f8f59298ccf21992df492ef34163d87753b7e9d32f2c3660b7f318dbd121c08bfddfeff4f6aff4e45793251f8abf658403358238984360054f2a862c5bb83ed89025d2014a7a0cee50da3cb0e76bbb6bf\",\n        \"signature\": \"a6cbc947f9c87d1455cf1a708528c090f11ecee4855d1dbaadf47454a4de55fa4ce84b36d73a5b5f8f59298ccf21992df492ef34163d87753b7e9d32f2c3660b\"\n    },\n    {\n        \"secret_key\": \"47adc6d6bf571ee9570ca0f75b604ac43e303e4ab339ca9b53cacc5be45b2ccb\",\n        \"public_key\": \"a3f527a1c1f17dfeed92277347c9f98ab475de1755b0ab546b8a15d01b9bd0be\",\n        \"message\": \"ce497c5ff5a77990b7d8f8699eb1f5d8c0582f70cb7ac5c54d9d924913278bc654d37ea227590e15202217fc98dac4c0f3be2183d133315739\",\n        \"signed\": \"4e8c318343c306adbba60c92b75cb0569b9219d8a86e5d57752ed235fc109a43c2cf4e942cacf297279fbb28675347e08027722a4eb7395e00a17495d32edf0bce497c5ff5a77990b7d8f8699eb1f5d8c0582f70cb7ac5c54d9d924913278bc654d37ea227590e15202217fc98dac4c0f3be2183d133315739\",\n        \"signature\": \"4e8c318343c306adbba60c92b75cb0569b9219d8a86e5d57752ed235fc109a43c2cf4e942cacf297279fbb28675347e08027722a4eb7395e00a17495d32edf0b\"\n    },\n    {\n        \"secret_key\": \"3c19b50b0fe47961719c381d0d8da9b9869d312f13e3298b97fb22f0af29cbbe\",\n        \"public_key\": \"0f7eda091499625e2bae8536ea35cda5483bd16a9c7e416b341d6f2c83343612\",\n        \"message\": \"8ddcd63043f55ec3bfc83dceae69d8f8b32f4cdb6e2aebd94b4314f8fe7287dcb62732c9052e7557fe63534338efb5b6254c5d41d2690cf5144f\",\n        \"signed\": \"efbd41f26a5d62685516f882b6ec74e0d5a71830d203c231248f26e99a9c6578ec900d68cdb8fa7216ad0d24f9ecbc9ffa655351666582f626645395a31fa7048ddcd63043f55ec3bfc83dceae69d8f8b32f4cdb6e2aebd94b4314f8fe7287dcb62732c9052e7557fe63534338efb5b6254c5d41d2690cf5144f\",\n        \"signature\": \"efbd41f26a5d62685516f882b6ec74e0d5a71830d203c231248f26e99a9c6578ec900d68cdb8fa7216ad0d24f9ecbc9ffa655351666582f626645395a31fa704\"\n    },\n    {\n        \"secret_key\": \"34e1e9d539107eb86b393a5ccea1496d35bc7d5e9a8c5159d957e4e5852b3eb0\",\n        \"public_key\": \"0ecb2601d5f7047428e9f909883a12420085f04ee2a88b6d95d3d7f2c932bd76\",\n        \"message\": \"a6d4d0542cfe0d240a90507debacabce7cbbd48732353f4fad82c7bb7dbd9df8e7d9a16980a45186d8786c5ef65445bcc5b2ad5f660ffc7c8eaac0\",\n        \"signed\": \"32d22904d3e7012d6f5a441b0b4228064a5cf95b723a66b048a087ecd55920c31c204c3f2006891a85dd1932e3f1d614cfd633b5e63291c6d8166f3011431e09a6d4d0542cfe0d240a90507debacabce7cbbd48732353f4fad82c7bb7dbd9df8e7d9a16980a45186d8786c5ef65445bcc5b2ad5f660ffc7c8eaac0\",\n        \"signature\": \"32d22904d3e7012d6f5a441b0b4228064a5cf95b723a66b048a087ecd55920c31c204c3f2006891a85dd1932e3f1d614cfd633b5e63291c6d8166f3011431e09\"\n    },\n    {\n        \"secret_key\": \"49dd473ede6aa3c866824a40ada4996c239a20d84c9365e4f0a4554f8031b9cf\",\n        \"public_key\": \"788de540544d3feb0c919240b390729be487e94b64ad973eb65b4669ecf23501\",\n        \"message\": \"3a53594f3fba03029318f512b084a071ebd60baec7f55b028dc73bfc9c74e0ca496bf819dd92ab61cd8b74be3c0d6dcd128efc5ed3342cba124f726c\",\n        \"signed\": \"d2fde02791e720852507faa7c3789040d9ef86646321f313ac557f4002491542dd67d05c6990cdb0d495501fbc5d5188bfbb84dc1bf6098bee0603a47fc2690f3a53594f3fba03029318f512b084a071ebd60baec7f55b028dc73bfc9c74e0ca496bf819dd92ab61cd8b74be3c0d6dcd128efc5ed3342cba124f726c\",\n        \"signature\": \"d2fde02791e720852507faa7c3789040d9ef86646321f313ac557f4002491542dd67d05c6990cdb0d495501fbc5d5188bfbb84dc1bf6098bee0603a47fc2690f\"\n    },\n    {\n        \"secret_key\": \"331c64da482b6b551373c36481a02d8136ecadbb01ab114b4470bf41607ac571\",\n        \"public_key\": \"52a00d96a3148b4726692d9eff89160ea9f99a5cc4389f361fed0bb16a42d521\",\n        \"message\": \"20e1d05a0d5b32cc8150b8116cef39659dd5fb443ab15600f78e5b49c45326d9323f2850a63c3808859495ae273f58a51e9de9a145d774b40ba9d753d3\",\n        \"signed\": \"22c99aa946ead39ac7997562810c01c20b46bd610645bd2d56dcdcbaacc5452c74fbf4b8b1813b0e94c30d808ce5498e61d4f7ccbb4cc5f04dfc6140825a960020e1d05a0d5b32cc8150b8116cef39659dd5fb443ab15600f78e5b49c45326d9323f2850a63c3808859495ae273f58a51e9de9a145d774b40ba9d753d3\",\n        \"signature\": \"22c99aa946ead39ac7997562810c01c20b46bd610645bd2d56dcdcbaacc5452c74fbf4b8b1813b0e94c30d808ce5498e61d4f7ccbb4cc5f04dfc6140825a9600\"\n    },\n    {\n        \"secret_key\": \"5c0b96f2af8712122cf743c8f8dc77b6cd5570a7de13297bb3dde1886213cce2\",\n        \"public_key\": \"0510eaf57d7301b0e1d527039bf4c6e292300a3a61b4765434f3203c100351b1\",\n        \"message\": \"54e0caa8e63919ca614b2bfd308ccfe50c9ea888e1ee4446d682cb5034627f97b05392c04e835556c31c52816a48e4fb196693206b8afb4408662b3cb575\",\n        \"signed\": \"06e5d8436ac7705b3a90f1631cdd38ec1a3fa49778a9b9f2fa5ebea4e7d560ada7dd26ff42fafa8ba420323742761aca6904940dc21bbef63ff72daab45d430b54e0caa8e63919ca614b2bfd308ccfe50c9ea888e1ee4446d682cb5034627f97b05392c04e835556c31c52816a48e4fb196693206b8afb4408662b3cb575\",\n        \"signature\": \"06e5d8436ac7705b3a90f1631cdd38ec1a3fa49778a9b9f2fa5ebea4e7d560ada7dd26ff42fafa8ba420323742761aca6904940dc21bbef63ff72daab45d430b\"\n    },\n    {\n        \"secret_key\": \"de84f2435f78dedb87da18194ff6a336f08111150def901c1ac418146eb7b54a\",\n        \"public_key\": \"d3a92bbaa4d63af79c2226a7236e6427428df8b362427f873023b22d2f5e03f2\",\n        \"message\": \"205135ec7f417c858072d5233fb36482d4906abd60a74a498c347ff248dfa2722ca74e879de33169fadc7cd44d6c94a17d16e1e630824ba3e0df22ed68eaab\",\n        \"signed\": \"471ebc973cfdaceec07279307368b73be35bc6f8d8312b70150567369096706dc471126c3576f9f0eb550df5ac6a525181110029dd1fc11174d1aaced48d630f205135ec7f417c858072d5233fb36482d4906abd60a74a498c347ff248dfa2722ca74e879de33169fadc7cd44d6c94a17d16e1e630824ba3e0df22ed68eaab\",\n        \"signature\": \"471ebc973cfdaceec07279307368b73be35bc6f8d8312b70150567369096706dc471126c3576f9f0eb550df5ac6a525181110029dd1fc11174d1aaced48d630f\"\n    },\n    {\n        \"secret_key\": \"ba4d6e67b2ce67a1e44326494044f37a442f3b81725bc1f9341462718b55ee20\",\n        \"public_key\": \"f73fa076f84b6db675a5fda5ad67e351a41e8e7f29add16809ca010387e9c6cc\",\n        \"message\": \"4bafdac9099d4057ed6dd08bcaee8756e9a40f2cb9598020eb95019528409bbea38b384a59f119f57297bfb2fa142fc7bb1d90dbddde772bcde48c5670d5fa13\",\n        \"signed\": \"57b9d2a711207f837421bae7dd48eaa18eab1a9a70a0f1305806fee17b458f3a0964b302d1834d3e0ac9e8496f000b77f0083b41f8a957e632fbc7840eee6a064bafdac9099d4057ed6dd08bcaee8756e9a40f2cb9598020eb95019528409bbea38b384a59f119f57297bfb2fa142fc7bb1d90dbddde772bcde48c5670d5fa13\",\n        \"signature\": \"57b9d2a711207f837421bae7dd48eaa18eab1a9a70a0f1305806fee17b458f3a0964b302d1834d3e0ac9e8496f000b77f0083b41f8a957e632fbc7840eee6a06\"\n    },\n    {\n        \"secret_key\": \"0d131c45aea6f3a4e1b9a2cf60c55104587efaa846b222bf0a7b74ce7a3f63b6\",\n        \"public_key\": \"3c6729dbe93b499c4e614a2f21beb729438d498e1ac8d14cbad9717a5dbd97cd\",\n        \"message\": \"b4291d08b88fb2f7b8f99d0dce40079fcbab718bbd8f4e8eabc3c1428b6a071fb2a3c8eba1cacccfa871b365c708bef2685bc13e6b80bc14a5f249170ffc56d014\",\n        \"signed\": \"a9c5ee86fb06d9e46b379c32dda7c92c9c13db274dc24116fbdd878696045488cc75a52fff67d1a5113d06e333ac67ff664b3f2a405fa1d14dd5bbb97409b606b4291d08b88fb2f7b8f99d0dce40079fcbab718bbd8f4e8eabc3c1428b6a071fb2a3c8eba1cacccfa871b365c708bef2685bc13e6b80bc14a5f249170ffc56d014\",\n        \"signature\": \"a9c5ee86fb06d9e46b379c32dda7c92c9c13db274dc24116fbdd878696045488cc75a52fff67d1a5113d06e333ac67ff664b3f2a405fa1d14dd5bbb97409b606\"\n    },\n    {\n        \"secret_key\": \"a75e3b6b4170e444781be4eeac3e0fdaa4b4356f705486bcb071a325ae071fba\",\n        \"public_key\": \"993d38a7d72f0aee15ff6f4fdc37ca7724fd1373a3766b275dbc77e647980e0a\",\n        \"message\": \"4037866f6548b01cc6bcf3a940e3945aa2d188b4b7f182aa77ec4d6b0428ab5b84d85df192a5a38ada089d76fa26bf67736a7041a5eb8f0c5719eb396693c45160f8\",\n        \"signed\": \"a5db4d3d3329abe3697959e6b5947ea8601b03ef8e1d6fe202144931272ca0a09b5eb0f390572ea7ef03c6131e9de5f16bf0b034244f7e104ff5311bbf663a0d4037866f6548b01cc6bcf3a940e3945aa2d188b4b7f182aa77ec4d6b0428ab5b84d85df192a5a38ada089d76fa26bf67736a7041a5eb8f0c5719eb396693c45160f8\",\n        \"signature\": \"a5db4d3d3329abe3697959e6b5947ea8601b03ef8e1d6fe202144931272ca0a09b5eb0f390572ea7ef03c6131e9de5f16bf0b034244f7e104ff5311bbf663a0d\"\n    },\n    {\n        \"secret_key\": \"bcbcf561ecc05a41c7d7e55e696d32ce39b4d03c1f5f3f3a8927fe5e62e844b2\",\n        \"public_key\": \"4ddf53fad6a7a9ed30f3afecca136fd7843b72c243090891ae4021a32cadff1a\",\n        \"message\": \"6f6716b6784740980aebc3248807e31c1286ac7b681c00b66c88ff7a336d441fa5c3eb256d20cf6d1ac92ccfe4be6dcc41b1aff846d360c243001cabdfbf1a9b240455\",\n        \"signed\": \"9ff15115f6661f3211d7a40764967629ba6a5263951bdc3c6a4c90d070f7be00024b80d83b6bc27587fcff5f5ccc0eb3cde1497cf56895147a063f61f08adf0b6f6716b6784740980aebc3248807e31c1286ac7b681c00b66c88ff7a336d441fa5c3eb256d20cf6d1ac92ccfe4be6dcc41b1aff846d360c243001cabdfbf1a9b240455\",\n        \"signature\": \"9ff15115f6661f3211d7a40764967629ba6a5263951bdc3c6a4c90d070f7be00024b80d83b6bc27587fcff5f5ccc0eb3cde1497cf56895147a063f61f08adf0b\"\n    },\n    {\n        \"secret_key\": \"210532805fa9cc9be916d213cac374e3cd6fc2602a544d0c1ce29d30105d69ab\",\n        \"public_key\": \"10699e499be99e2b11b98f6f86b67cdc4ccf69f3c53ce094875647d2d0d0ecc5\",\n        \"message\": \"9fc4d28cfd25e6c0c5e724e19ca39d71e53bf4aa2796c54c3351f108fc70f2611a62e0ab90af6ade5216788e9eb2a873059b1e79d7d59debd68f2d4d80ffe31bf74b928c\",\n        \"signed\": \"4c2d31d5bbc42e026dc1e079ecc4dd072c5d2cce65e3db8d8a1dd9057faa0371727f727231a0f060fa27097533b6db3b8f6252f2793d75662caadf5f0fcc710e9fc4d28cfd25e6c0c5e724e19ca39d71e53bf4aa2796c54c3351f108fc70f2611a62e0ab90af6ade5216788e9eb2a873059b1e79d7d59debd68f2d4d80ffe31bf74b928c\",\n        \"signature\": \"4c2d31d5bbc42e026dc1e079ecc4dd072c5d2cce65e3db8d8a1dd9057faa0371727f727231a0f060fa27097533b6db3b8f6252f2793d75662caadf5f0fcc710e\"\n    },\n    {\n        \"secret_key\": \"185d64b69479e0ba0a5844a10ad84125ba11c4b40d63eda2c57afc7e019c8e0c\",\n        \"public_key\": \"a5764f6398a5ae2266a38f9714533c4bbd8d07826f63e204cbac374b0acef1bd\",\n        \"message\": \"4a0824fe70d4315413d0a0cafbf4f5fe117d5e07e1c3a4effb9d0ae91490234878ccf6792a91f68c6a520de16071f08abe35dc5ea428f1957b663371ce24c609dd55b8f493\",\n        \"signed\": \"43e0387da5ba09a190f6e7b2680578d889769bcc445e5ef571b492871c155c5b9f620bfacfbf2df1fd87444604b71b2e237baaa7ee2093ede4a601edf883e3074a0824fe70d4315413d0a0cafbf4f5fe117d5e07e1c3a4effb9d0ae91490234878ccf6792a91f68c6a520de16071f08abe35dc5ea428f1957b663371ce24c609dd55b8f493\",\n        \"signature\": \"43e0387da5ba09a190f6e7b2680578d889769bcc445e5ef571b492871c155c5b9f620bfacfbf2df1fd87444604b71b2e237baaa7ee2093ede4a601edf883e307\"\n    },\n    {\n        \"secret_key\": \"cfa9d9164b3c4f6f722635d2066cd7ea5e5533d2c74f8add669c371faa476426\",\n        \"public_key\": \"41169a66f9a63f285782a6c2db81cc3f70b3ada21a68c84745c88a74c3b0a2de\",\n        \"message\": \"757621b1675db7cacef7f2782587ff3af51a3ef2f4bcf9279c4ce94002e1f00424bf0eb621982cc85cb4d171e564a0c2f6e3567a1aae2cddb7e9b25f47dc20a51050542969ca\",\n        \"signed\": \"01d7c9b5701af71e2f4877ffc9b7b5305f52816d4458e37e41c7719fac1d76a01fff3f50fe1a5875ccc3fb70001c947a33fc8b207de13572ccdb8ba98933ab01757621b1675db7cacef7f2782587ff3af51a3ef2f4bcf9279c4ce94002e1f00424bf0eb621982cc85cb4d171e564a0c2f6e3567a1aae2cddb7e9b25f47dc20a51050542969ca\",\n        \"signature\": \"01d7c9b5701af71e2f4877ffc9b7b5305f52816d4458e37e41c7719fac1d76a01fff3f50fe1a5875ccc3fb70001c947a33fc8b207de13572ccdb8ba98933ab01\"\n    },\n    {\n        \"secret_key\": \"1acb4a256c2f8993ca24de1e0014606d668b5e756032d269f1d24d351c8eea4a\",\n        \"public_key\": \"cbbdcd8cbc885ab43a057e5f9579f1161954159e7b562ea26cd9a43c88d3f96d\",\n        \"message\": \"c46a6d61aa0aed1c1d8547a70b89b7196475d5a4870881b1ecd0f0cb9c745f8a2adc8024e2dc55b53aa5d383a81aabc1a47e8d07d00b7f0b56ceddbfb1f424bb5c02184678a666\",\n        \"signed\": \"05aa76f7fe51892303d78914715995e7d768ff7714ce270f175e56af17ae018d3fa939f5f620de82bcd1549687b205c7871203e624238c4e309fab7f92fbaa05c46a6d61aa0aed1c1d8547a70b89b7196475d5a4870881b1ecd0f0cb9c745f8a2adc8024e2dc55b53aa5d383a81aabc1a47e8d07d00b7f0b56ceddbfb1f424bb5c02184678a666\",\n        \"signature\": \"05aa76f7fe51892303d78914715995e7d768ff7714ce270f175e56af17ae018d3fa939f5f620de82bcd1549687b205c7871203e624238c4e309fab7f92fbaa05\"\n    },\n    {\n        \"secret_key\": \"ace3c46424823622979fc3a84a7da69c1d527d8312e8fb018375bd3a96c29c18\",\n        \"public_key\": \"937cf34136d9e1cce0de11b12c70cbfb7455448421e92c82e7c40934bff8c676\",\n        \"message\": \"a9f137bc9021bf105aee25be21cd9ee5b3547cf10cc5f98476fb588bd70e2d6d6b0834e842e4ee94303cf96b09c1715381b36e14a491b80f895ea421b8ec2b1d3c187e02935c5526\",\n        \"signed\": \"feb8896dd3fe6001ffea171b37b788a69f7f850193a63406f56376dd263d099aef80ece67e2c43f40eca462c6b71e79406b18db74ae5d49844e3b132bc2a1307a9f137bc9021bf105aee25be21cd9ee5b3547cf10cc5f98476fb588bd70e2d6d6b0834e842e4ee94303cf96b09c1715381b36e14a491b80f895ea421b8ec2b1d3c187e02935c5526\",\n        \"signature\": \"feb8896dd3fe6001ffea171b37b788a69f7f850193a63406f56376dd263d099aef80ece67e2c43f40eca462c6b71e79406b18db74ae5d49844e3b132bc2a1307\"\n    },\n    {\n        \"secret_key\": \"88f681934e33c35c07dc6e5a832942ae3d59903ccde2f76ccb7587cea7ec41b6\",\n        \"public_key\": \"6a4e8aa5adb63d22fd7b14a26fdb03b7c8aa6ccd5a196f2c54b0465adb5092e1\",\n        \"message\": \"6e8bac1f853b81fef94707e18cc61c6f0a9cbc2a41d078dcc83fc0229c7f8dbe6dbdd90854b1f1ae2b9f2b120b86a8786b4e78ce23ab86baaf88754af0f3d88881dae0bc5261bfd038\",\n        \"signed\": \"45b27bf1b9eac06b62b686f6d546563b2dfe5b175dbef32bf78c35a16c958a9d4f26d291de9bb2066c0a286113cc09172d40a36d4cbd951708860226eb30cd056e8bac1f853b81fef94707e18cc61c6f0a9cbc2a41d078dcc83fc0229c7f8dbe6dbdd90854b1f1ae2b9f2b120b86a8786b4e78ce23ab86baaf88754af0f3d88881dae0bc5261bfd038\",\n        \"signature\": \"45b27bf1b9eac06b62b686f6d546563b2dfe5b175dbef32bf78c35a16c958a9d4f26d291de9bb2066c0a286113cc09172d40a36d4cbd951708860226eb30cd05\"\n    },\n    {\n        \"secret_key\": \"48050a6e0158f6ad253412e4497cff62d5ee555edffe59e4dc401522813295ce\",\n        \"public_key\": \"975e010abb9a3e56659137b0506057f283982f886ca172c7bc2c500ed9bd26c1\",\n        \"message\": \"ed6eec29fb7049dff707f0a4426ebc8f5b350e95870b9d6198c8139e9c3e1e409937d1a858a0dea482a5cb1a854ed3b5a9397acb63bff6b64039ef2eb1159e99858310bbbd86125c3e0e\",\n        \"signed\": \"7216ab60c35168187d0fce4753c86e80058d540b76bf95843a5898841060a99a44de6f439625a3f6365f59c377bf45909bbfef5c50b25f3194e5fbd34ea5e706ed6eec29fb7049dff707f0a4426ebc8f5b350e95870b9d6198c8139e9c3e1e409937d1a858a0dea482a5cb1a854ed3b5a9397acb63bff6b64039ef2eb1159e99858310bbbd86125c3e0e\",\n        \"signature\": \"7216ab60c35168187d0fce4753c86e80058d540b76bf95843a5898841060a99a44de6f439625a3f6365f59c377bf45909bbfef5c50b25f3194e5fbd34ea5e706\"\n    },\n    {\n        \"secret_key\": \"18d13d0c00e8e3386a5cfb30a9e79fe88b1861ed2d1201eb170038e194770403\",\n        \"public_key\": \"a4afc833401876090d9b880c41267d68cbbeeaa38afb20884e27328f3b7f535e\",\n        \"message\": \"910f6c272dd97931ac47310d244cadb43251365e02ba9f6a5b3c3226be9d7d3a74a2ba4906e8e71a4bf3d3556ebdfc666cd6b12f20c4a00834b88fbb244575199286b0b9344cf334aff007\",\n        \"signed\": \"033988154c5d79d2510be83e778015dfe2fb85b8111f7ec139918b5400e3d656ee80a9f5c9072b5b467a5cc5a57cc8ad1062b5bff10862d9d369dde2cc966701910f6c272dd97931ac47310d244cadb43251365e02ba9f6a5b3c3226be9d7d3a74a2ba4906e8e71a4bf3d3556ebdfc666cd6b12f20c4a00834b88fbb244575199286b0b9344cf334aff007\",\n        \"signature\": \"033988154c5d79d2510be83e778015dfe2fb85b8111f7ec139918b5400e3d656ee80a9f5c9072b5b467a5cc5a57cc8ad1062b5bff10862d9d369dde2cc966701\"\n    },\n    {\n        \"secret_key\": \"4adc8c28646a93a817293a14d29b48e2c6d712a68993547a5c5e4d1452acbc3a\",\n        \"public_key\": \"7f40473628f23fc0dff0021afd487740d4916a9122e6c97d36433e5ebf04f88c\",\n        \"message\": \"09fb5501f1688f80a0ab9e22d778ae130acaf74d7f5185b4da198c6b9edac4302e2b753e578766e17d4056dc40d95cf4ca8bcc6565795e97d68bcda79fa77c493397716356164caab5d19cfd\",\n        \"signed\": \"6d3b4e90ec408311f9b15b9253d3d95c5d152620c260d56302555a8804a5104ba5e8d29ee108e764a64219297298ab7674bbca784dee28773b34e185a386c20809fb5501f1688f80a0ab9e22d778ae130acaf74d7f5185b4da198c6b9edac4302e2b753e578766e17d4056dc40d95cf4ca8bcc6565795e97d68bcda79fa77c493397716356164caab5d19cfd\",\n        \"signature\": \"6d3b4e90ec408311f9b15b9253d3d95c5d152620c260d56302555a8804a5104ba5e8d29ee108e764a64219297298ab7674bbca784dee28773b34e185a386c208\"\n    },\n    {\n        \"secret_key\": \"f26e1c84697a4908151b447dcf6c7c7a38b04081db9e7c7738e6fec900bed0c1\",\n        \"public_key\": \"a86e1422c1235ff8e1aa083470d5e42288cb007ab50e795dd0b4ff87394966c4\",\n        \"message\": \"54ed47606a1487c2f900cefb6e899dbaf6c31cc88ebe3558b83b93f6d422c31e888e48e520eeaedd7e554a9cd40c2c519d533b6144cee484c389e976b1e4022b50e7dbb87ead7e541a2004daf7\",\n        \"signed\": \"44f3344b9566c9dfd22d6198e1cbf95d9e28f2982fc7f166ab25dda30c46f768c558e0394fb9ab3e1d4db4cf487c17641a13f3f48939e0c64827a75103c5740654ed47606a1487c2f900cefb6e899dbaf6c31cc88ebe3558b83b93f6d422c31e888e48e520eeaedd7e554a9cd40c2c519d533b6144cee484c389e976b1e4022b50e7dbb87ead7e541a2004daf7\",\n        \"signature\": \"44f3344b9566c9dfd22d6198e1cbf95d9e28f2982fc7f166ab25dda30c46f768c558e0394fb9ab3e1d4db4cf487c17641a13f3f48939e0c64827a75103c57406\"\n    },\n    {\n        \"secret_key\": \"cc0c33f3a86f5a17d30c186ce0f3b740bafa5fe3c7090f143541e2b2c1e534bc\",\n        \"public_key\": \"967a71c7cf9b82cc78cbe109104d8b438a8d1fd71d260d029046a9a4526866ff\",\n        \"message\": \"1944e5e155d75e0d0be92e1be14cec370ad13791f2bfd40f271214e94fcf213c71bc20d7ce0c7584421ac4efc451883cc3f4956f21f73a4216720438bc38ff2cfdf3709905a50a9d94b1d9e7932b\",\n        \"signed\": \"e277b3dd655c33ff75fa920af1fcc859401e6c7a6ef4c6bfbfac5069638f19ca115baf13c09c82af793facb6abd0cd58e8481b08c1b68ad7a2665c4a614a28061944e5e155d75e0d0be92e1be14cec370ad13791f2bfd40f271214e94fcf213c71bc20d7ce0c7584421ac4efc451883cc3f4956f21f73a4216720438bc38ff2cfdf3709905a50a9d94b1d9e7932b\",\n        \"signature\": \"e277b3dd655c33ff75fa920af1fcc859401e6c7a6ef4c6bfbfac5069638f19ca115baf13c09c82af793facb6abd0cd58e8481b08c1b68ad7a2665c4a614a2806\"\n    },\n    {\n        \"secret_key\": \"f0bc979375a7073068dba7f6c094db6598b4e45df7d549583c22fded8048fa2e\",\n        \"public_key\": \"b42b6c57a78f1d90090a7181ab2ae09f426cbc2be96eb2cf27abc70d7d32a4b3\",\n        \"message\": \"27ab3049b5c6351f6cfe38b13a059f5037257ee3d65d6079656856edc876ea081fd8a9480466f8839478088466f51ecbfaf2d65def25f0c4dd8d08588202812232f57945df8a6fa161ed8c0343b583\",\n        \"signed\": \"19dbc3027f9fae707deb76f588f9fd07aa8eae29bd4e1d04c2c984388286b3b122248a6c03ed67eca35df4db3dc1e4237f267892518497d9552a21de19b5140f27ab3049b5c6351f6cfe38b13a059f5037257ee3d65d6079656856edc876ea081fd8a9480466f8839478088466f51ecbfaf2d65def25f0c4dd8d08588202812232f57945df8a6fa161ed8c0343b583\",\n        \"signature\": \"19dbc3027f9fae707deb76f588f9fd07aa8eae29bd4e1d04c2c984388286b3b122248a6c03ed67eca35df4db3dc1e4237f267892518497d9552a21de19b5140f\"\n    },\n    {\n        \"secret_key\": \"3022975f298c0ad5ddbe90954f20e63ae0c0d2704cf13c221f5b3720af4dba32\",\n        \"public_key\": \"b845bce38e26ab027b8247463d437a71bbddca2a2381d81fad4c297df9140bd5\",\n        \"message\": \"9aa19a595d989378cdc06891887ef5f9c246e5f83c0b658710673e4e7db760c76354c4f5d1e90db04a23b4fb434c69384593d010e312b11d299c9f97482de887cecfe82ea723bca79a1bd64d03ef19ee\",\n        \"signed\": \"ae14a860fad0051b3eb72b3721a82f7b9546b2867261e2b7b638979e2561bdeb89b600768f82450a66c8b0481283fa21cb6c53bde350effb68a7d1114bfdb2039aa19a595d989378cdc06891887ef5f9c246e5f83c0b658710673e4e7db760c76354c4f5d1e90db04a23b4fb434c69384593d010e312b11d299c9f97482de887cecfe82ea723bca79a1bd64d03ef19ee\",\n        \"signature\": \"ae14a860fad0051b3eb72b3721a82f7b9546b2867261e2b7b638979e2561bdeb89b600768f82450a66c8b0481283fa21cb6c53bde350effb68a7d1114bfdb203\"\n    },\n    {\n        \"secret_key\": \"0f710b6c481f71449589753312ef64932b4652ebe0e07597f7da1c4f3dcffb80\",\n        \"public_key\": \"6973ff2932ccddfc1d16c4c0da50c8b29fe6452d1ee84d52064ebf3d628d403e\",\n        \"message\": \"85d85744ad55e9ef9a65ca91e85c8a4f80e4c58f8e4e9354e833986098b7d9fe9fdc0dedb0d75d2539fba00034fc0c2e84344d1edaa09d4f63d5546d67803dd6b54ddcc0b1d3f2582dd75289e31de42e69\",\n        \"signed\": \"02a8d26aee11420fb4f09d1163e14b867df7c6f6c8f8dc7a78034659f0401cad0aa90397efdd0704b798db1936503026e2a1adc297e27974d4be312a3753f80485d85744ad55e9ef9a65ca91e85c8a4f80e4c58f8e4e9354e833986098b7d9fe9fdc0dedb0d75d2539fba00034fc0c2e84344d1edaa09d4f63d5546d67803dd6b54ddcc0b1d3f2582dd75289e31de42e69\",\n        \"signature\": \"02a8d26aee11420fb4f09d1163e14b867df7c6f6c8f8dc7a78034659f0401cad0aa90397efdd0704b798db1936503026e2a1adc297e27974d4be312a3753f804\"\n    },\n    {\n        \"secret_key\": \"7a05f121f60112dd16fee8c91bc2a11479f4b67ee33456042c8de167fc588017\",\n        \"public_key\": \"b3b05be989cea7197505d4b54335e5e1d77a4b52ba7282604bbc1cf6c4e87a6c\",\n        \"message\": \"d9c59e8cc4ede537be2122ab492a5b915a9b0a114b2ade356fc0457ef98722d5f567b86211e28369d14168ec4a3c804076e154adc70a668cf64a20d13cf190d115cd688d036e46938251df4964dc3517b10c\",\n        \"signed\": \"d30ce8a322b450a2fb1afd329cec8559ccf112bd83965f9ec4736270a0914e061196bf5209778c9f8ccf39c4668bbf0e1363f81afe45dd74e80d5875ddbf6f01d9c59e8cc4ede537be2122ab492a5b915a9b0a114b2ade356fc0457ef98722d5f567b86211e28369d14168ec4a3c804076e154adc70a668cf64a20d13cf190d115cd688d036e46938251df4964dc3517b10c\",\n        \"signature\": \"d30ce8a322b450a2fb1afd329cec8559ccf112bd83965f9ec4736270a0914e061196bf5209778c9f8ccf39c4668bbf0e1363f81afe45dd74e80d5875ddbf6f01\"\n    },\n    {\n        \"secret_key\": \"bf381f8dfb5d0c6d64e416ac23e0d0fcb86ebb899b1d146abd911b92a7808eb6\",\n        \"public_key\": \"863fad8d1f1bc630a15f6fe8ecefe6b4497b60b21ae8830da46742045fef156f\",\n        \"message\": \"8654f2f5c6dcd2cfcbb6ed8d2bc5fb5fec53e3effb0de65aac507fa56c897732395aa09946d3b6586a92edd6dc99315e1ba74c6a0247c4ba7760b948eb3c0932d9fe1f0e9fea6eb61a548a9ab48ffdf1547329\",\n        \"signed\": \"99b75378738fcac8067669e8509b5d2607e1ef76af9004e13fe5d3932df60b168216f58565340fa4d638055a89044ee7d45e2bd082a53382289a34700648980e8654f2f5c6dcd2cfcbb6ed8d2bc5fb5fec53e3effb0de65aac507fa56c897732395aa09946d3b6586a92edd6dc99315e1ba74c6a0247c4ba7760b948eb3c0932d9fe1f0e9fea6eb61a548a9ab48ffdf1547329\",\n        \"signature\": \"99b75378738fcac8067669e8509b5d2607e1ef76af9004e13fe5d3932df60b168216f58565340fa4d638055a89044ee7d45e2bd082a53382289a34700648980e\"\n    },\n    {\n        \"secret_key\": \"36983241a0a8e60ce02a61b3fafab15a7313a5a270d015b9c9ec070dc42deeda\",\n        \"public_key\": \"6647984d42b9a5b3b1afa3b7f8f49d4c2b05e38984e99cea8fd68235d2ae4627\",\n        \"message\": \"cebb9e404451818253c0392a4554ee7323c5d5b8b226775700b806ed5b91337916ea7ecbc3d4103fc65e5372ae7e5f9ba2d8f5aee24ccf6e631ae20c4af9b5f728cdf89e8189def1a5b3d35347aa203525ea1d2e\",\n        \"signed\": \"ee37df8af422f91f85dfe43efe79f62378068ccdbaf3916eecbc3adfed0508bdebaf5ce06b3bc279f78087f0db8db3c6823edfb32c12217830be723d8872b30ccebb9e404451818253c0392a4554ee7323c5d5b8b226775700b806ed5b91337916ea7ecbc3d4103fc65e5372ae7e5f9ba2d8f5aee24ccf6e631ae20c4af9b5f728cdf89e8189def1a5b3d35347aa203525ea1d2e\",\n        \"signature\": \"ee37df8af422f91f85dfe43efe79f62378068ccdbaf3916eecbc3adfed0508bdebaf5ce06b3bc279f78087f0db8db3c6823edfb32c12217830be723d8872b30c\"\n    },\n    {\n        \"secret_key\": \"d06899f93a408dacb41c969718346f1e289bb5ea65e283ff79c705a074517c35\",\n        \"public_key\": \"46bf2a08a076c47d7f11b733f8141c355363ed85d7def26ba6a0ce15ac5f2be8\",\n        \"message\": \"0864c39ac4fda8eb9048597bd40be0401021fd2dd3a3390a8facce984b260a13fa2c7cfc00d192fadf134a0ad5a181ee89eff0c795eaa0fbfe2f3b26115d07168db42ed21a51303b1958e4a42dc065b22ce48f17a6\",\n        \"signed\": \"6f89de92a66bc5f4144339124950bdf588144cb372f6736245351c9476becc59a258f9a933ffff2bef4b46cd1057395225799fd09dede6823db0e325dbc8140d0864c39ac4fda8eb9048597bd40be0401021fd2dd3a3390a8facce984b260a13fa2c7cfc00d192fadf134a0ad5a181ee89eff0c795eaa0fbfe2f3b26115d07168db42ed21a51303b1958e4a42dc065b22ce48f17a6\",\n        \"signature\": \"6f89de92a66bc5f4144339124950bdf588144cb372f6736245351c9476becc59a258f9a933ffff2bef4b46cd1057395225799fd09dede6823db0e325dbc8140d\"\n    },\n    {\n        \"secret_key\": \"eebca7966970ee9f2cc4d74c6f1d8e0ebff7c45aebad349fb9f86df628dfff0e\",\n        \"public_key\": \"89101e0309f767e64ae9c98c4a5d8d2328fb3ef262d082f49b64ca209e1990f6\",\n        \"message\": \"0fac790adb9f59e5cb0ddcb2b667172f2a21034d93bcaddf188606fa9e776db33a8fcc6bd7f5567883fc0de351aa9afaa36d2075b1ba853bada849b8661d5c8154e7b0afea656dd15e01a9c5ba21589b02f8fc5481c2\",\n        \"signed\": \"7d447ee5328c9fe7f11936cc42998754a56cd1d2a6951af4fee7c4a8eb319d4923707c793c55d79067f822d5b16bb5776e38dffabc67237a916a81a63339b0030fac790adb9f59e5cb0ddcb2b667172f2a21034d93bcaddf188606fa9e776db33a8fcc6bd7f5567883fc0de351aa9afaa36d2075b1ba853bada849b8661d5c8154e7b0afea656dd15e01a9c5ba21589b02f8fc5481c2\",\n        \"signature\": \"7d447ee5328c9fe7f11936cc42998754a56cd1d2a6951af4fee7c4a8eb319d4923707c793c55d79067f822d5b16bb5776e38dffabc67237a916a81a63339b003\"\n    },\n    {\n        \"secret_key\": \"3820b6b15939d0afe18c9cb3d9a2a08f167dd458eb6c7e3f1558b0c6db4c6890\",\n        \"public_key\": \"80b85c6559fea8b400e1999cc5bfed507ad7fc294cd9ba0ce2dd2584a91089b0\",\n        \"message\": \"3e5ad92d44b40e8614d8087c9c743de0c0861a07f1f5146d71cac2f3740024e841cc2d46027cf5d261d3ee7c1875b39551017b5fb1468114fc3e098a899cdbd558b39f098e156b6e9801ebcdd65fed56dbfcaf2c8c787b\",\n        \"signed\": \"823ee2c0c8d87faa0ec0141e9ce08b51e57c839792d1fbd97a967207fd415849ebfb5dadb5a1dc2c0a8b7fc63fc354857b8c90c44720e13f45cd01e7aa23140c3e5ad92d44b40e8614d8087c9c743de0c0861a07f1f5146d71cac2f3740024e841cc2d46027cf5d261d3ee7c1875b39551017b5fb1468114fc3e098a899cdbd558b39f098e156b6e9801ebcdd65fed56dbfcaf2c8c787b\",\n        \"signature\": \"823ee2c0c8d87faa0ec0141e9ce08b51e57c839792d1fbd97a967207fd415849ebfb5dadb5a1dc2c0a8b7fc63fc354857b8c90c44720e13f45cd01e7aa23140c\"\n    },\n    {\n        \"secret_key\": \"0d20fa4a37ff30c4dcc3e44ea7ac501137e5807e9781330ac310982cc3d39dbd\",\n        \"public_key\": \"67bb0a01bc8617b491eff1a326c1c70f7d0c5b95a5ad48241aedce1c6f0883cf\",\n        \"message\": \"35e0f4b4a517f9c7aa4514f03e6d65f19b27c62cc069f6bf07dd6378bd6afe2b766560006cbd5730a00919ed11191fb0c8dac56e153fc1cea4bdce5046cccb717759a4083e1c16f740763264cc804de0d0e1a4b5a23067af\",\n        \"signed\": \"deab12ed82ba94b469ca98b66fa20444b4b7881c4f0f853409c9a1504a5b2b6d7860f26ada6bf73459b9cdb573c8017121338efa60f4148086d7a3a8ed59bb0735e0f4b4a517f9c7aa4514f03e6d65f19b27c62cc069f6bf07dd6378bd6afe2b766560006cbd5730a00919ed11191fb0c8dac56e153fc1cea4bdce5046cccb717759a4083e1c16f740763264cc804de0d0e1a4b5a23067af\",\n        \"signature\": \"deab12ed82ba94b469ca98b66fa20444b4b7881c4f0f853409c9a1504a5b2b6d7860f26ada6bf73459b9cdb573c8017121338efa60f4148086d7a3a8ed59bb07\"\n    },\n    {\n        \"secret_key\": \"bee161881d819b370d240d509ba46b06fb828e20310d9f6b309780703e98927b\",\n        \"public_key\": \"10854380de89162bfb9f7835a2716a3a6e0265671b250b389d01c3bcc03736b8\",\n        \"message\": \"5a6fe599b6b09b05c0ba6a622df3a92b3d376d24d04ea85ebe767bc2ec4d14e83e6937dc0b914b4809fdb607906841a6fd1dcdf61aaea8f9bb81b2ccaa32df412989ae53646680a71a211c8440eab0f1aec5e4fc00e6a2c96d\",\n        \"signed\": \"b07d072eb3831fae8a06effa9201797496dce126b8e11fef2fa07f664dc5cf3d4bf9c38a8b3c09fb5f14fa2deb219e7d852fdd27c7ba32d309942f2746dfe4045a6fe599b6b09b05c0ba6a622df3a92b3d376d24d04ea85ebe767bc2ec4d14e83e6937dc0b914b4809fdb607906841a6fd1dcdf61aaea8f9bb81b2ccaa32df412989ae53646680a71a211c8440eab0f1aec5e4fc00e6a2c96d\",\n        \"signature\": \"b07d072eb3831fae8a06effa9201797496dce126b8e11fef2fa07f664dc5cf3d4bf9c38a8b3c09fb5f14fa2deb219e7d852fdd27c7ba32d309942f2746dfe404\"\n    },\n    {\n        \"secret_key\": \"70150e9516164a3d7b7e8b6f255b65cac9f07459b32d11bb94b3d277208abc99\",\n        \"public_key\": \"2328bec8e40351047882e8b43bc1ab085386fa47987e46ea87608814c5da713c\",\n        \"message\": \"77be8eceaab431a13c2a28d0d1556489d8c392fd7ae41157f7caf082cb54e45f08626be0076be844d38fde901a5eab0e8832d69dac22fb8507fb8ec4faf7c88fd26da308461afe385987972b5e760a34a5e18b9a82b4aaa529b7\",\n        \"signed\": \"eda3f5033ea7953a0d583c6457522e84ad78445304d48e577d4d69e8641febe15248d8d90ce0944a8f801d39099bc77494bac4ce2a20b38369c6adfb71e03d0f77be8eceaab431a13c2a28d0d1556489d8c392fd7ae41157f7caf082cb54e45f08626be0076be844d38fde901a5eab0e8832d69dac22fb8507fb8ec4faf7c88fd26da308461afe385987972b5e760a34a5e18b9a82b4aaa529b7\",\n        \"signature\": \"eda3f5033ea7953a0d583c6457522e84ad78445304d48e577d4d69e8641febe15248d8d90ce0944a8f801d39099bc77494bac4ce2a20b38369c6adfb71e03d0f\"\n    },\n    {\n        \"secret_key\": \"3f87fcfdb421422a9c5fb98268313c15128c78844ef9eb3b3713fa77b6718903\",\n        \"public_key\": \"533ec59228374bd03a4699e3a8896b86182fcf8fc3085fdb8f5c4671524d6fe0\",\n        \"message\": \"c00fed2d689468bcbacccd446e8d8f299e2a86925e62e59709afaf4857469ff1e006d00fa3e18a3615f8f06b6ebdff785dde58851d2c239038a0c344dce985bd1fc8deb4779ae5f8932e2f9ed5990b6472dbe4e6fef6917657e0b5\",\n        \"signed\": \"f6519d7edb6134111974033f03b8d89e9c76caec8965a8e17cd45fff19de2615d73eccdb4a6664a8f0e23adf98988e96251bf26eb7a4ccaac1079f0a772f9b05c00fed2d689468bcbacccd446e8d8f299e2a86925e62e59709afaf4857469ff1e006d00fa3e18a3615f8f06b6ebdff785dde58851d2c239038a0c344dce985bd1fc8deb4779ae5f8932e2f9ed5990b6472dbe4e6fef6917657e0b5\",\n        \"signature\": \"f6519d7edb6134111974033f03b8d89e9c76caec8965a8e17cd45fff19de2615d73eccdb4a6664a8f0e23adf98988e96251bf26eb7a4ccaac1079f0a772f9b05\"\n    },\n    {\n        \"secret_key\": \"44ceef044ff998d4abeaaf374eb41d086718b63097b1e35f89634c14897132ea\",\n        \"public_key\": \"e83c86677d03ed3a5e8c95f41f0b325ff4333702f2ff6936f57ff30aa31485c7\",\n        \"message\": \"8d3e2dec4644c7b51633b13e6375ca42ff9138465f43d7800c7313199f67c9cf1b520b1820bd630ecf1c992e2767b38eb5bbc441a4ab8d317db441db35a0fe3abe7a9e4541881c2d7b1a2612306959815d1da41267d9649dd4494ace\",\n        \"signed\": \"554552d6b790d421d06b0a67f8e002ad7a1ed01c06cf00cbeaec2a268bda29f1183f0ceafc625fa5fdb847dc86fae1a20406e459d4a0177cb515220a568e08008d3e2dec4644c7b51633b13e6375ca42ff9138465f43d7800c7313199f67c9cf1b520b1820bd630ecf1c992e2767b38eb5bbc441a4ab8d317db441db35a0fe3abe7a9e4541881c2d7b1a2612306959815d1da41267d9649dd4494ace\",\n        \"signature\": \"554552d6b790d421d06b0a67f8e002ad7a1ed01c06cf00cbeaec2a268bda29f1183f0ceafc625fa5fdb847dc86fae1a20406e459d4a0177cb515220a568e0800\"\n    },\n    {\n        \"secret_key\": \"98ef2a44d4c8476dff05aa78dcf9c6dc086cb2f622a06745d60cbf223faaba66\",\n        \"public_key\": \"42fdb1daa39f0159119beec1bedf6f0394b26a2a29bd1fde081eccdadecc226a\",\n        \"message\": \"c8b5fcfc3c18c7d95957b668e91c731d50c7fcea4f9575bbf784625870e238df546e2cb1a19d2808dd5b230d3871fdec16100ee1fbf9b722fa3744a750a3b396b05f9c21b8c0f61ead57a78c5ecf72b579cfe88a3f404c8acf524f9ab9\",\n        \"signed\": \"ab5e8724a3e6ff76058cfb214d574e04d05574ecdd4ffe8c07c7af396e882687c5d79ef1e62fbb4c5f1bd06b9bd897826edde0d111d918e8ef961ff2a00d7700c8b5fcfc3c18c7d95957b668e91c731d50c7fcea4f9575bbf784625870e238df546e2cb1a19d2808dd5b230d3871fdec16100ee1fbf9b722fa3744a750a3b396b05f9c21b8c0f61ead57a78c5ecf72b579cfe88a3f404c8acf524f9ab9\",\n        \"signature\": \"ab5e8724a3e6ff76058cfb214d574e04d05574ecdd4ffe8c07c7af396e882687c5d79ef1e62fbb4c5f1bd06b9bd897826edde0d111d918e8ef961ff2a00d7700\"\n    },\n    {\n        \"secret_key\": \"93a8c792a239c931917c114824a0174f8bc4ebbf98af8c7e321e0f5bea4015ec\",\n        \"public_key\": \"9b2eaa8a9c2c25ff4f6e13bb12bae5d06fda0eb1105fafae5880ff168740bb74\",\n        \"message\": \"901bf4e041caf16e04f2ffde8d6fe97e93d0900f6bc0fc09a9a0179d137b4b7788e57eb92766a9c634f35adb5c2988af1e86208f461998f59cfec99204b484fbcad3951e7ee4405523705d9739b44307db03f713fda78db421ef3121b3ba\",\n        \"signed\": \"cfe32c4435d911d772dc0727e78d689d0164c5069597cb441b22c1d26236479f1afd7089121b9ab4f61bbb1fae1ab42f7635a92a53784d7170916b703aa5cc09901bf4e041caf16e04f2ffde8d6fe97e93d0900f6bc0fc09a9a0179d137b4b7788e57eb92766a9c634f35adb5c2988af1e86208f461998f59cfec99204b484fbcad3951e7ee4405523705d9739b44307db03f713fda78db421ef3121b3ba\",\n        \"signature\": \"cfe32c4435d911d772dc0727e78d689d0164c5069597cb441b22c1d26236479f1afd7089121b9ab4f61bbb1fae1ab42f7635a92a53784d7170916b703aa5cc09\"\n    },\n    {\n        \"secret_key\": \"7001fa0c4404c28aa5b5fcff30a961f21a22f5b85a9e382e07aea8a8924d0ec1\",\n        \"public_key\": \"daebb63c4d8f40ceba8ec35e3dd946a6b75bc74fcb29ade7b55eee3cc3aea5ca\",\n        \"message\": \"44f48cfb02f08777a57873855f96be4c0291323f2739b275d90757a15472e5750436e0107408fe3026c00625689983f990eba9becbfce403ccd56356ad2741fd21445dfb23d76112e578b3395cf9d960955f1da8f399ca286f21390e25a59a\",\n        \"signed\": \"64eac9ce87460618636b41fd2decc1673bfc48c5f479dfacb51e86686407374b1d10bf65d6d7474214d7770c9e5c7f806c80d53d48b720870e5e78f32e3a7e0544f48cfb02f08777a57873855f96be4c0291323f2739b275d90757a15472e5750436e0107408fe3026c00625689983f990eba9becbfce403ccd56356ad2741fd21445dfb23d76112e578b3395cf9d960955f1da8f399ca286f21390e25a59a\",\n        \"signature\": \"64eac9ce87460618636b41fd2decc1673bfc48c5f479dfacb51e86686407374b1d10bf65d6d7474214d7770c9e5c7f806c80d53d48b720870e5e78f32e3a7e05\"\n    },\n    {\n        \"secret_key\": \"3adce3a3d3fbc977dd4b300a74749f13a3b04a5d73a2cd75a994e3195efebdac\",\n        \"public_key\": \"6ff19b1f18d64851d5c74845c6407f0bf596a52e385e020127e83e54cff5ac19\",\n        \"message\": \"fe6c1a31068e332d12aab37d99406568deaa36bdb277cee55304633bd0a267a850e203bb3fabe5110bcc1ca4316698ab1cf00f0b0f1d97ef2180887f0ec0991e8c1111f0c0e1d2b712433ad2b3071bd66e1d81f7fa47bb4bb31ac0f059bb3cb8\",\n        \"signed\": \"7dda89f85b40539f5ad8c6de4953f7094a715b63dda30ec7cf65a785ceae5fc688707ee00be682cecbe7ee37d8fc39ee6d83c64409681708a0898a183b288a06fe6c1a31068e332d12aab37d99406568deaa36bdb277cee55304633bd0a267a850e203bb3fabe5110bcc1ca4316698ab1cf00f0b0f1d97ef2180887f0ec0991e8c1111f0c0e1d2b712433ad2b3071bd66e1d81f7fa47bb4bb31ac0f059bb3cb8\",\n        \"signature\": \"7dda89f85b40539f5ad8c6de4953f7094a715b63dda30ec7cf65a785ceae5fc688707ee00be682cecbe7ee37d8fc39ee6d83c64409681708a0898a183b288a06\"\n    },\n    {\n        \"secret_key\": \"14803c1f23a47fcdd35e5d146e20ca630cd712c047d5330b652e31857acbc9e8\",\n        \"public_key\": \"36f2d5bd6d8324fa6e9db7f7d854ebe48c0e6299998122e9d44b8adbef54f093\",\n        \"message\": \"555983679d026e5354b4cc055ae1bc14653c7281ec722372f3feb778e841da821b3d0b8ee7a9a9129ea06824be8379fbbdcb0748f423721ccb172a1bafa1d5ae9fc1c51e93d41dd551c3086079b620286c1c40c1223bbcbb76722e92ca21d8410a\",\n        \"signed\": \"07a7de6ce97664b3ea0928e1385c3309be08a47cbf4daa9186a1b948c86fbba39c4efcfcb7a0a3866bc94c6788ffe6be0d4972e56d0c3292d1cc6e25447b9904555983679d026e5354b4cc055ae1bc14653c7281ec722372f3feb778e841da821b3d0b8ee7a9a9129ea06824be8379fbbdcb0748f423721ccb172a1bafa1d5ae9fc1c51e93d41dd551c3086079b620286c1c40c1223bbcbb76722e92ca21d8410a\",\n        \"signature\": \"07a7de6ce97664b3ea0928e1385c3309be08a47cbf4daa9186a1b948c86fbba39c4efcfcb7a0a3866bc94c6788ffe6be0d4972e56d0c3292d1cc6e25447b9904\"\n    },\n    {\n        \"secret_key\": \"1a61154d3472cd96b328ee674beb4fc86763a969fb410494e0678414e31a46a6\",\n        \"public_key\": \"7576d93ac85d0fc61f258c55cf90bd87a635099c0e810ed0b937258d13b42559\",\n        \"message\": \"64c565efbcb8b9528ed47253f3c6a4035db781d6f0976b5e5ba8447d4ed54b04105293ef4c000d8b2e1b5b75e727e5d2a077743b50d183b491764801a2504d16ee6d7d8ac4fe40e6bfc2a8129c7285a5ac691c35e642ed162cf7fbc64516733a23b3\",\n        \"signed\": \"ada1666c9c3b8284b8a21c4f2618ef0808a646f3f10941e470f738e1785e2de9fdd9c8cb526f945c7a8c6994f151b7d066581b1d755307947c62befc8ab7070f64c565efbcb8b9528ed47253f3c6a4035db781d6f0976b5e5ba8447d4ed54b04105293ef4c000d8b2e1b5b75e727e5d2a077743b50d183b491764801a2504d16ee6d7d8ac4fe40e6bfc2a8129c7285a5ac691c35e642ed162cf7fbc64516733a23b3\",\n        \"signature\": \"ada1666c9c3b8284b8a21c4f2618ef0808a646f3f10941e470f738e1785e2de9fdd9c8cb526f945c7a8c6994f151b7d066581b1d755307947c62befc8ab7070f\"\n    },\n    {\n        \"secret_key\": \"f215d34fe2d757cff9cf5c05430994de587987ce45cb0459f61ec6c825c62259\",\n        \"public_key\": \"1ed506485b09a6450be7c9337d9fe87ef99c96f8bd11cd631ca160d0fd73067e\",\n        \"message\": \"fbed2a7df418ec0e8036312ec239fcee6ef97dc8c2df1f2e14adee287808b788a6072143b851d975c8e8a0299df846b19113e38cee83da71ea8e9bd6f57bdcd3557523f4feb616caa595aea01eb0b3d490b99b525ea4fbb9258bc7fbb0deea8f568cb2\",\n        \"signed\": \"cbef65b6f3fd580969fc3340cfae4f7c99df1340cce54626183144ef468871634b0a5c0033534108e1c67c0dc99d3014f01084e98c95e1014b309b1dbb2e6704fbed2a7df418ec0e8036312ec239fcee6ef97dc8c2df1f2e14adee287808b788a6072143b851d975c8e8a0299df846b19113e38cee83da71ea8e9bd6f57bdcd3557523f4feb616caa595aea01eb0b3d490b99b525ea4fbb9258bc7fbb0deea8f568cb2\",\n        \"signature\": \"cbef65b6f3fd580969fc3340cfae4f7c99df1340cce54626183144ef468871634b0a5c0033534108e1c67c0dc99d3014f01084e98c95e1014b309b1dbb2e6704\"\n    },\n    {\n        \"secret_key\": \"8c9f95083075a43fe426d19f1e87719b40043de88eb0ee971f70e10c7694ce4e\",\n        \"public_key\": \"e91d167aa3ebc23e70aab45dabe905e416262f910e2a955dd8619efc74c24e85\",\n        \"message\": \"b69d70e860f55c427ef2a71df36e05bbc43bb2e06463aa5de34419c6a614eea6695335a87526c1226488d842891d0574df343c9c1e17aed6958ecee87474221eb77a599ecb059344c0d052c0002a66e5a6013185af69a01ba5dbc660d36cae235f67fe0e\",\n        \"signed\": \"cac555222dafec76a0b47b9d2c586b3b3b9b3b9c8364beb3cae1e8dd7f1ae9dd74f22b8dd4ad2b290f81351a415a99f030f10778be4cda85d1d353331e70f109b69d70e860f55c427ef2a71df36e05bbc43bb2e06463aa5de34419c6a614eea6695335a87526c1226488d842891d0574df343c9c1e17aed6958ecee87474221eb77a599ecb059344c0d052c0002a66e5a6013185af69a01ba5dbc660d36cae235f67fe0e\",\n        \"signature\": \"cac555222dafec76a0b47b9d2c586b3b3b9b3b9c8364beb3cae1e8dd7f1ae9dd74f22b8dd4ad2b290f81351a415a99f030f10778be4cda85d1d353331e70f109\"\n    },\n    {\n        \"secret_key\": \"d7eb1fba424feed100777eedb4874bf20810ad686b67e31d27ecf610609a33f5\",\n        \"public_key\": \"a25acb11a6c825713a085fa754692886a87d07fb9be1a53eb961728bb66c9060\",\n        \"message\": \"a1d0f81e3d59089cc2b19e07d2fce43db4cf171faa642f3b0bbde77ae3d53af5c02bf8fc12ffb4e57f7c8a015d6c2d178944fae9f7c8fc969d4b77bea51876ae99d59e94ad2456e0ed72c52cf4e5340da17c44dbff86457a519b6fffe269066290d629fe69\",\n        \"signed\": \"2bf719682b07cc5ecc0480f37e9d123ff6f44c26e6958e59f080466f9cd373a16500daf123dc3f1334774bfc9fa84503b16dbf21a815c1ada6ebef4920461702a1d0f81e3d59089cc2b19e07d2fce43db4cf171faa642f3b0bbde77ae3d53af5c02bf8fc12ffb4e57f7c8a015d6c2d178944fae9f7c8fc969d4b77bea51876ae99d59e94ad2456e0ed72c52cf4e5340da17c44dbff86457a519b6fffe269066290d629fe69\",\n        \"signature\": \"2bf719682b07cc5ecc0480f37e9d123ff6f44c26e6958e59f080466f9cd373a16500daf123dc3f1334774bfc9fa84503b16dbf21a815c1ada6ebef4920461702\"\n    },\n    {\n        \"secret_key\": \"4f6aeb35fce14fbcbb9aa8a4f6451bf95b98df047fa8c43f1ead3b404d3f928f\",\n        \"public_key\": \"bf66a9edd09481db8444a176c8ce0578d2934f0cdc9734e86fcaac05bf3330f1\",\n        \"message\": \"2dfbb3f59e19ea17d44a5bde4ad227a1a351dda17af840ee0a75da21a5cca89b6d1c567c333e9cc910e2157e05e86ad5d931145064594c47baeea8663a34649c43e90eb95ca10f7d51597b378a722f1f704adf9f22e9f885b89d1f938006a2efcdb42aaff5e3\",\n        \"signed\": \"6adb07e364f2a455cb05867abc511acd9d658977f0cacafc92828e7b724f6bbf98bf0bfb29f4e5e6c74738d4fdd816d9252407ae4f3afc574c4f00614824e2032dfbb3f59e19ea17d44a5bde4ad227a1a351dda17af840ee0a75da21a5cca89b6d1c567c333e9cc910e2157e05e86ad5d931145064594c47baeea8663a34649c43e90eb95ca10f7d51597b378a722f1f704adf9f22e9f885b89d1f938006a2efcdb42aaff5e3\",\n        \"signature\": \"6adb07e364f2a455cb05867abc511acd9d658977f0cacafc92828e7b724f6bbf98bf0bfb29f4e5e6c74738d4fdd816d9252407ae4f3afc574c4f00614824e203\"\n    },\n    {\n        \"secret_key\": \"ef4a6762b400975204ccc13abb47344015454906850ff14940cbb83aa22414ae\",\n        \"public_key\": \"eaca450996f50cfaf2bd7f9d7fa7087f09ad49664206a80bc2e5bbbb85bb668e\",\n        \"message\": \"a4b63eaed5a64a94f2cad212ce2ae71092fd3ea744f5bd89562b2fc2a6c9e4d7aa27add56264a5a55016610be6c19ff7d4989e9504740853012715a79ece9e12c301b3317c7d9b6730db862a4a1d28058e0f8b5ddd9738c7c62ea572cfe59eae08e2b8b6593b58\",\n        \"signed\": \"02697d44cad862f1daf5708205f450d408525b10c01ffd06cfee80374f3db16fa9a49c19a9844b345f2f9559ea74aab173baa078c54370a5166700c6dafb780aa4b63eaed5a64a94f2cad212ce2ae71092fd3ea744f5bd89562b2fc2a6c9e4d7aa27add56264a5a55016610be6c19ff7d4989e9504740853012715a79ece9e12c301b3317c7d9b6730db862a4a1d28058e0f8b5ddd9738c7c62ea572cfe59eae08e2b8b6593b58\",\n        \"signature\": \"02697d44cad862f1daf5708205f450d408525b10c01ffd06cfee80374f3db16fa9a49c19a9844b345f2f9559ea74aab173baa078c54370a5166700c6dafb780a\"\n    },\n    {\n        \"secret_key\": \"55017e5f61f0c5bafbcde6f849f42a31e5e7a878c1d3f9126fc569fd417ea9f2\",\n        \"public_key\": \"66914f74ed932fc881ff0166683f675a7c28a926fddd6469cdb3f28e6dec42cc\",\n        \"message\": \"2fc84a0998fa6e168a866410bb68105df249a28cfc76604be94fd7dffff2fc1dedd220199465575e8df860190f16aca4084169be16c6ba32eb67042ffd4f230316a26b2624a42f8f90ad57f6916486fa91fd94ed68aded4e632430ef719446979bfaf345409c387f\",\n        \"signed\": \"b1a5e7c49b8fc6b4331e0416ce7e4ed59edd56300b802e0d72abca4a6fcb876c03bf331579124ae0d3fe43f7898bc87e93fc2da3970fc8638957d18c6613c8082fc84a0998fa6e168a866410bb68105df249a28cfc76604be94fd7dffff2fc1dedd220199465575e8df860190f16aca4084169be16c6ba32eb67042ffd4f230316a26b2624a42f8f90ad57f6916486fa91fd94ed68aded4e632430ef719446979bfaf345409c387f\",\n        \"signature\": \"b1a5e7c49b8fc6b4331e0416ce7e4ed59edd56300b802e0d72abca4a6fcb876c03bf331579124ae0d3fe43f7898bc87e93fc2da3970fc8638957d18c6613c808\"\n    },\n    {\n        \"secret_key\": \"0553fba866942341217cf278ac57cb21acd09d9916cc6af0ac46941ea139d545\",\n        \"public_key\": \"840c66e57c2d4f52a4a2796d2a53c5709b96a628c2e063fe6efd47f283ef5e82\",\n        \"message\": \"c1fae6262a0e98a6b1235fcb62283b7f0a097f9d002416d318fefc60c5a1584f900ad0ab26ccfae0d6d84aa9aa2df16d4c117ea2724676cb866d4870a872fc829a7c2a5d21ba83340adb339a34c5184c7f5ead0f077289b33677ed6a1ba34be1994e25763bd1d9faec\",\n        \"signed\": \"bc3364c152ee5c808ac340f49ea2cc404e93517121220cce6f7c30a22500e41bcdb6e820480f8fccdd22ff9ad96da532802f431e94240fb83d4bceaa09b92b0dc1fae6262a0e98a6b1235fcb62283b7f0a097f9d002416d318fefc60c5a1584f900ad0ab26ccfae0d6d84aa9aa2df16d4c117ea2724676cb866d4870a872fc829a7c2a5d21ba83340adb339a34c5184c7f5ead0f077289b33677ed6a1ba34be1994e25763bd1d9faec\",\n        \"signature\": \"bc3364c152ee5c808ac340f49ea2cc404e93517121220cce6f7c30a22500e41bcdb6e820480f8fccdd22ff9ad96da532802f431e94240fb83d4bceaa09b92b0d\"\n    },\n    {\n        \"secret_key\": \"7a5ac602de19f3c21040bcddbff42f6aee6f95c1b093868f48e50482dbf4f9c7\",\n        \"public_key\": \"fbb6c7531cda21e7d17ea903c4d14be6c68b4ca803a16bd87120f5aaf7dce1d4\",\n        \"message\": \"bd1685419279eb81e4cf3c909031f0f09c5ffae7e2ce6ba9d96c2bce87b8ba0dd763231001e532c7ddd62103abf701288e19dd8f5302e8f5d31b64cc339bd8b7a95550c8a116fd486948772bd5af8dfd46001c59767b0d6bdce383a7078992d1022fbcaf90710687b9aa\",\n        \"signed\": \"84101dd4b5e8ca3ed98c1e8a06e11d7e424b0d12ca714ee7374b64c29d51a2021cc77ac75389d9b0a646a447623d7d04d1241866b0ca6edd1b7ac015666b700dbd1685419279eb81e4cf3c909031f0f09c5ffae7e2ce6ba9d96c2bce87b8ba0dd763231001e532c7ddd62103abf701288e19dd8f5302e8f5d31b64cc339bd8b7a95550c8a116fd486948772bd5af8dfd46001c59767b0d6bdce383a7078992d1022fbcaf90710687b9aa\",\n        \"signature\": \"84101dd4b5e8ca3ed98c1e8a06e11d7e424b0d12ca714ee7374b64c29d51a2021cc77ac75389d9b0a646a447623d7d04d1241866b0ca6edd1b7ac015666b700d\"\n    },\n    {\n        \"secret_key\": \"50414cf549bcc55b5b6b75ea3782b2ea7c087b6a0106175e469ca2cc764aeb01\",\n        \"public_key\": \"d0f30c12e997f96e7aeecd1bff6a012ec388ebf8f3f4af664804d1638e4c346a\",\n        \"message\": \"75ad77e8c54b0b05fb2d162e7cadb8a7528081b863f76a441b374469413e5714edf54f800496af0157c17e425583414d4361f2134171c0b87c22ce6820a4850ab49d99a9badce9e36110e7f3060118b3590f82b43771e9fbb081afe62227e024d98de6cdec028d7c49490d\",\n        \"signed\": \"b309800160de43a63a89a0acb8a6050059589b3eaecac20b256fece438042f69415d8a56883ee3836d3134a7fc1de64fa8c8cecc3ce27589f606058820857a0c75ad77e8c54b0b05fb2d162e7cadb8a7528081b863f76a441b374469413e5714edf54f800496af0157c17e425583414d4361f2134171c0b87c22ce6820a4850ab49d99a9badce9e36110e7f3060118b3590f82b43771e9fbb081afe62227e024d98de6cdec028d7c49490d\",\n        \"signature\": \"b309800160de43a63a89a0acb8a6050059589b3eaecac20b256fece438042f69415d8a56883ee3836d3134a7fc1de64fa8c8cecc3ce27589f606058820857a0c\"\n    },\n    {\n        \"secret_key\": \"93cb00d8fe9c9777a683631f39ba0f48761482cf1c366bd863cf715101532555\",\n        \"public_key\": \"87e94a1ea5258d61180cb828590ff1418a87d01e702686ba8abc2692c8dc3c91\",\n        \"message\": \"88d8538d31867813d88fef7228d49a7e950d738396f116dda1025f7913547c5d1dc5677a6de4b4a5880507b361780b61b43f7795263db22ff341645f2f5914fd6088c2811211ed4756ac019a6035d66e3170c1d82bfaa30596b396b3260cc1d10d413dd47ebe6daa0c30dc42\",\n        \"signed\": \"09824fa2dfbc4d6ef76a9e4145961116769130553b3edffa50d04f39b8b79facbd237acf71354a53a6e5fee754e823b0b290f9619320a13d561269a221639f0388d8538d31867813d88fef7228d49a7e950d738396f116dda1025f7913547c5d1dc5677a6de4b4a5880507b361780b61b43f7795263db22ff341645f2f5914fd6088c2811211ed4756ac019a6035d66e3170c1d82bfaa30596b396b3260cc1d10d413dd47ebe6daa0c30dc42\",\n        \"signature\": \"09824fa2dfbc4d6ef76a9e4145961116769130553b3edffa50d04f39b8b79facbd237acf71354a53a6e5fee754e823b0b290f9619320a13d561269a221639f03\"\n    },\n    {\n        \"secret_key\": \"2b4cae380e95ce694c26ac7957447347f98e31b4bf02d744e131529071e2301d\",\n        \"public_key\": \"e6fc705a79c98e115b4e28d3aa1506b74ee74276c5fc1109a7f4d89c6fafb889\",\n        \"message\": \"e0b8250e27b7c0291dbc47a6da6f1268987afdf0a1e90be69bcbc4370865217830d5208693be7b7045099a22ea27f952eb3f79a9a0f1b5a87b19367790788d34c219c2e2a6b834020fb4fd149dc56b544fddbb42071a162fc7cb33c146cac05a31b183e9daadc616f3af449b17\",\n        \"signed\": \"555e45656ba9cfbf5155d0e52576e5197abbbc9dd233993eec2a1ee7f6a86409c0b71b0a661978ff5e0acdc9463dc449906f474f8e79bb86168bf70741e34b02e0b8250e27b7c0291dbc47a6da6f1268987afdf0a1e90be69bcbc4370865217830d5208693be7b7045099a22ea27f952eb3f79a9a0f1b5a87b19367790788d34c219c2e2a6b834020fb4fd149dc56b544fddbb42071a162fc7cb33c146cac05a31b183e9daadc616f3af449b17\",\n        \"signature\": \"555e45656ba9cfbf5155d0e52576e5197abbbc9dd233993eec2a1ee7f6a86409c0b71b0a661978ff5e0acdc9463dc449906f474f8e79bb86168bf70741e34b02\"\n    },\n    {\n        \"secret_key\": \"b56491e54999bb5a1715ebfa2feb14a545a3a43c2fdfd4be0c95fc11819ad695\",\n        \"public_key\": \"cd42bf414f9bfc72ec069882a800557cdf31bc3464fb102c310e6dbd3ae20863\",\n        \"message\": \"eb4418ba30683ec7959bdb1ec7b263f83e81f054ddcdbe0a6738ca7763e246935bac419026c22bfbdd1236336cc16107c53513e3ddf34e120846962c3bdd54f5ad5749597208f15a8bb56667baa895f08340db89b85c435e770931928d8abc99262f839aedd9be2aa138c9259adf\",\n        \"signed\": \"e3be3e71a89852df3cffd72d68207869dd3eceb49b1f029493eccbb932444ebe8c8c6db5f0a5a67e2194408df9841913a5ac1a606896419a668f4f47c56c2b08eb4418ba30683ec7959bdb1ec7b263f83e81f054ddcdbe0a6738ca7763e246935bac419026c22bfbdd1236336cc16107c53513e3ddf34e120846962c3bdd54f5ad5749597208f15a8bb56667baa895f08340db89b85c435e770931928d8abc99262f839aedd9be2aa138c9259adf\",\n        \"signature\": \"e3be3e71a89852df3cffd72d68207869dd3eceb49b1f029493eccbb932444ebe8c8c6db5f0a5a67e2194408df9841913a5ac1a606896419a668f4f47c56c2b08\"\n    },\n    {\n        \"secret_key\": \"6579c247dd2cd02ba2f7d7a950a330752681e92c0dc62984bbea279ea521c381\",\n        \"public_key\": \"0b087bea1a1b3d15805cb604f4bb8d68edde274faf521fe6df50c55f8ad4a70d\",\n        \"message\": \"df7c552ffc89374b9571a6024a8d0471d7eb6be8dfca6f4166b581b65479015a0568129074cc04d6342c758ca18f7987dec536b7033d5f9681504340e20986f027b8cf1f263be76db3525d173422950ea8dceddc585640918aa9d25ca89cba701c2020153873f46108c772cb388d55\",\n        \"signed\": \"eccaf801ae0a912e21c6b83a5f0e4e88d4b2713459ff93449fc0b21a9f416050113cbae4e814d20c0a798f76d2f9d326ed83959ea02abdc1ab350a467123f709df7c552ffc89374b9571a6024a8d0471d7eb6be8dfca6f4166b581b65479015a0568129074cc04d6342c758ca18f7987dec536b7033d5f9681504340e20986f027b8cf1f263be76db3525d173422950ea8dceddc585640918aa9d25ca89cba701c2020153873f46108c772cb388d55\",\n        \"signature\": \"eccaf801ae0a912e21c6b83a5f0e4e88d4b2713459ff93449fc0b21a9f416050113cbae4e814d20c0a798f76d2f9d326ed83959ea02abdc1ab350a467123f709\"\n    },\n    {\n        \"secret_key\": \"18fba60c5026f3c9dd7aedc04209d5260361de400e190aeb60169e05a3367c9f\",\n        \"public_key\": \"dfff347f3dd255530bf7fb34d02ba486d112bb46e950e2ef80e517014cc95734\",\n        \"message\": \"34f08a804d7829cc3914f000ce1a3288acce2149c8a02086b9f67afccd83a178b0bcfd4970c056997da7dc3d47562f16663cedc52f82d710850cf4050379efdac23bee17c330a383ad137f788473b2b0723603b6deb1fdbf6c523fc948a0ccc4ff100fb946d874c1f990436ae8c4f3b2\",\n        \"signed\": \"4bc011e40f0f59c618f6bbe230b6f7bc2f50e3617c7faab7f4c21cb84f77eba994cb7c2a1bf10b01bb20084497fdf0a6ab5d9bcd22c4a2c5a78f79926825940f34f08a804d7829cc3914f000ce1a3288acce2149c8a02086b9f67afccd83a178b0bcfd4970c056997da7dc3d47562f16663cedc52f82d710850cf4050379efdac23bee17c330a383ad137f788473b2b0723603b6deb1fdbf6c523fc948a0ccc4ff100fb946d874c1f990436ae8c4f3b2\",\n        \"signature\": \"4bc011e40f0f59c618f6bbe230b6f7bc2f50e3617c7faab7f4c21cb84f77eba994cb7c2a1bf10b01bb20084497fdf0a6ab5d9bcd22c4a2c5a78f79926825940f\"\n    },\n    {\n        \"secret_key\": \"073cc15b0536285933b2be39253cf4fd696b81610f5dd3adac2e9cbf338ef2f6\",\n        \"public_key\": \"00b551d371544375dac5c4e96cd1f0215207e8e166a1fe49d5b0a51ac18443ec\",\n        \"message\": \"c285362bc8ef628f7aedf654231ee51acdf2cf69a886b942bb9bfed8155105d9209ded2af24f169ad5fcd451370f5827a85111c7a52e032c5038617c0c0170e2a6c231dc401d12062edb186036114e38793b79089077581b9783f40007103ef17472491c00e7138aecc5084d3c85010470\",\n        \"signed\": \"3aa52a83062a8f28a5d6b7607f484b66cc374896b766123126333c579581316c742806f627b5bc55cad705cc1d4782b044080c8ac840f38c0c50d35e345c7803c285362bc8ef628f7aedf654231ee51acdf2cf69a886b942bb9bfed8155105d9209ded2af24f169ad5fcd451370f5827a85111c7a52e032c5038617c0c0170e2a6c231dc401d12062edb186036114e38793b79089077581b9783f40007103ef17472491c00e7138aecc5084d3c85010470\",\n        \"signature\": \"3aa52a83062a8f28a5d6b7607f484b66cc374896b766123126333c579581316c742806f627b5bc55cad705cc1d4782b044080c8ac840f38c0c50d35e345c7803\"\n    },\n    {\n        \"secret_key\": \"fd894a1e8232203b289505d5c68c68791ffc0e54f2a87530fbba5b3a3f2caf00\",\n        \"public_key\": \"e95ab565945c7ae5d533df5d0cccc7e9abbc838e20a0b61c930f5d41d81a6fe7\",\n        \"message\": \"2669624a94f2c44a05b7dc3ebf93e58a4bf3a01c273657e7e7878976f6b6ea737fa3f22cc8365b8b220c007d5b642726a408fe2fab69ebb3bd072b349f4dc3377ee7cc752934254215d23989bd3cd02ce999adec9784993f4c19940815f39c9e229247f5205c36cba44e714266369289b4a7\",\n        \"signed\": \"f51102219e8804be713e556df4e4afa2f8866fe86541a1c2a0934d24c3c9beb280a70dd8d527fe8b7e0b948214d5f2f9638619914b72d55dc198b0229a8487082669624a94f2c44a05b7dc3ebf93e58a4bf3a01c273657e7e7878976f6b6ea737fa3f22cc8365b8b220c007d5b642726a408fe2fab69ebb3bd072b349f4dc3377ee7cc752934254215d23989bd3cd02ce999adec9784993f4c19940815f39c9e229247f5205c36cba44e714266369289b4a7\",\n        \"signature\": \"f51102219e8804be713e556df4e4afa2f8866fe86541a1c2a0934d24c3c9beb280a70dd8d527fe8b7e0b948214d5f2f9638619914b72d55dc198b0229a848708\"\n    },\n    {\n        \"secret_key\": \"18ef464e28f87ffcfa4d3a9c09a22910951b8c719fdacdb56de62c4b406df00c\",\n        \"public_key\": \"c5064c9d43ee2da75b06bb09c77267dbd0d39128f1cdc6bfa451a03e93af4a70\",\n        \"message\": \"9c825707d9358365ab9d38f7e728d628aa722a4f1a20a38e47c999fff8fc32417fbe072f96eb6a0e11e4da9b6de9615445280e93c77a3634d3d2c6879856c248f9800f60a0d38dc1cea8b7f31f286cb0374827b4c6ba144a6694f2b908ead68d18340124cb59cf1701863bd4f3efc709f3627a\",\n        \"signed\": \"d1e7f16e8e597d428adea65591d551b54b667aff2020c464f7f4e53c4773f70433249a3c71b4d11c89c3faa892809227b9f29ef4f7f5d020d4674d40213594059c825707d9358365ab9d38f7e728d628aa722a4f1a20a38e47c999fff8fc32417fbe072f96eb6a0e11e4da9b6de9615445280e93c77a3634d3d2c6879856c248f9800f60a0d38dc1cea8b7f31f286cb0374827b4c6ba144a6694f2b908ead68d18340124cb59cf1701863bd4f3efc709f3627a\",\n        \"signature\": \"d1e7f16e8e597d428adea65591d551b54b667aff2020c464f7f4e53c4773f70433249a3c71b4d11c89c3faa892809227b9f29ef4f7f5d020d4674d4021359405\"\n    },\n    {\n        \"secret_key\": \"c911bdf2f9e7cc5fff35c96e15cc12eafd05ab0db31f649f7408acd0cada76e0\",\n        \"public_key\": \"de44696cd6bd2cbe9b11a0ef18b88164801a969d5e06ed453eb4008cce9a5725\",\n        \"message\": \"76c471241d17192984b00362696e4d9d4d2b7f839c2064117e50a1598f3a1172b16c55e5396866084752024f3a7eb68bb3ffdb80979a0af6d0f6af26b6f0bc0c0384433bcfd44c75eb654a8a8225cb9c4a7fb3c824c3af6125fd46db287e70492d154632cb8f62432659d958d6281d04a54f5f5f\",\n        \"signed\": \"d584b5da371ae4f5c9859b25f70dc56c1b7b4e02d1ae6636283b1b7b11217afdcdf65d1b49ca2c8ef17966e9bc65f10c310b77bb5df7aff5ec1b379a2ce55d0d76c471241d17192984b00362696e4d9d4d2b7f839c2064117e50a1598f3a1172b16c55e5396866084752024f3a7eb68bb3ffdb80979a0af6d0f6af26b6f0bc0c0384433bcfd44c75eb654a8a8225cb9c4a7fb3c824c3af6125fd46db287e70492d154632cb8f62432659d958d6281d04a54f5f5f\",\n        \"signature\": \"d584b5da371ae4f5c9859b25f70dc56c1b7b4e02d1ae6636283b1b7b11217afdcdf65d1b49ca2c8ef17966e9bc65f10c310b77bb5df7aff5ec1b379a2ce55d0d\"\n    },\n    {\n        \"secret_key\": \"d3703299c41db36d77dd3a49541f3fb21d0b2bad1f6e074affd96f1c40d0f927\",\n        \"public_key\": \"862c5ef616a5f066fd87758a56ab45056fea4bd33f008be24f7b540e095e148e\",\n        \"message\": \"ac92edbe22257bb06d94aa950e62d18ca2ac0a8fc106000d2231f8a13b8d7a209ccd8cc49a6cd68a7f36c02fb8f728d15595167f0ba8cfe95c8a1e435f327513014ac428b75d4f72e7c834dd70e1a448f1847d3498475f74e3d9334dc7dcc4fed72bf6c7fe3b1d4f53d429616f1df44f19733158b6\",\n        \"signed\": \"df28277121eac44630084cce75917ae9f6bec65af5572dc30719bde661cf696b85b8672dd4983cab30bd05cc3a119d7db9babd522d7b3a6bcf3886ecd25e080fac92edbe22257bb06d94aa950e62d18ca2ac0a8fc106000d2231f8a13b8d7a209ccd8cc49a6cd68a7f36c02fb8f728d15595167f0ba8cfe95c8a1e435f327513014ac428b75d4f72e7c834dd70e1a448f1847d3498475f74e3d9334dc7dcc4fed72bf6c7fe3b1d4f53d429616f1df44f19733158b6\",\n        \"signature\": \"df28277121eac44630084cce75917ae9f6bec65af5572dc30719bde661cf696b85b8672dd4983cab30bd05cc3a119d7db9babd522d7b3a6bcf3886ecd25e080f\"\n    },\n    {\n        \"secret_key\": \"d411cd33576d0efe9ec413ccdaabd4fcbafec01a3af4b3cbe34f8b05ef8b59ba\",\n        \"public_key\": \"e870344df98dd3a8702c4519bf9e8b35a9d189e746f7203dbbf9bbfab22d6f63\",\n        \"message\": \"11d2c2a7f0190988126696431b4bbcd90ab7b56a32da6404ae446aa762a4ddc66094971538eeb85bde0470a510be0d6d85780ee730a9854138728ae6816162268da852858eaed4ec74c7ac62e6e7096dc002df0bdf5fa40da565b41d181a3f0ad0c5e0b976743e315d9db8ed4160abe69c13a2b3f09a\",\n        \"signed\": \"83460d15461d6717710bafd6a47a1eaa900a80f2bf8b8aae2468773614ee84bd628c9717476368ef3640cf760acac83ad60232a76963b7d52588b11dc004d70d11d2c2a7f0190988126696431b4bbcd90ab7b56a32da6404ae446aa762a4ddc66094971538eeb85bde0470a510be0d6d85780ee730a9854138728ae6816162268da852858eaed4ec74c7ac62e6e7096dc002df0bdf5fa40da565b41d181a3f0ad0c5e0b976743e315d9db8ed4160abe69c13a2b3f09a\",\n        \"signature\": \"83460d15461d6717710bafd6a47a1eaa900a80f2bf8b8aae2468773614ee84bd628c9717476368ef3640cf760acac83ad60232a76963b7d52588b11dc004d70d\"\n    },\n    {\n        \"secret_key\": \"e10a2f1380c3e4720e8a8707a9bcb25a0f58270d7059cd7626c7153447edfb87\",\n        \"public_key\": \"a3c717acab366a40b51187bbf35b2d15e97cfeacd7349c06ef1c91ac93e90656\",\n        \"message\": \"135212a9cf00d0a05220be7323bfa4a5ba7fc5465514007702121a9c92e46bd473062f00841af83cb7bc4b2cd58dc4d5b151244cc8293e795796835ed36822c6e09893ec991b38ada4b21a06e691afa887db4e9d7b1d2afc65ba8d2f5e6926ff53d2d44d55fa095f3fad62545c714f0f3f59e4bfe91af8\",\n        \"signed\": \"094bf6f953ca0eb77df45129b7bf10d192cf6ddeae94ad6202b8eacfbec119e5291578fe64a084ae600fe07efdb8a782610dbdb0b49eb5f2a46c432355552f01135212a9cf00d0a05220be7323bfa4a5ba7fc5465514007702121a9c92e46bd473062f00841af83cb7bc4b2cd58dc4d5b151244cc8293e795796835ed36822c6e09893ec991b38ada4b21a06e691afa887db4e9d7b1d2afc65ba8d2f5e6926ff53d2d44d55fa095f3fad62545c714f0f3f59e4bfe91af8\",\n        \"signature\": \"094bf6f953ca0eb77df45129b7bf10d192cf6ddeae94ad6202b8eacfbec119e5291578fe64a084ae600fe07efdb8a782610dbdb0b49eb5f2a46c432355552f01\"\n    },\n    {\n        \"secret_key\": \"b2e697b3d3efec976ef3369530c792717bdbb428d9ed0c11ec0ea9b2e5f39f82\",\n        \"public_key\": \"c4d2e4b3c236d6c9b8c74fa384612c4710d83aa16ad7ef01fbb7421d4fb3f0f6\",\n        \"message\": \"7b436232ac2111a84059510c48362588fcb7383426be5e6f62f372e4f7cca83c81c2357f9b54f4a15291065b6d41aad1ea93cffa776b9acaa58afe2b51644b97af9a3e53f84e40aa6d86051e6914cd039d4170a9a526dd69955ff507c33f74e2176591fb0b3cd7f00ee418f2c258a9981cccee72f01c8430\",\n        \"signed\": \"5047fa38197b8328e78dd8a10e966afb7bd3d43608280f1c257d25ca43bc1c06e94a5747ab6215ece54cdeff8c56567d70d2f91f9ec8c260aa1080a6ab5a7a027b436232ac2111a84059510c48362588fcb7383426be5e6f62f372e4f7cca83c81c2357f9b54f4a15291065b6d41aad1ea93cffa776b9acaa58afe2b51644b97af9a3e53f84e40aa6d86051e6914cd039d4170a9a526dd69955ff507c33f74e2176591fb0b3cd7f00ee418f2c258a9981cccee72f01c8430\",\n        \"signature\": \"5047fa38197b8328e78dd8a10e966afb7bd3d43608280f1c257d25ca43bc1c06e94a5747ab6215ece54cdeff8c56567d70d2f91f9ec8c260aa1080a6ab5a7a02\"\n    },\n    {\n        \"secret_key\": \"19a679a7a905a1e2b3038e6e418b3da97c3089c7cd351ea07bc8d1af64eacc46\",\n        \"public_key\": \"19f08361f469b4ae1e0ceb94f47a7de7317410a92dd013b16ae0d0532fa4b3ef\",\n        \"message\": \"980c7b4d2939061ac7b9ba441117a19485661781a4083067c55acf93026c082a93cc124f095e1b4f2c3f6c135412a5096228e8a071e8b4b668ba9d9644ea9f4dabfc54a9856c3e965e6363395ab709037dda229baf927cd01f9af5e039afc42f3cec634f5d832d2ab7c7cad3ad7b8cf27ebdac698431ad8236\",\n        \"signed\": \"4347b7b4f7c3c4dd315b8384a0b0caeed84bdabe24b2915f12512dfd04770fc996a1bfb729afef9edd611447081a5330617eaea1c1dab1bf13cea8997204910c980c7b4d2939061ac7b9ba441117a19485661781a4083067c55acf93026c082a93cc124f095e1b4f2c3f6c135412a5096228e8a071e8b4b668ba9d9644ea9f4dabfc54a9856c3e965e6363395ab709037dda229baf927cd01f9af5e039afc42f3cec634f5d832d2ab7c7cad3ad7b8cf27ebdac698431ad8236\",\n        \"signature\": \"4347b7b4f7c3c4dd315b8384a0b0caeed84bdabe24b2915f12512dfd04770fc996a1bfb729afef9edd611447081a5330617eaea1c1dab1bf13cea8997204910c\"\n    },\n    {\n        \"secret_key\": \"f03b8363ee5b0eef7018a49bc02adf731da54ee50a7f03b88a29a2082b189c43\",\n        \"public_key\": \"31287ef5a2e64104ab7790b312f35c7ad4af6beb0d7ceb8a58f36a54ce272c3e\",\n        \"message\": \"24191b5464b35ac7bcf4a375f033efba8943b09b9ff0fc403ca7aae702a3cbf396c5131bc008132cf5f12910d586dc1db9c084574a96babee95642f922371c0382ec0402a26feb142e4146bbd3360c2b36834fe45af5e2868d4d56fdd504cebf0c2d7f5791b4429417c8b65a98e0b15c466c137f410524fce737\",\n        \"signed\": \"e8fa967e6afadf6a877d87e5f5c52bb634b75a7804199a2bc9d027b63a35654d9ddd06830455641dbfb49edce42e20e7d4104a071c2cbbec23018c297ced990824191b5464b35ac7bcf4a375f033efba8943b09b9ff0fc403ca7aae702a3cbf396c5131bc008132cf5f12910d586dc1db9c084574a96babee95642f922371c0382ec0402a26feb142e4146bbd3360c2b36834fe45af5e2868d4d56fdd504cebf0c2d7f5791b4429417c8b65a98e0b15c466c137f410524fce737\",\n        \"signature\": \"e8fa967e6afadf6a877d87e5f5c52bb634b75a7804199a2bc9d027b63a35654d9ddd06830455641dbfb49edce42e20e7d4104a071c2cbbec23018c297ced9908\"\n    },\n    {\n        \"secret_key\": \"11086b0d11e415ab1ce02aaf8f0621b54430f6fb135c74f40d38e8c64737064b\",\n        \"public_key\": \"7166dfbc691eb8c201114ba0d1a2c7b87f7a1fd8d0b36058b0d7dcabe1ae30da\",\n        \"message\": \"4b5b2936c5e360a38455503721078f8adb404a7ee7ecc14801dc87a67a152b769569fbeac0afa25a2070a1686b900ac1633d499808cdb2e81ce3916d5a3c04d19c5bb2699a662b8aba4af94d390bac7ccc8ec910ed2acdf86ebb71adb601877885eef3c91662fc30738e352cc74353ccf8d8edeefacc042c10a0e5\",\n        \"signed\": \"e907459d5adcd0d0c36418581f19d0eebda7138ebd9faa0b262201f458c856310bb77f4c7de922495dcfe8b248eda2ad0df6a73f47bbfb894baa7d88698758024b5b2936c5e360a38455503721078f8adb404a7ee7ecc14801dc87a67a152b769569fbeac0afa25a2070a1686b900ac1633d499808cdb2e81ce3916d5a3c04d19c5bb2699a662b8aba4af94d390bac7ccc8ec910ed2acdf86ebb71adb601877885eef3c91662fc30738e352cc74353ccf8d8edeefacc042c10a0e5\",\n        \"signature\": \"e907459d5adcd0d0c36418581f19d0eebda7138ebd9faa0b262201f458c856310bb77f4c7de922495dcfe8b248eda2ad0df6a73f47bbfb894baa7d8869875802\"\n    },\n    {\n        \"secret_key\": \"efce7667a8ef91228caed14eb477a345e5e8239234080848760ed0970713fa86\",\n        \"public_key\": \"9193055a84df1eacca28ce2a08c2a07a50f04c024ecf1fe4a47d2efbaf63ed58\",\n        \"message\": \"aa1bc80d7bcc1d94a23a57cedf5027482477dc46b86890bc0e5ac29ae6c91bbc43130348797305f75543580a8a069b348a7bd8fc3e015230b7c1940c7f80a82b12900910dbcf0630da03f081d44c7f955d4a1172f56ecc7c5ac646696bffdf4eb6d88bdd9cc3843528b72583abb3bad02e56ef7646eed5139551cdeb\",\n        \"signed\": \"e5a63124db1696b64140b6e9612fa9587b3eef710109398d44ba0ca63c0ebad06f0a6c8994ea34b3a2af91a89bf41ae614d7727d716fd42f8b92e1ac64fdbf03aa1bc80d7bcc1d94a23a57cedf5027482477dc46b86890bc0e5ac29ae6c91bbc43130348797305f75543580a8a069b348a7bd8fc3e015230b7c1940c7f80a82b12900910dbcf0630da03f081d44c7f955d4a1172f56ecc7c5ac646696bffdf4eb6d88bdd9cc3843528b72583abb3bad02e56ef7646eed5139551cdeb\",\n        \"signature\": \"e5a63124db1696b64140b6e9612fa9587b3eef710109398d44ba0ca63c0ebad06f0a6c8994ea34b3a2af91a89bf41ae614d7727d716fd42f8b92e1ac64fdbf03\"\n    },\n    {\n        \"secret_key\": \"88fccaa96ad884d1165be71dd0c4f5f8f4421c60fbfa498bfee9b967462443bd\",\n        \"public_key\": \"c75cb0e0237b45b8656eea9f3d1a9d4acd01a103aa269bb24fd54122fd81f2ac\",\n        \"message\": \"9d0eac98556bfa8672c35705d1d61ac4d0fca19dc0d993015877857d27fd80f74acace666c563485d81e53603a6aef40875fa551cc105f2cc10b39694679cdf4a6b073bc88645fc51a36da179d3d1e3c7722454c5e73577c61aa7d148c4ba50ea46c56a1c3b3b3c470f93100494e08bc5514ac763a85483c42c7cdc27c\",\n        \"signed\": \"27d3a197cc9994212063bce8d799e77b6853b7355ebe369bcf1889a418a82caa3a7987a663f621defe86b3ac4ad44faeed16c9116ace28fccf915557fa7799039d0eac98556bfa8672c35705d1d61ac4d0fca19dc0d993015877857d27fd80f74acace666c563485d81e53603a6aef40875fa551cc105f2cc10b39694679cdf4a6b073bc88645fc51a36da179d3d1e3c7722454c5e73577c61aa7d148c4ba50ea46c56a1c3b3b3c470f93100494e08bc5514ac763a85483c42c7cdc27c\",\n        \"signature\": \"27d3a197cc9994212063bce8d799e77b6853b7355ebe369bcf1889a418a82caa3a7987a663f621defe86b3ac4ad44faeed16c9116ace28fccf915557fa779903\"\n    },\n    {\n        \"secret_key\": \"670b30626fe367d8b45f43733d6f25b37eccbcb551963f0ac8b666b48041c72d\",\n        \"public_key\": \"65aa4c6d4ba0ab34bc75b39f09527ca6f2425f52415cdffdf2dff273f8ea612c\",\n        \"message\": \"d00bcca7e184d10e1f1fe420b50639e1d5deba52a751236e68c59bb4bff9802f5fc165ed42fd6d534670a7c6fb60e4307d947915a248bf2f93465c2cb44d8f453d2c015afbc8ed58818ea51726a25177930e9ea192ef4514f4bb0eb4e0f5d4ae3c46e357c81187f7ed174733fff959c3f9fae6486cfa1356a95699211de5\",\n        \"signed\": \"1b6b4377d2b98e0f9d24ae8dfe30e2396e2004380d3431488e5843cf8d2d7a0070ab21f8a3b51ce84d2f4ba209f739f922bebf798096693f5622873d79ae6f04d00bcca7e184d10e1f1fe420b50639e1d5deba52a751236e68c59bb4bff9802f5fc165ed42fd6d534670a7c6fb60e4307d947915a248bf2f93465c2cb44d8f453d2c015afbc8ed58818ea51726a25177930e9ea192ef4514f4bb0eb4e0f5d4ae3c46e357c81187f7ed174733fff959c3f9fae6486cfa1356a95699211de5\",\n        \"signature\": \"1b6b4377d2b98e0f9d24ae8dfe30e2396e2004380d3431488e5843cf8d2d7a0070ab21f8a3b51ce84d2f4ba209f739f922bebf798096693f5622873d79ae6f04\"\n    },\n    {\n        \"secret_key\": \"813c4daed67a190d68bb635d73af6da74f32fdf7c48cca6e59262946b8e8c71f\",\n        \"public_key\": \"a2095457d7697020e2b884d95a96578c2a900a7666ac0dc7bd38f1931d7945d8\",\n        \"message\": \"ce54cb0450e689a0dbef785308b3177472fcd6d38203e58a0590b31fa253f9ea590be5368a922de88b63450102684443fb8189e601282003323b89c81e92eaef2b5ddc4a55c53fa3cfad4160248b3c286ff80d31d161b7b8dee713552b56f1507fb72eadfa89054e9d1600ac874c4b0a961004eb6d0d4bfd2ecb9c734f00ba\",\n        \"signed\": \"b446574ff6a4bd2b572e487c4ab443ca641075168aa4e1092f71f30bdb068ce46a395efee1ee660b9fac26d54109722c15cdb791bfb87fff63c6596ad4f2270cce54cb0450e689a0dbef785308b3177472fcd6d38203e58a0590b31fa253f9ea590be5368a922de88b63450102684443fb8189e601282003323b89c81e92eaef2b5ddc4a55c53fa3cfad4160248b3c286ff80d31d161b7b8dee713552b56f1507fb72eadfa89054e9d1600ac874c4b0a961004eb6d0d4bfd2ecb9c734f00ba\",\n        \"signature\": \"b446574ff6a4bd2b572e487c4ab443ca641075168aa4e1092f71f30bdb068ce46a395efee1ee660b9fac26d54109722c15cdb791bfb87fff63c6596ad4f2270c\"\n    },\n    {\n        \"secret_key\": \"8400962bb769f63868cae5a3fec8db6a9c8d3f1c846c8dceeb642b6946efa8e3\",\n        \"public_key\": \"98be21001993a7eb1a1277ff74c15504183d25fdfcc05f0d4dea892f6e301890\",\n        \"message\": \"f7e67d982a2ff93ecda4087152b4864c943b1ba7021f5407043ccb4253d348c27b9283acb26c194fd1cbb79e6afc32ff686b55b0b3617218dcf39316b4b66b3c8c0d67267a86db8adf3750801bcf9327d4c25441b96197832b4cde0eac3ff22892a2f0bc17c2c213c02377a333e308ed271658049383b7e2e57b6b8b125512e0\",\n        \"signed\": \"0ad71b0025f3d9a50db338414d6d670e7799b7270a8444f6ae7f12ae7eb71bd03ffd3c4f36631f69fdcc4061468ff582ede495243ef1361a3b3295fa813ba205f7e67d982a2ff93ecda4087152b4864c943b1ba7021f5407043ccb4253d348c27b9283acb26c194fd1cbb79e6afc32ff686b55b0b3617218dcf39316b4b66b3c8c0d67267a86db8adf3750801bcf9327d4c25441b96197832b4cde0eac3ff22892a2f0bc17c2c213c02377a333e308ed271658049383b7e2e57b6b8b125512e0\",\n        \"signature\": \"0ad71b0025f3d9a50db338414d6d670e7799b7270a8444f6ae7f12ae7eb71bd03ffd3c4f36631f69fdcc4061468ff582ede495243ef1361a3b3295fa813ba205\"\n    },\n    {\n        \"secret_key\": \"6288722035d1ea699bc7cfdf18d89625423180b683fa74639f4f30f15359cc85\",\n        \"public_key\": \"e17faa019572861a064e1bc571256dea1468f3a48590a89138aaa85925080cd7\",\n        \"message\": \"8b6caacac51d8949fb86acbcb1b99d859ff67c64147bc1216909dcab07ee6ef09f403863327394689dc34abc778fcb5c1f5091acf5a08f9d842211d1ae2eb40be9bb8d6679077471547a6c71ff77b519d4b7108e32bc46251c60dee8e332b6229316e6d57c22ab826ff1bc33f2b0213807c19280af110fd26ee27468201cff49cb\",\n        \"signed\": \"9dec92b6e89adbe8f4e1b5e93ac4fcf957de7d1970a226770ec4eda647c8e3b3dffb2731a39e16e4a0119d3662a937e560522491ec7a1696be04c076b12e35018b6caacac51d8949fb86acbcb1b99d859ff67c64147bc1216909dcab07ee6ef09f403863327394689dc34abc778fcb5c1f5091acf5a08f9d842211d1ae2eb40be9bb8d6679077471547a6c71ff77b519d4b7108e32bc46251c60dee8e332b6229316e6d57c22ab826ff1bc33f2b0213807c19280af110fd26ee27468201cff49cb\",\n        \"signature\": \"9dec92b6e89adbe8f4e1b5e93ac4fcf957de7d1970a226770ec4eda647c8e3b3dffb2731a39e16e4a0119d3662a937e560522491ec7a1696be04c076b12e3501\"\n    },\n    {\n        \"secret_key\": \"13038a3a65ef32759a9cd903acb554b252de00e7cdb77bbed1970b20680ee17b\",\n        \"public_key\": \"b6a308e67f9b46c66499456ab5cd135cb2fe84a32eb045358626604da4122c8f\",\n        \"message\": \"ddf00b4033a2a088022dabe93356432f50ddc6c6e1a659dc1a93124a4c2ffffd182765a2f56c43ea0bfd8de8015060889ae6941c3f3e255d4421a1c36201be846a2738a71f120cad598ca8527d70ff8d5a0993b55cb5153517110a41962daff42250158f2096d1ddaf7186e50298cbe51fcb429cbea411293f8a7bd9cf069fa237e4\",\n        \"signed\": \"5261558ecc3c98ff36351f42f504cad4a32ffda5a744560960b4c106e4492f02e20478887afee4f770f05597a7e388caceae805ae351e0e45e8e578e6a6ff20cddf00b4033a2a088022dabe93356432f50ddc6c6e1a659dc1a93124a4c2ffffd182765a2f56c43ea0bfd8de8015060889ae6941c3f3e255d4421a1c36201be846a2738a71f120cad598ca8527d70ff8d5a0993b55cb5153517110a41962daff42250158f2096d1ddaf7186e50298cbe51fcb429cbea411293f8a7bd9cf069fa237e4\",\n        \"signature\": \"5261558ecc3c98ff36351f42f504cad4a32ffda5a744560960b4c106e4492f02e20478887afee4f770f05597a7e388caceae805ae351e0e45e8e578e6a6ff20c\"\n    },\n    {\n        \"secret_key\": \"b9de5b063d3ca3a773f114941b2e4227c07511c0f5c06017b9c8845018f23432\",\n        \"public_key\": \"5295243c8646e096674dda15979b322b9dd0faf27d024a0ed5771334e1179ed2\",\n        \"message\": \"9493cc23896b84096046ae1053afe39499e9424254b366fe143f4da321e2dc9e4784208e12a542d899828dde7eff625a7f12416990c2841ffb095bf94c0c610e5a663918b689031ccd6b519349d04de1c212ca2a9d7abf52e1b4fd467bb665b6919ef8f91617e205565bf56647e5f8d508ea200a84467f8fa122e74bc3b9979f1174e5\",\n        \"signed\": \"92ba760d14d1415cfaf218ca847014088ae51ad821113a6f8630356f7ba85c005e2330f1066d0df464806052a4174610050462f3e013d702e7c77185a032580b9493cc23896b84096046ae1053afe39499e9424254b366fe143f4da321e2dc9e4784208e12a542d899828dde7eff625a7f12416990c2841ffb095bf94c0c610e5a663918b689031ccd6b519349d04de1c212ca2a9d7abf52e1b4fd467bb665b6919ef8f91617e205565bf56647e5f8d508ea200a84467f8fa122e74bc3b9979f1174e5\",\n        \"signature\": \"92ba760d14d1415cfaf218ca847014088ae51ad821113a6f8630356f7ba85c005e2330f1066d0df464806052a4174610050462f3e013d702e7c77185a032580b\"\n    },\n    {\n        \"secret_key\": \"8ff0297cc08842b5e67552ec2843e04353a34d74ef89b8565d97205b74ca133a\",\n        \"public_key\": \"0f7ef98c5ba4af984dfb77bc4e537b2b39e6273bb3e7b95fe1b7e6781952bd4a\",\n        \"message\": \"2bdc3a486c5e4ea62dcfec8a9d4fcf9ea9490dbcc715615d58490a72ce833fa22387ca50a0052508cf0aff1ca727f0fed46ffa7d3c8e23c5bb01d47e90ff06d3858a557d9926481579daf4384aea50e96ec615d2a3bf3c1122f1f24dd6ed98a5de421883589c213998ca5432373e68bbbe89428ca9885d0593d5e6215116b8266386452b\",\n        \"signed\": \"0783737f706e6ff36614f850074fca1f485f24fcde2a28af544f37abd69b7a581defd8c771b031e108d19d788c74c5f20bb3f1c21cd92be317bacd8f650b49052bdc3a486c5e4ea62dcfec8a9d4fcf9ea9490dbcc715615d58490a72ce833fa22387ca50a0052508cf0aff1ca727f0fed46ffa7d3c8e23c5bb01d47e90ff06d3858a557d9926481579daf4384aea50e96ec615d2a3bf3c1122f1f24dd6ed98a5de421883589c213998ca5432373e68bbbe89428ca9885d0593d5e6215116b8266386452b\",\n        \"signature\": \"0783737f706e6ff36614f850074fca1f485f24fcde2a28af544f37abd69b7a581defd8c771b031e108d19d788c74c5f20bb3f1c21cd92be317bacd8f650b4905\"\n    },\n    {\n        \"secret_key\": \"050d553d282dca3269c83c181768ec067b81c9fe0c94f2a0ebbb0c942d0fcd7c\",\n        \"public_key\": \"63e230b003c53a5672e832ff7f24430be223e497de840233f595a3e200c7127e\",\n        \"message\": \"15e13b8c01004f6aa5b236dbb281677f746d81e548e0aa80f0e414521521d856cd694e7c9152bb5e43776b60f6b560ed1ad3e4b390dbf3e46ef9257443f39c149e0240a02d021e1e3d7d046b26fd004eee7ca16a8059e126c74cb3f2194db47bf60465ecef5c704d2e2c75e2e50060ea2a31cb72b7b3c6b1b5ec72ab38004085281a22fe86\",\n        \"signed\": \"3f0e83765b31bbe8e1fb92e9678d6cde571a03ba7f1dcc1128461f708525457f4e0e2353aa2b598c063ff1bffdac916b5a2200655156904b0585577a1628560d15e13b8c01004f6aa5b236dbb281677f746d81e548e0aa80f0e414521521d856cd694e7c9152bb5e43776b60f6b560ed1ad3e4b390dbf3e46ef9257443f39c149e0240a02d021e1e3d7d046b26fd004eee7ca16a8059e126c74cb3f2194db47bf60465ecef5c704d2e2c75e2e50060ea2a31cb72b7b3c6b1b5ec72ab38004085281a22fe86\",\n        \"signature\": \"3f0e83765b31bbe8e1fb92e9678d6cde571a03ba7f1dcc1128461f708525457f4e0e2353aa2b598c063ff1bffdac916b5a2200655156904b0585577a1628560d\"\n    },\n    {\n        \"secret_key\": \"69497cd7b4e868cfa0328d92bd6052d772b2767395c14595b279851a9cdd31aa\",\n        \"public_key\": \"5d276d626e230d18e7bcd61141cb93c90ef0f79e01321212d838ec71457b1aac\",\n        \"message\": \"53cd080a0c61f1a093d3b3a74571c296303f363b4107edbe880b7aa9dfe44ab5d5dc5f74be9c8d876f04d754653491ab51b135fc953f71287b62ff41b67c742bd3445671a9d4f2dc174ca1b0335f78627a0dd4b30650504178039e7393638510ffe84091b57298d3ac9001c367c1452fbcb33dc54a5dc316fb2a5270764a2ac820a0b63fbdc6\",\n        \"signed\": \"beafa58340960908e8d86e40329e3a4523fc7be770addb86e34c3772f84cd9fb338d1f3b65bfcdb09f35c6da36d1a3adf8f91f1ffd5782cc830206433a08410d53cd080a0c61f1a093d3b3a74571c296303f363b4107edbe880b7aa9dfe44ab5d5dc5f74be9c8d876f04d754653491ab51b135fc953f71287b62ff41b67c742bd3445671a9d4f2dc174ca1b0335f78627a0dd4b30650504178039e7393638510ffe84091b57298d3ac9001c367c1452fbcb33dc54a5dc316fb2a5270764a2ac820a0b63fbdc6\",\n        \"signature\": \"beafa58340960908e8d86e40329e3a4523fc7be770addb86e34c3772f84cd9fb338d1f3b65bfcdb09f35c6da36d1a3adf8f91f1ffd5782cc830206433a08410d\"\n    },\n    {\n        \"secret_key\": \"2165a486b612bbff529cd00346964a3cb8cdcffa51dc3d524dd5adc5ac936d68\",\n        \"public_key\": \"7ebc839a465e14f5892476e4a13b3988f83b3cd27ef79e193f86fa16f34a1ce1\",\n        \"message\": \"b728da7a36167c6085bd2d962cf63959facd95c9ad4542028afba90ec9c6c0760bdae935429c3feb3933e2f00042c672ad2cd7348d92bc33f81751e294ae9171b945b193144ef8acb9a1bd9abf0475ce0d0ac789b200c32e9c9a2736b168369ce5f97b1e8d2e7900e1a759178441f1fc430564ae129bae7857740511a668f32c0a3b077a9d8b19\",\n        \"signed\": \"7ec6fba56ba52460a1b4f2738689c1883dda9aaffc8bde17cb6029bdce3a0ebe2fffda55939b70bbd07fdbf6fc5cda87fed8ba58575f894a366e45e5705eea09b728da7a36167c6085bd2d962cf63959facd95c9ad4542028afba90ec9c6c0760bdae935429c3feb3933e2f00042c672ad2cd7348d92bc33f81751e294ae9171b945b193144ef8acb9a1bd9abf0475ce0d0ac789b200c32e9c9a2736b168369ce5f97b1e8d2e7900e1a759178441f1fc430564ae129bae7857740511a668f32c0a3b077a9d8b19\",\n        \"signature\": \"7ec6fba56ba52460a1b4f2738689c1883dda9aaffc8bde17cb6029bdce3a0ebe2fffda55939b70bbd07fdbf6fc5cda87fed8ba58575f894a366e45e5705eea09\"\n    },\n    {\n        \"secret_key\": \"1c64ad63dd147034598e128f7406ec0530746ea1c5b72ecf79e888065486fa1b\",\n        \"public_key\": \"baa6bcc1c3d8d3b11ffc1587adddc58bfd96c2b992b6c6f59fcc50ccbcdd0eb9\",\n        \"message\": \"9ebd8e337893bb053ef2b9e3269df54848494f03cd63576b33e64b1080be4be015264a403fb9602bbf90ca19b241a9b66863909b9008ce1b2ffcf236efa4c2668f0f47db9ff5fa157d9cb605412be7dd8b07ea878cccae6bf50f935b86d19e1b648b69e528553a56d8afb78221ad53307b7a4ec8d2fd4861b55dc5dae8e93ef387fbbe0b4ce7f788\",\n        \"signed\": \"7477e54158f13b7128c0a110ca6b65f42514fb70cd5cf28a8b1cc6110ea06fcf94290da13f85a11c2351d3bbccbb4c64e0215d6d0f0099e7f27bc94e949b150b9ebd8e337893bb053ef2b9e3269df54848494f03cd63576b33e64b1080be4be015264a403fb9602bbf90ca19b241a9b66863909b9008ce1b2ffcf236efa4c2668f0f47db9ff5fa157d9cb605412be7dd8b07ea878cccae6bf50f935b86d19e1b648b69e528553a56d8afb78221ad53307b7a4ec8d2fd4861b55dc5dae8e93ef387fbbe0b4ce7f788\",\n        \"signature\": \"7477e54158f13b7128c0a110ca6b65f42514fb70cd5cf28a8b1cc6110ea06fcf94290da13f85a11c2351d3bbccbb4c64e0215d6d0f0099e7f27bc94e949b150b\"\n    },\n    {\n        \"secret_key\": \"55abbc5dac4128134dc8c6018a213ed4b60fcc8e90cbd41db2d21eda5373e936\",\n        \"public_key\": \"251afaa2646926b2a371f2a09d5865b98c9a5eb6ca047cd0d8ee36e5e0416974\",\n        \"message\": \"47010e1398ad55fabe371dd8648f768d90df4b965a3b396100b303b40a17518bed6d86b09f734ab7c10b5f3a01b53deec5f8534b70c79f3f29b284fdec486f22f44c22ccd5c6463594415267baa611f70b1b316caa1b68b5e0e99b31c5bb0ce13679a23c31a63999698164cbf37d103ba92490188be59937f123043ec786efe3d411f9b0623a6ad972\",\n        \"signed\": \"f6a61c2e661a9eb7bde182e38ec99af985f61698a5d7fa430d16e3f1a93709b75522320de48afcc595ab209122ae0ce132cdf4b0391746e7ff341177570c810847010e1398ad55fabe371dd8648f768d90df4b965a3b396100b303b40a17518bed6d86b09f734ab7c10b5f3a01b53deec5f8534b70c79f3f29b284fdec486f22f44c22ccd5c6463594415267baa611f70b1b316caa1b68b5e0e99b31c5bb0ce13679a23c31a63999698164cbf37d103ba92490188be59937f123043ec786efe3d411f9b0623a6ad972\",\n        \"signature\": \"f6a61c2e661a9eb7bde182e38ec99af985f61698a5d7fa430d16e3f1a93709b75522320de48afcc595ab209122ae0ce132cdf4b0391746e7ff341177570c8108\"\n    },\n    {\n        \"secret_key\": \"f2dcf4a1a0d46ddb2d72f8fdd80bbec5b7dea5913da4966c2f4d12c261f0bf98\",\n        \"public_key\": \"d39570a25ca59f2257f93f96600df4f63e684bf63ae8dffd914e4629c3d5095f\",\n        \"message\": \"3b00e808fca4c11651d853d6b90f952ccf5647e102d4ee0ad7a5d181d5b4258c523cd39e3d9825298d84c8cba09f43dbba119988222c76059caf17b4bf9931c45e617448aeade151181497b24552367e52bc45ac79088806d3368207aafefd3057845dce819d5aaaa77b218e2aed3da76d40c1f07699f8172e4a5c803f7a2aceb9a47a8952e1b2f053f2\",\n        \"signed\": \"42882a811dad2d851885e4cbe9044708d91a86f15dfa1d66c3eb304314531f3015208c711b9bdbc5fb233951e569b59d34e415eec4b37ffd374d412c9a360d0c3b00e808fca4c11651d853d6b90f952ccf5647e102d4ee0ad7a5d181d5b4258c523cd39e3d9825298d84c8cba09f43dbba119988222c76059caf17b4bf9931c45e617448aeade151181497b24552367e52bc45ac79088806d3368207aafefd3057845dce819d5aaaa77b218e2aed3da76d40c1f07699f8172e4a5c803f7a2aceb9a47a8952e1b2f053f2\",\n        \"signature\": \"42882a811dad2d851885e4cbe9044708d91a86f15dfa1d66c3eb304314531f3015208c711b9bdbc5fb233951e569b59d34e415eec4b37ffd374d412c9a360d0c\"\n    },\n    {\n        \"secret_key\": \"2246bfb06155859e10a748ff8f5919ad5d1daab756f01057b790d07474775f4f\",\n        \"public_key\": \"fa6349b62dc8c6a2feeef6ffc33ae085c649795c1c9d9898e75c13ae1625db34\",\n        \"message\": \"63ee1c7bbb15cebe1c22532d481682754bdaf58b8bc997ae30a34c9d23c33f1690c346ab0a7365ff62457424b6105f8421eca0ce3c630acfeb9a1cc416390edf4920e22b2367e9fb5d2ab25bee56da03ea55e3f57882d48b89229314d734cb83c79f4e17ee64bae6f7addbe9b525fcd03a91409a2dde907751db8cc97e08d0ea89c4d18718d26d0b897b64\",\n        \"signed\": \"2be4915a352f7785483046d8ae9625b8b63257af57c073691256ee076d6e1b972a101f551c705d3f96157c33b56ea049be4af4dc561cbe3c1ec5072d7f134e0763ee1c7bbb15cebe1c22532d481682754bdaf58b8bc997ae30a34c9d23c33f1690c346ab0a7365ff62457424b6105f8421eca0ce3c630acfeb9a1cc416390edf4920e22b2367e9fb5d2ab25bee56da03ea55e3f57882d48b89229314d734cb83c79f4e17ee64bae6f7addbe9b525fcd03a91409a2dde907751db8cc97e08d0ea89c4d18718d26d0b897b64\",\n        \"signature\": \"2be4915a352f7785483046d8ae9625b8b63257af57c073691256ee076d6e1b972a101f551c705d3f96157c33b56ea049be4af4dc561cbe3c1ec5072d7f134e07\"\n    },\n    {\n        \"secret_key\": \"c088a3dd2cb8bd5d684db8538dc22473b6f014f64fe86af168b4bb01b90a1dd0\",\n        \"public_key\": \"aad615a9c28759f03d373abe666691dead8b84f9b8b50a67f8f0aa4a701580d1\",\n        \"message\": \"74906ae05a5af8e9968b6feb498569d6345a24f9711befb136e6c3b5ed49339e59a7938b4ba1a118f169b9ace0f7842a26a645f14c0ad22ebbcda93e67e4c348efc3d9ecbb1419e6262d0436a58ea82c2202389065ccf67c4f550e45b5f6a12a6c011b2e0a30101d5c62328bbf99c8c95563a6e33bdd9cce72b1f720139c2fd3e04913146ae5bac5288e0e3e\",\n        \"signed\": \"3bb459d1ac575a180c1728d8b8924970492a0c8d2a378c29d1d41785c8379a58e2ba3606785e1c5da29e5527552bc6dc89a2b69c27fe51ed253a9f3b565b270074906ae05a5af8e9968b6feb498569d6345a24f9711befb136e6c3b5ed49339e59a7938b4ba1a118f169b9ace0f7842a26a645f14c0ad22ebbcda93e67e4c348efc3d9ecbb1419e6262d0436a58ea82c2202389065ccf67c4f550e45b5f6a12a6c011b2e0a30101d5c62328bbf99c8c95563a6e33bdd9cce72b1f720139c2fd3e04913146ae5bac5288e0e3e\",\n        \"signature\": \"3bb459d1ac575a180c1728d8b8924970492a0c8d2a378c29d1d41785c8379a58e2ba3606785e1c5da29e5527552bc6dc89a2b69c27fe51ed253a9f3b565b2700\"\n    },\n    {\n        \"secret_key\": \"45667d1e7b5910979c4a328317968371c864d564a661c5cce557c9ecc61bab9e\",\n        \"public_key\": \"edcdf5e1a170e00c8c687e7e9c18f9893b5fe495cd2977ceb7f446c0149aa9d3\",\n        \"message\": \"cd66cec476c87c8dbf47ec91dac48fb5b42db1282a573e0a5cf0b91768986608e1d7ebd05f5251bcf8b47a17093229acefbd44beb21c0c0c928dd3cd3f8966ecce6910331c508ea76baf904d8c21f6c17c2c58d00afd3259b8bf794c146b12b995cddd1c4289c5be3168ebd616b384c281ce1b38a10e1807808853c681a640a009b4d2acd7934f8c6d07578161\",\n        \"signed\": \"6de668f1ca6f292814625289a0808020c87c89ac94f5b0508e557bdf8000a5ca808f021c9679b50ee2f320064c95a464a8439379828c3b76cfa766455e128c0bcd66cec476c87c8dbf47ec91dac48fb5b42db1282a573e0a5cf0b91768986608e1d7ebd05f5251bcf8b47a17093229acefbd44beb21c0c0c928dd3cd3f8966ecce6910331c508ea76baf904d8c21f6c17c2c58d00afd3259b8bf794c146b12b995cddd1c4289c5be3168ebd616b384c281ce1b38a10e1807808853c681a640a009b4d2acd7934f8c6d07578161\",\n        \"signature\": \"6de668f1ca6f292814625289a0808020c87c89ac94f5b0508e557bdf8000a5ca808f021c9679b50ee2f320064c95a464a8439379828c3b76cfa766455e128c0b\"\n    },\n    {\n        \"secret_key\": \"24897428ae6546d85b3190ebe3f1f7bf7c712528ac851a588b07d5c8f94eecd1\",\n        \"public_key\": \"5f348fe3ea5b2c023d0af7ede60e55f91aa55199699da15a11c3791d68d710bd\",\n        \"message\": \"5201d9725f1dffa1863fa4d84c301861141acdfb64be1fbfdd5b9386db20ef394099eebcfdfecc62c6268607a84d55c55cd0efdc372ecf3067343e7b0731c2685461e24b953f99949e59ba3e67ed0f0848313793962a292c459814c5e28690ec1f45171f1abab86fdd14568b00caf48581115ee5ea83b000282fbbf0c0b2a1116039a35cfa3f201422207a3d4948\",\n        \"signed\": \"1b5e75def49f51d6b2de008c71fc1a909bd42ca813298dce4eeef717815d7a6c078c2f3d9a3fce1ab5b3ad8ef8d45cdf2eb4901c32eea2d5e018dcf2833cad0c5201d9725f1dffa1863fa4d84c301861141acdfb64be1fbfdd5b9386db20ef394099eebcfdfecc62c6268607a84d55c55cd0efdc372ecf3067343e7b0731c2685461e24b953f99949e59ba3e67ed0f0848313793962a292c459814c5e28690ec1f45171f1abab86fdd14568b00caf48581115ee5ea83b000282fbbf0c0b2a1116039a35cfa3f201422207a3d4948\",\n        \"signature\": \"1b5e75def49f51d6b2de008c71fc1a909bd42ca813298dce4eeef717815d7a6c078c2f3d9a3fce1ab5b3ad8ef8d45cdf2eb4901c32eea2d5e018dcf2833cad0c\"\n    },\n    {\n        \"secret_key\": \"7b04aca7cf926216cb960a3890786339d0a615967680190123fda3b60c6aeb11\",\n        \"public_key\": \"cdbc3e70e4e8fd13d0cce2852a3b9372c3a6160cd6deaba90f9b3022f70c91f9\",\n        \"message\": \"1cb09624b1f14a0260c7f56d8c60b5fe45837114232551ef5966386e0c2b441b75cfdb8df2185785d22cf526fa9df7fd45d9d83881b66c1feee0913e238121eedbb7ab504da0bee8998016684535031991f11bfcd9b95690aad2d19bd6a9de1844ed1362302df4217230b25c0552ce277534c650cae526577f25d8b1fe9f9febca2c814670d4805b21adef852daf94\",\n        \"signed\": \"25d2d361751d52b4fe66ea18e4b9866bde3d121a7312fd9e28a1e295e087e3176c94c874a2e81600f24c4654f43d1b67d47b64822648590ce5ce44f3b5ddc5021cb09624b1f14a0260c7f56d8c60b5fe45837114232551ef5966386e0c2b441b75cfdb8df2185785d22cf526fa9df7fd45d9d83881b66c1feee0913e238121eedbb7ab504da0bee8998016684535031991f11bfcd9b95690aad2d19bd6a9de1844ed1362302df4217230b25c0552ce277534c650cae526577f25d8b1fe9f9febca2c814670d4805b21adef852daf94\",\n        \"signature\": \"25d2d361751d52b4fe66ea18e4b9866bde3d121a7312fd9e28a1e295e087e3176c94c874a2e81600f24c4654f43d1b67d47b64822648590ce5ce44f3b5ddc502\"\n    },\n    {\n        \"secret_key\": \"ea73bf64a1a97877c3c3e7ca4644b71aaa66314c8f1b66bafaebd5edfb888bcd\",\n        \"public_key\": \"caac93902e5764ade47294edd51faa14620940c668b5c1c392a6928325d4c3fd\",\n        \"message\": \"362eec68b912852786bb4f9afff9ecf7cb28c9de6b18422a8ca940b0d7e6dcb83aa44be0afb5f1806d43f0e31d71f922f853615a26e287a27f08a04fbce3d45a0c6c311d4b7cb17e425bbeb0a6b410b5d6dbb7ac11df9850a131a691e3b60b0b214ebe044106e982433287595267b031b5d4a09262ded8934fdfdf964d868ef9a2c842f804eafddefcb71d9f16a59bf8\",\n        \"signed\": \"bd86cb9c70a055279a86a9e64870988b8a7345c3cd2948a0fabcfb38abce3c420b4d5521618e11d2de827d9de569f6bc3be66aad40636cdaa64760ded3b7c209362eec68b912852786bb4f9afff9ecf7cb28c9de6b18422a8ca940b0d7e6dcb83aa44be0afb5f1806d43f0e31d71f922f853615a26e287a27f08a04fbce3d45a0c6c311d4b7cb17e425bbeb0a6b410b5d6dbb7ac11df9850a131a691e3b60b0b214ebe044106e982433287595267b031b5d4a09262ded8934fdfdf964d868ef9a2c842f804eafddefcb71d9f16a59bf8\",\n        \"signature\": \"bd86cb9c70a055279a86a9e64870988b8a7345c3cd2948a0fabcfb38abce3c420b4d5521618e11d2de827d9de569f6bc3be66aad40636cdaa64760ded3b7c209\"\n    },\n    {\n        \"secret_key\": \"b8123c116b33bad0dcbc2c4dc06a3d66850dab360cdb5a033c14895c4ee31bfb\",\n        \"public_key\": \"bdca151ba32c6bb31531b05fdf86c6d78c8cd1935611d5ff111a0f00635b1885\",\n        \"message\": \"7970f6666634548c848bb52338817b26a4d0ca68df3d28afff207c2d028067a18e4c9543025f5b0228aa691e5088513151a94494e15d1f54210328e0df159b352c30aaa7a844f18a9f4c395dcbb3fb9fcfbed1103e0706fbf9c35fe2666848fa35dc2cf5227ebee89e7d3bcfae2721b25fdec3d3174ea7ce267a55dd61d58201e96bda303cf418edf6e32fb92f5dc1a0b1\",\n        \"signed\": \"9cf13eba3dcc37b8fc70ccb2327436b9f08855e726aa7ed82bd5cb7df45fdf9ec1f96afad193f47572d770444b65b74a37cc034fc514cb3f91b2d8ada5b020067970f6666634548c848bb52338817b26a4d0ca68df3d28afff207c2d028067a18e4c9543025f5b0228aa691e5088513151a94494e15d1f54210328e0df159b352c30aaa7a844f18a9f4c395dcbb3fb9fcfbed1103e0706fbf9c35fe2666848fa35dc2cf5227ebee89e7d3bcfae2721b25fdec3d3174ea7ce267a55dd61d58201e96bda303cf418edf6e32fb92f5dc1a0b1\",\n        \"signature\": \"9cf13eba3dcc37b8fc70ccb2327436b9f08855e726aa7ed82bd5cb7df45fdf9ec1f96afad193f47572d770444b65b74a37cc034fc514cb3f91b2d8ada5b02006\"\n    },\n    {\n        \"secret_key\": \"b18e1d0045995ec3d010c387ccfeb984d783af8fbb0f40fa7db126d889f6dadd\",\n        \"public_key\": \"77f48b59caeda77751ed138b0ec667ff50f8768c25d48309a8f386a2bad187fb\",\n        \"message\": \"916c7d1d268fc0e77c1bef238432573c39be577bbea0998936add2b50a653171ce18a542b0b7f96c1691a3be6031522894a8634183eda38798a0c5d5d79fbd01dd04a8646d71873b77b221998a81922d8105f892316369d5224c9983372d2313c6b1f4556ea26ba49d46e8b561e0fc76633ac9766e68e21fba7edca93c4c7460376d7f3ac22ff372c18f613f2ae2e856af40\",\n        \"signed\": \"6bd710a368c1249923fc7a1610747403040f0cc30815a00f9ff548a896bbda0b4eb2ca19ebcf917f0f34200a9edbad3901b64ab09cc5ef7b9bcc3c40c0ff7509916c7d1d268fc0e77c1bef238432573c39be577bbea0998936add2b50a653171ce18a542b0b7f96c1691a3be6031522894a8634183eda38798a0c5d5d79fbd01dd04a8646d71873b77b221998a81922d8105f892316369d5224c9983372d2313c6b1f4556ea26ba49d46e8b561e0fc76633ac9766e68e21fba7edca93c4c7460376d7f3ac22ff372c18f613f2ae2e856af40\",\n        \"signature\": \"6bd710a368c1249923fc7a1610747403040f0cc30815a00f9ff548a896bbda0b4eb2ca19ebcf917f0f34200a9edbad3901b64ab09cc5ef7b9bcc3c40c0ff7509\"\n    },\n    {\n        \"secret_key\": \"93649c63910b35718e48c590d261c48e4ef8336613f6aa077b462676b3ba8829\",\n        \"public_key\": \"06a685898b855212ebc289915d105a4320d620d85771b8c6b15bf10a1be6e9b8\",\n        \"message\": \"2cd1a951056c9ebae1399b6bd2d82c0ae277856290d06920ac56cac8fb42435101c72aa9c08dd2d12426325562c2f0a49cd821b11b939aafa593b4095c021bcb4827b107b9664d68282888bc4a44af3e3bdc861be6af309044c3daab57b77023dc902d47ebc326f9bdd02dbc02cd540ff81b2ddf7cf679a41193dfe5f8c8ca1aaefc41ef740280d9823e30a354717c8431f5d8\",\n        \"signed\": \"6274f2d4f431d5affefa35e7cf584a599017193da99094ca908b75acb608d1bf981857be93a7dafb0fadb3ff0906f48a5ee950456f782c2d605b14095ba0ff0f2cd1a951056c9ebae1399b6bd2d82c0ae277856290d06920ac56cac8fb42435101c72aa9c08dd2d12426325562c2f0a49cd821b11b939aafa593b4095c021bcb4827b107b9664d68282888bc4a44af3e3bdc861be6af309044c3daab57b77023dc902d47ebc326f9bdd02dbc02cd540ff81b2ddf7cf679a41193dfe5f8c8ca1aaefc41ef740280d9823e30a354717c8431f5d8\",\n        \"signature\": \"6274f2d4f431d5affefa35e7cf584a599017193da99094ca908b75acb608d1bf981857be93a7dafb0fadb3ff0906f48a5ee950456f782c2d605b14095ba0ff0f\"\n    },\n    {\n        \"secret_key\": \"1c15cbeb89362d69476a2aa4a5f3ef2089cf87286349e0dfe0e72d9e3e5a66c7\",\n        \"public_key\": \"13a882a1064182582c211847e19b4dac59722c9ffd34826d96f33113400fac7a\",\n        \"message\": \"091c9b9b116ae83d23d01a6295211785d446b6228dd687ddf79bd0d5a4daa8c79d2cbfc37365f1f285e361738123e34e2bcbfc664ce1253a11d9e4a7982e58cf9468e1017ea14d2cc6d0865d40fde8cb560241e96ac1617c791f0ca7c6410cadf328611b18aef333d8350ac497f0a4ae2d03fdf0e23e426d34f4514780d1474e113583541f3c043672057172618cb2059eaaed56\",\n        \"signed\": \"5998b2808adfdeeaebe2c3eac026d3f825f9c7f2af97ca324fbd57aac1bedff78a8ee621d037ee3ad2a712e9a009c58ea3e6f2a828f74b86da275a44a4b1e50b091c9b9b116ae83d23d01a6295211785d446b6228dd687ddf79bd0d5a4daa8c79d2cbfc37365f1f285e361738123e34e2bcbfc664ce1253a11d9e4a7982e58cf9468e1017ea14d2cc6d0865d40fde8cb560241e96ac1617c791f0ca7c6410cadf328611b18aef333d8350ac497f0a4ae2d03fdf0e23e426d34f4514780d1474e113583541f3c043672057172618cb2059eaaed56\",\n        \"signature\": \"5998b2808adfdeeaebe2c3eac026d3f825f9c7f2af97ca324fbd57aac1bedff78a8ee621d037ee3ad2a712e9a009c58ea3e6f2a828f74b86da275a44a4b1e50b\"\n    },\n    {\n        \"secret_key\": \"11241ffdf34ae8ab875475e94c6cc3291f0b8820dc85e20f32fc53b24ae68978\",\n        \"public_key\": \"09c045e4bd5137314c0ec1d031faf914910c45a4676f5a3cd8f581bcccb03c97\",\n        \"message\": \"3b89deccb7023e4b2b7aff2c3951870af413a9b04dd86ac78b7c8fd887492d8dde49d8fda149edd54781ae2b508030d14416a9a38bed2b9aebbbb20250b3c931acd4e32fbeeec5a26501beab7268d144fce8951a101c4b5178166fbb5927b1dfb1e1ce90d1d123068e3f472c888fdb01fdf70e7f8de9b0adb284b7119f55354316f84ed090030f9c2662061ca48447cc0aef964126\",\n        \"signed\": \"72ce9f91be2e66cfc90f952595946ffc90bfce53087d49e5dd7c087f3faa8f18f2356de971e4429d985a99194b4f92ced3ef47cd7114379e0b3267a9f8b1e7063b89deccb7023e4b2b7aff2c3951870af413a9b04dd86ac78b7c8fd887492d8dde49d8fda149edd54781ae2b508030d14416a9a38bed2b9aebbbb20250b3c931acd4e32fbeeec5a26501beab7268d144fce8951a101c4b5178166fbb5927b1dfb1e1ce90d1d123068e3f472c888fdb01fdf70e7f8de9b0adb284b7119f55354316f84ed090030f9c2662061ca48447cc0aef964126\",\n        \"signature\": \"72ce9f91be2e66cfc90f952595946ffc90bfce53087d49e5dd7c087f3faa8f18f2356de971e4429d985a99194b4f92ced3ef47cd7114379e0b3267a9f8b1e706\"\n    },\n    {\n        \"secret_key\": \"3bdb162465eaceff98d69c86f70039c517d168aefe6bb101b4f769a86b17c972\",\n        \"public_key\": \"d76cb7be74328289fd1c64be747cca5bb30295dfaccd0f2e43f51703fd5d3683\",\n        \"message\": \"fbf368feaeba87918b1b8c7b8a26832be6e7fc1cbdb8902519281a0654ec73de0bb07101a9d603f745d4ec2357aee9870cb19a56cb44fbd9c91fc34752612fbd83d6fc1a16bf8a85a215d0148e4af37d298467e5cc486b131352ce092182ce8284159a3812b30bacbff595863811bf9a30a9da494565c3ac1814430018ea0eeed39cdbca27f93140e46949db570bfa2ed4f4073f8833\",\n        \"signed\": \"6f1362a402063791f950984f544928e616a4ef79bbeb6854e9615aab9cdbaec483fb9a04bf22de5d97a15bda2d390483c7f61dbee07bb5141fc173b1aa47650dfbf368feaeba87918b1b8c7b8a26832be6e7fc1cbdb8902519281a0654ec73de0bb07101a9d603f745d4ec2357aee9870cb19a56cb44fbd9c91fc34752612fbd83d6fc1a16bf8a85a215d0148e4af37d298467e5cc486b131352ce092182ce8284159a3812b30bacbff595863811bf9a30a9da494565c3ac1814430018ea0eeed39cdbca27f93140e46949db570bfa2ed4f4073f8833\",\n        \"signature\": \"6f1362a402063791f950984f544928e616a4ef79bbeb6854e9615aab9cdbaec483fb9a04bf22de5d97a15bda2d390483c7f61dbee07bb5141fc173b1aa47650d\"\n    },\n    {\n        \"secret_key\": \"d5efe51d5cd8e108bd922fc0ea126190a94628ffa53c433a518022792ddc78ef\",\n        \"public_key\": \"426b01cc61ff5e0e724da1d3b297f5325c18c62f64d5eb48d4a5216a8e9a4073\",\n        \"message\": \"9d17bcfe2dfc742f411cb53a94f359c001abf096c741f34af48679f281e7ce6bbd9e87709fc0728a563db2b9cf8ea4fbdcc344c1848e653ce970c6ce29de2ccd520300649adcddfc753971f846aac1ba42ae4528952d94980aa7c6cfa2142907647f894ae974a74d59035a73ef56a10b6612624809520190ace661c3a47095e0322efd781d50d1163598f2da32f31bc9c4f913d1b14861\",\n        \"signed\": \"2306f58fcd4cff2222d81b05a475532b8b19dc67e6d78ddb4205a3b7621cc5aef0b393d5d24dd96c88ccbc53a3208da323be4587d5ec067c820f0723aa44e90e9d17bcfe2dfc742f411cb53a94f359c001abf096c741f34af48679f281e7ce6bbd9e87709fc0728a563db2b9cf8ea4fbdcc344c1848e653ce970c6ce29de2ccd520300649adcddfc753971f846aac1ba42ae4528952d94980aa7c6cfa2142907647f894ae974a74d59035a73ef56a10b6612624809520190ace661c3a47095e0322efd781d50d1163598f2da32f31bc9c4f913d1b14861\",\n        \"signature\": \"2306f58fcd4cff2222d81b05a475532b8b19dc67e6d78ddb4205a3b7621cc5aef0b393d5d24dd96c88ccbc53a3208da323be4587d5ec067c820f0723aa44e90e\"\n    },\n    {\n        \"secret_key\": \"18af89025ebfa76bd557cfb2dff148245214641fd5bda159f73da04b08e87c88\",\n        \"public_key\": \"0c584459b9ebcccad587b272160bc60b27f4f772b4321de7723afef577edc7b4\",\n        \"message\": \"e82f46652ab914af535d8fb720b557ac95018d9f2a3fcce85771bb40ab14cb9a986e096f3afe5bee829dfd8b97335c536ac971a21655af16a2f8fdba183a4e18564c21492956537a419abbbbb02a4bbdc01481f5c6e658ecf3c34f011ad846f5edcd4939195df85e41303fb9a88fdfbd704396f7559a327318b952b3e60ce8ddde56378579232faf950c78e7f0b17c3b8dece36b788a8473\",\n        \"signed\": \"26bb0882297c2c08a752d3981145dcde55893a11df77f8aa4c19d0b9ed6e5220ed12e9fac3af13d0f0c71568f4a547d30114a6599a236806c4beee6765284408e82f46652ab914af535d8fb720b557ac95018d9f2a3fcce85771bb40ab14cb9a986e096f3afe5bee829dfd8b97335c536ac971a21655af16a2f8fdba183a4e18564c21492956537a419abbbbb02a4bbdc01481f5c6e658ecf3c34f011ad846f5edcd4939195df85e41303fb9a88fdfbd704396f7559a327318b952b3e60ce8ddde56378579232faf950c78e7f0b17c3b8dece36b788a8473\",\n        \"signature\": \"26bb0882297c2c08a752d3981145dcde55893a11df77f8aa4c19d0b9ed6e5220ed12e9fac3af13d0f0c71568f4a547d30114a6599a236806c4beee6765284408\"\n    },\n    {\n        \"secret_key\": \"0c93d99815fff8fe22b9e45aa02b3e6445ce1d6bf5a65dce3da107aa1055940e\",\n        \"public_key\": \"4d27a47b0fc80800d84d244eebb1deb4436d97633a83e67125ad52ea01685057\",\n        \"message\": \"11e877de58c134eaf4c9f1b53c3dc451d3c055f16b09622725b279768512fe10a7adb0765b689ec21d5b6efaa19f1b9d36254df0a9367f441b26bdb90b28cbc403e5074082fa1fed58e140dac97aeaf483e2c13f3cc560abffaba05b763feedb51e60698151cf56efdf1d37d6ce0564486210f052e937f2ea26f63efa5d247ff188329bb1aa83ce3f4f35a3d7dec14599e5feb7b6d5fe4296a\",\n        \"signed\": \"7dc4467abcf6431adb7ccfe868eac8cd8a615a0ff65f6a9e338375b1aae3c49a126c9eba79426d1641c6b97c3e92c194e5ee4431efa2439fd450f2cd018c870011e877de58c134eaf4c9f1b53c3dc451d3c055f16b09622725b279768512fe10a7adb0765b689ec21d5b6efaa19f1b9d36254df0a9367f441b26bdb90b28cbc403e5074082fa1fed58e140dac97aeaf483e2c13f3cc560abffaba05b763feedb51e60698151cf56efdf1d37d6ce0564486210f052e937f2ea26f63efa5d247ff188329bb1aa83ce3f4f35a3d7dec14599e5feb7b6d5fe4296a\",\n        \"signature\": \"7dc4467abcf6431adb7ccfe868eac8cd8a615a0ff65f6a9e338375b1aae3c49a126c9eba79426d1641c6b97c3e92c194e5ee4431efa2439fd450f2cd018c8700\"\n    },\n    {\n        \"secret_key\": \"989e99945635192c023cc5186fc25bbaef47240775d15a56195d88cd07c3748e\",\n        \"public_key\": \"ca0beafdf731d89301f7723c5bb7e5a1c3ff3eab27c97d711bcd76e42054bee4\",\n        \"message\": \"c48414f5c757d03c523ef3f3b8510771b0ff3b4b97de279625d349ec185a29927a66b9593ba19338c2f5e4131f1ac07ea46d2c1b6e4ab5229280b2e2bb9d140d1ef7af7b1692bf2d097b80f811adcfa95d5cbf9eee92a1641c552b4be4a0d734f0afd470b9d7f4e45778951e21fc534f200a128b96adb8373f10cecec2dac2996a062fb3c294315965a9d5d7b077c4b013c64a38429769d23eab\",\n        \"signed\": \"aef756bfb8a7266e17d15f3f11ee50ed25be420e95a0742271ebd12294e2cb96ead083b8ff0b829d2edeb14da86e402ef25e6d4a5a7958c184ed10c176cb570bc48414f5c757d03c523ef3f3b8510771b0ff3b4b97de279625d349ec185a29927a66b9593ba19338c2f5e4131f1ac07ea46d2c1b6e4ab5229280b2e2bb9d140d1ef7af7b1692bf2d097b80f811adcfa95d5cbf9eee92a1641c552b4be4a0d734f0afd470b9d7f4e45778951e21fc534f200a128b96adb8373f10cecec2dac2996a062fb3c294315965a9d5d7b077c4b013c64a38429769d23eab\",\n        \"signature\": \"aef756bfb8a7266e17d15f3f11ee50ed25be420e95a0742271ebd12294e2cb96ead083b8ff0b829d2edeb14da86e402ef25e6d4a5a7958c184ed10c176cb570b\"\n    },\n    {\n        \"secret_key\": \"6bdbbe06d9f4219eea6403a357b25e561992fae0f0f614561dd86d23de415a43\",\n        \"public_key\": \"ed52dd1cce32d9b485e0940746421d36b9fde6cdf0211545b634044d4b3cb8f1\",\n        \"message\": \"582ada13d69293e49bbd461032dfea1ca2025b52e013a33a0387fcfc5f7c0b8ec955982607fc901e1b7f636a9d371e1f91fe476bdd44856e275d67efa14238164354c231124c84de8f5b89d5a58ea6744b4d3b3d7906905233cce694a64d696f5a7024fc9033b1ce390899a3b441a48e53c7c9b30ba12e7d61f35f15e658c7cc4407e2f689ea8a55d01bf5dbacb11954754f920f09dbd48409bbb5\",\n        \"signed\": \"950206605b0f417c90843e2c8d8e66c828bb10b99b36eeeee8caf2e0e5484d93fe02bf533405f4bb74a50e5585fa0daef4821f0301d01b46321baa31e1f08d03582ada13d69293e49bbd461032dfea1ca2025b52e013a33a0387fcfc5f7c0b8ec955982607fc901e1b7f636a9d371e1f91fe476bdd44856e275d67efa14238164354c231124c84de8f5b89d5a58ea6744b4d3b3d7906905233cce694a64d696f5a7024fc9033b1ce390899a3b441a48e53c7c9b30ba12e7d61f35f15e658c7cc4407e2f689ea8a55d01bf5dbacb11954754f920f09dbd48409bbb5\",\n        \"signature\": \"950206605b0f417c90843e2c8d8e66c828bb10b99b36eeeee8caf2e0e5484d93fe02bf533405f4bb74a50e5585fa0daef4821f0301d01b46321baa31e1f08d03\"\n    },\n    {\n        \"secret_key\": \"d761c8c5a9601b9145b7d051249b004107e452e563100c6c788038c9ee8adad7\",\n        \"public_key\": \"e6488775d6407efc7b2bca890a7fc62266fc54cdac893343b4f59a196d948898\",\n        \"message\": \"84ead5eabd2fd4b7c79a9a928ab8ee0a16a5fd667a057f8a254663d56daae156d1a49affb2996137b9d8b340e635732f9d2b4c60218442541e72d2b00e1ee7a73c3f67caa499fa9d070b57d076dcde96b0764723c3c659c7a00c1b78b15ccc2223890b51067fc81e23e9458ab0683ba626a53d0c3793a58a9857bb44b3bd85bb6ce53a85694e7f53cc1bd46d50eda37d81f5381b513d1f38339d291b\",\n        \"signed\": \"7ab78b64e6db359a2dc8302e1092ed66fa736b536253a1cd90fdb8c10efd78300225e191963599ba549cc859209df0ff61cd069b03d254e6e7d76c798440f90784ead5eabd2fd4b7c79a9a928ab8ee0a16a5fd667a057f8a254663d56daae156d1a49affb2996137b9d8b340e635732f9d2b4c60218442541e72d2b00e1ee7a73c3f67caa499fa9d070b57d076dcde96b0764723c3c659c7a00c1b78b15ccc2223890b51067fc81e23e9458ab0683ba626a53d0c3793a58a9857bb44b3bd85bb6ce53a85694e7f53cc1bd46d50eda37d81f5381b513d1f38339d291b\",\n        \"signature\": \"7ab78b64e6db359a2dc8302e1092ed66fa736b536253a1cd90fdb8c10efd78300225e191963599ba549cc859209df0ff61cd069b03d254e6e7d76c798440f907\"\n    },\n    {\n        \"secret_key\": \"c5e0c7a7bb8b7ca07bf0a05ea67eff6deebfe3714ee3e1a227f4dc8e242a2fa0\",\n        \"public_key\": \"5135efcd9052bec57a4431caabe82680eec0a33afd59b30203b280ba12be485c\",\n        \"message\": \"3770a6786652c4b78a043edce07f3e204d81997c42afc22331f75a5494a826d7cb69ab4314a473721058a1839981d5b7022d0cd8670377daf3320476d25b9f559561d66ee0a709fe17361e2a52898f5753c4fb43bd0c98b368f512adc09cd927c6622676926d8c2d91a14aca32f226f70036c1c858bcffc2b59f54c1c37bf81eb52ecb3f00da602c94361b52a5afddbfd7e05036e377503050333be512\",\n        \"signed\": \"2e7fdeb3484d0a5e8dce94448979496b0642cabc3733a51f8c3c5c51c19ae319018da91091c2385f2f4e9a59edbca2abd0d085ee40d3f0d42061a5a9832a370c3770a6786652c4b78a043edce07f3e204d81997c42afc22331f75a5494a826d7cb69ab4314a473721058a1839981d5b7022d0cd8670377daf3320476d25b9f559561d66ee0a709fe17361e2a52898f5753c4fb43bd0c98b368f512adc09cd927c6622676926d8c2d91a14aca32f226f70036c1c858bcffc2b59f54c1c37bf81eb52ecb3f00da602c94361b52a5afddbfd7e05036e377503050333be512\",\n        \"signature\": \"2e7fdeb3484d0a5e8dce94448979496b0642cabc3733a51f8c3c5c51c19ae319018da91091c2385f2f4e9a59edbca2abd0d085ee40d3f0d42061a5a9832a370c\"\n    },\n    {\n        \"secret_key\": \"11bb4748d2547e6196be823c9be7aa18150c204b12ca8d73c1bd46b11a54b475\",\n        \"public_key\": \"efeb42da28d764966403dd300d9f9451b258ab1c80df06fe5943153f5301cccb\",\n        \"message\": \"f4b765b258ba35b427525c7f10a46f0bccd357ec1ad52a5b139417a9d3894c512d89eb88e681b1f30aac4c115ccf36545e83f37834c82e8300cc1eb289af4375968c29c0ffefb40e156c20c0432669ac8dc0a83c13b1e855a84ad0133c40c82c87ee1e7dd4084d741c80de8a7a9f7759e843a562099c4d7df875352039ff4d3824651386c97759ff7dba52064e6d3112e080819aee8ce723a1a2aa464d8a\",\n        \"signed\": \"44c58da49d2365d27029d1eebb3bebf7c032d858aa07e0756b1c26a5412d22691176031341ad37d7bb7843289eb39db491584c1b2a1da2e4a2649c2293826606f4b765b258ba35b427525c7f10a46f0bccd357ec1ad52a5b139417a9d3894c512d89eb88e681b1f30aac4c115ccf36545e83f37834c82e8300cc1eb289af4375968c29c0ffefb40e156c20c0432669ac8dc0a83c13b1e855a84ad0133c40c82c87ee1e7dd4084d741c80de8a7a9f7759e843a562099c4d7df875352039ff4d3824651386c97759ff7dba52064e6d3112e080819aee8ce723a1a2aa464d8a\",\n        \"signature\": \"44c58da49d2365d27029d1eebb3bebf7c032d858aa07e0756b1c26a5412d22691176031341ad37d7bb7843289eb39db491584c1b2a1da2e4a2649c2293826606\"\n    },\n    {\n        \"secret_key\": \"7452a00156d794edebff4adb1f7a7eec26217fef67c3d268352b2b5460a7dc25\",\n        \"public_key\": \"5f4dc338cfbd384b5f1c14c226701446b52b1e3e2a3cba1a40ee2825080d1de6\",\n        \"message\": \"8c4ee2867656e33f5269414d77b42d8e4750dba93c418bacca10938cc3b570c6603d52c2344488607b2f934f6d269fcb2ad966219b1ab11472f42c672ce20592490ec5baf6a2d2fc8a3ee35374b1902fdefc7870b1b626fa46b12b6cee241f601a9b3fe4c50812e573e6752ce2c7644e3367a6a6b77758d8e4934b58af23abae8fecac25edd734030ee7cf39907e3eed8186a19a807103a9fc49d38f4c8460\",\n        \"signed\": \"a8f9fa24a3dea1022e73f0d88b1c37d06d0f0b20bbff0ecdb4a40c86d7e475617c03570a7419d74ba0f1327096bf19f0d0cf9f51d483112f26922378682f48078c4ee2867656e33f5269414d77b42d8e4750dba93c418bacca10938cc3b570c6603d52c2344488607b2f934f6d269fcb2ad966219b1ab11472f42c672ce20592490ec5baf6a2d2fc8a3ee35374b1902fdefc7870b1b626fa46b12b6cee241f601a9b3fe4c50812e573e6752ce2c7644e3367a6a6b77758d8e4934b58af23abae8fecac25edd734030ee7cf39907e3eed8186a19a807103a9fc49d38f4c8460\",\n        \"signature\": \"a8f9fa24a3dea1022e73f0d88b1c37d06d0f0b20bbff0ecdb4a40c86d7e475617c03570a7419d74ba0f1327096bf19f0d0cf9f51d483112f26922378682f4807\"\n    },\n    {\n        \"secret_key\": \"880ef106733f04e76195eba280b3fadda0f25dcf96a6a99c8ccf842c68afdae5\",\n        \"public_key\": \"70cee33d41c728ce7b141931e6e8524567d7601eb79f67fdcd07b9d682c650f0\",\n        \"message\": \"f4f38d077f2b03da821bd36fde673d666e52f4832e1c0dcfeef049328acb7bd71ad2bfc49c123516e196c470df0847b3848a45a2c69bea03e2afa7e58205b63b523814fc8e242f059c69ff7e40f97be8125b70a54fdaf35aeafac79114a7b419e6bb9e70bf07adb559819600dc25e51b4b700d27ca5472a0e7cbbfd14e099faa3a72002da538cbe45d621ef0d5252ba29d83f8b3ec8389c9ceb6c6b2e8d8a20f\",\n        \"signed\": \"ff6caedd8a468aa07d4c6e7131bbda76182ba958649376e711f44c7bbacba6077bea878ba5949cdeeef05cfd4983b0057d275ea3e18c32659468c30c47ac8f0bf4f38d077f2b03da821bd36fde673d666e52f4832e1c0dcfeef049328acb7bd71ad2bfc49c123516e196c470df0847b3848a45a2c69bea03e2afa7e58205b63b523814fc8e242f059c69ff7e40f97be8125b70a54fdaf35aeafac79114a7b419e6bb9e70bf07adb559819600dc25e51b4b700d27ca5472a0e7cbbfd14e099faa3a72002da538cbe45d621ef0d5252ba29d83f8b3ec8389c9ceb6c6b2e8d8a20f\",\n        \"signature\": \"ff6caedd8a468aa07d4c6e7131bbda76182ba958649376e711f44c7bbacba6077bea878ba5949cdeeef05cfd4983b0057d275ea3e18c32659468c30c47ac8f0b\"\n    },\n    {\n        \"secret_key\": \"a2d88f37ecc2b2c05dd6cb3159962c5f646a9815b2fb37791fc7b606e2913ed5\",\n        \"public_key\": \"58dd67d7a15d4ca0341a4c869566cad8c4ee16e583a10b4824173b08290d92d1\",\n        \"message\": \"d1b87e9e886dfbbdc8ca8ab9010ecf9bbaf23f72ab3cbe769db1d43c2a474a81651c464e9fb92734634641c9485a0239b3110771e7f75e05252e4d8f4c0aa1ba08626d7e96317c20acde2ad99b23bdadfd6f17468eb402ec5eefa57b47caf972b3dd21d89f0e2989ff87d51ed2e2d639c1644e698cbe0221b8e179f3cfb04a20cb2470216a6882fb4ff799e11536cf64219f0c075176bc7cf0f6c5b7925fcd6155\",\n        \"signed\": \"ccf2400cd673e1effd20161d7b68a5fb87c1e99d3635d78c2da1b509fac33346c069163a6c46c7826a48bbbd03b05e6e2351fa62bf89bf7ccf9a9024bd157d07d1b87e9e886dfbbdc8ca8ab9010ecf9bbaf23f72ab3cbe769db1d43c2a474a81651c464e9fb92734634641c9485a0239b3110771e7f75e05252e4d8f4c0aa1ba08626d7e96317c20acde2ad99b23bdadfd6f17468eb402ec5eefa57b47caf972b3dd21d89f0e2989ff87d51ed2e2d639c1644e698cbe0221b8e179f3cfb04a20cb2470216a6882fb4ff799e11536cf64219f0c075176bc7cf0f6c5b7925fcd6155\",\n        \"signature\": \"ccf2400cd673e1effd20161d7b68a5fb87c1e99d3635d78c2da1b509fac33346c069163a6c46c7826a48bbbd03b05e6e2351fa62bf89bf7ccf9a9024bd157d07\"\n    },\n    {\n        \"secret_key\": \"42aafd0ae26df1e7aa0276860d752783af97280439bb23eae46e3f84caac78de\",\n        \"public_key\": \"daa2350adb55dba9df7d7af5101998fe515d311c3cba3eeab9138233190c3b4e\",\n        \"message\": \"72131b80ad599b6f5ff698547d16e7499d71275e4e9b30526a5aac0b0c8b14fa4a540cfb1145fc004418bcd318c1a70e6269a3fb69baed86f363f5b8f97f569c20d4f4990e7bb4d0c39921268d636ed0554bd62acfcacd3b8e030217aafac3044c037e0f94da18c6b9a0932c3c5875d3a93fbdadcf67964eec9ec2be69b48f020f6c9874de5f8a5167b5ee024a2c2efd0cdcd2acd8c1f787814141e30b38b163175b\",\n        \"signed\": \"116143650b6c133d617859db2429c2913579790b2197d7b7b1b4962b328721032ceeca58b2d56439e233bb84dc525e284ff8df2bde1db4986fafd21b3d7d6a0a72131b80ad599b6f5ff698547d16e7499d71275e4e9b30526a5aac0b0c8b14fa4a540cfb1145fc004418bcd318c1a70e6269a3fb69baed86f363f5b8f97f569c20d4f4990e7bb4d0c39921268d636ed0554bd62acfcacd3b8e030217aafac3044c037e0f94da18c6b9a0932c3c5875d3a93fbdadcf67964eec9ec2be69b48f020f6c9874de5f8a5167b5ee024a2c2efd0cdcd2acd8c1f787814141e30b38b163175b\",\n        \"signature\": \"116143650b6c133d617859db2429c2913579790b2197d7b7b1b4962b328721032ceeca58b2d56439e233bb84dc525e284ff8df2bde1db4986fafd21b3d7d6a0a\"\n    },\n    {\n        \"secret_key\": \"b69c33b11ba67841c3d4e6f9234e35370a28b47662ac560b27c078b66ab1b021\",\n        \"public_key\": \"9df68e9acf67379261744db5d1e377892f2b692ed5a38b37073c04de5d226737\",\n        \"message\": \"f9ea126d3ab21961aa2433900a3982b83e0ef86d52d13440afa4817f9b822fb582cc3932bf450d4677c9188181fe7526ad6fe5abc61d0ae759f215013c0b2b41064cb6278ba7e39e2f4c10d6cc9605b3869e169d7da42e88eb857870fe6118bb02bc08c8055f0c189b62f79fb146b4c543aa30cc0cd57f037e9ef7a63711f66e6f2878931702202702614277d513f0850b758549336b30cf40ab8bd460e60e12deed04\",\n        \"signed\": \"24368fee5bd848b4c661a3be4f310cfc436e79ec4a78501b81095fe51614231b6ca1ab1269996ad2e98e299781af8e29804b24fe5679ca3ba650c5c4cc58ce01f9ea126d3ab21961aa2433900a3982b83e0ef86d52d13440afa4817f9b822fb582cc3932bf450d4677c9188181fe7526ad6fe5abc61d0ae759f215013c0b2b41064cb6278ba7e39e2f4c10d6cc9605b3869e169d7da42e88eb857870fe6118bb02bc08c8055f0c189b62f79fb146b4c543aa30cc0cd57f037e9ef7a63711f66e6f2878931702202702614277d513f0850b758549336b30cf40ab8bd460e60e12deed04\",\n        \"signature\": \"24368fee5bd848b4c661a3be4f310cfc436e79ec4a78501b81095fe51614231b6ca1ab1269996ad2e98e299781af8e29804b24fe5679ca3ba650c5c4cc58ce01\"\n    },\n    {\n        \"secret_key\": \"7b63613f6dae01cdcd5e6b37686971cd8d8a99542f6329a12854a9d8ff8105ac\",\n        \"public_key\": \"72ec43faf34d8730177d1f0743c74c20bf72c2394b8a7d471ffe2a04ab00811c\",\n        \"message\": \"1816488f1fc83e1ed5911637dd42ba2077657dfe1ae422ad0aee59df9dd56a2763c2dd0ef61a12bb825b0dac1eda5fbb691c5ed58f3fb325050b4563a4042099982fffa5d6ed742d95823da8e1787cf746ef63b3fbb0e88a6c0beae4f7318366936b4917f507336068b194680900a7bf4a6fb69a5c387b97e31bc7f9be53c2a89e3651ce1de41b10e921b206ebf32e5621ef8081616dcd7a2059437efad014bb8e2c8221\",\n        \"signed\": \"76f50b2b9c2ad97bfb9499ee41928ac072da5e8bc71d0212550942332b62e70c8bfe1c722542394688decd917aec8f95353e1d72624b70ebed5d17f6c54977021816488f1fc83e1ed5911637dd42ba2077657dfe1ae422ad0aee59df9dd56a2763c2dd0ef61a12bb825b0dac1eda5fbb691c5ed58f3fb325050b4563a4042099982fffa5d6ed742d95823da8e1787cf746ef63b3fbb0e88a6c0beae4f7318366936b4917f507336068b194680900a7bf4a6fb69a5c387b97e31bc7f9be53c2a89e3651ce1de41b10e921b206ebf32e5621ef8081616dcd7a2059437efad014bb8e2c8221\",\n        \"signature\": \"76f50b2b9c2ad97bfb9499ee41928ac072da5e8bc71d0212550942332b62e70c8bfe1c722542394688decd917aec8f95353e1d72624b70ebed5d17f6c5497702\"\n    },\n    {\n        \"secret_key\": \"3558d3a74395bdcba560e2c45a91960cec6cb3edbcd30e722f7f055210f37b51\",\n        \"public_key\": \"534f43eba403a84f25967c152d93a0175ec8293e6f4375319eadf957401fbbd2\",\n        \"message\": \"be75444f9ce6be1d83af622a8c478d510127db56f1de6eb8a5126522b09fdc6ca0862cec0b8b2aafa31c17a2cc477da533d276a1ae4f8e0759d6afa0b17411b5170b52f20547c72f3e88d48cb456fe625b62feb0f81317edf1ec09ece534b9f500d4e1b1bda2db21982aa95094226ee9f5b0a65da83f91121c96b3b4010ae7826c9e80636cba00f70c3c8a279b01b95294cb850f91709f4376662a580b15ac2981afe9f854\",\n        \"signed\": \"b365b5561a13a54517cf90d88b35eb0967d6d58414b8c1547e693159e01378563654c50fb42323f09dd78ffe28056ddfa54febf44891e8a741b6a1687d728605be75444f9ce6be1d83af622a8c478d510127db56f1de6eb8a5126522b09fdc6ca0862cec0b8b2aafa31c17a2cc477da533d276a1ae4f8e0759d6afa0b17411b5170b52f20547c72f3e88d48cb456fe625b62feb0f81317edf1ec09ece534b9f500d4e1b1bda2db21982aa95094226ee9f5b0a65da83f91121c96b3b4010ae7826c9e80636cba00f70c3c8a279b01b95294cb850f91709f4376662a580b15ac2981afe9f854\",\n        \"signature\": \"b365b5561a13a54517cf90d88b35eb0967d6d58414b8c1547e693159e01378563654c50fb42323f09dd78ffe28056ddfa54febf44891e8a741b6a1687d728605\"\n    },\n    {\n        \"secret_key\": \"a35b92f244063a19bb5e3ed4d699ed2069607116d2bd08113f0d8373613f35b7\",\n        \"public_key\": \"7ec93601864ee4995a4f7abcd3dfc101e9e7f369e63de1ae68a07aa7f075b329\",\n        \"message\": \"65cd36dae0168d69974f95f09dd9a59db799f911e1a15b85a00893b8c9a3d48a2f58ac126bfaa0a606c05d94701d273abf7d68817f2c71b1c541795c4f6095e26c9dff803f032f75663fd1698edd97ff3a0e72e1b7c9948b08bacb5f7de502b2fea67ca2fef190d60eae92d15158da444a49d2e9d5a573e8e177e8bbf7e6c49f907136e71d2a66cb07636d48768ff417c8beccf4323181fefb3124e434049ea45dd5019e40b4\",\n        \"signed\": \"a23dbe3757e478dbc84d3db3a933b0428cedb6b01b86d8d73f3959878dae6f0588f505cd4d39f2ab4677b64805d629652a22529825c3a91d043749fc71f0370665cd36dae0168d69974f95f09dd9a59db799f911e1a15b85a00893b8c9a3d48a2f58ac126bfaa0a606c05d94701d273abf7d68817f2c71b1c541795c4f6095e26c9dff803f032f75663fd1698edd97ff3a0e72e1b7c9948b08bacb5f7de502b2fea67ca2fef190d60eae92d15158da444a49d2e9d5a573e8e177e8bbf7e6c49f907136e71d2a66cb07636d48768ff417c8beccf4323181fefb3124e434049ea45dd5019e40b4\",\n        \"signature\": \"a23dbe3757e478dbc84d3db3a933b0428cedb6b01b86d8d73f3959878dae6f0588f505cd4d39f2ab4677b64805d629652a22529825c3a91d043749fc71f03706\"\n    },\n    {\n        \"secret_key\": \"72d4a564ca15499b5e4e75d8ac0f28217d32114a0c649a7c8eaadd0cc78c520b\",\n        \"public_key\": \"c766bd73837c4faa5215502f1efc90c003f711bbef55170091028a34493408a9\",\n        \"message\": \"6c7e7b62eb244a45d78436e2970dcd6c0f7db82297a86140ea58dd22c2195adbc956d4c4ec05354b21efe24cfcfe10e17622368848180d2c4680cc215e8ceea6cce222161f1e092239253b9746f7887df2425ab5a880bdba98153be786dc838cbeca016b1d06524bd6bfba809a8bb37adab15d42415f86ec0358365ea87b8150b05441d9d49846871485caae6de359736c27189736d8f1765f3e5c5f6b92168396390bee94cfbd\",\n        \"signed\": \"8fc4f179330b642dd86ca9362651b83b006d8375ccef811d3c6706f91594651df2769953723046ccb9bfe66a667e0d11fc3ea2d8226234fdd5164765260f7b056c7e7b62eb244a45d78436e2970dcd6c0f7db82297a86140ea58dd22c2195adbc956d4c4ec05354b21efe24cfcfe10e17622368848180d2c4680cc215e8ceea6cce222161f1e092239253b9746f7887df2425ab5a880bdba98153be786dc838cbeca016b1d06524bd6bfba809a8bb37adab15d42415f86ec0358365ea87b8150b05441d9d49846871485caae6de359736c27189736d8f1765f3e5c5f6b92168396390bee94cfbd\",\n        \"signature\": \"8fc4f179330b642dd86ca9362651b83b006d8375ccef811d3c6706f91594651df2769953723046ccb9bfe66a667e0d11fc3ea2d8226234fdd5164765260f7b05\"\n    },\n    {\n        \"secret_key\": \"2e5aaab298e66c2dc1d77ea7421ff895255f9d900db0450d63f9f79c1a7013cf\",\n        \"public_key\": \"0381f3f19045719b9e8ceb562f0e965dc07b09f371a963a281c749c2532f654a\",\n        \"message\": \"3df0e54c711e3132d7ae953deb7b66869ee531ee40b63ce693206cdb2f4bda0a2569e913ac3e6532c5d9648efd4627780fb8a31d107e033f054d19ed8b7c49dc407d2e949de25f99307221d35843f6d5eb7de5cdf41b91dbbf34cb6c9c530021014b56abc44ac2300313615608a7b4a235e99c14cef8050887032209488b9eaeaa82c09405fc75bec94dd42d6ff1b599a63ee5742f3364093ac92cabab3035822aa867ae56dcc99d\",\n        \"signed\": \"7c7430305b361a9e35b2780c4d4408071b2130931d39830ec8d313aafbc83a65dae19cb747d9d1c4ce3f359cc824ea8c92f66a42b8614e7848b884ac8aa4ae023df0e54c711e3132d7ae953deb7b66869ee531ee40b63ce693206cdb2f4bda0a2569e913ac3e6532c5d9648efd4627780fb8a31d107e033f054d19ed8b7c49dc407d2e949de25f99307221d35843f6d5eb7de5cdf41b91dbbf34cb6c9c530021014b56abc44ac2300313615608a7b4a235e99c14cef8050887032209488b9eaeaa82c09405fc75bec94dd42d6ff1b599a63ee5742f3364093ac92cabab3035822aa867ae56dcc99d\",\n        \"signature\": \"7c7430305b361a9e35b2780c4d4408071b2130931d39830ec8d313aafbc83a65dae19cb747d9d1c4ce3f359cc824ea8c92f66a42b8614e7848b884ac8aa4ae02\"\n    },\n    {\n        \"secret_key\": \"b636a02448003543db864b40b5d8d6dd9ad611624c9b0fc6890c51ea5592c790\",\n        \"public_key\": \"1ef360495968e56e6d3fe740b1c84c4e4490ed682deb4305afd596efb280223b\",\n        \"message\": \"4aa85aac25034f614ed44f7adcdbeeec25fcc2a9eea32ab6a8699506f7a1cad3bc892e9dce934e75b0a8cd14642b778599286cfd8f50a9e4f2edf9f9d6291a2e2979cf1806b93ed8c9a78fae199b2854a03ec406ab3f720835ee263fbbc91cb4ef0758d775fc784c7d5b251ac8937919a9e67be88c9e44cf2ec7f560269aa0f1113d91b84401db15a3c48c7dacff4939ee01babb982fb95625c6c3ad78749060551bfde8cce4fb8a29\",\n        \"signed\": \"d4ba80300d5cb51353c03f28c44fd0a424ffe1e40d78ed7bb1133e8fe4e187505293b20a391da962c6a8ac0acec9c67226af3b6195dabe39b3662294da3e0e094aa85aac25034f614ed44f7adcdbeeec25fcc2a9eea32ab6a8699506f7a1cad3bc892e9dce934e75b0a8cd14642b778599286cfd8f50a9e4f2edf9f9d6291a2e2979cf1806b93ed8c9a78fae199b2854a03ec406ab3f720835ee263fbbc91cb4ef0758d775fc784c7d5b251ac8937919a9e67be88c9e44cf2ec7f560269aa0f1113d91b84401db15a3c48c7dacff4939ee01babb982fb95625c6c3ad78749060551bfde8cce4fb8a29\",\n        \"signature\": \"d4ba80300d5cb51353c03f28c44fd0a424ffe1e40d78ed7bb1133e8fe4e187505293b20a391da962c6a8ac0acec9c67226af3b6195dabe39b3662294da3e0e09\"\n    },\n    {\n        \"secret_key\": \"5ca0543c71f568a00eedf50a9520f4c15b526e3fb0da816c29ea3d50b2f62a12\",\n        \"public_key\": \"d4a2933ce19454e331b5280100209a6ce8e569f993c2acab51dbe864c5cb2563\",\n        \"message\": \"4ef8496978d28c10abd54a26356ee55921ceb350dd4b742c4161fbeba8a1601f8ad0484b21a8cf5a294fac00ec8a6f59e3362e47bfae1e28a2e6d017c5caa75fb0f48482808037ca21476954d778ff1a0586da3ef69d6cef6d2d8df4ae7a85442a1e46c998cf407a6ad4c5463a43c248f3b6937fdbc845b60c6d85e0563cc16ba9675d364f525f669aaac95f428bb58205099f9e4a6dbbd0151fb65babe123e5393ad64026935cb488aa\",\n        \"signed\": \"436823eeff3edce5d8587d68e5473ef3d8dc9465b558b6e8e7cd3137eccc80b4c4e806edf13619d8e717e69f48d7061b68de02c8209be1f7ac26ba8edf606d024ef8496978d28c10abd54a26356ee55921ceb350dd4b742c4161fbeba8a1601f8ad0484b21a8cf5a294fac00ec8a6f59e3362e47bfae1e28a2e6d017c5caa75fb0f48482808037ca21476954d778ff1a0586da3ef69d6cef6d2d8df4ae7a85442a1e46c998cf407a6ad4c5463a43c248f3b6937fdbc845b60c6d85e0563cc16ba9675d364f525f669aaac95f428bb58205099f9e4a6dbbd0151fb65babe123e5393ad64026935cb488aa\",\n        \"signature\": \"436823eeff3edce5d8587d68e5473ef3d8dc9465b558b6e8e7cd3137eccc80b4c4e806edf13619d8e717e69f48d7061b68de02c8209be1f7ac26ba8edf606d02\"\n    },\n    {\n        \"secret_key\": \"5f87117da9bbb6091c94da6b230b7d8f6de0ed2a076413b92eacdc43abbc6897\",\n        \"public_key\": \"aa786a146226832aa73c434b0edc2d41d2558f820ab8f87e09e6cda91072b9b6\",\n        \"message\": \"2297c40a2e8365bae4c5f0630c50b13bdd9ad9770a5d9a9451d00874b023d25ecd468b96571b2f16dcb1b0d3d756c1f044fcddd1c51f27727a0369c9cf25bd6aa59551b5b07cf8f807d92b159198639704740fe6eda0f26dba7e75d4530b2800f03fb6aa677d84df75d68d4fbb64ad21001e3fc87b609b9c251e8ccb12bbca927447e2054e07688eb8a20521a52249e7b943bed60e6a93c01e3eb621f0460c18a690b6f6b66edc6e8743a6\",\n        \"signed\": \"0f19e6ea0c05f38185c01c2d6477995daf5065ba9d80173fa6bb23a774dc88b3aae879d8a62471d2d304cc3dc66278a7abcb0bb0771cd278e11e7b932e9f9b0f2297c40a2e8365bae4c5f0630c50b13bdd9ad9770a5d9a9451d00874b023d25ecd468b96571b2f16dcb1b0d3d756c1f044fcddd1c51f27727a0369c9cf25bd6aa59551b5b07cf8f807d92b159198639704740fe6eda0f26dba7e75d4530b2800f03fb6aa677d84df75d68d4fbb64ad21001e3fc87b609b9c251e8ccb12bbca927447e2054e07688eb8a20521a52249e7b943bed60e6a93c01e3eb621f0460c18a690b6f6b66edc6e8743a6\",\n        \"signature\": \"0f19e6ea0c05f38185c01c2d6477995daf5065ba9d80173fa6bb23a774dc88b3aae879d8a62471d2d304cc3dc66278a7abcb0bb0771cd278e11e7b932e9f9b0f\"\n    },\n    {\n        \"secret_key\": \"b53a644c92ba2dc7108b16833f09ad5917846437225a773d32d79c97733c0a58\",\n        \"public_key\": \"515818c69c0e0a1706b04143842f3e9e271448fbaf3a899119c32f42566ffd33\",\n        \"message\": \"13036daaee45fcfde0c53e06d05aa9c01ea94a67e86c6c538ccb283b368daf7078d3fbab580c76ecf82b4e9660f068dcbb500b80595017c5be3c448fbd8a17d97c5643197890e167b35345bf65e75b82c8d65229f2f60aae2772581bc99c49d416bc3d78746ef830f1af944f4a6715ab4ffb01591bac2857f1a9c9d1700888780006a31607338f7af7bedf6efe0b57299ac915526fe5e1e101298708c6e61b84220afe95b53f895987456152\",\n        \"signed\": \"13d2cbac7976ad27f0bf669ad588efb2c91bab8507d57fb16bfea9caff2b0964e75625c4d808d7bbb78c5b464edffe4949ecfbc8b95ff6fdb1bdca274206810013036daaee45fcfde0c53e06d05aa9c01ea94a67e86c6c538ccb283b368daf7078d3fbab580c76ecf82b4e9660f068dcbb500b80595017c5be3c448fbd8a17d97c5643197890e167b35345bf65e75b82c8d65229f2f60aae2772581bc99c49d416bc3d78746ef830f1af944f4a6715ab4ffb01591bac2857f1a9c9d1700888780006a31607338f7af7bedf6efe0b57299ac915526fe5e1e101298708c6e61b84220afe95b53f895987456152\",\n        \"signature\": \"13d2cbac7976ad27f0bf669ad588efb2c91bab8507d57fb16bfea9caff2b0964e75625c4d808d7bbb78c5b464edffe4949ecfbc8b95ff6fdb1bdca2742068100\"\n    },\n    {\n        \"secret_key\": \"d27c9eafcf88151990bb5b2fa8443e709b5fd8d78d233803322dc86d93d93295\",\n        \"public_key\": \"08e0eff529776714686196d817fdf71eb5b6e8326516ef489bfe186ac5c5bf6d\",\n        \"message\": \"77c35bda32a5967d8b302fa7a47583ceab89c9a609a667b753155fa6996f8631d0ebedfe0ac364c77e85ba37311f0de57a0dc2c1e9e400d58b424a322e1d5771e0a9fd9502ad0232ce544f07d8c66e7c3147f8607ac6189bb69066f2fad631185f457f467eba33228ecc40e894a77b571698a9bfac841a54eac5219da99c6a9125c469a22fe81f3b951433896f19ce39b373fd7e5c7b650a5ef2365ae7510b0da5e49d7c07073cf166a98387e8\",\n        \"signed\": \"c254e371445633137442eefe40ad4a82e69b1ebf48a685a2bc6ffbac126d228487b2e3537c97ef7410342091962e50c0cb85de7b39ceb41ac4078d40f340710677c35bda32a5967d8b302fa7a47583ceab89c9a609a667b753155fa6996f8631d0ebedfe0ac364c77e85ba37311f0de57a0dc2c1e9e400d58b424a322e1d5771e0a9fd9502ad0232ce544f07d8c66e7c3147f8607ac6189bb69066f2fad631185f457f467eba33228ecc40e894a77b571698a9bfac841a54eac5219da99c6a9125c469a22fe81f3b951433896f19ce39b373fd7e5c7b650a5ef2365ae7510b0da5e49d7c07073cf166a98387e8\",\n        \"signature\": \"c254e371445633137442eefe40ad4a82e69b1ebf48a685a2bc6ffbac126d228487b2e3537c97ef7410342091962e50c0cb85de7b39ceb41ac4078d40f3407106\"\n    },\n    {\n        \"secret_key\": \"70213d3a79c65d6dbba542a3679635003a682af5fa58de6b0d65bfa24184901c\",\n        \"public_key\": \"4402fb92cc1249dd1ae1690f03b3ec4f1e9bdab0de5bfd289f10296830fd403e\",\n        \"message\": \"cd6e1cd9c90f566de043d75d7244ecfdb38e8bde2f9a6cd5a4fdac72b5ede6af62d981918c5e610a38789274fa10e527f85fad209b76ca1c281ad5890f9c96d35de522f1ddccb539b8798a0067acdd45b6e344a5d9a97731f545ffa4b17b875c67b48e9d4c4ba72c98a4505583fdbf1e12f22b5a7a494746cc9b6c1b571906c67fcc883a9c15a3806875b659e5816b4276c3190e25cc1ac3de47bf99c49965388f54f3ef8eb569906c6008e5fbbd\",\n        \"signed\": \"5b6ce2774d400ecea8a808f5fd0a797ffc6116752376cd7bfa3b2cca3a84d5593f5c03ad3eec1d89532275c47b7ce2a0e9c59cc4028a8a65e5bb9097ea71c208cd6e1cd9c90f566de043d75d7244ecfdb38e8bde2f9a6cd5a4fdac72b5ede6af62d981918c5e610a38789274fa10e527f85fad209b76ca1c281ad5890f9c96d35de522f1ddccb539b8798a0067acdd45b6e344a5d9a97731f545ffa4b17b875c67b48e9d4c4ba72c98a4505583fdbf1e12f22b5a7a494746cc9b6c1b571906c67fcc883a9c15a3806875b659e5816b4276c3190e25cc1ac3de47bf99c49965388f54f3ef8eb569906c6008e5fbbd\",\n        \"signature\": \"5b6ce2774d400ecea8a808f5fd0a797ffc6116752376cd7bfa3b2cca3a84d5593f5c03ad3eec1d89532275c47b7ce2a0e9c59cc4028a8a65e5bb9097ea71c208\"\n    },\n    {\n        \"secret_key\": \"5d540b3b14f0c0175c047eaf026c9070659ef13e9d28e0c5c516a428269b14eb\",\n        \"public_key\": \"1d2d4d551a57c6fb2b04181049d4039d575cf80c0bc6ec7033067f27309344de\",\n        \"message\": \"e4c9e8706898cad4ac68d73c130efa04a54f8ca25919ea6bfaa54c8c720ced854c5e9509102c7b885aeddffbd1b7f2c5922583677ac9eea9a108c7e83e8871aed5a084f5440b0f391ad7ffc6bab4574af1b96770f4370e8e988e85ecb1a8d6034fc3d7f49f7422023b9dab5d0c16beab5f5d37b0a4d7de197ad87cd4ff8ce78eb12e1daf739d8b47ab380abe9093356db5b59717751a49e1948472fdacc259ffffc8c1dbae592607d4ec71cc6a8f6b\",\n        \"signed\": \"32527da755312889935dd5ee91b1bb117a5d377dd23ef5b7e15baffae9a54391a3fd234bdce073e098c58d05bf195b4c3cc63972383ba4b51072971aebcb620de4c9e8706898cad4ac68d73c130efa04a54f8ca25919ea6bfaa54c8c720ced854c5e9509102c7b885aeddffbd1b7f2c5922583677ac9eea9a108c7e83e8871aed5a084f5440b0f391ad7ffc6bab4574af1b96770f4370e8e988e85ecb1a8d6034fc3d7f49f7422023b9dab5d0c16beab5f5d37b0a4d7de197ad87cd4ff8ce78eb12e1daf739d8b47ab380abe9093356db5b59717751a49e1948472fdacc259ffffc8c1dbae592607d4ec71cc6a8f6b\",\n        \"signature\": \"32527da755312889935dd5ee91b1bb117a5d377dd23ef5b7e15baffae9a54391a3fd234bdce073e098c58d05bf195b4c3cc63972383ba4b51072971aebcb620d\"\n    },\n    {\n        \"secret_key\": \"ca41769caf1717b4e45c93c121dc82a534fbc6ec0986662c3222d71492bd1176\",\n        \"public_key\": \"af3f89f6187dbcf9217750c67ef89ed47b039f9eb062ffec9df64ab52b0b45cb\",\n        \"message\": \"9de8476c5813848ab1451537841cc178002181a2182af305b12e5f7c3b1d56b22cf46ae6276d1826ec0a8c9a7d9f68083b7225bbfaefce82b3b64594052a7700f309233a79fffdfccc5c21400c91cc0e418d5141d486b5219901d6dd2447c1f7b7cf5a0879e70e1dd658d0f2ecf31ebeee11a5c74440c63b9d8b45318c3465d7ff03365edd0385edf80d4fded51f0f7533ee4099f19e93bc9d08dadcd13485db239522ffc81e2c051f8796d62e979fcf\",\n        \"signed\": \"5cda872f7ed6d7c90218ac10bee8e214f3b34d15d25c39255ec9e6b0177aa3cb7368d11cb8ed6ff5cf0c04281d06bc4272b8bc09c23f6f4cd5a810ddc7b9c1039de8476c5813848ab1451537841cc178002181a2182af305b12e5f7c3b1d56b22cf46ae6276d1826ec0a8c9a7d9f68083b7225bbfaefce82b3b64594052a7700f309233a79fffdfccc5c21400c91cc0e418d5141d486b5219901d6dd2447c1f7b7cf5a0879e70e1dd658d0f2ecf31ebeee11a5c74440c63b9d8b45318c3465d7ff03365edd0385edf80d4fded51f0f7533ee4099f19e93bc9d08dadcd13485db239522ffc81e2c051f8796d62e979fcf\",\n        \"signature\": \"5cda872f7ed6d7c90218ac10bee8e214f3b34d15d25c39255ec9e6b0177aa3cb7368d11cb8ed6ff5cf0c04281d06bc4272b8bc09c23f6f4cd5a810ddc7b9c103\"\n    },\n    {\n        \"secret_key\": \"fedd63ffd4cfbf618894962e121a9025eea318a80a1adf169d6490445d2e02a0\",\n        \"public_key\": \"542f2244bdb7d84b87e628a8e6a12f17bf74a9a6d0ea46c595dbfdc680c04b26\",\n        \"message\": \"2e2ae584641be03dd48f9c618077aeaa18212a4241f0c0194ed23e370d741a3ae11a5fec3b040c16eafa4ac8d18abaa7ce8f286967337189f0495ffdd61995cde31dd8dfc3df5700b57a7a29980e9c823fee85d61451176729e72787c6109b47359b93dfd62e1e5a2d642c057242dae500a94ca1a93bc57be1ade76fe4501c0f6377ed0e9246179aecdd9946b671e8190e1ed23f966e96409b948222d8ea5839de904fc51348073b8f40edbd9b4a4b2275\",\n        \"signed\": \"ed59d9e23dec3494b0fbc5d10cd02bab86b3eb35abbf9e4d4a926479f134583a44ce72dc4122aca377a4072b7156462b74e8df46b686698636836ef203179c072e2ae584641be03dd48f9c618077aeaa18212a4241f0c0194ed23e370d741a3ae11a5fec3b040c16eafa4ac8d18abaa7ce8f286967337189f0495ffdd61995cde31dd8dfc3df5700b57a7a29980e9c823fee85d61451176729e72787c6109b47359b93dfd62e1e5a2d642c057242dae500a94ca1a93bc57be1ade76fe4501c0f6377ed0e9246179aecdd9946b671e8190e1ed23f966e96409b948222d8ea5839de904fc51348073b8f40edbd9b4a4b2275\",\n        \"signature\": \"ed59d9e23dec3494b0fbc5d10cd02bab86b3eb35abbf9e4d4a926479f134583a44ce72dc4122aca377a4072b7156462b74e8df46b686698636836ef203179c07\"\n    },\n    {\n        \"secret_key\": \"38f2184eaa553656ee2902706bcec4acb5af25157ca0f6a2d48de85285fa3bc0\",\n        \"public_key\": \"7ff03fb4c82e9c15d659df424b3e73ed1d78006f3e0b79eb64d98c13aec6ba37\",\n        \"message\": \"c2df77c9e479f61983b6c7483ef93fb85a103b213923926523065ebff2257e85427e05cdc27582ef6c16be353a3b250372d6370eecb6c8962917eb656f2641690189d172a111051557abc2494e32cab65ed0633affe92408b55c4ed8af65e2c5e7aab887a3cc8d28c52e9e1336d0b7bb3fe2cd843e7fa1680342f8a4aafa02c4ab252f08c3d46d5f00fd01484263ee635284f6db26d6298de5b0dd238da40a8d2a93376da0302783a0e3be23d9e7f990d25b\",\n        \"signed\": \"4a6413c2c87f2b3856a8decbce493adeae0c69c94134707fb0f18f3049fd3e3d051abdb9d4bee253c6107c02d57ad7cc9f3101db660afac2b7981938e9564f01c2df77c9e479f61983b6c7483ef93fb85a103b213923926523065ebff2257e85427e05cdc27582ef6c16be353a3b250372d6370eecb6c8962917eb656f2641690189d172a111051557abc2494e32cab65ed0633affe92408b55c4ed8af65e2c5e7aab887a3cc8d28c52e9e1336d0b7bb3fe2cd843e7fa1680342f8a4aafa02c4ab252f08c3d46d5f00fd01484263ee635284f6db26d6298de5b0dd238da40a8d2a93376da0302783a0e3be23d9e7f990d25b\",\n        \"signature\": \"4a6413c2c87f2b3856a8decbce493adeae0c69c94134707fb0f18f3049fd3e3d051abdb9d4bee253c6107c02d57ad7cc9f3101db660afac2b7981938e9564f01\"\n    },\n    {\n        \"secret_key\": \"8bfca48462d2536f74b84f6af59f5d8582ff8f7ec28745d672e72eb72e79d3e9\",\n        \"public_key\": \"9d10d275c3d3fe459f7fe2901bce389191cc8483c0f51140d9c62b08fade81bb\",\n        \"message\": \"81ee4cb9c45da691dacd7dd09aff59737267bb55c3ade1ba32c17b7d0d2d0c6079c39d5fd5b29ba5f9c1762097709843eee5612bd20bc8185bf64d5c934184e13624e6f877a2a5dda15c0df62afbb97057cc91cac9a18406a0e0109cc39b2e3f812e227a4062d5ef81c92c22a7dc797c845d71eb6ea9e42ec8417fba90a96d2bb1439418330b4bb2f99c6d63d304a0e506dca9653e5de0dd56e309db1a76a0faabab163774f000088cef3d1b7a6cf661d2e1d9\",\n        \"signed\": \"44d77e439ef6ca5eb940c60ff8732ddc16269ea023bb2613bd447eba7fd69851226c4819ce8d44985a49f3f41ac7af33c47ffe5f89304a3256e445f8d686e30781ee4cb9c45da691dacd7dd09aff59737267bb55c3ade1ba32c17b7d0d2d0c6079c39d5fd5b29ba5f9c1762097709843eee5612bd20bc8185bf64d5c934184e13624e6f877a2a5dda15c0df62afbb97057cc91cac9a18406a0e0109cc39b2e3f812e227a4062d5ef81c92c22a7dc797c845d71eb6ea9e42ec8417fba90a96d2bb1439418330b4bb2f99c6d63d304a0e506dca9653e5de0dd56e309db1a76a0faabab163774f000088cef3d1b7a6cf661d2e1d9\",\n        \"signature\": \"44d77e439ef6ca5eb940c60ff8732ddc16269ea023bb2613bd447eba7fd69851226c4819ce8d44985a49f3f41ac7af33c47ffe5f89304a3256e445f8d686e307\"\n    },\n    {\n        \"secret_key\": \"d7480d4272bcb1557b1bbee04915c126a52ca6d6a8bb5314a0e1a52b59bfc99c\",\n        \"public_key\": \"99c839d36d8f5b8652618ed7b0fe9ec3d94efff4c453c540631476a5979bbbe0\",\n        \"message\": \"615cc19f942017365ba8bfa256ceccc85ee289a1c34bb1442acc0716c7fc2caeb76a9de19adec106371e47a30d2e1239ce1f7dca25526d604bdd647659d942bcbac368911349c3b946a97da10a42dbcf3c73416d2e6ba22bd29d9f705672e9e338944cef01ad21f009742e07bcd888ca31e1ee953e8c1b1fd954b7dcf1a0b1d5a069065a66cb721adc020f4efe1abdd16742746939285780d753137ae0140bb410fb6ce33676c27aeec593a88cbc73afd9f40511\",\n        \"signed\": \"e04dc8442d352173e931818e290858de85688a4649ea3e3c3ae74edaa54ad01b64622ad8a090b6ad60adfd01881882828d39078bb5b2714fd3ea8397a342fd04615cc19f942017365ba8bfa256ceccc85ee289a1c34bb1442acc0716c7fc2caeb76a9de19adec106371e47a30d2e1239ce1f7dca25526d604bdd647659d942bcbac368911349c3b946a97da10a42dbcf3c73416d2e6ba22bd29d9f705672e9e338944cef01ad21f009742e07bcd888ca31e1ee953e8c1b1fd954b7dcf1a0b1d5a069065a66cb721adc020f4efe1abdd16742746939285780d753137ae0140bb410fb6ce33676c27aeec593a88cbc73afd9f40511\",\n        \"signature\": \"e04dc8442d352173e931818e290858de85688a4649ea3e3c3ae74edaa54ad01b64622ad8a090b6ad60adfd01881882828d39078bb5b2714fd3ea8397a342fd04\"\n    },\n    {\n        \"secret_key\": \"3c2d3650735b41ef9006bb45e4be2e0aa5cde851aeac421ee9c1b492d87aa18a\",\n        \"public_key\": \"3e46ddce298844fcafa00a1b47eaf3de70596df1bbee3c809d1be7dd94080e34\",\n        \"message\": \"1425d8d218da1a10a80b6a9c3c2750efe41657984abd5100f451ba949db01046b7126be8402334ed57528bac05622553a86b726722695a8fb331d8565417c4ff0f251a320ad06dedbb750def35d521c3c4cd571a45ada8450653d5e81fe0beb53aaae787b3eb653c2381ed55aaf2590ee5ed8b6626f1c4b0430a54f39658624e6635fefc98fee8fc3e1cc7ff3dd420de9da11a62fcae0e0cb454fc6f7df03954291d26202f1b188b657b3bae07389449b75e67422f\",\n        \"signed\": \"3f2af01ad5377ac39040d41a41e36e7b93fa7235b841791f432ecd7f91a3b21ab7196c883ad5a7db446f6c06672460f3f63ef863d9432be9caeabb79e87e22081425d8d218da1a10a80b6a9c3c2750efe41657984abd5100f451ba949db01046b7126be8402334ed57528bac05622553a86b726722695a8fb331d8565417c4ff0f251a320ad06dedbb750def35d521c3c4cd571a45ada8450653d5e81fe0beb53aaae787b3eb653c2381ed55aaf2590ee5ed8b6626f1c4b0430a54f39658624e6635fefc98fee8fc3e1cc7ff3dd420de9da11a62fcae0e0cb454fc6f7df03954291d26202f1b188b657b3bae07389449b75e67422f\",\n        \"signature\": \"3f2af01ad5377ac39040d41a41e36e7b93fa7235b841791f432ecd7f91a3b21ab7196c883ad5a7db446f6c06672460f3f63ef863d9432be9caeabb79e87e2208\"\n    },\n    {\n        \"secret_key\": \"74965996268cdc4c09220bd31ce07b217a03826ee981fa89f3a2359ced095ef1\",\n        \"public_key\": \"4096d027c1c5ee4cbfc04b9d534174029fdb50cf5610d3021ef933b4caf33985\",\n        \"message\": \"45b2f064615bf774fce97f51c464685d7b3e4fefff9231240a719b3b0621cd4ad83305675cd6eaaebff791000b0b1fa31d82d8181b7fe57c5e00cec56ff9022e9ce8db66356e408e3ee262fe627789e65535ef1a63e8fec933be3dee34d2facdb8928cc456abf2f3e8cab47eff1ca42e8b0e48d2c73e7bcc5de3f1056fc523dfef6b0023f32889ed394eeda032abf6bcaadaa7f3ee74118760ab6d91df528bdc5807972c85fa7cb56e387d7332e779e52d0dd7db0cfb\",\n        \"signed\": \"8c6628344317a63aca6f78cfaea965b3aa5522ce914195141c08870a1b8dacf34b79c7abc693cd9e5ebe1a2e86f0332d2048db3cbdef01687962d6df249e380045b2f064615bf774fce97f51c464685d7b3e4fefff9231240a719b3b0621cd4ad83305675cd6eaaebff791000b0b1fa31d82d8181b7fe57c5e00cec56ff9022e9ce8db66356e408e3ee262fe627789e65535ef1a63e8fec933be3dee34d2facdb8928cc456abf2f3e8cab47eff1ca42e8b0e48d2c73e7bcc5de3f1056fc523dfef6b0023f32889ed394eeda032abf6bcaadaa7f3ee74118760ab6d91df528bdc5807972c85fa7cb56e387d7332e779e52d0dd7db0cfb\",\n        \"signature\": \"8c6628344317a63aca6f78cfaea965b3aa5522ce914195141c08870a1b8dacf34b79c7abc693cd9e5ebe1a2e86f0332d2048db3cbdef01687962d6df249e3800\"\n    },\n    {\n        \"secret_key\": \"0abf069c08b2691c3a26f79dc8ed05cb71d220ff78f3a5c5780ae9da18e45643\",\n        \"public_key\": \"9ef3b5cc016cc82dbdda705766aa448bd61fa1aaf1170efe9149daa9fe64a1ae\",\n        \"message\": \"0d055291b2e861eae19ea0fb2069d8c9eef4f1347f3576d78411ae7c0b1c1caf31fde736dc8accacb662df76b620b62ce90b9f92c83309128621d057cf845805949088e938ddbc3d41c5e5541fec8298687ad2f79acda01aa215d25821436eac9d268716d4cd6050260cb4ef6aada4835e073a845821ff211ae2baadceb6e57f06f88345edbf93bfdf54fb74123b57c0fb4a79608d8db6740889e15733507799f7a1fd3017bcd77b28a2bb6c91ecd154e9c5a5ffa0eb62\",\n        \"signed\": \"c7566fb3b4d8def667e040f276d3ed98d36dff460126a75b4cc2100386bb01c642f6d8de7e649be6e0818b08d77ce60f4ee5e7717a50884bdee02034ecf1cd0c0d055291b2e861eae19ea0fb2069d8c9eef4f1347f3576d78411ae7c0b1c1caf31fde736dc8accacb662df76b620b62ce90b9f92c83309128621d057cf845805949088e938ddbc3d41c5e5541fec8298687ad2f79acda01aa215d25821436eac9d268716d4cd6050260cb4ef6aada4835e073a845821ff211ae2baadceb6e57f06f88345edbf93bfdf54fb74123b57c0fb4a79608d8db6740889e15733507799f7a1fd3017bcd77b28a2bb6c91ecd154e9c5a5ffa0eb62\",\n        \"signature\": \"c7566fb3b4d8def667e040f276d3ed98d36dff460126a75b4cc2100386bb01c642f6d8de7e649be6e0818b08d77ce60f4ee5e7717a50884bdee02034ecf1cd0c\"\n    },\n    {\n        \"secret_key\": \"f3fd5ec5e230b6dad1ac3d3aebadc7863ff89de2a1317f424d15989a3efb0afd\",\n        \"public_key\": \"f99e5d5eeeaed1205cfb5c2cc4e5e9f6b4e7f64129f860104ca6244eb9feb564\",\n        \"message\": \"71f28973ed3df05945fa0bdb23e9beca651d3ee6bf9fa45ffdc6061e42fa2e8d76235f0e9e2daa65e52631fc3bead33da055bb492e4758e598a030a33b3c40b34371459b233ccc043cccc3a3cbce549e20e0b2b43305b64aec661aadba6556b17d76e3bbed62c4a4eac4f88603996752d2363c8d4a2789d128f6e959945c68c30146d194ccb6839ec65344601652c18b0074e2bc7668311697d960c7066597924d704d02a0193fafbfdf571ee0dfe414dc2f52896912bc32\",\n        \"signed\": \"44b0124663adb0c73aed49f73403461fcb19111b0ba17aa996566f477e37d524b0e1f107612fc52a7c767b181fbf4d629bddc08f30584dec6124c5d39d42310271f28973ed3df05945fa0bdb23e9beca651d3ee6bf9fa45ffdc6061e42fa2e8d76235f0e9e2daa65e52631fc3bead33da055bb492e4758e598a030a33b3c40b34371459b233ccc043cccc3a3cbce549e20e0b2b43305b64aec661aadba6556b17d76e3bbed62c4a4eac4f88603996752d2363c8d4a2789d128f6e959945c68c30146d194ccb6839ec65344601652c18b0074e2bc7668311697d960c7066597924d704d02a0193fafbfdf571ee0dfe414dc2f52896912bc32\",\n        \"signature\": \"44b0124663adb0c73aed49f73403461fcb19111b0ba17aa996566f477e37d524b0e1f107612fc52a7c767b181fbf4d629bddc08f30584dec6124c5d39d423102\"\n    },\n    {\n        \"secret_key\": \"738f1310a4e08f917a0a5c1fbaf4ef72f95ee62fcded50868a3daf98856a448d\",\n        \"public_key\": \"42272c2c8b08470ee5dd8af8849c01b7508d3a3c65b0330e695c841d5dccb2f5\",\n        \"message\": \"f0e7ef6782d04c6943b19eb66ff6226b736e3b0940c09bb126bfc4c4ca7a5e7016c286b7bfd73aa6a79a96031bc81cb5da68cec71a6a0d39780cbe6a0cd4774d3aa06a881610444a8c9d19102294e5f635187aa6f48d11912c7094b38833028d570cb110db60625bb1bdc37affa25ea3c8f8dbfc2514f4365c62b2989a66d27c80384e74ae5fba8c1c2af9c72c4971e64fa6a1dc2517b31ea57ccb0815a7fe2da0f146caa08431d25d151662d9d26e95229d0c62823664123c\",\n        \"signed\": \"ce1e3577b6a21016b9dd0b517baa0ccb107bc199b8bbaef68f950c8ed58013c853b4d338eedc675079ab1390462ffefa6a959b043f8b5651c6ca375ce0b4a403f0e7ef6782d04c6943b19eb66ff6226b736e3b0940c09bb126bfc4c4ca7a5e7016c286b7bfd73aa6a79a96031bc81cb5da68cec71a6a0d39780cbe6a0cd4774d3aa06a881610444a8c9d19102294e5f635187aa6f48d11912c7094b38833028d570cb110db60625bb1bdc37affa25ea3c8f8dbfc2514f4365c62b2989a66d27c80384e74ae5fba8c1c2af9c72c4971e64fa6a1dc2517b31ea57ccb0815a7fe2da0f146caa08431d25d151662d9d26e95229d0c62823664123c\",\n        \"signature\": \"ce1e3577b6a21016b9dd0b517baa0ccb107bc199b8bbaef68f950c8ed58013c853b4d338eedc675079ab1390462ffefa6a959b043f8b5651c6ca375ce0b4a403\"\n    },\n    {\n        \"secret_key\": \"8841d22aded69c131ef5ee0a10ab0a9b77cb754ede8d257a5372726e2b499c6e\",\n        \"public_key\": \"715ecca63681bc6e9e31d18848902f4d96feaf43b95d008642903b1763bc9fb8\",\n        \"message\": \"087ca6be2a950c024b3e7467fe00a7d364555d5dc6770f5ebd260642525bd3c0f965db36d7b229a57421eec64e4d991cdde59123034470553f4eb0be81ad2936c8ca26bcab4e5d79040e29798728601684a468323cf3baae4d948d0a1fd905effe16dc44642088df53f6388bc480edf4aa207d0ed161eda345712b4c00cb05fcf635ec2588785bfb8a27cdc28996a1db3e6787023393c075d83c9038fed7899c55fec307de3249c14bda49e8b895860942c36d640bb893779142\",\n        \"signed\": \"bb2bab7003f1311be9b8c883fc4fd528adfd51a9c99db3dca8da0fca958da19a10eb22332667b1a0065d3dbc0d06269a1259b6a890484aa2143a52695f145b0a087ca6be2a950c024b3e7467fe00a7d364555d5dc6770f5ebd260642525bd3c0f965db36d7b229a57421eec64e4d991cdde59123034470553f4eb0be81ad2936c8ca26bcab4e5d79040e29798728601684a468323cf3baae4d948d0a1fd905effe16dc44642088df53f6388bc480edf4aa207d0ed161eda345712b4c00cb05fcf635ec2588785bfb8a27cdc28996a1db3e6787023393c075d83c9038fed7899c55fec307de3249c14bda49e8b895860942c36d640bb893779142\",\n        \"signature\": \"bb2bab7003f1311be9b8c883fc4fd528adfd51a9c99db3dca8da0fca958da19a10eb22332667b1a0065d3dbc0d06269a1259b6a890484aa2143a52695f145b0a\"\n    },\n    {\n        \"secret_key\": \"c02135e7b65aac72f63c32bf5bef5b68c7f3b8ed56208e59e4752070e9d07095\",\n        \"public_key\": \"dcf600f244037a75203ae11ac316e8dbe9986f0dce23473939334bf5cea48b0d\",\n        \"message\": \"86d9491350d2566e708ed356185d610c73465b2a5c7012919958af2cf76af995230d360de400b7137170dd0835f10fcbec224ee4e42c7d1cebb7f580fea8ed6223163bacdd1923a572cbb6dc26ca8b17ade68c6d2808c4ca1eca28eae9a145f68d4079d8d59d140e958228e7e99520e342dbd7457a9159740f48bdc27b93bdabeba465cbf0c8df5ef2c0f9386eebe656f5d749d5f9147f525266910d7b80396a90be5cc188a9a945f93e753fc99bafa18ee0a6dff79bf8484898ef\",\n        \"signed\": \"dd5cbae479eb5e229574c21ec3bed911113a57a1916d3313457515d55cc5b6e6ebc52c93f821d13988dbba8df5096d55ff9c39e7f9d561cb58930c96a7a5d60b86d9491350d2566e708ed356185d610c73465b2a5c7012919958af2cf76af995230d360de400b7137170dd0835f10fcbec224ee4e42c7d1cebb7f580fea8ed6223163bacdd1923a572cbb6dc26ca8b17ade68c6d2808c4ca1eca28eae9a145f68d4079d8d59d140e958228e7e99520e342dbd7457a9159740f48bdc27b93bdabeba465cbf0c8df5ef2c0f9386eebe656f5d749d5f9147f525266910d7b80396a90be5cc188a9a945f93e753fc99bafa18ee0a6dff79bf8484898ef\",\n        \"signature\": \"dd5cbae479eb5e229574c21ec3bed911113a57a1916d3313457515d55cc5b6e6ebc52c93f821d13988dbba8df5096d55ff9c39e7f9d561cb58930c96a7a5d60b\"\n    },\n    {\n        \"secret_key\": \"154a47eba1b8c38362ea61faeb0c0ad7e61e412a3cba4688af0db2a487208b1c\",\n        \"public_key\": \"16de2c894a50cbd4ca90419a4ca64942cb14bd335c5d3f4a53e239c280bda725\",\n        \"message\": \"bf607e8b6e14d9c8acd96815af0c035ac73c4104c93786ccc1c9f859395dd781900320ebf356aa991cdc9f503fcee9f83675888a7d592002d2a54a573a96994b3fa865538c617ed8ad1ff62018288a674f449be0aab5222f74c4fd475ed6a8dfb27f45287b22b2b6c3bd15179f267d157d7d8a4159679be85b25c2bb2ba850aaed9ae3ae571be4f75836329cf36f412c1c80f1413b7661eab4a8e11b6024244fc62323ff02e38aceb1737bd474bf1e98015dbc788b027bbe217cf4e7\",\n        \"signed\": \"f4b6eb1a8d950e887fd2f30f70a23b41871495bfa5b8a4ad3996cd9bf51eb742e07f4c4d2da4b01ab087367a50e2b65b3cef514e40d837540b8c89966485910fbf607e8b6e14d9c8acd96815af0c035ac73c4104c93786ccc1c9f859395dd781900320ebf356aa991cdc9f503fcee9f83675888a7d592002d2a54a573a96994b3fa865538c617ed8ad1ff62018288a674f449be0aab5222f74c4fd475ed6a8dfb27f45287b22b2b6c3bd15179f267d157d7d8a4159679be85b25c2bb2ba850aaed9ae3ae571be4f75836329cf36f412c1c80f1413b7661eab4a8e11b6024244fc62323ff02e38aceb1737bd474bf1e98015dbc788b027bbe217cf4e7\",\n        \"signature\": \"f4b6eb1a8d950e887fd2f30f70a23b41871495bfa5b8a4ad3996cd9bf51eb742e07f4c4d2da4b01ab087367a50e2b65b3cef514e40d837540b8c89966485910f\"\n    },\n    {\n        \"secret_key\": \"d3028431ce2eef73bd940ab84ca29f13fb26436aa25e1b7bf26cb33f17fdf817\",\n        \"public_key\": \"63df203e2860bac4d352e722c1c91fe3776e1cbcae8553a4f19890260bf0e457\",\n        \"message\": \"086335d61275d168eaac0540477f50d4b15f9e50b9be693921ed54a9941bc40643cda62e1d805d0250a81146bd5fe2d39e81444d21e2b21b031c111306cacbf52717f6fb4cd3416f1215f8dddcedd2f0096b0fcfa0a6cc2cde7a2bab7f1e32790b5361df3671424cc722f231bf71895bcdcb7b22ee074e8fb4a9678504e735366c172f07637b7a93149bb21f38883378a1db273fc23239e35337f9ce566d8ddf3b3133cad7f2ce81edb503ce1d27c5a657160b78dca9aeaea379be9c85\",\n        \"signed\": \"ce9729a96c3ed28943b27839c73382ecd572960c1f9e90c5eff9dd499ff48f17d25edd1268effe41ee6a81ce48d84de513df9c41442621b2f5491e346be18c04086335d61275d168eaac0540477f50d4b15f9e50b9be693921ed54a9941bc40643cda62e1d805d0250a81146bd5fe2d39e81444d21e2b21b031c111306cacbf52717f6fb4cd3416f1215f8dddcedd2f0096b0fcfa0a6cc2cde7a2bab7f1e32790b5361df3671424cc722f231bf71895bcdcb7b22ee074e8fb4a9678504e735366c172f07637b7a93149bb21f38883378a1db273fc23239e35337f9ce566d8ddf3b3133cad7f2ce81edb503ce1d27c5a657160b78dca9aeaea379be9c85\",\n        \"signature\": \"ce9729a96c3ed28943b27839c73382ecd572960c1f9e90c5eff9dd499ff48f17d25edd1268effe41ee6a81ce48d84de513df9c41442621b2f5491e346be18c04\"\n    },\n    {\n        \"secret_key\": \"ee8985dc27504440a8758d4c53e4225215797a00cd8631d59bd93bc66f373d5e\",\n        \"public_key\": \"cd647bb065693d486589156a9fa261437534dc86f46f72d0a800399a7af010f7\",\n        \"message\": \"f2220485addfebce02a833aca33381d1df917ed609950ed24f85e3b02b2b994b4d939784e332f41064c8b4a2630ab36961742aa1cffdcb08c144eeaedeafd48b5dbe96bf24350e14fd68286bc08eeaef8bc6ad9e195d1484afcd30afa8ced4848126d56c81b43c27a5dbbdec1a50c11062ce21c61d860c25a862fbb75c3bd51c8dc07636668669bbf751eacaccb3b51d2c0d4140316cfce2eb18d2908cecd5a188679bc5f5de290f548e7ebc57d41b589a24ce88ee48d97e8d0c7c769960\",\n        \"signed\": \"5bd60ad5e9bad9932ca9c75f231a76889ae7a8b864b91d1fcba5c5d4bfa1d92838adb974842a0710779b3e3094044909e92c7cf046ce519f4c68e8f19ec03c02f2220485addfebce02a833aca33381d1df917ed609950ed24f85e3b02b2b994b4d939784e332f41064c8b4a2630ab36961742aa1cffdcb08c144eeaedeafd48b5dbe96bf24350e14fd68286bc08eeaef8bc6ad9e195d1484afcd30afa8ced4848126d56c81b43c27a5dbbdec1a50c11062ce21c61d860c25a862fbb75c3bd51c8dc07636668669bbf751eacaccb3b51d2c0d4140316cfce2eb18d2908cecd5a188679bc5f5de290f548e7ebc57d41b589a24ce88ee48d97e8d0c7c769960\",\n        \"signature\": \"5bd60ad5e9bad9932ca9c75f231a76889ae7a8b864b91d1fcba5c5d4bfa1d92838adb974842a0710779b3e3094044909e92c7cf046ce519f4c68e8f19ec03c02\"\n    },\n    {\n        \"secret_key\": \"80dfe2bf7387bad4654eb076f8dae9595163e40127f5df492dad7df04c7221c4\",\n        \"public_key\": \"d1783ceeb9cf8e4d07764c473fa4061b8274397103f2076d703249d758b8fbd5\",\n        \"message\": \"aa09d784bb09dc999931ebb4c00e424cefeca104818d8eaf0661f09728ad025ef47393210571f17404e9aa6d8cbd5fd88cd7dfb8e2e8a108c05de206f3408234a3b463dbe71a07d05587324524b7326ee79d3348ddbed7871b86fcb488031dc9ea93f6b8d7fda6239348a562444faf1e72d31af35443e9df53e762f3e56b48668f9784b3368ab278a48ef4546a26cfad0d0a5161698f26ee8d34fc2b3d6dfb93b009ac296f6afe487ee335eac9f02cfcae5fcbd1a16ba4e71be1b112562fc2\",\n        \"signed\": \"27279e3cdcb03ef557a5defc2f6c58128a6dc3f8b0385958014e709c1f61b0ae6b403576f0e454d5e4c64c173138ee4bbd5fe7b60d06c5abe23fe99ee3b46a00aa09d784bb09dc999931ebb4c00e424cefeca104818d8eaf0661f09728ad025ef47393210571f17404e9aa6d8cbd5fd88cd7dfb8e2e8a108c05de206f3408234a3b463dbe71a07d05587324524b7326ee79d3348ddbed7871b86fcb488031dc9ea93f6b8d7fda6239348a562444faf1e72d31af35443e9df53e762f3e56b48668f9784b3368ab278a48ef4546a26cfad0d0a5161698f26ee8d34fc2b3d6dfb93b009ac296f6afe487ee335eac9f02cfcae5fcbd1a16ba4e71be1b112562fc2\",\n        \"signature\": \"27279e3cdcb03ef557a5defc2f6c58128a6dc3f8b0385958014e709c1f61b0ae6b403576f0e454d5e4c64c173138ee4bbd5fe7b60d06c5abe23fe99ee3b46a00\"\n    },\n    {\n        \"secret_key\": \"da1f868542cd7cce7a5ca3fa3c24081b4d2344b21a157f0264a347132d19659d\",\n        \"public_key\": \"cb3a25a53f272ea813804468d6500e96a1eaf822705b7790a8ac3e98cc4e524b\",\n        \"message\": \"c6987ef380d5d0e74196443aaa3a32356cbc02636c5a4b6d62a8114b2111bc1abddd9e44b3672c18b58d4ef591af4562e020049f8e1274688e1f8e5296d2f9252e7fc84cd1d0c58e98f0f160530aa22c871eef652e71974ce91b4a65fc25fd09fa1b6c32086e98ec708d9abcb1d9cc8e1a089ed8db2206ee9570236ad69b3de6821862fd2c70cd83a32a68b0486229553d928de48d03a104e87381964abea76683976d527c84163a12eee0a55986cf1431e9c86cba8182ca94689bacd165fbce\",\n        \"signed\": \"75c517ade4f08d7746305743d1a776c3c55eb5eedfdfcb5eb1d5634a1bdaf7a4b8d24187d6c8850e3ced6567a03c4c59389a4cf47114ce5473160f230546e60dc6987ef380d5d0e74196443aaa3a32356cbc02636c5a4b6d62a8114b2111bc1abddd9e44b3672c18b58d4ef591af4562e020049f8e1274688e1f8e5296d2f9252e7fc84cd1d0c58e98f0f160530aa22c871eef652e71974ce91b4a65fc25fd09fa1b6c32086e98ec708d9abcb1d9cc8e1a089ed8db2206ee9570236ad69b3de6821862fd2c70cd83a32a68b0486229553d928de48d03a104e87381964abea76683976d527c84163a12eee0a55986cf1431e9c86cba8182ca94689bacd165fbce\",\n        \"signature\": \"75c517ade4f08d7746305743d1a776c3c55eb5eedfdfcb5eb1d5634a1bdaf7a4b8d24187d6c8850e3ced6567a03c4c59389a4cf47114ce5473160f230546e60d\"\n    },\n    {\n        \"secret_key\": \"f13daec0ef33ddd133c7d244d10fd27ddb23705280ff5f1815f0f656d836fe84\",\n        \"public_key\": \"2dc7f1367de672c51e005c74f876f982593996873acba079292734c209c2b111\",\n        \"message\": \"ec02ff1804b2b309af3158b66272a14a3aad83c41a719846f7088ca9792af575c78913c432759f0b9a748bdc5568496e41658cc1cdb8da6c91d07c3ec2f4af504249b996aa00c0071cdfa793f82d0ec5d267262f518fc029b88e20b6201fb9e05abd3f9524c5da2fa8978ff2efd48120cf00822d1bee90df816125d8edc0cfb5de66d16be63896a412a62b031b7118ac13fe2c9faa6b1a3342f9ccf7884166cf489a84de26b5ce5b21856a3af289bc6622c0aab9f2142d393f5d4b236779dbb066\",\n        \"signed\": \"db771833f7fdbacdab2b5cc80eed50afdf13783b7fe5e903d5dbb4c2e535316a6eef4c34f004d2b9a4e2700bd6e2acdd564c3c80cc68a303f5fb091cb4340f0aec02ff1804b2b309af3158b66272a14a3aad83c41a719846f7088ca9792af575c78913c432759f0b9a748bdc5568496e41658cc1cdb8da6c91d07c3ec2f4af504249b996aa00c0071cdfa793f82d0ec5d267262f518fc029b88e20b6201fb9e05abd3f9524c5da2fa8978ff2efd48120cf00822d1bee90df816125d8edc0cfb5de66d16be63896a412a62b031b7118ac13fe2c9faa6b1a3342f9ccf7884166cf489a84de26b5ce5b21856a3af289bc6622c0aab9f2142d393f5d4b236779dbb066\",\n        \"signature\": \"db771833f7fdbacdab2b5cc80eed50afdf13783b7fe5e903d5dbb4c2e535316a6eef4c34f004d2b9a4e2700bd6e2acdd564c3c80cc68a303f5fb091cb4340f0a\"\n    },\n    {\n        \"secret_key\": \"42dc16c57fb6f128945fa101e05bbf548ef7d97726b692fe404069cc57ccefa0\",\n        \"public_key\": \"0a1ba5df523996f954b34ddcfabad3f3dee21a5fa7a4ce322d216bd8ccaf438c\",\n        \"message\": \"f2714c23a3a6fc11ad15c980b7350fc84217877661188055ff750d82c49c5fef7bc8e6aac574a1b79a3f26d16969c0f406eeab3e9e12850a55709745e30dffa62a69dfb2b64b3c1bd2bc3586e26d4eea714d2a7b71cf79fb8ffbf2aaad00ca3e4f2b6f503cc1fef2eab3656fb44f8d62a8db8ab58f394693949eea57fafecf005f6ebf1287dba4d2d623c02ea171f567e526add20709ebcab962f83d98ef668ebd01ef20488b3665e3a446fbfb13d34050942c749bb2dffc766367fd452e68e5b0c6\",\n        \"signed\": \"c75977e83bcfe9df7292a860ed972555b5c24416fd4b7ee3285388fa5b1447608e4a347813cfe093512a7651e422e9867db7b97c0b0867f0b8c7b7f4f02c310df2714c23a3a6fc11ad15c980b7350fc84217877661188055ff750d82c49c5fef7bc8e6aac574a1b79a3f26d16969c0f406eeab3e9e12850a55709745e30dffa62a69dfb2b64b3c1bd2bc3586e26d4eea714d2a7b71cf79fb8ffbf2aaad00ca3e4f2b6f503cc1fef2eab3656fb44f8d62a8db8ab58f394693949eea57fafecf005f6ebf1287dba4d2d623c02ea171f567e526add20709ebcab962f83d98ef668ebd01ef20488b3665e3a446fbfb13d34050942c749bb2dffc766367fd452e68e5b0c6\",\n        \"signature\": \"c75977e83bcfe9df7292a860ed972555b5c24416fd4b7ee3285388fa5b1447608e4a347813cfe093512a7651e422e9867db7b97c0b0867f0b8c7b7f4f02c310d\"\n    },\n    {\n        \"secret_key\": \"90b455c6bb9cec83e137357065339d030525d0ea7f5b923a2d5972c3c12aa37b\",\n        \"public_key\": \"5cef038c16bfa4b4c923a0fe70cd7f25c8bc837fdf5a7efb9d95f21b96be925a\",\n        \"message\": \"c62cfdb9d21eee6be47f30727aaee51f0703789a431d32228533350217a93a18900669c95956f3f2ae90dc745a71e18340d058d16b4c6fe33b64af8dad973fe5dc02e8520705c7a8bb3ccbe1838c6c249337f9b6a4c0e1f8a4e5d103196fa79998923d0422e9d079a72cc2a8f86d659031a607d4cca0b947b3abeeeef64c28da420d05de665a5510fe55f77598ecad7faa0ac284800b53829394c4ae90be66678ff04ab46da265ae06402d8c83cad84d61a051de0260559888e779f74b72a5d71c132f\",\n        \"signed\": \"c9345eec2c4a0aec732386494a69a3fce8b8a1be366bbed1659f131fe97cc037fb1b7c1b68b0f3023945d20090a0cd2c1553a47faec4d66fd816ce121168f309c62cfdb9d21eee6be47f30727aaee51f0703789a431d32228533350217a93a18900669c95956f3f2ae90dc745a71e18340d058d16b4c6fe33b64af8dad973fe5dc02e8520705c7a8bb3ccbe1838c6c249337f9b6a4c0e1f8a4e5d103196fa79998923d0422e9d079a72cc2a8f86d659031a607d4cca0b947b3abeeeef64c28da420d05de665a5510fe55f77598ecad7faa0ac284800b53829394c4ae90be66678ff04ab46da265ae06402d8c83cad84d61a051de0260559888e779f74b72a5d71c132f\",\n        \"signature\": \"c9345eec2c4a0aec732386494a69a3fce8b8a1be366bbed1659f131fe97cc037fb1b7c1b68b0f3023945d20090a0cd2c1553a47faec4d66fd816ce121168f309\"\n    },\n    {\n        \"secret_key\": \"dc185c2ba0b378dfe5dda510c32feff535ca2e8a02434b326e0158bc878e8848\",\n        \"public_key\": \"33d6cc05a434e419280d5864a1af209a2c676814b70f72f8141ac7e0573ee63e\",\n        \"message\": \"e276b11912cca5a84bba650c172aef3a4d5f91ac722913bb891a3ab0424ab07ea709cb8bba3a3d11f82f51c2af0162a82f7219ce27b35a30507d536a930817e40f85a22a5a432b94d192c3c8911777cfdb7fe937a67502770d6d75753d3ae88229e08f1ed23b4328d862ac61863c063ea9848f8ab96a0213d7b936c48fe754836c98487859d199b3d940392716a1d569e6c0cb1ba918932cf88525e256c8abb11aaf0b454655d5db55713cebba287ae202651ac872bfc80feaa7e00d47c0be38e658f7c5\",\n        \"signed\": \"f1e44514d2ecbcc8d1a7e84bf584ce731835e9894f88974f098d456b60718f575ef4d8062f2182504250cf83bb2af2a79b1f58a6a97bd98da467132d7bec2f05e276b11912cca5a84bba650c172aef3a4d5f91ac722913bb891a3ab0424ab07ea709cb8bba3a3d11f82f51c2af0162a82f7219ce27b35a30507d536a930817e40f85a22a5a432b94d192c3c8911777cfdb7fe937a67502770d6d75753d3ae88229e08f1ed23b4328d862ac61863c063ea9848f8ab96a0213d7b936c48fe754836c98487859d199b3d940392716a1d569e6c0cb1ba918932cf88525e256c8abb11aaf0b454655d5db55713cebba287ae202651ac872bfc80feaa7e00d47c0be38e658f7c5\",\n        \"signature\": \"f1e44514d2ecbcc8d1a7e84bf584ce731835e9894f88974f098d456b60718f575ef4d8062f2182504250cf83bb2af2a79b1f58a6a97bd98da467132d7bec2f05\"\n    },\n    {\n        \"secret_key\": \"90721c43bc366f24bf4e8c993e138024682f1029dba35abeb0d60c7fa710021c\",\n        \"public_key\": \"7c63a2f13b7b220a0bb752e3800753b8b6b32669378ce131bb77a9a8d230e9ae\",\n        \"message\": \"651c9617cac958c7edd4a5f3fedfb83dc971abfbb69a31e898cca8472ef068034a6d2376ee0e72d0a9bfee275796c3795adac8ebe1d12b66ec268f6b75fa3941154f99e223faf2cbab5b92e2b3ba7b79be7700ef9dba69253cce5356b0c4e74703cfcafdb5546850b46232675c90c02d5e426d33d60cebf0c7930182379dbb007f536163c8ddbbd3157bb2da62340133f00ae2682ec6baa6416b5a01521cc10e04695295f2e5b94c05f00383ffe954830797f6df823172532f98165fe314ab325929af8385\",\n        \"signed\": \"d2064a6d6c99c6c3f152d2d435f24e34b5459b082ef11e944a77ff54ddf9862737ecb2ac8d54207d36c51ad41f36490a111ba80e126bfecb09def6accbdf880e651c9617cac958c7edd4a5f3fedfb83dc971abfbb69a31e898cca8472ef068034a6d2376ee0e72d0a9bfee275796c3795adac8ebe1d12b66ec268f6b75fa3941154f99e223faf2cbab5b92e2b3ba7b79be7700ef9dba69253cce5356b0c4e74703cfcafdb5546850b46232675c90c02d5e426d33d60cebf0c7930182379dbb007f536163c8ddbbd3157bb2da62340133f00ae2682ec6baa6416b5a01521cc10e04695295f2e5b94c05f00383ffe954830797f6df823172532f98165fe314ab325929af8385\",\n        \"signature\": \"d2064a6d6c99c6c3f152d2d435f24e34b5459b082ef11e944a77ff54ddf9862737ecb2ac8d54207d36c51ad41f36490a111ba80e126bfecb09def6accbdf880e\"\n    },\n    {\n        \"secret_key\": \"9cec246758e412e7378b4579eafe9fac5a25d5405f9270b5d7e543414ec3d5da\",\n        \"public_key\": \"975a9e6a152caebb2f9dd0deb76dd922b6dc77055dda03fbae9e7c685d073aa1\",\n        \"message\": \"17ec9bd47add6ccfbd787af0d9013e9cc979aaf850e09426d3b28edfd71296eb31ff8b21c5fe7be050f536324c3ec48850e0b508a36bb4cb7e754b327183a1b394d88a7941d1ce8dac62a5d8291874d78485e51f29ed05865a206e52ecb12c5d107d4ff96f25d3c5d181d2c4ba6463600db1cca32857fcf597cbdfb2fda2708a8aba281b43c3d28c4a4e7983361509f61a1074e6f0ad6101c7b567ee4078e9839c47f46531b729ff0efeef7c9d1a8d833d9c0f42812a34187c3a778c165c09d6459c9c7ceaa2\",\n        \"signed\": \"9bad1e3b1279ef658f4d071644c63ae2b7a780357e9dc426f1650ec0634dfc520f8eda9dc8f10aa7324c5942d2347ff8802bd90e95fcec313352cdae64f32a0417ec9bd47add6ccfbd787af0d9013e9cc979aaf850e09426d3b28edfd71296eb31ff8b21c5fe7be050f536324c3ec48850e0b508a36bb4cb7e754b327183a1b394d88a7941d1ce8dac62a5d8291874d78485e51f29ed05865a206e52ecb12c5d107d4ff96f25d3c5d181d2c4ba6463600db1cca32857fcf597cbdfb2fda2708a8aba281b43c3d28c4a4e7983361509f61a1074e6f0ad6101c7b567ee4078e9839c47f46531b729ff0efeef7c9d1a8d833d9c0f42812a34187c3a778c165c09d6459c9c7ceaa2\",\n        \"signature\": \"9bad1e3b1279ef658f4d071644c63ae2b7a780357e9dc426f1650ec0634dfc520f8eda9dc8f10aa7324c5942d2347ff8802bd90e95fcec313352cdae64f32a04\"\n    },\n    {\n        \"secret_key\": \"d1403f63202e080525843bde255eeb6b6783c1caae9d6ed00ba60805bed1941f\",\n        \"public_key\": \"238aea3ad6d6f27783e70516bbfcca4770366b50ed0fe6a4e966b53af121a721\",\n        \"message\": \"c4f17d442fba4ca0df8dc1d0628d7d7f36b60b5758d7c13b80b8f97a62124d96a23b279565495a8accab5997115b13a4ba220a73957eb7930520acbbfb6f54cf68726b6450c6ffa9470b055ea262914e2bc612633f1ac3d0618a23dff188a733d76bcbcc460f52ab61e19938f9c8caaa792c208d1f6c754728905fda51d881a347a53da744d3baadc0a76c474c558680269095f9084a74471d5c09ffc29141b5bfaf4954dfacbca663d037b17ebf9559882233e5ca5a8bf75cca4fc9c5a4109f32e145f3853b17\",\n        \"signed\": \"8e60e73c063816795e29f5d64ece1159f1b5d5021a6f8f655e261a4d0026f5b94ff2923250499d995298480512e4126276aa4a226d015a95827b3ce692e23302c4f17d442fba4ca0df8dc1d0628d7d7f36b60b5758d7c13b80b8f97a62124d96a23b279565495a8accab5997115b13a4ba220a73957eb7930520acbbfb6f54cf68726b6450c6ffa9470b055ea262914e2bc612633f1ac3d0618a23dff188a733d76bcbcc460f52ab61e19938f9c8caaa792c208d1f6c754728905fda51d881a347a53da744d3baadc0a76c474c558680269095f9084a74471d5c09ffc29141b5bfaf4954dfacbca663d037b17ebf9559882233e5ca5a8bf75cca4fc9c5a4109f32e145f3853b17\",\n        \"signature\": \"8e60e73c063816795e29f5d64ece1159f1b5d5021a6f8f655e261a4d0026f5b94ff2923250499d995298480512e4126276aa4a226d015a95827b3ce692e23302\"\n    },\n    {\n        \"secret_key\": \"bdf6bdc31ab0b5313784483abeca6ea5e9cdc68f81b21f350d09c3907bb9b6a1\",\n        \"public_key\": \"03627712b755e5069fb9ab8f9e899724029a7f268af9398821eeec9360c9285b\",\n        \"message\": \"90a66aafa5642a98e79f0d88147080167b11e4466518f195cddd8940d12ee4918d31a6d4cb77d0bf5af29983bbe5085610a79daf0c75a78ccbcffbbdab2189c394ae24e265bd8c55fd3f4098e1b175577549518e7a4dcf7452086dd1278dd58ea4c0aa690e917951ef39fcff60cbfa1e90910bab5374928d4722f702bf5ad6028ffda6541fa5ba1a3779ec78b0a95fe3850c748b6c8f42f330ec79541a52a1cf57db72df4f92ce7f748aeef1af33bc5ae0a82c89dff216f23aec168a7dbb510aa632daabcc971b3f\",\n        \"signed\": \"38fac603ed246f833f1c0fd4585698b0a71305eff0d14a0049b3cef073bd036dd451b3dabadaaeaea2aeaf83d395746f4e86866ada971cbe482edb0419332f0e90a66aafa5642a98e79f0d88147080167b11e4466518f195cddd8940d12ee4918d31a6d4cb77d0bf5af29983bbe5085610a79daf0c75a78ccbcffbbdab2189c394ae24e265bd8c55fd3f4098e1b175577549518e7a4dcf7452086dd1278dd58ea4c0aa690e917951ef39fcff60cbfa1e90910bab5374928d4722f702bf5ad6028ffda6541fa5ba1a3779ec78b0a95fe3850c748b6c8f42f330ec79541a52a1cf57db72df4f92ce7f748aeef1af33bc5ae0a82c89dff216f23aec168a7dbb510aa632daabcc971b3f\",\n        \"signature\": \"38fac603ed246f833f1c0fd4585698b0a71305eff0d14a0049b3cef073bd036dd451b3dabadaaeaea2aeaf83d395746f4e86866ada971cbe482edb0419332f0e\"\n    },\n    {\n        \"secret_key\": \"57b3b14ace1cd0cd603e6328bd219ee7d9d094487fa668f28aeec02b43c909a7\",\n        \"public_key\": \"24e6b6395f97ea0e237186d469b71923d2113adf403beeeb4a2d27909aaf3eda\",\n        \"message\": \"b2e0dedd802eed996dbd5836bf8688b0d1201bf5442ff9bbd351aeefe1a0c21fea2b5c9fe5edee47e921099b05aedaa80367c1ce08821d783a5b64cf059c0f4335083986a5a6ecff8c84fd40e0ba5dd5e5d2f01112a84ce5cf8e0db78beb182d9139c0b0f3e0060a3fa73869e96423f170df9af1cb9c35566d87dff542223f6d439bdb54729d366aff637b0f36a5d14b15d612bd03076cc4d04c1f25b3ba84e0d1fe474e5718d1a17d5a488465662ee4c3f664b4c9274b649d78cea4e85243f3713239048a908ce3e1\",\n        \"signed\": \"fc79fdc6d090887a61e43c6b9187b657d2e4d9cbafd6e7caeb7ebdea842825b78fb949d2c49a0cf38b6c73296d82c8ddeb1fe2d40aaddd7964da68acf8c66f0eb2e0dedd802eed996dbd5836bf8688b0d1201bf5442ff9bbd351aeefe1a0c21fea2b5c9fe5edee47e921099b05aedaa80367c1ce08821d783a5b64cf059c0f4335083986a5a6ecff8c84fd40e0ba5dd5e5d2f01112a84ce5cf8e0db78beb182d9139c0b0f3e0060a3fa73869e96423f170df9af1cb9c35566d87dff542223f6d439bdb54729d366aff637b0f36a5d14b15d612bd03076cc4d04c1f25b3ba84e0d1fe474e5718d1a17d5a488465662ee4c3f664b4c9274b649d78cea4e85243f3713239048a908ce3e1\",\n        \"signature\": \"fc79fdc6d090887a61e43c6b9187b657d2e4d9cbafd6e7caeb7ebdea842825b78fb949d2c49a0cf38b6c73296d82c8ddeb1fe2d40aaddd7964da68acf8c66f0e\"\n    },\n    {\n        \"secret_key\": \"018a2c3deea50ab506751f9c2adaadfd9e2192121609931684eb265e193e7f89\",\n        \"public_key\": \"af410bdddefc644ef12c9899ff71b9e1d0dfa3d69d8c2cd676c1916b34591cfd\",\n        \"message\": \"cf7813efac12ad1c7c7322ccbe54aa0e9a8ba4fd4345b06e4ce7a35c8b1cd5e3f7f0688533849ba2cf4c75b6f20926a1194a72df0e1b1b34456a2133112d006722fe811d5e40c4121159ded88990c0ac2bfd34f35af4f07cc402e9a381a675d03fec7ec438c4ad9d929aec8f242def023c993c9e8ba18c7428e88fde68a4711e506d7969f63c8e0bc83ff0de4e1336106c05e09d5922400e8a81bf54885667899785882b70f20dd8fb1e75f5855b765a256da4341bf23ea0ffa18aadda381816946001045669c8d04df0\",\n        \"signed\": \"7a44e6a31932dee6dc2d8394e29a6551d13e6c6ffdfa218fa5b998668d8439db5e05379fbfa0da5b563ed966435ae2c54e3ad16e1a9fca1f5a157a080704ab03cf7813efac12ad1c7c7322ccbe54aa0e9a8ba4fd4345b06e4ce7a35c8b1cd5e3f7f0688533849ba2cf4c75b6f20926a1194a72df0e1b1b34456a2133112d006722fe811d5e40c4121159ded88990c0ac2bfd34f35af4f07cc402e9a381a675d03fec7ec438c4ad9d929aec8f242def023c993c9e8ba18c7428e88fde68a4711e506d7969f63c8e0bc83ff0de4e1336106c05e09d5922400e8a81bf54885667899785882b70f20dd8fb1e75f5855b765a256da4341bf23ea0ffa18aadda381816946001045669c8d04df0\",\n        \"signature\": \"7a44e6a31932dee6dc2d8394e29a6551d13e6c6ffdfa218fa5b998668d8439db5e05379fbfa0da5b563ed966435ae2c54e3ad16e1a9fca1f5a157a080704ab03\"\n    },\n    {\n        \"secret_key\": \"bea445e9b6d3f21235912cd6c42ec0577297ca20a10357880c2b846dd8e2cc77\",\n        \"public_key\": \"024174966221699ea4b0a37e517ff9b16598ae4d4e83bfa3ca50bc616841f595\",\n        \"message\": \"4743c7c099ab815927b3674d0054b6de59af2811abc2cf7fde08f62929185adc238fadd5e75ae3ba0036ff565a79405b424f6552331e2789d9709ac1ecbd839aa1e91c854817597958cc4bd91d07377507c2c8d3c006cfeb6c0a6c5a50eee115e21153dd198ea0a3aff62b7075d5a461788783f050e659c572963d7a59e5afaa2b9c501f43c6ac08ab4797c4566d22b93cdf65a99a2a1d638e79f72b5f4631fe5e9e5f968f6db7a1880df51d8febc14942672f8ea6fc3a72814a44d66d148420a69000f68c330de5b80fc6\",\n        \"signed\": \"6964b9c5903e74e99328acef036558eecd3369150a52e2cbad4bbb97d461b3dfc6b3e8455813a4f4bdca46302e02e683ecea1820171c538e54c3de6c954aa4074743c7c099ab815927b3674d0054b6de59af2811abc2cf7fde08f62929185adc238fadd5e75ae3ba0036ff565a79405b424f6552331e2789d9709ac1ecbd839aa1e91c854817597958cc4bd91d07377507c2c8d3c006cfeb6c0a6c5a50eee115e21153dd198ea0a3aff62b7075d5a461788783f050e659c572963d7a59e5afaa2b9c501f43c6ac08ab4797c4566d22b93cdf65a99a2a1d638e79f72b5f4631fe5e9e5f968f6db7a1880df51d8febc14942672f8ea6fc3a72814a44d66d148420a69000f68c330de5b80fc6\",\n        \"signature\": \"6964b9c5903e74e99328acef036558eecd3369150a52e2cbad4bbb97d461b3dfc6b3e8455813a4f4bdca46302e02e683ecea1820171c538e54c3de6c954aa407\"\n    },\n    {\n        \"secret_key\": \"6447540ed7be0a11c2a8de793d83c6e244983db18d78ec9d75f1729c92e0fdf1\",\n        \"public_key\": \"391212c8edc4d334a5bec860ef0f5ebb5ec44e8bb51c0f6741998959b2b379fc\",\n        \"message\": \"a4381c7638c48799e9b5c43f67fc3aa3cbb5ec4234f37e70ccccced1627a57683d1e53f4e0883d8b462bf83f1308630368c89b491533ddb8c9a5b9e8155002fdd581a9a5be0e430b9086a6beac4720210f87b14e862d97e5cc69286786a7586723f231ef0e3e1b932dbba3a18a0cb221cb07f80e6a8e1300056c13e702b23bfb3250ec7cc864d5c7ec5786240709c56024ea6be5f7b15a4fa5555e39a744a1dc557df5b948db220b3d5745746691dacb4421641cdcc12e7ec0450293f19ec57b09cff135847aabe446a61332\",\n        \"signed\": \"3ab5f88e2f7276b5b6583dffba5639993a905dbf9b88ceeaaaae3335800e4a5f10f83da6d6225a8dbe99ae80075009dd508786b3975113db478e14ba101bee0fa4381c7638c48799e9b5c43f67fc3aa3cbb5ec4234f37e70ccccced1627a57683d1e53f4e0883d8b462bf83f1308630368c89b491533ddb8c9a5b9e8155002fdd581a9a5be0e430b9086a6beac4720210f87b14e862d97e5cc69286786a7586723f231ef0e3e1b932dbba3a18a0cb221cb07f80e6a8e1300056c13e702b23bfb3250ec7cc864d5c7ec5786240709c56024ea6be5f7b15a4fa5555e39a744a1dc557df5b948db220b3d5745746691dacb4421641cdcc12e7ec0450293f19ec57b09cff135847aabe446a61332\",\n        \"signature\": \"3ab5f88e2f7276b5b6583dffba5639993a905dbf9b88ceeaaaae3335800e4a5f10f83da6d6225a8dbe99ae80075009dd508786b3975113db478e14ba101bee0f\"\n    },\n    {\n        \"secret_key\": \"0c587a811add88b994458c3c808ac4e3a83afab26d4cff5c961b9df0b5c83344\",\n        \"public_key\": \"06783b0cdcc5028c5638bd748f0bc76f7e94d1aa2015ca948738a3500460aca0\",\n        \"message\": \"f56dc6b76076325b2126ed11d1f09decef9d15c31d0e90cdb1a27e089cc56329f6ec3f665eb6739ec5678b3f37ee1fb37deb9e240092b7a88fd25525acd55e294eb1046f9b1b69a847eb9ceb7b1593b9f6978ef618c15de4e059ecc3bfda3297a19c2df202adf72155cf21eabd03948df15198e8a68b0884f93ad5e36eb0983cca30e45a8b4b5fb8136fdea8a3341dd7877540a557debf7530cc33aeeef6271c3f0af6d09787e815f2f1dd25ce4d2fd09ffa9f53081b469c500da4d44180c04eb1869329cbf2d823187e831c24\",\n        \"signed\": \"33b4f4274f20008a721d1e8d054a2b4e95327e38bb07b33c4bee7e1ce020a442fb2627eda3b7ac93cd3ab0b12b99935a1a9233111604da4acffb5315b907120bf56dc6b76076325b2126ed11d1f09decef9d15c31d0e90cdb1a27e089cc56329f6ec3f665eb6739ec5678b3f37ee1fb37deb9e240092b7a88fd25525acd55e294eb1046f9b1b69a847eb9ceb7b1593b9f6978ef618c15de4e059ecc3bfda3297a19c2df202adf72155cf21eabd03948df15198e8a68b0884f93ad5e36eb0983cca30e45a8b4b5fb8136fdea8a3341dd7877540a557debf7530cc33aeeef6271c3f0af6d09787e815f2f1dd25ce4d2fd09ffa9f53081b469c500da4d44180c04eb1869329cbf2d823187e831c24\",\n        \"signature\": \"33b4f4274f20008a721d1e8d054a2b4e95327e38bb07b33c4bee7e1ce020a442fb2627eda3b7ac93cd3ab0b12b99935a1a9233111604da4acffb5315b907120b\"\n    },\n    {\n        \"secret_key\": \"66cf401a2142fcf4a8018046cf4140bca18d76ef6266e7a024757df172a5d653\",\n        \"public_key\": \"67d48dfd23743cc2ca40e4dfd6b8cc5d84be82dd2b1120cc476e6af6f25ecc98\",\n        \"message\": \"daa8efb3fd41f12fbc55bd60464157a26d718632d882aedb6bf98e47dd2337879e0b46452e062e6dfbff3e7bca7289e4ef6b3f41d4b03bdc2c842afe97f3029883ed45f6054dde9690649abb2b8dc28f5fe8cecf80fc1ea411bfc40bbf4fd20b218cf47ea8ee118d4d5aefa5c1bfa08a8fb1b30d6de0977cd15e50292c501f2e71ce2740ff828b8432da5a594bab5223760b64792ed3a69dd75e2829234943656513df1a17a2a067a9a8eaa64e19569f46939d34b99271ae50a47d7dbca3620c81255b0e1fd1f3cec851f1b11b35\",\n        \"signed\": \"d6b0e80e60bc1b29ab8f74808fc460847795ccb887bac0ecaa8e135297a85097712b24b0a1fbaf7a67c5d530a47d0643fc8702c059d215fb112dbe475e5bca0ddaa8efb3fd41f12fbc55bd60464157a26d718632d882aedb6bf98e47dd2337879e0b46452e062e6dfbff3e7bca7289e4ef6b3f41d4b03bdc2c842afe97f3029883ed45f6054dde9690649abb2b8dc28f5fe8cecf80fc1ea411bfc40bbf4fd20b218cf47ea8ee118d4d5aefa5c1bfa08a8fb1b30d6de0977cd15e50292c501f2e71ce2740ff828b8432da5a594bab5223760b64792ed3a69dd75e2829234943656513df1a17a2a067a9a8eaa64e19569f46939d34b99271ae50a47d7dbca3620c81255b0e1fd1f3cec851f1b11b35\",\n        \"signature\": \"d6b0e80e60bc1b29ab8f74808fc460847795ccb887bac0ecaa8e135297a85097712b24b0a1fbaf7a67c5d530a47d0643fc8702c059d215fb112dbe475e5bca0d\"\n    },\n    {\n        \"secret_key\": \"5dbf885aa598e895571f5f65090b72323e9d70b0f58110687afbbc383afedcac\",\n        \"public_key\": \"fa17eba76e3bc3ea6dab3a5b120dc5ecb9ae6f00138f7d36dda9268bc4722174\",\n        \"message\": \"1e0b6cf15ce03337179c02d65408df5be9200c3782b6004af94ea4decb257999d6fdff301d11d00c98c372fac0d026cb56dfefe3def7eb99ac68d6968e17124d8446f53e8d2d3dd890d37a23c7e0b83a484b3c93bddf6c118e0281959d27bd87d37e843d5785f4a40771398494e6c4322fbb675c1d479321032148f7fe52564ddf7ae7ac269d0cd2e552fec589aeae0fb93fe3eeaef0856096cf4f6b3497e7235cc8494d810a0b46c5eac87f187e505bb7764f8045c9541983f7b025698009a23d9df0bd1a473cbee4cf5e9488ecbc\",\n        \"signed\": \"e1429dab2e42cd035b7fc602efd6baf94706f16eaf2f8b5fed329239e875605fb172f5dd9ae2bc2eb42eb474567e292f5206e82e694bca0d6d433b867634cb0d1e0b6cf15ce03337179c02d65408df5be9200c3782b6004af94ea4decb257999d6fdff301d11d00c98c372fac0d026cb56dfefe3def7eb99ac68d6968e17124d8446f53e8d2d3dd890d37a23c7e0b83a484b3c93bddf6c118e0281959d27bd87d37e843d5785f4a40771398494e6c4322fbb675c1d479321032148f7fe52564ddf7ae7ac269d0cd2e552fec589aeae0fb93fe3eeaef0856096cf4f6b3497e7235cc8494d810a0b46c5eac87f187e505bb7764f8045c9541983f7b025698009a23d9df0bd1a473cbee4cf5e9488ecbc\",\n        \"signature\": \"e1429dab2e42cd035b7fc602efd6baf94706f16eaf2f8b5fed329239e875605fb172f5dd9ae2bc2eb42eb474567e292f5206e82e694bca0d6d433b867634cb0d\"\n    },\n    {\n        \"secret_key\": \"84b3aedd4797a565c351de7dfa0700b9ff7c4d7291c8808d8a8ae505cdd22590\",\n        \"public_key\": \"d7ad72caa7c22209ec4678d11d5590a6cb28a07117fe5aef57b50751583201a5\",\n        \"message\": \"532567ffa53b5c0fcd29c39499d2e78ecd20e63123499240e775088b394dc65c8baaa0fe8f6aa7e70181f9e10add8b4a8beb0b2ec38a43309f100cd4be91c6f48e79dc0aee93a15c9403773b354a8d42ed48d8f276230fa6de5ada501ee0a653b4458f0ecf6d5b3c33e2141c662f6ea055f741e54586917d2e0c4eb2b56621f9665fef3246f0bd800b533e3bc615c4021f8d0e2ad233a11e7736c493acc31faee76a097dc40db9efc22446eacf1cc18f51fd10236a2f942d0a53c3ce209108b5938c0a9e536b89ef0ad6b405a10f22c3\",\n        \"signed\": \"9220f0edaaaee1b876350dbe9266061767b86296c351d4cac99d07cd612c6efb24f8f9b0b975f95c42c5b6afedc892f87efedd39d5160294c27658bdcf42850b532567ffa53b5c0fcd29c39499d2e78ecd20e63123499240e775088b394dc65c8baaa0fe8f6aa7e70181f9e10add8b4a8beb0b2ec38a43309f100cd4be91c6f48e79dc0aee93a15c9403773b354a8d42ed48d8f276230fa6de5ada501ee0a653b4458f0ecf6d5b3c33e2141c662f6ea055f741e54586917d2e0c4eb2b56621f9665fef3246f0bd800b533e3bc615c4021f8d0e2ad233a11e7736c493acc31faee76a097dc40db9efc22446eacf1cc18f51fd10236a2f942d0a53c3ce209108b5938c0a9e536b89ef0ad6b405a10f22c3\",\n        \"signature\": \"9220f0edaaaee1b876350dbe9266061767b86296c351d4cac99d07cd612c6efb24f8f9b0b975f95c42c5b6afedc892f87efedd39d5160294c27658bdcf42850b\"\n    },\n    {\n        \"secret_key\": \"6950bfcf480b98ea18a2d5ae5ba6e7668f4c283ff2711357740ffe32cf25819a\",\n        \"public_key\": \"8e4c6f233f7b86321c9d6799bac28aafcd2503d7aa0a7bded8722727fbbcaeb8\",\n        \"message\": \"a401b922aba57ee0c6ac1c8f1b48296a8562eef137526893886a08306e2203667788618b939864467a31f16edce152a42c25546b640ea8bed189a4f89886a37f106911eae1f50081bf795e70c6504437d2a80cb839479ecbb87c129bcc5fe31d716ef978c206d7f08a793466594f4d75e215bb6374596f8e7d00eea724780943e89bd3863c951bbd24efee23c97c2c797c7fafbf8f2c8b43f37a5f881129a09573fa7a034a285e80dc4ba4bc9564a4dcedeb33167e0b30c5a00b9a109a2231cfa0012b29b2b3450b892eccef0808e503f8\",\n        \"signed\": \"94de5df7a25ecd70205d40bc9499fc7cd7136568060a419a93be6e318664bb6dfce60e2d4e633f7ec148fe4f834ed277c1fec4c4e2a86f44c4589c817888db00a401b922aba57ee0c6ac1c8f1b48296a8562eef137526893886a08306e2203667788618b939864467a31f16edce152a42c25546b640ea8bed189a4f89886a37f106911eae1f50081bf795e70c6504437d2a80cb839479ecbb87c129bcc5fe31d716ef978c206d7f08a793466594f4d75e215bb6374596f8e7d00eea724780943e89bd3863c951bbd24efee23c97c2c797c7fafbf8f2c8b43f37a5f881129a09573fa7a034a285e80dc4ba4bc9564a4dcedeb33167e0b30c5a00b9a109a2231cfa0012b29b2b3450b892eccef0808e503f8\",\n        \"signature\": \"94de5df7a25ecd70205d40bc9499fc7cd7136568060a419a93be6e318664bb6dfce60e2d4e633f7ec148fe4f834ed277c1fec4c4e2a86f44c4589c817888db00\"\n    },\n    {\n        \"secret_key\": \"61b260f5b848b271ef48e5a56d297432d89f2ab85bd538fa668870d0560220e5\",\n        \"public_key\": \"6086fe8735f399f1af2e395e0fdfb5629ebcb04b6ed4a54a9e47052c6e8191d4\",\n        \"message\": \"2826295d79945f675476bc4d45ef800d80b1f0398e4be60e3de4571ed108df989f032de6c2345d9948d677927ea0b8cf1a5ca36fd5f23c25dc0d2ab5bd565a54af46fd97d338d770e3a7b47efb54c07a1664707771eb4e37d9d70ba779251dcdcd3bf6d1248adec53f787259c4d594d5fd4ced8e3db7621d4965d48298178124931a3d0cd269b2d53b7cd261b96d370c5d9693c8ad133ed58945ee3540e10625d924aeba9bdafc656100aab276fa996b1db477bf85ea559081d5b4c7307dc1595654aca82f7b6d2ddaf7357c15a4d7d8b908\",\n        \"signed\": \"9828fec8ff5cf85a98f450770b5bdb4b80daca44379d8f53c91c348e22df64ac48f2b6e2a7b3b642bc8193a194316229e69447ed241cd423d83b6fe7b2d44b002826295d79945f675476bc4d45ef800d80b1f0398e4be60e3de4571ed108df989f032de6c2345d9948d677927ea0b8cf1a5ca36fd5f23c25dc0d2ab5bd565a54af46fd97d338d770e3a7b47efb54c07a1664707771eb4e37d9d70ba779251dcdcd3bf6d1248adec53f787259c4d594d5fd4ced8e3db7621d4965d48298178124931a3d0cd269b2d53b7cd261b96d370c5d9693c8ad133ed58945ee3540e10625d924aeba9bdafc656100aab276fa996b1db477bf85ea559081d5b4c7307dc1595654aca82f7b6d2ddaf7357c15a4d7d8b908\",\n        \"signature\": \"9828fec8ff5cf85a98f450770b5bdb4b80daca44379d8f53c91c348e22df64ac48f2b6e2a7b3b642bc8193a194316229e69447ed241cd423d83b6fe7b2d44b00\"\n    },\n    {\n        \"secret_key\": \"936dc1cef6a310747f350088055a39aa762d9a4b52c8c8e4c682794380c2725c\",\n        \"public_key\": \"03b31800412df4d56f1532c05828c0b72528a67a781bef4c06c1fb6ff2ce324b\",\n        \"message\": \"eb58fe86c4ef349c29ae6fb04f10850e38c6823dbe64a09a5bf1e0ce600d394efa6fb96ed6a8f2c9d4bec05e6a5ebd5a1bf4d0c51db934e57b79e5c6a879d975197dbb10475f65c7f8a8c6a77a420384b5062a2740f1401740ee0f5e043aad7a2a2b4260c5d907f705edaf65b0e375dfc7b00bd660db6147f2ebe870a0ee18dc2ba3c92b0b76fae2b90932cdb6c149e46f3feecf4c26f0441f3a9e006678aecff8ccaecaeda73a18a68ac988b62e83a9bb5188aede38df77a9a164abbdd9d58e52a6caf7222389f198e85fbf966236dcdbd4c1\",\n        \"signed\": \"3f994b8ef528f6421c6a6a22e977ade5cee887263de38b719acd12d469bfd8c3f68e7ac07d2fae80a2092778df0b463537ad3a0551997a3d5b51f832d9c8230beb58fe86c4ef349c29ae6fb04f10850e38c6823dbe64a09a5bf1e0ce600d394efa6fb96ed6a8f2c9d4bec05e6a5ebd5a1bf4d0c51db934e57b79e5c6a879d975197dbb10475f65c7f8a8c6a77a420384b5062a2740f1401740ee0f5e043aad7a2a2b4260c5d907f705edaf65b0e375dfc7b00bd660db6147f2ebe870a0ee18dc2ba3c92b0b76fae2b90932cdb6c149e46f3feecf4c26f0441f3a9e006678aecff8ccaecaeda73a18a68ac988b62e83a9bb5188aede38df77a9a164abbdd9d58e52a6caf7222389f198e85fbf966236dcdbd4c1\",\n        \"signature\": \"3f994b8ef528f6421c6a6a22e977ade5cee887263de38b719acd12d469bfd8c3f68e7ac07d2fae80a2092778df0b463537ad3a0551997a3d5b51f832d9c8230b\"\n    },\n    {\n        \"secret_key\": \"f89eed09dec551361fa46f375973d4fbfa5c5c12f1b5e5abf45cfa05ff31a340\",\n        \"public_key\": \"3e0efdca3919fa10d4a849cef1de428851bd08efd248594fd89cdeb9deee43b0\",\n        \"message\": \"4cf9773da05fd322fc147be900ef5cf256c88afdad4b08c230dfc8981fb69f476f7d45ef7c9006bc10032ba53436ac22843e0d76289cf68f9818fa64031d4b40955059aa69110915889f5e22732a1343912581ab3b11a3bae7a471359508596575f888160beef966e5708f0e3147eacfcec1caa3ef240c5e0a14c186546c8eeb64658350b1affc0cfd2ac213af670afca7bbc9dddd28a465b586e69c388cd73478d68efb322bdf86d9213011e711b2b95fefa7bb9b5939761706aa7121024906420bddf1d8800a4338d938fa137cf27e9ffc51c6\",\n        \"signed\": \"897e6f2797c3f326d2cdb1d2673d360631f063304580ff5b4eb43d39ad6851834c9cf891d9f0905bf8de075f7635dfca601adc0f14e7b2c76f7571bfa468ed0c4cf9773da05fd322fc147be900ef5cf256c88afdad4b08c230dfc8981fb69f476f7d45ef7c9006bc10032ba53436ac22843e0d76289cf68f9818fa64031d4b40955059aa69110915889f5e22732a1343912581ab3b11a3bae7a471359508596575f888160beef966e5708f0e3147eacfcec1caa3ef240c5e0a14c186546c8eeb64658350b1affc0cfd2ac213af670afca7bbc9dddd28a465b586e69c388cd73478d68efb322bdf86d9213011e711b2b95fefa7bb9b5939761706aa7121024906420bddf1d8800a4338d938fa137cf27e9ffc51c6\",\n        \"signature\": \"897e6f2797c3f326d2cdb1d2673d360631f063304580ff5b4eb43d39ad6851834c9cf891d9f0905bf8de075f7635dfca601adc0f14e7b2c76f7571bfa468ed0c\"\n    },\n    {\n        \"secret_key\": \"400796ef60c5cf4084dee1801c4a1975e482e70aef961cd42e2fd5a3fa1a0fbe\",\n        \"public_key\": \"f47da38128f2d012cc5797571d479c83e7d8a3409802f9a7d976c27067cbbe43\",\n        \"message\": \"c473325e785b27df4471eefb9ebebd6461d570800181100ff36caf3c38f67c1921b157ec8e6126f955aebd90ea3fe5385f8042cd704b27cc1d6978c0e2a296695f5ef97b7c2e16ae4ff4d063c688d7f46e964e1f0a00503f357345977683d6e4c3423d56bdb6ce864b6987e085e83e70c7c1a14e0e413f592a72a71e017d505b64c24f1a1a6b813e064e6e0cf8bd4571d0ff2f267a6a13e0cd430463b6ca3b88f0cd40b0fb83d5bedf6f7d47e170e87d0a750093693eda232a6daf98125727b9588ecb894ae373bae3a445a106306469a4c2cd77ff\",\n        \"signed\": \"84d3aa3f361844396754d80d9fa05b8b2fa4abf3a0f36b639bee9cfb5c8530a3a9cc34677f92a913c41e800f2e8041f7666d07ed85f16a57d817b1241fc5ee04c473325e785b27df4471eefb9ebebd6461d570800181100ff36caf3c38f67c1921b157ec8e6126f955aebd90ea3fe5385f8042cd704b27cc1d6978c0e2a296695f5ef97b7c2e16ae4ff4d063c688d7f46e964e1f0a00503f357345977683d6e4c3423d56bdb6ce864b6987e085e83e70c7c1a14e0e413f592a72a71e017d505b64c24f1a1a6b813e064e6e0cf8bd4571d0ff2f267a6a13e0cd430463b6ca3b88f0cd40b0fb83d5bedf6f7d47e170e87d0a750093693eda232a6daf98125727b9588ecb894ae373bae3a445a106306469a4c2cd77ff\",\n        \"signature\": \"84d3aa3f361844396754d80d9fa05b8b2fa4abf3a0f36b639bee9cfb5c8530a3a9cc34677f92a913c41e800f2e8041f7666d07ed85f16a57d817b1241fc5ee04\"\n    },\n    {\n        \"secret_key\": \"6703a6232c5e2e65e0ab3b92e2aaf9f5fbd33fb46988047d6f4d0ff5387fa029\",\n        \"public_key\": \"047cffca8b7b11ac6eacc0eaa0c5b73c75b9c637956973af9d97b2dd5b605d6f\",\n        \"message\": \"a26b30a769197932a3a62854968d760151612366778dc994576a2e0e0355496b46200e506948a0d102b6651b2e7334ca6c6eaef8bca44b425970a0b37d6bde0da9d3c1b9f51cbb25bc335cd6fa928a74f2c0dc2c6e99d37a12863a474d4df43aad35415ffcaa24d8c29f914572ab2abec3892db49e679c5ea220c2f519a7d033ac1a2c5a467869e30eda3d2635ca863431473f958d552bdc5582352c290d0ce4fa9cfd0ad42799c227ec90b7c9e5db9f5a7b6d569212eed94d323326805f2b3a0010d6c11eb4107c8283037652f50dc067b6dc81f4db\",\n        \"signed\": \"cae96879e5b603be866609d4a053bfa12a51378e99b2a2812e4789267d8f32f473243f8af74b9be73f47dea50f0d165ebf49458b73e53d88580c191a182d1904a26b30a769197932a3a62854968d760151612366778dc994576a2e0e0355496b46200e506948a0d102b6651b2e7334ca6c6eaef8bca44b425970a0b37d6bde0da9d3c1b9f51cbb25bc335cd6fa928a74f2c0dc2c6e99d37a12863a474d4df43aad35415ffcaa24d8c29f914572ab2abec3892db49e679c5ea220c2f519a7d033ac1a2c5a467869e30eda3d2635ca863431473f958d552bdc5582352c290d0ce4fa9cfd0ad42799c227ec90b7c9e5db9f5a7b6d569212eed94d323326805f2b3a0010d6c11eb4107c8283037652f50dc067b6dc81f4db\",\n        \"signature\": \"cae96879e5b603be866609d4a053bfa12a51378e99b2a2812e4789267d8f32f473243f8af74b9be73f47dea50f0d165ebf49458b73e53d88580c191a182d1904\"\n    },\n    {\n        \"secret_key\": \"e0e72f8f178633626733bcbda2ad2a50e653890f15359b6c22fc7345ad333109\",\n        \"public_key\": \"d13cee540d84b5667d516fe7ec7239bf8da91546ee791f84edd8ffcf3a083e76\",\n        \"message\": \"791fd613c1095292c8a4a2c86b47ae026155b8465b607dbb416477ef79a297c9d7758ce34af9dcbf1c68474f30909fbe74b7ba429632f2403aad832b486b72c23054ad42f7653a9ddb456cc791f348886a7ae5dcec7c0ba815f7a93a10fe331e903b970f7b5028be49d14bc5620d63792672b98b9488c67ae16646693e112047f0ac8921ff561c92dd0596d32df0a6e507ac1b07de516c98428d570a37db9bcd7c7e61c6948ab3fe91250dd1d5bd671275df9a972f22c2ba36804747aec1ea2416c1f41ab87befde31629b2d43317ce41cda03626286c0\",\n        \"signed\": \"14552171b95245ac0f0e5a6e7a2f541721068db650c6dada04c28cab7c49195f6436712144cb31913c562e30c39d8a8549fb64ffea81c7445143b5f23286da05791fd613c1095292c8a4a2c86b47ae026155b8465b607dbb416477ef79a297c9d7758ce34af9dcbf1c68474f30909fbe74b7ba429632f2403aad832b486b72c23054ad42f7653a9ddb456cc791f348886a7ae5dcec7c0ba815f7a93a10fe331e903b970f7b5028be49d14bc5620d63792672b98b9488c67ae16646693e112047f0ac8921ff561c92dd0596d32df0a6e507ac1b07de516c98428d570a37db9bcd7c7e61c6948ab3fe91250dd1d5bd671275df9a972f22c2ba36804747aec1ea2416c1f41ab87befde31629b2d43317ce41cda03626286c0\",\n        \"signature\": \"14552171b95245ac0f0e5a6e7a2f541721068db650c6dada04c28cab7c49195f6436712144cb31913c562e30c39d8a8549fb64ffea81c7445143b5f23286da05\"\n    },\n    {\n        \"secret_key\": \"544dafd9960d829756c6d4b3eadd44375fe78051876bf978a381b0decaaa8096\",\n        \"public_key\": \"ae4f6425c1b67ccb77f9aacfea28eaef769c8cacee035205cdcd787e8d07629d\",\n        \"message\": \"447fe7344cad1fae09d6a7d05f09d503c1b3d3d5dfa584810c35bc41e4955693706154e2d751b2f1b525e1a14547ba7f8b232088a6fc922702d93a11cd82949c27bed645dc351fb4c1242cf41d01575412e792aed214531d94fd66e03dd32e972fd77f6947a353e1ae5e00f5a6ca77992472f096b6e7475fe534e913a77bcb0d681fdfb3a7a0dcb56d274df4aa109d4a8a37794a9276f50006696ff12ca4d0254039df0fb3f72a960da05c9872f2e33ee81d1cf7a6f48bbce0aa18c7c0f06ba55e67689e0af587b500eab79cc7f9640bca104b7fbf31f08e\",\n        \"signed\": \"a2ae117c8de4ca6d6fe75e466023bd550c26fedd3e74ca13adb625f272e175f14d5df550ace7d82288efefabf96311a123bee23889ad3711bff2b8087946bf0e447fe7344cad1fae09d6a7d05f09d503c1b3d3d5dfa584810c35bc41e4955693706154e2d751b2f1b525e1a14547ba7f8b232088a6fc922702d93a11cd82949c27bed645dc351fb4c1242cf41d01575412e792aed214531d94fd66e03dd32e972fd77f6947a353e1ae5e00f5a6ca77992472f096b6e7475fe534e913a77bcb0d681fdfb3a7a0dcb56d274df4aa109d4a8a37794a9276f50006696ff12ca4d0254039df0fb3f72a960da05c9872f2e33ee81d1cf7a6f48bbce0aa18c7c0f06ba55e67689e0af587b500eab79cc7f9640bca104b7fbf31f08e\",\n        \"signature\": \"a2ae117c8de4ca6d6fe75e466023bd550c26fedd3e74ca13adb625f272e175f14d5df550ace7d82288efefabf96311a123bee23889ad3711bff2b8087946bf0e\"\n    },\n    {\n        \"secret_key\": \"bfbcd867027a199978d53e359d70318fc78c7cc7bb5c7996ba797c8554f3f0f0\",\n        \"public_key\": \"7c5ae3bab9201199dfbe74b7d1ec157125bdbaa4520f501da3f248579dc6c22d\",\n        \"message\": \"117fae13e78777b6219f020214c1b87c57046d1c09ce82ee2b5629898d9b0de74a15cfe99f80548ba913d7036c56285a4cba493b52d2cb70d6365ace3da12b1f34a2778af36ef52ab82ede04cacaf2793f5f89831e3b205a9ee4c1d6fbdab4ba4d9fae65dd79a5fe76b4b39a3092cc7148d211e85ee82ab463d34dcee9061d9c21ded2051bbd50b413f0e21a0e48d1ffa8dcae240b3495be25d93151b57aa271ab99aa708ca28080cab4804fcefa929f5f1ef3f4c6c0fbfb40bef7ea1b509b36ba1260323512379d7bc3fdbb5d3faac9b00e21f12ea1ca2e29\",\n        \"signed\": \"e48615b65633e61993b0aaa1fafb74b9629c384fd592bd735fa1f62c5cad11291fcd8c2e91a50bfe0b03b43502fff3a5c382b9c2821907efc34da5ba054af00e117fae13e78777b6219f020214c1b87c57046d1c09ce82ee2b5629898d9b0de74a15cfe99f80548ba913d7036c56285a4cba493b52d2cb70d6365ace3da12b1f34a2778af36ef52ab82ede04cacaf2793f5f89831e3b205a9ee4c1d6fbdab4ba4d9fae65dd79a5fe76b4b39a3092cc7148d211e85ee82ab463d34dcee9061d9c21ded2051bbd50b413f0e21a0e48d1ffa8dcae240b3495be25d93151b57aa271ab99aa708ca28080cab4804fcefa929f5f1ef3f4c6c0fbfb40bef7ea1b509b36ba1260323512379d7bc3fdbb5d3faac9b00e21f12ea1ca2e29\",\n        \"signature\": \"e48615b65633e61993b0aaa1fafb74b9629c384fd592bd735fa1f62c5cad11291fcd8c2e91a50bfe0b03b43502fff3a5c382b9c2821907efc34da5ba054af00e\"\n    },\n    {\n        \"secret_key\": \"df2df8a9d66d5638cdee09324e7b10f8ed29ab91387e3147b7dc03f7cd800508\",\n        \"public_key\": \"5c042e157fb7fb12d4d4fef2847141ecfb57c1253e14eaf3004d6513f52fe625\",\n        \"message\": \"21576615c9346a63dccf0c50ecbd7c6d72ad452cfed43ea73202cc7a98576056b9664b54622905a1e7221720730ac685d3bd3977ec3959d446bfa941e725b6fe16afe5432c4b4bdee7aa0fd8030948ed6fcba7c0bdb40c2e517da97456e74e1f93d5ed676de0f4a8b0aea449404bd15b6da79dc1b813965fe5572410d76f5b5eac663050570311dc9842b6fbf8806aec03151715cacf7f21802e8bf5e98a89c0d7d0d098b73c6efc09962e36b4e030c1a64b5d349f5f2042c74428671e4a2c7fea0caee2422d85c4fcddfed32213859a69955d4e3ebb7e1b2022\",\n        \"signed\": \"9a1074531ed43d07bffc7f2b6c13b8838fc75cba02c7d1ec7ba38bca3cef20dc9badf3a3064a2c93b1842441420b6a8d421a960d70dfb7c70eec295f21f83f0a21576615c9346a63dccf0c50ecbd7c6d72ad452cfed43ea73202cc7a98576056b9664b54622905a1e7221720730ac685d3bd3977ec3959d446bfa941e725b6fe16afe5432c4b4bdee7aa0fd8030948ed6fcba7c0bdb40c2e517da97456e74e1f93d5ed676de0f4a8b0aea449404bd15b6da79dc1b813965fe5572410d76f5b5eac663050570311dc9842b6fbf8806aec03151715cacf7f21802e8bf5e98a89c0d7d0d098b73c6efc09962e36b4e030c1a64b5d349f5f2042c74428671e4a2c7fea0caee2422d85c4fcddfed32213859a69955d4e3ebb7e1b2022\",\n        \"signature\": \"9a1074531ed43d07bffc7f2b6c13b8838fc75cba02c7d1ec7ba38bca3cef20dc9badf3a3064a2c93b1842441420b6a8d421a960d70dfb7c70eec295f21f83f0a\"\n    },\n    {\n        \"secret_key\": \"e8ee065f9907f1efa2daecb23a0425f353094da02bc2c931f0a587efc0d13de1\",\n        \"public_key\": \"c72651b7fb7ac0337a172977496fd7f2a72aea889385835e563c6b6053a32dc1\",\n        \"message\": \"a2f0c1373473a305d8f1d99138b06b9a9694ffaa8a88222de9f729bee1305175dfb17001cc77f67b6d40c90c1a28fb226c11286db4a13e45e69211242bcdd01cb6e2c454e76c0cab881b4d2d9d3ab100a5d61d1725d866e4fdb66d93d77f5b308693b9b5a333e57fa25d1e5d2e38df6e4e9ec84159bbee1ffea926836a0101c91483bd5bc88a6f1cc4d4e7f008ad08453a0123429dd335781c7cbf8d685a8999ed1177607004a13c4cb5ea4908c542607d3f2cd6690cf1f2a7455bbd38f538f07a103964317efbcee37eb46931c027cf153ef86e43d78281ebd710\",\n        \"signed\": \"a510dff42d4559a19a7bf0fe0bea53d3e1f22dfa6be55039895e12a5d07da5f2e37713ccb2eb216011628f6983f871fee286e66fff4be7582c961a1ed7568404a2f0c1373473a305d8f1d99138b06b9a9694ffaa8a88222de9f729bee1305175dfb17001cc77f67b6d40c90c1a28fb226c11286db4a13e45e69211242bcdd01cb6e2c454e76c0cab881b4d2d9d3ab100a5d61d1725d866e4fdb66d93d77f5b308693b9b5a333e57fa25d1e5d2e38df6e4e9ec84159bbee1ffea926836a0101c91483bd5bc88a6f1cc4d4e7f008ad08453a0123429dd335781c7cbf8d685a8999ed1177607004a13c4cb5ea4908c542607d3f2cd6690cf1f2a7455bbd38f538f07a103964317efbcee37eb46931c027cf153ef86e43d78281ebd710\",\n        \"signature\": \"a510dff42d4559a19a7bf0fe0bea53d3e1f22dfa6be55039895e12a5d07da5f2e37713ccb2eb216011628f6983f871fee286e66fff4be7582c961a1ed7568404\"\n    },\n    {\n        \"secret_key\": \"c72e67d8c3fec004ff618718a9099eb8ad7b06ff3b8c542a7e8b9847313475e1\",\n        \"public_key\": \"4eb002d3cceb188c6658fec51cb479a65264ac555c75cdc2249cf1ce3defc16d\",\n        \"message\": \"a8f34135c0132ec95b64b0cbf51d66900143370406791fbb55f2b8ca953cc74a46e08b002fa2da21b951b8871f7a29bc6d38790afc66a329c397d9f9250bae0e30ae3426e08d8ead0179a3b313c908839192f289a3f3b6e960b4c5cebef0a09daa9c7a15c19d4ebc6fc2ac3cd02232e832b234edd7965d687bfeb758f70fa7963841b7859bb97c971bd557bc8769524ac4c6eeb3579793334b522d176bc62f86b4d5c0d4017036d2b6bd4e4384416ef8263139691a8606170d73c93d6417dcc1a08a537c9ed4400471a46f52907b46b10a8b6889dbb4647a8bbc7149\",\n        \"signed\": \"2d7bab8ebda7fca5bb3c25f51dc51b73e6ff6a3bb1b52acc7811a7d2595cd6fdaf730494418e2f57efdc5617b066fd7b6207680d94fb8c43d3d4740b41cb6901a8f34135c0132ec95b64b0cbf51d66900143370406791fbb55f2b8ca953cc74a46e08b002fa2da21b951b8871f7a29bc6d38790afc66a329c397d9f9250bae0e30ae3426e08d8ead0179a3b313c908839192f289a3f3b6e960b4c5cebef0a09daa9c7a15c19d4ebc6fc2ac3cd02232e832b234edd7965d687bfeb758f70fa7963841b7859bb97c971bd557bc8769524ac4c6eeb3579793334b522d176bc62f86b4d5c0d4017036d2b6bd4e4384416ef8263139691a8606170d73c93d6417dcc1a08a537c9ed4400471a46f52907b46b10a8b6889dbb4647a8bbc7149\",\n        \"signature\": \"2d7bab8ebda7fca5bb3c25f51dc51b73e6ff6a3bb1b52acc7811a7d2595cd6fdaf730494418e2f57efdc5617b066fd7b6207680d94fb8c43d3d4740b41cb6901\"\n    },\n    {\n        \"secret_key\": \"696450b557ec3c94cf1af1326475634aa81def3814ff30a02ba7f2044b59c0fe\",\n        \"public_key\": \"8584773c566b0eed3f43281705b575a434e47d6cf6b251b89803fef53534cb29\",\n        \"message\": \"cc257829f30a5f90dfdbc247d42e388738b76c41ef8a82a5e0225ddf1e386d77080b3b9df86c54b85cdf2c32f367aba0c3b6bf888a5a6903529b6aeb4d5407a10180149114130228fc4356ccf366b77be89796a9e71a0c693f31e584a4f143097ba370363b67b2f2e2fd8d6fe8b4e8dbf0d7dcc1a8360041158aa2aff7e2a325b8e518f193a28bae05e3d52b26621af402026d7f250e86dcee301a58b631eadf4527e958f02a61587f0bb516cefac009fe51052fff53336dbd94e7266d3b43caba8a1b38e5d871c2a24a4c412fff3f7a9a52a8ab23bac9791b2b5a669a\",\n        \"signed\": \"ce8b0a5779f4f5f401e84d65927a0c28df829e95d09bfa97111b8700078ff894cf7277e34a716144d55306fc9e2f64cd287583cc8003be0e8faf26af7640140ecc257829f30a5f90dfdbc247d42e388738b76c41ef8a82a5e0225ddf1e386d77080b3b9df86c54b85cdf2c32f367aba0c3b6bf888a5a6903529b6aeb4d5407a10180149114130228fc4356ccf366b77be89796a9e71a0c693f31e584a4f143097ba370363b67b2f2e2fd8d6fe8b4e8dbf0d7dcc1a8360041158aa2aff7e2a325b8e518f193a28bae05e3d52b26621af402026d7f250e86dcee301a58b631eadf4527e958f02a61587f0bb516cefac009fe51052fff53336dbd94e7266d3b43caba8a1b38e5d871c2a24a4c412fff3f7a9a52a8ab23bac9791b2b5a669a\",\n        \"signature\": \"ce8b0a5779f4f5f401e84d65927a0c28df829e95d09bfa97111b8700078ff894cf7277e34a716144d55306fc9e2f64cd287583cc8003be0e8faf26af7640140e\"\n    },\n    {\n        \"secret_key\": \"a8dd35f054fb6ff6f0ab094a0d3d1c262832181df35ccd5192545ebd6a9cf529\",\n        \"public_key\": \"ca412338d3814b886d964b71925e1aabb3ffd07834dbe7dc512568882b53e4a3\",\n        \"message\": \"55a7ad9132d63ac161e7adb132b9189fdd84c361c1e4f5419a6df73df4d7aeb29a8dc4bf01490d4f484e2d12077517f5fc7ad0bdeda20a6cb0227942290b08c3fe33ab9b2135bc38a6579a54bd982f7d1417ce867117aea918dbd3dd476e7eb5b5d3c3e48a864a2f942a31501aa2b29b53b80513c95d6a411844f0dedf16a29ac267d331e53bdc2539bfcf32dc9b5d640f1231e2cafb0ae94bb5189426863364262efb47b5b5ccdbbc93324216a799b6f50d3704f15ed59af6cc7d910cf062d1be632dca5df213d487d8564f2b2bd7d818bba27c364013d92d7f72625462\",\n        \"signed\": \"fa709fbc8382af83d11812618dfaca452eab83e4c53fe9e5858467d07b6767e17975c1e06393d6dde15a34d9473d1cf4d6d8c2d57394520080fac4e43448be0755a7ad9132d63ac161e7adb132b9189fdd84c361c1e4f5419a6df73df4d7aeb29a8dc4bf01490d4f484e2d12077517f5fc7ad0bdeda20a6cb0227942290b08c3fe33ab9b2135bc38a6579a54bd982f7d1417ce867117aea918dbd3dd476e7eb5b5d3c3e48a864a2f942a31501aa2b29b53b80513c95d6a411844f0dedf16a29ac267d331e53bdc2539bfcf32dc9b5d640f1231e2cafb0ae94bb5189426863364262efb47b5b5ccdbbc93324216a799b6f50d3704f15ed59af6cc7d910cf062d1be632dca5df213d487d8564f2b2bd7d818bba27c364013d92d7f72625462\",\n        \"signature\": \"fa709fbc8382af83d11812618dfaca452eab83e4c53fe9e5858467d07b6767e17975c1e06393d6dde15a34d9473d1cf4d6d8c2d57394520080fac4e43448be07\"\n    },\n    {\n        \"secret_key\": \"ae1d2c6b171be24c2e413d364dcda97fa476aaf9123d3366b0be03a142fe6e7d\",\n        \"public_key\": \"d437f57542c681dd543487408ec7a44bd42a5fd545ce2f4c8297d67bb0b3aa7b\",\n        \"message\": \"9e6c2fc76e30f17cd8b498845da44f22d55bec150c6130b411c6339d14b39969ab1033be687569a991a06f70b2a8a6931a777b0e4be6723cd75e5aa7532813ef50b3d37271640fa2fb287c0355257641ea935c851c0b6ac68be72c88dfc5856fb53543fb377b0dbf64808afcc4274aa456855ad28f61267a419bc72166b9ca73cd3bb79bf7dd259baa75911440974b68e8ba95a78cbbe1cb6ad807a33a1cce2f406ff7bcbd058b44a311b38ab4d4e61416c4a74d883d6a6a794abd9cf1c039028bf1b20e3d4990aae86f32bf06cd8349a7a884cce0165e36a0640e987b9d51\",\n        \"signed\": \"909008f3fcfff43988aee1314b15b1822caaa8dab120bd452af494e08335b44a94c313c4b145eadd5166eaac034e29b7e6ac7941d5961fc49d260e1c4820b00e9e6c2fc76e30f17cd8b498845da44f22d55bec150c6130b411c6339d14b39969ab1033be687569a991a06f70b2a8a6931a777b0e4be6723cd75e5aa7532813ef50b3d37271640fa2fb287c0355257641ea935c851c0b6ac68be72c88dfc5856fb53543fb377b0dbf64808afcc4274aa456855ad28f61267a419bc72166b9ca73cd3bb79bf7dd259baa75911440974b68e8ba95a78cbbe1cb6ad807a33a1cce2f406ff7bcbd058b44a311b38ab4d4e61416c4a74d883d6a6a794abd9cf1c039028bf1b20e3d4990aae86f32bf06cd8349a7a884cce0165e36a0640e987b9d51\",\n        \"signature\": \"909008f3fcfff43988aee1314b15b1822caaa8dab120bd452af494e08335b44a94c313c4b145eadd5166eaac034e29b7e6ac7941d5961fc49d260e1c4820b00e\"\n    },\n    {\n        \"secret_key\": \"0265a7944baccfebf417b87ae1e6df2ff2a544ffb58225a08e092be03f026097\",\n        \"public_key\": \"63d327615ea0139be0740b618aff1acfa818d4b0c2cfeaf0da93cdd5245fb5a9\",\n        \"message\": \"874ed712a2c41c26a2d9527c55233fde0a4ffb86af8e8a1dd0a820502c5a26932bf87ee0de72a8874ef2eebf83384d443f7a5f46a1233b4fb514a2469981824894f325bf86aa0fe1217153d40f3556c43a8ea9269444e149fb70e9415ae0766c565d93d1d6368f9a23a0ad76f9a09dbf79634aa97178677734d04ef1a5b3f87ce1ee9fc5a9ac4e7a72c9d7d31ec89e28a845d2e1103c15d6410ce3c723b0cc2209f698aa9fa288bbbecfd9e5f89cdcb09d3c215feb47a58b71ea70e2abead67f1b08ea6f561fb93ef05232eedabfc1c7702ab039bc465cf57e207f1093fc8208\",\n        \"signed\": \"b6c445b7eddca5935c61708d44ea5906bd19cc54224eae3c8e46ce99f5cbbd341f26623938f5fe04070b1b02e71fbb7c78a90c0dda66cb143fab02e6a0bae306874ed712a2c41c26a2d9527c55233fde0a4ffb86af8e8a1dd0a820502c5a26932bf87ee0de72a8874ef2eebf83384d443f7a5f46a1233b4fb514a2469981824894f325bf86aa0fe1217153d40f3556c43a8ea9269444e149fb70e9415ae0766c565d93d1d6368f9a23a0ad76f9a09dbf79634aa97178677734d04ef1a5b3f87ce1ee9fc5a9ac4e7a72c9d7d31ec89e28a845d2e1103c15d6410ce3c723b0cc2209f698aa9fa288bbbecfd9e5f89cdcb09d3c215feb47a58b71ea70e2abead67f1b08ea6f561fb93ef05232eedabfc1c7702ab039bc465cf57e207f1093fc8208\",\n        \"signature\": \"b6c445b7eddca5935c61708d44ea5906bd19cc54224eae3c8e46ce99f5cbbd341f26623938f5fe04070b1b02e71fbb7c78a90c0dda66cb143fab02e6a0bae306\"\n    },\n    {\n        \"secret_key\": \"6bce4dfd53bfa5506f2f554d2d994a0dc40cafcdec7e1be050006e5c5a4b38a1\",\n        \"public_key\": \"c890023728d8397070291771e65e034d34d4aae5e247653e4ff4c074591da702\",\n        \"message\": \"3239190747ee33d40bf870ac9ad49d88ee320f63c05257e8ab2c60306597ce76d1f1e792ab6a65caa544fbec20892fd4960594f31b3763ef07d4982eae4a2dbf3377dcc1e3f95e46ed39b7f0222f04bb5c3b434c8f9f310de9f122a29f8241e81e206549ae628d2b8ad768972c98847c1188ad04c835356378bef79cd126869405b129fdbdc3bc489cbd1399505dadef7617b5be5da173d3e80e5838c99e349276242729e0219bd7476ae5c4f81a12878fb483a6c0e9b0df2962eb0bf00157782cf768a1b71c010169ee8522def0024ad7e45775a290639c53aaf48198c42de75c\",\n        \"signed\": \"99ae6782ff27646c27f61e23636ae1881521cfa5ed256f70bce7ce00b68280ce8e0c82aa765afb8b5a1ff2fe42c57441e458e443dc8b123477ae33d884888c0b3239190747ee33d40bf870ac9ad49d88ee320f63c05257e8ab2c60306597ce76d1f1e792ab6a65caa544fbec20892fd4960594f31b3763ef07d4982eae4a2dbf3377dcc1e3f95e46ed39b7f0222f04bb5c3b434c8f9f310de9f122a29f8241e81e206549ae628d2b8ad768972c98847c1188ad04c835356378bef79cd126869405b129fdbdc3bc489cbd1399505dadef7617b5be5da173d3e80e5838c99e349276242729e0219bd7476ae5c4f81a12878fb483a6c0e9b0df2962eb0bf00157782cf768a1b71c010169ee8522def0024ad7e45775a290639c53aaf48198c42de75c\",\n        \"signature\": \"99ae6782ff27646c27f61e23636ae1881521cfa5ed256f70bce7ce00b68280ce8e0c82aa765afb8b5a1ff2fe42c57441e458e443dc8b123477ae33d884888c0b\"\n    },\n    {\n        \"secret_key\": \"17861a8d4154acd4fa9c8fc947c1886c11290be222872ff4f8cd25939e4d1361\",\n        \"public_key\": \"43773f4449065eaebaf8937baf758560b0c4d2de46977839b3b873d5d7d5fd8f\",\n        \"message\": \"184df5ea3215ebe180390b0ff042ba2381155a038dc732f76a01c7e70f82d1ccc9de9a0596b3fee447209c992684f643df21f4cf9d179262790e8623e42472dc351997e6da189c07e1e8882c07f86c6337ec0113912cf92215c8de1982b8fc57bfabc55a3e8736f73610429d97feb51d794f505d0c5a0b3abd48ef7f55a628f90b8567a1c15ea9d190d7bf4ec2bc9334ada6cb92808dfc2064836fcfa46b96fd7a5d6f4b054dab09b73595feb89ed005b9ec9d3188121de69696d64e7c7bbdfc1c469faf148c38a7785970afe1acd06a92c99478fe44974e3bb2095e4467e9b2e996\",\n        \"signed\": \"a5ee024ccdbdd4c21a24709ec53dccb7ee17626dd00a093d0884f5b45c4c9d1691840151c33c8aa07b69b34e16f61647ebe793ae4daa70cff48e6ab42ffdbc00184df5ea3215ebe180390b0ff042ba2381155a038dc732f76a01c7e70f82d1ccc9de9a0596b3fee447209c992684f643df21f4cf9d179262790e8623e42472dc351997e6da189c07e1e8882c07f86c6337ec0113912cf92215c8de1982b8fc57bfabc55a3e8736f73610429d97feb51d794f505d0c5a0b3abd48ef7f55a628f90b8567a1c15ea9d190d7bf4ec2bc9334ada6cb92808dfc2064836fcfa46b96fd7a5d6f4b054dab09b73595feb89ed005b9ec9d3188121de69696d64e7c7bbdfc1c469faf148c38a7785970afe1acd06a92c99478fe44974e3bb2095e4467e9b2e996\",\n        \"signature\": \"a5ee024ccdbdd4c21a24709ec53dccb7ee17626dd00a093d0884f5b45c4c9d1691840151c33c8aa07b69b34e16f61647ebe793ae4daa70cff48e6ab42ffdbc00\"\n    },\n    {\n        \"secret_key\": \"0a84baa54f11cf17090fec61f3f9401508a3a03887aca1a7939394b1ee40a925\",\n        \"public_key\": \"309a73c62d23d740f2e93c18587ac15e7ec480d25ac0794e10f8cd461cc2b130\",\n        \"message\": \"fe70017b14678b0d3ad03e183d6f53314378379ab3da65b3511257b3d54086e86f2031139021391af9d72085ff7c3dc8c1e2d91e53333855423d0f785e2cc5f8b7799fcf1b70e6becb788e53e9020f2995ddb0c383a1f81038fc3d543ce0a38c9c288a9bc4077f4277dcc6c5642263fcfe19688005a603f57675d2434f3ed1f46d32f14eaeb073e83ee7086da2fb67659d3fb68c62320b7727b3b8ea006576bc2c7e6b5f1ecefa8b92e70c92c88951d0c12d91de801c38b7ca5a0a04b4c3429aba86386e96e06afd20d4c5c2fe2b9b4273eb05201a79273abdbeb37ed1830d226b6bdb\",\n        \"signed\": \"4d870bd53af8f13f214d9934ec903ac48284092cd9b162a44ccec851fa942de715ccda07b7991d712723e7a4d5b4f0374ab85ac3867e0b53ebc46b530f9fed05fe70017b14678b0d3ad03e183d6f53314378379ab3da65b3511257b3d54086e86f2031139021391af9d72085ff7c3dc8c1e2d91e53333855423d0f785e2cc5f8b7799fcf1b70e6becb788e53e9020f2995ddb0c383a1f81038fc3d543ce0a38c9c288a9bc4077f4277dcc6c5642263fcfe19688005a603f57675d2434f3ed1f46d32f14eaeb073e83ee7086da2fb67659d3fb68c62320b7727b3b8ea006576bc2c7e6b5f1ecefa8b92e70c92c88951d0c12d91de801c38b7ca5a0a04b4c3429aba86386e96e06afd20d4c5c2fe2b9b4273eb05201a79273abdbeb37ed1830d226b6bdb\",\n        \"signature\": \"4d870bd53af8f13f214d9934ec903ac48284092cd9b162a44ccec851fa942de715ccda07b7991d712723e7a4d5b4f0374ab85ac3867e0b53ebc46b530f9fed05\"\n    },\n    {\n        \"secret_key\": \"38379423dafdbf25e19d7231bddd80b4cefcfe2aed932584dfa0cc3c9f9232de\",\n        \"public_key\": \"597e81dcee9448b77de6829e7921c8a390535d89a0849430aed66364ee140d8b\",\n        \"message\": \"36125ca66668802906237e63a2fe5ae610f11a7cf92520d19e6690a3adfafd5d07a784bc1a0e185273d11d340d5eff901597dedf450c4699d43f3fb168d557f6c9c03077c3cdc370d34832ccdf2a8e3d75796490ed0242899d25ddf44bfc66f329cf4c45168703c31bc9202d890f3969ffd3ac35a12818dca751ceb8808fe81efa26a5e0d200c5ec1d94a5097ea74b6498fe288f30c48d727e9d3d35c8e12d85420702556f2861484ffd09b4f12265cc9abafeb82cf590028895a7d050ff57ccf5f28022d016ab4094b062e48b66fd36d1e19626e5215efa40fb7e3b7062f81e954830c9\",\n        \"signed\": \"d8b50a88aed6f2a96d082213adf8b2519f6a0bbd30dd3cb0f3fd3ce1c643fc029946cd43462ed22513f1d65fca24bde3818166baa86daa798792afafe0c1a10a36125ca66668802906237e63a2fe5ae610f11a7cf92520d19e6690a3adfafd5d07a784bc1a0e185273d11d340d5eff901597dedf450c4699d43f3fb168d557f6c9c03077c3cdc370d34832ccdf2a8e3d75796490ed0242899d25ddf44bfc66f329cf4c45168703c31bc9202d890f3969ffd3ac35a12818dca751ceb8808fe81efa26a5e0d200c5ec1d94a5097ea74b6498fe288f30c48d727e9d3d35c8e12d85420702556f2861484ffd09b4f12265cc9abafeb82cf590028895a7d050ff57ccf5f28022d016ab4094b062e48b66fd36d1e19626e5215efa40fb7e3b7062f81e954830c9\",\n        \"signature\": \"d8b50a88aed6f2a96d082213adf8b2519f6a0bbd30dd3cb0f3fd3ce1c643fc029946cd43462ed22513f1d65fca24bde3818166baa86daa798792afafe0c1a10a\"\n    },\n    {\n        \"secret_key\": \"f925d274aaf1fe1a21656237385e97f7783e78090c5d4217fece7057c80f426d\",\n        \"public_key\": \"3b0fc370be3a4b19a88ab998c59504ffb59a87606338e673df5b3fab4d9bfb8d\",\n        \"message\": \"143caafa5f62b13e43dffa49d420fa99f771b1926d40d6cb2bbb427f27b6c266eb3deb2d8bbbd47b8214ad40251cb1907ad65eb94193e54ad85c6700b4189e80f1cc0154c63ed151a8bbbd30e01637ca58e70aa3ee52ef75d0873078a405014f786eb2d77b7f4422f927823e475e05b24245f9068a67f14f4f3cfb1eb30bfede7b3262230ced9e31361db19636b2c12fdf1b9c14510acd5bc18c0ddf7635e003503e6f71e1c365cdfb4c65ee75b4de0694af87076374d631e6c4b8e240fa51dab5e1f80ca2a06c49f42ea09e0475defb184d9cde9f58f959e64092aac8f2027e468126f2fb\",\n        \"signed\": \"79549a317d10a0be322a94a151ad11e77efc4836cc8006a85081273d7602a638963a9caf19c3edf1e25fad1e9d68701a71dea727da6a5c5bcac9339589224b05143caafa5f62b13e43dffa49d420fa99f771b1926d40d6cb2bbb427f27b6c266eb3deb2d8bbbd47b8214ad40251cb1907ad65eb94193e54ad85c6700b4189e80f1cc0154c63ed151a8bbbd30e01637ca58e70aa3ee52ef75d0873078a405014f786eb2d77b7f4422f927823e475e05b24245f9068a67f14f4f3cfb1eb30bfede7b3262230ced9e31361db19636b2c12fdf1b9c14510acd5bc18c0ddf7635e003503e6f71e1c365cdfb4c65ee75b4de0694af87076374d631e6c4b8e240fa51dab5e1f80ca2a06c49f42ea09e0475defb184d9cde9f58f959e64092aac8f2027e468126f2fb\",\n        \"signature\": \"79549a317d10a0be322a94a151ad11e77efc4836cc8006a85081273d7602a638963a9caf19c3edf1e25fad1e9d68701a71dea727da6a5c5bcac9339589224b05\"\n    },\n    {\n        \"secret_key\": \"971f806be6f07d41be8830ff8dae704b08638ad6cff722d8432538127b769625\",\n        \"public_key\": \"af6ac98dce2078a6c73f6097bab63f205caf6953afa284d042bd50a4fce96cb4\",\n        \"message\": \"013455d049aa54ed995fbd94e6369955495395e4438822259b1060e9a34779042a1a69211f6ea2077399dd234806ba0b353cd79a57e1c49b250ab27106dcde576ecfa115eae461febb12d2da25ffcf17b715f8d95c2f0c425d5a81f700115b70d49e1cfe49fcaa14fa205e28ec85247f1a6e7128bf3bb3060dc08464bda6538540d0ac472093e5a0720fde2f3dc4788e0e9b0dbfe2a2b5f1a0f3f80de984025b15c65af77f671e1c5e2840444de5c7eda025e6dc1a3ff16e26cc54cdeed56be73f9b01ab2b1bc16c8ef58a5b76dd47287807e5c50f0d7c0a5b8120dfde645a012c5cf11491bc\",\n        \"signed\": \"2037a0a7674b84ff27d0b22f62b4bac65e2dc0f5fdc899feb7800f25c29981dee641c5a50f8b9410970b49d2d53658c89ee16961dccf5391a6918f2a84eada0b013455d049aa54ed995fbd94e6369955495395e4438822259b1060e9a34779042a1a69211f6ea2077399dd234806ba0b353cd79a57e1c49b250ab27106dcde576ecfa115eae461febb12d2da25ffcf17b715f8d95c2f0c425d5a81f700115b70d49e1cfe49fcaa14fa205e28ec85247f1a6e7128bf3bb3060dc08464bda6538540d0ac472093e5a0720fde2f3dc4788e0e9b0dbfe2a2b5f1a0f3f80de984025b15c65af77f671e1c5e2840444de5c7eda025e6dc1a3ff16e26cc54cdeed56be73f9b01ab2b1bc16c8ef58a5b76dd47287807e5c50f0d7c0a5b8120dfde645a012c5cf11491bc\",\n        \"signature\": \"2037a0a7674b84ff27d0b22f62b4bac65e2dc0f5fdc899feb7800f25c29981dee641c5a50f8b9410970b49d2d53658c89ee16961dccf5391a6918f2a84eada0b\"\n    },\n    {\n        \"secret_key\": \"2bb0652f8fff6901991148c68a3267877271006ae9589149bb206850cdf52fb0\",\n        \"public_key\": \"c03b77be983e74a234c1986496b292e139992eb7529e70b3afad7ae4fdcf8a66\",\n        \"message\": \"b923ca67e396d8656fa3dbce8289a38bd3c128cefb30efc1862bb944b4507805419824ce2b83d690ef4cf107492817143bf64c024989af1a7d2e1f5ac97874f86bb0d3773ff840f514d9a1394a3959b011d3a6b816a3fae5de17b2a9ff349863d27fbbb50cca734108751000d6358ca0647a93eb49e2e7af06287d48f2c09d5c1c73e4d8f77ea2bcaa7356795b26728719bed5ffdb821578bd5d66bf92edaf8b238b2bbd7d1e2c30a787f901a33d0a76669a9c3c7f2b552ccb8349c7ded5e1a46170cf28e359e2fdd54b05a562f528c68a56974df82d466637c8e53246a7217e4386801e0e3266\",\n        \"signed\": \"4e158deaaec3d88941296af2d27341012b0241d4e0f46e435e375c9875e89f5e32c057b527bc3411af096a77bfceb45b983efe455e3f03155d6bc7b0acc8e60cb923ca67e396d8656fa3dbce8289a38bd3c128cefb30efc1862bb944b4507805419824ce2b83d690ef4cf107492817143bf64c024989af1a7d2e1f5ac97874f86bb0d3773ff840f514d9a1394a3959b011d3a6b816a3fae5de17b2a9ff349863d27fbbb50cca734108751000d6358ca0647a93eb49e2e7af06287d48f2c09d5c1c73e4d8f77ea2bcaa7356795b26728719bed5ffdb821578bd5d66bf92edaf8b238b2bbd7d1e2c30a787f901a33d0a76669a9c3c7f2b552ccb8349c7ded5e1a46170cf28e359e2fdd54b05a562f528c68a56974df82d466637c8e53246a7217e4386801e0e3266\",\n        \"signature\": \"4e158deaaec3d88941296af2d27341012b0241d4e0f46e435e375c9875e89f5e32c057b527bc3411af096a77bfceb45b983efe455e3f03155d6bc7b0acc8e60c\"\n    },\n    {\n        \"secret_key\": \"db9b812cb3c7c03b977f487d3d65ccd9cd2f3dee11602067dbfb72b589ff3f79\",\n        \"public_key\": \"ffa038ad8c3b378ce75d65844d08e3d6a92d194a1b7862e9d9720d20679b2944\",\n        \"message\": \"a70092c7697cd4a209567c38ba7fb71aa8f15e5827a20876923943fd6adc659c9867ac6f58a61dc7cec3d362411682000c1a9ad1295eb8b70f242d86b5865eb76b87e3f2c6941d2612ee3bcde8f19765566733152ef54e95690943285f78b375f4036585d4739deedeef6d946db61ca458ef4f650da963c385e29dfdee415fe495845f55197a870f8cdeb5a010ba6bbb32bf1a588cc774d4890184c4b2924a5b8073313bce226585f1adfc229c90bc6cc9d212e62f05d33bedac961d77cf8c2620e451de817f8c1bb16a2c59ff804b635a73a8cf8c181b3f9401c3b643d18a2f706ea9cae47071a6\",\n        \"signed\": \"a628a77421b2abab576eed35d2ee3d14561b21fa14a6e2fac263c3eadd79f2fc0669f9429b910b8422b4b29ac026a42e98d181be3507c5ed7c748a1fdcf1d807a70092c7697cd4a209567c38ba7fb71aa8f15e5827a20876923943fd6adc659c9867ac6f58a61dc7cec3d362411682000c1a9ad1295eb8b70f242d86b5865eb76b87e3f2c6941d2612ee3bcde8f19765566733152ef54e95690943285f78b375f4036585d4739deedeef6d946db61ca458ef4f650da963c385e29dfdee415fe495845f55197a870f8cdeb5a010ba6bbb32bf1a588cc774d4890184c4b2924a5b8073313bce226585f1adfc229c90bc6cc9d212e62f05d33bedac961d77cf8c2620e451de817f8c1bb16a2c59ff804b635a73a8cf8c181b3f9401c3b643d18a2f706ea9cae47071a6\",\n        \"signature\": \"a628a77421b2abab576eed35d2ee3d14561b21fa14a6e2fac263c3eadd79f2fc0669f9429b910b8422b4b29ac026a42e98d181be3507c5ed7c748a1fdcf1d807\"\n    },\n    {\n        \"secret_key\": \"ce379bbe2fa8abcba51c7a7543de5b7180771b3c44bc6b41892e7b88979bab90\",\n        \"public_key\": \"7f3cff89f41babf4fa64cba33a5bb17f413bbf2a1e112b50a8e9b1f821d849bf\",\n        \"message\": \"001a74f095c814d3beed67a8d15fc18efe235dc3f6457812a4039b7a46fe9a0e9de81a7a4e5fbab5ebe9e1e4801bd11b45c9f7ad0636a09bff42164be5749a04c02f0ab61f0ecfdfef799b827da6a274c8d3b39f2e3805a6791287eedb2314d3f842b558b9b489afe1ed37bbbcfc5e60a431d5ac60b39e946d903d6bf6b140e12c7e07f9ed7ac46a3999c6245c8ab1bdb21879a317a3dcd257a5c4f349b7f59e4e43d62d9f1cd16f518f1ca6cad37e2cb20f2598c4134291c6b8a98aae5247e26eefb76aa38c9c8231c17e9dbf271cec80fba5b4a834bd9be81ea841637aa9cdd4c4bf26d7ad24ca3c\",\n        \"signed\": \"da98dfb189385b2c853b6cf375738046a8f27ef27974abcecea1db02989b951fe433a6ce1e225b3fa82032fe060a7d3f6c183fd1157f791a064b407650571600001a74f095c814d3beed67a8d15fc18efe235dc3f6457812a4039b7a46fe9a0e9de81a7a4e5fbab5ebe9e1e4801bd11b45c9f7ad0636a09bff42164be5749a04c02f0ab61f0ecfdfef799b827da6a274c8d3b39f2e3805a6791287eedb2314d3f842b558b9b489afe1ed37bbbcfc5e60a431d5ac60b39e946d903d6bf6b140e12c7e07f9ed7ac46a3999c6245c8ab1bdb21879a317a3dcd257a5c4f349b7f59e4e43d62d9f1cd16f518f1ca6cad37e2cb20f2598c4134291c6b8a98aae5247e26eefb76aa38c9c8231c17e9dbf271cec80fba5b4a834bd9be81ea841637aa9cdd4c4bf26d7ad24ca3c\",\n        \"signature\": \"da98dfb189385b2c853b6cf375738046a8f27ef27974abcecea1db02989b951fe433a6ce1e225b3fa82032fe060a7d3f6c183fd1157f791a064b407650571600\"\n    },\n    {\n        \"secret_key\": \"2b2ee809d647023e7b77fc541f44875a35fa941d37f7c5b21fd34934d2391935\",\n        \"public_key\": \"2c29d53e1bf2c7879d73d20ba88ca07a0b216d7f6d05d93663a65c3d9e10633a\",\n        \"message\": \"c4147d64ebfda41a1be5977262958104e940c3876bcd5b6956acfdec32c660914d62623c210663cb2cbe6249d7f5274991c60e950e8e2809049953c69581d2469f4fe982c7434fedd9d4e00ae08896d62cc1fb984dd233150cc2483e159cff4097df8c036bb633003abbfbe18c8fa79b5a22270838123fc9be39b8892c80384a385028c1a81ec58c8f21060e78afd2c04bfd2d30ca3977c6edad518cc1e2004cdc14bf3d15f5f528e5af277fa182275870e5c012f5f82fb1afd04edde4578ddd2160a1a3dbc050e80bdd811bc88ead79bf93f010cd0fd4433d0bc348dacfd0947cceda62bfa49711d013\",\n        \"signed\": \"12d90685775572c9eabc9be2574ca9ae66f0e652e578b21736cd6e654f7c6b1545883d56bf760ccfc3cf87544e0004c798061257e130030cb997a788369a9a05c4147d64ebfda41a1be5977262958104e940c3876bcd5b6956acfdec32c660914d62623c210663cb2cbe6249d7f5274991c60e950e8e2809049953c69581d2469f4fe982c7434fedd9d4e00ae08896d62cc1fb984dd233150cc2483e159cff4097df8c036bb633003abbfbe18c8fa79b5a22270838123fc9be39b8892c80384a385028c1a81ec58c8f21060e78afd2c04bfd2d30ca3977c6edad518cc1e2004cdc14bf3d15f5f528e5af277fa182275870e5c012f5f82fb1afd04edde4578ddd2160a1a3dbc050e80bdd811bc88ead79bf93f010cd0fd4433d0bc348dacfd0947cceda62bfa49711d013\",\n        \"signature\": \"12d90685775572c9eabc9be2574ca9ae66f0e652e578b21736cd6e654f7c6b1545883d56bf760ccfc3cf87544e0004c798061257e130030cb997a788369a9a05\"\n    },\n    {\n        \"secret_key\": \"4ea18d6b4af8053b885ec188be48deb86ffb2a69a4cec86637bbd7b41b807c46\",\n        \"public_key\": \"e5986059976233ed77382c3d9959f34e317962696553e86ed1e5902c4bedd167\",\n        \"message\": \"e9c89a1a1119373206ce40ede3b89a82f89462a1dee9e789e9845eec21f571c0faefd430ad338e4a72c047a39a4259580387fb9aacaddc36a2b51e7b60a87ca1321ff806794cd6dd4549a4df45c2dae3e539c4d7d06b6e6e9f466ffca2fa4978ce3dc792e44a6283880cd138a75a226f985da41ffdc0e32a5a85c85fe9a43ae78fcfe57f4dd7540a6dd3924a49ab39eb69950d421151d96b1e4fd3935890f634cd52a73a755f5c2fb72f9cd5a2e67ea930915e133b47cf6b7c10a9d889c6af6b5f1f4f51094d27fbba228ac2268b344027fd49e426343cc0134399b4b510aaea50234df42c37fa1c4f4d0e\",\n        \"signed\": \"27570c002a487d000ca3928b83cb4319722c46dfb4cca260de790ec0e3c1932688f87362952818b54f51bc7aeeb263f960bc0da8964bf312ef93e81f06c80b04e9c89a1a1119373206ce40ede3b89a82f89462a1dee9e789e9845eec21f571c0faefd430ad338e4a72c047a39a4259580387fb9aacaddc36a2b51e7b60a87ca1321ff806794cd6dd4549a4df45c2dae3e539c4d7d06b6e6e9f466ffca2fa4978ce3dc792e44a6283880cd138a75a226f985da41ffdc0e32a5a85c85fe9a43ae78fcfe57f4dd7540a6dd3924a49ab39eb69950d421151d96b1e4fd3935890f634cd52a73a755f5c2fb72f9cd5a2e67ea930915e133b47cf6b7c10a9d889c6af6b5f1f4f51094d27fbba228ac2268b344027fd49e426343cc0134399b4b510aaea50234df42c37fa1c4f4d0e\",\n        \"signature\": \"27570c002a487d000ca3928b83cb4319722c46dfb4cca260de790ec0e3c1932688f87362952818b54f51bc7aeeb263f960bc0da8964bf312ef93e81f06c80b04\"\n    },\n    {\n        \"secret_key\": \"fc1b75d17d3807217351d2aa40d9b04f525b89ed3f5fcdb311bec2aec5cb7ece\",\n        \"public_key\": \"55e484e774a4392a9d6eeff835a8fbb232cf6276a89c74fc0d1bb2045a8b21be\",\n        \"message\": \"d031bd11da308097e3beb6ffdb2600ee6a193ca6d8324501c972b1a25166fa7a369f5bc882ea45612cf02580254d21b40b0363237e835dae2656c1b7f4736e88be53d6b119c07f5729bbd82f67de03588322879243c5990a7e61f56907b24171a57cbb0bbefba2316277af9326f9cbf3538bcbf6780be41825a2ca774b41bdb1cd5c608851ec2339eb2f4feeddaa891a6326b29d97d7fbf311e3bb749c5d4c058dcc14f452f9334991e271c16d6508c818633927f429804ca7a38170f1b9f6bd73ed675e11e8c0d321fac912730b4ba2f7c428534adcaa4dad314c55807e6c642d494c6b2f0e8cd129775cc0\",\n        \"signed\": \"9a68d151fea3909893359e60b96b68b2a3e2946f2b47b875398a1e39eb01463d35eae7d976f833a762b51f2726ee0dccad5ce3600564fd9dd58c23807fdffd05d031bd11da308097e3beb6ffdb2600ee6a193ca6d8324501c972b1a25166fa7a369f5bc882ea45612cf02580254d21b40b0363237e835dae2656c1b7f4736e88be53d6b119c07f5729bbd82f67de03588322879243c5990a7e61f56907b24171a57cbb0bbefba2316277af9326f9cbf3538bcbf6780be41825a2ca774b41bdb1cd5c608851ec2339eb2f4feeddaa891a6326b29d97d7fbf311e3bb749c5d4c058dcc14f452f9334991e271c16d6508c818633927f429804ca7a38170f1b9f6bd73ed675e11e8c0d321fac912730b4ba2f7c428534adcaa4dad314c55807e6c642d494c6b2f0e8cd129775cc0\",\n        \"signature\": \"9a68d151fea3909893359e60b96b68b2a3e2946f2b47b875398a1e39eb01463d35eae7d976f833a762b51f2726ee0dccad5ce3600564fd9dd58c23807fdffd05\"\n    },\n    {\n        \"secret_key\": \"0d0bf4d42ef810b179eb841771de6dbde76361caf894e42a14b1e09787ea3e06\",\n        \"public_key\": \"7171510b43fc17efa80b15e320b1b0a408332542e0d36e4ab9a649cd941b5aed\",\n        \"message\": \"8e2179975d0a8e5a69fe875a3cb1e79aec49c3853e30dd0320fe3ebfb638b82f89ad1643036b37e56e0b55e0a9e22a4e283d7a27485ce9102db6787d6628b77913e10896774e495c26e8bab26e7f9a94d29aaa36aec9c26ad3f50e5d8c0b7698bb5f01b876d0d65fcf5e9e32cd7b89829ed05b0b8f63a93858985bc9569fce429fd37a211abed650f585c3b55900443b6c5d6e8a48ba67deeed07b76e969fc88430fce2709c0bb5ce926ab7f44e0cd79f4ec359ef76748883fcc3d026edd06c8b9cba54b990d30aa41f1448a10893fb0539280c599d42361433a34cdafd8ebdd92efb9c38a36daf4c74060c696\",\n        \"signed\": \"24446bdf03416a4d08614466fb851db50e91a623cacd1b0b35660f3cf933200e15308708da3499a5ad25f0f0306b7942762e20a765b7ca9b901c750b3a95320a8e2179975d0a8e5a69fe875a3cb1e79aec49c3853e30dd0320fe3ebfb638b82f89ad1643036b37e56e0b55e0a9e22a4e283d7a27485ce9102db6787d6628b77913e10896774e495c26e8bab26e7f9a94d29aaa36aec9c26ad3f50e5d8c0b7698bb5f01b876d0d65fcf5e9e32cd7b89829ed05b0b8f63a93858985bc9569fce429fd37a211abed650f585c3b55900443b6c5d6e8a48ba67deeed07b76e969fc88430fce2709c0bb5ce926ab7f44e0cd79f4ec359ef76748883fcc3d026edd06c8b9cba54b990d30aa41f1448a10893fb0539280c599d42361433a34cdafd8ebdd92efb9c38a36daf4c74060c696\",\n        \"signature\": \"24446bdf03416a4d08614466fb851db50e91a623cacd1b0b35660f3cf933200e15308708da3499a5ad25f0f0306b7942762e20a765b7ca9b901c750b3a95320a\"\n    },\n    {\n        \"secret_key\": \"57b5194d26abe4ab2116c0f03d23dbe116d48825a25e77d64648b43692ae25bf\",\n        \"public_key\": \"499c02dbad2a4eab3b6ff1aba3944b91c3f273a382c548a6f3a19c83f0a86724\",\n        \"message\": \"b4813c9d13215fe9f63a78ff7ac95173eb810b4613f0f48d6876b2bd3b2c72bc7d98cb1ac32bc41ca47f09896f79204ecfb8264ce8f3c3e76dc124da8ddc6e0dfc1e13b5a529f20c82613fb9a82e5f5d77326a861faedabc7325c59af33dae6744025e649774fc4f79134bf9f6e3d5875dd91bc8a14cc36a66283d01d8d108c13327eca53057ba50bf210c19f139de6494982646198a1246c271b0a368c10aab95cd8961235d742df4545be68bd010dc0db23b673e623609e420ee76b1056c520f9ce8fbe8ee1863df97d17b7174636c3a2b612295091948810d1d4b8a5843760a2887dc55ef512af041ec54fad3\",\n        \"signed\": \"4c7345960c8fd48a7dead71dbd61908468efa865a135568c8f9ca0055483468617a7e335840f57c6cd8f2c9805cd47a9d7cdfde53da8ef4f1adbb6f698aaf100b4813c9d13215fe9f63a78ff7ac95173eb810b4613f0f48d6876b2bd3b2c72bc7d98cb1ac32bc41ca47f09896f79204ecfb8264ce8f3c3e76dc124da8ddc6e0dfc1e13b5a529f20c82613fb9a82e5f5d77326a861faedabc7325c59af33dae6744025e649774fc4f79134bf9f6e3d5875dd91bc8a14cc36a66283d01d8d108c13327eca53057ba50bf210c19f139de6494982646198a1246c271b0a368c10aab95cd8961235d742df4545be68bd010dc0db23b673e623609e420ee76b1056c520f9ce8fbe8ee1863df97d17b7174636c3a2b612295091948810d1d4b8a5843760a2887dc55ef512af041ec54fad3\",\n        \"signature\": \"4c7345960c8fd48a7dead71dbd61908468efa865a135568c8f9ca0055483468617a7e335840f57c6cd8f2c9805cd47a9d7cdfde53da8ef4f1adbb6f698aaf100\"\n    },\n    {\n        \"secret_key\": \"068d27b21e2acfcc19c3e9673dd44142d98aacae894930e20ca067439e749a79\",\n        \"public_key\": \"e22ddd396f955bb90e284776aa76e921e50699d0ca8914a9b7b841eb5ff47d6d\",\n        \"message\": \"1c6815423d1a2c5ebe8828d1646527c17b2006e547f016b5350f010d79b13df4fb8c6ed57ba9c26c3cb0e0a64178b650a3ea5444a4fad5b20a3eb8caa702634011cf7892a0727b6e8150b0770429a37a8a0bb3a7edb891a7c90240bc0360b14e6dd770a990b31b31f33ddbf653988f82742e5eec31b27368eb0e4f1ecf4d676f49214a520d1e5b2bbb59ac2e13267e07a0cbacbed9f94d7473ed697828b0928fcc616ee02e51fcd8db4d8f7533b7b139a05e06f9e0eae32993e3025aef0590b3fbb4292a3ac40765e8584ead00266acdcbdde1457a03b7d57bd5c9e64fb06b64a50f35f0a1ec34b6ddbde767b96ffd\",\n        \"signed\": \"0c173c488ad001cbb9c43d7b30a7c071a2fdb08cf7f37daf71d7ae7128dc0d43f0f095b2929c54b773ed4a1f0bf0dc4f364f0601e8d5ae062f5b78c05bfbc7021c6815423d1a2c5ebe8828d1646527c17b2006e547f016b5350f010d79b13df4fb8c6ed57ba9c26c3cb0e0a64178b650a3ea5444a4fad5b20a3eb8caa702634011cf7892a0727b6e8150b0770429a37a8a0bb3a7edb891a7c90240bc0360b14e6dd770a990b31b31f33ddbf653988f82742e5eec31b27368eb0e4f1ecf4d676f49214a520d1e5b2bbb59ac2e13267e07a0cbacbed9f94d7473ed697828b0928fcc616ee02e51fcd8db4d8f7533b7b139a05e06f9e0eae32993e3025aef0590b3fbb4292a3ac40765e8584ead00266acdcbdde1457a03b7d57bd5c9e64fb06b64a50f35f0a1ec34b6ddbde767b96ffd\",\n        \"signature\": \"0c173c488ad001cbb9c43d7b30a7c071a2fdb08cf7f37daf71d7ae7128dc0d43f0f095b2929c54b773ed4a1f0bf0dc4f364f0601e8d5ae062f5b78c05bfbc702\"\n    },\n    {\n        \"secret_key\": \"a34d52563159e0723e9f3fd133bd96e20adae623f8c798013bc36b441489bdc2\",\n        \"public_key\": \"1fb658e645de6d3efdb083a73fbd592fcd4b800e03c7bd681aeae6576bfbbe2f\",\n        \"message\": \"1d215f85c089f35f307a746c66c7c1e41d6ba37730d759e6e5622d6c6a198e40f63d37873b715df7518b3c6bb5e95a467726b97c9a0f8f5dfcdbfd1e0de357661ddeab555042b945fd899fad6d382d7917da9e12dfbda0d69900b3975165a73d0ac9de01fd3048b8fe5f0b90be67e03dc22f653a0a13eb4b0b753f3f3bbf787369ebd8bf5e00eb78bf0b3515a91e68b1d5fc6920bf4f4259f8a730efc7f1016d501ef6fb7cb8366fc8e716cfa50ea8b203cca1a316707e0b0fc57eafce82d62f7ff3ae04ac8fd041b55b19a352a69e6d4b79d0e650175168e34fa3358eac816cecf2c8dd1bf2a589113e91bb818f91f8\",\n        \"signed\": \"5fab5a7140d47873684305aa6353d3862f5fc13e54a40c9563cceac8f74008c6c445631fa864e0f1c345b5954f80056aeba25662b78827b5e8e3a9437813720f1d215f85c089f35f307a746c66c7c1e41d6ba37730d759e6e5622d6c6a198e40f63d37873b715df7518b3c6bb5e95a467726b97c9a0f8f5dfcdbfd1e0de357661ddeab555042b945fd899fad6d382d7917da9e12dfbda0d69900b3975165a73d0ac9de01fd3048b8fe5f0b90be67e03dc22f653a0a13eb4b0b753f3f3bbf787369ebd8bf5e00eb78bf0b3515a91e68b1d5fc6920bf4f4259f8a730efc7f1016d501ef6fb7cb8366fc8e716cfa50ea8b203cca1a316707e0b0fc57eafce82d62f7ff3ae04ac8fd041b55b19a352a69e6d4b79d0e650175168e34fa3358eac816cecf2c8dd1bf2a589113e91bb818f91f8\",\n        \"signature\": \"5fab5a7140d47873684305aa6353d3862f5fc13e54a40c9563cceac8f74008c6c445631fa864e0f1c345b5954f80056aeba25662b78827b5e8e3a9437813720f\"\n    },\n    {\n        \"secret_key\": \"58dfe768bf52118494b29975154cf452bd9746dc7de1d6bcd18ee6a05acfd858\",\n        \"public_key\": \"0f1476c6cc2a1b4764af75805e77341f14a0d8b09c6a5b2ea287fd517c3fa6b9\",\n        \"message\": \"609794201c4f6faf488790d61dbff3f41b328c5b0695cbe9aa8a136d72b4977b21b500f216e9f32168ada8c13bff25327647e30d8a244d74d88303abc90b7f71aa07ca04d17bc8a0167d6e63fb88baa1dab81d50f1e91f46f5af77f2e8408b826336a35052efffdf4af79596af1bb2259f83c1bc109cfdc3dd50fd96d310f27ea4c6c7690f21815ea92bd79389680cfe3ed40c80181190688d24222d9a1ed52ce6a16b41dbd9107eb6d2e3594e4494d75dd7c089e3b26ffd00d1003c92c4c39ae5382ef9291491a880ca4ec3ac2b86e66719b92b6f7cea2cb0bbb1cf624d0d1abeae556e5f73909dd546277037ec972fd4\",\n        \"signed\": \"977137a38af44f4b262abff7e07282433c58926d562fbc6180bde6cd9497861fb6d955cf383d999fa1037b8b1754ce888c9ffc1560a451d0e9db8d74d2940604609794201c4f6faf488790d61dbff3f41b328c5b0695cbe9aa8a136d72b4977b21b500f216e9f32168ada8c13bff25327647e30d8a244d74d88303abc90b7f71aa07ca04d17bc8a0167d6e63fb88baa1dab81d50f1e91f46f5af77f2e8408b826336a35052efffdf4af79596af1bb2259f83c1bc109cfdc3dd50fd96d310f27ea4c6c7690f21815ea92bd79389680cfe3ed40c80181190688d24222d9a1ed52ce6a16b41dbd9107eb6d2e3594e4494d75dd7c089e3b26ffd00d1003c92c4c39ae5382ef9291491a880ca4ec3ac2b86e66719b92b6f7cea2cb0bbb1cf624d0d1abeae556e5f73909dd546277037ec972fd4\",\n        \"signature\": \"977137a38af44f4b262abff7e07282433c58926d562fbc6180bde6cd9497861fb6d955cf383d999fa1037b8b1754ce888c9ffc1560a451d0e9db8d74d2940604\"\n    },\n    {\n        \"secret_key\": \"5a63ef9bd7dbf0e89fef155983659e8a0a6ca002bc42fad5a45af8e0281923f4\",\n        \"public_key\": \"e632f4dc994231cc1790c21afadaa977a589b0eb0da19fcb2792911b15ecf8af\",\n        \"message\": \"796bc8361c6e8eec39838b24f53971e820f82361e0510eb4def1db2512387d6bf35bbdfa318879209435d6887b1410b3ebc1455f91f985e0fab1ce1c505c455576bca03539d048ad3a0ed1f11c73bac6809e2ea147975bee27c65261aca117df0fae7008e2c3c130bec5533ab89351c2140c9d1a62bdf688629787f954e1c610cbb75edb86209d7c357cd06ef41931dd5dfd1c7d407fa4ee1ef29393beab5713173802cce2d56229cfa76b601662c4d9a84a4936c52abb1981378b717eb55cb604a68d34f03b219f32226ca0e669348a2d8d2453930eb6e9c2bf66fa4e92c75136e148cdb034130d3f646382e1c71579ac70\",\n        \"signed\": \"75461f99650c0368058113a15ba16bd2337b2e633da38112878c4834fac9ba2e307c866c02af79bea33659614cbb4465c57ec3effd4c478ae38a34a05cf1ed07796bc8361c6e8eec39838b24f53971e820f82361e0510eb4def1db2512387d6bf35bbdfa318879209435d6887b1410b3ebc1455f91f985e0fab1ce1c505c455576bca03539d048ad3a0ed1f11c73bac6809e2ea147975bee27c65261aca117df0fae7008e2c3c130bec5533ab89351c2140c9d1a62bdf688629787f954e1c610cbb75edb86209d7c357cd06ef41931dd5dfd1c7d407fa4ee1ef29393beab5713173802cce2d56229cfa76b601662c4d9a84a4936c52abb1981378b717eb55cb604a68d34f03b219f32226ca0e669348a2d8d2453930eb6e9c2bf66fa4e92c75136e148cdb034130d3f646382e1c71579ac70\",\n        \"signature\": \"75461f99650c0368058113a15ba16bd2337b2e633da38112878c4834fac9ba2e307c866c02af79bea33659614cbb4465c57ec3effd4c478ae38a34a05cf1ed07\"\n    },\n    {\n        \"secret_key\": \"8b2f06141e401163f90f674b04dc90dcb6dd3386419339662ecb0dffadf2500b\",\n        \"public_key\": \"54da934a659119198553fd4566b660d8d610adc3290cb84829c894148cf3f67e\",\n        \"message\": \"1deb25d43458690323a7d26a26695090993474f467c6fde5ddb34da945be3cea2f6b75652ae21cbc4fd22763a1b45583e1c3e88bbb5fea2049b7336c91159988c01526824ca3bef16b362b9202b8b9754185bd61bea8f539aadf4a1ab135fbc31d2a8e33178073106cbbc02d4cd0d3c8feaa8eb733084356251795afbd78ac3c4f8a3ba19aed755c646f35569c7a6c675b6d6918e834969aca03f71a2e72ccb17003bb75b62e852aaf58b3baea89bcd64a32eb14a6b9e10de48971e53d0e9ac99a78f42de0382ef0e80ed3cfa343f35e4a9983b9aeed986d3a57f47e5e46d40e9d677302809a2d37e4ec011f051b4d031ed600\",\n        \"signed\": \"d68e3750dc56432397401c98ff1529db9ed48fea246dd4ed383ec74c1a463aeb784c87b1fda8bbce970fc97aa9807ddbe95d41fb022ea68c1e311654fa1da2071deb25d43458690323a7d26a26695090993474f467c6fde5ddb34da945be3cea2f6b75652ae21cbc4fd22763a1b45583e1c3e88bbb5fea2049b7336c91159988c01526824ca3bef16b362b9202b8b9754185bd61bea8f539aadf4a1ab135fbc31d2a8e33178073106cbbc02d4cd0d3c8feaa8eb733084356251795afbd78ac3c4f8a3ba19aed755c646f35569c7a6c675b6d6918e834969aca03f71a2e72ccb17003bb75b62e852aaf58b3baea89bcd64a32eb14a6b9e10de48971e53d0e9ac99a78f42de0382ef0e80ed3cfa343f35e4a9983b9aeed986d3a57f47e5e46d40e9d677302809a2d37e4ec011f051b4d031ed600\",\n        \"signature\": \"d68e3750dc56432397401c98ff1529db9ed48fea246dd4ed383ec74c1a463aeb784c87b1fda8bbce970fc97aa9807ddbe95d41fb022ea68c1e311654fa1da207\"\n    },\n    {\n        \"secret_key\": \"dc649fbb1bee0a44814d6d9e9080d5d90c1fc173ab5fefed826a74723a774e0a\",\n        \"public_key\": \"0214c89f3867ad2e8870e50f8c2a6254986d9c220e3338411300cd9c6404d4b1\",\n        \"message\": \"328700a8ae581c1edc4e2c00c78bf4606097f9bd75aade205a243c5fd7434d6222da937e2881a2e3c574356d4d5679301da99e11cf749c27921c8caa2ab2a564d87c5df8ecf1a72b680184824f6986022e3fc98bd2a21c3455abf1154954fb30c89882947b02f35af7b1bfad05237d242e2b74832fc536196f2e59d1acd0c1db6f1943d0f6043bbd6a769083ed66ba0e05a50feb0acf72b6c16ba9af039afb7fe2a4aaeb4d06181c5a1878689e67a3f5d0ad39e794d6239a7e0a12ce820c5be60fd5f1dd79702f49d02b79755fe873f5785c72f74625cd7e2428262597d31482c2c0508801fd96319d61b91ba253a5e722f414cf\",\n        \"signed\": \"0e0c5e4e184375da4ef7e2a2e4888050cd84e2fe21d08e84a852db2be3fbc372c472de0954dcd1dc11aec493c569f40fc6f77f03ee524fb06ec40faa1d6cc10f328700a8ae581c1edc4e2c00c78bf4606097f9bd75aade205a243c5fd7434d6222da937e2881a2e3c574356d4d5679301da99e11cf749c27921c8caa2ab2a564d87c5df8ecf1a72b680184824f6986022e3fc98bd2a21c3455abf1154954fb30c89882947b02f35af7b1bfad05237d242e2b74832fc536196f2e59d1acd0c1db6f1943d0f6043bbd6a769083ed66ba0e05a50feb0acf72b6c16ba9af039afb7fe2a4aaeb4d06181c5a1878689e67a3f5d0ad39e794d6239a7e0a12ce820c5be60fd5f1dd79702f49d02b79755fe873f5785c72f74625cd7e2428262597d31482c2c0508801fd96319d61b91ba253a5e722f414cf\",\n        \"signature\": \"0e0c5e4e184375da4ef7e2a2e4888050cd84e2fe21d08e84a852db2be3fbc372c472de0954dcd1dc11aec493c569f40fc6f77f03ee524fb06ec40faa1d6cc10f\"\n    },\n    {\n        \"secret_key\": \"39b8062da43e64e1676765d62c7fb8e0a99c4fd417d6f7e3319bb13044205f3b\",\n        \"public_key\": \"6227cefe88ea4fb27b37b5f797778bd72fdafeadccd9aeb67ad437ce08fba6a8\",\n        \"message\": \"740af679e3069fad059fa4825fa41c59fbd484aa649303c27c4f7a94711c5b713b2a6b8987859e2271a6a71eb0b4a15abde4f5168f6cb9dbdc6a27a2a13d52c9720896a1f4ce3a5345ee793b6cc3ad80d7d58163d5455b9cbd073e2b7adbff95590c7172271bd91fefdbd01657ee1750651036cdc3560b444ca2184bf4f3ea89fc973aab6fb4a8ee5704bbe5a71c99fa3b5ef0d0396249758297699ae202b819690dc7ac4692770346907845e2210d5363adeec03f0fc7761b7e0ec0fea1bcf6b04fc54b3e4c40d19b8fa649ac8479e8f80730c0c94e9f4a1ad506f2bcab0c49540f6decaa77b3d657dc38a02b28a977ece482545a\",\n        \"signed\": \"c5f626490c0ef4e1efc3edeb0cbc3f7de267057fb7b6eb8f0c813584965bc5c421feedf54241cae001ec6d5e25c9b1fba0385e5dbd95a06ec1d8ae519144960d740af679e3069fad059fa4825fa41c59fbd484aa649303c27c4f7a94711c5b713b2a6b8987859e2271a6a71eb0b4a15abde4f5168f6cb9dbdc6a27a2a13d52c9720896a1f4ce3a5345ee793b6cc3ad80d7d58163d5455b9cbd073e2b7adbff95590c7172271bd91fefdbd01657ee1750651036cdc3560b444ca2184bf4f3ea89fc973aab6fb4a8ee5704bbe5a71c99fa3b5ef0d0396249758297699ae202b819690dc7ac4692770346907845e2210d5363adeec03f0fc7761b7e0ec0fea1bcf6b04fc54b3e4c40d19b8fa649ac8479e8f80730c0c94e9f4a1ad506f2bcab0c49540f6decaa77b3d657dc38a02b28a977ece482545a\",\n        \"signature\": \"c5f626490c0ef4e1efc3edeb0cbc3f7de267057fb7b6eb8f0c813584965bc5c421feedf54241cae001ec6d5e25c9b1fba0385e5dbd95a06ec1d8ae519144960d\"\n    },\n    {\n        \"secret_key\": \"52f4675d8ccd0eb909df0a516648db26fa033ba41d43fc3845896d456e14265f\",\n        \"public_key\": \"f39e7dafc97b0a84dcbf7fa14a9403ee1fa92b85e5a7e5d05f031b44ddf1f794\",\n        \"message\": \"74427110857cb4af0a3342c2b52997bce1a0db6405c74e9651c5b85979acb071e567fe70412c4e0d8c9fa421914f6a62f2ae420b7b2f4cf80c90574221222288b65867eaa66e7e0a0557a26c549f9a7a4e70838ba4074b4cd7a9d758b378b88dd49441df802a444dcbc30624933b59922f33c20f019fe78ee24b8fba79a682f388505ac9c97f4eb87c611880026b4c23306b865173f5d716abc6cd9a9906db3430136f754129c443b20c42be2fbcbcd44034d714f58a4ba8e756607a02b608ef49648f2ad0cea99e7ab30a8dd7814004f725f49301d7b304dcda625c296d928cb581736ab739c86b469241a8259351fd37b4780a9993\",\n        \"signed\": \"4bf668827a720af68898a06ea7b44545a34ca896ecf311feea47e0686d911fadaa03118997153c65361fea15de9bb891b8909872045508ffad0cd9eab21a970274427110857cb4af0a3342c2b52997bce1a0db6405c74e9651c5b85979acb071e567fe70412c4e0d8c9fa421914f6a62f2ae420b7b2f4cf80c90574221222288b65867eaa66e7e0a0557a26c549f9a7a4e70838ba4074b4cd7a9d758b378b88dd49441df802a444dcbc30624933b59922f33c20f019fe78ee24b8fba79a682f388505ac9c97f4eb87c611880026b4c23306b865173f5d716abc6cd9a9906db3430136f754129c443b20c42be2fbcbcd44034d714f58a4ba8e756607a02b608ef49648f2ad0cea99e7ab30a8dd7814004f725f49301d7b304dcda625c296d928cb581736ab739c86b469241a8259351fd37b4780a9993\",\n        \"signature\": \"4bf668827a720af68898a06ea7b44545a34ca896ecf311feea47e0686d911fadaa03118997153c65361fea15de9bb891b8909872045508ffad0cd9eab21a9702\"\n    },\n    {\n        \"secret_key\": \"bad73c9fda4ceb9da6c701c2a6e2efc0467afa0a74f8750c52cf1fd4c8e7489a\",\n        \"public_key\": \"bb0f027a9035376e1aa3206c3d774475e351f5767ef86ef48a72c037c24cce62\",\n        \"message\": \"74b966cb780771aee63d734df3756702d1d5fdeddf32136c6358b836318a4f984fe71e7716adddbd649eba44cd4282e0055d8c1ed2d35123d66e5a98f1c0838ded563b9a20eb8007538fc7b0713e7e485e3c28f6ebc421a29dce2524db7f29205761036ada62e5b0b7d5b7f294ff17f338232fa5fd42b6f7253304092d848f50735248595da0f7ef28e568e9916bfc56d7ed0d811b59d5d891ae43e1b198071306bf525c678c6343998005fbb7869d1c40f8cac807fe2ef03f3d5b933f58978ef2906fccf7444a2936e63d928c690926c9c994ed3d666263e956fdfea27764bc5f74125bc46bc102dd3e5ff93b5e123e4b38bdef697e15\",\n        \"signed\": \"197d6b6cc88a98c06dfca0c01225edfe38a0b2289f29f8a44ec0816a952d585e2d59b5b08de100c0606296ccf5e92a99e093623144b8b22db87d92922554600574b966cb780771aee63d734df3756702d1d5fdeddf32136c6358b836318a4f984fe71e7716adddbd649eba44cd4282e0055d8c1ed2d35123d66e5a98f1c0838ded563b9a20eb8007538fc7b0713e7e485e3c28f6ebc421a29dce2524db7f29205761036ada62e5b0b7d5b7f294ff17f338232fa5fd42b6f7253304092d848f50735248595da0f7ef28e568e9916bfc56d7ed0d811b59d5d891ae43e1b198071306bf525c678c6343998005fbb7869d1c40f8cac807fe2ef03f3d5b933f58978ef2906fccf7444a2936e63d928c690926c9c994ed3d666263e956fdfea27764bc5f74125bc46bc102dd3e5ff93b5e123e4b38bdef697e15\",\n        \"signature\": \"197d6b6cc88a98c06dfca0c01225edfe38a0b2289f29f8a44ec0816a952d585e2d59b5b08de100c0606296ccf5e92a99e093623144b8b22db87d929225546005\"\n    },\n    {\n        \"secret_key\": \"707327a431dba77639b3966b2bc095f8eedf57f7a200e3b0077ce420389c92fe\",\n        \"public_key\": \"ee2496910864189fdaa3c7757eb3cda9ab1e70fc9e7f71a38a0bfc845931c95a\",\n        \"message\": \"32ef31b64eee700fca2ab21a267f8d9d3bdc689c7538fe959bf713fa995db2c0ad36dde430a8417d437b72c74e26dbe31d93701d4617fe51825cff7a544fc9f44e4345e14b4b11e15f26ffc2af8035f3f970e4dda44c0ebc0363c2b56fde218663bf78839092538fc2f39153d4eb29da0c1a08aa966601cc68ca96e993b01b173a261b2ef327650382f568fe944855b0f4fd9d15e752ac74dcfd37b3786fffcef23339c21e9270dce8891dd5eeeba9608fdc7b6fbcc99fa1b5903daa0968e1b691d19d06f215ded047ef9d76610f5de220f5041b313faf9e96c9fd7db54b5225726af435f9cbd9fd87ab40ce8f2c6940b55f0faae87850ca\",\n        \"signed\": \"fb99029feca387a5d765961e361d7172b98b7e0f11290bb1e5b57b51bc2123d0bce29020392a4fec9ae6a72c4c386cea1857cb8f9c50aa9a76d7f1687fcf290032ef31b64eee700fca2ab21a267f8d9d3bdc689c7538fe959bf713fa995db2c0ad36dde430a8417d437b72c74e26dbe31d93701d4617fe51825cff7a544fc9f44e4345e14b4b11e15f26ffc2af8035f3f970e4dda44c0ebc0363c2b56fde218663bf78839092538fc2f39153d4eb29da0c1a08aa966601cc68ca96e993b01b173a261b2ef327650382f568fe944855b0f4fd9d15e752ac74dcfd37b3786fffcef23339c21e9270dce8891dd5eeeba9608fdc7b6fbcc99fa1b5903daa0968e1b691d19d06f215ded047ef9d76610f5de220f5041b313faf9e96c9fd7db54b5225726af435f9cbd9fd87ab40ce8f2c6940b55f0faae87850ca\",\n        \"signature\": \"fb99029feca387a5d765961e361d7172b98b7e0f11290bb1e5b57b51bc2123d0bce29020392a4fec9ae6a72c4c386cea1857cb8f9c50aa9a76d7f1687fcf2900\"\n    },\n    {\n        \"secret_key\": \"6aa5c9f008f990473ba4a6286a416614026661f11e1a24efa81ac35852d1d070\",\n        \"public_key\": \"605ac9b4dbdd5033d6c828bfafa93c0039440aa11ca724ae834043e07bd032d5\",\n        \"message\": \"b5165d3963f6e6f9ea5657e9f07ff3a321eb338f9a8c3d3c42306b2b278978b31c623a631be3b04c41edfdeddf538e1b765bc8785401c1af29d0467a64411c497395d755dca03ae3272f4bc1fb1918dcc1ed6f04d6498404a8ce1409d447f570a4359522cc54629202ebe507ab693843141bd5ea0573b20f321a483ff383a46897f5926fe0b8afc25572707b63eeed283532928a4144196497942c572ac547605139256b0aa0eaf04db1a256012ed453b173ee19ad6e9b1af3f45ff3044a641f8c8eb0ac7bb45abbded47286b2a069d3908694ee06f2fbd0ef605a7911026ea9ea3c4913f38c04d8b69565a7027867ab3092d05f4cfb18fc7c\",\n        \"signed\": \"9756303b90655e935251032ab19cfc95ca1c2a2c3ea28b033bd47066cbd4c7d8982a8b9886f1b9cd02e88a65564da8dcc34f308ba9f10144ba469c2efa49e004b5165d3963f6e6f9ea5657e9f07ff3a321eb338f9a8c3d3c42306b2b278978b31c623a631be3b04c41edfdeddf538e1b765bc8785401c1af29d0467a64411c497395d755dca03ae3272f4bc1fb1918dcc1ed6f04d6498404a8ce1409d447f570a4359522cc54629202ebe507ab693843141bd5ea0573b20f321a483ff383a46897f5926fe0b8afc25572707b63eeed283532928a4144196497942c572ac547605139256b0aa0eaf04db1a256012ed453b173ee19ad6e9b1af3f45ff3044a641f8c8eb0ac7bb45abbded47286b2a069d3908694ee06f2fbd0ef605a7911026ea9ea3c4913f38c04d8b69565a7027867ab3092d05f4cfb18fc7c\",\n        \"signature\": \"9756303b90655e935251032ab19cfc95ca1c2a2c3ea28b033bd47066cbd4c7d8982a8b9886f1b9cd02e88a65564da8dcc34f308ba9f10144ba469c2efa49e004\"\n    },\n    {\n        \"secret_key\": \"8efb8b79742be21e6d31de678bc81450ba8621082cd6f0003e22861e2291c481\",\n        \"public_key\": \"33381e356c4fd386a3f7b969afd9f5c00d2067b698b3f1f00f3784202d3084cf\",\n        \"message\": \"6b750325d3a0f08a147700b51a9b3725571094818ed69d1f761013eb86f323f73c49f5e439877c2783b336d1f1a674ef3e431fc1ae0180082df5fca69f848139fe6ab6739a0592ebd6d4705c7f0136b22189a11d60d4d3c9bc80fe7d7c00952d5742f9c0c2121fe792df133f221db991fc960ee64b9d32e0178e542bce8efa8d03ac8026cd77ba8bf0b24215b9faed2eaec920e925d5ec46fff6bde725e91c8280e4ada232a5433ae9680ebb53eb55553147c93370574854896154514299c093219a111dca4e637ad5001338c6d4d5ee9098c65832f7af835bcb622128423036c79a5737738a7539f8d4a6b8b221b56d1401aeb74d4571bc009d\",\n        \"signed\": \"923005cb4848402aa8f9d5da74030b009444924c214ad600ddbab4c153a6ff022b53cf6364cd7ee99bef34fe144da964edfc38a0ba633312650ebf0e55a060096b750325d3a0f08a147700b51a9b3725571094818ed69d1f761013eb86f323f73c49f5e439877c2783b336d1f1a674ef3e431fc1ae0180082df5fca69f848139fe6ab6739a0592ebd6d4705c7f0136b22189a11d60d4d3c9bc80fe7d7c00952d5742f9c0c2121fe792df133f221db991fc960ee64b9d32e0178e542bce8efa8d03ac8026cd77ba8bf0b24215b9faed2eaec920e925d5ec46fff6bde725e91c8280e4ada232a5433ae9680ebb53eb55553147c93370574854896154514299c093219a111dca4e637ad5001338c6d4d5ee9098c65832f7af835bcb622128423036c79a5737738a7539f8d4a6b8b221b56d1401aeb74d4571bc009d\",\n        \"signature\": \"923005cb4848402aa8f9d5da74030b009444924c214ad600ddbab4c153a6ff022b53cf6364cd7ee99bef34fe144da964edfc38a0ba633312650ebf0e55a06009\"\n    },\n    {\n        \"secret_key\": \"ed046d688b2b0a1bc3daf2119dd321a607b16d2a2d1d963add1209c665b5ccba\",\n        \"public_key\": \"8734f1ffcbd71cfde290017ea6253e580d59e65b541b46521f5e5ec1451eaec6\",\n        \"message\": \"b9cc90fd8de2a141f95116db3b04be83e98522597ec2174964245180b9a473767d6d470a217db5ff5a1ab777e1e28a0b16975e2bacb873020444b47ed8326421b90ebb503688f090c11b3b13617c5c5052c297a41e2893775e34d59ada49d994c0e4a9f5220e9f0315a67705a3ec08af0dc724b5cf67ff34fada8ba7109ed2b5a8907bb403fb1a838b4b059f18c792d7bfec05dee0c9cbbf1753409d7db3aceaf47b4c61398497b0eca6c1f8ac08a7ea1eb9c40bc4e92e888212f7d9ee14fdb73158160944ff9bcdfef1a7469cc70f9474e5f24dfffea585f09eaaab4be2afebbe8e6cf86d35680dc5d1b92913e848256ec736316fd0a2142063b0\",\n        \"signed\": \"721bfd4776cfba13330fd37269e979c1d7b6ce54a51b82f456e137378e582f192a12089da5aba76a7b161813dce56b72892a35330c94f7ff21d09cf09e553504b9cc90fd8de2a141f95116db3b04be83e98522597ec2174964245180b9a473767d6d470a217db5ff5a1ab777e1e28a0b16975e2bacb873020444b47ed8326421b90ebb503688f090c11b3b13617c5c5052c297a41e2893775e34d59ada49d994c0e4a9f5220e9f0315a67705a3ec08af0dc724b5cf67ff34fada8ba7109ed2b5a8907bb403fb1a838b4b059f18c792d7bfec05dee0c9cbbf1753409d7db3aceaf47b4c61398497b0eca6c1f8ac08a7ea1eb9c40bc4e92e888212f7d9ee14fdb73158160944ff9bcdfef1a7469cc70f9474e5f24dfffea585f09eaaab4be2afebbe8e6cf86d35680dc5d1b92913e848256ec736316fd0a2142063b0\",\n        \"signature\": \"721bfd4776cfba13330fd37269e979c1d7b6ce54a51b82f456e137378e582f192a12089da5aba76a7b161813dce56b72892a35330c94f7ff21d09cf09e553504\"\n    },\n    {\n        \"secret_key\": \"76ac8e570a39b3a0232c45497537fb2155acec3617865ed1df210f00b49d1b8d\",\n        \"public_key\": \"312a3ad899ae6a25507ae6e4524e10b63a6e7ae53d9cffd39cf28521d93533d6\",\n        \"message\": \"53ced9db2b479e59d3ed643f7cc3784c24b8bd4c63206c72e23fa850028899a41ce1a8bdc003f12b7c29972c9a08bcd231fe0e1a0fef0bafbfa4e0e027d72004075ba37d490eb9964e783bb98f9e503e9c1fd3d23fb0017cc7c7a9f86d171f041e2355d8c5e6229d34c7eeacb6358cf3060d5d265bae2004a558878659a30dfed5f2ec788b4e14397b5d00c29db5d4ebf16639a8df292a3d24f6983cbca760d903e976f5b698642ba1fed49e79c38f4bb3946efccc9d6aefad336d558f78e4f205422e10384a4e531e75807efb389d2af4cab43825fb87f196a9080769fe7585782970a6918affe10d20d629b705845597418d699de3f1de854f94bd\",\n        \"signed\": \"cf03f525913c44303b2f80079393c21c1158146ecf99636f5d97adfdd9f35839804c23804cbf1e553cfd4b73f689a9143aec298f8276e1e4ee0891f1ba75de0453ced9db2b479e59d3ed643f7cc3784c24b8bd4c63206c72e23fa850028899a41ce1a8bdc003f12b7c29972c9a08bcd231fe0e1a0fef0bafbfa4e0e027d72004075ba37d490eb9964e783bb98f9e503e9c1fd3d23fb0017cc7c7a9f86d171f041e2355d8c5e6229d34c7eeacb6358cf3060d5d265bae2004a558878659a30dfed5f2ec788b4e14397b5d00c29db5d4ebf16639a8df292a3d24f6983cbca760d903e976f5b698642ba1fed49e79c38f4bb3946efccc9d6aefad336d558f78e4f205422e10384a4e531e75807efb389d2af4cab43825fb87f196a9080769fe7585782970a6918affe10d20d629b705845597418d699de3f1de854f94bd\",\n        \"signature\": \"cf03f525913c44303b2f80079393c21c1158146ecf99636f5d97adfdd9f35839804c23804cbf1e553cfd4b73f689a9143aec298f8276e1e4ee0891f1ba75de04\"\n    },\n    {\n        \"secret_key\": \"f64a66ba0f0819f3001416c220bf52d860130a19764aa8ab38d15b2aa75ac022\",\n        \"public_key\": \"8125253cd337e00d45b45079b585349561e5f542a81f6d2fcfd985c10feab2af\",\n        \"message\": \"8072862ed0ab35921db5ec2cba8e6aedb0441fdf47491006c01e6456ad70fae3c4152dcfbfdbb8f0fddec5e96b12bf67989ba96793f4861a11b63909ce8d19b8ca64a544b31ce051fbc88e062806d9965cbd2967b01614e86b532fbf59843218dc9c19c80315f044731719371092a3da38878bc4cf77de972e860466b8fc45e465dc3d0ebf94bdea60ef0b9891ced41b997b11b31ee4167db60c9cfc8b85beacfe223cc1829213774085d7c06d2b2e632cc21cd9660df47c4fa918bdd596ddf622dcb652642b67527ba8ed15a819a8e21f48d7ee70247f5200e37c259dffd17eec8c232f970cb03182fe3964132993f6ecb7c4db18ccef390c9eb3639e\",\n        \"signed\": \"4de6f5250822d7c9d5bb98582500b5c085f541ebdc450ed1acaf83684827ed1dc77147aae4b19e14a7dc5bbe1f1e4f5771d8a6e4f2351739afb08c806d5587018072862ed0ab35921db5ec2cba8e6aedb0441fdf47491006c01e6456ad70fae3c4152dcfbfdbb8f0fddec5e96b12bf67989ba96793f4861a11b63909ce8d19b8ca64a544b31ce051fbc88e062806d9965cbd2967b01614e86b532fbf59843218dc9c19c80315f044731719371092a3da38878bc4cf77de972e860466b8fc45e465dc3d0ebf94bdea60ef0b9891ced41b997b11b31ee4167db60c9cfc8b85beacfe223cc1829213774085d7c06d2b2e632cc21cd9660df47c4fa918bdd596ddf622dcb652642b67527ba8ed15a819a8e21f48d7ee70247f5200e37c259dffd17eec8c232f970cb03182fe3964132993f6ecb7c4db18ccef390c9eb3639e\",\n        \"signature\": \"4de6f5250822d7c9d5bb98582500b5c085f541ebdc450ed1acaf83684827ed1dc77147aae4b19e14a7dc5bbe1f1e4f5771d8a6e4f2351739afb08c806d558701\"\n    },\n    {\n        \"secret_key\": \"8439b1d60aa48460135eb1002cc112792995079a77e6e8ab020b9abaca8920b4\",\n        \"public_key\": \"eadc3e0c5bddbc3052c3b2f8b0a94566c2b2c879ed17034ac0e6a45f2b3e32d2\",\n        \"message\": \"5419f6d24eb46635d4a7f8eab803cfd0d04de092afbd86f2a6961a8d1eb8c0d197ba55ee08c991822a5aa702bae0337abd5ca7faa15e1f1ae369946e9b81216c0f5fc22bbd4433c3de93c5caa2741683bbd0e1a78df28dda19174101876334d40339659f021ae766162c6cc5421b79cf9d5c090ed4af07ec84493035bd0b2421b533684295bbe76a70fec596ef8c89c5c9dda3c33b7735d2d2f20b28f1a5402e72d04ba291dd59f14af08adf56eeb086d769c6bec3451891372345fd6bd02dcf95e803af0353150e182e323aaf683e036d9a135d2e6f98cb4d327e2ce7d54247f3592ed067b4ce7627174f996f28165c9c11f07e5ee9cee63851c6b68ea2\",\n        \"signed\": \"62da81e16440821b593b6ee6540e15d1aea75d23e0a1bbfedc808c9548f87e8bbf36915a39a74716f645cca5714d170af907576d4f3705e543d2adddc5ff23035419f6d24eb46635d4a7f8eab803cfd0d04de092afbd86f2a6961a8d1eb8c0d197ba55ee08c991822a5aa702bae0337abd5ca7faa15e1f1ae369946e9b81216c0f5fc22bbd4433c3de93c5caa2741683bbd0e1a78df28dda19174101876334d40339659f021ae766162c6cc5421b79cf9d5c090ed4af07ec84493035bd0b2421b533684295bbe76a70fec596ef8c89c5c9dda3c33b7735d2d2f20b28f1a5402e72d04ba291dd59f14af08adf56eeb086d769c6bec3451891372345fd6bd02dcf95e803af0353150e182e323aaf683e036d9a135d2e6f98cb4d327e2ce7d54247f3592ed067b4ce7627174f996f28165c9c11f07e5ee9cee63851c6b68ea2\",\n        \"signature\": \"62da81e16440821b593b6ee6540e15d1aea75d23e0a1bbfedc808c9548f87e8bbf36915a39a74716f645cca5714d170af907576d4f3705e543d2adddc5ff2303\"\n    },\n    {\n        \"secret_key\": \"3a046397f0afc072bc7f907c74d38fd1b9afdf27e14a3534768b0dd2df3a1c22\",\n        \"public_key\": \"99cd70ef3be342493393872f54c47deaa081021892d11a3268f3145ed4f3abe5\",\n        \"message\": \"f08ddef46cc6c34179820c9861375172fddf774f8dc3f7d64aa432da8e5fae644c0a8a9e6908517d505debd612868ac6daf95cd7e1699750022ccd4b88dbae2bbf73546ee4b835d319a842dae8b9ed683323f31e5cc57919bc9dbe3bcfffb2ada48072697ff4a7d310c91adbca81faf26a0eb7bb0c404ac9d8dfec63e9c64e2f420c07d323b7c0dc3b73507283aeb1cee51db4e1a83a692c7c1ea398f6f30940fab85e2138d4b85aa4e231e5424f5b064ed026f0ccb99d1c85a9eb15f5934a11359d411cf94ae8ffa3361a224f46bab852d184a248b4c31fe3a7e7f5134c051031a9f328a7be4a7cbbb1d8d863a400fd2d58daa44f1b9d8e9ddf961ce6322f\",\n        \"signed\": \"5024ce60257965687080c5b1fc7d1301c32aa6fcc835497d9cb23a74a6ca2724f55353c1b757827ca5440c9ef8f8c1050913e20aabec35c497b56041b5deb209f08ddef46cc6c34179820c9861375172fddf774f8dc3f7d64aa432da8e5fae644c0a8a9e6908517d505debd612868ac6daf95cd7e1699750022ccd4b88dbae2bbf73546ee4b835d319a842dae8b9ed683323f31e5cc57919bc9dbe3bcfffb2ada48072697ff4a7d310c91adbca81faf26a0eb7bb0c404ac9d8dfec63e9c64e2f420c07d323b7c0dc3b73507283aeb1cee51db4e1a83a692c7c1ea398f6f30940fab85e2138d4b85aa4e231e5424f5b064ed026f0ccb99d1c85a9eb15f5934a11359d411cf94ae8ffa3361a224f46bab852d184a248b4c31fe3a7e7f5134c051031a9f328a7be4a7cbbb1d8d863a400fd2d58daa44f1b9d8e9ddf961ce6322f\",\n        \"signature\": \"5024ce60257965687080c5b1fc7d1301c32aa6fcc835497d9cb23a74a6ca2724f55353c1b757827ca5440c9ef8f8c1050913e20aabec35c497b56041b5deb209\"\n    },\n    {\n        \"secret_key\": \"124f7416a80453e4cf1cd7b5e050a9761418258bf7d27beb7f23238c4540be2d\",\n        \"public_key\": \"0da34ab173990150df7399b6bcddba93c6dbcbf4d176941cb5071e8734c5dc92\",\n        \"message\": \"9dcb9873ff054db11d0a9b19de6885ffba7f0e681cf7fb8f6cd950c48328d1f919ca46054eeee6c9e57843ebdda7b24bc3503c4d612abb1a314f39f58221d2b54dc755acca7969740e7fa8b1a9523b8c7379fd395253f4e6cd054ee24b75613c3581d49e19246a7b3be1cecb334be44f3d626fe3b7b269e628d44580c20636eba2642f2744b959e65757d0ee601843f188e95d17253fef567068a5405a3a9e677fea3d7d55f7ead19a3f30c5f985671b55fa120cb9d05f471b6e1e8d779a2c803a19e6d0d7cd507887ed647c2a95483f933991ed45ae301a2b0e954a5703d248c78810aa0b199cc2bebb2f1d71cc40487dbd42eee0f745f7d285685b1fb31b15\",\n        \"signed\": \"b0572104aa69e529e3465a6fd28f404a4ec20276a993b1725eb8c5f650b4a216f1871b24e368cc46cd1ee0174cda1b5e4ae2200aa9fc44522d975a9c518149089dcb9873ff054db11d0a9b19de6885ffba7f0e681cf7fb8f6cd950c48328d1f919ca46054eeee6c9e57843ebdda7b24bc3503c4d612abb1a314f39f58221d2b54dc755acca7969740e7fa8b1a9523b8c7379fd395253f4e6cd054ee24b75613c3581d49e19246a7b3be1cecb334be44f3d626fe3b7b269e628d44580c20636eba2642f2744b959e65757d0ee601843f188e95d17253fef567068a5405a3a9e677fea3d7d55f7ead19a3f30c5f985671b55fa120cb9d05f471b6e1e8d779a2c803a19e6d0d7cd507887ed647c2a95483f933991ed45ae301a2b0e954a5703d248c78810aa0b199cc2bebb2f1d71cc40487dbd42eee0f745f7d285685b1fb31b15\",\n        \"signature\": \"b0572104aa69e529e3465a6fd28f404a4ec20276a993b1725eb8c5f650b4a216f1871b24e368cc46cd1ee0174cda1b5e4ae2200aa9fc44522d975a9c51814908\"\n    },\n    {\n        \"secret_key\": \"25d13b3837601b07a975693e5a33d5337c34c1127fe4c27490612aaf7f642e9a\",\n        \"public_key\": \"3a07cd68ee2692d51cfad1a80e7763b18a043c74f4e1b01edc55ba9a9e07795a\",\n        \"message\": \"115b3220b45ca8f36c7ff5b53887d47e669b78dac13b98cc7aaca5c2e19fce81ec8617ca410e11c9a9118a668453b329ffb718eaec739172f0a849a0848192a5bdea18ab4f60d8d1a0d338952d77b2cc13efe83c76e8dd58803b1d8b3c9729ef102b20835b7de872bef3010f15a4caddf07cf7bdd222d84b174bc21527cffb1b7ffde81e281d30cb7bce25ea3dffb6ea1fbb06cb70569a95ed1a07e97ca42de70aa218159efd608fa9b0896e0b58518a322f251d133e58c8fc1428ab0a170ed845c75fb403f1ffb97d2d2a6d4f277911d326c1cabbb8516cbc17908ab81ff8d79af44611ea1d05879c1ec81d06936e0f4a0aef6d5748e181d30ec25236597a973d\",\n        \"signed\": \"20cbf08392fea6a99cf446a95c199caa0c0f9813cc217b8d228e2ed90bab95ea92cd73ac95834764d33e42243c80a7603491c8d3e49ac715fd8a5b9e4789bb03115b3220b45ca8f36c7ff5b53887d47e669b78dac13b98cc7aaca5c2e19fce81ec8617ca410e11c9a9118a668453b329ffb718eaec739172f0a849a0848192a5bdea18ab4f60d8d1a0d338952d77b2cc13efe83c76e8dd58803b1d8b3c9729ef102b20835b7de872bef3010f15a4caddf07cf7bdd222d84b174bc21527cffb1b7ffde81e281d30cb7bce25ea3dffb6ea1fbb06cb70569a95ed1a07e97ca42de70aa218159efd608fa9b0896e0b58518a322f251d133e58c8fc1428ab0a170ed845c75fb403f1ffb97d2d2a6d4f277911d326c1cabbb8516cbc17908ab81ff8d79af44611ea1d05879c1ec81d06936e0f4a0aef6d5748e181d30ec25236597a973d\",\n        \"signature\": \"20cbf08392fea6a99cf446a95c199caa0c0f9813cc217b8d228e2ed90bab95ea92cd73ac95834764d33e42243c80a7603491c8d3e49ac715fd8a5b9e4789bb03\"\n    },\n    {\n        \"secret_key\": \"7b3a76decaea60c41e95b05877a7da82064c27278c8d7df5f0bb95f0ad2d0435\",\n        \"public_key\": \"f80db5c28721b1c611bd87eb145a98bbf383b068045df2458d1a6fda099f7fc2\",\n        \"message\": \"375fadaedd9cac49b64e1574028046069f4c83654c8a7011abdb64db16b47fa311798172f9072217b0a6a43e5df6ffcc1154bcec1c68e1d35ec05880d012ce76e4cebf301bb2ec983d00b4a0540c937ff1c6df9441c61bdb3be8e0c7c11a35d49b6f55c381269a0e768efbd453447fe48b75ac39646ca82eca7d149304423491871c10dbcfc5973a57fab8371c30cbc4e90becc0b67152226ee177b4ff368ec879b391eb95e36dcbb07b2c16ba395545d4529f727b1a11ef65d120976b7ccc86af4bd204cb9489c921e43ba5e850cfe59899f1c1ec4aa5c92b6dac6914b1952b53dcb540b409231381568987bb2236bc40895df3f17eab7c0274f2244f958612e88e\",\n        \"signed\": \"2cd26fb3c4f7440a72affe93564f6f6559adb15cc7a2ba10879fb7d67e47d4ebd02fe4823698a5fbd4a907fd69184c255a170e5f1747fce968102dc219b50d02375fadaedd9cac49b64e1574028046069f4c83654c8a7011abdb64db16b47fa311798172f9072217b0a6a43e5df6ffcc1154bcec1c68e1d35ec05880d012ce76e4cebf301bb2ec983d00b4a0540c937ff1c6df9441c61bdb3be8e0c7c11a35d49b6f55c381269a0e768efbd453447fe48b75ac39646ca82eca7d149304423491871c10dbcfc5973a57fab8371c30cbc4e90becc0b67152226ee177b4ff368ec879b391eb95e36dcbb07b2c16ba395545d4529f727b1a11ef65d120976b7ccc86af4bd204cb9489c921e43ba5e850cfe59899f1c1ec4aa5c92b6dac6914b1952b53dcb540b409231381568987bb2236bc40895df3f17eab7c0274f2244f958612e88e\",\n        \"signature\": \"2cd26fb3c4f7440a72affe93564f6f6559adb15cc7a2ba10879fb7d67e47d4ebd02fe4823698a5fbd4a907fd69184c255a170e5f1747fce968102dc219b50d02\"\n    },\n    {\n        \"secret_key\": \"5ff8d4052608eb033a5e94b603ce384d8452f60a26498b9112567f3410c18666\",\n        \"public_key\": \"c4900de24d9af2482763109926af7c481380fabcda9440c1a53ea1cdc27e6568\",\n        \"message\": \"138c60557c2e9008afc03d45bec71f961149a0835926751c8ff3935c7d652d83e1b0b1da7d5bbe0b8e171a4e49aae06fd8a9deff78dcde4d25b1aa899998a0f99e1df6f9337a3ea2f24b76c317a7014db4e5283191795a70d8821d217846490f958701d39dc2c8ce47d928938874d87b3558989bc77af820979a351eef9594aa5b94f3341eded4ea20b08c3e7c5610d43267818dfac0a87ddf527fbce8512bbf85b66c9bb5d62f0fe84048f23b19604a5c8d82b1f25a8da02731feb2ecae489b8475f7bd326ddf1a08189e46c08cf50538c2a363e2f4eb2c01a204c7ffbc0b981adc0fd997aafdf2a222ee84c309f6e95ec7de4fa85d4768d5c003165028225e22e09e\",\n        \"signed\": \"b737d4e5be27deb6d87729c636dff7a406c013f313c38cf683fe14f75a3b3005d9535d7e5815c8f8b37c51d6927111c979f7d9d81a347aa9cc09ed4e6c18e90f138c60557c2e9008afc03d45bec71f961149a0835926751c8ff3935c7d652d83e1b0b1da7d5bbe0b8e171a4e49aae06fd8a9deff78dcde4d25b1aa899998a0f99e1df6f9337a3ea2f24b76c317a7014db4e5283191795a70d8821d217846490f958701d39dc2c8ce47d928938874d87b3558989bc77af820979a351eef9594aa5b94f3341eded4ea20b08c3e7c5610d43267818dfac0a87ddf527fbce8512bbf85b66c9bb5d62f0fe84048f23b19604a5c8d82b1f25a8da02731feb2ecae489b8475f7bd326ddf1a08189e46c08cf50538c2a363e2f4eb2c01a204c7ffbc0b981adc0fd997aafdf2a222ee84c309f6e95ec7de4fa85d4768d5c003165028225e22e09e\",\n        \"signature\": \"b737d4e5be27deb6d87729c636dff7a406c013f313c38cf683fe14f75a3b3005d9535d7e5815c8f8b37c51d6927111c979f7d9d81a347aa9cc09ed4e6c18e90f\"\n    },\n    {\n        \"secret_key\": \"eedefc1757e3a7e5ed3946dbedc396a362f683d2c51b0b9f60765d4bfc5134de\",\n        \"public_key\": \"a9872bc2192fc02b189ceed403ab9f270a032a835fdebfaf1c9d6934ed8304bc\",\n        \"message\": \"b194db73f994cbdc3cbe630ba72c47c2249bc0592ab547942b1d1b882b44f5b3855e568bdddf92ef05022d88fcfc294e76b64a00e9c74355373763e49a4ebc47243d48a9ad588994a518f80f8615c2b31da587a53e529d435a8697350dfcde02d20cce7d5eeefe3f5ab2aac601259cda38538a1b8301f9832e75ab90f8a932f267eac181003965d5266f206180c6c380ece803577ccb46176bf607159486f24259747e2ca6fb1912db7b78a973b2846387c1208030ee1f400d0c5b5e8bde9635ae55638ba17c734de8638bb85dfcd76629a7f9f40d6ab954d55bf8575fc9c9a595097e0893db5a7b8a6c455ecbd3d22d725e19de2941f467f9eb93d66a0e2bbdbf92ed1c\",\n        \"signed\": \"d5bea8ea9a5fe9ed6d2bf839930c0c6cd5039e988f551fdedb5437e1c1af0ed7b3897c035711c3c51926be8d1b32024d5cd582f5f8369ad84d18b12502652f07b194db73f994cbdc3cbe630ba72c47c2249bc0592ab547942b1d1b882b44f5b3855e568bdddf92ef05022d88fcfc294e76b64a00e9c74355373763e49a4ebc47243d48a9ad588994a518f80f8615c2b31da587a53e529d435a8697350dfcde02d20cce7d5eeefe3f5ab2aac601259cda38538a1b8301f9832e75ab90f8a932f267eac181003965d5266f206180c6c380ece803577ccb46176bf607159486f24259747e2ca6fb1912db7b78a973b2846387c1208030ee1f400d0c5b5e8bde9635ae55638ba17c734de8638bb85dfcd76629a7f9f40d6ab954d55bf8575fc9c9a595097e0893db5a7b8a6c455ecbd3d22d725e19de2941f467f9eb93d66a0e2bbdbf92ed1c\",\n        \"signature\": \"d5bea8ea9a5fe9ed6d2bf839930c0c6cd5039e988f551fdedb5437e1c1af0ed7b3897c035711c3c51926be8d1b32024d5cd582f5f8369ad84d18b12502652f07\"\n    },\n    {\n        \"secret_key\": \"09d22bbaa5956cfacbbf9fd5510975128686c40c6ea96b89ef4c0f0c649bcd7f\",\n        \"public_key\": \"e559ea8acbdc61b6709a7d83ae15849a6c78b203923dd0a299239ee4886930ba\",\n        \"message\": \"1c26a0f3a1a5b2d7d5b297af8a6a689d7c62a25267e197d23becd2f2b816c4de92fbdaffb941c3fc8db7a84335a84cfbc92cb3ac806ed58df16b6b8e119a48df4f27c71e931a5938e7d002734885e13a258a15b6e1136efba72f1d096b689f7618f49c968063e8f991fa0b55601e430eee13492a1b09413eb23813591a7a9f070cc396ca9d1facdd4f4ce37c40f7245f55035e10fad6b85b5f01a1daacc0df94069f7de8f6467f96d1fb98648e8a0520a8cd723c98e9dc2dd4b2934d8228f0ae1a415bd3a7cda38d7a9983ce1af6f8c970a2a591635fe12b917536ef815eaf1a3138d70ce70a794264d7c986d9ee3290445f15a9248f2765271e5a992196ae331abd4164bf\",\n        \"signed\": \"e65275c4328a70ad62408ed7fb1728be87a73a814fee8ebd94f2665c71bc66ab0c1b07a600b30bc081a74c536857c20610384be268d9af3e3ecddd3eb0c14c0c1c26a0f3a1a5b2d7d5b297af8a6a689d7c62a25267e197d23becd2f2b816c4de92fbdaffb941c3fc8db7a84335a84cfbc92cb3ac806ed58df16b6b8e119a48df4f27c71e931a5938e7d002734885e13a258a15b6e1136efba72f1d096b689f7618f49c968063e8f991fa0b55601e430eee13492a1b09413eb23813591a7a9f070cc396ca9d1facdd4f4ce37c40f7245f55035e10fad6b85b5f01a1daacc0df94069f7de8f6467f96d1fb98648e8a0520a8cd723c98e9dc2dd4b2934d8228f0ae1a415bd3a7cda38d7a9983ce1af6f8c970a2a591635fe12b917536ef815eaf1a3138d70ce70a794264d7c986d9ee3290445f15a9248f2765271e5a992196ae331abd4164bf\",\n        \"signature\": \"e65275c4328a70ad62408ed7fb1728be87a73a814fee8ebd94f2665c71bc66ab0c1b07a600b30bc081a74c536857c20610384be268d9af3e3ecddd3eb0c14c0c\"\n    },\n    {\n        \"secret_key\": \"77826ed351a3f09254ae5692885d774cb3f24410a4809fd90f8a00da9aee9903\",\n        \"public_key\": \"3eac8f41ee73e6ef136821f7957a1c27e15638d0e3916e6caac6fb7beb7bcfb0\",\n        \"message\": \"1ff06c0b3999cecb1900a47d267beafbb35d93d14cb2c8925e3e3fe5d967586925ee4baa41998edd0103205810aad5c0bbdc77874476810246d13089a64db576424fae0bed9664a42a491147d1ee3b9c3b1ba4875be15462392540f9978d9a4630ba4c525499751a45efc299ec7d73b17f9ad275ee71a687e72690d7320242d2dc2bd4d5c5cf0f17a465185dcf60f8efff53903f20b0c2ab2192d44368f2f2fb36048af071f7aa857b14ad1d11461205bebe17e02be2e3ccb6092821885c4e0d4811be3f45b1fea088453e022432f562562b43a355cb56270cedb6c2c42dbf9be850e77192fdc65cfd36834be988dbe9a93e2518c138b090fb9da827cb1c91c8fe52fe7c57f7\",\n        \"signed\": \"977adccdb829b40bbd8e53856a783db346a39dff62041a2972d29009f1c9ff81b8ad54cb901e497c1d3021b50b6c69ee73558fd7be05d625f5727f9af2ce87021ff06c0b3999cecb1900a47d267beafbb35d93d14cb2c8925e3e3fe5d967586925ee4baa41998edd0103205810aad5c0bbdc77874476810246d13089a64db576424fae0bed9664a42a491147d1ee3b9c3b1ba4875be15462392540f9978d9a4630ba4c525499751a45efc299ec7d73b17f9ad275ee71a687e72690d7320242d2dc2bd4d5c5cf0f17a465185dcf60f8efff53903f20b0c2ab2192d44368f2f2fb36048af071f7aa857b14ad1d11461205bebe17e02be2e3ccb6092821885c4e0d4811be3f45b1fea088453e022432f562562b43a355cb56270cedb6c2c42dbf9be850e77192fdc65cfd36834be988dbe9a93e2518c138b090fb9da827cb1c91c8fe52fe7c57f7\",\n        \"signature\": \"977adccdb829b40bbd8e53856a783db346a39dff62041a2972d29009f1c9ff81b8ad54cb901e497c1d3021b50b6c69ee73558fd7be05d625f5727f9af2ce8702\"\n    },\n    {\n        \"secret_key\": \"99a99531c3cd6e3e9c900a9eeb26267e72f09d11b651a897ebb79be016f64c6e\",\n        \"public_key\": \"9bf9f8b48a2728e02608fc19899d219656839d1cc1e9a8984df674ec26662f41\",\n        \"message\": \"7a89c0c1952fdc4298dcaea854efc134656be147e9e8e82fc9a449059d80570f75676b81c4a94f76a968200cdeb0988c73f59afc72ad4c3103e19fe63b7e95e140b5cb2efc7b97a6ffbb6c298ddace3be6d2ed3d598b8bdf0c2fe6c97602142a76e978514c196c1b9a88efdc1925fc506155cff9a2f21ab634e2b93e96928a5d8f7ce4cb7326d9689469242ba9c6a01b77496badef87578f5a17284e900a72df141c6199b0e71ab5da4375037617ec6196d4f4e23ae2916a72d0fce796022305ac9fbbbbe4705b340e42b78e1c02bb1001860cdcaf71ed89255dd56cc0b31c59d4596dcef84e22234be562bd801e94111d83a78064c90f9d82fce91f68abb03c73b6bd8d7e02d4\",\n        \"signed\": \"0e89da5d949cf2bf40c7e17c2d0f9ceabc88a092eb4d49cfbfeab7c8bff43245c67b9e2e92f9bcb9b34b3fcf8b01fa2ea7a9649f814c3aa98b3dd04540c31d097a89c0c1952fdc4298dcaea854efc134656be147e9e8e82fc9a449059d80570f75676b81c4a94f76a968200cdeb0988c73f59afc72ad4c3103e19fe63b7e95e140b5cb2efc7b97a6ffbb6c298ddace3be6d2ed3d598b8bdf0c2fe6c97602142a76e978514c196c1b9a88efdc1925fc506155cff9a2f21ab634e2b93e96928a5d8f7ce4cb7326d9689469242ba9c6a01b77496badef87578f5a17284e900a72df141c6199b0e71ab5da4375037617ec6196d4f4e23ae2916a72d0fce796022305ac9fbbbbe4705b340e42b78e1c02bb1001860cdcaf71ed89255dd56cc0b31c59d4596dcef84e22234be562bd801e94111d83a78064c90f9d82fce91f68abb03c73b6bd8d7e02d4\",\n        \"signature\": \"0e89da5d949cf2bf40c7e17c2d0f9ceabc88a092eb4d49cfbfeab7c8bff43245c67b9e2e92f9bcb9b34b3fcf8b01fa2ea7a9649f814c3aa98b3dd04540c31d09\"\n    },\n    {\n        \"secret_key\": \"aa58403e763bac405db065eb11eb6be3e3b6cf00ec4a222b52bff4b6e3d156ac\",\n        \"public_key\": \"167f9b9a4665f93f5d7d3016ace6fbd13420b2e51e72bde59eedf26993b66cae\",\n        \"message\": \"3baa0998ff02b32b90b51f9a840c7b5c5870cfb1810a9b0f77b55909d47ad335147a991c29fbebfc592e9307175c1964129a2d5efc6215807453bcd726969781222bcad1c99a49748b9ee667c4d0c82889e2f50064c115dbd8fb483d72ab0ccadf76bddb2dc727dbc3fa5c4624c283d8921c8aa4425110dcdd69c05e5ed59b359625eeaaec1e27eafe9d9a5ce736c3f9c527ea547818b9bca6811be4cc15058a6f5b683303b80c90c94a83b8b15869713a66b1e0f656331b286d1ef7698834ab3e138417aad6bb3ab3bd9fc78761a482dfc654f3f8628c8d9fc16018898f1641e8622bd272e38d41706cb9cebe6ee5e173576bf61bb1188cf2f39c62220bba88fcb4de4898b25b04\",\n        \"signed\": \"64b598ca5b8f9ae742e46ee0d8c1aaf31458b50c25d267a677e44be5b755f14d51801a30399bfcc38d14071aa0ae93da825a581ab6c20725a0a910b4735dfa0b3baa0998ff02b32b90b51f9a840c7b5c5870cfb1810a9b0f77b55909d47ad335147a991c29fbebfc592e9307175c1964129a2d5efc6215807453bcd726969781222bcad1c99a49748b9ee667c4d0c82889e2f50064c115dbd8fb483d72ab0ccadf76bddb2dc727dbc3fa5c4624c283d8921c8aa4425110dcdd69c05e5ed59b359625eeaaec1e27eafe9d9a5ce736c3f9c527ea547818b9bca6811be4cc15058a6f5b683303b80c90c94a83b8b15869713a66b1e0f656331b286d1ef7698834ab3e138417aad6bb3ab3bd9fc78761a482dfc654f3f8628c8d9fc16018898f1641e8622bd272e38d41706cb9cebe6ee5e173576bf61bb1188cf2f39c62220bba88fcb4de4898b25b04\",\n        \"signature\": \"64b598ca5b8f9ae742e46ee0d8c1aaf31458b50c25d267a677e44be5b755f14d51801a30399bfcc38d14071aa0ae93da825a581ab6c20725a0a910b4735dfa0b\"\n    },\n    {\n        \"secret_key\": \"1044ee3708c0b0e909a8cb2ba2cd0af8d28a5de01d962e826087fb232df7b2d2\",\n        \"public_key\": \"46d241ea0c702c1889d44655824629b67284d4e644a48fa45455d27ac5f62529\",\n        \"message\": \"b8a445455fb66e17e3143d35204c9ea93474eebeef93963ee5c1d377ca217acd4ca63e5755da08fbffdbd4352bf165193896c8d6f76bb4cd3bc2d3a476a4e320824a1210ce74d0014d747f111eec310c5c89ed4d0850e811f80a8bb28dcaf6f411df83e2c1dfd90c4ad23561454eb5d756b63b4ea7f37dc5d466c16ef70d11190c4f5316fe2aa8597440e88bbebaeb35ea5f04f07b0339264158ef909ad5163bfc248cd724133e274f812695f290e57176a96b9393d07bb310299f5d2a6b6dd1dabcb51bf29c5afa7ebb0701c6c84767ac137793091fe0ed6e47d780628a32c84f83e00e9c16742a523ecb63c24f4a338ed299a06194924f44c5a5d3c937ff9b0945982ad24a2d1c79\",\n        \"signed\": \"7d6bed7f87d090abe013c31e1203903bac9c93445d06c7b53d31d15f970d88647a7ed2c3a63050ba19d68043aadd18bd861de1ac4715b8e828b2b16f8a92b001b8a445455fb66e17e3143d35204c9ea93474eebeef93963ee5c1d377ca217acd4ca63e5755da08fbffdbd4352bf165193896c8d6f76bb4cd3bc2d3a476a4e320824a1210ce74d0014d747f111eec310c5c89ed4d0850e811f80a8bb28dcaf6f411df83e2c1dfd90c4ad23561454eb5d756b63b4ea7f37dc5d466c16ef70d11190c4f5316fe2aa8597440e88bbebaeb35ea5f04f07b0339264158ef909ad5163bfc248cd724133e274f812695f290e57176a96b9393d07bb310299f5d2a6b6dd1dabcb51bf29c5afa7ebb0701c6c84767ac137793091fe0ed6e47d780628a32c84f83e00e9c16742a523ecb63c24f4a338ed299a06194924f44c5a5d3c937ff9b0945982ad24a2d1c79\",\n        \"signature\": \"7d6bed7f87d090abe013c31e1203903bac9c93445d06c7b53d31d15f970d88647a7ed2c3a63050ba19d68043aadd18bd861de1ac4715b8e828b2b16f8a92b001\"\n    },\n    {\n        \"secret_key\": \"95dd1a5e658fa6c8d42507b3e5b8edb5baeca62deb00fc5d4dca8e1ab5835e59\",\n        \"public_key\": \"3a5323dd1e07f323bb6d83e9c2db92a29f62e2e003ee0deacd7e2e4e030d8d27\",\n        \"message\": \"9b7afd48c474604c26367531556840c388668b0f3840063dfc9869ad5b901274b931293d04f3c8e8f7f8eab815a641d7c351284e8bb0437ac551bb29438964e6a7c7ba772344b333f9eda5a77568c8931ddcaf21e32e07b10bf4820fb859bcf87b81c4bff426f24a4d468f2e9aeda8f17d939709970db11df76247e98a39eb8b38f5949f349f2ae05ab48c018517c48fa0205dc7f1566453e105e48c52eb455c0c40802f797b3eefb1e2f3b1f84315aed5b0711c6499a691b74b91f12ef70f76c4c05c1aa1a993e2f3e528ab343dd2368162f4036a61a13a88045dcdefa85d68532275bcf5b8f5f00efdea999a95783175d9ee95a925d48a544934d8c6b262225b6ebea35415dd44df1f\",\n        \"signed\": \"d02a7523dcbd29576ba809b531037774df41734a41175813119c6a6a788cd9b8ad780865678667699ae66d010919a966a051c08163df67a977ee6e220d0dc30f9b7afd48c474604c26367531556840c388668b0f3840063dfc9869ad5b901274b931293d04f3c8e8f7f8eab815a641d7c351284e8bb0437ac551bb29438964e6a7c7ba772344b333f9eda5a77568c8931ddcaf21e32e07b10bf4820fb859bcf87b81c4bff426f24a4d468f2e9aeda8f17d939709970db11df76247e98a39eb8b38f5949f349f2ae05ab48c018517c48fa0205dc7f1566453e105e48c52eb455c0c40802f797b3eefb1e2f3b1f84315aed5b0711c6499a691b74b91f12ef70f76c4c05c1aa1a993e2f3e528ab343dd2368162f4036a61a13a88045dcdefa85d68532275bcf5b8f5f00efdea999a95783175d9ee95a925d48a544934d8c6b262225b6ebea35415dd44df1f\",\n        \"signature\": \"d02a7523dcbd29576ba809b531037774df41734a41175813119c6a6a788cd9b8ad780865678667699ae66d010919a966a051c08163df67a977ee6e220d0dc30f\"\n    },\n    {\n        \"secret_key\": \"1abc0b9aa01dc57ca53efe7380962b1a88d50a964f5cd98640982c74393f2926\",\n        \"public_key\": \"8d4fd14394d7c1405700306983fbf76ea9f171b15a6b56612a1feb1cbdae5dd5\",\n        \"message\": \"da2dd940d5e1db6e80bf7e2b782e7e745cd4fd252e981517975887dd05ac77ed837d082961575efedf301fdf24b70718b991b8d92bdd2e6bee17c8aa4bc694a727bcfc78fd85195c42caf883a2c38d161cadd79cfda9a39110e1264d30bd4c5c4a5876777f233b071b1b0b408935f0468954cc744af8063b004ede56cd981c4dd5608abffeaec9e58f3fafaa671467804b7fa2558f4f95174201f183d80a5914065fed53115b41ebc338f78df050053b8a4e75ea7c6fdc354dad27bfd8a2e66fcd7ae2f587d24be0d4a33da30a220e51bc05fa4e412b959fd95d89ea6ec0162516c096a9433a9e7cf599c928bd5305c2173bf7493ed0c1c603cd03f082cce44237a79ffd8be9a672c2ebaa\",\n        \"signed\": \"f738af2d3e290b3d23d9aff7414bfc5ffa47235dc053687a8ba5c8541b8511f781566cdaa130e0677db55fa8be9d81a092cb58923a8628494d2f62d95c167100da2dd940d5e1db6e80bf7e2b782e7e745cd4fd252e981517975887dd05ac77ed837d082961575efedf301fdf24b70718b991b8d92bdd2e6bee17c8aa4bc694a727bcfc78fd85195c42caf883a2c38d161cadd79cfda9a39110e1264d30bd4c5c4a5876777f233b071b1b0b408935f0468954cc744af8063b004ede56cd981c4dd5608abffeaec9e58f3fafaa671467804b7fa2558f4f95174201f183d80a5914065fed53115b41ebc338f78df050053b8a4e75ea7c6fdc354dad27bfd8a2e66fcd7ae2f587d24be0d4a33da30a220e51bc05fa4e412b959fd95d89ea6ec0162516c096a9433a9e7cf599c928bd5305c2173bf7493ed0c1c603cd03f082cce44237a79ffd8be9a672c2ebaa\",\n        \"signature\": \"f738af2d3e290b3d23d9aff7414bfc5ffa47235dc053687a8ba5c8541b8511f781566cdaa130e0677db55fa8be9d81a092cb58923a8628494d2f62d95c167100\"\n    },\n    {\n        \"secret_key\": \"cbffce2c9bd3e23e406e5f66e632dcfa726654d29a955cec983173235fa359d0\",\n        \"public_key\": \"49653edd64a55f7cd40eaf3f8e72eb96dbcdee398f34817f2c95867949710b14\",\n        \"message\": \"1ffde6826e4f0c24a7961f191e74cc0bbc928e3f1aec3efab32765c2501cbc1620e7ee6f61fccfb00cfca9fb98143b529bcc8c3d0fdf89ee7c342f101815fabf7deaf9f302a288fe175826d590d99ee6fd92da74f9596b783c0e7d47d711a32f39ea4165e5212431441b498c6b70db3b09d1f4e4a14a6bae39da5088bb85b3285ce9df2f90681af2c74dece439aeb91e1c1b0712eddbee8d72569828f37cb720c509d02aec476070484e9b16ec7179947ac96caf0e1be8b6b74f372d7235fe6e3999df733bccd482dfe2e631f56b582667dce5e3121763adfacf3b18cf2095f7394dee4927fc2bea6b5824d90cd59e854ec5872b4551b02efaba5ad54a9b7a8f6de5d7cda5825b325b076ded\",\n        \"signed\": \"e7ced4fa2a7dff73f1068bbad0ec9a1109043c97a62effa148876f0969ed4dc608e28bce797af3b82532c94dec4d6811b7f563679129facf17bb73d69375eb051ffde6826e4f0c24a7961f191e74cc0bbc928e3f1aec3efab32765c2501cbc1620e7ee6f61fccfb00cfca9fb98143b529bcc8c3d0fdf89ee7c342f101815fabf7deaf9f302a288fe175826d590d99ee6fd92da74f9596b783c0e7d47d711a32f39ea4165e5212431441b498c6b70db3b09d1f4e4a14a6bae39da5088bb85b3285ce9df2f90681af2c74dece439aeb91e1c1b0712eddbee8d72569828f37cb720c509d02aec476070484e9b16ec7179947ac96caf0e1be8b6b74f372d7235fe6e3999df733bccd482dfe2e631f56b582667dce5e3121763adfacf3b18cf2095f7394dee4927fc2bea6b5824d90cd59e854ec5872b4551b02efaba5ad54a9b7a8f6de5d7cda5825b325b076ded\",\n        \"signature\": \"e7ced4fa2a7dff73f1068bbad0ec9a1109043c97a62effa148876f0969ed4dc608e28bce797af3b82532c94dec4d6811b7f563679129facf17bb73d69375eb05\"\n    },\n    {\n        \"secret_key\": \"9f91231497484cab39b9e20f861181d397908577bbb2968242d071bca4813ffb\",\n        \"public_key\": \"8824bc6cd6a6f15a5f41668f2b3bae8fc4967383078d08b51d6d1b2b93a1071f\",\n        \"message\": \"21d4fbc98163c3fb6e09f775c2ab7b18b18792340bafedacb49605622e3c08aa3b2b8d0e0902f361aa1c0f652e2732b10a0c5c6a05098996b588267cc8951a78b5d431e7222bbb508eeef1b5e8b8d01d3991e18dddc6ca8d222ef177ce62938d1810eecf06f4738b28f440946ccad2a12e39d38611bed3a39f93419a179ec2b1b52d5fe5c80c23b84d8803755f5146092cc199b4bdcea5bcf2037bd53ff6346694155f027d8ce2baffe30a5666596c00783aaeade9c77fc8637942ece017d6484c2899b1918d3a480bd5157678d4772d271f9b99768ee1bcc46b2489ae87cd030f47d1333c7672cb902cb4f5fe746e853de57940ba2264d3e629644d653a5b7af78ce64a993f36250f8cb7cb45\",\n        \"signed\": \"0a1c706dd8a13077ab18386c65fa97cf9dfc43542d1846ecbddeb7b3c93f3c66f3ccd0447aacdd4dad8fbf736c4ff9dbdb62bfc14d8883e385bce9bac56a350c21d4fbc98163c3fb6e09f775c2ab7b18b18792340bafedacb49605622e3c08aa3b2b8d0e0902f361aa1c0f652e2732b10a0c5c6a05098996b588267cc8951a78b5d431e7222bbb508eeef1b5e8b8d01d3991e18dddc6ca8d222ef177ce62938d1810eecf06f4738b28f440946ccad2a12e39d38611bed3a39f93419a179ec2b1b52d5fe5c80c23b84d8803755f5146092cc199b4bdcea5bcf2037bd53ff6346694155f027d8ce2baffe30a5666596c00783aaeade9c77fc8637942ece017d6484c2899b1918d3a480bd5157678d4772d271f9b99768ee1bcc46b2489ae87cd030f47d1333c7672cb902cb4f5fe746e853de57940ba2264d3e629644d653a5b7af78ce64a993f36250f8cb7cb45\",\n        \"signature\": \"0a1c706dd8a13077ab18386c65fa97cf9dfc43542d1846ecbddeb7b3c93f3c66f3ccd0447aacdd4dad8fbf736c4ff9dbdb62bfc14d8883e385bce9bac56a350c\"\n    },\n    {\n        \"secret_key\": \"1e2bd5487c5f5ced461f604dccb4e78eb91608f0b821f5afc4e3e534f7960392\",\n        \"public_key\": \"ef825475cf2051a2017ae532f077d96774347d2767ea7b45f9c1b860ab993506\",\n        \"message\": \"1dbbbb13cdad88854b809ceded273343d306a8deabf3ff02c9cec6f002b8e9e10ef5d1b0f5711f33267aa91c171b61e960f740457b81d751a473f44f750a080cab80af7ccca7dffcfac9ee4c39dc85cbdf51259ccd3470d9bad3ad30f4ee5dbd4fac6bd5c6c4df7311a470044695a7e1a7e18572207588afa57eebcd4d575b6d424457ee92465ce1863e3c677cf875fdb98d4078ebe7144260807052577144cb8e0359aa42ad155d79dae3deb99c4632c191c799cbfe587d954787068d663bdfc0fab1334f1876bf498c4db5c53db7b0204ed5a521c62f09eaca8d0189f3b394143f29c421cb5c8d07bd751baf4cbe3bf4be1701df4b2207dfb2904d84f4dbda51cba576d5a5bb16efe698edd608\",\n        \"signed\": \"4d33c96a2e3a5db7391adf65c1cc3565fe76eeafd0b5c7abb0b492a0b51e1fa33639946a243b2ddef357552298ce0aa95eac6fbfe660988271877eb2a7da18061dbbbb13cdad88854b809ceded273343d306a8deabf3ff02c9cec6f002b8e9e10ef5d1b0f5711f33267aa91c171b61e960f740457b81d751a473f44f750a080cab80af7ccca7dffcfac9ee4c39dc85cbdf51259ccd3470d9bad3ad30f4ee5dbd4fac6bd5c6c4df7311a470044695a7e1a7e18572207588afa57eebcd4d575b6d424457ee92465ce1863e3c677cf875fdb98d4078ebe7144260807052577144cb8e0359aa42ad155d79dae3deb99c4632c191c799cbfe587d954787068d663bdfc0fab1334f1876bf498c4db5c53db7b0204ed5a521c62f09eaca8d0189f3b394143f29c421cb5c8d07bd751baf4cbe3bf4be1701df4b2207dfb2904d84f4dbda51cba576d5a5bb16efe698edd608\",\n        \"signature\": \"4d33c96a2e3a5db7391adf65c1cc3565fe76eeafd0b5c7abb0b492a0b51e1fa33639946a243b2ddef357552298ce0aa95eac6fbfe660988271877eb2a7da1806\"\n    },\n    {\n        \"secret_key\": \"f78db14d6d1a643dd7735baf2635321244e7ec8ca72c5c38c98c809db9cb5a55\",\n        \"public_key\": \"5414f75f52f3864afb0c79c2c5c1d06b4bce400fbddf17fe9cfb2a8bac47a0dd\",\n        \"message\": \"05caf1b8edc3b173fbc1ed29b95e2bf06d814ba2407d4b31c728d04ec273d25394423ac7d4fff2ca36ee90273093c756e2bd13c96d4a3dc7f5be1759fcd328eb66c5882b58fa4588e5b2a3713a4154a2340d0b06ad019601b0e028e497f898256b028af95cd8168df5e58a57cd1ebfc0a0c91ced61dbb480aca7df8dca91eb16e98007cd2cd1a2045b0e4477d12d5a4072f365426567c9d61577f3485c8f46605e7f475ef04a3948f60dba8c5508d14bfddb9b11dd044ef2d84c16b9a9038d8e78eda43b91297df35f4361a383b41d49677a687d5b344ad1ab0fc73017b3bebf32306fb3fd7b3d5071f3ab5f6e49aa15540cad6503bea7784cf9421801ce1385839893362a97fae121300d6783af0f\",\n        \"signed\": \"d7cbd4181f67712007b7f0e18452e0a024464d9dc9b5ff9cf669d1b91169d7573262f83336b97c861bfab3fcf669223ce8caf319f21d23f1fa331a2d89b6ca0b05caf1b8edc3b173fbc1ed29b95e2bf06d814ba2407d4b31c728d04ec273d25394423ac7d4fff2ca36ee90273093c756e2bd13c96d4a3dc7f5be1759fcd328eb66c5882b58fa4588e5b2a3713a4154a2340d0b06ad019601b0e028e497f898256b028af95cd8168df5e58a57cd1ebfc0a0c91ced61dbb480aca7df8dca91eb16e98007cd2cd1a2045b0e4477d12d5a4072f365426567c9d61577f3485c8f46605e7f475ef04a3948f60dba8c5508d14bfddb9b11dd044ef2d84c16b9a9038d8e78eda43b91297df35f4361a383b41d49677a687d5b344ad1ab0fc73017b3bebf32306fb3fd7b3d5071f3ab5f6e49aa15540cad6503bea7784cf9421801ce1385839893362a97fae121300d6783af0f\",\n        \"signature\": \"d7cbd4181f67712007b7f0e18452e0a024464d9dc9b5ff9cf669d1b91169d7573262f83336b97c861bfab3fcf669223ce8caf319f21d23f1fa331a2d89b6ca0b\"\n    },\n    {\n        \"secret_key\": \"7dfa328e90a1b849c219e3da832df9ed77448234f0d89ea5d17a3d64e7883daf\",\n        \"public_key\": \"e30ce6fd5f5800389a70cd117364f59945afb180f229927360b06b4835f8dc91\",\n        \"message\": \"e5e495d663f47236714532687a24308f942ca9c33e088f7f106a5a723518cacbbef4a68c939a6950b2dc2589f82d354e575272d42b1383d315ab8a20aa0cdc9d4df678ab3b26612b5dca66e71f9f3fa7d9e731dc481e2bc7127cea3b6203ca6cd8162e90886a73dc46c83ddefc4b9e2d53d29dd387c624e08bd8d53be928a40a9aa8ae8b1c8d0fb6a7bd6dce5f62315b7a2181f627f256bbe7e2a95bf464e6132204c174209629840235b2c39913301a4b40325d118d384bc7ac028cd4f12702e161191b149e4209058a55122bbb8b22b24683ba4f8e2e6ccfc08dc8c8b1bcfb6d60bd8f062196933df319ab16906d085730eba1720d4b02c67daf38cce6aba38e25d68ef95b2f521913a1d77d5eb650\",\n        \"signed\": \"1c61d53b872f8cde598609682c79f6c5df007c513a71cfb3a06dcb82d85c4b00ccc40b00e59f595393088b4cd0432855c67a207da71f87e72c409b3e50279507e5e495d663f47236714532687a24308f942ca9c33e088f7f106a5a723518cacbbef4a68c939a6950b2dc2589f82d354e575272d42b1383d315ab8a20aa0cdc9d4df678ab3b26612b5dca66e71f9f3fa7d9e731dc481e2bc7127cea3b6203ca6cd8162e90886a73dc46c83ddefc4b9e2d53d29dd387c624e08bd8d53be928a40a9aa8ae8b1c8d0fb6a7bd6dce5f62315b7a2181f627f256bbe7e2a95bf464e6132204c174209629840235b2c39913301a4b40325d118d384bc7ac028cd4f12702e161191b149e4209058a55122bbb8b22b24683ba4f8e2e6ccfc08dc8c8b1bcfb6d60bd8f062196933df319ab16906d085730eba1720d4b02c67daf38cce6aba38e25d68ef95b2f521913a1d77d5eb650\",\n        \"signature\": \"1c61d53b872f8cde598609682c79f6c5df007c513a71cfb3a06dcb82d85c4b00ccc40b00e59f595393088b4cd0432855c67a207da71f87e72c409b3e50279507\"\n    },\n    {\n        \"secret_key\": \"6ce13d3c2ec71fed83131a69d5d030314ab49e6565ef68163fff09ac5d9b47e7\",\n        \"public_key\": \"9c7b1118fab91e0e7b192a23d95fb877cb7936cc6c8a330592f48e6784edc292\",\n        \"message\": \"10bbc311eb2a765e0167ff37618ff70e13f02d7b0617ae4ac06befbbe149c972a994f680ca4dc9a92ec7efa53997fad356b9ff4ebdee629541d1f4dea62ed0d2494f9ccfdf07a9310491f61c4b3e2700b4a3c668d678329a38c2eff9d8cba431fb959e7f7655bd0fbd77d53bbbc2eb8dc51dd718ed98728a181686be122b844d3da331e329d3959b5923f7734325a021026e2754e17a15108be801465ad958dbcf21df890cfe5d5b883ca43c61cedccbdb58b849ea75374f1e918e803e577a5dc7a1c17936eccfcd3481bd2b1eb075b83237ca6f3c07c19e9af9731267be82d4898eee96ebc900d48b059d51b0dd415b1c890660a88d25f5c5f35d8e45e523e0ce3336923ab43670e35c5057d56c758876\",\n        \"signed\": \"608b2bf6f6da05c2ac5bbfd795a2ac32c79c74153f9431dea59768ff4c225e3b693b645a506766b860850ee97ea43032b05b69e56767e8eb9d1918df9afba80510bbc311eb2a765e0167ff37618ff70e13f02d7b0617ae4ac06befbbe149c972a994f680ca4dc9a92ec7efa53997fad356b9ff4ebdee629541d1f4dea62ed0d2494f9ccfdf07a9310491f61c4b3e2700b4a3c668d678329a38c2eff9d8cba431fb959e7f7655bd0fbd77d53bbbc2eb8dc51dd718ed98728a181686be122b844d3da331e329d3959b5923f7734325a021026e2754e17a15108be801465ad958dbcf21df890cfe5d5b883ca43c61cedccbdb58b849ea75374f1e918e803e577a5dc7a1c17936eccfcd3481bd2b1eb075b83237ca6f3c07c19e9af9731267be82d4898eee96ebc900d48b059d51b0dd415b1c890660a88d25f5c5f35d8e45e523e0ce3336923ab43670e35c5057d56c758876\",\n        \"signature\": \"608b2bf6f6da05c2ac5bbfd795a2ac32c79c74153f9431dea59768ff4c225e3b693b645a506766b860850ee97ea43032b05b69e56767e8eb9d1918df9afba805\"\n    },\n    {\n        \"secret_key\": \"d45ee69a5f1a7cfdd0343f8770d1c6bc026f067a70dbe839a86f2aa068c33f81\",\n        \"public_key\": \"fc8d9fb0e4f34793090755e0328096e01e281ea351b8d95cd9116e131a5ca54e\",\n        \"message\": \"eb5ed8ab79cbfe61c25981b9d1d6b70f10b60194b4161fe17d11aff1767994aa0813e9ece2f4c5d531b99e8adf1888c30a63893eb451aaf55acd5a52ad8c401faa88d6eacf3e49470566114fd0c6a274e9544846b0ae9bfa124d7951eb26715e19253ff7edc8a70965776f23ce46031e034a200723ba3d11e11d353d7e7cd84aede267ff64bed418cb9f28c61cd0f63b6ce2ecae14b20bc6bdaed8c428bad18be4b7d66338364acd8042a8256f258a69969b8d3ca2eab3aea3706e5f21c3b1efcc254a824bb4e7ea7aba8827c8eb82786c665aa973821931ff990a63fd34a74a6d8c22a882b0b935152ccb36fcc76f4eca65d67c8680942f75dfad073439c0916065e83877f7ba209303f33548d9e40d4a6b\",\n        \"signed\": \"156c51c5f915d89b8d1400350f8f217a5c02e2629ede9f4a30b6e71d1ea7a953cc6db31ba5c778c269920b649fb4221c6d38cf2cea2a7de3ad423e04faaa0607eb5ed8ab79cbfe61c25981b9d1d6b70f10b60194b4161fe17d11aff1767994aa0813e9ece2f4c5d531b99e8adf1888c30a63893eb451aaf55acd5a52ad8c401faa88d6eacf3e49470566114fd0c6a274e9544846b0ae9bfa124d7951eb26715e19253ff7edc8a70965776f23ce46031e034a200723ba3d11e11d353d7e7cd84aede267ff64bed418cb9f28c61cd0f63b6ce2ecae14b20bc6bdaed8c428bad18be4b7d66338364acd8042a8256f258a69969b8d3ca2eab3aea3706e5f21c3b1efcc254a824bb4e7ea7aba8827c8eb82786c665aa973821931ff990a63fd34a74a6d8c22a882b0b935152ccb36fcc76f4eca65d67c8680942f75dfad073439c0916065e83877f7ba209303f33548d9e40d4a6b\",\n        \"signature\": \"156c51c5f915d89b8d1400350f8f217a5c02e2629ede9f4a30b6e71d1ea7a953cc6db31ba5c778c269920b649fb4221c6d38cf2cea2a7de3ad423e04faaa0607\"\n    },\n    {\n        \"secret_key\": \"8a76eaab3a21ec5a975c8b9e197a989e8e030899eb45d78968d0fb697b92e46d\",\n        \"public_key\": \"2d9c813d2d81e2730b0d17d8512bb8b5d33f436cabaa13e141ca1cb785014344\",\n        \"message\": \"c6c78f2e2080461aed9f12b4f77c989b19716780fab60e6ecb9793b4bc7ed69e5f70fa6bdba16e9bd3194969eea6665abfd630deeefa3d717b6d254dd24bc97dde21f0f29f9ed34b8bd7a013380f4f82c984fdbd95af9805b744bcd952c5a71fbb57d11f411c18cc30bc3594f7ad8228cb6099394a1b6b0a818581bdf93cce58f3a4a23e55db3e69ca9d60cfb3a907fb68329e2ffb6c65f1e828d28127109c9e9fb70160f2ef82a2ee9f9bd170c51e13fd3fc1866b22c79fe6d5101217979dbe2724dcad8a9bc69acc42c112dc697bd271eea550e9e50406bfd28245b83b8f012d34db6dbdd55ae6e575745c153d6e7534901027eadc2fcc33a5287ddbca6d3aeab8972294dc6c712b9942547277340e7ad19e\",\n        \"signed\": \"fceecca4b014fecd90b921b0fa3b15aeaa4e62caa1fb22729c70269232c33cef0d0aeea66432c128afb9a3646bc7f03a12774da8758398c2a0dcce0bbbf6740ac6c78f2e2080461aed9f12b4f77c989b19716780fab60e6ecb9793b4bc7ed69e5f70fa6bdba16e9bd3194969eea6665abfd630deeefa3d717b6d254dd24bc97dde21f0f29f9ed34b8bd7a013380f4f82c984fdbd95af9805b744bcd952c5a71fbb57d11f411c18cc30bc3594f7ad8228cb6099394a1b6b0a818581bdf93cce58f3a4a23e55db3e69ca9d60cfb3a907fb68329e2ffb6c65f1e828d28127109c9e9fb70160f2ef82a2ee9f9bd170c51e13fd3fc1866b22c79fe6d5101217979dbe2724dcad8a9bc69acc42c112dc697bd271eea550e9e50406bfd28245b83b8f012d34db6dbdd55ae6e575745c153d6e7534901027eadc2fcc33a5287ddbca6d3aeab8972294dc6c712b9942547277340e7ad19e\",\n        \"signature\": \"fceecca4b014fecd90b921b0fa3b15aeaa4e62caa1fb22729c70269232c33cef0d0aeea66432c128afb9a3646bc7f03a12774da8758398c2a0dcce0bbbf6740a\"\n    },\n    {\n        \"secret_key\": \"18a8f93648cdcf47133630af1e11c0ceea3de07327314c96580df775597d7a9c\",\n        \"public_key\": \"2912f41ab4c87e3937a03331802cba87716b4eea14b9fba6f546d0ac2c0973df\",\n        \"message\": \"592093ac7cd671d6070b0027edac1fb015cc205d78bb603f378eb9f8aa388ca830db3cb23420c7e852db0b55241eb88a02cc627aa94143be439aab4bf2634757470406e842f20eb10f0700e3c2da364f588a8000f23850c12ce976f326d2df1bac13e95020b412b175bf74bd7ebbacf3ae55c0daebb5c010bf804feee1d7d49fae050bea55996f53cfe1f15a0cf20727db4ee311c260bad9682d7b965e27a9491f471d4a473aff646c7d424d5a0bdcbb8a0233f4b3060dd04c98ec98dfd05ec7247884e2d8e152d4ae52b3d5865d9efd6706a60e088e1e7c9f624510abc7a2045a2c7a7588e2535e73191dd5cf05421563f556a13e8236670343cd5ba4d466e245c4ee3b5a41e70c9a0f5e6ea2c559ebe61ba81e\",\n        \"signed\": \"3b77394cd69f8b45d00cfe3a79a7900628a56518b379ed8a11581fc3a376e5d66807df11e70904f696c741d21d139310fa1b89a93bdc4d2c3997991f5220ee00592093ac7cd671d6070b0027edac1fb015cc205d78bb603f378eb9f8aa388ca830db3cb23420c7e852db0b55241eb88a02cc627aa94143be439aab4bf2634757470406e842f20eb10f0700e3c2da364f588a8000f23850c12ce976f326d2df1bac13e95020b412b175bf74bd7ebbacf3ae55c0daebb5c010bf804feee1d7d49fae050bea55996f53cfe1f15a0cf20727db4ee311c260bad9682d7b965e27a9491f471d4a473aff646c7d424d5a0bdcbb8a0233f4b3060dd04c98ec98dfd05ec7247884e2d8e152d4ae52b3d5865d9efd6706a60e088e1e7c9f624510abc7a2045a2c7a7588e2535e73191dd5cf05421563f556a13e8236670343cd5ba4d466e245c4ee3b5a41e70c9a0f5e6ea2c559ebe61ba81e\",\n        \"signature\": \"3b77394cd69f8b45d00cfe3a79a7900628a56518b379ed8a11581fc3a376e5d66807df11e70904f696c741d21d139310fa1b89a93bdc4d2c3997991f5220ee00\"\n    },\n    {\n        \"secret_key\": \"206cd2b8114aae188d81862ccec4cb92c4ef5fc78c24435a19f9ed9b8a22f47e\",\n        \"public_key\": \"97a67ac2811f529456df532737d76bed7e387da83bd55459372fdfb27ffacff3\",\n        \"message\": \"480c4800f68c79f5dfc0c3666c0ac429b30fe0c5fe848750db2171380b80c8e9fec0a054b16d08674cefe2f64ec28bb6b0596b35235575f189bee259aca766c222ac0a46cf2af75774da4e34a0b54fc2ac49ec8bedf4887cd9b7be4fdb7f686902ddfab04627e26ea2dc3d97d62a4b1546180218ed8fa113334819b5275cc54afdee44309008596507971675e6d8b8a8edec4718f2d4bd735213cbbd18791faa8054174907a7ac17d7143a4757e493beeec4849d0b836f18bb2b3c9016f25af47fb96199251720549f15d149503d41095e25f26209daac39154485c3ded7cb1a8c3e83a52f5a06ec09cf83df00726b7968f64c0cbae299512fb438560f04b3b644346f938ac8e90486614cd844b54eae078bf678b3\",\n        \"signed\": \"73a40d9da08fb98ea25b67e721557a1a51225294d316b53149af895fa4d63cb4a3f56f688566ef6da42fd2941dffa06d497aa902165d50213a6214116299a90c480c4800f68c79f5dfc0c3666c0ac429b30fe0c5fe848750db2171380b80c8e9fec0a054b16d08674cefe2f64ec28bb6b0596b35235575f189bee259aca766c222ac0a46cf2af75774da4e34a0b54fc2ac49ec8bedf4887cd9b7be4fdb7f686902ddfab04627e26ea2dc3d97d62a4b1546180218ed8fa113334819b5275cc54afdee44309008596507971675e6d8b8a8edec4718f2d4bd735213cbbd18791faa8054174907a7ac17d7143a4757e493beeec4849d0b836f18bb2b3c9016f25af47fb96199251720549f15d149503d41095e25f26209daac39154485c3ded7cb1a8c3e83a52f5a06ec09cf83df00726b7968f64c0cbae299512fb438560f04b3b644346f938ac8e90486614cd844b54eae078bf678b3\",\n        \"signature\": \"73a40d9da08fb98ea25b67e721557a1a51225294d316b53149af895fa4d63cb4a3f56f688566ef6da42fd2941dffa06d497aa902165d50213a6214116299a90c\"\n    },\n    {\n        \"secret_key\": \"59b144a708abec972729a04a6c13f0ea020b4ed4a48298023a568958c21215ec\",\n        \"public_key\": \"c4f4720092ed6179a082ae4d6145df3771786efca9bd9bb79c9f6667d2cb56b3\",\n        \"message\": \"3857bd260b8aad9d073f06765d37fe893a3f53e23de866ddac33495a39ad33ee9e9d5c22502bc1c4b5470d0e3f3a585223fe4cb93cc4ad2b5ba6d78826a53fc0253dc580a2018cc9ff1cfedbd3ac0b53292deefbc14e589acf496cb5f7670130fdbb6cf38d208953c015a0474675b724bd109f7cb89c33016751fe7aa785d099d09ab20dd5258cd764ac8daf343ce4790ead0863af43121aa527a37a11628f47869668f8eac00d80b6bf9906663d7a2899c1cb678cd7b3eb3bc80226b8b13b6e46877f38f07c3d9c86d3368baac4a6f6b93ccebcec9811474b6a6a4da5c3a5966571eed05edcc0e3fe7cd15915c91f44eee8c149ae451f375518a79fb600a971a39b9433dfa19f91931b1932275747c262eedcbd27f1\",\n        \"signed\": \"1a80850fcbd6e643c6ba8eb684dbef7df015159228daedcf0604709186054db185aa7baacb09d6caad01638eff8e468735a60124de0c5376e94340e541a980073857bd260b8aad9d073f06765d37fe893a3f53e23de866ddac33495a39ad33ee9e9d5c22502bc1c4b5470d0e3f3a585223fe4cb93cc4ad2b5ba6d78826a53fc0253dc580a2018cc9ff1cfedbd3ac0b53292deefbc14e589acf496cb5f7670130fdbb6cf38d208953c015a0474675b724bd109f7cb89c33016751fe7aa785d099d09ab20dd5258cd764ac8daf343ce4790ead0863af43121aa527a37a11628f47869668f8eac00d80b6bf9906663d7a2899c1cb678cd7b3eb3bc80226b8b13b6e46877f38f07c3d9c86d3368baac4a6f6b93ccebcec9811474b6a6a4da5c3a5966571eed05edcc0e3fe7cd15915c91f44eee8c149ae451f375518a79fb600a971a39b9433dfa19f91931b1932275747c262eedcbd27f1\",\n        \"signature\": \"1a80850fcbd6e643c6ba8eb684dbef7df015159228daedcf0604709186054db185aa7baacb09d6caad01638eff8e468735a60124de0c5376e94340e541a98007\"\n    },\n    {\n        \"secret_key\": \"8d1621eeab83270de857335c665bbf5726e3722225fd016e23bf90ab47aeec3d\",\n        \"public_key\": \"becdbc024dae6a94ed4e29c80f2aff796aed8feb2c1b3790a8c72d7b048a2c61\",\n        \"message\": \"97facddc82cccccf788c31b3305e93eba956f89613e6e53542b043267fee544c2b0a8ae8886a31b9d321a63c27623baefea840b2a8af5b2330193ffb5baf873c335528afeae2160163c851c5a2e58154a1b0569c2d1366c0710437623b0e08c686e54fc279ed4c45f3e856868375f78224c777b13d75de10d79173552425d15a561904155f2117b2f14713eb0b04648a3bdeb3302167d1973e788a06cb00d48ccb269fa71af8ba68eae55dbbfd9594d5c2b4dc13ae0321718561acdf67dc8cfcc25bc46bb66e096a1941d9335207d3f7d11e8904904fabe3a50a3883e7078047df252f38b67cd28a6ac45c7d7a1d2a1de8d45747cf09301e01cdafd0cd99a6e91b704d509fce692fbdef2f71a5ce0b35bc15c65f876824\",\n        \"signed\": \"e08d6caa5f39327d6e6652ed74dd1a37844b979f5cce747a606f5679f4898bbb7643df7e931b54a2b40ebdefe83003f61ca0f11112f023c6a3e8cc18cafe5f0d97facddc82cccccf788c31b3305e93eba956f89613e6e53542b043267fee544c2b0a8ae8886a31b9d321a63c27623baefea840b2a8af5b2330193ffb5baf873c335528afeae2160163c851c5a2e58154a1b0569c2d1366c0710437623b0e08c686e54fc279ed4c45f3e856868375f78224c777b13d75de10d79173552425d15a561904155f2117b2f14713eb0b04648a3bdeb3302167d1973e788a06cb00d48ccb269fa71af8ba68eae55dbbfd9594d5c2b4dc13ae0321718561acdf67dc8cfcc25bc46bb66e096a1941d9335207d3f7d11e8904904fabe3a50a3883e7078047df252f38b67cd28a6ac45c7d7a1d2a1de8d45747cf09301e01cdafd0cd99a6e91b704d509fce692fbdef2f71a5ce0b35bc15c65f876824\",\n        \"signature\": \"e08d6caa5f39327d6e6652ed74dd1a37844b979f5cce747a606f5679f4898bbb7643df7e931b54a2b40ebdefe83003f61ca0f11112f023c6a3e8cc18cafe5f0d\"\n    },\n    {\n        \"secret_key\": \"f2735d50ee3a9a65b58c8acf551663e98809ec406f73e3e7f4e73bc4ea923874\",\n        \"public_key\": \"df48a5b94a07af3c2c99b8388762243233c850dc175317d602638e5b86ab49ed\",\n        \"message\": \"ae31e94e7197e4e4d0239348025ed6681e513ce1a6e0aa0e5b979373912150ef113e50ef0569c483f7568c4bbc4703c5dacaa80a0de4e738383fa1f10d6d4071a31b99e6485143972316c86522e37c6887a1c307b29b0dd6f9f1b438310af9d8d7346fb41f9b2dd2e80b14c45eb87d4ed48e37a5260b52257b3e99787a13c55392ba930c08e0240e960def0c29b8550745cf149dee53a5d174ec065d2d6677dee1fc42057062c34e27ea5dbcdb861b9f670c6032c7846cec8e87a7c9520e27967b0186ee71b77ed6d029bbdd70949cec4a709329fa37fee002490cc1bc4c2df6f763f9858f33d750c5b505a67e237063c0486f9456d3c620d9ac7c98f1381de0effe41c18259504a150d68a6a28b0a3eea803b855315c9e0\",\n        \"signed\": \"6942a7696417efaa591b95e11f02d763bef5279b932a8e2a7cbb9f583695c14ce5cc556bec66799b33cb592da4df2735f9eef2c3ceca4362164b6cc93da4e105ae31e94e7197e4e4d0239348025ed6681e513ce1a6e0aa0e5b979373912150ef113e50ef0569c483f7568c4bbc4703c5dacaa80a0de4e738383fa1f10d6d4071a31b99e6485143972316c86522e37c6887a1c307b29b0dd6f9f1b438310af9d8d7346fb41f9b2dd2e80b14c45eb87d4ed48e37a5260b52257b3e99787a13c55392ba930c08e0240e960def0c29b8550745cf149dee53a5d174ec065d2d6677dee1fc42057062c34e27ea5dbcdb861b9f670c6032c7846cec8e87a7c9520e27967b0186ee71b77ed6d029bbdd70949cec4a709329fa37fee002490cc1bc4c2df6f763f9858f33d750c5b505a67e237063c0486f9456d3c620d9ac7c98f1381de0effe41c18259504a150d68a6a28b0a3eea803b855315c9e0\",\n        \"signature\": \"6942a7696417efaa591b95e11f02d763bef5279b932a8e2a7cbb9f583695c14ce5cc556bec66799b33cb592da4df2735f9eef2c3ceca4362164b6cc93da4e105\"\n    },\n    {\n        \"secret_key\": \"cad9d21a01c7e1d15df2fbd79c516eb8c3401e9fe28467cc7b21679d4e331a3d\",\n        \"public_key\": \"a7b55c15d6790b40536fcae5ad2892cd66b18689f499c1fdeea66d4a7df39424\",\n        \"message\": \"70702bf19c919f9836defd7b846fd9992d8b7eb2e106aeb71e60a31b4ea25a41b212dc7de7c91cbd613d58d0595db833cfe7e50584f25569602c7744fa675d156d0f63cd2b7c089c8a00686a437169826a12dc485b38c068a8007142e5163747011a07a415683622ab1e23ce577c732ba14f401fbc3043e0693a9205c19a92298a3d9b08fb7afafae0a9f016bc750ee631a5f5da5db6f9ba2692c74caaaeb4d097e90e3c02d2e3a7fb3aa000040b7c17b74564e646bea16bad611ebc0859a3828804ab4f5cfba417d254515ca3620a3ad683c46ca6267bb49539bb30e369087e67438e9489562750dccba3aa0b1b0a6c267032d20c2adb75e68df1123b5259bfe4eac6cadca6778138a37318adb30e8d669f3bc9692cc74b68\",\n        \"signed\": \"31927d01db9f2472f4df6f63c18ebd83c2b1aaf88d580e848854df8cba6395d3da7bd6bb9edc1fce1c7d7e1360558fcddfa93915be076efb8ea2dc5ea7b20d0a70702bf19c919f9836defd7b846fd9992d8b7eb2e106aeb71e60a31b4ea25a41b212dc7de7c91cbd613d58d0595db833cfe7e50584f25569602c7744fa675d156d0f63cd2b7c089c8a00686a437169826a12dc485b38c068a8007142e5163747011a07a415683622ab1e23ce577c732ba14f401fbc3043e0693a9205c19a92298a3d9b08fb7afafae0a9f016bc750ee631a5f5da5db6f9ba2692c74caaaeb4d097e90e3c02d2e3a7fb3aa000040b7c17b74564e646bea16bad611ebc0859a3828804ab4f5cfba417d254515ca3620a3ad683c46ca6267bb49539bb30e369087e67438e9489562750dccba3aa0b1b0a6c267032d20c2adb75e68df1123b5259bfe4eac6cadca6778138a37318adb30e8d669f3bc9692cc74b68\",\n        \"signature\": \"31927d01db9f2472f4df6f63c18ebd83c2b1aaf88d580e848854df8cba6395d3da7bd6bb9edc1fce1c7d7e1360558fcddfa93915be076efb8ea2dc5ea7b20d0a\"\n    },\n    {\n        \"secret_key\": \"d9be842255e9a16b0a51a8674218cee7cd9a8bdf343508397f4ddb05f3fa0082\",\n        \"public_key\": \"7931bc6dfa3324943aab183d1285515919399ffe0b710677f0915d3a5be51e92\",\n        \"message\": \"ac6c55b134663e41f02a6dcb8549eaa1c013f59658d81d812f95b74009513723671945e1324f90f8a3f971369181b587bab45665f788d663ab78140c5a22c1c18d4afedc7448a748afe5bf2387003c1d65ab18482ef98922b470da80ad14c944951ce4aed37390cce79a8e01b24c7dfc1141c0eca2c7f773ed4b11806a34615513486e4ee11af08078a1b4054cf9880298608dd9b3faa1a242a452fe511604b3102c313d14cc27c6f0f8471d94555317eaa264cdf52c69e18f461e47903d21298716b172ee9cb178f08ff2d3c9c162121c2ed21d8734b2f0630d399146cbf76e028a143f2bf7bb50af0f57b9ba8021d264b00c6662f84c86cb6d5952b3d241f7dc3e700c96616cbcfb0d0e753ffd5d21ee320e65e97e25cb8609\",\n        \"signed\": \"c93845658c9560d2c0e28f282adbd4652bafd3bb2edec17c94878f7b94d3c77afec906ed292a8dfbf5f8e7c118e8f2ca33dda7909d9b695b8ff5a1c0e97ac807ac6c55b134663e41f02a6dcb8549eaa1c013f59658d81d812f95b74009513723671945e1324f90f8a3f971369181b587bab45665f788d663ab78140c5a22c1c18d4afedc7448a748afe5bf2387003c1d65ab18482ef98922b470da80ad14c944951ce4aed37390cce79a8e01b24c7dfc1141c0eca2c7f773ed4b11806a34615513486e4ee11af08078a1b4054cf9880298608dd9b3faa1a242a452fe511604b3102c313d14cc27c6f0f8471d94555317eaa264cdf52c69e18f461e47903d21298716b172ee9cb178f08ff2d3c9c162121c2ed21d8734b2f0630d399146cbf76e028a143f2bf7bb50af0f57b9ba8021d264b00c6662f84c86cb6d5952b3d241f7dc3e700c96616cbcfb0d0e753ffd5d21ee320e65e97e25cb8609\",\n        \"signature\": \"c93845658c9560d2c0e28f282adbd4652bafd3bb2edec17c94878f7b94d3c77afec906ed292a8dfbf5f8e7c118e8f2ca33dda7909d9b695b8ff5a1c0e97ac807\"\n    },\n    {\n        \"secret_key\": \"cfc48cc6f65811fe7d7bba85d1cd84858fd6f7edd638f4f552363ee7685f69ca\",\n        \"public_key\": \"d29c10694c5e8e3f3447ed78d34dbd74a2b301373ba871b5850c333dff7bf8d0\",\n        \"message\": \"8e7defb9d16d036bd642cf226e32773e605361c5ec4b951255788db0a042c63e5a4367d61524f10e6258991325a39ab6b03612260c3fe3df20b34202d34395bd4ed40bd61373df781a4c8bcfbd15301060f07437732333d8e49736322dee6b22438e787d8856b70c26ec57d6dade9c3c28e27220c5670e393544ed095937298dc3adc73865f777e90037bdef834716476d78f4e6cb4961a4c68a8a836338a9f5da179c4d5e93c3f70dd35eec709653dd8de37996b12056d4eefcb4b6b3c13ba984d832275c4386ebf4a8ff7f078be3d428c1e0d9b162381f06a5b7bb12704003d91f25d1d8fd43626ce70fff59d2927768a76bf7f9ef76ff95489f38edcd1c9e9b8a8b0ef66c32805776d5ae9fbd84a7af4fa6563ec70ac5733a44\",\n        \"signed\": \"80c5d51e96d1cac8efd3459825e79c1e9f65af701d1d29e1f95b036707113b77984b7b3350f04077333c957f8fbc7d9b040c362651417b9899027cd33edb11038e7defb9d16d036bd642cf226e32773e605361c5ec4b951255788db0a042c63e5a4367d61524f10e6258991325a39ab6b03612260c3fe3df20b34202d34395bd4ed40bd61373df781a4c8bcfbd15301060f07437732333d8e49736322dee6b22438e787d8856b70c26ec57d6dade9c3c28e27220c5670e393544ed095937298dc3adc73865f777e90037bdef834716476d78f4e6cb4961a4c68a8a836338a9f5da179c4d5e93c3f70dd35eec709653dd8de37996b12056d4eefcb4b6b3c13ba984d832275c4386ebf4a8ff7f078be3d428c1e0d9b162381f06a5b7bb12704003d91f25d1d8fd43626ce70fff59d2927768a76bf7f9ef76ff95489f38edcd1c9e9b8a8b0ef66c32805776d5ae9fbd84a7af4fa6563ec70ac5733a44\",\n        \"signature\": \"80c5d51e96d1cac8efd3459825e79c1e9f65af701d1d29e1f95b036707113b77984b7b3350f04077333c957f8fbc7d9b040c362651417b9899027cd33edb1103\"\n    },\n    {\n        \"secret_key\": \"15c9f7c4d84a5a479041952e6a8cac24e76fd2d275c197e6b521929b43ba6c5d\",\n        \"public_key\": \"8633c1829d29091df71fd5c0ef640572e4b64974cd097dbebbcddeba041647c0\",\n        \"message\": \"11730dd45dda80d84d080d92e9bddaeea6878e4a0b3b512d9ea733808e1cef51d49048d6c78116a4bde3c64aceaa52beca86b331ab59e9185c70286a02bb5dd04f5c7f4e9c7e445e77458565f159c783dfd4d976a910e937789d2141d416ed3a7f608d26737a86b20b624e3c36af18d25c7d59b8d7427ec6c4d3d438d7ae0949dd7d748c1ffd6f28e8285d440422d22a3761202e9584f5cdb3504547aa4b685730c982cba213de08020a5e4e46a95fac4b481bea0b630abd030ddd335a20fe2cf7094aef4813956991913c6821f4b5410df4f133fe63e22c08092a0a65972722a27ae42011a807c327b417237c540114eecb9f0e96cda5dcf0246f1d2717f49b9cea9dc6a3da9b396f0270529226f5dcba6499918a6c289fe055fec8\",\n        \"signed\": \"1e36bea5a583767ebd80306cab233155b7b42814b43473cf45cdc5039c939744a9694b87220daf4ccd29f25cea405e7c08db2ef17f3f034dbb49cff60283e30611730dd45dda80d84d080d92e9bddaeea6878e4a0b3b512d9ea733808e1cef51d49048d6c78116a4bde3c64aceaa52beca86b331ab59e9185c70286a02bb5dd04f5c7f4e9c7e445e77458565f159c783dfd4d976a910e937789d2141d416ed3a7f608d26737a86b20b624e3c36af18d25c7d59b8d7427ec6c4d3d438d7ae0949dd7d748c1ffd6f28e8285d440422d22a3761202e9584f5cdb3504547aa4b685730c982cba213de08020a5e4e46a95fac4b481bea0b630abd030ddd335a20fe2cf7094aef4813956991913c6821f4b5410df4f133fe63e22c08092a0a65972722a27ae42011a807c327b417237c540114eecb9f0e96cda5dcf0246f1d2717f49b9cea9dc6a3da9b396f0270529226f5dcba6499918a6c289fe055fec8\",\n        \"signature\": \"1e36bea5a583767ebd80306cab233155b7b42814b43473cf45cdc5039c939744a9694b87220daf4ccd29f25cea405e7c08db2ef17f3f034dbb49cff60283e306\"\n    },\n    {\n        \"secret_key\": \"6d2d0d823f294746b9a5512e14e73c1d855b5e4bca65fe817729810cc5ef840d\",\n        \"public_key\": \"1b6480a6a90dfb472984855cef6f1ab31eb7b3f13c8ac00fa556d20b53e5ae17\",\n        \"message\": \"8772721f72eaf7f73040c068a7c3753bffca7dc2d0930c6525f425e6005c25cd4c0ff5095c9c61a5d8a1967b8c86010c884e509e6b1670f79046e22979ebd354734090d3ada21435c1f8254f7b5222cd5564f064e977640366449f4e5008f870f9c4840565bf4fb5f574c9774ba2568e71a9ccd82ffc59b694f26e7de4ce2e3fd880a0eef387931333ede00dcb065e6d0f79591a2aa956df1948a265cb95750d8a233b15c288a05487c515663f93e740fb1570fbe4bd80c68e8d9297345a8a01cdbd88f4a39bed9c5ef09f144bce5de568bf3733bc53b2039a29cb3e194501adc1c10e86383aac8b0f85c67a6689bbe1470a392476313439ca88d98c021c0eaec25fb2f9a160ce5c786170be0238fb8785dd33bfa9059a6c3702d0de05\",\n        \"signed\": \"b515f49eb32ad478692df88f07b7802c6e0e5327aa08a6366e4cb1d1e26f9e65fc81abebe2215d649100f27598273a412b624e842d8130403797e57dec975a0a8772721f72eaf7f73040c068a7c3753bffca7dc2d0930c6525f425e6005c25cd4c0ff5095c9c61a5d8a1967b8c86010c884e509e6b1670f79046e22979ebd354734090d3ada21435c1f8254f7b5222cd5564f064e977640366449f4e5008f870f9c4840565bf4fb5f574c9774ba2568e71a9ccd82ffc59b694f26e7de4ce2e3fd880a0eef387931333ede00dcb065e6d0f79591a2aa956df1948a265cb95750d8a233b15c288a05487c515663f93e740fb1570fbe4bd80c68e8d9297345a8a01cdbd88f4a39bed9c5ef09f144bce5de568bf3733bc53b2039a29cb3e194501adc1c10e86383aac8b0f85c67a6689bbe1470a392476313439ca88d98c021c0eaec25fb2f9a160ce5c786170be0238fb8785dd33bfa9059a6c3702d0de05\",\n        \"signature\": \"b515f49eb32ad478692df88f07b7802c6e0e5327aa08a6366e4cb1d1e26f9e65fc81abebe2215d649100f27598273a412b624e842d8130403797e57dec975a0a\"\n    },\n    {\n        \"secret_key\": \"c0cf799af7395bf27bafa36cab437045e39c903bf807548319ce44f287494fbb\",\n        \"public_key\": \"afbf550ca290c905bdd92fc8831ebe3dfeb6daae4f56005253cc50951e50edc2\",\n        \"message\": \"dbe65780e968de9e40ffb57cf59a60fd93b3f9a5e7d8ed5180adbc578ca1bc48bd9fb60a1324c9c2c1141479a0dcf0f1d07e84936526df42333c0d773e3fed9e4038de5b95ad905c92cbe040487bf55e10e1edb429a0ecc4e0e8d00a988a9cd53e2eb372f4fc4cd9537b269ba3a23cefbc8df6476e75434b81d93e8891bf417c82e363f3e4abf80a4f73aca84ac7df6337f536d63d939d92cba64be742221116069ef251abba0b00af01718bb580ddbeb79973ef10a68b4d0fa023d6ebd3079d6b32a1aa20a21e9202f27590c3f0c0cc253073c3f822aac459d39f50758b70c00710a3c98438416508522e512adaa0afd503a7ceb04fb94a4a932ce80cd5a7f11bb861263f58e5749d542a110de7c7689dfcb0c51afa9d54a58ff89f3f67\",\n        \"signed\": \"5bba01a4c7b25542d06912de70aa1e220423fdf8338a9e693395cb6f0dc1fbfd018e3c77e50aef90a9080f30f1f5792b2431078fe6e3e00464245e17cd8dc107dbe65780e968de9e40ffb57cf59a60fd93b3f9a5e7d8ed5180adbc578ca1bc48bd9fb60a1324c9c2c1141479a0dcf0f1d07e84936526df42333c0d773e3fed9e4038de5b95ad905c92cbe040487bf55e10e1edb429a0ecc4e0e8d00a988a9cd53e2eb372f4fc4cd9537b269ba3a23cefbc8df6476e75434b81d93e8891bf417c82e363f3e4abf80a4f73aca84ac7df6337f536d63d939d92cba64be742221116069ef251abba0b00af01718bb580ddbeb79973ef10a68b4d0fa023d6ebd3079d6b32a1aa20a21e9202f27590c3f0c0cc253073c3f822aac459d39f50758b70c00710a3c98438416508522e512adaa0afd503a7ceb04fb94a4a932ce80cd5a7f11bb861263f58e5749d542a110de7c7689dfcb0c51afa9d54a58ff89f3f67\",\n        \"signature\": \"5bba01a4c7b25542d06912de70aa1e220423fdf8338a9e693395cb6f0dc1fbfd018e3c77e50aef90a9080f30f1f5792b2431078fe6e3e00464245e17cd8dc107\"\n    },\n    {\n        \"secret_key\": \"cdaa50e8527dc7a50fb37e28fa8b9568c37e8567e0b499997b9aed676180c3b0\",\n        \"public_key\": \"7c56e164510268c182b423747904f1d3a5809330f6e1b29266ec46e73be1550f\",\n        \"message\": \"94fcfbaaa303dece7b908f874cc5f095061f1754bb35780db666b63ab8290811bf1c521a7f8f785ea270dfb39d0d6ed95ab71955a11ffaeaa268e081ff3e4f2425b41880a987151e678e89111350942d820c3eec36212426663be175e5286b4ad1cc804e3e3a03b9fa3e82838ebbc2615a645f2ca1468ac4a1cdbe523761e83f4381b0c8550ae5e8c8cd1fda57191436e27cb883bc64be86a9dc6110ef3401d88a7debd1b701d9c257a6826cf01e9e2922e3ae577f2834275fb0ecda80ed8cf1801e0bc5e01e26a77c48bdf46a5c4894d22ab53e741827e24bed5f0750ffad05e53f1d5e61dfd316b191d9797ef713131a8b430abe3fac5f3c4a2ca021878b15adc8c5f542114260e687a9d199d230c4e0d3fc696993b59ccfa3ffa9d8d2fb\",\n        \"signed\": \"137bd10a50ef609384fe668768fb871de741ca0f53ff8477d7ebfa90aafd5e2681fdf1b89250463c15db8e17a58825fe9427de089c34de13cd07bba18d4aa40d94fcfbaaa303dece7b908f874cc5f095061f1754bb35780db666b63ab8290811bf1c521a7f8f785ea270dfb39d0d6ed95ab71955a11ffaeaa268e081ff3e4f2425b41880a987151e678e89111350942d820c3eec36212426663be175e5286b4ad1cc804e3e3a03b9fa3e82838ebbc2615a645f2ca1468ac4a1cdbe523761e83f4381b0c8550ae5e8c8cd1fda57191436e27cb883bc64be86a9dc6110ef3401d88a7debd1b701d9c257a6826cf01e9e2922e3ae577f2834275fb0ecda80ed8cf1801e0bc5e01e26a77c48bdf46a5c4894d22ab53e741827e24bed5f0750ffad05e53f1d5e61dfd316b191d9797ef713131a8b430abe3fac5f3c4a2ca021878b15adc8c5f542114260e687a9d199d230c4e0d3fc696993b59ccfa3ffa9d8d2fb\",\n        \"signature\": \"137bd10a50ef609384fe668768fb871de741ca0f53ff8477d7ebfa90aafd5e2681fdf1b89250463c15db8e17a58825fe9427de089c34de13cd07bba18d4aa40d\"\n    },\n    {\n        \"secret_key\": \"0fdea9bee6288f947e0adbdda4dfb2baa03891af25024a5e138ac77984d00507\",\n        \"public_key\": \"70abd86430d7e8d63209c8b373ec4e4b79e989e6725facefbade3c7574d23cd0\",\n        \"message\": \"cf72c1a180a2bc37d8478d9a7a39acf03bf2a50790f7902f81121222d31d3ec916f4f24cef9d7c41dc021b0e8487bb892e47305e54520303e89b30b263dac4a9ba375d46c40fcf400535c959d2b746a7fc970cf65b472e84b5f1d0ebadcfa1aed6fc47facce16a366a3b1d6e516813c1960975f8f2b43042fb4eeaabe63c6f65db45ddb7db888a19a9d7ba6ca479fcd70c5d1e970f12c14f4d24fb7e2f357bd3a94aa1b868ccc0847f2eef21853e253bafbf07c4e6176a1ef077167841ebbe5629337157f39f75c71d21e7e96c51a1b16fa8dc60f0b1279fcda2641fc8591e3c492f15bf83caf1d95b2cd91332f1b4202fe72862ca2ea2ef92c11db831d82f8fc3d41fe29a76c211a758e2f71bd89d2c6610f201429f348d56e10e3b7af53e27\",\n        \"signed\": \"80c42dd5df03b285a86ac95ce6669f786a978a813a9d7b8c6a23de76fbd09bdb66c5dd1cc9f1a176cba388d5051764a32fa27f0028ba4898068bd01a3ee17208cf72c1a180a2bc37d8478d9a7a39acf03bf2a50790f7902f81121222d31d3ec916f4f24cef9d7c41dc021b0e8487bb892e47305e54520303e89b30b263dac4a9ba375d46c40fcf400535c959d2b746a7fc970cf65b472e84b5f1d0ebadcfa1aed6fc47facce16a366a3b1d6e516813c1960975f8f2b43042fb4eeaabe63c6f65db45ddb7db888a19a9d7ba6ca479fcd70c5d1e970f12c14f4d24fb7e2f357bd3a94aa1b868ccc0847f2eef21853e253bafbf07c4e6176a1ef077167841ebbe5629337157f39f75c71d21e7e96c51a1b16fa8dc60f0b1279fcda2641fc8591e3c492f15bf83caf1d95b2cd91332f1b4202fe72862ca2ea2ef92c11db831d82f8fc3d41fe29a76c211a758e2f71bd89d2c6610f201429f348d56e10e3b7af53e27\",\n        \"signature\": \"80c42dd5df03b285a86ac95ce6669f786a978a813a9d7b8c6a23de76fbd09bdb66c5dd1cc9f1a176cba388d5051764a32fa27f0028ba4898068bd01a3ee17208\"\n    },\n    {\n        \"secret_key\": \"03d5e466f8298ab5438a30976d1322a7215a642dd5fb4c3f8519409a7522f092\",\n        \"public_key\": \"4b3ed4db080e2a452e16912c14504424920a60975604e4f379258d1c8b193d6f\",\n        \"message\": \"1b47b70013cb53e1f8f4971e0f39563ce87edbc2cedd99e5a35585df8b00a852f7b9c97c7e4a5465fc5605ae8c5c36570a99201a7ad6031287ef0c7b2ba6e57b056d0fc8d6ca43bf6cbdab098934b403197b525d22d45e6b29c78f8d6183e41ffe197dae25ba22b06669ae05badd7e1da6932a7d054cbab3f54e5146223ad8671231bc16fe62679bd2817a6b80e653998c4949f81ff53b6173163e11da3e6d3c76d84c713225b4173d6bf06a85b6988a48be4359cb515503ca563f4353f8e7d45e4d94462c89a04a00f1b3b0ca6422d5db029c507d464834a20c78a713661d84edffc496d69282619894437b4487954cbea2aa7261e6a62b6851154a5d25fb6b4f09c59473d385ce03e91ba865eab66c58c0abb0b7a78e4be927e55460ccd70d82\",\n        \"signed\": \"6d7e4658f26f337c98e03f13542e2f39440ff7bf8d88f3f6dfa4d64948cd96b79051492fc28f65f2cc0d23a0c4d5e2307bb1c47e11e53b371f091b69f80dbd051b47b70013cb53e1f8f4971e0f39563ce87edbc2cedd99e5a35585df8b00a852f7b9c97c7e4a5465fc5605ae8c5c36570a99201a7ad6031287ef0c7b2ba6e57b056d0fc8d6ca43bf6cbdab098934b403197b525d22d45e6b29c78f8d6183e41ffe197dae25ba22b06669ae05badd7e1da6932a7d054cbab3f54e5146223ad8671231bc16fe62679bd2817a6b80e653998c4949f81ff53b6173163e11da3e6d3c76d84c713225b4173d6bf06a85b6988a48be4359cb515503ca563f4353f8e7d45e4d94462c89a04a00f1b3b0ca6422d5db029c507d464834a20c78a713661d84edffc496d69282619894437b4487954cbea2aa7261e6a62b6851154a5d25fb6b4f09c59473d385ce03e91ba865eab66c58c0abb0b7a78e4be927e55460ccd70d82\",\n        \"signature\": \"6d7e4658f26f337c98e03f13542e2f39440ff7bf8d88f3f6dfa4d64948cd96b79051492fc28f65f2cc0d23a0c4d5e2307bb1c47e11e53b371f091b69f80dbd05\"\n    },\n    {\n        \"secret_key\": \"76cc18a1dafffa100586c06a7b40f79c35fe558c339c2999a5f43875cfade03e\",\n        \"public_key\": \"4b9da8d2f137dc6c857a99a5998dd89dd5f05971a21e8c776670eb47bc1270a5\",\n        \"message\": \"4522b1d82373f7a318221e7e57617503ddf44fd53997522a1d963c85b708d0b245de372ad52ec7f54f6213d271f7c91d5a1d36d134db389df0b081a06bc0c7a4875f724092793172c9115641c6d054f1d992e0fae4df58695f0ea3449d7a4b3a8857e19803fe49b6d52c9ff3746a574a2756956579f9fb809a0edec92c55e95ffefa3d05f165822f464a21999f29691f6744ac5a3ee49017880645e837edebfd2e0f24997f041145a72e2376ada283186ca2b836362977195baee30a3acc81b243f3ee376a2c4764c783667a4b1177e7951d3e3c7be4f1bd7ae8c60fd5fb0fd91f0c1c14d0d2327e8f20d92c0dfcc53870e9d99fdbf9dd9a17e882509ae7baa8653e39edc8ee569000d624cb93a0754a798d1f811f6a0ef5501a17bcf25fd0f91626\",\n        \"signed\": \"db74751c66e6b1866044dd9ae99f19e6334f179e79d8b8e0c8cd71d22cefb9eab7e3e7a9c2da225f2a9d93a313d1cbf1b7fe2597b8d702bf3017a6a6bc7b7b064522b1d82373f7a318221e7e57617503ddf44fd53997522a1d963c85b708d0b245de372ad52ec7f54f6213d271f7c91d5a1d36d134db389df0b081a06bc0c7a4875f724092793172c9115641c6d054f1d992e0fae4df58695f0ea3449d7a4b3a8857e19803fe49b6d52c9ff3746a574a2756956579f9fb809a0edec92c55e95ffefa3d05f165822f464a21999f29691f6744ac5a3ee49017880645e837edebfd2e0f24997f041145a72e2376ada283186ca2b836362977195baee30a3acc81b243f3ee376a2c4764c783667a4b1177e7951d3e3c7be4f1bd7ae8c60fd5fb0fd91f0c1c14d0d2327e8f20d92c0dfcc53870e9d99fdbf9dd9a17e882509ae7baa8653e39edc8ee569000d624cb93a0754a798d1f811f6a0ef5501a17bcf25fd0f91626\",\n        \"signature\": \"db74751c66e6b1866044dd9ae99f19e6334f179e79d8b8e0c8cd71d22cefb9eab7e3e7a9c2da225f2a9d93a313d1cbf1b7fe2597b8d702bf3017a6a6bc7b7b06\"\n    },\n    {\n        \"secret_key\": \"71ad980d58ad8e7d33306689358936a372d5190b24ec7f9bde749cb81150efda\",\n        \"public_key\": \"fd35a75fe5abc20104691a24a4659440b55aeaea902ac3be274af27aa8312869\",\n        \"message\": \"e87ae073ff5dcc5485a19940e4e3ff263a0618a9025ad4032dfb36d171ce881f71c18a49210eb45819806142e2f00db3041835bf2c3bccf1dba02b8b5a5bdaf8fea316c0623dd48a564ec166f037d587c8c01684e5e5c0ba9dba4d23b49a0309244e282a51408622edb05704747e0cdeec976893777071098972c113a8ab639c31f1613233ee460eea8a8c10e1e6e152214529878cf1adaeaf78cf19bac71361815bf57955498fab4f0f2b7586c86f9f4c2ddf8972f9b9e0eb636d84bcc14385b2d038be55a963702efe225a50bdd0c4da92a2a6a09100ea04a211d396458dceb4487116837d139eb0f122538ed3986ad0af4da2dffc89f3269ca88538086e691e5beae9581e7c63d8e612da2c47f74dde1d94951eadb0df60c3897d2a3095c506093b\",\n        \"signed\": \"81670b1029e481e9ff3c171f05c16861c846ee79cdf2e21e3bf952bcfac97565f2b1dcedf69d2e7eb35caf5662e8bc671fbb96756a63a596264d1b7f4af97e06e87ae073ff5dcc5485a19940e4e3ff263a0618a9025ad4032dfb36d171ce881f71c18a49210eb45819806142e2f00db3041835bf2c3bccf1dba02b8b5a5bdaf8fea316c0623dd48a564ec166f037d587c8c01684e5e5c0ba9dba4d23b49a0309244e282a51408622edb05704747e0cdeec976893777071098972c113a8ab639c31f1613233ee460eea8a8c10e1e6e152214529878cf1adaeaf78cf19bac71361815bf57955498fab4f0f2b7586c86f9f4c2ddf8972f9b9e0eb636d84bcc14385b2d038be55a963702efe225a50bdd0c4da92a2a6a09100ea04a211d396458dceb4487116837d139eb0f122538ed3986ad0af4da2dffc89f3269ca88538086e691e5beae9581e7c63d8e612da2c47f74dde1d94951eadb0df60c3897d2a3095c506093b\",\n        \"signature\": \"81670b1029e481e9ff3c171f05c16861c846ee79cdf2e21e3bf952bcfac97565f2b1dcedf69d2e7eb35caf5662e8bc671fbb96756a63a596264d1b7f4af97e06\"\n    },\n    {\n        \"secret_key\": \"61594e24e75f996b4fb6b3e563f6a4f9915cfa65ddb199b01fed7f8ed7824ecb\",\n        \"public_key\": \"8627d2141579cd2521aa076800ac354b9e3a47d71cedc8547434268225e33005\",\n        \"message\": \"bc01b08c7caa236100a012a726477d0ec389dbfadac73d5106424c5d1f3d1cef1695cfd93a7062ec8bf1067047854920162f651357bedf1cd5a92ec29bdb5dff716e8f6025515a9549ba36cdc35ced7c5c0c368e6cd92f2f10ae146a20728c374bba509641ce88cb42fff0cedfd9fd67f310f9d01a3f3690eb21db17bce67ae35c4cd24c209f09f044759d8d5a7d248e2bd966524ba8c0c28974726b43bd05de843433cc400598922974623d9acbfdc761c4c04375a952ce54caffaa96acff6d9dc278742af476e1865cb8c20d13d1c1900863bca231e44c6b0d47cb41d510f7958f48f304d03da033484a3e1f273faf6983375b7d3be03d8a0a002def6365beb2fa8ccf1a94987adcd33d0da1177fc5159b6e56d004301e921dbc12ec0a73f413cf2c48\",\n        \"signed\": \"6302b3ff2710be306c92b9aae30d23c3d4beff394e63201e6ad11713345c4fcb5cc8d3dd10adfb82bb11a189ce7ec3e4222727624fc17881c14788d2710e1608bc01b08c7caa236100a012a726477d0ec389dbfadac73d5106424c5d1f3d1cef1695cfd93a7062ec8bf1067047854920162f651357bedf1cd5a92ec29bdb5dff716e8f6025515a9549ba36cdc35ced7c5c0c368e6cd92f2f10ae146a20728c374bba509641ce88cb42fff0cedfd9fd67f310f9d01a3f3690eb21db17bce67ae35c4cd24c209f09f044759d8d5a7d248e2bd966524ba8c0c28974726b43bd05de843433cc400598922974623d9acbfdc761c4c04375a952ce54caffaa96acff6d9dc278742af476e1865cb8c20d13d1c1900863bca231e44c6b0d47cb41d510f7958f48f304d03da033484a3e1f273faf6983375b7d3be03d8a0a002def6365beb2fa8ccf1a94987adcd33d0da1177fc5159b6e56d004301e921dbc12ec0a73f413cf2c48\",\n        \"signature\": \"6302b3ff2710be306c92b9aae30d23c3d4beff394e63201e6ad11713345c4fcb5cc8d3dd10adfb82bb11a189ce7ec3e4222727624fc17881c14788d2710e1608\"\n    },\n    {\n        \"secret_key\": \"54e6bbfbf8c06ff2c066318c2ebf03d506547bf43c2d7a5d4df305a3032b7138\",\n        \"public_key\": \"3b71aa1def666d9188f403f82ed30454aba5bc9f470f6eb988da187c92523284\",\n        \"message\": \"0318d7cb4805af9821dd3f914b0e076fea04a7d2db3a59a00affead3325a2be40c1f87f53276a8552604f228b976e288b9be906a7bd25b2ffab8a8af5d0f6e08786fd034e2fe1eb7ee033979860dd1e5327287e9e615f5dc5a960f17026b56842fc8d44cad002edc8501cfb956001502e4ddc81a7700d9c0be88eb4aaa64a6cbc39de82f13c11086de1a4270d3af97284bac1caef1d3edaa1071666bd83b2ede3962d98b9d93497ddfd8e97dab3089950cf30ed11db77ad1437a0af5889d8efc44e612420e3907267df3acff4bd3fb6e8ca5badf8e72f9de39528653058524456a81da5f84982afac34bef5f71e91f8f90938a6f5f1f287716de56a0946d261e87bc775ce189e41a77baede7320a3c608fc971e55d0a773c4d848d428637f11b4e4460390c\",\n        \"signed\": \"3df4d09079f830e3f982283681ba37b50f3c73de2c5d22a291358ebb1fb854e510f63f9a48e9fff7fd8311302ea3e969394e6d49c9e3182054942f6a744cee030318d7cb4805af9821dd3f914b0e076fea04a7d2db3a59a00affead3325a2be40c1f87f53276a8552604f228b976e288b9be906a7bd25b2ffab8a8af5d0f6e08786fd034e2fe1eb7ee033979860dd1e5327287e9e615f5dc5a960f17026b56842fc8d44cad002edc8501cfb956001502e4ddc81a7700d9c0be88eb4aaa64a6cbc39de82f13c11086de1a4270d3af97284bac1caef1d3edaa1071666bd83b2ede3962d98b9d93497ddfd8e97dab3089950cf30ed11db77ad1437a0af5889d8efc44e612420e3907267df3acff4bd3fb6e8ca5badf8e72f9de39528653058524456a81da5f84982afac34bef5f71e91f8f90938a6f5f1f287716de56a0946d261e87bc775ce189e41a77baede7320a3c608fc971e55d0a773c4d848d428637f11b4e4460390c\",\n        \"signature\": \"3df4d09079f830e3f982283681ba37b50f3c73de2c5d22a291358ebb1fb854e510f63f9a48e9fff7fd8311302ea3e969394e6d49c9e3182054942f6a744cee03\"\n    },\n    {\n        \"secret_key\": \"6862061be0de9dfd998118204b2b98db3ce7d7e819dbc10794af0ab2b06e8434\",\n        \"public_key\": \"9c5f7c2265dde1b25e4f27ec71580d52dc89f2c3a712bc1ad5d6d69e711e08d4\",\n        \"message\": \"1740dde8434a0d689925679b0c180300cdbd0cf6a89ad8fde34653316cee4c571a4105c9e9e0284238fef2c38a09157c5db94340571b390adfb69ff4c0dc5053253a679d42cc1f1bf1ff429229ea0a5044c6f79564e0dd287f53f015b83187d9ad27d91039af062c437b1575a0eab6aeb8aa0d27b27665d6dea9041ff9963a3118b3298a8544e3fd69ac6877e3e4052fe4422bf03560b2c57ec531ee8b5ff53c28dbde35bb45c35077636e6f841b59d7eb77bc7791b6093858a3a80a3aa6d778dbf53db9d06119c50b71c791c0495c576d1b59d396873ed871485352c8299a359da5ee9d7f36ed1455f89851a30851bea719685aecd08f25562609dd106630735277e1d6519bb1687de8b8c68b9671452edbb3491da264cdfa0017c512d2769759cb925fb664\",\n        \"signed\": \"965edb34e8ab8bc3204a3201d22186372de4242600297cfdb57aa1df074ec50ddf10105e9d4c89a266c34db7772aa94cba946429e68ba62bf9a0ac90f5f05b021740dde8434a0d689925679b0c180300cdbd0cf6a89ad8fde34653316cee4c571a4105c9e9e0284238fef2c38a09157c5db94340571b390adfb69ff4c0dc5053253a679d42cc1f1bf1ff429229ea0a5044c6f79564e0dd287f53f015b83187d9ad27d91039af062c437b1575a0eab6aeb8aa0d27b27665d6dea9041ff9963a3118b3298a8544e3fd69ac6877e3e4052fe4422bf03560b2c57ec531ee8b5ff53c28dbde35bb45c35077636e6f841b59d7eb77bc7791b6093858a3a80a3aa6d778dbf53db9d06119c50b71c791c0495c576d1b59d396873ed871485352c8299a359da5ee9d7f36ed1455f89851a30851bea719685aecd08f25562609dd106630735277e1d6519bb1687de8b8c68b9671452edbb3491da264cdfa0017c512d2769759cb925fb664\",\n        \"signature\": \"965edb34e8ab8bc3204a3201d22186372de4242600297cfdb57aa1df074ec50ddf10105e9d4c89a266c34db7772aa94cba946429e68ba62bf9a0ac90f5f05b02\"\n    },\n    {\n        \"secret_key\": \"b2250bbcb268d2477c8312b1900fd99982baa29a68974fbf8778a1228dc97550\",\n        \"public_key\": \"44aa8df1181674b05ade980f7eddbaf3bd7422a920287cb2d2db59a063eebf74\",\n        \"message\": \"7ef0ae1336a6fab37f99da5fa7d0dec7409c072623ead84f241d53d0596b461705fb1b3c537d36b89e8960febb4cdc0d427ce2fc1be58dbbce151e35acd8b6ace40a19822914a4bd8c4af632f136418ac49b184d55193ebcc32d0d798709b1a8fe294fba8a1fe72d976b4400d4a393242311b0f8cc994e89475b0038ae5d8914938e8f6e87c6f50b9d656c45d7b14231efed97f3c90668913670bf5be2efd5c270c7cbaf01e8572e9800978dfe2e10a2fc0440b855629bf9cd409ea941cb69226cac771b15ea77c0326848806ff8d2e201e6e26cd5f45430dadcff8f59c321c1c9c6a29b94882935447d3e6c2e8804b1161576bdf0320fe53c307d9cde426077a7677cde3c1bc83e18e60a0c4ee6dccd877c213a8e4cca640ee04929804570ae1f96157c04357a\",\n        \"signed\": \"f2b8d92ed51ebd1000bf9dd3411a9fa9e7aee54c4c86e24ad0f9ad5c55643a12d680019ca03f216bd4bd32c9ce1cd8a528c3ffaa5d5b1dc91a4be56f0e2c5e067ef0ae1336a6fab37f99da5fa7d0dec7409c072623ead84f241d53d0596b461705fb1b3c537d36b89e8960febb4cdc0d427ce2fc1be58dbbce151e35acd8b6ace40a19822914a4bd8c4af632f136418ac49b184d55193ebcc32d0d798709b1a8fe294fba8a1fe72d976b4400d4a393242311b0f8cc994e89475b0038ae5d8914938e8f6e87c6f50b9d656c45d7b14231efed97f3c90668913670bf5be2efd5c270c7cbaf01e8572e9800978dfe2e10a2fc0440b855629bf9cd409ea941cb69226cac771b15ea77c0326848806ff8d2e201e6e26cd5f45430dadcff8f59c321c1c9c6a29b94882935447d3e6c2e8804b1161576bdf0320fe53c307d9cde426077a7677cde3c1bc83e18e60a0c4ee6dccd877c213a8e4cca640ee04929804570ae1f96157c04357a\",\n        \"signature\": \"f2b8d92ed51ebd1000bf9dd3411a9fa9e7aee54c4c86e24ad0f9ad5c55643a12d680019ca03f216bd4bd32c9ce1cd8a528c3ffaa5d5b1dc91a4be56f0e2c5e06\"\n    },\n    {\n        \"secret_key\": \"b809361f55cfe8137fbda880fc62cbe44c216e141893346302b336045de21878\",\n        \"public_key\": \"fd23e42ff06644ead347abcc1b3e03b0e88593b61254981dd8ae59454e61b3e0\",\n        \"message\": \"17ace197d083aaf1726f53e5ef81b5a8c09222f260ee5f1f5404ab78d900d489688449b843bad3c498aac6d80b4639b76e6e81c55276a6f9c7cecd70b71aaaf2018ef76c0e30154aae86a5c86d4e8d0e4ec68cc427060bd56514f7238086bbef5bfca1f5671b18041838fd013572443dba48fbdd95ca740b0daa4327164a1e34677249708f77bd793e7caa6638b5dc9fbe6f0dfd4120209097209c93cedfaf21b6bf59ca6e99e6209639444f0e827bbcc0a61c3a237ca22a283213223ab658e712c7556238d3a5fe31722d65f5706ef6d64d73232d3043220f14e5cfd3c2c83a83d68e20274b6f96b29de040cec8475030b6a8a87d29808dd381795c3d22acf5dc193b720d95a752d9f123c209ffba004e48dd06dd8c9e172bc9e087d80bc5216c0b0b6e77031241\",\n        \"signed\": \"b5b5950d3772d2eef88e1b0f5df5ffae2f2103885e71446d346fbb5daef94967a6b7b6e4be885110065876c665b7812de46ad31ec3bfcbeaee13ed0c1e0b300e17ace197d083aaf1726f53e5ef81b5a8c09222f260ee5f1f5404ab78d900d489688449b843bad3c498aac6d80b4639b76e6e81c55276a6f9c7cecd70b71aaaf2018ef76c0e30154aae86a5c86d4e8d0e4ec68cc427060bd56514f7238086bbef5bfca1f5671b18041838fd013572443dba48fbdd95ca740b0daa4327164a1e34677249708f77bd793e7caa6638b5dc9fbe6f0dfd4120209097209c93cedfaf21b6bf59ca6e99e6209639444f0e827bbcc0a61c3a237ca22a283213223ab658e712c7556238d3a5fe31722d65f5706ef6d64d73232d3043220f14e5cfd3c2c83a83d68e20274b6f96b29de040cec8475030b6a8a87d29808dd381795c3d22acf5dc193b720d95a752d9f123c209ffba004e48dd06dd8c9e172bc9e087d80bc5216c0b0b6e77031241\",\n        \"signature\": \"b5b5950d3772d2eef88e1b0f5df5ffae2f2103885e71446d346fbb5daef94967a6b7b6e4be885110065876c665b7812de46ad31ec3bfcbeaee13ed0c1e0b300e\"\n    },\n    {\n        \"secret_key\": \"eeef8074c2eb9a1cee2f2d3bb05325546a9fb7cbe44b599461fc5885f5fd9cac\",\n        \"public_key\": \"9b892941a0573b7a1673ef480f081168d9b7496a81f9177dc427ca1f84cbbf7d\",\n        \"message\": \"9ae39feade905affcbedd2e72a6f2429b3d1108e5bc1a9dbaf490a6299bccd94acc413adacc918b14afa85c78bc168cc00740c3da0e08183915f79b7fe3868ce2a7e886b32ad45009805bfb81b8c07b3b1022420c0f009b889d7fc22fd1997ae34198438ca94778575122fcaaf96e6502c33a75a129a2d0dbb073d93820d9c96683db318990be3fef4cafc890afbd9b1504c7439a08a065e7814ee4f9b6f57ee16baed3f0e3aa35dd23d3528a458919ad77048b4e2e6172346be249a50af02bc6c853304c208ae0ba02771262a0d8a465f71fa0635e53eb2ef0a847d56a0bcd7dd3fe077c92bcdca3069a4a682a2859928315ce3eb445c6072a71492ee82e172a20be0b648b756e6c775376f0c7c3df8e64288089c2f81ce9593c6e08bb1cc1b27fcbd392fc7952c55\",\n        \"signed\": \"6f7101984fd6892e2144b7d45619830caeb6713bfab4eebbe217c5becd249bd9d752eb76e9fa995e7c71ff7df86bb260cdda173ff5deec6af204b7dde011de099ae39feade905affcbedd2e72a6f2429b3d1108e5bc1a9dbaf490a6299bccd94acc413adacc918b14afa85c78bc168cc00740c3da0e08183915f79b7fe3868ce2a7e886b32ad45009805bfb81b8c07b3b1022420c0f009b889d7fc22fd1997ae34198438ca94778575122fcaaf96e6502c33a75a129a2d0dbb073d93820d9c96683db318990be3fef4cafc890afbd9b1504c7439a08a065e7814ee4f9b6f57ee16baed3f0e3aa35dd23d3528a458919ad77048b4e2e6172346be249a50af02bc6c853304c208ae0ba02771262a0d8a465f71fa0635e53eb2ef0a847d56a0bcd7dd3fe077c92bcdca3069a4a682a2859928315ce3eb445c6072a71492ee82e172a20be0b648b756e6c775376f0c7c3df8e64288089c2f81ce9593c6e08bb1cc1b27fcbd392fc7952c55\",\n        \"signature\": \"6f7101984fd6892e2144b7d45619830caeb6713bfab4eebbe217c5becd249bd9d752eb76e9fa995e7c71ff7df86bb260cdda173ff5deec6af204b7dde011de09\"\n    },\n    {\n        \"secret_key\": \"61faeb15f857f6557862c8b8c7ef41f80545520996fcc1127b8c2491822201ae\",\n        \"public_key\": \"60a290c0fc425a0874673d94f9bb1400f9dacde9954f9f5b05dd48ab747a3950\",\n        \"message\": \"253b566eccb563bd6e480c69739b8e372519a3437254e0e5029cac86c71638f2df2a6cf9e56db2569934deba90db75547e3671747df64d6f2aaf3c110fa67a7094ccbe4cc5355f0d43235136ee26dbe37f4225d3bbfe245595280585fb548f894e86c516102580291fa7a02859557fb98eb588870828b0990ae9d74f3831da58946bc7a5ce1ba498b4e8be8989a3b50d7e8789f56b8b4fecbc2a33bfa3ef591a0fbcd932fa93e19f3a812ae5e4e3b4b242be7705a5874af73be310b0058266a378f23c1348524715b0ccc18d6634b23636c316ba6a1dd2fd5092c06716a717b54d0eb9fc7f636f85bbf225a2cf035b4b7cfddd75351682c0576c6b3ba5a1c0b25ec594e7709dd09a0079772ff3acc67fb6c1b37bb3742b726e77e80561d9ab73160b73362581da5b9c7f\",\n        \"signed\": \"31f90f50b2dc705f1d92f12ca9975d76f1b2826ada3cc185b0ed6c83860777bd8c489b59855a91f64839d49ba467985abb376c47a4908b271b8f77c58d01fd04253b566eccb563bd6e480c69739b8e372519a3437254e0e5029cac86c71638f2df2a6cf9e56db2569934deba90db75547e3671747df64d6f2aaf3c110fa67a7094ccbe4cc5355f0d43235136ee26dbe37f4225d3bbfe245595280585fb548f894e86c516102580291fa7a02859557fb98eb588870828b0990ae9d74f3831da58946bc7a5ce1ba498b4e8be8989a3b50d7e8789f56b8b4fecbc2a33bfa3ef591a0fbcd932fa93e19f3a812ae5e4e3b4b242be7705a5874af73be310b0058266a378f23c1348524715b0ccc18d6634b23636c316ba6a1dd2fd5092c06716a717b54d0eb9fc7f636f85bbf225a2cf035b4b7cfddd75351682c0576c6b3ba5a1c0b25ec594e7709dd09a0079772ff3acc67fb6c1b37bb3742b726e77e80561d9ab73160b73362581da5b9c7f\",\n        \"signature\": \"31f90f50b2dc705f1d92f12ca9975d76f1b2826ada3cc185b0ed6c83860777bd8c489b59855a91f64839d49ba467985abb376c47a4908b271b8f77c58d01fd04\"\n    },\n    {\n        \"secret_key\": \"e6b9cd4da07cb34f30391cf68f0d87c7cfcf68f810ffa40f9739c95deb037f71\",\n        \"public_key\": \"569ede0f04630b43a04c5a66b6a5636b766c75965984a7477e15491960fdd864\",\n        \"message\": \"69def0523afda696f8448f9c1143abc26533e68695a090df0d9e43d0c0eff43583e6f709d2043c815fbb3f96ba2b0dc3be6fecad5dd38148788e4a0385a9fe7a921fcb8ccee0e4d3aed4bc3d216d84b414f9580b02820c03d92e675e685c4b5851f363bb4df97b417c3fd90022eeafa20dfbe82964f2ff073d255758fbe567c76b2c35e2b09f8a8d7afa32c6f5ad01bc3ebf6e210606db038ecb6820ce1ea4dd529fc1adfbc2a138565ac6d0f4a4109bdd47b8aa6ef4b8bede454680d1dbdb75fe1eb2e548d5de7cb6d792fef3aa0d8480a6030b30f104d7e76b58e9f476ebf2cc832923b50c50c111c3515fc518852323426ca778a596d3195da8585d8c3aa92083313a6e6585b70c98b185b472798a61cde77e62ec272f14b0d9eb4f22f9c7c05817da6fdefe7879a584\",\n        \"signed\": \"1e375c94bd809ca0cdd02f89ecec4e437732dd20a0a84b254eae889d8070e682d113b0be22e41e6cdc3be877680e7eeb7f0995e6622dc0b434fb0949dd994b0c69def0523afda696f8448f9c1143abc26533e68695a090df0d9e43d0c0eff43583e6f709d2043c815fbb3f96ba2b0dc3be6fecad5dd38148788e4a0385a9fe7a921fcb8ccee0e4d3aed4bc3d216d84b414f9580b02820c03d92e675e685c4b5851f363bb4df97b417c3fd90022eeafa20dfbe82964f2ff073d255758fbe567c76b2c35e2b09f8a8d7afa32c6f5ad01bc3ebf6e210606db038ecb6820ce1ea4dd529fc1adfbc2a138565ac6d0f4a4109bdd47b8aa6ef4b8bede454680d1dbdb75fe1eb2e548d5de7cb6d792fef3aa0d8480a6030b30f104d7e76b58e9f476ebf2cc832923b50c50c111c3515fc518852323426ca778a596d3195da8585d8c3aa92083313a6e6585b70c98b185b472798a61cde77e62ec272f14b0d9eb4f22f9c7c05817da6fdefe7879a584\",\n        \"signature\": \"1e375c94bd809ca0cdd02f89ecec4e437732dd20a0a84b254eae889d8070e682d113b0be22e41e6cdc3be877680e7eeb7f0995e6622dc0b434fb0949dd994b0c\"\n    },\n    {\n        \"secret_key\": \"4d9044f17b5a0977dc5aa9916a924300a244a1ef7f060277ad4978351ea64291\",\n        \"public_key\": \"ab9c0692a606b2567c19c30f9faa3b4cfe72fb237077767b76d3b2ae1490a6d4\",\n        \"message\": \"7c8c7189af67327af1c6dd2c30e975f190e3b38d008b4585167e0d450740d46734587f6d208784245cc5cb062a2a277f17ebb2746f9bdf4a8237ca479ab0a430177e19ed7dd3622576b14cdc08282214fe5ee4d76b43c16ac90864c51be8aed45d7b980df7917f290fdf795846465f27fcb7e5730637944f0577c92f32375e995bc0cda9d7196f2c0c1ac8b80d12a0439963ebd2254c347703575816e7964c13d44d629280c312ea265344de38f3b18d9150f8f924afb44b6bfb9eda513d59e65e2ef18666e6c2a21c4018665befe92cae581d3cb14e23e97d830002cb90931ae0210068af394ebe351be5b817f3674bfbf40049030e4fe505d34a1d502a2c50d8e638e926c230676b7edefb6bec77b1c0ce609325287ba5fdd7a9976987bd07fc6a4344956ebf818f08586c\",\n        \"signed\": \"6fa48aea4d5b9af65af964cdb709443a11fa84f7d44acddab16e04a6fcefb27ae33c05b36da13c23de517d6e6ac574a03ea630ba4fbb958131129aa7f1354c017c8c7189af67327af1c6dd2c30e975f190e3b38d008b4585167e0d450740d46734587f6d208784245cc5cb062a2a277f17ebb2746f9bdf4a8237ca479ab0a430177e19ed7dd3622576b14cdc08282214fe5ee4d76b43c16ac90864c51be8aed45d7b980df7917f290fdf795846465f27fcb7e5730637944f0577c92f32375e995bc0cda9d7196f2c0c1ac8b80d12a0439963ebd2254c347703575816e7964c13d44d629280c312ea265344de38f3b18d9150f8f924afb44b6bfb9eda513d59e65e2ef18666e6c2a21c4018665befe92cae581d3cb14e23e97d830002cb90931ae0210068af394ebe351be5b817f3674bfbf40049030e4fe505d34a1d502a2c50d8e638e926c230676b7edefb6bec77b1c0ce609325287ba5fdd7a9976987bd07fc6a4344956ebf818f08586c\",\n        \"signature\": \"6fa48aea4d5b9af65af964cdb709443a11fa84f7d44acddab16e04a6fcefb27ae33c05b36da13c23de517d6e6ac574a03ea630ba4fbb958131129aa7f1354c01\"\n    },\n    {\n        \"secret_key\": \"75ad76bb4c0c229a5adc79e444b13f88a96459862c8cf0ba498d0c996af94a7a\",\n        \"public_key\": \"f074dd2b9c1c309105ec951bb5812a91ddb54023b3809ab379c56af0461af617\",\n        \"message\": \"0ca8c1c74128d74e9d0a7bf8964291d074917f2f9920efb911520567642a50a615abcbd00aed4abbfef1a983cce333e1d0df3e6404fb9043c6803914cd5fffbc66a0790c7878a24089a571f895662a1d18be3f01ff97fb3323334b6f5baf96551448e4090d033c464294d09133b151d5b5c6321b50e2241de0ef6f882889ccf4ad3540d5a1e3f7548fb13be71c16516606e79d0449c2a08e5dc23148843c84e97ed24069161c8e75208f33e95b3e10d1d49a2faef9d986ab62809f62ad39c7cc871f375a4f5a6faf104d7e11b890cfb0589902685216ec07cb8e8e9e7a7c43635e23212b69ca3b7ed54f0b97949e3d9a6662f8e4b3ab09cd495294c331c047d86ee785ff658bcd7fcf9c480605ce05e810068d60fc9b26b5f063eb9000d2657a5094284ac80f1375d0b66d6f5f\",\n        \"signed\": \"0c4643a8be6dc22f4beb6bcc70c6172ec7608378653cb4e99f3ae795eadf4e982a297609ca7938f5df632b095628cb75062d3d51fc0f3323bfa7b22ec4d472050ca8c1c74128d74e9d0a7bf8964291d074917f2f9920efb911520567642a50a615abcbd00aed4abbfef1a983cce333e1d0df3e6404fb9043c6803914cd5fffbc66a0790c7878a24089a571f895662a1d18be3f01ff97fb3323334b6f5baf96551448e4090d033c464294d09133b151d5b5c6321b50e2241de0ef6f882889ccf4ad3540d5a1e3f7548fb13be71c16516606e79d0449c2a08e5dc23148843c84e97ed24069161c8e75208f33e95b3e10d1d49a2faef9d986ab62809f62ad39c7cc871f375a4f5a6faf104d7e11b890cfb0589902685216ec07cb8e8e9e7a7c43635e23212b69ca3b7ed54f0b97949e3d9a6662f8e4b3ab09cd495294c331c047d86ee785ff658bcd7fcf9c480605ce05e810068d60fc9b26b5f063eb9000d2657a5094284ac80f1375d0b66d6f5f\",\n        \"signature\": \"0c4643a8be6dc22f4beb6bcc70c6172ec7608378653cb4e99f3ae795eadf4e982a297609ca7938f5df632b095628cb75062d3d51fc0f3323bfa7b22ec4d47205\"\n    },\n    {\n        \"secret_key\": \"adc6e9b2e103b62c24ad4346410e83a1a0bd253e4abf77911850c6d9666e09f9\",\n        \"public_key\": \"fce316e33c910821beeddd634bedc58ee57999a76ece384605283b99b543b78b\",\n        \"message\": \"8cccd98ebbf2439ffdfac41687638faa444e1ca4b63d13e898eaa8355492f28813ab813fd01510e112be106b2045d30f63335d248904d521de181abac03e3d2cb2d16c44b3b012a0c51f9901aef9056c724d7a2c6b2acb0a07555940e4c6e21154890611adeb6489f461d3e5ecd1af5a4d2b0adaf41747436eb414757a8fe4775674e3c6e5de4569d6fc6c788e10905eba32c270a393e6f721a765294e2ac99a9b6e534d3df08d1db97d602ac3195cb0b77f5bd4acaf737fadd6991f0688abc74918047574eac28289739a664e0e0e20574a2c25fde49d14539db1cedd4a9204a70acff0a62c8f25cd768ffab15c4db316840a4d1bc92e212670be07c5bdcf537590607dfbbbb4d9f98b89da0b4df7d88f3eca4814d16bfa20c8d2fa94f9f259f2ee2d3a83c9e4171b1a262c4b99\",\n        \"signed\": \"cb017d6d2682c9854366259aa35f30d491cfaa930998c297dbddc6aded5b3d401cf76d80d8a2764de131718b6e0c481d7196bc72579716b0c0f6ff053e68c50c8cccd98ebbf2439ffdfac41687638faa444e1ca4b63d13e898eaa8355492f28813ab813fd01510e112be106b2045d30f63335d248904d521de181abac03e3d2cb2d16c44b3b012a0c51f9901aef9056c724d7a2c6b2acb0a07555940e4c6e21154890611adeb6489f461d3e5ecd1af5a4d2b0adaf41747436eb414757a8fe4775674e3c6e5de4569d6fc6c788e10905eba32c270a393e6f721a765294e2ac99a9b6e534d3df08d1db97d602ac3195cb0b77f5bd4acaf737fadd6991f0688abc74918047574eac28289739a664e0e0e20574a2c25fde49d14539db1cedd4a9204a70acff0a62c8f25cd768ffab15c4db316840a4d1bc92e212670be07c5bdcf537590607dfbbbb4d9f98b89da0b4df7d88f3eca4814d16bfa20c8d2fa94f9f259f2ee2d3a83c9e4171b1a262c4b99\",\n        \"signature\": \"cb017d6d2682c9854366259aa35f30d491cfaa930998c297dbddc6aded5b3d401cf76d80d8a2764de131718b6e0c481d7196bc72579716b0c0f6ff053e68c50c\"\n    },\n    {\n        \"secret_key\": \"37fc1beda4060b6c57883ddba0776c2bcf5ac28a651326021cca97723730fbb0\",\n        \"public_key\": \"7bd7bf1c99dc82e06f08bb454d8fb288a57927e07ff1b12af15ee2c12fbb6b3d\",\n        \"message\": \"3dfcac0265a024a83cb932674489a163aac314bf3d969f27596e451733b99deba5eeb779210baf95bf545a1ae6b8a915860693ee890f939320e06a844483d18c6a1bcd03c638bb7d1fe2a82eb448a311b1302ea6428f54a39f45a4d560be1557a2b254c45c137f45cc68356836e21bed0b7f73a518ce09db0be393927c339bf2a4b5987539404ce650284de12e3b553b262efe23848332ccfdc35e791a0ab43f139c71ed0fcb2d173bb377ee46b1a9dca9277e77df855f2830251e31e26acd86763c8d7eac22c882fc174f2b5e75ca6ad1ade03f942bb2a13bf541906159158c68363c7480c5b27a99320f8283a2699d4369c071c50dbd90b7792e4772efbc0b195bce84cc4dcfff7072a48968db69f9feddd0f9ced659eb5db7167f35f988cec114887dcbfdf27d02d300b3e1abec\",\n        \"signed\": \"a01dd65fada27039f168b123419d8abfbda48c572ece24fda06e1a5ec31e084f4ee1cbf9961e88ed51e189fcb7f5f235de1e5b28d08f2bfca190b0f019ecc2073dfcac0265a024a83cb932674489a163aac314bf3d969f27596e451733b99deba5eeb779210baf95bf545a1ae6b8a915860693ee890f939320e06a844483d18c6a1bcd03c638bb7d1fe2a82eb448a311b1302ea6428f54a39f45a4d560be1557a2b254c45c137f45cc68356836e21bed0b7f73a518ce09db0be393927c339bf2a4b5987539404ce650284de12e3b553b262efe23848332ccfdc35e791a0ab43f139c71ed0fcb2d173bb377ee46b1a9dca9277e77df855f2830251e31e26acd86763c8d7eac22c882fc174f2b5e75ca6ad1ade03f942bb2a13bf541906159158c68363c7480c5b27a99320f8283a2699d4369c071c50dbd90b7792e4772efbc0b195bce84cc4dcfff7072a48968db69f9feddd0f9ced659eb5db7167f35f988cec114887dcbfdf27d02d300b3e1abec\",\n        \"signature\": \"a01dd65fada27039f168b123419d8abfbda48c572ece24fda06e1a5ec31e084f4ee1cbf9961e88ed51e189fcb7f5f235de1e5b28d08f2bfca190b0f019ecc207\"\n    },\n    {\n        \"secret_key\": \"8d42f4ddd2bbd2b827b0a0d31d8f758ebd13a1b9b3712228948ca610bb8858e5\",\n        \"public_key\": \"b7354898794f9db0a8af6eeafcdbdf011d3fbef0212ad938a4a4ad27ab16ebbf\",\n        \"message\": \"e3a2bebc0496d8974a8f4061880369314ed9e440c1b77e26fe5071ce694ffd2136db0c4d5e880e6000083a75c90d3cf72b9cf5a2b1a9002c2701a2ff59b0699a8f42d79dd8a5fb71a8125453d91fb80080a3f0a16584282f17ec7dfdc2e5c69c4d9bdf484d55944dae273f211cfb76ad37da45871365439af35eea1fbecd4ca679b59b5e01bacf49c7f4e5efaa406ba1daeb085482af5ded89dc6885ffbe3d14d2931b83897e28ad06e5564e2789baea81bd932aa279fe8e324b9a8ef111c2abe2f137d4bb50d8ab76cebc0bd982a23919751ad4d49e88eb14173d3310289a872317e4a451e88d54320891870f15b2d53324430877a9fb5b49bb929f211c5b89764dd9c3a595a1451e9f85a238540002566e53a99ed1e6ddc9b4853f455edb4cf1980d56bbdc1313a36e76ea9cbb048a\",\n        \"signed\": \"70764be39c6dca0f067abe1eca490fda951fd4e9499695266e270b9b05eae706ca8d1ca6a92d7c488ec6ad8ba11457a42a5e31702a9c2bce892dc40535c09f01e3a2bebc0496d8974a8f4061880369314ed9e440c1b77e26fe5071ce694ffd2136db0c4d5e880e6000083a75c90d3cf72b9cf5a2b1a9002c2701a2ff59b0699a8f42d79dd8a5fb71a8125453d91fb80080a3f0a16584282f17ec7dfdc2e5c69c4d9bdf484d55944dae273f211cfb76ad37da45871365439af35eea1fbecd4ca679b59b5e01bacf49c7f4e5efaa406ba1daeb085482af5ded89dc6885ffbe3d14d2931b83897e28ad06e5564e2789baea81bd932aa279fe8e324b9a8ef111c2abe2f137d4bb50d8ab76cebc0bd982a23919751ad4d49e88eb14173d3310289a872317e4a451e88d54320891870f15b2d53324430877a9fb5b49bb929f211c5b89764dd9c3a595a1451e9f85a238540002566e53a99ed1e6ddc9b4853f455edb4cf1980d56bbdc1313a36e76ea9cbb048a\",\n        \"signature\": \"70764be39c6dca0f067abe1eca490fda951fd4e9499695266e270b9b05eae706ca8d1ca6a92d7c488ec6ad8ba11457a42a5e31702a9c2bce892dc40535c09f01\"\n    },\n    {\n        \"secret_key\": \"b62de5a1acfe4ca2d1f0c132afcbdae66fb29a02f297fbc2407fadbbf2454200\",\n        \"public_key\": \"b63b2d0bf355f7b6d0bac07403411c40afbbb2f707503b3fc2cee8a1c7d0a838\",\n        \"message\": \"e659e51d7b193c4b8e2b3ed73a9d7557ed2bab6153883ab723592f730a914567142b3fa435db3219f83a542dc7a4bd805af666ea865b853146f8e3a9fe870711f90d12b0693492af2a1edf99a16458f781f1266ec437a5296a822ca9d69ce844b5c59097a2a56f3eb8fd273a636116db774300922d45b744657a692f5e8bfbcb06d2422818aeb51e7cda68acfbeda16e7c79580dcccde24e8e3d601b16e063b43a6d0d1407552f7504f5be19882e4ffe32344f5f473e73a8f6ed37b0d8d9e5e0a0dc9828395bcbd8f3a4e3124869249d058be0e045de0b1e12b1c83ba0aa227c95b82bf742c3eac0152b33e6d19be8b33a35bf705daab10622a90aed022ea6e439ed50a9308437929924ba3ab111ad0caa6feb0a6eb165824ebdb0866571efc07e5222ed8686b14d9270bf76b945d52014\",\n        \"signed\": \"5cdb00e98de73eab480be42f8a8a6163809a0d37101b6a5a4eed6a0c92030d09a5562c729080ce6f6594c8fafb1f594772db7a90a9e7da15896e82f70569390de659e51d7b193c4b8e2b3ed73a9d7557ed2bab6153883ab723592f730a914567142b3fa435db3219f83a542dc7a4bd805af666ea865b853146f8e3a9fe870711f90d12b0693492af2a1edf99a16458f781f1266ec437a5296a822ca9d69ce844b5c59097a2a56f3eb8fd273a636116db774300922d45b744657a692f5e8bfbcb06d2422818aeb51e7cda68acfbeda16e7c79580dcccde24e8e3d601b16e063b43a6d0d1407552f7504f5be19882e4ffe32344f5f473e73a8f6ed37b0d8d9e5e0a0dc9828395bcbd8f3a4e3124869249d058be0e045de0b1e12b1c83ba0aa227c95b82bf742c3eac0152b33e6d19be8b33a35bf705daab10622a90aed022ea6e439ed50a9308437929924ba3ab111ad0caa6feb0a6eb165824ebdb0866571efc07e5222ed8686b14d9270bf76b945d52014\",\n        \"signature\": \"5cdb00e98de73eab480be42f8a8a6163809a0d37101b6a5a4eed6a0c92030d09a5562c729080ce6f6594c8fafb1f594772db7a90a9e7da15896e82f70569390d\"\n    },\n    {\n        \"secret_key\": \"9732059d7bf0200f5f30412430336be4ef1e3cae62938ad08729ce3ba714cfd4\",\n        \"public_key\": \"0de8425f5e30b2b8aebb8072009a30cf0411c3c8238f4e4208760c56c33e434f\",\n        \"message\": \"1a13e7ab603b48eb896fe17173fb31950b0dcd5a35ffdbe1371c7a5bfba593317589d9652d88797729180b8d0e515abfe6548f160421e537d5c94aef2b34c7ebb097420003bc0f361b423e7e14630a803c118202540049f68c9cf46fae0368d162e400d77bb4523cf6c753b975c245bc99ed2f413a9d06c2da6ce0cc0987b6406b809e8eb319033d2de9131dee3b1b7b5c95d653ced8fccf998da1768511eca4d3c5f735adab96503b3551803e4922635095ef811be4c08a6cbac917cbe6cd91a4ae5a330ccec0e8e815371217a3de62f2d2d61466219833f33447132f4d43350c58cbaf422475edb128c56d80a495726b1fdbc56551eb72d0f4fec26ba8bff5eed6774b85039a5292834b5d1cc1b09ba0a3954d29323673f5e71276a12ac4c579355bf1ecca48e6a716b9fcecdc565c51b9\",\n        \"signed\": \"fba1749b641dd4df34664bc43c00468c7d75e84afad72de473fd1e9c87da15ea604fc2549a1a867fa80850e9c2a59cd99053886760a8d9764b84dd672676720d1a13e7ab603b48eb896fe17173fb31950b0dcd5a35ffdbe1371c7a5bfba593317589d9652d88797729180b8d0e515abfe6548f160421e537d5c94aef2b34c7ebb097420003bc0f361b423e7e14630a803c118202540049f68c9cf46fae0368d162e400d77bb4523cf6c753b975c245bc99ed2f413a9d06c2da6ce0cc0987b6406b809e8eb319033d2de9131dee3b1b7b5c95d653ced8fccf998da1768511eca4d3c5f735adab96503b3551803e4922635095ef811be4c08a6cbac917cbe6cd91a4ae5a330ccec0e8e815371217a3de62f2d2d61466219833f33447132f4d43350c58cbaf422475edb128c56d80a495726b1fdbc56551eb72d0f4fec26ba8bff5eed6774b85039a5292834b5d1cc1b09ba0a3954d29323673f5e71276a12ac4c579355bf1ecca48e6a716b9fcecdc565c51b9\",\n        \"signature\": \"fba1749b641dd4df34664bc43c00468c7d75e84afad72de473fd1e9c87da15ea604fc2549a1a867fa80850e9c2a59cd99053886760a8d9764b84dd672676720d\"\n    },\n    {\n        \"secret_key\": \"9c7f6f379e3857007e2ac6324cbbced57ac9eee4477813f83a81fc8cefa964d5\",\n        \"public_key\": \"a54ba396d687634d3eccf41c5782494f5f10a521a1e5d388523d80eeba5b0b2b\",\n        \"message\": \"3f2d3072fe7383e541551ea9abdbaeae6a464ae6b9f0ba786a441b2d08da5bcada3c5424dc6931d6b39523e2de0a0c2e4e6b5b8cda925e5eac938416a2c51bf13d49531d7ec7114b1c82feaf90f3f87591e397d02702f8ec1b30d99f5be7d2203e4fe4db2ea47e7b4589d8ac506248d7347466edbc96ea32bf3a6ea7502dd60c9e84902715ab2c6ca68f5b00e1d909d83aa6ab662d8aea870ecd861fec69f2eec0ae677d2995b0ed688faa8ef78244e0d1195697b07122ceaa11f5a6ea58fbdfa2e2ec2df9d18693ae96d47127556e91f0864982c13419b04a63f208e730d26951882aefe001bca3408bd9862748c6cc876c28cac3bb2eb3395818c2091e0fbd7a0b4468c6b0d00cd008c11c3c3ad01080a1f5a40ae2e4b0c3a071efc8e1d1ba6ace6d4df0ff19829b0c680b3aeb759177ed34\",\n        \"signed\": \"65685f9ca5982e15a22ba3c83a0348348482dfae57cea178f0780c057baebe4af632f984540a26019a7fb34253c9ece7ff308ada233ce0686347ab5b21ce570b3f2d3072fe7383e541551ea9abdbaeae6a464ae6b9f0ba786a441b2d08da5bcada3c5424dc6931d6b39523e2de0a0c2e4e6b5b8cda925e5eac938416a2c51bf13d49531d7ec7114b1c82feaf90f3f87591e397d02702f8ec1b30d99f5be7d2203e4fe4db2ea47e7b4589d8ac506248d7347466edbc96ea32bf3a6ea7502dd60c9e84902715ab2c6ca68f5b00e1d909d83aa6ab662d8aea870ecd861fec69f2eec0ae677d2995b0ed688faa8ef78244e0d1195697b07122ceaa11f5a6ea58fbdfa2e2ec2df9d18693ae96d47127556e91f0864982c13419b04a63f208e730d26951882aefe001bca3408bd9862748c6cc876c28cac3bb2eb3395818c2091e0fbd7a0b4468c6b0d00cd008c11c3c3ad01080a1f5a40ae2e4b0c3a071efc8e1d1ba6ace6d4df0ff19829b0c680b3aeb759177ed34\",\n        \"signature\": \"65685f9ca5982e15a22ba3c83a0348348482dfae57cea178f0780c057baebe4af632f984540a26019a7fb34253c9ece7ff308ada233ce0686347ab5b21ce570b\"\n    },\n    {\n        \"secret_key\": \"a478f35abb73727b6be6ee5e56eec323c9517882fd6919360ebbbf5d5cb8b83a\",\n        \"public_key\": \"7a6e266a54d135dda0009ccda8a94a4712ae5cb14761e8436e97c4b7814d8e8c\",\n        \"message\": \"0173a34050b43748061ff8f5a3d7c43b6360847786e8bb75e536fb47b645b214f221ba24d83d28bc025024663e534f90f6e83a93d8bddeda2cd8808155652a908c437c2db6f3ed4912f57ca5b97928a73be964af59df4439854bb006fc295a87b7b72239c7fadfec40715509d98579daadfb8d524b4cec6620705efd4104c297144aea722974e12c5ecee5391ef2d93ac2b124e4ac496147c8b70363585d7078ccc53e2ae593350bc25548a0542526ab00afe477a0f4b27397c72bc74a8a8ab156e62b8bb47c3fbb4b34913e459687476bf33142c614702107ffe2cc01e25fa30275e1e2e63cea9168e4a47c02de097d4d853b27675c5bb330b94a974ead85e2bdee8ee17cbb5653346658df2f91f6bd739491dd71988b3a976a3e2e7a9d137410f4acba9feb5f11798c9a43b6adce14365a7c6d\",\n        \"signed\": \"9d16fd40b9f8dd9b4a1a8c6d703b9fccbb940b1e0ae77a5970374af0cf726f4479fd30d7dff5cf53494d9a296ab6b9e46ea6c136b4db2c71c21b97c1c8254d0a0173a34050b43748061ff8f5a3d7c43b6360847786e8bb75e536fb47b645b214f221ba24d83d28bc025024663e534f90f6e83a93d8bddeda2cd8808155652a908c437c2db6f3ed4912f57ca5b97928a73be964af59df4439854bb006fc295a87b7b72239c7fadfec40715509d98579daadfb8d524b4cec6620705efd4104c297144aea722974e12c5ecee5391ef2d93ac2b124e4ac496147c8b70363585d7078ccc53e2ae593350bc25548a0542526ab00afe477a0f4b27397c72bc74a8a8ab156e62b8bb47c3fbb4b34913e459687476bf33142c614702107ffe2cc01e25fa30275e1e2e63cea9168e4a47c02de097d4d853b27675c5bb330b94a974ead85e2bdee8ee17cbb5653346658df2f91f6bd739491dd71988b3a976a3e2e7a9d137410f4acba9feb5f11798c9a43b6adce14365a7c6d\",\n        \"signature\": \"9d16fd40b9f8dd9b4a1a8c6d703b9fccbb940b1e0ae77a5970374af0cf726f4479fd30d7dff5cf53494d9a296ab6b9e46ea6c136b4db2c71c21b97c1c8254d0a\"\n    },\n    {\n        \"secret_key\": \"ffe825148c0959b3a68de86ad8e8af7fa5e078f363dc124213c90020da0c9089\",\n        \"public_key\": \"139152a0bd22962dd919ae3e0b1620e03c033c2ad0a3979ec6bcd1705e23d598\",\n        \"message\": \"f125780d0cd088530f0c87b70bd42ebab56adb5ad4345f929ae5deae07fb55322153a8f023d38843bf5d6a93fe993eee71bc2ee563b25a50918f03efdb5dbf7269add69ded3e66953895620d9b6cf46ba2348f8d66d7f092235e378c1e3edfebeb78084bc8dea013f9933aae14a041948276d01f1cb5834b0e590e13d931d19292bb1d8041ff2fe2e1171a2e0b9a059821d0924dde7f3b1bb59813f5e3c63520aafb8801ba62c7097d4d8cf437a568a7f0087c6ea0fce6e568c4883f1cd12c749d06a6feb278f1086a8b04769921f78a9959062ab06f98ee80c2c7854ffa760f86a89ee1a51266053d195e61bb1dbd18dd89ff394e408ace0f641a395d56118ea72b7d8adf78b1655ecece7e8250e8a3a91cb8fca0d9ce0baf8980a387c5ed4318663280e5b4531f3187c47eaea7c329728ddd0e40\",\n        \"signed\": \"fe4e89ee31786c0a3d3de3649bb93f0b8aef1caf5a832ec5e4067810705adddf539b8f4e05ad08cf3479e45b42c96528f6d59a4625703ddbf15b63093965d80df125780d0cd088530f0c87b70bd42ebab56adb5ad4345f929ae5deae07fb55322153a8f023d38843bf5d6a93fe993eee71bc2ee563b25a50918f03efdb5dbf7269add69ded3e66953895620d9b6cf46ba2348f8d66d7f092235e378c1e3edfebeb78084bc8dea013f9933aae14a041948276d01f1cb5834b0e590e13d931d19292bb1d8041ff2fe2e1171a2e0b9a059821d0924dde7f3b1bb59813f5e3c63520aafb8801ba62c7097d4d8cf437a568a7f0087c6ea0fce6e568c4883f1cd12c749d06a6feb278f1086a8b04769921f78a9959062ab06f98ee80c2c7854ffa760f86a89ee1a51266053d195e61bb1dbd18dd89ff394e408ace0f641a395d56118ea72b7d8adf78b1655ecece7e8250e8a3a91cb8fca0d9ce0baf8980a387c5ed4318663280e5b4531f3187c47eaea7c329728ddd0e40\",\n        \"signature\": \"fe4e89ee31786c0a3d3de3649bb93f0b8aef1caf5a832ec5e4067810705adddf539b8f4e05ad08cf3479e45b42c96528f6d59a4625703ddbf15b63093965d80d\"\n    },\n    {\n        \"secret_key\": \"49aff421a7cd12722aa84c48c1fb1c5f8d9e277d0a99ecbc9348c3aaa74be422\",\n        \"public_key\": \"88d2c26266f493bc67578ca0b1f51160cf0fdb6a09a906db9faa686f11f8208d\",\n        \"message\": \"70a1ac144b75fda75586a79c36fd39cce5f5cae2e6375852d3b62a9630336a293ea6d2ac6e5b57da21ef364a595bb0750f5bf4d2b320676423870e4b8e0869601f16680619048c4ede276da69f205a70176e25ea04bd089763e709ba343fc8831e52044eabf9441e6997f8ba1aeb9ef0f491170667a7f5fc9627cbd0551b76be27283a4b0c5f667846688226a115ee8020df08042b19b59fe551316a6cb6916860b9ecd74154b4051038a17352372ec14d3c957d2ef50ff786189a8aeb9c08f45eeb5eb8b040339974aa9798c425d7becb228c447a6d0b3cef271893e0f7076e223a7e87c6a3d270a033bc97a4565edce0aa91ffc3f7801775a6f29b230245bd71fa034353de372395d1bfcbdebba081330f7c076be99c2cf4867f15b78d52f46fc7391c9cb95e5d64643baffe72a8e3a650667fbb3e\",\n        \"signed\": \"749181284df05dbe5974b91782a1a76ea08642cb0f0c98db586c575c210cdc8b651bd34b757ae38e4b6be9465235bd0eca430e26c3eede561c6e824dfa200e0a70a1ac144b75fda75586a79c36fd39cce5f5cae2e6375852d3b62a9630336a293ea6d2ac6e5b57da21ef364a595bb0750f5bf4d2b320676423870e4b8e0869601f16680619048c4ede276da69f205a70176e25ea04bd089763e709ba343fc8831e52044eabf9441e6997f8ba1aeb9ef0f491170667a7f5fc9627cbd0551b76be27283a4b0c5f667846688226a115ee8020df08042b19b59fe551316a6cb6916860b9ecd74154b4051038a17352372ec14d3c957d2ef50ff786189a8aeb9c08f45eeb5eb8b040339974aa9798c425d7becb228c447a6d0b3cef271893e0f7076e223a7e87c6a3d270a033bc97a4565edce0aa91ffc3f7801775a6f29b230245bd71fa034353de372395d1bfcbdebba081330f7c076be99c2cf4867f15b78d52f46fc7391c9cb95e5d64643baffe72a8e3a650667fbb3e\",\n        \"signature\": \"749181284df05dbe5974b91782a1a76ea08642cb0f0c98db586c575c210cdc8b651bd34b757ae38e4b6be9465235bd0eca430e26c3eede561c6e824dfa200e0a\"\n    },\n    {\n        \"secret_key\": \"703a6e2b62d0090c61d8659b6a963e03c9d62c1b38f7d70e5f9ff05590cd0360\",\n        \"public_key\": \"370c21de6ef2fab534ada999869c90bc9b92ccbf249b79d39d95441d1ede210a\",\n        \"message\": \"d42a1756e84df4b4e9773f86f7674a2cd78e71e40aa8f644e6702dfbc2c2c5ca90fc242e9cb0099cc8f2c2d3136baafc0ff695482fdacdef9f565610b6e1900722f435c6385b35e9f6c436ca037e03f64e2233dffa58db3b91cc1daa0bb0c54c8a43e469d2cff7fa2bf8f5d1d877931089c82ed89aba42f2ee2b86e445cfd09f4cd78b35191bf467e784eef75dc987e046d37d4d4e8e9bbe14af80d03a1f40898384b9d3279fac9c57fd9c7eecbe19a5acc15033b84e07fd0e409bdbd5a57f65641183a6c0a8ec426d1f1d223166ff0a1900b2e92b7d85835d019d17775e5093ccd126f90f63cb7d15cbeb531324219cd64ded6714b21a65371af07210dfdf0e4e58ddc7d59f4cfa65c421d814ee2c9bf6dbf64873d579b09ee5dcedd733063e039ac9a5f9ca4c2525a4cc8e984da7185e2d64fad81c8a\",\n        \"signed\": \"e5fd64da028800c6ceed068a5e596f1621c70a8cb138b31b32647eb4b07bd2ecc5942c18844f367033f67398e314ba2c7ccf299c069787777025d845f2aad60ed42a1756e84df4b4e9773f86f7674a2cd78e71e40aa8f644e6702dfbc2c2c5ca90fc242e9cb0099cc8f2c2d3136baafc0ff695482fdacdef9f565610b6e1900722f435c6385b35e9f6c436ca037e03f64e2233dffa58db3b91cc1daa0bb0c54c8a43e469d2cff7fa2bf8f5d1d877931089c82ed89aba42f2ee2b86e445cfd09f4cd78b35191bf467e784eef75dc987e046d37d4d4e8e9bbe14af80d03a1f40898384b9d3279fac9c57fd9c7eecbe19a5acc15033b84e07fd0e409bdbd5a57f65641183a6c0a8ec426d1f1d223166ff0a1900b2e92b7d85835d019d17775e5093ccd126f90f63cb7d15cbeb531324219cd64ded6714b21a65371af07210dfdf0e4e58ddc7d59f4cfa65c421d814ee2c9bf6dbf64873d579b09ee5dcedd733063e039ac9a5f9ca4c2525a4cc8e984da7185e2d64fad81c8a\",\n        \"signature\": \"e5fd64da028800c6ceed068a5e596f1621c70a8cb138b31b32647eb4b07bd2ecc5942c18844f367033f67398e314ba2c7ccf299c069787777025d845f2aad60e\"\n    },\n    {\n        \"secret_key\": \"76849c188e3edd0ff5f8fb874dc0456645518445e41a7d6833e616c3c48c9868\",\n        \"public_key\": \"d670e2ea07db60c22ab79a93ebf49d22a6245ee3af07b3be584eda694c37729e\",\n        \"message\": \"1eccb0bc8eca3ab5bee68c5f8caa34536766c705f50827db7ac375d4fe30b58ffb7e2fe490cc71a8ff86c006d6174d05793ab8a55dd51b06de417bc0ac452cdc7cfb0bb00362b6765d20db23eb1848027064a1d9091d3b10ed776f28b76768bdfc08f0bc511f76faeba76cfc4cb5c83dc9ebe8a8d79edca923eccd524009cafedc90e3ad87d1392e1fccf4e60ccab95dc0ab54bf44245a007a96d46634b1b2965b829c3d7daa765972b54a7b365b6f34d77d7176acd8d894f6b417091b6c00edb7a4e81379988bfcecb692e9c3c4310a7e240e5c1063cde113f22a684a50a112ff47d3898812efb92637072b86163ad89316d221195acbfad0a03a1fbc2d967fe83f84c8459fccd490b9c5b3e55d27e9484e943c417f2128d73701da28f49fd3683f33a39cdee234bd305b9491e2f3eb621be3dd1dbbb31b\",\n        \"signed\": \"7141399d51daa6eb4519bf3f01b233920fa908fefa612f0cd7d5af8a9a3c44190e3f6384a8d14d37c97030ef5018cf8aee8aeb1569a73d84862a59b7df72fe091eccb0bc8eca3ab5bee68c5f8caa34536766c705f50827db7ac375d4fe30b58ffb7e2fe490cc71a8ff86c006d6174d05793ab8a55dd51b06de417bc0ac452cdc7cfb0bb00362b6765d20db23eb1848027064a1d9091d3b10ed776f28b76768bdfc08f0bc511f76faeba76cfc4cb5c83dc9ebe8a8d79edca923eccd524009cafedc90e3ad87d1392e1fccf4e60ccab95dc0ab54bf44245a007a96d46634b1b2965b829c3d7daa765972b54a7b365b6f34d77d7176acd8d894f6b417091b6c00edb7a4e81379988bfcecb692e9c3c4310a7e240e5c1063cde113f22a684a50a112ff47d3898812efb92637072b86163ad89316d221195acbfad0a03a1fbc2d967fe83f84c8459fccd490b9c5b3e55d27e9484e943c417f2128d73701da28f49fd3683f33a39cdee234bd305b9491e2f3eb621be3dd1dbbb31b\",\n        \"signature\": \"7141399d51daa6eb4519bf3f01b233920fa908fefa612f0cd7d5af8a9a3c44190e3f6384a8d14d37c97030ef5018cf8aee8aeb1569a73d84862a59b7df72fe09\"\n    },\n    {\n        \"secret_key\": \"83ae48ad70da0bb3cdf87481ee2c0c8571c2ca986712f8bc2329e9a3e33383c5\",\n        \"public_key\": \"b785309000df95f5a04f7d89c4113301057adaeeb29bcd28d99371b537bba2f6\",\n        \"message\": \"b7521d3f71c679fa7037fe7488a641f6b97c49454acc8e36b903d8f9ebb54d89cb56efd19e04ba6a7c8f48a7d3ec9decd3f1cd0faf6e978118e6adce9c6c6be63c6a6a1ae21651828479a46bc9a0f7943040f940a0d470c8e577c5d575cb53c1bf3ab1feb050dcb6fef0ba4447f299fdb9f27ecb0714ecfefd74bad7b122a462c24a209848a03389074578c5bdc36396d809b0f14018da64917e6bf87ef405c8f3e333ff9c3baf6339667620794bb4743f0514b5de7d7fdd947a7e3501ee88efad159e33a1072fbb99c7c71e9d13a502d5a07c4f817eeb7f0c5319aa41a96d5ff4f15a73c29b571fe211090e172c8db518624612a5c371a9d7cef6de35ebef96e88e1a78af3bd5dd35251ab54d73718f3e70d2d59021531dc73184f0fc69c2e92965844ec27c1c02af5e9a3469de355db2256e0ec2a4eba30a\",\n        \"signed\": \"43332351d3fb7b45fcf37c607d442ea80dbda2cb69c2884f424e65ea3a331ed8472d4368405cb736b2d6685ad782e239fe833ed789a2923185166f608342ee05b7521d3f71c679fa7037fe7488a641f6b97c49454acc8e36b903d8f9ebb54d89cb56efd19e04ba6a7c8f48a7d3ec9decd3f1cd0faf6e978118e6adce9c6c6be63c6a6a1ae21651828479a46bc9a0f7943040f940a0d470c8e577c5d575cb53c1bf3ab1feb050dcb6fef0ba4447f299fdb9f27ecb0714ecfefd74bad7b122a462c24a209848a03389074578c5bdc36396d809b0f14018da64917e6bf87ef405c8f3e333ff9c3baf6339667620794bb4743f0514b5de7d7fdd947a7e3501ee88efad159e33a1072fbb99c7c71e9d13a502d5a07c4f817eeb7f0c5319aa41a96d5ff4f15a73c29b571fe211090e172c8db518624612a5c371a9d7cef6de35ebef96e88e1a78af3bd5dd35251ab54d73718f3e70d2d59021531dc73184f0fc69c2e92965844ec27c1c02af5e9a3469de355db2256e0ec2a4eba30a\",\n        \"signature\": \"43332351d3fb7b45fcf37c607d442ea80dbda2cb69c2884f424e65ea3a331ed8472d4368405cb736b2d6685ad782e239fe833ed789a2923185166f608342ee05\"\n    },\n    {\n        \"secret_key\": \"39e56a65623a0aebade0da12ce1df378bc924073f73a549effaebc465d1a78e2\",\n        \"public_key\": \"83da8ad50bad09eb3e94c725df3cc3a119736adc859ca1a10503f48ff2fec596\",\n        \"message\": \"a96dc2ea3fa1351492a4619d9194681f8ec400a97158244482653838ccb7e156a82d564368f83a6ee1be46bc34b817200e8464c3d12b5ef2c50b19565b881c4c3d4563fb947eb47c3ee9c1ee7853269874455bfacba305f307d1ac5309eeae5c07fa5c4d428edbc8b9528c4415243a9ef580aff8fcfb12000a71fceee89de97f90279529bcc822ed3cb34c82ba5fec15f4945663636d67b5feceacc31d25f98aea07f7800d5a1034251cb91dd0963ec2c1a54773a4d96c18357f8d101de58e932f8c6cdde8e3cfcef5a7443fdba7b78320403c0196844724a612183e34bdd808ce7b958861ca37115730eaede1fd0baabe976efefd0365fdf926776c536f47ff80de5c18291bb7e9f1b913ffd1d94468b789752fae6ca897c0cca53ef1e731d00c8bdbe8929ea6b1dce1f31a20688d37b0f3a2b4153b306bdba1\",\n        \"signed\": \"398e8260011f57d8ac8c58d5457bc652c7414aaf6fb2f426b7899056605c0afc28392423b2b571f5e6c3c7f6d60245e53ebd03bdc5ad3c1ad8738cb32214d00fa96dc2ea3fa1351492a4619d9194681f8ec400a97158244482653838ccb7e156a82d564368f83a6ee1be46bc34b817200e8464c3d12b5ef2c50b19565b881c4c3d4563fb947eb47c3ee9c1ee7853269874455bfacba305f307d1ac5309eeae5c07fa5c4d428edbc8b9528c4415243a9ef580aff8fcfb12000a71fceee89de97f90279529bcc822ed3cb34c82ba5fec15f4945663636d67b5feceacc31d25f98aea07f7800d5a1034251cb91dd0963ec2c1a54773a4d96c18357f8d101de58e932f8c6cdde8e3cfcef5a7443fdba7b78320403c0196844724a612183e34bdd808ce7b958861ca37115730eaede1fd0baabe976efefd0365fdf926776c536f47ff80de5c18291bb7e9f1b913ffd1d94468b789752fae6ca897c0cca53ef1e731d00c8bdbe8929ea6b1dce1f31a20688d37b0f3a2b4153b306bdba1\",\n        \"signature\": \"398e8260011f57d8ac8c58d5457bc652c7414aaf6fb2f426b7899056605c0afc28392423b2b571f5e6c3c7f6d60245e53ebd03bdc5ad3c1ad8738cb32214d00f\"\n    },\n    {\n        \"secret_key\": \"4b9921852f409a323ae38175e8d76a211fc4d9c654178eea3baa7a767a6fda06\",\n        \"public_key\": \"4c723e436b6bd97f44af52503b21cc50d5f6ad6cfc8288345dde8054e995582e\",\n        \"message\": \"3f33d8fb83e68741090a37bedd745cf141aaaed8c92ffa742a52561777885805ace14246ab98a8cb598c9ce3de9b29bae5fa04b1cf828de11aff80a7ef8a3a38aede4f3c3563a25d049badcad5ed7e47fdbba6e111307eebe9ef4906bc989728b76e84afe808e6653b271e21104aa665f1898dd2aab23090e22b4e344a2616fbd8ee4ad8ed8108395eba817fbd14fec5c17dcf56b8220856b2b833e091407d5089b35ddf34b86ff7dc9fde52b21ef12176ef3370b7f3a0a8cb1b058a51aefff3d279d80f51a68bfb592587b45c5c63a7e4d625b887de486a118316c3b6a238575f92ac5b1c94c3f5dbbd96686000d6d39cccd558d420e4d447a8cbc4bc7b8c6a03af0f0034fb3518d93800f0f713e4b13732e16ada51801d7e559cf839d1058f64955698311399345416850dddcc5601a684fd09e6afd3944f5e19\",\n        \"signed\": \"cbf1f1642df950eb71fd09590d34c265922c58bd8026bba3fc0e594a6bb1f2b90da3dc1d5f6b6d5b405a896d1dbb71b8685c4dfc444acaffe65ab8331789f5073f33d8fb83e68741090a37bedd745cf141aaaed8c92ffa742a52561777885805ace14246ab98a8cb598c9ce3de9b29bae5fa04b1cf828de11aff80a7ef8a3a38aede4f3c3563a25d049badcad5ed7e47fdbba6e111307eebe9ef4906bc989728b76e84afe808e6653b271e21104aa665f1898dd2aab23090e22b4e344a2616fbd8ee4ad8ed8108395eba817fbd14fec5c17dcf56b8220856b2b833e091407d5089b35ddf34b86ff7dc9fde52b21ef12176ef3370b7f3a0a8cb1b058a51aefff3d279d80f51a68bfb592587b45c5c63a7e4d625b887de486a118316c3b6a238575f92ac5b1c94c3f5dbbd96686000d6d39cccd558d420e4d447a8cbc4bc7b8c6a03af0f0034fb3518d93800f0f713e4b13732e16ada51801d7e559cf839d1058f64955698311399345416850dddcc5601a684fd09e6afd3944f5e19\",\n        \"signature\": \"cbf1f1642df950eb71fd09590d34c265922c58bd8026bba3fc0e594a6bb1f2b90da3dc1d5f6b6d5b405a896d1dbb71b8685c4dfc444acaffe65ab8331789f507\"\n    },\n    {\n        \"secret_key\": \"1bff652a2c8309a393ac11da3aa97fb078bb284ed5e1b8ccc983652ef8556cd0\",\n        \"public_key\": \"aaabdc091fc3682354201744e9b73fd2a6cfb281914bf2c70ec3dc1dec7216b0\",\n        \"message\": \"48d02698a97bdcb3ef078dcfcf5750005f1702d300e7e89bc436e381113401f852b8b4acff60ffbd4ab46d202168d98b8735e79cb350e35b070ff6bdcafd954b551969b6b1a70c9131ebd40d96140291d8d2b091540a8b18d8e5465915c25dbc6b5c9a687942533c372c8b4e95a953677169b950edd3464375cd43132ff9bd541ee22bd418ce23195f65d8b289f633ec8d71e1a801b06c3c827f627e723d2199100ce73e8e4a4440e778317a474910793b47b10ffb55db7f281c7d7a033bd80048b82673b87cf95e99422ba628688f3c971890ca15d12f572fa1977a17307069da304ead3026eb01042668890d17008cd1e92c46cbe9c857e7193de3aba3911e4f86fe0a1698ab7cdb9251a8424b2848b96ad81ea239d365fdea92ea5c0473d0a6bb1e371356bdfad2d0350336d3e1947c936fd0c25195445011731b\",\n        \"signed\": \"93c9c33493fc64172d51e16a0a1cd729a0d99e3cb864e89a42987f39dd8cd26545fdfe37581911e803677da4c55b0a683ddf62b728f8f30685ae58f628ebe60948d02698a97bdcb3ef078dcfcf5750005f1702d300e7e89bc436e381113401f852b8b4acff60ffbd4ab46d202168d98b8735e79cb350e35b070ff6bdcafd954b551969b6b1a70c9131ebd40d96140291d8d2b091540a8b18d8e5465915c25dbc6b5c9a687942533c372c8b4e95a953677169b950edd3464375cd43132ff9bd541ee22bd418ce23195f65d8b289f633ec8d71e1a801b06c3c827f627e723d2199100ce73e8e4a4440e778317a474910793b47b10ffb55db7f281c7d7a033bd80048b82673b87cf95e99422ba628688f3c971890ca15d12f572fa1977a17307069da304ead3026eb01042668890d17008cd1e92c46cbe9c857e7193de3aba3911e4f86fe0a1698ab7cdb9251a8424b2848b96ad81ea239d365fdea92ea5c0473d0a6bb1e371356bdfad2d0350336d3e1947c936fd0c25195445011731b\",\n        \"signature\": \"93c9c33493fc64172d51e16a0a1cd729a0d99e3cb864e89a42987f39dd8cd26545fdfe37581911e803677da4c55b0a683ddf62b728f8f30685ae58f628ebe609\"\n    },\n    {\n        \"secret_key\": \"002fdd1f7641793ab064bb7aa848f762e7ec6e332ffc26eeacda141ae33b1783\",\n        \"public_key\": \"77d1d8ebacd13f4e2f8a40e28c4a63bc9ce3bfb69716334bcb28a33eb134086c\",\n        \"message\": \"5ac1dfc324f43e6cb79a87ab0470fa857b51fb944982e19074ca44b1e40082c1d07b92efa7ea55ad42b7c027e0b9e33756d95a2c1796a7c2066811dc41858377d4b835c1688d638884cd2ad8970b74c1a54aadd27064163928a77988b24403aa85af82ceab6b728e554761af7175aeb99215b7421e4474c04d213e01ff03e3529b11077cdf28964b8c49c5649e3a46fa0a09dcd59dcad58b9b922a83210acd5e65065531400234f5e40cddcf9804968e3e9ac6f5c44af65001e158067fc3a660502d13fa8874fa93332138d9606bc41b4cee7edc39d753dae12a873941bb357f7e92a4498847d6605456cb8c0b425a47d7d3ca37e54e903a41e6450a35ebe5237c6f0c1bbbc1fd71fb7cd893d189850295c199b7d88af26bc8548975fda1099ffefee42a52f3428ddff35e0173d3339562507ac5d2c45bbd2c19cfe89b\",\n        \"signed\": \"0df3aa0d0999ad3dc580378f52d152700d5b3b057f56a66f92112e441e1cb9123c66f18712c87efe22d2573777296241216904d7cdd7d5ea433928bd2872fa0c5ac1dfc324f43e6cb79a87ab0470fa857b51fb944982e19074ca44b1e40082c1d07b92efa7ea55ad42b7c027e0b9e33756d95a2c1796a7c2066811dc41858377d4b835c1688d638884cd2ad8970b74c1a54aadd27064163928a77988b24403aa85af82ceab6b728e554761af7175aeb99215b7421e4474c04d213e01ff03e3529b11077cdf28964b8c49c5649e3a46fa0a09dcd59dcad58b9b922a83210acd5e65065531400234f5e40cddcf9804968e3e9ac6f5c44af65001e158067fc3a660502d13fa8874fa93332138d9606bc41b4cee7edc39d753dae12a873941bb357f7e92a4498847d6605456cb8c0b425a47d7d3ca37e54e903a41e6450a35ebe5237c6f0c1bbbc1fd71fb7cd893d189850295c199b7d88af26bc8548975fda1099ffefee42a52f3428ddff35e0173d3339562507ac5d2c45bbd2c19cfe89b\",\n        \"signature\": \"0df3aa0d0999ad3dc580378f52d152700d5b3b057f56a66f92112e441e1cb9123c66f18712c87efe22d2573777296241216904d7cdd7d5ea433928bd2872fa0c\"\n    },\n    {\n        \"secret_key\": \"25b0f0bb3dcb422a6f3c6c220eaadb11dbfe489c2d455b276cefe8cba057f9f3\",\n        \"public_key\": \"fe03c9c4394adc74b13f47654bead8bc855958b4194fdab2097ac1b157933c05\",\n        \"message\": \"54d99f969efa8870fc20fa9a962bb372619c324439728af3139c2a07e8c1b29c1e4eedc2d40ba722f63ce37670362af6f5202add668c4fb4d62fa8bacbc7d07ff3bd38c15a01064259cc34134861632967460541a99b8d5182bf59347b5a59879aa3b091a1f3e04135bd6301be5226d4895e5e9c2b15e48e5ecdf44129e6122853a606fc118466fa720b5ab165635c3bde04d74289274fa03547accbde780e1fa0bf2c56f8436a53e73878a424a29aa9de385dba419ae6a5d12e004276152b58d325b302400a55333c38cde4908ae1d0121cbeca950809c543314277c1485e68d9f9c0a962d1b1e0dda1d4a52b56f8308a80b92acc9f4ebc3ed45d91a129da8675621af676703def3b84113183b2e3a8c56157f243f13980f3d1756fea7668c91503d35c839a2120c79ec954fb546d7b542f987289534ffdef62d47fd5ec\",\n        \"signed\": \"da50d5242bf51c3951780cafd926d67bdf5640d5d3bb08433831d56e48e2592a1c375968bb4d2fbea56145abf2d82991363b1565fa1effe214011a686e39950e54d99f969efa8870fc20fa9a962bb372619c324439728af3139c2a07e8c1b29c1e4eedc2d40ba722f63ce37670362af6f5202add668c4fb4d62fa8bacbc7d07ff3bd38c15a01064259cc34134861632967460541a99b8d5182bf59347b5a59879aa3b091a1f3e04135bd6301be5226d4895e5e9c2b15e48e5ecdf44129e6122853a606fc118466fa720b5ab165635c3bde04d74289274fa03547accbde780e1fa0bf2c56f8436a53e73878a424a29aa9de385dba419ae6a5d12e004276152b58d325b302400a55333c38cde4908ae1d0121cbeca950809c543314277c1485e68d9f9c0a962d1b1e0dda1d4a52b56f8308a80b92acc9f4ebc3ed45d91a129da8675621af676703def3b84113183b2e3a8c56157f243f13980f3d1756fea7668c91503d35c839a2120c79ec954fb546d7b542f987289534ffdef62d47fd5ec\",\n        \"signature\": \"da50d5242bf51c3951780cafd926d67bdf5640d5d3bb08433831d56e48e2592a1c375968bb4d2fbea56145abf2d82991363b1565fa1effe214011a686e39950e\"\n    },\n    {\n        \"secret_key\": \"bf5ba5d6a49dd5ef7b4d5d7d3e4ecc505c01f6ccee4c54b5ef7b40af6a454140\",\n        \"public_key\": \"1be034f813017b900d8990af45fad5b5214b573bd303ef7a75ef4b8c5c5b9842\",\n        \"message\": \"16152c2e037b1c0d3219ced8e0674aee6b57834b55106c5344625322da638ecea2fc9a424a05ee9512d48fcf75dd8bd4691b3c10c28ec98ee1afa5b863d1c36795ed18105db3a9aabd9d2b4c1747adbaf1a56ffcc0c533c1c0faef331cdb79d961fa39f880a1b8b1164741822efb15a7259a465bef212855751fab66a897bfa211abe0ea2f2e1cd8a11d80e142cde1263eec267a3138ae1fcf4099db0ab53d64f336f4bcd7a363f6db112c0a2453051a0006f813aaf4ae948a2090619374fa58052409c28ef76225687df3cb2d1b0bfb43b09f47f1232f790e6d8dea759e57942099f4c4bd3390f28afc2098244961465c643fc8b29766af2bcbc5440b86e83608cfc937be98bb4827fd5e6b689adc2e26513db531076a6564396255a09975b7034dac06461b255642e3a7ed75fa9fc265011f5f6250382a84ac268d63ba64\",\n        \"signed\": \"279cace6fdaf3945e3837df474b28646143747632bede93e7a66f5ca291d2c24978512ca0cb8827c8c322685bd605503a5ec94dbae61bbdcae1e49650602bc0716152c2e037b1c0d3219ced8e0674aee6b57834b55106c5344625322da638ecea2fc9a424a05ee9512d48fcf75dd8bd4691b3c10c28ec98ee1afa5b863d1c36795ed18105db3a9aabd9d2b4c1747adbaf1a56ffcc0c533c1c0faef331cdb79d961fa39f880a1b8b1164741822efb15a7259a465bef212855751fab66a897bfa211abe0ea2f2e1cd8a11d80e142cde1263eec267a3138ae1fcf4099db0ab53d64f336f4bcd7a363f6db112c0a2453051a0006f813aaf4ae948a2090619374fa58052409c28ef76225687df3cb2d1b0bfb43b09f47f1232f790e6d8dea759e57942099f4c4bd3390f28afc2098244961465c643fc8b29766af2bcbc5440b86e83608cfc937be98bb4827fd5e6b689adc2e26513db531076a6564396255a09975b7034dac06461b255642e3a7ed75fa9fc265011f5f6250382a84ac268d63ba64\",\n        \"signature\": \"279cace6fdaf3945e3837df474b28646143747632bede93e7a66f5ca291d2c24978512ca0cb8827c8c322685bd605503a5ec94dbae61bbdcae1e49650602bc07\"\n    },\n    {\n        \"secret_key\": \"65de297b70cbe80980500af0561a24db50001000125f4490366d8300d3128592\",\n        \"public_key\": \"ba8e2ad929bdcea538741042b57f2067d3153707a453770db9f3c4ca75504d24\",\n        \"message\": \"131d8f4c2c94b153565b86592e770c987a443461b39aa2408b29e213ab057affc598b583739d6603a83fef0afc514721db0e76f9bd1b72b98c565cc8881af5747c0ba6f58c53dd2377da6c0d3aa805620cc4e75d52aabcba1f9b2849e08bd1b6b92e6f06615b814519606a02dc65a8609f5b29e9c2af5a894f7116ef28cfd1e7b76b64061732f7a5a3f8aa4c2e569e627a3f9749aa597be49d6b94436c352dd5fa7b83c92d2610faa32095ca302152d91a3c9776750e758ee8e9e402c6f5385eaa5df23850e54beb1be437a416c7115ed6aa6de13b55482532787e0bee34b83f3084406765635497c931b62a0518f1fbc2b891dc7262c7c6b67eda594fa530d74c9329bad5be94c287fbcde53aa80272b83322613d9368e5904076fdbcc88b2c0e59c10b02c448e00d1b3e7a9c9640feffb9523a8a60e1d83f04a4b8df69153b\",\n        \"signed\": \"7a9b736b01cc92a3349f1a3c32dbd91959825394ff443c567405e899c8185ce8fad9500e1fce89d95a6253c00477435acf04bff993de1b00495def0834ee1f07131d8f4c2c94b153565b86592e770c987a443461b39aa2408b29e213ab057affc598b583739d6603a83fef0afc514721db0e76f9bd1b72b98c565cc8881af5747c0ba6f58c53dd2377da6c0d3aa805620cc4e75d52aabcba1f9b2849e08bd1b6b92e6f06615b814519606a02dc65a8609f5b29e9c2af5a894f7116ef28cfd1e7b76b64061732f7a5a3f8aa4c2e569e627a3f9749aa597be49d6b94436c352dd5fa7b83c92d2610faa32095ca302152d91a3c9776750e758ee8e9e402c6f5385eaa5df23850e54beb1be437a416c7115ed6aa6de13b55482532787e0bee34b83f3084406765635497c931b62a0518f1fbc2b891dc7262c7c6b67eda594fa530d74c9329bad5be94c287fbcde53aa80272b83322613d9368e5904076fdbcc88b2c0e59c10b02c448e00d1b3e7a9c9640feffb9523a8a60e1d83f04a4b8df69153b\",\n        \"signature\": \"7a9b736b01cc92a3349f1a3c32dbd91959825394ff443c567405e899c8185ce8fad9500e1fce89d95a6253c00477435acf04bff993de1b00495def0834ee1f07\"\n    },\n    {\n        \"secret_key\": \"0826e7333324e7ec8c764292f6015d4670e9b8d7c4a89e8d909e8ef435d18d15\",\n        \"public_key\": \"ffb2348ca8a018058be71d1512f376f91e8b0d552581254e107602217395e662\",\n        \"message\": \"7f9e3e2f03c9df3d21b990f5a4af8295734afe783accc34fb1e9b8e95a0fd837af7e05c13cda0de8fadac9205265a0792b52563bdc2fee766348befcc56b88bbb95f154414fb186ec436aa62ea6fcabb11c017a9d2d15f67e595980e04c9313bc94fbc8c1134c2f40332bc7e311ac1ce11b505f8572ada7fbe196fba822d9a914492fa7185e9f3bea4687200a524c673a1cdf87eb3a140dcdb6a8875613488a2b00adf7175341c1c257635fa1a53a3e21d60c228399eea0991f112c60f653d7148e2c5ceb98f940831f070db1084d79156cc82c46bc9b8e884f3fa81be2da4cdda46bcaa24cc461f76ee647bb0f0f8c15ac5daa795b945e6f85bb310362e48d8095c782c61c52b481b4b002ad06ea74b8d306eff71abf21db710a8913cbe48332be0a0b3f31e0c7a6eba85ce33f357c7aeccd30bfb1a6574408b66fe404d31c3c5\",\n        \"signed\": \"4bac7fabec8724d81ab09ae130874d70b5213492104372f601ae5abb10532799373c4dad215876441f474e2c006be37c3c8f5f6f017d0870414fd276a8f428087f9e3e2f03c9df3d21b990f5a4af8295734afe783accc34fb1e9b8e95a0fd837af7e05c13cda0de8fadac9205265a0792b52563bdc2fee766348befcc56b88bbb95f154414fb186ec436aa62ea6fcabb11c017a9d2d15f67e595980e04c9313bc94fbc8c1134c2f40332bc7e311ac1ce11b505f8572ada7fbe196fba822d9a914492fa7185e9f3bea4687200a524c673a1cdf87eb3a140dcdb6a8875613488a2b00adf7175341c1c257635fa1a53a3e21d60c228399eea0991f112c60f653d7148e2c5ceb98f940831f070db1084d79156cc82c46bc9b8e884f3fa81be2da4cdda46bcaa24cc461f76ee647bb0f0f8c15ac5daa795b945e6f85bb310362e48d8095c782c61c52b481b4b002ad06ea74b8d306eff71abf21db710a8913cbe48332be0a0b3f31e0c7a6eba85ce33f357c7aeccd30bfb1a6574408b66fe404d31c3c5\",\n        \"signature\": \"4bac7fabec8724d81ab09ae130874d70b5213492104372f601ae5abb10532799373c4dad215876441f474e2c006be37c3c8f5f6f017d0870414fd276a8f42808\"\n    },\n    {\n        \"secret_key\": \"00ad6227977b5f38ccda994d928bba9086d2daeb013f8690db986648b90c1d45\",\n        \"public_key\": \"91a4ea005752b92cbebf99a8a5cbecd240ae3f016c44ad141b2e57ddc773dc8e\",\n        \"message\": \"cb5bc5b98b2efce43543e91df041e0dbb53ed8f67bf0f197c52b2211e7a45e2e1ec818c1a80e10abf6a43535f5b79d974d8ae28a2295c0a6521763b607d5103c6aef3b2786bd5afd7563695660684337bc3090739fb1cd53a9d644139b6d4caec75bda7f2521fbfe676ab45b98cb317aa7ca79fc54a3d7c578466a6aa64e434e923465a7f211aa0c61681bb8486e90206a25250d3fdae6fb03299721e99e2a914910d91760089b5d281e131e6c836bc2de08f7e02c48d323c647e9536c00ec1039201c0362618c7d47aa8e7b9715ffc439987ae1d31154a6198c5aa11c128f4082f556c99baf103ecadc3b2f3b2ec5b469623bc03a53caf3814b16300aedbda538d676d1f607102639db2a62c446707ce6469bd873a0468225be88b0aef5d4020459b94b32fe2b0133e92e7ba54dd2a5397ed85f966ab39ed0730cca8e7dacb8a336\",\n        \"signed\": \"dc501db79fd782bc88cae792557d5d273f9ba560c7d90037fe84ac879d684f612a77452c4443e95c07b8be192c35769b17bbdfca42280de796d92119d833670dcb5bc5b98b2efce43543e91df041e0dbb53ed8f67bf0f197c52b2211e7a45e2e1ec818c1a80e10abf6a43535f5b79d974d8ae28a2295c0a6521763b607d5103c6aef3b2786bd5afd7563695660684337bc3090739fb1cd53a9d644139b6d4caec75bda7f2521fbfe676ab45b98cb317aa7ca79fc54a3d7c578466a6aa64e434e923465a7f211aa0c61681bb8486e90206a25250d3fdae6fb03299721e99e2a914910d91760089b5d281e131e6c836bc2de08f7e02c48d323c647e9536c00ec1039201c0362618c7d47aa8e7b9715ffc439987ae1d31154a6198c5aa11c128f4082f556c99baf103ecadc3b2f3b2ec5b469623bc03a53caf3814b16300aedbda538d676d1f607102639db2a62c446707ce6469bd873a0468225be88b0aef5d4020459b94b32fe2b0133e92e7ba54dd2a5397ed85f966ab39ed0730cca8e7dacb8a336\",\n        \"signature\": \"dc501db79fd782bc88cae792557d5d273f9ba560c7d90037fe84ac879d684f612a77452c4443e95c07b8be192c35769b17bbdfca42280de796d92119d833670d\"\n    },\n    {\n        \"secret_key\": \"1521c6dbd6f724de73eaf7b56264f01035c04e01c1f3eb3cbe83efd26c439ada\",\n        \"public_key\": \"2f61a26ffb68ba4f6e141529dc2617e8531c7151404808093b4fa7fedaea255d\",\n        \"message\": \"3e3c7c490788e4b1d42f5cbcae3a9930bf617ebdff447f7be2ac2ba7cd5bcfc015760963e6fe5b956fb7cdb35bd5a17f5429ca664f437f08753a741c2bc8692b71a9115c582a25b2f74d329854d60b7817c079b3523aaff8793c2f72fff8cd10592c54e738df1d6452fb72da131c6731ea5c953c62ea177ac1f4735e5154477387109afae15f3ed6eeb08606e28c81d4386f03b9376924b6ef8d221ee29547f82a7ede48e1dc17723e3d42171eeaf96ac84bedc2a01dd86f4d085734fd69f91b5263e439083ff0318536adff4147308e3aafd1b58bb74f6fb0214a46fdcd3524f18df5a719ce57319e791b4ea606b499bfa57a60e707f94e18f1fed22f91bc79e6364a843f9cbf93825c465e9cae9072bc9d3ec4471f21ab2f7e99a633f587aac3db78ae9666a89a18008dd61d60218554411a65740ffd1ae3adc06595e3b7876407b6\",\n        \"signed\": \"a817ed23ec398a128601c1832dc6af7643bf3a5f517bcc579450fdb4759028f4966164125f6ebd0d6bf86ff298a39c766d0c21fdb0cbfdf81cd0eb1f03cd8a083e3c7c490788e4b1d42f5cbcae3a9930bf617ebdff447f7be2ac2ba7cd5bcfc015760963e6fe5b956fb7cdb35bd5a17f5429ca664f437f08753a741c2bc8692b71a9115c582a25b2f74d329854d60b7817c079b3523aaff8793c2f72fff8cd10592c54e738df1d6452fb72da131c6731ea5c953c62ea177ac1f4735e5154477387109afae15f3ed6eeb08606e28c81d4386f03b9376924b6ef8d221ee29547f82a7ede48e1dc17723e3d42171eeaf96ac84bedc2a01dd86f4d085734fd69f91b5263e439083ff0318536adff4147308e3aafd1b58bb74f6fb0214a46fdcd3524f18df5a719ce57319e791b4ea606b499bfa57a60e707f94e18f1fed22f91bc79e6364a843f9cbf93825c465e9cae9072bc9d3ec4471f21ab2f7e99a633f587aac3db78ae9666a89a18008dd61d60218554411a65740ffd1ae3adc06595e3b7876407b6\",\n        \"signature\": \"a817ed23ec398a128601c1832dc6af7643bf3a5f517bcc579450fdb4759028f4966164125f6ebd0d6bf86ff298a39c766d0c21fdb0cbfdf81cd0eb1f03cd8a08\"\n    },\n    {\n        \"secret_key\": \"17e5f0a8f34751babc5c723ecf339306992f39ea065ac140fcbc397d2dd32c4b\",\n        \"public_key\": \"4f1e23cc0f2f69c88ef9162ab5f8c59fb3b8ab2096b77e782c63c07c8c4f2b60\",\n        \"message\": \"c0fad790024019bd6fc08a7a92f5f2ac35cf6432e2eaa53d482f6e1204935336cb3ae65a63c24d0ec6539a10ee18760f2f520537774cdec6e96b55536011daa8f8bcb9cdaf6df5b34648448ac7d7cb7c6bd80d67fbf330f8765297766046a925ab52411d1604c3ed6a85173040125658a32cf4c854ef2813df2be6f3830e5eee5a6163a83ca8849f612991a31e9f88028e50bf8535e11755fad029d94cf25959f6695d09c1ba4315d40f7cf51b3f8166d02faba7511ecd8b1dded5f10cd6843455cff707ed225396c61d0820d20ada70d0c3619ff679422061c9f7c76e97d5a37af61fd62212d2dafc647ebbb979e61d9070ec03609a07f5fc57d119ae64b7a6ef92a5afae660a30ed48d702cc3128c633b4f19060a0578101729ee979f790f45bdbb5fe1a8a62f01a61a31d61af07030450fa0417323e9407bc76e73130e7c69d62e6a7\",\n        \"signed\": \"efe2cb63fe7b4fc98946dc82fb6998e741ed9ce6b9c1a93bb45bc0a7d8396d7405282b43fe363ba5b23589f8e1fae130e157ce888cd72d053d0cc19d257a4300c0fad790024019bd6fc08a7a92f5f2ac35cf6432e2eaa53d482f6e1204935336cb3ae65a63c24d0ec6539a10ee18760f2f520537774cdec6e96b55536011daa8f8bcb9cdaf6df5b34648448ac7d7cb7c6bd80d67fbf330f8765297766046a925ab52411d1604c3ed6a85173040125658a32cf4c854ef2813df2be6f3830e5eee5a6163a83ca8849f612991a31e9f88028e50bf8535e11755fad029d94cf25959f6695d09c1ba4315d40f7cf51b3f8166d02faba7511ecd8b1dded5f10cd6843455cff707ed225396c61d0820d20ada70d0c3619ff679422061c9f7c76e97d5a37af61fd62212d2dafc647ebbb979e61d9070ec03609a07f5fc57d119ae64b7a6ef92a5afae660a30ed48d702cc3128c633b4f19060a0578101729ee979f790f45bdbb5fe1a8a62f01a61a31d61af07030450fa0417323e9407bc76e73130e7c69d62e6a7\",\n        \"signature\": \"efe2cb63fe7b4fc98946dc82fb6998e741ed9ce6b9c1a93bb45bc0a7d8396d7405282b43fe363ba5b23589f8e1fae130e157ce888cd72d053d0cc19d257a4300\"\n    },\n    {\n        \"secret_key\": \"0cd7aa7d605e44d5ffb97966b2cb93c189e4c5a85db87fad7ab8d62463c59b59\",\n        \"public_key\": \"4889855fe4116b4913927f47f2273bf559c3b394a983631a25ae597033185e46\",\n        \"message\": \"28a55dda6cd0844b6577c9d6da073a4dc35cbc98ac158ab54cf88fd20cc87e83c4bba2d74d82ce0f4854ec4db513de400465aaa5eee790bc84f16337072d3a91cde40d6e0df1ba0cc0645f5d5cbbb642381d7b9e211d25267a8acf77d1edb69c3a630f5b133d24f046a81bf22ff03b31d8447e12c3f7b77114a70cbd20bbd08b0b3827a6bbcf90409e344447a7fbc59bdd97d729071f8d71dcc33e6ef2cbab1d411edf13734db1dd9703276f5eb2d6aa2cb8952dd6712bfae809ce08c3aa502b8135713fac0a9c25b1d45b6a5831e02421bba65b81a596efa24b0576bd1dc7fdfb49be762875e81bd540722bc06140b9aa2ef7b84a801e41ded68d4546ac4873d9e7ced649b64fadaf0b5c4b6eb8d036315233f4326ca01e03393050cd027c24f67303fb846bd2c6b3dba06bed0d59a36289d24bd648f7db0b3a81346612593e3ddd18c557\",\n        \"signed\": \"bf9115fd3d02706e398d4bf3b02a82674ff3041508fd39d29f867e501634b9261f516a794f98738d7c7013a3f2f858ffdd08047fb6bf3dddfb4b4f4cbeef300328a55dda6cd0844b6577c9d6da073a4dc35cbc98ac158ab54cf88fd20cc87e83c4bba2d74d82ce0f4854ec4db513de400465aaa5eee790bc84f16337072d3a91cde40d6e0df1ba0cc0645f5d5cbbb642381d7b9e211d25267a8acf77d1edb69c3a630f5b133d24f046a81bf22ff03b31d8447e12c3f7b77114a70cbd20bbd08b0b3827a6bbcf90409e344447a7fbc59bdd97d729071f8d71dcc33e6ef2cbab1d411edf13734db1dd9703276f5eb2d6aa2cb8952dd6712bfae809ce08c3aa502b8135713fac0a9c25b1d45b6a5831e02421bba65b81a596efa24b0576bd1dc7fdfb49be762875e81bd540722bc06140b9aa2ef7b84a801e41ded68d4546ac4873d9e7ced649b64fadaf0b5c4b6eb8d036315233f4326ca01e03393050cd027c24f67303fb846bd2c6b3dba06bed0d59a36289d24bd648f7db0b3a81346612593e3ddd18c557\",\n        \"signature\": \"bf9115fd3d02706e398d4bf3b02a82674ff3041508fd39d29f867e501634b9261f516a794f98738d7c7013a3f2f858ffdd08047fb6bf3dddfb4b4f4cbeef3003\"\n    },\n    {\n        \"secret_key\": \"33371d9e892f9875052ac8e325ba505e7477c1ace24ba7822643d43d0acef3de\",\n        \"public_key\": \"35929bded27c249c87d8b8d82f59260a575327b546c3a167c69f5992d5b8e006\",\n        \"message\": \"27a32efba28204be59b7ff5fe488ca158a91d5986091ecc4458b49e090dd37cbfede7c0f46186fabcbdff78d2844155808efffd873ed9c9261526e04e4f7050b8d7bd267a0fe3d5a449378d54a4febbd2f26824338e2aaaf35a32ff0f62504bda5c2e44abc63159f336cf25e6bb40ddb7d8825dff18fd51fc01951eaedcd33707007e1203ca58b4f7d242f8166a907e099932c001bfb1ec9a61e0ef2da4e8446af208201315d69681710d425d2400c387d7b9df321a4aec602b9c656c3e2310bff8756d18b802134b15604f4edc111149a9879e31241dd34f702f4c349617b13529769a772f5e52a89c098e0dca5920667893a250061b17991626eb9319298685be46b6a8b68422444fa5a36bcf3a687e2eccb9322c87dc80165da898930850b98fc863cada1aa99c6d61c451b9ccf4874c7f0e75b0a0c602f044812c71765adaf02025395b0\",\n        \"signed\": \"985ca446ddc007827cc8f2852cbd8115ef8c5975e9d7ce96d74dfed859aa14a4c15254006bea5e08359efe2625d715e0897ee5a16f151203be5010418637de0527a32efba28204be59b7ff5fe488ca158a91d5986091ecc4458b49e090dd37cbfede7c0f46186fabcbdff78d2844155808efffd873ed9c9261526e04e4f7050b8d7bd267a0fe3d5a449378d54a4febbd2f26824338e2aaaf35a32ff0f62504bda5c2e44abc63159f336cf25e6bb40ddb7d8825dff18fd51fc01951eaedcd33707007e1203ca58b4f7d242f8166a907e099932c001bfb1ec9a61e0ef2da4e8446af208201315d69681710d425d2400c387d7b9df321a4aec602b9c656c3e2310bff8756d18b802134b15604f4edc111149a9879e31241dd34f702f4c349617b13529769a772f5e52a89c098e0dca5920667893a250061b17991626eb9319298685be46b6a8b68422444fa5a36bcf3a687e2eccb9322c87dc80165da898930850b98fc863cada1aa99c6d61c451b9ccf4874c7f0e75b0a0c602f044812c71765adaf02025395b0\",\n        \"signature\": \"985ca446ddc007827cc8f2852cbd8115ef8c5975e9d7ce96d74dfed859aa14a4c15254006bea5e08359efe2625d715e0897ee5a16f151203be5010418637de05\"\n    },\n    {\n        \"secret_key\": \"beedb8073df58f8c1bffbdbd77ec7decb2c82a9babecefc0331507bdc2c2a7e7\",\n        \"public_key\": \"b27e908b805e296fc30d2e474b060cd50c0f6f520b3671712183bd89d4e733e9\",\n        \"message\": \"35ca57f0f915e5209d54ea4b871ffb585354df1b4a4a1796fbe4d6227d3e1aba5171ed0391a79e83e24d82fdafd15c17b28bf6c94d618c74d65264e58faaacd2902872fdd0efa22e8d2d7ce8e3b8197f0c3615b0a385235fa9fd8e4564ee6e6b1650b4cfb94d872c805c32d4f3a18f966461d3adbb605fa525884f8eb197627396ba4d995d78ac02948a0eaabb58519b9a8e2e7985cd1de2c71d8918d96a0168660ce17cddf364e3ec0d4bd90f2104751a1927ee1d23f3e7a69840ed040b00e5f6e4866ec58813149cc382aebf6162608c79574d553f47230e924a0ef1ebf55d8e1a52abb62a2d7ac86027c7c03cc83fa1949da29e2f3037ab986fd2fffe650e3149babae5a50b1ee9696f3babec72e29697c82422814d272085500fd837fe3c7a973ef4c169af12dd7f02700620bb045bdbf84623f326350570b3cadbc9aea4200b28287e17ab\",\n        \"signed\": \"8c890cccadc7760e1e82e43c44b3dc0b685a48b479ae13cc0a6b0557d0fb1cbabba63d2a96843412ea8d36c50acbf52b92cfb2dce49dc48af6ddcf8ee47a860835ca57f0f915e5209d54ea4b871ffb585354df1b4a4a1796fbe4d6227d3e1aba5171ed0391a79e83e24d82fdafd15c17b28bf6c94d618c74d65264e58faaacd2902872fdd0efa22e8d2d7ce8e3b8197f0c3615b0a385235fa9fd8e4564ee6e6b1650b4cfb94d872c805c32d4f3a18f966461d3adbb605fa525884f8eb197627396ba4d995d78ac02948a0eaabb58519b9a8e2e7985cd1de2c71d8918d96a0168660ce17cddf364e3ec0d4bd90f2104751a1927ee1d23f3e7a69840ed040b00e5f6e4866ec58813149cc382aebf6162608c79574d553f47230e924a0ef1ebf55d8e1a52abb62a2d7ac86027c7c03cc83fa1949da29e2f3037ab986fd2fffe650e3149babae5a50b1ee9696f3babec72e29697c82422814d272085500fd837fe3c7a973ef4c169af12dd7f02700620bb045bdbf84623f326350570b3cadbc9aea4200b28287e17ab\",\n        \"signature\": \"8c890cccadc7760e1e82e43c44b3dc0b685a48b479ae13cc0a6b0557d0fb1cbabba63d2a96843412ea8d36c50acbf52b92cfb2dce49dc48af6ddcf8ee47a8608\"\n    },\n    {\n        \"secret_key\": \"9184ef618816832592bc8eb35f4ffd4ff98dfbf7776c90f2aad212ce7e03351e\",\n        \"public_key\": \"687b7726010d9bde2c90e573cd2a2a702ff28c4a2af70afc7315c94d575601e5\",\n        \"message\": \"729eb7e54a9d00c58617af18c345b8dc6e5b4e0f57de2f3c02e54a2ec8f1425ec2e240775b5ab0c10f84ac8bafda4584f7e21c655faecd8030a98906bd68398f26b5d58d92b6cf045e9bd9743c74c9a342ec61ce57f37b981eac4d8bf034608866e985bb68686a68b4a2af88b992a2a6d2dc8ce88bfb0a36cf28bbab7024abfa2bea53313b66c906f4f7cf66970f540095bd0104aa4924dd82e15413c22679f847e48cd0c7ec1f677e005fec0177fbd5c559fc39add613991fbaeae4d24d39d309ef74647f8192cc4c62d0642028c76a1b951f6bc9639deb91ecc08be6043f2109705a42c7eae712649d91d96ccbbfb63d8d0dd6dd112160f61361ecdc6793929ca9aef9ab56944a6fa4a7df1e279eaf58ce8323a9cf62c94279fff7440fbc936baa61489c999330badcb9fc0e184bc5093f330cbb242f71fb378738fea10511dd438364d7f76bcc\",\n        \"signed\": \"b3c24e75132c563475422d5ea412b5c1e8e6e5ea1c08ead1393c412da134c9a1638284ea7e2ca032fe3d3e32a9066a8c8839903f6ef46e966bb5e492d8c2aa00729eb7e54a9d00c58617af18c345b8dc6e5b4e0f57de2f3c02e54a2ec8f1425ec2e240775b5ab0c10f84ac8bafda4584f7e21c655faecd8030a98906bd68398f26b5d58d92b6cf045e9bd9743c74c9a342ec61ce57f37b981eac4d8bf034608866e985bb68686a68b4a2af88b992a2a6d2dc8ce88bfb0a36cf28bbab7024abfa2bea53313b66c906f4f7cf66970f540095bd0104aa4924dd82e15413c22679f847e48cd0c7ec1f677e005fec0177fbd5c559fc39add613991fbaeae4d24d39d309ef74647f8192cc4c62d0642028c76a1b951f6bc9639deb91ecc08be6043f2109705a42c7eae712649d91d96ccbbfb63d8d0dd6dd112160f61361ecdc6793929ca9aef9ab56944a6fa4a7df1e279eaf58ce8323a9cf62c94279fff7440fbc936baa61489c999330badcb9fc0e184bc5093f330cbb242f71fb378738fea10511dd438364d7f76bcc\",\n        \"signature\": \"b3c24e75132c563475422d5ea412b5c1e8e6e5ea1c08ead1393c412da134c9a1638284ea7e2ca032fe3d3e32a9066a8c8839903f6ef46e966bb5e492d8c2aa00\"\n    },\n    {\n        \"secret_key\": \"354e13152ee1fe748a1252204c6527bdc1b1eb2eb53678150e6359924708d812\",\n        \"public_key\": \"d45ff6c5fb83e7bb9669aa8960deb7dbc665c988439b6c9ef672c6811dc8bcf6\",\n        \"message\": \"8e5fccf66b1ba6169cb685733d9d0e0190361c90bcab95c163285a97fe356d2bdcde3c9380268805a384d063da09ccd9969cc3ff7431e60a8e9f869cd62faa0e356151b280bc526e577c2c538c9a724dc48bf88b70321d7e1eeedb3c4af706748c942e67bdabdb41bec2977b1523069e31e29b76300288f88a51b384b80cc2526f1679340ddec3881f5cd28b0378d9cd0a812b68dd3f68f7a23e1b54bee7466ac765cf38df04d67441dfa498c4bffc52045fa6d2dbcdbfa33dfaa77644ffccef0decdb6790c70a0d734ec287cc338cb5a909c0055189301169c4f7702c05c0911a27b16ef9ed934fa6a0ca7b13e413523422535647968030edc40cd73e7d6b345b7581f438316d68e3cd292b846d3f4f7c4862bc7e6b3fb89a27f6f60cd7db2e34ec9aae1013fe37acff8ad888cb9a593ef5e621eae5186c58b31dcfde22870e336d33f440f6b8d49a\",\n        \"signed\": \"de2b46e65f3decef34332e500f2e11306fbdcf1be85a1c1ee68ba3045dcec2c7be608d22927da1f44c0e2083ae622cf3c29d893887994efcfa2ca594f5051f038e5fccf66b1ba6169cb685733d9d0e0190361c90bcab95c163285a97fe356d2bdcde3c9380268805a384d063da09ccd9969cc3ff7431e60a8e9f869cd62faa0e356151b280bc526e577c2c538c9a724dc48bf88b70321d7e1eeedb3c4af706748c942e67bdabdb41bec2977b1523069e31e29b76300288f88a51b384b80cc2526f1679340ddec3881f5cd28b0378d9cd0a812b68dd3f68f7a23e1b54bee7466ac765cf38df04d67441dfa498c4bffc52045fa6d2dbcdbfa33dfaa77644ffccef0decdb6790c70a0d734ec287cc338cb5a909c0055189301169c4f7702c05c0911a27b16ef9ed934fa6a0ca7b13e413523422535647968030edc40cd73e7d6b345b7581f438316d68e3cd292b846d3f4f7c4862bc7e6b3fb89a27f6f60cd7db2e34ec9aae1013fe37acff8ad888cb9a593ef5e621eae5186c58b31dcfde22870e336d33f440f6b8d49a\",\n        \"signature\": \"de2b46e65f3decef34332e500f2e11306fbdcf1be85a1c1ee68ba3045dcec2c7be608d22927da1f44c0e2083ae622cf3c29d893887994efcfa2ca594f5051f03\"\n    },\n    {\n        \"secret_key\": \"7ff62d4b3c4d99d342d4bb401d726b21e99f4ef592149fc311b68761f5567ff6\",\n        \"public_key\": \"7fdfdb9eca29d3f01d9486d7e112ce03aa37b91326a4283b9c03999c5eda099a\",\n        \"message\": \"99c44c796572a4823fc6c3807730839173774c05dbfc1492ed0d00509a95a1de37274b3135ed0456a1718e576597dc13f2a2ab37a45c06cbb4a2d22afad4d5f3d90ab3d8da4dcdaa06d44f2219088401c5dceee26055c4782f78d7d63a380608e1bef89eeef338c2f0897da106fafce2fb2ebc5db669c7c172c9cfe77d3109d239fe5d005c8ee751511b5a88317c729b0d8b70b52f6bd3cda2fe865c77f36e4f1b635f336e036bd718bec90ee78a802811510c4058c1ba364017253aa842922e1dd7d7a0f0fc9c69e43fc4eaeffaaf1ae5fa5d2d73b43079617baba030923fe5b13d2c1c4fe6fac3f2db74e2020a734b6121a0302fce820ba0580ce6135348fdf0632e0008df03ee112168f5cfa0037a26a1f69b1f1317edf2a3ab367455a77e00691215d7aa3133c2159d3da2b134cf04f0defbf07a6064011e64dd14d4f8f064356655428804c2771a\",\n        \"signed\": \"058f79927fbf6178724815c7b11c63baaa90bcc15d7272be082f8a9141861c816433055f6cf6491424853f9ec78bb91ace913a93411b4e5ed58bc4ba5715c60a99c44c796572a4823fc6c3807730839173774c05dbfc1492ed0d00509a95a1de37274b3135ed0456a1718e576597dc13f2a2ab37a45c06cbb4a2d22afad4d5f3d90ab3d8da4dcdaa06d44f2219088401c5dceee26055c4782f78d7d63a380608e1bef89eeef338c2f0897da106fafce2fb2ebc5db669c7c172c9cfe77d3109d239fe5d005c8ee751511b5a88317c729b0d8b70b52f6bd3cda2fe865c77f36e4f1b635f336e036bd718bec90ee78a802811510c4058c1ba364017253aa842922e1dd7d7a0f0fc9c69e43fc4eaeffaaf1ae5fa5d2d73b43079617baba030923fe5b13d2c1c4fe6fac3f2db74e2020a734b6121a0302fce820ba0580ce6135348fdf0632e0008df03ee112168f5cfa0037a26a1f69b1f1317edf2a3ab367455a77e00691215d7aa3133c2159d3da2b134cf04f0defbf07a6064011e64dd14d4f8f064356655428804c2771a\",\n        \"signature\": \"058f79927fbf6178724815c7b11c63baaa90bcc15d7272be082f8a9141861c816433055f6cf6491424853f9ec78bb91ace913a93411b4e5ed58bc4ba5715c60a\"\n    },\n    {\n        \"secret_key\": \"6cabadd03f8a2e6ebab96a74f80e18164e4d1b6baa678f5a82e25604af989aaf\",\n        \"public_key\": \"2a4a3179564194e00100c18bc35351d8b135bbae5b32b28fce1d7b6766ca4b32\",\n        \"message\": \"279f78cf3b9ccfc6e1b01e1a82f50ed172e9a8e1e702bb15661dd7dc3a456ff7a7a7fdfb081db3867079630c7f70fd753292ec60ecbf50632e9aa45b996505c66e6dc3c6ae892e21b6a8705e4bbae8f16a3378554b31fdb0139dcd15c96a8a7e4b88756a86d18db5dc74fd7691197dd88e2c7d5df52b049344cdc477c9cd7e89eda99ccfb1d00814d0152b9654df3279372ca5f18b1c946f2894a76b079ddb1c3cd61fbb969aeec9193a6b88fb7d136c07f9821e5c1074b4e93bcaf6fa14d0d1d7e1707589d77ec1337206e53a1f06cc26672ff95c13d5ff444766931ba30a0afdcdadd2098e9c41fd87a3f23cd16dbb0efbf8092ce33e327f42610990e1cee6cb8e54951aa081e69765ae4009aeed758e768de50c23d9a22b4a06dc4d19fc8cbd0cdef4c983461755d0a3b5d6a9c12253e09568339ff7e5f78c5fdf7ec89f9186a621a8c0eed11b67022e\",\n        \"signed\": \"4e65c6c1d493045e8a9250e397c1d1d30ffed24db66a8961aa458f8f0fcb760c39fe8657d7ab8f84000b96d519717cff71f926522c1efec7f8b2624eae55f60c279f78cf3b9ccfc6e1b01e1a82f50ed172e9a8e1e702bb15661dd7dc3a456ff7a7a7fdfb081db3867079630c7f70fd753292ec60ecbf50632e9aa45b996505c66e6dc3c6ae892e21b6a8705e4bbae8f16a3378554b31fdb0139dcd15c96a8a7e4b88756a86d18db5dc74fd7691197dd88e2c7d5df52b049344cdc477c9cd7e89eda99ccfb1d00814d0152b9654df3279372ca5f18b1c946f2894a76b079ddb1c3cd61fbb969aeec9193a6b88fb7d136c07f9821e5c1074b4e93bcaf6fa14d0d1d7e1707589d77ec1337206e53a1f06cc26672ff95c13d5ff444766931ba30a0afdcdadd2098e9c41fd87a3f23cd16dbb0efbf8092ce33e327f42610990e1cee6cb8e54951aa081e69765ae4009aeed758e768de50c23d9a22b4a06dc4d19fc8cbd0cdef4c983461755d0a3b5d6a9c12253e09568339ff7e5f78c5fdf7ec89f9186a621a8c0eed11b67022e\",\n        \"signature\": \"4e65c6c1d493045e8a9250e397c1d1d30ffed24db66a8961aa458f8f0fcb760c39fe8657d7ab8f84000b96d519717cff71f926522c1efec7f8b2624eae55f60c\"\n    },\n    {\n        \"secret_key\": \"0fa0c32c3ae34be51b92f91945405981a8e202488558a8e220c288c7d6a5532d\",\n        \"public_key\": \"d6aee62bd91fc9453635ffcc02b2f38dcab13285140380580ccdff0865df0492\",\n        \"message\": \"53f44be0e5997ff07264cb64ba1359e2801def8755e64a2362bddaf597e672d021d34fface6d97e0f2b1f6ae625fd33d3c4f6e9ff7d0c73f1da8defb23f324975e921bb2473258177a16612567edf7d5760f3f3e3a6d26aaabc5fde4e2043f73fa70f128020933b1ba3b6bd69498e9503ea670f1ed880d3651f2e4c59e79cabc86e9b703394294112d5d8e213c317423b525a6df70106a9d658a262028b5f45100cb77d1150d8fe461eed434f241015f3276ad7b09a291b4a7f35e3c30051cbf13b1d4a7fa0c81a50f939e7c49673afdc87883c9e3e61f5a1df03755470fda74bf23ea88676b258a97a280d5f90b52b714b596035bae08c8d0fe6d94f8949559b1f27d7116cf59dd3cfbf18202a09c13f5c4fbc8d97225492887d32870c2297e34debd9876d6d01ac27a16b088b079079f2b20feb02537cda314c43cb2dca371b9df37ed11ec97e1a7a6993a\",\n        \"signed\": \"7e9ab85ee94fe4b35dcb545329a0ef25923de5c9dc23e7df1a7e77ab0dcfb89e03f4e785ca6429cb2b0df50da6230f733f00f33a45c4e576cd40bdb84f1ae00153f44be0e5997ff07264cb64ba1359e2801def8755e64a2362bddaf597e672d021d34fface6d97e0f2b1f6ae625fd33d3c4f6e9ff7d0c73f1da8defb23f324975e921bb2473258177a16612567edf7d5760f3f3e3a6d26aaabc5fde4e2043f73fa70f128020933b1ba3b6bd69498e9503ea670f1ed880d3651f2e4c59e79cabc86e9b703394294112d5d8e213c317423b525a6df70106a9d658a262028b5f45100cb77d1150d8fe461eed434f241015f3276ad7b09a291b4a7f35e3c30051cbf13b1d4a7fa0c81a50f939e7c49673afdc87883c9e3e61f5a1df03755470fda74bf23ea88676b258a97a280d5f90b52b714b596035bae08c8d0fe6d94f8949559b1f27d7116cf59dd3cfbf18202a09c13f5c4fbc8d97225492887d32870c2297e34debd9876d6d01ac27a16b088b079079f2b20feb02537cda314c43cb2dca371b9df37ed11ec97e1a7a6993a\",\n        \"signature\": \"7e9ab85ee94fe4b35dcb545329a0ef25923de5c9dc23e7df1a7e77ab0dcfb89e03f4e785ca6429cb2b0df50da6230f733f00f33a45c4e576cd40bdb84f1ae001\"\n    },\n    {\n        \"secret_key\": \"7b06f88026fa86f39fce2426f67cc5996bedd0cfc4b5ebb1b5e3edbb47e080aa\",\n        \"public_key\": \"3f1469ee6a2e7867e2e9012d402cf5a4861497c01df879a1deb1c539830b58de\",\n        \"message\": \"71175d4e21721297d9176d817f4e785d9600d923f987fe0b26fd79d33a5ea5d1e818b71f0f92b8c73afddabdcc27f6d16e26aafa874cfd77a00e06c36b041487582bb933760f88b419127345776ea418f83522254fed33819bc5c95f8f8404cc144ebf1486c88515409d3433aaf519d9920f5256e629419e9a95580a35b069b8d25533dfcbc98ad36404a951808e01378c03266326d120046975fde07daef3266caacd821c1403499d7fdf17c033c8d8c3f28f162b5f09dfdaca06285f00c6cb986dfdf5151aa6639608b5b13e78d65a4368585b16138754fbd113835a686cd066c2b89bb0953c24d50e77bf0fc457c1e0fcf5d44da8db9a88f062be3b688d5cdcff1d1c00e81ec9d413882295b341fee8fa427dc109adeb5f284eec202f1bef115bf96b1782d3ccdeb682b69bf92d170c007d5df80e1ed962f677dc24a145a1e4e829e8dec0104e5f78365944\",\n        \"signed\": \"42f133e34e3eb7032a133ed781537ec62e44a5ce8381e5e0bf9e13a914a4b2c757811d6d3b1e86672424ea4230d10f7c610abb7069e61e319b4066a2bd7bc90071175d4e21721297d9176d817f4e785d9600d923f987fe0b26fd79d33a5ea5d1e818b71f0f92b8c73afddabdcc27f6d16e26aafa874cfd77a00e06c36b041487582bb933760f88b419127345776ea418f83522254fed33819bc5c95f8f8404cc144ebf1486c88515409d3433aaf519d9920f5256e629419e9a95580a35b069b8d25533dfcbc98ad36404a951808e01378c03266326d120046975fde07daef3266caacd821c1403499d7fdf17c033c8d8c3f28f162b5f09dfdaca06285f00c6cb986dfdf5151aa6639608b5b13e78d65a4368585b16138754fbd113835a686cd066c2b89bb0953c24d50e77bf0fc457c1e0fcf5d44da8db9a88f062be3b688d5cdcff1d1c00e81ec9d413882295b341fee8fa427dc109adeb5f284eec202f1bef115bf96b1782d3ccdeb682b69bf92d170c007d5df80e1ed962f677dc24a145a1e4e829e8dec0104e5f78365944\",\n        \"signature\": \"42f133e34e3eb7032a133ed781537ec62e44a5ce8381e5e0bf9e13a914a4b2c757811d6d3b1e86672424ea4230d10f7c610abb7069e61e319b4066a2bd7bc900\"\n    },\n    {\n        \"secret_key\": \"c3f5e149968a24f4de9119531975f443015ccca305d7119ed4749e8bf6d94fc7\",\n        \"public_key\": \"39aaccdb948a4038538a4588322f806bb129b5876c4bec51271afe4f49690045\",\n        \"message\": \"c46370e37f2e0cadcf93402f1f0cb048f52881ba750b7a43f56ab11ce348732fb57e7f9aaf8dfcbe455e14e983c248d026a27e7f148d5db5a53f94635702b895127771047a876d14107386c5e0ff8933345bbd7a936d990d33efa28c2ec4e4864ffd2ff576f7c88f954cfc1c459e883bb712dae3cdf6632066f1f4d13a509615b3360cadc5a307f23e52a51b40a6feebe0b18d0e9ee4e348f33cd81a8def222f6a59b12861d335bd9af85cc004be46f1d3a424f4870ae9dc587e5a4ade136b9370649348c33ac3bf1febeebffea37085ed59cac9d9e696470b234609e9a10a9d431ff91e69cb5135fd117ff58a36539744ebe70cea6973c00c7a4d57b62f4a7136d731b8e46ff18ec0ed69070031905075d8541d568cfce6eeb76242b7819a7b6a93552111bb88f165527cfa6966d39fcbe0a7dea008e39c7a3e577ab307cd1d0ea326833d52654e172955f3fcd4\",\n        \"signed\": \"5fa2b531677b00b85b0a313cbd479f55f4ab3ec5cfce5e454d2b74176ccc3399c899f9d6b51ed4c1e76185ac9fe730c4b4014044f7041185bc3c85722eb2ea02c46370e37f2e0cadcf93402f1f0cb048f52881ba750b7a43f56ab11ce348732fb57e7f9aaf8dfcbe455e14e983c248d026a27e7f148d5db5a53f94635702b895127771047a876d14107386c5e0ff8933345bbd7a936d990d33efa28c2ec4e4864ffd2ff576f7c88f954cfc1c459e883bb712dae3cdf6632066f1f4d13a509615b3360cadc5a307f23e52a51b40a6feebe0b18d0e9ee4e348f33cd81a8def222f6a59b12861d335bd9af85cc004be46f1d3a424f4870ae9dc587e5a4ade136b9370649348c33ac3bf1febeebffea37085ed59cac9d9e696470b234609e9a10a9d431ff91e69cb5135fd117ff58a36539744ebe70cea6973c00c7a4d57b62f4a7136d731b8e46ff18ec0ed69070031905075d8541d568cfce6eeb76242b7819a7b6a93552111bb88f165527cfa6966d39fcbe0a7dea008e39c7a3e577ab307cd1d0ea326833d52654e172955f3fcd4\",\n        \"signature\": \"5fa2b531677b00b85b0a313cbd479f55f4ab3ec5cfce5e454d2b74176ccc3399c899f9d6b51ed4c1e76185ac9fe730c4b4014044f7041185bc3c85722eb2ea02\"\n    },\n    {\n        \"secret_key\": \"42305c9302f45ea6f87e26e2208fd94b3c4ad037b1b6c83cf6677aa1096a013c\",\n        \"public_key\": \"3b97b1f11ce45ba46ffbb25b76bfc5ad7b77f90cc69ed76115dea4029469d587\",\n        \"message\": \"d110828d449198d675e74e8e39439fd15e75bf2cc1f430abfb245836885bafc420f754b89d2fbbf6dd3490792e7a4f766073cfe3b302d089831ace869e2730fde45c2121ec3ef217aa9c43fa7cc7e9ed0a01ad9f1d2fc3613638ca9fc193c98b37455bf5dbf8f38b64708dfdca6c21f0975f1017c5da5f6434bda9f033cec2a631ab50318e017b170b240bf01eb8b36c7e1cb59e7736ac34444208132a8f59e4f313d65d849c6a4fdf13e20ecaee3823e589a171b39b2489497b06e6ff58c2c9f1dc5d3aa3bd10e6443e22d42d07b783f79fd43a46e1cde314b663a95f7246dea131fcd46d1dc333c5454f86b2c4e2e424dea405cc2230d4dcd39a2eab2f92845cf6a7994192063f1202749ef52dcb96f2b79ed6a98118ca0b99ba2285490860eb4c61ab78b9ddc6acc7ad883fa5e96f9d029171223abf7573e36230e0a81f6c1311151473ee264f4b842e923dcb3b\",\n        \"signed\": \"18d05e5d01668e83f40fa3bbee28b388acf318d1b0b5ad668c672f345c8eda14c2f884cd2a9039459ce0810bc5b580fe70d3964a43edb49e73a6ff914bbf040cd110828d449198d675e74e8e39439fd15e75bf2cc1f430abfb245836885bafc420f754b89d2fbbf6dd3490792e7a4f766073cfe3b302d089831ace869e2730fde45c2121ec3ef217aa9c43fa7cc7e9ed0a01ad9f1d2fc3613638ca9fc193c98b37455bf5dbf8f38b64708dfdca6c21f0975f1017c5da5f6434bda9f033cec2a631ab50318e017b170b240bf01eb8b36c7e1cb59e7736ac34444208132a8f59e4f313d65d849c6a4fdf13e20ecaee3823e589a171b39b2489497b06e6ff58c2c9f1dc5d3aa3bd10e6443e22d42d07b783f79fd43a46e1cde314b663a95f7246dea131fcd46d1dc333c5454f86b2c4e2e424dea405cc2230d4dcd39a2eab2f92845cf6a7994192063f1202749ef52dcb96f2b79ed6a98118ca0b99ba2285490860eb4c61ab78b9ddc6acc7ad883fa5e96f9d029171223abf7573e36230e0a81f6c1311151473ee264f4b842e923dcb3b\",\n        \"signature\": \"18d05e5d01668e83f40fa3bbee28b388acf318d1b0b5ad668c672f345c8eda14c2f884cd2a9039459ce0810bc5b580fe70d3964a43edb49e73a6ff914bbf040c\"\n    },\n    {\n        \"secret_key\": \"c57a43dcd7bab8516009546918d71ad459b7345efdca8d4f19929875c839d722\",\n        \"public_key\": \"2083b444236b9ab31d4e00c89d55c6260fee71ac1a47c4b5ba227404d382b82d\",\n        \"message\": \"a4f6d9c281cf81a28a0b9e77499aa24bde96cc1264374491c008294ee0af6f6e4bbb686396f59068d358e30fe9992db0c6f16680a1c71e27a4a907ac607d39bdc3258c7956482fb37996f4beb3e5051b8148019a1c256e2ee999ebc8ce64c54e07fedb4fbd8953ebd93b7d69ce5a0082edd6209d12d3619b4fd2eae916461f72a4ce727157251a19209bbff9fbdbd289436f3fcacc6b4e1318521a47839cba4b14f7d7a21e7b5d6b6a753d5804afcd2b1eb7779b92abab8afa8aa4fa51caec0b85dcd0fc2a0676036d3f56630a831ffeb502861dd89161c708a9c006c73c930ce5b94756426ff18aa112fb4eb9a68500b48d4eedbd4167b6ffd0a11d49443a173ce9d949436748fc0634f06bb08b8f3423f4463dba7b4d199b64df578117f0a2645f0b2a1e2ada27d286f76733f25b82ed1d48a5c3898d4ad621e50ed9060daad40a39532e4d1bf162ce36804d5d4e2d\",\n        \"signed\": \"1edef9bc036971f1fa88edf45393c802e6c1a1631c8a06871a09a320821dce40beca97e53a0361a955a4c6d60b8ca8e400c81340911ccb4f56284041cdbb1804a4f6d9c281cf81a28a0b9e77499aa24bde96cc1264374491c008294ee0af6f6e4bbb686396f59068d358e30fe9992db0c6f16680a1c71e27a4a907ac607d39bdc3258c7956482fb37996f4beb3e5051b8148019a1c256e2ee999ebc8ce64c54e07fedb4fbd8953ebd93b7d69ce5a0082edd6209d12d3619b4fd2eae916461f72a4ce727157251a19209bbff9fbdbd289436f3fcacc6b4e1318521a47839cba4b14f7d7a21e7b5d6b6a753d5804afcd2b1eb7779b92abab8afa8aa4fa51caec0b85dcd0fc2a0676036d3f56630a831ffeb502861dd89161c708a9c006c73c930ce5b94756426ff18aa112fb4eb9a68500b48d4eedbd4167b6ffd0a11d49443a173ce9d949436748fc0634f06bb08b8f3423f4463dba7b4d199b64df578117f0a2645f0b2a1e2ada27d286f76733f25b82ed1d48a5c3898d4ad621e50ed9060daad40a39532e4d1bf162ce36804d5d4e2d\",\n        \"signature\": \"1edef9bc036971f1fa88edf45393c802e6c1a1631c8a06871a09a320821dce40beca97e53a0361a955a4c6d60b8ca8e400c81340911ccb4f56284041cdbb1804\"\n    },\n    {\n        \"secret_key\": \"2dddb6b8fd04fa90ece1a709f8418f2e5d0c9c43afe7cfce19e6ad15a73476f7\",\n        \"public_key\": \"8059de6a7c4776489ecc2e7d707ffce30285bf30a23f78d72db49cfd6ed0d492\",\n        \"message\": \"474baa590a4cd72d5424e51d8257b3d44325bc4c5063a0033c86ebbe99ed7212184c19944d082a115379dd4cece973faa0bca6485bd25f3744a719e70aa0291e1b5a96e637c140616a98263357c76b6eb0083fe51414e386870d0fdc7dd9abe4ff6fb5bbf1e7b15dac3e08e2615f655c3104ceb32a4cc2c9e9c43cf282d346ac253ccc46b635ae040973b49735720ffb890469a567c5824e0c00d7ccd5509a718092a906461c4d6163eaf422418f5fc6e009fc3f529ac61a2f89bb8e0ed45d940c4c2331ff8d8e1d6d58d417d8fc2656a02e8701aee75aed918724eebe4a2cf4744c5c401e217023df68a6f6a0228bd05a679a697d8de7036b9ed269090d3c65486afb91e27954eb15b964665ede7ad008f12fb3a9d0e69c13b4254f43819e0818a4195f68b8a38ae81f3fcb1879c95ab4cd0ffc38e381089260cca967ace5a085b457ab5eb363852101377570f9ac9e38\",\n        \"signed\": \"c634ea7bf72e895a2e796e2834201415b8b45e05e045559284eb9052c0e84f62a5a9f0c9764f7576788c7228b19ef517c195497325a48a9344b147c12fd75509474baa590a4cd72d5424e51d8257b3d44325bc4c5063a0033c86ebbe99ed7212184c19944d082a115379dd4cece973faa0bca6485bd25f3744a719e70aa0291e1b5a96e637c140616a98263357c76b6eb0083fe51414e386870d0fdc7dd9abe4ff6fb5bbf1e7b15dac3e08e2615f655c3104ceb32a4cc2c9e9c43cf282d346ac253ccc46b635ae040973b49735720ffb890469a567c5824e0c00d7ccd5509a718092a906461c4d6163eaf422418f5fc6e009fc3f529ac61a2f89bb8e0ed45d940c4c2331ff8d8e1d6d58d417d8fc2656a02e8701aee75aed918724eebe4a2cf4744c5c401e217023df68a6f6a0228bd05a679a697d8de7036b9ed269090d3c65486afb91e27954eb15b964665ede7ad008f12fb3a9d0e69c13b4254f43819e0818a4195f68b8a38ae81f3fcb1879c95ab4cd0ffc38e381089260cca967ace5a085b457ab5eb363852101377570f9ac9e38\",\n        \"signature\": \"c634ea7bf72e895a2e796e2834201415b8b45e05e045559284eb9052c0e84f62a5a9f0c9764f7576788c7228b19ef517c195497325a48a9344b147c12fd75509\"\n    },\n    {\n        \"secret_key\": \"5547f1004baedfce5cfc0850b05302374aad24f6163994ecd751df3af3c10620\",\n        \"public_key\": \"7ce620787385ee1951ac49a77352ee0d6f8c5cd47df74e9e3216a6324fc7cf7f\",\n        \"message\": \"a6c17eeb5b8066c2cd9a89667317a945a0c7c96996e77ae854c509c6cd0631e922ad04503af87a3c4628adafed7600d071c078a22e7f64bda08a362b38b26ca15006d38acf532d0dedea4177a2d33f06956d80e963848ec791b2762fa99449b4f1a1ed9b3f2580be3ac7d7f52fb14421d6222ba76f807750c6cbb0b16f0895fc73d9dfc587e1a9e5d1e58375fbab705b8f0c1fd7df8b3ad446f2f08459e7ed1af59556fbc966dc249c1cf604f3e677c8a09d4363608774bf3811bef0642748c55c516c7a580fa3499050acb30eed870d0d91174cb623e98c3ad121cf81f04e57d49b008424a98a31eeaaf5f38e000f903d48d215ed52f862d636a5a73607de85760167267efe30f8a26ebc5aa0c09f5b258d3361ca69d1d7ee07b59648179ab2170ec50c07f6616f216872529421a6334a4a1ed3d2671ef47bc9a92afb58314e832db8a9003408a0487503fe4f67770dd4b6\",\n        \"signed\": \"29df3ad589009c667baa5e72dabb4e53cb7876de4e7efe5cc21ead7fa878db57f97c1103ddb39a861eb88653c1d4ec3b4306e4584b47b8bc90423119e7e4af00a6c17eeb5b8066c2cd9a89667317a945a0c7c96996e77ae854c509c6cd0631e922ad04503af87a3c4628adafed7600d071c078a22e7f64bda08a362b38b26ca15006d38acf532d0dedea4177a2d33f06956d80e963848ec791b2762fa99449b4f1a1ed9b3f2580be3ac7d7f52fb14421d6222ba76f807750c6cbb0b16f0895fc73d9dfc587e1a9e5d1e58375fbab705b8f0c1fd7df8b3ad446f2f08459e7ed1af59556fbc966dc249c1cf604f3e677c8a09d4363608774bf3811bef0642748c55c516c7a580fa3499050acb30eed870d0d91174cb623e98c3ad121cf81f04e57d49b008424a98a31eeaaf5f38e000f903d48d215ed52f862d636a5a73607de85760167267efe30f8a26ebc5aa0c09f5b258d3361ca69d1d7ee07b59648179ab2170ec50c07f6616f216872529421a6334a4a1ed3d2671ef47bc9a92afb58314e832db8a9003408a0487503fe4f67770dd4b6\",\n        \"signature\": \"29df3ad589009c667baa5e72dabb4e53cb7876de4e7efe5cc21ead7fa878db57f97c1103ddb39a861eb88653c1d4ec3b4306e4584b47b8bc90423119e7e4af00\"\n    },\n    {\n        \"secret_key\": \"3dd7203c237aefe9e38a201ff341490179905f9f100828da18fcbe58768b5760\",\n        \"public_key\": \"f067d7b2ff3a957e8373a7d42ef0832bcda84ebf287249a184a212a94c99ea5b\",\n        \"message\": \"db28ed31ac04b0c2decee7a6b24fc9a082cc262ca7ccf2a247d6372ec3e9120ecedb4542ea593fea30335c5ab9dd318a3b4fd5834299cf3f53d9ef46137b273c390ec3c26a0b4470d0d94b77d82cae4b24587837b167bb7f8166710baeb3ee70af797316cb7d05fa57e468ae3f0bd449404d8528808b41fcca62f5e0a2aa5d8f3acab008cc5f6e5ab02777bdcde87f0a10ef06a4bb37fe02c94815cf76bfb8f5cdd865cc26dcb5cf492edfd547b535e2e6a6d8540956dcba62cfea19a9474406e934337e454270e01036ac45793b6b8aceda187a08d56a2ce4e98f42ea375b101a6b9fcb4231d171aa463eeb43586a4b82a387bcddaf71a80fd5c1f7292efc2bd8e70c11eaa817106061b6c461c4883d613cc06c7e2a03f73d90fc55cdc07265eefd36be72270383d6c676cae37c93691f1ae3d927b3a1cd963e4229757ae5231eea73a9f71515628305410ac2593b325cc631\",\n        \"signed\": \"4c036935a96abc0d050d907bedbe9946fb97439f039c742e051ccf09add7df44d17da98c2ca01bdc2424da1e4debf347f8fff48ac8030d2cc07f9575c044be04db28ed31ac04b0c2decee7a6b24fc9a082cc262ca7ccf2a247d6372ec3e9120ecedb4542ea593fea30335c5ab9dd318a3b4fd5834299cf3f53d9ef46137b273c390ec3c26a0b4470d0d94b77d82cae4b24587837b167bb7f8166710baeb3ee70af797316cb7d05fa57e468ae3f0bd449404d8528808b41fcca62f5e0a2aa5d8f3acab008cc5f6e5ab02777bdcde87f0a10ef06a4bb37fe02c94815cf76bfb8f5cdd865cc26dcb5cf492edfd547b535e2e6a6d8540956dcba62cfea19a9474406e934337e454270e01036ac45793b6b8aceda187a08d56a2ce4e98f42ea375b101a6b9fcb4231d171aa463eeb43586a4b82a387bcddaf71a80fd5c1f7292efc2bd8e70c11eaa817106061b6c461c4883d613cc06c7e2a03f73d90fc55cdc07265eefd36be72270383d6c676cae37c93691f1ae3d927b3a1cd963e4229757ae5231eea73a9f71515628305410ac2593b325cc631\",\n        \"signature\": \"4c036935a96abc0d050d907bedbe9946fb97439f039c742e051ccf09add7df44d17da98c2ca01bdc2424da1e4debf347f8fff48ac8030d2cc07f9575c044be04\"\n    },\n    {\n        \"secret_key\": \"282775df9ebbd7c5a65f3a2b096e36ee64a8f8ea719da77758739e4e7476111d\",\n        \"public_key\": \"a2b49646033a13937cad6b0e914e3cec54989c252ca5643d076555d8c55e56e0\",\n        \"message\": \"14cc50c2973ea9d0187a73f71cb9f1ce07e739e049ec2b27e6613c10c26b73a2a966e01ac3be8b505aeaad1485c1c2a3c6c2b00f81b9e5f927b73bfd498601a7622e8544837aad02e72bf72196dc246902e58af253ad7e025e3666d3bfc46b5b02f0eb4a37c9554992abc8651de12fd813177379bb0ce172cd8aaf937f979642bc2ed7c7a430cb14c3cd3101b9f6b91ee3f542acdf017f8c2116297f4564768f4db95dad8a9bcdc8da4d8fb13ef6e2da0b1316d3c8c2f3ed836b35fe2fd33effb409e3bc1b0f85225d2a1de3bfc2d20563946475c4d7ca9fddbaf59ad8f8961d287ae7dd803e7af1fa612329b1bdc04e225600ae731bc01ae0925aed62ac50d46086f3646cf47b072f0d3b044b36f85cec729a8bb2b92883ca4dfb34a8ee8a0273b31af50982bb6131bfa11d55504b1f6f1a0a00438ca26d8ab4f48bcddc9d5a38851abede4151d5b70d720732a00abea2c8b979\",\n        \"signed\": \"15763973859402907d8dcb86adc24a2a168ba3abf2246173d6348afed51ef60b0c0edeff4e10bcef4c6e5778c8bc1f5e9ee0237373445b455155d23de127a20214cc50c2973ea9d0187a73f71cb9f1ce07e739e049ec2b27e6613c10c26b73a2a966e01ac3be8b505aeaad1485c1c2a3c6c2b00f81b9e5f927b73bfd498601a7622e8544837aad02e72bf72196dc246902e58af253ad7e025e3666d3bfc46b5b02f0eb4a37c9554992abc8651de12fd813177379bb0ce172cd8aaf937f979642bc2ed7c7a430cb14c3cd3101b9f6b91ee3f542acdf017f8c2116297f4564768f4db95dad8a9bcdc8da4d8fb13ef6e2da0b1316d3c8c2f3ed836b35fe2fd33effb409e3bc1b0f85225d2a1de3bfc2d20563946475c4d7ca9fddbaf59ad8f8961d287ae7dd803e7af1fa612329b1bdc04e225600ae731bc01ae0925aed62ac50d46086f3646cf47b072f0d3b044b36f85cec729a8bb2b92883ca4dfb34a8ee8a0273b31af50982bb6131bfa11d55504b1f6f1a0a00438ca26d8ab4f48bcddc9d5a38851abede4151d5b70d720732a00abea2c8b979\",\n        \"signature\": \"15763973859402907d8dcb86adc24a2a168ba3abf2246173d6348afed51ef60b0c0edeff4e10bcef4c6e5778c8bc1f5e9ee0237373445b455155d23de127a202\"\n    },\n    {\n        \"secret_key\": \"4730a5cf9772d7d6665ba787bea4c95252e6ecd63ec62390547bf100c0a46375\",\n        \"public_key\": \"f9f094f7cc1d40f1926b5b22dce465784468b20ab349bc6d4fdf78d0042bbc5b\",\n        \"message\": \"e7476d2e668420e1b0fadfbaa54286fa7fa890a87b8280e26078152295e1e6e55d1241435cc430a8693bb10cde4643f59cbfcc256f45f5090c909a14c7fc49d37bfc25af11e8f4c83f4c32d4aabf43b20fa382bb6622a1848f8ffc4dff3408bb4ec7c67a35b4cdaee5e279c0fc0a66093a9f36a60fdd65e6334a804e845c8530b6fda363b5640337d027243ccfb3c177f43e717896e46ead7f72ca06aa0ff1e77247121baf48be9a445f729ca1390fc46151cbd33fcbd7373f27a6ba55c92cbf6945b09b44b9a4e5800d403070ae66048997b2197f02181a097e563f9b9acc841139258a258bc610d3bd891637356b2edc8c184c35c65af91aaf7b1c16d74a5f5f862548139254ecf550631d5f8849afdb5b64cf366ff2633a93f3a18c39b5150245fb5f33c9e4e2d94af6963a70b88f9e7e519f8fa2a0f2e3749de883d0e6f052a949d0fc7153a8693f6d801d7352eb2f7a465c0e\",\n        \"signed\": \"552c7347bdfe131646ce0932d82a36d2c1b76d7c30ee890e0592e19f9d18b9a56f48d7a9b68c017da6b550c943af4a907baf317e419fbbc96f6cf4bfad42de00e7476d2e668420e1b0fadfbaa54286fa7fa890a87b8280e26078152295e1e6e55d1241435cc430a8693bb10cde4643f59cbfcc256f45f5090c909a14c7fc49d37bfc25af11e8f4c83f4c32d4aabf43b20fa382bb6622a1848f8ffc4dff3408bb4ec7c67a35b4cdaee5e279c0fc0a66093a9f36a60fdd65e6334a804e845c8530b6fda363b5640337d027243ccfb3c177f43e717896e46ead7f72ca06aa0ff1e77247121baf48be9a445f729ca1390fc46151cbd33fcbd7373f27a6ba55c92cbf6945b09b44b9a4e5800d403070ae66048997b2197f02181a097e563f9b9acc841139258a258bc610d3bd891637356b2edc8c184c35c65af91aaf7b1c16d74a5f5f862548139254ecf550631d5f8849afdb5b64cf366ff2633a93f3a18c39b5150245fb5f33c9e4e2d94af6963a70b88f9e7e519f8fa2a0f2e3749de883d0e6f052a949d0fc7153a8693f6d801d7352eb2f7a465c0e\",\n        \"signature\": \"552c7347bdfe131646ce0932d82a36d2c1b76d7c30ee890e0592e19f9d18b9a56f48d7a9b68c017da6b550c943af4a907baf317e419fbbc96f6cf4bfad42de00\"\n    },\n    {\n        \"secret_key\": \"2770aadd1d123e9547832dfb2a837eba089179ef4f23abc4a53f2a714e423ee2\",\n        \"public_key\": \"3c5fbb07530dd3a20ff35a500e3708926310fed8a899690232b42c15bd86e5dc\",\n        \"message\": \"a5cc2055eba3cf6f0c6332c1f2ab5854870913b03ff7093bc94f335add44332231d9869f027d82efd5f1227144ab56e3222dc3ddccf062d9c1b0c1024d9b416dfa3ee8a7027923003465e0ffaefb75b9f29dc6bcf213adc5e318fd8ba93a7aa5bfb495de9d7c5e1a196cd3a2d7721f8ba785aa9052a1811c7fcc8f93932765059cab9c9b718945895ef26f3ac048d4cabf91a9e6aa83ac14d43156827837914eb763a23cba53f60f150f4b70203ec1833ff105849457a8da7327661fb23a554164e05fcf0146b10674964be6f6aa0acc94c41ad57180e5180d199bd9102f55d740e81789b15671bbd0670e6de5d97e1ae626d8a0ebc32c8fd9d24737274e47d2dd5941a272e72a598928ad109cde937bf248d57f5d2942983c51e2a89f8f054d5c48dfad8fcf1ffa97f7de6a3a43ca15fc6720efaec69f0836d84223f9776d111ec2bbc69b2dfd58be8ca12c072164b718cd7c246d64\",\n        \"signed\": \"f267715e9a84c7314f2d5869ef4ab8d2149a13f7e8e1c728c423906293b49ce6283454dd1c7b04741df2eabedc4d6ab1397dc95a679df04d2c17d66c79bb7601a5cc2055eba3cf6f0c6332c1f2ab5854870913b03ff7093bc94f335add44332231d9869f027d82efd5f1227144ab56e3222dc3ddccf062d9c1b0c1024d9b416dfa3ee8a7027923003465e0ffaefb75b9f29dc6bcf213adc5e318fd8ba93a7aa5bfb495de9d7c5e1a196cd3a2d7721f8ba785aa9052a1811c7fcc8f93932765059cab9c9b718945895ef26f3ac048d4cabf91a9e6aa83ac14d43156827837914eb763a23cba53f60f150f4b70203ec1833ff105849457a8da7327661fb23a554164e05fcf0146b10674964be6f6aa0acc94c41ad57180e5180d199bd9102f55d740e81789b15671bbd0670e6de5d97e1ae626d8a0ebc32c8fd9d24737274e47d2dd5941a272e72a598928ad109cde937bf248d57f5d2942983c51e2a89f8f054d5c48dfad8fcf1ffa97f7de6a3a43ca15fc6720efaec69f0836d84223f9776d111ec2bbc69b2dfd58be8ca12c072164b718cd7c246d64\",\n        \"signature\": \"f267715e9a84c7314f2d5869ef4ab8d2149a13f7e8e1c728c423906293b49ce6283454dd1c7b04741df2eabedc4d6ab1397dc95a679df04d2c17d66c79bb7601\"\n    },\n    {\n        \"secret_key\": \"4fdab7c1600e70114b11f533242376af7614b4d5da046ac4bedea21d8a361598\",\n        \"public_key\": \"a25c9a94d6e4ecd95a4bd6805f762eb1c457a8d45d243238b1839cbba8f441cc\",\n        \"message\": \"da405890d11a872c119dab5efcbff61e931f38eccca457edc626d3ea29ed4fe3154fafec1444da74343c06ad90ac9d17b511bcb73bb49d90bafb7c7ea800bd58411df1275c3cae71b700a5dab491a4261678587956aa4a219e1ac6dd3fb2cb8c46197218e726dc7ed234526a6b01c0d72cb93ab3f4f38a08e5940b3f61a72ad2789a0532000fac1d2d2e3ad632ac8b62bb3ff5b99d53597bf4d44b19674924df9b3db3d0253f74627ccab30031c85e291c58b5fa9167522a46746fc307036745d4f9817786e5d300e6c5d503125fea01dec3e3fedbf3861ca2627a0518fb2b24e5a7a014178719e9b345f7b249ce3a413280c8deb674f59a25be92a8ab6400c7c52b0728ae34e22b2ec200c1cbaba2ccd8af29249d17af60c36007a722fc80258a7bebab1cdaad7462a8b7588c2f7e27c6d07afcf60117fed11bd6859e75e3b4fcee3981881e95dd116827dd4b369af069d3c8f2676f8a\",\n        \"signed\": \"5075c090cfbeb6b01802af7f4da5aa4f434d5ee2f3530eebb75c85e08621f83edc08aa96693894a4277633ba81e19e9e55af5c495daa5e1a6f8cbb79c01c7207da405890d11a872c119dab5efcbff61e931f38eccca457edc626d3ea29ed4fe3154fafec1444da74343c06ad90ac9d17b511bcb73bb49d90bafb7c7ea800bd58411df1275c3cae71b700a5dab491a4261678587956aa4a219e1ac6dd3fb2cb8c46197218e726dc7ed234526a6b01c0d72cb93ab3f4f38a08e5940b3f61a72ad2789a0532000fac1d2d2e3ad632ac8b62bb3ff5b99d53597bf4d44b19674924df9b3db3d0253f74627ccab30031c85e291c58b5fa9167522a46746fc307036745d4f9817786e5d300e6c5d503125fea01dec3e3fedbf3861ca2627a0518fb2b24e5a7a014178719e9b345f7b249ce3a413280c8deb674f59a25be92a8ab6400c7c52b0728ae34e22b2ec200c1cbaba2ccd8af29249d17af60c36007a722fc80258a7bebab1cdaad7462a8b7588c2f7e27c6d07afcf60117fed11bd6859e75e3b4fcee3981881e95dd116827dd4b369af069d3c8f2676f8a\",\n        \"signature\": \"5075c090cfbeb6b01802af7f4da5aa4f434d5ee2f3530eebb75c85e08621f83edc08aa96693894a4277633ba81e19e9e55af5c495daa5e1a6f8cbb79c01c7207\"\n    },\n    {\n        \"secret_key\": \"264504604e70d72dc4474dbb34913e9c0f806dfe18c7879a41762a9e4390ec61\",\n        \"public_key\": \"eb2b518ce7dc71c91f3665581651fd03af84c46bf1fed2433222353bc7ec511d\",\n        \"message\": \"901d70e67ed242f2ec1dda813d4c052cfb31fd00cfe5446bf3b93fdb950f952d94ef9c99d1c264a6b13c3554a264beb97ed20e6b5d66ad84db5d8f1de35c496f947a23270954051f8e4dbe0d3ef9ab3003dd47b859356cecb81c50affa68c15dadb5f864d5e1bb4d3bada6f3aba1c83c438d79a94bfb50b43879e9cef08a2bfb22fad943dbf7683779746e31c486f01fd644905048b112ee258042153f46d1c7772a0624bcd6941e9062cfda75dc8712533f4057335c298038cbca29ebdb560a295a88339692808eb3481fd9735ea414f620c143b2133f57bb64e44778a8ca70918202d157426102e1dfc0a8f7b1ae487b74f02792633154dfe74caa1b7088fda22fa8b9bc354c585f1567706e2955493870f54169e0d7691159df43897961d24a852ea970c514948f3b48f71ee586e72ec78db820f253e08db84f6f312c4333bd0b732fe75883507783e9a1fd4fbab8e5870f9bf7ad58aa\",\n        \"signed\": \"eea439a00f7e459b402b835150a779eed171ab971bd1b58dcc7f9386dadd583de8dc69e267121dde41f0f9493d450b16219cdf3c22f09482ce402fe17ca49e08901d70e67ed242f2ec1dda813d4c052cfb31fd00cfe5446bf3b93fdb950f952d94ef9c99d1c264a6b13c3554a264beb97ed20e6b5d66ad84db5d8f1de35c496f947a23270954051f8e4dbe0d3ef9ab3003dd47b859356cecb81c50affa68c15dadb5f864d5e1bb4d3bada6f3aba1c83c438d79a94bfb50b43879e9cef08a2bfb22fad943dbf7683779746e31c486f01fd644905048b112ee258042153f46d1c7772a0624bcd6941e9062cfda75dc8712533f4057335c298038cbca29ebdb560a295a88339692808eb3481fd9735ea414f620c143b2133f57bb64e44778a8ca70918202d157426102e1dfc0a8f7b1ae487b74f02792633154dfe74caa1b7088fda22fa8b9bc354c585f1567706e2955493870f54169e0d7691159df43897961d24a852ea970c514948f3b48f71ee586e72ec78db820f253e08db84f6f312c4333bd0b732fe75883507783e9a1fd4fbab8e5870f9bf7ad58aa\",\n        \"signature\": \"eea439a00f7e459b402b835150a779eed171ab971bd1b58dcc7f9386dadd583de8dc69e267121dde41f0f9493d450b16219cdf3c22f09482ce402fe17ca49e08\"\n    },\n    {\n        \"secret_key\": \"2ca7447a3668b748b1fd3d52d2080d30e34d397bb2846caf8f659ac168788ca5\",\n        \"public_key\": \"ab331cd40a31d0173c0c8c1c17002532807bf89e3edb6d34c2dd8294632b9fbc\",\n        \"message\": \"a82bcd9424bffda0f2f5e9eae17835dbe468f61b785aab82934737a91c5f602cb7c617cdffe87cad726a4972e15a7b8ee147f062d2a5a4d89706b571fa8aa2b95981c78abeaaae86203fa2c0e07297406ea8c27111a86dbe1d5a7c3b7ae930904d9890f6d4abebd1412a73ad5feea64acf065d3e63b5cbe20cf20bbd2d8b94f9053ed5f66633482530124446605918de66455e8cf4b101a127233c4e27d5d55bf95bd3195d0340d43531fc75faf8dded5275bf89750de838fd10c31745be4ca41fa871cb0f9b016706a1a7e3c44bb90ac7a8ad51e272389292fd6c98ad7a069e76e3f5f3e0cc770b9e9b35a765d0d93712d7cdabd17e5d01dd8183af4ad9365db0a0fa41381fce60a081df1c5ab0f8c18f95a7a8b582dfff7f149ea579df0623b33b7508f0c663f01e3a2dcd9dfbee51cc615220fdaffdab51bdae42cb9f7fa9e3b7c69cc8ada5ccd642529ba514fdc54fcf2720b8f5d08b95\",\n        \"signed\": \"f93ada15ae9cd2b54f26f86f0c28392aed5eb6b6b44d01a4e33a54e7da37c38e8d53366f73fd85be642e4ec81236d163f0d025e76c8bbdd65d43df49f09c1f01a82bcd9424bffda0f2f5e9eae17835dbe468f61b785aab82934737a91c5f602cb7c617cdffe87cad726a4972e15a7b8ee147f062d2a5a4d89706b571fa8aa2b95981c78abeaaae86203fa2c0e07297406ea8c27111a86dbe1d5a7c3b7ae930904d9890f6d4abebd1412a73ad5feea64acf065d3e63b5cbe20cf20bbd2d8b94f9053ed5f66633482530124446605918de66455e8cf4b101a127233c4e27d5d55bf95bd3195d0340d43531fc75faf8dded5275bf89750de838fd10c31745be4ca41fa871cb0f9b016706a1a7e3c44bb90ac7a8ad51e272389292fd6c98ad7a069e76e3f5f3e0cc770b9e9b35a765d0d93712d7cdabd17e5d01dd8183af4ad9365db0a0fa41381fce60a081df1c5ab0f8c18f95a7a8b582dfff7f149ea579df0623b33b7508f0c663f01e3a2dcd9dfbee51cc615220fdaffdab51bdae42cb9f7fa9e3b7c69cc8ada5ccd642529ba514fdc54fcf2720b8f5d08b95\",\n        \"signature\": \"f93ada15ae9cd2b54f26f86f0c28392aed5eb6b6b44d01a4e33a54e7da37c38e8d53366f73fd85be642e4ec81236d163f0d025e76c8bbdd65d43df49f09c1f01\"\n    },\n    {\n        \"secret_key\": \"494ea9bcce26885b7d17d1fc114448f239f0ce46e5f247b4c999fa8629692472\",\n        \"public_key\": \"6901e5efae57536ba5fdd96b59657359065f25d391a1aa8cdc0d38bb5d53c139\",\n        \"message\": \"3badbfa5f5a8aa2cce0a60e686cdce654d24452f98fd54872e7395b39464380a0e185557ea134d095730864f4254d3dd946970c10c804fcc0899dfa024205be0f80b1c75449523324fe6a0751e47b4ff4822b8c33e9eaf1d1d96e0de3d4acd89696b7fcc03d49f92f82b9725700b350db1a87615369545561b8599f5ea920a310a8bafc0e8d7468cbf6f3820e943594afdd5166e4e3309dddd7694ef67e694f34fc62724ff96ac3364176f34e8a02b4cf569db5b8f77d58512aedabf0bcd1c2df12db3a9473f948c5c3243309aae46c49efd088b60f31a8a72ad7e5a35acc5d89fa66807eb5d3ba9cdf08d4753cb85089ee36f5c96b432b6928352afad58012225d6157f9e3611426df921b6d1d8374628a63031e9ffb90e42ffbba021f174f68503155430152c9155dc98ffa26c4fab065e1f8e4622c2f28a8cb043110b617441140f8e20adc16f799d1d5096b1f50532be5042d21b81ea46c7\",\n        \"signed\": \"548a093a680361b7dc56f14503b55eeec3b3f4fd4ca99d6aedce0830f7f4ae2f7328539b34c48fc9760922333dae9c7c017e7db73b8faa6c06be05e347992b063badbfa5f5a8aa2cce0a60e686cdce654d24452f98fd54872e7395b39464380a0e185557ea134d095730864f4254d3dd946970c10c804fcc0899dfa024205be0f80b1c75449523324fe6a0751e47b4ff4822b8c33e9eaf1d1d96e0de3d4acd89696b7fcc03d49f92f82b9725700b350db1a87615369545561b8599f5ea920a310a8bafc0e8d7468cbf6f3820e943594afdd5166e4e3309dddd7694ef67e694f34fc62724ff96ac3364176f34e8a02b4cf569db5b8f77d58512aedabf0bcd1c2df12db3a9473f948c5c3243309aae46c49efd088b60f31a8a72ad7e5a35acc5d89fa66807eb5d3ba9cdf08d4753cb85089ee36f5c96b432b6928352afad58012225d6157f9e3611426df921b6d1d8374628a63031e9ffb90e42ffbba021f174f68503155430152c9155dc98ffa26c4fab065e1f8e4622c2f28a8cb043110b617441140f8e20adc16f799d1d5096b1f50532be5042d21b81ea46c7\",\n        \"signature\": \"548a093a680361b7dc56f14503b55eeec3b3f4fd4ca99d6aedce0830f7f4ae2f7328539b34c48fc9760922333dae9c7c017e7db73b8faa6c06be05e347992b06\"\n    },\n    {\n        \"secret_key\": \"00d735ebaee75dd579a40dfd82508274d01a1572df99b811d5b01190d82192e4\",\n        \"public_key\": \"ba02517c0fdd3e2614b3f7bf99ed9b492b80edf0495d230f881730ea45bc17c4\",\n        \"message\": \"59c0b69af95d074c88fdc8f063bfdc31b5f4a9bc9cecdffa8128e01e7c1937dde5eb0570b51b7b5d0a67a3555b4cdce2bca7a31a4fe8e1d03ab32b4035e6dadbf1532059ee01d3d9a7633a0e706a1154cab22a07cd74c06a3cb601244cf3cf35a35c3100ba47f31372a2da65dcff0d7a80a1055d8aa99212e899aad7f02e949e6fee4d3c9cefa85069eaff1f6ad06fc300c871ab82b2bedb934d20875c2a263242cdb7f9be192a8710b24c7ea98d43daec8baa5553c678a38f0e0adf7d3ff2dcc799a1dbad6eab1c3d9458a9db922f02e75cfab9d65c7336dae71895d5bb15cac203f2b38b9996c410f8655ad22d3c091c20b7f926d45e780128f19747462abc5c58932fbb9e0bc62d53868802f1b083f183b8a1f9434986d5cf97c04e2f3e145730cba98779c7fed0cab1c05d5e4653c6c3f6736260bc78ee4372862ffe9e90371d762c7432781f35ced884a4baca05653ef25f25a6f3d5628308\",\n        \"signed\": \"dcdc54611937d2bd06cacd9818b3be15ce7425427a75f50d197a337a3b8ba6714ef48866f243bd5ac7415e914517a2c1c5a953f432b99db0e620d64f74eb850559c0b69af95d074c88fdc8f063bfdc31b5f4a9bc9cecdffa8128e01e7c1937dde5eb0570b51b7b5d0a67a3555b4cdce2bca7a31a4fe8e1d03ab32b4035e6dadbf1532059ee01d3d9a7633a0e706a1154cab22a07cd74c06a3cb601244cf3cf35a35c3100ba47f31372a2da65dcff0d7a80a1055d8aa99212e899aad7f02e949e6fee4d3c9cefa85069eaff1f6ad06fc300c871ab82b2bedb934d20875c2a263242cdb7f9be192a8710b24c7ea98d43daec8baa5553c678a38f0e0adf7d3ff2dcc799a1dbad6eab1c3d9458a9db922f02e75cfab9d65c7336dae71895d5bb15cac203f2b38b9996c410f8655ad22d3c091c20b7f926d45e780128f19747462abc5c58932fbb9e0bc62d53868802f1b083f183b8a1f9434986d5cf97c04e2f3e145730cba98779c7fed0cab1c05d5e4653c6c3f6736260bc78ee4372862ffe9e90371d762c7432781f35ced884a4baca05653ef25f25a6f3d5628308\",\n        \"signature\": \"dcdc54611937d2bd06cacd9818b3be15ce7425427a75f50d197a337a3b8ba6714ef48866f243bd5ac7415e914517a2c1c5a953f432b99db0e620d64f74eb8505\"\n    },\n    {\n        \"secret_key\": \"8c34b905440b61911d1d8137c53d46a1a76d4609af973e18eb4c5709295627bb\",\n        \"public_key\": \"b69a8b2fdf5c20e734c2ffb294bc8ae1011d664f11afe7fbc471925cf72fa99d\",\n        \"message\": \"30b57a389b48a0beb1a48432bff6b314bded79c4a1763a5acb57cea1bfb4c6d016cf090f5bd05bbd114e33ae7c17782dfa264f46c45f8c599c603016fe9ff05b6b5a99e92fe713a4cd5c41b292ed2bb2e9cf33a440542e821ec82cbf665c3f02e3dc337d7fdb58e31b27cb2954541468814698510df18c85c81fad12db11ec6b966f4930da5646b991db97445097da30dab61cda53a41083cb96add19de6c5eec323bca9d3530e38c00b35af7360077601be6ac97f3030f930a27b90fe8b6911bae389065adc15e1882300e2a003274d23182d5efd5ba4b9130c07bd5c65fecb8b5cb7eb38836b318befdfd77de4d6ca0181f77ae5740891683225f549dd8426145c97c5818c319f7ab2d868e1a41ceab64c085116069897bf2ca3667652406155ed0646431b6de1ccc03b4279ae4d326679265dce82048e7298e1f87fcec0768ac0f5d8ff84f7210be54d411af8edea7217f4e59413121e148c60da\",\n        \"signed\": \"3e0b72073dc9375eedcca6c4fc1cd315938a050c92716bd2284f4629a962beec0b7d7cf16ab923d58f5b90d3901a8e5c75c8f17dab9998e007d8c49511973d0e30b57a389b48a0beb1a48432bff6b314bded79c4a1763a5acb57cea1bfb4c6d016cf090f5bd05bbd114e33ae7c17782dfa264f46c45f8c599c603016fe9ff05b6b5a99e92fe713a4cd5c41b292ed2bb2e9cf33a440542e821ec82cbf665c3f02e3dc337d7fdb58e31b27cb2954541468814698510df18c85c81fad12db11ec6b966f4930da5646b991db97445097da30dab61cda53a41083cb96add19de6c5eec323bca9d3530e38c00b35af7360077601be6ac97f3030f930a27b90fe8b6911bae389065adc15e1882300e2a003274d23182d5efd5ba4b9130c07bd5c65fecb8b5cb7eb38836b318befdfd77de4d6ca0181f77ae5740891683225f549dd8426145c97c5818c319f7ab2d868e1a41ceab64c085116069897bf2ca3667652406155ed0646431b6de1ccc03b4279ae4d326679265dce82048e7298e1f87fcec0768ac0f5d8ff84f7210be54d411af8edea7217f4e59413121e148c60da\",\n        \"signature\": \"3e0b72073dc9375eedcca6c4fc1cd315938a050c92716bd2284f4629a962beec0b7d7cf16ab923d58f5b90d3901a8e5c75c8f17dab9998e007d8c49511973d0e\"\n    },\n    {\n        \"secret_key\": \"77a83e18c9f000eeff7deeac959ecba2206c0aa39d2f0e2aed5729482a7a0229\",\n        \"public_key\": \"62b1b316135596bfbca6037ed847c61fb7f09fa36ce90abb7789b86f768b59dd\",\n        \"message\": \"f3d5fa2acaefd858f1df26e03059cdcbc2468ad74afc993d0db9c4cde4113f8d55c7da71d38ba06520531c61fddb5f33d5f0353be2376e580711be45c0a30b1fa01b55e228c6fa35e3f95b67909fc7df3fd464d93d661a926f9d11f7550c17fbcc3496526e8f10e0c8916677b2be5b319b688f21e81aaa9482e5c93e64ce8c437b9c1e14fefed70a3fee568811dc31cadab3d5b220254465336dc4d97a3bd096b5e065e0cfbe82849e2c1905aca486533f0da7a61f1e9a55b8e2a83262deeb59f2b13d3a8aef5700845b83b25ae2183c0ddac0ce42f8d25674cb0d0d220a6de7c1858bb07d59a3372344d944602aa451d2b937db0fe6feca0beba81721fc361ea7509e2b6d397e1c191b56f54ab436d0d27ab4c061bd661ad1a4452387e8735754d07fa7ef4d4548b172582425b299046e6301b5ba6b914418f149cf722e10bde2e0d41700f12c8429fc897b7819da92292240cd45565458c9a7b29c12\",\n        \"signed\": \"1eaad8420ac12c99ac1ff4476678e3cbbe94da6a797f174664d5ee0f641433fb1e7cb2f5613e10805df8654cd8e0d45d96230932bc7f20b04eae836435134309f3d5fa2acaefd858f1df26e03059cdcbc2468ad74afc993d0db9c4cde4113f8d55c7da71d38ba06520531c61fddb5f33d5f0353be2376e580711be45c0a30b1fa01b55e228c6fa35e3f95b67909fc7df3fd464d93d661a926f9d11f7550c17fbcc3496526e8f10e0c8916677b2be5b319b688f21e81aaa9482e5c93e64ce8c437b9c1e14fefed70a3fee568811dc31cadab3d5b220254465336dc4d97a3bd096b5e065e0cfbe82849e2c1905aca486533f0da7a61f1e9a55b8e2a83262deeb59f2b13d3a8aef5700845b83b25ae2183c0ddac0ce42f8d25674cb0d0d220a6de7c1858bb07d59a3372344d944602aa451d2b937db0fe6feca0beba81721fc361ea7509e2b6d397e1c191b56f54ab436d0d27ab4c061bd661ad1a4452387e8735754d07fa7ef4d4548b172582425b299046e6301b5ba6b914418f149cf722e10bde2e0d41700f12c8429fc897b7819da92292240cd45565458c9a7b29c12\",\n        \"signature\": \"1eaad8420ac12c99ac1ff4476678e3cbbe94da6a797f174664d5ee0f641433fb1e7cb2f5613e10805df8654cd8e0d45d96230932bc7f20b04eae836435134309\"\n    },\n    {\n        \"secret_key\": \"73b03373ef1fd849005ecd6270dd9906f19f4439e40376cdbc520902bc976812\",\n        \"public_key\": \"663719e08ba3ba1666f6069a3f54991866b18cc6be41991b02eb3026ff9e155f\",\n        \"message\": \"d5c2deaba795c30aba321bc7de6996f0d90e4d05c747fb4dae8f3451895def6e16e72f38eace756f36635f8fb0b72a3a0c1f54663817a94d4fd346f835ab0e657f001a6f2cecb86d0825bd02639254f7f7f38ca99dbb86c64a633f73baf933aae3563281f4005e2d0e7cec9fbde8e588a957e211068be65b3d3d35bf4e8d5bb3478333df9ced9b2abaf48697994a145e9321499fc5ee560f4fbb6849e1ae8eb3d1de0083a21a03f6a6b28176f0130d3895e50e75e3d7d0947a7bc2c5b9ff69895d27791442ba8d0f2180712b567f712ea912f3b0d92c19342e0106ff1d87b46ad33af300b90855ba9769d366e79425d98e4de19905a04577707cbe625b84691781cd26bf62260b4a8bd605f77af6f970e1b3a112e8918344bd0d8d2e41dfd2ce9895b0246e50887aa3a577ff73be4b6ae60feb0ca36f6a5f8171ed209e5c566529c0940d9b4bd744ccee56e54a9a0c6e4da520dd315c2872b02db563703e\",\n        \"signed\": \"a40abe98fc69da8a1ff9ff5c2cca93632e975980ee8b82c3c376022d6524ab736d01b072f2b681b5f1cd3ea067012ed6d074e949c42327a366caa9e4750a3c08d5c2deaba795c30aba321bc7de6996f0d90e4d05c747fb4dae8f3451895def6e16e72f38eace756f36635f8fb0b72a3a0c1f54663817a94d4fd346f835ab0e657f001a6f2cecb86d0825bd02639254f7f7f38ca99dbb86c64a633f73baf933aae3563281f4005e2d0e7cec9fbde8e588a957e211068be65b3d3d35bf4e8d5bb3478333df9ced9b2abaf48697994a145e9321499fc5ee560f4fbb6849e1ae8eb3d1de0083a21a03f6a6b28176f0130d3895e50e75e3d7d0947a7bc2c5b9ff69895d27791442ba8d0f2180712b567f712ea912f3b0d92c19342e0106ff1d87b46ad33af300b90855ba9769d366e79425d98e4de19905a04577707cbe625b84691781cd26bf62260b4a8bd605f77af6f970e1b3a112e8918344bd0d8d2e41dfd2ce9895b0246e50887aa3a577ff73be4b6ae60feb0ca36f6a5f8171ed209e5c566529c0940d9b4bd744ccee56e54a9a0c6e4da520dd315c2872b02db563703e\",\n        \"signature\": \"a40abe98fc69da8a1ff9ff5c2cca93632e975980ee8b82c3c376022d6524ab736d01b072f2b681b5f1cd3ea067012ed6d074e949c42327a366caa9e4750a3c08\"\n    },\n    {\n        \"secret_key\": \"eab179e41ed5c889ffe6aabdc054faf1307c395e46e313e17a14fe01023ffa30\",\n        \"public_key\": \"86f34746d3f7a01ddbe322f1aca56d22856d38733a3a6900bb08e776450ec803\",\n        \"message\": \"971095cebe5031530224387c5c31966e389b8566390054cf45264b44e18964b7be52c33c4ffb259af16283438fa15dd66bc7791b7533ef10cb0beab524a6437626f4cc74512851adcc2fb129055a482c61107383fb7c5241831d5551634eef0dc0b8f9053a00971aa8fa1ae0898e4b481b6707e97c0f942040b339d92fc17bbade74675af243d8b2dafb15b1db55d12415b85f3037291930ab61600ba3431f8eb425be4491614728af101e81c091f348bc5ffd1bde6ae6cad5c15b3aa7358078cc4effb54a86e7f0e0c55e4cfe0a54605ed443fdf2aaba016585da617e77341d52889d75dd540d39fe8b7993ed705cfddea0cb0d5a731d6bfcdb816afaff47e963eedebdf241af5593353d6d401a34f029a8cdeb1904cc2caa4f9635cc2ba6b7b1a29da625ffc383be2f5a8f1fa4f39b2d4b4f4c2d8838ce258a04d4a120493fdf07f68c0ffd1c16b768a35c55fea2cac696b5c20efc10865cde8a64627dcd\",\n        \"signed\": \"143cb28027c2f82e375e5f340e7fe6e60ce7bd51000b49c74168af85e26ed2ed630ed2672090164cc54b052da694ebdd21a21b3053f4dcfd7895ea5f6c8aa80d971095cebe5031530224387c5c31966e389b8566390054cf45264b44e18964b7be52c33c4ffb259af16283438fa15dd66bc7791b7533ef10cb0beab524a6437626f4cc74512851adcc2fb129055a482c61107383fb7c5241831d5551634eef0dc0b8f9053a00971aa8fa1ae0898e4b481b6707e97c0f942040b339d92fc17bbade74675af243d8b2dafb15b1db55d12415b85f3037291930ab61600ba3431f8eb425be4491614728af101e81c091f348bc5ffd1bde6ae6cad5c15b3aa7358078cc4effb54a86e7f0e0c55e4cfe0a54605ed443fdf2aaba016585da617e77341d52889d75dd540d39fe8b7993ed705cfddea0cb0d5a731d6bfcdb816afaff47e963eedebdf241af5593353d6d401a34f029a8cdeb1904cc2caa4f9635cc2ba6b7b1a29da625ffc383be2f5a8f1fa4f39b2d4b4f4c2d8838ce258a04d4a120493fdf07f68c0ffd1c16b768a35c55fea2cac696b5c20efc10865cde8a64627dcd\",\n        \"signature\": \"143cb28027c2f82e375e5f340e7fe6e60ce7bd51000b49c74168af85e26ed2ed630ed2672090164cc54b052da694ebdd21a21b3053f4dcfd7895ea5f6c8aa80d\"\n    },\n    {\n        \"secret_key\": \"fbf146ebd51075570ec51ac410ae9f391db75b610ada6362b4dbd949656cfb66\",\n        \"public_key\": \"be7c2f5b21d746c8ea3245ce6f268e9da74e00fa85c9c475260c68fa1af6361f\",\n        \"message\": \"cd7ad4f17fcff73acc402dc102d09079b29aaf2a0f4b27cf6beeb1e2b23d19ab47deb3ae1becd68861ea279c46691738f4fff47c43047c4f8b56b6bbcc3fde0723d44120dcd307a6310dc4f366b8f3cd52db19b8266a487f7872391c45fe0d3248a7abf2c20022d3769547f683067dcc363cd22fd7cda3cadc15804056f0e2aa2b795008c598be7a961805e6df291ba3041c47ff5640275f46e6ae82092d21abcbcfba11e730216008822de3ce462400596da79f7ae5d1df8389112ad98868fa94fb0546bfe6a67aa8d28c4d32072d2eadd6256255f18c2382e662dfa922a680e06a43622c4871d27d1807f7b2703070c83db8dd929c06038b2183cb8e2b9ec4c778d7ecf9e9ffac77fa7737b055feac2e7982aeeec0b72f1bbca2424e1a844bbac79cb2e7400f81dc449d0560b521a7c16bb4167e6696586058a9b8ed2e5116690b77f2a17e5c0b16a83dcbd2e24552293e258b32ba7f844944379342698627\",\n        \"signed\": \"6768006fe0f201b217dd10eb05d4b82adcfeb2ecfc8373c3308f4150394811eb60491881a2e53d1289d96478e18a64c34b2a19832cdccfd96a2e4a0c469fdc0bcd7ad4f17fcff73acc402dc102d09079b29aaf2a0f4b27cf6beeb1e2b23d19ab47deb3ae1becd68861ea279c46691738f4fff47c43047c4f8b56b6bbcc3fde0723d44120dcd307a6310dc4f366b8f3cd52db19b8266a487f7872391c45fe0d3248a7abf2c20022d3769547f683067dcc363cd22fd7cda3cadc15804056f0e2aa2b795008c598be7a961805e6df291ba3041c47ff5640275f46e6ae82092d21abcbcfba11e730216008822de3ce462400596da79f7ae5d1df8389112ad98868fa94fb0546bfe6a67aa8d28c4d32072d2eadd6256255f18c2382e662dfa922a680e06a43622c4871d27d1807f7b2703070c83db8dd929c06038b2183cb8e2b9ec4c778d7ecf9e9ffac77fa7737b055feac2e7982aeeec0b72f1bbca2424e1a844bbac79cb2e7400f81dc449d0560b521a7c16bb4167e6696586058a9b8ed2e5116690b77f2a17e5c0b16a83dcbd2e24552293e258b32ba7f844944379342698627\",\n        \"signature\": \"6768006fe0f201b217dd10eb05d4b82adcfeb2ecfc8373c3308f4150394811eb60491881a2e53d1289d96478e18a64c34b2a19832cdccfd96a2e4a0c469fdc0b\"\n    },\n    {\n        \"secret_key\": \"dff0eb6b426dea2fd33c1d3fc24df9b31b486facb7edb8502954a3e8da99d9fd\",\n        \"public_key\": \"c245085ece69fb9aa560d0c27fdb634f7a840d41d8463660fbe82483b0f3cc3a\",\n        \"message\": \"e7c9e313d86160f4c74aa0ae07369ee22b27f81b3f69097affae28dae48483fb52a5c062306b59610f5cdbff6332b1960cd6f2b8f7b41578c20f0bc9637a0fdfc739d61f699a573f1c1a0b49294506cf4487965e5bb07bbf81803cb3d5cb3829c66c4bee7fc800ede216150934d277dea50edb097b992f11bb669fdf140bf6ae9fec46c3ea32f888fde9d154ea84f01c51265a7d3fef6eefc1ccdbffd1e2c897f05546a3b1ca11d9517cd667c660ec3960f7a8e5e80202a78d3a388b92f5c1dee14ae6acf8e17c841c9557c35a2eeced6e6af6372148e483ccd06c8fe344924e1019fb91cbf7941b9a176a073415867210670410c5dbd0ac4a50e6c0a509ddfdc555f60d696d41c77db8e6c84d5181f872755e64a721b061fcd68c463db4d32c9e01ea501267de22879d7fc12c8ca0379edb45abaa6e64dda2af6d40ccf24fbebad7b5a8d3e52007945ecd3ddc1e3efeb522581ac80e98c863ba0c590a3ed95cd1\",\n        \"signed\": \"6b48b10f545ddb7a89cd5829f4e5b20146cf6bc96e550d06f65de8bdae7ccdded26cd630f86c9266bccf88e924033e04f83a54f8290d7f734cf8673cca8f9703e7c9e313d86160f4c74aa0ae07369ee22b27f81b3f69097affae28dae48483fb52a5c062306b59610f5cdbff6332b1960cd6f2b8f7b41578c20f0bc9637a0fdfc739d61f699a573f1c1a0b49294506cf4487965e5bb07bbf81803cb3d5cb3829c66c4bee7fc800ede216150934d277dea50edb097b992f11bb669fdf140bf6ae9fec46c3ea32f888fde9d154ea84f01c51265a7d3fef6eefc1ccdbffd1e2c897f05546a3b1ca11d9517cd667c660ec3960f7a8e5e80202a78d3a388b92f5c1dee14ae6acf8e17c841c9557c35a2eeced6e6af6372148e483ccd06c8fe344924e1019fb91cbf7941b9a176a073415867210670410c5dbd0ac4a50e6c0a509ddfdc555f60d696d41c77db8e6c84d5181f872755e64a721b061fcd68c463db4d32c9e01ea501267de22879d7fc12c8ca0379edb45abaa6e64dda2af6d40ccf24fbebad7b5a8d3e52007945ecd3ddc1e3efeb522581ac80e98c863ba0c590a3ed95cd1\",\n        \"signature\": \"6b48b10f545ddb7a89cd5829f4e5b20146cf6bc96e550d06f65de8bdae7ccdded26cd630f86c9266bccf88e924033e04f83a54f8290d7f734cf8673cca8f9703\"\n    },\n    {\n        \"secret_key\": \"9f32958c7679b90fd5036056a75ec2eb2f56ec1effc7c012461dc89a3a167420\",\n        \"public_key\": \"1d7269dcb6d1f584e662d4ce251de0aba290ef78b97d448afb1e5333f1976d26\",\n        \"message\": \"a56ba86c71360504087e745c41627092ad6b49a71e9daa5640e1044bf04d4f071ad728779e95d1e2460584e6f0773545da82d4814c9189a120f12f3e3819813e5b240d0f26436f70ee353b4d20cea54a1460b5b8f1008d6f95f3aa2d8f1e908fced50d624e3a096938b9353854b96da463a2798a5a312ec790842c10c446e3350c764bf5c972593b9987bf23256daa8894d47f22e85b97607e66fc08a12c789c4746080368d321bb9015a1155b65523ad8e99bb989b44eac756b0734acd7c6357c70b59743246d1652d91b0f9896965141345b9945cf34980452f3502974edb76b9c785fb0f4395266b055f3b5db8aab68e9d7102a1cd9ee3d142504f0e88b282e603a738e051d98de05d1fcc65b5f7e99c4111cc0aec489abd0ecad311bfc13e7d1653b9c31e81c998037f959d5cd980835aa0e0b09bcbed634391151da02bc01a36c9a5800afb984163a7bb815edbc0226eda0595c724ca9b3f8a71178f0d20a5a\",\n        \"signed\": \"9881a5763bdb259a3fefbba3d957162d6c70b804fa94ab613406a6ec42505b8789465ca1a9a33e1895988842270c55e5bdd5483f6b17b31781b593507a6c1808a56ba86c71360504087e745c41627092ad6b49a71e9daa5640e1044bf04d4f071ad728779e95d1e2460584e6f0773545da82d4814c9189a120f12f3e3819813e5b240d0f26436f70ee353b4d20cea54a1460b5b8f1008d6f95f3aa2d8f1e908fced50d624e3a096938b9353854b96da463a2798a5a312ec790842c10c446e3350c764bf5c972593b9987bf23256daa8894d47f22e85b97607e66fc08a12c789c4746080368d321bb9015a1155b65523ad8e99bb989b44eac756b0734acd7c6357c70b59743246d1652d91b0f9896965141345b9945cf34980452f3502974edb76b9c785fb0f4395266b055f3b5db8aab68e9d7102a1cd9ee3d142504f0e88b282e603a738e051d98de05d1fcc65b5f7e99c4111cc0aec489abd0ecad311bfc13e7d1653b9c31e81c998037f959d5cd980835aa0e0b09bcbed634391151da02bc01a36c9a5800afb984163a7bb815edbc0226eda0595c724ca9b3f8a71178f0d20a5a\",\n        \"signature\": \"9881a5763bdb259a3fefbba3d957162d6c70b804fa94ab613406a6ec42505b8789465ca1a9a33e1895988842270c55e5bdd5483f6b17b31781b593507a6c1808\"\n    },\n    {\n        \"secret_key\": \"f86d6f766f88b00717b7d6327eb26cf3ceeba5385184426f9cfd8295e2421ff2\",\n        \"public_key\": \"cb1d250504754183704dbe21c323d66f9f9011758f6d8dab6f597b199662145b\",\n        \"message\": \"da8423a6b7a18f20aa1f90ed2331b17b24067c40175bc25d8109e21d87ac00528eb3b2f66a2b52dc7ef2f8cecb75c76099cfa23db8da897043ba1cce31e2dfea46075f5e073203eaeb3d62c84c107b6dab33a14eaf149aa61850c15f5a58d88a15aba9196f9e495e8dbecbcf7e8444f5dd72a08a099d7f6209990b562974ea829ef11d29a920e3a799d0d92cb50d50f817631ab09de97c31e9a05f4d78d649fcd93a83752078ab3bb0e16c564d4fb07ca923c0374ba5bf1eea7e73668e135031feafcbb47cbc2ae30ec16a39b9c337e0a62eecdd80c0b7a04924ac3972da4fa9299c14b5a53d37b08bf02268b3bac9ea9355090eeb04ad87bee0593ba4e4443dda38a97afbf2db9952df63f178f3b4c52bcc132be8d9e26881213abdeb7e1c44c4061548909f0520f0dd7520fc408ea28c2cebc0f53063a2d30570e05350e52b390dd9b67662984847be9ad9b4cd50b069ffd29dd9c62ef14701f8d012a4a70c8431cc\",\n        \"signed\": \"ec61c0b292203a8f1d87235ede92b74723c8d23408423773ae50b1e9bc4464e03e446da9dce4c39f6dd159bea26c009ed00120bc36d4a247dc0d24bcefcc110cda8423a6b7a18f20aa1f90ed2331b17b24067c40175bc25d8109e21d87ac00528eb3b2f66a2b52dc7ef2f8cecb75c76099cfa23db8da897043ba1cce31e2dfea46075f5e073203eaeb3d62c84c107b6dab33a14eaf149aa61850c15f5a58d88a15aba9196f9e495e8dbecbcf7e8444f5dd72a08a099d7f6209990b562974ea829ef11d29a920e3a799d0d92cb50d50f817631ab09de97c31e9a05f4d78d649fcd93a83752078ab3bb0e16c564d4fb07ca923c0374ba5bf1eea7e73668e135031feafcbb47cbc2ae30ec16a39b9c337e0a62eecdd80c0b7a04924ac3972da4fa9299c14b5a53d37b08bf02268b3bac9ea9355090eeb04ad87bee0593ba4e4443dda38a97afbf2db9952df63f178f3b4c52bcc132be8d9e26881213abdeb7e1c44c4061548909f0520f0dd7520fc408ea28c2cebc0f53063a2d30570e05350e52b390dd9b67662984847be9ad9b4cd50b069ffd29dd9c62ef14701f8d012a4a70c8431cc\",\n        \"signature\": \"ec61c0b292203a8f1d87235ede92b74723c8d23408423773ae50b1e9bc4464e03e446da9dce4c39f6dd159bea26c009ed00120bc36d4a247dc0d24bcefcc110c\"\n    },\n    {\n        \"secret_key\": \"a5b34cefab9479df8389d7e6f6c146aa8affb0bec837f78af64624a145cc344e\",\n        \"public_key\": \"7b0f4f24d9972bc6fe83826c52716ad1e0d7d19f123858cb3e99fa636ac9631a\",\n        \"message\": \"e21e98af6c2bac70557eb0e864da2c2b4d6c0a39a059d3477251f6178a39676f4749e7fbea623f148a43a8b0fe0610506fa658abd2f5fa39198f2636b724db22d1aebc2ab07b2b6dbffdee8cece81e1af1493ec1964e16bf86ab258ca0feb77e3c8717e44038abe152c14be15660bf93b2d48d92c4ed7074d2494210621bcf204fba88c654d5ffe01e1a53d08f70bb237089dc807216ff6a85dbec3102237d42590778acf6c1dc566d5a2bb9a63bc21c329c272e5965baeeb0fe891de3cc8cbfa8e541a8881df68942e7ff8dc656bd08575f6aaf924a176d663b1a1f43574d11768c701b269561e55438dbebfd443d2115cb933d1cde4a915b54c325c27f499ef02bd012ff1f9a36390922887600fe712bcdc23eb5974a305372ad52951f83f0e58cc49e289841621917f1fcb0235147240dae4cf3b99b6ac6d8de94efe7c4436714508bcd0114c56068ff1b7c16d51bd906437874d6549ab5d8087896872ec8a09d7412\",\n        \"signed\": \"2fbd899d72b6d39e4f45b8b62cbbd5f3c0acb1ad8540913fa585877e91ccfef7bee50a4b0f9fedf5cc1e0d1953ad399c8389a93391e1b7c929af6d6f3b796c08e21e98af6c2bac70557eb0e864da2c2b4d6c0a39a059d3477251f6178a39676f4749e7fbea623f148a43a8b0fe0610506fa658abd2f5fa39198f2636b724db22d1aebc2ab07b2b6dbffdee8cece81e1af1493ec1964e16bf86ab258ca0feb77e3c8717e44038abe152c14be15660bf93b2d48d92c4ed7074d2494210621bcf204fba88c654d5ffe01e1a53d08f70bb237089dc807216ff6a85dbec3102237d42590778acf6c1dc566d5a2bb9a63bc21c329c272e5965baeeb0fe891de3cc8cbfa8e541a8881df68942e7ff8dc656bd08575f6aaf924a176d663b1a1f43574d11768c701b269561e55438dbebfd443d2115cb933d1cde4a915b54c325c27f499ef02bd012ff1f9a36390922887600fe712bcdc23eb5974a305372ad52951f83f0e58cc49e289841621917f1fcb0235147240dae4cf3b99b6ac6d8de94efe7c4436714508bcd0114c56068ff1b7c16d51bd906437874d6549ab5d8087896872ec8a09d7412\",\n        \"signature\": \"2fbd899d72b6d39e4f45b8b62cbbd5f3c0acb1ad8540913fa585877e91ccfef7bee50a4b0f9fedf5cc1e0d1953ad399c8389a93391e1b7c929af6d6f3b796c08\"\n    },\n    {\n        \"secret_key\": \"ad75c9ce299c4d59393367d77a4c9f8df8dcec765c6dbd25b527fb7669913604\",\n        \"public_key\": \"b9910548fe6312a119c9993eebcfb9dc90030ffb0e4de2b7ccd23cbeb4fef71b\",\n        \"message\": \"62fc5ab67deb1fee9ab6cca3b88a1df1e589f0fd4a88f4aa7738948761fe84372c5b18e4655220c1d84d52acad32e229a5c756c20fc62fe4b4b4e5fd7077ae4ed5397aa796f2307ceedb6505b39297856f4aeb5e70938e36ee24a0ac7d9868306f6b53910623b7dc89a6672ad738576ed5d88831dd338321c8902bc2061f65e94d452fdfa0dc665cefb92308e52301bd4627006b363d06b775a395914d8c863e95a00d6893f3376134c429f56478145e4456f7a12d65bb2b8965d728cb2ddbb708f7125c237095a92195d92fa727a372f3545ae701f3808fee802c8967a76e8a940e55fb2d810bfb47ada156f0eda1829b159cf05c7f36cf3847d7b21de84c3dc0fe658347f79396a01139a508b60022db1c0e5aeef47e445e66f783e62c96597bdb16f209c08a9132c7573136170ee3ebf24261265a89fb4f10333375e20b33ab7403464f5249461c6853c5fddb9f58af816892910393a7077b799fdc3489720998feea86\",\n        \"signed\": \"6b7ef27bcfbf2b714985033764fccff555e3f5bc44610d6c8c62117cb3831a07f4a8bddb0eaed1d46b0289b15de1aa4dcc17d71be96a09e66ba4dc4627c7870562fc5ab67deb1fee9ab6cca3b88a1df1e589f0fd4a88f4aa7738948761fe84372c5b18e4655220c1d84d52acad32e229a5c756c20fc62fe4b4b4e5fd7077ae4ed5397aa796f2307ceedb6505b39297856f4aeb5e70938e36ee24a0ac7d9868306f6b53910623b7dc89a6672ad738576ed5d88831dd338321c8902bc2061f65e94d452fdfa0dc665cefb92308e52301bd4627006b363d06b775a395914d8c863e95a00d6893f3376134c429f56478145e4456f7a12d65bb2b8965d728cb2ddbb708f7125c237095a92195d92fa727a372f3545ae701f3808fee802c8967a76e8a940e55fb2d810bfb47ada156f0eda1829b159cf05c7f36cf3847d7b21de84c3dc0fe658347f79396a01139a508b60022db1c0e5aeef47e445e66f783e62c96597bdb16f209c08a9132c7573136170ee3ebf24261265a89fb4f10333375e20b33ab7403464f5249461c6853c5fddb9f58af816892910393a7077b799fdc3489720998feea86\",\n        \"signature\": \"6b7ef27bcfbf2b714985033764fccff555e3f5bc44610d6c8c62117cb3831a07f4a8bddb0eaed1d46b0289b15de1aa4dcc17d71be96a09e66ba4dc4627c78705\"\n    },\n    {\n        \"secret_key\": \"1ced574529b9b416977e92eb39448a8717cac2934a243a5c44fb44b73ccc16da\",\n        \"public_key\": \"85e167d5f062fee82014f3c8b1beaed8eefb2c22d8649c424b86b21b11eb8bda\",\n        \"message\": \"1b3b953cce6d15303c61ca707609f70e7250f6c0deba56a8ce522b5986689651cdb848b842b2229661b8eeabfb8570749ed6c2b10a8fbf515053b5ea7d7a9228349e4646f9505e198029fec9ce0f38e4e0ca73625842d64caf8ced070a6e29c743586aa3db6d82993ac71fd38b783162d8fe04ffd0fa5cbc381d0e219c91937df6c973912fc02fda5377312468274c4bee6dca7f79c8b544861ed5babcf5c50e1473491be01708ac7c9ff58f1e40f855497ce9d7cc47b9410f2edd00f6496740243b8d03b2f5fa742b9c630867f77ac42f2b62c14e5ebddc7b647a05fff43670745f2851eff4909f5d27d57ae87f61e965ee60fdf97724c59267f2610b7ad5de919856d64d7c212659ce8656149b6a6d29d8f92b312be50b6e2a431d36ae022b00a6fe360e3af65432899c43be0427e36d21cfec81f21aa53b33db5ed2c37da8f96ac3e7dc67a1de37546cf7de1008c7e1adbe0f34fa7eb2434d94e6a13f4cf86a98d497622f\",\n        \"signed\": \"e0303aefe08a77738dcc657afbb9b835ed279613a53c73fdc5ddbfb350e5cff4d6c9bb43dc07c95bf4e23b64c40f8804c7169952e3c8d59a7197241bfed0740f1b3b953cce6d15303c61ca707609f70e7250f6c0deba56a8ce522b5986689651cdb848b842b2229661b8eeabfb8570749ed6c2b10a8fbf515053b5ea7d7a9228349e4646f9505e198029fec9ce0f38e4e0ca73625842d64caf8ced070a6e29c743586aa3db6d82993ac71fd38b783162d8fe04ffd0fa5cbc381d0e219c91937df6c973912fc02fda5377312468274c4bee6dca7f79c8b544861ed5babcf5c50e1473491be01708ac7c9ff58f1e40f855497ce9d7cc47b9410f2edd00f6496740243b8d03b2f5fa742b9c630867f77ac42f2b62c14e5ebddc7b647a05fff43670745f2851eff4909f5d27d57ae87f61e965ee60fdf97724c59267f2610b7ad5de919856d64d7c212659ce8656149b6a6d29d8f92b312be50b6e2a431d36ae022b00a6fe360e3af65432899c43be0427e36d21cfec81f21aa53b33db5ed2c37da8f96ac3e7dc67a1de37546cf7de1008c7e1adbe0f34fa7eb2434d94e6a13f4cf86a98d497622f\",\n        \"signature\": \"e0303aefe08a77738dcc657afbb9b835ed279613a53c73fdc5ddbfb350e5cff4d6c9bb43dc07c95bf4e23b64c40f8804c7169952e3c8d59a7197241bfed0740f\"\n    },\n    {\n        \"secret_key\": \"f0790d93e2d3b84f61ef4c807147aba410e415e72b71b0d61d01026fed99da3d\",\n        \"public_key\": \"efdf649fb033cf328e0b287796f8a25e9c6e2e871b33c2c21a4028a8a25a4b28\",\n        \"message\": \"7973e9f32d74805992eb65da0d637335e50eff0ce68ea2d1f3a02de704492b9cfbe7e7ba96fdb42bb821a513d73fc60402e92c855deaed73ffeaf70952029062c833e14ec1b14f144e2207f6a0e727e5a7e3cbab27d5972970f69518a15b093e740cc0ce11bf5248f0826b8a98bde8bf2c7082c97aff158d08371118c89021cc3974ae8f76d86673c3f824b62c79c4b41f40eaa8943738f03300f68cbe175468eb235a9ff0e6537f8714e97e8f08ca444e41191063b5fabd156e85dcf66606b81dad4a95065584b3e0658c20a706eaf4a0777da4d2e0cd2a0fca60109c2b4403db3f03cd4781c1fbb0272202bcb11687808c50cb98f64b7f3fd3d43333bb5a061b9e377090abb1e0a885cb26b73c163e63ff6451ff2f4ec8249c7e152bd03973a1e964e2b5b235281a938399a112a24529e383a560dc50bb1b622ad74ef35658dcb10ffe022568ac3ffae5b465a8ed7643e8561b352ee9944a35d882c712b187788a0abae5a22f\",\n        \"signed\": \"08773a6a78762cbb1e25fcbb29139941bdf16f4e09a1fa08fc701f32f933edd74c0ae983c12a0a5b020b6bcf44bb719dde8ed0781a8298265640e1608c98b3017973e9f32d74805992eb65da0d637335e50eff0ce68ea2d1f3a02de704492b9cfbe7e7ba96fdb42bb821a513d73fc60402e92c855deaed73ffeaf70952029062c833e14ec1b14f144e2207f6a0e727e5a7e3cbab27d5972970f69518a15b093e740cc0ce11bf5248f0826b8a98bde8bf2c7082c97aff158d08371118c89021cc3974ae8f76d86673c3f824b62c79c4b41f40eaa8943738f03300f68cbe175468eb235a9ff0e6537f8714e97e8f08ca444e41191063b5fabd156e85dcf66606b81dad4a95065584b3e0658c20a706eaf4a0777da4d2e0cd2a0fca60109c2b4403db3f03cd4781c1fbb0272202bcb11687808c50cb98f64b7f3fd3d43333bb5a061b9e377090abb1e0a885cb26b73c163e63ff6451ff2f4ec8249c7e152bd03973a1e964e2b5b235281a938399a112a24529e383a560dc50bb1b622ad74ef35658dcb10ffe022568ac3ffae5b465a8ed7643e8561b352ee9944a35d882c712b187788a0abae5a22f\",\n        \"signature\": \"08773a6a78762cbb1e25fcbb29139941bdf16f4e09a1fa08fc701f32f933edd74c0ae983c12a0a5b020b6bcf44bb719dde8ed0781a8298265640e1608c98b301\"\n    },\n    {\n        \"secret_key\": \"4cb9df7ce6fae9d62ba09e8eb70e4c969bdeafcb5ec7d7024326e6603b0621bf\",\n        \"public_key\": \"018069dd0eb44055a35cd8c77c37ca9fb1ad2417271385e134b2f4e81f52033c\",\n        \"message\": \"14627d6ea0e7895460759476dc74c42800ceef994327518151490d9df23067914e44788a12768ccb25471b9c3ba9d14fb436dcba38429b3a0456877763c49175d0e082683e07a9058f3685c6279307b2303d1221b9c29793d8a4877f6df51587384dadf751c5f7bfbd207d519622c37b51ceeee2c20d8269f8cb88d3fe43d6d434d5bbd0e203c1532d97ba552147227496c87f67b50bb76193add0144df1c176657585408362ca2ed04ad62acf1c25e341dfd1498d85b4b1349a8b0b9b02c43523c55853419bfed37d5a2cdf17dfbf1a3bd7759d6ae180f9d27dcd9a8933e29a7c0a30771eea7c2e0fa242925d2336dce585629057d844323964f6d3d11ff0b3f829a3be8c9f0468a6823d8e70ab5a2da21e15fa8b041a29812222e9c30b2bd9a12d1fdee6f87876e8ce81009637a8bb2236129a47ca74289ee4aad429ffe29f47430241ca8cc3848b7200fd6e1470651a9a0a6f72c9033e831df051408a6260f65cbaf6e012b18e\",\n        \"signed\": \"e33c07836c537d6bfbd0f4592d6e35b163499ba78dc7ffcec565d04f9a7db781943e29e6ce76763e9baddf57437fd9c6b03239a6e6850e4502a356c2e12c370514627d6ea0e7895460759476dc74c42800ceef994327518151490d9df23067914e44788a12768ccb25471b9c3ba9d14fb436dcba38429b3a0456877763c49175d0e082683e07a9058f3685c6279307b2303d1221b9c29793d8a4877f6df51587384dadf751c5f7bfbd207d519622c37b51ceeee2c20d8269f8cb88d3fe43d6d434d5bbd0e203c1532d97ba552147227496c87f67b50bb76193add0144df1c176657585408362ca2ed04ad62acf1c25e341dfd1498d85b4b1349a8b0b9b02c43523c55853419bfed37d5a2cdf17dfbf1a3bd7759d6ae180f9d27dcd9a8933e29a7c0a30771eea7c2e0fa242925d2336dce585629057d844323964f6d3d11ff0b3f829a3be8c9f0468a6823d8e70ab5a2da21e15fa8b041a29812222e9c30b2bd9a12d1fdee6f87876e8ce81009637a8bb2236129a47ca74289ee4aad429ffe29f47430241ca8cc3848b7200fd6e1470651a9a0a6f72c9033e831df051408a6260f65cbaf6e012b18e\",\n        \"signature\": \"e33c07836c537d6bfbd0f4592d6e35b163499ba78dc7ffcec565d04f9a7db781943e29e6ce76763e9baddf57437fd9c6b03239a6e6850e4502a356c2e12c3705\"\n    },\n    {\n        \"secret_key\": \"a136e009d53e5ef59d0946bc175663a86bc0fcd29eadd95cfc9d266037b1e4fb\",\n        \"public_key\": \"9c1806ec0454f58314eb8397d64287dee386640d8491aba364607688841715a0\",\n        \"message\": \"a49d1c3d49e13c2eda56868a8824aa9f8d2bf72f21955ebafd07b3bdc8e924de20936cee513d8a64a47173a3bd659eff1accff8244b26aae1a0c27fa891bf4d85e8fb1b76a6cab1e7f74c89ee07bb40d714326f09b3fd40632fad208ea816f9072028c14b5b54ecc1c5b7fc809e7e0786e2f11495e76017eb62aa4563f3d00ee84348d9838cd17649f6929a6d206f60e6fc82e0c3464b27e0e6abd22f4469bdfd4cb54f77e329b80f71bf42129ec13c9dfe192adfaa42ee3ddeeda385816fbad5f411938c63b560f4ecd94534be7d98725cd94c99ce492f0f069ba0ec08f877a7812ef27ae19d7a77be63f66bcf8d6cf3a1a61fc9cfef104c7462a21ca7f03afb5bb1ac8c75124b554e8d044b810d95ff8c9dd09a34484d8c4b6c95f95c3c22823f52ce844293724d5259191f1ba0929e2acdbb8b9a7a8adf0c52e78acdfdf057b0985881afbed4dbebdebbdae0a2b63bd4e90f96afdcbbd78f506309f9bdb650013cb73faed73904e\",\n        \"signed\": \"bc094ba91c115dee15d753361a75f3f03d6af45c92157e95dbe8d32194b6c5ce72b9dc66f73df12dca0b639f3e791d478616a1f8d7359a42c8eae0dda16b1606a49d1c3d49e13c2eda56868a8824aa9f8d2bf72f21955ebafd07b3bdc8e924de20936cee513d8a64a47173a3bd659eff1accff8244b26aae1a0c27fa891bf4d85e8fb1b76a6cab1e7f74c89ee07bb40d714326f09b3fd40632fad208ea816f9072028c14b5b54ecc1c5b7fc809e7e0786e2f11495e76017eb62aa4563f3d00ee84348d9838cd17649f6929a6d206f60e6fc82e0c3464b27e0e6abd22f4469bdfd4cb54f77e329b80f71bf42129ec13c9dfe192adfaa42ee3ddeeda385816fbad5f411938c63b560f4ecd94534be7d98725cd94c99ce492f0f069ba0ec08f877a7812ef27ae19d7a77be63f66bcf8d6cf3a1a61fc9cfef104c7462a21ca7f03afb5bb1ac8c75124b554e8d044b810d95ff8c9dd09a34484d8c4b6c95f95c3c22823f52ce844293724d5259191f1ba0929e2acdbb8b9a7a8adf0c52e78acdfdf057b0985881afbed4dbebdebbdae0a2b63bd4e90f96afdcbbd78f506309f9bdb650013cb73faed73904e\",\n        \"signature\": \"bc094ba91c115dee15d753361a75f3f03d6af45c92157e95dbe8d32194b6c5ce72b9dc66f73df12dca0b639f3e791d478616a1f8d7359a42c8eae0dda16b1606\"\n    },\n    {\n        \"secret_key\": \"ff0f1c57dd884fbeea6e2917282b79ba67f8a6851267b9f4636dafda33bd2b5b\",\n        \"public_key\": \"fef6378ad12a7c252fa6eb742b05064b41530ff019dc680ab544c027ea2836e7\",\n        \"message\": \"522a5e5eff5b5e98fad6878a9d72df6eb318622610a1e1a48183f5590ecef5a6df671b28be91c88cdf7ae2881147fe6c37c28b43f64cf981c455c59e765ce94e1b6491631deaeef6d1da9ebca88643c77f83eae2cfdd2d97f604fe45081d1be5c4ae2d875996b8b6fecd707d3fa219a93ba0488e55247b405e330cfb97d31a1361c9b2084bdb13fb0c058925db8c3c649c9a3e937b533cc6310fa3b16126fb3cc9bb2b35c5c8300015488a30fadca3c8871fa70dfdc7055bf8e631f20c9b2528311e324a7c4edd5462079f3441c9ecf55fa999e731372344fdc0d413e417aaa001a1b2d3d9bc000fec1b02bd7a88a812d9d8a66f9464764c070c93041eefb17ce74eff6d4aff75f0cbf6a789a9ecde74abe33130fca0da853aa7c3313ada3f0ae2f595c6796a93685e729dd18a669d6381825ab3f36a391e7525b2a807a52fa5ec2a030a8cf3b77337ac41fceb580e845eed655a48b547238c2e8137c92f8c27e585caad3106eee3814a\",\n        \"signed\": \"d5008486726cce330a29dd7e4d7474d735798201afd1206feb869a112e5b43523c06976761be3cf9b2716378273c94f93572a7d2b8982634e0755c632b449008522a5e5eff5b5e98fad6878a9d72df6eb318622610a1e1a48183f5590ecef5a6df671b28be91c88cdf7ae2881147fe6c37c28b43f64cf981c455c59e765ce94e1b6491631deaeef6d1da9ebca88643c77f83eae2cfdd2d97f604fe45081d1be5c4ae2d875996b8b6fecd707d3fa219a93ba0488e55247b405e330cfb97d31a1361c9b2084bdb13fb0c058925db8c3c649c9a3e937b533cc6310fa3b16126fb3cc9bb2b35c5c8300015488a30fadca3c8871fa70dfdc7055bf8e631f20c9b2528311e324a7c4edd5462079f3441c9ecf55fa999e731372344fdc0d413e417aaa001a1b2d3d9bc000fec1b02bd7a88a812d9d8a66f9464764c070c93041eefb17ce74eff6d4aff75f0cbf6a789a9ecde74abe33130fca0da853aa7c3313ada3f0ae2f595c6796a93685e729dd18a669d6381825ab3f36a391e7525b2a807a52fa5ec2a030a8cf3b77337ac41fceb580e845eed655a48b547238c2e8137c92f8c27e585caad3106eee3814a\",\n        \"signature\": \"d5008486726cce330a29dd7e4d7474d735798201afd1206feb869a112e5b43523c06976761be3cf9b2716378273c94f93572a7d2b8982634e0755c632b449008\"\n    },\n    {\n        \"secret_key\": \"0bc6af64de5709d3dbc28f7ef6d3fe28b6de529f08f5857ccb910695de454f56\",\n        \"public_key\": \"fb491fc900237bdc7e9a119f27150cd911935cd3628749ff40ef41f3955bc8ac\",\n        \"message\": \"ac7886e4f4172a22c95e8eea37437b375d72accedcee6cc6e816763301a2d8ef4d6f31a2c1d635818b7026a395ce0dafd71c5180893af76b7ea056c972d680eca01dcbdbae6b26f1c5f33fc988b824fbbe00cacc316469a3bae07aa7c8885af7f65f42e75cef94dbb9aab4825143c85070e7716b7612f64ef0b0166011d23eb5654aa098b02d8d71e57c8fa17bff2fe97dc8193177eadc09fb192d80aa92afa98720d4614817ff3c39d3acce18906fa3de09618931d0d7a60c4429cbfa20cf165c947929ac293ae6c06e7e8f25f1264291e3e1c98f5d93e6ecc2389bc60dbbf4a621b132c552a99c95d26d8d1af61138b570a0de4b497ebe8051c7273a98e6e7876d0b327503af3cb2cc4091ce1925cb2f2957f4ec56ee90f8a09dd57d6e83067a356a4cfe65b1b7a4465da2ab133b0efb5e7d4dbb811bcbbde712afbf0f7dd3f326222284b8c74eac7ad6257fa8c632b7da2559a6266e91e0ef90dbb0aa968f75376b693fcaa5da342221\",\n        \"signed\": \"dbc7134d1cd6b0813b53352714b6df939498e91cf37c324337d9c088a1b998347d26185b430900412929e4f63e910379fc42e355a4e98f6fee27dafad1957206ac7886e4f4172a22c95e8eea37437b375d72accedcee6cc6e816763301a2d8ef4d6f31a2c1d635818b7026a395ce0dafd71c5180893af76b7ea056c972d680eca01dcbdbae6b26f1c5f33fc988b824fbbe00cacc316469a3bae07aa7c8885af7f65f42e75cef94dbb9aab4825143c85070e7716b7612f64ef0b0166011d23eb5654aa098b02d8d71e57c8fa17bff2fe97dc8193177eadc09fb192d80aa92afa98720d4614817ff3c39d3acce18906fa3de09618931d0d7a60c4429cbfa20cf165c947929ac293ae6c06e7e8f25f1264291e3e1c98f5d93e6ecc2389bc60dbbf4a621b132c552a99c95d26d8d1af61138b570a0de4b497ebe8051c7273a98e6e7876d0b327503af3cb2cc4091ce1925cb2f2957f4ec56ee90f8a09dd57d6e83067a356a4cfe65b1b7a4465da2ab133b0efb5e7d4dbb811bcbbde712afbf0f7dd3f326222284b8c74eac7ad6257fa8c632b7da2559a6266e91e0ef90dbb0aa968f75376b693fcaa5da342221\",\n        \"signature\": \"dbc7134d1cd6b0813b53352714b6df939498e91cf37c324337d9c088a1b998347d26185b430900412929e4f63e910379fc42e355a4e98f6fee27dafad1957206\"\n    },\n    {\n        \"secret_key\": \"2f5e83bd5b412e71ae3e9084cd369efcc79bf6037c4b174dfd6a11fb0f5da218\",\n        \"public_key\": \"a22a6da29a5ef6240c49d8896e3a0f1a4281a266c77d383ee6f9d25ffacbb872\",\n        \"message\": \"b766273f060ef3b2ae3340454a391b426bc2e97264f8674553eb00dd6ecfdd59b611d8d662929fec710d0e462020e12cdbf9c1ec8858e85671acf8b7b14424ce92079d7d801e2ad9acac036bc8d2dfaa72aa839bff30c0aa7e414a882c00b645ff9d31bcf5a54382def4d0142efa4f06e823257ff132ee968cdc6738c53f53b84c8df76e9f78dd5056cf3d4d5a80a8f84e3edec48520f2cb4583e708539355ef7aa86fb5a0e87a94dcf14f30a2cca568f139d9ce59eaf459a5c5916cc8f20b26aaf6c7c029379aedb05a07fe585ccac60307c1f58ca9f859157d06d06baa394aace79d51b8cb38cfa2598141e245624e5ab9b9d68731173348905315bf1a5ad61d1e8adaeb810e4e8a86d7c13537b0be860ab2ed35b73399b8808aa91d750f77943f8a8b7e89fdb50728aa3dbbd8a41a6e00756f438c9b9e9d55872df5a9068add8a972b7e43edad9ced2237ca1367be4b7cdb66a54ea12eef129471158610eaf28f99f7f686557dcdf644ea\",\n        \"signed\": \"9f80922bc8db32d0cc43f9936affebe7b2bc35a5d82277cd187b5d50dc7fc4c4832fffa34e9543806b485c04548e7c75429425e14d55d91fc1052efd8667430bb766273f060ef3b2ae3340454a391b426bc2e97264f8674553eb00dd6ecfdd59b611d8d662929fec710d0e462020e12cdbf9c1ec8858e85671acf8b7b14424ce92079d7d801e2ad9acac036bc8d2dfaa72aa839bff30c0aa7e414a882c00b645ff9d31bcf5a54382def4d0142efa4f06e823257ff132ee968cdc6738c53f53b84c8df76e9f78dd5056cf3d4d5a80a8f84e3edec48520f2cb4583e708539355ef7aa86fb5a0e87a94dcf14f30a2cca568f139d9ce59eaf459a5c5916cc8f20b26aaf6c7c029379aedb05a07fe585ccac60307c1f58ca9f859157d06d06baa394aace79d51b8cb38cfa2598141e245624e5ab9b9d68731173348905315bf1a5ad61d1e8adaeb810e4e8a86d7c13537b0be860ab2ed35b73399b8808aa91d750f77943f8a8b7e89fdb50728aa3dbbd8a41a6e00756f438c9b9e9d55872df5a9068add8a972b7e43edad9ced2237ca1367be4b7cdb66a54ea12eef129471158610eaf28f99f7f686557dcdf644ea\",\n        \"signature\": \"9f80922bc8db32d0cc43f9936affebe7b2bc35a5d82277cd187b5d50dc7fc4c4832fffa34e9543806b485c04548e7c75429425e14d55d91fc1052efd8667430b\"\n    },\n    {\n        \"secret_key\": \"722a2da50e42c11a61c9afac7be1a2fed2267d650f8f7d8e5bc706b807c1b91d\",\n        \"public_key\": \"fd0b964562f823721e649c3fedb432a76f91e0aead7c61d35f95ed7726d78589\",\n        \"message\": \"173e8bb885e1f9081404acac999041d2ecfcb73f945e0db36e631d7cd1ab999eb717f34bf07874bf3d34e2530eb6085f4a9f88ae1b0f7d80f221456a8e9a8890b91a50192deaaacc0a1a615a87841e2c5a9e057957af6e48e78cc86198e32e7aa24dcf6cffa329bc72606d65b11682c8ba736cce22a05785df1146331e41609cf9ca711cf464958297138b58a9073f3bbf06ad8a85d135de66652104d88b49d27ad41e59bcc44c7fab68f53f0502e293ffcabaaf755927dfdffbfde3b35c080b5de4c8b785f4da64ef357bc0d1466a6a96560c3c4f3e3c0b563a003f5f95f237171bce1a001771a04ede7cdd9b8ca770fd36ef90e9fe0000a8d7685fd153cc7282de95920a8f8f0898d00bf0c6c933fe5bb9653ff146c4e2acd1a2e0c23c1244844dacf8652716302c2032f9c114679ed26b3ee3ab4a7b18bc4e3071f0977db57cd0ac68c0727a09b4f125fb64af2850b26c8a484263334e2da902d744737044e79ab1cf5b2f93a022b63d40cd\",\n        \"signed\": \"c2695a57172aaa31bd0890f231ca8eeec0287a87172669a899ad0891cea4c47579b50420e791cdec8c182c8a0e8dde21b2480b0cfd8111e28e5603347a352d04173e8bb885e1f9081404acac999041d2ecfcb73f945e0db36e631d7cd1ab999eb717f34bf07874bf3d34e2530eb6085f4a9f88ae1b0f7d80f221456a8e9a8890b91a50192deaaacc0a1a615a87841e2c5a9e057957af6e48e78cc86198e32e7aa24dcf6cffa329bc72606d65b11682c8ba736cce22a05785df1146331e41609cf9ca711cf464958297138b58a9073f3bbf06ad8a85d135de66652104d88b49d27ad41e59bcc44c7fab68f53f0502e293ffcabaaf755927dfdffbfde3b35c080b5de4c8b785f4da64ef357bc0d1466a6a96560c3c4f3e3c0b563a003f5f95f237171bce1a001771a04ede7cdd9b8ca770fd36ef90e9fe0000a8d7685fd153cc7282de95920a8f8f0898d00bf0c6c933fe5bb9653ff146c4e2acd1a2e0c23c1244844dacf8652716302c2032f9c114679ed26b3ee3ab4a7b18bc4e3071f0977db57cd0ac68c0727a09b4f125fb64af2850b26c8a484263334e2da902d744737044e79ab1cf5b2f93a022b63d40cd\",\n        \"signature\": \"c2695a57172aaa31bd0890f231ca8eeec0287a87172669a899ad0891cea4c47579b50420e791cdec8c182c8a0e8dde21b2480b0cfd8111e28e5603347a352d04\"\n    },\n    {\n        \"secret_key\": \"5fe9c3960ed5bd374cc94d42357e6a24dc7e3060788f726365defacf13cd12da\",\n        \"public_key\": \"0ce7b155c8b20ebdaacdc2aa23627e34b1f9ace980650a2530c7607d04814eb4\",\n        \"message\": \"c9490d83d9c3a9370f06c91af001685a02fe49b5ca667733fff189eee853ec1667a6c1b6c787e9244812d2d532866ab74dfc870d6f14033b6bcd39852a3900f8f08cd95a74cb8cbe02b8b8b51e993a06adfebd7fc9854ae5d29f4df9642871d0c5e470d903cfbcbd5adb3275628f28a80bf8c0f0376687dae673bf7a8547e80d4a9855ae2572fc2b205dc8a198016ddc9b50995f5b39f368f540504a551803d6dd5f874828e5541ded052894d9e2dc5e6aa351087e790c0dd5d9c4decb217e4db81c98a184b264e6daeac0f11e074cae2bfc899f54b419c65dcc22664a915fbfffac35cee0f286eb7b144933db933e16c4bcb650d537722489de236373fd8d65fc86118b6def37ca4608bc6ce927b65436ffda7f02bfbf88b045ae7d2c2b45a0b30c8f2a04df953221088c555fe9a5df260982a3d64df194ee952fa9a98c31b96493db6180d13d67c36716f95f8c0bd7a039ad990667ca34a83ac1a18c37dd7c7736aa6b9b6fc2b1ac0ce119ef77\",\n        \"signed\": \"379f9c54c413af0d192e9bc736b29da9d521e7ba7841d309f9bcc1e742ec4308fe9f7ba51e0b22aed487cb4aa3913b9bebfb3aacd38f4039f9bbbebe1ad80002c9490d83d9c3a9370f06c91af001685a02fe49b5ca667733fff189eee853ec1667a6c1b6c787e9244812d2d532866ab74dfc870d6f14033b6bcd39852a3900f8f08cd95a74cb8cbe02b8b8b51e993a06adfebd7fc9854ae5d29f4df9642871d0c5e470d903cfbcbd5adb3275628f28a80bf8c0f0376687dae673bf7a8547e80d4a9855ae2572fc2b205dc8a198016ddc9b50995f5b39f368f540504a551803d6dd5f874828e5541ded052894d9e2dc5e6aa351087e790c0dd5d9c4decb217e4db81c98a184b264e6daeac0f11e074cae2bfc899f54b419c65dcc22664a915fbfffac35cee0f286eb7b144933db933e16c4bcb650d537722489de236373fd8d65fc86118b6def37ca4608bc6ce927b65436ffda7f02bfbf88b045ae7d2c2b45a0b30c8f2a04df953221088c555fe9a5df260982a3d64df194ee952fa9a98c31b96493db6180d13d67c36716f95f8c0bd7a039ad990667ca34a83ac1a18c37dd7c7736aa6b9b6fc2b1ac0ce119ef77\",\n        \"signature\": \"379f9c54c413af0d192e9bc736b29da9d521e7ba7841d309f9bcc1e742ec4308fe9f7ba51e0b22aed487cb4aa3913b9bebfb3aacd38f4039f9bbbebe1ad80002\"\n    },\n    {\n        \"secret_key\": \"ec2fa541ac14b414149c3825eaa7001b795aa1957d4040dda92573904afa7ee4\",\n        \"public_key\": \"71b363b2408404d7beecdef1e1f511bb6084658b532f7ea63d4e3f5f01c61d31\",\n        \"message\": \"2749fc7c4a729e0e0ad71b5b74eb9f9c534ebd02ffc9df4374d813bdd1ae4eb87f1350d5fdc563934515771763e6c33b50e64e0cd114573031d2186b6eca4fc802cddc7cc51d92a61345a17f6ac38cc74d84707a5156be9202dee3444652e79bae7f0d31bd17567961f65dd01a8e4bee38331938ce4b2b550691b99a4bc3c072d186df4b3344a5c8fbfbb9fd2f355f6107e410c3d0c798b68d3fb9c6f7ab5fe27e70871e86767698fe35b77ead4e435a9402cc9ed6a2657b059be0a21003c048bbf5e0ebd93cbb2e71e923cf5c728d1758cd817ad74b454a887126d653b95a7f25e5293b768c9fc5a9c35a2372e3741bc90fd66301427b10824bb4b1e9110bfba84c21a40eb8fed4497e91dc3ffd0438c514c0a8cb4cac6ad0256bf11d5aa7a9c7c00b669b015b0bf81425a21413e2ffb6edc0bd78e385c44fd74558e511c2c25fee1fec18d3990b8690300fa711e93d9854668f0187065e76e7113ae763c30ddd86720b5546a6c3c6f1c43bc67b14\",\n        \"signed\": \"84d18d56f964e3776759bba92c510c2b6d574555c3cddade212da90374554991e7d77e278d63e34693e1958078cc3685f8c41c1f5342e351899638ef612114012749fc7c4a729e0e0ad71b5b74eb9f9c534ebd02ffc9df4374d813bdd1ae4eb87f1350d5fdc563934515771763e6c33b50e64e0cd114573031d2186b6eca4fc802cddc7cc51d92a61345a17f6ac38cc74d84707a5156be9202dee3444652e79bae7f0d31bd17567961f65dd01a8e4bee38331938ce4b2b550691b99a4bc3c072d186df4b3344a5c8fbfbb9fd2f355f6107e410c3d0c798b68d3fb9c6f7ab5fe27e70871e86767698fe35b77ead4e435a9402cc9ed6a2657b059be0a21003c048bbf5e0ebd93cbb2e71e923cf5c728d1758cd817ad74b454a887126d653b95a7f25e5293b768c9fc5a9c35a2372e3741bc90fd66301427b10824bb4b1e9110bfba84c21a40eb8fed4497e91dc3ffd0438c514c0a8cb4cac6ad0256bf11d5aa7a9c7c00b669b015b0bf81425a21413e2ffb6edc0bd78e385c44fd74558e511c2c25fee1fec18d3990b8690300fa711e93d9854668f0187065e76e7113ae763c30ddd86720b5546a6c3c6f1c43bc67b14\",\n        \"signature\": \"84d18d56f964e3776759bba92c510c2b6d574555c3cddade212da90374554991e7d77e278d63e34693e1958078cc3685f8c41c1f5342e351899638ef61211401\"\n    },\n    {\n        \"secret_key\": \"6132692a5ef27bf476b1e991e6c431a8c764f1aebd470282db3321bb7cb09c20\",\n        \"public_key\": \"7a2d166184f9e5f73bea454486b041ceb5fc2314a7bd59cb718e79f0ec989d84\",\n        \"message\": \"a9c0861665d8c2de06f9301da70afb27b3024b744c6b38b24259294c97b1d1cb4f0dcf7575a8ed454e2f0980f50313a77363415183fe9677a9eb1e06cb6d34a467cb7b0758d6f55c564b5ba15603e202b18856d89e72a23ab07d8853ff77da7aff1caebd7959f2c710ef31f5078a9f2cdae92641a1cc5f74d0c143ec42afbaa5f378a9e10d5bf74587fa5f49c156233247dafd3929acde888dc684337e40cdc5932e7eb73ffcc90b85c0ad460416691aefbd7efd07b657c350946a0e366b37a6c8089aba5c5fe3bbca064afbe9d47fbc83914af1cb43c2b2efa98e0a43be32ba823202001def36817251b65f9b0506cef6683642a46ed612f8ca81ee97bb04d317b517343ade2b77126d1f02a87b7604c8653b6748cf5488fa6d43df809faa19e69292d38c5d397dd8e20c7af7c5334ec977f5010a0f7cb5b89479ca06db4d12627f067d6c42186a6b1f8742f36ae709ba720e3cd898116666d81b190b9b9d2a72202cb690a03f3310429a71dc048cde\",\n        \"signed\": \"eb677f3347e1a1ea929efdf62bf9105a6c8f4993033b4f6d03cb0dbf9c742b270704e383ab7c0676bdb1ad0ce9b16673083c9602ec10ae1dd98e8748b336440ba9c0861665d8c2de06f9301da70afb27b3024b744c6b38b24259294c97b1d1cb4f0dcf7575a8ed454e2f0980f50313a77363415183fe9677a9eb1e06cb6d34a467cb7b0758d6f55c564b5ba15603e202b18856d89e72a23ab07d8853ff77da7aff1caebd7959f2c710ef31f5078a9f2cdae92641a1cc5f74d0c143ec42afbaa5f378a9e10d5bf74587fa5f49c156233247dafd3929acde888dc684337e40cdc5932e7eb73ffcc90b85c0ad460416691aefbd7efd07b657c350946a0e366b37a6c8089aba5c5fe3bbca064afbe9d47fbc83914af1cb43c2b2efa98e0a43be32ba823202001def36817251b65f9b0506cef6683642a46ed612f8ca81ee97bb04d317b517343ade2b77126d1f02a87b7604c8653b6748cf5488fa6d43df809faa19e69292d38c5d397dd8e20c7af7c5334ec977f5010a0f7cb5b89479ca06db4d12627f067d6c42186a6b1f8742f36ae709ba720e3cd898116666d81b190b9b9d2a72202cb690a03f3310429a71dc048cde\",\n        \"signature\": \"eb677f3347e1a1ea929efdf62bf9105a6c8f4993033b4f6d03cb0dbf9c742b270704e383ab7c0676bdb1ad0ce9b16673083c9602ec10ae1dd98e8748b336440b\"\n    },\n    {\n        \"secret_key\": \"f219b2101164aa9723bde3a7346f68a35061c01f9782072580ba32df903ba891\",\n        \"public_key\": \"f66b920d5aa1a6085495a1480539beba01ffe60e6a6388d1b2e8eda23355810e\",\n        \"message\": \"015577d3e4a0ec1ab25930106343ff35ab4f1e0a8a2d844aadbb70e5fc5348ccb679c2295c51d702aaae7f6273ce70297b26cb7a253a3db94332e86a15b4a64491232791f7a8b082ee2834af30400e804647a532e9c454d2a0a7320130ab6d4d860073a34667ac25b7e5e2747ba9f5c94594fb68377ae260369c40713b4e32f23195bf91d3d7f1a2719bf408aad8d8a347b112e84b118817cb06513344021763035272a7db728a0ccdaa949c61715d0764140b3e8c01d20ff1593c7f2d55c4e82a1c0cb1ea58442bf80a741bca91f58ab0581b498ee9fe3c92ca654148ef75313543d1aff382befe1a93b02190ce0102175158e2071d02bacad8dbe9fb940fcb610c105ad52c80feb1ec4e524f4c0ec7983e9ce696fa4fcf4bf0514b8f0432b17d5448fc426fea2b01ac7b26c2aed769927534da22576fc1bba726e9d65be01b59f60a648ace2fc3e5e275789fa637cbbd84be3d6ac24457a6292cd656c7b569a52ffea7916b8d04b4f4a75be7ac95142f\",\n        \"signed\": \"17f0127ca3bafa5f4ee959cd60f772be87a0034961517e39a0a1d0f4b9e26db1336e60c82b352c4cbacdbbd11771c3774f8cc5a1a795d6e4f4ebd51def36770b015577d3e4a0ec1ab25930106343ff35ab4f1e0a8a2d844aadbb70e5fc5348ccb679c2295c51d702aaae7f6273ce70297b26cb7a253a3db94332e86a15b4a64491232791f7a8b082ee2834af30400e804647a532e9c454d2a0a7320130ab6d4d860073a34667ac25b7e5e2747ba9f5c94594fb68377ae260369c40713b4e32f23195bf91d3d7f1a2719bf408aad8d8a347b112e84b118817cb06513344021763035272a7db728a0ccdaa949c61715d0764140b3e8c01d20ff1593c7f2d55c4e82a1c0cb1ea58442bf80a741bca91f58ab0581b498ee9fe3c92ca654148ef75313543d1aff382befe1a93b02190ce0102175158e2071d02bacad8dbe9fb940fcb610c105ad52c80feb1ec4e524f4c0ec7983e9ce696fa4fcf4bf0514b8f0432b17d5448fc426fea2b01ac7b26c2aed769927534da22576fc1bba726e9d65be01b59f60a648ace2fc3e5e275789fa637cbbd84be3d6ac24457a6292cd656c7b569a52ffea7916b8d04b4f4a75be7ac95142f\",\n        \"signature\": \"17f0127ca3bafa5f4ee959cd60f772be87a0034961517e39a0a1d0f4b9e26db1336e60c82b352c4cbacdbbd11771c3774f8cc5a1a795d6e4f4ebd51def36770b\"\n    },\n    {\n        \"secret_key\": \"fc180035aec0f5ede7bda93bf77ade7a81ed06de07ee2e3aa8576be81608610a\",\n        \"public_key\": \"4f215e948cae243ee3143b80282ad792c780d2a6b75060ca1d290ca1a8e3151f\",\n        \"message\": \"b5e8b01625664b222339e0f05f93a990ba48b56ae65439a17520932df011721e284dbe36f98631c066510098a68d7b692a3863e99d58db76ca5667c8043cb10bd7abbaf506529fbb23a5166be038affdb9a234c4f4fcf43bddd6b8d2ce772dd653ed115c095e232b269dd4888d2368cb1c66be29dd383fca67f66765b296564e37555f0c0e484504c591f006ea8533a12583ad2e48318ff6f324ecaf804b1bae04aa896743e67ef61ca383d58e42acfc6410de30776e3ba262373b9e1441943955101a4e768231ad9c6529eff6118dde5df02f94b8d6df2d99f27863b517243a579e7aaff311ea3a0282e47ca876fabc2280fce7adc984dd0b30885b1650f1471dfcb0522d49fec7d042f32a93bc368f076006ea01ec1c7412bf66f62dc88de2c0b74701a5614e855e9fa728fb1f1171385f96afbde70dea02e9aa94dc21848c26302b50ae91f9693a1864e4e095ae03cdc22ad28a0eb7db596779246712fab5f5da327efec3e79612de0a6ccaa536759b8e\",\n        \"signed\": \"a43a71c3a19c35660dae6f31a254b8c0ea3593fc8fca74d13640012b9e9473d4afe070db01e7fb399bf4ca6070e062180011285a67dd6858b761e46c6bd32004b5e8b01625664b222339e0f05f93a990ba48b56ae65439a17520932df011721e284dbe36f98631c066510098a68d7b692a3863e99d58db76ca5667c8043cb10bd7abbaf506529fbb23a5166be038affdb9a234c4f4fcf43bddd6b8d2ce772dd653ed115c095e232b269dd4888d2368cb1c66be29dd383fca67f66765b296564e37555f0c0e484504c591f006ea8533a12583ad2e48318ff6f324ecaf804b1bae04aa896743e67ef61ca383d58e42acfc6410de30776e3ba262373b9e1441943955101a4e768231ad9c6529eff6118dde5df02f94b8d6df2d99f27863b517243a579e7aaff311ea3a0282e47ca876fabc2280fce7adc984dd0b30885b1650f1471dfcb0522d49fec7d042f32a93bc368f076006ea01ec1c7412bf66f62dc88de2c0b74701a5614e855e9fa728fb1f1171385f96afbde70dea02e9aa94dc21848c26302b50ae91f9693a1864e4e095ae03cdc22ad28a0eb7db596779246712fab5f5da327efec3e79612de0a6ccaa536759b8e\",\n        \"signature\": \"a43a71c3a19c35660dae6f31a254b8c0ea3593fc8fca74d13640012b9e9473d4afe070db01e7fb399bf4ca6070e062180011285a67dd6858b761e46c6bd32004\"\n    },\n    {\n        \"secret_key\": \"a2836a65427912122d25dcdfc99d7046fe9b53d5c1bb23617f11890e94ca93ed\",\n        \"public_key\": \"8c12bda214c8abb2286acffbf8112425040aab9f4d8bb7870b98da0159e882f1\",\n        \"message\": \"813d6061c56eae0ff53041c0244aa5e29e13ec0f3fb428d4beb8a99e04bca8c41bddb0db945f487efe38f2fc14a628fafa2462f860e4e34250eb4e93f139ab1b74a2614519e41ee2403be427930ab8bc82ec89ceafb60905bd4ddbbd13bdb19654314fc92373140b962e2258e038d71b9ec66b84ef8319e03551cb707e747f6c40ad476fbefdce71f3a7b67a1af1869bc6440686e7e0855e4f369d1d88b8099fba54714678627bba1aff41e7707bc97eddf890b0c08dce3e9800d24c6f61092ce28d481b5dea5c096c55d72f8946009131fb968e2bc8a054d825adab76740dcf0d758c8bf54ff38659e71b32bfe2e615aaabb0f5293085649cf60b9847bc62011ce3878af628984a5840a4ad5dae3702db367da0f8a165fed0517eb5c442b0145330241b97eeca733ba6688b9c129a61cd1236aff0e27bcf98c28b0fbeea55a3d7c7193d644b2749f986bd46af8938e8faaeafbd9cec3612ab005bd7c3eeafe9a31279ca6102560666ba16136ff1452f850adb\",\n        \"signed\": \"e6a9a6b436559a4320c45c0c2c4a2aedecb90d416d52c82680ac7330d062aebef3e9ac9f2c5ffa455c9be113013a2b282e5600fd306435ada83b1e48ba2a3605813d6061c56eae0ff53041c0244aa5e29e13ec0f3fb428d4beb8a99e04bca8c41bddb0db945f487efe38f2fc14a628fafa2462f860e4e34250eb4e93f139ab1b74a2614519e41ee2403be427930ab8bc82ec89ceafb60905bd4ddbbd13bdb19654314fc92373140b962e2258e038d71b9ec66b84ef8319e03551cb707e747f6c40ad476fbefdce71f3a7b67a1af1869bc6440686e7e0855e4f369d1d88b8099fba54714678627bba1aff41e7707bc97eddf890b0c08dce3e9800d24c6f61092ce28d481b5dea5c096c55d72f8946009131fb968e2bc8a054d825adab76740dcf0d758c8bf54ff38659e71b32bfe2e615aaabb0f5293085649cf60b9847bc62011ce3878af628984a5840a4ad5dae3702db367da0f8a165fed0517eb5c442b0145330241b97eeca733ba6688b9c129a61cd1236aff0e27bcf98c28b0fbeea55a3d7c7193d644b2749f986bd46af8938e8faaeafbd9cec3612ab005bd7c3eeafe9a31279ca6102560666ba16136ff1452f850adb\",\n        \"signature\": \"e6a9a6b436559a4320c45c0c2c4a2aedecb90d416d52c82680ac7330d062aebef3e9ac9f2c5ffa455c9be113013a2b282e5600fd306435ada83b1e48ba2a3605\"\n    },\n    {\n        \"secret_key\": \"f051af426d0c3282fafc8bf912ade1c24211a95ad200e1eef549320e1cb1a252\",\n        \"public_key\": \"fa87955e0ea13dde49d83dc22e63a2bdf1076725c2cc7f93c76511f28e7944f2\",\n        \"message\": \"b48d9f84762b3bcc66e96d76a616fa8fe8e01695251f47cfc1b7b17d60dc9f90d576ef64ee7d388504e2c9079638165a889696471c989a876f8f13b63b58d531fea4dd1229fc631668a047bfae2da281feae1b6de3ebe280abe0a82ee00fbfdc22ce2d10e06a0492ff1404dfc094c40b203bf55721dd787ed4e91d5517aaf58d3bdd35d44a65ae6ba75619b339b650518cefcc17493de27a3b5d41788f87edbde72610f181bf06e208e0eb7cdfe881d91a2d6cc77aa19c0fcf330fedb44675d800eb8cff9505d8887544a503cbe373c4847b19e8f3995726efd6649858595c57ccaf0cbc9eb25de83ba046bc9f1838ac7b8953dd81b81ac0f68d0e9338cb55402552afb6bc16949351b926d151a82efc695e8d7da0dd55099366789718ccbf36030bd2c3c109399be26cdb8b9e2a155f3b2cb1bfa71ab69a23625a4ac118fe91cb2c19788cf52a71d730d576b421d96982a51a2991daec440cda7e6cc3282b8312714278b819bfe2387eb96aa91d40173034f428\",\n        \"signed\": \"b8f713578a64466719aceb432fce302a87cf066bf3e102a350616921a840964bfc7e685d8fd17455ac3eb4861edcb8979d35e3a4bd82a078cd707721d733400eb48d9f84762b3bcc66e96d76a616fa8fe8e01695251f47cfc1b7b17d60dc9f90d576ef64ee7d388504e2c9079638165a889696471c989a876f8f13b63b58d531fea4dd1229fc631668a047bfae2da281feae1b6de3ebe280abe0a82ee00fbfdc22ce2d10e06a0492ff1404dfc094c40b203bf55721dd787ed4e91d5517aaf58d3bdd35d44a65ae6ba75619b339b650518cefcc17493de27a3b5d41788f87edbde72610f181bf06e208e0eb7cdfe881d91a2d6cc77aa19c0fcf330fedb44675d800eb8cff9505d8887544a503cbe373c4847b19e8f3995726efd6649858595c57ccaf0cbc9eb25de83ba046bc9f1838ac7b8953dd81b81ac0f68d0e9338cb55402552afb6bc16949351b926d151a82efc695e8d7da0dd55099366789718ccbf36030bd2c3c109399be26cdb8b9e2a155f3b2cb1bfa71ab69a23625a4ac118fe91cb2c19788cf52a71d730d576b421d96982a51a2991daec440cda7e6cc3282b8312714278b819bfe2387eb96aa91d40173034f428\",\n        \"signature\": \"b8f713578a64466719aceb432fce302a87cf066bf3e102a350616921a840964bfc7e685d8fd17455ac3eb4861edcb8979d35e3a4bd82a078cd707721d733400e\"\n    },\n    {\n        \"secret_key\": \"a103e92672c65f81ea5da1fff1a4038788479e941d503a756f4a755201a57c1d\",\n        \"public_key\": \"ee63a5b69641217acbaf3339da829ec071b9931e5987153514d30140837a7af4\",\n        \"message\": \"b1984e9eec085d524c1eb3b95c89c84ae085be5dc65c326e19025e1210a1d50edbbba5d1370cf15d68d687eb113233e0fba50f9433c7d358773950c67931db8296bbcbecec888e87e71a2f7579fad2fa162b85fb97473c456b9a5ce2956676969c7bf4c45679085b62f2c224fc7f458794273f6d12c5f3e0d06951824d1cca3e2f904559ed28e2868b366d79d94dc98667b9b5924268f3e39b1291e5abe4a758f77019dacbb22bd8196e0a83a5677658836e96ca5635055a1e63d65d036a68d87ac2fd283fdda390319909c5cc7680368848873d597f298e0c6172308030ffd452bb1363617b316ed7cd949a165dc8abb53f991aef3f3e9502c5dfe4756b7c6bfdfe89f5e00febdd6afb0402818f11cf8d1d5864fe9da1b86e39aa935831506cf2400ea7ed75bd9533b23e202fe875d7d9638c89d11cb2d6e6021ae6bd27c7754810d35cd3a61494f27b16fc794e2cd2f0d3453ada933865db78c579571f8fc5c5c6be8eaffce6a852e5b3b1c524c49313d427abcb\",\n        \"signed\": \"2aa2035c2ce5b5e6ae161e168f3ad0d6592bcf2c4a049d3ed342fceb56be9c7cb372027573ae0178e8878ebefca7b030327b8aad41857de58cb78e1a00cbac05b1984e9eec085d524c1eb3b95c89c84ae085be5dc65c326e19025e1210a1d50edbbba5d1370cf15d68d687eb113233e0fba50f9433c7d358773950c67931db8296bbcbecec888e87e71a2f7579fad2fa162b85fb97473c456b9a5ce2956676969c7bf4c45679085b62f2c224fc7f458794273f6d12c5f3e0d06951824d1cca3e2f904559ed28e2868b366d79d94dc98667b9b5924268f3e39b1291e5abe4a758f77019dacbb22bd8196e0a83a5677658836e96ca5635055a1e63d65d036a68d87ac2fd283fdda390319909c5cc7680368848873d597f298e0c6172308030ffd452bb1363617b316ed7cd949a165dc8abb53f991aef3f3e9502c5dfe4756b7c6bfdfe89f5e00febdd6afb0402818f11cf8d1d5864fe9da1b86e39aa935831506cf2400ea7ed75bd9533b23e202fe875d7d9638c89d11cb2d6e6021ae6bd27c7754810d35cd3a61494f27b16fc794e2cd2f0d3453ada933865db78c579571f8fc5c5c6be8eaffce6a852e5b3b1c524c49313d427abcb\",\n        \"signature\": \"2aa2035c2ce5b5e6ae161e168f3ad0d6592bcf2c4a049d3ed342fceb56be9c7cb372027573ae0178e8878ebefca7b030327b8aad41857de58cb78e1a00cbac05\"\n    },\n    {\n        \"secret_key\": \"d47c1b4b9e50cbb71fd07d096d91d87213d44b024373044761c4822f9d9df880\",\n        \"public_key\": \"f4e1cb86c8ca2cfee43e58594a8778436d3ea519704e00c1bbe48bbb1c9454f8\",\n        \"message\": \"88d7009d51de3d337eef0f215ea66ab830ec5a9e6823761c3b92ad93ea341db92ece67f4ef4ceb84194ae6926c3d014b2d59781f02e0b32f9a611222cb9a5850c6957cb8079ae64e0832a1f05e5d1a3c572f9d08f1437f76bb3b83b52967c3d48c3576848891c9658d4959eb80656d26cdba0810037c8a18318ff122f8aa8985c773cb317efa2f557f1c3896bcb162df5d87681bb787e7813aa2dea3b0c564d646a92861f444ca1407efbac3d12432cbb70a1d0eaffb11741d3718fedee2b83036189a6fc45a52f74fa487c18fd264a7945f6c9e44b011f5d86613f1939b19f4f4fdf53234057be3f005ad64eebf3c8ffb58cb40956c4336df01d4424b706a0e561d601708d12485e21bcb6d799d8d1d044b400064ec0944501406e70253947006cabbdb2dd6bd8cee4497653d9113a44d4de9b68d4c526fca0b9b0c18fe50fb917fdd9a914fb816108a73a6b3fff9e654e69c9cfe02b05c6c1b9d15c4e65cf31018b8100d784633ee1888eee3572aafa6f189ea22d0\",\n        \"signed\": \"627e7ca7e34ed6331d62b9541c1ea9a9292be7b0a65d805e266b5122272a82db7d765acc7e2a290d685804922f91ed04a3c382c03ff21a1768f584413c4e5f0088d7009d51de3d337eef0f215ea66ab830ec5a9e6823761c3b92ad93ea341db92ece67f4ef4ceb84194ae6926c3d014b2d59781f02e0b32f9a611222cb9a5850c6957cb8079ae64e0832a1f05e5d1a3c572f9d08f1437f76bb3b83b52967c3d48c3576848891c9658d4959eb80656d26cdba0810037c8a18318ff122f8aa8985c773cb317efa2f557f1c3896bcb162df5d87681bb787e7813aa2dea3b0c564d646a92861f444ca1407efbac3d12432cbb70a1d0eaffb11741d3718fedee2b83036189a6fc45a52f74fa487c18fd264a7945f6c9e44b011f5d86613f1939b19f4f4fdf53234057be3f005ad64eebf3c8ffb58cb40956c4336df01d4424b706a0e561d601708d12485e21bcb6d799d8d1d044b400064ec0944501406e70253947006cabbdb2dd6bd8cee4497653d9113a44d4de9b68d4c526fca0b9b0c18fe50fb917fdd9a914fb816108a73a6b3fff9e654e69c9cfe02b05c6c1b9d15c4e65cf31018b8100d784633ee1888eee3572aafa6f189ea22d0\",\n        \"signature\": \"627e7ca7e34ed6331d62b9541c1ea9a9292be7b0a65d805e266b5122272a82db7d765acc7e2a290d685804922f91ed04a3c382c03ff21a1768f584413c4e5f00\"\n    },\n    {\n        \"secret_key\": \"fc0c32c5eb6c71ea08dc2b300cbcef18fdde3ea20f68f21733237b4ddaab900e\",\n        \"public_key\": \"47c37d8a080857eb8777a6c0a9a5c927303faf5c320953b5de48e462e12d0062\",\n        \"message\": \"a7b1e2db6bdd96b3d51475603537a76b42b04d7ebd24fe515a887658e4a352e22109335639a59e2534811f4753b70209d0e4698e9d926088826c14689681ea00fa3a2fcaa0047ced3ef287e6172502b215e56497614d86b4cb26bcd77a2e172509360ee58893d01c0d0fb4d4abfe4dbd8d2a2f54190fa2f731c1ceac6829c3ddc9bfb2ffd70c57ba0c2b22d2326fbfe7390db8809f73547ff47b86c36f2bf7454e678c4f1c0fa870bd0e30bbf3278ec8d0c5e9b64aff0af64babc19b70f4cf9a41cb8f95d3cde24f456ba3571c8f021d38e591dec05cb5d1ca7b48f9da4bd734b069a9fd106500c1f408ab7fe8e4a6e6f3ed64da0ed24b01e33df8475f95fa9ed71d04dd30b3cd823755a3401bf5afae10ee7e18ec6fe637c3793fd434b48d7145130447e00299101052558b506554ec9c399f62941c3f414cbc352caa345b930adecfaddac91ee53d1451a65e06201026325de07c931f69bba868a7c87ee23c604ec6794332917dfe2c5b69669b659706917f71eddf96\",\n        \"signed\": \"6887c6e2b98a82af5ee3dfa7ca2cb25d9c10745620a82956acba85cb57c8ec24279fa42f092359a1b6bbeafba050f14b6288209e6ef7bc1e0a2b872c1138f305a7b1e2db6bdd96b3d51475603537a76b42b04d7ebd24fe515a887658e4a352e22109335639a59e2534811f4753b70209d0e4698e9d926088826c14689681ea00fa3a2fcaa0047ced3ef287e6172502b215e56497614d86b4cb26bcd77a2e172509360ee58893d01c0d0fb4d4abfe4dbd8d2a2f54190fa2f731c1ceac6829c3ddc9bfb2ffd70c57ba0c2b22d2326fbfe7390db8809f73547ff47b86c36f2bf7454e678c4f1c0fa870bd0e30bbf3278ec8d0c5e9b64aff0af64babc19b70f4cf9a41cb8f95d3cde24f456ba3571c8f021d38e591dec05cb5d1ca7b48f9da4bd734b069a9fd106500c1f408ab7fe8e4a6e6f3ed64da0ed24b01e33df8475f95fa9ed71d04dd30b3cd823755a3401bf5afae10ee7e18ec6fe637c3793fd434b48d7145130447e00299101052558b506554ec9c399f62941c3f414cbc352caa345b930adecfaddac91ee53d1451a65e06201026325de07c931f69bba868a7c87ee23c604ec6794332917dfe2c5b69669b659706917f71eddf96\",\n        \"signature\": \"6887c6e2b98a82af5ee3dfa7ca2cb25d9c10745620a82956acba85cb57c8ec24279fa42f092359a1b6bbeafba050f14b6288209e6ef7bc1e0a2b872c1138f305\"\n    },\n    {\n        \"secret_key\": \"a8d73d639a23cc6a967ef31bcabb5d063e53e1eab8fcc7cab9bc3a17fde9c2f8\",\n        \"public_key\": \"8daa9f4c8b1a44691bf44521f2f7ca45dc7fc61f6a4ce6f98faa41c2a74977d1\",\n        \"message\": \"fd1fac3d53313b11acd29f5a83ac11896dab2530fa47865b2295c0d99dd67c36ed8e5fa549150c794c5549efb5c1d69114d5d607b23285b7212afaab57846a54ae67b9e880e07b6586607cecf6d4eed516a3a75511fe367d88eb871e6d71b7d6aa1367a01421b1088fc2d75e44954b73625c52da8a3a183c60be9da6050f59a453caa53520593671728d431877bfaac913a765fb6a56b75290b2a8aaac34afb9217ba1b0d5850ba0fdabf80969def0feee794ceb60614e3368e63ef20e4c32d341ec9b0328ea9fe139207ed7a626ff08943b415233db7cfcc845c9b63121d4ed52ec3748ab6a1f36b2103c7dc7e9303acea4ba8af7a3e07184fb491e891ede84f0dc41cadc3973028e879acd2031afc29a16092868e2c7f539fc1b792edab195a25ab9830661346b39ef53915de4af52c421eaf172e9da76a08c283a52df907f705d7e8599c5baae0c2af380c1bb46f93484a03f28374324b278992b50b7afa02552cafa503f034f8d866e9b720271dd68ccb685a85fffd1\",\n        \"signed\": \"c4dcef1a2453939b364b340250c3129431431d5ba3f47670ab07ce680c69bf28b678627c76a6360fc40dc109aa7dea371b825e46134f624572182acf3957e70ffd1fac3d53313b11acd29f5a83ac11896dab2530fa47865b2295c0d99dd67c36ed8e5fa549150c794c5549efb5c1d69114d5d607b23285b7212afaab57846a54ae67b9e880e07b6586607cecf6d4eed516a3a75511fe367d88eb871e6d71b7d6aa1367a01421b1088fc2d75e44954b73625c52da8a3a183c60be9da6050f59a453caa53520593671728d431877bfaac913a765fb6a56b75290b2a8aaac34afb9217ba1b0d5850ba0fdabf80969def0feee794ceb60614e3368e63ef20e4c32d341ec9b0328ea9fe139207ed7a626ff08943b415233db7cfcc845c9b63121d4ed52ec3748ab6a1f36b2103c7dc7e9303acea4ba8af7a3e07184fb491e891ede84f0dc41cadc3973028e879acd2031afc29a16092868e2c7f539fc1b792edab195a25ab9830661346b39ef53915de4af52c421eaf172e9da76a08c283a52df907f705d7e8599c5baae0c2af380c1bb46f93484a03f28374324b278992b50b7afa02552cafa503f034f8d866e9b720271dd68ccb685a85fffd1\",\n        \"signature\": \"c4dcef1a2453939b364b340250c3129431431d5ba3f47670ab07ce680c69bf28b678627c76a6360fc40dc109aa7dea371b825e46134f624572182acf3957e70f\"\n    },\n    {\n        \"secret_key\": \"79c7dcb7d59a8df6b2b2ba0413059d89680995c20e916da01b8f067dc60cdeb4\",\n        \"public_key\": \"298743c73918bd556b28f8d4824a09b814752a7aeae7ee04875c53f4d6b108d9\",\n        \"message\": \"5fe202f5b33b7788810d2508a13b3114d69b8596e6eacda05a04a2eb597fa3279c208b5a5b65daacb699f144e1d660e78e139b578331abec5c3c35334454f03e832c8d6e2984df5d450ecb5d33582a78808a9c78f26ebcd1244ef52e3fa6dca115c1f0cb56e38eae0e5b39f5fd863dffd0b2fb5b958f2d739db312fc667a17b031c4c9f8c5a2ad577984cc4146c437580efd2152173fe0d5782cc2ae9831a8d9a04177256018ff7631e0b0d8a99cb28f008b320421e27a74c31359188663456d85e098c1ebd281701097b6ae5a871e5ccc02058a501416cb91c12cef5be6f1914370e563f1a1b2aa41f4b8ee84cd32a1d509e529787d14a445438d807ecd620e2fa26de0da6426864784d4a28f54103e609283b99ee9b2b699c980bbb7882c3ea68ddc90802ac232f2c8e84291987bf3c5240921b59cfa214969317673d0be7f34b1ca0e15ea73c7175401ce550be106b49e62f8db68695e740e0f3a3556a19f3c8e6b91ac1cc23e863fcd0f0d9eb7047aa631e0d2eb9bcc6b\",\n        \"signed\": \"7b7cbe44c771e4371bae13b0722babcc1064155732962f407cba2acd35381d42210bece822f4681121fd4dab745a1f3077922fba1a78045b712902baccac660e5fe202f5b33b7788810d2508a13b3114d69b8596e6eacda05a04a2eb597fa3279c208b5a5b65daacb699f144e1d660e78e139b578331abec5c3c35334454f03e832c8d6e2984df5d450ecb5d33582a78808a9c78f26ebcd1244ef52e3fa6dca115c1f0cb56e38eae0e5b39f5fd863dffd0b2fb5b958f2d739db312fc667a17b031c4c9f8c5a2ad577984cc4146c437580efd2152173fe0d5782cc2ae9831a8d9a04177256018ff7631e0b0d8a99cb28f008b320421e27a74c31359188663456d85e098c1ebd281701097b6ae5a871e5ccc02058a501416cb91c12cef5be6f1914370e563f1a1b2aa41f4b8ee84cd32a1d509e529787d14a445438d807ecd620e2fa26de0da6426864784d4a28f54103e609283b99ee9b2b699c980bbb7882c3ea68ddc90802ac232f2c8e84291987bf3c5240921b59cfa214969317673d0be7f34b1ca0e15ea73c7175401ce550be106b49e62f8db68695e740e0f3a3556a19f3c8e6b91ac1cc23e863fcd0f0d9eb7047aa631e0d2eb9bcc6b\",\n        \"signature\": \"7b7cbe44c771e4371bae13b0722babcc1064155732962f407cba2acd35381d42210bece822f4681121fd4dab745a1f3077922fba1a78045b712902baccac660e\"\n    },\n    {\n        \"secret_key\": \"b9ced0412593fefed95e94ac965e5b23ff9d4b0e797db02bf497994d3b793e60\",\n        \"public_key\": \"c1629a723189959337f5535201e5d395ba0a03ea8c17660d0f8b6f6e6404bb12\",\n        \"message\": \"555bb39c1899d57cabe428064c2d925f5fc4cf7059b95fb89a8e9e3a7e426c6c922d9e4d76984ea2383cabb4f2befd89c1f20eaa8a00dbe787cfa70ae2ae6aa90331cbbe580fa5a02184ed05e6c8e89d576af28aeeaf7c4e2500f358a00971a0a75920e854849bf332142975404f598c32e96982043d992bcd1a4fe819bb5634ad03467afc4ce05073f88ba1ba4ae8653a04665cf3f71690fe13343885bc5ebc0e5e62d882f43b7c68900ac9438bf4a81ce90169ec129ee63e2c675a1a5a67e27cc798c48cc23f51078f463b3b7cc14e3bcfd2e9b82c75240934cbdc50c4308f282f193122995606f40135100a291c55afdf8934eb8b61d81421674124dec3b88f9a73110a9e616f5b826b9d343f3ac0e9d7bdf4fd8b648b40f0098b3897a3a1cd65a64570059b8bc5c6743883074c88623c1f5a88c58969e21c692aca236833d3470b3eb09815e1138e9d0650c390eee977422193b00918be8a97cc6199b451b05b5730d1d13358cf74610678f7ac7f7895cc2efc456e03873b\",\n        \"signed\": \"f1b797ded8a6942b12626848340fb719fcddafd98f33e2992d357bfdd35933c7ac561e5b2f939464338c5666854ca885c4d046eb2c54e48a1b5ed266ad34de05555bb39c1899d57cabe428064c2d925f5fc4cf7059b95fb89a8e9e3a7e426c6c922d9e4d76984ea2383cabb4f2befd89c1f20eaa8a00dbe787cfa70ae2ae6aa90331cbbe580fa5a02184ed05e6c8e89d576af28aeeaf7c4e2500f358a00971a0a75920e854849bf332142975404f598c32e96982043d992bcd1a4fe819bb5634ad03467afc4ce05073f88ba1ba4ae8653a04665cf3f71690fe13343885bc5ebc0e5e62d882f43b7c68900ac9438bf4a81ce90169ec129ee63e2c675a1a5a67e27cc798c48cc23f51078f463b3b7cc14e3bcfd2e9b82c75240934cbdc50c4308f282f193122995606f40135100a291c55afdf8934eb8b61d81421674124dec3b88f9a73110a9e616f5b826b9d343f3ac0e9d7bdf4fd8b648b40f0098b3897a3a1cd65a64570059b8bc5c6743883074c88623c1f5a88c58969e21c692aca236833d3470b3eb09815e1138e9d0650c390eee977422193b00918be8a97cc6199b451b05b5730d1d13358cf74610678f7ac7f7895cc2efc456e03873b\",\n        \"signature\": \"f1b797ded8a6942b12626848340fb719fcddafd98f33e2992d357bfdd35933c7ac561e5b2f939464338c5666854ca885c4d046eb2c54e48a1b5ed266ad34de05\"\n    },\n    {\n        \"secret_key\": \"81da168f02d46bb87cda845da43f8a6cba2c016878d6f49c6f061a60f155a04a\",\n        \"public_key\": \"aff86e98093ca4c71b1b804c5fe451cfdf868250dea30345fa4b89bb09b6a53b\",\n        \"message\": \"6bc6726a34a64aae76ab08c92b179e54ff5d2e65eb2c6c659ae8703cc245cbc2cf45a12b22c468ae61fd9a6627ad0626c9b1e5af412cb483eaee1db11b29f0a510c13e38020e09ae0eee762537a3e9d1a0c7b033d097fdc1f4f82629a9de9ef38da1cf96a940357d5f2e0e7e8dbc29db728a1e6aad876e5e053113d06420272b87cf0c40dfe03a544de96c7aea13ba0029b57b48d99dcc6a650492d78c4cdd1b28e1a115a7e3e7a7cb21333d4ff80858dfb67782c16354b8716596560d7d8e389eb15a052a0bf5d16eb54fb3e4973ad4984e72a187f5347d5b262c32b1647e42b6a53837096cc78c2a05ce1c6e12493a03f1a667584cb97f4fcd57ee944c65b7eed25f7ae0f3f6cede173fdfacf5af1db143730d18096664914ba4cfc6966f392022781c66a9417ca2680b51f63e4fba424ecfdbc6a2f01787d0e7484f8a8ab390aeaa6d1f7ed325d82feaa1692a4984fae43da87329b045da8f0a4f56b695aa935de152ce0385153720979a2b7006d405fcb0fba09e23b85fd19b\",\n        \"signed\": \"4aaca947e3f22cc8b8588ee030ace8f6b5f5711c2974f20cc18c3b655b07a5bc1366b59a1708032d12cae01ab794f8cbcc1a330874a75035db1d69422d2fc00c6bc6726a34a64aae76ab08c92b179e54ff5d2e65eb2c6c659ae8703cc245cbc2cf45a12b22c468ae61fd9a6627ad0626c9b1e5af412cb483eaee1db11b29f0a510c13e38020e09ae0eee762537a3e9d1a0c7b033d097fdc1f4f82629a9de9ef38da1cf96a940357d5f2e0e7e8dbc29db728a1e6aad876e5e053113d06420272b87cf0c40dfe03a544de96c7aea13ba0029b57b48d99dcc6a650492d78c4cdd1b28e1a115a7e3e7a7cb21333d4ff80858dfb67782c16354b8716596560d7d8e389eb15a052a0bf5d16eb54fb3e4973ad4984e72a187f5347d5b262c32b1647e42b6a53837096cc78c2a05ce1c6e12493a03f1a667584cb97f4fcd57ee944c65b7eed25f7ae0f3f6cede173fdfacf5af1db143730d18096664914ba4cfc6966f392022781c66a9417ca2680b51f63e4fba424ecfdbc6a2f01787d0e7484f8a8ab390aeaa6d1f7ed325d82feaa1692a4984fae43da87329b045da8f0a4f56b695aa935de152ce0385153720979a2b7006d405fcb0fba09e23b85fd19b\",\n        \"signature\": \"4aaca947e3f22cc8b8588ee030ace8f6b5f5711c2974f20cc18c3b655b07a5bc1366b59a1708032d12cae01ab794f8cbcc1a330874a75035db1d69422d2fc00c\"\n    },\n    {\n        \"secret_key\": \"af2e60da0f29bb1614fc3f193cc353331986b73f3f9a0aec9421b9473d6a4b6a\",\n        \"public_key\": \"c8bfe2835822199c6127b806fabeef0cb9ff59f3c81ff0cb89c556f55106af6a\",\n        \"message\": \"7dbb77b88bda94f344416a06b096566c6e8b393931a8243a6cab75c361fde7dc536aec40cded83296a89e8c3bef7d787cfc49401a7b9183f138d5000619ff073c05e2f841d6008358f10a2da7dcfac3d4d70c20d2ec34c7b6d5cd1a734d6bbb11c5fd8d2bce32ac810ef82b4188aa8ea3cfc3032233dc0e2600e9db6e18bc22b10044a31c15baceaf5554de89d2a3466807f244414d080ff2963956c6e83c8e144ed0066088b476ddcb564403447d9159f9089aba2b4d5575c4d8ae66fc8690e7349ed40832e6369c024563ec493bfcc0fc9ac787ac841397fe133167283d80c42f006a99d39e82979da3fa9334bd9ede0d14b41b7466bcebbe8171bc804a645d3723274a1b92bf82fd993358744de92441903d436fd47f23d40052a3829367f202f0553b5e49b76c5e03fa6ce7c3cf5eeb21de967bec4dd355925384ebf96697e823762bac4d43a767c241a4cef724a970d00ff3a8ab3b83eed840075c74e90f306e330013260962161e9d0910de183622ce9a6b8d5144280550fc7\",\n        \"signed\": \"50f9f941a8da9f6240f76d2fa3b06dd6b2292ed32d1c05218097d34d8a19dfe553f76ae3c6b4a2ed20852128461540decf418f52d38e64037eec7771bd1afe007dbb77b88bda94f344416a06b096566c6e8b393931a8243a6cab75c361fde7dc536aec40cded83296a89e8c3bef7d787cfc49401a7b9183f138d5000619ff073c05e2f841d6008358f10a2da7dcfac3d4d70c20d2ec34c7b6d5cd1a734d6bbb11c5fd8d2bce32ac810ef82b4188aa8ea3cfc3032233dc0e2600e9db6e18bc22b10044a31c15baceaf5554de89d2a3466807f244414d080ff2963956c6e83c8e144ed0066088b476ddcb564403447d9159f9089aba2b4d5575c4d8ae66fc8690e7349ed40832e6369c024563ec493bfcc0fc9ac787ac841397fe133167283d80c42f006a99d39e82979da3fa9334bd9ede0d14b41b7466bcebbe8171bc804a645d3723274a1b92bf82fd993358744de92441903d436fd47f23d40052a3829367f202f0553b5e49b76c5e03fa6ce7c3cf5eeb21de967bec4dd355925384ebf96697e823762bac4d43a767c241a4cef724a970d00ff3a8ab3b83eed840075c74e90f306e330013260962161e9d0910de183622ce9a6b8d5144280550fc7\",\n        \"signature\": \"50f9f941a8da9f6240f76d2fa3b06dd6b2292ed32d1c05218097d34d8a19dfe553f76ae3c6b4a2ed20852128461540decf418f52d38e64037eec7771bd1afe00\"\n    },\n    {\n        \"secret_key\": \"605f90b53d8e4a3b48b97d745439f2a0807d83b8502e8e2979f03e8d376ac9fe\",\n        \"public_key\": \"aa3fae4cfa6f6bfd14ba0afa36dcb1a2656f36541ad6b3e67f1794b06360a62f\",\n        \"message\": \"3bcdcac292ac9519024aaecee2b3e999ff5d3445e9f1eb60940f06b91275b6c5db2722ed4d82fe89605226530f3e6b0737b308cde8956184944f388a80042f6cba274c0f7d1192a0a96b0da6e2d6a61b76518fbee555773a414590a928b4cd545fccf58172f35857120eb96e75c5c8ac9ae3add367d51d34ac403446360ec10f553ea9f14fb2b8b78cba18c3e506b2f04097063a43b2d36431cce02caf11c5a4db8c821752e52985d5af1bfbf4c61572e3fadae3ad424acd81662ea5837a1143b9669391d7b9cfe230cffb3a7bb03f6591c25a4f01c0d2d4aca3e74db1997d3739c851f0327db919ff6e77f6c8a20fdd3e1594e92d01901ab9aef194fc893e70d78c8ae0f480001a515d4f9923ae6278e8927237d05db23e984c92a683882f57b1f1882a74a193ab6912ff241b9ffa662a0d47f29205f084dbde845baaeb5dd36ae6439a437642fa763b57e8dbe84e55813f0151e97e5b9de768b234b8db15c496d4bfcfa1388788972bb50ce030bc6e0ccf4fa7d00d343782f6ba8de0\",\n        \"signed\": \"dd0212e63288cbe14a4569b4d891da3c7f92727c5e7f9a801cf9d6827085e7095b669d7d45f882ca5f0745dccd24d87a57181320191e5b7a47c3f7f2dccbd7073bcdcac292ac9519024aaecee2b3e999ff5d3445e9f1eb60940f06b91275b6c5db2722ed4d82fe89605226530f3e6b0737b308cde8956184944f388a80042f6cba274c0f7d1192a0a96b0da6e2d6a61b76518fbee555773a414590a928b4cd545fccf58172f35857120eb96e75c5c8ac9ae3add367d51d34ac403446360ec10f553ea9f14fb2b8b78cba18c3e506b2f04097063a43b2d36431cce02caf11c5a4db8c821752e52985d5af1bfbf4c61572e3fadae3ad424acd81662ea5837a1143b9669391d7b9cfe230cffb3a7bb03f6591c25a4f01c0d2d4aca3e74db1997d3739c851f0327db919ff6e77f6c8a20fdd3e1594e92d01901ab9aef194fc893e70d78c8ae0f480001a515d4f9923ae6278e8927237d05db23e984c92a683882f57b1f1882a74a193ab6912ff241b9ffa662a0d47f29205f084dbde845baaeb5dd36ae6439a437642fa763b57e8dbe84e55813f0151e97e5b9de768b234b8db15c496d4bfcfa1388788972bb50ce030bc6e0ccf4fa7d00d343782f6ba8de0\",\n        \"signature\": \"dd0212e63288cbe14a4569b4d891da3c7f92727c5e7f9a801cf9d6827085e7095b669d7d45f882ca5f0745dccd24d87a57181320191e5b7a47c3f7f2dccbd707\"\n    },\n    {\n        \"secret_key\": \"9e2c3d189838f4dd52ef0832886874c5ca493983ddadc07cbc570af2ee9d6209\",\n        \"public_key\": \"f68d3b81e73557ee1f08bd2d3f46a4718256a0f3cd8d2e03eb8fe882aab65c69\",\n        \"message\": \"19485f5238ba82eadf5eff14ca75cd42e5d56fea69d5718cfb5b1d40d760899b450e66884558f3f25b7c3de9afc4738d7ac09da5dd4689bbfac07836f5e0be432b1ddcf1b1a075bc9815d0debc865d90bd5a0c5f5604d9b46ace816c57694ecc3d40d8f84df0ede2bc4d577775a027f725de0816f563fa88f88e077720ebb6ac02574604819824db7474d4d0b22cd1bc05768e0fb867ca1c1a7b90b34ab7a41afc66957266ac0c915934aaf31c0cf6927a4f03f23285e6f24afd5813849bb08c203ac2d0336dcbf80d77f6cf7120edfbcdf181db107ec8e00f32449c1d3f5c049a92694b4ea2c6ebe5e2b0f64b5ae50ad3374d246b3270057e724a27cf263b633ab65ecb7f5c266b8007618b10ac9ac83db0febc04fd863d9661ab6e58494766f71b9a867c5a7a4555f667c1af2e54588f162a41ce756407cc4161d607b6e0682980934caa1bef036f7330d9eef01ecc553583fee5994e533a46ca916f60f8b961ae01d20f7abf0df6141b604de733c636b42018cd5f1d1ef4f84cee40fc\",\n        \"signed\": \"38a31b6b465084738262a26c065fe5d9e2886bf9dd35cde05df9bad0cc7db401c750aa19e66090bce25a3c721201e60502c8c10454346648af065eab0ee7d80f19485f5238ba82eadf5eff14ca75cd42e5d56fea69d5718cfb5b1d40d760899b450e66884558f3f25b7c3de9afc4738d7ac09da5dd4689bbfac07836f5e0be432b1ddcf1b1a075bc9815d0debc865d90bd5a0c5f5604d9b46ace816c57694ecc3d40d8f84df0ede2bc4d577775a027f725de0816f563fa88f88e077720ebb6ac02574604819824db7474d4d0b22cd1bc05768e0fb867ca1c1a7b90b34ab7a41afc66957266ac0c915934aaf31c0cf6927a4f03f23285e6f24afd5813849bb08c203ac2d0336dcbf80d77f6cf7120edfbcdf181db107ec8e00f32449c1d3f5c049a92694b4ea2c6ebe5e2b0f64b5ae50ad3374d246b3270057e724a27cf263b633ab65ecb7f5c266b8007618b10ac9ac83db0febc04fd863d9661ab6e58494766f71b9a867c5a7a4555f667c1af2e54588f162a41ce756407cc4161d607b6e0682980934caa1bef036f7330d9eef01ecc553583fee5994e533a46ca916f60f8b961ae01d20f7abf0df6141b604de733c636b42018cd5f1d1ef4f84cee40fc\",\n        \"signature\": \"38a31b6b465084738262a26c065fe5d9e2886bf9dd35cde05df9bad0cc7db401c750aa19e66090bce25a3c721201e60502c8c10454346648af065eab0ee7d80f\"\n    },\n    {\n        \"secret_key\": \"31010d1d67eb616348e84792b92d5dc128553cb52f6368159fe7b816cd0e7c37\",\n        \"public_key\": \"266543d96787ca901fcff06e6e434491ae0970880a5a187d535edb19db5cabeb\",\n        \"message\": \"39f89a5e7aa530b5463d498f8035b9909d55da527cdbd4de6d228379f089e608a9207a2c5b9c42051a60c8ca3fb97a1c06cd747d9d0739970ceb88ce526f971140ea2ec21f090ba075bf8975faa508b1cc10efa494dc172e6d3d3f3f75dc8e0e96f05c0cccb2f96e911cfa7a2c82c9845018bb1f9d75f82e3dfe1139347b2ac058b014ac93760c90f5567ab5c4eba04b49fb09ddadd305be511dfe05c96ebc86fd67b5d0ab57d85f4fe5e2f0fa9d88a68f0f6b6bc8bb944eb3c0b17557e55d5ea187d922a42813e69057c9b6a7f75e49921b7079e58f8a63719ee3e1ad10cf0e8a70c4f1540218b70494bd029ee02ff9727a7d85d377919ec4051479b70f7cd6767723fe42c1c7899c2b7c1f702dd6b4d13b672d488f34a0e969db79cc2cb2524a948a8de4c5b623ecd90d6e82d97033c125637d1cd8c84803d8fbc012846ffe484f6c02149258f9462fa1e99c307dd0062fe0b6f11eee40c2629ef7c0f6a5107259ea5b9ffb6f29f12c32f7b5228cabc986ab66450af9dcc3da09d0e0b9a4\",\n        \"signed\": \"7b1eb677c3e5e6a8b4ba69fcb7f6b1870e42a8d58958a35c674e2db82107481c4c7b37f0f689d39d9f51e181b17b1108c15a3e27b29df3a4315dcc4faf12220539f89a5e7aa530b5463d498f8035b9909d55da527cdbd4de6d228379f089e608a9207a2c5b9c42051a60c8ca3fb97a1c06cd747d9d0739970ceb88ce526f971140ea2ec21f090ba075bf8975faa508b1cc10efa494dc172e6d3d3f3f75dc8e0e96f05c0cccb2f96e911cfa7a2c82c9845018bb1f9d75f82e3dfe1139347b2ac058b014ac93760c90f5567ab5c4eba04b49fb09ddadd305be511dfe05c96ebc86fd67b5d0ab57d85f4fe5e2f0fa9d88a68f0f6b6bc8bb944eb3c0b17557e55d5ea187d922a42813e69057c9b6a7f75e49921b7079e58f8a63719ee3e1ad10cf0e8a70c4f1540218b70494bd029ee02ff9727a7d85d377919ec4051479b70f7cd6767723fe42c1c7899c2b7c1f702dd6b4d13b672d488f34a0e969db79cc2cb2524a948a8de4c5b623ecd90d6e82d97033c125637d1cd8c84803d8fbc012846ffe484f6c02149258f9462fa1e99c307dd0062fe0b6f11eee40c2629ef7c0f6a5107259ea5b9ffb6f29f12c32f7b5228cabc986ab66450af9dcc3da09d0e0b9a4\",\n        \"signature\": \"7b1eb677c3e5e6a8b4ba69fcb7f6b1870e42a8d58958a35c674e2db82107481c4c7b37f0f689d39d9f51e181b17b1108c15a3e27b29df3a4315dcc4faf122205\"\n    },\n    {\n        \"secret_key\": \"8ff2398cd51f51d4c2c57869a2218b8486822031f400729f4ac4d5909c48bafe\",\n        \"public_key\": \"a5a88704b68677be3d16c3dc0052cfee6e2b30e08609059d4cba52c6d96061fb\",\n        \"message\": \"993953e47a341188bc592942e1557af29546e4e9368e2f1a5ee9806e2baf66b6190191fc5d2b7e47de37ff054fb2bbb1f031684ada5d607adda3d65433122fa904e0456faa84109bbc517f8ad39660876382adcfed0f7620cf1164622eacd91eb37a8596462ebe9ebe26bdc1e32cc34ad46fb1cea420e73c31215408e6d35425f44a829b132f631a3f6dd4b873a000667e19eb22fffd5903aaa7d4c8fdf21953c3c6178f5f8cb2aa6bff92894ead835888df060a3c9043026e0e2cef275497e7d105df3b644a98f26bf00105c99413ee0af8851954d65ceb8d79ad3071b8bb87f0b19743d2556ffd9819830b6eebf7ecc7e045661f43570ce9fdbbe2d252406fa90d04236f222c429ec16b1287224ada1a532161ae8b481bcab8d47afb3ed0445b3060fd6759179856f4085c1e585fd7c1409799af693cf427bd1d3dc10b5ae3447a8d2a18dc3a12a6860b22175dd5eb53a0950432e2d7aefece8af0ade3d8567743de43690f2d253723c5d7e48bd30d2937593701cecde9154b7665cb611d7d\",\n        \"signed\": \"417a647829c92898e520ff5311daa0a139cd8fffcb25a18e6d9b50cb52cbc35424c39ebbb5d5ac6a6d63f1f53c4df212f7025a8aaef8e36493c874c3ce341a0e993953e47a341188bc592942e1557af29546e4e9368e2f1a5ee9806e2baf66b6190191fc5d2b7e47de37ff054fb2bbb1f031684ada5d607adda3d65433122fa904e0456faa84109bbc517f8ad39660876382adcfed0f7620cf1164622eacd91eb37a8596462ebe9ebe26bdc1e32cc34ad46fb1cea420e73c31215408e6d35425f44a829b132f631a3f6dd4b873a000667e19eb22fffd5903aaa7d4c8fdf21953c3c6178f5f8cb2aa6bff92894ead835888df060a3c9043026e0e2cef275497e7d105df3b644a98f26bf00105c99413ee0af8851954d65ceb8d79ad3071b8bb87f0b19743d2556ffd9819830b6eebf7ecc7e045661f43570ce9fdbbe2d252406fa90d04236f222c429ec16b1287224ada1a532161ae8b481bcab8d47afb3ed0445b3060fd6759179856f4085c1e585fd7c1409799af693cf427bd1d3dc10b5ae3447a8d2a18dc3a12a6860b22175dd5eb53a0950432e2d7aefece8af0ade3d8567743de43690f2d253723c5d7e48bd30d2937593701cecde9154b7665cb611d7d\",\n        \"signature\": \"417a647829c92898e520ff5311daa0a139cd8fffcb25a18e6d9b50cb52cbc35424c39ebbb5d5ac6a6d63f1f53c4df212f7025a8aaef8e36493c874c3ce341a0e\"\n    },\n    {\n        \"secret_key\": \"ef816c8f5ec34ef41f68831d90cd29e52de8973782d003ee4edada2ada2691d6\",\n        \"public_key\": \"47f9b363a88a45053a05bb72160852bfe8f7dfefc2f37283de346752caf092cc\",\n        \"message\": \"9593c35cdec535bebb6965da68eab0b646bffcfbd04883bc4cef90d5d01f018c63c9b0ddfb3cef5e786284d5218caaaf060e9288952f16301ed8a4c1bcee256356a0c8bda359fbaa2782b10c86d18e20f7a0ec99b27a0b4dbefc0a262a3bf68fe81444dcae5f693eb0f16e6ee03f8fcbf3a3398146d20ec4d2657761fd0320fee7ea703c49a6a543bc9bba911e7925038710e8c36552d476d6027f58b2c52ba51ad65ea4f039c78f96b889102bb4bdd69b68e9c3d45b5176a2d82b0b95dc321016370dae30c3936515db0464c41774301c74e42d89b8bf4b9c19ed554b12febac0f60ddb3219ccc5603531dbf2eb5f293425d72ccefa0c7f144aba89347b296be87ff18994b4a0c70c930f059303b5dd4c8fe1e6bbc3cd68c6c0d84246dc6e6140a2abd1780b13f1594a6019d1778b7cbb3a3e3a34bfae7297f0b3edc376941c32352a4be314b84a9d8d6d7f1f38a0ad3798020aa2a331a402be9c704484744a730cbdedcb904b6fde708fbd14bfdc29efd461d1d0b5825de0bc79422b69a2722f\",\n        \"signed\": \"65c5d10ea7bfdbb38d55364a9968f82b548224dff3363b2ddcf585163dea27dc63b0563eb1a8dfbee951d3c9b33fcd6bbf0921c3abb21786b229069bd9ca000a9593c35cdec535bebb6965da68eab0b646bffcfbd04883bc4cef90d5d01f018c63c9b0ddfb3cef5e786284d5218caaaf060e9288952f16301ed8a4c1bcee256356a0c8bda359fbaa2782b10c86d18e20f7a0ec99b27a0b4dbefc0a262a3bf68fe81444dcae5f693eb0f16e6ee03f8fcbf3a3398146d20ec4d2657761fd0320fee7ea703c49a6a543bc9bba911e7925038710e8c36552d476d6027f58b2c52ba51ad65ea4f039c78f96b889102bb4bdd69b68e9c3d45b5176a2d82b0b95dc321016370dae30c3936515db0464c41774301c74e42d89b8bf4b9c19ed554b12febac0f60ddb3219ccc5603531dbf2eb5f293425d72ccefa0c7f144aba89347b296be87ff18994b4a0c70c930f059303b5dd4c8fe1e6bbc3cd68c6c0d84246dc6e6140a2abd1780b13f1594a6019d1778b7cbb3a3e3a34bfae7297f0b3edc376941c32352a4be314b84a9d8d6d7f1f38a0ad3798020aa2a331a402be9c704484744a730cbdedcb904b6fde708fbd14bfdc29efd461d1d0b5825de0bc79422b69a2722f\",\n        \"signature\": \"65c5d10ea7bfdbb38d55364a9968f82b548224dff3363b2ddcf585163dea27dc63b0563eb1a8dfbee951d3c9b33fcd6bbf0921c3abb21786b229069bd9ca000a\"\n    },\n    {\n        \"secret_key\": \"45eb0c4dfafa2a7690ef579c095456ceedcd32f0b6144d0c380f87fb744a0b1f\",\n        \"public_key\": \"fc85632c98384b5f9682aed9cd664cf1f48e588be2d568e5c734494df4c712b8\",\n        \"message\": \"6f66d847405a03d7bd6f8d2897dbdf04e76d7df2d9470a4996b7dd6db88500f8f4f83e960e219a2486e24545add13614550414d827c41a9b08318daf01b15214c64a4266cbf8a5717ada3e62c26729073e16ddbd66f2d520e1e09935de05e4db11c396d477010aec66aafb762e69238d0b9e76b452454bf9e451e76ac79e6990d41b932bc32917093783c91bc9cf0bbe3b514070a1e692ff34fd06b66ea11f39e10af933ee96d8e9b677cb03737e7964eeaa725f121207f9c1b26a96c616df7cb7caef47bda901368ff2ea586e422e65bf21a691bdd2c13e67fff58cfbfed81782049dafa0f727df88623f2f7e8f262daf939542a187b8720a9b6b2b09890e54876b28a43874abbe3bfa981f8138b772c5d51736885f86acac2215a0b010dfc2c6b150845d4f8296252586a3e115f303c3d8a582e20fd2d43f6c446e5d00280ec179823b7fb4c1b0feb94eb4ef1707f5184e3b52461a7562d1f307cb751cdbbf6eae49ffae91862358e74e9548822b8a049fec6bf4c7a99cabbe09206577b657e31f\",\n        \"signed\": \"55851de8e1092f78944f6c6dd95bf07e2dbc8df7f57ad576829b978e3af58a7a8e94ed4dccbc0182467edf0bad4bae7ca84aa9a0c17c61a9e0ddff1d7525d7046f66d847405a03d7bd6f8d2897dbdf04e76d7df2d9470a4996b7dd6db88500f8f4f83e960e219a2486e24545add13614550414d827c41a9b08318daf01b15214c64a4266cbf8a5717ada3e62c26729073e16ddbd66f2d520e1e09935de05e4db11c396d477010aec66aafb762e69238d0b9e76b452454bf9e451e76ac79e6990d41b932bc32917093783c91bc9cf0bbe3b514070a1e692ff34fd06b66ea11f39e10af933ee96d8e9b677cb03737e7964eeaa725f121207f9c1b26a96c616df7cb7caef47bda901368ff2ea586e422e65bf21a691bdd2c13e67fff58cfbfed81782049dafa0f727df88623f2f7e8f262daf939542a187b8720a9b6b2b09890e54876b28a43874abbe3bfa981f8138b772c5d51736885f86acac2215a0b010dfc2c6b150845d4f8296252586a3e115f303c3d8a582e20fd2d43f6c446e5d00280ec179823b7fb4c1b0feb94eb4ef1707f5184e3b52461a7562d1f307cb751cdbbf6eae49ffae91862358e74e9548822b8a049fec6bf4c7a99cabbe09206577b657e31f\",\n        \"signature\": \"55851de8e1092f78944f6c6dd95bf07e2dbc8df7f57ad576829b978e3af58a7a8e94ed4dccbc0182467edf0bad4bae7ca84aa9a0c17c61a9e0ddff1d7525d704\"\n    },\n    {\n        \"secret_key\": \"709d2e199006f5369a7a0bdd34e74dc784be33880ea3c5dd10ed5c94451e7972\",\n        \"public_key\": \"06f989202ba2cbc9c150be611262aca00c45f012f89fbaf89f8ceccba0b1934a\",\n        \"message\": \"62f003140fa09e0387d187a0ff96c4563df9f4e28c2282c0183ac3eede1312354921f780fca5361d3068d29949630b7530cd5914ace0468d014b6f53d839b82e38817dbf2d8392c3ce3424eab86a24d804c7acb1ce7acfe0a1cda4393924283105da4a7741196e027550047f85b7a0a01d454124efc0e299f0ef9ad14350543053482261528baa56e65999ac802c00a336267c635106b26403c19f391d53bd82861d6d48a4380b3043aa91d649536881204eccb0de20d43e5a3755b7f600916eccae42a0c9053b462d9417a13d67d778264a896e8eaf90baf66d29e5438a716781123a89fa9b8beef91d965af2f4a1a5bd5d2e2aaf46d5c94b7709cdd38d05feee4bfb76a359077c16bc4be9116e69001271cda565bc19bf47d4f986bd9c0d184cd8a3520ca1bdb4b505aaf7cb4ec9f94789779d30714e79116dd5019d59b28b17dad96f4e2155ad9c61274addc6b638109504e9ed19f4eda5377762648c4098224e3391043e4c2ad591654c9e7f974efdf0b0504b6fa5f646cecf44cd372412372505\",\n        \"signed\": \"629bf97b0c78ee6a9c8759fbea28224e27abbb6cbe4dea5bb797e6e0fe80c913f953e3a9b623352d13acf4ce6250fb029a1e198d72bd5e7402e60e9e48ca350162f003140fa09e0387d187a0ff96c4563df9f4e28c2282c0183ac3eede1312354921f780fca5361d3068d29949630b7530cd5914ace0468d014b6f53d839b82e38817dbf2d8392c3ce3424eab86a24d804c7acb1ce7acfe0a1cda4393924283105da4a7741196e027550047f85b7a0a01d454124efc0e299f0ef9ad14350543053482261528baa56e65999ac802c00a336267c635106b26403c19f391d53bd82861d6d48a4380b3043aa91d649536881204eccb0de20d43e5a3755b7f600916eccae42a0c9053b462d9417a13d67d778264a896e8eaf90baf66d29e5438a716781123a89fa9b8beef91d965af2f4a1a5bd5d2e2aaf46d5c94b7709cdd38d05feee4bfb76a359077c16bc4be9116e69001271cda565bc19bf47d4f986bd9c0d184cd8a3520ca1bdb4b505aaf7cb4ec9f94789779d30714e79116dd5019d59b28b17dad96f4e2155ad9c61274addc6b638109504e9ed19f4eda5377762648c4098224e3391043e4c2ad591654c9e7f974efdf0b0504b6fa5f646cecf44cd372412372505\",\n        \"signature\": \"629bf97b0c78ee6a9c8759fbea28224e27abbb6cbe4dea5bb797e6e0fe80c913f953e3a9b623352d13acf4ce6250fb029a1e198d72bd5e7402e60e9e48ca3501\"\n    },\n    {\n        \"secret_key\": \"5151617421aadc9c95a442b45e7ff6de06a2c733b85bd789fbad414ee3c91add\",\n        \"public_key\": \"14941d559761b30ab0a86d47e0f7d1896b33784527c80af41cb84810cbff9dbf\",\n        \"message\": \"216e9d40bcdc3b2650188d121c9f8ef29e914facd022fe01b90ed11225f2eb93538e5fcee5ab8045e9199aa76a16bdd0616805660e247fecd7e22821b69b1f8e8a58ac3fb85691d75d5957a1daf53ff9ee6476d7c4bc541e6ad38e3a34ea90fc52a48b9399f92d17c9bb0d7fc3104c55d0efb4ea5b831ff9490b3f79f4d9d699594b741566f2b50a8fc78cc403fa40f5abb6638a32f449a8b3ef029c402f46931ad2bd3e8e683108714c989ae21689e9c444b9f55b81119bb5035bcf73e97ce43a2218c7bc3e430d1e814f34dee057265d3194b9f43875d8381f525f78576e64ce692584faa30fb743a12d1b77614d2e10a6b856b52be27cdb630ba1f0d3a6f8ea9844542e584ea0a2777527d0c52aca949aacda45ad83d16d5c83d663adb79cad6f3e39e990fe282a14c353aa2379d7f06adab74cea021b8983a57f1d0cf703292eb05ece89c53f3a1265610e0c1ea8ddd444d1ffd6bc3d03f0a6e4d0df5c5b8dc1f95d9f5558b118afe6bea0f6c2931363f03ab34e757d49364174f658efbbf38dc177\",\n        \"signed\": \"fae4773b334460c77bf01ec6366c4fe61c0cab57d8a4b03909c619e11ee3461c13fa21576f63870e423dd04181e4a7013a7524f246fe33853c674162a7815104216e9d40bcdc3b2650188d121c9f8ef29e914facd022fe01b90ed11225f2eb93538e5fcee5ab8045e9199aa76a16bdd0616805660e247fecd7e22821b69b1f8e8a58ac3fb85691d75d5957a1daf53ff9ee6476d7c4bc541e6ad38e3a34ea90fc52a48b9399f92d17c9bb0d7fc3104c55d0efb4ea5b831ff9490b3f79f4d9d699594b741566f2b50a8fc78cc403fa40f5abb6638a32f449a8b3ef029c402f46931ad2bd3e8e683108714c989ae21689e9c444b9f55b81119bb5035bcf73e97ce43a2218c7bc3e430d1e814f34dee057265d3194b9f43875d8381f525f78576e64ce692584faa30fb743a12d1b77614d2e10a6b856b52be27cdb630ba1f0d3a6f8ea9844542e584ea0a2777527d0c52aca949aacda45ad83d16d5c83d663adb79cad6f3e39e990fe282a14c353aa2379d7f06adab74cea021b8983a57f1d0cf703292eb05ece89c53f3a1265610e0c1ea8ddd444d1ffd6bc3d03f0a6e4d0df5c5b8dc1f95d9f5558b118afe6bea0f6c2931363f03ab34e757d49364174f658efbbf38dc177\",\n        \"signature\": \"fae4773b334460c77bf01ec6366c4fe61c0cab57d8a4b03909c619e11ee3461c13fa21576f63870e423dd04181e4a7013a7524f246fe33853c674162a7815104\"\n    },\n    {\n        \"secret_key\": \"38bed445556de74482bf5fec0506f9af330b151e50d4774dfe8591d7b7e0276b\",\n        \"public_key\": \"4c0f9c49a42f4047bfe6885551c5e4b856cf771a67af3f89dbf602f9db9220f3\",\n        \"message\": \"0ff0031df0beeff3710c6b763f9b8ec81719bfa1528ce46519adf3d3412d93fb188fd497d5d17091c0f0345960dd0eb0c09fc4005173665d4d97f95c13828bc76b3492b87a4b64253c8b5fa47aa75fa3b86d5abeea8de5959a602289136f60a69b309e773b2255cde19ed2a2e199c33db11c16ade08a319750b851d92c692924fc9859be523431cbe78ec092db1129210ebbeaa7c2a2c000eeb105ca0301a48f3e45fdfb15b275cbab83ca5c99d737a585320e9e3b317179bd86467fa9694fcdb2ac6ad36ed7144843dbc34e423d35afd7d8972a1c43c199a191abd6ceba4936d395c995a3eb13cb057f88a9dc9490fe98845ee5d26a89fb642a2a516dc3056c54d3637213363a8628a42a395d942b954a89e8ef7a744d8ae5adac88c616efaa90e2077205a60baffede5c87bb14dead306229495f698f3e490616966b1636387d0d86183f945b24a9dcfccf4d36722cd12ebb6bd8e78325752afa2b1abd13c4bdbcadd170869136826242acfb721de5ff27ba8aa0c018b225ed3404803ce9fa2d508d8944\",\n        \"signed\": \"f702d0d463282fc7fd5f8f9029b89c626cafd83450c3bb9dd8f6589f0c4b4b71f649ea212e5e33487c59c168ea3ad83150f1fcdfe8c53eba65adc2023c25830f0ff0031df0beeff3710c6b763f9b8ec81719bfa1528ce46519adf3d3412d93fb188fd497d5d17091c0f0345960dd0eb0c09fc4005173665d4d97f95c13828bc76b3492b87a4b64253c8b5fa47aa75fa3b86d5abeea8de5959a602289136f60a69b309e773b2255cde19ed2a2e199c33db11c16ade08a319750b851d92c692924fc9859be523431cbe78ec092db1129210ebbeaa7c2a2c000eeb105ca0301a48f3e45fdfb15b275cbab83ca5c99d737a585320e9e3b317179bd86467fa9694fcdb2ac6ad36ed7144843dbc34e423d35afd7d8972a1c43c199a191abd6ceba4936d395c995a3eb13cb057f88a9dc9490fe98845ee5d26a89fb642a2a516dc3056c54d3637213363a8628a42a395d942b954a89e8ef7a744d8ae5adac88c616efaa90e2077205a60baffede5c87bb14dead306229495f698f3e490616966b1636387d0d86183f945b24a9dcfccf4d36722cd12ebb6bd8e78325752afa2b1abd13c4bdbcadd170869136826242acfb721de5ff27ba8aa0c018b225ed3404803ce9fa2d508d8944\",\n        \"signature\": \"f702d0d463282fc7fd5f8f9029b89c626cafd83450c3bb9dd8f6589f0c4b4b71f649ea212e5e33487c59c168ea3ad83150f1fcdfe8c53eba65adc2023c25830f\"\n    },\n    {\n        \"secret_key\": \"055460b32dd04d7f4b2311a89807e073fd556565a4771857d882794130a2fe5d\",\n        \"public_key\": \"260f8fed4bba30b9e12ad8523fbb6f57f0a7a882550061f1da46fbd8ea442221\",\n        \"message\": \"7407f96ee3e79c69d36ce1f64e4f188655ea68b947e7e2be97b05ebc6d4439e950276ef3f0e6a03dd48b24f66929b49c1580eb468807e1e7a25eb9b94da340c53f984f8b81603efb61047bf3f14b686d9798003d2f68589a79ebfad54409c71c90ff67c11fbd76cc72c2d145f458e42f88b75d250eadcafe66bf37ffc837b62ff006685b7f85a9d875fc078c82e61fe35d1922527a551dab62f9e477499146bad912203e664c417c3679c02d872abac0032f8cc77f77bfe54d3326fdee9276a48ea4eb251350406882d08c830e7649fe6854558a7513ab2d8d2ac3e5ced8a808d2aee454779edabd1aa63bb19f718f470bdc8451cd9b294941e3497063b1e39b6ca184562fe838cbfeee922de24ddfcf9882c5e615b11bf904817fbd647139db80b4e8feb37f11e1852d7e876db9cb63c94d7ee34192f7200b5bc77a0311ae43b806ebd4c2896c53f58f7ebc1625cb20d7107ef9db0da28788523de991ef6c5866b18d8de83a954d3281e06dbf27c4f2382e08cd0e0f6ebae3f961b77fce5a95a9b0621b756f\",\n        \"signed\": \"23f4f1627fbabd7891d7d8489631c7231d22de71864e262ab4da84ea8a13a60feac4dcfb1812f1200444b775f121d7266d755ce9b6a9ad796559c0a26b516d027407f96ee3e79c69d36ce1f64e4f188655ea68b947e7e2be97b05ebc6d4439e950276ef3f0e6a03dd48b24f66929b49c1580eb468807e1e7a25eb9b94da340c53f984f8b81603efb61047bf3f14b686d9798003d2f68589a79ebfad54409c71c90ff67c11fbd76cc72c2d145f458e42f88b75d250eadcafe66bf37ffc837b62ff006685b7f85a9d875fc078c82e61fe35d1922527a551dab62f9e477499146bad912203e664c417c3679c02d872abac0032f8cc77f77bfe54d3326fdee9276a48ea4eb251350406882d08c830e7649fe6854558a7513ab2d8d2ac3e5ced8a808d2aee454779edabd1aa63bb19f718f470bdc8451cd9b294941e3497063b1e39b6ca184562fe838cbfeee922de24ddfcf9882c5e615b11bf904817fbd647139db80b4e8feb37f11e1852d7e876db9cb63c94d7ee34192f7200b5bc77a0311ae43b806ebd4c2896c53f58f7ebc1625cb20d7107ef9db0da28788523de991ef6c5866b18d8de83a954d3281e06dbf27c4f2382e08cd0e0f6ebae3f961b77fce5a95a9b0621b756f\",\n        \"signature\": \"23f4f1627fbabd7891d7d8489631c7231d22de71864e262ab4da84ea8a13a60feac4dcfb1812f1200444b775f121d7266d755ce9b6a9ad796559c0a26b516d02\"\n    },\n    {\n        \"secret_key\": \"e9f6d31b936942c526e0f9ec4f5a7ac25fa789e0c434bcd9199d720c743c84c4\",\n        \"public_key\": \"32126d26e28231c5b585b13f43a01c6fe542946b07d3a91e57d281523f5cb45c\",\n        \"message\": \"e88133f3d17642d5c22779a85316ba0df34c792b4efee49ed7dd93ca3322ef47c72e5b2e4595c77800434b60719adf54e4c1a34c89fa1e27ee8d35a0921f9755ac4a77a6c1684ea0f5c8ee5f759ce59bfe8315800a67aa6c64ddfaac92eabe6c2c613779784b3affafcc620f2a6dc5cb8d8dc7d74aa4d79494678494e5e6394c433c14809ff40c9a592d0d694a81103b44531e1f48bc13965d15af8bf3340488f8cd58f09ae1a6616bf85ac9de7e0c6696aa2f1bec15e17a44da4a84edb4ec6d77247788ba0de3ae12a155cbedc0da2f568eef0b75a877ea5b0c2c0d4bf2c61d468a46faadfaece35fc263a9be9987f4f7f78f05c707784378c7b8f7daf9ac3a122aad39a1677966da9ef286c9e062c4f439ad0bddea26e54b2f7388e238b2a64928450d34564c5a447e7afbbedd1085f1f24c11ae084322d1a32cf8aa473941f00d56b1618213cab3900aa606463d9f800e926f9f42d4b082d8c5ec3a4a025b45f9aadc8bcbd17091b3da49e9453dc55e89b5b5fe6b31f5eddad10b6601572568d8e205d3251a\",\n        \"signed\": \"7e3b1c4c716c808e90b974458915f3b2239c42077119fe270788fae520578bd7da6488044132e1bef23e3b23c34d9c1862744f28fcaecda6cac0fd72b93b6a0fe88133f3d17642d5c22779a85316ba0df34c792b4efee49ed7dd93ca3322ef47c72e5b2e4595c77800434b60719adf54e4c1a34c89fa1e27ee8d35a0921f9755ac4a77a6c1684ea0f5c8ee5f759ce59bfe8315800a67aa6c64ddfaac92eabe6c2c613779784b3affafcc620f2a6dc5cb8d8dc7d74aa4d79494678494e5e6394c433c14809ff40c9a592d0d694a81103b44531e1f48bc13965d15af8bf3340488f8cd58f09ae1a6616bf85ac9de7e0c6696aa2f1bec15e17a44da4a84edb4ec6d77247788ba0de3ae12a155cbedc0da2f568eef0b75a877ea5b0c2c0d4bf2c61d468a46faadfaece35fc263a9be9987f4f7f78f05c707784378c7b8f7daf9ac3a122aad39a1677966da9ef286c9e062c4f439ad0bddea26e54b2f7388e238b2a64928450d34564c5a447e7afbbedd1085f1f24c11ae084322d1a32cf8aa473941f00d56b1618213cab3900aa606463d9f800e926f9f42d4b082d8c5ec3a4a025b45f9aadc8bcbd17091b3da49e9453dc55e89b5b5fe6b31f5eddad10b6601572568d8e205d3251a\",\n        \"signature\": \"7e3b1c4c716c808e90b974458915f3b2239c42077119fe270788fae520578bd7da6488044132e1bef23e3b23c34d9c1862744f28fcaecda6cac0fd72b93b6a0f\"\n    },\n    {\n        \"secret_key\": \"6bf4caaabb96854a38a572f4ce6c7838f7e750118c73f2723582618e2307f838\",\n        \"public_key\": \"08126373d056f00e54b8d43d77c35f5f919833e90d8aafd6c8246d27917ad091\",\n        \"message\": \"4776e9d60085481fa537bf295bdabd8b1cf632a8cd40bce6bd325c129f977000e88468ebf2dc158ac0f207212db00fb60b8ec8bae229372e9a6b01530a7ed1bc9d389ec8913f59030d5b54af56ae1ccc28f37cc96a8e53204e92a677766adfaada99b0281f867f61ac9ff7d972ee3ed427d72faae75d4aec01b5ffc37061b6f0f7e5714c4cf30d5b731b0746065f19e4c8922dde642f80fe24a3c8dcb2e5f1c266e2af6c37decf55a2baa54f0d5cf0839370c3e0b4e77a4f36bbb3162014933a4a4ebcae8c60961ac6dcf134f30828d31402ae74e7e8513c9d2ad8ee46b7a9d53a1f87ebfce04f461bded1749b6fc4c4f25793525692d7a0e426c84e06082cc3e6abb51368370cbb106c7a0897f66d92c9739cff9f2706d6a2980ecea3ac4945f0f47e656bd9637777e853d2a839104327dc049ebc34f049d6c2f80eca99db7b418424acef752260d2d427949323997cd9617edf50d441d0088b1d47912e35cf542315265829f383f45860d3b45e735bb2f8586dcf58db4f2acfb4a68853a96eed7b89769d365613\",\n        \"signed\": \"d2113f80d6cf928486a250a679d6e74b35ea9d26061fa94d769e1a8fbfa0a734227f55537e4ebff59336db141cf5d6d482a0711f1e9fc72ff70956a11b4fb9094776e9d60085481fa537bf295bdabd8b1cf632a8cd40bce6bd325c129f977000e88468ebf2dc158ac0f207212db00fb60b8ec8bae229372e9a6b01530a7ed1bc9d389ec8913f59030d5b54af56ae1ccc28f37cc96a8e53204e92a677766adfaada99b0281f867f61ac9ff7d972ee3ed427d72faae75d4aec01b5ffc37061b6f0f7e5714c4cf30d5b731b0746065f19e4c8922dde642f80fe24a3c8dcb2e5f1c266e2af6c37decf55a2baa54f0d5cf0839370c3e0b4e77a4f36bbb3162014933a4a4ebcae8c60961ac6dcf134f30828d31402ae74e7e8513c9d2ad8ee46b7a9d53a1f87ebfce04f461bded1749b6fc4c4f25793525692d7a0e426c84e06082cc3e6abb51368370cbb106c7a0897f66d92c9739cff9f2706d6a2980ecea3ac4945f0f47e656bd9637777e853d2a839104327dc049ebc34f049d6c2f80eca99db7b418424acef752260d2d427949323997cd9617edf50d441d0088b1d47912e35cf542315265829f383f45860d3b45e735bb2f8586dcf58db4f2acfb4a68853a96eed7b89769d365613\",\n        \"signature\": \"d2113f80d6cf928486a250a679d6e74b35ea9d26061fa94d769e1a8fbfa0a734227f55537e4ebff59336db141cf5d6d482a0711f1e9fc72ff70956a11b4fb909\"\n    },\n    {\n        \"secret_key\": \"5d9585736ab209b0abe8bf74aca4eea4f6d1650b532550a223e044580f8e20de\",\n        \"public_key\": \"e77729edfd2144b2b12078765417fa21f1594f09b269e9b6706802b4f3bdfe85\",\n        \"message\": \"08693591e6c58a5ead9c85fe8ec58508f81a3467636c2d34fcc1f466e5c6dafdc37c35cbee35589c6997e2b15448132744e5a1e131bb49bf5c2563f87ead3efe01e88cbf24cc1769c78cdfc167e378215b15859c7a28ece70e188fa330267d3fc57b4ace6c1520ec67875067fd33be86f4a1967afb3eb164c797cf28d8072aa69d82afa38374f8e5797c4c28471b7d69f5b9c7b4acdbc19f3c5c5d400808a982a47837aed1b3841d69890eeb31494e10e3e513d12d0ca686c7ce651778092703fef0dcc0214077dfb361251bdea4364dd41b97bceb0fb1475a50e4708f47f7878c74401e9771cc3fceace89169981aa77250850090d181d8358ebba65e290acb0352bece8c579832a601551816d1c05621ccbbee0fbe39ea2f195393199e69c234c2fb1c37e474840860ce609161fcfce2869574be0d38f95e20f4f8725247b9627b46e834905101ac12b934cbf87cb2d190d2f51490a82c4e810eddb81f956a9f36bda497bca506a49ee9cd47fda5b7f2b884a3648cadd12ab61898ada46ecc970f81dc9f876845db\",\n        \"signed\": \"e7b08e1d5809fdd8529443d65ada5dd655ea55b5415a011393be7071676486d358e8d2a460ebe075b0e701b24c9e3ab5f2b033592d4de3b7f37fd541f692090908693591e6c58a5ead9c85fe8ec58508f81a3467636c2d34fcc1f466e5c6dafdc37c35cbee35589c6997e2b15448132744e5a1e131bb49bf5c2563f87ead3efe01e88cbf24cc1769c78cdfc167e378215b15859c7a28ece70e188fa330267d3fc57b4ace6c1520ec67875067fd33be86f4a1967afb3eb164c797cf28d8072aa69d82afa38374f8e5797c4c28471b7d69f5b9c7b4acdbc19f3c5c5d400808a982a47837aed1b3841d69890eeb31494e10e3e513d12d0ca686c7ce651778092703fef0dcc0214077dfb361251bdea4364dd41b97bceb0fb1475a50e4708f47f7878c74401e9771cc3fceace89169981aa77250850090d181d8358ebba65e290acb0352bece8c579832a601551816d1c05621ccbbee0fbe39ea2f195393199e69c234c2fb1c37e474840860ce609161fcfce2869574be0d38f95e20f4f8725247b9627b46e834905101ac12b934cbf87cb2d190d2f51490a82c4e810eddb81f956a9f36bda497bca506a49ee9cd47fda5b7f2b884a3648cadd12ab61898ada46ecc970f81dc9f876845db\",\n        \"signature\": \"e7b08e1d5809fdd8529443d65ada5dd655ea55b5415a011393be7071676486d358e8d2a460ebe075b0e701b24c9e3ab5f2b033592d4de3b7f37fd541f6920909\"\n    },\n    {\n        \"secret_key\": \"60b142f165114143ca30a604fef51c686436aa1b9afdb266b3e398ccb3c4d855\",\n        \"public_key\": \"eaf6c5a76ca99bf7306498888c3b7a1feae98bf8988d7f2e1547f8f53a4528aa\",\n        \"message\": \"1815dee1173b78264720d35b7cc2454a000a65fff214e2473e20bc83f3ecde9c04c1e0696ce6e55519dd2a75ce0464bf601adc381e793ecb9f8ce7ab87b6ca2a3e410f639069451978d14873d3390fab8623969713c3dfcd58d86d124073761ee09a652a48767f9646cb726ac454ac9a1bc5faed3026b703982bc2b1e0758210e1d62519230eb2b2f4a486bc55168560c4363df5ff5adfda11ac7ef51b18196c94337c07aef117990f770c0f1e8c0f88eb6ffc40e8ed7c3a80a632db1e7f63b63096e2ac49e57792b31143e2f4faabceae66b27471681c36fc1139007f9b548cdc6e3b8fbbdaba7a8adb843431238bb461ba24f6e09f62c72d6377b4048cb0134c25a5411a20bfcfc13e48d80e36bfb0da7e0185d33f1928636e15dee0e5df8992a16572b13ea8f7cf85cae32d529f66e8f6d2fb2ad0bbfe7199169b2567ba00c781b20a48e1d70df9fa3119cd7e5bbe58884b0b51218940fa815f85625fa203471cee8084780eb0b9356f9f3d4f6df740301d707ef1ffb3519e3f90b8064b98e70f375d071426881718\",\n        \"signed\": \"a621f084ea1a36ef812a9755c9afbb53dadaae6b3a53fa8344ca40d3612a268a35fed0fd398ab75bcd639c547937c94155ab1a7a3467dd4bfddfacab1655e9081815dee1173b78264720d35b7cc2454a000a65fff214e2473e20bc83f3ecde9c04c1e0696ce6e55519dd2a75ce0464bf601adc381e793ecb9f8ce7ab87b6ca2a3e410f639069451978d14873d3390fab8623969713c3dfcd58d86d124073761ee09a652a48767f9646cb726ac454ac9a1bc5faed3026b703982bc2b1e0758210e1d62519230eb2b2f4a486bc55168560c4363df5ff5adfda11ac7ef51b18196c94337c07aef117990f770c0f1e8c0f88eb6ffc40e8ed7c3a80a632db1e7f63b63096e2ac49e57792b31143e2f4faabceae66b27471681c36fc1139007f9b548cdc6e3b8fbbdaba7a8adb843431238bb461ba24f6e09f62c72d6377b4048cb0134c25a5411a20bfcfc13e48d80e36bfb0da7e0185d33f1928636e15dee0e5df8992a16572b13ea8f7cf85cae32d529f66e8f6d2fb2ad0bbfe7199169b2567ba00c781b20a48e1d70df9fa3119cd7e5bbe58884b0b51218940fa815f85625fa203471cee8084780eb0b9356f9f3d4f6df740301d707ef1ffb3519e3f90b8064b98e70f375d071426881718\",\n        \"signature\": \"a621f084ea1a36ef812a9755c9afbb53dadaae6b3a53fa8344ca40d3612a268a35fed0fd398ab75bcd639c547937c94155ab1a7a3467dd4bfddfacab1655e908\"\n    },\n    {\n        \"secret_key\": \"734ba47033c6140232dd4a7a14f1a7743eefe9070bad9662491630cc9d28c1f3\",\n        \"public_key\": \"2fa5df3026d60742e2aff6b57842c7126846c8a7bbe9266efa7b3f2398c357ea\",\n        \"message\": \"5d3c659810c3fea52a6df3861e5cdc5b703cc1cef48558c61d8c51d0edea5a1479cfe5063d82ded9ca681e5748887c40ecfb9e1a9a8b7f8509d10776461c3923399693a78189089178d5aabd15f8c846642be47d6d4caf13824edcefb809868fa72ddf035c4de8ef0a9c832264f66f012761ce6955bc3c416e93e29188025ebbb13a553258c1d7c499c9a4aeb10bb36f61d1bb4cec5ae55d175722b9a9696df881951e35200b9653cf6ed4b3d15de087a9d1c319fce8582156bebf3fc91e0e610ff7a15308fd1d2c6069fbbb2947d3110731d245ae2963014bd76dea42db125cecc493c8e9091a76646577729aed4966fce9699fe12e367d665df9e95a9193e1133e143af92f82b66ac7764e5033178690521809a7107d8ae9b88e0ed1f35b1719901b930ad0e1cbce7fb30267b1155204f605f525e49de2988ea7f74be8815177fd976a1bcc126d9c9c135c5b4276d38019c34aefb7a0220f7f5aeff380aed627b070c2c9e21533bb35c08e394c85ae25e6862942599c65dbae5977a584a88180e0c8c71e5a8409e04ef7\",\n        \"signed\": \"9bd074d1d0bd28001baf7d2d4e82435df08c4264d8cbb1c381183c2f01223f79f94923ca178cac75564e16c7f56079088f7ed885de4d509fbc78f438fba3f6075d3c659810c3fea52a6df3861e5cdc5b703cc1cef48558c61d8c51d0edea5a1479cfe5063d82ded9ca681e5748887c40ecfb9e1a9a8b7f8509d10776461c3923399693a78189089178d5aabd15f8c846642be47d6d4caf13824edcefb809868fa72ddf035c4de8ef0a9c832264f66f012761ce6955bc3c416e93e29188025ebbb13a553258c1d7c499c9a4aeb10bb36f61d1bb4cec5ae55d175722b9a9696df881951e35200b9653cf6ed4b3d15de087a9d1c319fce8582156bebf3fc91e0e610ff7a15308fd1d2c6069fbbb2947d3110731d245ae2963014bd76dea42db125cecc493c8e9091a76646577729aed4966fce9699fe12e367d665df9e95a9193e1133e143af92f82b66ac7764e5033178690521809a7107d8ae9b88e0ed1f35b1719901b930ad0e1cbce7fb30267b1155204f605f525e49de2988ea7f74be8815177fd976a1bcc126d9c9c135c5b4276d38019c34aefb7a0220f7f5aeff380aed627b070c2c9e21533bb35c08e394c85ae25e6862942599c65dbae5977a584a88180e0c8c71e5a8409e04ef7\",\n        \"signature\": \"9bd074d1d0bd28001baf7d2d4e82435df08c4264d8cbb1c381183c2f01223f79f94923ca178cac75564e16c7f56079088f7ed885de4d509fbc78f438fba3f607\"\n    },\n    {\n        \"secret_key\": \"45e34d0ef4c196fa6d572b6b1774b5218f7c3291304c13500df7070d90e8039e\",\n        \"public_key\": \"13a7304dff423359177abafa5e6508d26769ca99cf8af45c383f3ff634406003\",\n        \"message\": \"3d9ed5c64b75e135df2f5e85300d90f21b363935e2817556fc9311751ba7535477dec8356ec385efb82b414062f35bb6d3edeafde305f9900a25e9813c9ee0237d46409650cdcdb5dfa2301a8e2647f8d3819d86f7b7e3070d33440f82c4054b1ab5edebeb27f95b3c4c6fdd468f21600f03b3494da200bab9293c38d02fc44048e52ff5fd0f7217a04d4ce912a180d1628f368280b6892672e8ff98d4629ac28b60c02a301e6c6026c1b9e9ef21cf0392df225008d5a0e0284b282631ad1710f811615697066c98296519948a7cfed5aeeb454ee7a61cc271bd3d499be17df09d3a0e790ee6b9bd99e1b919bed4a063b8d1a34f1afd2e952b9dfefd770969c8b2fc37977abb0fee6317253a23ecc97578168973334c8f91763ab97f29c49baeee7b35f3ae7f5cd3a4a6e697ef255a3c2ec0c752a3396f69f663ca1fc2b332dfe6c0faf78afe9c68d99571e8e896c5093085e9863a27648a9e58f3a9a84cbbfe2b41ca3633dd5cf6e82cb77cecacad8d78b353f48db42d99c36bcad170ea9e98abb2788c33a3c706268f3631\",\n        \"signed\": \"b42c1f925f4baccd129efb109db354aca31c6898f4f451294749a26a6da1677bd3a5c04119e35f47319f20cfdfc08bb4528b21009e00bd41ebc0f46863bed10b3d9ed5c64b75e135df2f5e85300d90f21b363935e2817556fc9311751ba7535477dec8356ec385efb82b414062f35bb6d3edeafde305f9900a25e9813c9ee0237d46409650cdcdb5dfa2301a8e2647f8d3819d86f7b7e3070d33440f82c4054b1ab5edebeb27f95b3c4c6fdd468f21600f03b3494da200bab9293c38d02fc44048e52ff5fd0f7217a04d4ce912a180d1628f368280b6892672e8ff98d4629ac28b60c02a301e6c6026c1b9e9ef21cf0392df225008d5a0e0284b282631ad1710f811615697066c98296519948a7cfed5aeeb454ee7a61cc271bd3d499be17df09d3a0e790ee6b9bd99e1b919bed4a063b8d1a34f1afd2e952b9dfefd770969c8b2fc37977abb0fee6317253a23ecc97578168973334c8f91763ab97f29c49baeee7b35f3ae7f5cd3a4a6e697ef255a3c2ec0c752a3396f69f663ca1fc2b332dfe6c0faf78afe9c68d99571e8e896c5093085e9863a27648a9e58f3a9a84cbbfe2b41ca3633dd5cf6e82cb77cecacad8d78b353f48db42d99c36bcad170ea9e98abb2788c33a3c706268f3631\",\n        \"signature\": \"b42c1f925f4baccd129efb109db354aca31c6898f4f451294749a26a6da1677bd3a5c04119e35f47319f20cfdfc08bb4528b21009e00bd41ebc0f46863bed10b\"\n    },\n    {\n        \"secret_key\": \"888ce2ecceda9ca2b948ac1443c2aedd7595aacf36edaf27255bde7a6991dcc0\",\n        \"public_key\": \"016e572b4f98417c6ee297abd784ea48226ff4fbf0050a5ade8806e7046d3ba3\",\n        \"message\": \"5c801a8e664e7660760a25a5e1431a62159fc3f3aa713780ae7cbce23b8564782799bf2be4817ee2921965bab7e1d44833824c1628d42dcee3e46ae42b2816d0a432a1ab0bd21fcf30adb63d8dd76569544343d0035c760522ca68bea72c404edda1e9095ec90f3325681c6de0f4c12d1afbcba2c7871a1b1e1f19c35b0bed9ec2a87c043d36d819396bd5d099e1aa090391297c733f65a8c5d2120c67635316fab25b4d4847a45fc3f76f2e2426dbee4629975062fce14e2189dba27fb1ded2453f001debfaa899c11660612d2ce2ad2f762ea5dee7e71e58adcdcefa79e8e8b27fc4ccf89aabf176b5d34f82dd15d889f9f087dc9ae8a42a72f3b83583616e170637cd1adf38aa6551cbacca3602bdc7ae210c4a446b3af8db2720e549bbedb8bed215ae00f19da29d8fb0b642d27b2d88575f0ee84f3d129eb774d20f537a1c0fdcf717bdebcfe47f8331a341864346fa6a1c6bbfd178819e387a0d5499a68e81cc9f82ad39e31e4dfe71952d5ea5cc8052a3ceed1751f59dc7ecc9742fad144e18dda8d0582e74e39ca8c4\",\n        \"signed\": \"99d83f148a236ebbef1cad88cb3c7694f4986c9250e21c3603a0d941bff199cf77d6ce99efdb20533188d68ad133de033a1fb3468abb706d2b8b4fbac08dfe035c801a8e664e7660760a25a5e1431a62159fc3f3aa713780ae7cbce23b8564782799bf2be4817ee2921965bab7e1d44833824c1628d42dcee3e46ae42b2816d0a432a1ab0bd21fcf30adb63d8dd76569544343d0035c760522ca68bea72c404edda1e9095ec90f3325681c6de0f4c12d1afbcba2c7871a1b1e1f19c35b0bed9ec2a87c043d36d819396bd5d099e1aa090391297c733f65a8c5d2120c67635316fab25b4d4847a45fc3f76f2e2426dbee4629975062fce14e2189dba27fb1ded2453f001debfaa899c11660612d2ce2ad2f762ea5dee7e71e58adcdcefa79e8e8b27fc4ccf89aabf176b5d34f82dd15d889f9f087dc9ae8a42a72f3b83583616e170637cd1adf38aa6551cbacca3602bdc7ae210c4a446b3af8db2720e549bbedb8bed215ae00f19da29d8fb0b642d27b2d88575f0ee84f3d129eb774d20f537a1c0fdcf717bdebcfe47f8331a341864346fa6a1c6bbfd178819e387a0d5499a68e81cc9f82ad39e31e4dfe71952d5ea5cc8052a3ceed1751f59dc7ecc9742fad144e18dda8d0582e74e39ca8c4\",\n        \"signature\": \"99d83f148a236ebbef1cad88cb3c7694f4986c9250e21c3603a0d941bff199cf77d6ce99efdb20533188d68ad133de033a1fb3468abb706d2b8b4fbac08dfe03\"\n    },\n    {\n        \"secret_key\": \"617390857dc10cdf82b5c94261f58ce2d44aa2f57d298f08a2d6c74d28147daf\",\n        \"public_key\": \"89e0c3e0a0f130d1916e0e3849b7286fa2e3ac4c17bd1f716ee5a72f0257fb8d\",\n        \"message\": \"1fd9e7453eaffd7c9b54055622dde170dd58b71cb945de75351d5fceb1f536bde25158f03786155f953dc207a1708f90d95b15aca0aee3097fdcaae85e4ab1c2cdb705c53e6c2ed21a994b304a75caf2ce4fc7d61f561e74e297397e2cde5cc69056940343aa81375d0af18d17d2f34c0a71dcf1de3c4fc488a14c5fa6b3337a3174b1da7958fb00bd5955148221427c60dba04117c80d2488656dbd5343de891287b50ef4df9825eda76b4977f3acd4ab6d3102fa56878306cd76561491bcfdaa1da567e677f7f03bae5dbf4426c3c4a6c3d082f9178b2efdd2bd49eee97ef4dcf3f0f51bbdeffe5ae6601e28019518f827f02e51f6679b8715978bec3e69d577156dd719959371baf034219fbbd17a2369a8541490f6a02013e33e74f4769be37aefa4defb6bfb3f351c2a261482c2fbec49f85f8445456e8f5a474030cd72d095ef6a622030e1e43a0c5debb034731d2f5e8e4ba3990f077d0c162649d1fa3ea4fe1e81d74aa849e21b059d966cbad4c493ca10bafe7a69243e3c0a6ebfd13d697906303392ba65d4fe06b6a5\",\n        \"signed\": \"63e90a6afbbbb0ee696bfb56efd679d68a9851a8947640a97f41f68edfeadd216ed8698e2e43c820c9044caa7adaab5b76762b681831a9f760476a8443c43c061fd9e7453eaffd7c9b54055622dde170dd58b71cb945de75351d5fceb1f536bde25158f03786155f953dc207a1708f90d95b15aca0aee3097fdcaae85e4ab1c2cdb705c53e6c2ed21a994b304a75caf2ce4fc7d61f561e74e297397e2cde5cc69056940343aa81375d0af18d17d2f34c0a71dcf1de3c4fc488a14c5fa6b3337a3174b1da7958fb00bd5955148221427c60dba04117c80d2488656dbd5343de891287b50ef4df9825eda76b4977f3acd4ab6d3102fa56878306cd76561491bcfdaa1da567e677f7f03bae5dbf4426c3c4a6c3d082f9178b2efdd2bd49eee97ef4dcf3f0f51bbdeffe5ae6601e28019518f827f02e51f6679b8715978bec3e69d577156dd719959371baf034219fbbd17a2369a8541490f6a02013e33e74f4769be37aefa4defb6bfb3f351c2a261482c2fbec49f85f8445456e8f5a474030cd72d095ef6a622030e1e43a0c5debb034731d2f5e8e4ba3990f077d0c162649d1fa3ea4fe1e81d74aa849e21b059d966cbad4c493ca10bafe7a69243e3c0a6ebfd13d697906303392ba65d4fe06b6a5\",\n        \"signature\": \"63e90a6afbbbb0ee696bfb56efd679d68a9851a8947640a97f41f68edfeadd216ed8698e2e43c820c9044caa7adaab5b76762b681831a9f760476a8443c43c06\"\n    },\n    {\n        \"secret_key\": \"877d017436369ec2453fed46e977d6acc3a7be60d31395ad6e7ea9e07480e4c9\",\n        \"public_key\": \"4e65422fed334a55e8b673893eba7c181dd724dda002817b0bae28acdc3f7fc0\",\n        \"message\": \"4ed3f5bdbd41d0e3b0a8a7fc3752eea496d6141678cbfe06757f61e1a168d761b6da83052f7994950d24626f004fbe9b8c9562e0c955fb3b5c08fd2d3d258393a349030c8e156205b40483038be1959f1cba490a87fe13899e4f3752063b68fe3e1c5071f7db0002f01494b4a3ee2e07992bdd200db4316629ee8a95ca347f0b28d6402a6da8b53e6b32581c3691e11ae9b6e0f0494894e649a92d03eb49c4d6833fa1f54f8dcd91d06936a6e62d491e2cea46dd07d9f02d3254b850bc9749f258a61ad3b9cc24b03287331b85a24143aaf8fcccac5f18bfc72dec75c0233516aa6e4589c78c665a186ed902091df97b0d04e83a2d74d789891aea2cacf813fffb5efaf78dbcd7af54ef55c77b1c4c8ace9e9278adc23d76c779d64b3bbbd1fb33b09836ea64a71e4711e89e8da0f709213342176ae22c6e7852c3973b60d9f98889b442aa48d7bfdfdef64c36c586c4fb2ad2e27ebe479f6d722f069fd6106b0d08975d5f721547c3b9c52f9fc5f45bb45b5b632188e80626518a79056bdc4ee1d2be6c6542a21fadea92c6dfb776\",\n        \"signed\": \"7688f3f2401eacaf2dd88e170ff1c4d7e94822a77f6b550b569e82152bbbb434057e01230b05ce58ee1dee5226b5c7cdbe5a8ade3b9465f59aed74145d14330c4ed3f5bdbd41d0e3b0a8a7fc3752eea496d6141678cbfe06757f61e1a168d761b6da83052f7994950d24626f004fbe9b8c9562e0c955fb3b5c08fd2d3d258393a349030c8e156205b40483038be1959f1cba490a87fe13899e4f3752063b68fe3e1c5071f7db0002f01494b4a3ee2e07992bdd200db4316629ee8a95ca347f0b28d6402a6da8b53e6b32581c3691e11ae9b6e0f0494894e649a92d03eb49c4d6833fa1f54f8dcd91d06936a6e62d491e2cea46dd07d9f02d3254b850bc9749f258a61ad3b9cc24b03287331b85a24143aaf8fcccac5f18bfc72dec75c0233516aa6e4589c78c665a186ed902091df97b0d04e83a2d74d789891aea2cacf813fffb5efaf78dbcd7af54ef55c77b1c4c8ace9e9278adc23d76c779d64b3bbbd1fb33b09836ea64a71e4711e89e8da0f709213342176ae22c6e7852c3973b60d9f98889b442aa48d7bfdfdef64c36c586c4fb2ad2e27ebe479f6d722f069fd6106b0d08975d5f721547c3b9c52f9fc5f45bb45b5b632188e80626518a79056bdc4ee1d2be6c6542a21fadea92c6dfb776\",\n        \"signature\": \"7688f3f2401eacaf2dd88e170ff1c4d7e94822a77f6b550b569e82152bbbb434057e01230b05ce58ee1dee5226b5c7cdbe5a8ade3b9465f59aed74145d14330c\"\n    },\n    {\n        \"secret_key\": \"4f0b3607d70b0f2698327ef4f1982c5b4b94be78f50c76f43bd642f1f0ede39b\",\n        \"public_key\": \"942b43089fd031cec0f99e5e550d65307fb6c3e793449fb390ff730fffd7c74b\",\n        \"message\": \"9f700a1d2560f69d9bc105bc83bff539e4258c0248602013a959b978a19cc273280d90c0178089578b50518e06ad1eab790ffe710c63d78887a95569144f3e58a8837f93dd516fcddd22bc97a7f14411d424b2e8e9aa7c280119ad94ce92533fc7fea6c66248644ac3e1beef2553a6f61e91b9379b0fe0c68b40681455b311f40df0c97f53fc954242c375e7708d61bad9f51296247274fa01a7328fa5009d9995f501ae8683552b11a49d2638116723b1319450a90138d278cd9512b80ca5792ed16c683bef92ec87884c9f07f137dc47a13146e511065c2e1b4b80efde88ae12e29431beb7aee365c16d80506b99afa6a1406edb061766875832dba473e519dd7018f402eb1bb3014b7cee4f02e980b1b17127e7d25dfe0c168c5344f1c90044f827707dca03070e4c43cc460047ff62870f075f34591816e4d07ee302e7b2c2ca9255a35e8adec03530e86a13b1bdfa1498813098f9ba59f8187abcafe21ba09d7c4aaa1ad10a2f28334ab53996147c2459c01b6a10839e0301123d91a35ced7af89afbac7d9cf8ac9a38ceebef83\",\n        \"signed\": \"f396a11f2f03c61439684f79001bd4f346a348dcf1d3beb2d3bfe33ea73a5ad4eb97506acfbffb784e77548189cd599f8ccf17355dde80e75024ef2a78d5fa039f700a1d2560f69d9bc105bc83bff539e4258c0248602013a959b978a19cc273280d90c0178089578b50518e06ad1eab790ffe710c63d78887a95569144f3e58a8837f93dd516fcddd22bc97a7f14411d424b2e8e9aa7c280119ad94ce92533fc7fea6c66248644ac3e1beef2553a6f61e91b9379b0fe0c68b40681455b311f40df0c97f53fc954242c375e7708d61bad9f51296247274fa01a7328fa5009d9995f501ae8683552b11a49d2638116723b1319450a90138d278cd9512b80ca5792ed16c683bef92ec87884c9f07f137dc47a13146e511065c2e1b4b80efde88ae12e29431beb7aee365c16d80506b99afa6a1406edb061766875832dba473e519dd7018f402eb1bb3014b7cee4f02e980b1b17127e7d25dfe0c168c5344f1c90044f827707dca03070e4c43cc460047ff62870f075f34591816e4d07ee302e7b2c2ca9255a35e8adec03530e86a13b1bdfa1498813098f9ba59f8187abcafe21ba09d7c4aaa1ad10a2f28334ab53996147c2459c01b6a10839e0301123d91a35ced7af89afbac7d9cf8ac9a38ceebef83\",\n        \"signature\": \"f396a11f2f03c61439684f79001bd4f346a348dcf1d3beb2d3bfe33ea73a5ad4eb97506acfbffb784e77548189cd599f8ccf17355dde80e75024ef2a78d5fa03\"\n    },\n    {\n        \"secret_key\": \"b8a0010c784d8d002a31da11d022d30188a4197a1d5f14ea4c0dab29a2e40668\",\n        \"public_key\": \"8bdc63e50bede13c91a41e4b4b7857b9e553f484e3c1ec167dc04c281ea86622\",\n        \"message\": \"5c6ccb298be216808b811e56d972f456b69ad39594eee354701ca6b3e38d1f41a359e5512af98a3a0873265fe5191f4f2ecaf66bee75a3ac0b71a4ddf2a759ebdddbd88a6a1c6fd0fcf7d7cb92a84e3307b4a4f98c710abf4f553dee74f652d2ac64bc30f72bf4354ef7e806a19071a051bcfcfb27e37fddd41eceaec1758e94695c670ef4c5a5902178329db9585c65ef0fa3cd62449bb20b1f13aecfdd1c6cf78c51f568ce9fb85259aad05b38c6b485f6b86076928ddb4e2036f45e7b9c6a7ff24ae1776030e2576825019ab463ebf7103a33072033eacbb5b503f53266afb82f9b2454b8dc057d84f30d9d2cb7c3a31a7dbdfba5b8e49231c231396c47ca042c8e48a1a5e3ec9afe4020595390f9990dfb874e0825ae9ae5e752af63af6fd3e787e75e8d8dc4c66302277ac01b30a18a56cb82c8a7ebdc915b7153255a1fedc492e49660262bb249780d173e1fd20d18c4f6b0b69aa2eca024bf3c80d7d5962cc4a129a7943b27f33cc799a36045541275a2cdb92a40e485ba8b737a04b43d29c3e25f76cb3d93a6b94461f88f5696\",\n        \"signed\": \"b3f6cf4c0e0f9074ff2c2c47e163202f1e9d6ee117cf757633e4abe74423aa70008ada1509ec1dc117c1c230e9b23786f3d0f29b73aa284536e9580106a8a70c5c6ccb298be216808b811e56d972f456b69ad39594eee354701ca6b3e38d1f41a359e5512af98a3a0873265fe5191f4f2ecaf66bee75a3ac0b71a4ddf2a759ebdddbd88a6a1c6fd0fcf7d7cb92a84e3307b4a4f98c710abf4f553dee74f652d2ac64bc30f72bf4354ef7e806a19071a051bcfcfb27e37fddd41eceaec1758e94695c670ef4c5a5902178329db9585c65ef0fa3cd62449bb20b1f13aecfdd1c6cf78c51f568ce9fb85259aad05b38c6b485f6b86076928ddb4e2036f45e7b9c6a7ff24ae1776030e2576825019ab463ebf7103a33072033eacbb5b503f53266afb82f9b2454b8dc057d84f30d9d2cb7c3a31a7dbdfba5b8e49231c231396c47ca042c8e48a1a5e3ec9afe4020595390f9990dfb874e0825ae9ae5e752af63af6fd3e787e75e8d8dc4c66302277ac01b30a18a56cb82c8a7ebdc915b7153255a1fedc492e49660262bb249780d173e1fd20d18c4f6b0b69aa2eca024bf3c80d7d5962cc4a129a7943b27f33cc799a36045541275a2cdb92a40e485ba8b737a04b43d29c3e25f76cb3d93a6b94461f88f5696\",\n        \"signature\": \"b3f6cf4c0e0f9074ff2c2c47e163202f1e9d6ee117cf757633e4abe74423aa70008ada1509ec1dc117c1c230e9b23786f3d0f29b73aa284536e9580106a8a70c\"\n    },\n    {\n        \"secret_key\": \"efc86cbe40363abfbb2a4b1fcce5fd6084da96e7e814de71aadf9a618f303625\",\n        \"public_key\": \"22f295cee727d28d2b9317153e7d9412da1065c1b16ae2a251dd1fb431c62b01\",\n        \"message\": \"9e4fa45dc026710f6bef4ed0f07c544b0bb0d88fa79e7177d8448bc209d71cfe9743c10af0c9937d72e1819e5b531d661c58c63141ce8662c8839e664db79e16c54d113abb02a75bdf11b3453d071825bc415741e99483546b8e1e6819de53017092e4ef871f1ca0d3508f937828a4667db11ffff9416eebb94bf9b84d654603094834a99ca70b90f562a86823624dfe9cb2f9e88c173f13464d4ce255f222db50dd63ab42465734e75295c064b64cc3f15e6237e37f33d615f7c243e4ba308960cfd4393402525500bb7902970b3931d48b35666a2d4d2ab08fa12af366a004346c9dd93d39fb1b7340f104e51fedbb533605b5ff39cf6d59513f12856dcfa198d793b0fc875cdea0741f1455746d8a19c3e9d928f0021b01c25131811e48c3c75c6f41422a8810c6c81f35b454eeae8cd17cf3f2e6f0bcd9f290984f496578623ab8e2738d2d10840eb91d101cb4a23722b72e3dd185440c3b9f44d46a393a34c187a20d610bb698c50531741efe96323512329800772a408065a7ef8e4e4105eb1f5bf6d3fd6b217fd836d89f53b96f45\",\n        \"signed\": \"f8818310228ca76111524ce94bfcb0246ea63508cee9306592b2f77548edefcf76bd1454508ea715042cec169cea5115ab54235cb1097b10702aa38378028e0c9e4fa45dc026710f6bef4ed0f07c544b0bb0d88fa79e7177d8448bc209d71cfe9743c10af0c9937d72e1819e5b531d661c58c63141ce8662c8839e664db79e16c54d113abb02a75bdf11b3453d071825bc415741e99483546b8e1e6819de53017092e4ef871f1ca0d3508f937828a4667db11ffff9416eebb94bf9b84d654603094834a99ca70b90f562a86823624dfe9cb2f9e88c173f13464d4ce255f222db50dd63ab42465734e75295c064b64cc3f15e6237e37f33d615f7c243e4ba308960cfd4393402525500bb7902970b3931d48b35666a2d4d2ab08fa12af366a004346c9dd93d39fb1b7340f104e51fedbb533605b5ff39cf6d59513f12856dcfa198d793b0fc875cdea0741f1455746d8a19c3e9d928f0021b01c25131811e48c3c75c6f41422a8810c6c81f35b454eeae8cd17cf3f2e6f0bcd9f290984f496578623ab8e2738d2d10840eb91d101cb4a23722b72e3dd185440c3b9f44d46a393a34c187a20d610bb698c50531741efe96323512329800772a408065a7ef8e4e4105eb1f5bf6d3fd6b217fd836d89f53b96f45\",\n        \"signature\": \"f8818310228ca76111524ce94bfcb0246ea63508cee9306592b2f77548edefcf76bd1454508ea715042cec169cea5115ab54235cb1097b10702aa38378028e0c\"\n    },\n    {\n        \"secret_key\": \"33556c60de2f2c9a9303b99add378592060505f8e49861085a4b15f072a7ef28\",\n        \"public_key\": \"231ec8cd845859f69961275119dbe4f715e5ec5aa98bb8741675b3c2d0c89fee\",\n        \"message\": \"96af540ea2b1923f5fd0aad321ac032070c2d65ba13d164e75c3469758fcf31bb31655cb3a721f9cb34be2c90c77eb65be37f606d32a917a4cb9a709ac0705229930ef6eb6fdb0fa3c0fd3a90ce171674ee3ed06354bafc3c7075467a57445b80385640447902be39262894b1f64fea58287dc322d19875972a7c8be91d31f021c70eb682fdf11a10f8f582a126e064794838c69fdf64f5b6e8ba59d48b4384f8e9fb5c087cc7738295cd32344ba3b697ee6b6a8b78ee7a9575c97972a4d1bb18486f9037a0f3c6f471a90f86498dbc0df5232c07e8c01b690bee75302992a7a36fb4437c25a8bf5e34cf7d5b55572c700a079848d381364f9946a91eb1603ff3de5ebdd523bd92564818e237a53e8f522deaa2c29b897e961586e100ed0fc0ad70d160934e694027e5c957920bc0546e901be39a84535597e1f280c222267abe97f41205d8171820dd2faafc0699419321a9160f69b99fd41180945b62d2dd105cc7bbe821d28605e098edfa8b2309aeb0534e756377f59937c67463fd87c8b92ab58119cf4ce6c665af572fbae1de4a2cc71\",\n        \"signed\": \"e06a7a414457bbbef2bac3775ccad087dacb1fa4bf938894e8c929118e09e678dd19938bc88f43ed0f7d31cc6a0e602c4e4d1fee33d41e74a119fa2d1e4e340f96af540ea2b1923f5fd0aad321ac032070c2d65ba13d164e75c3469758fcf31bb31655cb3a721f9cb34be2c90c77eb65be37f606d32a917a4cb9a709ac0705229930ef6eb6fdb0fa3c0fd3a90ce171674ee3ed06354bafc3c7075467a57445b80385640447902be39262894b1f64fea58287dc322d19875972a7c8be91d31f021c70eb682fdf11a10f8f582a126e064794838c69fdf64f5b6e8ba59d48b4384f8e9fb5c087cc7738295cd32344ba3b697ee6b6a8b78ee7a9575c97972a4d1bb18486f9037a0f3c6f471a90f86498dbc0df5232c07e8c01b690bee75302992a7a36fb4437c25a8bf5e34cf7d5b55572c700a079848d381364f9946a91eb1603ff3de5ebdd523bd92564818e237a53e8f522deaa2c29b897e961586e100ed0fc0ad70d160934e694027e5c957920bc0546e901be39a84535597e1f280c222267abe97f41205d8171820dd2faafc0699419321a9160f69b99fd41180945b62d2dd105cc7bbe821d28605e098edfa8b2309aeb0534e756377f59937c67463fd87c8b92ab58119cf4ce6c665af572fbae1de4a2cc71\",\n        \"signature\": \"e06a7a414457bbbef2bac3775ccad087dacb1fa4bf938894e8c929118e09e678dd19938bc88f43ed0f7d31cc6a0e602c4e4d1fee33d41e74a119fa2d1e4e340f\"\n    },\n    {\n        \"secret_key\": \"7a5c74314e1183334a4b6226b9a82d70fc2a124e3f87db6a2283ee05b68e34e0\",\n        \"public_key\": \"beae7d3dd97c67f6273bfaa066131fed8ace7f535fe6464e65791c7e5398576c\",\n        \"message\": \"98bac6724755912992adc2a48b5442376f2d927997a040fb98efe544eb0c8e1866b9616e298d3360316ed976bd946a411fdd3a6b625c0c1a37af0f41cf6569a7884ab8467491a987df3ea7a0b7ebc4692569a34ce3a2ea3503495b2c02d49d7d7db579d13a82cf0cf7a9547a6eaebe68e7267d45a60b8d4772455228cca4036e282e1a1216f34cef7ea68f938270bdb04293c885d005f9f7e638a8b4ead2626c0945174ff2a3e2d6e15a4c0338c09e1260f0928ca9d3499824f3fedc4785da49c5c34a56855e241facc6347a399ddcac4399a8b158198c151461a3b189e58ec1f7efcf2ab2031fb17b6f035ba1f092e9eee2e92c2d6cc2032287f854b41e70fc61c8d11a2e4f0708f02eebd02e8c7e8c7b38a57bfa1a745f3a86c23909f6f89ab16ce7e1813c1d20147f31b4cf2ad0b606fb17e5ac1ab51ef4a7d8093cee9a655f471dc5b146bd1b93e540a3d3d3e2de8105911c10d6ab5ff79c2d06027f7a54561f2071414bd330a8785442251c810e232f83c367f0be7799a93f5238f7f17b5be829fd89123c04833af8b77e5a4363047ceca7\",\n        \"signed\": \"c2ab1f6f5114a84f218502582c567b37a8bdbcdf6340fa4622873be89106f0a90b4829505f72129df0ab3d8513268774a34df3ad21ce254b464488addd6c9b0498bac6724755912992adc2a48b5442376f2d927997a040fb98efe544eb0c8e1866b9616e298d3360316ed976bd946a411fdd3a6b625c0c1a37af0f41cf6569a7884ab8467491a987df3ea7a0b7ebc4692569a34ce3a2ea3503495b2c02d49d7d7db579d13a82cf0cf7a9547a6eaebe68e7267d45a60b8d4772455228cca4036e282e1a1216f34cef7ea68f938270bdb04293c885d005f9f7e638a8b4ead2626c0945174ff2a3e2d6e15a4c0338c09e1260f0928ca9d3499824f3fedc4785da49c5c34a56855e241facc6347a399ddcac4399a8b158198c151461a3b189e58ec1f7efcf2ab2031fb17b6f035ba1f092e9eee2e92c2d6cc2032287f854b41e70fc61c8d11a2e4f0708f02eebd02e8c7e8c7b38a57bfa1a745f3a86c23909f6f89ab16ce7e1813c1d20147f31b4cf2ad0b606fb17e5ac1ab51ef4a7d8093cee9a655f471dc5b146bd1b93e540a3d3d3e2de8105911c10d6ab5ff79c2d06027f7a54561f2071414bd330a8785442251c810e232f83c367f0be7799a93f5238f7f17b5be829fd89123c04833af8b77e5a4363047ceca7\",\n        \"signature\": \"c2ab1f6f5114a84f218502582c567b37a8bdbcdf6340fa4622873be89106f0a90b4829505f72129df0ab3d8513268774a34df3ad21ce254b464488addd6c9b04\"\n    },\n    {\n        \"secret_key\": \"da8006adc492ca5dc86c2959437a75deb6120ff787d2ecb9c20c30b52c26bc41\",\n        \"public_key\": \"ff113bf0aa58d546f2385d444ecb7888f8caba43a174a89fd6065f2b7dc17bf0\",\n        \"message\": \"3eb4324dbc0149d2e7d6df632bb0cbe9a9f6dfa83e227fc07bde1b577b3611fb921c9f8313f068e6295d4913a8196be530f6a01f57c09c028491444b784720e909ea1fb69c1c1dd6304400327b7731b33cc46deb046cdab6ad1b53f1749a0c65cb9a7e376ffa02230f536584aea243c639103adbba764321649d7e0126f82e0b4fd9dcb86c731cbcc517f2016841e916bcd5fde871dc098cd913dc546284d1b2165c63e88f32a2789a500856371b50d22fb8c87d1a3caedcdfd01ee5f870a53c284181d632ec66d48b6bdd5646ac39c9e75338a520212062bc3466ef5c58765570b905f63a93d07f8f1baac3526b016da799f3e9e03a4f7f81355e0f7a76f30a42b807322051b71c626a7a296d75b9d9d1a23bcb13c9ef48a912dc057325d3bcfb3f9fadaf0c249b102aeb854aa3631e34f69ad90c2ab2ed33bacc40b9ed1037fae67cdf799d5a9b43785961127d62f8e0bc1589fd1a06fca2aea7cfc012cbf7b5b207ddc4e677d8ae4aec100045ce36c00b74d1d28250791236dc5dcc1ed313c8c246172666f75217437c6034acd64198cd96df2a\",\n        \"signed\": \"1f5375dcb3ad2baaff956d8554ecb424176be9a6eb9ea54e814e0a73df2a5d848ada26ba8e1805cd51c5e16950c1ff7d4d2764daa6f4c7502fb865cbe55aaf0b3eb4324dbc0149d2e7d6df632bb0cbe9a9f6dfa83e227fc07bde1b577b3611fb921c9f8313f068e6295d4913a8196be530f6a01f57c09c028491444b784720e909ea1fb69c1c1dd6304400327b7731b33cc46deb046cdab6ad1b53f1749a0c65cb9a7e376ffa02230f536584aea243c639103adbba764321649d7e0126f82e0b4fd9dcb86c731cbcc517f2016841e916bcd5fde871dc098cd913dc546284d1b2165c63e88f32a2789a500856371b50d22fb8c87d1a3caedcdfd01ee5f870a53c284181d632ec66d48b6bdd5646ac39c9e75338a520212062bc3466ef5c58765570b905f63a93d07f8f1baac3526b016da799f3e9e03a4f7f81355e0f7a76f30a42b807322051b71c626a7a296d75b9d9d1a23bcb13c9ef48a912dc057325d3bcfb3f9fadaf0c249b102aeb854aa3631e34f69ad90c2ab2ed33bacc40b9ed1037fae67cdf799d5a9b43785961127d62f8e0bc1589fd1a06fca2aea7cfc012cbf7b5b207ddc4e677d8ae4aec100045ce36c00b74d1d28250791236dc5dcc1ed313c8c246172666f75217437c6034acd64198cd96df2a\",\n        \"signature\": \"1f5375dcb3ad2baaff956d8554ecb424176be9a6eb9ea54e814e0a73df2a5d848ada26ba8e1805cd51c5e16950c1ff7d4d2764daa6f4c7502fb865cbe55aaf0b\"\n    },\n    {\n        \"secret_key\": \"a284e26b97e538839c808d45bde6f012a354454aef81caa8c55914624f2b7d66\",\n        \"public_key\": \"5ae46e34695efaf463a4208fc4e35b81f2c63593238a56f2444b850f058c3c5c\",\n        \"message\": \"9ebfe910b50a5cb719d95b961e5905f00ec7943b55468ab5956692017645b366071f8fbb77eb49ec73ea7d64511405b90de22db98c3eae39c4039c7a133430e8010bdd39a00fd1a528b113dae149cfad3ae340da27dcc507782ecd8929237517afe7463eca2473c7acf6f7aa04efc9f266ae7b6d63bb8cc2a438b344827f0713d1f1736f0cbb65b99353f20355fa0230d4fa707328a8662654e83ad0530a10f9a69e17c099e1e2b5db18e5f6f1dceda5883e8cab79701a5e9089562ed153ad08c674f097c28e4d16633e092969a8f0bdac54527c0ee03bc200e5be612e3d1eabd87091101b4962afa07b310806992f373076d76a58185118137c9d26ee2cd4c618c18283dd19f0e7a089ee37305b6b9518a78d8098436ef62be7d699808acecf67939d61b3e02937cd8c5f1e746d4274334bc9c37fdcba234c166fd712893f3a040832ec5425e57d80f11ef9ca5fbcd6c147fbbf5e2fae746e0ddb605867e3bd050483c3cd1329abe57a60bf88898dc7e80ede0f4517de8fc807e888b621a00f663084ff94b99996628f3b11690a60f0918cb5c9a7ef\",\n        \"signed\": \"bf110e2e9cecbc31fa3e0c2438cd1f4321f92cd287005a48528addf76cad8d88bb22719ef91b139562a1511838682674faa9ff7e7ade6c9d573f845036d189059ebfe910b50a5cb719d95b961e5905f00ec7943b55468ab5956692017645b366071f8fbb77eb49ec73ea7d64511405b90de22db98c3eae39c4039c7a133430e8010bdd39a00fd1a528b113dae149cfad3ae340da27dcc507782ecd8929237517afe7463eca2473c7acf6f7aa04efc9f266ae7b6d63bb8cc2a438b344827f0713d1f1736f0cbb65b99353f20355fa0230d4fa707328a8662654e83ad0530a10f9a69e17c099e1e2b5db18e5f6f1dceda5883e8cab79701a5e9089562ed153ad08c674f097c28e4d16633e092969a8f0bdac54527c0ee03bc200e5be612e3d1eabd87091101b4962afa07b310806992f373076d76a58185118137c9d26ee2cd4c618c18283dd19f0e7a089ee37305b6b9518a78d8098436ef62be7d699808acecf67939d61b3e02937cd8c5f1e746d4274334bc9c37fdcba234c166fd712893f3a040832ec5425e57d80f11ef9ca5fbcd6c147fbbf5e2fae746e0ddb605867e3bd050483c3cd1329abe57a60bf88898dc7e80ede0f4517de8fc807e888b621a00f663084ff94b99996628f3b11690a60f0918cb5c9a7ef\",\n        \"signature\": \"bf110e2e9cecbc31fa3e0c2438cd1f4321f92cd287005a48528addf76cad8d88bb22719ef91b139562a1511838682674faa9ff7e7ade6c9d573f845036d18905\"\n    },\n    {\n        \"secret_key\": \"cc97a96301ceed0f922731b685bad8ad4f06207be340f5a44fd187f29903ec20\",\n        \"public_key\": \"eb563a7bce12db97f1891d0f610bebd55101a3125ca8dbb50b25a6b5050d3784\",\n        \"message\": \"b9ea3b3df7187ea415a3c335e0834e10f440915b2ad41c71f255d6950a4e9120e4d494fd9e672ce53206fdc417d865897b47ac1054e1ca1068195232d4297435e44e1224e66a912d9d7d182946ff5a9f085bb8ba19c54d16b586a9b30461b6773b93950311e1619886f5a5b3f111aaad094bae31c48f1941080968bd0277bb6fa92eebf324b192df5cc969516c78c7b2d12159b4d1c8eb03160c4cd1907f62ed4b854c569ecc481c08e636f44ed7c390e58b5937d2906b2817bc3769dad9da1b0f79391b55942063055da0d6f249a3e452baddaa032998d7f73398ccd0151bfc92c5e2fdfa9b14855e6b0d3746dce248e219672987252ec747df2747fd3fbd8b714c882d707ee302a904950c34754f85350e1aa3f8ea6293cf01f717cefb6b83a22126df5c4f5698aafd06a2244ad7d01f34017ca0ece6f21040048aba6ca4aeb04325b9402bcd43ab130a105788ac3d7b7da01ea9426dd0ea1933a8189933a6c0c6cd648ea316a7469a5fdc6e7c934d9186586097b55dd51ac487bb80ed11d4df8d33626bbce95e4f13bd49922f00c920223f4cbf93cb\",\n        \"signed\": \"ffbdd3244181cdf6034f4a450fdd95dee4971a933f8be022bb0a4106aef39af3055b721881c9b54d1e99b9409096fbe6dc2c9966e3679964bd7ef4c808cabf01b9ea3b3df7187ea415a3c335e0834e10f440915b2ad41c71f255d6950a4e9120e4d494fd9e672ce53206fdc417d865897b47ac1054e1ca1068195232d4297435e44e1224e66a912d9d7d182946ff5a9f085bb8ba19c54d16b586a9b30461b6773b93950311e1619886f5a5b3f111aaad094bae31c48f1941080968bd0277bb6fa92eebf324b192df5cc969516c78c7b2d12159b4d1c8eb03160c4cd1907f62ed4b854c569ecc481c08e636f44ed7c390e58b5937d2906b2817bc3769dad9da1b0f79391b55942063055da0d6f249a3e452baddaa032998d7f73398ccd0151bfc92c5e2fdfa9b14855e6b0d3746dce248e219672987252ec747df2747fd3fbd8b714c882d707ee302a904950c34754f85350e1aa3f8ea6293cf01f717cefb6b83a22126df5c4f5698aafd06a2244ad7d01f34017ca0ece6f21040048aba6ca4aeb04325b9402bcd43ab130a105788ac3d7b7da01ea9426dd0ea1933a8189933a6c0c6cd648ea316a7469a5fdc6e7c934d9186586097b55dd51ac487bb80ed11d4df8d33626bbce95e4f13bd49922f00c920223f4cbf93cb\",\n        \"signature\": \"ffbdd3244181cdf6034f4a450fdd95dee4971a933f8be022bb0a4106aef39af3055b721881c9b54d1e99b9409096fbe6dc2c9966e3679964bd7ef4c808cabf01\"\n    },\n    {\n        \"secret_key\": \"679e3e34773abe4ae25cae7d07ccd0eb3b0ec0a35d570257d62570de58ea2516\",\n        \"public_key\": \"18acffce253b27259579ed9924f479cae312167bcd876edba88b5d1d73c43dbe\",\n        \"message\": \"fb2b648ebb16688244f78b2ee9a273599d56b6198900d438a9e99c191425c72bec4f235847e18e47f57c3cb396655f778921f908580e8e83c96c108b20dd416678021bca259b98518fabb2d3532e4851d9d52add2542c0cb3efa3857a17e512438bc0ec4762e2f9baba429c03e99bec4038e6b0ca42bff5b233b24c333b4caead2de374a87b2ab5d80d6e49e4456329d51ae973bc83d7862f3d315e514481b12854a9dfc09e7d14f0d022c0ba3022578eba8f874deba4aa8c833f2b132861d4d51e50fe9aa4b787bd2f051aac50c375390cbbcfba2002b80ad00cdc12980f8ba8bcb7064afc04d5c4682c1029b10a6d45fe6ecd704245faf598c4659597c5d68a192cc1cd4fa45e84b549e8e5e67daa879ae5a520a6b5550519876a562ac49c6db0aa76ec69bb64dd6b5e1a3af2e131e722e7cdd05be34b5fcc6259aa124ccf814cf5b500d176be28ebc40bb21f03e24ccc131e0f41daa1ca02e6b00c9c53fad1248614e940d4b237760ab7569a767b7515dd2d623e57a2841b7d2441cf43049e4698d2f9c9eae7b2910f6ad65edf9cb2bdbd9b29f606e0d\",\n        \"signed\": \"1a51022628ccbb88eae9b21773c3f830b7b6e5bc36c9903ce70fbcf459d6a1ed8a1dceff5b19269ebf5a6fd3d8958860f554461f0e9fc0e29af9b1fb1744a80bfb2b648ebb16688244f78b2ee9a273599d56b6198900d438a9e99c191425c72bec4f235847e18e47f57c3cb396655f778921f908580e8e83c96c108b20dd416678021bca259b98518fabb2d3532e4851d9d52add2542c0cb3efa3857a17e512438bc0ec4762e2f9baba429c03e99bec4038e6b0ca42bff5b233b24c333b4caead2de374a87b2ab5d80d6e49e4456329d51ae973bc83d7862f3d315e514481b12854a9dfc09e7d14f0d022c0ba3022578eba8f874deba4aa8c833f2b132861d4d51e50fe9aa4b787bd2f051aac50c375390cbbcfba2002b80ad00cdc12980f8ba8bcb7064afc04d5c4682c1029b10a6d45fe6ecd704245faf598c4659597c5d68a192cc1cd4fa45e84b549e8e5e67daa879ae5a520a6b5550519876a562ac49c6db0aa76ec69bb64dd6b5e1a3af2e131e722e7cdd05be34b5fcc6259aa124ccf814cf5b500d176be28ebc40bb21f03e24ccc131e0f41daa1ca02e6b00c9c53fad1248614e940d4b237760ab7569a767b7515dd2d623e57a2841b7d2441cf43049e4698d2f9c9eae7b2910f6ad65edf9cb2bdbd9b29f606e0d\",\n        \"signature\": \"1a51022628ccbb88eae9b21773c3f830b7b6e5bc36c9903ce70fbcf459d6a1ed8a1dceff5b19269ebf5a6fd3d8958860f554461f0e9fc0e29af9b1fb1744a80b\"\n    },\n    {\n        \"secret_key\": \"9bfa60923a43ed0c24e2f12f5b86a0716329f93d4d8d3e06238002893278c19a\",\n        \"public_key\": \"fb1c00687781b55b893d6b2f4f49cf5f73d2903c316d1eee75991d983a1868c0\",\n        \"message\": \"a99028b0f4a3aa5e79abef6c0df4a783ef470f1a29ba51eba00f6214e840fe19e5b6dc6021ab599bb2ee3699576015d79a7939af823535b630e3938c723f6e0b9229d46bb3379acdba587c238567e3d89bc3bd3519b727fc694fff1118bf22c8bc8bc82c4df7f5ad38de05fe9f762999ecaa795f3ae630a9a316d26dce9f1568ffa3f22b0295214020b3d3f5337c149568192218132a90709279c01d23baefa669e1c4e42038173f1319c212da144f1c4ea4c52c005cbc0b5bc283e74483a0dca69279deb17ae5b29cfafa7d0063f4e1bc93537efd937e58a8aca737228f937ff2a741890e96c5725da11b45c413a9bbb4180a419987bbf046bfd346295d62f081c76daf2b0e1eb4f6712feebe6f0a92e358e7ddb85896507c340a01f68d1b0f085778b7c44b014aa6673e501796959a17a688db0959058488a7112572f23cf9cdb53b5eb4b45f5953ba0c0c690f86bd75e89a047bebaf847c1dfc345a4f3c7d3beec98b84b0219003e819f5c2adb45f8717903d1f5bd5d71914c56fcabc7a290f9c41699c95584d6a3a16340cb17baa1fc5e5467af7ac3221\",\n        \"signed\": \"55f202efb2a57be8b4e4fd894dcc11a4fc5f8276618ef5cd34a4495adb016a298e6480a35cfc53edb25ff1499fc532a33061cc01a250458aa5e4f7f16f51440da99028b0f4a3aa5e79abef6c0df4a783ef470f1a29ba51eba00f6214e840fe19e5b6dc6021ab599bb2ee3699576015d79a7939af823535b630e3938c723f6e0b9229d46bb3379acdba587c238567e3d89bc3bd3519b727fc694fff1118bf22c8bc8bc82c4df7f5ad38de05fe9f762999ecaa795f3ae630a9a316d26dce9f1568ffa3f22b0295214020b3d3f5337c149568192218132a90709279c01d23baefa669e1c4e42038173f1319c212da144f1c4ea4c52c005cbc0b5bc283e74483a0dca69279deb17ae5b29cfafa7d0063f4e1bc93537efd937e58a8aca737228f937ff2a741890e96c5725da11b45c413a9bbb4180a419987bbf046bfd346295d62f081c76daf2b0e1eb4f6712feebe6f0a92e358e7ddb85896507c340a01f68d1b0f085778b7c44b014aa6673e501796959a17a688db0959058488a7112572f23cf9cdb53b5eb4b45f5953ba0c0c690f86bd75e89a047bebaf847c1dfc345a4f3c7d3beec98b84b0219003e819f5c2adb45f8717903d1f5bd5d71914c56fcabc7a290f9c41699c95584d6a3a16340cb17baa1fc5e5467af7ac3221\",\n        \"signature\": \"55f202efb2a57be8b4e4fd894dcc11a4fc5f8276618ef5cd34a4495adb016a298e6480a35cfc53edb25ff1499fc532a33061cc01a250458aa5e4f7f16f51440d\"\n    },\n    {\n        \"secret_key\": \"6e3af45e66e22890c3f3c934f523a4d69427976e6e52625f8bad558993963219\",\n        \"public_key\": \"e097364e76ff9f2e1d167f6b20c1bc5830085e7ec993c138f8b1b2175637e741\",\n        \"message\": \"5cfc2f4b559f8205b39102087617f4d86c7ce6cb251e5f89601dfc88ed28e8d7a670ec0087d2ea5d893021c7044da2899a22d776fe90170e51c203250690d37a294555e74af9234cbf1ad8f22cee8974828a0d09e9554b71ee3bcf880ab98325f706272194eb2e80c701d441b5f8668561b88849f827af703ab0954105fd3c54b3f6ec5493596d0e3bc67818048310c4a3e0c556bc80675f201f9bb9c6538a41d99aa40c886fc431467218d819c23e78498aed0613fa6f973e2211df9fb87f44116f3fe4c26d6cb2fa334c87f78c08ca8c9b9041d83a1230677e0af788598a42e44cfdf6964a4ee80e38402ba67c73a581e552baa2282425cb2ca17ca92edfbf98299102fba761b9b71a5452141bb9c18dd95febc2a782de9ceec08bd2ee3f7f0c1bd8946dba99cf9ea086abafd37c9ca60213f0de17c61ff9c391c9818ed5cd8571778b7dcc13224962386fb8ca14f861e99f3b18edac8a5f130f7bfcd45d045d0ff34c81572a512363d6530f93813e5fb10e9cb8338a7f93800491006f4463e89f0ed4530e5f12df674f598904780ad0812b1e3521fcd0f83e\",\n        \"signed\": \"26ba562e8a4065708207c25e239b780aee38794cf983a37acbb9d557a65ceed3c0da47d17f3e8b8f4eeb1b65a2c182ea6f29623b63bb0f1c72592683b126b9015cfc2f4b559f8205b39102087617f4d86c7ce6cb251e5f89601dfc88ed28e8d7a670ec0087d2ea5d893021c7044da2899a22d776fe90170e51c203250690d37a294555e74af9234cbf1ad8f22cee8974828a0d09e9554b71ee3bcf880ab98325f706272194eb2e80c701d441b5f8668561b88849f827af703ab0954105fd3c54b3f6ec5493596d0e3bc67818048310c4a3e0c556bc80675f201f9bb9c6538a41d99aa40c886fc431467218d819c23e78498aed0613fa6f973e2211df9fb87f44116f3fe4c26d6cb2fa334c87f78c08ca8c9b9041d83a1230677e0af788598a42e44cfdf6964a4ee80e38402ba67c73a581e552baa2282425cb2ca17ca92edfbf98299102fba761b9b71a5452141bb9c18dd95febc2a782de9ceec08bd2ee3f7f0c1bd8946dba99cf9ea086abafd37c9ca60213f0de17c61ff9c391c9818ed5cd8571778b7dcc13224962386fb8ca14f861e99f3b18edac8a5f130f7bfcd45d045d0ff34c81572a512363d6530f93813e5fb10e9cb8338a7f93800491006f4463e89f0ed4530e5f12df674f598904780ad0812b1e3521fcd0f83e\",\n        \"signature\": \"26ba562e8a4065708207c25e239b780aee38794cf983a37acbb9d557a65ceed3c0da47d17f3e8b8f4eeb1b65a2c182ea6f29623b63bb0f1c72592683b126b901\"\n    },\n    {\n        \"secret_key\": \"5f1f271844d9ed5a6a6f209a21408daea470f6fd53ba6479d7407105b7de4d65\",\n        \"public_key\": \"6085d7fb5a9b2ed806c1fd30a2afde760961f7a36b48f4875246e615a2bd9928\",\n        \"message\": \"eed6b4475dc263bd2207fe9d41d48282b713f680f2e037384f18b4bf224347f5e4c4b060b808d412eaabcf733dc39a40c6bda0505ce71fa823bd1b1794847678dc034e7999c16369340bc60c64d09bb9187b2e326055a053f8e505ea4196861471622db0e46f0f8954d8a1f07332da4d8ac55712626009912f8a15a9cd63a74a03c92f246cb63cc73f92e51dad1bc9715b1ed3fe5f2e1b2959b9b71e0e37360eb29536cf797147fab10864d6146c36b82335a0ce931408479c7ede484ff73e2dbfffc6c9227e16d7a23f4d90f15584514c39594e17bfbb295de9d62adadb589dbbe0b06dc8dac5b3bf517b24c1837b39472a6dd38931ffbbff5b763638805b4e22321f7afe92cdf502fb63d109ddcd9e4051ad6f45598532be179523710851d3931e887d02c345c79c489fc106a4ae162f7df71ab90b751da7038a6df7616cfc11887e21068fb9e33be566402be504f3fc2742b881509bd4fe6a0fc722649883f8cb655598a15a1d4c229dd86b5caeb711a028defd431154bba46b48172a4d8cbd45bc90aaf874b6085fa284f5fed655ad6fa17d67b3b9a796fa3e\",\n        \"signed\": \"319bb4deb2178112241b3fb8f46e105c3b8e4ef721eb200d762ef363e2716f2a89f80b5b9e89970890a09892ad6a58808b477e943b3cfa77774a3645bc745f03eed6b4475dc263bd2207fe9d41d48282b713f680f2e037384f18b4bf224347f5e4c4b060b808d412eaabcf733dc39a40c6bda0505ce71fa823bd1b1794847678dc034e7999c16369340bc60c64d09bb9187b2e326055a053f8e505ea4196861471622db0e46f0f8954d8a1f07332da4d8ac55712626009912f8a15a9cd63a74a03c92f246cb63cc73f92e51dad1bc9715b1ed3fe5f2e1b2959b9b71e0e37360eb29536cf797147fab10864d6146c36b82335a0ce931408479c7ede484ff73e2dbfffc6c9227e16d7a23f4d90f15584514c39594e17bfbb295de9d62adadb589dbbe0b06dc8dac5b3bf517b24c1837b39472a6dd38931ffbbff5b763638805b4e22321f7afe92cdf502fb63d109ddcd9e4051ad6f45598532be179523710851d3931e887d02c345c79c489fc106a4ae162f7df71ab90b751da7038a6df7616cfc11887e21068fb9e33be566402be504f3fc2742b881509bd4fe6a0fc722649883f8cb655598a15a1d4c229dd86b5caeb711a028defd431154bba46b48172a4d8cbd45bc90aaf874b6085fa284f5fed655ad6fa17d67b3b9a796fa3e\",\n        \"signature\": \"319bb4deb2178112241b3fb8f46e105c3b8e4ef721eb200d762ef363e2716f2a89f80b5b9e89970890a09892ad6a58808b477e943b3cfa77774a3645bc745f03\"\n    },\n    {\n        \"secret_key\": \"048ac9ec3ecb30a3b1bfda9b3b79a48c0793b490879e3c8a5e23ee2babcd9b7c\",\n        \"public_key\": \"946c186feafc3580a58ddd526ff229c04720250f4cf6bde0271eef9b12b1c3f3\",\n        \"message\": \"d68be8ef7b4c7a4289f2b18b16ade97f4e4fa16452976afb581693380cc54de38a07587f32e2d4549f26595fee2393bd062e9b00bae72498e4148c8b882a8840e15b585c82b5c0defb233518409916615deb3a55a5f84e6b3aab93844de3b1e4d86e09f889ac71c324eb12d0fbd861cc31229540e843a34f8d5be47c0ec0d23df43e06813fca309439904c167d1043c0dcd444b004be1ff27b7862b00eba9433b94b0fcdc67521da0c1d5358636c78f530431164dde20a1cf164f51e29b8e63eacdecc869b41392c667664d91680d9ac516af548f09e60564e814e36e0b563dbae55c627ffc14158a56d8eb3609e174381b21de4ba82344466dd577f4d1103c43c27fb83cb833d87afdf7412b4090909b1dde264daddce967f496bf6f17112bf351e417db5953b13b8f0fcccbf30f5bcf376861c12ef20eec89ed23cf384ee78dc6eb40fd5811a7b23927c13e7dc5da3a921b883a9b2b1155970fb0da7d2993dcdfd4343642a9d5a6347e43c193b5793e4453ac1537aa3d04dc9f774e840934881d78a39ba250438c507250eed2f6e07cc953f783d6b72b1cc619981\",\n        \"signed\": \"2ecf5b8a59a8e27d25890a2aa32f4a0673275d539b174afa7b2cebf2e76280dffc338ede85ac8f614039560e2806d9e1e3cf9cce2ceb7874ffe1a7e80cdef40bd68be8ef7b4c7a4289f2b18b16ade97f4e4fa16452976afb581693380cc54de38a07587f32e2d4549f26595fee2393bd062e9b00bae72498e4148c8b882a8840e15b585c82b5c0defb233518409916615deb3a55a5f84e6b3aab93844de3b1e4d86e09f889ac71c324eb12d0fbd861cc31229540e843a34f8d5be47c0ec0d23df43e06813fca309439904c167d1043c0dcd444b004be1ff27b7862b00eba9433b94b0fcdc67521da0c1d5358636c78f530431164dde20a1cf164f51e29b8e63eacdecc869b41392c667664d91680d9ac516af548f09e60564e814e36e0b563dbae55c627ffc14158a56d8eb3609e174381b21de4ba82344466dd577f4d1103c43c27fb83cb833d87afdf7412b4090909b1dde264daddce967f496bf6f17112bf351e417db5953b13b8f0fcccbf30f5bcf376861c12ef20eec89ed23cf384ee78dc6eb40fd5811a7b23927c13e7dc5da3a921b883a9b2b1155970fb0da7d2993dcdfd4343642a9d5a6347e43c193b5793e4453ac1537aa3d04dc9f774e840934881d78a39ba250438c507250eed2f6e07cc953f783d6b72b1cc619981\",\n        \"signature\": \"2ecf5b8a59a8e27d25890a2aa32f4a0673275d539b174afa7b2cebf2e76280dffc338ede85ac8f614039560e2806d9e1e3cf9cce2ceb7874ffe1a7e80cdef40b\"\n    },\n    {\n        \"secret_key\": \"2f057d20b1678531611f48f003b7d22eba5dbbd7e2dd41b7c79d09071f85e993\",\n        \"public_key\": \"620fc4eaa34d787df675ccbf7e893204828db92ead17a1165ac7fa1ab42719d8\",\n        \"message\": \"6e35f6eaa2bfee06ea6f2b2f7ab15fa97c5180958af2e90af918adfb3db8323f447c7bf26dc534997c38b7fc977f642de288cdf253071cacf3564e3b8ed6dce57ddfba9ff783bad2e76df124828fc1031acfadf01a44d41b42161ad9060301c1af1928b9e5b73b9bd21cac60a842b504dc3cc311c522e3bb048bf221444f53ceb08e77e948590e94ed98f1b604cb9eadc93bbe7431c1149b23193ff93e8569f113e1684d8976ecae6f09e0103614be418a472ef55bb8890d72b341cdd7505b50a45522ab63ed791ce8f82feddd7a620a4f6fb1d2fb0ed0c4560d78446d83b3d1b1bb56b366d196020d0624b1fbdb75ce735dd43e8e8df163c44e236993dca341f5132d825d0a4e393a19d38f61e11e0cf392cb9b646ea23c58099824dd8d9fbe26a49e33b23df80607abf19715799c19acc722ed9bcf94a0c29ad24b78b0b035b3241c64cd86edeac810e66745694b5eb1625060edf2d949de0d34f522df2dc60ae694a193f3b82c1d6f83a0cbb840f46c49a3d7d1cf06deaf96c64f8f9e17bd9ad512ae6309c486d9e2a78dceeca473a0421dd1b643c78754271b53ce\",\n        \"signed\": \"30df7b0b1c04fb1efa3517e928d6d57c2ca0d07f4e04ffb1f08b4792c5937dd271ccabdc00dce850afe50af5990f224e8420a681d95f9f7f515afec102efd10e6e35f6eaa2bfee06ea6f2b2f7ab15fa97c5180958af2e90af918adfb3db8323f447c7bf26dc534997c38b7fc977f642de288cdf253071cacf3564e3b8ed6dce57ddfba9ff783bad2e76df124828fc1031acfadf01a44d41b42161ad9060301c1af1928b9e5b73b9bd21cac60a842b504dc3cc311c522e3bb048bf221444f53ceb08e77e948590e94ed98f1b604cb9eadc93bbe7431c1149b23193ff93e8569f113e1684d8976ecae6f09e0103614be418a472ef55bb8890d72b341cdd7505b50a45522ab63ed791ce8f82feddd7a620a4f6fb1d2fb0ed0c4560d78446d83b3d1b1bb56b366d196020d0624b1fbdb75ce735dd43e8e8df163c44e236993dca341f5132d825d0a4e393a19d38f61e11e0cf392cb9b646ea23c58099824dd8d9fbe26a49e33b23df80607abf19715799c19acc722ed9bcf94a0c29ad24b78b0b035b3241c64cd86edeac810e66745694b5eb1625060edf2d949de0d34f522df2dc60ae694a193f3b82c1d6f83a0cbb840f46c49a3d7d1cf06deaf96c64f8f9e17bd9ad512ae6309c486d9e2a78dceeca473a0421dd1b643c78754271b53ce\",\n        \"signature\": \"30df7b0b1c04fb1efa3517e928d6d57c2ca0d07f4e04ffb1f08b4792c5937dd271ccabdc00dce850afe50af5990f224e8420a681d95f9f7f515afec102efd10e\"\n    },\n    {\n        \"secret_key\": \"3a3d27970fe2acb6951edd5ca90dda0fc6dd229c0a56df6eb11a9c54d242dbbf\",\n        \"public_key\": \"564f0dc3dc4720e68e44dd16711e049e6112000098fa62a1b98c288042f7c3bd\",\n        \"message\": \"4374f61c2cd88a3b8972249bfa79b36ab69e3ed484cc60e5d9541fa7686cf4eed1210c5d0dcf42dd25972501909193ca76ae6eb7f471d8bd0d5fb5a6b431bc3de0e0318d50514524de87c4b83005dfb41245fb1af79b84a97b83d3cac7ad7a53364e2e9b21c97b769bdc57f0703116168380f3cc883689eb4a7fa3b26dbe12bc28f8c40381af64df4b5361d174cf75acbd46428740b0d1322d32bbe94845215966ae588777a8c05336e352306d49278d328e496db65e9ecf6ce6405ed1c893490bc48c13a134e1fb6e80debe6d32fce6ef74783c8d77980a441a26aeb4fd83cc855352cedc188f5279ce211f744a40b23ce7ff24437a1dd3373ec5b290da1f94f43a07a3ffea5b5f67b52c196185bce9e9a858257fcd7a8ebaf9040ed091face5a155aa447fa15e12122d25e8fc36eaee2137c7b3aa30b7e3ff6cc86b6dcb9eaf49c9576f0f462008439cb1a3aba013e897a0faf994cb7d59ede5774bb144774f73ca30e6414a7cc7c74b20c51a1404ddc419ef7624593e9bcfb37c0a762eab68faca5863443e16edb759dbc8788732b9e4f59c11192c3fcc872af55f32d\",\n        \"signed\": \"22eb8ea0507349b6a0ace25cf9180cb08e0357b04502905fbe69b4e21b2bd94e22cfbdb851ae716a5c253c70d5e2b24ea78f35bc213292543d94e14110b241064374f61c2cd88a3b8972249bfa79b36ab69e3ed484cc60e5d9541fa7686cf4eed1210c5d0dcf42dd25972501909193ca76ae6eb7f471d8bd0d5fb5a6b431bc3de0e0318d50514524de87c4b83005dfb41245fb1af79b84a97b83d3cac7ad7a53364e2e9b21c97b769bdc57f0703116168380f3cc883689eb4a7fa3b26dbe12bc28f8c40381af64df4b5361d174cf75acbd46428740b0d1322d32bbe94845215966ae588777a8c05336e352306d49278d328e496db65e9ecf6ce6405ed1c893490bc48c13a134e1fb6e80debe6d32fce6ef74783c8d77980a441a26aeb4fd83cc855352cedc188f5279ce211f744a40b23ce7ff24437a1dd3373ec5b290da1f94f43a07a3ffea5b5f67b52c196185bce9e9a858257fcd7a8ebaf9040ed091face5a155aa447fa15e12122d25e8fc36eaee2137c7b3aa30b7e3ff6cc86b6dcb9eaf49c9576f0f462008439cb1a3aba013e897a0faf994cb7d59ede5774bb144774f73ca30e6414a7cc7c74b20c51a1404ddc419ef7624593e9bcfb37c0a762eab68faca5863443e16edb759dbc8788732b9e4f59c11192c3fcc872af55f32d\",\n        \"signature\": \"22eb8ea0507349b6a0ace25cf9180cb08e0357b04502905fbe69b4e21b2bd94e22cfbdb851ae716a5c253c70d5e2b24ea78f35bc213292543d94e14110b24106\"\n    },\n    {\n        \"secret_key\": \"06d498318da456242b9c3b9ab6d532a128fce044f53882682e9262149c165288\",\n        \"public_key\": \"413517aa63200a17173209a4b3e78ab9383cb4e39efd6794c46a2d13fafa99c0\",\n        \"message\": \"3fe30ecd55077a6e50df54bb1bf1248bea4063e3fa755f65fcd1159ee046efd0eb5f2fbb38b5c00947c97dc879b36b9e536192286086d0dc12053610386174a7c56f22a85b73ff208c5944f393236c32415809da036e73cad8fc3c30378064a76afa930a3baae9aa357061a8c5e8e756a9cecf94b72df43facd88fa49cb4948c6368318a6b1e5cff52e587ecdfaefdb69081f28c2d13bf8eab81dbaa5e3728c4317fb793dd196bca0fe54a6c242cf26e2d129ba0d82a2c3a45bc8d1dfd6f54f8da4f5189c91ac214fdabf4c597381b2e5c40cc71fa7051cf2ea93906a37d57df12d5c7e5cd77c907e442566315bae51a2222d62e3f42d1767882637d66a1d5305ab4010a0e49c57def69dcea839e1b76a41135ba952cc424950e8d3aac19e1d93de7757c15ff9997b3d2a8613cd9a164781d1be331799fa6109cef614305a1958f62903c8c9ea0b23ba706d49c54baccc1e63cb4bf14785fc7b062a9800349bdb0bb927260b677b60f10e62c8780f3ebb5eb6ff0360263d457ab52fd1125c9ce046a95d89d287350c804cfd4ff2b2ddd18a9e13519f20b4d1e051af624640f\",\n        \"signed\": \"8250f76dc599c5128787e4f6d3da23173330ce3320dba959bd714cc8cc07c67945d63e75662c075e267460ab7bf561f24faae3b41dbf676899191e3b02b5af0a3fe30ecd55077a6e50df54bb1bf1248bea4063e3fa755f65fcd1159ee046efd0eb5f2fbb38b5c00947c97dc879b36b9e536192286086d0dc12053610386174a7c56f22a85b73ff208c5944f393236c32415809da036e73cad8fc3c30378064a76afa930a3baae9aa357061a8c5e8e756a9cecf94b72df43facd88fa49cb4948c6368318a6b1e5cff52e587ecdfaefdb69081f28c2d13bf8eab81dbaa5e3728c4317fb793dd196bca0fe54a6c242cf26e2d129ba0d82a2c3a45bc8d1dfd6f54f8da4f5189c91ac214fdabf4c597381b2e5c40cc71fa7051cf2ea93906a37d57df12d5c7e5cd77c907e442566315bae51a2222d62e3f42d1767882637d66a1d5305ab4010a0e49c57def69dcea839e1b76a41135ba952cc424950e8d3aac19e1d93de7757c15ff9997b3d2a8613cd9a164781d1be331799fa6109cef614305a1958f62903c8c9ea0b23ba706d49c54baccc1e63cb4bf14785fc7b062a9800349bdb0bb927260b677b60f10e62c8780f3ebb5eb6ff0360263d457ab52fd1125c9ce046a95d89d287350c804cfd4ff2b2ddd18a9e13519f20b4d1e051af624640f\",\n        \"signature\": \"8250f76dc599c5128787e4f6d3da23173330ce3320dba959bd714cc8cc07c67945d63e75662c075e267460ab7bf561f24faae3b41dbf676899191e3b02b5af0a\"\n    },\n    {\n        \"secret_key\": \"8e8e1db5b1102e22a95c47af3661469f000a33f13b8b87b115d2452a411f6f39\",\n        \"public_key\": \"56d7b3169a95c22998ec937925bd7cad13cc65808cd5d34a6c4da870eaf32364\",\n        \"message\": \"b24634fbdd1b7661315d9dc153ba90d66a88622a4158f8bcff25ba9c29e65f297f8e60311800b7331b69fc20c9f85bb7c184bd4086b3a9f9a27102b62362bdb4fa5b201594250fc628fd2e0e0d1be03dcf818c6094c4c29121cb2bf6d908ed8aab427c3771c0c95f0ac1469a0810b603a470282e5980a60729197fe6c20ef681cd1b96932d2058f896ea7416422a7e541f224a5f04253080741c5d4e3eb039db6ba051b4ca5417ce8afdc70214ba4dcc85b623d11e681c6009aee4e6130a83edd0d2c99fb0647e11ede7301ae56b59904ef7025732cde038801ec7e8d90a9a1bba047fe628351b3b89d0bc5ae665a700891f09ebeec05591842adfcc25adc3c71c1ebc4a312e5471be67253b0e9428b0cae37645a0f7ecb89dd79fbd9be2875433667ae07d74a7983c4cea601e72e975c21df993e7fa22a9fabd45455d45e37031558e13a7a4f5f497ea78fb7399f8838c0fd5de4ebb66db290f43a4867d505309f1c1bc27e9fabcbba71302fc1204715ce3fcb0905bfa411c9d1c9ab4a39954e50b8e0cf736c10289563bdfa967553c36cd9e555bc8cc56be594847de9f26f9\",\n        \"signed\": \"f6ee5e13cfaa362c8971d5a4a879a7e36966525ccd86c5a48cba08d913ece1a79c4cd146b8e9c65125fbadf17bac1cabcde8fd17cfd68fa1f9c44ea61c08a405b24634fbdd1b7661315d9dc153ba90d66a88622a4158f8bcff25ba9c29e65f297f8e60311800b7331b69fc20c9f85bb7c184bd4086b3a9f9a27102b62362bdb4fa5b201594250fc628fd2e0e0d1be03dcf818c6094c4c29121cb2bf6d908ed8aab427c3771c0c95f0ac1469a0810b603a470282e5980a60729197fe6c20ef681cd1b96932d2058f896ea7416422a7e541f224a5f04253080741c5d4e3eb039db6ba051b4ca5417ce8afdc70214ba4dcc85b623d11e681c6009aee4e6130a83edd0d2c99fb0647e11ede7301ae56b59904ef7025732cde038801ec7e8d90a9a1bba047fe628351b3b89d0bc5ae665a700891f09ebeec05591842adfcc25adc3c71c1ebc4a312e5471be67253b0e9428b0cae37645a0f7ecb89dd79fbd9be2875433667ae07d74a7983c4cea601e72e975c21df993e7fa22a9fabd45455d45e37031558e13a7a4f5f497ea78fb7399f8838c0fd5de4ebb66db290f43a4867d505309f1c1bc27e9fabcbba71302fc1204715ce3fcb0905bfa411c9d1c9ab4a39954e50b8e0cf736c10289563bdfa967553c36cd9e555bc8cc56be594847de9f26f9\",\n        \"signature\": \"f6ee5e13cfaa362c8971d5a4a879a7e36966525ccd86c5a48cba08d913ece1a79c4cd146b8e9c65125fbadf17bac1cabcde8fd17cfd68fa1f9c44ea61c08a405\"\n    },\n    {\n        \"secret_key\": \"3884b8b79abfd3be6c13985eb859ab743f157cd9deb81b2fe97ea4d6173e46f5\",\n        \"public_key\": \"bd7fd9a8def13a542ed2f2fb048886885ba9b5ce59cb7019fb54667986eebc26\",\n        \"message\": \"12adafe30eaf2b9c7203ca5d44b97ffed4bf6517a49988e4e676c8e314adbdbe23d8f2d3e2b081a7024fa525ab5aae26e60057c101e8f368d3addb9376c4682c1f4224d7f149a8474bb9a8f663ef210e9572ce829da388d8aae72a467141adc153473be3653baaa64b5b1e2e30683f6f06dac2784d5bbf0d082aab47305ed8a8efd0886ce63a179315225d1e4d4ffcf1f24ac2f464cf5ed3a8b6d3998454f1c02cdbf0a444ee2b59ddbe0a174a0d937fa62865088ac647499957d281c6949803a5fbdfdd0dd9e91b6976861f3c5f2126f39aac935be09f4b9715bd4f0d5c55df73a6b9f2c0ad26ce49d822bf85bfa2346f3165b03859a71c3d2a7b86db6e9f2e5d7b169a910eeb7ef38fbdfbbec43a9a25f04bc3acfd3b0691542ab6de9db6f03058f9584024f9918edecd90fbb85735d6dcec5bd593ae63e2cc96553599a310f8f2009ba95371196b4d5b80e7559637f22926778be5e1ccef5126e2443fa939c2a53dddb04961eefd34e538cd8d7f0bec2bff1ef0d3a4bdd358317637f42d595538c1122251a94e963d1f81e7b9aeb164f95da9a4ed7529b845ebc961b27b5c19\",\n        \"signed\": \"f4206fcd34502441d54a73323f33a5dbb4c98557319f21246f260ffbbe5844886db567f4b63c47943dbb78fc35657d7c04d4feb042ff8536f672925c319efb0912adafe30eaf2b9c7203ca5d44b97ffed4bf6517a49988e4e676c8e314adbdbe23d8f2d3e2b081a7024fa525ab5aae26e60057c101e8f368d3addb9376c4682c1f4224d7f149a8474bb9a8f663ef210e9572ce829da388d8aae72a467141adc153473be3653baaa64b5b1e2e30683f6f06dac2784d5bbf0d082aab47305ed8a8efd0886ce63a179315225d1e4d4ffcf1f24ac2f464cf5ed3a8b6d3998454f1c02cdbf0a444ee2b59ddbe0a174a0d937fa62865088ac647499957d281c6949803a5fbdfdd0dd9e91b6976861f3c5f2126f39aac935be09f4b9715bd4f0d5c55df73a6b9f2c0ad26ce49d822bf85bfa2346f3165b03859a71c3d2a7b86db6e9f2e5d7b169a910eeb7ef38fbdfbbec43a9a25f04bc3acfd3b0691542ab6de9db6f03058f9584024f9918edecd90fbb85735d6dcec5bd593ae63e2cc96553599a310f8f2009ba95371196b4d5b80e7559637f22926778be5e1ccef5126e2443fa939c2a53dddb04961eefd34e538cd8d7f0bec2bff1ef0d3a4bdd358317637f42d595538c1122251a94e963d1f81e7b9aeb164f95da9a4ed7529b845ebc961b27b5c19\",\n        \"signature\": \"f4206fcd34502441d54a73323f33a5dbb4c98557319f21246f260ffbbe5844886db567f4b63c47943dbb78fc35657d7c04d4feb042ff8536f672925c319efb09\"\n    },\n    {\n        \"secret_key\": \"ecd519f287ad395052b0b30deac341d2a9df13d6567c891c813a0c9ca52e871e\",\n        \"public_key\": \"8ee94c588e0b343585fc6748fd1b54b5770c64e9937a56357a48d44ae2f51824\",\n        \"message\": \"aa71be5f557e10c9fb5f091a3a274453947c07a0e25b26f9509224541dff76f4d96effd0d5a41d319bc9321a86667d55cf49432fb5c3e715388f3f106c9174b1610c8f3075d5931c290099385ce9249e235128e907c53390036fbf5da968f8d012336958de90c5e8e6b1016ad43fb57c8e288dafe14e90e64b63791e5cbe557e02df8ac9370642a71faf851075e5565f6f9a267f4f6b454ce4c5474810b804844dda38392939719793246aa47454b9b0e82e9803c09935d0027f3995cca9713069bb31027f7b2af12fe5feec7eeb06843d8296ec5682262a07dae747ed7bc821ec17018d899fd167b36a7e3773b427499d99dc583bbe4b429afa6a26593953f943e4673bdd0d2a844256131603cd0903256f334d4f8ec82de115b6ca5338c75c8baa44b4ba963c7c78510d8de9b2a5852f42f3463c685fb3a6da61a8e0892662d6a250fcaa6fef74d450fc457b9871d08bb5be3011294ac888fce215d535c3b1a43bb47efe3ad25da159191aed55195469c59093ffb24f65d60c4020bfbe647ff5db7ab8a01d5e487b0b1b64ef25da156db142e6ad872a4dc1ee9ba668465265379e\",\n        \"signed\": \"e8f51be73fc4e0235aa153a2e1b354e9c5d2d33a11ae0e333478de1d8e6c4456d2e250824c3246ca0e8d6ae3e16677a97344144108c13b959e1daf51cf0fe501aa71be5f557e10c9fb5f091a3a274453947c07a0e25b26f9509224541dff76f4d96effd0d5a41d319bc9321a86667d55cf49432fb5c3e715388f3f106c9174b1610c8f3075d5931c290099385ce9249e235128e907c53390036fbf5da968f8d012336958de90c5e8e6b1016ad43fb57c8e288dafe14e90e64b63791e5cbe557e02df8ac9370642a71faf851075e5565f6f9a267f4f6b454ce4c5474810b804844dda38392939719793246aa47454b9b0e82e9803c09935d0027f3995cca9713069bb31027f7b2af12fe5feec7eeb06843d8296ec5682262a07dae747ed7bc821ec17018d899fd167b36a7e3773b427499d99dc583bbe4b429afa6a26593953f943e4673bdd0d2a844256131603cd0903256f334d4f8ec82de115b6ca5338c75c8baa44b4ba963c7c78510d8de9b2a5852f42f3463c685fb3a6da61a8e0892662d6a250fcaa6fef74d450fc457b9871d08bb5be3011294ac888fce215d535c3b1a43bb47efe3ad25da159191aed55195469c59093ffb24f65d60c4020bfbe647ff5db7ab8a01d5e487b0b1b64ef25da156db142e6ad872a4dc1ee9ba668465265379e\",\n        \"signature\": \"e8f51be73fc4e0235aa153a2e1b354e9c5d2d33a11ae0e333478de1d8e6c4456d2e250824c3246ca0e8d6ae3e16677a97344144108c13b959e1daf51cf0fe501\"\n    },\n    {\n        \"secret_key\": \"193f3c630f0c855b529f34a44e944970f4a6972e6c3859359c2e0c8762ba9eaf\",\n        \"public_key\": \"3256f2c82e7c801201210140569faf18507e60338c2cc4118bb1ce605b0ebe61\",\n        \"message\": \"98623f651698085bde02762e8c3321f14da1619b5c3f7c1a568e8c26ff0c62fdcc412475912eb8e8c4b0d30918b8ffeef3509315e58da359cdc2f26bebfb5703953be16b8f3beb1e54a1abee0aebe24e64dbe873402e156f37dfc168eaf8a114ce08a6795d3f64f5151e9a8b8275cc7b49a6b8d8a66b6d4b7632ef80740dc1c1b0a38d1a28f7c1b29fa44541c1aad354d4590c231dae687a2a8fed09e8c1ebbfcc38f347bf06d94577e49ad139f710ed8bb1fd07663c0320846fbb455ab837ef964ae7d4eceea45fd7bd8d509f821e6eb027494efd8dd8e992b88698eec2ebc5e03025be789c18013f201f77aa2d34f5686460e43fb489e08776f98bcde2ceeb9d4fafdffe0375604371ec32f46b81fec474382908e9d250a0ba2780a7d6df407bd2b1eb126748d72511b9b069eb1cd44270f29fe84b9a717751831d04c2818e408f22789376c61c2ca45e32e788ead3a7536bf09da8af4703902f5516a020d89263e93701a2565eef1270418925f35a288e327bab628ac2f0248cfbca3482e265d1621cc343c31f65493f064bad0d7602460715fa486f29426346af53e333b75f5905\",\n        \"signed\": \"b12510ac5f2f6d33360cddc67291d6c270fd9ee62dc086b38d932d26473fe9a24efbd4248867ea7e915a30c5bfb3b8b19aa01aa2febf0dac6cfd6638a2ba7e0c98623f651698085bde02762e8c3321f14da1619b5c3f7c1a568e8c26ff0c62fdcc412475912eb8e8c4b0d30918b8ffeef3509315e58da359cdc2f26bebfb5703953be16b8f3beb1e54a1abee0aebe24e64dbe873402e156f37dfc168eaf8a114ce08a6795d3f64f5151e9a8b8275cc7b49a6b8d8a66b6d4b7632ef80740dc1c1b0a38d1a28f7c1b29fa44541c1aad354d4590c231dae687a2a8fed09e8c1ebbfcc38f347bf06d94577e49ad139f710ed8bb1fd07663c0320846fbb455ab837ef964ae7d4eceea45fd7bd8d509f821e6eb027494efd8dd8e992b88698eec2ebc5e03025be789c18013f201f77aa2d34f5686460e43fb489e08776f98bcde2ceeb9d4fafdffe0375604371ec32f46b81fec474382908e9d250a0ba2780a7d6df407bd2b1eb126748d72511b9b069eb1cd44270f29fe84b9a717751831d04c2818e408f22789376c61c2ca45e32e788ead3a7536bf09da8af4703902f5516a020d89263e93701a2565eef1270418925f35a288e327bab628ac2f0248cfbca3482e265d1621cc343c31f65493f064bad0d7602460715fa486f29426346af53e333b75f5905\",\n        \"signature\": \"b12510ac5f2f6d33360cddc67291d6c270fd9ee62dc086b38d932d26473fe9a24efbd4248867ea7e915a30c5bfb3b8b19aa01aa2febf0dac6cfd6638a2ba7e0c\"\n    },\n    {\n        \"secret_key\": \"a88ad0048d38c44cebe735ea3802ca576e37121c7d4d760dfd88de1663064abb\",\n        \"public_key\": \"14dd8bb306803e5a758ed68ad21d07d88161d50f1c74713777da1209afbaea0b\",\n        \"message\": \"2ce8bca26178913b1676e90ffefd945bc561982660e2a75d482ff30aaba1ba43f82d2e6b909ec10fc09789ff5cf32a5180b601ea80fadece6d7e7baeef481dc6979e2f658ae0f6d8e416b93298f7d34031bb76f716ed991a16d09a582e58ba4003ac17be8b4469e1a889b2fbb2289e98af1c6d5bbee77756713c0778b0dc446a1f6c48c4d40818ec799905f069bc95341657ca5d02b7a539a13a02cd0376a50e8343c0dc20346de5275b1dcd4ad7af725131ac75e954825d30eaa57a68bb98dfc41cafe5710556647b387d9b7fd4e47651e5138050798f6d40f4ee7120b58f74da94d73cacbfd393d1347388ee00b79b8dbfeb57814121bdda60c627dce147d4d568d79052e97b9a5f3eb5407cc46461a55e18a960d8094a5fea48b6937529cc4ec919cdbedf9185456dc00e8d98ad1537ee10a057f4eec4b81dc60392fc9188d3e561785965092e44317f2a48e36605fc583fc173b05db9dcbc7557d06487390fbbba77af3a014e1ac35139caa1c53a8d17347f178e1c54d0f52b40e91042c93e7e481d792e288fc27e4c2fcf111fe97d9e2337d2fc1c3098f06684a31d55ebf362c027\",\n        \"signed\": \"1341a148da4593c88ebc5a58821eef77f92186390ff633e76207084e7874ccf0eb1f9ec70a3a3f96b58934bcb061ff920124f7e580fa2b0b279583adf9232d0c2ce8bca26178913b1676e90ffefd945bc561982660e2a75d482ff30aaba1ba43f82d2e6b909ec10fc09789ff5cf32a5180b601ea80fadece6d7e7baeef481dc6979e2f658ae0f6d8e416b93298f7d34031bb76f716ed991a16d09a582e58ba4003ac17be8b4469e1a889b2fbb2289e98af1c6d5bbee77756713c0778b0dc446a1f6c48c4d40818ec799905f069bc95341657ca5d02b7a539a13a02cd0376a50e8343c0dc20346de5275b1dcd4ad7af725131ac75e954825d30eaa57a68bb98dfc41cafe5710556647b387d9b7fd4e47651e5138050798f6d40f4ee7120b58f74da94d73cacbfd393d1347388ee00b79b8dbfeb57814121bdda60c627dce147d4d568d79052e97b9a5f3eb5407cc46461a55e18a960d8094a5fea48b6937529cc4ec919cdbedf9185456dc00e8d98ad1537ee10a057f4eec4b81dc60392fc9188d3e561785965092e44317f2a48e36605fc583fc173b05db9dcbc7557d06487390fbbba77af3a014e1ac35139caa1c53a8d17347f178e1c54d0f52b40e91042c93e7e481d792e288fc27e4c2fcf111fe97d9e2337d2fc1c3098f06684a31d55ebf362c027\",\n        \"signature\": \"1341a148da4593c88ebc5a58821eef77f92186390ff633e76207084e7874ccf0eb1f9ec70a3a3f96b58934bcb061ff920124f7e580fa2b0b279583adf9232d0c\"\n    },\n    {\n        \"secret_key\": \"3f59d6a018f50a822117e5b473609e30cd64920ca1c2750dcb09eaab807a3eac\",\n        \"public_key\": \"457d0e59c11f348f3bfbdd3f327de78c0a7577c0aeef42d4c1e56700d108808b\",\n        \"message\": \"7d103a6c6ba2d09087eef2254c1c903f067695a54c4515e4d13bc1fbfb54d6e7a167349c14809976da04a7e58d96b40aac3b2bdd14b9b50322bb11645f05e5e978bc7fbd02492ef88f87d668280fd708373207ff670fcda97df8485d5e46dc3bd04347f4d7527eab2718f7d93d132ba7758218894e75a7deabe693335ba0dc73bf26c288bfe9be8a736d75e5e0eaa7bbe8d0b77abdd5146e0fc9b30db9f07cf4bf36260a1f41410331f8b47c6b38338c6dc9e801ffe1d585f9b7fc31e9778bca3027c232c074cb18e5b72997005ffeee4bf37c8f874b1b246a6345415dacaca7075a60443ac3319236e23cf6b7544740807052114984b8d8f7e857dcc6faec8869cf96b997dfa9af9184ad623f1d90b8ca759b448eabfce18c17cfdf9a3e3312e63e5f084cea904c1c909913cc4b19d044a3720034973c7384949bd6f9ba9256f98cd394c566da83c31180109f16d10347b7e3e9dd6be3bd3c77ff1a7996a078dcf89dcdce2d1b615695f4cc9f8f4f2a08804641bca82662ce88faa53145b6a45955aec8cc2af81cccb5d7c64f9ece1c9983326484a1e5ece4ce36544d63735f7776f21a20\",\n        \"signed\": \"d7425ea194a6715c452ec4f6d6c76e6dd374d3ca7ae7a11995d02b942d4a31870dd734c12fca89a8eb0213eb139c14a87a6a33e818603b2e313023fa58737d0e7d103a6c6ba2d09087eef2254c1c903f067695a54c4515e4d13bc1fbfb54d6e7a167349c14809976da04a7e58d96b40aac3b2bdd14b9b50322bb11645f05e5e978bc7fbd02492ef88f87d668280fd708373207ff670fcda97df8485d5e46dc3bd04347f4d7527eab2718f7d93d132ba7758218894e75a7deabe693335ba0dc73bf26c288bfe9be8a736d75e5e0eaa7bbe8d0b77abdd5146e0fc9b30db9f07cf4bf36260a1f41410331f8b47c6b38338c6dc9e801ffe1d585f9b7fc31e9778bca3027c232c074cb18e5b72997005ffeee4bf37c8f874b1b246a6345415dacaca7075a60443ac3319236e23cf6b7544740807052114984b8d8f7e857dcc6faec8869cf96b997dfa9af9184ad623f1d90b8ca759b448eabfce18c17cfdf9a3e3312e63e5f084cea904c1c909913cc4b19d044a3720034973c7384949bd6f9ba9256f98cd394c566da83c31180109f16d10347b7e3e9dd6be3bd3c77ff1a7996a078dcf89dcdce2d1b615695f4cc9f8f4f2a08804641bca82662ce88faa53145b6a45955aec8cc2af81cccb5d7c64f9ece1c9983326484a1e5ece4ce36544d63735f7776f21a20\",\n        \"signature\": \"d7425ea194a6715c452ec4f6d6c76e6dd374d3ca7ae7a11995d02b942d4a31870dd734c12fca89a8eb0213eb139c14a87a6a33e818603b2e313023fa58737d0e\"\n    },\n    {\n        \"secret_key\": \"a1212b34dbca63b7093612d05dab7b4cc8f7b676a934ad01f659851b3bb44e4e\",\n        \"public_key\": \"ba2fccea9a080591be71268d7e951f250dedc00416e5f3f908db6cc571254925\",\n        \"message\": \"07c37c46be3c68d05689577aa64a932b906446b29baf12f6174a6b42bbaefd1f1f373e0bccc473ddfcee1a7f21b96a6260ef0aa1f2d8b2959e71d12c953358a2774cc5e6f379a313e435ed69dfd6d4a59adee3cc7ec4bacbdbb3fee5430b73f6051a6096c60e9bc92cc8fa059fac2a93ef7007d64fbe50064964d5a0ad601175cd9caba453f9103b25485545d301f03c5f9f9478bdf9d414bf1dca3b1c1d9daa9971f9e617fbfaf5b02a7fbd5d4fb894c0975c54592b49a0fc85dd0853f30c51502d98fc1ab85a17cc58961aae9764570ba5cbdbc96dfceb8d11da53364b4025fe0b8ba8a353ad23686720169fe973432ffe291a4b11dedda0aac79a5e42620a64587d2059e787013b40ceec599208f66ed0ca6e1be9092ec27db216ee6dadfebc21705bc4a85aee577e57d239af586efeec22cf38d1cfb3cd74dd0d9a3381aa81e6a297e39b819137ad27d475e2bf54aa426dc29c4ca8176df343137a2d79d12ef9aa7be1cf6775e5d8a4430a85c33db61cd2f35187b4f6ea9ebdd753d1c4ef72471159ff07b77870906496249d4278e3f3ca6bcbf37a265b896539190f9a31f1e7b4b65cd1\",\n        \"signed\": \"fa93ed6595bc958dc042ce1645167b79e8f6734c46f80f631fd5484908f5e51a22427ee686f564ff982f6ef4d2ca1f0ca5624910cdd63c11a3c2b16d40973c0707c37c46be3c68d05689577aa64a932b906446b29baf12f6174a6b42bbaefd1f1f373e0bccc473ddfcee1a7f21b96a6260ef0aa1f2d8b2959e71d12c953358a2774cc5e6f379a313e435ed69dfd6d4a59adee3cc7ec4bacbdbb3fee5430b73f6051a6096c60e9bc92cc8fa059fac2a93ef7007d64fbe50064964d5a0ad601175cd9caba453f9103b25485545d301f03c5f9f9478bdf9d414bf1dca3b1c1d9daa9971f9e617fbfaf5b02a7fbd5d4fb894c0975c54592b49a0fc85dd0853f30c51502d98fc1ab85a17cc58961aae9764570ba5cbdbc96dfceb8d11da53364b4025fe0b8ba8a353ad23686720169fe973432ffe291a4b11dedda0aac79a5e42620a64587d2059e787013b40ceec599208f66ed0ca6e1be9092ec27db216ee6dadfebc21705bc4a85aee577e57d239af586efeec22cf38d1cfb3cd74dd0d9a3381aa81e6a297e39b819137ad27d475e2bf54aa426dc29c4ca8176df343137a2d79d12ef9aa7be1cf6775e5d8a4430a85c33db61cd2f35187b4f6ea9ebdd753d1c4ef72471159ff07b77870906496249d4278e3f3ca6bcbf37a265b896539190f9a31f1e7b4b65cd1\",\n        \"signature\": \"fa93ed6595bc958dc042ce1645167b79e8f6734c46f80f631fd5484908f5e51a22427ee686f564ff982f6ef4d2ca1f0ca5624910cdd63c11a3c2b16d40973c07\"\n    },\n    {\n        \"secret_key\": \"d9682086fe7dda30b87111060193d847566ab94cfd9c97ab6b43e7a8d3f79382\",\n        \"public_key\": \"8b0b1372d88733ef7233f6379790d1e46e1e07e9d3fb8b0be252ed04c5fa163d\",\n        \"message\": \"e8814be124be3c63cc9adb03af493d442ff20d8b200b20cd249367f417f9a9d893fbbbe85a642be2701d1d1b3cd48a85cf58f159a197273143a578f42e8bcc8b6240f93271900538ffc187c0afc8dbcc492bcd679baaef3af5088434a94586f94b49970bba18f5ea0ebf0d27ee482aa83ad0dd0ee609df59d37f818b2c8d7c15f0f6f544dd4c7e7cb3a16724324f77d58948f8475a60d53e5bd510c17137c99e1cfa515af9bc85569d212a21190729f2817de8c46915e021df70ff6d60215f614fc21139904df3b292b749dc4dea02518b62d15862c92d2a4c996701cdecaed84ab628ee984fc111eecb59e48444efc0d456e2c852518441c3db7630ddd5156249a28730983838ae59ac4cc7110fd6de68101ea5b2ff69fd364e3c9448defefe175bcbe117cc11b4ff7549c33e1025b6b592048a8e31969e818dcc188bb19d7a2440a3baba4eb1b81c45679db46b31bcde7776757d9931ec2063fc6f1fcd761ecc57a7d030a85ea273ef1825b05092ab9645359a444ff7d166b575fac298308d9faa68463d1d0f7b7df8a51c6815d37159adc0b593224a818321d7219f09686cfc952259718dfc\",\n        \"signed\": \"1793e497eb521ca74e35d14a63868cbe9499da2f21b4eb5260340fca3c1feca78dbe5b14ac10f3fa76fa2e71e4c91461aa75977e5e70792670ef7ff0e6a28708e8814be124be3c63cc9adb03af493d442ff20d8b200b20cd249367f417f9a9d893fbbbe85a642be2701d1d1b3cd48a85cf58f159a197273143a578f42e8bcc8b6240f93271900538ffc187c0afc8dbcc492bcd679baaef3af5088434a94586f94b49970bba18f5ea0ebf0d27ee482aa83ad0dd0ee609df59d37f818b2c8d7c15f0f6f544dd4c7e7cb3a16724324f77d58948f8475a60d53e5bd510c17137c99e1cfa515af9bc85569d212a21190729f2817de8c46915e021df70ff6d60215f614fc21139904df3b292b749dc4dea02518b62d15862c92d2a4c996701cdecaed84ab628ee984fc111eecb59e48444efc0d456e2c852518441c3db7630ddd5156249a28730983838ae59ac4cc7110fd6de68101ea5b2ff69fd364e3c9448defefe175bcbe117cc11b4ff7549c33e1025b6b592048a8e31969e818dcc188bb19d7a2440a3baba4eb1b81c45679db46b31bcde7776757d9931ec2063fc6f1fcd761ecc57a7d030a85ea273ef1825b05092ab9645359a444ff7d166b575fac298308d9faa68463d1d0f7b7df8a51c6815d37159adc0b593224a818321d7219f09686cfc952259718dfc\",\n        \"signature\": \"1793e497eb521ca74e35d14a63868cbe9499da2f21b4eb5260340fca3c1feca78dbe5b14ac10f3fa76fa2e71e4c91461aa75977e5e70792670ef7ff0e6a28708\"\n    },\n    {\n        \"secret_key\": \"b52b249a7aeae0fbd94ffcf9a9fde10de61c3f4cbda14b289fe01f82707334ca\",\n        \"public_key\": \"735163bfcfd54f9d352e1c2f3c0170c95c1842ccc7421623ae0496980cee791c\",\n        \"message\": \"1d445e8ee36f6e1064ee1281e6b4a4cec50a91c2b667c8305d1e9a5f7b73a3445882581fb0c11e64f6ee92e811f9f2d6c59c6344be7691d116dda493cade51c0ce77372b61a7c4fbb633401333cbf71372ad2f044e992ac035f5879c053004f8223f237a24a409b7894f6ad518e046b8a84c3f4c6260e6169fd944d57fbcf9ba2775f2d60ed772c46ccd63c850b80d587c5208dfb1a25878c02dece3e602e9632fc3c2c79b25ab41034c6e26b869255357a686781dfe6e644beba9b627da1fcb5ec0be497cf188e1ef1af0601bf16b2911fd9ff34f0e97ac95a7fe2cf90ea6ced33ccb0ed1ef2d4160efb07c591a5cb16c70ca1694fb36f2ca19eba52be3d4ad895abcada4b36f0261d65f59e0cfd2a6148a8892ddbb45810db3bf4a9e26e92c15ea2618cfeeb462d8628f254f54d2af27113bab4f9a7d06791811942bdc32f845922d7b2ddba959140928f8c28d98b44e1d19b97fd39cc0f9a5236d349fc835ac492192462e40ac629bebffd2eba72d2788b244bb777ad0f7b7f96f23412399fc1d87a1d087ba089027eabbc05edafee43379e893291331b460bfa7332e0842ec2573393de95306\",\n        \"signed\": \"6f48a9f7f0fa192b66d12175a333612303e180b9fab18edabebcdf6674fdfcc53607089bf980ce35894c2f9babdc4438667ab3297a6248ec0269faa99c7248071d445e8ee36f6e1064ee1281e6b4a4cec50a91c2b667c8305d1e9a5f7b73a3445882581fb0c11e64f6ee92e811f9f2d6c59c6344be7691d116dda493cade51c0ce77372b61a7c4fbb633401333cbf71372ad2f044e992ac035f5879c053004f8223f237a24a409b7894f6ad518e046b8a84c3f4c6260e6169fd944d57fbcf9ba2775f2d60ed772c46ccd63c850b80d587c5208dfb1a25878c02dece3e602e9632fc3c2c79b25ab41034c6e26b869255357a686781dfe6e644beba9b627da1fcb5ec0be497cf188e1ef1af0601bf16b2911fd9ff34f0e97ac95a7fe2cf90ea6ced33ccb0ed1ef2d4160efb07c591a5cb16c70ca1694fb36f2ca19eba52be3d4ad895abcada4b36f0261d65f59e0cfd2a6148a8892ddbb45810db3bf4a9e26e92c15ea2618cfeeb462d8628f254f54d2af27113bab4f9a7d06791811942bdc32f845922d7b2ddba959140928f8c28d98b44e1d19b97fd39cc0f9a5236d349fc835ac492192462e40ac629bebffd2eba72d2788b244bb777ad0f7b7f96f23412399fc1d87a1d087ba089027eabbc05edafee43379e893291331b460bfa7332e0842ec2573393de95306\",\n        \"signature\": \"6f48a9f7f0fa192b66d12175a333612303e180b9fab18edabebcdf6674fdfcc53607089bf980ce35894c2f9babdc4438667ab3297a6248ec0269faa99c724807\"\n    },\n    {\n        \"secret_key\": \"782a93efe0ef06cb2534330efd0e9684e9969b5258123e490239bf24bf9f6523\",\n        \"public_key\": \"942fa1406ee2683e29377e49f7ba757cf50ef0723707d4403d2862257045de87\",\n        \"message\": \"46a4e319a670ac993994a53300c3f79144c2f7fec1116eeeb3621c76ac35da79dbff6e189ca9dbfc9abbda054847b2971b02facebbe926d469eb0a860389ac744162bf6fb13b42cb9bb8c9d72607138e7800121ee0cd633ed535c7ae5f4060bbdd271c9d110abff5e060ea6ee83890b1e92a9256d7b2ba982a3114bb6deffee2696f0a2f9c21aaa5b2defa11aab7076de6e57e86f284bb67f5a49ee685921032c95b74e7e3eac723f175af082c858e0dfa01728c38fbbb4c83581f81ace6c63c6bdaac5620eb9a568e7ebb7b72b3d1a164ef524e7b9f00799ab086715976c14d0df65f7b96bf9ebcda7feeef113422001a03a7633df5e49939a121db899d9b8ac2db4fad0c30cf0b8bdbc9e9802a797c8238e46511ff24068cadcff2448cc0bff92769223348d45d6b6f2c8f1593388c0bbbf44b6ddb50b98cd7f09c730f7de4d008156cb3cde0cab3ad0a58a83954e234a0a8a04b573c9a8e9b929ed38b8b228bf55a3c6e2c6b51f682652fbb708e74640e3313e17b4694d7fdf0111f90608c1b5af422dcdecad9ddb7f50d1bf5bc6378ccaffc3201e6c787b48c443ba240d9d50ff6c0e9df7f1a5b\",\n        \"signed\": \"93e7405a4044510166c8ac264ce3b5ba6665d68bad458712dc93c2c390568d7402ef7d57f549b8a1042f7f69a679aa855f34f801d57d79895deb8deadb35230846a4e319a670ac993994a53300c3f79144c2f7fec1116eeeb3621c76ac35da79dbff6e189ca9dbfc9abbda054847b2971b02facebbe926d469eb0a860389ac744162bf6fb13b42cb9bb8c9d72607138e7800121ee0cd633ed535c7ae5f4060bbdd271c9d110abff5e060ea6ee83890b1e92a9256d7b2ba982a3114bb6deffee2696f0a2f9c21aaa5b2defa11aab7076de6e57e86f284bb67f5a49ee685921032c95b74e7e3eac723f175af082c858e0dfa01728c38fbbb4c83581f81ace6c63c6bdaac5620eb9a568e7ebb7b72b3d1a164ef524e7b9f00799ab086715976c14d0df65f7b96bf9ebcda7feeef113422001a03a7633df5e49939a121db899d9b8ac2db4fad0c30cf0b8bdbc9e9802a797c8238e46511ff24068cadcff2448cc0bff92769223348d45d6b6f2c8f1593388c0bbbf44b6ddb50b98cd7f09c730f7de4d008156cb3cde0cab3ad0a58a83954e234a0a8a04b573c9a8e9b929ed38b8b228bf55a3c6e2c6b51f682652fbb708e74640e3313e17b4694d7fdf0111f90608c1b5af422dcdecad9ddb7f50d1bf5bc6378ccaffc3201e6c787b48c443ba240d9d50ff6c0e9df7f1a5b\",\n        \"signature\": \"93e7405a4044510166c8ac264ce3b5ba6665d68bad458712dc93c2c390568d7402ef7d57f549b8a1042f7f69a679aa855f34f801d57d79895deb8deadb352308\"\n    },\n    {\n        \"secret_key\": \"6fe7bcf7a684423de1076fd76da783423373b381329efd6157424ec4b2655a94\",\n        \"public_key\": \"7740e91afe45324f8bb990ca2a341279ddaf232c3bb415f178b6092fba195fec\",\n        \"message\": \"0baf0ad440612b4c5a136c3a42be1ca2b7c319862a44a9fd50c4ee73541c5e6457efa81825b6dd4a72194a2968688bd49e5a8f4c04dbafc2e7884c0c70c208d4e954cd1675da8e74c65c497cf9dc69424965bdcba5de52936f925f62e201f99505d3777beb3c2e08b2ec9a873e5a9c21fb4a2f3e861f3cf4d6b5dcd1c88bcd9163539ac62cd0659f4ef232c2ce57fc77f90285eb350169edc6a806ff50f61c7e0beeebecec63bfc9d3983f5bb4b261c746471fcbf2892c6108970b68db5e43c4504ddae2d0ffffa28b6759ae1128e16f66d492ad61e3722c960f88692be81a9f412890ffa346e702c867dfa259703b73f525074f3227c49cec1b645a103bd4471f33f9f1bac327d7917861d0ad91abee60222ea2a3c8cac052ae9a2cbd90855d733d5319133f9541bd0b61f0995268351e2863c1ca2ca51e3c976383f5c4c11ff410036fd51d5ac56b023ce9029c620f22557019ad9b4264ed4d71b434f4a4d17a7d5769fa1e14a69f7ae419ccf5947f8c7682697116c2405f5a1959c54b48f0872f596ed45964488ddec12bdb636d0b349e749eb66092ff4511fba59b5962cb93cc85515cc86ab0c6b2\",\n        \"signed\": \"9914cc50fef0935efb89b3d64e3c1c3412aed659b90166222c0d13ec1ce3a68ae6281b7efd9d4ec64b82e73e14479f03fbac8fa3abdb41ea4215c4a4d4949d090baf0ad440612b4c5a136c3a42be1ca2b7c319862a44a9fd50c4ee73541c5e6457efa81825b6dd4a72194a2968688bd49e5a8f4c04dbafc2e7884c0c70c208d4e954cd1675da8e74c65c497cf9dc69424965bdcba5de52936f925f62e201f99505d3777beb3c2e08b2ec9a873e5a9c21fb4a2f3e861f3cf4d6b5dcd1c88bcd9163539ac62cd0659f4ef232c2ce57fc77f90285eb350169edc6a806ff50f61c7e0beeebecec63bfc9d3983f5bb4b261c746471fcbf2892c6108970b68db5e43c4504ddae2d0ffffa28b6759ae1128e16f66d492ad61e3722c960f88692be81a9f412890ffa346e702c867dfa259703b73f525074f3227c49cec1b645a103bd4471f33f9f1bac327d7917861d0ad91abee60222ea2a3c8cac052ae9a2cbd90855d733d5319133f9541bd0b61f0995268351e2863c1ca2ca51e3c976383f5c4c11ff410036fd51d5ac56b023ce9029c620f22557019ad9b4264ed4d71b434f4a4d17a7d5769fa1e14a69f7ae419ccf5947f8c7682697116c2405f5a1959c54b48f0872f596ed45964488ddec12bdb636d0b349e749eb66092ff4511fba59b5962cb93cc85515cc86ab0c6b2\",\n        \"signature\": \"9914cc50fef0935efb89b3d64e3c1c3412aed659b90166222c0d13ec1ce3a68ae6281b7efd9d4ec64b82e73e14479f03fbac8fa3abdb41ea4215c4a4d4949d09\"\n    },\n    {\n        \"secret_key\": \"dda48a0d15a29eba9a76305d360e466e72d8040efe2e89c04b6461315a9b8bf4\",\n        \"public_key\": \"4f5cc36a809416b58e15d24cc57968cb573b76ad90887a8ef36cde7eca400fcc\",\n        \"message\": \"f5ac19b81f2111a0db0ae30d1513ed343e7f57f7f77d65b8ac7ce3a601174baed9bfa136035976f516d5a870f45db1919f1eb1cbecbe88ec32d191e9248821a7e7681fe3abec11584bdb33de1b4ca94891eb66dcb8539ac41163736ccfd69abb83814dd38cd60381318728052a25cb665471058650ccc75756dbee688ab826ecad4ad5a7db57e8f65f1b64abff82dd53334b797ac40228dd817f239d3ee804a19aeac8cfe33eb657ec9ce923d6b388914cfba2e72bfc2bc3d6f985c0d97534db958eede57b16491ffb755c1a58d78ab377faec0d311818e899260e3ebd1ccd29246fa82d0b76622b2c4bc52f549fee72a30f554f331f36d2a74d999ec10a08294f002b4361e590279c2fb1bda4312ccb24d75282ce7c061a0ca5520c74f6f6333b18c4b541cb6c51e01575ba80512ffa7ce0accd22d14027c53aba1f7437835f1114d68e3acf3ff8de94c8e4ef6d3ab312c91d02970157508f54a5816f467a214e9b1284300289e65f365a610a8ea284666cfe5518e435bccd21627501c725f0b8eb5725e0e06e0cef5db201b48ec91ebf878dd57ce8dac7334848a1bc82c18b065955e4f59be3398594dc\",\n        \"signed\": \"ce71bc82d531d0f93b57bfdc2f7316cf404ee09af88f33bf806c7cad6b8ffa366236ba74e75c15096ddaa6e3a62a8f5eb1c8c3f6b6c94a6a349fc7c0cbfb190df5ac19b81f2111a0db0ae30d1513ed343e7f57f7f77d65b8ac7ce3a601174baed9bfa136035976f516d5a870f45db1919f1eb1cbecbe88ec32d191e9248821a7e7681fe3abec11584bdb33de1b4ca94891eb66dcb8539ac41163736ccfd69abb83814dd38cd60381318728052a25cb665471058650ccc75756dbee688ab826ecad4ad5a7db57e8f65f1b64abff82dd53334b797ac40228dd817f239d3ee804a19aeac8cfe33eb657ec9ce923d6b388914cfba2e72bfc2bc3d6f985c0d97534db958eede57b16491ffb755c1a58d78ab377faec0d311818e899260e3ebd1ccd29246fa82d0b76622b2c4bc52f549fee72a30f554f331f36d2a74d999ec10a08294f002b4361e590279c2fb1bda4312ccb24d75282ce7c061a0ca5520c74f6f6333b18c4b541cb6c51e01575ba80512ffa7ce0accd22d14027c53aba1f7437835f1114d68e3acf3ff8de94c8e4ef6d3ab312c91d02970157508f54a5816f467a214e9b1284300289e65f365a610a8ea284666cfe5518e435bccd21627501c725f0b8eb5725e0e06e0cef5db201b48ec91ebf878dd57ce8dac7334848a1bc82c18b065955e4f59be3398594dc\",\n        \"signature\": \"ce71bc82d531d0f93b57bfdc2f7316cf404ee09af88f33bf806c7cad6b8ffa366236ba74e75c15096ddaa6e3a62a8f5eb1c8c3f6b6c94a6a349fc7c0cbfb190d\"\n    },\n    {\n        \"secret_key\": \"ec57b941adf3ca13e77a780577cfd0df5b49edc85351052da34e99f8a9bf3208\",\n        \"public_key\": \"2859c071978a04b7f5407b6d22401a78efd0394bb966b9a04da6b5ef819de3fa\",\n        \"message\": \"d2bcbd1bc361ab32c66d72fd48a8e227dc6b8d6b150848ba715ff47dd35c8e49381bb4e2933f42cd26b75b14d9c0039282b62b8556aaa11cd691e828382be306889fc9205137b169d3bf17b7f37693fce286039f03809d7d9d98c8fde46f1101942a279c516706f50191a9112f6a24630e1a26c321e46c9ccc85b6ef942f353a642b9e7ef998c0fce2d3a75b999eeb77f31f9b0813a97e3014c3a86e2558734621a3066dae35845031e35665f1922907dbb739786a8b7658ab60276f2d921d1a51230fc74d19e80184a4f10e9e834abc9a36c429726bc055dc8c063f0eca9c61a8a970bd4bb5f424ee4d04bfc295e3bb1f34becbd9920fe2e77fcf36763f32fc9cfd5e465979c167cabf5a1244b491fc06b8946419046ba516c5b233c414ddefb6da04f2e13daff7a9a0c02a518ede57ad9521de64eddf6f49a9670f632d3f7d42425207d053604fe39d13b9f52c8bc292b0076ea42a560056df25de51ad35881d08543224d7fa5d70b8603ef23ce06339d6cd09e22a95749e50dfbd3b8ad69fd30496b984d1c0a199c8594805f38ba44631a2c59eadc6554d19f9bc98366dfdec2a121d0e4814d2cd3f5871\",\n        \"signed\": \"118e1462126b45b8c6803523755c56dfc4e123e4acbb66ba0ba6fe3e053da4119f5719295e0c82ac64d7c5cb1ac898df263ddfd360f3008d91018b26f6a1730ad2bcbd1bc361ab32c66d72fd48a8e227dc6b8d6b150848ba715ff47dd35c8e49381bb4e2933f42cd26b75b14d9c0039282b62b8556aaa11cd691e828382be306889fc9205137b169d3bf17b7f37693fce286039f03809d7d9d98c8fde46f1101942a279c516706f50191a9112f6a24630e1a26c321e46c9ccc85b6ef942f353a642b9e7ef998c0fce2d3a75b999eeb77f31f9b0813a97e3014c3a86e2558734621a3066dae35845031e35665f1922907dbb739786a8b7658ab60276f2d921d1a51230fc74d19e80184a4f10e9e834abc9a36c429726bc055dc8c063f0eca9c61a8a970bd4bb5f424ee4d04bfc295e3bb1f34becbd9920fe2e77fcf36763f32fc9cfd5e465979c167cabf5a1244b491fc06b8946419046ba516c5b233c414ddefb6da04f2e13daff7a9a0c02a518ede57ad9521de64eddf6f49a9670f632d3f7d42425207d053604fe39d13b9f52c8bc292b0076ea42a560056df25de51ad35881d08543224d7fa5d70b8603ef23ce06339d6cd09e22a95749e50dfbd3b8ad69fd30496b984d1c0a199c8594805f38ba44631a2c59eadc6554d19f9bc98366dfdec2a121d0e4814d2cd3f5871\",\n        \"signature\": \"118e1462126b45b8c6803523755c56dfc4e123e4acbb66ba0ba6fe3e053da4119f5719295e0c82ac64d7c5cb1ac898df263ddfd360f3008d91018b26f6a1730a\"\n    },\n    {\n        \"secret_key\": \"cbfd91d7695c1f270f69246ab3df90edb21401101ca7f8f26c6d00f4dcb7233e\",\n        \"public_key\": \"513879cf79d2f46df4b85a5c0949eb2116abf981735a303164cbd85adf20b752\",\n        \"message\": \"264a933f7d0aecbac13eef644b0b53dd53a1280904100dbc1ab87b51148998f9da0b3a0a6337f5e3486c2b7e548d211259397aaa194ee4695bf98c2d5f4487699f7397e5d3a7e6d5f628fbd05497c556a50a4d05e2b712cdbc351068e42af19538901b8825310e343e1a17a1867dde0eb47ddab456d316f3521554937bf808ae4e4bc1c3c5b4756e4a165ad9e8827f5316f748cac6998ed2d2104f268407c135e62f26a922460eab6d851639a00e5f08b34765ea0244f475bbfeac183e3b5bd1aab798522798a08ec6bf2257d4692f5b03cdd0a2133de970603e3251475aad8d934af6b2bfc7a650b91bdec143f8ad254cfa506bbff28a03beb659ef5e5ddffe76e23230c4ccd46310b37dd91fa6aa68167f62a55c8a69f9ed1ec6cdb144dd81ab0bcbd62643420bcae67869f64c0b169f3cdf3c905895b7d35b6fafda25ccf23c3d10de32e7f271e300d39597da8f843722ef08364a5f7a105b9655172df7c82d7374f98264c9cdccb496f2e10fd8262fb1a9a9965b0b841ac0d0e9c1a3d9493ea7aa600205b8f900be0d7abb4d98a06583d2295c276318be28d421982dedd5bfc33b8865d94ef747d626af99\",\n        \"signed\": \"f336137dfe6f42a6669b55f74b80b3035a040367f90656fcef0a644c52272ddc39273cd7726010ebcd8a30a05201ab70b8ff97d0288a2cb94cbc49020647390b264a933f7d0aecbac13eef644b0b53dd53a1280904100dbc1ab87b51148998f9da0b3a0a6337f5e3486c2b7e548d211259397aaa194ee4695bf98c2d5f4487699f7397e5d3a7e6d5f628fbd05497c556a50a4d05e2b712cdbc351068e42af19538901b8825310e343e1a17a1867dde0eb47ddab456d316f3521554937bf808ae4e4bc1c3c5b4756e4a165ad9e8827f5316f748cac6998ed2d2104f268407c135e62f26a922460eab6d851639a00e5f08b34765ea0244f475bbfeac183e3b5bd1aab798522798a08ec6bf2257d4692f5b03cdd0a2133de970603e3251475aad8d934af6b2bfc7a650b91bdec143f8ad254cfa506bbff28a03beb659ef5e5ddffe76e23230c4ccd46310b37dd91fa6aa68167f62a55c8a69f9ed1ec6cdb144dd81ab0bcbd62643420bcae67869f64c0b169f3cdf3c905895b7d35b6fafda25ccf23c3d10de32e7f271e300d39597da8f843722ef08364a5f7a105b9655172df7c82d7374f98264c9cdccb496f2e10fd8262fb1a9a9965b0b841ac0d0e9c1a3d9493ea7aa600205b8f900be0d7abb4d98a06583d2295c276318be28d421982dedd5bfc33b8865d94ef747d626af99\",\n        \"signature\": \"f336137dfe6f42a6669b55f74b80b3035a040367f90656fcef0a644c52272ddc39273cd7726010ebcd8a30a05201ab70b8ff97d0288a2cb94cbc49020647390b\"\n    },\n    {\n        \"secret_key\": \"51a4197ab7686f82f6003a0c32f39d0f2e47555f4e9f8deee75bcb1bd1ef69e5\",\n        \"public_key\": \"06386df86b61f1f8f4dc45b73edaa841920968bbd131cc5ca1c5294eeed5c8ba\",\n        \"message\": \"2aedb7e82f1fe4ce469ada48345d006d1b3bff40eb21867f51fce965640c409ec13ad4d52f891bd79066d6b4d944ca868d8986d242b57eccc4c4a488291b159c8de4392be4b86febaa75eac5d22d3c4f8d6bef79adb9b92b4914d5ea07c7f021e2c29f58d07be8a084100bc152d51ca897d7c131644d0895322e9440a8339e1aa390a7f4fcb51ddfb6df48aaf5676337d87ddd85b1d925e1a9c29fe0818f514ef72f747a674946476907a7ca99e9db8d209641057a7f44a317b90974bc86f9617a968a76a6b8387cf5853e608190c1a79f1e1d686e0de22db6cd9aeb8532c5c85cc90b5a018579f28e502a770a4ec675263d0dd781b4fa53c9dbf8098d57b33ae2afbaeb3e68266ad9aab7174ba68c6479883992670ccf3e5ac6a17e65e31e1fdc85e269c80935ef574f20d239568486e7d94a4f724ab7006098b24f3f61587691435c7f29ce4e5ca71b2b1874556433a358c8c5ef3c880843030c2d13d51b78c9bf1a8824e62e111844396f5af2e25c3126ef3626e26efafacf99830aa41212332f378a167233a0b42213afe36d83dc4582a79693b9d571a57712a08b8566d361ac902647afc886603e24283efb\",\n        \"signed\": \"2c072969ff4719212a121938b506c602995b4d02a22e6198d6e87dd6ae076225ac70bb25ef8c0ee81eb6fe953df6b1815949e8ed0506cb012e873cd36cd09b0a2aedb7e82f1fe4ce469ada48345d006d1b3bff40eb21867f51fce965640c409ec13ad4d52f891bd79066d6b4d944ca868d8986d242b57eccc4c4a488291b159c8de4392be4b86febaa75eac5d22d3c4f8d6bef79adb9b92b4914d5ea07c7f021e2c29f58d07be8a084100bc152d51ca897d7c131644d0895322e9440a8339e1aa390a7f4fcb51ddfb6df48aaf5676337d87ddd85b1d925e1a9c29fe0818f514ef72f747a674946476907a7ca99e9db8d209641057a7f44a317b90974bc86f9617a968a76a6b8387cf5853e608190c1a79f1e1d686e0de22db6cd9aeb8532c5c85cc90b5a018579f28e502a770a4ec675263d0dd781b4fa53c9dbf8098d57b33ae2afbaeb3e68266ad9aab7174ba68c6479883992670ccf3e5ac6a17e65e31e1fdc85e269c80935ef574f20d239568486e7d94a4f724ab7006098b24f3f61587691435c7f29ce4e5ca71b2b1874556433a358c8c5ef3c880843030c2d13d51b78c9bf1a8824e62e111844396f5af2e25c3126ef3626e26efafacf99830aa41212332f378a167233a0b42213afe36d83dc4582a79693b9d571a57712a08b8566d361ac902647afc886603e24283efb\",\n        \"signature\": \"2c072969ff4719212a121938b506c602995b4d02a22e6198d6e87dd6ae076225ac70bb25ef8c0ee81eb6fe953df6b1815949e8ed0506cb012e873cd36cd09b0a\"\n    },\n    {\n        \"secret_key\": \"b1119c36118b7a065a195bfb8b79a5c287e09bd287c2daac5e6b01164c5d737f\",\n        \"public_key\": \"88f218ecba99e770ed214a8d01a92a10400acaf1f6eed420067e136ee2c0c670\",\n        \"message\": \"8816b1eb206d5f6dcc2e4cc391d23209006de935e318152e93fc8c2cf08e26432bad9adb3203d898df0a2e7f1f83dc2f3ed3205bec8efcfd31adc1aca5755db9bd4efe54cc17073077de4a3fdd11996e84b6a052f034b41099226c9c272eae12528f16581b91b812850c207144dbff3e850cca848ec2b1dd164744d7b59337d7e3efef008162e680bd4a0899ced60b171f8cbeb48c5158df6cbfdb26240881bd58ebb8b6a079587279679cb5ad82f371b53c8013804c35596c887e436d23926f994e09d98fbb8ce2704174ef38b68262a7f1a712da0ef0dec639606814b3bdcaf253ff31c48e8a752c111bd7101031cc3d38efb0c9c7f19c59081584a0e015ee7c75b10a4c51ff543a30e52d5f94d8188c6b08e9df1e84a4e2c807170ac124a771b99465a0d38b1f1c6330403c82543582c5bb61b220de1b9e0ef69bdae26023181ba4cc077a5f0d425732ace132ae0c6ff0bb18baea83e8877afbe650fe0bd02093f00a7b5365728dcb66fbb881f592945058a5b350665af91c557a547250ad295e68b4fb72457cfb9d5ea1a7b2a39c9ab7d7ace0af5d51669cb6c2c4c07b2256d10e5ffc6b97c660006313c4eb8d\",\n        \"signed\": \"24ec1e54fc7e722d37551d02cf135d33f5d3ff535773e02991ee85ffd3aa29997f9c464470197fee81dce110609f870b27c18dfbcfd9320548525e93148e22058816b1eb206d5f6dcc2e4cc391d23209006de935e318152e93fc8c2cf08e26432bad9adb3203d898df0a2e7f1f83dc2f3ed3205bec8efcfd31adc1aca5755db9bd4efe54cc17073077de4a3fdd11996e84b6a052f034b41099226c9c272eae12528f16581b91b812850c207144dbff3e850cca848ec2b1dd164744d7b59337d7e3efef008162e680bd4a0899ced60b171f8cbeb48c5158df6cbfdb26240881bd58ebb8b6a079587279679cb5ad82f371b53c8013804c35596c887e436d23926f994e09d98fbb8ce2704174ef38b68262a7f1a712da0ef0dec639606814b3bdcaf253ff31c48e8a752c111bd7101031cc3d38efb0c9c7f19c59081584a0e015ee7c75b10a4c51ff543a30e52d5f94d8188c6b08e9df1e84a4e2c807170ac124a771b99465a0d38b1f1c6330403c82543582c5bb61b220de1b9e0ef69bdae26023181ba4cc077a5f0d425732ace132ae0c6ff0bb18baea83e8877afbe650fe0bd02093f00a7b5365728dcb66fbb881f592945058a5b350665af91c557a547250ad295e68b4fb72457cfb9d5ea1a7b2a39c9ab7d7ace0af5d51669cb6c2c4c07b2256d10e5ffc6b97c660006313c4eb8d\",\n        \"signature\": \"24ec1e54fc7e722d37551d02cf135d33f5d3ff535773e02991ee85ffd3aa29997f9c464470197fee81dce110609f870b27c18dfbcfd9320548525e93148e2205\"\n    },\n    {\n        \"secret_key\": \"cbb587514e0a34ffc34cbc04f28c9b4f6465f1eb225cca19b864876daef37d7f\",\n        \"public_key\": \"6b705d4677d2d849b6744b1ebed167dbcbf645924b1ff2e6360794bdd0e09788\",\n        \"message\": \"bdf7d17c706796efd3489559b527b1c0584b9022c9cbda3aac5146da340d9cea69f916037cd21b3eb1104348880fd5c5b7c65ff820f7499346016951cb715d8df2b41c88cd3c66105458b7b590c21c1ae2f6ea9ddea7470f25e02027d171e0e574a2bb21642f8f9da508e21d8e7335b5ace5935299407bd1b01bdd1423133ef045234e701f55549434ade94a60be1e1406ca5c758c36799ce1703084476e484fb1740530aee84266d07adfb4cc689f3265133a59cdf992fbb9a4b12defbe241ddbf65d12b2fbddfc05af0fb8de42080775bad29c6b0459841cbb648a9a95e48d6e36ac514480a3deb4b36554d8da620808ae9d47329710d20aaa6e5d7f547d81ad30f84c0e3d239cde5b169d9ddf294832d67a8060ba329c4ef39be94ac46434dd2185931d1231f9b6df878a5af0831e0e9d8a08d08069ded6a961ef7f39fad501ffd17d6d9b7c654653c1f58fcee1a6cd803d2aef166c78ef5514a3276d6998dc7c09a3fa982e427c785aa6a9e256f7ba72d5a6ba33eb46f1f9fe9be2bfc14109f64773c00c063b4d5cb4f4f8a0beca92a9a016c4f540feea9c3a31e313bbcbc2ff5eca9967857f5f8a909a29d7f20d\",\n        \"signed\": \"1274d6f356eb641472b6b9e5b3ce65d2654e6cb87d3a83fb49d0f7da9c44be2b532604465f6089d680d2d94b0edd2b6b2b805c5e84c379efc059673d31007a09bdf7d17c706796efd3489559b527b1c0584b9022c9cbda3aac5146da340d9cea69f916037cd21b3eb1104348880fd5c5b7c65ff820f7499346016951cb715d8df2b41c88cd3c66105458b7b590c21c1ae2f6ea9ddea7470f25e02027d171e0e574a2bb21642f8f9da508e21d8e7335b5ace5935299407bd1b01bdd1423133ef045234e701f55549434ade94a60be1e1406ca5c758c36799ce1703084476e484fb1740530aee84266d07adfb4cc689f3265133a59cdf992fbb9a4b12defbe241ddbf65d12b2fbddfc05af0fb8de42080775bad29c6b0459841cbb648a9a95e48d6e36ac514480a3deb4b36554d8da620808ae9d47329710d20aaa6e5d7f547d81ad30f84c0e3d239cde5b169d9ddf294832d67a8060ba329c4ef39be94ac46434dd2185931d1231f9b6df878a5af0831e0e9d8a08d08069ded6a961ef7f39fad501ffd17d6d9b7c654653c1f58fcee1a6cd803d2aef166c78ef5514a3276d6998dc7c09a3fa982e427c785aa6a9e256f7ba72d5a6ba33eb46f1f9fe9be2bfc14109f64773c00c063b4d5cb4f4f8a0beca92a9a016c4f540feea9c3a31e313bbcbc2ff5eca9967857f5f8a909a29d7f20d\",\n        \"signature\": \"1274d6f356eb641472b6b9e5b3ce65d2654e6cb87d3a83fb49d0f7da9c44be2b532604465f6089d680d2d94b0edd2b6b2b805c5e84c379efc059673d31007a09\"\n    },\n    {\n        \"secret_key\": \"8bde3ff61a16995ab9d539f6053219081bcaea1d458ec33684fc1c01fb565bfa\",\n        \"public_key\": \"cd9d782a356e847b7a04c885a9b0907cc33ba97ad5390d4ea5fee5eb198d08b3\",\n        \"message\": \"a1f40ec5807e7a27069a43b1aebff583ef037028c02c859525eb8fa4c3ba95a901ff3aed78c4f87752fb795522f5bf715be7e3defac10fcf17e3fa5c54b20089a472333327252ec945718fb455e3f27ccfdef823d12d406e62a4aeba3cb9d1c61b2b17e49e200a8418f935f26eeb57602c7aa3b3a24f7e6238d3e08d2d609f2eada0332bc8cb12916cb03b0d4f9cd602002586d3e4cc7e0e0381c045ad2e1ee28298ae7fcf0c10f212808565296f158d2c32e8cb28156581af52bfc3470c3c9582138d2255e8426d648ca237d7aad2856f171638558241d8ae3f62ba92db596568edee3ec0ef370f83626aa0445af08f967863660e8fba5a41c8e8ede1c960514a14687a4a81e776ae0e8e777fb0f250d51a83b55f8c1ffdd78df3bdc97ff177afeca046c72d72af924ad0d0ab2bfc11b7f4abded51c3987a8bb94d640c8710e5fc9a4190e8a008363d7419cea17c40dea20ea5156029f3debf05241918f54af5039e2c4cf2ca2e139f60e45cc65595cdf54a67d92b6ac66fc0c5a290495ca57b07ef5750d05f57d87d0c228f7e4e15ad0ba0178730f951c697583481c66cbfcd48032544aa8d50908304bd81940308706\",\n        \"signed\": \"7464df0b67eb90b4b73ff082ad0d60ebfe0660dae97069b52c3727223bf70e29e48711a2bbb438f5f8d8a33bb9c48fe7b628fa8a542ff0b5ae36269d4007a505a1f40ec5807e7a27069a43b1aebff583ef037028c02c859525eb8fa4c3ba95a901ff3aed78c4f87752fb795522f5bf715be7e3defac10fcf17e3fa5c54b20089a472333327252ec945718fb455e3f27ccfdef823d12d406e62a4aeba3cb9d1c61b2b17e49e200a8418f935f26eeb57602c7aa3b3a24f7e6238d3e08d2d609f2eada0332bc8cb12916cb03b0d4f9cd602002586d3e4cc7e0e0381c045ad2e1ee28298ae7fcf0c10f212808565296f158d2c32e8cb28156581af52bfc3470c3c9582138d2255e8426d648ca237d7aad2856f171638558241d8ae3f62ba92db596568edee3ec0ef370f83626aa0445af08f967863660e8fba5a41c8e8ede1c960514a14687a4a81e776ae0e8e777fb0f250d51a83b55f8c1ffdd78df3bdc97ff177afeca046c72d72af924ad0d0ab2bfc11b7f4abded51c3987a8bb94d640c8710e5fc9a4190e8a008363d7419cea17c40dea20ea5156029f3debf05241918f54af5039e2c4cf2ca2e139f60e45cc65595cdf54a67d92b6ac66fc0c5a290495ca57b07ef5750d05f57d87d0c228f7e4e15ad0ba0178730f951c697583481c66cbfcd48032544aa8d50908304bd81940308706\",\n        \"signature\": \"7464df0b67eb90b4b73ff082ad0d60ebfe0660dae97069b52c3727223bf70e29e48711a2bbb438f5f8d8a33bb9c48fe7b628fa8a542ff0b5ae36269d4007a505\"\n    },\n    {\n        \"secret_key\": \"da59bbc523404f07646add7908294977e46645bc8a38bad2809641a23de3b15a\",\n        \"public_key\": \"b22c0f21aa1c2d45f4b2e56cc9b5e02f9e31a2eaa367ecb482f874cbd8e9fe34\",\n        \"message\": \"097106c3624d774dde2551e0c27e19504e6518cc86369ab26ff810969e7de24abc68b4b53f11d945d49ef078eb4f6ba6bf257ff7b608afdcb30a5c59a756fd77a6c1247f6f2a41100d99fc5206af3bcc6de1d3e4968e28fba0123f6045a1b54d693a42bdfa071b2b914b3c3c0c29b2593d07e8bdc86ca42ac555b7dcd9439df9fbd4bbec730d6327bfae4fc41ed498b4f04a0eb14cee608283aaa6e6aa46676bc88aed5d9939037aad4915661af94bb5f6e653a2cac123287073270e0b13fda1dd4871af6a92f992f539df881712fefb038540d41191123b6b3b4b6ff87ffc929a6be53c6cef02f48f2f0cf2fe64a45fd66025cc2d7ee55ebe2316c000855661165e2a5ba41afc2097957b6fe4c55221204b6fc1f317dd3ba13cac39924026bdb66be4542268875631d277f210107a33767f6d9596e25742d7a90ea791ea4bc9ee84a67fd328b80f791ede96d89663e937f0b755baa9d52bda210cee1db339ff1d3c4b000b653b9bde338049af84364e2177f80dd51e2a1672ee555d6317589f6f1d5abe6c2877358bf94b0b808ff857363fbfbe32e97337e4b8a8c221a9e75962a8dc9b5a3d7ca5f9c9b61c73c1469a72bd\",\n        \"signed\": \"1472459cbbae2cf21ce44a15bae9fc85dca40b8182da7d52cbf56ed538d18e03477c140a3ddd0efba43c96aa92f5f9bcdf3481286ce762a7e2bd1e779ba99b0d097106c3624d774dde2551e0c27e19504e6518cc86369ab26ff810969e7de24abc68b4b53f11d945d49ef078eb4f6ba6bf257ff7b608afdcb30a5c59a756fd77a6c1247f6f2a41100d99fc5206af3bcc6de1d3e4968e28fba0123f6045a1b54d693a42bdfa071b2b914b3c3c0c29b2593d07e8bdc86ca42ac555b7dcd9439df9fbd4bbec730d6327bfae4fc41ed498b4f04a0eb14cee608283aaa6e6aa46676bc88aed5d9939037aad4915661af94bb5f6e653a2cac123287073270e0b13fda1dd4871af6a92f992f539df881712fefb038540d41191123b6b3b4b6ff87ffc929a6be53c6cef02f48f2f0cf2fe64a45fd66025cc2d7ee55ebe2316c000855661165e2a5ba41afc2097957b6fe4c55221204b6fc1f317dd3ba13cac39924026bdb66be4542268875631d277f210107a33767f6d9596e25742d7a90ea791ea4bc9ee84a67fd328b80f791ede96d89663e937f0b755baa9d52bda210cee1db339ff1d3c4b000b653b9bde338049af84364e2177f80dd51e2a1672ee555d6317589f6f1d5abe6c2877358bf94b0b808ff857363fbfbe32e97337e4b8a8c221a9e75962a8dc9b5a3d7ca5f9c9b61c73c1469a72bd\",\n        \"signature\": \"1472459cbbae2cf21ce44a15bae9fc85dca40b8182da7d52cbf56ed538d18e03477c140a3ddd0efba43c96aa92f5f9bcdf3481286ce762a7e2bd1e779ba99b0d\"\n    },\n    {\n        \"secret_key\": \"40ea82da41fd15b06ffeb99cd616dc6bc8c1b21477ea239466088e2849bf1016\",\n        \"public_key\": \"5910e580bf412c31a87451d9ddf32b3ab713f9e4a22c590c641c14a5dfbbe0d7\",\n        \"message\": \"a06c4e02b83ab7e191ad818cb8187b52a8da004fe838db333c4e02548db6bdf791444642e57fdbc8594e59d7023280bbae82986f399805434bb072c8a27a2dcd5aa62f065bc58b0621fcd365f6cdbf4d57d577d91150301fa48f182f87e8dca7ce45a7d64845ff434d1bab0534ccc83aa0974e88b38fc2508cefcbbc82135b73b384c80eccb8a09e2873cc07129021d81ce129a9df65e613410af950197dbf9afc28edc4e65c3e84da40d2ef841b886bc44719a5d59db2c6dc776401c895e2b3c83783d7817bba68baff59470d6015bba8d975f0eb712f3b8902912805523aa71c90499de689d31ae44e210b8446f2484727cc491b92a8e8b199d628e1df79a28c561e5a7d882e30787d08fb2d5196ba61196309b3bf0c5824a3548c700003fe9913befe12223150012685e90720e9ec6bc4db607425aec531c4fa36086d3b9be391a3f04635a8077a447a16a6fd89afbb9a72d0d355cb0b22d562f43f59d4e37128b3e2d906c8ae23d0aa599c70d3778a076c1a39728f1d6937bd48b978740850566138d34852b63075e89a8e2280edba6f4ee8f61511e9b768e95c78d197b693b109e88818b486a9dfdb74b4c5550acdfbd5\",\n        \"signed\": \"d298fcc9a8ecb76a98d4a71dfb01d276ab2d9670a95bab34cf1d8364516d1ebdb23903460215307125afd09c758e981a452da95c0ac2c0b958c6917e6874190da06c4e02b83ab7e191ad818cb8187b52a8da004fe838db333c4e02548db6bdf791444642e57fdbc8594e59d7023280bbae82986f399805434bb072c8a27a2dcd5aa62f065bc58b0621fcd365f6cdbf4d57d577d91150301fa48f182f87e8dca7ce45a7d64845ff434d1bab0534ccc83aa0974e88b38fc2508cefcbbc82135b73b384c80eccb8a09e2873cc07129021d81ce129a9df65e613410af950197dbf9afc28edc4e65c3e84da40d2ef841b886bc44719a5d59db2c6dc776401c895e2b3c83783d7817bba68baff59470d6015bba8d975f0eb712f3b8902912805523aa71c90499de689d31ae44e210b8446f2484727cc491b92a8e8b199d628e1df79a28c561e5a7d882e30787d08fb2d5196ba61196309b3bf0c5824a3548c700003fe9913befe12223150012685e90720e9ec6bc4db607425aec531c4fa36086d3b9be391a3f04635a8077a447a16a6fd89afbb9a72d0d355cb0b22d562f43f59d4e37128b3e2d906c8ae23d0aa599c70d3778a076c1a39728f1d6937bd48b978740850566138d34852b63075e89a8e2280edba6f4ee8f61511e9b768e95c78d197b693b109e88818b486a9dfdb74b4c5550acdfbd5\",\n        \"signature\": \"d298fcc9a8ecb76a98d4a71dfb01d276ab2d9670a95bab34cf1d8364516d1ebdb23903460215307125afd09c758e981a452da95c0ac2c0b958c6917e6874190d\"\n    },\n    {\n        \"secret_key\": \"28bb81a17d4584754d52818cd0f1f21baa777e695844a15122ac05344dddc027\",\n        \"public_key\": \"d5f61d519944d13b84bfa7cd67cb0bea4ef2281efa461f22ade4ba882d11b252\",\n        \"message\": \"92e84c7a55b0bea03e17cfb65f7085ce3f445b1542bae997de5f092a24ff243380286d137091a598f35e6dae1a1c648f5a494c819dfb240652ff908381f32d70bc513100aca16fe7220295b1c71835f16d9310a9d27a04a980ace297d5af3f7cb7c78b24997ccb41f54ecbab507eb73ea6a3ed470e49590509f5d1e6032a2605db87f4a9b9ec91602583f14e2fe1bdb900ecb8971196b55c0d433489f26be9ca157cbd56572887ba859f39674a8e0ca08f2dbb0f27073551d0b1990685178b1ae9e7885499143d9d72c8571d11e0d85bf58df94e2a74d9b6846557f9125ca0944ce5718d2cbae1672ba02b847c17a6f6b445634d2f0175a75cf6883c62e5b521c57141f218b2fb0994b372a716c4a217434beab75740b8e91c622187d03c85da001e00247312a465225f5d6af232064a427d3018700ded774b9026777a5275fc04754606c86600297bf7b71aaff8b9a746677a3662f3750e81b50166f6237000051ffa15868defdf090057722ae229964a4ea085e0dbc04ce1997722c5bb65d2b47ecb746fd83a9f6a69c81545a9b502f5e76d3130c5afcb1c9af99d918740837ce89d7cd213fef2fd062ce8850f69659e4ad327\",\n        \"signed\": \"9ce45a07dbd28d3f6f1b35630a3fd56f1d548f84ffb1c6ae64b21498ae38e596916e77f79905e609fb1ae0da36138a80f242122167068092cc605796c5669e0692e84c7a55b0bea03e17cfb65f7085ce3f445b1542bae997de5f092a24ff243380286d137091a598f35e6dae1a1c648f5a494c819dfb240652ff908381f32d70bc513100aca16fe7220295b1c71835f16d9310a9d27a04a980ace297d5af3f7cb7c78b24997ccb41f54ecbab507eb73ea6a3ed470e49590509f5d1e6032a2605db87f4a9b9ec91602583f14e2fe1bdb900ecb8971196b55c0d433489f26be9ca157cbd56572887ba859f39674a8e0ca08f2dbb0f27073551d0b1990685178b1ae9e7885499143d9d72c8571d11e0d85bf58df94e2a74d9b6846557f9125ca0944ce5718d2cbae1672ba02b847c17a6f6b445634d2f0175a75cf6883c62e5b521c57141f218b2fb0994b372a716c4a217434beab75740b8e91c622187d03c85da001e00247312a465225f5d6af232064a427d3018700ded774b9026777a5275fc04754606c86600297bf7b71aaff8b9a746677a3662f3750e81b50166f6237000051ffa15868defdf090057722ae229964a4ea085e0dbc04ce1997722c5bb65d2b47ecb746fd83a9f6a69c81545a9b502f5e76d3130c5afcb1c9af99d918740837ce89d7cd213fef2fd062ce8850f69659e4ad327\",\n        \"signature\": \"9ce45a07dbd28d3f6f1b35630a3fd56f1d548f84ffb1c6ae64b21498ae38e596916e77f79905e609fb1ae0da36138a80f242122167068092cc605796c5669e06\"\n    },\n    {\n        \"secret_key\": \"24bfd4fc45d5093585678101cf563ab8011fd6430de155f2a425f0633ee3b7cd\",\n        \"public_key\": \"9cf5c5fc0ccfaeb28a08ba67707b18dc84ea0698ffbdbc169a09c28123e6c2ac\",\n        \"message\": \"ba54128f45be2001dbb060d5dcc47144997415d4294f6eba8dceba4f6cf2234683c4265f88032205296e9b27d68506232d57b688407648f87ceb342052bde9d0065542ff1715c942027e67482af4bc278ff71966fb3f62a2a5323cb1b4bae1e7b8fedcbc73ea05b4076421b0b4fae8bc3337416a17fe124e7ee465ebb38d8792306429d8279a1bd54c37bee8f9c85eebe3afd1f64489d4e53ac5f50657bb6ffb97120744b75d47c6226d5a9c9c264ee3e6a6ded05062ca1006669118454550010919c2633cf086950345e514af3843148e5c64352e69037dfe60d4a8eab3eb8cb54bd39af2f353d5ded2e2bc8b11c09f612e128c6efa41f6eb2c958087be34c6335a43005d11a9d3b5a529c2d1b0642f77afdd8c6b1d6fb2a9dcb65f42f4eca8ea9a054058be8613667610e3eed8d1df0739eca171954117989d1b12189ab57904aa960b0ca85541746385efa985be9d97b5a9029989a9c71498dfabdb813681f57e276b64db491b8f082a885145469a531b7f9f04ca0a2c2f8dff20ccb99c2861f54e5eafa962cc53eaf18d3d5e50d337af485f19975f05930700a8a7253f11f184130d0aee70969d96fe08f216951d9dced52388\",\n        \"signed\": \"dc935b60fde44359af8f50ed7f919f483ce3f24e2320c55ba92f3e7617c19bfb54701903ff183b42cbedfef0875f42b12875d36a0aeec73ffd09509d92b28b0dba54128f45be2001dbb060d5dcc47144997415d4294f6eba8dceba4f6cf2234683c4265f88032205296e9b27d68506232d57b688407648f87ceb342052bde9d0065542ff1715c942027e67482af4bc278ff71966fb3f62a2a5323cb1b4bae1e7b8fedcbc73ea05b4076421b0b4fae8bc3337416a17fe124e7ee465ebb38d8792306429d8279a1bd54c37bee8f9c85eebe3afd1f64489d4e53ac5f50657bb6ffb97120744b75d47c6226d5a9c9c264ee3e6a6ded05062ca1006669118454550010919c2633cf086950345e514af3843148e5c64352e69037dfe60d4a8eab3eb8cb54bd39af2f353d5ded2e2bc8b11c09f612e128c6efa41f6eb2c958087be34c6335a43005d11a9d3b5a529c2d1b0642f77afdd8c6b1d6fb2a9dcb65f42f4eca8ea9a054058be8613667610e3eed8d1df0739eca171954117989d1b12189ab57904aa960b0ca85541746385efa985be9d97b5a9029989a9c71498dfabdb813681f57e276b64db491b8f082a885145469a531b7f9f04ca0a2c2f8dff20ccb99c2861f54e5eafa962cc53eaf18d3d5e50d337af485f19975f05930700a8a7253f11f184130d0aee70969d96fe08f216951d9dced52388\",\n        \"signature\": \"dc935b60fde44359af8f50ed7f919f483ce3f24e2320c55ba92f3e7617c19bfb54701903ff183b42cbedfef0875f42b12875d36a0aeec73ffd09509d92b28b0d\"\n    },\n    {\n        \"secret_key\": \"2fc2f9b2050ad7d139273e93e2a0451c7b5cce57599aa6b08d3edc5bb07590c8\",\n        \"public_key\": \"ffe5a17880d718cc7988c2fd9825b03b93450ac1deb8fbd1f1bf3b8f87805954\",\n        \"message\": \"dc1297990cc027d56d1fee265c09bcf207a9583e6bab8d32478228e0bc305b9818154c338ceec34b04c4ade7ac61dcb09bfac8ade00d1f29de317060b8a4daf1987de409ca2c3fe4380088073ccf485e9a69516b5bbb4130f20be69b2dd6a9b465159cca1ac88b328b80c51b66af7f4c50f6228772f28734693ce4805a4163dff14b4d039811ee3fce65935444a6ea9a72d78b915c9c3b766c60b7e0329e43c9c57ede94b91525ce5a075a7297219772ef3c029649b586a95a73bbdf16d8fc20368de4ba44de1064be5826b376be31a86ca478a52efb98f1fa333157719bd6e0da80ed68d0efeafee5a13bcc3b457525258f1f7e031f7b403a461506927b1e6c7d4a0c8d84b5f3dd0eb8bdb13edc2b514a81d088eb077a52c8a831861feee8110e41a325dce206b2d67d25f90ef57e0fde709f3e5a39c04eed31e57c193b283e2da7279ee3f1eed482b3bbcd373902c1df811ac33e1de06429e8f8443f602019650bdc2ee8d7f650036a7a22b8fd88517511229c729a3269b3a3e8fc72b01b5a4b3e33f5272f3ad21629d08b1f717935e9e104add2f0f2033432bec82e2121d98c9c1a58e0daba25536a1be8e5088347f4a14e48d8e3\",\n        \"signed\": \"7aff162a3c0d28dff41715a974af07ecac2132fc18bc43a198fe664659050da19ae22758d52c9cbb94f1358bb02610a8a351c2116279e7245adf69675dfd360adc1297990cc027d56d1fee265c09bcf207a9583e6bab8d32478228e0bc305b9818154c338ceec34b04c4ade7ac61dcb09bfac8ade00d1f29de317060b8a4daf1987de409ca2c3fe4380088073ccf485e9a69516b5bbb4130f20be69b2dd6a9b465159cca1ac88b328b80c51b66af7f4c50f6228772f28734693ce4805a4163dff14b4d039811ee3fce65935444a6ea9a72d78b915c9c3b766c60b7e0329e43c9c57ede94b91525ce5a075a7297219772ef3c029649b586a95a73bbdf16d8fc20368de4ba44de1064be5826b376be31a86ca478a52efb98f1fa333157719bd6e0da80ed68d0efeafee5a13bcc3b457525258f1f7e031f7b403a461506927b1e6c7d4a0c8d84b5f3dd0eb8bdb13edc2b514a81d088eb077a52c8a831861feee8110e41a325dce206b2d67d25f90ef57e0fde709f3e5a39c04eed31e57c193b283e2da7279ee3f1eed482b3bbcd373902c1df811ac33e1de06429e8f8443f602019650bdc2ee8d7f650036a7a22b8fd88517511229c729a3269b3a3e8fc72b01b5a4b3e33f5272f3ad21629d08b1f717935e9e104add2f0f2033432bec82e2121d98c9c1a58e0daba25536a1be8e5088347f4a14e48d8e3\",\n        \"signature\": \"7aff162a3c0d28dff41715a974af07ecac2132fc18bc43a198fe664659050da19ae22758d52c9cbb94f1358bb02610a8a351c2116279e7245adf69675dfd360a\"\n    },\n    {\n        \"secret_key\": \"8afe33a0c08aa3487a97df9f01f05b23277df0bb7e4ce39522aec3d17816e467\",\n        \"public_key\": \"d004370e6edc34b3e8818667216f5b226b0ff75a58484c8616e1a866444cab57\",\n        \"message\": \"86fb741f1b9708929195031aa1645fb709a8ae323fff85e5470194452e11b7b1279194b5e2427ce23e1d749c3ddf910b017e4f2dff86dbe482c91bd994e8493f2e6824bba3bc7d7a845f217ae9760b3cd00226d9ff2616d452751a90c3d0d3c36d4ab4b2520f67288171bd3a34b2eacae8d44c1e153dda1f90bcd3595dad37713b8d340156ea90a4e135951ba7169ac175578b81e97a541ab9bfb76328798d7d631c14df2ad613e9c6e1147a0e84062ddba035859d46bade5fadd9b32b43dad483c6b8023b32391e51ef1520c68c6191326c494423080c623dc4ad0aa074748d826c29644c38986a77002f0cab9068e6c9ec73cc2e0c584b80e0bc375721f7a8fc35317a5e240e8c66092fb6305b012c70e17aeaff13386d5e28d06430ca585b0c85b274e7fcbb63e3423a982579e5a64a0262c41908e55dbe43dac1e5cc1bb7298be428720a12e3b072559ec2675d457aaf8f13252e28aad63c1513f5f239564d363c8505ffa4e50f6648c1cb82bba852bff0acb030cbe73f059dd87bbd7318c5586e708618a4f4c9f3bec3f4f07c609eebb24ba878c6bf1e4f2d0fd1450ab94e31755217786fb15182760ffbe5a267cbe998a4ff90a2\",\n        \"signed\": \"63a8aeac025f2dde9a73286e56c2d62dcb79a241ba0b2e2dbaca8752ed2fc8cc7ab8e6600b67645fb5e818a4e82c29180a6b2c3f58d099cb635ce52bdc15700486fb741f1b9708929195031aa1645fb709a8ae323fff85e5470194452e11b7b1279194b5e2427ce23e1d749c3ddf910b017e4f2dff86dbe482c91bd994e8493f2e6824bba3bc7d7a845f217ae9760b3cd00226d9ff2616d452751a90c3d0d3c36d4ab4b2520f67288171bd3a34b2eacae8d44c1e153dda1f90bcd3595dad37713b8d340156ea90a4e135951ba7169ac175578b81e97a541ab9bfb76328798d7d631c14df2ad613e9c6e1147a0e84062ddba035859d46bade5fadd9b32b43dad483c6b8023b32391e51ef1520c68c6191326c494423080c623dc4ad0aa074748d826c29644c38986a77002f0cab9068e6c9ec73cc2e0c584b80e0bc375721f7a8fc35317a5e240e8c66092fb6305b012c70e17aeaff13386d5e28d06430ca585b0c85b274e7fcbb63e3423a982579e5a64a0262c41908e55dbe43dac1e5cc1bb7298be428720a12e3b072559ec2675d457aaf8f13252e28aad63c1513f5f239564d363c8505ffa4e50f6648c1cb82bba852bff0acb030cbe73f059dd87bbd7318c5586e708618a4f4c9f3bec3f4f07c609eebb24ba878c6bf1e4f2d0fd1450ab94e31755217786fb15182760ffbe5a267cbe998a4ff90a2\",\n        \"signature\": \"63a8aeac025f2dde9a73286e56c2d62dcb79a241ba0b2e2dbaca8752ed2fc8cc7ab8e6600b67645fb5e818a4e82c29180a6b2c3f58d099cb635ce52bdc157004\"\n    },\n    {\n        \"secret_key\": \"6dc7ccf329378e8131b6defcd89370301068946336b0b762ac5ea51487dbd39e\",\n        \"public_key\": \"04e90d275e79df5f2b6ef4a31505aac05a69459baf2c581b3ce3db29f0f1fc14\",\n        \"message\": \"20cebbe98401ac8934c3e65a5738cb0ec0cdc75fdb09dc96312894b187c0a46d2c38f4855be3eeccdcdcc56d926a8c08ce6e748e2a858f53532e7e5fc5f7014c8c6f86310cc26efef30ae525a5157940ab535ed8e403112b08e35e2bb3dd91a9ae8f772d2aff37d8c40d2b5cc887a6f15050a0f5bcf0360c3a9d12d5918655edc3c13c86ba6f4a2fa3bfcd405ed38f871cf7dff0f75daf2c321084ee9fa81211adb105b25c2288f0f2f7f93ef656b2de190122e7a4bfd4a1bd9893a8485b509ff0bc46cc961051c1db5a12490c7e741922ccc0a665496470276f69c7b77098c1e670af6b9f851252996875eb8035a817fa9be07f2be0bbb12025e0565414c817e9421ac700373893862f24cb165f9a271a64fd2305c6672c46767f8f075be5d2d4079bfadc3956288b0215605311b5bf32f0037b7c5ad502013e82ae3419d9d8f39c545b5888f47106c94d5fd6084d26034a99f5dcbf26a84eb4ee149c62a0410d8c707b1a9b071f74ed23932585072ce6cbd33d4d54ee917916f5dfc64d26a498018438b455739345dd60ae0f4750625915cc829ab6822d6f05f6d2bda0a7bf5601e9a2ed6de960371d17e6f43709c9678ca743adfbdb45\",\n        \"signed\": \"04509db003a1a6ed3fbcec21ac44ec10cc06d79f2714960882170316275df80423a1c1a112d881fc24d2812526079058aa8b608bfc6b5e57632240c636d6eb0020cebbe98401ac8934c3e65a5738cb0ec0cdc75fdb09dc96312894b187c0a46d2c38f4855be3eeccdcdcc56d926a8c08ce6e748e2a858f53532e7e5fc5f7014c8c6f86310cc26efef30ae525a5157940ab535ed8e403112b08e35e2bb3dd91a9ae8f772d2aff37d8c40d2b5cc887a6f15050a0f5bcf0360c3a9d12d5918655edc3c13c86ba6f4a2fa3bfcd405ed38f871cf7dff0f75daf2c321084ee9fa81211adb105b25c2288f0f2f7f93ef656b2de190122e7a4bfd4a1bd9893a8485b509ff0bc46cc961051c1db5a12490c7e741922ccc0a665496470276f69c7b77098c1e670af6b9f851252996875eb8035a817fa9be07f2be0bbb12025e0565414c817e9421ac700373893862f24cb165f9a271a64fd2305c6672c46767f8f075be5d2d4079bfadc3956288b0215605311b5bf32f0037b7c5ad502013e82ae3419d9d8f39c545b5888f47106c94d5fd6084d26034a99f5dcbf26a84eb4ee149c62a0410d8c707b1a9b071f74ed23932585072ce6cbd33d4d54ee917916f5dfc64d26a498018438b455739345dd60ae0f4750625915cc829ab6822d6f05f6d2bda0a7bf5601e9a2ed6de960371d17e6f43709c9678ca743adfbdb45\",\n        \"signature\": \"04509db003a1a6ed3fbcec21ac44ec10cc06d79f2714960882170316275df80423a1c1a112d881fc24d2812526079058aa8b608bfc6b5e57632240c636d6eb00\"\n    },\n    {\n        \"secret_key\": \"ccae07d2a021fe3e6ee23836a711b97b04e0a441f169607572731cb08c269488\",\n        \"public_key\": \"a32265e5328a4f49cf06b467a98b9f9d5b997b85dfb7523ca6a0a1d627d32891\",\n        \"message\": \"a4bf8297d0dc5e4c92bd00ad5b9c09b1238b503d619116ef74260378349a9282b41f3f4676a6215e3ce6d02238480a96043b2942b3feed12620b1fa97f7703b3eb683c1601bd2f51825c450df4fd1f33b0bf9c23c03223789e06e24cf136d3b557403a66981f4b777dcfe890d2ba96da4a4742aeeddd6a611d05fc215694a5d89a5de6760b1d9415155044c049cb02291a1514faa2e77d2ae33d44585bdac6365bf481d9c97833937eab636ed65742a0d5973b24d54089b2daf084d5414765105e4eca14aaadd1053338a8470505232e4ac633345c5cdee1e4653d1d93583af11854b1d9b65fc20281838c56df1148f35ccf9bfe2f3f80ab73f5b791cbed2d920644cf0316f0cb5d3662b9120647da56afbeb47a952953bc1a37de857e4b39fd92b632b85159f46cd05b6abc2338d4632d48e9a178860de8f65d9bc23f24507b7c5629e0bdaac067c476c9c3941d86f788944d744852a61da716f95f3b04f0783a562941bcdda439590fd186b2a8ebf19a5a7e4f4a3aaab7a87a434524fbc9799c9931eb8ce4e34e99b608cac94ab7e74495668df136185f487d9fbcb6605ad725345403ec57f3f6db364a87f38fea4b4c271552e9f2e4a1be\",\n        \"signed\": \"0eec754105447f97d4a9cd246c7eede3fd069018f0d01a41dfabca3e90a741835ea4a9d682342267b250fc1c8c547c89632d9f689af536c7929004ded0d96f09a4bf8297d0dc5e4c92bd00ad5b9c09b1238b503d619116ef74260378349a9282b41f3f4676a6215e3ce6d02238480a96043b2942b3feed12620b1fa97f7703b3eb683c1601bd2f51825c450df4fd1f33b0bf9c23c03223789e06e24cf136d3b557403a66981f4b777dcfe890d2ba96da4a4742aeeddd6a611d05fc215694a5d89a5de6760b1d9415155044c049cb02291a1514faa2e77d2ae33d44585bdac6365bf481d9c97833937eab636ed65742a0d5973b24d54089b2daf084d5414765105e4eca14aaadd1053338a8470505232e4ac633345c5cdee1e4653d1d93583af11854b1d9b65fc20281838c56df1148f35ccf9bfe2f3f80ab73f5b791cbed2d920644cf0316f0cb5d3662b9120647da56afbeb47a952953bc1a37de857e4b39fd92b632b85159f46cd05b6abc2338d4632d48e9a178860de8f65d9bc23f24507b7c5629e0bdaac067c476c9c3941d86f788944d744852a61da716f95f3b04f0783a562941bcdda439590fd186b2a8ebf19a5a7e4f4a3aaab7a87a434524fbc9799c9931eb8ce4e34e99b608cac94ab7e74495668df136185f487d9fbcb6605ad725345403ec57f3f6db364a87f38fea4b4c271552e9f2e4a1be\",\n        \"signature\": \"0eec754105447f97d4a9cd246c7eede3fd069018f0d01a41dfabca3e90a741835ea4a9d682342267b250fc1c8c547c89632d9f689af536c7929004ded0d96f09\"\n    },\n    {\n        \"secret_key\": \"db5d5f41fddd6768709747ab8239bb4f42a31d34b4fa88824d94bf78d3149264\",\n        \"public_key\": \"03858ce6b2d24079eead66ca0dfe772ecda9af4d46bc9b5edfdc286b95fe9716\",\n        \"message\": \"67ee03de45c3e7030db5246ee5b51bf298bba3e4d0934937fc12d9a629604c53c070e30d611999a9cddaf2d9acda6a9f67202b352369d48260eebce0e78e4d5ae54f677521f84a7be0017fab278b2b57275efc5fa57c617186fc1ba49edfbd3308634878d864f2da1583ca8d56ce9fae77c462039abc32d0539c0a60b7bbba5029e9329d275683d9c4ce77d0b908ade98b0e32b4420d9aee2cc10e4be922f9572582dd8967141c1d402e215f20aee0a890e2368e406dea11bd11177f2e038aa2f1a0dff51a128d955d5e5f8d5d0009aaa82440a96864d6c697f910d1df230f467f0e02a2e02bf9e45da95f255410cc5aab8d85f449a5de99aabd44fd763ec14629f3dbab1a247bffb7174648e43b9fb1eb0df5e4109b7a88e05512b20865bad39f9ea79d52f5188e7ca5194405bfb1a09727617f3f6c88192008edbc0c6585dbf261f149dffb593d42716e5a5777f5462beeb1e9a56a2c76e6cb735117cc1183a38d1e00b303d174aa9cf5c731b2c70edd79cc5dc96f4018f1d71d7198bbb7d134cd2ff8c15f9a04280db26a8fa9997eb86b133c022eda15d8ad5e77cc9f62615960bac2f9bbc3ebbd198f72c572b97156fa7fa229a98014e170\",\n        \"signed\": \"5b3d0da7102355486be4d69cfd65886c9d9c8738b293cafb23b2104bfdac8d7d01298eeb18fde3ded6491d41b419cc663752c4e67dbe8986833d20e4ef34180b67ee03de45c3e7030db5246ee5b51bf298bba3e4d0934937fc12d9a629604c53c070e30d611999a9cddaf2d9acda6a9f67202b352369d48260eebce0e78e4d5ae54f677521f84a7be0017fab278b2b57275efc5fa57c617186fc1ba49edfbd3308634878d864f2da1583ca8d56ce9fae77c462039abc32d0539c0a60b7bbba5029e9329d275683d9c4ce77d0b908ade98b0e32b4420d9aee2cc10e4be922f9572582dd8967141c1d402e215f20aee0a890e2368e406dea11bd11177f2e038aa2f1a0dff51a128d955d5e5f8d5d0009aaa82440a96864d6c697f910d1df230f467f0e02a2e02bf9e45da95f255410cc5aab8d85f449a5de99aabd44fd763ec14629f3dbab1a247bffb7174648e43b9fb1eb0df5e4109b7a88e05512b20865bad39f9ea79d52f5188e7ca5194405bfb1a09727617f3f6c88192008edbc0c6585dbf261f149dffb593d42716e5a5777f5462beeb1e9a56a2c76e6cb735117cc1183a38d1e00b303d174aa9cf5c731b2c70edd79cc5dc96f4018f1d71d7198bbb7d134cd2ff8c15f9a04280db26a8fa9997eb86b133c022eda15d8ad5e77cc9f62615960bac2f9bbc3ebbd198f72c572b97156fa7fa229a98014e170\",\n        \"signature\": \"5b3d0da7102355486be4d69cfd65886c9d9c8738b293cafb23b2104bfdac8d7d01298eeb18fde3ded6491d41b419cc663752c4e67dbe8986833d20e4ef34180b\"\n    },\n    {\n        \"secret_key\": \"7f048dfcc2650cda59491d4ce2b2533aecc89cc4b336885194b7ad917db5cd14\",\n        \"public_key\": \"08001b5d40958bcb270beea9baba3387e3a4b900fc42275657c6c691a2e264f2\",\n        \"message\": \"917519cdb33519680bcae04faa790771ce7d1397c345f1b03dd7625776f3f195809932618b1c64acd93ad000ead09654a33d14f748b46b67aae0ff12df3cc163280f47cedc16a8579034e49884296772ecbdbb71ca29c166233533c8de54012b412ca13cc258f7c5465d83422f524e4c05f806313478319fd143cf5088e69837697d3615d80a7fa7e7443fca65e753ac1b11d8eff3476636ae02d7a20f4b2388dad684002f5ce957caddd2053d0ed533132a81ca19bb080bd43be932028cb5f6b964f008b5b1c1c5993bc9b5485b22bbef701f0a26a3e675ea31122bbae91d864b54d895afdc79ca58d4fe449213353b149f3143b5144d747c5b4697479ae68528485384044aa2c99ba4b17b184e94982269bde2de0b17705d0bfc46d6906a90edefe89195de6bb8f3fb6a374186c7cd086d13d1b3525a3994dc8020e1a00554ac8a82d6047c5bff5e7f12450f4865da161e1a021fd9be8bd33a32bb54a4ddf874512e74b5cfd3fc3cd9ac11edd878433668e3fcc782b97b6d905adb0ebec42c9254ac90f35822c00f97ff3f0c7c39ed3c7cb3920f5608bb45838bb242a52a8637d7cecdcf489fa183b45451c6c9fcbbbf914f5f7e6b223bcb4675\",\n        \"signed\": \"583370971d24652ad213c42615911938fa9aa3d9b7196940e6eb08151200c7b6729d1eff8f4f0904074dab3ddda6af1e4e562b7d6220c1a562683beab268f80e917519cdb33519680bcae04faa790771ce7d1397c345f1b03dd7625776f3f195809932618b1c64acd93ad000ead09654a33d14f748b46b67aae0ff12df3cc163280f47cedc16a8579034e49884296772ecbdbb71ca29c166233533c8de54012b412ca13cc258f7c5465d83422f524e4c05f806313478319fd143cf5088e69837697d3615d80a7fa7e7443fca65e753ac1b11d8eff3476636ae02d7a20f4b2388dad684002f5ce957caddd2053d0ed533132a81ca19bb080bd43be932028cb5f6b964f008b5b1c1c5993bc9b5485b22bbef701f0a26a3e675ea31122bbae91d864b54d895afdc79ca58d4fe449213353b149f3143b5144d747c5b4697479ae68528485384044aa2c99ba4b17b184e94982269bde2de0b17705d0bfc46d6906a90edefe89195de6bb8f3fb6a374186c7cd086d13d1b3525a3994dc8020e1a00554ac8a82d6047c5bff5e7f12450f4865da161e1a021fd9be8bd33a32bb54a4ddf874512e74b5cfd3fc3cd9ac11edd878433668e3fcc782b97b6d905adb0ebec42c9254ac90f35822c00f97ff3f0c7c39ed3c7cb3920f5608bb45838bb242a52a8637d7cecdcf489fa183b45451c6c9fcbbbf914f5f7e6b223bcb4675\",\n        \"signature\": \"583370971d24652ad213c42615911938fa9aa3d9b7196940e6eb08151200c7b6729d1eff8f4f0904074dab3ddda6af1e4e562b7d6220c1a562683beab268f80e\"\n    },\n    {\n        \"secret_key\": \"9feb3df88c494a99849c6fca194201477a2fa7564e29fb06cb44c1154e8cea3a\",\n        \"public_key\": \"c35628ca6ee28ec1c239ddc5bba2a9e09e4846816b143c74dfa2aec1f62551b6\",\n        \"message\": \"95fb7581bd25ffd442c3ae38a19bea7349c7b7683ba6767e148f0afc15373f67c16d471781202e6da8054ed7fb9ee204cc0f63c210a670a5f9ced4294588196330d31b8e8392bef6b48fe3c92078fae11284b4c3ba20d937e2719de7bf67c00669ad23e61384ebdf8c6e60735428c084fe217fdb4709ccb6083fc0ae4a05273eef739023d34bb73f662dacdf110b6dbd3e74fc1491e8c96596075fae5c36aabe2a0a53052bf77c4462438063aa7bc0c50ab920c9eb288671560ca5ba7af44a53db2e2ff43ca56069ea5517cb214e76faa53dbda100003c4f6175414041be74de22ce155d2281b6f4035be39841afdb96dd89aa808e6865bae62d6bedd919d3e86510b9fa5fedd1977c4131b2b86e0f48d7215eb13d5498ca5d2368f81895ed855a527124657ec9539efe3b2499a3b0b338262f26340e22554c79f4fad2b4e419c70bc1a2107d206456b6368781be4b5e2c54da42d336040fb7ba49c32d752321adcd92986e78bedb226ceac50292089bb579027f702217745afe06a5be136b3998a3604c9ff2acd6fa3f3f71633d3102fbf03047c5486f84c4dc2447d863796383d55f08c981fd4dd7dc1cb72b8ba4435af6abdd74e6f6e6798f1ae2\",\n        \"signed\": \"a1c2607835bec1a1d87872fd8ee488d0ae9ed23d49fd6786fc4996725e49b3262118babb4834877c7f78fbeac02df40ab091b8b420dc9951381e3bcda067050295fb7581bd25ffd442c3ae38a19bea7349c7b7683ba6767e148f0afc15373f67c16d471781202e6da8054ed7fb9ee204cc0f63c210a670a5f9ced4294588196330d31b8e8392bef6b48fe3c92078fae11284b4c3ba20d937e2719de7bf67c00669ad23e61384ebdf8c6e60735428c084fe217fdb4709ccb6083fc0ae4a05273eef739023d34bb73f662dacdf110b6dbd3e74fc1491e8c96596075fae5c36aabe2a0a53052bf77c4462438063aa7bc0c50ab920c9eb288671560ca5ba7af44a53db2e2ff43ca56069ea5517cb214e76faa53dbda100003c4f6175414041be74de22ce155d2281b6f4035be39841afdb96dd89aa808e6865bae62d6bedd919d3e86510b9fa5fedd1977c4131b2b86e0f48d7215eb13d5498ca5d2368f81895ed855a527124657ec9539efe3b2499a3b0b338262f26340e22554c79f4fad2b4e419c70bc1a2107d206456b6368781be4b5e2c54da42d336040fb7ba49c32d752321adcd92986e78bedb226ceac50292089bb579027f702217745afe06a5be136b3998a3604c9ff2acd6fa3f3f71633d3102fbf03047c5486f84c4dc2447d863796383d55f08c981fd4dd7dc1cb72b8ba4435af6abdd74e6f6e6798f1ae2\",\n        \"signature\": \"a1c2607835bec1a1d87872fd8ee488d0ae9ed23d49fd6786fc4996725e49b3262118babb4834877c7f78fbeac02df40ab091b8b420dc9951381e3bcda0670502\"\n    },\n    {\n        \"secret_key\": \"bff68955dd6ae0e8ba85ab0d0cdaf04a9f5befd5ef6014f49994a78363dc17f7\",\n        \"public_key\": \"0ad9493af80b15f07a521ccd674fe9e5212a4a28c17c74f6605ffef78a4aed72\",\n        \"message\": \"d8f5650aa3581c4d39bd1b8afc96c1ad7c4bf723426f9d7fabd1a5c8ac1d2fe54a971fac765e05af6e407d7269bab661b3432292a484f952c11095bbd20a15d77c41f8f3731a504d518ee10cd006c96ee57372de5bea348ec8ba159162170c63e970f1c7a3465a3d592e1d56c6540fbdb60228e340909646320c95f25698cd4896bdff58e2561e3b3d9a73b89747912a1cf467d63e41455fda77477f46fe6937bb0e79d92ccd52e82dba908a05a57c7ecf49554ab44c0b718e3bdd5fc0bf7070d9c58f860591c18bca8b3a9a148a06548e0f01602b1e6f686037c94ff732e155d52d5b0b44703b3d11163e3f56e3b9c1b86476e4dcbfc53fa05984e8c75dd21843cf96f9e494abbae7184aa42736633e3811aeff402b2fcb7d7f702e447241e22a58842fd6d0c03d33ff5b8c792200e173daa7b217e4b2f4433e6c020acce501b9323aa0241144434b08e9d2469139ff67342208900546200fd971a65dbd6db6c21e3ef9172abba1ea9ea2a249addf1a1eaa3ce11938b13e30913cd0dad491fcbb3285ea378b8ef9227f3fa80b586ecfeae137066f8448acdfb78d6d3e9ef4a6b362df4241ad9ae253b8e1597d656e000cea447a02fa4933328609bba0\",\n        \"signed\": \"9319eef740633ada1af0e137644c61fb3e11ba4b01d3c6f25392dc9367872a23be56310d312efcb91bdbab78a75e576ebe9081972415f562db41baf5e2338b07d8f5650aa3581c4d39bd1b8afc96c1ad7c4bf723426f9d7fabd1a5c8ac1d2fe54a971fac765e05af6e407d7269bab661b3432292a484f952c11095bbd20a15d77c41f8f3731a504d518ee10cd006c96ee57372de5bea348ec8ba159162170c63e970f1c7a3465a3d592e1d56c6540fbdb60228e340909646320c95f25698cd4896bdff58e2561e3b3d9a73b89747912a1cf467d63e41455fda77477f46fe6937bb0e79d92ccd52e82dba908a05a57c7ecf49554ab44c0b718e3bdd5fc0bf7070d9c58f860591c18bca8b3a9a148a06548e0f01602b1e6f686037c94ff732e155d52d5b0b44703b3d11163e3f56e3b9c1b86476e4dcbfc53fa05984e8c75dd21843cf96f9e494abbae7184aa42736633e3811aeff402b2fcb7d7f702e447241e22a58842fd6d0c03d33ff5b8c792200e173daa7b217e4b2f4433e6c020acce501b9323aa0241144434b08e9d2469139ff67342208900546200fd971a65dbd6db6c21e3ef9172abba1ea9ea2a249addf1a1eaa3ce11938b13e30913cd0dad491fcbb3285ea378b8ef9227f3fa80b586ecfeae137066f8448acdfb78d6d3e9ef4a6b362df4241ad9ae253b8e1597d656e000cea447a02fa4933328609bba0\",\n        \"signature\": \"9319eef740633ada1af0e137644c61fb3e11ba4b01d3c6f25392dc9367872a23be56310d312efcb91bdbab78a75e576ebe9081972415f562db41baf5e2338b07\"\n    },\n    {\n        \"secret_key\": \"1ba919c066bb56e640c3335968e1d1b5bcc093383e2d7cf8b5fff5c61ec47a77\",\n        \"public_key\": \"804c90bdc2b3618b01f075e041fa971b83c5b6cfa3b6b3974f3fa43599beacab\",\n        \"message\": \"87c5c75d8ad07d52acd781d1bb95f78c70e21c2dd66f7aa44234152f98234d128358a8aee98ea903a77b441db1447ae6ff3432ddd4570f7f58036122c1fdcc93cb21573739c19ccaa411508e08de2606f3d8f2db89df6a44a46133d57018462627e22f57ef36d1de024de3d4ae41b752df4821155934b447b2effe512487521be0356832a74ce0e2d8301b79f93175e8b6b961b1df637d8acadc884543c6864f8025ececec7c6e4fe0fecfc40dcd95e8d6ab93ce25595384436b598b73c74b03d49ed5002c0f858cfd9d0df61ede937cc41659d6708b96fc5aaadee109e2a68846baf2c246dfcf3d27c28bd1371e35fc9412631442ee75f38c6e4958070a74f6e6a220f75c7280eab4737d97e37882f3624811675f16caf60cb944bce92e75884c56483c61f26b6371b1b51237621a06543eb4abea7becc4fc31dbb5475b3deb9bb3c8992387104830c6072afe1af244bf681a40329c9b37772b09c5e88e78f7dffbc04549ffa13b4144ddfa538fc4b3300540ad830215e25f11446d289f33122c2c880de3da71c453d7e88f7ca4ea3d1255e82f4bc9e5533dc401c33040e16940b2cf9cf21feaca1c2c6c33337cf75e1884b483bf801536d304089115a0\",\n        \"signed\": \"503eb7ed6de1b776c952f255bbd4bcfb0e48bc70c2cc2f1f72bf6881479040c47524ec542ae13f6005ca5016b58b736a50898dd0569d4d38ad298630d68adb0b87c5c75d8ad07d52acd781d1bb95f78c70e21c2dd66f7aa44234152f98234d128358a8aee98ea903a77b441db1447ae6ff3432ddd4570f7f58036122c1fdcc93cb21573739c19ccaa411508e08de2606f3d8f2db89df6a44a46133d57018462627e22f57ef36d1de024de3d4ae41b752df4821155934b447b2effe512487521be0356832a74ce0e2d8301b79f93175e8b6b961b1df637d8acadc884543c6864f8025ececec7c6e4fe0fecfc40dcd95e8d6ab93ce25595384436b598b73c74b03d49ed5002c0f858cfd9d0df61ede937cc41659d6708b96fc5aaadee109e2a68846baf2c246dfcf3d27c28bd1371e35fc9412631442ee75f38c6e4958070a74f6e6a220f75c7280eab4737d97e37882f3624811675f16caf60cb944bce92e75884c56483c61f26b6371b1b51237621a06543eb4abea7becc4fc31dbb5475b3deb9bb3c8992387104830c6072afe1af244bf681a40329c9b37772b09c5e88e78f7dffbc04549ffa13b4144ddfa538fc4b3300540ad830215e25f11446d289f33122c2c880de3da71c453d7e88f7ca4ea3d1255e82f4bc9e5533dc401c33040e16940b2cf9cf21feaca1c2c6c33337cf75e1884b483bf801536d304089115a0\",\n        \"signature\": \"503eb7ed6de1b776c952f255bbd4bcfb0e48bc70c2cc2f1f72bf6881479040c47524ec542ae13f6005ca5016b58b736a50898dd0569d4d38ad298630d68adb0b\"\n    },\n    {\n        \"secret_key\": \"9b36247c17710e95261a7d702f57fe81f2971117a50c87920193b386d494ca97\",\n        \"public_key\": \"29ae39f273e35fb3f611da091600650efbc4fc4d1e7b4c76aced5a83f82634f3\",\n        \"message\": \"e8d9d53ba27e98edd55df3c6b245eacddc8a40e3efb007bc918ec5a869178a170bb4a635b7f8f742e37ad45d14a74344a6b522830a522106eb960daf192dc1e0fd70f16160e122516892d0e2abd0d4ae0f0d2e5adcc99ad55302e251b3e7a4d0cb33774a497049905c33de1fbbc1ad2b6c645295fe416b4d12b232efe0a33cd2ad8732eba1c3cb0eaeb0b2a57fa03ec567ca29210bf6ff9542a766f496fe68058aa983806cbe7ab10a47920bac8248818e54a41551c9a0959e8994cac60fc868ad48b5a24d5f24a7a5a3fd90b847e817ad3dd5d0d6f8de2d204f642483bd53585a92ef925415a9b38fbbf07fc0f35e707569cf488b205453ce5433eba6fde8781af72b52bfbcab85ead385d9d3175e21ad3373ad535cf0e357ed6b5383ef3829a9d5095b87dc9aadbe0ca7abadf33ec3b6ffd6eb94afdcc12e8d66a6fc05acf97368db0f69565dcd8fef4d1e49d7dd4ac053c218f5240c812d4ebba440dc54cacddb1c39329e5bd0c3c80dc3259a80f059f94679aa0794ca0115cc62af25e124cb8a9d4160eace6d22c7b1c44544f81142a19ebb02a9bda6429c50e783db4a07f0219e857c8d3c5655a582831c8eabc3f19b59ad8d2c714adeaf4039d5cf70\",\n        \"signed\": \"035970a672e93f87eb42cc396f6ea7e1b3dd5c5951572826d1075a15c2d7e454df195b51aae8dc61ef7ab895485f64e5989573d98a062e67ae7356fe5c9e3b0fe8d9d53ba27e98edd55df3c6b245eacddc8a40e3efb007bc918ec5a869178a170bb4a635b7f8f742e37ad45d14a74344a6b522830a522106eb960daf192dc1e0fd70f16160e122516892d0e2abd0d4ae0f0d2e5adcc99ad55302e251b3e7a4d0cb33774a497049905c33de1fbbc1ad2b6c645295fe416b4d12b232efe0a33cd2ad8732eba1c3cb0eaeb0b2a57fa03ec567ca29210bf6ff9542a766f496fe68058aa983806cbe7ab10a47920bac8248818e54a41551c9a0959e8994cac60fc868ad48b5a24d5f24a7a5a3fd90b847e817ad3dd5d0d6f8de2d204f642483bd53585a92ef925415a9b38fbbf07fc0f35e707569cf488b205453ce5433eba6fde8781af72b52bfbcab85ead385d9d3175e21ad3373ad535cf0e357ed6b5383ef3829a9d5095b87dc9aadbe0ca7abadf33ec3b6ffd6eb94afdcc12e8d66a6fc05acf97368db0f69565dcd8fef4d1e49d7dd4ac053c218f5240c812d4ebba440dc54cacddb1c39329e5bd0c3c80dc3259a80f059f94679aa0794ca0115cc62af25e124cb8a9d4160eace6d22c7b1c44544f81142a19ebb02a9bda6429c50e783db4a07f0219e857c8d3c5655a582831c8eabc3f19b59ad8d2c714adeaf4039d5cf70\",\n        \"signature\": \"035970a672e93f87eb42cc396f6ea7e1b3dd5c5951572826d1075a15c2d7e454df195b51aae8dc61ef7ab895485f64e5989573d98a062e67ae7356fe5c9e3b0f\"\n    },\n    {\n        \"secret_key\": \"6fede7396c462033189acd23d2f9d02b68898d35f3a01a798fc24d488de93a78\",\n        \"public_key\": \"b34062060b2c20076a98fea939b3b3a50451a5f49f8351c0ad7591dbbebb130f\",\n        \"message\": \"5abcc14b9d8578de08321de0d415e3d40e9de31e1888137475ce62bc6fbee8fdd03b9d47c7b88bbceb804444490bf6a3ccb7a273261e24004ea67cefa3d5d173576d01e38f76c1e0e515083c97e79914acf2be4160ef9360bbe986b36e9ff93346b0e70691d934e47f8a503fa933ab2a50426947cda8e810c9ebe3b36982f09aee6092739fa2358b613c7f129db0dcbe368bee52f2f7f1dfe3d2434605b5afcf256071717d924fd0803bbd0dd1f9555ce834dac781df4cc7aa19e7f11da9fb99cb9e6b9e1e6fb4f7e8dcb2236c28aeb6cbc55a130e03c1b17a991cca1b794e6c13732d5b0a66f6eba860ecb98555aa4c218d112b116bce238295de142741f687be0b2487f58ffc5c12a0a519f1e23793242ef857ed398a20699d4351453fc2f092762abde34f4da2dbe0ce2aabaf6bc4c0159f3fe1aea16a036f7eaecd629538f3e0eed83c9a4dc1abc238f90daaf489fd61b34d937b6f4607a788baa82061943dbab26c1d384d8d49f99348800bf361f871f5d6cda18f689918cec31ad158f1863d13ffac5405c162c32de06e32994cc4106f95bb4fffdbefe7d629ec7797394609fdbfeadb46927370a11fb38471540f951b93c6eb238668dc006c21660ba2\",\n        \"signed\": \"88a83e2012d209ca03b8ebf6de5bb7ef4ccb5e3df5cac78954aa694930e4de82544ef5083c4892db9f05d77bf63f4fdfce15a4d1c3f85bae8077062bec0e7b075abcc14b9d8578de08321de0d415e3d40e9de31e1888137475ce62bc6fbee8fdd03b9d47c7b88bbceb804444490bf6a3ccb7a273261e24004ea67cefa3d5d173576d01e38f76c1e0e515083c97e79914acf2be4160ef9360bbe986b36e9ff93346b0e70691d934e47f8a503fa933ab2a50426947cda8e810c9ebe3b36982f09aee6092739fa2358b613c7f129db0dcbe368bee52f2f7f1dfe3d2434605b5afcf256071717d924fd0803bbd0dd1f9555ce834dac781df4cc7aa19e7f11da9fb99cb9e6b9e1e6fb4f7e8dcb2236c28aeb6cbc55a130e03c1b17a991cca1b794e6c13732d5b0a66f6eba860ecb98555aa4c218d112b116bce238295de142741f687be0b2487f58ffc5c12a0a519f1e23793242ef857ed398a20699d4351453fc2f092762abde34f4da2dbe0ce2aabaf6bc4c0159f3fe1aea16a036f7eaecd629538f3e0eed83c9a4dc1abc238f90daaf489fd61b34d937b6f4607a788baa82061943dbab26c1d384d8d49f99348800bf361f871f5d6cda18f689918cec31ad158f1863d13ffac5405c162c32de06e32994cc4106f95bb4fffdbefe7d629ec7797394609fdbfeadb46927370a11fb38471540f951b93c6eb238668dc006c21660ba2\",\n        \"signature\": \"88a83e2012d209ca03b8ebf6de5bb7ef4ccb5e3df5cac78954aa694930e4de82544ef5083c4892db9f05d77bf63f4fdfce15a4d1c3f85bae8077062bec0e7b07\"\n    },\n    {\n        \"secret_key\": \"d559580134ab050aca446ea7750ef6b371d92d7645ec7635fe7851100bc4e51e\",\n        \"public_key\": \"de5020cd21a8b32339decbedff24664d9580326327aedf09c5ec6b3fe5405226\",\n        \"message\": \"6842e3190a110eee96c507d4bcb4c548c3a0ed7b1a8ed77dd93b38613b23c73e830b205e62651921ad8296b08d1e1008ad78f2996e3c7f38032e467cffecd77b8525e243cec021f85296afd545d7be1a62568bb0cfcdb90d614ed798bfb7efc655326816a61082251df01613aac88efcea1e0ea2961b8f921ebe1558dee83374a0113a78c55857ce2055bb2c48badbd3d8f4cb19734d00d0604b619073020d72a99a1923e6160a09946567fd4bda66442ef5a7360786d178dae44922f350ce2edc6af73d1bd80dc03ec3ca7005f4109d10c6d4f7d8fa61735110f8dbaedf91a0bad7d7fb5c04d706373c15c645063ff4b4fbd2d559b0afad432d4c496cd8abfea286fa675dc076726ec522b3a3c2f47aecc539f48a792169c4cc8cd41cd2cb6b63ddbc19373ac9691c2bc2f78f22603d5513715a16d4574e7acc4bea6dcd8ca7f19865a49d3664a210dfad290774b10b7188f255b3be4dc8fa86f8da3f73a4e7c929951df30fe66a17c8cee23e4f2ed2063f0b02ab40372cbe54b9a708df7c48a06566d39b19434c6c766987b3ebb00675f44c4b3c1e9f4504e7a9270589c0d0f4cb734235a58ef074cf9decf3601aeeca9f1d8e356cb2db5fce79cbc36143f34b\",\n        \"signed\": \"6fcb1ac9290ab767d59b598c9a24ecdb6c05bb023ec36014a40d908ef0dc378a4528b3760d889a79174e21cae35df45d427ba6ea812bddca16e35a69b5e79f0a6842e3190a110eee96c507d4bcb4c548c3a0ed7b1a8ed77dd93b38613b23c73e830b205e62651921ad8296b08d1e1008ad78f2996e3c7f38032e467cffecd77b8525e243cec021f85296afd545d7be1a62568bb0cfcdb90d614ed798bfb7efc655326816a61082251df01613aac88efcea1e0ea2961b8f921ebe1558dee83374a0113a78c55857ce2055bb2c48badbd3d8f4cb19734d00d0604b619073020d72a99a1923e6160a09946567fd4bda66442ef5a7360786d178dae44922f350ce2edc6af73d1bd80dc03ec3ca7005f4109d10c6d4f7d8fa61735110f8dbaedf91a0bad7d7fb5c04d706373c15c645063ff4b4fbd2d559b0afad432d4c496cd8abfea286fa675dc076726ec522b3a3c2f47aecc539f48a792169c4cc8cd41cd2cb6b63ddbc19373ac9691c2bc2f78f22603d5513715a16d4574e7acc4bea6dcd8ca7f19865a49d3664a210dfad290774b10b7188f255b3be4dc8fa86f8da3f73a4e7c929951df30fe66a17c8cee23e4f2ed2063f0b02ab40372cbe54b9a708df7c48a06566d39b19434c6c766987b3ebb00675f44c4b3c1e9f4504e7a9270589c0d0f4cb734235a58ef074cf9decf3601aeeca9f1d8e356cb2db5fce79cbc36143f34b\",\n        \"signature\": \"6fcb1ac9290ab767d59b598c9a24ecdb6c05bb023ec36014a40d908ef0dc378a4528b3760d889a79174e21cae35df45d427ba6ea812bddca16e35a69b5e79f0a\"\n    },\n    {\n        \"secret_key\": \"9d4ce975547876636fea25437c2880c9aa8ee6b270d1b2da197c8d7f95e7dccc\",\n        \"public_key\": \"bde4993c030477c35890aae82bb5087e914e64b94ffc64e2d7a5a7c919e2d902\",\n        \"message\": \"ea0fa32a4a288811301b9ee533fa351fdfbf6bc1d0555a7402767a3a9198558f74bba7031857995b9f326226f1dd5df107b06342203eb8d40c5f1dc95b4f3f88975aa24af8769e2670c46671bebb7a0f1b7568729aee477e8988af9c749f3202708171fd94b337ae67ed21a6c44174014b0b0eb5ba71c277978d488c24c4a7841309846b4e30a4fbbcfc45078d7e14014114b1ac64f7c33c9ac25ea5626c2c819fbaa2a4de8a2bf5f1365d6b70407e8094f99197ce1f0c35e11a98fbe372414ea2064a3a12d1cd5c8df8fc0e79f5b770b58f477f91976ca0139895120e246baab5a026f2d39c687dc0788334b5c626d52cdebe05eaf30864b413eebdc5581ef00d439276e52f479c9c05b116395826b60490b3ce700cc0027f61e46ca2f6fbc2c9de2e800806550afb06d4a08eac7a758e24582a4d6d428b433d365fc31d4444607afb64f15e370794005a3a2244e666d5d4c38ad2009c769a51cdbf738d235942f412d07feeb73b3657d0b0c91cb5940bad6a706e14edcdc34225b1c1f38b1abecb2adcaf819155a94fe190fd556822d559d9c470854d3a43bfb868dadd6e443d98ee87e4d8284f5cf3a6dafaf295b902836c640511e610ae7d0cb1b1d3d6079fe6\",\n        \"signed\": \"be17444cd465a87a971df84eb102f9c7a626a7c4ff7aea51d32c81353d5dbc07393ca03db897d1ff09945c4d91d98c9d91acbdc7cc7f34144d4d69eb04d81f0cea0fa32a4a288811301b9ee533fa351fdfbf6bc1d0555a7402767a3a9198558f74bba7031857995b9f326226f1dd5df107b06342203eb8d40c5f1dc95b4f3f88975aa24af8769e2670c46671bebb7a0f1b7568729aee477e8988af9c749f3202708171fd94b337ae67ed21a6c44174014b0b0eb5ba71c277978d488c24c4a7841309846b4e30a4fbbcfc45078d7e14014114b1ac64f7c33c9ac25ea5626c2c819fbaa2a4de8a2bf5f1365d6b70407e8094f99197ce1f0c35e11a98fbe372414ea2064a3a12d1cd5c8df8fc0e79f5b770b58f477f91976ca0139895120e246baab5a026f2d39c687dc0788334b5c626d52cdebe05eaf30864b413eebdc5581ef00d439276e52f479c9c05b116395826b60490b3ce700cc0027f61e46ca2f6fbc2c9de2e800806550afb06d4a08eac7a758e24582a4d6d428b433d365fc31d4444607afb64f15e370794005a3a2244e666d5d4c38ad2009c769a51cdbf738d235942f412d07feeb73b3657d0b0c91cb5940bad6a706e14edcdc34225b1c1f38b1abecb2adcaf819155a94fe190fd556822d559d9c470854d3a43bfb868dadd6e443d98ee87e4d8284f5cf3a6dafaf295b902836c640511e610ae7d0cb1b1d3d6079fe6\",\n        \"signature\": \"be17444cd465a87a971df84eb102f9c7a626a7c4ff7aea51d32c81353d5dbc07393ca03db897d1ff09945c4d91d98c9d91acbdc7cc7f34144d4d69eb04d81f0c\"\n    },\n    {\n        \"secret_key\": \"0273868232f5be48592cfa05134e8d5554ed1f9a57bc7e3982a330c57e5a7f3a\",\n        \"public_key\": \"f172208782db66d466cbe4f4417f6fc477b7349f2a98db56c03a47227546bc5a\",\n        \"message\": \"f7a1d4614cc64a3bc48f00c6276304f34d4dfd15e0617b93ccef126c5c638c9d9953aabb7df42df4e0aaa7eac96a4b38c7ba758d860c90d05e3d14e479e545f319b0e5a85ad8f0991b43d6e49c24fa060e3e5df95c98d9451ab833e12aa97f404611bba359496265a6db11917d0da5c6a702d0b102de36dd0c98df5b54806ce626bb96374475f68a6060eb350a7d2aae3204b3dfdf9f1e31be81f7170f8a1b9385413ff8f6881e10c1e8da4c88afb50639ab44887aca2abeecedf110d2958c13fd3390d1b96a762d16ce196920ce85f6c415bed545b1445302a6f001eb8d00e97c751887868d481a0b1e4dfa04b6f761086ee8e697b019e017104bafb98fca242e334c6f18f1db5b6f295f05c559361c6831dabc42c2110703f9d1f64e12ddf26a8679854e9f8ef8479e1f12c35447aac02ea7f242e58632cf2fd063fe665070445b80f3dc6a3303bba96e05fa88eec201c5c2d00ca81b8da6969d0a4dd0483b3477d325a71facd6fa2209b48cb4f6525da73c9c05b2d9789b01448e1527e56a09a9bc6136d9837243c2077b925bbb933f8fb1daac963398c5802aeda3bbca8ae3b8f4a9a871f7ea8e2c0ce898c566217b5c06ff55ff9f4fe78398ae7973641eafb521\",\n        \"signed\": \"15e8d8dc7d5d25359d6a10d04ee41918a9c9df4c87be269fa832434d5301db022481bfa395a3e3466f9554ceee0532a8183a0d0550e7d1abe99fc694c6ff9301f7a1d4614cc64a3bc48f00c6276304f34d4dfd15e0617b93ccef126c5c638c9d9953aabb7df42df4e0aaa7eac96a4b38c7ba758d860c90d05e3d14e479e545f319b0e5a85ad8f0991b43d6e49c24fa060e3e5df95c98d9451ab833e12aa97f404611bba359496265a6db11917d0da5c6a702d0b102de36dd0c98df5b54806ce626bb96374475f68a6060eb350a7d2aae3204b3dfdf9f1e31be81f7170f8a1b9385413ff8f6881e10c1e8da4c88afb50639ab44887aca2abeecedf110d2958c13fd3390d1b96a762d16ce196920ce85f6c415bed545b1445302a6f001eb8d00e97c751887868d481a0b1e4dfa04b6f761086ee8e697b019e017104bafb98fca242e334c6f18f1db5b6f295f05c559361c6831dabc42c2110703f9d1f64e12ddf26a8679854e9f8ef8479e1f12c35447aac02ea7f242e58632cf2fd063fe665070445b80f3dc6a3303bba96e05fa88eec201c5c2d00ca81b8da6969d0a4dd0483b3477d325a71facd6fa2209b48cb4f6525da73c9c05b2d9789b01448e1527e56a09a9bc6136d9837243c2077b925bbb933f8fb1daac963398c5802aeda3bbca8ae3b8f4a9a871f7ea8e2c0ce898c566217b5c06ff55ff9f4fe78398ae7973641eafb521\",\n        \"signature\": \"15e8d8dc7d5d25359d6a10d04ee41918a9c9df4c87be269fa832434d5301db022481bfa395a3e3466f9554ceee0532a8183a0d0550e7d1abe99fc694c6ff9301\"\n    },\n    {\n        \"secret_key\": \"336a83b55abf4c02e25e540329b5275843c2ecb8df69395b5a5e241bd0d8c10d\",\n        \"public_key\": \"dd60569844570c9f0a82643f446478b5ac6fc542214231a7ca656a92b5fdaa54\",\n        \"message\": \"9afee8ab482010e29264b406d9b49453d1ce6d550939072182863e4665284ab05d86258e0623b18754c4785238f697f075adfb9e1d31a42e85934ec071ddddecc2e6c2f61334a79526788b4952190716906dde17fba556eea4c8b59727514f6f5615a19ca36da358fae6a6c54f7f4b7a929e31ba7cc71bde7882fa9ffd87300136409caf3ca64eefea616aed58da5dfbf28b668ec1cccffcef6e2e14f8109e9cbf76cfa414f91ac00f48e93eada385dd3d5c16e1a39ea3dd55c761fca361b428f516c05e694fe5c3c345cd94457187a8e604b200a1a0f937ae89f4d6b5421dffcf7ca15f2e2c25378a4113233f7613f4570aa4b909a9135eae4c7b9ead458007ae17126a11d145258af9563db2f7e8925431878b0eeca8affc01ac5913bf5bac4fa3a857c54cc8906d6af77de6b9326b6506151099e87e99b1e819c6fbe082688f34b803d588e416d853169765d62f7e0bdf72c5cd66669a0335562336735e7efb734a2fada327f858bec602d0da08eba4479e7f6dc4def6e4ebdbb730ee91a33445cadc9df52c825ad36149cefbc51ab102033530814bafa7e87961b06367ff896f08ae334a9b1aad703da686706c11a04943ea75e12992dcf6106e372077cd0311029f\",\n        \"signed\": \"d263f56d59cb9b2896a947267c2ed78a945bac5abdbf3c14dc3ad092b2308cb9315c464942a0a20b2024511d766e85c936499a149cd0bbb209150a16432652009afee8ab482010e29264b406d9b49453d1ce6d550939072182863e4665284ab05d86258e0623b18754c4785238f697f075adfb9e1d31a42e85934ec071ddddecc2e6c2f61334a79526788b4952190716906dde17fba556eea4c8b59727514f6f5615a19ca36da358fae6a6c54f7f4b7a929e31ba7cc71bde7882fa9ffd87300136409caf3ca64eefea616aed58da5dfbf28b668ec1cccffcef6e2e14f8109e9cbf76cfa414f91ac00f48e93eada385dd3d5c16e1a39ea3dd55c761fca361b428f516c05e694fe5c3c345cd94457187a8e604b200a1a0f937ae89f4d6b5421dffcf7ca15f2e2c25378a4113233f7613f4570aa4b909a9135eae4c7b9ead458007ae17126a11d145258af9563db2f7e8925431878b0eeca8affc01ac5913bf5bac4fa3a857c54cc8906d6af77de6b9326b6506151099e87e99b1e819c6fbe082688f34b803d588e416d853169765d62f7e0bdf72c5cd66669a0335562336735e7efb734a2fada327f858bec602d0da08eba4479e7f6dc4def6e4ebdbb730ee91a33445cadc9df52c825ad36149cefbc51ab102033530814bafa7e87961b06367ff896f08ae334a9b1aad703da686706c11a04943ea75e12992dcf6106e372077cd0311029f\",\n        \"signature\": \"d263f56d59cb9b2896a947267c2ed78a945bac5abdbf3c14dc3ad092b2308cb9315c464942a0a20b2024511d766e85c936499a149cd0bbb209150a1643265200\"\n    },\n    {\n        \"secret_key\": \"88409172618b490393db27d960171cbc187eaf4dd8b320b3d2f824980043718f\",\n        \"public_key\": \"ce2e7c5839ef5632a123dc373dc14b1f0505766e9675407604ca7cf54e8d44b2\",\n        \"message\": \"fb3e82f11bc286267e123817ad8864e077d9f7a8e7a163ac7eeaf93d55dd111de8083b66b53ce7bc771fc5071a2d7ac2f85d6fc6adcfcec446e16aa1046df37209ad7a29cf9665b439a54d6f8d942f89bdaa56f2f11260cc95993038b0e8fbdb3214f142e6c90b61a1d2b142076206af30ac35784a6dc15a1e79251a8c7731a1c53978038f8d76d70c6c1cdf529fbdb84d1507dcffdd42873dfa6a8fe6bd6f7fd29c80e4b2f933d2b6c9e62c9457e665472655059b63b618e2a9a8e5b9e41c3646173a892b8e6d4bcad6a62a6fccd3455890b58ec2681a95cc9776a9fce83c54a9ef312a331959c7ef3f79ee576eb7b79469c9234b1eaef609884708fe4bb0efac662da871ba61ddabb3fcbdeb8f635657dd9a5d7311e639a824858b9a9868d3f9384da612c7f2e771a46bd2624c99ea2b6ccbca996c1d9c375554f2a551619ce6d5e6e4d6b844a4dbea83ba732331fcf46572c1fb0e257ce1041b265df02e690a92814bbf3b5ecac69ee998766a02b0d2f908b3c15f952699616f2c07d589198989e6056c16319aab6cf8771902c078046a88b2570c13bc5edeba2ed1e3ba131daf94e6891862bb3de7d1063fe405307a5cd975693e9d58e17c690eeef4a2603cafc68c2b\",\n        \"signed\": \"93b6e29d63945d5c427387d006c7f0b01956a95fc0436ed42b46d0f17b5bb193ea8c0ebbf3d6d13bb539e35c91f3f0f9fa3414a0223c9060bac83653c6fcd906fb3e82f11bc286267e123817ad8864e077d9f7a8e7a163ac7eeaf93d55dd111de8083b66b53ce7bc771fc5071a2d7ac2f85d6fc6adcfcec446e16aa1046df37209ad7a29cf9665b439a54d6f8d942f89bdaa56f2f11260cc95993038b0e8fbdb3214f142e6c90b61a1d2b142076206af30ac35784a6dc15a1e79251a8c7731a1c53978038f8d76d70c6c1cdf529fbdb84d1507dcffdd42873dfa6a8fe6bd6f7fd29c80e4b2f933d2b6c9e62c9457e665472655059b63b618e2a9a8e5b9e41c3646173a892b8e6d4bcad6a62a6fccd3455890b58ec2681a95cc9776a9fce83c54a9ef312a331959c7ef3f79ee576eb7b79469c9234b1eaef609884708fe4bb0efac662da871ba61ddabb3fcbdeb8f635657dd9a5d7311e639a824858b9a9868d3f9384da612c7f2e771a46bd2624c99ea2b6ccbca996c1d9c375554f2a551619ce6d5e6e4d6b844a4dbea83ba732331fcf46572c1fb0e257ce1041b265df02e690a92814bbf3b5ecac69ee998766a02b0d2f908b3c15f952699616f2c07d589198989e6056c16319aab6cf8771902c078046a88b2570c13bc5edeba2ed1e3ba131daf94e6891862bb3de7d1063fe405307a5cd975693e9d58e17c690eeef4a2603cafc68c2b\",\n        \"signature\": \"93b6e29d63945d5c427387d006c7f0b01956a95fc0436ed42b46d0f17b5bb193ea8c0ebbf3d6d13bb539e35c91f3f0f9fa3414a0223c9060bac83653c6fcd906\"\n    },\n    {\n        \"secret_key\": \"e571189b5cd9e788302de3919d850c227dcbb615022e568bdaeb37ac5b2939c5\",\n        \"public_key\": \"edda890f42dd5fbc7316a5fadfbec38556f23f51b8efd2625437f6b5069f1ee5\",\n        \"message\": \"b62c867ad6227435bfa6dab830684e38d196e1f861aade0fd6a7699b6d60901fefb2d799c35c6f3d8bb94deee834403981866bab84946ae9476c75e9f1d3602b42cb2db437bff33a775822f0d6a257d4b75400eba5b8abb314b71fc6b46f8a34e861a9a62abf33de8482f63f9d7169e773a2dcebee03705dac117fd1499b68e7414f51ff9437f253a1d9901ec3b0bba86965a19383655487b58010f804909de1ffb2212c0252ddd9bf2a56ac46bd59c0c34dd59e46598b6babd4e5f3fffde55e48dab0398c22af9e26baddf77275e5f017b35a9b8f8435f9631936b391cb95d7adf35d1d8545a0fd066412d508967bbe9a20245a269e3be2777117e75fbac170dba352be69b254d353b3b2cb3b7e21b721aa9fe044f8916b4b2a6f8c28f8abe66ac92b91323ac73afd93dfbeeaeef26d19bd9f67e99d48cd2ad2d3e55e45d24d54b50f44a39b90e242ebe9b42bebdb230c470bdfde1bc7721c3120008477393dcc2e15fd22b251feb0e18b02883c078aee4fb760655a671dc7b8aadb9a562420a3c2efa2d342e1e0099d951b42242984f594e6914fe282b1ee128735984ef93a669e6ecba26c9fcb9f09f09256645617f1392d35908917cb8d29e0897c7503cddd5de1959686\",\n        \"signed\": \"7f797a31715d7c356f8f1f783700aa9974bb936d661661ad968c7cde1ac9e767be56a2dd49b9230e90110c67c0ed187cb7e75c3053ece844984d296f0d85cb07b62c867ad6227435bfa6dab830684e38d196e1f861aade0fd6a7699b6d60901fefb2d799c35c6f3d8bb94deee834403981866bab84946ae9476c75e9f1d3602b42cb2db437bff33a775822f0d6a257d4b75400eba5b8abb314b71fc6b46f8a34e861a9a62abf33de8482f63f9d7169e773a2dcebee03705dac117fd1499b68e7414f51ff9437f253a1d9901ec3b0bba86965a19383655487b58010f804909de1ffb2212c0252ddd9bf2a56ac46bd59c0c34dd59e46598b6babd4e5f3fffde55e48dab0398c22af9e26baddf77275e5f017b35a9b8f8435f9631936b391cb95d7adf35d1d8545a0fd066412d508967bbe9a20245a269e3be2777117e75fbac170dba352be69b254d353b3b2cb3b7e21b721aa9fe044f8916b4b2a6f8c28f8abe66ac92b91323ac73afd93dfbeeaeef26d19bd9f67e99d48cd2ad2d3e55e45d24d54b50f44a39b90e242ebe9b42bebdb230c470bdfde1bc7721c3120008477393dcc2e15fd22b251feb0e18b02883c078aee4fb760655a671dc7b8aadb9a562420a3c2efa2d342e1e0099d951b42242984f594e6914fe282b1ee128735984ef93a669e6ecba26c9fcb9f09f09256645617f1392d35908917cb8d29e0897c7503cddd5de1959686\",\n        \"signature\": \"7f797a31715d7c356f8f1f783700aa9974bb936d661661ad968c7cde1ac9e767be56a2dd49b9230e90110c67c0ed187cb7e75c3053ece844984d296f0d85cb07\"\n    },\n    {\n        \"secret_key\": \"371744ab63c115613929a343709bb019b7357dff72d2a149f1d0f71d3a201efe\",\n        \"public_key\": \"e58abfad4a13859f0acb05d0e47d59638f7b1b4936100b988d61e6e70e22667d\",\n        \"message\": \"c219de1e8d7ad8df08c49377396fe7c1f2d57bd2170633a00d708faadee180ceba92849a7778506cbb366875bf9124701894cecdb3385147d0671843922a649aff7c435eb5a9c74927503072d0067978716dc80be1545a2dbf5a1c38536e12bd7720c1965d3803a4e8aa55765192a13b705ca1059ded0e806362fc5bbe6c76a1c9674bb853790f7e90af00753e00436da48cd082ead64fddb689890162082f8482924f33acd604640f69927352b43f64402d27a883fa6b72aa70d241dffaa1701a25cf1079358260793875f76a2978e9f9f9d68634eb3f5f01bde1ce49e5921252f949f082795e4eafed7be5b49a9f95edbb4a13532e3f3b3be62e2652231253a20c1d5477e8f4bc57ed76fa19eaf03a11bba429b6496ce76246170e043bc14f2d2f703d968f1deb09388715c37cb4752da8d464e348e0313c8993e24133a7c545284e3c9c907d01b260c4883f9cb3e3dc5b6f7fb6d75536365f2132eaeddab570e7273afac0bff5c9fc0b820f2078e0336052e1fe7bdec86674d0998ec78da1c3f34751f886727695f35eca1304b14734766ab05c1186306ded9db3eef65d3c0456cdae8181afee04b296c6722a88c7ef3088d26f7fe74bc89cf5285c688f027b7e68600486af\",\n        \"signed\": \"5eae4ac72af0174ab256527b7cd337a0e5482e615af068db21dae35a64640742604df73fd4ca02ed9515a5608d73195230fadca7b426f02a2fbfd02061af3600c219de1e8d7ad8df08c49377396fe7c1f2d57bd2170633a00d708faadee180ceba92849a7778506cbb366875bf9124701894cecdb3385147d0671843922a649aff7c435eb5a9c74927503072d0067978716dc80be1545a2dbf5a1c38536e12bd7720c1965d3803a4e8aa55765192a13b705ca1059ded0e806362fc5bbe6c76a1c9674bb853790f7e90af00753e00436da48cd082ead64fddb689890162082f8482924f33acd604640f69927352b43f64402d27a883fa6b72aa70d241dffaa1701a25cf1079358260793875f76a2978e9f9f9d68634eb3f5f01bde1ce49e5921252f949f082795e4eafed7be5b49a9f95edbb4a13532e3f3b3be62e2652231253a20c1d5477e8f4bc57ed76fa19eaf03a11bba429b6496ce76246170e043bc14f2d2f703d968f1deb09388715c37cb4752da8d464e348e0313c8993e24133a7c545284e3c9c907d01b260c4883f9cb3e3dc5b6f7fb6d75536365f2132eaeddab570e7273afac0bff5c9fc0b820f2078e0336052e1fe7bdec86674d0998ec78da1c3f34751f886727695f35eca1304b14734766ab05c1186306ded9db3eef65d3c0456cdae8181afee04b296c6722a88c7ef3088d26f7fe74bc89cf5285c688f027b7e68600486af\",\n        \"signature\": \"5eae4ac72af0174ab256527b7cd337a0e5482e615af068db21dae35a64640742604df73fd4ca02ed9515a5608d73195230fadca7b426f02a2fbfd02061af3600\"\n    },\n    {\n        \"secret_key\": \"498b6ee6492d53231b3532d193578ba75d6a894e2e530034e21ab8ad8d2c0d1f\",\n        \"public_key\": \"d124665b28facd2d17946a04dfe3d129a4561a2b24eb326d84b62b422e44dbcf\",\n        \"message\": \"0498a59b87cdae28695547e10863bce804d97de0ac8008f3d5fb652c1757419fdc9e0f9736f4c59a34f21cfc74599fa788fcc10c6730c7df8c3d2c1b6a786d1230b65585719d1cb5c490359b94435d6dd671f54d6e9a19b9b5aaad7e0f233f8797df997828d88cd92ef089ef7dbf1e95277894a2f7c2fd0c8e4dfdfa6d3d14589ff01916dbf9ddd811c2f5e01e94298990a145a6cfc26895614c7c963fef308a4e3856c32dd3e359bc56d2cca496ad199ff1a568d6430ac5cd208e0e2d07803ca523e0d813ad3733ab50bdcadcb988aee758ea50439bf38ee649997604f151c602c82900a8205d8f6f670c8684bf5abb5f75ff29a37eb9bf8105199fbbfb4707e162e64c715270f853e648b0aa26fea0f6db562896bf424a9ffcb292fae85b76cefb8bd5a4b3ce1fb39bd2a50d0c9e6d933e167ff629b8a494f2a9b774eb303c781ea02aff1a8afadc2465cc616968015ed6a5a33c3120b945ed5351981e32fb9fb96b2212dcf8fe9ac56e3cf41dc524f800631020b025919178ce074eef078d6842012a276efa628db54058d1eb5b5b705f1e1818d2df5164baabb0c61956ecdb8c706e562fc4fd64052870530ae425b221f89dd6f90dab882e763e7a7ffa141bbaa8bf7a3f21b0\",\n        \"signed\": \"112f5c6d3bcb3dd99346d32ad69cbfac3e653bef29c68a33f43231f66cea1d0a195427d6e10c0e77c5d55fe2794287ee32e5e22bafbbd8052ad3606b90f945050498a59b87cdae28695547e10863bce804d97de0ac8008f3d5fb652c1757419fdc9e0f9736f4c59a34f21cfc74599fa788fcc10c6730c7df8c3d2c1b6a786d1230b65585719d1cb5c490359b94435d6dd671f54d6e9a19b9b5aaad7e0f233f8797df997828d88cd92ef089ef7dbf1e95277894a2f7c2fd0c8e4dfdfa6d3d14589ff01916dbf9ddd811c2f5e01e94298990a145a6cfc26895614c7c963fef308a4e3856c32dd3e359bc56d2cca496ad199ff1a568d6430ac5cd208e0e2d07803ca523e0d813ad3733ab50bdcadcb988aee758ea50439bf38ee649997604f151c602c82900a8205d8f6f670c8684bf5abb5f75ff29a37eb9bf8105199fbbfb4707e162e64c715270f853e648b0aa26fea0f6db562896bf424a9ffcb292fae85b76cefb8bd5a4b3ce1fb39bd2a50d0c9e6d933e167ff629b8a494f2a9b774eb303c781ea02aff1a8afadc2465cc616968015ed6a5a33c3120b945ed5351981e32fb9fb96b2212dcf8fe9ac56e3cf41dc524f800631020b025919178ce074eef078d6842012a276efa628db54058d1eb5b5b705f1e1818d2df5164baabb0c61956ecdb8c706e562fc4fd64052870530ae425b221f89dd6f90dab882e763e7a7ffa141bbaa8bf7a3f21b0\",\n        \"signature\": \"112f5c6d3bcb3dd99346d32ad69cbfac3e653bef29c68a33f43231f66cea1d0a195427d6e10c0e77c5d55fe2794287ee32e5e22bafbbd8052ad3606b90f94505\"\n    },\n    {\n        \"secret_key\": \"cefcfcd1cff4d8910749279131830b1da19dfc5245f78ca68b8c3c1b622b4551\",\n        \"public_key\": \"1d394abd1b4ed1aedf966a60efd3ff882140a7e56b428374ecb443289a9c7f00\",\n        \"message\": \"5ec94ed06fc1257ae9c183ce56271207aca37a23fdb4b0e74ac9307a1bb112e05ed5a5d047c93109e2e59477b03378346422de36714c2961bb9736a513ca3671c603a68c2be7317b1b52a076dae2aff7bc88cd5eea0aa268faaadae539c938bb4fd4b6069b1945eb6af0c9e6c8aa5ee4a4af37e90c67e248e8d27bd7f9589c4d30e905651baf45364fa049957ea5d9b7146ca68204e5e973d0f1c91a1c4bded66115028a71114f0f4f851bd115faeb954e3f71a01470b2481a0098d99f9d74898c8ba0287cc7834155214173d1fcbafcfe9b08250384439476055883833816c9524cfd5744aaa259db7ebd3a6aa20b5a6546dadefd140668eb0eccb5f668db9fc62983df980850c9d19882a17550d5dca3542cd36003a0d03cffb04575a3e8e1d07015c7b30eca9115cd2b72e46dfddf6a4dda1faa2dbdc89000d433f6ec9adc46146d939f32121b99b28983d98b9dde8c3f6e5779f2b0700cb023db13de656e0aed1da2d5c6ba2652343648ad420f6ab9e55a97482a1a22b3bc2ee598629abad9547edb5ff790990564bd871f81b24b12f2bf8dbdfe7a88375fad9ccbd9fc0ba1d3bba5e3c4813c18a0348aad83fb1b82689054d99b4600dd1760d0dcce44757467bec1946406d530\",\n        \"signed\": \"7d83ff66ec79307b1c0c093fda3968a96cf6044f5c802888584018845e7caf2a135ac6f1677e84d22e458e227e4f930209919bc11b12f7aaf2b8c94302d642005ec94ed06fc1257ae9c183ce56271207aca37a23fdb4b0e74ac9307a1bb112e05ed5a5d047c93109e2e59477b03378346422de36714c2961bb9736a513ca3671c603a68c2be7317b1b52a076dae2aff7bc88cd5eea0aa268faaadae539c938bb4fd4b6069b1945eb6af0c9e6c8aa5ee4a4af37e90c67e248e8d27bd7f9589c4d30e905651baf45364fa049957ea5d9b7146ca68204e5e973d0f1c91a1c4bded66115028a71114f0f4f851bd115faeb954e3f71a01470b2481a0098d99f9d74898c8ba0287cc7834155214173d1fcbafcfe9b08250384439476055883833816c9524cfd5744aaa259db7ebd3a6aa20b5a6546dadefd140668eb0eccb5f668db9fc62983df980850c9d19882a17550d5dca3542cd36003a0d03cffb04575a3e8e1d07015c7b30eca9115cd2b72e46dfddf6a4dda1faa2dbdc89000d433f6ec9adc46146d939f32121b99b28983d98b9dde8c3f6e5779f2b0700cb023db13de656e0aed1da2d5c6ba2652343648ad420f6ab9e55a97482a1a22b3bc2ee598629abad9547edb5ff790990564bd871f81b24b12f2bf8dbdfe7a88375fad9ccbd9fc0ba1d3bba5e3c4813c18a0348aad83fb1b82689054d99b4600dd1760d0dcce44757467bec1946406d530\",\n        \"signature\": \"7d83ff66ec79307b1c0c093fda3968a96cf6044f5c802888584018845e7caf2a135ac6f1677e84d22e458e227e4f930209919bc11b12f7aaf2b8c94302d64200\"\n    },\n    {\n        \"secret_key\": \"d107cf26f527db71a206e41d17955321013225bb20f93e12df3dc7399e720ca3\",\n        \"public_key\": \"186bf453c95dc0a2fd589a78e2c80040b3f6ddf9a6f8681d146036cf2146e8fc\",\n        \"message\": \"78eb9e13789928a74f360141728ede98389685c836b91fafbf1a7e8c19cfbe21bd3c3d6c6ed83c409ef693f1d735da3fa466497e19f38e30fba2a1023785459070e6e92c1cb7c9bd0c9ba61220157866c3bed2b01e6e6b9b8dd3f0c47c02f181346a0a9b9b5d3d7e18a94d6956855e16e8eaaaab71b10302f35bd8fb1f9b5847304160324926645b0582c2f2f1533a24281461514241db2850ef31c5763b2e3d4fb18fc6d8c1d7e52f7c13392c17e27019ff60008e431f1714370bc0efd9452a61f5c56488d91a185037f1f647f72fa785010d5d78f0a11587ccf66b8088e0e635fff3774193b2edeffd92d6e8a0321128ae64cdb862e631e2ee5ba0da44bbd589dc392b5a113b86a727a8ddb698a334cc668b39b1cde199b88837ca5f00f553f89c622834273641d39bc10c6a24e1eb42587542f03fc1627524ed6b749391f11028706c42364425b2caf20180e1b802c744b49b7bcd9bf7b15c23a0bf1c6965960d341554e1966b6ef82fcfbbe41d1e09d741e309254446777f13c29a67b8bdebc5f7f04d160d60e332e3d0441a0f2f7b192c3e2bdf6dadec2a424f88669806236ee04dea692bd8bb6f91ca0682ece349142575358b9b7be70600b3cb81e1456ba0799fdc01ffd68623\",\n        \"signed\": \"8071d97f324f10358f13ac8c61d424b4f300dd0419571c39e40d99aea5f03140e62ab4c97127ab33e98269966ae1d4557e459bf7f597b313f351a20122f0660e78eb9e13789928a74f360141728ede98389685c836b91fafbf1a7e8c19cfbe21bd3c3d6c6ed83c409ef693f1d735da3fa466497e19f38e30fba2a1023785459070e6e92c1cb7c9bd0c9ba61220157866c3bed2b01e6e6b9b8dd3f0c47c02f181346a0a9b9b5d3d7e18a94d6956855e16e8eaaaab71b10302f35bd8fb1f9b5847304160324926645b0582c2f2f1533a24281461514241db2850ef31c5763b2e3d4fb18fc6d8c1d7e52f7c13392c17e27019ff60008e431f1714370bc0efd9452a61f5c56488d91a185037f1f647f72fa785010d5d78f0a11587ccf66b8088e0e635fff3774193b2edeffd92d6e8a0321128ae64cdb862e631e2ee5ba0da44bbd589dc392b5a113b86a727a8ddb698a334cc668b39b1cde199b88837ca5f00f553f89c622834273641d39bc10c6a24e1eb42587542f03fc1627524ed6b749391f11028706c42364425b2caf20180e1b802c744b49b7bcd9bf7b15c23a0bf1c6965960d341554e1966b6ef82fcfbbe41d1e09d741e309254446777f13c29a67b8bdebc5f7f04d160d60e332e3d0441a0f2f7b192c3e2bdf6dadec2a424f88669806236ee04dea692bd8bb6f91ca0682ece349142575358b9b7be70600b3cb81e1456ba0799fdc01ffd68623\",\n        \"signature\": \"8071d97f324f10358f13ac8c61d424b4f300dd0419571c39e40d99aea5f03140e62ab4c97127ab33e98269966ae1d4557e459bf7f597b313f351a20122f0660e\"\n    },\n    {\n        \"secret_key\": \"af7ea8e41c8937a4ec475ad81371a171d3d0f9fd7519a04c751ed4ad8ff8fef9\",\n        \"public_key\": \"15dfc71585bac71ef20f374987c555a3f2f07d6b9c787066c10d63cf06e02ab0\",\n        \"message\": \"05f2263f0245ecb9faeb14e57aca436668308c8125df3116c4ee20501d0cde701b366e2b50a1c5edf484144ce16bfb1f7d26dc4275ea9732e264ba4d4a362b40275ba47377dbc332cb65e2f4c8853894aa878a4c175dc5b3b2a757ff3c8d7de660973b89dadf076e2e4fc76239b7bc752a229d44e000ceb667104cb0746bfcf59d69603ae7fc1bcf11d2e33f61dc497ec1b0bd5e4f1dbef435f2f291f30b00a85e833946c8b10484e4abd7d60bdbb1fe6dff5807a53bb89382153013b70ca08efc91b7e9fc5b5dbbb6af123b57be2e140fc471a45d89fa8284cc27e0a1fe771f55598bbdcf068d506dad0a592179ceca39ee9526f9e4fe47bf2bb14fb1486a677d4d7b99a520545676a0f1fa809049aa2414ae7b817d9a036e5c157886e8341d4e819c092a3b48b3606b03acb727c6c2217d0af30121546a94af6b49caa2a8c9b1786fa0c2a524ec7a023e924b5f8a89a53780c7f8781c5b8e869430caa0e6d0437967e3aed44f45c901cbcf1026fbbd4e3dd9a091ecf8b34f7dd5038e543dc7eb6ad5494efb145cf63ec0d355bb8e172f455d8a6b13dacaaddbc56e47de3cf762a1a738ef092f1436680467b5cd82e9e36e2d2b6842b3bd5dce77180ddaf0b643378e698599dd47f5cdbb\",\n        \"signed\": \"c0f1739167274bf91831c74beb645af790459b28bb3f21325365130f409acb66df1d223759a9758e08fd7253737484e285a6fb47404abe2eba5ef249fd025c0a05f2263f0245ecb9faeb14e57aca436668308c8125df3116c4ee20501d0cde701b366e2b50a1c5edf484144ce16bfb1f7d26dc4275ea9732e264ba4d4a362b40275ba47377dbc332cb65e2f4c8853894aa878a4c175dc5b3b2a757ff3c8d7de660973b89dadf076e2e4fc76239b7bc752a229d44e000ceb667104cb0746bfcf59d69603ae7fc1bcf11d2e33f61dc497ec1b0bd5e4f1dbef435f2f291f30b00a85e833946c8b10484e4abd7d60bdbb1fe6dff5807a53bb89382153013b70ca08efc91b7e9fc5b5dbbb6af123b57be2e140fc471a45d89fa8284cc27e0a1fe771f55598bbdcf068d506dad0a592179ceca39ee9526f9e4fe47bf2bb14fb1486a677d4d7b99a520545676a0f1fa809049aa2414ae7b817d9a036e5c157886e8341d4e819c092a3b48b3606b03acb727c6c2217d0af30121546a94af6b49caa2a8c9b1786fa0c2a524ec7a023e924b5f8a89a53780c7f8781c5b8e869430caa0e6d0437967e3aed44f45c901cbcf1026fbbd4e3dd9a091ecf8b34f7dd5038e543dc7eb6ad5494efb145cf63ec0d355bb8e172f455d8a6b13dacaaddbc56e47de3cf762a1a738ef092f1436680467b5cd82e9e36e2d2b6842b3bd5dce77180ddaf0b643378e698599dd47f5cdbb\",\n        \"signature\": \"c0f1739167274bf91831c74beb645af790459b28bb3f21325365130f409acb66df1d223759a9758e08fd7253737484e285a6fb47404abe2eba5ef249fd025c0a\"\n    },\n    {\n        \"secret_key\": \"0c57cbfcebde10ede02d1cb01df360d41f2e66a50443d58b5d4f0828c9a18bb7\",\n        \"public_key\": \"c4d761ba189971b9462c61bf46a765f88e2ecaa5bf2211220afb00ac657f7ce5\",\n        \"message\": \"337703243ab5b4e4d3481ee8dd1f4494507174412658a93988b5c30403a7b7ed8522ceb46fa1ee02753a874ef0675d397c575da0b08caa8cee3393784d0f0db8459837af90b9056df4e38e417f3ad2eb1a100ef207ce2ca6c610018021661e307099f2b7c4ae875991140bdd3f0f99ad2c5d55aacb84cc1cdcd579e08072b6951fd45ed289ac9ff7f0986ac88a4fbb9dc9203d9baf180c90edf937258c9d0a6d48e220f72d250c7f2c777eaa7fb9fa11d50a5798772f9fd976b00599f1f0276f3a2e4d988ae92125467a8dedb7a16f9e3a56e8d00662b3eb67a35b9b60e73bd935077ee238df8f6e833b9a5523386826c1f2917b1c3ec98e0a5fde89c48b1d446da5d0c885fef0e374bff30a997c7bafd5e743c85d0c6aaa6ef10a061211a2327c6d84eb747a56e9bf60fcd5b553b798834d0c5ccadb9d4b54e7237d12c679c193a287bb2f511cd4ee2a2d8549b44b21c11fbe5723381c6c5f784687fd90cebc5b495af9e414f2961b06a1c8433b9aa3292bcff4241c227167f8d1de054ba33ad81da3eb3ec6e40a6e26854af349540171b75d75fb9a8d12937827fd594d317b7a8d9f1c2fcabda56375568c3e9e514c2efffc3878363dcfad9fd95436b022e8772a88cb71e803bf90381962\",\n        \"signed\": \"8af7bbe01b8ab93951d16fca05a9c967d1c52c974bea151ea72e4cebaa20cc783bb61d8d69385cac5bc6d72dbd162beef1fcb5dd0e0a08b48ca0b9f6d9a9880c337703243ab5b4e4d3481ee8dd1f4494507174412658a93988b5c30403a7b7ed8522ceb46fa1ee02753a874ef0675d397c575da0b08caa8cee3393784d0f0db8459837af90b9056df4e38e417f3ad2eb1a100ef207ce2ca6c610018021661e307099f2b7c4ae875991140bdd3f0f99ad2c5d55aacb84cc1cdcd579e08072b6951fd45ed289ac9ff7f0986ac88a4fbb9dc9203d9baf180c90edf937258c9d0a6d48e220f72d250c7f2c777eaa7fb9fa11d50a5798772f9fd976b00599f1f0276f3a2e4d988ae92125467a8dedb7a16f9e3a56e8d00662b3eb67a35b9b60e73bd935077ee238df8f6e833b9a5523386826c1f2917b1c3ec98e0a5fde89c48b1d446da5d0c885fef0e374bff30a997c7bafd5e743c85d0c6aaa6ef10a061211a2327c6d84eb747a56e9bf60fcd5b553b798834d0c5ccadb9d4b54e7237d12c679c193a287bb2f511cd4ee2a2d8549b44b21c11fbe5723381c6c5f784687fd90cebc5b495af9e414f2961b06a1c8433b9aa3292bcff4241c227167f8d1de054ba33ad81da3eb3ec6e40a6e26854af349540171b75d75fb9a8d12937827fd594d317b7a8d9f1c2fcabda56375568c3e9e514c2efffc3878363dcfad9fd95436b022e8772a88cb71e803bf90381962\",\n        \"signature\": \"8af7bbe01b8ab93951d16fca05a9c967d1c52c974bea151ea72e4cebaa20cc783bb61d8d69385cac5bc6d72dbd162beef1fcb5dd0e0a08b48ca0b9f6d9a9880c\"\n    },\n    {\n        \"secret_key\": \"fe7172278364194bcfefb4783142b79f59d5fd978b1e47c314d78d4cb3f61c8a\",\n        \"public_key\": \"2e82cce47910c7e2a79bc1f419dc3c3df54f23291fc8193e8258ccd2fd38d548\",\n        \"message\": \"23509451a059969f2b4bdfcee5388957e9456d1fc0cd857e4f4d3c25a4155d5ee91c2053d558062eea6827950de863bc9c3df9672cde8ba741744ebbddb45ec1f4284570fd0aacd07ea58c581be2afc95ae444e678edc2a02439f387cec982ea3a44814a8a302bb3bfe8228d58de039debdf7c2a7eddb4e71ca474f94f7e2bd89dc65b1610733c91fff89bd499f40154a6198fdf5ec7ad3722d925b292196c429499075be0c5b6da9c090c0791a7019eb5e7366be6ce58ab2f04fecd9127c42718047bf47030691521312c0877aa3f36cc5fbc9caae0fde3945d2a868ee2502a3833208eb850a163cfcbf6da9ee6ad9fe067fe241986fe4436d6ae4edc61561938e2a33f4a33db63f69d3f1a8850ed40028869164103488fb795cd82ca067fe1b4897caa49a7ca9a80f3a8151fd13bbb7ff350e8579f565dc1c4a9ca938d27b15b3f858ef45d3dd78b2c358635356315f55a97528ecfec5d11a5b721503107faa406c17034e601474b3b60cf48692e269261158fc353d4df4274381357790b7756087b00cc79e3b9d28a3f2439febf199e64a8b37c91b5a4334e3354e8faf3a361e856c54bdaa43bfdcd6ee6c9f9679588f6069950832348aacba2bfeebacaa2071ddc7d77898ef0f68793cd25\",\n        \"signed\": \"f6c2a4296b9a3407c6d7a5679dae8666b503d1a17eacf71df493791b8ff0c0aa8eed36b327a29ab7828f46f22de868b628b1cfd501e8599fa31693b15f61080f23509451a059969f2b4bdfcee5388957e9456d1fc0cd857e4f4d3c25a4155d5ee91c2053d558062eea6827950de863bc9c3df9672cde8ba741744ebbddb45ec1f4284570fd0aacd07ea58c581be2afc95ae444e678edc2a02439f387cec982ea3a44814a8a302bb3bfe8228d58de039debdf7c2a7eddb4e71ca474f94f7e2bd89dc65b1610733c91fff89bd499f40154a6198fdf5ec7ad3722d925b292196c429499075be0c5b6da9c090c0791a7019eb5e7366be6ce58ab2f04fecd9127c42718047bf47030691521312c0877aa3f36cc5fbc9caae0fde3945d2a868ee2502a3833208eb850a163cfcbf6da9ee6ad9fe067fe241986fe4436d6ae4edc61561938e2a33f4a33db63f69d3f1a8850ed40028869164103488fb795cd82ca067fe1b4897caa49a7ca9a80f3a8151fd13bbb7ff350e8579f565dc1c4a9ca938d27b15b3f858ef45d3dd78b2c358635356315f55a97528ecfec5d11a5b721503107faa406c17034e601474b3b60cf48692e269261158fc353d4df4274381357790b7756087b00cc79e3b9d28a3f2439febf199e64a8b37c91b5a4334e3354e8faf3a361e856c54bdaa43bfdcd6ee6c9f9679588f6069950832348aacba2bfeebacaa2071ddc7d77898ef0f68793cd25\",\n        \"signature\": \"f6c2a4296b9a3407c6d7a5679dae8666b503d1a17eacf71df493791b8ff0c0aa8eed36b327a29ab7828f46f22de868b628b1cfd501e8599fa31693b15f61080f\"\n    },\n    {\n        \"secret_key\": \"a951e4e6ba9f1f0b354831c986942448faede37e11b0f247da2706dceef73ac7\",\n        \"public_key\": \"30362014974bf75c8495c2e271e713d57384384d0a5da88edeea79279c0c58ec\",\n        \"message\": \"20577dcac89174885eedb062489cd512fa72863ec5438e31e95878b75ce2772aee6290a0ba3c8f642c1d0ef55da8d5bc1484f83bb9876c7a8c0b6b609b94d112a06fc83ce8d2c1e08ed6c735e57b244aad6ecf7075363d565ba47865695c8423510909e0a3db4b61ed7aa67a7471331e83a0c58b8220a6245f65661549c1a12d4c0d50c326fb94917cbd07be51e83fe8bb3e46ca01b0a260daaf1d6abe3703d6a925113bb4d57ea1a48b4c7dbdaa03eea814a4b5f02e1dfb545cc623fe17a3bb18e4373f5f7ec2fb5217d23e4fed54a772e11323e730aad7efca8c464400e7679055fcc125a876ef7b8b9de186e229a7abf191d0c56d91815f67872e957bfbc7634aac403576a58f427bdbb30e8c4b6fc6c447741024ebb503a5a9025124a4887f825a43ee940f210a1bd5ae4f6732d60f95f2b83201c4c6dfe279412d7502a5211f8f48f800db30fc3776c4ed3a38bb4634822c98a6d6dd3233be60e42cca45a3163cc84e9e8da647c0711bc4c6ccd65aa1e972c07404d103e74bcc31a7e2c3eea5ac9257ab428947ab3dd3fb153d90694a4073373c4dd9ceb131154fe877473fd996f424f33e316e4eb02b8c7513be6998e516cbba54d94cd0a435e0ffcc2c0a8ef72b630ec24781066aa5efb9\",\n        \"signed\": \"0278c86a15208d9be5b1e1574761861b8af72ae08d40cdcbec354e65a9c3d0a06b5fcbb297d09bef397462395986c3093eeb22644c003c3078178cdf674e990a20577dcac89174885eedb062489cd512fa72863ec5438e31e95878b75ce2772aee6290a0ba3c8f642c1d0ef55da8d5bc1484f83bb9876c7a8c0b6b609b94d112a06fc83ce8d2c1e08ed6c735e57b244aad6ecf7075363d565ba47865695c8423510909e0a3db4b61ed7aa67a7471331e83a0c58b8220a6245f65661549c1a12d4c0d50c326fb94917cbd07be51e83fe8bb3e46ca01b0a260daaf1d6abe3703d6a925113bb4d57ea1a48b4c7dbdaa03eea814a4b5f02e1dfb545cc623fe17a3bb18e4373f5f7ec2fb5217d23e4fed54a772e11323e730aad7efca8c464400e7679055fcc125a876ef7b8b9de186e229a7abf191d0c56d91815f67872e957bfbc7634aac403576a58f427bdbb30e8c4b6fc6c447741024ebb503a5a9025124a4887f825a43ee940f210a1bd5ae4f6732d60f95f2b83201c4c6dfe279412d7502a5211f8f48f800db30fc3776c4ed3a38bb4634822c98a6d6dd3233be60e42cca45a3163cc84e9e8da647c0711bc4c6ccd65aa1e972c07404d103e74bcc31a7e2c3eea5ac9257ab428947ab3dd3fb153d90694a4073373c4dd9ceb131154fe877473fd996f424f33e316e4eb02b8c7513be6998e516cbba54d94cd0a435e0ffcc2c0a8ef72b630ec24781066aa5efb9\",\n        \"signature\": \"0278c86a15208d9be5b1e1574761861b8af72ae08d40cdcbec354e65a9c3d0a06b5fcbb297d09bef397462395986c3093eeb22644c003c3078178cdf674e990a\"\n    },\n    {\n        \"secret_key\": \"38a9b2d49ba8b82f301a5772cea0efc2218455c8b218b22cbaa2aad2d7ad3b35\",\n        \"public_key\": \"9df5ea1f78f810a521774602bbba4942f0459238966c8bcd21900afbf3d84293\",\n        \"message\": \"1778167c49b3a44d4a5ba838b7388553b1e13d36ea4f86d30242e1a822a3bbaff5cea63e2ae2a4635be236fef2b8135d14fb621c0bb773c9c17753f80926eb55d0f115bd09a885d844b818c9f04489a331bb5e032b8e58cda36949c5a8d08b55bb8de965e1f90d3b9cfeecfc6ad9a4ee5cb4047e9450acdc64640166a8c069ea849aebddac1ae4afec91ddd17fa5553fa87c56f7e51ec1cd6b5cc23351d057a4ce4a8923c8ae6ac7a8afdcc0881c0e74ebb024ef7296162cb93c68e50bbb074e651ac87dac9ea59d4c3fbf0fe379f3e97a24566ecae54303bcfb6f0cc9f15f6639430e66b19a427849fdfff833df02689e9de44006c903c559183459b9f4a97f54a0f2a28df7b0e9deeda8239d7b516977f5e7d6971b4502e9885f750af8d1a6669e25e77d5f327c77c87a86e0a1872bc96a76060f5f8a0c40cc973bfc7fe6ed9bca78f884e6a2828b94d489d32a0fd337e69db83fb8789afd4e8ef54c22a78c2587468b9ae071bae3b202d3183ad5f0f8e842e5a8de85bfff49e03c8381bca7fd4278ddccaf0134fb5593a395a77a5cbd434593bc4ad0ff4b8400ec674c4ecaf1d57754be0cb2fa9a6441a9abad7b42197ad82e50827e4a4245573a8f0ef87f58228a2867f4b3b834b6635037940a\",\n        \"signed\": \"e19e62ac539a9ca251d12d4c71055b0a3f581d19f2682e672404c78ac1f12bbefc91519276a5cbe16f520cf7a7f687a240f0329157c59f50026a58dcdc50fc081778167c49b3a44d4a5ba838b7388553b1e13d36ea4f86d30242e1a822a3bbaff5cea63e2ae2a4635be236fef2b8135d14fb621c0bb773c9c17753f80926eb55d0f115bd09a885d844b818c9f04489a331bb5e032b8e58cda36949c5a8d08b55bb8de965e1f90d3b9cfeecfc6ad9a4ee5cb4047e9450acdc64640166a8c069ea849aebddac1ae4afec91ddd17fa5553fa87c56f7e51ec1cd6b5cc23351d057a4ce4a8923c8ae6ac7a8afdcc0881c0e74ebb024ef7296162cb93c68e50bbb074e651ac87dac9ea59d4c3fbf0fe379f3e97a24566ecae54303bcfb6f0cc9f15f6639430e66b19a427849fdfff833df02689e9de44006c903c559183459b9f4a97f54a0f2a28df7b0e9deeda8239d7b516977f5e7d6971b4502e9885f750af8d1a6669e25e77d5f327c77c87a86e0a1872bc96a76060f5f8a0c40cc973bfc7fe6ed9bca78f884e6a2828b94d489d32a0fd337e69db83fb8789afd4e8ef54c22a78c2587468b9ae071bae3b202d3183ad5f0f8e842e5a8de85bfff49e03c8381bca7fd4278ddccaf0134fb5593a395a77a5cbd434593bc4ad0ff4b8400ec674c4ecaf1d57754be0cb2fa9a6441a9abad7b42197ad82e50827e4a4245573a8f0ef87f58228a2867f4b3b834b6635037940a\",\n        \"signature\": \"e19e62ac539a9ca251d12d4c71055b0a3f581d19f2682e672404c78ac1f12bbefc91519276a5cbe16f520cf7a7f687a240f0329157c59f50026a58dcdc50fc08\"\n    },\n    {\n        \"secret_key\": \"9a1717873689a03c112dd6b4d76ae73b89b416a598ceec209e27961e7bb1ee8a\",\n        \"public_key\": \"eecad1e0e4b863291881a8c241db9ccfffe4e55d8b5a42f307b4436acd0649a6\",\n        \"message\": \"e26580470901a07ab0931aa23829802ce04da59fdc2f773bc567f1e65b4f2e2d4a1a6aec1f54158adfce9b099790b503a13d22097ae23ebccf923f3bb1986d6e49111a8cf0d4eb8236bfe0d7c9e93a5efc7feb8e6a9cd1b8d921efa21e449ff49e06c1ccfea31f93e033c3c2a54ddb0f653a09fbd18a70b56315f193e7be56e5168f59563821d4bc3bbb0eaa2048286bbeee5aa3f3e7536cf2b750fd322602bb3847ceca39b75474322d76b1de80fa2eadba152d6f8f020d4d931c53f0a2801224d35deb6ec13b014873e689903607de96d9b7a743a887d2f48daf2ed2eefb202abf6082796981123b966e936dcf3483e2d24d694ecb865fbeb6969f347027fb8b175d24a4c045c0bb4ab5e02ddcbe77d4756c46d137b094473a02307a108340acad9d03bae8403af199cb75cae3162f3815813cc68bf2a5e499e594921149f3bbd214da5137e756521559dc80d9a4b74a0f4943022c7cd5fca42315e0bceeae9069615ce67a04382412313a31d67b346c329ad82e742c0a6ce0a6a02454c113e52022f3cc03fda691ebdfe14c53c8ce5ca9b932ca1a386e3eb4e90a4dc6e8ad8533b5af1aaef5003128655ca64f67fcd97c6ac803002404900bc0fae98463bcc31409f9981748789ade2d07783bc32b\",\n        \"signed\": \"1af8be095538965800d8eff6d723d028d65d0e9c6eb5e9d125bb3b1783f11ef7079a49a807e27ef1260be26a3b231d03b2ae151e49f6f189f15b1c83eab01c02e26580470901a07ab0931aa23829802ce04da59fdc2f773bc567f1e65b4f2e2d4a1a6aec1f54158adfce9b099790b503a13d22097ae23ebccf923f3bb1986d6e49111a8cf0d4eb8236bfe0d7c9e93a5efc7feb8e6a9cd1b8d921efa21e449ff49e06c1ccfea31f93e033c3c2a54ddb0f653a09fbd18a70b56315f193e7be56e5168f59563821d4bc3bbb0eaa2048286bbeee5aa3f3e7536cf2b750fd322602bb3847ceca39b75474322d76b1de80fa2eadba152d6f8f020d4d931c53f0a2801224d35deb6ec13b014873e689903607de96d9b7a743a887d2f48daf2ed2eefb202abf6082796981123b966e936dcf3483e2d24d694ecb865fbeb6969f347027fb8b175d24a4c045c0bb4ab5e02ddcbe77d4756c46d137b094473a02307a108340acad9d03bae8403af199cb75cae3162f3815813cc68bf2a5e499e594921149f3bbd214da5137e756521559dc80d9a4b74a0f4943022c7cd5fca42315e0bceeae9069615ce67a04382412313a31d67b346c329ad82e742c0a6ce0a6a02454c113e52022f3cc03fda691ebdfe14c53c8ce5ca9b932ca1a386e3eb4e90a4dc6e8ad8533b5af1aaef5003128655ca64f67fcd97c6ac803002404900bc0fae98463bcc31409f9981748789ade2d07783bc32b\",\n        \"signature\": \"1af8be095538965800d8eff6d723d028d65d0e9c6eb5e9d125bb3b1783f11ef7079a49a807e27ef1260be26a3b231d03b2ae151e49f6f189f15b1c83eab01c02\"\n    },\n    {\n        \"secret_key\": \"43bd924db8156008c6b3994a8130d427d514db8a613b84dfb0b8e0de6ac30676\",\n        \"public_key\": \"1b3461c269d5b0062d5df6fa654a2586f647a0684218a06e5e2f7badfb394131\",\n        \"message\": \"6184e6480c42e96cc877269b16371545ff9523c45ea88e76a1348c68ae7f318b088fe4610928239185b6b55bfa0f43644c4a4c97c56ed77d08b1f4aad2f4aa069994abeca96b7bf81b8064ea4350d8a8b02297a51308b61c57c8f1873c6f97007aca3180429e730a6643f28733547bcf7b9adfe327e85736bd04af7f1d9f4fb84a7f3affdf4e22b574ecb4bc8836b10b8453aeaa5c1bf132248b826cc5230f75e075fac9f037561136e00643d08253e7ad652f702c0d15b6d7d48aa6f8e9b5f5cc146e3f156fb2522751c3710041bd922f37a50377e028b0c4e4bc3465d7c84af6a5fb427acb3b41378b102bda46d8f6f203a5ffcf395d435e93458a0b0a4c2e7782fafe119f769f67058c6677f6d10d9cf5cb8748e1805798ed233f6f930eee0e5075bc58b97af9177fda75d53708beb04dc4f19a43e768074609f14065f48fdad5077ce109bacc357174a6b7956f6e7f32e38415be526370fa58c3c0b31f51e6cd4b2cf27f8bcbc21259d9e5c3b5c2946a9fc1b00d9d15c3b7d80bfd9d05db91d249d3e42d8956682044548d83bda8d5cc9212442f30b45cf4aead80cce9b3512c39c5c737d3f8d747afbab265af5eeef8ca9362ec76e943b0a0d7a39f3db11eca14458a7b592e5e4ff2275dd48b2853\",\n        \"signed\": \"d2a05d88d9d543d94d57ec88ae55681750f20b9be9c1e918cdaf457767f2948dd629e94f068edcf3d9927e330234badc3a02fa5ad3d9d85e948cb0b0cb3cd70a6184e6480c42e96cc877269b16371545ff9523c45ea88e76a1348c68ae7f318b088fe4610928239185b6b55bfa0f43644c4a4c97c56ed77d08b1f4aad2f4aa069994abeca96b7bf81b8064ea4350d8a8b02297a51308b61c57c8f1873c6f97007aca3180429e730a6643f28733547bcf7b9adfe327e85736bd04af7f1d9f4fb84a7f3affdf4e22b574ecb4bc8836b10b8453aeaa5c1bf132248b826cc5230f75e075fac9f037561136e00643d08253e7ad652f702c0d15b6d7d48aa6f8e9b5f5cc146e3f156fb2522751c3710041bd922f37a50377e028b0c4e4bc3465d7c84af6a5fb427acb3b41378b102bda46d8f6f203a5ffcf395d435e93458a0b0a4c2e7782fafe119f769f67058c6677f6d10d9cf5cb8748e1805798ed233f6f930eee0e5075bc58b97af9177fda75d53708beb04dc4f19a43e768074609f14065f48fdad5077ce109bacc357174a6b7956f6e7f32e38415be526370fa58c3c0b31f51e6cd4b2cf27f8bcbc21259d9e5c3b5c2946a9fc1b00d9d15c3b7d80bfd9d05db91d249d3e42d8956682044548d83bda8d5cc9212442f30b45cf4aead80cce9b3512c39c5c737d3f8d747afbab265af5eeef8ca9362ec76e943b0a0d7a39f3db11eca14458a7b592e5e4ff2275dd48b2853\",\n        \"signature\": \"d2a05d88d9d543d94d57ec88ae55681750f20b9be9c1e918cdaf457767f2948dd629e94f068edcf3d9927e330234badc3a02fa5ad3d9d85e948cb0b0cb3cd70a\"\n    },\n    {\n        \"secret_key\": \"8fb086206dd95a2621f598560ccb281f8273c8fc72e23611089baac89d3c3c78\",\n        \"public_key\": \"20276ef479f4d4523ab77420d424e8819c33c83779ed80c7f666e8f4403f94d7\",\n        \"message\": \"f02903ed4266e849a4485205954fffa8a108c323b7e3f84331043514e48556ab019497233a5a127bff3cd7c97086becef538b3f339d7d06e532dc7325e597ae357f816dea42a6a22c79d22074a2e1ad8023c424b7e096e5ad8897b05ef7d00d30a04aaf2981eddff2b347f1e27e20aabbe7e7a9544978e092b00cce420aba06187374ffbb37b4c22d75f04e57590f610a27347286c298312a6c9b1bdf24fbda8513c4f8356ccf757068ffc11bc65113783a5dde7722faf4ceb19fbb62f40702e2c6e6a8bb49ef40446450c4c59a2990944da4744f6ee770b930c246669813ce5a9f5a47dd80388981bfcc3a56b5be2c4c7e659a2e9182dec0aaafe9031aa3954d4fe7c431196a561a5b78eaba64f3db1b586c53b16f679a84921a642c260e4653a61de108ebde6f7053afa2cb3f3668ede121020dd1bace8418aebac3a5bd5142f105ac26fe49e5fb140c19b22d54a6291dfc954670247881646874defad814995519f6260e9774a8d185c37881b4f2543c4b63fbf1985016ab41c4d728cbc90b3ab876267bed41d0c0902f6b50e8fa906fc4788f7b820467306e0fe9e036a0a00f804f91c3ca718b95ff6d9e2204bc3161bf70fcc17b2964b56bc612e29402d96f50986514bc7d831d58e42793786d5806f\",\n        \"signed\": \"a9305e001600d597d05ef671699bf09f0dcc0c44475d3ca31e7ff1bffedc0c67daa1f3b76a035948c59cd87f82453a40950a1c9703c2e7d9280e7303966da301f02903ed4266e849a4485205954fffa8a108c323b7e3f84331043514e48556ab019497233a5a127bff3cd7c97086becef538b3f339d7d06e532dc7325e597ae357f816dea42a6a22c79d22074a2e1ad8023c424b7e096e5ad8897b05ef7d00d30a04aaf2981eddff2b347f1e27e20aabbe7e7a9544978e092b00cce420aba06187374ffbb37b4c22d75f04e57590f610a27347286c298312a6c9b1bdf24fbda8513c4f8356ccf757068ffc11bc65113783a5dde7722faf4ceb19fbb62f40702e2c6e6a8bb49ef40446450c4c59a2990944da4744f6ee770b930c246669813ce5a9f5a47dd80388981bfcc3a56b5be2c4c7e659a2e9182dec0aaafe9031aa3954d4fe7c431196a561a5b78eaba64f3db1b586c53b16f679a84921a642c260e4653a61de108ebde6f7053afa2cb3f3668ede121020dd1bace8418aebac3a5bd5142f105ac26fe49e5fb140c19b22d54a6291dfc954670247881646874defad814995519f6260e9774a8d185c37881b4f2543c4b63fbf1985016ab41c4d728cbc90b3ab876267bed41d0c0902f6b50e8fa906fc4788f7b820467306e0fe9e036a0a00f804f91c3ca718b95ff6d9e2204bc3161bf70fcc17b2964b56bc612e29402d96f50986514bc7d831d58e42793786d5806f\",\n        \"signature\": \"a9305e001600d597d05ef671699bf09f0dcc0c44475d3ca31e7ff1bffedc0c67daa1f3b76a035948c59cd87f82453a40950a1c9703c2e7d9280e7303966da301\"\n    },\n    {\n        \"secret_key\": \"afa1b846c210b52300e97696f81b8ea774d1df12e612527c55747f29c1937396\",\n        \"public_key\": \"b609566bbd1947bd7afaceb14389e836227169215fab66851aa5d70d6e2e3b89\",\n        \"message\": \"4cac1b1f4bd48284dcc9afc8b5955b64b436db704b0335d9755cc1f97477f8d323cb6410ef146ab8a9efb9526d8b62e3bbad1f7295f47ba9f0de958f8ec9b77ab42232437ed974856444cd22e20be35e91813bff4b016f810d0f61d89f6b614db33f34bd09985b593fe3e06e065b7bc6cd39d55c2cfbec7b6d59c0b37dd1d0d35135ab1d1b04f2f30c2f04f4ba2b36582738081cf59190f528363db944ed612931d1d514c6214f9ab92abb1833926183ac52fba2a4551e20e4c0ac959a49ddb167a381e0241d40c086e90e52aca017258975dbab2ba451ee539a718f076a58709c6697418d9c6f13e4d391368bf0e8bd8f2932dd95ceaf7aaca1241147d341a3acd08dc32905483572b89a80cc47231468ab8de359dd525a6257cf196c2ecb82fa8a78aa3a851c7c96ca25bf7ca3dcf3ca21453d0dfd3323d5a422dec84316102f684c359f226bb53779c0b9950939281ef79a58c011993eace085497afa4daf64c9687b0a11aa116cfa7b03936241a5567b646e7e42e9fb592405b8fa3c0a821fc3121b45b1753cec9a83947d211a45499bd63790b87f01472fe566d87696efedbb74ed00048c384ba7f027b3aa4298dc4110349fedf52a96cd05d08bd635771ed4510738d8f07a6021244d1903579a3ea739\",\n        \"signed\": \"98b0c6313cecaf7c82cbdeb3d0280641c61a060f65e563aa93ce18300a9b58272dc8680b485e8cd11cf80fdca868fab365378384a142727f2f844f87cfdf19054cac1b1f4bd48284dcc9afc8b5955b64b436db704b0335d9755cc1f97477f8d323cb6410ef146ab8a9efb9526d8b62e3bbad1f7295f47ba9f0de958f8ec9b77ab42232437ed974856444cd22e20be35e91813bff4b016f810d0f61d89f6b614db33f34bd09985b593fe3e06e065b7bc6cd39d55c2cfbec7b6d59c0b37dd1d0d35135ab1d1b04f2f30c2f04f4ba2b36582738081cf59190f528363db944ed612931d1d514c6214f9ab92abb1833926183ac52fba2a4551e20e4c0ac959a49ddb167a381e0241d40c086e90e52aca017258975dbab2ba451ee539a718f076a58709c6697418d9c6f13e4d391368bf0e8bd8f2932dd95ceaf7aaca1241147d341a3acd08dc32905483572b89a80cc47231468ab8de359dd525a6257cf196c2ecb82fa8a78aa3a851c7c96ca25bf7ca3dcf3ca21453d0dfd3323d5a422dec84316102f684c359f226bb53779c0b9950939281ef79a58c011993eace085497afa4daf64c9687b0a11aa116cfa7b03936241a5567b646e7e42e9fb592405b8fa3c0a821fc3121b45b1753cec9a83947d211a45499bd63790b87f01472fe566d87696efedbb74ed00048c384ba7f027b3aa4298dc4110349fedf52a96cd05d08bd635771ed4510738d8f07a6021244d1903579a3ea739\",\n        \"signature\": \"98b0c6313cecaf7c82cbdeb3d0280641c61a060f65e563aa93ce18300a9b58272dc8680b485e8cd11cf80fdca868fab365378384a142727f2f844f87cfdf1905\"\n    },\n    {\n        \"secret_key\": \"c85913a6877877131001623ccda9cdc12b9d4043b8a83793c44696632cd6421c\",\n        \"public_key\": \"9cc67c6948f7bf6e556d0849d3b8d203457a7b61549b36681d754f1dc0841e96\",\n        \"message\": \"91b5009e83d0f6103399c2d3feec0084973a305bf4176ec782537560472db187a11b4dcb4b2ffb7f0644feb394b28e5bfe97247c4a4a231cf6e916bf99344ccda88a7f5d831d6de3d563dd102eaeb108c5bdce44e0632d17e6fa55b18067df2fa8d200a9869f6aff920c51d46a1ced2d903b1d9b6b075facbf91cd05eb41ad811a8ef40d9118261012c72b8979f15153dbb8561293da9f8b77c8ff14f75387536f0036d1713a72ce8c35b1062f2c6732aebf32936799b51c2cbcd6572413e7dfaab8641a02c150237381cf7a14e22c74c6c20009de7d3b7e69cd1b4584ac2c01babaf973c56b3814bb0089720e41968106cf26509d4aa546fcad5534af303ffca42b16ae6c93ee06bc3cace12e4ec718844bd30d2224cc486d106d1c456bfa165ea0120fab3df2c5ab3a523bbfa789deed44032ab0be86eb7cc09cdb7c07aa948dd5277c3df1d9d1843567dec84f9288e085b05ae4b8af2cea5d9a184d50bef85550c836613d5d3af5f9c2928e6a89660fa62719ebff773e46b77e34bc0470da4d2cdbc7071da758c4d39fe65201c88aaa8e6603d0bbe7c3e9b2d9e41b634682092f147341ad6d667f20c64e81a68d629467a54dd86e1ce12c560a6f9b64512d6f3886cbb9f37c37eb3985c8ac38dd6682f48fe1\",\n        \"signed\": \"01fccfdb1fb6888b0310a913170f7e366816daebe7650d72513d9506e66f7d62208a49ece0af1871497f4541ef605bde711c9e0a1205ef48f26c03dc1ad4af0391b5009e83d0f6103399c2d3feec0084973a305bf4176ec782537560472db187a11b4dcb4b2ffb7f0644feb394b28e5bfe97247c4a4a231cf6e916bf99344ccda88a7f5d831d6de3d563dd102eaeb108c5bdce44e0632d17e6fa55b18067df2fa8d200a9869f6aff920c51d46a1ced2d903b1d9b6b075facbf91cd05eb41ad811a8ef40d9118261012c72b8979f15153dbb8561293da9f8b77c8ff14f75387536f0036d1713a72ce8c35b1062f2c6732aebf32936799b51c2cbcd6572413e7dfaab8641a02c150237381cf7a14e22c74c6c20009de7d3b7e69cd1b4584ac2c01babaf973c56b3814bb0089720e41968106cf26509d4aa546fcad5534af303ffca42b16ae6c93ee06bc3cace12e4ec718844bd30d2224cc486d106d1c456bfa165ea0120fab3df2c5ab3a523bbfa789deed44032ab0be86eb7cc09cdb7c07aa948dd5277c3df1d9d1843567dec84f9288e085b05ae4b8af2cea5d9a184d50bef85550c836613d5d3af5f9c2928e6a89660fa62719ebff773e46b77e34bc0470da4d2cdbc7071da758c4d39fe65201c88aaa8e6603d0bbe7c3e9b2d9e41b634682092f147341ad6d667f20c64e81a68d629467a54dd86e1ce12c560a6f9b64512d6f3886cbb9f37c37eb3985c8ac38dd6682f48fe1\",\n        \"signature\": \"01fccfdb1fb6888b0310a913170f7e366816daebe7650d72513d9506e66f7d62208a49ece0af1871497f4541ef605bde711c9e0a1205ef48f26c03dc1ad4af03\"\n    },\n    {\n        \"secret_key\": \"fa1e11dc8364208d8e1cb66a361be7e84c5e368166587d4fdb06aced7f62e17c\",\n        \"public_key\": \"4d8e6f4b3415df6cedabfb295c1984fd419923c6ac41764e32d22daf372c50fc\",\n        \"message\": \"294e63bacccb801bbf04c1f19d0aee16f5650a6e8eea6fe41110663ec01532bd4960a527f15eca4af2f4e6b7b0fc340cf97aa234e92cf7d69d50e4009c2496e3ed4d9aff000f9e185275b817d26a0bab69b7f7ee1ea30daec8bcee387ae46b4b299c27bdc06eea63f24dbee955a6c0969037eef91c34321e3c5c972fde993183b7d23f6e019c3e0cac7589ae4a1521af87ea42df8c22c2270ec23d6d140f9cf6d4d52fac1b9d6c8939ef8131cb62a035c5261538bcdfd6db419a55ef9fe5d7a5ac44579de700858d74a3434844f28342c565892722e27f407d7f17b74a5934be915b20c2400643235f8ab5795f324e33c50644a04033542cb3816d770fa899e7311c14301c1bd0f5aa60a2eb3165680c720e1efa8096fc25d2779275f1842b2db53b4da0ad3e59c07540c28460cec1fdd3cdb7a3478b91a9caf9ac891cdf3aeaeeca9a9656ac1307259922fca74c5cc69f7e25c6bf587973a4b7d3e3ac0635b0db22a0093a79076881c71736ee1d4d45f8ed2d29a0671a64e6ca2f7a5ef404b1edeb842034f571b699bc59e5a37df02054e8482bf1e7b77d8e8397da15d89d7355a5dce86b1683a9ac4e406c08a94a6eb00e5ae16d96722972e5c50c7bee4a84d0697bbe67ceb7ef295f06aaea5abba44466be0f67\",\n        \"signed\": \"e857db087e28d6750bf54e53797251d8439989576c12da2d9c811a14877c3bd46c4efab861a10eebe7da04c0b0b445c7a390a50c13de36f3a3c7ae0157022c0e294e63bacccb801bbf04c1f19d0aee16f5650a6e8eea6fe41110663ec01532bd4960a527f15eca4af2f4e6b7b0fc340cf97aa234e92cf7d69d50e4009c2496e3ed4d9aff000f9e185275b817d26a0bab69b7f7ee1ea30daec8bcee387ae46b4b299c27bdc06eea63f24dbee955a6c0969037eef91c34321e3c5c972fde993183b7d23f6e019c3e0cac7589ae4a1521af87ea42df8c22c2270ec23d6d140f9cf6d4d52fac1b9d6c8939ef8131cb62a035c5261538bcdfd6db419a55ef9fe5d7a5ac44579de700858d74a3434844f28342c565892722e27f407d7f17b74a5934be915b20c2400643235f8ab5795f324e33c50644a04033542cb3816d770fa899e7311c14301c1bd0f5aa60a2eb3165680c720e1efa8096fc25d2779275f1842b2db53b4da0ad3e59c07540c28460cec1fdd3cdb7a3478b91a9caf9ac891cdf3aeaeeca9a9656ac1307259922fca74c5cc69f7e25c6bf587973a4b7d3e3ac0635b0db22a0093a79076881c71736ee1d4d45f8ed2d29a0671a64e6ca2f7a5ef404b1edeb842034f571b699bc59e5a37df02054e8482bf1e7b77d8e8397da15d89d7355a5dce86b1683a9ac4e406c08a94a6eb00e5ae16d96722972e5c50c7bee4a84d0697bbe67ceb7ef295f06aaea5abba44466be0f67\",\n        \"signature\": \"e857db087e28d6750bf54e53797251d8439989576c12da2d9c811a14877c3bd46c4efab861a10eebe7da04c0b0b445c7a390a50c13de36f3a3c7ae0157022c0e\"\n    },\n    {\n        \"secret_key\": \"24a914ceb499e375e5c66777c1ed2043be56549d5e502a844710364042ba9acb\",\n        \"public_key\": \"20d21ee764b1f35f94568200d63bd5828aca8c5d3e9047d23f478b925295fa2e\",\n        \"message\": \"3ff9f66fa2646ec66a1bf933c2b4cc0fbf912b4d6db50534257f97d01e698d05485747de2544e9f5a4a4a075388cf4400ab89b0353ce86198202db3a903767b879a2af9daa155843111af15a2bc35efe41bcc92c8207e00113b04f1303007949ffb6ce8df4b0b34248fedf5d9cb2cee94b812ed58ece2a0ce0454cf14c20e49e09fe664d6e25762e87895932cd5cd32eb6a3abb38ee163078c133e93588791dbf6af499a31ea4453bbcc7a85e406c9848a664052f11113fbb4ffa760dee4c261e396942491119da29a33582f821d4125e0b4162f28beb066031a652d05749aa7244dd4f3d3bb15d268328d6a02fce2501815257f8ad5af4ecbe7cb8ae9661e344f9072318791f3e859091121e08aefca8982eaaf66259d9de4f46a31e716dc033d0f95d1fa936b6c6079b137dd1158d1def113018c73f8ebb9807e0f7415404ea9c78544ace7ce463cd1d1c57e31f4091bc091804cbcddad0e15a40ca91acbe1c6224ed13cafb4df2c84ac9f0c3c9b546007d9dd6e524c467072563d4ac0d700cc1bf30febb334313dae5761745ec0a5e9e8815025958f00fa2e58060d7e9a5f2b727f48699f929c8459930892573f784fef5692518b5ca268e2a73ebead6ebdeb7ec24eac92aa7dcb41b598bd6eff3632d069726291\",\n        \"signed\": \"3ae0cc7bca8d73be83a9b809b13338c12706aaef75c4d1a478178f9dc565514c7529e298043ea78d21a5a09dd04f10ae87441e5686a933c92c75548427ad3a033ff9f66fa2646ec66a1bf933c2b4cc0fbf912b4d6db50534257f97d01e698d05485747de2544e9f5a4a4a075388cf4400ab89b0353ce86198202db3a903767b879a2af9daa155843111af15a2bc35efe41bcc92c8207e00113b04f1303007949ffb6ce8df4b0b34248fedf5d9cb2cee94b812ed58ece2a0ce0454cf14c20e49e09fe664d6e25762e87895932cd5cd32eb6a3abb38ee163078c133e93588791dbf6af499a31ea4453bbcc7a85e406c9848a664052f11113fbb4ffa760dee4c261e396942491119da29a33582f821d4125e0b4162f28beb066031a652d05749aa7244dd4f3d3bb15d268328d6a02fce2501815257f8ad5af4ecbe7cb8ae9661e344f9072318791f3e859091121e08aefca8982eaaf66259d9de4f46a31e716dc033d0f95d1fa936b6c6079b137dd1158d1def113018c73f8ebb9807e0f7415404ea9c78544ace7ce463cd1d1c57e31f4091bc091804cbcddad0e15a40ca91acbe1c6224ed13cafb4df2c84ac9f0c3c9b546007d9dd6e524c467072563d4ac0d700cc1bf30febb334313dae5761745ec0a5e9e8815025958f00fa2e58060d7e9a5f2b727f48699f929c8459930892573f784fef5692518b5ca268e2a73ebead6ebdeb7ec24eac92aa7dcb41b598bd6eff3632d069726291\",\n        \"signature\": \"3ae0cc7bca8d73be83a9b809b13338c12706aaef75c4d1a478178f9dc565514c7529e298043ea78d21a5a09dd04f10ae87441e5686a933c92c75548427ad3a03\"\n    },\n    {\n        \"secret_key\": \"5532e09b937ffd3d5f4c1d9f1ffcded26ee74d4da075264844690bd9c8613994\",\n        \"public_key\": \"5093969f377bec3e35f59efda01ab4186c5d2a36740cf022675e01096b1a3f0a\",\n        \"message\": \"add4d7a9ce3f63d1f946e8679065545d8c7bf0a2cc3a4c00b8f142f0945ae362c4c9462a7576a4059d57861662884bd80b96d90d279a952eda952d37d4f95cf0d70da98f4fbaca39e169f9d945d41f872397bbdd5701454303d77d31e86348271da40a1b8f1e57c36fcd803e14fa17716c5631efa01d3a795dc20b2bde36ab73ff6a2d533bc15cce22328713c3c9ccd072c3e450d7f22c0c9f94919752cbfe45ee655d1b53676593cdb448704102631caaa976952eaa1f6c2e876564e420f0c646a0f88365f76415b4085f60a338b29c51633e540f0bf32d4087e7d0fb685be88c7595dc531c99b489584560ad8234b18e39a107cf5d842dabd421e77d26ea5e0f1405ce35fe792714eb4ee1a8017648ac1ae739a33d7b1e089105d1e5add27a62ce64154570340af9eb14e7fdfc2f9a2c2fcfcdac3cc4227763f4d629497479f849216e5d90ec16dfa36b72517f7b5486baee7fda4450c352cffbbae73926c843224f8ce44b38dae53f3ead21890b52a7801075291684fd5910ed86ad33e8a007f6c3f85c16b209293740184f5890874d431cd4e0ea4087c49c3471d789c813c6dc9a78699363a1d87197d3b92c0286689311823f4df22ce8035e75732cdea7f5621f67db0e2a4ca6616193221c0aa3d6de50d85282ee\",\n        \"signed\": \"d527ff0d4a219d61f418121206a54ae4985854a310482744486e4d130a7de97c319df8372c82828c936e6a8afd9c5de1828573d8261ae9365b8f237676182402add4d7a9ce3f63d1f946e8679065545d8c7bf0a2cc3a4c00b8f142f0945ae362c4c9462a7576a4059d57861662884bd80b96d90d279a952eda952d37d4f95cf0d70da98f4fbaca39e169f9d945d41f872397bbdd5701454303d77d31e86348271da40a1b8f1e57c36fcd803e14fa17716c5631efa01d3a795dc20b2bde36ab73ff6a2d533bc15cce22328713c3c9ccd072c3e450d7f22c0c9f94919752cbfe45ee655d1b53676593cdb448704102631caaa976952eaa1f6c2e876564e420f0c646a0f88365f76415b4085f60a338b29c51633e540f0bf32d4087e7d0fb685be88c7595dc531c99b489584560ad8234b18e39a107cf5d842dabd421e77d26ea5e0f1405ce35fe792714eb4ee1a8017648ac1ae739a33d7b1e089105d1e5add27a62ce64154570340af9eb14e7fdfc2f9a2c2fcfcdac3cc4227763f4d629497479f849216e5d90ec16dfa36b72517f7b5486baee7fda4450c352cffbbae73926c843224f8ce44b38dae53f3ead21890b52a7801075291684fd5910ed86ad33e8a007f6c3f85c16b209293740184f5890874d431cd4e0ea4087c49c3471d789c813c6dc9a78699363a1d87197d3b92c0286689311823f4df22ce8035e75732cdea7f5621f67db0e2a4ca6616193221c0aa3d6de50d85282ee\",\n        \"signature\": \"d527ff0d4a219d61f418121206a54ae4985854a310482744486e4d130a7de97c319df8372c82828c936e6a8afd9c5de1828573d8261ae9365b8f237676182402\"\n    },\n    {\n        \"secret_key\": \"eb36511009d37a9c46c4d1374d0bbd0d9981e78cee7d188c5aab983ec239e10c\",\n        \"public_key\": \"b1cc212b4521bbe7b19a7693878a558440eec36205d8439d040a46a9902fbf55\",\n        \"message\": \"ba2466e56c1df77f22b6f0241fc7952ae9bc24756419a9446dd2b49e2cb9df594e5b6c77a95aa5fbd9dc57fec83962c7751eebb4ba218253f916a922a5139663e3203e3be482be379ca151c463d9ada21446135f356994fa5449f084478f5bb4f5ba6145c5158eb7b1c43c32ebea25e09c900f01ef91e92f88c03c76504ace9646016ffc2789559d0f3cc9d00fb61bdc6af7d3940f302e588e04f79f7b3d4b91a5d193a4f8222bfeb69bf0347d98ad81ef99d130ebc7b36b0783394eea92a38ddd5e7480d2add4e4def53eb99c449bff94e4718b09f2ea9b1f2b886594a95c33a69e0333154e440ab34b7b6c1134d8179b6f0c56251a9ad8e1b6b0f9b8a5c97081a7f8fd05d0b0affc82dbddc8b0c0ab7e833f300626d4b973b3f60feac55571e89cda0f2b441ed2faa669a70d556cb48f9b1d1cbce32ede5d166b1143e264b11ea327681cb559edd13c364bd2baf1fd54bb781807bd59c868b0e4795a779e67f0bd0d14b5a6b9e440b57a5823328b59affbd027eda7dd785079c5f02b5e32890b038730986a39a5a9834a3fed868b6f45cbdd28acb2709aff556263864f9ae1e757b3278c288dbe2932825712773e431f7c29329857fdaea798ed93920893631402e6b13bab62b4855461edb94620f2d1751865f445c466\",\n        \"signed\": \"9f583724de552eae82f254ac6e2ed483ec1a07346266735c490920690c1e3fb2a9e9a34194ed6473733b300d4f23c9aec0da5a2022054ca43885a15a2984320eba2466e56c1df77f22b6f0241fc7952ae9bc24756419a9446dd2b49e2cb9df594e5b6c77a95aa5fbd9dc57fec83962c7751eebb4ba218253f916a922a5139663e3203e3be482be379ca151c463d9ada21446135f356994fa5449f084478f5bb4f5ba6145c5158eb7b1c43c32ebea25e09c900f01ef91e92f88c03c76504ace9646016ffc2789559d0f3cc9d00fb61bdc6af7d3940f302e588e04f79f7b3d4b91a5d193a4f8222bfeb69bf0347d98ad81ef99d130ebc7b36b0783394eea92a38ddd5e7480d2add4e4def53eb99c449bff94e4718b09f2ea9b1f2b886594a95c33a69e0333154e440ab34b7b6c1134d8179b6f0c56251a9ad8e1b6b0f9b8a5c97081a7f8fd05d0b0affc82dbddc8b0c0ab7e833f300626d4b973b3f60feac55571e89cda0f2b441ed2faa669a70d556cb48f9b1d1cbce32ede5d166b1143e264b11ea327681cb559edd13c364bd2baf1fd54bb781807bd59c868b0e4795a779e67f0bd0d14b5a6b9e440b57a5823328b59affbd027eda7dd785079c5f02b5e32890b038730986a39a5a9834a3fed868b6f45cbdd28acb2709aff556263864f9ae1e757b3278c288dbe2932825712773e431f7c29329857fdaea798ed93920893631402e6b13bab62b4855461edb94620f2d1751865f445c466\",\n        \"signature\": \"9f583724de552eae82f254ac6e2ed483ec1a07346266735c490920690c1e3fb2a9e9a34194ed6473733b300d4f23c9aec0da5a2022054ca43885a15a2984320e\"\n    },\n    {\n        \"secret_key\": \"7dbc81902e4eaab3077540f559995c387403cac306d486e959c5eb59e431c0a8\",\n        \"public_key\": \"e03066139082f613448bdbc27fe53aa3f88994c31ddce002e36bbb2963df3ec8\",\n        \"message\": \"dff798b1557b17085a0634371ded5ddf7a5acb996ef9035475e6826336f64ad8b84b882e30badec2b4a711998752f4a1574bc1f89d4325cf2b39861044dd03691e71d07768b5933a3052cc7c81d571a9de061dc19026c2f1e701f2dcf26a88d3401bc99fb81559dca76d8a31a92044a273587d622a08d1cce61c8f948a34ded1acb318881c9b49f6f37c30a65d495b02d5429e7ab4040d8bebeb78794ff736d1511031a6d67a22cdf341b980811c9d775fb19c6478f05ed98430103ea24c0f414d4cc07d860b72dc542ff22d83845a42f8ba45ca7ff3aab0b1e7de2b1094deac08d16eee01969f91bc16fec29ccc061c54db5345ba64842dacc99ee7729468d80a3f095583d8e8012408519d582cc3ff9a2eb7aebaa22db81ffc78ee90ef4ec589dcce87118dab31a6328e409ad5059a5132c82df3cefe2e4014e476f04c3a7018e45267ec5018ecd7bff1dda9267e90666b6b1417e89ddacb5085943befc7ad2f4df5f1ee0af9431aeeb6b24a5515b93dbcf68640f7daf8c961e567d7534900205c3df2184b6ac2da961c4c1d2bc49b4ea96b8154ffd4efffdc5e55a7119cb8af429e85105dffd41fe4a2ebba48168aa05fa7df27c4298735ff868f1496beb4b2ed0b8980c75ffd939ddd1a17e44a44fe3b02795339b08c8d\",\n        \"signed\": \"5b7f652f08f229fda1b0bd759377b3fb726c1b9c9a10ef63426d352dd0869bd54d876c3092f1cd411c3757d3c6b6ea942aa70c3aaeb4217a4c7364d18e76e50fdff798b1557b17085a0634371ded5ddf7a5acb996ef9035475e6826336f64ad8b84b882e30badec2b4a711998752f4a1574bc1f89d4325cf2b39861044dd03691e71d07768b5933a3052cc7c81d571a9de061dc19026c2f1e701f2dcf26a88d3401bc99fb81559dca76d8a31a92044a273587d622a08d1cce61c8f948a34ded1acb318881c9b49f6f37c30a65d495b02d5429e7ab4040d8bebeb78794ff736d1511031a6d67a22cdf341b980811c9d775fb19c6478f05ed98430103ea24c0f414d4cc07d860b72dc542ff22d83845a42f8ba45ca7ff3aab0b1e7de2b1094deac08d16eee01969f91bc16fec29ccc061c54db5345ba64842dacc99ee7729468d80a3f095583d8e8012408519d582cc3ff9a2eb7aebaa22db81ffc78ee90ef4ec589dcce87118dab31a6328e409ad5059a5132c82df3cefe2e4014e476f04c3a7018e45267ec5018ecd7bff1dda9267e90666b6b1417e89ddacb5085943befc7ad2f4df5f1ee0af9431aeeb6b24a5515b93dbcf68640f7daf8c961e567d7534900205c3df2184b6ac2da961c4c1d2bc49b4ea96b8154ffd4efffdc5e55a7119cb8af429e85105dffd41fe4a2ebba48168aa05fa7df27c4298735ff868f1496beb4b2ed0b8980c75ffd939ddd1a17e44a44fe3b02795339b08c8d\",\n        \"signature\": \"5b7f652f08f229fda1b0bd759377b3fb726c1b9c9a10ef63426d352dd0869bd54d876c3092f1cd411c3757d3c6b6ea942aa70c3aaeb4217a4c7364d18e76e50f\"\n    },\n    {\n        \"secret_key\": \"91b095c8a999e03f3ed749cd9f2faacc0076c3b477a87ab5ccd6631738767446\",\n        \"public_key\": \"dad174d359daecca9c6b389ba096452ab5ca91e6383c6d042a284ece16ba97b6\",\n        \"message\": \"9b0d8b00299852d68bbf497fe603961a485466a99a5484005db73d4e4bad814e8574efd54d648bd5c91ae8483c54b2f998b02e1abd6f401a25526843a5f2a23a97bd589d1f7e1ab14915b1e359a396d352c360ae6584325ae4bb7d624f61255c5c7bf0a67acab46c3b57b34534c0ee8431d260576606cbd84d8d1839e73da6fe4b0b8b78f0f958827c2f1d93ba7a346dcc75cb563dffde26f997598e8b5c2f1617c6fefc9be4b28b5401b0006413a251690d1203aaae4f6d8a3fb21f24009ab3bff13737a8a7e6646c02732d9ec5a4a510469e2d299e4cc1ad6480a482aa956f89ddcccc64a136fb15b876b6ecd88c7c86a4dfc60e666207c604167d163440ca9ab9cf87a5e0f7bbc5517de4dee876c037f8cc9d959c8ff5dbe944ff54cd91a771e29231f8b5f17d61de904c955fe2025dc52ed480fb3cc90f232459c607ef7e2adb52c7482becd67ad2149a4128f984038b58aa90176782393604aac74c18209a3d6a78630c01955a7cece5da8384da3baf63aa2ddf5963fae05ba3b81c6a03d86a00ef78edb4184fdc89b1d6bfeb310fd1b5fcce1e219524a3cfb2e972577f06b1dddeba00865dae4979000c008ad99f3b638cceb8e8c7a0f998d34d92143d81c0e1c096a925ceba65c43003ee18d494d003e9c61f77d65759\",\n        \"signed\": \"64ee9efdb0c2601a835f418520641e436c7dd47c333d9fc30cfbb9e390fe764530654708b40b03581899a9ac870efd766ffbb4637152f8ff277964fe354252099b0d8b00299852d68bbf497fe603961a485466a99a5484005db73d4e4bad814e8574efd54d648bd5c91ae8483c54b2f998b02e1abd6f401a25526843a5f2a23a97bd589d1f7e1ab14915b1e359a396d352c360ae6584325ae4bb7d624f61255c5c7bf0a67acab46c3b57b34534c0ee8431d260576606cbd84d8d1839e73da6fe4b0b8b78f0f958827c2f1d93ba7a346dcc75cb563dffde26f997598e8b5c2f1617c6fefc9be4b28b5401b0006413a251690d1203aaae4f6d8a3fb21f24009ab3bff13737a8a7e6646c02732d9ec5a4a510469e2d299e4cc1ad6480a482aa956f89ddcccc64a136fb15b876b6ecd88c7c86a4dfc60e666207c604167d163440ca9ab9cf87a5e0f7bbc5517de4dee876c037f8cc9d959c8ff5dbe944ff54cd91a771e29231f8b5f17d61de904c955fe2025dc52ed480fb3cc90f232459c607ef7e2adb52c7482becd67ad2149a4128f984038b58aa90176782393604aac74c18209a3d6a78630c01955a7cece5da8384da3baf63aa2ddf5963fae05ba3b81c6a03d86a00ef78edb4184fdc89b1d6bfeb310fd1b5fcce1e219524a3cfb2e972577f06b1dddeba00865dae4979000c008ad99f3b638cceb8e8c7a0f998d34d92143d81c0e1c096a925ceba65c43003ee18d494d003e9c61f77d65759\",\n        \"signature\": \"64ee9efdb0c2601a835f418520641e436c7dd47c333d9fc30cfbb9e390fe764530654708b40b03581899a9ac870efd766ffbb4637152f8ff277964fe35425209\"\n    },\n    {\n        \"secret_key\": \"8c568b310ace7d1f0edecefd603a884000544c792565d481c3d3e06e2d82ca96\",\n        \"public_key\": \"5fa6e267c766736841411072d1983d1900acf01d48c3ce11770b26f78da979f7\",\n        \"message\": \"b59f5fe9bb4ecff9289594721f2647047b0da5e0e4941bbe57c5b722b476723f0ac5970b4111f893bcaa411f28fceb4f585a2a7187018a904b70ef8fe1f6569a54d00ada37b69cb5e9c9d26c16a903518148e04a1b936a32329c94ee1a8fb6b591892c3aff00bf6e44dd0a762babe89d7060c17b90390d23bf9d360a293b8308383086916e1182b1ba4336f001b8d20deae9a029f7e85397a9ae5cf3ca10c7f3875588b8ffabb063c00ca26f580f69edc527a1accf4f41397b33766bcf6d55eb8de081a48c981d05c066617b80d8f6f5e60e59dd9b930bc4d04586403bb868df75933bdd86230e447036c175a10de9bb39953dcb1966a1f11912078e358f48c5b209a636c7f783f4d36a93ad2cc2e3244519078e99de1d5158b3961e0fc5a4f260c25f45f5e8585e601db08ba058d2909a1bf4995f4813460d369503c6873685ebcd3330a130b75f2365fb2a5a34ea63d958a2a867e90552d2cec8c390084be0c108b0fd2d83cb9284db5b842cbb5d0c3f6f1e2603c9c30c0f6a9b118e1a143a15e319fd1b607152b7cc0547497954c1f729199d0b23e53865403b0ad680e9b45369a6aa38d6685abd397f07fbca40627ecaf8d8d30133a6d9d5af009192751c9c45f77c0bc011268800bf552512730e69973c5bf362ab164894bf\",\n        \"signed\": \"debdd8e5d3112fd77b394aa0e36e9426bac91df126fa9c317cea7c9d45957cdd96a45ae3ad760413ee1205afd71a29f9c3cb586cd2d7cd1e93bc1652fc34dc04b59f5fe9bb4ecff9289594721f2647047b0da5e0e4941bbe57c5b722b476723f0ac5970b4111f893bcaa411f28fceb4f585a2a7187018a904b70ef8fe1f6569a54d00ada37b69cb5e9c9d26c16a903518148e04a1b936a32329c94ee1a8fb6b591892c3aff00bf6e44dd0a762babe89d7060c17b90390d23bf9d360a293b8308383086916e1182b1ba4336f001b8d20deae9a029f7e85397a9ae5cf3ca10c7f3875588b8ffabb063c00ca26f580f69edc527a1accf4f41397b33766bcf6d55eb8de081a48c981d05c066617b80d8f6f5e60e59dd9b930bc4d04586403bb868df75933bdd86230e447036c175a10de9bb39953dcb1966a1f11912078e358f48c5b209a636c7f783f4d36a93ad2cc2e3244519078e99de1d5158b3961e0fc5a4f260c25f45f5e8585e601db08ba058d2909a1bf4995f4813460d369503c6873685ebcd3330a130b75f2365fb2a5a34ea63d958a2a867e90552d2cec8c390084be0c108b0fd2d83cb9284db5b842cbb5d0c3f6f1e2603c9c30c0f6a9b118e1a143a15e319fd1b607152b7cc0547497954c1f729199d0b23e53865403b0ad680e9b45369a6aa38d6685abd397f07fbca40627ecaf8d8d30133a6d9d5af009192751c9c45f77c0bc011268800bf552512730e69973c5bf362ab164894bf\",\n        \"signature\": \"debdd8e5d3112fd77b394aa0e36e9426bac91df126fa9c317cea7c9d45957cdd96a45ae3ad760413ee1205afd71a29f9c3cb586cd2d7cd1e93bc1652fc34dc04\"\n    },\n    {\n        \"secret_key\": \"3d09afcee3c432fdfb6bdcead54e3da5b1b4165c50d6d310b7fad787b444d680\",\n        \"public_key\": \"b0d9028c4d1487d293ed585a76bc94fffbafe2c65d980c494e141e4810a35cb9\",\n        \"message\": \"767165caae0e578f16537e1750be7de87a789a51ff2de11838f564e2580b2391362d2868a5a4708af15d2e2db7b9be39c16adcc1200b34e6b4d4027ddffc1a2a3595e29e855ec5261b20bd55c428b01309badb59e2ca3edb967fc2f4bac0729ddf54fb6c20057bdda9e7af7cbfc092fba865fd3275b9d3bcb0c346b951d170ac9aa650a86df49855d48a1b37ce56c9f27389f5c8b15f5c2c900c4f107c064f603e4f867ef2e9c10a1b74210e6b89bb011793aa85ded43b51b749ba7f70287b6bc1b89434db8b8c8b5d73b214b41e36b528005bfbfe002e21b1006fb9d24babd72106d093e3c7093b3138aea719d69479084647498cd6c9bbb744509cd7da8dd61a627100f03c21e750acb3fcf4631d7c0f618154d2e5fa6656fb76f74c24795047bbce4579eb110643fa98e1f776ca76d7a2b7b7b8678173c773f4be7e182fd24dd76291ac67d9f26a28c5e3cb025c6813a378b383224642b4aefad0c76a6579517b8f360797dd22613ee682b179381950fb71609a5fb5494d2d57dcb00f26d1e72956f4d6672830e05c01b3779677c07ea00953c6b8f0dc204c8dbdccb381bc01b89c5c261db189ab1f54e46bc3edc4de5ad4f0eb29c0a120e437cd8f37ac67d48c7f0e730278708f02b54aee62b72952bc1c0eb437ca8bd5655437\",\n        \"signed\": \"89739fe441ca0ced08a6eb5796e9bdda0e74fb473528fd4907edb659aab44d3343229046716368faf88e85c1644af66ff2dcaf0b17ac93ca13819f3f241dd300767165caae0e578f16537e1750be7de87a789a51ff2de11838f564e2580b2391362d2868a5a4708af15d2e2db7b9be39c16adcc1200b34e6b4d4027ddffc1a2a3595e29e855ec5261b20bd55c428b01309badb59e2ca3edb967fc2f4bac0729ddf54fb6c20057bdda9e7af7cbfc092fba865fd3275b9d3bcb0c346b951d170ac9aa650a86df49855d48a1b37ce56c9f27389f5c8b15f5c2c900c4f107c064f603e4f867ef2e9c10a1b74210e6b89bb011793aa85ded43b51b749ba7f70287b6bc1b89434db8b8c8b5d73b214b41e36b528005bfbfe002e21b1006fb9d24babd72106d093e3c7093b3138aea719d69479084647498cd6c9bbb744509cd7da8dd61a627100f03c21e750acb3fcf4631d7c0f618154d2e5fa6656fb76f74c24795047bbce4579eb110643fa98e1f776ca76d7a2b7b7b8678173c773f4be7e182fd24dd76291ac67d9f26a28c5e3cb025c6813a378b383224642b4aefad0c76a6579517b8f360797dd22613ee682b179381950fb71609a5fb5494d2d57dcb00f26d1e72956f4d6672830e05c01b3779677c07ea00953c6b8f0dc204c8dbdccb381bc01b89c5c261db189ab1f54e46bc3edc4de5ad4f0eb29c0a120e437cd8f37ac67d48c7f0e730278708f02b54aee62b72952bc1c0eb437ca8bd5655437\",\n        \"signature\": \"89739fe441ca0ced08a6eb5796e9bdda0e74fb473528fd4907edb659aab44d3343229046716368faf88e85c1644af66ff2dcaf0b17ac93ca13819f3f241dd300\"\n    },\n    {\n        \"secret_key\": \"41c1a2df9369cdc927164aa5adf7757136abe51395604266334cc5460ad5683e\",\n        \"public_key\": \"40557834cce8e043580a4272a8804d4f926e88cb10d1df0c5e28b9b67e1b63da\",\n        \"message\": \"b64b14ba77d239e6f81abe060accef85f0442b650c44015efc43a0aa2ba10bf48d3018b1953ddfffbcda5bf3bbe0b6b3e4b0d9a32c6b725bbb231e0a2704471ee8bc1d594f5c54226f5dd9dfa163cfc1452c61f93e4f8139ab4ce4476f07ec933661eae91b6d500bf508ac63e4baaf1ffc8f0007d802e005f1b4fc1c88bee4d5e9e76384f5a7043bd660cce71f3b67f01f6ab844298531aac73a39d045370088855005a09c6d04238ea478dfacad1e6b22b2be4c46b0d59b1eba1f060bf7da5d1566cf1fdb5c543a33926af63f01a0db86e1a6711c473dc795ab283c8d93facfb5701fa2f2f6bb99f9b7e3749b071d58607be44a7089bcb503ec1495b5feedb399961fd3677d7493eaa3b3e9cc5e3642f40d47de9bfee7c20b0e519c4eb4a40f4da446ed6ac7aaca053e759c97dabe0a8ec2f58e7f2f9b2072762f9f794a6a4e36060b8872bd2c18d06a85c2c141a78293773ee8cfbf154b9930cd39da31b497e737a7750c90a13f5aaa147cd0dc4311f2e34941252ef198b0c1f50827e56c9f16f595aced6d2a69346531495a6499774d360766ca9be5ed8881c0db26ed7c5e6ff3a4f9b73cd8b654640dc96bf43bd426a0f28c9b25fa704d62ff0288fcceffaaebd3ea3097bcbbd778420ebc520a417730a1b5b3b8c96cda9f4e177d\",\n        \"signed\": \"b8b2752a097196c289849d78f811d9a62fc767278f0c46628b521f62ed2759d74462a175da22403f15020445cae06da3ed61cca6203b7006362a0e198963d20eb64b14ba77d239e6f81abe060accef85f0442b650c44015efc43a0aa2ba10bf48d3018b1953ddfffbcda5bf3bbe0b6b3e4b0d9a32c6b725bbb231e0a2704471ee8bc1d594f5c54226f5dd9dfa163cfc1452c61f93e4f8139ab4ce4476f07ec933661eae91b6d500bf508ac63e4baaf1ffc8f0007d802e005f1b4fc1c88bee4d5e9e76384f5a7043bd660cce71f3b67f01f6ab844298531aac73a39d045370088855005a09c6d04238ea478dfacad1e6b22b2be4c46b0d59b1eba1f060bf7da5d1566cf1fdb5c543a33926af63f01a0db86e1a6711c473dc795ab283c8d93facfb5701fa2f2f6bb99f9b7e3749b071d58607be44a7089bcb503ec1495b5feedb399961fd3677d7493eaa3b3e9cc5e3642f40d47de9bfee7c20b0e519c4eb4a40f4da446ed6ac7aaca053e759c97dabe0a8ec2f58e7f2f9b2072762f9f794a6a4e36060b8872bd2c18d06a85c2c141a78293773ee8cfbf154b9930cd39da31b497e737a7750c90a13f5aaa147cd0dc4311f2e34941252ef198b0c1f50827e56c9f16f595aced6d2a69346531495a6499774d360766ca9be5ed8881c0db26ed7c5e6ff3a4f9b73cd8b654640dc96bf43bd426a0f28c9b25fa704d62ff0288fcceffaaebd3ea3097bcbbd778420ebc520a417730a1b5b3b8c96cda9f4e177d\",\n        \"signature\": \"b8b2752a097196c289849d78f811d9a62fc767278f0c46628b521f62ed2759d74462a175da22403f15020445cae06da3ed61cca6203b7006362a0e198963d20e\"\n    },\n    {\n        \"secret_key\": \"a00611489467122c4c164bfb6a616e6a619b9f83c4367206b85d3fbec38cd62c\",\n        \"public_key\": \"57ab58babb41dc0da0bcd506059aac9f46eca91cd35a61f1ba049a9ac227f3d9\",\n        \"message\": \"34db02ed7512bf8c67d359e7203a2ea441e20e729766c15aa00fa249a3518fc29ef8905aa5b4670958c6a460d77b3a80efcb473859bbaff862223eee52fe58acfd3315f150f3c6c27ff48fca76552f98f6585b5e793308bf5976bad6ee327b4a7a313214b9ae04b9651b63cd8d9f5b3bec689e0fd000dd501770dd0e99b8f99eafa09c396a245a4a96e56896a29b24190b1ef11063f39b63ee3a586b07627dd3500c4e170b835dc0ec236fa5a35c44184707565c4a50662d8dbccfff7f9a7a68d021b4af64d532b7c3d2747418c2d717bb6aca6b58747ae4dd5641d826f79a8a315c38211a538a929e5b451f623f4fcbbcacdb86c8752ea13a617ab414ab653eb2e68d5420df7c6df92438168dcf9c066581dfe7b2c468194a23707de4659bd67eb634ff024741c5fc8698fd4dc41fe5dfc6299b7a08e6ffca37109c0210c8f94ea2d3ddc977ffc0b3794fe6ba4337c7aab434a68ac665484ea8243a84b79aa181ee6ab5aa37a32d879725edc018f8552181816d7d272ca8818a7b92e6ee4454d1f7828dd8afba1a790364b4ff28d84e028597353ebbef24837bc319e1ae8f2b0b6a851b489c3e170eef53e065f7032653cd6b46d8e57e4e111b789ba950c4230aba35e569e06615403407bce0369aaab4eafaef0cae109ac4cb838fb6c1\",\n        \"signed\": \"c771ba0a3d3c4a7b064bd51ad05c9ff27fd326610fbfa09183039e5edf35472dded8fc2275bbcc5df1bf129860c01a2c1311da602fbaffc8b79c249c9cc9550234db02ed7512bf8c67d359e7203a2ea441e20e729766c15aa00fa249a3518fc29ef8905aa5b4670958c6a460d77b3a80efcb473859bbaff862223eee52fe58acfd3315f150f3c6c27ff48fca76552f98f6585b5e793308bf5976bad6ee327b4a7a313214b9ae04b9651b63cd8d9f5b3bec689e0fd000dd501770dd0e99b8f99eafa09c396a245a4a96e56896a29b24190b1ef11063f39b63ee3a586b07627dd3500c4e170b835dc0ec236fa5a35c44184707565c4a50662d8dbccfff7f9a7a68d021b4af64d532b7c3d2747418c2d717bb6aca6b58747ae4dd5641d826f79a8a315c38211a538a929e5b451f623f4fcbbcacdb86c8752ea13a617ab414ab653eb2e68d5420df7c6df92438168dcf9c066581dfe7b2c468194a23707de4659bd67eb634ff024741c5fc8698fd4dc41fe5dfc6299b7a08e6ffca37109c0210c8f94ea2d3ddc977ffc0b3794fe6ba4337c7aab434a68ac665484ea8243a84b79aa181ee6ab5aa37a32d879725edc018f8552181816d7d272ca8818a7b92e6ee4454d1f7828dd8afba1a790364b4ff28d84e028597353ebbef24837bc319e1ae8f2b0b6a851b489c3e170eef53e065f7032653cd6b46d8e57e4e111b789ba950c4230aba35e569e06615403407bce0369aaab4eafaef0cae109ac4cb838fb6c1\",\n        \"signature\": \"c771ba0a3d3c4a7b064bd51ad05c9ff27fd326610fbfa09183039e5edf35472dded8fc2275bbcc5df1bf129860c01a2c1311da602fbaffc8b79c249c9cc95502\"\n    },\n    {\n        \"secret_key\": \"de1634f3460e02898db53298d6d3821c60853adee2d7f3e8edd8b0239a48cfaf\",\n        \"public_key\": \"9dc1465b3383f37de00ea2d3c70f2c8fac815f0172029c3f579579c984a5895e\",\n        \"message\": \"d10c3e4de7fa2989dba87537e00593d0eed4d75ee65846dab1498b4749d64f40e34b5911c5ce3b53a7e37d2d02bb0dae38ed962a4edc86c00207bee9a8e456eccae8bdf4d87a76746014201af6caffe10566f08d10daaf077160f011feaca25b9c1f6eca9fc53314a80547951754355525257d09a7fdad5bc321b72aa28d1e02d8696d4f9eb0ad3b2196f8bcfaeb1d6148287a3faefef91a7a3e0609c28ce59d0ca14d0b3050dd4f096b7bc2513988ba212128d5026daaa7188846db21c5c1d179ab9487c1a5bd346588127c20398d362d4c759cfab2a677750b9e45676a1e7e092ef02edbf278fb19a58e9bf6c9e996e24edad73f3ce31fa04b6d8533436bf80b4b2f805ed91e7fcda3bc2bab3b2bb157158af0ea8e3f0731dfad459d2e79b6d3715fe7bf1eafc5397593208857e57b7feb2f7387943a8e0913470c161aef4fe205d3637f23177ff26304a4f64eba3fe6f7f272d234a67206a388ddd0366e894eaa4bb05d73a475f1b34ca222bbce1685b1b56e034e43b3c40e81fff79682c19f32aa3f2a895c0709f9f74a4d59d3a49029ecfcb283082b067f1a0d9505750fd867321999484249efa725f52c94c7596206a911f3f505d63f0313254bd445f05be3996b58fe1819af87352e7f0a2ca320d9cc00a5fe77ad41640d50be8436\",\n        \"signed\": \"d20506eb846923a0b16ff82fb2c3923b00c1b3bcc6e2f6482fba24807521e8e0223f692e62eac993f498f67102a04fd1acf9c7e3888d857c9a080b8af6361006d10c3e4de7fa2989dba87537e00593d0eed4d75ee65846dab1498b4749d64f40e34b5911c5ce3b53a7e37d2d02bb0dae38ed962a4edc86c00207bee9a8e456eccae8bdf4d87a76746014201af6caffe10566f08d10daaf077160f011feaca25b9c1f6eca9fc53314a80547951754355525257d09a7fdad5bc321b72aa28d1e02d8696d4f9eb0ad3b2196f8bcfaeb1d6148287a3faefef91a7a3e0609c28ce59d0ca14d0b3050dd4f096b7bc2513988ba212128d5026daaa7188846db21c5c1d179ab9487c1a5bd346588127c20398d362d4c759cfab2a677750b9e45676a1e7e092ef02edbf278fb19a58e9bf6c9e996e24edad73f3ce31fa04b6d8533436bf80b4b2f805ed91e7fcda3bc2bab3b2bb157158af0ea8e3f0731dfad459d2e79b6d3715fe7bf1eafc5397593208857e57b7feb2f7387943a8e0913470c161aef4fe205d3637f23177ff26304a4f64eba3fe6f7f272d234a67206a388ddd0366e894eaa4bb05d73a475f1b34ca222bbce1685b1b56e034e43b3c40e81fff79682c19f32aa3f2a895c0709f9f74a4d59d3a49029ecfcb283082b067f1a0d9505750fd867321999484249efa725f52c94c7596206a911f3f505d63f0313254bd445f05be3996b58fe1819af87352e7f0a2ca320d9cc00a5fe77ad41640d50be8436\",\n        \"signature\": \"d20506eb846923a0b16ff82fb2c3923b00c1b3bcc6e2f6482fba24807521e8e0223f692e62eac993f498f67102a04fd1acf9c7e3888d857c9a080b8af6361006\"\n    },\n    {\n        \"secret_key\": \"c738ef5f0935281ba625fa4014d4a4d0be7e28fed779a9cf658e21dba43cebc1\",\n        \"public_key\": \"95799faf706d195e544c76cafddf09d02d1beafc42c9d6c9ead4c1845587d39e\",\n        \"message\": \"168d0bc5598be02f5443bfe7dfb8829985ca5d282af9cf1b1482602f243d486bd82ba039a0750909e9b3c7d4d5f8b8baf45718af0311854f4d1c7837f31d8ee68d3558e7e51e0c646a4a637596ee90057b01ed0a17daa3950b81ab47ae8b94c17d40746913c46ba1478bfca51b167628fc3ee1e22f2f19d6d8daf93df6540cedb7a859d1a2ba5911ba71766e8b7fce0c0e8663616d0180697d78ce3040d438131982f3f8112acca29ae53e539ff8c9ec4106d132f402018518308485f2aa6c9e8d1e62fed60cb249457db33c6fd1fe07445361f08194a2b5a057cb03cc754e5c7d4a7eea53a7f7d207cacca5e68cafa969a3521dbb810399a17f328ee767cf55926b2bd5f029549d3b464579c42655265398472e1c77cc8dd9aff187f7ac34dd456ace999a736ecca6d405d4922c779c600c47b84c9c1df5e5f8ed3b2811d351339113f8453cca4c4411688cb0388258ebbd1872b83610042249494ed560d4cda6a68455d957e806dd0bdd83004c4ca80774b8a0a1665866f17085014eadb3eae7382fa870deb29dd8c931b53019625740e28392f38575c0e2a9e504fc35bd95df56439a898230a2398cd2225c766ef36f12ae7e49b30a9c0aad469d5895bbf721cc0ff51d840c802d4a7eefba84fe5205a2c2f14011922dde561456f79e6161\",\n        \"signed\": \"f44371e6c3391639d457ed14648184809411e80a3201f8811670e500fcad92f300aabf7fc68e440191e881d6c3474efd6d28f09dc44312fcfcb82701ba3c290a168d0bc5598be02f5443bfe7dfb8829985ca5d282af9cf1b1482602f243d486bd82ba039a0750909e9b3c7d4d5f8b8baf45718af0311854f4d1c7837f31d8ee68d3558e7e51e0c646a4a637596ee90057b01ed0a17daa3950b81ab47ae8b94c17d40746913c46ba1478bfca51b167628fc3ee1e22f2f19d6d8daf93df6540cedb7a859d1a2ba5911ba71766e8b7fce0c0e8663616d0180697d78ce3040d438131982f3f8112acca29ae53e539ff8c9ec4106d132f402018518308485f2aa6c9e8d1e62fed60cb249457db33c6fd1fe07445361f08194a2b5a057cb03cc754e5c7d4a7eea53a7f7d207cacca5e68cafa969a3521dbb810399a17f328ee767cf55926b2bd5f029549d3b464579c42655265398472e1c77cc8dd9aff187f7ac34dd456ace999a736ecca6d405d4922c779c600c47b84c9c1df5e5f8ed3b2811d351339113f8453cca4c4411688cb0388258ebbd1872b83610042249494ed560d4cda6a68455d957e806dd0bdd83004c4ca80774b8a0a1665866f17085014eadb3eae7382fa870deb29dd8c931b53019625740e28392f38575c0e2a9e504fc35bd95df56439a898230a2398cd2225c766ef36f12ae7e49b30a9c0aad469d5895bbf721cc0ff51d840c802d4a7eefba84fe5205a2c2f14011922dde561456f79e6161\",\n        \"signature\": \"f44371e6c3391639d457ed14648184809411e80a3201f8811670e500fcad92f300aabf7fc68e440191e881d6c3474efd6d28f09dc44312fcfcb82701ba3c290a\"\n    },\n    {\n        \"secret_key\": \"5fea38739c61ca83bf7b4ad175a2117627b971a634a305a84fa57fecb8035624\",\n        \"public_key\": \"ddd14b0fc06768d5104c50764bfd3b952352a34007c50d5ddd224ff51afcdf9c\",\n        \"message\": \"1013c60a73953549e5ed105bdea150b91e60ec39200d43721304bfc8ec439d39609613c2d878044a9da01b26d86d6d65db93d91a137e9c4808a97d4ef286a903f3f1382cc6d1294216b9fafc013c86b9ff68b55a50ea3766e61dc1ce38348e91d62ce732c152d766b9335c68d6cad77be2b4a0cd50b9a1ec632ba55648a6e7e11a14c06853c02aec4809bd147a5ddd9fbc3be9f0c8158d84ab6795d771b42b1814a17a3c7a6ca0f4a8f7b3a0db1c73ba13b16400dfecbd03d216650e4d69704a707246444d5791fa273752f59cb5ae9fd416a5186613d66afdbd1ce691a87bd7d8b67190e9ac687062a080d2ec39fe76ed8335058251872839e85eb62f18ece187caba55b5f7d5edcade01cdc543cc677e50238b89c5635ad5c8fc220f5e0be1bc667d20989753a6d616fa69f8b12940b8ca9e2c48577132d8691b053779a152cbacff3b8b1bd7af692e56c73bbae4634776cfc213c99b9ae458df1befc8c877742664b0a0bb1f6915c8dae3b3f55dd75aba6a3bcc4176b4e3ba03d0c1c04c3c6408778b2b8e5a8a3eb52ed32a7428c00a98a589d8ca9390a210f4a7ac004fa1fe4c6da694f12276e320b41b0b59f75d264a396d450b631ab353f1612709e7a2e6a50d01cb110e53040546dd3b1e11d25732813aa76be5e81fcf7a5773f6815bbd\",\n        \"signed\": \"f4e274823f2c396f3a329486aa6410c5ff19266f0770fd04fb14a7602d2b69a4a2b00928e9e1d92389f8033359ed6fb2146467aa154cba597dec6a84173f8d071013c60a73953549e5ed105bdea150b91e60ec39200d43721304bfc8ec439d39609613c2d878044a9da01b26d86d6d65db93d91a137e9c4808a97d4ef286a903f3f1382cc6d1294216b9fafc013c86b9ff68b55a50ea3766e61dc1ce38348e91d62ce732c152d766b9335c68d6cad77be2b4a0cd50b9a1ec632ba55648a6e7e11a14c06853c02aec4809bd147a5ddd9fbc3be9f0c8158d84ab6795d771b42b1814a17a3c7a6ca0f4a8f7b3a0db1c73ba13b16400dfecbd03d216650e4d69704a707246444d5791fa273752f59cb5ae9fd416a5186613d66afdbd1ce691a87bd7d8b67190e9ac687062a080d2ec39fe76ed8335058251872839e85eb62f18ece187caba55b5f7d5edcade01cdc543cc677e50238b89c5635ad5c8fc220f5e0be1bc667d20989753a6d616fa69f8b12940b8ca9e2c48577132d8691b053779a152cbacff3b8b1bd7af692e56c73bbae4634776cfc213c99b9ae458df1befc8c877742664b0a0bb1f6915c8dae3b3f55dd75aba6a3bcc4176b4e3ba03d0c1c04c3c6408778b2b8e5a8a3eb52ed32a7428c00a98a589d8ca9390a210f4a7ac004fa1fe4c6da694f12276e320b41b0b59f75d264a396d450b631ab353f1612709e7a2e6a50d01cb110e53040546dd3b1e11d25732813aa76be5e81fcf7a5773f6815bbd\",\n        \"signature\": \"f4e274823f2c396f3a329486aa6410c5ff19266f0770fd04fb14a7602d2b69a4a2b00928e9e1d92389f8033359ed6fb2146467aa154cba597dec6a84173f8d07\"\n    },\n    {\n        \"secret_key\": \"60f9a14cce5d43fd9aab4ee8cc8379d575949152693bf29a6790b035e42a44de\",\n        \"public_key\": \"bd4a70740d5acabe49f9a2152082fa2025330e6440437f1d047f313de490dca5\",\n        \"message\": \"dd7f44f9eb728ab48de54ecde6b6184bd5ddd8707545a0129f2e905905b55d3e7fd57e28485d258148f6605e2377d5b267d2eaf4cd4b46e454962219868232b6f41f88a797f9cdd5c39ada51a641214fb9db2c2a9b5a5b16e303575318b625cca970b74348727902a1cf268bd16e107113161c8cbc99303c2b9f235541a7b31e433120feba14febe4bcb0f5b936c7edddd0ecfc72c8d38f64cdb6cfc2910bc29a521c50a51abcbc2aabf789de822cb04f5728fee153dd5501b2db59c59f50cab17c29216d66951019e145b36fd7e841bfbb0a328554b44dd7ef51468c3d5b7d3a1f7b9def58d8cf9d9bcafe92c86cf6d6119e98dba6f38ea57e322ddc9c2198d4bbc3b94ea1329db0d458e01c7081b33925a3e287f599a858c50c3a8f18cc2aa634df63e7f10e403adeab2f41db5578790c3b4f041a8b7a4f69cd6e06215df8201ae5b3e1d1d25a0a39bfc3d041a2f98213ef4141245792a76f06d4de25f6467a0e56f2f5cf69400d22117de7b46149554b70c75b9f99484a4f6f035ad3f10e3753cb14f4f398dcf6a64d10cf6c4fac07c91193cc0f54f0de58c6343e9caaa6b4f475ef91a59e083f9f211f5bc8e7e4516b45cf06bf50beb8fc4ab579d86d4a4190eeac748d06e0852c4b9ba8cfc50dd0a037a7bad7fad55af309a5f13d4c91ed3e0\",\n        \"signed\": \"72f54bb8bdd17e9e422cd339631dd39f57355015d4cbd15acab7542efd784a321c1f6125764c0d154045b32e70dc2e03fbfe1117468ac3e73127b5fac8d42102dd7f44f9eb728ab48de54ecde6b6184bd5ddd8707545a0129f2e905905b55d3e7fd57e28485d258148f6605e2377d5b267d2eaf4cd4b46e454962219868232b6f41f88a797f9cdd5c39ada51a641214fb9db2c2a9b5a5b16e303575318b625cca970b74348727902a1cf268bd16e107113161c8cbc99303c2b9f235541a7b31e433120feba14febe4bcb0f5b936c7edddd0ecfc72c8d38f64cdb6cfc2910bc29a521c50a51abcbc2aabf789de822cb04f5728fee153dd5501b2db59c59f50cab17c29216d66951019e145b36fd7e841bfbb0a328554b44dd7ef51468c3d5b7d3a1f7b9def58d8cf9d9bcafe92c86cf6d6119e98dba6f38ea57e322ddc9c2198d4bbc3b94ea1329db0d458e01c7081b33925a3e287f599a858c50c3a8f18cc2aa634df63e7f10e403adeab2f41db5578790c3b4f041a8b7a4f69cd6e06215df8201ae5b3e1d1d25a0a39bfc3d041a2f98213ef4141245792a76f06d4de25f6467a0e56f2f5cf69400d22117de7b46149554b70c75b9f99484a4f6f035ad3f10e3753cb14f4f398dcf6a64d10cf6c4fac07c91193cc0f54f0de58c6343e9caaa6b4f475ef91a59e083f9f211f5bc8e7e4516b45cf06bf50beb8fc4ab579d86d4a4190eeac748d06e0852c4b9ba8cfc50dd0a037a7bad7fad55af309a5f13d4c91ed3e0\",\n        \"signature\": \"72f54bb8bdd17e9e422cd339631dd39f57355015d4cbd15acab7542efd784a321c1f6125764c0d154045b32e70dc2e03fbfe1117468ac3e73127b5fac8d42102\"\n    },\n    {\n        \"secret_key\": \"a39053c5c58bf31d462b27a620b0b37b8052c6b1c4102b6145663aa15e978718\",\n        \"public_key\": \"3642ac2a3280dce52ad8dfcfd3709436edc4e7e4ae1b452d9b220780b08679fa\",\n        \"message\": \"f65540d3abeb1ee5ea987062c1b579516d3c29c39cbc6b09d60e18fe274c2befe0f5fe7dbd57c2d5835229bb754ec4341394765776d6a9178c4e6a312cd74bdbaca0e88270628cd84100f472b075f93692830122f00f9bd91ac582836c8bfa714aa48e977003556e1b696df328ef584f413f8ab614760699c4d147c3eea1da0435835c9bf7ad54606f0213eb74a1b476141506ae2cd124cd51d66e7e7e579560576305c5fbe8430be3ebebaacba3f9989dd7d199f5a455a50cdb3755037e1a70674a4fef40b4a3aaf7bd3c95b1ab41bb206211c3a1276d3e37d8a3a5c3d5d0f36ef5b4f3de26b7f20f6b2900716dcc22ab734ebaf1e8d00020e5f019551653b9c2f70a4038dfb2f12d25d6d84e79073a6548fe15e4828fe5de83ac3d8d98b7daf92710482c37f7bd2431a8114c6137657bb177882d8a3c76babf1c671a7055365fe90866167a2d1dbc870be83b3601f09d4a317ae254cac9f98dcc7aead9224cd9c9d8a200abc80a2dd108af28fd46ad7080ae741b50054b9b9a9201efb7838bc4c5c2cc3d76ba0fcc49c46e792c26292b7d0312aff955a9f8edf0c696a70a614f3553ad3869bfde48d26a4d367b6cec057e62a4e548554b48b53ecda790ba7a0ab2e3de587bdc22b02f5947634d73099f547db22ec1bbf82343f9a2ca38bce4eb59be\",\n        \"signed\": \"f7383e966cb2309deedf860100183aaefac672ca16d5419cd6422ca70e16b3976f5f165afc2786117c868234ba1109ede031f8979b50e567358bd4f8bd958202f65540d3abeb1ee5ea987062c1b579516d3c29c39cbc6b09d60e18fe274c2befe0f5fe7dbd57c2d5835229bb754ec4341394765776d6a9178c4e6a312cd74bdbaca0e88270628cd84100f472b075f93692830122f00f9bd91ac582836c8bfa714aa48e977003556e1b696df328ef584f413f8ab614760699c4d147c3eea1da0435835c9bf7ad54606f0213eb74a1b476141506ae2cd124cd51d66e7e7e579560576305c5fbe8430be3ebebaacba3f9989dd7d199f5a455a50cdb3755037e1a70674a4fef40b4a3aaf7bd3c95b1ab41bb206211c3a1276d3e37d8a3a5c3d5d0f36ef5b4f3de26b7f20f6b2900716dcc22ab734ebaf1e8d00020e5f019551653b9c2f70a4038dfb2f12d25d6d84e79073a6548fe15e4828fe5de83ac3d8d98b7daf92710482c37f7bd2431a8114c6137657bb177882d8a3c76babf1c671a7055365fe90866167a2d1dbc870be83b3601f09d4a317ae254cac9f98dcc7aead9224cd9c9d8a200abc80a2dd108af28fd46ad7080ae741b50054b9b9a9201efb7838bc4c5c2cc3d76ba0fcc49c46e792c26292b7d0312aff955a9f8edf0c696a70a614f3553ad3869bfde48d26a4d367b6cec057e62a4e548554b48b53ecda790ba7a0ab2e3de587bdc22b02f5947634d73099f547db22ec1bbf82343f9a2ca38bce4eb59be\",\n        \"signature\": \"f7383e966cb2309deedf860100183aaefac672ca16d5419cd6422ca70e16b3976f5f165afc2786117c868234ba1109ede031f8979b50e567358bd4f8bd958202\"\n    },\n    {\n        \"secret_key\": \"e0c29df4de45c47539e0896b3a59bc3de6b802fd14dbdc9f25e717ac82c328f3\",\n        \"public_key\": \"a69002b0f5ef354ce3b2d6b8d8ba70ab778432b22f144dc9c2eb92d99d99dd2a\",\n        \"message\": \"6a37cb4c749c583590c8d849bce3fa657f10009190cad9be41ede19bf2fdb3c562a6101f27bd37f223cab13ced245a1cedf852f551f857aad9727f62c967c0a921df116f48a80a6040b3c723ab5cb594c4507a3d20cd60514e22164a82b74f19dcfdd83c57bc3652375517414af5d18e0a64ccab36699768d07cf40b7063a83e43d5f607964b1bf0840a45ad50abf83dbc849f40e5b4cfb6a3347b29fec50774046a4b50041032aa4d567e8564b3eed1642040682dd8ae7d7179286cf6e1853dc87d27c3e9e60fa47cf8cb2da0181d53eec40614b07331a4fb7028086d0b1ce2e1115b73a162c527bdd7cab5335b863d108be047bdbca112cc6e776bb453c317314388bb9653efb4444bf5cf1ec8da23b711ba71796c0ae02ba1dcc838455078c3897f07e9e13b76e49274c2e207506b00a0b558883aa122b667db9d670508606a3f54320636cd19f973917fb1875f4363e220f1e12398cc6afd79094743338456813a5826ad3f1aba7cd7beab1fe183859c0cc9ef40a5eab912caf515a8d4c3b93d641b7ab3e76b16c12971ace88ff33e5a1ed9b44e45db8f3085dbf070b256b0d7512ee1069432603d73095db8749ca547963bd71a8a684ab8516b146c4187176386afdf6cb1368a3dd8fcb2cfff77056aaf7823f800b266acce72bf643c6d0c28f0ab\",\n        \"signed\": \"bb3b8c5c27591fd8b9c5ba489d6b6ee5b0fb4a7b0de51f1639afc673d0e5f75e313aa7e1d0009081dbca7435b687ccd12f64f74a386e772b9e24781b925c8c0c6a37cb4c749c583590c8d849bce3fa657f10009190cad9be41ede19bf2fdb3c562a6101f27bd37f223cab13ced245a1cedf852f551f857aad9727f62c967c0a921df116f48a80a6040b3c723ab5cb594c4507a3d20cd60514e22164a82b74f19dcfdd83c57bc3652375517414af5d18e0a64ccab36699768d07cf40b7063a83e43d5f607964b1bf0840a45ad50abf83dbc849f40e5b4cfb6a3347b29fec50774046a4b50041032aa4d567e8564b3eed1642040682dd8ae7d7179286cf6e1853dc87d27c3e9e60fa47cf8cb2da0181d53eec40614b07331a4fb7028086d0b1ce2e1115b73a162c527bdd7cab5335b863d108be047bdbca112cc6e776bb453c317314388bb9653efb4444bf5cf1ec8da23b711ba71796c0ae02ba1dcc838455078c3897f07e9e13b76e49274c2e207506b00a0b558883aa122b667db9d670508606a3f54320636cd19f973917fb1875f4363e220f1e12398cc6afd79094743338456813a5826ad3f1aba7cd7beab1fe183859c0cc9ef40a5eab912caf515a8d4c3b93d641b7ab3e76b16c12971ace88ff33e5a1ed9b44e45db8f3085dbf070b256b0d7512ee1069432603d73095db8749ca547963bd71a8a684ab8516b146c4187176386afdf6cb1368a3dd8fcb2cfff77056aaf7823f800b266acce72bf643c6d0c28f0ab\",\n        \"signature\": \"bb3b8c5c27591fd8b9c5ba489d6b6ee5b0fb4a7b0de51f1639afc673d0e5f75e313aa7e1d0009081dbca7435b687ccd12f64f74a386e772b9e24781b925c8c0c\"\n    },\n    {\n        \"secret_key\": \"198b5fd1c03827e0994ad5bfee9b5b7be9966c9c3a267e4d7430343767403c67\",\n        \"public_key\": \"6682c6f1a866b49b2f8ee97f2e532fa91666bf38da1b4dd65543a1777794cbee\",\n        \"message\": \"3fdaa15c46f25143db972079d7013c7f69a136f45f3f6ba2ced8b828468eb3daa6b50b4f8d3380fec64a0343be116f6f83b6ee64cc4c1b1d08d54fd42029e4285cfc6c6dd5cd181ab533ffcd411f23a1003da94ec9340e2ec71199d678540d5182e139ffcbc505a170b8f07f4a7e694ca92f58320c0a078564ce9de99b0fa8e66b0d822e467a5aeb83567996a48b89db25cade6457794e5414d67e9d4ab7cd6cc2058bb7a513abd709f4caf24bb67ce1c03ab62dbdfe309ec7db0fa3ea7aae8236f259b922d4536115a63bc89acb2051d09e731cbb0df157d9d345bd9109973c2b594f148efc6f3377de5163b7f69869ffef853eaefeb402e23529594fbd65ca05fe4062c529d8e321abc05200cac1e839e87b1fd3fdf021d68cbb3a4142b69cc3af6f632edd65b83f5aa4cb17da5b6ba3fc03edb17c2a3cb5b04836e7660e63c8a0483e243983371dfa9839f9164ad4da0d5953655e3a9518e136da745737c79243c355fc125cbdcc76aec92216846c4574f4f7f298bcde54fd2444ad3025955c100315de5a4e27c333a00284b2f702fdd3de22ac6c240dbc14bf71e62d131b62f2db992473f2f913f60c916ecf57df5f3f021fb330834395b79472caff19fcfa0a271795c76d69b4db3f85b8d2e5c3441965484dcc39aba59b701274f7fc425246856069\",\n        \"signed\": \"f454f35b18538f877e5d614a76b5276a27fc0b433f215dc4e963b3f047694c780c515c6ef6fe2db4b009009bc2733aec4fd46e615357cc0bcc9f1f7fc21e3c023fdaa15c46f25143db972079d7013c7f69a136f45f3f6ba2ced8b828468eb3daa6b50b4f8d3380fec64a0343be116f6f83b6ee64cc4c1b1d08d54fd42029e4285cfc6c6dd5cd181ab533ffcd411f23a1003da94ec9340e2ec71199d678540d5182e139ffcbc505a170b8f07f4a7e694ca92f58320c0a078564ce9de99b0fa8e66b0d822e467a5aeb83567996a48b89db25cade6457794e5414d67e9d4ab7cd6cc2058bb7a513abd709f4caf24bb67ce1c03ab62dbdfe309ec7db0fa3ea7aae8236f259b922d4536115a63bc89acb2051d09e731cbb0df157d9d345bd9109973c2b594f148efc6f3377de5163b7f69869ffef853eaefeb402e23529594fbd65ca05fe4062c529d8e321abc05200cac1e839e87b1fd3fdf021d68cbb3a4142b69cc3af6f632edd65b83f5aa4cb17da5b6ba3fc03edb17c2a3cb5b04836e7660e63c8a0483e243983371dfa9839f9164ad4da0d5953655e3a9518e136da745737c79243c355fc125cbdcc76aec92216846c4574f4f7f298bcde54fd2444ad3025955c100315de5a4e27c333a00284b2f702fdd3de22ac6c240dbc14bf71e62d131b62f2db992473f2f913f60c916ecf57df5f3f021fb330834395b79472caff19fcfa0a271795c76d69b4db3f85b8d2e5c3441965484dcc39aba59b701274f7fc425246856069\",\n        \"signature\": \"f454f35b18538f877e5d614a76b5276a27fc0b433f215dc4e963b3f047694c780c515c6ef6fe2db4b009009bc2733aec4fd46e615357cc0bcc9f1f7fc21e3c02\"\n    },\n    {\n        \"secret_key\": \"4392f7d4fbd68fe154e4ba38ad5207612a0648556056c39ac116ad468f89bd2d\",\n        \"public_key\": \"cbeaef41acac02bf1f780ce934aabd631364b369567be1be28e3906f9db120fa\",\n        \"message\": \"cf1709dc9a0867ee908721b136cb93a84229e83b46204777ca8194d08b7a3ca9c912eb243e5bdabfeed352349d20be801b722af0892238e72edf190e6361f57572781ad3c2590b197357641c805383baa1d4972f76c65448532c110834a0baa8f48863e166b706653708cd4057d3a4f9fcb2ceb4120001277d38c43847d822822b777c2bb4da4015a1c24d416d5062a8718491d855aaa5dbf5579c164d8e524a9f2fa3f22eb09861ffe6ad659fe36eb40431222c22d7137a6cabca8db786e39d81f661afde4e39589b4db4d3c51ca53590a14e115d0afc3a877b839a9638bece80c32c19e51b7532024845f76cfe9bfb2ac05130f6758bf7fe993aa93aa272e4e6bd0c75c14099d43e652a223e5bcd64c362d4b8f4b95e016f9350c7fa74e653525d08011558b2c6e9bf4fdf9dbd5ef9b09bbc846afc2bcbc86c4ccc315f6d1ccd489b0cf8ed0d93f2f532a426265c590ba3a59023347d819d9b281ef85310b05316d46c8a8c0365d068a8708664ea4d77ac0cd150a65a56586babd34b74365bb8fe3e6187262284d64432e4c81ea4c0e57c1d71ae980c7f4d1d871032e188bbf9d1758cdc1dff989f2d1288fef4e205e99e7cbf2cc324b8c93046f476c59d3d0a59db6fe37382dc79c5ec16056ab3934a52f7d2880d0471a377b6a8ae84d56ac22d1d54551c\",\n        \"signed\": \"86e7ccf06e79362d40cdb7fb75a98978bbd334a1db7590367d60849bd53e2fb1a4bdae590d1f47b5490d8702e7c1a87268b8ee9db612de7bdc2e38fa6deb7e05cf1709dc9a0867ee908721b136cb93a84229e83b46204777ca8194d08b7a3ca9c912eb243e5bdabfeed352349d20be801b722af0892238e72edf190e6361f57572781ad3c2590b197357641c805383baa1d4972f76c65448532c110834a0baa8f48863e166b706653708cd4057d3a4f9fcb2ceb4120001277d38c43847d822822b777c2bb4da4015a1c24d416d5062a8718491d855aaa5dbf5579c164d8e524a9f2fa3f22eb09861ffe6ad659fe36eb40431222c22d7137a6cabca8db786e39d81f661afde4e39589b4db4d3c51ca53590a14e115d0afc3a877b839a9638bece80c32c19e51b7532024845f76cfe9bfb2ac05130f6758bf7fe993aa93aa272e4e6bd0c75c14099d43e652a223e5bcd64c362d4b8f4b95e016f9350c7fa74e653525d08011558b2c6e9bf4fdf9dbd5ef9b09bbc846afc2bcbc86c4ccc315f6d1ccd489b0cf8ed0d93f2f532a426265c590ba3a59023347d819d9b281ef85310b05316d46c8a8c0365d068a8708664ea4d77ac0cd150a65a56586babd34b74365bb8fe3e6187262284d64432e4c81ea4c0e57c1d71ae980c7f4d1d871032e188bbf9d1758cdc1dff989f2d1288fef4e205e99e7cbf2cc324b8c93046f476c59d3d0a59db6fe37382dc79c5ec16056ab3934a52f7d2880d0471a377b6a8ae84d56ac22d1d54551c\",\n        \"signature\": \"86e7ccf06e79362d40cdb7fb75a98978bbd334a1db7590367d60849bd53e2fb1a4bdae590d1f47b5490d8702e7c1a87268b8ee9db612de7bdc2e38fa6deb7e05\"\n    },\n    {\n        \"secret_key\": \"0bea98abe7d63f158390ee668aa050e84a25d2893e49fc83f079f9bba6a55a75\",\n        \"public_key\": \"22192ec0d32ef9835665a61bc88bcf4e1604637921152c116af503365bf6be42\",\n        \"message\": \"c178e38d4e83ed2be57ce1c3ab64253a8171e610008181fbfc6d752269f7f1c5a9ec62cb27f19ad99ce1f5116a363d96fdc5a42f358b6dbe7cabdfc9f60718e4012c1bb1f842c5560811ba8374a0637747ff92eac21ca65ddeaf43e9989b7de2d432520afee364ecfba4da669ad4893d0bf69f9f81e7df69657be22b92069745f216c242ccd46d02d35616e16c755e0e37f961a6f3637752534f6dfab8805ab759a032a4e7e4c81953325a2f686bb69a029ce4e03becb3605637c5a65b52e331c26c926ed4711a504d3733bb53c97b80eafe4e75ddd9f415362888c3d4d37bae0e63fa11bf755666437d72f58c91d7a2f8cb619b7620a070b26b18b4d50184c5818712110e36d3e2830f6a8576ba57f9cccb8fff4028bf8ef9cb814825bbca827d649547bf6f2bef931704ca7f6df15f780155ed46eaa7ca7d72e22434ca0483bfb2f7902dc787f617eb9bd41ed4520adfd430948c710805a73c1ba5492e96484c4baa7da24c7435c46a052bf3515d33e42dcef517caa45f36c879121078c688dd10d76656a119762b6a834136fa1f8a643224b9224c543cf0470b3f8ee017d620dbdcc84d985154e9d1ae80e5f14387b88a0f6a5c35905aa57fb3abeb0ea6eccddb004474633cc483b56b8a8e20e8f2e09e979aa09893087875c6b117b5f13847ad8fc05604c4\",\n        \"signed\": \"7eb3139b880fdf66376a2090818840049767c837f3ad0036b141667052b33609817ca5e240ed8cdf3ccf3aee29274534594db0b4ccc5c6e5bba3280b873f2901c178e38d4e83ed2be57ce1c3ab64253a8171e610008181fbfc6d752269f7f1c5a9ec62cb27f19ad99ce1f5116a363d96fdc5a42f358b6dbe7cabdfc9f60718e4012c1bb1f842c5560811ba8374a0637747ff92eac21ca65ddeaf43e9989b7de2d432520afee364ecfba4da669ad4893d0bf69f9f81e7df69657be22b92069745f216c242ccd46d02d35616e16c755e0e37f961a6f3637752534f6dfab8805ab759a032a4e7e4c81953325a2f686bb69a029ce4e03becb3605637c5a65b52e331c26c926ed4711a504d3733bb53c97b80eafe4e75ddd9f415362888c3d4d37bae0e63fa11bf755666437d72f58c91d7a2f8cb619b7620a070b26b18b4d50184c5818712110e36d3e2830f6a8576ba57f9cccb8fff4028bf8ef9cb814825bbca827d649547bf6f2bef931704ca7f6df15f780155ed46eaa7ca7d72e22434ca0483bfb2f7902dc787f617eb9bd41ed4520adfd430948c710805a73c1ba5492e96484c4baa7da24c7435c46a052bf3515d33e42dcef517caa45f36c879121078c688dd10d76656a119762b6a834136fa1f8a643224b9224c543cf0470b3f8ee017d620dbdcc84d985154e9d1ae80e5f14387b88a0f6a5c35905aa57fb3abeb0ea6eccddb004474633cc483b56b8a8e20e8f2e09e979aa09893087875c6b117b5f13847ad8fc05604c4\",\n        \"signature\": \"7eb3139b880fdf66376a2090818840049767c837f3ad0036b141667052b33609817ca5e240ed8cdf3ccf3aee29274534594db0b4ccc5c6e5bba3280b873f2901\"\n    },\n    {\n        \"secret_key\": \"c25878b0d1e0925c8f5f04a1e5799080963c413a1399c118afb1687c797f4839\",\n        \"public_key\": \"13ac2cad41908c255f671f93934ae5d7be325346725c8b40dc39ea80d70ddf34\",\n        \"message\": \"6856cc7144b6bddcc4b58954d1a2e7101d6584b5d5e719a0aea0fbbdf221c2a2aacbacdc4020c5c8ce681ff7381acd607b0f5239692335700655be2d94c53d7b5148e92a2bc16338c2f4c1a7d1c595af622c240ce579a5e0f5b651bf562518cec8aa2ce4b4aadb1f2fda6cf6295bc37803b5377dab65c9b9a2949fdd49bf9ddc8f96d260ff951bf8e8ccf9827e6869c44bfd973358cefdb010db5e1fe5dbd9f5d2b2ca393c17d446f637059e692d7a91aadcc7689f5f9e1b3052175d9b6b208f9026787fdb66783f45372a24946b1bd1687bf0cfcc8174ebe4d32e43284fc78d7844de0fa22e2065e07528baabaf015cb34d629c3596ad040de31c5620eb266defa7533ac0401998e5673a754365047debfcf7e137a20d16cdd6a5521982f444cfc3429397c641bd7e74a770bb11fcb29483e337bae5169ee82da9a91adf3af67cd814c2825d29018ef035ea86f8de4c7563aaf66e0c75d17ca68f49f0758ec2d9c5179d01aaed7d4515e91a222b0b06fbde4f07a7d9df2de3bcae37ca2c8460c2a6b3749e9bda36d08e66bcc356b390434b4a18cfa45af557dca3d857ff3ad347cfb07e2358c2acfd5cd53b3b0ea2a41ee5c0802fd473db5f30526334da41eb4bc7518383898a0b7507ad4ca289d66c5e2eb75cf255dff312cb1e04eebeb47f2930b90d5e002eb0\",\n        \"signed\": \"06f55198b4191914b74306f38e381316eac40b5b5adb8a312464f67175ecf612e0147b1cef46c2518750a5606bb03bc6467bb9321514f69dcbebce8f690580026856cc7144b6bddcc4b58954d1a2e7101d6584b5d5e719a0aea0fbbdf221c2a2aacbacdc4020c5c8ce681ff7381acd607b0f5239692335700655be2d94c53d7b5148e92a2bc16338c2f4c1a7d1c595af622c240ce579a5e0f5b651bf562518cec8aa2ce4b4aadb1f2fda6cf6295bc37803b5377dab65c9b9a2949fdd49bf9ddc8f96d260ff951bf8e8ccf9827e6869c44bfd973358cefdb010db5e1fe5dbd9f5d2b2ca393c17d446f637059e692d7a91aadcc7689f5f9e1b3052175d9b6b208f9026787fdb66783f45372a24946b1bd1687bf0cfcc8174ebe4d32e43284fc78d7844de0fa22e2065e07528baabaf015cb34d629c3596ad040de31c5620eb266defa7533ac0401998e5673a754365047debfcf7e137a20d16cdd6a5521982f444cfc3429397c641bd7e74a770bb11fcb29483e337bae5169ee82da9a91adf3af67cd814c2825d29018ef035ea86f8de4c7563aaf66e0c75d17ca68f49f0758ec2d9c5179d01aaed7d4515e91a222b0b06fbde4f07a7d9df2de3bcae37ca2c8460c2a6b3749e9bda36d08e66bcc356b390434b4a18cfa45af557dca3d857ff3ad347cfb07e2358c2acfd5cd53b3b0ea2a41ee5c0802fd473db5f30526334da41eb4bc7518383898a0b7507ad4ca289d66c5e2eb75cf255dff312cb1e04eebeb47f2930b90d5e002eb0\",\n        \"signature\": \"06f55198b4191914b74306f38e381316eac40b5b5adb8a312464f67175ecf612e0147b1cef46c2518750a5606bb03bc6467bb9321514f69dcbebce8f69058002\"\n    },\n    {\n        \"secret_key\": \"0b2ec62763f687593135da1961ef29a288089696d944b265a5f96893cd2d8225\",\n        \"public_key\": \"c1e234fa8bc96d268e7aad028b03f0a911b697715db3a21c2fc7df48ecda8875\",\n        \"message\": \"a83434c68693d5fced91bda10213fcd50c48920b90cee9b73a9c61081a0974933f4fdb0a67e671f8351b0ed5ec0fe7b5fb0c87586fe582ffb1bfa2db5fcedd3302428234b2bb0e726dedf45b13a70cd35ab3e299d13f34503508278c4458eea5b7351b05836bdad5b05f60e445fc65737ae27d2e52df9c39e5da0286392d08fff7ecb7066820fc90fc8a44d5616561c50b52714702302bca5874de85dba045045f9f0e604eb86d6d7fbd775f72ea493b2c4ef7c3be16db2ca7e4d8bd79eb20cfb5f0f6f05336b75cc86d219f3b8f2e91ba7d52b64fdd6a6664f04f2fbab758cdf984168691c32f53e8616b49f76ab7b192b900903082cc89656a9705804cc9b9288a3e42170984f8dc454e0864b9341672686a178c060050178a36c6d906b2ce070d8faaacd9a58c794a5ea4108b4a485c65811c2dca2ee7bb10bffff75d4586b990f43763a16fbc0b48ae1fafb08a9a36fa4326845dba5ba2fbd32bbf66505c5e8657ed0107e3e16144ef31fa6aae72e774097483f5480aa45540568fd08cba0d577768004f58ae9b95be374ed7f0299fe721275e476e0b9ab72dc06ea328384e39bf3ac331c625484312cd9b06b15a2954d33e7aaba6be2261886ca811db96b1143d06dd6e0f3cba7a1ae9b94eaf67771bb2d24e2f94de9c470fcde7bfdb32f410198b5aa9698e32\",\n        \"signed\": \"ff701f34b3594de3b80045f429e5e32dd88d6051d4195f1685be783766e80119368f56b3749725b913f1223f87fb0fb24d9dfa0841d6a0e2eb1fddf775c2d205a83434c68693d5fced91bda10213fcd50c48920b90cee9b73a9c61081a0974933f4fdb0a67e671f8351b0ed5ec0fe7b5fb0c87586fe582ffb1bfa2db5fcedd3302428234b2bb0e726dedf45b13a70cd35ab3e299d13f34503508278c4458eea5b7351b05836bdad5b05f60e445fc65737ae27d2e52df9c39e5da0286392d08fff7ecb7066820fc90fc8a44d5616561c50b52714702302bca5874de85dba045045f9f0e604eb86d6d7fbd775f72ea493b2c4ef7c3be16db2ca7e4d8bd79eb20cfb5f0f6f05336b75cc86d219f3b8f2e91ba7d52b64fdd6a6664f04f2fbab758cdf984168691c32f53e8616b49f76ab7b192b900903082cc89656a9705804cc9b9288a3e42170984f8dc454e0864b9341672686a178c060050178a36c6d906b2ce070d8faaacd9a58c794a5ea4108b4a485c65811c2dca2ee7bb10bffff75d4586b990f43763a16fbc0b48ae1fafb08a9a36fa4326845dba5ba2fbd32bbf66505c5e8657ed0107e3e16144ef31fa6aae72e774097483f5480aa45540568fd08cba0d577768004f58ae9b95be374ed7f0299fe721275e476e0b9ab72dc06ea328384e39bf3ac331c625484312cd9b06b15a2954d33e7aaba6be2261886ca811db96b1143d06dd6e0f3cba7a1ae9b94eaf67771bb2d24e2f94de9c470fcde7bfdb32f410198b5aa9698e32\",\n        \"signature\": \"ff701f34b3594de3b80045f429e5e32dd88d6051d4195f1685be783766e80119368f56b3749725b913f1223f87fb0fb24d9dfa0841d6a0e2eb1fddf775c2d205\"\n    },\n    {\n        \"secret_key\": \"8960d7bee8c6b39ca5934d7cddd16f16b3663e6e03e833c057e2181e4597cb68\",\n        \"public_key\": \"43409095d4f50f5eddbd5cd4d2012298cb41a40e99492d5a2db08be5377ea183\",\n        \"message\": \"308d84c7a5f786e563e5c1ea57aab5e555c00997749d15aee35439efa645da2c3967703115c6c63ed7f94785c5478f38467b86e7626e8fffa4d51a2dc45e6df2a35cec99555eabc9f7a93e2e2b689459b4e0c92b351562c417b1997113754ea59e4a91510728ff3071a2bbd1f465a687f67dae955615031a8ad551fe738a260bbc446b48dca1d979051ab5840832e19d473b666217a9183980d6b27e3d3c76d93665ba2393e6ab1a42c3904d4025932d601a202a59a4c49fdb77f0e02868247de5afdfaa1b894208ac00d77c6bb54c6b2a73a47657e44c85137963b57521af20976248eb261482147cdf7a145c3643e29e0588bfdae6a082904853ce5a10d24970ebdfb7f59d5efdd6a5e7e0d287971c846acd54d84dd45468a4110bab6ef8d9a5b4b2426788900b7e1adfe0624344f98fe59ef8a1e6c405b344eb97bb204773744b6a2d8c6e65d17cea07de03b7f0fe49f1a55c33d5f15ce55df7c9561b251c6ac807a92553e1ce917012dccfd69e7dbd038c7eeecae98623f18fbb650e2218a0bc0fff43a75a116448bb7362f527ee6bc8e10761cccf9bcfc0d000f2127b4cc19211d095a0bdaa4e4be4519e6c8445eab9b3144a45cab9996135bf7f75a78d22275900f4ce1f0a9eac136364103062893dad4390422b77e5f5d1d94d7029c6097b35ca64a7a476fcc7\",\n        \"signed\": \"7213dd4a79fd54dec0c548ef42e6cae015be77802bf515cd2582768f72f563ebb2da36af4aaeac56bbffc9932c2e24ec95daff00a5f7a0acab9c8bd3c23bb40c308d84c7a5f786e563e5c1ea57aab5e555c00997749d15aee35439efa645da2c3967703115c6c63ed7f94785c5478f38467b86e7626e8fffa4d51a2dc45e6df2a35cec99555eabc9f7a93e2e2b689459b4e0c92b351562c417b1997113754ea59e4a91510728ff3071a2bbd1f465a687f67dae955615031a8ad551fe738a260bbc446b48dca1d979051ab5840832e19d473b666217a9183980d6b27e3d3c76d93665ba2393e6ab1a42c3904d4025932d601a202a59a4c49fdb77f0e02868247de5afdfaa1b894208ac00d77c6bb54c6b2a73a47657e44c85137963b57521af20976248eb261482147cdf7a145c3643e29e0588bfdae6a082904853ce5a10d24970ebdfb7f59d5efdd6a5e7e0d287971c846acd54d84dd45468a4110bab6ef8d9a5b4b2426788900b7e1adfe0624344f98fe59ef8a1e6c405b344eb97bb204773744b6a2d8c6e65d17cea07de03b7f0fe49f1a55c33d5f15ce55df7c9561b251c6ac807a92553e1ce917012dccfd69e7dbd038c7eeecae98623f18fbb650e2218a0bc0fff43a75a116448bb7362f527ee6bc8e10761cccf9bcfc0d000f2127b4cc19211d095a0bdaa4e4be4519e6c8445eab9b3144a45cab9996135bf7f75a78d22275900f4ce1f0a9eac136364103062893dad4390422b77e5f5d1d94d7029c6097b35ca64a7a476fcc7\",\n        \"signature\": \"7213dd4a79fd54dec0c548ef42e6cae015be77802bf515cd2582768f72f563ebb2da36af4aaeac56bbffc9932c2e24ec95daff00a5f7a0acab9c8bd3c23bb40c\"\n    },\n    {\n        \"secret_key\": \"ef6b9b51fd4f8586ca62658e042fc09a83b943033526ffc326c65eb3a5fb594b\",\n        \"public_key\": \"1d6eece805e0887821876b7ed6ed5b0714d646fbecda38764f94c8155e61d004\",\n        \"message\": \"a8f3f19665de2390d5cc52b064b4851273677486d8f5563bb7c95fa94db3356161ee622221f10cbb1fa195aac7231ea716d74b46b37bc85a70dba3dfaa1675217b351199e74a971028f729b7ae2b74ae8c6b3a0679c3e3296802844ad5bba343f6f9f7c4661b4a29b44f17e89e114fb220e984cd980e94c3d2bf9873e0605c92301744a3035ef046bad2666b5c63ebecf93cc140291946c0fa170340ce395092deed79841352fbfee03a927eb458f2a633ed3271652f5b0f9960cdf9015d56fdabd89ee71e259af6eb514b4c1bd4a666f5b5a35c90f35b149457af2944dd0aa8d9b542283a7e5412b775e421d2126f89bebc3ca37f73071621f1321eee52e9690486a33cd7ff9c9967fb65ee4e907b6b852211473d21e9d91a93362ac761760e8c7bbea486c3d605f9e11b86136819a7ab3f32f13ffca16817fed197ff880b4d6d9a808f7f878763a045728df72faaa963e4cb1c09cc2b2da920280c8366b7d18bf8972df16cc23448fbe6b2e6e16cbbf0745129854053189637ce115d2398433c15d6f116a205334824af282fa758494c47868ea8f4dfadc705e861aad2eb8ef3dbbed2a4569e15834a760cce0cbbc84b289e779b988346b9069c744c97ab2bf42b086d2fb0a411f5ce99f0819a3086b4fe9d96c7c9908dce28df1ddd30f3501ddaf78110734f9dcdfec3\",\n        \"signed\": \"71d171071cd0fea1c6a9cfad1f7fd835e85ff906778bc6345a4dec4313ecc2bff755a717ebd912a5e02840ac073842f9bfcaa58913e260e3c73393d36685c70ea8f3f19665de2390d5cc52b064b4851273677486d8f5563bb7c95fa94db3356161ee622221f10cbb1fa195aac7231ea716d74b46b37bc85a70dba3dfaa1675217b351199e74a971028f729b7ae2b74ae8c6b3a0679c3e3296802844ad5bba343f6f9f7c4661b4a29b44f17e89e114fb220e984cd980e94c3d2bf9873e0605c92301744a3035ef046bad2666b5c63ebecf93cc140291946c0fa170340ce395092deed79841352fbfee03a927eb458f2a633ed3271652f5b0f9960cdf9015d56fdabd89ee71e259af6eb514b4c1bd4a666f5b5a35c90f35b149457af2944dd0aa8d9b542283a7e5412b775e421d2126f89bebc3ca37f73071621f1321eee52e9690486a33cd7ff9c9967fb65ee4e907b6b852211473d21e9d91a93362ac761760e8c7bbea486c3d605f9e11b86136819a7ab3f32f13ffca16817fed197ff880b4d6d9a808f7f878763a045728df72faaa963e4cb1c09cc2b2da920280c8366b7d18bf8972df16cc23448fbe6b2e6e16cbbf0745129854053189637ce115d2398433c15d6f116a205334824af282fa758494c47868ea8f4dfadc705e861aad2eb8ef3dbbed2a4569e15834a760cce0cbbc84b289e779b988346b9069c744c97ab2bf42b086d2fb0a411f5ce99f0819a3086b4fe9d96c7c9908dce28df1ddd30f3501ddaf78110734f9dcdfec3\",\n        \"signature\": \"71d171071cd0fea1c6a9cfad1f7fd835e85ff906778bc6345a4dec4313ecc2bff755a717ebd912a5e02840ac073842f9bfcaa58913e260e3c73393d36685c70e\"\n    },\n    {\n        \"secret_key\": \"bad47cd4bd89849067cce1e63c3d91e9b787aea8584edb07f3451ef67e7bd79b\",\n        \"public_key\": \"ab0ce9ba1d29bdfb85a0e66b76b5e2e05ff732569e4375ccd75098e9e71d17bf\",\n        \"message\": \"b5a61e19e4863e0bb5f3fab6c4970d878596895521fa1e7f678cafa2de53322fd458a98aa6e35805429f651291b95bd9950e155f3ada0b609159a4abda5990c04bc2e764422fb49ef42f12529ff6f6a82029ff0185662e658f83c546eed09f06b5a68e857cdad0eb9ec4eecbfd88f34bc80990f8644a9bfdde1d9f3a90d557a8b828d5ce06a64e3b238582bb4cbeba30edc49e8122c55e95badcf502cc567869c09e9f46c6ff3f6878986b1de00b72a1858046fcd3a6e9cdaf5b073c56f2025063a2d178bd4c1e8cbc1e6e671aa97fb2cb4cc8a62c20be41c776372c8e7be63b482e6c63fa85d7cffbc1b2820bae1fc128343a1e20fcf1bc3502eee81358cc9a74c72af63530f96a25a604648ff570df1eb89d1fddbab28679ba2e9b41977e9a9c1caecdbfc361a1dd055ec51620a9bbdbbaf718c9cc136d2007710399536d13332485ec38879785e0c9ce9915a80251373990a59bce440326031ab1b458bfa5b8a4793da4ee11ab7af20de2a118c9ae521a417b68207fc885e109d8463e9f022787cc730db0b1faaed257bed901710885b74e994f54f6f2aeb64f0f60b59efbf2e3bb6515424603a113c0b8a31ba3c1e9a9b8118c87ec6949b75f49627ea7b1328889391104d4f4a3892cf00f26a73cda2a40f9b7157afc40667f4a04f647dbf93906b84c9a35164e1bc902\",\n        \"signed\": \"e5724a1dd463a97d1222c518c4925d322202d10f04cd078e771e0fb3951dbc1493a234460754c3aae3df93008dbbfb310c99592bede735a4aeab0323a1210d0eb5a61e19e4863e0bb5f3fab6c4970d878596895521fa1e7f678cafa2de53322fd458a98aa6e35805429f651291b95bd9950e155f3ada0b609159a4abda5990c04bc2e764422fb49ef42f12529ff6f6a82029ff0185662e658f83c546eed09f06b5a68e857cdad0eb9ec4eecbfd88f34bc80990f8644a9bfdde1d9f3a90d557a8b828d5ce06a64e3b238582bb4cbeba30edc49e8122c55e95badcf502cc567869c09e9f46c6ff3f6878986b1de00b72a1858046fcd3a6e9cdaf5b073c56f2025063a2d178bd4c1e8cbc1e6e671aa97fb2cb4cc8a62c20be41c776372c8e7be63b482e6c63fa85d7cffbc1b2820bae1fc128343a1e20fcf1bc3502eee81358cc9a74c72af63530f96a25a604648ff570df1eb89d1fddbab28679ba2e9b41977e9a9c1caecdbfc361a1dd055ec51620a9bbdbbaf718c9cc136d2007710399536d13332485ec38879785e0c9ce9915a80251373990a59bce440326031ab1b458bfa5b8a4793da4ee11ab7af20de2a118c9ae521a417b68207fc885e109d8463e9f022787cc730db0b1faaed257bed901710885b74e994f54f6f2aeb64f0f60b59efbf2e3bb6515424603a113c0b8a31ba3c1e9a9b8118c87ec6949b75f49627ea7b1328889391104d4f4a3892cf00f26a73cda2a40f9b7157afc40667f4a04f647dbf93906b84c9a35164e1bc902\",\n        \"signature\": \"e5724a1dd463a97d1222c518c4925d322202d10f04cd078e771e0fb3951dbc1493a234460754c3aae3df93008dbbfb310c99592bede735a4aeab0323a1210d0e\"\n    },\n    {\n        \"secret_key\": \"caba8e0533113a4be173408ba83c0db74260802f9186c391402655acde6015cb\",\n        \"public_key\": \"2d7bef6164c279fa1028a9788e3e8ee8ac15edcf92a5855062952310b4684547\",\n        \"message\": \"2413a32bca5ce6e230e565eb858493d5d04e6d2e2a7ab1f89a3b423311676bfa93c67daafd1cfc7109e040bac52cbfe07c28280bb6acf6e3a31073dab2965378dd77f61fe9247135c1a631b79ad668c9ea1cd4112d8d3a064cc21df32aeac7dd718b091fb6915b8bc063bb5815c376e01476312a2e5433417a7a9315d65999b02ff464a474a597e53988773670eca46a6e26cf96e9488e9e6344bc783ddfb535e76bb3b9a603ff4c59c7dbe2d8b6198d5b24490b4ea96c95959ffbf3d8218e760daf20e01e2f36c84bb097115abddee92bed82d16b15a9e192e9893ac638461df507207b0cf595884d8a99fb9c7045f9bff7b73f00ca3fd595a5cec292adb458bd9463be1204d01678d2f4389b8720115fa597c402b4ff694b71ce4f3d330d5e2f3c3ad6d96a9b3439230fc53a44794cda595557c406ca1589bc7be81e2d79636033253fa7bdd600c67fc55936bd96ce0428c3eb97bad1de0a5fbb9b675157de5f18bc62a7c22c9483e2802e679b5b8f89db0fc37f7c7150ad5ac8722ceb999b2435e6997217092336ef1c8a2292dab9a46ff8a9e10d3355765cac9d6598770f4f01ea639125fd031609dd1a507d96280c7d01a3ee987e9b210ec8744cd48c74f8afee961e8ef221f826a1fe6e7df0cb15ad7c7ef4a91f9d0f4c2e1bdea635d275fac8c4bc0601f490dbdbc734\",\n        \"signed\": \"ec35ec32c8a4008827e178492b3b8bee22a4954fc6b25f4f225dd7ed23698900de8156756a8edc35c51d10f82b830a2a659676eac911f960244766e0c3c607052413a32bca5ce6e230e565eb858493d5d04e6d2e2a7ab1f89a3b423311676bfa93c67daafd1cfc7109e040bac52cbfe07c28280bb6acf6e3a31073dab2965378dd77f61fe9247135c1a631b79ad668c9ea1cd4112d8d3a064cc21df32aeac7dd718b091fb6915b8bc063bb5815c376e01476312a2e5433417a7a9315d65999b02ff464a474a597e53988773670eca46a6e26cf96e9488e9e6344bc783ddfb535e76bb3b9a603ff4c59c7dbe2d8b6198d5b24490b4ea96c95959ffbf3d8218e760daf20e01e2f36c84bb097115abddee92bed82d16b15a9e192e9893ac638461df507207b0cf595884d8a99fb9c7045f9bff7b73f00ca3fd595a5cec292adb458bd9463be1204d01678d2f4389b8720115fa597c402b4ff694b71ce4f3d330d5e2f3c3ad6d96a9b3439230fc53a44794cda595557c406ca1589bc7be81e2d79636033253fa7bdd600c67fc55936bd96ce0428c3eb97bad1de0a5fbb9b675157de5f18bc62a7c22c9483e2802e679b5b8f89db0fc37f7c7150ad5ac8722ceb999b2435e6997217092336ef1c8a2292dab9a46ff8a9e10d3355765cac9d6598770f4f01ea639125fd031609dd1a507d96280c7d01a3ee987e9b210ec8744cd48c74f8afee961e8ef221f826a1fe6e7df0cb15ad7c7ef4a91f9d0f4c2e1bdea635d275fac8c4bc0601f490dbdbc734\",\n        \"signature\": \"ec35ec32c8a4008827e178492b3b8bee22a4954fc6b25f4f225dd7ed23698900de8156756a8edc35c51d10f82b830a2a659676eac911f960244766e0c3c60705\"\n    },\n    {\n        \"secret_key\": \"9bf3fbc7308b46f6036bade0c3ca199fac662b07f103bf75181d52ba6a58be05\",\n        \"public_key\": \"2f6ac6fc33bc060c1dc3cb9d1a2b9115845addb16c4b84be37ed33adb3b3d3a8\",\n        \"message\": \"d65e36a6a38195ecb91de3c848b51f639245fa2baba8a6f85947159dec0ed3fae80c5a0f8c66ff24793c89c0c687543bc633547a1f37f730d97012ebbdc7ac339c4890c0856bbfe2ba29b25a7aa6b089c033fecb76db62dd3c00f6421b9e76dd0ea366eb2d4a052ee6cc736e3819191d5ad7a66d2be042cc6539e5f35652b155a727f3888d93f93a9102598f7538a9ab7c777eec79426a6075d6f38d64c485520f6413ff4d358a8a9cbdab01adf4db02adaea26494d1f5d617637f277f8b0e6e7e61e2eeccdd337de2baf0ca264c14c8cb8368000b9c714385f413737d6816e212cae2aecfffc32fd16d46c3ecee6ab074c0d768bdfe99b86cbbc8df9c47cd586d465871268d4a9d1c877236ab78f8859c114e251cabc4be0f8bc25d148c5f543e290745d11803e49f5b53193fe39969c039b3f249b32f2b8598b6acf4ed64d5752bb772ff4ee00ce0f85ecbb4cfc4ce07daf2809868c2903b781e12a274105f06181029e47f2bfb21f49480aa1e444715c0b9ff07ead88975d93585d2ff424832a9783d94906a60f877ae1c85ff15317badca1e61317433c7ce96279b678ec9d174dd0870080b234154f626a53462cfd547842eab8705605b8ee885729ee78d1833aa43f55ac22731989fdeda7dc5fa9c01985f2661e6c7326d346e6db27e6f921fae7c93a2170e10dd0c460bdc\",\n        \"signed\": \"0c3136e01f9bcd99e10d3d124b0cdb0772bec18a864be81bd1daa44d818c3d470dfaa8ab6e9a761cf03f93ef9cc78291096ed6d10c08fa2fba3bac04dde20f0cd65e36a6a38195ecb91de3c848b51f639245fa2baba8a6f85947159dec0ed3fae80c5a0f8c66ff24793c89c0c687543bc633547a1f37f730d97012ebbdc7ac339c4890c0856bbfe2ba29b25a7aa6b089c033fecb76db62dd3c00f6421b9e76dd0ea366eb2d4a052ee6cc736e3819191d5ad7a66d2be042cc6539e5f35652b155a727f3888d93f93a9102598f7538a9ab7c777eec79426a6075d6f38d64c485520f6413ff4d358a8a9cbdab01adf4db02adaea26494d1f5d617637f277f8b0e6e7e61e2eeccdd337de2baf0ca264c14c8cb8368000b9c714385f413737d6816e212cae2aecfffc32fd16d46c3ecee6ab074c0d768bdfe99b86cbbc8df9c47cd586d465871268d4a9d1c877236ab78f8859c114e251cabc4be0f8bc25d148c5f543e290745d11803e49f5b53193fe39969c039b3f249b32f2b8598b6acf4ed64d5752bb772ff4ee00ce0f85ecbb4cfc4ce07daf2809868c2903b781e12a274105f06181029e47f2bfb21f49480aa1e444715c0b9ff07ead88975d93585d2ff424832a9783d94906a60f877ae1c85ff15317badca1e61317433c7ce96279b678ec9d174dd0870080b234154f626a53462cfd547842eab8705605b8ee885729ee78d1833aa43f55ac22731989fdeda7dc5fa9c01985f2661e6c7326d346e6db27e6f921fae7c93a2170e10dd0c460bdc\",\n        \"signature\": \"0c3136e01f9bcd99e10d3d124b0cdb0772bec18a864be81bd1daa44d818c3d470dfaa8ab6e9a761cf03f93ef9cc78291096ed6d10c08fa2fba3bac04dde20f0c\"\n    },\n    {\n        \"secret_key\": \"64e89304a335e903cb36c0bdf1a6412ef368468006b73d3d2d61cb030cc5f8d1\",\n        \"public_key\": \"a180ef3a661c3c479d5f69807c902748e35e7f725121e37a5d91b8bec88d83a6\",\n        \"message\": \"2f51074d981bdafafb02a40fe826c45f3171c1b3184d8c260b82b8411fc625cb02ccfe755dc29dc7895bf759e61b2450da1a656a38d4f70d2ee748c518c6420306e5f01ec7a0ffe0e9dceb93f6c077b12662881584f98ce6ab945f87fc6d123c45d6cdfd8237a1ce3635b623a79d020df44c74b89ac14a321fbf33a8c0a2559fea1c2b156076b813908f842ebe4c2b949089e52b1ae40dc6e4b2abbc439a0bf72369679aab6f4c00018be147f7c0a67b9679ee88a53819c49f7b675e30a8b5af39661ee8db21010411294968f88e5d604d0d88d76a7e4864fad3a56f5f624ba1b34ea9cb720850aad3bd4f0a882a7d25fbec2bb7ca86da616da96c1562c6d6a1abcc641e1b58b2c178e1c3bc8a3b36ec9e144dd2e75b0bc8c08ccb0d6e3427b0322b3d6ab93f3f60b9cc5b61dad02385a14949f9b87a8e3af1e0e0fab7a9a928c753fc6110444af7ccaf8027ed641b9ed87fa5d8e1f76cae465d57a70dad9ebfdd3ce7576ac4de89d98f42e282ad87ad6a5042577cbbbc4d951e2a8676fedc8cb1b1bdf76c3a38846385a85aa24706c20a8b38465fe2ae0e41f78e614b8e9642fe2471a9015747db976e0c7848c23ff3f417cb05a8d5ef40130adf855c998a62104d7e2fb7c0f9aa2a496075623ced2c0f7eec10147ff9608a8a042ef98117459b93837fd1b8d5ef03978eada74cac\",\n        \"signed\": \"92eb4454814001ecfc18025d6421f64645a5bcbb5cb8fd85c14d772617c503e8be7d3bcf117f5e6801d1c3b96f9090a66ddc67f8cf8ff0f1c125b16b15e2ce072f51074d981bdafafb02a40fe826c45f3171c1b3184d8c260b82b8411fc625cb02ccfe755dc29dc7895bf759e61b2450da1a656a38d4f70d2ee748c518c6420306e5f01ec7a0ffe0e9dceb93f6c077b12662881584f98ce6ab945f87fc6d123c45d6cdfd8237a1ce3635b623a79d020df44c74b89ac14a321fbf33a8c0a2559fea1c2b156076b813908f842ebe4c2b949089e52b1ae40dc6e4b2abbc439a0bf72369679aab6f4c00018be147f7c0a67b9679ee88a53819c49f7b675e30a8b5af39661ee8db21010411294968f88e5d604d0d88d76a7e4864fad3a56f5f624ba1b34ea9cb720850aad3bd4f0a882a7d25fbec2bb7ca86da616da96c1562c6d6a1abcc641e1b58b2c178e1c3bc8a3b36ec9e144dd2e75b0bc8c08ccb0d6e3427b0322b3d6ab93f3f60b9cc5b61dad02385a14949f9b87a8e3af1e0e0fab7a9a928c753fc6110444af7ccaf8027ed641b9ed87fa5d8e1f76cae465d57a70dad9ebfdd3ce7576ac4de89d98f42e282ad87ad6a5042577cbbbc4d951e2a8676fedc8cb1b1bdf76c3a38846385a85aa24706c20a8b38465fe2ae0e41f78e614b8e9642fe2471a9015747db976e0c7848c23ff3f417cb05a8d5ef40130adf855c998a62104d7e2fb7c0f9aa2a496075623ced2c0f7eec10147ff9608a8a042ef98117459b93837fd1b8d5ef03978eada74cac\",\n        \"signature\": \"92eb4454814001ecfc18025d6421f64645a5bcbb5cb8fd85c14d772617c503e8be7d3bcf117f5e6801d1c3b96f9090a66ddc67f8cf8ff0f1c125b16b15e2ce07\"\n    },\n    {\n        \"secret_key\": \"6f634387ca2c0cb167a740d6afd89e2a28f5307184e81cba3c037046a5ede23c\",\n        \"public_key\": \"011f2a9a111c38f3490cad1685be78eceedc6fac4a3221301c69c84b1ec7b3a7\",\n        \"message\": \"865c20a94ac3f2e3bd5cb85bec9d33726671fe01f9c537017d59c8d5106e43360bf76fc06186705980c8a87ba3633a4a170426ecc0defb6db2670f5f592533774cda50052ae597d48deacc2637063bfd519f2e79bac81775beccb1ab2f5b39712e2e829469b75a2d2dbd08aa6d24723404b25eb948a4834c55246c8079a82ec64354e8c2388f8c5a616b3cdc371e6263fabc9f6099219e861585fe82a67d610dd1eb5c81c96b5cb354a689fd8aac8db76c433f0cb0b31cf1d855b6a30a3d2a212e9b4f7d7afe619951f98d2f1ba2c101085ba81f49b36037cd6457a7eaa8f4f3bedf68d09fc9fa25a9d754db65360285412d1a6da53788905fcf4efa8a80cd86ca48b845633d8c31c2ae06f16c4c6bbbe9cd1afb59e101be50e03535dd8a65e45bba46d45cb14badfc8e93ab5267f4e492ab1f9a95e61fcab81cbf2bd867a3ec7b4baa189a0f08567075596129dcf9ff1c502d3279e8aa6ce56eaf134582a9e430a5aa8ca10c3da8bc793d0256ad19aea7149f0ea7ea95facfac1c5cfd29d7a3fe1a417975739e14da8edc819900472ca8c69716328e8a299f974edff741aabc1c074a761b3ec8761dda2e7eed7af33ef00409849d415497c5ed5dfaa2259a31d076398170b2d9d210208b4a4c7db8c626d1c533562a1f95489f9819e4985fc4e1d1a707be5e82b005481d86377f424e\",\n        \"signed\": \"fd17c618cdbb5d459ea2aca886f0512c623251284aae3a83eb5d7f60da1d9b2ba083c455a5e2583a3cba736e7b961ba19c1cc8dd90745da82a15dfc662e8e10d865c20a94ac3f2e3bd5cb85bec9d33726671fe01f9c537017d59c8d5106e43360bf76fc06186705980c8a87ba3633a4a170426ecc0defb6db2670f5f592533774cda50052ae597d48deacc2637063bfd519f2e79bac81775beccb1ab2f5b39712e2e829469b75a2d2dbd08aa6d24723404b25eb948a4834c55246c8079a82ec64354e8c2388f8c5a616b3cdc371e6263fabc9f6099219e861585fe82a67d610dd1eb5c81c96b5cb354a689fd8aac8db76c433f0cb0b31cf1d855b6a30a3d2a212e9b4f7d7afe619951f98d2f1ba2c101085ba81f49b36037cd6457a7eaa8f4f3bedf68d09fc9fa25a9d754db65360285412d1a6da53788905fcf4efa8a80cd86ca48b845633d8c31c2ae06f16c4c6bbbe9cd1afb59e101be50e03535dd8a65e45bba46d45cb14badfc8e93ab5267f4e492ab1f9a95e61fcab81cbf2bd867a3ec7b4baa189a0f08567075596129dcf9ff1c502d3279e8aa6ce56eaf134582a9e430a5aa8ca10c3da8bc793d0256ad19aea7149f0ea7ea95facfac1c5cfd29d7a3fe1a417975739e14da8edc819900472ca8c69716328e8a299f974edff741aabc1c074a761b3ec8761dda2e7eed7af33ef00409849d415497c5ed5dfaa2259a31d076398170b2d9d210208b4a4c7db8c626d1c533562a1f95489f9819e4985fc4e1d1a707be5e82b005481d86377f424e\",\n        \"signature\": \"fd17c618cdbb5d459ea2aca886f0512c623251284aae3a83eb5d7f60da1d9b2ba083c455a5e2583a3cba736e7b961ba19c1cc8dd90745da82a15dfc662e8e10d\"\n    },\n    {\n        \"secret_key\": \"4b2e1ae60fa5d383baba54edc168b9b05e0d05ee9c181321dbfddd1983959154\",\n        \"public_key\": \"36c020b18552345619ef8837eb8d5494840e85f46809343b4d6f406125da557d\",\n        \"message\": \"fab98b2bbf86aeb05086812a4b0049a1042abb76df9cd2908755706303efedb1ad21e8bc8d7562349e1e98ce0d752f4b3d99e677368bd08c78fe7425ec3b560e383bd42af6499886c35add80a5828b61d6644d7dc443ba2c06f9bad2eccb983d24458f6ada1b10bb5b77172c5cdd56d273d1e41010b25cf48a7d58d7255702ac12f2a6fe2918466395f460d15236d035ae9410ca86c4605128299faaf09015f1adee7768ee1a8f8ca06d10dd7f95c46fa10253065f9d6f90295908809fd779571be29e0ae66e0bcbdeb7913d2bbb76ac302f3452c55ef199a48eceb0e3596c7b4c0386dae7101ea244a33c4cdc830672df83655b35338052307b94d223cab1af69e07f78e58cbb0cb3c5351e3a6b0c4a927f7562c598d2d3df90569f61db1a3cb0140b56ea02cf7745fbeec2028673d67f1ec5f7daf9715f754a9d8ed46a7a63ef722ee0d5899331b63c974fa880429435767f96254ef46c9968f3fedaafeaf3e8f45634b54f5e0a5fc2d2373ab9e98d9acfe3697e642a18e0dfd9fbc2f094866d401f0a4ca2a456edf6a1a77b9c296c3922067eb3d5a5ca0a77f430e4c8611d8f05a1baac1635ef7ba83dfc69d301949856be4d2c8ab61de29cf39250c5794cbf5750cda95d0468afa2b7f23dba4ef5f5295a3bf4140018b7ed061884444f5bb1b7d239312dd739999536c684456ea06b\",\n        \"signed\": \"2220119e83d69a6a3eed95fa166d1d1128a3f232ca1b78bc94b4d476c4779443614b8772aa2232cb0720a055eb71d8407f3ab19baa1d962c052c84c0bd589608fab98b2bbf86aeb05086812a4b0049a1042abb76df9cd2908755706303efedb1ad21e8bc8d7562349e1e98ce0d752f4b3d99e677368bd08c78fe7425ec3b560e383bd42af6499886c35add80a5828b61d6644d7dc443ba2c06f9bad2eccb983d24458f6ada1b10bb5b77172c5cdd56d273d1e41010b25cf48a7d58d7255702ac12f2a6fe2918466395f460d15236d035ae9410ca86c4605128299faaf09015f1adee7768ee1a8f8ca06d10dd7f95c46fa10253065f9d6f90295908809fd779571be29e0ae66e0bcbdeb7913d2bbb76ac302f3452c55ef199a48eceb0e3596c7b4c0386dae7101ea244a33c4cdc830672df83655b35338052307b94d223cab1af69e07f78e58cbb0cb3c5351e3a6b0c4a927f7562c598d2d3df90569f61db1a3cb0140b56ea02cf7745fbeec2028673d67f1ec5f7daf9715f754a9d8ed46a7a63ef722ee0d5899331b63c974fa880429435767f96254ef46c9968f3fedaafeaf3e8f45634b54f5e0a5fc2d2373ab9e98d9acfe3697e642a18e0dfd9fbc2f094866d401f0a4ca2a456edf6a1a77b9c296c3922067eb3d5a5ca0a77f430e4c8611d8f05a1baac1635ef7ba83dfc69d301949856be4d2c8ab61de29cf39250c5794cbf5750cda95d0468afa2b7f23dba4ef5f5295a3bf4140018b7ed061884444f5bb1b7d239312dd739999536c684456ea06b\",\n        \"signature\": \"2220119e83d69a6a3eed95fa166d1d1128a3f232ca1b78bc94b4d476c4779443614b8772aa2232cb0720a055eb71d8407f3ab19baa1d962c052c84c0bd589608\"\n    },\n    {\n        \"secret_key\": \"b216cebf878024c20dfc86ce4b37bdc47aa28f29203b5b44925065d993a259fe\",\n        \"public_key\": \"c36edbb6254a913f08fe259e238780638f72ec0b3007264bcc60a9e81ee9298f\",\n        \"message\": \"9c8717cc86fe02480bfd9e922bd76bffee2170c4cb1b13df834ac01d45006086297f1b8a26f2ba674d33e1d162f19367feba97352b7df2e75b309d4b6f8b07cc0eb6777e81e268e02d07f2a08f8f39d5a8320bfc01fc8c9227d2cf05e12891ff4de885a1c93371a0910ba53392aff9ba2eed9a2055977ec4157bd65b34df79372f4d50edbc48924353cfa1692319d88a7a5bb726254c209291e9b1d2c1a6c8236398109c59ed42a0ac9e7633c520734eccfea4fea95a47a8f0a068b4275000439cc97c57871e105cc0790e9dcc9c25d5af7063ffd05c4f3780e7bca4c456d0170da709fc6cb3faa72bdcf562908ae9340aef4d0c8b91f0fbccbcf1cd898b1c716f4f1474c3aa316242abdf6368e57a247ff2fd5ce23d187f694f11e38dfbfbc3d9db20903b4ebb449b9049ee020f6e2f508e8b2b165bad7464dbdd178cbd423233765d371e7ae1c3e878cdb5b824b20cb309867c0e473c067e6744008527b6bc076d077f4867622aeed1c253dbde7c6a76c7015962fb73391698600bb318ffa7b0136ee4ccb07daaf01f40ff9c194f98681f9faef8b6f9e99f95df0080da8966a8ba7a9474c537b92df9799e2fd16f788dad7a7bcc745226e1e6371f52ebcdbd144044ddfe632dfc0a43d3a450923170ebc7ae219e50e078a511bc12ef14cd14b5309f38abd65db2b2a7af2243b229c9fd2e\",\n        \"signed\": \"b7389ee78dd9763f9d2892912edcbe3e8a236b8bdc25f44b9cfdc8c47cd58168ab56eb0402a5bd752ac8f4978d2ea2b65d2fa85265966b9f57227ef4a59ae0099c8717cc86fe02480bfd9e922bd76bffee2170c4cb1b13df834ac01d45006086297f1b8a26f2ba674d33e1d162f19367feba97352b7df2e75b309d4b6f8b07cc0eb6777e81e268e02d07f2a08f8f39d5a8320bfc01fc8c9227d2cf05e12891ff4de885a1c93371a0910ba53392aff9ba2eed9a2055977ec4157bd65b34df79372f4d50edbc48924353cfa1692319d88a7a5bb726254c209291e9b1d2c1a6c8236398109c59ed42a0ac9e7633c520734eccfea4fea95a47a8f0a068b4275000439cc97c57871e105cc0790e9dcc9c25d5af7063ffd05c4f3780e7bca4c456d0170da709fc6cb3faa72bdcf562908ae9340aef4d0c8b91f0fbccbcf1cd898b1c716f4f1474c3aa316242abdf6368e57a247ff2fd5ce23d187f694f11e38dfbfbc3d9db20903b4ebb449b9049ee020f6e2f508e8b2b165bad7464dbdd178cbd423233765d371e7ae1c3e878cdb5b824b20cb309867c0e473c067e6744008527b6bc076d077f4867622aeed1c253dbde7c6a76c7015962fb73391698600bb318ffa7b0136ee4ccb07daaf01f40ff9c194f98681f9faef8b6f9e99f95df0080da8966a8ba7a9474c537b92df9799e2fd16f788dad7a7bcc745226e1e6371f52ebcdbd144044ddfe632dfc0a43d3a450923170ebc7ae219e50e078a511bc12ef14cd14b5309f38abd65db2b2a7af2243b229c9fd2e\",\n        \"signature\": \"b7389ee78dd9763f9d2892912edcbe3e8a236b8bdc25f44b9cfdc8c47cd58168ab56eb0402a5bd752ac8f4978d2ea2b65d2fa85265966b9f57227ef4a59ae009\"\n    },\n    {\n        \"secret_key\": \"afcecea92439e44a43ed61b673043dcbc4e360f2f30cd07896cda20cb988d4e3\",\n        \"public_key\": \"d231f69235a2e3a1dd5f6c2a9aaf20c03454b9a29f4e3a29ab94689d0d723e50\",\n        \"message\": \"0b05f89ebb3397947687afbef0ede87cf3810676277037521d952a3bbbbdc8565988a095d8d4f6f59be572d3d821dd789977ef77a2fd7110ceeed9f3756ed8e188267b97a30ef8957c78aea3a2963deca61860545e0c40824881ebb1db10f607e10ddbddce400ea236ba4745aa99a05641976766789ed0da7db55fdab459ebd4b441a6282f7cfd5a20ea06effa335955e5fd29181671bc92c00052f7f75c39277c9a43b787ac9fb1516e996232a509774d1dc21d8c0513f7844b0a5b5f18957581f99044a14223ccda8a284de12fd424265fe57b270215f8fa9ff2bea517934e4800a47d346fb6c361cfbabeffabd9c4164f45156e245c977edb473642c3940be5ad6fd1a7119a7b18e98d6dc843e0d254c93d0146d18e5c62ede1490f89a605eb454f974778cfae20932e95477bd03bcdb97d5bcb76335942e92ee668f231e69c570ac5446d0f774066737fdf49f10ceb1b52d6d8a4639846a3373a7c6f3b4b3159fe2e7af7eee2f0df172d94d255d017651da3009005e5eac3176c09389ee40d70383bd37117eca083598a1801f592d057186e568e247c252be4b14f723ab7ddb97ae9768c2682fd63acc300779fe04e2b88874751346c9e0f97a2a216772ff9625c33bd7e29fed8003a08dbd33b5d17899c943c25e95ad754fb632e047c112af7f7ceba72362e1a3ddd2935aaf7f818a27c\",\n        \"signed\": \"a65545cf3df456b28d83a6d94c036a19d0d29fb065edc27e5e93a1f40279897e1c6f25959a725ababc87cf2ae727f3467b79570e902711917191d9cb0d2d660c0b05f89ebb3397947687afbef0ede87cf3810676277037521d952a3bbbbdc8565988a095d8d4f6f59be572d3d821dd789977ef77a2fd7110ceeed9f3756ed8e188267b97a30ef8957c78aea3a2963deca61860545e0c40824881ebb1db10f607e10ddbddce400ea236ba4745aa99a05641976766789ed0da7db55fdab459ebd4b441a6282f7cfd5a20ea06effa335955e5fd29181671bc92c00052f7f75c39277c9a43b787ac9fb1516e996232a509774d1dc21d8c0513f7844b0a5b5f18957581f99044a14223ccda8a284de12fd424265fe57b270215f8fa9ff2bea517934e4800a47d346fb6c361cfbabeffabd9c4164f45156e245c977edb473642c3940be5ad6fd1a7119a7b18e98d6dc843e0d254c93d0146d18e5c62ede1490f89a605eb454f974778cfae20932e95477bd03bcdb97d5bcb76335942e92ee668f231e69c570ac5446d0f774066737fdf49f10ceb1b52d6d8a4639846a3373a7c6f3b4b3159fe2e7af7eee2f0df172d94d255d017651da3009005e5eac3176c09389ee40d70383bd37117eca083598a1801f592d057186e568e247c252be4b14f723ab7ddb97ae9768c2682fd63acc300779fe04e2b88874751346c9e0f97a2a216772ff9625c33bd7e29fed8003a08dbd33b5d17899c943c25e95ad754fb632e047c112af7f7ceba72362e1a3ddd2935aaf7f818a27c\",\n        \"signature\": \"a65545cf3df456b28d83a6d94c036a19d0d29fb065edc27e5e93a1f40279897e1c6f25959a725ababc87cf2ae727f3467b79570e902711917191d9cb0d2d660c\"\n    },\n    {\n        \"secret_key\": \"b834c6e0facbff580dd3b23753959a4c2154c219521b3d27035d071f6599bd02\",\n        \"public_key\": \"d1c384715e3b3d02c13e090605534c7db740da2aa560f53200a3ced8beae8cf8\",\n        \"message\": \"6cf147b1605528a36be75716a14b420bcf067c03f1cfe9c4402f14987fbfc9d3ecc3ccf4f8d2d03a55900b8dc79af3b6e77436f69b1417ad4b68fd44e5e333ed90ea7943fbd1122609ec8ff6bb25e42e9914f5920fc72c4d013b6a9685c996fbd8352aafb184c22d9e47871a5280e4ab7dd6a5cfd10a5994a200f670e0b622a9394d4793d0a420e7d8806cb127c7ac690d45a2e94166cea672bcd982b0e9baad56312d2570ddde7e0b9e7f47136f0481d00f66a2aaca4d1b09d7ce6c5a98a76b68cd97d5793968d667073f8217f9054735340f9b149c0dce845b099e88d0709680f0f77603ff0a2331c558fc36d5f24da9a62d69af5190d21b5c857a1e08f014c6d456468665a7f845c66f9111f9c098c68940efcd87b657070cb9164bc9743aceb7439a0d01c0062a11af2e11349397f5d152872b13c5ab32f51cc58f1475ec82ac671561dcbd343cfb3c5f78d0fc73053c6004b0a4ca3f2043ff4b0c54275c4fcb9cadc6baabe57b1d5acd531e972ef9335136cd1d65512ba1f5b6ccc4b66b4250aafa2967dd4211a2742e0f177d8f4063899f61815cbe6d8fbfcdf74812bd40cc10084e46a99ac128058eaf16a49a24b6ae228ecf0109c52dfc06e37d6a333bcb24aba312164c6c0290485d251280538ce9541c0916640e36d6929dcd9588eb99577f5f6d82bcbb198826267e49f5daff2c0d\",\n        \"signed\": \"0f19b7066d5792328a9800d9d4f8f67d5b089b541226a167dacd439fa485b0025a5dc7f2c7e23fc4a5c6869e7619d356399700c93650e89cd25b90fb9925e3046cf147b1605528a36be75716a14b420bcf067c03f1cfe9c4402f14987fbfc9d3ecc3ccf4f8d2d03a55900b8dc79af3b6e77436f69b1417ad4b68fd44e5e333ed90ea7943fbd1122609ec8ff6bb25e42e9914f5920fc72c4d013b6a9685c996fbd8352aafb184c22d9e47871a5280e4ab7dd6a5cfd10a5994a200f670e0b622a9394d4793d0a420e7d8806cb127c7ac690d45a2e94166cea672bcd982b0e9baad56312d2570ddde7e0b9e7f47136f0481d00f66a2aaca4d1b09d7ce6c5a98a76b68cd97d5793968d667073f8217f9054735340f9b149c0dce845b099e88d0709680f0f77603ff0a2331c558fc36d5f24da9a62d69af5190d21b5c857a1e08f014c6d456468665a7f845c66f9111f9c098c68940efcd87b657070cb9164bc9743aceb7439a0d01c0062a11af2e11349397f5d152872b13c5ab32f51cc58f1475ec82ac671561dcbd343cfb3c5f78d0fc73053c6004b0a4ca3f2043ff4b0c54275c4fcb9cadc6baabe57b1d5acd531e972ef9335136cd1d65512ba1f5b6ccc4b66b4250aafa2967dd4211a2742e0f177d8f4063899f61815cbe6d8fbfcdf74812bd40cc10084e46a99ac128058eaf16a49a24b6ae228ecf0109c52dfc06e37d6a333bcb24aba312164c6c0290485d251280538ce9541c0916640e36d6929dcd9588eb99577f5f6d82bcbb198826267e49f5daff2c0d\",\n        \"signature\": \"0f19b7066d5792328a9800d9d4f8f67d5b089b541226a167dacd439fa485b0025a5dc7f2c7e23fc4a5c6869e7619d356399700c93650e89cd25b90fb9925e304\"\n    },\n    {\n        \"secret_key\": \"2269a5d8f7ac2cd9048f5f49e349e5c435a159b319fe3b30bfac8d0d505943f4\",\n        \"public_key\": \"1c817943dc39c24b01da38a487b175482460c609e4726349a9aa7aea9bc0fb34\",\n        \"message\": \"7153d4d9e641aa61920db0ff4bd537a6d6130a396554cc94537698f9cad16b99eebefa5f2776f2feaff6bd9a6904120c67e0883f6b96bbbb195e95aec753b699bab3d03944c13c72fc84e3f2cbf6296f645549111c93fae1a759bfcd16fc09e60bb9785535ad27da244ef2f857f2de99a6e92188890e452c7f5b9e3a4b968e11743b6fc7faf1275e5360a5468941797894d770fa7da364a337302239fe83ae0b0d084aa12acdc63462524e0eb10fefe81ba96f71f275f3449a3f8db21d58749a38853d39b0ad8e69891bd204dfca8f6c239dc9a0ac27f54db4238d4706df11d607369dc7f704da1d39f2e82af8c283d220c12431f56d803069b4acb77081c031ae3319fc77fca7845097fd727ad0d080895bba23e873d2def8cdc216c3eed61b08761bb9ebce0282cf502aaf6ce7e8c058637958c3ea1b72fe6e8df8d37ac055db6992587fabbdc467f52475644f918863af620492f34680f2056cbcab75e2323626c094759c0e0e99ef19759527250646ad760120ba386699d53934f956b8bbc7395bb496ceb2dd223c7b501b92d36a95f8f0a02eb5ba4dddf166b9b95b4a59e72a30c63cf21e6085751923d54b30281e52a09618e6f023ba0a21675e7f989b8991588c96c2b56a78f5d2945a7baeb6a0c1bbd5d95af3ee830f5809c794a15ab4b5f89dd2be2dfdcd8fe0520fda2b3f02a1ac0155\",\n        \"signed\": \"be0fb3308a076a61a4a92a97f6ac55327190e1341d6dd410d86b41bdaf2d3374093ef720bdb77feb7014e0f77d3b809623c7ca53e2ae4b097113e96db77a2d087153d4d9e641aa61920db0ff4bd537a6d6130a396554cc94537698f9cad16b99eebefa5f2776f2feaff6bd9a6904120c67e0883f6b96bbbb195e95aec753b699bab3d03944c13c72fc84e3f2cbf6296f645549111c93fae1a759bfcd16fc09e60bb9785535ad27da244ef2f857f2de99a6e92188890e452c7f5b9e3a4b968e11743b6fc7faf1275e5360a5468941797894d770fa7da364a337302239fe83ae0b0d084aa12acdc63462524e0eb10fefe81ba96f71f275f3449a3f8db21d58749a38853d39b0ad8e69891bd204dfca8f6c239dc9a0ac27f54db4238d4706df11d607369dc7f704da1d39f2e82af8c283d220c12431f56d803069b4acb77081c031ae3319fc77fca7845097fd727ad0d080895bba23e873d2def8cdc216c3eed61b08761bb9ebce0282cf502aaf6ce7e8c058637958c3ea1b72fe6e8df8d37ac055db6992587fabbdc467f52475644f918863af620492f34680f2056cbcab75e2323626c094759c0e0e99ef19759527250646ad760120ba386699d53934f956b8bbc7395bb496ceb2dd223c7b501b92d36a95f8f0a02eb5ba4dddf166b9b95b4a59e72a30c63cf21e6085751923d54b30281e52a09618e6f023ba0a21675e7f989b8991588c96c2b56a78f5d2945a7baeb6a0c1bbd5d95af3ee830f5809c794a15ab4b5f89dd2be2dfdcd8fe0520fda2b3f02a1ac0155\",\n        \"signature\": \"be0fb3308a076a61a4a92a97f6ac55327190e1341d6dd410d86b41bdaf2d3374093ef720bdb77feb7014e0f77d3b809623c7ca53e2ae4b097113e96db77a2d08\"\n    },\n    {\n        \"secret_key\": \"e965b3f257356685c98b42b964a253fc495399cc94b099c2445fc81c759c68e5\",\n        \"public_key\": \"689f5410c8e0f4d37bc07c85d7cce6c9b63601f9bdafecaa448a5eed64afc8c6\",\n        \"message\": \"6f20a9ad27e30dac76b30d4c19a5bd6dfd6d049213f4becdd963d72b8b2dad687b003808201d50f7dd6e599ef58ceb6068c545ed99b9e763f9b0ec1db5fcbd7d490a121ecec6bba1eb5edbd6de85364707c55e300c8b16bb2530f70898136689c988591d5391d9cc347d7931061a9b7696e2c9f35bc0d304a81c2cf954d9c3a88a22e1d67bbe0a85308477f62918c25db504e4762f0e3b4246007908ac701779006b77d72510edc69e17d0f6394c77e5551875a446f81233415d0a91a0460b51c413d644e850f8557281c46699e53b22a7c73b068ea38652cff3b0a7b8ba30971eab18fdbbd8739ee1ee0cd5cbfb7d5d41757b6331271fb7809751e203513c9970f66d91bc0ce062f4fcb28be0a699867b79594c6458a0d307acac91f413c4615877dc53e1b018da5cfce1b63f40be1e55274c4374cdfc21524499a683a231adef779d1921440e5d3fdbd5033dc983cfc931abe638c35d5a95869e9fe3d93eb90bd1861f855ce1f608b7bcad6b5e1bd97edc95ed5ddcbcb715d919f5ff77df2da438f7a3a98286dbd5b6e043fc7372f69704f09d865530f4f0edd3300f185b6d73d8716d32d32b1c9ac2ddf4f902d3f216d35a33f368095ded10be94bb53d6f256560fac2f4af0edf5c5c702143777126e7de32d07493932662129ba0e7fc7cfb36fd2ca531646e8cd2211854fc510af3b1e8cafde7a\",\n        \"signed\": \"8d2bc4e1cd256aad8a151dec010dc93a5e5cca58298dec49cbc9c4717b5cfb5460d430be726b0f302cbd926beea19aa3c93aeb452a44f6007af49adf2f05bb046f20a9ad27e30dac76b30d4c19a5bd6dfd6d049213f4becdd963d72b8b2dad687b003808201d50f7dd6e599ef58ceb6068c545ed99b9e763f9b0ec1db5fcbd7d490a121ecec6bba1eb5edbd6de85364707c55e300c8b16bb2530f70898136689c988591d5391d9cc347d7931061a9b7696e2c9f35bc0d304a81c2cf954d9c3a88a22e1d67bbe0a85308477f62918c25db504e4762f0e3b4246007908ac701779006b77d72510edc69e17d0f6394c77e5551875a446f81233415d0a91a0460b51c413d644e850f8557281c46699e53b22a7c73b068ea38652cff3b0a7b8ba30971eab18fdbbd8739ee1ee0cd5cbfb7d5d41757b6331271fb7809751e203513c9970f66d91bc0ce062f4fcb28be0a699867b79594c6458a0d307acac91f413c4615877dc53e1b018da5cfce1b63f40be1e55274c4374cdfc21524499a683a231adef779d1921440e5d3fdbd5033dc983cfc931abe638c35d5a95869e9fe3d93eb90bd1861f855ce1f608b7bcad6b5e1bd97edc95ed5ddcbcb715d919f5ff77df2da438f7a3a98286dbd5b6e043fc7372f69704f09d865530f4f0edd3300f185b6d73d8716d32d32b1c9ac2ddf4f902d3f216d35a33f368095ded10be94bb53d6f256560fac2f4af0edf5c5c702143777126e7de32d07493932662129ba0e7fc7cfb36fd2ca531646e8cd2211854fc510af3b1e8cafde7a\",\n        \"signature\": \"8d2bc4e1cd256aad8a151dec010dc93a5e5cca58298dec49cbc9c4717b5cfb5460d430be726b0f302cbd926beea19aa3c93aeb452a44f6007af49adf2f05bb04\"\n    },\n    {\n        \"secret_key\": \"bc3b1e0bf8d69ea5b4cbbf10bb33fc955adcbe13fc20af8a10872ce9df39d6bd\",\n        \"public_key\": \"accd2628155919bbc7f9d86f91dafec35c711a78c79ad360eddb88fa8a180b2d\",\n        \"message\": \"4c73e04abe0819de1f84d70541eb1bb61c4f42920e1f2d1d9e6281a8a2e8b3eb45537d83969027f99ef0ea27ca085b13f9db480f00c02f3fd7429dd567708953bbf3b9e8e2c6ac4d321ff8f9e4a3154723085a54e9c9573cc7350c09f8973f948b08730373597a5fd0349821ae0a3cd6c84992b189128f3490987e1e9ad4f6574ca538fdfd83284c1eb0953f24c08f74932d4364dbbef922542440dae80424a92eaef27c1889bd08c44f9df03a3af30dffb48fae445e625f4d9265cf387a1da35fe4c231504535db72ea81a186805f856ebe6a6a65241432530fe6c960c5f9be6c22957060304e9dd8efbc1e482e7ddbd8af03bf2382899c986d916611e4f27ae52f817ef01b6a141fe4f685d94dc8cd52830043934587704c1e642e8fe56be6d6b85bf4a6feb2b6858f1f007f99d39ea04c9fe5fa7ef1b91f495ed0e7fa4213dd68cea42b6729f95031907e27c44098094386fabfb04ab9b4de3d6861de462312c59b27c76f7b6a4fc71ea0d5daf6b7320521a67e5cb37504976ad73dae2d649feb75e2eadd3401a7f2f36e16dfbfbdb2af5716cba1bce20cd47ce1c1d7be00697001fbbeb4915aa6e5393b5ab20e0f31f5119149a2cb4c4d452c8156113ac7824f84f09aeb81202e8dd3dac0aa89399b5a38b1e218301960a37d52632eeaefe3687455464288eb17d9e19a3a72ed9de32c17be79a3b9\",\n        \"signed\": \"6ef7f0e91f2cc6715f8e5a98574b4400c261a643e0545ff26747f8e1739899d76640b6451c43c1d03a4775b54fcf9bce18ed3fccad338b7764024fdfa2de82014c73e04abe0819de1f84d70541eb1bb61c4f42920e1f2d1d9e6281a8a2e8b3eb45537d83969027f99ef0ea27ca085b13f9db480f00c02f3fd7429dd567708953bbf3b9e8e2c6ac4d321ff8f9e4a3154723085a54e9c9573cc7350c09f8973f948b08730373597a5fd0349821ae0a3cd6c84992b189128f3490987e1e9ad4f6574ca538fdfd83284c1eb0953f24c08f74932d4364dbbef922542440dae80424a92eaef27c1889bd08c44f9df03a3af30dffb48fae445e625f4d9265cf387a1da35fe4c231504535db72ea81a186805f856ebe6a6a65241432530fe6c960c5f9be6c22957060304e9dd8efbc1e482e7ddbd8af03bf2382899c986d916611e4f27ae52f817ef01b6a141fe4f685d94dc8cd52830043934587704c1e642e8fe56be6d6b85bf4a6feb2b6858f1f007f99d39ea04c9fe5fa7ef1b91f495ed0e7fa4213dd68cea42b6729f95031907e27c44098094386fabfb04ab9b4de3d6861de462312c59b27c76f7b6a4fc71ea0d5daf6b7320521a67e5cb37504976ad73dae2d649feb75e2eadd3401a7f2f36e16dfbfbdb2af5716cba1bce20cd47ce1c1d7be00697001fbbeb4915aa6e5393b5ab20e0f31f5119149a2cb4c4d452c8156113ac7824f84f09aeb81202e8dd3dac0aa89399b5a38b1e218301960a37d52632eeaefe3687455464288eb17d9e19a3a72ed9de32c17be79a3b9\",\n        \"signature\": \"6ef7f0e91f2cc6715f8e5a98574b4400c261a643e0545ff26747f8e1739899d76640b6451c43c1d03a4775b54fcf9bce18ed3fccad338b7764024fdfa2de8201\"\n    },\n    {\n        \"secret_key\": \"10718fa6e2d7f6ed38fd66cb6dbfa087e8f1e8a8a24fab58d79d7954b8720c3e\",\n        \"public_key\": \"870d4f666d06fda9f9511b58602eec050d754ea6d8e79cdd19f601c477df1aa0\",\n        \"message\": \"41259b6eef13d6ffe33cdde799b995c40be782cf978440b66be51c440582abd42f526696bb3cb92265b1ed0e4bba764cae2839830a252635dc80ce5f73d521b3d6ff03ac30e198ad20567e75a34fa825ebf9841508da84cd674236ca7b43de3564c94ab079408fd94137ce3f90a5dd5d3ac39a05ec86715a8f025e4539a7640ab88836f4efbabd5e1652c49ea21613acfe343a880ee5a42f2f9134ef4e3716b16d134a9c4c71c39b3c1a857d3c89439783eef1edd71bf4492d05fd18673a5242ff4187b9de47ad4968da49dba5a6092e95ea27ddfc7448dcf5972d9d228d63e5291ba6e6fbd07e3241f9366ca4976bb04b22d01f0dbae794fa9c1d9029f88a83602b0e0ec55e22c37b201125cadb5341ef73f6da1abbe2b1c475f0750345b1be4259d8c28531ffe7788667c410dac339918c869b00ab80f20bf7990d366f9b3d5e8eb2f48d7ed0e64b85dc9fe3bb998b1eecd1231e902d2d152e09da2d2592bdb32c8cd2e2c489496b2980c03dbb09ec7f8a4ea2c7020f2a0faa657cd6ced48d6da27864cf5e97eea9b3c2f0f34abf8d87bd2adeb60c7272fc4306d955bdc8023d7d3dc2f3dafe9ebe8a8d138965a7f6ce93517cd2099663f67c34552176ddb595ac6ea5609febcf24c7d69d412709e578670a21ac8afccb8bf2b18ff3af7de21dc71d50d60d37b6ed729db04beff7d34b2920d87551ce15\",\n        \"signed\": \"e1659186f1f76fe43ac8a11703360fbeff53b5e57b5974aaa08e2575579c27084cf6802e7c206347314475b603197494e7d61fe4b1ee7b78e18d94469352df0c41259b6eef13d6ffe33cdde799b995c40be782cf978440b66be51c440582abd42f526696bb3cb92265b1ed0e4bba764cae2839830a252635dc80ce5f73d521b3d6ff03ac30e198ad20567e75a34fa825ebf9841508da84cd674236ca7b43de3564c94ab079408fd94137ce3f90a5dd5d3ac39a05ec86715a8f025e4539a7640ab88836f4efbabd5e1652c49ea21613acfe343a880ee5a42f2f9134ef4e3716b16d134a9c4c71c39b3c1a857d3c89439783eef1edd71bf4492d05fd18673a5242ff4187b9de47ad4968da49dba5a6092e95ea27ddfc7448dcf5972d9d228d63e5291ba6e6fbd07e3241f9366ca4976bb04b22d01f0dbae794fa9c1d9029f88a83602b0e0ec55e22c37b201125cadb5341ef73f6da1abbe2b1c475f0750345b1be4259d8c28531ffe7788667c410dac339918c869b00ab80f20bf7990d366f9b3d5e8eb2f48d7ed0e64b85dc9fe3bb998b1eecd1231e902d2d152e09da2d2592bdb32c8cd2e2c489496b2980c03dbb09ec7f8a4ea2c7020f2a0faa657cd6ced48d6da27864cf5e97eea9b3c2f0f34abf8d87bd2adeb60c7272fc4306d955bdc8023d7d3dc2f3dafe9ebe8a8d138965a7f6ce93517cd2099663f67c34552176ddb595ac6ea5609febcf24c7d69d412709e578670a21ac8afccb8bf2b18ff3af7de21dc71d50d60d37b6ed729db04beff7d34b2920d87551ce15\",\n        \"signature\": \"e1659186f1f76fe43ac8a11703360fbeff53b5e57b5974aaa08e2575579c27084cf6802e7c206347314475b603197494e7d61fe4b1ee7b78e18d94469352df0c\"\n    },\n    {\n        \"secret_key\": \"c1d4724c6cb1bc6723b2b43034278b3c5b48fed7f8a3cc2318033e7552047351\",\n        \"public_key\": \"c27e392e7c3664b9061ea76d2575dd7c41eaf1da3a65f3a986e0a57f6c40c17e\",\n        \"message\": \"deee99d7a77d4300c17aec1ab323c571c6e9e73a43491a3c7888b76fc03ec43d07af42a05a2aa322d00c8560acef314106b10b9bd12654357ffa26f2390050da63d668c9e2df548f87639e096a35853f82e761fd711d2a265438f5d4db5e32775708150da6cb686a2b4ca211d7f00dc0abcb2ca150e791116a10a5efcff3514dab8ed80a7092c3a015152cb25d9f86ec0d1ca67ddab44d64eeb1f931bfab2ab188956c743db4814808c5cde1b0745b3edd340eb03ffcc80a78f3db310f4f5c20009fc0279c2c1bcb3cedf990bd0e20c6f9fb7515ad6e933b07e99da6ac32b97141187ef63bdb1062e37220a4dcd419d6244cdcc34ea41d0bcbc3138b1d54aefc0190e30b187db073aa7d6cfe04bd3fd2ac00313e3ddd64a181935ca4b8b2a85d36bc27d97b7626767b93ee38def8b6b2c8da9b00263614342faa9d3e738d2713c45ffbeef8c84bcdbc8da4309c8445530f5c617dc866251f548950a14f075aa3117f96e41f899dbe7340b1d90a1352d3b8fb41b79f16a82bc2e4a193b8a7232400996b73b1fc00b2ec1c667577f82824d39fb7f6e7692dcd97b1d8ce94083ca197e9a5d40fadff0b9ac57e9de761c156e6d31d52c332d513e9f58697dcbdd80a5e42c551702c3de7beccc3db845b1a04c8cbd41695ea7428abba89e0dce3e3d9e70230ae9147c2b88559dc695d6809a51ccbc1dd9e089c585f\",\n        \"signed\": \"d37a6ec82ed45ca9b4855de9cb942564e883ff70a79b8e712d5f604ec8974de5363ac849cbab28e7aeeff28ed3f2d14b608b3146c2efe0735ad815c7d75a1a01deee99d7a77d4300c17aec1ab323c571c6e9e73a43491a3c7888b76fc03ec43d07af42a05a2aa322d00c8560acef314106b10b9bd12654357ffa26f2390050da63d668c9e2df548f87639e096a35853f82e761fd711d2a265438f5d4db5e32775708150da6cb686a2b4ca211d7f00dc0abcb2ca150e791116a10a5efcff3514dab8ed80a7092c3a015152cb25d9f86ec0d1ca67ddab44d64eeb1f931bfab2ab188956c743db4814808c5cde1b0745b3edd340eb03ffcc80a78f3db310f4f5c20009fc0279c2c1bcb3cedf990bd0e20c6f9fb7515ad6e933b07e99da6ac32b97141187ef63bdb1062e37220a4dcd419d6244cdcc34ea41d0bcbc3138b1d54aefc0190e30b187db073aa7d6cfe04bd3fd2ac00313e3ddd64a181935ca4b8b2a85d36bc27d97b7626767b93ee38def8b6b2c8da9b00263614342faa9d3e738d2713c45ffbeef8c84bcdbc8da4309c8445530f5c617dc866251f548950a14f075aa3117f96e41f899dbe7340b1d90a1352d3b8fb41b79f16a82bc2e4a193b8a7232400996b73b1fc00b2ec1c667577f82824d39fb7f6e7692dcd97b1d8ce94083ca197e9a5d40fadff0b9ac57e9de761c156e6d31d52c332d513e9f58697dcbdd80a5e42c551702c3de7beccc3db845b1a04c8cbd41695ea7428abba89e0dce3e3d9e70230ae9147c2b88559dc695d6809a51ccbc1dd9e089c585f\",\n        \"signature\": \"d37a6ec82ed45ca9b4855de9cb942564e883ff70a79b8e712d5f604ec8974de5363ac849cbab28e7aeeff28ed3f2d14b608b3146c2efe0735ad815c7d75a1a01\"\n    },\n    {\n        \"secret_key\": \"37c070d4a53b13be760635110d1bd4f01920225afabec576faaec910f2926d1a\",\n        \"public_key\": \"0aa85f2ab1dff895d1fad0c119f2bf57126aab601c528d37698e97702d35f525\",\n        \"message\": \"10c646447f81ad94d015d86d0d98b2452dca60a47ab35264035e33a0942b954e3e23b91d8123b8593c6af7c8d3ecd290e0e5ee36fd4e53b7be633a6cf027a5ac3f0f679eb1bdd210a38ea6e48b0558e303010af474e7f6df2a4e457699fc38e36938b05ffcaa1b694e32f3d1b2cc5d00cf256f12184c873e519089ec1df15b0dc76e7bfe90780df58136fe597fce894ca563e08efa0f2d4d208bede9a874882873d251baf019fe46d1d6504b3bcd243b795351f34d2e7606aa975528ee50d59efb6ee6992a89b2426956c2ca4247e0df0129852983e9767a8eed1bc7335ffca8d0289f04807f67ca7da971f58db8b9bc9fdbe4f83cfe9a00f1ca584798bc71d851ff7cd6c51b8990aaba4d38b416b92240dfb70ee3c12b5e731057762ef90823fbf683ca06d05c20d3ae2b97a83ebe70ae17afff9d16609d546d8d3c74bc281884894f3d49e083f10ae7c11c1dca0effefcfa6e0f1535081fac3a2819fd2e3265527182ae9d391b232bb7542e68455cd267760db652d19e22fb2ed11cd1305ba8d98c1ebf2d1969b24d64f3e319af74e092006d2a3ff744872a20ebf18d17748ab7110805096ea136bce2f968b205e650b803c531d06775ae5ceea28bb92e9a0edec8951ce2009a88ee1b64d9b9e89f69051203384210a102a44d2d6703173b68507dceadd3bf6510df2a5cefd9c80e4f385b2f9e6215813ed32\",\n        \"signed\": \"9da60cc4a64d07dee1346bd3d3010995ce2738208ab35b34c2a8fd1787ae3a1e207fe784525154fae4f5794cd8503045fea85cf77fd92f6a70cd0c5a52c0810e10c646447f81ad94d015d86d0d98b2452dca60a47ab35264035e33a0942b954e3e23b91d8123b8593c6af7c8d3ecd290e0e5ee36fd4e53b7be633a6cf027a5ac3f0f679eb1bdd210a38ea6e48b0558e303010af474e7f6df2a4e457699fc38e36938b05ffcaa1b694e32f3d1b2cc5d00cf256f12184c873e519089ec1df15b0dc76e7bfe90780df58136fe597fce894ca563e08efa0f2d4d208bede9a874882873d251baf019fe46d1d6504b3bcd243b795351f34d2e7606aa975528ee50d59efb6ee6992a89b2426956c2ca4247e0df0129852983e9767a8eed1bc7335ffca8d0289f04807f67ca7da971f58db8b9bc9fdbe4f83cfe9a00f1ca584798bc71d851ff7cd6c51b8990aaba4d38b416b92240dfb70ee3c12b5e731057762ef90823fbf683ca06d05c20d3ae2b97a83ebe70ae17afff9d16609d546d8d3c74bc281884894f3d49e083f10ae7c11c1dca0effefcfa6e0f1535081fac3a2819fd2e3265527182ae9d391b232bb7542e68455cd267760db652d19e22fb2ed11cd1305ba8d98c1ebf2d1969b24d64f3e319af74e092006d2a3ff744872a20ebf18d17748ab7110805096ea136bce2f968b205e650b803c531d06775ae5ceea28bb92e9a0edec8951ce2009a88ee1b64d9b9e89f69051203384210a102a44d2d6703173b68507dceadd3bf6510df2a5cefd9c80e4f385b2f9e6215813ed32\",\n        \"signature\": \"9da60cc4a64d07dee1346bd3d3010995ce2738208ab35b34c2a8fd1787ae3a1e207fe784525154fae4f5794cd8503045fea85cf77fd92f6a70cd0c5a52c0810e\"\n    },\n    {\n        \"secret_key\": \"1126496a582ce58d3d618dd8a3933547aa7a8a30fb54063b8dfdd31671c6c73d\",\n        \"public_key\": \"e10229c623fa8ad8982c3e4c36ff52df0f219b57915b6e980e5fe72ea0962e22\",\n        \"message\": \"6a4b52d730ddab829b2a179590cbd4c372498e9f439977c0a10dc13c0ae1736eaaff063371434fd0da80360ec5890607d2fae1c9a2e1ab0b7f3d667f5b1b9c418f18b10c9e6fd669d3ebec168efef44163e577a2ebd0f2cb768f80c23188e86069e4d10f410306cedd7a341a61e0f4f3bc25041bc2f922ed073e1e2f1b709c579d10630f33071754d707894a1c62190de18882c564dc4c01dc545dd8966404ed78fa3267a9469f63b6120abb65f9b3ba3eee28d79c2eb4e7020cc6987dfc5c29672f8c0fa3e690d584fe000c64f352610179621bfd5ff3eb30d18f1a0250416db93b1c1e93cf8a3646517560d1cc8fff822b51ef27b200e987b592390753453ef138bd3d29db7cb1b5f45e4795b89c53f49704192752237c6ab274849f9594ee9777f6efe70483129d067f97199d9ae36090703864f7ca4750a6f3b6ff83824c910484394d1e2eceba18446fe4e994ce07433a740ddd05f0e396d482894e6f14acf7b97bae6c7eb88703039fa785d60a3af78b13243a4f88dde1d998617f2e3fa7eafc2f435dd4ac1ea9c238407aa09b4eea8ed434927b406674ac270458cfb3bf29c347f94559613179b9502192321b88e9af0a90e9a4ab9eddaae382e3734d1415ebe32499c34e6fdeaf15b0d9787985e08dfe495460c54f6743d81ff16881e5e30c51f4b092373783f12423c3e1ae8591130a269980caa1cb5c\",\n        \"signed\": \"b30eb56ca9b120bf849a3a9d56af033de8a590c9e1240c1e36dbc6cf0a71b78a11ec143fb9959a8f25b57711d6a90a67e01be3a4da2b69394869bb8d64b87e0f6a4b52d730ddab829b2a179590cbd4c372498e9f439977c0a10dc13c0ae1736eaaff063371434fd0da80360ec5890607d2fae1c9a2e1ab0b7f3d667f5b1b9c418f18b10c9e6fd669d3ebec168efef44163e577a2ebd0f2cb768f80c23188e86069e4d10f410306cedd7a341a61e0f4f3bc25041bc2f922ed073e1e2f1b709c579d10630f33071754d707894a1c62190de18882c564dc4c01dc545dd8966404ed78fa3267a9469f63b6120abb65f9b3ba3eee28d79c2eb4e7020cc6987dfc5c29672f8c0fa3e690d584fe000c64f352610179621bfd5ff3eb30d18f1a0250416db93b1c1e93cf8a3646517560d1cc8fff822b51ef27b200e987b592390753453ef138bd3d29db7cb1b5f45e4795b89c53f49704192752237c6ab274849f9594ee9777f6efe70483129d067f97199d9ae36090703864f7ca4750a6f3b6ff83824c910484394d1e2eceba18446fe4e994ce07433a740ddd05f0e396d482894e6f14acf7b97bae6c7eb88703039fa785d60a3af78b13243a4f88dde1d998617f2e3fa7eafc2f435dd4ac1ea9c238407aa09b4eea8ed434927b406674ac270458cfb3bf29c347f94559613179b9502192321b88e9af0a90e9a4ab9eddaae382e3734d1415ebe32499c34e6fdeaf15b0d9787985e08dfe495460c54f6743d81ff16881e5e30c51f4b092373783f12423c3e1ae8591130a269980caa1cb5c\",\n        \"signature\": \"b30eb56ca9b120bf849a3a9d56af033de8a590c9e1240c1e36dbc6cf0a71b78a11ec143fb9959a8f25b57711d6a90a67e01be3a4da2b69394869bb8d64b87e0f\"\n    },\n    {\n        \"secret_key\": \"9c167aff3b1b788f133d422de8ca9a64316409f9e35bfe22032ec417ae9abc6d\",\n        \"public_key\": \"efb534f0d47c068e77b28a906d95ad8d213a4d4fc1c70542f01e596d57b5f019\",\n        \"message\": \"68ac0fc2b607ba38e377fae845c808c8f9fa614eb1f31158a9620a937d3e301e85acaa69144bc349a39dfb582041c4a197ae99b4d4d59b7a2ca3d16228b5591cbf57c18a781efd19193c47b16c6023a3a8ba3d668f05a37f1e83b0d7febdd10f63e48ef7a20e015b1c6725d4c300a986c60e3a115469c8e52ba05b51c05d0af40d89fd9ed76f36950aee3c7819898a903cfe0361a91c69100b495141e86ee79d63d17403fb1a1629ef63cb7e9d2720cbfff0002b190bcdc26794124dd38d42bcaa7175405eb0bbcf8e37d65d05a37195b479371fa2bbbb167d91cee88235dd72ea88fc73ce3ce43d33b715f25f192ec215dac124899c5e7586e86340d8cbe53735defbe02e4cc9fde69fb9794d1db72b98c0f19766ee5138bbfa78909aa299b4913c499deaf54b4841d5044829984936700dcf92f36542b2fc7e86441b9925f5d0b78c17a85cfcfcb20b0fd751349c27463abde4d27df74265288713f96dea013b945521808b4996b1b2dc0338b6d236efd6d2b27dafda46ec5fa32b965e8bb5e8bb61bd966edeb774681e0ea8c17b8c99fa7d660f0f66c9bc6d95cbd7dc094724098eb05191b53a3df6566b9c90e0d7dff2943848b61a20d48c22b6d3c958e293d709c8f48110230ff51918562877daf6d920c85a82e07c451fe7ae9759c0a77e97bb298b5d0592a41d08f67a4ed5a1bb41e937b6a68aeb38fd5be9\",\n        \"signed\": \"c9ae67fd6415dcbab292fab394ca6c3b7d90ca244dc6a7764e74fd202bf4b2905bd2030e6beb914c3c238db371b1cba6d9261aa392ec871a4b8b12fe9c1c970e68ac0fc2b607ba38e377fae845c808c8f9fa614eb1f31158a9620a937d3e301e85acaa69144bc349a39dfb582041c4a197ae99b4d4d59b7a2ca3d16228b5591cbf57c18a781efd19193c47b16c6023a3a8ba3d668f05a37f1e83b0d7febdd10f63e48ef7a20e015b1c6725d4c300a986c60e3a115469c8e52ba05b51c05d0af40d89fd9ed76f36950aee3c7819898a903cfe0361a91c69100b495141e86ee79d63d17403fb1a1629ef63cb7e9d2720cbfff0002b190bcdc26794124dd38d42bcaa7175405eb0bbcf8e37d65d05a37195b479371fa2bbbb167d91cee88235dd72ea88fc73ce3ce43d33b715f25f192ec215dac124899c5e7586e86340d8cbe53735defbe02e4cc9fde69fb9794d1db72b98c0f19766ee5138bbfa78909aa299b4913c499deaf54b4841d5044829984936700dcf92f36542b2fc7e86441b9925f5d0b78c17a85cfcfcb20b0fd751349c27463abde4d27df74265288713f96dea013b945521808b4996b1b2dc0338b6d236efd6d2b27dafda46ec5fa32b965e8bb5e8bb61bd966edeb774681e0ea8c17b8c99fa7d660f0f66c9bc6d95cbd7dc094724098eb05191b53a3df6566b9c90e0d7dff2943848b61a20d48c22b6d3c958e293d709c8f48110230ff51918562877daf6d920c85a82e07c451fe7ae9759c0a77e97bb298b5d0592a41d08f67a4ed5a1bb41e937b6a68aeb38fd5be9\",\n        \"signature\": \"c9ae67fd6415dcbab292fab394ca6c3b7d90ca244dc6a7764e74fd202bf4b2905bd2030e6beb914c3c238db371b1cba6d9261aa392ec871a4b8b12fe9c1c970e\"\n    },\n    {\n        \"secret_key\": \"e9948805eb341b2867479c668fd3532c309941c0ad4cb2e54231756e6a1bdecb\",\n        \"public_key\": \"5447a8e34d6a640002d8d60bcf1ddc711e4c465c94c34b50bdef358960ff81f1\",\n        \"message\": \"91cffd7eb1cf6bd4756bce6a30af9dfba26ddd1cce0394c194a3e39cc3d1cbc221b7eb70bea18d29c267457176a3c9e53c18e47d10a67c464505197702e6b2470d38869db5174b158f9992e4435d02246f540258dedd3ce33df582555a681fb76ecaccb1c2989b177e3b7e454aaa529de59bf5a03123d571df2e7f7cb830805c58b74a653bac0e5a888e08dc2236d6cd496aa06d0d67cf3b335e218c49dedad82fc1be9ef20cac61905c30eb132d739b16ca8a8c906619c0e0d8b33985327e36f3d4b8fda387c186cc50443104db761f7ff9301270204a713e58902101fad000ce931647c577fdec148dca95cdc08918ebed037c60332fadf088f036083ebc92e173b7ddcc30c493f27e69cd17a20d30b78f83a72e4f5a747d86d96c5e1bb7a438166204013e2164d6aabc0d562f54015c365c80445607145e5692ee34f6353077fab7452d88ce3eb01d2b3797dc91b341a3a726301516baae18e851f74dfbdf0866bb2376867de55231e362c472c52116544cd4f81e93571c4ec820e7e653f4e21be0a942576c9de91e7d1251683d859de448f822dcf3d2cf55ede2f9c71b6063d1373061f8f5936b698d1384e65459ea2bc26ec96775ef425207432dda0ac1fe28526c5e4559349c3d8df9918230f4044683cc2c1b858d141ab8d0805bb9336067522aa89c810f3eaa7ac2d8dd28c3751225a19ecec8bcca52439946\",\n        \"signed\": \"d3dc62d6ce9c766f2abaf9a7fbe09d6bdb07a4747b56080db09beb4a4e804a70d7ddf4119475c7be834f31956f4a71dad029cdf2363dd0365ce22dc27f07800391cffd7eb1cf6bd4756bce6a30af9dfba26ddd1cce0394c194a3e39cc3d1cbc221b7eb70bea18d29c267457176a3c9e53c18e47d10a67c464505197702e6b2470d38869db5174b158f9992e4435d02246f540258dedd3ce33df582555a681fb76ecaccb1c2989b177e3b7e454aaa529de59bf5a03123d571df2e7f7cb830805c58b74a653bac0e5a888e08dc2236d6cd496aa06d0d67cf3b335e218c49dedad82fc1be9ef20cac61905c30eb132d739b16ca8a8c906619c0e0d8b33985327e36f3d4b8fda387c186cc50443104db761f7ff9301270204a713e58902101fad000ce931647c577fdec148dca95cdc08918ebed037c60332fadf088f036083ebc92e173b7ddcc30c493f27e69cd17a20d30b78f83a72e4f5a747d86d96c5e1bb7a438166204013e2164d6aabc0d562f54015c365c80445607145e5692ee34f6353077fab7452d88ce3eb01d2b3797dc91b341a3a726301516baae18e851f74dfbdf0866bb2376867de55231e362c472c52116544cd4f81e93571c4ec820e7e653f4e21be0a942576c9de91e7d1251683d859de448f822dcf3d2cf55ede2f9c71b6063d1373061f8f5936b698d1384e65459ea2bc26ec96775ef425207432dda0ac1fe28526c5e4559349c3d8df9918230f4044683cc2c1b858d141ab8d0805bb9336067522aa89c810f3eaa7ac2d8dd28c3751225a19ecec8bcca52439946\",\n        \"signature\": \"d3dc62d6ce9c766f2abaf9a7fbe09d6bdb07a4747b56080db09beb4a4e804a70d7ddf4119475c7be834f31956f4a71dad029cdf2363dd0365ce22dc27f078003\"\n    },\n    {\n        \"secret_key\": \"b01753efa73bb3de7aa778be7afcbff66a5d3e2c2f8b5aa2b048844050996965\",\n        \"public_key\": \"d0cc6cf109c999fbf6d16f471fafd0232b0a68d4c46406ec7545dbaba8194158\",\n        \"message\": \"684e612f27eead0d34844cc81ba911c28aaf6d66e71229e8cc3462f7c7a050daa30cb74471150f07dad459b5a91358476c0598255d8a642dd7c0802811bd88e4cac597efe41ebd96cd0f3b5ce72db4be1a3dbd6b84f5446e3da600d3b1d2b460a009bd31cacd98a91518ce33e9a703d404288736ccc43103fc69e67974f31652fa3dadef3337f6c897a3d201303c8f03597b4a87c98f291ccd58a3f1e898332aa5993b47fcb5ddaa1c0868b643742d0e4a4b9cd427038b3b74999bc89ac3484c0ca13f25aae8e78ae1ccee6218accab81a4f694f5324a347629d49b55e4037504a9acc8df58c6841dddcd4fc4347f7b6f1fd9de0564577e6f329ed951a0a6b9124ff63e22eb36d3a8863bc1bf69cea24c605967e7d8948953f27d5c4c75f0849f872a3e3d16d422fa5a11e1b9a74df6f38b90f277d81fce8437a14d99d2bef189d7cac83ddc61377ed348b3c4fc09ec2b9005925d04a71e26d641667bdf549294331c6ea01cd5c0bd1b6a7ecfda20b0f1929582b74697cb262c3927d6b223f4b5f3043aa6eb4571a78e9da11c2b36f64552580caa7b5fa6b90f929e0162e608d1240d7242cd2f47025c03debe059b1dc94770232bc6765148480bb1d9f50da1ee6448cf9c88b19dd459932c06ed811c4a64a12d5938bd1c757bcfaeaee8933fe5fff21763de740482bcf1ba59afdc8fcf873c3d507bb394e32e45f736519\",\n        \"signed\": \"16b7421227ae09130685cbb1a0c60aa57a5e1afe1bbe6bacea0c281bcc8998e6824a772c3208a6b6b4d236695505c9be82700cf93a783985a39e16e377a7410e684e612f27eead0d34844cc81ba911c28aaf6d66e71229e8cc3462f7c7a050daa30cb74471150f07dad459b5a91358476c0598255d8a642dd7c0802811bd88e4cac597efe41ebd96cd0f3b5ce72db4be1a3dbd6b84f5446e3da600d3b1d2b460a009bd31cacd98a91518ce33e9a703d404288736ccc43103fc69e67974f31652fa3dadef3337f6c897a3d201303c8f03597b4a87c98f291ccd58a3f1e898332aa5993b47fcb5ddaa1c0868b643742d0e4a4b9cd427038b3b74999bc89ac3484c0ca13f25aae8e78ae1ccee6218accab81a4f694f5324a347629d49b55e4037504a9acc8df58c6841dddcd4fc4347f7b6f1fd9de0564577e6f329ed951a0a6b9124ff63e22eb36d3a8863bc1bf69cea24c605967e7d8948953f27d5c4c75f0849f872a3e3d16d422fa5a11e1b9a74df6f38b90f277d81fce8437a14d99d2bef189d7cac83ddc61377ed348b3c4fc09ec2b9005925d04a71e26d641667bdf549294331c6ea01cd5c0bd1b6a7ecfda20b0f1929582b74697cb262c3927d6b223f4b5f3043aa6eb4571a78e9da11c2b36f64552580caa7b5fa6b90f929e0162e608d1240d7242cd2f47025c03debe059b1dc94770232bc6765148480bb1d9f50da1ee6448cf9c88b19dd459932c06ed811c4a64a12d5938bd1c757bcfaeaee8933fe5fff21763de740482bcf1ba59afdc8fcf873c3d507bb394e32e45f736519\",\n        \"signature\": \"16b7421227ae09130685cbb1a0c60aa57a5e1afe1bbe6bacea0c281bcc8998e6824a772c3208a6b6b4d236695505c9be82700cf93a783985a39e16e377a7410e\"\n    },\n    {\n        \"secret_key\": \"4f4b20d899366f2f23ee628f229b236cf80f43ba183177c97ee34829546f1742\",\n        \"public_key\": \"c94576641f4a893cdfcee7b39fc21929b86b349976d7b0a46d39a588bcfe4357\",\n        \"message\": \"db8ef02e3033e6b96a56cab05082fb4695f4a1c916250dd75173f430a10c9468817709d37623346ae8245b42bda0da6b60462ccfdfc75a9ab994e66c9ab9fecdd8599610910affe4f10215cb280bf8f9f2700a444796dae93e06c6bea7d8b4fe1301baa79ccec769368feb2442c7de84f095e6b3bff63d388cbafb2b9809dc38e9b12ebd039c0a57f4d522e91ec8d1f2b8d23a4a0ae059af85393bb0a15f749110f6774a1fd731a6ec213e4ff435daab546d31ed9ec3b6d8cc2edacebf4facc5566556eea92e5b3f2542239b25e28012dd4ef40072eebf83ed2a255181f3a442189d68c6c609f4dfdf3db7d67d087a2fcd6d2dc50bbfed8bfbbfcb74d3c41f02a87865b13b8efcf5c3581257be0aa913f60c370527bde11a475c136a17c5eefeb03f5bff28693ed841e8ed1f7c29102f5599dd444009bcea6a92d5574152458e0caf8a36aa72b5dc4908a6461c9b741453005c8fbcc68113ae184208ee14b835480c6efafed18a76000b38e5858290f4d51f52f096cbe490e1eb5cacb226ec495a55a7fa457843d57fab67f8be7e209334785bdd665d7b63e4daf57b6e78928b603c8c0f9bc85464733b61273ef9e2b8a0cd7c3bf8ee0a6872e34d5a27a625e35eaf7ff5440b8b141af704df70c9c18623bd11209513192505105cd7bcfa5f0d919da706948fbe1f761f315846aa3b4813dd9ba3d81b9204e5409c0382b6eb\",\n        \"signed\": \"0f80ff5d17488fe26f93c543b04ed959b5f0643fc61c7f2c3bc60132ba9c6210c8b250ea5e84d07b01de68bc174414eeeb31fdc2ba6823e231e312a91ededd02db8ef02e3033e6b96a56cab05082fb4695f4a1c916250dd75173f430a10c9468817709d37623346ae8245b42bda0da6b60462ccfdfc75a9ab994e66c9ab9fecdd8599610910affe4f10215cb280bf8f9f2700a444796dae93e06c6bea7d8b4fe1301baa79ccec769368feb2442c7de84f095e6b3bff63d388cbafb2b9809dc38e9b12ebd039c0a57f4d522e91ec8d1f2b8d23a4a0ae059af85393bb0a15f749110f6774a1fd731a6ec213e4ff435daab546d31ed9ec3b6d8cc2edacebf4facc5566556eea92e5b3f2542239b25e28012dd4ef40072eebf83ed2a255181f3a442189d68c6c609f4dfdf3db7d67d087a2fcd6d2dc50bbfed8bfbbfcb74d3c41f02a87865b13b8efcf5c3581257be0aa913f60c370527bde11a475c136a17c5eefeb03f5bff28693ed841e8ed1f7c29102f5599dd444009bcea6a92d5574152458e0caf8a36aa72b5dc4908a6461c9b741453005c8fbcc68113ae184208ee14b835480c6efafed18a76000b38e5858290f4d51f52f096cbe490e1eb5cacb226ec495a55a7fa457843d57fab67f8be7e209334785bdd665d7b63e4daf57b6e78928b603c8c0f9bc85464733b61273ef9e2b8a0cd7c3bf8ee0a6872e34d5a27a625e35eaf7ff5440b8b141af704df70c9c18623bd11209513192505105cd7bcfa5f0d919da706948fbe1f761f315846aa3b4813dd9ba3d81b9204e5409c0382b6eb\",\n        \"signature\": \"0f80ff5d17488fe26f93c543b04ed959b5f0643fc61c7f2c3bc60132ba9c6210c8b250ea5e84d07b01de68bc174414eeeb31fdc2ba6823e231e312a91ededd02\"\n    },\n    {\n        \"secret_key\": \"d2e01d2578b625a7060aabc25765f168c680cef767aa97ca0e5eb3d667474b2a\",\n        \"public_key\": \"191ac223575424aa354b255b812dd3025d70ed829e0826c01629f9df3545082b\",\n        \"message\": \"20d5dd699b2853302a6817094d5ea512bdf8534504cb289c602467410740ec7eb8ea6442c80f145935068f9122fdf4a39f2010f33db55b814d97bf2e5872329f1126d4eb95b806ca1973113165b116be8716371f81331779dc79a5cb3942081ab5f207f6b53db0e0038107d63ca97708181982dcb5f3b93010ec6edfb2cfd31cab00090b3c38515f9781769686cb17ab81d54a8b775754d42fbad086b80b28d636f78b7eb77ed9ca35b6843a510f0ad0ac1b20267a000301b3c707a20f0214d59b5b8199c2f9ee25d32060ace3e0f2594650416a00716cd3f98604a5e104b33310fdae94c314013cdca5ba2414409eb7f1901394f007d6fa0a29dbe8ec3df98c393c8d72695877cc9baf491ef30ef7db3371608ca97cc621562520ee581d5d1cdbc78232d6c7e43937b2cc8549e6f1e08df5f2eac844fe0f822b2483ad0a5de33be64089490e77d69800fae2589ee58712ac15a3f19e6ffdbca42fe1894e889b94c04b04240dafb0b2730c236b8cceb2cb97afd1d515dc19d1067fd4aba8ce297fd6d110b35a21bd3c075c577d93fe1df77d648f7119492099b017af44eba09c807f11a4c3f4a11a2fff306a728ba78983323c92a2fd5fcc80c18d423426f823a73fe04094955284293f5f6b3ca4ff1080dbb1e4c6f74c1d935ed21e30094c7de336b82dd8200b0d659583c5bfd5470f9db342e70ec4000742c5640a214e3c2e\",\n        \"signed\": \"87a010394a9f2c904effefca9fb4d5ce13793301a4925ba51db119123a4d730abf764ce065e48d90a79d907d7254c40cc358987a46949e928bbb3cd085dfab0620d5dd699b2853302a6817094d5ea512bdf8534504cb289c602467410740ec7eb8ea6442c80f145935068f9122fdf4a39f2010f33db55b814d97bf2e5872329f1126d4eb95b806ca1973113165b116be8716371f81331779dc79a5cb3942081ab5f207f6b53db0e0038107d63ca97708181982dcb5f3b93010ec6edfb2cfd31cab00090b3c38515f9781769686cb17ab81d54a8b775754d42fbad086b80b28d636f78b7eb77ed9ca35b6843a510f0ad0ac1b20267a000301b3c707a20f0214d59b5b8199c2f9ee25d32060ace3e0f2594650416a00716cd3f98604a5e104b33310fdae94c314013cdca5ba2414409eb7f1901394f007d6fa0a29dbe8ec3df98c393c8d72695877cc9baf491ef30ef7db3371608ca97cc621562520ee581d5d1cdbc78232d6c7e43937b2cc8549e6f1e08df5f2eac844fe0f822b2483ad0a5de33be64089490e77d69800fae2589ee58712ac15a3f19e6ffdbca42fe1894e889b94c04b04240dafb0b2730c236b8cceb2cb97afd1d515dc19d1067fd4aba8ce297fd6d110b35a21bd3c075c577d93fe1df77d648f7119492099b017af44eba09c807f11a4c3f4a11a2fff306a728ba78983323c92a2fd5fcc80c18d423426f823a73fe04094955284293f5f6b3ca4ff1080dbb1e4c6f74c1d935ed21e30094c7de336b82dd8200b0d659583c5bfd5470f9db342e70ec4000742c5640a214e3c2e\",\n        \"signature\": \"87a010394a9f2c904effefca9fb4d5ce13793301a4925ba51db119123a4d730abf764ce065e48d90a79d907d7254c40cc358987a46949e928bbb3cd085dfab06\"\n    },\n    {\n        \"secret_key\": \"7cd7ec99dd03aede1ff1073ec2ca7010276e947e2aa9b0e65f877e4ccf1b3a14\",\n        \"public_key\": \"e4c39dbe9493176b8213f1422a9de7c74fb6a59190fcdbf637c7ad5ee165c04f\",\n        \"message\": \"a6034aa3c2484923e80e90e5a8e1748350b4f2c3c8319faf1a2e3295150a68e1eeca1bc84954cc89d4731a7f6512af01464fdbce5df68ee8066ad9a2fd21c0835a76559ca1c7449a933bcb15af90223d925ff61cd83eb935698347a57072709a86b4e5a7a626e07a3f2e7e341c7783a540f84aa73e917e867bb80bace6254705a9d1a1185de56e1a4e78aaf539e749b8f765bd052c4cd15b638bf8ecf87d9814606fed5a69f4dae9da47f3806dd90be64fccd3365cbe9e01c588fe65d6b603280740962aa8ddb95a3f4f674c03bc4043092c544595568270a2c2a8aa06e3f67c31998c50b9a58acad00690d3848114cb193293c8ac21016fd996f5c64214064f82167b2c920cd8a839755852ac77c3d90526dd3adb96837cf4e726f34bd02955cbac5b82c92cf4aa8b54bb6e436dae9bf893ef050c6f135a7e62fcd834dac1d2be8b8e59d696131811701c4318bb6e9b5a20bec656fd2ba192e2732f422963bed4a4fd1ec9326398dce290e0848c70ea236c04c7dbb3b67921440c98d72753f6a332eaad59fd0f57742923fb625fef070f34225ea06c2363d123666b99ac7d5e550da1e404e526b5b229cb130b84b1903e431cdb15b33770f5811d49fbd50d60a3474c0c35fc021d8681819ec794cc32a634bc46a955aa0246b4ff1124623cbafb3cb9d3b92a90fde648e414636192952a92291e5f86efddb89ca078aea7717fc7\",\n        \"signed\": \"6f99202770964535e483a0ee01a529442eb321303fa805d475604d7fc728a9103fb7b558b955f4d03719eefaa3b7ed5b0da75710bb98787f5c2282ed66e9f60ca6034aa3c2484923e80e90e5a8e1748350b4f2c3c8319faf1a2e3295150a68e1eeca1bc84954cc89d4731a7f6512af01464fdbce5df68ee8066ad9a2fd21c0835a76559ca1c7449a933bcb15af90223d925ff61cd83eb935698347a57072709a86b4e5a7a626e07a3f2e7e341c7783a540f84aa73e917e867bb80bace6254705a9d1a1185de56e1a4e78aaf539e749b8f765bd052c4cd15b638bf8ecf87d9814606fed5a69f4dae9da47f3806dd90be64fccd3365cbe9e01c588fe65d6b603280740962aa8ddb95a3f4f674c03bc4043092c544595568270a2c2a8aa06e3f67c31998c50b9a58acad00690d3848114cb193293c8ac21016fd996f5c64214064f82167b2c920cd8a839755852ac77c3d90526dd3adb96837cf4e726f34bd02955cbac5b82c92cf4aa8b54bb6e436dae9bf893ef050c6f135a7e62fcd834dac1d2be8b8e59d696131811701c4318bb6e9b5a20bec656fd2ba192e2732f422963bed4a4fd1ec9326398dce290e0848c70ea236c04c7dbb3b67921440c98d72753f6a332eaad59fd0f57742923fb625fef070f34225ea06c2363d123666b99ac7d5e550da1e404e526b5b229cb130b84b1903e431cdb15b33770f5811d49fbd50d60a3474c0c35fc021d8681819ec794cc32a634bc46a955aa0246b4ff1124623cbafb3cb9d3b92a90fde648e414636192952a92291e5f86efddb89ca078aea7717fc7\",\n        \"signature\": \"6f99202770964535e483a0ee01a529442eb321303fa805d475604d7fc728a9103fb7b558b955f4d03719eefaa3b7ed5b0da75710bb98787f5c2282ed66e9f60c\"\n    },\n    {\n        \"secret_key\": \"e3ca3713a2fd412ad5336bc356b77be027d5b70815b3ac2aecd8340ef5f889b1\",\n        \"public_key\": \"1d516cb8bef116a0c1b6929009933f6eb62c23050745fe7e8d3c631623778111\",\n        \"message\": \"dd99baf295e013eed107ba8af81121aaf1835a3cca24f8e464b4cfcaa3c7bffe6f9536016d1c8cf375038c9327e8e21b004066f5eac0f76a3e8edfb07be8bd2f6bc79c3b456de82595e2c2105bb1b0aaba5eeee1adef752167d633b322ebf8f7cd5fbf59508fdbdbecf25e657a9c7050af26a80a085b0817c6217e39acd54cb9fa09540fc7bdc5226d6a276d492cc8a3dffc2abc6d0b9fb08cbccdd9432e449821a5dc98cfb3a418e539c890fe5a0446b9f81d306700927ade61cfdcc0624f13b5840748774604805731d92e77d5def66be44cc817946f1cd758196cf480f99e7117835c4c87cbd64077a562a80cf11d8ca65be7a94d92b9ddaea997e93f1448577ed6d8436b2f3144692c1fd7d28a03e9274bc9e8669d8575f5de20cfbdbcb04e9f39f3451d7048375e2698e722846cb4f2d19a810c53d4c1a6c3b770fb402df0530e7b2907223fd0899e00cb188ca80c1531b4e37fba176c17a2b8f5a3ddc7a9188d48ffc2b272c3da9c9b89dfe53f2fe7e3672f91d11818491ace140adcae98502e114f4b352b90e2e7fbd333b2459e7f15dd0764c9c34e4cb7cc095500cda035e8e2e4e3c8fd5df5f3aa579a735dd8a9f19ef336fa971114e46618734a4c13d30c81128ca21def47330103d23d80ffe67421a6ccf9f36a93f05603c599ee10b03451f36b2133c187a79ad9e6fdfbb12595ab73bb3e2e2e43030fd37e591cf55d\",\n        \"signed\": \"b3857ea61baa9e62838c4e3a996502d3364fe1ec594258355073dd10e497c600befb1f8f233fd6e3b2c87f10dcb7261aaf3481bfd0902605accc900fef84d407dd99baf295e013eed107ba8af81121aaf1835a3cca24f8e464b4cfcaa3c7bffe6f9536016d1c8cf375038c9327e8e21b004066f5eac0f76a3e8edfb07be8bd2f6bc79c3b456de82595e2c2105bb1b0aaba5eeee1adef752167d633b322ebf8f7cd5fbf59508fdbdbecf25e657a9c7050af26a80a085b0817c6217e39acd54cb9fa09540fc7bdc5226d6a276d492cc8a3dffc2abc6d0b9fb08cbccdd9432e449821a5dc98cfb3a418e539c890fe5a0446b9f81d306700927ade61cfdcc0624f13b5840748774604805731d92e77d5def66be44cc817946f1cd758196cf480f99e7117835c4c87cbd64077a562a80cf11d8ca65be7a94d92b9ddaea997e93f1448577ed6d8436b2f3144692c1fd7d28a03e9274bc9e8669d8575f5de20cfbdbcb04e9f39f3451d7048375e2698e722846cb4f2d19a810c53d4c1a6c3b770fb402df0530e7b2907223fd0899e00cb188ca80c1531b4e37fba176c17a2b8f5a3ddc7a9188d48ffc2b272c3da9c9b89dfe53f2fe7e3672f91d11818491ace140adcae98502e114f4b352b90e2e7fbd333b2459e7f15dd0764c9c34e4cb7cc095500cda035e8e2e4e3c8fd5df5f3aa579a735dd8a9f19ef336fa971114e46618734a4c13d30c81128ca21def47330103d23d80ffe67421a6ccf9f36a93f05603c599ee10b03451f36b2133c187a79ad9e6fdfbb12595ab73bb3e2e2e43030fd37e591cf55d\",\n        \"signature\": \"b3857ea61baa9e62838c4e3a996502d3364fe1ec594258355073dd10e497c600befb1f8f233fd6e3b2c87f10dcb7261aaf3481bfd0902605accc900fef84d407\"\n    },\n    {\n        \"secret_key\": \"29a63dcd48a351771411fddcab46bb071e91498576e8d02f8b6044f5bdd3ed90\",\n        \"public_key\": \"3923fdcc2a9fe5cabf6e9932e46dbd2b7f3632500f9d95552db2b045bc41166f\",\n        \"message\": \"ff18ca0c204c8386a4aa74ec4573c7b69216b31470daedd96a4f2302116c7955d72dacc88e3714550c09e6f7b9a8586260dc7e63da4c633bae0162e116e5c1797b78d87d47ffeea3d7819df9c852f0ff30936a105d3af5531a8f89549711c14c2d3ee11564e7c8525bd58864009762a05541d8e07ad841a55a6a9a007ef209ccec4b5640babe35651b61df42de4d910ee73a933c0b74e995757e84a99eb034f41807183c90ca4ea8d84cdba478613c8e587cb5f8fb6a055081da6e90220d5d86e34e5f91e488bd12c7a1a6b3c9fce5305e85346658effa810d0e8a2a039db4a4c94965be4011f9d5e5da266233e6c4e18ed4f8a25a57e40a591c7ed590c0f8b1a119c7c9747f691b02196cd18e6945213f1d4c8c9579c6e0a2ac45924128d6d92c8e4c66065320353d48d1d5e13194d905f837078f8dac0b68cf96ae9e70554c14b2fa29b19630e4b0f5d2a767e190efbc5992c709dcc99aa0b5aaf4c49d5513e174fd604236b05b48fcfb55c9af10596927bcfad30bacc99b2e0261f97cf297c177f1929da1f68db9f99ac62ff2de3bb40b186aa7e8c5d6123980d759927a3a07aa208beeb736795ae5b849d5dae5e3573710aaa24e96d5791e2730d0270f5b0a2705ba515d14aa7e6fa6622375377f9aba64d02569a209d33de686e089ec60118e4814ffc6c0778c6427bce2b6b844cfcd5a7ced0e35303f50a0dfe5df5dde1a2f23\",\n        \"signed\": \"12bf629593e2caadc910ec40bfe2b7a62514126b16ba3a438d88e2d21f595aaee8abfa4af2ec870361d0ea04dfc8c6a330fb2841c2d8211a64fa1e7e7d273800ff18ca0c204c8386a4aa74ec4573c7b69216b31470daedd96a4f2302116c7955d72dacc88e3714550c09e6f7b9a8586260dc7e63da4c633bae0162e116e5c1797b78d87d47ffeea3d7819df9c852f0ff30936a105d3af5531a8f89549711c14c2d3ee11564e7c8525bd58864009762a05541d8e07ad841a55a6a9a007ef209ccec4b5640babe35651b61df42de4d910ee73a933c0b74e995757e84a99eb034f41807183c90ca4ea8d84cdba478613c8e587cb5f8fb6a055081da6e90220d5d86e34e5f91e488bd12c7a1a6b3c9fce5305e85346658effa810d0e8a2a039db4a4c94965be4011f9d5e5da266233e6c4e18ed4f8a25a57e40a591c7ed590c0f8b1a119c7c9747f691b02196cd18e6945213f1d4c8c9579c6e0a2ac45924128d6d92c8e4c66065320353d48d1d5e13194d905f837078f8dac0b68cf96ae9e70554c14b2fa29b19630e4b0f5d2a767e190efbc5992c709dcc99aa0b5aaf4c49d5513e174fd604236b05b48fcfb55c9af10596927bcfad30bacc99b2e0261f97cf297c177f1929da1f68db9f99ac62ff2de3bb40b186aa7e8c5d6123980d759927a3a07aa208beeb736795ae5b849d5dae5e3573710aaa24e96d5791e2730d0270f5b0a2705ba515d14aa7e6fa6622375377f9aba64d02569a209d33de686e089ec60118e4814ffc6c0778c6427bce2b6b844cfcd5a7ced0e35303f50a0dfe5df5dde1a2f23\",\n        \"signature\": \"12bf629593e2caadc910ec40bfe2b7a62514126b16ba3a438d88e2d21f595aaee8abfa4af2ec870361d0ea04dfc8c6a330fb2841c2d8211a64fa1e7e7d273800\"\n    },\n    {\n        \"secret_key\": \"c7188fdd80f4cd31839ec958671e6dd08b21f9d7528c9159143734f94b169883\",\n        \"public_key\": \"019752ff829b6859b9058d00c2795e835655440675753f37e85eb7bc5839c4ca\",\n        \"message\": \"4af5dfe3feaabe7f8fcd38308e0bd385cad3811cbdc79c944ebfe3cd675cf3afbef4542f542975c2e2a6e66e26b32ac3d7e19ef74c39fa2a61c56841c2d8212e2bd7fb49cfb25cc3609a693a6f2b9d4e22e2099f80b777d3d05f33ba7db3c5ab55766ceb1a1322af726c565516ce566329b98fc5dc4cbd93cefb627688c977af9367b5c69659e43cb7ee754711d665c0032ae22934f44c71d31178ef3d9810912874b62fa5e4020e6d5d6458183732c19e2e89685e0464e91a9b1c8d5251e24e5f91813f5019a740a04b5d91cbb8309e5161bba79dcab38239a091f50e099ff819e3a7b5205fe907cdfe9c0dc3ee85e32d7bcd3ce02635e2058388031e317fbf22ab9f39f7f7e3cd1a11a9c1f45f4e1e42d2536c122c591837911847108ceafd990813c2b6344cffc34be37161dd815626900e8fcb85c21afb4f6be8ad01516a31c2a6580315857c6a216735ca991009dbc2ea5034160747a869d5cadb0b47ffbd5d3ac97fdd0526cae6eaa35cff7a16eaf4fb950ca31511346fea6141999a3f754e6281cfba15e8a826932c589c5d247c909d94b4eab7ebcb09077648af065c2d86611eb588453ed7c24780d73c689c8744afd533a86d9ee9e3365732cbd0c351e436f898b7043292097e03e6081a23ac865e19dc8858969b999d01fa65ef200c3f269c818e30b9365ecc683bcfe69c203b4e0ab6fe0bb871e8ecaaae82d3acd35d5b50\",\n        \"signed\": \"35c170dd0c6dc2920a595775d8e2dd65243e9c1bf96ef42779001ed45f01b7dfebd6f6a7dc2d386ef4d2a56779ebe77f54e5aecfda2d54a068476b24dbd78b0c4af5dfe3feaabe7f8fcd38308e0bd385cad3811cbdc79c944ebfe3cd675cf3afbef4542f542975c2e2a6e66e26b32ac3d7e19ef74c39fa2a61c56841c2d8212e2bd7fb49cfb25cc3609a693a6f2b9d4e22e2099f80b777d3d05f33ba7db3c5ab55766ceb1a1322af726c565516ce566329b98fc5dc4cbd93cefb627688c977af9367b5c69659e43cb7ee754711d665c0032ae22934f44c71d31178ef3d9810912874b62fa5e4020e6d5d6458183732c19e2e89685e0464e91a9b1c8d5251e24e5f91813f5019a740a04b5d91cbb8309e5161bba79dcab38239a091f50e099ff819e3a7b5205fe907cdfe9c0dc3ee85e32d7bcd3ce02635e2058388031e317fbf22ab9f39f7f7e3cd1a11a9c1f45f4e1e42d2536c122c591837911847108ceafd990813c2b6344cffc34be37161dd815626900e8fcb85c21afb4f6be8ad01516a31c2a6580315857c6a216735ca991009dbc2ea5034160747a869d5cadb0b47ffbd5d3ac97fdd0526cae6eaa35cff7a16eaf4fb950ca31511346fea6141999a3f754e6281cfba15e8a826932c589c5d247c909d94b4eab7ebcb09077648af065c2d86611eb588453ed7c24780d73c689c8744afd533a86d9ee9e3365732cbd0c351e436f898b7043292097e03e6081a23ac865e19dc8858969b999d01fa65ef200c3f269c818e30b9365ecc683bcfe69c203b4e0ab6fe0bb871e8ecaaae82d3acd35d5b50\",\n        \"signature\": \"35c170dd0c6dc2920a595775d8e2dd65243e9c1bf96ef42779001ed45f01b7dfebd6f6a7dc2d386ef4d2a56779ebe77f54e5aecfda2d54a068476b24dbd78b0c\"\n    },\n    {\n        \"secret_key\": \"38ba0621704d2155fc2f78555196575de06d80255c35e9dc965b6fe96a4d5389\",\n        \"public_key\": \"4388f7f68a9effbc366e42d907015604daced1727cd1d89d74adcc789fd7e6e1\",\n        \"message\": \"ed4c2683d644b05b39b048ef1f8b7025f280ca7e8ff72cb7eda99329fb7954b700400705275f20b858cf7e349a3510665b630609c5e2e62069263ab9c55e4123a564dca6348c8a01332075e7a5bec9c20a03807957fefa910e60c35ae579778ce2ce42e6a69a1b647681e43ec4b63bd5fbefabb31712cb3d6419ead78dd41c8a92aaceb63cbfa89d2af39606de010a397e302053a615c16e5e95ad9935c079a0b8103125789471a1e3574f429b29e4d225c7723fbb3cf88cbd73823d9f0b6c7d05d00bdeb0fb0ad3d7132033183e21f6c1e8d8e4c0a3e4f52f5001da687171345c6dc8b42c42a60d1f1ffa8fe3e7bcece59a035878f9d4d81127e22496a49bfcf6bf8b46a80bd562e65255071f9d11a9eb0481f4626d4d71ffc38afe6e358a4b289179cbce9764d86b57ac0a0c827e8ff078813306a1d5fadd32b46a1fbcd789ff8754063eecfe45313beb6601c3a3010e8eb97c8effbd140f1e688311092d273c4defca47da6f1f0825744676f9a280b6c2a814fa47fabc1980d0b37f087a53ca8778f39ffb474ff5f1171b442c76dd008d92182f644a714a0f011e215a78b97af37b33520ebf43372a5ab0cf70dcc1dc2f99d9e4436658f8e07cdf0b9ea4dd6224c209e7521b981ee351c3c2df3a50040527fcd72804176046405db7f6734e85c5d390f520b0c08dcbfa98b8742480d5e46f9be893f6d6614340f8161611d5053df41ce4\",\n        \"signed\": \"42bed6a98786f664715f39bb643c405ae1750056460e700469c810389504c51cffd9e1a94c38f692fb316265316d8f4dc3ad1cdd8a6d5991ef010cd1489d7c09ed4c2683d644b05b39b048ef1f8b7025f280ca7e8ff72cb7eda99329fb7954b700400705275f20b858cf7e349a3510665b630609c5e2e62069263ab9c55e4123a564dca6348c8a01332075e7a5bec9c20a03807957fefa910e60c35ae579778ce2ce42e6a69a1b647681e43ec4b63bd5fbefabb31712cb3d6419ead78dd41c8a92aaceb63cbfa89d2af39606de010a397e302053a615c16e5e95ad9935c079a0b8103125789471a1e3574f429b29e4d225c7723fbb3cf88cbd73823d9f0b6c7d05d00bdeb0fb0ad3d7132033183e21f6c1e8d8e4c0a3e4f52f5001da687171345c6dc8b42c42a60d1f1ffa8fe3e7bcece59a035878f9d4d81127e22496a49bfcf6bf8b46a80bd562e65255071f9d11a9eb0481f4626d4d71ffc38afe6e358a4b289179cbce9764d86b57ac0a0c827e8ff078813306a1d5fadd32b46a1fbcd789ff8754063eecfe45313beb6601c3a3010e8eb97c8effbd140f1e688311092d273c4defca47da6f1f0825744676f9a280b6c2a814fa47fabc1980d0b37f087a53ca8778f39ffb474ff5f1171b442c76dd008d92182f644a714a0f011e215a78b97af37b33520ebf43372a5ab0cf70dcc1dc2f99d9e4436658f8e07cdf0b9ea4dd6224c209e7521b981ee351c3c2df3a50040527fcd72804176046405db7f6734e85c5d390f520b0c08dcbfa98b8742480d5e46f9be893f6d6614340f8161611d5053df41ce4\",\n        \"signature\": \"42bed6a98786f664715f39bb643c405ae1750056460e700469c810389504c51cffd9e1a94c38f692fb316265316d8f4dc3ad1cdd8a6d5991ef010cd1489d7c09\"\n    },\n    {\n        \"secret_key\": \"ae331fc2a14759b73f1cd965e48514e12b29f63b06ccfc0ad49f36820e57ec72\",\n        \"public_key\": \"08803d48238eda3f9cebb628530121de00f0f0468c202d88528b8bcec687a903\",\n        \"message\": \"5716003390e4f5216598a03d7c430dbf495ee3a7557b580632ba59f15198b6180a42469c237db5bc81f29cfaab0aff3c9966309ab06958c9d7126add78e3b32459ff8a0e0bdef874b58e6083668f38ad7d63aae1f12e26a613348f9f03ea5d205f045d78cc8902d47f81e8b52293e70e86c9803d4dacea86c3b67458ae3579bc11113b5490bcf3e1cd4e7979c264d835161fd55efe953b4c26395dd92ca4930920e904fadc0889bb7822b1dfc4452604840df024db0821d2d5e96785a5c37dbfd2c375983283e9b5b43a3207a6a9b833948329d5de41e45008bcbad493de5754dd83decc440e5166edaae0208f000c5f6d9c372153209e5b7578116f89cf2f8b1004d1307ea79ed37480f3194a7e17983a230465ccc30fcc1a62d280fbbaccf006dc4dee0ea796b81accc61a063e2c083daec039bd9a64a77024af82ec1b0898a3154329fdf61673c36e4cc81f7a4126e56290e4b456819bdebf48cb5a40955bab297c2bbcb018adbf24828660a5d12a0613bf3ccb5eeb9a17fb0a0547db8da24d2efb87ba1b843142a75e4ca0b0a333e4a14fab35a62669329ca8753f016ac70cd997e8bc19ee448aeaf0f4bf3ce5230550578ab64c19019446ce2d9c01a03d889a9909860aef76f067c50b61c3d0f12cc8686f5c31bf032a841015cfeff1cfdae94f6b21dae941b335dc821f3284ce31508f5db5c448ffaa3773e9be1a4c85a1c58b009fa3\",\n        \"signed\": \"75f739088877e06dc56daec8f1e4d211b754e3c3edbfa7eda444f18c49b69c5a142db45a0a7650e47d10550ba681ff45dd4463c4ac48bf44b73034bd5659220e5716003390e4f5216598a03d7c430dbf495ee3a7557b580632ba59f15198b6180a42469c237db5bc81f29cfaab0aff3c9966309ab06958c9d7126add78e3b32459ff8a0e0bdef874b58e6083668f38ad7d63aae1f12e26a613348f9f03ea5d205f045d78cc8902d47f81e8b52293e70e86c9803d4dacea86c3b67458ae3579bc11113b5490bcf3e1cd4e7979c264d835161fd55efe953b4c26395dd92ca4930920e904fadc0889bb7822b1dfc4452604840df024db0821d2d5e96785a5c37dbfd2c375983283e9b5b43a3207a6a9b833948329d5de41e45008bcbad493de5754dd83decc440e5166edaae0208f000c5f6d9c372153209e5b7578116f89cf2f8b1004d1307ea79ed37480f3194a7e17983a230465ccc30fcc1a62d280fbbaccf006dc4dee0ea796b81accc61a063e2c083daec039bd9a64a77024af82ec1b0898a3154329fdf61673c36e4cc81f7a4126e56290e4b456819bdebf48cb5a40955bab297c2bbcb018adbf24828660a5d12a0613bf3ccb5eeb9a17fb0a0547db8da24d2efb87ba1b843142a75e4ca0b0a333e4a14fab35a62669329ca8753f016ac70cd997e8bc19ee448aeaf0f4bf3ce5230550578ab64c19019446ce2d9c01a03d889a9909860aef76f067c50b61c3d0f12cc8686f5c31bf032a841015cfeff1cfdae94f6b21dae941b335dc821f3284ce31508f5db5c448ffaa3773e9be1a4c85a1c58b009fa3\",\n        \"signature\": \"75f739088877e06dc56daec8f1e4d211b754e3c3edbfa7eda444f18c49b69c5a142db45a0a7650e47d10550ba681ff45dd4463c4ac48bf44b73034bd5659220e\"\n    },\n    {\n        \"secret_key\": \"82435f39790106b3af72f91f14c928d2465f98cdd10084c4a44d19af71a1927c\",\n        \"public_key\": \"c52a92646f5adb21c6dde0de58786837f8a3414c09aedfc27c812218a7e7239e\",\n        \"message\": \"f3d6c46ac5248d5386b6b68462597d647039f544bb01ac2d1067daaaa397d2dbaf125a1cf8fdf280a6afec324d5311f543688a156c849819bb046b911c42ea3ca01b99808c4d1f3b8b15da3efe2f32523ec3b09c84b48cffd13c17c9e26c912d9c3e9346dfae3fd0c56c8858780782f61a4c4dbfff1e9cb4b362cd8001f9cdfeb1a72082dce9c9ade52effc9744688ac0b86c88266b53d895c17ead9e89ed8d24d40642f3ad3b9bf9bbc4dda7966ef8328289fb31e17c81fd028ef1bd9a1d4c792e86ec2dbdce3f937eecc3eeb5188d325941919bbf75b4388e2399507a3d7fb387502a95f421c85826c1c9176c923e316310a4ba45c8a5ef7557cf87b77020b24f5ba2bfd1228109566307fea65ec015019691217bce69aee16f76249c58bb3e52171cfefd5254e5e0f397169186dc7cd9c1a85c81034e037183d6ea22aee8bb74720d34ac7a5af1e92fb8185ace01d9bf0f0f9006101fcfac8bbad171b437036ef16cdae1881fc3255ca359bba1e94f79f645555950c4783bab0a944f7de8df69258b6afe2b5932217195da245fee12ac343824a0b6403dfe462d43d288db31f99097ec3edc6e76547a3742f03c777efb158f58d4053fa6cc8d68b196af4f9de516fd9fb7a6d5d9ee4a89f9b9bce1e4dee357a1e52c0544cfb35b7092d1aa5a6f7f4c7602610e9c00ef5b8761bc72279ba228a18b8400bd76d5b2bfd7c3c04aac4436dae2e98\",\n        \"signed\": \"1daa44ef06d4c10ddb48678423c5f103a1b568d42b20cc64af110fce9d7679a2dee412b4980585c26c320dbaa601c472defc3c85415daecdd6d2d9eacac85e07f3d6c46ac5248d5386b6b68462597d647039f544bb01ac2d1067daaaa397d2dbaf125a1cf8fdf280a6afec324d5311f543688a156c849819bb046b911c42ea3ca01b99808c4d1f3b8b15da3efe2f32523ec3b09c84b48cffd13c17c9e26c912d9c3e9346dfae3fd0c56c8858780782f61a4c4dbfff1e9cb4b362cd8001f9cdfeb1a72082dce9c9ade52effc9744688ac0b86c88266b53d895c17ead9e89ed8d24d40642f3ad3b9bf9bbc4dda7966ef8328289fb31e17c81fd028ef1bd9a1d4c792e86ec2dbdce3f937eecc3eeb5188d325941919bbf75b4388e2399507a3d7fb387502a95f421c85826c1c9176c923e316310a4ba45c8a5ef7557cf87b77020b24f5ba2bfd1228109566307fea65ec015019691217bce69aee16f76249c58bb3e52171cfefd5254e5e0f397169186dc7cd9c1a85c81034e037183d6ea22aee8bb74720d34ac7a5af1e92fb8185ace01d9bf0f0f9006101fcfac8bbad171b437036ef16cdae1881fc3255ca359bba1e94f79f645555950c4783bab0a944f7de8df69258b6afe2b5932217195da245fee12ac343824a0b6403dfe462d43d288db31f99097ec3edc6e76547a3742f03c777efb158f58d4053fa6cc8d68b196af4f9de516fd9fb7a6d5d9ee4a89f9b9bce1e4dee357a1e52c0544cfb35b7092d1aa5a6f7f4c7602610e9c00ef5b8761bc72279ba228a18b8400bd76d5b2bfd7c3c04aac4436dae2e98\",\n        \"signature\": \"1daa44ef06d4c10ddb48678423c5f103a1b568d42b20cc64af110fce9d7679a2dee412b4980585c26c320dbaa601c472defc3c85415daecdd6d2d9eacac85e07\"\n    },\n    {\n        \"secret_key\": \"1bea7726d912c55ec78b0c161a1ad3c9dd7bc329f85d26f62b92e31d16d83b48\",\n        \"public_key\": \"c9ddb42106ccef4e0ef4794551d21df94a6306872f231663e47e241f77cc3e82\",\n        \"message\": \"b11283b1f0ce549e5804730ac3207ac00332d2aacf9c310d3832d879f9634bd8a58adf199e4b863bb17481d28acb2da0e1557b8336a400f6295625031d09e4df4d319bbc1e8f6e9232d23053bb3ffac4fe2c70ce3077fc0060a5cb4692a1cf0b3e62fe454802ae10b83ded61b6bf454ca75e4cdad5532f20b70654f12ba906f003a8b9e986f15a39419deb2ea1ead7598290eeebf9252b0c27605a7a73a6abebb42271d71a3c197a46bcc8db11d9242842f378364a37eecaa34e982135be34182c69ca8e6e3c8c90e1b4b2b475815a178377ae0165a764c8ba2889b5ab290949d8487a88e0d3d2bc7e2520176aa6ff9ff0c409ff80515f4f0b83c5e82c23fd3326cdd6b76252e7fddcd6e4770978cd503ed2d6b480101167d3f191fed8d6d74d74a2007db1092e46a23ddecddcdb984664047b8dd7cc8a576e1a806f52cb027a9480a95cc44b1e6f2e286e9b7a6bf7b396fa5496b7a5b1c03d9c5c27da1a42990d10b12fb8640e1596f26b366d270ba64f99afffe3fece05a9b0254b208c7997cdb512fc77527954a1cb50fdab1cc9a45162741fd6f9d3fd5f2e382853d7335dba1e6b2959dd86e125e67b53dc8e453c810bc01bf20bce7b618dd5d1ed784106ee06a3ecaf6b3bee0b56833b0b813139c5a696000a449c97906a2fbddc2d9de9406ea282ac4ee5ef8bf3854c74a6b7173dd2f79c7a126f3c7b0433fd4ea26e877a14831dd415a19d\",\n        \"signed\": \"f9b04517bd4fd8ef90f2140fc95dc16620d1602ab36c9b165fff3aba978d59767110bb4e07a48f45121447ac0c1abac585d391d4042041898628a2d2dcc2510db11283b1f0ce549e5804730ac3207ac00332d2aacf9c310d3832d879f9634bd8a58adf199e4b863bb17481d28acb2da0e1557b8336a400f6295625031d09e4df4d319bbc1e8f6e9232d23053bb3ffac4fe2c70ce3077fc0060a5cb4692a1cf0b3e62fe454802ae10b83ded61b6bf454ca75e4cdad5532f20b70654f12ba906f003a8b9e986f15a39419deb2ea1ead7598290eeebf9252b0c27605a7a73a6abebb42271d71a3c197a46bcc8db11d9242842f378364a37eecaa34e982135be34182c69ca8e6e3c8c90e1b4b2b475815a178377ae0165a764c8ba2889b5ab290949d8487a88e0d3d2bc7e2520176aa6ff9ff0c409ff80515f4f0b83c5e82c23fd3326cdd6b76252e7fddcd6e4770978cd503ed2d6b480101167d3f191fed8d6d74d74a2007db1092e46a23ddecddcdb984664047b8dd7cc8a576e1a806f52cb027a9480a95cc44b1e6f2e286e9b7a6bf7b396fa5496b7a5b1c03d9c5c27da1a42990d10b12fb8640e1596f26b366d270ba64f99afffe3fece05a9b0254b208c7997cdb512fc77527954a1cb50fdab1cc9a45162741fd6f9d3fd5f2e382853d7335dba1e6b2959dd86e125e67b53dc8e453c810bc01bf20bce7b618dd5d1ed784106ee06a3ecaf6b3bee0b56833b0b813139c5a696000a449c97906a2fbddc2d9de9406ea282ac4ee5ef8bf3854c74a6b7173dd2f79c7a126f3c7b0433fd4ea26e877a14831dd415a19d\",\n        \"signature\": \"f9b04517bd4fd8ef90f2140fc95dc16620d1602ab36c9b165fff3aba978d59767110bb4e07a48f45121447ac0c1abac585d391d4042041898628a2d2dcc2510d\"\n    },\n    {\n        \"secret_key\": \"d01a0ead9d694833283b9cd7299a7bd75fa90b1d2d7884e4557b33c998772a68\",\n        \"public_key\": \"a0f757479ba627efef95d6ec7a931dfac4373df33daaf4ddc4ec6894c8261ed7\",\n        \"message\": \"7627534e9a83d1e406ab948d30d1da9c6a5db08e0feb7fc5ba5cbf76849ee8add4847ef5ca5a0dae411aca097451cb4c2b498c947097407007640dc19ed938e3b91bf51c9581168df860bd94751668dabd721dc73998400be20c9a563d5051ef70e3546fee673312b52a274041057e70848eb7c5a21644c97e448abd7640207d7cdafcf45da6df3494d3585b0e18ac5ac9081cb7a407a39a877705cbaf79a01b915f736eb025c58b4b5d807fb7b7566c5969787c1d6ca4eba97d509ef7fb3550d21d377eceffcf0eb6681895adbd246ee7bf3c935a006478b832ece46de6118b17e466a27fc2a44a896baae272f9ecf018c65cb50cfbfc8d260994a18a832d971928c449675724585131c871533c9897d8f80f9c0416b718786b10fea8eb5bd813a269a1b677b7a2507a44b713d705086530995e59335ddc2855e847e4f4db06c91f1d54023d8a10f69f9e61bdce4b686fb617bd5030e755cadb1f644e1ddd91619b96ecd605b00198b9a6eddb5a84ebd3692b665979766637c677378c1c77041fd4a6b3555c1dc8a83fe9013bb6106cc18a2b037c9377b7a1a5a5d0dcc54918eaad7e32c880767b26fd2ea2d68b0405f5e074f55a19d8a39ffbb7dc32faee6a7f9532aec8a0776c3ff83ae3a4627738496a371eb9e090b74e0eddecfcd41bed0c0ce581275243472d26da8c998e4b6d6b44fc88ba2ab54642225417120294417805742bdb33b7b122\",\n        \"signed\": \"9a0ff7f35174ec3f66d22a6f06df60e09c8f623a5aca810e23a88d0e6a31cb6f1ce1c1f9dccc9e1484b68dd004ac53597e29ad6ab72e8ce2b75ad5b80eb848037627534e9a83d1e406ab948d30d1da9c6a5db08e0feb7fc5ba5cbf76849ee8add4847ef5ca5a0dae411aca097451cb4c2b498c947097407007640dc19ed938e3b91bf51c9581168df860bd94751668dabd721dc73998400be20c9a563d5051ef70e3546fee673312b52a274041057e70848eb7c5a21644c97e448abd7640207d7cdafcf45da6df3494d3585b0e18ac5ac9081cb7a407a39a877705cbaf79a01b915f736eb025c58b4b5d807fb7b7566c5969787c1d6ca4eba97d509ef7fb3550d21d377eceffcf0eb6681895adbd246ee7bf3c935a006478b832ece46de6118b17e466a27fc2a44a896baae272f9ecf018c65cb50cfbfc8d260994a18a832d971928c449675724585131c871533c9897d8f80f9c0416b718786b10fea8eb5bd813a269a1b677b7a2507a44b713d705086530995e59335ddc2855e847e4f4db06c91f1d54023d8a10f69f9e61bdce4b686fb617bd5030e755cadb1f644e1ddd91619b96ecd605b00198b9a6eddb5a84ebd3692b665979766637c677378c1c77041fd4a6b3555c1dc8a83fe9013bb6106cc18a2b037c9377b7a1a5a5d0dcc54918eaad7e32c880767b26fd2ea2d68b0405f5e074f55a19d8a39ffbb7dc32faee6a7f9532aec8a0776c3ff83ae3a4627738496a371eb9e090b74e0eddecfcd41bed0c0ce581275243472d26da8c998e4b6d6b44fc88ba2ab54642225417120294417805742bdb33b7b122\",\n        \"signature\": \"9a0ff7f35174ec3f66d22a6f06df60e09c8f623a5aca810e23a88d0e6a31cb6f1ce1c1f9dccc9e1484b68dd004ac53597e29ad6ab72e8ce2b75ad5b80eb84803\"\n    },\n    {\n        \"secret_key\": \"df648940b578bc31d2a652965f30391caf06d5f251599a737ce10be55f4a9d0d\",\n        \"public_key\": \"27de920419c186b01be54279fb8f9be4bb4b2cad75ca7e8f792bfa7bb97c7f41\",\n        \"message\": \"1ae520beeb4ad0722b43067fa7cd2874abcf34dd9237b4478eae9772aea297a67fb79b33070204baee440b9c87e2fbcbeb76801dddea5e4530d89e11583179939a00a32f811332c52291cc7ac91e5a970cd5aa708b1da26be9fe432a9bbda1319e31e4bcc9f1666a05b5c05b876bfd1f766687ccea4e4482e924329aface5ee52e9879fd69b76e0f7e452ec4713bff216d00c82599d27ca481f73aae136f0875c88a66b1b6f34c50523ab602e9d4ebb7eeb9e043a65e41899d79752a279d2ed46993926f3621e7c32c9a9b3b59d8dd57beca39285434de991cbd2dfcbc5ca62a7779f475d0cef2f3e562f29acd474f3c99ec5bd8de01101bed2e0c9b60e2d70fd432c892fc66f8d4619a911b5625163e9a42bf9ea38586d8e764001564d335411225fcb0a06dc2a82da0779a3c444eb7864201b43ebb72b921f34d3c13089df2f4fac366ff1e3c0b96f93d2b4d726a5ce4d6916d82c78be354a1230c2cf0418c78a1913e454f648cc92c8dd0e184645fe3781d263cff69f5c60b1ebb52005a8b78a515c7e8886ffe054dab428e2e221d9d76aff42654168d833b88178293e1fedd15d46cd609483129c4d2d84432a99d31ffe9bdb566f8c75ce65e18288e4df8c16731a0f3fdde1cca6d8ede0435ff7436ca17d0aeb88e98e8065cbcbfd0ff83043a357cd1b082d1703d461881872cdf741e4f99bd146745ba703974be40f579bf5c4dba5bdb8c941bce\",\n        \"signed\": \"62bc991c45ba9b26bf440116264162c34c88597885e9605083c604b5f5d8fa6f662ba214f76e6cf84e5ec04df1beefc5f25d3a3b72f98b5069831916a63296011ae520beeb4ad0722b43067fa7cd2874abcf34dd9237b4478eae9772aea297a67fb79b33070204baee440b9c87e2fbcbeb76801dddea5e4530d89e11583179939a00a32f811332c52291cc7ac91e5a970cd5aa708b1da26be9fe432a9bbda1319e31e4bcc9f1666a05b5c05b876bfd1f766687ccea4e4482e924329aface5ee52e9879fd69b76e0f7e452ec4713bff216d00c82599d27ca481f73aae136f0875c88a66b1b6f34c50523ab602e9d4ebb7eeb9e043a65e41899d79752a279d2ed46993926f3621e7c32c9a9b3b59d8dd57beca39285434de991cbd2dfcbc5ca62a7779f475d0cef2f3e562f29acd474f3c99ec5bd8de01101bed2e0c9b60e2d70fd432c892fc66f8d4619a911b5625163e9a42bf9ea38586d8e764001564d335411225fcb0a06dc2a82da0779a3c444eb7864201b43ebb72b921f34d3c13089df2f4fac366ff1e3c0b96f93d2b4d726a5ce4d6916d82c78be354a1230c2cf0418c78a1913e454f648cc92c8dd0e184645fe3781d263cff69f5c60b1ebb52005a8b78a515c7e8886ffe054dab428e2e221d9d76aff42654168d833b88178293e1fedd15d46cd609483129c4d2d84432a99d31ffe9bdb566f8c75ce65e18288e4df8c16731a0f3fdde1cca6d8ede0435ff7436ca17d0aeb88e98e8065cbcbfd0ff83043a357cd1b082d1703d461881872cdf741e4f99bd146745ba703974be40f579bf5c4dba5bdb8c941bce\",\n        \"signature\": \"62bc991c45ba9b26bf440116264162c34c88597885e9605083c604b5f5d8fa6f662ba214f76e6cf84e5ec04df1beefc5f25d3a3b72f98b5069831916a6329601\"\n    },\n    {\n        \"secret_key\": \"c8ac234558aa69816b368b77b7cccb5c8d2a33ec53aeef2ce2287143bd98c175\",\n        \"public_key\": \"5364baf1fdb2c63840b30d4031cf83a2e18e620793bae59d1035c0ede55e528b\",\n        \"message\": \"ce488d26975c1c9328b47fa92e19561330041b23a0e57a4b8bca89eb5f615e73dd7fae69c2380e3212f9b73341c356db75a6256d7a20a97f759d4cba7197178ea724dd932949360e96c50a4b3ba55a953372c397b0969c2b14d3609e0a852d484df70eaab11249ebeb3237921f0a39a55d7dccfef205d94ec80d9e1fd6a2c1efd29844101dfe2c5f668adb7975915dedd086500cee2c1e233e8e48855cc1a6f287d63dce10addd13cac7b7a187efe47e12d1c35bb3974052b23a73668d3e4c87db4841af846e808672c43d0a1522e2965f083951b2b2b0c409548ee6182f0c9850514c9e6c102f54ba4124c92a90274f405891e662f5ebb3771b85783156e9e5836734d09d1baf5b2134c93162eec4be03bd12f603cd27be8b76accc6e8b8bac020cba3479651c9ffa53ce4eb77a77313bc1265ddab803ef7a6563ba6f799d1ef30ef5a0b412965fdac0b9dab842c78ee2cc628e3d7d4061e34ede3797e154b06e8c66cebdf2ded0f81b60f9f5cdda675a435277ba1524557e67f5cefafce929291dce89ecb08a17b67a60c582b487bf2f6169626615f3c2fe3b67388b713d35b9066669960de4db413cd8528ee56ed173e976a3c974ac633a7134cce38319735f857b7d71ba07f477ef85848aa8f39e118118779ed87b4f42aa358a89f7ec844a451e7e8fc0af418b85bc9bf2f26d1ea137d335ec7ee757b70ae2fdd9cc134932f0e5425bf37fb915e79e\",\n        \"signed\": \"32250361df6ed283485f95f3d357a4f1c33a8cf91658327cd453d49c953665510870aa454cfa3b83245220a827d0ec7477f9eceb79c4a29f301f953cc8caac07ce488d26975c1c9328b47fa92e19561330041b23a0e57a4b8bca89eb5f615e73dd7fae69c2380e3212f9b73341c356db75a6256d7a20a97f759d4cba7197178ea724dd932949360e96c50a4b3ba55a953372c397b0969c2b14d3609e0a852d484df70eaab11249ebeb3237921f0a39a55d7dccfef205d94ec80d9e1fd6a2c1efd29844101dfe2c5f668adb7975915dedd086500cee2c1e233e8e48855cc1a6f287d63dce10addd13cac7b7a187efe47e12d1c35bb3974052b23a73668d3e4c87db4841af846e808672c43d0a1522e2965f083951b2b2b0c409548ee6182f0c9850514c9e6c102f54ba4124c92a90274f405891e662f5ebb3771b85783156e9e5836734d09d1baf5b2134c93162eec4be03bd12f603cd27be8b76accc6e8b8bac020cba3479651c9ffa53ce4eb77a77313bc1265ddab803ef7a6563ba6f799d1ef30ef5a0b412965fdac0b9dab842c78ee2cc628e3d7d4061e34ede3797e154b06e8c66cebdf2ded0f81b60f9f5cdda675a435277ba1524557e67f5cefafce929291dce89ecb08a17b67a60c582b487bf2f6169626615f3c2fe3b67388b713d35b9066669960de4db413cd8528ee56ed173e976a3c974ac633a7134cce38319735f857b7d71ba07f477ef85848aa8f39e118118779ed87b4f42aa358a89f7ec844a451e7e8fc0af418b85bc9bf2f26d1ea137d335ec7ee757b70ae2fdd9cc134932f0e5425bf37fb915e79e\",\n        \"signature\": \"32250361df6ed283485f95f3d357a4f1c33a8cf91658327cd453d49c953665510870aa454cfa3b83245220a827d0ec7477f9eceb79c4a29f301f953cc8caac07\"\n    },\n    {\n        \"secret_key\": \"2c47f2b8b9d2cee9e6f654bc24658f9eaf439c23beaa0a79bf35cc8cd2debaf4\",\n        \"public_key\": \"444af2f34fd32e5a19f61f87d03e107627a3eeb8bd94d2faeaa348b05dea1980\",\n        \"message\": \"044c8faa8c8aaf9f2b8186a6b9b33847ec7b452423b22a91743d2e597ecc1e1e22ae60053e9ee6233b044e775920e4e3d66719901325cfdd39bb532f8aa469aab42e9608c21260c04c27413a7a94e466f63c4952e90ef90c12814b3451b1cad7da9147f8409220f6498cc0a67fef4bc04fc06e1d898a5515591e8be0c43d75a6fe425b7cbefb1b91b1bd78b5bec7829056982efdc5be24af6678006adc6f0446202e7ec3a2d6979cb0df7e25d74233914d9c58b81cf55be06967d3a595c1b9672869994cfba67162833a2143aa91cc93acdafa5b45208df3e88ccc01a2a4d220e360098d9154d225a7ca5f2f1e52b1003d106650a77b283b95e4baf1e7336fa9a747a2b3823d360910412e76db725ce1ab1e1d189d0d3abef82d7666bcf1b76669e0643b44f74e90ceafa0c8371b57c58f3b370a547c60958f0fcf461b3150f848c470fa07e29bf5f0d4b59efa5ab0d0341e0451d0abb29d7414cddc46cc6d74cf3dc233d0d1707387bd8c7780ff78e546fb77294d58a5dda5f05c1297e3d1771156d285635bf7ecedb38a9e5e77449804f3899ea46a50266b255aeb52d18e0fa136e535cc9026f678552fa3ee2146081d999685e24bf7807cc47c130436c544d35b4b875bd8afa312ce3ae17cf1c7f5ea1ececb50f95344720cecf088434ff8e0ba044ec19c98ada7782116304cbeac1c3e35f5a4f44313354dc9a40ece5a0f9ad3a2025acef262c5679d64\",\n        \"signed\": \"8554b01d09ed86e61395b91a2b1ee18715c42f9c7e7f0700d79ff9fb5781293d61c558dd5b431c93718dcc0f98fb652b596f18c30f82215e8e63e4f6568c8800044c8faa8c8aaf9f2b8186a6b9b33847ec7b452423b22a91743d2e597ecc1e1e22ae60053e9ee6233b044e775920e4e3d66719901325cfdd39bb532f8aa469aab42e9608c21260c04c27413a7a94e466f63c4952e90ef90c12814b3451b1cad7da9147f8409220f6498cc0a67fef4bc04fc06e1d898a5515591e8be0c43d75a6fe425b7cbefb1b91b1bd78b5bec7829056982efdc5be24af6678006adc6f0446202e7ec3a2d6979cb0df7e25d74233914d9c58b81cf55be06967d3a595c1b9672869994cfba67162833a2143aa91cc93acdafa5b45208df3e88ccc01a2a4d220e360098d9154d225a7ca5f2f1e52b1003d106650a77b283b95e4baf1e7336fa9a747a2b3823d360910412e76db725ce1ab1e1d189d0d3abef82d7666bcf1b76669e0643b44f74e90ceafa0c8371b57c58f3b370a547c60958f0fcf461b3150f848c470fa07e29bf5f0d4b59efa5ab0d0341e0451d0abb29d7414cddc46cc6d74cf3dc233d0d1707387bd8c7780ff78e546fb77294d58a5dda5f05c1297e3d1771156d285635bf7ecedb38a9e5e77449804f3899ea46a50266b255aeb52d18e0fa136e535cc9026f678552fa3ee2146081d999685e24bf7807cc47c130436c544d35b4b875bd8afa312ce3ae17cf1c7f5ea1ececb50f95344720cecf088434ff8e0ba044ec19c98ada7782116304cbeac1c3e35f5a4f44313354dc9a40ece5a0f9ad3a2025acef262c5679d64\",\n        \"signature\": \"8554b01d09ed86e61395b91a2b1ee18715c42f9c7e7f0700d79ff9fb5781293d61c558dd5b431c93718dcc0f98fb652b596f18c30f82215e8e63e4f6568c8800\"\n    },\n    {\n        \"secret_key\": \"887fdb4870681d4fb06a936259f75cae0517f501af646bc07a4d72bee7fb1c73\",\n        \"public_key\": \"c762ebd48b2ce02d06384e38554b825ad322ebea74d259df1547a4d547ce0024\",\n        \"message\": \"c5dc779f3f3fac06dd28e5a67e0e524af5b5dc3b34409657b63dface9471e9a41e1132175a0b569c8fea9d2eef2cf5d5962c7e0b6145a9e7a0c1aa33772044f9c3998c5a8c4886458b4e586f9307608361f511e7ab5092ac41ec76e0586ef5b9c236fcf5ca2fc8dd6aaeb789367f2e7c990932555dc52261e44e49423498b524419183b6c1f1d42c45464eccb0c2f7e25177fe5cd463502b403e06d511fcf9dcb64012e0f20b34c2ea7c004d9e484a7ed81f3260c41c8b1953529f47f71e867843cc3c332ad0366a63817ed12dd4730d3dfdbd7572b9ff798045940dd19fad0c8aea0b4ab61c4016de32799c73aa2b92d2c25ee9b72d46fe8f0693c58775efb05e9e17a5c346a81265d35be69a22d095de186066a5c6d8c07a3d38d002a10e5efdb866da4a9bdd54f5092661b6c2d743f5aeaa4c6c318fb59323903057e49c237b45f67542a4f27caf65b57cfcf88b71203d43d7f95322160f95c232dd10abb113b721ddba2226b063229bb44102336b10bf1656551161249786d454f4e0909d500017f6c7564f733c831af4e5ec94dfd3bf8ff5f3021b70a5ca5d28c6dfb8a2c18a1a662a33359f264d169698c1ab55783faca73bd68c0f79d1d04ae0ecdb52ae761892c02493ff35f3d84f66e236fc58134ad6a77d92254905d773900d9ddf2654c70b46f341dacb4793ca51eede45533eaeeb6e3323bc3e6c85a7940651c4f6f98191c618c891ea4e220ea4\",\n        \"signed\": \"410a5af3c59b7c6bdb214b166cb79d96f830cf98bf52dad7b6ff2979c97fea4fed5ef7d3d49f03097279b9a099226e2a08dd30c60786254e2da8dee240bfc308c5dc779f3f3fac06dd28e5a67e0e524af5b5dc3b34409657b63dface9471e9a41e1132175a0b569c8fea9d2eef2cf5d5962c7e0b6145a9e7a0c1aa33772044f9c3998c5a8c4886458b4e586f9307608361f511e7ab5092ac41ec76e0586ef5b9c236fcf5ca2fc8dd6aaeb789367f2e7c990932555dc52261e44e49423498b524419183b6c1f1d42c45464eccb0c2f7e25177fe5cd463502b403e06d511fcf9dcb64012e0f20b34c2ea7c004d9e484a7ed81f3260c41c8b1953529f47f71e867843cc3c332ad0366a63817ed12dd4730d3dfdbd7572b9ff798045940dd19fad0c8aea0b4ab61c4016de32799c73aa2b92d2c25ee9b72d46fe8f0693c58775efb05e9e17a5c346a81265d35be69a22d095de186066a5c6d8c07a3d38d002a10e5efdb866da4a9bdd54f5092661b6c2d743f5aeaa4c6c318fb59323903057e49c237b45f67542a4f27caf65b57cfcf88b71203d43d7f95322160f95c232dd10abb113b721ddba2226b063229bb44102336b10bf1656551161249786d454f4e0909d500017f6c7564f733c831af4e5ec94dfd3bf8ff5f3021b70a5ca5d28c6dfb8a2c18a1a662a33359f264d169698c1ab55783faca73bd68c0f79d1d04ae0ecdb52ae761892c02493ff35f3d84f66e236fc58134ad6a77d92254905d773900d9ddf2654c70b46f341dacb4793ca51eede45533eaeeb6e3323bc3e6c85a7940651c4f6f98191c618c891ea4e220ea4\",\n        \"signature\": \"410a5af3c59b7c6bdb214b166cb79d96f830cf98bf52dad7b6ff2979c97fea4fed5ef7d3d49f03097279b9a099226e2a08dd30c60786254e2da8dee240bfc308\"\n    },\n    {\n        \"secret_key\": \"88b3b463dfc30d015eefbbbdd50e24a1f7277775bcef14a6be6b73c8c5c7303e\",\n        \"public_key\": \"f2b6284c930d4ad32d0ac719040ee7886b34722edf53da801acb5f931969e119\",\n        \"message\": \"17c317fa6bc90c5532328f02ccfb6c099e6fe1000174f2af3a3a9309428506717c5c4335bdd7c367ff4e448a9c047503afba68fd8f7987237be7f7fbdc6d73f24c6421cab422b3fb25f67b2d71042e71570df2af37bfe5c114211fd5524b6c1c6cc52fabc3cd7fb464cd580bb74071cb300f8c9f8a46208e5aa5ddfea5fe90697aa2f14c607950c98f2312a9e16ef6346a8fd129232733827e1501a660c77c29c56d2fdd1c5597f8bc89aaefe3713734fe82858201891a1147efaf1d78a471f920defc880344553eb716cce3260e86a1bc0be28373a6a066116e8ecb10a0c4a70ca2b5364e119f84aec60deced3a4eff1fe688c5e3e251470ab516fa964a4b6f28368dd1e283597934064dc0c5b5691062cb2e267bd15fd422bcfefb83ccef7aa9a2275ef57e473149988c1578fd18708d2ff69f8e5980aa826a82cab7d8b92bb53bdd46db046ecdfc8cd7ae5ce44f3c5b8c0565b5d3c072c76b95ce900ac3ee5510db0e75d3a4150a98f3ccccc69e930c6ba741dbb0eb9fb3196871ba206a58e0dae39c8d6bb72a82399c4b7b9da38577ac17ff1524d653c0bf33679323ca7eef4e9228729031560ed8f2e5193c640b2f5e608075a2ed61428dfccdc00050ba4b99ed6d1536d5ac1e939674b41d16312ae5b07def1bf53589bed4400602ee11b850330f38aad33ef04170a3905c28b50ecc57dccf4f29d0c00f713d32ffc857956588a6326b9549edb0e4fe6185\",\n        \"signed\": \"825aff71f79303bf4592bd8da4d7d9437ff267976f746437655988ddcf29379465a3b48c9fb0f31cef03e6368861c369b4364fb8e4b0c72e26a9a9dded1c250417c317fa6bc90c5532328f02ccfb6c099e6fe1000174f2af3a3a9309428506717c5c4335bdd7c367ff4e448a9c047503afba68fd8f7987237be7f7fbdc6d73f24c6421cab422b3fb25f67b2d71042e71570df2af37bfe5c114211fd5524b6c1c6cc52fabc3cd7fb464cd580bb74071cb300f8c9f8a46208e5aa5ddfea5fe90697aa2f14c607950c98f2312a9e16ef6346a8fd129232733827e1501a660c77c29c56d2fdd1c5597f8bc89aaefe3713734fe82858201891a1147efaf1d78a471f920defc880344553eb716cce3260e86a1bc0be28373a6a066116e8ecb10a0c4a70ca2b5364e119f84aec60deced3a4eff1fe688c5e3e251470ab516fa964a4b6f28368dd1e283597934064dc0c5b5691062cb2e267bd15fd422bcfefb83ccef7aa9a2275ef57e473149988c1578fd18708d2ff69f8e5980aa826a82cab7d8b92bb53bdd46db046ecdfc8cd7ae5ce44f3c5b8c0565b5d3c072c76b95ce900ac3ee5510db0e75d3a4150a98f3ccccc69e930c6ba741dbb0eb9fb3196871ba206a58e0dae39c8d6bb72a82399c4b7b9da38577ac17ff1524d653c0bf33679323ca7eef4e9228729031560ed8f2e5193c640b2f5e608075a2ed61428dfccdc00050ba4b99ed6d1536d5ac1e939674b41d16312ae5b07def1bf53589bed4400602ee11b850330f38aad33ef04170a3905c28b50ecc57dccf4f29d0c00f713d32ffc857956588a6326b9549edb0e4fe6185\",\n        \"signature\": \"825aff71f79303bf4592bd8da4d7d9437ff267976f746437655988ddcf29379465a3b48c9fb0f31cef03e6368861c369b4364fb8e4b0c72e26a9a9dded1c2504\"\n    },\n    {\n        \"secret_key\": \"427d6e423917896831601b8f4e21561db6108571be009e29dca49a5960ff314b\",\n        \"public_key\": \"8d9e6360fdef249975df27b3106a71120587722df3270a85a13a8c3bb8c9809e\",\n        \"message\": \"9c2cc7f2462e09c4c58c2709ab4259885a4e887d9fa531881505aaf203c163fb3a0dc028f4ada60670638d4a9727a39083bedbaced58edb779e1ce6ccdfb428c362bb1db0c1053006bd8f4bef89a1a9de01c774e357f910e5c39b22477555e5f7c0498b5b28f369e5d3fa42ab360e4f451c69f81ba0f3cced43a559db600104278f868796b2c911b3b032b729f4b22ac149dc467a0cae48d19e9d985b42b62549de171ff566e1d1e9bb8e56cfd1ae8f7bddcfd8a2341827dbe89c882ab3e498339ff681c7dc1104de738b480316943109f703d471ab86e4ca4287e4cd74c312ff7d037395606fb25f871e7277078a787d02f31cc9e815be8600a7c47c6fdd82331ae9c496a547bdb235b8a56d53259e6296124a32c3b625d202419d064b9a4e83efa87f13537b4f513b916a84fc866d8a899804c7833eaa019e0d7e0e8075bd6b5cb6ffc766479f3f6e20e481e6ab27bd808ad906cdcc7827430e312f740f275ddf51dd83248fa057c43c9cb77557b2fd9c2d52824ff9e146deac1e6691d450213bc590a49bec72d52e38f6b4dc6cca951eef2184d2425031ad59b242effa68b6c72c54c9dfdb419c02eb43ef3f34d338d2a9dd03a78cfdd014098e249259e77282e0c3fc1010b02a67ff851e9cfd9749c1cd8f06cf462e6ade995ac466fab5c795e9eff13e55b4350b94c7316aa498df9fdee9958047793e3bbb89fb81da85f4b9d43e4b0d43b381b94cdc9a99d06\",\n        \"signed\": \"d1c9a01c56e33960f49df37eab963bc5a99f25c600446ce2ca48d9139da5733b718fbf1a987393f6e5823c2d130c7ce60ea3db3543c8854ef12b98d33adde7059c2cc7f2462e09c4c58c2709ab4259885a4e887d9fa531881505aaf203c163fb3a0dc028f4ada60670638d4a9727a39083bedbaced58edb779e1ce6ccdfb428c362bb1db0c1053006bd8f4bef89a1a9de01c774e357f910e5c39b22477555e5f7c0498b5b28f369e5d3fa42ab360e4f451c69f81ba0f3cced43a559db600104278f868796b2c911b3b032b729f4b22ac149dc467a0cae48d19e9d985b42b62549de171ff566e1d1e9bb8e56cfd1ae8f7bddcfd8a2341827dbe89c882ab3e498339ff681c7dc1104de738b480316943109f703d471ab86e4ca4287e4cd74c312ff7d037395606fb25f871e7277078a787d02f31cc9e815be8600a7c47c6fdd82331ae9c496a547bdb235b8a56d53259e6296124a32c3b625d202419d064b9a4e83efa87f13537b4f513b916a84fc866d8a899804c7833eaa019e0d7e0e8075bd6b5cb6ffc766479f3f6e20e481e6ab27bd808ad906cdcc7827430e312f740f275ddf51dd83248fa057c43c9cb77557b2fd9c2d52824ff9e146deac1e6691d450213bc590a49bec72d52e38f6b4dc6cca951eef2184d2425031ad59b242effa68b6c72c54c9dfdb419c02eb43ef3f34d338d2a9dd03a78cfdd014098e249259e77282e0c3fc1010b02a67ff851e9cfd9749c1cd8f06cf462e6ade995ac466fab5c795e9eff13e55b4350b94c7316aa498df9fdee9958047793e3bbb89fb81da85f4b9d43e4b0d43b381b94cdc9a99d06\",\n        \"signature\": \"d1c9a01c56e33960f49df37eab963bc5a99f25c600446ce2ca48d9139da5733b718fbf1a987393f6e5823c2d130c7ce60ea3db3543c8854ef12b98d33adde705\"\n    },\n    {\n        \"secret_key\": \"be935209f62dea6012ecda6a6156cd166a4d761150deed456816eaf0ce78a7f6\",\n        \"public_key\": \"d39a89af72293948b13421fb883bbe372af9089c224d42b901979f7e2804e1c0\",\n        \"message\": \"117f427cb68150cafcfa462c42206141427c4dcea1c8eacc2d30bed1e90207d5ae305e1fc16c54e4c54cc6878cdbedc9f51fe18461ec37c557b115d13c8682c4e15f505296a1760e1e75f5ab27a5c15a1357d2c8c40dd5355f7c82fea5d27e28876358c12e9113ee2983ea6f09c64e06e297dd96b34d9b5ed49fc47a8839549c66b002fe945e8f94e7d2315c50ca4dc098be4b3289812fbea96b47ce604540bde0e5ab0b1bc036be9b6a95e09c81e898640c8f05d60ad94218d0e66ceb85a26b78292220bfd061dd073512923b90c79dcf5a1935fafe8e01ef8bf81b4d37c5a571b50c421f9bd2194bef3586fcb8584877bb7e0481655b05c7b643b1e45b04036272841852e31940ef8f3b6d4feb5df079d176f979c18a11a66d1214e52f687e9063c1c2b7277b685d5c72ad569f7873838f910257a053131c83ebce86e69d736362bebc96bbfa35fcba1cb527e748e5f579929fd40c56b1a51a222e863302705c86f7b54ebfbb9482f7e280f7bec8caf3a6b5671ac30cd1be529288797c013ce56bd186de7dfc1828691425c147c5174a290d80cbd59c19da7adf77918882a7b2a9a64e6d76b48b92f2a266eee6e251d2e817652b88b502de7399782d7529a81d0a363996b9df68b15a7630904c8c246081fa4f09299f15757958e089a901c3564615c0f7cf2752b8b9e521338d836e3dae4ce2374642253c4c9831974e5d8c2842f49007b71775093dfe57f44492f0\",\n        \"signed\": \"08e098a749fce6d12354395878a8be35fe9edf72684dd8281224899b1caea4ed687785dff55a19989e03636e1666386f22c3f443ecf6fd34d599ff3ec2faf101117f427cb68150cafcfa462c42206141427c4dcea1c8eacc2d30bed1e90207d5ae305e1fc16c54e4c54cc6878cdbedc9f51fe18461ec37c557b115d13c8682c4e15f505296a1760e1e75f5ab27a5c15a1357d2c8c40dd5355f7c82fea5d27e28876358c12e9113ee2983ea6f09c64e06e297dd96b34d9b5ed49fc47a8839549c66b002fe945e8f94e7d2315c50ca4dc098be4b3289812fbea96b47ce604540bde0e5ab0b1bc036be9b6a95e09c81e898640c8f05d60ad94218d0e66ceb85a26b78292220bfd061dd073512923b90c79dcf5a1935fafe8e01ef8bf81b4d37c5a571b50c421f9bd2194bef3586fcb8584877bb7e0481655b05c7b643b1e45b04036272841852e31940ef8f3b6d4feb5df079d176f979c18a11a66d1214e52f687e9063c1c2b7277b685d5c72ad569f7873838f910257a053131c83ebce86e69d736362bebc96bbfa35fcba1cb527e748e5f579929fd40c56b1a51a222e863302705c86f7b54ebfbb9482f7e280f7bec8caf3a6b5671ac30cd1be529288797c013ce56bd186de7dfc1828691425c147c5174a290d80cbd59c19da7adf77918882a7b2a9a64e6d76b48b92f2a266eee6e251d2e817652b88b502de7399782d7529a81d0a363996b9df68b15a7630904c8c246081fa4f09299f15757958e089a901c3564615c0f7cf2752b8b9e521338d836e3dae4ce2374642253c4c9831974e5d8c2842f49007b71775093dfe57f44492f0\",\n        \"signature\": \"08e098a749fce6d12354395878a8be35fe9edf72684dd8281224899b1caea4ed687785dff55a19989e03636e1666386f22c3f443ecf6fd34d599ff3ec2faf101\"\n    },\n    {\n        \"secret_key\": \"6818c60bb6439ac2eee2d4e128e9d8691d4ad5d363fed7d6577a62b6569994a4\",\n        \"public_key\": \"7345ec11bccc056fc4effa3e4ef670996aa26a1bb1b83391babc39a1a59601f9\",\n        \"message\": \"b2ae658b3c13c3cdeb1dc993b0f45d63a2ea9abd0b7a04f1f5ce5932806c2ca9b7a204fbf8d066b7f0fe6ae0d1da68c885ee11f6f6db7e8320a2ea650b533851cdd99d903aa0b3faa3c950f702f04e86b4eeb3a1c7bc854b2514fa5b4766d375b4f1ad61075378dd92fd626c2b47e01383ea72987959262c562862b45b7557671413b66614bcc9f7bdb9ee46cbed8965bfa505315090c7204bea89175be5f20802e3deddcbd8dd64cfef7ee6a6e3860ce1e5799df5d810d5ecf32e615d16dff87abd4a636ea17aa4ece5b6b2c046b65b5af749862b45790c39176820b36901be649cf4169df7e923956d96064950c555f45acb94507cfd0c3b33b080785e35c0d2b0addc4c0ad3fb216ac2e601c9c7e617dabda333dae603cc9db1fc62ae4e0e45e3ccdd166a6781e243b7daa138806632f538844ee3d140b7a8bb2b540100778c458e066170705e5fb2c88029098b992c39bc9ff6330bfcfe7752320e6ea0949d2c871aedc187be27fef7db5f72a6a773edde0dc52ae2ed931cb26817b85b1545894d92298aaf87ccbc783e8dd6d16493f56ead2ba852ee9c7d10074406440d2a279abc874f15468dd66a717bace37be7b7055dd9681f8be81329ee7af97e3abc434ac1c93aec582f23fd1ec0fa5aafcf7bfbda00ffa97ae317ae918d349d21a7f4619142ba23dacef7b390ae26a17e2e2962ae27005376b72d4da9e2979653a66325a14617638dbe1a5540b683ac0017\",\n        \"signed\": \"1505967a27b9f86e9242444002a1e3197d74ddcd89659ec5140202aac794b8adc193e7d30f3382642990f6fed7a999cac8c61eaa39b7d90816f1d738744be101b2ae658b3c13c3cdeb1dc993b0f45d63a2ea9abd0b7a04f1f5ce5932806c2ca9b7a204fbf8d066b7f0fe6ae0d1da68c885ee11f6f6db7e8320a2ea650b533851cdd99d903aa0b3faa3c950f702f04e86b4eeb3a1c7bc854b2514fa5b4766d375b4f1ad61075378dd92fd626c2b47e01383ea72987959262c562862b45b7557671413b66614bcc9f7bdb9ee46cbed8965bfa505315090c7204bea89175be5f20802e3deddcbd8dd64cfef7ee6a6e3860ce1e5799df5d810d5ecf32e615d16dff87abd4a636ea17aa4ece5b6b2c046b65b5af749862b45790c39176820b36901be649cf4169df7e923956d96064950c555f45acb94507cfd0c3b33b080785e35c0d2b0addc4c0ad3fb216ac2e601c9c7e617dabda333dae603cc9db1fc62ae4e0e45e3ccdd166a6781e243b7daa138806632f538844ee3d140b7a8bb2b540100778c458e066170705e5fb2c88029098b992c39bc9ff6330bfcfe7752320e6ea0949d2c871aedc187be27fef7db5f72a6a773edde0dc52ae2ed931cb26817b85b1545894d92298aaf87ccbc783e8dd6d16493f56ead2ba852ee9c7d10074406440d2a279abc874f15468dd66a717bace37be7b7055dd9681f8be81329ee7af97e3abc434ac1c93aec582f23fd1ec0fa5aafcf7bfbda00ffa97ae317ae918d349d21a7f4619142ba23dacef7b390ae26a17e2e2962ae27005376b72d4da9e2979653a66325a14617638dbe1a5540b683ac0017\",\n        \"signature\": \"1505967a27b9f86e9242444002a1e3197d74ddcd89659ec5140202aac794b8adc193e7d30f3382642990f6fed7a999cac8c61eaa39b7d90816f1d738744be101\"\n    },\n    {\n        \"secret_key\": \"6d1da5b483e64b0365990ff09381fb1702fd8ec3a1a369cd52e4c56713a314a5\",\n        \"public_key\": \"08055c261f26e02a658f66d9ba01fcde53e9ade3edc6bf815e4a6802e1677ab3\",\n        \"message\": \"79a2c37055f189f3247f1f8cea19b2ea40d858db1f5d1392ee6d411c7802ee23de52ad02811725a94d76675da89a96b5d07abcee233a1a2e1fa324fff9e78a4c196147f8570b0b13713d96aa5d750a15d7cd162e7ba2e75333607dd698eb4773c7e91f7668ff8b62f04640eb12ecf122fce6b832e0d0df928eefd2c2002364af6bb55291d3f54929085be338342f09da73e279c87c8324555819ed57e78d7ac40951d33f65b94aa1e555e92a063d11f1ff7b12694341e3fe444933d01aa36753ed3cdda890bdf95a8205b5d893221991c795ad0a4a946f58d40a453451af214fd465e28d3e2f0a56aa56def8dc04aad35713abfc8bd7856d5a9dc3f60a3f2bd3e6366f1f244e941d6aea892f6a88931fe1c313e09078e90bc6392d490533c9ea3ff6deaf3aadfa8dfdc4e90f64af47589ea65a87acd2199602351d3afc2103196e0394ed523aa799d31e11d34fff546d44f436b34859f9cfbc9ce403de5a9830ec3d453f0d45970f572c144f191b2fbb2d0ea6cc9c8e24d9c0b2183b278072ebb0be2d70d037fd2e8ec18dc4c9b21abdc6a4ce8d4668a220eebd6934f04baf0e88a488d2dfc735a7c5a70dbb0166a21ae011fc6e7da10fc320336271d9eead510a6f7032f2296692be508021bc98c170be4235f7ce31f2bcd6341163683376ae2c5662cb4770c96e018ef1bf47913319c9a09b9e965ab5c3e97bbc756a5666b4567f2cff2d0c3a6a4026158cb9f90f950056\",\n        \"signed\": \"a5b8b44a91444c64374b523cb4dcb0cef4ce52408b98126d7e1ae8bdc28cf51470ce4e253e0be62bd68ebf5fa6bce1585eccfa9256c073ee03e54c525bbe2d0a79a2c37055f189f3247f1f8cea19b2ea40d858db1f5d1392ee6d411c7802ee23de52ad02811725a94d76675da89a96b5d07abcee233a1a2e1fa324fff9e78a4c196147f8570b0b13713d96aa5d750a15d7cd162e7ba2e75333607dd698eb4773c7e91f7668ff8b62f04640eb12ecf122fce6b832e0d0df928eefd2c2002364af6bb55291d3f54929085be338342f09da73e279c87c8324555819ed57e78d7ac40951d33f65b94aa1e555e92a063d11f1ff7b12694341e3fe444933d01aa36753ed3cdda890bdf95a8205b5d893221991c795ad0a4a946f58d40a453451af214fd465e28d3e2f0a56aa56def8dc04aad35713abfc8bd7856d5a9dc3f60a3f2bd3e6366f1f244e941d6aea892f6a88931fe1c313e09078e90bc6392d490533c9ea3ff6deaf3aadfa8dfdc4e90f64af47589ea65a87acd2199602351d3afc2103196e0394ed523aa799d31e11d34fff546d44f436b34859f9cfbc9ce403de5a9830ec3d453f0d45970f572c144f191b2fbb2d0ea6cc9c8e24d9c0b2183b278072ebb0be2d70d037fd2e8ec18dc4c9b21abdc6a4ce8d4668a220eebd6934f04baf0e88a488d2dfc735a7c5a70dbb0166a21ae011fc6e7da10fc320336271d9eead510a6f7032f2296692be508021bc98c170be4235f7ce31f2bcd6341163683376ae2c5662cb4770c96e018ef1bf47913319c9a09b9e965ab5c3e97bbc756a5666b4567f2cff2d0c3a6a4026158cb9f90f950056\",\n        \"signature\": \"a5b8b44a91444c64374b523cb4dcb0cef4ce52408b98126d7e1ae8bdc28cf51470ce4e253e0be62bd68ebf5fa6bce1585eccfa9256c073ee03e54c525bbe2d0a\"\n    },\n    {\n        \"secret_key\": \"5146f5b7f1baa19fc8cd785c896e0f90f9f659b77b1b9bb4adcab5a6267205e4\",\n        \"public_key\": \"688a8de64eff33ba6bbe36cdd6a384bb67b3f42636db234ff5efe0b31743c7e6\",\n        \"message\": \"97bd99f518ee0788d576d99c043b449dfc242ac5eeaec344a19432b345962ec412ce55362b3b851d98119fceb9328347f6fcc68dbf56a2814db09e9385843a931189ea3e72da9d79a45693053c035701dc5551240f95b303fba16f89aa53a43882b0f1381202c78f9c7419899f2351eca95e20bfee76351c48d00499f591da56a99524bb74fe1c834ee91077139f1edf67315c07a3fd97f80b7c276b6cf6b5cc36be363b731217f6319f5129ba7b14d054c8d81d8e3a3f3be62ac31ff62df6a3b2ee2596969b991704b31c689997ab4628bc2660c67872132e85da0c4fcf567965f1254a8f432692a17bb86cb3c1dcbaac939552f09e50ec5b0de2ef85e0ac253a4165655db5b5c49803821d859c60961e061d58278b827dd4d3bc47f1c22de094906bdbbf3badbdde22ba24255855eb86d1d7f37082059311dc0728ebeaf26c4473bad1fa9e614b533b811b6bcb0650c06d879a5245788f3401b46197300774a9aa73cd978c0530c81a53bdb3fc932414b3e30440dc127441eff1605e7fd9ac8c632e82bf1b453d4f33a57e4b67b0b6fcf6ed5555b5f5a300a14a00d0385a33750525b00edb312c6bfdd64edd3b5316d19f958c517634f013b008936d34e9b5e1e9283a5f0fd7783377c0e5090641bb9d338cf3133acd0b971e537904f17af92911afad72ee97f9a8283a16a7e26ab428416c1017dae9b1a99c4c3320ad163bdcfc328bfaf9b8d5d7d26d41d1ef21a5208f01\",\n        \"signed\": \"4bdbd7c64f13e278c23969e7eb386bbe499dbdefc3ff4e30cfac5cf86f216c24c9e6cde20e529d147fb7ea08f2593ad50903b5edbf86b4d28f2eb32ef137f00c97bd99f518ee0788d576d99c043b449dfc242ac5eeaec344a19432b345962ec412ce55362b3b851d98119fceb9328347f6fcc68dbf56a2814db09e9385843a931189ea3e72da9d79a45693053c035701dc5551240f95b303fba16f89aa53a43882b0f1381202c78f9c7419899f2351eca95e20bfee76351c48d00499f591da56a99524bb74fe1c834ee91077139f1edf67315c07a3fd97f80b7c276b6cf6b5cc36be363b731217f6319f5129ba7b14d054c8d81d8e3a3f3be62ac31ff62df6a3b2ee2596969b991704b31c689997ab4628bc2660c67872132e85da0c4fcf567965f1254a8f432692a17bb86cb3c1dcbaac939552f09e50ec5b0de2ef85e0ac253a4165655db5b5c49803821d859c60961e061d58278b827dd4d3bc47f1c22de094906bdbbf3badbdde22ba24255855eb86d1d7f37082059311dc0728ebeaf26c4473bad1fa9e614b533b811b6bcb0650c06d879a5245788f3401b46197300774a9aa73cd978c0530c81a53bdb3fc932414b3e30440dc127441eff1605e7fd9ac8c632e82bf1b453d4f33a57e4b67b0b6fcf6ed5555b5f5a300a14a00d0385a33750525b00edb312c6bfdd64edd3b5316d19f958c517634f013b008936d34e9b5e1e9283a5f0fd7783377c0e5090641bb9d338cf3133acd0b971e537904f17af92911afad72ee97f9a8283a16a7e26ab428416c1017dae9b1a99c4c3320ad163bdcfc328bfaf9b8d5d7d26d41d1ef21a5208f01\",\n        \"signature\": \"4bdbd7c64f13e278c23969e7eb386bbe499dbdefc3ff4e30cfac5cf86f216c24c9e6cde20e529d147fb7ea08f2593ad50903b5edbf86b4d28f2eb32ef137f00c\"\n    },\n    {\n        \"secret_key\": \"5e6fdac9351a637b99f33a264e1287697e2abab0cca16621792484f5606f44c1\",\n        \"public_key\": \"57e5f88acddc8cde7dd07a3146fb1d4f7a9b6383a8f6b2b8d9b07ebc3fc4dd20\",\n        \"message\": \"4d6cd3bc2f86266b8bb1b61d0e1caa9bd2d4a180361aef3a18d390b10f7e860f697e247eb6c3e51d3b976bf0ca183d01a69880f15c94b875668ca30dada0895bedd4d705a0e03304d063dea87c7fdec98b89c06f130dd5bd586b54d9ba737826bb405cd8ac8bbc9500acda3c07461d009440af0b2531e72f3ff5016ae2d86d69b87fb273d1e8dd5f6a264beebb2f885996741ffda277a0fbf8ef08f81f22ee5961d9d3fc938362e1ca12004a91d9b5f7a6833a6c22955ac0cda3390671910cbd51e685fe095973e415fc2db8adf10b147ec7080c3b8ebd07d21bb9556da85430a268eed8486b1e31c94313b01649fe91b222f85adee15eb77707d78ffcb660926544d33be9994a297620dc7aed97f392639053f388b0b3aa3bd0ac5b033cb414be520b43df6826b976890d0c53b97b6c92e7d1a1573d0c7494d747e0cad9bd8ea538d62ad59801ad0716f170193e3009d9959c55d2ff64799bd959359abb94ca9723b5ffc24c9507f8c5fd6e88eaae7a70add84d744ccf8b98363788f0bfb1a02522025751e534710d40a2d38a791194eba293fd2046cc14dd3876d168fc6e236cbe146d6369d225bfa67e53979865f78873a9fcf03c186fa8521f0a5545accee80d1e55107221e21f0f2291c143de023e88d7330cc87d4c51ff29a3090605e9739490c1dcee713495f231c2a36b11ab235547fb6328f747336d9b1ef25a8ab99ceda957b2dccee4075b0d03381b94ae18d041ea\",\n        \"signed\": \"987e32e00a8a1632f47b503194355c980cb22adeb326b4e3115ecab04b704d186cd92e3c3ac7b4e2936cbd07cb794ec0cfe91a97872ff2b41376f5f18f55b8054d6cd3bc2f86266b8bb1b61d0e1caa9bd2d4a180361aef3a18d390b10f7e860f697e247eb6c3e51d3b976bf0ca183d01a69880f15c94b875668ca30dada0895bedd4d705a0e03304d063dea87c7fdec98b89c06f130dd5bd586b54d9ba737826bb405cd8ac8bbc9500acda3c07461d009440af0b2531e72f3ff5016ae2d86d69b87fb273d1e8dd5f6a264beebb2f885996741ffda277a0fbf8ef08f81f22ee5961d9d3fc938362e1ca12004a91d9b5f7a6833a6c22955ac0cda3390671910cbd51e685fe095973e415fc2db8adf10b147ec7080c3b8ebd07d21bb9556da85430a268eed8486b1e31c94313b01649fe91b222f85adee15eb77707d78ffcb660926544d33be9994a297620dc7aed97f392639053f388b0b3aa3bd0ac5b033cb414be520b43df6826b976890d0c53b97b6c92e7d1a1573d0c7494d747e0cad9bd8ea538d62ad59801ad0716f170193e3009d9959c55d2ff64799bd959359abb94ca9723b5ffc24c9507f8c5fd6e88eaae7a70add84d744ccf8b98363788f0bfb1a02522025751e534710d40a2d38a791194eba293fd2046cc14dd3876d168fc6e236cbe146d6369d225bfa67e53979865f78873a9fcf03c186fa8521f0a5545accee80d1e55107221e21f0f2291c143de023e88d7330cc87d4c51ff29a3090605e9739490c1dcee713495f231c2a36b11ab235547fb6328f747336d9b1ef25a8ab99ceda957b2dccee4075b0d03381b94ae18d041ea\",\n        \"signature\": \"987e32e00a8a1632f47b503194355c980cb22adeb326b4e3115ecab04b704d186cd92e3c3ac7b4e2936cbd07cb794ec0cfe91a97872ff2b41376f5f18f55b805\"\n    },\n    {\n        \"secret_key\": \"fcfff0932dc86ea5902a8d33073329960cd8188a075dd0bcdfa8382c20b0e78f\",\n        \"public_key\": \"0c9205a90bbe7f2d505e17fa3d080b522a1d7a152cad2d85d31b34a0471c0d4c\",\n        \"message\": \"3d4b76122373e212a346d19a66bbfc4b623292649bd0ce5cf6bb135648bd01db7403b3d0bdd1697ff4e6e908904116754d370c40d700cdb664c46a91dd84a358b9d2381443e60f2c3f5640261b6b858ba8f828b0971f4122b20288a26ba2090ba14fd276360cc68679cd8419ae19c6d4dc7b6614c06df5e5c0510e2cb686de0ebd75e5210a215562589b28c9ccc7d272b98bd4bf93495efe4fc5b78defecfbcaa9fe126bad30e89b3a389b4256f6a48a76c345de5a36a1449f08345b9a5e6a001da1ff9cd433709348e9aefbc78ba52d3ab3b46986935eba8ecf81edc43c5b2e3b5eb38d9a165e9e7f72f617605463bedba973ebfdcdf2b0889c71412f8f850c7a3b5518ecd89d2e25c0c1c30f085a0ffe540ef9c0e88fc7ec4af1948a4e6f7a6e256b307a1127b71ba686efeadca0e4860947cf674fced6caf7310ccbaa8d9047daed30fd5585d41ddeae4df2fed4b6228032c3e4ae2380e87ec6cd72e4d74b8b4c3813fb043389391e9c13f7d33c3aab5a78fc4c6a634c61a70f02a940548da177c65df6ab17cd9683f37ea821c740889d82e88c834e7d5dc11662ea78b13c6a4b6218d31784219a4767595b1a56216525cd68938b22bdb1f8c5a7f1701afeb961888e2e0ec0c838cd620cb7dd8a1493a02cd56b545125e4700c0889fa2644e644a3af531d1cd6bc95e5df9175f137f28408cb699c7ae66f65d1d2930fac57ca8a60e6311a4078488c9ea404948a9debeb9d5e10\",\n        \"signed\": \"37ddd83f98b057b7cb3208a832c58aa90694563c23548d432291380b73591301f274b04cee2ef78c06d96c3d9b7c17521aae1a8ca50d347c09c3cf703bc8830b3d4b76122373e212a346d19a66bbfc4b623292649bd0ce5cf6bb135648bd01db7403b3d0bdd1697ff4e6e908904116754d370c40d700cdb664c46a91dd84a358b9d2381443e60f2c3f5640261b6b858ba8f828b0971f4122b20288a26ba2090ba14fd276360cc68679cd8419ae19c6d4dc7b6614c06df5e5c0510e2cb686de0ebd75e5210a215562589b28c9ccc7d272b98bd4bf93495efe4fc5b78defecfbcaa9fe126bad30e89b3a389b4256f6a48a76c345de5a36a1449f08345b9a5e6a001da1ff9cd433709348e9aefbc78ba52d3ab3b46986935eba8ecf81edc43c5b2e3b5eb38d9a165e9e7f72f617605463bedba973ebfdcdf2b0889c71412f8f850c7a3b5518ecd89d2e25c0c1c30f085a0ffe540ef9c0e88fc7ec4af1948a4e6f7a6e256b307a1127b71ba686efeadca0e4860947cf674fced6caf7310ccbaa8d9047daed30fd5585d41ddeae4df2fed4b6228032c3e4ae2380e87ec6cd72e4d74b8b4c3813fb043389391e9c13f7d33c3aab5a78fc4c6a634c61a70f02a940548da177c65df6ab17cd9683f37ea821c740889d82e88c834e7d5dc11662ea78b13c6a4b6218d31784219a4767595b1a56216525cd68938b22bdb1f8c5a7f1701afeb961888e2e0ec0c838cd620cb7dd8a1493a02cd56b545125e4700c0889fa2644e644a3af531d1cd6bc95e5df9175f137f28408cb699c7ae66f65d1d2930fac57ca8a60e6311a4078488c9ea404948a9debeb9d5e10\",\n        \"signature\": \"37ddd83f98b057b7cb3208a832c58aa90694563c23548d432291380b73591301f274b04cee2ef78c06d96c3d9b7c17521aae1a8ca50d347c09c3cf703bc8830b\"\n    },\n    {\n        \"secret_key\": \"a1e4fcfde044f1bb0e7bbc631a831a8d07e90ae08a966ad627b620b1e28c42cf\",\n        \"public_key\": \"25560f31168bd4b72552ededd08bb6bf79a94063c1f1e1d304869dd1ce049b95\",\n        \"message\": \"8c1454d4e08a1401646bf7a8859e8a145e85eeeb40db38ff0169709641212c81b67390749c01a79807f3ccadbbd2256f36ffc180cf9ba44bf4a7612d441c23b2e25d33c48a73e16ce357562758adb00553c3142fb8176b6ae8fb610a60f923b0911814b10f5679936c3677b70e846e218f587567f2019c7d282a107f3cc84763adaec88993c0cc5003e77af60d67db53f8cb727aa6672de004498c3b3e222aa7082d91f98a1a068374c510ff53a5e559cbe2d6c7c3442d7238907c811d58aa7f5a46b8311244f0dbe1b9c0e944dda1d8010864949c59396c6b346a11f3aa866d6bceadfc909038d22efbc8f1dac810a9f2fafcce7c0389eb0a56c0f68cae24ae3ddbdff7116d2fadeb9b0e7509536fdc3b83e71354da6a1aed16887490dc2f4df57bbaa7244528fa3094b99e867581acef906270b2cf4deda6b8fd9dbb79add7bea8f86fcb1f64dfd50e385b4209ec0b1a9f6d2e519068297a2b5c405c216b4a2ed983ff69c59b530effa60c0367051267dd2bbd1e86a9ab5a114dd4f69b540bfabfe97c0403b8fcbb27625761eda3e2ad8e625cfe4b615b7025531a498918c24e02a00e797bbafd14f9d3f6827e390063c436080688d037a6e2993c56d3a8e95f375c10040bf04f030c972623d9e3801c13b4ec8d01cf183855f5935f10ddb2c54c51c80cbed0c24db56e1ed148931d89161c5ea37c2f9787f88ef7330e5dcd0e43d81bfc8bf23ddf7983cc1d733843a33ccb395dfc\",\n        \"signed\": \"c8001527bd902c15c3dd5ae18180525b5e8202be66711f82885c8222a15f060092a2a6e2f7d7e980311209191b32b8ade48d3ea98cf245f0fad62c009c5a71088c1454d4e08a1401646bf7a8859e8a145e85eeeb40db38ff0169709641212c81b67390749c01a79807f3ccadbbd2256f36ffc180cf9ba44bf4a7612d441c23b2e25d33c48a73e16ce357562758adb00553c3142fb8176b6ae8fb610a60f923b0911814b10f5679936c3677b70e846e218f587567f2019c7d282a107f3cc84763adaec88993c0cc5003e77af60d67db53f8cb727aa6672de004498c3b3e222aa7082d91f98a1a068374c510ff53a5e559cbe2d6c7c3442d7238907c811d58aa7f5a46b8311244f0dbe1b9c0e944dda1d8010864949c59396c6b346a11f3aa866d6bceadfc909038d22efbc8f1dac810a9f2fafcce7c0389eb0a56c0f68cae24ae3ddbdff7116d2fadeb9b0e7509536fdc3b83e71354da6a1aed16887490dc2f4df57bbaa7244528fa3094b99e867581acef906270b2cf4deda6b8fd9dbb79add7bea8f86fcb1f64dfd50e385b4209ec0b1a9f6d2e519068297a2b5c405c216b4a2ed983ff69c59b530effa60c0367051267dd2bbd1e86a9ab5a114dd4f69b540bfabfe97c0403b8fcbb27625761eda3e2ad8e625cfe4b615b7025531a498918c24e02a00e797bbafd14f9d3f6827e390063c436080688d037a6e2993c56d3a8e95f375c10040bf04f030c972623d9e3801c13b4ec8d01cf183855f5935f10ddb2c54c51c80cbed0c24db56e1ed148931d89161c5ea37c2f9787f88ef7330e5dcd0e43d81bfc8bf23ddf7983cc1d733843a33ccb395dfc\",\n        \"signature\": \"c8001527bd902c15c3dd5ae18180525b5e8202be66711f82885c8222a15f060092a2a6e2f7d7e980311209191b32b8ade48d3ea98cf245f0fad62c009c5a7108\"\n    },\n    {\n        \"secret_key\": \"bed1bbcae18643d6f6aac34f3d9b6a1478394d02b931cff006d85f21b7dbc747\",\n        \"public_key\": \"4f528b38185a424c6fdece46511a0c29b7c04b32eb0483abb52d5f8eb6b352eb\",\n        \"message\": \"ff7c6413e618a056de401ee10c40ade3d7c0e6861495d97c2689ec6abb69dd2ae701fdcac8f08331ea5c5f5d805b5789ee5e241ff4ac8b960f4f2b9fef6a727fad86dcd432de9fad6ba45e00aa3687b0ceeb2c0d430b7d5fde63b4f6b982c4f9e03c430abad9044d06dc49e89df481405d8febbb0653e9686948aad2d9072544df9424fd487f4e24ba7f2455ddec4105828c3981bddbb1b7fbdbac155903e960fcd94c0716e736f519867fbc52c51260f571d7edcb081a23550ad8c70bb268864ab276aa2cc2dbf62383bb66030ebe94354174ccec2d2a907578556444507cbf8488bb23c62423a3a98da7cc968f599d3dc84dca3afad7f14ec306e1db534143216aa22ad18074c719570805ea46bc86b71a8ff58e41e73cb29ad5750fcfc9a1c54292b64b47ec9538f53816e36ed0d0c1ae5ead06d477aa975ecebaf62d9023b77e50e7b6d4abdaa485ea34ec766beb1d9ba03c9c067186e2e38266c6e2531e97480214638a2bb31431ac2086797155fc775b3aad8d5a0b904c381edd0c6bc23c66a1904955ed450a9cbd16459c32f5ca354bbc2da7b1a4d814f1b8710aadb2ccc4f397758b7e9d91f3a91e5825ab8682ff5e41702e07841ac7698c3da9f558edd01f86ce2c506bf4c2149ac9c195a59c7dd7d4ecf93c90b4423b4350588d41672cedc8510a7ad53b4b7edcaf23e43e05669d27a1fe97b78730d3fc060bd4edd9872cffb96285351bef148ef783ab392116bd7b907bad\",\n        \"signed\": \"0fc99dd3b9a0e8b1fc6e635af5c64006b67200fe958f53cce1b9b091a4e70669b593f15594bc0842e5576259f9a6859a0db22d740f9f8024b5baf1ef6f958c05ff7c6413e618a056de401ee10c40ade3d7c0e6861495d97c2689ec6abb69dd2ae701fdcac8f08331ea5c5f5d805b5789ee5e241ff4ac8b960f4f2b9fef6a727fad86dcd432de9fad6ba45e00aa3687b0ceeb2c0d430b7d5fde63b4f6b982c4f9e03c430abad9044d06dc49e89df481405d8febbb0653e9686948aad2d9072544df9424fd487f4e24ba7f2455ddec4105828c3981bddbb1b7fbdbac155903e960fcd94c0716e736f519867fbc52c51260f571d7edcb081a23550ad8c70bb268864ab276aa2cc2dbf62383bb66030ebe94354174ccec2d2a907578556444507cbf8488bb23c62423a3a98da7cc968f599d3dc84dca3afad7f14ec306e1db534143216aa22ad18074c719570805ea46bc86b71a8ff58e41e73cb29ad5750fcfc9a1c54292b64b47ec9538f53816e36ed0d0c1ae5ead06d477aa975ecebaf62d9023b77e50e7b6d4abdaa485ea34ec766beb1d9ba03c9c067186e2e38266c6e2531e97480214638a2bb31431ac2086797155fc775b3aad8d5a0b904c381edd0c6bc23c66a1904955ed450a9cbd16459c32f5ca354bbc2da7b1a4d814f1b8710aadb2ccc4f397758b7e9d91f3a91e5825ab8682ff5e41702e07841ac7698c3da9f558edd01f86ce2c506bf4c2149ac9c195a59c7dd7d4ecf93c90b4423b4350588d41672cedc8510a7ad53b4b7edcaf23e43e05669d27a1fe97b78730d3fc060bd4edd9872cffb96285351bef148ef783ab392116bd7b907bad\",\n        \"signature\": \"0fc99dd3b9a0e8b1fc6e635af5c64006b67200fe958f53cce1b9b091a4e70669b593f15594bc0842e5576259f9a6859a0db22d740f9f8024b5baf1ef6f958c05\"\n    },\n    {\n        \"secret_key\": \"c718823f43db2217c66ab2899704165d208573de60f33bc0b9338d880f193fb5\",\n        \"public_key\": \"2940b879b63f2cb1f6e3ef9c9d333ba91770fe18cc5a347fdf12b0efc5ca2ec9\",\n        \"message\": \"050e6877f65ec726eec701863fab140b994aa1e92a487db1a18701312057db44bfde70911ec26eaa28632d03794d545dfcb2aed4340cab7d092595cd59ed23994043f50ba696e9802bd64990121397286457ae69d76cb8e34d7c1ab245cb07b1b408f2bbbfdf33a1bdd559636702c918f982c2ac0221f7f94db91edefce28118259f89d994dad5bb013c678c1c338b65396b15e8899c169921f278859ce0c856d889b8c63418ebc573d2d625d5b5938839f2b169b6916d8e40dde70d3b72887ad2478ef6fb1284fa0e4fc524e3c6fa1dd22ba6b81def8279f382bcb45048851b17cd659d59409f571fa8a920a20934d9dbe1022d635840965400240f870aceffd5db7c7df08af89e47e1b9e20bb99f96ab073edf53694c7482890e3631340217e687ab27c984b60825169457d435a5409ad8e42da0aa63e20c2bc67bd8b9a267f39673a77f7f3136dc5cb2d24948dbe7bcd7129318c68c6fe95dd4dd4fe942286831ea53352fbb252a1288bcd838921356785d072134cb820f6279cc71461f431be9d3014724321c92fdc576320137705cffb2c23664b705e9be60ae1a190f3e3484f70058e702407b056d7fe5d31cee9c2a6ac6eada3516abc5517256df1243780a03bb00ba00ce248076eeca6fee91d5ef9eb907b801af097f3e9eb256bdcde81efe4baf8189b0399e36f1eaa3ab626617cf3b47dd89caf69c64c5b8f68bd917fe03e4668538460a1be88d9a846cef39934627d474734f\",\n        \"signed\": \"4c9cdb1ad46509560d871d3089afb8734648201b10acc953e8b61f2cce2dbae0fb9b868ac957432b7222dbf7e4cf0bc75309bea360b263abbde188532dda2504050e6877f65ec726eec701863fab140b994aa1e92a487db1a18701312057db44bfde70911ec26eaa28632d03794d545dfcb2aed4340cab7d092595cd59ed23994043f50ba696e9802bd64990121397286457ae69d76cb8e34d7c1ab245cb07b1b408f2bbbfdf33a1bdd559636702c918f982c2ac0221f7f94db91edefce28118259f89d994dad5bb013c678c1c338b65396b15e8899c169921f278859ce0c856d889b8c63418ebc573d2d625d5b5938839f2b169b6916d8e40dde70d3b72887ad2478ef6fb1284fa0e4fc524e3c6fa1dd22ba6b81def8279f382bcb45048851b17cd659d59409f571fa8a920a20934d9dbe1022d635840965400240f870aceffd5db7c7df08af89e47e1b9e20bb99f96ab073edf53694c7482890e3631340217e687ab27c984b60825169457d435a5409ad8e42da0aa63e20c2bc67bd8b9a267f39673a77f7f3136dc5cb2d24948dbe7bcd7129318c68c6fe95dd4dd4fe942286831ea53352fbb252a1288bcd838921356785d072134cb820f6279cc71461f431be9d3014724321c92fdc576320137705cffb2c23664b705e9be60ae1a190f3e3484f70058e702407b056d7fe5d31cee9c2a6ac6eada3516abc5517256df1243780a03bb00ba00ce248076eeca6fee91d5ef9eb907b801af097f3e9eb256bdcde81efe4baf8189b0399e36f1eaa3ab626617cf3b47dd89caf69c64c5b8f68bd917fe03e4668538460a1be88d9a846cef39934627d474734f\",\n        \"signature\": \"4c9cdb1ad46509560d871d3089afb8734648201b10acc953e8b61f2cce2dbae0fb9b868ac957432b7222dbf7e4cf0bc75309bea360b263abbde188532dda2504\"\n    },\n    {\n        \"secret_key\": \"2543d166c9f5f7427ff3034ffa8103cb117bf472331a73d9a2f1bc0a02a6ff1b\",\n        \"public_key\": \"42678cf3857021aa5567706db031e792715ccaf8abb02a042bad17db3d5fa103\",\n        \"message\": \"746d7abf0bfb2662c25ab5c5e4612c306f16d13e44d0db394a0015676ce609784f0323da1dfa94d2b2f1f6e02444a936d019b143021f73c79df9309e7bdff39daeec4caca00cba4ef31c8310c1a08ef4b36f81c377846b5b90acd411aa671ed7af278a24229b7893c1b415d79888d7637f5cb5c9c6c631ae5ffa29f1340e444096ab533617fdcb80ff81da0a7c6c142ee0fe5ea82f68cc3ea38b56f272b0d80fd5f4f55ca9348c161881435813c3fa9fff66a2ee6d5bd3edba0d2f9aa74b1c44bfd0e64678d3715124963ac575ffb09ee16437da484b3ba58e5aeb8ed8c5c0f47b59908fe580f37ec1de266b295d6be85e62358e9bbdc78964fb837eea29fdb7de86cc56f48bd9a3e6e2be51d8a1dcff3ca4d56ea934c682772bcafb51497be5d0f2a23dd4970c02c44c09ad897b4241acd7d6ab12d8f00c9aadc334b431fec5bb69a285b7550a639ece96952682b7334b68c65152e893b1c8100c694d8c5cfe26ac03c1f3914e65c84f0e777290c76f6acce340bff66da7220f73175e94af52f9f19e61f80dc1f35716b3f48dfa5025c9ebef7382e055830f5bbf15c6f6a95032909c892c0f89c8c15fc3ea40a20ee1a4529b521951df44d9d79d74e0c4c2e0fed849b8785206dbe62bfa2ca21087a912e9b184551659cd8a587e95b04317192596bb0b7fc9f7bbb6ee049c8b02fdd758b4e79882073b71eaab18aa293701c17d55f9ec46c52de1e886b6750fb0fbcd64f4568a210ae451e9\",\n        \"signed\": \"20ea9368a2ccd08bf9cbf48d4a2f7d03f0db08a54b87679cda03e296af9ef378be9b8f04b4065b009da6db016f3df9db64825873e2fb4de30449915cd73c4609746d7abf0bfb2662c25ab5c5e4612c306f16d13e44d0db394a0015676ce609784f0323da1dfa94d2b2f1f6e02444a936d019b143021f73c79df9309e7bdff39daeec4caca00cba4ef31c8310c1a08ef4b36f81c377846b5b90acd411aa671ed7af278a24229b7893c1b415d79888d7637f5cb5c9c6c631ae5ffa29f1340e444096ab533617fdcb80ff81da0a7c6c142ee0fe5ea82f68cc3ea38b56f272b0d80fd5f4f55ca9348c161881435813c3fa9fff66a2ee6d5bd3edba0d2f9aa74b1c44bfd0e64678d3715124963ac575ffb09ee16437da484b3ba58e5aeb8ed8c5c0f47b59908fe580f37ec1de266b295d6be85e62358e9bbdc78964fb837eea29fdb7de86cc56f48bd9a3e6e2be51d8a1dcff3ca4d56ea934c682772bcafb51497be5d0f2a23dd4970c02c44c09ad897b4241acd7d6ab12d8f00c9aadc334b431fec5bb69a285b7550a639ece96952682b7334b68c65152e893b1c8100c694d8c5cfe26ac03c1f3914e65c84f0e777290c76f6acce340bff66da7220f73175e94af52f9f19e61f80dc1f35716b3f48dfa5025c9ebef7382e055830f5bbf15c6f6a95032909c892c0f89c8c15fc3ea40a20ee1a4529b521951df44d9d79d74e0c4c2e0fed849b8785206dbe62bfa2ca21087a912e9b184551659cd8a587e95b04317192596bb0b7fc9f7bbb6ee049c8b02fdd758b4e79882073b71eaab18aa293701c17d55f9ec46c52de1e886b6750fb0fbcd64f4568a210ae451e9\",\n        \"signature\": \"20ea9368a2ccd08bf9cbf48d4a2f7d03f0db08a54b87679cda03e296af9ef378be9b8f04b4065b009da6db016f3df9db64825873e2fb4de30449915cd73c4609\"\n    },\n    {\n        \"secret_key\": \"85e0a80f3b30c20199d9c1ec662e392fdf1546377343f12471db2a0310a705bd\",\n        \"public_key\": \"540a3a1d83672e495034cff408e1fbe82e538f0917e8a1c7d17aab58e043d3c6\",\n        \"message\": \"d2802f1596f8383b64edbdc594060bff0e7013d5b7c85d830fae11aeb34dd594959da624e044474c5409c0059673bdc61a671ef5b0b8a26f30100b3b73968d8e4d83a72f25b513448d2f6b6a4475fdf89e31ca9268a30705af3f649e3fe01dde0cf4b29ec2da5436444af091d62730acd4cab608f0df26f088c6b9b9673794f0747dab2ce190f90592009fdce5464b3661b7e8620bad65509a6c752b727a8dc8d3efa584fde0272c451d65a93bece4f59d87dc6fbeb451401e3e2e003c6aca7b3d3f92719150c6778f015aff2a59bfbf2e91b21b0ad6877536eb54567059f587f54d4e2a6fe1fdcdd6a7fdcb8515575bcc3705d77859352fa0b044166e3c318846a5df33563003cb20bc942d30391093e8d583e8e64dec570ee1c4138762f6483898d32e2032bde9bbe07ec2c3eb47d96876f0fc0f024d753ceb34ff8480b4cf576230bb8263dd80eeac662eba31d8a61f309e175f4c0143e28a852b1c3061ce78efbd16a2873dd28198a46ec0a800b30dc8a93b8dbb81a730de450b864dea7680e509d800e82329c261b07e72aa80ee16ec375ddbbb6fe3d8d47b0e3c5a9f23c4d20b724c1df59835d830dd22d10403d8f15c102c4b3769c41666c3ab8c7e80b940d0bbb58652d10a3ffe8d44df1012a3ddc4e1c518d49019f7c5d3d9f95ed93a319746d1e543ffa69edb49bb3439f8a325ac6a0cb4edd65ba60080a0447c674faa72d8aebdb5d2544f2f2d847c72c2dfa6057a690adc5c441a\",\n        \"signed\": \"185ef2246aba2b1a568032c7df93c667799b8a521a6f97321ead5866b4cb9c65b64a1c40b9b6a910e742dc32a7e66d11ea45dbeaacae9f09511b8101f8af0c0cd2802f1596f8383b64edbdc594060bff0e7013d5b7c85d830fae11aeb34dd594959da624e044474c5409c0059673bdc61a671ef5b0b8a26f30100b3b73968d8e4d83a72f25b513448d2f6b6a4475fdf89e31ca9268a30705af3f649e3fe01dde0cf4b29ec2da5436444af091d62730acd4cab608f0df26f088c6b9b9673794f0747dab2ce190f90592009fdce5464b3661b7e8620bad65509a6c752b727a8dc8d3efa584fde0272c451d65a93bece4f59d87dc6fbeb451401e3e2e003c6aca7b3d3f92719150c6778f015aff2a59bfbf2e91b21b0ad6877536eb54567059f587f54d4e2a6fe1fdcdd6a7fdcb8515575bcc3705d77859352fa0b044166e3c318846a5df33563003cb20bc942d30391093e8d583e8e64dec570ee1c4138762f6483898d32e2032bde9bbe07ec2c3eb47d96876f0fc0f024d753ceb34ff8480b4cf576230bb8263dd80eeac662eba31d8a61f309e175f4c0143e28a852b1c3061ce78efbd16a2873dd28198a46ec0a800b30dc8a93b8dbb81a730de450b864dea7680e509d800e82329c261b07e72aa80ee16ec375ddbbb6fe3d8d47b0e3c5a9f23c4d20b724c1df59835d830dd22d10403d8f15c102c4b3769c41666c3ab8c7e80b940d0bbb58652d10a3ffe8d44df1012a3ddc4e1c518d49019f7c5d3d9f95ed93a319746d1e543ffa69edb49bb3439f8a325ac6a0cb4edd65ba60080a0447c674faa72d8aebdb5d2544f2f2d847c72c2dfa6057a690adc5c441a\",\n        \"signature\": \"185ef2246aba2b1a568032c7df93c667799b8a521a6f97321ead5866b4cb9c65b64a1c40b9b6a910e742dc32a7e66d11ea45dbeaacae9f09511b8101f8af0c0c\"\n    },\n    {\n        \"secret_key\": \"82a2c6493f11ba80e4b8b3b43841be970e2a10a94d2249d8ac6f5414cf5a3cb5\",\n        \"public_key\": \"4c2ee01cdea07db3635f5d4c1082b92f298deb17d0f905df71b66fb2274eae99\",\n        \"message\": \"09854d13684950419e0bb16464e09988905c0217183aa1e48adb147bfcc2eb57c2300b0dfc39d4896655a57ae20415408bb5f2c238013955f0a4fc782e0c993fe42cb08cd8cf415ccbd6cf1cee2e8097f04e8f09ae5da5f415b16c2cb30cb2ab6652ba50ebbcae4a59e31fe11e7ef3699ca90aafa586bb242c89cd2e332b2bfa2f8142accaf436f89b6453bb4805a1e7f3ab6270f0daf89389e717d1b70175ec5707c8f512c40ab924c457e9f0914791750dc292bb27d6f63ba8ccf54b90d3eba7f19eb300d9eb8f3b72032ba93037f552b409b580a5f65116faffe0fdfdc6db3881386c3cbc16b67eb25763d7ae3aac0b85aa1e9aa22e4959609d4381e4b6d7159ff3e3b2d37b640f88cfbe4f8a77f8016457228ba6d3af5c4e33125d48bcfcf3678c163b698e52e85617ab1a75ff20c690ab07155ee757598578072d4a09dfc6c6c094ec048567d513ce2b1834e163df1545319d8061e0e57f58ef041b7bffc4966ac1660331b97abbc97be21ae2bc58c6c3274a8adad5fd2c3bc16b92e1f8de877b6a26f0c6ab7162e8aab93af8d85918c13d3e235a273748c62f0d22cb1c93e134a495b1b5ef8f1a1134512d53b7a211263177f7a60bdf474691f224a3b5bac4006db345ca6725f5ee703eca0dea10d712676f63ef3e537e63abd2608cb4fbe200e15f18209153496072908044c95a4e9c5356aae8ed5f0959eac091e227a0b81f5803276b3b3bf4b6865a55fc6782f62ea6d63990f9befe01\",\n        \"signed\": \"68a91d4f8d241c1defbd5ca9e9e1ed8274419506751c967947b10d50118bbfabc765ffd7b31a0167c4fd8b1175332412df19d8aa1a909590861320923dbcb20409854d13684950419e0bb16464e09988905c0217183aa1e48adb147bfcc2eb57c2300b0dfc39d4896655a57ae20415408bb5f2c238013955f0a4fc782e0c993fe42cb08cd8cf415ccbd6cf1cee2e8097f04e8f09ae5da5f415b16c2cb30cb2ab6652ba50ebbcae4a59e31fe11e7ef3699ca90aafa586bb242c89cd2e332b2bfa2f8142accaf436f89b6453bb4805a1e7f3ab6270f0daf89389e717d1b70175ec5707c8f512c40ab924c457e9f0914791750dc292bb27d6f63ba8ccf54b90d3eba7f19eb300d9eb8f3b72032ba93037f552b409b580a5f65116faffe0fdfdc6db3881386c3cbc16b67eb25763d7ae3aac0b85aa1e9aa22e4959609d4381e4b6d7159ff3e3b2d37b640f88cfbe4f8a77f8016457228ba6d3af5c4e33125d48bcfcf3678c163b698e52e85617ab1a75ff20c690ab07155ee757598578072d4a09dfc6c6c094ec048567d513ce2b1834e163df1545319d8061e0e57f58ef041b7bffc4966ac1660331b97abbc97be21ae2bc58c6c3274a8adad5fd2c3bc16b92e1f8de877b6a26f0c6ab7162e8aab93af8d85918c13d3e235a273748c62f0d22cb1c93e134a495b1b5ef8f1a1134512d53b7a211263177f7a60bdf474691f224a3b5bac4006db345ca6725f5ee703eca0dea10d712676f63ef3e537e63abd2608cb4fbe200e15f18209153496072908044c95a4e9c5356aae8ed5f0959eac091e227a0b81f5803276b3b3bf4b6865a55fc6782f62ea6d63990f9befe01\",\n        \"signature\": \"68a91d4f8d241c1defbd5ca9e9e1ed8274419506751c967947b10d50118bbfabc765ffd7b31a0167c4fd8b1175332412df19d8aa1a909590861320923dbcb204\"\n    },\n    {\n        \"secret_key\": \"e55b343a0fa1fb747189cb00dbc3a6aa2dcf5b86e57d7693f307420389761153\",\n        \"public_key\": \"23a14460ea983cf997c782eb4582ab3c8aa6dde53325b977b78e33d2dc5f27aa\",\n        \"message\": \"36289b5eaff2a85a7c6d575bd15ea594b2fd8510874a469b52109163696d85b68c5b211d2964efdc66e625abe8aafe4cd9220cdb341107ffa8276ed4b370fe376c1482687167dbc8f7b205a3f3301a1664d9072877d9f98b8f69831301df9994717fc88969242391d9b0517d6efb271701eab3f4a9b1204213e8cd13f9d099048b8207562f2e4ebc653cc65e9d5512d65b41022c79b4eb37298769aeaa6efed69e9a8cb445c7012274de62f509f4e4814adcbf4453b4fab85d7c8fd845e00830ef5b7b1e63c67613984caefe915a548e18e505622cb2b39299f427f4d83983ba2aa00d53bee1f59aec8318c5ea345d294252369792762add3e56fcfa6e7797f028c799479045edb2e205eb6dd6ca04eee56f9496d2bf26099357c973835b9936024911e4655d3e22c811c8d4dbd1b04f78973f077523a389b6f28f6f54216142cb93e33d72b4a5052d27e4911e41e6cec7bebe1b0a5113e6b70b479d2abeedf69b7564e5a573b352d16cec890701bb383d3f6656eda0892f8ccc70940f62dbe528a65e31ac538826c138ac66524e331637ba2d37730358e6c732cff8fee940afd22c39ae381e5d8826739b23fdc1b80aea5a62a2cf0ff1525e446cf31046195051d58503eed1befd793eeae1d5d1b62a5c9845157a095cdc08a1d77ba47e84a5a739980f0f5be7aaec9a215b204b4bb7cb1b386ded58d7aaf7285341907c63336ee3e6ef077ad111b974e7504bd989f566fda1b1b59abaa91c78bb40\",\n        \"signed\": \"07266c18650ecf0632e225624ec4c97fc387dc374687a61956dccce72894ee138aabc80cfc90c9eea6dd4c59af4502ee29635a92880786678b14a3931a69f90736289b5eaff2a85a7c6d575bd15ea594b2fd8510874a469b52109163696d85b68c5b211d2964efdc66e625abe8aafe4cd9220cdb341107ffa8276ed4b370fe376c1482687167dbc8f7b205a3f3301a1664d9072877d9f98b8f69831301df9994717fc88969242391d9b0517d6efb271701eab3f4a9b1204213e8cd13f9d099048b8207562f2e4ebc653cc65e9d5512d65b41022c79b4eb37298769aeaa6efed69e9a8cb445c7012274de62f509f4e4814adcbf4453b4fab85d7c8fd845e00830ef5b7b1e63c67613984caefe915a548e18e505622cb2b39299f427f4d83983ba2aa00d53bee1f59aec8318c5ea345d294252369792762add3e56fcfa6e7797f028c799479045edb2e205eb6dd6ca04eee56f9496d2bf26099357c973835b9936024911e4655d3e22c811c8d4dbd1b04f78973f077523a389b6f28f6f54216142cb93e33d72b4a5052d27e4911e41e6cec7bebe1b0a5113e6b70b479d2abeedf69b7564e5a573b352d16cec890701bb383d3f6656eda0892f8ccc70940f62dbe528a65e31ac538826c138ac66524e331637ba2d37730358e6c732cff8fee940afd22c39ae381e5d8826739b23fdc1b80aea5a62a2cf0ff1525e446cf31046195051d58503eed1befd793eeae1d5d1b62a5c9845157a095cdc08a1d77ba47e84a5a739980f0f5be7aaec9a215b204b4bb7cb1b386ded58d7aaf7285341907c63336ee3e6ef077ad111b974e7504bd989f566fda1b1b59abaa91c78bb40\",\n        \"signature\": \"07266c18650ecf0632e225624ec4c97fc387dc374687a61956dccce72894ee138aabc80cfc90c9eea6dd4c59af4502ee29635a92880786678b14a3931a69f907\"\n    },\n    {\n        \"secret_key\": \"3973038fa2ef6a278d3c1cff9a225669e465a69d0750503de748c002dbf9278a\",\n        \"public_key\": \"c75e77c78149d9d2dbc263ddf8ac4d654d1ff455cb1897e1c3ce31b94cfe3210\",\n        \"message\": \"3392e02f3c84661eaf81a5ff04357f212e92361c5c220739d96b4d3d9c22d18df48be6b55126f581601ffe0da63f38e19cbb12726ca0a6aa325567a003a7849d06783992eb9eb92853297d7228dba980b250bb110f63d0b84670e5ecb319cbfd61278f1f4cabf1fcb3f701f12f6ef8d3cc4282fcbe589eb5659503a2ddd8bba38e5eff092dfaf539fd804f21f73a90adf569a00bf9d25a9ad3a63309cc6093142471a478f0b8992286de023c68efd49987ec270bd946f6db48f684f1c2adeee26d68dce95a55e4cb27bc60523080df6ba2b199996b1f1da6920d1559f79bfde9fa1a02deae1480c76f947f9d213fc43bb2880a1b4d03bb14f5b044a0fd83ce0492f49ca3af25211b86faa5735ad7feaf31a1a7491e708b41829d68e32414f68352b71d1cd23c8e12fb02da711484f6ef97528a00d24fcf91d4e06e9badae9a44dbdb3f778041768d863704d736810400e7f2931efb85c8724a593426aa2af1ec5b664f85c2254896fdcf316db0924e11aae8d683e9a021929d0a9d6fecb4594b1b3fbc16b176d29d1efb1819a4a423fbe0ca0559c57e9e5449f14bce91360dafda6a427ce4a0993dd03082ddee066533f6d3bda5660f42fd7757690d670598ec7096f475a01a519950341a831fc9a281c0947a863f1f6e03bba774de77adc23fbe525cae6ccce47a0ec4979e8bec86f332fc6a5736e3b98fb332e9e8244e68a100455e6499ba8dbae98b92ba3d9c6b4ff980343e4c8ef4d5a4aacf8b1a\",\n        \"signed\": \"fc0c5453839ea99296fffa501d58366628df89f616766942d5040a056056dab18b4405c04abf9059c30868d79c936cccc84c4fbd6fd30b60f8bcbd7a664042023392e02f3c84661eaf81a5ff04357f212e92361c5c220739d96b4d3d9c22d18df48be6b55126f581601ffe0da63f38e19cbb12726ca0a6aa325567a003a7849d06783992eb9eb92853297d7228dba980b250bb110f63d0b84670e5ecb319cbfd61278f1f4cabf1fcb3f701f12f6ef8d3cc4282fcbe589eb5659503a2ddd8bba38e5eff092dfaf539fd804f21f73a90adf569a00bf9d25a9ad3a63309cc6093142471a478f0b8992286de023c68efd49987ec270bd946f6db48f684f1c2adeee26d68dce95a55e4cb27bc60523080df6ba2b199996b1f1da6920d1559f79bfde9fa1a02deae1480c76f947f9d213fc43bb2880a1b4d03bb14f5b044a0fd83ce0492f49ca3af25211b86faa5735ad7feaf31a1a7491e708b41829d68e32414f68352b71d1cd23c8e12fb02da711484f6ef97528a00d24fcf91d4e06e9badae9a44dbdb3f778041768d863704d736810400e7f2931efb85c8724a593426aa2af1ec5b664f85c2254896fdcf316db0924e11aae8d683e9a021929d0a9d6fecb4594b1b3fbc16b176d29d1efb1819a4a423fbe0ca0559c57e9e5449f14bce91360dafda6a427ce4a0993dd03082ddee066533f6d3bda5660f42fd7757690d670598ec7096f475a01a519950341a831fc9a281c0947a863f1f6e03bba774de77adc23fbe525cae6ccce47a0ec4979e8bec86f332fc6a5736e3b98fb332e9e8244e68a100455e6499ba8dbae98b92ba3d9c6b4ff980343e4c8ef4d5a4aacf8b1a\",\n        \"signature\": \"fc0c5453839ea99296fffa501d58366628df89f616766942d5040a056056dab18b4405c04abf9059c30868d79c936cccc84c4fbd6fd30b60f8bcbd7a66404202\"\n    },\n    {\n        \"secret_key\": \"c71cc10ad2d443e025ad0625686b123503e590193a2bc8cc57a7b9b4158de6cb\",\n        \"public_key\": \"fc06acaab53ad08e9762dd11cd2122b31599bd2598ce6f248795e732219c2fc7\",\n        \"message\": \"2e0846536dc6cce19ccf82dc2d0cd21bd4e1ca7bc317067af8d90ee4818c8518bc3ef960ce112a41d2b9979a282ae13d706a005e0034f06b39ff4b0a5afaed70b561bcceb1bbd2ec19f97448eaed4be620e36a962d878c6f80172b9fad43eed07ff93db9b9ca2262d5a3c229c54e30a45e73660892f048e363f37144ed1921f72992b4d01529870cfe373b7e7cbedaf969269fb70aa783d1e74417c7bae0fe03d951fdb8c71c62e9be7fdd5d233e39f46fed057e49b6f34068459148da3d424161ad2c869508602e9c0bb30bfb88acd5f4dfdffd473503cdfedabc4442b743be075e7c6f610e64ffc2e53187745cd719658fc6e62a5be518437c5bd6a4feba94ae3f44f2f29308e831feefed676909ce5e80c84cbdcac47e47d27c9712a01f6bc5daedc02e6414407e911c0a5a53e5328a5a5fd9f040aa7fb70b79b31cd1b6fd9bd5029040bd22ae222fd2f6870d07f435322639cf3193ca5709b882b07a58f952a9963e568f8c5a584a6b9e275c5c07957a4d2cdaa9f1eb444ed1224bac6563b2f9273e80301d44d50ae383b597213b00da5bf27e5d1fe240cc3bb65aa5030d651b6b5b31761d53ce0c6d74a15dad5479f31c915ccf446659853b89a51a28ee8976853553fd2e02fe7243538d00b4ed07d8b8a80b5c165cd46341ffd8163c555702663a4e6ab2952b7e7443d0f6b123b6946721aa63e87b1155eca8a6a1bc9fd25c6762e52742c86bca1ba9d8370415244f0edfdbe0932b5ca0611509c9\",\n        \"signed\": \"2eb33bc2d5deb7f3a2dcc377b0c6a862134bf3191ec40fc128ac28abf2316ef1401649b8f4cfa1a936de79b532dc043b6d36024b4c37bba29290ac9f449ba60d2e0846536dc6cce19ccf82dc2d0cd21bd4e1ca7bc317067af8d90ee4818c8518bc3ef960ce112a41d2b9979a282ae13d706a005e0034f06b39ff4b0a5afaed70b561bcceb1bbd2ec19f97448eaed4be620e36a962d878c6f80172b9fad43eed07ff93db9b9ca2262d5a3c229c54e30a45e73660892f048e363f37144ed1921f72992b4d01529870cfe373b7e7cbedaf969269fb70aa783d1e74417c7bae0fe03d951fdb8c71c62e9be7fdd5d233e39f46fed057e49b6f34068459148da3d424161ad2c869508602e9c0bb30bfb88acd5f4dfdffd473503cdfedabc4442b743be075e7c6f610e64ffc2e53187745cd719658fc6e62a5be518437c5bd6a4feba94ae3f44f2f29308e831feefed676909ce5e80c84cbdcac47e47d27c9712a01f6bc5daedc02e6414407e911c0a5a53e5328a5a5fd9f040aa7fb70b79b31cd1b6fd9bd5029040bd22ae222fd2f6870d07f435322639cf3193ca5709b882b07a58f952a9963e568f8c5a584a6b9e275c5c07957a4d2cdaa9f1eb444ed1224bac6563b2f9273e80301d44d50ae383b597213b00da5bf27e5d1fe240cc3bb65aa5030d651b6b5b31761d53ce0c6d74a15dad5479f31c915ccf446659853b89a51a28ee8976853553fd2e02fe7243538d00b4ed07d8b8a80b5c165cd46341ffd8163c555702663a4e6ab2952b7e7443d0f6b123b6946721aa63e87b1155eca8a6a1bc9fd25c6762e52742c86bca1ba9d8370415244f0edfdbe0932b5ca0611509c9\",\n        \"signature\": \"2eb33bc2d5deb7f3a2dcc377b0c6a862134bf3191ec40fc128ac28abf2316ef1401649b8f4cfa1a936de79b532dc043b6d36024b4c37bba29290ac9f449ba60d\"\n    },\n    {\n        \"secret_key\": \"0a4f5e1670f1e24bfa37b73c994330b36e7daaf930161b78a4a84866ff25e3d5\",\n        \"public_key\": \"9dcbba903981594c7b677ea8002001d664cff7ce8e5cfae58840cf74aff0d3a9\",\n        \"message\": \"f4b05b3efdcb1d5c07da950c46565528440bb48835ee4c13f43d7a1618de119ebbb259ea7480a5048174faecc1055b32dc01ac7156344321e8eba698f302ee1643b5f04b8e7ecca63b91561ce3514abe7851b6fb17fc943bdc94da308c8e4769fec20fadf4fa8e7f62b6ffb5f170d644ed29355ebd22cb3aa1486b1e367c729dd3f79bcd40ffd08af28cebc8d776e1a483e911d79bc613e09cc621cadeb034dd6f72374771985127f7a3a1aa786a523ae6e34ee433dc30c375987cff50bdcbc997fcd51c94567a67aefb6ef5edf9bdd65964d464be9ebdfb88c0e231b07ff6405c00f82531e961bfc5ead266bcc08718878cafb1d37536f183e48bf38d3f6be900252d1fb419e6a2ac5896039f63c31401fff932ce9814b085ab20416972a2b351c815a62de509674628b0d3566fc9c2e0a9237b93f9bbb2deedf02bff83bf6d868b6399326d4809d0419f31b2f3a481285b94078b47061ce91dad583dd5b13bd010fb30f2495bb70420183a930159e4db193df6acd124423e039a67f15688aec50c5927fb271822aaa66f294bc805d3bc7c8341878a541009f30da99fcc0085079ce7fc55e0011685562abdb3a9471ffde6176300ef5b31e0df609a54a1ee6624070da99c8776891fdf6aa78b4d55b1f5dadfc061add5af00fd3adedb448c559bfff204068043a5d1d6214748628c3ebc5f0224326ca18ef048425da9300133fb695d4f263165ac22f3619d405af271a71a9afb198bf631241d3459b95398\",\n        \"signed\": \"dcf353b2b99a4ef45f3fdf6528632e8abdc433342476a8c2b37900404a4e333d387814235757ef7ad03858a0f35d4615e8aba484fd64f1112ec1b1aed2cb640ef4b05b3efdcb1d5c07da950c46565528440bb48835ee4c13f43d7a1618de119ebbb259ea7480a5048174faecc1055b32dc01ac7156344321e8eba698f302ee1643b5f04b8e7ecca63b91561ce3514abe7851b6fb17fc943bdc94da308c8e4769fec20fadf4fa8e7f62b6ffb5f170d644ed29355ebd22cb3aa1486b1e367c729dd3f79bcd40ffd08af28cebc8d776e1a483e911d79bc613e09cc621cadeb034dd6f72374771985127f7a3a1aa786a523ae6e34ee433dc30c375987cff50bdcbc997fcd51c94567a67aefb6ef5edf9bdd65964d464be9ebdfb88c0e231b07ff6405c00f82531e961bfc5ead266bcc08718878cafb1d37536f183e48bf38d3f6be900252d1fb419e6a2ac5896039f63c31401fff932ce9814b085ab20416972a2b351c815a62de509674628b0d3566fc9c2e0a9237b93f9bbb2deedf02bff83bf6d868b6399326d4809d0419f31b2f3a481285b94078b47061ce91dad583dd5b13bd010fb30f2495bb70420183a930159e4db193df6acd124423e039a67f15688aec50c5927fb271822aaa66f294bc805d3bc7c8341878a541009f30da99fcc0085079ce7fc55e0011685562abdb3a9471ffde6176300ef5b31e0df609a54a1ee6624070da99c8776891fdf6aa78b4d55b1f5dadfc061add5af00fd3adedb448c559bfff204068043a5d1d6214748628c3ebc5f0224326ca18ef048425da9300133fb695d4f263165ac22f3619d405af271a71a9afb198bf631241d3459b95398\",\n        \"signature\": \"dcf353b2b99a4ef45f3fdf6528632e8abdc433342476a8c2b37900404a4e333d387814235757ef7ad03858a0f35d4615e8aba484fd64f1112ec1b1aed2cb640e\"\n    },\n    {\n        \"secret_key\": \"b855c81805c7087410e69f96b0240271dc76c1e4ade38c6a9278e3c94fbea256\",\n        \"public_key\": \"6adb025a40260f569884b8cab3752b4f255c373e2b424b6287ebb510fa06fff0\",\n        \"message\": \"85a9bdb70a6c752897e43a91106ee9a99c2ca94ff7b4461a44a39174c17ecd99df46eecd81c3f52513dc9d547dad3721c6d5ee1f8fac0ba5afb3687044739ed535b844008704c09fe1e5d785d4c9c3d0b05889b9c20fc3fd68df12dbeb2c34f6f7ec1c6fb7fa811ff846b5a61fa5fe55379ee63abcd373fed00254ebd06bc8b22f7fbf2f727a5fad88514159e26d78dfdb0957f6efaf51a8e80b585e838b9621d051074a4f5867b4ae2f2ff6d62b85bccec0b4aaa4791637388c0901fd49dcccce7204859f81eefc639fed92280456e69a1509b4b1bd7624447d862c45a0c8b0c5bb2c4ca512cbc037f51b780982b183a5cafa15297585c947a25be8c2240ebfb6868ece5ea2aab2c239c83754c7d594b3725aceef344ba7e6aef49f7f313b0ae82ccacad387a6e9337f05f8c799efe7829b27b4d5b201fd5ae5834351690759f3ea175fd4741be228d807fb54df4a741038faee47edf1f561652598601f27155fc50d9d5011433711c106d4b60785a5cc93b3fdd1dad70c0c8eaa33f1512e35a541745e376c15167fa8f6b3b2c4c3a366fc41497d297357816ae795a804c980e7cbfb0c74d8835d929ae3bb52bab12964566d746bd2c1d132b6233fa34f75e268edee775eb3ce132e6beb2e8d71f0c8762991cde4e26f71439dfa83978f995603861bc0b1d9060bbccaccf86f8745ad96994d5d007d52e83aa5e69412964bdbfbe4780aaa8de41be1298abbe9894c0d57e97fcacc2f9bbd6315d3fcd0eaf82a\",\n        \"signed\": \"3caa813273e753542ffbfeb21bc3e2cf8ca7d920faac7c49dc2aa9911768c7ad43b38b0236db27f3eeae0b1206001e665a607078c522ed7a9dc468853463590085a9bdb70a6c752897e43a91106ee9a99c2ca94ff7b4461a44a39174c17ecd99df46eecd81c3f52513dc9d547dad3721c6d5ee1f8fac0ba5afb3687044739ed535b844008704c09fe1e5d785d4c9c3d0b05889b9c20fc3fd68df12dbeb2c34f6f7ec1c6fb7fa811ff846b5a61fa5fe55379ee63abcd373fed00254ebd06bc8b22f7fbf2f727a5fad88514159e26d78dfdb0957f6efaf51a8e80b585e838b9621d051074a4f5867b4ae2f2ff6d62b85bccec0b4aaa4791637388c0901fd49dcccce7204859f81eefc639fed92280456e69a1509b4b1bd7624447d862c45a0c8b0c5bb2c4ca512cbc037f51b780982b183a5cafa15297585c947a25be8c2240ebfb6868ece5ea2aab2c239c83754c7d594b3725aceef344ba7e6aef49f7f313b0ae82ccacad387a6e9337f05f8c799efe7829b27b4d5b201fd5ae5834351690759f3ea175fd4741be228d807fb54df4a741038faee47edf1f561652598601f27155fc50d9d5011433711c106d4b60785a5cc93b3fdd1dad70c0c8eaa33f1512e35a541745e376c15167fa8f6b3b2c4c3a366fc41497d297357816ae795a804c980e7cbfb0c74d8835d929ae3bb52bab12964566d746bd2c1d132b6233fa34f75e268edee775eb3ce132e6beb2e8d71f0c8762991cde4e26f71439dfa83978f995603861bc0b1d9060bbccaccf86f8745ad96994d5d007d52e83aa5e69412964bdbfbe4780aaa8de41be1298abbe9894c0d57e97fcacc2f9bbd6315d3fcd0eaf82a\",\n        \"signature\": \"3caa813273e753542ffbfeb21bc3e2cf8ca7d920faac7c49dc2aa9911768c7ad43b38b0236db27f3eeae0b1206001e665a607078c522ed7a9dc4688534635900\"\n    },\n    {\n        \"secret_key\": \"95b9c8a6ef80ebd5cbd47a04ca54387373df4d67a2b475597765ac89fcf93e93\",\n        \"public_key\": \"f2c947b18adc3ea6a23f7abca364b9853ae85a2b0c8c26f0d3173c2732c3c7ff\",\n        \"message\": \"7855bc392630ccf531d3061606ddfc81a0fd9294c54791b5f9559b6827254aa1f25c540b7d7df3ec9cdf14256629dbcf9b725feb3412ebf35f0ef9379e4131cc77e0f0fb6f7459a738361a99ae4ccb2b60a99fe92bd6c3a53d6f454ee9005bcec5aedcfa82347392efcf1175e578396a8d800daba0f4c2cf4d4913b0528620e3baa0f6d86e0628e47c0ca26df3b0c788c4e16557f7fc28df820c12fbb6ffbfecb9829ddb65ef8d63e90d68fc7194b5b885913f08edee84567647ffa3f0d0d325d082600ce71a2345c77d65bd96252003e5c125a718a07370c31b5708075cf1837c6925635cc68dd1b751e40ab608b0d9d8852c18d3069219ef807b76d288f92c29a93e3d75b5b2e53681671d3ae0145ac03ccad3162e44703b0401d3eb167cd8ddc1e1a5a326b728b1e0c00a94d86de61352a661e40897175d28d341e4d1d9962e35f4de18a54017611ad05359ce08b97bfedbfbe3992ed58ed40f517aab01c0fefe8b63643da1a454152730bf99af8740adf98a77b8d73adb08e609e00ce9b1ccdfef3e9a9b05aa56e0bc79b6bbba80dd8e461af7cb202892d89b2d05a4458ab3fa54b474b8f8f581795d6c2739e59d0fe062400bae2d2d534b340bb8e2615777a9a5615bb2cf437ba525e00e7038f22a57882ac520b333e75c3c92a8b9f0e37f671c94b15dd8182a08d7c143e94e9262b3cc5544c294f5f335c2b28ac119fea00f9634db063993988b5f150579c7cc25b6a1fb0dde94804fa6ef66ff79fb9107\",\n        \"signed\": \"2c8bf543e2a3e00415ee4f107b2f5a6687176f5d521117759ceb561751bcc77d9b08a6a631f6447cd901de96699aebb168bf97500dc54a0543ef14e4b5a081067855bc392630ccf531d3061606ddfc81a0fd9294c54791b5f9559b6827254aa1f25c540b7d7df3ec9cdf14256629dbcf9b725feb3412ebf35f0ef9379e4131cc77e0f0fb6f7459a738361a99ae4ccb2b60a99fe92bd6c3a53d6f454ee9005bcec5aedcfa82347392efcf1175e578396a8d800daba0f4c2cf4d4913b0528620e3baa0f6d86e0628e47c0ca26df3b0c788c4e16557f7fc28df820c12fbb6ffbfecb9829ddb65ef8d63e90d68fc7194b5b885913f08edee84567647ffa3f0d0d325d082600ce71a2345c77d65bd96252003e5c125a718a07370c31b5708075cf1837c6925635cc68dd1b751e40ab608b0d9d8852c18d3069219ef807b76d288f92c29a93e3d75b5b2e53681671d3ae0145ac03ccad3162e44703b0401d3eb167cd8ddc1e1a5a326b728b1e0c00a94d86de61352a661e40897175d28d341e4d1d9962e35f4de18a54017611ad05359ce08b97bfedbfbe3992ed58ed40f517aab01c0fefe8b63643da1a454152730bf99af8740adf98a77b8d73adb08e609e00ce9b1ccdfef3e9a9b05aa56e0bc79b6bbba80dd8e461af7cb202892d89b2d05a4458ab3fa54b474b8f8f581795d6c2739e59d0fe062400bae2d2d534b340bb8e2615777a9a5615bb2cf437ba525e00e7038f22a57882ac520b333e75c3c92a8b9f0e37f671c94b15dd8182a08d7c143e94e9262b3cc5544c294f5f335c2b28ac119fea00f9634db063993988b5f150579c7cc25b6a1fb0dde94804fa6ef66ff79fb9107\",\n        \"signature\": \"2c8bf543e2a3e00415ee4f107b2f5a6687176f5d521117759ceb561751bcc77d9b08a6a631f6447cd901de96699aebb168bf97500dc54a0543ef14e4b5a08106\"\n    },\n    {\n        \"secret_key\": \"b786ccfb586d43b8c46bb97b96c918731bc2cc119277f123671e30148158d2ed\",\n        \"public_key\": \"90c7004600f3dce409fdeadc8ed018f9ea263f75160a74ab54f4c2399a90ca78\",\n        \"message\": \"babf48bd55ea91bd0c93b970241b529d9db43d4927fea5f1a1f7082dd6cb50a52b094b3129fcd903a44fec8bfdb5c86c002a2a452887ca25a60eceb5e1f9f5c93dc59423c7afe747c6bf407cacadeccf5d787970cb0617bb3cfe7fd17563d3a0dc91631f71b84be24ae800113750f031d01fd05364b4f27f86f8dc3ad7407e1ae9e768154e3dde58e867129e2474547b408217964844858d056b31c374991b7f161f52f088b806e0f313d68a15c5401ed55b2b77deea586cb054dcd71af2ab6ab11e84b30c539345de3eb43fb7b3a3b48987c3bfa70655d599f2e31d12ad23cc96e86d380bfda812feff3dd3024292916907022891e119bfc3ed9c25546cd19fc992d8a61e6059ca3ce7802af1118756620b87a7242bd83897c94dd5a36ed40fc0f34c2c93110b37d17dd96a22062590bcdb546742ef7218adccc5ad28f4fce6ecf705835f4113d82ea533903aec8c3820fe4b4715f37e20cebc1e71519aa0b240b4840aa4fdcfb52467fedd8f4d1f9bc33ee114f3ef85f5fdb09ca884af388ad3adf84c793f386efe6ff8a46ed81e5d45a37c25cd80f2d7363f43ae45e3772c0df89f11447939806c096ef933a13944f0890d887c2e5bbb6b12ea950b09b8fe425289377352f35f84cc4dcd4d7a449489fa9251c03113489225809cdf3cb63475f10d341709371c6fd4bb7a949483d1bc2b31ddf4d963a07de7ea5c3fee9a0e33f0769f2faa40612a546974bde0b7339179e4124a447bd42879ccda5c8ad1819c53\",\n        \"signed\": \"52ba9658a1a0b3e98ed5209e393e420066a37d3714daa73d5c671d33075a5f5727fe4e081ee0fa3c2133dc953a2da620291371f00ccb57d8792eb596a2ff8101babf48bd55ea91bd0c93b970241b529d9db43d4927fea5f1a1f7082dd6cb50a52b094b3129fcd903a44fec8bfdb5c86c002a2a452887ca25a60eceb5e1f9f5c93dc59423c7afe747c6bf407cacadeccf5d787970cb0617bb3cfe7fd17563d3a0dc91631f71b84be24ae800113750f031d01fd05364b4f27f86f8dc3ad7407e1ae9e768154e3dde58e867129e2474547b408217964844858d056b31c374991b7f161f52f088b806e0f313d68a15c5401ed55b2b77deea586cb054dcd71af2ab6ab11e84b30c539345de3eb43fb7b3a3b48987c3bfa70655d599f2e31d12ad23cc96e86d380bfda812feff3dd3024292916907022891e119bfc3ed9c25546cd19fc992d8a61e6059ca3ce7802af1118756620b87a7242bd83897c94dd5a36ed40fc0f34c2c93110b37d17dd96a22062590bcdb546742ef7218adccc5ad28f4fce6ecf705835f4113d82ea533903aec8c3820fe4b4715f37e20cebc1e71519aa0b240b4840aa4fdcfb52467fedd8f4d1f9bc33ee114f3ef85f5fdb09ca884af388ad3adf84c793f386efe6ff8a46ed81e5d45a37c25cd80f2d7363f43ae45e3772c0df89f11447939806c096ef933a13944f0890d887c2e5bbb6b12ea950b09b8fe425289377352f35f84cc4dcd4d7a449489fa9251c03113489225809cdf3cb63475f10d341709371c6fd4bb7a949483d1bc2b31ddf4d963a07de7ea5c3fee9a0e33f0769f2faa40612a546974bde0b7339179e4124a447bd42879ccda5c8ad1819c53\",\n        \"signature\": \"52ba9658a1a0b3e98ed5209e393e420066a37d3714daa73d5c671d33075a5f5727fe4e081ee0fa3c2133dc953a2da620291371f00ccb57d8792eb596a2ff8101\"\n    },\n    {\n        \"secret_key\": \"dd1a9774f7584d8589b19f92ab6939ac485602fe1644cee2f6f3cd60fbd58400\",\n        \"public_key\": \"4bea7d0b0f4bd590f9e3579f0c5fa4cef4d60a49d2c437a0aaead9d43a73d4a3\",\n        \"message\": \"e5dc3ed26c1f693cf852465a05e3048b505db5116d9e31592205a9c3d4720bc10b6c20639a0ee2f0e147225b5b19ea511cfba0c21aac10715a2f232f10c2c8aad41112b6b012e75a4155f8c6926253ca2b4ddb7bfe7f86e90a53dbc0cba89e485ceca8fd26e50c7f282a253573cb0a8fa88cc44623e82e8fa2edb6cbc7538ac92c11e4c5b1ea5f68966d15d93c34f396d27572f864382ab76a7be65a557b139766368a207d98bc0c20926370dea27048160363ed85f4099e7cd66d12d0988cfc9e2f16aa565f8f33b39e978c0587371f92db5056317564411bd8a3b6fea09d3487aaf734034918ffed1c9fba7bdec6fe68876fc7360cc5629b92104027fe5759c5ab365354751e7969116c3b9a21b152330a96a9381af730d17822d78ad6ea860006915b5cab447a759372e05d495ebb328e75d248daa02f5d2eb978d2710cf1c5fb824876770e32ca6de2c730564892415bcb53e5981d707add961c5f37fdafa1399af8aea960458d2ca310553f7c9866ccbe8e9d88e08a446872ea66fc308c824514b7dace0334db735e6f14c85b5e619a5d605648a881e876c78dbe0657233d4f7f3bfddf63b445311d6abc476347ec4fb43c8946f9d17c369381d1c564ffcfe2dc7b4726fd57387f0b44db8ef95a0b4e32a7bedf319e53a9e7126c2811f9829d1f4ae9abd9d5f42efef2075f47051c63a4f8202040ec4723686382c6033127c1fbfff4bc82373508752d431dc473f52ddeab0342dc4f5447f8f25738ef65d78556\",\n        \"signed\": \"1959bde0a697a63993ec47d158223739fe65871fa05870d7de0d38086591202a51b174d1c6182808c6ce62631d81dba34ebed4af2f29b06c00a57a3cb6663606e5dc3ed26c1f693cf852465a05e3048b505db5116d9e31592205a9c3d4720bc10b6c20639a0ee2f0e147225b5b19ea511cfba0c21aac10715a2f232f10c2c8aad41112b6b012e75a4155f8c6926253ca2b4ddb7bfe7f86e90a53dbc0cba89e485ceca8fd26e50c7f282a253573cb0a8fa88cc44623e82e8fa2edb6cbc7538ac92c11e4c5b1ea5f68966d15d93c34f396d27572f864382ab76a7be65a557b139766368a207d98bc0c20926370dea27048160363ed85f4099e7cd66d12d0988cfc9e2f16aa565f8f33b39e978c0587371f92db5056317564411bd8a3b6fea09d3487aaf734034918ffed1c9fba7bdec6fe68876fc7360cc5629b92104027fe5759c5ab365354751e7969116c3b9a21b152330a96a9381af730d17822d78ad6ea860006915b5cab447a759372e05d495ebb328e75d248daa02f5d2eb978d2710cf1c5fb824876770e32ca6de2c730564892415bcb53e5981d707add961c5f37fdafa1399af8aea960458d2ca310553f7c9866ccbe8e9d88e08a446872ea66fc308c824514b7dace0334db735e6f14c85b5e619a5d605648a881e876c78dbe0657233d4f7f3bfddf63b445311d6abc476347ec4fb43c8946f9d17c369381d1c564ffcfe2dc7b4726fd57387f0b44db8ef95a0b4e32a7bedf319e53a9e7126c2811f9829d1f4ae9abd9d5f42efef2075f47051c63a4f8202040ec4723686382c6033127c1fbfff4bc82373508752d431dc473f52ddeab0342dc4f5447f8f25738ef65d78556\",\n        \"signature\": \"1959bde0a697a63993ec47d158223739fe65871fa05870d7de0d38086591202a51b174d1c6182808c6ce62631d81dba34ebed4af2f29b06c00a57a3cb6663606\"\n    },\n    {\n        \"secret_key\": \"66f5ea8cdb95ee1a75e32467d7c83c59447742c85ddd499c43c08673e149053a\",\n        \"public_key\": \"a8ad04b9c144b97fe867374d4fe57d7ec0c249183e43bdfb5d52644e7fbe1df3\",\n        \"message\": \"c0d01dceb0a2d17191101879abb093fb077571b521be7b93a117c696c0872f70ea1139ab628329ee5655fc0aa77e8111d2fc884748c1f267b9eb09dc26f57fc402d61ba36f63f4d589aae63c76eeee15bf0f9e2dcde4e4e3e78fc6c29e3a93f3ff0e9a6e0b356645953890debf62dbeaf4905178d4f0a5a592c19294eeba7c21cf8f1bb3f4512187376de72f1136a48ac2dfaf32d0f37de064592592b6e1bc0c512cf4d2d85d16797853a80933b09c2f7bfb9e54a69e51a8e423a91c3e5fdeb4790533e87a4b1c0e0e23a9db9573ac17ab6ec7014d8b7c4486e15725f8d264eea3050e835ae0ac449db334502a6d97358fa859106ad0f6f4295f2344920adf9355a6949d8d145c25628a46a104ca099bd9dde941119c83820cdc2cb2d09722694901043c37cf0ae879be2030d0373158b9c4b0718298be45f630f6fcdc190f7b2926d87655a18bb797ac50757fcd3655c9e41d5163293d9a13d984f591f75b7e4e5cadb64c4c9fdfef76cab69381d0f60b483f804bb3b33364df8cffacb3c9b13ff4c8d8d4ea40766a7d42d8256c6b1c11c191daba1b8ef21593e47b18858ec19d817358678d8548ff1535d5fcf4414b6a11d34a3742f8d7149fa681383a9408887f1c0a98ed521e72793277824d6f746d49b63d444e312e6d9b986611258196a5b012b88faa29f9a6c67ed25df87b2dbf0dbd2dc3080c5b8d15a37d34729098ed0de92d75807429b2cae5d7283c4e5c9bd196d1ad436c7c34f3c9466e5cb3196b443f4b\",\n        \"signed\": \"ec5c7e8392fa8b61bc829681866e45ac8be4b5b7b6a822c1bcd0f2cc2c8c44c33cf83fa42d43a2f1884141b4a59aaff47f9be07e632e2018759324eac9d14900c0d01dceb0a2d17191101879abb093fb077571b521be7b93a117c696c0872f70ea1139ab628329ee5655fc0aa77e8111d2fc884748c1f267b9eb09dc26f57fc402d61ba36f63f4d589aae63c76eeee15bf0f9e2dcde4e4e3e78fc6c29e3a93f3ff0e9a6e0b356645953890debf62dbeaf4905178d4f0a5a592c19294eeba7c21cf8f1bb3f4512187376de72f1136a48ac2dfaf32d0f37de064592592b6e1bc0c512cf4d2d85d16797853a80933b09c2f7bfb9e54a69e51a8e423a91c3e5fdeb4790533e87a4b1c0e0e23a9db9573ac17ab6ec7014d8b7c4486e15725f8d264eea3050e835ae0ac449db334502a6d97358fa859106ad0f6f4295f2344920adf9355a6949d8d145c25628a46a104ca099bd9dde941119c83820cdc2cb2d09722694901043c37cf0ae879be2030d0373158b9c4b0718298be45f630f6fcdc190f7b2926d87655a18bb797ac50757fcd3655c9e41d5163293d9a13d984f591f75b7e4e5cadb64c4c9fdfef76cab69381d0f60b483f804bb3b33364df8cffacb3c9b13ff4c8d8d4ea40766a7d42d8256c6b1c11c191daba1b8ef21593e47b18858ec19d817358678d8548ff1535d5fcf4414b6a11d34a3742f8d7149fa681383a9408887f1c0a98ed521e72793277824d6f746d49b63d444e312e6d9b986611258196a5b012b88faa29f9a6c67ed25df87b2dbf0dbd2dc3080c5b8d15a37d34729098ed0de92d75807429b2cae5d7283c4e5c9bd196d1ad436c7c34f3c9466e5cb3196b443f4b\",\n        \"signature\": \"ec5c7e8392fa8b61bc829681866e45ac8be4b5b7b6a822c1bcd0f2cc2c8c44c33cf83fa42d43a2f1884141b4a59aaff47f9be07e632e2018759324eac9d14900\"\n    },\n    {\n        \"secret_key\": \"ed2558e5c56784bcfb4f4ddea3c0dfbef8d96ff1cabf158ec4abe60aff66999e\",\n        \"public_key\": \"1edc991012ac6f888fa7e6045777e9ba1d4c03c40292d2da6b722b4ad0a3ed74\",\n        \"message\": \"2c6433e9bfbf4cfd4e071f15ce6b129d780a4b3de014fac034e0d44ef772e2c8b0d6a3481d7b3ddeb237632673553313deac1efafe3702a7a4411e12bd341e8d8e96c59c5e30c36807a8385a538e9b66907d6a528400bd9f95eedc5216b28fd7437d8f4a029fdbdc7c938e4eb9812fec05ea693229629ace6acc7af6ba4c238e7722f312f7896b004922f7067ede106f8e70154d783fb41291f3c7e2e4826045b5741bcb4a8838f87a32e0049704e9b53234c224ff898a756e529134c1a9bf50fd029819b2238b60b2aec1128f34d21f9d66983bed398659d808b67a2e501b5a1f25f71f0f0c1eb2fea0ab42d82ff3bc9358bb20c27520c144cf2116f4a49cbc61994d2d710546694c4f602dc406e0b0c27e5f5e64667e95c2ec9df2d6529cf53622ea10b956b345ec55b6c39a1e6ed88ae66e5b457179425d1a849037b07c46cf5f363301095837ce811bff4960bf9cbd15201c1b6740bd70102140744c3327aca9d6d6d154936798ac381fa639db436ee8165667d538a6c74a233c124bf604fdad51984c4170b8200d2df73c29bb1e376affc314dde3e86af9d2c2e6c3a6524d321bce93e21fc965564faf77d0cd1accb4d7629485f564c79f4d8a2fdefb465454028c6dd1428042805370743363bb18476a3f2320db2589c72133cf5e29dafb7d07aa69a9b581bab5a83f403eef917afa14b764c39a13c0c5ea7019d2fdfbd7f3f7d40eb63b2a084da921895fe48f4fd594017f82569b467ab901169eb5da9c40171d5f\",\n        \"signed\": \"ab9e01166524fd288e5c689e56d730d4983000551030493334a3984e2223dc9f7a5b910c61760c6157990a4c335e348e3a7bc8223e09c10c5e520c8d61aff5002c6433e9bfbf4cfd4e071f15ce6b129d780a4b3de014fac034e0d44ef772e2c8b0d6a3481d7b3ddeb237632673553313deac1efafe3702a7a4411e12bd341e8d8e96c59c5e30c36807a8385a538e9b66907d6a528400bd9f95eedc5216b28fd7437d8f4a029fdbdc7c938e4eb9812fec05ea693229629ace6acc7af6ba4c238e7722f312f7896b004922f7067ede106f8e70154d783fb41291f3c7e2e4826045b5741bcb4a8838f87a32e0049704e9b53234c224ff898a756e529134c1a9bf50fd029819b2238b60b2aec1128f34d21f9d66983bed398659d808b67a2e501b5a1f25f71f0f0c1eb2fea0ab42d82ff3bc9358bb20c27520c144cf2116f4a49cbc61994d2d710546694c4f602dc406e0b0c27e5f5e64667e95c2ec9df2d6529cf53622ea10b956b345ec55b6c39a1e6ed88ae66e5b457179425d1a849037b07c46cf5f363301095837ce811bff4960bf9cbd15201c1b6740bd70102140744c3327aca9d6d6d154936798ac381fa639db436ee8165667d538a6c74a233c124bf604fdad51984c4170b8200d2df73c29bb1e376affc314dde3e86af9d2c2e6c3a6524d321bce93e21fc965564faf77d0cd1accb4d7629485f564c79f4d8a2fdefb465454028c6dd1428042805370743363bb18476a3f2320db2589c72133cf5e29dafb7d07aa69a9b581bab5a83f403eef917afa14b764c39a13c0c5ea7019d2fdfbd7f3f7d40eb63b2a084da921895fe48f4fd594017f82569b467ab901169eb5da9c40171d5f\",\n        \"signature\": \"ab9e01166524fd288e5c689e56d730d4983000551030493334a3984e2223dc9f7a5b910c61760c6157990a4c335e348e3a7bc8223e09c10c5e520c8d61aff500\"\n    },\n    {\n        \"secret_key\": \"b72798b811e2338431256d2480fe7a3663acecbbe6e6c1b9191e9d9a22447940\",\n        \"public_key\": \"ce491daad296b55727b09513df02ba5928a371737cd35841e5f735acab7c5df8\",\n        \"message\": \"a5d46298b0790610aedc0970fea2a7075081847266f22f12478b93d7e674c6c517f3c14ed061269d170ac31e2a64f9754a565bac1dd9757322c11132e7bbee5f32818e0e3063ab64e552d09b0fd1757639b9b9d1c770016b677465872b669dd48be038665751674dd2f40a966a26748fd3e5dbfd92265eb936f55b094286c010629904347cb4c526e377470aa96e8169a6f211633807a50030e7ff68e38911b3555e728ed8590b2dc45fea69945cc0c9a3d3e6c954b3e80106a5c91d3d22e89e8c0e1de902058e9cd0f8ce806eac4f893ee0429900fb5487b8fd36dbdcb34f2d54fc6cc74a923951b863da70f1b692bf0438484366cd85eeb880b279f8fca9d3242c558330f1ca57c6a58608cdbc0773e16082bca964ddc40347da8a36b2a9328c2f46609e092fd64b4134eee1d099813e1246489e8ee5b19b3d3b891c28f30b38b6a28ec1d3e9b005dec9c63f8b9813bc1de4aaf995f1779dded15c7a430d70ca46e7cafd4e9a543804446ab0807d64f255e201ef428a474dae8a0a75021b62ad3988ffb81cd8221b243085a0ad046fdc16c67f17b9f81820095953a5b98acbdf93ebcf80bc9c99af5fbffacb61a9251c5aafdb22b1129bfc60c98e0f175263bdf93dc9a08b8efc2e8cdaf0f83d6c49ec901645eac5a4ff63385a6f1af2071897662a372219c9301f545a2ebb8f5917db7f29ca13fc861af38d90c35c03ac9184c122e57b057cde426fd76dca79e25e64dbb41c8414a0450da4905b902ae98d2da4ba792801\",\n        \"signed\": \"dcfc6fd47799fec772c2099b3c6437246c3ad07229fc740e05311a206b18b02ecdb026c926f49c6552e347fd35dfde06cb639a797c50612f98e2478a92aaf609a5d46298b0790610aedc0970fea2a7075081847266f22f12478b93d7e674c6c517f3c14ed061269d170ac31e2a64f9754a565bac1dd9757322c11132e7bbee5f32818e0e3063ab64e552d09b0fd1757639b9b9d1c770016b677465872b669dd48be038665751674dd2f40a966a26748fd3e5dbfd92265eb936f55b094286c010629904347cb4c526e377470aa96e8169a6f211633807a50030e7ff68e38911b3555e728ed8590b2dc45fea69945cc0c9a3d3e6c954b3e80106a5c91d3d22e89e8c0e1de902058e9cd0f8ce806eac4f893ee0429900fb5487b8fd36dbdcb34f2d54fc6cc74a923951b863da70f1b692bf0438484366cd85eeb880b279f8fca9d3242c558330f1ca57c6a58608cdbc0773e16082bca964ddc40347da8a36b2a9328c2f46609e092fd64b4134eee1d099813e1246489e8ee5b19b3d3b891c28f30b38b6a28ec1d3e9b005dec9c63f8b9813bc1de4aaf995f1779dded15c7a430d70ca46e7cafd4e9a543804446ab0807d64f255e201ef428a474dae8a0a75021b62ad3988ffb81cd8221b243085a0ad046fdc16c67f17b9f81820095953a5b98acbdf93ebcf80bc9c99af5fbffacb61a9251c5aafdb22b1129bfc60c98e0f175263bdf93dc9a08b8efc2e8cdaf0f83d6c49ec901645eac5a4ff63385a6f1af2071897662a372219c9301f545a2ebb8f5917db7f29ca13fc861af38d90c35c03ac9184c122e57b057cde426fd76dca79e25e64dbb41c8414a0450da4905b902ae98d2da4ba792801\",\n        \"signature\": \"dcfc6fd47799fec772c2099b3c6437246c3ad07229fc740e05311a206b18b02ecdb026c926f49c6552e347fd35dfde06cb639a797c50612f98e2478a92aaf609\"\n    },\n    {\n        \"secret_key\": \"1fe7327ea907d3ff179b117811d30193fcba4c347b90657feed98deeecda9ac9\",\n        \"public_key\": \"eef301b16fd7bf3c7b640bf5ee8700ac5a87169eab5f56015b3f499d955e07eb\",\n        \"message\": \"19a832f26fbb0239f0d9d26a2ebded2403c2a406dd1f68318d677afa64f35043316a5efd729783c7f9d18c09824614652091886cc954be9f9312d4586bf36f3035ac703438b0cfe3dec5077813c710d1447561ab6157bc7ad5eab5b0c0afdcc9db77e66fa8071366829c501096c3d3a938218a6e4207109d1eb81f7d88bd6fbb2aefb1adef3594aae57c46b7b984db9468cd962c6184fb976f0e2aa84152deb1c76aea75ae488442943a80ba7d98a28cb864b5e87cdb284ad6e8d7aadc6b75d69d3bd345783b3ebb676ff95d7b4191e599851c9628835c7c01197e7c8f86f9c8fb49fe3e28458ba9b0236219bd46c28df6532496994ac9ba733c0105a02a269a2be8b7cb40074b881602ef9247052de9d637089188bd4c185ccae258a2ae9856a2cbf8451117683ce341f8096e1d91e874c5cb8a4e0939eb77373a9a0eb791645b8f5460472d669d8014681a5e778706cb5566bbd4727d1716b23c620d228b5d4dc2b352b423931f8a7e8fb59edad8ae42458729861a98e0c850a77ed655e7fcfe4fe36f9772df1ac3c643ad31db5630d571df9fcc9c50de7622108411962bbf72defbf49e997059c7311bd9ddd5b338a9851938d37e7a262108a291e2016803bbeff4f9c776125ceb7e7272b51c7c33461d8089f8408d8dda92506d5002084d4f414d8a4d28d3694c88630e31801990d95271cef47aa5c263f97b7daca1788701436329b5bfaf72653c166db087708130c5c0d78cc4e9064f860680271afe4c409853c2fad675\",\n        \"signed\": \"9c7fdb53fd606bc7c9c223fe9431e1ad009546d00098812a495197f2541e87f8d6f5da22ecefcbb7da56662a7309d10a6c4a4f7f299278d51bbd11e0cc1b870919a832f26fbb0239f0d9d26a2ebded2403c2a406dd1f68318d677afa64f35043316a5efd729783c7f9d18c09824614652091886cc954be9f9312d4586bf36f3035ac703438b0cfe3dec5077813c710d1447561ab6157bc7ad5eab5b0c0afdcc9db77e66fa8071366829c501096c3d3a938218a6e4207109d1eb81f7d88bd6fbb2aefb1adef3594aae57c46b7b984db9468cd962c6184fb976f0e2aa84152deb1c76aea75ae488442943a80ba7d98a28cb864b5e87cdb284ad6e8d7aadc6b75d69d3bd345783b3ebb676ff95d7b4191e599851c9628835c7c01197e7c8f86f9c8fb49fe3e28458ba9b0236219bd46c28df6532496994ac9ba733c0105a02a269a2be8b7cb40074b881602ef9247052de9d637089188bd4c185ccae258a2ae9856a2cbf8451117683ce341f8096e1d91e874c5cb8a4e0939eb77373a9a0eb791645b8f5460472d669d8014681a5e778706cb5566bbd4727d1716b23c620d228b5d4dc2b352b423931f8a7e8fb59edad8ae42458729861a98e0c850a77ed655e7fcfe4fe36f9772df1ac3c643ad31db5630d571df9fcc9c50de7622108411962bbf72defbf49e997059c7311bd9ddd5b338a9851938d37e7a262108a291e2016803bbeff4f9c776125ceb7e7272b51c7c33461d8089f8408d8dda92506d5002084d4f414d8a4d28d3694c88630e31801990d95271cef47aa5c263f97b7daca1788701436329b5bfaf72653c166db087708130c5c0d78cc4e9064f860680271afe4c409853c2fad675\",\n        \"signature\": \"9c7fdb53fd606bc7c9c223fe9431e1ad009546d00098812a495197f2541e87f8d6f5da22ecefcbb7da56662a7309d10a6c4a4f7f299278d51bbd11e0cc1b8709\"\n    },\n    {\n        \"secret_key\": \"5f9dcd93fb140610b0e211b39addb1eb87ba97804877afbcc381388cad650845\",\n        \"public_key\": \"182a237d878c581933332b4178b67ec408b3194d44e4e69392ef800b267c2949\",\n        \"message\": \"c38b874d3ff010fff1a6613bfa134257b24833cb536de3e74992c3cb01fe3bbdeed97dc3c4596fa44061442bd31a9d4aa8c81e34ad9888718206635509b133b1ba69cb1aa0e75c7a1893c080161d26152acef40f6ef4210e952a49828b5cdde804bcb536cdc349a8e831b4b69d3785a76bd9fb27080565972d0b8fbd16f3f960a6bf3ba0c5b9c404967ec1affe59b8c4ecc650fdde1cb06b70595ad4d325da0fab4c5540a7a8d5ebeacc4e99bd0dc96bde82f2bd7d9586308465e55b1cc388d750486bdd5c7264d54f5614d48726d99e44d7778d9ed0323958ab9858e2b25df2bf994ba3e625e2803b6c6931e7a9926f1e61ed862403ce392ab83b7d1b66085dcc06d82dbf176d016d9f44cdcb5072d004591e92d0459ef05a51b8f54ba17251e16621ebb753e5b1590c02d21e40f4b75eee4602860b9741fbbc0d2e385b8daca83cce68c34a99bde6a60d13ba64347d0a38d64b2ade250f38852c4eda2e2e4f303c3de1a8a9d4ab3300c9e63622879fc8537ffc63b18561fa1fff65531241515a62bb9b08b80af37667a601ae04171793cc83b11adf9c30ca9f4dabc7b401e16a1814cfc750248cc2f77e03f9c4334465ff6a2c83cbb56db4b734751043832c4000972ee3232f929f23337eba5e651e34cbddfe68ba219b632e7acdbd4630a031bf1689fbbc7fbbb210dbf25ee87e2ef2b3cbaf8d9ebd8fc92c3a58d3c05b1385a76c87791d7cd3741b71b6c329de9a9d7508a0c156a9521a9020563099a82b8770ae9a944a7e94\",\n        \"signed\": \"c1915e052b664797e0d5faadc78f2a009d6fbcfde03f3aaad59b9f4588e7fc3b21990c5208d3d76b4aa95bd934e88d3c98c591930a59de2a056701d9f7577400c38b874d3ff010fff1a6613bfa134257b24833cb536de3e74992c3cb01fe3bbdeed97dc3c4596fa44061442bd31a9d4aa8c81e34ad9888718206635509b133b1ba69cb1aa0e75c7a1893c080161d26152acef40f6ef4210e952a49828b5cdde804bcb536cdc349a8e831b4b69d3785a76bd9fb27080565972d0b8fbd16f3f960a6bf3ba0c5b9c404967ec1affe59b8c4ecc650fdde1cb06b70595ad4d325da0fab4c5540a7a8d5ebeacc4e99bd0dc96bde82f2bd7d9586308465e55b1cc388d750486bdd5c7264d54f5614d48726d99e44d7778d9ed0323958ab9858e2b25df2bf994ba3e625e2803b6c6931e7a9926f1e61ed862403ce392ab83b7d1b66085dcc06d82dbf176d016d9f44cdcb5072d004591e92d0459ef05a51b8f54ba17251e16621ebb753e5b1590c02d21e40f4b75eee4602860b9741fbbc0d2e385b8daca83cce68c34a99bde6a60d13ba64347d0a38d64b2ade250f38852c4eda2e2e4f303c3de1a8a9d4ab3300c9e63622879fc8537ffc63b18561fa1fff65531241515a62bb9b08b80af37667a601ae04171793cc83b11adf9c30ca9f4dabc7b401e16a1814cfc750248cc2f77e03f9c4334465ff6a2c83cbb56db4b734751043832c4000972ee3232f929f23337eba5e651e34cbddfe68ba219b632e7acdbd4630a031bf1689fbbc7fbbb210dbf25ee87e2ef2b3cbaf8d9ebd8fc92c3a58d3c05b1385a76c87791d7cd3741b71b6c329de9a9d7508a0c156a9521a9020563099a82b8770ae9a944a7e94\",\n        \"signature\": \"c1915e052b664797e0d5faadc78f2a009d6fbcfde03f3aaad59b9f4588e7fc3b21990c5208d3d76b4aa95bd934e88d3c98c591930a59de2a056701d9f7577400\"\n    },\n    {\n        \"secret_key\": \"925ebe04c6eac49b26738d6c1300f31fd4828478cbe97dab18bb889642e1e110\",\n        \"public_key\": \"cd7231b6eb74e1fe9f926f00d8de2c513d49640525b0795cab893d0c8929e3e0\",\n        \"message\": \"e6c0bad23a92ae8b1d85778288157ac6c617c63363341d777870341bb10a8d3dfc89be4f55ad4f64e83bf2499b69fdf72174d2844e6bd289daaa035fec5bf7cf45522119dc7a8c811d79578c5bb0f6d34db507ad1fb6dbfff997b79dacfb3da50a415e350c998c0a02800aa50ffdfe5f4276d8e6bb82ebf047fe48711daf7a893bdc7537bdaedf3dcb4dec5d24586811f59b25b19e83ca61e5592fedc08ca54473cea2ec121baa0e77fb2d9d765657de67980ed57f2f177858b6decf84ff90212d9647f41eed9b9d0ea3d8d621e4bb4041acc5146e96dfcf14ea962d30c8ccb39ea2be958c9b8774451bfeb7ddce716e94923cc85fbd3a3130780e2b3b2bb76da5341912a4e994cafa19bba19732f2ea402d71d3d8a969679b9d104243d9839c69ee9e955e1c60449788d1f4f6651f4bc9b94d73522ec0cf72cacfcf19f1f03ad6232104b55cbb8b5bb1e21344713d482742d6abc5a957174f623b8495272cc1e2b8315e5c80f947f500c83d8544f7cd4f65348949ef4420d7fc831fa4ae2ee18dbba614925ce1d767c177a626c4527a8154b57292186b044cbf92894253b00fd9343f9e697b1412eba43597eb72a669aaa2d77eacb968c20fe19505a38074158621b606f77d97bc6ebe50e7589293db27fc7dfe631a4bee83b22682a77328c36d9d7d1d891d65217cc47864f680dc8b5fd1a01a0f7c34430f77060b691a1ad213d22868e61bbd38f43f0c8b4da68a58318666c099766170c2db766aaf417f556cc9a0a3934e9fcef1\",\n        \"signed\": \"2c4d69bed5ad8b9584d849cf3df2bac72282b5f30de266b14f533ca96e9550c4b854c154bdc17aa880cf001a6454ffafaa2e50178de21216ed126b63f77f2d02e6c0bad23a92ae8b1d85778288157ac6c617c63363341d777870341bb10a8d3dfc89be4f55ad4f64e83bf2499b69fdf72174d2844e6bd289daaa035fec5bf7cf45522119dc7a8c811d79578c5bb0f6d34db507ad1fb6dbfff997b79dacfb3da50a415e350c998c0a02800aa50ffdfe5f4276d8e6bb82ebf047fe48711daf7a893bdc7537bdaedf3dcb4dec5d24586811f59b25b19e83ca61e5592fedc08ca54473cea2ec121baa0e77fb2d9d765657de67980ed57f2f177858b6decf84ff90212d9647f41eed9b9d0ea3d8d621e4bb4041acc5146e96dfcf14ea962d30c8ccb39ea2be958c9b8774451bfeb7ddce716e94923cc85fbd3a3130780e2b3b2bb76da5341912a4e994cafa19bba19732f2ea402d71d3d8a969679b9d104243d9839c69ee9e955e1c60449788d1f4f6651f4bc9b94d73522ec0cf72cacfcf19f1f03ad6232104b55cbb8b5bb1e21344713d482742d6abc5a957174f623b8495272cc1e2b8315e5c80f947f500c83d8544f7cd4f65348949ef4420d7fc831fa4ae2ee18dbba614925ce1d767c177a626c4527a8154b57292186b044cbf92894253b00fd9343f9e697b1412eba43597eb72a669aaa2d77eacb968c20fe19505a38074158621b606f77d97bc6ebe50e7589293db27fc7dfe631a4bee83b22682a77328c36d9d7d1d891d65217cc47864f680dc8b5fd1a01a0f7c34430f77060b691a1ad213d22868e61bbd38f43f0c8b4da68a58318666c099766170c2db766aaf417f556cc9a0a3934e9fcef1\",\n        \"signature\": \"2c4d69bed5ad8b9584d849cf3df2bac72282b5f30de266b14f533ca96e9550c4b854c154bdc17aa880cf001a6454ffafaa2e50178de21216ed126b63f77f2d02\"\n    },\n    {\n        \"secret_key\": \"4dd3b478ebdc59472bab14a8cdd0c2fdac5723ee04dd8917c7cfe7a536485c77\",\n        \"public_key\": \"5bccb37e68c234bead49337de208afbaf611811d965859a06d31301247d66acf\",\n        \"message\": \"1cdbd28556ec44e8705afda92bd5a53f95d8fe8b0ffe463373633316c52274c11edcd61551e3199e494dff6d906a739e7b324303fc47827e56def0bdcc46b816017c712305370263babd2c71be478f41ce30b1df63bedd3b2e6a519c53df515852c4137bc1aca49bf4c4631fd6564657d11cd83ea73cc3d0cf9e3b3c3e7ca99b4f12a9c9b67c8798148e0a0dc1ef8bf58642a14f97a572135514c10b19aabec25a9c6b35aa4034a57aae1b6d05bde2b6330f251d78db0993f0ca4c26386e3489a2092833b8acbbc4f4917fd3093df582fff71ece219d3672455582609c0db8d96a70fc8aed6798de54bfb2b3ee6c5d328db163593f58019f38f339fd3753f896a4a2cca8c1400a77ea391935f34e2639c560860810bbbe4be1d16e012c11490aa84f2964c877c293b300f43d379f3eba9af391dee510856a4ddcf76e0a0ae06a6a7c0f9c5e3fa1b8354fe8977b4ea3b20661491fa4613ba62f556d5d5da8213d0121de2c8725df0aae048ac891abbc06bdcef3c3effdf5a31749476f814db9457945f0d91e14080056be921a16aa964a9298221b157594973e32969993310c8707e19f3143abc4fda7c8ad0160acf031aba652801aa81a016b3137039e27d6738d02800a93a86f9f5585c518dfa9e7d8ac727f37437e56d2788386e11653a04e165169f903972a01484751e7cb38632590ec80d5fce4541601a0e095785a9ee8d359edf26b9946e798da5998cbb736f94eb713463f79f561759bbcb4c4ac693cabf2e1e036b2d0b0879a\",\n        \"signed\": \"5788e79e843bde9ef11a9dfac970196a567c6308c348e5174b387795046d590a47491fd71d97aeaa78c1615971b83490e8592820f9592ac76269b9d2ba7029011cdbd28556ec44e8705afda92bd5a53f95d8fe8b0ffe463373633316c52274c11edcd61551e3199e494dff6d906a739e7b324303fc47827e56def0bdcc46b816017c712305370263babd2c71be478f41ce30b1df63bedd3b2e6a519c53df515852c4137bc1aca49bf4c4631fd6564657d11cd83ea73cc3d0cf9e3b3c3e7ca99b4f12a9c9b67c8798148e0a0dc1ef8bf58642a14f97a572135514c10b19aabec25a9c6b35aa4034a57aae1b6d05bde2b6330f251d78db0993f0ca4c26386e3489a2092833b8acbbc4f4917fd3093df582fff71ece219d3672455582609c0db8d96a70fc8aed6798de54bfb2b3ee6c5d328db163593f58019f38f339fd3753f896a4a2cca8c1400a77ea391935f34e2639c560860810bbbe4be1d16e012c11490aa84f2964c877c293b300f43d379f3eba9af391dee510856a4ddcf76e0a0ae06a6a7c0f9c5e3fa1b8354fe8977b4ea3b20661491fa4613ba62f556d5d5da8213d0121de2c8725df0aae048ac891abbc06bdcef3c3effdf5a31749476f814db9457945f0d91e14080056be921a16aa964a9298221b157594973e32969993310c8707e19f3143abc4fda7c8ad0160acf031aba652801aa81a016b3137039e27d6738d02800a93a86f9f5585c518dfa9e7d8ac727f37437e56d2788386e11653a04e165169f903972a01484751e7cb38632590ec80d5fce4541601a0e095785a9ee8d359edf26b9946e798da5998cbb736f94eb713463f79f561759bbcb4c4ac693cabf2e1e036b2d0b0879a\",\n        \"signature\": \"5788e79e843bde9ef11a9dfac970196a567c6308c348e5174b387795046d590a47491fd71d97aeaa78c1615971b83490e8592820f9592ac76269b9d2ba702901\"\n    },\n    {\n        \"secret_key\": \"074d9218c1217e75823c90e010484c2adb88ecccd2bdf0120aa3edffcfcbd4bf\",\n        \"public_key\": \"3735ad1919033d1617b85bda04b16121da1d861b404154fa961d4946e55ecd83\",\n        \"message\": \"6b5aa40e9167bfdb847daa7d2786e28e7533e1d6ac53beb6f69b5953795a2bf59bbf7d141926968f50969bad742a4fb579d3250fb1be4c57ebf4f9112c70cd9f72a00db1c8896fe2b5bda7c7030f497c0b001ea25ba0d447f08c36db8b907c2f2abbbb620d3e8a2c66e4171285adcaadd1c14fe239bc595f098396aa8780ffb80fe1446a07001ec234d82abdcd8100793915b0b3f80d84e20e51eabc797806f3be8108a4f437550b06694050a82931ac40c0a48977edf6ced2428d7cfea8205506de86408065d1a19870fa33a7081037b3ee4491b6e7f3d10b14a30c209159a1c81231a35f0365b47d3e0da04a32c95d98333c44f572cdaaa905d069197f6e861b5dfcdfb9db6c7b0d0cb00f37c916a1c4c0b8985b09f334095e1283edfdd4e62a2941099a2b693696604d994311e3d5f6106683e1d7a1c7e53df7b790947a9a801a0ccd484395f6cbfd9ca4d9804f18d52bb0f946d1a89f97a6fb0680a8c4c057b6062b2b9de7c0374879b8a6a6d2c10aef780508eb28bb569a08350944c82f6ef28db2304db697c3ae1af43a500b0b974803e9f46ea2a02e85ed27dda616d24d6db3cc4f5aed8240b1aea3dcf69dee5f14f95e6e72987bbe6189bc2045f0d783a7b47bfc19830bc7f4e798abe90245fbd43f37c3f036d1cbf1e73dcb1d9daa87379b1106973481a215c1f4f46c1603a5d5cd97b7076f1f5dc789aa6a71e72ef54ed328a4ab64340539ffd164d0ec645f322d1bc37112dc08d8c8079d19d37abb2353f48b5c492f806ed2\",\n        \"signed\": \"b1f71c3bd1b6bec43337e26dee655a8d5f4a8dad84a51184b775b686fad31d8029e3876927f9576e90c3624875fc0029a5c10a8a0af75d7a880c6844a4a83a006b5aa40e9167bfdb847daa7d2786e28e7533e1d6ac53beb6f69b5953795a2bf59bbf7d141926968f50969bad742a4fb579d3250fb1be4c57ebf4f9112c70cd9f72a00db1c8896fe2b5bda7c7030f497c0b001ea25ba0d447f08c36db8b907c2f2abbbb620d3e8a2c66e4171285adcaadd1c14fe239bc595f098396aa8780ffb80fe1446a07001ec234d82abdcd8100793915b0b3f80d84e20e51eabc797806f3be8108a4f437550b06694050a82931ac40c0a48977edf6ced2428d7cfea8205506de86408065d1a19870fa33a7081037b3ee4491b6e7f3d10b14a30c209159a1c81231a35f0365b47d3e0da04a32c95d98333c44f572cdaaa905d069197f6e861b5dfcdfb9db6c7b0d0cb00f37c916a1c4c0b8985b09f334095e1283edfdd4e62a2941099a2b693696604d994311e3d5f6106683e1d7a1c7e53df7b790947a9a801a0ccd484395f6cbfd9ca4d9804f18d52bb0f946d1a89f97a6fb0680a8c4c057b6062b2b9de7c0374879b8a6a6d2c10aef780508eb28bb569a08350944c82f6ef28db2304db697c3ae1af43a500b0b974803e9f46ea2a02e85ed27dda616d24d6db3cc4f5aed8240b1aea3dcf69dee5f14f95e6e72987bbe6189bc2045f0d783a7b47bfc19830bc7f4e798abe90245fbd43f37c3f036d1cbf1e73dcb1d9daa87379b1106973481a215c1f4f46c1603a5d5cd97b7076f1f5dc789aa6a71e72ef54ed328a4ab64340539ffd164d0ec645f322d1bc37112dc08d8c8079d19d37abb2353f48b5c492f806ed2\",\n        \"signature\": \"b1f71c3bd1b6bec43337e26dee655a8d5f4a8dad84a51184b775b686fad31d8029e3876927f9576e90c3624875fc0029a5c10a8a0af75d7a880c6844a4a83a00\"\n    },\n    {\n        \"secret_key\": \"d2ea2dff7af0ba2a6bed7f6cc68c0df664a6b10ce801c42ed5bbe617bcc8b84a\",\n        \"public_key\": \"ab44706344026ed35e21982964f7b4dbbbe207fd27c46799701c19a4d88d1d72\",\n        \"message\": \"03ab5daebc6e70d352977932a03107879bd55dafd0c6ba7ad9697a17b127b3a74a3eaebabd0f8eeebfc0483d63fedde52deb46a3752449c9c4495c51a1c91f57e3ad2e6d01a13d0c470c5291b8e912288340970fbb85787b8b376d72175250e8cd90c07888bfef5ebf5086c8ff2abcdd12d214b9c45d120873b4602e57a6aab0b828d1084dffaa3651ee35662695b7f3433f4ab530c29ac6cc5bb43eccd1b6898b9ef7aec6d5aec68d5c1114bb5df7820966594c994d640891b8f2dc5d25638de43549d86d34306ff3f574575116405b9e8e286ee0cd978a76002c4435feaac6e84eae1654f339a567d8d04fcfa3eb6a04b9adc666021300e9ee5972b3df5d4d0dd4bf7921dc98de82cef2d1b1d61b797fc9968e118484c41342416ddc6adc4ee5d687d94a40ce572f42a2048668c175cf7b1f24c4efd020554fc6f642e14a57baec23e95c2514306d0a6d33648841497eac48eabd96d04731bab08bf5ea9d43e0cf9a37faafa732869d68e7d5fe6954f8a319ef55da1e178e43e84a3b9aa3ad00c29b1d161163df4b79f288e9391d70a2f8813d66622e8ac333fa6aa5311eabec383ba4cc122815de008877efbe6e12c322c975434afad173ebe24203d916d57578bd2bcacc78f6e2564513f8d113a833c2c226eb97ba2e23361a5d02664ab377f964c4300be2d77b62d9240823a09884df307eff3be5664d72d11ad513e1bc5610dbfd1009db39f0cbfe470555ec1b56b871670793d3b704fb06ee950b1ad2a4d7297ca58bbad810c3fad4\",\n        \"signed\": \"9abdb9dd2ab77b6f5e1b91ba0b613f5f360efb500d3fe99290ef7ca14bd2b330f405a4f7dcdaef4923d3111d40bf0320353386f634b40de6f04de9190ad51c0803ab5daebc6e70d352977932a03107879bd55dafd0c6ba7ad9697a17b127b3a74a3eaebabd0f8eeebfc0483d63fedde52deb46a3752449c9c4495c51a1c91f57e3ad2e6d01a13d0c470c5291b8e912288340970fbb85787b8b376d72175250e8cd90c07888bfef5ebf5086c8ff2abcdd12d214b9c45d120873b4602e57a6aab0b828d1084dffaa3651ee35662695b7f3433f4ab530c29ac6cc5bb43eccd1b6898b9ef7aec6d5aec68d5c1114bb5df7820966594c994d640891b8f2dc5d25638de43549d86d34306ff3f574575116405b9e8e286ee0cd978a76002c4435feaac6e84eae1654f339a567d8d04fcfa3eb6a04b9adc666021300e9ee5972b3df5d4d0dd4bf7921dc98de82cef2d1b1d61b797fc9968e118484c41342416ddc6adc4ee5d687d94a40ce572f42a2048668c175cf7b1f24c4efd020554fc6f642e14a57baec23e95c2514306d0a6d33648841497eac48eabd96d04731bab08bf5ea9d43e0cf9a37faafa732869d68e7d5fe6954f8a319ef55da1e178e43e84a3b9aa3ad00c29b1d161163df4b79f288e9391d70a2f8813d66622e8ac333fa6aa5311eabec383ba4cc122815de008877efbe6e12c322c975434afad173ebe24203d916d57578bd2bcacc78f6e2564513f8d113a833c2c226eb97ba2e23361a5d02664ab377f964c4300be2d77b62d9240823a09884df307eff3be5664d72d11ad513e1bc5610dbfd1009db39f0cbfe470555ec1b56b871670793d3b704fb06ee950b1ad2a4d7297ca58bbad810c3fad4\",\n        \"signature\": \"9abdb9dd2ab77b6f5e1b91ba0b613f5f360efb500d3fe99290ef7ca14bd2b330f405a4f7dcdaef4923d3111d40bf0320353386f634b40de6f04de9190ad51c08\"\n    },\n    {\n        \"secret_key\": \"7a60cdf1870460de8ae7781176d5127e71207faf2f210bd4dc547385b667f2f2\",\n        \"public_key\": \"ead67a9cf34d0ff14e79afa46f2dc996e9ac0e3e076322fbb4009767b133f01b\",\n        \"message\": \"9dc023a525d01ba3513798b738c79162926ebccc0adf1e57ac47c20dea6ce1375c3d2aaa1733b7f0c3bd945c335ff3576112bbdc10b6783ba654e8c61047f2773aa229bf846922a89c6a73d5f1051e8d96ed36d7d6747e063a7ac602f19fc52e021a4bbc28b03514fbd51c7b3fd659f12d547d0592dd09f873c9ecc6439c7e931ad0e4856be31c605def2ed9b5d13c5942b2f325397dac6c9760e9b1bb0c06f713cb920c234bccfee9f0b85dd020f7988f3be1cc66e9e51babe2fee237eb84ec7eff9409aa91c194e30db1e065015955de9746bba03f7edf9a587512409a4161fa77ea62ccf431602dcdcf365ed6bf0aeddd32f7c844e3a34d266e28382f4062fd4d6f8214252104d643a9bfd8071716371ccbb54c8cc8db79add65bcbcea0d080d8402803fe232df70f76577247a63d5583bbd5642767bc63f3c5a7bb3a47eb12984e4541f41fdb55869a08fade66c20f69a5a9de25f6b36ba18ace5b4ac336bb2a8ebf630ad03e8bb8731d01e84b91d024d117459a74892e93d53b61e6b8068e4f04b4181f0387b4567ccd45e1b8718a2d7d787872f3dcf87a15935ad7daaa744ed68a28666a51a10d39fc139cdfe9a6873076f7c425009c38faee135e513207b06e7ba35685f5072da34b6045b57cd5d1b1a1fdf017b8aa8ebd27522bc95e47908734e41722a767905c5ecc30c72481b6c12bf4ace94d5bb3a3155691b7075b40ebf5968fdd903d8fd3cc50b8d6464859b10f755132c6d9b6dad1d6f14c4185b264d3497a4e549877fe946e\",\n        \"signed\": \"b2e08142bdd62b786592c091f5fe6a9b7f30ce134c3b236fbc6dfe6734f88270ac58f6d74b4fd99c22451ca465a42c006db25af215ed241af1189627c6050f009dc023a525d01ba3513798b738c79162926ebccc0adf1e57ac47c20dea6ce1375c3d2aaa1733b7f0c3bd945c335ff3576112bbdc10b6783ba654e8c61047f2773aa229bf846922a89c6a73d5f1051e8d96ed36d7d6747e063a7ac602f19fc52e021a4bbc28b03514fbd51c7b3fd659f12d547d0592dd09f873c9ecc6439c7e931ad0e4856be31c605def2ed9b5d13c5942b2f325397dac6c9760e9b1bb0c06f713cb920c234bccfee9f0b85dd020f7988f3be1cc66e9e51babe2fee237eb84ec7eff9409aa91c194e30db1e065015955de9746bba03f7edf9a587512409a4161fa77ea62ccf431602dcdcf365ed6bf0aeddd32f7c844e3a34d266e28382f4062fd4d6f8214252104d643a9bfd8071716371ccbb54c8cc8db79add65bcbcea0d080d8402803fe232df70f76577247a63d5583bbd5642767bc63f3c5a7bb3a47eb12984e4541f41fdb55869a08fade66c20f69a5a9de25f6b36ba18ace5b4ac336bb2a8ebf630ad03e8bb8731d01e84b91d024d117459a74892e93d53b61e6b8068e4f04b4181f0387b4567ccd45e1b8718a2d7d787872f3dcf87a15935ad7daaa744ed68a28666a51a10d39fc139cdfe9a6873076f7c425009c38faee135e513207b06e7ba35685f5072da34b6045b57cd5d1b1a1fdf017b8aa8ebd27522bc95e47908734e41722a767905c5ecc30c72481b6c12bf4ace94d5bb3a3155691b7075b40ebf5968fdd903d8fd3cc50b8d6464859b10f755132c6d9b6dad1d6f14c4185b264d3497a4e549877fe946e\",\n        \"signature\": \"b2e08142bdd62b786592c091f5fe6a9b7f30ce134c3b236fbc6dfe6734f88270ac58f6d74b4fd99c22451ca465a42c006db25af215ed241af1189627c6050f00\"\n    },\n    {\n        \"secret_key\": \"3379d25c1117cf802ec79c06575d18e6bece4c7093dd43fdee03685c70b2fa9f\",\n        \"public_key\": \"8525156fe29fc2fbf661ba50182be20c8998d941493d5933dca4d8b41fb442d5\",\n        \"message\": \"7acdb39f1226bd3abffa50350a1497d761f8f0aaefbfbbbb925ff563e38976aa172d407b61ffdfb1cd538a4cd000b57818a0bc92c0e0cd0a5abfcf578300f5f4e6cefa267275d17845da7066fd4e18010027960cd395e682ad71af349bbdad5ebaa0f11a7761e19ea1bef6610743164b17141453b472ae2c8f36ce6b080f1c0745352454ce5aeae11c9d75de3c08004265fc4ca80d33b26eae1400dfd8977bf723a616daeb6d42199010b73e193ab72a58bdd248a7f4111ca50c1de646bfea7b4d5baf0f93dd973ee93649e21ec0c6c4fcca8cd6ff69df761612021d85ff1fb2a95337da4805a76d347ee71ef19c0dffb59f15f650293abb9721053f7406905ae683f96c83a3a7447b1afb14e1208c639f37a9750ba21da5552cc204eac453ca036282f7e0961093c39ec118138dcf71cf2d28fb96a24962b52d3393f880653bcba2c9b9d57b77c522f421fcf5ad75fba9cf3389b123aa97521713fff88467deb8c8991d4b57c1438170537cb50cdcc657e50e5c480e12c0d44939b6399944e7c71e186c2abb81fc57348836d5e57b72b224a6b71b6caf721aca73478cb6cf5fb89071ae3a398202dbb38c30812563bb9a23406657a956d305a3449a60cc8641b62175a7170c23bd5a25f0f12e15a7ed91fada6a4a2f0e7b155a3d6485ec03ce6e34df7e216240bb28a2dd732ff790d2286e200b33c29a31a5e19ad2cd02974badc4bc22deb7504c15241fc1060c8acef4fbb25ec7602fce36a27bb87b6e6423e6b4f6e36fc76d125de6be7aef5a\",\n        \"signed\": \"4c36bfc81eef00b9cb3ab514c6d451b993361e09a4be4b5040926feb0e0d9b52f03de468e7bad83f379154bf2c437a71f754f3f40798eeebd62e55f2be7714037acdb39f1226bd3abffa50350a1497d761f8f0aaefbfbbbb925ff563e38976aa172d407b61ffdfb1cd538a4cd000b57818a0bc92c0e0cd0a5abfcf578300f5f4e6cefa267275d17845da7066fd4e18010027960cd395e682ad71af349bbdad5ebaa0f11a7761e19ea1bef6610743164b17141453b472ae2c8f36ce6b080f1c0745352454ce5aeae11c9d75de3c08004265fc4ca80d33b26eae1400dfd8977bf723a616daeb6d42199010b73e193ab72a58bdd248a7f4111ca50c1de646bfea7b4d5baf0f93dd973ee93649e21ec0c6c4fcca8cd6ff69df761612021d85ff1fb2a95337da4805a76d347ee71ef19c0dffb59f15f650293abb9721053f7406905ae683f96c83a3a7447b1afb14e1208c639f37a9750ba21da5552cc204eac453ca036282f7e0961093c39ec118138dcf71cf2d28fb96a24962b52d3393f880653bcba2c9b9d57b77c522f421fcf5ad75fba9cf3389b123aa97521713fff88467deb8c8991d4b57c1438170537cb50cdcc657e50e5c480e12c0d44939b6399944e7c71e186c2abb81fc57348836d5e57b72b224a6b71b6caf721aca73478cb6cf5fb89071ae3a398202dbb38c30812563bb9a23406657a956d305a3449a60cc8641b62175a7170c23bd5a25f0f12e15a7ed91fada6a4a2f0e7b155a3d6485ec03ce6e34df7e216240bb28a2dd732ff790d2286e200b33c29a31a5e19ad2cd02974badc4bc22deb7504c15241fc1060c8acef4fbb25ec7602fce36a27bb87b6e6423e6b4f6e36fc76d125de6be7aef5a\",\n        \"signature\": \"4c36bfc81eef00b9cb3ab514c6d451b993361e09a4be4b5040926feb0e0d9b52f03de468e7bad83f379154bf2c437a71f754f3f40798eeebd62e55f2be771403\"\n    },\n    {\n        \"secret_key\": \"ef38c3fc74f054ae43e8d29d6ba6dc80b5af848270d4af58844d24bcf987414e\",\n        \"public_key\": \"0ae1478b05fb329965ea0fa928dcbe81a0bdbb6ff66c811671635e4388888051\",\n        \"message\": \"bf290db3dda8763937ae4c83746705327295c2c248068f5ab85c8b5d756f4e3e34062b5549387261476bcbd1e7331990f11910d11f94607c2b71f65b771aacabdc10f42ae918dd2594ac71051c85b330779c47af00a5b98191b56cbcf7efe41a27e87c677168c8abe9496eb2e7abbd0b1604286ed1a1b18d264d733de87d0d3f8055528c4d426d7f8e6ed024a74140abd354007962a2a97a5c2ff976546a8d1ac4924c09223d348ddcd8710a3799f91bb870b3f46d51f1e7f6892d6b08b991748a037a867ecc39ee8d6462a7614488edd3c2ba615ca2e37854889441b13dc835c36b38653f6598616f35783e2e158384bb931c901b703acb3991fb7aa5ba69d9a5bd0570242961a71a52470315e982e341a61c64a619bd16fe8119aae0d7503ce7d7e926146b91c2892f131669d1e39e5b75e9c72452618099a57dc2ee377be65875ee01bb88ed526fc394e2f5c8127a5f69125e67385ef94b1f33ad52629d720e31c02ae0b582339ff0f0bb07ff2b030f48fa7b692716501ad7773ad3151204a2a540fa9436bdd4202a157309ec36cecbe58b33eff557fd33e03fd3eb19009bd7a2dea9efeef8785567aab2a4c98bd1f2a81011b343a9f20c44c577a452fd54ba21029d4706813b2987c76bb242ab2620843c2260b669ad358efee7f9830dc9c7d478a2de4a2cf8c43da770e288e2edbb6d73bcf2ecb023de6b2dcc6b166e87a385eb0adc305665c5bfa57f250fe223ad7ff4518de39c79e87dc101a9faa6821a74442bfcfdf0a9e63a509e2a2e76\",\n        \"signed\": \"1d3ac6b6bf18ab5309148799485b276d20401c6af5f9b2f6032395a3c2f4b673b7140c07cc26f4fc56a5ee00b0746b2a80da6fdad17edd114920101d2c89c30ebf290db3dda8763937ae4c83746705327295c2c248068f5ab85c8b5d756f4e3e34062b5549387261476bcbd1e7331990f11910d11f94607c2b71f65b771aacabdc10f42ae918dd2594ac71051c85b330779c47af00a5b98191b56cbcf7efe41a27e87c677168c8abe9496eb2e7abbd0b1604286ed1a1b18d264d733de87d0d3f8055528c4d426d7f8e6ed024a74140abd354007962a2a97a5c2ff976546a8d1ac4924c09223d348ddcd8710a3799f91bb870b3f46d51f1e7f6892d6b08b991748a037a867ecc39ee8d6462a7614488edd3c2ba615ca2e37854889441b13dc835c36b38653f6598616f35783e2e158384bb931c901b703acb3991fb7aa5ba69d9a5bd0570242961a71a52470315e982e341a61c64a619bd16fe8119aae0d7503ce7d7e926146b91c2892f131669d1e39e5b75e9c72452618099a57dc2ee377be65875ee01bb88ed526fc394e2f5c8127a5f69125e67385ef94b1f33ad52629d720e31c02ae0b582339ff0f0bb07ff2b030f48fa7b692716501ad7773ad3151204a2a540fa9436bdd4202a157309ec36cecbe58b33eff557fd33e03fd3eb19009bd7a2dea9efeef8785567aab2a4c98bd1f2a81011b343a9f20c44c577a452fd54ba21029d4706813b2987c76bb242ab2620843c2260b669ad358efee7f9830dc9c7d478a2de4a2cf8c43da770e288e2edbb6d73bcf2ecb023de6b2dcc6b166e87a385eb0adc305665c5bfa57f250fe223ad7ff4518de39c79e87dc101a9faa6821a74442bfcfdf0a9e63a509e2a2e76\",\n        \"signature\": \"1d3ac6b6bf18ab5309148799485b276d20401c6af5f9b2f6032395a3c2f4b673b7140c07cc26f4fc56a5ee00b0746b2a80da6fdad17edd114920101d2c89c30e\"\n    },\n    {\n        \"secret_key\": \"7e7b39af69380cf44660e2c1ff308334e8250feeb88be0d43aabe5e68b8ef171\",\n        \"public_key\": \"ccef9daed92523533d4a2dab6d2419f6d08604db64ce37e32904ac77b9b4a01c\",\n        \"message\": \"d4a3976dbf8320185667b5a8236640f2ebc9e45e6d5f2a8d92997927dd9bc5db95f44634bd654eefece10d99d92b46715791645004accc6d140f32a1c872e54aa9a7493af94588b7bb400d94d458d43292307c5a1a3882a1c8a6a78d9a945f79d64b3294a28c3d59d82022b009cc4d2da93a16b071c9ab8ee9a3663d72ed344f151d68c666a4b49652d97a46d142a4741127f3c57f1551c40976cd1381a82aeae7bc5adb398720eb433f0899487ed2378446b1a8dc6a33fcd4537a05fb603ec0a90a27532300242b2000108621b65ab000bc06381530f690d7e56f81604dacff1910715040410aa1f944c92dd9bbaa5bd08ea00c8442df94f085eb3de97335b6005e6f84f823d43470ab1c67da12ad449936c6b55f9ffd203dfd6e3f33309e8a9945a59320e66734c79c4814dba5a1c14095c62925a1e1733efd94817a25ef9e479dd9ccde6ca8adb7a8053c1b55134697504af8053d595b844640b61e93168075468450eb5de0358697c104afa6a3796a509c26b4c277c23fff42df146de55e95d0d4b80a7aa177d99227ecb2a0594deedebb9cafb1a458aca8072cc7d77c7175f610ca300efd7af9388346498c22991564500e0b0aa4d2946f18e6f5375a848286f36954c1ca22684c6928c2a25c7fe21aba4a7111d7e05bc8d70b3dcb4f6aaec064845eef5525f85024c2570f3b78698c4bcec0d71aad5378d8819e1fac44ee416370212dbaaae54d2af2939b82cbaae7f42ff485d45b3acc21090f5ba41ec0da309e52ef2838d1de471e0b7cf985\",\n        \"signed\": \"1062a2dc9cd5379675c04f5e21338dcfb77dfbabcedd62b2607100d7649a05e80871e96123214f80f4f73b0d9b06e2d31f56119cea69da2347da84a275b7b207d4a3976dbf8320185667b5a8236640f2ebc9e45e6d5f2a8d92997927dd9bc5db95f44634bd654eefece10d99d92b46715791645004accc6d140f32a1c872e54aa9a7493af94588b7bb400d94d458d43292307c5a1a3882a1c8a6a78d9a945f79d64b3294a28c3d59d82022b009cc4d2da93a16b071c9ab8ee9a3663d72ed344f151d68c666a4b49652d97a46d142a4741127f3c57f1551c40976cd1381a82aeae7bc5adb398720eb433f0899487ed2378446b1a8dc6a33fcd4537a05fb603ec0a90a27532300242b2000108621b65ab000bc06381530f690d7e56f81604dacff1910715040410aa1f944c92dd9bbaa5bd08ea00c8442df94f085eb3de97335b6005e6f84f823d43470ab1c67da12ad449936c6b55f9ffd203dfd6e3f33309e8a9945a59320e66734c79c4814dba5a1c14095c62925a1e1733efd94817a25ef9e479dd9ccde6ca8adb7a8053c1b55134697504af8053d595b844640b61e93168075468450eb5de0358697c104afa6a3796a509c26b4c277c23fff42df146de55e95d0d4b80a7aa177d99227ecb2a0594deedebb9cafb1a458aca8072cc7d77c7175f610ca300efd7af9388346498c22991564500e0b0aa4d2946f18e6f5375a848286f36954c1ca22684c6928c2a25c7fe21aba4a7111d7e05bc8d70b3dcb4f6aaec064845eef5525f85024c2570f3b78698c4bcec0d71aad5378d8819e1fac44ee416370212dbaaae54d2af2939b82cbaae7f42ff485d45b3acc21090f5ba41ec0da309e52ef2838d1de471e0b7cf985\",\n        \"signature\": \"1062a2dc9cd5379675c04f5e21338dcfb77dfbabcedd62b2607100d7649a05e80871e96123214f80f4f73b0d9b06e2d31f56119cea69da2347da84a275b7b207\"\n    },\n    {\n        \"secret_key\": \"a9048af0c20a125f5d39c50f22b805ae742cf64f1fe8dfbe8dfdaa511aaa576f\",\n        \"public_key\": \"158655db94b15ca72983877b6db231a5843df5dbca2810a7e496fb59ab7104ca\",\n        \"message\": \"8eef2d9f5d59709959c924f87c22789767393a155d5c87de488cef50b7bf7da870e3adc300aee6603b2ef08764d99d9e7751e5dce92aaa71aa18a69cc823134e8552d959a0dbb41117e0a593c31833b6ec2172ddafaf7848ddd18d28d0d4ed33237ec804f65938aed8e8a3280d42e353d01be0187b1301f83d89849067b04a9031f7e0f33e3416240c53d9265ed0663959971f417cb5f210cdc5aebcb5e1db7dfb82df435876a6e98f415b0df869f0d8851535375645eef70faec744ee0dc3acbcb040f68d502c2c62c8db45ebe54854a4b36f43feb49a6d1c2c2ea79914a7c23c60baaa67cb47b2178e12dce76b004c87b7b8346efadf380b9e1e41f63148da51781d75cec040e4268820211f3c462501d80899894e79d618de42461d785aeace53ae14b79d33501ed5629bbdd07128156db0725f5b4bed593a952947830384f61df00ee0aa099099c3cd9765a9c1c7e8a6a83430b8d9867c8e17920ad0ff64d8cd2ff5f114388ce6d43eec1715d035f022fa97969e1a5dd9f58d896b17c1221c9e6c8555597235eeda6ec41b0c117612b00c5f0ed1816b057363582707a8aa0d98d4d4be5e8fa32d6c9d278221ef3067b8ba1516d9e051d2f68b7d1b151f74a3534e7812c051e5f2b63b3035f8e5703b5f68fd2d65bb7565e8aa67bfd2a12caf0bc5481197a9ff89d77df7a0e9655ef029b43dd906d0b888e313ae9d1c7e9368a01352d00c6680dd0f1f574a5877348a7ea2c0b9e8e2727510bf0c9ef744f369eb3c6c4fc16adeb6e1945be8287d0f30\",\n        \"signed\": \"18a312b20d86ac339a58ef2b852d467c23bb2cb1227cb15338af07fd04b9a711e856ee5b2c82e366c17f861713d1088c1b2144d1c37d05bdc00d7396738520008eef2d9f5d59709959c924f87c22789767393a155d5c87de488cef50b7bf7da870e3adc300aee6603b2ef08764d99d9e7751e5dce92aaa71aa18a69cc823134e8552d959a0dbb41117e0a593c31833b6ec2172ddafaf7848ddd18d28d0d4ed33237ec804f65938aed8e8a3280d42e353d01be0187b1301f83d89849067b04a9031f7e0f33e3416240c53d9265ed0663959971f417cb5f210cdc5aebcb5e1db7dfb82df435876a6e98f415b0df869f0d8851535375645eef70faec744ee0dc3acbcb040f68d502c2c62c8db45ebe54854a4b36f43feb49a6d1c2c2ea79914a7c23c60baaa67cb47b2178e12dce76b004c87b7b8346efadf380b9e1e41f63148da51781d75cec040e4268820211f3c462501d80899894e79d618de42461d785aeace53ae14b79d33501ed5629bbdd07128156db0725f5b4bed593a952947830384f61df00ee0aa099099c3cd9765a9c1c7e8a6a83430b8d9867c8e17920ad0ff64d8cd2ff5f114388ce6d43eec1715d035f022fa97969e1a5dd9f58d896b17c1221c9e6c8555597235eeda6ec41b0c117612b00c5f0ed1816b057363582707a8aa0d98d4d4be5e8fa32d6c9d278221ef3067b8ba1516d9e051d2f68b7d1b151f74a3534e7812c051e5f2b63b3035f8e5703b5f68fd2d65bb7565e8aa67bfd2a12caf0bc5481197a9ff89d77df7a0e9655ef029b43dd906d0b888e313ae9d1c7e9368a01352d00c6680dd0f1f574a5877348a7ea2c0b9e8e2727510bf0c9ef744f369eb3c6c4fc16adeb6e1945be8287d0f30\",\n        \"signature\": \"18a312b20d86ac339a58ef2b852d467c23bb2cb1227cb15338af07fd04b9a711e856ee5b2c82e366c17f861713d1088c1b2144d1c37d05bdc00d739673852000\"\n    },\n    {\n        \"secret_key\": \"f8c9183f23105fad0c6e5103358b583288f9ff6c7dfc91106d07987ff69ce1eb\",\n        \"public_key\": \"4c79628c958cde0cc3cf686095b8a2f44b7193c616f51b21b670b038ce6f67ff\",\n        \"message\": \"b1d60595323ff3c844874190e1836e4101409cbceae28d5da81fad298fe47f6bdf44745b7cd0d37131c3ec365b92f5a1a69c09fe2d9e81da10cf19d85ff5ff26f9e7db9f0793b25ab26e6a74f44eb8c4f078eb7ad18e65a16210d5c844d3cef75f1daf44eee558f90e524a032b6cae6c8d23367c28ce1c75fc25ac87433977d597533c92ae65f2913a18907ac7d9543df24127743943fefd9cf83ed833f63ec8367233d897bfa12d466d2c4a9ad70d5a672fc10775ea2d204e636de7010788da271df03881a25c8dfa5af73ee559f81b529b35aa127fdc0ee8fd369c7a0436623986aa6407fa67a1420c46f3211ab84f84466dd58bb79508a1feb0a5a5dc3bb0c1b248098262a064f37bb2f019e290c60afaa1206651a2697caacc3ecc02ecfc077f272e8f75cea71c3bc3356d2b5807276f1955001cfe10a61716b4082bd6f84cae4bb0d9a4b75a4b5762f81079f19d7d19eaff8631c924885bd3a64e129f4cf6b79c7a9829665511e9d85c745eb22c1b7cb2a17a49b6285cce37b3de415940328323efe24a1a07ee87468f6510e42dd206fe7f09e3d433fb52156ae348383115648863e45bf6a371b17e70e19f9627d7f0a58b95c6a4788d5fd7862f1612c0347325b797651be30c3e1e60ea4ae60b5745a38b6a9d4eb4935d6f3cb8d71ad3f39adda5e42e2219de0d381909c9cd317dd4379421a2a84268a7ea7180a64c129be1e5e8fcbbf5ed659e9f7e763ce84f630d5407954f9f755750a6dbf9f7660717de8e2adc1e9ac9ee31654d1837cee39795\",\n        \"signed\": \"c6a8bc7a0d5c6185b6ecd6033e42321d5c871bf889be72bd54cc0083ed60a470b2cc0fb4682c894c75b0df95f1ecfbba2d5acef3e1aafe54b9f7e803a1d0150ab1d60595323ff3c844874190e1836e4101409cbceae28d5da81fad298fe47f6bdf44745b7cd0d37131c3ec365b92f5a1a69c09fe2d9e81da10cf19d85ff5ff26f9e7db9f0793b25ab26e6a74f44eb8c4f078eb7ad18e65a16210d5c844d3cef75f1daf44eee558f90e524a032b6cae6c8d23367c28ce1c75fc25ac87433977d597533c92ae65f2913a18907ac7d9543df24127743943fefd9cf83ed833f63ec8367233d897bfa12d466d2c4a9ad70d5a672fc10775ea2d204e636de7010788da271df03881a25c8dfa5af73ee559f81b529b35aa127fdc0ee8fd369c7a0436623986aa6407fa67a1420c46f3211ab84f84466dd58bb79508a1feb0a5a5dc3bb0c1b248098262a064f37bb2f019e290c60afaa1206651a2697caacc3ecc02ecfc077f272e8f75cea71c3bc3356d2b5807276f1955001cfe10a61716b4082bd6f84cae4bb0d9a4b75a4b5762f81079f19d7d19eaff8631c924885bd3a64e129f4cf6b79c7a9829665511e9d85c745eb22c1b7cb2a17a49b6285cce37b3de415940328323efe24a1a07ee87468f6510e42dd206fe7f09e3d433fb52156ae348383115648863e45bf6a371b17e70e19f9627d7f0a58b95c6a4788d5fd7862f1612c0347325b797651be30c3e1e60ea4ae60b5745a38b6a9d4eb4935d6f3cb8d71ad3f39adda5e42e2219de0d381909c9cd317dd4379421a2a84268a7ea7180a64c129be1e5e8fcbbf5ed659e9f7e763ce84f630d5407954f9f755750a6dbf9f7660717de8e2adc1e9ac9ee31654d1837cee39795\",\n        \"signature\": \"c6a8bc7a0d5c6185b6ecd6033e42321d5c871bf889be72bd54cc0083ed60a470b2cc0fb4682c894c75b0df95f1ecfbba2d5acef3e1aafe54b9f7e803a1d0150a\"\n    },\n    {\n        \"secret_key\": \"16089a1b932f8d14995688b48dd841edae3da5cfd2cb16555306f3fe8bd3edb9\",\n        \"public_key\": \"9ecd9fdd7e0b923deff5d887b242585d9d41cd2c7c10f9c345b39f633f4ab903\",\n        \"message\": \"58500232388d9aa4b5faf85b0233247e717fd16840de9bfd0ef86e01e61302775513e224125e0d20420ea949f6c26425f70077911f9711310cd6fd8bff27cdea11480c73e8f8b3c37641e7e8dd8607c1640218fec80a020928b93d4d557ebe82ec0bb17538867d2cb14d44d3ea727fdd52820b0da944de21cd5da303d776fe99cbc2648365e6a0a98d4db150842661768be84c68507a5c45d207840b033537786cb21dadad5fbab9c5cfc1e3547de550d313631dd4fbb7ca8f71938627608d2ebf655db4325abf3ed504dc183058f9de1e449312d904c846a184a028f364c028b27eb4946427e31c21e1051df364d499f477bf51e7a8893183e5ecf77d513a1a76b1a6fdfb16be90d74be4c4345a4f9f87ee441a1022d67ee844789f21b0c31adcc0d95663cdfb40a895b922dce8069b932c802fd3ab1ef0ce6bffdcc5653b1cd5257e19a0951687e545faf4aa66065a55c4b4191e34e8047d6a4ab52d1b06c369a426ca2d16b51a0271f27f8d744c711fce3aad9d4ac038ee700e4e971b21ca489ff2b8c778a3721adf47c1ae5a41b9a27fa742fd0f18164ef3c26b8ae7d1fa29b7c0cc4683be65025c96537a12d5fcebbd05e930c3693ebbba0a78adf59d8a3b598a348eaa9f47caf531fe449652db5b20d68994e35afec2c25709055a1de26082e3912d497c647720a3f873621456e6a5b9eb613acb43b66d47d0b954c69e8fbf2c5e634c486e5724930e0b56a516940c8cb0e775274deff97cbb7759ce90a2b93e9efaa624e6b38a39849dca1df612736f\",\n        \"signed\": \"7878ab741ebae2747c7897cbb1d105482f37be2f5f91795232cdfbccc526608918e2756ddb7536b3680c162cf8a1ef38a341b9362bfe5d468b4bce21df234f0f58500232388d9aa4b5faf85b0233247e717fd16840de9bfd0ef86e01e61302775513e224125e0d20420ea949f6c26425f70077911f9711310cd6fd8bff27cdea11480c73e8f8b3c37641e7e8dd8607c1640218fec80a020928b93d4d557ebe82ec0bb17538867d2cb14d44d3ea727fdd52820b0da944de21cd5da303d776fe99cbc2648365e6a0a98d4db150842661768be84c68507a5c45d207840b033537786cb21dadad5fbab9c5cfc1e3547de550d313631dd4fbb7ca8f71938627608d2ebf655db4325abf3ed504dc183058f9de1e449312d904c846a184a028f364c028b27eb4946427e31c21e1051df364d499f477bf51e7a8893183e5ecf77d513a1a76b1a6fdfb16be90d74be4c4345a4f9f87ee441a1022d67ee844789f21b0c31adcc0d95663cdfb40a895b922dce8069b932c802fd3ab1ef0ce6bffdcc5653b1cd5257e19a0951687e545faf4aa66065a55c4b4191e34e8047d6a4ab52d1b06c369a426ca2d16b51a0271f27f8d744c711fce3aad9d4ac038ee700e4e971b21ca489ff2b8c778a3721adf47c1ae5a41b9a27fa742fd0f18164ef3c26b8ae7d1fa29b7c0cc4683be65025c96537a12d5fcebbd05e930c3693ebbba0a78adf59d8a3b598a348eaa9f47caf531fe449652db5b20d68994e35afec2c25709055a1de26082e3912d497c647720a3f873621456e6a5b9eb613acb43b66d47d0b954c69e8fbf2c5e634c486e5724930e0b56a516940c8cb0e775274deff97cbb7759ce90a2b93e9efaa624e6b38a39849dca1df612736f\",\n        \"signature\": \"7878ab741ebae2747c7897cbb1d105482f37be2f5f91795232cdfbccc526608918e2756ddb7536b3680c162cf8a1ef38a341b9362bfe5d468b4bce21df234f0f\"\n    },\n    {\n        \"secret_key\": \"94d50915144c7e7dd0f85fef87eddc2206c1569ed1431c8c5a153e32e1cb2fb7\",\n        \"public_key\": \"3bb098cf160f3aec3170b57d6add4f56739270e4b3a8ef7966ec30619b299102\",\n        \"message\": \"4d915f27332dd75051719a24ae8d0e9c30da790999e22d9b587ef20321bee4c07d0a12494ffe599f47f96925f5d92517fc3e5f041d0c709f2a9783125eeca6652997201c429aa6f1ce2f07a0d4a0a18cf20b3e9a4f7663ea5262cad8f949411b05ff5c5edd7b30b217d75d8c86c94e5f92c16734374e8cead61b0b27bb4bf5f43a313c1dd5b83e0ea933b6cadfedd7a64aa5dd5b5d02c695ea20e091fdaa72ef4e7ca40f38395be8bf7a255c6d06a632d7d785d9e047f232aa50fa14529f986f9ef9d7b580a03965b0154788822a225bb5ab3438b89a5c28744ab0bc0b2014e5796acb4935a81b02a04632acb88caa7e39e069c7c8e1758291094a53e362fcedaaa583eca766efebf69b38e8cde9ce58e012c60ec88e8c42beadfa838cfe440fa0c01d659c9634576d7d7a2d3a044f99c6e4263d4c0b374a388a2acf38eff29c777e9daa60d598035a7d9edf67a502c3f573207b119cacac3fa71e2a0207c601cc0dd637ef562bacc35c57042738f1f55815a5268082cd6a508292fa29e34e9645d87a1a2b6e58adb7f4a57fbb53e9213ef3dc873f29396258a1ea546fb5952ce343cee9bbb90c1cda72c65a7c8e40312b328e231920c233077dca34d04f9d89daa9a2f43459165fd102ff5643c7175230b39ec7c3c475650ef131609d3220f5a294a403b1e1c42cfa162cd426f0ae43fd6b7ab547a62b7d5f847403c4e5987953877158cfdee23c04f751c7c86d078e824ca63b5e65543e978b6b0cc689ef664412b01b8ff165e7dbde3c099bf4f34ebddcb4c4\",\n        \"signed\": \"59a1ce55f5a6badc1b9391263620542cfcae87a0f2b9502250cfe4bdcbf76c461977c334a48d916edebd56c21ce217c35a6444cfbfd3b11a3d48fa2edb6eb40f4d915f27332dd75051719a24ae8d0e9c30da790999e22d9b587ef20321bee4c07d0a12494ffe599f47f96925f5d92517fc3e5f041d0c709f2a9783125eeca6652997201c429aa6f1ce2f07a0d4a0a18cf20b3e9a4f7663ea5262cad8f949411b05ff5c5edd7b30b217d75d8c86c94e5f92c16734374e8cead61b0b27bb4bf5f43a313c1dd5b83e0ea933b6cadfedd7a64aa5dd5b5d02c695ea20e091fdaa72ef4e7ca40f38395be8bf7a255c6d06a632d7d785d9e047f232aa50fa14529f986f9ef9d7b580a03965b0154788822a225bb5ab3438b89a5c28744ab0bc0b2014e5796acb4935a81b02a04632acb88caa7e39e069c7c8e1758291094a53e362fcedaaa583eca766efebf69b38e8cde9ce58e012c60ec88e8c42beadfa838cfe440fa0c01d659c9634576d7d7a2d3a044f99c6e4263d4c0b374a388a2acf38eff29c777e9daa60d598035a7d9edf67a502c3f573207b119cacac3fa71e2a0207c601cc0dd637ef562bacc35c57042738f1f55815a5268082cd6a508292fa29e34e9645d87a1a2b6e58adb7f4a57fbb53e9213ef3dc873f29396258a1ea546fb5952ce343cee9bbb90c1cda72c65a7c8e40312b328e231920c233077dca34d04f9d89daa9a2f43459165fd102ff5643c7175230b39ec7c3c475650ef131609d3220f5a294a403b1e1c42cfa162cd426f0ae43fd6b7ab547a62b7d5f847403c4e5987953877158cfdee23c04f751c7c86d078e824ca63b5e65543e978b6b0cc689ef664412b01b8ff165e7dbde3c099bf4f34ebddcb4c4\",\n        \"signature\": \"59a1ce55f5a6badc1b9391263620542cfcae87a0f2b9502250cfe4bdcbf76c461977c334a48d916edebd56c21ce217c35a6444cfbfd3b11a3d48fa2edb6eb40f\"\n    },\n    {\n        \"secret_key\": \"0d81926f513db4b25dfa1e52b5dca678f828a61c7c913c828247c2eb0422b7d1\",\n        \"public_key\": \"0f32411ef91d4e4b6941dfcaab142ef3bec160983993a5262ccf27fadd2af890\",\n        \"message\": \"a93837522f7ec2e93a2e4b4c8b46de926a81ada2d248bcd33b39b6c95fb62a61dbbeda1aa85a21d9b96a08510d8d3a658cf320a10928695999d2c0d605c7f95a12f56a8718507db0f497e3ead613132ab092cbf19d2260358630358d9b26e68d50ddae37c8af0bb7d2741fd2929c21279a78d10e2c5f3c5bf4a42a3617036d54743647765afd8cd910f81b38ced72390630ee68944a37d29c2fecada1cc59ec544075bdbc14c63c6234b884049000c27c73406035604fca8760b49a5e2109ef91285adc4ec48c819d62d948faca90f62cfaef0b07d6fe576d762bfd0eef94cf6b5332c4d422511607f2facc7ac046a59b9617e8383d1029cc91ac592b52084413032be841baa9bf96251a6bda671d4cd4b125da658a4e5a50f4428eebf2614fb0ce5febe80f721a5f4c0325506d27a8d31e33d86253870dd63c08edc7302b280e9b9bdc28beef05c7dcb30d4c162e9be832e1c785e37551218421eec852c4298213b2f27f8f8c706d391b9c69a56db7ce5d81548fca5fed456f2d8afd0b75f79f85868316f4a0921f0c6639926516b3c3e52a9cb22554546ef70e14c77ecbdcd5c0d59a81769b30d5d131f2fb449c996b8de8ac7f8084f8499e1a56f7cd29db6aaefccae8a60e75616a1f702c3bc8deaa1004a8dae0392a59cee54810c6e940eee25fb2e5d573267044b893ffde378fe75ac2613373d84a0ca8187af4a3358e50a994ed03367de645e10390fea4c33bb1a6c0c39858b8db4a69fe894a4223d45af69b36c6117c4dc25de49a63017002ba9ae551ef9\",\n        \"signed\": \"e0cb6c71ebf8d705e50cad9f0b8cba3ecf4b9e3793400092aa5b121e7dbbc8bea71df29528ca9b47abf87c198a8dc4e14d5180ce932dd2114a3cdaa5552cc205a93837522f7ec2e93a2e4b4c8b46de926a81ada2d248bcd33b39b6c95fb62a61dbbeda1aa85a21d9b96a08510d8d3a658cf320a10928695999d2c0d605c7f95a12f56a8718507db0f497e3ead613132ab092cbf19d2260358630358d9b26e68d50ddae37c8af0bb7d2741fd2929c21279a78d10e2c5f3c5bf4a42a3617036d54743647765afd8cd910f81b38ced72390630ee68944a37d29c2fecada1cc59ec544075bdbc14c63c6234b884049000c27c73406035604fca8760b49a5e2109ef91285adc4ec48c819d62d948faca90f62cfaef0b07d6fe576d762bfd0eef94cf6b5332c4d422511607f2facc7ac046a59b9617e8383d1029cc91ac592b52084413032be841baa9bf96251a6bda671d4cd4b125da658a4e5a50f4428eebf2614fb0ce5febe80f721a5f4c0325506d27a8d31e33d86253870dd63c08edc7302b280e9b9bdc28beef05c7dcb30d4c162e9be832e1c785e37551218421eec852c4298213b2f27f8f8c706d391b9c69a56db7ce5d81548fca5fed456f2d8afd0b75f79f85868316f4a0921f0c6639926516b3c3e52a9cb22554546ef70e14c77ecbdcd5c0d59a81769b30d5d131f2fb449c996b8de8ac7f8084f8499e1a56f7cd29db6aaefccae8a60e75616a1f702c3bc8deaa1004a8dae0392a59cee54810c6e940eee25fb2e5d573267044b893ffde378fe75ac2613373d84a0ca8187af4a3358e50a994ed03367de645e10390fea4c33bb1a6c0c39858b8db4a69fe894a4223d45af69b36c6117c4dc25de49a63017002ba9ae551ef9\",\n        \"signature\": \"e0cb6c71ebf8d705e50cad9f0b8cba3ecf4b9e3793400092aa5b121e7dbbc8bea71df29528ca9b47abf87c198a8dc4e14d5180ce932dd2114a3cdaa5552cc205\"\n    },\n    {\n        \"secret_key\": \"6c8c53b56bbcb4c0a25dc40c18240b6a5c7576b89dde45ef13fb158ea17f8ed9\",\n        \"public_key\": \"238e51d6a44fa7ac64268801261ea35b62638a006cc452bddb9f16fc5803060c\",\n        \"message\": \"b60df2944ba015759802d3c587bcfebe521a7e77b9985b761c9676454d24a664af0b0d44225a557512e1c1cd7dd8335c8f6adf928e18f89fd5eedf6f411dcdaf996912e8c3e23d1cb95eca4b9e24e7539c3b98bf3d07ec251392096c19ac5374dcba526132b6d9bb8f6c859ce985d584c7bba5b02a81034b6d8b521bd280e50d77daa2b2413ed679834f8161d5d0573bdd476ac3cd0a3a7d8db45334e89c00ab66bc368a07b423e246434636272aa4e4637a5306b2c3397992781f30238de79ec104acc7200defad960883d391443e70efbd22f1cfceec5112fe9e8e13bb941c083468dd71ffca976cd51ce161793110ef00aff5ee2ccb7706a512b85beb94ac49d19afb6333655cf3aea535a6f9c75e034841e763c5a249b4704e1be78b0ecac6802c343c1b7e7b5770de4c93a3a79c46e6835da8ae5db3838e1796b564a480a4f290b60a1c63a725ff3fef434d2a0b3d8931978742b525c83bae6794ae64193794b370c289ba35ed79d37072a8dcfcadb46d5ffaeeba1bfd4f87d766b504e62b4acdd77446e79ba994d6dbf4765ebd74b0365100da56162c36fe5a95077f6b4265e81796b4a57443782970b96cb4569ba985c55fe3a718380bca39f16624f8e47cc63c1b6fa1bde1aeba9c51f94b702b13108cc1481d42e6fa981e3ebfe064d2dca7420c74595792312ae3fb9101d4b66d9916dfd6c13ae883e661c628228be9794cf60345076db26184b617e272298cd4183f27bd52d40510bb015d2097d4cc76e76c0a62bbfdaf53c7268775bbfbdb8870eb9bab\",\n        \"signed\": \"4bf1e7d49cd4d5c3c1fd4a4bc48ff6b6e52fd9510a411812296996e4fec56be44514c567d1d33477bd5dc083c3958bd95bfe599c153f21ae26252967b7326003b60df2944ba015759802d3c587bcfebe521a7e77b9985b761c9676454d24a664af0b0d44225a557512e1c1cd7dd8335c8f6adf928e18f89fd5eedf6f411dcdaf996912e8c3e23d1cb95eca4b9e24e7539c3b98bf3d07ec251392096c19ac5374dcba526132b6d9bb8f6c859ce985d584c7bba5b02a81034b6d8b521bd280e50d77daa2b2413ed679834f8161d5d0573bdd476ac3cd0a3a7d8db45334e89c00ab66bc368a07b423e246434636272aa4e4637a5306b2c3397992781f30238de79ec104acc7200defad960883d391443e70efbd22f1cfceec5112fe9e8e13bb941c083468dd71ffca976cd51ce161793110ef00aff5ee2ccb7706a512b85beb94ac49d19afb6333655cf3aea535a6f9c75e034841e763c5a249b4704e1be78b0ecac6802c343c1b7e7b5770de4c93a3a79c46e6835da8ae5db3838e1796b564a480a4f290b60a1c63a725ff3fef434d2a0b3d8931978742b525c83bae6794ae64193794b370c289ba35ed79d37072a8dcfcadb46d5ffaeeba1bfd4f87d766b504e62b4acdd77446e79ba994d6dbf4765ebd74b0365100da56162c36fe5a95077f6b4265e81796b4a57443782970b96cb4569ba985c55fe3a718380bca39f16624f8e47cc63c1b6fa1bde1aeba9c51f94b702b13108cc1481d42e6fa981e3ebfe064d2dca7420c74595792312ae3fb9101d4b66d9916dfd6c13ae883e661c628228be9794cf60345076db26184b617e272298cd4183f27bd52d40510bb015d2097d4cc76e76c0a62bbfdaf53c7268775bbfbdb8870eb9bab\",\n        \"signature\": \"4bf1e7d49cd4d5c3c1fd4a4bc48ff6b6e52fd9510a411812296996e4fec56be44514c567d1d33477bd5dc083c3958bd95bfe599c153f21ae26252967b7326003\"\n    },\n    {\n        \"secret_key\": \"69b320fbd4774030a29767a0cc1550d10b749b44d619d41dce1146f7ac80a755\",\n        \"public_key\": \"dc508a79c6b8ab866cd117a5a84dd9d931fda450bec29335344d0d219216d65e\",\n        \"message\": \"217e33f88622c96f8d092c9e26664fe9efc0d8d2eb59a036fa464cee65ce4489caf903dce17afafbc4f18dc9bbfd6c1a4be7b83485a6ca947defb1d35125d0773962a344a38b6dca9a40c31c1c4eb2d7f6818f978e573d66b990921b92b777471a4f6f05477ebc353ace1d86b00cc251777aaf6af3aa1179bff78df5048e5ef29968670e535483568d6bb16da829568f81c799b9afd4aad6ef085252c0ce3ac01ac21a9ea69bd58eadc66968f55dee386b653f3334efc398ef3c37a38ce93b21f107cc54dec26f53fee5604eb09a36afe6b665b6324a84c7da7b7dd01d9278e472f15a5ce9ff0fd93d0aa0604dd2df8d5bf6a912734ec51de77f0ce099ba11670210a6a206106b0ede2ded858a6bc411e7613e6f80e1aa52c323e30fa849951cc9b776e4cc58c90cfc8f442df64151a7fd4a3dd61a4336da21d03944635d3fd667be741ef45b1f7cb276d9f4de8107de64582f7917c6eab38e0a8890a4bee48bc92617a361cc7b1d25e089453ce0a52544f868dcb3249de761e79df63efa0794e3c4618c554753ee281c52ac8ad78d5338f0dac360a769381bb4a39f190b887b4723806ac4a4f2ff304bc6f9337ab54c866e6ba51df50c43eab52e2b39794c9917e0c31433f03681d2f1d93a0436018caaae20206a3458ad6c037acb511ef128f6dcd05305f07049a13b6c6c3c5b8170f158c8f12d46e160931ba18bd59ae129ec07a0655fa482ebbd3b850d36b832bbb775f538e3c1b3a43ecf94ca630ca15d502813eed3e35e8fd23d2ab638600427d1597cb29da2a5\",\n        \"signed\": \"697d4d897e0e2cc02bc1c2dda57f0dda620b37e861822bb7f1a701935e959ea0d8453f746fb92c087ed65d980eea1d6fdbf23e99b289aae0dcbb128ef836640a217e33f88622c96f8d092c9e26664fe9efc0d8d2eb59a036fa464cee65ce4489caf903dce17afafbc4f18dc9bbfd6c1a4be7b83485a6ca947defb1d35125d0773962a344a38b6dca9a40c31c1c4eb2d7f6818f978e573d66b990921b92b777471a4f6f05477ebc353ace1d86b00cc251777aaf6af3aa1179bff78df5048e5ef29968670e535483568d6bb16da829568f81c799b9afd4aad6ef085252c0ce3ac01ac21a9ea69bd58eadc66968f55dee386b653f3334efc398ef3c37a38ce93b21f107cc54dec26f53fee5604eb09a36afe6b665b6324a84c7da7b7dd01d9278e472f15a5ce9ff0fd93d0aa0604dd2df8d5bf6a912734ec51de77f0ce099ba11670210a6a206106b0ede2ded858a6bc411e7613e6f80e1aa52c323e30fa849951cc9b776e4cc58c90cfc8f442df64151a7fd4a3dd61a4336da21d03944635d3fd667be741ef45b1f7cb276d9f4de8107de64582f7917c6eab38e0a8890a4bee48bc92617a361cc7b1d25e089453ce0a52544f868dcb3249de761e79df63efa0794e3c4618c554753ee281c52ac8ad78d5338f0dac360a769381bb4a39f190b887b4723806ac4a4f2ff304bc6f9337ab54c866e6ba51df50c43eab52e2b39794c9917e0c31433f03681d2f1d93a0436018caaae20206a3458ad6c037acb511ef128f6dcd05305f07049a13b6c6c3c5b8170f158c8f12d46e160931ba18bd59ae129ec07a0655fa482ebbd3b850d36b832bbb775f538e3c1b3a43ecf94ca630ca15d502813eed3e35e8fd23d2ab638600427d1597cb29da2a5\",\n        \"signature\": \"697d4d897e0e2cc02bc1c2dda57f0dda620b37e861822bb7f1a701935e959ea0d8453f746fb92c087ed65d980eea1d6fdbf23e99b289aae0dcbb128ef836640a\"\n    },\n    {\n        \"secret_key\": \"66da8b254a37067378f68138afedd66496596a0585524c716bde2b3124c3e7d1\",\n        \"public_key\": \"85bde28a922ab5eeaa4a6294521a2ccac0ef2303dcdf8c7fee228fb4552012e7\",\n        \"message\": \"3fae36638837d0edc8dcee517e43c488ed57fa6c9853a745aaedfb109ec1409fb8a2fe51d23e0dd9fbfd94f91c18e6114d808901bf617d2667ceebd205c5c66f5d7534fd2ec33dbfe580ad919f504204eaf242af8700b138cfbe0f372919c06b861a27d720d09df20f4fb7b748e718b0fc486dbdfcb694cb3f1420035ac1be55d31f30f997a043d04708a5c542ee37c0f7fe0b3211d18a87033dcb15c79e6681c4970593d32a13c48f0a3af8bfc136e0f9b56a123b86c4c640b650cb7dee9a89e82aeeee773b5cb032fca41c20c407328bfed29244e46055a83114614d3db56581604b115fba14f618e102a1e16cb036ea69df9275b977a0858118c91a34b9a8519bd0dac3b61434ea088f381ba08bc1583189a4a7c8b6ad18f732d74eff3acef4b6904df58c6469432151372df9327ae71a0f356c94468dcfc2e4a5c0e4ec0b166d90cd465f9260ebd6a7a62ce6c715bcc715be0c7e1f28c4456012d33177a7d4113c9a5a22acfaf2d6b63309078fc1b1baa8f36c7e866c1f972a6500a5eea79201651a7305208b6c93c492bc77cacbc99c9cded179e664a2f4e16938cc26fca8b433eb8012f7b3ad19ba1fb858fe4a00fb3d1f8fd0eddf0c37dcdb2e5d35c2546f22e8c0f8ce90e2df8abf24827a019b2c33fc590bbe712f019287002bc2217c0dc0931dc8ed8f50bb442f8b2de27857362ce5a9fd97f0fd1b2b9251cad2a4aca1a94de2e953902d7228142407443b1d517107648a7bab83074987d0978bc61d419bc84591c969c3d6f4e86fc4738737bc0558755c110a\",\n        \"signed\": \"4082a5bc730fb54b6bd0bcd2a044ed5d3d327dc19ceac8825e629b9e6423cb1c614236f097a6b73d473947cb81c4e270852ee5f13a5b03dc18e1c9c27a9a68023fae36638837d0edc8dcee517e43c488ed57fa6c9853a745aaedfb109ec1409fb8a2fe51d23e0dd9fbfd94f91c18e6114d808901bf617d2667ceebd205c5c66f5d7534fd2ec33dbfe580ad919f504204eaf242af8700b138cfbe0f372919c06b861a27d720d09df20f4fb7b748e718b0fc486dbdfcb694cb3f1420035ac1be55d31f30f997a043d04708a5c542ee37c0f7fe0b3211d18a87033dcb15c79e6681c4970593d32a13c48f0a3af8bfc136e0f9b56a123b86c4c640b650cb7dee9a89e82aeeee773b5cb032fca41c20c407328bfed29244e46055a83114614d3db56581604b115fba14f618e102a1e16cb036ea69df9275b977a0858118c91a34b9a8519bd0dac3b61434ea088f381ba08bc1583189a4a7c8b6ad18f732d74eff3acef4b6904df58c6469432151372df9327ae71a0f356c94468dcfc2e4a5c0e4ec0b166d90cd465f9260ebd6a7a62ce6c715bcc715be0c7e1f28c4456012d33177a7d4113c9a5a22acfaf2d6b63309078fc1b1baa8f36c7e866c1f972a6500a5eea79201651a7305208b6c93c492bc77cacbc99c9cded179e664a2f4e16938cc26fca8b433eb8012f7b3ad19ba1fb858fe4a00fb3d1f8fd0eddf0c37dcdb2e5d35c2546f22e8c0f8ce90e2df8abf24827a019b2c33fc590bbe712f019287002bc2217c0dc0931dc8ed8f50bb442f8b2de27857362ce5a9fd97f0fd1b2b9251cad2a4aca1a94de2e953902d7228142407443b1d517107648a7bab83074987d0978bc61d419bc84591c969c3d6f4e86fc4738737bc0558755c110a\",\n        \"signature\": \"4082a5bc730fb54b6bd0bcd2a044ed5d3d327dc19ceac8825e629b9e6423cb1c614236f097a6b73d473947cb81c4e270852ee5f13a5b03dc18e1c9c27a9a6802\"\n    },\n    {\n        \"secret_key\": \"276548290f3e0f900515dc63366c03fe0fc6ee130c21fb60a4df9cf464797cda\",\n        \"public_key\": \"7e2a3578000a087edcc9e94fde509fc4be05ca0dd090df01ae1121123536f72a\",\n        \"message\": \"f0db442de29a7a1ded550d120002cc12abfff98b1f576d65bde16deaba687e4e0b0d5a8748d7503da2969c64d6a7c28d27b6c93ad257ce32ecdaee375f43fff97c432d453f7196c709c3bdfb7388d4d8eaf139f182940ce17b4552e2d20aed5557ba4d2acbf845730c0a66b45b40950baf6a946437af6c9e3b33a79e04dceae57c2a549542eabd216bf13948d41ffb9483fe29801fc8c1782840deeb3fb4da3192785bca13ed0a9eff57d6136bafbf9dec697b832447b2b6e730fa7f9995bac6b7832eaa09905ee49d465a5ee450f52d1a6d364c618144e886e8ef633dc79d0af893d16b3eeda0fefefd8759f2a0da1930170dd19eb78f0d7a7b74515403375a95bdbcce018bc1edb08d897bb798a95e7e86a52af3d9b8a4a14b0371d63498dcb2016248ebd0be800e9f21d549e5e0e7b4895ca5cb725a0cab27da8a8b1299be38a4260900ae10df5baba11ae2bab7179dd8453969429ccc4d416055f2bcb93c1cac6d7e804cf812df1462f22ee9e833a9769e8e677550402c4094df212fd2c5fcc09a72c7ce0077510073090d0e63db637d43d4c21f8619d34da5db08033f686ce8b8a0821222f95434ac4e6f703094edded6fb1b846e979650979d3c77453f40f7fee7c3e88a96fd1d702e81c2a4f3f3753c7964842dfd9d3958a743da063d1d648e51b210a28ed2487f14d5f1bc6f339b2dd17a661c39736da99e4a4f07360342d237e3813ea3998d66eb31a2d708af065c32b927f757c37a800660674e9717ba58f280eb2aa464fa74402108a5d5662e8d0feaf329687a\",\n        \"signed\": \"88a146261ad111c80fa4299577e710f6859cf0d1ca80e512a552c725b8384037eecf6465ce97585c9d660a41ab9104e5f7c9b2f8ec6fb21f1ddd50d65b9b660ef0db442de29a7a1ded550d120002cc12abfff98b1f576d65bde16deaba687e4e0b0d5a8748d7503da2969c64d6a7c28d27b6c93ad257ce32ecdaee375f43fff97c432d453f7196c709c3bdfb7388d4d8eaf139f182940ce17b4552e2d20aed5557ba4d2acbf845730c0a66b45b40950baf6a946437af6c9e3b33a79e04dceae57c2a549542eabd216bf13948d41ffb9483fe29801fc8c1782840deeb3fb4da3192785bca13ed0a9eff57d6136bafbf9dec697b832447b2b6e730fa7f9995bac6b7832eaa09905ee49d465a5ee450f52d1a6d364c618144e886e8ef633dc79d0af893d16b3eeda0fefefd8759f2a0da1930170dd19eb78f0d7a7b74515403375a95bdbcce018bc1edb08d897bb798a95e7e86a52af3d9b8a4a14b0371d63498dcb2016248ebd0be800e9f21d549e5e0e7b4895ca5cb725a0cab27da8a8b1299be38a4260900ae10df5baba11ae2bab7179dd8453969429ccc4d416055f2bcb93c1cac6d7e804cf812df1462f22ee9e833a9769e8e677550402c4094df212fd2c5fcc09a72c7ce0077510073090d0e63db637d43d4c21f8619d34da5db08033f686ce8b8a0821222f95434ac4e6f703094edded6fb1b846e979650979d3c77453f40f7fee7c3e88a96fd1d702e81c2a4f3f3753c7964842dfd9d3958a743da063d1d648e51b210a28ed2487f14d5f1bc6f339b2dd17a661c39736da99e4a4f07360342d237e3813ea3998d66eb31a2d708af065c32b927f757c37a800660674e9717ba58f280eb2aa464fa74402108a5d5662e8d0feaf329687a\",\n        \"signature\": \"88a146261ad111c80fa4299577e710f6859cf0d1ca80e512a552c725b8384037eecf6465ce97585c9d660a41ab9104e5f7c9b2f8ec6fb21f1ddd50d65b9b660e\"\n    },\n    {\n        \"secret_key\": \"972c0616556ef22c214868fdd822c55739e1f96a93ae83512afda9ca7aa74cd2\",\n        \"public_key\": \"9e1c6d4107f8ab8161c5db5b88a37ca1de9f4e291367abb1efc84f83f7076953\",\n        \"message\": \"8689e2f95c8fd50dc44664a18fb1a9f2c8f3ee73c0f9587ee28bfa35c9231c75bfd3d9534174e5ad3fa9f092f259942a0ff0ba2ca2cb59043d192ca8e3c8869bedd2354cbc5ac782d727c0b69407f68d1326df65a60c4d32f87f19a10f3d765ff923434f5511d134d397c4fef6bb1953abfce60827c359aa4b54f912aa8b17b83dcc7e3bcbc505ba046fe57c16dacf4ee2fad538bc06817c9b9d8dbc5f9d9bbf9f4a934f14a42c29e0e2f3a49f46b20ee76cfe20dea1e97450eb6a8fda048168dd827810207f005a3caa93ca11f4ee608a7a9355494313aec8d7075afc94c7cccc75c2319bb458c0ce373e9d007f753b33b52793d58496b2d25cd1dcd7832aac5ddb38f4db19c427219e1a0420ead47ba95ab6d89c65939041cc734c08eb6b476caf7fc76c598d947ff444b10770f62945ae65044f78098299e2626b638a7328d1b7daa5889e8db94bbff2ded62e14463760227c3f326ed493565ddf0a1761b8e4bb7d2410fa0fdbf35684397eefea95895889a0a9dffc5e02c092383b7ce74d2d90939916f26b71afd265f8bec74f0de247c9643905583df3cee23537d6b568c8338ce5fee42f7dd15dad5247f009acbfd5d769b6366959cd0ae150f58f7c80fa10d989ed90119372e5fea5da48a4e8ea9c727875dc4a2005b0dc2e3f697c0ce0a4bdb2f750c04fbc0c27d02dd8286e54c9c3959b6ffbdb1de2affe9e782651e5168a500afed037b3e1790ddd593851a6a6ccca9fffb4a99e27df43818871536ab04f14a06a1c7cb47bed6241ce7430ad3e640a726752fa06a9\",\n        \"signed\": \"54dd06fbb3d7c63f8cdaf783c2d7bac16b4c826e2d1b1807c84e049f64e271b21cfa3e37c344260287805d718806b62c56b47f6d5c508125c9fb5d5ea35fd5018689e2f95c8fd50dc44664a18fb1a9f2c8f3ee73c0f9587ee28bfa35c9231c75bfd3d9534174e5ad3fa9f092f259942a0ff0ba2ca2cb59043d192ca8e3c8869bedd2354cbc5ac782d727c0b69407f68d1326df65a60c4d32f87f19a10f3d765ff923434f5511d134d397c4fef6bb1953abfce60827c359aa4b54f912aa8b17b83dcc7e3bcbc505ba046fe57c16dacf4ee2fad538bc06817c9b9d8dbc5f9d9bbf9f4a934f14a42c29e0e2f3a49f46b20ee76cfe20dea1e97450eb6a8fda048168dd827810207f005a3caa93ca11f4ee608a7a9355494313aec8d7075afc94c7cccc75c2319bb458c0ce373e9d007f753b33b52793d58496b2d25cd1dcd7832aac5ddb38f4db19c427219e1a0420ead47ba95ab6d89c65939041cc734c08eb6b476caf7fc76c598d947ff444b10770f62945ae65044f78098299e2626b638a7328d1b7daa5889e8db94bbff2ded62e14463760227c3f326ed493565ddf0a1761b8e4bb7d2410fa0fdbf35684397eefea95895889a0a9dffc5e02c092383b7ce74d2d90939916f26b71afd265f8bec74f0de247c9643905583df3cee23537d6b568c8338ce5fee42f7dd15dad5247f009acbfd5d769b6366959cd0ae150f58f7c80fa10d989ed90119372e5fea5da48a4e8ea9c727875dc4a2005b0dc2e3f697c0ce0a4bdb2f750c04fbc0c27d02dd8286e54c9c3959b6ffbdb1de2affe9e782651e5168a500afed037b3e1790ddd593851a6a6ccca9fffb4a99e27df43818871536ab04f14a06a1c7cb47bed6241ce7430ad3e640a726752fa06a9\",\n        \"signature\": \"54dd06fbb3d7c63f8cdaf783c2d7bac16b4c826e2d1b1807c84e049f64e271b21cfa3e37c344260287805d718806b62c56b47f6d5c508125c9fb5d5ea35fd501\"\n    },\n    {\n        \"secret_key\": \"e0405d37893e89f53811d6d446e1f193f51afa1bbba725f95eb48033424a2509\",\n        \"public_key\": \"45104d595e443e8ce654de9d655054bf0a99d35613d77d57454ca2d1c899b517\",\n        \"message\": \"df58c4fd0702a20fafa3d1d4fe7d85938b120fc11e8d41b601f0e60e42236a49f126813bd512ee71359061e13eb314d417f56d6d560285fa8991213284c42bc2cef2dc937bdc0b5e9dc2269afab32db30e6849855951cfbc53ecfa01643863e0328995fe850c0db55421bfa564601b8c9db7552c7e6aa7adfa15a58021a84266e9595c65fca4a15fa70f55f5d212c9e277ffb830f4cad1861f3f495a9d672f5691310639c12dcd07e3ef17a23750bcb46b7ad7eac462eb512225f3be7e32f8f4987a11df341166062b43c63ab858a600497667fbb88e93c7e2e0aab41c09c023eb902ec3baf679e25b96e106921a914fd5de200a47889de23e7b65d0ccdf0c29036467a1210c0030309a2d04ec256d5a4d8b97d46a3e15f345b667170803cdacf6cb48add0a13462dd30fa062bd4566641da07d7f61e063686edd96bfe8f97b986b7c0e44249cd2d7317472999b8ee4ea80c902f3b188936712e89d8bf02ce8ae77b6b31abb0632065455ddd9f9d1cd953a4a49aac1a15169e687d4fd3f7c2edfb3aabc3b66155f7d315f8a294faddffdb4951367a0cb870759e85a838af66ba3fc103da2babc3f381696ef8882d85a8278d5fac3a72f16eb119ee9900b1fd986c2a9f94eed8e0d4f273697e4363a975ff6a7b80d5b4ec5355bf63b42b71cd4842401d38b5e00cc97bfda40e456653683bc8e6dade7dcf985a97b0b5776c4d72ca13a1474e4eb2eccfcd428786ddd0246d73a6377a79cb8da720e226c19489bd10cedde74b49fac2cfa207129c6a108aa164be9d809c4d31147360\",\n        \"signed\": \"77ddd491ca662ebffb12f7f492d7fbc1a1b447f6c85998f2f7cc9adce67de63b6eebd08117845a0302f7349714ba9db2af58048b85837d7660ec3debeee2d00fdf58c4fd0702a20fafa3d1d4fe7d85938b120fc11e8d41b601f0e60e42236a49f126813bd512ee71359061e13eb314d417f56d6d560285fa8991213284c42bc2cef2dc937bdc0b5e9dc2269afab32db30e6849855951cfbc53ecfa01643863e0328995fe850c0db55421bfa564601b8c9db7552c7e6aa7adfa15a58021a84266e9595c65fca4a15fa70f55f5d212c9e277ffb830f4cad1861f3f495a9d672f5691310639c12dcd07e3ef17a23750bcb46b7ad7eac462eb512225f3be7e32f8f4987a11df341166062b43c63ab858a600497667fbb88e93c7e2e0aab41c09c023eb902ec3baf679e25b96e106921a914fd5de200a47889de23e7b65d0ccdf0c29036467a1210c0030309a2d04ec256d5a4d8b97d46a3e15f345b667170803cdacf6cb48add0a13462dd30fa062bd4566641da07d7f61e063686edd96bfe8f97b986b7c0e44249cd2d7317472999b8ee4ea80c902f3b188936712e89d8bf02ce8ae77b6b31abb0632065455ddd9f9d1cd953a4a49aac1a15169e687d4fd3f7c2edfb3aabc3b66155f7d315f8a294faddffdb4951367a0cb870759e85a838af66ba3fc103da2babc3f381696ef8882d85a8278d5fac3a72f16eb119ee9900b1fd986c2a9f94eed8e0d4f273697e4363a975ff6a7b80d5b4ec5355bf63b42b71cd4842401d38b5e00cc97bfda40e456653683bc8e6dade7dcf985a97b0b5776c4d72ca13a1474e4eb2eccfcd428786ddd0246d73a6377a79cb8da720e226c19489bd10cedde74b49fac2cfa207129c6a108aa164be9d809c4d31147360\",\n        \"signature\": \"77ddd491ca662ebffb12f7f492d7fbc1a1b447f6c85998f2f7cc9adce67de63b6eebd08117845a0302f7349714ba9db2af58048b85837d7660ec3debeee2d00f\"\n    },\n    {\n        \"secret_key\": \"5756e752dff69e3eed848e4a49c7a8baca12154f9431dec35626ef8d75a44514\",\n        \"public_key\": \"5910ef00a5b354143c46561da62c41aa13d29c18dc6153bf8e502e0114007728\",\n        \"message\": \"eb2190a3219c792b6666b2752733ad9f86fc390155c4b438be196959383b25f3a749530d5a4b15ebe2c18d99178e6d45bb4aa2120f95a352e0406c63ac867248d9efba124231064873c82fe995dd031c7cbc7d15ec191fbb6c474dc4c777e8f457841eb4624841c152d15ede26e78479a6a25ffa335563f1064ef09558b910e2608418820f49554b670c6bab34d1d60984dea50ed6a375f45a74beadfb04bd9300bd594e2e20ea5d3052bb7ddc51a949a0047972682ebe66d38aac62927270de42150d58221d03b8ace3589933487bf23d29c5c2c843aefa2e1ca22f9d1680f80c766d143ce5ecef253a745cb71e72f6504ad911f7cb4a819cd074863a92706929a3142f8db7ac164102ac2ca0d2e19a725e1b5f81f443c73e0484f26a45a3aef84f1f3fa04a4ac695d2dab6efba456a281a3973cc186e680a66df521a4d1f9edf4dfb274a427097bf863281cfb0ed80f8d7676638d6cdac937843efbcfce91de1df6c52b594571b9315600e4b6552defb8437a807ba21298e3d972212ba314692917f40075311acd009395241b9f1b256c515735dc674f8e866d1eeb4c328548aee71231c4c9d5bd22e39de88d19fabf49f0b9869cbf835214b15522a93d3a5007b11f0b50e5228d4eebb4571b35da84f4f687e3f43793d54f3825b37a509ea564bdf217ff4adf6847bbea4316a1dbcc7448ecd5363eaabc128decf054ee1a0ee2d871979f8a63b2692b09f6e986a138e7f68f60aa426a1c9b01a4902e13b17bc8312410c28bed29b601b0fc9f3bc2d223f875251100f869c6b5844\",\n        \"signed\": \"8157d8334ded1a32699b350ac0d4120028cd8ef8189448934850e50ee4999d8fa2cd257646d92fba5d662a823e62208ab4fbe01714a848a0b90b55adcd246902eb2190a3219c792b6666b2752733ad9f86fc390155c4b438be196959383b25f3a749530d5a4b15ebe2c18d99178e6d45bb4aa2120f95a352e0406c63ac867248d9efba124231064873c82fe995dd031c7cbc7d15ec191fbb6c474dc4c777e8f457841eb4624841c152d15ede26e78479a6a25ffa335563f1064ef09558b910e2608418820f49554b670c6bab34d1d60984dea50ed6a375f45a74beadfb04bd9300bd594e2e20ea5d3052bb7ddc51a949a0047972682ebe66d38aac62927270de42150d58221d03b8ace3589933487bf23d29c5c2c843aefa2e1ca22f9d1680f80c766d143ce5ecef253a745cb71e72f6504ad911f7cb4a819cd074863a92706929a3142f8db7ac164102ac2ca0d2e19a725e1b5f81f443c73e0484f26a45a3aef84f1f3fa04a4ac695d2dab6efba456a281a3973cc186e680a66df521a4d1f9edf4dfb274a427097bf863281cfb0ed80f8d7676638d6cdac937843efbcfce91de1df6c52b594571b9315600e4b6552defb8437a807ba21298e3d972212ba314692917f40075311acd009395241b9f1b256c515735dc674f8e866d1eeb4c328548aee71231c4c9d5bd22e39de88d19fabf49f0b9869cbf835214b15522a93d3a5007b11f0b50e5228d4eebb4571b35da84f4f687e3f43793d54f3825b37a509ea564bdf217ff4adf6847bbea4316a1dbcc7448ecd5363eaabc128decf054ee1a0ee2d871979f8a63b2692b09f6e986a138e7f68f60aa426a1c9b01a4902e13b17bc8312410c28bed29b601b0fc9f3bc2d223f875251100f869c6b5844\",\n        \"signature\": \"8157d8334ded1a32699b350ac0d4120028cd8ef8189448934850e50ee4999d8fa2cd257646d92fba5d662a823e62208ab4fbe01714a848a0b90b55adcd246902\"\n    },\n    {\n        \"secret_key\": \"b904acb19e5cf872d3640cd18ddf3c0b6657e0117ce659dbf50259015d3fbf32\",\n        \"public_key\": \"e04a8aa56d1818483b10d0a7c919e1d5d8001e35510e1ec62f7114dbe81ae0be\",\n        \"message\": \"83f4124d5af955139b1bc5441e97c5fac491b4ea911407e15420a0347ed7fa1f8819e36c8ed5740c99d4505a78b619d560749af50b0573510816d61322cda976a5d4ca3205f5f0e60e759a5df1a0bdf36dfe9717906ac57cbfc970ab43b6fa18e6c0006c84fc7254470a0b774727bf5f8e679423a531e41cb5310f9bcbf5a5445ebc39fbd909ce11e97bc2f66a4a1bb6c2f167f2c6e80eb9b8b72df3e8cfd4e51448dc14c0b837f2949693d1d054c8f95bff7f1e364567d034f2223e1594772a43dcfe0597fd6d133b3f2e96ffc5667dd5928f23ec3c750f845993a34e9776159a6830d6fd9013ee7aeaa1fccd69b96df284704fd08888b15b64e2e90d578c5cfc0f95693f6ab65c6947446a857c029c7ca66080b754c7734b78998abe9b7cc6efd09a4418194d88b34ec6c33af630db81de5b99fe65aac8b73362379119c700d107edfc19f270760468ee8e5f155d9a347e57b5930f327a8d11c6674ddd020f9e7d9b761dba5b83a87302f1833e5abd49526d66391e5bf0e35b4453d630bf7d0adbfe501aef81e6c5938f92cb752f5f14d2806f90ae1546051ccc7f913c5d6a38ff3b7b9a23662ef1f00808edb2fa31ecba5c8d3387e87541cd0616edbf3aaa35a537922861f44cbd9f992b8246d9c64c419881701ab43f7fd464210d802ba656d95c0f24a34599b20b1ec20011485cfcb3186b7bcf69d74581a7a3eed6134c4eecd65574a4320d9c57a849c4e78c8a5ce82505004a54f19d4bdc8223401b34946b7d66e47e63cf9d0f57d0945491384bc6868c4b478690e550021df1\",\n        \"signed\": \"9aaf8ac97140d5508d58f5ac82b7fd47e6b1f68a7c78a2ac06f0416ef8e991953f62c47fd5fbc6c1e01bae1c92a33ef52b7efa5f17bb8633bdc1aeebce318f0f83f4124d5af955139b1bc5441e97c5fac491b4ea911407e15420a0347ed7fa1f8819e36c8ed5740c99d4505a78b619d560749af50b0573510816d61322cda976a5d4ca3205f5f0e60e759a5df1a0bdf36dfe9717906ac57cbfc970ab43b6fa18e6c0006c84fc7254470a0b774727bf5f8e679423a531e41cb5310f9bcbf5a5445ebc39fbd909ce11e97bc2f66a4a1bb6c2f167f2c6e80eb9b8b72df3e8cfd4e51448dc14c0b837f2949693d1d054c8f95bff7f1e364567d034f2223e1594772a43dcfe0597fd6d133b3f2e96ffc5667dd5928f23ec3c750f845993a34e9776159a6830d6fd9013ee7aeaa1fccd69b96df284704fd08888b15b64e2e90d578c5cfc0f95693f6ab65c6947446a857c029c7ca66080b754c7734b78998abe9b7cc6efd09a4418194d88b34ec6c33af630db81de5b99fe65aac8b73362379119c700d107edfc19f270760468ee8e5f155d9a347e57b5930f327a8d11c6674ddd020f9e7d9b761dba5b83a87302f1833e5abd49526d66391e5bf0e35b4453d630bf7d0adbfe501aef81e6c5938f92cb752f5f14d2806f90ae1546051ccc7f913c5d6a38ff3b7b9a23662ef1f00808edb2fa31ecba5c8d3387e87541cd0616edbf3aaa35a537922861f44cbd9f992b8246d9c64c419881701ab43f7fd464210d802ba656d95c0f24a34599b20b1ec20011485cfcb3186b7bcf69d74581a7a3eed6134c4eecd65574a4320d9c57a849c4e78c8a5ce82505004a54f19d4bdc8223401b34946b7d66e47e63cf9d0f57d0945491384bc6868c4b478690e550021df1\",\n        \"signature\": \"9aaf8ac97140d5508d58f5ac82b7fd47e6b1f68a7c78a2ac06f0416ef8e991953f62c47fd5fbc6c1e01bae1c92a33ef52b7efa5f17bb8633bdc1aeebce318f0f\"\n    },\n    {\n        \"secret_key\": \"8a3501b76953603c9033e3bcbf3ec378d257011a6c50b89762d491eaa72c5e0d\",\n        \"public_key\": \"778f2019dcd8dbb86c6737cc8dc190c5a04c50b5bf4588bc29fa2a47af252672\",\n        \"message\": \"e609f1224a6a451140cbc0254d432ce5fddd08a8e912f81c412fdfd5182ff6ac2f13c576c8145b15f25b409d853f914409e4e02cefc39d9bef4a2a060498570b2d3a2838c9b0b8e3af4fc37e1915f804a80188585b30b68a3ffb2e960c7320e827d2fe36e6a328cc6e7806348adb0b773b784de529bb6f64751b2105859494fd49db0bc7f62df46b9d7ce676975cc5f43856498436812e04f26fb8b8ab7eba12f1d56722eb82ebfafa4735977a26681cb03fa4bc6951ab9cbdf787e3278f2f57f29e12095f8ca2a178cfa7571337f0274237669f97657d4badb39436d786492580fd55d86be3a0cd17d16057017baaaea00c1e14552159bcabc0e666bad3418e4ec13bfe163be256f0c89bc2344a8ddf99ca8160b189875ad322d90f581325281d5389965c0a7b7bcae2294a3cbe35a4e4e83b54c4276353960fad118532d49b7076f25ad190ab5694914f7108b0ab6969a19128fb0aef00e65a04fc832d07696167b9342b355ec57737ca37cbff3bb31931cb58712a4c468952c6459d567a26e79501e4e31b1b0953537632029e9b490f72e5a6e057ddb4b31756fd9704218b1b8f4dcb5430c025042f47169bfc7c80d71cab8ca07f340afa008abbe2e3a0abe141da8d41ca6bd69d36fdb11a41ce0b72fabc00d97ea605270010b259df8e10dd22dc17c13990a05f0233e3ca856b40971cb3e21c8b3950b13fc84e1f266c2a6fbece88d59725c3cfb2225dbc1ee95b686db704fc937b766f0a9bfe95a42b9010f1229c610d7ede095712c8f0f1fb0047c040a870306cd8dc74c4da51bf\",\n        \"signed\": \"a8a309ba52125e76a4a61eb43fd4135c41ab11799b91cc54ffc9c6a20f050cc595b28143c874bdb928beed261d9c0f12aa192e6640bfdad54ba0d478426bce09e609f1224a6a451140cbc0254d432ce5fddd08a8e912f81c412fdfd5182ff6ac2f13c576c8145b15f25b409d853f914409e4e02cefc39d9bef4a2a060498570b2d3a2838c9b0b8e3af4fc37e1915f804a80188585b30b68a3ffb2e960c7320e827d2fe36e6a328cc6e7806348adb0b773b784de529bb6f64751b2105859494fd49db0bc7f62df46b9d7ce676975cc5f43856498436812e04f26fb8b8ab7eba12f1d56722eb82ebfafa4735977a26681cb03fa4bc6951ab9cbdf787e3278f2f57f29e12095f8ca2a178cfa7571337f0274237669f97657d4badb39436d786492580fd55d86be3a0cd17d16057017baaaea00c1e14552159bcabc0e666bad3418e4ec13bfe163be256f0c89bc2344a8ddf99ca8160b189875ad322d90f581325281d5389965c0a7b7bcae2294a3cbe35a4e4e83b54c4276353960fad118532d49b7076f25ad190ab5694914f7108b0ab6969a19128fb0aef00e65a04fc832d07696167b9342b355ec57737ca37cbff3bb31931cb58712a4c468952c6459d567a26e79501e4e31b1b0953537632029e9b490f72e5a6e057ddb4b31756fd9704218b1b8f4dcb5430c025042f47169bfc7c80d71cab8ca07f340afa008abbe2e3a0abe141da8d41ca6bd69d36fdb11a41ce0b72fabc00d97ea605270010b259df8e10dd22dc17c13990a05f0233e3ca856b40971cb3e21c8b3950b13fc84e1f266c2a6fbece88d59725c3cfb2225dbc1ee95b686db704fc937b766f0a9bfe95a42b9010f1229c610d7ede095712c8f0f1fb0047c040a870306cd8dc74c4da51bf\",\n        \"signature\": \"a8a309ba52125e76a4a61eb43fd4135c41ab11799b91cc54ffc9c6a20f050cc595b28143c874bdb928beed261d9c0f12aa192e6640bfdad54ba0d478426bce09\"\n    },\n    {\n        \"secret_key\": \"42b53652d08b5d766e66ad8f3ebf693cfd77907cadd98b5466df77dfa2c637ad\",\n        \"public_key\": \"88463bb8a4b6388d924cb86209834195435d79d77f8c02f46bbd16d82efe42b3\",\n        \"message\": \"9ee913c74ee3c5e8c90d64b8ae3a60049fc765e176060bcd1cd09f0eda60bf23badb8a1caac3d66ebc5268146ee4a54e1eb231ed25eff95b90a6e98337a540a3f48449794a4873bfc2e84728966bb7c6ff676a2ff57311c1c25e15fbf3d40e9f25ab5db91fddb7a0ae436c8ec070754b6d743aa1d6048fb5bd7f5b8e4ccad20328389530f11374a489b1d50531a39c9b32b40369626006d264a99eec4fac1341f4e74679457b418e6bbfba233f1ca158f7b29d40d50301f9d92536fdc5c23fe5dee4d6df0ebf13dfa3754a14c856009adea1dda409304c1f60d25330fb10957947a00508f2fd76422eac694cc39fa8ae7fcc77a02fd9ee5f910d93e8aac68f145dd878876ba8eda0a49fcb209c34ea220d4d0605546fc4a809baf010d533e45d17b0e16a46e91ea6fec2cdc5a8b3ec5014b25e92d8e5c928ab06993d4fe23ac8d45c890378dd133f00edb937c071f75cfc13a402e3e429a848652a175c9b6f6eac86f6188a4448a96ce2872e5f65f9bdb87166c9b87a7e958e80bb6566e3fcf871190cf4a867e612cfc1e4371d2b73d2a0ad0aa400ba69e66336233b0f3c52b8a68bca05125601255046e6f49d688d2db85c7b821270516e3c0613f3f23f9c57cb4c8714285cdf95e106a3b5afcaeb81b72f343e87bd92f1581dcf9aa90a024fa4a1048059e30de8ff0d16794dcd745d2b2d534c520f8278538674a934c6f14a8428e3da018a36e45aa5827cf4b15284346fd69363149219bb0d1bc927d8d193c482692f97dc88d8ed337d0c9dc99c7a5e111dced42250d580e20692bb7b88\",\n        \"signed\": \"30c4b99e68ec3351308fbc76d9caf0af6221b596b7017fe10cc633023ba97f023896fe322baa347660610e05fa493d218fa360f18d93e275d1eff666b63db2049ee913c74ee3c5e8c90d64b8ae3a60049fc765e176060bcd1cd09f0eda60bf23badb8a1caac3d66ebc5268146ee4a54e1eb231ed25eff95b90a6e98337a540a3f48449794a4873bfc2e84728966bb7c6ff676a2ff57311c1c25e15fbf3d40e9f25ab5db91fddb7a0ae436c8ec070754b6d743aa1d6048fb5bd7f5b8e4ccad20328389530f11374a489b1d50531a39c9b32b40369626006d264a99eec4fac1341f4e74679457b418e6bbfba233f1ca158f7b29d40d50301f9d92536fdc5c23fe5dee4d6df0ebf13dfa3754a14c856009adea1dda409304c1f60d25330fb10957947a00508f2fd76422eac694cc39fa8ae7fcc77a02fd9ee5f910d93e8aac68f145dd878876ba8eda0a49fcb209c34ea220d4d0605546fc4a809baf010d533e45d17b0e16a46e91ea6fec2cdc5a8b3ec5014b25e92d8e5c928ab06993d4fe23ac8d45c890378dd133f00edb937c071f75cfc13a402e3e429a848652a175c9b6f6eac86f6188a4448a96ce2872e5f65f9bdb87166c9b87a7e958e80bb6566e3fcf871190cf4a867e612cfc1e4371d2b73d2a0ad0aa400ba69e66336233b0f3c52b8a68bca05125601255046e6f49d688d2db85c7b821270516e3c0613f3f23f9c57cb4c8714285cdf95e106a3b5afcaeb81b72f343e87bd92f1581dcf9aa90a024fa4a1048059e30de8ff0d16794dcd745d2b2d534c520f8278538674a934c6f14a8428e3da018a36e45aa5827cf4b15284346fd69363149219bb0d1bc927d8d193c482692f97dc88d8ed337d0c9dc99c7a5e111dced42250d580e20692bb7b88\",\n        \"signature\": \"30c4b99e68ec3351308fbc76d9caf0af6221b596b7017fe10cc633023ba97f023896fe322baa347660610e05fa493d218fa360f18d93e275d1eff666b63db204\"\n    },\n    {\n        \"secret_key\": \"14cfe00fa7190ae810888ae2bbd0ff6412cf1fd408a308294383a19453b59073\",\n        \"public_key\": \"4e61afe8c174b6ee1a29fa09cf87b4008139f1070bc8531b6d06f54c9562a4f3\",\n        \"message\": \"bc66f801daa829858e740293d4d2187b8e1a5afba5fd67b10956c65346aca94429d32e4cfb3584ab0e005d0dd742781d47e89447c4e1d81bf7e6154f8f73af03361ad56ea3c06000754b9f327d4edeacc4d348afb54823e1c9d49cd8ff2b19f42021b40d580c39ce3d243661b85421fec915ba9dd2762f850bd208fdbf20ffaba56a468660f17c00fb1c0f4e8527a509dd4eec13360cf6e3cac542b875182f2a7ce7be0a33302fe26d3629629384e35c06789de634e90e964fbda8cbba98111e22e8d0762684266aab76aeba4a380778696814a1e311943cb3505892640c44e3aac4530c50ac604a8d2ccc7ceabffea4aa3d7f48a66dcd7588b80209dbc173f0c663e8fc87a36e892ec9a3ff8f60d2e0d8704e5b6cbb873275151ad4cc0057165031905039651ca10a95c6fda3b27827a657ef9a5fc3eb5b53cac61ddaf5a41704c878570cbc3c41c475b117c05eab0bb196bcb7c43334debd64b9e37450d23f5c10161ec5ab4fccd7cf308e2a9995cc9e578b85e8285a5208b9efd42af9cf2ac2b3b7464254889a2187317e32499709b913953ad46f1c23e1b6b56f024c4a7d48461192c01c56c54c564791ec0a67b61acbf957e6d0d7da8053ed13a41893d767fc5737cd195553da5d5b07065f47d72a35c42b001eb6dbd0f8e77a4b76a6266192647f4155ea11bd1237ba77c87c62bf4b01149fc58bc28f0b5a286485d3717d323964046218e70c7e38b7d5e74ba6b12b022f18197d92c13bca89335c856cbc5756aa3b64ec1f46e396b1161c871cd2dfded1a4ec9192742937c0704531c7\",\n        \"signed\": \"f785a46f69bbd099fa011124ba9032c189742c9e001dbb8781d8223345a9569dc144ca694d90245e0e513e88ab023f7f0f99b7416159758dd034e7a89cff3600bc66f801daa829858e740293d4d2187b8e1a5afba5fd67b10956c65346aca94429d32e4cfb3584ab0e005d0dd742781d47e89447c4e1d81bf7e6154f8f73af03361ad56ea3c06000754b9f327d4edeacc4d348afb54823e1c9d49cd8ff2b19f42021b40d580c39ce3d243661b85421fec915ba9dd2762f850bd208fdbf20ffaba56a468660f17c00fb1c0f4e8527a509dd4eec13360cf6e3cac542b875182f2a7ce7be0a33302fe26d3629629384e35c06789de634e90e964fbda8cbba98111e22e8d0762684266aab76aeba4a380778696814a1e311943cb3505892640c44e3aac4530c50ac604a8d2ccc7ceabffea4aa3d7f48a66dcd7588b80209dbc173f0c663e8fc87a36e892ec9a3ff8f60d2e0d8704e5b6cbb873275151ad4cc0057165031905039651ca10a95c6fda3b27827a657ef9a5fc3eb5b53cac61ddaf5a41704c878570cbc3c41c475b117c05eab0bb196bcb7c43334debd64b9e37450d23f5c10161ec5ab4fccd7cf308e2a9995cc9e578b85e8285a5208b9efd42af9cf2ac2b3b7464254889a2187317e32499709b913953ad46f1c23e1b6b56f024c4a7d48461192c01c56c54c564791ec0a67b61acbf957e6d0d7da8053ed13a41893d767fc5737cd195553da5d5b07065f47d72a35c42b001eb6dbd0f8e77a4b76a6266192647f4155ea11bd1237ba77c87c62bf4b01149fc58bc28f0b5a286485d3717d323964046218e70c7e38b7d5e74ba6b12b022f18197d92c13bca89335c856cbc5756aa3b64ec1f46e396b1161c871cd2dfded1a4ec9192742937c0704531c7\",\n        \"signature\": \"f785a46f69bbd099fa011124ba9032c189742c9e001dbb8781d8223345a9569dc144ca694d90245e0e513e88ab023f7f0f99b7416159758dd034e7a89cff3600\"\n    },\n    {\n        \"secret_key\": \"ac0f7f0418de67e348fa6d5686c46d21ca72622ee69eaabe00d5c9075a34f179\",\n        \"public_key\": \"feabde08f00a2b682bce9d45990bf45afc958339dc44106dad33b2c490ef7090\",\n        \"message\": \"e8d0e8325335e0f35a85467beed1e11c6a2078c35ae4a4a10543ede40c1712bc952012d2f8fec105aef7c6c65b3634b4a74b22b498b913507d1f6cfde83858e6830c0af4f464a6899d5c4e279aff36754c21da80a1bbd1dcf46220375b1e112a5a72f1ab6e8f641942f66d9bbdbb179cf0139ea8deb0f4b814f50c513329a1a0e267c4433a233182bc4a2acb2c6d4f00b24094d3bdc0eb81cf37d38260c2107dd9490613d276ee1f72266c6e4acca5249811a0f8a7dae66aedb75c3df4c8ca3cb5d9c567ba541ee5a9140c50587272af34530ab8b08b9ec032eac06039e692630e2d554df77c1a0388b3caaa3be3754a84961fb299e402227158ce363eac26478d479775e5685adbf828bb355e3c89cce241503c15366432ba94cd3cd95479144b636e0de70b3f16d1a3ca518e399009a4c247a7f96367c7146608aacc0014fc35b84af9933f09babb89937abb8ced111891343ddb79f60b78898ab5938f8ba3814bd8002605b1dfd297fa07c475a0d4f8f4451acd707de8af6c0e8818833a3abe5c96d1a8c6c96e2cb63328eba44dd1d34684e412f288e065209d11eb8094d22e4cc802629ccba33926bf1ad36a6285138abee05c5a39a475f3fdd0b3ec8c370cd957a8379ec2cdaf03e895c1ba12b449d6cd8be0f35d99e2b7fbaa92dd54e64e7c35ceb88a71a680527cb373afe14cdd158a0b90bf2daec80d2edbdc3128cd6b63fa532a1c278cdfe0f8ebb4abba5e1a82bc5c3fed15c5795bd9ffb576082cc479fa1b04c5c5afcad269a0f1addfe76042c3a8f1f25377b6cb72ec1614eb6383\",\n        \"signed\": \"7591cf8257bead39a1ad3ba1918d518e6724356bf625a573eae501d1af946c13c290cb63156ec9d362726ee50b39fc0a7a2bbd69d4a81b75932a90f8c7ac7d03e8d0e8325335e0f35a85467beed1e11c6a2078c35ae4a4a10543ede40c1712bc952012d2f8fec105aef7c6c65b3634b4a74b22b498b913507d1f6cfde83858e6830c0af4f464a6899d5c4e279aff36754c21da80a1bbd1dcf46220375b1e112a5a72f1ab6e8f641942f66d9bbdbb179cf0139ea8deb0f4b814f50c513329a1a0e267c4433a233182bc4a2acb2c6d4f00b24094d3bdc0eb81cf37d38260c2107dd9490613d276ee1f72266c6e4acca5249811a0f8a7dae66aedb75c3df4c8ca3cb5d9c567ba541ee5a9140c50587272af34530ab8b08b9ec032eac06039e692630e2d554df77c1a0388b3caaa3be3754a84961fb299e402227158ce363eac26478d479775e5685adbf828bb355e3c89cce241503c15366432ba94cd3cd95479144b636e0de70b3f16d1a3ca518e399009a4c247a7f96367c7146608aacc0014fc35b84af9933f09babb89937abb8ced111891343ddb79f60b78898ab5938f8ba3814bd8002605b1dfd297fa07c475a0d4f8f4451acd707de8af6c0e8818833a3abe5c96d1a8c6c96e2cb63328eba44dd1d34684e412f288e065209d11eb8094d22e4cc802629ccba33926bf1ad36a6285138abee05c5a39a475f3fdd0b3ec8c370cd957a8379ec2cdaf03e895c1ba12b449d6cd8be0f35d99e2b7fbaa92dd54e64e7c35ceb88a71a680527cb373afe14cdd158a0b90bf2daec80d2edbdc3128cd6b63fa532a1c278cdfe0f8ebb4abba5e1a82bc5c3fed15c5795bd9ffb576082cc479fa1b04c5c5afcad269a0f1addfe76042c3a8f1f25377b6cb72ec1614eb6383\",\n        \"signature\": \"7591cf8257bead39a1ad3ba1918d518e6724356bf625a573eae501d1af946c13c290cb63156ec9d362726ee50b39fc0a7a2bbd69d4a81b75932a90f8c7ac7d03\"\n    },\n    {\n        \"secret_key\": \"b5a7c767936380b3e98751cafd3ea89b388a32cf828b321c5bd0cc8dd85baf00\",\n        \"public_key\": \"be7fa65f1f6be51027f8b848db7a8c404961bf1e21a23df23bb8ce05850cdaa1\",\n        \"message\": \"6b67c795d66fac7bac8442a6c0992cb5758843b3e3939e3c276c6e9008da82007677bf9e67e9ac5a1a0f486beac0d856191fae25a127392bed469bc78deb0c4b893f67f1716d83509077e4a1bfd4136d03152dcc3b76d9524940a6064c669fbf51f6b91034b6d5f2898678a13a2470f6641ec802457c0102c3ebf6345c327e741b80644b3a99bf72b59ab8016f35d25188a085750dc060e5a8d524ae213f078f288c7b34bc41f3ce356bf2dafdd2e0db4fb8d7c2c319f9906005971702e49ca62e8050540d4121d242f2eeab1bd134e60bf11b3ec71f7765a97c0e098455e59d2235d6b37e7c9f5b21fa112c3ba39e4ea200614f58dfb3eb7b836f0bec1ddd438d1422450ae7ded1df9d71e5d9bc8fa3b6e6f78446ce7c79d0bcfb1c2d26c6fece68682dffc60a9c6e0ad05f2a09f21d7523251cb0c3d08efbbf8ac16339d717024d676024c1ee3c1f62c5aeab7fff937c57454df7bd96f9844a2a399958418aaa6f1848bebf7bf1292c24eb5cd8ea56340c5beb2688024a6953275be6efd1b71ba8be6eb77f0c65a7c5111b96c4c1f39cb7aaf83fdaae8d148d7a8af40ae9e651919f7ce28c8b2b6e45e4d3d56fdd54d00c2412790cbd6f80e10819e0b8f37c84fa004988adafccbbc21c63d6bf2e732d9dd63bd49b0412b9674e1e88f6142f7f867f1f26891b22430423cec4db91b61c2abc5c8fbd46b8b93596fc5160683136e21129822796eb5ea088e0a7d8121b25572e3ec37743d1ff6d8d1c3536439a10e84a665f2c75ee73cdc6ffac4cc28724469f7970b47507df3e1b14d477aec2bb20\",\n        \"signed\": \"60e4d23f1f08fce466c9915dded93256b52b327e5f81fbb31d1d10d321c390366ef001fd759aa9d0a55162d5364d918b48c7327e77cf5358bc4319e325cdd6086b67c795d66fac7bac8442a6c0992cb5758843b3e3939e3c276c6e9008da82007677bf9e67e9ac5a1a0f486beac0d856191fae25a127392bed469bc78deb0c4b893f67f1716d83509077e4a1bfd4136d03152dcc3b76d9524940a6064c669fbf51f6b91034b6d5f2898678a13a2470f6641ec802457c0102c3ebf6345c327e741b80644b3a99bf72b59ab8016f35d25188a085750dc060e5a8d524ae213f078f288c7b34bc41f3ce356bf2dafdd2e0db4fb8d7c2c319f9906005971702e49ca62e8050540d4121d242f2eeab1bd134e60bf11b3ec71f7765a97c0e098455e59d2235d6b37e7c9f5b21fa112c3ba39e4ea200614f58dfb3eb7b836f0bec1ddd438d1422450ae7ded1df9d71e5d9bc8fa3b6e6f78446ce7c79d0bcfb1c2d26c6fece68682dffc60a9c6e0ad05f2a09f21d7523251cb0c3d08efbbf8ac16339d717024d676024c1ee3c1f62c5aeab7fff937c57454df7bd96f9844a2a399958418aaa6f1848bebf7bf1292c24eb5cd8ea56340c5beb2688024a6953275be6efd1b71ba8be6eb77f0c65a7c5111b96c4c1f39cb7aaf83fdaae8d148d7a8af40ae9e651919f7ce28c8b2b6e45e4d3d56fdd54d00c2412790cbd6f80e10819e0b8f37c84fa004988adafccbbc21c63d6bf2e732d9dd63bd49b0412b9674e1e88f6142f7f867f1f26891b22430423cec4db91b61c2abc5c8fbd46b8b93596fc5160683136e21129822796eb5ea088e0a7d8121b25572e3ec37743d1ff6d8d1c3536439a10e84a665f2c75ee73cdc6ffac4cc28724469f7970b47507df3e1b14d477aec2bb20\",\n        \"signature\": \"60e4d23f1f08fce466c9915dded93256b52b327e5f81fbb31d1d10d321c390366ef001fd759aa9d0a55162d5364d918b48c7327e77cf5358bc4319e325cdd608\"\n    },\n    {\n        \"secret_key\": \"e136f398a605d13457848cead07c7286f42e2f28df8c128a3d0bb72b29aacc19\",\n        \"public_key\": \"6aa5045a66f772a571fe3e42d117efcdf6c49591996186012fa98f7c48e0cda7\",\n        \"message\": \"d328579de4c5372f3b382c48011b2d4c6029f904f3a33e07d083d7e2b03756af2c4c97a2d66c10ec4154d874792042b646e4aae5101d501bd1bf6f511751d0aaf821cd7c0b3ee6d0d7c690a2777fe16bdc7e49b7da4bbb4cce3b618ee9b6f2e3a19240cdb70733b984b1c940ec66960b728cbb874b80643123722db9dbbe88322008931b1c894ef5d21099e63e7c65007acd61784db4994a2fb40c3efe9c47fad63763dde06fa017a26b82e71b9daabc4ff0f6c79b8ca7ccb4dc2031bef1087367c7086974a00566de41a71e11d993abe433569892b8f75d7637993245c884478abe3f95f44b0a4bbedefef8906b75e0d34020ae536455b0e06f9bfee11ec9b8604bac2cc6ebe08c8fd5f5cccccbc1617b7cf69a3c512e1f0bdb585df5e12743061f7c2053bc37144361c0b35fd39d56b1efaf92c610360193ec20598b82858050a6d99e082bcefdbd5318ee5efb3b260f3276f3c73f9c24ce0cda33c7acc50ca5dd61bdb85d793825f6732a6e330ce672ac44fe6b2b9afe6e2e965c02d2a1fe0b57cb1b317c1d313efdc356492fe896fd149dae51c95ccdbb7d11f7d610e0c6e2fd3e57fcfef1c57c7119a0af6c7821fecdb89d80302b49fad41743f3d2d7a075154b3143e51aeb947d4b5e8b7e4ca86fec3e80bd9a786e4e46ed1e6e9f7e0b635266d9fa097aa9e20f32e3d2772d7c1f008bcdd3f92c7283c57790c3622cbad3ca35803c45c869dc377ff36bd7c0e6f1bb892f7329a6e08df1dbebc81dc7b115f852e36ae5d928725fa7c6fb9f28b0fb394f9e38fd87625c5fa23aaba47054e8cfea\",\n        \"signed\": \"75a45c6b9566899829b41ee517b7045a473a4f7a2641439b5d7c5673e00d8f5c066f1291f85deada0502bd16e9709f827d4751f2873862e8219e57746a19a900d328579de4c5372f3b382c48011b2d4c6029f904f3a33e07d083d7e2b03756af2c4c97a2d66c10ec4154d874792042b646e4aae5101d501bd1bf6f511751d0aaf821cd7c0b3ee6d0d7c690a2777fe16bdc7e49b7da4bbb4cce3b618ee9b6f2e3a19240cdb70733b984b1c940ec66960b728cbb874b80643123722db9dbbe88322008931b1c894ef5d21099e63e7c65007acd61784db4994a2fb40c3efe9c47fad63763dde06fa017a26b82e71b9daabc4ff0f6c79b8ca7ccb4dc2031bef1087367c7086974a00566de41a71e11d993abe433569892b8f75d7637993245c884478abe3f95f44b0a4bbedefef8906b75e0d34020ae536455b0e06f9bfee11ec9b8604bac2cc6ebe08c8fd5f5cccccbc1617b7cf69a3c512e1f0bdb585df5e12743061f7c2053bc37144361c0b35fd39d56b1efaf92c610360193ec20598b82858050a6d99e082bcefdbd5318ee5efb3b260f3276f3c73f9c24ce0cda33c7acc50ca5dd61bdb85d793825f6732a6e330ce672ac44fe6b2b9afe6e2e965c02d2a1fe0b57cb1b317c1d313efdc356492fe896fd149dae51c95ccdbb7d11f7d610e0c6e2fd3e57fcfef1c57c7119a0af6c7821fecdb89d80302b49fad41743f3d2d7a075154b3143e51aeb947d4b5e8b7e4ca86fec3e80bd9a786e4e46ed1e6e9f7e0b635266d9fa097aa9e20f32e3d2772d7c1f008bcdd3f92c7283c57790c3622cbad3ca35803c45c869dc377ff36bd7c0e6f1bb892f7329a6e08df1dbebc81dc7b115f852e36ae5d928725fa7c6fb9f28b0fb394f9e38fd87625c5fa23aaba47054e8cfea\",\n        \"signature\": \"75a45c6b9566899829b41ee517b7045a473a4f7a2641439b5d7c5673e00d8f5c066f1291f85deada0502bd16e9709f827d4751f2873862e8219e57746a19a900\"\n    },\n    {\n        \"secret_key\": \"97b6702e246805dbcfc7fa424a8caabcf262d466a05e0dd2d4e7c374d57d5251\",\n        \"public_key\": \"a716c3d5ce78f4d9c5bee3447ddaf4881c986efdf667ac8977b4fb69b5a7110a\",\n        \"message\": \"eaa86cf76fcb65c6f9fc208ac36f28b200d3b403aca73207461d8d96afa246d7c69d17a7a9bf77f05543563a7d3eca1d4079e22938aba1f6e9e04b49fbc8ed6f63b599730de9979831c02f8cba61e55560d7110d4c6e61679706a7155d5a673c54d16fe4d228c2eca7546faa1339f26d7a0bb4ee339611afdec9a68f5ff5b5d203b600533ad5a3b368c85da11563f098cc26871e7fa99aefd38cc26151db3b0bae38db6a87b6789e5840b10884af511f3ecb3ecbf94ff86fdb905505a8c34b2aa61ff2ec9ec8febd1dfed0965b6fc5b9f8869dc3a47559974a8822996706daefbc6c5bf984ce06b0d32b31cf9d8ad136aed4b052586dce7073b767b234e4a37bebbc393dd2e0f7d155173548c38a1583ef94e0aa84e7fce04fcc9b4e300ad099449a49232abdcf3d1a6e6fcab696f5996f9bd1b9485d074755ac5b4297fee3124c7c03976a40d570beaec2fac992339f885f74d40ed4ac87a4f40cefbc4864f44c3683aa8f1026e2c37aeffcebfdfe24dd0b019c36a79888203004b2ad83e89221f3f636f455bb64e17d1754c7c6dd7fc09a0d65dddded4622fc4f9fba072b45103435e10220a586f15226d2eb377f4064d3ff37cbb4705a1faaf5b348f8c0ef7fd1564d428688f58f3392967cf396a8ff2fd9e7b517b7d6a5ede7440373d8cc1a839900e84d42254283d9699c7ca37e477692a3494008b80444c5cf614cbbc169bfb9296303c645e2ce28d168dc6cbaefae9c73191f57151aa473009d29e1800b10f4c498609ba11520985c78092058696fdbca9c020e2dfb8a043a3de8e452d58cd1ad\",\n        \"signed\": \"90005541dcc1d7ab837f4de5393fadd6a92b26a7d93af3f669e0f1bfd621cbd00c8a23056d2da6786557c828a49be1e4021d99311235ac0d4d56eefc7c953605eaa86cf76fcb65c6f9fc208ac36f28b200d3b403aca73207461d8d96afa246d7c69d17a7a9bf77f05543563a7d3eca1d4079e22938aba1f6e9e04b49fbc8ed6f63b599730de9979831c02f8cba61e55560d7110d4c6e61679706a7155d5a673c54d16fe4d228c2eca7546faa1339f26d7a0bb4ee339611afdec9a68f5ff5b5d203b600533ad5a3b368c85da11563f098cc26871e7fa99aefd38cc26151db3b0bae38db6a87b6789e5840b10884af511f3ecb3ecbf94ff86fdb905505a8c34b2aa61ff2ec9ec8febd1dfed0965b6fc5b9f8869dc3a47559974a8822996706daefbc6c5bf984ce06b0d32b31cf9d8ad136aed4b052586dce7073b767b234e4a37bebbc393dd2e0f7d155173548c38a1583ef94e0aa84e7fce04fcc9b4e300ad099449a49232abdcf3d1a6e6fcab696f5996f9bd1b9485d074755ac5b4297fee3124c7c03976a40d570beaec2fac992339f885f74d40ed4ac87a4f40cefbc4864f44c3683aa8f1026e2c37aeffcebfdfe24dd0b019c36a79888203004b2ad83e89221f3f636f455bb64e17d1754c7c6dd7fc09a0d65dddded4622fc4f9fba072b45103435e10220a586f15226d2eb377f4064d3ff37cbb4705a1faaf5b348f8c0ef7fd1564d428688f58f3392967cf396a8ff2fd9e7b517b7d6a5ede7440373d8cc1a839900e84d42254283d9699c7ca37e477692a3494008b80444c5cf614cbbc169bfb9296303c645e2ce28d168dc6cbaefae9c73191f57151aa473009d29e1800b10f4c498609ba11520985c78092058696fdbca9c020e2dfb8a043a3de8e452d58cd1ad\",\n        \"signature\": \"90005541dcc1d7ab837f4de5393fadd6a92b26a7d93af3f669e0f1bfd621cbd00c8a23056d2da6786557c828a49be1e4021d99311235ac0d4d56eefc7c953605\"\n    },\n    {\n        \"secret_key\": \"d1528c1406a6e494a02f635305fa74d745c69327fd31b7d2c2623de2c030ed85\",\n        \"public_key\": \"0cfe369cf93daf6d53ef028ddb9f000443b0972fe2532f83a41ce657c1836ca3\",\n        \"message\": \"abb3673f3fa17a33a7aff76eac54e7687c04bc84f766651a8b24ba22947908b04ca459feb98ace7cab1e7433a6a6beffd8d9504e2991daa0644d61b8b2e45448f54df8813f50c418b48f49e1034e851cbec3ef0a1850ef726733afaf68e1a461041651c138d54e4ef78187af9a7342f7128727f903bf4fc5ef3e40c64ec26f892f59add98fe394765aaa7d09cae81b9f699a9dd8bf2e2fe8e1ec78fc884eaa0d2dbdbfb8c168833ee0d21803cc35dc628d7c07e04404fb60e8c490a8dd34edbcbaaf80ccdae3f7d3739e0e897023eeb5b1a8c00a9673c59258240ddd4420650fe5771f7e28cb2399f5e1e02ad0b6432d9b49608fcf0b1c0d7c412a445255b8badc5321c24c1ac92c79a0baccb9deffed02d12f5536cd595dc66083b33a3603a9d16ecea2bf38c4f2aaf570f30d21162b2efd7e4d5ebf1ecae9588eee36dd9d3d8e3be7bc6d4bc2185622f11d1da7c49c93e623ac56fee7e3706db8313cf926be92e5c8a539fd16b0f438da8e51a51f2d27640356124ef7be2f91ffa1796a91b12301934ddef0c7938a7a45f36f53b6322d9c8f9d275e1cd2c0f129f8ab8d74155b5d9e5c15c015b0b00003b2bddfa0bcfcc693a1dfcb4f53daec126d1669f33f39ad05519ef7c5ce40e6f4573c247a32c4a0162831352f6d558ff5836a5317dbc4515b3df269a8ac76d6436f264b64561e7968b5822108487b045c92d6c6142a1c2855b38beebd642565123cc827cb1831199e6f12a7e4236856b94dad738f69d1106e7735d711f7c6a3a3378041fc7a21103bbf866907d4edddafa0e7f1bb5ffd41a60d64\",\n        \"signed\": \"b8399bc3326cba0a93a42497168bf57f9106ee43d39bf0fc86685199dc6e0a13b9c724ef17e7882af8c2eb70f6c9e42dfa2fbf0c1cb5002b58f1086619733e02abb3673f3fa17a33a7aff76eac54e7687c04bc84f766651a8b24ba22947908b04ca459feb98ace7cab1e7433a6a6beffd8d9504e2991daa0644d61b8b2e45448f54df8813f50c418b48f49e1034e851cbec3ef0a1850ef726733afaf68e1a461041651c138d54e4ef78187af9a7342f7128727f903bf4fc5ef3e40c64ec26f892f59add98fe394765aaa7d09cae81b9f699a9dd8bf2e2fe8e1ec78fc884eaa0d2dbdbfb8c168833ee0d21803cc35dc628d7c07e04404fb60e8c490a8dd34edbcbaaf80ccdae3f7d3739e0e897023eeb5b1a8c00a9673c59258240ddd4420650fe5771f7e28cb2399f5e1e02ad0b6432d9b49608fcf0b1c0d7c412a445255b8badc5321c24c1ac92c79a0baccb9deffed02d12f5536cd595dc66083b33a3603a9d16ecea2bf38c4f2aaf570f30d21162b2efd7e4d5ebf1ecae9588eee36dd9d3d8e3be7bc6d4bc2185622f11d1da7c49c93e623ac56fee7e3706db8313cf926be92e5c8a539fd16b0f438da8e51a51f2d27640356124ef7be2f91ffa1796a91b12301934ddef0c7938a7a45f36f53b6322d9c8f9d275e1cd2c0f129f8ab8d74155b5d9e5c15c015b0b00003b2bddfa0bcfcc693a1dfcb4f53daec126d1669f33f39ad05519ef7c5ce40e6f4573c247a32c4a0162831352f6d558ff5836a5317dbc4515b3df269a8ac76d6436f264b64561e7968b5822108487b045c92d6c6142a1c2855b38beebd642565123cc827cb1831199e6f12a7e4236856b94dad738f69d1106e7735d711f7c6a3a3378041fc7a21103bbf866907d4edddafa0e7f1bb5ffd41a60d64\",\n        \"signature\": \"b8399bc3326cba0a93a42497168bf57f9106ee43d39bf0fc86685199dc6e0a13b9c724ef17e7882af8c2eb70f6c9e42dfa2fbf0c1cb5002b58f1086619733e02\"\n    },\n    {\n        \"secret_key\": \"512340f961f142d1915e85fe4fa0f551f80892e75accce7cd1869e6e2c9e8015\",\n        \"public_key\": \"0ca02604fa87e2c20506251f0792cd2125856f0ab16d663f2811963b1f2d8172\",\n        \"message\": \"af37b2c7587a8d5bc895cd357746ab03552a0a561a293dc7164e39b6a1333a920bb6daca6006676e99bb7e928f9ea391e54802a8d31596289fb9bfe30000cf52ebf0c124a5895bce3398c1bf5356be82619b8ddc15a77ca922494bdb04f5c2e1b6e8ff77ae749faf2b8a41d822c17c06dfb7a5f9434d8bd715ec8778e80b81d2e8d06298748690c6555283c98bb9b19b9246667bc41046ff98c2c35d161e1f4d69d254ec5a076f25bd5c7e2c98ca3c09d80833962cf9660287884096eb30c46c54174106af4e2979a112f3e8944eaaf7669c40d5afb91a024abbeb14664e308903e4d26d7009446ee2e830ab5eca0dbbc513fb4e04351df2f6741864fb2371b2502be43dc15fc04431fff5eb8d4b68d72462ae322e57ba2d4adddf15a1902c2113aebd3b5d612917c1bb73e708ad5418e7d45e4b7280fc8896ab80853ff5f8e98f26553fc78e30b3b0d727bf6d064a8f32888768c51ebb61b2c600b4028a77060febbb02eb3d201780e74566c86a34031836bce9eada81e5d0f33960cb2df08aff3c974921fc9b7d3aa7c81e9c671ed6d33e7ae5ed03a5417d7e5cd6faac91b54b8f792f48283c60647de3da816ca9756c5bfe1bb8b5979e575401bda34e9cbc4d77e711d6b73b82da19da473b55e8e72d341b2d8503e48609be0fe291444c283669e5deadeaf52aa8ec48da83f5328cc099fb41f82becdd58d04b1d66203d737bed06cf21c97819ac13ed711ca217a57cf7d80ff082aa1a1cf8fea555cd2e47e4ddab5e3f9941ad4f775f49419dcadb5b004b68caf45b27ef49ba14fb52b09f1b185be9f9c7\",\n        \"signed\": \"6bb4d975afaef41ea9ef085a68c568a05da37ef21dad464ed86ac0d4080e7d0129fb023131eca5f7adb2586a18be40562fa2764ca807e670a0596a5c547bc001af37b2c7587a8d5bc895cd357746ab03552a0a561a293dc7164e39b6a1333a920bb6daca6006676e99bb7e928f9ea391e54802a8d31596289fb9bfe30000cf52ebf0c124a5895bce3398c1bf5356be82619b8ddc15a77ca922494bdb04f5c2e1b6e8ff77ae749faf2b8a41d822c17c06dfb7a5f9434d8bd715ec8778e80b81d2e8d06298748690c6555283c98bb9b19b9246667bc41046ff98c2c35d161e1f4d69d254ec5a076f25bd5c7e2c98ca3c09d80833962cf9660287884096eb30c46c54174106af4e2979a112f3e8944eaaf7669c40d5afb91a024abbeb14664e308903e4d26d7009446ee2e830ab5eca0dbbc513fb4e04351df2f6741864fb2371b2502be43dc15fc04431fff5eb8d4b68d72462ae322e57ba2d4adddf15a1902c2113aebd3b5d612917c1bb73e708ad5418e7d45e4b7280fc8896ab80853ff5f8e98f26553fc78e30b3b0d727bf6d064a8f32888768c51ebb61b2c600b4028a77060febbb02eb3d201780e74566c86a34031836bce9eada81e5d0f33960cb2df08aff3c974921fc9b7d3aa7c81e9c671ed6d33e7ae5ed03a5417d7e5cd6faac91b54b8f792f48283c60647de3da816ca9756c5bfe1bb8b5979e575401bda34e9cbc4d77e711d6b73b82da19da473b55e8e72d341b2d8503e48609be0fe291444c283669e5deadeaf52aa8ec48da83f5328cc099fb41f82becdd58d04b1d66203d737bed06cf21c97819ac13ed711ca217a57cf7d80ff082aa1a1cf8fea555cd2e47e4ddab5e3f9941ad4f775f49419dcadb5b004b68caf45b27ef49ba14fb52b09f1b185be9f9c7\",\n        \"signature\": \"6bb4d975afaef41ea9ef085a68c568a05da37ef21dad464ed86ac0d4080e7d0129fb023131eca5f7adb2586a18be40562fa2764ca807e670a0596a5c547bc001\"\n    },\n    {\n        \"secret_key\": \"b1b636e957574c21a957a45bd195c6f9fe4cc1c57e84134d39b42e1a84329edb\",\n        \"public_key\": \"95e77b15dda47caf69b72888dd69961bacbec3bc75353003e8bff0a43ddf4b7a\",\n        \"message\": \"e25d329cad8364d2dec24373e92d9d50fc7abe8fdc3d0b4ee57e1cfa5b7cd58c23be918f05179ba841b61e180034ca7e74d49b0a1a2cebb4be65344c913c46d32652336e6bda4efa3f58730d39a633a14ca3d9a62abb0a7398cc29aff916eeea2e7caac80845562f73d4030f9cab0bf1c6407f5401513ef87fe6dc099dbc5dfc3352911c07af6c523bef4cca78379659e8803f585904ee6ef6fde77366d96d2ccf248a5320d9b8298b2a73363879107a02b47f57213a85203abbca5a4195f8af3e3593ed2fa3504bb76a3e1be24b66d355662932cb67dc88503afaf762bff741ba1cace97ac58bafad5d36c3aa02e0cbe20e5f3dc8092c512eaa9c4943474aad41990076721ad3f53fb08ac22982ed9b15c751a9e23382f6a69c72e6e244e0eb681e6dd228d3774fccb37eb6232f825d169a2ac8b7e18a42cdaa4f2cf05890bb0c598cf8c31f829ef8ca2435bdcceb0e6193ada7841ee692f30aedf88b627311b138ac78b3913e06f7c321cafb39d901dfe17430b1a20bc437a555a578fa31e4b6807954456bd4b04d5d887987bdf04e0f14af3141b24c3a7b9ac75aa32e2fcd2171a12609e15e73094fd09221b4d27090e73219b648bcaabf3807c9280b6c4ad750a468be0e1ad3e6e63016cb5cec3aaddc5689c2955a2a8d5b8984d7c44376fdd94d3f5ff1298f78172b565913704e90e5ac038cb1720e19b080f81b53d6a45d4528530711b63dfe1e4781c24d74aeb2bd8a73fd2a993c5b0891392196ac32c523699960d8b23e01664cf9021d93928050caf97fb985554580e33336a4563247df59ef6cae53\",\n        \"signed\": \"763c7d0d46878e5c7ecf7104fc1f2230e46178a27c75f196169c0279edb01c28fcde3b0d5b8635cfe339fb232774b2206dab8a460ce417abf490bbfa785c0205e25d329cad8364d2dec24373e92d9d50fc7abe8fdc3d0b4ee57e1cfa5b7cd58c23be918f05179ba841b61e180034ca7e74d49b0a1a2cebb4be65344c913c46d32652336e6bda4efa3f58730d39a633a14ca3d9a62abb0a7398cc29aff916eeea2e7caac80845562f73d4030f9cab0bf1c6407f5401513ef87fe6dc099dbc5dfc3352911c07af6c523bef4cca78379659e8803f585904ee6ef6fde77366d96d2ccf248a5320d9b8298b2a73363879107a02b47f57213a85203abbca5a4195f8af3e3593ed2fa3504bb76a3e1be24b66d355662932cb67dc88503afaf762bff741ba1cace97ac58bafad5d36c3aa02e0cbe20e5f3dc8092c512eaa9c4943474aad41990076721ad3f53fb08ac22982ed9b15c751a9e23382f6a69c72e6e244e0eb681e6dd228d3774fccb37eb6232f825d169a2ac8b7e18a42cdaa4f2cf05890bb0c598cf8c31f829ef8ca2435bdcceb0e6193ada7841ee692f30aedf88b627311b138ac78b3913e06f7c321cafb39d901dfe17430b1a20bc437a555a578fa31e4b6807954456bd4b04d5d887987bdf04e0f14af3141b24c3a7b9ac75aa32e2fcd2171a12609e15e73094fd09221b4d27090e73219b648bcaabf3807c9280b6c4ad750a468be0e1ad3e6e63016cb5cec3aaddc5689c2955a2a8d5b8984d7c44376fdd94d3f5ff1298f78172b565913704e90e5ac038cb1720e19b080f81b53d6a45d4528530711b63dfe1e4781c24d74aeb2bd8a73fd2a993c5b0891392196ac32c523699960d8b23e01664cf9021d93928050caf97fb985554580e33336a4563247df59ef6cae53\",\n        \"signature\": \"763c7d0d46878e5c7ecf7104fc1f2230e46178a27c75f196169c0279edb01c28fcde3b0d5b8635cfe339fb232774b2206dab8a460ce417abf490bbfa785c0205\"\n    },\n    {\n        \"secret_key\": \"10ca413d70eb3db6e337f0f11abc075c95859e825f876176076952d2f1888030\",\n        \"public_key\": \"5028ba38afecc242635f6e353d5f4afd123f860a0425220e966552a057880823\",\n        \"message\": \"ea7faf79f6ff5d78a823a754347134f1b3c3e91ce518fdd633feb4f05d125f05cb54336ef560e92deb685112a5ffcd3dfd3964b2758ce4785f6a34bfeb39784f0aee55955aebd12ddda641d05769f74402f706dad201c44c91081c7d7f65e7aa4246de6dc3ed6496d10f4a412060d493bac9aed5be4f6d74229e3c55eb6876e3bb2ed41fa4504b6670dda8c798f6daa280d1aa72021174f6c01aec49b321d87f53acbcadcc4607d5b1e45d63fc481a6d90576c87c1880b2e8ff3e590a96beee1804768c756beb86bf1de8adc408b1b8d666f74ba28630822f92d18b056ae37ce0293ee61b9e80f33ac269671bd62a4059b24f7c1a440807440d5d538a65458adc8158724b25c12127aa0349e55f6e55bc92078fd1ef274c2aa791905766be394a2628f7bbd1a32da5e487446bbefae88fa6cf3f7b499f131fa19313d13b280adca50f77802d17331b381683b5e7edab99473edd31d77443488214135fd6f26445093e9e2aff7d7e892337fdc8779065d4d97d6d673576794958dbfa6c50b1b13ac39607c1e66ef9629761071155fbca6f36eb02ceeae16367feac07476908c847c9a533ef68c94311fa089ff28fbd87809b0d3876b431d9a18b202f9a4049a0577b8177610dd02e5c520eca955e803c3ad4f50976f7c2ea8aa3ee4836a1985df0a4f16ef46981595419897993560af82651c2b494e680b37802e7537ef68a575c34f8588063ee0197206d9a32bb4890e7c216a4d33feca36b549e532fea68556e7540a4fb169d49fc553b2e6700ae42d9a516e68160acf6b270c77ca5ec26e5ad5dc75c2c393e299\",\n        \"signed\": \"6aec02dc6bdfcb67f0efc1fd31e23e69e371ab3802505b3201a95dd525417ed1a128db4e182cb37c28f62806667099a8ad480b0ac9e94c2a7d5a0e96e2a7360dea7faf79f6ff5d78a823a754347134f1b3c3e91ce518fdd633feb4f05d125f05cb54336ef560e92deb685112a5ffcd3dfd3964b2758ce4785f6a34bfeb39784f0aee55955aebd12ddda641d05769f74402f706dad201c44c91081c7d7f65e7aa4246de6dc3ed6496d10f4a412060d493bac9aed5be4f6d74229e3c55eb6876e3bb2ed41fa4504b6670dda8c798f6daa280d1aa72021174f6c01aec49b321d87f53acbcadcc4607d5b1e45d63fc481a6d90576c87c1880b2e8ff3e590a96beee1804768c756beb86bf1de8adc408b1b8d666f74ba28630822f92d18b056ae37ce0293ee61b9e80f33ac269671bd62a4059b24f7c1a440807440d5d538a65458adc8158724b25c12127aa0349e55f6e55bc92078fd1ef274c2aa791905766be394a2628f7bbd1a32da5e487446bbefae88fa6cf3f7b499f131fa19313d13b280adca50f77802d17331b381683b5e7edab99473edd31d77443488214135fd6f26445093e9e2aff7d7e892337fdc8779065d4d97d6d673576794958dbfa6c50b1b13ac39607c1e66ef9629761071155fbca6f36eb02ceeae16367feac07476908c847c9a533ef68c94311fa089ff28fbd87809b0d3876b431d9a18b202f9a4049a0577b8177610dd02e5c520eca955e803c3ad4f50976f7c2ea8aa3ee4836a1985df0a4f16ef46981595419897993560af82651c2b494e680b37802e7537ef68a575c34f8588063ee0197206d9a32bb4890e7c216a4d33feca36b549e532fea68556e7540a4fb169d49fc553b2e6700ae42d9a516e68160acf6b270c77ca5ec26e5ad5dc75c2c393e299\",\n        \"signature\": \"6aec02dc6bdfcb67f0efc1fd31e23e69e371ab3802505b3201a95dd525417ed1a128db4e182cb37c28f62806667099a8ad480b0ac9e94c2a7d5a0e96e2a7360d\"\n    },\n    {\n        \"secret_key\": \"1f0a10a2cb111917b9a67a2a1f38fb86f8ed52607d1d653a457d7f4718d9a7de\",\n        \"public_key\": \"70c075b2e94c4c02f45e73044f24399741b161feb6f69eab635417282a4a9368\",\n        \"message\": \"4f6a434bd5fc77f0f1b7049c91853ccbd89439962a6078a674b867543b6b7d10552ec1758c5283042bd6b4cea88c9520db04746f089cf3a260fb0f33858efd6f680de5b72d9876324ba590299138f85a76f5be0e05e8859c02b23512559c8beafc9cfe901b283e15d16c792eb03b92880f6ff97aa38eeead3f4fd6c0a9214323aa39a1c16515e30dbd08b833ee40a814a28809c870e1d0a62c37932d5408fc6afc63e79a655c5fe3d4026ef09e0299fbde5ab34fceab14130dc4be007e8e6444d7aaaec62c873df77e8010743c31e8757f1eae9edb5597a1b5d84bd77ae7642e1aca99873a152ffde068a8e4ad9240b903332795e40bb32865e5ce034307a6c9fe339a1c93770df5ca46329f6b09419785cbf2847b0c6832837123853ad952653265c5b5740d194e00f23f9e966791f005f8bf55c388c2be9e21538925f8555e0dbd83be073df765af4940e59a3790b9836bab7909e5676fbf1c2126fe226d781a44330cc01d32830ff8ae00b9792e398c2cbb4fb83a1005c245549a89063fbe06c62a48dac43c5101249994e95e37f24c1d8b3bc673538c46055f800db1c0f956869b6b297d990f44f05b50c7ad6b856f46212858471dd0d39372b0db751573ddb6b5b56ba01e371c78fe58dcd1be53112a6a73da9a6bac75d3c39a1a705a36f640fcfad8cd04077594d59685f6e30de71dfd4a44c4e7c04d6ec7c2e8be12785bb05b29b39151d329f587fdc381c2df0cef73fe0e3fd9208d7ccb6e08d02f42d1feed27561d5e323aa148624e552abe87532de15b7f42c22c98e40525b1747cbd758bfb26fd3eed3b\",\n        \"signed\": \"a4245aa3395e7bada2bcdf1603147cc5f3f0ba91f40fdad8f6d371c3ebefb4c1501d07875b576f40797806a484c7a3f70569e232b0c99d29ca23a233b68edb0c4f6a434bd5fc77f0f1b7049c91853ccbd89439962a6078a674b867543b6b7d10552ec1758c5283042bd6b4cea88c9520db04746f089cf3a260fb0f33858efd6f680de5b72d9876324ba590299138f85a76f5be0e05e8859c02b23512559c8beafc9cfe901b283e15d16c792eb03b92880f6ff97aa38eeead3f4fd6c0a9214323aa39a1c16515e30dbd08b833ee40a814a28809c870e1d0a62c37932d5408fc6afc63e79a655c5fe3d4026ef09e0299fbde5ab34fceab14130dc4be007e8e6444d7aaaec62c873df77e8010743c31e8757f1eae9edb5597a1b5d84bd77ae7642e1aca99873a152ffde068a8e4ad9240b903332795e40bb32865e5ce034307a6c9fe339a1c93770df5ca46329f6b09419785cbf2847b0c6832837123853ad952653265c5b5740d194e00f23f9e966791f005f8bf55c388c2be9e21538925f8555e0dbd83be073df765af4940e59a3790b9836bab7909e5676fbf1c2126fe226d781a44330cc01d32830ff8ae00b9792e398c2cbb4fb83a1005c245549a89063fbe06c62a48dac43c5101249994e95e37f24c1d8b3bc673538c46055f800db1c0f956869b6b297d990f44f05b50c7ad6b856f46212858471dd0d39372b0db751573ddb6b5b56ba01e371c78fe58dcd1be53112a6a73da9a6bac75d3c39a1a705a36f640fcfad8cd04077594d59685f6e30de71dfd4a44c4e7c04d6ec7c2e8be12785bb05b29b39151d329f587fdc381c2df0cef73fe0e3fd9208d7ccb6e08d02f42d1feed27561d5e323aa148624e552abe87532de15b7f42c22c98e40525b1747cbd758bfb26fd3eed3b\",\n        \"signature\": \"a4245aa3395e7bada2bcdf1603147cc5f3f0ba91f40fdad8f6d371c3ebefb4c1501d07875b576f40797806a484c7a3f70569e232b0c99d29ca23a233b68edb0c\"\n    },\n    {\n        \"secret_key\": \"7f05baacf167583cf2fe9562a506991ed987f68ffb71567c7ccce3fcc59b78b0\",\n        \"public_key\": \"0dec3952852b96fd75587e97743f9e41c09fbe6ba981bfceb4ebb8892d986a16\",\n        \"message\": \"a27d1eab05150920ded1b1c2578af582b294f7837fe4fb1a3169c25efb70634ba66c7e2991b3e75cc5124826a03e057259b5cb706228780cbc8275c339f8340e402a665032a4ab657827b1c3481f7566d369735b82db7628c022b212730db1e47c9b2d9bc4d81b2342d89c6eafc3e0b6de50d484ccef11238c8e2d240dd595dcef8b2fc57b54ff9a8a74111f61f8a652f20ea012c1ade3e280ecde294c0e35717190162ec6a2265e7e6f3f0704cf8ab1a03e5cc953e2926291ccd4b0590d5c20568f94f9ff0fe2ab78cf9ae2c38bcd491e518f23e9b636f880615fc56078e512d7577e09497c1183453d5081fd4737f280ec5e267c4586b78b70fffdfd730d809df560f2e3772191847bbc3f604fb7f8ca49eed318b5e7d1f2b83a10da0c8594b339b6871a5772dd64168ecc27e240a45c76725e7d55bef37e135e3d9e0e34e36c16e34d77459a552f4074d067a31a3ed2a48cdea4895b10bdf1656f4b7a413c6a088c649fc9d7bc56abf64435491214192a6670cb8b9c917f8e1bc7b2cfce78d28fbc3afc2a50e98213e7e026378e4ea711d151adaaa719beb8974656c10ebc7de46b19ec82951ef46a8c68e7f436e1b3ebedb2d09b0575c9914ead2796b53e0061e212994ac5026aea81ec37c81378f4ccfc467700087968597da38fed52fa48093ae4ba1066c31e3c7d8508095bb45c280120f4aa69a24f3efef1f767985aa1a30e140856f76d1520732878487be53f712dbd7d779e315101588fd7dbdb132f92c27575ac1486f176c790661b0148394e92ffa3ae6f8afb2faa2b7f4fbd0ad91e759a702b3c702b4d\",\n        \"signed\": \"0deed2df82acf4529c408a02931f676bec5cb7ade84ebdcd578f70f971382cf311bb83097300456a558bc4c09d8983ff13493fd611eb66c043bf019bad6f3302a27d1eab05150920ded1b1c2578af582b294f7837fe4fb1a3169c25efb70634ba66c7e2991b3e75cc5124826a03e057259b5cb706228780cbc8275c339f8340e402a665032a4ab657827b1c3481f7566d369735b82db7628c022b212730db1e47c9b2d9bc4d81b2342d89c6eafc3e0b6de50d484ccef11238c8e2d240dd595dcef8b2fc57b54ff9a8a74111f61f8a652f20ea012c1ade3e280ecde294c0e35717190162ec6a2265e7e6f3f0704cf8ab1a03e5cc953e2926291ccd4b0590d5c20568f94f9ff0fe2ab78cf9ae2c38bcd491e518f23e9b636f880615fc56078e512d7577e09497c1183453d5081fd4737f280ec5e267c4586b78b70fffdfd730d809df560f2e3772191847bbc3f604fb7f8ca49eed318b5e7d1f2b83a10da0c8594b339b6871a5772dd64168ecc27e240a45c76725e7d55bef37e135e3d9e0e34e36c16e34d77459a552f4074d067a31a3ed2a48cdea4895b10bdf1656f4b7a413c6a088c649fc9d7bc56abf64435491214192a6670cb8b9c917f8e1bc7b2cfce78d28fbc3afc2a50e98213e7e026378e4ea711d151adaaa719beb8974656c10ebc7de46b19ec82951ef46a8c68e7f436e1b3ebedb2d09b0575c9914ead2796b53e0061e212994ac5026aea81ec37c81378f4ccfc467700087968597da38fed52fa48093ae4ba1066c31e3c7d8508095bb45c280120f4aa69a24f3efef1f767985aa1a30e140856f76d1520732878487be53f712dbd7d779e315101588fd7dbdb132f92c27575ac1486f176c790661b0148394e92ffa3ae6f8afb2faa2b7f4fbd0ad91e759a702b3c702b4d\",\n        \"signature\": \"0deed2df82acf4529c408a02931f676bec5cb7ade84ebdcd578f70f971382cf311bb83097300456a558bc4c09d8983ff13493fd611eb66c043bf019bad6f3302\"\n    },\n    {\n        \"secret_key\": \"d00c216426710d194a3d11cfc90a17a86212e7a0e54baa49b0169e57fff83d61\",\n        \"public_key\": \"cfe6ae8903c6c701aa304695c651bfd850331f9ad481633ae370c86d7bd13fb9\",\n        \"message\": \"82f97841b3ba22dd9a4450837ea7bf8d27a9731470cabb0c2078034bf24e4c1a6290c03f4002b86fa09f07b5209f1f53d0ecf4d9e9223bec125a954551fe8bff718f5e264868e207f701194e41de39971fd385f49a4b4adda911eba55259fc6836653273f656f4af60b20664956d4f2135d90d09e9037d5366a0253444e022c7212af5fd4fccd74237d2885338e2fd721522de6763c2549028c623b9cf387d234ab5e7fcbe5a47c685b79e75a57b09574082a02221df64a2e841618087e722a21bac1ba4f0d7d87bdc510aaa8fbd10757f6c029ca820371fc74c3bc50bd898c55d8167f73ada377aecc91629d64c360c2c241c5cb42e3a518c5dabf0f418b2a7f3d82eefd92026d31e8b8160358eae821f730ecafe7ace647bff8741de2f6a131d11c969e9787cfe6a2fab37bf8d1c7f4a2f364d2f1a76ef046c1843e63ec00cf7920ffaae561e7370b719fc16fcebca3cfdfaba43f4f090c46f477303a660ee88dd4e89bf14b9f804b6fd495cb1412753474a056a0d8931cd9ccbd64f8fcc7a3123467c5d47f690679e8871288093734fd6a1326038658156413696594c134d73887f34ee67609ae8ffb3266c16d87f15345a476f72950c158796a88bbb444f1aa809cad875b85fb9151a0e2eef2e00e80d6b7a9ba406c0519effdd94126232fdf6f1e7b9bbc0362aa77516fdf939e7906aab01307128cf824c102c09b929c9b2d7af8f85b7d7f9a838b2aed0c697e8bdfee66ee016bb1bf35eff6b2f7ef4b91b1fc04fac9f116e2edff40f95c15b77c31ee522f3937c7fa0047d6225e0c8e55e278c8103911feab2b7f4\",\n        \"signed\": \"15c45c194297e887029f49d8bdf9d610dd8c34799e1e9230269e7a58928938cf396a02cd42205490391e1c64353fb06b9f8e9b818a9a361c204a386995bf3b0382f97841b3ba22dd9a4450837ea7bf8d27a9731470cabb0c2078034bf24e4c1a6290c03f4002b86fa09f07b5209f1f53d0ecf4d9e9223bec125a954551fe8bff718f5e264868e207f701194e41de39971fd385f49a4b4adda911eba55259fc6836653273f656f4af60b20664956d4f2135d90d09e9037d5366a0253444e022c7212af5fd4fccd74237d2885338e2fd721522de6763c2549028c623b9cf387d234ab5e7fcbe5a47c685b79e75a57b09574082a02221df64a2e841618087e722a21bac1ba4f0d7d87bdc510aaa8fbd10757f6c029ca820371fc74c3bc50bd898c55d8167f73ada377aecc91629d64c360c2c241c5cb42e3a518c5dabf0f418b2a7f3d82eefd92026d31e8b8160358eae821f730ecafe7ace647bff8741de2f6a131d11c969e9787cfe6a2fab37bf8d1c7f4a2f364d2f1a76ef046c1843e63ec00cf7920ffaae561e7370b719fc16fcebca3cfdfaba43f4f090c46f477303a660ee88dd4e89bf14b9f804b6fd495cb1412753474a056a0d8931cd9ccbd64f8fcc7a3123467c5d47f690679e8871288093734fd6a1326038658156413696594c134d73887f34ee67609ae8ffb3266c16d87f15345a476f72950c158796a88bbb444f1aa809cad875b85fb9151a0e2eef2e00e80d6b7a9ba406c0519effdd94126232fdf6f1e7b9bbc0362aa77516fdf939e7906aab01307128cf824c102c09b929c9b2d7af8f85b7d7f9a838b2aed0c697e8bdfee66ee016bb1bf35eff6b2f7ef4b91b1fc04fac9f116e2edff40f95c15b77c31ee522f3937c7fa0047d6225e0c8e55e278c8103911feab2b7f4\",\n        \"signature\": \"15c45c194297e887029f49d8bdf9d610dd8c34799e1e9230269e7a58928938cf396a02cd42205490391e1c64353fb06b9f8e9b818a9a361c204a386995bf3b03\"\n    },\n    {\n        \"secret_key\": \"dd123972e628584acc46293b8e4ce2b2dd469cc4ede14ef39521cf08373585b3\",\n        \"public_key\": \"3522f7ae596eedb217035d95395e448dbd6ffbf42585eaeb307026541c78a651\",\n        \"message\": \"2b2857f45280173e2e0ef9d594e6083f1dc7a65492975b837def6cadd8c8545031ee9d68369a9393cc7b792feb98040b21f1eb84665f878537ce412e9db680d29fbd8ffc7731eae91a20b47548996204fb06ad740e78f0fc590b6791dc7a0f2659286cc16d02c5117b565836b4b8738cf40e285c69c50e412911292367352dfdaed9982d0f899a23c0ab51812b3ec678f6882ea427cdc93ab4b24824377054aa25d82246653340078cf11d14a51f0e686d7e018b36741668fce7458d169293361dd16b3debbed19e1bef7c36934e20f33a09ad3e82b53ab4e94c255d041898b97737df99584af14e404058d0c93bcae7bbbc06395a2aefbdefa7b2ed17cebd1513fa390fe9a9b0ce68cecc2b9e129b7a29f49b6d18c28bacd3af39dc39ca972f0e0d06855d57c2b5fcac2f79cb8c05799e4f65734668dad6aa7a43a11856e23b1e732d00e5fe3885b7dad42ec18ac8e096a080f7d55070fdcff607bc0b852d8a080d2a7405d59414695f2eb7fb0aca23c8635742f8ae57f13780316e280872374e6929598d028a33c05d831cdabd029493c3cc859fff1a67d56216f02a2295665365887a350a80afaa0c367a74d3701ae88f59d8a9d3a1dce0cfd2eabe2af5065a1c7fca4aadcf8e51e75612a1371b4dc8ffc0c0b9c4fadb2f081e2e032d96818e55737adde3e1ac121f56cc86fb58a0a582692f62ce58acce17aafec7bcb7e44f839258cd4a851fc01344ee9f1bd03eb94344f4778693c171dd2892b2426a8829ab0cfe33a7d4a36eb4017f7fcfd24134ab8a45f23717cd138aa6000172e37b4064dc9b6d1e1ef3af84971d\",\n        \"signed\": \"8965a889d54cd8076d35bc2e12b009d56b0704c894f912a0d1d30720c232fe4404bf3009541e8f3283e89ea86f678afbdf1c21c924b23a52b4ca6d63f48fc2032b2857f45280173e2e0ef9d594e6083f1dc7a65492975b837def6cadd8c8545031ee9d68369a9393cc7b792feb98040b21f1eb84665f878537ce412e9db680d29fbd8ffc7731eae91a20b47548996204fb06ad740e78f0fc590b6791dc7a0f2659286cc16d02c5117b565836b4b8738cf40e285c69c50e412911292367352dfdaed9982d0f899a23c0ab51812b3ec678f6882ea427cdc93ab4b24824377054aa25d82246653340078cf11d14a51f0e686d7e018b36741668fce7458d169293361dd16b3debbed19e1bef7c36934e20f33a09ad3e82b53ab4e94c255d041898b97737df99584af14e404058d0c93bcae7bbbc06395a2aefbdefa7b2ed17cebd1513fa390fe9a9b0ce68cecc2b9e129b7a29f49b6d18c28bacd3af39dc39ca972f0e0d06855d57c2b5fcac2f79cb8c05799e4f65734668dad6aa7a43a11856e23b1e732d00e5fe3885b7dad42ec18ac8e096a080f7d55070fdcff607bc0b852d8a080d2a7405d59414695f2eb7fb0aca23c8635742f8ae57f13780316e280872374e6929598d028a33c05d831cdabd029493c3cc859fff1a67d56216f02a2295665365887a350a80afaa0c367a74d3701ae88f59d8a9d3a1dce0cfd2eabe2af5065a1c7fca4aadcf8e51e75612a1371b4dc8ffc0c0b9c4fadb2f081e2e032d96818e55737adde3e1ac121f56cc86fb58a0a582692f62ce58acce17aafec7bcb7e44f839258cd4a851fc01344ee9f1bd03eb94344f4778693c171dd2892b2426a8829ab0cfe33a7d4a36eb4017f7fcfd24134ab8a45f23717cd138aa6000172e37b4064dc9b6d1e1ef3af84971d\",\n        \"signature\": \"8965a889d54cd8076d35bc2e12b009d56b0704c894f912a0d1d30720c232fe4404bf3009541e8f3283e89ea86f678afbdf1c21c924b23a52b4ca6d63f48fc203\"\n    },\n    {\n        \"secret_key\": \"3335ea928117cfeefbeeae146003881bdc8889d6580eed1352370820ad1f584f\",\n        \"public_key\": \"cb20d4fd7561848013111c3e97617f34181d2e7fbcf1bb2a2cd2e8c1775b8b03\",\n        \"message\": \"0fa7f6a6fca981429b572a6704871bed140dab93ee1992006e9a3bb2e6cc9a09d4c9cf17066b32ff7ef5b6b2e7911178ed7462c4c175603171ca613668b3be193d94c3521e588913b5948b550be99d82d966197d710acfd95914cf3e197536e83e68230dc3d67e67dcdbdee04f0d9c480237ecd28f74338db5f3f697d3d07ff33613bbce542acc9a7fed5d12490b9bfe1d109540f863800dd356da841a45a3cd8a08a945bfa3aa98e1712312c4c0f0d9dd64f6efcf736bd97deafca9dcaa3f06d87f2ed72aeb6a94f3280000c4bf728a01c1862dafd9fc5c7d5a46ec7d3a87af59a11d87f7ff84407d37010e1d946cf225d6b3b1edee2e8bbf1e079e47fb1f66669394fbf2fa68fc56fc89820a6809c251dd62f5b865c547b14fbd3a19504244ffbc7e5240f88d4360f9cacaaf5f82433d3344fcaee0acdeb7beb9c0b3c769eac920ef4f09abc2a2095512045943eccc53b1c03ed24e567f3d7a71977cab9840ce898ee58ed5c73f6adea823394c5c8e3658a6bf5acbbf0055992c312c26c79c5cfbea3860b8764a6d8ffe4491f8a5b8a215e0117a9a68164aee25f8c0bb381195b2400bcb4644ebce1cde5a9a26582cab9dc7f43c33eae350db65aa7dd22a079bdddcf56d848deb0cfa50b3bd732d9da9e8d8ab79e93469de5802b6dff5ac2aa8482bb0b036d8f9d595b8ead94bb8d7418e2ea43192efcbfc05c467bde0a868a516a7c14a889b72c5b73e7d85c2bae902e4e68d1f3ceab2b2773af5bbaee6a00d08063e7833cd4e295347e58f5d1b3397f640c159cc60a674a227b4cd8c10f1dbaed516ccacdd295f11b08147\",\n        \"signed\": \"f7c39f9247d22f018999247f0e0005cd63076ccf2fee4163421f86407a41698c405816647351c04e93b54415b62fc03fc8c25e20f7541dab03197dc900b29c0c0fa7f6a6fca981429b572a6704871bed140dab93ee1992006e9a3bb2e6cc9a09d4c9cf17066b32ff7ef5b6b2e7911178ed7462c4c175603171ca613668b3be193d94c3521e588913b5948b550be99d82d966197d710acfd95914cf3e197536e83e68230dc3d67e67dcdbdee04f0d9c480237ecd28f74338db5f3f697d3d07ff33613bbce542acc9a7fed5d12490b9bfe1d109540f863800dd356da841a45a3cd8a08a945bfa3aa98e1712312c4c0f0d9dd64f6efcf736bd97deafca9dcaa3f06d87f2ed72aeb6a94f3280000c4bf728a01c1862dafd9fc5c7d5a46ec7d3a87af59a11d87f7ff84407d37010e1d946cf225d6b3b1edee2e8bbf1e079e47fb1f66669394fbf2fa68fc56fc89820a6809c251dd62f5b865c547b14fbd3a19504244ffbc7e5240f88d4360f9cacaaf5f82433d3344fcaee0acdeb7beb9c0b3c769eac920ef4f09abc2a2095512045943eccc53b1c03ed24e567f3d7a71977cab9840ce898ee58ed5c73f6adea823394c5c8e3658a6bf5acbbf0055992c312c26c79c5cfbea3860b8764a6d8ffe4491f8a5b8a215e0117a9a68164aee25f8c0bb381195b2400bcb4644ebce1cde5a9a26582cab9dc7f43c33eae350db65aa7dd22a079bdddcf56d848deb0cfa50b3bd732d9da9e8d8ab79e93469de5802b6dff5ac2aa8482bb0b036d8f9d595b8ead94bb8d7418e2ea43192efcbfc05c467bde0a868a516a7c14a889b72c5b73e7d85c2bae902e4e68d1f3ceab2b2773af5bbaee6a00d08063e7833cd4e295347e58f5d1b3397f640c159cc60a674a227b4cd8c10f1dbaed516ccacdd295f11b08147\",\n        \"signature\": \"f7c39f9247d22f018999247f0e0005cd63076ccf2fee4163421f86407a41698c405816647351c04e93b54415b62fc03fc8c25e20f7541dab03197dc900b29c0c\"\n    },\n    {\n        \"secret_key\": \"32a1883eff57a3a7ecdb310221ee83c4de92b722159613ecf816e382437b60b9\",\n        \"public_key\": \"82dd1a03e5852062ba4a8b6b3b93c5e9c43ff6995bd2aac72606fac85802c682\",\n        \"message\": \"ed2b123b5dd7f5e718e026c79cfa6111924902d189a406ef2b2e56a9ee5573a76ddd1d0629ebcdecf2aaa74e84fcd0208f14eea2e171e7c8608b818feff4dbea52db354227d023250b1f01cb4cc8c52132a98d4acf55a54fee81e094aed66fa0d6b6a200b6b87414402278538b90529a8c603d927eddda97bc4b8cb95d04b5337fa22ceafc8b340c46fef67198d1fd98d89c65cd089e23f53dbdca967798b5cd923205ad511edf706f1225f4648c985e009ef8a2f6a0117cdbe14e75312d8ac1f03d046b37cdee7d69c0f25ccf18145a688a8b3ca8875fe8d90baf86d43969e4d610214f1ac5dbba87a1ef10377e40d7806fd9d23457fc9df29899239fd1d278849681a943ad9c91fd1bbd92b73cb177a878f9059ee07af7a8731613e33d59df3d97796079d5631ed85eb2245106a5ff6a2bca40df5c6e87473b2c08c2212f56fc2933a969a3c958d37c5343ba2760c813a7a5165d231c5feaae62b755df49feca80041a6535f7e03bc48e5f27f9be26ef53673eb7c37a2b64744a6cf17e887734ae010bf40eea03cda212f512fba0585947179640bcc4544b8deb4ead129bc3322800adf98818f99574befd9b0016d4eec81a8e78dc3a2af13cab01649ae2e33d516b9d4208ad6613d8e278c393baa882340ef461ff4f94423d55cf3cedd2a6b56e88365531dd29d68273adbfe369402e6a7cee053da1f100540091a00929252983449024b1c3391110650082f0e7dfddb8edc2042f3c1713c6944ba514ee7407d32bf06c858efec42a78bee97746e5b4879141a13d9fc5cb123b783273b84d57ad3526b7da3c68b839efd23f5f\",\n        \"signed\": \"8309cbe72f804bd9521def5dad4d8bc13886b1d4f662c9bb5b97ba4790f44b801f3195ead0d4ddb660818ecbf9a683cacf85f1dcc9e82c09116d733658091a00ed2b123b5dd7f5e718e026c79cfa6111924902d189a406ef2b2e56a9ee5573a76ddd1d0629ebcdecf2aaa74e84fcd0208f14eea2e171e7c8608b818feff4dbea52db354227d023250b1f01cb4cc8c52132a98d4acf55a54fee81e094aed66fa0d6b6a200b6b87414402278538b90529a8c603d927eddda97bc4b8cb95d04b5337fa22ceafc8b340c46fef67198d1fd98d89c65cd089e23f53dbdca967798b5cd923205ad511edf706f1225f4648c985e009ef8a2f6a0117cdbe14e75312d8ac1f03d046b37cdee7d69c0f25ccf18145a688a8b3ca8875fe8d90baf86d43969e4d610214f1ac5dbba87a1ef10377e40d7806fd9d23457fc9df29899239fd1d278849681a943ad9c91fd1bbd92b73cb177a878f9059ee07af7a8731613e33d59df3d97796079d5631ed85eb2245106a5ff6a2bca40df5c6e87473b2c08c2212f56fc2933a969a3c958d37c5343ba2760c813a7a5165d231c5feaae62b755df49feca80041a6535f7e03bc48e5f27f9be26ef53673eb7c37a2b64744a6cf17e887734ae010bf40eea03cda212f512fba0585947179640bcc4544b8deb4ead129bc3322800adf98818f99574befd9b0016d4eec81a8e78dc3a2af13cab01649ae2e33d516b9d4208ad6613d8e278c393baa882340ef461ff4f94423d55cf3cedd2a6b56e88365531dd29d68273adbfe369402e6a7cee053da1f100540091a00929252983449024b1c3391110650082f0e7dfddb8edc2042f3c1713c6944ba514ee7407d32bf06c858efec42a78bee97746e5b4879141a13d9fc5cb123b783273b84d57ad3526b7da3c68b839efd23f5f\",\n        \"signature\": \"8309cbe72f804bd9521def5dad4d8bc13886b1d4f662c9bb5b97ba4790f44b801f3195ead0d4ddb660818ecbf9a683cacf85f1dcc9e82c09116d733658091a00\"\n    },\n    {\n        \"secret_key\": \"22ecef6dabe58c0669b804664973e457c05e4777f781c52522af76b95481a914\",\n        \"public_key\": \"d4784010ef0403eddc5a62d5d45bb243b80b4b9d69c39ca387c6f5cba028640f\",\n        \"message\": \"c535c13d779fc0985973d6bcd552d81734e92bdf10994b00cd4d53ce365fad8c7cfa96206adb62d4567be5e46631323853e38ce4bdc16d7b8f632a3ad9e02619eff37174eac3f0bf2f7a7517d4b82de6aa1af0063819d5e1f9278fb4f24c8cc002afb15f334c04fadb00303013c01667f4932a6c4b97d39cd4a4598506c0bd740ea9f11696357d7d17fe4d75f9d74241a7af71f9d869ef6cd695687c03fc34ad65a68a4888a1a74126cb55cf7da9cb4a6717f6eb88484089d2c5189ae381f25e7b3bc3b23d0c9d9f9cdbbeecfd1e72a05e67bb483a9764d9fc75ad69e4ab1270fb40f3958fea4da559b43980b24681313e8591e68546a3bf76ee34b339709295a8d46fb2432dda2f221812df692895e67cb29cbf6ff4502b439a4e9e43639ec067bc90ae814a293a7bd46968e656787642300a0ff2697e3313f6a418d3d12a5f7c51a4c57b63385f2d2a21d5d1d763fc8d1b93c13435f9e47ee7a425980a6ae6f1a9d007607476783c6d0c7887380f868c65b382d4cc8c04478bbd79a1d9a964b78171d6bcf0b8eec50a06a4ea234d1c23465d3e75b88bc540dade74ed42675b07f7cf078211e907f86d0dc4b978623d9f08738af928695e542ec2980e55a1de49e25247fa0a09678118e3930bc4d24b3214d6dcfb6ebdf4906c928deb37bb9ba29c8de1bb9418db718b2853ba57ad8cae4677addfd18b6c7e8c242621b35c7f0efe8dd5eb26ff75fd5748b1d783f6d68a7d9d56da2c1a978ac25f84fbb2be5568d91e70938221c102aee60409bcbec0c82e12ddb425eeb6ecd11551ecd1d33ddae871ae0c8f24d0d18018732b5e0e\",\n        \"signed\": \"5d0d2af678b3d1b677516d08a79aafd36ec67c14caf5bcdaaeaacc51a14fb805cf2904e8721db271b20df709bee1a4fbfe62565073b2a7e942724461f927930dc535c13d779fc0985973d6bcd552d81734e92bdf10994b00cd4d53ce365fad8c7cfa96206adb62d4567be5e46631323853e38ce4bdc16d7b8f632a3ad9e02619eff37174eac3f0bf2f7a7517d4b82de6aa1af0063819d5e1f9278fb4f24c8cc002afb15f334c04fadb00303013c01667f4932a6c4b97d39cd4a4598506c0bd740ea9f11696357d7d17fe4d75f9d74241a7af71f9d869ef6cd695687c03fc34ad65a68a4888a1a74126cb55cf7da9cb4a6717f6eb88484089d2c5189ae381f25e7b3bc3b23d0c9d9f9cdbbeecfd1e72a05e67bb483a9764d9fc75ad69e4ab1270fb40f3958fea4da559b43980b24681313e8591e68546a3bf76ee34b339709295a8d46fb2432dda2f221812df692895e67cb29cbf6ff4502b439a4e9e43639ec067bc90ae814a293a7bd46968e656787642300a0ff2697e3313f6a418d3d12a5f7c51a4c57b63385f2d2a21d5d1d763fc8d1b93c13435f9e47ee7a425980a6ae6f1a9d007607476783c6d0c7887380f868c65b382d4cc8c04478bbd79a1d9a964b78171d6bcf0b8eec50a06a4ea234d1c23465d3e75b88bc540dade74ed42675b07f7cf078211e907f86d0dc4b978623d9f08738af928695e542ec2980e55a1de49e25247fa0a09678118e3930bc4d24b3214d6dcfb6ebdf4906c928deb37bb9ba29c8de1bb9418db718b2853ba57ad8cae4677addfd18b6c7e8c242621b35c7f0efe8dd5eb26ff75fd5748b1d783f6d68a7d9d56da2c1a978ac25f84fbb2be5568d91e70938221c102aee60409bcbec0c82e12ddb425eeb6ecd11551ecd1d33ddae871ae0c8f24d0d18018732b5e0e\",\n        \"signature\": \"5d0d2af678b3d1b677516d08a79aafd36ec67c14caf5bcdaaeaacc51a14fb805cf2904e8721db271b20df709bee1a4fbfe62565073b2a7e942724461f927930d\"\n    },\n    {\n        \"secret_key\": \"8de86330b256095e1114b6529bedce182c166f67a91539cebc4bec25add7a4a9\",\n        \"public_key\": \"33cb054b55bb790ac0f3afdd9a6e7c050efe9006c24f60b8044fd08a5c106c11\",\n        \"message\": \"39e61e0eccec929c87b8b22d4fd18aeabf42e9ce7b015f2a8cac92a52448a42fed4cbadc085bbb4c03712ae72cfcb800b978350669b0990084f2dab76eca606d1a49fc55c529e1e7dadf39122dd5bd733893858b0523ef62df4f134cf6c26eed02fdbcb30ce474b1ada3f060769f934bbe686ccebd60883ecec9ce3ffb8ac4a0678cdc5b005ae3dba7e4fe8bc045739957d849f69c1474057b428c5425f3cc2516e8bbe3be81afd4e7b575abe88c87f2f03b56f69f9e3b61b3788120daa495ef0e50eb970a645c13d213c7cfb7d0ad555c920a1e5dbcb46797d939fe0401f547bfd17543221a53010de01f25b64519c8f03963e4b9ca58b0113627c05b9608eeaa7b9ae6305c96188160000ee3a7ade96e0b4bde9d0ed6a0ced765d786840a48175a6e090a38af6adeaa1486a9cb5c8c8c9223ee0ae4c6c02691a3547e32582a5b7059d2ee66fa9cd965615c315b476fd861279cd1dd7607743fc5561296312f11e465ca40bce3cf0b1f1d5a30af6087de4de96ce43965a46c4fcca15f281149b5c1a0c88fdbf27409a134ed4f1fb730fa191816ea784d986cc9ec4b694402de1dcca9ccc64fbd07b07e54e931de827a842460ca0bf6b04ebb571fa77787e3884be22f1e402cf2b8a96a5d39770ec4a843036142a0be970bb1ab165a6374dcf43deb8b9830b2c49db9cdfe4b5242e36f95e0c3e077e8d238fa6a8ac0d586bf61b8248fb3a79a270ab22be8a9da055ff3d5bb2d1ca9bc25f7014b96407719de344c3e73b8c114f792075a5c22fdd416154d3494ec3f02fb112ee5737f70704c1b6b07eacbf94562ca7b90dd84d98c3edf\",\n        \"signed\": \"6d01d237dd2bb4188d29bfdec387976a71be7adfbf9e23639b216d0aa0c11932235edccb3b42adcdb6291a0d299aed648de8b1957949b9d1cf2e50493030a40f39e61e0eccec929c87b8b22d4fd18aeabf42e9ce7b015f2a8cac92a52448a42fed4cbadc085bbb4c03712ae72cfcb800b978350669b0990084f2dab76eca606d1a49fc55c529e1e7dadf39122dd5bd733893858b0523ef62df4f134cf6c26eed02fdbcb30ce474b1ada3f060769f934bbe686ccebd60883ecec9ce3ffb8ac4a0678cdc5b005ae3dba7e4fe8bc045739957d849f69c1474057b428c5425f3cc2516e8bbe3be81afd4e7b575abe88c87f2f03b56f69f9e3b61b3788120daa495ef0e50eb970a645c13d213c7cfb7d0ad555c920a1e5dbcb46797d939fe0401f547bfd17543221a53010de01f25b64519c8f03963e4b9ca58b0113627c05b9608eeaa7b9ae6305c96188160000ee3a7ade96e0b4bde9d0ed6a0ced765d786840a48175a6e090a38af6adeaa1486a9cb5c8c8c9223ee0ae4c6c02691a3547e32582a5b7059d2ee66fa9cd965615c315b476fd861279cd1dd7607743fc5561296312f11e465ca40bce3cf0b1f1d5a30af6087de4de96ce43965a46c4fcca15f281149b5c1a0c88fdbf27409a134ed4f1fb730fa191816ea784d986cc9ec4b694402de1dcca9ccc64fbd07b07e54e931de827a842460ca0bf6b04ebb571fa77787e3884be22f1e402cf2b8a96a5d39770ec4a843036142a0be970bb1ab165a6374dcf43deb8b9830b2c49db9cdfe4b5242e36f95e0c3e077e8d238fa6a8ac0d586bf61b8248fb3a79a270ab22be8a9da055ff3d5bb2d1ca9bc25f7014b96407719de344c3e73b8c114f792075a5c22fdd416154d3494ec3f02fb112ee5737f70704c1b6b07eacbf94562ca7b90dd84d98c3edf\",\n        \"signature\": \"6d01d237dd2bb4188d29bfdec387976a71be7adfbf9e23639b216d0aa0c11932235edccb3b42adcdb6291a0d299aed648de8b1957949b9d1cf2e50493030a40f\"\n    },\n    {\n        \"secret_key\": \"bab5fa49187da1cab1d291900019e6cbafeccd27bf7ecbf1262a700516e7c29f\",\n        \"public_key\": \"f6fb1985ec591f69e3bac807b2eabf263990cdfa09b17809e48e385da065ec21\",\n        \"message\": \"5cf8ff587e52cccd2984f34791ee6843e77017c3b55ad45c44450965b75d836e78fbd7a1d1729eff6d6d340a903f3cf17d9e2aecaaff2a321fcdde0abcfbbcbcc09f4086f812c46efb01b78343afbe48309f917478455f32000c6a69f79fe211b99f037f5956d72275a7fe7b45296b5f739aa451ff0575bc705885aa5631b0d0850bc2b12c4192435ae5d2f52bc54386497c4a24b8b6db516be09d8ccf1eca785bde97e9be1ac064f094e2afcc307c0e06b4c564cd9a9a95305b37b81f434611dca55caaa031e88495d5dc5a04ff5fafdf0a82a0c03aff1bfbf4ffebae71824e35e751b09270007669860b580035659e23ace76b3b369fa306f2bed95799fafabc2e69c141beb0bacac7eaa347e77be5af3fcdbe7b364a7f9a66d5e17a07df6202fd98c14bfee2ca6f0745651f0c8550f9ffffcafb96ffb3f103e652e78f53916cd6f1dd05b3fe99b34201b07eac2652f5253571fd3822c695d265c7dfdd6c6b14a80b6e87183e6e032e5f2401cd238cdd3769bb6e390823438f5673ea9a479e5c63fe07a07f4e14f57757c4d7d22b35d71c44eaad4873c8eca6f6b21dcfa95520ff9614abf7a0e1885309f2ced3bcdfc319363a2da46ded79a5cc7b6f69383f94ab35c250629cb915d667b6281186754895803e4b95e7418289a6ac3bcdb6e1e7f6f1dc38e77d281914cc404f97cff14fb2c4fd81412d101c1bfb368ce59311e892a8b9cdca86936f3bca7ec79163eddf1cee68f49f1ebaa27ec50f490d61601ca35f8d6ed266054aeb9b199f933bffd6e0050f261b4e13d5ebfe2caa6557c32ddeaeebc2a11f0aa233240da1c7e40f76\",\n        \"signed\": \"e316038d6aa15b1c1b61c1a16b36904fe8a289c8d602becc514d99220086b267859f5bf6e9c0863559ac623a56d7532344e8d2f28b3f9df92089708b1b0590085cf8ff587e52cccd2984f34791ee6843e77017c3b55ad45c44450965b75d836e78fbd7a1d1729eff6d6d340a903f3cf17d9e2aecaaff2a321fcdde0abcfbbcbcc09f4086f812c46efb01b78343afbe48309f917478455f32000c6a69f79fe211b99f037f5956d72275a7fe7b45296b5f739aa451ff0575bc705885aa5631b0d0850bc2b12c4192435ae5d2f52bc54386497c4a24b8b6db516be09d8ccf1eca785bde97e9be1ac064f094e2afcc307c0e06b4c564cd9a9a95305b37b81f434611dca55caaa031e88495d5dc5a04ff5fafdf0a82a0c03aff1bfbf4ffebae71824e35e751b09270007669860b580035659e23ace76b3b369fa306f2bed95799fafabc2e69c141beb0bacac7eaa347e77be5af3fcdbe7b364a7f9a66d5e17a07df6202fd98c14bfee2ca6f0745651f0c8550f9ffffcafb96ffb3f103e652e78f53916cd6f1dd05b3fe99b34201b07eac2652f5253571fd3822c695d265c7dfdd6c6b14a80b6e87183e6e032e5f2401cd238cdd3769bb6e390823438f5673ea9a479e5c63fe07a07f4e14f57757c4d7d22b35d71c44eaad4873c8eca6f6b21dcfa95520ff9614abf7a0e1885309f2ced3bcdfc319363a2da46ded79a5cc7b6f69383f94ab35c250629cb915d667b6281186754895803e4b95e7418289a6ac3bcdb6e1e7f6f1dc38e77d281914cc404f97cff14fb2c4fd81412d101c1bfb368ce59311e892a8b9cdca86936f3bca7ec79163eddf1cee68f49f1ebaa27ec50f490d61601ca35f8d6ed266054aeb9b199f933bffd6e0050f261b4e13d5ebfe2caa6557c32ddeaeebc2a11f0aa233240da1c7e40f76\",\n        \"signature\": \"e316038d6aa15b1c1b61c1a16b36904fe8a289c8d602becc514d99220086b267859f5bf6e9c0863559ac623a56d7532344e8d2f28b3f9df92089708b1b059008\"\n    },\n    {\n        \"secret_key\": \"74ca122ab60de50cdc04a8e2eda45d9631061bf187d316be5b7cc06f020c483e\",\n        \"public_key\": \"787defd4fb24a399bd2a4e76dff7d603ed0acb3269813e4df690bbf5b2bc696e\",\n        \"message\": \"a80b46079fa775f8c1a19fa0829be666bdfdca079cad43d70e0842183bc0db95468a539f0db2aea3ab9c7073b45d228a9bde232897a6eb6fc9edf7365e7101ba97c446a519a3649cf527c8a6de7251b92806815ac2fa0082eff75e2582cbca7e1e4da2a446ea233e7cf7cedfb0e2398eb6e11bbaefe3f7ec89f5d73dd34bd47fbcb4d7b22f2aaee373785651841135cd8661a701b21084a316deac3074e24a2e35a0330f7d1479b932f285277c18a441787224fbbe46c62e834a1851ed237998d48dce20ba114d11e941be29d56d02f7370c8f6d6d7e50248dcd8ec89d3b22f4f58778129fafd4bb92ede17714bf022a5bf92be479f18e63852ecdcf8c4211f530dd30f79cbf4bfa5737f0bad3b0106067f41327c3189e6f206f0d4f3c704bf2bd0b161f018fd21cddfb418bac4d52ef02c41c8792e413b04f0836cea1f86c92e5d5703bee2b5c5899e285992024f64e0d16c60ad0fd92547932d0c5cb98d8da22feebdbba8d1de1e7e9bb219a92eb6c1c698d3b33a37f9b8197d26b550febd2601e7a643ea7e1d9e448ae037f629a306ce417aeb79f2e3ca44d8db3848a811f1846811cbcb874f8af09e0fd0173cf175f304115476bf2c6c2d2f332eba534f46aae801c2692c2d2faddfeacc0f1dace440abc2ae5e5a49d578fd7f9de2a841ad6b6769c32b144ceea16d0f3c0cb3a8ee694c38c28073595096c813762cc2c5ec4b0d8d723dd660853278fc72fd6bd9d1272933dd2a38ed9d04b1390ffe4b294a6fffa721ee3bba33a03a149c4a0345265c01ce015e94db419cff7049852ee000048a85758f6d7b1c59c5089ee018ed09b52\",\n        \"signed\": \"bcb4b850696011997eb5dfe143f1a3d5628ef1a5407691ee48c79d69abe4d533f817ad7313b5795e46e595f3ae3a9165b1b6fddae86164ffcba376249837f609a80b46079fa775f8c1a19fa0829be666bdfdca079cad43d70e0842183bc0db95468a539f0db2aea3ab9c7073b45d228a9bde232897a6eb6fc9edf7365e7101ba97c446a519a3649cf527c8a6de7251b92806815ac2fa0082eff75e2582cbca7e1e4da2a446ea233e7cf7cedfb0e2398eb6e11bbaefe3f7ec89f5d73dd34bd47fbcb4d7b22f2aaee373785651841135cd8661a701b21084a316deac3074e24a2e35a0330f7d1479b932f285277c18a441787224fbbe46c62e834a1851ed237998d48dce20ba114d11e941be29d56d02f7370c8f6d6d7e50248dcd8ec89d3b22f4f58778129fafd4bb92ede17714bf022a5bf92be479f18e63852ecdcf8c4211f530dd30f79cbf4bfa5737f0bad3b0106067f41327c3189e6f206f0d4f3c704bf2bd0b161f018fd21cddfb418bac4d52ef02c41c8792e413b04f0836cea1f86c92e5d5703bee2b5c5899e285992024f64e0d16c60ad0fd92547932d0c5cb98d8da22feebdbba8d1de1e7e9bb219a92eb6c1c698d3b33a37f9b8197d26b550febd2601e7a643ea7e1d9e448ae037f629a306ce417aeb79f2e3ca44d8db3848a811f1846811cbcb874f8af09e0fd0173cf175f304115476bf2c6c2d2f332eba534f46aae801c2692c2d2faddfeacc0f1dace440abc2ae5e5a49d578fd7f9de2a841ad6b6769c32b144ceea16d0f3c0cb3a8ee694c38c28073595096c813762cc2c5ec4b0d8d723dd660853278fc72fd6bd9d1272933dd2a38ed9d04b1390ffe4b294a6fffa721ee3bba33a03a149c4a0345265c01ce015e94db419cff7049852ee000048a85758f6d7b1c59c5089ee018ed09b52\",\n        \"signature\": \"bcb4b850696011997eb5dfe143f1a3d5628ef1a5407691ee48c79d69abe4d533f817ad7313b5795e46e595f3ae3a9165b1b6fddae86164ffcba376249837f609\"\n    },\n    {\n        \"secret_key\": \"65eea9ffb75612bde1d9ba3ea4fb5eda0aa6f2556ab15bf1817cee3b95bbba12\",\n        \"public_key\": \"5b3936dc749b6b9239f15798accafd884c3659ee01b2d17d74fc7da78274e7e6\",\n        \"message\": \"c06936323ce3253cac5ab4f6b83270cd4cfe85d0bf8bac1e1b8d5f0b153f541c8e8ed95f28d5c85a2315cd931b7cf3edae50f92830599162804b1363d3ac0da0abd09751023bddc16288944e616d21d91271978bb782d3ebed7fa61284c7490d27593ca8a3d5b475623307010abc1fbf793a816aaab5e0924dec79d60498965cf7f80ab59fc029f782166755b72b869075434ab606cc870a7c0bc8bf29aee033fa9cc122ed7c8e069b547dbae25901b9e249b41fea0bf8daf3826866bcaed2753b5e91ae937e717b508a0acf4c3b061ff0cb9cfd380e2494500951a662fd4928fc5fcaf6c18e84b1d378e49bd9d59686d087ebd552d07fa9ba816fa5402ca9e7252a648d106cfe6c431cc2a053e2294637cdb99d96abe689edabc5ca070f77c1ecd1d52d5385289f17ced768c3971671b9c0b2f855b8461c1e746c7b38f77896b85afbbedd08375fe922984614dd849fe2cb89ae7149dcd1d37f4936e67b1440be72e009398be6f083bf9611480b592fe2f0118e253db5d2e9e4b4541c11da00f7161a736e5f0bb934208e3ef4e0b9a52258203f060d18a195159e5e268aa28053c834f7bd5db9bd71f507d91370b3ffcabbd4acb3071d3f6d52c349acf35095348cebf5a86f8c59ddc965eff610ac425804c0e2f6be42853f5b46434a2c31d9ac99539bfdc04ecf2fefd04598fa63c139ff6c6d88410e73bd328cc4349ab4bb86f2e2ed7c73de96520ef7730ef38345e0f972a84c5388103687e68c50f9d8c9af903bc632d43204062a4f502e214c07059c2cbef72a54110dbf73e425402d17e978ec199b518cec0310bfbf7d9ad300434a4a\",\n        \"signed\": \"baa7113155358c924fed57488a6567f8723850a9f5c03a0d7de85fccd8fb4d17d7753523b00c0d8adb884dc0c8a7a44dc2a60083aa5b3c5b94a8d880f2a94d09c06936323ce3253cac5ab4f6b83270cd4cfe85d0bf8bac1e1b8d5f0b153f541c8e8ed95f28d5c85a2315cd931b7cf3edae50f92830599162804b1363d3ac0da0abd09751023bddc16288944e616d21d91271978bb782d3ebed7fa61284c7490d27593ca8a3d5b475623307010abc1fbf793a816aaab5e0924dec79d60498965cf7f80ab59fc029f782166755b72b869075434ab606cc870a7c0bc8bf29aee033fa9cc122ed7c8e069b547dbae25901b9e249b41fea0bf8daf3826866bcaed2753b5e91ae937e717b508a0acf4c3b061ff0cb9cfd380e2494500951a662fd4928fc5fcaf6c18e84b1d378e49bd9d59686d087ebd552d07fa9ba816fa5402ca9e7252a648d106cfe6c431cc2a053e2294637cdb99d96abe689edabc5ca070f77c1ecd1d52d5385289f17ced768c3971671b9c0b2f855b8461c1e746c7b38f77896b85afbbedd08375fe922984614dd849fe2cb89ae7149dcd1d37f4936e67b1440be72e009398be6f083bf9611480b592fe2f0118e253db5d2e9e4b4541c11da00f7161a736e5f0bb934208e3ef4e0b9a52258203f060d18a195159e5e268aa28053c834f7bd5db9bd71f507d91370b3ffcabbd4acb3071d3f6d52c349acf35095348cebf5a86f8c59ddc965eff610ac425804c0e2f6be42853f5b46434a2c31d9ac99539bfdc04ecf2fefd04598fa63c139ff6c6d88410e73bd328cc4349ab4bb86f2e2ed7c73de96520ef7730ef38345e0f972a84c5388103687e68c50f9d8c9af903bc632d43204062a4f502e214c07059c2cbef72a54110dbf73e425402d17e978ec199b518cec0310bfbf7d9ad300434a4a\",\n        \"signature\": \"baa7113155358c924fed57488a6567f8723850a9f5c03a0d7de85fccd8fb4d17d7753523b00c0d8adb884dc0c8a7a44dc2a60083aa5b3c5b94a8d880f2a94d09\"\n    },\n    {\n        \"secret_key\": \"08dabd4e5c119ea907ce45f0a7af9e62c0c3f1c9ec61ad10567d79362854c557\",\n        \"public_key\": \"945406b85d7b32e0b1ab1200b94222de1aaa68624c60bb4716b0bce9df005771\",\n        \"message\": \"6c4719a5a2a6894835c4ac1ed69159e5ebb5692ad8eaada439f79e96684b36cecfb44b89015631663e0644f6c7ab713989d742da27427253318a52432dfab2121d1e9233ead719e2c86a6be07363d002173f205446ca95fc17b24635827fe315f222408e45e833f29ff08ff31dac583a4bec7076d5cc78cfc94451cbf4f7e2fc5b5ed8070f4ef808be1d8a680ecdff59010f39b1de80bef1719f1e218e0ce0a1e393a566c51764d2370d95a61191d8f7af740dc208fa7831b210670512cd73766e609e9b780021ebb20cc8790d8da5f10f5b6a114a1db88f66766501802d9c366ea3fa6f1b1e1e8b0420943413cc6feab28c6b683cd2b333069c8951bc45e8a13bd522578351c882f7c342fe4331b921f533c92ec04a49b292bc569ddcefcab5727f9b5625b167a902dc896d8bc7d8e99920f5db8dd767839c43e3cdf947080dec954214a6fbbe0487a2f32cd17a6b000370bd414484fb73c510ea0124c6cf0fe56c0846a79bfc59779d3b07a1bd2c7fb7e2d0039f0bd21c8a308fb0f58fdbf94efa0857ac3bdddd86d5763e205ee1b221f060cedb8bc05f031b606cc74dadc5db04232748865a73d6ccddb4d5e930d528348c5be9088bfe34458487a67b19a18eca25c0d3fbe2195eb91707b65d9161ea93eddd64a634b23280195fdb0d1388f6998e1858a45b886999b844e6795d83d31837e4411f71699226de1ba0245608000dcf223dd18359b7c6d459a65dbe66c90f5cb8c09122187a3046a16dd179c3f4373e57cf5ee0eab6a212cc9ed8b54bf37f1d27fbd79848e4ec1f567243ab8740a05149d9602eada920a46d610d3cc823b56498\",\n        \"signed\": \"33adbfcd4ed4fa67c58b5cb59e16987148697812660b3531ff6a21c749b9601660baeee2489b82b4cde132b6e62f2f90d8f9927860aaad25281d03eb17a9520f6c4719a5a2a6894835c4ac1ed69159e5ebb5692ad8eaada439f79e96684b36cecfb44b89015631663e0644f6c7ab713989d742da27427253318a52432dfab2121d1e9233ead719e2c86a6be07363d002173f205446ca95fc17b24635827fe315f222408e45e833f29ff08ff31dac583a4bec7076d5cc78cfc94451cbf4f7e2fc5b5ed8070f4ef808be1d8a680ecdff59010f39b1de80bef1719f1e218e0ce0a1e393a566c51764d2370d95a61191d8f7af740dc208fa7831b210670512cd73766e609e9b780021ebb20cc8790d8da5f10f5b6a114a1db88f66766501802d9c366ea3fa6f1b1e1e8b0420943413cc6feab28c6b683cd2b333069c8951bc45e8a13bd522578351c882f7c342fe4331b921f533c92ec04a49b292bc569ddcefcab5727f9b5625b167a902dc896d8bc7d8e99920f5db8dd767839c43e3cdf947080dec954214a6fbbe0487a2f32cd17a6b000370bd414484fb73c510ea0124c6cf0fe56c0846a79bfc59779d3b07a1bd2c7fb7e2d0039f0bd21c8a308fb0f58fdbf94efa0857ac3bdddd86d5763e205ee1b221f060cedb8bc05f031b606cc74dadc5db04232748865a73d6ccddb4d5e930d528348c5be9088bfe34458487a67b19a18eca25c0d3fbe2195eb91707b65d9161ea93eddd64a634b23280195fdb0d1388f6998e1858a45b886999b844e6795d83d31837e4411f71699226de1ba0245608000dcf223dd18359b7c6d459a65dbe66c90f5cb8c09122187a3046a16dd179c3f4373e57cf5ee0eab6a212cc9ed8b54bf37f1d27fbd79848e4ec1f567243ab8740a05149d9602eada920a46d610d3cc823b56498\",\n        \"signature\": \"33adbfcd4ed4fa67c58b5cb59e16987148697812660b3531ff6a21c749b9601660baeee2489b82b4cde132b6e62f2f90d8f9927860aaad25281d03eb17a9520f\"\n    },\n    {\n        \"secret_key\": \"e0f7d00824c5f3701e5517a4abc13e2f2c0b138c836977843bbd1eeffabd968a\",\n        \"public_key\": \"52fddae3e018a68473b3168d0764cfe274dcc834c90a91fb4fe74b939dd238b1\",\n        \"message\": \"b39e3ac75a221adcced09a8591ac5e2fe15dfed5b919cbaf14c65eb7cd93086ddee3f7472547e66ddc70062b976297d1a3c170ee525c9c53ba93a4c4fdb23572b7ca6ed13853e70db1d72edeb9944bbc354a520e77ae591f318092efd5e66d9c0981c4a4bda98aa4e59045ff9c4b4ca3acb2ffd893201c70b34a77f24eda54549dc84ad134a35532553815888ae3dd9e241ec4ebbff86f8c1e8adbaac4b91afd18228cbbd5dd805acabf0a1e290ce5dda0251adfb37cb714c139b5a3242d88c64484a37655cc8fcbecffa97fbd14d64d512bf8f6305f89c50922de541692158fb547fd539f1e5877cc649495166332ea2b685cfa3f602019df2ab2c25ed96b68745e9ae89c948da11ad8a830df8b00f2e668192dadf2c5620d35c6e81a2853f841e375a0d9fca2d296efce2ac38d40b030b57560ae6e8341339b3d3c2d061164124319598688fca618fc64c9e8f5f831097a053af19d7dbd61218d926742c2e9a42a79cc1b148912722d8cd5ca793a1ad73b5f141b41809c2fc0530b7630e80390c6b338c71868dacc59bf463ffc489016bf67f9c9d5553c1ede17152813fe0b264b65dca1b2b38e4b809f8c9725ac5b1d8d2e56bec9649fe55c7583ff23b043d6f3768628f1f0516337824a5a56b409520a6a6cb77e4f5fc20b9f6899e00ab22db10d182f09b81e94f3ad568a0b81244df3f1855c6ef222a41a51b62a4649bb82690ab65facac0d81d6fe02601170a8db62cbc5ec9955d7711a1c39656a9f6e1fb6bc183d9bea1503531f17362768bb841f9d21f13a2c991e55dff7f2b336e29eb29507638bdcad7bb31c69e909207ebabcc653ff\",\n        \"signed\": \"ccdfe18ad6d0b65d086d632f83cc46ff3b3f2c07bb8e769d0fb4e82df8a3873f9aee35fdd18a5783603180a95c9f74ced9db5146afcfbbdd40df29e04201200cb39e3ac75a221adcced09a8591ac5e2fe15dfed5b919cbaf14c65eb7cd93086ddee3f7472547e66ddc70062b976297d1a3c170ee525c9c53ba93a4c4fdb23572b7ca6ed13853e70db1d72edeb9944bbc354a520e77ae591f318092efd5e66d9c0981c4a4bda98aa4e59045ff9c4b4ca3acb2ffd893201c70b34a77f24eda54549dc84ad134a35532553815888ae3dd9e241ec4ebbff86f8c1e8adbaac4b91afd18228cbbd5dd805acabf0a1e290ce5dda0251adfb37cb714c139b5a3242d88c64484a37655cc8fcbecffa97fbd14d64d512bf8f6305f89c50922de541692158fb547fd539f1e5877cc649495166332ea2b685cfa3f602019df2ab2c25ed96b68745e9ae89c948da11ad8a830df8b00f2e668192dadf2c5620d35c6e81a2853f841e375a0d9fca2d296efce2ac38d40b030b57560ae6e8341339b3d3c2d061164124319598688fca618fc64c9e8f5f831097a053af19d7dbd61218d926742c2e9a42a79cc1b148912722d8cd5ca793a1ad73b5f141b41809c2fc0530b7630e80390c6b338c71868dacc59bf463ffc489016bf67f9c9d5553c1ede17152813fe0b264b65dca1b2b38e4b809f8c9725ac5b1d8d2e56bec9649fe55c7583ff23b043d6f3768628f1f0516337824a5a56b409520a6a6cb77e4f5fc20b9f6899e00ab22db10d182f09b81e94f3ad568a0b81244df3f1855c6ef222a41a51b62a4649bb82690ab65facac0d81d6fe02601170a8db62cbc5ec9955d7711a1c39656a9f6e1fb6bc183d9bea1503531f17362768bb841f9d21f13a2c991e55dff7f2b336e29eb29507638bdcad7bb31c69e909207ebabcc653ff\",\n        \"signature\": \"ccdfe18ad6d0b65d086d632f83cc46ff3b3f2c07bb8e769d0fb4e82df8a3873f9aee35fdd18a5783603180a95c9f74ced9db5146afcfbbdd40df29e04201200c\"\n    },\n    {\n        \"secret_key\": \"6acd939e422226cc5443d4aabf58c11af650cb40b9648b4da38b927bff9a58db\",\n        \"public_key\": \"4c0b91756b9e206f7863b155ffc5509bb52477ceacd01ca011435153678646cc\",\n        \"message\": \"8250d531cf2b66aac2b378d54bc57fd329ad5a414a599255898b3c3b45bf9c0d2c77547566b660eecc76a695a2d608abf11a5f6db3e607fd5a21714b0fad5d814c015ebf48bb73ad75da9c03c4af5489e782b6bf7908a1bd528d7ce788a18ba3528e3537aa7bbf75f6524bbd19a5304ba2a4a3ee58c41fec3132ee6501641215eff746d7800c4d33f52be8357e0ee758041d91cfe43c60c3cedc09b0d46d4cfb9ae2a0239b6f33c6941cff35372670eef5c8859ab65b6e9f7ebce32fa15a9a477aecdc9683a1e33a1edcdc90d420a31e78c153d26020871daa4fff28acc3f11a7206788806b6fa023468ea5a3d186d10f0dd567796663ba37c832fe75aae7dccebf319f93600c46a22f57223812ddd0a68d76baf5e27a9fc8bd68cc10b5b5151d62b41f9348e21b715352f2630b617f813b0c28996285904cf294e9c2856b17ba35f9a82198b8214a035e2896d6568be42392ccef32cd4ebfeebf12be0125206bbe89336d3e762991dfab68fc99dc1649b891383db31fab649e628823f4598cb636a38fe1df73e68d7425fc5d2eb55a0fd1bc9f5ceaabd6dd41f23e4f086c692633dc3c4619a97ab0eada171f84adf20ecc8ecd47c51cca3e59dd809b0aeaa730df94be3bacfd8ee888bba9d570850652cd4d5e6c552a57e9f48a2b06aacdc708d84a376fbc6c94ba6bf64a5f018800a7cc851245aedb20378b329acebb2977c1398082b3a0e5e2a9c2484fa301d3037a8224ddcc095b1dbd8a2315b55bf3318c27810efc3d8e25fa7a8789b73a4f55059080b08abb3699b7b8626cb2a780d97cc1ca8032851baf4ed8b64fc4330865f84ccb12a3dae\",\n        \"signed\": \"79995877ed24c791684f2984bdf9609c3f7b576c57d162ee622d4ce8f36d9c5573169d8801216f1c46ffe2f6e2c09048e47d4beb997e9abc4abb129f9b79690a8250d531cf2b66aac2b378d54bc57fd329ad5a414a599255898b3c3b45bf9c0d2c77547566b660eecc76a695a2d608abf11a5f6db3e607fd5a21714b0fad5d814c015ebf48bb73ad75da9c03c4af5489e782b6bf7908a1bd528d7ce788a18ba3528e3537aa7bbf75f6524bbd19a5304ba2a4a3ee58c41fec3132ee6501641215eff746d7800c4d33f52be8357e0ee758041d91cfe43c60c3cedc09b0d46d4cfb9ae2a0239b6f33c6941cff35372670eef5c8859ab65b6e9f7ebce32fa15a9a477aecdc9683a1e33a1edcdc90d420a31e78c153d26020871daa4fff28acc3f11a7206788806b6fa023468ea5a3d186d10f0dd567796663ba37c832fe75aae7dccebf319f93600c46a22f57223812ddd0a68d76baf5e27a9fc8bd68cc10b5b5151d62b41f9348e21b715352f2630b617f813b0c28996285904cf294e9c2856b17ba35f9a82198b8214a035e2896d6568be42392ccef32cd4ebfeebf12be0125206bbe89336d3e762991dfab68fc99dc1649b891383db31fab649e628823f4598cb636a38fe1df73e68d7425fc5d2eb55a0fd1bc9f5ceaabd6dd41f23e4f086c692633dc3c4619a97ab0eada171f84adf20ecc8ecd47c51cca3e59dd809b0aeaa730df94be3bacfd8ee888bba9d570850652cd4d5e6c552a57e9f48a2b06aacdc708d84a376fbc6c94ba6bf64a5f018800a7cc851245aedb20378b329acebb2977c1398082b3a0e5e2a9c2484fa301d3037a8224ddcc095b1dbd8a2315b55bf3318c27810efc3d8e25fa7a8789b73a4f55059080b08abb3699b7b8626cb2a780d97cc1ca8032851baf4ed8b64fc4330865f84ccb12a3dae\",\n        \"signature\": \"79995877ed24c791684f2984bdf9609c3f7b576c57d162ee622d4ce8f36d9c5573169d8801216f1c46ffe2f6e2c09048e47d4beb997e9abc4abb129f9b79690a\"\n    },\n    {\n        \"secret_key\": \"4deff647cbc45ecaedc3f7ddf22c167af24e3d63da22b0e6a5b8439c0f3b1934\",\n        \"public_key\": \"0c27c9d77ac8c725bb0663933ab30d1aad09cbcf2cd7116c6085a8499f701402\",\n        \"message\": \"d6201ebc21cec1e9bc28f957c9d029cc38f9e85e06dfc90bf297e61f2b73b407d982a66b91e94a24e91d06ab8a5c079d0f69be5788ea8feacebd917291192233862e6acda1e8cf9a48bffb5491dd65af541b6c72af681a81823d98a0abeeb6ba9f95465b8411f99e119cd28479da984259bdf86c9fef3cca34e224691f183cf095037727da9cad29f242f83eb4f736e27fdf67018d711b74c45b2955a6a76ec15330df5bad8030c6b3a88d72f28447652ac8902b5b76cbf6b945ceabfec04a9b8cb30f43d9eb773e6705594f0de1b70f1a20c99fc4b1221f8c81b0bc30da12cd5dea8f4d90f13a811a2cc11a96846aafb4c42a00e9ae7da256a0d22b198afc25cc1041d24e056cf387601d7bf7eb3182d605fe5e63b18d531a5f84e5dbd0184a76c6c467a8263a98b5c005fcb2aaf989f5cbd0a9d903fcfc609d6e57d9c439021cea93e4c4e991f193caf3243770b32578748076b7f4cb97f17c17a79b82253c2423db698cd0a33ab33bb09b0b08cb8ceadca1e29c5de2fc12b2407b6cc5af5ae976dd3ec630d8339b7dd11fa34caac150c7c4791d8c427b0ad92e0529067a88d52011e1e0a18299b969896f8b8360f75c45c496da47b09b450f9822bcbcd43f4293c516802bf747c4abeedfaa3e79cb9103d3770f5607b77516e5b1ce0f64b6eec7bec3c647c006956dc55b6c79f6afb39d1fc3ecf11b974b44aedb72aed1316635083c2124502e5c72d86ecab6ac90243eb39a6aa9cb9480da38e1edb8d28ff90924c05d5d21af5af95957b8020781378711a29d0920acad8ccb39a311693278c9900b470da2bd4c12a01d73962644017b6034713b2a\",\n        \"signed\": \"dd5489fde4ba87d1173d4cee0682afdd4bad80dd770ea7d0dcebaf21acc61dd6324aca295ed0e23a915ecfdad50f175ebc516f1be5b6d87d90bbe38622495302d6201ebc21cec1e9bc28f957c9d029cc38f9e85e06dfc90bf297e61f2b73b407d982a66b91e94a24e91d06ab8a5c079d0f69be5788ea8feacebd917291192233862e6acda1e8cf9a48bffb5491dd65af541b6c72af681a81823d98a0abeeb6ba9f95465b8411f99e119cd28479da984259bdf86c9fef3cca34e224691f183cf095037727da9cad29f242f83eb4f736e27fdf67018d711b74c45b2955a6a76ec15330df5bad8030c6b3a88d72f28447652ac8902b5b76cbf6b945ceabfec04a9b8cb30f43d9eb773e6705594f0de1b70f1a20c99fc4b1221f8c81b0bc30da12cd5dea8f4d90f13a811a2cc11a96846aafb4c42a00e9ae7da256a0d22b198afc25cc1041d24e056cf387601d7bf7eb3182d605fe5e63b18d531a5f84e5dbd0184a76c6c467a8263a98b5c005fcb2aaf989f5cbd0a9d903fcfc609d6e57d9c439021cea93e4c4e991f193caf3243770b32578748076b7f4cb97f17c17a79b82253c2423db698cd0a33ab33bb09b0b08cb8ceadca1e29c5de2fc12b2407b6cc5af5ae976dd3ec630d8339b7dd11fa34caac150c7c4791d8c427b0ad92e0529067a88d52011e1e0a18299b969896f8b8360f75c45c496da47b09b450f9822bcbcd43f4293c516802bf747c4abeedfaa3e79cb9103d3770f5607b77516e5b1ce0f64b6eec7bec3c647c006956dc55b6c79f6afb39d1fc3ecf11b974b44aedb72aed1316635083c2124502e5c72d86ecab6ac90243eb39a6aa9cb9480da38e1edb8d28ff90924c05d5d21af5af95957b8020781378711a29d0920acad8ccb39a311693278c9900b470da2bd4c12a01d73962644017b6034713b2a\",\n        \"signature\": \"dd5489fde4ba87d1173d4cee0682afdd4bad80dd770ea7d0dcebaf21acc61dd6324aca295ed0e23a915ecfdad50f175ebc516f1be5b6d87d90bbe38622495302\"\n    },\n    {\n        \"secret_key\": \"5a19bf6c941f394e93bd3625fb81cd9da81c9020b1c531257a7b5957bb079211\",\n        \"public_key\": \"20e8699d087ce5e8151d28053dce66c23f28081f35bd26819bbe85d38a09d702\",\n        \"message\": \"f721ca3a32c1e81c9c6f46d5e1fb50e7ce2f4e709333ca2b550d5213b6773d670ca59a2b5086a443843ac50813b244c9c9fac6d119698927813512c84fe30a89553010138f91e8176f5cf25789d7281ddb83a246705dccb999c4cd0ae219c645f6d71d451ae1f8d2f9891af8ccce03f438559fb83667b8077fbe435a744af019d6d1399fd2137f5afb8ef3f47bcf735e7c9ed8a54ba0c1c656b6650bb30adb1d57ecd2074639494231a2e9e2f985ed8422ee03cb3fd738c735a1b82806047460ed84f7468c3c64b35db06bc58de4bba463e638a94133df106ac4f470361ccde44157299d225b17798891baf5921986a2bae326dda0b89617c677bd1408ba2748baa67c8a2c5a969bc00cb40dbf490e07e22c913afdde6304a07fc9e60846992456bfb0663a09def68def67a16d29e98c7b55351848a8cf92310c7463c475f249c6f7557fd0d755ca88f877847fe0765756ac34a23f7840d95c3d294e663bb1518b75927c410757e0f5c07c5a7fb215dc7207433ebf791edfcec90e930f8e3ba9dbbb985413c223be87873bd323997581804d8896da386a6e9120050a0eaed31240aa17c7b6694c30cbcc3c6956a6820fc9ab21875533963dc3b0d88358271276c6056528910dd989ae0c330d1798f7d8e7d1184b84a81434325b8c302edf601dc5e6f847fbacbdeeff78c6621d1dafdc239b18b8c1afdcb4b9dabd5d3a92a932ea1599546e625f96d6ec6fb1cccb76b476b330ac59259c634fac9b3fa7de7ae7053773b5befa001b04929f74b71241e1b257696d65a26c1b4ac86b7b1fbd6957fb9b95084ce7d70090f55d44534694305e91769a82941304\",\n        \"signed\": \"2a2fd6054ef4e79b72191a0ccbd2b18aebabe8b9a71861ded98b7cdcb6a6255328bc1aecb0c9335721a9a96ee4b5b43f90d322ecf835f78b264dae6e387bfb04f721ca3a32c1e81c9c6f46d5e1fb50e7ce2f4e709333ca2b550d5213b6773d670ca59a2b5086a443843ac50813b244c9c9fac6d119698927813512c84fe30a89553010138f91e8176f5cf25789d7281ddb83a246705dccb999c4cd0ae219c645f6d71d451ae1f8d2f9891af8ccce03f438559fb83667b8077fbe435a744af019d6d1399fd2137f5afb8ef3f47bcf735e7c9ed8a54ba0c1c656b6650bb30adb1d57ecd2074639494231a2e9e2f985ed8422ee03cb3fd738c735a1b82806047460ed84f7468c3c64b35db06bc58de4bba463e638a94133df106ac4f470361ccde44157299d225b17798891baf5921986a2bae326dda0b89617c677bd1408ba2748baa67c8a2c5a969bc00cb40dbf490e07e22c913afdde6304a07fc9e60846992456bfb0663a09def68def67a16d29e98c7b55351848a8cf92310c7463c475f249c6f7557fd0d755ca88f877847fe0765756ac34a23f7840d95c3d294e663bb1518b75927c410757e0f5c07c5a7fb215dc7207433ebf791edfcec90e930f8e3ba9dbbb985413c223be87873bd323997581804d8896da386a6e9120050a0eaed31240aa17c7b6694c30cbcc3c6956a6820fc9ab21875533963dc3b0d88358271276c6056528910dd989ae0c330d1798f7d8e7d1184b84a81434325b8c302edf601dc5e6f847fbacbdeeff78c6621d1dafdc239b18b8c1afdcb4b9dabd5d3a92a932ea1599546e625f96d6ec6fb1cccb76b476b330ac59259c634fac9b3fa7de7ae7053773b5befa001b04929f74b71241e1b257696d65a26c1b4ac86b7b1fbd6957fb9b95084ce7d70090f55d44534694305e91769a82941304\",\n        \"signature\": \"2a2fd6054ef4e79b72191a0ccbd2b18aebabe8b9a71861ded98b7cdcb6a6255328bc1aecb0c9335721a9a96ee4b5b43f90d322ecf835f78b264dae6e387bfb04\"\n    },\n    {\n        \"secret_key\": \"b506c01d69746eb4bc6358720e438ad330c88b605aad652f4799573ab0a1aaf9\",\n        \"public_key\": \"7ac8b68863bd69151583789d864a7357e3a045fa86522a9daa6e26fb79ed6d23\",\n        \"message\": \"f7fc18066ed04b30e633d9865da3214beca60bd796019cd7ecc91866f9ef2446c1fab06d8651be7f101aec7bb84ee21e71ad020215fcfb36f2d11e4579ac39f8e2b1290e3896d522bcf513aaa06771f86ee228cff3a20a1f10c564339589bba9605344c0a6e682ad5ba40d1041941bc46f98b9d09ca17f8f044e983b8a4908933df2263cf78811c24c8f4814354f6f4c68b7ee7b78308293bf78fd0ff122f095c14a73a59797172ae05cfcec19563eb18d2bc5300ed4bf6bdc443ea9b8bc1cbede94cab905eda5a6a931597de402146fac9cf8cd6a8d104669f913fa834001ca4d090fb7949d3109a63c0549b03f151b7117c4f46974ba59c68296edfdde7692ee432acef7610647e0957865e62c1a0cf05659823a55452dd5e471b31c5a49ab05b5aafd5a0e530e896b58cc522ecf19e52ec82fa147f9e385174c7ec33d1d9b86934aeb4f6c5700f7d5eb33ff73c9fc6aa47df51e09229e6ae894e86c818bef065f825971a4cb90adfefb31ebd9d1b79422dc9868f9f74e7a32cd4071efb69b27233e6e5c60dedcd5321c030a46cd26f5602cac747ee4b522d857a3321a03f403a6006250406361e48815afba77ce08903441845ba87225d8b24046745d4065645a1b98410cac48d137cbbb8ab1eba50da9c231e9acf322a6dbec0ef416a446c3b610d93569fdf45aa6cdc1b640d8f301d78693b2826cc6ed468568ad9a0f94aa9b9fb92f7e78d484fdf5d8d45c991e28074dcdd680d3b1f189ef6bdc320ee6e64dd1f80d9264d83042d2c43d83581ef0394b1b5d1f69f3bbbf04b7c808ba34c1580f16f76537b6a7ebd0a1908be9494d3fcaa9871db15750\",\n        \"signed\": \"17a19d2691b7b046d7b19669ad73140db92f0c978c7f61bc3867d92ca9d47580a0380b5901bad82af45f676f74287301980f71871a42261dbe0802950336e60bf7fc18066ed04b30e633d9865da3214beca60bd796019cd7ecc91866f9ef2446c1fab06d8651be7f101aec7bb84ee21e71ad020215fcfb36f2d11e4579ac39f8e2b1290e3896d522bcf513aaa06771f86ee228cff3a20a1f10c564339589bba9605344c0a6e682ad5ba40d1041941bc46f98b9d09ca17f8f044e983b8a4908933df2263cf78811c24c8f4814354f6f4c68b7ee7b78308293bf78fd0ff122f095c14a73a59797172ae05cfcec19563eb18d2bc5300ed4bf6bdc443ea9b8bc1cbede94cab905eda5a6a931597de402146fac9cf8cd6a8d104669f913fa834001ca4d090fb7949d3109a63c0549b03f151b7117c4f46974ba59c68296edfdde7692ee432acef7610647e0957865e62c1a0cf05659823a55452dd5e471b31c5a49ab05b5aafd5a0e530e896b58cc522ecf19e52ec82fa147f9e385174c7ec33d1d9b86934aeb4f6c5700f7d5eb33ff73c9fc6aa47df51e09229e6ae894e86c818bef065f825971a4cb90adfefb31ebd9d1b79422dc9868f9f74e7a32cd4071efb69b27233e6e5c60dedcd5321c030a46cd26f5602cac747ee4b522d857a3321a03f403a6006250406361e48815afba77ce08903441845ba87225d8b24046745d4065645a1b98410cac48d137cbbb8ab1eba50da9c231e9acf322a6dbec0ef416a446c3b610d93569fdf45aa6cdc1b640d8f301d78693b2826cc6ed468568ad9a0f94aa9b9fb92f7e78d484fdf5d8d45c991e28074dcdd680d3b1f189ef6bdc320ee6e64dd1f80d9264d83042d2c43d83581ef0394b1b5d1f69f3bbbf04b7c808ba34c1580f16f76537b6a7ebd0a1908be9494d3fcaa9871db15750\",\n        \"signature\": \"17a19d2691b7b046d7b19669ad73140db92f0c978c7f61bc3867d92ca9d47580a0380b5901bad82af45f676f74287301980f71871a42261dbe0802950336e60b\"\n    },\n    {\n        \"secret_key\": \"e1ccb80a262ff8af1eda075c972c8e941e77cef57bdb0a82572c28200b493ca3\",\n        \"public_key\": \"3d37e2a5027effdee07fa511e423b2bc56edcea075b41649766725c6b30a10f4\",\n        \"message\": \"cfdc5497b023afa62a7fe592caa92b875c7705747834002f7784ff166189398815d4e8a7a0038e1fdadddeba51057327ad1960e859cee56526bbb4127b6a5f90d04d08b15eee66c9ccf88b4b7d1ee9d3b8b8c6f42db3c34e59048a15c6041f142c4079368b7b11e29970118b99e5670ae31fccfdff1399142ee06b2e3e2b3c9707dd64119786e2fab47e0bad2cc8b558d963bb48a49ad2c637dd35b25db54bc5a2630222fa2acece9ce12ab0813077f7659f5074429ca6b494331032ae792a599c425ee297451dcf5ee195290312742e647a7795b84dcc664ddae2a1fbf8c4548a37fd82d810e2145f01df1a6d3bcc42a91a10768e091f3d69329a7bad6c072cac6d89afa31c029056d6b62212165cebcd49ac672e3830267af9f28ea319bd042f6c59de4701e58248736c8d976acf93b99d2f4647a547d392447a48dac11181e16b1501a94c9316e5a67c990b35810b4cda0473a6a4e57614215868e2e002c6058b42e4eeec84139dc19edf5f80aeeffa4f5b07e8fd23139edda31899ebe6fee78643ce686b2963a32072bd3b3bba68485a05c2cc0456c3da50c7c8c651a3066d13a3660bd47ab6dfec49e01557a6742896aa4bc6363a797dbad1a409cd4a50911e70ea007af8e9b1bb7e3ab56215a575c90f739c2d48b3b34694b5acdf07980ae528de0621edfac8b8fa84954d56dbb4d03082b984f13e5dbe9c7112ff9716f55053064662ce0fb81ea35f98fd2cd51137a46f64e0c1caf44e5407dc961760b2597f7f9200617d471340cf15176c3da880fe4e0e93a72fb94926faed865dfdc772e185292c1e36b1211781c3e938e3d4f24e29af517a379683\",\n        \"signed\": \"fda34b652b79746f897e222d37b77aa250d02c527c4833df80ea41d52189d50700e128b78ee8149c9b19f3abf755acef5348f5fbaf1ceb41c038906ac5946001cfdc5497b023afa62a7fe592caa92b875c7705747834002f7784ff166189398815d4e8a7a0038e1fdadddeba51057327ad1960e859cee56526bbb4127b6a5f90d04d08b15eee66c9ccf88b4b7d1ee9d3b8b8c6f42db3c34e59048a15c6041f142c4079368b7b11e29970118b99e5670ae31fccfdff1399142ee06b2e3e2b3c9707dd64119786e2fab47e0bad2cc8b558d963bb48a49ad2c637dd35b25db54bc5a2630222fa2acece9ce12ab0813077f7659f5074429ca6b494331032ae792a599c425ee297451dcf5ee195290312742e647a7795b84dcc664ddae2a1fbf8c4548a37fd82d810e2145f01df1a6d3bcc42a91a10768e091f3d69329a7bad6c072cac6d89afa31c029056d6b62212165cebcd49ac672e3830267af9f28ea319bd042f6c59de4701e58248736c8d976acf93b99d2f4647a547d392447a48dac11181e16b1501a94c9316e5a67c990b35810b4cda0473a6a4e57614215868e2e002c6058b42e4eeec84139dc19edf5f80aeeffa4f5b07e8fd23139edda31899ebe6fee78643ce686b2963a32072bd3b3bba68485a05c2cc0456c3da50c7c8c651a3066d13a3660bd47ab6dfec49e01557a6742896aa4bc6363a797dbad1a409cd4a50911e70ea007af8e9b1bb7e3ab56215a575c90f739c2d48b3b34694b5acdf07980ae528de0621edfac8b8fa84954d56dbb4d03082b984f13e5dbe9c7112ff9716f55053064662ce0fb81ea35f98fd2cd51137a46f64e0c1caf44e5407dc961760b2597f7f9200617d471340cf15176c3da880fe4e0e93a72fb94926faed865dfdc772e185292c1e36b1211781c3e938e3d4f24e29af517a379683\",\n        \"signature\": \"fda34b652b79746f897e222d37b77aa250d02c527c4833df80ea41d52189d50700e128b78ee8149c9b19f3abf755acef5348f5fbaf1ceb41c038906ac5946001\"\n    },\n    {\n        \"secret_key\": \"4fc512efd86e3a63b395eaff1ba011e1590fb9326ad3ffede7876dcc3e9fabdc\",\n        \"public_key\": \"26c2a22f9bfad90606dc613ff107021fcddbec7237066660b488964349e0c828\",\n        \"message\": \"07cd1e9bfa38a7d8853465a93c77ab4f30faf914e48bc4763ba07bf96ba808c1f59ad4ce9b7d921fbbc779659d7ca36edb7dd3acf7a29452a845b49fb6543a3b6c5c1c293aff618485a10eea60ee9649ac9d481e6949967d3938b52fe09c36b9ade07581db4eb542a97f5ac8ac73d3eea184722556760cf483090564553061b90a0b6d2dff4707be763937a10594a82b766bb2cf6daa52fa8d7b48f32127c431ad9aaed3bfdeb99ad42118a1b4de7b992134ed9cdad0b5296d197a485e493ecfeca3653ad2ce0f9241aabc096d7c4ba603ba7ddd07a8b257fe523276417073a65fa4434256fd1f239ec1de5da1a0a8c5e686ee14d9dfa438c53b99c954afab2f79e60b7126f2cb58a26e290da1dccfc301f239748ede7bcf1bb7ccb4720e692f57e53e6f59075399e1080ac8aa9a61a568c4c569d36e76a2d7271f2c44de4e363a8c916a4e446b027b64392e90ceabf6b6071bc47a1379b6aa6344763b2a0e7ff7c4a27bff3106721c253e4c1d67c37fa3d7c1ecd055b8e929d52a8e45ed89fb180f74b552fe06f066c7e4318ca2f915946e8320d5806561472fb8ff7fa8072d8e6fd1ce63cf87382f7b9404540c1d406c70b226853677092645ce996922e7345dc07fb7339f9a54ff07352dd2b993063c2c83d1281a4fd178e5a5f80a5b33c229d0578367d44192e9a4d21e9734d3bda083b70f47103fd125177021df3e53d79986efea2dc04f02c0ac278788319ef3a9132e6232ea6db39ca5870855f9592fff6c209ad2f1c29dd168552898979ecff8c81127248f8310515300656129d9b7acbb7ed1e46bc98c04d1a35b18913738e9dde4d2b065f4184242d8\",\n        \"signed\": \"82c824a7d1139ec73ae1d023adf62811441e968287f1a580b859cd66cb33b58e409bdeb2a874bf4c23610bd44f693147f2f7c29d443a905084f3eaafd9330e0407cd1e9bfa38a7d8853465a93c77ab4f30faf914e48bc4763ba07bf96ba808c1f59ad4ce9b7d921fbbc779659d7ca36edb7dd3acf7a29452a845b49fb6543a3b6c5c1c293aff618485a10eea60ee9649ac9d481e6949967d3938b52fe09c36b9ade07581db4eb542a97f5ac8ac73d3eea184722556760cf483090564553061b90a0b6d2dff4707be763937a10594a82b766bb2cf6daa52fa8d7b48f32127c431ad9aaed3bfdeb99ad42118a1b4de7b992134ed9cdad0b5296d197a485e493ecfeca3653ad2ce0f9241aabc096d7c4ba603ba7ddd07a8b257fe523276417073a65fa4434256fd1f239ec1de5da1a0a8c5e686ee14d9dfa438c53b99c954afab2f79e60b7126f2cb58a26e290da1dccfc301f239748ede7bcf1bb7ccb4720e692f57e53e6f59075399e1080ac8aa9a61a568c4c569d36e76a2d7271f2c44de4e363a8c916a4e446b027b64392e90ceabf6b6071bc47a1379b6aa6344763b2a0e7ff7c4a27bff3106721c253e4c1d67c37fa3d7c1ecd055b8e929d52a8e45ed89fb180f74b552fe06f066c7e4318ca2f915946e8320d5806561472fb8ff7fa8072d8e6fd1ce63cf87382f7b9404540c1d406c70b226853677092645ce996922e7345dc07fb7339f9a54ff07352dd2b993063c2c83d1281a4fd178e5a5f80a5b33c229d0578367d44192e9a4d21e9734d3bda083b70f47103fd125177021df3e53d79986efea2dc04f02c0ac278788319ef3a9132e6232ea6db39ca5870855f9592fff6c209ad2f1c29dd168552898979ecff8c81127248f8310515300656129d9b7acbb7ed1e46bc98c04d1a35b18913738e9dde4d2b065f4184242d8\",\n        \"signature\": \"82c824a7d1139ec73ae1d023adf62811441e968287f1a580b859cd66cb33b58e409bdeb2a874bf4c23610bd44f693147f2f7c29d443a905084f3eaafd9330e04\"\n    },\n    {\n        \"secret_key\": \"0b7dfad05ba665111e1681bdc0bc8ba973767cb85877020a2dbf918325571d9f\",\n        \"public_key\": \"9505d9e86dcef56c9db76f2862b90e1f2773202f1750405e7ee5aed0fc54f8b9\",\n        \"message\": \"c43fd34bb1424cca4e4dfba75c28be801844446ca089020885c748382547164a9d4a7f9570d3d171ad6981ab50eeee08a4a6c66d7699d23edbe1faaf44660c72f4552d87d265ace8792823474b90a5d7f7401deb9377627f60b036b36e044eb76bf132fddfcc0ef5704a633d845e962b47517f0baa34d3d6e9a8b9f8168bcdc84c6d2b30c6f343e75357f7f2c0039bd254b244d36cd61675581fb834570ed4113a78e606f145a111992c2c6b61c4267628ec87cd88c36a3c84706e44ae96a96e0c8480318546d6ea6a6df18a2b4f19f8360cfbce4e9d1cf1011ffea5633a66619aa4a65cf69be4459617945e4359a9d43260ca1a20f4ed7c1ae5ffff3bd92294ea70abbae0385b0935cd1c0eb5183029c585a0294b7999e32ef7a290fcb095675dc4f601e8f2c96f35b7349a37057509f4ec70c9f50f6011f1f5e6b061c091d11c0ed5dec8ece881aa340508f696d9e9cc7298e6bccd7c210e2ce0ded83592a3cfa13e8078fdb3258b39f1d11cdfe09670c1e60a3910a4fff51c6c7f7d6624f4c93df8888c526f484f9b13e0a7f62964783978684e292679800ed5eb280e287c7e639e85faa53fba2fa2045ce27d8fb308360726550df9752db305f8f06647970d014691999afa97b6193ffcc6d532f4fa69e133a1d10f3047fc00381f4997bb84e5b6cd6028c62132cfc024bfeb980301f29512bbd109d089ace182cf9c2ffab1b17eb00b6eb46ae198da993f5efe7c1dc22d25047c1ee5246517e7f5758f996abd83f13da22c13dd205ee191b55afd4831ef078bb6ea073a625bc97c81296160bbf2559b275cc37ccf01b91fd87d4d99a367aa9978dadd0689f8a6\",\n        \"signed\": \"415adbb2f2b9840577fd1841f9aae252afe8f5a72236017d50db22d228cdee9f5b3e8fe9a17a4d4e98b7341381e8d8625cdcea956d253b74e02dacb84920a009c43fd34bb1424cca4e4dfba75c28be801844446ca089020885c748382547164a9d4a7f9570d3d171ad6981ab50eeee08a4a6c66d7699d23edbe1faaf44660c72f4552d87d265ace8792823474b90a5d7f7401deb9377627f60b036b36e044eb76bf132fddfcc0ef5704a633d845e962b47517f0baa34d3d6e9a8b9f8168bcdc84c6d2b30c6f343e75357f7f2c0039bd254b244d36cd61675581fb834570ed4113a78e606f145a111992c2c6b61c4267628ec87cd88c36a3c84706e44ae96a96e0c8480318546d6ea6a6df18a2b4f19f8360cfbce4e9d1cf1011ffea5633a66619aa4a65cf69be4459617945e4359a9d43260ca1a20f4ed7c1ae5ffff3bd92294ea70abbae0385b0935cd1c0eb5183029c585a0294b7999e32ef7a290fcb095675dc4f601e8f2c96f35b7349a37057509f4ec70c9f50f6011f1f5e6b061c091d11c0ed5dec8ece881aa340508f696d9e9cc7298e6bccd7c210e2ce0ded83592a3cfa13e8078fdb3258b39f1d11cdfe09670c1e60a3910a4fff51c6c7f7d6624f4c93df8888c526f484f9b13e0a7f62964783978684e292679800ed5eb280e287c7e639e85faa53fba2fa2045ce27d8fb308360726550df9752db305f8f06647970d014691999afa97b6193ffcc6d532f4fa69e133a1d10f3047fc00381f4997bb84e5b6cd6028c62132cfc024bfeb980301f29512bbd109d089ace182cf9c2ffab1b17eb00b6eb46ae198da993f5efe7c1dc22d25047c1ee5246517e7f5758f996abd83f13da22c13dd205ee191b55afd4831ef078bb6ea073a625bc97c81296160bbf2559b275cc37ccf01b91fd87d4d99a367aa9978dadd0689f8a6\",\n        \"signature\": \"415adbb2f2b9840577fd1841f9aae252afe8f5a72236017d50db22d228cdee9f5b3e8fe9a17a4d4e98b7341381e8d8625cdcea956d253b74e02dacb84920a009\"\n    },\n    {\n        \"secret_key\": \"78188df8c754785621e27ae58e100d5080e16e0a15e277051f95f080900ec0d3\",\n        \"public_key\": \"a1bdeee98b0757ba9c2d8409b87424e64e42f9932acfa9bc71fb3f8ca0e11d52\",\n        \"message\": \"cf70cca57feb1beefe985ad5af9d4348d3a46a63de1075381fb3639a044fd6e6091f5db9c94d39be0f13ade6d9a074e67ba706b3a8806295f6b654865728c58ca6e9419d5d043f2110814bbf36fc4070e4d9454965c251202ca395efe3fdbd544feb187e34ca3c80795179552fce9aa804430e5b6c8685341e91d5889fbf3f981904620ffe7013f53b939e17443d614e7e6bb57ad674f3b4b001630526cf7302a7d0afe7dc24d6dadef6feba3f96973aa5b8d6275262e430a82f678696971a8b60e38d3b2bcc170d5bc20302a39c596d27fee39e5da5b10ea9f382299e19819717a718d37d155f13923182b5b7a1c54ca109b22ca8e8b26ca5ca3f3b9062219461bace97e890c94e41ca3d84587fbdf6e240c35ccab71d58477d28168e93372686d42aad324a3f16afe0e9b89ee20e485fe6c864b5013ba88399eeaa159835a8b2bb2f25f579ca3bae675c63da1b50d99d4ed978692e5600233f38ab7e7a5ae0fbf8c0b69cc38bd30eabd977efa05ee2c83514302bd40c4bdce7a4110afbb6579c620e97f8cf2e9bab2dcc7c33f196e57fe761a050122894b7a75a929531996ddaad78de1d4d924cd93a61df227776bc1c39fbb8de1c4438868b6a3a2cd94c07b29e3f6b23cc7e0b63689009d9d0bae1606bafc7a808f2d2fa2562b8dc093842c01fdb840da4860aced3fc525ca334edcf65948bc416f98c450f0012a6107dd7f8ede40e1c48c9e8a565a810b9cfd20356db19f1dbde598921332e0d813f0cb87684370388772ff3cbfcbfa299c198c97bfb9617768a05161f4169ff5de5d9f40062090fb882984d9d5c7aa78eddcb9634e466b8853d512b4a546d7423\",\n        \"signed\": \"b94114eda46ccfc22a4471a64d790892e59c5d505618eb0e701392c709613e2d503a5c2b66601e636a3c1c7d49b1ac798d9089b0f9ccd0579bb90634d0bd750ecf70cca57feb1beefe985ad5af9d4348d3a46a63de1075381fb3639a044fd6e6091f5db9c94d39be0f13ade6d9a074e67ba706b3a8806295f6b654865728c58ca6e9419d5d043f2110814bbf36fc4070e4d9454965c251202ca395efe3fdbd544feb187e34ca3c80795179552fce9aa804430e5b6c8685341e91d5889fbf3f981904620ffe7013f53b939e17443d614e7e6bb57ad674f3b4b001630526cf7302a7d0afe7dc24d6dadef6feba3f96973aa5b8d6275262e430a82f678696971a8b60e38d3b2bcc170d5bc20302a39c596d27fee39e5da5b10ea9f382299e19819717a718d37d155f13923182b5b7a1c54ca109b22ca8e8b26ca5ca3f3b9062219461bace97e890c94e41ca3d84587fbdf6e240c35ccab71d58477d28168e93372686d42aad324a3f16afe0e9b89ee20e485fe6c864b5013ba88399eeaa159835a8b2bb2f25f579ca3bae675c63da1b50d99d4ed978692e5600233f38ab7e7a5ae0fbf8c0b69cc38bd30eabd977efa05ee2c83514302bd40c4bdce7a4110afbb6579c620e97f8cf2e9bab2dcc7c33f196e57fe761a050122894b7a75a929531996ddaad78de1d4d924cd93a61df227776bc1c39fbb8de1c4438868b6a3a2cd94c07b29e3f6b23cc7e0b63689009d9d0bae1606bafc7a808f2d2fa2562b8dc093842c01fdb840da4860aced3fc525ca334edcf65948bc416f98c450f0012a6107dd7f8ede40e1c48c9e8a565a810b9cfd20356db19f1dbde598921332e0d813f0cb87684370388772ff3cbfcbfa299c198c97bfb9617768a05161f4169ff5de5d9f40062090fb882984d9d5c7aa78eddcb9634e466b8853d512b4a546d7423\",\n        \"signature\": \"b94114eda46ccfc22a4471a64d790892e59c5d505618eb0e701392c709613e2d503a5c2b66601e636a3c1c7d49b1ac798d9089b0f9ccd0579bb90634d0bd750e\"\n    },\n    {\n        \"secret_key\": \"73cb02b0bf26a015da1dc301fc125d7e6c30b63c9e6eee9e065d4e847132c325\",\n        \"public_key\": \"ac9e3dd2ceb9b23e748c04ba7577fedf7ceab9ed87dc430b5fe22eac50950e0d\",\n        \"message\": \"0a2b61ba35e96e5819b88bfdb28b7ce02e64ae9cf572b21f13552c0db10f3960d44ba3472f43abc4e6295bdf790bd933ba3975fd4465fa3e2fe2db02b6377752223dec98fcb2404f3aba43265a6fa7976b6c6cb6868b881bd6f3d25cd9d6f70e512f8089c8ef26fd58245053779e59c4725aefa26467c9f500e17f3e1573f1a855e9b8b21925ea0527f3ce8d88fb54a47abeed14f399cc2d9f1fe54665fae0a8f0c68872a600046d1dc36397d310ce393fceafe87c17ebe122fdb543aea71085baec98273f41ac96698c150cf911d0e5de2392d84841d01276aefbfe9995e10a6d46efdc2678d456c9f36b2e10114d1187e7aca739037ea51f85fd62a29429ba529cdd8ad91347497487ed7e8709d4776ef68670792d0615bc96da5178d606db63e4e5cb172acfbc1cbe20269350f1b605f35dcd479135bd30fb4b5a39176cff744ddbb306c9e7b4167de0379a6166be5aaa74d7157fac957d88dc57597cfef23eb5108b3ce53fc632dad1b972a29da5de32d20d8ecede67ff00da4a08a0cc1a98bee7a94e3cb32fee94ae25a413544702c37b3e1778a070cdd4840bd39f5f45795192a867863876ed0d130d46e2913935082809f7e15a496710f255d783da3d016a654c15ff5df907a3ccaf37cfe11c8c3d496507d6760c053820f0f594c3d01ca269178aca525ab2821ef55f92d85fe685ea34472ed1398171064d74a422ec91d1a670618fc9f32424bcb11a77f6fb4e2fefd2c4e8a73c452886e931664d1a83bd927329c04d250b83521d7dc13c91cee1ec050e11d42a4b0c8c069b61c4422d3a49c07eff2905b7bc7f4a5b43e6b0d61dfb50e4eea2e90d298a781d05\",\n        \"signed\": \"1a5dd4c891c8e132570187c23b9a1e4b26f05460e875673819396df561c8af0e48333b62c77729d49fc40e174a7f3c21f85ef4d339ceb80bd2e037d803af560e0a2b61ba35e96e5819b88bfdb28b7ce02e64ae9cf572b21f13552c0db10f3960d44ba3472f43abc4e6295bdf790bd933ba3975fd4465fa3e2fe2db02b6377752223dec98fcb2404f3aba43265a6fa7976b6c6cb6868b881bd6f3d25cd9d6f70e512f8089c8ef26fd58245053779e59c4725aefa26467c9f500e17f3e1573f1a855e9b8b21925ea0527f3ce8d88fb54a47abeed14f399cc2d9f1fe54665fae0a8f0c68872a600046d1dc36397d310ce393fceafe87c17ebe122fdb543aea71085baec98273f41ac96698c150cf911d0e5de2392d84841d01276aefbfe9995e10a6d46efdc2678d456c9f36b2e10114d1187e7aca739037ea51f85fd62a29429ba529cdd8ad91347497487ed7e8709d4776ef68670792d0615bc96da5178d606db63e4e5cb172acfbc1cbe20269350f1b605f35dcd479135bd30fb4b5a39176cff744ddbb306c9e7b4167de0379a6166be5aaa74d7157fac957d88dc57597cfef23eb5108b3ce53fc632dad1b972a29da5de32d20d8ecede67ff00da4a08a0cc1a98bee7a94e3cb32fee94ae25a413544702c37b3e1778a070cdd4840bd39f5f45795192a867863876ed0d130d46e2913935082809f7e15a496710f255d783da3d016a654c15ff5df907a3ccaf37cfe11c8c3d496507d6760c053820f0f594c3d01ca269178aca525ab2821ef55f92d85fe685ea34472ed1398171064d74a422ec91d1a670618fc9f32424bcb11a77f6fb4e2fefd2c4e8a73c452886e931664d1a83bd927329c04d250b83521d7dc13c91cee1ec050e11d42a4b0c8c069b61c4422d3a49c07eff2905b7bc7f4a5b43e6b0d61dfb50e4eea2e90d298a781d05\",\n        \"signature\": \"1a5dd4c891c8e132570187c23b9a1e4b26f05460e875673819396df561c8af0e48333b62c77729d49fc40e174a7f3c21f85ef4d339ceb80bd2e037d803af560e\"\n    },\n    {\n        \"secret_key\": \"db05606356bacf23aff6cddd42b2c694352b5a0fec560aff54d9bd9710efe06a\",\n        \"public_key\": \"32a5c7cc4909786b48a53f31093f549a9f1730ca6690383fdb5f14c2666e3132\",\n        \"message\": \"1bc9c2833f37cdf1356fad166768642717701b38a0ab0c2f581a26d222d65ccee4bf0f6dfe64d33bc0239f71d4b82644b01625a1a35fe798676239e0ca779ef23138eebe3bd19de2d8f7c15b4d96f13e51bc633bea5d61225bca1d6339ba53e81f7d8d24c5d60f04ce8c726761d264584f1c7e5b5b6992456c1c76892d6352111e3b926fe025c0009db67ce0ddc7f764e0c9adb0481bc2795484d96373a962a7b74a5596f527a73476498c7823dffa6c8543b07971b5aa271c12255e0918dd73f50c30c9a85ac7c2993dd655da59431263f5914be706374be9c07585c2871328b4dbc39401c95707387e6e069d44b9d8fb058f22e315aa0d5b4f1168fc107962b064f7d845af8e2131951d1cd66dc84dba46d200af4f4c5f51221bc9b2196942f8b40e7ddbc9aeb3d9afc071259513135a016f2866099fa10f4c3b73500bd55c477b2415e10a279ba110d294f3dd1842177d0b4bfb1734dd0ccb7e394b43d16f0b7548362280f434764da57f19ed3e302e5370fba49664c230057433cc647eb27cd2c7c18c7d66906f088246c22f7f790399deb4c5fbb906181769bef5afbe8ad1f5de55be588f52f69c54d4ef5a969a0d995c27407b23edd9243d2499fdf29473b1955c84b3f7cbdcd81b7656ec0be9e0fdb3381356960fd0ca70e7ea74b646fcd313948e6ddb47609476fb6fa4842fa788a0d57be3b0a6ca1819f71614760043ec4904881939968a43b5d1928f84a5919093bc3841588171a9cd390f8fcd61538b54e6ef99770573e1986d150fa96b7a07e1d194af1c0b405500acb3d10e3be647c89862006fa78583e76166842920160eb57f0b2a6edf193c44c5eeacf4\",\n        \"signed\": \"53099b766adf2944b6821374842c25d6e67b0ccde9c637fecb11b8b8b07203e3075732805f4f14aeae73bd62e308b5887d689e29cd89b23a476943110717b1001bc9c2833f37cdf1356fad166768642717701b38a0ab0c2f581a26d222d65ccee4bf0f6dfe64d33bc0239f71d4b82644b01625a1a35fe798676239e0ca779ef23138eebe3bd19de2d8f7c15b4d96f13e51bc633bea5d61225bca1d6339ba53e81f7d8d24c5d60f04ce8c726761d264584f1c7e5b5b6992456c1c76892d6352111e3b926fe025c0009db67ce0ddc7f764e0c9adb0481bc2795484d96373a962a7b74a5596f527a73476498c7823dffa6c8543b07971b5aa271c12255e0918dd73f50c30c9a85ac7c2993dd655da59431263f5914be706374be9c07585c2871328b4dbc39401c95707387e6e069d44b9d8fb058f22e315aa0d5b4f1168fc107962b064f7d845af8e2131951d1cd66dc84dba46d200af4f4c5f51221bc9b2196942f8b40e7ddbc9aeb3d9afc071259513135a016f2866099fa10f4c3b73500bd55c477b2415e10a279ba110d294f3dd1842177d0b4bfb1734dd0ccb7e394b43d16f0b7548362280f434764da57f19ed3e302e5370fba49664c230057433cc647eb27cd2c7c18c7d66906f088246c22f7f790399deb4c5fbb906181769bef5afbe8ad1f5de55be588f52f69c54d4ef5a969a0d995c27407b23edd9243d2499fdf29473b1955c84b3f7cbdcd81b7656ec0be9e0fdb3381356960fd0ca70e7ea74b646fcd313948e6ddb47609476fb6fa4842fa788a0d57be3b0a6ca1819f71614760043ec4904881939968a43b5d1928f84a5919093bc3841588171a9cd390f8fcd61538b54e6ef99770573e1986d150fa96b7a07e1d194af1c0b405500acb3d10e3be647c89862006fa78583e76166842920160eb57f0b2a6edf193c44c5eeacf4\",\n        \"signature\": \"53099b766adf2944b6821374842c25d6e67b0ccde9c637fecb11b8b8b07203e3075732805f4f14aeae73bd62e308b5887d689e29cd89b23a476943110717b100\"\n    },\n    {\n        \"secret_key\": \"1d139b1ad0c3af1d5b8be31a4ecb878ec667736f7d4fa8363a9809b6d1dabfe3\",\n        \"public_key\": \"2428cf1deb20fbad1fdc665d825b614122df101fbe1473a79996baf6967434b8\",\n        \"message\": \"8df2d2df9b984da84433486a813c98c5973a696c11624610b23aa438083464f65a76796615b728c2ed4e60715855afc239450d5bc0911ff2a85230205c6f1349ba5bd87ea6f720db6ba70b77421788e0c654aebc23074c5f41d2290772140d981a6bc4fe709a268e64172a026b270118b4db51ab6a13c99b063186d8d5b338e977eddc6bb5fd7dd57d9845a3c3fe76177d5738dca16a8f9102857500174f23ff4c3bf3c8536f11580ef8514a409f5bbc9c0296f12e3478d4087f95efaa6c636071d21157bf11774bbfe7693306ca7213da4713ebaaab3554edf08011a5ff73da120375aed19628670f28ab24b6f5d5a1d570480f65d3c152bff1b47bf0666929cb7c99d9033faae8534fc35da730b811ebcc25ae10a195aab12c326aa45bf805c62dd4cd5f868623c04a8e1c6aa72f1ea4400c60867dff622f316434f1ec89503c6f9f65c137b4944cbcb35f086c74cceafa2242acca6ffe611c4b5587f5b75ffad349f00bf96e4a580a875b92654069b62eeac0bf78e5aedd71869ee05b9a94e1c98e35a97800a4a21220b039cd5ebbb756d40b4042e2c84a2ae98182511dae8ed3b89f4fa00fb8ed946316459710052ad4c02f63df05d3bb1ace33672151bdf5dab46c7b583db373899d4f035b6c111258b4e5a9e707a11d215e44e68ef1a6f053809aa51bd902e13ca99c1b1cecc83b9c235c710e797d2b1a249b2ea079b5c1674ed7169f1b6e67f1ac77f86b743298969335a772440f7fbfa72513500d84166114a8fd54139464d42b995530d32370b69bffc7589d6dcc97e0bf17856cc3bf4164dbeccc8a881d414d6a62029276c5f8137c0b3c68bc8f4bd4e7cff65ef2\",\n        \"signed\": \"dd645e51edab04db31e33172cf27aceeedcc0463a963914a0eac8efd5a34341f6bbc52e042baaf3b40c89a57efb64574e69677fce955246c1fc0f269ef8190008df2d2df9b984da84433486a813c98c5973a696c11624610b23aa438083464f65a76796615b728c2ed4e60715855afc239450d5bc0911ff2a85230205c6f1349ba5bd87ea6f720db6ba70b77421788e0c654aebc23074c5f41d2290772140d981a6bc4fe709a268e64172a026b270118b4db51ab6a13c99b063186d8d5b338e977eddc6bb5fd7dd57d9845a3c3fe76177d5738dca16a8f9102857500174f23ff4c3bf3c8536f11580ef8514a409f5bbc9c0296f12e3478d4087f95efaa6c636071d21157bf11774bbfe7693306ca7213da4713ebaaab3554edf08011a5ff73da120375aed19628670f28ab24b6f5d5a1d570480f65d3c152bff1b47bf0666929cb7c99d9033faae8534fc35da730b811ebcc25ae10a195aab12c326aa45bf805c62dd4cd5f868623c04a8e1c6aa72f1ea4400c60867dff622f316434f1ec89503c6f9f65c137b4944cbcb35f086c74cceafa2242acca6ffe611c4b5587f5b75ffad349f00bf96e4a580a875b92654069b62eeac0bf78e5aedd71869ee05b9a94e1c98e35a97800a4a21220b039cd5ebbb756d40b4042e2c84a2ae98182511dae8ed3b89f4fa00fb8ed946316459710052ad4c02f63df05d3bb1ace33672151bdf5dab46c7b583db373899d4f035b6c111258b4e5a9e707a11d215e44e68ef1a6f053809aa51bd902e13ca99c1b1cecc83b9c235c710e797d2b1a249b2ea079b5c1674ed7169f1b6e67f1ac77f86b743298969335a772440f7fbfa72513500d84166114a8fd54139464d42b995530d32370b69bffc7589d6dcc97e0bf17856cc3bf4164dbeccc8a881d414d6a62029276c5f8137c0b3c68bc8f4bd4e7cff65ef2\",\n        \"signature\": \"dd645e51edab04db31e33172cf27aceeedcc0463a963914a0eac8efd5a34341f6bbc52e042baaf3b40c89a57efb64574e69677fce955246c1fc0f269ef819000\"\n    },\n    {\n        \"secret_key\": \"4d22e331e0cf6f6a272db4d20687ffb059f1225d81e41123b8c89b074de76a3b\",\n        \"public_key\": \"b1e4cfaeadd67b12d7b9dbfc0f88edd0373f9a88c7fa33fb7f2b1e475eccb61b\",\n        \"message\": \"9c8e3f5b4d704030e1ba71f02efc4b87d6fffb55bc3d8d03818f915624fcf701c54adfafa2b694b87751cb9f69918c0f050f4c105d5ccb40100b28dfd4f411d591c12019176ac2016bfbfdf0ddf11db8a7e39aa7b9e216f667c0a15fb977eaa9ba3bc455cc58945f3e944b8ac2fbf4d24fe7e1e619cdbeee3e5e12a9a527d28f5fd7cfd9220f1308d897b6d4314a5a0187864a2d621cf1b2844261247bf520bafa9bf226e115681ecd77427980cd12b08c359cecd1de3f5545f807f81ed76302ffd6477f89b958cdf12954cf70c142532993831647eacab0b4807bfdadb4389d7dff2c4ef0ef5a5c61d0df762e2e9080a7181cecd06a53199f0dfef702627adecf5fcd9b3e68c72333161727f871c7d1c43051ff1c921fd53b642238b97880d64e25fac512ab954bedbca540f5b20091ec72e67f88770afc32f2125ca0da4fe87b56aac9177f1f4f67c851725c5e8afe64f664799833fd79100b77ead25838879fff4747aa0d5672ec0a94348134bdbd4bb39b0c67a0cd30602edf4fec6f7af0cc2bdae126cea842dfaa4391dc5ddea938e1792168240c2d8b25352f9f3a644235ce36fefeb6992ad88e287ad2d85bd850396fc2e517a15209f5920ac98c532b1f4d869beb08bb03cf7c91af3ffced68d5fbfef86ff94ece6e2ead3484ce080db17bbe40f1db432ec1650ed24fdd250f3345745c9b7b9198c9109a37261fc5ecbbb12f83a0e1220a1867d45fddfea81dcf75f4ec7fdb5250e57754d6dea270b628a79530ec28b619bca9493e6305cfc4414c1c1de3389e890197c85f28404f3fa96a1e2fd9206b472e8a0a0d32af55606bb083f76a19b8eae3479ae51d98a99a62\",\n        \"signed\": \"c366b802f682fcd70525264fb1a3cbcd0ee35ecff5977c2a554da939229f17819a961ea74c3d7a7881ac5c1fa16bf984d9456a1388d3463c4494429b1dc454029c8e3f5b4d704030e1ba71f02efc4b87d6fffb55bc3d8d03818f915624fcf701c54adfafa2b694b87751cb9f69918c0f050f4c105d5ccb40100b28dfd4f411d591c12019176ac2016bfbfdf0ddf11db8a7e39aa7b9e216f667c0a15fb977eaa9ba3bc455cc58945f3e944b8ac2fbf4d24fe7e1e619cdbeee3e5e12a9a527d28f5fd7cfd9220f1308d897b6d4314a5a0187864a2d621cf1b2844261247bf520bafa9bf226e115681ecd77427980cd12b08c359cecd1de3f5545f807f81ed76302ffd6477f89b958cdf12954cf70c142532993831647eacab0b4807bfdadb4389d7dff2c4ef0ef5a5c61d0df762e2e9080a7181cecd06a53199f0dfef702627adecf5fcd9b3e68c72333161727f871c7d1c43051ff1c921fd53b642238b97880d64e25fac512ab954bedbca540f5b20091ec72e67f88770afc32f2125ca0da4fe87b56aac9177f1f4f67c851725c5e8afe64f664799833fd79100b77ead25838879fff4747aa0d5672ec0a94348134bdbd4bb39b0c67a0cd30602edf4fec6f7af0cc2bdae126cea842dfaa4391dc5ddea938e1792168240c2d8b25352f9f3a644235ce36fefeb6992ad88e287ad2d85bd850396fc2e517a15209f5920ac98c532b1f4d869beb08bb03cf7c91af3ffced68d5fbfef86ff94ece6e2ead3484ce080db17bbe40f1db432ec1650ed24fdd250f3345745c9b7b9198c9109a37261fc5ecbbb12f83a0e1220a1867d45fddfea81dcf75f4ec7fdb5250e57754d6dea270b628a79530ec28b619bca9493e6305cfc4414c1c1de3389e890197c85f28404f3fa96a1e2fd9206b472e8a0a0d32af55606bb083f76a19b8eae3479ae51d98a99a62\",\n        \"signature\": \"c366b802f682fcd70525264fb1a3cbcd0ee35ecff5977c2a554da939229f17819a961ea74c3d7a7881ac5c1fa16bf984d9456a1388d3463c4494429b1dc45402\"\n    },\n    {\n        \"secret_key\": \"a5228ff9bbb6f232327eb8d879d7f8b277ca72bae1f9a9d0e260dd90571db4f9\",\n        \"public_key\": \"d82f6a6974f51c8808d9d617f4cec2d8a37eb11a14237c9ab9cf11ebc80ff6c0\",\n        \"message\": \"1df7a6835e3310983ee7ec731125f5b5cf117af0e36b3685bf54ace1c48c46300560a45e9f9bdd96a0bc4d14e89d4b5721a2caff6618b182edb1202f3d0c5d118d09b61812c010e8b196344541cdeefe5fd1f961c5dd75459555ab72ef2aa7a759a4f3ad3caed44f4c9a8ef95b76ed9a99b55dd8a260ba08010d29ff819f2af3513c1a640d6ccdde4999205f9fca8857115d8b5db9f70a62e5eea0d5af065de153f2ededeec63e15c8e09a92582182ac07d81ca63ca4aa597a2220e70481957d415264e258bc263e1cc36e53478aac5ca01694ccb09b4ffd84739972c7dccf3defeafdede162ab6c58a1df27371e3f5493067fc9e2067e579623c009fc825eef0e010fd1ccf2a8d3fbbb3156f9dfde0c7cbbaf8433098517491b78db9698614ea40e0b1e6a1e36b900453a16ea276f3442bbd27a7ecb981511f5c9209eb096e28588b65b96b50188c0381ff712bc06b2c655cca0751c095d8016251585851e677434dc3efd087a12680fc22e5b8310a10e32caac9b71c876eed31ef09f7fa012ba08dfd2ad68c1e147f50598e550467ef99f295a318faa507ebe776ce55c4da164323c30a5e72dbe027c3ccf96c70197a6fb1b74af133a8be2b03c1b99fd25b3ced51fe3882021a3afd9229f641bc6cad4e1d3cb6ed9b6b68a25f1e1397289981f78924bff24c8dee6a18a0421fa32ae3ab60a0d933a6af4ff704874b09b0739e2f29d8f252d79055f89d3bff10a22c54ac3d8afeece818353a6abe2b7fb8e8e0da5b7ac1cfc985df97580b18211a4e3edff95afdda061547d3ae0406d3286cd305bdfd2c3abf8f74af9a03420e5b03f825e9c53907e13a5812174be42898645149d\",\n        \"signed\": \"97650fae3f59ca76477f2547167749c5830248883225e354ff46c7e381965220d9bef2c2057c7d1990f08bca4cfde877fff2b4aa813d9c4b84fb79eced81ef051df7a6835e3310983ee7ec731125f5b5cf117af0e36b3685bf54ace1c48c46300560a45e9f9bdd96a0bc4d14e89d4b5721a2caff6618b182edb1202f3d0c5d118d09b61812c010e8b196344541cdeefe5fd1f961c5dd75459555ab72ef2aa7a759a4f3ad3caed44f4c9a8ef95b76ed9a99b55dd8a260ba08010d29ff819f2af3513c1a640d6ccdde4999205f9fca8857115d8b5db9f70a62e5eea0d5af065de153f2ededeec63e15c8e09a92582182ac07d81ca63ca4aa597a2220e70481957d415264e258bc263e1cc36e53478aac5ca01694ccb09b4ffd84739972c7dccf3defeafdede162ab6c58a1df27371e3f5493067fc9e2067e579623c009fc825eef0e010fd1ccf2a8d3fbbb3156f9dfde0c7cbbaf8433098517491b78db9698614ea40e0b1e6a1e36b900453a16ea276f3442bbd27a7ecb981511f5c9209eb096e28588b65b96b50188c0381ff712bc06b2c655cca0751c095d8016251585851e677434dc3efd087a12680fc22e5b8310a10e32caac9b71c876eed31ef09f7fa012ba08dfd2ad68c1e147f50598e550467ef99f295a318faa507ebe776ce55c4da164323c30a5e72dbe027c3ccf96c70197a6fb1b74af133a8be2b03c1b99fd25b3ced51fe3882021a3afd9229f641bc6cad4e1d3cb6ed9b6b68a25f1e1397289981f78924bff24c8dee6a18a0421fa32ae3ab60a0d933a6af4ff704874b09b0739e2f29d8f252d79055f89d3bff10a22c54ac3d8afeece818353a6abe2b7fb8e8e0da5b7ac1cfc985df97580b18211a4e3edff95afdda061547d3ae0406d3286cd305bdfd2c3abf8f74af9a03420e5b03f825e9c53907e13a5812174be42898645149d\",\n        \"signature\": \"97650fae3f59ca76477f2547167749c5830248883225e354ff46c7e381965220d9bef2c2057c7d1990f08bca4cfde877fff2b4aa813d9c4b84fb79eced81ef05\"\n    },\n    {\n        \"secret_key\": \"c04dc09f119d670fb1eae0136fcc06085f290f4ad1aa1ffc9c160ea5cf47f09d\",\n        \"public_key\": \"ff498ce8c9db7867f6d0276452a466724887e6172f6681671b8ae035f5865ea3\",\n        \"message\": \"1e42297f8aeef29a842e0e21f5dbae068e2c9ddaa6fd348e48881f0d42c50bf0ecf1706b94a5d19817ca02d83e9ab2f99d8bfaaa5c85ad39a150b225ad3eafa067815b74672fe026c3ccc677255440b684a76e128ca2ccc429f152577d25b69f40db582d49479afae680712dc0fd1fe1418839687ca60cdde974140462f96148295df1ce43a977351c77f2f0b09a6b26d6fe965fceae17d7b8620371402428544fdf91690b44e9afc2e9088c83ca48dc8576f628724798dc90323174c44996596502a35df8b982c570a6cb51b9a197d431af33f02b80011567fe50cf45ac111b3d556f8c8ce5ae8c9972f2a9936b1a012b9c339e30c97312b65ea59c100f79d795b8a24b31a0a97dc25cced6b8ff5ae145339a048ca12a579017fae8d5cbcb61d52e314dd7c2e72010c47217b1d06878bf2818ca188e8e307960c1689d7dfc0202973cd29f2f7ba743469e685e0e704b04baca4fab5488448a922eabf40be581c1994d74d13a366ce857fb40a6e05da8553694172cc3fd28062f538250aa8c11f68139e79cd1191ba3314b5cea0864437ed2e4b6fbd75b9ded0987b41c202a58ec0254d9d371a795f1dbecddac112be8d09e2d7b9ca5752f406cffb911ca36450bc05f1ec1ca3ca8d35124d1286c55f10f61334e46ece4183b92219a9dcd0e5e78ef2a76cfe9a9ab3795dfdcb44f63d45f5f48ffb4156133ad2e9950884c5bbd2c1cb8729e40a8787f784969fa880c07ffcc97d5c0d2d488085e9116d7107cd5db16ceccdead55025eea2edee93c1b106427618ee09dc3dad1e05676a2368069c8045c3ebc6c67afa52d59398248efcf15e904c7142304ff61971f4d9bf6460c1d6417\",\n        \"signed\": \"4bd19f3d9c5116ec6ae0024d0f246d2ce250d9e0634a232ba06fd3566aed55cbe59f12332cbad65d4349a9d22e7d6e46d2fbdc71d5c8f9da15dfbf17ba2251071e42297f8aeef29a842e0e21f5dbae068e2c9ddaa6fd348e48881f0d42c50bf0ecf1706b94a5d19817ca02d83e9ab2f99d8bfaaa5c85ad39a150b225ad3eafa067815b74672fe026c3ccc677255440b684a76e128ca2ccc429f152577d25b69f40db582d49479afae680712dc0fd1fe1418839687ca60cdde974140462f96148295df1ce43a977351c77f2f0b09a6b26d6fe965fceae17d7b8620371402428544fdf91690b44e9afc2e9088c83ca48dc8576f628724798dc90323174c44996596502a35df8b982c570a6cb51b9a197d431af33f02b80011567fe50cf45ac111b3d556f8c8ce5ae8c9972f2a9936b1a012b9c339e30c97312b65ea59c100f79d795b8a24b31a0a97dc25cced6b8ff5ae145339a048ca12a579017fae8d5cbcb61d52e314dd7c2e72010c47217b1d06878bf2818ca188e8e307960c1689d7dfc0202973cd29f2f7ba743469e685e0e704b04baca4fab5488448a922eabf40be581c1994d74d13a366ce857fb40a6e05da8553694172cc3fd28062f538250aa8c11f68139e79cd1191ba3314b5cea0864437ed2e4b6fbd75b9ded0987b41c202a58ec0254d9d371a795f1dbecddac112be8d09e2d7b9ca5752f406cffb911ca36450bc05f1ec1ca3ca8d35124d1286c55f10f61334e46ece4183b92219a9dcd0e5e78ef2a76cfe9a9ab3795dfdcb44f63d45f5f48ffb4156133ad2e9950884c5bbd2c1cb8729e40a8787f784969fa880c07ffcc97d5c0d2d488085e9116d7107cd5db16ceccdead55025eea2edee93c1b106427618ee09dc3dad1e05676a2368069c8045c3ebc6c67afa52d59398248efcf15e904c7142304ff61971f4d9bf6460c1d6417\",\n        \"signature\": \"4bd19f3d9c5116ec6ae0024d0f246d2ce250d9e0634a232ba06fd3566aed55cbe59f12332cbad65d4349a9d22e7d6e46d2fbdc71d5c8f9da15dfbf17ba225107\"\n    },\n    {\n        \"secret_key\": \"6791bd74d3b4620ef5f1ff56406432c26ab646f6d5e9dda6842ed69052275392\",\n        \"public_key\": \"da9915a7552f110faea12d47920a09601443d4000a9c7e218d5ba72b74989fa6\",\n        \"message\": \"36a20e66bb29155161ad85eefe893b53ac5ade165f089a77190b0c239dec8a201685b076b4ded4a10aa459b980a8cca47d5f8de4d2a662e446d5f7fb70ed9be05db1cceadd130b3346d9409f9d6ef52824c764ac6fb1cd156dbd6a473ae722d0ebb25638c51265a22febbb14967d6dd8253c1d038895c6737f067c8f73c3c1cbe6cda4369632d7f4c9acebe87d0571c81a58cfd72cce4a5cf53a1e75259f4c993e67efc8d9c3576c43af04a5caf33d856f7f2755d3a975ab2b685c6f65680cba9ac879f3a8c9a4765b879c0ade1e4bd0d4a70bb6f92b24d429dc746cc78f84811f076f32c61e3585cc8aade9b0ca15224bfbfe18be10a33643600f6612bf013f0efcca837246a0ee5b03c02f1573624c4a44a90f9e423d4e56061a71d0144f5a887a8cd4a9d6f247904e26795951959da121c83c6c941e2b6b9ab76209ffe9178591ead68230b94ae97df58f9f172428c95067598ac582ffb950840d826630c4625f5deaddec1305203b4db6b945f991ed7cd3d6fabca51e2166adad0aad5117336d52d59422f0135c8fa8cdd0884be73586bf284e5ddddbcb95b411f98568526fbe71a5592b56ad5a7345f2874db1d57beab43e8cc69547520629f0ee76dbf432a376fad28bfc77e14d840f0c02d478f1e2337c23b89e73e5279108b5609b18e80db0de11cfa94ecf7239bcff59c54118e4ede4fbfc0823ae546016f774c52198a963b5545a3489b89df7626fd11ed4658d715a4657994035d403b3370d14eed9718d598db675f042592fea89056544b32e5b9c8062828aaa3cf59cb476ad36db1daa2482227a9b7afbc153ce93253d1b39da95eb96f83128ff2554a547e34eea4a0000\",\n        \"signed\": \"b1e8d481065bd5121bb3bf569600bcc26df40c499fbaa954b39a619dc40b9590c31756b8b63f860151694b95765d697b2e1ade0806e92a06c4a559e90fcfa50636a20e66bb29155161ad85eefe893b53ac5ade165f089a77190b0c239dec8a201685b076b4ded4a10aa459b980a8cca47d5f8de4d2a662e446d5f7fb70ed9be05db1cceadd130b3346d9409f9d6ef52824c764ac6fb1cd156dbd6a473ae722d0ebb25638c51265a22febbb14967d6dd8253c1d038895c6737f067c8f73c3c1cbe6cda4369632d7f4c9acebe87d0571c81a58cfd72cce4a5cf53a1e75259f4c993e67efc8d9c3576c43af04a5caf33d856f7f2755d3a975ab2b685c6f65680cba9ac879f3a8c9a4765b879c0ade1e4bd0d4a70bb6f92b24d429dc746cc78f84811f076f32c61e3585cc8aade9b0ca15224bfbfe18be10a33643600f6612bf013f0efcca837246a0ee5b03c02f1573624c4a44a90f9e423d4e56061a71d0144f5a887a8cd4a9d6f247904e26795951959da121c83c6c941e2b6b9ab76209ffe9178591ead68230b94ae97df58f9f172428c95067598ac582ffb950840d826630c4625f5deaddec1305203b4db6b945f991ed7cd3d6fabca51e2166adad0aad5117336d52d59422f0135c8fa8cdd0884be73586bf284e5ddddbcb95b411f98568526fbe71a5592b56ad5a7345f2874db1d57beab43e8cc69547520629f0ee76dbf432a376fad28bfc77e14d840f0c02d478f1e2337c23b89e73e5279108b5609b18e80db0de11cfa94ecf7239bcff59c54118e4ede4fbfc0823ae546016f774c52198a963b5545a3489b89df7626fd11ed4658d715a4657994035d403b3370d14eed9718d598db675f042592fea89056544b32e5b9c8062828aaa3cf59cb476ad36db1daa2482227a9b7afbc153ce93253d1b39da95eb96f83128ff2554a547e34eea4a0000\",\n        \"signature\": \"b1e8d481065bd5121bb3bf569600bcc26df40c499fbaa954b39a619dc40b9590c31756b8b63f860151694b95765d697b2e1ade0806e92a06c4a559e90fcfa506\"\n    },\n    {\n        \"secret_key\": \"234ce4d39b5ebabe9a2c1e71970d718138dcb530cfd296023427d892bf88f8a4\",\n        \"public_key\": \"cb73930db421f6d24536837bd0bff6fa75bbd141c98a405d4244a3c424550779\",\n        \"message\": \"77730cf8c8f96b9187902acff9ff0b21746ccaf0a382a7b343d1c72027ae3c3168a73a6b8f49bc8798141e15c2732b6a6b3f757f8a8e86c7a4bacb39551c54874d6bf716897ee4af13253aa5bb79a192104f44dcb3de960745a8e6aa9880524a629fb510a4ce4cbda7e2957dff1d62e705606a2cc84f91850beaac5e5846e1420bc91dcdd2427b69cfa46ae38a4fef4146eae35f9c22e967cb14a1af9cabf83b180465bed6ef2cda382a84d9994aad655d8952e0fbb0f96fc8089f2e7489497facdcd656a8a451b928c11e7a4075072aafbf17d8f1054c9196288ded3ae21f9afd5810a100d8e4d84c4a35a98b30d3e18524438dd4402dfd8e7675f09d080cd915f14af4372f7ce58384972d5d111079651b2acf39d2a167c6a00b2b17ce0b268791bd2be5178fe0f82d64dacdde377a1e8be9e7d8dfc82b08644537bdc870c5819286fd51f6792dc5f67b54be336d44d54febf81b8df8dec5d8686db12f164d0e8ff1aa2c16bacc9806010ec8e91196597ef06a4cf1707def5067a04889d8e48a9bc2c0bef664f5acd1b4f5bc2da7da43dcb5f963245ba552fd493001d870a9517a179c2f0de85be0c682d057488e35c7816ff4ba529aefd7c66091f206f5f4d75cac8bd209ec2fa55be74af231e2f389dcc2d668bf695ed267c3594bad9efc00217c7a0e9e7b6a56a33079a30e73c3733f2d24efecdde87f72f948d277d6b6d5b035b4c53180d23d66cc0ff17c15dd468585e389d91a4c97fd80110b218a0bf7a5e0353f4609d2cf018a065571001c7888555eedbd3622c3b1769cd13f33374772aa6c8a8f588102017d4ee4e50dcbbdb1d610c32670934a6d9e6d9b784bbfe71862bb38\",\n        \"signed\": \"f6d060ed7d18273f18f7a69cd1d8126e478e88a1d7294ff6040846d46107c3e41a423babb2417139fe587d2910271a357fe5bf57c92ee3a7b77533729d0ac20d77730cf8c8f96b9187902acff9ff0b21746ccaf0a382a7b343d1c72027ae3c3168a73a6b8f49bc8798141e15c2732b6a6b3f757f8a8e86c7a4bacb39551c54874d6bf716897ee4af13253aa5bb79a192104f44dcb3de960745a8e6aa9880524a629fb510a4ce4cbda7e2957dff1d62e705606a2cc84f91850beaac5e5846e1420bc91dcdd2427b69cfa46ae38a4fef4146eae35f9c22e967cb14a1af9cabf83b180465bed6ef2cda382a84d9994aad655d8952e0fbb0f96fc8089f2e7489497facdcd656a8a451b928c11e7a4075072aafbf17d8f1054c9196288ded3ae21f9afd5810a100d8e4d84c4a35a98b30d3e18524438dd4402dfd8e7675f09d080cd915f14af4372f7ce58384972d5d111079651b2acf39d2a167c6a00b2b17ce0b268791bd2be5178fe0f82d64dacdde377a1e8be9e7d8dfc82b08644537bdc870c5819286fd51f6792dc5f67b54be336d44d54febf81b8df8dec5d8686db12f164d0e8ff1aa2c16bacc9806010ec8e91196597ef06a4cf1707def5067a04889d8e48a9bc2c0bef664f5acd1b4f5bc2da7da43dcb5f963245ba552fd493001d870a9517a179c2f0de85be0c682d057488e35c7816ff4ba529aefd7c66091f206f5f4d75cac8bd209ec2fa55be74af231e2f389dcc2d668bf695ed267c3594bad9efc00217c7a0e9e7b6a56a33079a30e73c3733f2d24efecdde87f72f948d277d6b6d5b035b4c53180d23d66cc0ff17c15dd468585e389d91a4c97fd80110b218a0bf7a5e0353f4609d2cf018a065571001c7888555eedbd3622c3b1769cd13f33374772aa6c8a8f588102017d4ee4e50dcbbdb1d610c32670934a6d9e6d9b784bbfe71862bb38\",\n        \"signature\": \"f6d060ed7d18273f18f7a69cd1d8126e478e88a1d7294ff6040846d46107c3e41a423babb2417139fe587d2910271a357fe5bf57c92ee3a7b77533729d0ac20d\"\n    },\n    {\n        \"secret_key\": \"103d118c7dd65d07e8d5582e45042a75792417c692001ee6bd9a927b2b3d9016\",\n        \"public_key\": \"b45cc94514a6ad672496cd4eb9fdafc1d4a167072c6874dc8ff16d761fb66986\",\n        \"message\": \"5a8ee079186b51cf4629834de0c6bd7334855039a7631d6887652a7728995972e362c1c409f084f5aaf2986ae3f536be0070c4baf459ef60a015ef9d70dfa3ea96711cbb18e92af50c527d7ed457877a07ab83721518c89f7a864191b1e97433b7c6cd634a832e19891e76c62122a49dbffd83498aa416acccb7737fe75f4fb2c35328e6f6ececaaa42e43dba5bc9689673dab96f0befa3c83eb41d4d887b3a117d055e30bb87fbe7c719472f6c7a4cc45f628f5faddc48ca344f77b733c0e3b9f5079dbd07af3a3847af141719cca2f6a766552b45d0fdcdb9868f2c762b6d4933ba10836f95bff71cb88040024c90534c4d7a95a2303b04c2961012af58bc784a96327bbfed039d0802a05262d8e663b78508e92508bc1f2ea2b9be7580bde10a4d663d0d25b0e973b8c5ded59debf19bb044aff1c60c70ea1aefe85f6d15c2c1b84753b59576a49473d65af3ed941a3d514b5c4522c141bdbeed9cb339695b2e02dc07000867f1bf8ed8cfd3b1afe688fbca80e2f9ba5c0b188a19adaff6686ca0ff0edd444661291fa27ca1fc529429a5d8ff79ed2027c60ffe3b2c03fb8a66a3985417ba4ace7d14fd0e2371edf5d71bc02b9052767c7f72c4e6f3f30e0638276b9c420aa4333095d31313033090582e3ac4d9fd3203120ba2514973ab9d1c7fc42290116b51dae9fd579410ae078ed320a5a1b49aa7b5fefcd756395213af8641e29b0ebb5b83e3780e5d10e9d3d11998148f6c6f86c4d4eb252e28c70fa3a55c43d4d7faafcbcdd45ad2637f215e81549eb8a4cde4715b7107207503a79595060b83ace8feb673b997968469dd9b4ad6a7ea81c6e61810033f3edfc137d974209575c\",\n        \"signed\": \"2fafc13c43afe5054372b923d24f292b283afca3aca3b3e432380684961713c8d23e86b3580495dfbae424b767e4795a0f922f71b50f5d7a369ab8c6e880420c5a8ee079186b51cf4629834de0c6bd7334855039a7631d6887652a7728995972e362c1c409f084f5aaf2986ae3f536be0070c4baf459ef60a015ef9d70dfa3ea96711cbb18e92af50c527d7ed457877a07ab83721518c89f7a864191b1e97433b7c6cd634a832e19891e76c62122a49dbffd83498aa416acccb7737fe75f4fb2c35328e6f6ececaaa42e43dba5bc9689673dab96f0befa3c83eb41d4d887b3a117d055e30bb87fbe7c719472f6c7a4cc45f628f5faddc48ca344f77b733c0e3b9f5079dbd07af3a3847af141719cca2f6a766552b45d0fdcdb9868f2c762b6d4933ba10836f95bff71cb88040024c90534c4d7a95a2303b04c2961012af58bc784a96327bbfed039d0802a05262d8e663b78508e92508bc1f2ea2b9be7580bde10a4d663d0d25b0e973b8c5ded59debf19bb044aff1c60c70ea1aefe85f6d15c2c1b84753b59576a49473d65af3ed941a3d514b5c4522c141bdbeed9cb339695b2e02dc07000867f1bf8ed8cfd3b1afe688fbca80e2f9ba5c0b188a19adaff6686ca0ff0edd444661291fa27ca1fc529429a5d8ff79ed2027c60ffe3b2c03fb8a66a3985417ba4ace7d14fd0e2371edf5d71bc02b9052767c7f72c4e6f3f30e0638276b9c420aa4333095d31313033090582e3ac4d9fd3203120ba2514973ab9d1c7fc42290116b51dae9fd579410ae078ed320a5a1b49aa7b5fefcd756395213af8641e29b0ebb5b83e3780e5d10e9d3d11998148f6c6f86c4d4eb252e28c70fa3a55c43d4d7faafcbcdd45ad2637f215e81549eb8a4cde4715b7107207503a79595060b83ace8feb673b997968469dd9b4ad6a7ea81c6e61810033f3edfc137d974209575c\",\n        \"signature\": \"2fafc13c43afe5054372b923d24f292b283afca3aca3b3e432380684961713c8d23e86b3580495dfbae424b767e4795a0f922f71b50f5d7a369ab8c6e880420c\"\n    },\n    {\n        \"secret_key\": \"47eee2024dbe09953e981f6986520f666082aa9ef4892dfdfbdbd250d2a1df28\",\n        \"public_key\": \"9f13cd8ebf5080347975159f360296a7164014d8d069e831dab0332607997cde\",\n        \"message\": \"c133f033cf3bec6cd19212ea47dbecb13f2c6018f9e0878ac884bfb575c0f5d3fc5b4999580eb8acbcaac83ae9ac9b443e6d1cff449c3689b433d50900b2e8b71d00e119c8b875094bdab916adaab75bcc852959d8d759795bbd6b360ee484afe47b1ad28391f25afb8d4e3afe0c5b600498a12833fe2a1a5483df940b173ba0d9d8c4d1321fa4b733334b0f6d878a0e5a76f4f180ac119a82082acb1488e49bbca7a0369c191bd6d0c5d445656821a99ccbc945949eca8136cc6e127d9de92ef64f174a6c04c8b5e52495f0dd674bb5ca128a9209968fd450dce319913fd6a30c3382798163e6585f58ef208be4d0c6a2513a752388397a4ae444838c8466dbc36fbc36ae08bec88eeda131c14d06366b673151454100dea1118150fbe441b1e7826e545d9868242e899f5ea53e434c37936ce6fd06146283e8fbd536480de55a16102c44754bc554d5bc2de2f25e19e567a023df4640e74ff3a49e4dd30e0e2558b3dbc2aab92fdd5e79425ecbc4c699fe1f161965f1d0b45d8bdab52ec9bf7a69d8aa0bd171e755ce7b8d0718f7267afb733efca54b213e6f5adab4c9d76c867fcb69ae05c74bd21516cf342c6161f6fc9eccacf970ebce540cd892bc106c6bd563610298b70968f091bcc6e1f7ab4a5b2c6374a1903f4d3ad5e1bd8643a9c2f878c3d7a4dc49ef3197edbcda7bb91e7e06606087d4e981bfab93a6024977962e45262517f338b6857eec2158a297b2aa91524b677a21aac57be0b63a8074fe54e7a9dc70c5a5c3de728b9c17ec1212ab1130eb17622cd7b22ab6eba9185e8d67be6c47a2e5adc663d4642cc120222e299fe134fd7fcd00adabcfaa642fe2e08dd52e2c3f32\",\n        \"signed\": \"5defae0e173ecc18d5f01ec9291be160d5eabff63fd5423f2bc66e3f6408c196353502dcef21effa4b9c14bf27b687d1b6e86b2a205a89eb35c376a3a325690dc133f033cf3bec6cd19212ea47dbecb13f2c6018f9e0878ac884bfb575c0f5d3fc5b4999580eb8acbcaac83ae9ac9b443e6d1cff449c3689b433d50900b2e8b71d00e119c8b875094bdab916adaab75bcc852959d8d759795bbd6b360ee484afe47b1ad28391f25afb8d4e3afe0c5b600498a12833fe2a1a5483df940b173ba0d9d8c4d1321fa4b733334b0f6d878a0e5a76f4f180ac119a82082acb1488e49bbca7a0369c191bd6d0c5d445656821a99ccbc945949eca8136cc6e127d9de92ef64f174a6c04c8b5e52495f0dd674bb5ca128a9209968fd450dce319913fd6a30c3382798163e6585f58ef208be4d0c6a2513a752388397a4ae444838c8466dbc36fbc36ae08bec88eeda131c14d06366b673151454100dea1118150fbe441b1e7826e545d9868242e899f5ea53e434c37936ce6fd06146283e8fbd536480de55a16102c44754bc554d5bc2de2f25e19e567a023df4640e74ff3a49e4dd30e0e2558b3dbc2aab92fdd5e79425ecbc4c699fe1f161965f1d0b45d8bdab52ec9bf7a69d8aa0bd171e755ce7b8d0718f7267afb733efca54b213e6f5adab4c9d76c867fcb69ae05c74bd21516cf342c6161f6fc9eccacf970ebce540cd892bc106c6bd563610298b70968f091bcc6e1f7ab4a5b2c6374a1903f4d3ad5e1bd8643a9c2f878c3d7a4dc49ef3197edbcda7bb91e7e06606087d4e981bfab93a6024977962e45262517f338b6857eec2158a297b2aa91524b677a21aac57be0b63a8074fe54e7a9dc70c5a5c3de728b9c17ec1212ab1130eb17622cd7b22ab6eba9185e8d67be6c47a2e5adc663d4642cc120222e299fe134fd7fcd00adabcfaa642fe2e08dd52e2c3f32\",\n        \"signature\": \"5defae0e173ecc18d5f01ec9291be160d5eabff63fd5423f2bc66e3f6408c196353502dcef21effa4b9c14bf27b687d1b6e86b2a205a89eb35c376a3a325690d\"\n    },\n    {\n        \"secret_key\": \"b6c88b4c90fd19a149d381671953b9b16d428f6361cf503a110477e297f8d2f8\",\n        \"public_key\": \"8ebfb084f997b2ea7932a2353b2c8b16bd825e1af587a8ebc51a6c45aea343ae\",\n        \"message\": \"7f4bf4f52173eff072f818d0aa97e6935d8baccf4839663253b2414fe6b1f34cf43ab120155a1a3aea7b4819ddd1031673b8a7a6bd0b9dda4adefe692a56162c646180794264c5122115eb90a6d3054f084302dce3d836ac3de820638bd89a86bf0a4c01547cfdc543d676fe1639ef72c5b845c494e07814cec8a47d03df73be4e33c05afe9a190dda043360496be4cf3a6319da9ab06481677f1a4374d60d3d3b6394f8843c869b0f41a1e81c2b1a54bf5aacbd98207c8dbacb36422a3aa013d5e849e044af928545c046097caf149d970215115dea0b5a85401ff672e02ed40bd0f5a440cd56494053c896c3bd32606349f7cbe7ece2a2230cf236dac59f7817965f3fa80fb48aa30b0b19efa9a96591646bd25e67c185f77e21d6630b288d4e55146b2abc15e95088d936080775618154bbdda115702a2afd6fd5f56b923e188833ec448944d30283e337254242c5812d7245a4e92670bce3546efaed22d274e1e6048b5a0f01efbf895dc42494baf1747185cb1a4b88fdf1e6099baabc6a5ab5a2727b1e248789d170caa2449671a8f6e094c11332ea0ac2afe88132c644ff883d0c499ad76a93df472fa013eaa27ab4dad679d2511b5049c4e98baa2e7b00a534891e290265edb076f7dca8e6fef3f433034a16575f0e53da4577e6b13f0cb0d785870d0d098d5d80f413a268ba84e0431a786923771378cd57b8192258e2633cdbe03cc316a0950970526fd3e09376bcef0d03b7074e59a5a84fc64e795a812156d960567650bb1e1424b3cc9a4d99d57ba858dd1a0cad3532e998146e79264045e28ebbfd75a426b0bb851a244ad6be7bd5765af493dfc44ee378cd04daf3917eef2a6206\",\n        \"signed\": \"7447a20181b02cf1b6ad529569ce437c2a0508116f50205c41e6378b74fe2fc53630aa0dc4b80c31cb26c8f09bf8fab27e3abc8f1f604a5ec06631a84f6f2e067f4bf4f52173eff072f818d0aa97e6935d8baccf4839663253b2414fe6b1f34cf43ab120155a1a3aea7b4819ddd1031673b8a7a6bd0b9dda4adefe692a56162c646180794264c5122115eb90a6d3054f084302dce3d836ac3de820638bd89a86bf0a4c01547cfdc543d676fe1639ef72c5b845c494e07814cec8a47d03df73be4e33c05afe9a190dda043360496be4cf3a6319da9ab06481677f1a4374d60d3d3b6394f8843c869b0f41a1e81c2b1a54bf5aacbd98207c8dbacb36422a3aa013d5e849e044af928545c046097caf149d970215115dea0b5a85401ff672e02ed40bd0f5a440cd56494053c896c3bd32606349f7cbe7ece2a2230cf236dac59f7817965f3fa80fb48aa30b0b19efa9a96591646bd25e67c185f77e21d6630b288d4e55146b2abc15e95088d936080775618154bbdda115702a2afd6fd5f56b923e188833ec448944d30283e337254242c5812d7245a4e92670bce3546efaed22d274e1e6048b5a0f01efbf895dc42494baf1747185cb1a4b88fdf1e6099baabc6a5ab5a2727b1e248789d170caa2449671a8f6e094c11332ea0ac2afe88132c644ff883d0c499ad76a93df472fa013eaa27ab4dad679d2511b5049c4e98baa2e7b00a534891e290265edb076f7dca8e6fef3f433034a16575f0e53da4577e6b13f0cb0d785870d0d098d5d80f413a268ba84e0431a786923771378cd57b8192258e2633cdbe03cc316a0950970526fd3e09376bcef0d03b7074e59a5a84fc64e795a812156d960567650bb1e1424b3cc9a4d99d57ba858dd1a0cad3532e998146e79264045e28ebbfd75a426b0bb851a244ad6be7bd5765af493dfc44ee378cd04daf3917eef2a6206\",\n        \"signature\": \"7447a20181b02cf1b6ad529569ce437c2a0508116f50205c41e6378b74fe2fc53630aa0dc4b80c31cb26c8f09bf8fab27e3abc8f1f604a5ec06631a84f6f2e06\"\n    },\n    {\n        \"secret_key\": \"7949a9472f725ce7c68d7ea8fc16e13d9e0e0a58f58c24f9228c88e80264090d\",\n        \"public_key\": \"a370f82833f88b4f5f5310b918e6af93bb724bfbdf3c02c503780b2c83ab6cc6\",\n        \"message\": \"955386b92dd6bf92601bf81e84d25144b5fc0bcd7d23c76e7deb5f5ba6316bb61a5d8e74185b012967f0a4438b531696deb4b8101089e0c0482adf13c0613191b977f77b0419814147f5da64a1d3beb1275b9849d1297ba8532ae0a647a8ace395ae0ed00f67348c5ee5ea19b5f1c5bd2e622818e8adcba3c17c27987e4e3d6d910a56c7e5149d3f5574fc06009bf4dd3e37cfe3ebda2c2116d366dd88ce5ea72ab387490585443b086e8aa38d11d3820b72c658e463cdb59c5393011d4a8f4cb6a195229304e76239fa5e8c2cbe0f39dcad138a0ecb3c51579ec9a120a51607eefebfa59a44620ea5b1916087ea338533fc132ff2e4a43d052fd08b6b1b24fb672f73c9b9ba20b7c1c41ea24d912de9b555b6e5682b970608ff229ad3086f431f9be190ec39224ba2ed8acb4c8eac8582e23aaa79827c44e248c5ba092ddac0f2f79684aa93fc061073e1821a56afb9bfec952df2719a9c7a403e6a93f7a656d74b61c1d19083f8d3f19e659fa2b718e0bd04b693d63dafb86adbee5d87c75b7d129122f178a0e669eb035ca4d8eb45397f1851264e2cf0a0cdd30720c5e139cd6a573f1fa241cae9425805ac79603e8de350efdb0b9bc95ba7b085c1ed92c12acf53f5d4a1137598008f2a3672c84e5f769a25c7a4a16579d86288774972606e4e7d85263ad217e0dbcf343fe554c109c5d9409b7939073ac55a03420fec289b114a5c54c20b45ea69938533ade7b3ae85e1a783dd97897c3ae8254183cc54045c2a18ecbe521691f2619d9b8f1fb347ca055a7b0b4c24f64d1773e01416441efe159923217a84874b9c4ec265cdaab643908068497812c1af15c188071e78f597fedfce91c5d4c6\",\n        \"signed\": \"e02898cc7c30ee01648247497be8a9c6378593dc8820bf7c17ffcd18118af09879a769f539dd9237e96821166634998f946da65e6dbad8271511669e2d6cad02955386b92dd6bf92601bf81e84d25144b5fc0bcd7d23c76e7deb5f5ba6316bb61a5d8e74185b012967f0a4438b531696deb4b8101089e0c0482adf13c0613191b977f77b0419814147f5da64a1d3beb1275b9849d1297ba8532ae0a647a8ace395ae0ed00f67348c5ee5ea19b5f1c5bd2e622818e8adcba3c17c27987e4e3d6d910a56c7e5149d3f5574fc06009bf4dd3e37cfe3ebda2c2116d366dd88ce5ea72ab387490585443b086e8aa38d11d3820b72c658e463cdb59c5393011d4a8f4cb6a195229304e76239fa5e8c2cbe0f39dcad138a0ecb3c51579ec9a120a51607eefebfa59a44620ea5b1916087ea338533fc132ff2e4a43d052fd08b6b1b24fb672f73c9b9ba20b7c1c41ea24d912de9b555b6e5682b970608ff229ad3086f431f9be190ec39224ba2ed8acb4c8eac8582e23aaa79827c44e248c5ba092ddac0f2f79684aa93fc061073e1821a56afb9bfec952df2719a9c7a403e6a93f7a656d74b61c1d19083f8d3f19e659fa2b718e0bd04b693d63dafb86adbee5d87c75b7d129122f178a0e669eb035ca4d8eb45397f1851264e2cf0a0cdd30720c5e139cd6a573f1fa241cae9425805ac79603e8de350efdb0b9bc95ba7b085c1ed92c12acf53f5d4a1137598008f2a3672c84e5f769a25c7a4a16579d86288774972606e4e7d85263ad217e0dbcf343fe554c109c5d9409b7939073ac55a03420fec289b114a5c54c20b45ea69938533ade7b3ae85e1a783dd97897c3ae8254183cc54045c2a18ecbe521691f2619d9b8f1fb347ca055a7b0b4c24f64d1773e01416441efe159923217a84874b9c4ec265cdaab643908068497812c1af15c188071e78f597fedfce91c5d4c6\",\n        \"signature\": \"e02898cc7c30ee01648247497be8a9c6378593dc8820bf7c17ffcd18118af09879a769f539dd9237e96821166634998f946da65e6dbad8271511669e2d6cad02\"\n    },\n    {\n        \"secret_key\": \"d68a5e3c47eedb3099dffc804cf19c5e74bf7bf5f01f54d4d91d7574f3d3dc7c\",\n        \"public_key\": \"46467fe9ce3acfd0d74346be21c46216db81aece6ce0308fb8dc6386fc3446cf\",\n        \"message\": \"596c03d0873f572f45c3b16f0ef4b52ad2bf59ec76d3c0e534d62c1f84164ddaa425fb85c9548485b7064677e99d04c39b6eba04c966397ba6a5f4ebaa69a241df95a6e44502509d6350557ebfea60264b62ad7f74d16e5d25d45970cfebeb33e7b1bac3348dd03a8e99133b26bbfd7aa722c2587f72d5526e980da9eebdf108211dae50bbe8c65f9abee69a1bbf84c03e40448babad03d3cf3b7de4887d2b47737702796482d2265c566b0f623b53c8671bd3719edec0ffd5f49b49b072c1564a57f9bab6b92d1f068d756639a4331452e61aa7b218a88b9db77a19fb82f13e9868edb798d5beeca55d1ab095b316225f3f6390f89578f0160428747bcd21be6ae1d86991b48ef80d569250858febf3276bd5de3db65a245c8bdcf1488c4825968945786bed63f3d13f1409363b948560476858b396bce588e40b311ddfc22ad622ca7d1e69561464dda5009e638aa5ec9f4c039293aaec75001ffc68a7cb3ae01874dc7f39d75027f59a28965fc19530c0752fe99b153da7c0e542bda76ca1e10b7ea158efb4d821fbc65e7271ad9941095315447abcad0880a0075dd04b1325c72633acbcb261fcb407c264a34d70bf1f044feead069af5a87dd352f4bd8110fa178adbd8dbf23c6b575cdd5df22cc9a5cdd37d9c8faab81a4cb3fb5c4fe7ff629dbaa9fc06b80c1fb691c28655955cfe5ca44149b150b3cf140d9acacb14313a72c84098de72bacc0272d79ed6617f72dec88e19b84425492a429ec6d2ec08b86346dfbf20ea2a3619e77b6ac64230ebe25fa0067abb5f33ee49adc7c44bda7046d7f224f2e7a4895683fca8684ed6a031844f5786bcda48b5042394487b52402a09907788a1e140\",\n        \"signed\": \"896fc3caba7fd3fc285d5eddddc0120cd46da7c6efabe66b150b002760b8414a89ac9e7f1f7b7c7b33598f61f45718e4ff4ac368ff129614b4fe9219f237b009596c03d0873f572f45c3b16f0ef4b52ad2bf59ec76d3c0e534d62c1f84164ddaa425fb85c9548485b7064677e99d04c39b6eba04c966397ba6a5f4ebaa69a241df95a6e44502509d6350557ebfea60264b62ad7f74d16e5d25d45970cfebeb33e7b1bac3348dd03a8e99133b26bbfd7aa722c2587f72d5526e980da9eebdf108211dae50bbe8c65f9abee69a1bbf84c03e40448babad03d3cf3b7de4887d2b47737702796482d2265c566b0f623b53c8671bd3719edec0ffd5f49b49b072c1564a57f9bab6b92d1f068d756639a4331452e61aa7b218a88b9db77a19fb82f13e9868edb798d5beeca55d1ab095b316225f3f6390f89578f0160428747bcd21be6ae1d86991b48ef80d569250858febf3276bd5de3db65a245c8bdcf1488c4825968945786bed63f3d13f1409363b948560476858b396bce588e40b311ddfc22ad622ca7d1e69561464dda5009e638aa5ec9f4c039293aaec75001ffc68a7cb3ae01874dc7f39d75027f59a28965fc19530c0752fe99b153da7c0e542bda76ca1e10b7ea158efb4d821fbc65e7271ad9941095315447abcad0880a0075dd04b1325c72633acbcb261fcb407c264a34d70bf1f044feead069af5a87dd352f4bd8110fa178adbd8dbf23c6b575cdd5df22cc9a5cdd37d9c8faab81a4cb3fb5c4fe7ff629dbaa9fc06b80c1fb691c28655955cfe5ca44149b150b3cf140d9acacb14313a72c84098de72bacc0272d79ed6617f72dec88e19b84425492a429ec6d2ec08b86346dfbf20ea2a3619e77b6ac64230ebe25fa0067abb5f33ee49adc7c44bda7046d7f224f2e7a4895683fca8684ed6a031844f5786bcda48b5042394487b52402a09907788a1e140\",\n        \"signature\": \"896fc3caba7fd3fc285d5eddddc0120cd46da7c6efabe66b150b002760b8414a89ac9e7f1f7b7c7b33598f61f45718e4ff4ac368ff129614b4fe9219f237b009\"\n    },\n    {\n        \"secret_key\": \"31e82bc1cc5ced21cdc8bfc2dbbb976b08780afc6944af7e88e50e67874d84f1\",\n        \"public_key\": \"8df977e2b040acebd3dafd67b87f9216e8c371beced618fef3a496d651a5d7b5\",\n        \"message\": \"69d461b6b7a866e94cd59a5a23bba4a1276602f042baa850d5b29249d6743ada04d3d938219abbc22ada66a1778197f70bf80b597a8b4ae00bdb876812d3ab4ec011df73341c85053eebcc2df0acfc21548283b553ecde0154828ed5af47571985f89767b005b622c9e7c079dde694e49dc0550c7918cc515c274dbd9c5469d2f18ecd90de664e03ca41e53be20b96e25af40c54ab0f7cbe9e05ca3fa5a37c1aa8ebfb6444a32c496efc68157c69f358c15f6ac09d46efef9a685df7e8dd63b304bd3c638ccf532fe901f11cf97c5b1cbed33c70637c721b0289adf6bb6d87c30479fa926e043074302b76f1157d0a81dec493e87a3c643e7a20b7a41525a38db04e78dae5e7797066bfae2cf448a447e9004cce8e41f0987991fad30311ddaa459a2644f4b941c068c0d6c0771afcf42bf9139a684da298486ecf67523bf8509a45ba5cb8b3864ad22c0c6a828c6db72e371de410b47dac49ae9d3b5702b1739b8d760ce98611c07d88df5f04683808a21afc2e61713fc2c025cb25fcc4ee941841083b22f61e2656fb3b8dad41c262c89d2f17610309f2d5c29589a2df61e55149895032ca981e4557e130a237fc0826fc872529861bbb8328d673f39b58b73d060ec596bf22e7ee081f44e92c02a5677679520e2a2b4d22c77f2b212d5aaf050bf2c141e3e28b8571d4321937426235c7a646d647e3efe183c27b7492565ecacd7f43c67a74453f4780e88711ba2dd4a3941b12ddd3909270fb3debd422436ab6166f08c99c886cc0e8e3cecd0642e44285b8864aa416943c5a186974f464535a870a012861bc2e587149cae971624e61c31d8a507e3ad82773e723bcb75df54bef847a407bcb7b1d57\",\n        \"signed\": \"240702ac6c68d597d222da949d0c47d16b390a477d1fb579e9d8948adf9b3b6a7fd4458ae6385b7e2b684a05b55c63fa6cd087bb90113cbab8e4af142fcf810e69d461b6b7a866e94cd59a5a23bba4a1276602f042baa850d5b29249d6743ada04d3d938219abbc22ada66a1778197f70bf80b597a8b4ae00bdb876812d3ab4ec011df73341c85053eebcc2df0acfc21548283b553ecde0154828ed5af47571985f89767b005b622c9e7c079dde694e49dc0550c7918cc515c274dbd9c5469d2f18ecd90de664e03ca41e53be20b96e25af40c54ab0f7cbe9e05ca3fa5a37c1aa8ebfb6444a32c496efc68157c69f358c15f6ac09d46efef9a685df7e8dd63b304bd3c638ccf532fe901f11cf97c5b1cbed33c70637c721b0289adf6bb6d87c30479fa926e043074302b76f1157d0a81dec493e87a3c643e7a20b7a41525a38db04e78dae5e7797066bfae2cf448a447e9004cce8e41f0987991fad30311ddaa459a2644f4b941c068c0d6c0771afcf42bf9139a684da298486ecf67523bf8509a45ba5cb8b3864ad22c0c6a828c6db72e371de410b47dac49ae9d3b5702b1739b8d760ce98611c07d88df5f04683808a21afc2e61713fc2c025cb25fcc4ee941841083b22f61e2656fb3b8dad41c262c89d2f17610309f2d5c29589a2df61e55149895032ca981e4557e130a237fc0826fc872529861bbb8328d673f39b58b73d060ec596bf22e7ee081f44e92c02a5677679520e2a2b4d22c77f2b212d5aaf050bf2c141e3e28b8571d4321937426235c7a646d647e3efe183c27b7492565ecacd7f43c67a74453f4780e88711ba2dd4a3941b12ddd3909270fb3debd422436ab6166f08c99c886cc0e8e3cecd0642e44285b8864aa416943c5a186974f464535a870a012861bc2e587149cae971624e61c31d8a507e3ad82773e723bcb75df54bef847a407bcb7b1d57\",\n        \"signature\": \"240702ac6c68d597d222da949d0c47d16b390a477d1fb579e9d8948adf9b3b6a7fd4458ae6385b7e2b684a05b55c63fa6cd087bb90113cbab8e4af142fcf810e\"\n    },\n    {\n        \"secret_key\": \"cc56bc7cdfa611924e72b07f68abc6ca5b85ff8bbacdff406e51ba720d09a866\",\n        \"public_key\": \"5ffee221ab4d0fe6f4c9346c5e5a4b8a636a6a0badce9667be739f4c9e6733c1\",\n        \"message\": \"088304f22e1a286062defbebb1827a64b76a14e87015e7f646178777aba79704688d7bf32e1efac97a9fc339810ebd3df93e4ea024686953ed91fa6d2ab6e07ec7811a6d91ca91b098db4725df65846a95b808635a8d0c5fe5ace25f0780e896177bc1bba1cdb4449251c01b482f023862f88e072e79cde5dbd6c1d9ad9c07c606f5df85a6eca2966cbfe0a1673968112f26a317053f167f611af297efa802e0a94b3e1f33a27b73e5597abb224115ebe75e294a1bcdcd979255b0a80265c089aaa7d6bed2e3d0c918f56f4a55f448d863365c6c5846fb9b2b9bb55f6b7c6dff5847b71bfdd4bb5b9bb2e4249bc0243a02ab4d22ba78a43d182195aed78fece84cb1ddaeb9eff68156045b2932e638d7731d0e8b4c9c8c383b0d6d392d21fc640762c87d3692b1810bcc4a42392ff13d45169ecbf0135055093105098c869b68887e934e2b9da5232ac6c9373800f70b64ec64a4aa0ca044c0777ca3a3acaa138c14249672a55b24ddfe4dc357573241e14ad0ac16475a8e3867886d41eea35fe7932ba9aeaa0c86c9eb6db7808049ade7b5cc1a40822c66dea93ad22d44b9e42904b5b83684ae2931fe36c608ff7096f1b09f811b02672804406e08ed9e7745676ce047f0f7f64708e49bb78754720b8aa226f5556abf05b56584645292dad08e2473639a8ce5475e0ce9192f8ba2dd32ce14c91975ab602f7c13538c52952d0396158c7cc6b942be7d923eeb523a73b5b411966d14ac96e5b096a52932a416292eccddb91071c88560e70ecd4fe2fe24d523fafcb98e4021502f4190a0515edcb24019eaca09ec2615a9bfdeb60eb354c84a1f3cec7ffd7e65a5515d47959a4c4ec48d8021b1754ae2bf84\",\n        \"signed\": \"9b86a192b64f4f044ffbf87b41c7ee52f7a721aa320e7bad6425995990315cdd502be4e1116019d131a9218d19614ad95543b1889af0a97ed4d256dc33d76e08088304f22e1a286062defbebb1827a64b76a14e87015e7f646178777aba79704688d7bf32e1efac97a9fc339810ebd3df93e4ea024686953ed91fa6d2ab6e07ec7811a6d91ca91b098db4725df65846a95b808635a8d0c5fe5ace25f0780e896177bc1bba1cdb4449251c01b482f023862f88e072e79cde5dbd6c1d9ad9c07c606f5df85a6eca2966cbfe0a1673968112f26a317053f167f611af297efa802e0a94b3e1f33a27b73e5597abb224115ebe75e294a1bcdcd979255b0a80265c089aaa7d6bed2e3d0c918f56f4a55f448d863365c6c5846fb9b2b9bb55f6b7c6dff5847b71bfdd4bb5b9bb2e4249bc0243a02ab4d22ba78a43d182195aed78fece84cb1ddaeb9eff68156045b2932e638d7731d0e8b4c9c8c383b0d6d392d21fc640762c87d3692b1810bcc4a42392ff13d45169ecbf0135055093105098c869b68887e934e2b9da5232ac6c9373800f70b64ec64a4aa0ca044c0777ca3a3acaa138c14249672a55b24ddfe4dc357573241e14ad0ac16475a8e3867886d41eea35fe7932ba9aeaa0c86c9eb6db7808049ade7b5cc1a40822c66dea93ad22d44b9e42904b5b83684ae2931fe36c608ff7096f1b09f811b02672804406e08ed9e7745676ce047f0f7f64708e49bb78754720b8aa226f5556abf05b56584645292dad08e2473639a8ce5475e0ce9192f8ba2dd32ce14c91975ab602f7c13538c52952d0396158c7cc6b942be7d923eeb523a73b5b411966d14ac96e5b096a52932a416292eccddb91071c88560e70ecd4fe2fe24d523fafcb98e4021502f4190a0515edcb24019eaca09ec2615a9bfdeb60eb354c84a1f3cec7ffd7e65a5515d47959a4c4ec48d8021b1754ae2bf84\",\n        \"signature\": \"9b86a192b64f4f044ffbf87b41c7ee52f7a721aa320e7bad6425995990315cdd502be4e1116019d131a9218d19614ad95543b1889af0a97ed4d256dc33d76e08\"\n    },\n    {\n        \"secret_key\": \"7a57f2dda0ad0338ab9a13c9a3497e9c75238c1531589789227cd2749bc6e950\",\n        \"public_key\": \"6f738dc5e7d9e240c9f4d0c06a5e021747568b69a75d507a2e0be7ea613526c5\",\n        \"message\": \"8c8575a11d2ff2c238e419ccb00633d04e8b8bd7742901d588dd6a2f00aa12f08ae41dcaa9338f8c47e95312192cf6b245a00ce688a029da56dd1b1deb0d34b5414fe1c21d6b63d06b8534ace8e866c933fd7c5a65eda95a1737a9ecdb17859149ac696951b82c230e8275e96dd02fd455ea675379e67ba63484b6283831fe3ffe52d6ec49b709106705c9d19b859de9fd200887cb44d8fdfe6961fa4ca2340944c764c704491208257e735482af8cb69041dde685241d3fbf46fda057248b8987be1f80b54eb54009f324dc450e886e79f912585b91c9dfafe9012262c471403b1e8b5c31fc5375a1ddf99b68edf9ed70af8594f7d84b2cc4911fe90500c6eebfbac085553550e35bd2e52514e979e7241e9f8e34cdf8513abe72510dff3cfec7e2bc6488641cfd0a65ae0e09ebe99b15b29d45ea67a57aad554d4f8bfce1386ace228839e3a8a534140eec3d37d51be361f5ea1883739f56615f75b055a06a91471be98bc9453783c358382bd0555ae9eb0bdcd66629a611fc1a11c653c82214587dec12ba120e2513070fe69e982f7a80ad159f6a325d977d01d050d116a62a4f8acab6c3d69ff6c878213c60a94845cae106de6c5d6fe2508d94565b7ba75d58d1ad47d76a20defa7568cb7fd66f57cf3774a21d3ffa7d8aa6d86dc284b70e0f17e7630bfc10cd1fc9a8d9c592d39f24a7b5c8e8aff353577e6ac9008690c7a159a7e83be5a6ae8fca9644bddfa37a92b07055f9fac9fa97fb3e8f5f4d917dda5c6dc6ea34b64d302405bc38062e07ce93a1a88aed5fbaf995a09b45b28ad4a6b273dec1413c5404529d825b5edc2e27a390eb7e8c2b43905e116d887ab5fb993dfe150ebdcf817ae62e03\",\n        \"signed\": \"989123761d93563278fd0a78aed64e2de6f4a700fc9a70d2187748ac06d9c2c377d1995f89c7727fe2f120784e4171c42d6353ac3d4e3f620c639c75786c460a8c8575a11d2ff2c238e419ccb00633d04e8b8bd7742901d588dd6a2f00aa12f08ae41dcaa9338f8c47e95312192cf6b245a00ce688a029da56dd1b1deb0d34b5414fe1c21d6b63d06b8534ace8e866c933fd7c5a65eda95a1737a9ecdb17859149ac696951b82c230e8275e96dd02fd455ea675379e67ba63484b6283831fe3ffe52d6ec49b709106705c9d19b859de9fd200887cb44d8fdfe6961fa4ca2340944c764c704491208257e735482af8cb69041dde685241d3fbf46fda057248b8987be1f80b54eb54009f324dc450e886e79f912585b91c9dfafe9012262c471403b1e8b5c31fc5375a1ddf99b68edf9ed70af8594f7d84b2cc4911fe90500c6eebfbac085553550e35bd2e52514e979e7241e9f8e34cdf8513abe72510dff3cfec7e2bc6488641cfd0a65ae0e09ebe99b15b29d45ea67a57aad554d4f8bfce1386ace228839e3a8a534140eec3d37d51be361f5ea1883739f56615f75b055a06a91471be98bc9453783c358382bd0555ae9eb0bdcd66629a611fc1a11c653c82214587dec12ba120e2513070fe69e982f7a80ad159f6a325d977d01d050d116a62a4f8acab6c3d69ff6c878213c60a94845cae106de6c5d6fe2508d94565b7ba75d58d1ad47d76a20defa7568cb7fd66f57cf3774a21d3ffa7d8aa6d86dc284b70e0f17e7630bfc10cd1fc9a8d9c592d39f24a7b5c8e8aff353577e6ac9008690c7a159a7e83be5a6ae8fca9644bddfa37a92b07055f9fac9fa97fb3e8f5f4d917dda5c6dc6ea34b64d302405bc38062e07ce93a1a88aed5fbaf995a09b45b28ad4a6b273dec1413c5404529d825b5edc2e27a390eb7e8c2b43905e116d887ab5fb993dfe150ebdcf817ae62e03\",\n        \"signature\": \"989123761d93563278fd0a78aed64e2de6f4a700fc9a70d2187748ac06d9c2c377d1995f89c7727fe2f120784e4171c42d6353ac3d4e3f620c639c75786c460a\"\n    },\n    {\n        \"secret_key\": \"32ef6d789a1ea393f1bf9f11de34f57d653c4e77d51e6050fef4e8d7bf183db5\",\n        \"public_key\": \"c1aa181e620f60525c2b17da8d290bae5d339e17eabceab58cd76ae066f41179\",\n        \"message\": \"11a9c3c1ba7cfb61ad103305c25886de9f8815c6c21f17a8733a024f9497da0540db3603a671aae837dbbba19e19f82ddfc8af855980a70125fc61cd7ffd10777e366e5e9569927af0f245d4f39b3fd0f45879c253401412855e5761905ed6ef318b6a06ea6e9f906f9bd016bcb694a0df65a016bdfe845a09f23e5086c5aaf375efeb86da51239ddc350bac0cdb03b874db1507e6ad4e2c9f46028ca2388363541493b6cb92c1dfcaa3efd68c6b4e91efb46751d23f4c48a973f0a5c7c6fe2a1269d2a69e9fc4ab8ba3b92f796449ba3dc70245ed505cc0eeee1636647a68c7679d0b6d651bba35c29b81478d17ca3685707ad616e6e5604381f84ee52b25ad02fc0dfb85432efb1fecd090c02ad002c1857fced88fdfb2ff26dd0f5018fb47d813581f6508ca637c7365177c513d1ee05879a65c5b676b3aa873a1935c5437eadcb66dfb052a5e7c3e81d44b3daf698f42244ee2ee4b6ed2b7e6e56e61ff9cb45e719fd746198bf2a7de6d25af3bc6c7b0ed8abe3cb389afd84ffa2a230d93bc0c29d5a9419cbff11b7883329921480b5844655d996c7cab29dfb2a3927b82ba7c306c4577b6f8b5dbe2afaf9bf14a8f9554cd01a69a991bf212828de1e63172e833de06698cdb3b28716380314572bf5bcfd34ef52a6fadda87babe6bacdb20ce63c725cb0ff61fe30c1b51dbda2c2625f99dfeb029a3e58cba7d01905111caf42f27025e720e18eeb07dae9155c55aa300e22eb5e94dc7a0a84ee67d91a960ae08ca632dbb1737fc9a43dbcfb3a879eb9fbffd7299338e264bc1237ab6a5bc2a263cfa99e8544439d96331639fe9408e54a350610ff01de3f85799adeb73d82be938074dea858ea636b63abd\",\n        \"signed\": \"88f3a6e0bbaa3e060bc9d91fe2968c61126b20317f59842e4ae48711cdbaf62c6c0207405d1c4849950271f0aaa7593091109e478d13f356964f7dbab729af0011a9c3c1ba7cfb61ad103305c25886de9f8815c6c21f17a8733a024f9497da0540db3603a671aae837dbbba19e19f82ddfc8af855980a70125fc61cd7ffd10777e366e5e9569927af0f245d4f39b3fd0f45879c253401412855e5761905ed6ef318b6a06ea6e9f906f9bd016bcb694a0df65a016bdfe845a09f23e5086c5aaf375efeb86da51239ddc350bac0cdb03b874db1507e6ad4e2c9f46028ca2388363541493b6cb92c1dfcaa3efd68c6b4e91efb46751d23f4c48a973f0a5c7c6fe2a1269d2a69e9fc4ab8ba3b92f796449ba3dc70245ed505cc0eeee1636647a68c7679d0b6d651bba35c29b81478d17ca3685707ad616e6e5604381f84ee52b25ad02fc0dfb85432efb1fecd090c02ad002c1857fced88fdfb2ff26dd0f5018fb47d813581f6508ca637c7365177c513d1ee05879a65c5b676b3aa873a1935c5437eadcb66dfb052a5e7c3e81d44b3daf698f42244ee2ee4b6ed2b7e6e56e61ff9cb45e719fd746198bf2a7de6d25af3bc6c7b0ed8abe3cb389afd84ffa2a230d93bc0c29d5a9419cbff11b7883329921480b5844655d996c7cab29dfb2a3927b82ba7c306c4577b6f8b5dbe2afaf9bf14a8f9554cd01a69a991bf212828de1e63172e833de06698cdb3b28716380314572bf5bcfd34ef52a6fadda87babe6bacdb20ce63c725cb0ff61fe30c1b51dbda2c2625f99dfeb029a3e58cba7d01905111caf42f27025e720e18eeb07dae9155c55aa300e22eb5e94dc7a0a84ee67d91a960ae08ca632dbb1737fc9a43dbcfb3a879eb9fbffd7299338e264bc1237ab6a5bc2a263cfa99e8544439d96331639fe9408e54a350610ff01de3f85799adeb73d82be938074dea858ea636b63abd\",\n        \"signature\": \"88f3a6e0bbaa3e060bc9d91fe2968c61126b20317f59842e4ae48711cdbaf62c6c0207405d1c4849950271f0aaa7593091109e478d13f356964f7dbab729af00\"\n    },\n    {\n        \"secret_key\": \"0a5525a4598f60992f86ba1ab9eee6e2675622f943284fc0553e4446ac5a4c53\",\n        \"public_key\": \"db60d7ea29f8d60dad33d02ec5f42232057bd1c4bd6180a242cb7ab6f4426781\",\n        \"message\": \"f787321b42c08d4052449a488593d885b4e0c34a5d64149fa8b9c85ee54bcbecb50909b2a86b88258a10e07e8f8c2d068a89fb165a6ace7e64998ba57d89d9bf2b8b38a1f6d8364aee05ce3348bed48b88c2473bf5f2665f51ca073a5305358eaad4365d58b83bc9814e25f54c37cd9b68a808a57d6c2d7d7b6deb5fe20f4f96fe725f8de65c29a4f1ccefd7c2c6f2fc0116d58676acbc58691c79c2b006785a0975a31d8d3c949161596a068aaf2226ab842550e9c0b2610a29531d1f3f7f00826bb6c7dbe04e28ae1b9ff6f888a49d82812f452e1b32740b234ddd9642e18f32ad9a9af7f8952528674a2cda25b4f7ba867007ffa7f78f163db8f36914956bfaecd50f6d1af4ee133275a8eaab94bbc0ae52b6d9b2832634232ec0e8b5f8022d3ef1ead9b79ef9a16564277194f2380d9021e1f17b184b8d3a7a34d15139a39c7728c22e1a3a67a27a6ca4b8a8a0636c6054d0f741f046673619fc6b070e62ff4862f59d269007f3431339637a89f564c0db3d9bcfcd19fc25138ac66d474d80f4ad79f6d1e7844408e88034eeaff4a790338d546bfcd7424c119e211f363cb89c888749346a89d32f023bb6b0366a1ede4325032aa35f52e9df938a5027ebee9688ae480dde1a9c9b42d1a9c08f719223dfae1cfcd49dd1053aaa381c24cc9c7abfcf8f6d86d6af72eef05304412f3db2585aa9e0f3a4f1b6d710d02ab11db1fc90ad4de25d04299f3129c212e9cb73c0047953455bf98ec8fd2674e47b949957deeda018badc9f2f68a1b18ef5c583b095e08dd906da5f220da029b9c400e3ca91c7cbd87f3430c742337f61cf54745b0622bcb90762c6bafef87e1ec888c364fad646c33acc22af5438b84cd5\",\n        \"signed\": \"8fa6b0aeac71132ad882975868f1bdb8c11f1a6c1b9c54594e0e46286ea6c9a5d6d5b0eaeaca9ae3af74e72326b3b6f2eaa893c0ec42a49c56ef514f75c77f01f787321b42c08d4052449a488593d885b4e0c34a5d64149fa8b9c85ee54bcbecb50909b2a86b88258a10e07e8f8c2d068a89fb165a6ace7e64998ba57d89d9bf2b8b38a1f6d8364aee05ce3348bed48b88c2473bf5f2665f51ca073a5305358eaad4365d58b83bc9814e25f54c37cd9b68a808a57d6c2d7d7b6deb5fe20f4f96fe725f8de65c29a4f1ccefd7c2c6f2fc0116d58676acbc58691c79c2b006785a0975a31d8d3c949161596a068aaf2226ab842550e9c0b2610a29531d1f3f7f00826bb6c7dbe04e28ae1b9ff6f888a49d82812f452e1b32740b234ddd9642e18f32ad9a9af7f8952528674a2cda25b4f7ba867007ffa7f78f163db8f36914956bfaecd50f6d1af4ee133275a8eaab94bbc0ae52b6d9b2832634232ec0e8b5f8022d3ef1ead9b79ef9a16564277194f2380d9021e1f17b184b8d3a7a34d15139a39c7728c22e1a3a67a27a6ca4b8a8a0636c6054d0f741f046673619fc6b070e62ff4862f59d269007f3431339637a89f564c0db3d9bcfcd19fc25138ac66d474d80f4ad79f6d1e7844408e88034eeaff4a790338d546bfcd7424c119e211f363cb89c888749346a89d32f023bb6b0366a1ede4325032aa35f52e9df938a5027ebee9688ae480dde1a9c9b42d1a9c08f719223dfae1cfcd49dd1053aaa381c24cc9c7abfcf8f6d86d6af72eef05304412f3db2585aa9e0f3a4f1b6d710d02ab11db1fc90ad4de25d04299f3129c212e9cb73c0047953455bf98ec8fd2674e47b949957deeda018badc9f2f68a1b18ef5c583b095e08dd906da5f220da029b9c400e3ca91c7cbd87f3430c742337f61cf54745b0622bcb90762c6bafef87e1ec888c364fad646c33acc22af5438b84cd5\",\n        \"signature\": \"8fa6b0aeac71132ad882975868f1bdb8c11f1a6c1b9c54594e0e46286ea6c9a5d6d5b0eaeaca9ae3af74e72326b3b6f2eaa893c0ec42a49c56ef514f75c77f01\"\n    },\n    {\n        \"secret_key\": \"2d5ddffa2e58c90451ea05de47b8c49234e26ced54854e3acef11d8ee6852da7\",\n        \"public_key\": \"7bfd1c8a4a0bbb4606d2e5bc090f56b20d58f2204b6aed831d3df4d406b47605\",\n        \"message\": \"4f1c5b4e6fac3baa3e9010f3bf293c779e61fd7bbe05a586f5aaf08026371627a209acd188afb2dbe0311547940559711640f78aea9a62818962f445a8e7ed6fe6c5f49162e7435d1b625b88ba39dab0ad56fd2c0ad6512661362bf78afe5a1416b647f3b88a056c9e7289c9b0cc3afb43402198563493e737b1da052506b6c9306d75ad6693db6d1571f96f6f52990c4df19665a6bb63073fdd9f55596896a2e9c2622f2b0c2cc99ddd1b649fb0318058d74794e38ec657ebc82abd5bedf8b3f4bba3bb6c9935fdf6826502b769046b36d96dc695d7c85404284d2a2ab7fcf3b02f68a1493dd383ca6339fac1cde47f53c5e026d0869faffe40abdb98195230f17d0cfaa533315afdbfe7d1afc3a615b4f75090233a503f8861e32374e1ea9557674231d9d737d477b33ff82ac0b2c0ba93c11fb523e613618ed370524a60f4d4c83694c033606d1d069d544dccd3900c37a3b3363efbcf6697f9f762b33b1294583953fc53773ef56726eeb470ebe92149b73648a16161d494120a318bfb080cc38e4996f4b263ffe78c7877fe13c2fc55219f44260e8f253bdd379d870e6c91048b1d8d4e88b88218b2b049fef53b2ae1f8c921ed2bcb434669e3975dcc3fe4520ca8024842f7ff2ba1e22cfeb5d4c9e435eada601ff183b26364eee1faa59d19e6aa4f0975238496a709e46bf68336b068bd80b346f11faa3817a07d1cbd84382b2102986f295a1398077ba291d6b5f5bd860ec6177273468f0ee0f2591b575c4366e189b224e9ffa35bc78a4aa8c06954fe33d080ffc0b23e209fd0e79421f1bde818a86890cf172236db211657d1003119fe91d4e27c524ccc11fade0a25f57a7a1d677e1da0b9c043d02fca38\",\n        \"signed\": \"ced9d61010339c471ddf9fefcaa82d1eab3a2e0e60278553b4dd9f395be58149c91594e5618b0b10bf3aab94f159b530f64463eed66fa2ace54fd92572a06a0e4f1c5b4e6fac3baa3e9010f3bf293c779e61fd7bbe05a586f5aaf08026371627a209acd188afb2dbe0311547940559711640f78aea9a62818962f445a8e7ed6fe6c5f49162e7435d1b625b88ba39dab0ad56fd2c0ad6512661362bf78afe5a1416b647f3b88a056c9e7289c9b0cc3afb43402198563493e737b1da052506b6c9306d75ad6693db6d1571f96f6f52990c4df19665a6bb63073fdd9f55596896a2e9c2622f2b0c2cc99ddd1b649fb0318058d74794e38ec657ebc82abd5bedf8b3f4bba3bb6c9935fdf6826502b769046b36d96dc695d7c85404284d2a2ab7fcf3b02f68a1493dd383ca6339fac1cde47f53c5e026d0869faffe40abdb98195230f17d0cfaa533315afdbfe7d1afc3a615b4f75090233a503f8861e32374e1ea9557674231d9d737d477b33ff82ac0b2c0ba93c11fb523e613618ed370524a60f4d4c83694c033606d1d069d544dccd3900c37a3b3363efbcf6697f9f762b33b1294583953fc53773ef56726eeb470ebe92149b73648a16161d494120a318bfb080cc38e4996f4b263ffe78c7877fe13c2fc55219f44260e8f253bdd379d870e6c91048b1d8d4e88b88218b2b049fef53b2ae1f8c921ed2bcb434669e3975dcc3fe4520ca8024842f7ff2ba1e22cfeb5d4c9e435eada601ff183b26364eee1faa59d19e6aa4f0975238496a709e46bf68336b068bd80b346f11faa3817a07d1cbd84382b2102986f295a1398077ba291d6b5f5bd860ec6177273468f0ee0f2591b575c4366e189b224e9ffa35bc78a4aa8c06954fe33d080ffc0b23e209fd0e79421f1bde818a86890cf172236db211657d1003119fe91d4e27c524ccc11fade0a25f57a7a1d677e1da0b9c043d02fca38\",\n        \"signature\": \"ced9d61010339c471ddf9fefcaa82d1eab3a2e0e60278553b4dd9f395be58149c91594e5618b0b10bf3aab94f159b530f64463eed66fa2ace54fd92572a06a0e\"\n    },\n    {\n        \"secret_key\": \"4df5e11dec80ecd882837554fa3135b9d5029df42027aa3b3c929246329fee96\",\n        \"public_key\": \"efd928898fa144c2d1c8334fa2e6b5b6a325a7102a2c344a145541ee9a6c046d\",\n        \"message\": \"fbd6f371b4c8b152c9ce0c6396a77c0fe480bc02007f336ac58fd4addda9d69855ac9e93a45d3e350f41ff502aa1d8fe159ce89b064802a0a1890f6a40a7ef57c6e5e5ed040280df07e7f48fe819be63176710757cb6e440b4f78b5759dce028bf585b3c3feca1cf5981dadadfd27ea124af45ef638542a8617ff49f9470ac2285943c7c3b1163b903955ab99b6eab17f4d49ffa87207abbfc111c4b91f5413dfc9bea31843d115ddeb1da40b45f58f47c417b5e77d5818934e730eba9c4557bbf48cb7fd4e664558af4fb44ee3d94c16e883631f38476f4837db94d54122fa134ca51a525aad5e24b76018fee9a2e8f60e2bb48d24ab8b146f84ffa9820120e7c50d45c0cfbe35c8c31419b078e90712cfe934c3be3a94ff2158873aefe34dc6e36902b1675e1a47cb608dfe960fb4da8d2a8490cc38ebadc73a1003c4941fda8fae944a1de8e3b10ef6d9e67ceec745977d333ac9e71214121ede8892295e27799f206675a9d54ac12159d3a1f954fd0eeffbd30a31904fb2eee77a8aa9dc4ccbbe2851096146a4ce0e81fb9c62498dbd83bf83b55029a5e900086b9531ce3247a98f8654efd8fe7a836431f75daf0868f0108326e23026d2db4a72124ec4e39d4bbf3d846c9f51ca3cc31eb1d02c2ba321e4619f2b659c0bf0fe5c19b213f3c79124f3643f74dd0ff9ce5d27727be6c6958159c164404f43301fe1742e279de9efd441e73e4ea7a842587a79d115d36eca9c03c90ff0d147474109fc20a91d7b3cc22ebcbb8c7f71bd61e8cae47c5050cec1d4849a1d4a8e7a6f845548437706c25331c9e57c2cc6da117f2e5a0f4b368c4cb206265c4178e0655ff675ffc1d4c58eceb9edb4da3ad2c5f62cd13ab48\",\n        \"signed\": \"62545e6c07801fde95b461e2e753c4b6c84c25124eb330a2725989d5e340dcef0c7456d4c7c6a178a221b6328348253db787a9e5510ab9cc278515ae3e58fb01fbd6f371b4c8b152c9ce0c6396a77c0fe480bc02007f336ac58fd4addda9d69855ac9e93a45d3e350f41ff502aa1d8fe159ce89b064802a0a1890f6a40a7ef57c6e5e5ed040280df07e7f48fe819be63176710757cb6e440b4f78b5759dce028bf585b3c3feca1cf5981dadadfd27ea124af45ef638542a8617ff49f9470ac2285943c7c3b1163b903955ab99b6eab17f4d49ffa87207abbfc111c4b91f5413dfc9bea31843d115ddeb1da40b45f58f47c417b5e77d5818934e730eba9c4557bbf48cb7fd4e664558af4fb44ee3d94c16e883631f38476f4837db94d54122fa134ca51a525aad5e24b76018fee9a2e8f60e2bb48d24ab8b146f84ffa9820120e7c50d45c0cfbe35c8c31419b078e90712cfe934c3be3a94ff2158873aefe34dc6e36902b1675e1a47cb608dfe960fb4da8d2a8490cc38ebadc73a1003c4941fda8fae944a1de8e3b10ef6d9e67ceec745977d333ac9e71214121ede8892295e27799f206675a9d54ac12159d3a1f954fd0eeffbd30a31904fb2eee77a8aa9dc4ccbbe2851096146a4ce0e81fb9c62498dbd83bf83b55029a5e900086b9531ce3247a98f8654efd8fe7a836431f75daf0868f0108326e23026d2db4a72124ec4e39d4bbf3d846c9f51ca3cc31eb1d02c2ba321e4619f2b659c0bf0fe5c19b213f3c79124f3643f74dd0ff9ce5d27727be6c6958159c164404f43301fe1742e279de9efd441e73e4ea7a842587a79d115d36eca9c03c90ff0d147474109fc20a91d7b3cc22ebcbb8c7f71bd61e8cae47c5050cec1d4849a1d4a8e7a6f845548437706c25331c9e57c2cc6da117f2e5a0f4b368c4cb206265c4178e0655ff675ffc1d4c58eceb9edb4da3ad2c5f62cd13ab48\",\n        \"signature\": \"62545e6c07801fde95b461e2e753c4b6c84c25124eb330a2725989d5e340dcef0c7456d4c7c6a178a221b6328348253db787a9e5510ab9cc278515ae3e58fb01\"\n    },\n    {\n        \"secret_key\": \"85d32330e2e073a46030ca0ee2df2f8eb874a9fddf5624c8031775111f11eea2\",\n        \"public_key\": \"6ea7de2ed5ea5cdf50bfffee77f7bd2fcc21d48666bb1f4890c76a69cc7ba4e8\",\n        \"message\": \"ae6107f38ff94ed0327903cbaf6c3e3a3498c47abb2989a8b37b3a19df88c6de790accb4b7258177b9151d1fe04063577d3c3acdb4c929968afdad6f252a67ed4ca89d060f1a4653983f7ab58ddb93e2878fbab0637dbbeb95d25c5986839de2748d9f34027aeebf1d9eb936cb6770e08d45b8095bac9cbb71db14e8a34222b1f2237b9f0bc9766a231a6d102799f7c081d500fbeade603cdcdd7d5b965fbace4be5c2cd932dcf5f6ed31722f41d5a363b34babf3f636fb303824aa701dfe1d3e41263078c1ebbdcb1f73f1245b83e3fa70ab8e3f1413e6b06bdae022b714d60a401d57480dc64e7aac6d3de85fc94d853ca13b7e67415579d5c672123a5af194bee14ae35dc2724ff209f1166638661f881b1194aa4e31b42a527964781591504ba76103f97b7f5520315473ec94bb017a16667b22a8576a7cc2ac0b7756303c756f0ddaae9d0189e6c8de349f91957c72a529e9f7e9b9456524840ba02344f55ad3c11a0b259901439f2655ab9f8c6c8e8e960c057d9c7dafe425c75d4a33b801d4547cd0551a6802a8005dd72424764dcf57e4aa22290ea4f5baac51d7939c05342882ee14380ef2d4704b41949b2282a1e1a3fa7ddea9fe83b9fc51d4eefa2ebac722e4c0a7c599b6925f01b8a2066dc0c26f92196f4f503e887c1e6efb093f1531387bd88c691997b9b89e3cdf7da12d3734183a4b6126be9e0774704b529659b5548f1b87512cc1878ca4ef55990b483c9af6aa97635f4f07949727065abf21e21e32990b1a7d07d74e02d9b07ec639931bf9e2ca3941f2ba6b5ef14dcc2a247d2117e9cb41efa3fcca24716641452beed2f92657c2fb731f0b94e8c892a81bba91f639df43796acd3013ac044f608\",\n        \"signed\": \"414363fead6e59a3438ce5a3a277d62bdd00fa2efac6463dd13fcdded93a7f108ae1f528ffc8ff4eca331dab91ae5b1416e2ddb73b6daf853b03c81e9936560aae6107f38ff94ed0327903cbaf6c3e3a3498c47abb2989a8b37b3a19df88c6de790accb4b7258177b9151d1fe04063577d3c3acdb4c929968afdad6f252a67ed4ca89d060f1a4653983f7ab58ddb93e2878fbab0637dbbeb95d25c5986839de2748d9f34027aeebf1d9eb936cb6770e08d45b8095bac9cbb71db14e8a34222b1f2237b9f0bc9766a231a6d102799f7c081d500fbeade603cdcdd7d5b965fbace4be5c2cd932dcf5f6ed31722f41d5a363b34babf3f636fb303824aa701dfe1d3e41263078c1ebbdcb1f73f1245b83e3fa70ab8e3f1413e6b06bdae022b714d60a401d57480dc64e7aac6d3de85fc94d853ca13b7e67415579d5c672123a5af194bee14ae35dc2724ff209f1166638661f881b1194aa4e31b42a527964781591504ba76103f97b7f5520315473ec94bb017a16667b22a8576a7cc2ac0b7756303c756f0ddaae9d0189e6c8de349f91957c72a529e9f7e9b9456524840ba02344f55ad3c11a0b259901439f2655ab9f8c6c8e8e960c057d9c7dafe425c75d4a33b801d4547cd0551a6802a8005dd72424764dcf57e4aa22290ea4f5baac51d7939c05342882ee14380ef2d4704b41949b2282a1e1a3fa7ddea9fe83b9fc51d4eefa2ebac722e4c0a7c599b6925f01b8a2066dc0c26f92196f4f503e887c1e6efb093f1531387bd88c691997b9b89e3cdf7da12d3734183a4b6126be9e0774704b529659b5548f1b87512cc1878ca4ef55990b483c9af6aa97635f4f07949727065abf21e21e32990b1a7d07d74e02d9b07ec639931bf9e2ca3941f2ba6b5ef14dcc2a247d2117e9cb41efa3fcca24716641452beed2f92657c2fb731f0b94e8c892a81bba91f639df43796acd3013ac044f608\",\n        \"signature\": \"414363fead6e59a3438ce5a3a277d62bdd00fa2efac6463dd13fcdded93a7f108ae1f528ffc8ff4eca331dab91ae5b1416e2ddb73b6daf853b03c81e9936560a\"\n    },\n    {\n        \"secret_key\": \"66590d369984c6f5ad3a89c78ddfca10a0a7657995dc0188b6b57ac3164731a4\",\n        \"public_key\": \"98873ab13346ee48677c4f8612db31ebd13db58b2b034fd155afa8720f4e93e8\",\n        \"message\": \"2ec1c6b0829737832c9c798a92eb490b23d334c3bbe627cb582d17a9e42960efcdc7d34750e0b4aa864c204fb8d62b47992e91dbfcfd69f51d937dc06c48c0ad43e8598371cd0e3bbce416bfd44b0944b993aa2993fdea487134cde42277723e0683ec98e69595e9b7b14c8cf9617a1e30ddb8060eacba48d88253b165336108de0cb02ff20f5424b567830869c9b4329c9945f0bf2f3c7acd1e774358930cd890fd9cb864d950935ad8a4a3beccae8f833f6356191371c32633dcf882709b0d98bd807b383aed8d7bb097b6e262ef700c9d768f4b5690e3a1a8f21755d658db2d1bfd2f7071e0caec7c2c5381c5ef5c2c2281c6bcedc867390b90f3b27b0f0f64a33658578a5c0d66e211e6fff6e86488acf82bc0f5e2664b83699046037c0d33d340ff98ed6263354c24273136ff0e4f0f233a6c8254fc0c90764330e3b1057b1e666d5ecd5a2efeaa6a105bfc858431b88ed7fe551eb32ac0af27c66a9803a3bcf87634c66c7066dd0197a3cbd2d6f4e65cfdb8f3daf9f3ca5c4f4e0add45f5541aa18d041f706e4fa87c34e9a223d88572eb50083ee8c7c475df568bc73bd08c0f0deaa374afb1c178d0dddb236e15a8bc2385ed3f52b8761e637887407a20aec3e99ec830dae3167ef0cdb3f3ffd200d83b75b749690b9e25e2171d072ca56f71baecd21f7d45a12c91b2c0fb3fea3b158e54648284bb0095b36244b0b121f9f1384ce9004365e7772fa30828250f51985f1b17b2d2f80a33e8fc6d8565ea15cdaacd42a87bd7c9408b1fe1c770665bdded754bc2ff2ef91b973a86b99f1059c6f227246a698b38541509dd5449fce60d386224183b7dce1b3884f7bae1c2e4eb594510b5ca585279d9041df8817b0619\",\n        \"signed\": \"f0db63a1bc7624161ca0063853b2dee45fccd22471e012366f868a4a9c74654e13f1a315ad83916ebfb8dc31a420f83cf645c4c9d16bb4d5d99d23c7b43e23002ec1c6b0829737832c9c798a92eb490b23d334c3bbe627cb582d17a9e42960efcdc7d34750e0b4aa864c204fb8d62b47992e91dbfcfd69f51d937dc06c48c0ad43e8598371cd0e3bbce416bfd44b0944b993aa2993fdea487134cde42277723e0683ec98e69595e9b7b14c8cf9617a1e30ddb8060eacba48d88253b165336108de0cb02ff20f5424b567830869c9b4329c9945f0bf2f3c7acd1e774358930cd890fd9cb864d950935ad8a4a3beccae8f833f6356191371c32633dcf882709b0d98bd807b383aed8d7bb097b6e262ef700c9d768f4b5690e3a1a8f21755d658db2d1bfd2f7071e0caec7c2c5381c5ef5c2c2281c6bcedc867390b90f3b27b0f0f64a33658578a5c0d66e211e6fff6e86488acf82bc0f5e2664b83699046037c0d33d340ff98ed6263354c24273136ff0e4f0f233a6c8254fc0c90764330e3b1057b1e666d5ecd5a2efeaa6a105bfc858431b88ed7fe551eb32ac0af27c66a9803a3bcf87634c66c7066dd0197a3cbd2d6f4e65cfdb8f3daf9f3ca5c4f4e0add45f5541aa18d041f706e4fa87c34e9a223d88572eb50083ee8c7c475df568bc73bd08c0f0deaa374afb1c178d0dddb236e15a8bc2385ed3f52b8761e637887407a20aec3e99ec830dae3167ef0cdb3f3ffd200d83b75b749690b9e25e2171d072ca56f71baecd21f7d45a12c91b2c0fb3fea3b158e54648284bb0095b36244b0b121f9f1384ce9004365e7772fa30828250f51985f1b17b2d2f80a33e8fc6d8565ea15cdaacd42a87bd7c9408b1fe1c770665bdded754bc2ff2ef91b973a86b99f1059c6f227246a698b38541509dd5449fce60d386224183b7dce1b3884f7bae1c2e4eb594510b5ca585279d9041df8817b0619\",\n        \"signature\": \"f0db63a1bc7624161ca0063853b2dee45fccd22471e012366f868a4a9c74654e13f1a315ad83916ebfb8dc31a420f83cf645c4c9d16bb4d5d99d23c7b43e2300\"\n    },\n    {\n        \"secret_key\": \"41cf071f4842ecd494191b8cf28cc0923185ef1b07458a79a59a296d3549822e\",\n        \"public_key\": \"6dc8e446db1da353b58d0c45d8b4d816ba59e25bb680712d62d6d3dbf78d0698\",\n        \"message\": \"daeb5f0e84f1590bca2b9d9719ef5d1cfa79e0583446332f18e9e4feb0b1f15340297ac9ad6724c85bb16558ea54eb5d702a47248badc6252a804371b74cfe1062d1dba1ec68fd1d4dd029cb55034bbf61068251eff3983636f6debd5727be91993b3e4d0abc96ec196421a47b7893f83986d6c0323f0d19aaf2cde9d3565c104c9d3176ecb5ed5e173fee52b5a0c42b6ab2fcb1ccba9649c2c67c520e9b96cea693df3e58609ad6a0bd522efaaf03858d245dd0a38f84a2fb1020f4dd97c3aeef0e24477d30d256701e900bef26a8a6269ab660d74293a2bf1d20c2cfaebb7c2820f5f5b07453bb69ee769b52391539f0c606d22eb3923ee6f5a1d46050af90f011f851ace76327d3d18c48170a9a25b04b770fd938ef8a30b7bd03391dd36c516b62f0cb78670740e00e69595c418d967253820b754c4fd666e3cce16ee0c94183bbea706fe298e1c99ddb821217ed9008cc8e8b83bc8b819915b07b146fe745024ac3c46116cb4cce5e32ec5d7524a2388d9fe297eb02811af4546fcd5860e14c0d13f03dd75a4249615900078a3c358c5342962bc1beacf68c246821a459ab5321ec9f574f49d10389f40f14ddfc8513ffe3deaa7336035a675fa5858b490c5d247780064adbaf75a76335eec9ab918771b0b1df5147642aef4a166ab172ed601fed210f6c0cffd91869f7490b57e7c65241863e7e8c0a26eba63b5342d0fd8214ac731e1c438d0177115f6a19e0935c7af6bc7dbeb75511d9bd8e63e3e2f47ab0dd1cedd7b180d74a4b44d461197aefdd3620465166a39b45395043ce8874cdd72c602bd3d2eecbad3466b5cb1aa41ae92a8afef2d764cec0c449d27efac437938f280bea9c50a582e57c27f9b3de872f0c\",\n        \"signed\": \"41052bc417b24dc48383966af0143f9c0ba85bbefbdaf791b16a4dad1f570eb80703c0a2cdeb2f7ad6dcd3fa7bdb5c225e869cd8fb278dff0667d38accf3db08daeb5f0e84f1590bca2b9d9719ef5d1cfa79e0583446332f18e9e4feb0b1f15340297ac9ad6724c85bb16558ea54eb5d702a47248badc6252a804371b74cfe1062d1dba1ec68fd1d4dd029cb55034bbf61068251eff3983636f6debd5727be91993b3e4d0abc96ec196421a47b7893f83986d6c0323f0d19aaf2cde9d3565c104c9d3176ecb5ed5e173fee52b5a0c42b6ab2fcb1ccba9649c2c67c520e9b96cea693df3e58609ad6a0bd522efaaf03858d245dd0a38f84a2fb1020f4dd97c3aeef0e24477d30d256701e900bef26a8a6269ab660d74293a2bf1d20c2cfaebb7c2820f5f5b07453bb69ee769b52391539f0c606d22eb3923ee6f5a1d46050af90f011f851ace76327d3d18c48170a9a25b04b770fd938ef8a30b7bd03391dd36c516b62f0cb78670740e00e69595c418d967253820b754c4fd666e3cce16ee0c94183bbea706fe298e1c99ddb821217ed9008cc8e8b83bc8b819915b07b146fe745024ac3c46116cb4cce5e32ec5d7524a2388d9fe297eb02811af4546fcd5860e14c0d13f03dd75a4249615900078a3c358c5342962bc1beacf68c246821a459ab5321ec9f574f49d10389f40f14ddfc8513ffe3deaa7336035a675fa5858b490c5d247780064adbaf75a76335eec9ab918771b0b1df5147642aef4a166ab172ed601fed210f6c0cffd91869f7490b57e7c65241863e7e8c0a26eba63b5342d0fd8214ac731e1c438d0177115f6a19e0935c7af6bc7dbeb75511d9bd8e63e3e2f47ab0dd1cedd7b180d74a4b44d461197aefdd3620465166a39b45395043ce8874cdd72c602bd3d2eecbad3466b5cb1aa41ae92a8afef2d764cec0c449d27efac437938f280bea9c50a582e57c27f9b3de872f0c\",\n        \"signature\": \"41052bc417b24dc48383966af0143f9c0ba85bbefbdaf791b16a4dad1f570eb80703c0a2cdeb2f7ad6dcd3fa7bdb5c225e869cd8fb278dff0667d38accf3db08\"\n    },\n    {\n        \"secret_key\": \"a2c8e161a8d9d6e888c3d09b0b972737307a2cbd2acd7ccd804d2431ac6c58d2\",\n        \"public_key\": \"3a325775886732deca406857a8056010aaea2875545ba6f3df30754571386992\",\n        \"message\": \"83a3bebcac5f28c5433e3c4f1e7bf5d2e4dcd2f5e59dbee0a83b07025715350746f85675f1dfea374aa7d794287b892ef9097ff6d2e122f0a656fba0798cdcfcb3645dfcfd788c740c0fd04520e7a06a02a05829630a2bf0cdfe2ecca009ec44049946bb1d2326ddd61d7ec640bf69eb44fb23cc1ff478c570c75db7e766e35b7c43db73680d1407a94399fb621baf3845745c1c4ed0b9f0b485be2d53c568545ddf18775a837a05d9c9157b084e8cd01fc324f07f116877e4075dba2432c8a7752e9e939586ad93f0c0aa5edac94b8d82e5449997b15b8c8961589c442821aa83b60239ec5f158c3f5e9ec5bea5115d5fed61918e8fcd5bce61c777f20b6bfe803a69c6fc794ab8c57df271da863872a61335b1fa29f4608ff037f712069809ca642a0307c79aa92e10cb893a29d17201a0b6d1b46a7212b3baec9703c0b0392ba6b76e5c9c10f83599b81ea22283f9547aacdaa7f30896d1ff731e11fb9e56ad06030417119805bab63521496c3bb92a12f5e55afcf60ed4217737f3046b16ca506657a6d696d75a6d8e18e9efe2b08c8b1fa0728238e27cfb322166eee4ee76968b777b50ee6a2b804e1e9b46016620132b6588718d978ca2c0026979c400d3c5336751210f0b00d269ec8f4e2f9559e180332dd270e50cc9465c5558936355521bc3c9560fc19ec14242121e6bb2fff8f50337fc264acf1ac1704328334b3b52cba96d9303b1b5db859dae31d80f1711fba251e10b4d122128f9faff6872d0c0b81eef59541f832b0a9df3a4cdd591c87736b1aecf242c275a10c3fd67839dad4ef399b9494ecd77f7ba5b5d4f2ca304e5b22921307cb18fa64aa3d01c4411c8369ccede465ee369ee637d43d28826bf60ddde\",\n        \"signed\": \"560d01b94df11d83347752ff51b3545ef55c5632ae7c8efb11aadd8312def72562e8f5d75ece10ad46bc96c860deece39e634a5f50654d4cdba84a8e6f70240a83a3bebcac5f28c5433e3c4f1e7bf5d2e4dcd2f5e59dbee0a83b07025715350746f85675f1dfea374aa7d794287b892ef9097ff6d2e122f0a656fba0798cdcfcb3645dfcfd788c740c0fd04520e7a06a02a05829630a2bf0cdfe2ecca009ec44049946bb1d2326ddd61d7ec640bf69eb44fb23cc1ff478c570c75db7e766e35b7c43db73680d1407a94399fb621baf3845745c1c4ed0b9f0b485be2d53c568545ddf18775a837a05d9c9157b084e8cd01fc324f07f116877e4075dba2432c8a7752e9e939586ad93f0c0aa5edac94b8d82e5449997b15b8c8961589c442821aa83b60239ec5f158c3f5e9ec5bea5115d5fed61918e8fcd5bce61c777f20b6bfe803a69c6fc794ab8c57df271da863872a61335b1fa29f4608ff037f712069809ca642a0307c79aa92e10cb893a29d17201a0b6d1b46a7212b3baec9703c0b0392ba6b76e5c9c10f83599b81ea22283f9547aacdaa7f30896d1ff731e11fb9e56ad06030417119805bab63521496c3bb92a12f5e55afcf60ed4217737f3046b16ca506657a6d696d75a6d8e18e9efe2b08c8b1fa0728238e27cfb322166eee4ee76968b777b50ee6a2b804e1e9b46016620132b6588718d978ca2c0026979c400d3c5336751210f0b00d269ec8f4e2f9559e180332dd270e50cc9465c5558936355521bc3c9560fc19ec14242121e6bb2fff8f50337fc264acf1ac1704328334b3b52cba96d9303b1b5db859dae31d80f1711fba251e10b4d122128f9faff6872d0c0b81eef59541f832b0a9df3a4cdd591c87736b1aecf242c275a10c3fd67839dad4ef399b9494ecd77f7ba5b5d4f2ca304e5b22921307cb18fa64aa3d01c4411c8369ccede465ee369ee637d43d28826bf60ddde\",\n        \"signature\": \"560d01b94df11d83347752ff51b3545ef55c5632ae7c8efb11aadd8312def72562e8f5d75ece10ad46bc96c860deece39e634a5f50654d4cdba84a8e6f70240a\"\n    },\n    {\n        \"secret_key\": \"d3d188b390baccd95024526146b82b9184e197e46a9340a0e6ec18bf75be7fc5\",\n        \"public_key\": \"d8f794948aa6986100214e9b7b9024420806b4c67846d5bd506113b353a2ea3d\",\n        \"message\": \"5e65658e420375433fd7c1f6be678841e58104f10b4c676359d84fce7992f5c57557d738f830b505fa0c2b9eabf8d1a9f81fe8f315d662e2b84ce95299ebf4e503b5e1f7f8cdb668ae733f3d0cdd4c742ab5f272bea4f18d183e8923847662f9a39cd4b14ec76d11032fe573c26201aef66601cec683e34b89afd964e987801c706a85e27bab33701cd109bcf07b27ca67f022c494a04cbe5a9c6d63aad936cdf1a180fd05865198b96f06a78da95799d3aa4df3b170033c69e8fb04288c3546553b579c0ae3938062d3d8421cfa66268529bec0271e53b4ee7d099e7148a802df80fe5eedee1c903ae8ed4d640ead761262dd4014f25f9397ba3f1c08d83a3c485cfb55f89919aa972d6b7e7711be9e30c1eb96a0c3845309fb23dbc75b6991dd6e48cdde90e04f228e8ccf3ba23f2747cfb9d3381a9305f816f26cdde41c0220fad228ff6a8b095c77b6bae8fa3368142724bf1f5e0f6fbca5320c215b6ba86b91e3a8acf750e93fa7eaa65c4f785ef8421a19c1e27bc24b428e08a90242abac9bd4aa03c656f8f46dc40b36152c1bd0def1acfc0da10a2fa1dc3da7ace5a8fd76227bb1a602390fe57afd32efe281f2ea6b2e4d2545cb88d2308d72691c9a52b4ca25231a0107f25d117cc935397621c683bdc8f22e810340f2cbac4ceaa3468665261879f0074200743e0de5f3e58308b98b04b8c7148a4e004e667e832b0084b5f2bdc6fdc959f2fc28a8d31d9a9e78e5d5f9c0b119e5ff1f68f7c0daf0c0f16947cca5b7ced09601e2ebed282ef2bf8fe9a27ed27fc5bcda8aed6c71bee3e7751004472689bbf6d9d07952a242ff870d7c3f5e1ffc2c1f40fc9ab7579b392b554f3dc588c03ab957431fe5d02cbc711ad489fe\",\n        \"signed\": \"16976b267de96e38dddc8478075f6bdd7159e56334b2d2d1920946294f33cd6b7f9c50f8057f496cab5d94bb4dca262f9f0fdf9b1b64741f4b722d32efa822035e65658e420375433fd7c1f6be678841e58104f10b4c676359d84fce7992f5c57557d738f830b505fa0c2b9eabf8d1a9f81fe8f315d662e2b84ce95299ebf4e503b5e1f7f8cdb668ae733f3d0cdd4c742ab5f272bea4f18d183e8923847662f9a39cd4b14ec76d11032fe573c26201aef66601cec683e34b89afd964e987801c706a85e27bab33701cd109bcf07b27ca67f022c494a04cbe5a9c6d63aad936cdf1a180fd05865198b96f06a78da95799d3aa4df3b170033c69e8fb04288c3546553b579c0ae3938062d3d8421cfa66268529bec0271e53b4ee7d099e7148a802df80fe5eedee1c903ae8ed4d640ead761262dd4014f25f9397ba3f1c08d83a3c485cfb55f89919aa972d6b7e7711be9e30c1eb96a0c3845309fb23dbc75b6991dd6e48cdde90e04f228e8ccf3ba23f2747cfb9d3381a9305f816f26cdde41c0220fad228ff6a8b095c77b6bae8fa3368142724bf1f5e0f6fbca5320c215b6ba86b91e3a8acf750e93fa7eaa65c4f785ef8421a19c1e27bc24b428e08a90242abac9bd4aa03c656f8f46dc40b36152c1bd0def1acfc0da10a2fa1dc3da7ace5a8fd76227bb1a602390fe57afd32efe281f2ea6b2e4d2545cb88d2308d72691c9a52b4ca25231a0107f25d117cc935397621c683bdc8f22e810340f2cbac4ceaa3468665261879f0074200743e0de5f3e58308b98b04b8c7148a4e004e667e832b0084b5f2bdc6fdc959f2fc28a8d31d9a9e78e5d5f9c0b119e5ff1f68f7c0daf0c0f16947cca5b7ced09601e2ebed282ef2bf8fe9a27ed27fc5bcda8aed6c71bee3e7751004472689bbf6d9d07952a242ff870d7c3f5e1ffc2c1f40fc9ab7579b392b554f3dc588c03ab957431fe5d02cbc711ad489fe\",\n        \"signature\": \"16976b267de96e38dddc8478075f6bdd7159e56334b2d2d1920946294f33cd6b7f9c50f8057f496cab5d94bb4dca262f9f0fdf9b1b64741f4b722d32efa82203\"\n    },\n    {\n        \"secret_key\": \"61917a975cb7ec564c708a565388c57236a66b697dcd5a7f10bae671572ac7f0\",\n        \"public_key\": \"ecc0f0b99276e528f82b42f2efce8579f83e638c6acefd072828c04e434f55af\",\n        \"message\": \"6e970e0b1c92a7f496a82d8ae80cfd0ccef1d2c799d41728f35ddcd603b421c2a5ab3b489e78f4b62297de437c5ad1a9683ff87fa28eb3cc38ce242af59419f9fd43fcaa54fc398992f8c8e31f2b33dcccd0ee11ba7b388e8d2a36ead067c6beced5890ab7d4a94f55dab92128a0f814c0e68971df57bd5078a7403175c7c2fdd4a52447153ab37456729aee33e5fc93db8e7f480309875ecf6db07ce7f3cac5de49e361275ca50b6b719f4b715b3e30863cbb3b7164ba9eb96ef3304b19ad4d74dce4bd25e77bbbbeff1ee7d1fb55b9c4f7fc4cd9bd55108afcf99c1a41cd6f6b1adb297b106c8ba24e3134f87dd8efe5cf85492291b94d6600958c28b9122fe6e01bd3e329e42d1926b89f7a8c40a49867e5aa3ad749bd98dae7d006b453609e7dae26364d9172be7283330121ed2b4027e0885118743a6ea0cb7dc27409a9b2820bcc242ea10a00937bf849201e0fb6199421f163e9794f2dd4b332014a09d3ee8071da787747f990f5179919027ddff7cab0f55e9afa8eccb16cc2dd3cbbead7ff7ec818c253393f748741f55407f7408ee33a42ae2d6ecb3fb600a71f30ab630606e553b43678e59854f3a2947bcf4ea0fcfedc314d8370d1266395fda3c9105e975952f60e3086bb82481513d6fe8adb4f95efb9a95b66d480d2bb171078cf40684ac69a789c7fb7fa425333d705db00066755df728de02df25bae34f1d7d49caffc51e9ba2b10b98fe4cd9d22b7764ed931edb5f0b554496e995391e0af0b8d1c7a8295a8d15a7c6556d29cb19e0855ca505ad01d2aa30928a84bc48959576d812d9b27b8e88879faa2806c0841360ecd0fe83f5b848fc12f658f1e7f40e561c2e78d3b0125210a92061c2db21ba660e8608ff5\",\n        \"signed\": \"6abb3e377b5c80b74f77219c1a9e096fba0eb68990817acff12dba7f61c77ccf595fb6608552003cead06ca1317c9cd51ac4724b29f40921fb928433768764016e970e0b1c92a7f496a82d8ae80cfd0ccef1d2c799d41728f35ddcd603b421c2a5ab3b489e78f4b62297de437c5ad1a9683ff87fa28eb3cc38ce242af59419f9fd43fcaa54fc398992f8c8e31f2b33dcccd0ee11ba7b388e8d2a36ead067c6beced5890ab7d4a94f55dab92128a0f814c0e68971df57bd5078a7403175c7c2fdd4a52447153ab37456729aee33e5fc93db8e7f480309875ecf6db07ce7f3cac5de49e361275ca50b6b719f4b715b3e30863cbb3b7164ba9eb96ef3304b19ad4d74dce4bd25e77bbbbeff1ee7d1fb55b9c4f7fc4cd9bd55108afcf99c1a41cd6f6b1adb297b106c8ba24e3134f87dd8efe5cf85492291b94d6600958c28b9122fe6e01bd3e329e42d1926b89f7a8c40a49867e5aa3ad749bd98dae7d006b453609e7dae26364d9172be7283330121ed2b4027e0885118743a6ea0cb7dc27409a9b2820bcc242ea10a00937bf849201e0fb6199421f163e9794f2dd4b332014a09d3ee8071da787747f990f5179919027ddff7cab0f55e9afa8eccb16cc2dd3cbbead7ff7ec818c253393f748741f55407f7408ee33a42ae2d6ecb3fb600a71f30ab630606e553b43678e59854f3a2947bcf4ea0fcfedc314d8370d1266395fda3c9105e975952f60e3086bb82481513d6fe8adb4f95efb9a95b66d480d2bb171078cf40684ac69a789c7fb7fa425333d705db00066755df728de02df25bae34f1d7d49caffc51e9ba2b10b98fe4cd9d22b7764ed931edb5f0b554496e995391e0af0b8d1c7a8295a8d15a7c6556d29cb19e0855ca505ad01d2aa30928a84bc48959576d812d9b27b8e88879faa2806c0841360ecd0fe83f5b848fc12f658f1e7f40e561c2e78d3b0125210a92061c2db21ba660e8608ff5\",\n        \"signature\": \"6abb3e377b5c80b74f77219c1a9e096fba0eb68990817acff12dba7f61c77ccf595fb6608552003cead06ca1317c9cd51ac4724b29f40921fb92843376876401\"\n    },\n    {\n        \"secret_key\": \"7ba25f2797a2836f379d6bbcbe9abf4f2def5e52f72bd9e0b006571022fac2f3\",\n        \"public_key\": \"6c2ed4e8c0124d5d0540796d3945d1de71aa6969e6abea0f1b0e6fc429c7046f\",\n        \"message\": \"171a3409878097b3b22b2c00660b46e542c2164c00bbee54554837940e70f03da9916a40f9bde8288f45e47bef7ffe4e557cd4474045e740fd959d984f4ec81da88d44a373c1eda0cfc6b08e351373d3b82ab0902df8063fd908e703e0cbec410ab5cdfeaae00188ce2ad42b8bf04f7daa5f0ee333a6f9311b4ad9810952d5d5a64b20f37e845415fc3cdd616febec50db296fb3f3bb7f6b366bbe52e4897a05617bf7c981a62edcbbbe5da4c39cafa869aa2b2734e6cfed90ed8be75949390ee44566892455b890cf568b945aabb758d3854be6539f3b86bf01d188e48cf2626a0d7d381703be6ed1290dfb947bc2e0f83dbc58703080d7f5b9ef19aef930908f68f0c80010a9401b303a9f6da805bb8a0ed0f39413eefedf919ffd8ea6391bf95d4229604e49457b8e23bec611484cc7f9832dd95bdc3ad177c050f4ab633dcdb3e691f5902873b38cb0720b9113357fe0cfb98a68cccb5d5f0809d59a375cf7b5a275d43c4c34ff68e448526e8e1aad44e20008a232afbcf532a42b50a025a1b2ee4e077eb0125a593d51a200ec20d872c05838ad36aaaeeccc3ed9ef41f6d122670217d5c08f6e13c172194589acc3c59f7ef790c7c85aa6d5eb69d4c89a72f5e7c9246985c1ac0c5d197f76a73e3774839d4aa2096aca190a30f4aac54057b64f358e0e06400c0df2f876412d34484c4344f4d7c866517d3efba4a90fa7144c9ba5db3361db5769403ec81626a511f93e30f8586eadfcafd9a36ecff8d24b42079ada8e579ac30851177bce9038b0e1300072d68efdd723f6355064843275815a66b9d73a1299aa59a1812f6452fb4115ea2b1f9ff4a99690596e3f2022d81ed874dd67e6189ca0e68b9304e993a95b66665e0d074c\",\n        \"signed\": \"f1f590a907ba980eb0d648ab4ded5f92faf7cb851d81d858a78fa6b77cbbe12f64d20df52771a7d5e539a152d731e1903d4211fdcfef9a48b46c8fd5394ca009171a3409878097b3b22b2c00660b46e542c2164c00bbee54554837940e70f03da9916a40f9bde8288f45e47bef7ffe4e557cd4474045e740fd959d984f4ec81da88d44a373c1eda0cfc6b08e351373d3b82ab0902df8063fd908e703e0cbec410ab5cdfeaae00188ce2ad42b8bf04f7daa5f0ee333a6f9311b4ad9810952d5d5a64b20f37e845415fc3cdd616febec50db296fb3f3bb7f6b366bbe52e4897a05617bf7c981a62edcbbbe5da4c39cafa869aa2b2734e6cfed90ed8be75949390ee44566892455b890cf568b945aabb758d3854be6539f3b86bf01d188e48cf2626a0d7d381703be6ed1290dfb947bc2e0f83dbc58703080d7f5b9ef19aef930908f68f0c80010a9401b303a9f6da805bb8a0ed0f39413eefedf919ffd8ea6391bf95d4229604e49457b8e23bec611484cc7f9832dd95bdc3ad177c050f4ab633dcdb3e691f5902873b38cb0720b9113357fe0cfb98a68cccb5d5f0809d59a375cf7b5a275d43c4c34ff68e448526e8e1aad44e20008a232afbcf532a42b50a025a1b2ee4e077eb0125a593d51a200ec20d872c05838ad36aaaeeccc3ed9ef41f6d122670217d5c08f6e13c172194589acc3c59f7ef790c7c85aa6d5eb69d4c89a72f5e7c9246985c1ac0c5d197f76a73e3774839d4aa2096aca190a30f4aac54057b64f358e0e06400c0df2f876412d34484c4344f4d7c866517d3efba4a90fa7144c9ba5db3361db5769403ec81626a511f93e30f8586eadfcafd9a36ecff8d24b42079ada8e579ac30851177bce9038b0e1300072d68efdd723f6355064843275815a66b9d73a1299aa59a1812f6452fb4115ea2b1f9ff4a99690596e3f2022d81ed874dd67e6189ca0e68b9304e993a95b66665e0d074c\",\n        \"signature\": \"f1f590a907ba980eb0d648ab4ded5f92faf7cb851d81d858a78fa6b77cbbe12f64d20df52771a7d5e539a152d731e1903d4211fdcfef9a48b46c8fd5394ca009\"\n    },\n    {\n        \"secret_key\": \"d1e1b22de5e04c9be4651dd73995a3666cb5352c65ac7b7051b366fe1ac0c310\",\n        \"public_key\": \"12fe56f1012d5c12f135ed5982f382ae5f1143bc90e8cb8c93051754551ee90a\",\n        \"message\": \"c7f218b5aa7aae1799625a56c4d7d7b02637e572f1411a6122f113791aa3c628e819602fb4f0335a6123013fa64e9fdc4e4ae497bd169c2fa77bc236129717f462886b410893fa7809cbfdc892223b40ee041ebd4ec7ddab55be6081a1646643a9120baa46289acba15b3b48af3b7adecd69f43eede79d9b1957e1d8c3129e0fa0579d3d395370461b0e1255c9caa94e4725601cb9d0e2d60244d15b64e1f7bc9015590ad0991f12f8267311206e9eb5d16add0ba5218fce5fffe1c9ce5ffe1f731132f4b12cacb02f97451710846b7f824f4fa9e08919266469789c00ce0d94d38fa8fec3f51f2f886e9db09b804470b19ec9e80663f155b4984d2bbd0b2ce99302e06c64444b696e3129fcef34c3dd00f7ab5beda747a3fc6339192b740f3569b67dbd6ffa39e271faa400d9616bff86ec49a659def2e7f5d451f2a2b35e662a6e7cc22f1e5cdcde8a59988135b7e76562743c1e6a099901b3ef97cbff23f209bd7088c2f03245279a1dc78dddc1bb0c1d35100357882126b328d3d94e0871b60be253fd1b6ecf03c1db731d9eed0edf2b2643230780a4d66e99179aad1b82402e55f6d785ebc80f8dd2fd2beb09f31035df62c17f428ed0b2d56508db31e6d2dd5fb69ebeeea3257070cf2fe67d42d28816a55dbae0b185db4421bbfdaefc79c08cdc1accf71642562ec70036da2bbafa4a891954c4ee4049b55c640e91930e39e3ef1018dc1647f26942c6dbdf4d56e41eb2c898c821fac17cc273e8e4aa5608a812cf4b82f96019c252d56e7805298ccbe8ce40b0bd0f933b884c0faf97a958b20408b8a5297cce5527b2ca212806e72a3264457a7fac8662b82ca233e1c7758dc6e4f1b9995863f25f747bcee43b639b1f8f2026d2d2\",\n        \"signed\": \"abaab4fa6aeb0a0b34ee0d613a0af049edb4cedbfe9d3bebe9c00618b115b9d1fa524ec3495e1330b0936181eabb14299faccc40eaa8cca57ed324b7a6420c0ec7f218b5aa7aae1799625a56c4d7d7b02637e572f1411a6122f113791aa3c628e819602fb4f0335a6123013fa64e9fdc4e4ae497bd169c2fa77bc236129717f462886b410893fa7809cbfdc892223b40ee041ebd4ec7ddab55be6081a1646643a9120baa46289acba15b3b48af3b7adecd69f43eede79d9b1957e1d8c3129e0fa0579d3d395370461b0e1255c9caa94e4725601cb9d0e2d60244d15b64e1f7bc9015590ad0991f12f8267311206e9eb5d16add0ba5218fce5fffe1c9ce5ffe1f731132f4b12cacb02f97451710846b7f824f4fa9e08919266469789c00ce0d94d38fa8fec3f51f2f886e9db09b804470b19ec9e80663f155b4984d2bbd0b2ce99302e06c64444b696e3129fcef34c3dd00f7ab5beda747a3fc6339192b740f3569b67dbd6ffa39e271faa400d9616bff86ec49a659def2e7f5d451f2a2b35e662a6e7cc22f1e5cdcde8a59988135b7e76562743c1e6a099901b3ef97cbff23f209bd7088c2f03245279a1dc78dddc1bb0c1d35100357882126b328d3d94e0871b60be253fd1b6ecf03c1db731d9eed0edf2b2643230780a4d66e99179aad1b82402e55f6d785ebc80f8dd2fd2beb09f31035df62c17f428ed0b2d56508db31e6d2dd5fb69ebeeea3257070cf2fe67d42d28816a55dbae0b185db4421bbfdaefc79c08cdc1accf71642562ec70036da2bbafa4a891954c4ee4049b55c640e91930e39e3ef1018dc1647f26942c6dbdf4d56e41eb2c898c821fac17cc273e8e4aa5608a812cf4b82f96019c252d56e7805298ccbe8ce40b0bd0f933b884c0faf97a958b20408b8a5297cce5527b2ca212806e72a3264457a7fac8662b82ca233e1c7758dc6e4f1b9995863f25f747bcee43b639b1f8f2026d2d2\",\n        \"signature\": \"abaab4fa6aeb0a0b34ee0d613a0af049edb4cedbfe9d3bebe9c00618b115b9d1fa524ec3495e1330b0936181eabb14299faccc40eaa8cca57ed324b7a6420c0e\"\n    },\n    {\n        \"secret_key\": \"df294e477b1b91c5ac5b98c330d222d7cd2d53e7d0bc0ca403df4ec75327a274\",\n        \"public_key\": \"5f0bd22f2f1896d1563b4f6940c7df89efc258c0ff6c2fcd674daf4f59fcdb60\",\n        \"message\": \"3e42d668409630cbb84812ac7ff1154f70fca8bdff3f1a040fa3af868aa1c4e91508b1aefdf5c3a8b4b077a4d162d2c05bd364fbbe8c5a08314c2e07dffbd6e8dd2e08a0dcc96ea92ddd4c97f79db9425a6c6b34c46043d09a68b7687236a918d21a561610a13ac5e446e0881bb26cc8e28aad1654f867ad82ae33f8f7a78a65be57699475516a1a8746843e93a1a294354624fac04d452ccfbe4fdd92a951aaa07d26676d5cb077a5000d439c124276c0dbcf86e7aa153cc24b5aff677c6badc261c289f4a4ae519b2e2fff312fbf0f5b4c4698f6aedd8fcb1d2348942de3fb73ba27f6db14c2f09180356e5fcae1adf65e22425f8c27f19e989483506e5df57a1b613a22e345038b3ea91c0f78ffff46383f38c72225358a34570d6f664a17454a151613f01cba777f62ec831875ec5e27d257f180b6366cb183107c40f50b01b2b9bf91b3b5549ed931a3537aa41689f72b257a6aa39cdc6fcedf143983be5bffe3ae2b29f82f882122d66a7925f5a710826c0dadb7e4fa4ec079ba2e76dada433f3077cb1ef74613fc5dbf8258b6da7c73c866372457ed500f97f9907e1fc26353c70ba3bd9c36151d46865d2c65986562485cf8421febbe777c73e6cd0026d66d35128b9f8f33264aeb56bd3e4b8d1f5266411ef3b23b76b36d4c9df3c512fd560c2be52ac523c19377ad2adc0e8c309cf5bbf72d9eb85d65a94847d497d8d102424fb84381666ecb1c35a3725d7d9e9284fdebb6b362aa6a9c6fb37aba87357f574c0e63b4497d498ffbb7d0692d784b4b18ce9f9150c146d3d18c382eda04938c69d0778f2902d5235a5652b97cef6d5f60da6bd7ed4ff97cd94d4939caca3b6baa3cfdac04cda95596f467cbc6cbcd9264167743eac1\",\n        \"signed\": \"9945ab73b58562b355dabc4e2b6be7e05f37f89571440ccc32c1a94737095b7866747d21007000a0f0e351114b88e0138b55df44fe72ebe9591410e707fa9d023e42d668409630cbb84812ac7ff1154f70fca8bdff3f1a040fa3af868aa1c4e91508b1aefdf5c3a8b4b077a4d162d2c05bd364fbbe8c5a08314c2e07dffbd6e8dd2e08a0dcc96ea92ddd4c97f79db9425a6c6b34c46043d09a68b7687236a918d21a561610a13ac5e446e0881bb26cc8e28aad1654f867ad82ae33f8f7a78a65be57699475516a1a8746843e93a1a294354624fac04d452ccfbe4fdd92a951aaa07d26676d5cb077a5000d439c124276c0dbcf86e7aa153cc24b5aff677c6badc261c289f4a4ae519b2e2fff312fbf0f5b4c4698f6aedd8fcb1d2348942de3fb73ba27f6db14c2f09180356e5fcae1adf65e22425f8c27f19e989483506e5df57a1b613a22e345038b3ea91c0f78ffff46383f38c72225358a34570d6f664a17454a151613f01cba777f62ec831875ec5e27d257f180b6366cb183107c40f50b01b2b9bf91b3b5549ed931a3537aa41689f72b257a6aa39cdc6fcedf143983be5bffe3ae2b29f82f882122d66a7925f5a710826c0dadb7e4fa4ec079ba2e76dada433f3077cb1ef74613fc5dbf8258b6da7c73c866372457ed500f97f9907e1fc26353c70ba3bd9c36151d46865d2c65986562485cf8421febbe777c73e6cd0026d66d35128b9f8f33264aeb56bd3e4b8d1f5266411ef3b23b76b36d4c9df3c512fd560c2be52ac523c19377ad2adc0e8c309cf5bbf72d9eb85d65a94847d497d8d102424fb84381666ecb1c35a3725d7d9e9284fdebb6b362aa6a9c6fb37aba87357f574c0e63b4497d498ffbb7d0692d784b4b18ce9f9150c146d3d18c382eda04938c69d0778f2902d5235a5652b97cef6d5f60da6bd7ed4ff97cd94d4939caca3b6baa3cfdac04cda95596f467cbc6cbcd9264167743eac1\",\n        \"signature\": \"9945ab73b58562b355dabc4e2b6be7e05f37f89571440ccc32c1a94737095b7866747d21007000a0f0e351114b88e0138b55df44fe72ebe9591410e707fa9d02\"\n    },\n    {\n        \"secret_key\": \"70c6859f08cf42b4bda9eb62979dffb7cb08eb3dabe93fe94b01384617cf6730\",\n        \"public_key\": \"401c9e2033e2259fb6383b3e8b9e17b3f2062746bbe648cf484516db0f2f1b06\",\n        \"message\": \"dd0609ea159921395d11fb2da8ea4f747d7f74b58052e01cad40a271fa0bbeed91020f4f0c0846c4f07778a6aa768eb51712294e9e1f32a602b152514f5e6d39f9e08f7a7812bd900c10a91469e47e8a78e54cd4bd7cfededec171ef373f1c4f9bbc2c81402fb14ed0bfac8d043f117d6124521afae0916a510d568acfa3aa3301bc979ac28d551dbbea6ceac4c212aa8c8492b3613ae7395dd4125fc4c25d5b4d99230821d4b17ec2ee6be7d604195a2154333b973526580ca7ef9e30c6c1dd42ef2afe42b11b1aa49b9ccabaca17091eeb380ec5e34ad1e3827cc60dacf144286c7892590bd2671a8dc5f3a702c1de7cd3b42c1b150b09c3e58ef6943b45d89d41df361f1d5c25565591b6ac8deaa73676531f6e5abe5804b0097f8d45ea2939177333cacef12e4b71fe4936bafe00747a8930bcea55b8fd84a01f6df84e7acb931fc7c01ddfd63deec3ad3e69dfa2b73550583d5747eee96c5536368797e247f23f537d79079ab6da314102c7443d41960e3a3d8c359c4a4ec626fcc44e110ea744d417aa850db8ecdbfe340a962db0d8c57dc517be8b40d14de97b1e9e0426447fde0a04e50679c53ba1aa3cdc38c7ede6db6c054b1e9ce7deadaf93ebdd470791535f3ecfabf3416355f7a18a38afe6bfe507ef08c4373a4a69dee1fcb65b1631a0de1488649d0bb2679a9a45f67820b2a4a1e5a548072da7032d172555e788cc9860ebb3c0c359493751b0c2c950a7fcf4803c147f9340fc93d85f1efa57b39081b92d93473fd23516c4950ed4b29a2ed3a042ae3d92a1e52cb709636fc7272fd747208bee2b16d191e4c6deb27672aa34e43914cff2055ca4ee8ba3e1dc58a679c7f7dee2c1d53e28750970f57d85eab1c26b89bb73e0b1\",\n        \"signed\": \"0f03a4f15c339b4f7b88b4e21ad9e3d6bbf3effb7b678ffa500d47383b71a7454f62907b56f59f9b9af6d5b2a0fc1c737a64105195089899f57a2c9dba509e0add0609ea159921395d11fb2da8ea4f747d7f74b58052e01cad40a271fa0bbeed91020f4f0c0846c4f07778a6aa768eb51712294e9e1f32a602b152514f5e6d39f9e08f7a7812bd900c10a91469e47e8a78e54cd4bd7cfededec171ef373f1c4f9bbc2c81402fb14ed0bfac8d043f117d6124521afae0916a510d568acfa3aa3301bc979ac28d551dbbea6ceac4c212aa8c8492b3613ae7395dd4125fc4c25d5b4d99230821d4b17ec2ee6be7d604195a2154333b973526580ca7ef9e30c6c1dd42ef2afe42b11b1aa49b9ccabaca17091eeb380ec5e34ad1e3827cc60dacf144286c7892590bd2671a8dc5f3a702c1de7cd3b42c1b150b09c3e58ef6943b45d89d41df361f1d5c25565591b6ac8deaa73676531f6e5abe5804b0097f8d45ea2939177333cacef12e4b71fe4936bafe00747a8930bcea55b8fd84a01f6df84e7acb931fc7c01ddfd63deec3ad3e69dfa2b73550583d5747eee96c5536368797e247f23f537d79079ab6da314102c7443d41960e3a3d8c359c4a4ec626fcc44e110ea744d417aa850db8ecdbfe340a962db0d8c57dc517be8b40d14de97b1e9e0426447fde0a04e50679c53ba1aa3cdc38c7ede6db6c054b1e9ce7deadaf93ebdd470791535f3ecfabf3416355f7a18a38afe6bfe507ef08c4373a4a69dee1fcb65b1631a0de1488649d0bb2679a9a45f67820b2a4a1e5a548072da7032d172555e788cc9860ebb3c0c359493751b0c2c950a7fcf4803c147f9340fc93d85f1efa57b39081b92d93473fd23516c4950ed4b29a2ed3a042ae3d92a1e52cb709636fc7272fd747208bee2b16d191e4c6deb27672aa34e43914cff2055ca4ee8ba3e1dc58a679c7f7dee2c1d53e28750970f57d85eab1c26b89bb73e0b1\",\n        \"signature\": \"0f03a4f15c339b4f7b88b4e21ad9e3d6bbf3effb7b678ffa500d47383b71a7454f62907b56f59f9b9af6d5b2a0fc1c737a64105195089899f57a2c9dba509e0a\"\n    },\n    {\n        \"secret_key\": \"c5962961815b57cd162403ce08e4105ddb8aae2d3f533fb49cc236b5ff504d6e\",\n        \"public_key\": \"dbade72236ba12d4977ba46c364bb69a887ff402de91d47afa9b93c95be71e7e\",\n        \"message\": \"4ae4148d79ca9425592aa240bd153424a3bf4ae27395872ce5728ac7613596a77d5ce8565d8d6e1b5935b3906cafe1ff888ebc9815e04a624dfc4c6907b85f6f1a0dbddff62e9151220d474462cb9f13d89d3a93a00ba2b60f7e7ca63da17a6379d673551e790b5911727c906dc94f86d8277546c1564a45573a7743bb8a138cde87b3b2f28e5e245940a51e7c458cf8c5f0a70275962553e0d2390d171db44c2f7a5c9e9f93b90f7a5f54f191b0d875bad7e0beb980c2a3365cd7b9208724f4654418117e16ef7134e3e2794b6f9e80ecabeca3254e704c21b7ad30c5dee017ea2533fcd94251e55ae75a8cc6db6674b39c88ca42006043d6bd9b00ecf64ceafeeb402b1f22fd891f2d11c515c1aba6a2d4c0bd2181a48e43fd1c0af91f9b7b7d37f3dcd9e4c0a759748467d348a8b116df6a4eacf178aecccd3066e92dca45da7a3e319f3771eb3490022193c5b652f045687e1705f2e5691c134be4006353d7ecd0e918d5de0f3b87809fca4acfab94e1148ff7cf07f7cfd0c745dd2be01a24a5e069280698bc3f5400a6dcd08e44595c0388e44833768fc49104ee115bdcb02bfbda179d164ce969936629f2335601b56fe8f785cca3805f0403872c62f73c3ce80563d070e976d8ecc51124e2cace7ee18699047cb0f8fb8d9c59b8a60d12c08a09fce58fd92cd36db6a8e89d118cf88a92dc8a2600bd95f5a8e85db5cdbb249ca812ca209c7618051c4564a3a0e192b7e45992456c87d17412c11adead526ab8db21452f7471d17f2ebc90015450edf4f0a44fb2f4905f74d70275ccd89b93a650473c02a7da0cbc67915ceb7a1ea59fa8884472dc917ee9d246339c5926843ecf53fafdc56a695601a276c23a843e4d30f89c97c9eee6dfc7\",\n        \"signed\": \"8101baef004eb6f5ad4de0979ff36d3439b8212bdc928942e431915b3fd18bc2ad67b26f18941dcb16d2c29191421e779fed622fd9f582644eaadb3fe5c098034ae4148d79ca9425592aa240bd153424a3bf4ae27395872ce5728ac7613596a77d5ce8565d8d6e1b5935b3906cafe1ff888ebc9815e04a624dfc4c6907b85f6f1a0dbddff62e9151220d474462cb9f13d89d3a93a00ba2b60f7e7ca63da17a6379d673551e790b5911727c906dc94f86d8277546c1564a45573a7743bb8a138cde87b3b2f28e5e245940a51e7c458cf8c5f0a70275962553e0d2390d171db44c2f7a5c9e9f93b90f7a5f54f191b0d875bad7e0beb980c2a3365cd7b9208724f4654418117e16ef7134e3e2794b6f9e80ecabeca3254e704c21b7ad30c5dee017ea2533fcd94251e55ae75a8cc6db6674b39c88ca42006043d6bd9b00ecf64ceafeeb402b1f22fd891f2d11c515c1aba6a2d4c0bd2181a48e43fd1c0af91f9b7b7d37f3dcd9e4c0a759748467d348a8b116df6a4eacf178aecccd3066e92dca45da7a3e319f3771eb3490022193c5b652f045687e1705f2e5691c134be4006353d7ecd0e918d5de0f3b87809fca4acfab94e1148ff7cf07f7cfd0c745dd2be01a24a5e069280698bc3f5400a6dcd08e44595c0388e44833768fc49104ee115bdcb02bfbda179d164ce969936629f2335601b56fe8f785cca3805f0403872c62f73c3ce80563d070e976d8ecc51124e2cace7ee18699047cb0f8fb8d9c59b8a60d12c08a09fce58fd92cd36db6a8e89d118cf88a92dc8a2600bd95f5a8e85db5cdbb249ca812ca209c7618051c4564a3a0e192b7e45992456c87d17412c11adead526ab8db21452f7471d17f2ebc90015450edf4f0a44fb2f4905f74d70275ccd89b93a650473c02a7da0cbc67915ceb7a1ea59fa8884472dc917ee9d246339c5926843ecf53fafdc56a695601a276c23a843e4d30f89c97c9eee6dfc7\",\n        \"signature\": \"8101baef004eb6f5ad4de0979ff36d3439b8212bdc928942e431915b3fd18bc2ad67b26f18941dcb16d2c29191421e779fed622fd9f582644eaadb3fe5c09803\"\n    },\n    {\n        \"secret_key\": \"dee6866c7874c127029e96e025bffd35fcfdf4dc36966c15ee6293368013d379\",\n        \"public_key\": \"08c94da351bb2bee72e6e196be748807583762c5296e05b1e529c47c6bbacec6\",\n        \"message\": \"f1aa1977f5311b538b940ae442a3abc89aaccdcd0a79380a24258d4a9f1ce638fc2f5ba2e53f8e1fa6176f178d9024a77894c28cad42d629c793d68a02be9411b527acadae7e5c3851babb45b5fece329e29034cd42571083727f35aecad7c9be5954ec64e8f6ecab7cc0590e54156a4e1a45303849f7897e72cf2fbcd84f56c72f941dbb0b09a32e6386fbe18a43bb9bd8b793e4b9edd532103eab54d627117d28139b64e60fb0b81d09001bb2404d925e265babdc69f96b135e9e6ab7febb1ed3075d6aa2abd2bbf9b65fa9b3b7191ef37b633605910ee88f66eada79f00f536d380b82f2f4b5985112de004a56603f4436d8ff300f42bf5acdc7a4bf1ea9d4196c480495bacb0067630fcc000b4f279dd3f30f353276092d152c3f43efdc041deaa0bc5aaaba7f8bbd85e69c13742d678dbb65360aaf7b548a044c0ec60a57af650bc31973f832f961265bc2318f80775afd51f55194c42423f7bf4e0052f98cb206913ffea4886ecd27a4179b13773f947502e181bf1a1f2c62c6f08c20359f06df2b18127043b1070d0194ef5e5bfd37d227984cfb10989f21c71ad0fe3b81227d3a71789455eda383c22f4d2fcc72579f465e066f3d38befc024efef6c2e329649ce434d627367a900d07fe6234235c84656eac5dd0d788cf4cb31871824d66ae4bc89edeba1b36701298453e8da1e69cfb868095c3be6ed2182da1cff4905afd20731ac1ed984164737903c7d8bb0ad16aecf2fae337404fe35664515d93b701e2f878664454c0decd1c6558adace3cdb227507a51606f0a54df8dfaa420205dd57c65242ff24a405ef85c92d602886932b35fabe9c3bcebfc6235639e873fc2dd084c52cd6a7413b831d1cc99931373aabd847620eb69bb0fa\",\n        \"signed\": \"b78ebd6d65b175d4bbd3d9a2082a0efe6e991cb2e403521eece00f418f2e956b66907880658b9e8e47699653d159132380d9ce1109af9c2757daf4cdf18c9c0af1aa1977f5311b538b940ae442a3abc89aaccdcd0a79380a24258d4a9f1ce638fc2f5ba2e53f8e1fa6176f178d9024a77894c28cad42d629c793d68a02be9411b527acadae7e5c3851babb45b5fece329e29034cd42571083727f35aecad7c9be5954ec64e8f6ecab7cc0590e54156a4e1a45303849f7897e72cf2fbcd84f56c72f941dbb0b09a32e6386fbe18a43bb9bd8b793e4b9edd532103eab54d627117d28139b64e60fb0b81d09001bb2404d925e265babdc69f96b135e9e6ab7febb1ed3075d6aa2abd2bbf9b65fa9b3b7191ef37b633605910ee88f66eada79f00f536d380b82f2f4b5985112de004a56603f4436d8ff300f42bf5acdc7a4bf1ea9d4196c480495bacb0067630fcc000b4f279dd3f30f353276092d152c3f43efdc041deaa0bc5aaaba7f8bbd85e69c13742d678dbb65360aaf7b548a044c0ec60a57af650bc31973f832f961265bc2318f80775afd51f55194c42423f7bf4e0052f98cb206913ffea4886ecd27a4179b13773f947502e181bf1a1f2c62c6f08c20359f06df2b18127043b1070d0194ef5e5bfd37d227984cfb10989f21c71ad0fe3b81227d3a71789455eda383c22f4d2fcc72579f465e066f3d38befc024efef6c2e329649ce434d627367a900d07fe6234235c84656eac5dd0d788cf4cb31871824d66ae4bc89edeba1b36701298453e8da1e69cfb868095c3be6ed2182da1cff4905afd20731ac1ed984164737903c7d8bb0ad16aecf2fae337404fe35664515d93b701e2f878664454c0decd1c6558adace3cdb227507a51606f0a54df8dfaa420205dd57c65242ff24a405ef85c92d602886932b35fabe9c3bcebfc6235639e873fc2dd084c52cd6a7413b831d1cc99931373aabd847620eb69bb0fa\",\n        \"signature\": \"b78ebd6d65b175d4bbd3d9a2082a0efe6e991cb2e403521eece00f418f2e956b66907880658b9e8e47699653d159132380d9ce1109af9c2757daf4cdf18c9c0a\"\n    },\n    {\n        \"secret_key\": \"523623555995baaf2a27adcb1ebafaa802d23ef7abfa9775f2c9bfa07d64e0ac\",\n        \"public_key\": \"d34deae6523e619dd1bfc8f3c4ca4b78b368c0f720035e144c3f2fc105d4ce21\",\n        \"message\": \"0553e69ef211652d62bf281bfbdd37be22769d819746361c7d65ddd0fad677cc0438b301d1514578e0da58e55f729fa8e66ddeb7f973a818d24ed8fe027b8491179d07773fb5d2bb96aa85d6b3750454e50de91f9b88aee8aa68e6bb53edc66677b41e601a46ab4bb1e656e7fa5f0179933680a6ec9504275e7adf7a3248e63a0fc9c1ea5ae96cd0c65a89a77cec2b1fd8f4537e82c1c488a69a0ef64f58734d9e73478e1d1f123114ef66085e0ba319cb810b66af96d1308b1a2bd92ba2c265aa309ecd5557d402c3802cae8d7e95007fe610c2aa75fc66196c3fadfe997d6d5998e18d260e9da31da9218cbad103cbfc2c7547765d67e81f24ac83022ef51c6cc50864366a35f6b9b9af94e84caa9fd3d767c831f0967a61462fbcfcc803f12e3739039acd5dbe9366f05a33dbeaf360e2ddcbe5c443f80ef2ad62e03c1d5b70cdeab4a7dd41553064c8d152709deff82076b9071192376f51d4c2c71a84e89f2d9401320c2e459b3e243cca7c26fd098c264ac88ef638921d980b0ae9e512d372037d81adc48126d7c9e4b5afa57ec265d401b9653e928afb7dff9b48e295e470d6b52e88b39d0a40cb8eba249f8b13d81113db1d3e01ef75c722f269488e963cc8182704f8ca018e73dc0714e9a9fc79bc4363c28cb3984374f73b2aa8786e74e0159507a29883fe0ed1c600f525885f2f10ea006c39e59b925b765b1ede534257a1f40f2846584f069746b52f5600430a2863d7936095fbc22a6ada674d41b374e2b8b9a19fa712b5944533bb6d6ec43b89d4971b70205a6acd72a899da12618204db0c3e8267b845791693e0ae6a35f14da1f8f4dd174bce0318fb5a00f672ede42304cf04a62760577590f27e2dfa6e5e2795d66053b30af7f1bf\",\n        \"signed\": \"b1871729fec83aea0aaa472b700acd094813fb7d57b909e0eaaf21ee931847addedd2be8533d0c305cb9cfe5080e76c2808b6e51c9826290ddb7b94b6f7d580b0553e69ef211652d62bf281bfbdd37be22769d819746361c7d65ddd0fad677cc0438b301d1514578e0da58e55f729fa8e66ddeb7f973a818d24ed8fe027b8491179d07773fb5d2bb96aa85d6b3750454e50de91f9b88aee8aa68e6bb53edc66677b41e601a46ab4bb1e656e7fa5f0179933680a6ec9504275e7adf7a3248e63a0fc9c1ea5ae96cd0c65a89a77cec2b1fd8f4537e82c1c488a69a0ef64f58734d9e73478e1d1f123114ef66085e0ba319cb810b66af96d1308b1a2bd92ba2c265aa309ecd5557d402c3802cae8d7e95007fe610c2aa75fc66196c3fadfe997d6d5998e18d260e9da31da9218cbad103cbfc2c7547765d67e81f24ac83022ef51c6cc50864366a35f6b9b9af94e84caa9fd3d767c831f0967a61462fbcfcc803f12e3739039acd5dbe9366f05a33dbeaf360e2ddcbe5c443f80ef2ad62e03c1d5b70cdeab4a7dd41553064c8d152709deff82076b9071192376f51d4c2c71a84e89f2d9401320c2e459b3e243cca7c26fd098c264ac88ef638921d980b0ae9e512d372037d81adc48126d7c9e4b5afa57ec265d401b9653e928afb7dff9b48e295e470d6b52e88b39d0a40cb8eba249f8b13d81113db1d3e01ef75c722f269488e963cc8182704f8ca018e73dc0714e9a9fc79bc4363c28cb3984374f73b2aa8786e74e0159507a29883fe0ed1c600f525885f2f10ea006c39e59b925b765b1ede534257a1f40f2846584f069746b52f5600430a2863d7936095fbc22a6ada674d41b374e2b8b9a19fa712b5944533bb6d6ec43b89d4971b70205a6acd72a899da12618204db0c3e8267b845791693e0ae6a35f14da1f8f4dd174bce0318fb5a00f672ede42304cf04a62760577590f27e2dfa6e5e2795d66053b30af7f1bf\",\n        \"signature\": \"b1871729fec83aea0aaa472b700acd094813fb7d57b909e0eaaf21ee931847addedd2be8533d0c305cb9cfe5080e76c2808b6e51c9826290ddb7b94b6f7d580b\"\n    },\n    {\n        \"secret_key\": \"575f8fb6c7465e92c250caeec1786224bc3eed729e463953a394c9849cba908f\",\n        \"public_key\": \"71bfa98f5bea790ff183d924e6655cea08d0aafb617f46d23a17a657f0a9b8b2\",\n        \"message\": \"2cc372e25e53a138793064610e7ef25d9d7422e18e249675a72e79167f43baf452cbacb50182faf80798cc38597a44b307a536360b0bc1030f8397b94cbf147353dd2d671cb8cab219a2d7b9eb828e9635d2eab6eb08182cb03557783fd282aaf7b471747c84acf72debe4514524f8447bafccccec0a840feca9755ff9adb60301c2f25d4e3ba621df5ad72100c45d7a4b91559c725ab56bb29830e35f5a6faf87db23001f11ffba9c0c15440302065827a7d7aaaeab7b446abce333c0d30c3eae9c9da63eb1c0391d4269b12c45b660290611ac29c91dbd80dc6ed302a4d191f2923922f032ab1ac10ca7323b5241c5751c3c004ac39eb1267aa10017ed2dac6c934a250dda8cb06d5be9f563b827bf3c8d95fd7d2a7e7cc3acbee92538bd7ddfba3ab2dc9f791fac76cdf9cd6a6923534cf3e067108f6aa03e320d954085c218038a70cc768b972e49952b9fe171ee1be2a52cd469b8d36b84ee902cd9410db2777192e90070d2e7c56cb6a45f0a839c78c219203b6f1b33cb4504c6a7996427741e6874cf45c5fa5a38765a1ebf1796ce16e63ee509612c40f088cbceffa3affbc13b75a1b9c02c61a180a7e83b17884fe0ec0f2fe57c47e73a22f753eaf50fca655ebb19896b827a3474911c67853c58b4a78fd085a23239b9737ef8a7baff11ddce5f2cae0543f8b45d144ae6918b9a75293ec78ea618cd2cd08c971301cdfa0a9275c1bf441d4c1f878a2e733ce0a33b6ecdacbbf0bdb5c3643fa45a013979cd01396962897421129a88757c0d88b5ac7e44fdbd938ba4bc37de4929d53751fbb43d4e09a80e735244acada8e6749f77787f33763c7472df52934591591fb226c503c8be61a920a7d37eb1686b62216957844c43c484e58745775553\",\n        \"signed\": \"903b484cb24bc503cdced844614073256c6d5aa45f1f9f62c7f22e5649212bc1d6ef9eaa617b6b835a6de2beff2faac83d37a4a5fc5cc3b556f56edde2651f022cc372e25e53a138793064610e7ef25d9d7422e18e249675a72e79167f43baf452cbacb50182faf80798cc38597a44b307a536360b0bc1030f8397b94cbf147353dd2d671cb8cab219a2d7b9eb828e9635d2eab6eb08182cb03557783fd282aaf7b471747c84acf72debe4514524f8447bafccccec0a840feca9755ff9adb60301c2f25d4e3ba621df5ad72100c45d7a4b91559c725ab56bb29830e35f5a6faf87db23001f11ffba9c0c15440302065827a7d7aaaeab7b446abce333c0d30c3eae9c9da63eb1c0391d4269b12c45b660290611ac29c91dbd80dc6ed302a4d191f2923922f032ab1ac10ca7323b5241c5751c3c004ac39eb1267aa10017ed2dac6c934a250dda8cb06d5be9f563b827bf3c8d95fd7d2a7e7cc3acbee92538bd7ddfba3ab2dc9f791fac76cdf9cd6a6923534cf3e067108f6aa03e320d954085c218038a70cc768b972e49952b9fe171ee1be2a52cd469b8d36b84ee902cd9410db2777192e90070d2e7c56cb6a45f0a839c78c219203b6f1b33cb4504c6a7996427741e6874cf45c5fa5a38765a1ebf1796ce16e63ee509612c40f088cbceffa3affbc13b75a1b9c02c61a180a7e83b17884fe0ec0f2fe57c47e73a22f753eaf50fca655ebb19896b827a3474911c67853c58b4a78fd085a23239b9737ef8a7baff11ddce5f2cae0543f8b45d144ae6918b9a75293ec78ea618cd2cd08c971301cdfa0a9275c1bf441d4c1f878a2e733ce0a33b6ecdacbbf0bdb5c3643fa45a013979cd01396962897421129a88757c0d88b5ac7e44fdbd938ba4bc37de4929d53751fbb43d4e09a80e735244acada8e6749f77787f33763c7472df52934591591fb226c503c8be61a920a7d37eb1686b62216957844c43c484e58745775553\",\n        \"signature\": \"903b484cb24bc503cdced844614073256c6d5aa45f1f9f62c7f22e5649212bc1d6ef9eaa617b6b835a6de2beff2faac83d37a4a5fc5cc3b556f56edde2651f02\"\n    },\n    {\n        \"secret_key\": \"03749ca20458a35a37a8d7a26f959f0d59f6dc9973fa363c1ff8ca4e638c2cd3\",\n        \"public_key\": \"eaeb94f406bde6a7cf8bde2adf3081f8375b87d9335d496c71d042cd2eaa166c\",\n        \"message\": \"eef5ceebd0445e9c9181aff9c6f2660128fcfb63691a42cfa443d6a649efc5fad8c20803763ee97d1dba08e63e08a2616da05077489f2fa2c56b7534f9402619251fdf9c320de7af109e2fd8b2565ce8a7524c9405ec0f8fcaa7149a6d210efde83b111cf82dc0835cf94f20cdb021b73bd262666555e6d62707b46ee42fa900b4f4f705de33d3dbdc68a88d1a4d0ae933566db6c6237ec8abe1024dac4b7f46d407be16594d9046c7312dda6614d9bcdb01fb8324fc62b8eeaf0abc23cd570e304fca08e88c735e5d31592409ceb583862e6b0a767729f7556fa2c053644d36c8337c0274e749202982fb4a171acac196c02b7f16a8da49071c8ab8076dd5d3abadfe3af82ca85da02dcc1c4a6f2e1930bee2009eee0d971e40dd12175c8d00694f0325a3b3133c0d0bd382a5194fb21422ce67c78a5a6e1537e3b97d5e204e5d195696390f77d19024c1bf6b5125a0cdbf7b9880036181c98e1ac2e5165bd496cf997451a1c12102e66946b1676abd4cbdd2c11673f4f2cd5f3c9a434d747fa05b40fbc72268b4eb2842e4741f51b7709b6accc47fcaf70d9c1c4c35867119d81cb3ff1f16081133f1659aed85f63bc901989e2617fcce153c2978d708fd02449ae4d538d122ddb8527c0a76a102eeff6edb65dba298d3c217f6551814eddeece1aef5f371a54f12bffd6b4961819a0f244ff0d7d8694c14422de9822c13179e4eeb81595079b9dd2ad1e7c39bd303cc44ae3f3634881577a266fd6bb7917812b999dc809dc09c3d7019dacd28e43013a2f9e4f94bb0bf7124ef091783f796397f6463bf1efb39cd46f3790a1d9b6a7c30f149b5e66c2937e39cb9744ddc66ab561bad4e6fa8534d69883822643d63d8bd7b181621a267e955e758d1792b44\",\n        \"signed\": \"78a3877e02bdfd015e7f86a327a48cc3a5230bbdb1243f1a8cf227f78ab5e7680de301a915dc11b336fb5f6566848b42500adb5d673969122ba8f0053cd3060beef5ceebd0445e9c9181aff9c6f2660128fcfb63691a42cfa443d6a649efc5fad8c20803763ee97d1dba08e63e08a2616da05077489f2fa2c56b7534f9402619251fdf9c320de7af109e2fd8b2565ce8a7524c9405ec0f8fcaa7149a6d210efde83b111cf82dc0835cf94f20cdb021b73bd262666555e6d62707b46ee42fa900b4f4f705de33d3dbdc68a88d1a4d0ae933566db6c6237ec8abe1024dac4b7f46d407be16594d9046c7312dda6614d9bcdb01fb8324fc62b8eeaf0abc23cd570e304fca08e88c735e5d31592409ceb583862e6b0a767729f7556fa2c053644d36c8337c0274e749202982fb4a171acac196c02b7f16a8da49071c8ab8076dd5d3abadfe3af82ca85da02dcc1c4a6f2e1930bee2009eee0d971e40dd12175c8d00694f0325a3b3133c0d0bd382a5194fb21422ce67c78a5a6e1537e3b97d5e204e5d195696390f77d19024c1bf6b5125a0cdbf7b9880036181c98e1ac2e5165bd496cf997451a1c12102e66946b1676abd4cbdd2c11673f4f2cd5f3c9a434d747fa05b40fbc72268b4eb2842e4741f51b7709b6accc47fcaf70d9c1c4c35867119d81cb3ff1f16081133f1659aed85f63bc901989e2617fcce153c2978d708fd02449ae4d538d122ddb8527c0a76a102eeff6edb65dba298d3c217f6551814eddeece1aef5f371a54f12bffd6b4961819a0f244ff0d7d8694c14422de9822c13179e4eeb81595079b9dd2ad1e7c39bd303cc44ae3f3634881577a266fd6bb7917812b999dc809dc09c3d7019dacd28e43013a2f9e4f94bb0bf7124ef091783f796397f6463bf1efb39cd46f3790a1d9b6a7c30f149b5e66c2937e39cb9744ddc66ab561bad4e6fa8534d69883822643d63d8bd7b181621a267e955e758d1792b44\",\n        \"signature\": \"78a3877e02bdfd015e7f86a327a48cc3a5230bbdb1243f1a8cf227f78ab5e7680de301a915dc11b336fb5f6566848b42500adb5d673969122ba8f0053cd3060b\"\n    },\n    {\n        \"secret_key\": \"53cbd6f68cee27b9f7bc059b803b447949bbc9c5d5a38652d7789ca15420dea1\",\n        \"public_key\": \"6116990b5331e2165f82743f01d8e7bd5d7088b30159833fa7b939cfb1cc04d7\",\n        \"message\": \"306f8e1df0a4ca78bd77e8e1191c94deaa82648355c2aecb7e82fc56d64c504619247e7cf8943328d11f3db4b1dc148e8ef6f6c3bc355969662a281a65576391242b7bd5a62f8fa7acb604e3a344ae1a9d732a254315f31a0464c1e6587462d29212c40e5ecf061e269aa0b90390ba41040721684bf2aa9582d83066221db60d0f7ae2f149a36e16952704fb1f3a982eac6b4583665c63e5a8996f24a566dd506a33d4ec8a02b2bd34b714c745000c0128a3c89d942506d12f4beb900e2903cdb34b35ca9b6d3ad9b350ac99f41db3acfe7fe55a28c0f006b844c9dc4853fd98535ada79416dca5fee5803a2d9f5d68e6b80539ff302e973f24e9bc88b7c4194117ddb9f932b32d5ec74868a13631ece68814b931421dc890249570341f4b423e86e8ee081b22702f649a6c7a0b7bdf5fb756202bd10b0bb2215c7d6597effd852f0b89abec15ea82257689df81e338254f93e81cbf061729d483eb5cf649805d78ed892dd0bd248ca1e252bea51847e1e82d39af58050dc4afbf9115a3a60493e8c0ba2e86e0898cd0d430891b9eb0a40f87431e25f41538a030f884fab36ad11165d267e8dd94dcb05b93a5ae77969430e1810134e157251b982df343dffae6123a99aa0562d5df72408f1a6e29c4059a5a8aaa4e621528fc63a9cbe1f4c0fef25fe3f8e18157774097a9d91020a9006b6c860ec1ee10d521d203a1f8bb82561296faad4b2203da53b207a459b29c18bc0649332b1807c13ca61acfaf90779febbc7f3242164797e6f572cb15a9be5887343455e26b910c8befee42aeb047f9abe6b3750dbd7de99202a0bb576ce1489e61c1f5d27c6792e63218edbfdb9b3dc515b4254d82c859e52ce6bd7ad296dd0e3709d4c466362f90265e99da7d0b701\",\n        \"signed\": \"d82504405ff16ba6443dc482367263a8e200360acaaa83fc4e4b72bd249f16103ec7e5a7e9ca17198f888eaca16b740cc3f5c3b7b617a34b9491c3ed76aab30d306f8e1df0a4ca78bd77e8e1191c94deaa82648355c2aecb7e82fc56d64c504619247e7cf8943328d11f3db4b1dc148e8ef6f6c3bc355969662a281a65576391242b7bd5a62f8fa7acb604e3a344ae1a9d732a254315f31a0464c1e6587462d29212c40e5ecf061e269aa0b90390ba41040721684bf2aa9582d83066221db60d0f7ae2f149a36e16952704fb1f3a982eac6b4583665c63e5a8996f24a566dd506a33d4ec8a02b2bd34b714c745000c0128a3c89d942506d12f4beb900e2903cdb34b35ca9b6d3ad9b350ac99f41db3acfe7fe55a28c0f006b844c9dc4853fd98535ada79416dca5fee5803a2d9f5d68e6b80539ff302e973f24e9bc88b7c4194117ddb9f932b32d5ec74868a13631ece68814b931421dc890249570341f4b423e86e8ee081b22702f649a6c7a0b7bdf5fb756202bd10b0bb2215c7d6597effd852f0b89abec15ea82257689df81e338254f93e81cbf061729d483eb5cf649805d78ed892dd0bd248ca1e252bea51847e1e82d39af58050dc4afbf9115a3a60493e8c0ba2e86e0898cd0d430891b9eb0a40f87431e25f41538a030f884fab36ad11165d267e8dd94dcb05b93a5ae77969430e1810134e157251b982df343dffae6123a99aa0562d5df72408f1a6e29c4059a5a8aaa4e621528fc63a9cbe1f4c0fef25fe3f8e18157774097a9d91020a9006b6c860ec1ee10d521d203a1f8bb82561296faad4b2203da53b207a459b29c18bc0649332b1807c13ca61acfaf90779febbc7f3242164797e6f572cb15a9be5887343455e26b910c8befee42aeb047f9abe6b3750dbd7de99202a0bb576ce1489e61c1f5d27c6792e63218edbfdb9b3dc515b4254d82c859e52ce6bd7ad296dd0e3709d4c466362f90265e99da7d0b701\",\n        \"signature\": \"d82504405ff16ba6443dc482367263a8e200360acaaa83fc4e4b72bd249f16103ec7e5a7e9ca17198f888eaca16b740cc3f5c3b7b617a34b9491c3ed76aab30d\"\n    },\n    {\n        \"secret_key\": \"8b6574f6d7396981e223a4837bc339c3fd659419845a2121bf85be2e695d860d\",\n        \"public_key\": \"e3811aca70634f5a9ce4b592a17bb5cfda53442422e203cda9504c9d65b263e8\",\n        \"message\": \"a48aacc0495fa0f1259b27865d3d75dc52c2c828ea8c4c2ad78577072fef7270f6a4d582bb7b962f4c3fd149a60a06bc8efd2970ef03148ddf6198b9b695a69fadb5340951cb75398ac51a4fd55430378cd5da8885210bfd2146f95c627632fe8be06de01a7c27b89deefd67efc69c9b5c62b38108f776229143dae660c10cbea3cd4f7ee53dc3692ed01177e4a6f7e424b5666f7f495f2a65602c7d08c5d572234a567cb6c38afd79cab5c4036d62637aefab5588769a448ab4c65e24554bd4158050e09eb58f99ab40777b0356709b7c025ae5ae5422acf87444931ae4d9a8b3d94476881128ba1eb7328fafc75f6b9dacc96d3b6487ddef7c59262dcada426aacb13922935411566235e058372622d885bd0cc04958dcfb17e08fcd7f147e20156c8e26af85530f5511a68db43dafc4e6a23f667df3743eedd71a3f07f76f94d1688afc8463bfa5a439ae311469948e7447064f0b0506f36719c13466a1b98776d967ec58208ba674037303dfc6190da783ff27303b86b5fc3211f01c915e83a6ad0121447911cbe1cf696f618f60236643f2e94e155db657182944c1a43bdc7bd5eaf3481fe1284092cb3789a892bd79a111fd410143cf91ae332860b1d29aa041d177b50d6cc2b9660d328c0f230a3515e6a0d688709c0cd347ad2ff32d61d1e1e9ba76f81e873a6c420f1707f3841db5196cb53f506f0006352c7c44c080f3096801a57a49cfe84205bdd7a9801f843cf26b9558a2db788ef1b237915d587b9ba9779890f61fdc91e03e4f4cdbefe417cc22d522a86adddb53f3747450ab62b576565db32e0cd44276547d9a16653c279659dd4d17ec04827c533e33390fe94f793509256db67531736ab3fcee2a301ac3f0a24d3b108d7e75c32a5aba36d6\",\n        \"signed\": \"2fd0905475a2cec3e76f9909b8afd83beb8daefa77afcda34cb4f11728ef15fc9c1d7f6f6afffc28f3874f913e17980f0e8e3d5ad23951df2b32efaf6219ce0da48aacc0495fa0f1259b27865d3d75dc52c2c828ea8c4c2ad78577072fef7270f6a4d582bb7b962f4c3fd149a60a06bc8efd2970ef03148ddf6198b9b695a69fadb5340951cb75398ac51a4fd55430378cd5da8885210bfd2146f95c627632fe8be06de01a7c27b89deefd67efc69c9b5c62b38108f776229143dae660c10cbea3cd4f7ee53dc3692ed01177e4a6f7e424b5666f7f495f2a65602c7d08c5d572234a567cb6c38afd79cab5c4036d62637aefab5588769a448ab4c65e24554bd4158050e09eb58f99ab40777b0356709b7c025ae5ae5422acf87444931ae4d9a8b3d94476881128ba1eb7328fafc75f6b9dacc96d3b6487ddef7c59262dcada426aacb13922935411566235e058372622d885bd0cc04958dcfb17e08fcd7f147e20156c8e26af85530f5511a68db43dafc4e6a23f667df3743eedd71a3f07f76f94d1688afc8463bfa5a439ae311469948e7447064f0b0506f36719c13466a1b98776d967ec58208ba674037303dfc6190da783ff27303b86b5fc3211f01c915e83a6ad0121447911cbe1cf696f618f60236643f2e94e155db657182944c1a43bdc7bd5eaf3481fe1284092cb3789a892bd79a111fd410143cf91ae332860b1d29aa041d177b50d6cc2b9660d328c0f230a3515e6a0d688709c0cd347ad2ff32d61d1e1e9ba76f81e873a6c420f1707f3841db5196cb53f506f0006352c7c44c080f3096801a57a49cfe84205bdd7a9801f843cf26b9558a2db788ef1b237915d587b9ba9779890f61fdc91e03e4f4cdbefe417cc22d522a86adddb53f3747450ab62b576565db32e0cd44276547d9a16653c279659dd4d17ec04827c533e33390fe94f793509256db67531736ab3fcee2a301ac3f0a24d3b108d7e75c32a5aba36d6\",\n        \"signature\": \"2fd0905475a2cec3e76f9909b8afd83beb8daefa77afcda34cb4f11728ef15fc9c1d7f6f6afffc28f3874f913e17980f0e8e3d5ad23951df2b32efaf6219ce0d\"\n    },\n    {\n        \"secret_key\": \"29b2881b8caadb336e7880c510b80085f4b1221860b301eb4525650752a6d289\",\n        \"public_key\": \"0c5c44ed29d21bcadee21cbde61a9cdb6d5936009ba2f5b2e777c924ddfb6751\",\n        \"message\": \"1974a2e2b47949f467a931d1d9dd5ce116e9f5030ad09a8cc728d1aeb148bbf9acf59874da80e708d53c668f2f14d7522071e909808427b2ab5a05f8b94f21505cd26abc53458978c784d479ea6dab105c4f7984a0fb9790e50624f4734b551905aa5ffa60184cd201cf2b26c9795da6e7e08d6a0bc7722400fef94fc21038be89d34bcd14c427b85b6866737196152d4eeb66d05b245ae84bdc7787c14a8bec2eea5360f042433d70794467d47393b93757f331cf2b53c660d71c29582aeea79b12527a28b0c5e110df6f854eead9a2b00d42542ca8276bb8bf988baab8565996fee50cf31b2459c4c50ab475265e83e2285d43fe1f752a55b2dbc49fca04a810f0413bf6bd81b79ac64ee1f89b97bd7d26d62512273e24a6bab2d5f7d2226baaab7b111209bb03733d8a60dfa31a516f4a8c7699d8285c1065159a6c7331c1defb47a30ef5858c50b7d045124a09813d1cfda5c9cc3bb5bfae73c984197f8f857f186c41ab87fb7962b631f4d007cfbee221fc6572784a551194c19777b08e6b596757e7cba7a0e27fe453f90dc59cc08c6472431c020e8dd0917590e79c1f207383afb39076ad24da8ee52486739453a2590e51bfc89b13c2033cfa5f8903cbe9961a8598ba556232869dfab4d56edf4f05e8b77d05871895e63b5351f76cb2d2c8385c109d7306192a25446e4d62dc7d624f0c6673986be0628b2c2d73eb941d35a3433090f59b28a5979d56dbc9fd6973f63647642cd903b0cf7a6acd330d87e2292710de99e0c179ca78929ccaecfaedbf2742414f176b6090c0d59a9db781c9967e28fa4e77d2a082e42f52169167e92d4fdd82e2cc05dd9184c7dfee490a237fdad4dfebc01868e0a4353a2954d090928461821a7a848d1b60817fc3bdefa1\",\n        \"signed\": \"99e996e85a494f1980cb07de9ca6165e7de104d39fe3c3226735c5daa569516fcaf1b6e4dfad0d389b6db0ec8a8f20dd2c602656b5e761c8f3a65583821519091974a2e2b47949f467a931d1d9dd5ce116e9f5030ad09a8cc728d1aeb148bbf9acf59874da80e708d53c668f2f14d7522071e909808427b2ab5a05f8b94f21505cd26abc53458978c784d479ea6dab105c4f7984a0fb9790e50624f4734b551905aa5ffa60184cd201cf2b26c9795da6e7e08d6a0bc7722400fef94fc21038be89d34bcd14c427b85b6866737196152d4eeb66d05b245ae84bdc7787c14a8bec2eea5360f042433d70794467d47393b93757f331cf2b53c660d71c29582aeea79b12527a28b0c5e110df6f854eead9a2b00d42542ca8276bb8bf988baab8565996fee50cf31b2459c4c50ab475265e83e2285d43fe1f752a55b2dbc49fca04a810f0413bf6bd81b79ac64ee1f89b97bd7d26d62512273e24a6bab2d5f7d2226baaab7b111209bb03733d8a60dfa31a516f4a8c7699d8285c1065159a6c7331c1defb47a30ef5858c50b7d045124a09813d1cfda5c9cc3bb5bfae73c984197f8f857f186c41ab87fb7962b631f4d007cfbee221fc6572784a551194c19777b08e6b596757e7cba7a0e27fe453f90dc59cc08c6472431c020e8dd0917590e79c1f207383afb39076ad24da8ee52486739453a2590e51bfc89b13c2033cfa5f8903cbe9961a8598ba556232869dfab4d56edf4f05e8b77d05871895e63b5351f76cb2d2c8385c109d7306192a25446e4d62dc7d624f0c6673986be0628b2c2d73eb941d35a3433090f59b28a5979d56dbc9fd6973f63647642cd903b0cf7a6acd330d87e2292710de99e0c179ca78929ccaecfaedbf2742414f176b6090c0d59a9db781c9967e28fa4e77d2a082e42f52169167e92d4fdd82e2cc05dd9184c7dfee490a237fdad4dfebc01868e0a4353a2954d090928461821a7a848d1b60817fc3bdefa1\",\n        \"signature\": \"99e996e85a494f1980cb07de9ca6165e7de104d39fe3c3226735c5daa569516fcaf1b6e4dfad0d389b6db0ec8a8f20dd2c602656b5e761c8f3a6558382151909\"\n    },\n    {\n        \"secret_key\": \"42afe89dac83e7d38996c0dbce0c9874c00927babd77ca8ceac34e564474282b\",\n        \"public_key\": \"a4c5f5e3803f0a03d5c1c906caec9cc6d2851407f1ca29f72a45f233e6656244\",\n        \"message\": \"e710a163ad2885aeb7658eb374f118b76842ec36ef3b010c3c6b9559e8b160c2628ded0b8511eb4907180da4b621e9aa4a322288888a1c09130f69f890597a9293e74f9289bdaa5c91b6fd24aa044ab9fcb3402f7abc48d2ab7b3880a048daa448645ad2ecb55b3caee2d68a8bedb5d1865d5e211de39b0eaf22e5daf10f7168203aa15b85aa47bbd3cc4169cbc1fe80b4700b625871edabcd4fe74a3e965569ce245cfcde4209cc8abcd6797d44185b4f96c0181bbd27008783e9358a5394fe3a34a06871d379da35b20bb57eef9e5524ee7912a6f41b4a1f684c3919cfcdc00f4580baf9e09d316cefa0f465dca5d8eec514e95e5a57bbcd27e41f8119b264ae14a319d8c3859babf1f4a6b6b77e442c861d6ee28ad12b82362e90db0c3672b0e0d9ff58146fd159aa8fa99dc755fc85b90cf9419279c0624b93e75eda0ef7c09695ae93bd7282419377b76ca8bdc0521cfee6f6d729c3adff894687b177ef19529a6bdace70b685c6d7a5d74a08e2a9e724035975c80d18cb369470de7299cbd6b0a27c9232c7eabac86d5093a65ffe0b40d40befe80b68cd9dce1ea1e657e45e9c499d0b690f74455fb47096ed8c18d1517f90442901a6c410b7f6415f20ae48c58ade8d675b6c058df16ae7698fceae95aa771b4cd88a0b3f22c51f98c71c1eb46b264bf97a300ecb1fd26226ad8e87a058cf3e708e260f566b685314045133f4a5e8fbc34561b9a0f1ff9339f55231076b736b6e11524319a272bd4453a0af1493daa09167e84643d207a02fee98fb223b01a99aa5cef2b7001e470f6f94a5dc208edfc0cb8cf3114a919600f061172f0efe039036bf4dddbfd0d45f91443bf26f8e15ed7db8e55f086a4a4583f4bda0f556284dcf71292fe70fcaa8259b9faff3\",\n        \"signed\": \"4fba2d6cc1b7193d3562f8c8bfe6905c829db265a5427c5c265714785b83f69514c5e30e28b56684c82dae2637581bf3f4ef271420bc7e6010613a38fa101a0de710a163ad2885aeb7658eb374f118b76842ec36ef3b010c3c6b9559e8b160c2628ded0b8511eb4907180da4b621e9aa4a322288888a1c09130f69f890597a9293e74f9289bdaa5c91b6fd24aa044ab9fcb3402f7abc48d2ab7b3880a048daa448645ad2ecb55b3caee2d68a8bedb5d1865d5e211de39b0eaf22e5daf10f7168203aa15b85aa47bbd3cc4169cbc1fe80b4700b625871edabcd4fe74a3e965569ce245cfcde4209cc8abcd6797d44185b4f96c0181bbd27008783e9358a5394fe3a34a06871d379da35b20bb57eef9e5524ee7912a6f41b4a1f684c3919cfcdc00f4580baf9e09d316cefa0f465dca5d8eec514e95e5a57bbcd27e41f8119b264ae14a319d8c3859babf1f4a6b6b77e442c861d6ee28ad12b82362e90db0c3672b0e0d9ff58146fd159aa8fa99dc755fc85b90cf9419279c0624b93e75eda0ef7c09695ae93bd7282419377b76ca8bdc0521cfee6f6d729c3adff894687b177ef19529a6bdace70b685c6d7a5d74a08e2a9e724035975c80d18cb369470de7299cbd6b0a27c9232c7eabac86d5093a65ffe0b40d40befe80b68cd9dce1ea1e657e45e9c499d0b690f74455fb47096ed8c18d1517f90442901a6c410b7f6415f20ae48c58ade8d675b6c058df16ae7698fceae95aa771b4cd88a0b3f22c51f98c71c1eb46b264bf97a300ecb1fd26226ad8e87a058cf3e708e260f566b685314045133f4a5e8fbc34561b9a0f1ff9339f55231076b736b6e11524319a272bd4453a0af1493daa09167e84643d207a02fee98fb223b01a99aa5cef2b7001e470f6f94a5dc208edfc0cb8cf3114a919600f061172f0efe039036bf4dddbfd0d45f91443bf26f8e15ed7db8e55f086a4a4583f4bda0f556284dcf71292fe70fcaa8259b9faff3\",\n        \"signature\": \"4fba2d6cc1b7193d3562f8c8bfe6905c829db265a5427c5c265714785b83f69514c5e30e28b56684c82dae2637581bf3f4ef271420bc7e6010613a38fa101a0d\"\n    },\n    {\n        \"secret_key\": \"10f009aa887d91ced809afe192d78e4799d9037762f4a9d3a429fde0f39f7b7a\",\n        \"public_key\": \"cf5116b921212e9b78829a0263463691c6fbccdc0c118be141c96f8c88053dd3\",\n        \"message\": \"2edf14d6cd56896eeaa770211c4984bed80eca8d6534d5d510884f55f11f99ffa9f89b586ffe7b1ec7eaab6a9dc1a24a3ee3c7a6ab44ade9917883264ede2f1361be7d7a3817f29dec9581c319f18f95d5be26d9118be678340037a68abfc5efbb9a3f3f3878aae3721ffef5bb6a26c7b1a3a56d2bda6c6e860eb41fd8d8371174d91c74c5eb67c3855c630d641d2e571a9a51c6402cfe1842cef38980cb8d0a64bcc89be3189e6811f47e8f4d0063a5b1601f44fda20c1c4c2fc49cbe27a4137dc4638c2ad2d0a5474747229c568e3805431fa36eeba785f7b97844b5e319fa6a09cc5ae8403474bb91dd896c1ec2bac73d2e505efc62bd502b5ceb08d16e832ec5dc4f98b51b9d0738b9fb28f3abe8966bf22375a0b22c471a9e58e3fd700de15c5296373c1bc9d4640eb7816e1dc9c8ce8619a81183009ec974871e8f0a9772ede0a638b3574bf75d8f55987f3cfa6fec68970bfe00b23b59fb5bf4996ea5d7704fcf2effcc0fd7f3d8e6056008097f26caffd5415a282a276a9b2645e5cab12968872eb052f4d7c10cc7c21d5161818bb44cc856b0de769d559c55df64ad9adc16c0ac65838f660da81386b70b93525ec2f40f6f63f8ea5d4830b9646c46183bb4e6f27047bda2a546bd34bd4db5fb88fd8ab7c75f652e15d5aaa6b46a8acf6e448bf2dd64dee3c105647c7f83ad200d8097c444a158d85a54f0e5dbb12b43de943af1a81856ac969f52a0bd454381bd265041a2691d1a4a0d819fa79092c8803521fa53689ab852f1fbabe00c94b7f682d121cff54391322529c8d5ad7bbb98eafe300ab922f1c89240a1e633cf56a7b02f74a29214e569a057bd585e404d7cd5352041456e6cf90c15342e025670f4fccdf98783b6853214cac3fa808a66c27b653c\",\n        \"signed\": \"c37bb7b73b1105be086ff3076972077262df4d7332f608c7b2b9d978d474cbbc271046080035f396ee36479b7a6711c68e2561c741c0ec5fc9eca1734e811f042edf14d6cd56896eeaa770211c4984bed80eca8d6534d5d510884f55f11f99ffa9f89b586ffe7b1ec7eaab6a9dc1a24a3ee3c7a6ab44ade9917883264ede2f1361be7d7a3817f29dec9581c319f18f95d5be26d9118be678340037a68abfc5efbb9a3f3f3878aae3721ffef5bb6a26c7b1a3a56d2bda6c6e860eb41fd8d8371174d91c74c5eb67c3855c630d641d2e571a9a51c6402cfe1842cef38980cb8d0a64bcc89be3189e6811f47e8f4d0063a5b1601f44fda20c1c4c2fc49cbe27a4137dc4638c2ad2d0a5474747229c568e3805431fa36eeba785f7b97844b5e319fa6a09cc5ae8403474bb91dd896c1ec2bac73d2e505efc62bd502b5ceb08d16e832ec5dc4f98b51b9d0738b9fb28f3abe8966bf22375a0b22c471a9e58e3fd700de15c5296373c1bc9d4640eb7816e1dc9c8ce8619a81183009ec974871e8f0a9772ede0a638b3574bf75d8f55987f3cfa6fec68970bfe00b23b59fb5bf4996ea5d7704fcf2effcc0fd7f3d8e6056008097f26caffd5415a282a276a9b2645e5cab12968872eb052f4d7c10cc7c21d5161818bb44cc856b0de769d559c55df64ad9adc16c0ac65838f660da81386b70b93525ec2f40f6f63f8ea5d4830b9646c46183bb4e6f27047bda2a546bd34bd4db5fb88fd8ab7c75f652e15d5aaa6b46a8acf6e448bf2dd64dee3c105647c7f83ad200d8097c444a158d85a54f0e5dbb12b43de943af1a81856ac969f52a0bd454381bd265041a2691d1a4a0d819fa79092c8803521fa53689ab852f1fbabe00c94b7f682d121cff54391322529c8d5ad7bbb98eafe300ab922f1c89240a1e633cf56a7b02f74a29214e569a057bd585e404d7cd5352041456e6cf90c15342e025670f4fccdf98783b6853214cac3fa808a66c27b653c\",\n        \"signature\": \"c37bb7b73b1105be086ff3076972077262df4d7332f608c7b2b9d978d474cbbc271046080035f396ee36479b7a6711c68e2561c741c0ec5fc9eca1734e811f04\"\n    },\n    {\n        \"secret_key\": \"4578c65a7ca48f2774050a7b0ce7a4fd5ad4e696b2b8af2396164a1c7e1b7bd7\",\n        \"public_key\": \"15bf9dbd3b8173e6f03dcfd575d909845f038eaa09c5d908fef908a97458b3ef\",\n        \"message\": \"506f32b96814243e4dd8870a8fd60ddef09bb8c563151070d9bcb2b160a3eabd71a044d71ec93fba95288ed6fe1a7b921651604307d65a45ec5d3f2631ace40e58d53c72e526886e16972f6e0db94d57b55634fd39d55e9bb7f212afab00f7746409267e8d565ff5c2257333c3d04152174fe12de6a57bea057dc219e2fba5f191ed8141c018969de19472d6aaf763f19ec554702bb3dcbe13ca9b23b2418c99e71838a88cf454728cf9208a16c84ea39829b4ba9b4c77e176112bfe1bf35f95c4028c7db80b36faa29d2b89e9e862f31000065f139b3da77d9d868530574b7e391ed97b34f878164f6b8d87b406c7dc7860a5175f920e5a62dc1fc82ed8452543b107360d35d2b4c4239eab466d32bfda34f51037a6fae76f6d8b83e8f7f489dd4c1b49c38f53576e62172c17dee3665fde8cbf015af9665b0f1da2fb77b134f04be271e402f31537c2fc05c2f9b6fc3ffe47de3369133867c69d10e7f537bae4567d468e0f2ed806fe335f939c75994f363ce3b70daa7d5bd2317c833851fd8cc97251ec419023d9d0174d84d5609a6918a1740eb1e309bd127366deb9c5ab12992e9902e015fe58d6adbf52d22a760acd63e1edd8f138e9fb0137188601e1978e7d04fb2ada2b2aee12f49f2836c6842d88cf48c866e3d33fcd269c275c89c25e3669ca90de7b67a7e7a382cb7efa47e9c2bf76571c79a25085ef020487152f06bfa133015a1b8f1c0f6a9f0eae1ba62bf104f1c16ac14e1e96c4ebdf061e0cc7101d38da7e9e0994daf0f322aa3cfef91b616c2d000689ab18ed45268dcd275094f656ba3cf515261024741f7444ab7fc4decce16756032a1be270ff0b0317542ba02662260a376fc912cbb029cac54515f5a551364f6a99ffad0b9cbcd0e693b7a521cb\",\n        \"signed\": \"a1c242b45e94fd180f054c7101e55b396568f483db6f0dfc4168b69b59d385814c19eb3075237d1fbb1feebbfea50c56813c8c39c22752e02db7e57f3e3fbf0d506f32b96814243e4dd8870a8fd60ddef09bb8c563151070d9bcb2b160a3eabd71a044d71ec93fba95288ed6fe1a7b921651604307d65a45ec5d3f2631ace40e58d53c72e526886e16972f6e0db94d57b55634fd39d55e9bb7f212afab00f7746409267e8d565ff5c2257333c3d04152174fe12de6a57bea057dc219e2fba5f191ed8141c018969de19472d6aaf763f19ec554702bb3dcbe13ca9b23b2418c99e71838a88cf454728cf9208a16c84ea39829b4ba9b4c77e176112bfe1bf35f95c4028c7db80b36faa29d2b89e9e862f31000065f139b3da77d9d868530574b7e391ed97b34f878164f6b8d87b406c7dc7860a5175f920e5a62dc1fc82ed8452543b107360d35d2b4c4239eab466d32bfda34f51037a6fae76f6d8b83e8f7f489dd4c1b49c38f53576e62172c17dee3665fde8cbf015af9665b0f1da2fb77b134f04be271e402f31537c2fc05c2f9b6fc3ffe47de3369133867c69d10e7f537bae4567d468e0f2ed806fe335f939c75994f363ce3b70daa7d5bd2317c833851fd8cc97251ec419023d9d0174d84d5609a6918a1740eb1e309bd127366deb9c5ab12992e9902e015fe58d6adbf52d22a760acd63e1edd8f138e9fb0137188601e1978e7d04fb2ada2b2aee12f49f2836c6842d88cf48c866e3d33fcd269c275c89c25e3669ca90de7b67a7e7a382cb7efa47e9c2bf76571c79a25085ef020487152f06bfa133015a1b8f1c0f6a9f0eae1ba62bf104f1c16ac14e1e96c4ebdf061e0cc7101d38da7e9e0994daf0f322aa3cfef91b616c2d000689ab18ed45268dcd275094f656ba3cf515261024741f7444ab7fc4decce16756032a1be270ff0b0317542ba02662260a376fc912cbb029cac54515f5a551364f6a99ffad0b9cbcd0e693b7a521cb\",\n        \"signature\": \"a1c242b45e94fd180f054c7101e55b396568f483db6f0dfc4168b69b59d385814c19eb3075237d1fbb1feebbfea50c56813c8c39c22752e02db7e57f3e3fbf0d\"\n    },\n    {\n        \"secret_key\": \"c21e70c46ede66e68a8873bbc64ba51209303a0ac4fc49b1d83e8193ad46c037\",\n        \"public_key\": \"9fbf80a42505d2c952f89f4558c3e6d187a7bc1ef446b2e3732343c13b33d200\",\n        \"message\": \"f55aa570ce4fc95f73f51720d254e4695fcdc81aaa040130c7687f039b8ba59ed857ceb29c121025a857feacb4a01f38e01178310ae6e35c998ebf89dd79057b4afc6db340601c81703c87a8c40e5cebb0441df78a6de13a447cb016c65e741bb7df304d83056b72c682c731fac0a0c70b7811ca14a50154613099c2c437521c404b6361de3621f8ea56b08ebfdb07b4f2bb8ba2ecc164336da8efc942766ef0c74dfd3b49e087e9a27ae54a7a2b98281b9af93dc11aa2f09224ab5a730f0218f4a6e1ea4885a77fbd93a1c58277d9e01be73a25cda918fc27dddb453a5da6902ad02ba05775c67e07bea4df86913466744365c1326e0ab5e1254c17967447d591ba5ed1b63a42543b87fed41459a089bceaff219802a87a872a763e692333ce1cc7397825084b2b831e93d80d6737f32980f2f3ae82c62190fe3fa700c5b7329d6d50042bdf831f37548fcc80b11f57cf20f67a3bb651a7beffcc48b70d17eb60f7259cc53bf7ff6080eb2bd0923b0483aa3065a8955f01d23ba80951e0aefd2a9372191572bc52916aa22a2aec393767fafd086839e236fe0460ce6d639c7ce69fe7f9d3aad2130573443570443be6bab93a06a54b8ac29bf33ff9949bc92158e6924b6b68ecda5f6f3aaf42b3d22df6d5e67d5cb3ab71eb8ee0b0e66732e1daca6cd60d9aa74305fcd570076d228d446d5ee542b10488bf8aa988f451faebe74ab669d604d9ddb15106620ea02e8db38ce639b5747812bb9048ee8bf72b1a951a05dffac95417cb43b06dce61ee3da6f2832ee83b2e7288ddd62eeb5893f7f2f6c8090d99e336c9f9069e1815985841bdd505b5f83d895e879593dadee72ceb9765699bf80bd06a5c55331b2545527d0c7caece96584ce3ec7fe02260f20b8a1c0635763ff4\",\n        \"signed\": \"0ae343bb84e3a299078e2434ba220022f3160f968ac04482bf8cad13b423f2670f01fb5f7b32c597520f84607e0f79c075fa7078e6e69d3cec319265d466080bf55aa570ce4fc95f73f51720d254e4695fcdc81aaa040130c7687f039b8ba59ed857ceb29c121025a857feacb4a01f38e01178310ae6e35c998ebf89dd79057b4afc6db340601c81703c87a8c40e5cebb0441df78a6de13a447cb016c65e741bb7df304d83056b72c682c731fac0a0c70b7811ca14a50154613099c2c437521c404b6361de3621f8ea56b08ebfdb07b4f2bb8ba2ecc164336da8efc942766ef0c74dfd3b49e087e9a27ae54a7a2b98281b9af93dc11aa2f09224ab5a730f0218f4a6e1ea4885a77fbd93a1c58277d9e01be73a25cda918fc27dddb453a5da6902ad02ba05775c67e07bea4df86913466744365c1326e0ab5e1254c17967447d591ba5ed1b63a42543b87fed41459a089bceaff219802a87a872a763e692333ce1cc7397825084b2b831e93d80d6737f32980f2f3ae82c62190fe3fa700c5b7329d6d50042bdf831f37548fcc80b11f57cf20f67a3bb651a7beffcc48b70d17eb60f7259cc53bf7ff6080eb2bd0923b0483aa3065a8955f01d23ba80951e0aefd2a9372191572bc52916aa22a2aec393767fafd086839e236fe0460ce6d639c7ce69fe7f9d3aad2130573443570443be6bab93a06a54b8ac29bf33ff9949bc92158e6924b6b68ecda5f6f3aaf42b3d22df6d5e67d5cb3ab71eb8ee0b0e66732e1daca6cd60d9aa74305fcd570076d228d446d5ee542b10488bf8aa988f451faebe74ab669d604d9ddb15106620ea02e8db38ce639b5747812bb9048ee8bf72b1a951a05dffac95417cb43b06dce61ee3da6f2832ee83b2e7288ddd62eeb5893f7f2f6c8090d99e336c9f9069e1815985841bdd505b5f83d895e879593dadee72ceb9765699bf80bd06a5c55331b2545527d0c7caece96584ce3ec7fe02260f20b8a1c0635763ff4\",\n        \"signature\": \"0ae343bb84e3a299078e2434ba220022f3160f968ac04482bf8cad13b423f2670f01fb5f7b32c597520f84607e0f79c075fa7078e6e69d3cec319265d466080b\"\n    },\n    {\n        \"secret_key\": \"f2c10577f7df77f0c1157a8c331a7bd2ae6386670eb65f0fae122331690f828a\",\n        \"public_key\": \"0d4c340fc231aafb3b6f74b89bcef7eeaa0b04f293ec8544247bfc3f2d57c1e0\",\n        \"message\": \"38ea1e028a493d1c60ec70749f14d436eb3a2b2de54f213d01a645b580430ecd8ece6b5569cc017a4943e5595c5ed6e48c9443f2fa5eb2227ffe56d211f269bc8f6fa9ee8cd56f6b8470539208afe29ab0a195044d957b31f93e184a9cbef1a14e14f808bbf589ac7770084f998e1b254da59ca6d3e62e7be1790716d2560f015f399cbbce48cfd0391ead1993446f6b2493977d93d7b09a07a79a59ce15dce7a1da9c646f45af2ccad55ba158e638c4a30c5d30e9ac6e3a3339c243426d86491b2d92dac1478e8d74ff0bf149bdb5e09e3fb6b8262eb0687981554ae2cb47196339079da0a1a57239c19bf781f62fdaf4e31560a84317ef030492cf1bb1305ba8518ebaf2b434d3641672c8f6ea2defa696dc7e4f39efc08d288d1c966a6c7148c012eec439f7e12dbab5b87cfa44c9ae1900f8386f24444e1092b23a274c138e95c661e9377e8ad2d1fcaf1939ec9a632a873f7eadbe687b4a033b92a477f2e02e9ed92ce4f95cf170b3901518a062143e56db054df4e4431544785a6dfa24eec0f0de7a699ccf286dadfad85903612250764f25cdea8127d0078d554825ea6e7371c438bc46f29fb8937f8d9a39cf8849052d43ecbff6c4a3762a5f400c1514e85e91384fef9b40f4314e223a9d68c526acc70227d62b8b637a342df113d318202c51edd3c1efd1ff20b1ff078b32068e794d928133037f1e3a34689e629e43fd2b8e88eab50d7e7ab0647014ab5e4ad582006567eff72b5af2dac536892ccc871f8a80b5cb79d90bcc6b77d4cd08f876184ef58c064ae430bb79a6b9e96b0ad87368aa838a8dccffac0cd8ce9ea0d0ec4c4b0f42673416659c984992cf53b1e445431007640d47ece26dee4a2943aa7097dd356cff4754f21ac07f6b3f73c469055512f37aba\",\n        \"signed\": \"60b703115a322ab892c276bfd18f70a9eb0c7323e2c0a6eb5fc7e330b0bc3b07a578a082846264f032c6191d040bd98e5d5a4d4f076fb9062acd36bea40c910238ea1e028a493d1c60ec70749f14d436eb3a2b2de54f213d01a645b580430ecd8ece6b5569cc017a4943e5595c5ed6e48c9443f2fa5eb2227ffe56d211f269bc8f6fa9ee8cd56f6b8470539208afe29ab0a195044d957b31f93e184a9cbef1a14e14f808bbf589ac7770084f998e1b254da59ca6d3e62e7be1790716d2560f015f399cbbce48cfd0391ead1993446f6b2493977d93d7b09a07a79a59ce15dce7a1da9c646f45af2ccad55ba158e638c4a30c5d30e9ac6e3a3339c243426d86491b2d92dac1478e8d74ff0bf149bdb5e09e3fb6b8262eb0687981554ae2cb47196339079da0a1a57239c19bf781f62fdaf4e31560a84317ef030492cf1bb1305ba8518ebaf2b434d3641672c8f6ea2defa696dc7e4f39efc08d288d1c966a6c7148c012eec439f7e12dbab5b87cfa44c9ae1900f8386f24444e1092b23a274c138e95c661e9377e8ad2d1fcaf1939ec9a632a873f7eadbe687b4a033b92a477f2e02e9ed92ce4f95cf170b3901518a062143e56db054df4e4431544785a6dfa24eec0f0de7a699ccf286dadfad85903612250764f25cdea8127d0078d554825ea6e7371c438bc46f29fb8937f8d9a39cf8849052d43ecbff6c4a3762a5f400c1514e85e91384fef9b40f4314e223a9d68c526acc70227d62b8b637a342df113d318202c51edd3c1efd1ff20b1ff078b32068e794d928133037f1e3a34689e629e43fd2b8e88eab50d7e7ab0647014ab5e4ad582006567eff72b5af2dac536892ccc871f8a80b5cb79d90bcc6b77d4cd08f876184ef58c064ae430bb79a6b9e96b0ad87368aa838a8dccffac0cd8ce9ea0d0ec4c4b0f42673416659c984992cf53b1e445431007640d47ece26dee4a2943aa7097dd356cff4754f21ac07f6b3f73c469055512f37aba\",\n        \"signature\": \"60b703115a322ab892c276bfd18f70a9eb0c7323e2c0a6eb5fc7e330b0bc3b07a578a082846264f032c6191d040bd98e5d5a4d4f076fb9062acd36bea40c9102\"\n    },\n    {\n        \"secret_key\": \"041a97906b5956b9d340f2e0d7a1dcbfefe663e9bb4026f8cc1ae7e2a14de27e\",\n        \"public_key\": \"f382d32e88c3a72c7caddafcf8aa699e21db7a6bf4edd6e49a005aad702e6a79\",\n        \"message\": \"71a75957411544975a48cf103aa1f8e2ad15244459cdc0e336966eb8b26c97f2169e5d78537037efc077e86f06e05e9c1dc3418288c0a2be6ba34b3a04ab20bae7f3621094b87d78a7eacb864d4078cb4efcbac5add937a2c6012ee1a8b256cc276b65d5e92b4d00b9b11fad884991dec4c1cb9dce1863c8b0a210161ae6b3f8bf9cc4dce4adfdc8ed57d83e95ab9dd2d92658dfbd3afa99e3f8951e2ad74a148f6f597eb2c945c1f1b94461ae0745481fd0edf838c6286035e36f011238875dbba2289d3d6a3942a7f9554c644305244ddb77c117cb4b56237729dde428b8bb42df9ce29e144dfc96cf6c6767b1ee6d053ce4f8bb2056ab7810aa1368a8910f2f69e061c19d8847184fed534f98758d703a76885f91eb752a21954a10c6f6b4da10464ded36b00089f662915421bfdad496753689ccd03b624021080761e68176b10697dac878e4c3db2fd0b28c655335d98016f19f265bb0b2434cb4637844d91ed0ce05ed2591fd998965f83f3197d10eef448850e792032724701da305cb6d794669483fc3dc6f686b183e2999130c8fc0058dcabbc9188f26b2d63ebd6cb1e18a097c7704a59b5e187e0142593b7083f7400afa9b1bf0c1cc6c356bc4334af772e67153b45b331b990920c24eede2c6e323703f52ecd60735b23bf22b81ee775927c37e53dad7596ea65a73bb96775f3b87c8b3c088ec695bc3a7502c0c510f020bf9aca3cbb7a2c011c67ff27d634caf1dcfc58e5e397e6658252272011c8ffdd64230a93241fff68372c4ba85382bbb229309652922db68836631e55be69ab6adb8e4335357fc923efe154afcc222d60d07f56990a3e5a214b227aecff2cd1bb6f0c79ff545f70a616141a9d53f922a02443f7d2a4689c35b095dd394d50bf49f9680a5f7d9\",\n        \"signed\": \"a23f032e6692a0e8bfee5b2d30b414cb16c35ad08da31f696d461a02857822c4ef357f0ccf31025a4dc95ced30a994f41edd1d087afcaaf3e8e875708320f80c71a75957411544975a48cf103aa1f8e2ad15244459cdc0e336966eb8b26c97f2169e5d78537037efc077e86f06e05e9c1dc3418288c0a2be6ba34b3a04ab20bae7f3621094b87d78a7eacb864d4078cb4efcbac5add937a2c6012ee1a8b256cc276b65d5e92b4d00b9b11fad884991dec4c1cb9dce1863c8b0a210161ae6b3f8bf9cc4dce4adfdc8ed57d83e95ab9dd2d92658dfbd3afa99e3f8951e2ad74a148f6f597eb2c945c1f1b94461ae0745481fd0edf838c6286035e36f011238875dbba2289d3d6a3942a7f9554c644305244ddb77c117cb4b56237729dde428b8bb42df9ce29e144dfc96cf6c6767b1ee6d053ce4f8bb2056ab7810aa1368a8910f2f69e061c19d8847184fed534f98758d703a76885f91eb752a21954a10c6f6b4da10464ded36b00089f662915421bfdad496753689ccd03b624021080761e68176b10697dac878e4c3db2fd0b28c655335d98016f19f265bb0b2434cb4637844d91ed0ce05ed2591fd998965f83f3197d10eef448850e792032724701da305cb6d794669483fc3dc6f686b183e2999130c8fc0058dcabbc9188f26b2d63ebd6cb1e18a097c7704a59b5e187e0142593b7083f7400afa9b1bf0c1cc6c356bc4334af772e67153b45b331b990920c24eede2c6e323703f52ecd60735b23bf22b81ee775927c37e53dad7596ea65a73bb96775f3b87c8b3c088ec695bc3a7502c0c510f020bf9aca3cbb7a2c011c67ff27d634caf1dcfc58e5e397e6658252272011c8ffdd64230a93241fff68372c4ba85382bbb229309652922db68836631e55be69ab6adb8e4335357fc923efe154afcc222d60d07f56990a3e5a214b227aecff2cd1bb6f0c79ff545f70a616141a9d53f922a02443f7d2a4689c35b095dd394d50bf49f9680a5f7d9\",\n        \"signature\": \"a23f032e6692a0e8bfee5b2d30b414cb16c35ad08da31f696d461a02857822c4ef357f0ccf31025a4dc95ced30a994f41edd1d087afcaaf3e8e875708320f80c\"\n    },\n    {\n        \"secret_key\": \"4bc5e05aa003a4492f4bad102a5390f7cebab3d3eca9152142ad5ef7d84030ae\",\n        \"public_key\": \"6751d3ad8bb6c64d6a17d7e447a27da22f5f0403f437bac9449f13cc853dd840\",\n        \"message\": \"a8f794db1795667d28d24b70ac2200a6239a34e2438ced1d03f97ed48beb4d6bea67c14338f7736419dcd2a2a7973726572e6afe7edfef22c99be8b069f04f6dc61a13b343c6e585abad2214d85c36f02996fabb46bb91b5176ac708e49a0b053017048fbb55453f2b8208d6678d1a8cf6a1ee9ad7a91e380325635d1e236a6ca1d6cc7f6b59f2a2bf184f5ee451d6799f69ba11a0cd6bc04be8a351a80e725b5fc4563e45bd4749ecbc45205229105b9de73261498527f3d4ecfbb583ff532753d07c38526bb482d171a261b9cf89906a7dea8cbd7e726ba31ea68803a6b004f6dcd19e671950463738cca78bb0dffa3d6457e4aeca657ec649b97ee30e97c8cbe6ce43c2aa9a69958e9dc881e4aa7b3278074e787ace5fb601d7faf7ca5103ecbbd3bd554eb1b066f8296d2cc57e8c8a32e9c0e6a926964d6df2d8645864b322c322f1ca8073cedf2b556711a7a20b77c0a1ed277a9a6ca2c07154e863fef5a404e3e89f0d7f30f218ec4de7a53aeb9c41eeaaf6ce749649c9998fd62bcba2872338e19c94e59dd5e2dd776f53719d21746976932ef11abf7a32ae6b0744665d0e0ce513955a9e68531d8ee4de9a8d35ddfb88eb5a486ad63137e8892fd7c689d4f9e7021b1173bb3752a5eecf2992e3fd4642263c7b3d815c29b466ab69285ffe4b8dafcbf3d01d635553ab7575a7a3471edc7be412d3d01e6fe8e3cdc3fa04d2a7599381e22bba49c5539d79c62b52bb0eca33f74255e41a9526a89289b15f1850d9afa87e6b6fa127101c1a6d88d433e0c86aa60bba8fe7100ed61d5a9d00a00764513eb1c7f5f5c3b3efc4532a36b407fe2d17cfb4e6fcd6049cff3a355623a3a41390ea48f42120d897949111be3d169b2d2ef45bdb894fe20b1a95ef66149427a9d8f80a9b2e\",\n        \"signed\": \"a24fee11f7ec6da3e9dfaf6c858ac004b4531abd1c9d3bb64f40dd247f00359350e43b2d4b8fbec5f6b241ecf9f1101485cf418735b05f712018335b20068308a8f794db1795667d28d24b70ac2200a6239a34e2438ced1d03f97ed48beb4d6bea67c14338f7736419dcd2a2a7973726572e6afe7edfef22c99be8b069f04f6dc61a13b343c6e585abad2214d85c36f02996fabb46bb91b5176ac708e49a0b053017048fbb55453f2b8208d6678d1a8cf6a1ee9ad7a91e380325635d1e236a6ca1d6cc7f6b59f2a2bf184f5ee451d6799f69ba11a0cd6bc04be8a351a80e725b5fc4563e45bd4749ecbc45205229105b9de73261498527f3d4ecfbb583ff532753d07c38526bb482d171a261b9cf89906a7dea8cbd7e726ba31ea68803a6b004f6dcd19e671950463738cca78bb0dffa3d6457e4aeca657ec649b97ee30e97c8cbe6ce43c2aa9a69958e9dc881e4aa7b3278074e787ace5fb601d7faf7ca5103ecbbd3bd554eb1b066f8296d2cc57e8c8a32e9c0e6a926964d6df2d8645864b322c322f1ca8073cedf2b556711a7a20b77c0a1ed277a9a6ca2c07154e863fef5a404e3e89f0d7f30f218ec4de7a53aeb9c41eeaaf6ce749649c9998fd62bcba2872338e19c94e59dd5e2dd776f53719d21746976932ef11abf7a32ae6b0744665d0e0ce513955a9e68531d8ee4de9a8d35ddfb88eb5a486ad63137e8892fd7c689d4f9e7021b1173bb3752a5eecf2992e3fd4642263c7b3d815c29b466ab69285ffe4b8dafcbf3d01d635553ab7575a7a3471edc7be412d3d01e6fe8e3cdc3fa04d2a7599381e22bba49c5539d79c62b52bb0eca33f74255e41a9526a89289b15f1850d9afa87e6b6fa127101c1a6d88d433e0c86aa60bba8fe7100ed61d5a9d00a00764513eb1c7f5f5c3b3efc4532a36b407fe2d17cfb4e6fcd6049cff3a355623a3a41390ea48f42120d897949111be3d169b2d2ef45bdb894fe20b1a95ef66149427a9d8f80a9b2e\",\n        \"signature\": \"a24fee11f7ec6da3e9dfaf6c858ac004b4531abd1c9d3bb64f40dd247f00359350e43b2d4b8fbec5f6b241ecf9f1101485cf418735b05f712018335b20068308\"\n    },\n    {\n        \"secret_key\": \"a3bed9fe2354bd2860149a3db75a85b129cf83e9d73e6317ba7054521933f896\",\n        \"public_key\": \"5ac03b4f13d91d066b2ce359e9bb1dfb6bfa5afa382fd1ccd72aef1176079f89\",\n        \"message\": \"db853808686d6d21f4c57b541e5ad63394d465e60078643cab1e065c9f306c500078f0cc41ef0f9542b5fe356aec4777ef8a95554c97b6a44099e9bd6404fb0b2e41f91914b074d12237cd442ebd40b51b8bc8bbe437a2c53332d2beb2281bf7324a0cf5b741bbf98d1eb9858be926e915a78e8d314b4144f3d20dfc6cb7f48c23af90f871c6cda90845a41aff1707a87b4e5516f18e8bd7683cfd74070803e888338c9a18f792c8d3a704170ff982bffc9e8ec9ea5d1a62592f1688d4f2b01e11f9f88774c47ac1d58f690bcf288cf8a473d350a8239df9d3a62881dadd338531fdce7615807ce965496d6f35d6c042f0ce7f21efe5ce6425185941ed5636b8ae913a75d21ab9dbdb3c3b6687a45e044938a9f1c13a330ea9761e283e61d4a320e1f559882f34b607fefe32c343174abcdc77b065a92904b42d961db8ed916c01464ffd43f93c1077f1df7ee65031cfe05d780d01d08ee036f22a2b0512193b0c0f3801e0a0208eef245c9e519352d2b0096382f2cba06eb2a01dacf619eabbc883c5d4f2fd7c3423179c0f5ffdaf8cafff5c46b34a09c3c50e2949c06000207d70d37d65a743075fdc2be62d412aa63e363706ca90e6ef44e152ea4dc5c2893ecd08d796d41f172254c3d1d14bb067b53a0897bbd73c9954d9648b2af10d9c2703e38b6c62469f6f958a1ca0a320c12339e90cf768c87b4738c219f8093bff4c2cfd29459f6d3281349378e915a3b0e724c74d2bd7a851ac7c6b48e8afc7124fdcbcab5ff80d1dee30a6c024cb4331972366ebab26bbb9f608caac7e51914df058b9b3745d98c5d27e97105475ec017377e6316198ece4ec5909f04fc27e7b382e66adb62ac8a977f376fd5dae434fb55175249ca1ab6bb02dec0696f089be3454887a0c32361d172bd2\",\n        \"signed\": \"33bc1e0bf1b493e0cfb7ea40480a1423e091f7145745013173787df47a10db24c165d00596fab70e68c94c104e8a7407cf695cd3fbe585b5b176b85ccca4fd08db853808686d6d21f4c57b541e5ad63394d465e60078643cab1e065c9f306c500078f0cc41ef0f9542b5fe356aec4777ef8a95554c97b6a44099e9bd6404fb0b2e41f91914b074d12237cd442ebd40b51b8bc8bbe437a2c53332d2beb2281bf7324a0cf5b741bbf98d1eb9858be926e915a78e8d314b4144f3d20dfc6cb7f48c23af90f871c6cda90845a41aff1707a87b4e5516f18e8bd7683cfd74070803e888338c9a18f792c8d3a704170ff982bffc9e8ec9ea5d1a62592f1688d4f2b01e11f9f88774c47ac1d58f690bcf288cf8a473d350a8239df9d3a62881dadd338531fdce7615807ce965496d6f35d6c042f0ce7f21efe5ce6425185941ed5636b8ae913a75d21ab9dbdb3c3b6687a45e044938a9f1c13a330ea9761e283e61d4a320e1f559882f34b607fefe32c343174abcdc77b065a92904b42d961db8ed916c01464ffd43f93c1077f1df7ee65031cfe05d780d01d08ee036f22a2b0512193b0c0f3801e0a0208eef245c9e519352d2b0096382f2cba06eb2a01dacf619eabbc883c5d4f2fd7c3423179c0f5ffdaf8cafff5c46b34a09c3c50e2949c06000207d70d37d65a743075fdc2be62d412aa63e363706ca90e6ef44e152ea4dc5c2893ecd08d796d41f172254c3d1d14bb067b53a0897bbd73c9954d9648b2af10d9c2703e38b6c62469f6f958a1ca0a320c12339e90cf768c87b4738c219f8093bff4c2cfd29459f6d3281349378e915a3b0e724c74d2bd7a851ac7c6b48e8afc7124fdcbcab5ff80d1dee30a6c024cb4331972366ebab26bbb9f608caac7e51914df058b9b3745d98c5d27e97105475ec017377e6316198ece4ec5909f04fc27e7b382e66adb62ac8a977f376fd5dae434fb55175249ca1ab6bb02dec0696f089be3454887a0c32361d172bd2\",\n        \"signature\": \"33bc1e0bf1b493e0cfb7ea40480a1423e091f7145745013173787df47a10db24c165d00596fab70e68c94c104e8a7407cf695cd3fbe585b5b176b85ccca4fd08\"\n    },\n    {\n        \"secret_key\": \"88a24f0df3ae2914df79da50ecf8ecb42f68c7baad3b6c3a2e0cc9c25d09d142\",\n        \"public_key\": \"12e6603f713b2305358568710018685e141553c47591396fb4259e42dc53b9c9\",\n        \"message\": \"654e9edc69fe634c2308ba8c46a955e882456286eae3593cae739c44866c0de9edcbbf0db1c44149668467709dc9706298dd2eac3301dabad5bd8e93c5e8a93f194e0fc1d9f376c144c293aefda086b2218f2e9dfd7c2dc52ba33eb229dcf7bb68ce0f876c5fd4e81afd80169f73cf264e5dc0ce16e1b876cd11c7ad89058ee0820c40005d01f119f8be6f1afbe24ca4aedc18e97896827c3ed67fc45630e7903b7fee9c990e361937bf4ea0a4d8d16cf6d9cf0381e9065e3625148f8ae0491a0341d0ff9f727be1f310ca1ec3f0104aa054321784dd24d53c985b28d44082f8e1c108a44109638ff5116edd85aeb86b6ea512a19b602edd9d211070d044af5bedb6c8527ba3491e345bacc130b36960282ae737b85c769274f0f7c588f40e6625b236bdc1a3b87320460eeeada278124b5668874f39f59c2e6aa208c3b6a9b845c4d0a27a0546786fa13e51cc98b73fd7ee327b6215ec6b629f4cc7e4bd3c0a3db78a21fffe24c70438716bc37b8da7c5ff7c3688a90339c22eb50b7c2cd36b68831fd5939175689bd3e22c3881af337ee14435709e351040ef3da955724e51c24a5e2c09f891808393fbf8ef7f1f5f0298deebdcd8d666cbcf3e866c718999ab6b1feec9c47e02e7d63540f89963d542c5d01fb6fc30768968ae81b20c354b4000c132774764d6d443add64f6dd748f5fb5b7f6eba401db4318be993989fcc2577961fa5ad31f6a2a9d6a755285865cd5dc3a88cfb5aba7d923baf78b5d131b4c214df55b6171f45209e21ca6645490d3a3644dda6dc929c7c409576d37164755ef8aaf3dcd4d22775ee7dea0e565bd54727921c649bc51f20c1f68c1fdeac455c67d71a1cb8837f4691448bf0bf044a46f1685fbe22b1e01877f7477d3499408c4c316510ce2e55b98005\",\n        \"signed\": \"1707cc009186bf3f03f7bb9e3cd4cf6b737b7a6baade7fc6c3ff5c1225dbb2baf54f47c85eafa132c31eaca03e6aec1447733facd37149b7c6cf0cd41f611404654e9edc69fe634c2308ba8c46a955e882456286eae3593cae739c44866c0de9edcbbf0db1c44149668467709dc9706298dd2eac3301dabad5bd8e93c5e8a93f194e0fc1d9f376c144c293aefda086b2218f2e9dfd7c2dc52ba33eb229dcf7bb68ce0f876c5fd4e81afd80169f73cf264e5dc0ce16e1b876cd11c7ad89058ee0820c40005d01f119f8be6f1afbe24ca4aedc18e97896827c3ed67fc45630e7903b7fee9c990e361937bf4ea0a4d8d16cf6d9cf0381e9065e3625148f8ae0491a0341d0ff9f727be1f310ca1ec3f0104aa054321784dd24d53c985b28d44082f8e1c108a44109638ff5116edd85aeb86b6ea512a19b602edd9d211070d044af5bedb6c8527ba3491e345bacc130b36960282ae737b85c769274f0f7c588f40e6625b236bdc1a3b87320460eeeada278124b5668874f39f59c2e6aa208c3b6a9b845c4d0a27a0546786fa13e51cc98b73fd7ee327b6215ec6b629f4cc7e4bd3c0a3db78a21fffe24c70438716bc37b8da7c5ff7c3688a90339c22eb50b7c2cd36b68831fd5939175689bd3e22c3881af337ee14435709e351040ef3da955724e51c24a5e2c09f891808393fbf8ef7f1f5f0298deebdcd8d666cbcf3e866c718999ab6b1feec9c47e02e7d63540f89963d542c5d01fb6fc30768968ae81b20c354b4000c132774764d6d443add64f6dd748f5fb5b7f6eba401db4318be993989fcc2577961fa5ad31f6a2a9d6a755285865cd5dc3a88cfb5aba7d923baf78b5d131b4c214df55b6171f45209e21ca6645490d3a3644dda6dc929c7c409576d37164755ef8aaf3dcd4d22775ee7dea0e565bd54727921c649bc51f20c1f68c1fdeac455c67d71a1cb8837f4691448bf0bf044a46f1685fbe22b1e01877f7477d3499408c4c316510ce2e55b98005\",\n        \"signature\": \"1707cc009186bf3f03f7bb9e3cd4cf6b737b7a6baade7fc6c3ff5c1225dbb2baf54f47c85eafa132c31eaca03e6aec1447733facd37149b7c6cf0cd41f611404\"\n    },\n    {\n        \"secret_key\": \"184d0ce2e9db7f257a8bf4646d16d2c5efc2702ced026b6906d3c8c0118f2261\",\n        \"public_key\": \"e9dab8fd9d94dc9b24cc79c635cc57ce66518982ba3e2447240741bac0730ec5\",\n        \"message\": \"6a9b876b0bf4189b3cc15f9eb4fbe7932b5577892a22200ce107156853d6d3ca363f025ad7a2d862aadc742d9415bd8d1fca13c9dca3586044e55a8cf5dee1ce564576e3e8e365540546501b34ca675cf200e0771a818c73d37fcda8cb15e48d5a0b9ea3beec0ff6610b2a8a214ca4f7efac0e71381052d9bf3c00c329593474ebd0a687a0b41d144b5e7ab1412b970a74baba4d274bb0dbfdb02b11f7f63964ba6f3ba0ad23341d083b91a4308239e33d50824396126588de72a2390c1c0fc06747c28772f630bf4d143f7a1159f028c093404894e6d16f634635d4fc330f3d7a7313ef756f5d49d8f6205eb1c792a9495da131b43345a0090c12ca56e6adac5be0cbcac3609d69f72415f6c37f3cfb2cf76b3e65f3c93ac92b63f2baa466249075bca69d4c1d1f3ade24ab31effcb90469c24bb410ab4723e1b7e1c88b3a36433563f71a99aad58fe80568f9c102da89bad97963e77d6622483166f3ae261f32a52a86101ebd645f6142c982e2cd3625cf8b46b9b2891246920f697fcaed397cb922c274945167a0e619b0b506377606db045783b0b88ea04e932d21ffc064a12a40ebe9b480f1a2c7ddd395a9b15efdc495c9714f36fa996f79f8eb8efa52d99a24abfef43b32a237c5bc0018da3b162f59b8d3d474e2ce08fa8024c58acc0a99ff614e6cd7fdd9ca4e8f41a1449aa618d03337e8a374d56055b207a9dbe69f5948f901ca7db0410f01aa373d9e0227623599bc212845b006e942fabc582cd726db5c443eb2dffbc9e3e7f0e5cb6744f7ad716050fdf2c60c7c77c253ab745db9c8552655683ea7ea680aa4af34df1325c29b8874b61be23de4ffba25424f4619ec682c26b3a67bda9bc4c94b79a9fc4d82d340495b437a1cbd6b60307cfcb10026f964a017623e33dbf233\",\n        \"signed\": \"b1e3bf5fa74d7e442ced9a98d927d8c45e0e64d874f8ea5920a360a4bf42d83ce18a924ac796e1a77d1b0208294b50f822177fdbdd458c74356fcf6bd79451066a9b876b0bf4189b3cc15f9eb4fbe7932b5577892a22200ce107156853d6d3ca363f025ad7a2d862aadc742d9415bd8d1fca13c9dca3586044e55a8cf5dee1ce564576e3e8e365540546501b34ca675cf200e0771a818c73d37fcda8cb15e48d5a0b9ea3beec0ff6610b2a8a214ca4f7efac0e71381052d9bf3c00c329593474ebd0a687a0b41d144b5e7ab1412b970a74baba4d274bb0dbfdb02b11f7f63964ba6f3ba0ad23341d083b91a4308239e33d50824396126588de72a2390c1c0fc06747c28772f630bf4d143f7a1159f028c093404894e6d16f634635d4fc330f3d7a7313ef756f5d49d8f6205eb1c792a9495da131b43345a0090c12ca56e6adac5be0cbcac3609d69f72415f6c37f3cfb2cf76b3e65f3c93ac92b63f2baa466249075bca69d4c1d1f3ade24ab31effcb90469c24bb410ab4723e1b7e1c88b3a36433563f71a99aad58fe80568f9c102da89bad97963e77d6622483166f3ae261f32a52a86101ebd645f6142c982e2cd3625cf8b46b9b2891246920f697fcaed397cb922c274945167a0e619b0b506377606db045783b0b88ea04e932d21ffc064a12a40ebe9b480f1a2c7ddd395a9b15efdc495c9714f36fa996f79f8eb8efa52d99a24abfef43b32a237c5bc0018da3b162f59b8d3d474e2ce08fa8024c58acc0a99ff614e6cd7fdd9ca4e8f41a1449aa618d03337e8a374d56055b207a9dbe69f5948f901ca7db0410f01aa373d9e0227623599bc212845b006e942fabc582cd726db5c443eb2dffbc9e3e7f0e5cb6744f7ad716050fdf2c60c7c77c253ab745db9c8552655683ea7ea680aa4af34df1325c29b8874b61be23de4ffba25424f4619ec682c26b3a67bda9bc4c94b79a9fc4d82d340495b437a1cbd6b60307cfcb10026f964a017623e33dbf233\",\n        \"signature\": \"b1e3bf5fa74d7e442ced9a98d927d8c45e0e64d874f8ea5920a360a4bf42d83ce18a924ac796e1a77d1b0208294b50f822177fdbdd458c74356fcf6bd7945106\"\n    },\n    {\n        \"secret_key\": \"d02bbf70d51351e3b47ad8e5ed263dbf556d1498fa9bd5dbd99fb4269009dced\",\n        \"public_key\": \"8ce4b59f94ced6ec9614d67d3066d9d3a0df7a46b37b4c1725ef1e57bc68a0d1\",\n        \"message\": \"554560f7a7fd1ae7758a2fce7d780f6b3f043d3af89d4f19ef573c34997554df243faf2aaab65b2afdd28610d4a51e9a4b464db6db09ebf73b7d24054cc9b12814bb29ee99e1a73bd603898360f9dcf01e670836286f8236ed8cef075f3d563312c16c73fc37eedf252f8f42d30a13e7fba3b165238c7f81eaaeb53190f3ec3b5d63f0ee03e3987e390d1d81e8277e9f6c1ee6ec4ec3fa0d720e9f53f9c26f04aa2ed2b5ef3160895999eace29cf5dc254ad71106bb7e8bc29a5b1d2412593d08194e88e1659a73159a2a22033ab066e8d3d8c3bc86b7b01de81a8c66047b07fe24ed240318ba37ba3efb6cf632604ca4f446a75fd8e70c453f0c60ee16ecaf524e703f47df5c282ca3289b3af61dee4709ee085323b1e5c8a6bc0766201c635031446891f3494e9db20dd4e9e0838249a67e138d13ee2c96f61e771061542aa16ef20d81e3a0f4e4521a6cd6c92fc26feef03b66c70e035cafcc19c96fb9d82918fe197780eff0eda6e2512c56e2a73d77032b768919bea9772f5989c8b6c65c3d1e97a2180cc3a37579da70ce9806ac1285a3eab415c0607d88cb86542eab90b9d2d67fafffcad23a714000ee59ed68c956e81c445428882f97af74db362e45c0d1bd8856eed166e4aec4bfdf95eadb251e2a1ef804852a9ea77d34577fe70831a928b101b60ac613e7ba2e6ba0a94013a64c2f8219fd30bff409099667a786f99327bb03e2f2187f445b46beedab6d325afd904e39543e93f4b6c5443249d744b2d1a43e141e4768bd40aabe4057244e1eadd9daec175719e51a093ace32fe82b2eacb5ecb0da6c1ffe98c8cee7886e301670dff87113efed4282471afb6b8a0fdb505e2e8e7dbc1a08a22e9680bd098bf1275802bdb459413a3b237d7713a1bbf597e6adf2b60eaf823791b3\",\n        \"signed\": \"6e7c66acc954ffd9dd4c1c6335ab4fe79dbbed782c4a47ec30d848d8bb2b4f1069dc62e522a1e8017f54a6345e1728c073af6447856d8c1ed35878b571e5230d554560f7a7fd1ae7758a2fce7d780f6b3f043d3af89d4f19ef573c34997554df243faf2aaab65b2afdd28610d4a51e9a4b464db6db09ebf73b7d24054cc9b12814bb29ee99e1a73bd603898360f9dcf01e670836286f8236ed8cef075f3d563312c16c73fc37eedf252f8f42d30a13e7fba3b165238c7f81eaaeb53190f3ec3b5d63f0ee03e3987e390d1d81e8277e9f6c1ee6ec4ec3fa0d720e9f53f9c26f04aa2ed2b5ef3160895999eace29cf5dc254ad71106bb7e8bc29a5b1d2412593d08194e88e1659a73159a2a22033ab066e8d3d8c3bc86b7b01de81a8c66047b07fe24ed240318ba37ba3efb6cf632604ca4f446a75fd8e70c453f0c60ee16ecaf524e703f47df5c282ca3289b3af61dee4709ee085323b1e5c8a6bc0766201c635031446891f3494e9db20dd4e9e0838249a67e138d13ee2c96f61e771061542aa16ef20d81e3a0f4e4521a6cd6c92fc26feef03b66c70e035cafcc19c96fb9d82918fe197780eff0eda6e2512c56e2a73d77032b768919bea9772f5989c8b6c65c3d1e97a2180cc3a37579da70ce9806ac1285a3eab415c0607d88cb86542eab90b9d2d67fafffcad23a714000ee59ed68c956e81c445428882f97af74db362e45c0d1bd8856eed166e4aec4bfdf95eadb251e2a1ef804852a9ea77d34577fe70831a928b101b60ac613e7ba2e6ba0a94013a64c2f8219fd30bff409099667a786f99327bb03e2f2187f445b46beedab6d325afd904e39543e93f4b6c5443249d744b2d1a43e141e4768bd40aabe4057244e1eadd9daec175719e51a093ace32fe82b2eacb5ecb0da6c1ffe98c8cee7886e301670dff87113efed4282471afb6b8a0fdb505e2e8e7dbc1a08a22e9680bd098bf1275802bdb459413a3b237d7713a1bbf597e6adf2b60eaf823791b3\",\n        \"signature\": \"6e7c66acc954ffd9dd4c1c6335ab4fe79dbbed782c4a47ec30d848d8bb2b4f1069dc62e522a1e8017f54a6345e1728c073af6447856d8c1ed35878b571e5230d\"\n    },\n    {\n        \"secret_key\": \"aa0fdae2a5a4c9c04521913004cd89efbc88b2dadf5abb246f3ca7f6923544af\",\n        \"public_key\": \"bffcb17c35c1304cdd9d624ff69bee60ec7c9ec327d12350d70fac12b47cc25c\",\n        \"message\": \"b14184cfdc4a5f0c7f83f94a832f588507e2d72a89329870078571d208a0c4960c2fdc4c236cf88229981d12b10a1b6884c8650ddaf1d4b2eb981575b1e019fe3f60423676f8856a992cce36d6d0a3d026631c8c1e1ffe34134b296f40842b6df4f86f833e0175bae50e86bf856d1ee79925f434b8bf2c84519f1f5d25386049ce3ca61777e30b700a602d395250b60fc64ac6f8db027e8da8b9550f24ed11a11d9f9f9c5e0af145b8659751ac6b55861f6388a64336b31efe45c0802d76a53486a81eba07314b4d961c141ab34e2f76edac0e6de31422df792af081e769c7ed05da9a5af2fdf36f141769908b700937f0e1068c131f176eb96c67afdbe78f40d86007fbcd47e49e2e4c4ce049936adff1ce3eac42b96b3429b5626b1aa62acde07f45a13ce1bd211f32bd7efe4790c8371ebf87c164477a5c9fa3e78c2f88077b097344cffa031c4429c7f42dca07737850ee7a769b36d0f0625adf120ea23ff4e393a4fdcb6558dbf9b266a032e3b0599b9d6692fcebd815a3897607856325fcd0115dc310db3a8792fbebd399494c8371e585727b3d632414496893d03813ba1f99661bceb9dc18ec5dc27f52670318687769fc678ddc7e40227c200522013f5c0eec0e4781e6fc153a0c2f4f3f95e517c8419924ab39992af8c19465057f134486696ba7fd4651768b4e749ef36f02444617cf97f0a423e4c13b7b66ba2b6c456878b0b50ce2ee5ec564ed8854f782aa1d1c6aa760f2522c7d97b9b1abe0ba810959d7aa403a99375aa3e39a115d1fc6fedd002f3830a50a837dc720329ec0c73d5bfd500385c736838287e19201525d189c3a084cd5a3f359875e3b8325289ced18b63b00ff9cd070c3e67444bd3d8346174085cc45135caa0c67b3226e4a52e9a1c55aed7ec5fade6bf16c19\",\n        \"signed\": \"f937298969ca34d97584448907358b0f47841f3023afc7ef7681521c5be0f5e5628a8f607e2f31636ef63646b0e9898a72ad355706d2c8060fbc640efb3d6605b14184cfdc4a5f0c7f83f94a832f588507e2d72a89329870078571d208a0c4960c2fdc4c236cf88229981d12b10a1b6884c8650ddaf1d4b2eb981575b1e019fe3f60423676f8856a992cce36d6d0a3d026631c8c1e1ffe34134b296f40842b6df4f86f833e0175bae50e86bf856d1ee79925f434b8bf2c84519f1f5d25386049ce3ca61777e30b700a602d395250b60fc64ac6f8db027e8da8b9550f24ed11a11d9f9f9c5e0af145b8659751ac6b55861f6388a64336b31efe45c0802d76a53486a81eba07314b4d961c141ab34e2f76edac0e6de31422df792af081e769c7ed05da9a5af2fdf36f141769908b700937f0e1068c131f176eb96c67afdbe78f40d86007fbcd47e49e2e4c4ce049936adff1ce3eac42b96b3429b5626b1aa62acde07f45a13ce1bd211f32bd7efe4790c8371ebf87c164477a5c9fa3e78c2f88077b097344cffa031c4429c7f42dca07737850ee7a769b36d0f0625adf120ea23ff4e393a4fdcb6558dbf9b266a032e3b0599b9d6692fcebd815a3897607856325fcd0115dc310db3a8792fbebd399494c8371e585727b3d632414496893d03813ba1f99661bceb9dc18ec5dc27f52670318687769fc678ddc7e40227c200522013f5c0eec0e4781e6fc153a0c2f4f3f95e517c8419924ab39992af8c19465057f134486696ba7fd4651768b4e749ef36f02444617cf97f0a423e4c13b7b66ba2b6c456878b0b50ce2ee5ec564ed8854f782aa1d1c6aa760f2522c7d97b9b1abe0ba810959d7aa403a99375aa3e39a115d1fc6fedd002f3830a50a837dc720329ec0c73d5bfd500385c736838287e19201525d189c3a084cd5a3f359875e3b8325289ced18b63b00ff9cd070c3e67444bd3d8346174085cc45135caa0c67b3226e4a52e9a1c55aed7ec5fade6bf16c19\",\n        \"signature\": \"f937298969ca34d97584448907358b0f47841f3023afc7ef7681521c5be0f5e5628a8f607e2f31636ef63646b0e9898a72ad355706d2c8060fbc640efb3d6605\"\n    },\n    {\n        \"secret_key\": \"7162fef0aca4974b094a6a08054395f877ff9433f1e33e20e88eaa90f938997d\",\n        \"public_key\": \"a280640f139f45c35a4871537eefe6ef9db02de785ee9fd54f805fb57d3746ef\",\n        \"message\": \"c90f450bda1c6efd8d1278debd7ae03e2eac2740a5a963fcf96c504e31d4d6fcc5e2b52a2518d2741c55e9591867b2423228f9c19f33c6f38705c62036d480ff53df12077e38fdb073c673105da1e11619ba5321a71b5f4993234a11948ea110cfa242bc23fac9aae462606e39641ca7147eebba1eec553fce94e53e4e01b073dd780a2ff678b31572ca11ee0877e756bcdb6653e5e1b4cbfb569a9d60e3ee336182dcb9b25d1be6dbf9b5c7146d775585834cabde0278aee5d57c85e983f84d8833a9e15bcc11198e1c1da6ba59282129f1db966f5460c8fb6530fbc3a98a31fc0f4e9b337366eec1dce108c826d49045abfa12ee88797f08f0683fef77edaa3543b91cb118e424d9c408da547431125107d9b0744c2443ce9917e1e328d81850babbc94d920a1d06e524dbb6c23dd82e1787822d71c4cdc409ae85ba4deb581f934748f75e7a769b9d68c4589e594e65cb6c8f4903ffbabd5a326e89441a542f8ac264ccc64e95a8982a710b6c56ff7d10916afc409ea8a41b74679dd6a766f59c52b9305ba733b13c9e811ee13083925f4200682bd05dea339532522970aa149d004a2ea20ff461e9ec0f3b62565c1a106259c836605cc27cadc9515cb9979e89af287c027d75edbf87d5cff63a7fec9bd10e7877ab9bf868d734bd3a2374cef7025cc4dab710e254806685a136ecd03e36770346513a15145b890eeef47b80ea08e46c81d202e533e9a06a38a6f76ef57a9c736ec78d00b808e3ffd9c79b9dc7a2e589907656c932ab8a8b57da1a495ba7452015e7924b5269ab1f67bdb43a35831487ab9002f52d78b134cd3751925aaab0b45c8e6b0f2bf0cc9a4659317108fba9136aabb0921a58fbb9b50e51243f9b531847dc9657e96fbaf7aa698fe6fe44f90590144c70337250c58bc5dd\",\n        \"signed\": \"ae161cce95403384b65c6bc9b393eb072564c35f3a6c04fa517ab068bcd23767cc0c8edd92b1a13ae9a9ce4864137fb89c1f37b748cfc9134b6741ba1b22280dc90f450bda1c6efd8d1278debd7ae03e2eac2740a5a963fcf96c504e31d4d6fcc5e2b52a2518d2741c55e9591867b2423228f9c19f33c6f38705c62036d480ff53df12077e38fdb073c673105da1e11619ba5321a71b5f4993234a11948ea110cfa242bc23fac9aae462606e39641ca7147eebba1eec553fce94e53e4e01b073dd780a2ff678b31572ca11ee0877e756bcdb6653e5e1b4cbfb569a9d60e3ee336182dcb9b25d1be6dbf9b5c7146d775585834cabde0278aee5d57c85e983f84d8833a9e15bcc11198e1c1da6ba59282129f1db966f5460c8fb6530fbc3a98a31fc0f4e9b337366eec1dce108c826d49045abfa12ee88797f08f0683fef77edaa3543b91cb118e424d9c408da547431125107d9b0744c2443ce9917e1e328d81850babbc94d920a1d06e524dbb6c23dd82e1787822d71c4cdc409ae85ba4deb581f934748f75e7a769b9d68c4589e594e65cb6c8f4903ffbabd5a326e89441a542f8ac264ccc64e95a8982a710b6c56ff7d10916afc409ea8a41b74679dd6a766f59c52b9305ba733b13c9e811ee13083925f4200682bd05dea339532522970aa149d004a2ea20ff461e9ec0f3b62565c1a106259c836605cc27cadc9515cb9979e89af287c027d75edbf87d5cff63a7fec9bd10e7877ab9bf868d734bd3a2374cef7025cc4dab710e254806685a136ecd03e36770346513a15145b890eeef47b80ea08e46c81d202e533e9a06a38a6f76ef57a9c736ec78d00b808e3ffd9c79b9dc7a2e589907656c932ab8a8b57da1a495ba7452015e7924b5269ab1f67bdb43a35831487ab9002f52d78b134cd3751925aaab0b45c8e6b0f2bf0cc9a4659317108fba9136aabb0921a58fbb9b50e51243f9b531847dc9657e96fbaf7aa698fe6fe44f90590144c70337250c58bc5dd\",\n        \"signature\": \"ae161cce95403384b65c6bc9b393eb072564c35f3a6c04fa517ab068bcd23767cc0c8edd92b1a13ae9a9ce4864137fb89c1f37b748cfc9134b6741ba1b22280d\"\n    },\n    {\n        \"secret_key\": \"dea180c91b533aaf736bc5d3c8e474d5e5d475b75b92cde6bd1d10f3b8f55ad4\",\n        \"public_key\": \"30b20fb320b00e77c4e0a8eb3730af3c0b1c5f5ed9ee2b0562707e4f55c4938b\",\n        \"message\": \"606144b7d4f96bef7f112b6d41bcb500d2136c134ceda220e24d0f1524eca12c30f2b102c7f378d6bba259c5b4a5ef8ec9309d5c8da7e8d2ded3792aeeea2108f77d66b23045938ed64751f20d48326be2fb99628cfb1873d7dd27581c105ec13249a952a50784b8b34cb3b2c1a004fa8b628a0767fa9abf058d955df85d134a0fc7f4b7d7fb0c8d31bce345dd0a4282145afb2ff19751f2cc3a1caea242baaf538749bf388000e3dc1d739359dfebae64ae1e10fb6fc17cc9fb950535c2de129587a86859b7be36dfe9b6c1141b25e0915c8d4aa1cceae7046b3d7cfa940bc98d4d69fc5a30dde1dee42fb5272281bf8f8e7f3e1a04397fb4f3adefc57532ddbde36833a676e6f39c82aff6bf4832ec971e03be3829c02a203c82d9eb8c1630ee9693f45d26f5f51a3103ca64d468eceac1b29af4c42eb216d76ec8994836b4bec76489ca5070680c2c2eb457210a77c47fdcbf600172073a53f1453bb5c80439c882f0736de40637b4f5ab1f761ff355c6e9bd4abde7560d5fc113c830159a1b77c4e87bc2c69880a40c5805ecc8aaaf57575bccd8177fc6b83569233c0f5ca223ac4013ca106cac2854706aead714fa29f2860a5f9753268a3671d9f59cde6048cf0b8986050f7f549e4fd7557f2fc3fcdccddcefda586a64b3006e5825f27ca31687caf663bd90a05b1152d7c88d7f1051a9d791748651d888a6a12f22d6c8c3f78c2b86eaf5394b4ef7eefb89797b25e542dc93102d021a1d0bed6a7dcdd8102b8f0430a0bc21d904a3c9346c018343dd9937cb35250007a284825db08e9a11fee31cff7a314c48c42d8b314acc27822af03d1954c7cc8bf9ad4e9e98f4ad4efb355288daa8c90de9037e64a7861f5ee43ada9f0fccde34d0bcf50288550f700f215a7944a5380e2a8e3f04f2b4f5\",\n        \"signed\": \"d083333fb84e79c9b33e55e8192d571ffc8dc50745b6b5fdd8c44d92a63fd178c4e57c2ab3a1211c0ba2d39da30b06629d8d1cc1d9f2593263d524fa5a2ebc03606144b7d4f96bef7f112b6d41bcb500d2136c134ceda220e24d0f1524eca12c30f2b102c7f378d6bba259c5b4a5ef8ec9309d5c8da7e8d2ded3792aeeea2108f77d66b23045938ed64751f20d48326be2fb99628cfb1873d7dd27581c105ec13249a952a50784b8b34cb3b2c1a004fa8b628a0767fa9abf058d955df85d134a0fc7f4b7d7fb0c8d31bce345dd0a4282145afb2ff19751f2cc3a1caea242baaf538749bf388000e3dc1d739359dfebae64ae1e10fb6fc17cc9fb950535c2de129587a86859b7be36dfe9b6c1141b25e0915c8d4aa1cceae7046b3d7cfa940bc98d4d69fc5a30dde1dee42fb5272281bf8f8e7f3e1a04397fb4f3adefc57532ddbde36833a676e6f39c82aff6bf4832ec971e03be3829c02a203c82d9eb8c1630ee9693f45d26f5f51a3103ca64d468eceac1b29af4c42eb216d76ec8994836b4bec76489ca5070680c2c2eb457210a77c47fdcbf600172073a53f1453bb5c80439c882f0736de40637b4f5ab1f761ff355c6e9bd4abde7560d5fc113c830159a1b77c4e87bc2c69880a40c5805ecc8aaaf57575bccd8177fc6b83569233c0f5ca223ac4013ca106cac2854706aead714fa29f2860a5f9753268a3671d9f59cde6048cf0b8986050f7f549e4fd7557f2fc3fcdccddcefda586a64b3006e5825f27ca31687caf663bd90a05b1152d7c88d7f1051a9d791748651d888a6a12f22d6c8c3f78c2b86eaf5394b4ef7eefb89797b25e542dc93102d021a1d0bed6a7dcdd8102b8f0430a0bc21d904a3c9346c018343dd9937cb35250007a284825db08e9a11fee31cff7a314c48c42d8b314acc27822af03d1954c7cc8bf9ad4e9e98f4ad4efb355288daa8c90de9037e64a7861f5ee43ada9f0fccde34d0bcf50288550f700f215a7944a5380e2a8e3f04f2b4f5\",\n        \"signature\": \"d083333fb84e79c9b33e55e8192d571ffc8dc50745b6b5fdd8c44d92a63fd178c4e57c2ab3a1211c0ba2d39da30b06629d8d1cc1d9f2593263d524fa5a2ebc03\"\n    },\n    {\n        \"secret_key\": \"9daf6dbb7f762966e7a57c2ec1996e9f5b555b9866b8e31deaab4356eb13816e\",\n        \"public_key\": \"f021b55a36d9fbfbf2978bc0df736b289c8241d6435309841a134b07d47ce4ed\",\n        \"message\": \"544523900daa6778c0391ae4044a51c0c4a5e444133fbd7747d539a744fa60ab5dc54e1819dc8e56899c56efd7ef3da341790ecc49645ef325c6568ae971d30d21bb7f23464f46a24b80d49bb93c6e91de79b24331d0707f43d0665d0197743adff690d615a1c9258777fc47d0217142426a4734892eb622ab8e50bb128ec3a895266a3861a39768bc76096f581fd082df9b7223e85a8afbdb5caa4922af2a014bf8a5cd11e5c5ea93e91cd46d5a1b99b85a2670e321de2e32255afd67fe2c37fd932caca22d241faf4ccefeff58d6bd04cfaf11dedd29c8719ffcb02ef65c5d3eb78b4fc0d170a2e3432cc812f0d041d9760c13c12f7c7f2f84fe5e0f700c10b1a69ca466a70bdeff8dbec7d318fb09ddd827ef61caa6910bbc061cbda2b527ef2e59ed4c17229972f89567d705de9231924b41bb6e7c01fe854264474fa76b1f88cd57eac311171af103d23078424a12675f2fa36c2de0bf53c295feeb3157de958922986e32513dfa33b35e15c394a11c0fcc55b82d6dd0597cddd27ede7de12985a616e64026befb5d690482b3ff22c0dd21f27a086d37a0499ea36fe2c4b5a959d10e9a610cab1fe0d28cf1013dcae63d8fdee0ecbd8b4e19d5d040e2fad7d0413a38e8c4e73552ad46047b5bbdd15c09cc0d34e48b91fdbae2a9d162d4b21ee20a1ef535ea883595bc4951692a67163454c7367f134bf645d48f9969e3d4f0f9eaf4144ce980a0a2e3342c746c2bdc3ccdc2f8a7da57a0e8028782d30af5857d9efb37666df65d7cc384716661e61ff5c09752595e94112ca1a840d6e4f6ec0e55494c5b44f7c0f0d4a99cd70905bf8485561748f4dc0fd7a44a1b139113c38a1e8eb5c7a20f3e952eaea8ce38b207c28ed972718f031f477c6207ce433c515f5ac2840f4974f1f16989626c76bc98\",\n        \"signed\": \"49b6bc46b7abb5694da94215efc4b30eea04ae2e73eb2da8e8c9ef9be2222498b17e13939646c29e32d645584640641590b1bbdbfe24f36c6f694bf87238ee04544523900daa6778c0391ae4044a51c0c4a5e444133fbd7747d539a744fa60ab5dc54e1819dc8e56899c56efd7ef3da341790ecc49645ef325c6568ae971d30d21bb7f23464f46a24b80d49bb93c6e91de79b24331d0707f43d0665d0197743adff690d615a1c9258777fc47d0217142426a4734892eb622ab8e50bb128ec3a895266a3861a39768bc76096f581fd082df9b7223e85a8afbdb5caa4922af2a014bf8a5cd11e5c5ea93e91cd46d5a1b99b85a2670e321de2e32255afd67fe2c37fd932caca22d241faf4ccefeff58d6bd04cfaf11dedd29c8719ffcb02ef65c5d3eb78b4fc0d170a2e3432cc812f0d041d9760c13c12f7c7f2f84fe5e0f700c10b1a69ca466a70bdeff8dbec7d318fb09ddd827ef61caa6910bbc061cbda2b527ef2e59ed4c17229972f89567d705de9231924b41bb6e7c01fe854264474fa76b1f88cd57eac311171af103d23078424a12675f2fa36c2de0bf53c295feeb3157de958922986e32513dfa33b35e15c394a11c0fcc55b82d6dd0597cddd27ede7de12985a616e64026befb5d690482b3ff22c0dd21f27a086d37a0499ea36fe2c4b5a959d10e9a610cab1fe0d28cf1013dcae63d8fdee0ecbd8b4e19d5d040e2fad7d0413a38e8c4e73552ad46047b5bbdd15c09cc0d34e48b91fdbae2a9d162d4b21ee20a1ef535ea883595bc4951692a67163454c7367f134bf645d48f9969e3d4f0f9eaf4144ce980a0a2e3342c746c2bdc3ccdc2f8a7da57a0e8028782d30af5857d9efb37666df65d7cc384716661e61ff5c09752595e94112ca1a840d6e4f6ec0e55494c5b44f7c0f0d4a99cd70905bf8485561748f4dc0fd7a44a1b139113c38a1e8eb5c7a20f3e952eaea8ce38b207c28ed972718f031f477c6207ce433c515f5ac2840f4974f1f16989626c76bc98\",\n        \"signature\": \"49b6bc46b7abb5694da94215efc4b30eea04ae2e73eb2da8e8c9ef9be2222498b17e13939646c29e32d645584640641590b1bbdbfe24f36c6f694bf87238ee04\"\n    },\n    {\n        \"secret_key\": \"7186f8d168d9ddf17edbaf0e7b1abcb26da3e4c0272d9879c7fdff6421c4ea50\",\n        \"public_key\": \"96b4a656232029fc1b8364703cbea7a5d7387518a88ced1a915ec8d886848132\",\n        \"message\": \"a3e6cb6b84cc5cf1fb1a848b4b8ea7cb7c87e0445750c61f9aa5d77deddf949463ecd39bfc71f2610c2a9424847fb76f84c5da1fa10ef718a34566cec1b3e899e7252e8d4d346016498ff119972750061660baed312827583181073d1dc74b76c430ca30d409e4e8439c0fc48c00680629d43ae2a77d69228f7f8a1253af15bd2cb6bb1c1696550c4c790f449869630ab92b9c11cde1f961aa2103ec23f7d9f0fe9c3c4132582efa79a66ae3426e5105b80bfe5e04dc8bb1e38a3110cd72984b3ef02a0ca62ab638cbcfbc8a6b593d2613dc06ec86fee34f6518d4a3fbdc157237174564daeb6674cdc34f4d6537cf81d8aa9bddbf3aeda312daaeee336f9ed8bff81e294bc7d44d25cd787072e6cb414b65fb7a846fc065367ba8e37beffdf0b7ba8f98cdf1eb870f4e8b7130fa3429d2e24bce5994daf1aa65e5f603b631053dc510b2f097e86e9b9b552302757968d0136ee6754c42a32c990add9cb529bc89751dfa4e5e3a0badaf4cc40b6a09507f9fcd24c3ca72259599c6ee58d857b3a189e048902e885a3607426093cb0fab437c0fb0ed2f1e96e9441a7e954fe3ef7646e26a39a07033d0a1555dfeed9a6f57794af3a2abf0057e9f853ae5c30138fd80e2f29c2f4a93ad3145da10a3e31ce9ff9786ac65d86037d98b7aa6d11de8800010e133869eb67a5039b9b8feb6ef903d0cc746412607da725ce2dc6a352109dbc6a5e40b170c23050bc4fb1efa0c34fec00eae3219c29040e8f5978c9384ee915d8c9398dd120d5c3cba38f8526b06197cb2c261dec7d726ae130f9bee17261700e99931fac4b4dca0f758701acbf3707d47df5321130ec10bb3b13078c4dc5de3470f158b57dbeb878b3a8524e0ed2c9547545f0fddf13125e45bb23d6a7b383a187f4c5d54a7b4c83d5957f2cd7e6fbc\",\n        \"signed\": \"a9c0499fc216a14532d736365c6355f938f8d8194fa1132848f83e490454d4bbf69269f12259fc6c074c1015e425e4f4f27c029c93334951361a35ad1176540ea3e6cb6b84cc5cf1fb1a848b4b8ea7cb7c87e0445750c61f9aa5d77deddf949463ecd39bfc71f2610c2a9424847fb76f84c5da1fa10ef718a34566cec1b3e899e7252e8d4d346016498ff119972750061660baed312827583181073d1dc74b76c430ca30d409e4e8439c0fc48c00680629d43ae2a77d69228f7f8a1253af15bd2cb6bb1c1696550c4c790f449869630ab92b9c11cde1f961aa2103ec23f7d9f0fe9c3c4132582efa79a66ae3426e5105b80bfe5e04dc8bb1e38a3110cd72984b3ef02a0ca62ab638cbcfbc8a6b593d2613dc06ec86fee34f6518d4a3fbdc157237174564daeb6674cdc34f4d6537cf81d8aa9bddbf3aeda312daaeee336f9ed8bff81e294bc7d44d25cd787072e6cb414b65fb7a846fc065367ba8e37beffdf0b7ba8f98cdf1eb870f4e8b7130fa3429d2e24bce5994daf1aa65e5f603b631053dc510b2f097e86e9b9b552302757968d0136ee6754c42a32c990add9cb529bc89751dfa4e5e3a0badaf4cc40b6a09507f9fcd24c3ca72259599c6ee58d857b3a189e048902e885a3607426093cb0fab437c0fb0ed2f1e96e9441a7e954fe3ef7646e26a39a07033d0a1555dfeed9a6f57794af3a2abf0057e9f853ae5c30138fd80e2f29c2f4a93ad3145da10a3e31ce9ff9786ac65d86037d98b7aa6d11de8800010e133869eb67a5039b9b8feb6ef903d0cc746412607da725ce2dc6a352109dbc6a5e40b170c23050bc4fb1efa0c34fec00eae3219c29040e8f5978c9384ee915d8c9398dd120d5c3cba38f8526b06197cb2c261dec7d726ae130f9bee17261700e99931fac4b4dca0f758701acbf3707d47df5321130ec10bb3b13078c4dc5de3470f158b57dbeb878b3a8524e0ed2c9547545f0fddf13125e45bb23d6a7b383a187f4c5d54a7b4c83d5957f2cd7e6fbc\",\n        \"signature\": \"a9c0499fc216a14532d736365c6355f938f8d8194fa1132848f83e490454d4bbf69269f12259fc6c074c1015e425e4f4f27c029c93334951361a35ad1176540e\"\n    },\n    {\n        \"secret_key\": \"e86e8c62566e15753bd5577eaae7f24105b74055a25629580708bfc83aebf06c\",\n        \"public_key\": \"8c8ce882d5f76586d8ddccc5579bcc1cdf4cfd7162304cb10e7696026e707f17\",\n        \"message\": \"12fa631b0e482e9b9d633e94b82d8ab436fe548e5b95da92624623d13f2c70da775ba136c5229c16a0c7a6fa914b2feda564e17219e47370f9515bb1d59de6e9586204d943dc560d73e2e757f7eb39bbc7111bb46bc643c13f602112739bec778d7d4f49d092563d68f5776e430e3b0bf2dc1b01beb3040196da6302908bfe91e0fc38e04c150ef907dc736c445ff21fdbd2dc1eac0a0f5d00a30af028afe2ff61162b758c7da9a776666a112359431c48856a87ca82d3dd1c8af376598635432bf891becbc33a8fda44ce883ea8af4ad8b91a9261ce76b9e939c461fac53ae0f076e82d879aace8f38f120bc9b04d8125ed24bcd779d9d24386b1dd2017ebee8197376e8c36fa3aef8c1e713e2b8bce4966d84888681ba78495fbd1d6cca58626e6854cda606b83d6293d01e8e3e13bbf4aac851d9a1e00d0024e26993b0b3091be7e8061bcbb3cbb2302ceab96897a8e1ff367ec8625693cf31534124a9d5d725bcae001d67bc2111d0ab8111fa1d24e4ed06d63583ce690f2a04626d791d29e3e315a415bf2e853a5f2974c833a3fe2e2909cf669c73c1f59392d30c37f3b9c5a3ddcfd75621fda36e4ba2f16147858f6f206b9a140f1ddc1466c9a53ed73f82490bc95322c955f61d11cb51d5e8a58c6b3cb0fdf0419763201beea93a8512b1405245bfc384155adc5ce778aa74d00a322726465119af79501f040dd0a7a84060001ca89d2fe5e9cf9779a547e3ebd3bf8642990a3690e2b2c3e54cb7eeeeabc242b4dd99274c425a867931c929ca70808601c3908cfd788867d687dc366e976350c9e70584bd390d67eeb7cfea26c42686d3d9620f62f64104ef41ed1d130d79e325938486296b7ab2d2adb78526743e400acb2b7af09628d68cf9475101625c20e1dc051d73c997c952e12812c805b68ff\",\n        \"signed\": \"54d2fd44acf9e209bc7e433372bd73074d07806a77c6ce228e9be994418b00c7ecbcb7ac006c294aec9de668572add517c06b4eb4fe2ff3523bf043df44d3d0d12fa631b0e482e9b9d633e94b82d8ab436fe548e5b95da92624623d13f2c70da775ba136c5229c16a0c7a6fa914b2feda564e17219e47370f9515bb1d59de6e9586204d943dc560d73e2e757f7eb39bbc7111bb46bc643c13f602112739bec778d7d4f49d092563d68f5776e430e3b0bf2dc1b01beb3040196da6302908bfe91e0fc38e04c150ef907dc736c445ff21fdbd2dc1eac0a0f5d00a30af028afe2ff61162b758c7da9a776666a112359431c48856a87ca82d3dd1c8af376598635432bf891becbc33a8fda44ce883ea8af4ad8b91a9261ce76b9e939c461fac53ae0f076e82d879aace8f38f120bc9b04d8125ed24bcd779d9d24386b1dd2017ebee8197376e8c36fa3aef8c1e713e2b8bce4966d84888681ba78495fbd1d6cca58626e6854cda606b83d6293d01e8e3e13bbf4aac851d9a1e00d0024e26993b0b3091be7e8061bcbb3cbb2302ceab96897a8e1ff367ec8625693cf31534124a9d5d725bcae001d67bc2111d0ab8111fa1d24e4ed06d63583ce690f2a04626d791d29e3e315a415bf2e853a5f2974c833a3fe2e2909cf669c73c1f59392d30c37f3b9c5a3ddcfd75621fda36e4ba2f16147858f6f206b9a140f1ddc1466c9a53ed73f82490bc95322c955f61d11cb51d5e8a58c6b3cb0fdf0419763201beea93a8512b1405245bfc384155adc5ce778aa74d00a322726465119af79501f040dd0a7a84060001ca89d2fe5e9cf9779a547e3ebd3bf8642990a3690e2b2c3e54cb7eeeeabc242b4dd99274c425a867931c929ca70808601c3908cfd788867d687dc366e976350c9e70584bd390d67eeb7cfea26c42686d3d9620f62f64104ef41ed1d130d79e325938486296b7ab2d2adb78526743e400acb2b7af09628d68cf9475101625c20e1dc051d73c997c952e12812c805b68ff\",\n        \"signature\": \"54d2fd44acf9e209bc7e433372bd73074d07806a77c6ce228e9be994418b00c7ecbcb7ac006c294aec9de668572add517c06b4eb4fe2ff3523bf043df44d3d0d\"\n    },\n    {\n        \"secret_key\": \"a5cab2727e2f131a4d63facee799336663930aa07afda6bd5a8e985a02deb1ea\",\n        \"public_key\": \"ac355f95260fbfea778c55b5af8b3fd1f24d2693da35de4ee508a27ed350391f\",\n        \"message\": \"483439154dd5e5d109857c24d1c4e7fbbefd2f38651da81289f2ad3d6154306538b82ac7dba9210e740776ede4ccf51d4f63094b03e46ad3aa3c31947d8c36ce6f94e85296bdedcc1ead62eaa1441ecde0a225d0bf02edcacf865014899af66d9808040c2d02000a0f5ce4f1683c1a495276d9c4d728c9ecd6f078db8a0cfc267187238562ab1a1ea2813fb4f12e878e1ba143f4d06a3bc8100c3550118d69dae67b55ed692acf9444daa5c3e3c0a98ee28cf172de0c584c9f2ec9bb6e9b57f572a86ff8729f65f4c65b7feaccaa21720ed79e90618bcafbfd9533da85232b450883aa919f827f04c4a97bf51390d4f8569c191726f44f7e39fb3db73bfc415b6ffca8b91acaad69238572f14b49985ea03c98d7b1d44b3a6554765b19abf9b25274e97e4634e4b0f9e802eb6f743fff950757ee013a6988221881a7443f1f32bccb007e99379c7ca4f906d5fe11cb12f66b53a3d21ac947be0c8150bcd04f1c816b3f0c07c5fbc0905a7136956849da03836daec25c3e1a06ec3aeb205648176f89f4a291fac4f1d3899f56c9065eebb8768b84b31b7cc03108bd0888338d1774994970292d935031fea335d9e7908fe0254889c0b171cfe0af2e6fde7a5ea3de1fdcdae537b6313119c27f772024ef36e45c8b89f26c93d9eea13725e12d810cf9824aea04cb802da7e458e842ca375e3671346e0089dec571be169b0d90966bf368fe3698fd3e72bf16249dd900af6d29ffa48351360f12241714585f7a9b4c7bafc952226735de1462743d78abad0f6711f2495f3313ad4e0ba216b0dea5dc1516a9549f7dfcfeb93e591abeda5ea3c7045906523b40868ca5735d6a3371c3c294c11126d097f4c708e90464c1ad9142fa0bedf07dfc5f4cb67d6ed80f1bfe72683cfb2ad66530dc43d7023f3790ff42d95bd8\",\n        \"signed\": \"138c7a8eca5b5c37158813843c9a904e5f530ad971ee432a44f344f8c64bbfaf102ff41daa5cf722a4bc6640588759b8f36f9c059eab936cc45ed4796394a002483439154dd5e5d109857c24d1c4e7fbbefd2f38651da81289f2ad3d6154306538b82ac7dba9210e740776ede4ccf51d4f63094b03e46ad3aa3c31947d8c36ce6f94e85296bdedcc1ead62eaa1441ecde0a225d0bf02edcacf865014899af66d9808040c2d02000a0f5ce4f1683c1a495276d9c4d728c9ecd6f078db8a0cfc267187238562ab1a1ea2813fb4f12e878e1ba143f4d06a3bc8100c3550118d69dae67b55ed692acf9444daa5c3e3c0a98ee28cf172de0c584c9f2ec9bb6e9b57f572a86ff8729f65f4c65b7feaccaa21720ed79e90618bcafbfd9533da85232b450883aa919f827f04c4a97bf51390d4f8569c191726f44f7e39fb3db73bfc415b6ffca8b91acaad69238572f14b49985ea03c98d7b1d44b3a6554765b19abf9b25274e97e4634e4b0f9e802eb6f743fff950757ee013a6988221881a7443f1f32bccb007e99379c7ca4f906d5fe11cb12f66b53a3d21ac947be0c8150bcd04f1c816b3f0c07c5fbc0905a7136956849da03836daec25c3e1a06ec3aeb205648176f89f4a291fac4f1d3899f56c9065eebb8768b84b31b7cc03108bd0888338d1774994970292d935031fea335d9e7908fe0254889c0b171cfe0af2e6fde7a5ea3de1fdcdae537b6313119c27f772024ef36e45c8b89f26c93d9eea13725e12d810cf9824aea04cb802da7e458e842ca375e3671346e0089dec571be169b0d90966bf368fe3698fd3e72bf16249dd900af6d29ffa48351360f12241714585f7a9b4c7bafc952226735de1462743d78abad0f6711f2495f3313ad4e0ba216b0dea5dc1516a9549f7dfcfeb93e591abeda5ea3c7045906523b40868ca5735d6a3371c3c294c11126d097f4c708e90464c1ad9142fa0bedf07dfc5f4cb67d6ed80f1bfe72683cfb2ad66530dc43d7023f3790ff42d95bd8\",\n        \"signature\": \"138c7a8eca5b5c37158813843c9a904e5f530ad971ee432a44f344f8c64bbfaf102ff41daa5cf722a4bc6640588759b8f36f9c059eab936cc45ed4796394a002\"\n    },\n    {\n        \"secret_key\": \"cb6319613779a4ef66be14144b2840ad0167c03f3b8d04ff592cd1d2d722e330\",\n        \"public_key\": \"18eb03f0a334b080e1af4399d8376d83c533316dc687cf341f0afab450965299\",\n        \"message\": \"874a6c81d6db7133a79169760c84d36eea3d42ea0892b7c8dde844a3a6b60aa9f2660726c9c4dd26a01f4ed0dc1c53ba6005463f7ea64a1ec63953bc3d81052a2f1084389a7706df74ed4136082ab5c6e8c7f411df9d3a0f3c40f5a60e2d21a8548e7a25dee34030b3c3e75caa93ddaa9c190cb6deda2413d54e373d4353dba43d39491a2f56c8b36d45016f77d7471691634539e76c4fb41913472b0a23054f548f54b1e7109c8b6521b57ae981d050316a33c49c7116268dcc4b78c2bae53a3ae4dd178bb8b76bb3befe19e41a2cf12cebb71168f971f202461c63f7d6eef107f5b1030edd4e75009e9116c3cd0e8bddc299b41f1a45e784efa646dada64068e9248ec988f232634ad3d5aab19560e830a5bd665457c94295e1af0160fbce272ef4845ddf0c4f24d976f518690ea1f82ff4dfa4813641a67598ea98401e0ff10a0e582e2b90867b4e6232c34ea499c169909a44126f377d8cc1c11905866340efd1e7b077dc7456d59c9b96a124aac3b33bb227441bb7a52e6c3140d7a4f67ca05bbc93c93775b929119a224ed8f39005820f420cc6c530e61e20adca01e939cc031df49cdb1ec8ff493c9efbcad34c57108efd764558966fb1470b0745e6966191a9a9e44581b09faf469f951537203d926bc8a55d080a805181dd7296ed20a818268f755eaa66b082242f4d020f7cd6720890484c01c757fe35d87b5bc906deacc2e3071de4601bcf0dd6b837c433106047fd8ec9bd0e98c9ee806f7ec8c5a10ea2136f1f90f900b853f953f00b076bd1ebd929d08a38bec68d866435047bcb6721e06b64085dc0558c1fa85a2c83b0caf4c816084f10a4c5885295bca15ff7c18e596c62c92ee9921a27c29d195bd282213ff3660b6e7546b4eaa777ce39fc5d20484c71ed6ca06f9b77ab1d872393ab2d10255\",\n        \"signed\": \"c1b399cdc198e9a159e684fc26686de660da54cfe312ca7345df0c7d15a35743014410bd2f6cd11eef33a89b3d15cbc17c7a358937fd997205051f9257c25609874a6c81d6db7133a79169760c84d36eea3d42ea0892b7c8dde844a3a6b60aa9f2660726c9c4dd26a01f4ed0dc1c53ba6005463f7ea64a1ec63953bc3d81052a2f1084389a7706df74ed4136082ab5c6e8c7f411df9d3a0f3c40f5a60e2d21a8548e7a25dee34030b3c3e75caa93ddaa9c190cb6deda2413d54e373d4353dba43d39491a2f56c8b36d45016f77d7471691634539e76c4fb41913472b0a23054f548f54b1e7109c8b6521b57ae981d050316a33c49c7116268dcc4b78c2bae53a3ae4dd178bb8b76bb3befe19e41a2cf12cebb71168f971f202461c63f7d6eef107f5b1030edd4e75009e9116c3cd0e8bddc299b41f1a45e784efa646dada64068e9248ec988f232634ad3d5aab19560e830a5bd665457c94295e1af0160fbce272ef4845ddf0c4f24d976f518690ea1f82ff4dfa4813641a67598ea98401e0ff10a0e582e2b90867b4e6232c34ea499c169909a44126f377d8cc1c11905866340efd1e7b077dc7456d59c9b96a124aac3b33bb227441bb7a52e6c3140d7a4f67ca05bbc93c93775b929119a224ed8f39005820f420cc6c530e61e20adca01e939cc031df49cdb1ec8ff493c9efbcad34c57108efd764558966fb1470b0745e6966191a9a9e44581b09faf469f951537203d926bc8a55d080a805181dd7296ed20a818268f755eaa66b082242f4d020f7cd6720890484c01c757fe35d87b5bc906deacc2e3071de4601bcf0dd6b837c433106047fd8ec9bd0e98c9ee806f7ec8c5a10ea2136f1f90f900b853f953f00b076bd1ebd929d08a38bec68d866435047bcb6721e06b64085dc0558c1fa85a2c83b0caf4c816084f10a4c5885295bca15ff7c18e596c62c92ee9921a27c29d195bd282213ff3660b6e7546b4eaa777ce39fc5d20484c71ed6ca06f9b77ab1d872393ab2d10255\",\n        \"signature\": \"c1b399cdc198e9a159e684fc26686de660da54cfe312ca7345df0c7d15a35743014410bd2f6cd11eef33a89b3d15cbc17c7a358937fd997205051f9257c25609\"\n    },\n    {\n        \"secret_key\": \"b298adf38a6708f8d18ff1ed96bfbab421540d096c4e4351b92209b5e6aaab65\",\n        \"public_key\": \"770edf42b8a039c6cab9ba65ebfb135abc2da314a4c309f46a8f325b52d06593\",\n        \"message\": \"9df4d5d7565d2c052262dd34d6007d86d9c0f07c7089af6119e304f4d8011d7eaad77b3ef70cc280847d59f297202b7e1861aef334bf38de14740e8073c955a851d2cf3dadc3edce15be490eaa845ba553fc6e8746e52915e655af4b86c629d4c522783635d464a2825777d89d7097677ef0e5eeae38537ecb656e3b28dd07358fd9fb2cd462517286659aefc79d374d1d13ed93967c530cdea4f314a0f91d6289b4c7a4279b6f4c4abca33357f69ed84b9119637adb7c18e694cb3c56e73637da910735d43c38aa8086675a06ad370e5726881da5e1a1dc6144d6a62aff7fb0c352d88dc971a3d72d3071e14b47425356af1b019233538261451a99a6cf4a07ce9ab1c3990de6ab8de2116c756105c512b7a3eeb3157b158b321e444e806d890b3890ed9ddc869f1711723bb99a72bdb923d131ba4edbfbb6dae99a5c7b328d310df9a6d1dcd85918962833e89e20f5c5e6333ac861094ae9e799c8641b9baea11a2e0ec234be5930e02880859cdec0d978237cbea5c7c32c111bafdd4bfbffe4fb3485effecd51bd195a71404ca5b59afa252d7b5ff9d030f48c6faadbdba918f21a0cd39af56966dccfa25fb5a5cf9a4b26a7f5441df6e320e34b27393de2ecfbd69a1594909a6c685ec645fcf3048d0148fa38d3e8a64dc3c21ae44da7e46a5ea7936c2ba083689a78ca3ac60b87be6d23ea40f5961583742842e37525a49c5fe8fd15d7b0c9e8fccd07936d19538212f7373dbbf3df7d46adf9d9f5db09524c65b883ae6f6cefa24b19ec48ce28cfa734d9bd6e77837d1a14d6a19d345bfbea559e7e6bfb71ddad83cd8deeab687fe73c057488f8f2b3e2e26d13009f4d23e6619a23c0692af76669217d5ebd46085b398890e5c91fdb4db5ba40e7773d518d3cf00c0a5b5a4b0f1b85d62916a59e5607b7b1eb80\",\n        \"signed\": \"e55f8d304122dc175cf0274674fc9dedfec2b5f8a2eeb1e3e7f8e0dfba0dac2d32f4e704ce91cd599184133c3bf1063d2fae63d73acc5772d718d811833186029df4d5d7565d2c052262dd34d6007d86d9c0f07c7089af6119e304f4d8011d7eaad77b3ef70cc280847d59f297202b7e1861aef334bf38de14740e8073c955a851d2cf3dadc3edce15be490eaa845ba553fc6e8746e52915e655af4b86c629d4c522783635d464a2825777d89d7097677ef0e5eeae38537ecb656e3b28dd07358fd9fb2cd462517286659aefc79d374d1d13ed93967c530cdea4f314a0f91d6289b4c7a4279b6f4c4abca33357f69ed84b9119637adb7c18e694cb3c56e73637da910735d43c38aa8086675a06ad370e5726881da5e1a1dc6144d6a62aff7fb0c352d88dc971a3d72d3071e14b47425356af1b019233538261451a99a6cf4a07ce9ab1c3990de6ab8de2116c756105c512b7a3eeb3157b158b321e444e806d890b3890ed9ddc869f1711723bb99a72bdb923d131ba4edbfbb6dae99a5c7b328d310df9a6d1dcd85918962833e89e20f5c5e6333ac861094ae9e799c8641b9baea11a2e0ec234be5930e02880859cdec0d978237cbea5c7c32c111bafdd4bfbffe4fb3485effecd51bd195a71404ca5b59afa252d7b5ff9d030f48c6faadbdba918f21a0cd39af56966dccfa25fb5a5cf9a4b26a7f5441df6e320e34b27393de2ecfbd69a1594909a6c685ec645fcf3048d0148fa38d3e8a64dc3c21ae44da7e46a5ea7936c2ba083689a78ca3ac60b87be6d23ea40f5961583742842e37525a49c5fe8fd15d7b0c9e8fccd07936d19538212f7373dbbf3df7d46adf9d9f5db09524c65b883ae6f6cefa24b19ec48ce28cfa734d9bd6e77837d1a14d6a19d345bfbea559e7e6bfb71ddad83cd8deeab687fe73c057488f8f2b3e2e26d13009f4d23e6619a23c0692af76669217d5ebd46085b398890e5c91fdb4db5ba40e7773d518d3cf00c0a5b5a4b0f1b85d62916a59e5607b7b1eb80\",\n        \"signature\": \"e55f8d304122dc175cf0274674fc9dedfec2b5f8a2eeb1e3e7f8e0dfba0dac2d32f4e704ce91cd599184133c3bf1063d2fae63d73acc5772d718d81183318602\"\n    },\n    {\n        \"secret_key\": \"e9cf16d696f63b59e5e25c9ee2d75bb05ed2baa591a7557f9fb129cf983de0ba\",\n        \"public_key\": \"6d1ae385e80a3955e8d0c593a81f431cd432671e78cdbafe83fe58dbcdb98560\",\n        \"message\": \"a10fea8fc93eccfe2a6b7826079563adf8aa9a666444932200cca9447dd027c5c7204ea62bf8f5e2e39145ac3948ab3f3186887b30bc60233024b483f3f519036a3e94c8d7510a853ac6e20c6e526ee3cdb76de663f67305ad80df2342c8501b4f4a8ee3665a798fc437dd814e4e47e7a466890e0ffa8f510f3e6e19c9c969f70a76e5cf3054d17de459ac8ee99550bd38319f36e433434a926ad68b961e0ca10add4ba992b3650660a2c3c26f5d740a31afb7763f542f723b8a3c92d8ae92a567764efc70530312baabdd3fbbd527fe0fcbca3f6a7064cdde1856e97ab786af7d7022a9d46a338e8e1754afd9adac856a38de2a4c9766dee8dbc709b0671a6a6e6e1e5d12074d22245cd73beeeb1bd8ecfc1e85a21bde253f7c465abc1feaa961c0ff5cff2d896472ae17ab8488e33ffefdb72c105e204f944ada51ee13981a136c0f38426e3e49b0e91841c32794d52f1335dfa637f151c7e40f9b830aed539ac5731b81cde3264d22bead31a6cc68d1a73143b5ba4816139232f3f7f97983f4ecba64c49553be9d6d943f91dfe03d1ee8618cd40d2fb7238a31d1bc38e76a551f9eee22e73a27d7a48b408772ea72c3ed637bb4b168f9d7aead94ea03bc11109901c889927d51cdacf962125962559979d3e4c8e3b5ae582f2dbad4998802856c4df69e8fb54917e2f36bb67a19a26e9a9a9485bce98dbfff0d2b02b9377a9137a734e57b5ce665053017e992677a1aa079240d2cf963cdf9bfea8d460091232daf89801fd75171a6195a5c046815914be1f62868783d6f2cf28af9378d6c6893e75de641111c684727effa31b8bc9b0a01db9c9e81ccd8f4d4e875d4bd90d253f58989a8a52a203a77a496d697986b031e9f699bc6a16cd5f9c36018ebdaa36bad0e014f4cf3b4b746171bf89314e8b72cbd47cc616a\",\n        \"signed\": \"8112ac37eafb749d3f4a1ea1484379df3e383b019c12de8515e349e4f6f998632e30968347a1d15b09da2eb800b03d819d202bd10a6a463bb02b366d6855fe0ea10fea8fc93eccfe2a6b7826079563adf8aa9a666444932200cca9447dd027c5c7204ea62bf8f5e2e39145ac3948ab3f3186887b30bc60233024b483f3f519036a3e94c8d7510a853ac6e20c6e526ee3cdb76de663f67305ad80df2342c8501b4f4a8ee3665a798fc437dd814e4e47e7a466890e0ffa8f510f3e6e19c9c969f70a76e5cf3054d17de459ac8ee99550bd38319f36e433434a926ad68b961e0ca10add4ba992b3650660a2c3c26f5d740a31afb7763f542f723b8a3c92d8ae92a567764efc70530312baabdd3fbbd527fe0fcbca3f6a7064cdde1856e97ab786af7d7022a9d46a338e8e1754afd9adac856a38de2a4c9766dee8dbc709b0671a6a6e6e1e5d12074d22245cd73beeeb1bd8ecfc1e85a21bde253f7c465abc1feaa961c0ff5cff2d896472ae17ab8488e33ffefdb72c105e204f944ada51ee13981a136c0f38426e3e49b0e91841c32794d52f1335dfa637f151c7e40f9b830aed539ac5731b81cde3264d22bead31a6cc68d1a73143b5ba4816139232f3f7f97983f4ecba64c49553be9d6d943f91dfe03d1ee8618cd40d2fb7238a31d1bc38e76a551f9eee22e73a27d7a48b408772ea72c3ed637bb4b168f9d7aead94ea03bc11109901c889927d51cdacf962125962559979d3e4c8e3b5ae582f2dbad4998802856c4df69e8fb54917e2f36bb67a19a26e9a9a9485bce98dbfff0d2b02b9377a9137a734e57b5ce665053017e992677a1aa079240d2cf963cdf9bfea8d460091232daf89801fd75171a6195a5c046815914be1f62868783d6f2cf28af9378d6c6893e75de641111c684727effa31b8bc9b0a01db9c9e81ccd8f4d4e875d4bd90d253f58989a8a52a203a77a496d697986b031e9f699bc6a16cd5f9c36018ebdaa36bad0e014f4cf3b4b746171bf89314e8b72cbd47cc616a\",\n        \"signature\": \"8112ac37eafb749d3f4a1ea1484379df3e383b019c12de8515e349e4f6f998632e30968347a1d15b09da2eb800b03d819d202bd10a6a463bb02b366d6855fe0e\"\n    },\n    {\n        \"secret_key\": \"238a6d4979321a14a997236f4585046cf7a05c0adc6ba1fdb19ec2a32f62beeb\",\n        \"public_key\": \"0b4ba674e401665b6790cfda080704cd90e2f3d3efab253ed8dcfbd18e406789\",\n        \"message\": \"97cd619a2251eda916646431d4cd1598c2d44d06af3e48bd18e3de7fb4bd4f78e00a69eeabde3f82065cfee6cd711f07d22637161ff685f65a7ddf54553197fd31c5c6b71d9e365a941dce4c3e225d19cc633a7e12862cd23ebb7c74a704850f761ac0241be517ce7c360936ce07250d9f2eb2787115eec377e1134dc08f44eb0a2a2a2716f00144a49f012a57b3cd06efeb3fae920f285cffd9a401a0b986594e17b2c9c8fdab835d9f3f5d474be733c1925ee6f09386711066c3fcd645eeb0fbe7054169eb709d4a3f0d16f28a1ff5066c842bc63e359e92485b38757ff46c27f79d0cdcf0e16e97e3c7b7e2178dffd270282dd61205d5854d841f0e3fc0e482cc1ee48552cfe658935b5427c366230aef79aef4021d6fab5f1875cc849e321a75500e9e1ba5dd596b438cf88b235b01a67625c4bf84d0724ae6880a3785e33bd9235fd0f5981804d21cbd633cb180f34456460207a290a254d9fe61063d40634ca3872f0935fa28328795ca41b006a2111fc5932b1e779ce966cc47adb7c0dd987333ba7529a1a4996ce9f56e051981fe1f553e578f43c3ba94beacc93c3e739667c7a7c6fa27e1e081695d20ba705c3f10b20df530cbb0ecb87456501109687019318452785d38e766b3cd35b007d7e3cfe0b2cca8aa6ef7395599dcb9c4d28bcc35c76dfc35343cb1348ba3e962f10ee86f86f5b6d4cae2e8c2b185e3eaa1aeb87bcfcf2fb76cc7fcc6895071b168e8b7f6caa0fd6398e778cc07912ff5d6e61021a8a59ae0352160f56d5488fe2f2acc9403da9a9ffc661c1e9dc5be88c420db0fd77d845dc8dd9d8e58f9961b79afc68624baa86aa643a8a3c7edf71d553cc0d3224a6069ec674f52da29a1cb60c4192301a24347a8aa8326269e0a14780c9583cdff515927fd5bef528f9d23787aeb803d70eb916b\",\n        \"signed\": \"2942f708c0ede4cb0ddef13b85d71d7213e0383dd294f534135fd69cafbcfc0e33090a2a0ca3fa572c72cdf5592de903b1584495ab63998150f2b393a3b3400c97cd619a2251eda916646431d4cd1598c2d44d06af3e48bd18e3de7fb4bd4f78e00a69eeabde3f82065cfee6cd711f07d22637161ff685f65a7ddf54553197fd31c5c6b71d9e365a941dce4c3e225d19cc633a7e12862cd23ebb7c74a704850f761ac0241be517ce7c360936ce07250d9f2eb2787115eec377e1134dc08f44eb0a2a2a2716f00144a49f012a57b3cd06efeb3fae920f285cffd9a401a0b986594e17b2c9c8fdab835d9f3f5d474be733c1925ee6f09386711066c3fcd645eeb0fbe7054169eb709d4a3f0d16f28a1ff5066c842bc63e359e92485b38757ff46c27f79d0cdcf0e16e97e3c7b7e2178dffd270282dd61205d5854d841f0e3fc0e482cc1ee48552cfe658935b5427c366230aef79aef4021d6fab5f1875cc849e321a75500e9e1ba5dd596b438cf88b235b01a67625c4bf84d0724ae6880a3785e33bd9235fd0f5981804d21cbd633cb180f34456460207a290a254d9fe61063d40634ca3872f0935fa28328795ca41b006a2111fc5932b1e779ce966cc47adb7c0dd987333ba7529a1a4996ce9f56e051981fe1f553e578f43c3ba94beacc93c3e739667c7a7c6fa27e1e081695d20ba705c3f10b20df530cbb0ecb87456501109687019318452785d38e766b3cd35b007d7e3cfe0b2cca8aa6ef7395599dcb9c4d28bcc35c76dfc35343cb1348ba3e962f10ee86f86f5b6d4cae2e8c2b185e3eaa1aeb87bcfcf2fb76cc7fcc6895071b168e8b7f6caa0fd6398e778cc07912ff5d6e61021a8a59ae0352160f56d5488fe2f2acc9403da9a9ffc661c1e9dc5be88c420db0fd77d845dc8dd9d8e58f9961b79afc68624baa86aa643a8a3c7edf71d553cc0d3224a6069ec674f52da29a1cb60c4192301a24347a8aa8326269e0a14780c9583cdff515927fd5bef528f9d23787aeb803d70eb916b\",\n        \"signature\": \"2942f708c0ede4cb0ddef13b85d71d7213e0383dd294f534135fd69cafbcfc0e33090a2a0ca3fa572c72cdf5592de903b1584495ab63998150f2b393a3b3400c\"\n    },\n    {\n        \"secret_key\": \"59d501393dc5999723810706fad7d6efd163c44710c741c185c27e0425e3c05b\",\n        \"public_key\": \"8265d43cfb0735b5d7250fcf0fcbd154bfc0eecb13b7ad93b6b02940588b843b\",\n        \"message\": \"564ed22c172f5c3afbb0b95ad2fc64e4be6d4db1ebb8d399c43a5e16048e7f8732181e5d0eed8e638ef2a55aa0d7b681fe02bb5423af94bd352d3c2ddec0f84760a4112b4fe017cfbc502f9543cfa41fb2aae75a3a081f8c499033d1fae5d9c50cb44dbc63605a54398fbf079852eba86f2fdfc272d0c4179d7c13cbc1c2a3da0b82845cf1a46ebbe31e79b6009733c7bfe7aa4f9ffd719c77dc7d748e492e14ee5e4179bfa9e649cf0d89534186385ee99410051d6656e623438cc7b2e707e48c84915549ae8d67a306c67b106b7a25f45f8e10dd7dd3eaac31f1052257eb6a7576b685cb9e6c1cd0d73c7a3ced5a8dd27308ae00f95eabdae9d1c4aa8934e2424c9328a5228f4f82dd4a66556d8217c5a22b2beb86a2a43413ee5e10f883f2cd6c2e8749b5508842ecae5ffccb796d9633e87ef4a96c0df7ef47b283d096723ba3135bad75b2e19ec04f70a478428ad5d0aac0dd2ab9905913e7e5ade408801d5d3c54d9cf7b8f0f0c5eb054c1475cc210a2c798d8bd89932ff9f360421858053a707b8bbd32055c44b20712a2678a9a6af9e36d04dcff44f431cf1930cd18fc935d2267775c69096725ed89a291dd60e21ac0b0128734072992823ef87b5efa6cc5b050177f55f4cec92a08a65bcadcab9a41c36086370b7b9dd6298ac7b0ae6a09c9710abb4676a8fc87a3651290144b6b30ef4f6fbe5b9ad25237fe0605e3b9f18a7718ac9fca6f325ea55f49a807fb80a2402ae13423080d327758649023798d5728e0dc64ac88a6e2945dbb3e3ffa9fdb4c7b58fba3f5fbd67c686b2971bbd8ba4d275d573eb796eb9146775d8cdcd5fd3eb5a88ea5a930ec3244e6a37c81f6a2554e5ba787f0e45319fe4b8a2ffbfed50770e7827b3e7bc2b44ce512ae6051b6f9f13931ea6acc096b8dcb0196be422484db5fcb299d\",\n        \"signed\": \"e646f164cfed8c2e060710dcfbc3e9fa5eb396376813190184e346f52bb0ba5746ccb6b59522b1aff9830f2f98b9e5dafcd832077883c44e8a35388f718bf40c564ed22c172f5c3afbb0b95ad2fc64e4be6d4db1ebb8d399c43a5e16048e7f8732181e5d0eed8e638ef2a55aa0d7b681fe02bb5423af94bd352d3c2ddec0f84760a4112b4fe017cfbc502f9543cfa41fb2aae75a3a081f8c499033d1fae5d9c50cb44dbc63605a54398fbf079852eba86f2fdfc272d0c4179d7c13cbc1c2a3da0b82845cf1a46ebbe31e79b6009733c7bfe7aa4f9ffd719c77dc7d748e492e14ee5e4179bfa9e649cf0d89534186385ee99410051d6656e623438cc7b2e707e48c84915549ae8d67a306c67b106b7a25f45f8e10dd7dd3eaac31f1052257eb6a7576b685cb9e6c1cd0d73c7a3ced5a8dd27308ae00f95eabdae9d1c4aa8934e2424c9328a5228f4f82dd4a66556d8217c5a22b2beb86a2a43413ee5e10f883f2cd6c2e8749b5508842ecae5ffccb796d9633e87ef4a96c0df7ef47b283d096723ba3135bad75b2e19ec04f70a478428ad5d0aac0dd2ab9905913e7e5ade408801d5d3c54d9cf7b8f0f0c5eb054c1475cc210a2c798d8bd89932ff9f360421858053a707b8bbd32055c44b20712a2678a9a6af9e36d04dcff44f431cf1930cd18fc935d2267775c69096725ed89a291dd60e21ac0b0128734072992823ef87b5efa6cc5b050177f55f4cec92a08a65bcadcab9a41c36086370b7b9dd6298ac7b0ae6a09c9710abb4676a8fc87a3651290144b6b30ef4f6fbe5b9ad25237fe0605e3b9f18a7718ac9fca6f325ea55f49a807fb80a2402ae13423080d327758649023798d5728e0dc64ac88a6e2945dbb3e3ffa9fdb4c7b58fba3f5fbd67c686b2971bbd8ba4d275d573eb796eb9146775d8cdcd5fd3eb5a88ea5a930ec3244e6a37c81f6a2554e5ba787f0e45319fe4b8a2ffbfed50770e7827b3e7bc2b44ce512ae6051b6f9f13931ea6acc096b8dcb0196be422484db5fcb299d\",\n        \"signature\": \"e646f164cfed8c2e060710dcfbc3e9fa5eb396376813190184e346f52bb0ba5746ccb6b59522b1aff9830f2f98b9e5dafcd832077883c44e8a35388f718bf40c\"\n    },\n    {\n        \"secret_key\": \"839fb132e69250ca1ad94510087f92ce068769213a19b2a6c89490f1f578807a\",\n        \"public_key\": \"eb586619b44a15379acc4621a2ac71ea58970026c28e2409fc1ba2bd8b236d1d\",\n        \"message\": \"c57232fe32f11e894b437d40456207cc306db48169b20e0781103affe802f5aabe8582952ca8e95745e9940d535e00ff65ab3c64bed3d1173a0f3d70ce4ebe2b50d048bb47164d2a2cd9d95a10cf0d073ed1c41b3de333528ee32968223a0d847cadbb5b69f382164e9a28d23ec9bde9a828e8771c9eb49220af54185508aa073a839195f103bc2f32fe04f951ca45bfbf30d2fb8114056a736addf27ecd9af0f6e5e97e5773c4fa902268c32a151410955f3c76aae255549e0f033f89e1a78f265cbab6beb7516d4badc49cda4588316225b4c85ea9fa99c7d6766e9490c49de59da717f667653530071dd2f0c53e31d8768156feb08faf00db0a04533df97957a84aa46aeb7e36c0b0be69018946f1538a6aea71df536f1442c2444a43a043d046abde1a782b0f4f5c6aa720aa60afed947c0cee477dbec00557b37212d93357ca2b6b6f82715ba0e484f6daf2d0b7a98c033519ce38263586796d5d31cb2bc3d1125bc0ccd329a5c21fd27a218ded607a0e7515b571f192c33f5fba514afe4d458100f3ccba3f38eb430b4fc88faef999fa71eee488228903be29f24df81dc911044e924cdaa017cc7d87e56a6cba8760859bd63dd2d4f581b955ec924a49afb47ca0d63e7826fdc712b4943b739e1857755a33c6503675fddeae062706e34f744fd932648a5608ce608a61995783f3339ca3fe107e1972744bf6d4edafbf47ce021e05821fb124c7083930e68e6f5c32d2d9fc4a884c0bc88404e4cfe3c1a2420d41823a385fb3288db65c89545f6e73f0d8004b2ba12a4e07727523ef085670daffaf41c28a4c1157bdd245e68750dd200e023af90c67561e0fe4ba340c433f755eefabd4b039bfc323dc11adb75aecc448a869c7f2a58b9d8617c64b8f89fc583f8c948e2df0251a6c7d8c738c3b5a42b749ad5e8e986bd8\",\n        \"signed\": \"66437b6bc05e75dd1626c3c4ff1f72e6db381ba1590948f8f16ad4d66e5991659aa84405568cfbc0a77c025e59e43fd53ab9ffabba7b258f78796239f90d4501c57232fe32f11e894b437d40456207cc306db48169b20e0781103affe802f5aabe8582952ca8e95745e9940d535e00ff65ab3c64bed3d1173a0f3d70ce4ebe2b50d048bb47164d2a2cd9d95a10cf0d073ed1c41b3de333528ee32968223a0d847cadbb5b69f382164e9a28d23ec9bde9a828e8771c9eb49220af54185508aa073a839195f103bc2f32fe04f951ca45bfbf30d2fb8114056a736addf27ecd9af0f6e5e97e5773c4fa902268c32a151410955f3c76aae255549e0f033f89e1a78f265cbab6beb7516d4badc49cda4588316225b4c85ea9fa99c7d6766e9490c49de59da717f667653530071dd2f0c53e31d8768156feb08faf00db0a04533df97957a84aa46aeb7e36c0b0be69018946f1538a6aea71df536f1442c2444a43a043d046abde1a782b0f4f5c6aa720aa60afed947c0cee477dbec00557b37212d93357ca2b6b6f82715ba0e484f6daf2d0b7a98c033519ce38263586796d5d31cb2bc3d1125bc0ccd329a5c21fd27a218ded607a0e7515b571f192c33f5fba514afe4d458100f3ccba3f38eb430b4fc88faef999fa71eee488228903be29f24df81dc911044e924cdaa017cc7d87e56a6cba8760859bd63dd2d4f581b955ec924a49afb47ca0d63e7826fdc712b4943b739e1857755a33c6503675fddeae062706e34f744fd932648a5608ce608a61995783f3339ca3fe107e1972744bf6d4edafbf47ce021e05821fb124c7083930e68e6f5c32d2d9fc4a884c0bc88404e4cfe3c1a2420d41823a385fb3288db65c89545f6e73f0d8004b2ba12a4e07727523ef085670daffaf41c28a4c1157bdd245e68750dd200e023af90c67561e0fe4ba340c433f755eefabd4b039bfc323dc11adb75aecc448a869c7f2a58b9d8617c64b8f89fc583f8c948e2df0251a6c7d8c738c3b5a42b749ad5e8e986bd8\",\n        \"signature\": \"66437b6bc05e75dd1626c3c4ff1f72e6db381ba1590948f8f16ad4d66e5991659aa84405568cfbc0a77c025e59e43fd53ab9ffabba7b258f78796239f90d4501\"\n    },\n    {\n        \"secret_key\": \"adc1e56c3ac94e6cda0411cbc3ce2af128d185a2a273bdb2af8d7e50fb96b526\",\n        \"public_key\": \"5dcfec1f9112751564ecb60715ebb2c517b5ec37b2534fd6329924429b7fd5c5\",\n        \"message\": \"d4f959474e0b89e2dcd02066984f88d739dd1134a33309f0a8b7802eaf013303c13515dfeb461ea3d248e998b9a4e54dae5b00190a45e70dc67e98f3d4cf906c214d4f636d2952925e22b1a86a1aabb3a892a9f8ed454f39c63d35b71e87a2da55a8e167ac83a866ad167a17aed183c08518c15e6be34858b4cee2b8427314760fffddd5923854b1747f796e1a5249fb3044894ed646829f654316ee52f4010c8dd321fa1dec397e50145ed9e31686fd5203f7233b8da780acaa91ee0b5b47207866aad85f837e03b4e6f6de8c04acafd707bdc1dd45500ab564801bee9a58ece360d004828baaf523e2f5ab69326a03aabe010878fd43ffaa56872244d7681f1618e623e3d474c73af8b080a61821a574ef2fd752d23b605ec521c19c1550de980c094d05e0238f3e008e6b195abfdd4028ee1ee1d6c66a76f178f0b431e4af44ddccfc5290edff36ece63e8385567013f43a2aebb67e3ef406308c20488a76d58a214f3139d983b19afb12e3283607fd75107bd31feb6256174b7a18aecac9f8562582018b0e6de40535e35bef2b562553885129397562900d3417f98cdd1e29d731ff48933f2952958163ba67d59561811b83772bd05710b6e3cc0434609937507223abb71a6a8c838fecdb1d2d37c95dc806f65f3f9663d99f06e6c0f3c32e95af1dd708e81108636a26b968e98339c74128b6cf671335884ac72f75b637195ea9eca053608996c32ed445410f67fa104b39f0fdf3c9b5c6157b76803756b27f4c3ba1b47f328576248e9bc53e7b8ab0b2ed97c2f9998bcc7dfe39e264aad30c6cfef2b5553ffb5a699aa4bd0eabe438ce0522cc91fe4e72bf7eacba4771ccf63a37aafcadbfbf99dd76b85b80ee075d3a7d1a90a55b7729a5416e5be696bf9fb7f3158cfdb5cfdacdde8172ee1ab9486e24ccead29b457acf43\",\n        \"signed\": \"f02e5dbcb68704afad03aca81061dbdb998570049f10ce650ec7a2eff15c793ddf5a272cb683c22c87257c59bdef39efea79bd679556ea1505ed0036cb46040cd4f959474e0b89e2dcd02066984f88d739dd1134a33309f0a8b7802eaf013303c13515dfeb461ea3d248e998b9a4e54dae5b00190a45e70dc67e98f3d4cf906c214d4f636d2952925e22b1a86a1aabb3a892a9f8ed454f39c63d35b71e87a2da55a8e167ac83a866ad167a17aed183c08518c15e6be34858b4cee2b8427314760fffddd5923854b1747f796e1a5249fb3044894ed646829f654316ee52f4010c8dd321fa1dec397e50145ed9e31686fd5203f7233b8da780acaa91ee0b5b47207866aad85f837e03b4e6f6de8c04acafd707bdc1dd45500ab564801bee9a58ece360d004828baaf523e2f5ab69326a03aabe010878fd43ffaa56872244d7681f1618e623e3d474c73af8b080a61821a574ef2fd752d23b605ec521c19c1550de980c094d05e0238f3e008e6b195abfdd4028ee1ee1d6c66a76f178f0b431e4af44ddccfc5290edff36ece63e8385567013f43a2aebb67e3ef406308c20488a76d58a214f3139d983b19afb12e3283607fd75107bd31feb6256174b7a18aecac9f8562582018b0e6de40535e35bef2b562553885129397562900d3417f98cdd1e29d731ff48933f2952958163ba67d59561811b83772bd05710b6e3cc0434609937507223abb71a6a8c838fecdb1d2d37c95dc806f65f3f9663d99f06e6c0f3c32e95af1dd708e81108636a26b968e98339c74128b6cf671335884ac72f75b637195ea9eca053608996c32ed445410f67fa104b39f0fdf3c9b5c6157b76803756b27f4c3ba1b47f328576248e9bc53e7b8ab0b2ed97c2f9998bcc7dfe39e264aad30c6cfef2b5553ffb5a699aa4bd0eabe438ce0522cc91fe4e72bf7eacba4771ccf63a37aafcadbfbf99dd76b85b80ee075d3a7d1a90a55b7729a5416e5be696bf9fb7f3158cfdb5cfdacdde8172ee1ab9486e24ccead29b457acf43\",\n        \"signature\": \"f02e5dbcb68704afad03aca81061dbdb998570049f10ce650ec7a2eff15c793ddf5a272cb683c22c87257c59bdef39efea79bd679556ea1505ed0036cb46040c\"\n    },\n    {\n        \"secret_key\": \"db89df6a23d890b7f00260e81f4ad98fd09440365131e85e22c7951a187b0218\",\n        \"public_key\": \"c96763672ee4a2cc5a93b6a683df9b5de4d9386a790835681d1217d19296bdc8\",\n        \"message\": \"54c1c5111e08c98245ba4f1318ba1db1dcc74d14a5c98ab9689cba1c802c68bcfc81fd87ffc61caa942f66d7e5157f65538c7e7b33170484b4b6543f3620ff29638b64d4dae7b02221cf7783f187ec4231e6b6946d82762074f09c32781c2f3846de3e8217f6e1b6e0d2b5595d742e2c4e325a2841924044dfcf12b479eb69f1bbd40eabddd1ff54a9184d366dff9d8f2d863e378a41f10cd1dae922cd7fbb2a544e47eabf47ca0a38abba34454919bb9a4ef044bfb97b708c2f7428d68f9c57c0ee7e7925f7a2b5c6e7df82bb2680c862dc7cc68b0f54530e64afe2763d9c7baf45cc6fe612d1f7827739c4411398888f7367c3d4377907acc06a06f93f887226798f48aa5464f601c2c1edda77edfeb9b9b5d5f9cb6fed37900547477fca1d09ab52d63e491feb12fd6dc805a78cee3baade4352982061dea5a2653db8e7607772e834b3a505c16dd6e7c71b911e842eba925d77a33c5c57ce1184098078ca2e6a3f69aa6a14639dc97b4b30c99dc4fa3e2cf63c701c306c5e253c5113854c185ebc8b4798f68d1fd780054d3eed2f394c454304966bddbd12280834ec9b40c1e98bc2d98f4845f6eb44f25315eedb3b79ffca4180c1bddd97d0c9affbac58814937682680076fe5a3babb65d28f2517036c0cfb42f0293eb2acb13949fe91e0ad0678aa243d7734a89d997870bf9a6a584ed6e628163e39d8aa610d46b9285b9e1dd7e8f807fdf5ca2bbf6de5e5e68af7cb7ebd43ecce227cd70c7bf4ee1433edfcfe886614670cdd196343fb91e15416d2f6acbae3eadc030231ee9d2ecc52a88ce8dc7d098e7fac77685b4eb540e3019307143221b8ef77f3632c893d556e0bb743a1963ec15886c8545e87c95cc825f200d0f3cf4f55a3d660a536a23aefcc428a43203485ee84342f5c001ee8404e759017006282ab8ba8903e\",\n        \"signed\": \"80b7fc8b6ae6eece8166b7ea534cb5b214c9ea9973921ed05de40c78e14f162b09e978ca6d86ee434d984b8b0070409dd2ad11b53178e239dab5bc39c7ba460d54c1c5111e08c98245ba4f1318ba1db1dcc74d14a5c98ab9689cba1c802c68bcfc81fd87ffc61caa942f66d7e5157f65538c7e7b33170484b4b6543f3620ff29638b64d4dae7b02221cf7783f187ec4231e6b6946d82762074f09c32781c2f3846de3e8217f6e1b6e0d2b5595d742e2c4e325a2841924044dfcf12b479eb69f1bbd40eabddd1ff54a9184d366dff9d8f2d863e378a41f10cd1dae922cd7fbb2a544e47eabf47ca0a38abba34454919bb9a4ef044bfb97b708c2f7428d68f9c57c0ee7e7925f7a2b5c6e7df82bb2680c862dc7cc68b0f54530e64afe2763d9c7baf45cc6fe612d1f7827739c4411398888f7367c3d4377907acc06a06f93f887226798f48aa5464f601c2c1edda77edfeb9b9b5d5f9cb6fed37900547477fca1d09ab52d63e491feb12fd6dc805a78cee3baade4352982061dea5a2653db8e7607772e834b3a505c16dd6e7c71b911e842eba925d77a33c5c57ce1184098078ca2e6a3f69aa6a14639dc97b4b30c99dc4fa3e2cf63c701c306c5e253c5113854c185ebc8b4798f68d1fd780054d3eed2f394c454304966bddbd12280834ec9b40c1e98bc2d98f4845f6eb44f25315eedb3b79ffca4180c1bddd97d0c9affbac58814937682680076fe5a3babb65d28f2517036c0cfb42f0293eb2acb13949fe91e0ad0678aa243d7734a89d997870bf9a6a584ed6e628163e39d8aa610d46b9285b9e1dd7e8f807fdf5ca2bbf6de5e5e68af7cb7ebd43ecce227cd70c7bf4ee1433edfcfe886614670cdd196343fb91e15416d2f6acbae3eadc030231ee9d2ecc52a88ce8dc7d098e7fac77685b4eb540e3019307143221b8ef77f3632c893d556e0bb743a1963ec15886c8545e87c95cc825f200d0f3cf4f55a3d660a536a23aefcc428a43203485ee84342f5c001ee8404e759017006282ab8ba8903e\",\n        \"signature\": \"80b7fc8b6ae6eece8166b7ea534cb5b214c9ea9973921ed05de40c78e14f162b09e978ca6d86ee434d984b8b0070409dd2ad11b53178e239dab5bc39c7ba460d\"\n    },\n    {\n        \"secret_key\": \"00e6bb17af3c2df652b34f9abe19f99019074233686c7114e3a0edf08309934f\",\n        \"public_key\": \"7b8232a66cec2f915aaa7951d29d2b9ee93d321d15b203c51e61e8ce83d187f8\",\n        \"message\": \"063281e41e8ba9703ed09ef3bf0ea46e4cabdd6ebd769d05dc045d4f990d69fc554130a4e61aa21e2de4c92db48a20a37b1747a7eac5ebb2735a8938197f139fad1497b351ad064c0f18f8faf1fe11f63979a69968e24cf91e58a3ab032669e4efee274f96b58be7d9e391f36fcf0709b2cb2d22694a6ceb17246945ebb3bc7f0f03bf0b08dc9626e3e715c991671d53ebb9ae83a7d08d44f63635c40f8d4817f58de9eb77cb25b2acd6def969ab569e974a8adac11a86b58fe6c10067499fc914dff56902cbc393a71cc25e8f05c03c94f13b84a2b01a58c10dbcbb60ebcee487f529177466299925da50e2da5b5557f0aeee3fd7f47b5c2e3f84cefab4679691394dd122303bb769afb3adfe8358b02b679273b35abdc6402576ccce5e10442a137ef9456939b289ef4e417b1cc6239f7ceedd68f1a8264180e068b4966fd67f2bad6edd8b4a1e8d2b542daf26db831f1fb51eb86ffadeccd9ac3d664f346e7d046c33a572841ea8334e7f2f417a05712a9e334e487fd3ae175455162fe8f49cc026a640c6cf93cf58875052f41cc9820615653ea2d084c896eafe5ad4725579653084994f956d5c94590a2409581b6fc86e40aa58bf6e6057a6f90af3b87aeaf32994a55a54f79bdf3dbbf5ce0ff812e486b0545d9e9c2b0bce0d4c3647b1827262498834e198a3ec70f3b03d6aad2c49eb80b5e2051439225fd9ce9468d69af70a262ee3b8b62a8e5b41346da3012ffb45816b7becb0e79a60bff71636a3e4bb1b35caf195f55117280f787217b3caa2e793726fc5a74d1160dcad868904c197381134ed8c3db3750b7556f69ccce18b77388b58c5b8113e590ad6eac5b91ece5a6705025c80353ceb1ed84aaa1cc48a416bc016aef173bb80b2ba28c57960c6b011b6b495a3f3311e79fe46bdb6a4c381fb9dc4628b0a83023558f1\",\n        \"signed\": \"04b3b8501e396c4a788e14ac49f6174cdb5c855e651203cf68d1efa89aa58678d4d1f303a9877a3786d203c355b09d5286c1ca0df04a89aa06cc3f9d0fd30504063281e41e8ba9703ed09ef3bf0ea46e4cabdd6ebd769d05dc045d4f990d69fc554130a4e61aa21e2de4c92db48a20a37b1747a7eac5ebb2735a8938197f139fad1497b351ad064c0f18f8faf1fe11f63979a69968e24cf91e58a3ab032669e4efee274f96b58be7d9e391f36fcf0709b2cb2d22694a6ceb17246945ebb3bc7f0f03bf0b08dc9626e3e715c991671d53ebb9ae83a7d08d44f63635c40f8d4817f58de9eb77cb25b2acd6def969ab569e974a8adac11a86b58fe6c10067499fc914dff56902cbc393a71cc25e8f05c03c94f13b84a2b01a58c10dbcbb60ebcee487f529177466299925da50e2da5b5557f0aeee3fd7f47b5c2e3f84cefab4679691394dd122303bb769afb3adfe8358b02b679273b35abdc6402576ccce5e10442a137ef9456939b289ef4e417b1cc6239f7ceedd68f1a8264180e068b4966fd67f2bad6edd8b4a1e8d2b542daf26db831f1fb51eb86ffadeccd9ac3d664f346e7d046c33a572841ea8334e7f2f417a05712a9e334e487fd3ae175455162fe8f49cc026a640c6cf93cf58875052f41cc9820615653ea2d084c896eafe5ad4725579653084994f956d5c94590a2409581b6fc86e40aa58bf6e6057a6f90af3b87aeaf32994a55a54f79bdf3dbbf5ce0ff812e486b0545d9e9c2b0bce0d4c3647b1827262498834e198a3ec70f3b03d6aad2c49eb80b5e2051439225fd9ce9468d69af70a262ee3b8b62a8e5b41346da3012ffb45816b7becb0e79a60bff71636a3e4bb1b35caf195f55117280f787217b3caa2e793726fc5a74d1160dcad868904c197381134ed8c3db3750b7556f69ccce18b77388b58c5b8113e590ad6eac5b91ece5a6705025c80353ceb1ed84aaa1cc48a416bc016aef173bb80b2ba28c57960c6b011b6b495a3f3311e79fe46bdb6a4c381fb9dc4628b0a83023558f1\",\n        \"signature\": \"04b3b8501e396c4a788e14ac49f6174cdb5c855e651203cf68d1efa89aa58678d4d1f303a9877a3786d203c355b09d5286c1ca0df04a89aa06cc3f9d0fd30504\"\n    },\n    {\n        \"secret_key\": \"fbddf6e61e20d806e55917756de60d0c9a99976f646716ff2ff1312c54dd971d\",\n        \"public_key\": \"ac538fabad4380e60e977126e7695eeda5417d85f7d23db21bd0ad111116f05d\",\n        \"message\": \"3e9953ca55d0cd233b98833eb1bc79d3b55f18c8fa1c42027bca25579153b55da0c5a178b8386956d9a54183b24c91dc4be994847237d3666a0a0130fe19924bc0ee50896c35a2e16a29e2e2acf180bdd9379354687f0ece6882d26e980e686698043bb1b01213aa644a4f8d61f9b613e62eaa3576cea0b0b83f05ce2558ff6356495c45ede4a8f65b814ab8a7309403dfd43cbea90893939b7800aa00232b5f6b7714ebdcd8bcf34a5a7e822ac7b1b099ac615f135f8c351dc41ae5f66d5f9c2600454ca01c009ba6de04162ae5f1f270893ca3907aff7f78e03396e32b622ff340537bf123e55995e9209609330b2eee51127484a40e250700823feb0bc97bb509ff732675dec32ecb635ed92c7d78fe3050200cf1d941d6b388800a8419d96a595eced5ec4efdcb6f987f5472a5c43058d3a3a7bb56d7980365ed43dbc2be48f1d18ce76a89185426fd5c69df7e9291ab7823c23a76941ed3836aac7b58c0d5fb6b636c42471a4d1703516f03e935f31f195450e537b2a07d545ba4b68afb0638c65bb0ffaa0cfd69d7104819796619d483a0245b4fd9017f62a7d3a5fc3b7289d75735f287ca0a951ad58344b2ab7d7df8dbd7922a5abb8d7c2e79147e6d36ee31f930473b0727dcfd58d644d7d70a0ed31ca6a13ed9dbd224492efda19e4f8eed46180fe750f07bbe8e99854d13f58ba968ce3859d61189cd2b667f3b2d0665b574c4bac19d9e37e5b7a80eb334e36810530aa5d1766393f8115a52090c91823428c897a5f35e12a8af2cd4fb13907ca6603a4f76f5c2e02374a8dc3a47c1be6f1d1c8ebc59b36d1cfa0ab23e9b0ae9b0e637eeedb9c66bea62dc630cdefa718239617e3118e5b6deb7c294475282e8abe24fd5a54b786fff9028c5a033384e4bc8014dec8da100a94b178ef88ec357b66d2b9098ab64791696b1a66b\",\n        \"signed\": \"8c9b77aa0f1cf52e8f7a918b21b468e62335911bc59306b30ce77bf692c11059b0ee9c5daaf6839bb81373c61d28d072702b595e4dce28cb993822b24813040b3e9953ca55d0cd233b98833eb1bc79d3b55f18c8fa1c42027bca25579153b55da0c5a178b8386956d9a54183b24c91dc4be994847237d3666a0a0130fe19924bc0ee50896c35a2e16a29e2e2acf180bdd9379354687f0ece6882d26e980e686698043bb1b01213aa644a4f8d61f9b613e62eaa3576cea0b0b83f05ce2558ff6356495c45ede4a8f65b814ab8a7309403dfd43cbea90893939b7800aa00232b5f6b7714ebdcd8bcf34a5a7e822ac7b1b099ac615f135f8c351dc41ae5f66d5f9c2600454ca01c009ba6de04162ae5f1f270893ca3907aff7f78e03396e32b622ff340537bf123e55995e9209609330b2eee51127484a40e250700823feb0bc97bb509ff732675dec32ecb635ed92c7d78fe3050200cf1d941d6b388800a8419d96a595eced5ec4efdcb6f987f5472a5c43058d3a3a7bb56d7980365ed43dbc2be48f1d18ce76a89185426fd5c69df7e9291ab7823c23a76941ed3836aac7b58c0d5fb6b636c42471a4d1703516f03e935f31f195450e537b2a07d545ba4b68afb0638c65bb0ffaa0cfd69d7104819796619d483a0245b4fd9017f62a7d3a5fc3b7289d75735f287ca0a951ad58344b2ab7d7df8dbd7922a5abb8d7c2e79147e6d36ee31f930473b0727dcfd58d644d7d70a0ed31ca6a13ed9dbd224492efda19e4f8eed46180fe750f07bbe8e99854d13f58ba968ce3859d61189cd2b667f3b2d0665b574c4bac19d9e37e5b7a80eb334e36810530aa5d1766393f8115a52090c91823428c897a5f35e12a8af2cd4fb13907ca6603a4f76f5c2e02374a8dc3a47c1be6f1d1c8ebc59b36d1cfa0ab23e9b0ae9b0e637eeedb9c66bea62dc630cdefa718239617e3118e5b6deb7c294475282e8abe24fd5a54b786fff9028c5a033384e4bc8014dec8da100a94b178ef88ec357b66d2b9098ab64791696b1a66b\",\n        \"signature\": \"8c9b77aa0f1cf52e8f7a918b21b468e62335911bc59306b30ce77bf692c11059b0ee9c5daaf6839bb81373c61d28d072702b595e4dce28cb993822b24813040b\"\n    },\n    {\n        \"secret_key\": \"8a55e77bb0c8740b8c2e8ddfdfdb40f27e45fe81fe457111bf1c8730eab616b4\",\n        \"public_key\": \"9ff1fd0c50eb24f99fe2f7711d52872dfc900380dddcdb86fe6f4a5f350a8743\",\n        \"message\": \"20fb414e264a954784f112bace7e0474b39cb3c9e53dee0a21f4cf6d4a99b9347ddffbe281a6c230a75d63a72fd05f6db53ea7014ef7709d18ff970f485fe83ba1d37147338aded6da4cfdacc1e69d2f3e0ef362f47b5bcfb78a1e179eb5c5b106c8d82a0a0b290df075ab27436929cde656f02309f95750eb676583262e5f2f69f0ff72a8e057266382269205318740bfe06bf5c2cb4533908ef9f9f2869a75b9533579820e3bc0caffd646171c8286c3a4aba1ff0915d93611205e230f39ff4c4caf3f333e753fce2b71213e53d608415ee17fd48212eedd8840f337101ef0d0b6f7be4bffc06eeefe8066dd27a0541a468831acddc4902e2fefefbed19c308e5621e0bf46bcd538aa13faf04d380759c0e107e912001839dfd0b635440e9638f5377ca8450f350c01129ee33764415c53cb2ffbf968df78b742fd0665e78a34abf4decd1fd386289a1364e64555eec58b0af9a4cd6b36d1d5c611a2846dfb5589344bbbb02560241b74b993a25bef50fb1e7319086e6a23986300834ed2dba98a168721c2f784dfb8d3800d06a054aef14d1772b6c574af2563d193ef2e51bdc62d2abce2eebeada79203498e6686c287f37bd88aeb166f7dffc3e6ad0294117ef6ee9da8479ed8a16fe9be246d266804f29658db75e7a0873be71dc7d407e39fabd66f988b457477427fad8130f09ab665f1597c9046e7373af9a8352a86830cb92a804488700fe6891924fe2a7201733d95e591ee0a1fef1c2636078d370e7ad3b6a944fed2cf2b30aba2d56f3495b2849c03bb614f48bc4e507c395a6c35d3eed4c7be8e680f2d45a310b187eb88cf0e8ed4de7d37246a50a6367b97ee3784322c0b71131a283198da4804de751dcf70c4bad00dd98d873a69dd1a09cf69ddfad7ae603500b6a462258098d8b66b85293594e208829b5228fae2fafc39\",\n        \"signed\": \"8aaeba535c511c31d3f8e95cb077a9a7ec7d08441e5342a6abe0bf2a5d7fc930b43dac3d1e8ef2cb034552eb4d0839bc8bf294551dd2d80c53fd6279351ac20c20fb414e264a954784f112bace7e0474b39cb3c9e53dee0a21f4cf6d4a99b9347ddffbe281a6c230a75d63a72fd05f6db53ea7014ef7709d18ff970f485fe83ba1d37147338aded6da4cfdacc1e69d2f3e0ef362f47b5bcfb78a1e179eb5c5b106c8d82a0a0b290df075ab27436929cde656f02309f95750eb676583262e5f2f69f0ff72a8e057266382269205318740bfe06bf5c2cb4533908ef9f9f2869a75b9533579820e3bc0caffd646171c8286c3a4aba1ff0915d93611205e230f39ff4c4caf3f333e753fce2b71213e53d608415ee17fd48212eedd8840f337101ef0d0b6f7be4bffc06eeefe8066dd27a0541a468831acddc4902e2fefefbed19c308e5621e0bf46bcd538aa13faf04d380759c0e107e912001839dfd0b635440e9638f5377ca8450f350c01129ee33764415c53cb2ffbf968df78b742fd0665e78a34abf4decd1fd386289a1364e64555eec58b0af9a4cd6b36d1d5c611a2846dfb5589344bbbb02560241b74b993a25bef50fb1e7319086e6a23986300834ed2dba98a168721c2f784dfb8d3800d06a054aef14d1772b6c574af2563d193ef2e51bdc62d2abce2eebeada79203498e6686c287f37bd88aeb166f7dffc3e6ad0294117ef6ee9da8479ed8a16fe9be246d266804f29658db75e7a0873be71dc7d407e39fabd66f988b457477427fad8130f09ab665f1597c9046e7373af9a8352a86830cb92a804488700fe6891924fe2a7201733d95e591ee0a1fef1c2636078d370e7ad3b6a944fed2cf2b30aba2d56f3495b2849c03bb614f48bc4e507c395a6c35d3eed4c7be8e680f2d45a310b187eb88cf0e8ed4de7d37246a50a6367b97ee3784322c0b71131a283198da4804de751dcf70c4bad00dd98d873a69dd1a09cf69ddfad7ae603500b6a462258098d8b66b85293594e208829b5228fae2fafc39\",\n        \"signature\": \"8aaeba535c511c31d3f8e95cb077a9a7ec7d08441e5342a6abe0bf2a5d7fc930b43dac3d1e8ef2cb034552eb4d0839bc8bf294551dd2d80c53fd6279351ac20c\"\n    },\n    {\n        \"secret_key\": \"163b0cb6a12e8f07b0c29d6a63f6a652ce497270b5e46fcf833c99bd843f8c64\",\n        \"public_key\": \"68a35de4ba6f0f82ecf4b1e0df8e24cb4f18f2103ff04dc1b5333991b6d314ba\",\n        \"message\": \"56a1603f725be07613058cdb3acdc52354e3bb1ff2bed13f895175b15c8c5a90ffbe46b11a06cfe362dadf7323c940417255aa7aa54312103e71463daa0b5cdaebd0be723c732273e3c3f5bf7aa3519d69df6f4770daa1df8280bb3cd2c714ac030200546579f56c60b91ae11f4cf874a35fc59b354bed80f56e11a6cd62a88ce6b4f6bf39d64ce3d80409825f90162c3d96d10e478607365f7a241e71af980042fec2d68891e0c8a37c58ec4e600fd581e790b0aae8e09f35d4cc1876df434b80eee05369f848fc4930577d1684275888f3259cb47376c5169c9937f855a96a9e748ad0a69ae4ab2f2f1744a392f9acc6209975b784984cb12f98292c36a53221994abc56f9a66dae4560b79356ff47e128c0796a7fb0e0bbc9600af48e49eaa9427cf6eb6620b10cd2c085b0b342004d5b0d3edc11d29242a4638780762c9dc6069b66bd84973b5011961ce56db58bdaf48e6be12ab9ad24416297004d02914b959f54e092f8cd4365fa6ab78ddbff4ce8dad4e2f53a05c0cc499bfb47814a2713551dcd19d447f627576ea4ea4bbda8bae18a6465ced747ea17180b009f01212160482b0433aac68e67644d00f41fdf9990b9e11117634deb139b1a40ad3fce4299a17fe1dd225301c7f8d8010a796dc79c13307d3ff992a88be664d4c886d68ca9e4470cfbe63ebffc424010e372b6922aa95c801d1e9406da4bc188ca82066405bcdb3eafc937629b3263dc7d50ee5278ccec6f11d5517f56bc269c873691e7eb53faeff07564ab46b403f15d9e0e692486ee098e7b51b42813469b8235042233ca3f9c4f8ff24a571f47e0adf9144aea488a2d2dd001e31fc961e05c3e85f0d981407c873158bb0d35bafe4b60422e67551e970165ce3fc599d0fcc92b16ac36a92b2c1dc6b3f033fe310cd196da04a4e639031177cd27d7c2fbec65a00b\",\n        \"signed\": \"17738f5726550780651d60199fda39d9c4768db5917e32393631c54a419d59f18ef960ddd439380dabc314761bd0cdb57cce481e6109fed095dea6e865aa670b56a1603f725be07613058cdb3acdc52354e3bb1ff2bed13f895175b15c8c5a90ffbe46b11a06cfe362dadf7323c940417255aa7aa54312103e71463daa0b5cdaebd0be723c732273e3c3f5bf7aa3519d69df6f4770daa1df8280bb3cd2c714ac030200546579f56c60b91ae11f4cf874a35fc59b354bed80f56e11a6cd62a88ce6b4f6bf39d64ce3d80409825f90162c3d96d10e478607365f7a241e71af980042fec2d68891e0c8a37c58ec4e600fd581e790b0aae8e09f35d4cc1876df434b80eee05369f848fc4930577d1684275888f3259cb47376c5169c9937f855a96a9e748ad0a69ae4ab2f2f1744a392f9acc6209975b784984cb12f98292c36a53221994abc56f9a66dae4560b79356ff47e128c0796a7fb0e0bbc9600af48e49eaa9427cf6eb6620b10cd2c085b0b342004d5b0d3edc11d29242a4638780762c9dc6069b66bd84973b5011961ce56db58bdaf48e6be12ab9ad24416297004d02914b959f54e092f8cd4365fa6ab78ddbff4ce8dad4e2f53a05c0cc499bfb47814a2713551dcd19d447f627576ea4ea4bbda8bae18a6465ced747ea17180b009f01212160482b0433aac68e67644d00f41fdf9990b9e11117634deb139b1a40ad3fce4299a17fe1dd225301c7f8d8010a796dc79c13307d3ff992a88be664d4c886d68ca9e4470cfbe63ebffc424010e372b6922aa95c801d1e9406da4bc188ca82066405bcdb3eafc937629b3263dc7d50ee5278ccec6f11d5517f56bc269c873691e7eb53faeff07564ab46b403f15d9e0e692486ee098e7b51b42813469b8235042233ca3f9c4f8ff24a571f47e0adf9144aea488a2d2dd001e31fc961e05c3e85f0d981407c873158bb0d35bafe4b60422e67551e970165ce3fc599d0fcc92b16ac36a92b2c1dc6b3f033fe310cd196da04a4e639031177cd27d7c2fbec65a00b\",\n        \"signature\": \"17738f5726550780651d60199fda39d9c4768db5917e32393631c54a419d59f18ef960ddd439380dabc314761bd0cdb57cce481e6109fed095dea6e865aa670b\"\n    },\n    {\n        \"secret_key\": \"8c839381b6a7ce2649c1ea464ae3c2d3fdb1ec666d7b4be4e2a941ab6d6557a7\",\n        \"public_key\": \"5c724a30c6fb32815343a80ddee6eee544516418ea95e1bac80afc8040d63fc6\",\n        \"message\": \"cbcf89c3548964c38d70fd8f68e8ece36cc39755c971d14d7e056f39b023ef166d17f2438522f010d6d835d886e71f474c6727a4221fd03a7574578289ed5493ac4c0947e3f428d8fe064006a256cef21811d72678f5dfc6ba66ac29ecd1b32ff5557cb08c5f130559217a0413b759c24d83388a2bb9b29b6b91d1f3101ed625211e4d73805193478cf995396c10b1c5affacb00899da04e3cce193b494e2a933c4eebe0a37bfb8f1b8371bde5fda09e804e940f344896a529467adee45a8febf85ab036cab880143be4f59b7741d8e450278b06365578d40b19dcecc6e1ee3da34ab29013fa3af7729272962110e385ab9a022fae4146f89716f7bab9d3dc682f4fac7736d3e08973c685bbb275bbf8f217419e5cae0219eba5166a5de1b11e3f9a908b8ac7e65bcd623f8c18bb024f605dcbacda790d8362957444a95c130a37ee9d563d0cbb4cb2b0ff71591d9390b6c8fc28753a0e402d6487cfac607135927d89267512b34f877057d9271bccc024dfedccc6c32edf75c8b7551cdf80154ee8e08a0cc43044e1036bae017eb48b6502c7a9d60c8b370cf3799c464f964a69ee659501223e789a6497b63496df1ada2e808d2434fc8bb9794e5e2a20bbf4d6925cb3c5bb14842f19200905ba9354e00dc33cff5b42d4e9d9668b34e661d44bef76fefe2ed51f94423a933ac94f1523bf37823a238d616c6b17973441e35f9405a04d99eaa8f504534c8b5fa5e8e335c743bcf21f5d492b7112e00fd8642cb12bfec849df62120dbb06bfc2946a5601e25be75011c6f00c65d35f44a46af9e4f7809e5789a3a61ba0a3b213890497296c81e42e88f0ec0f5defc1f5d39ff2a48b7e3026c9e547202edc7eb738c34ad3a15d373ef82a4c1d181f285a98bd3314c2c1947c9e2c60aca51750ee7f943caf0c4e1e5c7df7291e973b1f936b73707619\",\n        \"signed\": \"5d2110d1d2f3edd683bdfdbea3ffa7cf5528a40b8b3d8d8c9bfd22aeac28bad471666e062f7d38ceda8bb37397a1c5c3f733b537967045706478437d4d187a0acbcf89c3548964c38d70fd8f68e8ece36cc39755c971d14d7e056f39b023ef166d17f2438522f010d6d835d886e71f474c6727a4221fd03a7574578289ed5493ac4c0947e3f428d8fe064006a256cef21811d72678f5dfc6ba66ac29ecd1b32ff5557cb08c5f130559217a0413b759c24d83388a2bb9b29b6b91d1f3101ed625211e4d73805193478cf995396c10b1c5affacb00899da04e3cce193b494e2a933c4eebe0a37bfb8f1b8371bde5fda09e804e940f344896a529467adee45a8febf85ab036cab880143be4f59b7741d8e450278b06365578d40b19dcecc6e1ee3da34ab29013fa3af7729272962110e385ab9a022fae4146f89716f7bab9d3dc682f4fac7736d3e08973c685bbb275bbf8f217419e5cae0219eba5166a5de1b11e3f9a908b8ac7e65bcd623f8c18bb024f605dcbacda790d8362957444a95c130a37ee9d563d0cbb4cb2b0ff71591d9390b6c8fc28753a0e402d6487cfac607135927d89267512b34f877057d9271bccc024dfedccc6c32edf75c8b7551cdf80154ee8e08a0cc43044e1036bae017eb48b6502c7a9d60c8b370cf3799c464f964a69ee659501223e789a6497b63496df1ada2e808d2434fc8bb9794e5e2a20bbf4d6925cb3c5bb14842f19200905ba9354e00dc33cff5b42d4e9d9668b34e661d44bef76fefe2ed51f94423a933ac94f1523bf37823a238d616c6b17973441e35f9405a04d99eaa8f504534c8b5fa5e8e335c743bcf21f5d492b7112e00fd8642cb12bfec849df62120dbb06bfc2946a5601e25be75011c6f00c65d35f44a46af9e4f7809e5789a3a61ba0a3b213890497296c81e42e88f0ec0f5defc1f5d39ff2a48b7e3026c9e547202edc7eb738c34ad3a15d373ef82a4c1d181f285a98bd3314c2c1947c9e2c60aca51750ee7f943caf0c4e1e5c7df7291e973b1f936b73707619\",\n        \"signature\": \"5d2110d1d2f3edd683bdfdbea3ffa7cf5528a40b8b3d8d8c9bfd22aeac28bad471666e062f7d38ceda8bb37397a1c5c3f733b537967045706478437d4d187a0a\"\n    },\n    {\n        \"secret_key\": \"aabbb2efedb599424a5f3e08f90fa8826c5c92170be501a1181fe8e8df974e0e\",\n        \"public_key\": \"ce7319ef88b242420666ca697ba8501d274ec4a5dcf844596608b9dd5a8a3acd\",\n        \"message\": \"fcc15cc57970569e9ccfa5a778fc7aed71978a3f5624577b6f57fa3f167ea223ef31764c488d059d06531d016bcb17d544d46977aa241f8e07af4787a0810f98d766460c0841ad81b88f4d5d8164485a1258a94622c5492428d6d575943715766c2b0a865bedba167d5d340edb579c47aa32459b8fc98a79bb0bed1c960b4ccb7f2d4b5681a2a70d505b85b81e3d99672714e4eab41f3ab0ca874f417186feb69ed13fb911f49d1584758b2d18b4673edfae495e68dad513a7ac0d47b2753cb4eda78fb431f04dda8fe8030d7bb4e8dbccb969d7f580d9c1ef935d074d7a41d1f8b9dc45c9a2e4106a5529a98b95529ab0edea0b5722dd686f5a7f3cd8fb2624ab26c42df11f510a103d8a929830ad85f52124e3d5827ba60bfbcd736cb6c590ee777ead7aa2224d7ae46d257a90407247960c9cb03860aeaa7f54c1a8e11160d11bb473065e19b70721c8f072e1909d539e9ac94185904bbbfe54873754ae1ca7bced6f40561af4b505f03ac972a6f0bfa73b5f832fe23b898b2bbb0574a6662ee93b3b360da1ec7e838eb2c77c7cb7fc164f7c4627010489c858900752c92d9d75ad547167e4bdd11a07d28b651aa30f16a850e060dd2882fb820919a398e805eb63699f4ff595f991524731641ece25fb3f8e89ada501192b1eddaecbacc8b898528f2d5b3312694f5ec2dc9142e1513f777a5c833409c171633ff9fa2609d0497f5df4fbf48ef2b77d55e25519d2ee79b5fe9d8fa46000decdb4f25dfb3f2bafb19fbe2cbdac002a359a954bc69bdfe2fb36adfd9a1509f3e3a4c6b1f3f36e7cf80d583d440ff2a144643098974d71493ecb6417c0b8065bd2c21c1e34af09243fb49e9d35297eb0a52d56dd270fea6dc5c080a05599f78581e90fd8cc4cd11a505edde84b892d8953bdbb2379d33aad64658ae20607dd35b0bf3a2637d20c3f86\",\n        \"signed\": \"a0b19cfa6c80de77bfcd321030bf8c03893e2b21ace6c6ba1ff7408e6ff07d847e6b2b688d4fd51aa932701db6402ef22322e6e9fc7e320abb4d24e1acc6cf06fcc15cc57970569e9ccfa5a778fc7aed71978a3f5624577b6f57fa3f167ea223ef31764c488d059d06531d016bcb17d544d46977aa241f8e07af4787a0810f98d766460c0841ad81b88f4d5d8164485a1258a94622c5492428d6d575943715766c2b0a865bedba167d5d340edb579c47aa32459b8fc98a79bb0bed1c960b4ccb7f2d4b5681a2a70d505b85b81e3d99672714e4eab41f3ab0ca874f417186feb69ed13fb911f49d1584758b2d18b4673edfae495e68dad513a7ac0d47b2753cb4eda78fb431f04dda8fe8030d7bb4e8dbccb969d7f580d9c1ef935d074d7a41d1f8b9dc45c9a2e4106a5529a98b95529ab0edea0b5722dd686f5a7f3cd8fb2624ab26c42df11f510a103d8a929830ad85f52124e3d5827ba60bfbcd736cb6c590ee777ead7aa2224d7ae46d257a90407247960c9cb03860aeaa7f54c1a8e11160d11bb473065e19b70721c8f072e1909d539e9ac94185904bbbfe54873754ae1ca7bced6f40561af4b505f03ac972a6f0bfa73b5f832fe23b898b2bbb0574a6662ee93b3b360da1ec7e838eb2c77c7cb7fc164f7c4627010489c858900752c92d9d75ad547167e4bdd11a07d28b651aa30f16a850e060dd2882fb820919a398e805eb63699f4ff595f991524731641ece25fb3f8e89ada501192b1eddaecbacc8b898528f2d5b3312694f5ec2dc9142e1513f777a5c833409c171633ff9fa2609d0497f5df4fbf48ef2b77d55e25519d2ee79b5fe9d8fa46000decdb4f25dfb3f2bafb19fbe2cbdac002a359a954bc69bdfe2fb36adfd9a1509f3e3a4c6b1f3f36e7cf80d583d440ff2a144643098974d71493ecb6417c0b8065bd2c21c1e34af09243fb49e9d35297eb0a52d56dd270fea6dc5c080a05599f78581e90fd8cc4cd11a505edde84b892d8953bdbb2379d33aad64658ae20607dd35b0bf3a2637d20c3f86\",\n        \"signature\": \"a0b19cfa6c80de77bfcd321030bf8c03893e2b21ace6c6ba1ff7408e6ff07d847e6b2b688d4fd51aa932701db6402ef22322e6e9fc7e320abb4d24e1acc6cf06\"\n    },\n    {\n        \"secret_key\": \"c2e074faa234e99ab20adbbeae11b8109723b708c54586df652b402c35cdd127\",\n        \"public_key\": \"5e524ece1c696e705a3514dd0082b840795a59c36a96cbc482bff5ab4ef515d1\",\n        \"message\": \"31290338e46d1cc25ce99cbacc40160341b785823c823c4ab9baee3b612579f1c011716796e56e2693f6ddad43922aa7847cbb4148101651bbe62d50be90825e8eab777aa4b8026dc5385a97d3df76160191f922cdd2f07ba5f85e95f45db22928f90734ff520c44dc8fe3903b4c51cd23e064f01c829ec74fbffe25fd0d369d2765740f43856bd7398a1911ad749836160fd98d04b28ee87e111d40718b5a166f05c9a471a41566557069f7a14de988bbbf6777521fcba6dd65de4c06674a11853af83accb70fb328dd8fd6105a7df5269c9faec8d900147e928d970c36cd834bd6054f70650dface94b7629d16e3703d766ce7638d0ad1e17b77469b958d2ba2a1e631a1635efdcb006ebc6e5d8b9faf7e5fb989dc0896c561a26f3c25f055716b367138ea5da1f81dc72cff7a55afaee5839ef5aa822b2970aa18a8982163bf5eed1b677ccaac1224ff6c6cf256374780ae65803bf5c6e23c80bacd76ec3e2ddd3ab71997506448e19db198efadc9f757491f1b0972c82db29410e1e8bb67bbb23d53563b8807e5e0c2e32ee596b5b4402328f9e179e9ce856d3bd199d58de6c5c252e7a6124d81fc9eeaf23d347d2ab88917aa684450dd58303516c1a4d2bdcdde220c9ae3790f298d7d384b70c2fe258807848fc35320b578b33503b75f38a1df630bd33e6a85a4dd4df9f6e55a6e6867c73801e593e1d591db89ba9a9af0fc292e06fb515ac8a5e8e343a821335575ba48fbaae3fb12deeaaee60f4b3d317ec0a554ddd425c84932c27a7a12f29d6371510783bd75e60e2f6da20052069ed71e695a943182193cb6851a7d2fa3c666c193028015ac8b7e7daa6c5204f77a6232b88b4abffc5362fde7dec36b9d454880849283b1156339ea2e8c3b10e51bfabdf72578c726419a38542cf8649df9a0909f582debad5fd89d8c81f83d9e423e7503\",\n        \"signed\": \"657c3826b3483fd42ab6df869d1b77a8c4df67a6a590c7c6772969e3df3312ae0654fb83847af221935a0512291636ec0595700879ebdba8a1467c53d40c230631290338e46d1cc25ce99cbacc40160341b785823c823c4ab9baee3b612579f1c011716796e56e2693f6ddad43922aa7847cbb4148101651bbe62d50be90825e8eab777aa4b8026dc5385a97d3df76160191f922cdd2f07ba5f85e95f45db22928f90734ff520c44dc8fe3903b4c51cd23e064f01c829ec74fbffe25fd0d369d2765740f43856bd7398a1911ad749836160fd98d04b28ee87e111d40718b5a166f05c9a471a41566557069f7a14de988bbbf6777521fcba6dd65de4c06674a11853af83accb70fb328dd8fd6105a7df5269c9faec8d900147e928d970c36cd834bd6054f70650dface94b7629d16e3703d766ce7638d0ad1e17b77469b958d2ba2a1e631a1635efdcb006ebc6e5d8b9faf7e5fb989dc0896c561a26f3c25f055716b367138ea5da1f81dc72cff7a55afaee5839ef5aa822b2970aa18a8982163bf5eed1b677ccaac1224ff6c6cf256374780ae65803bf5c6e23c80bacd76ec3e2ddd3ab71997506448e19db198efadc9f757491f1b0972c82db29410e1e8bb67bbb23d53563b8807e5e0c2e32ee596b5b4402328f9e179e9ce856d3bd199d58de6c5c252e7a6124d81fc9eeaf23d347d2ab88917aa684450dd58303516c1a4d2bdcdde220c9ae3790f298d7d384b70c2fe258807848fc35320b578b33503b75f38a1df630bd33e6a85a4dd4df9f6e55a6e6867c73801e593e1d591db89ba9a9af0fc292e06fb515ac8a5e8e343a821335575ba48fbaae3fb12deeaaee60f4b3d317ec0a554ddd425c84932c27a7a12f29d6371510783bd75e60e2f6da20052069ed71e695a943182193cb6851a7d2fa3c666c193028015ac8b7e7daa6c5204f77a6232b88b4abffc5362fde7dec36b9d454880849283b1156339ea2e8c3b10e51bfabdf72578c726419a38542cf8649df9a0909f582debad5fd89d8c81f83d9e423e7503\",\n        \"signature\": \"657c3826b3483fd42ab6df869d1b77a8c4df67a6a590c7c6772969e3df3312ae0654fb83847af221935a0512291636ec0595700879ebdba8a1467c53d40c2306\"\n    },\n    {\n        \"secret_key\": \"b9da4e6af07e398ab4d21752a32c8ffa9be0c310d35059fb661bd73afa97e2a8\",\n        \"public_key\": \"f862803c96cc42adc8252884547230b970047b7e5da996260ccc0240ab71a6ec\",\n        \"message\": \"6b95af0eebb6a08afadaa19621f76a839be80851c6dd315e8276f501995d4ce6d134df5e798ed517a2f0e62aa1d6c98c36ef14bb1e5ddfc98d5a7fcc81140a13c20d2ca0c4b40e6e6a03eed8c899f9d1f792468152199f4b95a432668947a51d7b8e104d8d1f12aacd967e08b08c41c3c8ca3feedaa5b8b63bcec0613864d953d81143ec81425bde29164a0876f23f37ac9ac9473672ce11a08bd5476f6f66d665e9ad617e34eb32ee56ffa459f20d1b9353d7821298545750c6eff3e7d4073dc3185ede0391cce0575f8ba637d800068d9d7e5403ba7038d2db77da144784f2e8ea76aedfe521e7dc6a674ede35579595993fb20d44b4052783f56c8c0bbd0440b69eabde84468dd13c671fb1bbd5cb022c2a4fcf3542d8b3bb518e5adebddc84e714b13be52c56b282b42ac0892a5459281be7160729f4112c7d99df9be5434f823a9ce0501789de1d550ad50bb18c8d89a33668270bff7b91ff118f5cd9909addde90c024a3ad713915174674f28aaa9f94a322baa543738edab4973312b5bfa12155debcee163cfe2b04ac9c122ac8a4e1bc418c14955d9610455bd945e9793b916267c9c5f9e53ac04518926ec98ecb84a4f0445dcb1236c76c3a678c69abe4e92c22971d62217201a1bdf05c04df8420a3de6a917a85e71e2b9725e77b522915d4c9946077637c2d8813f010b9491cf0eddc3d4668cc0f8bc8a683579be543934da2853a16f5715724f779819f44439e1debcaa4270d9b8594ba4c86e1063b3ce479d71a5409bef27ef4e5c1d1c96e8be13865af7bb43f09162ccbc83a2ca9e9b8a2324e6d996575eefed37ef49908185738b8eae43f8adca330c99bc66cc1fd52c530d7371c60869ce42c197dca0ad128b85f61c8758f0d542f3d3298b65e93c6e8a68fa0e9a1d5e8c5fec805b83aff4390e115eb64f3f078a0b9b66c273843fc6c\",\n        \"signed\": \"625e1f42c87434a25d622d80d12532806afb2509332449e696b65e1e5888508f11c4ac25f59b8d94d0bf27e4c8d1867007c408da573082dcf19d15a9d5cccb0c6b95af0eebb6a08afadaa19621f76a839be80851c6dd315e8276f501995d4ce6d134df5e798ed517a2f0e62aa1d6c98c36ef14bb1e5ddfc98d5a7fcc81140a13c20d2ca0c4b40e6e6a03eed8c899f9d1f792468152199f4b95a432668947a51d7b8e104d8d1f12aacd967e08b08c41c3c8ca3feedaa5b8b63bcec0613864d953d81143ec81425bde29164a0876f23f37ac9ac9473672ce11a08bd5476f6f66d665e9ad617e34eb32ee56ffa459f20d1b9353d7821298545750c6eff3e7d4073dc3185ede0391cce0575f8ba637d800068d9d7e5403ba7038d2db77da144784f2e8ea76aedfe521e7dc6a674ede35579595993fb20d44b4052783f56c8c0bbd0440b69eabde84468dd13c671fb1bbd5cb022c2a4fcf3542d8b3bb518e5adebddc84e714b13be52c56b282b42ac0892a5459281be7160729f4112c7d99df9be5434f823a9ce0501789de1d550ad50bb18c8d89a33668270bff7b91ff118f5cd9909addde90c024a3ad713915174674f28aaa9f94a322baa543738edab4973312b5bfa12155debcee163cfe2b04ac9c122ac8a4e1bc418c14955d9610455bd945e9793b916267c9c5f9e53ac04518926ec98ecb84a4f0445dcb1236c76c3a678c69abe4e92c22971d62217201a1bdf05c04df8420a3de6a917a85e71e2b9725e77b522915d4c9946077637c2d8813f010b9491cf0eddc3d4668cc0f8bc8a683579be543934da2853a16f5715724f779819f44439e1debcaa4270d9b8594ba4c86e1063b3ce479d71a5409bef27ef4e5c1d1c96e8be13865af7bb43f09162ccbc83a2ca9e9b8a2324e6d996575eefed37ef49908185738b8eae43f8adca330c99bc66cc1fd52c530d7371c60869ce42c197dca0ad128b85f61c8758f0d542f3d3298b65e93c6e8a68fa0e9a1d5e8c5fec805b83aff4390e115eb64f3f078a0b9b66c273843fc6c\",\n        \"signature\": \"625e1f42c87434a25d622d80d12532806afb2509332449e696b65e1e5888508f11c4ac25f59b8d94d0bf27e4c8d1867007c408da573082dcf19d15a9d5cccb0c\"\n    },\n    {\n        \"secret_key\": \"143f7b4247d549f6b7c0917266c50f962c28a2ea24762f537aa06ad15e40b35a\",\n        \"public_key\": \"c9959f90a2d5feacbae2c4c803ded5deab86987637064337aa2a0b0ddef2fd86\",\n        \"message\": \"e274202347a0d057a48bf2a1f6e9f6cb4256079d800374093c020cbf520e5fa27fe996ff07f33ad3b21f74ab0cd93c86475ff37cf622d3f9fa4d13bc99f013e8502b24e46cc87c47e6b2c3662b50e979a0f345b784ff21a8a4d92adc65e86e33b4dbe17f528ccdf5b4864664ba94ffdb7c7d2412b438e6e43fa9668147ee3328224d1f52a3f5b54359b4f7fef69af8f867b478f130a147bea42ed39803bcbc2557bca8c3999f1d24f0a6b03c98846011f9ec74f666417b95020eb1fb2fb88b6312e5008cff03e2d77a26aa532d1780b5077f9e8b828674455d6bc957975f7b2a50e7fd7c1612ce02362efa4c555a1eef68ec34a5c006a6da008a31d4193dc2cc647685ad3cfa3bd7c560b7aed45f0f1a3d1b5b362268de532857055ab9d1d5d858d9ae9a759a51bb9478e8f0ee93c984b576b8b4ab460280be3de205a32f1dc3d572923fb213ac1512d80eb5ad5c18944be77fc17def13a61bbd31bc71acc23d250ec5894ebc214cfec0c1b906516d32d836adc838802e8de30dd76df6e61c1bc438b68d2b025a84f211facf3f1384d2612d0faef5d17131cfe0cfe833fe950e479bc29cbe7fd6da0cce307cf0b1bd92c80e878e432f636ea0cd42480c07e8b8e57e69b2f938b78120f6af4abebf7d4b05cacd6eed854491c029755c4e66338993ed2ac25d19a0c5b40f5e32c8a8b1bce369718186c91d60edff24a8377a9969757599067dd31263a06d6a61154781f29611ab812ff82e813739646263704cd6046357a23c045e2407b7a89508259391314f2fbee49aef0855c6e5e63d912a19df15b11ece34e276dcb88bf2f2e4756358f34a0ee3952b686fcd17578a884176d34ea2916c5d9fcd00eb9e0aa9f2cf0f16e2564bfd28b6ab5968b8448f068320e4187160f8665781b1e2ed9d049e1b54a7d72720ff9d4f073051996a9db6f0c6821c424fa51d\",\n        \"signed\": \"c1cfae58515713ea728cfa09090e8942f8df18621ba7090e3a3376c3802775a1ecaf436b184978041ebb75226f970df71d6ad353c0fb465023f9e298f64a7002e274202347a0d057a48bf2a1f6e9f6cb4256079d800374093c020cbf520e5fa27fe996ff07f33ad3b21f74ab0cd93c86475ff37cf622d3f9fa4d13bc99f013e8502b24e46cc87c47e6b2c3662b50e979a0f345b784ff21a8a4d92adc65e86e33b4dbe17f528ccdf5b4864664ba94ffdb7c7d2412b438e6e43fa9668147ee3328224d1f52a3f5b54359b4f7fef69af8f867b478f130a147bea42ed39803bcbc2557bca8c3999f1d24f0a6b03c98846011f9ec74f666417b95020eb1fb2fb88b6312e5008cff03e2d77a26aa532d1780b5077f9e8b828674455d6bc957975f7b2a50e7fd7c1612ce02362efa4c555a1eef68ec34a5c006a6da008a31d4193dc2cc647685ad3cfa3bd7c560b7aed45f0f1a3d1b5b362268de532857055ab9d1d5d858d9ae9a759a51bb9478e8f0ee93c984b576b8b4ab460280be3de205a32f1dc3d572923fb213ac1512d80eb5ad5c18944be77fc17def13a61bbd31bc71acc23d250ec5894ebc214cfec0c1b906516d32d836adc838802e8de30dd76df6e61c1bc438b68d2b025a84f211facf3f1384d2612d0faef5d17131cfe0cfe833fe950e479bc29cbe7fd6da0cce307cf0b1bd92c80e878e432f636ea0cd42480c07e8b8e57e69b2f938b78120f6af4abebf7d4b05cacd6eed854491c029755c4e66338993ed2ac25d19a0c5b40f5e32c8a8b1bce369718186c91d60edff24a8377a9969757599067dd31263a06d6a61154781f29611ab812ff82e813739646263704cd6046357a23c045e2407b7a89508259391314f2fbee49aef0855c6e5e63d912a19df15b11ece34e276dcb88bf2f2e4756358f34a0ee3952b686fcd17578a884176d34ea2916c5d9fcd00eb9e0aa9f2cf0f16e2564bfd28b6ab5968b8448f068320e4187160f8665781b1e2ed9d049e1b54a7d72720ff9d4f073051996a9db6f0c6821c424fa51d\",\n        \"signature\": \"c1cfae58515713ea728cfa09090e8942f8df18621ba7090e3a3376c3802775a1ecaf436b184978041ebb75226f970df71d6ad353c0fb465023f9e298f64a7002\"\n    },\n    {\n        \"secret_key\": \"0d1fe9d8b9a2f04c22bbb0edea3833a0ce43339347531fdb67ed513a13d36b39\",\n        \"public_key\": \"67c49f410f4853293d0c4d39f4c1b3d6c6103c5cfe20a9a59b53932043517369\",\n        \"message\": \"64217ac841fd4d6459bfc4a49b8801d6929bf19b408e8a53790ceb51ec341f9b46a351e8c2e59d887e1eaccb914231cdca1d3e5c47d166b4cdb9b58c013c59a3bd283ad10f6bd62c0f15f764ce14f3b265f537c63e73b6c4fa65e06ce1e1f4ae0d11489dd2602f95fc402b7712052abc84bdc778c19f10001b4e0d5fbe463090e83ef438fe068f3bb6fbc2c139af0678ed2a11faa1b9e49aaa4620abfc08439fbfe2c61840769e5fda2677f8e2f0a14564f9f504232a9fc0d9da471e67fbc574c3d56d2aeb937a586ed5583556308a998eb1dc476a014f5a08228dbed95a1208bc1d1f5d76b4e8d0b2434b995ad458e429ee6142a0c971768cc40c40bcb08e9603f09611474471b3859d7fd584219f02657b430e9e56955b3467ac56ff2eab22cc498489036a574120e2db769a3b21500389142c78a87d069f0e2576cafda8cddd7915a9228773d2ac9a075cb387f2a898617213b2cc5059d11941bc4fe58641e7c1750267e53e99c421cb4cf21d098ca2d1f41644f7908983eb174a23a781cf15ef38eb9116eda4123a1522f53b81fb7368e8075fb83859d2cf98d921535a709fafa9873c4a039aae682f7e6286b899257c0924016ca5bf6d3169099211a9a4a6745cdd3198f1337f60928227ce3c7d60960b53dedf011a8940f5c468207a3894bb0872b333ccdec9d5ecd911ecbbb96c9bc4bd4875320e4d3e9c02d9dc76109ec45e61d1cf5ac729f2e34a9647b95bce70b0c633171adaf0dfdb5afba4035b3cce8cb7141ad142bb7add4fc3f961d42d7203754a4e313221d487831e32947da91138ab648b5952ef6956e27aa5d2c175794bf81ef277faa6b905e14502866887d87880606e81b27af01bb263ecf2c5820585ea6ce8d8b391d86fcedadcd11fdbb566fdf147f402010fc35f5157e036146b3736c8a43359127c261f6bf0cad3bd8a34cb1509f7\",\n        \"signed\": \"b05725e7371ed0a91ebc89f3c30baa99183763edb4ce34fe901af3731e001cc54f287118915e90365d91aca8feb1708769f9f1d6eef5aa113bee00b5efab270464217ac841fd4d6459bfc4a49b8801d6929bf19b408e8a53790ceb51ec341f9b46a351e8c2e59d887e1eaccb914231cdca1d3e5c47d166b4cdb9b58c013c59a3bd283ad10f6bd62c0f15f764ce14f3b265f537c63e73b6c4fa65e06ce1e1f4ae0d11489dd2602f95fc402b7712052abc84bdc778c19f10001b4e0d5fbe463090e83ef438fe068f3bb6fbc2c139af0678ed2a11faa1b9e49aaa4620abfc08439fbfe2c61840769e5fda2677f8e2f0a14564f9f504232a9fc0d9da471e67fbc574c3d56d2aeb937a586ed5583556308a998eb1dc476a014f5a08228dbed95a1208bc1d1f5d76b4e8d0b2434b995ad458e429ee6142a0c971768cc40c40bcb08e9603f09611474471b3859d7fd584219f02657b430e9e56955b3467ac56ff2eab22cc498489036a574120e2db769a3b21500389142c78a87d069f0e2576cafda8cddd7915a9228773d2ac9a075cb387f2a898617213b2cc5059d11941bc4fe58641e7c1750267e53e99c421cb4cf21d098ca2d1f41644f7908983eb174a23a781cf15ef38eb9116eda4123a1522f53b81fb7368e8075fb83859d2cf98d921535a709fafa9873c4a039aae682f7e6286b899257c0924016ca5bf6d3169099211a9a4a6745cdd3198f1337f60928227ce3c7d60960b53dedf011a8940f5c468207a3894bb0872b333ccdec9d5ecd911ecbbb96c9bc4bd4875320e4d3e9c02d9dc76109ec45e61d1cf5ac729f2e34a9647b95bce70b0c633171adaf0dfdb5afba4035b3cce8cb7141ad142bb7add4fc3f961d42d7203754a4e313221d487831e32947da91138ab648b5952ef6956e27aa5d2c175794bf81ef277faa6b905e14502866887d87880606e81b27af01bb263ecf2c5820585ea6ce8d8b391d86fcedadcd11fdbb566fdf147f402010fc35f5157e036146b3736c8a43359127c261f6bf0cad3bd8a34cb1509f7\",\n        \"signature\": \"b05725e7371ed0a91ebc89f3c30baa99183763edb4ce34fe901af3731e001cc54f287118915e90365d91aca8feb1708769f9f1d6eef5aa113bee00b5efab2704\"\n    },\n    {\n        \"secret_key\": \"c10b5ac6055a1ddbca28552e5c72ebd05278c92239b2fcd0c1353651a8e559a0\",\n        \"public_key\": \"b2183e1b00816d29305f7468e7e45eed3fd8f23c15b305f9fda93e812d65bc27\",\n        \"message\": \"3594905f9ea464615f41b87abb9d167337f29d45d97f7a1464ec9f2ee50f90f2e67339874d3f2093be9226107701ec1aab941c4e059f1bb26ce86e148d1d9f0da2a2a0f9829a364fb4f13f58b960d0f8d72323283c4490efdf57878645890ff7bc5065dad6e51dd1e5b9a5075150978b3367f1ba84e45ff1f1276c576e4bc72be8aa8e405fc2b27f8146b999845faaa0595d3cb70e5d3712ed54a0fb3e322d45380b5de3609b967b959bca5a583cc520cdcb7bcbb829aa25d7932095ecb303923c2560afc3fd7324b7b7acd089a9f00c03a73d043dc0cf0ba0d8411e2b1b18d21d2a32a726a53059140f784f7cedf2f33cec66fe4ad5cc9eaccbe4ae10036ac3523bac700a113a98b598e6df0304c6fa3212acc04c4e3c7f6687362ef86d617c6dd483f8d80cea66d1951127428a61c1e155a6850bb2afb7f91c82d73eb2b0543ee8fc1f38e1dcdb3c503ddc9ba0812456a5ce2e11d556487a646974a7bbf86e806c58c68c4269a7c9bbcac0ffef9835b33dc449a75479ecd23f6d149c1e5ea8b69208ff36e5fbd68295550318bfa0d3b1d6c1ad4270bcab0904ae53491f9b1ca502e012eed77c427d49a0962f1055125dd7b53733d8528934b5580dd5fd5bbe854978bae3d25bb4ae944e9065e8e2e07946518a6f548e36e056be824d9e02a7a3eaadd37929f58101cb1853be3d7547f58f49e38b018a748d3f19c48582abbdbe953a8a25ba9d365dea835935899c19fb0b51906aa972c5ac45e99c40b3b76e35d327e321e8ae2306a6eb3d8cb6ec2fa5399add19ea0028a01792c08e27c16cf4f85aaaae72f986b099f9ebe4ad0b25d06d3de44a8bfa52844be4a93944833ce2add51bb554b356a7dc49748dd45ae7ec9e8db426c97a25da5edd3b621e4adbde48197a3314de1c50f4d6002027dd7519dde3e15729e486955ac40d9d66876f90668c689d8ab598\",\n        \"signed\": \"8a9a3217fdf0643aaaa5c8fb2a88a556398859b8feefbcb48ccd88e585a167c94dbb5c0cad24d15bcabbc1edb21f02a8c457c56120a3234ac33577b9af2ddc013594905f9ea464615f41b87abb9d167337f29d45d97f7a1464ec9f2ee50f90f2e67339874d3f2093be9226107701ec1aab941c4e059f1bb26ce86e148d1d9f0da2a2a0f9829a364fb4f13f58b960d0f8d72323283c4490efdf57878645890ff7bc5065dad6e51dd1e5b9a5075150978b3367f1ba84e45ff1f1276c576e4bc72be8aa8e405fc2b27f8146b999845faaa0595d3cb70e5d3712ed54a0fb3e322d45380b5de3609b967b959bca5a583cc520cdcb7bcbb829aa25d7932095ecb303923c2560afc3fd7324b7b7acd089a9f00c03a73d043dc0cf0ba0d8411e2b1b18d21d2a32a726a53059140f784f7cedf2f33cec66fe4ad5cc9eaccbe4ae10036ac3523bac700a113a98b598e6df0304c6fa3212acc04c4e3c7f6687362ef86d617c6dd483f8d80cea66d1951127428a61c1e155a6850bb2afb7f91c82d73eb2b0543ee8fc1f38e1dcdb3c503ddc9ba0812456a5ce2e11d556487a646974a7bbf86e806c58c68c4269a7c9bbcac0ffef9835b33dc449a75479ecd23f6d149c1e5ea8b69208ff36e5fbd68295550318bfa0d3b1d6c1ad4270bcab0904ae53491f9b1ca502e012eed77c427d49a0962f1055125dd7b53733d8528934b5580dd5fd5bbe854978bae3d25bb4ae944e9065e8e2e07946518a6f548e36e056be824d9e02a7a3eaadd37929f58101cb1853be3d7547f58f49e38b018a748d3f19c48582abbdbe953a8a25ba9d365dea835935899c19fb0b51906aa972c5ac45e99c40b3b76e35d327e321e8ae2306a6eb3d8cb6ec2fa5399add19ea0028a01792c08e27c16cf4f85aaaae72f986b099f9ebe4ad0b25d06d3de44a8bfa52844be4a93944833ce2add51bb554b356a7dc49748dd45ae7ec9e8db426c97a25da5edd3b621e4adbde48197a3314de1c50f4d6002027dd7519dde3e15729e486955ac40d9d66876f90668c689d8ab598\",\n        \"signature\": \"8a9a3217fdf0643aaaa5c8fb2a88a556398859b8feefbcb48ccd88e585a167c94dbb5c0cad24d15bcabbc1edb21f02a8c457c56120a3234ac33577b9af2ddc01\"\n    },\n    {\n        \"secret_key\": \"061bddab280b0fdcb26bfd9a0fc721f68f88343b5d3983a16b6dfaa5e76969f3\",\n        \"public_key\": \"815578bba6e7070ebdeca117568bd77ebff9e14cb8bc200c32bd87db1fb37d6c\",\n        \"message\": \"ee76b40cd429eac7bc12839ca2f7cd31f1e0098a39c5fc19805be0331f44799e318d12571f06e2993753a3685cd2a96b2301e20024209adc5adf7479ff90c477c3695abb99bd28579dbc7831a192beed0ce17b038b20764800653af7af024e2a104ed0f3e52d4bbd3e109cf126291f49b0a21be433c1c5a2589ea572997f63d2bb3972d532be35a0471ef0573d795c072b6a8685b95e47b09ea9f475d93bf12bbd77b7d2bf5d5bddf0ae02375371d1d799ea9204be389e6a8e5deedcd49202e92df7c3e761f92ef8d79fa738d2c5bc280ed32879832ff2b026424589cdbd52d15b60f2aa3526b898849a34a85ff1c47dc6554b85ac76aa7935cbf3f7bc80ad009192a875ca209b40feb047cc446968f970da47b8cd67da7eb4e54a0e5ab20cb35bc6fb7f13307ce67eb6204a67ce9bb1d139c1b4bd5dbed58010c87bf831e6522ee182dad945804b767c4df2554f15b9e9afd2599ef258c67a22caeb92a57988006bbc72c104fac7e5413cd3d3b802c83e639eafe212a38bb7ef779af1a94ee137f6c60667bc48f27bf4a22241bc44bb6033836239bd6eaf3e2e223187841e4641b0f4e9ff8d5a41ddbeabb4138f6b585ace0fb6b53dc3c9edc0373b6047f27d835e8e246644fd832ccfe0df25c3d7da187c9fa05420d43455f2d08b571929386b59c6e0e10a35601da899b1b4dc3d95b67dd9a83818b0a318bfdda06464b4a42d3cb985f30ec97d6a2af13291155d60cec57cbd58d5cfcb35c18535e8d299b5b007590892ea949d1b137a62b39a436cd7e5b9f8d1b6938dbaa62c2268d459c6220a3e6fcbf80ba0118acd2342563fbdbc1f7c9dba7ea2c072afc8ae2128e3ebca0644ffd8163e80a1a557d9d39034ccd9dbd12c8855a6f9165b0801839cf6e07a9fba4c64d9c099e15410e290e677031b65cf7deb0079bdadc573cc056d7666d95d033a0b6bdba7ec\",\n        \"signed\": \"b83297ccdd6d0098ebf5d132d174de1958311a766bcc4da15f864d801f38e09d613e7aa8c336302735d75be4166d73b0184b0e0bc5ef39edbccb6e0e61afeb0cee76b40cd429eac7bc12839ca2f7cd31f1e0098a39c5fc19805be0331f44799e318d12571f06e2993753a3685cd2a96b2301e20024209adc5adf7479ff90c477c3695abb99bd28579dbc7831a192beed0ce17b038b20764800653af7af024e2a104ed0f3e52d4bbd3e109cf126291f49b0a21be433c1c5a2589ea572997f63d2bb3972d532be35a0471ef0573d795c072b6a8685b95e47b09ea9f475d93bf12bbd77b7d2bf5d5bddf0ae02375371d1d799ea9204be389e6a8e5deedcd49202e92df7c3e761f92ef8d79fa738d2c5bc280ed32879832ff2b026424589cdbd52d15b60f2aa3526b898849a34a85ff1c47dc6554b85ac76aa7935cbf3f7bc80ad009192a875ca209b40feb047cc446968f970da47b8cd67da7eb4e54a0e5ab20cb35bc6fb7f13307ce67eb6204a67ce9bb1d139c1b4bd5dbed58010c87bf831e6522ee182dad945804b767c4df2554f15b9e9afd2599ef258c67a22caeb92a57988006bbc72c104fac7e5413cd3d3b802c83e639eafe212a38bb7ef779af1a94ee137f6c60667bc48f27bf4a22241bc44bb6033836239bd6eaf3e2e223187841e4641b0f4e9ff8d5a41ddbeabb4138f6b585ace0fb6b53dc3c9edc0373b6047f27d835e8e246644fd832ccfe0df25c3d7da187c9fa05420d43455f2d08b571929386b59c6e0e10a35601da899b1b4dc3d95b67dd9a83818b0a318bfdda06464b4a42d3cb985f30ec97d6a2af13291155d60cec57cbd58d5cfcb35c18535e8d299b5b007590892ea949d1b137a62b39a436cd7e5b9f8d1b6938dbaa62c2268d459c6220a3e6fcbf80ba0118acd2342563fbdbc1f7c9dba7ea2c072afc8ae2128e3ebca0644ffd8163e80a1a557d9d39034ccd9dbd12c8855a6f9165b0801839cf6e07a9fba4c64d9c099e15410e290e677031b65cf7deb0079bdadc573cc056d7666d95d033a0b6bdba7ec\",\n        \"signature\": \"b83297ccdd6d0098ebf5d132d174de1958311a766bcc4da15f864d801f38e09d613e7aa8c336302735d75be4166d73b0184b0e0bc5ef39edbccb6e0e61afeb0c\"\n    },\n    {\n        \"secret_key\": \"2cab5bf55ffa914e9ad07622190d343ec55c13cd91b388cb7500ffe06df7c180\",\n        \"public_key\": \"b61e432bb97cbae388a2578a7484998e00e9ad3ddfd6cab8d3a5fc5ba04307c8\",\n        \"message\": \"2c2d04dc3ad1982359ecd5bc3ee035f3498eedff6104a93c602af2179aeb2cb1f41c5cdb0a77b124f946aa8a824aa3076c2e1acfd48f68070b26276a656b4a4758ab151a6a9c41bd74e09bbd9adcce1e87a0a80d17fd92e85e4bda472c988b6bb1183b7ee59a09d80570466db90dd3749579c4eb19ab75fc152ecdcd68cd1078ef06e593c73516fa8291481a667d3f95bfeb144bab59d6ddc73a2795c1017e09536b3162e4bc58f8ead38957018cfec72badbf22819ab0b406c64730fc73fd9ee61f74187eda91ed4e7993e66884af43ef4c6bf7f7c379e8f0f63dcb8041e26b8b8292b6b6d190e4adf430fa82dd74c57385b919c446db37b5e8767e4a0c95013be89b2bc4e9fd62754a844418400968aed2dd328d7b1dc91e1a2b3009dc7ad140a0686f673168a60e88d80c520fc2dcfc56ca9d4b0c88859099230714dec83d26b4630554dcb9c4901895f78f3834b09766b67a465de8c9490065bf568339243399fdc9d5100324667c5ab28f35c00f6125638e61dab70d1eec48951de0fb3f7b23d3cd982437c63473415bef374a663296f2986b1ae9579b9ffce71ec35eeca116d194f8fba9a45a91bae27ac455db71a6b01a729d0c135fcdcbc23e504a2943c00aa42070519d9cd77ae6754f31eb46a3e5be9eeb3fc8d31ff182da9b087be3462c8459126e862909232fd5f2d89c01815957611e6ae7caa98b6053776a7715c2f93ccf030887030c56c2b8226dae2977995a6d3f1e9d7911a9c9d2a303f0e01f32338efdaf8ee63fc41b25399cffd0b35f7ee5676bd8fd3da2cbee4ae2ea9808d7e73583d99433993146674a4040f42f63d1b3135cc797a8d8f0b88573a32890696cac9439d1e15d196d9090b62b6db7e63c96472d946e668cbda1f4db889300cdcc25e84c9f3857d1d9e53241cf625f3909af1c8aaff4309f68f654b7a15b67711c5b7f9de76775\",\n        \"signed\": \"4cf08f4fabbd06dccbcce2a7a5941fe9afddc4d2d0bc80802e93b12cb135d3acf6511e0fe4113c5e3c5541b27d3a2150a757742ac65f95a9ce6673ff0cd21c0f2c2d04dc3ad1982359ecd5bc3ee035f3498eedff6104a93c602af2179aeb2cb1f41c5cdb0a77b124f946aa8a824aa3076c2e1acfd48f68070b26276a656b4a4758ab151a6a9c41bd74e09bbd9adcce1e87a0a80d17fd92e85e4bda472c988b6bb1183b7ee59a09d80570466db90dd3749579c4eb19ab75fc152ecdcd68cd1078ef06e593c73516fa8291481a667d3f95bfeb144bab59d6ddc73a2795c1017e09536b3162e4bc58f8ead38957018cfec72badbf22819ab0b406c64730fc73fd9ee61f74187eda91ed4e7993e66884af43ef4c6bf7f7c379e8f0f63dcb8041e26b8b8292b6b6d190e4adf430fa82dd74c57385b919c446db37b5e8767e4a0c95013be89b2bc4e9fd62754a844418400968aed2dd328d7b1dc91e1a2b3009dc7ad140a0686f673168a60e88d80c520fc2dcfc56ca9d4b0c88859099230714dec83d26b4630554dcb9c4901895f78f3834b09766b67a465de8c9490065bf568339243399fdc9d5100324667c5ab28f35c00f6125638e61dab70d1eec48951de0fb3f7b23d3cd982437c63473415bef374a663296f2986b1ae9579b9ffce71ec35eeca116d194f8fba9a45a91bae27ac455db71a6b01a729d0c135fcdcbc23e504a2943c00aa42070519d9cd77ae6754f31eb46a3e5be9eeb3fc8d31ff182da9b087be3462c8459126e862909232fd5f2d89c01815957611e6ae7caa98b6053776a7715c2f93ccf030887030c56c2b8226dae2977995a6d3f1e9d7911a9c9d2a303f0e01f32338efdaf8ee63fc41b25399cffd0b35f7ee5676bd8fd3da2cbee4ae2ea9808d7e73583d99433993146674a4040f42f63d1b3135cc797a8d8f0b88573a32890696cac9439d1e15d196d9090b62b6db7e63c96472d946e668cbda1f4db889300cdcc25e84c9f3857d1d9e53241cf625f3909af1c8aaff4309f68f654b7a15b67711c5b7f9de76775\",\n        \"signature\": \"4cf08f4fabbd06dccbcce2a7a5941fe9afddc4d2d0bc80802e93b12cb135d3acf6511e0fe4113c5e3c5541b27d3a2150a757742ac65f95a9ce6673ff0cd21c0f\"\n    },\n    {\n        \"secret_key\": \"dd7b59a33d970bef62e0e21a7b6e4c30960686f17f49afdb4a9f4e808e355c7f\",\n        \"public_key\": \"53a0e57277d9bbeecf99c4d138fd66fafcaec7bc5f567f8320800c4e584ff82e\",\n        \"message\": \"75580367930518168b0a764d0958bec4fc46cf591999eb3737e42a02ea72d210daad53e54a7c2c134a6d478337d2633368548170edef0d85179f3023e1503868a6e5e2775e412ac05f0589d42a377e75aa6b8f5220a7699ae8aff01094ec469d6361d3e8f38615edcda4d2d5289acf73db6456985780c92e07f62c77a909fb6ef598822062bd572bf7058dcb835ef3443d3e47b5c603d92736dd1df26be4b9283b76e321d55ce2b638cde22577ca59c963c2479556c575ccb0d6d18c804e2eb01ff53581eb040ffd2cc46760737a74672ea6bf78058a6a0a1f5ebf56decbf94b54afb23c11d34179bf0976b4158017d407c95a401fa6f9624d77135eae8141ebea9f35d5f51b3ded995c7f70c025b094adef2b071f971155d7796d613a550d09e7f4dfc34517b3f8fa4393286a2b228017daf2e015387e13527f63661d3c13e78e90fb2955eee345739119b791f05b07c8f42a436efcad1ec5ea10f308f8e23ca98bc65a5fd9393efaafe5cdefba81058170cc5493c00cedf254097435d2e2fde55f866bb82dbdfb9154344974866359167b466caa909b91530c9c7ee8c53fa90164bbd0b1fadbdcd08127f19be5033071518d3cf10ae6bd6f9827e1206f5ec095c1986170e8d5d8e72e57d4228701df2a48c954873056cfdfbaafb10e46a0c1f144b1a0eacdd2cb66bb912ac471787dabe48353859120b03403567c415ddb88fc0d7fba4069bbfef406eed724a11abc041e8e7beb663d0dc99dcef3ac6a149007b42dd1f22a77dd52901814325172224a2778f366fb9eb02c812b842a42842561c68f2ac231c26ce9e8b19ae91ebfad3c0e9f66363a13ecd8b897a3d00a26d257648d56c6747441ca1c6ee99f08ddad25d116dfadab0383000d3d7225cf2eff7076b2adab9522292555f3193206786000d42ca34d708dc04284a94d174cc92f102efddf3148c2996916d4\",\n        \"signed\": \"87294d22d4ad0d0814e2d6d5faf55749e9b39803b4d4b7879e60b777c1fc41584fe15135ba1123ff5f200db35a3468dd4d58dad77bd96ee2b888a5a8b18c320475580367930518168b0a764d0958bec4fc46cf591999eb3737e42a02ea72d210daad53e54a7c2c134a6d478337d2633368548170edef0d85179f3023e1503868a6e5e2775e412ac05f0589d42a377e75aa6b8f5220a7699ae8aff01094ec469d6361d3e8f38615edcda4d2d5289acf73db6456985780c92e07f62c77a909fb6ef598822062bd572bf7058dcb835ef3443d3e47b5c603d92736dd1df26be4b9283b76e321d55ce2b638cde22577ca59c963c2479556c575ccb0d6d18c804e2eb01ff53581eb040ffd2cc46760737a74672ea6bf78058a6a0a1f5ebf56decbf94b54afb23c11d34179bf0976b4158017d407c95a401fa6f9624d77135eae8141ebea9f35d5f51b3ded995c7f70c025b094adef2b071f971155d7796d613a550d09e7f4dfc34517b3f8fa4393286a2b228017daf2e015387e13527f63661d3c13e78e90fb2955eee345739119b791f05b07c8f42a436efcad1ec5ea10f308f8e23ca98bc65a5fd9393efaafe5cdefba81058170cc5493c00cedf254097435d2e2fde55f866bb82dbdfb9154344974866359167b466caa909b91530c9c7ee8c53fa90164bbd0b1fadbdcd08127f19be5033071518d3cf10ae6bd6f9827e1206f5ec095c1986170e8d5d8e72e57d4228701df2a48c954873056cfdfbaafb10e46a0c1f144b1a0eacdd2cb66bb912ac471787dabe48353859120b03403567c415ddb88fc0d7fba4069bbfef406eed724a11abc041e8e7beb663d0dc99dcef3ac6a149007b42dd1f22a77dd52901814325172224a2778f366fb9eb02c812b842a42842561c68f2ac231c26ce9e8b19ae91ebfad3c0e9f66363a13ecd8b897a3d00a26d257648d56c6747441ca1c6ee99f08ddad25d116dfadab0383000d3d7225cf2eff7076b2adab9522292555f3193206786000d42ca34d708dc04284a94d174cc92f102efddf3148c2996916d4\",\n        \"signature\": \"87294d22d4ad0d0814e2d6d5faf55749e9b39803b4d4b7879e60b777c1fc41584fe15135ba1123ff5f200db35a3468dd4d58dad77bd96ee2b888a5a8b18c3204\"\n    },\n    {\n        \"secret_key\": \"d880d2fb06262f57ab8778e33d16b473060978a6549cdbcd5586ba8105f5aca8\",\n        \"public_key\": \"0de486d2115faf2d547266772e430fd9727bdcace6ecbf2fe23ab60f7b5254b1\",\n        \"message\": \"114743e82a0993cec9705067abd77c168b53677ede5c159fad36f06fc1a14acd77f883799ed9883f9915aea638ec1741f3f4215855fb5b07df3793bbe5b568eb3594391a9ef5727fab93e57469b37de125b1e9f2e6fe2c3d1a10ecf87b6c0a665c6d460a170eefb9bf716cd8faea9764f579ff34ebfa9c4cfb34706d8dd7c9eb1d10b2df460a46bb5789430bf449158b5824f2a3a7b918b33acf2d9ebe90216d1b7cbf4af770c5db95fc62ff3a3c385c3a8217853b7346634aaf30607288db0c483bd4c222eb332cb89dc4a217e6334a268413a390bb371aec355fbe4c736f7da75f9c887541a2b7d0dac018b6138f021e77266ddece8468452ada39f5e63d0209b9d6dabf975413256dcaa15ac14b6068e177056c7bf0f0f7c884a3402032298cd559a6312039400632327f9c0e763e52798cb177da4475e4b2405c157ca427741108d33ed0b7a3f53438ce6b725c6dd5814af51cfa45dbced557f726db130d55cde7533bc2092d6b699c2c870af282731e18d651ae85b3db4ba02853f8c87fd5e3ab69bc57b08b81f83c239ccf22e817e2ada4d0ad14487ed14612c8b0973ec0650a55f6bf9af4ae9256ad3546a3f67dd35d987ef21909a94c50f0ef0640e755b1c4e1a012af0d31766eeb5df31cd104c64eb62eb4efb139cf305769401d213f96a488d5ee7e3ce32b0192ee8f0831bfbe8fe95de956886b524d3319b73fd56dc60e9f1c72d78155a97c6f43697b20466b3e7aebd357b91696e7348f4599b34f3591eddfce2a7bd849ab16f7b43ebb16e23d6f5210efa30ab3ba8d32c40662b8662fd911544bc2458c6569ef75a9b9df6a0f6d80d658ba86b241ca19ce9a6fcf01d3daa95afb59c3d89a18b948621394327fc5e920a75f98f5e2b3d6c95fd852adf567b6d37c54d2970856a599f749e2c55dac7c23e3fb1a63bb4cc47b8b94f3d589ac4beef0aad4e6292f\",\n        \"signed\": \"4c00a71668d3213c29c7041c5a037edf13c6514bd0ebc880c909caff1506a45d27809fb74e6602ea2aad0f842831b74fb3d6900ccc520652da28368fd90ca30e114743e82a0993cec9705067abd77c168b53677ede5c159fad36f06fc1a14acd77f883799ed9883f9915aea638ec1741f3f4215855fb5b07df3793bbe5b568eb3594391a9ef5727fab93e57469b37de125b1e9f2e6fe2c3d1a10ecf87b6c0a665c6d460a170eefb9bf716cd8faea9764f579ff34ebfa9c4cfb34706d8dd7c9eb1d10b2df460a46bb5789430bf449158b5824f2a3a7b918b33acf2d9ebe90216d1b7cbf4af770c5db95fc62ff3a3c385c3a8217853b7346634aaf30607288db0c483bd4c222eb332cb89dc4a217e6334a268413a390bb371aec355fbe4c736f7da75f9c887541a2b7d0dac018b6138f021e77266ddece8468452ada39f5e63d0209b9d6dabf975413256dcaa15ac14b6068e177056c7bf0f0f7c884a3402032298cd559a6312039400632327f9c0e763e52798cb177da4475e4b2405c157ca427741108d33ed0b7a3f53438ce6b725c6dd5814af51cfa45dbced557f726db130d55cde7533bc2092d6b699c2c870af282731e18d651ae85b3db4ba02853f8c87fd5e3ab69bc57b08b81f83c239ccf22e817e2ada4d0ad14487ed14612c8b0973ec0650a55f6bf9af4ae9256ad3546a3f67dd35d987ef21909a94c50f0ef0640e755b1c4e1a012af0d31766eeb5df31cd104c64eb62eb4efb139cf305769401d213f96a488d5ee7e3ce32b0192ee8f0831bfbe8fe95de956886b524d3319b73fd56dc60e9f1c72d78155a97c6f43697b20466b3e7aebd357b91696e7348f4599b34f3591eddfce2a7bd849ab16f7b43ebb16e23d6f5210efa30ab3ba8d32c40662b8662fd911544bc2458c6569ef75a9b9df6a0f6d80d658ba86b241ca19ce9a6fcf01d3daa95afb59c3d89a18b948621394327fc5e920a75f98f5e2b3d6c95fd852adf567b6d37c54d2970856a599f749e2c55dac7c23e3fb1a63bb4cc47b8b94f3d589ac4beef0aad4e6292f\",\n        \"signature\": \"4c00a71668d3213c29c7041c5a037edf13c6514bd0ebc880c909caff1506a45d27809fb74e6602ea2aad0f842831b74fb3d6900ccc520652da28368fd90ca30e\"\n    },\n    {\n        \"secret_key\": \"585871941cc282e333d57bbfc3d4aeda862cfa0a375030cd594b3692848c5f00\",\n        \"public_key\": \"4f343816cd48050b678d3adf70008877c9fcf5cb662cc4ad2b93864c02090707\",\n        \"message\": \"651c101b3e2dfef0783ce9f61bd0a8bdc9307ac0488b9dd70cd90a7ed8f179a78935556295b91cc2b97211e3b981b8dafcb3d06b76d0b6eda7fc61945c0ee2652c5ac454256496cb82f98cc1cc92d81893b1082b31b47e6d22a2de609de4ce8d7cc4f4a152c47f410d7fc37d38ccd629a4b33e6221896081797d0753dd4faa8a8b44d6c4677166dfb4d5215446360a3c28d8f68e38ab54608b98821b83c187b5393ad874a76f4f5d729493a1fd74cc7719caea991d229c5d0c8c4c5f89d8e4345f4f52214313410b8c06b3315f45ed0c2f9138ab966aec0a645b6dba76380a539123e0f33b97f3d060394a3053581ffdef3e6d36531166b553a9dde03105c04af697d95e95217fd6dc968bf3b448d5f3a8e4f5ae7edc30ec78b1aea4f0db189a949a122138cdfb5f9693db004baed1a421dc44122f327287f727cf989fcae3cf3be3e3dd9b9f53502cf5d9fb186de791d310d122869c9fc3b695dec1607477f3e149e52b63cfdfb0d983e89af2f75a8f489843ec05c5ea5f0e721acab387c68025f20abe0d27b4ce29f4a64fb7f8e8a332873d3ed121fb493414b8cb0c00ad3ab616c5be5241471adee9f8f46974eae84a4a8ce6fabb7f5d9a6b75a7e670456fcdcd1d982e8f827a4bbb69dec7e3053dfe835b70301b7b763f0004bc906e145542f487b4dba2ed561bd1a20306236af4b36e4068e8c007b9454f8741a5f8f079ec1db8835eb6544290d6adb52a70d7675d85df4a9a1255bfd936c331fe51c0977d124b5a506d29c6eec33caa25d8eb28952d6ffb9d6e3da890382d888796d374607f6643b89e7326d9edc49a0f53bdcb8cc76ffd393a7706522d04170036ccb66330dbac9da7e6168caa88cb62181e55a7b6d521a2115e23e202ee2480b587be4501447979a8d736f9012ecf00e67b31e8104f6e7df08a9683cdc89c03a4e37ee22928d45fa19094e0d6e7b40b\",\n        \"signed\": \"298856e570188aefcad81bb970f076965770c26762fe29e6554dc7afcdb801723bf6c763b4ccd65f4e15d7d8ea38fcf67ea9d28590c79255c1cfeba7b5e45a00651c101b3e2dfef0783ce9f61bd0a8bdc9307ac0488b9dd70cd90a7ed8f179a78935556295b91cc2b97211e3b981b8dafcb3d06b76d0b6eda7fc61945c0ee2652c5ac454256496cb82f98cc1cc92d81893b1082b31b47e6d22a2de609de4ce8d7cc4f4a152c47f410d7fc37d38ccd629a4b33e6221896081797d0753dd4faa8a8b44d6c4677166dfb4d5215446360a3c28d8f68e38ab54608b98821b83c187b5393ad874a76f4f5d729493a1fd74cc7719caea991d229c5d0c8c4c5f89d8e4345f4f52214313410b8c06b3315f45ed0c2f9138ab966aec0a645b6dba76380a539123e0f33b97f3d060394a3053581ffdef3e6d36531166b553a9dde03105c04af697d95e95217fd6dc968bf3b448d5f3a8e4f5ae7edc30ec78b1aea4f0db189a949a122138cdfb5f9693db004baed1a421dc44122f327287f727cf989fcae3cf3be3e3dd9b9f53502cf5d9fb186de791d310d122869c9fc3b695dec1607477f3e149e52b63cfdfb0d983e89af2f75a8f489843ec05c5ea5f0e721acab387c68025f20abe0d27b4ce29f4a64fb7f8e8a332873d3ed121fb493414b8cb0c00ad3ab616c5be5241471adee9f8f46974eae84a4a8ce6fabb7f5d9a6b75a7e670456fcdcd1d982e8f827a4bbb69dec7e3053dfe835b70301b7b763f0004bc906e145542f487b4dba2ed561bd1a20306236af4b36e4068e8c007b9454f8741a5f8f079ec1db8835eb6544290d6adb52a70d7675d85df4a9a1255bfd936c331fe51c0977d124b5a506d29c6eec33caa25d8eb28952d6ffb9d6e3da890382d888796d374607f6643b89e7326d9edc49a0f53bdcb8cc76ffd393a7706522d04170036ccb66330dbac9da7e6168caa88cb62181e55a7b6d521a2115e23e202ee2480b587be4501447979a8d736f9012ecf00e67b31e8104f6e7df08a9683cdc89c03a4e37ee22928d45fa19094e0d6e7b40b\",\n        \"signature\": \"298856e570188aefcad81bb970f076965770c26762fe29e6554dc7afcdb801723bf6c763b4ccd65f4e15d7d8ea38fcf67ea9d28590c79255c1cfeba7b5e45a00\"\n    },\n    {\n        \"secret_key\": \"0588acd4e09ba90274c8f3d1575b2bf364a776884a9aeb4103415e163ba0bf81\",\n        \"public_key\": \"3ecae697b425d87e34a1d944098e3d32e2c1ec56c3627df80ba2b8a43ddc1903\",\n        \"message\": \"f828f8c9dad298c5b719daa852b17e762598a70f4ecd16a2fc596eb0263899e983d44edcc7bd240cb07610600ae96aac0dfc3be387b616850899b5cf44e1767ffaca3df38158598424f8071414c704e60b422ad77377fa7f6a8c5d0ebc0235e2d43a984f3adf759eb10447f3c2f6b80d5a11ef41d3a09852c0932a1b9ac23e6f40a167de21041bec8885f9433eb80b95c9785958046cdb7bf147a79947823b4149ae0521d7e5aabc1564fa4044106e2e392e9c344457e9929376ea9b4229c6e7738fe79008d554c429396914c36387f579b46bab146f6a9510eb6f8c85551cbd84c7dc0d0b1c010ccba5963a7f39f181e44dbc98e495aa63c01059cbe6a99b07b449e7759c9af9e0f8d9054a67a348fa19d7f91ec0a4d4f2c7026c3b849259a350417fd86cab2142e4cfe3c0afbf25182a2d52bd2e0bc920e85080832b91b927b62948a67c317eb09091461d493eea5ffc47bf085582968258a3c8dd81a858270bddafe7925684a15ffb51bcfaab931afa465e3090e86be41e3547cba234b85fe7db700496a505002df3ca4eaec7b96278c7d1a77db834a91797bbb826d092aa28b49545ed3b1eda23be11a3f528b955cb0c4fa66e16e957e5704cf319e5f79cc09f2d054e6daf19e2926b11e1e413ff822ca141f7c3d385ae95dd20b346e583cfb0c229ec39cf889a5419cd37bc184ef5fb144622080a302d9d7745c451f7d88242cc26b916a3569abc7d1f216d57797a472bc621761758e840eb8e29bc8efcb7aafc7cf8f4e59330d35ee107496dec6e714b1fa4309837bb47eb3a06b4604dd20733cc0eaac2649e18c07342ef55d19b8d039591ac2869acc34b6c3c1ca3cf263ff84ca43a5f6465ba34888c109013b32bfc0d0d15f5a76cec270ab3ac9a106331312f5a0a84282c3a3d4aea1e7cf53dbf8b240bdd111c34d2a93dfd1258fe9267133f7554dcc21a8f439c165d\",\n        \"signed\": \"a111b9706d242cd36d6e8741cbb097b9e2fffa40f43fd6f2d3d91693667332b5f2db5ee3ea20b83291b8405795b74d633d46f475ab7c47617118535b8051d907f828f8c9dad298c5b719daa852b17e762598a70f4ecd16a2fc596eb0263899e983d44edcc7bd240cb07610600ae96aac0dfc3be387b616850899b5cf44e1767ffaca3df38158598424f8071414c704e60b422ad77377fa7f6a8c5d0ebc0235e2d43a984f3adf759eb10447f3c2f6b80d5a11ef41d3a09852c0932a1b9ac23e6f40a167de21041bec8885f9433eb80b95c9785958046cdb7bf147a79947823b4149ae0521d7e5aabc1564fa4044106e2e392e9c344457e9929376ea9b4229c6e7738fe79008d554c429396914c36387f579b46bab146f6a9510eb6f8c85551cbd84c7dc0d0b1c010ccba5963a7f39f181e44dbc98e495aa63c01059cbe6a99b07b449e7759c9af9e0f8d9054a67a348fa19d7f91ec0a4d4f2c7026c3b849259a350417fd86cab2142e4cfe3c0afbf25182a2d52bd2e0bc920e85080832b91b927b62948a67c317eb09091461d493eea5ffc47bf085582968258a3c8dd81a858270bddafe7925684a15ffb51bcfaab931afa465e3090e86be41e3547cba234b85fe7db700496a505002df3ca4eaec7b96278c7d1a77db834a91797bbb826d092aa28b49545ed3b1eda23be11a3f528b955cb0c4fa66e16e957e5704cf319e5f79cc09f2d054e6daf19e2926b11e1e413ff822ca141f7c3d385ae95dd20b346e583cfb0c229ec39cf889a5419cd37bc184ef5fb144622080a302d9d7745c451f7d88242cc26b916a3569abc7d1f216d57797a472bc621761758e840eb8e29bc8efcb7aafc7cf8f4e59330d35ee107496dec6e714b1fa4309837bb47eb3a06b4604dd20733cc0eaac2649e18c07342ef55d19b8d039591ac2869acc34b6c3c1ca3cf263ff84ca43a5f6465ba34888c109013b32bfc0d0d15f5a76cec270ab3ac9a106331312f5a0a84282c3a3d4aea1e7cf53dbf8b240bdd111c34d2a93dfd1258fe9267133f7554dcc21a8f439c165d\",\n        \"signature\": \"a111b9706d242cd36d6e8741cbb097b9e2fffa40f43fd6f2d3d91693667332b5f2db5ee3ea20b83291b8405795b74d633d46f475ab7c47617118535b8051d907\"\n    },\n    {\n        \"secret_key\": \"7d14023eb48bbd437649a241877905a3c932f14640f29a0fb134114e8f33f582\",\n        \"public_key\": \"ea5c11b4b2c5ef4ab706cca3475043c95818eb565a797e33688afeacd68adcca\",\n        \"message\": \"9001db31f279be505319b8e72bde1199512980df65f0d8a9b4930467413a997b97a362b572a4b44bc940487f18b208ce6ac5c68716d3af1bcef170383b5c4b5c47e44737726f9383bc4f144768bf5cafb4e9dfe39761e6ed478971d1c70e6dab2fd0499dff9293b239d16c960261c68218b9f5b1bee690f0d240c1b3db711f9e821f0809bbeb9aaf249ccb168c67d965562d24f848516140bfd9fc050d4f20da5a1794468a9c0725ea5c669d5c630d9310e5745107dad37261b5d91e38e08512e6f373ec5dcad5ca09072907c8fb7bf3b926c3339490b3f51f7644e73ae2ec01d61be7c6526536b4ffd1ab6849fe0c2f40d3bda2a49e5550b8df979081da85168d0f71582b903677526d1f1b1511e138b684fc46aac8bd80c3def7ee8138190461807c5536125cb0e2c3d083a187c7269cb531ec3678787b32555cf04ab093c9002e7d792b4d933f2e3070f39ac8ccf8d5f5455f12109d8a8aeb4e212fad4a70b147c04a7b918460b1316376e64020859517eb7ee30c290be8b8d6f9673915256c3b04b9d9054b52338e0d360785e46a182844c5c3766aea8ed311b2d481c0b7b2114e418ed17f8debf01a83ff37517024ee9e28e0c90dce6d059ffee413d27cd62783a8b8b5016ad276e39dfd8f8f3ddfc428101818ce507f003eb58c9a5cc8b1aff05aab8f0d7f1d1f6d4b871dbced1f3d2866239752fb13f6e18034bb2b5a6635caa6ecc462e058ebe2fa651d3d0f36e20a31f765e4b958270bd825c6818aac1ad7563135aeedf14a2b6d398b6e34008401b218461820071c5af77846cb9c328190c061d5aa6e0ecde7ef5856b0e6814f833f704096df0825fa4b46dcdacfa27cd87bd7bfeff7f8cae166a3a04d437c7be716c49045c7bd3d1349627c9cbd04c15f00a696e3cffbb45af29122627e7ed33b4249913bec00f0e28aa11298cce8b649081fe3b169b4aaeaca485bda\",\n        \"signed\": \"31339dce23336df5b2b193522aa3dd2d4114a66af1656289c952bc11c9b210f77a54d46161f4e0c52b3013e40b9e9e8427d851325bd71c4d99353eeed751080d9001db31f279be505319b8e72bde1199512980df65f0d8a9b4930467413a997b97a362b572a4b44bc940487f18b208ce6ac5c68716d3af1bcef170383b5c4b5c47e44737726f9383bc4f144768bf5cafb4e9dfe39761e6ed478971d1c70e6dab2fd0499dff9293b239d16c960261c68218b9f5b1bee690f0d240c1b3db711f9e821f0809bbeb9aaf249ccb168c67d965562d24f848516140bfd9fc050d4f20da5a1794468a9c0725ea5c669d5c630d9310e5745107dad37261b5d91e38e08512e6f373ec5dcad5ca09072907c8fb7bf3b926c3339490b3f51f7644e73ae2ec01d61be7c6526536b4ffd1ab6849fe0c2f40d3bda2a49e5550b8df979081da85168d0f71582b903677526d1f1b1511e138b684fc46aac8bd80c3def7ee8138190461807c5536125cb0e2c3d083a187c7269cb531ec3678787b32555cf04ab093c9002e7d792b4d933f2e3070f39ac8ccf8d5f5455f12109d8a8aeb4e212fad4a70b147c04a7b918460b1316376e64020859517eb7ee30c290be8b8d6f9673915256c3b04b9d9054b52338e0d360785e46a182844c5c3766aea8ed311b2d481c0b7b2114e418ed17f8debf01a83ff37517024ee9e28e0c90dce6d059ffee413d27cd62783a8b8b5016ad276e39dfd8f8f3ddfc428101818ce507f003eb58c9a5cc8b1aff05aab8f0d7f1d1f6d4b871dbced1f3d2866239752fb13f6e18034bb2b5a6635caa6ecc462e058ebe2fa651d3d0f36e20a31f765e4b958270bd825c6818aac1ad7563135aeedf14a2b6d398b6e34008401b218461820071c5af77846cb9c328190c061d5aa6e0ecde7ef5856b0e6814f833f704096df0825fa4b46dcdacfa27cd87bd7bfeff7f8cae166a3a04d437c7be716c49045c7bd3d1349627c9cbd04c15f00a696e3cffbb45af29122627e7ed33b4249913bec00f0e28aa11298cce8b649081fe3b169b4aaeaca485bda\",\n        \"signature\": \"31339dce23336df5b2b193522aa3dd2d4114a66af1656289c952bc11c9b210f77a54d46161f4e0c52b3013e40b9e9e8427d851325bd71c4d99353eeed751080d\"\n    },\n    {\n        \"secret_key\": \"e8306bada6d55eb188d9f75c815cc914e93c9c7222391c15bbaeaf9354437935\",\n        \"public_key\": \"bf2798b8e554f51e2286c3034a88e577ff23fa32a67244ea8245912e8bf46da4\",\n        \"message\": \"d7043809c3e3dc00b17efd52c9130b11b786f1e257b5e22f81a7faae600bbcdfd518537fe852c642359762fb75e8ad859249e6ab49ce1bb04f2492f2aac35446ba6eb03e76de3abd2d5fc7e6146843add042860a4a16b59bdd7d038378a35e1a04b1217a55710d937e2c9032232ea2cdd1d25a0bff71ef5d3e0c056b29cb92f6df692bde14dfa50e132bebd89e9f1833880b657a781e94ecb603041756e5517d4423c56fadc13e2b318088feddf3b5c83c20b46fddbba92305e48606dab748ce3848b843f4711f370c3ec7d5e19ab4c0ac1ae15aaaf23d65fecedabc08049b9e29113e5761ed9d1c62eb075cabb2674cdbe1e3a889bae4b1dd31b6a5b2ea1b8dedcc3c515edc4467c30231176cd44bec8a057951ab5cd39a9623f8af8473cd27d93302bf8aa624c9c3c5799da1dc494494ef8ff1dbe0187ea5162670b8d098c3a94919398dadf79e6c2491c444392c29cd50d57435063290842bfa0e8530faebc006d6ea7801117e0a3f019ee28fb3792235402e2f69b87a43dc227f9de316029756c3167d64a3a3f6d73160331d5a18eee5b0e6e22a663efdcc8d67af3bced041ea843a5641603ec72efd644e173d199a8c830b2ea5fec0378027c37225afcb604c4cdcf409be1c509c9a377be0d0524107c6d92b5f09a29efb7109295670bb1a1dd3ea008bb79185f09b98f020c43f1439685b96f6199311a090870f0d9b10d495cd410aa95b7e53749be3a6c0fbc729f96cf8564397b09c13514016825f72f14eb93294d7010accfd11f17a6ac8f544263d6038d5c7db29486291b30ea49b6b54cf88826dd252cd9dbb57d841b5a4cf702a3264faa4dccc86ab14daf124ef3d5335a6878d065c6ba29991045765ee5542cc9f5d9f354dcd2c6e0cf7ff3a30f649b5912d971d633578f1e9f263874d0565c247301dcbd15d76211ae2d3d506fc64deb7e042565d438e2bfb249243b7\",\n        \"signed\": \"cc6627308e2f424383fa70594f575791600540027a2751619b283affeaebc9c9d29ac6db286dd2c1b596587b878d1df4781d436bb570c1c0f0d33368dc66520bd7043809c3e3dc00b17efd52c9130b11b786f1e257b5e22f81a7faae600bbcdfd518537fe852c642359762fb75e8ad859249e6ab49ce1bb04f2492f2aac35446ba6eb03e76de3abd2d5fc7e6146843add042860a4a16b59bdd7d038378a35e1a04b1217a55710d937e2c9032232ea2cdd1d25a0bff71ef5d3e0c056b29cb92f6df692bde14dfa50e132bebd89e9f1833880b657a781e94ecb603041756e5517d4423c56fadc13e2b318088feddf3b5c83c20b46fddbba92305e48606dab748ce3848b843f4711f370c3ec7d5e19ab4c0ac1ae15aaaf23d65fecedabc08049b9e29113e5761ed9d1c62eb075cabb2674cdbe1e3a889bae4b1dd31b6a5b2ea1b8dedcc3c515edc4467c30231176cd44bec8a057951ab5cd39a9623f8af8473cd27d93302bf8aa624c9c3c5799da1dc494494ef8ff1dbe0187ea5162670b8d098c3a94919398dadf79e6c2491c444392c29cd50d57435063290842bfa0e8530faebc006d6ea7801117e0a3f019ee28fb3792235402e2f69b87a43dc227f9de316029756c3167d64a3a3f6d73160331d5a18eee5b0e6e22a663efdcc8d67af3bced041ea843a5641603ec72efd644e173d199a8c830b2ea5fec0378027c37225afcb604c4cdcf409be1c509c9a377be0d0524107c6d92b5f09a29efb7109295670bb1a1dd3ea008bb79185f09b98f020c43f1439685b96f6199311a090870f0d9b10d495cd410aa95b7e53749be3a6c0fbc729f96cf8564397b09c13514016825f72f14eb93294d7010accfd11f17a6ac8f544263d6038d5c7db29486291b30ea49b6b54cf88826dd252cd9dbb57d841b5a4cf702a3264faa4dccc86ab14daf124ef3d5335a6878d065c6ba29991045765ee5542cc9f5d9f354dcd2c6e0cf7ff3a30f649b5912d971d633578f1e9f263874d0565c247301dcbd15d76211ae2d3d506fc64deb7e042565d438e2bfb249243b7\",\n        \"signature\": \"cc6627308e2f424383fa70594f575791600540027a2751619b283affeaebc9c9d29ac6db286dd2c1b596587b878d1df4781d436bb570c1c0f0d33368dc66520b\"\n    },\n    {\n        \"secret_key\": \"363c1ea7c32ea328a055af7bd8b3bfd204fb0bbd4bf42ffe262f3a5ebd54da55\",\n        \"public_key\": \"7a83ecca51ef6e5aa043a5ce04d9288add49a277548bd3016b693ffa79a22edc\",\n        \"message\": \"c41c1e1fb75954a0ae0ebc29090b9fc533e693e7c7105cfe40ef526e4e12a7405221f218c7ac019e1d4c92da2853f2d726aa62277924df0c343fc3d47cd5a99a3e279b26a1b13b1f2aa36f7ccb4b54fbef18bd87a55f1bc40ce7b2029145ee7aab391795ac68de6199f50594fc79611b85131c143021f26fa358da0c7c6a65dde076dab488675b722309e5ed9746d18a89309906a7a9df237dd27bd590ccc77c402ef6e19ca63cc86b85160330ee6e1f1f47a2ff807eefadc00963520a1c600a3e45aa7fb2554f47d897bd86d81c3b0877101222fa7850b80ce3bc06c9e58c0c96e32fec8530c9fa1e4163f0ef8456952bf6dd58045a363d61880e9ac976a3603ef77a4c395e6a07e342f6023b8af10225cff240efc0366a799fd86e9d062060d8724033bdf67588cd73ac284de4c6943cf45ee4f75f5937d97d78105f0bbece04d3dcb5e424eff89b773e5d6b4f37efa9a0654cb3ef345278a62d876cfef9a3dcdceb7081441877ebd5fa30c9d954e3684fa476a4f485d426fd3c8c32bea0f9cc20b15e8fdfc3ca4b302c074f508132d15de625c10ae0737811463dcc55fcc4014b20208fffcefa9dd452119b1652de41348f69f2c488f5cc1856d6e78a5cbe3e373dd4598e2d39f876eb94e0b01b21fa9129ef41b639f4e05e69deb1835ed44b9112a6862a5bcea072c6e1b8f0f058f46bac2a845a582d148f17760b9e0a2ba60bbbf3884af94dd4c7ec9db08e9a5bcc6dde1346442ee1f4707d1f79b69ba867f418dc279173f77adbc58ab85ea393b9dc68261900c1caa82d2f50474c42aec911314278c0affa2a6b6c36d1ff88f3b49fb2b7c339d2a7c2b3049f8c0a08d16a9e8df93d130da484bdba6dbec534cd51097a048221106bab48d67f951b7505a1484892b85779c5a3111702124d957acf2dc352ef9ba247bc80e2ce96269ce85e78b9ebda989076dd5ff73e1eb275e5d7\",\n        \"signed\": \"5fd1e5f9922a12f636b72a7d6217091f948a55bcb1826b8fcaf99d26416c7ab1351c10f4093ffd8a2af86914a0a98184ec7e06d2dee87fdc0f4a47f8c63cf501c41c1e1fb75954a0ae0ebc29090b9fc533e693e7c7105cfe40ef526e4e12a7405221f218c7ac019e1d4c92da2853f2d726aa62277924df0c343fc3d47cd5a99a3e279b26a1b13b1f2aa36f7ccb4b54fbef18bd87a55f1bc40ce7b2029145ee7aab391795ac68de6199f50594fc79611b85131c143021f26fa358da0c7c6a65dde076dab488675b722309e5ed9746d18a89309906a7a9df237dd27bd590ccc77c402ef6e19ca63cc86b85160330ee6e1f1f47a2ff807eefadc00963520a1c600a3e45aa7fb2554f47d897bd86d81c3b0877101222fa7850b80ce3bc06c9e58c0c96e32fec8530c9fa1e4163f0ef8456952bf6dd58045a363d61880e9ac976a3603ef77a4c395e6a07e342f6023b8af10225cff240efc0366a799fd86e9d062060d8724033bdf67588cd73ac284de4c6943cf45ee4f75f5937d97d78105f0bbece04d3dcb5e424eff89b773e5d6b4f37efa9a0654cb3ef345278a62d876cfef9a3dcdceb7081441877ebd5fa30c9d954e3684fa476a4f485d426fd3c8c32bea0f9cc20b15e8fdfc3ca4b302c074f508132d15de625c10ae0737811463dcc55fcc4014b20208fffcefa9dd452119b1652de41348f69f2c488f5cc1856d6e78a5cbe3e373dd4598e2d39f876eb94e0b01b21fa9129ef41b639f4e05e69deb1835ed44b9112a6862a5bcea072c6e1b8f0f058f46bac2a845a582d148f17760b9e0a2ba60bbbf3884af94dd4c7ec9db08e9a5bcc6dde1346442ee1f4707d1f79b69ba867f418dc279173f77adbc58ab85ea393b9dc68261900c1caa82d2f50474c42aec911314278c0affa2a6b6c36d1ff88f3b49fb2b7c339d2a7c2b3049f8c0a08d16a9e8df93d130da484bdba6dbec534cd51097a048221106bab48d67f951b7505a1484892b85779c5a3111702124d957acf2dc352ef9ba247bc80e2ce96269ce85e78b9ebda989076dd5ff73e1eb275e5d7\",\n        \"signature\": \"5fd1e5f9922a12f636b72a7d6217091f948a55bcb1826b8fcaf99d26416c7ab1351c10f4093ffd8a2af86914a0a98184ec7e06d2dee87fdc0f4a47f8c63cf501\"\n    },\n    {\n        \"secret_key\": \"db2228ffffa9d2534aef918fb85b821ad360e2d39dec5aeb2db0df02497f9416\",\n        \"public_key\": \"6d0195777f8105ff523b79c59e3c3081fe89db6f87033f094fa5a940cef84bb4\",\n        \"message\": \"fc07cd99040f13e5a84f94746d6bb868f752b448b62d99593ef29e43cc8245f0470f65552d643220f6719285e15c37a6d174aef76088ccda5f88685b52dae284c65b380da345a2e1af2ed76480d269cb934b4317620b792ebb39b2a678247d6d815f2a5cb9aa560e4bf6deba4c0a0ddc82d0e5a5a65acbc478e1ec6b064d7bb7388a73f6eda30b0b6b73dd8f879263ad1a0348671dcf211cb96ed08ed52f3317da68185d6bb2589dc11d755d47a3b6f6a0386a8594d9570b2e9b0d4b5e13dccd9bb7acbef0ab276a7aebe12931be67f10de267a029895301f5662530ad8ab3d230b3b6d7093acdfbf274757a9078e20c23bc822deffa61005486102c01ab82bdc8cdcf1bb37f9b56d39e50fd5a6895416e767f4e36c1a41778908125b5ca3f92a90da9addff155fb1fd7768808a80f203ed737ef007763bd2fea9ff28c84b43551c9fc438ffc47fcfcf64dc7700613aa8b3af8633ae8b6987437c0aa4781be1e821396c536cb3005d05549b1cba70135afb7fe3068961cad3a1463cc0b5560684e27bba77aef419d823868e0cebad1f1ce0ae902744a152dd29451a17e28a89a7158a1836efce4a3e5c7d1faa4c3875bc46c4d9be22d66d366ac6f59538a00b275b02fac6da755a854081997d5d1d0e6e568a5958cf334c518cd517ab9d73c48d6cbc4ae4eea4353113e7e4a7c05920e686bf07afbfb8dd2ec4f18fa7138e57d332cd7a4228fea73bc09252f24427294ebd3645ee0996c2e851a8aa51a7cd9fc2eab47c0ab213f4f51d216091ed089e4592e9bb0828b858f84f60b93ad84a0a22827cbd27414b781322a04d3960828f638df2834c7f7839d70db126bee5af2ee7559a8ac4c01a6c391396af93fa0608940297ddf8900c5ddb466340ae51c60c7ead762447e76d8bccb573997cf6614d188a0b9a2f56eed9b0f9d463a19787f4092581a65c6bf781b93c56087e54ee1343aab\",\n        \"signed\": \"82189d340bc11ceaa400410e08bae9d901af059125e953786f8a043ddf11f7b2f8e3b617accd78e2939adfabf2d2471fafd6f5bc45b14075b328e34d8075b207fc07cd99040f13e5a84f94746d6bb868f752b448b62d99593ef29e43cc8245f0470f65552d643220f6719285e15c37a6d174aef76088ccda5f88685b52dae284c65b380da345a2e1af2ed76480d269cb934b4317620b792ebb39b2a678247d6d815f2a5cb9aa560e4bf6deba4c0a0ddc82d0e5a5a65acbc478e1ec6b064d7bb7388a73f6eda30b0b6b73dd8f879263ad1a0348671dcf211cb96ed08ed52f3317da68185d6bb2589dc11d755d47a3b6f6a0386a8594d9570b2e9b0d4b5e13dccd9bb7acbef0ab276a7aebe12931be67f10de267a029895301f5662530ad8ab3d230b3b6d7093acdfbf274757a9078e20c23bc822deffa61005486102c01ab82bdc8cdcf1bb37f9b56d39e50fd5a6895416e767f4e36c1a41778908125b5ca3f92a90da9addff155fb1fd7768808a80f203ed737ef007763bd2fea9ff28c84b43551c9fc438ffc47fcfcf64dc7700613aa8b3af8633ae8b6987437c0aa4781be1e821396c536cb3005d05549b1cba70135afb7fe3068961cad3a1463cc0b5560684e27bba77aef419d823868e0cebad1f1ce0ae902744a152dd29451a17e28a89a7158a1836efce4a3e5c7d1faa4c3875bc46c4d9be22d66d366ac6f59538a00b275b02fac6da755a854081997d5d1d0e6e568a5958cf334c518cd517ab9d73c48d6cbc4ae4eea4353113e7e4a7c05920e686bf07afbfb8dd2ec4f18fa7138e57d332cd7a4228fea73bc09252f24427294ebd3645ee0996c2e851a8aa51a7cd9fc2eab47c0ab213f4f51d216091ed089e4592e9bb0828b858f84f60b93ad84a0a22827cbd27414b781322a04d3960828f638df2834c7f7839d70db126bee5af2ee7559a8ac4c01a6c391396af93fa0608940297ddf8900c5ddb466340ae51c60c7ead762447e76d8bccb573997cf6614d188a0b9a2f56eed9b0f9d463a19787f4092581a65c6bf781b93c56087e54ee1343aab\",\n        \"signature\": \"82189d340bc11ceaa400410e08bae9d901af059125e953786f8a043ddf11f7b2f8e3b617accd78e2939adfabf2d2471fafd6f5bc45b14075b328e34d8075b207\"\n    },\n    {\n        \"secret_key\": \"66b50f692e395eb83386e027c82ce3fdee3bd899b0d3179db086fbf524f57459\",\n        \"public_key\": \"448536e982408437ce89674053e3c589c98c095c60021a118178c6261d8810fe\",\n        \"message\": \"7428a964212bcbe8df7d59e48e923480aa0ee09b910d04efb6903662efc3107ac8fdc0c5f39272740cd877e16cd71c549238c337220ce2f6b5a1fc6f7b0a1cd4ed21d93889081e34fb7fdecf4178bbd431e611e539d900c3d0ac3dc7107b36b41d6d0d5d32c19727f908b6eb367febb352a493581ff128b56c4caf6fb8e09981f0d37957d1282017fbb807614c20f465dc02b0cd969983bd5ae1ebf6578d7ff3ceff320e25562199dee934757cc1f58d5540c41aac1ce4f211f0b8ec4107174030e702bc6a8a9c85c505c9316aefea3e4372242de019b35e2bd3c5a956521971c106a3adbbc13cdc4f7f9d3c58b96a344b4ac3ef6bd8aca6ed9876b43e6497faf7fa4cf27fbcb665730c091e13aaf7e9efe7dd10e14eb19a9200424210ec8b8fba7e69444ce1a9e3a7b26c11f6b7145b6983a7805776484031bff52e81ae769b70a282b094ffb5fb5525dc1a872e207e827a2e11f4ecf7b5308c748a9278ea7bd66188194400430c8cd596ebb87221e536f6afe1f1505d6a59f41d16a2f014e1cfa513f7a69731d7bfdb2affcefe0537d42c796e3fd27e41b7ca72051bef28bb7bde7010dcfed8aa16ef676db6e520c3cef8d6f58a9a2813cff0f7041f87fbfb8431e020ede1d4eaf19e23b983445c5915b54adfb557fc20d0058f40f5e09825dba8d8f20c00f43b3aeebb6157be32ec54627d5d42ab813cf97f095d26db8036c12e82cb963e8001167e61ab393b4cca755ecea869954e323fa5262c5fda3e0be9a51e5af51fa6444824fb837cc67be537a87569c30cf0114d39a03942de4e1cd523355dab1af36080a9a9a548be1c2a7fbe5433772315d283e5156df648bee4b7dcda74f15905d542be54873c15c53ff42acabf8c56f257d764722db4e9c718e12098a3457486a6c947ac2de0af53e82cf950bb37ca29c8dadfa3646db4982af572d39b268c7f96b03ef6b653c87945f29bc5\",\n        \"signed\": \"bd13f6362c07078922f30c6330751bf6e7cf42a76916ee653eb17accff1fbbca35258c4cbc582a5e8cc94fd2c7edeb53762f1fc23123d7f4f145409b31cd38027428a964212bcbe8df7d59e48e923480aa0ee09b910d04efb6903662efc3107ac8fdc0c5f39272740cd877e16cd71c549238c337220ce2f6b5a1fc6f7b0a1cd4ed21d93889081e34fb7fdecf4178bbd431e611e539d900c3d0ac3dc7107b36b41d6d0d5d32c19727f908b6eb367febb352a493581ff128b56c4caf6fb8e09981f0d37957d1282017fbb807614c20f465dc02b0cd969983bd5ae1ebf6578d7ff3ceff320e25562199dee934757cc1f58d5540c41aac1ce4f211f0b8ec4107174030e702bc6a8a9c85c505c9316aefea3e4372242de019b35e2bd3c5a956521971c106a3adbbc13cdc4f7f9d3c58b96a344b4ac3ef6bd8aca6ed9876b43e6497faf7fa4cf27fbcb665730c091e13aaf7e9efe7dd10e14eb19a9200424210ec8b8fba7e69444ce1a9e3a7b26c11f6b7145b6983a7805776484031bff52e81ae769b70a282b094ffb5fb5525dc1a872e207e827a2e11f4ecf7b5308c748a9278ea7bd66188194400430c8cd596ebb87221e536f6afe1f1505d6a59f41d16a2f014e1cfa513f7a69731d7bfdb2affcefe0537d42c796e3fd27e41b7ca72051bef28bb7bde7010dcfed8aa16ef676db6e520c3cef8d6f58a9a2813cff0f7041f87fbfb8431e020ede1d4eaf19e23b983445c5915b54adfb557fc20d0058f40f5e09825dba8d8f20c00f43b3aeebb6157be32ec54627d5d42ab813cf97f095d26db8036c12e82cb963e8001167e61ab393b4cca755ecea869954e323fa5262c5fda3e0be9a51e5af51fa6444824fb837cc67be537a87569c30cf0114d39a03942de4e1cd523355dab1af36080a9a9a548be1c2a7fbe5433772315d283e5156df648bee4b7dcda74f15905d542be54873c15c53ff42acabf8c56f257d764722db4e9c718e12098a3457486a6c947ac2de0af53e82cf950bb37ca29c8dadfa3646db4982af572d39b268c7f96b03ef6b653c87945f29bc5\",\n        \"signature\": \"bd13f6362c07078922f30c6330751bf6e7cf42a76916ee653eb17accff1fbbca35258c4cbc582a5e8cc94fd2c7edeb53762f1fc23123d7f4f145409b31cd3802\"\n    },\n    {\n        \"secret_key\": \"55328be4b370822733ff3989a6a3282d65fe8f207ab7270d7c2e727ca3cfaac4\",\n        \"public_key\": \"518e02eef52f5aaebde3d108ea79ecadfc4d994ce1953621e54b7b3b121ff8ff\",\n        \"message\": \"6c24c9afbbf12dcaee6f10e4089252f2c60b2ab93a02c1602fb5de4ce3bd923eb02fe1039fdc15996a446915e767dee0176dddb78e9d6bbf069675775a829dd808d376b0cf7920bf1a66e1303ba52419785f25f28bb33899ebde840c0ab14b919a6580cbaac3a805627b9c4a77baa16f825a9eac2d6d3641651493370e50eee94c74049764365605ab4dac1a030227a330aa178f2f8da377af73f0bb040bac12366e65e0591055f9f23eaca35e9688d837a3c0d99c168fd886acc922cf37a7118ef8a44bb0a4fa4288049309a7dc1bed80621e1063e3e592c0fba42d7398eb15f74028ac15d7ed65a6368a13b7f956d19547eb506ce7ec90734eb949cff1d98ce414f10adcba8c007320018750a71bd36d3b6bfd6127054508e3ef65d99848514d33d68b58e3a4b224f79b6e34dd480340467fe7f025cc88213d808fbb5b91e2e43cf9d950640798659273d47a25f1f0132f6882faadbafba28fee5fa17272c1a9001172b3ab6ff2c315f26c07734405b5ee8b5e4f08e1e3b8aea019467fb071887f191901a21c5976c1ca8aaf0a1d4a2e698e7623e9bbe9ca2a67a153a16f895e6dd9ea924441b4bd0b674552e398b8d970343a9bc776a3a3fc1a8660c5625d6081b5d87f0f8ac9f07ab5abe77cdb8e30d2fd1f6f46525c75dd0dd1ca3281cc89346fb3e6d7388ebee154cb59bd9e95ed6a41d5df668b59ea137868eb120b8a2cfdf4674414fd279699f28b5a5ccc2e2fc802a4c9e0b85b76f20f6bce2a4954886fc402670a71efd261f5dd7bca16884a287c622fd445f68d44151cc0134b229da38daaab81b5c960d57700ca92b26d0b142134ce94b7be6c18610ea2136f8ba8329a2e8c000b8f02fe05bcf72cb71f8c72535ffcd818e38e7992a8f0c32ac62177d1522ae552c60c1ee616b75e4b3442e79657e4a333c0b3d744eaf260d0c336931686a6d668c64fef440052352c2b258cfb65\",\n        \"signed\": \"f58db19fd834e15194c3c0f8a6a50ebc4cf074e80ea2e70cdaf1e169bd51ebd0990bad77c4fa208b8dd1e2c8574c01b5f596c8dfa6bb8e6ae3a47ff412e7e2096c24c9afbbf12dcaee6f10e4089252f2c60b2ab93a02c1602fb5de4ce3bd923eb02fe1039fdc15996a446915e767dee0176dddb78e9d6bbf069675775a829dd808d376b0cf7920bf1a66e1303ba52419785f25f28bb33899ebde840c0ab14b919a6580cbaac3a805627b9c4a77baa16f825a9eac2d6d3641651493370e50eee94c74049764365605ab4dac1a030227a330aa178f2f8da377af73f0bb040bac12366e65e0591055f9f23eaca35e9688d837a3c0d99c168fd886acc922cf37a7118ef8a44bb0a4fa4288049309a7dc1bed80621e1063e3e592c0fba42d7398eb15f74028ac15d7ed65a6368a13b7f956d19547eb506ce7ec90734eb949cff1d98ce414f10adcba8c007320018750a71bd36d3b6bfd6127054508e3ef65d99848514d33d68b58e3a4b224f79b6e34dd480340467fe7f025cc88213d808fbb5b91e2e43cf9d950640798659273d47a25f1f0132f6882faadbafba28fee5fa17272c1a9001172b3ab6ff2c315f26c07734405b5ee8b5e4f08e1e3b8aea019467fb071887f191901a21c5976c1ca8aaf0a1d4a2e698e7623e9bbe9ca2a67a153a16f895e6dd9ea924441b4bd0b674552e398b8d970343a9bc776a3a3fc1a8660c5625d6081b5d87f0f8ac9f07ab5abe77cdb8e30d2fd1f6f46525c75dd0dd1ca3281cc89346fb3e6d7388ebee154cb59bd9e95ed6a41d5df668b59ea137868eb120b8a2cfdf4674414fd279699f28b5a5ccc2e2fc802a4c9e0b85b76f20f6bce2a4954886fc402670a71efd261f5dd7bca16884a287c622fd445f68d44151cc0134b229da38daaab81b5c960d57700ca92b26d0b142134ce94b7be6c18610ea2136f8ba8329a2e8c000b8f02fe05bcf72cb71f8c72535ffcd818e38e7992a8f0c32ac62177d1522ae552c60c1ee616b75e4b3442e79657e4a333c0b3d744eaf260d0c336931686a6d668c64fef440052352c2b258cfb65\",\n        \"signature\": \"f58db19fd834e15194c3c0f8a6a50ebc4cf074e80ea2e70cdaf1e169bd51ebd0990bad77c4fa208b8dd1e2c8574c01b5f596c8dfa6bb8e6ae3a47ff412e7e209\"\n    },\n    {\n        \"secret_key\": \"7da05f04e5d38b989b83f72f7ab26c138776758f4f577e49dc73d6013ff43759\",\n        \"public_key\": \"b1de5167f4d330804eec9eb565ef4055f1b64dd95e1c9b27c67ffef91482cca8\",\n        \"message\": \"a6a861d8947c5cd6ad0819602e32ea7681c8f73010eee553e5defbf7982098b5f7b39924bb7959ad64c30326bed560bf51e9983cda5dff4f311eea24cbe68c6106ceac9b843aa4e2ad1b6f8ae1e4f96871fc025be4a616385ff2d4b7f56829abefaf6aacbb780d6cbbc951b6e05a787f885e3325611665ecc924274aa531bc133f62c76cb3ad148f3c9579a815a14200b7648dae0b07b327d3bfccdb6fe3b6cbd70ea65e6c0cc2516a896696d07b2e77713b0bee3b92fb1b6f75b0820a5cb62c5fe6204003943e24857166fbdf571f115d45f42e75901df8b12c32618aacb0d24286c8d30396051fc272aa17f4d2d47461152aacd3faa2b7b208312278e809240592d1d1aa585c56280e66ffd92b5717d0cd1eb9fb7401def879487c374e5c530b6febf911122574d24fe104b4f45c7c601e6c917d3c1882c1ad3c555d8f2ce955b5a10db0d5a8b8ac7a6266b2e6b27ad0ee34f47ad857367d52f7096d4bacef0e46725488424b93b89acd429ffb5ef33a0b081dd09479679196023c3967f44ad41eb1a2395527fd3b79768f1b885f0429b495ab60525691be84650632a2f66cb63ad5bf2f6ae70b668c5a193f7499fc4fc42cf8cb308ce5029a5027babef55d1925ecfba9f27eb6081619ed0df8569fd80e9da104db39b5b8140bfebebd29085440065819deba8d469ae8b3ea6d3bac5891f9a4ddfb7f1f06d13c31a07ee53fb54bc97bd08696394c38e7f3680c0f02f975f469921147a409859097813b4c3fa43d174ac402f1a528cb5fc4b807518432eff33407a111ca3a3d7e9e84135abac8a8f52ea631c86d74a1c6e5749edd1491c0024e7de7fe52856829b72fd13da63a1a2343349df662ab3163536032346e5347f043fff528bf67150922fff2026bab742db9cae7cb2e3c74580719652c28447c5e2098231797ee6ef1231f5792054bc3359a32c86d2f94f85fa7d4a7419dd241ff662a\",\n        \"signed\": \"05f117f9bc3ea55d455e9ef135e92e7665d18070d8f5e375df67be1817ce14357a55e70166f326b77d85243227cf67d8f2e0bf8440cabfb05275b373f1e1190ea6a861d8947c5cd6ad0819602e32ea7681c8f73010eee553e5defbf7982098b5f7b39924bb7959ad64c30326bed560bf51e9983cda5dff4f311eea24cbe68c6106ceac9b843aa4e2ad1b6f8ae1e4f96871fc025be4a616385ff2d4b7f56829abefaf6aacbb780d6cbbc951b6e05a787f885e3325611665ecc924274aa531bc133f62c76cb3ad148f3c9579a815a14200b7648dae0b07b327d3bfccdb6fe3b6cbd70ea65e6c0cc2516a896696d07b2e77713b0bee3b92fb1b6f75b0820a5cb62c5fe6204003943e24857166fbdf571f115d45f42e75901df8b12c32618aacb0d24286c8d30396051fc272aa17f4d2d47461152aacd3faa2b7b208312278e809240592d1d1aa585c56280e66ffd92b5717d0cd1eb9fb7401def879487c374e5c530b6febf911122574d24fe104b4f45c7c601e6c917d3c1882c1ad3c555d8f2ce955b5a10db0d5a8b8ac7a6266b2e6b27ad0ee34f47ad857367d52f7096d4bacef0e46725488424b93b89acd429ffb5ef33a0b081dd09479679196023c3967f44ad41eb1a2395527fd3b79768f1b885f0429b495ab60525691be84650632a2f66cb63ad5bf2f6ae70b668c5a193f7499fc4fc42cf8cb308ce5029a5027babef55d1925ecfba9f27eb6081619ed0df8569fd80e9da104db39b5b8140bfebebd29085440065819deba8d469ae8b3ea6d3bac5891f9a4ddfb7f1f06d13c31a07ee53fb54bc97bd08696394c38e7f3680c0f02f975f469921147a409859097813b4c3fa43d174ac402f1a528cb5fc4b807518432eff33407a111ca3a3d7e9e84135abac8a8f52ea631c86d74a1c6e5749edd1491c0024e7de7fe52856829b72fd13da63a1a2343349df662ab3163536032346e5347f043fff528bf67150922fff2026bab742db9cae7cb2e3c74580719652c28447c5e2098231797ee6ef1231f5792054bc3359a32c86d2f94f85fa7d4a7419dd241ff662a\",\n        \"signature\": \"05f117f9bc3ea55d455e9ef135e92e7665d18070d8f5e375df67be1817ce14357a55e70166f326b77d85243227cf67d8f2e0bf8440cabfb05275b373f1e1190e\"\n    },\n    {\n        \"secret_key\": \"1b8ec65880edbf039a13e970b15aa67e192aa02ca65cff9ada17d4558f40137d\",\n        \"public_key\": \"12c1191e4de3bd44d039070153adb7b581f600e9a1dd69aa89f277c7069e76f8\",\n        \"message\": \"37f18b7f64c5133479d6dae3bef679cdc21ece3f5b579a6a9c3fa2e59e9be87d2009f74e1cfdaccb1ce37d00702369bd169d94fdcf85af9fa3217d27e6ed6d1d8e5df7615e8e37ea55de1fd0b06d77b4c83b929d80586fa0694be72ec8b365ad2cbcdd2b1ad8cf7f036dfa4daa1a9036cdb120432227b1f07b8866b122120309eb914ab84cddeba1dec48ab92636728588fedb3aaad7e7dbb2ac30e63c6f5f90fc6ce62d6d3bd88b0d5aacfa61de9f3267b300917b57a48036ab20c9a05446b8767494af249e7de7bc507a2207cc956f7184555a7d5d8883bb4b3e93f2dcfc57b0da8638658dcdce885d44d9cc68b1d8170a3677cc5e50cbf33d543ebae4477d9239cf83384ec59b4233e8ff3343f06f301877729a53d420bf01c62e66ab7fe55dd87ee823a58fcb87870e1f52e879177cd439c533f5a223e5a3436fe9d6426548dacfc86a0846d3ed23ac042563e887ff46aad005f4e1dee3ee0ee4c27a7251709ae40abc5e256864e4785a4edd8b2adf1bc5b4018e28d0b175867b02d052a6e17e411a3d8beb2a4208b76cc621fd18be148e235d55aa7127706557dec053a13f1a47dfda405b3fe5bd28ef5d348619f51e595ef5055f839efaf110e4901631ac31a02f4f7ee424a3a2c3e00d2602d2cc1e492906eea420a9268238ac6622a08974e5730292e6ed510256efde667e0d9a0ff2213f54120ccd81ffaa6b7cc48141a2b729852af583d26aa51fbde67be4df14e520c2257a73c5c2e3c3d87dfb25361175fd18abd7e99aa09b85f88f19c8d82d45858f3144c5dfb7a49ede45b4efd8710592a3720636e7e889c7e22ad13b2d44bb7e2b47b2963a5fa3f2557b85bc0c693de3d22ef9464f7b814a20a4676ad26fcaa03544c6aad41283095fcd1210aa8cc029ff5a26005a891226c298e94a52aa7133913ec9d22a5b2ac0bc6f15b251d0b93889213cd1b1e5c6fd08f1a8f5cbd4215329a3\",\n        \"signed\": \"bff269a35d6c8e552ce716d1638181ce8583b45c0ec593b4e58c40ac76e7f85ca1dafffd68541e623a1e35a7c0972688b25eed72f4da57eca16857a8263caa0b37f18b7f64c5133479d6dae3bef679cdc21ece3f5b579a6a9c3fa2e59e9be87d2009f74e1cfdaccb1ce37d00702369bd169d94fdcf85af9fa3217d27e6ed6d1d8e5df7615e8e37ea55de1fd0b06d77b4c83b929d80586fa0694be72ec8b365ad2cbcdd2b1ad8cf7f036dfa4daa1a9036cdb120432227b1f07b8866b122120309eb914ab84cddeba1dec48ab92636728588fedb3aaad7e7dbb2ac30e63c6f5f90fc6ce62d6d3bd88b0d5aacfa61de9f3267b300917b57a48036ab20c9a05446b8767494af249e7de7bc507a2207cc956f7184555a7d5d8883bb4b3e93f2dcfc57b0da8638658dcdce885d44d9cc68b1d8170a3677cc5e50cbf33d543ebae4477d9239cf83384ec59b4233e8ff3343f06f301877729a53d420bf01c62e66ab7fe55dd87ee823a58fcb87870e1f52e879177cd439c533f5a223e5a3436fe9d6426548dacfc86a0846d3ed23ac042563e887ff46aad005f4e1dee3ee0ee4c27a7251709ae40abc5e256864e4785a4edd8b2adf1bc5b4018e28d0b175867b02d052a6e17e411a3d8beb2a4208b76cc621fd18be148e235d55aa7127706557dec053a13f1a47dfda405b3fe5bd28ef5d348619f51e595ef5055f839efaf110e4901631ac31a02f4f7ee424a3a2c3e00d2602d2cc1e492906eea420a9268238ac6622a08974e5730292e6ed510256efde667e0d9a0ff2213f54120ccd81ffaa6b7cc48141a2b729852af583d26aa51fbde67be4df14e520c2257a73c5c2e3c3d87dfb25361175fd18abd7e99aa09b85f88f19c8d82d45858f3144c5dfb7a49ede45b4efd8710592a3720636e7e889c7e22ad13b2d44bb7e2b47b2963a5fa3f2557b85bc0c693de3d22ef9464f7b814a20a4676ad26fcaa03544c6aad41283095fcd1210aa8cc029ff5a26005a891226c298e94a52aa7133913ec9d22a5b2ac0bc6f15b251d0b93889213cd1b1e5c6fd08f1a8f5cbd4215329a3\",\n        \"signature\": \"bff269a35d6c8e552ce716d1638181ce8583b45c0ec593b4e58c40ac76e7f85ca1dafffd68541e623a1e35a7c0972688b25eed72f4da57eca16857a8263caa0b\"\n    },\n    {\n        \"secret_key\": \"e75388026a6a6d6c6d199e362993a5b1044901e18a76c2fac7261a6d1c19a4f3\",\n        \"public_key\": \"b9ce14251c0cdf3bddb206dc6b8b2b7f5b7e4dd1be2ce1863ff18806ae00f1ee\",\n        \"message\": \"b99cdc847211c06642dd111bc5e0beca53a74ffba2e3ac93afb4b0947518e8323527330a4efefbe4bafa00bafecb434ab1e5b7ce65656f7a4fd856aa6c385ed8d7bd6285580d7dd60882e69c19da076909d647de095a80e98ad89b814aadcbbf6f033c49202f656c0910503959cf97cd0fa82d5f6d22fba3389951294c4f7cdc21eb8244bd6560637a5eca62a8eba1f4a933d187a75f86711643af358831c8c16a9a0f09e253b2395e9cb371611eecdd66b4ab521aa94b3f20237eae41cd10c5e21a452d48e748187f354a67adf681b0fe61cdaec94a5eaf01269fceb570d514ff3c55ff1dba2fd2df17f86a8aeb747838113dee94a43b1384cbe133cdf6427e8d122e4e933704da6e26cfcee97fe3f629b60b91b2dd863867fa79801e2b916ec4c0fb62e07159421e657974307a1d02f7f2ed4724a8b521a861f55f35521e8b2e1a84904c428cfc5b6014bb0f8ba8434c2209bd40aca31130db97743333597d2351d5f6811741f62688973bd773d30266fd1efbd89d47a964f9d01997153d087d92696616dd103a934ccbac4c1d142f2075d4e22c3da4a0e973b23863196287b79174fa29755fc6d9b5e100ace0a45975e503b254d3f195c261710910fef106892c08bb296d230cdea9f5a11f91acaa6e7c05e92c281d2b3155fe4480b0aa5e0db41d10e05cfdefa4364051cb755dc72ffa978c00b94a5f212dc691f839b49de97e0139d65e8d73b2b289b26a12c6ccd8edc04adb452af7ff094aa901eaf57651eb1b87b833d0a09b4a4a6462f40664623769e95079f3c962850cc3b401bb0058b8475b10c862f32f300a2b143b3dea269ddcbea7be7dd2426d0d4204eb66a39f1318822dcb9c561398637f4ab8de196768ace74f348c012dd1babec17f5300ffe0d7aaaeafef7db650a8f2f309a9793f52c685c7e1d5133274915784899c481d485c9bd30e99fcdc97d96ef07487da663befe68299df\",\n        \"signed\": \"6d0f83d9c55d84bcf9a86147d9b6ba9ad537832fd0f99dae7e72c8139afcb30c7b24f6b292e32f9847097551b7fbfd510c84e89be98254441457bd08e5f05302b99cdc847211c06642dd111bc5e0beca53a74ffba2e3ac93afb4b0947518e8323527330a4efefbe4bafa00bafecb434ab1e5b7ce65656f7a4fd856aa6c385ed8d7bd6285580d7dd60882e69c19da076909d647de095a80e98ad89b814aadcbbf6f033c49202f656c0910503959cf97cd0fa82d5f6d22fba3389951294c4f7cdc21eb8244bd6560637a5eca62a8eba1f4a933d187a75f86711643af358831c8c16a9a0f09e253b2395e9cb371611eecdd66b4ab521aa94b3f20237eae41cd10c5e21a452d48e748187f354a67adf681b0fe61cdaec94a5eaf01269fceb570d514ff3c55ff1dba2fd2df17f86a8aeb747838113dee94a43b1384cbe133cdf6427e8d122e4e933704da6e26cfcee97fe3f629b60b91b2dd863867fa79801e2b916ec4c0fb62e07159421e657974307a1d02f7f2ed4724a8b521a861f55f35521e8b2e1a84904c428cfc5b6014bb0f8ba8434c2209bd40aca31130db97743333597d2351d5f6811741f62688973bd773d30266fd1efbd89d47a964f9d01997153d087d92696616dd103a934ccbac4c1d142f2075d4e22c3da4a0e973b23863196287b79174fa29755fc6d9b5e100ace0a45975e503b254d3f195c261710910fef106892c08bb296d230cdea9f5a11f91acaa6e7c05e92c281d2b3155fe4480b0aa5e0db41d10e05cfdefa4364051cb755dc72ffa978c00b94a5f212dc691f839b49de97e0139d65e8d73b2b289b26a12c6ccd8edc04adb452af7ff094aa901eaf57651eb1b87b833d0a09b4a4a6462f40664623769e95079f3c962850cc3b401bb0058b8475b10c862f32f300a2b143b3dea269ddcbea7be7dd2426d0d4204eb66a39f1318822dcb9c561398637f4ab8de196768ace74f348c012dd1babec17f5300ffe0d7aaaeafef7db650a8f2f309a9793f52c685c7e1d5133274915784899c481d485c9bd30e99fcdc97d96ef07487da663befe68299df\",\n        \"signature\": \"6d0f83d9c55d84bcf9a86147d9b6ba9ad537832fd0f99dae7e72c8139afcb30c7b24f6b292e32f9847097551b7fbfd510c84e89be98254441457bd08e5f05302\"\n    },\n    {\n        \"secret_key\": \"5b323fc01a16c45d1064667d2ea4a7ea59d20342562d12fbc598d5aa7300688e\",\n        \"public_key\": \"d4141b455d301642bada2814afcb1620d5eb56d92b1185fe5dadef559625fa71\",\n        \"message\": \"ad24669ef55c540a8ed162ce1d28f01760a60719a0377336eb00b1ecbe6f61601cd564f92c956804f9bed4e1476b94e5ea8cca80cb49a304ef851f7f675abe58e6681dc012ad55e51b021d9828569d0bcc9e0527a3fc03c891d17a90e6337a1ea67f2f08810587693837081e4c08a3d72c536c2140da200ba456c376f61d05651f0c5f395711f41c0d6eae98c906764d1ebef3f9046cb7c8622640fcafafbfb8f62e1cd32c66ee1c55509489a538ab612999e7997b779c6422eff109da4df82920930d8d363d7830908795a3888f25d667e14d155ed44581be430f7973b574e2bc0b134cf139fb4bb01dbda41b67b98147d8012f40677f4b80ce4a534c90adeabf484b21fa994b7a175f8a8b8a4075564478ddb05024580bab038cd9eaa1dfda552fb31229429b614fa1d80c52614e84faa2217f260ff7ccea8c7b06e3d77ff874eb81fc8597e5fcdcec951b5fe64a1af86e73193a882469eb3ba3c382734b2887b419316ea448afc282478c25f7bca18429cbbffd8871177c5ecc7d8aa9a1b9ec87192d29a52539c081c3593332444cbe66872cf3d0e197292b82b0be5fcd858cd6ca48b53ee5b61641bcaaf31d819c7e1cedaf9ee6b07e09caedfb30b9204a1d4ddb70560cbe1eb0c0ec43f1d178201b290819fcdc92c63e0db60fb87dff00e512648c8958a847efc36346073f1a4f1f2317060f1c543e6f01b42485beeb56cab3bab26e6a0ca6935802c762b799159e320f36b5e83d4aca8962aa2c3c2b7a3870e9e04731f3948cf941e21d50964e5d635a35a53e299811b8cadfcb4416c57598a3fd05410910dbc0ea2c78fdb92574997d58796279eaaa78b36dcef1c9a129eeff82399a26d008ffa3bf0418ff7d39b6427f341895024d16e22a0c62a82beba2e2bac23dee18cfcd5db2397f378c5367309082c44eb43cedc15220253a62320399665f71349cc1b944f58c73a10a0bbfd4caf12891e3\",\n        \"signed\": \"e2eff607f0227a29d582d69f3458acadd3226fceaac0abbdaed52675c51630073cd3a901707ecf05e893f2c36daaf0cc4901116946b5770dc038125f6d131b09ad24669ef55c540a8ed162ce1d28f01760a60719a0377336eb00b1ecbe6f61601cd564f92c956804f9bed4e1476b94e5ea8cca80cb49a304ef851f7f675abe58e6681dc012ad55e51b021d9828569d0bcc9e0527a3fc03c891d17a90e6337a1ea67f2f08810587693837081e4c08a3d72c536c2140da200ba456c376f61d05651f0c5f395711f41c0d6eae98c906764d1ebef3f9046cb7c8622640fcafafbfb8f62e1cd32c66ee1c55509489a538ab612999e7997b779c6422eff109da4df82920930d8d363d7830908795a3888f25d667e14d155ed44581be430f7973b574e2bc0b134cf139fb4bb01dbda41b67b98147d8012f40677f4b80ce4a534c90adeabf484b21fa994b7a175f8a8b8a4075564478ddb05024580bab038cd9eaa1dfda552fb31229429b614fa1d80c52614e84faa2217f260ff7ccea8c7b06e3d77ff874eb81fc8597e5fcdcec951b5fe64a1af86e73193a882469eb3ba3c382734b2887b419316ea448afc282478c25f7bca18429cbbffd8871177c5ecc7d8aa9a1b9ec87192d29a52539c081c3593332444cbe66872cf3d0e197292b82b0be5fcd858cd6ca48b53ee5b61641bcaaf31d819c7e1cedaf9ee6b07e09caedfb30b9204a1d4ddb70560cbe1eb0c0ec43f1d178201b290819fcdc92c63e0db60fb87dff00e512648c8958a847efc36346073f1a4f1f2317060f1c543e6f01b42485beeb56cab3bab26e6a0ca6935802c762b799159e320f36b5e83d4aca8962aa2c3c2b7a3870e9e04731f3948cf941e21d50964e5d635a35a53e299811b8cadfcb4416c57598a3fd05410910dbc0ea2c78fdb92574997d58796279eaaa78b36dcef1c9a129eeff82399a26d008ffa3bf0418ff7d39b6427f341895024d16e22a0c62a82beba2e2bac23dee18cfcd5db2397f378c5367309082c44eb43cedc15220253a62320399665f71349cc1b944f58c73a10a0bbfd4caf12891e3\",\n        \"signature\": \"e2eff607f0227a29d582d69f3458acadd3226fceaac0abbdaed52675c51630073cd3a901707ecf05e893f2c36daaf0cc4901116946b5770dc038125f6d131b09\"\n    },\n    {\n        \"secret_key\": \"be1c112f78cf13aefc5ce7e33764aca4481f9f88b018e122db9f8dac14624605\",\n        \"public_key\": \"ae389936bbf6d16e3c1eeb6474298970866e12ec9c1d6aea2fd9db6b56aa59c4\",\n        \"message\": \"d77f9aeea0fe98ed7fb74d582a402bcb7931474b4a95d523f3fb769fb7097d2be4c6ec1052140163222553aa8f4f89e421730014ec73469720cea967f88b6a48d02a2ddc1a121fdffb8ae127738e293c4d6b1b74ad03844de6bfe821506b3a7a81d19c37a7f01ca481471219efe2a7b92c4bd2ac07743b4975696441714b84d63c549d7a6fb61f16fbcdb72b914d7882d091f9706da38c1a81a1c6a40fbec0d8e238b5d56d460e909f85479f7ad8b119f35455e34010caa7e5d01f38e301ad37e8005f6ed29e4a102db3f61d84093f78c49a9648c977bf4d5b689f71f406f8ad7b9aeb1ae22133a84ce1b278b2cdde465901b23a179d072a80879d0a24d2af197b322a07bf5d40eeab3af12117f13021dfc1681aba5c083f2596e37f1123422bbdca3b2c32cb594f56c325e0c564a1733288053459c62488925cd80e7c944db998c3c7be546bf89d7a511ccdba4b809eee0fc2873dad72b4cf3ba051289bb3f4e9925732e45ae7741058c8fd11599dd843927e3d14598bb83052d33569cfb02af0c88fa7aea4bb46841cd2ddbdf5988fcf325ff104a5dfc4a30d269d2a949730c3613bddd3673b42f6090e6a60e4a253062463a65d7e7fc0030bba769ca344bfa9ac823f58cb5cee8a5fc0ca37228de5a4d93e0ecf7f10821659a2261f7ef1596eda4e411cf3c9669d81de74547ce4bf833eb432f385ce9038fe848a8c96da7f01fd95bea06d1d747c8ae736495bba2285be5c32afea449520cfe8e1ce25f9077ed0ec0f6598a9b8f7386f15358170ccefc3d5ffb009288154de877c2409ae5fd8fef0093f1c36b3a8f547432cd0f62c4033242ad9921a8f11c00f366da9396930a80c997df429a4f5f4e45c7a6d7e02af033186757c73cbe64d2d4e78eaafe27539528035f2cfcf8eaf0a42bd25f88b2fc69e42668fae6677c9ac9091d9d15a41f3ace65d90a0229873dcf254256cca449ed4c17d5435bae4\",\n        \"signed\": \"f5fc5acb17e9957ea304f123b650e144c9e4377283509d431da6a2bbd527beb382c9f58745a3e56dcc655bd2ebb7aeefc93edc3f20d8d3c37923031eec0cb407d77f9aeea0fe98ed7fb74d582a402bcb7931474b4a95d523f3fb769fb7097d2be4c6ec1052140163222553aa8f4f89e421730014ec73469720cea967f88b6a48d02a2ddc1a121fdffb8ae127738e293c4d6b1b74ad03844de6bfe821506b3a7a81d19c37a7f01ca481471219efe2a7b92c4bd2ac07743b4975696441714b84d63c549d7a6fb61f16fbcdb72b914d7882d091f9706da38c1a81a1c6a40fbec0d8e238b5d56d460e909f85479f7ad8b119f35455e34010caa7e5d01f38e301ad37e8005f6ed29e4a102db3f61d84093f78c49a9648c977bf4d5b689f71f406f8ad7b9aeb1ae22133a84ce1b278b2cdde465901b23a179d072a80879d0a24d2af197b322a07bf5d40eeab3af12117f13021dfc1681aba5c083f2596e37f1123422bbdca3b2c32cb594f56c325e0c564a1733288053459c62488925cd80e7c944db998c3c7be546bf89d7a511ccdba4b809eee0fc2873dad72b4cf3ba051289bb3f4e9925732e45ae7741058c8fd11599dd843927e3d14598bb83052d33569cfb02af0c88fa7aea4bb46841cd2ddbdf5988fcf325ff104a5dfc4a30d269d2a949730c3613bddd3673b42f6090e6a60e4a253062463a65d7e7fc0030bba769ca344bfa9ac823f58cb5cee8a5fc0ca37228de5a4d93e0ecf7f10821659a2261f7ef1596eda4e411cf3c9669d81de74547ce4bf833eb432f385ce9038fe848a8c96da7f01fd95bea06d1d747c8ae736495bba2285be5c32afea449520cfe8e1ce25f9077ed0ec0f6598a9b8f7386f15358170ccefc3d5ffb009288154de877c2409ae5fd8fef0093f1c36b3a8f547432cd0f62c4033242ad9921a8f11c00f366da9396930a80c997df429a4f5f4e45c7a6d7e02af033186757c73cbe64d2d4e78eaafe27539528035f2cfcf8eaf0a42bd25f88b2fc69e42668fae6677c9ac9091d9d15a41f3ace65d90a0229873dcf254256cca449ed4c17d5435bae4\",\n        \"signature\": \"f5fc5acb17e9957ea304f123b650e144c9e4377283509d431da6a2bbd527beb382c9f58745a3e56dcc655bd2ebb7aeefc93edc3f20d8d3c37923031eec0cb407\"\n    },\n    {\n        \"secret_key\": \"bd8523eda899b984230e328875b9672edc9fcd24ea5cc12d7b572da4be01fb7b\",\n        \"public_key\": \"02b734ebbe88c13bfa95a5d964fc7ef9d395bd6303f065dc4ee17b3ac1548b7b\",\n        \"message\": \"16c216c9be9f0d4b115410bdfd1593c8e262221ab97a2a395a12198f95c30205b08962d4893118ba9ff99ab1c7a6e1f2f175191070ac945327ad6c470babf7928b07dd788c85b64b712e0aae6c0ea20281e42fd561e83e3fbac67f14000ee56d981d2a2f0b9ca00a9ea47ca2f6fc8dca1035fceb142c3f26f20e3c732207ffff11b79695bdafa415214a4499302326605cf0b8c82f2b11392ecc90cd74a7b411b6d907a3d5c130c879b7cf880f22bbd7f0e95933718e96d7d16caea9f2c39e89b13cd52266273604a96b51d6e34f706735ddd9fca44d09cd86bb7217600e0d34d416ac249f2e41bd0f4abcbd2580adae21d7eba5fa44f39d780f17eb85ccbef58fef903a280d95f8f3210789fa12e120e21b6e8cad917835bbdcc3b07e84693954e23a94f99f937ddb0d4a18d42c3ea8fca7d1ea6ed53a00246f99ea520e6405bd2aa549b06e7da722c1ba74aa1c136e8ea58baaf8d37658693f3e0b44f631dd6d08ffdf4f09189d3035a3f03468e29696ef05e02cc1aabfecbda2301b540cb0eb0a75bcce73db9273a9161a98ad898fcd6579fb7e4b3279544f2e0bd774dd1a8157daa88a70321167703c60a608a4b54216590375e597fe21aea97b52185d0e37a53b6388a707a2bc24acf94425f84f3d56bc9f7ee7412a9e1833ad55b7eae6da581698166383a2eba8b6f53920f517a5c80bd3e03faad4087e3ee8fec9a79a01c779512133d7b6e5f1dec766300dc405cc21a8c583fb73bc90cf24385b086049d3bf20c300983c0b351538dccb227a14fafd23ac4b26be81a2b120cf216fc58354f9dcbf05f66339ad6ddc2cac14677b90e247ebb6c5c229007dc60f374a06d404eb23eb1ec49907c6e881629e1867268ca6fffa59aa3ca8f6c295162b9536c2be22bbe3b72380ef11b61b357a6253100e30a586818ba003fa3ffd1fc919881c05022f94848598f217fea222507220d108a28fc7bc39a8a11c\",\n        \"signed\": \"fcfcdb088dcbd0a51bd301e3e1561671935d8b6f719c5d92690640d3c91e775bf4054132efc05a2122fc209db3c3343233ff8aecebd52daa2b3b21eeb15fd10216c216c9be9f0d4b115410bdfd1593c8e262221ab97a2a395a12198f95c30205b08962d4893118ba9ff99ab1c7a6e1f2f175191070ac945327ad6c470babf7928b07dd788c85b64b712e0aae6c0ea20281e42fd561e83e3fbac67f14000ee56d981d2a2f0b9ca00a9ea47ca2f6fc8dca1035fceb142c3f26f20e3c732207ffff11b79695bdafa415214a4499302326605cf0b8c82f2b11392ecc90cd74a7b411b6d907a3d5c130c879b7cf880f22bbd7f0e95933718e96d7d16caea9f2c39e89b13cd52266273604a96b51d6e34f706735ddd9fca44d09cd86bb7217600e0d34d416ac249f2e41bd0f4abcbd2580adae21d7eba5fa44f39d780f17eb85ccbef58fef903a280d95f8f3210789fa12e120e21b6e8cad917835bbdcc3b07e84693954e23a94f99f937ddb0d4a18d42c3ea8fca7d1ea6ed53a00246f99ea520e6405bd2aa549b06e7da722c1ba74aa1c136e8ea58baaf8d37658693f3e0b44f631dd6d08ffdf4f09189d3035a3f03468e29696ef05e02cc1aabfecbda2301b540cb0eb0a75bcce73db9273a9161a98ad898fcd6579fb7e4b3279544f2e0bd774dd1a8157daa88a70321167703c60a608a4b54216590375e597fe21aea97b52185d0e37a53b6388a707a2bc24acf94425f84f3d56bc9f7ee7412a9e1833ad55b7eae6da581698166383a2eba8b6f53920f517a5c80bd3e03faad4087e3ee8fec9a79a01c779512133d7b6e5f1dec766300dc405cc21a8c583fb73bc90cf24385b086049d3bf20c300983c0b351538dccb227a14fafd23ac4b26be81a2b120cf216fc58354f9dcbf05f66339ad6ddc2cac14677b90e247ebb6c5c229007dc60f374a06d404eb23eb1ec49907c6e881629e1867268ca6fffa59aa3ca8f6c295162b9536c2be22bbe3b72380ef11b61b357a6253100e30a586818ba003fa3ffd1fc919881c05022f94848598f217fea222507220d108a28fc7bc39a8a11c\",\n        \"signature\": \"fcfcdb088dcbd0a51bd301e3e1561671935d8b6f719c5d92690640d3c91e775bf4054132efc05a2122fc209db3c3343233ff8aecebd52daa2b3b21eeb15fd102\"\n    },\n    {\n        \"secret_key\": \"33a85ae150bbf552f41663b21521c296d246dd6cf8195df851c695bd15f4a502\",\n        \"public_key\": \"c8c9c42521008d5efff576c7e4a56083ced9a928da6fd5cf93fda572a5a2d0c0\",\n        \"message\": \"937e05f2f1fdbd41731553e77cf181b5079758940aee8e92623fb1d5f07128b7d7f17e4842707a562c45ba69264c0f730a821c7db6bf82990dc651269b296c335179113053d6f85bb096b2911165fa3900cb102416487ba8078679c6b336dff38763c08dcd20fa66dda45c575df150d851165a4804973830f436df60b81319f9cfb564c0652896ed5f1849cb3354f50f0012f286e8a30c213528693474004e8504012b945560c074a6a163432cf4ac4ba7175cf26005db7199ee96d893cd1aad3fdf5d57460ef02dda6d3a140825196f3f8e2f37da36b6fdad184f2740f116de758a92917030c5fb80f0262496d2df93c7e276f25da7dbed8eb8dd4c563aba55b82af6ba3a70ca5f858b44a033cfb795604ddee746e7c8ae79d272fb9a2341a2a202df5eac08de75ad80c6580d92b169f2e1318857b1b1421c30f3dd461093de2d345ede7404b72a450de07b16eee68ce62887b6eaa436eee684be75ce0e1f96263e8d8736f9ba000d88e9e5860f328ae1e2dc73099d32fceb1bd2c0123698a49bead190a00ec9a6f87133eddd45316f65eb0d329b07b9a66bb9fe42588bf7b8d06efec1986b82a081ed3f6802e9be73464784559a4f2c097ba14b0bfd5d7e0aff65cb69abd03f8616cd7edf7ec368219edcf893e9ee71dad9f18d79e568265ddc6716223213235bb928e908dea827784cd1af396d590c81f4eacdfcf89c5cac96fa050064a22841ea715f8c89d6d5afbf597a4d005dbc6b13856d335b42a9a82edcb949835cca20b0a23de51cc3aec35566eff0c5ae1ab3751320d2c310495238eda383c38a4163152b8815690b8ff015035d1d00ea4a0d6caf324bb71a664a1bed31480784a68f438caa359e8d2673c857d4b8c0b6c695847b86800ea3d734b5ecc4d52b507ac69b3a6778916016ebc2315f44c90bf0c3e7dae01d49cbc303402bbc634ae1191f3f6fd63d303b0c0be033a47b90f8d3a77f0a44\",\n        \"signed\": \"bbe4cd63676e26d675a191151d30db72b5b84d461eec6564af867ab41bae9931147885519ec9d7e6c818743c8ef6d5167b35b421363c09b357367fe8de443a06937e05f2f1fdbd41731553e77cf181b5079758940aee8e92623fb1d5f07128b7d7f17e4842707a562c45ba69264c0f730a821c7db6bf82990dc651269b296c335179113053d6f85bb096b2911165fa3900cb102416487ba8078679c6b336dff38763c08dcd20fa66dda45c575df150d851165a4804973830f436df60b81319f9cfb564c0652896ed5f1849cb3354f50f0012f286e8a30c213528693474004e8504012b945560c074a6a163432cf4ac4ba7175cf26005db7199ee96d893cd1aad3fdf5d57460ef02dda6d3a140825196f3f8e2f37da36b6fdad184f2740f116de758a92917030c5fb80f0262496d2df93c7e276f25da7dbed8eb8dd4c563aba55b82af6ba3a70ca5f858b44a033cfb795604ddee746e7c8ae79d272fb9a2341a2a202df5eac08de75ad80c6580d92b169f2e1318857b1b1421c30f3dd461093de2d345ede7404b72a450de07b16eee68ce62887b6eaa436eee684be75ce0e1f96263e8d8736f9ba000d88e9e5860f328ae1e2dc73099d32fceb1bd2c0123698a49bead190a00ec9a6f87133eddd45316f65eb0d329b07b9a66bb9fe42588bf7b8d06efec1986b82a081ed3f6802e9be73464784559a4f2c097ba14b0bfd5d7e0aff65cb69abd03f8616cd7edf7ec368219edcf893e9ee71dad9f18d79e568265ddc6716223213235bb928e908dea827784cd1af396d590c81f4eacdfcf89c5cac96fa050064a22841ea715f8c89d6d5afbf597a4d005dbc6b13856d335b42a9a82edcb949835cca20b0a23de51cc3aec35566eff0c5ae1ab3751320d2c310495238eda383c38a4163152b8815690b8ff015035d1d00ea4a0d6caf324bb71a664a1bed31480784a68f438caa359e8d2673c857d4b8c0b6c695847b86800ea3d734b5ecc4d52b507ac69b3a6778916016ebc2315f44c90bf0c3e7dae01d49cbc303402bbc634ae1191f3f6fd63d303b0c0be033a47b90f8d3a77f0a44\",\n        \"signature\": \"bbe4cd63676e26d675a191151d30db72b5b84d461eec6564af867ab41bae9931147885519ec9d7e6c818743c8ef6d5167b35b421363c09b357367fe8de443a06\"\n    },\n    {\n        \"secret_key\": \"ba9e686204975c3bded4c1e9f74c7e4c7a7e3c9981d01bfca0ad0115c3f0f5c3\",\n        \"public_key\": \"4990fce6952e8b7d0afcf4bf9dba9bce1bc4815e37511da7c2ad4892581de03a\",\n        \"message\": \"46bb48952ae58f2bf58f5be8df4f316b50f363ec84eed8f82ff4c04b0692d03aef26e8e1e6c9549a2247d540a6e22feb11e57f4b808a2097e8a7b6b3b7af3769e6d81d64886e6962372f4f39e49cd46c1b5f735f380f7c277d099776ed1aeaa57a359c0aa8c72f40eb91a1bf07ea157f5ddb30409d6e3af98990ce7f30affdac5e22010646dca96a540060fc908a3125b000ad1ed3a0f255cd34f15d7dd1fd681c3c35a1cd652056ecc5264d39aaf72a9bb83a551cc934887ae107afdfef063217270d9596891418bd461bba63de65be067b1b7864fe46484c7c9e96349a7c03a80fa055050aa18ace2a44b4a03c947824172b30e21011159443ca3cefaf696a7aa8f98011260c9436bf48991f41d4d507b96ce7323e531adcf66347c55c8855673a9f2ec89b5c8024460617ec7271773b36d64fc14eb5d82652c53a3031457227093d118fd8eb9384e80229041a96a6493450f97e6736263abf1ecd9e9fb9a4f0f6d667fa824151485edc37b34acf3d8c35f9c1be48b5e96a12af8e2d35c23a03580f211da6316b34c56bee872d47641bca77da640fdbbad5a9ad8ab9dc7957913da734ad37492ba4de8cf136cccdeb6ba3f1bd3f003be7263c4f2a40c33f24ca3339596e6c3428338100ebcc0722d4f50d30b33b912d4e7c1a9fe65f6658a6f239140a62c3261e10392ed1930aa917652d3bd2be4e8a08ab97e145b920abb31ee4bcd5a0d71f638180f61c245823a399a734a4dcde0997880245ed71eb9bc65e3c6fc95ab920b8024c17d44ced0037d04a133c2641782f1d622df45269b491d3fa2a1227579eaa386de3e7de7bc455c6a154eee5727fff0437a20076c5c3b0577cac5b4b6934e269380222461a60f954e48979c0671217f16f7027983034121093186c78705fc27dc92e2eda4116a6bf7d23e0548d62b67b25c41ed06192bc26ef1397bf1601f3a6e2a0e7f661fb0505ee382f27aec2805a3e2117\",\n        \"signed\": \"c7d23a58e2fb2a8d4b8ed1e9eae91e1129c2af8bd05f0bd572abebbe0f30825925f0df71cfb7218c686e5548d9427710a690366ba85541c79101a58a10e8af0a46bb48952ae58f2bf58f5be8df4f316b50f363ec84eed8f82ff4c04b0692d03aef26e8e1e6c9549a2247d540a6e22feb11e57f4b808a2097e8a7b6b3b7af3769e6d81d64886e6962372f4f39e49cd46c1b5f735f380f7c277d099776ed1aeaa57a359c0aa8c72f40eb91a1bf07ea157f5ddb30409d6e3af98990ce7f30affdac5e22010646dca96a540060fc908a3125b000ad1ed3a0f255cd34f15d7dd1fd681c3c35a1cd652056ecc5264d39aaf72a9bb83a551cc934887ae107afdfef063217270d9596891418bd461bba63de65be067b1b7864fe46484c7c9e96349a7c03a80fa055050aa18ace2a44b4a03c947824172b30e21011159443ca3cefaf696a7aa8f98011260c9436bf48991f41d4d507b96ce7323e531adcf66347c55c8855673a9f2ec89b5c8024460617ec7271773b36d64fc14eb5d82652c53a3031457227093d118fd8eb9384e80229041a96a6493450f97e6736263abf1ecd9e9fb9a4f0f6d667fa824151485edc37b34acf3d8c35f9c1be48b5e96a12af8e2d35c23a03580f211da6316b34c56bee872d47641bca77da640fdbbad5a9ad8ab9dc7957913da734ad37492ba4de8cf136cccdeb6ba3f1bd3f003be7263c4f2a40c33f24ca3339596e6c3428338100ebcc0722d4f50d30b33b912d4e7c1a9fe65f6658a6f239140a62c3261e10392ed1930aa917652d3bd2be4e8a08ab97e145b920abb31ee4bcd5a0d71f638180f61c245823a399a734a4dcde0997880245ed71eb9bc65e3c6fc95ab920b8024c17d44ced0037d04a133c2641782f1d622df45269b491d3fa2a1227579eaa386de3e7de7bc455c6a154eee5727fff0437a20076c5c3b0577cac5b4b6934e269380222461a60f954e48979c0671217f16f7027983034121093186c78705fc27dc92e2eda4116a6bf7d23e0548d62b67b25c41ed06192bc26ef1397bf1601f3a6e2a0e7f661fb0505ee382f27aec2805a3e2117\",\n        \"signature\": \"c7d23a58e2fb2a8d4b8ed1e9eae91e1129c2af8bd05f0bd572abebbe0f30825925f0df71cfb7218c686e5548d9427710a690366ba85541c79101a58a10e8af0a\"\n    },\n    {\n        \"secret_key\": \"5907a8c084043875238edbdcb7832fbba4c05ea3c5f88a96f1fbf950401ec164\",\n        \"public_key\": \"e2f49509d1007f618efe4f1fd67eaa6e2ab18afb2decced5a0b2ba8363789260\",\n        \"message\": \"433b2478e18fad5cb81067061d225528229778307885475460fbe3137a5b44024894ddbe56fa6ed021496f0786e42bc6c2d2797ea0a6bf355e88115faa55cd92ed42133d9dcda6b9ebf63ce4a994d1a82d2a49267558be54182a6f85112bd12b247adacf1405fc7ec7a015d43ab40b82c677f7f85a0e48197c5b96576199f4c3343ff7654d523a30c43a054c3e464451278034b7f196c366768c628af94fc0ccfc9a2955f9d32338b944780f8e327085b103781868e4fb79d56122d7f3f5ab309e5d634add15da382c0d2358e647182be4de6e9a9e43e6a3a3b8215b204d9507610d461621000fb1893707af7d2595bfef8a8c5c5cd08f309a5fb55e45519aea9b84748ca5c672bfecd30d25651234a3cc319b43dfcefc1a07b55b4aca714c2e7ef9638fe7884a77b22253a01a2229500e9ce10fda73a843c19cc09626d2456c22a9c901881d521f4b15d2f613cb469d304d579223bc5ff73804df6371517ebaa5b677ea910ff1a02a26fafe48fef469ed799bed6d56ce961834a2edc2e23c0d9426eccdcc934f4c220e37815f7c334b7383607d430520946a881a08325b4164979d5e82cd8134d78cec4861c019f6de301c1b9aec52bb982033fb79b2e9731bab2968bc3f93fa5604b893c6028c204c36bb8c6b074be28c964d2849b5bb19d7e0ba24e22a204d4fda83b10131d383f10b136bd0dba39ec26af30e3ffb4dbc0c921f0cc9910715d51c81fe4c62950e855549a17cd73a09ac91e06d461518376d0fcfa123df0a837103458d9ce221808d1f9ef2edc5cd2e6823145b524894ea48526d985eefd3f60679399548e1edeadb5395b43d87044b2bfe7c6037029b346a402227eab81f333e10e77f1dbc06a211d43b82558676c2dcff9082b1dd53368df002de1329af3000b171a6914389bb80ec0c9f3e412a441b800afceb0486709adac66cafeef248839331f5d892197e25420f1e37d7c0247f669f5fcbf0\",\n        \"signed\": \"8c4912c0f885d76c914059505373a64bddd67dd468369ab918f23ea28e04c19177a8d461144f0a8b51d215176cb08bd65301c3c46237b61bb1498ca79d4be70e433b2478e18fad5cb81067061d225528229778307885475460fbe3137a5b44024894ddbe56fa6ed021496f0786e42bc6c2d2797ea0a6bf355e88115faa55cd92ed42133d9dcda6b9ebf63ce4a994d1a82d2a49267558be54182a6f85112bd12b247adacf1405fc7ec7a015d43ab40b82c677f7f85a0e48197c5b96576199f4c3343ff7654d523a30c43a054c3e464451278034b7f196c366768c628af94fc0ccfc9a2955f9d32338b944780f8e327085b103781868e4fb79d56122d7f3f5ab309e5d634add15da382c0d2358e647182be4de6e9a9e43e6a3a3b8215b204d9507610d461621000fb1893707af7d2595bfef8a8c5c5cd08f309a5fb55e45519aea9b84748ca5c672bfecd30d25651234a3cc319b43dfcefc1a07b55b4aca714c2e7ef9638fe7884a77b22253a01a2229500e9ce10fda73a843c19cc09626d2456c22a9c901881d521f4b15d2f613cb469d304d579223bc5ff73804df6371517ebaa5b677ea910ff1a02a26fafe48fef469ed799bed6d56ce961834a2edc2e23c0d9426eccdcc934f4c220e37815f7c334b7383607d430520946a881a08325b4164979d5e82cd8134d78cec4861c019f6de301c1b9aec52bb982033fb79b2e9731bab2968bc3f93fa5604b893c6028c204c36bb8c6b074be28c964d2849b5bb19d7e0ba24e22a204d4fda83b10131d383f10b136bd0dba39ec26af30e3ffb4dbc0c921f0cc9910715d51c81fe4c62950e855549a17cd73a09ac91e06d461518376d0fcfa123df0a837103458d9ce221808d1f9ef2edc5cd2e6823145b524894ea48526d985eefd3f60679399548e1edeadb5395b43d87044b2bfe7c6037029b346a402227eab81f333e10e77f1dbc06a211d43b82558676c2dcff9082b1dd53368df002de1329af3000b171a6914389bb80ec0c9f3e412a441b800afceb0486709adac66cafeef248839331f5d892197e25420f1e37d7c0247f669f5fcbf0\",\n        \"signature\": \"8c4912c0f885d76c914059505373a64bddd67dd468369ab918f23ea28e04c19177a8d461144f0a8b51d215176cb08bd65301c3c46237b61bb1498ca79d4be70e\"\n    },\n    {\n        \"secret_key\": \"6020ae273e0e0537bac881d7549d923eb1cc200d49ca65d4be635e39173df9da\",\n        \"public_key\": \"daaf0e699a12a92c16e0ded3eb3450a36311824577e361f05696603300166297\",\n        \"message\": \"6a8011de09aac00db16ff7e55c2de67d8c9883fcb2040dedbc1e321caba7bb036971530176d1dbbaa927520bdfccbed8840126043edc44cbb7fa3528680e5f1b5664951dc90109aea4b9c336ca043d8221a4c8d2011656bf944efd36ba0a10a4b389196055750b0e388fb52870bbec8c55198131443945c09f3aace3e6915014374073266f34887442d74f468f8d7078bba0bd814cd6dd423c97b56905587b152d1fcfba0eb9fde2112691dafaf4f921562f241b62841001834f6ce36685f82a8faa3b7afad73a5e59bf5f9e713e59163f31dbe696118af33506d2ffea3d9c1556fb152fd2b321c31757d0c3c0f60ee113edac02d67efbb303dce6fa88f7b9746ca110e6a0cd099c0831f53c55c28b6c82af446456b842b2c950a553ee2c765e9729e6b0c546bfc26bd6d42d06b2ed5d4c8cbbc75f2a3ad8129395793d979c031fce7e20b38bd89c9b624748b2013423cebada02cde2052da5664c6c6426cbfc88f84ff602e2e20df9678fbba577a4c134517ee050681151580f7c5c9787b96e55c4075a26f4f8ccffbbb6ea18de1b2cc8c4496b16042770b7ec6eb5429e7ac1891232aa4e47467f4e9a985d80547ecc4c6fd9f59763ede91671f2aa5736a5d148e3a8ffc88e61253a85b0953654958eb2d69401cbeae775f8cb8c3ca42d21693ebe298838df94c1d77b126a1205cc47d50d5367b6f276ec8db6b95324a31e8fd2ed2e43420c4ad02ea277dd948a55193d0f0b4d1cf28386c725975ce5c12d2a6f35673cc22a0694cca4daf6afbfd326d88c1850f834c42ff0e292ba4f13e5ef0774a596d33904c0262d31df2c584a0a4f453f6ae4a88a275f7de79c13ae1a73115be02f425c6f177a1ec4639c42a792809a2b0919ebd321e316001d5b2f84894fcebd50a1dcf44d702b924532fc0e4d3f9ff8486c0ed180eecc3e09e2272a94dc7d24a4e87a931fe2495cbf992c0aae9201e0796298f9363dbac475e8ed\",\n        \"signed\": \"b1ba88fed7e5f4b757f3fa4d1ed9b19e498e5d2f5e6cd46e426fe8f039882f1be77ac9e5a9265cbf7e3cd2a9e9926c18199143798da5be47a4086440496ba00f6a8011de09aac00db16ff7e55c2de67d8c9883fcb2040dedbc1e321caba7bb036971530176d1dbbaa927520bdfccbed8840126043edc44cbb7fa3528680e5f1b5664951dc90109aea4b9c336ca043d8221a4c8d2011656bf944efd36ba0a10a4b389196055750b0e388fb52870bbec8c55198131443945c09f3aace3e6915014374073266f34887442d74f468f8d7078bba0bd814cd6dd423c97b56905587b152d1fcfba0eb9fde2112691dafaf4f921562f241b62841001834f6ce36685f82a8faa3b7afad73a5e59bf5f9e713e59163f31dbe696118af33506d2ffea3d9c1556fb152fd2b321c31757d0c3c0f60ee113edac02d67efbb303dce6fa88f7b9746ca110e6a0cd099c0831f53c55c28b6c82af446456b842b2c950a553ee2c765e9729e6b0c546bfc26bd6d42d06b2ed5d4c8cbbc75f2a3ad8129395793d979c031fce7e20b38bd89c9b624748b2013423cebada02cde2052da5664c6c6426cbfc88f84ff602e2e20df9678fbba577a4c134517ee050681151580f7c5c9787b96e55c4075a26f4f8ccffbbb6ea18de1b2cc8c4496b16042770b7ec6eb5429e7ac1891232aa4e47467f4e9a985d80547ecc4c6fd9f59763ede91671f2aa5736a5d148e3a8ffc88e61253a85b0953654958eb2d69401cbeae775f8cb8c3ca42d21693ebe298838df94c1d77b126a1205cc47d50d5367b6f276ec8db6b95324a31e8fd2ed2e43420c4ad02ea277dd948a55193d0f0b4d1cf28386c725975ce5c12d2a6f35673cc22a0694cca4daf6afbfd326d88c1850f834c42ff0e292ba4f13e5ef0774a596d33904c0262d31df2c584a0a4f453f6ae4a88a275f7de79c13ae1a73115be02f425c6f177a1ec4639c42a792809a2b0919ebd321e316001d5b2f84894fcebd50a1dcf44d702b924532fc0e4d3f9ff8486c0ed180eecc3e09e2272a94dc7d24a4e87a931fe2495cbf992c0aae9201e0796298f9363dbac475e8ed\",\n        \"signature\": \"b1ba88fed7e5f4b757f3fa4d1ed9b19e498e5d2f5e6cd46e426fe8f039882f1be77ac9e5a9265cbf7e3cd2a9e9926c18199143798da5be47a4086440496ba00f\"\n    },\n    {\n        \"secret_key\": \"932a200ecee7223f24146283a4048c67a6a2d2fc4ba0f9248bdffd82c6cce3cb\",\n        \"public_key\": \"ec9bfb7a6d04e726fc1ea0c424610dcb7967bf15d6d6626858d411198d40e239\",\n        \"message\": \"df953207048213afb8e2af452c889a21ca136a68c929bdc824f9a89ac596dcb90019a46fb682bcfd962fccb27d00baf8eccaf9d9a7d8183cabd7dfa506f7bafb4935ab045931ff8faeb71631f9ed6bb8f8473ad6290d7cf519db310a4442c461118f67d1a6d103bae6f2697c94b7426d9e02e3cb9522fd0b44aef600c962feff5873d98c2790887b8e88d160824f1bba22017639f8dce68f743480deea1f92aa1fd4135dd06457a60f36b7d7f517d40c94c0dddc2e465847d909b9f68245ff2b421d5919001aae5aef24e02c002da907e8605f160ea6096b580b75cea022d402f7f5fdc464f87f78c7906a01e8e48fb5b35174612b48ac8bc750e0f3aeb0a12f7dfc09b0842c1780a5fd9c54afb9399b9408baaccda20afbe3d682248d7bf1efdef4905a319b0ffb108b753b71cc97e9e21ec9b3dd28cee039d9418a1135f0add092aa66312ea2913300d1cc8916524302bd3d1b09e6b29c6857cbdc56ef4b3f35d8ee677208effa846fdb066b05eb717b4d45120cab72a7db7a7ca846e87b16b69047eb76d8f18da8e1399ec0a8c9c328cbe60e0bf42044d2ebf2818b3c047588452fcd2b3efc1e1009ae07688727db8fb6df2a2fe75d1cf22f32bac09c82a6a3d7eed7d00508cbe5b72460ecfcdd3ee911efe5898dbd8e4ce8591326dd1522f9d255da861bf9eb2a1d5725d7d5d427340341945e7bca8cf2ff8a997450953e77d203683e4b0dafc330e05672d2ecd13a3f442df137044e0f556ffbceffea26cbae26cba6f2568cf39f908489e1a92e76afbf297995da4b2cb1abc9ee1fe4dca5aa838b2fbdc109e89bef3ce5a36e5b2f712ac4c889438248fa5a2150cac6c977b5e0543f4010b7314732fd18e7fd5982e83276519e78725e5a5eeb86f4892084ae52da3849c228c809edbf69a2cc47c478d18719f111d737887c7a2eb3250898db34e5e5076fab9f4a9e6e1929a3480836dea07ba4d63fcefce5543430a8\",\n        \"signed\": \"cd1e4bdf4a3e4a31d65254333c8cc4087e4cc40b02e2a347d09a3dde698490c087d7109ad0209c53e987589cbf3ce26412a2b02cb8a3bc93fec75ab5d2c38703df953207048213afb8e2af452c889a21ca136a68c929bdc824f9a89ac596dcb90019a46fb682bcfd962fccb27d00baf8eccaf9d9a7d8183cabd7dfa506f7bafb4935ab045931ff8faeb71631f9ed6bb8f8473ad6290d7cf519db310a4442c461118f67d1a6d103bae6f2697c94b7426d9e02e3cb9522fd0b44aef600c962feff5873d98c2790887b8e88d160824f1bba22017639f8dce68f743480deea1f92aa1fd4135dd06457a60f36b7d7f517d40c94c0dddc2e465847d909b9f68245ff2b421d5919001aae5aef24e02c002da907e8605f160ea6096b580b75cea022d402f7f5fdc464f87f78c7906a01e8e48fb5b35174612b48ac8bc750e0f3aeb0a12f7dfc09b0842c1780a5fd9c54afb9399b9408baaccda20afbe3d682248d7bf1efdef4905a319b0ffb108b753b71cc97e9e21ec9b3dd28cee039d9418a1135f0add092aa66312ea2913300d1cc8916524302bd3d1b09e6b29c6857cbdc56ef4b3f35d8ee677208effa846fdb066b05eb717b4d45120cab72a7db7a7ca846e87b16b69047eb76d8f18da8e1399ec0a8c9c328cbe60e0bf42044d2ebf2818b3c047588452fcd2b3efc1e1009ae07688727db8fb6df2a2fe75d1cf22f32bac09c82a6a3d7eed7d00508cbe5b72460ecfcdd3ee911efe5898dbd8e4ce8591326dd1522f9d255da861bf9eb2a1d5725d7d5d427340341945e7bca8cf2ff8a997450953e77d203683e4b0dafc330e05672d2ecd13a3f442df137044e0f556ffbceffea26cbae26cba6f2568cf39f908489e1a92e76afbf297995da4b2cb1abc9ee1fe4dca5aa838b2fbdc109e89bef3ce5a36e5b2f712ac4c889438248fa5a2150cac6c977b5e0543f4010b7314732fd18e7fd5982e83276519e78725e5a5eeb86f4892084ae52da3849c228c809edbf69a2cc47c478d18719f111d737887c7a2eb3250898db34e5e5076fab9f4a9e6e1929a3480836dea07ba4d63fcefce5543430a8\",\n        \"signature\": \"cd1e4bdf4a3e4a31d65254333c8cc4087e4cc40b02e2a347d09a3dde698490c087d7109ad0209c53e987589cbf3ce26412a2b02cb8a3bc93fec75ab5d2c38703\"\n    },\n    {\n        \"secret_key\": \"5c483e837eb01ed5a4ad5db3792699824df13e576be967d12115c85e0286e628\",\n        \"public_key\": \"fe1aa8b069da56e676ef3a57d9bba88305ea032808ee635273b37c5c635def4e\",\n        \"message\": \"58d5e2cd899ba985378b3ec33e9a869822b23d5d896a28f424fcd6e4cc28b80d4aaf2de804367efdf5e423b1234d821d63ac05eaed12c73e8e3608af0ddccc8386b7d842b12e60d30cede32553945e7829e9b23f5ccc2e7103a08f2cdd9e75a7b36f5e63720ef0d49b2592bef3740268c89c86a6cbdfe201de0db9985ceb19399c9a1d5bb0586af3c8cdf2713299eb0443a541a47384607243c54a05915058367d3f2db380ed317a8c12c7a63e809c2e84d4acb9d9eef54c6f5af7ab59cb9168b1068f9d2ccd978fe721bad68a669ffedea3e92c76b32e3166658ee3bd0deb1b084194ce35d9a741c57fc2241e68efaa65320b23a1dd19ea8b7ec81e76f1e9163f9592eeee5af8eced0272f33512d0d4ca067f05551b265396e10014783cacac79437b19842de6ab91b9d923bbeb503325bc54869f663e6ea4ae6897701be7e11d16cdfae0eee861862000e7a4160781547e42526af51ba9698d234aaf510da81a0dbf264366153d7a6d5eb3fb08b9bb5ea065c2f5e5b6bb679d2e210b5b40e2bc82f78dc9ab5824b74aadadd89bf8a8b73a0a2f43ac748378921a73a252704a4adbf740cb99c1e1594c37ac9acc19f52315c6a846a57b36128c64d767af44e9c86305bf18ba7cd52680523a3b102fba6fe55567069d2047cbdd9605ea12c8877d399c1e66e33817731f50b84f817d1f0760a40f97468618934105eb00ec50c76db3c53fcf43fe1702907d9a756bcf439f8831d0bfac92e7058fb157be3e591d37eb34165e3c6fc60e72294c083e477626f9001c1d737c290377dfa58ea4ead3028fc762ce8a3afec2e6e132c662df6034ab554f93efac657ad34f6107d347fc5c5e53f3733e178b76014d2f9bbd06ef2dfe60e2083d8865f7f5b2acc025d912e5cf6cda6e798143e9dbbc70a0211d8e4003d78b383d66a6ad29717ca24eddef7df7cd3a7ef652aba5487afe5d026c9b102807294eb27d9824eeb6b40f083de7\",\n        \"signed\": \"c17c2fbf8c00bcea3035bf0a62d30229db742cab1199677c7eb4eb0ef5c7b51ad487a4971b631e794a58bb0823cc0fe62610fda6a9e03f8c4c3381cb154cef0b58d5e2cd899ba985378b3ec33e9a869822b23d5d896a28f424fcd6e4cc28b80d4aaf2de804367efdf5e423b1234d821d63ac05eaed12c73e8e3608af0ddccc8386b7d842b12e60d30cede32553945e7829e9b23f5ccc2e7103a08f2cdd9e75a7b36f5e63720ef0d49b2592bef3740268c89c86a6cbdfe201de0db9985ceb19399c9a1d5bb0586af3c8cdf2713299eb0443a541a47384607243c54a05915058367d3f2db380ed317a8c12c7a63e809c2e84d4acb9d9eef54c6f5af7ab59cb9168b1068f9d2ccd978fe721bad68a669ffedea3e92c76b32e3166658ee3bd0deb1b084194ce35d9a741c57fc2241e68efaa65320b23a1dd19ea8b7ec81e76f1e9163f9592eeee5af8eced0272f33512d0d4ca067f05551b265396e10014783cacac79437b19842de6ab91b9d923bbeb503325bc54869f663e6ea4ae6897701be7e11d16cdfae0eee861862000e7a4160781547e42526af51ba9698d234aaf510da81a0dbf264366153d7a6d5eb3fb08b9bb5ea065c2f5e5b6bb679d2e210b5b40e2bc82f78dc9ab5824b74aadadd89bf8a8b73a0a2f43ac748378921a73a252704a4adbf740cb99c1e1594c37ac9acc19f52315c6a846a57b36128c64d767af44e9c86305bf18ba7cd52680523a3b102fba6fe55567069d2047cbdd9605ea12c8877d399c1e66e33817731f50b84f817d1f0760a40f97468618934105eb00ec50c76db3c53fcf43fe1702907d9a756bcf439f8831d0bfac92e7058fb157be3e591d37eb34165e3c6fc60e72294c083e477626f9001c1d737c290377dfa58ea4ead3028fc762ce8a3afec2e6e132c662df6034ab554f93efac657ad34f6107d347fc5c5e53f3733e178b76014d2f9bbd06ef2dfe60e2083d8865f7f5b2acc025d912e5cf6cda6e798143e9dbbc70a0211d8e4003d78b383d66a6ad29717ca24eddef7df7cd3a7ef652aba5487afe5d026c9b102807294eb27d9824eeb6b40f083de7\",\n        \"signature\": \"c17c2fbf8c00bcea3035bf0a62d30229db742cab1199677c7eb4eb0ef5c7b51ad487a4971b631e794a58bb0823cc0fe62610fda6a9e03f8c4c3381cb154cef0b\"\n    },\n    {\n        \"secret_key\": \"b0d0abdd8444e10f293754ac9f16e31bdcdd97b7067128aae8e4d7f11289e2cd\",\n        \"public_key\": \"1c78cc01bea15352b63c5697f1cfe12ffdd16ddc1d59e77951b6e9408ee228ad\",\n        \"message\": \"aa276cc543fcc62d70a704608d98ce51b645b5c24a640a5df10a5591417d108926df3f0ce1b921033309eb8d8659f489fd6f79aa1bf4882d72ac69cc58d3bce0fa89b16411e9753eb40c6c4d598dc8f4abb0bc48f1370371326c9a86bbc2ac6214478e78a38408bddafaa9592600c49a129c05392f8a7d642b49137a20f3fe9f11ee17cfa3afd2af71565e9c40080b60cd0dbc378eda062c7cbc7fe972bde4509a1de95f14df482f48aacc463cd594f66d648d3794738ad6ab496e2da50b0db2ba7b659185e4587f182e833de750faacddf21af5e0cf4c9af385b04f7be231498ad0b742d5a87c06115db230973a51427f202fa39afb9828b5f03fa327cbd52dfec66d71ea319865dcf6810f1858472d8bea3e447adfb4b60758e86b48133709732d2bcf51c76caa847b6537fcb05bb8c87dc5e9fb022b3260c1d71b149859c9663dbdae6a7bbfd6deb9d123809c241401af10719cf91a6bed16084c444607359ed8f018db111511892b46bdac6c9c613841ded886b9dec06c01e80487e48fbe778e9e97508ffda0577853aabdcaca8b0bab6ce41557aab9631c96d60977e35718b60595273fdba140f5500a8d3576f5a9fc8f3ca4c02c167af2e03d25750b42adb03b1417f2b6d219be5f8429331a26a449b5d4db2b1a09152eea2b25d2df7ef6fe0a32e25fae79360a9aee1511fda8064550937a7130971930c673bb358e5f55951f50b146d85d383f3e01c151ece6c06d836701253280fdcff4e139d3319ab2e2ca71bcc3fa0faf7c702c9c604e5651de4af5700e9ede7258b9bc148d5595cd34170e3e5cf292828390908fda961f2230ac0b8cac64739732706ce2d5e59abd6d5e207bdafea74d28d7a758f2200e4e00a0bcf0306a3cabda47024fabeae488ab5c323715cf3ca7720af9ebbf8582e1158a099d736b569b9d40295817ea2554068bef32442c111ec814c6ed415919ba73526334df30bac666084e5601c2281c\",\n        \"signed\": \"64408bdd2d0fc892a5b62b5acf8e3b3c73c0b5c4fa2a72e39dd608d4937f9332f73e14d08badc6270114d1f1a556cc6ee8488abb907f79ae175c352e9f11ee05aa276cc543fcc62d70a704608d98ce51b645b5c24a640a5df10a5591417d108926df3f0ce1b921033309eb8d8659f489fd6f79aa1bf4882d72ac69cc58d3bce0fa89b16411e9753eb40c6c4d598dc8f4abb0bc48f1370371326c9a86bbc2ac6214478e78a38408bddafaa9592600c49a129c05392f8a7d642b49137a20f3fe9f11ee17cfa3afd2af71565e9c40080b60cd0dbc378eda062c7cbc7fe972bde4509a1de95f14df482f48aacc463cd594f66d648d3794738ad6ab496e2da50b0db2ba7b659185e4587f182e833de750faacddf21af5e0cf4c9af385b04f7be231498ad0b742d5a87c06115db230973a51427f202fa39afb9828b5f03fa327cbd52dfec66d71ea319865dcf6810f1858472d8bea3e447adfb4b60758e86b48133709732d2bcf51c76caa847b6537fcb05bb8c87dc5e9fb022b3260c1d71b149859c9663dbdae6a7bbfd6deb9d123809c241401af10719cf91a6bed16084c444607359ed8f018db111511892b46bdac6c9c613841ded886b9dec06c01e80487e48fbe778e9e97508ffda0577853aabdcaca8b0bab6ce41557aab9631c96d60977e35718b60595273fdba140f5500a8d3576f5a9fc8f3ca4c02c167af2e03d25750b42adb03b1417f2b6d219be5f8429331a26a449b5d4db2b1a09152eea2b25d2df7ef6fe0a32e25fae79360a9aee1511fda8064550937a7130971930c673bb358e5f55951f50b146d85d383f3e01c151ece6c06d836701253280fdcff4e139d3319ab2e2ca71bcc3fa0faf7c702c9c604e5651de4af5700e9ede7258b9bc148d5595cd34170e3e5cf292828390908fda961f2230ac0b8cac64739732706ce2d5e59abd6d5e207bdafea74d28d7a758f2200e4e00a0bcf0306a3cabda47024fabeae488ab5c323715cf3ca7720af9ebbf8582e1158a099d736b569b9d40295817ea2554068bef32442c111ec814c6ed415919ba73526334df30bac666084e5601c2281c\",\n        \"signature\": \"64408bdd2d0fc892a5b62b5acf8e3b3c73c0b5c4fa2a72e39dd608d4937f9332f73e14d08badc6270114d1f1a556cc6ee8488abb907f79ae175c352e9f11ee05\"\n    },\n    {\n        \"secret_key\": \"498497fdcc6a105891e023ff32d75f7c3748d8c52d87dd3b2775aefd8160a143\",\n        \"public_key\": \"2d79ae9cee4ac6275b05749c438ebe552b413d873cc07f14f5fa130177214c54\",\n        \"message\": \"be38bc8cdf46190e304ab53dd29c2bc40954fd4c6d2bb990f93b2b5c691fdf0527c260f5066187f2d0f31f43a08b360ea1ed8200651764b8fa49595a1594109e496759ab6623fa33378d800e6117e079e13fe85c81b63ebe247b3df6c1584bc7cffbdfa45f2a2ce7c237aaafef8cbca70bcabce0b847d551f46a7d15ce2a0d3d545abacc5930010c53648887d476e0d13a34fc1c54df09d106ed758deedc761d557a73b2bcdddefba4ed005997b19279b9d2de37d041fe013eef05a2e11c9a234e87cc0e16c0c6da42aaa5bf996417bf64e5b785d67dc32547c1f052178d694cf20f1698589e7ed49be29dd59fd5c01ba1d9f5fb06a75895b7b1e15895097ebde84cad6303aa0a86dbc324747d97245d70c5203be01b06cbde06ae037204d23730cd696189f7ac267cf202179929ce5410e0e3ade513d2201bfd20fefa40b4476f27bf907c762eb7262a5be13cfc047a846d20a9f2311b6469b06ab545f0ec9fc446ea250cd3b73a7b6b960c10ca4c2d6c64a156a18c9fb810e49afd0c36daab8b8b856643a4ccafa9ad886e91e544535b8edda27c90c06ab6bcc53628be18d7d6369ca1801f91c2e0b95f36d702f77234b4100719c059951e45b1f916983934e32b4d4d8f29c0a373f8d8f0918b967865cd0e4beca01327c99d5fded4c1a69ac2d4d9b78ffb8305670021040250cc27737e75df75760fec8b8d30b245654f3c12f1f7cea0bce78ab3693578af3ea61ffccdf9baf7c3ea65b88fc854128126476796892c663bd14518c9918629a1095f614e0492446c3d84b16ec94f7ecadaeb6b659bbb4867b579061714fd5bb0faa4ad6be0ffb3888bea447e4e3438c8f0eae644fbd45a3802dc40ec451b212bd592dacd4da96686dc8b2024257f25e9c830bff795eee85d87a090c1a42321e710555764ed8257c9415c7f224b537558cefdc615129f28350267c01ba0403e07f5c6067f91c85a2c50c866dc4388af38d2160203\",\n        \"signed\": \"b0a36a2c934756348eb47c25a32c3f2a5ddbd58fcc72a08c3cead1a2d900335c3001e35bfe1f3fb5a555009ba8e96874494b97e8b09700edcb1f2584b9d0fe03be38bc8cdf46190e304ab53dd29c2bc40954fd4c6d2bb990f93b2b5c691fdf0527c260f5066187f2d0f31f43a08b360ea1ed8200651764b8fa49595a1594109e496759ab6623fa33378d800e6117e079e13fe85c81b63ebe247b3df6c1584bc7cffbdfa45f2a2ce7c237aaafef8cbca70bcabce0b847d551f46a7d15ce2a0d3d545abacc5930010c53648887d476e0d13a34fc1c54df09d106ed758deedc761d557a73b2bcdddefba4ed005997b19279b9d2de37d041fe013eef05a2e11c9a234e87cc0e16c0c6da42aaa5bf996417bf64e5b785d67dc32547c1f052178d694cf20f1698589e7ed49be29dd59fd5c01ba1d9f5fb06a75895b7b1e15895097ebde84cad6303aa0a86dbc324747d97245d70c5203be01b06cbde06ae037204d23730cd696189f7ac267cf202179929ce5410e0e3ade513d2201bfd20fefa40b4476f27bf907c762eb7262a5be13cfc047a846d20a9f2311b6469b06ab545f0ec9fc446ea250cd3b73a7b6b960c10ca4c2d6c64a156a18c9fb810e49afd0c36daab8b8b856643a4ccafa9ad886e91e544535b8edda27c90c06ab6bcc53628be18d7d6369ca1801f91c2e0b95f36d702f77234b4100719c059951e45b1f916983934e32b4d4d8f29c0a373f8d8f0918b967865cd0e4beca01327c99d5fded4c1a69ac2d4d9b78ffb8305670021040250cc27737e75df75760fec8b8d30b245654f3c12f1f7cea0bce78ab3693578af3ea61ffccdf9baf7c3ea65b88fc854128126476796892c663bd14518c9918629a1095f614e0492446c3d84b16ec94f7ecadaeb6b659bbb4867b579061714fd5bb0faa4ad6be0ffb3888bea447e4e3438c8f0eae644fbd45a3802dc40ec451b212bd592dacd4da96686dc8b2024257f25e9c830bff795eee85d87a090c1a42321e710555764ed8257c9415c7f224b537558cefdc615129f28350267c01ba0403e07f5c6067f91c85a2c50c866dc4388af38d2160203\",\n        \"signature\": \"b0a36a2c934756348eb47c25a32c3f2a5ddbd58fcc72a08c3cead1a2d900335c3001e35bfe1f3fb5a555009ba8e96874494b97e8b09700edcb1f2584b9d0fe03\"\n    },\n    {\n        \"secret_key\": \"d962a6719e5cc7724ca4a1d559536812b4e22aa7bcb13e4fb1722d28e045217c\",\n        \"public_key\": \"a944592dbc7d77039d720256c3fd340d34db892ab13e4812d662e2840c28b6d0\",\n        \"message\": \"a6aa7a190d003ab175332b8f58e7caeb690854d9db56dbb6957b3fb654e2e0da991f3154214204135df1e1104317c9e3c58eedff1fc61aba57744c0c7ef486000a70b2c142ebaddc07ab065e2a855daf198a6803ac24ef3724487c1351ddeda0513913457d76860d78a9b6bc3dba66c40e5fc349a873ad6065ce7d7fdc2cc483b3aefbf2f03dd669bd9cb8f63cee47785cacb09d872c9aeb83e9868405254324037982e08613455d9521d88ea2fda020be730cfc8c07cb0b37614ccba2fa3ec498b815bb5adb996e848b38c015a6a5c752ebdac7b9eed8b69619d8c846b66f7816d1df1ebc21071cef0b251e2eab59827f6d6055084370fd27c203e86a189f1ee11e8403abdcbd1f45341a820525d8637dc484a5185d6551cb882a96b9981a5f1a821f27b656fff90e7f69bf286f752f970ffca5c53e0850b20b94f9431627094acea912a880b749a6f80bb206ccaa746fa70c833c9f323089ce0558c9dc200d5739d1e499634f2c16e54b7f6d7819c47071b60bd54dd0f273a319750fd3c510a49ab56f630c7ce6d8023d97862346859bc0b4d605224969708903760301409c60ab25175611f0be98b23a8cd8ac535e3513bc77e1452193dadf4435e63c3629b666a5ea4c4bad36eacad2601404eabd8d9a07956ec2b4b7bb6336ed75b8df8f16de42c0fcae93652e3c407cbd45e8d413ef51e8542df62512ee793e41358a1de19246c6586b3c1407410421f6e865c75a9f4a6a4788f84a9c781d8f8024bfdbe25bdc7d4b69cbaa7719628c0b07ec2c4a234fff4ac3d4935b9ce4c8a16947abe7951ff8d9ac9215e338fa0fe9124176d17bac1e05592c439868ae5a4f75fd1ea82aa454c20a939deda729a0e19646cebd822049c825c7e31c6efad45e306f2d9f0569e0717331f48004c26ebfe68f3843e90f8067032d21e786c8539e01be3ceac5954a0546c84b734d999456a7c45f8cebaa478e548007f9d3af836f754de4123f2f\",\n        \"signed\": \"dfb9b635ac0edf83b7b59d0b8409af475f66fc9946af0b7c63ab8cf5929d4701a1bf66959cde62fbcf59a48ab3bbaf0b9a61b6e00b2181eb934282070a5d5300a6aa7a190d003ab175332b8f58e7caeb690854d9db56dbb6957b3fb654e2e0da991f3154214204135df1e1104317c9e3c58eedff1fc61aba57744c0c7ef486000a70b2c142ebaddc07ab065e2a855daf198a6803ac24ef3724487c1351ddeda0513913457d76860d78a9b6bc3dba66c40e5fc349a873ad6065ce7d7fdc2cc483b3aefbf2f03dd669bd9cb8f63cee47785cacb09d872c9aeb83e9868405254324037982e08613455d9521d88ea2fda020be730cfc8c07cb0b37614ccba2fa3ec498b815bb5adb996e848b38c015a6a5c752ebdac7b9eed8b69619d8c846b66f7816d1df1ebc21071cef0b251e2eab59827f6d6055084370fd27c203e86a189f1ee11e8403abdcbd1f45341a820525d8637dc484a5185d6551cb882a96b9981a5f1a821f27b656fff90e7f69bf286f752f970ffca5c53e0850b20b94f9431627094acea912a880b749a6f80bb206ccaa746fa70c833c9f323089ce0558c9dc200d5739d1e499634f2c16e54b7f6d7819c47071b60bd54dd0f273a319750fd3c510a49ab56f630c7ce6d8023d97862346859bc0b4d605224969708903760301409c60ab25175611f0be98b23a8cd8ac535e3513bc77e1452193dadf4435e63c3629b666a5ea4c4bad36eacad2601404eabd8d9a07956ec2b4b7bb6336ed75b8df8f16de42c0fcae93652e3c407cbd45e8d413ef51e8542df62512ee793e41358a1de19246c6586b3c1407410421f6e865c75a9f4a6a4788f84a9c781d8f8024bfdbe25bdc7d4b69cbaa7719628c0b07ec2c4a234fff4ac3d4935b9ce4c8a16947abe7951ff8d9ac9215e338fa0fe9124176d17bac1e05592c439868ae5a4f75fd1ea82aa454c20a939deda729a0e19646cebd822049c825c7e31c6efad45e306f2d9f0569e0717331f48004c26ebfe68f3843e90f8067032d21e786c8539e01be3ceac5954a0546c84b734d999456a7c45f8cebaa478e548007f9d3af836f754de4123f2f\",\n        \"signature\": \"dfb9b635ac0edf83b7b59d0b8409af475f66fc9946af0b7c63ab8cf5929d4701a1bf66959cde62fbcf59a48ab3bbaf0b9a61b6e00b2181eb934282070a5d5300\"\n    },\n    {\n        \"secret_key\": \"e1d1416518921d07c8c39e2973d8ea1249caa8bf659cc36c7937f84ece7ad4fc\",\n        \"public_key\": \"48bdcc3f1a5b8058ed9a32ef1cc48cf7a8ab76a6e4519e5a82855241ad6fff8a\",\n        \"message\": \"3d263de1ab91e8dd7b317f7a27fb60a6e1838c0c793b03abbe7082b6bda0c7c46062262192c88b65c026c174584d29649710429ae44a46140b4c82c8a0b74d56a004f8e2f5c18f84f0464153772f8312633fc6ad28a7d9fb55f7d78cd6488ca58117eaf923fa28875e2b3189893185aa3ccd044d3f110e2e7cabdf6f814b9fdd6733bd5f307a87bc73b6250d5883936deb1db0e0af1be7ab329b5c6bd935bd8f8dc888f0d1c464edbc023cbc080753ee8f799f1072bad1144dfaa615a59e2aedc662e83cb1f8e52096a7ee483bf873b25a0c04c1851a0e87375063aa1a94fa835c052640366b79f735d3286197ab32ebdb5123f6b47ad3f442c44c530a68f8512759e9cf386fba07b8064bc8fe83e245495ec45f8938f8259dc8016205f78d3954442ec1b445d83d95ad1805a5e0e8b3d56b870a20da18d74f26f550a9c7534a4144dcbc1c3cdbbe470cc153905043088facf1d303559de41e96c0ab409bb36dcf38cc9038a6a4908dea82a653195c16f290a7c3ac487636cc5bcb18d15a14ac624c70b6f6462bf249e000cee924018bdf7dde39114cb4f652e122e8744da28b0589e1284d70d9f106de16d073648080e6437ff384e68177d5cb718e2ce3f17ba1e990ae3ce940660130e93750b82e2fb41aa369774568d7cf286725e3c58f63e73f8697aeecc717c5cf1af7ad74f446292c905d84e22b23d4e0d2604bff48fefc40c6204b5e34c042292e53bec9360159a5cd97b2df5786b8f5a292c0b39d14a870a4588e67bd12b2c2f7a4408462851d2aa787971d9315190f42cc588af0d2dcd91f31bb715e9250f1192814f7b8a21fef4517b0cf8bb8a1a1a5f500ee219dfb46132efe8e90bc49093a5559f9681b4fb59e5ba9ef3f05d34eed034c14d77ee95ebd76ffa5af0befcba18fdf932af4854510b75db00a7257b234887d49607dfd16180db516c7a20ccfcaeda6aedfb6a2377fbf31e67b517655db73ca29e118624d6080\",\n        \"signed\": \"4232d2a481084d1196db62f22dc74cf2eaf2db0df05ad7cdde67bfc29bff56cde019ac9f03d81f1827eb1e3b0abe0204ca7f77fa874ab5268354ff08bb7f48003d263de1ab91e8dd7b317f7a27fb60a6e1838c0c793b03abbe7082b6bda0c7c46062262192c88b65c026c174584d29649710429ae44a46140b4c82c8a0b74d56a004f8e2f5c18f84f0464153772f8312633fc6ad28a7d9fb55f7d78cd6488ca58117eaf923fa28875e2b3189893185aa3ccd044d3f110e2e7cabdf6f814b9fdd6733bd5f307a87bc73b6250d5883936deb1db0e0af1be7ab329b5c6bd935bd8f8dc888f0d1c464edbc023cbc080753ee8f799f1072bad1144dfaa615a59e2aedc662e83cb1f8e52096a7ee483bf873b25a0c04c1851a0e87375063aa1a94fa835c052640366b79f735d3286197ab32ebdb5123f6b47ad3f442c44c530a68f8512759e9cf386fba07b8064bc8fe83e245495ec45f8938f8259dc8016205f78d3954442ec1b445d83d95ad1805a5e0e8b3d56b870a20da18d74f26f550a9c7534a4144dcbc1c3cdbbe470cc153905043088facf1d303559de41e96c0ab409bb36dcf38cc9038a6a4908dea82a653195c16f290a7c3ac487636cc5bcb18d15a14ac624c70b6f6462bf249e000cee924018bdf7dde39114cb4f652e122e8744da28b0589e1284d70d9f106de16d073648080e6437ff384e68177d5cb718e2ce3f17ba1e990ae3ce940660130e93750b82e2fb41aa369774568d7cf286725e3c58f63e73f8697aeecc717c5cf1af7ad74f446292c905d84e22b23d4e0d2604bff48fefc40c6204b5e34c042292e53bec9360159a5cd97b2df5786b8f5a292c0b39d14a870a4588e67bd12b2c2f7a4408462851d2aa787971d9315190f42cc588af0d2dcd91f31bb715e9250f1192814f7b8a21fef4517b0cf8bb8a1a1a5f500ee219dfb46132efe8e90bc49093a5559f9681b4fb59e5ba9ef3f05d34eed034c14d77ee95ebd76ffa5af0befcba18fdf932af4854510b75db00a7257b234887d49607dfd16180db516c7a20ccfcaeda6aedfb6a2377fbf31e67b517655db73ca29e118624d6080\",\n        \"signature\": \"4232d2a481084d1196db62f22dc74cf2eaf2db0df05ad7cdde67bfc29bff56cde019ac9f03d81f1827eb1e3b0abe0204ca7f77fa874ab5268354ff08bb7f4800\"\n    },\n    {\n        \"secret_key\": \"2bf74f004d7d0af73a83ea208cc206723d188f4cf607bcad4b6980268ff21fa7\",\n        \"public_key\": \"8fdcd99352438beb52f0d1742bae71844512dd0685aaf1c909e38fc4b5aab6cc\",\n        \"message\": \"898e4303ea5bebd200a5f7562be5f5032640a3f5ccfa764292045a1a368d02aa591077d8f304f74dbdfc280734454ed8c2727aff392c108c526e527e672c5397b2d77c01f7741ef8dcc2510ee841b59dd10f4e1d3ac501af7cbdb85ba31129c262fde1a0c8bc83d6ff944b6bae3fa7fb62587c681d8e342965c5705fd1a6ab39e5a0770ee7798d9fb6c0018a514d53af848db6047cd02db352d5563b53662373b971935a1ac2b7b6361dac6748771813f7749316694961b940ff3805811a49fa27a9ba457ad28848c697050e0188d0773e17fb52194e190a7872a398f31c0f0ae06537a273ffb50c2c816445ab882811922c0621556c46a3a0ec40bfedb411e90b6db1ddd4bbebb57d10df566a63d726a33308514ce3b499d5e526c22b956d8b99913dcb13e437e947b666c41c54d8b3ae2356647e8017ab678386c927219ae7bddc0d821265f9dc4ff3f8ce5be60f8e9defc5ca335068ee29fe8304917b788784a2388a320192f9325d0e6cfffea21e6eaa29e7707f63a9ea4fbb2558e3d0835bab1f52361037ae59e503ee96b9d708a47a3ae4bad113e2a460a269ccf25a0003cb3e68a551864e59840914791126f954788b25b5af5aaf586ebb87fa5f377b4d7d7f84c000dd2cb440e214d38d5ecf70f20e9881828edaa1dbec37093db960686ca123f1ecba6336b37f46cf765be2814b9e6705bc9d6a49318118c7529b37c84ec88d58a8453dcb692c9a36016b948ebe6fb2c1d0adf5f198ee3097a6ff0b8eebbad8b0769330b18689516bc0fe668b0d05e3a584fcf89c49db501d61c2def7ed3722070193a5b683c5087ef274ce6a193dd4a303536c67934b4660a841ee1b446a6892b14d0b0aa3e98fdffd43c797add36583f74c94d0e2d68e2de818d9af200598f0b2beae169c8dfbc4d397e6d1ceb6daa6c9f6bbf4f8311ba26ffb194d44216c51305267074e856a1d6e922780f4798e2f220223fff1dc370c8e34514aba42df51\",\n        \"signed\": \"3eb5b339e191a3b6168545da5fb0ca9be209043919b9c70a07b4a7a3bf64b102f6ffd6d2b02559dc681ed3b9c82297b201dc25c4973880e155e13a29426eb40d898e4303ea5bebd200a5f7562be5f5032640a3f5ccfa764292045a1a368d02aa591077d8f304f74dbdfc280734454ed8c2727aff392c108c526e527e672c5397b2d77c01f7741ef8dcc2510ee841b59dd10f4e1d3ac501af7cbdb85ba31129c262fde1a0c8bc83d6ff944b6bae3fa7fb62587c681d8e342965c5705fd1a6ab39e5a0770ee7798d9fb6c0018a514d53af848db6047cd02db352d5563b53662373b971935a1ac2b7b6361dac6748771813f7749316694961b940ff3805811a49fa27a9ba457ad28848c697050e0188d0773e17fb52194e190a7872a398f31c0f0ae06537a273ffb50c2c816445ab882811922c0621556c46a3a0ec40bfedb411e90b6db1ddd4bbebb57d10df566a63d726a33308514ce3b499d5e526c22b956d8b99913dcb13e437e947b666c41c54d8b3ae2356647e8017ab678386c927219ae7bddc0d821265f9dc4ff3f8ce5be60f8e9defc5ca335068ee29fe8304917b788784a2388a320192f9325d0e6cfffea21e6eaa29e7707f63a9ea4fbb2558e3d0835bab1f52361037ae59e503ee96b9d708a47a3ae4bad113e2a460a269ccf25a0003cb3e68a551864e59840914791126f954788b25b5af5aaf586ebb87fa5f377b4d7d7f84c000dd2cb440e214d38d5ecf70f20e9881828edaa1dbec37093db960686ca123f1ecba6336b37f46cf765be2814b9e6705bc9d6a49318118c7529b37c84ec88d58a8453dcb692c9a36016b948ebe6fb2c1d0adf5f198ee3097a6ff0b8eebbad8b0769330b18689516bc0fe668b0d05e3a584fcf89c49db501d61c2def7ed3722070193a5b683c5087ef274ce6a193dd4a303536c67934b4660a841ee1b446a6892b14d0b0aa3e98fdffd43c797add36583f74c94d0e2d68e2de818d9af200598f0b2beae169c8dfbc4d397e6d1ceb6daa6c9f6bbf4f8311ba26ffb194d44216c51305267074e856a1d6e922780f4798e2f220223fff1dc370c8e34514aba42df51\",\n        \"signature\": \"3eb5b339e191a3b6168545da5fb0ca9be209043919b9c70a07b4a7a3bf64b102f6ffd6d2b02559dc681ed3b9c82297b201dc25c4973880e155e13a29426eb40d\"\n    },\n    {\n        \"secret_key\": \"f5f7d5b73c5a65301b5b4c6710ed12c16e7903177db792ca715e23389d05d83e\",\n        \"public_key\": \"7c4762e979f0c7e207be1843e2666aca27ea89bff5b61d573c985fc7025e1e28\",\n        \"message\": \"7c9318d56e63f16535436fa45afe278e74e61881bb468997d0418bc720b630dadb8128b4b65ca6e921e501813df9fe03b4ef0aae8035dd08c5f820ce5df12ee118d9c36d3b151a52c3f96ae1ca4c82fd19da669ddba94febf8eac8c42b447babc8a60b36e803624f7d2047bd8d8a153687f10dc1ca82100b7c87d32370ec8f2671ed7d067cc80587cab8db3a71ce5e406327f763ec1b3c166770a75536630c815fd8267582d1b5051f0f821c02150b2eef349b50590314aa2570793fa64a76ed2ed83d2ba1f9b9f1163154612b49a64ad8d5573c25b1cd37c41a44e3df78f1053d90b068f0d37ae00c4a32b1a3ff874c41da4a7043392f18efe5518d76e88b41ced69e6f4c014f06ebc5146e61e82fae1c49c37c394fea34199ab86c11a4467a374e40255a05d426971430d56cdba25a21ad779cc7f62d22cd87b60f0891bd856a517e14b72a9ac7672e4e8fb374a9758ab0c4e5964aae03228973f173a5d42aef9db33736c3e18d8eec204a1a17b9d04593dea4d804cbc81b9ac5458050495539999a9985487e7ca11c37582ef85c841e8f065ea98fdd6b1c60dea1ec2883521568856a6ebb2749f2072eb43448be0705ed477cf4b2004865217de5fadbe2a0f9d6b84b3fe7f7bf6c77537496246ec796b8ef2c04f68ab5b14fce0c6d287b836227d9f08fa0ee19722f6798a5d8280d107cfc1bd592d9ddc724ea86fc39dc94a394019e3a3de9e0d1c735e862de2bb9525b5fb4bd121212bfaff9ff586ac3c75c5ace746d9ca307f795ff2697f2b41a6346ed23397eb38898691e6f66841637d0ab0d968309e0194002309015416e74472fe32425d45f07c7711918b1e5790f572ce4441042d426033792297b5f81e0809bd9691f0a505e3259fc03c9ff107eb9b48795f49fb09c1bab5659d39ffecbdcc403e3803dc012438c2fb36f683015c5df0482cb7d7fc5757364a0a3c10d0e1259c01fcc4dd5494b5290a694aea3f6fae547ac576f\",\n        \"signed\": \"58fb392f82d5e52ff072cc77efe048f2235250c71125ee821c5f3b393bcf2fa46be4c5d8caf13cb519efe0c2fad9ee231ae9b6fd1fd509c98c69c2d36c753e0e7c9318d56e63f16535436fa45afe278e74e61881bb468997d0418bc720b630dadb8128b4b65ca6e921e501813df9fe03b4ef0aae8035dd08c5f820ce5df12ee118d9c36d3b151a52c3f96ae1ca4c82fd19da669ddba94febf8eac8c42b447babc8a60b36e803624f7d2047bd8d8a153687f10dc1ca82100b7c87d32370ec8f2671ed7d067cc80587cab8db3a71ce5e406327f763ec1b3c166770a75536630c815fd8267582d1b5051f0f821c02150b2eef349b50590314aa2570793fa64a76ed2ed83d2ba1f9b9f1163154612b49a64ad8d5573c25b1cd37c41a44e3df78f1053d90b068f0d37ae00c4a32b1a3ff874c41da4a7043392f18efe5518d76e88b41ced69e6f4c014f06ebc5146e61e82fae1c49c37c394fea34199ab86c11a4467a374e40255a05d426971430d56cdba25a21ad779cc7f62d22cd87b60f0891bd856a517e14b72a9ac7672e4e8fb374a9758ab0c4e5964aae03228973f173a5d42aef9db33736c3e18d8eec204a1a17b9d04593dea4d804cbc81b9ac5458050495539999a9985487e7ca11c37582ef85c841e8f065ea98fdd6b1c60dea1ec2883521568856a6ebb2749f2072eb43448be0705ed477cf4b2004865217de5fadbe2a0f9d6b84b3fe7f7bf6c77537496246ec796b8ef2c04f68ab5b14fce0c6d287b836227d9f08fa0ee19722f6798a5d8280d107cfc1bd592d9ddc724ea86fc39dc94a394019e3a3de9e0d1c735e862de2bb9525b5fb4bd121212bfaff9ff586ac3c75c5ace746d9ca307f795ff2697f2b41a6346ed23397eb38898691e6f66841637d0ab0d968309e0194002309015416e74472fe32425d45f07c7711918b1e5790f572ce4441042d426033792297b5f81e0809bd9691f0a505e3259fc03c9ff107eb9b48795f49fb09c1bab5659d39ffecbdcc403e3803dc012438c2fb36f683015c5df0482cb7d7fc5757364a0a3c10d0e1259c01fcc4dd5494b5290a694aea3f6fae547ac576f\",\n        \"signature\": \"58fb392f82d5e52ff072cc77efe048f2235250c71125ee821c5f3b393bcf2fa46be4c5d8caf13cb519efe0c2fad9ee231ae9b6fd1fd509c98c69c2d36c753e0e\"\n    },\n    {\n        \"secret_key\": \"43d4be6de9cb00898e99ddcc2e1530110fa2cbc4376c485e9ca57fd65586d8a3\",\n        \"public_key\": \"3632ad389be2fab3fba0d804bf6345cd322eddd6a75d8c37fd4b5ba1c9c25e8f\",\n        \"message\": \"d9d55dab0fa6da76b68e841c24d971bac1f79af513d834e426a5d08114ce8b54ce8b7afe016b0fad03ee7450c6c3097173681a4b2eb9f9c179a88e7cc36813f2f5d15f7998afa9fd4e546c73bb42e7f9522be6afabca8c7b64fed0e292e4375f3e1e5fd9fcb539f4e5e543fb6a11a0df321e70084aaabb70a9950ceee3d879c386efca1e59c3cb7c45b560095e7af00ff52f8a1aaa9ccf092f0bb806d97610742ac582a3abbeddf39f49d229d32a1186d021518d74728d13d962635d63baa6743b126bf458fa2ac756fbf88096c8d3340c622390534a743f1864d54deab5e5536372ce5ac93762287414eae158a76bf81df5417cf4c047be3ac1475c517ebd3ac1d1d1bdda11b3f99c18173e030acd51d2b5cf79516509415405077511bdd9cbe17d04f47805e98d0d145e60a5d0e0f453cd9b5c1a24f12b75e8cc34d5e00691ffacbff788fea834d9d779c1e610294dce19170d28160cff909bea5a0aa749401740ea3af51e48b27c2b09f025444276c188c0671a6da94b43d1e525e6a4a8a1a73dfedf12401846ba43068a04092b12912270d2b60df6099779756b8bbb49ece82d55f0f8db1b80fb4b59bba860bd18c75d6c834d69442ae0314cf2399f5392a3c6728c63e5c516c4222aac60f916dd63d1d0517e8eb10bd0e15eb90614deb296403ad15b8c12b9e971ef2f01e59fc35d90c55a8e20e9437dd434b26d5c2c6ec2d53acec17e81e47831dc2de82183d713b59a4d1f46969ddcddaf27f44e5a311aaac39c3d5a97bc90cad712f46f85e6c8fbf5d58d8bc3ec27d310a9eaf2c369cb00649770390a3f988f362efc155f56a146a62650547e9153250701eead1bd01c89462272dfaf0a431af4bd7c3db451ada603233fdad3aa8999aa21e2d3a43b0b56fc6a9124d33598b3737f4e5cb258beda756ad2e17d0691d15d416bb7cb07ec8d8c7af5de80e5b9394e320c4c6e43efaae684ad00f6dd20a8750e959c2f04206fc023aa190c\",\n        \"signed\": \"86ae9325f80b9886c8381f96a18c2120e6db016a0d6ca282ed93ba9b61caec02de88efca8b8e916a4b16a58525a2f68d21e5fbe67db4c4d6209595c4abc32b09d9d55dab0fa6da76b68e841c24d971bac1f79af513d834e426a5d08114ce8b54ce8b7afe016b0fad03ee7450c6c3097173681a4b2eb9f9c179a88e7cc36813f2f5d15f7998afa9fd4e546c73bb42e7f9522be6afabca8c7b64fed0e292e4375f3e1e5fd9fcb539f4e5e543fb6a11a0df321e70084aaabb70a9950ceee3d879c386efca1e59c3cb7c45b560095e7af00ff52f8a1aaa9ccf092f0bb806d97610742ac582a3abbeddf39f49d229d32a1186d021518d74728d13d962635d63baa6743b126bf458fa2ac756fbf88096c8d3340c622390534a743f1864d54deab5e5536372ce5ac93762287414eae158a76bf81df5417cf4c047be3ac1475c517ebd3ac1d1d1bdda11b3f99c18173e030acd51d2b5cf79516509415405077511bdd9cbe17d04f47805e98d0d145e60a5d0e0f453cd9b5c1a24f12b75e8cc34d5e00691ffacbff788fea834d9d779c1e610294dce19170d28160cff909bea5a0aa749401740ea3af51e48b27c2b09f025444276c188c0671a6da94b43d1e525e6a4a8a1a73dfedf12401846ba43068a04092b12912270d2b60df6099779756b8bbb49ece82d55f0f8db1b80fb4b59bba860bd18c75d6c834d69442ae0314cf2399f5392a3c6728c63e5c516c4222aac60f916dd63d1d0517e8eb10bd0e15eb90614deb296403ad15b8c12b9e971ef2f01e59fc35d90c55a8e20e9437dd434b26d5c2c6ec2d53acec17e81e47831dc2de82183d713b59a4d1f46969ddcddaf27f44e5a311aaac39c3d5a97bc90cad712f46f85e6c8fbf5d58d8bc3ec27d310a9eaf2c369cb00649770390a3f988f362efc155f56a146a62650547e9153250701eead1bd01c89462272dfaf0a431af4bd7c3db451ada603233fdad3aa8999aa21e2d3a43b0b56fc6a9124d33598b3737f4e5cb258beda756ad2e17d0691d15d416bb7cb07ec8d8c7af5de80e5b9394e320c4c6e43efaae684ad00f6dd20a8750e959c2f04206fc023aa190c\",\n        \"signature\": \"86ae9325f80b9886c8381f96a18c2120e6db016a0d6ca282ed93ba9b61caec02de88efca8b8e916a4b16a58525a2f68d21e5fbe67db4c4d6209595c4abc32b09\"\n    },\n    {\n        \"secret_key\": \"7d010d760f24e5a2de34089c9fdb19c33b155b0a37ca455a5e5b1dae7a073176\",\n        \"public_key\": \"4c877b3c4971fbb551166e214d1c7624c52277903c59a562a80b91a85483fb47\",\n        \"message\": \"86e2115572bf4c013e6b4b04d0b03e606ee70d929cb8ec36f4e2f355db3b5e1573d658d17bb1a310c16989a16b9558922ee493f359042103c4dc1b40dff7709901fd5830133f42c4651eca008b499ee4f84cd4ec1edaa78256edb62f24021a0076256919e4e2ce0a5a20f921c278cc299159644b5e3a3bbd089dcbbebad3766aea77e9f08ee5f7d4c19d8170bc3de1ba779a769914f965dbde2b61bad214c508186041f76c25be957656f5cfb7334eb838a3cfbc55cfbab67adf1552619941b835cd3e34103b18b49131e82096f05f570b899804bab8b6cbaddbbc02f9f3b559736d99ca7b02d3268fa273996fcf0571977d1cc3008c4ef848970ee350b158c47ec277add4742fa2bcbea9bd5549c7bca038020ece68f188c1ea3a62dd9a073d4c138ca8a9ac0408dcfd46e36bdff73988a58b9617caa08bd41bf3e812e7824f0f7e8146a444f36bf53a1cd892039ccd335f5a2e79745eac96148c2a299947f1b2e328a3789bf13c6d73506f3bdc68ea48abf002270fe4ee9ef9ed6b10c2fbb4ff1275b9d7dd35d8a52e371758574cb466c57b5abc242976befc8d98a0131b9bb846b219e4669186a83c056cd8080661de16b51ce5767b22e9a93242bf8d3205c66a673ce783d1c0d37b6300fbf0d6127940f88f1819c450dcc90543ed794f1fd44e6539febaf19a4cc98870014d7ccad74d1876a123ecd145516c743b4bba62d821ca9a7951e0dfb23f38d9e3a365fd8322f2ee4799e9ff11e1c5c30b55a355c8a5deea81a545e34705ab56d17b1fa06ed76415556702f364808246f863c319f75cdf6bd748438d1a2eaf4206c560bfafc235679ad6049c1a01526fcb9a3ce1b1d39be4df18b15fa0ea55272b17ebdedf6c30498a8a14f2042be1c2cdb09e9ef3846d6659a9f6d673df9afb7eded04b793d9731f0accc41468dc1f3236c99acadee6239c361b8bd7e2d0cfe8bb7c06687e08e76b71ad57a036179f291d096ae2fa0818ef4bf4866\",\n        \"signed\": \"5570613879ae22778bd54f14fb6e8c0256a71f3d79c3e5cd8e41aea8cf773e24d29f1f1b24f8c80d2949e8201465dbde8940b1fab6483b085d418e251014200c86e2115572bf4c013e6b4b04d0b03e606ee70d929cb8ec36f4e2f355db3b5e1573d658d17bb1a310c16989a16b9558922ee493f359042103c4dc1b40dff7709901fd5830133f42c4651eca008b499ee4f84cd4ec1edaa78256edb62f24021a0076256919e4e2ce0a5a20f921c278cc299159644b5e3a3bbd089dcbbebad3766aea77e9f08ee5f7d4c19d8170bc3de1ba779a769914f965dbde2b61bad214c508186041f76c25be957656f5cfb7334eb838a3cfbc55cfbab67adf1552619941b835cd3e34103b18b49131e82096f05f570b899804bab8b6cbaddbbc02f9f3b559736d99ca7b02d3268fa273996fcf0571977d1cc3008c4ef848970ee350b158c47ec277add4742fa2bcbea9bd5549c7bca038020ece68f188c1ea3a62dd9a073d4c138ca8a9ac0408dcfd46e36bdff73988a58b9617caa08bd41bf3e812e7824f0f7e8146a444f36bf53a1cd892039ccd335f5a2e79745eac96148c2a299947f1b2e328a3789bf13c6d73506f3bdc68ea48abf002270fe4ee9ef9ed6b10c2fbb4ff1275b9d7dd35d8a52e371758574cb466c57b5abc242976befc8d98a0131b9bb846b219e4669186a83c056cd8080661de16b51ce5767b22e9a93242bf8d3205c66a673ce783d1c0d37b6300fbf0d6127940f88f1819c450dcc90543ed794f1fd44e6539febaf19a4cc98870014d7ccad74d1876a123ecd145516c743b4bba62d821ca9a7951e0dfb23f38d9e3a365fd8322f2ee4799e9ff11e1c5c30b55a355c8a5deea81a545e34705ab56d17b1fa06ed76415556702f364808246f863c319f75cdf6bd748438d1a2eaf4206c560bfafc235679ad6049c1a01526fcb9a3ce1b1d39be4df18b15fa0ea55272b17ebdedf6c30498a8a14f2042be1c2cdb09e9ef3846d6659a9f6d673df9afb7eded04b793d9731f0accc41468dc1f3236c99acadee6239c361b8bd7e2d0cfe8bb7c06687e08e76b71ad57a036179f291d096ae2fa0818ef4bf4866\",\n        \"signature\": \"5570613879ae22778bd54f14fb6e8c0256a71f3d79c3e5cd8e41aea8cf773e24d29f1f1b24f8c80d2949e8201465dbde8940b1fab6483b085d418e251014200c\"\n    },\n    {\n        \"secret_key\": \"aaaabb7ce4fffe4dc35747baea2bc5f050bef06ee0c1fd632a067fece1ef4fb5\",\n        \"public_key\": \"820a2442d5f45f3c791478e098fb3b068da52ec4e8dadec85065c35659f437e0\",\n        \"message\": \"f9d28597a3e2b64ba327ac5cd29f081e74bf461b2eb2d3cfd9d5e92158d21d1d2a47ab50981cb19fe3f8c6fe488249b1c49fb897a0fe21ab5404414fd914875c220f1cbc12f5c38cfba79f7ac303a5231a372b02fad6c8462f8cc49f0f64965b651dccef0bb9608215090849177be47b2d3072944d36e856da185c7b3a689f7edef988338e0963ed31a6b0a80d5cb0b1cccf6f394837aa6f8b2f3da5efbdf4d360d4bf4dd708ce6445587d942b79761ce951b1bb4d9050703618a6d930a80c69576fc4af306a2a56dbd884a05a1e4e9f3136cd0b55ae474bb5d3d0fbc9b0339cec344fdd085c1928101481c68794f5c890137108cea791d21f81683d3e1a9eec66ace5c014d89e69808e5fa83d3812ee680f5a9971681b8adcd4a16e9a4c165b5ef9932c5ed825237fd5037bcbefe4cb11564fa707c8a93290751414891b1edd3313c65f8b91c2e925a3c12a9d3aa45fd5a667b78393c3e39df88a8f0d1148b5311e3d87c4a92e0a3fb915bc90d5558d05b475a8834778aa943ea39b8eaa95ad1832e5916ea3102d7de0b836cde8f3759dbb3b9d56ea817b3e49c983210277c2c7c5b0db187422532fca98a28b3b659c6b815ac126fadbe2f400c73e9d2dedcbbd2d3a365ffad7e666c896e31e61b384ed3a9fcf1290538df11b9474c6281cc592c71c8808868b4292c17ece6b3edf5e3542a70b911593e93f35ecd9729bd8880a24eaf41fbc6574dfe167ec2d0e7ab3df5ec34b8b55d548ab93738a2eeaf21c884c5c8551db2edf2b049f1a2a84fa72ac8978a4c27809f209c1b2195aff504f699856cc4f22d44ebdd0fe50374468d0b1792e574b5110a1f4cd0e221e824a78ddc4845feb46d66d633d23cd23f4b6fbe4c8ce16cd1af61536da5fa67b10ac7555a68c0e0bdbf2f8d72309d995516b8118bf43835d0a01c08ffeba3ea3ed05cd2d54f0eabcda05d0037d52caed3b19374faf73999094f79055924bea9aec4470135f5e8bf183c9d1c9\",\n        \"signed\": \"050ae8aeceec9627b80137357a22962ac8b45048661708d394d0a51aadc381fe8535023d6e1bda0e72b349b50b26da7c3a3085e81e9dd6cf127868fc5baeab01f9d28597a3e2b64ba327ac5cd29f081e74bf461b2eb2d3cfd9d5e92158d21d1d2a47ab50981cb19fe3f8c6fe488249b1c49fb897a0fe21ab5404414fd914875c220f1cbc12f5c38cfba79f7ac303a5231a372b02fad6c8462f8cc49f0f64965b651dccef0bb9608215090849177be47b2d3072944d36e856da185c7b3a689f7edef988338e0963ed31a6b0a80d5cb0b1cccf6f394837aa6f8b2f3da5efbdf4d360d4bf4dd708ce6445587d942b79761ce951b1bb4d9050703618a6d930a80c69576fc4af306a2a56dbd884a05a1e4e9f3136cd0b55ae474bb5d3d0fbc9b0339cec344fdd085c1928101481c68794f5c890137108cea791d21f81683d3e1a9eec66ace5c014d89e69808e5fa83d3812ee680f5a9971681b8adcd4a16e9a4c165b5ef9932c5ed825237fd5037bcbefe4cb11564fa707c8a93290751414891b1edd3313c65f8b91c2e925a3c12a9d3aa45fd5a667b78393c3e39df88a8f0d1148b5311e3d87c4a92e0a3fb915bc90d5558d05b475a8834778aa943ea39b8eaa95ad1832e5916ea3102d7de0b836cde8f3759dbb3b9d56ea817b3e49c983210277c2c7c5b0db187422532fca98a28b3b659c6b815ac126fadbe2f400c73e9d2dedcbbd2d3a365ffad7e666c896e31e61b384ed3a9fcf1290538df11b9474c6281cc592c71c8808868b4292c17ece6b3edf5e3542a70b911593e93f35ecd9729bd8880a24eaf41fbc6574dfe167ec2d0e7ab3df5ec34b8b55d548ab93738a2eeaf21c884c5c8551db2edf2b049f1a2a84fa72ac8978a4c27809f209c1b2195aff504f699856cc4f22d44ebdd0fe50374468d0b1792e574b5110a1f4cd0e221e824a78ddc4845feb46d66d633d23cd23f4b6fbe4c8ce16cd1af61536da5fa67b10ac7555a68c0e0bdbf2f8d72309d995516b8118bf43835d0a01c08ffeba3ea3ed05cd2d54f0eabcda05d0037d52caed3b19374faf73999094f79055924bea9aec4470135f5e8bf183c9d1c9\",\n        \"signature\": \"050ae8aeceec9627b80137357a22962ac8b45048661708d394d0a51aadc381fe8535023d6e1bda0e72b349b50b26da7c3a3085e81e9dd6cf127868fc5baeab01\"\n    },\n    {\n        \"secret_key\": \"e95cc2a4d1193b7539fcbbeaaeed985b6fb902dd0efbd6387457550d0d6a2fea\",\n        \"public_key\": \"72a1ff1e9bb11c8d88968a7b169637adee438e2263f006dca4fe02fe066cbad3\",\n        \"message\": \"84267439201b0591db60c0f17a9c15e45409295652d5f55b87fb351967c846a567f5cebaaed1762bff5485f04853ca9269f464094e512df1f02e13e517b1daa58d34caa2d5ff9f9e79bcafb4ce96e8a089258ad61343b446628ebc4f5b2a84d03b72ef3f738589fa13c42519a828299a3faec035037bc10b44e3bdfed9e0870717cbaf31bef8b22c4ea16e8157fcbc63eefa39ed822efd4215c247dda48786277ec030a86c0ef4851d673cfe752d0677883c2c452038970c09bd481714bc3fbecfa4ff2a3c245695d7ecc2f4dec7f5ede04ff6db43e2bb91c066b649ef73fd3be860cb83fa80b074149f431eebb917ec8478da870c11e317703859f9f2f4008a6c7c754b06e1f7d2479689da84e88922f38274985e11ce13cdbdb0f2ece68fb602ade03dd549a362491f4a203ff80744f663c523a026b431aad45c5829e029ad6256d1276fd7b7a12ddbf1727d9e233fb534457370a426e56fb39cf404a3ecbf0c4b50bb522dce981e0830fd8406e6d9725ceb1ddd3a1947937d90e04d768ae1d126e2aeac21b8c9efc54c40961b7f4e9e88025f7e0b9de901ebf0049e741b797997d8db78e9283bbb5f90f35a2c4dee273142ec258c02ad0ecc61cc5c9f12132db28af41c1fb78e524be5327b5ffc35962779fb11ff0c5d3ee0a31ff47e73b1729dfa46e8986b1b89abc88ad06abd5b6f766d23abf642257894ebdfa79e6309f1272374ee9433677ba13e451baa95330e660c8052ae872e0e32e2b2d1286d01a0ab5810424ed8b9405465bdeba03b698384676fe5ea464a03446c4f7cd7b43312ecf151360464571ad28610581fbadb945a1d68181deb403aa56eba0bb840328eee36103c7de073a6879c941c7554c6f6f2a080809eb0e5bd0e130f29a229e930db01fecac2e036bdf0e001e2a8ea3264f8649d5b60c29103f0b49c24c97facaf7e81069a2b26ab3f933f427d81272c6c8b7cd0dfb7c6bbe9c0eaab32bbda2218b9623a2119aab1f3eb\",\n        \"signed\": \"1b8d7cc2adf36cae1631250c82431bd88437163a6349ad96e7a864447e9fee753ac3655c9835b4d1ecbb306c638ba5402ad02ba6d225d96882889fe8d204a60484267439201b0591db60c0f17a9c15e45409295652d5f55b87fb351967c846a567f5cebaaed1762bff5485f04853ca9269f464094e512df1f02e13e517b1daa58d34caa2d5ff9f9e79bcafb4ce96e8a089258ad61343b446628ebc4f5b2a84d03b72ef3f738589fa13c42519a828299a3faec035037bc10b44e3bdfed9e0870717cbaf31bef8b22c4ea16e8157fcbc63eefa39ed822efd4215c247dda48786277ec030a86c0ef4851d673cfe752d0677883c2c452038970c09bd481714bc3fbecfa4ff2a3c245695d7ecc2f4dec7f5ede04ff6db43e2bb91c066b649ef73fd3be860cb83fa80b074149f431eebb917ec8478da870c11e317703859f9f2f4008a6c7c754b06e1f7d2479689da84e88922f38274985e11ce13cdbdb0f2ece68fb602ade03dd549a362491f4a203ff80744f663c523a026b431aad45c5829e029ad6256d1276fd7b7a12ddbf1727d9e233fb534457370a426e56fb39cf404a3ecbf0c4b50bb522dce981e0830fd8406e6d9725ceb1ddd3a1947937d90e04d768ae1d126e2aeac21b8c9efc54c40961b7f4e9e88025f7e0b9de901ebf0049e741b797997d8db78e9283bbb5f90f35a2c4dee273142ec258c02ad0ecc61cc5c9f12132db28af41c1fb78e524be5327b5ffc35962779fb11ff0c5d3ee0a31ff47e73b1729dfa46e8986b1b89abc88ad06abd5b6f766d23abf642257894ebdfa79e6309f1272374ee9433677ba13e451baa95330e660c8052ae872e0e32e2b2d1286d01a0ab5810424ed8b9405465bdeba03b698384676fe5ea464a03446c4f7cd7b43312ecf151360464571ad28610581fbadb945a1d68181deb403aa56eba0bb840328eee36103c7de073a6879c941c7554c6f6f2a080809eb0e5bd0e130f29a229e930db01fecac2e036bdf0e001e2a8ea3264f8649d5b60c29103f0b49c24c97facaf7e81069a2b26ab3f933f427d81272c6c8b7cd0dfb7c6bbe9c0eaab32bbda2218b9623a2119aab1f3eb\",\n        \"signature\": \"1b8d7cc2adf36cae1631250c82431bd88437163a6349ad96e7a864447e9fee753ac3655c9835b4d1ecbb306c638ba5402ad02ba6d225d96882889fe8d204a604\"\n    },\n    {\n        \"secret_key\": \"77ad0f942c37f0313e6b0456dabaec81b2d61f6c118ddb29eaf3ac5bf19504d4\",\n        \"public_key\": \"692d2da5a95f48611a6da89cfb3b3540f6aa0c850d6d98deea870e397fede328\",\n        \"message\": \"87e6dead2c85549e3d8d2588a0a3360603a624fb65aebbc101bf7f1fec18d0b28fbd5dbaeed38752cdf6355ce8dc84e18ac1a4393d2ab888882c4ff1c9c8137f83bee36336bcbfbb72d5049e0a400874514fdc3633046e89383dded93ca31fde0d898e11e9268d3d5c240666ed5527613da79fb7e49625b44cde78b41c67902eb0216b3a7a3e560e261d71d764aacf15959c17fcd6176fb25e249ee6bb1b3bd7bd90f60b0b0ffa0315a065a24bbae8f255bf298d7e4d44f0b430c415b4fb36cfa6626a83f49a2567f6244f40e923add1d49a72f57b1530f5b379de3a91c2e9a1ac79ab37bc3b9ba73d8828136bcc87d2c01190de5457facd90f369553f7ac521c5672b0867dfa8da3b952ad95b67dab99b4820572f2d4a298e9518637779289c031b793dee859cde7b24add649fff871248a6602d2516279da6058cbb696fa8b1d89a20d2099e646443210483e5d4134e928faeb38a3b508199e0d69bb55ee34774205c0a61205b50b08febeaa401e6e3a51a2bf98efac78b7ae2b852c5395a12c40e2c7dd1b202504b5a7d2f7e4fd4f8610930d2868cba8864339e041da21c0715f41b2b23d14d0b545480bc3bd7d7215cf2f816a3332081ecaa08c0f8b99525251f57231b6750c2dbd1109ac4160486b768324b6bac87ef5a226448c431240328f42cca586be7aff3cbe7605fa341514fccfb966af3d4530e8cd9037a11ce593c2d383e1035a0c2eda098de90d50c5184a9c01b57f26b94dedd1454c340637ecccee70625754a328c65f42645b5e1a5655eef97dfb1c6308edf49fa368d17d17e06adc512b3973ea652ac40a9978e1bb1b2f86c5a9ffbf60dcc4f6bbc98a64f4de65e7ec61721edeb0e5238456f761d2d1293af0de9f793b11d8cadf01a94319a02a4273ffc4d3ffa7b34d74fd2e0b100fca58b5325f907a749193e751d6c116687aee3747b59460d4ef156e72476eae1b8455d76e71b306b98129b72fe1cb5eb405a7c2f4327f3862d4\",\n        \"signed\": \"696bd552dd01db80b3d67d61eeb7ecc56878404ab119442a1c7422992cfa35aea920825d2dafd892ad7eb6825ad999aee5c83b7b507906534f91ace759c5510c87e6dead2c85549e3d8d2588a0a3360603a624fb65aebbc101bf7f1fec18d0b28fbd5dbaeed38752cdf6355ce8dc84e18ac1a4393d2ab888882c4ff1c9c8137f83bee36336bcbfbb72d5049e0a400874514fdc3633046e89383dded93ca31fde0d898e11e9268d3d5c240666ed5527613da79fb7e49625b44cde78b41c67902eb0216b3a7a3e560e261d71d764aacf15959c17fcd6176fb25e249ee6bb1b3bd7bd90f60b0b0ffa0315a065a24bbae8f255bf298d7e4d44f0b430c415b4fb36cfa6626a83f49a2567f6244f40e923add1d49a72f57b1530f5b379de3a91c2e9a1ac79ab37bc3b9ba73d8828136bcc87d2c01190de5457facd90f369553f7ac521c5672b0867dfa8da3b952ad95b67dab99b4820572f2d4a298e9518637779289c031b793dee859cde7b24add649fff871248a6602d2516279da6058cbb696fa8b1d89a20d2099e646443210483e5d4134e928faeb38a3b508199e0d69bb55ee34774205c0a61205b50b08febeaa401e6e3a51a2bf98efac78b7ae2b852c5395a12c40e2c7dd1b202504b5a7d2f7e4fd4f8610930d2868cba8864339e041da21c0715f41b2b23d14d0b545480bc3bd7d7215cf2f816a3332081ecaa08c0f8b99525251f57231b6750c2dbd1109ac4160486b768324b6bac87ef5a226448c431240328f42cca586be7aff3cbe7605fa341514fccfb966af3d4530e8cd9037a11ce593c2d383e1035a0c2eda098de90d50c5184a9c01b57f26b94dedd1454c340637ecccee70625754a328c65f42645b5e1a5655eef97dfb1c6308edf49fa368d17d17e06adc512b3973ea652ac40a9978e1bb1b2f86c5a9ffbf60dcc4f6bbc98a64f4de65e7ec61721edeb0e5238456f761d2d1293af0de9f793b11d8cadf01a94319a02a4273ffc4d3ffa7b34d74fd2e0b100fca58b5325f907a749193e751d6c116687aee3747b59460d4ef156e72476eae1b8455d76e71b306b98129b72fe1cb5eb405a7c2f4327f3862d4\",\n        \"signature\": \"696bd552dd01db80b3d67d61eeb7ecc56878404ab119442a1c7422992cfa35aea920825d2dafd892ad7eb6825ad999aee5c83b7b507906534f91ace759c5510c\"\n    },\n    {\n        \"secret_key\": \"29321469ee9f2bb165a069640332b489bf5c3fab682e93dae9d86317bf50c52c\",\n        \"public_key\": \"96f730f8ef8970268dba0f7570410b6188a1a3c86397740913d53ada262ab87e\",\n        \"message\": \"9c712c83d54f2e993ca68a9632846004499c5195448ddc491c3a0d2e3a666d6b33098e4864fdf86e619d50f10b7cc6c39b3ff2801a9491f6fa97c5f1c4afa7aeff31d738f9a768a79c73b25577310fb0ad4faf8543a098f859571b6148e8b52926445757d5549fd25a26518531566379d1c274e6c6a9d64132e4ac25ac9af9381bcb885332113f43014a139a81f8d43c8a6ab54c11a5c92e06191c1e51b757ac9f11e3dc15db4486d167ff9f2d65e23e6c96223d9aff8d10d1502cf3dbce5e357e6b12dbe9b7e997c3d0a507d3bae3cfef1ffc8d056ef7dc72ddc1c81e310ad205be16e77f2738354b10b484d3076c27e6b4f166388581f350befe22fbb082b54121ee59ecc7ae5dece89882acf26cb747ffaa3e2d05a696f60fd9e829c709d8f02daf537b2369b891fe6ccbf8dfcdd7f4a364b19985be7edec67ddc1db713c0a90fafa48837772562deacc2d2a0e789e18a8b5b3bd9e083ea92fffc3183d5d414153259b33a4329cfc80824ebcbe044a7e33ab8a24fde54bd9520aea284b0c4c4fa9427d251c0ddd013ecdd8290ef5565f608508e363589e529d84ff0f26f9ecb03052d5897fabc917e56e601b64abfe5a17c3950289d0cdcaf1f6005a9f8106f43e17adcaa2d1e269166762f8054de05135d5d1393d7000a15b87bd68846a89d5bc22863325151aac843f72278ae6f4af72a4e449adb7eae6d436a1ec7e58e59b7b8bb9ef0ddaaa001826f8dcb446479deafd8b8d542041c19a05b1e0ee47b4640910c31930ca4e20b105758ec75f1950356947f6261d0037fe30773a3ece6a96c8d5433333d822c2777ef7ff8be6033345b5055d58f5eb3729af5ae8824f331ee0731c89b20ac118f550427cd958a55f6b1a2888a087bb7db55bfc73b29429b4448dbe9119c45a87339b4497a69a4cf833e8f3770cce5e01faf5e73bbaf627683c0a28c73052fbece203043389dfbfd45495e51dab86a252e5bc1b4b7fe2807e3d0e2363beab51c67fb31\",\n        \"signed\": \"4e1aff8463bca1b7deb1d3773df2e7a06864111b6dc42a62ae98deb2313943b3153ee46696b15c24efc2a808aaba81c78e3dfa4dfb50ca9fe84445ea68bc8e0a9c712c83d54f2e993ca68a9632846004499c5195448ddc491c3a0d2e3a666d6b33098e4864fdf86e619d50f10b7cc6c39b3ff2801a9491f6fa97c5f1c4afa7aeff31d738f9a768a79c73b25577310fb0ad4faf8543a098f859571b6148e8b52926445757d5549fd25a26518531566379d1c274e6c6a9d64132e4ac25ac9af9381bcb885332113f43014a139a81f8d43c8a6ab54c11a5c92e06191c1e51b757ac9f11e3dc15db4486d167ff9f2d65e23e6c96223d9aff8d10d1502cf3dbce5e357e6b12dbe9b7e997c3d0a507d3bae3cfef1ffc8d056ef7dc72ddc1c81e310ad205be16e77f2738354b10b484d3076c27e6b4f166388581f350befe22fbb082b54121ee59ecc7ae5dece89882acf26cb747ffaa3e2d05a696f60fd9e829c709d8f02daf537b2369b891fe6ccbf8dfcdd7f4a364b19985be7edec67ddc1db713c0a90fafa48837772562deacc2d2a0e789e18a8b5b3bd9e083ea92fffc3183d5d414153259b33a4329cfc80824ebcbe044a7e33ab8a24fde54bd9520aea284b0c4c4fa9427d251c0ddd013ecdd8290ef5565f608508e363589e529d84ff0f26f9ecb03052d5897fabc917e56e601b64abfe5a17c3950289d0cdcaf1f6005a9f8106f43e17adcaa2d1e269166762f8054de05135d5d1393d7000a15b87bd68846a89d5bc22863325151aac843f72278ae6f4af72a4e449adb7eae6d436a1ec7e58e59b7b8bb9ef0ddaaa001826f8dcb446479deafd8b8d542041c19a05b1e0ee47b4640910c31930ca4e20b105758ec75f1950356947f6261d0037fe30773a3ece6a96c8d5433333d822c2777ef7ff8be6033345b5055d58f5eb3729af5ae8824f331ee0731c89b20ac118f550427cd958a55f6b1a2888a087bb7db55bfc73b29429b4448dbe9119c45a87339b4497a69a4cf833e8f3770cce5e01faf5e73bbaf627683c0a28c73052fbece203043389dfbfd45495e51dab86a252e5bc1b4b7fe2807e3d0e2363beab51c67fb31\",\n        \"signature\": \"4e1aff8463bca1b7deb1d3773df2e7a06864111b6dc42a62ae98deb2313943b3153ee46696b15c24efc2a808aaba81c78e3dfa4dfb50ca9fe84445ea68bc8e0a\"\n    },\n    {\n        \"secret_key\": \"04657750497e68152c43ce34a58d2106e64c557cd7a84ef05d9eb82e6bcb05f5\",\n        \"public_key\": \"3b3a1947b4cbf60b826d609f192dc230aa9b9baf4cd6a6092e495f1d2e47ad62\",\n        \"message\": \"2948227a890f6f845b775e62c53af3805064a1576446f085d90f8b9a5ed68df1ea393ce479c4414149a9ec5a171036424dff0344b4958f6132298d0e24c926d28ad9d79f98c6e6bcf1c5767606ecd291c6ad47b4f9fb2b0201155ada627b7a1fd5b07419874083059eb52b2f6ec22818b78246228f3fe6355dfda70ebb9bbe73229378736399557ce24b30bf645a14e2256f70019b3336b203fb77c6ec94a7a2634888feead4d72c2391e99e8c8d533fd8a42b08c11f887ab2deb6ebbfe3d251de63536c36cd53422398e544cff87b07a63349fc5085dde93a1bfd7171133a2043981f607522c8133c63428d1b92626c79b7358e7021cf1f412a78afa7cb3f59ffef9279885a5bdb2466acd34cd51580830b8351ebd440a96623907ad1f4b56203f5e159a429e3546ead0c011dbed09028717e3c3dfed39197764d4d245ef228b98044718ef4d8822f21b2c5685038473bf93dc0937451eb02d31a46c8dc7e94c3e8678c83b98a43818f125b528b476aad31d1584ffd48f149e5736e58f94205d3889e567e4dd1eac2fac1f8f4dc540e5322460fb940e12e93c4c98ded1941c1904f967fb4643684c19a4d5c441d60b0e9f40855e523fe7f99107657a68076275bf84b7c69a3f2b3855bc8026ba9b00bc6fe34b99da0631700a67f52b34e1796339887a48305121d53ab4440fc4b5c9bf72394d5ed372ff18ca3f007bd02df651dc3ac438275f1a3e52422b86c4586766a21cd89f805805dbb44fd89fe24fb2c0b40d1b754c335dbaffc3b3bb8bb46c74c36374504042d86789227599862312e99ca89eb504cc3d75d19495aa86b20b2736b121bb2075c88ed4a3fbdaa6b2c3f76d1ff5525d3a2863e4d83c72bfe01e10278809474e1822de2d96283489320029611aa9dffc4829d66869e63494f9aade70b77a7b80fbc93e3de4d935913752d045e13b312c5d082f6242d4985b053b3783eb02c6614963dc0d55d4cbe887bae29cc18979e5e2ea945bcd40d89\",\n        \"signed\": \"7e2eae5a293f418391f6d85a7994b07c452280017ee653bf617a8d5be24cbb5d0efdfb7f7f001312260f344e6fb915ad8d7de9c0519827c05726f9ce2545dd0b2948227a890f6f845b775e62c53af3805064a1576446f085d90f8b9a5ed68df1ea393ce479c4414149a9ec5a171036424dff0344b4958f6132298d0e24c926d28ad9d79f98c6e6bcf1c5767606ecd291c6ad47b4f9fb2b0201155ada627b7a1fd5b07419874083059eb52b2f6ec22818b78246228f3fe6355dfda70ebb9bbe73229378736399557ce24b30bf645a14e2256f70019b3336b203fb77c6ec94a7a2634888feead4d72c2391e99e8c8d533fd8a42b08c11f887ab2deb6ebbfe3d251de63536c36cd53422398e544cff87b07a63349fc5085dde93a1bfd7171133a2043981f607522c8133c63428d1b92626c79b7358e7021cf1f412a78afa7cb3f59ffef9279885a5bdb2466acd34cd51580830b8351ebd440a96623907ad1f4b56203f5e159a429e3546ead0c011dbed09028717e3c3dfed39197764d4d245ef228b98044718ef4d8822f21b2c5685038473bf93dc0937451eb02d31a46c8dc7e94c3e8678c83b98a43818f125b528b476aad31d1584ffd48f149e5736e58f94205d3889e567e4dd1eac2fac1f8f4dc540e5322460fb940e12e93c4c98ded1941c1904f967fb4643684c19a4d5c441d60b0e9f40855e523fe7f99107657a68076275bf84b7c69a3f2b3855bc8026ba9b00bc6fe34b99da0631700a67f52b34e1796339887a48305121d53ab4440fc4b5c9bf72394d5ed372ff18ca3f007bd02df651dc3ac438275f1a3e52422b86c4586766a21cd89f805805dbb44fd89fe24fb2c0b40d1b754c335dbaffc3b3bb8bb46c74c36374504042d86789227599862312e99ca89eb504cc3d75d19495aa86b20b2736b121bb2075c88ed4a3fbdaa6b2c3f76d1ff5525d3a2863e4d83c72bfe01e10278809474e1822de2d96283489320029611aa9dffc4829d66869e63494f9aade70b77a7b80fbc93e3de4d935913752d045e13b312c5d082f6242d4985b053b3783eb02c6614963dc0d55d4cbe887bae29cc18979e5e2ea945bcd40d89\",\n        \"signature\": \"7e2eae5a293f418391f6d85a7994b07c452280017ee653bf617a8d5be24cbb5d0efdfb7f7f001312260f344e6fb915ad8d7de9c0519827c05726f9ce2545dd0b\"\n    },\n    {\n        \"secret_key\": \"8bd99070c50a9fa418ef7f75c00129916a41c86070961ccb2b202be18c2d10d7\",\n        \"public_key\": \"ddd73308fce8ca6552d039428c7a1a94923320a31c0f580d3c235280f03c1830\",\n        \"message\": \"485f8d680f79ee2d828be7d018a65e0b64b0f0184819863e7110eea8f299a72c4dc87f8ee8a8aeaa81af91dc71adea79fc9797421ccc646e6cd5dd48b4dec1de968693fbce0d0021a3d98d38a8bbc58195e6dfc3b5e1461b2a594103e80a29441d5aaaf889e31cc865141f0c6b2c8c81f721679ea2394ec6e4081ec203c2ea397d9484757a7a0ecd53e652db9df17bea0e32fe8b2cbce0d1d97b961ed74e8e622bcdd3558b7c48695adf18aae6110ea9a339b9da407a9edaf2ab081a681e1832cc215b1f08a67d559a4744af7cd50318c206ee91157582f82eb6c0fc29027b4461c30733b8169d1481322c4860509ba096bacb71a579246751d567540e41431e14f1b46ef16eba276104bc01650d5c4926e47c9c6040784b043cd0aa4854efe8797fd0462d4539f38035aef08b4577c1a9118d004b6d01862f5276776dfef1371864f155ac0f078389c205cf0538d85fa348244d7a422911310ff6c10132b1598bb445c7e2077b763c473d1e7a61a38b64929a648b60b2e543543739224b40fbf6d87f1079c30bc873ac38991d51b89e9d261c4bccb375355c072c1ea20e4ff91d55d9f7544e90d1c6646c59af72424d8aaa8e0aed07b3889d4e450c1209684ce138d0c9da079525f5aa02050af570e4315c2fa8b099b7765bfbb894fad359b8e24804ece052ac22a191705335e98840a624e4cbf3a1a1a327812785b2c0f5d6381457b72fdb633e81938bbb54b8c37cccb5d59c5827c7683a5247544977e984442178d0852906ca6f945c4229eb08ad27e6c275d7b4ec8dc25fb2819337e53ead6c7aa787f91a7dc6ddafd536eefcbdec2c50167be34306a82e16d5d52b3b1be008a7a611274ce2cf8d62e3b900c09943be70ccc77b070637c25061d61be910eef50df18744c33e76f6701e0a8ff6297fa67e4b4108c13756727a9d74bc9e17983eec08f866b7c7ffb37f3ccb0141a80feff6322b2ac62b84ce2797fd98d6ff269a41a0c38482db679862a38cd2\",\n        \"signed\": \"b14a7b262012c5909e21d587fb4f29a9093c8e1c2999816a82118fefbf10e68ea898bf0da18ebfd0341ea8f82a1844c8e0dd5306e509b9d0c35b473a7d209507485f8d680f79ee2d828be7d018a65e0b64b0f0184819863e7110eea8f299a72c4dc87f8ee8a8aeaa81af91dc71adea79fc9797421ccc646e6cd5dd48b4dec1de968693fbce0d0021a3d98d38a8bbc58195e6dfc3b5e1461b2a594103e80a29441d5aaaf889e31cc865141f0c6b2c8c81f721679ea2394ec6e4081ec203c2ea397d9484757a7a0ecd53e652db9df17bea0e32fe8b2cbce0d1d97b961ed74e8e622bcdd3558b7c48695adf18aae6110ea9a339b9da407a9edaf2ab081a681e1832cc215b1f08a67d559a4744af7cd50318c206ee91157582f82eb6c0fc29027b4461c30733b8169d1481322c4860509ba096bacb71a579246751d567540e41431e14f1b46ef16eba276104bc01650d5c4926e47c9c6040784b043cd0aa4854efe8797fd0462d4539f38035aef08b4577c1a9118d004b6d01862f5276776dfef1371864f155ac0f078389c205cf0538d85fa348244d7a422911310ff6c10132b1598bb445c7e2077b763c473d1e7a61a38b64929a648b60b2e543543739224b40fbf6d87f1079c30bc873ac38991d51b89e9d261c4bccb375355c072c1ea20e4ff91d55d9f7544e90d1c6646c59af72424d8aaa8e0aed07b3889d4e450c1209684ce138d0c9da079525f5aa02050af570e4315c2fa8b099b7765bfbb894fad359b8e24804ece052ac22a191705335e98840a624e4cbf3a1a1a327812785b2c0f5d6381457b72fdb633e81938bbb54b8c37cccb5d59c5827c7683a5247544977e984442178d0852906ca6f945c4229eb08ad27e6c275d7b4ec8dc25fb2819337e53ead6c7aa787f91a7dc6ddafd536eefcbdec2c50167be34306a82e16d5d52b3b1be008a7a611274ce2cf8d62e3b900c09943be70ccc77b070637c25061d61be910eef50df18744c33e76f6701e0a8ff6297fa67e4b4108c13756727a9d74bc9e17983eec08f866b7c7ffb37f3ccb0141a80feff6322b2ac62b84ce2797fd98d6ff269a41a0c38482db679862a38cd2\",\n        \"signature\": \"b14a7b262012c5909e21d587fb4f29a9093c8e1c2999816a82118fefbf10e68ea898bf0da18ebfd0341ea8f82a1844c8e0dd5306e509b9d0c35b473a7d209507\"\n    },\n    {\n        \"secret_key\": \"1af4cf6d24ab3782867d96a1c275ceeb022c691a308e6245665d616bf67c2c32\",\n        \"public_key\": \"19d317ea98d35ba5fa67c12ecfb32750df275d7a45b8e211a7ac47ede7712d9f\",\n        \"message\": \"f445fdcfe28c17bd4427aea5676c0e1280841597e9d66de7d7a71723110939bed00f4ebaf9603d53c9cbf6271be547af29b2a045ec41288a7bb79d662dc210e215957fa84688c916543e5617f560e4d38f73baefc37e11914e47c515067851e8ed21393e13dd19ed9b73d98945fc826a258e957dc083dd8e535c30a54b4266dd71d113ce856b46282a18033627a98e6472ccb463ed3d96fa7b355d3b2c2a2b6010dd14f4ea3965dd87be1c429bdea8300b4b0b44458635b4979f5e3e8eb5c618d4e13e1d688bf88c7e4a3d938e84336d67be68df3435c5c99086321c02e13b4a12524b34e46a0b4d27f30d7ed4f5cecb36deadf09e7efcc755ca667568297914c6bc240627d9d09aacf85415412c0635623453278d9bf0e10eec65fc72affffa9392dc7881d1e5c760a40280f16b1475127b91b69ccb65dc4b35de10f94325c0cbe1c47019a2eaf2b4ba92d785229aacfad1826ebbdebefb7dad4b05f88243e15f279766e3321dd8dba650444d81fb0878767a9c63534bb4ba21285a2416cb8f856d11a96e0a8c8de1e1a75132f1564cd994995690bbed2ee154537fb6f279fb09c8dea6f6afabc62856e3d128fdfa79fc4976193bb9b336861e47b56dc2582393d2e544651ac85bc58e9e6a94dc4c39c4ef72538a14f856cd95c3e2790adee03ab2e52ca0ae471de502cb19e676af35f5f93d840fef9606cbe92d8bc25006105d92344588838842c3be505c7350e351b735e6cc6fb79275b27bd9ebd36ba4d060acee73b5a315ceffab86d06f2168a67065578196a0ed04a4dd71d6734837db083857ab1eb5e0eec4ffbac9544f4ec19bde194df84b1c848341574bf10daee85b8178196fb608123a808171d73ce4206ad65216ad1a5cbde40b19d6ae7f40df97ab8432e2c53a504ed122e25fb7a51c14354ab3928edeb39c29eb246b74a076f89d03504f401bd176b5cffee4b9db097c45764f51aa376704b5a7f210b3f1a905e25d67002f6557ebb749737cda31\",\n        \"signed\": \"7eb46cd0de3155b43747d732f1045d8ef74492ad827a2245bd17102828442e43a0ce7e8b268ed7fd8d3e7b28f072795da3e070f12bc4e23eaef57b853cee880af445fdcfe28c17bd4427aea5676c0e1280841597e9d66de7d7a71723110939bed00f4ebaf9603d53c9cbf6271be547af29b2a045ec41288a7bb79d662dc210e215957fa84688c916543e5617f560e4d38f73baefc37e11914e47c515067851e8ed21393e13dd19ed9b73d98945fc826a258e957dc083dd8e535c30a54b4266dd71d113ce856b46282a18033627a98e6472ccb463ed3d96fa7b355d3b2c2a2b6010dd14f4ea3965dd87be1c429bdea8300b4b0b44458635b4979f5e3e8eb5c618d4e13e1d688bf88c7e4a3d938e84336d67be68df3435c5c99086321c02e13b4a12524b34e46a0b4d27f30d7ed4f5cecb36deadf09e7efcc755ca667568297914c6bc240627d9d09aacf85415412c0635623453278d9bf0e10eec65fc72affffa9392dc7881d1e5c760a40280f16b1475127b91b69ccb65dc4b35de10f94325c0cbe1c47019a2eaf2b4ba92d785229aacfad1826ebbdebefb7dad4b05f88243e15f279766e3321dd8dba650444d81fb0878767a9c63534bb4ba21285a2416cb8f856d11a96e0a8c8de1e1a75132f1564cd994995690bbed2ee154537fb6f279fb09c8dea6f6afabc62856e3d128fdfa79fc4976193bb9b336861e47b56dc2582393d2e544651ac85bc58e9e6a94dc4c39c4ef72538a14f856cd95c3e2790adee03ab2e52ca0ae471de502cb19e676af35f5f93d840fef9606cbe92d8bc25006105d92344588838842c3be505c7350e351b735e6cc6fb79275b27bd9ebd36ba4d060acee73b5a315ceffab86d06f2168a67065578196a0ed04a4dd71d6734837db083857ab1eb5e0eec4ffbac9544f4ec19bde194df84b1c848341574bf10daee85b8178196fb608123a808171d73ce4206ad65216ad1a5cbde40b19d6ae7f40df97ab8432e2c53a504ed122e25fb7a51c14354ab3928edeb39c29eb246b74a076f89d03504f401bd176b5cffee4b9db097c45764f51aa376704b5a7f210b3f1a905e25d67002f6557ebb749737cda31\",\n        \"signature\": \"7eb46cd0de3155b43747d732f1045d8ef74492ad827a2245bd17102828442e43a0ce7e8b268ed7fd8d3e7b28f072795da3e070f12bc4e23eaef57b853cee880a\"\n    },\n    {\n        \"secret_key\": \"2aacc8197ff8fae1c1cf3862e3c04a21782951f8e48e40b588f8bc7460c30a03\",\n        \"public_key\": \"9a1b01e2154f1c36a8e16b79ee7d2d05b8712e0d27a061a6d41d475778b0df8c\",\n        \"message\": \"5d82752ce5da3180faf4787aedfb19294b4348a1d9202c85398331323e0f42b0835227e68e1156f2d4ba2fe450e6d6ef2b92d89bbbe4096e12ca8397eb2f45e676f1673aa41c959fcd30d5578853b5dbd1c0d5b3a0f0d870eca71ea13390111b258f6548b32f37a05e9744a656fd778d65721965c6d9b328600b45704770e04b099790aa7884f00d7bb7659e337210bdc23eaa71d7b016030aca6223b5569bdfc290811aac409524dccbf9babcbe4bf20946b544317ca6f2f91831c79fb273b6404eb4e61e1f7b106ebd0db9f2b1974d2f031bce25803606552c3441655efcf2c7ea52adcb30993d85f2dda79603e9415a023245a66c07a956933146f53c993c08891808b8166b30721fbd1f8a1b937d14070d786e9eb451f2ab5142f83a60f35d76ad8b81d6a57cf368fc6fcacc0c4758440d9cd595b1b0942a3655e250da983b7241546dcfbe0ae81077650295409ff9e90977fb9960cbf40a2af5177402ba2faf50db6f1a7365cf99e992429e38db43ea83fddc95a648676c0b16bc952b15de99d52f6b5233da4eae1978e8ba25e6235afbc511c76c4c874c9237922b1cef0847d07a80200cbae3c7c81fcbd0d17252ed8c61ad1954fc862e1e04444c32086fee380d1c17541322b9a60da662352e210e9ae215e353296db922339aa17d2173ec31f1c530a24b1f348a31572e1469caac808f9c76ec2731873b803ead3e54ea24bc24499b9704b3bdce81389b9d14d49527c04b3bb9e3ba6d946cea58cf786d4d28b89b41c58274035a86905ad95758c3161366ab93da81e6b4c808364e087daeea4c4c5c2aa6871937c5feaba2149f01f738f45396e66ea8063221e1c81c05255ba564ad440cb5d07cbd4bab941ea593244930bc5c289b3165d3ec8847ebc4b674c0a49f9169adef786d7767bc8f213db7d95c06e99bc11e200055b65eb79adaa01bcd2c85da43ce6370e12e349bf6d475487affdf92e20a3acded1d76f9e83e919e98def195072a50d0c571dd25\",\n        \"signed\": \"647cdd6c1a67290e57676a78113aaadca69ac57b997715c509895b8c5c94e82c0b6aceccf3ba8bd7cf61752b1b19d13b49f15f8bfa046eb442a55cd5bab142025d82752ce5da3180faf4787aedfb19294b4348a1d9202c85398331323e0f42b0835227e68e1156f2d4ba2fe450e6d6ef2b92d89bbbe4096e12ca8397eb2f45e676f1673aa41c959fcd30d5578853b5dbd1c0d5b3a0f0d870eca71ea13390111b258f6548b32f37a05e9744a656fd778d65721965c6d9b328600b45704770e04b099790aa7884f00d7bb7659e337210bdc23eaa71d7b016030aca6223b5569bdfc290811aac409524dccbf9babcbe4bf20946b544317ca6f2f91831c79fb273b6404eb4e61e1f7b106ebd0db9f2b1974d2f031bce25803606552c3441655efcf2c7ea52adcb30993d85f2dda79603e9415a023245a66c07a956933146f53c993c08891808b8166b30721fbd1f8a1b937d14070d786e9eb451f2ab5142f83a60f35d76ad8b81d6a57cf368fc6fcacc0c4758440d9cd595b1b0942a3655e250da983b7241546dcfbe0ae81077650295409ff9e90977fb9960cbf40a2af5177402ba2faf50db6f1a7365cf99e992429e38db43ea83fddc95a648676c0b16bc952b15de99d52f6b5233da4eae1978e8ba25e6235afbc511c76c4c874c9237922b1cef0847d07a80200cbae3c7c81fcbd0d17252ed8c61ad1954fc862e1e04444c32086fee380d1c17541322b9a60da662352e210e9ae215e353296db922339aa17d2173ec31f1c530a24b1f348a31572e1469caac808f9c76ec2731873b803ead3e54ea24bc24499b9704b3bdce81389b9d14d49527c04b3bb9e3ba6d946cea58cf786d4d28b89b41c58274035a86905ad95758c3161366ab93da81e6b4c808364e087daeea4c4c5c2aa6871937c5feaba2149f01f738f45396e66ea8063221e1c81c05255ba564ad440cb5d07cbd4bab941ea593244930bc5c289b3165d3ec8847ebc4b674c0a49f9169adef786d7767bc8f213db7d95c06e99bc11e200055b65eb79adaa01bcd2c85da43ce6370e12e349bf6d475487affdf92e20a3acded1d76f9e83e919e98def195072a50d0c571dd25\",\n        \"signature\": \"647cdd6c1a67290e57676a78113aaadca69ac57b997715c509895b8c5c94e82c0b6aceccf3ba8bd7cf61752b1b19d13b49f15f8bfa046eb442a55cd5bab14202\"\n    },\n    {\n        \"secret_key\": \"ff862156c7eab681c95efff8003e00a14f1f0d505d5507e6e5b39179df9b1cda\",\n        \"public_key\": \"e1b89fb31114ea46107ffd0329f1066428de54708edbecf3ed9d4708cd143fe2\",\n        \"message\": \"b3d1db72a6a985ecd70a2cff6c18c179e217d4f410fd3934969685901bd071bce6c2fb6763e10c6fa16e75a1176066b8ec81ae3a8039e71dc2cdc64a40fd62b7cee7be4ba0332fe45d0b60158652e33f8d3aff3cb4d6b021744d0dd178b1bf0a1cc1d3fe9321be28421eb88263a124f49792d079475a8c555ff5690873514b5d483e53217e0cbb12862b850fe390c8f83008086e649ac904b018350ab49157ee9bcae6c07a4b878b48e25e984fbb4d36b61d689b13468a28d1e387e0e88657f8c8ac9586a6e26cf94dff6f8264e3ff6258865c6dcf857b00147886e175df0432e32f04400e299f21188312b32dfc050e7b7e87eeaa0cbaac6be9937a5e0cc31113de7c8b233e1ce8e5d9c564fbe9f37bbd411df7a5e44e6c7ebb676d85894dccf4865e4dda0cadef2bbc55000b3a29f1f71ef4461ddc3b331d91566534c5d6d84c731376295320f80adc90288f9953554fcdf9213de6a905210d4c8064af91cd98325ef91898d33d70038202e32fb6709ca3d788fecbd1b841fa4e5e9062d64267c35cfd444fb69e2f6047f58b1c2af4cc7e4cac2f890888360592113e96ad3a857ed05eaaba6f9153ef89b93e00e8743733ec472d9b0eec1cd8fa52425c4a26bd7df73a2712bebe51ae3b25eb78db82149031fe7b281af6cb7714edf89de915f3470f153eed7f456243bb90342e190e647f39e046883ce28a892003315ea379429e9582a935eb78963396d136845f86c466e8faf2272f43ffefc2ada5601f8a6b2ac4cc6b92820917f2e0393c8faf982d6c5f4f230e27ce2278a7237747fa85a9c857bf1802c3eae0d235b5ad58497d66a0d3a9baebcc417f1833e9cc4460f975d72858cd118d7aafaf1c878297cacf71ac75676dc1b4fb51c1775810d03537f2d766278b9971bb97d3c49b51feb26d375e0cb9109574a816f84e76fc7ef072d5793c2f65ab2efd9052e6b8569f2805861c31a7344a3c44069a94320d274e271271eafa3bfe64de7537846a01e51fdae0\",\n        \"signed\": \"4b8137042d6784757d4a9c06bc7432f4809b1c6a903542736d9a57668c20845c17d468557085c57fb63213dad3be0fa36a118f7c1aeff2562ff4b8888c26900eb3d1db72a6a985ecd70a2cff6c18c179e217d4f410fd3934969685901bd071bce6c2fb6763e10c6fa16e75a1176066b8ec81ae3a8039e71dc2cdc64a40fd62b7cee7be4ba0332fe45d0b60158652e33f8d3aff3cb4d6b021744d0dd178b1bf0a1cc1d3fe9321be28421eb88263a124f49792d079475a8c555ff5690873514b5d483e53217e0cbb12862b850fe390c8f83008086e649ac904b018350ab49157ee9bcae6c07a4b878b48e25e984fbb4d36b61d689b13468a28d1e387e0e88657f8c8ac9586a6e26cf94dff6f8264e3ff6258865c6dcf857b00147886e175df0432e32f04400e299f21188312b32dfc050e7b7e87eeaa0cbaac6be9937a5e0cc31113de7c8b233e1ce8e5d9c564fbe9f37bbd411df7a5e44e6c7ebb676d85894dccf4865e4dda0cadef2bbc55000b3a29f1f71ef4461ddc3b331d91566534c5d6d84c731376295320f80adc90288f9953554fcdf9213de6a905210d4c8064af91cd98325ef91898d33d70038202e32fb6709ca3d788fecbd1b841fa4e5e9062d64267c35cfd444fb69e2f6047f58b1c2af4cc7e4cac2f890888360592113e96ad3a857ed05eaaba6f9153ef89b93e00e8743733ec472d9b0eec1cd8fa52425c4a26bd7df73a2712bebe51ae3b25eb78db82149031fe7b281af6cb7714edf89de915f3470f153eed7f456243bb90342e190e647f39e046883ce28a892003315ea379429e9582a935eb78963396d136845f86c466e8faf2272f43ffefc2ada5601f8a6b2ac4cc6b92820917f2e0393c8faf982d6c5f4f230e27ce2278a7237747fa85a9c857bf1802c3eae0d235b5ad58497d66a0d3a9baebcc417f1833e9cc4460f975d72858cd118d7aafaf1c878297cacf71ac75676dc1b4fb51c1775810d03537f2d766278b9971bb97d3c49b51feb26d375e0cb9109574a816f84e76fc7ef072d5793c2f65ab2efd9052e6b8569f2805861c31a7344a3c44069a94320d274e271271eafa3bfe64de7537846a01e51fdae0\",\n        \"signature\": \"4b8137042d6784757d4a9c06bc7432f4809b1c6a903542736d9a57668c20845c17d468557085c57fb63213dad3be0fa36a118f7c1aeff2562ff4b8888c26900e\"\n    },\n    {\n        \"secret_key\": \"582619ab3cf5a3ae776688bf6dbacb36330a35ad7524e49ef663687764cf6ec7\",\n        \"public_key\": \"2002ea0a38a327e0384aeae468db0f6c8516a69609af9eee93e9ecb94b449c66\",\n        \"message\": \"ca74284f11c56e2598d78a4ecd03b40e017a558176012b26fdf695c3de98a74f8f40a47d7978edc24ee8092bfe5e61596834deed1d9d34a0f5cdaebe3421aa19e012de865b9ee1b73479b2bd1ac982f97ed9c7cd20459c60fbb11e1e2b4eac5db6844c71d72949502bba503acec905adba25f6b119eaf9639fa8abb302dff9932d850cc44c57cf90b2e58a8b5251c126a9e28f5c761b6280e2cddd79cbd68e53ff4a6226d3bd4c961b9b9e4345a2545862c7973866f0420b898e7baea90ea4ee004042ef38a1fd956a72fdf6fd43257da9fdb96680ef4fdf9e943d265cdcf2e52e3201d5408bc6ce10e5700adf12b55ba14aa829d8691c31f24fc4a51ce6faa1f3ef2ead78e5e753446ad3fa4a84c193979aebc8309bad60814f4859b931d70414764491c6c9ed8db673c543d35185cd2888aa21c1a9203427e0ac0b1fe34c0e4a4001e0956c13cb59a3baf87c2109a888a4c9e7aa481767d8020ff35dd7c5ccec7c08e971a7e218138c90546a7ddf36ad114be58557432c2ddf34ced3379f70d4407e5879f9842f381717051b1685aa7ab0ad38541ec168f51cb688f3cd1a019a336c9f4f3f82de785c074867fdc8800fc76fba04c8ad8de10d2e9b430581be44c41ecc8fc8a616314399d18c6479f57e573b22a6ee5ce2dcc08948a0de1f0dd25b65715ab18c70c762fc3d7d600cad63226038509c19ab35b5493eee73a703731ec535c90c6f06d94d3e5f7e51a09f9f8f42c501b8504686365ceee9e0fe001329f303522146717c6a1258d0f157cbea4b5a5e3d13bc907e95fd6e8a71896a02c3106bd26a510051f1b30258ab27f875673b1337ee36b71a376e0f9e7809a67c67d9acc16c251dcb8c926c8e932516d38b7233eac6159c59cad0307c590e7131b62219145aaa355bfb4acb6af0a5500006cdd8b813fe1908602e0874c9622bb37673ba1acba414231667bcc4907ac871f87e6ce3f591c19171057a9f457f5362aeda105d18fb84f7d0f0a7da7ef8da9114\",\n        \"signed\": \"fe9701da1aa81c55bac33638f775542b804480f34b7bfc78da9916e5246a604d390bf920c872a77924246ee8d0393b202e7b25b2484f654ac367cb0925ece305ca74284f11c56e2598d78a4ecd03b40e017a558176012b26fdf695c3de98a74f8f40a47d7978edc24ee8092bfe5e61596834deed1d9d34a0f5cdaebe3421aa19e012de865b9ee1b73479b2bd1ac982f97ed9c7cd20459c60fbb11e1e2b4eac5db6844c71d72949502bba503acec905adba25f6b119eaf9639fa8abb302dff9932d850cc44c57cf90b2e58a8b5251c126a9e28f5c761b6280e2cddd79cbd68e53ff4a6226d3bd4c961b9b9e4345a2545862c7973866f0420b898e7baea90ea4ee004042ef38a1fd956a72fdf6fd43257da9fdb96680ef4fdf9e943d265cdcf2e52e3201d5408bc6ce10e5700adf12b55ba14aa829d8691c31f24fc4a51ce6faa1f3ef2ead78e5e753446ad3fa4a84c193979aebc8309bad60814f4859b931d70414764491c6c9ed8db673c543d35185cd2888aa21c1a9203427e0ac0b1fe34c0e4a4001e0956c13cb59a3baf87c2109a888a4c9e7aa481767d8020ff35dd7c5ccec7c08e971a7e218138c90546a7ddf36ad114be58557432c2ddf34ced3379f70d4407e5879f9842f381717051b1685aa7ab0ad38541ec168f51cb688f3cd1a019a336c9f4f3f82de785c074867fdc8800fc76fba04c8ad8de10d2e9b430581be44c41ecc8fc8a616314399d18c6479f57e573b22a6ee5ce2dcc08948a0de1f0dd25b65715ab18c70c762fc3d7d600cad63226038509c19ab35b5493eee73a703731ec535c90c6f06d94d3e5f7e51a09f9f8f42c501b8504686365ceee9e0fe001329f303522146717c6a1258d0f157cbea4b5a5e3d13bc907e95fd6e8a71896a02c3106bd26a510051f1b30258ab27f875673b1337ee36b71a376e0f9e7809a67c67d9acc16c251dcb8c926c8e932516d38b7233eac6159c59cad0307c590e7131b62219145aaa355bfb4acb6af0a5500006cdd8b813fe1908602e0874c9622bb37673ba1acba414231667bcc4907ac871f87e6ce3f591c19171057a9f457f5362aeda105d18fb84f7d0f0a7da7ef8da9114\",\n        \"signature\": \"fe9701da1aa81c55bac33638f775542b804480f34b7bfc78da9916e5246a604d390bf920c872a77924246ee8d0393b202e7b25b2484f654ac367cb0925ece305\"\n    },\n    {\n        \"secret_key\": \"2bbd830ce7def3fecea1ecd6ea0ae9c9f4fa8ffc3b1f1938c505051bab40cf7a\",\n        \"public_key\": \"0fdfed8de3c1eaf891ce37e34cb4a2441cbbae0883383d70de2464850b4a642a\",\n        \"message\": \"5f1edeaa3c0b2a63311d97f1c54e7e2f687170e6b46e2169cbf56c66f231bfc4a576bd2b8420bf357d3a90f8f32ea1ad9939b467254b66a1df1f5b4cbac63a5c2724260d24d8df8edb58ae247a2591e920b1a420cf8d8539ea57db0dadff1ad3e98c3172d033163cb434a766b0c118a56abdcce79c82af7bac74ed0ea024ac4ce0222d0aa914f432092b1b517804db5918a845e9cca55a87db7c2852f7dd2e48360185cc442c7930afe15dd622cc02bcd1ee778b59705f14333241588a522de24407e8e6e10d5ef3a88e3a3c4438c17f7504674fd7e418cb2f77ad0a56d2386703155e9a401c43ddb51ead5520aa7ba038e7de5331418ad552bdcd185f503a8548f55b6386e4687ca515f7c0eea570983bfb24be16f7b3003fb756e326562f2a32fe65ff844c3984c72e40dd49e4f3ae8c0f819a7939b2e736e381f5823cbc61b2ed01d9b05cf8b14648a48b0d7cbe882ac16cadd8c42aa2c70246347b4d849536a7ac22c720da3cf178725ee557a92c25b12b8b956d3bf4802e9e8a15b5ab754235cca0e5b7e55e4aece45a47e084ce1447440598ef5d4f5fdc2c98a5ad136cffbf87d3cf52f6738cca7948356092078fdf254577f55969a0c65246dac809a2fca1f60a1d929877b9a6540e88a9e6e9155938d22c687e63b387534d385e8961e5886743f95f4a7080d916624517b15336030a46714b168b83d6f9cce0606649c01f0a1d0a2a53f5e378f6aa98c384aafb3eefdb3421fa3ac98a0d3a9c029c2300ae0241067d1a4fc92e438688ea889fcb1a1a9e8634b916c60baa0c18bfcd139bfe3017bfbe16291343ce8605bb7872558c6b5fd56dfd221577edcffaa8bda34d7a11ab8cb278288e5834842676fccffaa9111bced2b3575fdd49621b76e8d129b61700eeab0314ef94d550506a4b8d1ee65508d89d0e99e9336b41d9f74aa4d722114de0f31ecf00b097f53c9aca9c7a285b58a35d70298c5c34f74b4a705308033100349f0c62f9c2ebf7dead0a77b298eb\",\n        \"signed\": \"13ebc979a88710e3c5f345cfbb824813b308a9d5c6dee328bfd235a97de7b326de6c738f96f69831949209996852dd9c098d5808418709f2bf510d46b7f036065f1edeaa3c0b2a63311d97f1c54e7e2f687170e6b46e2169cbf56c66f231bfc4a576bd2b8420bf357d3a90f8f32ea1ad9939b467254b66a1df1f5b4cbac63a5c2724260d24d8df8edb58ae247a2591e920b1a420cf8d8539ea57db0dadff1ad3e98c3172d033163cb434a766b0c118a56abdcce79c82af7bac74ed0ea024ac4ce0222d0aa914f432092b1b517804db5918a845e9cca55a87db7c2852f7dd2e48360185cc442c7930afe15dd622cc02bcd1ee778b59705f14333241588a522de24407e8e6e10d5ef3a88e3a3c4438c17f7504674fd7e418cb2f77ad0a56d2386703155e9a401c43ddb51ead5520aa7ba038e7de5331418ad552bdcd185f503a8548f55b6386e4687ca515f7c0eea570983bfb24be16f7b3003fb756e326562f2a32fe65ff844c3984c72e40dd49e4f3ae8c0f819a7939b2e736e381f5823cbc61b2ed01d9b05cf8b14648a48b0d7cbe882ac16cadd8c42aa2c70246347b4d849536a7ac22c720da3cf178725ee557a92c25b12b8b956d3bf4802e9e8a15b5ab754235cca0e5b7e55e4aece45a47e084ce1447440598ef5d4f5fdc2c98a5ad136cffbf87d3cf52f6738cca7948356092078fdf254577f55969a0c65246dac809a2fca1f60a1d929877b9a6540e88a9e6e9155938d22c687e63b387534d385e8961e5886743f95f4a7080d916624517b15336030a46714b168b83d6f9cce0606649c01f0a1d0a2a53f5e378f6aa98c384aafb3eefdb3421fa3ac98a0d3a9c029c2300ae0241067d1a4fc92e438688ea889fcb1a1a9e8634b916c60baa0c18bfcd139bfe3017bfbe16291343ce8605bb7872558c6b5fd56dfd221577edcffaa8bda34d7a11ab8cb278288e5834842676fccffaa9111bced2b3575fdd49621b76e8d129b61700eeab0314ef94d550506a4b8d1ee65508d89d0e99e9336b41d9f74aa4d722114de0f31ecf00b097f53c9aca9c7a285b58a35d70298c5c34f74b4a705308033100349f0c62f9c2ebf7dead0a77b298eb\",\n        \"signature\": \"13ebc979a88710e3c5f345cfbb824813b308a9d5c6dee328bfd235a97de7b326de6c738f96f69831949209996852dd9c098d5808418709f2bf510d46b7f03606\"\n    },\n    {\n        \"secret_key\": \"1a7a3c2f5481131be5f868456aa2fa90e56d52cb721c7184ebff06fed2fe685d\",\n        \"public_key\": \"7c2ad0f2a570550326fb50a850835821676de1de127f6de1670299d814f6e3ce\",\n        \"message\": \"c62834d9d55d1a4403e925d0a5b552da174c02f4e945dec338c1bbb2aeb4ff40020ef70ff505205cf881b629960abd62764e5a54f2b5105667b11c7d5b7a4ccc3f488bdddb958a7be9546207e6c4671897c053508e1fd83222130a7933976d2bec614ed8f9b6a6b9f4efb2a58b9d005b943e42f171b709a7313070cb2e068da39cf99922b69e285c82ad97f2d6c77922cae2b5e320e83577c0d088761ec88152c297492978a9d7a3ff67ede44c2a707cf3e2352e232f53c8782ba48928a97f8a36b20a416816e94579b9d7250a29dc8470f63a7058e2d2a99d6f0ccb530df5969505ef5c7844eb167d20f412a508fab1f8cd9c20c5eb9a417a5412b5da6a57135759fab17f6314f68df35b1772421443676f312579af6b1411535ada8f76012b69bbeb60b2897ee6607cb369cdf52f4f6ddf88cdb2630d78896f1361fea22ae634217696ff114fb42dbe4f4346f1be5b57adb384ae7e49b41f74b31b9a62bc69dca16589c634eb9d7c6c94f8ece44b60628f98e1024cf32e3e3dd6dce55a1222532f490d63e6a275281c0f3a6c101891b8d57a45de11de35ebb151c0dcd75e6c050b3cd8babae845c39f66c36c77cde05b683e4fb0103d93e7659335c87fc0e3235b2e82488cdabeb5c5c875808745eea92de86b8efcb63e16d082919aee2e92899cb0bcf1c1421577a4a0d9db09ee1f9feb92a5382103cf7c32cfe463725ae4866daafeda0534c169f8f9be404f3baae123fa768ace46178d4b9bbc5bd7aeec7903b0a5bc57538986ee09e07e32077b3b9de50dd1967a372c385ac886287c18451a64efb37d056f9f4194c08b1e3ec97022267bf0043c13d26b9ce1f53905f6e41b3d99dc81b331909b722666ef2432e6af8a453107531230ce4a1af8eed626da223da76b46507e33d7cdbde02d411040c89a11d95156ed4ac2605b826939c6cf877b4ee736c5da77cf4650a9997a3b9cf46a82ba2bc01333c04478b5c92e2498bd002f013140aedb301b95993d1d750870d988\",\n        \"signed\": \"976160fb5bbdabe5c8962f23babacf0b0ab41c2bb13e9c0d449067b7decc7db4e94e76a71b9c0ac4d6af387a72a8cd73e3bc63b7ed650beebf17424c490bd60dc62834d9d55d1a4403e925d0a5b552da174c02f4e945dec338c1bbb2aeb4ff40020ef70ff505205cf881b629960abd62764e5a54f2b5105667b11c7d5b7a4ccc3f488bdddb958a7be9546207e6c4671897c053508e1fd83222130a7933976d2bec614ed8f9b6a6b9f4efb2a58b9d005b943e42f171b709a7313070cb2e068da39cf99922b69e285c82ad97f2d6c77922cae2b5e320e83577c0d088761ec88152c297492978a9d7a3ff67ede44c2a707cf3e2352e232f53c8782ba48928a97f8a36b20a416816e94579b9d7250a29dc8470f63a7058e2d2a99d6f0ccb530df5969505ef5c7844eb167d20f412a508fab1f8cd9c20c5eb9a417a5412b5da6a57135759fab17f6314f68df35b1772421443676f312579af6b1411535ada8f76012b69bbeb60b2897ee6607cb369cdf52f4f6ddf88cdb2630d78896f1361fea22ae634217696ff114fb42dbe4f4346f1be5b57adb384ae7e49b41f74b31b9a62bc69dca16589c634eb9d7c6c94f8ece44b60628f98e1024cf32e3e3dd6dce55a1222532f490d63e6a275281c0f3a6c101891b8d57a45de11de35ebb151c0dcd75e6c050b3cd8babae845c39f66c36c77cde05b683e4fb0103d93e7659335c87fc0e3235b2e82488cdabeb5c5c875808745eea92de86b8efcb63e16d082919aee2e92899cb0bcf1c1421577a4a0d9db09ee1f9feb92a5382103cf7c32cfe463725ae4866daafeda0534c169f8f9be404f3baae123fa768ace46178d4b9bbc5bd7aeec7903b0a5bc57538986ee09e07e32077b3b9de50dd1967a372c385ac886287c18451a64efb37d056f9f4194c08b1e3ec97022267bf0043c13d26b9ce1f53905f6e41b3d99dc81b331909b722666ef2432e6af8a453107531230ce4a1af8eed626da223da76b46507e33d7cdbde02d411040c89a11d95156ed4ac2605b826939c6cf877b4ee736c5da77cf4650a9997a3b9cf46a82ba2bc01333c04478b5c92e2498bd002f013140aedb301b95993d1d750870d988\",\n        \"signature\": \"976160fb5bbdabe5c8962f23babacf0b0ab41c2bb13e9c0d449067b7decc7db4e94e76a71b9c0ac4d6af387a72a8cd73e3bc63b7ed650beebf17424c490bd60d\"\n    },\n    {\n        \"secret_key\": \"191a1d90321c7f4e7494bb982909a9eb40c3341dd32ae4d96750b7d02966b40f\",\n        \"public_key\": \"9562d9e213f145c456935b7031c680669f8bbd31a4c2ed3c91c4002a5629e97b\",\n        \"message\": \"85890db4e2fbce093dde5a80bf8fe09a984b83a49b7ccb5d4b06cdafddd382e4b8a8a50530e82c200612c9d7d8a089bc8aa845c3cfcc38a6195d21c2618c3dba2b570920eccfcd236f17f08d814268f882242ddf0702da8785f407aa8f86fecfa903c48da83f839777eb6b4a2bbf5df7a4da53475af1ffe44b5fe0072b8fbf3d26e6d89ea67d8ac8459492890ada657eb3dc2492b88de175b4bba1a508064d619674aaae2af09d31a5c27c8d5d5a29b03779f4286b8966ce407e6ff692fb942520a9938d69cc70acb06b014b6dfc19834206cf1ac6c448ae6f078025b55f3d827201268a92add9ad178ef76a2989fedc6e39f4ebb9f96c9b8352694fa54fa022019c0ec0012d0d769e2367803f925f175f9fb9cbec4a0c9c1e2c83ea57e6a92a17f555cab934271e72c8cc3215fcb87c20539bf14277b1bfbd6e5880ef953fc75f23c0dd4fcc1e0be340af947de02e877fd5c77dd1df7b414b5c0b40c74956a545a115b0c6993ab233b7e72c822b6b3381bb1fc10875bffe3e2ed1190fa33fc15da083794fcc2c5bf5a07909063cb289a08a2c8a33d343842c2d6a3cfa2a16ca2eafcab7ea100d1c714baabb7149f07e25dee323e780757dfa8016faa7c0626222c365f8f2f6687d1ded234f799cc50d1cd26b4cfa4045917056fc79c3b88b2b1908e372df66dac8734631648349bc37fa34b25fff3b0747b6bc16b94e3e5895e4bbd93d478a6c1f75e4fa30faa922049ed4c50f12f4b312a8974d0fed8d44255dcb2bf0febe47fb3fb8ed9903b5ba4ca18e3cc6762cfa1eaf04dfa944d496e0fe8bb7dc045451396bfaba5485d9d5f391a954c3714253ccd9b19964d4280680720783036b3abfaf2884583ea5bdbcf69d08897ab288314635abb4c2964b71ad9291feb5b61f80e9b0cc07f912a8e5598d5548defe0eea1c448573710aacddb152f93c7c6fd3f7e4ed9f7442a6b900f23c3c544ce5c9ba5f5e92aafd11c9ff5f79c08b9d045fef07970625f62e2f4334a4d664caf7\",\n        \"signed\": \"74cb028dc6b75b37a1daea1cf88465db83a0093fecb22d99ba855e9ab59d05cb22c87d0b09df7c116213baa8f189b2703ff953cd202eb9dea3976ee88f5fa70385890db4e2fbce093dde5a80bf8fe09a984b83a49b7ccb5d4b06cdafddd382e4b8a8a50530e82c200612c9d7d8a089bc8aa845c3cfcc38a6195d21c2618c3dba2b570920eccfcd236f17f08d814268f882242ddf0702da8785f407aa8f86fecfa903c48da83f839777eb6b4a2bbf5df7a4da53475af1ffe44b5fe0072b8fbf3d26e6d89ea67d8ac8459492890ada657eb3dc2492b88de175b4bba1a508064d619674aaae2af09d31a5c27c8d5d5a29b03779f4286b8966ce407e6ff692fb942520a9938d69cc70acb06b014b6dfc19834206cf1ac6c448ae6f078025b55f3d827201268a92add9ad178ef76a2989fedc6e39f4ebb9f96c9b8352694fa54fa022019c0ec0012d0d769e2367803f925f175f9fb9cbec4a0c9c1e2c83ea57e6a92a17f555cab934271e72c8cc3215fcb87c20539bf14277b1bfbd6e5880ef953fc75f23c0dd4fcc1e0be340af947de02e877fd5c77dd1df7b414b5c0b40c74956a545a115b0c6993ab233b7e72c822b6b3381bb1fc10875bffe3e2ed1190fa33fc15da083794fcc2c5bf5a07909063cb289a08a2c8a33d343842c2d6a3cfa2a16ca2eafcab7ea100d1c714baabb7149f07e25dee323e780757dfa8016faa7c0626222c365f8f2f6687d1ded234f799cc50d1cd26b4cfa4045917056fc79c3b88b2b1908e372df66dac8734631648349bc37fa34b25fff3b0747b6bc16b94e3e5895e4bbd93d478a6c1f75e4fa30faa922049ed4c50f12f4b312a8974d0fed8d44255dcb2bf0febe47fb3fb8ed9903b5ba4ca18e3cc6762cfa1eaf04dfa944d496e0fe8bb7dc045451396bfaba5485d9d5f391a954c3714253ccd9b19964d4280680720783036b3abfaf2884583ea5bdbcf69d08897ab288314635abb4c2964b71ad9291feb5b61f80e9b0cc07f912a8e5598d5548defe0eea1c448573710aacddb152f93c7c6fd3f7e4ed9f7442a6b900f23c3c544ce5c9ba5f5e92aafd11c9ff5f79c08b9d045fef07970625f62e2f4334a4d664caf7\",\n        \"signature\": \"74cb028dc6b75b37a1daea1cf88465db83a0093fecb22d99ba855e9ab59d05cb22c87d0b09df7c116213baa8f189b2703ff953cd202eb9dea3976ee88f5fa703\"\n    },\n    {\n        \"secret_key\": \"628563aa3ee2fc611bcff78bfb2a75e9fd8780e87a939499a61beaa6a4b71913\",\n        \"public_key\": \"da20616ee4a41c2ebfdc50ab54953b6d387b06c6def75796b08809565c6cf805\",\n        \"message\": \"056fb954fbe6a6014fadac1e1a9f56cc08af37348ebaf6920683384efa47626ccddfead2d5e9e8cfff45f7ac63de63f69d12848ce3c0ef1f530ade430f0afd5d8ecfd9ffd60a79746a2c5beedd3e67249982f8b6092ee2d34047af88a81feab5d52b47d5b3f76c2041725f6f813293050aaa834b01a3a58f69aa4a8ca61f5b746f600f3d452c6282ffdca4429b9338967ba3a7266690aec75ebfbf7be98d999b03eddc7292581b0d69e30a0351a151db70412b0bfd43d3baa9d456cb3e0b4fc19cb09e6cadcb6d3f3be5137cc7a8d3219ec2036ec670ed7ec523b1b1c687b5465307882fe38d7472d0ba87a471868309d2f773ff24c87d39c16b708a4ed9af43f74c8d85cfe8ab5406907e941a14970e209c29ff7ed8a2f935ae41709f270d0d08555ef7af2edfe40df399223c785a43e7f3691589e2ea4c036f11d03d7d1eea14f620035325cf2b33baf386393e8a972a7af6cd9b8543b32e2533d1fcc3177fd96d1e13bf8b68deb222f94497265d3ccb345751bd5b669078081998d608ca5fdc134839d4ed2bebb2952fea5a39c6f033c1558f698ce4946e4f6c08af874f27357f870ebeeb2199976ffaefac951f8e17fe7d0821e1b92a90aa4e9defd3fafda052a444476db1ce38a9e176e841189abd8fecde0fbc5cb55f511f5fde07ea97deb39b7aa8dc84a3946a6cf926d39b95c11af9d64d98b807f4704d0a2bda97dad9881ada1bf6636366e60a522b4821047861c7aae2146a02eef6b25d51371a0f17d24bc187dcdd05d541c2f72201427915a3928cd378689103ac50b33f87a47e8cdfa687a5f0af8a56731dabe662f4f2836de0ba8fafd86a3854bca012d7088a00b9854c2d3c708ddf58faa355a89afc2c80f3f5336da01d72a2771a055813fb35330f7d2e01b1d12daa95ed55d3bdc5df7739cbc3ca097a41b6b2bd7f0ff9dd1d8658983ba3ff7920c15f292a1ef9fcada1c607ecb45d3a73c9ffd42f3e16022fdfe12744926395f74fb3111793fa9281821a66a01d\",\n        \"signed\": \"c9a6aaa9b4e1cce1b58445725f61f552c8fb45831f03482798f01f663e9983db1a82fd33aba3eccb96226426d50ae17cc51274ce18a38860f40b2f82361b5c03056fb954fbe6a6014fadac1e1a9f56cc08af37348ebaf6920683384efa47626ccddfead2d5e9e8cfff45f7ac63de63f69d12848ce3c0ef1f530ade430f0afd5d8ecfd9ffd60a79746a2c5beedd3e67249982f8b6092ee2d34047af88a81feab5d52b47d5b3f76c2041725f6f813293050aaa834b01a3a58f69aa4a8ca61f5b746f600f3d452c6282ffdca4429b9338967ba3a7266690aec75ebfbf7be98d999b03eddc7292581b0d69e30a0351a151db70412b0bfd43d3baa9d456cb3e0b4fc19cb09e6cadcb6d3f3be5137cc7a8d3219ec2036ec670ed7ec523b1b1c687b5465307882fe38d7472d0ba87a471868309d2f773ff24c87d39c16b708a4ed9af43f74c8d85cfe8ab5406907e941a14970e209c29ff7ed8a2f935ae41709f270d0d08555ef7af2edfe40df399223c785a43e7f3691589e2ea4c036f11d03d7d1eea14f620035325cf2b33baf386393e8a972a7af6cd9b8543b32e2533d1fcc3177fd96d1e13bf8b68deb222f94497265d3ccb345751bd5b669078081998d608ca5fdc134839d4ed2bebb2952fea5a39c6f033c1558f698ce4946e4f6c08af874f27357f870ebeeb2199976ffaefac951f8e17fe7d0821e1b92a90aa4e9defd3fafda052a444476db1ce38a9e176e841189abd8fecde0fbc5cb55f511f5fde07ea97deb39b7aa8dc84a3946a6cf926d39b95c11af9d64d98b807f4704d0a2bda97dad9881ada1bf6636366e60a522b4821047861c7aae2146a02eef6b25d51371a0f17d24bc187dcdd05d541c2f72201427915a3928cd378689103ac50b33f87a47e8cdfa687a5f0af8a56731dabe662f4f2836de0ba8fafd86a3854bca012d7088a00b9854c2d3c708ddf58faa355a89afc2c80f3f5336da01d72a2771a055813fb35330f7d2e01b1d12daa95ed55d3bdc5df7739cbc3ca097a41b6b2bd7f0ff9dd1d8658983ba3ff7920c15f292a1ef9fcada1c607ecb45d3a73c9ffd42f3e16022fdfe12744926395f74fb3111793fa9281821a66a01d\",\n        \"signature\": \"c9a6aaa9b4e1cce1b58445725f61f552c8fb45831f03482798f01f663e9983db1a82fd33aba3eccb96226426d50ae17cc51274ce18a38860f40b2f82361b5c03\"\n    },\n    {\n        \"secret_key\": \"9141f79ed30bf600611a13f367b40396f2ec839c5612bbf1e6e497f83954bc88\",\n        \"public_key\": \"f14eda962640becb66c4d1f1a021110251917b8b1d34828298d32145baf6e5d9\",\n        \"message\": \"8fecaa7ae9a3d4a4851a66362b366e167b9f4300fdab205654751987f085de61bec9344aa86f5e5c6477514c2804ced7ac0cd0628529a3a1599236ed67bebe1f2e95aa151fe0f3b3011a1d4be9901cafab2f1891904d4bff0128c1d35ececb322b3cc01dacc5ae3dca6914a7d34da8c9657b950f89d1d6aec3299bb690111071fa87282774943d96a4ab7c3d6de7d1bf119363068cc82d45e4b76454c608bc3566b7f9b385cc7eb38ee429afc2da99669fc5c1be82161a1b0c33f7ba9ad4419d2062971901db003bfa23c44714995cb06bfa966e5023aa9346fd375ae2a1e84084314df3f08ce20800c2c2adfbb81366f6b104243d62d5041e7273433f17581bf93f4c6146fa966f638ab07ea16694a7ce305cc609a6e10623ff7f6c7916b6e4dbdebb7b52eca7f0d5187ff664d7c370ed22886aa2671329d928e0a3bea3b4711a128b9aab90266f8651d220b9cc1cbf5b1ce7265931803690d3291c01ead4dbc3329a97e85c4fe1d356608cc9e60b05bc14838a8608279a0061de28ff7b8e81f59c8a8c5523924c4c485e6ea80ac81750bb0e419efc7858cd4af50c8b8c80650facab4d8258f9cafa0310a007cccbc4185c82fd146df1d811879da3650d5716f1004b71d2c7f2bd6503c354589f8602c950a1f5139f811460752880a341116630e4ff84948e74a9eb350d64d8293002200233f209b17d78897c7ce6ce29e29f82d4ad6c61eb79f5739cb668b21a745555c96e19526845e82c6ed2b1c6bdd6364b8fc79ba9a32dbd3f8b975eb923623958ae0daa4ffa139217c00e021f937e9b791c37991a35e5231a1914c045a787432f97b8e2063db105e14da979c1c4cba785210eb02011334b230cfb6831998ccce25386f4f3ba0dce2006e9c3940b4d5a56aaccdcab02718689816360f18852fd1998a99fce9a04da3f5e23af94c6e8a5badfd39304b9e2a376a1f9bac09a85bd042476e26b58ec73f1236d41ab4b4e7a54def9d66a38f8e546de7b388e1e7d6681e5e2a096f160\",\n        \"signed\": \"cf202d7f2f9ed117f429502b2a5aff54a7f751d2171515a4d203753446df0ebac86984c88bd42bd1fb8dcb408776722a38f32cceb25f32a25d7393f138eedf0a8fecaa7ae9a3d4a4851a66362b366e167b9f4300fdab205654751987f085de61bec9344aa86f5e5c6477514c2804ced7ac0cd0628529a3a1599236ed67bebe1f2e95aa151fe0f3b3011a1d4be9901cafab2f1891904d4bff0128c1d35ececb322b3cc01dacc5ae3dca6914a7d34da8c9657b950f89d1d6aec3299bb690111071fa87282774943d96a4ab7c3d6de7d1bf119363068cc82d45e4b76454c608bc3566b7f9b385cc7eb38ee429afc2da99669fc5c1be82161a1b0c33f7ba9ad4419d2062971901db003bfa23c44714995cb06bfa966e5023aa9346fd375ae2a1e84084314df3f08ce20800c2c2adfbb81366f6b104243d62d5041e7273433f17581bf93f4c6146fa966f638ab07ea16694a7ce305cc609a6e10623ff7f6c7916b6e4dbdebb7b52eca7f0d5187ff664d7c370ed22886aa2671329d928e0a3bea3b4711a128b9aab90266f8651d220b9cc1cbf5b1ce7265931803690d3291c01ead4dbc3329a97e85c4fe1d356608cc9e60b05bc14838a8608279a0061de28ff7b8e81f59c8a8c5523924c4c485e6ea80ac81750bb0e419efc7858cd4af50c8b8c80650facab4d8258f9cafa0310a007cccbc4185c82fd146df1d811879da3650d5716f1004b71d2c7f2bd6503c354589f8602c950a1f5139f811460752880a341116630e4ff84948e74a9eb350d64d8293002200233f209b17d78897c7ce6ce29e29f82d4ad6c61eb79f5739cb668b21a745555c96e19526845e82c6ed2b1c6bdd6364b8fc79ba9a32dbd3f8b975eb923623958ae0daa4ffa139217c00e021f937e9b791c37991a35e5231a1914c045a787432f97b8e2063db105e14da979c1c4cba785210eb02011334b230cfb6831998ccce25386f4f3ba0dce2006e9c3940b4d5a56aaccdcab02718689816360f18852fd1998a99fce9a04da3f5e23af94c6e8a5badfd39304b9e2a376a1f9bac09a85bd042476e26b58ec73f1236d41ab4b4e7a54def9d66a38f8e546de7b388e1e7d6681e5e2a096f160\",\n        \"signature\": \"cf202d7f2f9ed117f429502b2a5aff54a7f751d2171515a4d203753446df0ebac86984c88bd42bd1fb8dcb408776722a38f32cceb25f32a25d7393f138eedf0a\"\n    },\n    {\n        \"secret_key\": \"695c960bbb0dd57ffa36151c85de735154fe5ad5f5fc77d005a0a32011deb30c\",\n        \"public_key\": \"34125e4e21f789ed0e1180c1f6369c721dcae9859b6f7b04f957e51001eede8a\",\n        \"message\": \"3706696c7a906690d0d3b71e7e211c7b067168f3a8f1ed984a0a5e6078597662e4e7889d52db0f78e0d5ef0e5f7a0a0f4263b6848b0725caa4b1cea6987409511c8e5e982d3f5b82bb56a4a7947121937f8e105c5a14b53e6c37cc716b1eba922421828b046f6856c44fabf13a7516c62a5ff98568450cee78b140335047bf1ca77e1549a894feeb078045e4641832253bf695485452ec369065a60029a6c9077a379db20485ea2edb6c969547bb2653289bc6e81ffcb84bdbf773ddea4b3750e9a72395d117f644b0e22061d4f3bb7c5b612e4b70395e0779516b46659116902fd0fbcd2340eea45e9c23db2564a5e11dc79e8f4b332a443ec35aad9604fe791252088295e84f65a307312550d9ebf61f367e4a0f2b5623e53ef6bc132825fc24ebee4ebf338cbfb5df69b32d030d447c44f313ba96fe07bbfe5b0166eaecbc619bb6b2e5924010ba3ec150ff6a69fec4ded9c442f98c15e77f319b4843b3b748b5d26089a76c2b834ff93c413e04ca9550cd211ce2d6a583d782575066db6dd33e8d5e8374355d068a5eb96f8b3da8dddfb5baf5c596daaf556a8f2cb5781e5042327f92ae0621eae088b5f013592e77873a81d7e068d7b8337db9f109a835b475e5caf7cea5af3b4ad6d90baaf1c73655ec676747fcdd41775b4fbe3924c3f41d8a737528d12d6156653a22358c6821426b2c0a33e1634c62c7c8385649bc233e7daf9439f09db9bd11ea01e28b77ecbbc4590e29fdcf0fdde152f6478132fe4c3a5b45a7305af6e381cadd72496e66bbb866cea47f7e7d7e63341600af3f49ce9c9e4e37394df5df71dc10cd391fdcb8a193dc98fc19059fa3ac230ec5476bf94d85556ace6e1ba32421bf59dcbe05c5e15d34c6644e27d0a02be97fa8387ee03706f22a8f4b3b4040ad7d3f8a86971a20a09ec81b7696d834c526b8e51cb97d27643f9abf5e29ffd0333f95de15d110c2064ca49467c14ef227f4babf1a55e7b1cda0429cff256be31cf116719a81b9c5fb75fdf64e\",\n        \"signed\": \"4af41c554d990812686c329a875c41ee24b4a7fd7b3d4f8c8d5275f2e7cb242b258b5858a466de595ce2a2177e351c7f08c7fc4e0bf97ec5fb2dcb8252d2c90a3706696c7a906690d0d3b71e7e211c7b067168f3a8f1ed984a0a5e6078597662e4e7889d52db0f78e0d5ef0e5f7a0a0f4263b6848b0725caa4b1cea6987409511c8e5e982d3f5b82bb56a4a7947121937f8e105c5a14b53e6c37cc716b1eba922421828b046f6856c44fabf13a7516c62a5ff98568450cee78b140335047bf1ca77e1549a894feeb078045e4641832253bf695485452ec369065a60029a6c9077a379db20485ea2edb6c969547bb2653289bc6e81ffcb84bdbf773ddea4b3750e9a72395d117f644b0e22061d4f3bb7c5b612e4b70395e0779516b46659116902fd0fbcd2340eea45e9c23db2564a5e11dc79e8f4b332a443ec35aad9604fe791252088295e84f65a307312550d9ebf61f367e4a0f2b5623e53ef6bc132825fc24ebee4ebf338cbfb5df69b32d030d447c44f313ba96fe07bbfe5b0166eaecbc619bb6b2e5924010ba3ec150ff6a69fec4ded9c442f98c15e77f319b4843b3b748b5d26089a76c2b834ff93c413e04ca9550cd211ce2d6a583d782575066db6dd33e8d5e8374355d068a5eb96f8b3da8dddfb5baf5c596daaf556a8f2cb5781e5042327f92ae0621eae088b5f013592e77873a81d7e068d7b8337db9f109a835b475e5caf7cea5af3b4ad6d90baaf1c73655ec676747fcdd41775b4fbe3924c3f41d8a737528d12d6156653a22358c6821426b2c0a33e1634c62c7c8385649bc233e7daf9439f09db9bd11ea01e28b77ecbbc4590e29fdcf0fdde152f6478132fe4c3a5b45a7305af6e381cadd72496e66bbb866cea47f7e7d7e63341600af3f49ce9c9e4e37394df5df71dc10cd391fdcb8a193dc98fc19059fa3ac230ec5476bf94d85556ace6e1ba32421bf59dcbe05c5e15d34c6644e27d0a02be97fa8387ee03706f22a8f4b3b4040ad7d3f8a86971a20a09ec81b7696d834c526b8e51cb97d27643f9abf5e29ffd0333f95de15d110c2064ca49467c14ef227f4babf1a55e7b1cda0429cff256be31cf116719a81b9c5fb75fdf64e\",\n        \"signature\": \"4af41c554d990812686c329a875c41ee24b4a7fd7b3d4f8c8d5275f2e7cb242b258b5858a466de595ce2a2177e351c7f08c7fc4e0bf97ec5fb2dcb8252d2c90a\"\n    },\n    {\n        \"secret_key\": \"25cb17fc33d2bf8384ae4df20c1fad5c35fd765affde04b5256d4de01ca8de14\",\n        \"public_key\": \"b86ca312fe598520c64be5c72f5b23816507f69e070f828e02d2afcfe11bfa01\",\n        \"message\": \"4b4a71cbf8cbaf57a77d4ea188a6f964840f0d714a5f38a095a13b4e571297a88b792417d16184427f90e043dd8a55b7f1c13e00dfa60516445cbe77068c79c8c35ebeac330c33f1121d05731a8f5132d6480073274641195a75202116fff1c318817178fdd768bbdf105fa069c7a3d143fdf5d17bfad7c0624e5292068fd7bb6d303b4a27cb20a4e61875076787d19fa6f729c94dc0ba9b8c0bfd9866da5cb2e7a2cd2edbdc95ac349e5e5c2172e5a4cf7bd90cabe2c6e2245980bd72d0f6f5479881e8c4c354f68aa72841d0c73b986ba51021203161026ee3d729ddf1a049ffe9eb25439802f03011d144e50b02bd4aca5e5506d32fcf69e32f542544798f4e87f72bdf2433b1ff3259292e1d90812cffd79f6a543270baf24a3c39dd3598e1c661612922522f387d51597692f314c4d5ac4bf1883a614636336a5544d59ff41d1e0dbcf8e6627e7c8085646322dfc20c332cbdf35370d47dcabb802e17ca84780eec661c904d5bfbc240ad6a14a7533f71a27500c61dd3e473983887a86835187abb0df08fa62cda69dce86e21fa5ae954c22eddb60ee3131504a69b50486a17767091883760638a29c38030e1e05fdb28e158633010385a620613cc10d5a5f350955f4a347c65edddb7e25159da8dcc2655928ad6f6d8c4c1abb817d7fef3bae5de0402eddee7b51521ce280a66b796140f56af9bc20e465875ce2628a8a10477ce9b2eacc7d86f88272457bfd443e712526996254380f0135227e9fc151c8695e9cc64d272b256ab95c9a9f568e93716e0e53d29882e3ce74261257a02cd497c37d764d90f7fd478a17a890a8b2ea61ab81f6869b120a2f6484a88c151953391eca445015377b3a5dffe4cfbacfb5bab2c47f654f72a9d19cbc4d29537198405e3a04b4bfe11bcdb5c1f30d9ac02f54849c57aa96f7b56636116f2bb6f2583d9af94c86aff5c137f63ce54e8f0c21b6c25c1f0472a229c90817e6162eac71ccda309a1643bd6312a5263a2efe646dffe79ebd8157a28\",\n        \"signed\": \"8ccb0dbcf7cc03e83e21c57474afd3ad8898097b972ede175acaae48e3ec17b2db06fc82776b0751c0f956fd7196f3d1c96321a6cf3d892415d8f8eeb4a141084b4a71cbf8cbaf57a77d4ea188a6f964840f0d714a5f38a095a13b4e571297a88b792417d16184427f90e043dd8a55b7f1c13e00dfa60516445cbe77068c79c8c35ebeac330c33f1121d05731a8f5132d6480073274641195a75202116fff1c318817178fdd768bbdf105fa069c7a3d143fdf5d17bfad7c0624e5292068fd7bb6d303b4a27cb20a4e61875076787d19fa6f729c94dc0ba9b8c0bfd9866da5cb2e7a2cd2edbdc95ac349e5e5c2172e5a4cf7bd90cabe2c6e2245980bd72d0f6f5479881e8c4c354f68aa72841d0c73b986ba51021203161026ee3d729ddf1a049ffe9eb25439802f03011d144e50b02bd4aca5e5506d32fcf69e32f542544798f4e87f72bdf2433b1ff3259292e1d90812cffd79f6a543270baf24a3c39dd3598e1c661612922522f387d51597692f314c4d5ac4bf1883a614636336a5544d59ff41d1e0dbcf8e6627e7c8085646322dfc20c332cbdf35370d47dcabb802e17ca84780eec661c904d5bfbc240ad6a14a7533f71a27500c61dd3e473983887a86835187abb0df08fa62cda69dce86e21fa5ae954c22eddb60ee3131504a69b50486a17767091883760638a29c38030e1e05fdb28e158633010385a620613cc10d5a5f350955f4a347c65edddb7e25159da8dcc2655928ad6f6d8c4c1abb817d7fef3bae5de0402eddee7b51521ce280a66b796140f56af9bc20e465875ce2628a8a10477ce9b2eacc7d86f88272457bfd443e712526996254380f0135227e9fc151c8695e9cc64d272b256ab95c9a9f568e93716e0e53d29882e3ce74261257a02cd497c37d764d90f7fd478a17a890a8b2ea61ab81f6869b120a2f6484a88c151953391eca445015377b3a5dffe4cfbacfb5bab2c47f654f72a9d19cbc4d29537198405e3a04b4bfe11bcdb5c1f30d9ac02f54849c57aa96f7b56636116f2bb6f2583d9af94c86aff5c137f63ce54e8f0c21b6c25c1f0472a229c90817e6162eac71ccda309a1643bd6312a5263a2efe646dffe79ebd8157a28\",\n        \"signature\": \"8ccb0dbcf7cc03e83e21c57474afd3ad8898097b972ede175acaae48e3ec17b2db06fc82776b0751c0f956fd7196f3d1c96321a6cf3d892415d8f8eeb4a14108\"\n    },\n    {\n        \"secret_key\": \"49e24d1699833726b18c78ea6568401a971e1ca39dd06d7563ac8b4250d4a9f5\",\n        \"public_key\": \"71cf05e90d301a6d9fad7f0b38ec8bb044fcfd97c849b04c003625de29be86bb\",\n        \"message\": \"6d2605f61e1a04b6ae18c2c25ae100dd42a61e664e2db5c34d7ad1f84ac507552b741c2086c17c852babe07a91e129a506ee59edb9ce73be1b1d06d120ec36a1e94c6281054e78ceb1bdeffbcbf4f01051ed381bfc8ad1769f41e240bf6059d9704cacec666611f41e4dd438b7f50242ea86756bb1f81e5942c092129fbc6de4955d28dff35237db30e4a5036a9914c9f84dbd8ccf82ba2b1b3b5554a2b7a74cb0b2a1e1963345286e258dc8e7d56718035f95f313811cfbd852a0f8f49a29ef933e7cda7ed9c7e8b162cdba1a82262cd4df7cf8ea4b586db43dcc1e3764598e9ca46673822baa2ad87fb14b6fdb9e2032d0ca51c26c5ef3d9f79785fac2491cdbf7c399f3cd1774c1a6b1e4a67f5436d80db025f8fb6409e275bd0ed508b5e039ed2e4eec8b0f4d5be99dcafa6a1401252732a65b37c943c07ef3acbcfbb3dc06dad0a88f2f5eb551a3997ad6c6eed95edd9a0af4a288d5e43286b2ac072977c436b7c5ff7ab61c9484f257f58e010c9b6ad41581d742cd19752cde54d2b420d643654e9096a81eb9dcf804c7c2ed0e38d13a5ce39978cdd02b25350945de78feecc0c2c22ffd705c3ba8113265c7b9a7c8ddb59178bd21d7f6c31c6be2c36749ee0f9ab8bc1dcf5da5cb2d2d5962358f71f96ab3792a252a519e415351f43e7e12035b0328f28208cf4be529d299aa5c128c9d5ed575bf90c5350569eaa6f2d5521de1180309f686c97e9ad6fa1ec1dd8627ae8951581cf604b8b917c5ba434a637be1bc8b79f4acaf7795f4e51aabdb885077bc4f3c68fc3318de5823d7e0804ee995b70387950f799353682300d4e797f3cad611b4c562c8640ff2b3fe292916a970fb98c1475c1f4e27b9b33cfe0d3ad932a1ebe6a27fc3b446622954aee1683668c8bd4a3f903be5c77dfdb8e8914cedc51f65fed2d9c4d03e13a668d4c7ea5e31883e1b3db64363e2ac5cc54b54ce69c6ad52f874999b5dd2c5782f03c3d51505df536a1fe0d860d33eabed641a940089f1297dd0f57f\",\n        \"signed\": \"a0b6a2af15b6be9e951ef3f32cbd1c6702e8e017fbd315a3f2599c3f1a11865d46e78459a0d7f7be046aae293cad09137ec847e26928106d9aa35e0982b992026d2605f61e1a04b6ae18c2c25ae100dd42a61e664e2db5c34d7ad1f84ac507552b741c2086c17c852babe07a91e129a506ee59edb9ce73be1b1d06d120ec36a1e94c6281054e78ceb1bdeffbcbf4f01051ed381bfc8ad1769f41e240bf6059d9704cacec666611f41e4dd438b7f50242ea86756bb1f81e5942c092129fbc6de4955d28dff35237db30e4a5036a9914c9f84dbd8ccf82ba2b1b3b5554a2b7a74cb0b2a1e1963345286e258dc8e7d56718035f95f313811cfbd852a0f8f49a29ef933e7cda7ed9c7e8b162cdba1a82262cd4df7cf8ea4b586db43dcc1e3764598e9ca46673822baa2ad87fb14b6fdb9e2032d0ca51c26c5ef3d9f79785fac2491cdbf7c399f3cd1774c1a6b1e4a67f5436d80db025f8fb6409e275bd0ed508b5e039ed2e4eec8b0f4d5be99dcafa6a1401252732a65b37c943c07ef3acbcfbb3dc06dad0a88f2f5eb551a3997ad6c6eed95edd9a0af4a288d5e43286b2ac072977c436b7c5ff7ab61c9484f257f58e010c9b6ad41581d742cd19752cde54d2b420d643654e9096a81eb9dcf804c7c2ed0e38d13a5ce39978cdd02b25350945de78feecc0c2c22ffd705c3ba8113265c7b9a7c8ddb59178bd21d7f6c31c6be2c36749ee0f9ab8bc1dcf5da5cb2d2d5962358f71f96ab3792a252a519e415351f43e7e12035b0328f28208cf4be529d299aa5c128c9d5ed575bf90c5350569eaa6f2d5521de1180309f686c97e9ad6fa1ec1dd8627ae8951581cf604b8b917c5ba434a637be1bc8b79f4acaf7795f4e51aabdb885077bc4f3c68fc3318de5823d7e0804ee995b70387950f799353682300d4e797f3cad611b4c562c8640ff2b3fe292916a970fb98c1475c1f4e27b9b33cfe0d3ad932a1ebe6a27fc3b446622954aee1683668c8bd4a3f903be5c77dfdb8e8914cedc51f65fed2d9c4d03e13a668d4c7ea5e31883e1b3db64363e2ac5cc54b54ce69c6ad52f874999b5dd2c5782f03c3d51505df536a1fe0d860d33eabed641a940089f1297dd0f57f\",\n        \"signature\": \"a0b6a2af15b6be9e951ef3f32cbd1c6702e8e017fbd315a3f2599c3f1a11865d46e78459a0d7f7be046aae293cad09137ec847e26928106d9aa35e0982b99202\"\n    },\n    {\n        \"secret_key\": \"f8ff97032a34cf9999088058af56ff70b6acb2edf759e131faec8440fdecf6c4\",\n        \"public_key\": \"5438b4e33f1c5ea112fb1bafef4059bf095a11409b64d46bfb4d25473c1c0874\",\n        \"message\": \"dfb41fb9d53702cb2b9e3ffcad4ea602716f718a7ea33e21843e2a6c052c70c6c51485d72b53a5bb4e34e03e3e1d1a52518eb3e7f18f2a1e1caf78acb2116089bed4c617138e716a91431f2cf644a1210f6d1920d285994264d6466b0d8d2c62638044616f576edc7d0d93cb660131d4bb50875e153640123a96f15b75a5bcee46d5cc5eb1a431c59d2eaddfd5531502feb1551bf7791cd5989d17d10296d01ba3ae3e384c674526cab62a7c24c0ff677de71ca172621a28a85e01eefe07f6eef9c3ecfd7f9498ac42f46a43716f615318a3b28757c3a15f4f1c3822ae7a75c203a298258d753638cf425e15bbc46202b093b8e4f3e670fbb663db2b69c8fb0f625074d85a44d350e042bb1b74021d192997a2c27dd6c8634841d100a0344baed750a39ff5dcd9848dfcf09e5c8c47967b96556e2332ca17d8e42dd8f393a5445a372244600b3001b8fe86c45eafc6e738aa7e117b4a79fa2e6b00f464928d1856c83ecfe87dd34d158f5cb4e4f4d610f59717ec790bd3ff872040b67e8d3939e804e3b5db985a095621cbccd686c0934ece3e27ab2c6ce33fb52b111f48e4f274bdf320d0b02384c83c49e1a041bd2319109c85a06d8048a993357abfd811ac2f38059d077acbc36aa966c028903748625f92e8f79d51bda10f78522977f76ec4e885e49a46c68de09f3da8f86b71ae6423bd29deef1cc6a113eac115a6cde2ccd011fc1c0f0e3427f43c3e96fc4156edf62ddfb7b0836b888bab3c4345055a6c4178e9e22829fd8cfce39b0b8444eb26487cc9dc82606feaadaf4978694e6564f2729c1b13ab37c9072db4e9de940ee5f1d05884ae7fd9d9ec9cb7de56347600a88dea9208a63419fce29ee50055a374a8f22f9ae2be9805a9f47615aa59576b44042ff126a89824e36ad6bc58e06bb90fbeefbae5d6d7d62430f373b6296fbfcd4d6620168353583fbd3d5a292b9572517534e2fb0beef2fa98a464e59103e7a04287f15dad0fac54970e7715078d63ec26362f6fbabcddeaf7\",\n        \"signed\": \"509e9eadfe8dde7914ac20cafc0b0af22b84dd8a210a4812cd8cae39b0a272e53e02246dc8939e9226920336e140b31532d068137a34161e599a8694a95ddf01dfb41fb9d53702cb2b9e3ffcad4ea602716f718a7ea33e21843e2a6c052c70c6c51485d72b53a5bb4e34e03e3e1d1a52518eb3e7f18f2a1e1caf78acb2116089bed4c617138e716a91431f2cf644a1210f6d1920d285994264d6466b0d8d2c62638044616f576edc7d0d93cb660131d4bb50875e153640123a96f15b75a5bcee46d5cc5eb1a431c59d2eaddfd5531502feb1551bf7791cd5989d17d10296d01ba3ae3e384c674526cab62a7c24c0ff677de71ca172621a28a85e01eefe07f6eef9c3ecfd7f9498ac42f46a43716f615318a3b28757c3a15f4f1c3822ae7a75c203a298258d753638cf425e15bbc46202b093b8e4f3e670fbb663db2b69c8fb0f625074d85a44d350e042bb1b74021d192997a2c27dd6c8634841d100a0344baed750a39ff5dcd9848dfcf09e5c8c47967b96556e2332ca17d8e42dd8f393a5445a372244600b3001b8fe86c45eafc6e738aa7e117b4a79fa2e6b00f464928d1856c83ecfe87dd34d158f5cb4e4f4d610f59717ec790bd3ff872040b67e8d3939e804e3b5db985a095621cbccd686c0934ece3e27ab2c6ce33fb52b111f48e4f274bdf320d0b02384c83c49e1a041bd2319109c85a06d8048a993357abfd811ac2f38059d077acbc36aa966c028903748625f92e8f79d51bda10f78522977f76ec4e885e49a46c68de09f3da8f86b71ae6423bd29deef1cc6a113eac115a6cde2ccd011fc1c0f0e3427f43c3e96fc4156edf62ddfb7b0836b888bab3c4345055a6c4178e9e22829fd8cfce39b0b8444eb26487cc9dc82606feaadaf4978694e6564f2729c1b13ab37c9072db4e9de940ee5f1d05884ae7fd9d9ec9cb7de56347600a88dea9208a63419fce29ee50055a374a8f22f9ae2be9805a9f47615aa59576b44042ff126a89824e36ad6bc58e06bb90fbeefbae5d6d7d62430f373b6296fbfcd4d6620168353583fbd3d5a292b9572517534e2fb0beef2fa98a464e59103e7a04287f15dad0fac54970e7715078d63ec26362f6fbabcddeaf7\",\n        \"signature\": \"509e9eadfe8dde7914ac20cafc0b0af22b84dd8a210a4812cd8cae39b0a272e53e02246dc8939e9226920336e140b31532d068137a34161e599a8694a95ddf01\"\n    },\n    {\n        \"secret_key\": \"2e4c39219fc92a538e48e95fbfcfef30f5a21b78940b81053bdad4602b4c9690\",\n        \"public_key\": \"f8eed892176620434c7f0ec53dcff39863109e7ca4d0b3c6c4b56410be01e537\",\n        \"message\": \"c87d1fba9d94a6a5408980fc8083980fd2d252fae540f6eec19ed6746c29e339a1c29f6f53bc23fd6bfa438507eff5daf903403cda707b4dc5e844805d6b1ceb4afff4b232e8e69d7d271f3c067c4854f3d94f27fe325581faca79d1f02a26290ad23af71100c12c09157647ca9da43d7690ddcd94db65e000989c878b75a0ff22d2c70962594c9b0808f27846ccac8567bce5d2e3b7602809f23b59cd718a0805d108f31a632a05b8dfa5035ab9461aeba416009d74fdf9e007202856890d2cff80fa240b978a48270fcb2f473697bcba8e730a55c28761919a23be41da27ffea09e3559caaabf9519ec08e1ffa86817aa3e8874fa816e7718c5b2f344967ba1bc2819c4f045a97b40544ea61d717083ccaf11e9ddc04a3598ef181e7bef4acef45b6551b478a0d7731c4f08ce5802f78258d419017661076d7d6d2ef39e57cf9cd9397dcc5debf64ab82b66159f578316e74cd49f5ad2c6fef83cf08683b9570a946ad4903df4e96ec008e14a501fa9386bdaf2a63993c6c9bdf231fd09ea6f96ef4d4e29a3a3327cbf74ea831054e66ca86680c6ce53b66f9465d06b3fa0798bb6905ae38455934f2fb7e0ba472328989f001308671cccb566d222c72165bb3a744fb98e2210f9620680df3e3cd14a8bd94b5745c0016dda77f059f26053b64cf4523c3d429112fb6b328398bc630a2e906b95a6c5780cfdc0641be4751bebddf7724dc9c27e78d60ed0fd736d5abd88929c1795d473abd2b0320c540475728821867a409a2ff13cc44ce35e5981e9f6b87a28d4fa8b8675e503faefca7c1d7984737871fe919ac414eea265ee31f9f78f521f3f4f8d00c3fb79171f3c6a5dbf5e1ac8bf63b4c3d8d8bc121036e9e55bb702ea6c86e925ec0b984ded2c71f3bfd4932e6c41b582fd02ca59f53ce297445785cc4cac247b0b84e7fa0bcdcf79b3e4a155f9878c1f643be9c42f7a4f27260444505c1845bd53b550a31d7953cc738861f46bdf4870f3a77ace191abd63c45adb153909fb59ab5db9b\",\n        \"signed\": \"394520122bb0a564648a7a8bc8dc73636c517746a3c8a05b901e7252fef0e5023d90991e311b5382d49100e52633c70fe9c26c1450e0603e6d452299af4dae07c87d1fba9d94a6a5408980fc8083980fd2d252fae540f6eec19ed6746c29e339a1c29f6f53bc23fd6bfa438507eff5daf903403cda707b4dc5e844805d6b1ceb4afff4b232e8e69d7d271f3c067c4854f3d94f27fe325581faca79d1f02a26290ad23af71100c12c09157647ca9da43d7690ddcd94db65e000989c878b75a0ff22d2c70962594c9b0808f27846ccac8567bce5d2e3b7602809f23b59cd718a0805d108f31a632a05b8dfa5035ab9461aeba416009d74fdf9e007202856890d2cff80fa240b978a48270fcb2f473697bcba8e730a55c28761919a23be41da27ffea09e3559caaabf9519ec08e1ffa86817aa3e8874fa816e7718c5b2f344967ba1bc2819c4f045a97b40544ea61d717083ccaf11e9ddc04a3598ef181e7bef4acef45b6551b478a0d7731c4f08ce5802f78258d419017661076d7d6d2ef39e57cf9cd9397dcc5debf64ab82b66159f578316e74cd49f5ad2c6fef83cf08683b9570a946ad4903df4e96ec008e14a501fa9386bdaf2a63993c6c9bdf231fd09ea6f96ef4d4e29a3a3327cbf74ea831054e66ca86680c6ce53b66f9465d06b3fa0798bb6905ae38455934f2fb7e0ba472328989f001308671cccb566d222c72165bb3a744fb98e2210f9620680df3e3cd14a8bd94b5745c0016dda77f059f26053b64cf4523c3d429112fb6b328398bc630a2e906b95a6c5780cfdc0641be4751bebddf7724dc9c27e78d60ed0fd736d5abd88929c1795d473abd2b0320c540475728821867a409a2ff13cc44ce35e5981e9f6b87a28d4fa8b8675e503faefca7c1d7984737871fe919ac414eea265ee31f9f78f521f3f4f8d00c3fb79171f3c6a5dbf5e1ac8bf63b4c3d8d8bc121036e9e55bb702ea6c86e925ec0b984ded2c71f3bfd4932e6c41b582fd02ca59f53ce297445785cc4cac247b0b84e7fa0bcdcf79b3e4a155f9878c1f643be9c42f7a4f27260444505c1845bd53b550a31d7953cc738861f46bdf4870f3a77ace191abd63c45adb153909fb59ab5db9b\",\n        \"signature\": \"394520122bb0a564648a7a8bc8dc73636c517746a3c8a05b901e7252fef0e5023d90991e311b5382d49100e52633c70fe9c26c1450e0603e6d452299af4dae07\"\n    },\n    {\n        \"secret_key\": \"f092e6be8d2d9ad069a3e2b976d244e34c15c28c48d32f5560a54185d1501502\",\n        \"public_key\": \"cfeb3e74e4b5c8356a81757b8f1be4b429fc18fcaf497cbf8d8bc0480ff978f9\",\n        \"message\": \"2c255fb25d45b086c071e03e525b4d728578fbb6b0c60da941e6bf2a4898b2d5b6988c53302785ab7a3bc4bb2c205acd27d6a4cbdd1a0c0889ded784264cb7c02889c5c7113fc90bbbcd31ff001432c053f971073cf6712f667fce4698776b98cc5444c692abd1288198be5ad5674609f7e139ad1b9ccb943f8dfd9d12c54ecee278341b2ee1277991ca62cd3bfe128d1392964e9588e2f97c321704a3de106188c5eb335aa5a19acc9067b4a94129b9d1a6167c4bbfb56fb97684cbbd720c86869e0020ab0776cdc9954feba862124b073fba8de9ea9a38eacfa003ae4f1cdcbf15c32fb6b970c73115ddffcd4fa3b71846110edec257fcaed6113604f7192572577264b9905ca6aed8daec138403ca41aa954278a5720b267b90ca163a9bdf447eade8deb769a3b49237a73516977c28734555dd234ca7de4999261bc7960f536ba8a35ad3d02c75f1c2bea0a0612e7d49c40397dd6af5ff58bae6a64b6a77e981f92d159e0b2bd205ab157052f47017a3e18aec944d0465ee0017e96148a6129f74d3ccb489fea13a15a9b9aced58c6ee0e6e84e05fdadfae07b334a98fc37f7e511cd5a44e9c74e478d349e30e29aeb46a4df01e4307fe65e1394a758f6ada2fb120225ccd50a49013e6c9f175af90f3fc8c57e7a6a969a916c3f1aacc22f3e01a070cc48e6fd878e2bd073df9ee6f059b98568404fc7eae7d4bf6fa16c0c803c6be84e8b79c67affc8c88cabdeebc1134bb2386e22ba4d2e9e0f3e1ab3a0dac7c80ddeed773cda0c41dc9defa67fea37769cb4a1e1522d7e0b3d7c4638bcd983153d478be5ecf2b6ab1b40124e4222b8caa4647bd50d74d203943ab20938d5f27d908a673674046ce2ef18e858b0a01a7e7530ded0f8cc89ef09b73ca597cf73afbc9a271a4d23c92fe591883c440109c4ef416670b7f2c5905b77f65f56d09d40250356f9b1dbcaf1ee2c0b63696f84d68ddbea160085151a9526274d7b846cceb6c4348098484de3bb723ae5e85276df49f5634130ff905754f\",\n        \"signed\": \"63cd4c0ba3be9397cc0f3c1af348ec4b8a91e42fee675da1d05900b9a86c138f9174eb996bbdf31c4295e0c578ac0f9d537641a2afd5dff93a39c5cd9d3c480b2c255fb25d45b086c071e03e525b4d728578fbb6b0c60da941e6bf2a4898b2d5b6988c53302785ab7a3bc4bb2c205acd27d6a4cbdd1a0c0889ded784264cb7c02889c5c7113fc90bbbcd31ff001432c053f971073cf6712f667fce4698776b98cc5444c692abd1288198be5ad5674609f7e139ad1b9ccb943f8dfd9d12c54ecee278341b2ee1277991ca62cd3bfe128d1392964e9588e2f97c321704a3de106188c5eb335aa5a19acc9067b4a94129b9d1a6167c4bbfb56fb97684cbbd720c86869e0020ab0776cdc9954feba862124b073fba8de9ea9a38eacfa003ae4f1cdcbf15c32fb6b970c73115ddffcd4fa3b71846110edec257fcaed6113604f7192572577264b9905ca6aed8daec138403ca41aa954278a5720b267b90ca163a9bdf447eade8deb769a3b49237a73516977c28734555dd234ca7de4999261bc7960f536ba8a35ad3d02c75f1c2bea0a0612e7d49c40397dd6af5ff58bae6a64b6a77e981f92d159e0b2bd205ab157052f47017a3e18aec944d0465ee0017e96148a6129f74d3ccb489fea13a15a9b9aced58c6ee0e6e84e05fdadfae07b334a98fc37f7e511cd5a44e9c74e478d349e30e29aeb46a4df01e4307fe65e1394a758f6ada2fb120225ccd50a49013e6c9f175af90f3fc8c57e7a6a969a916c3f1aacc22f3e01a070cc48e6fd878e2bd073df9ee6f059b98568404fc7eae7d4bf6fa16c0c803c6be84e8b79c67affc8c88cabdeebc1134bb2386e22ba4d2e9e0f3e1ab3a0dac7c80ddeed773cda0c41dc9defa67fea37769cb4a1e1522d7e0b3d7c4638bcd983153d478be5ecf2b6ab1b40124e4222b8caa4647bd50d74d203943ab20938d5f27d908a673674046ce2ef18e858b0a01a7e7530ded0f8cc89ef09b73ca597cf73afbc9a271a4d23c92fe591883c440109c4ef416670b7f2c5905b77f65f56d09d40250356f9b1dbcaf1ee2c0b63696f84d68ddbea160085151a9526274d7b846cceb6c4348098484de3bb723ae5e85276df49f5634130ff905754f\",\n        \"signature\": \"63cd4c0ba3be9397cc0f3c1af348ec4b8a91e42fee675da1d05900b9a86c138f9174eb996bbdf31c4295e0c578ac0f9d537641a2afd5dff93a39c5cd9d3c480b\"\n    },\n    {\n        \"secret_key\": \"01a247943afe83f036b6b60f23d97774fd23208edc31cf3d8820e9dc63661103\",\n        \"public_key\": \"8c97a58be0e847c48a6a3987cfe250a8d7b07d97f961f6b7b79e7d8042b8bd7b\",\n        \"message\": \"08d81495da77f407255cc41a818eefa727e2c47ae411f4b541f01f811d906d55fb1e3c9c484df30565364de9dcb9fea0af66112fe75fd11ae81d2641b547589f8b974a97e7976ed692aad640edd288bd863d11c4ca9836f9d7c115c3d98830d64247cb6f8fb603c6981133552a3204041961bdd83e2f9deba770c0394f9b602a453551074921a3de28321369d7f8ca640c45109e8f522c97ed9f35b9277a350e295931b42e0135e94a92fed363d6cae392f7c45199327e24b4cfa5898ab599ae7bd50bd3a00c0d007e95faf8f2ae103802ca7e53b279184d06905f5748ca8be1f72e668cb83283dd00406491f8b9b4e5a9d4a5438b2fa4371e0b05686f87575baa796e302f08ffc425662750a33a0c9cfaa4b4d7041f9264fed7be4f9fde2cac68a2158236f6ac43047e911f4c4e8bc663fdd50517dfaa8fbcd219dd7a0e9369f43d0dd25b4f0cf930f20b7b7c6db9d5be0c6e1960941a3e04d141c03e5961aa33e9024477d533c995378796bf2292ade922695b14569fc339b3d9085c63fc6e5bef4d990c80333a6b57af478f938e3ee738b1d129bd976afe686128bcac08ccbeb0349b9b537313bc7bf591c65d4a7123ad30bdbe1486b428084748b6507f6f5ef67c26ca862cf726aac140b861ae0dc74bb3c0b489789f17145e9a855a3e2b5daac418d8353733239ef69c7b565b5303eb87bd7f649abf40a2f135a29ed27e3be4c12cd6ddd2e5418a99974383663f5849bf3ce5532bf64a80aa521191d25390bc19a45eed1d3feca1d9fcc0db031bfb48e450be3d4593356d5ba0f31047b457745f21e32ebea3ca6c35f05d78d8c31640b0fecb9401165675c7f9cbb19bc4b5677c2ccedc4e7aafb84184c19199aca0db21cf5067dc3af769bcc629355ff7257a9efd71a6a92d130d35abee6e70605b5cab93c028fac3aa2344ba861ac1e8ce9a4b070c3df740d28c5ece0f1bc31c2d7d1e5ecc76104480939133a18660e4a3e4846b2517be3b8e7afafe078391d8aa8e5c30137e85d94d64a279fbee\",\n        \"signed\": \"ed2ced1a4fddb3442a637348179a6a5beedcb44c8e988ca26f78936d2c8db5c516d54b8c4f08d91dd7042ab6ab26d87f230eb2b2156f3ce2994fce7c2b0f100e08d81495da77f407255cc41a818eefa727e2c47ae411f4b541f01f811d906d55fb1e3c9c484df30565364de9dcb9fea0af66112fe75fd11ae81d2641b547589f8b974a97e7976ed692aad640edd288bd863d11c4ca9836f9d7c115c3d98830d64247cb6f8fb603c6981133552a3204041961bdd83e2f9deba770c0394f9b602a453551074921a3de28321369d7f8ca640c45109e8f522c97ed9f35b9277a350e295931b42e0135e94a92fed363d6cae392f7c45199327e24b4cfa5898ab599ae7bd50bd3a00c0d007e95faf8f2ae103802ca7e53b279184d06905f5748ca8be1f72e668cb83283dd00406491f8b9b4e5a9d4a5438b2fa4371e0b05686f87575baa796e302f08ffc425662750a33a0c9cfaa4b4d7041f9264fed7be4f9fde2cac68a2158236f6ac43047e911f4c4e8bc663fdd50517dfaa8fbcd219dd7a0e9369f43d0dd25b4f0cf930f20b7b7c6db9d5be0c6e1960941a3e04d141c03e5961aa33e9024477d533c995378796bf2292ade922695b14569fc339b3d9085c63fc6e5bef4d990c80333a6b57af478f938e3ee738b1d129bd976afe686128bcac08ccbeb0349b9b537313bc7bf591c65d4a7123ad30bdbe1486b428084748b6507f6f5ef67c26ca862cf726aac140b861ae0dc74bb3c0b489789f17145e9a855a3e2b5daac418d8353733239ef69c7b565b5303eb87bd7f649abf40a2f135a29ed27e3be4c12cd6ddd2e5418a99974383663f5849bf3ce5532bf64a80aa521191d25390bc19a45eed1d3feca1d9fcc0db031bfb48e450be3d4593356d5ba0f31047b457745f21e32ebea3ca6c35f05d78d8c31640b0fecb9401165675c7f9cbb19bc4b5677c2ccedc4e7aafb84184c19199aca0db21cf5067dc3af769bcc629355ff7257a9efd71a6a92d130d35abee6e70605b5cab93c028fac3aa2344ba861ac1e8ce9a4b070c3df740d28c5ece0f1bc31c2d7d1e5ecc76104480939133a18660e4a3e4846b2517be3b8e7afafe078391d8aa8e5c30137e85d94d64a279fbee\",\n        \"signature\": \"ed2ced1a4fddb3442a637348179a6a5beedcb44c8e988ca26f78936d2c8db5c516d54b8c4f08d91dd7042ab6ab26d87f230eb2b2156f3ce2994fce7c2b0f100e\"\n    },\n    {\n        \"secret_key\": \"91fdefcdbc990d3e8eeb60170434da10831b03081f6afd0d7e12b10011e02aef\",\n        \"public_key\": \"c58d3e20b8d47ba455b912572dc840815e3d885fa5917d1da48408b9a9564098\",\n        \"message\": \"5b0c1a3a95e0ba7474766c9badfae34ab860e0a6c033a22fba721127f5bbeee8e2cbde1a1dfeb18d551c95994d21e3ebc68afae685444a3a4195bc755538903acfa6715592dde256e7a1b4c363eca71ef0f3a48ae3442d50d5661b394096b7ec27bbf52953f3040cd25b78ce475527e0cc59f1ef9ae2e0590431582b2df8141499829a2c5f7bbe3598e4c96cc01ede2f43b65605b488593709c094b5a042b28555fb5227a6d156376f3ff07bd5c8bc6804d39a3282ac5970ba08aebf7542b845f6b5c238c2ce20443f7f7755d75fe4fa16b9644ca3e21d91a9a87c686115748a16c0ae4ae4e16d1c71ae600b39cd25e5633b399fee7ff2e362bed25125c6fd5c7f5ffa2da2353fd35b784a1b1b0319774758b7390c44dcc92fca4201dfe1a37569de05f0664d08b90d6e2badc21b92f9ce872142357b9615080ab7659a246ff0852adb17dfda70cf1754157b13bc032b4c5deb8e1068b4692b93165da35efc9da86acbe6f80f01bbc26f575ec5af5b050e9828afde6c3b78e733eb5a912492f765bcad731b95e3ab8896b61758bf913b9a1568f9c5b46033cf45dcc1750da2066c608dc3d343738e848dc390cd474432e991d7aa2c5b2781421efe55e36b0b42c1f49ae277480b0fc5ff685bb5a31be3a0fa44823816077037548a5c9b0e1cc6c63504a407579a3632b3c96fcd0de5ea1e4d6e87c0caf7b6cae3120db8b1f4615ce6a75a81654f390428b64c213e727eec3ae7f9f42db906f4de1fdadd34a3da2aeb12b4d9a185f4a60cb0c26745f530b481fc976a093ce24a30916af605ee94b08785193a949d569c4b7ef59603bb624360e7b408d98ca509daf5a92a6d4015bdb6f97ad4ff0cf05c8f0cd5476a934426a059f2444446e5864f089e0f0675615910662d7c1e79a6c75fa314b7ba2c643b0d37653eefe593172d1d332c8dd64492eaf104fb1957baa52049442d10b56af8eae8ff82cd8f46a0494bec2fcb9fadf10cf71a6eecd0547dafdc7adbaa4503783f943a46b4ad0e6dd7f2cab55617\",\n        \"signed\": \"510112223b33a5ab1564f7537191cd292a9dbd5a323d7add0584c1b0ad00d0ac7199c3fb758e913ff3d716c2e90dd90d4e8f59951e87ef8b78214a5175c4e6085b0c1a3a95e0ba7474766c9badfae34ab860e0a6c033a22fba721127f5bbeee8e2cbde1a1dfeb18d551c95994d21e3ebc68afae685444a3a4195bc755538903acfa6715592dde256e7a1b4c363eca71ef0f3a48ae3442d50d5661b394096b7ec27bbf52953f3040cd25b78ce475527e0cc59f1ef9ae2e0590431582b2df8141499829a2c5f7bbe3598e4c96cc01ede2f43b65605b488593709c094b5a042b28555fb5227a6d156376f3ff07bd5c8bc6804d39a3282ac5970ba08aebf7542b845f6b5c238c2ce20443f7f7755d75fe4fa16b9644ca3e21d91a9a87c686115748a16c0ae4ae4e16d1c71ae600b39cd25e5633b399fee7ff2e362bed25125c6fd5c7f5ffa2da2353fd35b784a1b1b0319774758b7390c44dcc92fca4201dfe1a37569de05f0664d08b90d6e2badc21b92f9ce872142357b9615080ab7659a246ff0852adb17dfda70cf1754157b13bc032b4c5deb8e1068b4692b93165da35efc9da86acbe6f80f01bbc26f575ec5af5b050e9828afde6c3b78e733eb5a912492f765bcad731b95e3ab8896b61758bf913b9a1568f9c5b46033cf45dcc1750da2066c608dc3d343738e848dc390cd474432e991d7aa2c5b2781421efe55e36b0b42c1f49ae277480b0fc5ff685bb5a31be3a0fa44823816077037548a5c9b0e1cc6c63504a407579a3632b3c96fcd0de5ea1e4d6e87c0caf7b6cae3120db8b1f4615ce6a75a81654f390428b64c213e727eec3ae7f9f42db906f4de1fdadd34a3da2aeb12b4d9a185f4a60cb0c26745f530b481fc976a093ce24a30916af605ee94b08785193a949d569c4b7ef59603bb624360e7b408d98ca509daf5a92a6d4015bdb6f97ad4ff0cf05c8f0cd5476a934426a059f2444446e5864f089e0f0675615910662d7c1e79a6c75fa314b7ba2c643b0d37653eefe593172d1d332c8dd64492eaf104fb1957baa52049442d10b56af8eae8ff82cd8f46a0494bec2fcb9fadf10cf71a6eecd0547dafdc7adbaa4503783f943a46b4ad0e6dd7f2cab55617\",\n        \"signature\": \"510112223b33a5ab1564f7537191cd292a9dbd5a323d7add0584c1b0ad00d0ac7199c3fb758e913ff3d716c2e90dd90d4e8f59951e87ef8b78214a5175c4e608\"\n    },\n    {\n        \"secret_key\": \"ef00b3c181f6327d02256751cb51c2c36c0c0a78076340548f5bc070d86d9e26\",\n        \"public_key\": \"db14cd32588fd741e8f42e5121cc811ad45063f28141e83c668f07d91228f049\",\n        \"message\": \"7d6abec7a11af67324ce17b1d20bb40c668a219bc95df05e325d86f88795e264d454fc5fa7d9c8aafe77e90a6af6b57453d85b970b552a856ba659ab31bd8a660eb7d3587b453e5c5fc6b79472b26e8ff7dd6db6be3572548b0d754ed4d985b8d9965f88b952fc4fa3b761ccffc35354db0eb9c5a171718a8a5592870213827d3691bae7fd9c63f20503e04319b5e953579de47e3ef8e1628549503cb4f6871ba25db87347080e531a517a8b7221e6ad84dff83256d9ab9a433de871b9cb9c5044589e67206b317a5206aeba96c92fd6094071c644fe52658ded9220cf6abd50e2305a1c90fd66aacfb38eb05eaff6ca5f85f429cd57716eb87739a02b64cffa08c4f685b00310b5b4844920df215a9f24a17613aef85fec94f511dc8a4294eddcea11c08c0b399a23d916383e29adeb98c65d41c705a57f840520fa808d7fd25fdce159f7a084d062974b30132a571242baff4196246d6d757b312e9d608553d2dc53b623b2e95c7538fbc5deb62ba73776d85e5118fa1a302d4d076d99e100f0df119c33fc66cdfe6fd44d71997b78c8f7890c707346056220d1e9de88bc173cf0b76cb302877ec16af46e4c31639f54eedc16da9d9eb0ad95bda545dfc4a732b6da9814136ab1b9392a071b022473b3490557698b77e7447ac8590dcaf4f242ad3dfbc0df716cc0ea753626973df08d935d178e3312fbe2a7ba9c5093c53b9255eaca29b72578e3ba1bdfaf0c9ece21a5dff6ea421524f70fc1904e9a2cf7c518bfcc7e3673ee87ff27e1ca2ac32bcb4091cb34a82a71563ff6a6a15da0ebd5bd10256ce960f4eaa7fe35e128886050d049fec3a4ab16d5b0c107267eae1ab801ea5b91983839da1c488c12f864d7c3a77f2b6ae27d540109f68d78364bb627183bd503917547aaf3b3a1809da02577b3f03a9a3f5af48c8802e297c8bb63db6a86d3ea727a6d7148b3aa444b8d168f38c6c8f24088a49af33177a344adab2cf6e08e0cb0371ed52bdead132f77e7ae3ee5d8fb17afc0a0bb7311b9560b67\",\n        \"signed\": \"139f9cb99b995be6588cddb5051694838f9d82a60761fde304b0027ff86584bf65c73cc6d253e560f65525df04bfe146c83b42269cf3780f8bc392437894ae017d6abec7a11af67324ce17b1d20bb40c668a219bc95df05e325d86f88795e264d454fc5fa7d9c8aafe77e90a6af6b57453d85b970b552a856ba659ab31bd8a660eb7d3587b453e5c5fc6b79472b26e8ff7dd6db6be3572548b0d754ed4d985b8d9965f88b952fc4fa3b761ccffc35354db0eb9c5a171718a8a5592870213827d3691bae7fd9c63f20503e04319b5e953579de47e3ef8e1628549503cb4f6871ba25db87347080e531a517a8b7221e6ad84dff83256d9ab9a433de871b9cb9c5044589e67206b317a5206aeba96c92fd6094071c644fe52658ded9220cf6abd50e2305a1c90fd66aacfb38eb05eaff6ca5f85f429cd57716eb87739a02b64cffa08c4f685b00310b5b4844920df215a9f24a17613aef85fec94f511dc8a4294eddcea11c08c0b399a23d916383e29adeb98c65d41c705a57f840520fa808d7fd25fdce159f7a084d062974b30132a571242baff4196246d6d757b312e9d608553d2dc53b623b2e95c7538fbc5deb62ba73776d85e5118fa1a302d4d076d99e100f0df119c33fc66cdfe6fd44d71997b78c8f7890c707346056220d1e9de88bc173cf0b76cb302877ec16af46e4c31639f54eedc16da9d9eb0ad95bda545dfc4a732b6da9814136ab1b9392a071b022473b3490557698b77e7447ac8590dcaf4f242ad3dfbc0df716cc0ea753626973df08d935d178e3312fbe2a7ba9c5093c53b9255eaca29b72578e3ba1bdfaf0c9ece21a5dff6ea421524f70fc1904e9a2cf7c518bfcc7e3673ee87ff27e1ca2ac32bcb4091cb34a82a71563ff6a6a15da0ebd5bd10256ce960f4eaa7fe35e128886050d049fec3a4ab16d5b0c107267eae1ab801ea5b91983839da1c488c12f864d7c3a77f2b6ae27d540109f68d78364bb627183bd503917547aaf3b3a1809da02577b3f03a9a3f5af48c8802e297c8bb63db6a86d3ea727a6d7148b3aa444b8d168f38c6c8f24088a49af33177a344adab2cf6e08e0cb0371ed52bdead132f77e7ae3ee5d8fb17afc0a0bb7311b9560b67\",\n        \"signature\": \"139f9cb99b995be6588cddb5051694838f9d82a60761fde304b0027ff86584bf65c73cc6d253e560f65525df04bfe146c83b42269cf3780f8bc392437894ae01\"\n    },\n    {\n        \"secret_key\": \"d071d8c5578d025949932aa6bf6a80b1cc412f106f91574ee24654b445ee9a97\",\n        \"public_key\": \"9bcbf7d2212fb62cccf8b6c76803a5ea24409da6287efbb8b1f0c7b30ebdd93e\",\n        \"message\": \"3e8ee70e51e56ef57f6e66b3a884aa04a7b4d4599fb9b43996b393a868093512ea741a0c6a94f40ce49862d2fd1f7551f4647abd8075bc1b742ad40e29a60461301224fe8f7692b14772782b4e896b63fe05abd5ff5314f9ec8075f28d908ccaaace5e905ea7f57a491b99b3591eea54a6b7819167749d38a047620676a1a7af11f485a55b7c879e6850380858c8f45c0c1ccbd7406ed099d84a7471b9350c4ddb28470bf5bf327d5b3c22d899b4c660839e104a0622ae85c84aa9fc7f0a2c7ceb6e691c49c064b5313499683e8e03b2115eda7ddad55a49f9fbe62544f914511cfbec6b84dbde7e80909b45fb10502e2caaa72124fd9456a3872f9592707e9a4c5012daa972eaf65fabe553debe825701efef5c756bb465e966ab68dd52f3dd00a45cf6dc3f19b86bb0db4a86e4669885a074696a67d8ea2118c766ef625f8a98026f9f4a3c5cccf9846fdc90ed93ec7c1f3c7086954fa2f0a4ca96d40184aa57545527a1f965c11d843c90c5a5e08d7c11f2d561004e90574852eb5046aa1ea7b61009fd5dd7d6242a8df58a9e8e555c7f4cdc130d6901bfe6797fdc6c39beecfbbab6625b2e4fb9d8000276d4a94fc6fc1051fefff5adeb724b87090db0a2c697d056664d991fad80dc80fab700b1f1f2ee27734ebc26b2a641c32a0c911b270ac76b0da5c08914971c9112463a70709c0ddac7910016f913f6210086d7255cef11955710f651889c83621dd8a4fcd5366302d6c9b56eefcfac85c14a9478b6d718075428800760515cab5f3d4455e2b970df9fe4be8383d70483bbdd756071f53b2f9c275c7c8512d163518fe555837514c86776c947f29a77570287446b69be40c8d4abbd65ef2507249b5aec33acb7b8bd3f35bc859ba4e37bdb49cf913d93989c4438d2abcfa388cc89d78ac06270656492e7528f29bdfe8cbb9bfa9e73c1da013fc3ce2105657613ff62bb0c3bf4dee3b0d2659c726e7bcd9e97ecce9247d4600dfeaf60444ed862b00ba11e70ea88d4f0b6b539fc9f36bb2a1a9ed2b3\",\n        \"signed\": \"0c297abe0fd8ebcc6b771998755e2c6be07c812b5a80544957063170ca69432e72b60daae322958a2238cd6a462894a387eef65bf96f63f54c085687a502750e3e8ee70e51e56ef57f6e66b3a884aa04a7b4d4599fb9b43996b393a868093512ea741a0c6a94f40ce49862d2fd1f7551f4647abd8075bc1b742ad40e29a60461301224fe8f7692b14772782b4e896b63fe05abd5ff5314f9ec8075f28d908ccaaace5e905ea7f57a491b99b3591eea54a6b7819167749d38a047620676a1a7af11f485a55b7c879e6850380858c8f45c0c1ccbd7406ed099d84a7471b9350c4ddb28470bf5bf327d5b3c22d899b4c660839e104a0622ae85c84aa9fc7f0a2c7ceb6e691c49c064b5313499683e8e03b2115eda7ddad55a49f9fbe62544f914511cfbec6b84dbde7e80909b45fb10502e2caaa72124fd9456a3872f9592707e9a4c5012daa972eaf65fabe553debe825701efef5c756bb465e966ab68dd52f3dd00a45cf6dc3f19b86bb0db4a86e4669885a074696a67d8ea2118c766ef625f8a98026f9f4a3c5cccf9846fdc90ed93ec7c1f3c7086954fa2f0a4ca96d40184aa57545527a1f965c11d843c90c5a5e08d7c11f2d561004e90574852eb5046aa1ea7b61009fd5dd7d6242a8df58a9e8e555c7f4cdc130d6901bfe6797fdc6c39beecfbbab6625b2e4fb9d8000276d4a94fc6fc1051fefff5adeb724b87090db0a2c697d056664d991fad80dc80fab700b1f1f2ee27734ebc26b2a641c32a0c911b270ac76b0da5c08914971c9112463a70709c0ddac7910016f913f6210086d7255cef11955710f651889c83621dd8a4fcd5366302d6c9b56eefcfac85c14a9478b6d718075428800760515cab5f3d4455e2b970df9fe4be8383d70483bbdd756071f53b2f9c275c7c8512d163518fe555837514c86776c947f29a77570287446b69be40c8d4abbd65ef2507249b5aec33acb7b8bd3f35bc859ba4e37bdb49cf913d93989c4438d2abcfa388cc89d78ac06270656492e7528f29bdfe8cbb9bfa9e73c1da013fc3ce2105657613ff62bb0c3bf4dee3b0d2659c726e7bcd9e97ecce9247d4600dfeaf60444ed862b00ba11e70ea88d4f0b6b539fc9f36bb2a1a9ed2b3\",\n        \"signature\": \"0c297abe0fd8ebcc6b771998755e2c6be07c812b5a80544957063170ca69432e72b60daae322958a2238cd6a462894a387eef65bf96f63f54c085687a502750e\"\n    },\n    {\n        \"secret_key\": \"e9d486c29ae811b942e10d81f0a6716317b842c2c5bfdef55cc432b7fcaeb818\",\n        \"public_key\": \"43a52d15b9f731d737b1c4dbc32227a480963091d2c6286f482ef1e8367054e5\",\n        \"message\": \"14fe1ed5bbbd76cc73dc5650bda92de86326e24d2f1f6224ba8568944d6fe3442675db96f1d8498f1634ff9b6e50cba9db4eb0b0b021b2becfce4bef33c4ce0e32c8a98389eca9e059a662d6f037c54aa40c76cdeee85650f089ea56e1383ab0f5c36f6d6645ff7e87667301f944fdc2ed35b0d2c35cb2e4b45636e7498e927f5846b3e1edfbd160a4aef3320c3428496bdaaf7d3ed56ef0b7254ac597be589a70584416300c1adcfba4f22cfd4cd661e1f50f155d172fa5748d296b29cdd7eb8121483ff1d9fe953f9451c7c7a542007285ee7246bc0fdea938814029abce057a0ecb974b12d360eab6afd30797d61445ad2bac7e52bce4346315f78eb87542d59528b2f6c56d66241cb442033f643d3d2a67cb637d8da95d4fd1234b031a3e51723a1d26e6f5ca07987321ad11a90fcc1d4e2b0b896650c3a7518d565529bea806a05d447e08d2a6a3dbf1a36915b2957ca5b40e58b97ad0369735c428bd6d69bd210044b651418d98b059d90c83e46011f41c032c5655a5ef21ac2c8c2bc94be07e45426a7ae5d47b45f27cf4289ca4ddabe08a12b910207dabb34a46ab75ce69b58e7e17664bf3359a8fb68eb032c9eaa6df873829f0e0848553f732e1c3c084b32b7af75074e7bbaa4eb5d7ead7aff97580109b60f4c792f9e2a65137b0aa48175b8115d91305f4c77e2d08e7e8d7e7785c966842c2e350fed4f9e33bf6e184c550b4b06e957414edf52fa079e81973458461fbb9b7d7d34bef150357f432caac3ae9f3dc96eb5a2d123e09eda1702e1d1070177bb220c423c096ec24424385c679be02ef84d09ed102f49cad3b1fd670679a39714ff1d6e4228d8d7d0e19ed0eba132f2128d47baa569a8ecb7bd48a826282f9cfcbf60ddeceaf1d02132c8affed3a03d2340deb787cd649c51c6ecb9ff75d7a7b4ef9b15139cfea2762ab18615197a6b51f6e75dbd04573a2448094d0cdeb0fe4585883ff9b68824a04b83ec91cf84acd6a7446cb1f5ee37d5df80f17cb2bdc3f3122a8faf76ebd06cfe817\",\n        \"signed\": \"65191aa885ddab9f67271879952fc6affe41ca20eb3bcd86673161b03b532694d6dd88908eb1b1eec003cfcbe6146b4538e21df55969912a0d7d8818ad79590d14fe1ed5bbbd76cc73dc5650bda92de86326e24d2f1f6224ba8568944d6fe3442675db96f1d8498f1634ff9b6e50cba9db4eb0b0b021b2becfce4bef33c4ce0e32c8a98389eca9e059a662d6f037c54aa40c76cdeee85650f089ea56e1383ab0f5c36f6d6645ff7e87667301f944fdc2ed35b0d2c35cb2e4b45636e7498e927f5846b3e1edfbd160a4aef3320c3428496bdaaf7d3ed56ef0b7254ac597be589a70584416300c1adcfba4f22cfd4cd661e1f50f155d172fa5748d296b29cdd7eb8121483ff1d9fe953f9451c7c7a542007285ee7246bc0fdea938814029abce057a0ecb974b12d360eab6afd30797d61445ad2bac7e52bce4346315f78eb87542d59528b2f6c56d66241cb442033f643d3d2a67cb637d8da95d4fd1234b031a3e51723a1d26e6f5ca07987321ad11a90fcc1d4e2b0b896650c3a7518d565529bea806a05d447e08d2a6a3dbf1a36915b2957ca5b40e58b97ad0369735c428bd6d69bd210044b651418d98b059d90c83e46011f41c032c5655a5ef21ac2c8c2bc94be07e45426a7ae5d47b45f27cf4289ca4ddabe08a12b910207dabb34a46ab75ce69b58e7e17664bf3359a8fb68eb032c9eaa6df873829f0e0848553f732e1c3c084b32b7af75074e7bbaa4eb5d7ead7aff97580109b60f4c792f9e2a65137b0aa48175b8115d91305f4c77e2d08e7e8d7e7785c966842c2e350fed4f9e33bf6e184c550b4b06e957414edf52fa079e81973458461fbb9b7d7d34bef150357f432caac3ae9f3dc96eb5a2d123e09eda1702e1d1070177bb220c423c096ec24424385c679be02ef84d09ed102f49cad3b1fd670679a39714ff1d6e4228d8d7d0e19ed0eba132f2128d47baa569a8ecb7bd48a826282f9cfcbf60ddeceaf1d02132c8affed3a03d2340deb787cd649c51c6ecb9ff75d7a7b4ef9b15139cfea2762ab18615197a6b51f6e75dbd04573a2448094d0cdeb0fe4585883ff9b68824a04b83ec91cf84acd6a7446cb1f5ee37d5df80f17cb2bdc3f3122a8faf76ebd06cfe817\",\n        \"signature\": \"65191aa885ddab9f67271879952fc6affe41ca20eb3bcd86673161b03b532694d6dd88908eb1b1eec003cfcbe6146b4538e21df55969912a0d7d8818ad79590d\"\n    },\n    {\n        \"secret_key\": \"e6fa10dbb478e1e36b35dfeb0250f63c08515070ae79b22f047e271708d64f5c\",\n        \"public_key\": \"e02e1f2bd8792ef483481c6d11f7c7c9dbdeecc9859432e7f279e9d173d31164\",\n        \"message\": \"ad3160758d8c08a661525c95280a3718874969859f1cc918e34fec008acf23b8896e8d50c3c0512331dc89780f8b10fc349c675c4cd82a5df8586b43c864448fac00b847b9c98054ab793f63c71aa5e5248e22d069bd3f852a3b8c6e2ac8ef861d90bcd984bfca87583e59e9a7468f29b808dc2fe5302a989d6f2ecde7585cd9be4e4c761c4d4b3eeaf4699f6556ef039af2b80f9407605ac397351dd85595584495baa177b08c88d2ec1fc4e32d1c0b8d7e7ac5839dfb923f09b323e78eceb7e96c0604b01a19e49c9beaf4f25ec4a84c1a08f2380eddc3a7f012184959ccd19ecbbac65eaca155cee9ecfec11e7fee058e174fc4ed7c679f2c15631d4e1527bcdb0e3bb0815ffdffc0c856bef0dc0f5c8237f7098e26bdb69e8782d1ca5111ec3c7edb425dff8032026cba3d2e081b71310db9badad1ad02f1eccc537d874cd18c6bb01221f71ee66250d94cf8ecceaa96d3c57eea2b0a8ec72429d7606488bdf19ec3bb16e50867c7937def09fc783f20a2a5ec99253d6b240df4677dd2d5277b01c5b8e5bd6c7df0874205bc8c2fffdba1314674d31c9b2c9199228e19e0421834c1657d0698286916c7e392f0abd5545b963ac1ffa99721616c23796f85c34a5c664ae81d16b216a5b0cf5bc6b5a908297285d61644128f886f38af9edd25193d7ecc77a79994278da071f54495937feef5a51957527c3eec7cb0b4e8aa7a4e856defd57dd92334151b986aa69ca69260d1e2d7b53c05677ee0d216b28d036252dd3006debe1b6574a25e6b19dfb48fa64316af8fd68d7893b397e7db5780ab27bf8726fff605d3b46d800595b4624bee302c964326034b5234d175dfdcc2ce882e65b3d93a0438f692e9695de1f24c70a79beed25415ec5aaecf3391953b2ffd453a8f0467561a4a47ee144a43fdff83df2bea5f66a722b52abe8613f20c594af0982eb3f04505a52461dd034da86c36ca16217705c04823911d72a24769517633562886f250f2cf788b8f32864a9474f57e62e57de8fdaf959a6b72287440a8\",\n        \"signed\": \"c03c470359127e9de3af0e0ed7d3b19faee0ec140b79c299e2cb6dac0a3e7e314141cc854b4596ce4c51c7b0dec8a5c8cf0936205361d5365f4bcc07c4287c07ad3160758d8c08a661525c95280a3718874969859f1cc918e34fec008acf23b8896e8d50c3c0512331dc89780f8b10fc349c675c4cd82a5df8586b43c864448fac00b847b9c98054ab793f63c71aa5e5248e22d069bd3f852a3b8c6e2ac8ef861d90bcd984bfca87583e59e9a7468f29b808dc2fe5302a989d6f2ecde7585cd9be4e4c761c4d4b3eeaf4699f6556ef039af2b80f9407605ac397351dd85595584495baa177b08c88d2ec1fc4e32d1c0b8d7e7ac5839dfb923f09b323e78eceb7e96c0604b01a19e49c9beaf4f25ec4a84c1a08f2380eddc3a7f012184959ccd19ecbbac65eaca155cee9ecfec11e7fee058e174fc4ed7c679f2c15631d4e1527bcdb0e3bb0815ffdffc0c856bef0dc0f5c8237f7098e26bdb69e8782d1ca5111ec3c7edb425dff8032026cba3d2e081b71310db9badad1ad02f1eccc537d874cd18c6bb01221f71ee66250d94cf8ecceaa96d3c57eea2b0a8ec72429d7606488bdf19ec3bb16e50867c7937def09fc783f20a2a5ec99253d6b240df4677dd2d5277b01c5b8e5bd6c7df0874205bc8c2fffdba1314674d31c9b2c9199228e19e0421834c1657d0698286916c7e392f0abd5545b963ac1ffa99721616c23796f85c34a5c664ae81d16b216a5b0cf5bc6b5a908297285d61644128f886f38af9edd25193d7ecc77a79994278da071f54495937feef5a51957527c3eec7cb0b4e8aa7a4e856defd57dd92334151b986aa69ca69260d1e2d7b53c05677ee0d216b28d036252dd3006debe1b6574a25e6b19dfb48fa64316af8fd68d7893b397e7db5780ab27bf8726fff605d3b46d800595b4624bee302c964326034b5234d175dfdcc2ce882e65b3d93a0438f692e9695de1f24c70a79beed25415ec5aaecf3391953b2ffd453a8f0467561a4a47ee144a43fdff83df2bea5f66a722b52abe8613f20c594af0982eb3f04505a52461dd034da86c36ca16217705c04823911d72a24769517633562886f250f2cf788b8f32864a9474f57e62e57de8fdaf959a6b72287440a8\",\n        \"signature\": \"c03c470359127e9de3af0e0ed7d3b19faee0ec140b79c299e2cb6dac0a3e7e314141cc854b4596ce4c51c7b0dec8a5c8cf0936205361d5365f4bcc07c4287c07\"\n    },\n    {\n        \"secret_key\": \"058e3680b8fcc0aa1490089c1124677f98d74b1bfb71ee8663f025f0d946cd20\",\n        \"public_key\": \"ec72ce0e82c6a3b21243d2f00e9e883adbc5cb63b3d936efa50c07cb929148e2\",\n        \"message\": \"e63d14f5bea7a1abb8fee697746c2280dfd0622de7357226cc0742722a3229be126b083e868aeaf07d2fc97adc3342709674193ca281744e850ea15440050aec930e45d7a87b8ac8015c8967c20033a532d29591b135586ce0fdd2e668b5c864b3bde70c7e719ad241931251861933ffbfa96483ff82856748c56dc26e257d692e5134d82fc7191c110d9590d3fc751cd636b0c46f44f8803e59e2f93fa0cbe247a1a625b4bc2c7b1fdceb5a2b22591fa6137c5404dfec6a69639e3f632b5976ab9fe1c63aa3da9d52b044008f3ae44b7c364f085664323a88eb4583e87140f763782bff8819cf741a875d506c929d34bbd43007de4b18f687a758111128b1db86fc5ad2fb9fcad12c9dd28fee5ad10de0739f8efd9bff66f840b11b3f91c5e07c21452cab24242b6e32165cd1e69572bf216e860453dad2fd129c333758580bb7d0f19509745e851463d127a5f9be21fe549cae55d56b8bea80bfafdac10acd838ea8af31c007dc32bfd74082d9110a3e91e61e0357587e4ed32827ade9b6910a988c1d3b2dd22c0ee76ef35fe15e099404a45d4b2acab9123ecc45550a40faf8336b46c630a9080358ff8b8e58af0bccbd35010c1ecc12816655a5eceba95ad3f503a18ec5bece3a33f469dfe917e1c55ef1d81e5a75561e6bbd99c653a6d095b9f387911e40332f6216f956a35cf7d99a9fdd0c44c51e90a564f1c36bf3d40a7faf4ba28b1a120b3205fbac1a98569290be37c58bbd745ce0fb74835270aba2252adaec157dc42461221a2cff687b9e65ceb57c2d77700aea6320486c5b1bec9cc53e7ef9e48fcd1b7783acbe75a6be0267278812dbf3d2576cf7ad3911271acebe0f2c04602a080c8b96c120fd86fda282aa4e1c131fe97c907c15855f87755f511c037befad0f56b39f32a2133a22f3d5a9bec3443f29a694e97fe05e10fb8ef9991302b9e0d84d929a19eb03471f3a8613d39368e15883a7e4970b53cbaf2929d8de431b48b435d7533caa2e36ceab6cddb346e535e515c4b3db76de07d9855414\",\n        \"signed\": \"5734ec50a7f82e48536bdc4370cfef2e150a631dabaf89edcf0fdabe4f5839f4f5fbd8df8ec4a3acd40a8bfb963d1855ff9274dbc33165b5e6d37a239dace903e63d14f5bea7a1abb8fee697746c2280dfd0622de7357226cc0742722a3229be126b083e868aeaf07d2fc97adc3342709674193ca281744e850ea15440050aec930e45d7a87b8ac8015c8967c20033a532d29591b135586ce0fdd2e668b5c864b3bde70c7e719ad241931251861933ffbfa96483ff82856748c56dc26e257d692e5134d82fc7191c110d9590d3fc751cd636b0c46f44f8803e59e2f93fa0cbe247a1a625b4bc2c7b1fdceb5a2b22591fa6137c5404dfec6a69639e3f632b5976ab9fe1c63aa3da9d52b044008f3ae44b7c364f085664323a88eb4583e87140f763782bff8819cf741a875d506c929d34bbd43007de4b18f687a758111128b1db86fc5ad2fb9fcad12c9dd28fee5ad10de0739f8efd9bff66f840b11b3f91c5e07c21452cab24242b6e32165cd1e69572bf216e860453dad2fd129c333758580bb7d0f19509745e851463d127a5f9be21fe549cae55d56b8bea80bfafdac10acd838ea8af31c007dc32bfd74082d9110a3e91e61e0357587e4ed32827ade9b6910a988c1d3b2dd22c0ee76ef35fe15e099404a45d4b2acab9123ecc45550a40faf8336b46c630a9080358ff8b8e58af0bccbd35010c1ecc12816655a5eceba95ad3f503a18ec5bece3a33f469dfe917e1c55ef1d81e5a75561e6bbd99c653a6d095b9f387911e40332f6216f956a35cf7d99a9fdd0c44c51e90a564f1c36bf3d40a7faf4ba28b1a120b3205fbac1a98569290be37c58bbd745ce0fb74835270aba2252adaec157dc42461221a2cff687b9e65ceb57c2d77700aea6320486c5b1bec9cc53e7ef9e48fcd1b7783acbe75a6be0267278812dbf3d2576cf7ad3911271acebe0f2c04602a080c8b96c120fd86fda282aa4e1c131fe97c907c15855f87755f511c037befad0f56b39f32a2133a22f3d5a9bec3443f29a694e97fe05e10fb8ef9991302b9e0d84d929a19eb03471f3a8613d39368e15883a7e4970b53cbaf2929d8de431b48b435d7533caa2e36ceab6cddb346e535e515c4b3db76de07d9855414\",\n        \"signature\": \"5734ec50a7f82e48536bdc4370cfef2e150a631dabaf89edcf0fdabe4f5839f4f5fbd8df8ec4a3acd40a8bfb963d1855ff9274dbc33165b5e6d37a239dace903\"\n    },\n    {\n        \"secret_key\": \"51ba3a4f3d85d1548c2f2494a3511f3b9515663d7e85370fb6150237e9bc980b\",\n        \"public_key\": \"7749de0210bce06d48f59b95aeb1528fd9b4e52cdde22fb8193bedd5df12817c\",\n        \"message\": \"d18d0cbfc16d0f9b67f2539ad6207cd9217ad5ed0333cddb1041e0ac2bdd920276629652b49cbc9802593ec364ea795abcd1582085f55bc66c48fd3eede618d6369617100eaeccc15f249d6eee5bb2c43c01b0623fe603ceeee49b40fb7c53fc68473673c09b1ac77ea9beb7e8530379a86d69ecd1ff11813fbb88f692f05ef1320742b4fe7e06d5ba71656646cd7500de19bb93d844536603f40bd4aeeaf0c4dbc0acfd202b286b64afb83d4a378dd45ee3c1df6b3ef16b8b1accbc04063250ec47b86ae5a71d1dab38b5eb80d663faa788f8b59a754c0f9c9f6d906252af46ab1fffed276d2388dbe70d96ba6747d1fed4fc0b55293d5f787bda0c0df46a73f4aa7d29e1c9cc85cd043e3dffe057462ca5fe5c6470e739276f8b534c0172e460f340487a569468aa5890cc14f20d67d79c661e87febac6275971c3730807ebf175e0de1049bee67c895e57b71ab8a2f3cf3641fd548d09414f5fc3026a0a35f6ba951673944941cb236f3d1976dc69077d951450e7660316988f6f2a6fbbff3b37ceaa02fd6f0273bd803185a109039c63f2519b983daf6554253bed5497c0b0bdaa0bd4a1fac90026ade3e40c554cff2ccb36990e71556708c5c4039256ffc7337e5fea11f5e90d3e4d93359179116a85c24136ca34835cd34012e4d7ddc7b721c246c73700e276dc2ff9f2770b43c8e80a17f01d32680bae228e6423a880c3fb996ab8d221bc6274ac5fa770d205fc878fba9bbd776a3d79ed77048950f36dc0aa3ccd28e4756a991904ae051b8a4b7de3a1f2ad0fb45a33d0c68225841f8eb65b6a16e95f893591e1aa73a64f0d2ee938ab69adcc8c59518bec501c39f139174bbb00699e1a0f0e0d889aae543a55e6ac56d5204c1ade1f27d82a6a95e14b2d6909dda7bfaa7f487fb61959014b78795cb4639f09f0d329feb35ccf52edc2db721914e423306889a483fee876360ee326335319070c564f3a8b953f52f41513a2260883c38dd978a248604a41bd4bfc9e84184dc9e84d2589f4afff8417824ce5adba\",\n        \"signed\": \"16fb290c913b20eb1c3d7b798249eb8459d4bee8125db2b3f1daab8af9d9a700ed798addd802dfcd297a412593cda7be9979a1f09350e86f698ac3380e341d07d18d0cbfc16d0f9b67f2539ad6207cd9217ad5ed0333cddb1041e0ac2bdd920276629652b49cbc9802593ec364ea795abcd1582085f55bc66c48fd3eede618d6369617100eaeccc15f249d6eee5bb2c43c01b0623fe603ceeee49b40fb7c53fc68473673c09b1ac77ea9beb7e8530379a86d69ecd1ff11813fbb88f692f05ef1320742b4fe7e06d5ba71656646cd7500de19bb93d844536603f40bd4aeeaf0c4dbc0acfd202b286b64afb83d4a378dd45ee3c1df6b3ef16b8b1accbc04063250ec47b86ae5a71d1dab38b5eb80d663faa788f8b59a754c0f9c9f6d906252af46ab1fffed276d2388dbe70d96ba6747d1fed4fc0b55293d5f787bda0c0df46a73f4aa7d29e1c9cc85cd043e3dffe057462ca5fe5c6470e739276f8b534c0172e460f340487a569468aa5890cc14f20d67d79c661e87febac6275971c3730807ebf175e0de1049bee67c895e57b71ab8a2f3cf3641fd548d09414f5fc3026a0a35f6ba951673944941cb236f3d1976dc69077d951450e7660316988f6f2a6fbbff3b37ceaa02fd6f0273bd803185a109039c63f2519b983daf6554253bed5497c0b0bdaa0bd4a1fac90026ade3e40c554cff2ccb36990e71556708c5c4039256ffc7337e5fea11f5e90d3e4d93359179116a85c24136ca34835cd34012e4d7ddc7b721c246c73700e276dc2ff9f2770b43c8e80a17f01d32680bae228e6423a880c3fb996ab8d221bc6274ac5fa770d205fc878fba9bbd776a3d79ed77048950f36dc0aa3ccd28e4756a991904ae051b8a4b7de3a1f2ad0fb45a33d0c68225841f8eb65b6a16e95f893591e1aa73a64f0d2ee938ab69adcc8c59518bec501c39f139174bbb00699e1a0f0e0d889aae543a55e6ac56d5204c1ade1f27d82a6a95e14b2d6909dda7bfaa7f487fb61959014b78795cb4639f09f0d329feb35ccf52edc2db721914e423306889a483fee876360ee326335319070c564f3a8b953f52f41513a2260883c38dd978a248604a41bd4bfc9e84184dc9e84d2589f4afff8417824ce5adba\",\n        \"signature\": \"16fb290c913b20eb1c3d7b798249eb8459d4bee8125db2b3f1daab8af9d9a700ed798addd802dfcd297a412593cda7be9979a1f09350e86f698ac3380e341d07\"\n    },\n    {\n        \"secret_key\": \"7ddec526a4971d8912a6bd43c69f92ed86442b15f42fbabbf2d17eff98993161\",\n        \"public_key\": \"0dfeffb2762309b4734e4ce2523cf1863149f7e19a7c147ec0899e110ca9d87d\",\n        \"message\": \"e8774a45d4d8f86dda5c08802ba2472ef3c8d36c7f383ac04612a464382e9d6c07d8d35822c53f4388f5153614fefaf46374747b9d4fd446a864769a4cade843c1eab8574319112f0179d2ea9e3c195dc068f0697462b9e07c8794870f8fb8ffc081e4586afbcdba7a4f5925e9fd9ec942d8434733c2ddd5e29bbdfc7342b92868719b544088a48eba4c82f187ddca8f474625a71cf6b7aa5f081c74f7408f53b781636e7e9d29b07fdb6d9c35e5eb382db7a31a8ba516915df8dee9e1ad3f182843683e8d1dc5d8669dbfcf09541a43c0a04613381a5b5e4e71b23c5ad09b8eaa51cb938d0c752cc3d3a10f10b42be8ee7f6bdac8078568434946bbf56da70e7d54157a6efd4846eb155278c94c3888658a7a2f8ea3bac147aa891692ae8b23f1afe71ecfdecaa6c113b5caaaa19398c7dfe73facb4155fd6bac18d5df2129e8b2907ecee151bdd147a7c3e46ea72754de32ceb066d9db1c26e80df3631292b16174cfa6f1d9c0828b849c22d29651a73e910d9275877f464ce9326c6e4ed6b07dcb3a35363c1aa6472e02c5cd855e38aabe965ace9f3f5a4f5de03008694cb90afe416c9d48688de7f75cfe243ff7f41e059310934903db568844508262c899dfa750cd6a2829824ba027aea1b6d0177726a343add4ecdc5f7e6e909ab7de615ef2807f9e7d71ce2f78acff57eba79c3f5e07c8b661c1e3027f8176d28bfef767dd68d4e5d628fec0bfe88799341f306128734fad202aafc9f11123fb3e363d10aee0db5e27a1570dfaee47e24da473b07fee59a6c93f0981dbe325cd8cc2d2ed7dc17166b267c1b110536f2636bba34751a78f7f6298182442d83c123bbee4f50c5b0facff03e7c556ed9e64ca27c4bca5ab0de0d5f9c2cbb54cc2d9473a32df999390ac2ffeed3d4cba34973dcec3fbabafc4d54cae4e7e85d4a6e8afe45cacd71e0f2e6d04b4f9d3bcf43d3fa41e998ccbed0f150d5ca1d5272932d93eca10495c68334fa3268f31de522cb12a7449ffb5cb5e8f1462cd9b51770ccaf58b1e0d82ef929\",\n        \"signed\": \"9e603b015f42871b78eb27523fbb7ce962fca32ae270e8e12dcadd25aa852b891f6fef77b59a546c9a7a7cacb55e1d32adc805ae5f61a69e6764c7c08292eb03e8774a45d4d8f86dda5c08802ba2472ef3c8d36c7f383ac04612a464382e9d6c07d8d35822c53f4388f5153614fefaf46374747b9d4fd446a864769a4cade843c1eab8574319112f0179d2ea9e3c195dc068f0697462b9e07c8794870f8fb8ffc081e4586afbcdba7a4f5925e9fd9ec942d8434733c2ddd5e29bbdfc7342b92868719b544088a48eba4c82f187ddca8f474625a71cf6b7aa5f081c74f7408f53b781636e7e9d29b07fdb6d9c35e5eb382db7a31a8ba516915df8dee9e1ad3f182843683e8d1dc5d8669dbfcf09541a43c0a04613381a5b5e4e71b23c5ad09b8eaa51cb938d0c752cc3d3a10f10b42be8ee7f6bdac8078568434946bbf56da70e7d54157a6efd4846eb155278c94c3888658a7a2f8ea3bac147aa891692ae8b23f1afe71ecfdecaa6c113b5caaaa19398c7dfe73facb4155fd6bac18d5df2129e8b2907ecee151bdd147a7c3e46ea72754de32ceb066d9db1c26e80df3631292b16174cfa6f1d9c0828b849c22d29651a73e910d9275877f464ce9326c6e4ed6b07dcb3a35363c1aa6472e02c5cd855e38aabe965ace9f3f5a4f5de03008694cb90afe416c9d48688de7f75cfe243ff7f41e059310934903db568844508262c899dfa750cd6a2829824ba027aea1b6d0177726a343add4ecdc5f7e6e909ab7de615ef2807f9e7d71ce2f78acff57eba79c3f5e07c8b661c1e3027f8176d28bfef767dd68d4e5d628fec0bfe88799341f306128734fad202aafc9f11123fb3e363d10aee0db5e27a1570dfaee47e24da473b07fee59a6c93f0981dbe325cd8cc2d2ed7dc17166b267c1b110536f2636bba34751a78f7f6298182442d83c123bbee4f50c5b0facff03e7c556ed9e64ca27c4bca5ab0de0d5f9c2cbb54cc2d9473a32df999390ac2ffeed3d4cba34973dcec3fbabafc4d54cae4e7e85d4a6e8afe45cacd71e0f2e6d04b4f9d3bcf43d3fa41e998ccbed0f150d5ca1d5272932d93eca10495c68334fa3268f31de522cb12a7449ffb5cb5e8f1462cd9b51770ccaf58b1e0d82ef929\",\n        \"signature\": \"9e603b015f42871b78eb27523fbb7ce962fca32ae270e8e12dcadd25aa852b891f6fef77b59a546c9a7a7cacb55e1d32adc805ae5f61a69e6764c7c08292eb03\"\n    },\n    {\n        \"secret_key\": \"0b6590dd7c2f15f94a56e240169363c26732302b9d440b532723002e155d02d9\",\n        \"public_key\": \"cd18e032577c5576f223f3e3d8a1fa8e9a870fef09e9409faf40d7143e52fc44\",\n        \"message\": \"71fe0fd55d5ed1206f28ee16e419fab6fa66a251fa6b0601da261e429f55b8d5ae3f3c52a17fe1ec734b810ab63aade4447039ca0ae4687c2435f561e46c5b309717ab31e0f64076b2169211572b74e18a1f4525a64fa717a5edf149758129cb04035e7e20ba4005b74809dec644504c2454a77f99b20c5374f3cee7d8c6b68b243cafb30098dce90490fdc3b92f54948f424639e19f8f2020d15513daefadd9e9b12a84761e5ecea088ad561f06209fd4423fcd003fbcd1873ea54963a2fa07c7476b1388f9015d9eac305bea5a3de194f55a17b42d599e5ce62c8b7c19e7e7096137b9d0a65e63c1a3b84538ca65369a20e8822fff5ecb57fc09b4e6845b4f24d4886971ac1ac28c77580ea5672ad14ce4441719c214546d0736cb7ad0bd9fb5b26c6d9c536bf8c857ae42577b36341d392b43323bdae7dfaa491986872a23d827c6ef8b57e7d00feae3834c466400aad1d367823984aa02d2ef492914ae1127e7551b812559378305e4fd52d8bc7e4157ecca451f43ee9f54c82153c7dbfaf7ec35238773051b4e587db136957ec571382b90590b5d1026024580966b7252d2cd3f4f1625c485ba906bff175992188978f2d6274f3a031749ba7e702f56547edc96ec267b84892880d750d7310ebf6db241253cabe4b25a977458c6ffc9e353e62adf05e6efc0fc1ebe89f527705bcc26b701285610d98aa3bf23872b6996d3de480e8d09d783c4a08cd383c9012635aa68978b5006818bbde44f2987479bcb2b711c1beeed27cf09970a164e454f710822eef555c1c7bf9f76d5254ce220c9aaa716847a249488f9cdb44c48f452ab52c40f6d03adc8bf3f197b25e3d127830e74fd81eb14f754205b3a4844c596b6e3a9936ad6fd9e80a16320b381c3ffc7b69eab54536f55abe22c91d898408e880c6dbf0fa5648d517772caa5353b25db6050d753faf198ec1d375de0fa72180a93bab03ded7716cb87505b68ac6a35e73d0fcf34457eff82178952142c7bac9dfd872a9a82f85b24b88fa42d4be0a0ca0b2c70f4c622\",\n        \"signed\": \"642d81acf38cf099a833a74f2d80b85448ec2b1a5ddc64470b213d54b7be6133689a7194f5d89792e16e5df755a4fd9ef4689ea952926e0e4ecb3bd481fd910271fe0fd55d5ed1206f28ee16e419fab6fa66a251fa6b0601da261e429f55b8d5ae3f3c52a17fe1ec734b810ab63aade4447039ca0ae4687c2435f561e46c5b309717ab31e0f64076b2169211572b74e18a1f4525a64fa717a5edf149758129cb04035e7e20ba4005b74809dec644504c2454a77f99b20c5374f3cee7d8c6b68b243cafb30098dce90490fdc3b92f54948f424639e19f8f2020d15513daefadd9e9b12a84761e5ecea088ad561f06209fd4423fcd003fbcd1873ea54963a2fa07c7476b1388f9015d9eac305bea5a3de194f55a17b42d599e5ce62c8b7c19e7e7096137b9d0a65e63c1a3b84538ca65369a20e8822fff5ecb57fc09b4e6845b4f24d4886971ac1ac28c77580ea5672ad14ce4441719c214546d0736cb7ad0bd9fb5b26c6d9c536bf8c857ae42577b36341d392b43323bdae7dfaa491986872a23d827c6ef8b57e7d00feae3834c466400aad1d367823984aa02d2ef492914ae1127e7551b812559378305e4fd52d8bc7e4157ecca451f43ee9f54c82153c7dbfaf7ec35238773051b4e587db136957ec571382b90590b5d1026024580966b7252d2cd3f4f1625c485ba906bff175992188978f2d6274f3a031749ba7e702f56547edc96ec267b84892880d750d7310ebf6db241253cabe4b25a977458c6ffc9e353e62adf05e6efc0fc1ebe89f527705bcc26b701285610d98aa3bf23872b6996d3de480e8d09d783c4a08cd383c9012635aa68978b5006818bbde44f2987479bcb2b711c1beeed27cf09970a164e454f710822eef555c1c7bf9f76d5254ce220c9aaa716847a249488f9cdb44c48f452ab52c40f6d03adc8bf3f197b25e3d127830e74fd81eb14f754205b3a4844c596b6e3a9936ad6fd9e80a16320b381c3ffc7b69eab54536f55abe22c91d898408e880c6dbf0fa5648d517772caa5353b25db6050d753faf198ec1d375de0fa72180a93bab03ded7716cb87505b68ac6a35e73d0fcf34457eff82178952142c7bac9dfd872a9a82f85b24b88fa42d4be0a0ca0b2c70f4c622\",\n        \"signature\": \"642d81acf38cf099a833a74f2d80b85448ec2b1a5ddc64470b213d54b7be6133689a7194f5d89792e16e5df755a4fd9ef4689ea952926e0e4ecb3bd481fd9102\"\n    },\n    {\n        \"secret_key\": \"c6d9acc5175fa2b8965c158c56ba0a5a666ad2c740cd5bb679bba9b1dc509284\",\n        \"public_key\": \"f5cfca211b02fba7720347703bf1631cb308fabcdaa67429527c5b7b676dbaef\",\n        \"message\": \"f245100cd2d31648f5f351bda564c9db4a35820cc30ef651337c4cd888070569d117a934b9c918e5df8b3744dd6620ccbc49f6b3e5782a30339dbb9cbed05dd2b3b8c5bf1546e70af636e6615c48b2c3c2d19fe35420df5314f63c4812b58e82a2a60b1802f38e505ce748017afa977d3f9b1b6bea2192acec73bdce12d65e684da4d8b41fa9a86f11086edc2d5296f67efc53ac84070fde13693eb2318f5a8c3b117c233422adcdd352f328f0ec699a4650c93f9b4a7d795d7fc2622a03d99b64f7b3dc3194f6c3b1b69d9907ce092401073f47a28f4799d229092a1b074129954be80ca4a3e6582ee05c302cacb7431d1ca6a451aaed7278abc7f78575241c2a2eea2e84cbf9a334df402109c028e345473a13af9b008e20bc8cf0bcefbb7aa727ec856e9925b4ddd99deba8f252911a590154b579a8aaa31f07dd5025df5cd8a09f742964cc8c365d8aff4eb1d79f6e5a07dac5f4ede92b4e2e61d34cc2d4f0aaaab037ad5fdb95de6cd5984ebaf7cce7f08d0ca0dbbe483ce3cb35cd790ca0427065a34df7f4c2af86efe9b765713aff257f5c1d54709527ad18ac33abcdeedb208064ebaea4835be4942b8fc666ad1b79b6651309e5ea1da302d7fba2e99f0e6319e82b9905a1ea482ba043b6800b330dc48b3313f59bb2f9e8a7f07eb1800a702745db14c6299a982dad897954445b7d98eb5837fd70bf190c649552c8e86feb7ff5b3ed8e0a06704d4553a3c2dd74f18ea8233ae0a50d914fe08fbcd3a1435fed56a9f3a7effa140fb552ddd21dffff7fa47332ddfc1e5317f4177d5e2f11a06ec84ccfb89b654ea81bd42d7e07a387301d0f40264abbf9f9107b30ede864cc7690c06d2e247a060bb2244ad78ed5c5515a1a2a612d61e3d931e28bc939b4d3435eee4f7331b1f0f85375d82ac9a77c43740032051746dc9269458c147d188d84401954a489cb4fbf9bf84ba7d8f100903ce67831b4054d0f58cd883d542c4933103ff070cdfc9dbb0fcc31efca466e77a33f1a813da6dc0c7c31585e8f4fef1ebf42fbd1\",\n        \"signed\": \"4d2ce707090b0f3f41462fd75bd609a2724fadfe5ca390e313a42cab42868ed6e9a8914dc13909c0d6f61e63712957c76f3bd8b7f55349715a3a317515c07108f245100cd2d31648f5f351bda564c9db4a35820cc30ef651337c4cd888070569d117a934b9c918e5df8b3744dd6620ccbc49f6b3e5782a30339dbb9cbed05dd2b3b8c5bf1546e70af636e6615c48b2c3c2d19fe35420df5314f63c4812b58e82a2a60b1802f38e505ce748017afa977d3f9b1b6bea2192acec73bdce12d65e684da4d8b41fa9a86f11086edc2d5296f67efc53ac84070fde13693eb2318f5a8c3b117c233422adcdd352f328f0ec699a4650c93f9b4a7d795d7fc2622a03d99b64f7b3dc3194f6c3b1b69d9907ce092401073f47a28f4799d229092a1b074129954be80ca4a3e6582ee05c302cacb7431d1ca6a451aaed7278abc7f78575241c2a2eea2e84cbf9a334df402109c028e345473a13af9b008e20bc8cf0bcefbb7aa727ec856e9925b4ddd99deba8f252911a590154b579a8aaa31f07dd5025df5cd8a09f742964cc8c365d8aff4eb1d79f6e5a07dac5f4ede92b4e2e61d34cc2d4f0aaaab037ad5fdb95de6cd5984ebaf7cce7f08d0ca0dbbe483ce3cb35cd790ca0427065a34df7f4c2af86efe9b765713aff257f5c1d54709527ad18ac33abcdeedb208064ebaea4835be4942b8fc666ad1b79b6651309e5ea1da302d7fba2e99f0e6319e82b9905a1ea482ba043b6800b330dc48b3313f59bb2f9e8a7f07eb1800a702745db14c6299a982dad897954445b7d98eb5837fd70bf190c649552c8e86feb7ff5b3ed8e0a06704d4553a3c2dd74f18ea8233ae0a50d914fe08fbcd3a1435fed56a9f3a7effa140fb552ddd21dffff7fa47332ddfc1e5317f4177d5e2f11a06ec84ccfb89b654ea81bd42d7e07a387301d0f40264abbf9f9107b30ede864cc7690c06d2e247a060bb2244ad78ed5c5515a1a2a612d61e3d931e28bc939b4d3435eee4f7331b1f0f85375d82ac9a77c43740032051746dc9269458c147d188d84401954a489cb4fbf9bf84ba7d8f100903ce67831b4054d0f58cd883d542c4933103ff070cdfc9dbb0fcc31efca466e77a33f1a813da6dc0c7c31585e8f4fef1ebf42fbd1\",\n        \"signature\": \"4d2ce707090b0f3f41462fd75bd609a2724fadfe5ca390e313a42cab42868ed6e9a8914dc13909c0d6f61e63712957c76f3bd8b7f55349715a3a317515c07108\"\n    },\n    {\n        \"secret_key\": \"7dfae416419d7b0d4fc1f823840c3e4bd4adcd4dc2dc17b38637acedacbdbb45\",\n        \"public_key\": \"bc51d7745931317e1e346e2e7c92039181b6bf38ee2f5a44fbe2339c4f952ab9\",\n        \"message\": \"ec843dc4dda6e902e9be31b70f11763b757ab6ce7334dc00764b2d084e9daf2484485984ee28a2830fcb94c541cb469440036731de80ff560f530c9d9e6e1f7d9c4c5bdf50b04f5403c29f76d7e36e00bbea35db1cc60da8d776526266c3324ce7efec6450859609266856d701a47a48dee8bf37409565c7fbfa99a204e5530c971c605b44305d5c7467894114253cf43cddf18b6296dd254a4d96ac7000918186dfd4bf454ed30974c553d0ae151ad4cf540cecaaa0b5948b0985a9c7b6e7815932bac11732fc7d10267f6bf8f1e7c08d650e567b4edd15ae7958410e42f1f537fa732f727a268388321d5344c4e78bb9a74eab9d6abf968965c66693d5f112dd4c14fdfdd96005eaa6757fa2cc1013fe4327ab0999d117f3dbf325b07cd454d4b141991ef7e23db5ee24beda35884aa3704808648aa43cd6256259f7d3db5e055311f253e8b57a4cda5afe0b0adfc364e160ca37e8dec6b95aa6152e5d5da6eb91be0e44ffe8e49533267b7eb795f5f8e0b2c35b29dfbc87585f22bd5b909dfd6a5edc0e3a9d97b0c4f3adc51e969937c08fd65f537aacda8f11275af02c3354542630f3920c393f5c42b9fc633de9d94c72e3f20002349ad0418035b3f25f02ca928e5b2d40a77a1c3e56221f4b9db0c25b096d6e5d0fe758da2c69053e8d086def4edc6e3453783ffc63a4960122d923671a906008bac10561ae6219d2b51d5367bf13ccabf5931b9f186eb109bacde40e1af2b56481e0c6dc6f5c5473f8001cf371919acb40cec5b962ebba80e32d6ebac4806d04d24768c2ad2e3f92a8cbe47754f9bf615953522b263dc24937fbd932c8c459eb8b109443af6c195a59fd2721b0125628f2b8143cf3c128bcec1392efd16b734c10716d96ba7d1f413917ccafa5bf5f83f524fe8406a152115ea770e1745e82e8b51d752b8bd785df48bfc12041bf874fc73afb42ca5d69c6416479ceb4aaa0492b6ff21ee12db2213a4286fd5605c93a7bb8a3b071b0b25fb01d77abbc8771489470a107aadae9f640c24dfd5328f60f4b7d\",\n        \"signed\": \"da34b1983e8c55e41fda8ec8abf23b367a0da606c8cdbb1e8b57e0343c0557a5f0e815e7f22f8605ae93b27d03776ac1f7de3d792ea2933ac22d2dc23b323d0cec843dc4dda6e902e9be31b70f11763b757ab6ce7334dc00764b2d084e9daf2484485984ee28a2830fcb94c541cb469440036731de80ff560f530c9d9e6e1f7d9c4c5bdf50b04f5403c29f76d7e36e00bbea35db1cc60da8d776526266c3324ce7efec6450859609266856d701a47a48dee8bf37409565c7fbfa99a204e5530c971c605b44305d5c7467894114253cf43cddf18b6296dd254a4d96ac7000918186dfd4bf454ed30974c553d0ae151ad4cf540cecaaa0b5948b0985a9c7b6e7815932bac11732fc7d10267f6bf8f1e7c08d650e567b4edd15ae7958410e42f1f537fa732f727a268388321d5344c4e78bb9a74eab9d6abf968965c66693d5f112dd4c14fdfdd96005eaa6757fa2cc1013fe4327ab0999d117f3dbf325b07cd454d4b141991ef7e23db5ee24beda35884aa3704808648aa43cd6256259f7d3db5e055311f253e8b57a4cda5afe0b0adfc364e160ca37e8dec6b95aa6152e5d5da6eb91be0e44ffe8e49533267b7eb795f5f8e0b2c35b29dfbc87585f22bd5b909dfd6a5edc0e3a9d97b0c4f3adc51e969937c08fd65f537aacda8f11275af02c3354542630f3920c393f5c42b9fc633de9d94c72e3f20002349ad0418035b3f25f02ca928e5b2d40a77a1c3e56221f4b9db0c25b096d6e5d0fe758da2c69053e8d086def4edc6e3453783ffc63a4960122d923671a906008bac10561ae6219d2b51d5367bf13ccabf5931b9f186eb109bacde40e1af2b56481e0c6dc6f5c5473f8001cf371919acb40cec5b962ebba80e32d6ebac4806d04d24768c2ad2e3f92a8cbe47754f9bf615953522b263dc24937fbd932c8c459eb8b109443af6c195a59fd2721b0125628f2b8143cf3c128bcec1392efd16b734c10716d96ba7d1f413917ccafa5bf5f83f524fe8406a152115ea770e1745e82e8b51d752b8bd785df48bfc12041bf874fc73afb42ca5d69c6416479ceb4aaa0492b6ff21ee12db2213a4286fd5605c93a7bb8a3b071b0b25fb01d77abbc8771489470a107aadae9f640c24dfd5328f60f4b7d\",\n        \"signature\": \"da34b1983e8c55e41fda8ec8abf23b367a0da606c8cdbb1e8b57e0343c0557a5f0e815e7f22f8605ae93b27d03776ac1f7de3d792ea2933ac22d2dc23b323d0c\"\n    },\n    {\n        \"secret_key\": \"709416074997b9c9af4d37a01139e8a3f9f2ce5d72a57d805e822a81186d017e\",\n        \"public_key\": \"aee110f1f4d46ea60649d786b150052e287a9da60122c47b0908fa8b2ca28a80\",\n        \"message\": \"eddaa369c0e31a1fcc1da46f65362442a0cc21c7dcdd5cd90e0a2ee9f25110812ba114931c868a708607ac16084d79715d13b338c05c6aef7343e7dad282f96fe28193188f0cc893c7dce805fd3a7cd268b72894160b5245fed9fa9943b7c80adb3c2d1a353d8f12df25a31dde7fa385bbec351da66f153032e17756273f8d54e9a3b9ea25ae67d1e9c18cc68be601e3d68282818ce0e7cf88a4d1336453021732f08d9e76cd23637929b0911d5f8614f4842e670c142860afc265c50172b13bfd35ad8fc54b28657da32bac153ba9affc897afb3c721f48caa46240585710b0f2d24d5ff4965d1d10f1a07b06abea6a08e1d6f1500da12c434a6d778c941067108000475ce831bcfe2d0afe40b7419d07059bc0cd8dce4be9587ff29ad8bf0b268ae23ce0da5bb5bf74ff0b2b31b82112a9fd5abd9bfd0a90e6f4723548c6bb2f99dc061ba32eba2d53e6bc79bf441b23fb7460de04e8e8efbcd4d4cc7355de9e3b0861a681b983839d4488e551751f23e9a6e2e4d443273b9e0fe64d8acd1c748b5559438223dd21b5183189e0f3c0e8ed414c0356bab77a654de1a5771462ef14344970a491511a722914f4a89f4f1a827e18cd84479cc92592eadf8de2df824b976dcbd284a3ba64bcdb0df15e8f41c0b2471586b26a06353d905028235c1c6e5c4587222725af083e11e79c943aa444d4aa41218d3e974336e372813e99e2b0c5f0ae810ffed9a7a3d6cb74c5473d990a5911329b8e82ec6bf2bd4321bb487370f8739e7a2a4a53430833d45b9fe3deb93f79fc6a51d563695ecdb97858d213da584434b7c71546aae8d967e1c6d0082b10d4a72de1742e53c4b2f92eb8b5c8c35ab6535ea8100b37924a0a91d2a728d0f5642437aa66c82ab74b5d0745ec08f7705cb81fa079d89ecdc9aa1f8d7d82dc7746d34615343a6925dc318f352a2b45012438424f9098fddf6e61fd1f8fb49da40b3eece89a1af1996de70cd1696cbfd9e301ea5f4437c71ac2a032254c140a90e85fb8ffc4667fa139c1ee9bbf12eed906a967bc0921\",\n        \"signed\": \"8e4b41f097d83614184ba7f52ba2fd9f0565f8a63721ef55f93162826b9f0ac070c0e2864b5ffd8eccc18efad18b2ce84be57c0b4a41c52e20ef37722377c60feddaa369c0e31a1fcc1da46f65362442a0cc21c7dcdd5cd90e0a2ee9f25110812ba114931c868a708607ac16084d79715d13b338c05c6aef7343e7dad282f96fe28193188f0cc893c7dce805fd3a7cd268b72894160b5245fed9fa9943b7c80adb3c2d1a353d8f12df25a31dde7fa385bbec351da66f153032e17756273f8d54e9a3b9ea25ae67d1e9c18cc68be601e3d68282818ce0e7cf88a4d1336453021732f08d9e76cd23637929b0911d5f8614f4842e670c142860afc265c50172b13bfd35ad8fc54b28657da32bac153ba9affc897afb3c721f48caa46240585710b0f2d24d5ff4965d1d10f1a07b06abea6a08e1d6f1500da12c434a6d778c941067108000475ce831bcfe2d0afe40b7419d07059bc0cd8dce4be9587ff29ad8bf0b268ae23ce0da5bb5bf74ff0b2b31b82112a9fd5abd9bfd0a90e6f4723548c6bb2f99dc061ba32eba2d53e6bc79bf441b23fb7460de04e8e8efbcd4d4cc7355de9e3b0861a681b983839d4488e551751f23e9a6e2e4d443273b9e0fe64d8acd1c748b5559438223dd21b5183189e0f3c0e8ed414c0356bab77a654de1a5771462ef14344970a491511a722914f4a89f4f1a827e18cd84479cc92592eadf8de2df824b976dcbd284a3ba64bcdb0df15e8f41c0b2471586b26a06353d905028235c1c6e5c4587222725af083e11e79c943aa444d4aa41218d3e974336e372813e99e2b0c5f0ae810ffed9a7a3d6cb74c5473d990a5911329b8e82ec6bf2bd4321bb487370f8739e7a2a4a53430833d45b9fe3deb93f79fc6a51d563695ecdb97858d213da584434b7c71546aae8d967e1c6d0082b10d4a72de1742e53c4b2f92eb8b5c8c35ab6535ea8100b37924a0a91d2a728d0f5642437aa66c82ab74b5d0745ec08f7705cb81fa079d89ecdc9aa1f8d7d82dc7746d34615343a6925dc318f352a2b45012438424f9098fddf6e61fd1f8fb49da40b3eece89a1af1996de70cd1696cbfd9e301ea5f4437c71ac2a032254c140a90e85fb8ffc4667fa139c1ee9bbf12eed906a967bc0921\",\n        \"signature\": \"8e4b41f097d83614184ba7f52ba2fd9f0565f8a63721ef55f93162826b9f0ac070c0e2864b5ffd8eccc18efad18b2ce84be57c0b4a41c52e20ef37722377c60f\"\n    },\n    {\n        \"secret_key\": \"3dcb7ae7d9f0f141f1d9f07883635b913ed29fb61d0f741c9afd05a27b045b06\",\n        \"public_key\": \"ae62b7ee1b8db5764dafddd9724acc106d6c0a4d1e85d8906f7584b558f577df\",\n        \"message\": \"38116a572669070dd5863218c91a77a4ab47553688488c792838509e9aba25067adb7ea4249848009d914ae987a6032348c1c0681cf977a9552dd6bbf4e6ff32acc9fa61cbee25a39307650f8ba6a7ce421ef2f71bccc0958138f9324c86bf2e528fa3e4d1b19f9f2ca5268409b8cc19c62dd979b89697e457ed2d98bd2096f62d3d9e247388795927803e79ab71d4f72f568e945a8a162159d9b84836e4585644d4979f614aada73ad413a83391e9cf880c42ac2a98343b6a82cd2b61581456f6de5ceb24fe46b7625d52ab2c2c324ac74703d15e15f1aeff8055d2f739f7363e16ec1d78be2c6299436c8c8d336bd29271a897a6ec932ed08725be21b28f9aa14eaf4f71853154db14587c930ab3eb0227ad7ffb45b3baa6a999499cc8a6e45b1ab4d0b339782bcd9cfbcf88cf7eae891cc841e9c88a1f6a691f3948a6bc85ba7f4611642e84223c3b178946ddbeddcfcdef4ae4c4e1a814b9b1f02b1eaa824db93f44b27d14206b340465a1cefcf535c63e55c4287224262733d98aaaa154f3ad42cd8546a461ce0d46d886d3461a2150cb45dbe56473ff63d3dc7a2b957b823969f19b5968e8b424c879741926d82c6386753b0fa1f080284e5578942363aadeb21f8e1e8909fa6c380764149bc915b228604efc56d92e4beb720edc74c4d78f925d6cfdf7ba2f14b5623775810d2d07bd388c573e36523f215738e69114dcf8d80f170bfa676e31fb626a7d449ed96647363475970c8c47809709bcb5e7200f2a227c7c8e7b000f30c0bde61d67bd6895361629a36c8fdd5a56b81efbacf15c1b3530a08cded5b1fd457fbd2f03042f56f1b37ed15cdb912fa0298c276725087ee27d3cf2550fe6e8a0330af417f4f5baf03627ed67c5f8323363abac5a1fe34823180e3e0e2080f75bfd91c207cf6baa9a229cf443dd442c5902e0673f3252b8526346585872f6cd366025a56992b70ede39bc8d322f9c22a1dc599e9f0d524cb6d2ea5ae2878ef6bed4b702807f1e1e73ebf290eb6c0eeb85c13716f626aa90d364b4904837ce05\",\n        \"signed\": \"09a1e6fedf971b3edbfaefbeb89aa539ca0b02b37e7ac4ea8920d6d4348ee0cf9a2d5e96fce517c665e7c38368baf24979249a95b70ea7436c00785f16a3ae0938116a572669070dd5863218c91a77a4ab47553688488c792838509e9aba25067adb7ea4249848009d914ae987a6032348c1c0681cf977a9552dd6bbf4e6ff32acc9fa61cbee25a39307650f8ba6a7ce421ef2f71bccc0958138f9324c86bf2e528fa3e4d1b19f9f2ca5268409b8cc19c62dd979b89697e457ed2d98bd2096f62d3d9e247388795927803e79ab71d4f72f568e945a8a162159d9b84836e4585644d4979f614aada73ad413a83391e9cf880c42ac2a98343b6a82cd2b61581456f6de5ceb24fe46b7625d52ab2c2c324ac74703d15e15f1aeff8055d2f739f7363e16ec1d78be2c6299436c8c8d336bd29271a897a6ec932ed08725be21b28f9aa14eaf4f71853154db14587c930ab3eb0227ad7ffb45b3baa6a999499cc8a6e45b1ab4d0b339782bcd9cfbcf88cf7eae891cc841e9c88a1f6a691f3948a6bc85ba7f4611642e84223c3b178946ddbeddcfcdef4ae4c4e1a814b9b1f02b1eaa824db93f44b27d14206b340465a1cefcf535c63e55c4287224262733d98aaaa154f3ad42cd8546a461ce0d46d886d3461a2150cb45dbe56473ff63d3dc7a2b957b823969f19b5968e8b424c879741926d82c6386753b0fa1f080284e5578942363aadeb21f8e1e8909fa6c380764149bc915b228604efc56d92e4beb720edc74c4d78f925d6cfdf7ba2f14b5623775810d2d07bd388c573e36523f215738e69114dcf8d80f170bfa676e31fb626a7d449ed96647363475970c8c47809709bcb5e7200f2a227c7c8e7b000f30c0bde61d67bd6895361629a36c8fdd5a56b81efbacf15c1b3530a08cded5b1fd457fbd2f03042f56f1b37ed15cdb912fa0298c276725087ee27d3cf2550fe6e8a0330af417f4f5baf03627ed67c5f8323363abac5a1fe34823180e3e0e2080f75bfd91c207cf6baa9a229cf443dd442c5902e0673f3252b8526346585872f6cd366025a56992b70ede39bc8d322f9c22a1dc599e9f0d524cb6d2ea5ae2878ef6bed4b702807f1e1e73ebf290eb6c0eeb85c13716f626aa90d364b4904837ce05\",\n        \"signature\": \"09a1e6fedf971b3edbfaefbeb89aa539ca0b02b37e7ac4ea8920d6d4348ee0cf9a2d5e96fce517c665e7c38368baf24979249a95b70ea7436c00785f16a3ae09\"\n    },\n    {\n        \"secret_key\": \"297311ddeffec9d2be68ef7b2a20fe2d277e1d8e51648b03572ada27ec1f9f43\",\n        \"public_key\": \"6a6c28e761640c4008333aae5a3366302e2f4677a953ba482ab6fb4a1d70b447\",\n        \"message\": \"2652acfc3bdf09a599ec6786bbd94fe577cf578e0263cc68d9f57a6c83458f80acd8a75ef03040a635672b968ff2afdb288d28b9996f6415b2f3175e9ea37aeb05df81812e38a4c976eb92856cedb91a269a46fca5df9bd730fd84452b4bd93577c61f42c14113979882a86a9fe632e4756afd89816fc4670a310503fdaad2db764c3721213c3e60f29c2668d4de8f42b087f25cd56c69a4e48f134f5598cf145be638a5c2318863329061729aac91da6a191fd774880cf9cb555eec15b0044f10e5433fb46a9b8892da8f6d24f142588b70ff0b49200c506b88bed449ad10d3f92c2baeda6bbf58676c5bbc67d31f64fb12e8d5e78876d5c849fc314b2cf8010c510204c8633d0cc31856ec6a114ea8a89c48927b07a31ab842c9b8352d9367345141a99b40049d5c48e7d27cab427adefd1f0fc1136b353cb01c3def91fffee8ad91e88f4bb7d2615c0dcc95344cd01950938ecb14b8446b56a06bf2f2f65fb8735e8a7bc96bb46ce9cac71a88eb8fda5e69d69eb29aa42a016b8583893e9d7277cb1359c5687eedcd599d8a46e6c14963637db04a929f4bc79304ac2dae733b3a839eb74fbe3de5042fd655eaecb15f39b2fe16dad8a6ff8dbc054fed51282a856e9da6316fac6db5d56f77f18da8412eb377e5b1b8f4cb1354ecfe8fe8fd54e62d767a80de04cb7620229a8831dbc9ecd4578ffa2ff06b5445e440d69aabc94c47bd17f22b69f52eeae5cfcd01a5cafe0580072ae9166b95743d68c3564c5a7e46f24bc48a898a1ab2ebe63f36851d2aacfa0c4f32d993771d314e725a43d9805d1371cf723ef161d42e63ffca688d7f0e21ef5b3f9a561a6210702b85fbd1f8ca75389cc7a22739bae4ded93757f1520dc38844a1a88be8e09645059148807b933770878cb8a9ad9211317131e69324532fd0279b83185b628fc2f9e21500384693fa29f26bd1b9c301601367665f05f372dab4e3107726cd3f639ca62bf63a75f77eaa75f7136157ada2374e65fb4fd349b45e25441fd21b13e6911366b97cfb4d6ad522b850adf40c\",\n        \"signed\": \"4bf0b92c6ee4eace5e8eb10370ff9d9c68a5749d59899d04327aaa38f8f825e032e59742b37de23107a3ecdd3f7a0d08122614b78fdd37293c8d05e28f5f71082652acfc3bdf09a599ec6786bbd94fe577cf578e0263cc68d9f57a6c83458f80acd8a75ef03040a635672b968ff2afdb288d28b9996f6415b2f3175e9ea37aeb05df81812e38a4c976eb92856cedb91a269a46fca5df9bd730fd84452b4bd93577c61f42c14113979882a86a9fe632e4756afd89816fc4670a310503fdaad2db764c3721213c3e60f29c2668d4de8f42b087f25cd56c69a4e48f134f5598cf145be638a5c2318863329061729aac91da6a191fd774880cf9cb555eec15b0044f10e5433fb46a9b8892da8f6d24f142588b70ff0b49200c506b88bed449ad10d3f92c2baeda6bbf58676c5bbc67d31f64fb12e8d5e78876d5c849fc314b2cf8010c510204c8633d0cc31856ec6a114ea8a89c48927b07a31ab842c9b8352d9367345141a99b40049d5c48e7d27cab427adefd1f0fc1136b353cb01c3def91fffee8ad91e88f4bb7d2615c0dcc95344cd01950938ecb14b8446b56a06bf2f2f65fb8735e8a7bc96bb46ce9cac71a88eb8fda5e69d69eb29aa42a016b8583893e9d7277cb1359c5687eedcd599d8a46e6c14963637db04a929f4bc79304ac2dae733b3a839eb74fbe3de5042fd655eaecb15f39b2fe16dad8a6ff8dbc054fed51282a856e9da6316fac6db5d56f77f18da8412eb377e5b1b8f4cb1354ecfe8fe8fd54e62d767a80de04cb7620229a8831dbc9ecd4578ffa2ff06b5445e440d69aabc94c47bd17f22b69f52eeae5cfcd01a5cafe0580072ae9166b95743d68c3564c5a7e46f24bc48a898a1ab2ebe63f36851d2aacfa0c4f32d993771d314e725a43d9805d1371cf723ef161d42e63ffca688d7f0e21ef5b3f9a561a6210702b85fbd1f8ca75389cc7a22739bae4ded93757f1520dc38844a1a88be8e09645059148807b933770878cb8a9ad9211317131e69324532fd0279b83185b628fc2f9e21500384693fa29f26bd1b9c301601367665f05f372dab4e3107726cd3f639ca62bf63a75f77eaa75f7136157ada2374e65fb4fd349b45e25441fd21b13e6911366b97cfb4d6ad522b850adf40c\",\n        \"signature\": \"4bf0b92c6ee4eace5e8eb10370ff9d9c68a5749d59899d04327aaa38f8f825e032e59742b37de23107a3ecdd3f7a0d08122614b78fdd37293c8d05e28f5f7108\"\n    },\n    {\n        \"secret_key\": \"4db2b58144a8d2d0ec03bb9bc29b4ca893854c80b64afa4af7a9c936935ecb04\",\n        \"public_key\": \"fc5cd750e174ed718bd938fa8ed99a1b9d556ba7670f2a77daf1c720113732a5\",\n        \"message\": \"c8d1dbc936911e122cee18f92b16a39a2eef0823b227f898cdf5842b93d59fc002edb5498a20872e19554ef73999eb3a7b3e2fdd9070e1efa9228e9e93b29a868ae3799e4e572324836b1ad5aa812bf00f845bc217ebbc3fabdc4e1b6e51ef9efac2770aa0a4a11ee52ab956ac6448aa2629cb61dbb1f1edb3bde99b4876da392a6e0b9a0c31849a5890aea9522f56d015a1935015b91bf4c6a0011d2377d671c3d0d753c27f8c76e405d0230f1f4b9b88fcebba1eaf13777235e55324b7d3f81e686109d91ce689530b90d2c5c71dd18772b385d62ccbfd2e089a1b670983f60c21c4455cb9d1a0dcaa74c874e35211f8227ff7c234dff85ec0b07e368cfa50a343578395a14c68f1f89bd4ecbc172ef805e5831ec89475fcc8d685ca9255a77e3ba3c147508ec92d7bcce879af0abdd2416b67b5f50507337914f390bbe0b450b6a2f1159372c4bccea382ce3d6d9fb2515ecf7930059a0552b75f978862bf97e8325af24d1b8ce9512bfc7cef884232042341d82f9b5dad2e502ac6ac795f99dac7fc60e3b8639d0e1500dead4e78aca109957d577a13c1925d7403c1acf989a9de6711e23c67bf8722f551b774cada931b5fd973434e3b7172819883e70c52785e3b49d323d05636641158640dcf6a4c200eb2c13b1beeb2dc360352470d15386e59e6fa60367e5e7f172b21159d5ee7cab0d7f5868239858e2a93550480fe8fb4dcaf4f224c4b2ad5448791632df30e8e5fb998b35ea9aec8c934a4403aef82187ca1abf82a344d00ffb993d9ff3461d6fecdaf5d3b481e0d31153dbf6aed288c8add064e8331550141bd5f7a7e047b8607d846a6bfb72d683446a445114606250d8d2d3a8b9508bb07d4623cdf1788b5499e9cb9a1379849bfa19c9a9f4cd3d9253adffda25f47c811be833b02f3327ebba83730195d614bae6fe4e7a3830815d2af400d20a9417a095e7e8eea1044917cbe512c4018d656e2db67bb989c00e1e507623e8278d729925b84fb5c186a7bac189e6d6ab14fd7b62fdc632bebb5f77cb5cc2f707df4053099\",\n        \"signed\": \"424517aadd853ce3985759a327e7760d9156d3b27345383f0e4ad6661ee4a3724d18d820f6c557f82797beb62d2f085433744f89a2d85293796481862ef8a40fc8d1dbc936911e122cee18f92b16a39a2eef0823b227f898cdf5842b93d59fc002edb5498a20872e19554ef73999eb3a7b3e2fdd9070e1efa9228e9e93b29a868ae3799e4e572324836b1ad5aa812bf00f845bc217ebbc3fabdc4e1b6e51ef9efac2770aa0a4a11ee52ab956ac6448aa2629cb61dbb1f1edb3bde99b4876da392a6e0b9a0c31849a5890aea9522f56d015a1935015b91bf4c6a0011d2377d671c3d0d753c27f8c76e405d0230f1f4b9b88fcebba1eaf13777235e55324b7d3f81e686109d91ce689530b90d2c5c71dd18772b385d62ccbfd2e089a1b670983f60c21c4455cb9d1a0dcaa74c874e35211f8227ff7c234dff85ec0b07e368cfa50a343578395a14c68f1f89bd4ecbc172ef805e5831ec89475fcc8d685ca9255a77e3ba3c147508ec92d7bcce879af0abdd2416b67b5f50507337914f390bbe0b450b6a2f1159372c4bccea382ce3d6d9fb2515ecf7930059a0552b75f978862bf97e8325af24d1b8ce9512bfc7cef884232042341d82f9b5dad2e502ac6ac795f99dac7fc60e3b8639d0e1500dead4e78aca109957d577a13c1925d7403c1acf989a9de6711e23c67bf8722f551b774cada931b5fd973434e3b7172819883e70c52785e3b49d323d05636641158640dcf6a4c200eb2c13b1beeb2dc360352470d15386e59e6fa60367e5e7f172b21159d5ee7cab0d7f5868239858e2a93550480fe8fb4dcaf4f224c4b2ad5448791632df30e8e5fb998b35ea9aec8c934a4403aef82187ca1abf82a344d00ffb993d9ff3461d6fecdaf5d3b481e0d31153dbf6aed288c8add064e8331550141bd5f7a7e047b8607d846a6bfb72d683446a445114606250d8d2d3a8b9508bb07d4623cdf1788b5499e9cb9a1379849bfa19c9a9f4cd3d9253adffda25f47c811be833b02f3327ebba83730195d614bae6fe4e7a3830815d2af400d20a9417a095e7e8eea1044917cbe512c4018d656e2db67bb989c00e1e507623e8278d729925b84fb5c186a7bac189e6d6ab14fd7b62fdc632bebb5f77cb5cc2f707df4053099\",\n        \"signature\": \"424517aadd853ce3985759a327e7760d9156d3b27345383f0e4ad6661ee4a3724d18d820f6c557f82797beb62d2f085433744f89a2d85293796481862ef8a40f\"\n    },\n    {\n        \"secret_key\": \"c820413c2456747104662ef4dff3ac233ac4b91a76d3c4ea754490bc9b1e291f\",\n        \"public_key\": \"8993cea2f7f2806c77b3981b54bfa9bf1762151b418e5e725371ca2c04d223ee\",\n        \"message\": \"d2992f83924a594887e6ef13f2ae808fc8639c7b2c994faf0f795e36016dab7700a0ee530170f0b9fe98ab7588ce03bc50c2bae65e052647e756735b35d0b59c964e917d8c83e2f9fecc4cb05564287f0e34c9494005e25b1a8b1b942b54d89035f1b1c3c945fcc84e4a39efa2ca50959b459af74d21b6242e2f56518f70e8679257c089d26c3bb792687c923355b2c18ee2136d40cba45acb64240d9667f39dba3639b6516d4c4947573ef4ced876b5b2ea3489eaea539f557f58da204691a76e29c94b8b0538232c5f7d0bb0fdd016910431354b3e1e7ce62ad436917cd5c315a5be9b971c80f97bc9d5c156ffd64fd4e31da56083e02a0c8fce554db68674cb62700ba951752b829b03c542327412eec9ccc6a50adf47bbee15446682da2fea42048936d763060cd8f539652616dfa808d623ff777b4113652e789ec025b85e04efe8ad4c960b190bf4a5a6324d6f57c1ad22018c83cd7e7e097fc67b80269c13b4dd9701ca98f9876958ba7689c6f6f10a732a64bef22e8b98bd304d5dbf4fb1f9e4ca539a5c4aa619c44d6f58f824b2dbae77b7e83b56db5e5aa7b0ae9ce1cd10a69f04a80f1379eb0c474e4782df0e3ba6a148226bd1a662d95ee2d67c5207333cb1d54176d9e506459479029f31dcace269938f6bc562787841dcfe101f4db60bd66016e1eebb6bfbd9cd83042dd1379a464f405aaae3c11807848cc4f95c3cc6fa92ab4ea5305834eb86b873fa30ed1f7f470bf663f1a70cf9e60ab680cd1dbbd03ac0433b3d4bb482f8b344d46b3aa934b8633f57090bea5fccca6488799835f133f8bcf6e887ca59d19076d6ca19d4e28349051e016b03e9a920f4120fb523d1371d0e38467319543f127ed914b43ad062226a536582db728ccd76e983f11766a8863c2f424f65508dcb26fe0c5a800c35093960a121976e3051e2ef1a2a99c12fb7bd8bc037a439686806eb72017a071a91b3e39c90e86bc335f9bb543b127c9886738cb53806b9cb3c2594c7effc2a5920aa834be65c49f47964e89eec74728de771f3d675de9d1e\",\n        \"signed\": \"7ef70e4a14954d509f117f4bd01b220bcc192d3b5fdfc3482fbbc3b69dc068a7c4761d1bebc2317d6db74f906a155642b0a3c6592bdc72e64eac6f203fb74e02d2992f83924a594887e6ef13f2ae808fc8639c7b2c994faf0f795e36016dab7700a0ee530170f0b9fe98ab7588ce03bc50c2bae65e052647e756735b35d0b59c964e917d8c83e2f9fecc4cb05564287f0e34c9494005e25b1a8b1b942b54d89035f1b1c3c945fcc84e4a39efa2ca50959b459af74d21b6242e2f56518f70e8679257c089d26c3bb792687c923355b2c18ee2136d40cba45acb64240d9667f39dba3639b6516d4c4947573ef4ced876b5b2ea3489eaea539f557f58da204691a76e29c94b8b0538232c5f7d0bb0fdd016910431354b3e1e7ce62ad436917cd5c315a5be9b971c80f97bc9d5c156ffd64fd4e31da56083e02a0c8fce554db68674cb62700ba951752b829b03c542327412eec9ccc6a50adf47bbee15446682da2fea42048936d763060cd8f539652616dfa808d623ff777b4113652e789ec025b85e04efe8ad4c960b190bf4a5a6324d6f57c1ad22018c83cd7e7e097fc67b80269c13b4dd9701ca98f9876958ba7689c6f6f10a732a64bef22e8b98bd304d5dbf4fb1f9e4ca539a5c4aa619c44d6f58f824b2dbae77b7e83b56db5e5aa7b0ae9ce1cd10a69f04a80f1379eb0c474e4782df0e3ba6a148226bd1a662d95ee2d67c5207333cb1d54176d9e506459479029f31dcace269938f6bc562787841dcfe101f4db60bd66016e1eebb6bfbd9cd83042dd1379a464f405aaae3c11807848cc4f95c3cc6fa92ab4ea5305834eb86b873fa30ed1f7f470bf663f1a70cf9e60ab680cd1dbbd03ac0433b3d4bb482f8b344d46b3aa934b8633f57090bea5fccca6488799835f133f8bcf6e887ca59d19076d6ca19d4e28349051e016b03e9a920f4120fb523d1371d0e38467319543f127ed914b43ad062226a536582db728ccd76e983f11766a8863c2f424f65508dcb26fe0c5a800c35093960a121976e3051e2ef1a2a99c12fb7bd8bc037a439686806eb72017a071a91b3e39c90e86bc335f9bb543b127c9886738cb53806b9cb3c2594c7effc2a5920aa834be65c49f47964e89eec74728de771f3d675de9d1e\",\n        \"signature\": \"7ef70e4a14954d509f117f4bd01b220bcc192d3b5fdfc3482fbbc3b69dc068a7c4761d1bebc2317d6db74f906a155642b0a3c6592bdc72e64eac6f203fb74e02\"\n    },\n    {\n        \"secret_key\": \"6769cc8e125617c22ce57237a4fca1507f941234661df74328d04ab62ef86c47\",\n        \"public_key\": \"05112ca60baff79b4916c1bee2b9390c047af08c35ebb3c381b9748d1dd4c4fd\",\n        \"message\": \"685489739b98564749587ff1ac96ba682da30b40a4de24f54ec8b083dda45333162167cb3f97b2c7314ce7a3f3f3d319ccc35bb6a9f0077d563161e281469cf08968d9dcf7ae5fff830a5db00bc38010e6662d494f3c8647c4f70ce2d29a9da84610a080b5759a3b582052dfde66e4a7fa5fb27f065073fe723d83701d5bac06ca43b46d1e58097670c194a13af8b573a3791a9661557cbc042757ab8add0ef7cf4f35435a4212353fcb3c203c73dbc9d26852d0e91732e3621ce828929cdca4d9192048751922ed225eab2900cff971a2a2d342463648bbb1944319a8ef6d43db62480fbf1d7257d22694539793f25c927917caab25c1193a2d2b23bb5cb8569aefff4f0ca423d19bbd46fc5ef7524ff8cb706ffc47076509c05a8158af77f98df6a9b5cb3244aba4b5c5f9ce597e7d29ba07013dcac1911b6de7113c736a4005c459992979019a45b2dd802a07660909eb4ce205408170d82545dacba8686dbde927dbc9c7d962058e9a95ea66b8dfd3ea435357a93c73948cd355f6ac6552323f17c2a678662bc0e9726ad5a5251dd27647404cbfe61ceaafdcfc08a475ffd87cb7f597e56ac1670409dd9408ae4770420c6e5e6dd8e748fe03a72dc12803d02771d92f47e6e717ccc144fc037275b6f745dd30da1a45d29db6d9073eee5009cfd5462733414a495f349db0b6dbf2cea9ccd57238ed5ee91ad8bc86179ad5695a85a50484e617751de5ef7a7d8a8db950a98a6b7f7dee9d42a5df692fccf555c940dc39cf2eac48cb9d15cda14dd2a7ecc0b76ebec68ad4177d1117e07766c48590d43ca7662868eb9790ac29f4f2392b9a93f89759e7ba546b925bd86f807d8d16c7e637dcc666e90590bf430d986a67f1b0c7c2c94930845869ed8d8adde18fc1887456881b4b26b53dcba7a526f0eca14e8bb689d66f0aa1b253c3dcfcf59540d5d2f5ad617f52c30938a5a92ea385077d75aa4ac07afc2b35fb8c1d5e78eb295fc20fe37c41ac06959d3a1797843ad7056c1b412dd0b480aa3b39bcc20587d9a0fef92c6c950ebc5bb8e142\",\n        \"signed\": \"d39d853d2c2c5d21b5871ea5a75c041048d93a47dc599a5fddc0856285ce636fcdfd8564083d06ff284a524bc633cfdfc3b037163d674cb9bb5ba3bc25bed00e685489739b98564749587ff1ac96ba682da30b40a4de24f54ec8b083dda45333162167cb3f97b2c7314ce7a3f3f3d319ccc35bb6a9f0077d563161e281469cf08968d9dcf7ae5fff830a5db00bc38010e6662d494f3c8647c4f70ce2d29a9da84610a080b5759a3b582052dfde66e4a7fa5fb27f065073fe723d83701d5bac06ca43b46d1e58097670c194a13af8b573a3791a9661557cbc042757ab8add0ef7cf4f35435a4212353fcb3c203c73dbc9d26852d0e91732e3621ce828929cdca4d9192048751922ed225eab2900cff971a2a2d342463648bbb1944319a8ef6d43db62480fbf1d7257d22694539793f25c927917caab25c1193a2d2b23bb5cb8569aefff4f0ca423d19bbd46fc5ef7524ff8cb706ffc47076509c05a8158af77f98df6a9b5cb3244aba4b5c5f9ce597e7d29ba07013dcac1911b6de7113c736a4005c459992979019a45b2dd802a07660909eb4ce205408170d82545dacba8686dbde927dbc9c7d962058e9a95ea66b8dfd3ea435357a93c73948cd355f6ac6552323f17c2a678662bc0e9726ad5a5251dd27647404cbfe61ceaafdcfc08a475ffd87cb7f597e56ac1670409dd9408ae4770420c6e5e6dd8e748fe03a72dc12803d02771d92f47e6e717ccc144fc037275b6f745dd30da1a45d29db6d9073eee5009cfd5462733414a495f349db0b6dbf2cea9ccd57238ed5ee91ad8bc86179ad5695a85a50484e617751de5ef7a7d8a8db950a98a6b7f7dee9d42a5df692fccf555c940dc39cf2eac48cb9d15cda14dd2a7ecc0b76ebec68ad4177d1117e07766c48590d43ca7662868eb9790ac29f4f2392b9a93f89759e7ba546b925bd86f807d8d16c7e637dcc666e90590bf430d986a67f1b0c7c2c94930845869ed8d8adde18fc1887456881b4b26b53dcba7a526f0eca14e8bb689d66f0aa1b253c3dcfcf59540d5d2f5ad617f52c30938a5a92ea385077d75aa4ac07afc2b35fb8c1d5e78eb295fc20fe37c41ac06959d3a1797843ad7056c1b412dd0b480aa3b39bcc20587d9a0fef92c6c950ebc5bb8e142\",\n        \"signature\": \"d39d853d2c2c5d21b5871ea5a75c041048d93a47dc599a5fddc0856285ce636fcdfd8564083d06ff284a524bc633cfdfc3b037163d674cb9bb5ba3bc25bed00e\"\n    },\n    {\n        \"secret_key\": \"1df7acfb963304e51ec471caf181102556783cb7d91ead30bdc2534d078a1488\",\n        \"public_key\": \"05a31ffc70e4e3569fc2be110c643ad5f087913c7aa476dcd8d6e4bc7ec22d24\",\n        \"message\": \"b0c3eeb57f14606ab7abeab2ee0573843ca22e6db2fdf2c9064cea5198dc5830eb158da8e2daa88857af8b8eefccf0c26c3ec0f330e92cff06bc05a29bfc99f940b61f3cfb2964b337097a6550a3e9a328c85be6f160d2c0a57ff6f1b3c5ffcca89089425ab6be0172e175baf40cf12b24a815f70f29a3a4cd0a6a132f120097752f4bc743ede08f5f21d42f282f7671f7783e27b2a8e2c14692f1e0e5de82855dabf98a1a63976006ffbfe5f5a579b460e26d06bd542842a5f9261bbf260451d2321c508932013cc6e904f79b5e4686d033e12c7bbd7eb1c92379c5ec341bf6457a3f17264a7c278b27501ecaedc361eba844442342b4b10fa94d265865116acf43fcbec965d2ab4bbbe614c4f90ab6b3e0d5383fa04988bfbb260307dde22d84098b6331d155141a927bb78d664b341d2f2a93e291cf79baaecd2612f6b104f3fc81373a7c6a045b5924bf950cd542f7b7accef3aa7d725de053055d951bd768111392596638ae097170f4492ba50a468f8e347763db612d3c7de7e56459b26ee029c630827a353aee73de68d6d72b27afd75d22164527945c7226844fab15b8dcc914349e3141c61316adc894dedcdc843984d9c7feae39db332dc393e9e8961bbde071c3d2858b3cb5f33b164a15616c6fe1bbc24a35f21336d261c5d8cf759e27e22c9101c4aebde3e126cf646ca7b2e03128095c5976bf3f6e491af0f0b640c7310966ac59c59fbc5bfe0548f88ee61ad9ec40c1c06dd29d794c44a3ea22c3d4762622ec1e8b333e45074db93741fda193c911f6db5879e55ee36ef602614ae64a5cde9d8306d22fbc4ae9c881a594bde6796125fcb628b9f3b6fb3ffd511b353f146a27272afd3e5d28b77f58a67f1fd27285c25ecc1ccf64e38d21f3b9ff22e00ee900629ef1a63e713f258883dd911f30c0d398b74bd797149be5e2696722da09d52d4ebf3c673929d298aac34ce05bea08ea9a424e93459c2eb8fc2222c31cc13d803b90a8a70bcd0a30c209211dc2ccc85b0bcd4582c695f58d80bf6ec471a2505f68847a75f6e911fd87\",\n        \"signed\": \"b181938de10142f32407b4e786cddde932eb11dbc0bf0e5ac509fae7a5bcc32961fe3448f912c8500fc6db4e1d3262a83c9dbe769bb8c3a761000fe36c0d7104b0c3eeb57f14606ab7abeab2ee0573843ca22e6db2fdf2c9064cea5198dc5830eb158da8e2daa88857af8b8eefccf0c26c3ec0f330e92cff06bc05a29bfc99f940b61f3cfb2964b337097a6550a3e9a328c85be6f160d2c0a57ff6f1b3c5ffcca89089425ab6be0172e175baf40cf12b24a815f70f29a3a4cd0a6a132f120097752f4bc743ede08f5f21d42f282f7671f7783e27b2a8e2c14692f1e0e5de82855dabf98a1a63976006ffbfe5f5a579b460e26d06bd542842a5f9261bbf260451d2321c508932013cc6e904f79b5e4686d033e12c7bbd7eb1c92379c5ec341bf6457a3f17264a7c278b27501ecaedc361eba844442342b4b10fa94d265865116acf43fcbec965d2ab4bbbe614c4f90ab6b3e0d5383fa04988bfbb260307dde22d84098b6331d155141a927bb78d664b341d2f2a93e291cf79baaecd2612f6b104f3fc81373a7c6a045b5924bf950cd542f7b7accef3aa7d725de053055d951bd768111392596638ae097170f4492ba50a468f8e347763db612d3c7de7e56459b26ee029c630827a353aee73de68d6d72b27afd75d22164527945c7226844fab15b8dcc914349e3141c61316adc894dedcdc843984d9c7feae39db332dc393e9e8961bbde071c3d2858b3cb5f33b164a15616c6fe1bbc24a35f21336d261c5d8cf759e27e22c9101c4aebde3e126cf646ca7b2e03128095c5976bf3f6e491af0f0b640c7310966ac59c59fbc5bfe0548f88ee61ad9ec40c1c06dd29d794c44a3ea22c3d4762622ec1e8b333e45074db93741fda193c911f6db5879e55ee36ef602614ae64a5cde9d8306d22fbc4ae9c881a594bde6796125fcb628b9f3b6fb3ffd511b353f146a27272afd3e5d28b77f58a67f1fd27285c25ecc1ccf64e38d21f3b9ff22e00ee900629ef1a63e713f258883dd911f30c0d398b74bd797149be5e2696722da09d52d4ebf3c673929d298aac34ce05bea08ea9a424e93459c2eb8fc2222c31cc13d803b90a8a70bcd0a30c209211dc2ccc85b0bcd4582c695f58d80bf6ec471a2505f68847a75f6e911fd87\",\n        \"signature\": \"b181938de10142f32407b4e786cddde932eb11dbc0bf0e5ac509fae7a5bcc32961fe3448f912c8500fc6db4e1d3262a83c9dbe769bb8c3a761000fe36c0d7104\"\n    },\n    {\n        \"secret_key\": \"7ed87c36dfdbae60c940a3b325c19fded814d76a544820a32f286a5c0ad71d72\",\n        \"public_key\": \"3c4ac510b36222c252a2dc1afcb40fb0eb85bca90391196a5883aa2cc912b2df\",\n        \"message\": \"62d313912abbb006b7774a6737714a349970ce0421112f400463d3db0e2f7f128d7b96939f43c1e7107b5118a77c119683d866b7e3d72ac21f6b4272b4be9289b6556fe31b6051a0b42ed5ea0cf347696d30fb8bff6b8b572719de19a231cc85459a990c37801f0837186cefbb5521569666967cd4243d7307f1b0b24c8e2b9b692317304fbe3dd0a263650191b35216f52916573af90524f91db1a92471d758c92dc6d14d1a4b26f41b40403ca87dcfabdca47b9fc2533578f161f3b0199b5c698e080704b21c9e615269fcd0d40439ed8bc3bdfbc9afb44c11fa89275f0eaaa5d08fa959d6378d0db89910d48f2d86a1ebfc5cbf10eb2d5aadf51bbd8344ff8bbb5b8afe05a45011b5e4b72eb864ad263e8a03a6c7f98aeeb354f730a318aa30fb56d33d80748c98ebec15878ccf3ce822f69d3456843c400dc56b481a95e688b8a4735bf3843f5833dda0efe09e7175b567c661387afd2ebc079a48e34967ec97b927dfa581888f231a98a7ed33103bfa8e8f9ba6513527900b39b86231da7911a2fc935888a75f1129584afff2025249c4188f09052f85687706d05e299144d40de8898b7c8b2dfef0c3708573d8b0563a6bd0a504c0b6745702b1b57121c6f040aff27198948ba69c21253a28d39eba726219beda1f8209fb83e9adb07ad409fbd6d25565889ab45123f9d945ecd7d9ca7028ece092e35fbb7cb3f328126efddac5d859f2b2c6eb090133690e20c17deaf3882685f07e9ed2653b803b9b383b70748a1fa92c86f86d6c47ea87b10b12e363ba508060f47ce2a2f3b6a3eefcd4dacfc71c41f436fe0c2bc34d4baad49574e7443c126a589f6ef7bca44954f0bb28ec7151b0511c23c6bc42d5e85983ec16bb5f50a382d688150a49609cbde5698e86dcbf0212c2292299dc4dcf87429f6cd2eec80948ce867e25c94584cdc64b099029eb854edc26ea21421eff48cf4e41f49e2d89478def06c42bea220a133e50f5c74464c7e73fb1c1a77c507cf6cda85be402b7e6d6d21e810d6d0b5972b9fe77e54e74aee1f3bbfd6e7de6b5c0\",\n        \"signed\": \"579b38124bd0591a597cc9a389127ceaf55156077363edb811d0b65552acfcc677b272942199ca25ab790de6e084603ad1052ec210cf6fcb1417289067ce3c0862d313912abbb006b7774a6737714a349970ce0421112f400463d3db0e2f7f128d7b96939f43c1e7107b5118a77c119683d866b7e3d72ac21f6b4272b4be9289b6556fe31b6051a0b42ed5ea0cf347696d30fb8bff6b8b572719de19a231cc85459a990c37801f0837186cefbb5521569666967cd4243d7307f1b0b24c8e2b9b692317304fbe3dd0a263650191b35216f52916573af90524f91db1a92471d758c92dc6d14d1a4b26f41b40403ca87dcfabdca47b9fc2533578f161f3b0199b5c698e080704b21c9e615269fcd0d40439ed8bc3bdfbc9afb44c11fa89275f0eaaa5d08fa959d6378d0db89910d48f2d86a1ebfc5cbf10eb2d5aadf51bbd8344ff8bbb5b8afe05a45011b5e4b72eb864ad263e8a03a6c7f98aeeb354f730a318aa30fb56d33d80748c98ebec15878ccf3ce822f69d3456843c400dc56b481a95e688b8a4735bf3843f5833dda0efe09e7175b567c661387afd2ebc079a48e34967ec97b927dfa581888f231a98a7ed33103bfa8e8f9ba6513527900b39b86231da7911a2fc935888a75f1129584afff2025249c4188f09052f85687706d05e299144d40de8898b7c8b2dfef0c3708573d8b0563a6bd0a504c0b6745702b1b57121c6f040aff27198948ba69c21253a28d39eba726219beda1f8209fb83e9adb07ad409fbd6d25565889ab45123f9d945ecd7d9ca7028ece092e35fbb7cb3f328126efddac5d859f2b2c6eb090133690e20c17deaf3882685f07e9ed2653b803b9b383b70748a1fa92c86f86d6c47ea87b10b12e363ba508060f47ce2a2f3b6a3eefcd4dacfc71c41f436fe0c2bc34d4baad49574e7443c126a589f6ef7bca44954f0bb28ec7151b0511c23c6bc42d5e85983ec16bb5f50a382d688150a49609cbde5698e86dcbf0212c2292299dc4dcf87429f6cd2eec80948ce867e25c94584cdc64b099029eb854edc26ea21421eff48cf4e41f49e2d89478def06c42bea220a133e50f5c74464c7e73fb1c1a77c507cf6cda85be402b7e6d6d21e810d6d0b5972b9fe77e54e74aee1f3bbfd6e7de6b5c0\",\n        \"signature\": \"579b38124bd0591a597cc9a389127ceaf55156077363edb811d0b65552acfcc677b272942199ca25ab790de6e084603ad1052ec210cf6fcb1417289067ce3c08\"\n    },\n    {\n        \"secret_key\": \"6a29f81b8d9aa48a1b23364eac8f6a4bdd607a84cfe8e88d90175d80643a58a8\",\n        \"public_key\": \"4c3be3a2a8425ff31c3a0db4a52a0cb1416ceb48cc3e4c28a4f2284ab3460715\",\n        \"message\": \"7876a3f4eb69bb7e54e9ff954ebd3b10b93a4c1afeae92fa03c103cb6313a201c5b33a9a7223755cb510e25ec582b54e81b84956f6c53f1f08a63bf0c4a261af450e523fe8f61ddb3c0eeab8751072688801b2a473b71a2e38708da68c2f37925cb05a20c4283b3af97b6f0ba65a5403554375e215d9e3aa1b0f9fdb0f849923edbdaa0ab481c545a5df8f51d1f68b223507ea0eccfaebb5fccf5e3dfa65a44eea504568a88180a060bb06c51557b81e667b4b04e3210fa4c379876c49f3e56bf2be1cf519a7418393d240dc8a224c6c38ac2ab9d8fadfc5362030c7930c3ce7795b147c26c8a28c653429d90a173a86a8b18a009e62aef6eca95d39bdbe45647778a2532a415ae19bad231129127842fe1d0f11fab4a1cf0b17e498cd5952c939e090090287b144895dff00cec8d6aedaf62481a41783e021082ce352063e62811fd99990104d8a46cdcaee2bab458e5247fb023e923330a428c7bcfd20b08f520e8946dd658347352ae0c4be73c3d5eccd11149f3ab7b8052cfd95c35d4164546f5d8f377517a7f432c0d5563a7bcc7bd119d3421dfebaae844599b29b383bb8d5dbf140d9bd47a078b7ae7c6aa87b1e29236c9fcfd654b7f809794cccb261588e18dec6c4046a934067d0dfa03791d03d83b718ac4d24dce785a3028de0c9592dba7c5c5845184afc9c0dfcf94095860f0eb802ebea20178e78b5642e5dd61c33b39769052d9d854dce902f476e21f96c650b463b7bc3d0ff2996b65c57831f8b7c0fb915f4dd7226ac955cbc7dfb03f9b758dd3e0dfce2e0e580c91a30c783ff567b17f12dfd5d3137646e20011cdcaae11102dc716886cbf123c09488b173636abd54e962caeec97d5eb940682e703b730f61562cd14b9e6561b5e93f60cd0e1e86d1a1b4719c5b508242bd6b2d9a548f59bbb875075969ef2032f3196b8aeccc45a44d9dbdaf878ed16f1d855e8918ed65a45ee5c7fa32a1ec6932a159cfb50ffc87be06dfcf7228ae8870ccd357fc656e33fa4b6b8b7d1a7215553cabacc70a39c980b971e51a17ed6318b43b29bb\",\n        \"signed\": \"df09cb9b878d3dc9e542dbac28943e28e41dcecb92cb7ea44009885e46499743330561ba1d36aedd467675fdca2baaa4701b6fad979fd839c470d13c82daa9057876a3f4eb69bb7e54e9ff954ebd3b10b93a4c1afeae92fa03c103cb6313a201c5b33a9a7223755cb510e25ec582b54e81b84956f6c53f1f08a63bf0c4a261af450e523fe8f61ddb3c0eeab8751072688801b2a473b71a2e38708da68c2f37925cb05a20c4283b3af97b6f0ba65a5403554375e215d9e3aa1b0f9fdb0f849923edbdaa0ab481c545a5df8f51d1f68b223507ea0eccfaebb5fccf5e3dfa65a44eea504568a88180a060bb06c51557b81e667b4b04e3210fa4c379876c49f3e56bf2be1cf519a7418393d240dc8a224c6c38ac2ab9d8fadfc5362030c7930c3ce7795b147c26c8a28c653429d90a173a86a8b18a009e62aef6eca95d39bdbe45647778a2532a415ae19bad231129127842fe1d0f11fab4a1cf0b17e498cd5952c939e090090287b144895dff00cec8d6aedaf62481a41783e021082ce352063e62811fd99990104d8a46cdcaee2bab458e5247fb023e923330a428c7bcfd20b08f520e8946dd658347352ae0c4be73c3d5eccd11149f3ab7b8052cfd95c35d4164546f5d8f377517a7f432c0d5563a7bcc7bd119d3421dfebaae844599b29b383bb8d5dbf140d9bd47a078b7ae7c6aa87b1e29236c9fcfd654b7f809794cccb261588e18dec6c4046a934067d0dfa03791d03d83b718ac4d24dce785a3028de0c9592dba7c5c5845184afc9c0dfcf94095860f0eb802ebea20178e78b5642e5dd61c33b39769052d9d854dce902f476e21f96c650b463b7bc3d0ff2996b65c57831f8b7c0fb915f4dd7226ac955cbc7dfb03f9b758dd3e0dfce2e0e580c91a30c783ff567b17f12dfd5d3137646e20011cdcaae11102dc716886cbf123c09488b173636abd54e962caeec97d5eb940682e703b730f61562cd14b9e6561b5e93f60cd0e1e86d1a1b4719c5b508242bd6b2d9a548f59bbb875075969ef2032f3196b8aeccc45a44d9dbdaf878ed16f1d855e8918ed65a45ee5c7fa32a1ec6932a159cfb50ffc87be06dfcf7228ae8870ccd357fc656e33fa4b6b8b7d1a7215553cabacc70a39c980b971e51a17ed6318b43b29bb\",\n        \"signature\": \"df09cb9b878d3dc9e542dbac28943e28e41dcecb92cb7ea44009885e46499743330561ba1d36aedd467675fdca2baaa4701b6fad979fd839c470d13c82daa905\"\n    },\n    {\n        \"secret_key\": \"ef12df479d983ad96e8ba65330b36d49aadb983164e1c0b452b560ded1d08d60\",\n        \"public_key\": \"f761cf2826927a7cda8cb04faa2c59f8425a8f7d398f76e867021c951f073809\",\n        \"message\": \"e58f34daea755ac4e41333d6f0ed0135f7dbce50309bb1956bc71acb12c77067a647ffd86aa5870c0c0007e8f995a22b88c467de225444544201c557495e253e3319cc5ca376d3e7cc1eb467346e52ad956a6fa733720b17117b5b7585e4d559409aaefa95580f91e502015f497c5cdcb7d4d561f544efa35c1e2a53b72bddeceec2d1050f177d480f687405664dfddec06eee4bd147a912fdbf74f2a95d1fd1e11268694ce4d4ec4fffd6ddb3254d360f236fab4d1a17f8d0d1a511f944692f239639ae03d64facec6538427ab71f7127f4a276f9bc45bba611dfcce6446cc13968976c8bb6d6fe2106d705922dcac956966a76d48f2aff4b86514e39a67e1643fcc321858024e693189833c8ad59b4b625298ebafe64626b480f326f1340723cb3d383f4fccbfc237a3f4c4f7ecf0ba436b32c2fe35179da93111b48cc9ea24202bdc1b2fb60a4319dfd9864470f73f54137206e0bf007f5ae88a88747008a60f4789ad167724f179c02b63aed002573d28a6bcf88e07ce8daea5d5f1acf487b4c5c16c2bfe11231ea5ea763e8f332cc73da1b2f8c198ea8173fd33d4b2ae69e5d4d1aadddf2fd821b85be45151962d1f99df81308618852ad7cf41d72da08a1b39df7d8b994b4ddff37f9dfe8f38ce30e91061d95d58f7ae826b02385272ec09f01a7b3e4b391d09bced665dad69505b419da8481bc3792bf8b8e7ad64b63f245666c8c32fd5c1b1b48c9951e1c21a1eb5f507cff137cfb862c2cc98766e878c930a083828c9d8db18bf16716685f39d6572a8ca8b2a514f77003d4e75bc154aebf14103778f365b1c3f03541ddbd07d6e23e56762d971eb02983e93c4e01ba4b8a2178928c4337d302f31c9ccb75b249a82dc96821e95a03ab6b770df2c3dfdbf1fe9773f8bc1bc5b3afa0440b102578f3d213c8d019cff124f75ce4accc8c667feb27c751a6120074813104e0cd070c9f5e451dccff4c80d71107c975abfac07d4d270c727d8a2fec349b533968e271892d2b62c125fb7974603c305ea3bfa30fb610fc5a23eb68a8406444391a521337\",\n        \"signed\": \"4c8010866d9115f05293b934cac68104cc2c3437568cb9d5c570b1a8bee706603075537033bd708a9c9f3d1e2519a915b1c4ae4ccddfcf0ed0c049d342a02e02e58f34daea755ac4e41333d6f0ed0135f7dbce50309bb1956bc71acb12c77067a647ffd86aa5870c0c0007e8f995a22b88c467de225444544201c557495e253e3319cc5ca376d3e7cc1eb467346e52ad956a6fa733720b17117b5b7585e4d559409aaefa95580f91e502015f497c5cdcb7d4d561f544efa35c1e2a53b72bddeceec2d1050f177d480f687405664dfddec06eee4bd147a912fdbf74f2a95d1fd1e11268694ce4d4ec4fffd6ddb3254d360f236fab4d1a17f8d0d1a511f944692f239639ae03d64facec6538427ab71f7127f4a276f9bc45bba611dfcce6446cc13968976c8bb6d6fe2106d705922dcac956966a76d48f2aff4b86514e39a67e1643fcc321858024e693189833c8ad59b4b625298ebafe64626b480f326f1340723cb3d383f4fccbfc237a3f4c4f7ecf0ba436b32c2fe35179da93111b48cc9ea24202bdc1b2fb60a4319dfd9864470f73f54137206e0bf007f5ae88a88747008a60f4789ad167724f179c02b63aed002573d28a6bcf88e07ce8daea5d5f1acf487b4c5c16c2bfe11231ea5ea763e8f332cc73da1b2f8c198ea8173fd33d4b2ae69e5d4d1aadddf2fd821b85be45151962d1f99df81308618852ad7cf41d72da08a1b39df7d8b994b4ddff37f9dfe8f38ce30e91061d95d58f7ae826b02385272ec09f01a7b3e4b391d09bced665dad69505b419da8481bc3792bf8b8e7ad64b63f245666c8c32fd5c1b1b48c9951e1c21a1eb5f507cff137cfb862c2cc98766e878c930a083828c9d8db18bf16716685f39d6572a8ca8b2a514f77003d4e75bc154aebf14103778f365b1c3f03541ddbd07d6e23e56762d971eb02983e93c4e01ba4b8a2178928c4337d302f31c9ccb75b249a82dc96821e95a03ab6b770df2c3dfdbf1fe9773f8bc1bc5b3afa0440b102578f3d213c8d019cff124f75ce4accc8c667feb27c751a6120074813104e0cd070c9f5e451dccff4c80d71107c975abfac07d4d270c727d8a2fec349b533968e271892d2b62c125fb7974603c305ea3bfa30fb610fc5a23eb68a8406444391a521337\",\n        \"signature\": \"4c8010866d9115f05293b934cac68104cc2c3437568cb9d5c570b1a8bee706603075537033bd708a9c9f3d1e2519a915b1c4ae4ccddfcf0ed0c049d342a02e02\"\n    },\n    {\n        \"secret_key\": \"f731317cf5affe58704c4d9497ae860bbf739d0fd96b7c02efb6777b3c858a19\",\n        \"public_key\": \"d7d638aecce1461e314255aa29d9a6b488aea1396e9682695a470eff23f3ed84\",\n        \"message\": \"16f51c59e9aefc26b0da5e0085eb2e2f1f856def9725769e3af12f860905ae133f65074da76dbf25c67f6257d2dc66c05f9b31ae177b69929fc183b588c519bca14796a0896d2905fd942d7ab4a3fd9541a5529f729c5851419b5fbef7b134d6762eb97e8a951a8ff52aa0d7e67444d06b07aa55e4eb9ab892f47bfd111df5b62f6f3fd1a5ed84125feebb77da637c05d5265ced113dfe8782dbd1cecd2c6c032b8fa8855b3ae78de74faa5aa20a761463c2a30be66bd38cdec75f8957cb94c113a45d546daf475d89aa1482f8d2803a23c939202015a08e94b132728fbe8f6019d7168a08a5930170e5639d110e4739db85e61e64495944b5423a74ad5a8a0a510612ece655ce18864051525b908e0b19290abe8b1182c48c700d350515fd349956e8087327f30b6fc3f131c2144abb3f0e9ca331172b35064a82811a68e2cf36b43e3ad2e8dfa5b1cef50e2a60293fc5f635c9a9998d8c1ad296e7c78fc0582022d63067186b65e764828cc0f5f7632d5eef863e6c6d90e38ccc87d7b747fac8491d632cf7f54b9a9eed16eebec01b6cc33d2463f7f950d828b55ee3f77cbe974f48948eb757aed4e0dbb00ad95ee01323486eba3c8da886ed7f57bb400d63a1b2ebeaa2e70adf0379e3393001ba626c0dd54b7f0c9a25aae6c9875d4e7622f3ed428fb3124b29c5db9a7ef16ebddd6805f095f5e769823c43f262868ff43e3e0525746d9497af124a01dff61ec718af3b5bb746fcc08aebd16684d456ae7932ff5ed7d6b0f1b25c7adeef598b5d58877590ac1dc05975156796998774081e5b66822a94a6a802c3a2cd9f489e1628aaf4652be1184b0fc7c5ee7f97ce08b9233b4b83d9367be5f4aae9782593a35265154dea4c375c16f0caf6dc4594d2bdbfc3375bb2a0432c482f13941ce2aaab4d83e74d116f5de4ab28f8dc3d1cd19d271e56e10398bd1df5c870fcbf93a7d1df3939547c107bfd90643f6f5001ae7e06397ae1a271bb82a1f38e097bec667466b80ee3e50dd4fc9d5d54f18faf7a5b55a8834594ef0cb7e508bbd28f71fd34235bbfd3\",\n        \"signed\": \"2a4fea98f9240171a1823f2f69352062672e6c6e6652d388a87714d647995df75b6e1ed1746af2adf4e806135d60754e60fea032128e35abc1f1615181125f0b16f51c59e9aefc26b0da5e0085eb2e2f1f856def9725769e3af12f860905ae133f65074da76dbf25c67f6257d2dc66c05f9b31ae177b69929fc183b588c519bca14796a0896d2905fd942d7ab4a3fd9541a5529f729c5851419b5fbef7b134d6762eb97e8a951a8ff52aa0d7e67444d06b07aa55e4eb9ab892f47bfd111df5b62f6f3fd1a5ed84125feebb77da637c05d5265ced113dfe8782dbd1cecd2c6c032b8fa8855b3ae78de74faa5aa20a761463c2a30be66bd38cdec75f8957cb94c113a45d546daf475d89aa1482f8d2803a23c939202015a08e94b132728fbe8f6019d7168a08a5930170e5639d110e4739db85e61e64495944b5423a74ad5a8a0a510612ece655ce18864051525b908e0b19290abe8b1182c48c700d350515fd349956e8087327f30b6fc3f131c2144abb3f0e9ca331172b35064a82811a68e2cf36b43e3ad2e8dfa5b1cef50e2a60293fc5f635c9a9998d8c1ad296e7c78fc0582022d63067186b65e764828cc0f5f7632d5eef863e6c6d90e38ccc87d7b747fac8491d632cf7f54b9a9eed16eebec01b6cc33d2463f7f950d828b55ee3f77cbe974f48948eb757aed4e0dbb00ad95ee01323486eba3c8da886ed7f57bb400d63a1b2ebeaa2e70adf0379e3393001ba626c0dd54b7f0c9a25aae6c9875d4e7622f3ed428fb3124b29c5db9a7ef16ebddd6805f095f5e769823c43f262868ff43e3e0525746d9497af124a01dff61ec718af3b5bb746fcc08aebd16684d456ae7932ff5ed7d6b0f1b25c7adeef598b5d58877590ac1dc05975156796998774081e5b66822a94a6a802c3a2cd9f489e1628aaf4652be1184b0fc7c5ee7f97ce08b9233b4b83d9367be5f4aae9782593a35265154dea4c375c16f0caf6dc4594d2bdbfc3375bb2a0432c482f13941ce2aaab4d83e74d116f5de4ab28f8dc3d1cd19d271e56e10398bd1df5c870fcbf93a7d1df3939547c107bfd90643f6f5001ae7e06397ae1a271bb82a1f38e097bec667466b80ee3e50dd4fc9d5d54f18faf7a5b55a8834594ef0cb7e508bbd28f71fd34235bbfd3\",\n        \"signature\": \"2a4fea98f9240171a1823f2f69352062672e6c6e6652d388a87714d647995df75b6e1ed1746af2adf4e806135d60754e60fea032128e35abc1f1615181125f0b\"\n    },\n    {\n        \"secret_key\": \"498e5a21a9b0c347ba83a47ac10069457f5783c2e1e6e4640045e594b1c69332\",\n        \"public_key\": \"fb3948c81199569105cc1b7d9ceb3b41a343bb00575538592e0984f4f4710abe\",\n        \"message\": \"e4fbea864aa51190826645d2f772cb0f9eddd3034473fa3177c7af9a5d41e1a73ad5784c7096559fcddb7b7c85891cf24e82c588d74774ffcac0c6b4eebc2f3fa43e9d45f259d67564030cfeeab9236c665b650af0c92c875189f5f9383504b15360a0b9a5a00da31f635b96f6c73ef47b6b06f02811d1d19c2e8e53550ce22e42ec50a1eb2ea2f4cd03c442d4aa436894238ceb1835fe99b240358aa0562c249698a3f123c2c17e591010bd6fdfcbd7dbe70b04520502ece37a9a1dfa1ae3370417b004217a5b8fe9903c9a3b9f4b6d5c46c0ed0c538cec22f2dfcb2a280a42adc489cf2e062912be9928f0c060891e432091177526f1b3a968069d4a57ade828559810ae0360681ff99329fa0f59e7e59cdf87f9f33c40e97031b9f81d48fc12286efbb3d4e5a62ef57bc0d52d533b99c5106aa79cfe1793a908518596c383483ec49ff98ec557bfff7490a46daf6714f2c2c32f57932ca0d730f03f381d69decdbd9a7a6d4afc62406543c8ebe90ac76e6afabdb82492a206a369e04286d313e11107d8cd9b4bf68f815dba4e990b049d79216d3653138342cd118b130f66b006f3d89ac3cf89837048b0f8a62d94051d2eab891ac5f47888879d88e546676d1daeeb4d175d3f04a9d74ffcdd47746016f84ad0d112afb59ad12187e94f22535d77e9e0516fa42185c197ba774b393227f741fe68273f423fb0e0e0474bfdaf2da78aeb1cd5b98c1dc0832124742a4754125fc78b19c559a5b3f7711e068c440cc0469a1cfa5c1864be18735aa8bcd406c4371eb857754d908bf379b91fcb24e34396bf87c19a04a83d59dae71f3f3839829d06221301ef595696e719d56b79520a0e509929833b1d804a6a0ea40400bb45028ce5d36933883e17406e27a8109057b1a1a5e5da210a6921994f467ab41aa8f0d88775a8a8ebb4ec77d7c80e45a7bb422a4c00c90583911465e6b5f0fdcdeab72871ca542e1d1a2ca94df4ed2eabf90ded0045290324a9fffb30145470209f3826580989349199dc5ab8d4a25df7a0529cf91471e30842abfacd44ab781dfc1395\",\n        \"signed\": \"2860830ccd1d41d95076816a398424f7b739c49fdacf5654529da85fe3565584f6aac2614c63f774b61db9081f1410fba8e50ab3b4c39dc06314243f3f0d8e0fe4fbea864aa51190826645d2f772cb0f9eddd3034473fa3177c7af9a5d41e1a73ad5784c7096559fcddb7b7c85891cf24e82c588d74774ffcac0c6b4eebc2f3fa43e9d45f259d67564030cfeeab9236c665b650af0c92c875189f5f9383504b15360a0b9a5a00da31f635b96f6c73ef47b6b06f02811d1d19c2e8e53550ce22e42ec50a1eb2ea2f4cd03c442d4aa436894238ceb1835fe99b240358aa0562c249698a3f123c2c17e591010bd6fdfcbd7dbe70b04520502ece37a9a1dfa1ae3370417b004217a5b8fe9903c9a3b9f4b6d5c46c0ed0c538cec22f2dfcb2a280a42adc489cf2e062912be9928f0c060891e432091177526f1b3a968069d4a57ade828559810ae0360681ff99329fa0f59e7e59cdf87f9f33c40e97031b9f81d48fc12286efbb3d4e5a62ef57bc0d52d533b99c5106aa79cfe1793a908518596c383483ec49ff98ec557bfff7490a46daf6714f2c2c32f57932ca0d730f03f381d69decdbd9a7a6d4afc62406543c8ebe90ac76e6afabdb82492a206a369e04286d313e11107d8cd9b4bf68f815dba4e990b049d79216d3653138342cd118b130f66b006f3d89ac3cf89837048b0f8a62d94051d2eab891ac5f47888879d88e546676d1daeeb4d175d3f04a9d74ffcdd47746016f84ad0d112afb59ad12187e94f22535d77e9e0516fa42185c197ba774b393227f741fe68273f423fb0e0e0474bfdaf2da78aeb1cd5b98c1dc0832124742a4754125fc78b19c559a5b3f7711e068c440cc0469a1cfa5c1864be18735aa8bcd406c4371eb857754d908bf379b91fcb24e34396bf87c19a04a83d59dae71f3f3839829d06221301ef595696e719d56b79520a0e509929833b1d804a6a0ea40400bb45028ce5d36933883e17406e27a8109057b1a1a5e5da210a6921994f467ab41aa8f0d88775a8a8ebb4ec77d7c80e45a7bb422a4c00c90583911465e6b5f0fdcdeab72871ca542e1d1a2ca94df4ed2eabf90ded0045290324a9fffb30145470209f3826580989349199dc5ab8d4a25df7a0529cf91471e30842abfacd44ab781dfc1395\",\n        \"signature\": \"2860830ccd1d41d95076816a398424f7b739c49fdacf5654529da85fe3565584f6aac2614c63f774b61db9081f1410fba8e50ab3b4c39dc06314243f3f0d8e0f\"\n    },\n    {\n        \"secret_key\": \"c24cbf401ad03bd88dcc7b519ecf624db2223e990289309e1e9f1f8f6127c6c9\",\n        \"public_key\": \"a74666f357209f7189903788f107563e50c051c3d40c3f3dad10d3c3cff1e678\",\n        \"message\": \"e7fa359e6a09b2c54aabed3bbabfb72853a805aabcf4d18ddad39f03f34601e55b6ce263c9a3ca6a3e5f1425c821928c61e7f750919bd3af32bcb7b94d459a7a9a35f61c941792e2cc2e4327beb344a841a07f32068af102b3de61eab64ef6d5e69062e393ab5edf6ac9ef7b38d49a01bef0003f421174c8885975c01832899c3135e7a86e5b55d9b1328bb4289b5c40200f49e5523b3c461dc7175e1465022297c3d380f2b1fef39cb82c00fd160f447eb51263fa25b4df0fca41ec0ca2ece7472201af86c3038c49df099a9aefa1f88d0edfd17c0b3c86046629c09454054aa0fb2c6949dd9c130185dfa5d903891e08742cd0429403f57f4052158b2f401da4756854e4aaf024221e37513cf677ee6a0b159f501d377ea32eb71e778004f27203cd6d553fda5d65e1879477046f3ea3d1d75c9d0d30311456709cc7f6ab68c7b0d52be40f04cf655655323285318329e84c6a5b07e0ceed5f78f7f1fa6229bef878793c584728abf4510b7f27794b5942916254c589a09c8e911f0b954211a63699a752147f2a4e1a18956644bea2ca2692ba182280e04a72dd89b0d1268500938f347bf43f2a242ee9b9a6baac9b350d656fb19ec834abe3164440f2d2071fe5e32c8e4cf905539b839ceeca2620fcb2a087f780e6c7f5e05c506888250ea7c856fb30983200aa8f78fc1771054ada0f3fac38ae2f33dc4a4f851b76ed740c0962a76a4de44080dc620a44ad8f23d3462b792ab3afb19cb8a9f4d9e59ad765a771899da8cbec89e5077e85c0c93126376c941bef1f8bb992d3a35f270725846fb252f8b5fbb7567e406a1b53b619769e632b2b4087cd4c276e5d58ff2b56e89edec48ce53a52e329ca1559538f10902c01a85fbb3cd72e6b8291e5fe639bee9d47d34c249a7a07d7a1427a01f63d60984c450bef819b19f65e2614fd9c2fae7b9231a0bca414ed94a5ee7e66327d2a99c84878b7bee087e891f253fa1fece313648c06c45db2d9f3bc8599937b752d38ce5063d0ed9a43ec9d4015893d43bf5b2d1c60478510468968b796f0153789595441722a\",\n        \"signed\": \"581e6c85aec623b62b3d4c9bc9c77759d5492722e252d44c1f8ada9da2ecc67c17083273aa091bbac046ae63c78893152e14d926c41ae35f0e6e3959496b1306e7fa359e6a09b2c54aabed3bbabfb72853a805aabcf4d18ddad39f03f34601e55b6ce263c9a3ca6a3e5f1425c821928c61e7f750919bd3af32bcb7b94d459a7a9a35f61c941792e2cc2e4327beb344a841a07f32068af102b3de61eab64ef6d5e69062e393ab5edf6ac9ef7b38d49a01bef0003f421174c8885975c01832899c3135e7a86e5b55d9b1328bb4289b5c40200f49e5523b3c461dc7175e1465022297c3d380f2b1fef39cb82c00fd160f447eb51263fa25b4df0fca41ec0ca2ece7472201af86c3038c49df099a9aefa1f88d0edfd17c0b3c86046629c09454054aa0fb2c6949dd9c130185dfa5d903891e08742cd0429403f57f4052158b2f401da4756854e4aaf024221e37513cf677ee6a0b159f501d377ea32eb71e778004f27203cd6d553fda5d65e1879477046f3ea3d1d75c9d0d30311456709cc7f6ab68c7b0d52be40f04cf655655323285318329e84c6a5b07e0ceed5f78f7f1fa6229bef878793c584728abf4510b7f27794b5942916254c589a09c8e911f0b954211a63699a752147f2a4e1a18956644bea2ca2692ba182280e04a72dd89b0d1268500938f347bf43f2a242ee9b9a6baac9b350d656fb19ec834abe3164440f2d2071fe5e32c8e4cf905539b839ceeca2620fcb2a087f780e6c7f5e05c506888250ea7c856fb30983200aa8f78fc1771054ada0f3fac38ae2f33dc4a4f851b76ed740c0962a76a4de44080dc620a44ad8f23d3462b792ab3afb19cb8a9f4d9e59ad765a771899da8cbec89e5077e85c0c93126376c941bef1f8bb992d3a35f270725846fb252f8b5fbb7567e406a1b53b619769e632b2b4087cd4c276e5d58ff2b56e89edec48ce53a52e329ca1559538f10902c01a85fbb3cd72e6b8291e5fe639bee9d47d34c249a7a07d7a1427a01f63d60984c450bef819b19f65e2614fd9c2fae7b9231a0bca414ed94a5ee7e66327d2a99c84878b7bee087e891f253fa1fece313648c06c45db2d9f3bc8599937b752d38ce5063d0ed9a43ec9d4015893d43bf5b2d1c60478510468968b796f0153789595441722a\",\n        \"signature\": \"581e6c85aec623b62b3d4c9bc9c77759d5492722e252d44c1f8ada9da2ecc67c17083273aa091bbac046ae63c78893152e14d926c41ae35f0e6e3959496b1306\"\n    },\n    {\n        \"secret_key\": \"8b3dcde4abbf4e6211c4a51c4b026800a8a2a061cb38a2ecc7c9cf113f9270bf\",\n        \"public_key\": \"514535580f0de359bb0d41f2efddaa04c2ec950119f31634b2c1a32f195f6968\",\n        \"message\": \"481425027da672b6f26c91b80e55582caef47bb15a2de8fca852221785180b20a7fd6d4907b5881cc1d6e39ab9612cc74d6977e9141f7087bb27ab3084a26285586f8411db1f503adf52dcb25ab8fffd2ec1504c1777b9d6dd4a29e2019e5cbae1b7eb26f95bbe07d90c2f6fb0884a59a8d58dde5116edc3bc349d37c160b27befbe5a5c181ce7256392354d221b58c47eb0bb10929e7421795f4b7a7c275edd08c088568772e993218dd6f3c2cb4ac657a0a3f91f3126b991adf6cbe7d1b19b8cd83be3602ed18f039633fbd2387bda69e2cf0387d8644d97b303fb00639aeee7ae463f6fe1a2c4b89aeba3e9094c11fc29114b20283f287c6dd28cb098dae8dabc48e85bb59c0dc6e78c956605cb7cf06942353e7a22e96f80a37a66f718d9e4db8c52452aa0a35772e81ba2b303205b412dd2bfc15ce9b436f99fbb32126b63ce9cb43199f157d81751a7c4937d13af4c582952b5d606b555b046bf1de06cf39b63a80287371803609a387ee80f3a5d88b9d6219650ed17d3cc183b2c70d5eb94e3bc52aea7aa7f53be0e20b8972f143d8e20162e803edb4aa83d5553fdd553398b0fa176b959cba140d6e980c9251b0fa0b65e908417f82f451ff9f2de6b9ca5e3b5f41ba40d05a54f3dab4886aacca05c9c2798139a4cb33e96a91494749910a17ce8b392fc0fc7762974d79d33db924bfef8655a723776ff87f950fdc568b1e526534541f572723b840663c19188c424f7c489235a424b09fe25c30727ea1cb04953d706d68bfe12100ef6f64c35c6b8de67edf0e3ad014a400e821ea34024321999867b43c82c450184b78f7425cebd7319dc6f65d360665dfbe7c36674dac3a54e96da910c02d3640780b22d512ca0e3ca3587b94ea9fcd7a31b4af69fd6207c68fed25f89921c1cdcdefd1c090204492bff9bbb52e08885829d012bc2dfb4fe8c35e59cd13bcb8ead34193c40b03ee4d825ee1322ff4ef071279574cbaee7c07f14be606b9cd0e261111ef20d9681d76cf78c89a8c397d6b8dc778f4984166ad5df3a81aaf2e6de09f700195ae2c1d4609647\",\n        \"signed\": \"4f3d4d228503017e74a6bb58aafae35c3f37bdee4ff6be2e6240b5082feddb222735e12f31e056fa685447e5384803007ea7910e605c1b78118cd5acc587a606481425027da672b6f26c91b80e55582caef47bb15a2de8fca852221785180b20a7fd6d4907b5881cc1d6e39ab9612cc74d6977e9141f7087bb27ab3084a26285586f8411db1f503adf52dcb25ab8fffd2ec1504c1777b9d6dd4a29e2019e5cbae1b7eb26f95bbe07d90c2f6fb0884a59a8d58dde5116edc3bc349d37c160b27befbe5a5c181ce7256392354d221b58c47eb0bb10929e7421795f4b7a7c275edd08c088568772e993218dd6f3c2cb4ac657a0a3f91f3126b991adf6cbe7d1b19b8cd83be3602ed18f039633fbd2387bda69e2cf0387d8644d97b303fb00639aeee7ae463f6fe1a2c4b89aeba3e9094c11fc29114b20283f287c6dd28cb098dae8dabc48e85bb59c0dc6e78c956605cb7cf06942353e7a22e96f80a37a66f718d9e4db8c52452aa0a35772e81ba2b303205b412dd2bfc15ce9b436f99fbb32126b63ce9cb43199f157d81751a7c4937d13af4c582952b5d606b555b046bf1de06cf39b63a80287371803609a387ee80f3a5d88b9d6219650ed17d3cc183b2c70d5eb94e3bc52aea7aa7f53be0e20b8972f143d8e20162e803edb4aa83d5553fdd553398b0fa176b959cba140d6e980c9251b0fa0b65e908417f82f451ff9f2de6b9ca5e3b5f41ba40d05a54f3dab4886aacca05c9c2798139a4cb33e96a91494749910a17ce8b392fc0fc7762974d79d33db924bfef8655a723776ff87f950fdc568b1e526534541f572723b840663c19188c424f7c489235a424b09fe25c30727ea1cb04953d706d68bfe12100ef6f64c35c6b8de67edf0e3ad014a400e821ea34024321999867b43c82c450184b78f7425cebd7319dc6f65d360665dfbe7c36674dac3a54e96da910c02d3640780b22d512ca0e3ca3587b94ea9fcd7a31b4af69fd6207c68fed25f89921c1cdcdefd1c090204492bff9bbb52e08885829d012bc2dfb4fe8c35e59cd13bcb8ead34193c40b03ee4d825ee1322ff4ef071279574cbaee7c07f14be606b9cd0e261111ef20d9681d76cf78c89a8c397d6b8dc778f4984166ad5df3a81aaf2e6de09f700195ae2c1d4609647\",\n        \"signature\": \"4f3d4d228503017e74a6bb58aafae35c3f37bdee4ff6be2e6240b5082feddb222735e12f31e056fa685447e5384803007ea7910e605c1b78118cd5acc587a606\"\n    },\n    {\n        \"secret_key\": \"d4a7a9524d30a6337c0a0be95ca90591de9888038e3e59e1b25a4181ef946629\",\n        \"public_key\": \"9fc3ebd139cc5b7c0e05af47bff6619b812815bb01ceec392a3ff0aec3811d2c\",\n        \"message\": \"171980c03fdf7a727bd5bab3ba0945e6ad5faf0a7f506a56d1d0edd9a306b3158d843266d3091fc1e42281df97559a2201f5bdddfe683d0e1028d1d95b2f313b484c392ffdb1cdf88508afde3d6fd2a12888bacedeb79ff3db40c9ac0ec3fb901b228698adf8d845ff4fce10de55d42436dce930973a34be05d1401f334d4ce8e3a793799eafdb94d0f2ab0950b079e6653eeb499fc7447ccbeeed8dbd5456808cd7a38f9a15a2a9c738d61334cab8ceebbbf4a4814d94c61859178784604e0c2154597e72cf587cd1f5dafe5922051890e76d616d8cd5b05d6478d0626ea83ce808c46143e6fb06b4182d228da8f6d4139eca5b8f3b1b98af68c59b4b5a53c136ee90432aca2bb915529d26367949826233b43e55804b55fc9f215eb0b0b79291465bb34edaeadffabfe6cf41bc07b5dd4d0142f0361f058ee1b3b9fcc196eb9b35b134be3d1d232004489e8f6993f625a63015bcd3f1e87588324858ccfb770dddd894bf297bd763ef5828e21f5c89aa98cfbc1c082dd7fbaa4307bda40b4a758ca8f39f4e4aaed309041268dbcf0af32de0d7fa90a523963b780b6a932cf89499025f0e0d0474c74348947510e6c5ec7c9e05066eeb4a73520c3d927c39ac26ad7596325b2cc47c5e82a775455b7af03120b1cfbfd6ec3fc0c3be6078b00cfdf8342ae8bf147159f50e9d564e2f68306dae3caedd1019f323c478a1e1f67598dd834bd1d1a8733fd7fdd8a876526c531518936edb72d01656b344c7d65ac1cee37ce5997ba48d3f4d064d88057efe9a482d9e00ab5caeb5aca2d660e337bd15487365697956a5e47b02abdc30d8e353fed4e1ac41d2bc2120021143635935c620186a522bde54be0446fbd2dc88b56304b3a64227d0acd5f85a6b6787a3adcf2d7cfc86c634b4d7ab4315b97de9e666cff3ff1b88f3295e7bab9e9fd46fafddb4f5fac51cc0170129c651b4ef4d3950d6942ff020d1668a528bde1da936c0ec1ae09e84f8205861fff491502a872c8154a96e7ea25eda955a7fd2e4b4c7a8d273f60bc74fab7b4968ca6f75daea5040f839fd56c2a980\",\n        \"signed\": \"d15788bcd88d1d81b9e61d4fe26ea49e66819a59d2ae4832321b814d5062fadb87807db6852e1d8295e31a291b1e785d01d834895f88f400df8832c1607b5b0c171980c03fdf7a727bd5bab3ba0945e6ad5faf0a7f506a56d1d0edd9a306b3158d843266d3091fc1e42281df97559a2201f5bdddfe683d0e1028d1d95b2f313b484c392ffdb1cdf88508afde3d6fd2a12888bacedeb79ff3db40c9ac0ec3fb901b228698adf8d845ff4fce10de55d42436dce930973a34be05d1401f334d4ce8e3a793799eafdb94d0f2ab0950b079e6653eeb499fc7447ccbeeed8dbd5456808cd7a38f9a15a2a9c738d61334cab8ceebbbf4a4814d94c61859178784604e0c2154597e72cf587cd1f5dafe5922051890e76d616d8cd5b05d6478d0626ea83ce808c46143e6fb06b4182d228da8f6d4139eca5b8f3b1b98af68c59b4b5a53c136ee90432aca2bb915529d26367949826233b43e55804b55fc9f215eb0b0b79291465bb34edaeadffabfe6cf41bc07b5dd4d0142f0361f058ee1b3b9fcc196eb9b35b134be3d1d232004489e8f6993f625a63015bcd3f1e87588324858ccfb770dddd894bf297bd763ef5828e21f5c89aa98cfbc1c082dd7fbaa4307bda40b4a758ca8f39f4e4aaed309041268dbcf0af32de0d7fa90a523963b780b6a932cf89499025f0e0d0474c74348947510e6c5ec7c9e05066eeb4a73520c3d927c39ac26ad7596325b2cc47c5e82a775455b7af03120b1cfbfd6ec3fc0c3be6078b00cfdf8342ae8bf147159f50e9d564e2f68306dae3caedd1019f323c478a1e1f67598dd834bd1d1a8733fd7fdd8a876526c531518936edb72d01656b344c7d65ac1cee37ce5997ba48d3f4d064d88057efe9a482d9e00ab5caeb5aca2d660e337bd15487365697956a5e47b02abdc30d8e353fed4e1ac41d2bc2120021143635935c620186a522bde54be0446fbd2dc88b56304b3a64227d0acd5f85a6b6787a3adcf2d7cfc86c634b4d7ab4315b97de9e666cff3ff1b88f3295e7bab9e9fd46fafddb4f5fac51cc0170129c651b4ef4d3950d6942ff020d1668a528bde1da936c0ec1ae09e84f8205861fff491502a872c8154a96e7ea25eda955a7fd2e4b4c7a8d273f60bc74fab7b4968ca6f75daea5040f839fd56c2a980\",\n        \"signature\": \"d15788bcd88d1d81b9e61d4fe26ea49e66819a59d2ae4832321b814d5062fadb87807db6852e1d8295e31a291b1e785d01d834895f88f400df8832c1607b5b0c\"\n    },\n    {\n        \"secret_key\": \"d08f4babba3b5365faf738795c9da45db1862cb28b93eb6635d1320da0f4d937\",\n        \"public_key\": \"ef31b454f734e52b3438ee2f1cbc35631b1969de54ac98fe4633f2f500ac8712\",\n        \"message\": \"a394d8854ceb5c43afee1a48926bbd6685aa8aecfdcf854133333974d624bf2f1f9c30f005bbf34cee3afe2b290600eeae6f1dd12a0c346fbb2ab9c916c5d5d80dcd87887875a0ac847678039fdcd3a9793541f5d675143a6abadc3b18f0fef5108c19c2dbfb59710eef9866a4f3f297a09ee48c6803007dd6ba8fd4be841cfb10ff0514c30fc4dd49a3cd43bbd16e460443a11afe649e901d63d89af598aa686b2f607ec11f35e17a798a4213b75a38788da4f27cf2b02caddfe61c3729a87ec6e6b098f68e7aed28a800c484dfa0130401208f986d792f54635add2848e151262a365eb21e2727191e1f700f3bf5c73b0fb4c546d0048a155c18717920fc0425c8c8fa8f167c43a277bb366e0ad702c89bc5aa06fd470943be05cb9e3259787229714c30a4e87b00a633aaf7be6b5875010d12e107c9a5261ca562d67025bea0fe223463edb92ea01cca92c44ff24da9d8a80a6421f3d4135d647d1bb0fd988c46c8a170ceb4f33fff9c0ffb6abad1092c84dfad8290898b249516a292e8da96fd51a81005eecfdebb05933099277d073a480c3f9eb8aa11968c4d8dc0787a9aec3e0527b7fe4c0635411335a1811689e88f6d5ced0d40d6b48b7f2d992952934894153076a8d37372fa00d9cefc5cf8c26adb5acf325a01cd005ab8d474a52d67114078c6516aef804bba19b887a28ed5e46ee9995e5ad3a82fb9cd93283433680921114b4d9af8fcb6b2b535839c36de8df12b17ea6ddcfcb3334ff40e6cf04ccd5ca6403ba0b62b4cb71bbde91d8babda69152c9c93ae769b5529c8d52fd9a6909a15e1a0601a714649c96ec996c1706d1021b97487980d7b2c2a39bbb0e470d8e46ac4aa609a0922c9bdc01612eadeaccd5fa523b2a8d0e62ffe56281647d61fffbbc840535745d144259cc81300fe99dfbffea6b0b9bcd28473982d32e93ed46634a9987906d6f48939d8dfbfb37d33b888db608cb2ffe39a8cf67b72644611c7d32a4a8df612468cd5e5d75fbba79e638aa1daa28c4e0eeb9a637ff8a08b65f7a7612414df76bc7b0b56b5537d666facfddaf65af1\",\n        \"signed\": \"acebe4c86fa9fe2c1a5c576ac0501e8ab0f640fa40380536fcf95059d53d4a3555d220ac363587175e4bde163c0d00650a12963d46766c99bb62bf7573e2870ca394d8854ceb5c43afee1a48926bbd6685aa8aecfdcf854133333974d624bf2f1f9c30f005bbf34cee3afe2b290600eeae6f1dd12a0c346fbb2ab9c916c5d5d80dcd87887875a0ac847678039fdcd3a9793541f5d675143a6abadc3b18f0fef5108c19c2dbfb59710eef9866a4f3f297a09ee48c6803007dd6ba8fd4be841cfb10ff0514c30fc4dd49a3cd43bbd16e460443a11afe649e901d63d89af598aa686b2f607ec11f35e17a798a4213b75a38788da4f27cf2b02caddfe61c3729a87ec6e6b098f68e7aed28a800c484dfa0130401208f986d792f54635add2848e151262a365eb21e2727191e1f700f3bf5c73b0fb4c546d0048a155c18717920fc0425c8c8fa8f167c43a277bb366e0ad702c89bc5aa06fd470943be05cb9e3259787229714c30a4e87b00a633aaf7be6b5875010d12e107c9a5261ca562d67025bea0fe223463edb92ea01cca92c44ff24da9d8a80a6421f3d4135d647d1bb0fd988c46c8a170ceb4f33fff9c0ffb6abad1092c84dfad8290898b249516a292e8da96fd51a81005eecfdebb05933099277d073a480c3f9eb8aa11968c4d8dc0787a9aec3e0527b7fe4c0635411335a1811689e88f6d5ced0d40d6b48b7f2d992952934894153076a8d37372fa00d9cefc5cf8c26adb5acf325a01cd005ab8d474a52d67114078c6516aef804bba19b887a28ed5e46ee9995e5ad3a82fb9cd93283433680921114b4d9af8fcb6b2b535839c36de8df12b17ea6ddcfcb3334ff40e6cf04ccd5ca6403ba0b62b4cb71bbde91d8babda69152c9c93ae769b5529c8d52fd9a6909a15e1a0601a714649c96ec996c1706d1021b97487980d7b2c2a39bbb0e470d8e46ac4aa609a0922c9bdc01612eadeaccd5fa523b2a8d0e62ffe56281647d61fffbbc840535745d144259cc81300fe99dfbffea6b0b9bcd28473982d32e93ed46634a9987906d6f48939d8dfbfb37d33b888db608cb2ffe39a8cf67b72644611c7d32a4a8df612468cd5e5d75fbba79e638aa1daa28c4e0eeb9a637ff8a08b65f7a7612414df76bc7b0b56b5537d666facfddaf65af1\",\n        \"signature\": \"acebe4c86fa9fe2c1a5c576ac0501e8ab0f640fa40380536fcf95059d53d4a3555d220ac363587175e4bde163c0d00650a12963d46766c99bb62bf7573e2870c\"\n    },\n    {\n        \"secret_key\": \"8f474f88cf863c485456a5a2155281ff27b28459f63bc4f1db00e0031064f649\",\n        \"public_key\": \"43144a329d751d04e07169b779ee920dd029cb445bf376ba3a668572182344a3\",\n        \"message\": \"840891d948ec19c8c7f7c9d3c4775362a544a0ec97457ab5d14e125dc54b59c8dc9a635e7badb6be73c3a58dc0e9929f2b420d8356d617c3d41bfe69b4e158d4bf08fb17e688d3cf3c948b69b35f0b6db66272a8eb2bd410d6509f6c828b6a20d6586eaf857601ed9d6054799c25320eba8077fe1ae22671b33a1588ff2b235d3c71a27ce5c6c66e18889198d116933676bc4fb0710db7ff1ac2f20ce369bef56b43cd1d406cefdacf00f1f348b8ca7aa614db11a3a640fdb59389d1a6a394755c133f1b019c8308ca5a951e73b810a180f6ff25b29dbbccef4c13a97503393907a2dba096a8ce5c86c0ee6f97c1441b8d6331cba53b19606b421af52f65f9c663e63d3982718f948c6bae961b8e4bf8cd9e31cd09928e4e80616597ccfadcb8a614154933bc37589c85c776e34e5a90660f59a65b5e93ad438842f982d02b041e6dbddf171099f8db70995731a0db8c4625c9bca710805961fb176dae819768fcad7ff9bfce36403ca7f783e7613726d7dc59f24e247cf15068ff3b19c725fad65ea8e8a7f722d528c95fcef1c0cc79d18ef07cee8b011eeabd9921634d76a61a8a3c8931b827e8189881f81f7a175f21fb0378b8188e58bdb2017bef390f1800d9d74f263a81df8e67522d092e775d01e004e7f8d8281ae2c2fdf8c3a445f9eff7fdf13f261a773ddf2dd9cc6ba5585d990c995e6eb89dffd9ff0a9dbb76ce5e10dd0272d5001497881366f5d636a9cceaa283228d3ac614db217ab891d6689dbeb950e1200c3de53bc5da07f1d363dae9be6ec36eda6e687d26290f7abca268a7fa03d9318864eda9a11e3b26140605920ac13adec1b5548c9a7a3215a5876b7e941afa1cb5d7f7f0c11630cd429f3b2b37dc76c6cbea4f3b726aa8a5f8b9f705b05d7e9451956f8af13ce0a85955c7135d64ade5496ea542e70f8da5b573aaf137085dc96c6927099695672668b3c7c6f93c977a4e8e9e770295f20d52dff187f8dbb25ee7e774024eb9be08121ed74b6d5462f4bb7dc2003874caa31bb7595cd93a99ebe1eff928bb5fcb9e9c89dd31d487fc0e20bbe150\",\n        \"signed\": \"f61f7807c33e196d0fe182efa4d4516a9815ddd449538bbaa6b86b6901a05f5ddda0601ec90f39f1554779db7a09a60572effd4d128d0d3c2dd4e883574bc60b840891d948ec19c8c7f7c9d3c4775362a544a0ec97457ab5d14e125dc54b59c8dc9a635e7badb6be73c3a58dc0e9929f2b420d8356d617c3d41bfe69b4e158d4bf08fb17e688d3cf3c948b69b35f0b6db66272a8eb2bd410d6509f6c828b6a20d6586eaf857601ed9d6054799c25320eba8077fe1ae22671b33a1588ff2b235d3c71a27ce5c6c66e18889198d116933676bc4fb0710db7ff1ac2f20ce369bef56b43cd1d406cefdacf00f1f348b8ca7aa614db11a3a640fdb59389d1a6a394755c133f1b019c8308ca5a951e73b810a180f6ff25b29dbbccef4c13a97503393907a2dba096a8ce5c86c0ee6f97c1441b8d6331cba53b19606b421af52f65f9c663e63d3982718f948c6bae961b8e4bf8cd9e31cd09928e4e80616597ccfadcb8a614154933bc37589c85c776e34e5a90660f59a65b5e93ad438842f982d02b041e6dbddf171099f8db70995731a0db8c4625c9bca710805961fb176dae819768fcad7ff9bfce36403ca7f783e7613726d7dc59f24e247cf15068ff3b19c725fad65ea8e8a7f722d528c95fcef1c0cc79d18ef07cee8b011eeabd9921634d76a61a8a3c8931b827e8189881f81f7a175f21fb0378b8188e58bdb2017bef390f1800d9d74f263a81df8e67522d092e775d01e004e7f8d8281ae2c2fdf8c3a445f9eff7fdf13f261a773ddf2dd9cc6ba5585d990c995e6eb89dffd9ff0a9dbb76ce5e10dd0272d5001497881366f5d636a9cceaa283228d3ac614db217ab891d6689dbeb950e1200c3de53bc5da07f1d363dae9be6ec36eda6e687d26290f7abca268a7fa03d9318864eda9a11e3b26140605920ac13adec1b5548c9a7a3215a5876b7e941afa1cb5d7f7f0c11630cd429f3b2b37dc76c6cbea4f3b726aa8a5f8b9f705b05d7e9451956f8af13ce0a85955c7135d64ade5496ea542e70f8da5b573aaf137085dc96c6927099695672668b3c7c6f93c977a4e8e9e770295f20d52dff187f8dbb25ee7e774024eb9be08121ed74b6d5462f4bb7dc2003874caa31bb7595cd93a99ebe1eff928bb5fcb9e9c89dd31d487fc0e20bbe150\",\n        \"signature\": \"f61f7807c33e196d0fe182efa4d4516a9815ddd449538bbaa6b86b6901a05f5ddda0601ec90f39f1554779db7a09a60572effd4d128d0d3c2dd4e883574bc60b\"\n    },\n    {\n        \"secret_key\": \"e42b30d49c43c4fad83dd51fdc2a4ac5901327add800b66972c8c70bde180adc\",\n        \"public_key\": \"f734aafaa4dbaf315c258cca8bbc1d4f34e83601109874222aa05589f3a6635f\",\n        \"message\": \"0d497051861e22d8a9c60e5f7de6c895cba335b2e82e602118ad8342b4d4edaa80f95efbb59cfda1fcc0291725700e8a81bb12a0b8623b1fe2891b8d98f7a84c59fd92f8a7adfc065042f7f4fd7e1a79f55a1d4d5e54e04e672f1c9e4c4cd8d0003f3cd54b76e2163dd737acb2de5c263ac102a48f696b60caf9be39c665cce1e0f3d498553f579061889a5ec5603e4d141cfdede8e7317572cfe76a0f48e4ae06062c9157b5eaac3468938192db4b16105c7364a94432b215a71797fee14c3c9ce2f746ed790302fc41dc492d37d9ef024ab51da3bdaf0f81d9a930aa0e025c04fd71026b6afeb7ed01a91a1efd6c39f5e447c66dd38a7656c613d02126f3585dfaa02df930253f83bd42196463ebc50f8cfc949ed350392e61ceec1309da15a432f80dfe948e261ce6d8421c5459cd21f3ffa2edb500982b2abfa52e82437ca230f609116320d9893eb82a14df72b7736667516fc012b28a03c9dd88ea4308d8ceea44cc604454cdfa2c797615bc0a6b3e0089af0a81be54d1b110a13ab911b452c342800cee2ad239a2b188a7fa875e941daaebcfc88b70ae4b1c575cdb6e6d89448136f60ee81c703c47822d2c0e50c7f1e8b7fc7ebd80789fcd7e06c7e50b5fc8b776e8b9a4cd5905a29069bc3a558d7cabce2af4f310767d5b117e3076b3a0d527175543b2ccea28d5f716fac32efed3d2e0276be44a8956fc8240f2db3397614f2f2da02166694ec6a7feec6ece39d72b64bbc6b476a4f84f8d879380a38488e4d6e58cac0390ae25a5fcb73d47414b4c26bbb9b4cc66e42594bd56d841a360923491d117be2c6eb2320f3c6175e44e27b6653c5dac6fae73600b67960dca50aa855a89e0ff511ea04f143e89f1da028476be4bf6d94c80ff726339e8bcfb7dd9f8cf202259c0acb6276c281e3847c2cc8d2fba84438d2d3c6031f2a7b95c1d8f9f3cc86a5eff65cc011de95ad896858e1f7f6d6b94bf49dfff5de2d7fd71ef108134285f61ae475483442dc90bf013faedf3771c47c5b96dc3cf8e48510060ad8d45fd5461622780d869d4617b57fe3cb5cc0203153aae\",\n        \"signed\": \"ff8e076e343c8b73aa453bfee9b2bab6d5c2f74c35e1bad1e52ae777d69f79764083f994368a1ac851a641cd247008a34f3b608962f4dd5109ac71cce978ec020d497051861e22d8a9c60e5f7de6c895cba335b2e82e602118ad8342b4d4edaa80f95efbb59cfda1fcc0291725700e8a81bb12a0b8623b1fe2891b8d98f7a84c59fd92f8a7adfc065042f7f4fd7e1a79f55a1d4d5e54e04e672f1c9e4c4cd8d0003f3cd54b76e2163dd737acb2de5c263ac102a48f696b60caf9be39c665cce1e0f3d498553f579061889a5ec5603e4d141cfdede8e7317572cfe76a0f48e4ae06062c9157b5eaac3468938192db4b16105c7364a94432b215a71797fee14c3c9ce2f746ed790302fc41dc492d37d9ef024ab51da3bdaf0f81d9a930aa0e025c04fd71026b6afeb7ed01a91a1efd6c39f5e447c66dd38a7656c613d02126f3585dfaa02df930253f83bd42196463ebc50f8cfc949ed350392e61ceec1309da15a432f80dfe948e261ce6d8421c5459cd21f3ffa2edb500982b2abfa52e82437ca230f609116320d9893eb82a14df72b7736667516fc012b28a03c9dd88ea4308d8ceea44cc604454cdfa2c797615bc0a6b3e0089af0a81be54d1b110a13ab911b452c342800cee2ad239a2b188a7fa875e941daaebcfc88b70ae4b1c575cdb6e6d89448136f60ee81c703c47822d2c0e50c7f1e8b7fc7ebd80789fcd7e06c7e50b5fc8b776e8b9a4cd5905a29069bc3a558d7cabce2af4f310767d5b117e3076b3a0d527175543b2ccea28d5f716fac32efed3d2e0276be44a8956fc8240f2db3397614f2f2da02166694ec6a7feec6ece39d72b64bbc6b476a4f84f8d879380a38488e4d6e58cac0390ae25a5fcb73d47414b4c26bbb9b4cc66e42594bd56d841a360923491d117be2c6eb2320f3c6175e44e27b6653c5dac6fae73600b67960dca50aa855a89e0ff511ea04f143e89f1da028476be4bf6d94c80ff726339e8bcfb7dd9f8cf202259c0acb6276c281e3847c2cc8d2fba84438d2d3c6031f2a7b95c1d8f9f3cc86a5eff65cc011de95ad896858e1f7f6d6b94bf49dfff5de2d7fd71ef108134285f61ae475483442dc90bf013faedf3771c47c5b96dc3cf8e48510060ad8d45fd5461622780d869d4617b57fe3cb5cc0203153aae\",\n        \"signature\": \"ff8e076e343c8b73aa453bfee9b2bab6d5c2f74c35e1bad1e52ae777d69f79764083f994368a1ac851a641cd247008a34f3b608962f4dd5109ac71cce978ec02\"\n    },\n    {\n        \"secret_key\": \"5cb514217482bf42f611fcec36a5286807c2bdbb56967691353f54310e1ad553\",\n        \"public_key\": \"280699003d5d3e1c05ad10fb10959bbc595cfe213069965cd8cf39dd426a0568\",\n        \"message\": \"2f57258cca7932e58bed546cb0041115bbad23d18346ef7ab5e3110082b3a9712f6cbe1270e6dc0cea3364a06a5f2f283ec39b63058d34d59979072fcbbd7a5d0f442bbdf082d5bfe2998aeb51bd26127803e5c796c38843200ae2f6e605af312f54fdff17ed1dfaa89d28fa67dce462de4fe25268212b282e222a443e2f31e269054171aa73c719a896cdb7a539dfd1d42991978197d7c4f2d30a641be34bf1380a4f4dc6d9b101636636a496beb357e347c1666516df8eb560a0e0d1e1529ce36a60e00ed278da3802be192342989bb611b4e3cbd9c37e8cce07efc12d29befd7e2f3adb13d28f708d97b63e107482c862956d7ce8dfc2af5cac8d51659267b0bbeddd5efa414ddeabd17b23ca6e843ff49effc82a5d07e36a83b67c2ad7e48eb9990b421c5558009bd6934e86d54a8a6ac4078796e305c7cc810d3f66ea6b9504fe0ae6757c504c5552530a6f8bbb52409be079d8e4a28a6fd7dc8935f8eb9498adc0f23d0807ec86295f4898f5d05e150bdc43aa8b7bdc893a0a684c3063898b6c95e7d56a4c102690438e9df99758a90f47c608dacc4ca240266faba35fa1eb2eaabe288d2c2ad50b6cbf107c002575e91ff472a4417940667be8180173854c93df84464bcd312b7a7ae4dc2b9059fbe6f83f53806425bdff031c6aed6efafd9de8dcd0dfabea8e6fa681e99193fb3c647e442112c9a23f596e65411d8d6bfc3923004ece91ea6deb881111b1dc29943f578981ee8c3bce8525f78565f34b85ff20015feae846f95b18700bc5cdf14b2db6cac69814d63d74bf20329303e5ca9f04731f6881cec6d3abf87f5eac08734faa34cff4d3cd9a4a11d7b12f73253b4dd0a43178f0d3c19c0c40d9ed918dd17646f616af79fdf6194262f0fa4f71b3187dedca48d9cbcc19931a1519677456256ed38354567c3a67571cdf82170a2c85bd2c5e68e05a0f3b93903f191b894f84946f89000568054c1cea9fd0b8bb55019506c54341c24931984548ba458a4d813089896e86a2dc33d94604003f354a7cc941c754aaea24253cbe4cf2147ffec5e7b950cbf28e284481\",\n        \"signed\": \"d53ee2e0f0fd657b2052478fd15df1d38fe0e93a5483eb4a6e7de93d02a4cd544d8fdddcea822b71576ed02853d9a6b14e1a548aefe90d92f883792b7f1d86092f57258cca7932e58bed546cb0041115bbad23d18346ef7ab5e3110082b3a9712f6cbe1270e6dc0cea3364a06a5f2f283ec39b63058d34d59979072fcbbd7a5d0f442bbdf082d5bfe2998aeb51bd26127803e5c796c38843200ae2f6e605af312f54fdff17ed1dfaa89d28fa67dce462de4fe25268212b282e222a443e2f31e269054171aa73c719a896cdb7a539dfd1d42991978197d7c4f2d30a641be34bf1380a4f4dc6d9b101636636a496beb357e347c1666516df8eb560a0e0d1e1529ce36a60e00ed278da3802be192342989bb611b4e3cbd9c37e8cce07efc12d29befd7e2f3adb13d28f708d97b63e107482c862956d7ce8dfc2af5cac8d51659267b0bbeddd5efa414ddeabd17b23ca6e843ff49effc82a5d07e36a83b67c2ad7e48eb9990b421c5558009bd6934e86d54a8a6ac4078796e305c7cc810d3f66ea6b9504fe0ae6757c504c5552530a6f8bbb52409be079d8e4a28a6fd7dc8935f8eb9498adc0f23d0807ec86295f4898f5d05e150bdc43aa8b7bdc893a0a684c3063898b6c95e7d56a4c102690438e9df99758a90f47c608dacc4ca240266faba35fa1eb2eaabe288d2c2ad50b6cbf107c002575e91ff472a4417940667be8180173854c93df84464bcd312b7a7ae4dc2b9059fbe6f83f53806425bdff031c6aed6efafd9de8dcd0dfabea8e6fa681e99193fb3c647e442112c9a23f596e65411d8d6bfc3923004ece91ea6deb881111b1dc29943f578981ee8c3bce8525f78565f34b85ff20015feae846f95b18700bc5cdf14b2db6cac69814d63d74bf20329303e5ca9f04731f6881cec6d3abf87f5eac08734faa34cff4d3cd9a4a11d7b12f73253b4dd0a43178f0d3c19c0c40d9ed918dd17646f616af79fdf6194262f0fa4f71b3187dedca48d9cbcc19931a1519677456256ed38354567c3a67571cdf82170a2c85bd2c5e68e05a0f3b93903f191b894f84946f89000568054c1cea9fd0b8bb55019506c54341c24931984548ba458a4d813089896e86a2dc33d94604003f354a7cc941c754aaea24253cbe4cf2147ffec5e7b950cbf28e284481\",\n        \"signature\": \"d53ee2e0f0fd657b2052478fd15df1d38fe0e93a5483eb4a6e7de93d02a4cd544d8fdddcea822b71576ed02853d9a6b14e1a548aefe90d92f883792b7f1d8609\"\n    },\n    {\n        \"secret_key\": \"87d3ba95c40df80069b1797ddf68e866e66d46c51fde60e768a9dbc5c92f57a9\",\n        \"public_key\": \"2b812b2c9b60ff31975c429a86736dcc17a58d3dc1daa34623a4bbcbe2cc0581\",\n        \"message\": \"e11256f82ad76f3f4a49d7bad3ced8718d36d2f2bb3d31bb61edd1ecbcee6621fd2eeed3e3deb597b149ff71b851f61c8c6819e131f9a2af7673c3f20702acfdc8b8f9064b415c9a3e35568e371d740a38127c1f27b391b45d07045aeaf00a54e5b7fa548afb5f96feb5f5b44f60cd1707e8fa9567f7806e15f6a01aa02077733fe738b08f21efbcf98c19d5b970e6163e5fe8f4800ef9ed22a0f9b5126ff1eb1c7d65019c8b440391927029b813dab7c7e863d48229f8df85394345fcc88a300f60a8d516d877a5a3a7e3c49a9eb06cd9f2665ce2a89022962b1d49592b09c7543da835ce63bc9abb822145762b71cbe150292ce5c8704e5ad34fb4592f972044e43e69f0e1672d6c83cf25aac68efe3d27af2ad34274b9d2b77742d9c6dfbd57f92ff64d3e4c67c541d8502a7d031895af85319a4eae2d254335835eff11e7a3671a6a0d21b72ce1fc2acba1a920183834bc0a4b73f639ffcb0f6b81cd920f2e9420d612166d5682a06060ea0b6fa695fecc7704bbe4b052aa3ec8f720f7d4f32e8aff86b80b8c1cc12764a04874037c3103e9dfecb8f7abcb0e073b23e67ca0a9b1fc72993abf31dbc24a8fee095b3251c22626af5dd1b6d34be5ea06a02ae176c7b8cb9d063501be6f612082889fdbdcbfadc33a0d311b080b8d64e49f16b16dd8edd3b2ed1193a74e5be507609b042727ccf08afb05cc6c50524ef0e2664621dc8b05b15ffa81ab6f7e3c8a5bb3eab1f68e3656c119d969e4144cf3285af23c04dbecc038aefd9183c4e72447b2aaa8315f4696ce6d1ef429ba0e5c3d5ffa7f050be39c7f612f4e10f8ef070df72f8addbeaf3339c1ad8b5fc39a2ecf29a87f82e29a0117baac6625ad5c80cfe759fa1dbcfaa12b374477d80bfcf06796c30f2c39cf0303d00dc56a32d1d039592ddb06c22aa068841c0b46fd48df8fbb7492ccbc590c563c8fecce4263c8c7539218bb97b35711537e988195dbf5bcd5ccaf06faf508470977a5358e6f02608349fbb99a23fbe36b8c97155adc246ad7d93a8c203f75446c83c4342c35ba104ecc67e669db4a95466ee68f458a\",\n        \"signed\": \"fa0d12cd53236c41086bea8c0cc60b7764a3ed72bdeb9d1ae5eeacb48811fe529762a2c6f2bb06d9b318218d968f644435497a1bd0d0d8c1612ab8996d98d707e11256f82ad76f3f4a49d7bad3ced8718d36d2f2bb3d31bb61edd1ecbcee6621fd2eeed3e3deb597b149ff71b851f61c8c6819e131f9a2af7673c3f20702acfdc8b8f9064b415c9a3e35568e371d740a38127c1f27b391b45d07045aeaf00a54e5b7fa548afb5f96feb5f5b44f60cd1707e8fa9567f7806e15f6a01aa02077733fe738b08f21efbcf98c19d5b970e6163e5fe8f4800ef9ed22a0f9b5126ff1eb1c7d65019c8b440391927029b813dab7c7e863d48229f8df85394345fcc88a300f60a8d516d877a5a3a7e3c49a9eb06cd9f2665ce2a89022962b1d49592b09c7543da835ce63bc9abb822145762b71cbe150292ce5c8704e5ad34fb4592f972044e43e69f0e1672d6c83cf25aac68efe3d27af2ad34274b9d2b77742d9c6dfbd57f92ff64d3e4c67c541d8502a7d031895af85319a4eae2d254335835eff11e7a3671a6a0d21b72ce1fc2acba1a920183834bc0a4b73f639ffcb0f6b81cd920f2e9420d612166d5682a06060ea0b6fa695fecc7704bbe4b052aa3ec8f720f7d4f32e8aff86b80b8c1cc12764a04874037c3103e9dfecb8f7abcb0e073b23e67ca0a9b1fc72993abf31dbc24a8fee095b3251c22626af5dd1b6d34be5ea06a02ae176c7b8cb9d063501be6f612082889fdbdcbfadc33a0d311b080b8d64e49f16b16dd8edd3b2ed1193a74e5be507609b042727ccf08afb05cc6c50524ef0e2664621dc8b05b15ffa81ab6f7e3c8a5bb3eab1f68e3656c119d969e4144cf3285af23c04dbecc038aefd9183c4e72447b2aaa8315f4696ce6d1ef429ba0e5c3d5ffa7f050be39c7f612f4e10f8ef070df72f8addbeaf3339c1ad8b5fc39a2ecf29a87f82e29a0117baac6625ad5c80cfe759fa1dbcfaa12b374477d80bfcf06796c30f2c39cf0303d00dc56a32d1d039592ddb06c22aa068841c0b46fd48df8fbb7492ccbc590c563c8fecce4263c8c7539218bb97b35711537e988195dbf5bcd5ccaf06faf508470977a5358e6f02608349fbb99a23fbe36b8c97155adc246ad7d93a8c203f75446c83c4342c35ba104ecc67e669db4a95466ee68f458a\",\n        \"signature\": \"fa0d12cd53236c41086bea8c0cc60b7764a3ed72bdeb9d1ae5eeacb48811fe529762a2c6f2bb06d9b318218d968f644435497a1bd0d0d8c1612ab8996d98d707\"\n    },\n    {\n        \"secret_key\": \"7c27ae47072b0c9b9c2c351f1327899895efa536c9c067d0e0ce8e82e6292793\",\n        \"public_key\": \"f9febd121e17db7229b56709021849c35d69fa08b50620e667f842ec7ac782dc\",\n        \"message\": \"1547876a988d1be714a42fb91cb03763f1913a892ecbd4de2ccf8344d20758b7b6d00259101fe97225b297f87bfe222004325db7f632ceaffbd134c96cbd57e985bec8434f81a4ee6af85c3fade50e4c4ef20cb0393545e4d4a86e1fa39aaf333fe4ded054bfc050a8983a03dd1ecf2b5e9517baf9e1152129a8a75935711edb20af5c8cf9c694a33cee451cd950b2fff08e3158c5cfb7b15cb3e90d46f494b6a108d8888d5ec29a33c066023b497709b2d9401feaf2e74ff26c16d36c39e6517ff954bd98bce7700671988f66e85107644ba2ea007a13018c1c144e3c5bb80db9511fcca4101bf49f8c80ff3ca7d298257cbfea629f83d5e06639d31f639db4b8726cbe224d758829bab10905171c9c0ec370d58031efe4cc5ae72a495acff6cb2ed9eec658ba117088dd3c6ed1df8f9cb10bd4fe0e5e8ad9f5034e34652d98668db15c8533393a6e9ec0870c35666ce54efe2bcb45c34a7230e6a700676349c7b3abf31de7b7b0521f89b30ac4034c2a4ba8218eefdf8d2a5c1f8ed9b701579e47af8a529a95a1ff64d8fdb885c36839b4c5f6d72a99257e8678dccf312754b9d4619beeceb825526de622bd9676fd5f357693abab078b9e03ae21e87ca161e778af77096eaac2d2d32bfec8ec94af7965f61d68ef66a4523c1cc70c9519b0750b3c9eed5aeba9f0a9b7ef52cd4a2de29b395b705fa53f028fa766159f20e75f4d384ec4fd66df06e744c99ac88cb849c285757cc557e2eedd86959da2c1b81f5b2715a6519848901ae4f89d0913c8de57c53dadf2e5e1aa2a9c5f464fc7610e8ef5f5cdd8203a67a93c33a06dab358dc5ae23edfee6334262f47b19b113d6cafedac1b43902539d74fba29aaa7bce68884b72616a0542c9fc69547cd19ae1df01723abdda65e9bfac5da0d04240c6a2175c0062e4e1ed8a5b397afcd4de38e86209272c7a424b5ae8d5a40b484ce1b4704af2831609ad0f36e90e07b2afed01dc05574ad3971723c5b5c1ddd4fc8bd263bcdf568af75e73d8abd1008c9ec712f80ffc65ac34e2a79304eade1d2a1dffec0e4c98c3582468f320bf8f66\",\n        \"signed\": \"327196ddd43bb602d04d1964ccc059ed627cef0a88d8ad91be4931f17c250d5529f552794a3e269d17a63bd32933eb5e519c1d506574770ae4a72964e06f7d001547876a988d1be714a42fb91cb03763f1913a892ecbd4de2ccf8344d20758b7b6d00259101fe97225b297f87bfe222004325db7f632ceaffbd134c96cbd57e985bec8434f81a4ee6af85c3fade50e4c4ef20cb0393545e4d4a86e1fa39aaf333fe4ded054bfc050a8983a03dd1ecf2b5e9517baf9e1152129a8a75935711edb20af5c8cf9c694a33cee451cd950b2fff08e3158c5cfb7b15cb3e90d46f494b6a108d8888d5ec29a33c066023b497709b2d9401feaf2e74ff26c16d36c39e6517ff954bd98bce7700671988f66e85107644ba2ea007a13018c1c144e3c5bb80db9511fcca4101bf49f8c80ff3ca7d298257cbfea629f83d5e06639d31f639db4b8726cbe224d758829bab10905171c9c0ec370d58031efe4cc5ae72a495acff6cb2ed9eec658ba117088dd3c6ed1df8f9cb10bd4fe0e5e8ad9f5034e34652d98668db15c8533393a6e9ec0870c35666ce54efe2bcb45c34a7230e6a700676349c7b3abf31de7b7b0521f89b30ac4034c2a4ba8218eefdf8d2a5c1f8ed9b701579e47af8a529a95a1ff64d8fdb885c36839b4c5f6d72a99257e8678dccf312754b9d4619beeceb825526de622bd9676fd5f357693abab078b9e03ae21e87ca161e778af77096eaac2d2d32bfec8ec94af7965f61d68ef66a4523c1cc70c9519b0750b3c9eed5aeba9f0a9b7ef52cd4a2de29b395b705fa53f028fa766159f20e75f4d384ec4fd66df06e744c99ac88cb849c285757cc557e2eedd86959da2c1b81f5b2715a6519848901ae4f89d0913c8de57c53dadf2e5e1aa2a9c5f464fc7610e8ef5f5cdd8203a67a93c33a06dab358dc5ae23edfee6334262f47b19b113d6cafedac1b43902539d74fba29aaa7bce68884b72616a0542c9fc69547cd19ae1df01723abdda65e9bfac5da0d04240c6a2175c0062e4e1ed8a5b397afcd4de38e86209272c7a424b5ae8d5a40b484ce1b4704af2831609ad0f36e90e07b2afed01dc05574ad3971723c5b5c1ddd4fc8bd263bcdf568af75e73d8abd1008c9ec712f80ffc65ac34e2a79304eade1d2a1dffec0e4c98c3582468f320bf8f66\",\n        \"signature\": \"327196ddd43bb602d04d1964ccc059ed627cef0a88d8ad91be4931f17c250d5529f552794a3e269d17a63bd32933eb5e519c1d506574770ae4a72964e06f7d00\"\n    },\n    {\n        \"secret_key\": \"08eddcb5625ae19ffe7b49a7dc829c893c7538b0885e18f98db78c8beb569c26\",\n        \"public_key\": \"83478b1c58576a0d1834b28d46fb80516d6fb6f9f591694b44352eecd1e7e89a\",\n        \"message\": \"015b1d3eeb00929ea80bd8687d18286f0adfe645ccf25a22b5061921e2a030fc76d033fb53d0937c69b31c5be49913ca1f2c3dca121b2b87c59b3c84c7ae52af19c6b9fa1bd675fb6dd8b329d5668786dc7883e2d2e8586ff4128b90dee84be0ab54d6813f7a8c6134757173981775de84c4dd39e336f8a4ef8dcadec943e90d421b229c11785fcd3fe963037458e76c820b3bc2c9476001262b261d28b65b489d76b4be2365e4a80fa871b0a53b6a5fb243688235acc5f4774db15d47b42dd6c8d9e12dcb0b5d980dab0f3ad8a496f76e5006c2ca82675ff194caf8070d04bd384f97e583e73cbc4f7f257310a61b1c8062322dce8115f6dd93eee8a93ffa5cab6634116e1ab705fa86c4a8eaa556c6c89dbcad010436bffe451822491f1ea86c20207e4d12dfa362616c589f97107ea5d8bd8a7215c600ffc70b80e2abb15acbe4becca20d72155abc3dbe8e37cfd73f7420f21c9bcd0c3273513b5049670874d5519b3bc1db523c1d7e90c165967c4cb2845a2e8b47b5889254f58a9bbb826f94521cdbd0416f5f18ff78a3fd0d7ab897906264483cde642d8e703fd82e5ae70a9f978f64ee80520554850528581ca9a0b38c196fd166dae5879b3f72f59cde91cca2c8bfaa478b98d624cd34724402de578e5754825ce227d2871b45a5117149515bff81a923246f3b72d07bd458125c70a14d87c3fd13392a3bda6553016e8b2d07bde903cf687b445cfd6f761492eba46522ada84a9615d8da3498b258067269b788e559b659d4b48a87d880d6378be6a88746f35b322b047845aadc523beaff3070f721c3c071eaa319b7a47c1b20d300dc0321909b669e57d39a1ce2fdbeaafac21350ec2d6e6d5b880186c028a861474d5076a4adc5032fec9140787c36806ef79c72e3a19d8c8b70bdaf207295542d96825a5de7dfe108ef574599b8f184c63a5a131db19b3be53f699c10fc4ca7c63f3500211b356a0ac664ddfc1a9252590026395b479be9a5e4758423560b65bbce5bbade493b13d00cf8c1d3b7e9221367e8f0eadab6e6d1b5fffde7b2d741fc2c830224fff7ff14ae5c07\",\n        \"signed\": \"ece75322995154b292437e47d38a6a70af37e2020716fde46bfd393b3d369bddb53253b556621cfb34c8a90254e132fd28ecd098433413a21bd3a9798ca1f309015b1d3eeb00929ea80bd8687d18286f0adfe645ccf25a22b5061921e2a030fc76d033fb53d0937c69b31c5be49913ca1f2c3dca121b2b87c59b3c84c7ae52af19c6b9fa1bd675fb6dd8b329d5668786dc7883e2d2e8586ff4128b90dee84be0ab54d6813f7a8c6134757173981775de84c4dd39e336f8a4ef8dcadec943e90d421b229c11785fcd3fe963037458e76c820b3bc2c9476001262b261d28b65b489d76b4be2365e4a80fa871b0a53b6a5fb243688235acc5f4774db15d47b42dd6c8d9e12dcb0b5d980dab0f3ad8a496f76e5006c2ca82675ff194caf8070d04bd384f97e583e73cbc4f7f257310a61b1c8062322dce8115f6dd93eee8a93ffa5cab6634116e1ab705fa86c4a8eaa556c6c89dbcad010436bffe451822491f1ea86c20207e4d12dfa362616c589f97107ea5d8bd8a7215c600ffc70b80e2abb15acbe4becca20d72155abc3dbe8e37cfd73f7420f21c9bcd0c3273513b5049670874d5519b3bc1db523c1d7e90c165967c4cb2845a2e8b47b5889254f58a9bbb826f94521cdbd0416f5f18ff78a3fd0d7ab897906264483cde642d8e703fd82e5ae70a9f978f64ee80520554850528581ca9a0b38c196fd166dae5879b3f72f59cde91cca2c8bfaa478b98d624cd34724402de578e5754825ce227d2871b45a5117149515bff81a923246f3b72d07bd458125c70a14d87c3fd13392a3bda6553016e8b2d07bde903cf687b445cfd6f761492eba46522ada84a9615d8da3498b258067269b788e559b659d4b48a87d880d6378be6a88746f35b322b047845aadc523beaff3070f721c3c071eaa319b7a47c1b20d300dc0321909b669e57d39a1ce2fdbeaafac21350ec2d6e6d5b880186c028a861474d5076a4adc5032fec9140787c36806ef79c72e3a19d8c8b70bdaf207295542d96825a5de7dfe108ef574599b8f184c63a5a131db19b3be53f699c10fc4ca7c63f3500211b356a0ac664ddfc1a9252590026395b479be9a5e4758423560b65bbce5bbade493b13d00cf8c1d3b7e9221367e8f0eadab6e6d1b5fffde7b2d741fc2c830224fff7ff14ae5c07\",\n        \"signature\": \"ece75322995154b292437e47d38a6a70af37e2020716fde46bfd393b3d369bddb53253b556621cfb34c8a90254e132fd28ecd098433413a21bd3a9798ca1f309\"\n    },\n    {\n        \"secret_key\": \"2273942db3e5d3221e80d994fd5e1163af55f5455a8e52be852dd3adf762b440\",\n        \"public_key\": \"bc58674e996b6f3e3220b3e94f0067bb0e9b0d97d9e1059cf13997a193ac032a\",\n        \"message\": \"8aa0509e4b914186ffff07aeb97a04b546272da2f9ea7bfa659a24cb50966c23eb6542e4f22debe33b65769245c4d1b5dcf3e699c70c5c2baad9734e9d1efe5448ab71c8946aecce5268d26f19cf605eb3bf38b0b3322694ac0dcb76b0f946842f6c5c68d763fce74701bd6b78e71c8c3142add4ed46e0969bb9555be03602d562e4c89f3a919940e883a96940542f2779fbf9ec0a285d9d8a72360146e3ffbdb78d210316038d95d6ab757165aa943c033eebb321c05a399569bcf66b4ddb0b2e0e33c4793d817ccff57f99b3189c60d5d7b9419d1ebc943a79d4d8c394566180594f559a80529cc1ba28877af8f5c0503e943cd3aad99811645272dafb49b9b3e6107eb5e5186e1608757126053debcec75dd9565ceea06a1391a8226d1f4593792240ccd97c67a6c2b1344c22c91f42033adef52861f32a4e0712a917879a0b0518b5424bcdc054b44e972ed24d01689f4f27f5f176f0a578ab2d3c0878272e8c08c21582118654124dca39585337c13c1865814caf0996cadfa65be580dee322ebccda704b2280582604067dc3c6b1f7d8a26978a65cffd1ed3196a2b065fb3caa79e6b5b66c13d7bd7d0ec14a3a4d58413f212f471ecaad3a84af35e598a89fb3447d3324f020fbf1b73e2a986e0da16c0183bf92a398c419a0f9f30537bea0df8df2dc53c154e8ea160689e7bb4d729dd8ab90031427aa3945863a85e89652b9353805166f7c0a18c939954b2787c37094f92512722e52b0c976b9e42af4039d2c0578ff14fae1d8c2d1396beb2d6aa6ebd55474a9349867a03f3a99d78780634ab4b35cfe1b87a9133252a698bc407d63842870e22ccf3933620ac0423c3d1f681dd73c01d06c3b941506c98eed9b7868e017b7f99716b0b77f11321e5ab23dbfcfca9350845ee180444c50ff0a9c965fcbf777708e4f34ccc637c6a08d854384f8d3e2516956c151d031bb1cbe712a5ef9ee16619228bd296f2afe582d9953d590d18bb205f70f844c16c0a2d8318037d43dd80f65c6a753f2a8e27c89c83e7ed70c52f7062dfbb1f544aa236b5c704e7b39ce0a55fd46528083ca61\",\n        \"signed\": \"874ddece08f30b30f0d4c8b3ed7c615149b8aa740daa347b55958f1e2119044f695a21069690506448d8e7352b9046511d7f39a5415bb9c57050fc17055c38088aa0509e4b914186ffff07aeb97a04b546272da2f9ea7bfa659a24cb50966c23eb6542e4f22debe33b65769245c4d1b5dcf3e699c70c5c2baad9734e9d1efe5448ab71c8946aecce5268d26f19cf605eb3bf38b0b3322694ac0dcb76b0f946842f6c5c68d763fce74701bd6b78e71c8c3142add4ed46e0969bb9555be03602d562e4c89f3a919940e883a96940542f2779fbf9ec0a285d9d8a72360146e3ffbdb78d210316038d95d6ab757165aa943c033eebb321c05a399569bcf66b4ddb0b2e0e33c4793d817ccff57f99b3189c60d5d7b9419d1ebc943a79d4d8c394566180594f559a80529cc1ba28877af8f5c0503e943cd3aad99811645272dafb49b9b3e6107eb5e5186e1608757126053debcec75dd9565ceea06a1391a8226d1f4593792240ccd97c67a6c2b1344c22c91f42033adef52861f32a4e0712a917879a0b0518b5424bcdc054b44e972ed24d01689f4f27f5f176f0a578ab2d3c0878272e8c08c21582118654124dca39585337c13c1865814caf0996cadfa65be580dee322ebccda704b2280582604067dc3c6b1f7d8a26978a65cffd1ed3196a2b065fb3caa79e6b5b66c13d7bd7d0ec14a3a4d58413f212f471ecaad3a84af35e598a89fb3447d3324f020fbf1b73e2a986e0da16c0183bf92a398c419a0f9f30537bea0df8df2dc53c154e8ea160689e7bb4d729dd8ab90031427aa3945863a85e89652b9353805166f7c0a18c939954b2787c37094f92512722e52b0c976b9e42af4039d2c0578ff14fae1d8c2d1396beb2d6aa6ebd55474a9349867a03f3a99d78780634ab4b35cfe1b87a9133252a698bc407d63842870e22ccf3933620ac0423c3d1f681dd73c01d06c3b941506c98eed9b7868e017b7f99716b0b77f11321e5ab23dbfcfca9350845ee180444c50ff0a9c965fcbf777708e4f34ccc637c6a08d854384f8d3e2516956c151d031bb1cbe712a5ef9ee16619228bd296f2afe582d9953d590d18bb205f70f844c16c0a2d8318037d43dd80f65c6a753f2a8e27c89c83e7ed70c52f7062dfbb1f544aa236b5c704e7b39ce0a55fd46528083ca61\",\n        \"signature\": \"874ddece08f30b30f0d4c8b3ed7c615149b8aa740daa347b55958f1e2119044f695a21069690506448d8e7352b9046511d7f39a5415bb9c57050fc17055c3808\"\n    },\n    {\n        \"secret_key\": \"dbfa45abaa55415238b1287634d5eec402dadf622e270c04a8914ced270a72be\",\n        \"public_key\": \"c0fe323581ea296750797eb5508ca19a583b537fa7df4529f0804a33c1a4bef4\",\n        \"message\": \"e26e8dcb44e641fc20080e95474bd39d716c5afe5a1ffb056d1eaab0c49f8570717db6437a03228a9ad9f4bb0b343b95e16023c0807eb2a15106a6eb12dc76683e69dda3363148c5d7dd9713af6f87a09410ea8f76b6b78a114429bc85f784812fca31acb0309552cc188c6e9697093cf404c6f0f4abe8a1608673fdfa5eb78f65fc1d49cdec4094b1bd234a46e0ec62a4b6d31b829611540127876bff4c173de058cf61004b014a7bdf793dfd6b63c507d2b23e0f56bc2fe6baf637cee40d18992295d848ef498f8a161bd87e60c91f97a91e9ef3f6d97f2b2d2104ba6fddd6c680706273dae87e6eec1af2a45984985069e809e8de32c12889299a32d40f38774599ac3324b7cb0a4ea632c5f910ad87f5adbfa5c3bb20498279fd53c1c267fe0a84773085da266b253cd853df7e963558cb06880780973423c564cd0bcd6b93334c195953d7cd899f8a547d1a1a0a8deff1381b4321574728cf71b96ff209e899daa8f13f41b230e17bffdfdd2a8943aa5d21e5f36e1da07edd6cee92dc48b5b2a7580146a9baf713950ce676255a89e34f8787547d62868db14ba46594da310d7e2d9e7c7dbe17dbd71eb47c56c5721dc96d696470573794809411cdfa276b059d0007c25d74b2a67d38246de11ef46dfe2670926fe4b63656231bc7268bba23f378e84a428c3cbf45cc539678fd467cd33dd0757cfa024e54da1ff54ce820229b778b184be1fa2e8468cc19955940735eaaa884022f6418b0b1f26bccf169f1bcac7d82a35ab6ef847e1dba537dcaff57250a8d1c71facb134cd06b01c45319132745dc488888a1d7761b8486a37e6988a1120bcc1682dbfc89143fc35b46935d8acf6ef3c42f0f4bf679dfd6ff44b6ada26b01a9f89f374c7d2ee48dfe1a410e897cdfd97f626d2668502814400793b3b07c8720bbddc59cb0f9de964ae075b4af3dd4baf6d0e4f94f294e8109d6577c4f8a9c7a5f7d694bf88f1a5ea7eba0a66da6c770c08b3abffc534df219dc3e3323b022e96cc86002b189181a1d2b527d27950b7f425a47da4013778bd00b71105922204921e9dc692c233f7baa04\",\n        \"signed\": \"a462a9baa56dc0f7a71bf87b95f48d642022d9d1733ee3683777a3782228ac85fcd83026be4ca97a345b084f50874e9124e16ba17dead4ad85c0e56f16ef1804e26e8dcb44e641fc20080e95474bd39d716c5afe5a1ffb056d1eaab0c49f8570717db6437a03228a9ad9f4bb0b343b95e16023c0807eb2a15106a6eb12dc76683e69dda3363148c5d7dd9713af6f87a09410ea8f76b6b78a114429bc85f784812fca31acb0309552cc188c6e9697093cf404c6f0f4abe8a1608673fdfa5eb78f65fc1d49cdec4094b1bd234a46e0ec62a4b6d31b829611540127876bff4c173de058cf61004b014a7bdf793dfd6b63c507d2b23e0f56bc2fe6baf637cee40d18992295d848ef498f8a161bd87e60c91f97a91e9ef3f6d97f2b2d2104ba6fddd6c680706273dae87e6eec1af2a45984985069e809e8de32c12889299a32d40f38774599ac3324b7cb0a4ea632c5f910ad87f5adbfa5c3bb20498279fd53c1c267fe0a84773085da266b253cd853df7e963558cb06880780973423c564cd0bcd6b93334c195953d7cd899f8a547d1a1a0a8deff1381b4321574728cf71b96ff209e899daa8f13f41b230e17bffdfdd2a8943aa5d21e5f36e1da07edd6cee92dc48b5b2a7580146a9baf713950ce676255a89e34f8787547d62868db14ba46594da310d7e2d9e7c7dbe17dbd71eb47c56c5721dc96d696470573794809411cdfa276b059d0007c25d74b2a67d38246de11ef46dfe2670926fe4b63656231bc7268bba23f378e84a428c3cbf45cc539678fd467cd33dd0757cfa024e54da1ff54ce820229b778b184be1fa2e8468cc19955940735eaaa884022f6418b0b1f26bccf169f1bcac7d82a35ab6ef847e1dba537dcaff57250a8d1c71facb134cd06b01c45319132745dc488888a1d7761b8486a37e6988a1120bcc1682dbfc89143fc35b46935d8acf6ef3c42f0f4bf679dfd6ff44b6ada26b01a9f89f374c7d2ee48dfe1a410e897cdfd97f626d2668502814400793b3b07c8720bbddc59cb0f9de964ae075b4af3dd4baf6d0e4f94f294e8109d6577c4f8a9c7a5f7d694bf88f1a5ea7eba0a66da6c770c08b3abffc534df219dc3e3323b022e96cc86002b189181a1d2b527d27950b7f425a47da4013778bd00b71105922204921e9dc692c233f7baa04\",\n        \"signature\": \"a462a9baa56dc0f7a71bf87b95f48d642022d9d1733ee3683777a3782228ac85fcd83026be4ca97a345b084f50874e9124e16ba17dead4ad85c0e56f16ef1804\"\n    },\n    {\n        \"secret_key\": \"ef64e17a53f7fbcafe3ea4687684a0dadb18d03735a40a53b3edb04907ee6162\",\n        \"public_key\": \"9186e6bc142961c4d3eb369e9e11578292de5b6af534d423ff240fa26e21a781\",\n        \"message\": \"6882456cc3d1ad0daa9b88eff0969f15e97b48d051967e1390847225f26ac25559f0246bf7d683fa28ecedad21491d77bd2696fa835d0fd119884fece9d803691b2fd3de17ee087c74007a7de9bc6534bbfe95fd32e97c375f4cb65731aa1e8346bea21be9f2c3dc874af0431906ccbc2c600127f4d3b069eb091d165ec453e672e93cae8b72f03371d8b8a8244ec4ec2e09f31df40206a2b1c84caa1b993cc675fde1c79bd4a7d15974fa29ce2e892c2899cf482c3d9663f6d2a79784f41c1f5866d37c8546f357d564d3c4218dfa6d20b6c282b400fedde52439d472212c5767a35da5201032da8730968b0720e8a604de6c1baa3f4e896ac2614fb1ab6e3f6cf387a8eb2ff8a92147ab349238432e509d829cb75b2c1765c51221848e25afff5f16e4dd0cd5c9f713c4aaab2ce836f8494506b5309dc2b0ae745bb9c4798098fb8641d520a08b02f75ad80dbc2ce29e890b4d72a3ffb2a1cbd538e1229f579c29ae66bca85e0fa08c8647a1abcfe8a49f5e508d4d2495556623d926ce49efa4350aaaab5cec2cd885be1d63475e3bab7c7cdc8d656173b8d45602f4b3d281241d17190327b24c3836b19311a193af86a6768f04852ab06e67c8ead591cdcbf3789c613209cfe03f58c0305f63203b487f7c5fc098877ec98a689c9d35af81e84078d66fe9e4eccbb1cc6c71991c03017bb811f41f07de68fad194146061324f3d0ef217a54cf38f7a625a38869f67d0b7431df937cde349c175ce8b26ac88d39a43e279b018764efa4dd627cbf591f6209c4a5bb19ebfa7c7135592d02e501cae5e6b31c90e72faab47f7dced2c48adf88443b3ede60cefb0d6379d6922ec437f086bad6217d4d4ffef18e22523664bf4e9ca1e65a28c2a7a60c5f6bc906b737c29935f9097463048575befd1a2549dc474b13e68aeecf166043e075aac515540f831b43066cef932e63dcd5b37b61578c35b09e45cc2a8def57103edfc5f649831a8961fe4a4b3721f1d6df4ea9f033881b474300e0f12cb9cd3babdcffbb918dd9bb0e2f5b21033e43023a0d2e66da3ab0f07ee988b16889ca5d51abdc05fde\",\n        \"signed\": \"f58f396ba27e067a5fe003e385582ae3490e05957715d704da0da63a6419d2e4f6dc66b7e88e428a6f21b9ea202299a3c36b242b0ea06476ff12d0b6580c04036882456cc3d1ad0daa9b88eff0969f15e97b48d051967e1390847225f26ac25559f0246bf7d683fa28ecedad21491d77bd2696fa835d0fd119884fece9d803691b2fd3de17ee087c74007a7de9bc6534bbfe95fd32e97c375f4cb65731aa1e8346bea21be9f2c3dc874af0431906ccbc2c600127f4d3b069eb091d165ec453e672e93cae8b72f03371d8b8a8244ec4ec2e09f31df40206a2b1c84caa1b993cc675fde1c79bd4a7d15974fa29ce2e892c2899cf482c3d9663f6d2a79784f41c1f5866d37c8546f357d564d3c4218dfa6d20b6c282b400fedde52439d472212c5767a35da5201032da8730968b0720e8a604de6c1baa3f4e896ac2614fb1ab6e3f6cf387a8eb2ff8a92147ab349238432e509d829cb75b2c1765c51221848e25afff5f16e4dd0cd5c9f713c4aaab2ce836f8494506b5309dc2b0ae745bb9c4798098fb8641d520a08b02f75ad80dbc2ce29e890b4d72a3ffb2a1cbd538e1229f579c29ae66bca85e0fa08c8647a1abcfe8a49f5e508d4d2495556623d926ce49efa4350aaaab5cec2cd885be1d63475e3bab7c7cdc8d656173b8d45602f4b3d281241d17190327b24c3836b19311a193af86a6768f04852ab06e67c8ead591cdcbf3789c613209cfe03f58c0305f63203b487f7c5fc098877ec98a689c9d35af81e84078d66fe9e4eccbb1cc6c71991c03017bb811f41f07de68fad194146061324f3d0ef217a54cf38f7a625a38869f67d0b7431df937cde349c175ce8b26ac88d39a43e279b018764efa4dd627cbf591f6209c4a5bb19ebfa7c7135592d02e501cae5e6b31c90e72faab47f7dced2c48adf88443b3ede60cefb0d6379d6922ec437f086bad6217d4d4ffef18e22523664bf4e9ca1e65a28c2a7a60c5f6bc906b737c29935f9097463048575befd1a2549dc474b13e68aeecf166043e075aac515540f831b43066cef932e63dcd5b37b61578c35b09e45cc2a8def57103edfc5f649831a8961fe4a4b3721f1d6df4ea9f033881b474300e0f12cb9cd3babdcffbb918dd9bb0e2f5b21033e43023a0d2e66da3ab0f07ee988b16889ca5d51abdc05fde\",\n        \"signature\": \"f58f396ba27e067a5fe003e385582ae3490e05957715d704da0da63a6419d2e4f6dc66b7e88e428a6f21b9ea202299a3c36b242b0ea06476ff12d0b6580c0403\"\n    },\n    {\n        \"secret_key\": \"3347dc47bb3d2e5d0286ac06a54fd921c9e96b6899862a54e5cc8115d3d0ba99\",\n        \"public_key\": \"d00b645d86dbb7e524757ec778c62b7e60d0b6576883338c9b67c2c7e4509268\",\n        \"message\": \"e2f48edf9d643320ab991c8ff9f6aa75fe066e7d88ff1e472a5ac9c518de1fb62983b1007f6422809117bdbe8a0e5787f66bb057d27f129a200b40576e1719cf9e98fcb72af94bb82ee70f3719a2e2cd9b64777cea5e446459874b74bfbf56b2d2526400592a9b45a5cb798092b60a81b71d82f0685fae7f810b52d226adac7ad8a9183f09febee9d25046c0fe306681ace2bff91b3482b0bc30b2021c4341645d675134fe3081c51e5c59e40b375a1434f63b426e30530da9353bb2a9423220434ae59d7b6fdc143f4982eb8cfa7751b75bf3e9c913c73b760b07d395310c59f3b77ebf12ed2d7b03590d3317af17df421e78b0849fd56d945c5696a040fcaa78a93ecc16d5ac3445063611f3013e9a3ae2e1c270dd01a8ffe3e6126bc1e4c95f6547a8651f26b6404e39ee4ce7618918f3f937a52573ec277b771e91ad096fa15c7a340a809b470318a4636423eb4888a12160c4663fce2996d638896c839b2c7ad4b3a9b2e6cb71e912fe39b843c6e0832eca22de938b50ae863e48582c10851232f75e5225b8896b5a470f818b6fa39eb7bb590357678612d25fe1a40ea1b9d71d880909c1bd4ad176cc0ceffdcee7099e7882a7c907e4bec79830c6771acb89944bd54a5165b31870916921b198acd4432e7eed8ce1deb345b107eda760266fcbda3ba5229400a30360a4645ca8db38c3d5f4a8def157bbdbbf2c1fa1dc6b0514a4f5a0364f928381b40f95579a26467f2282a8a255758402ac9ca80e89b9cc6860a34bb3f90c3237657c2129ea48c852b92569e81106bce461e2024454821a917592d1991b5b69f27bbe019977528a2fc01192c56b4aea873cf8c58dfd7cb4b0e917e87a8704c992820f98d77404d3f1d2050c6743f6e93cdb51a61aa6f45b351b26461d1329f3151272ac396234d0d67c178acf91fc510d86429c69a87fdf101155da8d94de6722238a6fb17016862b11d502c667ee9ca0aabe1c20b97789f1867add78b8b87e9ab51934c0b4a16c2cbc4d2efedb79c05b23e0cf789201ac75fe076d315fcbac20ba0d31e4dc616927d6eab1b1c87a1c9c778e4bd285295874\",\n        \"signed\": \"9ab4299b17729344750b69dc6037368c98f47be627fbd9adfd8db39f9964ddb7bc92d674c7be740756396baaeeacbf74947b6191c6ed1f5d32a63df36d542601e2f48edf9d643320ab991c8ff9f6aa75fe066e7d88ff1e472a5ac9c518de1fb62983b1007f6422809117bdbe8a0e5787f66bb057d27f129a200b40576e1719cf9e98fcb72af94bb82ee70f3719a2e2cd9b64777cea5e446459874b74bfbf56b2d2526400592a9b45a5cb798092b60a81b71d82f0685fae7f810b52d226adac7ad8a9183f09febee9d25046c0fe306681ace2bff91b3482b0bc30b2021c4341645d675134fe3081c51e5c59e40b375a1434f63b426e30530da9353bb2a9423220434ae59d7b6fdc143f4982eb8cfa7751b75bf3e9c913c73b760b07d395310c59f3b77ebf12ed2d7b03590d3317af17df421e78b0849fd56d945c5696a040fcaa78a93ecc16d5ac3445063611f3013e9a3ae2e1c270dd01a8ffe3e6126bc1e4c95f6547a8651f26b6404e39ee4ce7618918f3f937a52573ec277b771e91ad096fa15c7a340a809b470318a4636423eb4888a12160c4663fce2996d638896c839b2c7ad4b3a9b2e6cb71e912fe39b843c6e0832eca22de938b50ae863e48582c10851232f75e5225b8896b5a470f818b6fa39eb7bb590357678612d25fe1a40ea1b9d71d880909c1bd4ad176cc0ceffdcee7099e7882a7c907e4bec79830c6771acb89944bd54a5165b31870916921b198acd4432e7eed8ce1deb345b107eda760266fcbda3ba5229400a30360a4645ca8db38c3d5f4a8def157bbdbbf2c1fa1dc6b0514a4f5a0364f928381b40f95579a26467f2282a8a255758402ac9ca80e89b9cc6860a34bb3f90c3237657c2129ea48c852b92569e81106bce461e2024454821a917592d1991b5b69f27bbe019977528a2fc01192c56b4aea873cf8c58dfd7cb4b0e917e87a8704c992820f98d77404d3f1d2050c6743f6e93cdb51a61aa6f45b351b26461d1329f3151272ac396234d0d67c178acf91fc510d86429c69a87fdf101155da8d94de6722238a6fb17016862b11d502c667ee9ca0aabe1c20b97789f1867add78b8b87e9ab51934c0b4a16c2cbc4d2efedb79c05b23e0cf789201ac75fe076d315fcbac20ba0d31e4dc616927d6eab1b1c87a1c9c778e4bd285295874\",\n        \"signature\": \"9ab4299b17729344750b69dc6037368c98f47be627fbd9adfd8db39f9964ddb7bc92d674c7be740756396baaeeacbf74947b6191c6ed1f5d32a63df36d542601\"\n    },\n    {\n        \"secret_key\": \"ff15d6e74e28e41d05a8663a702f038d5b8578c4275e772b73ba440bc5f55a06\",\n        \"public_key\": \"4747e2e9b82637b3844b85f75b59f7136b7fdb1a62e7b70d6aac17b3c5752f2f\",\n        \"message\": \"ce7bf972844f5184ae8eac87b12be9202c7239961dc23cd41ff55b9bfaac0cc06f3f1decfa9571095c8e82b4eb6f8a1c52c8d3deaa61a9aa94e2ecd9ab5b8063f2da6d8015df0a5144fa3a48e305ad9f41eaa11c4d74854374ecbf382e3002579a9a249efa1e1ca04d338447d7f2206703e6cabf5bbd332b42573bcbd3b6f71b7c3bf73d4c774aa01e866841432829d07f96e1f61a20216d968c90e3ed11f663f7d6271622fefcf3ab68f344328515d5cce2ce85e8bf3d1d09043692e1fb8bbddc07a4ab0a3eef8ca6a420e74bff8d3d715596aa821682954fe89629ae27c1bb03b6aa09f36a39a3e37ba98132f4e23888f9f335e7beaa2cb2727acc3d2777309b85295232e54da88ebb6f1053d6de79ac6609852eb93a0a35bc1a7bdc22d628bc86124d696c3f9828b6f8b9aade1a65216177486c252a4b42d90a4e0fea2093489e244d808ef7021a97d5608c0ae1d663c775e8bb9e9a7315f1feb6d129b5a541ea5929a2c633b6d8c3c45441717946cf873e9b4c512180135d54f053abe44c6df39b7b062ef7240162cbd0b851afe5f91536a9499418e8bff4996473d805ebc1ae48da2d0b129e8e8252f1d53c328f32db252de3befbe5f31280121143a8004a4cae631c827409e520e394cd0f8950cd4c3cf3f3dbd4952a4dfe69875f565389061ad0a0cee6b6aff09ceca26d990e896a2aba9f3b26015b63423768684c03ed0de6cee7ac5bbdf9f485c2275cd12aefa8f907b851a02d51c34f121b77f3a56a9ebd1d65ffe89bee381ff2a7480e8968cff25ac8d04e149a9d5027d14b88f8ae2604d2ac22ac67d13e90ada620c2046d28299384d0959fb76e22588796ce427aaeaf4e2a8aaec3e87f84ccd082524c96d766eec66f0bec3e799558145f09d330134f1c63f37053cd4bdc1c37fde97291857551f50ac8e15f06ac1c73daa1e8c5bc9277e3d69cb44a3237ec57dbbccfdf6685ada20b74a1bc6b74ab05690eaf9bd0c4be17042f5cd320cdd613dc08d29af346aa4191ce0b4f85bb2ad7f3bac738a9377ec6b84062cc70fca9ecfbe1f57fe5b2ce7a4f739c81cabcde046451dd61ce1dbc\",\n        \"signed\": \"42c1295fafe26de3ea34926bf1ef80bcafe47b21b90eaed19635ed7538d767cbf3a1e5dedaab82adf75120373e923202f7fda0826784292eba8b238b6cb88304ce7bf972844f5184ae8eac87b12be9202c7239961dc23cd41ff55b9bfaac0cc06f3f1decfa9571095c8e82b4eb6f8a1c52c8d3deaa61a9aa94e2ecd9ab5b8063f2da6d8015df0a5144fa3a48e305ad9f41eaa11c4d74854374ecbf382e3002579a9a249efa1e1ca04d338447d7f2206703e6cabf5bbd332b42573bcbd3b6f71b7c3bf73d4c774aa01e866841432829d07f96e1f61a20216d968c90e3ed11f663f7d6271622fefcf3ab68f344328515d5cce2ce85e8bf3d1d09043692e1fb8bbddc07a4ab0a3eef8ca6a420e74bff8d3d715596aa821682954fe89629ae27c1bb03b6aa09f36a39a3e37ba98132f4e23888f9f335e7beaa2cb2727acc3d2777309b85295232e54da88ebb6f1053d6de79ac6609852eb93a0a35bc1a7bdc22d628bc86124d696c3f9828b6f8b9aade1a65216177486c252a4b42d90a4e0fea2093489e244d808ef7021a97d5608c0ae1d663c775e8bb9e9a7315f1feb6d129b5a541ea5929a2c633b6d8c3c45441717946cf873e9b4c512180135d54f053abe44c6df39b7b062ef7240162cbd0b851afe5f91536a9499418e8bff4996473d805ebc1ae48da2d0b129e8e8252f1d53c328f32db252de3befbe5f31280121143a8004a4cae631c827409e520e394cd0f8950cd4c3cf3f3dbd4952a4dfe69875f565389061ad0a0cee6b6aff09ceca26d990e896a2aba9f3b26015b63423768684c03ed0de6cee7ac5bbdf9f485c2275cd12aefa8f907b851a02d51c34f121b77f3a56a9ebd1d65ffe89bee381ff2a7480e8968cff25ac8d04e149a9d5027d14b88f8ae2604d2ac22ac67d13e90ada620c2046d28299384d0959fb76e22588796ce427aaeaf4e2a8aaec3e87f84ccd082524c96d766eec66f0bec3e799558145f09d330134f1c63f37053cd4bdc1c37fde97291857551f50ac8e15f06ac1c73daa1e8c5bc9277e3d69cb44a3237ec57dbbccfdf6685ada20b74a1bc6b74ab05690eaf9bd0c4be17042f5cd320cdd613dc08d29af346aa4191ce0b4f85bb2ad7f3bac738a9377ec6b84062cc70fca9ecfbe1f57fe5b2ce7a4f739c81cabcde046451dd61ce1dbc\",\n        \"signature\": \"42c1295fafe26de3ea34926bf1ef80bcafe47b21b90eaed19635ed7538d767cbf3a1e5dedaab82adf75120373e923202f7fda0826784292eba8b238b6cb88304\"\n    },\n    {\n        \"secret_key\": \"1ed37b610b8b35417d04e59aaadac688ff81f1e507c89b4f400160941908cb8c\",\n        \"public_key\": \"48e8cbeb1240bdebf0a2d92953aa89b282c49aab2c38ae69044c51515c3300d5\",\n        \"message\": \"1e6767df97db1cfb4088da7b200d9f59ec8dd4533b83be309f37650031065727cd5202cef48426a5f3a11d50b381f8bc22ff101827359f2d0a610a4f755464a0c891cbd98d2dcb41d9779d288fcf1fea62e52163ae67e90428b86398efa218f1b982081fc513305fd3e8ece7f9acb0e10e001d2ed299a48a80870b3d5d8ab9006309b31591caf0583380073a2db61f45254ab965b5e4672c4bfaa86e336c49278552729fb2da76ffe502ec61e1696c7fc9ef19f7cc2a2775b29700cb384294063a17fed4fc635bc13282a90dad0c00aadbcd569f156a854f8ba9e7d607d20f2e9e5337981161d804644668d064fa63dceb9f5801353d0ab9f41d1d8bdc76c13ab2f023ea01adbc4c8168d939e98f64fd8919384abe76709263c0cd7c3efadc2801cc4abd80a09bb3ed6bb78cd620969cd35c6a3a5d01485ead4c45ebb6ac6a83212a7c76675427b21da8a7a5047b30a6100cda02476c186e6ce40d2768a942c9f87305e9d363b524c0094a9e2e29f585894c0adbfcd60690fc7fb0a9c717cf43b484fd45151b1304169c26921db2276ec05ad22ad166854fd2f94085778c470dc452e5cfa4aee04facb770526e1f248d3d15c27280fdfa1fd2c1044bcbc881c3d99815c97fbea46110be02dab774f3a610e5802abf36a49875c682638e0ae4cc8277c5e9aa7307445e6bbcbe549eec2a45b1597f7447107b62e2cee0a5fc51beae3e1fe9befb1885d9b30f9b4f1f56206dee0d67779c57f484c8c3c899a515a9d1c10f6059840c1c73d3f05bcb88590c52f7da391838dc2e73228f0981c289a4c27f0c757faf7b3b89146e33dafa490d9e0f9275b0cfa6a7710a73831459595bf732112b62fc864ca4c829784a3f16eec4e18f936918a7b9891669e933223f745fda562bc0a4e61e3d14ea45dfc327e2fc0cdfe6f2f97546c90fce82f522291480111a1e6b9388272c0be28d20ed84bb84d49bc199cd599948b8f2039d07827a3f4075d3a67ee572a01379a36213fe116e768b4114e8a4b3134c3818960772d727b0ca6f7c997ca99843b7eb02ffc013971cbe0e6e60d49773f1e8c0b30606131cb10c3e04\",\n        \"signed\": \"8608815e10590d5504874d8999fd6f09626f950be20c912c27c9de6e79b0faf777a533bd5bb667ab513a49458ecd6787a09ec0df6c9c9d6333c5e3ae61ea370a1e6767df97db1cfb4088da7b200d9f59ec8dd4533b83be309f37650031065727cd5202cef48426a5f3a11d50b381f8bc22ff101827359f2d0a610a4f755464a0c891cbd98d2dcb41d9779d288fcf1fea62e52163ae67e90428b86398efa218f1b982081fc513305fd3e8ece7f9acb0e10e001d2ed299a48a80870b3d5d8ab9006309b31591caf0583380073a2db61f45254ab965b5e4672c4bfaa86e336c49278552729fb2da76ffe502ec61e1696c7fc9ef19f7cc2a2775b29700cb384294063a17fed4fc635bc13282a90dad0c00aadbcd569f156a854f8ba9e7d607d20f2e9e5337981161d804644668d064fa63dceb9f5801353d0ab9f41d1d8bdc76c13ab2f023ea01adbc4c8168d939e98f64fd8919384abe76709263c0cd7c3efadc2801cc4abd80a09bb3ed6bb78cd620969cd35c6a3a5d01485ead4c45ebb6ac6a83212a7c76675427b21da8a7a5047b30a6100cda02476c186e6ce40d2768a942c9f87305e9d363b524c0094a9e2e29f585894c0adbfcd60690fc7fb0a9c717cf43b484fd45151b1304169c26921db2276ec05ad22ad166854fd2f94085778c470dc452e5cfa4aee04facb770526e1f248d3d15c27280fdfa1fd2c1044bcbc881c3d99815c97fbea46110be02dab774f3a610e5802abf36a49875c682638e0ae4cc8277c5e9aa7307445e6bbcbe549eec2a45b1597f7447107b62e2cee0a5fc51beae3e1fe9befb1885d9b30f9b4f1f56206dee0d67779c57f484c8c3c899a515a9d1c10f6059840c1c73d3f05bcb88590c52f7da391838dc2e73228f0981c289a4c27f0c757faf7b3b89146e33dafa490d9e0f9275b0cfa6a7710a73831459595bf732112b62fc864ca4c829784a3f16eec4e18f936918a7b9891669e933223f745fda562bc0a4e61e3d14ea45dfc327e2fc0cdfe6f2f97546c90fce82f522291480111a1e6b9388272c0be28d20ed84bb84d49bc199cd599948b8f2039d07827a3f4075d3a67ee572a01379a36213fe116e768b4114e8a4b3134c3818960772d727b0ca6f7c997ca99843b7eb02ffc013971cbe0e6e60d49773f1e8c0b30606131cb10c3e04\",\n        \"signature\": \"8608815e10590d5504874d8999fd6f09626f950be20c912c27c9de6e79b0faf777a533bd5bb667ab513a49458ecd6787a09ec0df6c9c9d6333c5e3ae61ea370a\"\n    },\n    {\n        \"secret_key\": \"84364478ec94bd25c4bdb82d296229e6dace2b1359d6d21be2b3afcd7bda19c7\",\n        \"public_key\": \"a1814f8ce0fc3b236093a50f468c1316211fe6c52e2345d9f0766b3688a03cad\",\n        \"message\": \"7bb7293de55f058fb2ec22b687260543dcaa90f140b9f45eddd4bc22e40977e00ed33cd1ef1bba13c1d0990859005569a80767e4864a2cd288c81393e04ad971782e2bc493108cbe80dacf0b7b9cd534988407a4f9327ec8e9c4043284ef6ee5a26a5b417765d3eabb48a007e7c7f32987d70a139ac41678cdf7a55cb80cf9db5eaa45f3de0fbfbadffc40996370e48b1ff5edd97940e750792164836a4a5ac2e3ff53e48a1e556db9ad0c5c0b944f4aee519a2b0a88bb1c1fc7454524cd57aa5350986243d34fc58e24e819ec0b8545d8dfcf6b20311441d3a35d3e71b3e3ecd7884dda8433a405e3d9969000c820a89b95d197841d98ae734a2e81daf6a7dcf56cb2fc26f2165a5f42b86c7e9e5b11161700a1ab9831f3fae58e14208be1bf33b58ecce81b0c6b7e02f88adf9ab030263e2cc9b6e33ebca3f495492e32bfe372537de6c6b87644828f74942a02b007f14c3fc5dbde76333d36d07631b7a9924f717550040697923fa7b9546bfb0217024ea3f252b515b5d64a62c48e027cef6750beda49a02447039b250a0bda07dc062491a662e26874c8d00f80e6cfc8b30f2c3bf7720b57f2615fc478fefaa6d31705b43c5a54f758666b302a8d34953131941b7957730476794d0bd9d2dfa72fd203f22df5ec6bbaace8b9394bebdaeaa561461011b4fca6185c9a38283f5403fdac326d1f734c6a5ded6724d9f384aebd6cabfcbec12abab9820d080732515e0500cf5d3e2f9ef80a4d7646a7da9eff410f507c69873b32d540ec32b283ef3179a4c632b366576dff058faf8c8c70bc69be808982ec1497ae8911b00165a66695f4d3b987e7390b5cf878e35e676541285e4e13dfaeb2f368cb511b778b106a428778a1b8f2a7d2e093519bc9b5188e38c6793e96bd0d30e2a3db9ee1468c3dc87cc365c810f9dbdf01a4b51421f6fc8dfda3a16e2da7ca7159b686a5e167338937882ff715d3e750d958fc9e4b1f0553129299aa8430183e506cd7f2b279076e0e1cca9749cf123ce507fe07ddbbc4dcca6cdb9ef1b833f61d4bff00bec012158f432ceb75b4f2edb1bb84e5ebb9259e09f9625ce3\",\n        \"signed\": \"b4c2321ade3c19ed4ed4c639d5a4d6f2be8e2fb13bb7bd625ad6dc87e2c20f93ad6be7b7e42711a878db9d76054bfd7bc25e3774a93da1543c9b4f6633b0be097bb7293de55f058fb2ec22b687260543dcaa90f140b9f45eddd4bc22e40977e00ed33cd1ef1bba13c1d0990859005569a80767e4864a2cd288c81393e04ad971782e2bc493108cbe80dacf0b7b9cd534988407a4f9327ec8e9c4043284ef6ee5a26a5b417765d3eabb48a007e7c7f32987d70a139ac41678cdf7a55cb80cf9db5eaa45f3de0fbfbadffc40996370e48b1ff5edd97940e750792164836a4a5ac2e3ff53e48a1e556db9ad0c5c0b944f4aee519a2b0a88bb1c1fc7454524cd57aa5350986243d34fc58e24e819ec0b8545d8dfcf6b20311441d3a35d3e71b3e3ecd7884dda8433a405e3d9969000c820a89b95d197841d98ae734a2e81daf6a7dcf56cb2fc26f2165a5f42b86c7e9e5b11161700a1ab9831f3fae58e14208be1bf33b58ecce81b0c6b7e02f88adf9ab030263e2cc9b6e33ebca3f495492e32bfe372537de6c6b87644828f74942a02b007f14c3fc5dbde76333d36d07631b7a9924f717550040697923fa7b9546bfb0217024ea3f252b515b5d64a62c48e027cef6750beda49a02447039b250a0bda07dc062491a662e26874c8d00f80e6cfc8b30f2c3bf7720b57f2615fc478fefaa6d31705b43c5a54f758666b302a8d34953131941b7957730476794d0bd9d2dfa72fd203f22df5ec6bbaace8b9394bebdaeaa561461011b4fca6185c9a38283f5403fdac326d1f734c6a5ded6724d9f384aebd6cabfcbec12abab9820d080732515e0500cf5d3e2f9ef80a4d7646a7da9eff410f507c69873b32d540ec32b283ef3179a4c632b366576dff058faf8c8c70bc69be808982ec1497ae8911b00165a66695f4d3b987e7390b5cf878e35e676541285e4e13dfaeb2f368cb511b778b106a428778a1b8f2a7d2e093519bc9b5188e38c6793e96bd0d30e2a3db9ee1468c3dc87cc365c810f9dbdf01a4b51421f6fc8dfda3a16e2da7ca7159b686a5e167338937882ff715d3e750d958fc9e4b1f0553129299aa8430183e506cd7f2b279076e0e1cca9749cf123ce507fe07ddbbc4dcca6cdb9ef1b833f61d4bff00bec012158f432ceb75b4f2edb1bb84e5ebb9259e09f9625ce3\",\n        \"signature\": \"b4c2321ade3c19ed4ed4c639d5a4d6f2be8e2fb13bb7bd625ad6dc87e2c20f93ad6be7b7e42711a878db9d76054bfd7bc25e3774a93da1543c9b4f6633b0be09\"\n    },\n    {\n        \"secret_key\": \"00db37ad2a195f08a08440d059259e539feb40b474928255e7c94ebc3b05038c\",\n        \"public_key\": \"04f88bf639e0f71a57d0d0afff5fe97dde3809ff28ec68eb6fc423f4faff4390\",\n        \"message\": \"5a94f729d30dd8aae2a5c8c28547bf4506295dc61bfead9727746082d43b0f8114c8c18c5edaf2fec7cae819356338f0bf115a17b038acfd7c96ba6262cabd5710fc0efb43d13df4065becbf1b9e279c03ec9bbfed54d9a13fe06a55a3bd05c807858b41e18dbde13b0907d4034132262d9c2f4d2d376e1609ad280de20ba709844dbd12950257f1b07ef8cc3337c01a702693fb4d92d047e698c3a6dd46c4a92a10d4c780e52e5025e09d56535d7eeb9fe7f033e6e9260a68f9d54b6f37cc069656e3bcee06922b349681a8e7751cdecbe1ecb663fbc6f7c861f853dc310f33defa98ee343a68632ec22cafecb7f3212f81e70b71843b9fe8c86a68b5c86f0322d348a76da7f1ba0ca3cd7b6fd15ff89292b3f636cd08cf625c74d5102cabb571a3dba86a1c92f41c7203b44942f5a24625ac37d77e49a57f118238699d807c250d5bf46f7a3cec5779a6e5ae1a6ca160cff37fb3b78388fe9c030c40e7154601081a517fc0aa1802cd3b845b946efe94aa8b9e03f68a80ded0dfbfad4daee40fa838c133841ae8a3ce0d79fa8a2b9434bac5e1da6e0c7193e8dea435a03a85f76184f7ebe2aa749be9413104a178689ba6d27e94fccf61eb3aba0e6a5a63af0ca8f05a35cb63705194e44d9293de3929b0d92be6f8e627c350a83fc9000aa95b93820be9795c80b5662cd7b34822328061356dc580578d1a35b10140dcd248e4853104d2c5b2c13ff683dd5c30794be4a76858af1c0d9af347ce1dcd972ee49aac12bbcd899c9329871d3e7a0683d175779afe35f26a2d248fd780ea851dc4ba6d21f8a171aa6cb8697d9d112161540307cd54f931775d70b33d3b6de1091fc1750531c08fa70f7be38aa110d6746bb565db7b470f900850fbbf1c662fd613e4f3a5689549e3107e9b0f17def7a5bd7fd7596c4d04c7f48c779fc35e09335e1df784084e55d8551d1ff49de5b311cd350f347a0bd2863a2a30e6ea183ad2e3eedebc18dd28c6a596e693dc3389f7d90b713e3a85a62516305a70667fc1fb3cb10e8a955750273943c568e10769cef78199df4450dbc490fef1b304b052221b2db9c44fe00345\",\n        \"signed\": \"f4d1c80f5e7b91c5c7a82a682d49ba6fb19d400a299748a0c969bb99816998be634e84da78581b06e3470efec39804fed93d29739f0439a8095ac40d9d385e045a94f729d30dd8aae2a5c8c28547bf4506295dc61bfead9727746082d43b0f8114c8c18c5edaf2fec7cae819356338f0bf115a17b038acfd7c96ba6262cabd5710fc0efb43d13df4065becbf1b9e279c03ec9bbfed54d9a13fe06a55a3bd05c807858b41e18dbde13b0907d4034132262d9c2f4d2d376e1609ad280de20ba709844dbd12950257f1b07ef8cc3337c01a702693fb4d92d047e698c3a6dd46c4a92a10d4c780e52e5025e09d56535d7eeb9fe7f033e6e9260a68f9d54b6f37cc069656e3bcee06922b349681a8e7751cdecbe1ecb663fbc6f7c861f853dc310f33defa98ee343a68632ec22cafecb7f3212f81e70b71843b9fe8c86a68b5c86f0322d348a76da7f1ba0ca3cd7b6fd15ff89292b3f636cd08cf625c74d5102cabb571a3dba86a1c92f41c7203b44942f5a24625ac37d77e49a57f118238699d807c250d5bf46f7a3cec5779a6e5ae1a6ca160cff37fb3b78388fe9c030c40e7154601081a517fc0aa1802cd3b845b946efe94aa8b9e03f68a80ded0dfbfad4daee40fa838c133841ae8a3ce0d79fa8a2b9434bac5e1da6e0c7193e8dea435a03a85f76184f7ebe2aa749be9413104a178689ba6d27e94fccf61eb3aba0e6a5a63af0ca8f05a35cb63705194e44d9293de3929b0d92be6f8e627c350a83fc9000aa95b93820be9795c80b5662cd7b34822328061356dc580578d1a35b10140dcd248e4853104d2c5b2c13ff683dd5c30794be4a76858af1c0d9af347ce1dcd972ee49aac12bbcd899c9329871d3e7a0683d175779afe35f26a2d248fd780ea851dc4ba6d21f8a171aa6cb8697d9d112161540307cd54f931775d70b33d3b6de1091fc1750531c08fa70f7be38aa110d6746bb565db7b470f900850fbbf1c662fd613e4f3a5689549e3107e9b0f17def7a5bd7fd7596c4d04c7f48c779fc35e09335e1df784084e55d8551d1ff49de5b311cd350f347a0bd2863a2a30e6ea183ad2e3eedebc18dd28c6a596e693dc3389f7d90b713e3a85a62516305a70667fc1fb3cb10e8a955750273943c568e10769cef78199df4450dbc490fef1b304b052221b2db9c44fe00345\",\n        \"signature\": \"f4d1c80f5e7b91c5c7a82a682d49ba6fb19d400a299748a0c969bb99816998be634e84da78581b06e3470efec39804fed93d29739f0439a8095ac40d9d385e04\"\n    },\n    {\n        \"secret_key\": \"6ca1a1482a07f2a6c57f041197b34a5119e68903cf6dfb51711d9550973163c0\",\n        \"public_key\": \"8034a55e3b6ed799f49e2e703a81f4ac02573c445d765e3069be42f09cbd18ad\",\n        \"message\": \"08fd8487503c3f3296b6f1b64d6e85906fd5986cf9c5d9fa8a59d92f44e6470af34bcdef336ffdc86456ec7a7b5761f1adea027326630e68abc6b8cd5ddf40b641a259ad024321bf3ef98e7632797149c492d53594752c550dfbc4fa6bf47176f423a2705693947aa90d68ddc8efb6cb9dbecafd2830d04fd93b1e9e7c12b93e0d0f3e2634900f25860ddadbaece1780ff2d3f3d9fb838fd0d5d66f8afb305ff1a1aedca2b974b63e43f5b3cc9dfed1bcf11999176ed9585ac829bc6794ef3acd872e8d2e92608b320f894996a562e1eb177e21be57c22c41ec259a3dff9c7c9491db838d76cf9b0383111598e357f44babebf121bdb24ee9d557b7d5af491a0a0365c90361fe4f7e3d13a17da3a39fd43f690dfb0b2d860cab419f775ab7152cdc8f2afdc50e8d5da5da01706eea2a2ffad4babee8b03da336a4d843d9d7e0a93f36a92e6610a368b63133f05a3fdc55e3e1a440b0f87a53364c1d37242c57a109e6df69345b01c21c1089e790a66f4f3380d3b76ffb420dfe1e6200eace579265a427fbd355514ef953e1a6e968e37021b3c6a290dcd0293da6768dad7c66311633051c0accb0b9165464dfddfded23bd13ef908744f9c2111dc153142d2f10534d893fe0b545fec53fdb3b35b518398b02ab21791fa977e30cf4b404e7a299d3787108b836aa0d59c114f1f36719a7acf85ac994d9cb72306f258f78ac0a3b6c05343e0b7a9aa726e52267edf97f4972f7664f43720ad33ce6e615440e36537cbc569bd6ff94ffdaea51e06029dae78c5b915c537caea6f1504147979b8aaae0bcd9618437ebed0b55efaec320e84c75959a37a260a02d4ef1bb62641520f1a03ddea8c4c1de8d7fac58da408b0ab4757a135f1d075c9f7c99fb99db9427ce9b0d626cb1ac189ad8663d7a714fb5cd1585c3bf99a0aa46d763978d0b12d65c438bbb73feaa51ba26a459e7bea25439466c08613e42540c8c6d54367f221fcce0c5eb6af2faa181ea21521809be75649cf8dee7671db7f948f346cbd0302bf9a06eabc72e2e512b3df885f6daa398f93e36dae2d6a04478121f97787d4cedff6db09aaf10f27b1\",\n        \"signed\": \"dd9bdbadd9fdc81ce230288c4a068df07e18b4c7cc51c0ca4811dfbd04765c56bc883240e46e3a42c01d8d2424fbc332b7c5a17bceb1f6e8dad0bfe562cad30208fd8487503c3f3296b6f1b64d6e85906fd5986cf9c5d9fa8a59d92f44e6470af34bcdef336ffdc86456ec7a7b5761f1adea027326630e68abc6b8cd5ddf40b641a259ad024321bf3ef98e7632797149c492d53594752c550dfbc4fa6bf47176f423a2705693947aa90d68ddc8efb6cb9dbecafd2830d04fd93b1e9e7c12b93e0d0f3e2634900f25860ddadbaece1780ff2d3f3d9fb838fd0d5d66f8afb305ff1a1aedca2b974b63e43f5b3cc9dfed1bcf11999176ed9585ac829bc6794ef3acd872e8d2e92608b320f894996a562e1eb177e21be57c22c41ec259a3dff9c7c9491db838d76cf9b0383111598e357f44babebf121bdb24ee9d557b7d5af491a0a0365c90361fe4f7e3d13a17da3a39fd43f690dfb0b2d860cab419f775ab7152cdc8f2afdc50e8d5da5da01706eea2a2ffad4babee8b03da336a4d843d9d7e0a93f36a92e6610a368b63133f05a3fdc55e3e1a440b0f87a53364c1d37242c57a109e6df69345b01c21c1089e790a66f4f3380d3b76ffb420dfe1e6200eace579265a427fbd355514ef953e1a6e968e37021b3c6a290dcd0293da6768dad7c66311633051c0accb0b9165464dfddfded23bd13ef908744f9c2111dc153142d2f10534d893fe0b545fec53fdb3b35b518398b02ab21791fa977e30cf4b404e7a299d3787108b836aa0d59c114f1f36719a7acf85ac994d9cb72306f258f78ac0a3b6c05343e0b7a9aa726e52267edf97f4972f7664f43720ad33ce6e615440e36537cbc569bd6ff94ffdaea51e06029dae78c5b915c537caea6f1504147979b8aaae0bcd9618437ebed0b55efaec320e84c75959a37a260a02d4ef1bb62641520f1a03ddea8c4c1de8d7fac58da408b0ab4757a135f1d075c9f7c99fb99db9427ce9b0d626cb1ac189ad8663d7a714fb5cd1585c3bf99a0aa46d763978d0b12d65c438bbb73feaa51ba26a459e7bea25439466c08613e42540c8c6d54367f221fcce0c5eb6af2faa181ea21521809be75649cf8dee7671db7f948f346cbd0302bf9a06eabc72e2e512b3df885f6daa398f93e36dae2d6a04478121f97787d4cedff6db09aaf10f27b1\",\n        \"signature\": \"dd9bdbadd9fdc81ce230288c4a068df07e18b4c7cc51c0ca4811dfbd04765c56bc883240e46e3a42c01d8d2424fbc332b7c5a17bceb1f6e8dad0bfe562cad302\"\n    },\n    {\n        \"secret_key\": \"2784df91fea1b2d21d713de2edc6652451a0c15954b8656062ea1dedc2445b2a\",\n        \"public_key\": \"9556db5370f8fb3c7478de03d23df1cda96f2740118efdd3d1a9fa4c3bfe8849\",\n        \"message\": \"2e3bc54df416741dbe7916ad25f04e48d5a9d77a623e57f9cd61ecb44f09f76833eb2a3e9ab7aa89ff5d2d560c07177d854d7c49cbef492b7f4f7e567de1275124e16ca4a7980162fa0fd162a8e5fd6f35617007034bceec57c8faf7664f4b3baffdea8d8fc2ba22d585e9e2d739f5ffc99b4e0dbe9c3686547ea04815a59c4a25b5f2390668e418ba0fcbdf4c4a51f33905c74fbb830a19f9bc8636dbaaff209995447996d2e5b1c377b4cb87a4e1efe12de34d33599ff397b74017d711edd3e772155be5a4406e74cbe2931ef51359afd51b5b1a7b3ea22ee8eda81476bcc17ea7680f6f3104703b9f2a35cf2627eb741d1a30aa4beef6579ec7d0b07a4ef32abcb4d756970f70a3678e17e6e5731890aebc8c92b956d4b3b5fe2adfd79b211a1883dfc8c9a4b1b9c8c1bb265e1f3dd392445ea59b590a019551f8121849f435b3ac1b29902fc8392554056b93903d5f263b3d540843d6afa75a2ad8304b7690de99a734c3d130b69547b18b09e98cbf252730e4aedb6dc4b58b2243fe55e80939d37b0a59d72226d8a2cc5153095e15994ad62195aa310f2a6426676b661e47b9fcfffa04d6dc625f29f44c7cf620b378a65d238344b380448cd119cc7f373f62cdfad64149906353f3a54107c5dba65e3cc494b0531f4d64749363f230738b2cfeed983520227dd5bc43be59b3268e283216f6e9c75e0c1c71272e54fdb29c7858d287d1efa1917be37c8eeab5e44c3ad7b36e8ac9f66991eb82a5148e5972034ad01c62615a45154579fa50869e7be9876b5656eaad2e43025a62dd134b612d8f4d5ebcf8056e198b713438e8e0e347cafbfcb89e394aa330d4c788d49c658fcfc80b3e0078f0e8e19aa9b8fe8eb0bab93de785d043e0f475aeb60d62e38fb1f8384a00b7a902daee13d2136269e50801b80a65b2f913cfe3ffb365d9aa2fd19372a0b0225695444e4bc54871d108e09c7e1c2b42dcbbacce24ea5bd5bf1fcf4ac697a3fe09a54677b7a8dc8d5eecb86cc792ee9b6fea2de16a473269fdc65dbb73c258c821440407c642f7d3d3f5c708d55332da8343106c19b230a51427f3b771916ae3688b\",\n        \"signed\": \"17d171d946de3516158407e132cc1acecaefd6d092112be653999523e20bd495f7b7f600e8d5a671330d32693d6019c08d2d003b176e6319c35394200e027d0e2e3bc54df416741dbe7916ad25f04e48d5a9d77a623e57f9cd61ecb44f09f76833eb2a3e9ab7aa89ff5d2d560c07177d854d7c49cbef492b7f4f7e567de1275124e16ca4a7980162fa0fd162a8e5fd6f35617007034bceec57c8faf7664f4b3baffdea8d8fc2ba22d585e9e2d739f5ffc99b4e0dbe9c3686547ea04815a59c4a25b5f2390668e418ba0fcbdf4c4a51f33905c74fbb830a19f9bc8636dbaaff209995447996d2e5b1c377b4cb87a4e1efe12de34d33599ff397b74017d711edd3e772155be5a4406e74cbe2931ef51359afd51b5b1a7b3ea22ee8eda81476bcc17ea7680f6f3104703b9f2a35cf2627eb741d1a30aa4beef6579ec7d0b07a4ef32abcb4d756970f70a3678e17e6e5731890aebc8c92b956d4b3b5fe2adfd79b211a1883dfc8c9a4b1b9c8c1bb265e1f3dd392445ea59b590a019551f8121849f435b3ac1b29902fc8392554056b93903d5f263b3d540843d6afa75a2ad8304b7690de99a734c3d130b69547b18b09e98cbf252730e4aedb6dc4b58b2243fe55e80939d37b0a59d72226d8a2cc5153095e15994ad62195aa310f2a6426676b661e47b9fcfffa04d6dc625f29f44c7cf620b378a65d238344b380448cd119cc7f373f62cdfad64149906353f3a54107c5dba65e3cc494b0531f4d64749363f230738b2cfeed983520227dd5bc43be59b3268e283216f6e9c75e0c1c71272e54fdb29c7858d287d1efa1917be37c8eeab5e44c3ad7b36e8ac9f66991eb82a5148e5972034ad01c62615a45154579fa50869e7be9876b5656eaad2e43025a62dd134b612d8f4d5ebcf8056e198b713438e8e0e347cafbfcb89e394aa330d4c788d49c658fcfc80b3e0078f0e8e19aa9b8fe8eb0bab93de785d043e0f475aeb60d62e38fb1f8384a00b7a902daee13d2136269e50801b80a65b2f913cfe3ffb365d9aa2fd19372a0b0225695444e4bc54871d108e09c7e1c2b42dcbbacce24ea5bd5bf1fcf4ac697a3fe09a54677b7a8dc8d5eecb86cc792ee9b6fea2de16a473269fdc65dbb73c258c821440407c642f7d3d3f5c708d55332da8343106c19b230a51427f3b771916ae3688b\",\n        \"signature\": \"17d171d946de3516158407e132cc1acecaefd6d092112be653999523e20bd495f7b7f600e8d5a671330d32693d6019c08d2d003b176e6319c35394200e027d0e\"\n    },\n    {\n        \"secret_key\": \"4bb79236fada3144b68296499ba44ae534074ca94d4b581e5edcfffe13b3ad19\",\n        \"public_key\": \"0a8399f1e5a423dcf7b25b2fb0ac9e1e9548148bea84d021e0428760e05d58bf\",\n        \"message\": \"ad81abf6937a7acd7f1837f04d3f10e708c61a5fbedeee4db76e1598570384e6efece97c925d2e5c3488cab10b5b52b8a5486e99d8ffe86c1981a1f1d532dcd4d489e5546d86653298e7a5f96e8144552dda8a18e75b5f7355b13541621106e497e51a56d8659d198fe10037e22128afc2714a2cb5a12cc5db0968a343ef918e8769dd6a3e5b9e32aab66cb0239ebe4c17f18218e252eba6162e977049ebac0b38048b3aafb7d4d72263e9212899a3bfe0a69c99e22ac61c5e9612456303d92458b5c502916c34a8ee5cd9a582a52576b6dc9d7d4c642f212998bf3358d4a8c2ea67686e55d489f6a76e6b070e6e995a745326c9aa63630a0033ad30721aa65fac604a6e58c750721a56ca6760c94134d611fab4d354e4f66a29677b1a666601e9da79f213f582037433c07f94d5f0de6aa9faa0b32f7b023fb9fc135a26f97052ac80b39b306aed13926c285419a29b20e2370d8a095b32258fa9893489ee21089c752ec062e120359e2f3515128254c8098cca65a91a022dd057a2c2a1b6b85d137c3c967dcb70aa17a2ff4b37678b382902f0f931ee743fc398ac1b8c10469867308479e40d7f2f04a4b04c4489158488ddb7bec5a47f20ff356d99a1b3e9d0b7fe9b0ad949f298960efa4d9728f8101cf53da3bffdd9524bf440a58b32738d0b6293e853f466ffd42c5607ac9e353ba03efb578cc9963d8aaa9d2e266d1d2ae9296f30c9ef44ec691030d596a401b6cee72a540ef3c42ec0174266ba5401f354adc8e25404437e888b08286939bede308acd30327ebff06270097cc294f0a0f39f9aa3c66585ca47e60c4b8ea36089eb8a9088bb18b0343135bb6a456d2f6a3bf390723e78b42c037c2de2e1432caad3a594021294d43f5b15a2e819dc748e451de40068c8f032f13b4711377012edcd4f11dec1111b12eb6e1b00633818706d7132d991ce20df3b921db2185ee25bb6f5827576ec01ad890f79793baa358c2bbfb6faad11d8cb0d0d2d2b2981fbf4e372349fc6a01c36077b59325f702b380059a65cf2f5ea98d6bdc8152053b85b28c81e413c4cac7e226c13db3267d21830f0e5431102917005\",\n        \"signed\": \"698fab68510db8121a465db77e4f8b586aee895816e63bbf0beb242db4e84c157f4be201ae6564517a870d17f60c858370c01cca17189cb4189e814391d1500dad81abf6937a7acd7f1837f04d3f10e708c61a5fbedeee4db76e1598570384e6efece97c925d2e5c3488cab10b5b52b8a5486e99d8ffe86c1981a1f1d532dcd4d489e5546d86653298e7a5f96e8144552dda8a18e75b5f7355b13541621106e497e51a56d8659d198fe10037e22128afc2714a2cb5a12cc5db0968a343ef918e8769dd6a3e5b9e32aab66cb0239ebe4c17f18218e252eba6162e977049ebac0b38048b3aafb7d4d72263e9212899a3bfe0a69c99e22ac61c5e9612456303d92458b5c502916c34a8ee5cd9a582a52576b6dc9d7d4c642f212998bf3358d4a8c2ea67686e55d489f6a76e6b070e6e995a745326c9aa63630a0033ad30721aa65fac604a6e58c750721a56ca6760c94134d611fab4d354e4f66a29677b1a666601e9da79f213f582037433c07f94d5f0de6aa9faa0b32f7b023fb9fc135a26f97052ac80b39b306aed13926c285419a29b20e2370d8a095b32258fa9893489ee21089c752ec062e120359e2f3515128254c8098cca65a91a022dd057a2c2a1b6b85d137c3c967dcb70aa17a2ff4b37678b382902f0f931ee743fc398ac1b8c10469867308479e40d7f2f04a4b04c4489158488ddb7bec5a47f20ff356d99a1b3e9d0b7fe9b0ad949f298960efa4d9728f8101cf53da3bffdd9524bf440a58b32738d0b6293e853f466ffd42c5607ac9e353ba03efb578cc9963d8aaa9d2e266d1d2ae9296f30c9ef44ec691030d596a401b6cee72a540ef3c42ec0174266ba5401f354adc8e25404437e888b08286939bede308acd30327ebff06270097cc294f0a0f39f9aa3c66585ca47e60c4b8ea36089eb8a9088bb18b0343135bb6a456d2f6a3bf390723e78b42c037c2de2e1432caad3a594021294d43f5b15a2e819dc748e451de40068c8f032f13b4711377012edcd4f11dec1111b12eb6e1b00633818706d7132d991ce20df3b921db2185ee25bb6f5827576ec01ad890f79793baa358c2bbfb6faad11d8cb0d0d2d2b2981fbf4e372349fc6a01c36077b59325f702b380059a65cf2f5ea98d6bdc8152053b85b28c81e413c4cac7e226c13db3267d21830f0e5431102917005\",\n        \"signature\": \"698fab68510db8121a465db77e4f8b586aee895816e63bbf0beb242db4e84c157f4be201ae6564517a870d17f60c858370c01cca17189cb4189e814391d1500d\"\n    },\n    {\n        \"secret_key\": \"afd765e6aac0146d4811ef9597bc3f44763f03378b7be033d6e64ca29decaef9\",\n        \"public_key\": \"6bb76123d9258922686c53fb6917b9a459cabd30be8c43970d80f5350c2d98ef\",\n        \"message\": \"183b1092c7904e47a1420317a25d0f59110aa84d6b3419ad456865c43b29e9d1dacf755d9e5cf94c5591d5d912d05ca9a52d015d6e8f5dc94efdce0d7cf5651203b11e5427a9f679429e00414a48eab13fd8e58b87eba39d1025d6a18b2cdcbe147436dbf38a1ce86413ae318765e1bb1df7e2b3be97e90408b11717cf459bcd0f3cac58b4a0d35bffb533e20df37451c11401ce1dab02055c7e08c5ec46390cd617a6b5f22f651830a1112a06ede4c40ab7957851d6c66f171cd16241590900b852a3d019957be1b7bb7acb8923f2a357c3264456cfca9b429d71fecb7edae39b252b4eb610e8c718835699754b8d4124b492488ede62610cce44b59218663b6c9646a14a8417eddbb6f4fbe5a4bbbb482b37a445e3c16b65a141cd3e12a5b2c0481d614d6d208479b9b209b828854dae0ea1eded506555fe18e1854005cf001a8077083498d27fadf118286b53b8974d69fa2825be8ca3d6036a92ca52f91dde6d5b1ffe2888f4d60779fad1fb41d8c0714049af681b755f2d4204eecd09e077210a48a195e72c80e127c3d4875095c6570a1f78095907528cf7746f31d97111c6f4cb25b3741299a7574822d46b6e79ed23c2fe057b3ac7290b460b166ee90a45562effedcc6ba8f4795f7395818db56b6edd59ca2cc4aea1841fd9565becd6c08104cdee26ba9de200773d091bc77a57c547f1a6ba0a2cd717ab32561d7422ea7235adb0cb36bf5cbdf88fcae06630a15647d9a357b4e0e502d273f3796a51e0bc3fedbf7a1e64aad722aac5fd022fa79d60fc707325f127eb1f03868795ccdc0b4cb26f2023d152153a97a260bff11745d2e2cc0bf860d4a6e358a6d8176d2ac178a9ae1a2dc75e8b490408ff7cdf991329f33cb0c05e1e356925087e0b8d96a52351d1d17768eb134cdb21a1546aaedcc687dfa1b22e92fb5241a83677a153445b77d5e703508e2abc588a9f42e5bc710673e4dd8ad703fab2d7db1eb84226c89d8762a709e3e9138a1fa790f2929bff61bc1ea6e8aa1ad0e3887d70a56d4e6547fc606a50d3be3bd6db03663e00ca9e4f24fe8cbfd7d8c9738d6367554b7b601f74190b5970a398\",\n        \"signed\": \"3dc9194d50811419049eaa07b655b7d4064bcb0e7fb5f9e5326b5fc856fc0ab8705973ae1001df55373977dde2d9b81079551414adc71cc852d499b0cf824f07183b1092c7904e47a1420317a25d0f59110aa84d6b3419ad456865c43b29e9d1dacf755d9e5cf94c5591d5d912d05ca9a52d015d6e8f5dc94efdce0d7cf5651203b11e5427a9f679429e00414a48eab13fd8e58b87eba39d1025d6a18b2cdcbe147436dbf38a1ce86413ae318765e1bb1df7e2b3be97e90408b11717cf459bcd0f3cac58b4a0d35bffb533e20df37451c11401ce1dab02055c7e08c5ec46390cd617a6b5f22f651830a1112a06ede4c40ab7957851d6c66f171cd16241590900b852a3d019957be1b7bb7acb8923f2a357c3264456cfca9b429d71fecb7edae39b252b4eb610e8c718835699754b8d4124b492488ede62610cce44b59218663b6c9646a14a8417eddbb6f4fbe5a4bbbb482b37a445e3c16b65a141cd3e12a5b2c0481d614d6d208479b9b209b828854dae0ea1eded506555fe18e1854005cf001a8077083498d27fadf118286b53b8974d69fa2825be8ca3d6036a92ca52f91dde6d5b1ffe2888f4d60779fad1fb41d8c0714049af681b755f2d4204eecd09e077210a48a195e72c80e127c3d4875095c6570a1f78095907528cf7746f31d97111c6f4cb25b3741299a7574822d46b6e79ed23c2fe057b3ac7290b460b166ee90a45562effedcc6ba8f4795f7395818db56b6edd59ca2cc4aea1841fd9565becd6c08104cdee26ba9de200773d091bc77a57c547f1a6ba0a2cd717ab32561d7422ea7235adb0cb36bf5cbdf88fcae06630a15647d9a357b4e0e502d273f3796a51e0bc3fedbf7a1e64aad722aac5fd022fa79d60fc707325f127eb1f03868795ccdc0b4cb26f2023d152153a97a260bff11745d2e2cc0bf860d4a6e358a6d8176d2ac178a9ae1a2dc75e8b490408ff7cdf991329f33cb0c05e1e356925087e0b8d96a52351d1d17768eb134cdb21a1546aaedcc687dfa1b22e92fb5241a83677a153445b77d5e703508e2abc588a9f42e5bc710673e4dd8ad703fab2d7db1eb84226c89d8762a709e3e9138a1fa790f2929bff61bc1ea6e8aa1ad0e3887d70a56d4e6547fc606a50d3be3bd6db03663e00ca9e4f24fe8cbfd7d8c9738d6367554b7b601f74190b5970a398\",\n        \"signature\": \"3dc9194d50811419049eaa07b655b7d4064bcb0e7fb5f9e5326b5fc856fc0ab8705973ae1001df55373977dde2d9b81079551414adc71cc852d499b0cf824f07\"\n    },\n    {\n        \"secret_key\": \"eb347145f339edd802785b6fbecd5cb80889ac7ce4ebad2f67076765db939bca\",\n        \"public_key\": \"994a456eada03020921c3d109c135eb961fcd4a0a400bafd32ca061bbc862543\",\n        \"message\": \"5b8b31baf88483f095b5d02e17d8b7b46cf46460e64c6b02c56d8dafe34823706cb5c15f338ad9b56586a949711aa7312cc93450d2fb9af4613fc30793a631a55c14e53c0cb15f06116399398c8dd61876c62915f9f9e4cdf8f7d89ade129e6dde7d63671a1863f5da8f42ea64c079ecb9a2c1b1dd9adae60e96b9cbbc7624532aa17975eba17a7af02bfb219aac02b3d4306cd38933a85060cd62ab513a3965b09150a488c92bf7cab0482eee56463f0139009b9fbb3ff4ecae211f428b5bfb8876f004983b90c447846ca4b74566e979bc30c95e99faab69a3ebbfe4da6034c82d63e9c5ccaf8486af3b5e0d381422938b0c22f516955bdc36943173f5832708a33cf52d8875d97fde585b4917e4adecdd1e79856762033af22f254b50ce9d0c700e77a731554fa0113a0c666683f3fdb19e3a426302230b63e33a785ef24a9289455b3b8fc618fffef49c2c6e48fd4bb422f504149de2b4c0355c363408e66da81cbb581552a411e364fe3e4ca96d7072ab072e7568c13d35e41c7825a13a5c68fb9fb5988bbbfb9a0b51165764660cdfa2411f3d42165da187c58edef0105a6db177420543e958d5d5e8a371f7987051c4e1786d018eb3d732c210a861acaf671be95bb63fbc88bf8be7be5390939cd9fb2acf3981dda61b787a7bbd78468e1d32ca46af8fb32a18463c180f524be1da910da5508d42a0051741227c9b62de6d19b33c0bd48067b035859ad9bdc2ddd97befca31e65a886cfc753afc4ff2a7212a89d37c046cdf3999c051ff1396bd99cb54945639eb6462db9ece84077b0b3d6b3df3952dd36756c6dab2abc25a51bf32c1e9cdd0a728a7985f7b7e0d9c1a6f66ce1216373d252daf5958f2e8973fd268fad0efe251ce76fe47bd0a4d0c4f1017949d4c2b16717218e149154ed6fbe56f86d82e19ef0a91631912f2a8f3debb00766b6177802f4b2e79f6e7bfa9c62cfa2f75cdb60492630a85c9b43177d2dd9ba8d0548abe24923ae8443eeadcd0f58a7b82dff50d884003889cb560f7ac53e710a75575362464b1aa43d2a9b22f2bd2162d302faa7452344ce7ade9983687b6c68eca47dddb289b15\",\n        \"signed\": \"fdbd15e1e6469df720d9552cb5dd177bcbd292fcda83cd93c88d0114912dc8703109bac0d459ace9957df2293ac16d40d514893556853299b97b4fd4137a3d005b8b31baf88483f095b5d02e17d8b7b46cf46460e64c6b02c56d8dafe34823706cb5c15f338ad9b56586a949711aa7312cc93450d2fb9af4613fc30793a631a55c14e53c0cb15f06116399398c8dd61876c62915f9f9e4cdf8f7d89ade129e6dde7d63671a1863f5da8f42ea64c079ecb9a2c1b1dd9adae60e96b9cbbc7624532aa17975eba17a7af02bfb219aac02b3d4306cd38933a85060cd62ab513a3965b09150a488c92bf7cab0482eee56463f0139009b9fbb3ff4ecae211f428b5bfb8876f004983b90c447846ca4b74566e979bc30c95e99faab69a3ebbfe4da6034c82d63e9c5ccaf8486af3b5e0d381422938b0c22f516955bdc36943173f5832708a33cf52d8875d97fde585b4917e4adecdd1e79856762033af22f254b50ce9d0c700e77a731554fa0113a0c666683f3fdb19e3a426302230b63e33a785ef24a9289455b3b8fc618fffef49c2c6e48fd4bb422f504149de2b4c0355c363408e66da81cbb581552a411e364fe3e4ca96d7072ab072e7568c13d35e41c7825a13a5c68fb9fb5988bbbfb9a0b51165764660cdfa2411f3d42165da187c58edef0105a6db177420543e958d5d5e8a371f7987051c4e1786d018eb3d732c210a861acaf671be95bb63fbc88bf8be7be5390939cd9fb2acf3981dda61b787a7bbd78468e1d32ca46af8fb32a18463c180f524be1da910da5508d42a0051741227c9b62de6d19b33c0bd48067b035859ad9bdc2ddd97befca31e65a886cfc753afc4ff2a7212a89d37c046cdf3999c051ff1396bd99cb54945639eb6462db9ece84077b0b3d6b3df3952dd36756c6dab2abc25a51bf32c1e9cdd0a728a7985f7b7e0d9c1a6f66ce1216373d252daf5958f2e8973fd268fad0efe251ce76fe47bd0a4d0c4f1017949d4c2b16717218e149154ed6fbe56f86d82e19ef0a91631912f2a8f3debb00766b6177802f4b2e79f6e7bfa9c62cfa2f75cdb60492630a85c9b43177d2dd9ba8d0548abe24923ae8443eeadcd0f58a7b82dff50d884003889cb560f7ac53e710a75575362464b1aa43d2a9b22f2bd2162d302faa7452344ce7ade9983687b6c68eca47dddb289b15\",\n        \"signature\": \"fdbd15e1e6469df720d9552cb5dd177bcbd292fcda83cd93c88d0114912dc8703109bac0d459ace9957df2293ac16d40d514893556853299b97b4fd4137a3d00\"\n    },\n    {\n        \"secret_key\": \"3208837d1554b6511adda09cbae565da78439a472a5d1b107ce0a9b1d7757db7\",\n        \"public_key\": \"9b525e35368a921e3a2e9a35a4de9ea4c436caba27123e5c369e2a6cf5c90ab6\",\n        \"message\": \"436a3c31763f93d4d546c6d1ecfb7ae45916af754f839dcfe96d6b69c61214d016fc842f56462a3f07f661b2e2505acfaf482a0b0f4f5501eec4b2d2d7d444544de000b990f4363d3f983f5d4e09309752ff579c7320c915951cc3a1e3238c1ba7a19130eabf6a37f5f0bc56e25242f752061f3c63acad992a7501e967deb925b30ed105431e582102fa4f308c2f0683612b56686d52daed6943a7219f3beea2e0a29242e86d5562ffab83b56b263326664e029e961e7017d8e89f5e3e1d10f5932854550ce6e5cd76971fd235cf9c0027d0cfed3315c2cbf18508624d8acf047f9b968f907d9e6f4cfa5e45c80a272c2dbb62c5d4194580dfabedd82cb4d76492344be96ccf5daaf61e6b2b55efdb3f65210a3d6e1f369887ca0ea0d58c3d146ae3cf9b000076884115fa51b5fd66bec0ccbf0d2920196a7d7a38445fbed22dfc7564dc56f60d6e29e592485374c6bd1e5b15931b69ca6ee6b3aa2525c23585f0929f31cbd11fb1a5330216b90ae5a656df7a074cec64e598184f503fb23cc05e65da9ae7e8441f40e2dc26b8b56d2cb523a7c635dc0847d1cd498abf756f5a13ea14f8fab2c410b1a470f49aa8dca4ac0256b11800de0dd0ec42b142c561128d357e783b12f61c668f5e6e06b7b48b7b2254de5bdc1804b723d5fd6a0f4bc7c59e7c5054182613bbd2fa92b4c1da16bc8c97e16bcb0dbf8c92b74899b37f318757140b6c4fd535e2e1e0570a50818cf78fb988e1f4ce40e76e8fe3d697d7a45850f293ce170fd8ab07cf1534ea5ffad34f6fcfa42d0d21a91dfbfe0597c73fd9b9767614ebdfd02c3ac0c49ad10c94be5969ee0808c0a30b2a1eaa90ea43b8575c3056f423cd4b6f34ae51c2223765a9ea21f64573c1a13961321246e3b5349ee048fb62d5fb61b1714391182562b91598360e5f9bf4ac80db246432afb3a43d349650de03d343c2e97a8eefd1bf30c10c25867f53266bd1f0dc14ae1a6be9efdecff67e7d292c6cdfc90d80b886668f04c2a0f5ad7fa17c178b6e9b45a11f4ddfe2d66960a3f75135ad5ed154e513e1a5d138e7371e84d7c92453e6c62dc59b8e1fa93d773a2540d91c257c\",\n        \"signed\": \"709d1ca9ca2f742ab9dd0b049335f544cffb2f1a3693d5f53f8ba083b9b0d86e5208fa8e1e8156c9cc2242775abb7e15af3085868ef457634e9926c404ecf30f436a3c31763f93d4d546c6d1ecfb7ae45916af754f839dcfe96d6b69c61214d016fc842f56462a3f07f661b2e2505acfaf482a0b0f4f5501eec4b2d2d7d444544de000b990f4363d3f983f5d4e09309752ff579c7320c915951cc3a1e3238c1ba7a19130eabf6a37f5f0bc56e25242f752061f3c63acad992a7501e967deb925b30ed105431e582102fa4f308c2f0683612b56686d52daed6943a7219f3beea2e0a29242e86d5562ffab83b56b263326664e029e961e7017d8e89f5e3e1d10f5932854550ce6e5cd76971fd235cf9c0027d0cfed3315c2cbf18508624d8acf047f9b968f907d9e6f4cfa5e45c80a272c2dbb62c5d4194580dfabedd82cb4d76492344be96ccf5daaf61e6b2b55efdb3f65210a3d6e1f369887ca0ea0d58c3d146ae3cf9b000076884115fa51b5fd66bec0ccbf0d2920196a7d7a38445fbed22dfc7564dc56f60d6e29e592485374c6bd1e5b15931b69ca6ee6b3aa2525c23585f0929f31cbd11fb1a5330216b90ae5a656df7a074cec64e598184f503fb23cc05e65da9ae7e8441f40e2dc26b8b56d2cb523a7c635dc0847d1cd498abf756f5a13ea14f8fab2c410b1a470f49aa8dca4ac0256b11800de0dd0ec42b142c561128d357e783b12f61c668f5e6e06b7b48b7b2254de5bdc1804b723d5fd6a0f4bc7c59e7c5054182613bbd2fa92b4c1da16bc8c97e16bcb0dbf8c92b74899b37f318757140b6c4fd535e2e1e0570a50818cf78fb988e1f4ce40e76e8fe3d697d7a45850f293ce170fd8ab07cf1534ea5ffad34f6fcfa42d0d21a91dfbfe0597c73fd9b9767614ebdfd02c3ac0c49ad10c94be5969ee0808c0a30b2a1eaa90ea43b8575c3056f423cd4b6f34ae51c2223765a9ea21f64573c1a13961321246e3b5349ee048fb62d5fb61b1714391182562b91598360e5f9bf4ac80db246432afb3a43d349650de03d343c2e97a8eefd1bf30c10c25867f53266bd1f0dc14ae1a6be9efdecff67e7d292c6cdfc90d80b886668f04c2a0f5ad7fa17c178b6e9b45a11f4ddfe2d66960a3f75135ad5ed154e513e1a5d138e7371e84d7c92453e6c62dc59b8e1fa93d773a2540d91c257c\",\n        \"signature\": \"709d1ca9ca2f742ab9dd0b049335f544cffb2f1a3693d5f53f8ba083b9b0d86e5208fa8e1e8156c9cc2242775abb7e15af3085868ef457634e9926c404ecf30f\"\n    },\n    {\n        \"secret_key\": \"4ec6829b43997056d99685389bd53c528de7e5ff2715d65c956619826e3fb5b5\",\n        \"public_key\": \"7d922d57fdb12792879aec4e8c651463ece064492c721753d22e115509fed706\",\n        \"message\": \"ed26b4130d4ebf3f3861491aa3dd96a4eb69752173fa6c84ca65dfc991c7fe44e02bd61650252a1d23786682ec38c1fee82cc350db7c3c3949a1c935ffebd7baa24f35a393fbd27e7c34c2f9ffda60a18df66c3e465d90ed48fbbad3fa7947dee7e659a3eeadb887f0963f6bdd76c36c11ae46d088ee50bca8187a0a8832db7984b7e27cbe6abf12d2c94f337ec78cb38b26241bd1a3d2f5fa4407fdd80227d2b170144b415978e37201d0fcf43174b9d7b2115d5eb8bcec276a775aea93f2340d4425d34d2047494d917e0dbe37857e6c99859b71c914aad5e54f7b2b033e594e272cc5cfe919f888e55cb6157affcf357246d00b532cc471b92eae0ef7f1e915944c65279315729853da572c809aa09d40365f90875a50d31ca3900da77047c957c8f8bf20ec86bd56f9a954d9988e206b444ca5a4434521bfc9c5f3a8a06147eb07d11dfe1171ec31ff55771588b333eee6215d216c47a8566fbb2b18974646ac5a92c699d77584c0defefd2dfa58fca27199e41ec58a246320b35faab75b97951924226da4ab28f01b47078e712e4fd9f77b251c9667858c28e32ef1cd01fcbe435c542dbad0a84a13cdbb5775e62d811dc690d9555c37f15f91767a561357df106eefe056e7360670650fb818fc6adc59973e9ad5cdcd809807ab56397f3c13948732d98d676f4a4470a95d8b518237e226f0cc5f4765164a5c3ef050714be02a126be8f66546481581b9e94a26aad24c693b7fdbc18acd3ed7cfc47d8ab26745d78e701d0cf05dd844b5b345a29dab684cbc5092ba022e3c582dfc044c3100ad02756697a849822915a16e2a2b810e6815f54421d2f3a6fff588c0d9013c76f33e09beaeef60d8774230e8ce7131289aef2a40686c819fb2040b06124d3d9aa419d56788f17fa7ed9b9b57ceaad1337a0101bea0440cff745ddd9722055d1f9bcfb009ce2c2f41a9e7e86806b872cdc2059bc8ec68f5ee56c4bacf4bbd30ea4c7155864d600c0e2eee73b319bda4372e9c603c772c25890c7610489989475d37a77a4574a2ba55bfd9c9cfd146fb97e6165dcc19559f4f85dfca2f97f3702ed8fa6b3c2a9741974aa07ab6\",\n        \"signed\": \"159ca404f7f74117c5163cf404110949eb57ae2d7662b1ff4178cc6756e90adaeab71b064ce1dff457b2dba7e2dc13c217bcae8a61fcf8ce1487a649c257ff07ed26b4130d4ebf3f3861491aa3dd96a4eb69752173fa6c84ca65dfc991c7fe44e02bd61650252a1d23786682ec38c1fee82cc350db7c3c3949a1c935ffebd7baa24f35a393fbd27e7c34c2f9ffda60a18df66c3e465d90ed48fbbad3fa7947dee7e659a3eeadb887f0963f6bdd76c36c11ae46d088ee50bca8187a0a8832db7984b7e27cbe6abf12d2c94f337ec78cb38b26241bd1a3d2f5fa4407fdd80227d2b170144b415978e37201d0fcf43174b9d7b2115d5eb8bcec276a775aea93f2340d4425d34d2047494d917e0dbe37857e6c99859b71c914aad5e54f7b2b033e594e272cc5cfe919f888e55cb6157affcf357246d00b532cc471b92eae0ef7f1e915944c65279315729853da572c809aa09d40365f90875a50d31ca3900da77047c957c8f8bf20ec86bd56f9a954d9988e206b444ca5a4434521bfc9c5f3a8a06147eb07d11dfe1171ec31ff55771588b333eee6215d216c47a8566fbb2b18974646ac5a92c699d77584c0defefd2dfa58fca27199e41ec58a246320b35faab75b97951924226da4ab28f01b47078e712e4fd9f77b251c9667858c28e32ef1cd01fcbe435c542dbad0a84a13cdbb5775e62d811dc690d9555c37f15f91767a561357df106eefe056e7360670650fb818fc6adc59973e9ad5cdcd809807ab56397f3c13948732d98d676f4a4470a95d8b518237e226f0cc5f4765164a5c3ef050714be02a126be8f66546481581b9e94a26aad24c693b7fdbc18acd3ed7cfc47d8ab26745d78e701d0cf05dd844b5b345a29dab684cbc5092ba022e3c582dfc044c3100ad02756697a849822915a16e2a2b810e6815f54421d2f3a6fff588c0d9013c76f33e09beaeef60d8774230e8ce7131289aef2a40686c819fb2040b06124d3d9aa419d56788f17fa7ed9b9b57ceaad1337a0101bea0440cff745ddd9722055d1f9bcfb009ce2c2f41a9e7e86806b872cdc2059bc8ec68f5ee56c4bacf4bbd30ea4c7155864d600c0e2eee73b319bda4372e9c603c772c25890c7610489989475d37a77a4574a2ba55bfd9c9cfd146fb97e6165dcc19559f4f85dfca2f97f3702ed8fa6b3c2a9741974aa07ab6\",\n        \"signature\": \"159ca404f7f74117c5163cf404110949eb57ae2d7662b1ff4178cc6756e90adaeab71b064ce1dff457b2dba7e2dc13c217bcae8a61fcf8ce1487a649c257ff07\"\n    },\n    {\n        \"secret_key\": \"b150a78929ed1eb93269213e1ebc22e2e40a601bdb005499b7beb058917c5340\",\n        \"public_key\": \"28866b6d1c393cb08e464cf5571440a649e50642380ddf4ffb7ad150485c108e\",\n        \"message\": \"1bf55d27f9dde6c4f1c0ddd360a25d9493c0ffdca74a7ed5e5a514e95515cda4aad8f45cd6ed7901f8f224a63b38121cbeac2f56dae210dd053750cb207514a8891e245a5d07e7de78a2e3814463f148d2acb7dc71f995c9299ad0d6266cfefc94269657fd47cf5312b92af2750651c479636c9d36aef08f7d1195e7fa1ba3abb5dcb90136b0fb9a37668b87a2db88d1e2b6440d3e6e601e6d4bc10cf1cbdf1d6169c0dc2c4aecdeb6cdd4567d4250b2afa715b166c9467f907d3fa5a6daf200b309c109376830499caf3149001cf3339448ca3d765225d6b3c1cd267cba936e7aa4832539466fd20cbb38323cbb2228a271f2d282561c73ed79a1ad04698e27efe393235f3456c295407da0960f0034d8deefd1c185736fd3eaf1f9a1e32f09174c1fe12720b7c96febdb33e01b1b6a1c637150194be4ffab159e45b24585576846bb64274eca7b39a3ed9357de7b084213024a9e8589263600a2867c2a7cf8b99076a12a07bd7df8d5277bb04ad72e639b77eaca1ec58ef9637e9a2376ba878a457235a06f78fdf0e0d925cb2fd2a38c77188f60372ef6009792424399c9b67928da2e3ba91cbde407e7e876ba98139ed22ca3b983bede0000528796448e4a1055acb2deaa56bc308254c5bd498c275ecedc1357efe1fda01d34d916dd4d8647e5771995a653e0f8a5284cc7bf73157b3349d59e6f920cad6cdd1719f038025c4300e0210ce249faf3c82de1fd1cdabe61c14ecb1df00c5c466aa6a012a9c10dcfe59b7e9d3b155dab6c7b7c1608c1edd51dbdadf6ba5876b5e60fdf7f19e6ef712cd1a7dd3a062a6574a7436b319efb944e4223f542b2502c1ba976be91e05b0f85a09fd793beca883375fb67cd133f5284d89984ff3cafa7e11a9d85e7893232a524ec54b20f975d3c0a1143a0ef41176b7051ea91d40c5f44fd9e100558bf1212a7b891e68b55ca61f4be945266d9a1007a14aaeb68c48e257f0f46310ad16481467ec1773535d5fc084915f5d004ba0dc7591d2123c62207909d84f2b382f5ef12759a95cd3f5189806e273960aee162c00f73e7fa59363957654bb1916b5709bb0a9d040514ae5284951e6b\",\n        \"signed\": \"276dd0962e6ee64f0592441a8af0e5ef8f93bf0baeba20504b9db4f95a00b939ea38def1c797862898cabe9dc4644f0e677e87c0a33b87b6a4d22a807d0e1e021bf55d27f9dde6c4f1c0ddd360a25d9493c0ffdca74a7ed5e5a514e95515cda4aad8f45cd6ed7901f8f224a63b38121cbeac2f56dae210dd053750cb207514a8891e245a5d07e7de78a2e3814463f148d2acb7dc71f995c9299ad0d6266cfefc94269657fd47cf5312b92af2750651c479636c9d36aef08f7d1195e7fa1ba3abb5dcb90136b0fb9a37668b87a2db88d1e2b6440d3e6e601e6d4bc10cf1cbdf1d6169c0dc2c4aecdeb6cdd4567d4250b2afa715b166c9467f907d3fa5a6daf200b309c109376830499caf3149001cf3339448ca3d765225d6b3c1cd267cba936e7aa4832539466fd20cbb38323cbb2228a271f2d282561c73ed79a1ad04698e27efe393235f3456c295407da0960f0034d8deefd1c185736fd3eaf1f9a1e32f09174c1fe12720b7c96febdb33e01b1b6a1c637150194be4ffab159e45b24585576846bb64274eca7b39a3ed9357de7b084213024a9e8589263600a2867c2a7cf8b99076a12a07bd7df8d5277bb04ad72e639b77eaca1ec58ef9637e9a2376ba878a457235a06f78fdf0e0d925cb2fd2a38c77188f60372ef6009792424399c9b67928da2e3ba91cbde407e7e876ba98139ed22ca3b983bede0000528796448e4a1055acb2deaa56bc308254c5bd498c275ecedc1357efe1fda01d34d916dd4d8647e5771995a653e0f8a5284cc7bf73157b3349d59e6f920cad6cdd1719f038025c4300e0210ce249faf3c82de1fd1cdabe61c14ecb1df00c5c466aa6a012a9c10dcfe59b7e9d3b155dab6c7b7c1608c1edd51dbdadf6ba5876b5e60fdf7f19e6ef712cd1a7dd3a062a6574a7436b319efb944e4223f542b2502c1ba976be91e05b0f85a09fd793beca883375fb67cd133f5284d89984ff3cafa7e11a9d85e7893232a524ec54b20f975d3c0a1143a0ef41176b7051ea91d40c5f44fd9e100558bf1212a7b891e68b55ca61f4be945266d9a1007a14aaeb68c48e257f0f46310ad16481467ec1773535d5fc084915f5d004ba0dc7591d2123c62207909d84f2b382f5ef12759a95cd3f5189806e273960aee162c00f73e7fa59363957654bb1916b5709bb0a9d040514ae5284951e6b\",\n        \"signature\": \"276dd0962e6ee64f0592441a8af0e5ef8f93bf0baeba20504b9db4f95a00b939ea38def1c797862898cabe9dc4644f0e677e87c0a33b87b6a4d22a807d0e1e02\"\n    },\n    {\n        \"secret_key\": \"9fc7c49cb8c4f0972d6ed970ae2c6ac337e675425cc8dce730fc41444302935d\",\n        \"public_key\": \"4782520b06f93344aa766780e54401363dfd7d967cc3bf06488af90920a30f85\",\n        \"message\": \"82bc2c700db222a4ac914aa2be8fa28e422067f94f3344f5362bebaabed7612b0e464a73a6c456903564b15393485140dd0f3aff90aa6e1661ddf682850d0490afc3d735dea05ba47c85d97e833533514c198b4cf6e66d360ee5bf00e14a3aab1ad0e7b8ab2aacc964d42830c78453df1955bbed1cd68ada3db0ecdb601ad7667d5c5e2fd49e36f7328eaa337dbd6ff70e7898a3f98c159d045a2427ade5333c88fc4afd3819dc82f4daa3c523cb57e35a2a5a725d63d402baef51e51f1ef4f8f9a595c9379c9aba873fb4e765a931da09148aba6ec5b44859b0e81ff9fc229598ac9fbdb0bdbddb5692a52222df52ea387bbbf36ad64d1946bd282e323ff4822ad9da897ff73f01b390cfe2e64de492d55de77f5d7d0060a6872a0183ccba610f53274ccb29ce6dce6a036c5317a1ed2a7c1068c1b246fc1d5881d00de06eb401cff95e6b69148699db13e94bb5b280212dff54c70e56de235a5f1400b5bea56772d060170f1d0657321561e4b49107eb96d9b3bc5adf451c2a524eba4db003b77b632a5d89827a6224cc798e096ba27fb33bf61e3b8eaf18d001ae8eb52f85c90d9e12544803e67ff02047e0d23c22e7f8b980c01c3d4824b2a9a14a2e8f672a7b0ce03bdbb3bd56d754a0964db01ca899d488001508657b7b022ccf042c38fc1949d0e00af4d301d4f00c3dea20e308a0f9dcacb43222b3824144af77be18a504aa8d268b8a5600725e7cc5f3a2e6256a8074d1aebca123ea53a0767a92e1783a4983c5ef3d7dd7f02aa9d1f4f9aac6ce254593f08792014fb867eaf879b88a4efb18e89ba11006ad09d85431cc26575b538d8e7890646c5988647cc105d582907ae625e09cd089f47249e81814da14044c7014e80e7a8e619c7b735f701616b6a3c6f492cdc6ed463e71a3d22291482d90a1de6f097c4ae254876184c562b16575b9d0d19313ed98864f49fe2e1d074a21211b2b2a6d27ddb28611520d5f7123058fd007bb01001def07b792bb05bb741c129c6a36376c3853b8bb4f66b5760c8eb4ecc7306ba3a90c70da47c965f6dccbdb61a7fda18ee967cf8c5f050311092d0fdeeaedd1265defdd660abe70\",\n        \"signed\": \"5c783a860aa668184dd22c4f9a546b5ec96ebad2e4af00f968c688671354e0cc9b572c73bc6f19937a05f1baf3434763965c96e103407f0eb642c5644154290b82bc2c700db222a4ac914aa2be8fa28e422067f94f3344f5362bebaabed7612b0e464a73a6c456903564b15393485140dd0f3aff90aa6e1661ddf682850d0490afc3d735dea05ba47c85d97e833533514c198b4cf6e66d360ee5bf00e14a3aab1ad0e7b8ab2aacc964d42830c78453df1955bbed1cd68ada3db0ecdb601ad7667d5c5e2fd49e36f7328eaa337dbd6ff70e7898a3f98c159d045a2427ade5333c88fc4afd3819dc82f4daa3c523cb57e35a2a5a725d63d402baef51e51f1ef4f8f9a595c9379c9aba873fb4e765a931da09148aba6ec5b44859b0e81ff9fc229598ac9fbdb0bdbddb5692a52222df52ea387bbbf36ad64d1946bd282e323ff4822ad9da897ff73f01b390cfe2e64de492d55de77f5d7d0060a6872a0183ccba610f53274ccb29ce6dce6a036c5317a1ed2a7c1068c1b246fc1d5881d00de06eb401cff95e6b69148699db13e94bb5b280212dff54c70e56de235a5f1400b5bea56772d060170f1d0657321561e4b49107eb96d9b3bc5adf451c2a524eba4db003b77b632a5d89827a6224cc798e096ba27fb33bf61e3b8eaf18d001ae8eb52f85c90d9e12544803e67ff02047e0d23c22e7f8b980c01c3d4824b2a9a14a2e8f672a7b0ce03bdbb3bd56d754a0964db01ca899d488001508657b7b022ccf042c38fc1949d0e00af4d301d4f00c3dea20e308a0f9dcacb43222b3824144af77be18a504aa8d268b8a5600725e7cc5f3a2e6256a8074d1aebca123ea53a0767a92e1783a4983c5ef3d7dd7f02aa9d1f4f9aac6ce254593f08792014fb867eaf879b88a4efb18e89ba11006ad09d85431cc26575b538d8e7890646c5988647cc105d582907ae625e09cd089f47249e81814da14044c7014e80e7a8e619c7b735f701616b6a3c6f492cdc6ed463e71a3d22291482d90a1de6f097c4ae254876184c562b16575b9d0d19313ed98864f49fe2e1d074a21211b2b2a6d27ddb28611520d5f7123058fd007bb01001def07b792bb05bb741c129c6a36376c3853b8bb4f66b5760c8eb4ecc7306ba3a90c70da47c965f6dccbdb61a7fda18ee967cf8c5f050311092d0fdeeaedd1265defdd660abe70\",\n        \"signature\": \"5c783a860aa668184dd22c4f9a546b5ec96ebad2e4af00f968c688671354e0cc9b572c73bc6f19937a05f1baf3434763965c96e103407f0eb642c5644154290b\"\n    },\n    {\n        \"secret_key\": \"08bf059b4da9aa7ffc702f5b2304c4f96ca49b7dabb6afb41dc91c0f00c65b78\",\n        \"public_key\": \"a6289ba28e80e8d1a319223e4165dc0bce7352aaf242f70cc968d21d77752832\",\n        \"message\": \"bd4fb28a1dd08b07ba66e17f0c4f21853fefef1c9d20ba7977f154641ea1a18becf6bbb80388886294e0756a3c508ffdfe90b51e1356d112d8cde5ee2cc6332e61d169ccc8cc934994f1bb560fa4660c0b0fd4e8149a225ed4883e68fbb69da7af8a524b17141ccb76b50cd8e1b67d3ce037ded7dfa59bc7c2674226ec7e07b78ea3f782fda3e5f1e9caeab608ca387c304654f801d00e10a7c29f4b0da3e5f89513a98037719a1aef4c2506c177af5451a00757a59f16229c4f4414df51580d48210dabc9377370b6068a88e81d3ad1bed4985155c3600ff48768b903022fe02ae480f2e6329f0bcc91d75f5c6a09fdf77bde90499f3ca395cb20062a0984ad6a0141fd01c2d54dfbb1ee584610640773439a1658d2c9f862f183bfefb033a3be271812f13c78704657e7fb4f850175fcd63d3e4405d192242c21f27c51477f3211a9ce248e892b42fb6d85820f41b897836f20f85a1311534b5c404f8b7a4a0319bc6cecaa57fe4d4f20607c99c2df22fa0676f99d1bd87886c928c4988c6e78c57d758330e6922cbe03c10340253d0dd483792ce75e6cd09d12fbbb041f0205e65ad25ce7c1b24e77ee8d6f915e3bc3e10d09fbd387a84bdaabfd1cedb52c0b1733b5f47088c0d35e0ef458c85414c2b04c2d29f63f77586131ee65530f209b518a0f257a0746bbd5fe0a2e0c388a6c480e1b60714fee1c5941bb4e13f707eac487a9666a723b5793134a268b77597786c3a3193b46d355dd0895fc6216c536a542ffd7d7b08010c86f547a5daa38335a8bfa2655d5f71b4d8807f50c8545c583dd0b690022ee65873aea3e8f1a565f3b0e4e0295fb0d321f5c0b397f2fd0528f86a0d1b707f737b175c69e9e7ae3c84d4b2cf3a38a631aa8032b3e65bb4528f66d0bfd34473ed0101d2a61255b215bc1cbab9a26d2b969324b77c8a5464e5b23df6c5112f9d17c587d95559de212ad241d8b126050e5fddfcc839a7e5aa2fda1ca20c0910d863418f195b38adfcc36e92f2396ac3144b537b30fbe4dde614902f89978b7fb42cd99f13d99c45c734fb82c3259f90b88fd52bdcb88f7eeecdde4c243d880bac7614e15cf8db5993ffa\",\n        \"signed\": \"e24765860137689aad50ebeefc8d6db8e936a4cba62ce87a7f580209384a9d7eec9070905f60ad63a7befd7c70f0ae7c8109169aee4e518fcebfaca723c5b207bd4fb28a1dd08b07ba66e17f0c4f21853fefef1c9d20ba7977f154641ea1a18becf6bbb80388886294e0756a3c508ffdfe90b51e1356d112d8cde5ee2cc6332e61d169ccc8cc934994f1bb560fa4660c0b0fd4e8149a225ed4883e68fbb69da7af8a524b17141ccb76b50cd8e1b67d3ce037ded7dfa59bc7c2674226ec7e07b78ea3f782fda3e5f1e9caeab608ca387c304654f801d00e10a7c29f4b0da3e5f89513a98037719a1aef4c2506c177af5451a00757a59f16229c4f4414df51580d48210dabc9377370b6068a88e81d3ad1bed4985155c3600ff48768b903022fe02ae480f2e6329f0bcc91d75f5c6a09fdf77bde90499f3ca395cb20062a0984ad6a0141fd01c2d54dfbb1ee584610640773439a1658d2c9f862f183bfefb033a3be271812f13c78704657e7fb4f850175fcd63d3e4405d192242c21f27c51477f3211a9ce248e892b42fb6d85820f41b897836f20f85a1311534b5c404f8b7a4a0319bc6cecaa57fe4d4f20607c99c2df22fa0676f99d1bd87886c928c4988c6e78c57d758330e6922cbe03c10340253d0dd483792ce75e6cd09d12fbbb041f0205e65ad25ce7c1b24e77ee8d6f915e3bc3e10d09fbd387a84bdaabfd1cedb52c0b1733b5f47088c0d35e0ef458c85414c2b04c2d29f63f77586131ee65530f209b518a0f257a0746bbd5fe0a2e0c388a6c480e1b60714fee1c5941bb4e13f707eac487a9666a723b5793134a268b77597786c3a3193b46d355dd0895fc6216c536a542ffd7d7b08010c86f547a5daa38335a8bfa2655d5f71b4d8807f50c8545c583dd0b690022ee65873aea3e8f1a565f3b0e4e0295fb0d321f5c0b397f2fd0528f86a0d1b707f737b175c69e9e7ae3c84d4b2cf3a38a631aa8032b3e65bb4528f66d0bfd34473ed0101d2a61255b215bc1cbab9a26d2b969324b77c8a5464e5b23df6c5112f9d17c587d95559de212ad241d8b126050e5fddfcc839a7e5aa2fda1ca20c0910d863418f195b38adfcc36e92f2396ac3144b537b30fbe4dde614902f89978b7fb42cd99f13d99c45c734fb82c3259f90b88fd52bdcb88f7eeecdde4c243d880bac7614e15cf8db5993ffa\",\n        \"signature\": \"e24765860137689aad50ebeefc8d6db8e936a4cba62ce87a7f580209384a9d7eec9070905f60ad63a7befd7c70f0ae7c8109169aee4e518fcebfaca723c5b207\"\n    },\n    {\n        \"secret_key\": \"dbbd0f7ecb6482cb01c4dbdc3893c0db81e831353a5b01cc75d3b11f2ff3c59c\",\n        \"public_key\": \"2d4e588d31a384b17858c0d784f6712bafd0b41204cf8f0d57973e59c770d3da\",\n        \"message\": \"e0fff35975eba78da2b0ffcc5c1b663600888e8255cd208f6dce7e88953b7142937389a337ae82f4cfe32fcb34f552a48fa8899e1a659e3ed3d3d290efc9a0f7dedf33e21d048d8d910757037b76e8a7ee9e4eca30f529ddc02ceffc26d64fda7303cc0d8940e9ef59dc983c12ccd1d2717e64d3006af82ab15bb878bb89d1758be44310420638b96a0b5e1e65009d69395d027a5da4a85e901be9aa2c0b3acc508ee18574c1b2fa9bd5d7ae7c7d830712da5cbf26be09a3128470a12a14909a80a266659befda548fd2b22f24c5fdc206ed3a4e75f5320682ed0e4ce817d63d5c7f1ee2b440643355be6542f59dc6c45ab15772f2219a812ef7527642015bc75fe45ba969e8100c268e24ceef9205a83a3f7b5ae800ad06e095b9b139219489793a7bce84ebeb654ab6669e2855ccbeb694dd48651505b959d32a77020b869533e3256d40685a6120bab794485b32e1169256fb188fe76e04e9efa6d10d286ae86d6f1c87e8fc73ad9b59fe0c27ee92a46415b39d786d66325d7fa6fda712f199da554fc1c89944a4e84c196e979a807553718cb81c076e511e609d5cac23d8f45b38b94bcfcf158d0d61602238d52e3ae84c815322f534f254e63389ae155dee2fa93396f0ea499d5d08c2475908c648bddcee591e1337e9421dc5a257ce89ccce4ceea809d7e87134e039db1be598196d3089fdcfa8978e02c1555832da0a72b08ad07cdd072627409c873937b0e835715baaf2608b2395327467cf69a1cdcce6372418383e7b89c8df4d531f585149509ead1e41b6627fea81c7958cb49d2d3c3e2fc691e0b8cf72679c08b8904654531bc4368fb617ac7557d9db8d329d77e48d8fb4de73abe7cb9388274af585f875c0dab793e4353518bb24695342af0f5df5be4e9c7ad215be90e25540da3489717dd3d29254585a45c13e6dcc7e9c8a3a79ff755cbe465b25e23a1da608e1084fec83bff80cfb7442b1460187307acd75e3f2d12843a77094acc32888fbe5f1fc24c615d19a065391d4176474644246b5343da77626a2d483fe204f839328775b71a4cb567273e169640af93dde3eca9116f400e23a7ad3d8fc3a28e565f125d6\",\n        \"signed\": \"96c00361fb71c52305e1ab7707e0465203eb13df3e0655f095fb331942a40b15584143b370a7dd5761fb03c075d04a8348661ccea9ada53365b500087d57ec0ce0fff35975eba78da2b0ffcc5c1b663600888e8255cd208f6dce7e88953b7142937389a337ae82f4cfe32fcb34f552a48fa8899e1a659e3ed3d3d290efc9a0f7dedf33e21d048d8d910757037b76e8a7ee9e4eca30f529ddc02ceffc26d64fda7303cc0d8940e9ef59dc983c12ccd1d2717e64d3006af82ab15bb878bb89d1758be44310420638b96a0b5e1e65009d69395d027a5da4a85e901be9aa2c0b3acc508ee18574c1b2fa9bd5d7ae7c7d830712da5cbf26be09a3128470a12a14909a80a266659befda548fd2b22f24c5fdc206ed3a4e75f5320682ed0e4ce817d63d5c7f1ee2b440643355be6542f59dc6c45ab15772f2219a812ef7527642015bc75fe45ba969e8100c268e24ceef9205a83a3f7b5ae800ad06e095b9b139219489793a7bce84ebeb654ab6669e2855ccbeb694dd48651505b959d32a77020b869533e3256d40685a6120bab794485b32e1169256fb188fe76e04e9efa6d10d286ae86d6f1c87e8fc73ad9b59fe0c27ee92a46415b39d786d66325d7fa6fda712f199da554fc1c89944a4e84c196e979a807553718cb81c076e511e609d5cac23d8f45b38b94bcfcf158d0d61602238d52e3ae84c815322f534f254e63389ae155dee2fa93396f0ea499d5d08c2475908c648bddcee591e1337e9421dc5a257ce89ccce4ceea809d7e87134e039db1be598196d3089fdcfa8978e02c1555832da0a72b08ad07cdd072627409c873937b0e835715baaf2608b2395327467cf69a1cdcce6372418383e7b89c8df4d531f585149509ead1e41b6627fea81c7958cb49d2d3c3e2fc691e0b8cf72679c08b8904654531bc4368fb617ac7557d9db8d329d77e48d8fb4de73abe7cb9388274af585f875c0dab793e4353518bb24695342af0f5df5be4e9c7ad215be90e25540da3489717dd3d29254585a45c13e6dcc7e9c8a3a79ff755cbe465b25e23a1da608e1084fec83bff80cfb7442b1460187307acd75e3f2d12843a77094acc32888fbe5f1fc24c615d19a065391d4176474644246b5343da77626a2d483fe204f839328775b71a4cb567273e169640af93dde3eca9116f400e23a7ad3d8fc3a28e565f125d6\",\n        \"signature\": \"96c00361fb71c52305e1ab7707e0465203eb13df3e0655f095fb331942a40b15584143b370a7dd5761fb03c075d04a8348661ccea9ada53365b500087d57ec0c\"\n    },\n    {\n        \"secret_key\": \"748bb3cd477137bc880ea7c61df25c1dac6ebec9e6c3193d81ffa6f7a81ec667\",\n        \"public_key\": \"106f28cfedf096454226b3b01fc24ab1c9bbd7f2b0973e56fe2f4c56a0b1475b\",\n        \"message\": \"00de6d990c84338a398fda5f4a2cca733c56b2a2ea396c2fe667c268e38145878539bd41bc140a2cdfe7e18360411048cca60f35ce510991df261cbf669039d9d25687a07fc0476a41f50eccf38153ee6ae9ffd392b2bec0cc67101ec3696d7a2ec8cbd447b6a6ea063d33ec128ae8b57577dee17b97162563f15e42b55ca4bedbdfb631a9f6262f94ae35bb35f795c35a01dedb4645a73cfa6ed9ee521e4631fb17bbc06ee57316be527427c8aa55c631187462d4b2c8822ca4e18b7a5d4c114c11dc22069bc832656d5f4d39548718c51f5e4fc828f60e37f01307505265acb22d5e8d767b9aa7b866a157c643873e09084a1a404a7bb58ccc4b5a390fd30601c896935e3556f60d2dc6bdffe47da0a687c8ece1241ff6c07d776111ca6598fca968cb6afa0a14a34ab8f54b95d3d8473a174bc725523f8674dfb2b10f874207fee1b08b42da1f58655305a359757aa0251f14138eedbc280cbd385bf4bbf5530114cc43b0474779e204962f8560d4aa423e17e6aecace66c813784f6c898b5b9cb746a9e01fbc6bb5c660f3e138574f59b9745445486c422bc06a10cc8cc9bc56458ef85e0e8a027cb0617d0337ddda50220b22c5c398f5ce05ec32f09b090f7cf6c60f818c6b4c6830983e91c6eadf1eae4d54bde754f75d450ae73129f6c4ff5c4c606f7cadbf4f78a18db2961cc8c8ddab0578cfedfcf95ef0888afd385537d1d0a07648a5ce2522d0633507d77593e1a0366d1ece843de69867d7ac442ba7dad2a90b59d8984e4a946bbe5f172da427638b2b61209041fff50e60ec02ec2c0b1dc4be2edd13e87b64d1d1663114573cf58a17739f463a1c3d6b2123390183b505c8eeffb20539bdfeeb40776d20c459bac4569968fcafe44ea4cd624a84bfccd7876dd7bf55f83ac7040e30f326dce325588e1ba5bc0790265dfdba09839eef571641e8a1234b6cfc3a36a866bd6b92cd71ec74e0d4deb9e74d158201aa502f07c8ba348ac26aaf9b3d070c9a40b52a44e932552b67a2df05a7f0f03c617b48dc2782366a231e0c4e3938a4274b36aa9450ff936be132dcb692838d654c94542c6e047a7f78ba711919f908a15b30b9\",\n        \"signed\": \"e13ca8e5ce7c268090908d61cf2f0a3e4572412bf5adfc5addfe88556f148b5fcbe3e1bc65ff16117d35c9d5dc3b117198f884925b4035b2c0de6c402ed47a0100de6d990c84338a398fda5f4a2cca733c56b2a2ea396c2fe667c268e38145878539bd41bc140a2cdfe7e18360411048cca60f35ce510991df261cbf669039d9d25687a07fc0476a41f50eccf38153ee6ae9ffd392b2bec0cc67101ec3696d7a2ec8cbd447b6a6ea063d33ec128ae8b57577dee17b97162563f15e42b55ca4bedbdfb631a9f6262f94ae35bb35f795c35a01dedb4645a73cfa6ed9ee521e4631fb17bbc06ee57316be527427c8aa55c631187462d4b2c8822ca4e18b7a5d4c114c11dc22069bc832656d5f4d39548718c51f5e4fc828f60e37f01307505265acb22d5e8d767b9aa7b866a157c643873e09084a1a404a7bb58ccc4b5a390fd30601c896935e3556f60d2dc6bdffe47da0a687c8ece1241ff6c07d776111ca6598fca968cb6afa0a14a34ab8f54b95d3d8473a174bc725523f8674dfb2b10f874207fee1b08b42da1f58655305a359757aa0251f14138eedbc280cbd385bf4bbf5530114cc43b0474779e204962f8560d4aa423e17e6aecace66c813784f6c898b5b9cb746a9e01fbc6bb5c660f3e138574f59b9745445486c422bc06a10cc8cc9bc56458ef85e0e8a027cb0617d0337ddda50220b22c5c398f5ce05ec32f09b090f7cf6c60f818c6b4c6830983e91c6eadf1eae4d54bde754f75d450ae73129f6c4ff5c4c606f7cadbf4f78a18db2961cc8c8ddab0578cfedfcf95ef0888afd385537d1d0a07648a5ce2522d0633507d77593e1a0366d1ece843de69867d7ac442ba7dad2a90b59d8984e4a946bbe5f172da427638b2b61209041fff50e60ec02ec2c0b1dc4be2edd13e87b64d1d1663114573cf58a17739f463a1c3d6b2123390183b505c8eeffb20539bdfeeb40776d20c459bac4569968fcafe44ea4cd624a84bfccd7876dd7bf55f83ac7040e30f326dce325588e1ba5bc0790265dfdba09839eef571641e8a1234b6cfc3a36a866bd6b92cd71ec74e0d4deb9e74d158201aa502f07c8ba348ac26aaf9b3d070c9a40b52a44e932552b67a2df05a7f0f03c617b48dc2782366a231e0c4e3938a4274b36aa9450ff936be132dcb692838d654c94542c6e047a7f78ba711919f908a15b30b9\",\n        \"signature\": \"e13ca8e5ce7c268090908d61cf2f0a3e4572412bf5adfc5addfe88556f148b5fcbe3e1bc65ff16117d35c9d5dc3b117198f884925b4035b2c0de6c402ed47a01\"\n    },\n    {\n        \"secret_key\": \"393d44dd0ded71fc08477bd25ed0e6629fa7f88f082ebcef091898e5c9e3d5b8\",\n        \"public_key\": \"c52a993b802d84540d275479a1af5e287d19ea13b380fa3068d2f2c68eb97a09\",\n        \"message\": \"142b6e82501362d55a04b89d541a796863d7783840d34cbdfc516a3c84772f92446f5f0df4c45c6e0dc8ec1e9bb0ff7ec1696a09cd7ae34c10f8e61a9acabd4303f0a9247237621c490e8d9d0fe44482c560d051b82b074ac3d8e49bb2ac715ac4cde3d4709d0ea3afc51bfdef4b656771fbd55f89da9fa6dcaa62cbae561208d98cfa24cb81252b895f6a4a92c8e407af6c1f1ef49d8dde154fbcb1ca457a204b5ea5432e4d71fb7eb24d43f6fe25e7b4c659b0eebc4cbcc8b3cfde07c8f07b18a51570e7163e33b317b61360f9ce08d95de2c3156af1ccc9b55bcf81eabf3c40434046bbe82e02992a2ac8b3b425680a23d934726cb1b7bf26ceb52a39022c00acf425257167b821185f68e3ed17903d8d22275498c39a9e8df884ec00558dcfa43b8a119c2e853b9a0318bbea087f9cec17ca49b70817b8d7c170a8906f3ee9e8f8cb27a1d0f575abfa627e88f08ca4b93c3297c4f317072f421c5e602e2f831dfb82551bdce8d71216f05cf9a2773b90fc93b9d855a91e35ade332a5061fdb82b309bab4f56e2d586a84c67481d1902c261b3f97dc30b184619df9fdfc7a329d061a41df332202133d8eaeeddb4cfcee53536e07aad11553dcf5ed1e949d45355f9ef42c7832b0de7c2f1526fbef86b63649b6b85ae5ca86f0cea6df9c126c1d79489cc3bfc6e8bf0346eb30d01643c010150c5c8d0eb5010a46112215137991085e57493b22e83526b7b172c6c7341c40321e9ceb7c82bfbaa48f3bd8f51372d96d47444ff0d8bb2e5fd26514eb639105e33895fdc41f6df1fbfdcb08466ec2d217fc99fb012fe6540c0c5a5966ed3e66fab1202ab9daffe8e27e8f7462828d662659ea3b2c608cf68e30dbac62ffd8229f4a53f59ae16833b81a159161f19369f60f51c43a217efc5efd6ab7a91fe249c7b8a0c14e9faea533de133849a92447676f6cc18bef4fec7f37319759ce80ea3eac18fa2d9fa02309e1ce93ac6cf4cd2cb2c95f1e2aff7b2a8856405a7b8ebabeb4906d9b9734da9fb5e5d3f322bb5b559fa61ec8f515db9065ab4b91a7a31d5c625061c2fd2bcfe17f94bbde4776302b8aef3d5b52db3bc73ae4a30cc4417acb\",\n        \"signed\": \"84c716e60de67b020cc1a6a24e6549fe56c6d941a8edeae407626666c31cb60dee6be5a71ebd76baf71b75114bccfd37d163a968bbeec1f76972151296c47e07142b6e82501362d55a04b89d541a796863d7783840d34cbdfc516a3c84772f92446f5f0df4c45c6e0dc8ec1e9bb0ff7ec1696a09cd7ae34c10f8e61a9acabd4303f0a9247237621c490e8d9d0fe44482c560d051b82b074ac3d8e49bb2ac715ac4cde3d4709d0ea3afc51bfdef4b656771fbd55f89da9fa6dcaa62cbae561208d98cfa24cb81252b895f6a4a92c8e407af6c1f1ef49d8dde154fbcb1ca457a204b5ea5432e4d71fb7eb24d43f6fe25e7b4c659b0eebc4cbcc8b3cfde07c8f07b18a51570e7163e33b317b61360f9ce08d95de2c3156af1ccc9b55bcf81eabf3c40434046bbe82e02992a2ac8b3b425680a23d934726cb1b7bf26ceb52a39022c00acf425257167b821185f68e3ed17903d8d22275498c39a9e8df884ec00558dcfa43b8a119c2e853b9a0318bbea087f9cec17ca49b70817b8d7c170a8906f3ee9e8f8cb27a1d0f575abfa627e88f08ca4b93c3297c4f317072f421c5e602e2f831dfb82551bdce8d71216f05cf9a2773b90fc93b9d855a91e35ade332a5061fdb82b309bab4f56e2d586a84c67481d1902c261b3f97dc30b184619df9fdfc7a329d061a41df332202133d8eaeeddb4cfcee53536e07aad11553dcf5ed1e949d45355f9ef42c7832b0de7c2f1526fbef86b63649b6b85ae5ca86f0cea6df9c126c1d79489cc3bfc6e8bf0346eb30d01643c010150c5c8d0eb5010a46112215137991085e57493b22e83526b7b172c6c7341c40321e9ceb7c82bfbaa48f3bd8f51372d96d47444ff0d8bb2e5fd26514eb639105e33895fdc41f6df1fbfdcb08466ec2d217fc99fb012fe6540c0c5a5966ed3e66fab1202ab9daffe8e27e8f7462828d662659ea3b2c608cf68e30dbac62ffd8229f4a53f59ae16833b81a159161f19369f60f51c43a217efc5efd6ab7a91fe249c7b8a0c14e9faea533de133849a92447676f6cc18bef4fec7f37319759ce80ea3eac18fa2d9fa02309e1ce93ac6cf4cd2cb2c95f1e2aff7b2a8856405a7b8ebabeb4906d9b9734da9fb5e5d3f322bb5b559fa61ec8f515db9065ab4b91a7a31d5c625061c2fd2bcfe17f94bbde4776302b8aef3d5b52db3bc73ae4a30cc4417acb\",\n        \"signature\": \"84c716e60de67b020cc1a6a24e6549fe56c6d941a8edeae407626666c31cb60dee6be5a71ebd76baf71b75114bccfd37d163a968bbeec1f76972151296c47e07\"\n    },\n    {\n        \"secret_key\": \"71193640a0a2b22fb22d00a80b33a5514f3d1000034fccd885d8ea8638f0b0f8\",\n        \"public_key\": \"b1d36f723b7086d923119f46759b39fa1e4038c6418c379ba98b5840c7ea5068\",\n        \"message\": \"e0287948bb85a398e6affa2d25fcff8bdb9326f5d14fdeb60549f5fbf0c1816f11cbdd4e90fea039dca60faad1696003f91515c9b272882c95c9a4ab6e2777bd927e7d8442aea6cea619c9b15255fed612b5cc3158fc705bb7a506f4afecf4e34ed517b2c12b8362610e5ea270485cccb3c9aa97ecd6cb19630900f07d94cb293cb6e089a9a77c0194073a7f7177b0230d25763a2ef98d47704cb2c3af4c3c1b495631b4a5b21b2e56bff2ede03ea4fe7cf82917347e3a9d4dbeef37d1cf17615adaa0fd17057969917d478d03ccd8f8b88e5e5acae6732a8161dfb5f7d02123c8d5a565cf4dd98dfc9aaf5a335058a941ca43073f2659615a72fe78c101c41aed07f3bcf980b0a5b3fbafdbbea92fd889cfd53d403278bc15a59aa140c2d773b8889b963dcea365362e426ef4609845c9bce9f8aeb591d1a469b072b41209f5a8b6dc2395ad9060eb2e370978ae3311d1cf0a8f205142d436bab6b95943a97c23e61bd14b2d95672cb9325e9ab1fc9eeeaaccd58b9f4ac1550bdec8449b036039496c5f07a5ed64d5d85171690144db5c81c81cbc4c16718d52c4dfd1958ca5c9c8ba582cd9d706f27a74744c3a05bf1ccd51f1092010d36f1578b578ae0e9ffa47079055ef94fabc9ff72f738bef68461eb3404ccee953f5ee864c974ce70e9037e3388fbaf2889e1366caa0f651e21b339e3d56b9d95ac30b3592a948912c90bf54473cebc467b09a3943dcac4868acb5b35ea691eff4d8cc1cda0c6c0a9c169a4ee10041f35f433fb53d26067b291056b1da69ff46fbea1ca7213659a990d5d5df1406b093da2a33c8df95ab3ce811afb9c98c5bfd7c4e981b3ea94eefd2e2fe95707d89f307fa76828b5c6774950aee80626714256e197dc7da972158c768bbee7fbd169ec15b4bb7be72976dbed3e512766ef22ef3b812bcac4aa3115afe83d31284af8eacea4ee49afd42d9c44fff2d861c08629b55dae00ff674fb028e738b05dcb38aeaa6963cc3faafc7b69245a2a122a96dd2f03a824d72b0fe0dd798df5c4bb75a87324e764a50a5ff52547ada8f8f88e6f38aee49d58ddb012648854cd59d0ec97bc3d58d0ad4491f08590767ceb1\",\n        \"signed\": \"a9702a3395acd20d754373095dc61445584d8e571080e179adcba3106bb06a7ce4d460f1261aef8643ab1634f47c9414a32e183a327691e65843dd6c05507207e0287948bb85a398e6affa2d25fcff8bdb9326f5d14fdeb60549f5fbf0c1816f11cbdd4e90fea039dca60faad1696003f91515c9b272882c95c9a4ab6e2777bd927e7d8442aea6cea619c9b15255fed612b5cc3158fc705bb7a506f4afecf4e34ed517b2c12b8362610e5ea270485cccb3c9aa97ecd6cb19630900f07d94cb293cb6e089a9a77c0194073a7f7177b0230d25763a2ef98d47704cb2c3af4c3c1b495631b4a5b21b2e56bff2ede03ea4fe7cf82917347e3a9d4dbeef37d1cf17615adaa0fd17057969917d478d03ccd8f8b88e5e5acae6732a8161dfb5f7d02123c8d5a565cf4dd98dfc9aaf5a335058a941ca43073f2659615a72fe78c101c41aed07f3bcf980b0a5b3fbafdbbea92fd889cfd53d403278bc15a59aa140c2d773b8889b963dcea365362e426ef4609845c9bce9f8aeb591d1a469b072b41209f5a8b6dc2395ad9060eb2e370978ae3311d1cf0a8f205142d436bab6b95943a97c23e61bd14b2d95672cb9325e9ab1fc9eeeaaccd58b9f4ac1550bdec8449b036039496c5f07a5ed64d5d85171690144db5c81c81cbc4c16718d52c4dfd1958ca5c9c8ba582cd9d706f27a74744c3a05bf1ccd51f1092010d36f1578b578ae0e9ffa47079055ef94fabc9ff72f738bef68461eb3404ccee953f5ee864c974ce70e9037e3388fbaf2889e1366caa0f651e21b339e3d56b9d95ac30b3592a948912c90bf54473cebc467b09a3943dcac4868acb5b35ea691eff4d8cc1cda0c6c0a9c169a4ee10041f35f433fb53d26067b291056b1da69ff46fbea1ca7213659a990d5d5df1406b093da2a33c8df95ab3ce811afb9c98c5bfd7c4e981b3ea94eefd2e2fe95707d89f307fa76828b5c6774950aee80626714256e197dc7da972158c768bbee7fbd169ec15b4bb7be72976dbed3e512766ef22ef3b812bcac4aa3115afe83d31284af8eacea4ee49afd42d9c44fff2d861c08629b55dae00ff674fb028e738b05dcb38aeaa6963cc3faafc7b69245a2a122a96dd2f03a824d72b0fe0dd798df5c4bb75a87324e764a50a5ff52547ada8f8f88e6f38aee49d58ddb012648854cd59d0ec97bc3d58d0ad4491f08590767ceb1\",\n        \"signature\": \"a9702a3395acd20d754373095dc61445584d8e571080e179adcba3106bb06a7ce4d460f1261aef8643ab1634f47c9414a32e183a327691e65843dd6c05507207\"\n    },\n    {\n        \"secret_key\": \"bfc9626c91f348fdaf469def2302e9e38f9051e7349e48f850cf352a8331a28b\",\n        \"public_key\": \"4e8193061c9d65a82bcb25da089b4a80ba41b3dd2f8ed1dc81e1cfd03c849115\",\n        \"message\": \"2f11f40b2a19f640c0044c7b139680c3c3b69f00ff9f6a4186fd7ded569c1d8c5720f19dd35c7816d08a94c08204e47643e264d425e21cefb83129c909a3d78caf72c46bf1a729765ef4b8ca803fdaf8052ffc6cc4a6b579a160b703b15355c6fcd3b9a2ecbc267e60dd59f6a2b19420e55727a80b0bb64167c83ba0c805deed491d93e723f3b43263d17420b85be86c165c552779db960e0aa9eb4d9f3a164a5a21fab3f509a8f0199a6943c4b223cf9daca7e110e056a81d9ce0e0c02ac265eeac05ecd84448468a4d122b87a3e04c2837e43d212704fd41e7f3d198a2e76beca0e7029c432a0654ecd44f984c5df06741964d8372c86e162a8c5418849b41e571feb83eb42fbbcddb8a082143909eaa5012b979931dc7e3cccb44c791e04b8065ee63f0561da1bbf37bf6503477879cfbaf6d9d7d9a7475553f53535f847a76dc3b2b7a3d1d470bbe17124a88e03fe994ba10c24221e39e3d0ff53c79e2faafa19012d5ef192bc6d5260b66f997b644cf48d99f3899d7c485e684aa1e6e30855cf75c2d80c7a3ee4354fe13c676091c8667373d30e60ff8e09fedef175a1a87395fefa0722bf6c01c6555cff068892afe9486cb1fcc5fb6641e82d87079ba5d7a9c139355d6c14c507dbd594724b55351100965be9e5dbfa7708878c4b29f4d54c217746e326ab2a54f99b881d7da5b11edb08a6d79d885691b1f7085517310b309cf9b1b714aabc5c17a509b140b89b3f9dcee50cab441bf5ad3bbc29990f627406170a7a10f2d47dfc9256154f962308e769a2ab1b2a00e27e327f0d1fa164d1e38ead5ceaae238ba526f54b81b45dea6c8974186b1b6725fa4c83e62f3e254f729871bda4dc444bce78f0903fa318eaac822a95532ab019e9cfc5619e2c2067f258f4375d2e0222ea5bf96a253a2a3fa9eea02c3eeccb028c76bc60d38298b95b9afe66031b1a2a26152fdaa7ef4f837abb51185df8b2ef85ad2c9be6dfba75e37dc7d12e1787fc55f866fd066f12291dff1976afc10da913101e70495d8783348d611b011ec671c0da737bf962cdcc9e4a800b513935a56d084ea64a7d4e8e99ee9440a736132e42c909503c2224a141b25ce\",\n        \"signed\": \"660242c1dcf3291369c65c9d7f89872eab482200e344b296e336a0a2e631fa796024b6e1119c27d52264a49815dd781927a7df467e88b801e684fc602296250e2f11f40b2a19f640c0044c7b139680c3c3b69f00ff9f6a4186fd7ded569c1d8c5720f19dd35c7816d08a94c08204e47643e264d425e21cefb83129c909a3d78caf72c46bf1a729765ef4b8ca803fdaf8052ffc6cc4a6b579a160b703b15355c6fcd3b9a2ecbc267e60dd59f6a2b19420e55727a80b0bb64167c83ba0c805deed491d93e723f3b43263d17420b85be86c165c552779db960e0aa9eb4d9f3a164a5a21fab3f509a8f0199a6943c4b223cf9daca7e110e056a81d9ce0e0c02ac265eeac05ecd84448468a4d122b87a3e04c2837e43d212704fd41e7f3d198a2e76beca0e7029c432a0654ecd44f984c5df06741964d8372c86e162a8c5418849b41e571feb83eb42fbbcddb8a082143909eaa5012b979931dc7e3cccb44c791e04b8065ee63f0561da1bbf37bf6503477879cfbaf6d9d7d9a7475553f53535f847a76dc3b2b7a3d1d470bbe17124a88e03fe994ba10c24221e39e3d0ff53c79e2faafa19012d5ef192bc6d5260b66f997b644cf48d99f3899d7c485e684aa1e6e30855cf75c2d80c7a3ee4354fe13c676091c8667373d30e60ff8e09fedef175a1a87395fefa0722bf6c01c6555cff068892afe9486cb1fcc5fb6641e82d87079ba5d7a9c139355d6c14c507dbd594724b55351100965be9e5dbfa7708878c4b29f4d54c217746e326ab2a54f99b881d7da5b11edb08a6d79d885691b1f7085517310b309cf9b1b714aabc5c17a509b140b89b3f9dcee50cab441bf5ad3bbc29990f627406170a7a10f2d47dfc9256154f962308e769a2ab1b2a00e27e327f0d1fa164d1e38ead5ceaae238ba526f54b81b45dea6c8974186b1b6725fa4c83e62f3e254f729871bda4dc444bce78f0903fa318eaac822a95532ab019e9cfc5619e2c2067f258f4375d2e0222ea5bf96a253a2a3fa9eea02c3eeccb028c76bc60d38298b95b9afe66031b1a2a26152fdaa7ef4f837abb51185df8b2ef85ad2c9be6dfba75e37dc7d12e1787fc55f866fd066f12291dff1976afc10da913101e70495d8783348d611b011ec671c0da737bf962cdcc9e4a800b513935a56d084ea64a7d4e8e99ee9440a736132e42c909503c2224a141b25ce\",\n        \"signature\": \"660242c1dcf3291369c65c9d7f89872eab482200e344b296e336a0a2e631fa796024b6e1119c27d52264a49815dd781927a7df467e88b801e684fc602296250e\"\n    },\n    {\n        \"secret_key\": \"393b769482375b821427a66d16e4f55185b7a3b7338f1a06f67cdfa7e35c541c\",\n        \"public_key\": \"84afd70678ffa85a9f6574cbcfe3b15d04a9fd15016ff8550a987c4b951c7122\",\n        \"message\": \"8ae8053e03bebeae544043b8414b385364add1673737cf8ab20193d4aabc8a78e1d69b9c7e52729e69307806e927ce3807b07c68c833c4fcf16db15e7dce604d1798915fd4211689b4864642502d38e91b1997b71823318b69abe5bed6f5e3015bfb22df30db371f2260c5c22eba60df39b3edd3c4d7a1e111cd9b8aa46f67bd0cf3a717af06ec0ce567028e06e4797934ad69b1f5be440ff37a8a034b1533fa946424ac595400ad27d3be76dc89ba9d6c49939a09f2e401c8f20f7f7b4b9e63b9d55201534ab4cc7be885f0432a2c6673d2e765194dffd9b6096dd2b2843918750959a8dde4a3ab407eb2f7e1a49c2597e30805f8480dd0cc8272a320c00aa2b210f576e42577d3aa419703697ca406d43a1a4f99b0733664f6d6b2403cba1bdcc51f541cf24236070570540755c7a8631fcc2f18938fa11bc291155b39d7a762a1ff4dca97b448f70e2d3de447cb08f918ea20cb433fa115e30880c96c8cf5f0ebbcf482309db6dc1fb64e17c04d7cdf7a90f4014d15ae7696b44423b0ba084eed4d3fb28c1efb39828aca2f40ca6df342c20e95f8006b2767a83f50c31fcc1581a09753e78291f0d9931d992ad3604473ceb885ecbe7857cc52ad5585334d1485d022e106b71c29bdfcf23ee8a475df2c090532356a6ffc02232317988a2cbcfbc2a36b4b483cb44510e85599b612596b626572b0996d8a61c0ee3efff1f7c71c05fb5a8d8c5d09d924ebaac8800451c9db2456710a279dfe2d22f6aea9de31801dc742534362b0e810e99e841dbb7f0cf9af1aef542a52c776cc51f287368fbe6ad651fad5787ef77c73535f3dfb3618cc8f0dbb549ddca9b9bf91135a3456001a46215ade388e7ceb9fcdfd0d2d0a0356afbe2cec1c2e78b4d998d4554f4621f1151dd3ffd3ba4c0bc852f311758c5dca425d18ba15a8d67ca401d0e6cf280cb88384a2dad49fae39ba2a77b467b3238aa28cfd137e5c5c0ff9000f8b06a2192e162920692265db24ab6aede535e31c2093be57ebf8805df1788914f3a884f884179015808db4d3020f3e78bc34285d233762e899ebff28428215e244404de291728fbf4124ce5b2435260a8e341180075a5651e6\",\n        \"signed\": \"31f98c0a08fda8e735b57366aa1b83b93dae63b5810c821d99cb39df521feac07f3c410b27ba3307757d6049f22454fb6de9e2c3c2438d68319097d112cfdb078ae8053e03bebeae544043b8414b385364add1673737cf8ab20193d4aabc8a78e1d69b9c7e52729e69307806e927ce3807b07c68c833c4fcf16db15e7dce604d1798915fd4211689b4864642502d38e91b1997b71823318b69abe5bed6f5e3015bfb22df30db371f2260c5c22eba60df39b3edd3c4d7a1e111cd9b8aa46f67bd0cf3a717af06ec0ce567028e06e4797934ad69b1f5be440ff37a8a034b1533fa946424ac595400ad27d3be76dc89ba9d6c49939a09f2e401c8f20f7f7b4b9e63b9d55201534ab4cc7be885f0432a2c6673d2e765194dffd9b6096dd2b2843918750959a8dde4a3ab407eb2f7e1a49c2597e30805f8480dd0cc8272a320c00aa2b210f576e42577d3aa419703697ca406d43a1a4f99b0733664f6d6b2403cba1bdcc51f541cf24236070570540755c7a8631fcc2f18938fa11bc291155b39d7a762a1ff4dca97b448f70e2d3de447cb08f918ea20cb433fa115e30880c96c8cf5f0ebbcf482309db6dc1fb64e17c04d7cdf7a90f4014d15ae7696b44423b0ba084eed4d3fb28c1efb39828aca2f40ca6df342c20e95f8006b2767a83f50c31fcc1581a09753e78291f0d9931d992ad3604473ceb885ecbe7857cc52ad5585334d1485d022e106b71c29bdfcf23ee8a475df2c090532356a6ffc02232317988a2cbcfbc2a36b4b483cb44510e85599b612596b626572b0996d8a61c0ee3efff1f7c71c05fb5a8d8c5d09d924ebaac8800451c9db2456710a279dfe2d22f6aea9de31801dc742534362b0e810e99e841dbb7f0cf9af1aef542a52c776cc51f287368fbe6ad651fad5787ef77c73535f3dfb3618cc8f0dbb549ddca9b9bf91135a3456001a46215ade388e7ceb9fcdfd0d2d0a0356afbe2cec1c2e78b4d998d4554f4621f1151dd3ffd3ba4c0bc852f311758c5dca425d18ba15a8d67ca401d0e6cf280cb88384a2dad49fae39ba2a77b467b3238aa28cfd137e5c5c0ff9000f8b06a2192e162920692265db24ab6aede535e31c2093be57ebf8805df1788914f3a884f884179015808db4d3020f3e78bc34285d233762e899ebff28428215e244404de291728fbf4124ce5b2435260a8e341180075a5651e6\",\n        \"signature\": \"31f98c0a08fda8e735b57366aa1b83b93dae63b5810c821d99cb39df521feac07f3c410b27ba3307757d6049f22454fb6de9e2c3c2438d68319097d112cfdb07\"\n    },\n    {\n        \"secret_key\": \"26cbc2510ee6ea390a2cb948a015d131abf4c0954915620b7816aecf4e11da6d\",\n        \"public_key\": \"145e8dd22b4400289dafb626d95a94c2f3b69c65197717cbdcd85098c5492107\",\n        \"message\": \"9cebe24b4f8ade86430e279a3c433e4ae17e008852a24f08690cbc3d75e3b7f200da897c25f7483b37637d4bc11008d9224cd581fbc038adada02d271ed2a5d285d843a0f8b79e37945dc35bc264becd804307e1d44218a643e4b59a9311de985d24b4c26fb14603be5dba1839ee0c8d2ede6cb50af67c804519037b1b1663318cfc6e75d0f051dbb5d3eaf3aad1f78ef0cff48d5c55b2fd25db1539d0f02dae9f25148a8d338b97879bbd39df961aa2c396315a2a86cc783581e67ea844acfe8645428a27b8d32ea3064e3bf62dcf58010ec4348862fac25e3d9fcd4e5d65be59905d816dfb964992ba7aceef8c2075a312e5ffc4f9530ea20f77f93e81cf8a019dc3945634364babf79772045a0dbaa77c47a22b77223b704debd2d003f6a5c7bf6b19cd2c49b614fd4d47fd251fe622cb981785c146bdb7c1d2ea02b116923bf98a1afbb7858adf2df938a790ec1f9074adb8d1afb5633fa961a84764010d3bded1c033d25abdb4b00fb05ed7640fae61879df88f0b09e3abd057b9a52108a9bc985fb73a5f29d84d1ca6921b62f1b703c7eeb4815d9dd6d066738db118baf61b0422f388f1bfc9e3a9bed83a1a727dcc266a9988364846807f4d5518bc2edd0ecb3413c26fd0c79b75d8cb5bcd85c06fccea4d03fb8988dff3ed0cc9dbae78d6ae8d5fc4024617a23f52bd615385d4eee08f9134eb3b250c8f822b47d91e8c4d4c29298016e6fc81f1f1099253d7945e0798955da0dde14ebb934ecfaeeabae87883e1cc398067400fe462a2c4e9f232db5cdd61eba949188cf01b238be7ada938f002dc3ae31fdfd425c8d46ea032323aaf20dd3de2507d36bb45fbb91c40969a9e5da20f7f936b0f4b137b62fe2ba3a667bc0362d93fc50d3f2295e167fcbab0fb3a39b7cb024b578f9490f734b28c9ccf7192f183947d5a513efa4916e4d82b2ab4ba7ec2ffba213ce82ad6ed3b10e48553e733c940aa9b9ce71337c6c2805dfb8dd6618b6d4090a3d6cc963ecea26d1cdc2bf5ac999c11276168a931d816469d79083c24081a50dcbd222752385267ce1bfc1db76b1554ad57e34752b7f8983147c116d4a3fae6f6d57e654fedd7378d2b4989ea\",\n        \"signed\": \"6710d0dd00545b444cf714b79144fe79f38cb1c0f5b74248d4f01fe360117a26ffed4a3bf21323b28a393ae9dee07d69e583e316c6a573d37c644a8d62c405069cebe24b4f8ade86430e279a3c433e4ae17e008852a24f08690cbc3d75e3b7f200da897c25f7483b37637d4bc11008d9224cd581fbc038adada02d271ed2a5d285d843a0f8b79e37945dc35bc264becd804307e1d44218a643e4b59a9311de985d24b4c26fb14603be5dba1839ee0c8d2ede6cb50af67c804519037b1b1663318cfc6e75d0f051dbb5d3eaf3aad1f78ef0cff48d5c55b2fd25db1539d0f02dae9f25148a8d338b97879bbd39df961aa2c396315a2a86cc783581e67ea844acfe8645428a27b8d32ea3064e3bf62dcf58010ec4348862fac25e3d9fcd4e5d65be59905d816dfb964992ba7aceef8c2075a312e5ffc4f9530ea20f77f93e81cf8a019dc3945634364babf79772045a0dbaa77c47a22b77223b704debd2d003f6a5c7bf6b19cd2c49b614fd4d47fd251fe622cb981785c146bdb7c1d2ea02b116923bf98a1afbb7858adf2df938a790ec1f9074adb8d1afb5633fa961a84764010d3bded1c033d25abdb4b00fb05ed7640fae61879df88f0b09e3abd057b9a52108a9bc985fb73a5f29d84d1ca6921b62f1b703c7eeb4815d9dd6d066738db118baf61b0422f388f1bfc9e3a9bed83a1a727dcc266a9988364846807f4d5518bc2edd0ecb3413c26fd0c79b75d8cb5bcd85c06fccea4d03fb8988dff3ed0cc9dbae78d6ae8d5fc4024617a23f52bd615385d4eee08f9134eb3b250c8f822b47d91e8c4d4c29298016e6fc81f1f1099253d7945e0798955da0dde14ebb934ecfaeeabae87883e1cc398067400fe462a2c4e9f232db5cdd61eba949188cf01b238be7ada938f002dc3ae31fdfd425c8d46ea032323aaf20dd3de2507d36bb45fbb91c40969a9e5da20f7f936b0f4b137b62fe2ba3a667bc0362d93fc50d3f2295e167fcbab0fb3a39b7cb024b578f9490f734b28c9ccf7192f183947d5a513efa4916e4d82b2ab4ba7ec2ffba213ce82ad6ed3b10e48553e733c940aa9b9ce71337c6c2805dfb8dd6618b6d4090a3d6cc963ecea26d1cdc2bf5ac999c11276168a931d816469d79083c24081a50dcbd222752385267ce1bfc1db76b1554ad57e34752b7f8983147c116d4a3fae6f6d57e654fedd7378d2b4989ea\",\n        \"signature\": \"6710d0dd00545b444cf714b79144fe79f38cb1c0f5b74248d4f01fe360117a26ffed4a3bf21323b28a393ae9dee07d69e583e316c6a573d37c644a8d62c40506\"\n    },\n    {\n        \"secret_key\": \"b1f59e3c2380d7aa414d0bf90893a38dddfc293859303d16f00d9eae6cb3450e\",\n        \"public_key\": \"84e3f5f72f19095b0f533848a5a91d0f0743b8e3a3e2f52fcbd7ebe7c5b5a998\",\n        \"message\": \"c6174c9ad3685dd648636017837b8d992200319e9a5a0d26d94d2da75e2c3aff46f42d7b3aba472b7f860b0fe1f695529731fdc8cf0da705d1d09acad04f010837ecef419d57e9ea6cacf168c5215696f471f3caa897607c629d443de099d31753c24677d8d75f4bf17246818b58adc0424b762a191ef39a7076a5ad12614cf54c47eb0908bb866518c5fac1ca2d2e5b657520a2b3695c6fb360f16f4ab357998e4c0e97231d6f89c968dc29ecc1aa91fa0d7543b5d2247b0d85e48743ab7cc815cfdaa82bf68ca6d3e2250bfda27024d61b474c6b8154ac8d1b5a36209782515c1646680d37069b8b4412f951b025a4d543625dd02290bf03c6734613f99b7a4c3af5c5f9e9ac3474465e648423018d40a6adbe88a3301d3d259b04ee44cc0562ee0ded4f5e26ad977ab5631f85768dbce53f616c029a8b8f933e2a9264b1c81f517e9ff58ab9f45a23eeed4204358f8fff0c8f975ef1dfa5776a5f7793bae2f281d7b0cbef240b3fc6be058821ea2b800fffe55a7de0afc93ede9c60c8de005abb9a2c88f4e61e8deb3170f1078a36e2d8f2a58239bdee496e90d137d2110f0ad857a88b3527664f781939e0b2f76634ff9f6c57e1c43f58243171cd862ef4284576172af1f6c3bd37d5d74b28a7a98698bd74e57bbc142e67f703f9d62cde761a02268fecb343fc01418836414f1222ca24bcdd69d005901da2a0f94465e4d4ba68898816bf7e3e4bb79c8ca5997fba9a8df84faa2d24b044c4ea61029a46cba703421e361dfa52caaff3bbaab7fd753f2856d7c083aeb9768da11d821e2d309f7a735c399692dac2f262846b891bf6461af23c8c7ce1d4d9032c3c140f739e5584c36f05eaf4349ff4545f283a4e0fea49430a1b180d0871e3742b88ccb591124fc427ed673b5f27b0b0a6f54af22ba4a6d1c6c1db2a1fcaa6d8a0308b77ef2d0c61bbf51b95f1e8b6abc5041d97b6b6f1b569b3f63cec05cb567aaea106727096ee8a9ea87b8804901f7e88a7409c66f152de9dbfcbe31952e6fd83b2877a775fae425b3851e0eff8792ffb3848f84a65cc317253b272475e717e49e9c6ff6b7859d11bba7c4428c82d1789e0dca5bcadca2fdb259e98\",\n        \"signed\": \"60afc1e991fdd27cc472b9acc9d405b4d2b913089290b311c4fa891ae2eea05671fde7a0ef86557bd867d1c0b747caf35229d6ef528fe3e0d0bcf630380ea90ec6174c9ad3685dd648636017837b8d992200319e9a5a0d26d94d2da75e2c3aff46f42d7b3aba472b7f860b0fe1f695529731fdc8cf0da705d1d09acad04f010837ecef419d57e9ea6cacf168c5215696f471f3caa897607c629d443de099d31753c24677d8d75f4bf17246818b58adc0424b762a191ef39a7076a5ad12614cf54c47eb0908bb866518c5fac1ca2d2e5b657520a2b3695c6fb360f16f4ab357998e4c0e97231d6f89c968dc29ecc1aa91fa0d7543b5d2247b0d85e48743ab7cc815cfdaa82bf68ca6d3e2250bfda27024d61b474c6b8154ac8d1b5a36209782515c1646680d37069b8b4412f951b025a4d543625dd02290bf03c6734613f99b7a4c3af5c5f9e9ac3474465e648423018d40a6adbe88a3301d3d259b04ee44cc0562ee0ded4f5e26ad977ab5631f85768dbce53f616c029a8b8f933e2a9264b1c81f517e9ff58ab9f45a23eeed4204358f8fff0c8f975ef1dfa5776a5f7793bae2f281d7b0cbef240b3fc6be058821ea2b800fffe55a7de0afc93ede9c60c8de005abb9a2c88f4e61e8deb3170f1078a36e2d8f2a58239bdee496e90d137d2110f0ad857a88b3527664f781939e0b2f76634ff9f6c57e1c43f58243171cd862ef4284576172af1f6c3bd37d5d74b28a7a98698bd74e57bbc142e67f703f9d62cde761a02268fecb343fc01418836414f1222ca24bcdd69d005901da2a0f94465e4d4ba68898816bf7e3e4bb79c8ca5997fba9a8df84faa2d24b044c4ea61029a46cba703421e361dfa52caaff3bbaab7fd753f2856d7c083aeb9768da11d821e2d309f7a735c399692dac2f262846b891bf6461af23c8c7ce1d4d9032c3c140f739e5584c36f05eaf4349ff4545f283a4e0fea49430a1b180d0871e3742b88ccb591124fc427ed673b5f27b0b0a6f54af22ba4a6d1c6c1db2a1fcaa6d8a0308b77ef2d0c61bbf51b95f1e8b6abc5041d97b6b6f1b569b3f63cec05cb567aaea106727096ee8a9ea87b8804901f7e88a7409c66f152de9dbfcbe31952e6fd83b2877a775fae425b3851e0eff8792ffb3848f84a65cc317253b272475e717e49e9c6ff6b7859d11bba7c4428c82d1789e0dca5bcadca2fdb259e98\",\n        \"signature\": \"60afc1e991fdd27cc472b9acc9d405b4d2b913089290b311c4fa891ae2eea05671fde7a0ef86557bd867d1c0b747caf35229d6ef528fe3e0d0bcf630380ea90e\"\n    },\n    {\n        \"secret_key\": \"db461b9f707eb2cd7748c44c99562f1302397489353df5f303797fe0d0b58de1\",\n        \"public_key\": \"635116da8ba5a36a377728e28618e75c5592aecc18e34011c4c42591970b7366\",\n        \"message\": \"1a2ac8c1b9ea099b831a6812d2b4261309058ea5883d70b1c607b9cd3fdfdb86e79902b0fe89e80ea7c478207674b2d803b0b9ca147ffe62e594f506c796d68997ce482b51a46e49b4a5d858cdeae2c6ec9b694198e6822f0e33ed57bedb0335c7890a72a7ee3c23823be79b7f9471e033c79aeed52e5760fb0ccbb9d38fded8b47383c19103ce44705834c59ddd86f7033948612d6662f516ce4e399ff20363cc7281a69b2d5c307b10b704150184ece32f390d772ccfa78483bb77a9fba84425366984171cc2bb60b0ec6c628d4e9030746dac1cabca60f05683813346a1a5bc14727549795c1c926869e1aa25093d591b43e086e43a04d170d942c4165e1c5ce76c3e64973d9136f9325bee821682f1043e951b02767f3fb458d02449add3e8a66e516fdb1ed580e056e0f78ee33fd9ee3280912fae07fe1ea02527cd001d6f6f2f89ee649f517414d56f57359a846891f0222c321d7e70817995a8cd8e94760b6e74832bab68d55bc4641884221fd29f122d87a9a868b6a6060c87b2382cf7bbdda4cd6aaa1bbc8e6d634ab580c865f5add6a1d54e61a607dc2c37b08a8cba6e610c12cfebef9c989eef3b782acbd1bcec5f04e835ca101298b5e9bdd8813a71b0d469fcf12727d3de1c3f97ddbc6ab2658440dd6421019bc68f356d6f25536865851d92d90fe9969c3b7c35a2e88ce153476ec3973af9359f1677a4caf1cc481c71bd90228ff5fc6dd83b8a699ffe514929f5c95cb4f04b00dd18a2872c41868d3beb76498ddc9234b63f599d7071801db2c2878f7bef4ffddd813226f06db84eb30217a7183082e3c1242bb6d01cd3a6ce27bff16bfbfdd75b7e5104312c49c43aadfcd5b4edba0ff50d2890ca3cd9cca33e4fc694c057c47ebe1c20a4ad115f985dc7442c6f6da7be530b6902289cab9ca139c6b24cb80ffdd782324e602c45910db63d8b5c44ca29d27f56dbf00186ba583c34e16031df357546b3ab9a3dd65e91d7128c939195e646a0f0b89bf5df04ba233d6a12a271f7e04aa45cda99b4a55a21cbbb738515e32c56aac2496232b1008a6761c8045a1fe0f9a3644047b5966a58a600466c1b1d11ddad5aa573c43ebda887e16a05\",\n        \"signed\": \"dd049ca79beb9eac325acf44672ff578a968502fe1bcf5ea19d52c0f6778c7f1c7bbf742747907786e608123911a920778d2f9596fe29be7cc28fd009d7c440e1a2ac8c1b9ea099b831a6812d2b4261309058ea5883d70b1c607b9cd3fdfdb86e79902b0fe89e80ea7c478207674b2d803b0b9ca147ffe62e594f506c796d68997ce482b51a46e49b4a5d858cdeae2c6ec9b694198e6822f0e33ed57bedb0335c7890a72a7ee3c23823be79b7f9471e033c79aeed52e5760fb0ccbb9d38fded8b47383c19103ce44705834c59ddd86f7033948612d6662f516ce4e399ff20363cc7281a69b2d5c307b10b704150184ece32f390d772ccfa78483bb77a9fba84425366984171cc2bb60b0ec6c628d4e9030746dac1cabca60f05683813346a1a5bc14727549795c1c926869e1aa25093d591b43e086e43a04d170d942c4165e1c5ce76c3e64973d9136f9325bee821682f1043e951b02767f3fb458d02449add3e8a66e516fdb1ed580e056e0f78ee33fd9ee3280912fae07fe1ea02527cd001d6f6f2f89ee649f517414d56f57359a846891f0222c321d7e70817995a8cd8e94760b6e74832bab68d55bc4641884221fd29f122d87a9a868b6a6060c87b2382cf7bbdda4cd6aaa1bbc8e6d634ab580c865f5add6a1d54e61a607dc2c37b08a8cba6e610c12cfebef9c989eef3b782acbd1bcec5f04e835ca101298b5e9bdd8813a71b0d469fcf12727d3de1c3f97ddbc6ab2658440dd6421019bc68f356d6f25536865851d92d90fe9969c3b7c35a2e88ce153476ec3973af9359f1677a4caf1cc481c71bd90228ff5fc6dd83b8a699ffe514929f5c95cb4f04b00dd18a2872c41868d3beb76498ddc9234b63f599d7071801db2c2878f7bef4ffddd813226f06db84eb30217a7183082e3c1242bb6d01cd3a6ce27bff16bfbfdd75b7e5104312c49c43aadfcd5b4edba0ff50d2890ca3cd9cca33e4fc694c057c47ebe1c20a4ad115f985dc7442c6f6da7be530b6902289cab9ca139c6b24cb80ffdd782324e602c45910db63d8b5c44ca29d27f56dbf00186ba583c34e16031df357546b3ab9a3dd65e91d7128c939195e646a0f0b89bf5df04ba233d6a12a271f7e04aa45cda99b4a55a21cbbb738515e32c56aac2496232b1008a6761c8045a1fe0f9a3644047b5966a58a600466c1b1d11ddad5aa573c43ebda887e16a05\",\n        \"signature\": \"dd049ca79beb9eac325acf44672ff578a968502fe1bcf5ea19d52c0f6778c7f1c7bbf742747907786e608123911a920778d2f9596fe29be7cc28fd009d7c440e\"\n    },\n    {\n        \"secret_key\": \"f5c0a7f8f6584c5d2f2e1d0810e8e86103e4e2d45cf9a721d8c47f67493396a4\",\n        \"public_key\": \"3c6d6cce49633141078696131a8d84ed823f30664b289af9dd30c6407f6f0313\",\n        \"message\": \"d68abc609a7a0ce256699eb17043defe1eb822c9708f65718a06581fab2110ec2db09213bb9e0f3612ce4a3f8fdbe757a9f0eb2c3eba438a9088b18f6c5caabbe5c82f7a9ab2fecf0f5859d175e139263033742458f82a6f38756cd5bcdf9e0736db2cab20a0cd3f0f1cdbea8556d84909358dd8f69f0dacd49abf8ac1bfe75940d6939e6a55385b5ace7ce1fde120679ab6ea7a89d14268d29ffb46df105bf3909242c6605f3e3e2ab7448937d6db2ba054c7b14f432db41dc18a5b957336b7f52d978ec03e7d5764e9bd2f4b68958d937bf29823b27efb31e25b43925c4dacbe6718a60fea3b3270e7b76b0de0e70f7fa3c12c215ef72b95dc1b5276238179dfc52fc48859649fa582d05a60df68599a1ceea64f6412d3f8498ae2cedb124245883a240bc0851f0e324965be120486e1ea89a0182dfa8eabd3b8fa66a99c51491389f3c83a3cdb4267f3e4dbc98f0c44856b044dc88d90eeee8415bf73de171afe84be9035e0dc4c80cf0422469fe0c9bd1c6aa654a59b5e34eed351cda2871269ac478e8d382e740e9ac7ab4ddc4c0def0aeab797b6f1a427b8e4a8497a0b9797dadcd35c414fd55b783130f6cded38a44c1a89288307eb8425484137a8aedb030d54b616a82e3c5acffb08d6cc1a61745c29afc68a0c1838b139159c5fa6674d66b9e338115aad4b1b4710aa5d9517bcf7e1cb12d4e6a51c11789fdcae9d9bbe78f69a33e52df1833c876b02687a404facad32841cb2d52554e7b8e2209e3f88fd948c1ecf83957c96f43b034beda6c476096bcb09301ad61f8367cc43e156131862b42ece285bec2dcc2d02d094d042a16072eb22ab9888013be82371569400ec1f8ec7e79108c41b853365268fa4cfbc62c4ac12cc98d2ec38a87d6085859567c0f27d6d431a046e88a9815558660705fd05eb06c6c05e5b7d62347ceee27dffed7141540d608cb975075a9644acc6328439f9fa682b226b186154549011c3b0f0ff4f74caa71c1944e4cb836ce851d9b5d9e727c553e3c723cf98c273e5675cab899bb66f4633a76dea357341f983c53d9158ad319ada75408b41c06f26b7435b80dc3bc0aaf22a833ddedcd6785c87d196b0af2c9a43d1\",\n        \"signed\": \"d4c30a48c4523b1f84b14b657af8f859755bba6359988b675c6d85ddf35462820da476d84f6c402e65b020d9e8a2c285c16708ae58d1f8dbc65782a898a66508d68abc609a7a0ce256699eb17043defe1eb822c9708f65718a06581fab2110ec2db09213bb9e0f3612ce4a3f8fdbe757a9f0eb2c3eba438a9088b18f6c5caabbe5c82f7a9ab2fecf0f5859d175e139263033742458f82a6f38756cd5bcdf9e0736db2cab20a0cd3f0f1cdbea8556d84909358dd8f69f0dacd49abf8ac1bfe75940d6939e6a55385b5ace7ce1fde120679ab6ea7a89d14268d29ffb46df105bf3909242c6605f3e3e2ab7448937d6db2ba054c7b14f432db41dc18a5b957336b7f52d978ec03e7d5764e9bd2f4b68958d937bf29823b27efb31e25b43925c4dacbe6718a60fea3b3270e7b76b0de0e70f7fa3c12c215ef72b95dc1b5276238179dfc52fc48859649fa582d05a60df68599a1ceea64f6412d3f8498ae2cedb124245883a240bc0851f0e324965be120486e1ea89a0182dfa8eabd3b8fa66a99c51491389f3c83a3cdb4267f3e4dbc98f0c44856b044dc88d90eeee8415bf73de171afe84be9035e0dc4c80cf0422469fe0c9bd1c6aa654a59b5e34eed351cda2871269ac478e8d382e740e9ac7ab4ddc4c0def0aeab797b6f1a427b8e4a8497a0b9797dadcd35c414fd55b783130f6cded38a44c1a89288307eb8425484137a8aedb030d54b616a82e3c5acffb08d6cc1a61745c29afc68a0c1838b139159c5fa6674d66b9e338115aad4b1b4710aa5d9517bcf7e1cb12d4e6a51c11789fdcae9d9bbe78f69a33e52df1833c876b02687a404facad32841cb2d52554e7b8e2209e3f88fd948c1ecf83957c96f43b034beda6c476096bcb09301ad61f8367cc43e156131862b42ece285bec2dcc2d02d094d042a16072eb22ab9888013be82371569400ec1f8ec7e79108c41b853365268fa4cfbc62c4ac12cc98d2ec38a87d6085859567c0f27d6d431a046e88a9815558660705fd05eb06c6c05e5b7d62347ceee27dffed7141540d608cb975075a9644acc6328439f9fa682b226b186154549011c3b0f0ff4f74caa71c1944e4cb836ce851d9b5d9e727c553e3c723cf98c273e5675cab899bb66f4633a76dea357341f983c53d9158ad319ada75408b41c06f26b7435b80dc3bc0aaf22a833ddedcd6785c87d196b0af2c9a43d1\",\n        \"signature\": \"d4c30a48c4523b1f84b14b657af8f859755bba6359988b675c6d85ddf35462820da476d84f6c402e65b020d9e8a2c285c16708ae58d1f8dbc65782a898a66508\"\n    },\n    {\n        \"secret_key\": \"1ab946c0c1aebf9ca37c2f4e2a4b337d5b1ebccd24734c9cb2a1608c881e5757\",\n        \"public_key\": \"9afc63dfce0d489b40907aeed6dffe4cd8ef5a6ffa22989556445cbf9b3519c2\",\n        \"message\": \"9bb071b62c04064b0c96e243dd198c39717b25c99448c2c002b84a99204c5a6e23b4b912028675bfdc4df93c5b2fb80881a23e0d44ba18bde99121eee86adc6f842819d6ebc7a288992da3285805a8b8b6fbcd2267b686b3e1bf7960b45f244f852e82492944e3d618bcc4514c17f722ba49aca7f2f3bb4e91f940e9cef015650c3e40b0c855a17c42f11e3a34acc85287dbe0f9093c00373d50c0b3064a5a5f2b1e89206517528295fd871703a8e762b5e76fb9b7473d2149b85b9461f5587ed7e7fc8b50aa09876deeb6e237078502142cec6bddc70140fe1d1f1658d5d3e910fd7036a2f924b499db1756f7c8ce0d5f0d045b39bc81c5c2f1a761f52ff393e0649b8db0bd8854bd026be2c7c3cd63526ba5a80d48335f033832d63376071b6308f05960cb3fc9fac932edd8376dae51f2c661f75b7c6f4ac856753aca62062877609fc4a0ff60670282c05e882d1a035bf9890cab296ac7a8df244c56f490250f020054b8af51be4fc318beba506232bf45e17f5c740cf09d37515a8bc894bc955c8a460877c7854f8be363b21933e16287ae0cb70f222d4e36b8b424975559bb4bfc8dd1d51b3c0faf4a53e302196f9fedb53287d09315dfffa2bc4b3acff137f9a76d6856217f79cbb25433fc97899fd6540f18088e84417e4833e4a91aaba4658ae9ad7f760dd9c5b7191a0d3c05541b83c025a7992138e6d1080da14c2c887c6d670aab374d436c272f9e96f85a9c423379c0d47c46df6de334ea2057158d33231e1426a66d3c70827aad5511b846e03b94923d5f94baf1f8cf11a861373a5b80ad5e317ec2a529e94e636cdc3aa29e5dac205a0c13f68fb198cf9456e6390aead4d9782a1038f6478d339a81bae7af2a04151c2f22e8d39fe071e1a52168d57c84c36293413f8e6ff6934f05e7efad6fa120c8c1c38ad1886a3d00bfc306459203c02cdf4f06652bc8fa0e8b9cc779d43fbb789e7dad5dc99f41d4cc588c1b65426a4e77389edd04977578f8f316bcdd9461d666472cdd276aa569721c65232256ba1cf0e7f5ea55321729bb0e0386a77b865532024696eddef485b7d7b28c1573b9347e414d4261995482e3b312de1331f84e7548607a84\",\n        \"signed\": \"bfabdea41810a53f8e527acd66ec106ce2ae1a67ff6a9b522e0f08fbbf1252682cb3a1dcc875601944cb88000f72e13907007903a77cd0db0316d419ac38c2049bb071b62c04064b0c96e243dd198c39717b25c99448c2c002b84a99204c5a6e23b4b912028675bfdc4df93c5b2fb80881a23e0d44ba18bde99121eee86adc6f842819d6ebc7a288992da3285805a8b8b6fbcd2267b686b3e1bf7960b45f244f852e82492944e3d618bcc4514c17f722ba49aca7f2f3bb4e91f940e9cef015650c3e40b0c855a17c42f11e3a34acc85287dbe0f9093c00373d50c0b3064a5a5f2b1e89206517528295fd871703a8e762b5e76fb9b7473d2149b85b9461f5587ed7e7fc8b50aa09876deeb6e237078502142cec6bddc70140fe1d1f1658d5d3e910fd7036a2f924b499db1756f7c8ce0d5f0d045b39bc81c5c2f1a761f52ff393e0649b8db0bd8854bd026be2c7c3cd63526ba5a80d48335f033832d63376071b6308f05960cb3fc9fac932edd8376dae51f2c661f75b7c6f4ac856753aca62062877609fc4a0ff60670282c05e882d1a035bf9890cab296ac7a8df244c56f490250f020054b8af51be4fc318beba506232bf45e17f5c740cf09d37515a8bc894bc955c8a460877c7854f8be363b21933e16287ae0cb70f222d4e36b8b424975559bb4bfc8dd1d51b3c0faf4a53e302196f9fedb53287d09315dfffa2bc4b3acff137f9a76d6856217f79cbb25433fc97899fd6540f18088e84417e4833e4a91aaba4658ae9ad7f760dd9c5b7191a0d3c05541b83c025a7992138e6d1080da14c2c887c6d670aab374d436c272f9e96f85a9c423379c0d47c46df6de334ea2057158d33231e1426a66d3c70827aad5511b846e03b94923d5f94baf1f8cf11a861373a5b80ad5e317ec2a529e94e636cdc3aa29e5dac205a0c13f68fb198cf9456e6390aead4d9782a1038f6478d339a81bae7af2a04151c2f22e8d39fe071e1a52168d57c84c36293413f8e6ff6934f05e7efad6fa120c8c1c38ad1886a3d00bfc306459203c02cdf4f06652bc8fa0e8b9cc779d43fbb789e7dad5dc99f41d4cc588c1b65426a4e77389edd04977578f8f316bcdd9461d666472cdd276aa569721c65232256ba1cf0e7f5ea55321729bb0e0386a77b865532024696eddef485b7d7b28c1573b9347e414d4261995482e3b312de1331f84e7548607a84\",\n        \"signature\": \"bfabdea41810a53f8e527acd66ec106ce2ae1a67ff6a9b522e0f08fbbf1252682cb3a1dcc875601944cb88000f72e13907007903a77cd0db0316d419ac38c204\"\n    },\n    {\n        \"secret_key\": \"04bb887a8a3184ffc7ea09c9bc7c1f7c3411556a7c7c398cb8b2d98ffd9ee866\",\n        \"public_key\": \"6ab1e4ae4aa0d38989aeefa805b578806e2e971ac7ac05409958bfe60071f4a7\",\n        \"message\": \"b7ab0c8163f478c6cabf2bbd7ca37cb02456d76e527eea1b0d26db242e37877632985a3e3ca41b52e21d79017bff81ee551ad72af277b410e42af822c608cd69d00bf440b75b787a8c915d70b6c6376c3f67fa64d612a1b449a7e2134d9c23230157d576e06a66a8422a611e2a0f097286c199ea2a162861864bd035076ab20bbae2b4408a2c6433cb23433a889fe6598f47be53bbd2c80f07a8fccb8aae511161e609da4d180acea544811e9449c5dc2250e3e5a0cd41da33a2da632e6038bd86f16d5b7c1be49fc6db499076ca91f7aa028fe38529700b21d072d2b75dcc8b43781d4bc4d3bb584d9da01c3ecc85b1e93fce045dadceea5106468bdfe5f70d66a4fad60e4fb864ec15ea50f6cb797223c8c756f7a1931a39464ebbb9679f6b01687c174eaa32b968b9cface8c167120aa7bd0242f003a0c377702551b30da2488eb2944052934aef4bfe115f0ab7405a3d5fa9bd796b371742bc114a9bf28c5bd25626295ce261a6a83ef60b77d2d32dd7105fc83664aa89765b3f8191eeeed878f2ebff2fb97663a61877c093933bbd0731e63757571b0e37cac99ed01fd214cbd4feb977e856e0a1a7ef0c408c20e0ddaf1fd8f028cfa08c850fa7090dca8cdde0cb6903da18c6290c66a1c0ae0a084bf250c51a9d035e5b16ec616636afb9b5bce36a775fe2175bcc2ee07220834eeb31caee50e9f8063fb1fc8468ae25e3966789a6d8dffe08a6f7a1e6726f93ae7482de0262bb1f8de0c95a99ecb95684d44b3f1a332a18d2cd3dcf253c33d735522f796b651c9a633a8ebe95d02bc0465825ee541a7d927bb5b90a6db5499f8d993ab404b1650b75e792a7c834eb41f0470138b0f578a04c9ba5ad950ac7c9b5d328f3408b645ad9c6bf196dd961445596bc78f284b8914b2a8cf9b7bd3a716d8f144bb6b15d831023713b5e41fda9b587ff9d6cc43c08d35a707f495283e1ace960487e7f02b7543b68a731a29bf3be14b6e9c37174a9f46f561199dbd27b46bfe62243e0c11c0edf13b64f411c8e8eced35d8428f79f10eacffb7234e546413d1eb0fad88c0e938593b43b5ee0e4285d4dddf5295dbf1a3ddbe9f4134dd76d3de70462c2f04fe0aebdf59a\",\n        \"signed\": \"cd84f55e5ef4531924c5a2181ec87a64541388c1059406bc07d53157a168e203cc8aa0f0069d53ff58a95b8a8caafdad26363c7d0f8045c4359e97b43602c606b7ab0c8163f478c6cabf2bbd7ca37cb02456d76e527eea1b0d26db242e37877632985a3e3ca41b52e21d79017bff81ee551ad72af277b410e42af822c608cd69d00bf440b75b787a8c915d70b6c6376c3f67fa64d612a1b449a7e2134d9c23230157d576e06a66a8422a611e2a0f097286c199ea2a162861864bd035076ab20bbae2b4408a2c6433cb23433a889fe6598f47be53bbd2c80f07a8fccb8aae511161e609da4d180acea544811e9449c5dc2250e3e5a0cd41da33a2da632e6038bd86f16d5b7c1be49fc6db499076ca91f7aa028fe38529700b21d072d2b75dcc8b43781d4bc4d3bb584d9da01c3ecc85b1e93fce045dadceea5106468bdfe5f70d66a4fad60e4fb864ec15ea50f6cb797223c8c756f7a1931a39464ebbb9679f6b01687c174eaa32b968b9cface8c167120aa7bd0242f003a0c377702551b30da2488eb2944052934aef4bfe115f0ab7405a3d5fa9bd796b371742bc114a9bf28c5bd25626295ce261a6a83ef60b77d2d32dd7105fc83664aa89765b3f8191eeeed878f2ebff2fb97663a61877c093933bbd0731e63757571b0e37cac99ed01fd214cbd4feb977e856e0a1a7ef0c408c20e0ddaf1fd8f028cfa08c850fa7090dca8cdde0cb6903da18c6290c66a1c0ae0a084bf250c51a9d035e5b16ec616636afb9b5bce36a775fe2175bcc2ee07220834eeb31caee50e9f8063fb1fc8468ae25e3966789a6d8dffe08a6f7a1e6726f93ae7482de0262bb1f8de0c95a99ecb95684d44b3f1a332a18d2cd3dcf253c33d735522f796b651c9a633a8ebe95d02bc0465825ee541a7d927bb5b90a6db5499f8d993ab404b1650b75e792a7c834eb41f0470138b0f578a04c9ba5ad950ac7c9b5d328f3408b645ad9c6bf196dd961445596bc78f284b8914b2a8cf9b7bd3a716d8f144bb6b15d831023713b5e41fda9b587ff9d6cc43c08d35a707f495283e1ace960487e7f02b7543b68a731a29bf3be14b6e9c37174a9f46f561199dbd27b46bfe62243e0c11c0edf13b64f411c8e8eced35d8428f79f10eacffb7234e546413d1eb0fad88c0e938593b43b5ee0e4285d4dddf5295dbf1a3ddbe9f4134dd76d3de70462c2f04fe0aebdf59a\",\n        \"signature\": \"cd84f55e5ef4531924c5a2181ec87a64541388c1059406bc07d53157a168e203cc8aa0f0069d53ff58a95b8a8caafdad26363c7d0f8045c4359e97b43602c606\"\n    },\n    {\n        \"secret_key\": \"9776a467fa1400735412a79b495f9fca078ce1d87a8530d85c26055d3a394488\",\n        \"public_key\": \"c7dbe0e41c0a31c0942793ffd142d8b95cc82e5caa92a379ba23f644edf224da\",\n        \"message\": \"d78553a1b7055b58b213101b1c84c53e164e39c6e9d36db43f30e19e2a125a9a67709eafef964fa5bab7261ddb3a8a0188457dfbf5159c40e51da8208483245781d7131e23a8bee5e506331816b9deeefe6e556e3f0c95c668d1bedb7da635065458ad20467012f59f171352068020ce3c75878693f6437bc4a09f13b9b0f0cddaf1691b872f82008093ebfbe233d0313e72c8632d7d1793f0b81c7688f54470330f04e64860e6446bfc6d96c87569bf182f0f4385af485d4299cac04e06ba473465566c477f07b9db277ab4a9de2fb2ded0a5011cd06d675c0800b34f55bcf3ec72d21ca150c8bf2361287be81efabb96d8688a1dee3f430f06f637dfd06f151464a05c95f5fe76af2e06d0123f6948a26b3be835045aa268cc1be976697107770208a7568f025c2d53c719e524cc369d9b4a337d8fd1ef345b9bca57fbd7b65a6b997cad3fce4cf06f2ca43ebe2986d09682d47c922b2cb7569d98de97a6164f5470eec71ceda520ccec7732bd01689ef81656e9f6d0c58a895558aee863f5469e7ab97915bfe0b80a064c659b183031f7f1a86fb11a9d528c2815dcaa2f0dec3d21a882e106e20493ee0acb7708eaa2912574ae97bb288b41fc0925053a29b0bfbc0ebae8d63cc0b46e3738046c5a202530bcb15b187a72854aa2d8a7a76c89a89a5db46032074e1bd7de77ef2065a08f389d783cf759ebd5a63a44d919f948f560c3e94c4239e274e051a20485a430cbd529f313d9f7ed679a34187b24f8413087a9021e4731730f5f461fc5aad6654dfa1c0504d26124707e63ee57f931b2785908f86b104b3ecb96000251d06ce1fa45e4cd6df91ac15bbf7ca3c3eb8ee0827612a29ecb7a36d5470c40505182fa9ac913570d0c1050d9a43455cb7bdc17d169805f018956f854f8919bbfb719e1867b36a64aabcdb807f48dccc0672f67887450b3f3e958d78499e0d1ab368aa49442e5e8a332bffd44c169ea67629c85724db6f1586b6c6b5be4864dfd53da7c0f7b8bb3573116be5077d332bd12a6300f3a68a89866b479ec2baa277f9f56f6e1d49d741eb322035ff8cb1de85c8dc87ac8e6e4c5d20bfb6d317ab125930c42609be3ae82242a9ef0568858d8\",\n        \"signed\": \"e1317ba2a123ae3b29e7b60e8e93beedd7a08451a013695b6dcf358e4034026dc74037afbdd217ff4b148b029138f4bcc8f9836abbae7e6276e9e769dbd8f007d78553a1b7055b58b213101b1c84c53e164e39c6e9d36db43f30e19e2a125a9a67709eafef964fa5bab7261ddb3a8a0188457dfbf5159c40e51da8208483245781d7131e23a8bee5e506331816b9deeefe6e556e3f0c95c668d1bedb7da635065458ad20467012f59f171352068020ce3c75878693f6437bc4a09f13b9b0f0cddaf1691b872f82008093ebfbe233d0313e72c8632d7d1793f0b81c7688f54470330f04e64860e6446bfc6d96c87569bf182f0f4385af485d4299cac04e06ba473465566c477f07b9db277ab4a9de2fb2ded0a5011cd06d675c0800b34f55bcf3ec72d21ca150c8bf2361287be81efabb96d8688a1dee3f430f06f637dfd06f151464a05c95f5fe76af2e06d0123f6948a26b3be835045aa268cc1be976697107770208a7568f025c2d53c719e524cc369d9b4a337d8fd1ef345b9bca57fbd7b65a6b997cad3fce4cf06f2ca43ebe2986d09682d47c922b2cb7569d98de97a6164f5470eec71ceda520ccec7732bd01689ef81656e9f6d0c58a895558aee863f5469e7ab97915bfe0b80a064c659b183031f7f1a86fb11a9d528c2815dcaa2f0dec3d21a882e106e20493ee0acb7708eaa2912574ae97bb288b41fc0925053a29b0bfbc0ebae8d63cc0b46e3738046c5a202530bcb15b187a72854aa2d8a7a76c89a89a5db46032074e1bd7de77ef2065a08f389d783cf759ebd5a63a44d919f948f560c3e94c4239e274e051a20485a430cbd529f313d9f7ed679a34187b24f8413087a9021e4731730f5f461fc5aad6654dfa1c0504d26124707e63ee57f931b2785908f86b104b3ecb96000251d06ce1fa45e4cd6df91ac15bbf7ca3c3eb8ee0827612a29ecb7a36d5470c40505182fa9ac913570d0c1050d9a43455cb7bdc17d169805f018956f854f8919bbfb719e1867b36a64aabcdb807f48dccc0672f67887450b3f3e958d78499e0d1ab368aa49442e5e8a332bffd44c169ea67629c85724db6f1586b6c6b5be4864dfd53da7c0f7b8bb3573116be5077d332bd12a6300f3a68a89866b479ec2baa277f9f56f6e1d49d741eb322035ff8cb1de85c8dc87ac8e6e4c5d20bfb6d317ab125930c42609be3ae82242a9ef0568858d8\",\n        \"signature\": \"e1317ba2a123ae3b29e7b60e8e93beedd7a08451a013695b6dcf358e4034026dc74037afbdd217ff4b148b029138f4bcc8f9836abbae7e6276e9e769dbd8f007\"\n    },\n    {\n        \"secret_key\": \"09d8122697126dfc7e11685a04123fdfb47ccddb4499d8a3aef418cb65aed7a7\",\n        \"public_key\": \"f8ddb1c00f6e0f4beaa6fc38e5d0a5775ee28c80dbde3f0c7930a33aad7150f3\",\n        \"message\": \"a0d8d8798eba22f56760c30643e9fc6795547ea5f2f2bbd11c0392b2ebf711aca22f0824199fc3188a45bdffde70ece9ab15a5ea89622a5871e0ef7685d10f1274cc195b4fda81f879d1e9bf42f873b20a859c233f9e49adbf057731e11335e9b6d8ed0e069e134ec461ca8890d7b0473c405e8a9d95d15711b12476103762c626d9f2aa5dd519bd825b60b3234ebf651e0d1933371c52bfd8ce33fc36bba328f7f3f2ccc01000a89904af37e4e1e9e15fffab5c2b0c47f37cdcb068db33ac36a5f0d6de1203fbf8949324bd3efda0f9889db00da2317b49fd186999df7fcdc3cb4e1d18faa254561c251178b8d33fdc9dccd8d2d721b93a536ccd3c0e9c856337f195eee7da9a7f6b0a42b7c541c6a68c595bf34704d9fe3a56d2ec8481d577c96ecc08b8e40acdbf050e20c683f39c414e8cbfcf4a0152314c05987a83bde3025b735cca3023abc5feb7e00d0236b4f24b15e679db052c8d2fddb3bef8663a6df819a9815527a1a2f60a0fa4e5078ddc6d435fe89287b30ffdeb5d9ae05d1a8690fbc7590aad57d43d22c12ace2c8196888e354e9f782f5dbb44149e83fb8bbc9da6d89ce206c1e2b6b2b28f933f3e5ff1175a31a8ff5d31e65c8b00c5ba462224a1e09d4f09cb40fc87c36e7d285c774a96976203651828e783628847ac512e5d1c35b35b030171f92396f5ffaff585cead04b6ae210d80707cc6832d98a20d3a947648da2604937fefd25a9fe0fc5cac083ddd7d2075307f4f382664f687dce8c655ded9c12d48ff7601df2a48d37fe214970844c075f2eab002059fc2271e617c9657a01bec1dd38f6c28ba8a617bd30851e3f9dbac904418df1d0215ad45dfc9f02b5c5e9f9bbc6de8b07af0bd1f7fa8922544f12d2a3e1aadff7e9c6b93320c3a61ef33da07eb87b1617f9e77d7702e558bc7d8122e0dfe2ae83e836c5b1a62aa585c0dffe716f7463c0b33da5b1eda556a1ef1e45042c79bdd3ec3cb8863a7bc1b0f7e1c05bd9920f05b4eda86517705ed07f6dca7bb00ae0456e6787d9fae8ede4ecd0bc572eb5cc6d19e891f1bcb229e9409e06574c7df058173cb58c3fdf20f3ff17c3705af62d9b7225c5743f600607f77cbe7d6e7618abc79\",\n        \"signed\": \"18cfaf6dc8e4e8582bcefe0cdc6fcefe6a4a87ea629585f37d2fba446b3aebd452426382da0d491c39cb7d54d273005dc132121568d2ab674520adda7523840da0d8d8798eba22f56760c30643e9fc6795547ea5f2f2bbd11c0392b2ebf711aca22f0824199fc3188a45bdffde70ece9ab15a5ea89622a5871e0ef7685d10f1274cc195b4fda81f879d1e9bf42f873b20a859c233f9e49adbf057731e11335e9b6d8ed0e069e134ec461ca8890d7b0473c405e8a9d95d15711b12476103762c626d9f2aa5dd519bd825b60b3234ebf651e0d1933371c52bfd8ce33fc36bba328f7f3f2ccc01000a89904af37e4e1e9e15fffab5c2b0c47f37cdcb068db33ac36a5f0d6de1203fbf8949324bd3efda0f9889db00da2317b49fd186999df7fcdc3cb4e1d18faa254561c251178b8d33fdc9dccd8d2d721b93a536ccd3c0e9c856337f195eee7da9a7f6b0a42b7c541c6a68c595bf34704d9fe3a56d2ec8481d577c96ecc08b8e40acdbf050e20c683f39c414e8cbfcf4a0152314c05987a83bde3025b735cca3023abc5feb7e00d0236b4f24b15e679db052c8d2fddb3bef8663a6df819a9815527a1a2f60a0fa4e5078ddc6d435fe89287b30ffdeb5d9ae05d1a8690fbc7590aad57d43d22c12ace2c8196888e354e9f782f5dbb44149e83fb8bbc9da6d89ce206c1e2b6b2b28f933f3e5ff1175a31a8ff5d31e65c8b00c5ba462224a1e09d4f09cb40fc87c36e7d285c774a96976203651828e783628847ac512e5d1c35b35b030171f92396f5ffaff585cead04b6ae210d80707cc6832d98a20d3a947648da2604937fefd25a9fe0fc5cac083ddd7d2075307f4f382664f687dce8c655ded9c12d48ff7601df2a48d37fe214970844c075f2eab002059fc2271e617c9657a01bec1dd38f6c28ba8a617bd30851e3f9dbac904418df1d0215ad45dfc9f02b5c5e9f9bbc6de8b07af0bd1f7fa8922544f12d2a3e1aadff7e9c6b93320c3a61ef33da07eb87b1617f9e77d7702e558bc7d8122e0dfe2ae83e836c5b1a62aa585c0dffe716f7463c0b33da5b1eda556a1ef1e45042c79bdd3ec3cb8863a7bc1b0f7e1c05bd9920f05b4eda86517705ed07f6dca7bb00ae0456e6787d9fae8ede4ecd0bc572eb5cc6d19e891f1bcb229e9409e06574c7df058173cb58c3fdf20f3ff17c3705af62d9b7225c5743f600607f77cbe7d6e7618abc79\",\n        \"signature\": \"18cfaf6dc8e4e8582bcefe0cdc6fcefe6a4a87ea629585f37d2fba446b3aebd452426382da0d491c39cb7d54d273005dc132121568d2ab674520adda7523840d\"\n    },\n    {\n        \"secret_key\": \"10201bf0084367590de674cc0ed2648ec25d3ba8db40d00ede153398508bc126\",\n        \"public_key\": \"badbd05e5f79e31169f740ba46a58910a1b77705af45717b2af80856457c58c9\",\n        \"message\": \"7bb1470617d11e45eb602a829ad773ee2bb7e6b88da4c04a7216a450f84993a498cbd3b9254028f2f99fc21a23288bdc1e151a72a9130c3dedda1bbbccd4e6c0f48ae9f35318cbefc959f405045e6e0b5fb2e738f2b765be11b1b6a0f1e8319549d95fa8d1df8167cd4a7717ae1636a9df54d96eaf2d63236900fd11338252a5008d5d480e2b1e9861d1f70688c47eae4689da01a47da3dfb6d2bab3cdf505ee5d801a152c267093d17e9bf7137a6ee7b834d0085500e401c17f3286c1575d1c0100fa9807630c4a990654c1e71a8b715627bb13d442c84a449844c404b872bfbac718a48d0ea0945c77166a53139b0ff0098134764f9ecdb88eabe07ccb2cced4955e08249b2f5770ad41fccd7b5bb372e6c33767e07f5be7d10712de81841b134e193df0776a0fc156ff5d0e96f40a704753e1145e9fa083c4ddeef4416234f6e1a2382c8e5b3ad405458e89d2f493a4d7c29a23de2107485b7f56350124e7e0d695c522b6de7a9247a2924ce6f2863236c10cc21264ad54590d314763ea1a19afacd90eba955870407e8c6365a143a5c1b9a8be5e4a4dcadb72e0d47649bd53abd46b5c6960eae2cab773753cc0e04e99414bc2cb30f48bb54139d066e43e2f0e1a4ae963858bef967df8c84140d2d09202b406d5d85cb7a96cc57f233eb2187ffd02f94e92297b5e69d969d3a5936efe4929144f258bfb39dd0ce26359c4549fc218a0aa54f31bd551b8781acbbf61cb3f732cdaf622c6a69188cf557a3a92ed153e69125a4090ac451536a0e9a63a41782910ffccb4e850021123ffd1f3bf39c73460a65ccfe4dba9bdefb5d5f4da6c469aa1322fa27043238363ee72918688d7ca1c4c2952e430d563256bb86d350a35ee82e01504747f31d02e03aedda546d0f1b2f451b870821602d00e819036ade5a7c7fcd21a6de6af35b1f9632a70af65df6445f6fadfbc0f416755c8246640e56b856b66ddd92a60c03538221dc8fb142ce2dbacdb7425f33cb85d850cc02c315cfc111f6f651dde1bdb67fb208e1f6bde784ddcf7bd18c8051a2e0bbf1018b8f39536c589de65eadc6cf379b77cad13f9089cb323fb2e943d06cdd10705c121134c6548dc53415f8c370ec690\",\n        \"signed\": \"f1d996588b298f271e970cebd2a1b339979cd29dddee3645d07fab8ab465dde3e98667ec01ad7f1c0a6592e0697e665c72fd3814dbe189ed5f4e76c794e538097bb1470617d11e45eb602a829ad773ee2bb7e6b88da4c04a7216a450f84993a498cbd3b9254028f2f99fc21a23288bdc1e151a72a9130c3dedda1bbbccd4e6c0f48ae9f35318cbefc959f405045e6e0b5fb2e738f2b765be11b1b6a0f1e8319549d95fa8d1df8167cd4a7717ae1636a9df54d96eaf2d63236900fd11338252a5008d5d480e2b1e9861d1f70688c47eae4689da01a47da3dfb6d2bab3cdf505ee5d801a152c267093d17e9bf7137a6ee7b834d0085500e401c17f3286c1575d1c0100fa9807630c4a990654c1e71a8b715627bb13d442c84a449844c404b872bfbac718a48d0ea0945c77166a53139b0ff0098134764f9ecdb88eabe07ccb2cced4955e08249b2f5770ad41fccd7b5bb372e6c33767e07f5be7d10712de81841b134e193df0776a0fc156ff5d0e96f40a704753e1145e9fa083c4ddeef4416234f6e1a2382c8e5b3ad405458e89d2f493a4d7c29a23de2107485b7f56350124e7e0d695c522b6de7a9247a2924ce6f2863236c10cc21264ad54590d314763ea1a19afacd90eba955870407e8c6365a143a5c1b9a8be5e4a4dcadb72e0d47649bd53abd46b5c6960eae2cab773753cc0e04e99414bc2cb30f48bb54139d066e43e2f0e1a4ae963858bef967df8c84140d2d09202b406d5d85cb7a96cc57f233eb2187ffd02f94e92297b5e69d969d3a5936efe4929144f258bfb39dd0ce26359c4549fc218a0aa54f31bd551b8781acbbf61cb3f732cdaf622c6a69188cf557a3a92ed153e69125a4090ac451536a0e9a63a41782910ffccb4e850021123ffd1f3bf39c73460a65ccfe4dba9bdefb5d5f4da6c469aa1322fa27043238363ee72918688d7ca1c4c2952e430d563256bb86d350a35ee82e01504747f31d02e03aedda546d0f1b2f451b870821602d00e819036ade5a7c7fcd21a6de6af35b1f9632a70af65df6445f6fadfbc0f416755c8246640e56b856b66ddd92a60c03538221dc8fb142ce2dbacdb7425f33cb85d850cc02c315cfc111f6f651dde1bdb67fb208e1f6bde784ddcf7bd18c8051a2e0bbf1018b8f39536c589de65eadc6cf379b77cad13f9089cb323fb2e943d06cdd10705c121134c6548dc53415f8c370ec690\",\n        \"signature\": \"f1d996588b298f271e970cebd2a1b339979cd29dddee3645d07fab8ab465dde3e98667ec01ad7f1c0a6592e0697e665c72fd3814dbe189ed5f4e76c794e53809\"\n    },\n    {\n        \"secret_key\": \"c4aa425246b5173f5ef898152eca3d092bb4c2dd02853fcfc7178399f4e2f758\",\n        \"public_key\": \"29b77a3075f419243c0c1bc39659d73117ac00e55e8de38fe9829a879cc5b8a0\",\n        \"message\": \"7df978a1f4976838ffed7449a4dc138b604f4b2a4ae689ce75018ebccdab2eaa0b60768f7208257f2b28e7aa09bf6c05888da46fd396d1c803011750e30eb484870c8806977696f12ebb9feeb4caf92a02dbaa22bbff63f842c3ba147bca7c00314278acd0db173569f4e36527958ef6f1002bd3cd01f407a86531edcbd9f31b3a4ab880a4f5b52b42d0d4a1ba66a2098651ae3e6c9151f40273285f7f6a4e81606bf980f689504b42080fdb97c72846fba9047c7e660ba5c6bf126a9a599e2571fa13505af7581bfebc16513f5c94dc71937e6e61b3ea10939b02ea10859f32d7912b9e3806abef6185fcffa68821478005cbfc1d637dd020425620a318074898bdc30931c59ac0c66c4d1238b097cd5b170f084435d4bae48a03d92fd48fc2caa4ffc505f1bca516fbd6e4f888cced982ae0ddb88fc28aa697b7071d015b0acb2809b01d1d9c7e7b53eee6824cc37cce5b6993d88d83eafc2e928a6f147db6eb80b1a69f01605b046bd2fd1d92c5459d6d3398a9caa299ddd0c3ba2e08941307b120cc13992f7003aced14a4a4d923bbb12fc393ffcf920b9f6d4775e94d4a512267fd26a6997c6062b4c9900f9862b9ea0c8d7df19f05c2b604af5b9864fb2754a8073bbbfb18233e6e150f72a525e3a5760fcda7d32a60034f956e3cbd3436c200830b3e7a14571220bcb627d5a4be72c20b23351b2d920602a51c3eb32c1237039dfbff43c987fd8563777f0e5a39f8146c164bdffce44f3b13ee74d64bfdcf9803f03dd0172ac4fa4bf6c7839cb11f3d34baef0e32b54942fc4fa38f473e2966f4911c0e80d76937b25b7632275ba88309635a60df135489208d3e734b672eda7d2ba21579aba8d8860ea764fd67eaf9c38ea7637d1bad57b2f3d782b91e1d5d92ac300bdba7ab9113ce913d0c793c12a9a726e3fcab05cb479977871640630d459e69e81ca5cf56ddb2a0611d61d481c1b8cef3804bd4e5754a61eb49b17ef2b03c83057b5d20d882058c00f54b6cca86be95350dd7bcb25e4c1c4658f45229c8bb9f5cdfcc44795c978e3388d325760106e52be9834bd81ffc5c62486b6f33c27459df178eb946e7a82db9ce0d295b925bb6126dd55c31f49a68dcefc7\",\n        \"signed\": \"5d8545a4be3fd6da2578c2eccb648d83fcfe587133fa7ae4a1cfca9ae6daa49259c952044a85a20b6f5324f827dba2d1a8388c40a928b950913c634fb30927077df978a1f4976838ffed7449a4dc138b604f4b2a4ae689ce75018ebccdab2eaa0b60768f7208257f2b28e7aa09bf6c05888da46fd396d1c803011750e30eb484870c8806977696f12ebb9feeb4caf92a02dbaa22bbff63f842c3ba147bca7c00314278acd0db173569f4e36527958ef6f1002bd3cd01f407a86531edcbd9f31b3a4ab880a4f5b52b42d0d4a1ba66a2098651ae3e6c9151f40273285f7f6a4e81606bf980f689504b42080fdb97c72846fba9047c7e660ba5c6bf126a9a599e2571fa13505af7581bfebc16513f5c94dc71937e6e61b3ea10939b02ea10859f32d7912b9e3806abef6185fcffa68821478005cbfc1d637dd020425620a318074898bdc30931c59ac0c66c4d1238b097cd5b170f084435d4bae48a03d92fd48fc2caa4ffc505f1bca516fbd6e4f888cced982ae0ddb88fc28aa697b7071d015b0acb2809b01d1d9c7e7b53eee6824cc37cce5b6993d88d83eafc2e928a6f147db6eb80b1a69f01605b046bd2fd1d92c5459d6d3398a9caa299ddd0c3ba2e08941307b120cc13992f7003aced14a4a4d923bbb12fc393ffcf920b9f6d4775e94d4a512267fd26a6997c6062b4c9900f9862b9ea0c8d7df19f05c2b604af5b9864fb2754a8073bbbfb18233e6e150f72a525e3a5760fcda7d32a60034f956e3cbd3436c200830b3e7a14571220bcb627d5a4be72c20b23351b2d920602a51c3eb32c1237039dfbff43c987fd8563777f0e5a39f8146c164bdffce44f3b13ee74d64bfdcf9803f03dd0172ac4fa4bf6c7839cb11f3d34baef0e32b54942fc4fa38f473e2966f4911c0e80d76937b25b7632275ba88309635a60df135489208d3e734b672eda7d2ba21579aba8d8860ea764fd67eaf9c38ea7637d1bad57b2f3d782b91e1d5d92ac300bdba7ab9113ce913d0c793c12a9a726e3fcab05cb479977871640630d459e69e81ca5cf56ddb2a0611d61d481c1b8cef3804bd4e5754a61eb49b17ef2b03c83057b5d20d882058c00f54b6cca86be95350dd7bcb25e4c1c4658f45229c8bb9f5cdfcc44795c978e3388d325760106e52be9834bd81ffc5c62486b6f33c27459df178eb946e7a82db9ce0d295b925bb6126dd55c31f49a68dcefc7\",\n        \"signature\": \"5d8545a4be3fd6da2578c2eccb648d83fcfe587133fa7ae4a1cfca9ae6daa49259c952044a85a20b6f5324f827dba2d1a8388c40a928b950913c634fb3092707\"\n    },\n    {\n        \"secret_key\": \"f13cafde6f39b963dca96626862f4fbc5c2e00ddf08beceac7a6e2fca9e1ccf7\",\n        \"public_key\": \"c1b01a91e8ee0b9f19a72e5e7e0aefcfdc44a157474e99feebd0ff552d73b2ac\",\n        \"message\": \"2bee73b74f1b7622eb096a28d83a819bcec22d9999a32062103d604ae6d78edf8f893895d2220ab75690410c58aab590a98ddff23a94d2350f889e53464200a527d54d62571107b27e574f542ebac249b8e2e3ce08d1bd27bd8d29f2e61243deef0e6938e52ee2992ff2187d7a7f5282edd98fc4985b619acb80aa9d03d6cb84b821106f40d6e5f4c387ab0af6f206615d0a175f7e60ee2755aea34675fdd823eb24109a9bd818ea2d9d9bd199cf8dfe79624b0372ae85e98c60200234bd413f4a62ce68a47b6c9b12857c0d399a448e5a5280e9f22f9b12ea2cd3c68713e77d0a11f3628d8ec5e060639031d3b640021c9c38809dc5f42d2e1c2e2346c86e24eedc5984a115a42de8de7e35c9917539e89885ca916e072afd5d46846b2a935961c2fe28e9eb3c8f896b86fc120cbd3af2aa139c499d29cfc3699db79c14484e9ec257a5f64344b7ad1e3dfb34eee7654c6bf12fd38fbba80fe1762aab57112b3a94e2bee79041d1e88440f85fb72dde68d49e84bced998a2f6335446e4a835e70c5f827fb3ad7823d5fbe3be5f6ec7e434ee524ccd9ff5b7e72a32d091a7e17c8b1ae41a1af31793cce91d84c3622678969c8f517dc26e3cd61d2446912283f9353bb5ad03c111c6233de314c61b831cbf38b04fe58cf44f1d2d0b45f25a6b4e0256859cd5d830fac5ec3c8d76398559e9b26010f5e1da5f25d2200935453ffac5aea51f7e81e72ec8e5f04d2f885c7b45c63f64456cfe231b8cb24aa1620a902639ca78dd391aa4a3d03e11975c8907f964fd55df9bbb140e38d6db93256b4b39c2b7bcbe35b11826bbf8c08f1dcb48edc4bfb70462a35ea8cd8cba79fab8b4c44e73be7ecfa112166f6dcab70d8bb55d8b8428c2da71aaca2fc3d90f3cc5ed01551358d60789b9d571efe10892027fa37404aaf59ec1c2d7111ecc3592467ed1d9b8aba8e229e32d2a00c19db7187fbcb122061961c1fdaca307e9c9c9de972ad51402fa67dc1c2a403b3c5e8b1e246862d6ad6a498db6d761fb566f6065942b60ad4b4309d182bc5154cfc36863185a87e23abaa1d541ab763a4a1066c0a7a8c3d821ae32fd31c8892401046d0a20e91a64779f4bda81120af3fb3486d3fc0a7\",\n        \"signed\": \"6ca9f80a62501faf319fb84af471f676ae3fff85565c97981f1457cbb8c49f97b266316a992db0d42bc502f095a5f2d9a4e1cfac0cc935d3882c8a3a0ea6e10e2bee73b74f1b7622eb096a28d83a819bcec22d9999a32062103d604ae6d78edf8f893895d2220ab75690410c58aab590a98ddff23a94d2350f889e53464200a527d54d62571107b27e574f542ebac249b8e2e3ce08d1bd27bd8d29f2e61243deef0e6938e52ee2992ff2187d7a7f5282edd98fc4985b619acb80aa9d03d6cb84b821106f40d6e5f4c387ab0af6f206615d0a175f7e60ee2755aea34675fdd823eb24109a9bd818ea2d9d9bd199cf8dfe79624b0372ae85e98c60200234bd413f4a62ce68a47b6c9b12857c0d399a448e5a5280e9f22f9b12ea2cd3c68713e77d0a11f3628d8ec5e060639031d3b640021c9c38809dc5f42d2e1c2e2346c86e24eedc5984a115a42de8de7e35c9917539e89885ca916e072afd5d46846b2a935961c2fe28e9eb3c8f896b86fc120cbd3af2aa139c499d29cfc3699db79c14484e9ec257a5f64344b7ad1e3dfb34eee7654c6bf12fd38fbba80fe1762aab57112b3a94e2bee79041d1e88440f85fb72dde68d49e84bced998a2f6335446e4a835e70c5f827fb3ad7823d5fbe3be5f6ec7e434ee524ccd9ff5b7e72a32d091a7e17c8b1ae41a1af31793cce91d84c3622678969c8f517dc26e3cd61d2446912283f9353bb5ad03c111c6233de314c61b831cbf38b04fe58cf44f1d2d0b45f25a6b4e0256859cd5d830fac5ec3c8d76398559e9b26010f5e1da5f25d2200935453ffac5aea51f7e81e72ec8e5f04d2f885c7b45c63f64456cfe231b8cb24aa1620a902639ca78dd391aa4a3d03e11975c8907f964fd55df9bbb140e38d6db93256b4b39c2b7bcbe35b11826bbf8c08f1dcb48edc4bfb70462a35ea8cd8cba79fab8b4c44e73be7ecfa112166f6dcab70d8bb55d8b8428c2da71aaca2fc3d90f3cc5ed01551358d60789b9d571efe10892027fa37404aaf59ec1c2d7111ecc3592467ed1d9b8aba8e229e32d2a00c19db7187fbcb122061961c1fdaca307e9c9c9de972ad51402fa67dc1c2a403b3c5e8b1e246862d6ad6a498db6d761fb566f6065942b60ad4b4309d182bc5154cfc36863185a87e23abaa1d541ab763a4a1066c0a7a8c3d821ae32fd31c8892401046d0a20e91a64779f4bda81120af3fb3486d3fc0a7\",\n        \"signature\": \"6ca9f80a62501faf319fb84af471f676ae3fff85565c97981f1457cbb8c49f97b266316a992db0d42bc502f095a5f2d9a4e1cfac0cc935d3882c8a3a0ea6e10e\"\n    },\n    {\n        \"secret_key\": \"c846344261a34865393834bfaa3a15a3f53ac9e13833b0b287122781b79de392\",\n        \"public_key\": \"ebade0226195ae254b6115e21696a9c65a19d5e040443131c22b89f02f69ab78\",\n        \"message\": \"5abd13e95b6ee1d5514768282200a14f7d1a571f3468e22efec993463066a37aec8373e5fb499564191f3294a9b30afb5f1a34d4d88abc3e9bc303c1aba05bd8faca90ee35d97ac3dd9106f6fa3ca81a3810eccefa6a209ea3f3fc3049dcb1b003c728f7f6374ca98c582de6db1af760f0a02133ca4a010324304d26a0e50af0d13c134da34a03a41e83ec8f10ea5b859bec1f51b01cabb2d16c1fc52b058f8e5defaede128171c2e026902316f871b35e3292656f0e5b39bbbc81d0c0830e6ac01fac9b4539f47f9acfbd58b7ab9f5a125600f251a271d7bf167f2954ca8e1e0c96e16b06e8307df88bb8e9d57d5ba044f27f3eaff81d9f150554aa7122fd10d11f35d2be2b1624e3e1a1d77fea4c5c7f8b983e945ba8c08dc1545b3e6b2973ad041c44d0617eccc871a3821a9ffea9db7c2b0d055da55de0b35063e4225aee6b225ab2a7906a8ee329d1b3972e0d1f70817c50ccfe9403d12ad62c94923b9aa2d7f85a8dda47be4dcec0dc2b0b58f7ac190ae0579b9b13bbb8b16a31b0ab4d6f2791253ab4751b536b88d3b4937cc3a110aa82a6ffed6853524b66b3effcd2f63c6f9645cea13aa23cd1c99d9ffda4cd3a9c5df45ec74726c3471128b7089fbd82694d2d3f08dc9306c0fc9ce7c801138eb1ecb756e571e9059b75ed03f92a31502fbeb5fec51de9359010c4397d28b65e356e38001d0d51ac9600728c78b5766e0f217938b410e785b4c01e86a3452bcb3884aca47540859cc49b000f0b61fdbe72752574b27a22d4c40413a43b310924b1bb140fc9fdaae266d65930e3f234fe841d82b26176ff86c5d2bd8d965c52d728064ebdf68dc8e4834941801cca0b2f256d4f6c3dd19d35d5362bbf9b8a3a1c863e092689dd2852add488bf42685b11e1e1ad5745d075628d731f91cfd749159e2e1c837f4ef83d80ea1dd9bded5f88018ce1d4b3371f954353f3d894370062c0965d67986dbc481715f42dd2c91607ab8b5f0d89f66e68d73d50d640524d72e69134b887298e5cd8c4b905ba5efa0e9d685214b842f50a2a3983a1af585af2ca43dbcf02c40897ae2e1ab51dbce570345e8e135fb7b4eb0a1d6a0bb5a8a1807e425b2d628360768058e61ad1cfaa2099\",\n        \"signed\": \"d5e41b47ad0f3400709770ed43919bafdf24381b661544e51d8b5cee9e97b3676a4c0ffaebb2cbd2db798532b65cf654a5b6c166ef886cb0fbbf4a4f844c440b5abd13e95b6ee1d5514768282200a14f7d1a571f3468e22efec993463066a37aec8373e5fb499564191f3294a9b30afb5f1a34d4d88abc3e9bc303c1aba05bd8faca90ee35d97ac3dd9106f6fa3ca81a3810eccefa6a209ea3f3fc3049dcb1b003c728f7f6374ca98c582de6db1af760f0a02133ca4a010324304d26a0e50af0d13c134da34a03a41e83ec8f10ea5b859bec1f51b01cabb2d16c1fc52b058f8e5defaede128171c2e026902316f871b35e3292656f0e5b39bbbc81d0c0830e6ac01fac9b4539f47f9acfbd58b7ab9f5a125600f251a271d7bf167f2954ca8e1e0c96e16b06e8307df88bb8e9d57d5ba044f27f3eaff81d9f150554aa7122fd10d11f35d2be2b1624e3e1a1d77fea4c5c7f8b983e945ba8c08dc1545b3e6b2973ad041c44d0617eccc871a3821a9ffea9db7c2b0d055da55de0b35063e4225aee6b225ab2a7906a8ee329d1b3972e0d1f70817c50ccfe9403d12ad62c94923b9aa2d7f85a8dda47be4dcec0dc2b0b58f7ac190ae0579b9b13bbb8b16a31b0ab4d6f2791253ab4751b536b88d3b4937cc3a110aa82a6ffed6853524b66b3effcd2f63c6f9645cea13aa23cd1c99d9ffda4cd3a9c5df45ec74726c3471128b7089fbd82694d2d3f08dc9306c0fc9ce7c801138eb1ecb756e571e9059b75ed03f92a31502fbeb5fec51de9359010c4397d28b65e356e38001d0d51ac9600728c78b5766e0f217938b410e785b4c01e86a3452bcb3884aca47540859cc49b000f0b61fdbe72752574b27a22d4c40413a43b310924b1bb140fc9fdaae266d65930e3f234fe841d82b26176ff86c5d2bd8d965c52d728064ebdf68dc8e4834941801cca0b2f256d4f6c3dd19d35d5362bbf9b8a3a1c863e092689dd2852add488bf42685b11e1e1ad5745d075628d731f91cfd749159e2e1c837f4ef83d80ea1dd9bded5f88018ce1d4b3371f954353f3d894370062c0965d67986dbc481715f42dd2c91607ab8b5f0d89f66e68d73d50d640524d72e69134b887298e5cd8c4b905ba5efa0e9d685214b842f50a2a3983a1af585af2ca43dbcf02c40897ae2e1ab51dbce570345e8e135fb7b4eb0a1d6a0bb5a8a1807e425b2d628360768058e61ad1cfaa2099\",\n        \"signature\": \"d5e41b47ad0f3400709770ed43919bafdf24381b661544e51d8b5cee9e97b3676a4c0ffaebb2cbd2db798532b65cf654a5b6c166ef886cb0fbbf4a4f844c440b\"\n    },\n    {\n        \"secret_key\": \"faaf55d3c29714b65c2281e2c22d6134971a2e74008fb94089a773eeeb4483a6\",\n        \"public_key\": \"39862eac6dd52e381bb34dc196ba8a374dcb7df6cb140fd0cfa6cfa39b8c753f\",\n        \"message\": \"94e661c25240a89e823d7f5dc0e692eddd1370c35ac44d5a8c8798d0c9aafdf0bbfb549260568dba1c69086bee636be8edccd3cbb27016244d54d7ed2feb7fa64614d45449d7e058e71b306c22e6911c2ac74207bae5a84d0fc247be49d356e5d4353ba5586b6e4b2b97ce9e2377b6eed92c849e676944ae90dc4208e300e19cc91dc26bbdd5a30cfa9281a15efd873066f85af3a26f310623e009804853cc6855903ea64a909897e315e73d312948980ef6289db21a5ebbec8c8efe20d1d53dfaad6d9f4296532e887c37350105a633abc773188751b28c3a08f1b5ee0472de4627e6b61b68278dd51ced6a61ecf38886e45339dc6c60c31e850ef8296ae80f9d31701776eb9af21693f4c52ec062625738d4e3afbf71d1c81fc4846360363ea541a976623a5e4e6b6a67237e9237173f1a1d543302858885714c2a591d0a786282a0285a3711f7bc2b63ca7987e9ae7d02035555cf3b6ad6f71ca98aa928883bf81dd6f86493eaab5637b4dd569d1ee8de6a44bcedb62b9706b1db89e3f05df16310017d89ef3e4bc099b721a5c8d38043d6e4a22cf04009c0fcee6be69937829954941b8b4a1ebf4daea0d774d0782be176c8e591907756c2cf75dea6f7877dd6875b8fe1012f3050cfb1289cf088667e1522eeedc927ac86bfe2c407432b4a813a6a7a5504e999206db1827e25fafd70ced36db3b281b6f7b14ed5baa0572315a939c5bf4abb133d2e7b16d52de20817af055df5f141207734610a0c6eebedafffd9cc9f069b67f9a1c0454be41d54c138be542e5e38cfe2f293f7d2d3df66977acb366a42c19b3185acfa1b363c6131a4a8111c3b1f4fd7ac406d0e69103ba15b8c4bf29bc2ed9c45cfd1d279d8d931444b2b1849252b8a70eed80fd260edf5a3c01b9690160d2311851d21c9302d985986eaeeb3ae2c07c7c7672094f91db0bd50be377e4d1eb07ee76af49dc136a145a11b172f0811fe73d6259be370c4dfcab6f19e4a64b151d0a6db8050c3de2cc325f5c5f6594cf6248eb081209539e08ca3422984e7bf803de3a419b14423f1e5a54224042ce4f05488a6044f4042bd649b1a08ce10c2006ea76efab4641fef2897efd724e6054a3bd1a69e39a4a5e2d502\",\n        \"signed\": \"5b0083f7a82061c65cf6c75640c81c28e8d6d2e87f6d5795c9aa3bb3e390e91990e82db6f07e614f507a560abaa1eca656c678ddcae8198251e6af0b76b88d0d94e661c25240a89e823d7f5dc0e692eddd1370c35ac44d5a8c8798d0c9aafdf0bbfb549260568dba1c69086bee636be8edccd3cbb27016244d54d7ed2feb7fa64614d45449d7e058e71b306c22e6911c2ac74207bae5a84d0fc247be49d356e5d4353ba5586b6e4b2b97ce9e2377b6eed92c849e676944ae90dc4208e300e19cc91dc26bbdd5a30cfa9281a15efd873066f85af3a26f310623e009804853cc6855903ea64a909897e315e73d312948980ef6289db21a5ebbec8c8efe20d1d53dfaad6d9f4296532e887c37350105a633abc773188751b28c3a08f1b5ee0472de4627e6b61b68278dd51ced6a61ecf38886e45339dc6c60c31e850ef8296ae80f9d31701776eb9af21693f4c52ec062625738d4e3afbf71d1c81fc4846360363ea541a976623a5e4e6b6a67237e9237173f1a1d543302858885714c2a591d0a786282a0285a3711f7bc2b63ca7987e9ae7d02035555cf3b6ad6f71ca98aa928883bf81dd6f86493eaab5637b4dd569d1ee8de6a44bcedb62b9706b1db89e3f05df16310017d89ef3e4bc099b721a5c8d38043d6e4a22cf04009c0fcee6be69937829954941b8b4a1ebf4daea0d774d0782be176c8e591907756c2cf75dea6f7877dd6875b8fe1012f3050cfb1289cf088667e1522eeedc927ac86bfe2c407432b4a813a6a7a5504e999206db1827e25fafd70ced36db3b281b6f7b14ed5baa0572315a939c5bf4abb133d2e7b16d52de20817af055df5f141207734610a0c6eebedafffd9cc9f069b67f9a1c0454be41d54c138be542e5e38cfe2f293f7d2d3df66977acb366a42c19b3185acfa1b363c6131a4a8111c3b1f4fd7ac406d0e69103ba15b8c4bf29bc2ed9c45cfd1d279d8d931444b2b1849252b8a70eed80fd260edf5a3c01b9690160d2311851d21c9302d985986eaeeb3ae2c07c7c7672094f91db0bd50be377e4d1eb07ee76af49dc136a145a11b172f0811fe73d6259be370c4dfcab6f19e4a64b151d0a6db8050c3de2cc325f5c5f6594cf6248eb081209539e08ca3422984e7bf803de3a419b14423f1e5a54224042ce4f05488a6044f4042bd649b1a08ce10c2006ea76efab4641fef2897efd724e6054a3bd1a69e39a4a5e2d502\",\n        \"signature\": \"5b0083f7a82061c65cf6c75640c81c28e8d6d2e87f6d5795c9aa3bb3e390e91990e82db6f07e614f507a560abaa1eca656c678ddcae8198251e6af0b76b88d0d\"\n    },\n    {\n        \"secret_key\": \"6d7855e30f7a13e237b067144346434bb4b05178c7d88d492e79027c4b0f3cdd\",\n        \"public_key\": \"7273293828efa349822392dbbab07879577e1a77a6fd6afe33753a9eec88c4af\",\n        \"message\": \"f8b936e793b017580cc0e9cbda2acb6474507f4bca3afc8783ec46eeb82ccd4dd2525676aa6ab5c0dcf7d75f7e0311e6fe6bf27263f8578feb55c5612d1f28e888b76656c41ccd8a70b9bc604b42724fa2bc411d44c31ab68ce84f8393399e34d5408579c2ba2921f2f8d11487aa7e52557feed96757199d3aae6377770154b17f3577c7ac3d8c76cf7461b5e8d42a7185078ed4f862fc57502f615075307b6e103c77c1f6c8bda7aa17e435e21b949af44dff5aa30a62da712fa9966a612ffca14871fd6f860b4a9614012c5369910e0ffd6f0fbd889a9c257c32bdcf90bb80627cb272ecd4599897555955e1fe08cd7ebb21c071be0f48989696cb39aa82ad11baa5d4ac613abf1b6db8a20e686836222833f8b6dd2f0006227be48e8580dcc8de620dacb2f65a693675d6cb45ba5dd1aa70db76bc641d4fb567ecbc7111442e294158be575c71ddc26e94f41266a2fd3a0d435781fc094648fadf5f17cd41ab895821894ec0806b262c393534fe66f21e3783c14a96c88f2e0653fe32e75dce8a463bb97eed6c16f3f3228169abb5b4bf9ea3278c1ff0f86eae71389b6433acd097eefa9e6e05f4955cd517830b8d9870ccb5227415e50f23f6473217a745096470dca93d2b34673c5d6a57ed02c8e0cae119b3f329d8ab6498494c2921bb6f496dd08381e7d39f2db5763b14a2821befcca0a9fd312545de68abf206d12d8e02e73bc7e3cb796e7ee26cc63d741efafc5345f8132951bcfbfddf631fb7cb43ef35b9453c9390eb23b1f9d8b1c72debd24f09a01a9dc60ee6815306188357781af6e1820aa35e4ec121b7ca34d7de7611b246a3e703ed48c7eb03a6fe8f852ee7d32545c9d852d64d5d75930e5f1ebe21a307efa7622edaced6d879026f0f85a9112012803705582269d39f143234df8909ab3d948e76d3daaa24226d9ac601eef277fd2cfc4a19aedf4387a21617b03ec3d3845a38554f5e97036e56ec1ce660df9c062c2c993b77c5ba6a6d05231dae3764183c3e96aa539cfb3415fb163c645b2303b2d6d4bda8ca6c72bc03d5305f9b118e925e27d29ab7dcb196470e6339631b2380744c04d1da348fc0fe274277f82f95bdfb0b64b4cf3b51e571c0ddb3b53ca6\",\n        \"signed\": \"0fe28eadd9e5dd574b3faaea810d44522c8b1bfbb3e3d57ed889faedec91d0e14a86b914c4c766f1bf9b8f18b0db890db6c1b125d57804333619b1e0720a3300f8b936e793b017580cc0e9cbda2acb6474507f4bca3afc8783ec46eeb82ccd4dd2525676aa6ab5c0dcf7d75f7e0311e6fe6bf27263f8578feb55c5612d1f28e888b76656c41ccd8a70b9bc604b42724fa2bc411d44c31ab68ce84f8393399e34d5408579c2ba2921f2f8d11487aa7e52557feed96757199d3aae6377770154b17f3577c7ac3d8c76cf7461b5e8d42a7185078ed4f862fc57502f615075307b6e103c77c1f6c8bda7aa17e435e21b949af44dff5aa30a62da712fa9966a612ffca14871fd6f860b4a9614012c5369910e0ffd6f0fbd889a9c257c32bdcf90bb80627cb272ecd4599897555955e1fe08cd7ebb21c071be0f48989696cb39aa82ad11baa5d4ac613abf1b6db8a20e686836222833f8b6dd2f0006227be48e8580dcc8de620dacb2f65a693675d6cb45ba5dd1aa70db76bc641d4fb567ecbc7111442e294158be575c71ddc26e94f41266a2fd3a0d435781fc094648fadf5f17cd41ab895821894ec0806b262c393534fe66f21e3783c14a96c88f2e0653fe32e75dce8a463bb97eed6c16f3f3228169abb5b4bf9ea3278c1ff0f86eae71389b6433acd097eefa9e6e05f4955cd517830b8d9870ccb5227415e50f23f6473217a745096470dca93d2b34673c5d6a57ed02c8e0cae119b3f329d8ab6498494c2921bb6f496dd08381e7d39f2db5763b14a2821befcca0a9fd312545de68abf206d12d8e02e73bc7e3cb796e7ee26cc63d741efafc5345f8132951bcfbfddf631fb7cb43ef35b9453c9390eb23b1f9d8b1c72debd24f09a01a9dc60ee6815306188357781af6e1820aa35e4ec121b7ca34d7de7611b246a3e703ed48c7eb03a6fe8f852ee7d32545c9d852d64d5d75930e5f1ebe21a307efa7622edaced6d879026f0f85a9112012803705582269d39f143234df8909ab3d948e76d3daaa24226d9ac601eef277fd2cfc4a19aedf4387a21617b03ec3d3845a38554f5e97036e56ec1ce660df9c062c2c993b77c5ba6a6d05231dae3764183c3e96aa539cfb3415fb163c645b2303b2d6d4bda8ca6c72bc03d5305f9b118e925e27d29ab7dcb196470e6339631b2380744c04d1da348fc0fe274277f82f95bdfb0b64b4cf3b51e571c0ddb3b53ca6\",\n        \"signature\": \"0fe28eadd9e5dd574b3faaea810d44522c8b1bfbb3e3d57ed889faedec91d0e14a86b914c4c766f1bf9b8f18b0db890db6c1b125d57804333619b1e0720a3300\"\n    },\n    {\n        \"secret_key\": \"7ee4e7e98c6a40f0e74413f24039bd220df1f8c7f015528dbf5284ab9f7c82e2\",\n        \"public_key\": \"4d5a800f9b22070e016ee23af8a310902b369d589a847f345c2ea2968d6d0924\",\n        \"message\": \"8fb01373c42e69614aea99af49323785f33861b94e90f565389ebf70e219f5dec732e0010b58f7290530df222ac9c73e1c2e92a5e6061de5590caf9c0d5021d729eaa11541fa1d082160beaf611e7cfdc0ebb315d388e538b4b5028f9b30d3d973347ffd44263eef083b81b21b82eca5756a494b1d81c07de849506d3e3b668797a5c544254d4ebe5cf8171b39f8724cbc4189291b3c53c21ece49a1d739563c65b49025935647a7303ae0ef7f6d24554645a428dbbb42449f5399e36dc787b7d6958a02eebbb836e5e53e26e487239de94d1d250e7943ac0e22d92750a0cf3473be1a6225cbe79545048269f6237ec9f9ec307e8a34b7bb34cd4906e43162a3708f329c5b989d7a7fcde1099a542546fe9c33182ba51b843e96d11c79e91ad21f7170e257fdc2818e12f9168a974c968a4d273fa3ffa9f35ff905980eaad3721cae802bee36210b40b99319bb669982e943b270a4c4d0a92ecb5bba2dd8b40ac3d2f0325c469d5e9d483f5241974010c5c0da335f16e962196c2ef14eb24aafbb311bfd5fa8dc8d2d61e6878ad2cce0dc9939e44522723d427ef32fb43b967f5e44fc665792796f8cf934f01c325d63d583dc3ca9d4fcc757d9178580daef53aa3ab21d2ce435955d1c6d47638c5edb62ff5561693d1cbd10ec9e399a71bf9db1c9969fd59e4eeb31aa59bf39e9f184178def7246ed4b8f4be5badaa5db4af867f4f2ec39a13704202c8784fa168ce96f9cfac71017236275fd857cc3c51a9c7ac256215e14b843f7214dc9f824b91d1a5170d0ef1d37696f93ee966a2b7dece22b4f3afd39c16d601e5ff8408d45c1a6ce71f060976c5be4c042b1b738df9580ba5ae77880a70c0b94f0e1c9f9aa34c090d612d57a9b931f50a125fa35ce40a2cb7faad530f80908c73cb78258afd2631390041d92617e9bf64ce96e8e4ac7f3126d8af8a04c75ffd438769de06f74c2fc20cc8192da353e79061283bba08a8d24e6e4e2e83ba5b08e4275226062148d8a02afad65b6f627cfbd29b71ca18aee5b1f97169bf0228b376f4106b50fd91a38a66211d69ebb4a7af0e1c2217f1ba014d1e0cd17508d58155d163dd9de2fe1c64c7f88d5b553e9ba1e1f25430d7e125b07a8c2ed\",\n        \"signed\": \"ac3bfe3adf941c934d3349c492de70d5166be389f955be87c2883f41f2da146c910651a3b452c2d739dc9b531c5745565e69d98359f1d7d93ebd36d70abbf00d8fb01373c42e69614aea99af49323785f33861b94e90f565389ebf70e219f5dec732e0010b58f7290530df222ac9c73e1c2e92a5e6061de5590caf9c0d5021d729eaa11541fa1d082160beaf611e7cfdc0ebb315d388e538b4b5028f9b30d3d973347ffd44263eef083b81b21b82eca5756a494b1d81c07de849506d3e3b668797a5c544254d4ebe5cf8171b39f8724cbc4189291b3c53c21ece49a1d739563c65b49025935647a7303ae0ef7f6d24554645a428dbbb42449f5399e36dc787b7d6958a02eebbb836e5e53e26e487239de94d1d250e7943ac0e22d92750a0cf3473be1a6225cbe79545048269f6237ec9f9ec307e8a34b7bb34cd4906e43162a3708f329c5b989d7a7fcde1099a542546fe9c33182ba51b843e96d11c79e91ad21f7170e257fdc2818e12f9168a974c968a4d273fa3ffa9f35ff905980eaad3721cae802bee36210b40b99319bb669982e943b270a4c4d0a92ecb5bba2dd8b40ac3d2f0325c469d5e9d483f5241974010c5c0da335f16e962196c2ef14eb24aafbb311bfd5fa8dc8d2d61e6878ad2cce0dc9939e44522723d427ef32fb43b967f5e44fc665792796f8cf934f01c325d63d583dc3ca9d4fcc757d9178580daef53aa3ab21d2ce435955d1c6d47638c5edb62ff5561693d1cbd10ec9e399a71bf9db1c9969fd59e4eeb31aa59bf39e9f184178def7246ed4b8f4be5badaa5db4af867f4f2ec39a13704202c8784fa168ce96f9cfac71017236275fd857cc3c51a9c7ac256215e14b843f7214dc9f824b91d1a5170d0ef1d37696f93ee966a2b7dece22b4f3afd39c16d601e5ff8408d45c1a6ce71f060976c5be4c042b1b738df9580ba5ae77880a70c0b94f0e1c9f9aa34c090d612d57a9b931f50a125fa35ce40a2cb7faad530f80908c73cb78258afd2631390041d92617e9bf64ce96e8e4ac7f3126d8af8a04c75ffd438769de06f74c2fc20cc8192da353e79061283bba08a8d24e6e4e2e83ba5b08e4275226062148d8a02afad65b6f627cfbd29b71ca18aee5b1f97169bf0228b376f4106b50fd91a38a66211d69ebb4a7af0e1c2217f1ba014d1e0cd17508d58155d163dd9de2fe1c64c7f88d5b553e9ba1e1f25430d7e125b07a8c2ed\",\n        \"signature\": \"ac3bfe3adf941c934d3349c492de70d5166be389f955be87c2883f41f2da146c910651a3b452c2d739dc9b531c5745565e69d98359f1d7d93ebd36d70abbf00d\"\n    },\n    {\n        \"secret_key\": \"1f28d9091d196cba3d4552e5a337a4d8af3f295e629e4ba6fe99703120ae41e0\",\n        \"public_key\": \"814d34bf28ee6d90f039599041db810f7c9daa918e03e96197414bc9aa31ecdc\",\n        \"message\": \"a69468bc33ebfef0615c643c49dac6e04fdb6cfb8ec45857bbb7a27e528fd631fc3411baee65cc1f94fcc94aed4a4332fa6861e065e06163541709d79728e01be2b140a022c83e7b23b9ed2ad2832169dfc95690913cf3720130657080c9d5a7827e5660757452c5fc3dcd80cc6be098c629226d5466e02b97126be74a1452ee16815095deb42bf06566715028c11825820a8a23c60da2b68dd9a55dad2a29a4964443817c07d776b244b15186819a3bbed414abf4579a3ece3a3dc7b105d0a9dba37b9eaa78be8e46e1698b59b0940b01f38b283c33a9a4b1d4f8144b16eeb5fc0a7af0d081696645a1eab3a787cbcf88fad93dd6cd46d295a879a1775033a98563822ef1f6b69a581e49736c8d701b4453969340521e4ad4bf94b911b0e2d86f34eece4a6385ff1fe63220cd3cc592f36d6c491fa18f7c1404360d2a7753fe073e09a2fc42a4bbea55bc96d7f05c98aed2cc4a9fae8fd4a0197ff01fa7f0046e3c3eb59aaabca313a4ddaa5d20d27c2c5f1ac6d87fd3cb4bd35a1ec75d104f7c367331a3e295e53c4e80bae14b9792d0d526f740d4ff036faf5487967ffabe8e883d3fb0d16faadb28e1285ded41570c0b07c2559b531e0f9254ef88e5b10f64f4839a9a0b6c3c7f1b7850f4ad9bf0999a7f2ae7c45a658ea53036fc70199842b8e49e60f967de1ff3abfff6cd735b7cd8b8f9e248f156f6c6543869eb99823daea88debaf79f01e6521ec63fe72724ee3c822b88b3968b24852091583c49ab3c15fa1f79b18d98f04d9b6841c9a7ca0de2fcc02f95dd649492e8b56a31ec1e244337af6aaaede8bf99fc814ef57c0d5e08c3c7ecc1897980aa169a9926d20698df6930e2110cb460f49390100741095f8ed00412ae696d98efefd290da5f7d0b728d20a1ebfa6bd7d270f281a98c7b1e408435125aa483c6b7d633ff7588a941658f6129544d62945b9b8af71a8c62c0a50076cb8541ba7e4bde4ede441722c6eb9df8cfd0656339e86d226abaea05ea047f6b8307701f6c9a44cc9cb837b8eb62445925e8a8881d2538fcb2b249e4ee8b686ecfb49c4df86401d249aac35841e914004f9455d3fde375d20a01fba27b197a698d384c76505106801627e8336bd2d76d761a8\",\n        \"signed\": \"5be552fa731e836793f6dda895dc9b1e2ccd669de1c843e00ea6fa3c5ebf97a34b26f1f3ac7ff2225ee4a7e430072c13da4066dcdcc05ba2b5f61a6e8d210709a69468bc33ebfef0615c643c49dac6e04fdb6cfb8ec45857bbb7a27e528fd631fc3411baee65cc1f94fcc94aed4a4332fa6861e065e06163541709d79728e01be2b140a022c83e7b23b9ed2ad2832169dfc95690913cf3720130657080c9d5a7827e5660757452c5fc3dcd80cc6be098c629226d5466e02b97126be74a1452ee16815095deb42bf06566715028c11825820a8a23c60da2b68dd9a55dad2a29a4964443817c07d776b244b15186819a3bbed414abf4579a3ece3a3dc7b105d0a9dba37b9eaa78be8e46e1698b59b0940b01f38b283c33a9a4b1d4f8144b16eeb5fc0a7af0d081696645a1eab3a787cbcf88fad93dd6cd46d295a879a1775033a98563822ef1f6b69a581e49736c8d701b4453969340521e4ad4bf94b911b0e2d86f34eece4a6385ff1fe63220cd3cc592f36d6c491fa18f7c1404360d2a7753fe073e09a2fc42a4bbea55bc96d7f05c98aed2cc4a9fae8fd4a0197ff01fa7f0046e3c3eb59aaabca313a4ddaa5d20d27c2c5f1ac6d87fd3cb4bd35a1ec75d104f7c367331a3e295e53c4e80bae14b9792d0d526f740d4ff036faf5487967ffabe8e883d3fb0d16faadb28e1285ded41570c0b07c2559b531e0f9254ef88e5b10f64f4839a9a0b6c3c7f1b7850f4ad9bf0999a7f2ae7c45a658ea53036fc70199842b8e49e60f967de1ff3abfff6cd735b7cd8b8f9e248f156f6c6543869eb99823daea88debaf79f01e6521ec63fe72724ee3c822b88b3968b24852091583c49ab3c15fa1f79b18d98f04d9b6841c9a7ca0de2fcc02f95dd649492e8b56a31ec1e244337af6aaaede8bf99fc814ef57c0d5e08c3c7ecc1897980aa169a9926d20698df6930e2110cb460f49390100741095f8ed00412ae696d98efefd290da5f7d0b728d20a1ebfa6bd7d270f281a98c7b1e408435125aa483c6b7d633ff7588a941658f6129544d62945b9b8af71a8c62c0a50076cb8541ba7e4bde4ede441722c6eb9df8cfd0656339e86d226abaea05ea047f6b8307701f6c9a44cc9cb837b8eb62445925e8a8881d2538fcb2b249e4ee8b686ecfb49c4df86401d249aac35841e914004f9455d3fde375d20a01fba27b197a698d384c76505106801627e8336bd2d76d761a8\",\n        \"signature\": \"5be552fa731e836793f6dda895dc9b1e2ccd669de1c843e00ea6fa3c5ebf97a34b26f1f3ac7ff2225ee4a7e430072c13da4066dcdcc05ba2b5f61a6e8d210709\"\n    },\n    {\n        \"secret_key\": \"c64dd20d42627526198a22647690c895b5b45b698f57a69dfbe48dbd426aa470\",\n        \"public_key\": \"2e01d40416f78acddb34b8445ea4fd0ab3fa9e6643044752213f07c7f0ff43a0\",\n        \"message\": \"821b9f7c16104b533bd127184fd72ade092b13bbd9aceed29b8d10f16688922d165f8931d53df590fb713b674d805ce0c9d6ce6c43ba6968191d12bfa08a8ce22e8f336b2b491af25d1b1606f930caebe522392a87d42ce7bc167aa7b610597220af31a665353071e8d9e5f42078b9c388bf040258e21f9c3ab38c0427618b2c28d3430df27921bfc58487b3461978bfa8bf586cfe8358e092f8f47466e762451d50164a0d74360f66b4cd3a3575da01da23752430c035da859f577de22290aab4ed7f34d267406ab547eb445cc64df53019427f4eb72bca55397153d01ccf7ec97d7a967d9aff46231d2e2027b38f3b41bd2cb1b798a4ae88abf4896216d315bd5383024259e59742802a911badcf8473db91af319733320cb9521ef9ce437267b6ea17bcafe5d0903b123a35c988f49834f61dd552640a3276da26af17ec21a20296586dd6f4b36c7a4f0b899d70b42af89e29370132edfb72d6834194a1609360b1f1feab89b96b8e8f0f68987c57cce0bab768113718fb1709de2df32177d44085da5efd9da70e1a858c92f245acfee64b71f3eb16e04fc13989e69337999701dd73abc266c9fd4cff91a0fd04fbd8b13b12e6f450385715848e007fa0d463119fd7de6325b640042b654212e0db8da1adebd2a7589f77ee4f752d282ca1119c431b17ad0a021ef2bf95e5ac4704e62d7039d0e651e456d60e63bade401cca77c9a89163174d5022d745abdc76b9ffe2544155235e3063e6e4aeec44ed5d8ab408d966fec12016c130730bbc558732065da800a70cbfb0fccca45d0028cbfd9632ddb2f0ed12edae7b930b106c9d1285a4b870de7507999c74793dd497408719c898abe49f7f33a33e69b50fa5af9480068566d1fddf4482d79704ad8ef11b88b42cc69fce8a557b5ba510e708b9375123038568270de407232e95621e2d04570bec2c41eccfd855b21f0c9bbaa23b5c5815fc888f7fbed482c320ffa1e063e87b55bc8f7eeea374063a9be65f7ed9225bf6ca34cfa311b79f3a258c252e6345ed6ac84748f46807a55d4ba41266169cd262d4f72279ef0caa77ff44933532bd1374756c23ec85f55efe9fc2331f26f881629f80c2692f7f53e4bc6f22efb45457a223f0d1c4\",\n        \"signed\": \"deacc8c23218727676d540a23bdad7810211e6d57ad294c37d4b1c9af6b337a53f7880d2bafa73b30508c008426bf8d7c965a1f4a422a1bc7d6ad6226fd19706821b9f7c16104b533bd127184fd72ade092b13bbd9aceed29b8d10f16688922d165f8931d53df590fb713b674d805ce0c9d6ce6c43ba6968191d12bfa08a8ce22e8f336b2b491af25d1b1606f930caebe522392a87d42ce7bc167aa7b610597220af31a665353071e8d9e5f42078b9c388bf040258e21f9c3ab38c0427618b2c28d3430df27921bfc58487b3461978bfa8bf586cfe8358e092f8f47466e762451d50164a0d74360f66b4cd3a3575da01da23752430c035da859f577de22290aab4ed7f34d267406ab547eb445cc64df53019427f4eb72bca55397153d01ccf7ec97d7a967d9aff46231d2e2027b38f3b41bd2cb1b798a4ae88abf4896216d315bd5383024259e59742802a911badcf8473db91af319733320cb9521ef9ce437267b6ea17bcafe5d0903b123a35c988f49834f61dd552640a3276da26af17ec21a20296586dd6f4b36c7a4f0b899d70b42af89e29370132edfb72d6834194a1609360b1f1feab89b96b8e8f0f68987c57cce0bab768113718fb1709de2df32177d44085da5efd9da70e1a858c92f245acfee64b71f3eb16e04fc13989e69337999701dd73abc266c9fd4cff91a0fd04fbd8b13b12e6f450385715848e007fa0d463119fd7de6325b640042b654212e0db8da1adebd2a7589f77ee4f752d282ca1119c431b17ad0a021ef2bf95e5ac4704e62d7039d0e651e456d60e63bade401cca77c9a89163174d5022d745abdc76b9ffe2544155235e3063e6e4aeec44ed5d8ab408d966fec12016c130730bbc558732065da800a70cbfb0fccca45d0028cbfd9632ddb2f0ed12edae7b930b106c9d1285a4b870de7507999c74793dd497408719c898abe49f7f33a33e69b50fa5af9480068566d1fddf4482d79704ad8ef11b88b42cc69fce8a557b5ba510e708b9375123038568270de407232e95621e2d04570bec2c41eccfd855b21f0c9bbaa23b5c5815fc888f7fbed482c320ffa1e063e87b55bc8f7eeea374063a9be65f7ed9225bf6ca34cfa311b79f3a258c252e6345ed6ac84748f46807a55d4ba41266169cd262d4f72279ef0caa77ff44933532bd1374756c23ec85f55efe9fc2331f26f881629f80c2692f7f53e4bc6f22efb45457a223f0d1c4\",\n        \"signature\": \"deacc8c23218727676d540a23bdad7810211e6d57ad294c37d4b1c9af6b337a53f7880d2bafa73b30508c008426bf8d7c965a1f4a422a1bc7d6ad6226fd19706\"\n    },\n    {\n        \"secret_key\": \"0f8e9f3526b4faea9276f22a1779e6f82709808f6d0c612adfe32a6e8a061005\",\n        \"public_key\": \"d48c3f0fdef382d1d80313e846fca95e418176bb5dfa9d398c1d2124776f690a\",\n        \"message\": \"0ccd37c4cfd8e70ca3bb3946d09d70d0f6a4b81d6dfb079d7873748071589880927382f7436a6ef8f51c255473dd01feb52c8edbe4d3255713e68d640f3dcf158f2bfb9fbecf71f0719dfe8ce6b601281ba6c20a56b4f8e7caa4aa9f868fbfc5e4321c22d65f0382c4896bf9bebe3546949e8185a4d817e45b5d1293953821bdd98ec259f64a3de53865b149ea01c8f683ecda61da5dc10e7ebdddfe7484f5eb1031b7916587caa399a06b6fea4c5e6e0be650fbdf06c1036df2cc35f62ea0ea713f52809d77f47c2e55c92392481680b6332056226913b0ce88a6c55a26bdb5b8bab3cf4695a8c522302c4eba37d31ff77e58301bccfc7c7be8580c6342687995f44acd190965ae0d7bf0669592b6ad88743ebb360c73e0484a23d2f9e99e9eb038dcbd87ca9b1a498f1b2d35fedd7f8e1f7fd8ca526486911e076aeab4877bbacf378a2855f9c5ac039130dc690e177d67b244cc8ad032379ef71fe05e9c8613d8f5d6ea3d4e3e47222029cc004253be47f87fb5e3314c4898134b87acf10b2538bad897bdc5012d8f9762c871b653d400fee0ceed5ef6bdd16faf3f0abdbd72cd0a12940546f0995ff14b0f1bd54856ff74c36eb4f22d7287aefdc609998c1f41bcc3bb3a5fa49234f4fa8e929cd0f554b315395dae873c61ca70e0410c2fd5a115d2a6ff1f1c94b27ba450b8194b21f095c61a5f215e3c84f5d43f0e736286d33b8c47814db979f9dc00919846bee685337d99555a24472e6b00b3f4a14311a6c7c904ba5889da6c1ddcc1117580f5fbc41f2b8a4268cf0e9fa5bf412534c9e4052aacb504cb86e2147ab8023d58800b763f9abf9d0440788a51dfe5cbd44230ba5228f1f5960ea3a4e4044d36daf811cbdbec5d696463d8e941f27217563bb44a2118a4f5acd6e794de17e028cbdeefdef2cbf03dd32e7899e65a1cf839f5d90e1f8c364b577fe3105353f66768dbf7af0c521aa8a49f7a22082d88f901498c90b9d7777ed2f9f0e8a552d8a1fa5e9632ed853258c9c215b6dbb4111dcfca554bfbc9bba22f88bc55552c6d862556d741dad59f215e37288346ca7d7fd8c65a380d720caff9efa149f3fda232daa5b12ef11c0af0862bd0229e075a3c6b60ef0bbb3dad7f2908\",\n        \"signed\": \"2f59a2936073913834eb15a0e0bcb9aa804089468f24dd1b2d37a1934ae9ba1020ff64b72eec03268d0a7c012c4e796300f6df7adda01c8bc5e9015ccdee1a000ccd37c4cfd8e70ca3bb3946d09d70d0f6a4b81d6dfb079d7873748071589880927382f7436a6ef8f51c255473dd01feb52c8edbe4d3255713e68d640f3dcf158f2bfb9fbecf71f0719dfe8ce6b601281ba6c20a56b4f8e7caa4aa9f868fbfc5e4321c22d65f0382c4896bf9bebe3546949e8185a4d817e45b5d1293953821bdd98ec259f64a3de53865b149ea01c8f683ecda61da5dc10e7ebdddfe7484f5eb1031b7916587caa399a06b6fea4c5e6e0be650fbdf06c1036df2cc35f62ea0ea713f52809d77f47c2e55c92392481680b6332056226913b0ce88a6c55a26bdb5b8bab3cf4695a8c522302c4eba37d31ff77e58301bccfc7c7be8580c6342687995f44acd190965ae0d7bf0669592b6ad88743ebb360c73e0484a23d2f9e99e9eb038dcbd87ca9b1a498f1b2d35fedd7f8e1f7fd8ca526486911e076aeab4877bbacf378a2855f9c5ac039130dc690e177d67b244cc8ad032379ef71fe05e9c8613d8f5d6ea3d4e3e47222029cc004253be47f87fb5e3314c4898134b87acf10b2538bad897bdc5012d8f9762c871b653d400fee0ceed5ef6bdd16faf3f0abdbd72cd0a12940546f0995ff14b0f1bd54856ff74c36eb4f22d7287aefdc609998c1f41bcc3bb3a5fa49234f4fa8e929cd0f554b315395dae873c61ca70e0410c2fd5a115d2a6ff1f1c94b27ba450b8194b21f095c61a5f215e3c84f5d43f0e736286d33b8c47814db979f9dc00919846bee685337d99555a24472e6b00b3f4a14311a6c7c904ba5889da6c1ddcc1117580f5fbc41f2b8a4268cf0e9fa5bf412534c9e4052aacb504cb86e2147ab8023d58800b763f9abf9d0440788a51dfe5cbd44230ba5228f1f5960ea3a4e4044d36daf811cbdbec5d696463d8e941f27217563bb44a2118a4f5acd6e794de17e028cbdeefdef2cbf03dd32e7899e65a1cf839f5d90e1f8c364b577fe3105353f66768dbf7af0c521aa8a49f7a22082d88f901498c90b9d7777ed2f9f0e8a552d8a1fa5e9632ed853258c9c215b6dbb4111dcfca554bfbc9bba22f88bc55552c6d862556d741dad59f215e37288346ca7d7fd8c65a380d720caff9efa149f3fda232daa5b12ef11c0af0862bd0229e075a3c6b60ef0bbb3dad7f2908\",\n        \"signature\": \"2f59a2936073913834eb15a0e0bcb9aa804089468f24dd1b2d37a1934ae9ba1020ff64b72eec03268d0a7c012c4e796300f6df7adda01c8bc5e9015ccdee1a00\"\n    },\n    {\n        \"secret_key\": \"fe7cdc7966d0ffb9c76f4a18e7f0bf90690eb76dc3d3d50884648e2e3937d020\",\n        \"public_key\": \"a12ee9812d6af6aa4879fa72bc0a69804ea1a85f9bc4a26a5ba7cfbb914d0dd9\",\n        \"message\": \"dcb91cf155461a60df07eec29d98616ed1728b34efa9e1f7445a9158a8f88d7faaae0e24725aeff263c3f74f0c684f1858f05b6995d2846b6a832f67085a4276d8661aebd3bfcc73181f1f510293b6de5e4bb23ff2dca1df608cb14ae522ac4b51e1f9b973ab8bafcd534e71c57181b11896ee1061fb369ca4d2939d1e57060d9f4db0a5c0b07d52687f157817e63e2fe7ebcc3e7c95efe05b859910c95eede86d14399e616248a28c24c414dbb693af9be435a3a9cdc33e0e2a586918d91b8a85cedd1612d7c1a21792bdd43a915b157e04bb3a44ecbe23fa49cc55daabbeaa155a737f765b8ddb0f3b15d4ecf2cef7054ca73ec87d91752c2e99195cdb1958844f144edab82a97549fc9cec08e8711cff863b63fc231a77f762e5cd9da9d59409252e99ab04c42bc57097e464e3c6a48d80241e6325e3e4094989b34c0e8b32b1a7829d54df32a050ee87d8f7c4fe3e4f4f7049d1feecdbea67108350db4e8edbe3c3ff8ab2a25d147b1c1c5821b0f8c21042d655db831691f59983f27d2ed1d4906c544e24e79be68653c9b229a7fb61ef545bab16e9881cb4d9265e293590a0bc2dc86bad23007ff40c95861923b498241c10d26bf4848f62ba7383f649dc38af1840d0de928a9bfee5e11b51434163a7ab1ed537415f1e93285e3699205720158f9557d8641ed2bf485b8212c8f82668bac3c228e6924c17d0d98f2e6d9234371c4425eb758689fdb0dc1cea1394a2862e87bb38e624c34799168613278225fb5e19c9247ada35554f2c4addbb61d5a502a708127d6efbca8f735090bdfdd88db29fbd14b69ab1262f0c3e26d263a59c5ae4639065383d5250b54cf592bb7adfeaae0d2fe816b6381e86ea2d1c71813cbc3d8fe2d31de7b30fb6ec2294fe4536a36c6a1835a7162ab4bf89d19466119657b0e4645aef503505b4d55df977bd2c90c64406f4970d5cff245b835322a6fbe234e5efbb5ea45e8f0d3973be4aaa2aadaab077d6c9b25bd4494409e93479d2d1507f66bc8bef82999a13c7943b472b9e61ec29debefbf2241423e0faa42c1a338a7a6131ded935ba03a28662e68593368dde54b462f2a5fb746185ff5503e69ba36bf16f71458cdd057e5c17267f67498d652860b465e\",\n        \"signed\": \"b52d03fdebcd429737ef70920687211fbb4c04f81e355cec7072c5054175d2ed77f38f466f001422da8fcdf067db1451007cab607f049c2e2607b57d44713c04dcb91cf155461a60df07eec29d98616ed1728b34efa9e1f7445a9158a8f88d7faaae0e24725aeff263c3f74f0c684f1858f05b6995d2846b6a832f67085a4276d8661aebd3bfcc73181f1f510293b6de5e4bb23ff2dca1df608cb14ae522ac4b51e1f9b973ab8bafcd534e71c57181b11896ee1061fb369ca4d2939d1e57060d9f4db0a5c0b07d52687f157817e63e2fe7ebcc3e7c95efe05b859910c95eede86d14399e616248a28c24c414dbb693af9be435a3a9cdc33e0e2a586918d91b8a85cedd1612d7c1a21792bdd43a915b157e04bb3a44ecbe23fa49cc55daabbeaa155a737f765b8ddb0f3b15d4ecf2cef7054ca73ec87d91752c2e99195cdb1958844f144edab82a97549fc9cec08e8711cff863b63fc231a77f762e5cd9da9d59409252e99ab04c42bc57097e464e3c6a48d80241e6325e3e4094989b34c0e8b32b1a7829d54df32a050ee87d8f7c4fe3e4f4f7049d1feecdbea67108350db4e8edbe3c3ff8ab2a25d147b1c1c5821b0f8c21042d655db831691f59983f27d2ed1d4906c544e24e79be68653c9b229a7fb61ef545bab16e9881cb4d9265e293590a0bc2dc86bad23007ff40c95861923b498241c10d26bf4848f62ba7383f649dc38af1840d0de928a9bfee5e11b51434163a7ab1ed537415f1e93285e3699205720158f9557d8641ed2bf485b8212c8f82668bac3c228e6924c17d0d98f2e6d9234371c4425eb758689fdb0dc1cea1394a2862e87bb38e624c34799168613278225fb5e19c9247ada35554f2c4addbb61d5a502a708127d6efbca8f735090bdfdd88db29fbd14b69ab1262f0c3e26d263a59c5ae4639065383d5250b54cf592bb7adfeaae0d2fe816b6381e86ea2d1c71813cbc3d8fe2d31de7b30fb6ec2294fe4536a36c6a1835a7162ab4bf89d19466119657b0e4645aef503505b4d55df977bd2c90c64406f4970d5cff245b835322a6fbe234e5efbb5ea45e8f0d3973be4aaa2aadaab077d6c9b25bd4494409e93479d2d1507f66bc8bef82999a13c7943b472b9e61ec29debefbf2241423e0faa42c1a338a7a6131ded935ba03a28662e68593368dde54b462f2a5fb746185ff5503e69ba36bf16f71458cdd057e5c17267f67498d652860b465e\",\n        \"signature\": \"b52d03fdebcd429737ef70920687211fbb4c04f81e355cec7072c5054175d2ed77f38f466f001422da8fcdf067db1451007cab607f049c2e2607b57d44713c04\"\n    },\n    {\n        \"secret_key\": \"f6c9ab5ea75f294e8e0c07c4c09ed8eea3113bdfc2ef759e20a264571604108d\",\n        \"public_key\": \"b12ff55bd3ec42610eacea28b313a16e19c9e8b47c2b15170991be088d65cf63\",\n        \"message\": \"71623b39743e39c7e08638806d468a1a8a6f35c2ae388eefc27374bb52538814c4b36c9b8e389ad83183de02a1bbd0325734e4618754092337d3e7dc1256928e3528870ca7f00613a25b71bb15d1d9eaaff9f2269b71c19769e003ce845614b2ec95ed28ca855b5221d4cb80a6ca9466aa33e2510ddff7dce186159da70fc8b1fbac12a26e1fc0942276892ad6e9b003f56959bd313af289e7a0532a664b76b96b919854e0650cb8c52ec4c5fb5053af2f0cf8c0f22a523f9e2c6419df8d0b714ee3776800ebfa70776084667d6dcf541f14cf166262e0f64c4276ae28885e6cfd097b70c0d6186ea5dbd033323c987613da08645de07208bae12a178d8f7f650a25afbd701c85a1ba639ef9f121c40c5c129a4737343386a48183ff3c591389d89ecda526cffb2674f17bb1c23090554b1340849796a6d444460bb419427e93e6585b0f4f065ad87ee6edf54be6188a1dd5ace1364defa561f74e26769c9b291ee7555276501c6a49080da0924f3792c2a728a52007b1c07c95578fedaf403996239e9c55a9a44c3dfcc37cdf03fb485db5a08dff15a7a4f7b7f154742e8431564dc17dbd432e10337c2276fcfd9d70f7c3d570393a0c19f64051c73a870e205584106531d1fd2a1dd1c9d0fce14ffaaa077bb7e260251eed6c62bc6edc2422519440c2244eba384046b0eddaa6cf2c1c7eeebfcd78fcae18b82290552b59c0463dc450618ba67c770dec0e229b8460936ca819562bcb36969c8ff70bf113c11671e00b941355bf01ad54b05cfe2a048b38728cbdd1b49809e1f207aca3098d9942eec47d6c9d413b37c914fedd38acd5ffe496cac757c2ef8b77bd8403d14b1fc98a903fe2b979468233a7f2aed6f8d509d874e1dce05149af9df3fe4595c71e8bc463dee9384d5e0505d2a6b0a2b8a1ed6216aaae9dcc7602487a4c0851fdf09629c1e99118809a9544a6577af9f915d1e65d816220c48c8490fa9b70da422ad6800223d6d8c340f9eab2cc7e149362124a300b40cbb8c0a65da301dbba931ba564f35973ca8bf2d1edb56c194661955b3b68381fa15d4b8dc6ada1a5cebda3a4ccc55123e0057f4f821041937dd549209c82e116570bc908a28e3299a9441443498f74b3cc88e1a62d\",\n        \"signed\": \"a7f9d08ba14183ef247f2c25fecc2b83eda6de58022e466ce78fcf50f71ce26162446562eea45d63a21c3b22561fd4680058acb825407a15408f271361a1460f71623b39743e39c7e08638806d468a1a8a6f35c2ae388eefc27374bb52538814c4b36c9b8e389ad83183de02a1bbd0325734e4618754092337d3e7dc1256928e3528870ca7f00613a25b71bb15d1d9eaaff9f2269b71c19769e003ce845614b2ec95ed28ca855b5221d4cb80a6ca9466aa33e2510ddff7dce186159da70fc8b1fbac12a26e1fc0942276892ad6e9b003f56959bd313af289e7a0532a664b76b96b919854e0650cb8c52ec4c5fb5053af2f0cf8c0f22a523f9e2c6419df8d0b714ee3776800ebfa70776084667d6dcf541f14cf166262e0f64c4276ae28885e6cfd097b70c0d6186ea5dbd033323c987613da08645de07208bae12a178d8f7f650a25afbd701c85a1ba639ef9f121c40c5c129a4737343386a48183ff3c591389d89ecda526cffb2674f17bb1c23090554b1340849796a6d444460bb419427e93e6585b0f4f065ad87ee6edf54be6188a1dd5ace1364defa561f74e26769c9b291ee7555276501c6a49080da0924f3792c2a728a52007b1c07c95578fedaf403996239e9c55a9a44c3dfcc37cdf03fb485db5a08dff15a7a4f7b7f154742e8431564dc17dbd432e10337c2276fcfd9d70f7c3d570393a0c19f64051c73a870e205584106531d1fd2a1dd1c9d0fce14ffaaa077bb7e260251eed6c62bc6edc2422519440c2244eba384046b0eddaa6cf2c1c7eeebfcd78fcae18b82290552b59c0463dc450618ba67c770dec0e229b8460936ca819562bcb36969c8ff70bf113c11671e00b941355bf01ad54b05cfe2a048b38728cbdd1b49809e1f207aca3098d9942eec47d6c9d413b37c914fedd38acd5ffe496cac757c2ef8b77bd8403d14b1fc98a903fe2b979468233a7f2aed6f8d509d874e1dce05149af9df3fe4595c71e8bc463dee9384d5e0505d2a6b0a2b8a1ed6216aaae9dcc7602487a4c0851fdf09629c1e99118809a9544a6577af9f915d1e65d816220c48c8490fa9b70da422ad6800223d6d8c340f9eab2cc7e149362124a300b40cbb8c0a65da301dbba931ba564f35973ca8bf2d1edb56c194661955b3b68381fa15d4b8dc6ada1a5cebda3a4ccc55123e0057f4f821041937dd549209c82e116570bc908a28e3299a9441443498f74b3cc88e1a62d\",\n        \"signature\": \"a7f9d08ba14183ef247f2c25fecc2b83eda6de58022e466ce78fcf50f71ce26162446562eea45d63a21c3b22561fd4680058acb825407a15408f271361a1460f\"\n    },\n    {\n        \"secret_key\": \"43103df01a48a03c57f32f52d70c6849ee44580b2ab4ee72d548d848134f7ceb\",\n        \"public_key\": \"a3cbe0d64b0560bcb5ae009001e314d9ec907901dd74a804a0059022ed9c6d04\",\n        \"message\": \"738cbf06d00d4dcd5e5f243a1c18dd5ec20278884695a1cf3bea67bb5b05dd7e60a2a24fd325be6bf46b462873ec907f9de88dc2c762620b7e0ef72765d4bda662454993c828a1746e9ed8d19dff43c4c48527ac845f2186a4ad7c1d992a16245cd573073e0940dceed368110bb5fd0a4c8834ce88a77125b9147393c8b58cb16e5ebdc18244ebfa48baba46973fdcd485b1b2e5f3b0e70992cf1999580638d87f1f5b27c4d7f91decf37de2e734e3195535c631082b3ebaa8ce30a9c2c2db016d7d3547e621618850e22040038d0fe0faea2f9bf510b682c4fd14750e89b4c199ef0c990500543eeeab5f0b507a313199c2a2a0262d6d814cbc0933c592e256c3e29d524b066ea5a4543361a10450e0aa675c61408f307f26ee58969d63278f135b7dcb666b93f2cacfd83873471e974a286b09023f5015fa1aaf18bfbfa5f74385d0df6b9add516ffc0c3113e37e097838646ac93054ff4d9602066744ba3396953fd78168130170bb275c152bdd366f73065c0a7ad7ad00758cb99a7ac1b7809d26dfaac758468201eeb60dea368c33f257afe2f1b4c02e37bafe40f5d7fd40c87d1c56a0cb28e9d28369a3924bcef8b6d999dcf4294dd8c4143d75c6c25b5a4544488dde725248c78d93c15b815b01cbd0f31d1b00ac04837ef85b4003fc96d4457ac5a023623e67b66da4700a0859f83fdccd3c7aae09de09a057e00db44a2a6aacaa21746a49b8224689a5cc1854ba3dc4aa2aa34524e7a5a89d11eea356aaea5ef5fbf542c99f544db940f5086838ee2ab218b8d3f2e107d0b29d4b04830eed79c0768e02c2844b3cba326895f4ab38a3994b83ab30600ff511ccb595992f8cc0d2954807972da365b06fbdab539b2e03598b34e53cfcf93990b97aac1d329783366d451f972b8d8a00b6b8ecdb37279644cec1447c0998ee4f7090f34c9cc8530590cae765360aadb0ab3135004941c92302cbb2b350a14e8f30af5325c2b438005e3a9d4585e63265c327ba725754b33256917fb965ae9f02ed2126b481473dc0e931c2522bf00fe6a2ec95c792247b1e03396112f783070e2fe6c2cb982250d13f2d5460c744fde45323e631cccb540cd725f2c55a7058f230e82b79f366afcbb025b492554395\",\n        \"signed\": \"195447beb1de4a7e36ea89a6ce3c99bcc89411df5e0b15f7ba0b1d110c456abc6b3f5f1da6106ed887864ba56aab466a8a63b335cfcf4c64d65c0e6fb480b401738cbf06d00d4dcd5e5f243a1c18dd5ec20278884695a1cf3bea67bb5b05dd7e60a2a24fd325be6bf46b462873ec907f9de88dc2c762620b7e0ef72765d4bda662454993c828a1746e9ed8d19dff43c4c48527ac845f2186a4ad7c1d992a16245cd573073e0940dceed368110bb5fd0a4c8834ce88a77125b9147393c8b58cb16e5ebdc18244ebfa48baba46973fdcd485b1b2e5f3b0e70992cf1999580638d87f1f5b27c4d7f91decf37de2e734e3195535c631082b3ebaa8ce30a9c2c2db016d7d3547e621618850e22040038d0fe0faea2f9bf510b682c4fd14750e89b4c199ef0c990500543eeeab5f0b507a313199c2a2a0262d6d814cbc0933c592e256c3e29d524b066ea5a4543361a10450e0aa675c61408f307f26ee58969d63278f135b7dcb666b93f2cacfd83873471e974a286b09023f5015fa1aaf18bfbfa5f74385d0df6b9add516ffc0c3113e37e097838646ac93054ff4d9602066744ba3396953fd78168130170bb275c152bdd366f73065c0a7ad7ad00758cb99a7ac1b7809d26dfaac758468201eeb60dea368c33f257afe2f1b4c02e37bafe40f5d7fd40c87d1c56a0cb28e9d28369a3924bcef8b6d999dcf4294dd8c4143d75c6c25b5a4544488dde725248c78d93c15b815b01cbd0f31d1b00ac04837ef85b4003fc96d4457ac5a023623e67b66da4700a0859f83fdccd3c7aae09de09a057e00db44a2a6aacaa21746a49b8224689a5cc1854ba3dc4aa2aa34524e7a5a89d11eea356aaea5ef5fbf542c99f544db940f5086838ee2ab218b8d3f2e107d0b29d4b04830eed79c0768e02c2844b3cba326895f4ab38a3994b83ab30600ff511ccb595992f8cc0d2954807972da365b06fbdab539b2e03598b34e53cfcf93990b97aac1d329783366d451f972b8d8a00b6b8ecdb37279644cec1447c0998ee4f7090f34c9cc8530590cae765360aadb0ab3135004941c92302cbb2b350a14e8f30af5325c2b438005e3a9d4585e63265c327ba725754b33256917fb965ae9f02ed2126b481473dc0e931c2522bf00fe6a2ec95c792247b1e03396112f783070e2fe6c2cb982250d13f2d5460c744fde45323e631cccb540cd725f2c55a7058f230e82b79f366afcbb025b492554395\",\n        \"signature\": \"195447beb1de4a7e36ea89a6ce3c99bcc89411df5e0b15f7ba0b1d110c456abc6b3f5f1da6106ed887864ba56aab466a8a63b335cfcf4c64d65c0e6fb480b401\"\n    },\n    {\n        \"secret_key\": \"f9139e579fa96ebd6287db3babcda60f92e73153566f924cb5de04de4493481e\",\n        \"public_key\": \"c06ce335533af8d8f337f2b38e0aafa2ce9b27223cd9ddc5ef32027f04889b7f\",\n        \"message\": \"b330764ddc628e4ad67aa4982ae86d4581071c193ec3c58f813d7921b84d2a54562bd87417ae1de590a1a48c4ec7d556ad931d65c0543fdf0607c749859ee12f9952020c195cf8746095e1087cc6c3c8ef9d24052560ce813d6139b7a75c8f4b8ea30a9c4ab888d0a6341c99abd35e0903bfe56c93152340c41276d7f24e0912b12a4db3d7ee4484dfa53afc0b1aea1409d1e0328aa1c8604127ca2eb1a5e81bf31f8c7a51c6052c534efe6b3d0ee74ff5a9b11c6157e36477efa9382f5751be8c8c6454c446d6f8dc7e929525cc3de78cb1ba4aba9bd4be152610437582c965eea48cbd4caa6f308f85f4f8d006a042f619200762e1bb9ba422e65475b33a9494298cfbb75a152b36d2a05501807705b952765350cd14141d35d4986692d6c3bcfc6d61df0052a620aab8cc13205e754c16f93eca7920bbea5157ef112f0b64c1054f90a5ddc175a89e29242f57646e74cc885e81a1cc144c3d782d1152a9e4cfe76cb3ffabe7dbe603fb3869eca8699698709cc87fc961c1e299cfca22e3242eae788cff11bfca61026745f4976225b26ee200c4f1910c4b83df5ce46ef487d748d9c4c502141b7874caf41e5a297b248c2bac6990a15b07b4cf810e59287442d9a3696c02e8d7324d3cf730dda540536beb13cfdeae6180dd7484832dfa94e94aa6cba117aae17270f48f93b2f98ae9581718163f4463546c0ae0f279c36b92bee66f1ca2d6a4f726d2dfee0bc11c1d8a1fa62c3cc8aba266b98759286c1068483b2376b403c887fbb657dc0f255dea90dbd23308f7e0e842b498a8dfc7c9cd5aef0e87d56be40d50fc1dd4c0aa7dee55aebe4d6b6a52053962b87b0f2ee09a90816155333d5c57a14724e001bc3ded17843b76e2c47a176339c8defc54b55b2358ae7d01b0f6e08f31216ae90340694168a5a79ee883ea7858007d17c37359c99d6597efe460c1a2f7738ac32c5eb5e39e500c49c0dff9c4659e8c50cc5ca79d8ba4e5972d67225468fba64167a6b2c6f368935c7a049d35d355c7672520d3c9e4e43c671c3cb8dee259047495de0f56dd7191d5bd4bbd29517e364792ff89d33799b6e781c20193f5a316fb40de74fee2acc25e47f512214de3b1e9b382a86929c1573d3724c25017c0e5\",\n        \"signed\": \"051d8d7f0b68d2eec72c81adfcfb31ae8558f60ab63c9f5652a8df638f666f1ebc0c6e0b411953bcda6b5151b2b93a39e3c5330a8573e168792272abd36c810ab330764ddc628e4ad67aa4982ae86d4581071c193ec3c58f813d7921b84d2a54562bd87417ae1de590a1a48c4ec7d556ad931d65c0543fdf0607c749859ee12f9952020c195cf8746095e1087cc6c3c8ef9d24052560ce813d6139b7a75c8f4b8ea30a9c4ab888d0a6341c99abd35e0903bfe56c93152340c41276d7f24e0912b12a4db3d7ee4484dfa53afc0b1aea1409d1e0328aa1c8604127ca2eb1a5e81bf31f8c7a51c6052c534efe6b3d0ee74ff5a9b11c6157e36477efa9382f5751be8c8c6454c446d6f8dc7e929525cc3de78cb1ba4aba9bd4be152610437582c965eea48cbd4caa6f308f85f4f8d006a042f619200762e1bb9ba422e65475b33a9494298cfbb75a152b36d2a05501807705b952765350cd14141d35d4986692d6c3bcfc6d61df0052a620aab8cc13205e754c16f93eca7920bbea5157ef112f0b64c1054f90a5ddc175a89e29242f57646e74cc885e81a1cc144c3d782d1152a9e4cfe76cb3ffabe7dbe603fb3869eca8699698709cc87fc961c1e299cfca22e3242eae788cff11bfca61026745f4976225b26ee200c4f1910c4b83df5ce46ef487d748d9c4c502141b7874caf41e5a297b248c2bac6990a15b07b4cf810e59287442d9a3696c02e8d7324d3cf730dda540536beb13cfdeae6180dd7484832dfa94e94aa6cba117aae17270f48f93b2f98ae9581718163f4463546c0ae0f279c36b92bee66f1ca2d6a4f726d2dfee0bc11c1d8a1fa62c3cc8aba266b98759286c1068483b2376b403c887fbb657dc0f255dea90dbd23308f7e0e842b498a8dfc7c9cd5aef0e87d56be40d50fc1dd4c0aa7dee55aebe4d6b6a52053962b87b0f2ee09a90816155333d5c57a14724e001bc3ded17843b76e2c47a176339c8defc54b55b2358ae7d01b0f6e08f31216ae90340694168a5a79ee883ea7858007d17c37359c99d6597efe460c1a2f7738ac32c5eb5e39e500c49c0dff9c4659e8c50cc5ca79d8ba4e5972d67225468fba64167a6b2c6f368935c7a049d35d355c7672520d3c9e4e43c671c3cb8dee259047495de0f56dd7191d5bd4bbd29517e364792ff89d33799b6e781c20193f5a316fb40de74fee2acc25e47f512214de3b1e9b382a86929c1573d3724c25017c0e5\",\n        \"signature\": \"051d8d7f0b68d2eec72c81adfcfb31ae8558f60ab63c9f5652a8df638f666f1ebc0c6e0b411953bcda6b5151b2b93a39e3c5330a8573e168792272abd36c810a\"\n    },\n    {\n        \"secret_key\": \"c8ee954db5a11b292ed97764fae6b283051db57dcdc0aa0df5393bb60c112ed3\",\n        \"public_key\": \"5c2f81824e9975dd7ea353bc66807dedc7610349794e2fc08e5a31e002e3fe07\",\n        \"message\": \"7ba3fb568315aa81e21f197780edc2c6ea26d8d06a4378912fca2301cf1eab3d803c8469deddf376703ddb7ce06a77dab20e02344fadcc50022ab3c713cd03c1daa93f1c7ea572629f610b5e3c51411bb8c19694bbce903cac4705f9b5dd0f47bc5d0aa3253f908870299027ffbd3449eebad45332b5d0c4f533dbed18a99a2498b9164e245fb65c0afa0b053703a0cf95940ac7a0195d4f7046609cf04371338706b9b1986c0f118175d2cdfce74a6f88659825854e94ece58f5157636d6235b76d32745a2a81a9671a8f86027ba9e01763888fc171cef7c451c36072bc7499839d431cf18cd7c6c9fba3aa712a054328ccd62be4820abd5e782162764611d4539ba2cebdc209b3f4e4b69c3d64073e920d215214fb0fda44185aada5c36127a15ba15ca28a3ad086e9d03366869c60c3fbcebd869d2e40643e833f894803f980a2da7ea4e59ce4d7c06fd2aff087ee7bcfddaa3b32817ce63a63587dbafef380013a6f1ee3734b94ca3df9644dd0434302ecb324afe35f465c9c1c931b27294fc6ee0272de2242ae90d7f2e067027ef8642e8f171ed880ffabce8a20a1b3e339ad4e3f1a9001f20f90026188fde34b217a6e26aaff18422b7f843d0fdda321c319c778f23137f20ccc1bda1890e5bc916a5456d068d37b5acc6347720c56a5a491bc348d6c848a9c8fecfe58c92b1f302fe14919718cd5e78b7fd601d09dc01e6904861e8d68b3c57535b6136676cbc6e839af0dd739db89a7abd913fdf6b00e9ca02602de6ca0afd0913d992fbaa8ff822b9d9b09dda7a29be91910d8fa3caa2a5e518346c167c9f51941cf7353f3f34c1dab33485d0a8c19daf951fd3ef20d0b119d8038df90c114a25a5b93ae40ec44b9a5d2bc1c6517c682500d4cdc197142bec3af8232c071428dc54c0d30454272e7336b0b5888a6e8fecde859e2accb7fb094acc54ffa481f7623d944691f04fb3613a9954980f17e2ad2173d68cf0ec1b67d8a91d6ec82946bcf05cb90681a71627b590238334e3d5ab9da6a089bd72624df9074cdd2309e04dfcae032812fe84f9db882cdeaae69ee5daa5a66ff427fc452edd0769b6aabcc139d0f70af8b97430e644f58a41287a93f631deda82ca0716d79754c5c503e52a665da\",\n        \"signed\": \"f3077a75101e121e5c3e77d8ed97b578d239bd421803d3455b5654405a4c586a6092e13a8529bace468a305784b373e433fee4a3df8956befa012fd8a8eed10c7ba3fb568315aa81e21f197780edc2c6ea26d8d06a4378912fca2301cf1eab3d803c8469deddf376703ddb7ce06a77dab20e02344fadcc50022ab3c713cd03c1daa93f1c7ea572629f610b5e3c51411bb8c19694bbce903cac4705f9b5dd0f47bc5d0aa3253f908870299027ffbd3449eebad45332b5d0c4f533dbed18a99a2498b9164e245fb65c0afa0b053703a0cf95940ac7a0195d4f7046609cf04371338706b9b1986c0f118175d2cdfce74a6f88659825854e94ece58f5157636d6235b76d32745a2a81a9671a8f86027ba9e01763888fc171cef7c451c36072bc7499839d431cf18cd7c6c9fba3aa712a054328ccd62be4820abd5e782162764611d4539ba2cebdc209b3f4e4b69c3d64073e920d215214fb0fda44185aada5c36127a15ba15ca28a3ad086e9d03366869c60c3fbcebd869d2e40643e833f894803f980a2da7ea4e59ce4d7c06fd2aff087ee7bcfddaa3b32817ce63a63587dbafef380013a6f1ee3734b94ca3df9644dd0434302ecb324afe35f465c9c1c931b27294fc6ee0272de2242ae90d7f2e067027ef8642e8f171ed880ffabce8a20a1b3e339ad4e3f1a9001f20f90026188fde34b217a6e26aaff18422b7f843d0fdda321c319c778f23137f20ccc1bda1890e5bc916a5456d068d37b5acc6347720c56a5a491bc348d6c848a9c8fecfe58c92b1f302fe14919718cd5e78b7fd601d09dc01e6904861e8d68b3c57535b6136676cbc6e839af0dd739db89a7abd913fdf6b00e9ca02602de6ca0afd0913d992fbaa8ff822b9d9b09dda7a29be91910d8fa3caa2a5e518346c167c9f51941cf7353f3f34c1dab33485d0a8c19daf951fd3ef20d0b119d8038df90c114a25a5b93ae40ec44b9a5d2bc1c6517c682500d4cdc197142bec3af8232c071428dc54c0d30454272e7336b0b5888a6e8fecde859e2accb7fb094acc54ffa481f7623d944691f04fb3613a9954980f17e2ad2173d68cf0ec1b67d8a91d6ec82946bcf05cb90681a71627b590238334e3d5ab9da6a089bd72624df9074cdd2309e04dfcae032812fe84f9db882cdeaae69ee5daa5a66ff427fc452edd0769b6aabcc139d0f70af8b97430e644f58a41287a93f631deda82ca0716d79754c5c503e52a665da\",\n        \"signature\": \"f3077a75101e121e5c3e77d8ed97b578d239bd421803d3455b5654405a4c586a6092e13a8529bace468a305784b373e433fee4a3df8956befa012fd8a8eed10c\"\n    },\n    {\n        \"secret_key\": \"6dbc559e4ab193eebf70c5c32d797be00b7311e8e6691da9afcc187291f2501c\",\n        \"public_key\": \"38a7034476fb9382f1417768c42162951a2636902c3898c029be278ab4c31f31\",\n        \"message\": \"88ee2365f7cf9de33acd53564968b2dc7f7370b7e7033f4c663a88c25f60f7f711d61908ebf1f5bb72835553c8aa8c8e4fcdecd37978238289bf6ca84876d228217a28d81b0b457c922e91ecba8d3e1d2e6659c2b0aea051b9c2e09c7dfeb51d30ede767570341ffac1ecf0de20c82d1e9ed0775deac72da7c2dec234865dec83f6715e1c3c59de2033cc24d86bc2d31aa16649686ede0dbbd8964c3a64a3dca5588d7248b1f24df8d75f09aac62c07828ca431a3a2d77a60cc93cfa3495cabeb1904ed5b563984e8c20777bac8774108a64eda58fb320244a3add3e3e7a76cd137cfa4a09b6e6e93011ea0ae65171af130711766cd25b3c74ec54c0bdfa02b3120ac29087ebac9837fca65ba971bc4281dd557c500e225ea66c3c3fd52206c19a9f9395463169f8c7a846bd9f834d7f337d0b61fb30bce294f478ae1f1d977e454e433ee8729fb065cce03fb2e435dcbcbfba01537e7a6762e55e7ed22528303704beb5ae381f2e181056f25133273cf17ddf2b06e2d9477f2c09755fc8d9c73cb33100468c64131c686cac79fd384501e50f8b0bee28ba39583f42e4fd3799e24f60da5fd3c779aabf699ffd2321ed045a85bc6424f60fdcc49c1cb31f249a4236c09491768181b921f58602fd415c1edeb26f39324addff14771324737c6720cc92391b949dcb4212bd6931d4de51401e7f953b7b036b223f0af7a8e408b04ea635a23fa0709ba042a5d992954c09d8581dcccf52568ad27a1cc71d18aa2740f621212e7f4c5e5e5e5e4532d9a67ec2773ac21c8a4b002d6524f6182dd371735d2c2abe6c95c281c6fb1e976bc17e383fd52aeaaa9fbd4abb82a2cc65395f8c2cc7d8182a0d250c685cfcba93a951ee7c503c6e3eec236ce33e086c610728737c1c3b3a24252da7f21672d928ebda993a94c458ab990f5d19d80023c36aa16eafcab143f352e97d6409f3249941119bfd9f5f9084724d9ebad383b10f34d33ac830cce9e5cb8aecee6f40301cbbe309fd061534a7d0c3edaaea02a171d8b2349dbeec628520ac334a5bfe28a9d5f4c0d740f7c72d4d72d89a97326a03002d1ef38522bcd37b42847a314bd843ec88d1f2f9d39f57f2f1a13d0140a8847450448c880b3ae76531e95c4392973250\",\n        \"signed\": \"31f16a7caf2b74f65e057c9333a1a2633dac7346338f798510730eb8d5d325fc1080dd5aad5fce0534e9543f3c93586804464af5886e8644129c77ebaa485f0188ee2365f7cf9de33acd53564968b2dc7f7370b7e7033f4c663a88c25f60f7f711d61908ebf1f5bb72835553c8aa8c8e4fcdecd37978238289bf6ca84876d228217a28d81b0b457c922e91ecba8d3e1d2e6659c2b0aea051b9c2e09c7dfeb51d30ede767570341ffac1ecf0de20c82d1e9ed0775deac72da7c2dec234865dec83f6715e1c3c59de2033cc24d86bc2d31aa16649686ede0dbbd8964c3a64a3dca5588d7248b1f24df8d75f09aac62c07828ca431a3a2d77a60cc93cfa3495cabeb1904ed5b563984e8c20777bac8774108a64eda58fb320244a3add3e3e7a76cd137cfa4a09b6e6e93011ea0ae65171af130711766cd25b3c74ec54c0bdfa02b3120ac29087ebac9837fca65ba971bc4281dd557c500e225ea66c3c3fd52206c19a9f9395463169f8c7a846bd9f834d7f337d0b61fb30bce294f478ae1f1d977e454e433ee8729fb065cce03fb2e435dcbcbfba01537e7a6762e55e7ed22528303704beb5ae381f2e181056f25133273cf17ddf2b06e2d9477f2c09755fc8d9c73cb33100468c64131c686cac79fd384501e50f8b0bee28ba39583f42e4fd3799e24f60da5fd3c779aabf699ffd2321ed045a85bc6424f60fdcc49c1cb31f249a4236c09491768181b921f58602fd415c1edeb26f39324addff14771324737c6720cc92391b949dcb4212bd6931d4de51401e7f953b7b036b223f0af7a8e408b04ea635a23fa0709ba042a5d992954c09d8581dcccf52568ad27a1cc71d18aa2740f621212e7f4c5e5e5e5e4532d9a67ec2773ac21c8a4b002d6524f6182dd371735d2c2abe6c95c281c6fb1e976bc17e383fd52aeaaa9fbd4abb82a2cc65395f8c2cc7d8182a0d250c685cfcba93a951ee7c503c6e3eec236ce33e086c610728737c1c3b3a24252da7f21672d928ebda993a94c458ab990f5d19d80023c36aa16eafcab143f352e97d6409f3249941119bfd9f5f9084724d9ebad383b10f34d33ac830cce9e5cb8aecee6f40301cbbe309fd061534a7d0c3edaaea02a171d8b2349dbeec628520ac334a5bfe28a9d5f4c0d740f7c72d4d72d89a97326a03002d1ef38522bcd37b42847a314bd843ec88d1f2f9d39f57f2f1a13d0140a8847450448c880b3ae76531e95c4392973250\",\n        \"signature\": \"31f16a7caf2b74f65e057c9333a1a2633dac7346338f798510730eb8d5d325fc1080dd5aad5fce0534e9543f3c93586804464af5886e8644129c77ebaa485f01\"\n    },\n    {\n        \"secret_key\": \"c9d416830ae2028f2175d22b614c79198c670cfaa0e7a36150ef0fee21a95ce6\",\n        \"public_key\": \"6e3eb4d01873072df946f1792f7106330895e7a76dd9ae27f8a988039490fd4b\",\n        \"message\": \"ff9ad4837cd0bb77d6210fdddc755e6c0f1a73c2bcd03f7a5869e7342cfd73cf7086f865561560277bf6c3421a912d67658b1fa97057c496f4be8edcbe18b5ecd08a1e7db25223abda208fa531f4b280aa03b04b60603411d374ba7cbb020bb9a8ce4c0e45a7e132144843c31f8b45c58eb3ea853c2ceb61376e9df81d9778e721adac77b50354937f34372fccd575e88d9d058e43df942f2c43b523c8098e6dd9e6bd21d5a649b472d41e345fcd5efddd49eab30270cd8788404f28516e09d3acc40048b39d3246f757e482e1459c626b799e04d06727137371e120afb9fec39a25f4e6764bf9792fe492ee0f210b57db9ebb9e8ef41b02c7fee9edd4b6174c570de020a391287133fe8ccb41a83f91bd22382b21e1d7ebc2c7e5018ef5142d82637d02620fbc0569cc09c44e911112bbae99064d68d1c69e77c9930b0de030c8c1d748c414059d5e299b7edc08940651894b303a2b32dd2c365a067c9723585594644d3ee8de1a51faea0e650f2124885a94cb99eb903b7d4579bde591497d953930d363dddbdac627b97a91f49682df8e7250a7073d383a7a22cf113f2858ce6b632a2892c4e88aa9a0d289eb57629b008d3b1b6081e6fe5d3c0a6c802189b5f108e766319e15b33eaa5b8ced4027eaec83b4ac68b14b8298bc51cd8eb3809b7a2d684fe32bbd9fab5c918eeb17cc444d73f730d4c8cc057bd3a2f1f0aebb61632934e61702168829cd7e91de81509629d01a8cdefe0d1ac49e21f0c5fbe1b2244827268a0a27357e158bd76884a21e7f1fac1b6272166d5a9f64f9b672989a8762f512bf1df4b2ab699765f2cd8396f476e7f59995dee7d890207eff0fd27263ec232e37cfedfe7c440555d4ca74e52da246c4b83757beafd2ab2a51efe160bb02b98c26d6b2c3f0c1aacb2f3c34a5b2a3b66fee175b787548073d8b5777c6be880bdc196b3374a2154f94d9360f7755ac6815a28af296271e22a8f23543c74955a609125b02a569218011420295ccf0d7356999a5b895cc88483fadf7970cec6c64240f7079fdb15ffc5c4227e53926d278ba0fed3c3993bc86822823dd581a32ab2e3a07f79430224b274eadd845598a7d1d89676aaf23677774b7b0583bcc83599d155d14b09adcf49ed505e8\",\n        \"signed\": \"47faad4e655293eda156b2a1fabbfb7e009fc290aafedbd5652114a47853bc77a8233a2b179f605477d787878cbb15ea6124df8dc57b2ce7be7d18b7162fb50dff9ad4837cd0bb77d6210fdddc755e6c0f1a73c2bcd03f7a5869e7342cfd73cf7086f865561560277bf6c3421a912d67658b1fa97057c496f4be8edcbe18b5ecd08a1e7db25223abda208fa531f4b280aa03b04b60603411d374ba7cbb020bb9a8ce4c0e45a7e132144843c31f8b45c58eb3ea853c2ceb61376e9df81d9778e721adac77b50354937f34372fccd575e88d9d058e43df942f2c43b523c8098e6dd9e6bd21d5a649b472d41e345fcd5efddd49eab30270cd8788404f28516e09d3acc40048b39d3246f757e482e1459c626b799e04d06727137371e120afb9fec39a25f4e6764bf9792fe492ee0f210b57db9ebb9e8ef41b02c7fee9edd4b6174c570de020a391287133fe8ccb41a83f91bd22382b21e1d7ebc2c7e5018ef5142d82637d02620fbc0569cc09c44e911112bbae99064d68d1c69e77c9930b0de030c8c1d748c414059d5e299b7edc08940651894b303a2b32dd2c365a067c9723585594644d3ee8de1a51faea0e650f2124885a94cb99eb903b7d4579bde591497d953930d363dddbdac627b97a91f49682df8e7250a7073d383a7a22cf113f2858ce6b632a2892c4e88aa9a0d289eb57629b008d3b1b6081e6fe5d3c0a6c802189b5f108e766319e15b33eaa5b8ced4027eaec83b4ac68b14b8298bc51cd8eb3809b7a2d684fe32bbd9fab5c918eeb17cc444d73f730d4c8cc057bd3a2f1f0aebb61632934e61702168829cd7e91de81509629d01a8cdefe0d1ac49e21f0c5fbe1b2244827268a0a27357e158bd76884a21e7f1fac1b6272166d5a9f64f9b672989a8762f512bf1df4b2ab699765f2cd8396f476e7f59995dee7d890207eff0fd27263ec232e37cfedfe7c440555d4ca74e52da246c4b83757beafd2ab2a51efe160bb02b98c26d6b2c3f0c1aacb2f3c34a5b2a3b66fee175b787548073d8b5777c6be880bdc196b3374a2154f94d9360f7755ac6815a28af296271e22a8f23543c74955a609125b02a569218011420295ccf0d7356999a5b895cc88483fadf7970cec6c64240f7079fdb15ffc5c4227e53926d278ba0fed3c3993bc86822823dd581a32ab2e3a07f79430224b274eadd845598a7d1d89676aaf23677774b7b0583bcc83599d155d14b09adcf49ed505e8\",\n        \"signature\": \"47faad4e655293eda156b2a1fabbfb7e009fc290aafedbd5652114a47853bc77a8233a2b179f605477d787878cbb15ea6124df8dc57b2ce7be7d18b7162fb50d\"\n    },\n    {\n        \"secret_key\": \"2d277dd55f57195ec072b47cb1448cb582c835739e6c98ba71ab128f70ce6b79\",\n        \"public_key\": \"dfa92593ef0f0d974a1137830ad13848afef3b810c2a21bf779178ce4b3ab974\",\n        \"message\": \"14549eddd5f2b7905dda19d74ab207aac6fb3e3df3295d845231ef3aea6e1f04ee033c9038dcb4bd3d5e452c54834d0ff2b7de3f322e5626949cd61d6e890138ff0ea8ad846e8fe887aee15fc48bbe4fba42455f5c17457ae789b405af859611fe1f8746185a65aef2134ea4d8f398d48df7c1bba4304408ae7efb35292409d508dd55ce21de8c28160dc9e877700c763d06b01b8542052d7ddb633554e3584279c796937023c8eac37277be2b8204ff3e0e1031190a01014cf5f5b4d7ad996727f97531e0355b87c9e611525aad079958e9afe2ab10e4a3e7a1b6ba0aff815da2cd81ea9eb9f536986633f316dd06c2503c6b198dc59304807b98b42935f51f637ddb59e233fed566439c1fe96cdaafa49f4412d0c1e654d8c69042470b3a59acb6bf67e40b38a77067d5997b8d35ed61d6eb3cc78b8bdcb9574b1ced9f6f339e9e38f94146ef63f049e6b802bfed2a51ab42e7d489f316ff4d1cd898bcf8505651687440749c0fb7a57dbeff72e64689faa41c07b4ade59933d2fac6d573deb739549eb75f1e6f7385d8c6142894973ed685eb8ed080c2a49f3ac6571161af96635ad057df1486d396773ac8983210978986e1bf21a20806d667a48a555a963221d50614a8976b2eec97512db11a358194492ab5455801baa14a511b26eb0c68289d790523712f2ff8709892695c4db9ad310df8c6ee7bd83c871f05aec33b7ad326f446692a42f7222376246d536a326c4d73eb572feada11b8ac7114f6cb444ca278fcf07b970d2ad465372a687d36b7daac478748ec6a932da20843948efa393097814272e5ca1c73e711973a52683f98c01e55241c154d28e38d3edfade2303a4e7c45c2a7a1c996ee1137af864a98b69809fc9214eea8cf3afe842fee3eb9a9322c3b82fddb05d4d1a2de09c1ce72734453a8dd3a8920d0d0ac96ef778b9e02c6a3f12872e17d3a81ba75fd233baadbe216ea0a58e9dda00840870208ae413540030b3c05e5d0b832df87c8ee7f153487aa11bad9f139c7dd4bcf418f4bcb95bee857d0e96084472387cb39127a947134501963a7071bdb34de6961be2b6b06e403e75918e6f69d08021cf2a8acb80a0111f4d50610c152d39c6621c0578ac689959b1ce6f376f43d18af062e4a\",\n        \"signed\": \"73c1060649a7c014ed01945851b53e285324e60d061c831dda41f033b5658306a1f112327afe93caa921020730aae0069c9a2b45eef55cbb4a5a9cd46cda800814549eddd5f2b7905dda19d74ab207aac6fb3e3df3295d845231ef3aea6e1f04ee033c9038dcb4bd3d5e452c54834d0ff2b7de3f322e5626949cd61d6e890138ff0ea8ad846e8fe887aee15fc48bbe4fba42455f5c17457ae789b405af859611fe1f8746185a65aef2134ea4d8f398d48df7c1bba4304408ae7efb35292409d508dd55ce21de8c28160dc9e877700c763d06b01b8542052d7ddb633554e3584279c796937023c8eac37277be2b8204ff3e0e1031190a01014cf5f5b4d7ad996727f97531e0355b87c9e611525aad079958e9afe2ab10e4a3e7a1b6ba0aff815da2cd81ea9eb9f536986633f316dd06c2503c6b198dc59304807b98b42935f51f637ddb59e233fed566439c1fe96cdaafa49f4412d0c1e654d8c69042470b3a59acb6bf67e40b38a77067d5997b8d35ed61d6eb3cc78b8bdcb9574b1ced9f6f339e9e38f94146ef63f049e6b802bfed2a51ab42e7d489f316ff4d1cd898bcf8505651687440749c0fb7a57dbeff72e64689faa41c07b4ade59933d2fac6d573deb739549eb75f1e6f7385d8c6142894973ed685eb8ed080c2a49f3ac6571161af96635ad057df1486d396773ac8983210978986e1bf21a20806d667a48a555a963221d50614a8976b2eec97512db11a358194492ab5455801baa14a511b26eb0c68289d790523712f2ff8709892695c4db9ad310df8c6ee7bd83c871f05aec33b7ad326f446692a42f7222376246d536a326c4d73eb572feada11b8ac7114f6cb444ca278fcf07b970d2ad465372a687d36b7daac478748ec6a932da20843948efa393097814272e5ca1c73e711973a52683f98c01e55241c154d28e38d3edfade2303a4e7c45c2a7a1c996ee1137af864a98b69809fc9214eea8cf3afe842fee3eb9a9322c3b82fddb05d4d1a2de09c1ce72734453a8dd3a8920d0d0ac96ef778b9e02c6a3f12872e17d3a81ba75fd233baadbe216ea0a58e9dda00840870208ae413540030b3c05e5d0b832df87c8ee7f153487aa11bad9f139c7dd4bcf418f4bcb95bee857d0e96084472387cb39127a947134501963a7071bdb34de6961be2b6b06e403e75918e6f69d08021cf2a8acb80a0111f4d50610c152d39c6621c0578ac689959b1ce6f376f43d18af062e4a\",\n        \"signature\": \"73c1060649a7c014ed01945851b53e285324e60d061c831dda41f033b5658306a1f112327afe93caa921020730aae0069c9a2b45eef55cbb4a5a9cd46cda8008\"\n    },\n    {\n        \"secret_key\": \"428066c52445726d0ea2007e504637274d84ee232325b505f2c516357f807583\",\n        \"public_key\": \"dd40fe8f67c665613b3c459f6ace8dc28d34e0e77e2f6aa060592819be6a9d68\",\n        \"message\": \"e2796c50d93df812bca41bf2a1e1dd737d8cf6f6b4f76242e39178186758cbae0884e60c6b4aaaddaec9a899a912e5c5b9804d7b0497bab4458c585d4f259222498ce9e80eb6a7979bbed6d52cc38072f745cb2c63e663bc3b9d6caf012a607f6d3b706e1557578717ecbb971aeb7c48e1df95711c550e006993bffba911cb64ad52d517ed18be82369e815819d3175947d4a35b2cc7b9dc6c10051326b3f1dc1edb1b68ba015ff7ca1dc361d8967abcffd3c31f7d6b0cb1396ae541f29759c4130be52ecc11d99261c365bf7cdec781494c5fa0526db4dbbe660a432be56043c66ea07c25627a5f72b78123dcf986ff71ed1affd1659b1393d9621f711dfa63eada383430797058f1566a00052d67ba53c1237b5691de3b039fd4476f1151e5ed5f5a98672fa33a1d854fa01566b33231d46acd7f34b8034479981853764dab87f49844cb62c63d536faca920447d8cd1e8113edbc83e4a6b7815e180cd78b933d9687fd5be99d0518a44662989bc64011124f187d43979994a95e0c903a006c1c0bef1c0f3df1eb700f980c28c3c1e997d0c56d113dae196882b05018fcab314d8117fafbabe7700b932d47c57362b2035eddce2d2ef33641ea90c3ea3fec6ea5b87e161014c4f8214fd03cebf94abe122537a98703239df5821c5ab633f98365cc636e3f1d2f74e0ff8f1fee06a3f73907ee504b310fd5224ad4d05cd23c356df8b34647298c49828725ba5fd60611e829b6337bcc9dcf8e8971cab3ee9c26337d38dfdfa036bf6096b635ac1bd5525ecd377a15272a8ac9bbef133107a42258d8b19ec69dc4261be5300a2d2d5ca99f31efdf259f9d079869a34413779f3028824d747686c460ffc496f2010f403e903e27a87dd075ae0a7f1689416d31bcc15f490caf975c40e715d549903e8bc0f7d9141e020f410f3ca2b2c0797ca0dc8d7392bff243528c7f3be138997185a4b36f45376d9fd70ba20989d2d1a911d4b98d160d2b8de592de2f4c04f35860df320c548440d5e3a346a14d3a63fe485c2889126b7f41d55a6eb23d5620babf8564aa79d156e983f36d9ed498da9ca888d946b53cc4768a5892d52d541526960282524ba6194da65941d1ea30f806bb6d97c7488b93fd0a770a9b15efcd12c5c4694\",\n        \"signed\": \"c938829f598b1ff1b8183360d223f43c594730606876a99a3f31b2065d04e6f075d1396b3c8cffb0e1e2eaabda7da5e789ccd1c020835fe3a71dcdb6af03960ce2796c50d93df812bca41bf2a1e1dd737d8cf6f6b4f76242e39178186758cbae0884e60c6b4aaaddaec9a899a912e5c5b9804d7b0497bab4458c585d4f259222498ce9e80eb6a7979bbed6d52cc38072f745cb2c63e663bc3b9d6caf012a607f6d3b706e1557578717ecbb971aeb7c48e1df95711c550e006993bffba911cb64ad52d517ed18be82369e815819d3175947d4a35b2cc7b9dc6c10051326b3f1dc1edb1b68ba015ff7ca1dc361d8967abcffd3c31f7d6b0cb1396ae541f29759c4130be52ecc11d99261c365bf7cdec781494c5fa0526db4dbbe660a432be56043c66ea07c25627a5f72b78123dcf986ff71ed1affd1659b1393d9621f711dfa63eada383430797058f1566a00052d67ba53c1237b5691de3b039fd4476f1151e5ed5f5a98672fa33a1d854fa01566b33231d46acd7f34b8034479981853764dab87f49844cb62c63d536faca920447d8cd1e8113edbc83e4a6b7815e180cd78b933d9687fd5be99d0518a44662989bc64011124f187d43979994a95e0c903a006c1c0bef1c0f3df1eb700f980c28c3c1e997d0c56d113dae196882b05018fcab314d8117fafbabe7700b932d47c57362b2035eddce2d2ef33641ea90c3ea3fec6ea5b87e161014c4f8214fd03cebf94abe122537a98703239df5821c5ab633f98365cc636e3f1d2f74e0ff8f1fee06a3f73907ee504b310fd5224ad4d05cd23c356df8b34647298c49828725ba5fd60611e829b6337bcc9dcf8e8971cab3ee9c26337d38dfdfa036bf6096b635ac1bd5525ecd377a15272a8ac9bbef133107a42258d8b19ec69dc4261be5300a2d2d5ca99f31efdf259f9d079869a34413779f3028824d747686c460ffc496f2010f403e903e27a87dd075ae0a7f1689416d31bcc15f490caf975c40e715d549903e8bc0f7d9141e020f410f3ca2b2c0797ca0dc8d7392bff243528c7f3be138997185a4b36f45376d9fd70ba20989d2d1a911d4b98d160d2b8de592de2f4c04f35860df320c548440d5e3a346a14d3a63fe485c2889126b7f41d55a6eb23d5620babf8564aa79d156e983f36d9ed498da9ca888d946b53cc4768a5892d52d541526960282524ba6194da65941d1ea30f806bb6d97c7488b93fd0a770a9b15efcd12c5c4694\",\n        \"signature\": \"c938829f598b1ff1b8183360d223f43c594730606876a99a3f31b2065d04e6f075d1396b3c8cffb0e1e2eaabda7da5e789ccd1c020835fe3a71dcdb6af03960c\"\n    },\n    {\n        \"secret_key\": \"3145bc68d82979408e4657b775f150c6d28a324d746ea6de90fd72b17a257982\",\n        \"public_key\": \"c776186ce47f30ad08fa1d2c616a3644665ba54ff730fc2f4db1dba38ddeedca\",\n        \"message\": \"2ea8dce1487f45d6ff8eb83c54fb7edd76ad6e608bb8daf1a1823da4f4e4e9863173897c197ac65804823bca95091f59e86d63c18dbcdb85743f8893ee694d815601f8f22f4d7df087f0114bb26c3795e1fe4b7f4a8fa31fd9f4ff10fe5dd452c54c5578c752f888213076be467ba30d2e2fbbee877c4be9b6ec4f04021c006f9266311943cab7cea99a2acebb69eec3e618c131f97430075f7975e39f26d5315178b69a1ddf731761051b93fb8df7e0e8b41e82e7f4f75e91d6c890b14ca533e094eb8ea4486d387185966c98295d3f58b17eef6cc3b4d07e93a3d9f4772ee52f18a5bb30aa3972850e658170bddb676f33266c9fd10f5990bad891f0ceb782736b40f01bd86509b06304a96d93da233dbed18afa1818aaf57af9bdbc867b397ff235a83e857224b15065225eec039dd4e2d69a04ee10bea0695041eda59b058ec05f49048ee324d16c4d6107b6ecd04875eb744e9365471b4c5fe6611b261893f9d2b128e135f92e474156b271b3c82e9a7663dad4953d30e10eda0862607dec3372b39970f2a84b12f60e6dae7f31799086d38a7e34948419c1b07f44c2159c86b8c0cfe8747fc2bad5bf475356cfe69de2dc6ad5a519fd65c12564701c05f7c277ecafcf4c87b148df1f9879a9ae443c55aea52138c6fa01ef0c3abb5f2df90a57ab6624178c737b54915b7aa29ea78e8e49ef5a816d8a92c2f81b8a19632779c892d66f753d518c41cccc9e593e50742625bcafa468805c37a21f8e29a6960ddf5c5e5ca14a7b052a7b6015697a0210ed6f0143e6b484c3f5b3b4726c607d07bfb3d54a09c98043f21dcc5cc20bb4754e2e5a73b2f806c2204b72f36ab9e96a62c6277c0ad66be7abffc163b4e8fafceff5e202e5943f4f0e6b92b4ddb953cbb791f83166036938e6c44ad91a596a5573440fb30741e660b6cd5f86ffa746e6e972b805c10b7b7b9a63c0551db8eb4f8400cde2868c0d0d4eb4cf117f8ec4ab9744fc5879dea7f0ef16c291d55c17f08b731b7c65d0c441b63bc8ff5e94904c026a1361dacc80a93a9b9fba3b403617aeb94a568541848011954234aead700f034c47c7def877905255f18bdb9a257ce5bdcf0e17670cdaaf13b1c7e09d58f92a9663af239e22078e180a23ccb6f64d64\",\n        \"signed\": \"24a433337683bc71a6ca3bccd8cc2400c24464fa67714b46515f2a1432712705d570614db6d26bbbd3f0267c1427ca1c2f40dc9a6f1fb0f0fc714a02e24b47082ea8dce1487f45d6ff8eb83c54fb7edd76ad6e608bb8daf1a1823da4f4e4e9863173897c197ac65804823bca95091f59e86d63c18dbcdb85743f8893ee694d815601f8f22f4d7df087f0114bb26c3795e1fe4b7f4a8fa31fd9f4ff10fe5dd452c54c5578c752f888213076be467ba30d2e2fbbee877c4be9b6ec4f04021c006f9266311943cab7cea99a2acebb69eec3e618c131f97430075f7975e39f26d5315178b69a1ddf731761051b93fb8df7e0e8b41e82e7f4f75e91d6c890b14ca533e094eb8ea4486d387185966c98295d3f58b17eef6cc3b4d07e93a3d9f4772ee52f18a5bb30aa3972850e658170bddb676f33266c9fd10f5990bad891f0ceb782736b40f01bd86509b06304a96d93da233dbed18afa1818aaf57af9bdbc867b397ff235a83e857224b15065225eec039dd4e2d69a04ee10bea0695041eda59b058ec05f49048ee324d16c4d6107b6ecd04875eb744e9365471b4c5fe6611b261893f9d2b128e135f92e474156b271b3c82e9a7663dad4953d30e10eda0862607dec3372b39970f2a84b12f60e6dae7f31799086d38a7e34948419c1b07f44c2159c86b8c0cfe8747fc2bad5bf475356cfe69de2dc6ad5a519fd65c12564701c05f7c277ecafcf4c87b148df1f9879a9ae443c55aea52138c6fa01ef0c3abb5f2df90a57ab6624178c737b54915b7aa29ea78e8e49ef5a816d8a92c2f81b8a19632779c892d66f753d518c41cccc9e593e50742625bcafa468805c37a21f8e29a6960ddf5c5e5ca14a7b052a7b6015697a0210ed6f0143e6b484c3f5b3b4726c607d07bfb3d54a09c98043f21dcc5cc20bb4754e2e5a73b2f806c2204b72f36ab9e96a62c6277c0ad66be7abffc163b4e8fafceff5e202e5943f4f0e6b92b4ddb953cbb791f83166036938e6c44ad91a596a5573440fb30741e660b6cd5f86ffa746e6e972b805c10b7b7b9a63c0551db8eb4f8400cde2868c0d0d4eb4cf117f8ec4ab9744fc5879dea7f0ef16c291d55c17f08b731b7c65d0c441b63bc8ff5e94904c026a1361dacc80a93a9b9fba3b403617aeb94a568541848011954234aead700f034c47c7def877905255f18bdb9a257ce5bdcf0e17670cdaaf13b1c7e09d58f92a9663af239e22078e180a23ccb6f64d64\",\n        \"signature\": \"24a433337683bc71a6ca3bccd8cc2400c24464fa67714b46515f2a1432712705d570614db6d26bbbd3f0267c1427ca1c2f40dc9a6f1fb0f0fc714a02e24b4708\"\n    },\n    {\n        \"secret_key\": \"5a25ea5e182d9bf8e930a20b6cf55e24e83862789b3839b1ce9a71e938c42d37\",\n        \"public_key\": \"c981fc36f1a6d5f7d451cd5ef39cd3ab02087fcc6af27dd78ea827497e779e21\",\n        \"message\": \"214dd1927f2cacd9888714249b85434602ac78453b4af5386eee39295d3d5a2267806eb0cff2c132d364c2420d04e3f6cc0a967bf05a10ffcf1217bbf315e75b98060fd458d67ebaad9380f4adc4dbdf74cbf1c6479202bdd7fed3a946697dc38444d88bfe51d41d7a9b38da60b850c56b48ba984f6a1889514955c0dadb69a8c736cc76cdc49f13f85a8bfb7928ff0a0c0c03f17c74b5e1062d7553fbeb9dd3d5081de1dfd8a6a9976697c6a259bcf7d4bef1c21e0aaf3298b0421b919fddfc1dcb3ec683d86ff3d423d71c8f2d723a42ff68d82e9f391749b82998dcfa112160f52a413a23d95fc42c3bd22384bad77754a710d8b9f84ae0a802fc46509e7f2b07079012b43bfeeab719bde56f00e59b8edf1c472883b1985b2fa699a1ae90cf45d7ac580ceb5f2797def5b8bf4f2b9b3519a727b9f2cd1256a2f076ed2296495b5c2df7887ff89e88e236a14cde6324f43d68d90172b0b88bd28803e999dbedcc501db654544e171ec1f9f32d4d3321d589392e03ca659f96752e1f08a55db553d866985541f5bef84ce2ee323e17d1f7dc164b50515a287d5305fc28c5983b9e5398b2407ae47296fe4a481d22ffb4b865a66b97a6c27935dd8eb86994b79d368363713f101dc37f429eee0fee2441c2dc17bf43924f0c044f143290eaf3f9ee4d946dbe45831a0d83c076e751c14f3b1a7267f5446c188698d2b46d87e6f3b20bb3fdafe24cc096bc312d8678b38a80c3f052a0c96d5ad87a5dd8c133cc9a15be33574cd94308c24dec1a9bdf189ba687199f72ef6709878e10f87bd8a03dc84c8fa96420285898ca3211d8b0ccef64011ec24f38e574da34dab9d2f002105227890f92488c621e5713e47dbcb1a82a6da60d8b2201eb29d494493360ed5a3f4b5225eae7707ee0b4c0407305c16754c7f630fc85c13e4917047bcff3b2a293fe955506c7264ea65bf3a9b25acf343600d8fa0c7c1a290d0271101b7f40b96e7fdaf29def9d9327a5ae05446cb5a6d322453a8b098bcf3aee1f704e14d00be342b8934d19e529218872ea3a2fb2124b52667c01fca5841c66e1e64a1e680e09ba186e04d105186cf6eb728b9d502a66b829fbc992a3881004ecdc80adfd044eda880f8af72a14fb550d7cc74194a945207d\",\n        \"signed\": \"a4f35b49d7e198e5d326e353fbb01fa13b6ae260d1e48e30c1b967737a5e79936c97ca2ba799ca34e5e788cea5ac8ed10d5cd15dae53e42432321cc26dc99809214dd1927f2cacd9888714249b85434602ac78453b4af5386eee39295d3d5a2267806eb0cff2c132d364c2420d04e3f6cc0a967bf05a10ffcf1217bbf315e75b98060fd458d67ebaad9380f4adc4dbdf74cbf1c6479202bdd7fed3a946697dc38444d88bfe51d41d7a9b38da60b850c56b48ba984f6a1889514955c0dadb69a8c736cc76cdc49f13f85a8bfb7928ff0a0c0c03f17c74b5e1062d7553fbeb9dd3d5081de1dfd8a6a9976697c6a259bcf7d4bef1c21e0aaf3298b0421b919fddfc1dcb3ec683d86ff3d423d71c8f2d723a42ff68d82e9f391749b82998dcfa112160f52a413a23d95fc42c3bd22384bad77754a710d8b9f84ae0a802fc46509e7f2b07079012b43bfeeab719bde56f00e59b8edf1c472883b1985b2fa699a1ae90cf45d7ac580ceb5f2797def5b8bf4f2b9b3519a727b9f2cd1256a2f076ed2296495b5c2df7887ff89e88e236a14cde6324f43d68d90172b0b88bd28803e999dbedcc501db654544e171ec1f9f32d4d3321d589392e03ca659f96752e1f08a55db553d866985541f5bef84ce2ee323e17d1f7dc164b50515a287d5305fc28c5983b9e5398b2407ae47296fe4a481d22ffb4b865a66b97a6c27935dd8eb86994b79d368363713f101dc37f429eee0fee2441c2dc17bf43924f0c044f143290eaf3f9ee4d946dbe45831a0d83c076e751c14f3b1a7267f5446c188698d2b46d87e6f3b20bb3fdafe24cc096bc312d8678b38a80c3f052a0c96d5ad87a5dd8c133cc9a15be33574cd94308c24dec1a9bdf189ba687199f72ef6709878e10f87bd8a03dc84c8fa96420285898ca3211d8b0ccef64011ec24f38e574da34dab9d2f002105227890f92488c621e5713e47dbcb1a82a6da60d8b2201eb29d494493360ed5a3f4b5225eae7707ee0b4c0407305c16754c7f630fc85c13e4917047bcff3b2a293fe955506c7264ea65bf3a9b25acf343600d8fa0c7c1a290d0271101b7f40b96e7fdaf29def9d9327a5ae05446cb5a6d322453a8b098bcf3aee1f704e14d00be342b8934d19e529218872ea3a2fb2124b52667c01fca5841c66e1e64a1e680e09ba186e04d105186cf6eb728b9d502a66b829fbc992a3881004ecdc80adfd044eda880f8af72a14fb550d7cc74194a945207d\",\n        \"signature\": \"a4f35b49d7e198e5d326e353fbb01fa13b6ae260d1e48e30c1b967737a5e79936c97ca2ba799ca34e5e788cea5ac8ed10d5cd15dae53e42432321cc26dc99809\"\n    },\n    {\n        \"secret_key\": \"42335c30b3f6b359cef5aab6a3ce2858a151b7a4fd78d2fd3ee36fc29d249404\",\n        \"public_key\": \"301c515a02a4c66bc6401080c6ca7923b7831e3c9a72b55b14027eb2e7b3b152\",\n        \"message\": \"6da2251e6f559536b09bfafb8160a2e8102d31f8b59324083e5227b20c3e5c3a06e2396768dca3ec76dc7fc0eb3d145e62ed07fc1a8b1b2e347013a0527274d0b234fe725026a9d128f8df20dbfa3b6503818edebd7f24934080945a7e1ea02273fe48b6ed1e83fd168d7973fbb7941b4037d3cda555e0e89c2b943fb1e20765ac7d4fa3777f35a0a8bc118f599c847be3fdb2d8e201ae12a30bdefb034ff24e3e2e701a0d1733734078bd1f9a69bbc667e461211f2c769d29db7c4d62d6b1b92b56f5f18a931a926064b78da146e18b48139b9b39862aec37bcce12cb789429e68ea38112d0b5cce30bd2d26c5f7fd415daf7ca317b3368b7617d4525e5bc97d9461d5d64f6b5d318d0bc3b76f25b0605426909f2aa0cd667a4f0e075b9a9fb2e9a6c82704d8a9f1666844edc32f63a3d4e0fd9fdba30b51b3336b96e9eae392a342de49e9b5fa0f9b90171bde09cf1e946499140008159eb1865563c28394b03a8d7a552271b2876687566b80fd3be2b66332fcad196cab8527c56e21536a141652cdc7fa745b26a331d787b93e5e816d8d851a58f6ac07a5827fcdf472e8685433a40cac0c49aa569319a2e57b41c9998165e69723ba77e5c0423c4b4ca07187bb7442e7d31caacb27700c71ae48cd055ed2fe4da363f44821124cca1bf2e63d9b8abd2fa41b1422f52d558bc5f110c863cc600864984ed259b73cddd5796b32979eddf76a07bc59b7368c48e129ecc0d4535dccee2c3b8e56de50e6f5cc6ea515cd6a0ebdf1ca79aa2794821ad2e109edda450c9fc3c84d8c96bc38d4b437a738f818b4ddcb684383c09b11b36052e9d2f76a61eb4d62049ced5f61662c4b9ecd24a67f4519d46528c5b2eb21005f49c73a3370c68e37ac2b18d481fa10f96714fe05c168df11cda54f14f4937e9fce1f516c0371b36a2c0a050bac7fa5122a6e35ec9c40436585f316e6c911bdfd7db4b80b4306479b82a2b243a52b2d2b62742ed11282790cf6fdc7c9c824364cf25636a855150bddbdf7e640f9f952a947ec7974925e8245068b292101b1f4b2018e85d078c2feef4492349729ad4acb38f1c7c0270b61d3dfd7636c6cbf181e4c8a0e64fa06132553c2b9db7019e3b3c485d8d5b7dfd5f515e4d71ede535ae7f2aaedc23\",\n        \"signed\": \"67b0f17449039e8c797bf913aae6e4f0bb99c74d6d10c973b990ffe03e7ee4ab5b35806db15a98c0846a827e7bcd539cd3bc09dd118ab3e52663a357b12991076da2251e6f559536b09bfafb8160a2e8102d31f8b59324083e5227b20c3e5c3a06e2396768dca3ec76dc7fc0eb3d145e62ed07fc1a8b1b2e347013a0527274d0b234fe725026a9d128f8df20dbfa3b6503818edebd7f24934080945a7e1ea02273fe48b6ed1e83fd168d7973fbb7941b4037d3cda555e0e89c2b943fb1e20765ac7d4fa3777f35a0a8bc118f599c847be3fdb2d8e201ae12a30bdefb034ff24e3e2e701a0d1733734078bd1f9a69bbc667e461211f2c769d29db7c4d62d6b1b92b56f5f18a931a926064b78da146e18b48139b9b39862aec37bcce12cb789429e68ea38112d0b5cce30bd2d26c5f7fd415daf7ca317b3368b7617d4525e5bc97d9461d5d64f6b5d318d0bc3b76f25b0605426909f2aa0cd667a4f0e075b9a9fb2e9a6c82704d8a9f1666844edc32f63a3d4e0fd9fdba30b51b3336b96e9eae392a342de49e9b5fa0f9b90171bde09cf1e946499140008159eb1865563c28394b03a8d7a552271b2876687566b80fd3be2b66332fcad196cab8527c56e21536a141652cdc7fa745b26a331d787b93e5e816d8d851a58f6ac07a5827fcdf472e8685433a40cac0c49aa569319a2e57b41c9998165e69723ba77e5c0423c4b4ca07187bb7442e7d31caacb27700c71ae48cd055ed2fe4da363f44821124cca1bf2e63d9b8abd2fa41b1422f52d558bc5f110c863cc600864984ed259b73cddd5796b32979eddf76a07bc59b7368c48e129ecc0d4535dccee2c3b8e56de50e6f5cc6ea515cd6a0ebdf1ca79aa2794821ad2e109edda450c9fc3c84d8c96bc38d4b437a738f818b4ddcb684383c09b11b36052e9d2f76a61eb4d62049ced5f61662c4b9ecd24a67f4519d46528c5b2eb21005f49c73a3370c68e37ac2b18d481fa10f96714fe05c168df11cda54f14f4937e9fce1f516c0371b36a2c0a050bac7fa5122a6e35ec9c40436585f316e6c911bdfd7db4b80b4306479b82a2b243a52b2d2b62742ed11282790cf6fdc7c9c824364cf25636a855150bddbdf7e640f9f952a947ec7974925e8245068b292101b1f4b2018e85d078c2feef4492349729ad4acb38f1c7c0270b61d3dfd7636c6cbf181e4c8a0e64fa06132553c2b9db7019e3b3c485d8d5b7dfd5f515e4d71ede535ae7f2aaedc23\",\n        \"signature\": \"67b0f17449039e8c797bf913aae6e4f0bb99c74d6d10c973b990ffe03e7ee4ab5b35806db15a98c0846a827e7bcd539cd3bc09dd118ab3e52663a357b1299107\"\n    },\n    {\n        \"secret_key\": \"be6b2babddd2dca1b0e10d12d20a9ce29c6785dac1d60f2edfa94ac2784ba766\",\n        \"public_key\": \"398f22f0efbf8c38355e4791bf670898951fbbd5518f0e2a605d460023f613f0\",\n        \"message\": \"5c9295881b7a670669b04cbe0dabd89693b77f7cce0d4a33f52e02eb26959e713d9aef5f95442bdf91728383325202aaccc037477e3666facaf24eac9534879aa3efe18ffc1a5c54e39c7687d0937b2471bab389b646cbe6b3e5d5961ea63bd452b4743344ce4c793374523795c781ee84d511e2941119bad1f4a746ed9dba89c8d0751a6402718635f6e31d9e18681c6956c5373251d35f53baa1987cd448c9031a07f32c8029119de3a91631dede1d933e0fa32629afe1b42eb591c22f87331e93cc083c23f64a6e5e586ff31cc04e423c56ae3f6a73946c48de4d85ab0017ba24456d69b59dca6d403b64b07c40d3b90e1223215e3f7e876c6701111e37e517770887310ca856f009a0d60654835d94e6587a439da5db0a0c37d7c9d37ca1d703e1b3227631adacaa79421a1c439d60349ae57741b7a8ad09ec293123030bf6bac0689e531ca7e72718223f9ea43becb0ee9d9c1ab845ed1cae443e3c5d4a9b1ede6db3417c3ace281143f42d85f599b3b9d3d05fa0ed07c1ec35ffab0305168b4e56e58afa0617f9a86b1b5b201dccb072b4cef0bb7b95c52daeef9d9e7424a5c0f148f9ffe60a5b23e0ff82c730992ac9c17f97f065cf0ad5377eaccb31d8bb923bd260ea119e6fa9bd6983482d70d9219102402dc6a3499193d0c1cd3ed2a66921a98df69b791413f4970bbce04f639af909c64f4560db0af6003dc46219e8ad2b372f8b5f81cfaa041ab71a348c931e8dfdbc409c22d7ee6e07626e104ec6cc7c6a4116177f93af16f124f196dab619b6f698c2d191858e960c2e947b51f3ac4838759c21fef7ebae35da24f55ebda9b9879aea17a6d8d927de487b175fd7faa21438a20923ddbbca72e6726934bd6c21e8118019f65b3810a07fa27b1cba64d0f39f0bfd49dcfafdefe379bdea82f31a9c39f7e81d294337d10f1e9d8b50eba458ce7b753d36968538513eddb0e84534411c4af3f0214610ee3901a0ebf316173ccaf15cd7ee496dbfc2465eb834df62029d621fe911824d7987df2d46346b4dce1ece7d19d55118c037c9955111d07f1fc362c739f1ea5b275c71c0aebf59655e2def16e123b3eb2526c3ca5e83cb24d5b68d7ac40a67593384c563afe0b552adaf60805035be97b80676adeb1576520833\",\n        \"signed\": \"702ab9acbfa75ea2adbe4be2b6847625aeb409eef9596fabe39d2c533a03431e5e579552e8a64fc4fb7d926aa8fffe0640698464c4454ce35fe83ff263051a015c9295881b7a670669b04cbe0dabd89693b77f7cce0d4a33f52e02eb26959e713d9aef5f95442bdf91728383325202aaccc037477e3666facaf24eac9534879aa3efe18ffc1a5c54e39c7687d0937b2471bab389b646cbe6b3e5d5961ea63bd452b4743344ce4c793374523795c781ee84d511e2941119bad1f4a746ed9dba89c8d0751a6402718635f6e31d9e18681c6956c5373251d35f53baa1987cd448c9031a07f32c8029119de3a91631dede1d933e0fa32629afe1b42eb591c22f87331e93cc083c23f64a6e5e586ff31cc04e423c56ae3f6a73946c48de4d85ab0017ba24456d69b59dca6d403b64b07c40d3b90e1223215e3f7e876c6701111e37e517770887310ca856f009a0d60654835d94e6587a439da5db0a0c37d7c9d37ca1d703e1b3227631adacaa79421a1c439d60349ae57741b7a8ad09ec293123030bf6bac0689e531ca7e72718223f9ea43becb0ee9d9c1ab845ed1cae443e3c5d4a9b1ede6db3417c3ace281143f42d85f599b3b9d3d05fa0ed07c1ec35ffab0305168b4e56e58afa0617f9a86b1b5b201dccb072b4cef0bb7b95c52daeef9d9e7424a5c0f148f9ffe60a5b23e0ff82c730992ac9c17f97f065cf0ad5377eaccb31d8bb923bd260ea119e6fa9bd6983482d70d9219102402dc6a3499193d0c1cd3ed2a66921a98df69b791413f4970bbce04f639af909c64f4560db0af6003dc46219e8ad2b372f8b5f81cfaa041ab71a348c931e8dfdbc409c22d7ee6e07626e104ec6cc7c6a4116177f93af16f124f196dab619b6f698c2d191858e960c2e947b51f3ac4838759c21fef7ebae35da24f55ebda9b9879aea17a6d8d927de487b175fd7faa21438a20923ddbbca72e6726934bd6c21e8118019f65b3810a07fa27b1cba64d0f39f0bfd49dcfafdefe379bdea82f31a9c39f7e81d294337d10f1e9d8b50eba458ce7b753d36968538513eddb0e84534411c4af3f0214610ee3901a0ebf316173ccaf15cd7ee496dbfc2465eb834df62029d621fe911824d7987df2d46346b4dce1ece7d19d55118c037c9955111d07f1fc362c739f1ea5b275c71c0aebf59655e2def16e123b3eb2526c3ca5e83cb24d5b68d7ac40a67593384c563afe0b552adaf60805035be97b80676adeb1576520833\",\n        \"signature\": \"702ab9acbfa75ea2adbe4be2b6847625aeb409eef9596fabe39d2c533a03431e5e579552e8a64fc4fb7d926aa8fffe0640698464c4454ce35fe83ff263051a01\"\n    },\n    {\n        \"secret_key\": \"b1e47ca31c64b68aafafb443512e66787c6592f334aa78fa219a3d93c33a4ab3\",\n        \"public_key\": \"58119b38e6a148a936bc5f92f4f29b982ff2cca64a5affa14ca1b6a62fe328c4\",\n        \"message\": \"767ec1b3daf204387f3fd3b20010781afb1f38f614474213287fff11307f5ff5ae7ec945a2b9b4870049d4532f8f61c1a7b5f211fca2e67c374d96219d8ea9de73f0e38704fc94c0e9e72f2e15daba3f88f749b1ed702660db1a352a2667d4dfd4e00a18efa4c6609ee9c9a88adacbbb985d3de8ddd17d4e4eb7cf74a1da91edb390852ea4cb9a424f7fa2229e083033a34059117e5efa7b6613d75e58b702c6cee5d004e8599b97503a5f10c4c4e5b9577371d3d05b2dfbf7cbefe6d092d65cbd405138d9b04c5186235983fab6d4ce85b636276206d74a2ee7db6164dac47cce78f50db99af6ac6e7064c13aab793be87e66289c94a09fb0a31d97971edd74ea9c0ce874d2b7d6c4abaeff07f870225151946a5c476f6b978996b87d8c984606c791287da6bad0aa44b0130be88671a556e2de35c4cb038ee781273530ace0a104c27809aee033c8bf9029d90fe7ba06aaa94e16a52c643dfd92a7624fbbee77a7158b2cc151bd3f61a1a76f32b28489307acf0dd8c26cc4adbbb8de430db4e4f58308b6ab90456111deac2978172fe1fc0ce498088add4c31c21f24279025feb48cbb7a920cff2d28710587af52c844db8a7aeb7df10d43411a3c8eeebb406d6efcb19248887d450b573d90305e1f23753e890511dcc77c740e316ad7f52d4902073db3998e4e4acc4e01885bd1188ecd6165aeded1e778702b6a6a79a94999102df72018f792f8f162007e812aef8f956e123282bbdbd0c35612c2d3473f944c6d76be9e86fffa46ccb1ae13505a4a81f31b8426b8b60de8e8a7c16d1e1665b271434665c442a9c6a977ce986f6993b7439af03b402eeafff1456d151526d9c58f515fd2485e0cbb324a503a8d491344cdb2aff4c41aa8e2ed66e58083bf0d2fbf4877c85a4bcd6b9cbb821242c94147e5fd8b7dd792ad0a28d49d41100b431bb4d8c7833d8505dd9e2649f9ca7051be68712ef3637102036b002649473ce259677d82c6062895e161928b752f13c91a45955e80f007de690edf8a0e5eee4422e162b9d2b4a921d3a64845793aa2229e9c239e57a6b1a90a5254c3512f99345315ac7d3457f9154296c66822abe184d64e572b9c38492958e21b0292675410e7348b2b718a0b7592caee94581a948d2f41fa03c61e\",\n        \"signed\": \"dfac86df586ec34c7cfea5d5a6cd1140e50b6bf050f8e41a190ebfd3b1432b95a57d5652dbae8f53e037ae326e7f18cfef7c779f40346f7c0d8644610593f209767ec1b3daf204387f3fd3b20010781afb1f38f614474213287fff11307f5ff5ae7ec945a2b9b4870049d4532f8f61c1a7b5f211fca2e67c374d96219d8ea9de73f0e38704fc94c0e9e72f2e15daba3f88f749b1ed702660db1a352a2667d4dfd4e00a18efa4c6609ee9c9a88adacbbb985d3de8ddd17d4e4eb7cf74a1da91edb390852ea4cb9a424f7fa2229e083033a34059117e5efa7b6613d75e58b702c6cee5d004e8599b97503a5f10c4c4e5b9577371d3d05b2dfbf7cbefe6d092d65cbd405138d9b04c5186235983fab6d4ce85b636276206d74a2ee7db6164dac47cce78f50db99af6ac6e7064c13aab793be87e66289c94a09fb0a31d97971edd74ea9c0ce874d2b7d6c4abaeff07f870225151946a5c476f6b978996b87d8c984606c791287da6bad0aa44b0130be88671a556e2de35c4cb038ee781273530ace0a104c27809aee033c8bf9029d90fe7ba06aaa94e16a52c643dfd92a7624fbbee77a7158b2cc151bd3f61a1a76f32b28489307acf0dd8c26cc4adbbb8de430db4e4f58308b6ab90456111deac2978172fe1fc0ce498088add4c31c21f24279025feb48cbb7a920cff2d28710587af52c844db8a7aeb7df10d43411a3c8eeebb406d6efcb19248887d450b573d90305e1f23753e890511dcc77c740e316ad7f52d4902073db3998e4e4acc4e01885bd1188ecd6165aeded1e778702b6a6a79a94999102df72018f792f8f162007e812aef8f956e123282bbdbd0c35612c2d3473f944c6d76be9e86fffa46ccb1ae13505a4a81f31b8426b8b60de8e8a7c16d1e1665b271434665c442a9c6a977ce986f6993b7439af03b402eeafff1456d151526d9c58f515fd2485e0cbb324a503a8d491344cdb2aff4c41aa8e2ed66e58083bf0d2fbf4877c85a4bcd6b9cbb821242c94147e5fd8b7dd792ad0a28d49d41100b431bb4d8c7833d8505dd9e2649f9ca7051be68712ef3637102036b002649473ce259677d82c6062895e161928b752f13c91a45955e80f007de690edf8a0e5eee4422e162b9d2b4a921d3a64845793aa2229e9c239e57a6b1a90a5254c3512f99345315ac7d3457f9154296c66822abe184d64e572b9c38492958e21b0292675410e7348b2b718a0b7592caee94581a948d2f41fa03c61e\",\n        \"signature\": \"dfac86df586ec34c7cfea5d5a6cd1140e50b6bf050f8e41a190ebfd3b1432b95a57d5652dbae8f53e037ae326e7f18cfef7c779f40346f7c0d8644610593f209\"\n    },\n    {\n        \"secret_key\": \"fbd55fa743c3a5910b3857dd0b6aa584f3b238de056b76ab7617aeb52638fef6\",\n        \"public_key\": \"a7a163c4183bd84b756df3c8afdfb9cd5b242352d9499ebdab90785c3bd6db2d\",\n        \"message\": \"bf5252b2aeca1163771f766278768066f21971357ea7996158a8d6e908dd59b59971349fa17882cb9224b972d0ffabe85510dcf25a9f9f9bdefad2f4cadfbbdacc1fca9d948cb5412f474cad23b5b9199bf3c7370641339b750e1f78c2adb460aa5b21b1fa8f97714abb4ed5e9cb51d6de55816618abd3fd2b286bc11c67ba01129373d435b3e7e391ba372614da8322875e46a675b645156024cad2dd13f9a081616bf131a24358894e0efa1d56648ffb42efb54031da7f37d197615155aedb69c4e709c8bbbe7fbfcb598347ac5d0c638407847b281cf116433097f5662158719fcdd37beb489268ce71de7d70ed925f743fc63a715f7eee7549fdb909cc454c988b30ae4d77d62f65a07e2c8f9362385d028a603108c945872f5e1a97419878ed49542e288ef07b5c90f5c4159e162303d080f6ac2b058ddcac60746f9e1c9ec1df8eda42d62738586d3fdd65df55f4374f3294e0868d41ef0bb1fd55e0cbf195bbfcfcde5bdb41fad9a0477e4c90ca27fa8cf503362a33fdeca5a4f0ffea26e8d7e134fad3b1ec3d056055bba5e65d81153ee831873b938df7d2c83c2a52b3c221827f961bd008362232d882a0412a047afdfb8597c865a2aa2c2cf5189934a83ee6b752a626941edce0c20b6f7a69f1cf12f9a331cdfa9eda24c8defa769ccce2ef746c307d8bb04891fcefd49af3e6f96991a7a20f27b6c0af1218be31791d1d0293e081b90af3b92ecb175ec8c789f7a8642e041ec3a61aaefef62a807d1a5054adf8323bed942241623732a2051dc01f9a20a29aa48b3fdf265d0ba6c138fb5793e2875002e7de3f5c3ff7e83ad27d111c848b7e6e2e5ad5f28eb7c363f95f960cbc421336ce985f946b0515b1bdd3a832c3fe903f7b44e20c92ea80826fbf97e2a4fcaf2db1a08698dd62edd0a84589d7462c447b4a896fe00860042496bd51b1925cb79cc3b829016a4c7e62790f8058c546f2145aaaef4d4b1e273ff61300f8008e946b622f60e505f5f6290d51eb997d20fc3fbb3e99edd68ff5cce9e8c283881c364ff215cb50045e60f4a7ee45b6c9d86447f38141d342dbc5308f8c66efc47f7c45f6d25e6564309a862db90f4df331787ecdd89d3aaa46053e29f102624ddfe80e8a3f99287cec19fa83e44d557c0441\",\n        \"signed\": \"effb29da6985971c202e2450301d49711bed25fad85f6199d1eb1e71914d964cbe18e34cc3e32872cdec026bd119a41c1c07ca41e82acba62fb0a7c82aed800cbf5252b2aeca1163771f766278768066f21971357ea7996158a8d6e908dd59b59971349fa17882cb9224b972d0ffabe85510dcf25a9f9f9bdefad2f4cadfbbdacc1fca9d948cb5412f474cad23b5b9199bf3c7370641339b750e1f78c2adb460aa5b21b1fa8f97714abb4ed5e9cb51d6de55816618abd3fd2b286bc11c67ba01129373d435b3e7e391ba372614da8322875e46a675b645156024cad2dd13f9a081616bf131a24358894e0efa1d56648ffb42efb54031da7f37d197615155aedb69c4e709c8bbbe7fbfcb598347ac5d0c638407847b281cf116433097f5662158719fcdd37beb489268ce71de7d70ed925f743fc63a715f7eee7549fdb909cc454c988b30ae4d77d62f65a07e2c8f9362385d028a603108c945872f5e1a97419878ed49542e288ef07b5c90f5c4159e162303d080f6ac2b058ddcac60746f9e1c9ec1df8eda42d62738586d3fdd65df55f4374f3294e0868d41ef0bb1fd55e0cbf195bbfcfcde5bdb41fad9a0477e4c90ca27fa8cf503362a33fdeca5a4f0ffea26e8d7e134fad3b1ec3d056055bba5e65d81153ee831873b938df7d2c83c2a52b3c221827f961bd008362232d882a0412a047afdfb8597c865a2aa2c2cf5189934a83ee6b752a626941edce0c20b6f7a69f1cf12f9a331cdfa9eda24c8defa769ccce2ef746c307d8bb04891fcefd49af3e6f96991a7a20f27b6c0af1218be31791d1d0293e081b90af3b92ecb175ec8c789f7a8642e041ec3a61aaefef62a807d1a5054adf8323bed942241623732a2051dc01f9a20a29aa48b3fdf265d0ba6c138fb5793e2875002e7de3f5c3ff7e83ad27d111c848b7e6e2e5ad5f28eb7c363f95f960cbc421336ce985f946b0515b1bdd3a832c3fe903f7b44e20c92ea80826fbf97e2a4fcaf2db1a08698dd62edd0a84589d7462c447b4a896fe00860042496bd51b1925cb79cc3b829016a4c7e62790f8058c546f2145aaaef4d4b1e273ff61300f8008e946b622f60e505f5f6290d51eb997d20fc3fbb3e99edd68ff5cce9e8c283881c364ff215cb50045e60f4a7ee45b6c9d86447f38141d342dbc5308f8c66efc47f7c45f6d25e6564309a862db90f4df331787ecdd89d3aaa46053e29f102624ddfe80e8a3f99287cec19fa83e44d557c0441\",\n        \"signature\": \"effb29da6985971c202e2450301d49711bed25fad85f6199d1eb1e71914d964cbe18e34cc3e32872cdec026bd119a41c1c07ca41e82acba62fb0a7c82aed800c\"\n    },\n    {\n        \"secret_key\": \"5d66ceb7c6e58cac91e288279170e818e787180c6b42dfa168787dd07f809fa4\",\n        \"public_key\": \"efc9b35db81f346198a7acc69f65fdfbf4c22e68dd7612e3b8ec68d378553b8d\",\n        \"message\": \"94d72f6dec4f7c9206b41510ce71a02955604f3c5de8e447d5871865a75898a4d207a26cf33d10caf05a0b6ed0d389fee9ed49275098a88e1c0d8304e81b4074214c7a5ce157eb2617ef04e1324ba942129faf32c31cb4aae4a5916c750808726856f7180e5797ede44362d747d70cec159d3b6acec63a514c7ef31b2ecd16db7fe68ea9c5ead9d870921800348f695412f3093e61985a31eadb79b59d91dd9a37f8d4ef7a5ddf223d4b24774c2e44e3f271ffb8500d595381b3df2e8e6b79ee65535a519a43eaa5e52b256c2643305e3170cbe57606a0545f8586565cfb75bf5e9564c62af05f15ee6e62afeef8c2c7a9dae235c9edd1d7c25cf49adc033ee7b583f518bc168ea48836b50ffedd2032b3f630cc56daadd513ebda864823610fc67a72b9a7d8117105c1c71d85a96b1d27a441fa1e7c6cf80233a49fe0e76a40278d06e34347d87be77b98ded5e2a3ea1afb13bee1e6cd6ca63be54fcf88a20ccb7a9fc324bf6143201b44483bcc964033dab71cf8f2a591fc050d5724e95aa50d32896eec0f3b34311d2a9934e9f852977e253f15304cae2416c2c4fcd8f1fecc3f1f64bb79759929abb0e8e8f5f7293d691af22abd3b2a6770b0cf144608f2d62cc7e52bfe333b2ed2de39b99afd37e3acf07eda37ddf0df029bff2ec22544b60bd7db238df1975ffa0075a82abd8d6b05b267180b870e21abf36981ae7768de53993b304f1c5453872fdfa8edad45f8001aa0e7342b3b58ec0f389dcbc271fb0f9000628757abba58c057e1a0899f6faf15f3740f3143f5c0b7a9159680de8c557266441b3b01caac12ec278f5a1025df53edb6134c96663a9666ae3baa90fc835111ef051bd912f67967449113b6a85f71df8c6037724eb8fc7d8319bc0385be9b0e99e95f9aedcae8d45a514476f05bcd7235c013ebc3aea9123c67aa6f3b79c85ea5db159eefadfb75a50ac6b95b496b5572581a76112ff6db263fc14c5818aad5bca3b2cb3ac8116d429482781e06f61e7563e6505e51c8ff998bf84aedb5202e2f9ff4c2689820296cc69603091b8b818fbeb2af5f4c57060d98c1a904843a70bf975b3c3ca6031a4cad5b4bbfba7e9b47491ab740d9ebe41d768810cb8cc51a937f7e3b22e3cf07ceae0ce20831495afcdd8c1a98\",\n        \"signed\": \"6ef264abf8b0e5c2d793b2c75279614a39c775eb2bcc0891067abc61f6d644a69ff8f814a30522cca90536f012c6283a76c32b89eee1bd9a4336f4fddac8dc0b94d72f6dec4f7c9206b41510ce71a02955604f3c5de8e447d5871865a75898a4d207a26cf33d10caf05a0b6ed0d389fee9ed49275098a88e1c0d8304e81b4074214c7a5ce157eb2617ef04e1324ba942129faf32c31cb4aae4a5916c750808726856f7180e5797ede44362d747d70cec159d3b6acec63a514c7ef31b2ecd16db7fe68ea9c5ead9d870921800348f695412f3093e61985a31eadb79b59d91dd9a37f8d4ef7a5ddf223d4b24774c2e44e3f271ffb8500d595381b3df2e8e6b79ee65535a519a43eaa5e52b256c2643305e3170cbe57606a0545f8586565cfb75bf5e9564c62af05f15ee6e62afeef8c2c7a9dae235c9edd1d7c25cf49adc033ee7b583f518bc168ea48836b50ffedd2032b3f630cc56daadd513ebda864823610fc67a72b9a7d8117105c1c71d85a96b1d27a441fa1e7c6cf80233a49fe0e76a40278d06e34347d87be77b98ded5e2a3ea1afb13bee1e6cd6ca63be54fcf88a20ccb7a9fc324bf6143201b44483bcc964033dab71cf8f2a591fc050d5724e95aa50d32896eec0f3b34311d2a9934e9f852977e253f15304cae2416c2c4fcd8f1fecc3f1f64bb79759929abb0e8e8f5f7293d691af22abd3b2a6770b0cf144608f2d62cc7e52bfe333b2ed2de39b99afd37e3acf07eda37ddf0df029bff2ec22544b60bd7db238df1975ffa0075a82abd8d6b05b267180b870e21abf36981ae7768de53993b304f1c5453872fdfa8edad45f8001aa0e7342b3b58ec0f389dcbc271fb0f9000628757abba58c057e1a0899f6faf15f3740f3143f5c0b7a9159680de8c557266441b3b01caac12ec278f5a1025df53edb6134c96663a9666ae3baa90fc835111ef051bd912f67967449113b6a85f71df8c6037724eb8fc7d8319bc0385be9b0e99e95f9aedcae8d45a514476f05bcd7235c013ebc3aea9123c67aa6f3b79c85ea5db159eefadfb75a50ac6b95b496b5572581a76112ff6db263fc14c5818aad5bca3b2cb3ac8116d429482781e06f61e7563e6505e51c8ff998bf84aedb5202e2f9ff4c2689820296cc69603091b8b818fbeb2af5f4c57060d98c1a904843a70bf975b3c3ca6031a4cad5b4bbfba7e9b47491ab740d9ebe41d768810cb8cc51a937f7e3b22e3cf07ceae0ce20831495afcdd8c1a98\",\n        \"signature\": \"6ef264abf8b0e5c2d793b2c75279614a39c775eb2bcc0891067abc61f6d644a69ff8f814a30522cca90536f012c6283a76c32b89eee1bd9a4336f4fddac8dc0b\"\n    },\n    {\n        \"secret_key\": \"62ed8682bd3ab3966eba3bffb775a318a03d99931979e99feb2ddbd69455a0ef\",\n        \"public_key\": \"d32ada178b3ec7700c47dd6d365322033fe431c302b46f8d58798ed83371566b\",\n        \"message\": \"9eb13bc7facf51a180541ec1dc5f5acb148c8d5eadcd2c4ef068bcdd11b34925eabfafabfe82a284bcbaee1381152af8e5e09f037cf1bb6484ac18e37359bfaa4c87aa07d3d14ed089b053910d1fa473f7bce143e2a59c4daf99b6c6e4e9291d97c864712af3eaba53ce2517a4f75cd7ecf278f34e22b7dffd088fa5ecadc0dd22135e42a536c684f2195d315f6924571e463f5cfc11b9f9d05a7ea11b98a169a1e39360973c50ad45c7491b57138ec050f43cbd5d17eb3fe0013e3d28d526054e07633152246f16554f3054749eea687b9c371b409cd3ecefb111a1d600407344e6d6ec38c60f6e545a92382e46c4d113125dbe5b9826e127f10181a35acfff28ab3764ca7f238ff479fdbc45b7a2ad0ff538c8acd0018d4470febcc6a307651cb5832f326b19241be9867e4eca6ae36f0e2d83fd77b97202b364716e36d1895a36853e7e76e88f62dbbf7726c2180569c66673837ad72ff936cf0e2fdb9ec6afcc79f8829e157f952288f4e00d0410a72253bf605eddceb01440dee5dd32b5a803439f038c06af1c90b27b5fe9843c27ae76609cbf832835c0e3c4bb59976ccede448786d91e438e0775c06a92d0f0b8dc0ef68260f7dd9e6871c4d0c0c09463852615218516f4a6debfdb46273b283382cd9ca744abf9fd439194b8cf1bdbb3175ca9c57a1c373c41fce92bd5fc012b19a0698aef37baf806ae09add8cb972a9ef9a7a5a9b1fd9a41d854c30cca1396140e20c2b98654fe6e511b626a43915b22fb2dad747ba7fe7460d8cebb2006fea19b3284b09c06a6f52f179a32beb56357b929a659f0fe6a26b697033def58ba603f430f74aa35070981db74ccf19190a1fb05144ec0a09a51e54765069730b09a7a2331ffb3de2a7e02c5e184da4013dfe937c371117524f7b210ba60e2692dcdcef36ab227b4c4f02a9f488972b847f0d6b59d02ee54fede8821db6cf731cc8ac895350ac5cd4d6baa3ad036f06f20d10a140c4ad3d10ca985532e3160462773385a2eb5e464d528e1e59c29f66b3de59e9ea28af3f97bfc5589035752a5a5523decd2dff01fc00ff31b30152ff5dafa331c6ab15873af41aa960aace7d2cb4f95c23df44b9e6c6e2f86788a872fd3a5cbe4acc95810daa09dcc1df933465ef040c53d9d959f9dad\",\n        \"signed\": \"3da8d14dc4e71fe6c32ede463788e41b826b4e2160ba10c95f1c8a2749aad8f12e98ae2468303baf6908bdb35ef38a5ecd77741e72ee3a427fd904dae66fcf039eb13bc7facf51a180541ec1dc5f5acb148c8d5eadcd2c4ef068bcdd11b34925eabfafabfe82a284bcbaee1381152af8e5e09f037cf1bb6484ac18e37359bfaa4c87aa07d3d14ed089b053910d1fa473f7bce143e2a59c4daf99b6c6e4e9291d97c864712af3eaba53ce2517a4f75cd7ecf278f34e22b7dffd088fa5ecadc0dd22135e42a536c684f2195d315f6924571e463f5cfc11b9f9d05a7ea11b98a169a1e39360973c50ad45c7491b57138ec050f43cbd5d17eb3fe0013e3d28d526054e07633152246f16554f3054749eea687b9c371b409cd3ecefb111a1d600407344e6d6ec38c60f6e545a92382e46c4d113125dbe5b9826e127f10181a35acfff28ab3764ca7f238ff479fdbc45b7a2ad0ff538c8acd0018d4470febcc6a307651cb5832f326b19241be9867e4eca6ae36f0e2d83fd77b97202b364716e36d1895a36853e7e76e88f62dbbf7726c2180569c66673837ad72ff936cf0e2fdb9ec6afcc79f8829e157f952288f4e00d0410a72253bf605eddceb01440dee5dd32b5a803439f038c06af1c90b27b5fe9843c27ae76609cbf832835c0e3c4bb59976ccede448786d91e438e0775c06a92d0f0b8dc0ef68260f7dd9e6871c4d0c0c09463852615218516f4a6debfdb46273b283382cd9ca744abf9fd439194b8cf1bdbb3175ca9c57a1c373c41fce92bd5fc012b19a0698aef37baf806ae09add8cb972a9ef9a7a5a9b1fd9a41d854c30cca1396140e20c2b98654fe6e511b626a43915b22fb2dad747ba7fe7460d8cebb2006fea19b3284b09c06a6f52f179a32beb56357b929a659f0fe6a26b697033def58ba603f430f74aa35070981db74ccf19190a1fb05144ec0a09a51e54765069730b09a7a2331ffb3de2a7e02c5e184da4013dfe937c371117524f7b210ba60e2692dcdcef36ab227b4c4f02a9f488972b847f0d6b59d02ee54fede8821db6cf731cc8ac895350ac5cd4d6baa3ad036f06f20d10a140c4ad3d10ca985532e3160462773385a2eb5e464d528e1e59c29f66b3de59e9ea28af3f97bfc5589035752a5a5523decd2dff01fc00ff31b30152ff5dafa331c6ab15873af41aa960aace7d2cb4f95c23df44b9e6c6e2f86788a872fd3a5cbe4acc95810daa09dcc1df933465ef040c53d9d959f9dad\",\n        \"signature\": \"3da8d14dc4e71fe6c32ede463788e41b826b4e2160ba10c95f1c8a2749aad8f12e98ae2468303baf6908bdb35ef38a5ecd77741e72ee3a427fd904dae66fcf03\"\n    },\n    {\n        \"secret_key\": \"4e57f0311fff0e5d538849b1216f695b1a5277941708204db2f0c15b3c73c82a\",\n        \"public_key\": \"e3371fe236ad2f6f42f9e1fa4e1eda2c3e29c36c8ad2218a3c037982f0b579ec\",\n        \"message\": \"052a1f41ebfd4bf65efb0ec8e74dd7b3065e9c482c49b99262e6dfa8407d9e31ed34d229ba41fc49a94a1309f990a99cb9902fb84f4ede91bb64714564a913d574d4a3c286f0a192a78ce2d55aae5c9fb057ff36120018b2a8b54d98085537ea64aea999d5321c7880b36ab43018ea2c92a5e68350d3de8526e2c8bc9141f4349a18a34f21de0abbf2930987567f0aaf8eb19145580d71306ce8a69e79f8eea26cfa0b8beb49cc5aa2bc77b797d4f8d50326ffb937399e94fdec85e192f1272a80e9a0ebbaf5d01f1b97060802bd4af34c0f7d7e98543f9d66d60e0e6bc0bf9c990be31eea1978ffd16733a8abe49558b3add0dce6defd64dc043f1519b1e9be66e06e41ecab168c8339a85e0b913818644ea7c5334468fd7196a01e1d4ce8dd1e7ee313dd5350b8dce4f5d7a6ac09857c4d3d0f10a3d9062609754592ad1077b2e2096fc9e5b1978c98b5660ddf51b46ede9f9dcd41b2ef44e79f6daff7d3626870e2243cafb2f4367939109ed9c01484b79eaa30a1891ea18f984e161dcdd1bda37134bf6735d2b2149b4898dacbfda61e6002d72a6fc5d21f1098213231132d56df68d6a9bfdf4eddc0524db8fd8f248852049a6825a5edd2360c009af24f0a94c5079ddf6fe796945ff984aac36411ce80d987c6ed67b6b0ddb6d417f6e809991e729d147dd0d21a093241363cf4ef3b8e3ba02d486633b6b217f5493e2e432b8c2e27d00c5b56c9b65f9aed49ce93d77e7d0bf5f92f92f5bb4b595d66f887a4880133f970463ab8b7f3d8c794c0406e88e3eab9ae65f1a185d6e39e2dd6abb8a93d2ac4b9208398dab89dbc07a41a50264026412da022b58f489d4dba31fb882fecb1ff8ca1820dda1865af1551e46cd618b44c4e6eb3037a9333fdccef4b895189e4390e93145d264ca5f45202a3eb2853593feed6c66dbb288ff3a3c0fa832b2aa7e529b5568897b3149402a907e741e1011ce0731c915f91446aa0d5caf0595f1816434fa4576db3bc31e10cc2af33f613f03ca7b9491a0a340525271ab537f62a11a84da01c7f5581ad5738c372b5335bab9b2b9dc2fe91e933304d9401ba8e1ce8dc55c4fb466b3a8ed7f53a122b8381d8f29047d7264d06fb51ec3e70071f2736a4e7e1537a52fa256a04ee86fad27ad2d28a9b3629\",\n        \"signed\": \"4fdc7b6e2827f64ba3c033c7fb6d1b35dd680f532999a0d77aeb276c31bd9e39c670978be47243c113223a57aa10233150678b40db78591c04d08df57a70a209052a1f41ebfd4bf65efb0ec8e74dd7b3065e9c482c49b99262e6dfa8407d9e31ed34d229ba41fc49a94a1309f990a99cb9902fb84f4ede91bb64714564a913d574d4a3c286f0a192a78ce2d55aae5c9fb057ff36120018b2a8b54d98085537ea64aea999d5321c7880b36ab43018ea2c92a5e68350d3de8526e2c8bc9141f4349a18a34f21de0abbf2930987567f0aaf8eb19145580d71306ce8a69e79f8eea26cfa0b8beb49cc5aa2bc77b797d4f8d50326ffb937399e94fdec85e192f1272a80e9a0ebbaf5d01f1b97060802bd4af34c0f7d7e98543f9d66d60e0e6bc0bf9c990be31eea1978ffd16733a8abe49558b3add0dce6defd64dc043f1519b1e9be66e06e41ecab168c8339a85e0b913818644ea7c5334468fd7196a01e1d4ce8dd1e7ee313dd5350b8dce4f5d7a6ac09857c4d3d0f10a3d9062609754592ad1077b2e2096fc9e5b1978c98b5660ddf51b46ede9f9dcd41b2ef44e79f6daff7d3626870e2243cafb2f4367939109ed9c01484b79eaa30a1891ea18f984e161dcdd1bda37134bf6735d2b2149b4898dacbfda61e6002d72a6fc5d21f1098213231132d56df68d6a9bfdf4eddc0524db8fd8f248852049a6825a5edd2360c009af24f0a94c5079ddf6fe796945ff984aac36411ce80d987c6ed67b6b0ddb6d417f6e809991e729d147dd0d21a093241363cf4ef3b8e3ba02d486633b6b217f5493e2e432b8c2e27d00c5b56c9b65f9aed49ce93d77e7d0bf5f92f92f5bb4b595d66f887a4880133f970463ab8b7f3d8c794c0406e88e3eab9ae65f1a185d6e39e2dd6abb8a93d2ac4b9208398dab89dbc07a41a50264026412da022b58f489d4dba31fb882fecb1ff8ca1820dda1865af1551e46cd618b44c4e6eb3037a9333fdccef4b895189e4390e93145d264ca5f45202a3eb2853593feed6c66dbb288ff3a3c0fa832b2aa7e529b5568897b3149402a907e741e1011ce0731c915f91446aa0d5caf0595f1816434fa4576db3bc31e10cc2af33f613f03ca7b9491a0a340525271ab537f62a11a84da01c7f5581ad5738c372b5335bab9b2b9dc2fe91e933304d9401ba8e1ce8dc55c4fb466b3a8ed7f53a122b8381d8f29047d7264d06fb51ec3e70071f2736a4e7e1537a52fa256a04ee86fad27ad2d28a9b3629\",\n        \"signature\": \"4fdc7b6e2827f64ba3c033c7fb6d1b35dd680f532999a0d77aeb276c31bd9e39c670978be47243c113223a57aa10233150678b40db78591c04d08df57a70a209\"\n    },\n    {\n        \"secret_key\": \"39f0556b1c5dcab387104181bb304de0cf815920b972e871d5f0fb416d8e616a\",\n        \"public_key\": \"d85fb76e78c3d5bb7ca6b05b310191821a4a7d2d9bdf02292cc7aea5642e4819\",\n        \"message\": \"a8d034e170fc22b57a44aa6269ed1f01cba801f398df1adfe7df044d5fa468bbfa8af4749ab50d24d62e313ac0e73a64b4282b74626af2b4a4b54c274e5a6bc280b6dc25dcfe07814c9c816d2f9e36c05b9bfedff7c6b03cddebd4735e0993d3c3fdc6540443c6005e900b4035e1408a85016aa1b89202990e5d84ed9981c29b77206d7c113052a2029812c6ea13aae8be0aca7a3306bf617242298e68becd0d5d16c8887fd1950b7785a46bb022b39f7607cd8913718b3017fc3f86d6933f75eec5191ad1f1989a8d261786f56be4a988370db82961a9fcc953542e51c2e086db0e02b4fc346694abd9059d5b11722647669e7f17b745a60b02f7339fcc99bc35d59fd0b98b60c314abd4bf8aa4b7eae09dd0097acb9189f02cf85a251ac92aaf691b15cd4a33b58d7663abd0b0444333044af5ce20fd71cbaffc0d29835819f49293fc26e7f9787fc368c4d35cae92747f21ca1f3efd87a0d8104199416482d07bfec1281c66f565285bf672d5e7486400660c017555e9fa2bf6a4e7027f0e7e5f443ed658b75b590612abde0d80d1a26cb8bde76b996eff6a74e3dafc59eb1b584f4597a239cd839fa1f1b7bda1a24d150c4e24b91cec01ee53a3ac852a912de195a3c29dd7079aa7e88aa81e9d31b8fccd435eda113c3f82458b7f7933572b776753c92240cc036158a4ba0e56efed53ecb53fc093fead14343485ae5d9105bb163f262514e48be74159c9fabcb71d1a4280d9ed70d7e42b75f7fdadd02d69198f5f465bf604cb4254417bac3714b3a99e6f1acec9e3b3d097f972fbc36f2eda3926d56112d4e9097d89bdc35937b9a3158e7cdd5da401e180d3ede6b1ff02864192eb729781534f4964ddf2af11800d8b5b6d01b209aa3369366c19a28c79a87d2174ec22fb1489a6755c348a996d0aa56e0f60d58e26befa23a86bef4e3529512e30a9d1c5e4885018cb97aeb7c93c5c41caa34236575c226f3b235eddba364e285b6e352707bbb3b339bbf2a63a9cb9bd333a77e79bd58a48e14ce5886ed0cd07c2d165a81b5e6a31a8ae7806bcf2e0c4ec29a967725e577f1741ee68f345f5f7ab0fad31c8b4b18b431c4977d5c584004b45f7cd1961affe8738e24c382610efe998353d7ebaf919b279bbb691c3052b8b2c5f09808ef3a6\",\n        \"signed\": \"0166afed5a8f7c3f7ad6f3fdd2938eff00898eab815c5455ac90fb51f6e1854f0c0753194b7629594cc1271b003431221c574b0c0d19082feeda51b084ae5e03a8d034e170fc22b57a44aa6269ed1f01cba801f398df1adfe7df044d5fa468bbfa8af4749ab50d24d62e313ac0e73a64b4282b74626af2b4a4b54c274e5a6bc280b6dc25dcfe07814c9c816d2f9e36c05b9bfedff7c6b03cddebd4735e0993d3c3fdc6540443c6005e900b4035e1408a85016aa1b89202990e5d84ed9981c29b77206d7c113052a2029812c6ea13aae8be0aca7a3306bf617242298e68becd0d5d16c8887fd1950b7785a46bb022b39f7607cd8913718b3017fc3f86d6933f75eec5191ad1f1989a8d261786f56be4a988370db82961a9fcc953542e51c2e086db0e02b4fc346694abd9059d5b11722647669e7f17b745a60b02f7339fcc99bc35d59fd0b98b60c314abd4bf8aa4b7eae09dd0097acb9189f02cf85a251ac92aaf691b15cd4a33b58d7663abd0b0444333044af5ce20fd71cbaffc0d29835819f49293fc26e7f9787fc368c4d35cae92747f21ca1f3efd87a0d8104199416482d07bfec1281c66f565285bf672d5e7486400660c017555e9fa2bf6a4e7027f0e7e5f443ed658b75b590612abde0d80d1a26cb8bde76b996eff6a74e3dafc59eb1b584f4597a239cd839fa1f1b7bda1a24d150c4e24b91cec01ee53a3ac852a912de195a3c29dd7079aa7e88aa81e9d31b8fccd435eda113c3f82458b7f7933572b776753c92240cc036158a4ba0e56efed53ecb53fc093fead14343485ae5d9105bb163f262514e48be74159c9fabcb71d1a4280d9ed70d7e42b75f7fdadd02d69198f5f465bf604cb4254417bac3714b3a99e6f1acec9e3b3d097f972fbc36f2eda3926d56112d4e9097d89bdc35937b9a3158e7cdd5da401e180d3ede6b1ff02864192eb729781534f4964ddf2af11800d8b5b6d01b209aa3369366c19a28c79a87d2174ec22fb1489a6755c348a996d0aa56e0f60d58e26befa23a86bef4e3529512e30a9d1c5e4885018cb97aeb7c93c5c41caa34236575c226f3b235eddba364e285b6e352707bbb3b339bbf2a63a9cb9bd333a77e79bd58a48e14ce5886ed0cd07c2d165a81b5e6a31a8ae7806bcf2e0c4ec29a967725e577f1741ee68f345f5f7ab0fad31c8b4b18b431c4977d5c584004b45f7cd1961affe8738e24c382610efe998353d7ebaf919b279bbb691c3052b8b2c5f09808ef3a6\",\n        \"signature\": \"0166afed5a8f7c3f7ad6f3fdd2938eff00898eab815c5455ac90fb51f6e1854f0c0753194b7629594cc1271b003431221c574b0c0d19082feeda51b084ae5e03\"\n    },\n    {\n        \"secret_key\": \"bab3ff7a4448d8a03d8acfdb913f77fe77804395c3e54ec235117927e32b50d5\",\n        \"public_key\": \"54975e35e5b1d0323f2d6fb5c6158bf6654b084f76bbdcfd72349229e8e4a6e8\",\n        \"message\": \"b647b67cf01c2cacc39de5969e199be6d9320167a4cebbf1625950b1e6b7adf5ca24d1349568865fbbfd90f513f05f79f70a63a23873dc7a195d4b285a08f30ee061d0b8e6b4d6bf9b2ecf2c69f3d5a07a6730537cca4a4e4c7ee684702bff883fab8bcaf89311c5498bccb5a0f7c8d49b54f482fffbca6e7da262452ba59a57a6879d81b73cd7adf72a3be28a373cd63310408461c21b907f63e086b292ff02833e8a2f46adbd671d02b03a69aca2e11d287c522a954520442ecefaa905dbfcc8254c58c3954a89bf56cbe01ad5631971eb39eb432a854e691929df7e48b900ca6e740accf578b31795b49a6ca774bd8b993106a9c4948c18714948315990a5f191692420f289328ab713ec19b7ea894d16e6476100871cf3168e4f935b5505d1ed5b0aa29be36fa3a346ac3e76f143c46ca69123b79c36399a0d2ed302772494adf442bbafbc4d01532692c7859df04d2ca78ba55d77fdf3e5ad993786a24cff2199bb49387873cc414b4cf1137abb7e94ae3ddbf97f534a18fc5ae58523a3cc52283dc7b016f31cd6557981c5076c774f303a47c427870e207ed8bd66640ff092db503fa124bfdcf020051dadd106dd245840b31910b8a9060d5986f02b60aa5e33b4d7550912cdc5776c772aac93ae19c73b7ecfca389e627681a8781eb47d84e93460ba891d3ff6eadf8f2a903c383474beaa42b90e032236dcd898d02a40efb44e47ead52b75b09c7da1cd6a2dfd4d1c0452de69f6acac1a68dd78daf972ae260821e2ec522fb5749bebe0adb452bfa4faa1e97911c1299f16568d68eef405f4b1cdacabed59f7b0fbceab719a34b299f58a4ae8154f98f4d9f4f140b1f085006946725e7c29bb0bc6ccf2534497c61d4c1612624a61d70d26c3efb7d7c351848657f7f8eebf8b990747740e6f910c97cef150375765c8c0b3b449c0d09d66f008e67cfa76ea2b6808b6fe632eafe0587f37e36be98dcb17a3f4a15b65a9f6fcf9642b52522077b1fb4cc3c08df4b467ca716db16b737f782cdf387170a5f1f6a7ae0ab3f5b7c585e3b0655a6456a503595ce8eaea2537855e7f0d5061bc29b4e67daa82463c190e9fddd52f8322ddb4e0f26b68778228eb57e1a185b7025da14987d44baa767b22ee7f4c84591032e88ec12eb8c5a4b9e157ec\",\n        \"signed\": \"d6b4135fc7acb3d7cdf987896d91b8a90db584d8933a6f3029e3261ec1c390cbacfaafeff443b6da4fdb1d84c64a54560feffa2f1c7a91bde9730222923b6703b647b67cf01c2cacc39de5969e199be6d9320167a4cebbf1625950b1e6b7adf5ca24d1349568865fbbfd90f513f05f79f70a63a23873dc7a195d4b285a08f30ee061d0b8e6b4d6bf9b2ecf2c69f3d5a07a6730537cca4a4e4c7ee684702bff883fab8bcaf89311c5498bccb5a0f7c8d49b54f482fffbca6e7da262452ba59a57a6879d81b73cd7adf72a3be28a373cd63310408461c21b907f63e086b292ff02833e8a2f46adbd671d02b03a69aca2e11d287c522a954520442ecefaa905dbfcc8254c58c3954a89bf56cbe01ad5631971eb39eb432a854e691929df7e48b900ca6e740accf578b31795b49a6ca774bd8b993106a9c4948c18714948315990a5f191692420f289328ab713ec19b7ea894d16e6476100871cf3168e4f935b5505d1ed5b0aa29be36fa3a346ac3e76f143c46ca69123b79c36399a0d2ed302772494adf442bbafbc4d01532692c7859df04d2ca78ba55d77fdf3e5ad993786a24cff2199bb49387873cc414b4cf1137abb7e94ae3ddbf97f534a18fc5ae58523a3cc52283dc7b016f31cd6557981c5076c774f303a47c427870e207ed8bd66640ff092db503fa124bfdcf020051dadd106dd245840b31910b8a9060d5986f02b60aa5e33b4d7550912cdc5776c772aac93ae19c73b7ecfca389e627681a8781eb47d84e93460ba891d3ff6eadf8f2a903c383474beaa42b90e032236dcd898d02a40efb44e47ead52b75b09c7da1cd6a2dfd4d1c0452de69f6acac1a68dd78daf972ae260821e2ec522fb5749bebe0adb452bfa4faa1e97911c1299f16568d68eef405f4b1cdacabed59f7b0fbceab719a34b299f58a4ae8154f98f4d9f4f140b1f085006946725e7c29bb0bc6ccf2534497c61d4c1612624a61d70d26c3efb7d7c351848657f7f8eebf8b990747740e6f910c97cef150375765c8c0b3b449c0d09d66f008e67cfa76ea2b6808b6fe632eafe0587f37e36be98dcb17a3f4a15b65a9f6fcf9642b52522077b1fb4cc3c08df4b467ca716db16b737f782cdf387170a5f1f6a7ae0ab3f5b7c585e3b0655a6456a503595ce8eaea2537855e7f0d5061bc29b4e67daa82463c190e9fddd52f8322ddb4e0f26b68778228eb57e1a185b7025da14987d44baa767b22ee7f4c84591032e88ec12eb8c5a4b9e157ec\",\n        \"signature\": \"d6b4135fc7acb3d7cdf987896d91b8a90db584d8933a6f3029e3261ec1c390cbacfaafeff443b6da4fdb1d84c64a54560feffa2f1c7a91bde9730222923b6703\"\n    },\n    {\n        \"secret_key\": \"486c7b436c1d43d6b703512283c166dc863e5a33802f4ea65fc738778902d014\",\n        \"public_key\": \"b5dc947d64337cae82122bd68cc80840596de3be56cbd0c833af3faa3adc3776\",\n        \"message\": \"af036053672dcf3aa26e28ec6aa642ce284b896c69887dfdcf0824515eb0848d9d970ca272df77a86b3ff6ddaf3cbadd3ab6283bc37cdf7a5607d5dfc7cf96329299cc53edbbe657fdfa2ca24467050a0aeb8cffd7d33d543ec2c191cc0bce89ac37d33293b1888ccb76c28adc671a4935a846d907e4add0110febbee5aec80f9d2ff74e2af4fdbebbcf49105a6469d7380006b2ca44364814454e445e36dc0012f339c96854f836442a05a50bec907327f74ba9f6fd790ff0ad3783d297bdcca76460783703eb5f2b1f51b0a740ce7a8f00a387e3636270a971fa8f15b4496730d88add807a7f7e987cd41595a2e7435df5195576a35f5e91b2fcfac94ed5d77663783b61e6671d34838b6b5644fbc1c539fe159b7792db967e8352618ddaca0cde73437b59e7801b49eb4609b10577ca2692dd6f9d5e9d4b5e5e62c5913e7b87e6b347be6153b17199c916a13f8a885b378ef09e13cae4d8b079d7d5cb9094199b0f20533c90083bc3acb2667697eed22e3670abb4a553e995c9dd9594e592391a0004b6556544f35612c4971359577c476382ca53b3f262a5e33ed26eec809f4fdba4898a113675cb6af717db62579f3980b21463be029cb4160fe5d257c46cd6664f9861ac50fe05c144057dce2f8df1532aa7af589f41270601cef06bbe4f35c31c782bb3cfff7d5ab64a14ec417361f1d32cbd38b6bd0e02505d1416302b8505ae2a96e8d5339c346c2b0662d350259c50c5e48795914e6f88e97c811c393bdf9aec7ef82047ca28ee971c175c27e36e109727960ddf1a1b976ab44f4851607bd966808ac46d54003128297f5f4487108d6a02e7a16413d2b75ecb42fddfb669c801d23de50a6f7bf658f753c6b2b3b47c0640105d0a801b32a1943cdc15c886555eb75bb7927b93c35c5be1f98b196caac2dad991b1044ea863944d54d883abc3c6de66ed868ee84bcf9c34ccdb80fcd9cc0402747732cd630bbfa3bbe8b038dc1dbdaf436d9ac00c02d528ece2e791ee312a868feb2f587ca44db5731384fa1831142061b2ead2b80c66bd2fa5dccabe6a25f2a493feaacd231d2f409646b942a578545ea4feea9a73473f79dcf13e0c9f1b49fd8912ec487328045bd0fa228922ee6e973e61f6e93365296578dcc21c361479ee2d24879f2e9b\",\n        \"signed\": \"31f95cbb7463b87528654227bb1397bf1065b4f576808078207dfaf06d124b41f4c318f4a9315a66085b9e568a71e414ed9414517310c699946db0c976285207af036053672dcf3aa26e28ec6aa642ce284b896c69887dfdcf0824515eb0848d9d970ca272df77a86b3ff6ddaf3cbadd3ab6283bc37cdf7a5607d5dfc7cf96329299cc53edbbe657fdfa2ca24467050a0aeb8cffd7d33d543ec2c191cc0bce89ac37d33293b1888ccb76c28adc671a4935a846d907e4add0110febbee5aec80f9d2ff74e2af4fdbebbcf49105a6469d7380006b2ca44364814454e445e36dc0012f339c96854f836442a05a50bec907327f74ba9f6fd790ff0ad3783d297bdcca76460783703eb5f2b1f51b0a740ce7a8f00a387e3636270a971fa8f15b4496730d88add807a7f7e987cd41595a2e7435df5195576a35f5e91b2fcfac94ed5d77663783b61e6671d34838b6b5644fbc1c539fe159b7792db967e8352618ddaca0cde73437b59e7801b49eb4609b10577ca2692dd6f9d5e9d4b5e5e62c5913e7b87e6b347be6153b17199c916a13f8a885b378ef09e13cae4d8b079d7d5cb9094199b0f20533c90083bc3acb2667697eed22e3670abb4a553e995c9dd9594e592391a0004b6556544f35612c4971359577c476382ca53b3f262a5e33ed26eec809f4fdba4898a113675cb6af717db62579f3980b21463be029cb4160fe5d257c46cd6664f9861ac50fe05c144057dce2f8df1532aa7af589f41270601cef06bbe4f35c31c782bb3cfff7d5ab64a14ec417361f1d32cbd38b6bd0e02505d1416302b8505ae2a96e8d5339c346c2b0662d350259c50c5e48795914e6f88e97c811c393bdf9aec7ef82047ca28ee971c175c27e36e109727960ddf1a1b976ab44f4851607bd966808ac46d54003128297f5f4487108d6a02e7a16413d2b75ecb42fddfb669c801d23de50a6f7bf658f753c6b2b3b47c0640105d0a801b32a1943cdc15c886555eb75bb7927b93c35c5be1f98b196caac2dad991b1044ea863944d54d883abc3c6de66ed868ee84bcf9c34ccdb80fcd9cc0402747732cd630bbfa3bbe8b038dc1dbdaf436d9ac00c02d528ece2e791ee312a868feb2f587ca44db5731384fa1831142061b2ead2b80c66bd2fa5dccabe6a25f2a493feaacd231d2f409646b942a578545ea4feea9a73473f79dcf13e0c9f1b49fd8912ec487328045bd0fa228922ee6e973e61f6e93365296578dcc21c361479ee2d24879f2e9b\",\n        \"signature\": \"31f95cbb7463b87528654227bb1397bf1065b4f576808078207dfaf06d124b41f4c318f4a9315a66085b9e568a71e414ed9414517310c699946db0c976285207\"\n    },\n    {\n        \"secret_key\": \"a6e6ad2c379c6fccadb4a49b232a9142618ea30103c33c226ff628bcfd81f426\",\n        \"public_key\": \"f7c4323f5c419d9b3f34a8eb42ae7f1faa2333079030c5d64f9ffb1e9b16002d\",\n        \"message\": \"2e857676a5bb1c6e9e94507f83c60a67f547c5de9e94566b197a6af6cf4752e93dbdef6b9f66d1febd957e42a7f5ad64ef1dbcc4fe69ae9525d1a4de67054c88f29c0647bacf8b82f321ff99fe9eedc992ed34c1177fc5421227ccac10feb9ced4082f5658da63714723979737e7dcbfe2e8b5d50f91dfca83e7f95f35d1ad8dd51144502f3df672432611f0e766a90dcc2a5739c805d95fe5b041de9d7fb47b4404afc803a3bd4804c7817ebc5bdfef8add9e250b50966ca8939b22b3c6ff936eaa659a240c0c848b810acecf6181e0e4db8e4cf8fcce7de559cbe8afa9db8499570911a3887e850e509cdb70debc3477d12175014f79f81ba113d0b7b335118f85cf59996f806758eb903cc450f52fee102efc01441e9ae5fae74c231dfd85eb6bad17d6b70e938584facb2172cb03bd5ea07b7f0d371ffa351c0ee4efe9ba4a3fd543874655e7d39c53ae86329802e5c385e9283a2973cab8cf7ac7ff0f91d1d48b58abfdad658d812f07881676bd226bfe957d7df30c4130a448354a6b94405a411650a9c8fc851155ec5a8a3e3b67ae0c4b5cb89bb73fc82974be62da73f0e23092937d405ba4af6cab9465ea43a6253f4457082a06ac12b75e88ec684487f9076373fab8892859d8e8ba431423aa805a220cbfda431b32b1e03121f7fd4de18591f2505cc0f5b2b1a7605fbcc63757b07e299fef5a2b7365230c2e92a25962c2e8012ad3fa9ee94882709625ba68c7b213664ae2532b609d7c9aa0e83d493dbce7632f35580e06d3111ced320dd0190441f62d9e35f50de59c272fb00f568a00b0746c33a9bd2490c074b91cddc487ef2e45a0f030e08fdc1817bca8a9ce29d29279e755debc28dfadc3c4d1b458486e3c8d0c4318e7e6f9eb5a3653b3f7c49507077cd5eb81f10b88107cc0f9316932abe9b64e8886d06856a85be63b0c2b475c0afcb0694426860fb24b5c17ab6ab7733d5e641be74fd5f6a1ff18d2f9a42770fb30750f56f4854e38d58aef18a2a61cbfb49ee576ed97737bc28df3268a334175513d97af009cbbcfdfad5039d69bb46f708867d9b3ce0bf2f569e3cfbcf6136f8870d25208b21a3edcb73393dfcd4172c1402c41f36e3f82a4ea6dcd891686ba66e14320aa0e22ba0c1ef033d662cdb860cdfa3a40f6cc532a08\",\n        \"signed\": \"07d9fc244fdab00159ebecc5a00883453f08310171769d297001e877010e3eced9fb60ec91cb4d88e7ba40c530b1f9237978ccd96d5cba9e4fa27e2a0ad9d60c2e857676a5bb1c6e9e94507f83c60a67f547c5de9e94566b197a6af6cf4752e93dbdef6b9f66d1febd957e42a7f5ad64ef1dbcc4fe69ae9525d1a4de67054c88f29c0647bacf8b82f321ff99fe9eedc992ed34c1177fc5421227ccac10feb9ced4082f5658da63714723979737e7dcbfe2e8b5d50f91dfca83e7f95f35d1ad8dd51144502f3df672432611f0e766a90dcc2a5739c805d95fe5b041de9d7fb47b4404afc803a3bd4804c7817ebc5bdfef8add9e250b50966ca8939b22b3c6ff936eaa659a240c0c848b810acecf6181e0e4db8e4cf8fcce7de559cbe8afa9db8499570911a3887e850e509cdb70debc3477d12175014f79f81ba113d0b7b335118f85cf59996f806758eb903cc450f52fee102efc01441e9ae5fae74c231dfd85eb6bad17d6b70e938584facb2172cb03bd5ea07b7f0d371ffa351c0ee4efe9ba4a3fd543874655e7d39c53ae86329802e5c385e9283a2973cab8cf7ac7ff0f91d1d48b58abfdad658d812f07881676bd226bfe957d7df30c4130a448354a6b94405a411650a9c8fc851155ec5a8a3e3b67ae0c4b5cb89bb73fc82974be62da73f0e23092937d405ba4af6cab9465ea43a6253f4457082a06ac12b75e88ec684487f9076373fab8892859d8e8ba431423aa805a220cbfda431b32b1e03121f7fd4de18591f2505cc0f5b2b1a7605fbcc63757b07e299fef5a2b7365230c2e92a25962c2e8012ad3fa9ee94882709625ba68c7b213664ae2532b609d7c9aa0e83d493dbce7632f35580e06d3111ced320dd0190441f62d9e35f50de59c272fb00f568a00b0746c33a9bd2490c074b91cddc487ef2e45a0f030e08fdc1817bca8a9ce29d29279e755debc28dfadc3c4d1b458486e3c8d0c4318e7e6f9eb5a3653b3f7c49507077cd5eb81f10b88107cc0f9316932abe9b64e8886d06856a85be63b0c2b475c0afcb0694426860fb24b5c17ab6ab7733d5e641be74fd5f6a1ff18d2f9a42770fb30750f56f4854e38d58aef18a2a61cbfb49ee576ed97737bc28df3268a334175513d97af009cbbcfdfad5039d69bb46f708867d9b3ce0bf2f569e3cfbcf6136f8870d25208b21a3edcb73393dfcd4172c1402c41f36e3f82a4ea6dcd891686ba66e14320aa0e22ba0c1ef033d662cdb860cdfa3a40f6cc532a08\",\n        \"signature\": \"07d9fc244fdab00159ebecc5a00883453f08310171769d297001e877010e3eced9fb60ec91cb4d88e7ba40c530b1f9237978ccd96d5cba9e4fa27e2a0ad9d60c\"\n    },\n    {\n        \"secret_key\": \"9b6d7e28eb051597324dceb7a18941246725e88d53ab2c34771105330cf1f4ae\",\n        \"public_key\": \"8872a50b5fe362f8ead1d40e2045f0d40b2e7b50b59d8090bc47ad68ebee09ed\",\n        \"message\": \"d1e1987bff65f62ad67624c6657924f5d673b7824ebe404026c0562ded3143440be637f98c9e01a6afdfa9a47dd49c7cba6e3fd23e4552f7632b14380b27cd3e9606cce350f152ab126bead0a5d3bce4d42092d934c8ca337e987e11d86cfbfbd2acc3223bd16744a927728f485372175cc694df30a73f9d33765ff014ef008d5863210338cc3482cc27ea317eec921b0c568c38ab27c4a564e802b1b94668c651e20a0b55f3a79d215fc3a0d04904010932c4cc68c2a9e7d00e5d38d82df55206bab95cf697bebc7206eedef6fd18d9a20c2cbb285b00efa769a08dab2b3abadf00d198b4f192dd44bcb91431823ae6fdf98458eca39cd29263f0999303e70dc694fe01c53a11c1d1c34c1ee5068a201dbe7e1008d764358968b402aa398549507f7bd1850800e411b1c4e28ddc04a859e179be8ad7e6670e509db027ad7e517e4425954f5a807414a6da267a764e712a998465064982d851a265ea3c4dfb74f992a7cccd9a82687fa61c322c4f589e86b8825213bfa951dae6af354ace18f073995adc95839dac0165511d61753791a53e48e3a8273d44823d2596f2a2db2e5f1ae597221ba7f3ebaf4a7b2888395002bdaff51fa54bfb979de1031404ca7789fe095d4d17f07a35556b10fe8e1417c8a6a631c2ed36cb7a0e6181776289c344814d42131a73b12faa35d77814c681a601374ba71cb9ad5315fad42d3acfc7c1d628810256daf7d8c3c9a2e5bdcfb770082fa638168958523a1c3b035dbc6d5adf26df89a7ccabed3e7dd377c16da841f13c6894d43cebb4e39022f1ccec2274445c78b3adc7bbf70d890b80236cc4468f9569c59a7e33b570e670380d244e4e310e11c392f1e334054b92c8386c161ce04109b037bd628d919dcb62da1435bf94e88b0a8846d486d16778f7a3b880e660f441fdf86e56b8aa0661f55aaece27f9ddaa0e2a22c215b040539726b9853915a1592dffeae32d7b5b67eb6205bb0bd7279f788d5f833c4066780ca0a42d3e4e1aa22bd06bb5eed89b9413771ecab644ca72d1291d00f740901a7311dc036715d23ebd9a59891628f0d87ed489502f06d75bbd11cd1602a35ee7e13335d6a144b08830e669c02e652f3f100d393ef9b4ac05321439bce6ce36ffc5abca890b8796ccb5e16303559c5d9117f0f31d\",\n        \"signed\": \"c6dc5ca1e8560015b493afe2666ccf6fefa803d8526c837fe7f123c7991427ab030d7c770e45f6de8481523b94ece97f3f161cf5b8c7aea39f5ad826bf8d0a02d1e1987bff65f62ad67624c6657924f5d673b7824ebe404026c0562ded3143440be637f98c9e01a6afdfa9a47dd49c7cba6e3fd23e4552f7632b14380b27cd3e9606cce350f152ab126bead0a5d3bce4d42092d934c8ca337e987e11d86cfbfbd2acc3223bd16744a927728f485372175cc694df30a73f9d33765ff014ef008d5863210338cc3482cc27ea317eec921b0c568c38ab27c4a564e802b1b94668c651e20a0b55f3a79d215fc3a0d04904010932c4cc68c2a9e7d00e5d38d82df55206bab95cf697bebc7206eedef6fd18d9a20c2cbb285b00efa769a08dab2b3abadf00d198b4f192dd44bcb91431823ae6fdf98458eca39cd29263f0999303e70dc694fe01c53a11c1d1c34c1ee5068a201dbe7e1008d764358968b402aa398549507f7bd1850800e411b1c4e28ddc04a859e179be8ad7e6670e509db027ad7e517e4425954f5a807414a6da267a764e712a998465064982d851a265ea3c4dfb74f992a7cccd9a82687fa61c322c4f589e86b8825213bfa951dae6af354ace18f073995adc95839dac0165511d61753791a53e48e3a8273d44823d2596f2a2db2e5f1ae597221ba7f3ebaf4a7b2888395002bdaff51fa54bfb979de1031404ca7789fe095d4d17f07a35556b10fe8e1417c8a6a631c2ed36cb7a0e6181776289c344814d42131a73b12faa35d77814c681a601374ba71cb9ad5315fad42d3acfc7c1d628810256daf7d8c3c9a2e5bdcfb770082fa638168958523a1c3b035dbc6d5adf26df89a7ccabed3e7dd377c16da841f13c6894d43cebb4e39022f1ccec2274445c78b3adc7bbf70d890b80236cc4468f9569c59a7e33b570e670380d244e4e310e11c392f1e334054b92c8386c161ce04109b037bd628d919dcb62da1435bf94e88b0a8846d486d16778f7a3b880e660f441fdf86e56b8aa0661f55aaece27f9ddaa0e2a22c215b040539726b9853915a1592dffeae32d7b5b67eb6205bb0bd7279f788d5f833c4066780ca0a42d3e4e1aa22bd06bb5eed89b9413771ecab644ca72d1291d00f740901a7311dc036715d23ebd9a59891628f0d87ed489502f06d75bbd11cd1602a35ee7e13335d6a144b08830e669c02e652f3f100d393ef9b4ac05321439bce6ce36ffc5abca890b8796ccb5e16303559c5d9117f0f31d\",\n        \"signature\": \"c6dc5ca1e8560015b493afe2666ccf6fefa803d8526c837fe7f123c7991427ab030d7c770e45f6de8481523b94ece97f3f161cf5b8c7aea39f5ad826bf8d0a02\"\n    },\n    {\n        \"secret_key\": \"7009edd0795096edc4fed55a17ccf484131e608c6d5d6696bf3376e26924959b\",\n        \"public_key\": \"77574bf069527145e72d3e85ce7d4fcd671a33e0a71e6bf0da7ea471dd6e86a4\",\n        \"message\": \"b12c12470539547c2de6bc4eeac7b63e508ed710f35637d9fdd2dcca322a7a5071dab2b2845e30792806035c9fcdafe2783e3b677d6be5aac70b33910a2b95e8b5d59bda615935a417b7ae19a7853774e89a12aa547b4192979a01ef6ef32a40de79d680057a83a074617ca6501f59e73564927c38b58c19585a2c03659c026e4de3806d6c1ca8958dee47bcb889e76d2c3a9ab5b8b6afb2e842298056567bf9b58957415483336233ef4920fa57f496e1f0348cca20366496fab3a75bf4214ece47a45feaa1392db3f254d96a7f37402c9811140d7358b4ef8f20a298eeef904e37d68f378d33cb96d00c03109fc83fd06a876c92482f61ab7914eb7c2e5e84066e0e91e21e42e9be23df12b5c747973cb86442c32291d3d1ae719b36a62faf3abaa2053a313f625d85c51a5198571915ef8a2b199ba37d25884575ba1b72844cab4328b57fab1ec974ee8ea1df7ca9c78a4d3a03bcb0ab4169bf06a3a438d9566c6c501d8d9ccccb1ac26b4da4ae1a9d8e8b9df662821ad975c9b015fe26f6898d22ab912f0e405a5b27cfd39d657dcd92cdebe6791902713484406dddce71188731e44319381af27daf76792273b8c35251d11b836afe8b3ce9b40273f6915ebe6bc95a75bb941a429209867fba8764bf6c40db6eecb4f21747837cf6ae7fbfe36d5023df7fce2c0c3c57af2898885313c5c4bda35c7da6cb29932fb1991f62bbb080b32e2050619311ae69abb3022d913fa9eabd5d5cb4dc54d75dca638cda9af331c0cf4d2007b6ca39f655a61c01039f12a4b9782bc39aec4d22ef0093388dd7d5b56dfb8a7f9d8669004e2878dd8a6d76857c0845245068fee1c5319631e78d3785165c70afd65299301378551ebf613584c6a7620a0e3b6779f38c0940062497008eb233870868c21cccac239501b63b749a85602c28a095cafc749b0511a6c878edb3b780ea174d07b121e315a826dda6ec8dc54363e2cd2e6305a194825c0ea90efd7a9fd89cd97b99c4300bd3bf9353d82fbcceea71b4ee3f1aae9539b4cce90ca477597c174ef20f4b9f4e62d09a570d3135aabee9551fa60983958c0b7b8c3744553ee14e7f3cd103a19251c99bf6384abb60a76afc6658b80dfc5110adc4c732fe0ee32933fb284828e008887aef80f6f813340446c0217c12ee\",\n        \"signed\": \"b701b8f9a434e06d719ad25dcc54060c7986647f44f3884bcb6e5ee1d7a446cc265cec029b537da7f2523326558ac9ba34f4cc2a97cca3452e70562e7a8f5504b12c12470539547c2de6bc4eeac7b63e508ed710f35637d9fdd2dcca322a7a5071dab2b2845e30792806035c9fcdafe2783e3b677d6be5aac70b33910a2b95e8b5d59bda615935a417b7ae19a7853774e89a12aa547b4192979a01ef6ef32a40de79d680057a83a074617ca6501f59e73564927c38b58c19585a2c03659c026e4de3806d6c1ca8958dee47bcb889e76d2c3a9ab5b8b6afb2e842298056567bf9b58957415483336233ef4920fa57f496e1f0348cca20366496fab3a75bf4214ece47a45feaa1392db3f254d96a7f37402c9811140d7358b4ef8f20a298eeef904e37d68f378d33cb96d00c03109fc83fd06a876c92482f61ab7914eb7c2e5e84066e0e91e21e42e9be23df12b5c747973cb86442c32291d3d1ae719b36a62faf3abaa2053a313f625d85c51a5198571915ef8a2b199ba37d25884575ba1b72844cab4328b57fab1ec974ee8ea1df7ca9c78a4d3a03bcb0ab4169bf06a3a438d9566c6c501d8d9ccccb1ac26b4da4ae1a9d8e8b9df662821ad975c9b015fe26f6898d22ab912f0e405a5b27cfd39d657dcd92cdebe6791902713484406dddce71188731e44319381af27daf76792273b8c35251d11b836afe8b3ce9b40273f6915ebe6bc95a75bb941a429209867fba8764bf6c40db6eecb4f21747837cf6ae7fbfe36d5023df7fce2c0c3c57af2898885313c5c4bda35c7da6cb29932fb1991f62bbb080b32e2050619311ae69abb3022d913fa9eabd5d5cb4dc54d75dca638cda9af331c0cf4d2007b6ca39f655a61c01039f12a4b9782bc39aec4d22ef0093388dd7d5b56dfb8a7f9d8669004e2878dd8a6d76857c0845245068fee1c5319631e78d3785165c70afd65299301378551ebf613584c6a7620a0e3b6779f38c0940062497008eb233870868c21cccac239501b63b749a85602c28a095cafc749b0511a6c878edb3b780ea174d07b121e315a826dda6ec8dc54363e2cd2e6305a194825c0ea90efd7a9fd89cd97b99c4300bd3bf9353d82fbcceea71b4ee3f1aae9539b4cce90ca477597c174ef20f4b9f4e62d09a570d3135aabee9551fa60983958c0b7b8c3744553ee14e7f3cd103a19251c99bf6384abb60a76afc6658b80dfc5110adc4c732fe0ee32933fb284828e008887aef80f6f813340446c0217c12ee\",\n        \"signature\": \"b701b8f9a434e06d719ad25dcc54060c7986647f44f3884bcb6e5ee1d7a446cc265cec029b537da7f2523326558ac9ba34f4cc2a97cca3452e70562e7a8f5504\"\n    },\n    {\n        \"secret_key\": \"12fe8e5ce20cafaa3279da7b34aa87752ead679f156128aaefb4afa5db4f2a6f\",\n        \"public_key\": \"e77f44206bb0c4c59a2870cfc2ecac63362deecbe8115de5cb1afc2d9a3d47f1\",\n        \"message\": \"6b80cc6fbbd332f8c6197cdf2e6dc19a2130faa2ec938ef558b884ba4fa5e113e5b3e4b1aaf51b695f13effe13f77d39cab3c07d04d66d430d9974b1da3d39df1278c00d6bcbfd4bae75b8c076404dbbb83448fb493df67000f97d247e8f23dc081fce992b65a21b35d7bd7fa7dccc54a560afd14b1ec436c10946f6aa59eae1be3ecf311def51e46b6b4d1d080d1784b2334b80cfba72cd931f55ecd298b05dc836ab12d0ad8b5d6e9b1e3cea3d843368eef19f5c14c6bbad9414cc7a4db6a726e4fcaed44440a019fe12a60573403c0e662dc902d1c873ff30c931ba7e43a3b3bf71d5b094ea504971647ca94356f0a53e444b4c008ee5977204221b400deec37fc273452545f8f218be988725bc38c85df212ea73dc0bc7cbbac907982fefad680fbd975c2093a7fe8e6b37c1cced87f81daa57291a5a18476d11a18ec4b5cbce5d55ac9b624b048430f254f671078506e6989df7c09256525039085ab7c130c240004abbb3af6b481cc1a0617e57e388ee4b1f052f34a003fe6bb202cb87d2741bd8e3454ca73d2f612011ecc74d88343510a63c9313ddc36c25d3fb03e188f560bd029c801585ce552988dc55b7d8522a3396c01d5e715ae26c622c64fed5b98e9c559e4aa78d1ed3b7b890d477ec8c50a0ff107a3f83b07bd35e9ce9a08bcfc0f168eec7aa311f71c66a71ceb9d5a2199a14be36865ca8d07e186b1392b9290c578004d584f191c82a53d850890bcc0d12dff840e043dddc2e670c836020924f58c044b218763ca61982bc332d247b2a008ab570b6565a06892a26cfb0853d79da28ef8b910a9329544b792ae4456ba7765066b9d1b4a300210448660ae48b504441017cddd1f6f00938b1072c8ab824adfe8ae34923c82eec754bee1a6550ab1d3da086e3aebbf21169c44469e03bbae0d72ce863457784cfe1dfc276f1afad9ee53ebab5a3c6572eb1cae099a4a5fe19319290e6a1b8b0e7541ed735b3f21b1e2c7509f87fd1fed00007479b3c1bb78432466302d246d8d031996307260a0c41a0e3ecd1e7fd834dac11a13eb036b39c369966fdef394c183e54e7b0cb3d0ceb198bd0e66c00d38db703aace30cbbdab369dfd1d9e514d0968f100c9f07c315089adb3ad02e59c04b9be46e99fbf5a62c6bbecdff5b381e55127824ddb18\",\n        \"signed\": \"04eaf900966e0992d36e3c220a4bd4d82bcc6eb998ed051dbcb9160bcd357409736bcff7e6630e96f5538aeca6ab8b0d0bd82c0cd7c4549917febb9cbada080c6b80cc6fbbd332f8c6197cdf2e6dc19a2130faa2ec938ef558b884ba4fa5e113e5b3e4b1aaf51b695f13effe13f77d39cab3c07d04d66d430d9974b1da3d39df1278c00d6bcbfd4bae75b8c076404dbbb83448fb493df67000f97d247e8f23dc081fce992b65a21b35d7bd7fa7dccc54a560afd14b1ec436c10946f6aa59eae1be3ecf311def51e46b6b4d1d080d1784b2334b80cfba72cd931f55ecd298b05dc836ab12d0ad8b5d6e9b1e3cea3d843368eef19f5c14c6bbad9414cc7a4db6a726e4fcaed44440a019fe12a60573403c0e662dc902d1c873ff30c931ba7e43a3b3bf71d5b094ea504971647ca94356f0a53e444b4c008ee5977204221b400deec37fc273452545f8f218be988725bc38c85df212ea73dc0bc7cbbac907982fefad680fbd975c2093a7fe8e6b37c1cced87f81daa57291a5a18476d11a18ec4b5cbce5d55ac9b624b048430f254f671078506e6989df7c09256525039085ab7c130c240004abbb3af6b481cc1a0617e57e388ee4b1f052f34a003fe6bb202cb87d2741bd8e3454ca73d2f612011ecc74d88343510a63c9313ddc36c25d3fb03e188f560bd029c801585ce552988dc55b7d8522a3396c01d5e715ae26c622c64fed5b98e9c559e4aa78d1ed3b7b890d477ec8c50a0ff107a3f83b07bd35e9ce9a08bcfc0f168eec7aa311f71c66a71ceb9d5a2199a14be36865ca8d07e186b1392b9290c578004d584f191c82a53d850890bcc0d12dff840e043dddc2e670c836020924f58c044b218763ca61982bc332d247b2a008ab570b6565a06892a26cfb0853d79da28ef8b910a9329544b792ae4456ba7765066b9d1b4a300210448660ae48b504441017cddd1f6f00938b1072c8ab824adfe8ae34923c82eec754bee1a6550ab1d3da086e3aebbf21169c44469e03bbae0d72ce863457784cfe1dfc276f1afad9ee53ebab5a3c6572eb1cae099a4a5fe19319290e6a1b8b0e7541ed735b3f21b1e2c7509f87fd1fed00007479b3c1bb78432466302d246d8d031996307260a0c41a0e3ecd1e7fd834dac11a13eb036b39c369966fdef394c183e54e7b0cb3d0ceb198bd0e66c00d38db703aace30cbbdab369dfd1d9e514d0968f100c9f07c315089adb3ad02e59c04b9be46e99fbf5a62c6bbecdff5b381e55127824ddb18\",\n        \"signature\": \"04eaf900966e0992d36e3c220a4bd4d82bcc6eb998ed051dbcb9160bcd357409736bcff7e6630e96f5538aeca6ab8b0d0bd82c0cd7c4549917febb9cbada080c\"\n    },\n    {\n        \"secret_key\": \"ee9b6c2e0c9b01472ce32d54d1762ab0303317d76d3aa78f5e08a9024ca1e083\",\n        \"public_key\": \"016df0f717bcb7adf626958d83bf8aa325c70518c68bc7efd84253b75db08788\",\n        \"message\": \"772cc25c3b69bb3ff5655664efa478ac414adfaea70ac4a2a887ed3968c54d34dbf1be32cc9a9b5420a4ad3c9a877bc8ccec94ad473aa7a3c7de08a0fdb5ed1e89872be78170be221d279776bbc6ed9c5a67168980d5eaf895e1340f5dfaa3df622d6544b399d74945fd13bb1173621e0561514640137aa7bc9cb7debeff2c626977d447263b7e57d43d69efb230cd25865e4d924828f5e36f964e403e3493f30d6dfea6ca3b781075b5e3b25c05ac50e555f15ba12b0e059bff996484129db6eafd88993d6f0b7ecd15dce2fc99f8b8e43516352ddb461a04b9ff3486452e6aa6a54b2d1062a7714250cd2a88ff6c4c17b6cc6652d8c5ac27d4443aebf3d5fbaaee4521ec76f0413db64421ec8d6949626725fe56160ab307c0e73906c45155efabb47222021f220d32bd3db0712abde2599ea4ff799717811dcdf8182df6716d2a038aee15d778da55ac20f01f25309cead5b5b7b22322e1828ea7c91ae666f2dcd684073148e31bb2247d5f93506ea8085227adc9ae1982e950f006a9da158b9cecff8929761c84f9d976fdcd317ffed36cbf6acda3e50c9b73bd2c8085409d119b64ced7349a2674262a832becb03c2edccac0ec54124e82f810181792da49ea10bd941f9895a06959fde0d3b0ae84c39df05390ab33c36c79ca22e6594d7fc6e3f86922d78eb7f5c25495d822a3b41051b24e57a76fcfc165cde6d096cc7b7e9d055fe864d52942d629a8ac261be1dcd3a21f895f49b67ee47eab7cf1644d571d5ff38c179f5c6a54a3612fb34753412a1b95bf62ff3179804ffbb99051f2b080563a4ae0f27cf996ea8be3bae0a4339dccdff6b6671559266eaff4eff682b8dee89c9d2d45acdbec4aa6cecdbdb1d284609e65efb77bb8f1a51fc4d4568a705fb9c97b2303c1467dff8c8c5ee27559b93ad1c5b9c5c6c7c529fa8c55c75ebb59b2a818aa9bda1e9e79bc66029772f8aea11badd3226565d54fd01bda8cb270e70dc9339b46900b5818e932075be6c28e73a191d02cbdc7454be12387b0d47a1ab14232d2342a6f1518ea97098b815a1ca3f9c70b25722b1bcd7dacda635622fc8e72959f57f767ea563da4c158eef7200109f61416c2e70439923062437b1d082a8c7f4394713c1b7ba0587b841c114475ee3ff059df8cfa12a321d901cb47f5\",\n        \"signed\": \"4b001d9642835d72138d680198e6af70b5de7af015131ea726f4e51b5e8b6d48c2a6ca8e8709cc8222a5047c09a66e518ac5e8b6e53548948261f0701f687308772cc25c3b69bb3ff5655664efa478ac414adfaea70ac4a2a887ed3968c54d34dbf1be32cc9a9b5420a4ad3c9a877bc8ccec94ad473aa7a3c7de08a0fdb5ed1e89872be78170be221d279776bbc6ed9c5a67168980d5eaf895e1340f5dfaa3df622d6544b399d74945fd13bb1173621e0561514640137aa7bc9cb7debeff2c626977d447263b7e57d43d69efb230cd25865e4d924828f5e36f964e403e3493f30d6dfea6ca3b781075b5e3b25c05ac50e555f15ba12b0e059bff996484129db6eafd88993d6f0b7ecd15dce2fc99f8b8e43516352ddb461a04b9ff3486452e6aa6a54b2d1062a7714250cd2a88ff6c4c17b6cc6652d8c5ac27d4443aebf3d5fbaaee4521ec76f0413db64421ec8d6949626725fe56160ab307c0e73906c45155efabb47222021f220d32bd3db0712abde2599ea4ff799717811dcdf8182df6716d2a038aee15d778da55ac20f01f25309cead5b5b7b22322e1828ea7c91ae666f2dcd684073148e31bb2247d5f93506ea8085227adc9ae1982e950f006a9da158b9cecff8929761c84f9d976fdcd317ffed36cbf6acda3e50c9b73bd2c8085409d119b64ced7349a2674262a832becb03c2edccac0ec54124e82f810181792da49ea10bd941f9895a06959fde0d3b0ae84c39df05390ab33c36c79ca22e6594d7fc6e3f86922d78eb7f5c25495d822a3b41051b24e57a76fcfc165cde6d096cc7b7e9d055fe864d52942d629a8ac261be1dcd3a21f895f49b67ee47eab7cf1644d571d5ff38c179f5c6a54a3612fb34753412a1b95bf62ff3179804ffbb99051f2b080563a4ae0f27cf996ea8be3bae0a4339dccdff6b6671559266eaff4eff682b8dee89c9d2d45acdbec4aa6cecdbdb1d284609e65efb77bb8f1a51fc4d4568a705fb9c97b2303c1467dff8c8c5ee27559b93ad1c5b9c5c6c7c529fa8c55c75ebb59b2a818aa9bda1e9e79bc66029772f8aea11badd3226565d54fd01bda8cb270e70dc9339b46900b5818e932075be6c28e73a191d02cbdc7454be12387b0d47a1ab14232d2342a6f1518ea97098b815a1ca3f9c70b25722b1bcd7dacda635622fc8e72959f57f767ea563da4c158eef7200109f61416c2e70439923062437b1d082a8c7f4394713c1b7ba0587b841c114475ee3ff059df8cfa12a321d901cb47f5\",\n        \"signature\": \"4b001d9642835d72138d680198e6af70b5de7af015131ea726f4e51b5e8b6d48c2a6ca8e8709cc8222a5047c09a66e518ac5e8b6e53548948261f0701f687308\"\n    },\n    {\n        \"secret_key\": \"a3d23505d07c5f937f13639dbd818e85145234ee7017ecee8636c7ba76ebef5b\",\n        \"public_key\": \"fd7fdb3d022ba36eadfed0daaae5bff04505403f171473e4d361ee8d150a0eb4\",\n        \"message\": \"bc298ed69892904028725e21b114462d89d8c006dc884b178756838af4954ff0f1b79517307a258a0e7681e879ac47d7920230b0cc1d66171eb214d77cd97f617c405e6c2172fc589f1625cc5e1b593110531f6eb53f1e6f486d1964612447750a041fe51b332eb3fbc711616ce35f040442b43163b80b751e21ec1245f12e4883c79d3b413282c69bfc6a465d1e7896bab038dc89b4cfc032fccdfc87b07f06110e1f506acca8157a322543bf1ed8906727f28d0d689bcd7dd3df85935204a904ab3f7a0d99c16e5a542cc2bcdebf5b502dbabe33b972480e02e71a438a1980a8766f108bd8ad51104223994d9bfb3c3a4b7a59238ce2ef7d7288383ffbf291e1602b384af60700d7daf0e8fe60f8caede43db06b3f4c8cfff749aeafa46fc61c49b2d5a41204cf86f049254d809e9498aa9d4cfdb94acb2babfcf786ddfb03691516b3838b0d4f201cb2591edbb0b0f674e1e2820316b72e81b48cc5a6b29338bc36681f8f7dca43ee6c0bd2e402afbf967797516453bc01be86bf42299d1b736a0d97bbc922f5a78af2df42e6f8c28e953f2ceadaffc5e93064041e425ad6975f88c7aadf81c368691a581e885f2a6ba72ed68b8fefbcd6ce368626d44892a20270b5f709c2e34b8335d42eebd67a24df73f45455c41944187b6692f054b2fc9591373f19fc71aa7fa27df6006a1d549bbfae7d3c3eb36e5ab2aaa10aa5538da7ef36c8ff354b6058134004d660a4036321caad00a30b1c498ba3d808c4405ef79618fc2212a7b83396a3d7cedceb863c66374dc469ae183c7ed74b3e70d6374a062de0379b21cf25d3c4c5762115cdfe755545e89ad4052bb0279d938e90de3abf504410caad72b7c29f53d01d9dd7f2ec5e459a04592bdd66416613e6edd004569e0e6c98827b8c1d7002a6d1bf303e18259501dd89f6ee94766d18af810463eb13b2efddf1723af735a88716e1fcb4b7b43cb97e1cc903b2408ef453ada4164786f00845fbfa1ffca5cc3e1c4bd9940e7d99aef919166d058b51453c9c14fb9f3251ec5fe4f153c70a4492dc3496296186f23ad47ebad13c66e68727ce50ba9487f1801890b693efebfc37bb5d95f8af548ec8d6498289e55f9883fc5be84c256d2bc5484938c709820d9b6b8059c0aa4267dde69078e487c8865c0b130a0ca8ca\",\n        \"signed\": \"67a667ee0d6254ca0a8f212582c0cb8b6ed97cc967db021296ad6aa99f0ad3a944978cfdaff13fe5f8c6e88cbd831a5473d0742e3734b3e2df00ff3240a5de02bc298ed69892904028725e21b114462d89d8c006dc884b178756838af4954ff0f1b79517307a258a0e7681e879ac47d7920230b0cc1d66171eb214d77cd97f617c405e6c2172fc589f1625cc5e1b593110531f6eb53f1e6f486d1964612447750a041fe51b332eb3fbc711616ce35f040442b43163b80b751e21ec1245f12e4883c79d3b413282c69bfc6a465d1e7896bab038dc89b4cfc032fccdfc87b07f06110e1f506acca8157a322543bf1ed8906727f28d0d689bcd7dd3df85935204a904ab3f7a0d99c16e5a542cc2bcdebf5b502dbabe33b972480e02e71a438a1980a8766f108bd8ad51104223994d9bfb3c3a4b7a59238ce2ef7d7288383ffbf291e1602b384af60700d7daf0e8fe60f8caede43db06b3f4c8cfff749aeafa46fc61c49b2d5a41204cf86f049254d809e9498aa9d4cfdb94acb2babfcf786ddfb03691516b3838b0d4f201cb2591edbb0b0f674e1e2820316b72e81b48cc5a6b29338bc36681f8f7dca43ee6c0bd2e402afbf967797516453bc01be86bf42299d1b736a0d97bbc922f5a78af2df42e6f8c28e953f2ceadaffc5e93064041e425ad6975f88c7aadf81c368691a581e885f2a6ba72ed68b8fefbcd6ce368626d44892a20270b5f709c2e34b8335d42eebd67a24df73f45455c41944187b6692f054b2fc9591373f19fc71aa7fa27df6006a1d549bbfae7d3c3eb36e5ab2aaa10aa5538da7ef36c8ff354b6058134004d660a4036321caad00a30b1c498ba3d808c4405ef79618fc2212a7b83396a3d7cedceb863c66374dc469ae183c7ed74b3e70d6374a062de0379b21cf25d3c4c5762115cdfe755545e89ad4052bb0279d938e90de3abf504410caad72b7c29f53d01d9dd7f2ec5e459a04592bdd66416613e6edd004569e0e6c98827b8c1d7002a6d1bf303e18259501dd89f6ee94766d18af810463eb13b2efddf1723af735a88716e1fcb4b7b43cb97e1cc903b2408ef453ada4164786f00845fbfa1ffca5cc3e1c4bd9940e7d99aef919166d058b51453c9c14fb9f3251ec5fe4f153c70a4492dc3496296186f23ad47ebad13c66e68727ce50ba9487f1801890b693efebfc37bb5d95f8af548ec8d6498289e55f9883fc5be84c256d2bc5484938c709820d9b6b8059c0aa4267dde69078e487c8865c0b130a0ca8ca\",\n        \"signature\": \"67a667ee0d6254ca0a8f212582c0cb8b6ed97cc967db021296ad6aa99f0ad3a944978cfdaff13fe5f8c6e88cbd831a5473d0742e3734b3e2df00ff3240a5de02\"\n    },\n    {\n        \"secret_key\": \"6e265105ee7171d1bd793effd87d1e2c79450d5e188b57be3aa162e2a52528ad\",\n        \"public_key\": \"1f403c7a755031c13ca63af57635dc6e2c4f23bd6b1d67ca65da68b09943c554\",\n        \"message\": \"f8b9d4b027ebb10ee511819e6e56fb1ba9584018418d82885a38a449086007b8785b5105caf782bf9b36da039cc60e227c7e1614f29b640b1e9b22747eea7a6725614e89e0783ebebbb7ee557ef36b2b46cf6461e5be2ad1d7a7c2711a475ca4fbc33092ba425667e34d090060518f2fec636b049123876ab21c8bd9c50dccb984ca011a02eea020564fa821fc362bfe392aab50c273fc7b5a042188e331621b9d2f743e5c8cf3ab1faffafe2a0004c8ef7cdf5e6dbb5eb544e4289f71a6fd15c638ce29d28efb9c039e477429a3497a83827e76ce77a49816d90b41a8e152f37a09e6340dfe069a4ac6f27dd2eac747fd21e3152088c1b1ecd32ac679927490750488c291785147b63b0b8ff11d189b9049b8a396b6932f85bd6a15eff9f0ce1808411af0f9c8e6e97b814f110bd4df1386a9797dc511f0aab6ab65071d9ea836532cec51b92ca7fbdb8de1c8436658de2eb65edd86044f6c1aba3178647ad678612ee74f046ca3c7fe2f39c09dd2e07df2b4227085fe936e794d22fd5f40a25f08771580ac801d9889f5a76aeae1f0cc4a9e1edbdda3750c74c850524b32f44933fd883b5372bfb7e761e069fe7c1c0e7fbd4a7f58467ea6883f9d5b7f66d386b0499bb6fb5ead89c9a1fd2cceb973e2879b5d03eaa452e16022d59617daa0486f4d4c117807fda8499dfb7a286fd2f71a8eb5fe64065c41e4e1e2362ab4e477969e3a408a247e3a56fc86f2b01ef8d3cdda87258234bc7f25b66907f364b37b6245296c4fdf499f20237f4864852fc5d8cd5d05418be8b13859ee9a43e17e1f57a4c35ea282ed68ebcda6828174245a49c6cb6590eb1f2dcfb007bfa1c32077956da9acbe3ef0723799fdb869d8de30706a9c026814d16a01e033c91b59070dfe445c5b848a516612e5131fe8486921e36b8e7ef157a88822886c681b5da71fea94d957dafec26f4147a3b2ac383a5f47c8585eb17a8ac65790641b4218d755f8bea4d97ae2a45bdcdc23236294d852c95d08406d2e9bd30c326452538c1f5e5004d4a1a82720da32e59dc3ab18ea08a058f791d24418556086c1e4edce8982aa23b118fb266e60b542780a6933add913265512c07b114978d44af73b2030ec47b06fd09dda8c4f1d4e313775468c451f9ee611e9cd4c0845c2501948a7b14ef1d4b5cf\",\n        \"signed\": \"b5a83a117a60345a67e4a665f37de722a6ec03913829389959f376ee626477e654ac8d720fc727d4bb8fe1544f5d0b0b850514290b24273c4cd4b73aca4a5300f8b9d4b027ebb10ee511819e6e56fb1ba9584018418d82885a38a449086007b8785b5105caf782bf9b36da039cc60e227c7e1614f29b640b1e9b22747eea7a6725614e89e0783ebebbb7ee557ef36b2b46cf6461e5be2ad1d7a7c2711a475ca4fbc33092ba425667e34d090060518f2fec636b049123876ab21c8bd9c50dccb984ca011a02eea020564fa821fc362bfe392aab50c273fc7b5a042188e331621b9d2f743e5c8cf3ab1faffafe2a0004c8ef7cdf5e6dbb5eb544e4289f71a6fd15c638ce29d28efb9c039e477429a3497a83827e76ce77a49816d90b41a8e152f37a09e6340dfe069a4ac6f27dd2eac747fd21e3152088c1b1ecd32ac679927490750488c291785147b63b0b8ff11d189b9049b8a396b6932f85bd6a15eff9f0ce1808411af0f9c8e6e97b814f110bd4df1386a9797dc511f0aab6ab65071d9ea836532cec51b92ca7fbdb8de1c8436658de2eb65edd86044f6c1aba3178647ad678612ee74f046ca3c7fe2f39c09dd2e07df2b4227085fe936e794d22fd5f40a25f08771580ac801d9889f5a76aeae1f0cc4a9e1edbdda3750c74c850524b32f44933fd883b5372bfb7e761e069fe7c1c0e7fbd4a7f58467ea6883f9d5b7f66d386b0499bb6fb5ead89c9a1fd2cceb973e2879b5d03eaa452e16022d59617daa0486f4d4c117807fda8499dfb7a286fd2f71a8eb5fe64065c41e4e1e2362ab4e477969e3a408a247e3a56fc86f2b01ef8d3cdda87258234bc7f25b66907f364b37b6245296c4fdf499f20237f4864852fc5d8cd5d05418be8b13859ee9a43e17e1f57a4c35ea282ed68ebcda6828174245a49c6cb6590eb1f2dcfb007bfa1c32077956da9acbe3ef0723799fdb869d8de30706a9c026814d16a01e033c91b59070dfe445c5b848a516612e5131fe8486921e36b8e7ef157a88822886c681b5da71fea94d957dafec26f4147a3b2ac383a5f47c8585eb17a8ac65790641b4218d755f8bea4d97ae2a45bdcdc23236294d852c95d08406d2e9bd30c326452538c1f5e5004d4a1a82720da32e59dc3ab18ea08a058f791d24418556086c1e4edce8982aa23b118fb266e60b542780a6933add913265512c07b114978d44af73b2030ec47b06fd09dda8c4f1d4e313775468c451f9ee611e9cd4c0845c2501948a7b14ef1d4b5cf\",\n        \"signature\": \"b5a83a117a60345a67e4a665f37de722a6ec03913829389959f376ee626477e654ac8d720fc727d4bb8fe1544f5d0b0b850514290b24273c4cd4b73aca4a5300\"\n    },\n    {\n        \"secret_key\": \"c4370d2aaf35acd158fc0d1622a399c99f41b9da4e970b354e5ba05cbe844ca8\",\n        \"public_key\": \"3545d7d4c95c3db6a54530537afafa4d86ddecf9cc7e66c319ba9f7dd7d07ee7\",\n        \"message\": \"619f57de2b1dbaee209a825d8ca97f84ee49eb12a0b13dcdd2b3a4ee45e0176d474cf09460c831a8ae1d3f39beebd08808b3ed1761213ba953421860cc07e2db312e680df03e60a6870264abca8fd51301e1c1562023d802ccd5c7d196db39fbb8304b0e59e333164192ecc333387eef69c7a78a5d11258862d6c281b19c0bd336cd3edb2f9faad4021ac2f205c16814b38548433ff9eddfd61133779769dc69afac658afc1d1b416d390ad5b45a1ad5cc4b00b4b278fbe4b59d52e61a6a5fd00241c6cbc382d2d621a3ded002019b330560e361faab28f41d1af9c9c0020f2baf99e8d8ee58e3122202147c0adc57d670c5b380af594cc7ed57b87ec6674ab63f3a9849753b9462aab5de88c948a8b109af4d4954927aac58bee953be0d8d7d71aa11d11f1a87b1477b9170bd735cfc2449f051b82bc59b0bee76a172e8d32670f51ddddb804ad110a565e384cdb76fad04cff67893091e41e69cfdf70ea926c26369a5b6193b19ab0a62558da55ffafeb8789757710644aa19f474be4ada9dc1849b07d5e17b85f921e1016a54aa6095777253a73426fc7864b9955f04907023db207f85dd21a65106cf0d622385870c34c2da9a11e4726395121e4a6761fb522229d9e5cc9dab35aeb87d0d79693c006fde1cfaf116208bba962059cfc0d2d6370aac7748362ee6a0a3ca7bf133ebcfa20f1c4ed8307f800cca7e6c4beaa3fb2ab086125364285c44ed1a737a67cbf3b763c9f8b1427e89dfa96d290e9d4842fe6316afef834cd8cd1fdc1f124ca3fe26266da62e275c0bf7fcc8e5f9bba6c0d38e23fafab1e049481794c14f4a8c53be1c96f769c9b13eaca39a0e49366d2c9ffe8f206360a9d503dec598621112e3776713e7fc0649433e257e503a546059a989da89157d76476005fd90e4b07aaf0db0bc0bc0b67db8dcbadff39374e1afae551634e0e32831ad0e5fa7d5216fa7c644f73e1e8e07238394a416c169aa9d5303f469a5d4074308721ffddeff6559e5adf0c2773b3f5264e7aaa8c2db888e28e815c71069c3b4ce6c29034c0ab3b5c19a80a9d8c2e874813531c422752ad62b3c5a1a3d6c5a5db587270693aa75d5f172eeddf4eb839bd793affb1c796a1df0e442ddf99b780aa41eea0fe6f865bb539ca53aa45db9a856cb75d0151d35edea80f2946d\",\n        \"signed\": \"9febab5ae161d692a6a394500a2890d21c7f0ee26f4640aaba4fe66b90b89edcb80ea4cdcabb4d2c3a5c4154e8ff20d0e237fefd00c7ba9782e1748f6488ac01619f57de2b1dbaee209a825d8ca97f84ee49eb12a0b13dcdd2b3a4ee45e0176d474cf09460c831a8ae1d3f39beebd08808b3ed1761213ba953421860cc07e2db312e680df03e60a6870264abca8fd51301e1c1562023d802ccd5c7d196db39fbb8304b0e59e333164192ecc333387eef69c7a78a5d11258862d6c281b19c0bd336cd3edb2f9faad4021ac2f205c16814b38548433ff9eddfd61133779769dc69afac658afc1d1b416d390ad5b45a1ad5cc4b00b4b278fbe4b59d52e61a6a5fd00241c6cbc382d2d621a3ded002019b330560e361faab28f41d1af9c9c0020f2baf99e8d8ee58e3122202147c0adc57d670c5b380af594cc7ed57b87ec6674ab63f3a9849753b9462aab5de88c948a8b109af4d4954927aac58bee953be0d8d7d71aa11d11f1a87b1477b9170bd735cfc2449f051b82bc59b0bee76a172e8d32670f51ddddb804ad110a565e384cdb76fad04cff67893091e41e69cfdf70ea926c26369a5b6193b19ab0a62558da55ffafeb8789757710644aa19f474be4ada9dc1849b07d5e17b85f921e1016a54aa6095777253a73426fc7864b9955f04907023db207f85dd21a65106cf0d622385870c34c2da9a11e4726395121e4a6761fb522229d9e5cc9dab35aeb87d0d79693c006fde1cfaf116208bba962059cfc0d2d6370aac7748362ee6a0a3ca7bf133ebcfa20f1c4ed8307f800cca7e6c4beaa3fb2ab086125364285c44ed1a737a67cbf3b763c9f8b1427e89dfa96d290e9d4842fe6316afef834cd8cd1fdc1f124ca3fe26266da62e275c0bf7fcc8e5f9bba6c0d38e23fafab1e049481794c14f4a8c53be1c96f769c9b13eaca39a0e49366d2c9ffe8f206360a9d503dec598621112e3776713e7fc0649433e257e503a546059a989da89157d76476005fd90e4b07aaf0db0bc0bc0b67db8dcbadff39374e1afae551634e0e32831ad0e5fa7d5216fa7c644f73e1e8e07238394a416c169aa9d5303f469a5d4074308721ffddeff6559e5adf0c2773b3f5264e7aaa8c2db888e28e815c71069c3b4ce6c29034c0ab3b5c19a80a9d8c2e874813531c422752ad62b3c5a1a3d6c5a5db587270693aa75d5f172eeddf4eb839bd793affb1c796a1df0e442ddf99b780aa41eea0fe6f865bb539ca53aa45db9a856cb75d0151d35edea80f2946d\",\n        \"signature\": \"9febab5ae161d692a6a394500a2890d21c7f0ee26f4640aaba4fe66b90b89edcb80ea4cdcabb4d2c3a5c4154e8ff20d0e237fefd00c7ba9782e1748f6488ac01\"\n    },\n    {\n        \"secret_key\": \"bd3de1a1d164bd6e9be0a6d107f703a6dd914c8667cd341d139f19578d933b16\",\n        \"public_key\": \"9b024964bdfa852eb2d4144f35b7cdc26781143c2bd7f660233f8b8aa36071ee\",\n        \"message\": \"1769fcdbf51247ed4c83a00bbbf02f4428da6fceddd0161a02fccd1500970665e1c7630ad22e3d9749c792e71a260cfff6053256e02f5b47bba14b761ae53ca7219ed2801d2d788e26419f36c81ef92c2303683735c8a1756adab6a487923153e435603c96b239553edfdeb093298f7ae7dc90f16a7e5664b9e4c02ba731a23cf2234e250ac9742633a932a948bb83dc3d794d059fedf4ec8618c7433c5d8fe5e62cf07b5768c4d9b261c71536804fe2e7ca7098876521d57677361424e47f1b959237f90710421f5bc4f109f7d489c755e94eefdfb3c85b90ec013181a23bb9535feea4941d0a06a540bd6b588e55b7f35757149ca3e640965e1a0ff7f3c8259259957ff5dab9fb8732eae719b624a4492878179b5a83abe51caf02083d737ceb4fcf042f2e60ba0297ac72b87fe3e14ba5fbc54b48091073896823bfa289ce8e16873b48812c32bfea5ff6bb221d1ea5463d325bbe311e7fd1e783de650b7952eae461d63bc7470522af5b7789f8fc2eb192d2cf776c5c24b44e29cdb0cccb1d90361438e4950ff34dbcb3cb0e81cc45f8d0ff570949f78084e1060ff5594ad516f50f1cb0a765e1c0e038d5943b936e4a8b493354e79abc917bb9271266eeba77a93a657f9ad87b291ac7ea386f5d4fcbc582e72d5c23d92ba944b0064c20e3e2dcf504bcc7c6966c63f2080843600ba313ec27cba95e7ef318168c9067dce86c1ef0d5d9eb7a6158489df32ed58b6931030818f00705a0dc55d3dbf8006a8546641b1865d919bc242202cb3ae300bf8653e3b37894c3dc0e477b9d7c41baf8d3887c2eb59b1e4d50bbb6f1792a1c9367c65cdb450c2dfa2145e611a97ad81cff1fd83c6cf7230947eaff4c21dc1bafb71ec41e5bc72b3745ec3e38bf5930c126d060f0c50a895f009aa18e87f2174f58ab5379a721fd83aad5517fd99dff146edeea61521235e2f1a16ee58303e091be8d579094c1d8a20bc74a550d77c00d087571517a63cd4126933a4f09a070bf8ea4ffb846a9780e9734043bac4c0ff47b1afccf5293ac14bc73ebf67129657e4b8a8b33ddac7b0f4d719d2dc65df6ea0a3f24cf44c8338ed601a3939ca358fc4be13e8ede027539712ca23e3ffba706e8fdd62a074ee0ad7420f78060cc96fb2abf30e9eaa241c0f87ebbe3ec73517596f7c3c5a80c\",\n        \"signed\": \"13cc158fd061792fced156879598251dd01d575b400fe3e39a700863aae8db1f9197fa501c0cf993e44d6ac55180b869838e8ae24b214fa35e244b7a6cff6d0d1769fcdbf51247ed4c83a00bbbf02f4428da6fceddd0161a02fccd1500970665e1c7630ad22e3d9749c792e71a260cfff6053256e02f5b47bba14b761ae53ca7219ed2801d2d788e26419f36c81ef92c2303683735c8a1756adab6a487923153e435603c96b239553edfdeb093298f7ae7dc90f16a7e5664b9e4c02ba731a23cf2234e250ac9742633a932a948bb83dc3d794d059fedf4ec8618c7433c5d8fe5e62cf07b5768c4d9b261c71536804fe2e7ca7098876521d57677361424e47f1b959237f90710421f5bc4f109f7d489c755e94eefdfb3c85b90ec013181a23bb9535feea4941d0a06a540bd6b588e55b7f35757149ca3e640965e1a0ff7f3c8259259957ff5dab9fb8732eae719b624a4492878179b5a83abe51caf02083d737ceb4fcf042f2e60ba0297ac72b87fe3e14ba5fbc54b48091073896823bfa289ce8e16873b48812c32bfea5ff6bb221d1ea5463d325bbe311e7fd1e783de650b7952eae461d63bc7470522af5b7789f8fc2eb192d2cf776c5c24b44e29cdb0cccb1d90361438e4950ff34dbcb3cb0e81cc45f8d0ff570949f78084e1060ff5594ad516f50f1cb0a765e1c0e038d5943b936e4a8b493354e79abc917bb9271266eeba77a93a657f9ad87b291ac7ea386f5d4fcbc582e72d5c23d92ba944b0064c20e3e2dcf504bcc7c6966c63f2080843600ba313ec27cba95e7ef318168c9067dce86c1ef0d5d9eb7a6158489df32ed58b6931030818f00705a0dc55d3dbf8006a8546641b1865d919bc242202cb3ae300bf8653e3b37894c3dc0e477b9d7c41baf8d3887c2eb59b1e4d50bbb6f1792a1c9367c65cdb450c2dfa2145e611a97ad81cff1fd83c6cf7230947eaff4c21dc1bafb71ec41e5bc72b3745ec3e38bf5930c126d060f0c50a895f009aa18e87f2174f58ab5379a721fd83aad5517fd99dff146edeea61521235e2f1a16ee58303e091be8d579094c1d8a20bc74a550d77c00d087571517a63cd4126933a4f09a070bf8ea4ffb846a9780e9734043bac4c0ff47b1afccf5293ac14bc73ebf67129657e4b8a8b33ddac7b0f4d719d2dc65df6ea0a3f24cf44c8338ed601a3939ca358fc4be13e8ede027539712ca23e3ffba706e8fdd62a074ee0ad7420f78060cc96fb2abf30e9eaa241c0f87ebbe3ec73517596f7c3c5a80c\",\n        \"signature\": \"13cc158fd061792fced156879598251dd01d575b400fe3e39a700863aae8db1f9197fa501c0cf993e44d6ac55180b869838e8ae24b214fa35e244b7a6cff6d0d\"\n    },\n    {\n        \"secret_key\": \"f6ae516a51296fc523cea5f008cfbd09e73f78b6fdd3b69426128041a5604cf9\",\n        \"public_key\": \"376c82ba7b87aa77418727db33d326ae758bf7a135c10460cd8bf8feb83c2b10\",\n        \"message\": \"8342f25ac4b17ebad6f79b9a033175c7f28af09e658e8cb98c294f15c3c8342629cb2a3247dfc875b82f5b380c5d11426a2eeb62450bd885650107c68362a3b72ce823f2d15942b7dda301d2fb638f302aa9570b47911dadd3bddbfed554c1c80bd718078b8bd2c9c314a5166f265e8266ee2db357561a5585c414a7840bfae609d7cddde1fade85560f23d638ef3d52e51f5cf313a072c5ea0f817f7281e2cba5c5c8d26c928592b81f0ff8cd18db5a2c41d880d74473863c7bbd0056fa4d4afabd17a3b89d97d3fe5dc06b0f612a1d66423923ba8dfbb8ec8246624d83784eba4f5736ba385e442296c8cb0f1b68e03342b2c6c103346f6dd740e26c3d13caef801d1b2621d89f069391a078d43ae6ff12eeca66bc32637b45f0ac627c2d7bbf8a49d9468175e26885e02821d3a3baa2c3e3a6bb96b57526e224cf3d859f669573cbd5c87393746156f3d1c7a80308dc1f2405bf0d40be1ca73b767dedf4031337c081bfa3ae6e54f6023f42f0cbd87762db55913c707206034010df2aa8753d030f03c267e71a9dd2c6c19de3e1851abfacbbd5dd5bf896fab8e415317b49f1e4096e3da99a5b5d0a3c42daf9de94847c1e53c8818a5b843323f501e3a7fa68df89a5f41f2c62c38d17f250b02a67fae47daf063f558942377ef8a89052f1a215d768f7913a7ec14e98b81e4b2ccf26bacad6f39664afc0e91a3cad691db2bf56a7ab6677b49596db887c97def43508a7a2ec2ab755ec368e2e53d1e16b60fff09c3b52263f0f7c1ea9cc35373197e95c11e6d22fa9d8299c423736f5814f1e798d227518600df6a790358deae38d5639e1983fe018436ea58ba8467548c929efbb16dfea4102253a350fb84d9831c4c2cbcb76e18d7f3e953641ada41421393091e63dfe66de24c99232c7d6a2837a48983cf5b16331ce00050d1c713958ffce5f2e9348c52f53120579a7c9a16008d134838e596129c702fcd21148bdf9174d48e2da0a8a66359edee01c5009ef6742fec41c1acecd03efe1ccc9b130d6e5ac92576a85ccb7cfc7d0e4233106172931a08699790bc41acfbb731adbb26d56b39aaa5b333bc1a10e2c7064ca86119d8c717148f92441af24cd2aa8f57c86ba38a59a100b9276df3827ec7fb4d3faf58be31c6ecafd69cf1c6410a49cd7081ff6e9fc397c2d20\",\n        \"signed\": \"0fe4dd7e1f608ee82b7fe863d1b03a81843ce20c762cd8bb24efd46ba025fff3331d875752ca7220c53dd3c71f2bc1e2c64a2f9c58865a2a244809f4134e53078342f25ac4b17ebad6f79b9a033175c7f28af09e658e8cb98c294f15c3c8342629cb2a3247dfc875b82f5b380c5d11426a2eeb62450bd885650107c68362a3b72ce823f2d15942b7dda301d2fb638f302aa9570b47911dadd3bddbfed554c1c80bd718078b8bd2c9c314a5166f265e8266ee2db357561a5585c414a7840bfae609d7cddde1fade85560f23d638ef3d52e51f5cf313a072c5ea0f817f7281e2cba5c5c8d26c928592b81f0ff8cd18db5a2c41d880d74473863c7bbd0056fa4d4afabd17a3b89d97d3fe5dc06b0f612a1d66423923ba8dfbb8ec8246624d83784eba4f5736ba385e442296c8cb0f1b68e03342b2c6c103346f6dd740e26c3d13caef801d1b2621d89f069391a078d43ae6ff12eeca66bc32637b45f0ac627c2d7bbf8a49d9468175e26885e02821d3a3baa2c3e3a6bb96b57526e224cf3d859f669573cbd5c87393746156f3d1c7a80308dc1f2405bf0d40be1ca73b767dedf4031337c081bfa3ae6e54f6023f42f0cbd87762db55913c707206034010df2aa8753d030f03c267e71a9dd2c6c19de3e1851abfacbbd5dd5bf896fab8e415317b49f1e4096e3da99a5b5d0a3c42daf9de94847c1e53c8818a5b843323f501e3a7fa68df89a5f41f2c62c38d17f250b02a67fae47daf063f558942377ef8a89052f1a215d768f7913a7ec14e98b81e4b2ccf26bacad6f39664afc0e91a3cad691db2bf56a7ab6677b49596db887c97def43508a7a2ec2ab755ec368e2e53d1e16b60fff09c3b52263f0f7c1ea9cc35373197e95c11e6d22fa9d8299c423736f5814f1e798d227518600df6a790358deae38d5639e1983fe018436ea58ba8467548c929efbb16dfea4102253a350fb84d9831c4c2cbcb76e18d7f3e953641ada41421393091e63dfe66de24c99232c7d6a2837a48983cf5b16331ce00050d1c713958ffce5f2e9348c52f53120579a7c9a16008d134838e596129c702fcd21148bdf9174d48e2da0a8a66359edee01c5009ef6742fec41c1acecd03efe1ccc9b130d6e5ac92576a85ccb7cfc7d0e4233106172931a08699790bc41acfbb731adbb26d56b39aaa5b333bc1a10e2c7064ca86119d8c717148f92441af24cd2aa8f57c86ba38a59a100b9276df3827ec7fb4d3faf58be31c6ecafd69cf1c6410a49cd7081ff6e9fc397c2d20\",\n        \"signature\": \"0fe4dd7e1f608ee82b7fe863d1b03a81843ce20c762cd8bb24efd46ba025fff3331d875752ca7220c53dd3c71f2bc1e2c64a2f9c58865a2a244809f4134e5307\"\n    },\n    {\n        \"secret_key\": \"83f789900f040dc62f4d18784cb64b63c88e8d18001696bbeb4707c469d11a5b\",\n        \"public_key\": \"edfc2bab7e79f40037fe4d9041de48da9aee8f978098d7b0ae17929025e4273d\",\n        \"message\": \"6c112a20d30657ab5f8c5c04478d6c42d1c6bdef38cd4fe006ac2a57e290ff29287896eea8c30a0139c18fc8c97564563e86c8d34056a6719bfe479d9e87e81b19452331bfa154806882e5039a20c9e954b1fc7c015dcf5815bd7cf7b6357df9280b9bd43f89ffc91945323b5acb2ae00254d4162868d1c83ec6e0fcbe7a8ab9254192149c6bc9e5fe350694165d6638331eb24e3b1390c698c4838378c01b2c61a3ebe2c060b98ba6ee02b519b4eac1e0bcc09b2324ccf5b1a7fe8fd0b1545a9427832abb25744eeb36326be64efed3a7b07d630a21c3081b55261c353287c66c57663a99db466a5dee22746b81c750ef85be51143e221ecdf114fef1b3082ff54fd044bc884bfb3cc5c5335997009867ce9491a80fe696825f99426defab6a49badcde403f58e8317966210747b567754de53076b3ecbf65346cb83905832e16d01b50b93d37eb9bfe20172a31630d25f3217d87d93465fd8ac554cbbb39d982ead7219391234c889f0b92a2e0413d866cac087d628ce31c61c6323ecb8e689555af10de2b656e6aea2cde932e241f6d1f8a9e3316cf13f135acef83a0c0cf22f95ca818e61f92768774c630e0925be99dbd32b499c0fe7d84a42e393287f6f5ce3d0b271f170045a6d48eab316fe17b1858b1ffeee90888f3a37a2480dfd04a4a8629f868b5c0a80ee1f03719f3a47d4095bef10e0234fc300e2af482285d78937968319da94beb6c40e078577c024f3a5cda0084e2f855a9396aaa9ee9bfaf2cc771fe68c40b629e8dcf115ef03e757a2ac9eef073f1bdf9c5a4410031558a6d382b5f16024b151b1c01ee7817413a3c4de9dd6478785b81101df5522430058780207e790f612d78e5705ceed46b0ec075e7c1dc073b17b2b43d72535927bfd271e92e3c93638e40a9601dc2c1ab76d91a4103df657d911c829ee8a5f747f7642f5a915a5f40f630b43039c7d4bd2ad2b32129d94e5b2f03ad4a3d45577eb81f369c9e3e2a4f6a8e41acf8283be58425ea993b8e98eea6330556648618dad98fa255620d836d3c7f29b907895849286167c7181e2caf55c2c184a9a911f8e41cb042e2cd48b0544ea79fe2ef381ebc5b15e39a9b5c6d998faeaaa7773cfec084c0bfaed1bcab963a4ef3d94dbb3dfe724c040ce4d1e2ee7fc2da4b25127ce3a5df693fcf5a6ed1\",\n        \"signed\": \"ea6582cc23e0460917f782d964e3bb6dcde0aeeac42cc14919d36ce78aa0afd98072f54c795fbfd7a41d99d70606c28a5dcf19be38a0ce2d09bb8f844c31bf006c112a20d30657ab5f8c5c04478d6c42d1c6bdef38cd4fe006ac2a57e290ff29287896eea8c30a0139c18fc8c97564563e86c8d34056a6719bfe479d9e87e81b19452331bfa154806882e5039a20c9e954b1fc7c015dcf5815bd7cf7b6357df9280b9bd43f89ffc91945323b5acb2ae00254d4162868d1c83ec6e0fcbe7a8ab9254192149c6bc9e5fe350694165d6638331eb24e3b1390c698c4838378c01b2c61a3ebe2c060b98ba6ee02b519b4eac1e0bcc09b2324ccf5b1a7fe8fd0b1545a9427832abb25744eeb36326be64efed3a7b07d630a21c3081b55261c353287c66c57663a99db466a5dee22746b81c750ef85be51143e221ecdf114fef1b3082ff54fd044bc884bfb3cc5c5335997009867ce9491a80fe696825f99426defab6a49badcde403f58e8317966210747b567754de53076b3ecbf65346cb83905832e16d01b50b93d37eb9bfe20172a31630d25f3217d87d93465fd8ac554cbbb39d982ead7219391234c889f0b92a2e0413d866cac087d628ce31c61c6323ecb8e689555af10de2b656e6aea2cde932e241f6d1f8a9e3316cf13f135acef83a0c0cf22f95ca818e61f92768774c630e0925be99dbd32b499c0fe7d84a42e393287f6f5ce3d0b271f170045a6d48eab316fe17b1858b1ffeee90888f3a37a2480dfd04a4a8629f868b5c0a80ee1f03719f3a47d4095bef10e0234fc300e2af482285d78937968319da94beb6c40e078577c024f3a5cda0084e2f855a9396aaa9ee9bfaf2cc771fe68c40b629e8dcf115ef03e757a2ac9eef073f1bdf9c5a4410031558a6d382b5f16024b151b1c01ee7817413a3c4de9dd6478785b81101df5522430058780207e790f612d78e5705ceed46b0ec075e7c1dc073b17b2b43d72535927bfd271e92e3c93638e40a9601dc2c1ab76d91a4103df657d911c829ee8a5f747f7642f5a915a5f40f630b43039c7d4bd2ad2b32129d94e5b2f03ad4a3d45577eb81f369c9e3e2a4f6a8e41acf8283be58425ea993b8e98eea6330556648618dad98fa255620d836d3c7f29b907895849286167c7181e2caf55c2c184a9a911f8e41cb042e2cd48b0544ea79fe2ef381ebc5b15e39a9b5c6d998faeaaa7773cfec084c0bfaed1bcab963a4ef3d94dbb3dfe724c040ce4d1e2ee7fc2da4b25127ce3a5df693fcf5a6ed1\",\n        \"signature\": \"ea6582cc23e0460917f782d964e3bb6dcde0aeeac42cc14919d36ce78aa0afd98072f54c795fbfd7a41d99d70606c28a5dcf19be38a0ce2d09bb8f844c31bf00\"\n    },\n    {\n        \"secret_key\": \"43bff3cdd5307ed7d25cf96fdbba64ab1811c8bb934e2187ea7ffc018d85e0f2\",\n        \"public_key\": \"00f1b5d3cac6e56ca5f894d4cdbf9bebd968d24d5effa5058b0e20bb0898f6f1\",\n        \"message\": \"646f8b34182d5e602b51ca7329347c0e198cb747e4da0a6b80f3f6f9f336f6708d85cb429ab2d6bed35d5013129cd100142cddcee8635179021b3e24922b81aef13c1370286939d63d6b6a4195eda1d812ca518204768f87348c6889552c63d1372cde6a5e9daa7f8445ec8d6130a3f5aef0edeace010b6c7f0b9d24162a8d04454b81d48ea9097bd8df093459719ccb54aa10f51c246aa99c580beaf9c9c5bc60faf0ae5cec7f5137f6c5c144df45d12ee995adccf25a9db81b8558bdfb65830186e7b9d4eed9f6b4d732b1b5822d03eb017c0724f48f87baaae1045d6fdb125c9134064faf18dbed58d8fbaceacd4f097df9b342e5c4a5bc85b29597d4b640f1551c5b624ab21b48e94a9030049be1f05aa851d0827eaf8700dfe147fdcdeedbc98c4f15774f0120fb5970a2f8b21794340b628379a802b9f7c068b0df63193e510fc7b2af97ee38de47929785535528d350d88620610cfdb55d249e38fb73c8287113919ce33267d7db924e4919a44e6e29a90dbe3b7b0d3921163feb5ac105624ed852bece3538e99193300c893345699350a8f99e8c6a41095fc9fc08da07f75711f7df034406de14edd8e22a633a86e4a5a5c975ac5d34891cccfc8543771ffa080e0b45d65ab830a361ac4c426294d3685ea8c26039c71c90fc3fb512be9fc94807d76dbdaf8ffaa4fbf9849d68e8a57d30c4a0b9735c23f08ef2e284458467e15d665362cb646fde6937ecba53091264638357a722425bc62d1e30ec5f0dd8fea26b2ea4a8490035de43f274846fb0cf0209ec7437f3c3d0a560373d034e5fd79e25b6424d9b2c1761632b35a12132521827345c55e4e7142dd6fe94d620fe515c153e8395b5d130c744139b6a92efd37f22ba13fe4c095373550e2e4fcba0325b3ea3b9fe25cc7dd92cbf42e15f4554b77ac27a4a346382ff6100451508d602cf643f60b6ca4286356f21a3110d4e2c8a8962a780fcff439b3aa80499df270fc3e6cad8893348872f0f702f9390000c7f6e0627d2bbb7b7cef5c4da25dadfea8032e5023297a70a658e9ae73bddc3b227a1c11741133f012f0f48fe26446fa67e64720fc8dc97f30d0dd026f6dc2164ead857824a0a7aeb20f115d50d1b65dd5d82e09abe834e8ca88957e39984824955a1a13e3b94a00157186dcdc289e34b678c91cb2a1a\",\n        \"signed\": \"a6b56b7686df1dc5f4ed544a4d97e67036195a32b22ecd5d31ea1730e6ed8f810d258b44c08ea45f032b937441b72cd0dc37556fd7874e9fe64f15765c521003646f8b34182d5e602b51ca7329347c0e198cb747e4da0a6b80f3f6f9f336f6708d85cb429ab2d6bed35d5013129cd100142cddcee8635179021b3e24922b81aef13c1370286939d63d6b6a4195eda1d812ca518204768f87348c6889552c63d1372cde6a5e9daa7f8445ec8d6130a3f5aef0edeace010b6c7f0b9d24162a8d04454b81d48ea9097bd8df093459719ccb54aa10f51c246aa99c580beaf9c9c5bc60faf0ae5cec7f5137f6c5c144df45d12ee995adccf25a9db81b8558bdfb65830186e7b9d4eed9f6b4d732b1b5822d03eb017c0724f48f87baaae1045d6fdb125c9134064faf18dbed58d8fbaceacd4f097df9b342e5c4a5bc85b29597d4b640f1551c5b624ab21b48e94a9030049be1f05aa851d0827eaf8700dfe147fdcdeedbc98c4f15774f0120fb5970a2f8b21794340b628379a802b9f7c068b0df63193e510fc7b2af97ee38de47929785535528d350d88620610cfdb55d249e38fb73c8287113919ce33267d7db924e4919a44e6e29a90dbe3b7b0d3921163feb5ac105624ed852bece3538e99193300c893345699350a8f99e8c6a41095fc9fc08da07f75711f7df034406de14edd8e22a633a86e4a5a5c975ac5d34891cccfc8543771ffa080e0b45d65ab830a361ac4c426294d3685ea8c26039c71c90fc3fb512be9fc94807d76dbdaf8ffaa4fbf9849d68e8a57d30c4a0b9735c23f08ef2e284458467e15d665362cb646fde6937ecba53091264638357a722425bc62d1e30ec5f0dd8fea26b2ea4a8490035de43f274846fb0cf0209ec7437f3c3d0a560373d034e5fd79e25b6424d9b2c1761632b35a12132521827345c55e4e7142dd6fe94d620fe515c153e8395b5d130c744139b6a92efd37f22ba13fe4c095373550e2e4fcba0325b3ea3b9fe25cc7dd92cbf42e15f4554b77ac27a4a346382ff6100451508d602cf643f60b6ca4286356f21a3110d4e2c8a8962a780fcff439b3aa80499df270fc3e6cad8893348872f0f702f9390000c7f6e0627d2bbb7b7cef5c4da25dadfea8032e5023297a70a658e9ae73bddc3b227a1c11741133f012f0f48fe26446fa67e64720fc8dc97f30d0dd026f6dc2164ead857824a0a7aeb20f115d50d1b65dd5d82e09abe834e8ca88957e39984824955a1a13e3b94a00157186dcdc289e34b678c91cb2a1a\",\n        \"signature\": \"a6b56b7686df1dc5f4ed544a4d97e67036195a32b22ecd5d31ea1730e6ed8f810d258b44c08ea45f032b937441b72cd0dc37556fd7874e9fe64f15765c521003\"\n    },\n    {\n        \"secret_key\": \"063b9025e321e972d653a062be34f99365affdcc98ec9ff43ef422be0f804460\",\n        \"public_key\": \"10d01a63012ac09956ba9ed61df35bb7afe3658bb3004852e47174bd07dd4de7\",\n        \"message\": \"a7eed29652844ee0049bafb2cf63402971020d7e65c10b91ac5726eea86f40dbc53c3f0abedebaf6cc449b4fea48c015fe4d907b3e5505cff50a121819a2e4a8a296d5751015bbcd7ef6fb7c2727bb000be1342a7d14bca97904edfe8b18ddb63933418327a5af817e95bad74eb790203615d082e71493ead47ccc0901a2ca9f50133c44ef8508d51fb73c616f0147532245822dd102b337a1b2aae2efc72dca7a9419d598a6475233dc1a4ee0ec6d05da12a2b287cb77ffafdde2d0acc28199933e6621eec16ab4245170cf02da80d4922631a23272915165ad88722750035d2a0977bc791d14fb3d8cb02bc77f7c71be5242629a4c9a588dfdde9578494d8baa4e68f5194b8002c8e378a0e833b7c1a96981c4fb05e457ff48260b72493cbcb82ae11673d14cee85288f6370bd4bca9251a7e214c3eb79e7bb6fcebb16c9e056f29b6272743efa6fe8bfd25597ce86898ab3059eb0231c73b5305903fd1319bdf49e599d8bbcd74a8b9767308b61563ccbacd38fc50c83ab44ca759dc9b65b2a4b547c5097f220c1c88b2b0a48f65f91fe78b1501278e1e304de58b4c82a5c399981098a1784eb9042501859f2a93f317e41772fd52f972e51b07ed94d314e1d1af4ed82909a0bef671f54b55db7b70da1f718c8e648aedd6da64b05770526f12bc43f68b95548dac50809a687db97d73f06f47ed08831b60a28e982920632058f0e6c90c0187ff44564f81efd8fd93e327bc6d80b490e088b9a10036c80dcdad49d2be074fbba31e06f7180e5ad1c8823d60966a9ce15503ce60dd40e91eef2359d83d70d98401dde7be3c6b07e57d4e47d04217633d8e263ca348f81fbe9a4a62f45d77c843b6b1ad28466d9dafb1b910b348ed87c686cab292d480c191d187b404a9b1d132ba4e293d3ada99172acc121fe66b845b98b160c5823f601c7758fb26caee85701595b2d52caa2f5688aa2bf2f6c4bb637f8e00f49ab6c26bc6ad89e1367fd28e4917d250893a7b32d39660bde8db49f086fb739e56012c36bea0b26cf6d9357940b00d5a4528f9059aaf08669e5f46c995e60f887b5c4ab88ac7442ed01a14c6a42006baf1f343fefe3e4aca843a324e176b2fe7ec7883d1cbd068bc2fc962ffa60244f654c77ac5650817dc084465545a9230a74826b0c50eb85252a886ff2b1afeaf8\",\n        \"signed\": \"85c81d6b0d8578fa58e13ab391001528b46a1d63a0327c7a4a04087fc668758aa65c01d5a150f935674ef307507e6f4c91e1fc3500b26f649beea87d27563704a7eed29652844ee0049bafb2cf63402971020d7e65c10b91ac5726eea86f40dbc53c3f0abedebaf6cc449b4fea48c015fe4d907b3e5505cff50a121819a2e4a8a296d5751015bbcd7ef6fb7c2727bb000be1342a7d14bca97904edfe8b18ddb63933418327a5af817e95bad74eb790203615d082e71493ead47ccc0901a2ca9f50133c44ef8508d51fb73c616f0147532245822dd102b337a1b2aae2efc72dca7a9419d598a6475233dc1a4ee0ec6d05da12a2b287cb77ffafdde2d0acc28199933e6621eec16ab4245170cf02da80d4922631a23272915165ad88722750035d2a0977bc791d14fb3d8cb02bc77f7c71be5242629a4c9a588dfdde9578494d8baa4e68f5194b8002c8e378a0e833b7c1a96981c4fb05e457ff48260b72493cbcb82ae11673d14cee85288f6370bd4bca9251a7e214c3eb79e7bb6fcebb16c9e056f29b6272743efa6fe8bfd25597ce86898ab3059eb0231c73b5305903fd1319bdf49e599d8bbcd74a8b9767308b61563ccbacd38fc50c83ab44ca759dc9b65b2a4b547c5097f220c1c88b2b0a48f65f91fe78b1501278e1e304de58b4c82a5c399981098a1784eb9042501859f2a93f317e41772fd52f972e51b07ed94d314e1d1af4ed82909a0bef671f54b55db7b70da1f718c8e648aedd6da64b05770526f12bc43f68b95548dac50809a687db97d73f06f47ed08831b60a28e982920632058f0e6c90c0187ff44564f81efd8fd93e327bc6d80b490e088b9a10036c80dcdad49d2be074fbba31e06f7180e5ad1c8823d60966a9ce15503ce60dd40e91eef2359d83d70d98401dde7be3c6b07e57d4e47d04217633d8e263ca348f81fbe9a4a62f45d77c843b6b1ad28466d9dafb1b910b348ed87c686cab292d480c191d187b404a9b1d132ba4e293d3ada99172acc121fe66b845b98b160c5823f601c7758fb26caee85701595b2d52caa2f5688aa2bf2f6c4bb637f8e00f49ab6c26bc6ad89e1367fd28e4917d250893a7b32d39660bde8db49f086fb739e56012c36bea0b26cf6d9357940b00d5a4528f9059aaf08669e5f46c995e60f887b5c4ab88ac7442ed01a14c6a42006baf1f343fefe3e4aca843a324e176b2fe7ec7883d1cbd068bc2fc962ffa60244f654c77ac5650817dc084465545a9230a74826b0c50eb85252a886ff2b1afeaf8\",\n        \"signature\": \"85c81d6b0d8578fa58e13ab391001528b46a1d63a0327c7a4a04087fc668758aa65c01d5a150f935674ef307507e6f4c91e1fc3500b26f649beea87d27563704\"\n    },\n    {\n        \"secret_key\": \"883cc1381757b0fe0455b77bc9cd0dd464d2b4bf0c7a3c0c2dc775fb78aa3732\",\n        \"public_key\": \"83a8b669ccd01245ce3b818dcb1b588f86535850e6c710c79217fe439824f3fa\",\n        \"message\": \"ffec293d12ea636ca4c4a0a5e2db15342639c476674d2ebdab4aefd4046b5ddb56aeb210c119afdfb8a89128a34f6d77f261edea0772a2f8db140a2640fd8ecadb0b4792169b6b2810aee2c5cd835288bff493bcebeeea28a7a248c36116540fa71736d66b0a475b5fa92c0d46002fca7a1e69d1b59e81a3a6d4f339769daeb20b5f9d75c4c28f692132d28d3c564c09fe3dcca0359c3c63ec377a33f9ee874d8a789d77c96ac05fdf3ab38b2c8274a902ef8bb7f467fc7e073c77b1db5fc8ef966c120c4dae3fb7f5b74abb990166c812a525d123f76ed512125080a1534f3d8bdccc541fc97590287546096fc880bfcfdd00e65c0ebf4a09fd6476ce1b7c8faaa5a1cc2786719a30d8255811184752a88b08ac9f0ff1d6262f2586940afe1fe45e0b563448a55f3030e4c39c1f3f86a733670380eab088e393de09d1f508d2fbcafc649aeae6b8c30e329ec3fd2829be6db0ab8e637ea1095bdc3df3acc23d3cf705a9542c19e59092ec413a4e2bd5ded28cd34ddb3d32949aa487f1c337d6979cf512622dbfb7da1cbb1c7e5abeea7009e2943ffba2252e1d86eca9d6d5c246cd2e134a3e5dad37efef71ce397adafbd9e72b3f9a86ff0f5d812c46225bebd0703bc5cce9c64582008f7e558c40a3b3522096d1aa2b61bc90cd88c6285d942087d8a4665a0e64d3572f74689b4f24ef400d741b57140613471444decc654af0ffb2edfdf9fdd075098190b34cde28dd166872c6086567a68761cef25da40bd4c3d34fddd72ee565b0b937678ee84349d1160f5f0705f895d0f141ce8f51a1e4fd2dc4704b527a4025a939cb2bb78857eb18d78872edc9ee70e60b2a42700a198f4fff6c31925168be077dc23c322abbca97361fecaa3fcb196e656c128f3982fe11e551a4a0885da60d397d0e40d0d897262f1b4b672f78a2d2adfcdd6e1525c26e7195fb9ac606bb1ba4a9890803b4bd84346ae8d8c7196c90aeccb296a4c3eb4efacbfcb62e383b8a494ac723562d0d8c379187a92e3bda6b1569476aed21aed7a056b4a5826744017cc0060b4d55fa8772b5b1c15f5748ad7298005aecbcbd90a3e5c6159a8674abbba37914415002b5a6ef5df3c649426ea1275a01d80adf490ac546062d93999a6dccacb96a0904ad33d90576dc6a21b672e8ffb06613fb3f14e6cbdde88c2437c9\",\n        \"signed\": \"c7cfd5c9fe930d15a11ebb34e3431f489da010eb193edbfa6f23d5d14dd8feabd7880d2d5a5600d38546ce3bc64a86291a1ce31f272ff020df8cb6a0fd4d3a0dffec293d12ea636ca4c4a0a5e2db15342639c476674d2ebdab4aefd4046b5ddb56aeb210c119afdfb8a89128a34f6d77f261edea0772a2f8db140a2640fd8ecadb0b4792169b6b2810aee2c5cd835288bff493bcebeeea28a7a248c36116540fa71736d66b0a475b5fa92c0d46002fca7a1e69d1b59e81a3a6d4f339769daeb20b5f9d75c4c28f692132d28d3c564c09fe3dcca0359c3c63ec377a33f9ee874d8a789d77c96ac05fdf3ab38b2c8274a902ef8bb7f467fc7e073c77b1db5fc8ef966c120c4dae3fb7f5b74abb990166c812a525d123f76ed512125080a1534f3d8bdccc541fc97590287546096fc880bfcfdd00e65c0ebf4a09fd6476ce1b7c8faaa5a1cc2786719a30d8255811184752a88b08ac9f0ff1d6262f2586940afe1fe45e0b563448a55f3030e4c39c1f3f86a733670380eab088e393de09d1f508d2fbcafc649aeae6b8c30e329ec3fd2829be6db0ab8e637ea1095bdc3df3acc23d3cf705a9542c19e59092ec413a4e2bd5ded28cd34ddb3d32949aa487f1c337d6979cf512622dbfb7da1cbb1c7e5abeea7009e2943ffba2252e1d86eca9d6d5c246cd2e134a3e5dad37efef71ce397adafbd9e72b3f9a86ff0f5d812c46225bebd0703bc5cce9c64582008f7e558c40a3b3522096d1aa2b61bc90cd88c6285d942087d8a4665a0e64d3572f74689b4f24ef400d741b57140613471444decc654af0ffb2edfdf9fdd075098190b34cde28dd166872c6086567a68761cef25da40bd4c3d34fddd72ee565b0b937678ee84349d1160f5f0705f895d0f141ce8f51a1e4fd2dc4704b527a4025a939cb2bb78857eb18d78872edc9ee70e60b2a42700a198f4fff6c31925168be077dc23c322abbca97361fecaa3fcb196e656c128f3982fe11e551a4a0885da60d397d0e40d0d897262f1b4b672f78a2d2adfcdd6e1525c26e7195fb9ac606bb1ba4a9890803b4bd84346ae8d8c7196c90aeccb296a4c3eb4efacbfcb62e383b8a494ac723562d0d8c379187a92e3bda6b1569476aed21aed7a056b4a5826744017cc0060b4d55fa8772b5b1c15f5748ad7298005aecbcbd90a3e5c6159a8674abbba37914415002b5a6ef5df3c649426ea1275a01d80adf490ac546062d93999a6dccacb96a0904ad33d90576dc6a21b672e8ffb06613fb3f14e6cbdde88c2437c9\",\n        \"signature\": \"c7cfd5c9fe930d15a11ebb34e3431f489da010eb193edbfa6f23d5d14dd8feabd7880d2d5a5600d38546ce3bc64a86291a1ce31f272ff020df8cb6a0fd4d3a0d\"\n    },\n    {\n        \"secret_key\": \"5e40a7aabbb0830a9ab0fd79690ee0433901c6cb0676abe4bba06f5bbe58fac2\",\n        \"public_key\": \"4d4f28fe09c4aabfca01ef6ee7fd6372fb62db61aaee827c43fd1a6d1c259032\",\n        \"message\": \"fd4ec8b34fc6b743813f59e2fd1fefa870f5a970e2eb7516ef7c306f4b823ffee92d601f765d79ca146aba8bc6e79844559935cddc242649c059ecf2db84fdc219366688a88fc25b851c3661e51988c2bf73bb8e3dc16d22415ab1a7b35579daac7325e319157d7da5fee87c93a4dfcbafc92fba7e17cc68e3903733c6c801572d907320b2feb51710e856a1f76f85a7ee1a11e62d2e45a352938dd8cfc2bccb902dea444faaae6d84c5f391e10aef76928a45153db6cd25a2bf353d80d97bf4b3808605e89800d29840ea60978d9ec9b2c302749888f9debc84dd1e2a79aa0b6ba02a039193081bdbff0599a14d918c0c8deac4f60b6e99474ab53011741034fe2a20cff4e0f023424c8e5797768ad53df6d01a24011fa90f0bb1d5069cdb36b450f433110c2c56f34a1de4260914cd4696b14a09c0268b2ae2e98e6b4e992b9125f878f1ac09823170628388f0f6e256259ca786bbe144884cb298cc043d02f5c3dc684f787faf16c10fdd8437a8c3097463bdb99b78030f9474fc5c9951dc7526490586fe1c2db05411341460239d5e8bc53065902b95fba282c27665e869a19dae84606d1726675155d38039b9e55db4d5ceec95cd6d87f85e99dde54a04761e6eada6619da895b654fe3845e8a60f3a3b32483d6d27978af54502b220e478db78cff77a9c97fb79fb5acf56289f381acb10de64c3f23842b12bf5f1b283bd25d48d09128fb55ddae255beb7c66a74cf6f0695a4f828cb29e4afdbb3b42a235d4fdb66b963ac8f68e82b00a1c4500863296247178cfdef803bb7b114f0c03276f671669a087d9228a37ae7b99b061549c1cf8ec17246ea1ee03dbc88bf426416d586572ff10a3145606f2784e4357be4edeec6c3a7bf11bb5b0e90cf50edaf891e51d26357bfc853ce23b299155c82c1031dfa64074d72a09d29720ead6ebbbf75d5738e32cda6b6466a8def6b50a1ed9b865a9a88a08018acb501a4de9db54d0522ce9cec7a06bd9a5f86b0b46c07bf3e7f5a426ff6b4bbe1e00313a5ac2719a959ed44ee0a44bd97da6db2cb971bd68334908949ed850fbf73d0e02049da181cce9c2d9ca1b624c8d87cf904eb821dc7959295da5777920660b43ccc25cd389f157f67fa0390feac97a752c1ac204c21df56bb0f4fc01641b480af2b89b5d16d4a0bcb0a50b82b0e0484\",\n        \"signed\": \"597672ab8d3a60de5456fcc9c38253f5f37b80e74a007c9f6db909d27d0ead162789244994f35b80d61be199c417c7ea901b98cc63fe3c50fc3c6338490fa206fd4ec8b34fc6b743813f59e2fd1fefa870f5a970e2eb7516ef7c306f4b823ffee92d601f765d79ca146aba8bc6e79844559935cddc242649c059ecf2db84fdc219366688a88fc25b851c3661e51988c2bf73bb8e3dc16d22415ab1a7b35579daac7325e319157d7da5fee87c93a4dfcbafc92fba7e17cc68e3903733c6c801572d907320b2feb51710e856a1f76f85a7ee1a11e62d2e45a352938dd8cfc2bccb902dea444faaae6d84c5f391e10aef76928a45153db6cd25a2bf353d80d97bf4b3808605e89800d29840ea60978d9ec9b2c302749888f9debc84dd1e2a79aa0b6ba02a039193081bdbff0599a14d918c0c8deac4f60b6e99474ab53011741034fe2a20cff4e0f023424c8e5797768ad53df6d01a24011fa90f0bb1d5069cdb36b450f433110c2c56f34a1de4260914cd4696b14a09c0268b2ae2e98e6b4e992b9125f878f1ac09823170628388f0f6e256259ca786bbe144884cb298cc043d02f5c3dc684f787faf16c10fdd8437a8c3097463bdb99b78030f9474fc5c9951dc7526490586fe1c2db05411341460239d5e8bc53065902b95fba282c27665e869a19dae84606d1726675155d38039b9e55db4d5ceec95cd6d87f85e99dde54a04761e6eada6619da895b654fe3845e8a60f3a3b32483d6d27978af54502b220e478db78cff77a9c97fb79fb5acf56289f381acb10de64c3f23842b12bf5f1b283bd25d48d09128fb55ddae255beb7c66a74cf6f0695a4f828cb29e4afdbb3b42a235d4fdb66b963ac8f68e82b00a1c4500863296247178cfdef803bb7b114f0c03276f671669a087d9228a37ae7b99b061549c1cf8ec17246ea1ee03dbc88bf426416d586572ff10a3145606f2784e4357be4edeec6c3a7bf11bb5b0e90cf50edaf891e51d26357bfc853ce23b299155c82c1031dfa64074d72a09d29720ead6ebbbf75d5738e32cda6b6466a8def6b50a1ed9b865a9a88a08018acb501a4de9db54d0522ce9cec7a06bd9a5f86b0b46c07bf3e7f5a426ff6b4bbe1e00313a5ac2719a959ed44ee0a44bd97da6db2cb971bd68334908949ed850fbf73d0e02049da181cce9c2d9ca1b624c8d87cf904eb821dc7959295da5777920660b43ccc25cd389f157f67fa0390feac97a752c1ac204c21df56bb0f4fc01641b480af2b89b5d16d4a0bcb0a50b82b0e0484\",\n        \"signature\": \"597672ab8d3a60de5456fcc9c38253f5f37b80e74a007c9f6db909d27d0ead162789244994f35b80d61be199c417c7ea901b98cc63fe3c50fc3c6338490fa206\"\n    },\n    {\n        \"secret_key\": \"3a34136a973480d97006dc279358e6606293d8cbc1a44ee55233af2b5264b90c\",\n        \"public_key\": \"e5effd921be8eec530752fccc576ef0d9bcde4b32cc649d3f7954717562860cc\",\n        \"message\": \"981c8e1090e396951b072ef8497062020897bf7dd7ad505b4d6dc11b3e1dbcb0da249984a140e164fc2e02b31da39846554aa8905bc8b3df8a76bf60eb5ffcf22c97b671227d249071da8ff6bba75b2f7668cec19a89e6475a12463dabf368b3ca2445bb3035cc00fae85b7072fbcf595401755b8051e6097065ae429f18eeb13ffa6dde59df6f3c206bfd9ce1f8a800c8590a4021d160f66d6740a369ae835617538b5890231f13c5667baf510a606bdaa84b8d10ee6015e12a4c1ec0bd0421a294c51cf63b5d1f058e1153dc425d10cee8b1b084d6c29347e96f0f31b839607d078b79a90ca3d1f063807a463b7c32f45a534498d71d47edc3b17a4dff27fedcffab301f34f1a64c0278a53589349a233af30b1ec1ae410f7b1630c7145ca42c9663f512e8a578267dc95e83289c17032e09782e2fe8e16efb87f03ca03b1195614f89961ca3939d3bdf737221a22d7a18ec30fc126d0ca663e88d6060d04c6a44e5616e556e07d6d4a847f1711cf43717810c70aa4be730278b3bd6555c954dc6edb09db08f0e211803596280f3c7868d2342cc2308eaae4da1913514664b1db962e99c8a8cffe57931f5dfcddbc1cbb36ce1c842e2dddeadfd7e7d0a5048cdcb961b14f35f435e73a683c8ce25c816812566fdf817e0d336ae0bd247328512b2a8567632bf20553d9bd6fe157f220ffb0b46ebae89a70459728a57eed1796256f1bd50b6d547ea3e25fa5913d389a22583e915eb49de35a97b5acc521db0d005c29575e16611a755f21a3a5a82a20aa900a707ce36825492c3ca15395f1700b4afab94daa7a02f1453b1f9a6bd36efb204d928ee1f4dcc860f3a859badc006fb305fa123d4c79b23a20e32295d040a7f8f6caca25d83f71c62e3af7836ef76b93a83d3c3b493af141753da19e4cdcba56617271034b4f4f394c7c6b7d79666f3afb692244f061c69a8881d1b52b8849fb534990ac2391909471ebbb728e29cd20f422354c4309717ebff3efd1833370806d5bfb53ca2da316dacb50ab7fb739673235a1dc53aa8893072d5b91c9f6db83fc4ea41d1eef49ac28afc1ced8f361890ab9f779d193082831cb8c42fb2792bee3b26296b6295eb78a8d853117661624e11f7f57afd6085a7b9123679fdaca1cf2a78d380bc4c360aa7c3cbfde0c0091fe53e2219c070f2f02f1483\",\n        \"signed\": \"425f272212835755adcc0522c6f6e05f68008a3be9ba5974e420c4c5cb56e6c55dec0de347b16caef8bd33b71b44c8357d05b6321d7bf493d25861db487bd603981c8e1090e396951b072ef8497062020897bf7dd7ad505b4d6dc11b3e1dbcb0da249984a140e164fc2e02b31da39846554aa8905bc8b3df8a76bf60eb5ffcf22c97b671227d249071da8ff6bba75b2f7668cec19a89e6475a12463dabf368b3ca2445bb3035cc00fae85b7072fbcf595401755b8051e6097065ae429f18eeb13ffa6dde59df6f3c206bfd9ce1f8a800c8590a4021d160f66d6740a369ae835617538b5890231f13c5667baf510a606bdaa84b8d10ee6015e12a4c1ec0bd0421a294c51cf63b5d1f058e1153dc425d10cee8b1b084d6c29347e96f0f31b839607d078b79a90ca3d1f063807a463b7c32f45a534498d71d47edc3b17a4dff27fedcffab301f34f1a64c0278a53589349a233af30b1ec1ae410f7b1630c7145ca42c9663f512e8a578267dc95e83289c17032e09782e2fe8e16efb87f03ca03b1195614f89961ca3939d3bdf737221a22d7a18ec30fc126d0ca663e88d6060d04c6a44e5616e556e07d6d4a847f1711cf43717810c70aa4be730278b3bd6555c954dc6edb09db08f0e211803596280f3c7868d2342cc2308eaae4da1913514664b1db962e99c8a8cffe57931f5dfcddbc1cbb36ce1c842e2dddeadfd7e7d0a5048cdcb961b14f35f435e73a683c8ce25c816812566fdf817e0d336ae0bd247328512b2a8567632bf20553d9bd6fe157f220ffb0b46ebae89a70459728a57eed1796256f1bd50b6d547ea3e25fa5913d389a22583e915eb49de35a97b5acc521db0d005c29575e16611a755f21a3a5a82a20aa900a707ce36825492c3ca15395f1700b4afab94daa7a02f1453b1f9a6bd36efb204d928ee1f4dcc860f3a859badc006fb305fa123d4c79b23a20e32295d040a7f8f6caca25d83f71c62e3af7836ef76b93a83d3c3b493af141753da19e4cdcba56617271034b4f4f394c7c6b7d79666f3afb692244f061c69a8881d1b52b8849fb534990ac2391909471ebbb728e29cd20f422354c4309717ebff3efd1833370806d5bfb53ca2da316dacb50ab7fb739673235a1dc53aa8893072d5b91c9f6db83fc4ea41d1eef49ac28afc1ced8f361890ab9f779d193082831cb8c42fb2792bee3b26296b6295eb78a8d853117661624e11f7f57afd6085a7b9123679fdaca1cf2a78d380bc4c360aa7c3cbfde0c0091fe53e2219c070f2f02f1483\",\n        \"signature\": \"425f272212835755adcc0522c6f6e05f68008a3be9ba5974e420c4c5cb56e6c55dec0de347b16caef8bd33b71b44c8357d05b6321d7bf493d25861db487bd603\"\n    },\n    {\n        \"secret_key\": \"cf33e7974d8f0bf899ac5b834c7cf96479ce1cfd453af07f970527f36aa85c1f\",\n        \"public_key\": \"578f60338b1f041a97d319fecfa30cfaed369303cc00b3ec8c5c99041158e20c\",\n        \"message\": \"e813144bd116f6ac36389217b5171a902f06b7dd7b144df4f9091553c7c7835753a296cbb0d7fab99cef77b61f34a04c8af04e7d5d1f961302de89e2005f299f5a4aa17924617d006693937745539c3048ee36b8c23afec0af9feaa0066c8af8e0a7f09093498210f6d8dcc0aaada5668786910ff7c5b348d4ccd6eeeffa3acd1816d9011a4c4025f6c2fd2c020a10593627520d4dd99e07c62d2dbebe84139e1c7d867c093574fa601e4ee307ac926e5d36b62d7ed84a261588b7e2883c7926612b4cc67e2bb72544a10d6b4929c88ef6c47c2625d2f6816bd73c3bae89d2e0c86171ac4bd080ae555d62740d1d2a761ced86dfc328ecc27ee3db6d404108ef4e0b64906253b4c0a771adefedc8a2c5b53c425a70cd6f63956f7a0a619fdfbfd00aa078418eb4652f8bc6f3c253beec9838b77f9cbe2ef2b8055c5773539e356bd8192606ec101e3f6058b1dd08a68fdbc549dfe6b7725dc2549e8e3f90dc5be3ccfb0a38baf9377cb3f6501d2e15ccb3556a895ccb23f0b6df9fe59311cff55374c3fb3a32981ca26ab426f3663d04e3167e53a537b7589a9fb73679090a205532c132906634334a7e8749793f8c593f3fd6278ce0050383487f3b245067af94881aa1ae968d0caeba5fa5c7be5f4e4b7257518695d89bccdec507b967b4fd64b6893b3ee7803c1d36ea8a02fc426f9afc8e9f24321527ec9844bc3c54a0f7667e034300bbb4fb020f6d5bb954e7b5a3a706a4939db33c154892643476a291d47dc1e6f72ce91d136f11db26b9c9ba736e40df0a15c1a89149996b251dd988b39004e6ef41bdc061db580b7b74de2a651810bd891753b97386d7f8cbdbb6ec386fa2c342f5ef20e6e3a8bb4d5149a7d4de1224dff1d172c87570f776d5ef45959be0938ad79f5d3395cb2721627122887bd7a8983b647797bd41d882641c81431ce8d9b3067adec4cde926c51313f0cf84c5292562dd4908642dd245288484c5568a787d0ced36a352f032da4f7e4de06b11473f650eec65dda99639af2d42d84ee230f4f83623d9c9aaa3b16bda10ddaad25af5c1c10f81c8c51c811a3aa3e3db58a7025e4380e285da474a61ba59173ff042a46a79ab184b070108416f9d6158cf96d0e6db447614a0d9089ebb6aee4ef107be4593d71e79f6798668a740ae4bac5ac7594ecbd5dc82e7d0f9cb\",\n        \"signed\": \"97a5b6d268a5b4175fb06f1f37d0a633519296edc30011c954d8f0b9bbe2641800396c4b35d4b0d7d2a1d17cbbebdc55a809462d6cc19a6fadbe1bd1bae88a01e813144bd116f6ac36389217b5171a902f06b7dd7b144df4f9091553c7c7835753a296cbb0d7fab99cef77b61f34a04c8af04e7d5d1f961302de89e2005f299f5a4aa17924617d006693937745539c3048ee36b8c23afec0af9feaa0066c8af8e0a7f09093498210f6d8dcc0aaada5668786910ff7c5b348d4ccd6eeeffa3acd1816d9011a4c4025f6c2fd2c020a10593627520d4dd99e07c62d2dbebe84139e1c7d867c093574fa601e4ee307ac926e5d36b62d7ed84a261588b7e2883c7926612b4cc67e2bb72544a10d6b4929c88ef6c47c2625d2f6816bd73c3bae89d2e0c86171ac4bd080ae555d62740d1d2a761ced86dfc328ecc27ee3db6d404108ef4e0b64906253b4c0a771adefedc8a2c5b53c425a70cd6f63956f7a0a619fdfbfd00aa078418eb4652f8bc6f3c253beec9838b77f9cbe2ef2b8055c5773539e356bd8192606ec101e3f6058b1dd08a68fdbc549dfe6b7725dc2549e8e3f90dc5be3ccfb0a38baf9377cb3f6501d2e15ccb3556a895ccb23f0b6df9fe59311cff55374c3fb3a32981ca26ab426f3663d04e3167e53a537b7589a9fb73679090a205532c132906634334a7e8749793f8c593f3fd6278ce0050383487f3b245067af94881aa1ae968d0caeba5fa5c7be5f4e4b7257518695d89bccdec507b967b4fd64b6893b3ee7803c1d36ea8a02fc426f9afc8e9f24321527ec9844bc3c54a0f7667e034300bbb4fb020f6d5bb954e7b5a3a706a4939db33c154892643476a291d47dc1e6f72ce91d136f11db26b9c9ba736e40df0a15c1a89149996b251dd988b39004e6ef41bdc061db580b7b74de2a651810bd891753b97386d7f8cbdbb6ec386fa2c342f5ef20e6e3a8bb4d5149a7d4de1224dff1d172c87570f776d5ef45959be0938ad79f5d3395cb2721627122887bd7a8983b647797bd41d882641c81431ce8d9b3067adec4cde926c51313f0cf84c5292562dd4908642dd245288484c5568a787d0ced36a352f032da4f7e4de06b11473f650eec65dda99639af2d42d84ee230f4f83623d9c9aaa3b16bda10ddaad25af5c1c10f81c8c51c811a3aa3e3db58a7025e4380e285da474a61ba59173ff042a46a79ab184b070108416f9d6158cf96d0e6db447614a0d9089ebb6aee4ef107be4593d71e79f6798668a740ae4bac5ac7594ecbd5dc82e7d0f9cb\",\n        \"signature\": \"97a5b6d268a5b4175fb06f1f37d0a633519296edc30011c954d8f0b9bbe2641800396c4b35d4b0d7d2a1d17cbbebdc55a809462d6cc19a6fadbe1bd1bae88a01\"\n    },\n    {\n        \"secret_key\": \"51b1ad0ffc21497a33dbdb85ea2bc1ce3d0c2d95d9461a390973fee377fc75f4\",\n        \"public_key\": \"bad0412575d3801301edee6bc0f276e787357b4122f52de981885851884249cb\",\n        \"message\": \"7882e86ef3402f6dbc65cce8315b39765faa4b1fc876fad5f8220cb22a7df2e3580eab3a7e8fa7fbb6b59482ca0e364a131396df792a3241a060e44143b6767493c6bf75f187a9643aa11e11eba7b0a80f0a68b9f1b79f75b66cc59d9da77955fd7e8799f99d6eb08f90d318f4efcbfe71159b10a83aa5fd69bb75336f5df296ea060a426c9545df940bc1454efc1f9dc965f1f22d947303fb8ec12407fff6b1dbe47e3421c31764fd90c83ac711d19926e229a064c61fe3676af300a1716fabe4e3842264adb32e0d9c9f5d4a65d0d7b5c3770d737ee13cbed21d7a1da36aaf7ec0f36fcc476f659681e5160a5a1f49e759b9d0fcd4fdb854eccd99172a47d2c4efbe0b3757631df1bae175f0fa74dd048bb6a5fed8430284349da3d67df2a6f7e8269bc79fb2c5d5ed6084e9076f455ab638919046369a446d57fcada7011cc771bf6d874a8e5d23c687747de41dd04bffc717d6128183846eb594b3cb1c1a8aa04f0d7eba53af39cb1d4e6fecf3113bd8422416f4c44037aeee9e0fdc517c48731fd04ee9c99f5dbca3d574509d7baf3288f2c230a02d1703bdb1611cde2a766dac193de167443d20090dc34d29277a86b1e998b245645117e5111f12f14606c55446dd912d3475c19876e19ac536d317876c4b0a2e0f98616129a5683732a42317c5e809dca956b2abb484ada810a15c81cc8562b555da9458f9b44338490230c7404f3d48611f84127e73e277d88c62212d2a3a351fc67665b18d77216230632cbc781288e15cebf3ec33a7205eb22b9abe4cdbc7ddbaaa53640875eb763f522c36cfff2eb23ee586d775286259fa94a44fa7ec015096a2a446b6732b80024267fe3d5d39d1c48509b3ecaa2e24e54de4d61c097b70f753b5af9a6db6f975d25f4f83d06f879e17ef7c509a541444ba3eb6867838090e22dafdbb0eb3b0565be1579ceecded20f544256c7c4ede3b62843c65b0466be6b7e27305b963ca914e3b7d21736118edb3d658d9d76f509db3b9ca2eae28964a4b3b3c384a81a4890ee96fbe934a6f2aec8eeb6cfe59ac9d3bbc1646ba32a1142fee59fed6fb7bbc0498cc27dead413b7b4351ec206343c0ab89fcf87243b1ab450e58ff11a1140a383f196aa3976ce17cf34530f049a1de90e31753cd85e7f1fd5cf20426c9379feb8c31b4bfec35ea5a78953d75c5cf\",\n        \"signed\": \"cfb65b6ff0377cef511fd97b90c3ecb80833f142a7cf5022ced30b3fb7862086d01339b8866a238cb070276e1944b5fe32cc409947cb91deb1432c291b60fb0d7882e86ef3402f6dbc65cce8315b39765faa4b1fc876fad5f8220cb22a7df2e3580eab3a7e8fa7fbb6b59482ca0e364a131396df792a3241a060e44143b6767493c6bf75f187a9643aa11e11eba7b0a80f0a68b9f1b79f75b66cc59d9da77955fd7e8799f99d6eb08f90d318f4efcbfe71159b10a83aa5fd69bb75336f5df296ea060a426c9545df940bc1454efc1f9dc965f1f22d947303fb8ec12407fff6b1dbe47e3421c31764fd90c83ac711d19926e229a064c61fe3676af300a1716fabe4e3842264adb32e0d9c9f5d4a65d0d7b5c3770d737ee13cbed21d7a1da36aaf7ec0f36fcc476f659681e5160a5a1f49e759b9d0fcd4fdb854eccd99172a47d2c4efbe0b3757631df1bae175f0fa74dd048bb6a5fed8430284349da3d67df2a6f7e8269bc79fb2c5d5ed6084e9076f455ab638919046369a446d57fcada7011cc771bf6d874a8e5d23c687747de41dd04bffc717d6128183846eb594b3cb1c1a8aa04f0d7eba53af39cb1d4e6fecf3113bd8422416f4c44037aeee9e0fdc517c48731fd04ee9c99f5dbca3d574509d7baf3288f2c230a02d1703bdb1611cde2a766dac193de167443d20090dc34d29277a86b1e998b245645117e5111f12f14606c55446dd912d3475c19876e19ac536d317876c4b0a2e0f98616129a5683732a42317c5e809dca956b2abb484ada810a15c81cc8562b555da9458f9b44338490230c7404f3d48611f84127e73e277d88c62212d2a3a351fc67665b18d77216230632cbc781288e15cebf3ec33a7205eb22b9abe4cdbc7ddbaaa53640875eb763f522c36cfff2eb23ee586d775286259fa94a44fa7ec015096a2a446b6732b80024267fe3d5d39d1c48509b3ecaa2e24e54de4d61c097b70f753b5af9a6db6f975d25f4f83d06f879e17ef7c509a541444ba3eb6867838090e22dafdbb0eb3b0565be1579ceecded20f544256c7c4ede3b62843c65b0466be6b7e27305b963ca914e3b7d21736118edb3d658d9d76f509db3b9ca2eae28964a4b3b3c384a81a4890ee96fbe934a6f2aec8eeb6cfe59ac9d3bbc1646ba32a1142fee59fed6fb7bbc0498cc27dead413b7b4351ec206343c0ab89fcf87243b1ab450e58ff11a1140a383f196aa3976ce17cf34530f049a1de90e31753cd85e7f1fd5cf20426c9379feb8c31b4bfec35ea5a78953d75c5cf\",\n        \"signature\": \"cfb65b6ff0377cef511fd97b90c3ecb80833f142a7cf5022ced30b3fb7862086d01339b8866a238cb070276e1944b5fe32cc409947cb91deb1432c291b60fb0d\"\n    },\n    {\n        \"secret_key\": \"fa2f461ce8c7126218c47c91569e8799797c83368fc842b6e1c22fd52aec70bf\",\n        \"public_key\": \"6b89b23f1e11a75a53f992f6ca5775008c6e9e7e49c0d8510b0e8369b7a20bcc\",\n        \"message\": \"799b39802a1827e45c4112fee026034c0e598affce2c550c193fee73f1df8c30c8d3873340088ce859de3471e9d057686c829b5408795e08b3dc7aa3b637c7de9d2172ad0333c1bea861a6232f47f05a10bf5df80815a271256e37e808a0e62f1f07d9e10ebb947d3efabf8a28fa9dccd9a1d599f5fd6165508efd679cf356015058bf4b34118f83aa3e5bc2ce19eca84f718398adbc0a5276cf9d8caffc27e3e6abbe345b0e9ecf89c6771b0e75d408ba2fbb90fcfd70c53f2e4d52ba54d9784cf71c349ef6f14ae4970def6efb5f30e984d6016a196deaec7e04b47619c48bf49dc02f7fef3e13b756174e90d05fcbdd5e13f0e434efd5421b091d517900ed0d5785968862b4bfe5093ab67217180d97554ccd9cc31429326cab42f3f8398060c19db488b5d1c80b29090afd1c6bac3642264800211bc278fcb99dae9dbf49daf1b24ab569dcbb87d4d3547335e35db98400cdfce6790682e93600220ec499245fa4ee15d843831b56cc26418025bf87001605c6691ca6bd40a4e248c309801b76a795ede8ad5308bcb6d1754ab3371f0003bb8c4e4e471954e28b1e9866379f82e1fbacb79d50adddad5b9778b558cddbb0038a5ff3d5c9557b965de3a7082c45a8ecf3e7721eb690b6c71f3d8975d5300f67c4dc4a736846e4ccd26f93463d5bc6f46edc488664be9696be12b02dd104d10cc6b1d82e8117811214a6487d17367e395ade2ef6b26a1783a7e2f245213bc03a755df3ee8ef9f1eff972c6919065cb7b756678d4ddfd193eddc0b42e8689613643146d7428ca37bf31bdf14e31867858f39d2323709eb3b7d7f4e397022378424bdee9bcb74e9d5dfd371f4734998fc18df4cdfb4b5c21c2e50f8d6c15bc14bf4fda6ceb9d8082cae432dfc98bfb3ecd16b8d74f830b642b042875e921b054bd1aaa581f60d718df669f56dc2f10d478997722162e83940e61a1b6e42df2a4a3a7cbcdd611ce96cbcfb5a95cc473231ca13c0609d0ce1ae5ddb5466d6d65eefad9daf2a36901bcc945847da1ed6e2e240e848b231b7d0e1acd06543ec93e768e59985d7e96c8c31fcd1210f0964271e21877525cb134bc3536257dbb11d30a3c4f949fb82ae0c31ccdfe41943251e50aa4355392ac309ef60fc17432a2be4bdb2fcb28607cc45a52b60016bb1d2e23972ff2c2a247d725585b1ef2b15f\",\n        \"signed\": \"84f79d9e8f30e5bb6362239714556b04736fa44465cabaad23beaf5a99fc451ad4ae5a18c7f6f964fa41039216018ec5a2accae1075a6bb3a6ecbc1fca02b904799b39802a1827e45c4112fee026034c0e598affce2c550c193fee73f1df8c30c8d3873340088ce859de3471e9d057686c829b5408795e08b3dc7aa3b637c7de9d2172ad0333c1bea861a6232f47f05a10bf5df80815a271256e37e808a0e62f1f07d9e10ebb947d3efabf8a28fa9dccd9a1d599f5fd6165508efd679cf356015058bf4b34118f83aa3e5bc2ce19eca84f718398adbc0a5276cf9d8caffc27e3e6abbe345b0e9ecf89c6771b0e75d408ba2fbb90fcfd70c53f2e4d52ba54d9784cf71c349ef6f14ae4970def6efb5f30e984d6016a196deaec7e04b47619c48bf49dc02f7fef3e13b756174e90d05fcbdd5e13f0e434efd5421b091d517900ed0d5785968862b4bfe5093ab67217180d97554ccd9cc31429326cab42f3f8398060c19db488b5d1c80b29090afd1c6bac3642264800211bc278fcb99dae9dbf49daf1b24ab569dcbb87d4d3547335e35db98400cdfce6790682e93600220ec499245fa4ee15d843831b56cc26418025bf87001605c6691ca6bd40a4e248c309801b76a795ede8ad5308bcb6d1754ab3371f0003bb8c4e4e471954e28b1e9866379f82e1fbacb79d50adddad5b9778b558cddbb0038a5ff3d5c9557b965de3a7082c45a8ecf3e7721eb690b6c71f3d8975d5300f67c4dc4a736846e4ccd26f93463d5bc6f46edc488664be9696be12b02dd104d10cc6b1d82e8117811214a6487d17367e395ade2ef6b26a1783a7e2f245213bc03a755df3ee8ef9f1eff972c6919065cb7b756678d4ddfd193eddc0b42e8689613643146d7428ca37bf31bdf14e31867858f39d2323709eb3b7d7f4e397022378424bdee9bcb74e9d5dfd371f4734998fc18df4cdfb4b5c21c2e50f8d6c15bc14bf4fda6ceb9d8082cae432dfc98bfb3ecd16b8d74f830b642b042875e921b054bd1aaa581f60d718df669f56dc2f10d478997722162e83940e61a1b6e42df2a4a3a7cbcdd611ce96cbcfb5a95cc473231ca13c0609d0ce1ae5ddb5466d6d65eefad9daf2a36901bcc945847da1ed6e2e240e848b231b7d0e1acd06543ec93e768e59985d7e96c8c31fcd1210f0964271e21877525cb134bc3536257dbb11d30a3c4f949fb82ae0c31ccdfe41943251e50aa4355392ac309ef60fc17432a2be4bdb2fcb28607cc45a52b60016bb1d2e23972ff2c2a247d725585b1ef2b15f\",\n        \"signature\": \"84f79d9e8f30e5bb6362239714556b04736fa44465cabaad23beaf5a99fc451ad4ae5a18c7f6f964fa41039216018ec5a2accae1075a6bb3a6ecbc1fca02b904\"\n    },\n    {\n        \"secret_key\": \"1be2949d51e7208175826213ee6ae3c091172742e88caa02ed0f313ecbe5d910\",\n        \"public_key\": \"d7bf4748d6dded5b57a2abf797facc560b48563dfd9dcff4be522c717a6cfda9\",\n        \"message\": \"045e2b0ec7bb203a49bdcba941e2b73c23c1fe59a17d21a0124ea24b337f92ab9c923a20576b62d5d0f624e7932c115b5474e0a46a4dc9ec51f6a0ce8d54744d1d52093320e39be203f74a0f5dfac52cf0f995c66df2914b68ad871fbe81525ad2d88ac69933a75aea74ace4e36343ddc06d3208f16d805f5dd786b4daaa166748cfeec5714c85c10478b597ac7f6ae2c98891e38fd414aa811b7621d805eb8fcc46cf4d568a8a92587cbbc1aecc12f10d90ac1e01ae986d14fe82951c682ceac8c925fc6654d838ac9353ae2f93f3c88bf7b82cbc43b1e49e5cebfb1949ade4b22e4bcf1b400c0a8fa8a6fe7670f69fc3faecd4805b8c954c01a540d1a1e788436eae073ae956dae3176905a8f0a3c60fd980dab419d41ec06e5273fbb13db9381f89b663ccc4bd753fd90f14a77b3d81c45dd3561cd1fa0e94d234cef9d7859a2ec942bfc18849d7f2ada3a5d657bc193d2e1491682f1665a534b1ac2083b738be8f9e963f5941ed483c6acc82e959b81b8af02f471c08f5f8b12e10e008192898a4450202af731592e74efe2a948e51d06e44de9b956b7bc9a69b6e74687ab206dec4d35b3173fbc438829d5064bfbcf743c1e2d46f628f2e51c626d8e416d7be6e555a249691abb167f1d92f4fa3392fde24e993ce7ff5c1b8e1577a7c0e73025cc6fcd727a82ef0c129e91e5533e021a3cdbb99d54bf7cdcd3ff119154f3fad9242b6ed350d10372c976ff3a437d097867d9bfba91d84bda55a6bcd6e3641b213a218b3041589c55afbb344de6e97d8c35b5c86cf3be063f901ffeea8cc91069967d2346035a91eb5706a3b53f6d1c34d4d2116706b65c298ec57de82abc4003ce8cc5e0b88ff710dda1dcef6f154277106b83eb46c045b082d113b361d6a625808c9130584dfc96707ef8955907baa61cf88c66b6d1f60581119cb6217a852157336178c685e6ed48526ed5c4e3b7967d51f99df6876a1acfb845c571b898656e5e3bc73980b9bed1198866359c9e9b1efa915f810d1ef8ad6cb3fc21fbfe654306de6ca13a3a6a48e7a13ed8746acbd07f48eb00c36374b1eb4f3f01c19e2e8d37e9fc064b33c0d669bba554ddc6821a77b4089cabdcafc97f60e6050bca444ae8cfc44d93c40ef5318bee6f8cf0c067b85cdddc45974a4eacfc3ef51315ba0f3f62968c7003a7ff444612400b159\",\n        \"signed\": \"f41f2ef6595f17660bb2fe93e51fc6fa9c31dadc9db90c3f46607a7fb4800bb75ad96325dc7eab782472b04da6d8e6fe64655dea551fbd5049e876ce5a405f02045e2b0ec7bb203a49bdcba941e2b73c23c1fe59a17d21a0124ea24b337f92ab9c923a20576b62d5d0f624e7932c115b5474e0a46a4dc9ec51f6a0ce8d54744d1d52093320e39be203f74a0f5dfac52cf0f995c66df2914b68ad871fbe81525ad2d88ac69933a75aea74ace4e36343ddc06d3208f16d805f5dd786b4daaa166748cfeec5714c85c10478b597ac7f6ae2c98891e38fd414aa811b7621d805eb8fcc46cf4d568a8a92587cbbc1aecc12f10d90ac1e01ae986d14fe82951c682ceac8c925fc6654d838ac9353ae2f93f3c88bf7b82cbc43b1e49e5cebfb1949ade4b22e4bcf1b400c0a8fa8a6fe7670f69fc3faecd4805b8c954c01a540d1a1e788436eae073ae956dae3176905a8f0a3c60fd980dab419d41ec06e5273fbb13db9381f89b663ccc4bd753fd90f14a77b3d81c45dd3561cd1fa0e94d234cef9d7859a2ec942bfc18849d7f2ada3a5d657bc193d2e1491682f1665a534b1ac2083b738be8f9e963f5941ed483c6acc82e959b81b8af02f471c08f5f8b12e10e008192898a4450202af731592e74efe2a948e51d06e44de9b956b7bc9a69b6e74687ab206dec4d35b3173fbc438829d5064bfbcf743c1e2d46f628f2e51c626d8e416d7be6e555a249691abb167f1d92f4fa3392fde24e993ce7ff5c1b8e1577a7c0e73025cc6fcd727a82ef0c129e91e5533e021a3cdbb99d54bf7cdcd3ff119154f3fad9242b6ed350d10372c976ff3a437d097867d9bfba91d84bda55a6bcd6e3641b213a218b3041589c55afbb344de6e97d8c35b5c86cf3be063f901ffeea8cc91069967d2346035a91eb5706a3b53f6d1c34d4d2116706b65c298ec57de82abc4003ce8cc5e0b88ff710dda1dcef6f154277106b83eb46c045b082d113b361d6a625808c9130584dfc96707ef8955907baa61cf88c66b6d1f60581119cb6217a852157336178c685e6ed48526ed5c4e3b7967d51f99df6876a1acfb845c571b898656e5e3bc73980b9bed1198866359c9e9b1efa915f810d1ef8ad6cb3fc21fbfe654306de6ca13a3a6a48e7a13ed8746acbd07f48eb00c36374b1eb4f3f01c19e2e8d37e9fc064b33c0d669bba554ddc6821a77b4089cabdcafc97f60e6050bca444ae8cfc44d93c40ef5318bee6f8cf0c067b85cdddc45974a4eacfc3ef51315ba0f3f62968c7003a7ff444612400b159\",\n        \"signature\": \"f41f2ef6595f17660bb2fe93e51fc6fa9c31dadc9db90c3f46607a7fb4800bb75ad96325dc7eab782472b04da6d8e6fe64655dea551fbd5049e876ce5a405f02\"\n    },\n    {\n        \"secret_key\": \"3b6ba6d5cc9cd6241d8b0097a3722e4d066fea3d560aeab4673e86f1f8ec6026\",\n        \"public_key\": \"8ca6520717cf363c4ceffa76328a0a166ff83e45ca7d191cc8ef6ca6e5243367\",\n        \"message\": \"36de930cc8e18860836a0c829d89e963a58bdd9c6b6ef5bc61f75992d2075242dca23e28de205a33dfea861fc44a32628e8e7cdd3ed7ff49ea6a7097e0090cfd9ff5ecab1de822fc0a4c3776dd56c1919204516a94cec5638da1d99e52b866f5ec4162a912edb41c1e92edfc353f6705e1c12cd41cb62ded4ad8157940059bfcf50719d3f2ad00848540ce89f3f9afa610ccba5ecc37e3e2c1534fcb38fcd39a2d14d5b5da6fea24e006654e309047a29cad0ae4da8e708f97a18cad5fbdc9ac84400c532ced548886539edd6c541074790ae4502fdfe9f3273a876a218623a25706a1525e67e57a16d22c21b6a45e2384e287ac4452aec4e063056b4c178ab0e5b2a5bad3f463c472c4ea1f9c1a66e5270473a835094e8f0eef680cd7b20d0e70f4d6c958fee08a9360aa6066888f4dd7ce5ec22259fa0b53fe9271c083c6fcdb7283b09061088c52f71bfdd2777ce0801f41a6c4ce90ef131de1e183cb8949ce323c9eb13a4b0cacf99defdfdb68d5ed1f6891b48e21047668d69de8a80f8e5634ded08736a4fb5410cdea9c72596e36df6841f2eea46850c87473c895540205b0921960ffa5d9d8ffb8e29cde96a3ede015acbc26974004d3e438a85b2e3385f64d1814003941ffd363992d3940c6e6d81ff8e45fced6d36ce198d8ccbefee432a77d8fcadd73fb799f6bafefb51a2da798721c3d465b163ef13e6ecc65e603b2893ee4cc9e1c6d1de7a65cab5cbdf536855e288c3ccda8d2fa3ce10cf49358a2ef4ef076e5bfa91bbcf3d966dfa3dc6e712f1956d4e58aa36e712dd3347169b19c8d44bec5bcb730778fcccc589ed5d350d44c17bde2eebb6f5ec59fb240d67d81aea9267f34f15eee2de3f4fa67391479bdbb430f484370fb0e0895b9ae065bbdd43e230c62ac07184e8b06b24b8b97ec02dc6f37ef61641ed56e3f5eb8d2080b5144ef760b518752e19754792e19343a3855e1e2f7a7dc623517eed2f5d26548a68eb8ffd7bf70f78fd186db634928bb98138f2b8fe84481cc53f5aa35e2666c6325e1d2b8ac5e2df2935b7f6413952d10d6076ffc75bb6af63b29b0b9663bec37247b66b508dde41f2f11b84333559dfac73f761bcda84a48d266073aef1638460849e7a17206a25f6800770b914cc026baf9e3255914e13258441cef35ad1d66833e987ebe4431e6a6bb222cbb65af\",\n        \"signed\": \"788c9f4554ddba5c7d64ba759ec45694ec79fb85e82368a074bdd8df344213a56dd09f334cd9acb941be283d98c4b15dcfecd14e93f6a2e3cb0c1aa2dee7d90b36de930cc8e18860836a0c829d89e963a58bdd9c6b6ef5bc61f75992d2075242dca23e28de205a33dfea861fc44a32628e8e7cdd3ed7ff49ea6a7097e0090cfd9ff5ecab1de822fc0a4c3776dd56c1919204516a94cec5638da1d99e52b866f5ec4162a912edb41c1e92edfc353f6705e1c12cd41cb62ded4ad8157940059bfcf50719d3f2ad00848540ce89f3f9afa610ccba5ecc37e3e2c1534fcb38fcd39a2d14d5b5da6fea24e006654e309047a29cad0ae4da8e708f97a18cad5fbdc9ac84400c532ced548886539edd6c541074790ae4502fdfe9f3273a876a218623a25706a1525e67e57a16d22c21b6a45e2384e287ac4452aec4e063056b4c178ab0e5b2a5bad3f463c472c4ea1f9c1a66e5270473a835094e8f0eef680cd7b20d0e70f4d6c958fee08a9360aa6066888f4dd7ce5ec22259fa0b53fe9271c083c6fcdb7283b09061088c52f71bfdd2777ce0801f41a6c4ce90ef131de1e183cb8949ce323c9eb13a4b0cacf99defdfdb68d5ed1f6891b48e21047668d69de8a80f8e5634ded08736a4fb5410cdea9c72596e36df6841f2eea46850c87473c895540205b0921960ffa5d9d8ffb8e29cde96a3ede015acbc26974004d3e438a85b2e3385f64d1814003941ffd363992d3940c6e6d81ff8e45fced6d36ce198d8ccbefee432a77d8fcadd73fb799f6bafefb51a2da798721c3d465b163ef13e6ecc65e603b2893ee4cc9e1c6d1de7a65cab5cbdf536855e288c3ccda8d2fa3ce10cf49358a2ef4ef076e5bfa91bbcf3d966dfa3dc6e712f1956d4e58aa36e712dd3347169b19c8d44bec5bcb730778fcccc589ed5d350d44c17bde2eebb6f5ec59fb240d67d81aea9267f34f15eee2de3f4fa67391479bdbb430f484370fb0e0895b9ae065bbdd43e230c62ac07184e8b06b24b8b97ec02dc6f37ef61641ed56e3f5eb8d2080b5144ef760b518752e19754792e19343a3855e1e2f7a7dc623517eed2f5d26548a68eb8ffd7bf70f78fd186db634928bb98138f2b8fe84481cc53f5aa35e2666c6325e1d2b8ac5e2df2935b7f6413952d10d6076ffc75bb6af63b29b0b9663bec37247b66b508dde41f2f11b84333559dfac73f761bcda84a48d266073aef1638460849e7a17206a25f6800770b914cc026baf9e3255914e13258441cef35ad1d66833e987ebe4431e6a6bb222cbb65af\",\n        \"signature\": \"788c9f4554ddba5c7d64ba759ec45694ec79fb85e82368a074bdd8df344213a56dd09f334cd9acb941be283d98c4b15dcfecd14e93f6a2e3cb0c1aa2dee7d90b\"\n    },\n    {\n        \"secret_key\": \"dd9987b18f9a922c0f6fea18eb00b896c7a2d3093db3ea31d38421da0de51231\",\n        \"public_key\": \"573921a955feb6dde41b055c8dacaccd1db7fe9e36b509d3c9e36f9735752324\",\n        \"message\": \"48162fdc3abf7319c6caab60cb8d0520875cb4ee8a07092783167d4733ffe5204e5febe7d291e9536bdea3df0637159a653e09fd99af661d8300ae741a3e91a8bd85ead05dc7d9e6f929323316edc4ca624ea7818b25bdc061f71492fd22d465ab226fd9a10d8babfc074c686c436c24a3a53f8ff389ce9ca1dbc8907445889241f8fda3a7a3f5024fa8cb0d044bdaf6716d983a6d839814ffe70ddc55bbba11ac97887bdb4dada96565bb075d5fc1d3c5244b9fff77de58729a059a911fb3e0eb164fb8429e265685d14a63233046d20ecf289c55723169a9d63dda0d5255153d9ef4a61b9212f4b820697ae7c308cfab403b2c3431906226e45ce21920df5201609daf830f28ad796005a9bd8eba620cf839c3ba227b963c7bd0914822df2ca03c2254d0cb8acae0d59e4c3e0ec215c836969dcd1d49bfe197e2f3eea3fa8a373b558d0fb9063cf1568e739aad8f09fb437cafb5a272375f436064eee11bd903d3aaeab4e3fdcd36bd2076eea179a4f0d4fbc8df42bf2660f08de7d5c6397cae10b7277458aa6cfa01e8a6737eb126227856646691681c106a157a26aed21b1aaf0ed2766421cfc3d1c7ddfb72fcdf4b8b490fc09ace49aedd7712b21ac56f8601f625563c784306f3b9174addf764e051aadfe12831af9669e62cab121c74df343724429d6c26660271c32f40cf7c2d08bd0afcc728def4135d4eb55b6a3e7629d806864a85b36a32b9b21ac0d39680a2ae4ec4189709178e349497f39399fbc78b3c6cfaca6edea7c33dda3cc11e4384f1583d6cfc6b58f4eaa2bc56aba42f738a429b93580850dee3fd253994f8b0fa66ee8e273decabd532095fb04a4a3c340af0e55b57efab43630fc02ef20b425ca2187e3c6c5e10f12d618fd243a224f6501ebeb9d321c6385b8127ef9cdcd097ce7fa021cf40d21c39912343f67acce1825e3a51b8a718e8c340622fff65fe0053d24aa3351b6a2400185d7aeb88e87ac4a1d394909d49414aefc22ba009aff6962c9217d755694e4d6aa8a5d6a803cebb15de8f541634b6fceb0cac79dda8a18eefbb537e70ffe9aa5a6a6aaf9240fac2eacbfbef01ad6bdf50758780f86a4e488985362d5825011f5e8b66425a616b7e104eb23fe8f100cb0249823662bda3da47a4c3c1ca2f914b25b9738534026047df6d7ff631df2c4131f680e13743c9ccf2\",\n        \"signed\": \"3e9f2b007c0e29ec875995a6309b973deb8baf113ded13f1e0003e9b9bf93916a4dfe47937dadfc78aa663c55f674ec35c3846258f18e7bb93fbba3e826a1f0d48162fdc3abf7319c6caab60cb8d0520875cb4ee8a07092783167d4733ffe5204e5febe7d291e9536bdea3df0637159a653e09fd99af661d8300ae741a3e91a8bd85ead05dc7d9e6f929323316edc4ca624ea7818b25bdc061f71492fd22d465ab226fd9a10d8babfc074c686c436c24a3a53f8ff389ce9ca1dbc8907445889241f8fda3a7a3f5024fa8cb0d044bdaf6716d983a6d839814ffe70ddc55bbba11ac97887bdb4dada96565bb075d5fc1d3c5244b9fff77de58729a059a911fb3e0eb164fb8429e265685d14a63233046d20ecf289c55723169a9d63dda0d5255153d9ef4a61b9212f4b820697ae7c308cfab403b2c3431906226e45ce21920df5201609daf830f28ad796005a9bd8eba620cf839c3ba227b963c7bd0914822df2ca03c2254d0cb8acae0d59e4c3e0ec215c836969dcd1d49bfe197e2f3eea3fa8a373b558d0fb9063cf1568e739aad8f09fb437cafb5a272375f436064eee11bd903d3aaeab4e3fdcd36bd2076eea179a4f0d4fbc8df42bf2660f08de7d5c6397cae10b7277458aa6cfa01e8a6737eb126227856646691681c106a157a26aed21b1aaf0ed2766421cfc3d1c7ddfb72fcdf4b8b490fc09ace49aedd7712b21ac56f8601f625563c784306f3b9174addf764e051aadfe12831af9669e62cab121c74df343724429d6c26660271c32f40cf7c2d08bd0afcc728def4135d4eb55b6a3e7629d806864a85b36a32b9b21ac0d39680a2ae4ec4189709178e349497f39399fbc78b3c6cfaca6edea7c33dda3cc11e4384f1583d6cfc6b58f4eaa2bc56aba42f738a429b93580850dee3fd253994f8b0fa66ee8e273decabd532095fb04a4a3c340af0e55b57efab43630fc02ef20b425ca2187e3c6c5e10f12d618fd243a224f6501ebeb9d321c6385b8127ef9cdcd097ce7fa021cf40d21c39912343f67acce1825e3a51b8a718e8c340622fff65fe0053d24aa3351b6a2400185d7aeb88e87ac4a1d394909d49414aefc22ba009aff6962c9217d755694e4d6aa8a5d6a803cebb15de8f541634b6fceb0cac79dda8a18eefbb537e70ffe9aa5a6a6aaf9240fac2eacbfbef01ad6bdf50758780f86a4e488985362d5825011f5e8b66425a616b7e104eb23fe8f100cb0249823662bda3da47a4c3c1ca2f914b25b9738534026047df6d7ff631df2c4131f680e13743c9ccf2\",\n        \"signature\": \"3e9f2b007c0e29ec875995a6309b973deb8baf113ded13f1e0003e9b9bf93916a4dfe47937dadfc78aa663c55f674ec35c3846258f18e7bb93fbba3e826a1f0d\"\n    },\n    {\n        \"secret_key\": \"38d2ef509f93051f145167737c22e1a5bfe8f4a91eba0bb87c39ce04a89baec6\",\n        \"public_key\": \"01115f6d89a5daab54f892bb4a4bda1ce5d8f6c9c88a50cee83bd987a2c0ddf7\",\n        \"message\": \"427b5a01e8597f04fd422f0a662d0be2dfa853ed5f9d3f60ff90f2c5ee08bb59fd03d402b754caf54d0058f5a2cf87af4fef2177d59e18226293fd2af376bc987bf7b320b9d1e249ab9efb75078e6d3df29e03504776354344aa69e72e1ebc52a3c38a4c2a1673b4e974a2e4e12a2e78ea3e3fe50c53630d096da3e2fe8299f71a1b441b4cf0caeb937afa4a0e3915ccab3996c9f6a8f4fd37543e8f75900cfd47175370efb852a5f69d673683f998fdcff85ff8f32baa807066604422027d51a435ddf988ed2fd8eb191f10b46807420008756eb4e300c4099c2d6450bcc6a4e7d0673156b837f0506338f3d1b5734b166ca5cc2f24a4ef026cda2c4ae3105b63ca8570d18546cfacb86042966a00ef52c7299019f68a2df08c8b704e85e713c348d7f1677660e18ebab59bf4e12e6ff2d783d8d5d42aab6ef017b7a1966aee8dc14ddabed49b4b643df4e9b0b60383c7d8b4b88c65a898c1c77d43d6bd68b2a5743f1fedd654dc84496da02ceb69b9b4d3a8e00ccd72e7c75fc50a8dd087e183e6c1f579baebc5c63f2807936791b5fe4847cdcf151774235205cd2d7b8bf4ae8819225ea708b7baac66998f0cbab2c7ddf251f3b1de1017d397692205eea639f12d77beef6c13bb12100ff8906470bc7b21298053be1a61b7b3a499edc310996c8bc0871907ca468e89ed311adca2e2b82930975b3efbbfc03cddf4d948c4765e8c10590882169acddb8f8c36d84c2dac3b798e7abf844712fa458d277c24e814047d742319a834dd9f927a2b4485ef13745f7a60dd6bb337936304c97d3f9f144eb29bb695b8dc31b9d84910611d28d581caa9365d6dff52d410a4ad52bd121729fff52888f4daae1707f6f56dac61ffb9961cda7176af4460a6d5542a20446fb5147fce727204cec6899b9a3d4ff6226bb8a1c78e36fcdd9e50c040d72d0f4007d3fa9aa767e4abd0add62fdbccdeff6721eb259e00a721632006bede0d173d38344dea44f96b67d9a2eea1d2af5f748e8ebdb441bfb4e58e2d42fec740566acf73a303358f7d89c8158cf21fe85b0d4a417ebdc86d0469f6b91c24ad610d486dedc218b2ce7a8b96754723151f0d0076fff9f19d112d9c0592fb8d92c99dcb8ddfaa46fbe0d92df46b8c00ca4345adb69a5aca694a86cf30646451bb17ba6e607a912bf109d5fc2d3e27d00d945600a8a57c\",\n        \"signed\": \"dec46253509b11e4b52a6ae4f366b680dffc280d0a044fc0cb790b6e751381461e1e602a89e3b3d3064c407f602f1c22404b6823bd2467549314a00001664a08427b5a01e8597f04fd422f0a662d0be2dfa853ed5f9d3f60ff90f2c5ee08bb59fd03d402b754caf54d0058f5a2cf87af4fef2177d59e18226293fd2af376bc987bf7b320b9d1e249ab9efb75078e6d3df29e03504776354344aa69e72e1ebc52a3c38a4c2a1673b4e974a2e4e12a2e78ea3e3fe50c53630d096da3e2fe8299f71a1b441b4cf0caeb937afa4a0e3915ccab3996c9f6a8f4fd37543e8f75900cfd47175370efb852a5f69d673683f998fdcff85ff8f32baa807066604422027d51a435ddf988ed2fd8eb191f10b46807420008756eb4e300c4099c2d6450bcc6a4e7d0673156b837f0506338f3d1b5734b166ca5cc2f24a4ef026cda2c4ae3105b63ca8570d18546cfacb86042966a00ef52c7299019f68a2df08c8b704e85e713c348d7f1677660e18ebab59bf4e12e6ff2d783d8d5d42aab6ef017b7a1966aee8dc14ddabed49b4b643df4e9b0b60383c7d8b4b88c65a898c1c77d43d6bd68b2a5743f1fedd654dc84496da02ceb69b9b4d3a8e00ccd72e7c75fc50a8dd087e183e6c1f579baebc5c63f2807936791b5fe4847cdcf151774235205cd2d7b8bf4ae8819225ea708b7baac66998f0cbab2c7ddf251f3b1de1017d397692205eea639f12d77beef6c13bb12100ff8906470bc7b21298053be1a61b7b3a499edc310996c8bc0871907ca468e89ed311adca2e2b82930975b3efbbfc03cddf4d948c4765e8c10590882169acddb8f8c36d84c2dac3b798e7abf844712fa458d277c24e814047d742319a834dd9f927a2b4485ef13745f7a60dd6bb337936304c97d3f9f144eb29bb695b8dc31b9d84910611d28d581caa9365d6dff52d410a4ad52bd121729fff52888f4daae1707f6f56dac61ffb9961cda7176af4460a6d5542a20446fb5147fce727204cec6899b9a3d4ff6226bb8a1c78e36fcdd9e50c040d72d0f4007d3fa9aa767e4abd0add62fdbccdeff6721eb259e00a721632006bede0d173d38344dea44f96b67d9a2eea1d2af5f748e8ebdb441bfb4e58e2d42fec740566acf73a303358f7d89c8158cf21fe85b0d4a417ebdc86d0469f6b91c24ad610d486dedc218b2ce7a8b96754723151f0d0076fff9f19d112d9c0592fb8d92c99dcb8ddfaa46fbe0d92df46b8c00ca4345adb69a5aca694a86cf30646451bb17ba6e607a912bf109d5fc2d3e27d00d945600a8a57c\",\n        \"signature\": \"dec46253509b11e4b52a6ae4f366b680dffc280d0a044fc0cb790b6e751381461e1e602a89e3b3d3064c407f602f1c22404b6823bd2467549314a00001664a08\"\n    },\n    {\n        \"secret_key\": \"43bfb3dbe4d9bdaa82b354dd596334e660d76fc0b2eb698993aef3767f1c7c7f\",\n        \"public_key\": \"d00aeceff0ceb832c251d1fe6bcbeaeacbb4113f5281baba4e878f7b95f93f07\",\n        \"message\": \"3f3eeddcaef4e1662adb66bb1b207d793fcbef815005e82643ed70c9855403dac28b520727a901a532d28b9bd1348db2f8967bbb8c9098b07f570a2eae1ee482640c0b67a52a38612133a15e258ede38cda878ff36ed321dff87cc6a01383ba84067d60af41776acf80a8a4eac77f7d87c37a704a3e2aca1e8815e49fbcab797c856529538be07d51696321f69b09b5dc5a15e5f0e4c22d22837f62ee4c8bc7f25a9487b962cc20f133fcb870ed125cca585d181bd39f9dfa661f19be76da7f65f22fbbc80752aeb39e8d59ed96e14f595d04929402b5029c60cee37c0217bc531d80db341dace3cce76e643aac53887473edc6e19cb39fecf6af424a2066393d1c33fc7b93676d7e6105b9bfc967d1e29afdc4cf15bcafa09c295a6f9deee331ab3b0d493126e2b2fffb42a6b68e79e138db550827262e487a83f37f01dd7922be75e92fcf5d9d4803b3ac2f35da210fb38b263b0ffb6c2708d4b55b757af52077a7e3184d01e82f64d32cce4fdee0f8d4e364bcfb958ebbfdbb622b38b51e930271c7b1b70aa9d4bb3aa4b997c52144d3aa62162573a3a1d9ce46cdbeeb8449f1225c449631e8897521cd0f637b721a1252b8a10ab0be870afbcd89d58b2ebb63211950cad7ab82c8195026b50ea8b77b9e90ed559af4484308851a3a156716853a8ac4ecb8c5cc7d935b0f466124143b1177f05d08b97d1ad542ed2c2465af185e7db42b69cb802a71794a3139883029670c956742aaad7907a71d95985fc1d45b65997b4ec6ce8255de959270afa7de90f2929de63f9b17211d7f1ae820ada9ce3e48649179d60b0149493481f01d459db7dad0526b5bd9f4b3380d25ba2c502ba8fa3c4d4131b4662addefb41827f759fa71d447d5f029245f48c622eb7c68c8e71081f7f789de7a283d2eda83a7d1722a05fb72e1760c24040c4d834def5df5f742e02b30451c893bcf7d771db784cbbdaec876d8ac86743b529a292007ac753c99a5799cc324fe5ebb5448ab554b10d4136974a12542d25c6147c67c5d2336c9db75cba2fd608cd43ab95beacd043a1349cefa828e23b5f0b6e0e2951f3353bb92bfd1f0a49c33fb3cf3799a0b543198ad5d03d263c1a06c35a26ade1518491c8c1d27a2db033808932cd1c47b5a126985acb8d888360eeccfeb3bf51b0d189b4190440404d12fba65d0a7a14c620c555f822\",\n        \"signed\": \"a9995523020a0d222bc48f98d05504e3068f304a6d197006cc9c035eeade099e7aa97e90894ead17e8c30b0aa4a98088f038b92244c4b20fde964f8534e8fb033f3eeddcaef4e1662adb66bb1b207d793fcbef815005e82643ed70c9855403dac28b520727a901a532d28b9bd1348db2f8967bbb8c9098b07f570a2eae1ee482640c0b67a52a38612133a15e258ede38cda878ff36ed321dff87cc6a01383ba84067d60af41776acf80a8a4eac77f7d87c37a704a3e2aca1e8815e49fbcab797c856529538be07d51696321f69b09b5dc5a15e5f0e4c22d22837f62ee4c8bc7f25a9487b962cc20f133fcb870ed125cca585d181bd39f9dfa661f19be76da7f65f22fbbc80752aeb39e8d59ed96e14f595d04929402b5029c60cee37c0217bc531d80db341dace3cce76e643aac53887473edc6e19cb39fecf6af424a2066393d1c33fc7b93676d7e6105b9bfc967d1e29afdc4cf15bcafa09c295a6f9deee331ab3b0d493126e2b2fffb42a6b68e79e138db550827262e487a83f37f01dd7922be75e92fcf5d9d4803b3ac2f35da210fb38b263b0ffb6c2708d4b55b757af52077a7e3184d01e82f64d32cce4fdee0f8d4e364bcfb958ebbfdbb622b38b51e930271c7b1b70aa9d4bb3aa4b997c52144d3aa62162573a3a1d9ce46cdbeeb8449f1225c449631e8897521cd0f637b721a1252b8a10ab0be870afbcd89d58b2ebb63211950cad7ab82c8195026b50ea8b77b9e90ed559af4484308851a3a156716853a8ac4ecb8c5cc7d935b0f466124143b1177f05d08b97d1ad542ed2c2465af185e7db42b69cb802a71794a3139883029670c956742aaad7907a71d95985fc1d45b65997b4ec6ce8255de959270afa7de90f2929de63f9b17211d7f1ae820ada9ce3e48649179d60b0149493481f01d459db7dad0526b5bd9f4b3380d25ba2c502ba8fa3c4d4131b4662addefb41827f759fa71d447d5f029245f48c622eb7c68c8e71081f7f789de7a283d2eda83a7d1722a05fb72e1760c24040c4d834def5df5f742e02b30451c893bcf7d771db784cbbdaec876d8ac86743b529a292007ac753c99a5799cc324fe5ebb5448ab554b10d4136974a12542d25c6147c67c5d2336c9db75cba2fd608cd43ab95beacd043a1349cefa828e23b5f0b6e0e2951f3353bb92bfd1f0a49c33fb3cf3799a0b543198ad5d03d263c1a06c35a26ade1518491c8c1d27a2db033808932cd1c47b5a126985acb8d888360eeccfeb3bf51b0d189b4190440404d12fba65d0a7a14c620c555f822\",\n        \"signature\": \"a9995523020a0d222bc48f98d05504e3068f304a6d197006cc9c035eeade099e7aa97e90894ead17e8c30b0aa4a98088f038b92244c4b20fde964f8534e8fb03\"\n    },\n    {\n        \"secret_key\": \"514e070b0190d18cbe981a5a151e7753398a272bcf014813ad379722c36e133d\",\n        \"public_key\": \"6fbde0474cc4810effa50a07820c965aa00395ff3a5b3e2edd7d356b7d6aef2b\",\n        \"message\": \"831455762a5d80097bb2845042f4c876e7108535bed683e8c44619d08154a229444b101e3ed7c01507e870941446af978c0f5341d1ac1dd15b14e8966712df19f52feb5103cf62b6632756446cc754df00a3f6dd719968a2cef66c3adfb7d1fc491fbbf3d59294ab34619e176db0d446151e37eaa3daf172406e983d9d23a6b69e92976030f5ac7040ad5114129feaf97af15b2296fae70492dbbeb2b4827687fb798715c9bb2c32557a81d891b897052900707159751f07db074c77f0719671f1766689029a3cddf39df3483cf2b04f71c25de05fc2d02bb48e539eaf1a321646cd80ef2f0ac703f45e7389530800e5d417ccea8a5c086682f04745d50b5dfc8f6edc87a95c7d202a9cfd998714b746920ebbe2335bca1a0171762016f5e4bda89c57d0edc6910c6d22c8f909da3db1352f0c8bd18f3b5aac25f193b89470f976bc4f1affb3c66bc5876c6fe2ac7508533d97bbcf77119d9aae193f07e0b64b461c9c6c3b9d293bd37de3d8e1ab1e8d872cd94e6cf0eb68439fdcd3b25ce8483460bd8b7cce889fb722b4361e118da983ef4a9e45cebc0c1b8229ea53e6f55505f644e09acaa4c4b8cc640b2cd2b312e1c3a2c02669e1f9c06311c78d360009db9e67c39b49d1e5d770c01d284b0a17a41b4e7ca745d665ec07500e4d9fc8ebc1cc6af53a3fc76b0c3f1431d49843f20e182782c82b3b5aae36fe20ca642618068be233d4b5ef9eaeff401536dc593a2bc18344f55ac5d5fc7b3eb506d11cb375330063c620c5334d723c7d1f042816bc4785b35ac0e6f174f736878b7b491658ca67d8fcab538fc6ecd277ead90d954b460da4253a1c3a30b3d8928f69ac9876a2891969fc2d06a668992b8e2115dfe5358a7124ba7ccf421d8054ea043444cdeb40b716dc7a3659a3ca94347293489060e2cf6712a2a6c7b8ad146785fc40ccb9da287830d011d0d24df3e7afbe972d6f417de5cd75f259ea07cafdde205fc0a365135c232cbd7c1bc539fa4b7e1cce35185237c23f80ae97c186d0d3b10503d5984a20ec41c3cd042c28a4c31f9574b06a872bf959ab0add1f5dee14a1e741ef238dfcdec085aa088dcf39a36dda8f2a85ed0d362ccb005d02e5accc092a376dc11a566170d583db35f1de0be3f15908596e9b781ac81be07b9bd2af46c56fb4d9d84276011e4618b7f76f96794cd0fd57ed414b63\",\n        \"signed\": \"b6c355c958b5baa7ebe977a93fcf539589a366d40160e4e031b88ab96402c7bd577ff635fc07782423598dca43668124a8b287510e2cfd07a1e8f619f6c8540a831455762a5d80097bb2845042f4c876e7108535bed683e8c44619d08154a229444b101e3ed7c01507e870941446af978c0f5341d1ac1dd15b14e8966712df19f52feb5103cf62b6632756446cc754df00a3f6dd719968a2cef66c3adfb7d1fc491fbbf3d59294ab34619e176db0d446151e37eaa3daf172406e983d9d23a6b69e92976030f5ac7040ad5114129feaf97af15b2296fae70492dbbeb2b4827687fb798715c9bb2c32557a81d891b897052900707159751f07db074c77f0719671f1766689029a3cddf39df3483cf2b04f71c25de05fc2d02bb48e539eaf1a321646cd80ef2f0ac703f45e7389530800e5d417ccea8a5c086682f04745d50b5dfc8f6edc87a95c7d202a9cfd998714b746920ebbe2335bca1a0171762016f5e4bda89c57d0edc6910c6d22c8f909da3db1352f0c8bd18f3b5aac25f193b89470f976bc4f1affb3c66bc5876c6fe2ac7508533d97bbcf77119d9aae193f07e0b64b461c9c6c3b9d293bd37de3d8e1ab1e8d872cd94e6cf0eb68439fdcd3b25ce8483460bd8b7cce889fb722b4361e118da983ef4a9e45cebc0c1b8229ea53e6f55505f644e09acaa4c4b8cc640b2cd2b312e1c3a2c02669e1f9c06311c78d360009db9e67c39b49d1e5d770c01d284b0a17a41b4e7ca745d665ec07500e4d9fc8ebc1cc6af53a3fc76b0c3f1431d49843f20e182782c82b3b5aae36fe20ca642618068be233d4b5ef9eaeff401536dc593a2bc18344f55ac5d5fc7b3eb506d11cb375330063c620c5334d723c7d1f042816bc4785b35ac0e6f174f736878b7b491658ca67d8fcab538fc6ecd277ead90d954b460da4253a1c3a30b3d8928f69ac9876a2891969fc2d06a668992b8e2115dfe5358a7124ba7ccf421d8054ea043444cdeb40b716dc7a3659a3ca94347293489060e2cf6712a2a6c7b8ad146785fc40ccb9da287830d011d0d24df3e7afbe972d6f417de5cd75f259ea07cafdde205fc0a365135c232cbd7c1bc539fa4b7e1cce35185237c23f80ae97c186d0d3b10503d5984a20ec41c3cd042c28a4c31f9574b06a872bf959ab0add1f5dee14a1e741ef238dfcdec085aa088dcf39a36dda8f2a85ed0d362ccb005d02e5accc092a376dc11a566170d583db35f1de0be3f15908596e9b781ac81be07b9bd2af46c56fb4d9d84276011e4618b7f76f96794cd0fd57ed414b63\",\n        \"signature\": \"b6c355c958b5baa7ebe977a93fcf539589a366d40160e4e031b88ab96402c7bd577ff635fc07782423598dca43668124a8b287510e2cfd07a1e8f619f6c8540a\"\n    },\n    {\n        \"secret_key\": \"bc790a7385dd1dddc762e3b20221dc078b6c3da8986d4180940727257cfdcdf1\",\n        \"public_key\": \"c9264626f68fedb5b39c28f030453b54d0d51a98b17721f2611d7f277ef48b81\",\n        \"message\": \"143dd7bfbff2adc71f5d123d474ea069df14ae923ed9bf8f9891e60bae43f0c9f55537ac9d1ae523ce4ecfd33b20ae445e9c426372050fa5217c1e4fb01353ebf2e32904ef7eefcf72e8023bae06bbb640cf777d5b0e11527bc835493ad6980a157bb2d50be23365e72cbf0b3f209ef0c44a00b41a62262488096cae5a696b4d64cbad34500d41fb4e4bc70f8bf62144d01c2275d6d29f5de75b1721d5046b6829164443ebfd9c1781319d88f54010edc296abbed02b7dad9ba585b552e0005dcca400bf4f459eed7db86ea8612be9e918dfd4e2700c4710083283626fac754417e0087d26ba145dfc45b1c9bf7b4dd70e6c508747ef805c9a02425aebc6421e0deb6a79d89aceeee01ececc9f3ca365383826584c430ebd39ecf0a72866ae0aceca5ad4f0405b67779c04c5de0330614da3470b805d787ce79ac5a696dd6f6b5539b1a651b424cefb19491da6e0889223cc98398b42c00414ff8d6c0627eb97cff20a8cbe7fccb41d810fcfe858ca7475247ef628e84a09d012fe12235b38c1cc9d82e2b69d01d6218cfd48e85f26aeadd195408cdd4c2f806a89041fd0317fb1a7b6209f904270d34e606195047288b0fb11a5722938f67c22b313f7f74b2025c75bcd1ecc5a9add4a640a41f2996eb66e5af196198db58a3fb9938f349f922a24d86f4ed8a96a09a196c24d6d01ed76f3816c05c4f26baca9b9d6dcc79b580dfb75d6c905d480dad76951854bda1caa7f4a819543aed01ae956bf3058fe8b3c7d5d724962f1a6a83143ddad274fda3ad578e98aa967c410ee57575ef01c0258560f0a1fa4b79327796de99420cfd0a415506360f1242ccc58a6880927750dbbff13d7c1b4ed519cda357210f12fb0d1c4d48f0411bd7e058cc4cb93d3c77597e2653ffa282d3c2f128ac33a237af2fcbc9ef9c811f37814ba2b0b85093d0fd18b8c6fb09a43ce52254d23d55f32e1d3242aed1f23d9cf204aa0dfd44a346fe09e55a4a06cf1bef8bbf37ba1f1598a58aef89501ecbac0453543e480ed0adde90c841d95ebd6eb23baa9f70f83c149eab32d0913c79b0993d0e1d3574f0f542e56a20616cfe4a8bd7aaeebe0b083dc2ce0146178c07482a01129bc6fefdc8141c1384894b69cbe2f29da188f7fd4ac341a2df6fd90dee6a446d2746324c75c1ef5b1ace187d3bc16d70559892975d7e47138f0406385ea\",\n        \"signed\": \"6d6bd65f372679fe9d945ff56516333ece0b7a25b15ad2487381670e536f5246775eb39a114db2b9cd50f312b360d9d0bea295dc37b817b332890adb65e4c401143dd7bfbff2adc71f5d123d474ea069df14ae923ed9bf8f9891e60bae43f0c9f55537ac9d1ae523ce4ecfd33b20ae445e9c426372050fa5217c1e4fb01353ebf2e32904ef7eefcf72e8023bae06bbb640cf777d5b0e11527bc835493ad6980a157bb2d50be23365e72cbf0b3f209ef0c44a00b41a62262488096cae5a696b4d64cbad34500d41fb4e4bc70f8bf62144d01c2275d6d29f5de75b1721d5046b6829164443ebfd9c1781319d88f54010edc296abbed02b7dad9ba585b552e0005dcca400bf4f459eed7db86ea8612be9e918dfd4e2700c4710083283626fac754417e0087d26ba145dfc45b1c9bf7b4dd70e6c508747ef805c9a02425aebc6421e0deb6a79d89aceeee01ececc9f3ca365383826584c430ebd39ecf0a72866ae0aceca5ad4f0405b67779c04c5de0330614da3470b805d787ce79ac5a696dd6f6b5539b1a651b424cefb19491da6e0889223cc98398b42c00414ff8d6c0627eb97cff20a8cbe7fccb41d810fcfe858ca7475247ef628e84a09d012fe12235b38c1cc9d82e2b69d01d6218cfd48e85f26aeadd195408cdd4c2f806a89041fd0317fb1a7b6209f904270d34e606195047288b0fb11a5722938f67c22b313f7f74b2025c75bcd1ecc5a9add4a640a41f2996eb66e5af196198db58a3fb9938f349f922a24d86f4ed8a96a09a196c24d6d01ed76f3816c05c4f26baca9b9d6dcc79b580dfb75d6c905d480dad76951854bda1caa7f4a819543aed01ae956bf3058fe8b3c7d5d724962f1a6a83143ddad274fda3ad578e98aa967c410ee57575ef01c0258560f0a1fa4b79327796de99420cfd0a415506360f1242ccc58a6880927750dbbff13d7c1b4ed519cda357210f12fb0d1c4d48f0411bd7e058cc4cb93d3c77597e2653ffa282d3c2f128ac33a237af2fcbc9ef9c811f37814ba2b0b85093d0fd18b8c6fb09a43ce52254d23d55f32e1d3242aed1f23d9cf204aa0dfd44a346fe09e55a4a06cf1bef8bbf37ba1f1598a58aef89501ecbac0453543e480ed0adde90c841d95ebd6eb23baa9f70f83c149eab32d0913c79b0993d0e1d3574f0f542e56a20616cfe4a8bd7aaeebe0b083dc2ce0146178c07482a01129bc6fefdc8141c1384894b69cbe2f29da188f7fd4ac341a2df6fd90dee6a446d2746324c75c1ef5b1ace187d3bc16d70559892975d7e47138f0406385ea\",\n        \"signature\": \"6d6bd65f372679fe9d945ff56516333ece0b7a25b15ad2487381670e536f5246775eb39a114db2b9cd50f312b360d9d0bea295dc37b817b332890adb65e4c401\"\n    },\n    {\n        \"secret_key\": \"db3a44df40d255a25cf23f53c45223b7d8f1f1f111ba07406b71e184a8cd0612\",\n        \"public_key\": \"6b12bd9580ae207a9b0baa8287b8bb86669373ee5e5a625ab4a6ef2d08712597\",\n        \"message\": \"52dd8ba4fffa344d1e0811d9675c313f9cc0e5a138478691989d2b7f7389025068fa35f74f9aeaf1e95665ecf8d5707f75f65f2256eea93398be59c0d538f5e8584bfbb3a240f5016d7927234cb3eac35b391b8b53f20ed8bae0ba11089694bfeade11071656d4cf18ef2d368192e04e08e3024fc1d2fda6312afca68d10c9c336a0e36850be1a4f35b033a85a2a9549f2673a995f2a9ab4bd46c8fd2d838e64f761713427329c9af5e4211a22ab208aaab80e194cd0f6a502b308fed6c583517801a48ed4330e2faddcd41809c3919b30e84db3c68731031e79857dd9f97ffd12547da7066798074151ec88a5fa963b9d9d83ba2fee135833950ef7bc62b3401ea11bb36f25561bc0522bb02d8dad0543f63d547be77d0a4c9bf65d42f3a276144d2e474e2942f3790221e26fbae7ca91efd85921990835fafb6dc674635c9601821038b52711343d1aa25f1c46ba4e3c6e712bac19e53eae30e5246e4f04ddf2acdbb34163c243677690be0bf2e3fa164870b5e6f536b22fb89e5e8e1d87cdb34044977ed2836e544d7ba493dd42a2b649bcf313c5b39a1dbfff3e7f2a59ade87d3e7b258f58e565fdba3e4d92b1edb8bff54dc49d86c53c030cf58b97ef066d241b540530213905739d8e1aa72ed90f685d3958eaa242b0cbf7a2eb976ee96a63e66786464169a742d457e4d9117c7d66428445a46930c28ba7a2658241805ebe72c78e02035d263a211e590b490cdb84415062eed14f13b8a1a9e77c8d7b75515b18fb85386e4a7e053980d30f4899e83863bee875585887c5f48b516ccb731c4bcaa3df07d04795814096c79d7c5fdc4dabf5e26a4ca1838e0e5d87db71309b81ea7ce461e5e44c7ab2f105ad75c543c1e9179c36a5fa555ec922ffed1b76d25801dd74f80cd0a6ba7bc20db0ad580b7bbb9ddcfd93ad1c5f20f3e27c3ea3a1e71eb74ff5f944cd3b98f6d04529593011c4aecef6dcaa60fb18368cb12b6e391b3f5df765cbabff15898c84796fc2b53fa4900dad034a13b0ce1445adda4ef719be741419e231e92f1f667a32842a42db79bd7a014a809c81596e826273d16fe5d40458242ae10e12e60b3489530c6622b5bb44454f29616e47e9a297ce1ca074137fd9ae13e3ee8edbcf78af265459db1af342dc0b2fc809bda015b5a82b2b7c54efe4e5fc252eb13d66e808936f1910f4c48be0ef7a\",\n        \"signed\": \"cc28b5ef4b9773637fae7e5f084b6994aa3598f8f4a65d0bb201d172d861a30149b3338d3c3ab75b32b25595cd8b289630c3376acd10ba2ab26bc1aba900840e52dd8ba4fffa344d1e0811d9675c313f9cc0e5a138478691989d2b7f7389025068fa35f74f9aeaf1e95665ecf8d5707f75f65f2256eea93398be59c0d538f5e8584bfbb3a240f5016d7927234cb3eac35b391b8b53f20ed8bae0ba11089694bfeade11071656d4cf18ef2d368192e04e08e3024fc1d2fda6312afca68d10c9c336a0e36850be1a4f35b033a85a2a9549f2673a995f2a9ab4bd46c8fd2d838e64f761713427329c9af5e4211a22ab208aaab80e194cd0f6a502b308fed6c583517801a48ed4330e2faddcd41809c3919b30e84db3c68731031e79857dd9f97ffd12547da7066798074151ec88a5fa963b9d9d83ba2fee135833950ef7bc62b3401ea11bb36f25561bc0522bb02d8dad0543f63d547be77d0a4c9bf65d42f3a276144d2e474e2942f3790221e26fbae7ca91efd85921990835fafb6dc674635c9601821038b52711343d1aa25f1c46ba4e3c6e712bac19e53eae30e5246e4f04ddf2acdbb34163c243677690be0bf2e3fa164870b5e6f536b22fb89e5e8e1d87cdb34044977ed2836e544d7ba493dd42a2b649bcf313c5b39a1dbfff3e7f2a59ade87d3e7b258f58e565fdba3e4d92b1edb8bff54dc49d86c53c030cf58b97ef066d241b540530213905739d8e1aa72ed90f685d3958eaa242b0cbf7a2eb976ee96a63e66786464169a742d457e4d9117c7d66428445a46930c28ba7a2658241805ebe72c78e02035d263a211e590b490cdb84415062eed14f13b8a1a9e77c8d7b75515b18fb85386e4a7e053980d30f4899e83863bee875585887c5f48b516ccb731c4bcaa3df07d04795814096c79d7c5fdc4dabf5e26a4ca1838e0e5d87db71309b81ea7ce461e5e44c7ab2f105ad75c543c1e9179c36a5fa555ec922ffed1b76d25801dd74f80cd0a6ba7bc20db0ad580b7bbb9ddcfd93ad1c5f20f3e27c3ea3a1e71eb74ff5f944cd3b98f6d04529593011c4aecef6dcaa60fb18368cb12b6e391b3f5df765cbabff15898c84796fc2b53fa4900dad034a13b0ce1445adda4ef719be741419e231e92f1f667a32842a42db79bd7a014a809c81596e826273d16fe5d40458242ae10e12e60b3489530c6622b5bb44454f29616e47e9a297ce1ca074137fd9ae13e3ee8edbcf78af265459db1af342dc0b2fc809bda015b5a82b2b7c54efe4e5fc252eb13d66e808936f1910f4c48be0ef7a\",\n        \"signature\": \"cc28b5ef4b9773637fae7e5f084b6994aa3598f8f4a65d0bb201d172d861a30149b3338d3c3ab75b32b25595cd8b289630c3376acd10ba2ab26bc1aba900840e\"\n    },\n    {\n        \"secret_key\": \"77964dad52b579b8966753da3186d1c5e9d33d33a4db38bc0d7a1a6c112c13c2\",\n        \"public_key\": \"fc25125e7829f64234375e52ae9f77ae1013f99df5f9965ad2aa16589596d091\",\n        \"message\": \"c339e718a757f3f3bd1babdd2e00aaa5cd7fc9005ee34b6fdc09d71fbd9c9289ab1dd14dba2cad58cb805116777bd80c85966433ad46f9ca6e54f13dd3ca7e56e47fea41e5488a45ad53bc5d657427e1d7938f5519f1b09f5bdd98aae5ac9643ef78eba4934925339a155dc66828571002097a11a5cee7b51a441b756b0ce65b779afe19da6a18efc145f6090ce770de9e0e91f543270a0985eab475293ccfdd3141c4142e4722233b267499447641235d728bd75cd1adc0db142f7331adddf8c5eea3d576405d869915b560f964e3e0003c91f5e96bffbeeec73e51024ef52c55c6dcb54d58203e62f4ddb6e137eb08e1bf1326018afd1a86cab6c841e0661ce0a1a7ae967f24c1a77fc7ca505f72e5f7936e39c6f4837e2595195a69cd676510a7161a4dc5e318f3d4f3ac0af03f8c4ae5bce39324e9738aea49f002d32d16de2317e95a9f32ee604e13db8038b264cfc17aed29c9debf8191de9e0efc951ad6d54867068cf50a269c37a241f85206788d23143177f659cca66cfce03bc0502255337f16b3dad6f79132abf80ff12b6d2281e637eb6c71f76e2633a114565240eed00fabea9ed8de28c83221f8cb485f512d9008bfc74a366d4c2b4ed172d367e0247cb65098c110282e831df8e9bd4fbd5f4dd2b7f2420c23b85a637aa2262c3cb88405f70730c9ab4c9d0f227ee4fa4ef91efe9a59b3e6d843db879f5650059e99f0e4a0386838e6f9876f67d50f89832dda5f30a9cbfd710134f9b5b54627496aa3a43212b07f03db11d3d4f875d41d1f4ac45969ddef69f81a06d2b0c646c9cd931cf2502fef0dd32abbf0951ed303f5284825934397fc22e78698d35ad81d82256bf9e15400a1091623a9826f1e57792367417ef02586d64e650da9ace2f18aa0a126d867cac4b5d4c91bf5209e5359556386f827083eb53e8b4709fffabe92c61d78ffb5daf10274e242a70091f3f9b9d596c1258c9a63384f4b05b028661222181c0fca965f0a2cb56e4b556d6fbff71b64d9b358da31aa37c74ff5962fb8d96a383d049724c19e249c9edbb2a375b23ce3104da0ec58d2635ba03b55423fa2db7eb349a4fc58a1ef540ee9a02c2e703c68d7f8475f434ddd3200db1f06745791a3acc3160dba50a393447ffeef6dc7b98fb06684cc90fd85203d119dcd8199e4d9a89ae3467ae4bb19fb71cf747029c24096f9a50e\",\n        \"signed\": \"3d1b4b4e820d250be2a8fa971e599e1e98977528b2f930189681a93b05e1a706fc80effa94e929bc43921656897388288a9b29271f37a14be014b873c68fc904c339e718a757f3f3bd1babdd2e00aaa5cd7fc9005ee34b6fdc09d71fbd9c9289ab1dd14dba2cad58cb805116777bd80c85966433ad46f9ca6e54f13dd3ca7e56e47fea41e5488a45ad53bc5d657427e1d7938f5519f1b09f5bdd98aae5ac9643ef78eba4934925339a155dc66828571002097a11a5cee7b51a441b756b0ce65b779afe19da6a18efc145f6090ce770de9e0e91f543270a0985eab475293ccfdd3141c4142e4722233b267499447641235d728bd75cd1adc0db142f7331adddf8c5eea3d576405d869915b560f964e3e0003c91f5e96bffbeeec73e51024ef52c55c6dcb54d58203e62f4ddb6e137eb08e1bf1326018afd1a86cab6c841e0661ce0a1a7ae967f24c1a77fc7ca505f72e5f7936e39c6f4837e2595195a69cd676510a7161a4dc5e318f3d4f3ac0af03f8c4ae5bce39324e9738aea49f002d32d16de2317e95a9f32ee604e13db8038b264cfc17aed29c9debf8191de9e0efc951ad6d54867068cf50a269c37a241f85206788d23143177f659cca66cfce03bc0502255337f16b3dad6f79132abf80ff12b6d2281e637eb6c71f76e2633a114565240eed00fabea9ed8de28c83221f8cb485f512d9008bfc74a366d4c2b4ed172d367e0247cb65098c110282e831df8e9bd4fbd5f4dd2b7f2420c23b85a637aa2262c3cb88405f70730c9ab4c9d0f227ee4fa4ef91efe9a59b3e6d843db879f5650059e99f0e4a0386838e6f9876f67d50f89832dda5f30a9cbfd710134f9b5b54627496aa3a43212b07f03db11d3d4f875d41d1f4ac45969ddef69f81a06d2b0c646c9cd931cf2502fef0dd32abbf0951ed303f5284825934397fc22e78698d35ad81d82256bf9e15400a1091623a9826f1e57792367417ef02586d64e650da9ace2f18aa0a126d867cac4b5d4c91bf5209e5359556386f827083eb53e8b4709fffabe92c61d78ffb5daf10274e242a70091f3f9b9d596c1258c9a63384f4b05b028661222181c0fca965f0a2cb56e4b556d6fbff71b64d9b358da31aa37c74ff5962fb8d96a383d049724c19e249c9edbb2a375b23ce3104da0ec58d2635ba03b55423fa2db7eb349a4fc58a1ef540ee9a02c2e703c68d7f8475f434ddd3200db1f06745791a3acc3160dba50a393447ffeef6dc7b98fb06684cc90fd85203d119dcd8199e4d9a89ae3467ae4bb19fb71cf747029c24096f9a50e\",\n        \"signature\": \"3d1b4b4e820d250be2a8fa971e599e1e98977528b2f930189681a93b05e1a706fc80effa94e929bc43921656897388288a9b29271f37a14be014b873c68fc904\"\n    },\n    {\n        \"secret_key\": \"5cafd817a4410ccb27121723ef3207c1731a0861945be962714c0ed95038a195\",\n        \"public_key\": \"4ea086be43ece1c32d08059bbadc9e9a2b2f4f3fe370f1f5ccd7dbdec0aaf303\",\n        \"message\": \"50b2f05342418046d16a30be4fc62b67daf6c18d2a74242b7cb55ba90ad20b6cafdd60155737c29de48aa5d799fe5495fe59df5a9b8c0a8e5418904763fbad83ea6986651bac31117939cef4e0c79930d52dfd7db43c31addae3cf93e3efc5a916efd0d65fdc30909fa356ccbc5247d7aaa067131b6b4820fd02f8e395f5a9704c9bdd7560a611d62559a8dfe1d2859c52486cc11ed3331992488f417520d920dc73a32d4f08110082500f5a962a306932c6a7802955cedad7abf53b0f19fe4794a31d6b855380284306ccff71a4007859a2328bb19024c43e10d77064d866d9622d142c27354b84ac3b4f8232f7a2f8af6409d5cc757a18ef813dfaf4b9bc040cb006d77f143641aa2036ac7bc928dc96585d9e36c7bc9c564d25f1c2cc0beab9d5f207e84b215f1e7aa6fc328237b79c39923a4e09c7c73dc6b24b1416294d798a4ed5f758336d915a870a7d6b7592b5b88aace2dc5f267bdb491141cbbae2a677407cc0955f961962599304ba0b839671a5c000e920108a05298087e49770aeeeaab3632724cb0fc2285796dc414814fda78a54e67f00a02f77d3ccde1ed9d7b1def14ea1f61910bdf30a1196fc6351b62254d6445e6c90445b16efafe289a2784b92e42b78a4a900c35f55630bbb7762ff9eb7fef7d04c90b9571c4fc760a410dbfc252991d0ba27f2d414fe64eefdff4abc18817c9706c631bfa203821d3b92cb338baaf5d1232b462647954d0902462fb1696e991f07fa9c3dbcf2872960831b4ded92a421cf21b753165ff309efe2ef5438c01270d10c6a03d34f71ebc2dab1da90daa357984d2462bcb35ee3de55c3a55f8b98aec2114f74c84341a64127863c120b5ecad9e329a5756ae4a2555d8492cda835225a8deb3f9c1558f0d425bc172ff7640cc79d97800416fd6294cccc70cd1cf5b6a8e2aa07289bd522bf99dc96c36bfee80e846f5dd746dd4c5003e4bf7d29efeea7508a0161236882c9a82a56aa2c2574669652c630923ab470ddb95d456f7b8e8f07599ba0d1d38bc7f8176e3fdf0209bd6f75d4cc11803afb1856cbc0e91c73730e4fb98f3c948a87d5a7edcc0a6a8ac810ea3eaa6e063cec5f5566cd6dedc537db6d686b8021f6ea825ad7475ec7f1c5dbde45d3ff4b5ee51c0d04f1d74018eb91e5040d01c8b71a4aabbde6094d4afeccb18dfcded73ea75e3b9f8ce167df6209ae\",\n        \"signed\": \"288515fa7259f1eb587fe8a2c403434c46f8d7e75b6d22bb3896566c017d09b698c2c807799c2f65f9cdb4eb58151ccfc48d108061a6b3148432b2bfc1cdab0550b2f05342418046d16a30be4fc62b67daf6c18d2a74242b7cb55ba90ad20b6cafdd60155737c29de48aa5d799fe5495fe59df5a9b8c0a8e5418904763fbad83ea6986651bac31117939cef4e0c79930d52dfd7db43c31addae3cf93e3efc5a916efd0d65fdc30909fa356ccbc5247d7aaa067131b6b4820fd02f8e395f5a9704c9bdd7560a611d62559a8dfe1d2859c52486cc11ed3331992488f417520d920dc73a32d4f08110082500f5a962a306932c6a7802955cedad7abf53b0f19fe4794a31d6b855380284306ccff71a4007859a2328bb19024c43e10d77064d866d9622d142c27354b84ac3b4f8232f7a2f8af6409d5cc757a18ef813dfaf4b9bc040cb006d77f143641aa2036ac7bc928dc96585d9e36c7bc9c564d25f1c2cc0beab9d5f207e84b215f1e7aa6fc328237b79c39923a4e09c7c73dc6b24b1416294d798a4ed5f758336d915a870a7d6b7592b5b88aace2dc5f267bdb491141cbbae2a677407cc0955f961962599304ba0b839671a5c000e920108a05298087e49770aeeeaab3632724cb0fc2285796dc414814fda78a54e67f00a02f77d3ccde1ed9d7b1def14ea1f61910bdf30a1196fc6351b62254d6445e6c90445b16efafe289a2784b92e42b78a4a900c35f55630bbb7762ff9eb7fef7d04c90b9571c4fc760a410dbfc252991d0ba27f2d414fe64eefdff4abc18817c9706c631bfa203821d3b92cb338baaf5d1232b462647954d0902462fb1696e991f07fa9c3dbcf2872960831b4ded92a421cf21b753165ff309efe2ef5438c01270d10c6a03d34f71ebc2dab1da90daa357984d2462bcb35ee3de55c3a55f8b98aec2114f74c84341a64127863c120b5ecad9e329a5756ae4a2555d8492cda835225a8deb3f9c1558f0d425bc172ff7640cc79d97800416fd6294cccc70cd1cf5b6a8e2aa07289bd522bf99dc96c36bfee80e846f5dd746dd4c5003e4bf7d29efeea7508a0161236882c9a82a56aa2c2574669652c630923ab470ddb95d456f7b8e8f07599ba0d1d38bc7f8176e3fdf0209bd6f75d4cc11803afb1856cbc0e91c73730e4fb98f3c948a87d5a7edcc0a6a8ac810ea3eaa6e063cec5f5566cd6dedc537db6d686b8021f6ea825ad7475ec7f1c5dbde45d3ff4b5ee51c0d04f1d74018eb91e5040d01c8b71a4aabbde6094d4afeccb18dfcded73ea75e3b9f8ce167df6209ae\",\n        \"signature\": \"288515fa7259f1eb587fe8a2c403434c46f8d7e75b6d22bb3896566c017d09b698c2c807799c2f65f9cdb4eb58151ccfc48d108061a6b3148432b2bfc1cdab05\"\n    },\n    {\n        \"secret_key\": \"d5cac85521af781f3d5f66862a04b087d0ccdcac926cfe9e747be8d5c2633f78\",\n        \"public_key\": \"100dcc53039bf05ea0a9f5888212693d4f9e0e752595bbcd020610e0ae213596\",\n        \"message\": \"d5e7dd594909375a4be08e74825d598d535bf46ec084de52b57391c127eff5224ab2d194dfb26633478d02fbda74d1dc5821f791bf962d8dad9e4ef24224891907b0189cccc8b133d3aa2078926daef2898c19c2e0bfe02041a904b9f04be7cb50aed0d962d1add20b40a88ab7abad626cf4da0a78f9f53685501fdfa58543ddf2ea0eea69e7ba160f8a177a25fc21e8a29c661633e30e523b0ec01b2aeee2d426e4aead457488108fe5f569cf6e2fdb68c28f2b3052823577cd934e7b062c8a3424cd4367fb315b744ca35255d7f1af4edc9bc9d8837123d97903b43df367c7d418c79347ffafe7c7b1724bba34ede8d3568db505983ead47f62b56e3618c11db8ff0bf492ac67597d2f96a6f420ff985341b786ad6ceaedd105d0d1563b2d53543d78e7256725d204e82ed3a2e6a6e83df61fc282a62ca06e62174b55bef40a0bdf8d23d1c330c71441485ee85e70ced121eac607f580678163e4bd75c6709ff3b41de80594b9e2f2aa278fefc21d73ee3f72854b958d9a8f63e3d70f7fead8c3dca8e71bf4b9c2a36f212b32eb3292e635580386559ee1a11df15293a0c21cd7360869846ba5b7ba85c994f5b2f9cc50e5eea8e4b3691d886062a18cfb182f1e8b611fe1bc263159cb8a086787c811bea4812530008c70ca0c47e64eb2fbad5b02727a66f2cdd6dde86f5d2a9645a1e9aa66ee0e15b97f5fd229596ee02e661cab9a54eee1b81f98fe256ed6c54feaaa0ba047eea353344f6e5c62be1e9d5c09a2a699411110c56d1949e90c07b1938ba9555ac1be8511b510218d7cde7e1d74a68afb642f81715fe9e6c96c50381ae5a9df306518785dc4dbc3a64f60f245c564b8029512f381b56ee787703426803c80ab1c311f477b891708b59fa748f32debf54d2413771978c265c9b87114adf25b8337aa93b0e632a5b6eda474bec16328159fbed067b00b87add61965492eccc6fd3461c1000e4037ab1e8ac89a8524f78ae09d308ea6c94ff883732b712eec0ef07718d33c011b9398f8cfea733075af331fb3f97cdc1e8c99f6a10725a68c5c58fdd8b0baa50227f34d73d23905203698eaff626654ce83d865108499be6861f6141bfa6219d7ab8b584519199f880cfa1b26d9194d301711c30fb446d6ea764a4310f70e4b859cf95fd44aaf8c1e240e80a71611dbcf52da58edc320311de388d5d9d769eb59be093\",\n        \"signed\": \"5dc03363414eeac0086fb6feba44217cef4c520db61926df680ca602dc11003ce6afbf3d13c8c5b05273d21415e67c14a2ee5d0b1d5352419ab9b39c003a510cd5e7dd594909375a4be08e74825d598d535bf46ec084de52b57391c127eff5224ab2d194dfb26633478d02fbda74d1dc5821f791bf962d8dad9e4ef24224891907b0189cccc8b133d3aa2078926daef2898c19c2e0bfe02041a904b9f04be7cb50aed0d962d1add20b40a88ab7abad626cf4da0a78f9f53685501fdfa58543ddf2ea0eea69e7ba160f8a177a25fc21e8a29c661633e30e523b0ec01b2aeee2d426e4aead457488108fe5f569cf6e2fdb68c28f2b3052823577cd934e7b062c8a3424cd4367fb315b744ca35255d7f1af4edc9bc9d8837123d97903b43df367c7d418c79347ffafe7c7b1724bba34ede8d3568db505983ead47f62b56e3618c11db8ff0bf492ac67597d2f96a6f420ff985341b786ad6ceaedd105d0d1563b2d53543d78e7256725d204e82ed3a2e6a6e83df61fc282a62ca06e62174b55bef40a0bdf8d23d1c330c71441485ee85e70ced121eac607f580678163e4bd75c6709ff3b41de80594b9e2f2aa278fefc21d73ee3f72854b958d9a8f63e3d70f7fead8c3dca8e71bf4b9c2a36f212b32eb3292e635580386559ee1a11df15293a0c21cd7360869846ba5b7ba85c994f5b2f9cc50e5eea8e4b3691d886062a18cfb182f1e8b611fe1bc263159cb8a086787c811bea4812530008c70ca0c47e64eb2fbad5b02727a66f2cdd6dde86f5d2a9645a1e9aa66ee0e15b97f5fd229596ee02e661cab9a54eee1b81f98fe256ed6c54feaaa0ba047eea353344f6e5c62be1e9d5c09a2a699411110c56d1949e90c07b1938ba9555ac1be8511b510218d7cde7e1d74a68afb642f81715fe9e6c96c50381ae5a9df306518785dc4dbc3a64f60f245c564b8029512f381b56ee787703426803c80ab1c311f477b891708b59fa748f32debf54d2413771978c265c9b87114adf25b8337aa93b0e632a5b6eda474bec16328159fbed067b00b87add61965492eccc6fd3461c1000e4037ab1e8ac89a8524f78ae09d308ea6c94ff883732b712eec0ef07718d33c011b9398f8cfea733075af331fb3f97cdc1e8c99f6a10725a68c5c58fdd8b0baa50227f34d73d23905203698eaff626654ce83d865108499be6861f6141bfa6219d7ab8b584519199f880cfa1b26d9194d301711c30fb446d6ea764a4310f70e4b859cf95fd44aaf8c1e240e80a71611dbcf52da58edc320311de388d5d9d769eb59be093\",\n        \"signature\": \"5dc03363414eeac0086fb6feba44217cef4c520db61926df680ca602dc11003ce6afbf3d13c8c5b05273d21415e67c14a2ee5d0b1d5352419ab9b39c003a510c\"\n    },\n    {\n        \"secret_key\": \"159a9eddea5de63403987b5670db6fac98ffe5ec3a6cf01516ee2c70ce3b3be0\",\n        \"public_key\": \"f61f4a04a5a12ccaecfaf44c1c9c1888475a2c89fb02f26bb81ab5f78f4ce3a8\",\n        \"message\": \"d195e5900dd3931481bc012e77bf060aaf31cccb0fe1a6c40eaf286a6166a166b1ea37053426284b920c67fee1d4b9d86fb861cc6edd34e10c52233734d9cd92f5dbf433512ed255ac6b26e56f5c664bccb260692cf49d08363ee94e336acc489600a6aa512a040f10ebf18f7d2cbee9cad14c4ff87377a3263419d8297529401f15337a4c4d2325ed7def763a0d479caa408266834da242f3a16b79a45866b9d9d71a4829317674cff7ae6c8c587ba4d4980e818613d3ad82507a7ab032bbf99c5e9b640371bb41b91e965dc31e8c7d4b3bafd49570527faaa87abbf6416c47b1b1b09d3401253126cb246ae45acf5f100bb1f92f11a5c6c937e0588d8b146b3e4d3c7e5bf57484e984fe3afc4772f24ebf894cdb39837fbd469a921a96ac5af5e070f6c9624c588e9d4fe6ddfeed1f8fe20eb9c460ce6ee38bf471dd56dcf2e3ee998b8e7fdcf612e78a2e7c7173c0160982bedecc2c621e5f6611b4ef2102e32e7c29803a7e25fee151243158a76ee5d8c1bb2e7d8c88871ba433c5e541c2602693d90110be795b523a8fadb605d8e3d7e493fe245d9cc5320d32b85d6135a44b1168729414c2ca21560fb4feecdeef0cf7d8e071274e8856c004033e80013c73af7177c3197816a5032d9059b1b6e4152c386192dd54b90f9d308be98ed7d0ca9d12e8aaf6f9d869386aa9dbb01593d37e72f090124d3455298e9b4c9ec3cae73bb8ee41eb63e38c56133efdbaf449b84e1e491e496f1c70a44d069986ba8818422069061bb6ebcb7b2054e63df381ba03c6a7674abd61050d693d41bfe3ca5046c65ffb06a0749809e58d4c93a9ff69ed30950bde1f99216fff299f22f16b07c254c265ae0b12e313163ccdf5036d49055f9a9667b0b71292bc3b6260cb87568fd267170bc940c33329d729c9e32d0f9180b134bff8ae93b1bfebfa3842fef20bc04a297b00a84a0f428d5f42fab86142996d4ad9efabc49852f8812f3bfb5e57539e2186eb8ae229580bc60448acdef5723c881588b53789f05b91e02289223252d753f79813779ace705e04aed15265d3bdf2a2e4b15654770a275854e64cf44390607a45d7bba9af3e1a2e283067fcd6e633aa2d2403bd81f7c792765510b598412f6bda07b2a945b9f6d46ab2f7c320075bc6b60a80daa44af391f4cd562131bbdd407d66f8db1259bd76fa7e4d5264e145546c942dfe9007\",\n        \"signed\": \"0543712cefa29a220d90f81baa4e4cf77ac65208b2d5ce9fd17ce214ad4a937b7fc5c786413b58051cca3bb8b2eb55657d89572bc50ea2e5ecdc555088491603d195e5900dd3931481bc012e77bf060aaf31cccb0fe1a6c40eaf286a6166a166b1ea37053426284b920c67fee1d4b9d86fb861cc6edd34e10c52233734d9cd92f5dbf433512ed255ac6b26e56f5c664bccb260692cf49d08363ee94e336acc489600a6aa512a040f10ebf18f7d2cbee9cad14c4ff87377a3263419d8297529401f15337a4c4d2325ed7def763a0d479caa408266834da242f3a16b79a45866b9d9d71a4829317674cff7ae6c8c587ba4d4980e818613d3ad82507a7ab032bbf99c5e9b640371bb41b91e965dc31e8c7d4b3bafd49570527faaa87abbf6416c47b1b1b09d3401253126cb246ae45acf5f100bb1f92f11a5c6c937e0588d8b146b3e4d3c7e5bf57484e984fe3afc4772f24ebf894cdb39837fbd469a921a96ac5af5e070f6c9624c588e9d4fe6ddfeed1f8fe20eb9c460ce6ee38bf471dd56dcf2e3ee998b8e7fdcf612e78a2e7c7173c0160982bedecc2c621e5f6611b4ef2102e32e7c29803a7e25fee151243158a76ee5d8c1bb2e7d8c88871ba433c5e541c2602693d90110be795b523a8fadb605d8e3d7e493fe245d9cc5320d32b85d6135a44b1168729414c2ca21560fb4feecdeef0cf7d8e071274e8856c004033e80013c73af7177c3197816a5032d9059b1b6e4152c386192dd54b90f9d308be98ed7d0ca9d12e8aaf6f9d869386aa9dbb01593d37e72f090124d3455298e9b4c9ec3cae73bb8ee41eb63e38c56133efdbaf449b84e1e491e496f1c70a44d069986ba8818422069061bb6ebcb7b2054e63df381ba03c6a7674abd61050d693d41bfe3ca5046c65ffb06a0749809e58d4c93a9ff69ed30950bde1f99216fff299f22f16b07c254c265ae0b12e313163ccdf5036d49055f9a9667b0b71292bc3b6260cb87568fd267170bc940c33329d729c9e32d0f9180b134bff8ae93b1bfebfa3842fef20bc04a297b00a84a0f428d5f42fab86142996d4ad9efabc49852f8812f3bfb5e57539e2186eb8ae229580bc60448acdef5723c881588b53789f05b91e02289223252d753f79813779ace705e04aed15265d3bdf2a2e4b15654770a275854e64cf44390607a45d7bba9af3e1a2e283067fcd6e633aa2d2403bd81f7c792765510b598412f6bda07b2a945b9f6d46ab2f7c320075bc6b60a80daa44af391f4cd562131bbdd407d66f8db1259bd76fa7e4d5264e145546c942dfe9007\",\n        \"signature\": \"0543712cefa29a220d90f81baa4e4cf77ac65208b2d5ce9fd17ce214ad4a937b7fc5c786413b58051cca3bb8b2eb55657d89572bc50ea2e5ecdc555088491603\"\n    },\n    {\n        \"secret_key\": \"eda0feac0f2afe0174491552487f3962171332b822dc3da426f9a5f62bef7b8d\",\n        \"public_key\": \"eff27cb51f4d39c242f323019a1234818ef2e4cd1bdabc0f2d8d213458dc471a\",\n        \"message\": \"901119da4ed181aa9e11170b20626e00abf0b548245e3debf94bf5ed50aeefe942b402cc9948947852dedf2b5304017665749cd47c21fc652ee995679ff931e30e94af98b4a98fd44e849e98470fe0a76ce80c61f83fb4e85ba523ee3fd25db000053b49d0930e3b079e866e153f7d86367f23a4c4abc63b3075461e90e4fd896da0492e27d714941e967f52c93ffaec44803f57877d866eb5f8c5281785aa4826792e3964c66590821eea66752074264018a571f5b013b38e152c95c0248ae6036822a67afc9e02694573152b864c56c2f730a08210f85ec46f984a643d516a15fcfaa84840f512047d110e0718d293955f0158257fba0d78eb7df2f0b77e6eeb76db5e71707310e827361cd4e119740e63922db42c2ceb5ee175d50decc7b749fd2325bce1e6a8f710ffcc1e1c9b33c380e52a64daa9585fabe406d9cf24488fe26f3a495fb0ab50e1e2bad82381aa22431099cc8a569813d79c9d78569c0d95da9aad2bfb57758d52a3752752e023d651c9cb66a412a5c80f6ba54793f7ec87b4c598fed2ce24abd7608708895c46727359ffeca6d6c62e10a678caa718b4cd263292cfef535b9fbe2756b7396d697b3146c551e6aac1f5f1c24be9b67a1e2a2aff745301ba6a212217c53d681681bbb401bf4a43656f5d15cde969c1780099a33237eb19a3b8585d6b5dea2fb577845f25ee2a82ccf4b28502f90fe80b8cdcdf2ccf93c434c0e6aa5d8752a44343c2b18d20fe4004c47038659356f87abed5445034d8e2d3d14768f5ef312cf102a9884683bcc0cd8a71e3ec36fbb6334a1bbaed5d2bf10416d82bd6530475380ab6e2577bbc69cebda75faf02ad827b54518213206fd4cd66f252b234aca9eede7e3eeb815ddcd8d519c5d7f5d9d1fb9ca0fa4467990095fa46220c20a2071dfcaad5f024dae3416f7c492d757488c49a2e4df483bc9b80098e0d5d683facb8c960829dff09b303369d46cb57331ff21791ee25d6be7dec7ebaf1b32479a7f514dc647105c944c36f7dbf0a5b589128dbaaa42171d642f25a981ce1f8379f91690b36af774648d5624c08dbd0a90f708716dfab2024dae865b9c49ab27473826cd4a010bfdb52011d8c7cb3f421ca8ca3cd0486889188e67df00fb8c2a643e7adb2f8279f763e5b9a81b6dfc3f721fc5f6849f66736788cc557c4ebc6fc68d6f6ac77bedda8acb362243bda74e7b2\",\n        \"signed\": \"6cbc7e6f5e12145b01687ad9ca6bf6e47f9417c2cefad3fbd68fd65dd74faa9750cba992de4cebcfcd35808cbb3ff12c8d930799af36efe7976bf2fea79e3e0e901119da4ed181aa9e11170b20626e00abf0b548245e3debf94bf5ed50aeefe942b402cc9948947852dedf2b5304017665749cd47c21fc652ee995679ff931e30e94af98b4a98fd44e849e98470fe0a76ce80c61f83fb4e85ba523ee3fd25db000053b49d0930e3b079e866e153f7d86367f23a4c4abc63b3075461e90e4fd896da0492e27d714941e967f52c93ffaec44803f57877d866eb5f8c5281785aa4826792e3964c66590821eea66752074264018a571f5b013b38e152c95c0248ae6036822a67afc9e02694573152b864c56c2f730a08210f85ec46f984a643d516a15fcfaa84840f512047d110e0718d293955f0158257fba0d78eb7df2f0b77e6eeb76db5e71707310e827361cd4e119740e63922db42c2ceb5ee175d50decc7b749fd2325bce1e6a8f710ffcc1e1c9b33c380e52a64daa9585fabe406d9cf24488fe26f3a495fb0ab50e1e2bad82381aa22431099cc8a569813d79c9d78569c0d95da9aad2bfb57758d52a3752752e023d651c9cb66a412a5c80f6ba54793f7ec87b4c598fed2ce24abd7608708895c46727359ffeca6d6c62e10a678caa718b4cd263292cfef535b9fbe2756b7396d697b3146c551e6aac1f5f1c24be9b67a1e2a2aff745301ba6a212217c53d681681bbb401bf4a43656f5d15cde969c1780099a33237eb19a3b8585d6b5dea2fb577845f25ee2a82ccf4b28502f90fe80b8cdcdf2ccf93c434c0e6aa5d8752a44343c2b18d20fe4004c47038659356f87abed5445034d8e2d3d14768f5ef312cf102a9884683bcc0cd8a71e3ec36fbb6334a1bbaed5d2bf10416d82bd6530475380ab6e2577bbc69cebda75faf02ad827b54518213206fd4cd66f252b234aca9eede7e3eeb815ddcd8d519c5d7f5d9d1fb9ca0fa4467990095fa46220c20a2071dfcaad5f024dae3416f7c492d757488c49a2e4df483bc9b80098e0d5d683facb8c960829dff09b303369d46cb57331ff21791ee25d6be7dec7ebaf1b32479a7f514dc647105c944c36f7dbf0a5b589128dbaaa42171d642f25a981ce1f8379f91690b36af774648d5624c08dbd0a90f708716dfab2024dae865b9c49ab27473826cd4a010bfdb52011d8c7cb3f421ca8ca3cd0486889188e67df00fb8c2a643e7adb2f8279f763e5b9a81b6dfc3f721fc5f6849f66736788cc557c4ebc6fc68d6f6ac77bedda8acb362243bda74e7b2\",\n        \"signature\": \"6cbc7e6f5e12145b01687ad9ca6bf6e47f9417c2cefad3fbd68fd65dd74faa9750cba992de4cebcfcd35808cbb3ff12c8d930799af36efe7976bf2fea79e3e0e\"\n    },\n    {\n        \"secret_key\": \"ec059fc6be983c27eca93ddcdcb53af7286255da91e2a56a684f641ec2d09d6e\",\n        \"public_key\": \"ffc6cb751c70071b65ec2ac6b45fd1d55fe836965f80b3e7c784fc704acbdf69\",\n        \"message\": \"d1ac6325a4e690fa79536883d5c20eacb7d964c0178f742c2b23727deb62645af7c81922a0e72e5e30b5839a2ed5e567ec31ce224115b82d2bf251b7393f01b0d03a602bc120ae62af7fbc379dfcf95bbbba984aaba34fe212ac99003328b832c3532d42eee1e1874dc22ad67db6c91dbbfb2b45785dbcd39917d36fb48c1b5d6f38bdda5d28fbba64175575afea46c8ed6757ff30164e0df2e72176e8b6c9db5b5ef390b72f2d4d94e3b66f0d44a7e0f06e89debcdf1363c0e75d50db5bb70190d19f66a39c6f7dba70dfcd4a9fed02c2f1d067e7c788c58fdb3e17a2377ce486ec6582f3ba997bb5f70cd621002956f5131aa3a1617c0cebccd9391de1307c85970a8bc155f519872668450c91488689f53c2c1a7ed53f388cb13a2c3896fe5b7d3a0dc1683f27664c8beaea680c8cc54a90e4c6f99fbf05f2c22df60de9aec80c79b7d66207050667b452d7857f9a8ca723280dac7992e2079267ec3ad911404642c4e326bfb96b43c89434ba4bc78c252f4d4ca8d13a8874c6fc8252ea0b56c6bc786847d4318306e1c652c452585eefd0bd9dd3c148a73ba86eedea945f016713ed7df085d0066689e792dacb2bfc1eb5c824372a26c5e944aa7444ac9773d4a1921e49bdd4f8f6d788c263fee04c7b444c5305edb633e1ffe0ba4ea8da011a62f2bbfef4b895ad3f224c3ba3bff0c95d75750c9bcc66ff8a20b6c24bde7581a7ec3866f8716f781f46dcad45a9ebcb6ed46953368397011735d4b52d00e8db397995dbdb3d4f4254687f04688a268c305b2b1f622cf51b174775bad7f6674adc2e58e05cce865f12d7569c8e9b35bcdf3ccce6330d08ce5340a7c630f27a6c8086b5146b292fcbf50ff6aaaef8848a707b2543c618d17bd976c240bc79d33e004e4953482915e7e6ef94964bdea4e02dd7c2f475235f2b99e43229c9ac3aba0db59ac2da03a9ee4f37dbf247a33e6dfe5be7c7f82584f04a46d49f6621da31b91ac3daa4d68d48a56659b448c0ed365cb4aa0cfd908853df5bbfa88e60e10a5a002c32ab3333f2c39bbf3ee01a4aa60d2d01423e6097dc54305f81a2d93e2f6b4e8b351971cbf2457dc76e1fb89293384798ef28234e9b1a47dedc2336f86b8e13c4aef790f5a11239c747d9d865c9a15adeb071070267e5346256648adc0fa4dbdfd787ca1465fc240a324c3caf2931da41499e275fd4b35f6d08db\",\n        \"signed\": \"a7b88e5abf132824bdde77c5f8df94ab26481f6bee660ea162247082a250d390c71d320ad060d8ef341fb69a483294f0d6de726f0c862fa37ea4bc6dab521509d1ac6325a4e690fa79536883d5c20eacb7d964c0178f742c2b23727deb62645af7c81922a0e72e5e30b5839a2ed5e567ec31ce224115b82d2bf251b7393f01b0d03a602bc120ae62af7fbc379dfcf95bbbba984aaba34fe212ac99003328b832c3532d42eee1e1874dc22ad67db6c91dbbfb2b45785dbcd39917d36fb48c1b5d6f38bdda5d28fbba64175575afea46c8ed6757ff30164e0df2e72176e8b6c9db5b5ef390b72f2d4d94e3b66f0d44a7e0f06e89debcdf1363c0e75d50db5bb70190d19f66a39c6f7dba70dfcd4a9fed02c2f1d067e7c788c58fdb3e17a2377ce486ec6582f3ba997bb5f70cd621002956f5131aa3a1617c0cebccd9391de1307c85970a8bc155f519872668450c91488689f53c2c1a7ed53f388cb13a2c3896fe5b7d3a0dc1683f27664c8beaea680c8cc54a90e4c6f99fbf05f2c22df60de9aec80c79b7d66207050667b452d7857f9a8ca723280dac7992e2079267ec3ad911404642c4e326bfb96b43c89434ba4bc78c252f4d4ca8d13a8874c6fc8252ea0b56c6bc786847d4318306e1c652c452585eefd0bd9dd3c148a73ba86eedea945f016713ed7df085d0066689e792dacb2bfc1eb5c824372a26c5e944aa7444ac9773d4a1921e49bdd4f8f6d788c263fee04c7b444c5305edb633e1ffe0ba4ea8da011a62f2bbfef4b895ad3f224c3ba3bff0c95d75750c9bcc66ff8a20b6c24bde7581a7ec3866f8716f781f46dcad45a9ebcb6ed46953368397011735d4b52d00e8db397995dbdb3d4f4254687f04688a268c305b2b1f622cf51b174775bad7f6674adc2e58e05cce865f12d7569c8e9b35bcdf3ccce6330d08ce5340a7c630f27a6c8086b5146b292fcbf50ff6aaaef8848a707b2543c618d17bd976c240bc79d33e004e4953482915e7e6ef94964bdea4e02dd7c2f475235f2b99e43229c9ac3aba0db59ac2da03a9ee4f37dbf247a33e6dfe5be7c7f82584f04a46d49f6621da31b91ac3daa4d68d48a56659b448c0ed365cb4aa0cfd908853df5bbfa88e60e10a5a002c32ab3333f2c39bbf3ee01a4aa60d2d01423e6097dc54305f81a2d93e2f6b4e8b351971cbf2457dc76e1fb89293384798ef28234e9b1a47dedc2336f86b8e13c4aef790f5a11239c747d9d865c9a15adeb071070267e5346256648adc0fa4dbdfd787ca1465fc240a324c3caf2931da41499e275fd4b35f6d08db\",\n        \"signature\": \"a7b88e5abf132824bdde77c5f8df94ab26481f6bee660ea162247082a250d390c71d320ad060d8ef341fb69a483294f0d6de726f0c862fa37ea4bc6dab521509\"\n    },\n    {\n        \"secret_key\": \"f16abdbcc0bcc61a1aee3abd8767ab52e5f79999bb77a3976cbc82670dfd2f73\",\n        \"public_key\": \"10f451719db0fd21376e228a41c3035c8c2bc42e5aaa926fe608878dbb0dc7ab\",\n        \"message\": \"bfacd7dd4eea467dcce404f4a3520a45b94ebaa622197d02d61529d2b3bf273c4ee1fb95a180c8f87de190a2e5ea70b84ae1eb6fd4447d8a3a8ded10f6ede24f0eb92bd30bc65d4871e8f5da08cbe8cd3c0ac64fd5a57a6b064a89d5159b42f8b3e5a1838c9cb19d88106c0773a275cd2a1d609930bf6b30aeca62b97e319bbfa934f4d0a1e6ac80baebcba2d8ea4bed9ca8562b4acb56979bf885324ac40ab4a50bfb9f349049fc75a0e03de4cc43eae3c6a6cffb5f6ae6c94504415e6c7ed3045a932f47fd20b9f3483a77b6d449d8dfd4a638dbf56f03f0f031879059b2fb49767943f46b3872e2de567d5fef80b02925e9863e0f1d31a80f4e6451c325694b80cf1f1918c6e498878edc47c4530cac466f1a294d55df09af4fdc8072adb1bf26ca8c92f912a2b9febc8b97b58c1e9d32c780323052972b6fbd53304c05193caeb67c5bd3e67479725d297dffb06890abf8cd9e42458e168a6118f905b1d53486016f85dcd98dd339e3460533d0b8a49fae6dc1a071725e6ae5f294479ee3bdcaeb74061841fb2608e88a49fd0f3895b18f85b90f7241dd1387710053faa62bae75e9ae39369c1c02de5d19242efa16e11d44a4ba5778ce7722a91cec0bc0a08c069bdfa130d1c6c4b56c6e93542403ccf27684def57def26df86ced571282dc960974618f0a74a0cde35b653cc6e7730431b825ffb9b8aaab3c7a397c992bc2fa23270fb11ee431afd5f9a644483011173993f19485dd3cbdd187bd3d995ebf0031b1b0de4a8de9c14eb6f780e36b8925756b97906a1969d85e967d880e6e7dda42fd3c30019f11d7081071eee6626422836bbed27d46dd0df1feb6610dc859f513c0bc653d70220fe048d2e97c2e06af530e11bdc7029bccc5c92edecef5e4a2e0be2d251f4415dca3e55b3a850f2630b879e4e036ce8633bf20920b68094215929accc7be40c5778bc554e6edd7e54c9e145b2ee07b65d061c11de0e83f381ce4f57c6483f51069363511074c7a577353b45c6eb71199dce5059fd2c4611b054238aaadf2b6ba534bfffc2722ae3e31ff79ae2ebca99cc3507f8a033cf4fea70c52f7db5de442b42b8d41e99012e42ca0e85a9fb6d4f165b330de6383c5726efca2fe971340002f562dc6cb8f2faf0665725e097799d096091864d66a950a5790953ee16b9ea582009218708c4accd81381358a2c689a041d02d786121\",\n        \"signed\": \"33d805290869b8e04ff089faa2d1fab83743bada68ade5b38ae5f0cc58c3374eba43943c1f5110678eb39b4658611822a26d35ffe19e9cfcb9ba9589e4ec3105bfacd7dd4eea467dcce404f4a3520a45b94ebaa622197d02d61529d2b3bf273c4ee1fb95a180c8f87de190a2e5ea70b84ae1eb6fd4447d8a3a8ded10f6ede24f0eb92bd30bc65d4871e8f5da08cbe8cd3c0ac64fd5a57a6b064a89d5159b42f8b3e5a1838c9cb19d88106c0773a275cd2a1d609930bf6b30aeca62b97e319bbfa934f4d0a1e6ac80baebcba2d8ea4bed9ca8562b4acb56979bf885324ac40ab4a50bfb9f349049fc75a0e03de4cc43eae3c6a6cffb5f6ae6c94504415e6c7ed3045a932f47fd20b9f3483a77b6d449d8dfd4a638dbf56f03f0f031879059b2fb49767943f46b3872e2de567d5fef80b02925e9863e0f1d31a80f4e6451c325694b80cf1f1918c6e498878edc47c4530cac466f1a294d55df09af4fdc8072adb1bf26ca8c92f912a2b9febc8b97b58c1e9d32c780323052972b6fbd53304c05193caeb67c5bd3e67479725d297dffb06890abf8cd9e42458e168a6118f905b1d53486016f85dcd98dd339e3460533d0b8a49fae6dc1a071725e6ae5f294479ee3bdcaeb74061841fb2608e88a49fd0f3895b18f85b90f7241dd1387710053faa62bae75e9ae39369c1c02de5d19242efa16e11d44a4ba5778ce7722a91cec0bc0a08c069bdfa130d1c6c4b56c6e93542403ccf27684def57def26df86ced571282dc960974618f0a74a0cde35b653cc6e7730431b825ffb9b8aaab3c7a397c992bc2fa23270fb11ee431afd5f9a644483011173993f19485dd3cbdd187bd3d995ebf0031b1b0de4a8de9c14eb6f780e36b8925756b97906a1969d85e967d880e6e7dda42fd3c30019f11d7081071eee6626422836bbed27d46dd0df1feb6610dc859f513c0bc653d70220fe048d2e97c2e06af530e11bdc7029bccc5c92edecef5e4a2e0be2d251f4415dca3e55b3a850f2630b879e4e036ce8633bf20920b68094215929accc7be40c5778bc554e6edd7e54c9e145b2ee07b65d061c11de0e83f381ce4f57c6483f51069363511074c7a577353b45c6eb71199dce5059fd2c4611b054238aaadf2b6ba534bfffc2722ae3e31ff79ae2ebca99cc3507f8a033cf4fea70c52f7db5de442b42b8d41e99012e42ca0e85a9fb6d4f165b330de6383c5726efca2fe971340002f562dc6cb8f2faf0665725e097799d096091864d66a950a5790953ee16b9ea582009218708c4accd81381358a2c689a041d02d786121\",\n        \"signature\": \"33d805290869b8e04ff089faa2d1fab83743bada68ade5b38ae5f0cc58c3374eba43943c1f5110678eb39b4658611822a26d35ffe19e9cfcb9ba9589e4ec3105\"\n    },\n    {\n        \"secret_key\": \"be79d1aeea86e86f398137e62ffd79e50eff9f313f25192f89e52f0b4bbd5d32\",\n        \"public_key\": \"187dac855ca442fd9a3ddc3289c24eb2d26f7a40fb29d8e74431b25022c3a0cc\",\n        \"message\": \"6d632a7d3c9be53649d0d1a5eedf519a413b13ac64e9ad854dfa04f2e17329d822be573d9e35ac066f022213a344620bba289f5331695584d1343e815405aeabe3861d63b3a5b92b8cd8eeed2280222abde30a1bccd3f3e411aab922fa1baa097aa5c780d0eaef94ea10fe21f7d639b76d4788aeb5924a9d262dcbc5688a3e43544bec088ca2e0d06d77a71fb641d55226614452b1e0807a9fcd3ca69bf7f25d8041470ceb7b21ead03ec037a1629bd500aa233b59be44978210b6a366f223acfa0797954007b00efb4ffadb5fc92bdb37863e502d7d70681039edf33770df3d1de343dc35f226d5e73944ba0255e2a88ef6c41e472b214567c249594a50878b6731c1aeb5b10fa91fa76a37e1f9f1c00fdbfe3485ded54a009ab6133927115668b59f5115508da9370f6bc92a1185c0d5ca01d291e18c54acfaca738bd71968a342a0cba62e4bb104a5bb379fc83ee1820d1db980253d6cb383e95af15f53c85d175890dde5e4ed03d2d0135e3d60b18293f5b5641ef83c6ece3d52598fc6353686e6f7b09fdec1f6f153672d34b489b48a0db9e42ceda71755481c047016c22534e90c6d201ed7859602636ea77ae8c6734b7c4c5bd99579c508731c7246a29586e406e1d932f6713071d4bea63dc5e2a3761e16024d2c3284f709a1f2ba085ead3200c7046275cb96b61a60b5ac559bc488bd106467c3de50bf5d740d05c9cd701d65b7daea29e64dd5a97adb6b5c82cf7f23017aa7ca1ac9a39e5827eb47e20d359b67c7d4e1a8e3e27c52d33d9303a592623484d797b402cbb458d1ac2ea53e1c4f7abb70cc029554a234574def9bc3b0d3835dc314902e25abb22dfdeddc679a3cc8f07340b15f5762f4407f380342554ed0c62f73b61816ea8c529461e1bf0e9d1c2d5e4c5746336bc0e132873cde0dc2158b54fa1b678a006b4d95eda8a955714273b7cc5cf2add9094d46e49abc096a45f418e2edbe99dd852911688064df7cf061d07aeef42795690f48c9ba19565475d5468a9ef45d7bf75fd71182dd6e640138f182a6a0c6cbbd00c495c4389530ac8e67960eb5c5763f5484eab1c1ab850140da042ba47ed8528800d41787f075fe0d85501a7ab76635d03410d286c0e17db4023a76397468ccb091cc5ac1f6434587913eab922b50ca5567016ddea32fb53255be67f2dcf9ffa85d117f1a655fa70dd3a54cf991531f19130eaa\",\n        \"signed\": \"6dab593bb1d448c974a65c6a0b6fad22b4732632d00489176ef126aa590109e0a723a113107b53e17d690a0d40b0fa336cc87fd5fce8f541accec67f7d1ebc066d632a7d3c9be53649d0d1a5eedf519a413b13ac64e9ad854dfa04f2e17329d822be573d9e35ac066f022213a344620bba289f5331695584d1343e815405aeabe3861d63b3a5b92b8cd8eeed2280222abde30a1bccd3f3e411aab922fa1baa097aa5c780d0eaef94ea10fe21f7d639b76d4788aeb5924a9d262dcbc5688a3e43544bec088ca2e0d06d77a71fb641d55226614452b1e0807a9fcd3ca69bf7f25d8041470ceb7b21ead03ec037a1629bd500aa233b59be44978210b6a366f223acfa0797954007b00efb4ffadb5fc92bdb37863e502d7d70681039edf33770df3d1de343dc35f226d5e73944ba0255e2a88ef6c41e472b214567c249594a50878b6731c1aeb5b10fa91fa76a37e1f9f1c00fdbfe3485ded54a009ab6133927115668b59f5115508da9370f6bc92a1185c0d5ca01d291e18c54acfaca738bd71968a342a0cba62e4bb104a5bb379fc83ee1820d1db980253d6cb383e95af15f53c85d175890dde5e4ed03d2d0135e3d60b18293f5b5641ef83c6ece3d52598fc6353686e6f7b09fdec1f6f153672d34b489b48a0db9e42ceda71755481c047016c22534e90c6d201ed7859602636ea77ae8c6734b7c4c5bd99579c508731c7246a29586e406e1d932f6713071d4bea63dc5e2a3761e16024d2c3284f709a1f2ba085ead3200c7046275cb96b61a60b5ac559bc488bd106467c3de50bf5d740d05c9cd701d65b7daea29e64dd5a97adb6b5c82cf7f23017aa7ca1ac9a39e5827eb47e20d359b67c7d4e1a8e3e27c52d33d9303a592623484d797b402cbb458d1ac2ea53e1c4f7abb70cc029554a234574def9bc3b0d3835dc314902e25abb22dfdeddc679a3cc8f07340b15f5762f4407f380342554ed0c62f73b61816ea8c529461e1bf0e9d1c2d5e4c5746336bc0e132873cde0dc2158b54fa1b678a006b4d95eda8a955714273b7cc5cf2add9094d46e49abc096a45f418e2edbe99dd852911688064df7cf061d07aeef42795690f48c9ba19565475d5468a9ef45d7bf75fd71182dd6e640138f182a6a0c6cbbd00c495c4389530ac8e67960eb5c5763f5484eab1c1ab850140da042ba47ed8528800d41787f075fe0d85501a7ab76635d03410d286c0e17db4023a76397468ccb091cc5ac1f6434587913eab922b50ca5567016ddea32fb53255be67f2dcf9ffa85d117f1a655fa70dd3a54cf991531f19130eaa\",\n        \"signature\": \"6dab593bb1d448c974a65c6a0b6fad22b4732632d00489176ef126aa590109e0a723a113107b53e17d690a0d40b0fa336cc87fd5fce8f541accec67f7d1ebc06\"\n    },\n    {\n        \"secret_key\": \"269952172c3fa976defbf40bd6edd8f15cfd4be10c758e3741d74162d8ea229a\",\n        \"public_key\": \"4aea57c721e3dcca8239e9ad9b22c19bab8df72c88793b24d8dc47cf9740fcf8\",\n        \"message\": \"7ccb6a0570c533737b9a534a341a7a96dc76528b997a9b48e6e0fde10f474b27ec989912d176cab742d89a848b3666e9277d695b022fd53a9eb89e88c720399e24ed25db9eb35d6da009e9f024ef8e655165bdef1c0d797c74f019cd591a0442a12d1ca893836ca2628b33e854f3428eec4aa5ed84f4bdd2eef8b6d225caf9496df9edffd735ea54db1bdea883ad5d47eb0bd4a6653f0ab037f040a41517a7741f91e82fdb6fda04f0dfa1bcf8b9b37bf2bfbd87327a636f907fdf968d0189d1a11809c4230ba69d5cbd84f561bcac3ad002e558c5b9b097a01902f29ce3f1ec264153d668c78b845105b9cd2ef3c943531b75aa428f179e4b3418b1d5a4aa7ab1203efa495c8769628eb1063a937b73e4b5cd0cda33dab01a50c64febd975c57a1e841508e8606094d0824fdd96cc6cfa18fa8209b30f0a2a78eac9a767176f573e78c068809b199a69ac6d335d7c920999c40cbad87cf4cc7ca5c644291d75ad7a74bc1e6392d1ce311ecfd2ebc916e39eb6aa3e7d89fb805a27a55f178912b157bc01a055f67aefa78e55c806cbd9c01baf8ef92cad2260b4bb14cfe61782dee5c59972506941c462a4da7eb899531cf996bc98ba3629effe6fcd1706d1b4ee4f2a14e921bd408f30e12e73fb7aa860536b03e77ca937823281a16453fe827935943201e6ec143a67eefa4f94e9abf94f7e3d41b70a82be69ded8a53060c2305f42f62fe6a2f704b67a1e8fddc7d98ba7f3457119b311d449663ed9e320d618dc2368d4950875b9c38c5d8c03104e2e32c4325dedd2bc267e2accb0112018e9c5a8007ccab2f6d7c737792002acb730d72e9f730829ebc42ca564c1d9271bf1869c4d35835589b7431ef7a31a070060fe4a089fb11f2dd3dce65ae0fb45bc3a2860917d933ba2d090569ef5ed43bc2532db879e0f1f225eadcbef1c03d9ed78299e233e4cf07b064a7baac34c5a0c19fc3a5542089f70167be2f85b4a10e778525223be8ffd5cff9648b1005a098b4b3924398fb0bcabcc6edf30c061ece7aea35fe98a9203f8711369530feb5e67bb2d4f59d9c8bc993854dd4747cde399bd0e63740c1cc839ad0f098a38a80beadd648e1436deee60e931e68f52979ce49f301fe39afbb615352091c8b6585fe88447ed6e59a020b2bbe66a9423ae5228c203bfd4847b5181e2c3b4dad83a6d4fa76985eef76adde3b34edbdd28d6a0b4a4ee\",\n        \"signed\": \"3ac80d1e8f68b4058c3a04dad7187373959f26a27002496f8afaaccd8bea0901c54cab87b2a2302e1f3625c2b06c7ebcf3ce96de3afdf00f5194a35e0552c70e7ccb6a0570c533737b9a534a341a7a96dc76528b997a9b48e6e0fde10f474b27ec989912d176cab742d89a848b3666e9277d695b022fd53a9eb89e88c720399e24ed25db9eb35d6da009e9f024ef8e655165bdef1c0d797c74f019cd591a0442a12d1ca893836ca2628b33e854f3428eec4aa5ed84f4bdd2eef8b6d225caf9496df9edffd735ea54db1bdea883ad5d47eb0bd4a6653f0ab037f040a41517a7741f91e82fdb6fda04f0dfa1bcf8b9b37bf2bfbd87327a636f907fdf968d0189d1a11809c4230ba69d5cbd84f561bcac3ad002e558c5b9b097a01902f29ce3f1ec264153d668c78b845105b9cd2ef3c943531b75aa428f179e4b3418b1d5a4aa7ab1203efa495c8769628eb1063a937b73e4b5cd0cda33dab01a50c64febd975c57a1e841508e8606094d0824fdd96cc6cfa18fa8209b30f0a2a78eac9a767176f573e78c068809b199a69ac6d335d7c920999c40cbad87cf4cc7ca5c644291d75ad7a74bc1e6392d1ce311ecfd2ebc916e39eb6aa3e7d89fb805a27a55f178912b157bc01a055f67aefa78e55c806cbd9c01baf8ef92cad2260b4bb14cfe61782dee5c59972506941c462a4da7eb899531cf996bc98ba3629effe6fcd1706d1b4ee4f2a14e921bd408f30e12e73fb7aa860536b03e77ca937823281a16453fe827935943201e6ec143a67eefa4f94e9abf94f7e3d41b70a82be69ded8a53060c2305f42f62fe6a2f704b67a1e8fddc7d98ba7f3457119b311d449663ed9e320d618dc2368d4950875b9c38c5d8c03104e2e32c4325dedd2bc267e2accb0112018e9c5a8007ccab2f6d7c737792002acb730d72e9f730829ebc42ca564c1d9271bf1869c4d35835589b7431ef7a31a070060fe4a089fb11f2dd3dce65ae0fb45bc3a2860917d933ba2d090569ef5ed43bc2532db879e0f1f225eadcbef1c03d9ed78299e233e4cf07b064a7baac34c5a0c19fc3a5542089f70167be2f85b4a10e778525223be8ffd5cff9648b1005a098b4b3924398fb0bcabcc6edf30c061ece7aea35fe98a9203f8711369530feb5e67bb2d4f59d9c8bc993854dd4747cde399bd0e63740c1cc839ad0f098a38a80beadd648e1436deee60e931e68f52979ce49f301fe39afbb615352091c8b6585fe88447ed6e59a020b2bbe66a9423ae5228c203bfd4847b5181e2c3b4dad83a6d4fa76985eef76adde3b34edbdd28d6a0b4a4ee\",\n        \"signature\": \"3ac80d1e8f68b4058c3a04dad7187373959f26a27002496f8afaaccd8bea0901c54cab87b2a2302e1f3625c2b06c7ebcf3ce96de3afdf00f5194a35e0552c70e\"\n    },\n    {\n        \"secret_key\": \"cc3138e502a5ff6f80d246366e84d65c59f12d4f496397e6eb99b5267b8cbe2a\",\n        \"public_key\": \"9e2d3e88af7b52ddcf00e6d0c7759c1238b8fb3eb14421fe82c34833437835bd\",\n        \"message\": \"585ecf2f09eb923df20a8555642a2bc0b68c6a5fcfd6b8401c4a0cbabb4c6e6a206762b7a39f2c5455d7808ebfbed56d6760a431c7d20c2dc6ef1b73caa3c49488e30b1ca2520ad20b26a19700780e5ef3ce0144388d8407b6a70c1cda37db7f12091d892f2e91ad4078bb4db1762e46285a7b664b2ad3a34d26d8a94d64587a84527722ea83cb8aa88984e1489743b4214ea6041aa18e55200954efc7edb319df947efbfc6c8d0fea48a131613465d8f4c49498f2269145c6dae50478052598e1ca3be0e33611571fa384771eee402cc2b1d84836c8f1ad28f2ad23dee9ff1d7e1f2521635874115def4d93e89be76180bc55f761144360a8b222892d64d157ccb5d8f4855dca56701495a0e1002d340a4a46156b9b7fe06b7c0759e0b6df559b691ede78b55af64e7c8dd908b788dd6ba35a902c81dceb3788b615de225afa58a81181ab24a73705ee838b6e863fe1bcc26c1b943239230c27c6b397b23d13de6a02c97f3645da91d413f916473b018a61594b6f51cea44457da1e3dbbba6de16866657e92ef0202718a84ad0333e8336b052b004733e8e95ec13e5f91b3806a98d3db729fb735b8147c4a982a2d5b4efae9c09d0a9bf891cbbc3c8f531e76e4044ec91f4d7c5cf77310e2b2cde2e07ccf3e0a19dd6ae1b3fcb2df42186e9c72922d2d4ce51b306e81b16cfcf8f00d513fbd2c5239b45afc654f6fe21acb7e8a0c9aa87b0b605074df9576a6ddd900aca567617cb79656b3b5ecb9ff68b2f6241ed0d024ac27aa6eb486b69fdc0a0db92096abf86002dec7afd847a006a3f6955b49569053be9f1d0a49b793a5411e5916f418ecab953243553b66e6badc4e909be0ef5cc7c6d27199ec3f21423bc45773fb40b97b61185b57080e8f0b89a3ea57c8444ab27ecf7006a766047eeff54d8556cfed23def1da2cc8aebb48c94e779e8203ae2c902b51de0ede0456fb73fb4d5f514a4cebc47fec3f948469a545c6bc57b4138db34e7cc006de26ef507b54d28147567a8c29ac1ecef5bb84fb99aceb23a20294d74a85ae36b33450668a5c2609d3a93934586ff90c3b6d27329eeef3a754e9a9cbd5617ef3b09397bdc971370766589a12d890050d1651458b3fc533c843bffdf9754d932c4ed7611d4d27c32a087555b5eaa37ae90c4979ef54299c420ab5e29ae2845d4dcf2178920a865175fb9cc0e6b8c524b1ee495805d517bfe0\",\n        \"signed\": \"a2700e3895ed0cc2aaf012a40bc7bd0bd29dd79c69c0b4a6edd0530cf3e267c0f82dd84edaf1744dc411d62c0028715258822d7b63d39705612b3fad4b5efb04585ecf2f09eb923df20a8555642a2bc0b68c6a5fcfd6b8401c4a0cbabb4c6e6a206762b7a39f2c5455d7808ebfbed56d6760a431c7d20c2dc6ef1b73caa3c49488e30b1ca2520ad20b26a19700780e5ef3ce0144388d8407b6a70c1cda37db7f12091d892f2e91ad4078bb4db1762e46285a7b664b2ad3a34d26d8a94d64587a84527722ea83cb8aa88984e1489743b4214ea6041aa18e55200954efc7edb319df947efbfc6c8d0fea48a131613465d8f4c49498f2269145c6dae50478052598e1ca3be0e33611571fa384771eee402cc2b1d84836c8f1ad28f2ad23dee9ff1d7e1f2521635874115def4d93e89be76180bc55f761144360a8b222892d64d157ccb5d8f4855dca56701495a0e1002d340a4a46156b9b7fe06b7c0759e0b6df559b691ede78b55af64e7c8dd908b788dd6ba35a902c81dceb3788b615de225afa58a81181ab24a73705ee838b6e863fe1bcc26c1b943239230c27c6b397b23d13de6a02c97f3645da91d413f916473b018a61594b6f51cea44457da1e3dbbba6de16866657e92ef0202718a84ad0333e8336b052b004733e8e95ec13e5f91b3806a98d3db729fb735b8147c4a982a2d5b4efae9c09d0a9bf891cbbc3c8f531e76e4044ec91f4d7c5cf77310e2b2cde2e07ccf3e0a19dd6ae1b3fcb2df42186e9c72922d2d4ce51b306e81b16cfcf8f00d513fbd2c5239b45afc654f6fe21acb7e8a0c9aa87b0b605074df9576a6ddd900aca567617cb79656b3b5ecb9ff68b2f6241ed0d024ac27aa6eb486b69fdc0a0db92096abf86002dec7afd847a006a3f6955b49569053be9f1d0a49b793a5411e5916f418ecab953243553b66e6badc4e909be0ef5cc7c6d27199ec3f21423bc45773fb40b97b61185b57080e8f0b89a3ea57c8444ab27ecf7006a766047eeff54d8556cfed23def1da2cc8aebb48c94e779e8203ae2c902b51de0ede0456fb73fb4d5f514a4cebc47fec3f948469a545c6bc57b4138db34e7cc006de26ef507b54d28147567a8c29ac1ecef5bb84fb99aceb23a20294d74a85ae36b33450668a5c2609d3a93934586ff90c3b6d27329eeef3a754e9a9cbd5617ef3b09397bdc971370766589a12d890050d1651458b3fc533c843bffdf9754d932c4ed7611d4d27c32a087555b5eaa37ae90c4979ef54299c420ab5e29ae2845d4dcf2178920a865175fb9cc0e6b8c524b1ee495805d517bfe0\",\n        \"signature\": \"a2700e3895ed0cc2aaf012a40bc7bd0bd29dd79c69c0b4a6edd0530cf3e267c0f82dd84edaf1744dc411d62c0028715258822d7b63d39705612b3fad4b5efb04\"\n    },\n    {\n        \"secret_key\": \"5c692c681198b172df2fac2aec3fcf7015c2bb6830f2a98e30a396b64af4280e\",\n        \"public_key\": \"33b169d4ca271040926ea87835e5066f9f05782f087fca7a556f7bf4cba2e886\",\n        \"message\": \"b160ee3a93cf6bc3456e5bd0197c09aa76c2258052f9a34dbc2ed589f8dbe5ff9969a61cfe846b2f6739dc7d4a1496e9ad58605b5a2758ca078c55a9fc1c4eeb5491a84bfd468a2ceb141a773493a9b3ee828b5dde9c00c236ff0156e4e2e45fa07931da68bbd2030a881405c4f78728813a5e04812404c2a19c9b87b1cfe9af95e273ecf9c518c53935f842563b192fae12a73cef085fe19e899e5ba08979e311fb286fbfc7b248aabd40dc61610e1d4fc9806dd21292392db2db40426c5d196a489c5db77e3e9cf0bd041e3c23b5ba1db781a10790be1fe07a2b00ca3af89cbd46efce880e1ef28b0cd79d53b42cd80eaa137eff7df90bcbcf95c9858dc0ccc6d8ca8ae3547bdbf9ff9024f3cf170115eb28bf12b7d3b701460f48d1b4b23d7f6ff72ffdc9a6c52624d15312d7f19ddb6026a15eb54295d331fd79509103bc59a3b6e1ba7ac8c112e4de2817e51c1e16507ba66f2547bc899f69c1207ae5e37bdb0e161b15b612305bc0940f9d1b382a37ec2da639a6ecba1bcdfc51214c3223c11bbab79f3fae3d55e2d4be584fd7601e4e2e558b3be5707115a61f5a815ec24aac18093457bc46c05cfb7a3f2533eadadc9e6c1fe310779e697f683035ce57873df55d791f6d2fb0e2107e6866f839c3a126e9023865ced1bcf6779955af547e1d87eb32a9bf322857fd126b0cdc5d5e904eb76c6706e3c897aefd6e4756fb8aca8170ca5b39669089af1bb141a25d6b8b06034d8b11abf1ff8f8d43375846fa8fa8a34b5f264820744d31149b7d57326c59b1db74131678f634e7232ca5ea5188760a70dc35dc89f8e453b4c65b772c2b6b62768d8373236551baaf24d3c304c41b62c36e6a3383b3a163b73e78d8badb75741e5001d419d30e2ed77c3096e8d8df713b93762c9707bdd0f365a874b9da8ab710495dd56aea93bb77fb222635c63bce9f63af91fac89c66986b8e2176dd451d583394c1907cba1725f06d25d1d0912b3e5c6c7dcd34358fad59dbc6f6b1c2ef33d3ca82f43518fe4ff31378016e578a7bab0b77676ebae0d48d0889d69029d209f283ce8fe0ec23cd832adc12a9c3e3aec2d6036695556d9313f12a899dd59a66bef28ede175f8aaeeeb2942bb90892a04b440d04b66f5eeff61ada72790294ce55c86c6d92785ddd26c7a731603b069c603c92e4fe8ff782544c8e89b40b8b55f90e2a5e9a0f33c7fec77dad8152\",\n        \"signed\": \"ad8f379caf41f72dccadc3e915357ab0cd304e10f4120e0dbbfaac01bffaf2be893f70072dc964069181bec17fe0251055b21e23dee4363b27ef1fff67aafe06b160ee3a93cf6bc3456e5bd0197c09aa76c2258052f9a34dbc2ed589f8dbe5ff9969a61cfe846b2f6739dc7d4a1496e9ad58605b5a2758ca078c55a9fc1c4eeb5491a84bfd468a2ceb141a773493a9b3ee828b5dde9c00c236ff0156e4e2e45fa07931da68bbd2030a881405c4f78728813a5e04812404c2a19c9b87b1cfe9af95e273ecf9c518c53935f842563b192fae12a73cef085fe19e899e5ba08979e311fb286fbfc7b248aabd40dc61610e1d4fc9806dd21292392db2db40426c5d196a489c5db77e3e9cf0bd041e3c23b5ba1db781a10790be1fe07a2b00ca3af89cbd46efce880e1ef28b0cd79d53b42cd80eaa137eff7df90bcbcf95c9858dc0ccc6d8ca8ae3547bdbf9ff9024f3cf170115eb28bf12b7d3b701460f48d1b4b23d7f6ff72ffdc9a6c52624d15312d7f19ddb6026a15eb54295d331fd79509103bc59a3b6e1ba7ac8c112e4de2817e51c1e16507ba66f2547bc899f69c1207ae5e37bdb0e161b15b612305bc0940f9d1b382a37ec2da639a6ecba1bcdfc51214c3223c11bbab79f3fae3d55e2d4be584fd7601e4e2e558b3be5707115a61f5a815ec24aac18093457bc46c05cfb7a3f2533eadadc9e6c1fe310779e697f683035ce57873df55d791f6d2fb0e2107e6866f839c3a126e9023865ced1bcf6779955af547e1d87eb32a9bf322857fd126b0cdc5d5e904eb76c6706e3c897aefd6e4756fb8aca8170ca5b39669089af1bb141a25d6b8b06034d8b11abf1ff8f8d43375846fa8fa8a34b5f264820744d31149b7d57326c59b1db74131678f634e7232ca5ea5188760a70dc35dc89f8e453b4c65b772c2b6b62768d8373236551baaf24d3c304c41b62c36e6a3383b3a163b73e78d8badb75741e5001d419d30e2ed77c3096e8d8df713b93762c9707bdd0f365a874b9da8ab710495dd56aea93bb77fb222635c63bce9f63af91fac89c66986b8e2176dd451d583394c1907cba1725f06d25d1d0912b3e5c6c7dcd34358fad59dbc6f6b1c2ef33d3ca82f43518fe4ff31378016e578a7bab0b77676ebae0d48d0889d69029d209f283ce8fe0ec23cd832adc12a9c3e3aec2d6036695556d9313f12a899dd59a66bef28ede175f8aaeeeb2942bb90892a04b440d04b66f5eeff61ada72790294ce55c86c6d92785ddd26c7a731603b069c603c92e4fe8ff782544c8e89b40b8b55f90e2a5e9a0f33c7fec77dad8152\",\n        \"signature\": \"ad8f379caf41f72dccadc3e915357ab0cd304e10f4120e0dbbfaac01bffaf2be893f70072dc964069181bec17fe0251055b21e23dee4363b27ef1fff67aafe06\"\n    },\n    {\n        \"secret_key\": \"9d5f85d2e7dfd03bb689d900285fd4461538a5f2710a13ed21c775f6eff6b3ff\",\n        \"public_key\": \"b86797e4be0286ae39e44df0a00c016db4555ef86f2f05d0a3ed89d89a4c3e5e\",\n        \"message\": \"f70b5b053a4672512c24b3168392f6a17dd77d8689c21c86efc25829a1a04fab4f76c8521684d32010455907a26908677b40dc6947d654f2914c30ecee724fa68446b59d091e258fc862411c964d668def83034b627ed416dc190bb5a263a6ff8d559e13b8936225fb4dab4f7bda0468e547e708cb04cebe1e5cfc69f76a1d283f28168286f24ecea5535e4490a0c55567a7345ef953ce426b209a3de3df595e80ee61e572a278ab02219551b73da41984808285a83598a02d9b28671210004e31d8af9242c16f90d5ea8f63a1ff66cfe60ecbe537245fa12a9b154115295806ea2d11f3671782b9af4fa86a1288e123cfd2409a5dc98f41b8f6df299bbcc4bb6447dc03a6d60e9b2c5b8ffc40d983956be97768dd0612d47cbfa7571c9969856c152cd3b473ace0b8a144aac2095c0f72f1d3147152b908ef6626d5222819b20bb3350a46452f675490c2a82150eec40d75b66a325d6e929a905ade1e3160ab950181efc66e59230865d5e599698a8a3ff560c4c601a7a9a5da3b5d89bca93f7cf5bcf5bd5ecff8f1a185c8220e4c77821e62adf95a037f2df7cef43a4c60ac75801e9fccdc5b08eed328dd93100904115645ec1ee085cc778b0f4e46e17298984a702eceb3e15283d820004f74a079520d63a75fae33ec3f4b836469e1aa99ea244af1fb08b00a8c9dfd03308dfc20235ea9c8283f4da47cfbcdbd031a02d164160f2a58986700b19526d41e4d7fd458434d7264bc8eb642e6d8dd2759ce2b85c97b3702e70da71f18edc53e9140a645627e0278e8e70539037484dcd18c62fa330717d6148a0d623ff8b65ea8567ec7fa04c892e3a1ecee96e832f4155074c83cbc93e98cc67f1fa112aa06e9915fa4d2dea931551e7c623aa8a3a7619ea24ff914e264f31fc73dfa8c430ac46ce16dc968c5a4085d5c380d30cdc6f43dee806f38d1df420a065574144737056daa62f0c098c9c52fcc04cca642c45d687345a094613d4a3c6c8788bfa218538ad7ece1bdb6c93924eec4baaa3eb15dc1494d65ffa1a23ff8e985263408fb02bfe39a8c55b300b1a02ed36c6714dd5ab750d47f021f65e08c635f1d6b7baf396cb4f93d56c1ca461bb12e94de7e5d98659a8af0bf019fc42280e111e04800ff80e0c157150e165609454281b20007e3edfaa1ea854465547a006a4c3236411495da166098af2823a459cf100a1f3c92c6390c6066cdbf\",\n        \"signed\": \"176b9592f8c25135292add4daacc9c4faa21d4f49b278480c4e8881c01624df9a37e23e18e84ca32d0d8cb851054222f10a495419f197e7b3d18df0adfb1b307f70b5b053a4672512c24b3168392f6a17dd77d8689c21c86efc25829a1a04fab4f76c8521684d32010455907a26908677b40dc6947d654f2914c30ecee724fa68446b59d091e258fc862411c964d668def83034b627ed416dc190bb5a263a6ff8d559e13b8936225fb4dab4f7bda0468e547e708cb04cebe1e5cfc69f76a1d283f28168286f24ecea5535e4490a0c55567a7345ef953ce426b209a3de3df595e80ee61e572a278ab02219551b73da41984808285a83598a02d9b28671210004e31d8af9242c16f90d5ea8f63a1ff66cfe60ecbe537245fa12a9b154115295806ea2d11f3671782b9af4fa86a1288e123cfd2409a5dc98f41b8f6df299bbcc4bb6447dc03a6d60e9b2c5b8ffc40d983956be97768dd0612d47cbfa7571c9969856c152cd3b473ace0b8a144aac2095c0f72f1d3147152b908ef6626d5222819b20bb3350a46452f675490c2a82150eec40d75b66a325d6e929a905ade1e3160ab950181efc66e59230865d5e599698a8a3ff560c4c601a7a9a5da3b5d89bca93f7cf5bcf5bd5ecff8f1a185c8220e4c77821e62adf95a037f2df7cef43a4c60ac75801e9fccdc5b08eed328dd93100904115645ec1ee085cc778b0f4e46e17298984a702eceb3e15283d820004f74a079520d63a75fae33ec3f4b836469e1aa99ea244af1fb08b00a8c9dfd03308dfc20235ea9c8283f4da47cfbcdbd031a02d164160f2a58986700b19526d41e4d7fd458434d7264bc8eb642e6d8dd2759ce2b85c97b3702e70da71f18edc53e9140a645627e0278e8e70539037484dcd18c62fa330717d6148a0d623ff8b65ea8567ec7fa04c892e3a1ecee96e832f4155074c83cbc93e98cc67f1fa112aa06e9915fa4d2dea931551e7c623aa8a3a7619ea24ff914e264f31fc73dfa8c430ac46ce16dc968c5a4085d5c380d30cdc6f43dee806f38d1df420a065574144737056daa62f0c098c9c52fcc04cca642c45d687345a094613d4a3c6c8788bfa218538ad7ece1bdb6c93924eec4baaa3eb15dc1494d65ffa1a23ff8e985263408fb02bfe39a8c55b300b1a02ed36c6714dd5ab750d47f021f65e08c635f1d6b7baf396cb4f93d56c1ca461bb12e94de7e5d98659a8af0bf019fc42280e111e04800ff80e0c157150e165609454281b20007e3edfaa1ea854465547a006a4c3236411495da166098af2823a459cf100a1f3c92c6390c6066cdbf\",\n        \"signature\": \"176b9592f8c25135292add4daacc9c4faa21d4f49b278480c4e8881c01624df9a37e23e18e84ca32d0d8cb851054222f10a495419f197e7b3d18df0adfb1b307\"\n    },\n    {\n        \"secret_key\": \"4aaf2d132884f30d1127cf187ee09388b4a5c44a9a9267e6728317398951fb61\",\n        \"public_key\": \"83727e9257349128559ebf759fdc82122cce76746639c0ada9761f0d60b940b1\",\n        \"message\": \"d73eaf11413bf4d5bccf6a2e809cd6832a51823aa22bd16e09cf56ff045eef2d1adadda50c2ebd67bbc4d70e493c968cb4de4977065d4463300694c9caa57206d6664693d8462c3c576b525cc7acf79f26f9055a1bcfa7d077f45ebe0b2d481ebd63f7340a33e4ab68f1604975ec1dfec45a791a2abb1044d75a4db55adf59b8394ebde6824c21145b00ef3b1b08ed11fd51dda514ed7e21e54dbaf6abb6d9e317fcf9fd375b18764e64ac9be5b08fec3b78abbab1d12a2ab09d559acdc7133fb2e0008e0c114b7cadb4bf763078674d03e9c807bec1e2ca71adcdaa310d587fa56950fc0fb2e979043d50f9ae23fa8f821cd9d6232789d0eeccfc4f47e3ad804e25cf5a425f94377d17874833e6ae3638178c78b79519d64d9793f4504606a0eab68707f6e1f7cccb515be3d1201bcd19f2f0e255c722eab12b43aff8c8c5561125fbca1f6542076a06152eb7e4b0786324c2495e79d79c0a8e295bb2e3dfd05a9033190065a284552a6e736006ace41f97cc434a2512051b727ce5bc9c4a75529ec53dd7d1f126e793857747b5ba8d03155d4555f59e8baf2f0cdba871ac160e7519a852db004f701641a40a422d4c38b6c0c3cc8fbbd05322ddc0001fb867286e296cbd69862cbccc7447038eb30f8a8123b7b31373984702c3be457a4b8c54e6e5280485a2c4ff84521f298ddeb3b3b2bc91f114ddce67030248044469dc06f362f2919a3fece5082375d04080376fe219d9b4575b1cf1c9ec4dcac5749fc778f515dda13fa0d586c264b9bb61503310762c789ca11608d2fee674c70ac4fc6d5ebcf68c4ab89bd84555fc007523c28a7e1dd08a9862044d5245b91a8778ec9ee984a41a9e13b7abd657ae2a46ae860152c644acd95367678ff64cc54006e36614805ed618a7c6d0fd33a908523090841c230af09846d132bb4c6b60e2441f9d3c498714f470f6bc03a80d14a294b565d1d5e781cffcb1304efdbbc7bfeabdedc857acc42e2762bbf97af839a166752da295672817f10dbd472d381f53165555ac8222a78535a86805f1bed422889f206109aa74772edc0bb51e8a9840cf62c92fa635b90cae076dd50e5aed9deac843fa8a6b539988285ff1adabe4c7b83d9e29ac2d94092daafec9f6673689ba9e9252d864d7577aa89505d331fe7809861277002a0b44a96ba6ae4a52b3548bf268e777780c00209b245f8b1417ee5e701a12334ad5\",\n        \"signed\": \"5f11df3906a712a953f47c859806b5237358d08ba95e49f9e530a37165835e9359d9769dc21fbb4d44497b93905bca8d9917c728493fee3acd5b521dbd1e2408d73eaf11413bf4d5bccf6a2e809cd6832a51823aa22bd16e09cf56ff045eef2d1adadda50c2ebd67bbc4d70e493c968cb4de4977065d4463300694c9caa57206d6664693d8462c3c576b525cc7acf79f26f9055a1bcfa7d077f45ebe0b2d481ebd63f7340a33e4ab68f1604975ec1dfec45a791a2abb1044d75a4db55adf59b8394ebde6824c21145b00ef3b1b08ed11fd51dda514ed7e21e54dbaf6abb6d9e317fcf9fd375b18764e64ac9be5b08fec3b78abbab1d12a2ab09d559acdc7133fb2e0008e0c114b7cadb4bf763078674d03e9c807bec1e2ca71adcdaa310d587fa56950fc0fb2e979043d50f9ae23fa8f821cd9d6232789d0eeccfc4f47e3ad804e25cf5a425f94377d17874833e6ae3638178c78b79519d64d9793f4504606a0eab68707f6e1f7cccb515be3d1201bcd19f2f0e255c722eab12b43aff8c8c5561125fbca1f6542076a06152eb7e4b0786324c2495e79d79c0a8e295bb2e3dfd05a9033190065a284552a6e736006ace41f97cc434a2512051b727ce5bc9c4a75529ec53dd7d1f126e793857747b5ba8d03155d4555f59e8baf2f0cdba871ac160e7519a852db004f701641a40a422d4c38b6c0c3cc8fbbd05322ddc0001fb867286e296cbd69862cbccc7447038eb30f8a8123b7b31373984702c3be457a4b8c54e6e5280485a2c4ff84521f298ddeb3b3b2bc91f114ddce67030248044469dc06f362f2919a3fece5082375d04080376fe219d9b4575b1cf1c9ec4dcac5749fc778f515dda13fa0d586c264b9bb61503310762c789ca11608d2fee674c70ac4fc6d5ebcf68c4ab89bd84555fc007523c28a7e1dd08a9862044d5245b91a8778ec9ee984a41a9e13b7abd657ae2a46ae860152c644acd95367678ff64cc54006e36614805ed618a7c6d0fd33a908523090841c230af09846d132bb4c6b60e2441f9d3c498714f470f6bc03a80d14a294b565d1d5e781cffcb1304efdbbc7bfeabdedc857acc42e2762bbf97af839a166752da295672817f10dbd472d381f53165555ac8222a78535a86805f1bed422889f206109aa74772edc0bb51e8a9840cf62c92fa635b90cae076dd50e5aed9deac843fa8a6b539988285ff1adabe4c7b83d9e29ac2d94092daafec9f6673689ba9e9252d864d7577aa89505d331fe7809861277002a0b44a96ba6ae4a52b3548bf268e777780c00209b245f8b1417ee5e701a12334ad5\",\n        \"signature\": \"5f11df3906a712a953f47c859806b5237358d08ba95e49f9e530a37165835e9359d9769dc21fbb4d44497b93905bca8d9917c728493fee3acd5b521dbd1e2408\"\n    },\n    {\n        \"secret_key\": \"4bc7daabc5407c226d1920db4afd21b2a5b3e59b8e9246053f6a1a6afa54e7e7\",\n        \"public_key\": \"dc539885fc7bee002ac5debae16bddbe4b553fa15e81ee798876940f38cfc4c5\",\n        \"message\": \"6acce99843b241afe6edd5d0ab78d0fb21c8c35aff881389d505f2f1dd91af1eb2ad229254927c7f0ecfb7a8141690573a655d69853d74d0708bf8b1e60a03963028a625b79f3dfea2b113ffcab46f3cfd4a621e8fd8ff0a968143b0ae03ccb6f42e25e2d74dbf515bc358699b635009b01d61fe597f1dc2c35a7ba4555278ee0ea456c7d35fa8757a417924b1d0a8351f226a13ec29d025b42696ec1d9925b769cd59c8e2f9cd3ce4e5c020e051e7a36f3f97c1e8ec71974bc16ac4de4651ad4df2e9c0eed686924224fe6de6c60dd4acc26e0aabd80c21d509d959b80b4353958d00e44c511d23bcf44552608bfa56a9c5ae79de62bb23f11d740f48240c27e101999751f2534742c0a6913ff64b683a18995abc393feb9d57c71f49a080557298cc405d11b7988d7116840c5adaf53bc672b46923cc457c7039940ad4d5bf073c6c886b1339525926d281dbd1a79739b2e36414cbd321b185fc88f18d2f81c809975be9a093644cc559ed2ae5cc0e35cbdd1811f70286057a3f703067edddf5eb1690a7427bb73fe3024ed0db82a5ce8f1716428a76fd292ba99a300c4b2f360da2124617590b10e3b162a6e67dd5d5a59bcca10f610fa064affd55f8483b98a68d076f278abf888a08a014e0ea499180fbc79840ceed13cc6b2458bfab9b0dd7ae9d86461fe215e7c9f63f768cee4a882df0dd84e3eb4f2d7f6b18fa57d8bc7d9afb63c21ac465e7903b9bfb8638a29361f7ebfc6e54e5465a6cef463ae22643ae410258779ca74b70401a9455a4d157d74a7029efe6b519a8c4be696756e045ae4081b77dd6031f0d250fa761e60f859d9063fc105aa0a1a7450af153e705477777c442586df407402ba238752faef74f3345c26a4533be9a61f5fc6bde48e3cba75c04d6f7b333e37006dd0c94fd3b6a130bd6fcdb3c6abe21ca60eb431cc2d8a2ece7169d2dcfce2760825657fd4c26f3c3b830acdfd508011d14764b3be91715571a3183018e0d221fb9532bb2e1711e725a273ae0cc2faccba7d5504929459c992517b05c1ddd03aaccd937b86eb67bc8202d01cab3d489586eea1acca7dc20cd0b6475c258ff673661496a22ea96b89db4bf3fcaae3bb04f67db096a47ff7e1ee239562dc10d40f053944f3d7bcc3ff4c0ff765654ba5ea64f0ea63e45a21d9b12949f14f7ea7074e9b659c5c5d44816842de89698a8fccace43eb6b4135e0b333ac\",\n        \"signed\": \"a7a6488839bbae04dec92f96d728c464685d7a96df512b0051163d22538f74546fa986b1b60a6d8cc766a26c6984c9cd2688395898e2b2ae72dc6a2d5a9f750e6acce99843b241afe6edd5d0ab78d0fb21c8c35aff881389d505f2f1dd91af1eb2ad229254927c7f0ecfb7a8141690573a655d69853d74d0708bf8b1e60a03963028a625b79f3dfea2b113ffcab46f3cfd4a621e8fd8ff0a968143b0ae03ccb6f42e25e2d74dbf515bc358699b635009b01d61fe597f1dc2c35a7ba4555278ee0ea456c7d35fa8757a417924b1d0a8351f226a13ec29d025b42696ec1d9925b769cd59c8e2f9cd3ce4e5c020e051e7a36f3f97c1e8ec71974bc16ac4de4651ad4df2e9c0eed686924224fe6de6c60dd4acc26e0aabd80c21d509d959b80b4353958d00e44c511d23bcf44552608bfa56a9c5ae79de62bb23f11d740f48240c27e101999751f2534742c0a6913ff64b683a18995abc393feb9d57c71f49a080557298cc405d11b7988d7116840c5adaf53bc672b46923cc457c7039940ad4d5bf073c6c886b1339525926d281dbd1a79739b2e36414cbd321b185fc88f18d2f81c809975be9a093644cc559ed2ae5cc0e35cbdd1811f70286057a3f703067edddf5eb1690a7427bb73fe3024ed0db82a5ce8f1716428a76fd292ba99a300c4b2f360da2124617590b10e3b162a6e67dd5d5a59bcca10f610fa064affd55f8483b98a68d076f278abf888a08a014e0ea499180fbc79840ceed13cc6b2458bfab9b0dd7ae9d86461fe215e7c9f63f768cee4a882df0dd84e3eb4f2d7f6b18fa57d8bc7d9afb63c21ac465e7903b9bfb8638a29361f7ebfc6e54e5465a6cef463ae22643ae410258779ca74b70401a9455a4d157d74a7029efe6b519a8c4be696756e045ae4081b77dd6031f0d250fa761e60f859d9063fc105aa0a1a7450af153e705477777c442586df407402ba238752faef74f3345c26a4533be9a61f5fc6bde48e3cba75c04d6f7b333e37006dd0c94fd3b6a130bd6fcdb3c6abe21ca60eb431cc2d8a2ece7169d2dcfce2760825657fd4c26f3c3b830acdfd508011d14764b3be91715571a3183018e0d221fb9532bb2e1711e725a273ae0cc2faccba7d5504929459c992517b05c1ddd03aaccd937b86eb67bc8202d01cab3d489586eea1acca7dc20cd0b6475c258ff673661496a22ea96b89db4bf3fcaae3bb04f67db096a47ff7e1ee239562dc10d40f053944f3d7bcc3ff4c0ff765654ba5ea64f0ea63e45a21d9b12949f14f7ea7074e9b659c5c5d44816842de89698a8fccace43eb6b4135e0b333ac\",\n        \"signature\": \"a7a6488839bbae04dec92f96d728c464685d7a96df512b0051163d22538f74546fa986b1b60a6d8cc766a26c6984c9cd2688395898e2b2ae72dc6a2d5a9f750e\"\n    },\n    {\n        \"secret_key\": \"f26af210e3b20173990c7745922cdf9424773abb374d777a512cf5b97b3a000d\",\n        \"public_key\": \"54586abf041176e06aec5b6010e190916da54a8c4bde288cf24d8c107cb3b730\",\n        \"message\": \"88e26da35c54884b47146f4e3f014ab65b3d71aa7e3c3391adbeb19ef2e7b9302e281991b261b6a0992e2e89a49f480ca2d8e684b12f9b1509b38f6a7a98a5ddb4c2d869fd0318e98ecd8fd9df491baf99a9294de49e1cf8dd41ee85730af025a701143e4f0c8e3d92d55b59ca7d4a6c89ad760dffc0c2189209508ef6c2214edf9967b17def123d8692c9e4e20b1e98268808704f5f9fe1a6d6055e32c872564bd17edb7359578629017f0c30feab8b504e228923adc7e81ae20a852db0ad676a78e081336d6b0402f9cdc5d5e90128ca945d10515ca0c5ef03f731b1d40a710741d41c1dd1ca16b1060febf2a0532e6f5d7651ef446375ec18090cb8418b8202f25a0389031b307f223c5b5f6afe36a9adc1068f2c6e0ea5b2b6cfeb8dc004f7b829c80439069b81a7bd907477c6135ef282b771f141dbe75a0fa056e06b8a1a1f98c25fa54d14c8fdb42d6502595c59d25bacf1a19adefcc13170f7a4317b6ab610b609d414b0073ea04ac29eb10ee73cd71a4ca60409f8e760e60f939510100d0c8cd76f264bb37811f97aa5299ac0b12d4168ff38ecdfa80b1e5c1b3bbd4d40d3544735df7167eb158a9a9a234d445f1d663ded7171edc68d172c92214b82ef13fe6b8c43aa89b739b4990ae947a34f020a8d8943b0f7a5d61dfa76adde0272e98c1159c0fd8a1de33f2cef8edd32857b2189ed96128057ebdea81f7a3a3dffe1893b5ba877556c90383fa2c5a6fd680e8a67dee4802d90dfe971623a7be22ab3ca56067b1e5c694aa84c19f16d69e284ddfa039c108d0435813812390d8ebc1e50138176f259dc0f26bca13bc943f50d5a3500b18d593574c620fc097ace430fb80728d3a1aa644e504b1009ad67536ceb011f2a357dbd009e4a63f524d5b5957f331567c5b4d185a61df22d7071d31ae92141e199c12289515aed80c91021456bcd45ccc634037dcf69b41d6b1ff53471010d99f187f04654f43622287871fee6dcf5f3023cbd0913d99aff43fa95b32ea2b133b4c9ac4b017b7cf8f9be5086fe92b42cb8dbed5b630bf097c18e2e55c3dd93271e09c2d1cc6af87d83fdef3c3e3c4cbafbea9b60fd5e9cf0011de2e9e26fbf09afeef5c69802a6c46bdf54c145862944173e017e30149ea5c03c7aefa28a9cac7767002ea3fefbdeae5bae005c370dbc064244d5b9be5500a35726a99bc9e8c2752d510e139af225580098c8189aa9c520\",\n        \"signed\": \"ce454530b922ba5ea162f1a452e05c00363a49a9db8a569497c00caf1cbea99180770554ed4e3140dfca4555159ebf48ef5d2a50f394aebd782116ed6569a40988e26da35c54884b47146f4e3f014ab65b3d71aa7e3c3391adbeb19ef2e7b9302e281991b261b6a0992e2e89a49f480ca2d8e684b12f9b1509b38f6a7a98a5ddb4c2d869fd0318e98ecd8fd9df491baf99a9294de49e1cf8dd41ee85730af025a701143e4f0c8e3d92d55b59ca7d4a6c89ad760dffc0c2189209508ef6c2214edf9967b17def123d8692c9e4e20b1e98268808704f5f9fe1a6d6055e32c872564bd17edb7359578629017f0c30feab8b504e228923adc7e81ae20a852db0ad676a78e081336d6b0402f9cdc5d5e90128ca945d10515ca0c5ef03f731b1d40a710741d41c1dd1ca16b1060febf2a0532e6f5d7651ef446375ec18090cb8418b8202f25a0389031b307f223c5b5f6afe36a9adc1068f2c6e0ea5b2b6cfeb8dc004f7b829c80439069b81a7bd907477c6135ef282b771f141dbe75a0fa056e06b8a1a1f98c25fa54d14c8fdb42d6502595c59d25bacf1a19adefcc13170f7a4317b6ab610b609d414b0073ea04ac29eb10ee73cd71a4ca60409f8e760e60f939510100d0c8cd76f264bb37811f97aa5299ac0b12d4168ff38ecdfa80b1e5c1b3bbd4d40d3544735df7167eb158a9a9a234d445f1d663ded7171edc68d172c92214b82ef13fe6b8c43aa89b739b4990ae947a34f020a8d8943b0f7a5d61dfa76adde0272e98c1159c0fd8a1de33f2cef8edd32857b2189ed96128057ebdea81f7a3a3dffe1893b5ba877556c90383fa2c5a6fd680e8a67dee4802d90dfe971623a7be22ab3ca56067b1e5c694aa84c19f16d69e284ddfa039c108d0435813812390d8ebc1e50138176f259dc0f26bca13bc943f50d5a3500b18d593574c620fc097ace430fb80728d3a1aa644e504b1009ad67536ceb011f2a357dbd009e4a63f524d5b5957f331567c5b4d185a61df22d7071d31ae92141e199c12289515aed80c91021456bcd45ccc634037dcf69b41d6b1ff53471010d99f187f04654f43622287871fee6dcf5f3023cbd0913d99aff43fa95b32ea2b133b4c9ac4b017b7cf8f9be5086fe92b42cb8dbed5b630bf097c18e2e55c3dd93271e09c2d1cc6af87d83fdef3c3e3c4cbafbea9b60fd5e9cf0011de2e9e26fbf09afeef5c69802a6c46bdf54c145862944173e017e30149ea5c03c7aefa28a9cac7767002ea3fefbdeae5bae005c370dbc064244d5b9be5500a35726a99bc9e8c2752d510e139af225580098c8189aa9c520\",\n        \"signature\": \"ce454530b922ba5ea162f1a452e05c00363a49a9db8a569497c00caf1cbea99180770554ed4e3140dfca4555159ebf48ef5d2a50f394aebd782116ed6569a409\"\n    },\n    {\n        \"secret_key\": \"39bffe007f8df7ce4e56fd176b102b923ba48aeb8269fd0cd520c23a7b236e6c\",\n        \"public_key\": \"9532636800010b3dd4012e341fcad6d29afad484e6fd736e89d5bc02ba0ac853\",\n        \"message\": \"7a8c20bf2eff69af8bad6bdfabc7909c58ce746cc4df78b69b33c105ba3bd8da75244758b5172d5c4501bc39970185ee3d437083a9959f81e7665b829a69a5d72e034d351adddceb3d3fff589988df182b46fa53d26e7c9eac062215788f2337bf90f0177d8ca744f95f28fea854593c4362c82e9ded19b904ff99d2bea82432822e52c3da6d462da754ff1f8bd109942df51dba25b7cde838d5f524239f1331f463194e10ff56795b296878feb1f55d43ec7daf0ca5ab3d684b55bb0aa4c720d4b5c2e830c858694d3d0fdbaad0bf67d873182d95b2412fce5e7b00fa6bfc38b132efb96f87bc6c10070a5716ec9b33a2692cdf5bc41c7f737e28c4220317a489b7323d5e20f65d375d769f9e79376fd02d85368671e7e081eb753f888545ebe5c000b2f80143eb358d43185e2f1c294b9f29c8bb91482d4387494aad176deb85540fd005c97d13e6663f09944eb43a46e6236794bf6e21f81d0a42090f9ccef90a6c4807b5ff541300e5934881a8d92196b4cee85d28092a828ea3bfc6b745ad219be9f5e9574117d079e02f4b748e2cc01a32826a3708231914d2772c764119fd99d53ab5b5a2e9d891a48a9aaaacc26338b18248db8ab2d525daf15ff53acbc3aa98d4f2d4a337bbaf6d1be21985a4af600e29bbb42c8d89e6b389c66f42270c3a0b051bdb623881e02f2f4294cec3476386747abae6c7700b8f9b0387cddfb73668fb57693d8474196b33abd12dce59a57cf72ee6cc1ddbaadfb19e90af8131b3a90f9867f4c7e15bdf9e218477016bd0ad3be8dd059671ff656cbd4ed898086de4d423f3dfb270bbf19d9f53f7f6f2d22c6ac9025cbadba442e31d9811e37e847dbd484d80cf743039ffa7048470fbdc6080f6d381dc7e3fa27122df53cc06394ea6fc446e1ba72538733ed3abb685f16dfd5ccf585ae8fbf9954b50f10b7e5432a22b369406a9b7088961f0ae207495ae7185396dccf292dc463f41f376a1ca89eefbae19269152031bfd815288e8b5baf348c4f8ff3dff4fd6d108f871daa352110fa64188b01b8526a845aaed133e456b4c83c4fd4bbb165b4090307e8eb17df176c322520f37599c2105aa8120758394a4222473476764cf0af7c55183eba9683d7270631443f3c51fb8ab0c130ac436ab603ff4f1d8656cdbed229a202b40008ea10b171542f74a70b7bbacc4016b7f636aa89633b7668058f13312f57c5162d18e399e\",\n        \"signed\": \"a27cca4b9f5b95ad0e44e4740c15deaeb93f22a9b254ebbd2329365a00966c9f4ec1e55c5894e7bfc23d398d3970b9465e98a8d23e72dae8e350da3531ae69087a8c20bf2eff69af8bad6bdfabc7909c58ce746cc4df78b69b33c105ba3bd8da75244758b5172d5c4501bc39970185ee3d437083a9959f81e7665b829a69a5d72e034d351adddceb3d3fff589988df182b46fa53d26e7c9eac062215788f2337bf90f0177d8ca744f95f28fea854593c4362c82e9ded19b904ff99d2bea82432822e52c3da6d462da754ff1f8bd109942df51dba25b7cde838d5f524239f1331f463194e10ff56795b296878feb1f55d43ec7daf0ca5ab3d684b55bb0aa4c720d4b5c2e830c858694d3d0fdbaad0bf67d873182d95b2412fce5e7b00fa6bfc38b132efb96f87bc6c10070a5716ec9b33a2692cdf5bc41c7f737e28c4220317a489b7323d5e20f65d375d769f9e79376fd02d85368671e7e081eb753f888545ebe5c000b2f80143eb358d43185e2f1c294b9f29c8bb91482d4387494aad176deb85540fd005c97d13e6663f09944eb43a46e6236794bf6e21f81d0a42090f9ccef90a6c4807b5ff541300e5934881a8d92196b4cee85d28092a828ea3bfc6b745ad219be9f5e9574117d079e02f4b748e2cc01a32826a3708231914d2772c764119fd99d53ab5b5a2e9d891a48a9aaaacc26338b18248db8ab2d525daf15ff53acbc3aa98d4f2d4a337bbaf6d1be21985a4af600e29bbb42c8d89e6b389c66f42270c3a0b051bdb623881e02f2f4294cec3476386747abae6c7700b8f9b0387cddfb73668fb57693d8474196b33abd12dce59a57cf72ee6cc1ddbaadfb19e90af8131b3a90f9867f4c7e15bdf9e218477016bd0ad3be8dd059671ff656cbd4ed898086de4d423f3dfb270bbf19d9f53f7f6f2d22c6ac9025cbadba442e31d9811e37e847dbd484d80cf743039ffa7048470fbdc6080f6d381dc7e3fa27122df53cc06394ea6fc446e1ba72538733ed3abb685f16dfd5ccf585ae8fbf9954b50f10b7e5432a22b369406a9b7088961f0ae207495ae7185396dccf292dc463f41f376a1ca89eefbae19269152031bfd815288e8b5baf348c4f8ff3dff4fd6d108f871daa352110fa64188b01b8526a845aaed133e456b4c83c4fd4bbb165b4090307e8eb17df176c322520f37599c2105aa8120758394a4222473476764cf0af7c55183eba9683d7270631443f3c51fb8ab0c130ac436ab603ff4f1d8656cdbed229a202b40008ea10b171542f74a70b7bbacc4016b7f636aa89633b7668058f13312f57c5162d18e399e\",\n        \"signature\": \"a27cca4b9f5b95ad0e44e4740c15deaeb93f22a9b254ebbd2329365a00966c9f4ec1e55c5894e7bfc23d398d3970b9465e98a8d23e72dae8e350da3531ae6908\"\n    },\n    {\n        \"secret_key\": \"3c4080cda0fc3c03b614d980f2ff831f5be0e7a981d5381a1618e0b8fd001776\",\n        \"public_key\": \"f1c3269d870402caa43882135d9dbadbbb162dfca0b3dad197e6b8a7ee679a70\",\n        \"message\": \"0ceebc0e8a47720f25835e2b9acf891bcca4bda38637f363274458baa9e2bbafedd0938f5688734e22ac50fb120f665f6c4c61c6531739b929ac83cd77f8963b754488b9b859c13853637cf025c14e8fdd118faa14cf3930ceb35f104d95441e56489440f62041ef1aa7c4b08b2807e32bb9584b9004d76e76533348506d64f112e1ff6f938f642230bf38af010e41987270248b13635a3567b355bba5b57448c6d13b74f3bebf617915821028fca5defa4ce5424ca191cd54a22944a3d940e4ee2e2ba5d504c85f959b514c4fab41ccb5743d9cb2f9bf33d1d8c2a5869e9f4660c3fb224b39141e3110c9ee8aeb871e14c62c6be38fb9a4568d736810bb9d2073178b6c7e87e3582efc62b53c23c5d46520ba33ffb3a9ca649ef26fe74a3cff6188427326b8c96f74354cb3ecaa611b12cded565e59fe1f8f400097e93ea85951b5b4e9009eea7db937e4349c4e5e00c4456c6c5f4e57411baf4e46e700ac400257765f48dab03e439f76c1499b5108047c830109dce7f740d1393787e29d3716d3c47e755cb828e7d440a971975197ebdb3f9b737ba11f7fd0386a959249017de7234d5e5a9b473bb9583a3742c774ee552a12a1f36eb3f26c885bed22e91c74cf32a8dd3edb08b674bf386ef427727912d57c5fafaa1cfeb740cd52b9dee995e3d0161cd9213f38fd681d538ab8bf97b745f54980030ef8b72696d4e27473fb0f1acd5d0aae0297211680ea0fc59d7b6d51c63292585a1d553d0c8954b42a4bd6fcd3a49575bf5c88953f1f4ea7fe0ed7a579d1697e645e2a61c69d1a56bc605bb04060a2778d509a8aadbf35d94697ccee9d3543dd01281a031f2a0eb3a9eb13ae56ff44fa0aed4f3488747d6af820f3989b7133f449ea56d3a7f731e791b7ed2a5db939bb75352de7daec5066fd57557165adffa631cd3f967c3c7cfc11cc1f14fa23defec3eb0239b45ed601a3a8078ccfc7f8380902a859ee9ce2db795efaca0a01dc0879d506ac97d10704d7757b3ccf3b37c339b42db23782278023e4c2e77d74246c9e544149a55c0c920ebf2986b4c5b4b3572f748c4b15c7f863999bc5132adad09761eb76505019769fb55422f603184e24c0d4f3761987b5c50feafcce53302a3a415e20f56a054803e553bacd242a5e1364aa3b2d7cb3bc1e1b86a47431cbd39695b67f554c4645b7236904094c11aa1b40326ba91b8bf4873e9a4de04e2bf4625972\",\n        \"signed\": \"c9d4a4728b8fdd240d9c498aa35de95a4bbd51785b73c8403fdf040dfaed9447efad0069b67c783d4b81d966bef6e3d9a808a0584b98ec2b18322c4c920eb00a0ceebc0e8a47720f25835e2b9acf891bcca4bda38637f363274458baa9e2bbafedd0938f5688734e22ac50fb120f665f6c4c61c6531739b929ac83cd77f8963b754488b9b859c13853637cf025c14e8fdd118faa14cf3930ceb35f104d95441e56489440f62041ef1aa7c4b08b2807e32bb9584b9004d76e76533348506d64f112e1ff6f938f642230bf38af010e41987270248b13635a3567b355bba5b57448c6d13b74f3bebf617915821028fca5defa4ce5424ca191cd54a22944a3d940e4ee2e2ba5d504c85f959b514c4fab41ccb5743d9cb2f9bf33d1d8c2a5869e9f4660c3fb224b39141e3110c9ee8aeb871e14c62c6be38fb9a4568d736810bb9d2073178b6c7e87e3582efc62b53c23c5d46520ba33ffb3a9ca649ef26fe74a3cff6188427326b8c96f74354cb3ecaa611b12cded565e59fe1f8f400097e93ea85951b5b4e9009eea7db937e4349c4e5e00c4456c6c5f4e57411baf4e46e700ac400257765f48dab03e439f76c1499b5108047c830109dce7f740d1393787e29d3716d3c47e755cb828e7d440a971975197ebdb3f9b737ba11f7fd0386a959249017de7234d5e5a9b473bb9583a3742c774ee552a12a1f36eb3f26c885bed22e91c74cf32a8dd3edb08b674bf386ef427727912d57c5fafaa1cfeb740cd52b9dee995e3d0161cd9213f38fd681d538ab8bf97b745f54980030ef8b72696d4e27473fb0f1acd5d0aae0297211680ea0fc59d7b6d51c63292585a1d553d0c8954b42a4bd6fcd3a49575bf5c88953f1f4ea7fe0ed7a579d1697e645e2a61c69d1a56bc605bb04060a2778d509a8aadbf35d94697ccee9d3543dd01281a031f2a0eb3a9eb13ae56ff44fa0aed4f3488747d6af820f3989b7133f449ea56d3a7f731e791b7ed2a5db939bb75352de7daec5066fd57557165adffa631cd3f967c3c7cfc11cc1f14fa23defec3eb0239b45ed601a3a8078ccfc7f8380902a859ee9ce2db795efaca0a01dc0879d506ac97d10704d7757b3ccf3b37c339b42db23782278023e4c2e77d74246c9e544149a55c0c920ebf2986b4c5b4b3572f748c4b15c7f863999bc5132adad09761eb76505019769fb55422f603184e24c0d4f3761987b5c50feafcce53302a3a415e20f56a054803e553bacd242a5e1364aa3b2d7cb3bc1e1b86a47431cbd39695b67f554c4645b7236904094c11aa1b40326ba91b8bf4873e9a4de04e2bf4625972\",\n        \"signature\": \"c9d4a4728b8fdd240d9c498aa35de95a4bbd51785b73c8403fdf040dfaed9447efad0069b67c783d4b81d966bef6e3d9a808a0584b98ec2b18322c4c920eb00a\"\n    },\n    {\n        \"secret_key\": \"45438f91465d74a2825b0f66a35bd7c8d005865479b3dc10a9b56f297d31b926\",\n        \"public_key\": \"f092b5880330871e5aafdd3ceb3850ee7e0941a2a1dc89f4fb4771d75a22f6f2\",\n        \"message\": \"3071d4b720df1093659967cd4eefef2ef9678475f7dec58fecec1d928deaf802457a1934e60455f496cf4251820ed60a3d8133b624d33af26a262784b5a2fba73cca2aa5e519e1f539584780649864ba5fbc1f011dddac381f8d48d0d60ce8231701173c9d2a307a76302ebc69dcbc930d28431475b516f98f778ed2e1fff272909a272cc3fbb6b31c8041a37cb777e062e49649afad12c1b5f7fcb8065a99e7423362ad16906031265db7e8b89751f8a4a407f2502650fed753e42c8c911e50b94b3800695b0eba7dff06b7a710117e4920d4b1c605a3ebf32e06966716eda14b3042998a3c7a5e9f83542d7dde65e528bed6101deb331deb94cdd46044bef88c097bafd40d6921a7c484c8f96684dc371671d94eee7cbe5d587715314cff0d1877272d8190a90e18bfb321d52bf74705137b2abf9165731767a13adc9c85e0397b47aef96badb2ca7fcb8293b01fd1de316ee1e65f356b9d6e8ea1fdd837bd96081149ea2dcd73c4881f32b7deebc3715e2d7cdb643e0d98f4e846508b04b32439ff14b1164f46846df9afae44464cf550104cd3aab3817540470aaa2ab9559a68b7ff6b1b9c0ce9f5869cbdcdd617090942e353b4c77f09395896becddff1ab7f07586a514d81fb096361557566870f1691983485a80c3413da98b8d19c78e6379f943e5bd5a5697aa33c5e6bfcfb7b8df1e1574ee416fab3c8a7d088b3a057cf865321b74e6103526dd9ad15ca5ad3c0f69718e27081d4b34a7c6d1aab6b96c0a754b989b4940638c9ede3d17bd49f65bf783dc85f1c4b144876cdbdb2282a9564aa81b57092080d6448fb6580ecf09f82a755010d55d4a5e4f305e259dbe99508b479250d80ec17c8760a93e05a29571f6856073022c8706913c46a2efd2e9caae4ffa1b4222e3d70e979e81a71951d7cb830bcbcf901af244f64e4ad9f52fa3b62031e3516da50bc2bce78eb9d61bfedd9b3f57e89355f177db6162bf61da0e454c34288b967c3fb4c341b32d4d13a319869b8e36046f9e338b5f36a1fc1a7eda7d7b0d438e0a75d84bbe4d68c879ada80dde23f7155b532cccf7a63f1bedf84f82f440c9ec3cb0e45f32c92f76438f5b4b910441e6738af3f5d2050d579ee96b88f3b00810ab126ff3a8fefd971044324dd4eb3447dac5b77809cda8c71682549d7cf2dcee340edcf9494aca42901e2c11ed97790af48bcea29521ef0e3d03cdadecdc894dd0756\",\n        \"signed\": \"d9287b7fec017f2ea40a14a1f62dca78b02a3d6632df7c60ebd90fc5e492c5c62c43166bf85658fb30a08b57a5813121b80397571a312b6dd11b6539205416023071d4b720df1093659967cd4eefef2ef9678475f7dec58fecec1d928deaf802457a1934e60455f496cf4251820ed60a3d8133b624d33af26a262784b5a2fba73cca2aa5e519e1f539584780649864ba5fbc1f011dddac381f8d48d0d60ce8231701173c9d2a307a76302ebc69dcbc930d28431475b516f98f778ed2e1fff272909a272cc3fbb6b31c8041a37cb777e062e49649afad12c1b5f7fcb8065a99e7423362ad16906031265db7e8b89751f8a4a407f2502650fed753e42c8c911e50b94b3800695b0eba7dff06b7a710117e4920d4b1c605a3ebf32e06966716eda14b3042998a3c7a5e9f83542d7dde65e528bed6101deb331deb94cdd46044bef88c097bafd40d6921a7c484c8f96684dc371671d94eee7cbe5d587715314cff0d1877272d8190a90e18bfb321d52bf74705137b2abf9165731767a13adc9c85e0397b47aef96badb2ca7fcb8293b01fd1de316ee1e65f356b9d6e8ea1fdd837bd96081149ea2dcd73c4881f32b7deebc3715e2d7cdb643e0d98f4e846508b04b32439ff14b1164f46846df9afae44464cf550104cd3aab3817540470aaa2ab9559a68b7ff6b1b9c0ce9f5869cbdcdd617090942e353b4c77f09395896becddff1ab7f07586a514d81fb096361557566870f1691983485a80c3413da98b8d19c78e6379f943e5bd5a5697aa33c5e6bfcfb7b8df1e1574ee416fab3c8a7d088b3a057cf865321b74e6103526dd9ad15ca5ad3c0f69718e27081d4b34a7c6d1aab6b96c0a754b989b4940638c9ede3d17bd49f65bf783dc85f1c4b144876cdbdb2282a9564aa81b57092080d6448fb6580ecf09f82a755010d55d4a5e4f305e259dbe99508b479250d80ec17c8760a93e05a29571f6856073022c8706913c46a2efd2e9caae4ffa1b4222e3d70e979e81a71951d7cb830bcbcf901af244f64e4ad9f52fa3b62031e3516da50bc2bce78eb9d61bfedd9b3f57e89355f177db6162bf61da0e454c34288b967c3fb4c341b32d4d13a319869b8e36046f9e338b5f36a1fc1a7eda7d7b0d438e0a75d84bbe4d68c879ada80dde23f7155b532cccf7a63f1bedf84f82f440c9ec3cb0e45f32c92f76438f5b4b910441e6738af3f5d2050d579ee96b88f3b00810ab126ff3a8fefd971044324dd4eb3447dac5b77809cda8c71682549d7cf2dcee340edcf9494aca42901e2c11ed97790af48bcea29521ef0e3d03cdadecdc894dd0756\",\n        \"signature\": \"d9287b7fec017f2ea40a14a1f62dca78b02a3d6632df7c60ebd90fc5e492c5c62c43166bf85658fb30a08b57a5813121b80397571a312b6dd11b653920541602\"\n    },\n    {\n        \"secret_key\": \"72cfcef4c9d6a1986d190311840e55cbafacc8a6eb5ecc72934fda535bdcffb2\",\n        \"public_key\": \"a94464d8cc8f3e43393947649f91c2752327e40daca11a9970c5181eda37d606\",\n        \"message\": \"66a6cbe88a8ab9a33847797fc480b244e8a2b8ec79e80bc2637753deb36fa3014f843e22a47db0a31778385ec1f455672e0dff6ca21ca4cfd2b989471b7ffc307828138b0ad4e647c2d13cef724469054abd3740245aea4b789e244e95cf9ecfd08a0d13c7ced393332727a7f3d8fbdabd939de28caa41cc96c7081198e22653d94e024a61f5f3dc5aa37fa9adddc96cf169d35062a0a29ba45a539c87a68a3a0304361309d213e614ee8373dafba2a7d6ed7d2ad37704c0946e4d093e2d94d061364cc1231063729103a77ccb501891bbc3185457bbd2869eb63dc60f196f10a38b7b36cb3f643d35ddbf438a44bf0c8f570fad41bdde267f0ffcf1f2f927d626d1b0d980a0ce223f2f0054845afe41d39de5a457219f276c67e69be2d5c9e070131639561c26751fb06435e0e42e2508c5f49cd12b517c9833ff97f5e51e1dceafa9426d3dc52fd1379c64ccaabb26db1af6ded7153628842f0cbdbbbd6aa0cfa5407f409496c06532dbeac94dab9baba0b3c988fa03d36f911d80e49b370b6837037ff249e76d692cd17737e0d07965d33f17042bbcd1e990e040f71936f6fca2542ae33748367787c01bdea75c9a0e66150281c468fe5c73af9e5bec372d5020c3d37fa1035a67e224d095f066a51fe1f681c3073939272f6af7750ed8d18349178ab4a2eeb4e9ca82bb67296e9890f316c9d9495953d68436eb1c1a2fb6a1cca45a8e88a09bdd65a5558025618b36d7f3cb389d2e2ab1ed233228ec92a327978c0adceddb6c9632d3abd7971621713754758e21013a0c3d009b6e3193cc152c57ef73107bd4357d528be40873027bf1840f685536080f12c5ffa93ca629736780e015e86d1909f0d8f372010c9cb72c0989845fc88315e6b9370dc92d3683ef44d3f75fc96c4b0e89e13d682d1988b685713eada842be9d2bbe2a76bba15d38cbafb65c40c2159b0ceeb0d769b9be355540734ff37736c0f0facb95159309365b9646bc4b344fb19a5c1639a88e87317bfb3b5e7b5130fa7d5643ed4da06430c8a0c1858ccf2f9a6e3d62012253f0122dbab4a35475a6f65589b2b095992826e4f1b58fa050b8f95c4feba3fbaadd2c2244ad4abd410139adf4c153cb5e69337af176a7837eeaea99bdcd59385afded34ffba8063a35f4f558e4eeb48f1487b56b1f8d1f73067621cb548c808753e3526a2f2aabde126bea521cf673deafa792ca5bd2212795bd66b86\",\n        \"signed\": \"db7270acce78d7fb09080a327941bce7eb145b9e3661866a8683f9a1a3de97fb02b025db9ec76ff32560fe638827742ea2f4ebef6b7cce44f9aaee434fd7c10866a6cbe88a8ab9a33847797fc480b244e8a2b8ec79e80bc2637753deb36fa3014f843e22a47db0a31778385ec1f455672e0dff6ca21ca4cfd2b989471b7ffc307828138b0ad4e647c2d13cef724469054abd3740245aea4b789e244e95cf9ecfd08a0d13c7ced393332727a7f3d8fbdabd939de28caa41cc96c7081198e22653d94e024a61f5f3dc5aa37fa9adddc96cf169d35062a0a29ba45a539c87a68a3a0304361309d213e614ee8373dafba2a7d6ed7d2ad37704c0946e4d093e2d94d061364cc1231063729103a77ccb501891bbc3185457bbd2869eb63dc60f196f10a38b7b36cb3f643d35ddbf438a44bf0c8f570fad41bdde267f0ffcf1f2f927d626d1b0d980a0ce223f2f0054845afe41d39de5a457219f276c67e69be2d5c9e070131639561c26751fb06435e0e42e2508c5f49cd12b517c9833ff97f5e51e1dceafa9426d3dc52fd1379c64ccaabb26db1af6ded7153628842f0cbdbbbd6aa0cfa5407f409496c06532dbeac94dab9baba0b3c988fa03d36f911d80e49b370b6837037ff249e76d692cd17737e0d07965d33f17042bbcd1e990e040f71936f6fca2542ae33748367787c01bdea75c9a0e66150281c468fe5c73af9e5bec372d5020c3d37fa1035a67e224d095f066a51fe1f681c3073939272f6af7750ed8d18349178ab4a2eeb4e9ca82bb67296e9890f316c9d9495953d68436eb1c1a2fb6a1cca45a8e88a09bdd65a5558025618b36d7f3cb389d2e2ab1ed233228ec92a327978c0adceddb6c9632d3abd7971621713754758e21013a0c3d009b6e3193cc152c57ef73107bd4357d528be40873027bf1840f685536080f12c5ffa93ca629736780e015e86d1909f0d8f372010c9cb72c0989845fc88315e6b9370dc92d3683ef44d3f75fc96c4b0e89e13d682d1988b685713eada842be9d2bbe2a76bba15d38cbafb65c40c2159b0ceeb0d769b9be355540734ff37736c0f0facb95159309365b9646bc4b344fb19a5c1639a88e87317bfb3b5e7b5130fa7d5643ed4da06430c8a0c1858ccf2f9a6e3d62012253f0122dbab4a35475a6f65589b2b095992826e4f1b58fa050b8f95c4feba3fbaadd2c2244ad4abd410139adf4c153cb5e69337af176a7837eeaea99bdcd59385afded34ffba8063a35f4f558e4eeb48f1487b56b1f8d1f73067621cb548c808753e3526a2f2aabde126bea521cf673deafa792ca5bd2212795bd66b86\",\n        \"signature\": \"db7270acce78d7fb09080a327941bce7eb145b9e3661866a8683f9a1a3de97fb02b025db9ec76ff32560fe638827742ea2f4ebef6b7cce44f9aaee434fd7c108\"\n    },\n    {\n        \"secret_key\": \"a6337e4d3b1a49b126316778c613516c03ac88c96d92ff5cc7e0c8527cce1a62\",\n        \"public_key\": \"f5eac4fe0ea1a5f236b49da33a24e2f3a83d4b260c54d3416c644e05c838bf51\",\n        \"message\": \"e33430c38c4a40b3c66e20cf3b70e9fea8cc50761f2afe249ec059c07bc3b37e5b94f4a43e310099b19a85f59dff73a7e495c4df31f74780cdef7bd6e47c394c1891ea3052e3ccf5d84bae082d24ba7178ac65d229ad18a84940f6b4dbc596ee63c181b57b5b49698979c18632fa821ca61e35a0d0351fe13d69e06ddcc8d666dca24502177f344e2f440575d39ebfe5e7f10653b65bef291dc813a0434c975de164c1a76bf6fcef98f23181c009b91830b618e4874847d2e21bbdb93f20cd8b1f4baadf99428a22674386a668152b4b9039ff06abcfe334a062f794056172ecbc0794df98271b9acfe4b7da553a87634237630009a05b257c184cbe23d9cd5a038658010f574899f3b2d154d185ee67230913650c3a05b54a2edc243a4287398e376928ea9c6b2cbaf371252540e2b8043fcf556813196ae572c27cfb5a46abb9729af2dcfc29e033dd11f33e86cc6ac3bce6f3f9577d36781a69ed7eaf8c8263a0f18eba0fe8a481f3e15a55599434195f7cb057dd364eaa07dd0dfd266b807f53a2070fd791e872422fd907134f4a8a78a876bdcb031ac860dfe0bb57e105db8287b31a604eb71269be5ba229985ceabc2bdf165ac741650b1f013a66c9bd243d03a8b1c5081381cb92e23f9057771fc07ca32dff1db94f5adfd2f4ff9af31d250dd4f86b22592f60a74575156213f10846c746a920fe39851b32fe4c8b8758765bc5b8b9d5b99263df36f97888053fd10f1d68f577aed559bcfde744bc6511076cafd68944a0ed10552d11344bc7e4d9ef936dacced527433132959b1c7324ad1c4cbc3a1a736b1f02aae8e0611ae23fdd474f5b8ee7056fcb5af6133ecc084bb9f1f50cbdac66244437b4348f4edfe237fc3c3829ab94eb4f14cab1ccd6caee36fadc20a310cf0690622cdca848aed03ff403a6633f4f657994b780dd6048149c3bfbc17889e37d90b1e5420eb3d4596b91ba11bc0229c65d05b93cd7e0454d1f3c6e1e8071983792c4d4368d0778aef4e123335fd2962c657bd0513571a5fce211de62874f27ca10dc15ba2d445f1cf4be5f833cf0b564c022576b98c0a24349b67085f92202675d7dac48b95e3bfd6555a9ecb7c72f08bfec0d220222492fdc9636f036ec4508a365b7b70979f9eb4a7263a8bacb1c1d0155738646cdd46ab9234a170311500d0bae6e55a863bdaa56f51645ad85297a7381f8d20cf96c474d1bb81fce132b14555d1a\",\n        \"signed\": \"781376c9512fa33c457047a1f4f0da3176e60ee47782869b7e9fa5841d964f3c1ad66b70c114b1771c324c83ff6cd997aefccdc59c114db9f2f3ca7d84a7b60fe33430c38c4a40b3c66e20cf3b70e9fea8cc50761f2afe249ec059c07bc3b37e5b94f4a43e310099b19a85f59dff73a7e495c4df31f74780cdef7bd6e47c394c1891ea3052e3ccf5d84bae082d24ba7178ac65d229ad18a84940f6b4dbc596ee63c181b57b5b49698979c18632fa821ca61e35a0d0351fe13d69e06ddcc8d666dca24502177f344e2f440575d39ebfe5e7f10653b65bef291dc813a0434c975de164c1a76bf6fcef98f23181c009b91830b618e4874847d2e21bbdb93f20cd8b1f4baadf99428a22674386a668152b4b9039ff06abcfe334a062f794056172ecbc0794df98271b9acfe4b7da553a87634237630009a05b257c184cbe23d9cd5a038658010f574899f3b2d154d185ee67230913650c3a05b54a2edc243a4287398e376928ea9c6b2cbaf371252540e2b8043fcf556813196ae572c27cfb5a46abb9729af2dcfc29e033dd11f33e86cc6ac3bce6f3f9577d36781a69ed7eaf8c8263a0f18eba0fe8a481f3e15a55599434195f7cb057dd364eaa07dd0dfd266b807f53a2070fd791e872422fd907134f4a8a78a876bdcb031ac860dfe0bb57e105db8287b31a604eb71269be5ba229985ceabc2bdf165ac741650b1f013a66c9bd243d03a8b1c5081381cb92e23f9057771fc07ca32dff1db94f5adfd2f4ff9af31d250dd4f86b22592f60a74575156213f10846c746a920fe39851b32fe4c8b8758765bc5b8b9d5b99263df36f97888053fd10f1d68f577aed559bcfde744bc6511076cafd68944a0ed10552d11344bc7e4d9ef936dacced527433132959b1c7324ad1c4cbc3a1a736b1f02aae8e0611ae23fdd474f5b8ee7056fcb5af6133ecc084bb9f1f50cbdac66244437b4348f4edfe237fc3c3829ab94eb4f14cab1ccd6caee36fadc20a310cf0690622cdca848aed03ff403a6633f4f657994b780dd6048149c3bfbc17889e37d90b1e5420eb3d4596b91ba11bc0229c65d05b93cd7e0454d1f3c6e1e8071983792c4d4368d0778aef4e123335fd2962c657bd0513571a5fce211de62874f27ca10dc15ba2d445f1cf4be5f833cf0b564c022576b98c0a24349b67085f92202675d7dac48b95e3bfd6555a9ecb7c72f08bfec0d220222492fdc9636f036ec4508a365b7b70979f9eb4a7263a8bacb1c1d0155738646cdd46ab9234a170311500d0bae6e55a863bdaa56f51645ad85297a7381f8d20cf96c474d1bb81fce132b14555d1a\",\n        \"signature\": \"781376c9512fa33c457047a1f4f0da3176e60ee47782869b7e9fa5841d964f3c1ad66b70c114b1771c324c83ff6cd997aefccdc59c114db9f2f3ca7d84a7b60f\"\n    },\n    {\n        \"secret_key\": \"107da98d0ee8e7c00f6d41ec265944ce67ef8c8ffb51f4f11f4e5f1a27fbe805\",\n        \"public_key\": \"3bec34b161b1bcff009f8cfc50d84ceb6a2d5b203b5238a8aad8a83618b442e7\",\n        \"message\": \"1a7b7f3e1c7c41492a7ce799efdb2d9dc2f2489c84ae28bb7d084f32eca8fbb066885ac6f2ef7449e71226a82e9f153772a993eb6b6bca6491d26aca5dee98b77a1ddc59922b3145c447de737fafacba5a75f2a80137b5594697220d19617674a69113fdf77c343af2b7e3861b5b7822f58d60089c3ca54c749d27f88379c067598f063939ba8631d1f52dc9ab455045fb360cc2a5b6b0127facfcf5b1b4c33e3f194fc924b854168cb1169ab10997b438b71c80878347be887af44810134b514c806908201a3d3e6d0c56120c4314874dc2944d8444f01bafa34aa62ecef0981545e5d02f4016c0b164fc05ae18f535c31bf20b86f31f7a794aba148984c3ff433dc222c443b5d26c1f66e6c5f19d19cd6eadd4dc94101b2f52b58c9d4590cb10dbc5d6eacd11d42ed09f15bde44ee9271def292f731bf3b4ac6cd127e4884c2cb30b285fc9247638a299e416520624d1ec8d0df2498939c719a9e7bd29a3c5c32a3e8241368d6e4f90fea29dc3a3f147ea9f76c5780e73143f55d3dec7b66341d3f3eac1d98f8e7d4e877509b4438c3a52466d242a10b4c27c4a0db9232dad011414ebfbd57906f1a410207b526b0d1f1b6986b3ebd7550a2b3c15fc2409c7626e0dd330ef6722e3ba48b1d9205652ac194c21473ce258559db511efad3e5d55f2a796d65a6ab97d8631062a593a13aaa095dbc93e6217ced619cb16a57e744355a16b15e77d4979119299bb043e48fa3e615460e164882984a223d418ca95340c5bfcda673fcd13b29f2c47d2f97e3e8c613b6c58df0e62cf23061d6f545b755033fd3dc1405e5fef35a13e015f98b1cc42f71b99681f9681258229a4473d86eabb0c17927941e50c08f34a76b43bcc6d042e5632ef9ccc91b6e6950f5d30f670fb3902c3d409315a40b0821ce8a99a97feca5478bfd782e78767b311f374163f5896b0beb95838e645878c64990385123b61575dd842dc76354bac9c6d5acd9935b609bcccb8463d39225da1afb8911d36e609892dd1723852ab9f82758f3f1e4d28dcf02cb06eed26844aae6882ed44bce44abcd1dfba633418c9f155879c97ab27f8ae238330392be5491a078662daaa02a3d5458b77c549c49be201245e7aaec0d94e5437beca6e5ab046d694e96bf51e04fb44379b2b9b801675fe1477f3e089874a601171d8b68f0202014601a53f812f53e581c3b96312b36b9ee04fff11d9eab4e45148dcc8f0fab1\",\n        \"signed\": \"53252b923ad19cc39784d3a9ae59d62a6300dcc50ac8fd0713cb58844501d8d3805afa0fda64c73ea0f60e6a8b3445bfffe6ca6bfdc87e128baf99bf6268fc091a7b7f3e1c7c41492a7ce799efdb2d9dc2f2489c84ae28bb7d084f32eca8fbb066885ac6f2ef7449e71226a82e9f153772a993eb6b6bca6491d26aca5dee98b77a1ddc59922b3145c447de737fafacba5a75f2a80137b5594697220d19617674a69113fdf77c343af2b7e3861b5b7822f58d60089c3ca54c749d27f88379c067598f063939ba8631d1f52dc9ab455045fb360cc2a5b6b0127facfcf5b1b4c33e3f194fc924b854168cb1169ab10997b438b71c80878347be887af44810134b514c806908201a3d3e6d0c56120c4314874dc2944d8444f01bafa34aa62ecef0981545e5d02f4016c0b164fc05ae18f535c31bf20b86f31f7a794aba148984c3ff433dc222c443b5d26c1f66e6c5f19d19cd6eadd4dc94101b2f52b58c9d4590cb10dbc5d6eacd11d42ed09f15bde44ee9271def292f731bf3b4ac6cd127e4884c2cb30b285fc9247638a299e416520624d1ec8d0df2498939c719a9e7bd29a3c5c32a3e8241368d6e4f90fea29dc3a3f147ea9f76c5780e73143f55d3dec7b66341d3f3eac1d98f8e7d4e877509b4438c3a52466d242a10b4c27c4a0db9232dad011414ebfbd57906f1a410207b526b0d1f1b6986b3ebd7550a2b3c15fc2409c7626e0dd330ef6722e3ba48b1d9205652ac194c21473ce258559db511efad3e5d55f2a796d65a6ab97d8631062a593a13aaa095dbc93e6217ced619cb16a57e744355a16b15e77d4979119299bb043e48fa3e615460e164882984a223d418ca95340c5bfcda673fcd13b29f2c47d2f97e3e8c613b6c58df0e62cf23061d6f545b755033fd3dc1405e5fef35a13e015f98b1cc42f71b99681f9681258229a4473d86eabb0c17927941e50c08f34a76b43bcc6d042e5632ef9ccc91b6e6950f5d30f670fb3902c3d409315a40b0821ce8a99a97feca5478bfd782e78767b311f374163f5896b0beb95838e645878c64990385123b61575dd842dc76354bac9c6d5acd9935b609bcccb8463d39225da1afb8911d36e609892dd1723852ab9f82758f3f1e4d28dcf02cb06eed26844aae6882ed44bce44abcd1dfba633418c9f155879c97ab27f8ae238330392be5491a078662daaa02a3d5458b77c549c49be201245e7aaec0d94e5437beca6e5ab046d694e96bf51e04fb44379b2b9b801675fe1477f3e089874a601171d8b68f0202014601a53f812f53e581c3b96312b36b9ee04fff11d9eab4e45148dcc8f0fab1\",\n        \"signature\": \"53252b923ad19cc39784d3a9ae59d62a6300dcc50ac8fd0713cb58844501d8d3805afa0fda64c73ea0f60e6a8b3445bfffe6ca6bfdc87e128baf99bf6268fc09\"\n    },\n    {\n        \"secret_key\": \"8bc229fc234653b13c924710cb468b8fa9b280e2adb49cb4b36bf59d6fa4a639\",\n        \"public_key\": \"46146975df6704cbf45320a5e6cb6de813469f3131e61d447bbca1a477a0c557\",\n        \"message\": \"bae2dc7f94ab5ccdcaa8cf49edbef0f6d7aeb1fa8907800533af4492611194e56cef37b1f033303738ae2c3bc4588f5cb3d55f345b9a407e787742a06af0b6ee20dee3dfe9c91d762a3ebd19aed07907bbb91cd776326540ded9f7ff7dda76615f978e9490f406ed2d9116e2093fa785e971b5062d31cb40fff9e3c551a73b20245d46df4d7fd1303a28180172d9a2bf5593c47917b58690917c1fb0e1e2994d1fa97735ae378de6eafd5c1a25abafa3cfd2df7aeabd6e68fc44edf82fc83694e5d841a15b14568b6110be644bf22b71fc47d7f07e1666957d0f87da17f13fcd63c1c2966f687d25dcbd9963f01eff132d5f2b86677816588c123e9457befcced2d3cd1d1bebe8dd8fbb1587e553cbcc4c8762064cd32ef7a1702410f77f15240d7e2bb582c678c0da88ef4522830b143660ac9c434d95772e6eeeed6014ae16824ccdc4df2df64aeb6980b51d118985dcbbd1961f315e6a9433f0b96b1e6351257ead83e05b4cc89c924bf83558ba7d2e7ca37c03179a8f85b831e7217bf4c553838761d32602853b81593b0ebf8e4b9ffaf0ec405b2a83af7de5554daad28b582ee08bd84b375550cae08ae4a5bda71581fc3b7b54498c4e1afb966b4af1d9c843a6b25b34e04cfd9bd2374244f1fe20ec62be3ccfab4edef79ed64e6b71aa9228127c6359ea1c4a8087890896ffa46e0092dec7efbc960a17b770916f954070132e26d98d9774a2acdf809d586df0252f67cfe8d985a3e248db0f90731ace7abd999c746b69648d5c3b4bd61137e08fcc8b2efc5676bcd856a13b362151474c4a1efdedc592cf3ead1ababcd48ee204d27726ad1bda4fe4b09ab51089d016de6ba259ea81807faf211c87e4c9efbf6a4c753e08f780ed55338c0fde14fb99b30722b5594b3abe02047f466242421fb81176c9c4f0fd2b5e7c5a0f65a0c59aa8c3a986087de7ba40baca77bd36ac21ce34e9fe97facc4e298330eece1c8ec623e66a4b0f2342d2c5a02c5f5abddc5ff1f1f2d03c1d4ee9b4b342ed3b1cc26561f3217bf8500e08f027571c53c9232605a53f2bda024e39929163a8e00791ac0656bb0783825e7105ffa9d90969dc094af46f702e85cc11e442b3d5534c1d3275207d6d29a942c358ed5fa07557c3c014cf541f9aaeea6025b41ecdd848512ba25e721e43d329185f8f94892e9e2d5e7cbb99e7ad25f69e5bef732cfceb078611553cc78377375e74e66f1b9d8d20\",\n        \"signed\": \"d243b87d1397d594139d83c39acf8501d073bd4be718b4c206980729e720a4c5b0ea91a28ea12604a987e69591c543049f2973bb91c170213c32a64a0fac8204bae2dc7f94ab5ccdcaa8cf49edbef0f6d7aeb1fa8907800533af4492611194e56cef37b1f033303738ae2c3bc4588f5cb3d55f345b9a407e787742a06af0b6ee20dee3dfe9c91d762a3ebd19aed07907bbb91cd776326540ded9f7ff7dda76615f978e9490f406ed2d9116e2093fa785e971b5062d31cb40fff9e3c551a73b20245d46df4d7fd1303a28180172d9a2bf5593c47917b58690917c1fb0e1e2994d1fa97735ae378de6eafd5c1a25abafa3cfd2df7aeabd6e68fc44edf82fc83694e5d841a15b14568b6110be644bf22b71fc47d7f07e1666957d0f87da17f13fcd63c1c2966f687d25dcbd9963f01eff132d5f2b86677816588c123e9457befcced2d3cd1d1bebe8dd8fbb1587e553cbcc4c8762064cd32ef7a1702410f77f15240d7e2bb582c678c0da88ef4522830b143660ac9c434d95772e6eeeed6014ae16824ccdc4df2df64aeb6980b51d118985dcbbd1961f315e6a9433f0b96b1e6351257ead83e05b4cc89c924bf83558ba7d2e7ca37c03179a8f85b831e7217bf4c553838761d32602853b81593b0ebf8e4b9ffaf0ec405b2a83af7de5554daad28b582ee08bd84b375550cae08ae4a5bda71581fc3b7b54498c4e1afb966b4af1d9c843a6b25b34e04cfd9bd2374244f1fe20ec62be3ccfab4edef79ed64e6b71aa9228127c6359ea1c4a8087890896ffa46e0092dec7efbc960a17b770916f954070132e26d98d9774a2acdf809d586df0252f67cfe8d985a3e248db0f90731ace7abd999c746b69648d5c3b4bd61137e08fcc8b2efc5676bcd856a13b362151474c4a1efdedc592cf3ead1ababcd48ee204d27726ad1bda4fe4b09ab51089d016de6ba259ea81807faf211c87e4c9efbf6a4c753e08f780ed55338c0fde14fb99b30722b5594b3abe02047f466242421fb81176c9c4f0fd2b5e7c5a0f65a0c59aa8c3a986087de7ba40baca77bd36ac21ce34e9fe97facc4e298330eece1c8ec623e66a4b0f2342d2c5a02c5f5abddc5ff1f1f2d03c1d4ee9b4b342ed3b1cc26561f3217bf8500e08f027571c53c9232605a53f2bda024e39929163a8e00791ac0656bb0783825e7105ffa9d90969dc094af46f702e85cc11e442b3d5534c1d3275207d6d29a942c358ed5fa07557c3c014cf541f9aaeea6025b41ecdd848512ba25e721e43d329185f8f94892e9e2d5e7cbb99e7ad25f69e5bef732cfceb078611553cc78377375e74e66f1b9d8d20\",\n        \"signature\": \"d243b87d1397d594139d83c39acf8501d073bd4be718b4c206980729e720a4c5b0ea91a28ea12604a987e69591c543049f2973bb91c170213c32a64a0fac8204\"\n    },\n    {\n        \"secret_key\": \"3edb50ff074ef9717f4fb0b6ce252bf4bd049c9083775f529eaf51e975cb3245\",\n        \"public_key\": \"4bc21fe03e679abbfcd8c5ea2bcc4d838a787d4840c3bc39de4b04c417c768a5\",\n        \"message\": \"975ece4e81f0015f5ac3044609d0ac3a8df9145b50c42889dd312f563cf6126e36fffaf21eb6b84fbda15aa85c66145f7541e5b41a8e81700be356224fc109327a6919665673534f5c8a4a001750b199dbfd630691af552d4d26a9d9afb33a16af391154124b53426c9f695057b1814fd6d310298af6c830686a4a007a14e0057b72fbad5b803ad353d1c3fdb890a9c81808e89f229187bcb44fee16a4ebcad5eba459b028272a562c05079fa7ae3ecae804a9e8c4f3f315813c5ee0841bbccfe4a95623b517a4b42b2c6d97a3bf26acdbe2e979633f02aac466526a3ebb14da19bc95f2c3fdf6bdb08be8bde97a864c907e918c679ab726f80177145840216b9dc3f981ef17874f08b2fc6611a6346c3da6a55ecfa753c9919f4f19e3c79093bfd78f861598e4666e1cab688e4604d46c9c582eadb92c988f478d160f5a15182b3340201797d0b955282e4a217b50b14b10c9f49067ea3e84e5274dcaec74474c5707c28bba0db8cde3e838d7313c171b85ff2b9a3d2b167e9061f84df3b13bdd08b2d501e53792d68054d048abfe3bce98d978256f2fd2c6c4e76f39688cccf0fe149af9d347e7b040ef241dd5a53eaa5eab35a18c68c754a06b03399bbe56a25268c829a5ba82b28192041d3bd244eb08bf78e76def87cd09f32beac9bb639823b36967a574d8960d1bd03435679d93eddc558063c540b9c2f609fed2e2e3576d19e6209eab466c206791c3aa199623fbae7d3497e80fdd3fcbaf5b89110ed72244234be85cca4b27a09bb70a26ece4eb8dd970a26e5b04361fa50e90380ed65f414c1be9f5064f71429116267edd6976422ad92deb2b804a92e81c9f6522a0f3b5d8ad36b4f87db516a22873e6f27284f2ca360a2f40ff3d8e23dec8ef8a17a43acbb61271a727cb8690d29bb82016736b31026201dd3d388d2c643a73cfbd0a94e20551fb5f8e1ffc39741272aa2308dc8d2133a3fa9cf109796d69d2cc8addc44ae2527781ee993af2a637a872f02aff474a7073f29d9c89507701fecbbfd5101353537eba17c29669dac0427e38e22dfaac91fc20d9e3fee791f462a863bb1908fb1e4204b68880314ddacaaa35a17af5f57a399f1931e78f5a37454fd38c57a68e8d367848a97345189c70077fd1aa0754e703e352618063b9e3faf3b14b5f0b27113633c5d17363741e96a67e816401e8098c17bffe9c6f3587646f40e9fdb6819fd22a743a7a6e10feba11\",\n        \"signed\": \"deb3d9fc7b2d86ab4b926f99527970abb51838bcc2919e94cda3371fd0e7693fe37e0c40e1233b09ffa903a034dde287c0237dc594f53abc87844869dce92002975ece4e81f0015f5ac3044609d0ac3a8df9145b50c42889dd312f563cf6126e36fffaf21eb6b84fbda15aa85c66145f7541e5b41a8e81700be356224fc109327a6919665673534f5c8a4a001750b199dbfd630691af552d4d26a9d9afb33a16af391154124b53426c9f695057b1814fd6d310298af6c830686a4a007a14e0057b72fbad5b803ad353d1c3fdb890a9c81808e89f229187bcb44fee16a4ebcad5eba459b028272a562c05079fa7ae3ecae804a9e8c4f3f315813c5ee0841bbccfe4a95623b517a4b42b2c6d97a3bf26acdbe2e979633f02aac466526a3ebb14da19bc95f2c3fdf6bdb08be8bde97a864c907e918c679ab726f80177145840216b9dc3f981ef17874f08b2fc6611a6346c3da6a55ecfa753c9919f4f19e3c79093bfd78f861598e4666e1cab688e4604d46c9c582eadb92c988f478d160f5a15182b3340201797d0b955282e4a217b50b14b10c9f49067ea3e84e5274dcaec74474c5707c28bba0db8cde3e838d7313c171b85ff2b9a3d2b167e9061f84df3b13bdd08b2d501e53792d68054d048abfe3bce98d978256f2fd2c6c4e76f39688cccf0fe149af9d347e7b040ef241dd5a53eaa5eab35a18c68c754a06b03399bbe56a25268c829a5ba82b28192041d3bd244eb08bf78e76def87cd09f32beac9bb639823b36967a574d8960d1bd03435679d93eddc558063c540b9c2f609fed2e2e3576d19e6209eab466c206791c3aa199623fbae7d3497e80fdd3fcbaf5b89110ed72244234be85cca4b27a09bb70a26ece4eb8dd970a26e5b04361fa50e90380ed65f414c1be9f5064f71429116267edd6976422ad92deb2b804a92e81c9f6522a0f3b5d8ad36b4f87db516a22873e6f27284f2ca360a2f40ff3d8e23dec8ef8a17a43acbb61271a727cb8690d29bb82016736b31026201dd3d388d2c643a73cfbd0a94e20551fb5f8e1ffc39741272aa2308dc8d2133a3fa9cf109796d69d2cc8addc44ae2527781ee993af2a637a872f02aff474a7073f29d9c89507701fecbbfd5101353537eba17c29669dac0427e38e22dfaac91fc20d9e3fee791f462a863bb1908fb1e4204b68880314ddacaaa35a17af5f57a399f1931e78f5a37454fd38c57a68e8d367848a97345189c70077fd1aa0754e703e352618063b9e3faf3b14b5f0b27113633c5d17363741e96a67e816401e8098c17bffe9c6f3587646f40e9fdb6819fd22a743a7a6e10feba11\",\n        \"signature\": \"deb3d9fc7b2d86ab4b926f99527970abb51838bcc2919e94cda3371fd0e7693fe37e0c40e1233b09ffa903a034dde287c0237dc594f53abc87844869dce92002\"\n    },\n    {\n        \"secret_key\": \"cda4ba93940aa0c0c3150b3929b95ee7769ce43fd98ecaff9c4a509e736d5c8e\",\n        \"public_key\": \"f4c7a25f1a743daf41417e47e027537f24f481bd1a75e6b1d33ec4c82c55a2d3\",\n        \"message\": \"3a1d668c6688414896a7697f3c2e431098edfc457e04d2da869568ad5b3310e59e4c727c903cbf1817408802319a8c231b58023dfae494c013af0fdb78c91d5b457f8c47a3dc31d8c8594aa08f146203fa2c28b3dd796a11a97adede6a7a709b5a1918ef1bea83533c783473703356f5beea7fd18ac44ec6890495ed170d03f15b418608a7d9efd52fa10918638051c448d98d5724f567c8c67fd5b6ec8c3d636008b9bae5e8b1e984f8ffb8b64beebd6345a105c1c1083132fd4508d6ac0d4e9145501210e517d9b22478e215b602599f803762dcd5a409b3460e7f340f47ef77281ad2383de08c5b809538aaec922bfca0d6752f147972646d0a8d8340772c871d3b34abc06037de3ab4e37129865d5ba70b6f3cc9a059efb7dddc3882f4fcfe13f448c9bc664888589603ba98683a93b4b3b1014992a55c8e4ea1baf9cc00d1badff5fd7f5da5e307fbd1b4c984e0fa0edec5d30bfef5f477301263b5d752001b85dd52df3b4a7ac23b930a91c0a45765a66488d8eb5901857060067b82378188549288ddc61831e5b6841b344cae2250042219cfb4ace023e691f9e48d006e9a07c67d2468f93593b4afc161c0768b6ceb744c24c923da34af3d5ed577cc7f85d491560f4c0bcbcd1d5e3421bd1ccfafb373d651bd61ed71c09e99f612001704d0c630d8547bd970b66e7f5ce7a014e0ff5a337dc5c56a99f131b9129140eeea39397c48caa9a8086f9fd99150be7ef87b6d4b94b1bd52878bf3bbfcceacc2cc45e8971c3a4d4a3eb86af9874d4fa5e7caa7f45d1553ffbb41645bf0f5e9b29772e3dc081b25b52e1cb7e2167483d54fba690ddb29d5462d2a27a35d85f007adede2a3dd7281f654336afafb7370782b29cad643d9d9db2f05f281b53e133ec30eec09fb0d061b74581a2bd2790b137391f19328880f64c53be700d0faddb70dc165d2d62e671eb9449a2e6e9df2c16d8f49fa4b5b84309f7335133dbe872c5a8fdcfbc4980abfb3c9597d5d667ad2f688c7ab24c9e440298d72b28b0fcde9c6f071bccc93e8ddbba7b60a0b544a2e06c39c6723d4f7dc185c21135fd13a72770b976119e49a1f81ed476be07c443de0b0ee76fbd919389328b3eb8607bc2fe38f85745e28adb7482b701ccc6690e4ae5a9332ea44613179387dc6fc47c1d1ec366035e991e1404323bdbbf535f1c33cf57b6723f13ca6ca329e2aaa4b46b42607339906c7ef49b32db82cdf6a87ad\",\n        \"signed\": \"31048d334af05a4f275ff827544ea296a4a775fa59efa000c57613fa6e5c493c3a9b79e8ce56e7225b0fa326204f0336c213535ae589177a8eaedb6df8b202033a1d668c6688414896a7697f3c2e431098edfc457e04d2da869568ad5b3310e59e4c727c903cbf1817408802319a8c231b58023dfae494c013af0fdb78c91d5b457f8c47a3dc31d8c8594aa08f146203fa2c28b3dd796a11a97adede6a7a709b5a1918ef1bea83533c783473703356f5beea7fd18ac44ec6890495ed170d03f15b418608a7d9efd52fa10918638051c448d98d5724f567c8c67fd5b6ec8c3d636008b9bae5e8b1e984f8ffb8b64beebd6345a105c1c1083132fd4508d6ac0d4e9145501210e517d9b22478e215b602599f803762dcd5a409b3460e7f340f47ef77281ad2383de08c5b809538aaec922bfca0d6752f147972646d0a8d8340772c871d3b34abc06037de3ab4e37129865d5ba70b6f3cc9a059efb7dddc3882f4fcfe13f448c9bc664888589603ba98683a93b4b3b1014992a55c8e4ea1baf9cc00d1badff5fd7f5da5e307fbd1b4c984e0fa0edec5d30bfef5f477301263b5d752001b85dd52df3b4a7ac23b930a91c0a45765a66488d8eb5901857060067b82378188549288ddc61831e5b6841b344cae2250042219cfb4ace023e691f9e48d006e9a07c67d2468f93593b4afc161c0768b6ceb744c24c923da34af3d5ed577cc7f85d491560f4c0bcbcd1d5e3421bd1ccfafb373d651bd61ed71c09e99f612001704d0c630d8547bd970b66e7f5ce7a014e0ff5a337dc5c56a99f131b9129140eeea39397c48caa9a8086f9fd99150be7ef87b6d4b94b1bd52878bf3bbfcceacc2cc45e8971c3a4d4a3eb86af9874d4fa5e7caa7f45d1553ffbb41645bf0f5e9b29772e3dc081b25b52e1cb7e2167483d54fba690ddb29d5462d2a27a35d85f007adede2a3dd7281f654336afafb7370782b29cad643d9d9db2f05f281b53e133ec30eec09fb0d061b74581a2bd2790b137391f19328880f64c53be700d0faddb70dc165d2d62e671eb9449a2e6e9df2c16d8f49fa4b5b84309f7335133dbe872c5a8fdcfbc4980abfb3c9597d5d667ad2f688c7ab24c9e440298d72b28b0fcde9c6f071bccc93e8ddbba7b60a0b544a2e06c39c6723d4f7dc185c21135fd13a72770b976119e49a1f81ed476be07c443de0b0ee76fbd919389328b3eb8607bc2fe38f85745e28adb7482b701ccc6690e4ae5a9332ea44613179387dc6fc47c1d1ec366035e991e1404323bdbbf535f1c33cf57b6723f13ca6ca329e2aaa4b46b42607339906c7ef49b32db82cdf6a87ad\",\n        \"signature\": \"31048d334af05a4f275ff827544ea296a4a775fa59efa000c57613fa6e5c493c3a9b79e8ce56e7225b0fa326204f0336c213535ae589177a8eaedb6df8b20203\"\n    },\n    {\n        \"secret_key\": \"217ecd6a7fcc98719210c34cc2e14f5e2d6b5a22f268c14bc4d8a7f2817200c3\",\n        \"public_key\": \"d59191ce282d72fe3ac45878e24bb2f28c409ba05d76ce9bcf22f50b0c778675\",\n        \"message\": \"9b5337e78fb382f22ea60e03c0bf3ee4700b6978a91ee6acdf6a409e4918d1684881fa1d118c08c9f6f2ca0cab567402c95010e7abdfe848ae79ba249adcb96eae1dfa0843952139cf49b588647895691a2e9880466b7e77e54f6f60815ebfd5e5748f413c0e15f9d576799bcf31284710636f6e9dc7878500796eed80c8af4be2961952ea80bbed1404bd5dae9e6d05fd4f325a3b83cd4528a0869cef84b4d30e02f941d749a8dac97bb3fa839d25739b97ec374536bdea500484a941db9f2299970658d41148295ca0846ca2366238b6201a48b3e447edbea7a4c8f71020142769e15fa72ae5f287140bc5953b8a9a242d205fc019091f2abed0fda47f52d59a0204ce7401c1829b5857b9a0916fcebe2eef991c413acd71b18d8590d6b6d0fb3994302678c29f2b6a53023f9187e46c36790bce73873c545a72beb553294b1ee5d0d0dff239e28ec63b01e4d8fe0d6e69b1601efa2411f0c0601e7e4f65c984f829f0dc2a8421e7f66d9330537151c7243ca524d7a54735c6e344f1fc938eaeea2779c940891d6d01aa55f40cc1adba12e8a67ad9a27fe63fb4f38dc0f01841925718427255bd665d5eb3bc869896db8625204ad4b02f5a22aaeead6e300471fea61dbb1b55c071365c58b1511f38b09a4671bd66b3fedda9c87e43d1ebf301764e18fc0cf16b2d2d67ed239b393ac71968a903c02477fb2df9ef01dbfc3167de7265f891e4fd24d02c63103519b86a7085b1ec2fb419db766bee7a641a4be429614ab89f20f975341072bf04419fb69be7a9ee71a5b49af83ed322bac68a429ff5c5206773be5438b65e53f609729f4f6a21c1333911264d63927017e8136b4725cd1cc964e08ca0933a561e7e3f5987768330e2e54f8d728f59edfe2c91c4f99aef97d18559195a3d8eb315dff96fe276da7137eff93057ac731e06a60a58bd8a9ae8c7cbaff0cb3372c68daa175c428d52f1073a38bf29465d2a7128bb40074006edcb725a831d812864ef43f3b8667c9fb71093a1673049dec05e09169d86fee92df286008ad99065a2929797a913d0233f4d1a95a220bd91c11dd9c45685dcad385780a0c48b9c4ad2d66303e8de4af1db3c04e4a3dd4219fe773f83a8924b0fcbfffcf264abce32832924036bfabba6546b1df4e3f788ed8ad5c2cd92b2641b47090a103cf5bdc46d8b2143174757da801c360a7aa107fac654b34c860bd54f76bbf43c48478df4fe7aa59cf91d\",\n        \"signed\": \"a0b169e8e9ce557555e0334a0de7438e553675489ea4ba9cc63a234d00ded8ab6967a3be90ef69e076db9ea3d5ca23b3248dd25991ee1f4d80620bf4db438f0e9b5337e78fb382f22ea60e03c0bf3ee4700b6978a91ee6acdf6a409e4918d1684881fa1d118c08c9f6f2ca0cab567402c95010e7abdfe848ae79ba249adcb96eae1dfa0843952139cf49b588647895691a2e9880466b7e77e54f6f60815ebfd5e5748f413c0e15f9d576799bcf31284710636f6e9dc7878500796eed80c8af4be2961952ea80bbed1404bd5dae9e6d05fd4f325a3b83cd4528a0869cef84b4d30e02f941d749a8dac97bb3fa839d25739b97ec374536bdea500484a941db9f2299970658d41148295ca0846ca2366238b6201a48b3e447edbea7a4c8f71020142769e15fa72ae5f287140bc5953b8a9a242d205fc019091f2abed0fda47f52d59a0204ce7401c1829b5857b9a0916fcebe2eef991c413acd71b18d8590d6b6d0fb3994302678c29f2b6a53023f9187e46c36790bce73873c545a72beb553294b1ee5d0d0dff239e28ec63b01e4d8fe0d6e69b1601efa2411f0c0601e7e4f65c984f829f0dc2a8421e7f66d9330537151c7243ca524d7a54735c6e344f1fc938eaeea2779c940891d6d01aa55f40cc1adba12e8a67ad9a27fe63fb4f38dc0f01841925718427255bd665d5eb3bc869896db8625204ad4b02f5a22aaeead6e300471fea61dbb1b55c071365c58b1511f38b09a4671bd66b3fedda9c87e43d1ebf301764e18fc0cf16b2d2d67ed239b393ac71968a903c02477fb2df9ef01dbfc3167de7265f891e4fd24d02c63103519b86a7085b1ec2fb419db766bee7a641a4be429614ab89f20f975341072bf04419fb69be7a9ee71a5b49af83ed322bac68a429ff5c5206773be5438b65e53f609729f4f6a21c1333911264d63927017e8136b4725cd1cc964e08ca0933a561e7e3f5987768330e2e54f8d728f59edfe2c91c4f99aef97d18559195a3d8eb315dff96fe276da7137eff93057ac731e06a60a58bd8a9ae8c7cbaff0cb3372c68daa175c428d52f1073a38bf29465d2a7128bb40074006edcb725a831d812864ef43f3b8667c9fb71093a1673049dec05e09169d86fee92df286008ad99065a2929797a913d0233f4d1a95a220bd91c11dd9c45685dcad385780a0c48b9c4ad2d66303e8de4af1db3c04e4a3dd4219fe773f83a8924b0fcbfffcf264abce32832924036bfabba6546b1df4e3f788ed8ad5c2cd92b2641b47090a103cf5bdc46d8b2143174757da801c360a7aa107fac654b34c860bd54f76bbf43c48478df4fe7aa59cf91d\",\n        \"signature\": \"a0b169e8e9ce557555e0334a0de7438e553675489ea4ba9cc63a234d00ded8ab6967a3be90ef69e076db9ea3d5ca23b3248dd25991ee1f4d80620bf4db438f0e\"\n    },\n    {\n        \"secret_key\": \"08d1d06f3ec29eb52293907b705ec56c5ab354fb78673773ae61253094b89e82\",\n        \"public_key\": \"c1b99a87ad15bd46f6c848452af0fa3ccccb5cdf6e348d816e36c5d0fca66e66\",\n        \"message\": \"120b35573c34914b373051880da27ed241377f0e78972c98d0faebaa767eb7a7c7e7c6fc3405a4336ef95bc5da9225bbd09e9e11f2a1bf142af4e8a0f924d323dd5a49dfe584f090439c08e51511344d470c6200ac7e7ca150d088a91e47c4c9ff74e38a42a332155d8152ae4abd1161adca934c234ce460af8789e53f109d7d31eede0a909bd193fc8d3c2cfec10b143c31476711bbec27e196a54985bc347167acd233508827bad36e548c880642b86a28c6d3404b511da24f11dfaf6a8f46ddcbc9de9e391597669bddfca6560f91acd3459f329bb071dd80dadf35f0e50df5b10f88d267ac9d3062330dd99a6bcfa13187f45c0c214dcde2cdf9c3ba4d59e633a354a4e277c677bbdfa24191179cbcaf05a10d4078d8add93bc9ed8f6c6c499757403655341f904e37d927750c699c269dc90dc26d005625c3f4124bff66feca59d4abff4172ba3df45a874302231030fa783384f50999e3c4baa5eadb451452c888b519272e90f73c6872768e0de20ee2e5f9502f35e49fecc28b75201887fed2818eff545398392f5e5b6876bc556ac13a1903ada1b9d725b04a14204b599ec33d62b7dcaeea8c52877b2cfdc3558a91d2c9157500a3bb6d452e5e2ff093294fc433cbd63465bb191307ed801a15b85dc2ff0bb38312f8b817a436d422cf4607c64ee7035923db6b96a3899910149b0da4aa3e96685d7163aacf9e619dc60813ce4f344f3079b43f187fa31bdacb9a1d7720b939d5bd241b96a177d7b7768ffebf79044cd2956d6f88db1c243a10fede6814852cf404b2cdcfa774076dc125c70a57c6907e99afe39622ae11f557e7d34b39aaaf45f834058d2fe5f15b5eb70ac15a90a3de5850ab1dcb48b06b6ccaa4b42f857e71ec00b8a3d8974b0bea68fa0f665592115b4fa55572cf0b0738641fc868d4a2e714db3ad7219a823d54b7f7c2656ba5c5eebe3594c7db12298c16251d9845bf2f7800b4190b746e21b0c1a5c47a3df9a059ce0956674eb703decb0a0045437da4da10f286d720d1b9df05fb24415d68e065570e6b31503142d03335a807bdca30892edb5f55f8989d9e649659c0744c5433bfb4deeb11c2626a8650e54d4d398ba19b64f68bed06d7fc408f470ac704e2ac922ac1411fee24543e56f2f50b6b08953dc56a7a75edae430a6df28a227adac91ba26f0e198595327739cba303e9aa393ea6618a84f8f503d0056ee8d87e3796e036cc51ccb791deb795\",\n        \"signed\": \"0b8edcb8b15a8cd074c41dc2a1ba29d9648d6acbdc338314707eca6fb4714c99543b4907b9f85e57eecffe0f7a6b7073a80946f8087553f4683109273a604a08120b35573c34914b373051880da27ed241377f0e78972c98d0faebaa767eb7a7c7e7c6fc3405a4336ef95bc5da9225bbd09e9e11f2a1bf142af4e8a0f924d323dd5a49dfe584f090439c08e51511344d470c6200ac7e7ca150d088a91e47c4c9ff74e38a42a332155d8152ae4abd1161adca934c234ce460af8789e53f109d7d31eede0a909bd193fc8d3c2cfec10b143c31476711bbec27e196a54985bc347167acd233508827bad36e548c880642b86a28c6d3404b511da24f11dfaf6a8f46ddcbc9de9e391597669bddfca6560f91acd3459f329bb071dd80dadf35f0e50df5b10f88d267ac9d3062330dd99a6bcfa13187f45c0c214dcde2cdf9c3ba4d59e633a354a4e277c677bbdfa24191179cbcaf05a10d4078d8add93bc9ed8f6c6c499757403655341f904e37d927750c699c269dc90dc26d005625c3f4124bff66feca59d4abff4172ba3df45a874302231030fa783384f50999e3c4baa5eadb451452c888b519272e90f73c6872768e0de20ee2e5f9502f35e49fecc28b75201887fed2818eff545398392f5e5b6876bc556ac13a1903ada1b9d725b04a14204b599ec33d62b7dcaeea8c52877b2cfdc3558a91d2c9157500a3bb6d452e5e2ff093294fc433cbd63465bb191307ed801a15b85dc2ff0bb38312f8b817a436d422cf4607c64ee7035923db6b96a3899910149b0da4aa3e96685d7163aacf9e619dc60813ce4f344f3079b43f187fa31bdacb9a1d7720b939d5bd241b96a177d7b7768ffebf79044cd2956d6f88db1c243a10fede6814852cf404b2cdcfa774076dc125c70a57c6907e99afe39622ae11f557e7d34b39aaaf45f834058d2fe5f15b5eb70ac15a90a3de5850ab1dcb48b06b6ccaa4b42f857e71ec00b8a3d8974b0bea68fa0f665592115b4fa55572cf0b0738641fc868d4a2e714db3ad7219a823d54b7f7c2656ba5c5eebe3594c7db12298c16251d9845bf2f7800b4190b746e21b0c1a5c47a3df9a059ce0956674eb703decb0a0045437da4da10f286d720d1b9df05fb24415d68e065570e6b31503142d03335a807bdca30892edb5f55f8989d9e649659c0744c5433bfb4deeb11c2626a8650e54d4d398ba19b64f68bed06d7fc408f470ac704e2ac922ac1411fee24543e56f2f50b6b08953dc56a7a75edae430a6df28a227adac91ba26f0e198595327739cba303e9aa393ea6618a84f8f503d0056ee8d87e3796e036cc51ccb791deb795\",\n        \"signature\": \"0b8edcb8b15a8cd074c41dc2a1ba29d9648d6acbdc338314707eca6fb4714c99543b4907b9f85e57eecffe0f7a6b7073a80946f8087553f4683109273a604a08\"\n    },\n    {\n        \"secret_key\": \"f0c85c76b1532e89aea975156dddb1d3d066f6409f841bb4410922725f269d86\",\n        \"public_key\": \"fd75fc75c36f83498d8f0827f01d3b457f8bc4d9dc55e4a46274ddf0034fe16f\",\n        \"message\": \"ae2eb018d48dbd4f210b16778b5bd2fd14c94e6bbf2b3ff85518e560ab8d3e72201f433420f00f11bc78e0e9f3720875b2e9dc11e04325b8b3f0d465ddab21511c457d6acad8f2fd5fdc0d2823fe6caa66a191a3b6326b32a16befd64d15b361a41513641bceba26bfe93bdf854a4f8f8a0b29f7e28262e2d6e98aa24ac27f6f7883ac01a74c40cce947ebac70e9fef2a16e6289e468950e391e9e24ef58e88a44377269cebafed8987d220dcae2d8b126b6bf812167d023d9baac950d9db8cf52de6306bd48999610c0a433fa9e1771cb832d4197aa340dd0ccd0744fc6b62f90bd3ebb5308cab5f940e2916423cf0f3bf080c06a94f026910460dda809374e6457f064f178e308e7a1b5af4def319007d041778c3d6a419f51badf87663879302b53ff269df442d0e05c958d5baacceed7f5f8afc811c18900ee3b0f61e5dccfd5dac85332d32ebba371aa2d47a606f59546e4bbb605a74677b19a0fe8e95f9f77c0b8b71d07e983004dc2ab2cb3793a323c108dfa7970da00db198674bd34bf7310767f76a224e07bdbc62b9d078cbc75367e2ebaa2c5d274bf3427f2a0cc5dbef0af4e63ad889e131b12bc8ca32d827f7260b0449d0443fa288440efd1364e3c9849477e73ee0ba4240d492af5ce13c34561b45010c109d842c1fed1be3fa9e184aaa14064f43f6dea0b659c5b97893cf2a433bcfb1d2a87eb564bd9092c2666704731f83e56434b2a4299650c7060f9ff7e8aadcb4593f609188d8b467646cfe95270067a1d35cd759fe581af4e62602c02ef14744143eb424f2d9f33a60288c1b25f08e4b2f5feae06cbcc2b2052bf384e1a6fcd8471ce5e5658d77f40c35c415e2a9e09fb583bb7471258e7c806f3c21822dd10f56a640cdc00128d3ba556ba51dcaab47c3baf9f0197d3663de8d093e83173325def1e83a2f5f5acf12ae09f3ce96cd888034dcbe6147dc5998362a4bc406d28846ab1503c17c94f9afd903c9a58e1cebb4abb4ff6f2a41024e06dcaad14f5b70c1b26e69f96ecf14b8da31c621f9ad4e30aeb982378671f7d1f2c4b572c41bb8830840ac5ddced881f8fff210c3c7f236d8c5f2cfdacda29893302fde15282db540cb543737dd77852569221fddcdd68d87e2402179d3a5a77734c275a1d560a462f40318bb6819837da3d305eb49b38650efdc8fe409d40fb94cd5dc3eb02738f38852f671a0c41414b76fb436f3417b8ef300921c009ebbd7cf8e11\",\n        \"signed\": \"4218fe4c1dce795ca92a49a6f4798eb5412dc825860314ec469fed45de3a7bf8ea55e853a349584bd95a826a585a503fd50bfe4c635ef183d07301367e90100aae2eb018d48dbd4f210b16778b5bd2fd14c94e6bbf2b3ff85518e560ab8d3e72201f433420f00f11bc78e0e9f3720875b2e9dc11e04325b8b3f0d465ddab21511c457d6acad8f2fd5fdc0d2823fe6caa66a191a3b6326b32a16befd64d15b361a41513641bceba26bfe93bdf854a4f8f8a0b29f7e28262e2d6e98aa24ac27f6f7883ac01a74c40cce947ebac70e9fef2a16e6289e468950e391e9e24ef58e88a44377269cebafed8987d220dcae2d8b126b6bf812167d023d9baac950d9db8cf52de6306bd48999610c0a433fa9e1771cb832d4197aa340dd0ccd0744fc6b62f90bd3ebb5308cab5f940e2916423cf0f3bf080c06a94f026910460dda809374e6457f064f178e308e7a1b5af4def319007d041778c3d6a419f51badf87663879302b53ff269df442d0e05c958d5baacceed7f5f8afc811c18900ee3b0f61e5dccfd5dac85332d32ebba371aa2d47a606f59546e4bbb605a74677b19a0fe8e95f9f77c0b8b71d07e983004dc2ab2cb3793a323c108dfa7970da00db198674bd34bf7310767f76a224e07bdbc62b9d078cbc75367e2ebaa2c5d274bf3427f2a0cc5dbef0af4e63ad889e131b12bc8ca32d827f7260b0449d0443fa288440efd1364e3c9849477e73ee0ba4240d492af5ce13c34561b45010c109d842c1fed1be3fa9e184aaa14064f43f6dea0b659c5b97893cf2a433bcfb1d2a87eb564bd9092c2666704731f83e56434b2a4299650c7060f9ff7e8aadcb4593f609188d8b467646cfe95270067a1d35cd759fe581af4e62602c02ef14744143eb424f2d9f33a60288c1b25f08e4b2f5feae06cbcc2b2052bf384e1a6fcd8471ce5e5658d77f40c35c415e2a9e09fb583bb7471258e7c806f3c21822dd10f56a640cdc00128d3ba556ba51dcaab47c3baf9f0197d3663de8d093e83173325def1e83a2f5f5acf12ae09f3ce96cd888034dcbe6147dc5998362a4bc406d28846ab1503c17c94f9afd903c9a58e1cebb4abb4ff6f2a41024e06dcaad14f5b70c1b26e69f96ecf14b8da31c621f9ad4e30aeb982378671f7d1f2c4b572c41bb8830840ac5ddced881f8fff210c3c7f236d8c5f2cfdacda29893302fde15282db540cb543737dd77852569221fddcdd68d87e2402179d3a5a77734c275a1d560a462f40318bb6819837da3d305eb49b38650efdc8fe409d40fb94cd5dc3eb02738f38852f671a0c41414b76fb436f3417b8ef300921c009ebbd7cf8e11\",\n        \"signature\": \"4218fe4c1dce795ca92a49a6f4798eb5412dc825860314ec469fed45de3a7bf8ea55e853a349584bd95a826a585a503fd50bfe4c635ef183d07301367e90100a\"\n    },\n    {\n        \"secret_key\": \"18e268b15a2501dd4c979dc103ca6a842216132b3b5081d775f88640f89c8041\",\n        \"public_key\": \"b34e19c1e208fb48a885079d9fbf37c74f92710960f832154fab18570cfb4c1d\",\n        \"message\": \"424bdcf0b256001439d16958fff648cf7a8604af22cfa5b44331b4dc356dff25cc0563da9d640133acb70b6a1176c482dbc9408cd6793d56bc29cc408823d388ed88b24ceb6621dbac0023ee69f76f8296a7395211685b3ceaa995f0355d9aad3d97358f4a379e5920ec545f469621cf768abf55d2a554c949b0ed70187c2205ad032985c9b5b2e4ba57e0b4a47d344512b84bfe9f3aa560fe6ecfc5bdf8c3b41845293573f81ed3b70edc63a30c70cda3f455901313f6d23db309478f03e34e71356d83fa5db9280cc2b4369c3d24dd9038f247596c391e48b2f3f890a141ca1d12077c69344735a59b1dd4076b22e16189991e5f1be4fb7695af90ebea5df286135cec2a6e99aa1dda328e62c0dfb63742202d63624dcc0c5cf1a5df79e2878dbc71fa96576601af22844f545733126af7d3984c3ed252e6a876445c92259fbb470a10569b49e5791fd0182cfe1c3f88297facc8c31a5332f1f4eb4958db13b6c079aa9c949487263403190c83c11a43191ffec6023fb34cfab2525beb546cf9200a96f5854b2f78ecb2d9a53aa9d287a90d4d410a63ada0e975d304d5148353463fa805b4805fb4687ed8857dfce4bc6e80833c8f9a79cd4f029a2d802bfdc819ed0c0ac8f21023287f2b4bafbcc89993fe46d52a9c6246dead617df797d48ee985f0f0df9aa82ea20e0d0db28a254a9a253f39f9cf01e3db8f3ebcf7cb97cec58c4efe031269b4b37e4cbb361f73ab4b4980bd900849538844c52cb3ac7583b8f89653a0de65a8be91582c55239cb8f5d5318a88d160e1c871e5ea7e75f5a69cba8538221ab42ce2a2c4d9c3b7ec857f230d573731133686ae8a7ed640f42f31029489e4e6af2b3ea4c7948ed537c0c5906726c2b625fd5f949e3a7cf3b6e998ec761dd6e2b5171a68749752e721b788c3477fa190cd6ea81d579dce6462d9c662ad8962e79338710cc8d2738a5fb04adfdb3f1432cfd80e2e967da000d83a0fa85abae2952f3f3683e254d868f4bf809eb2e300e7b209734a3c894e966b16088d5ed354bffbffbbf2ec2be93a32a8be5cfa18fa5653012edae5afd8709ca55c0cf23a550d34ca0f32d8f666fb47a12f2b7353a40c5379f75366c13f4ab9f14cf80a94e1f13d8b09b76fd8d14ffa538f31fd8aeb49d33433f4df7c2ca67399579fe99078aa721d6b6fc0c50e8a91fc71ca25eac1376fc671bf6153e720b25c7e97a3d4ef8442ac67acf58b504b67158f913025\",\n        \"signed\": \"f2dcfc06ef1d8eccd8e40bdf01307dd19683f214d4f084e6b6934f637278300dbb1889f2d37f53b3aef26fbb3e36bd75985fa7c8ea6ddffa72c8e406f24bb20e424bdcf0b256001439d16958fff648cf7a8604af22cfa5b44331b4dc356dff25cc0563da9d640133acb70b6a1176c482dbc9408cd6793d56bc29cc408823d388ed88b24ceb6621dbac0023ee69f76f8296a7395211685b3ceaa995f0355d9aad3d97358f4a379e5920ec545f469621cf768abf55d2a554c949b0ed70187c2205ad032985c9b5b2e4ba57e0b4a47d344512b84bfe9f3aa560fe6ecfc5bdf8c3b41845293573f81ed3b70edc63a30c70cda3f455901313f6d23db309478f03e34e71356d83fa5db9280cc2b4369c3d24dd9038f247596c391e48b2f3f890a141ca1d12077c69344735a59b1dd4076b22e16189991e5f1be4fb7695af90ebea5df286135cec2a6e99aa1dda328e62c0dfb63742202d63624dcc0c5cf1a5df79e2878dbc71fa96576601af22844f545733126af7d3984c3ed252e6a876445c92259fbb470a10569b49e5791fd0182cfe1c3f88297facc8c31a5332f1f4eb4958db13b6c079aa9c949487263403190c83c11a43191ffec6023fb34cfab2525beb546cf9200a96f5854b2f78ecb2d9a53aa9d287a90d4d410a63ada0e975d304d5148353463fa805b4805fb4687ed8857dfce4bc6e80833c8f9a79cd4f029a2d802bfdc819ed0c0ac8f21023287f2b4bafbcc89993fe46d52a9c6246dead617df797d48ee985f0f0df9aa82ea20e0d0db28a254a9a253f39f9cf01e3db8f3ebcf7cb97cec58c4efe031269b4b37e4cbb361f73ab4b4980bd900849538844c52cb3ac7583b8f89653a0de65a8be91582c55239cb8f5d5318a88d160e1c871e5ea7e75f5a69cba8538221ab42ce2a2c4d9c3b7ec857f230d573731133686ae8a7ed640f42f31029489e4e6af2b3ea4c7948ed537c0c5906726c2b625fd5f949e3a7cf3b6e998ec761dd6e2b5171a68749752e721b788c3477fa190cd6ea81d579dce6462d9c662ad8962e79338710cc8d2738a5fb04adfdb3f1432cfd80e2e967da000d83a0fa85abae2952f3f3683e254d868f4bf809eb2e300e7b209734a3c894e966b16088d5ed354bffbffbbf2ec2be93a32a8be5cfa18fa5653012edae5afd8709ca55c0cf23a550d34ca0f32d8f666fb47a12f2b7353a40c5379f75366c13f4ab9f14cf80a94e1f13d8b09b76fd8d14ffa538f31fd8aeb49d33433f4df7c2ca67399579fe99078aa721d6b6fc0c50e8a91fc71ca25eac1376fc671bf6153e720b25c7e97a3d4ef8442ac67acf58b504b67158f913025\",\n        \"signature\": \"f2dcfc06ef1d8eccd8e40bdf01307dd19683f214d4f084e6b6934f637278300dbb1889f2d37f53b3aef26fbb3e36bd75985fa7c8ea6ddffa72c8e406f24bb20e\"\n    },\n    {\n        \"secret_key\": \"3c393f9df1fb0b1eec09b7f270b85982ba0fd5e4b1795e1a7fa99137fee24d7d\",\n        \"public_key\": \"974fe23730fc17945670fbc1f80b93f94593c8d44bc75d189a6bbfaabaf5dbd9\",\n        \"message\": \"54d8b8d5fac28cffa77a0916d6333c16edbc8bb74aa06e56dc00e47e3929e40864b8840d912079597eacd81dae43e2785dfc689f3e85f8c66581efc5e853d1faaac744400ab08cbdb5d16146fa60f99905ed84fd2936dd73f4bca2572b7cf5160560ffaa68da7a67e40e08a7bb7aefc4043ebed5fe80a414817edf2c63f62fac0d47446ed0bb584058f4872fecff621559311a270aea37a6296864e8d168bf1e2f55cd3b276edfa612b5d9c3362e618be6e82a6e5f82667924f3d1d3df825f9d23f4d6142d3100dfc70f70603abf3fdadaca69ef6a18ef9092b3c41ec658ab27216fc6147a080acda60a841984ee83f41ac42a80eaac91fffc8228391ef583ab3eddcf876523c20281355300d86c11a4e7c1ade8e50560f43906c9bc8ca5fbf8339fbebd02e33e8518bee5e806b8c10f8277f410664735a2bf556839635492452e6ca079deb9751cfc6797f49bca9613ff2e7fdd3646f7c5236a36bdf0051745e595dc0072fd6651d57627a6004c0f0cfae856bbc28a1231cb839665ff04152ec31c007b3e2ed0a973b24c93149ce701e6fd6539206ae91bec4ce65a89db26c7d38cecb8919f96fb6cb8f6c1939d90fb3f90b887789f29575ab20e0b08bc358153d8c03521dc891870b5f7eedcc1e62bee7da063ae66ff0a4b7d98d1cb758f69743c3db3ae2a2c9be1be094f17cd28f92d8ccbca983c749c75c610f840836e2c430ccdeff0afa54444f12b4a4f002c609451834244c0c07df8e12202a65f94447cd4903acb606d7725a86e4a2343984e679c4af1b3679c755ea50d0abe2fcc0c1c3351a9ee196b4644c424222be99e2fb373f9641e3faebff43170eb03fb8ec4557d151a55fab6c499d444c84be89f2447682de4e6f6353475efcb8fc53256763a948dc75c515fa353545d0cbad29df5e9db5cc457ed3086cffb3d75e846c4e8d88147fcd0d8aa5abab49b5e05c3d7feef637943347ad3f492ee356ef34881cfd85abce8a144ce7761e284e8b8cb08966049047a996e23559f776b1a9f41cba3954108486e2927beb6433a36ff8b2f03aa74b3d209c488e077f924f231e28345942c7dcc2e61d7c9b522b659fcb53662aff3648f66da3e83e59b0daa90b94c515dadab10d5a839cb3a2f1d3cd092de55d995138c3ac0b907af15ac63ec1874114327e21971345ef17031d52617e784da3771439be2e84148bcfea132bde10e6fda547dcbb1c4d8f74ddce1fccf8213e0da6e97b81f75\",\n        \"signed\": \"22333e56410fdcbf84f6a8de741337691684495ba69eff596db9c03a281210881e6c91efa91b2183c0eac916152817a78ca724ba7c8b51bb4caadea9a341eb0e54d8b8d5fac28cffa77a0916d6333c16edbc8bb74aa06e56dc00e47e3929e40864b8840d912079597eacd81dae43e2785dfc689f3e85f8c66581efc5e853d1faaac744400ab08cbdb5d16146fa60f99905ed84fd2936dd73f4bca2572b7cf5160560ffaa68da7a67e40e08a7bb7aefc4043ebed5fe80a414817edf2c63f62fac0d47446ed0bb584058f4872fecff621559311a270aea37a6296864e8d168bf1e2f55cd3b276edfa612b5d9c3362e618be6e82a6e5f82667924f3d1d3df825f9d23f4d6142d3100dfc70f70603abf3fdadaca69ef6a18ef9092b3c41ec658ab27216fc6147a080acda60a841984ee83f41ac42a80eaac91fffc8228391ef583ab3eddcf876523c20281355300d86c11a4e7c1ade8e50560f43906c9bc8ca5fbf8339fbebd02e33e8518bee5e806b8c10f8277f410664735a2bf556839635492452e6ca079deb9751cfc6797f49bca9613ff2e7fdd3646f7c5236a36bdf0051745e595dc0072fd6651d57627a6004c0f0cfae856bbc28a1231cb839665ff04152ec31c007b3e2ed0a973b24c93149ce701e6fd6539206ae91bec4ce65a89db26c7d38cecb8919f96fb6cb8f6c1939d90fb3f90b887789f29575ab20e0b08bc358153d8c03521dc891870b5f7eedcc1e62bee7da063ae66ff0a4b7d98d1cb758f69743c3db3ae2a2c9be1be094f17cd28f92d8ccbca983c749c75c610f840836e2c430ccdeff0afa54444f12b4a4f002c609451834244c0c07df8e12202a65f94447cd4903acb606d7725a86e4a2343984e679c4af1b3679c755ea50d0abe2fcc0c1c3351a9ee196b4644c424222be99e2fb373f9641e3faebff43170eb03fb8ec4557d151a55fab6c499d444c84be89f2447682de4e6f6353475efcb8fc53256763a948dc75c515fa353545d0cbad29df5e9db5cc457ed3086cffb3d75e846c4e8d88147fcd0d8aa5abab49b5e05c3d7feef637943347ad3f492ee356ef34881cfd85abce8a144ce7761e284e8b8cb08966049047a996e23559f776b1a9f41cba3954108486e2927beb6433a36ff8b2f03aa74b3d209c488e077f924f231e28345942c7dcc2e61d7c9b522b659fcb53662aff3648f66da3e83e59b0daa90b94c515dadab10d5a839cb3a2f1d3cd092de55d995138c3ac0b907af15ac63ec1874114327e21971345ef17031d52617e784da3771439be2e84148bcfea132bde10e6fda547dcbb1c4d8f74ddce1fccf8213e0da6e97b81f75\",\n        \"signature\": \"22333e56410fdcbf84f6a8de741337691684495ba69eff596db9c03a281210881e6c91efa91b2183c0eac916152817a78ca724ba7c8b51bb4caadea9a341eb0e\"\n    },\n    {\n        \"secret_key\": \"f8669c88f1685bbf0480cc9221ac2ead8f551bfa87ecba2fd4ddf3ba3476ebda\",\n        \"public_key\": \"34723fb8e253ad9c71cefde03628d204e535de479e1048e5188762a1f337fe5f\",\n        \"message\": \"5b4941beec2241c9fb76d8484f4f3f3ab4ffe8ecc8e7aec76de2ab8c368584d751b0d3feb8a1dc8168cdc694968f66b2a0b052afbf8be3a7d95163e9da9141c59ca55976c292c5c74d31318d6a91e7817c5a8b2f812118cbeba3a13323cd9748bf86ed1a85dd4ebc0df495cfa3d4627434bf14aae8ab6781467a56d965d10e6371989dfa0f6bc0f7859f3771eb9004b34367db2705dbd60fa8f7895c1eadf59f53dab168b4f9363979025501ddd9680debc07cd1ca4a0997876e9211f307d9b7b9d904e48d2861a778b879ad590a9a2f141bd568e3a1bb2494628e9ec0c64255aeea6f0eedca30ad38a1f3ffec3b2b5e942e21940104e914d11a44c00fdd47da3e5513aa8530aee247c95ca66d08a2608c75ba9858da14f9a8a32be713d309e0f584c81ef5be040e0065f07b775ae175dfe2c8b90a88ccda17fa4f21c77eadf5d25b6e404bf004479e05a01ac0042b89937eb278c1c34f33028db780ba3b617918595a39c0fcad674b85c40cac8d345b7ca0bb48a28e66c44d8bb5f27941e40b0e9c7097976c62dfef50c98f17566ccbacc87cb03b94dfdfaf32f1e56ffa639d63611e213cebf54cd0a3e2172d811c0ebd75b1a8646264dd8b1abd46e548972a1b262cd95d511536dddcb49729fe7bd00b3838bd2f20a142640edb1b6e765b65da72e7233261c8892e2f4949bb51f32a1a5a3ee149bea26fdcedb991d2cd126637e2971e9b6f0b785df28a48f301707349423f44e8462289d725498230489df1b51be30f08d7e3250565c6ef824bc53a1ba74a57a25c0686adcb6c825ab1ca70c8a5d46dbbc6fa607461e26d16fe93bb3d3a943a3dc05f30ea6dc8bb12d70821d320f1adf1ceba4be657194f7fccd21990f8629d744601cf52ea6d9405aaa2878f1eec4003b45a4218d8f80bb0f5af047326487752e2b76d68872520bbeae7b309d78282a073fe0b1a1a7a98da23df68caf8c2699b1c7d0f47bd7de2c0bb23369963e68a6974c8e2b595b8293a9f4d98df7e9ae3add2a3f64e83039739642d192204e85e6c48d5d671f6c75a0a8957edbb74187620f2aba99c1c62584c59ac00647e3fb40292b9dc1a3346868553392fd3f11d6dc6f5f2f4e85ee25125cdd644743c7d45281edac6384c77cb98a67d9ae6fc9a0a76b9f6fa696fdf4aceab5f794ee521b1e5a0ee57af53bdf176801b4f45cfb3cae3287234234b77ce21edf8680d68c4a8eecf1b03537ea5699acb562777e42a486fe7cd\",\n        \"signed\": \"3746da6cd8ca108beef06487bee63584f812c8e0695fc863b86e5db132380b62ff8544f6f374825b0e3ea0620ef854c1331114d667df1f9ea776c3963870290d5b4941beec2241c9fb76d8484f4f3f3ab4ffe8ecc8e7aec76de2ab8c368584d751b0d3feb8a1dc8168cdc694968f66b2a0b052afbf8be3a7d95163e9da9141c59ca55976c292c5c74d31318d6a91e7817c5a8b2f812118cbeba3a13323cd9748bf86ed1a85dd4ebc0df495cfa3d4627434bf14aae8ab6781467a56d965d10e6371989dfa0f6bc0f7859f3771eb9004b34367db2705dbd60fa8f7895c1eadf59f53dab168b4f9363979025501ddd9680debc07cd1ca4a0997876e9211f307d9b7b9d904e48d2861a778b879ad590a9a2f141bd568e3a1bb2494628e9ec0c64255aeea6f0eedca30ad38a1f3ffec3b2b5e942e21940104e914d11a44c00fdd47da3e5513aa8530aee247c95ca66d08a2608c75ba9858da14f9a8a32be713d309e0f584c81ef5be040e0065f07b775ae175dfe2c8b90a88ccda17fa4f21c77eadf5d25b6e404bf004479e05a01ac0042b89937eb278c1c34f33028db780ba3b617918595a39c0fcad674b85c40cac8d345b7ca0bb48a28e66c44d8bb5f27941e40b0e9c7097976c62dfef50c98f17566ccbacc87cb03b94dfdfaf32f1e56ffa639d63611e213cebf54cd0a3e2172d811c0ebd75b1a8646264dd8b1abd46e548972a1b262cd95d511536dddcb49729fe7bd00b3838bd2f20a142640edb1b6e765b65da72e7233261c8892e2f4949bb51f32a1a5a3ee149bea26fdcedb991d2cd126637e2971e9b6f0b785df28a48f301707349423f44e8462289d725498230489df1b51be30f08d7e3250565c6ef824bc53a1ba74a57a25c0686adcb6c825ab1ca70c8a5d46dbbc6fa607461e26d16fe93bb3d3a943a3dc05f30ea6dc8bb12d70821d320f1adf1ceba4be657194f7fccd21990f8629d744601cf52ea6d9405aaa2878f1eec4003b45a4218d8f80bb0f5af047326487752e2b76d68872520bbeae7b309d78282a073fe0b1a1a7a98da23df68caf8c2699b1c7d0f47bd7de2c0bb23369963e68a6974c8e2b595b8293a9f4d98df7e9ae3add2a3f64e83039739642d192204e85e6c48d5d671f6c75a0a8957edbb74187620f2aba99c1c62584c59ac00647e3fb40292b9dc1a3346868553392fd3f11d6dc6f5f2f4e85ee25125cdd644743c7d45281edac6384c77cb98a67d9ae6fc9a0a76b9f6fa696fdf4aceab5f794ee521b1e5a0ee57af53bdf176801b4f45cfb3cae3287234234b77ce21edf8680d68c4a8eecf1b03537ea5699acb562777e42a486fe7cd\",\n        \"signature\": \"3746da6cd8ca108beef06487bee63584f812c8e0695fc863b86e5db132380b62ff8544f6f374825b0e3ea0620ef854c1331114d667df1f9ea776c3963870290d\"\n    },\n    {\n        \"secret_key\": \"ceccc68311fc45b6c2a2f1ff9cdde007ec787fdf25d02ccd2a1cad9de3fb4cff\",\n        \"public_key\": \"6f804734ef92824180da71e55cf3bf1afef65bcf560962e0b0acbb2d8cca5984\",\n        \"message\": \"bac186d9fe5abda79c3a35a7a3c2eae6ae6ab28247912770c84efd048ebd3aba57c37cf4c6c7f30a79f68a3f76b20cd8c6631fcc96670522080e6b62e887ae6f4436d4caf56943131c52dd282b251cd075f1f7f8e0bdb6bedfc9a0796f5579042b56e69374961b11dfd61b12de2bb7d49bfc509cdb3138f3356a0dded98f5301b7c4a748bf89b23df4f7472ff8b1f505d765c6ff82dbad74b9d7aef22fbcca0b7f35042f9a762bd06902bb21c7f9f7f66bef38901d75012d61d744dee7afd89fc7e908c40685bd440aeda4204d006f26307d82a496963115f90e09f76688291f4a67d6411f76d16617875b2b9982dfdc5ee9b83b9817009319110b5404c63116fb6e9464846fa009555632f076984c15e1f6081733a0d46f2d6a3cebf79ed9020c9dec8df158a3341f39eaa5fcf1cf42a94849b2352c1a1ecd4fb814c20d07dfda312bd4f2f58c1576b4aa315c96c8786a4cfbb736b2d23c38b1d81c4644ea36afa076e055be5917cd7a92350a7ed66a5ab2253f55c4fd1a0d0e6d4edab5f712edb440c06fac8f07e6d73cc90b2ba713d73c73802361ce46a4eb5ed1060c4cf53207d301f0fcd4f0c9d1580db2fc1059d372076438a01192a7f9fd6f7883f56422866fd9f0afe53fdc910afa5a751cbfa377592579165cb56dc3eb4dce67e3db33a981a56b7d9f7bdea74fbaea3478e6ab2c644fd777b8bfa72aa0f0a52198d36e5b634d2c9a11b7fe0ab2f9a40901c5b148a0192e95a170baf7d5350fe01e569542b93485a41971443485faf57f67f56dfe2c58e539c9f9b449c3f91249a10c1a1be7e0b3eabe8ee0bab1f11f89614dced418c62a07a0b59a1370d6531ba177091c6ad595fb59488204f63344736ea1017affbeb753a99786b1eb64510e2e717ec90e02744bc352d3f1b2ab7be0eb65623d04fb3a046ce7f4da697d829828a52c7b043b2a82ec97fb041bf519b4de316f4e2f5b0db62aed0eed95cad4320c1947c35fd8847a5867872883561119c01b0089213d84db99d439f0f6444d8783dd4b64be3577cd461cf753c8e61c912de2e5d7a7e2baefa258975d16ef3117da59a6c893f3339187df3168b89f0fb0b2198bb6f1594bb88f3d610fcec3e36de04ae10328112e6ff74f5a8ce68d407174b4c0691c7602eab1bb10f3c49dd22b8450782deae9a7315e3b88de79cd15e6c9268165ed3a0fb3f89b183e1a212152003f32a2665d37cdd7f6b56c2453e5580c4d21f9983f38798e9b\",\n        \"signed\": \"3c4462aa47010132dbb26311e444727279edade15a4d662cf647f3275cf3253e6de9333830e0517aa5fa7bc2d0e63ea2597a94b0fe92706ecd172c5ec5c7f006bac186d9fe5abda79c3a35a7a3c2eae6ae6ab28247912770c84efd048ebd3aba57c37cf4c6c7f30a79f68a3f76b20cd8c6631fcc96670522080e6b62e887ae6f4436d4caf56943131c52dd282b251cd075f1f7f8e0bdb6bedfc9a0796f5579042b56e69374961b11dfd61b12de2bb7d49bfc509cdb3138f3356a0dded98f5301b7c4a748bf89b23df4f7472ff8b1f505d765c6ff82dbad74b9d7aef22fbcca0b7f35042f9a762bd06902bb21c7f9f7f66bef38901d75012d61d744dee7afd89fc7e908c40685bd440aeda4204d006f26307d82a496963115f90e09f76688291f4a67d6411f76d16617875b2b9982dfdc5ee9b83b9817009319110b5404c63116fb6e9464846fa009555632f076984c15e1f6081733a0d46f2d6a3cebf79ed9020c9dec8df158a3341f39eaa5fcf1cf42a94849b2352c1a1ecd4fb814c20d07dfda312bd4f2f58c1576b4aa315c96c8786a4cfbb736b2d23c38b1d81c4644ea36afa076e055be5917cd7a92350a7ed66a5ab2253f55c4fd1a0d0e6d4edab5f712edb440c06fac8f07e6d73cc90b2ba713d73c73802361ce46a4eb5ed1060c4cf53207d301f0fcd4f0c9d1580db2fc1059d372076438a01192a7f9fd6f7883f56422866fd9f0afe53fdc910afa5a751cbfa377592579165cb56dc3eb4dce67e3db33a981a56b7d9f7bdea74fbaea3478e6ab2c644fd777b8bfa72aa0f0a52198d36e5b634d2c9a11b7fe0ab2f9a40901c5b148a0192e95a170baf7d5350fe01e569542b93485a41971443485faf57f67f56dfe2c58e539c9f9b449c3f91249a10c1a1be7e0b3eabe8ee0bab1f11f89614dced418c62a07a0b59a1370d6531ba177091c6ad595fb59488204f63344736ea1017affbeb753a99786b1eb64510e2e717ec90e02744bc352d3f1b2ab7be0eb65623d04fb3a046ce7f4da697d829828a52c7b043b2a82ec97fb041bf519b4de316f4e2f5b0db62aed0eed95cad4320c1947c35fd8847a5867872883561119c01b0089213d84db99d439f0f6444d8783dd4b64be3577cd461cf753c8e61c912de2e5d7a7e2baefa258975d16ef3117da59a6c893f3339187df3168b89f0fb0b2198bb6f1594bb88f3d610fcec3e36de04ae10328112e6ff74f5a8ce68d407174b4c0691c7602eab1bb10f3c49dd22b8450782deae9a7315e3b88de79cd15e6c9268165ed3a0fb3f89b183e1a212152003f32a2665d37cdd7f6b56c2453e5580c4d21f9983f38798e9b\",\n        \"signature\": \"3c4462aa47010132dbb26311e444727279edade15a4d662cf647f3275cf3253e6de9333830e0517aa5fa7bc2d0e63ea2597a94b0fe92706ecd172c5ec5c7f006\"\n    },\n    {\n        \"secret_key\": \"7b30b42dc2c670a195fe2af879fc5de374024588fe3de43e2dd50844f48f42be\",\n        \"public_key\": \"82a2ac6079f212b5eedd0c19e9394fafacd74d716fdefbfc6cb8a7eaf41c0362\",\n        \"message\": \"c6687aefebc5c816d1a33453beca5020d3a97cda1dac5662f0af72bad444e2fd1176a7b04c1bd09d832618209bf3e33e523538d6daa753046e871dd3b3c7acad33e79c1bb7896407865d168d4bc3757bde4f823c08778626f8c71fb7cfcfdf03a82497bd8be7d8f8ef649030b5f36a339459968e246a1e420853dace41ca850a4eeae834ae119610ca4cd0662aac39621586998027ef2f61485c028506714ae09c76399d873e808158578aa59e8212f58865319f9e0d2b8da7ad529e0ac1f1eb435aecfd35f5abb92bea5073496bf4c0bf15baa273bfc5c3104474a2dcf132c333eb36ec2cbf04fa9580b768f5cea7b5617e5880aff63201c274d669743e1bc556b067902eee29d29111288969cffa879fc9cbf66fbf9326d9d925ac4102fa9f1a06081adec079cbc96746d79b63a012ed77d82c9ffd4e3f161f6cea28cc23fac2a543f5b1d0644ec04838327bcc652b858f93ff463f7e949eec8c9db6569a86984f831df6ac6d95f38f46cebb6e6583657facd2108dbcd0af23ab0101a1301beb48a44caccb91094473d7e5a5c88c644fd3420573b678f17b5174cb14e90fac694d1dbc6c9632b5974aef28ac08d720b2ea30440d2afb0493b40db24efbdbf53c430921e52a10b54661e149d165591a7cf91d6508ea472fb3be16395e30312f19b87c47e46804a0fa29b56b5ac950677bc60238b5e99e030b1e552146a0e88c294cfca835c101c55f3423874cc128756e73a5debe8e97fe2166b65cb44642770c6d1d2390af1b0f31b958c830e9ac4fe2f5ad590582fbb892bf949584477ef7bde23f7dd02b63f7c29088a57251009132ffbb78ed14defbefd9fd31fdcab03ba80a23f333983760abad4f16ddf9dd4414f04d00db56ba72d63a3a13d2c442f549fd66c988d2e4601d13b52f77500dd692bec9d6bd3bafa9242fdcfaeb69b98b0b5789b2803840dec637b49af4381ae3fa429fb53461a0c674eb5aa18dbd607a2b77a96d3ab464ecd97492f6de460c9f11b5c1756cb59cb1348dfd77956b71907c54821e303cb8b14906c003e3484be4ea05a6901d69b07485e858f7b471c635f90395b9a3e2247f1ad12b118ffafc7221a57b10e319b61af1c13606a81616ce3f1d62ba932ff4e63e74b84255e3af5210bbd571bda44cbf44b714422cb45c2ef21f98131ba96b7edb9b03e33d7d188d5b8d904cb4136fe269db146988168e7ee245356354f002a5ea8b35a3a99e83a13272274144b33a60ca\",\n        \"signed\": \"0a63b84f46935faf3ea164b00af227b00868a03f5612935e18619a84a2e57b8851d746e63fd9100787f5338d51c1073c2fc5303099e1873e5e3d3e5c036fbe01c6687aefebc5c816d1a33453beca5020d3a97cda1dac5662f0af72bad444e2fd1176a7b04c1bd09d832618209bf3e33e523538d6daa753046e871dd3b3c7acad33e79c1bb7896407865d168d4bc3757bde4f823c08778626f8c71fb7cfcfdf03a82497bd8be7d8f8ef649030b5f36a339459968e246a1e420853dace41ca850a4eeae834ae119610ca4cd0662aac39621586998027ef2f61485c028506714ae09c76399d873e808158578aa59e8212f58865319f9e0d2b8da7ad529e0ac1f1eb435aecfd35f5abb92bea5073496bf4c0bf15baa273bfc5c3104474a2dcf132c333eb36ec2cbf04fa9580b768f5cea7b5617e5880aff63201c274d669743e1bc556b067902eee29d29111288969cffa879fc9cbf66fbf9326d9d925ac4102fa9f1a06081adec079cbc96746d79b63a012ed77d82c9ffd4e3f161f6cea28cc23fac2a543f5b1d0644ec04838327bcc652b858f93ff463f7e949eec8c9db6569a86984f831df6ac6d95f38f46cebb6e6583657facd2108dbcd0af23ab0101a1301beb48a44caccb91094473d7e5a5c88c644fd3420573b678f17b5174cb14e90fac694d1dbc6c9632b5974aef28ac08d720b2ea30440d2afb0493b40db24efbdbf53c430921e52a10b54661e149d165591a7cf91d6508ea472fb3be16395e30312f19b87c47e46804a0fa29b56b5ac950677bc60238b5e99e030b1e552146a0e88c294cfca835c101c55f3423874cc128756e73a5debe8e97fe2166b65cb44642770c6d1d2390af1b0f31b958c830e9ac4fe2f5ad590582fbb892bf949584477ef7bde23f7dd02b63f7c29088a57251009132ffbb78ed14defbefd9fd31fdcab03ba80a23f333983760abad4f16ddf9dd4414f04d00db56ba72d63a3a13d2c442f549fd66c988d2e4601d13b52f77500dd692bec9d6bd3bafa9242fdcfaeb69b98b0b5789b2803840dec637b49af4381ae3fa429fb53461a0c674eb5aa18dbd607a2b77a96d3ab464ecd97492f6de460c9f11b5c1756cb59cb1348dfd77956b71907c54821e303cb8b14906c003e3484be4ea05a6901d69b07485e858f7b471c635f90395b9a3e2247f1ad12b118ffafc7221a57b10e319b61af1c13606a81616ce3f1d62ba932ff4e63e74b84255e3af5210bbd571bda44cbf44b714422cb45c2ef21f98131ba96b7edb9b03e33d7d188d5b8d904cb4136fe269db146988168e7ee245356354f002a5ea8b35a3a99e83a13272274144b33a60ca\",\n        \"signature\": \"0a63b84f46935faf3ea164b00af227b00868a03f5612935e18619a84a2e57b8851d746e63fd9100787f5338d51c1073c2fc5303099e1873e5e3d3e5c036fbe01\"\n    },\n    {\n        \"secret_key\": \"6656f4d4718157c4bac38ff7abe5eb1f812c0b986d9c014abad5b09aa6c8ee4a\",\n        \"public_key\": \"f3087898e452be9e30aecc4e8ffe0c01169888683f62a45b8da38299014f5b4a\",\n        \"message\": \"94d9e5e5a7b705d9d976fe71e94d3f7fa7866afbf7ece424f136327799b2b206ce4ef4c3f3e705553afc8fd5c1952a4c16658d4a78afbb9a97f27193c65b65b82e8f3b71515fac82640e0f8a5fb35ae6fc6a3db051a22d4a5300413e6e33d19c2013c2983aca8ad6cec2ce64a814164f061a1a3c5a8610a7650bfb5423d4362ce02206dbe4a6fa826f03b42ac3cd9ea4c651401b3cea82c3993f6af8b2c9e2e6ffe69280ab3f09fbe90dd547ccda9d9e8e8a537b3b360554227ed0709f293198982efb5efb0e73e00042d1a063b57452027dce1a39e4b0068f58b111ec5dc142bf419ad893d54f4260cbde7628f783de8496380306a4eff6d82869104259c94c54ad5aa8b067c42496cb88dd31150ea04d499bfac91f4bb3e68af5af7a568a3e4ce7f170d98601163f4952f1d25e12e00ef0a2d8f111afdb0fafbad2bf8e8b9d49363fca68183617b541270dda4609b2616729ab1b8c42dbdd7bf986af8fba52e733e42ba03c892e1e1ec06a90b163f5a79f6165eb7316972ac1adbfcf1dcab07847ef82c2cab1015dbb50aadc79fe11c832098cacc39820ab085b6963bd42160ed6613bae5e201f17c0fd7f32357ae350ce9cbbe926fa42dcbd422ac1bf09a19ad1f69469e4d1dcb124118ed4522d353c174298650ff88382fa2fdbb286c45b18a9baf6f6763ac20c9ca4767d348c4b8ded630076657b85b14c11ae2737ea29a43515b7f05674a0cd3ed4bf6a3d189ae972218f877cd8aa69499d5a08c99e440694ccaccdf1f642e14e90105bee6d98edeeab3b4f339f300188aec0c16bd64521d9287398e648db94330ed8f6b9ab6c7ad93ffc43e8792e637c61bff7d856e54ef4987384e312cb57017a50eae5952abe19d8999c8c82dfc45798cc17c8d9496bf520ecc5b77fe284915566c45685c304a2acd525ef12c86f38aef554d8a2384737cc4133fb7e2b65c13bef31668a6c2f60eecd8412eeff7f6b605cbe95083e233ec1a7bb36de236c8a71ba2872be946cd3b38935f5da64c8fec8e14f45ccf6124bab7f70567c2f2bfdd56667609572037c76146c991707659b5709b074e3451f921a2df283b96aa26ab476625016f181ad64c9919cf41d714a1a9a5e2bb26baf8770b2eba77b778a332677a7572ee3a2b1dc05f7356bdcae5f55e35329e34caa79430b270c036160dc9fcaab5b254543ac94b24681f17172b6159d16621d7ad0eebd895a1e1d09b916a86fb48e4c91661057eee95c0870ed54\",\n        \"signed\": \"9c2c39915aed6add004e7dd684ee3dcdd10d87a487f677e73c2bce0fca7d508796464150a52a440f5237850a009c72162d9d2985470a33490e66d3c401704c0594d9e5e5a7b705d9d976fe71e94d3f7fa7866afbf7ece424f136327799b2b206ce4ef4c3f3e705553afc8fd5c1952a4c16658d4a78afbb9a97f27193c65b65b82e8f3b71515fac82640e0f8a5fb35ae6fc6a3db051a22d4a5300413e6e33d19c2013c2983aca8ad6cec2ce64a814164f061a1a3c5a8610a7650bfb5423d4362ce02206dbe4a6fa826f03b42ac3cd9ea4c651401b3cea82c3993f6af8b2c9e2e6ffe69280ab3f09fbe90dd547ccda9d9e8e8a537b3b360554227ed0709f293198982efb5efb0e73e00042d1a063b57452027dce1a39e4b0068f58b111ec5dc142bf419ad893d54f4260cbde7628f783de8496380306a4eff6d82869104259c94c54ad5aa8b067c42496cb88dd31150ea04d499bfac91f4bb3e68af5af7a568a3e4ce7f170d98601163f4952f1d25e12e00ef0a2d8f111afdb0fafbad2bf8e8b9d49363fca68183617b541270dda4609b2616729ab1b8c42dbdd7bf986af8fba52e733e42ba03c892e1e1ec06a90b163f5a79f6165eb7316972ac1adbfcf1dcab07847ef82c2cab1015dbb50aadc79fe11c832098cacc39820ab085b6963bd42160ed6613bae5e201f17c0fd7f32357ae350ce9cbbe926fa42dcbd422ac1bf09a19ad1f69469e4d1dcb124118ed4522d353c174298650ff88382fa2fdbb286c45b18a9baf6f6763ac20c9ca4767d348c4b8ded630076657b85b14c11ae2737ea29a43515b7f05674a0cd3ed4bf6a3d189ae972218f877cd8aa69499d5a08c99e440694ccaccdf1f642e14e90105bee6d98edeeab3b4f339f300188aec0c16bd64521d9287398e648db94330ed8f6b9ab6c7ad93ffc43e8792e637c61bff7d856e54ef4987384e312cb57017a50eae5952abe19d8999c8c82dfc45798cc17c8d9496bf520ecc5b77fe284915566c45685c304a2acd525ef12c86f38aef554d8a2384737cc4133fb7e2b65c13bef31668a6c2f60eecd8412eeff7f6b605cbe95083e233ec1a7bb36de236c8a71ba2872be946cd3b38935f5da64c8fec8e14f45ccf6124bab7f70567c2f2bfdd56667609572037c76146c991707659b5709b074e3451f921a2df283b96aa26ab476625016f181ad64c9919cf41d714a1a9a5e2bb26baf8770b2eba77b778a332677a7572ee3a2b1dc05f7356bdcae5f55e35329e34caa79430b270c036160dc9fcaab5b254543ac94b24681f17172b6159d16621d7ad0eebd895a1e1d09b916a86fb48e4c91661057eee95c0870ed54\",\n        \"signature\": \"9c2c39915aed6add004e7dd684ee3dcdd10d87a487f677e73c2bce0fca7d508796464150a52a440f5237850a009c72162d9d2985470a33490e66d3c401704c05\"\n    },\n    {\n        \"secret_key\": \"14383e6e5604c99c248d39be51d164b13442b05e51d78ecd999364221a45036b\",\n        \"public_key\": \"2fc16138220ab74b3bd446f8a714b58d5463d40d4367925007474c5b9e35d494\",\n        \"message\": \"c4753b7f7a6f6dea2515c6e3d29561506f4f36e0de84999221f228e20bd5128ed93bdb8d1193237d8e294169a2bc448af9dd36066301efb7fe1231353c0623ffe1115debb6905ac6946ee382a27c3c09e1b1f5c11493dba37da0ff6eea75d9fab0ee926d701dac2fc5b7ef578880a5d5eeecadc1f4bcc4cd4ec6f2f14f52a8c164072e6fde5ab2ee9cee0b48e51af055f9fec7c63750fedf72332b23863a1e54c52b461a21506dfdfc63880e22d89c894412666c929821c0e439e745415f717969e6058554d64b947a4fc9d16acae3e49aec08801a09d972f79ead68d529768069735caa742b45a5830581b80ca061a6c1515e3f7d5a9337878c19fc94eef22698ea6c4d05f9ed411b6b8f052b5ff15dc23a64beeaae99f84893de3df940a4e0b8e993930139052d99be47bca8775f8563bd4026b71343d51968f2337528f4c9db8bbd0a298af04b27695d86b7f7ba6c4ccc6273febcd8f75cff266995244fc1fa13d8d843f0bff49cc2d508f4a2b3aad1d95fb22a2bc6ad1b966b0812d99070bba07c923ee4d08107486dc01a06dba6f1d5f105aceade33b166510e427ebbce52a3e7831f0f78a3c6e072608334d8021c338a73cc0c47f19c9fae403b9716d0d15fbdf6466b08f6acce3f50a703b1dea8d826df842ca1ba20d29f4548acfc754cf011f570681b59e4da25385ebd6d5c3adc930529e166ce6705f6010210db106462b3333204e7adadee6606a56206b47eef2074b116e22a615418ec2cdc331f1e19e07e8a37b92d69df0734e085daeeb901ec6e8c35f103f1d86ef0d2a2652b01d183597e4cfdeedfe5df9a7ef66a1c796a37a27113b944dd7ba17c460015ab8ace451c57850ec6c290c54e5113f55e99a8e6e4711e3b7817bf91a5adb37fb9461be6b1b55d586046e42a54c5def4076f1ff6c31b806fc602474356aa2899eae70f5e5abf1f75a7f24c134cde11793bb162e03a583d5be046acc73456d12d509d92f7705768686f6c714a4e57ec88b71398e23e835d6d6547225996b7ed08f3b7443bb17c899409493d0efe8455bec8e8c284a3b149a5b4ca631ea620b1bb817cedaba50b044411849d260a6f2a0d3f2cceec3842719a5ea4fe18dde0d42dcb33ad21e6453325af6f3c009f2bb978d30ceeae9aa4928bf73767cda9292ab893ce5fa3aa4c232163b45c64ed7977779b1c0cafcfc2b9fa084a324f113adeec218b4735b6b464db6d46c2791af3455f1ca5ea1e9a048c051a54dfa0\",\n        \"signed\": \"45e8ed1a751dfc3b9b7bd7a10bf5bdcf8ca461865a490c105f10452941cf87721214bfbf3a35606b7ce35d6f70aaf2d5eadcc0de035e9b2f6d7b862fc2849004c4753b7f7a6f6dea2515c6e3d29561506f4f36e0de84999221f228e20bd5128ed93bdb8d1193237d8e294169a2bc448af9dd36066301efb7fe1231353c0623ffe1115debb6905ac6946ee382a27c3c09e1b1f5c11493dba37da0ff6eea75d9fab0ee926d701dac2fc5b7ef578880a5d5eeecadc1f4bcc4cd4ec6f2f14f52a8c164072e6fde5ab2ee9cee0b48e51af055f9fec7c63750fedf72332b23863a1e54c52b461a21506dfdfc63880e22d89c894412666c929821c0e439e745415f717969e6058554d64b947a4fc9d16acae3e49aec08801a09d972f79ead68d529768069735caa742b45a5830581b80ca061a6c1515e3f7d5a9337878c19fc94eef22698ea6c4d05f9ed411b6b8f052b5ff15dc23a64beeaae99f84893de3df940a4e0b8e993930139052d99be47bca8775f8563bd4026b71343d51968f2337528f4c9db8bbd0a298af04b27695d86b7f7ba6c4ccc6273febcd8f75cff266995244fc1fa13d8d843f0bff49cc2d508f4a2b3aad1d95fb22a2bc6ad1b966b0812d99070bba07c923ee4d08107486dc01a06dba6f1d5f105aceade33b166510e427ebbce52a3e7831f0f78a3c6e072608334d8021c338a73cc0c47f19c9fae403b9716d0d15fbdf6466b08f6acce3f50a703b1dea8d826df842ca1ba20d29f4548acfc754cf011f570681b59e4da25385ebd6d5c3adc930529e166ce6705f6010210db106462b3333204e7adadee6606a56206b47eef2074b116e22a615418ec2cdc331f1e19e07e8a37b92d69df0734e085daeeb901ec6e8c35f103f1d86ef0d2a2652b01d183597e4cfdeedfe5df9a7ef66a1c796a37a27113b944dd7ba17c460015ab8ace451c57850ec6c290c54e5113f55e99a8e6e4711e3b7817bf91a5adb37fb9461be6b1b55d586046e42a54c5def4076f1ff6c31b806fc602474356aa2899eae70f5e5abf1f75a7f24c134cde11793bb162e03a583d5be046acc73456d12d509d92f7705768686f6c714a4e57ec88b71398e23e835d6d6547225996b7ed08f3b7443bb17c899409493d0efe8455bec8e8c284a3b149a5b4ca631ea620b1bb817cedaba50b044411849d260a6f2a0d3f2cceec3842719a5ea4fe18dde0d42dcb33ad21e6453325af6f3c009f2bb978d30ceeae9aa4928bf73767cda9292ab893ce5fa3aa4c232163b45c64ed7977779b1c0cafcfc2b9fa084a324f113adeec218b4735b6b464db6d46c2791af3455f1ca5ea1e9a048c051a54dfa0\",\n        \"signature\": \"45e8ed1a751dfc3b9b7bd7a10bf5bdcf8ca461865a490c105f10452941cf87721214bfbf3a35606b7ce35d6f70aaf2d5eadcc0de035e9b2f6d7b862fc2849004\"\n    },\n    {\n        \"secret_key\": \"59b07263b22c0a38bbc591059594b2bd927e805961dd07e1f94245b23aa2e016\",\n        \"public_key\": \"0b1e4cf5aff278ec65b405f5108e1b5b18a969ad1f1e6381912c82d698907cba\",\n        \"message\": \"08ce0d4db5c2aa500a19efbc8dc8549250f7dd46a7a9a5407417b3d51820e4b0d61275583f56f897fd942bdd7311ad6baf738128567af6558d75906a02c4343a9955d59b11088c588dc7dd08f67965c5602a56928dda4ae164293163b517ca17ded04fe4ab2f9789130ae96ab231f07e09015b78f3848cef435db0ad9f35e0fbc9851e3ecfc9fb186d14d8da4dda45d0b3eb3ee4500c101e3194b572140689cd75da1287b254f374e3d93326ae5faf114018ac714bd00375d92a8bb659c32912831f4f20776e9e2c25029f0aff39fddac7241543a0366b84de7b1ff23e8e4dc093df0d2dd5e53e6847948cf3d0ff3f564ad94d9cc00a5ea5b695e408bf50f5bab2f6ea87ba8ad3a1940195cf1bc2b5b34847ad3a5effb8a7823de91ef1633869d1f04643af4d826a59e78b9d186312b3d972263654ac5587b80b717646f31003db81ac70860d3fc8cd3a6a0a0d576d25731ef7b8966263d7a05b55009e8a23dac0f9a21a24b06e13900e444446fdfe56cbc1a026df41066b201b1481e56158926c0c9ea90f0c645aab4bef12d4e072cbfdc3c3d5e0c72cf88f166de048874f3534e040c62b1662821bdd16b0e8582817461cb2689279b446d70c8ac20ad03e598cad4908c52c350d4243ee8aedb87a4af977f7db57cd947b47d6bb51409d80d81f6db03cb9a6a6b79812f470690afc1836a531338094cf26d3c1232fd5605d8f8c55b6f8a2a7ef1e0c78155594b237956d2abad6a9adcd58e11ccd35cc995b9a0aecbf7f5741ac051b04ef6b9744b56fccb46398528bb31fbe84e078843e69bf338898cdef69ad41872395e46b593904825547e00bdaf221f8fa587ea2037ffb9ac9307dd3f8f35ec5386ba966333e2ac8727b0e1b80612d3c7f2cb88baacadfe2163bc38c88842e76a394571d40610e8a297602793763296e3eabf720e984b2edd28cf5c4e0f9a0f76aceba28cc1f1b69ff1d35b4bd3347b7f9a95a4c1ea10734e1c918eb96249d0cc70b477f6f23809bbda901d53f485a71f5086002c1b71efcc41cb1aeb5122a3f3bfc96c51a55d75c02984288be657887854cfa738974bcd5440146f9bb14040de54f5444ad43b79af9bdb24ed6a48eb2fdeed71f31f0ece102e918e95635c7a038633ee348d8b5781652d5059d215ac97f30ea20d277ebbf15246905428a7bec02b8f926315bad6723fd64d71fc95f333364cbe90d4646333c40dda6d1d433b7c195a758dbb4038af5dcc7232d4547f540e394\",\n        \"signed\": \"886da33e3553285ea59c1431b6e86ea49bb68b2e0efd2b157e7791b74f35a2421bb359f3dc1e4ce5f11f73652e03bfc0b429c58f0f2d7418c7c20bce2e2d190108ce0d4db5c2aa500a19efbc8dc8549250f7dd46a7a9a5407417b3d51820e4b0d61275583f56f897fd942bdd7311ad6baf738128567af6558d75906a02c4343a9955d59b11088c588dc7dd08f67965c5602a56928dda4ae164293163b517ca17ded04fe4ab2f9789130ae96ab231f07e09015b78f3848cef435db0ad9f35e0fbc9851e3ecfc9fb186d14d8da4dda45d0b3eb3ee4500c101e3194b572140689cd75da1287b254f374e3d93326ae5faf114018ac714bd00375d92a8bb659c32912831f4f20776e9e2c25029f0aff39fddac7241543a0366b84de7b1ff23e8e4dc093df0d2dd5e53e6847948cf3d0ff3f564ad94d9cc00a5ea5b695e408bf50f5bab2f6ea87ba8ad3a1940195cf1bc2b5b34847ad3a5effb8a7823de91ef1633869d1f04643af4d826a59e78b9d186312b3d972263654ac5587b80b717646f31003db81ac70860d3fc8cd3a6a0a0d576d25731ef7b8966263d7a05b55009e8a23dac0f9a21a24b06e13900e444446fdfe56cbc1a026df41066b201b1481e56158926c0c9ea90f0c645aab4bef12d4e072cbfdc3c3d5e0c72cf88f166de048874f3534e040c62b1662821bdd16b0e8582817461cb2689279b446d70c8ac20ad03e598cad4908c52c350d4243ee8aedb87a4af977f7db57cd947b47d6bb51409d80d81f6db03cb9a6a6b79812f470690afc1836a531338094cf26d3c1232fd5605d8f8c55b6f8a2a7ef1e0c78155594b237956d2abad6a9adcd58e11ccd35cc995b9a0aecbf7f5741ac051b04ef6b9744b56fccb46398528bb31fbe84e078843e69bf338898cdef69ad41872395e46b593904825547e00bdaf221f8fa587ea2037ffb9ac9307dd3f8f35ec5386ba966333e2ac8727b0e1b80612d3c7f2cb88baacadfe2163bc38c88842e76a394571d40610e8a297602793763296e3eabf720e984b2edd28cf5c4e0f9a0f76aceba28cc1f1b69ff1d35b4bd3347b7f9a95a4c1ea10734e1c918eb96249d0cc70b477f6f23809bbda901d53f485a71f5086002c1b71efcc41cb1aeb5122a3f3bfc96c51a55d75c02984288be657887854cfa738974bcd5440146f9bb14040de54f5444ad43b79af9bdb24ed6a48eb2fdeed71f31f0ece102e918e95635c7a038633ee348d8b5781652d5059d215ac97f30ea20d277ebbf15246905428a7bec02b8f926315bad6723fd64d71fc95f333364cbe90d4646333c40dda6d1d433b7c195a758dbb4038af5dcc7232d4547f540e394\",\n        \"signature\": \"886da33e3553285ea59c1431b6e86ea49bb68b2e0efd2b157e7791b74f35a2421bb359f3dc1e4ce5f11f73652e03bfc0b429c58f0f2d7418c7c20bce2e2d1901\"\n    },\n    {\n        \"secret_key\": \"5cc115d839e058cdb6518ee9c161c004d88bd3908d3cf6d52c8f296a1a076b9b\",\n        \"public_key\": \"1e8f3305bf2fa11b17d92416ab0ea762396d88f2f970ef0b100ed3bf5cc13440\",\n        \"message\": \"533e49c1d5f33c5ec4be84c619f4ec649c25fd70bdcfe257a63c3373a4d089c89af6eeb7160dd77ab66b1ee7e10850ab4fc1f35132332b53789b2b0140c4f20f97f2142072d624aff7aad324aacd068c035aff52fa712f4e74832de031b2642314d17110dee6fb85762dc30d7e97782fd1fbff7179f00917f55af7503a5b7e23c6eadb65e104f1517b6624c9e5204b3fd29a6585e92ce3a3eee2c5ae177920f7b4ab2cac87d672ab6baac1186d904aea3498534eb5ab23e4ac4c0ddb0d82a5ae531d76549d367628577bac4235e897d9fe205522047d214ff6ccf311c4e397827d97f2868e70ac17d28e334999744d359376a482fdcb414b02b2687b962ee8086e573fe000dc51dee06879c684e25f94cee5e861347e7be7fca549a0f765136a2f4b88fede07024dd2fce1f6d0c0354da1a16ef366b315b3f7233031f979b70eac6e23bf3b349efbd0e4f53f4d5c41fc004276a59670659f6905ef03d2fc098d589fcbc1328282fa22b10db83c5d70865994fd19d760a39d476e02330d2c6d19e742267dd365bbe1fe5c711a95b184508ce48c1c96d7e63990b408d45089be79e32f9cb0162fd1e7d0d19d97d0ae78ff824cc6989486c0bd038352551f37499e9e9826804e9d2624ad0c7b7534560f45fd7d324b8e517e01c9b2743c14979cfd512bc3fe667279b3a277fb463e9d7349b64ffc9fe60884c21e481081ed70e6da5a3539c448971f0d9787289fcb0080f219e99449f8298c42475f87fd10aeb509c530cf6a57748eb8f3562161fa4875ea953f09659c7df7a9950f0317467cb4e5366e196e32f5e2696733a25eacbde49210490762060ea231370d4090429bb06bb867399e8d37bf5d21a0e72147e496cf3b7dd6fe6e5edea9668d802190a91c600e29523f8eb904e48b70412bc10a7020984c5ff0f5f383f214ae594dc85971e480372848d0d7e7cc5c18ff88ba9b262d7884698a41c6c7819c0319fdc6bb07b91dc1694dafe3af37a538bf2b2d8cacb27d24cdc6eadb8c6a2e6b7df8a4654ae937850c890ad930980afcc1492db8a0168cbc9f10657eb48d2ac87f5175d23caed4b5e6f10bbeaa5e33fc5f6418d63ba374ab1a3cbd36b729ddbdaba989d4645e3a66130bae417cad086dadd30843352514c375f2571abaf93e9a0771fa103ae92585b04f55c434769b43d6d22f753f9306036e53524f6f4d9ccbd2c30317a8e899f316149035894da945b76d9082bfee328e7a31b66328ee8b94e068c7\",\n        \"signed\": \"0371c2d64c5ec0c8276ca5ffa615eff42f9efffc58dd8ecfcf67620a9bcb38faf118932bf2cd5b9205fa551334df2a757c597744f791f371fbedd98b21f73405533e49c1d5f33c5ec4be84c619f4ec649c25fd70bdcfe257a63c3373a4d089c89af6eeb7160dd77ab66b1ee7e10850ab4fc1f35132332b53789b2b0140c4f20f97f2142072d624aff7aad324aacd068c035aff52fa712f4e74832de031b2642314d17110dee6fb85762dc30d7e97782fd1fbff7179f00917f55af7503a5b7e23c6eadb65e104f1517b6624c9e5204b3fd29a6585e92ce3a3eee2c5ae177920f7b4ab2cac87d672ab6baac1186d904aea3498534eb5ab23e4ac4c0ddb0d82a5ae531d76549d367628577bac4235e897d9fe205522047d214ff6ccf311c4e397827d97f2868e70ac17d28e334999744d359376a482fdcb414b02b2687b962ee8086e573fe000dc51dee06879c684e25f94cee5e861347e7be7fca549a0f765136a2f4b88fede07024dd2fce1f6d0c0354da1a16ef366b315b3f7233031f979b70eac6e23bf3b349efbd0e4f53f4d5c41fc004276a59670659f6905ef03d2fc098d589fcbc1328282fa22b10db83c5d70865994fd19d760a39d476e02330d2c6d19e742267dd365bbe1fe5c711a95b184508ce48c1c96d7e63990b408d45089be79e32f9cb0162fd1e7d0d19d97d0ae78ff824cc6989486c0bd038352551f37499e9e9826804e9d2624ad0c7b7534560f45fd7d324b8e517e01c9b2743c14979cfd512bc3fe667279b3a277fb463e9d7349b64ffc9fe60884c21e481081ed70e6da5a3539c448971f0d9787289fcb0080f219e99449f8298c42475f87fd10aeb509c530cf6a57748eb8f3562161fa4875ea953f09659c7df7a9950f0317467cb4e5366e196e32f5e2696733a25eacbde49210490762060ea231370d4090429bb06bb867399e8d37bf5d21a0e72147e496cf3b7dd6fe6e5edea9668d802190a91c600e29523f8eb904e48b70412bc10a7020984c5ff0f5f383f214ae594dc85971e480372848d0d7e7cc5c18ff88ba9b262d7884698a41c6c7819c0319fdc6bb07b91dc1694dafe3af37a538bf2b2d8cacb27d24cdc6eadb8c6a2e6b7df8a4654ae937850c890ad930980afcc1492db8a0168cbc9f10657eb48d2ac87f5175d23caed4b5e6f10bbeaa5e33fc5f6418d63ba374ab1a3cbd36b729ddbdaba989d4645e3a66130bae417cad086dadd30843352514c375f2571abaf93e9a0771fa103ae92585b04f55c434769b43d6d22f753f9306036e53524f6f4d9ccbd2c30317a8e899f316149035894da945b76d9082bfee328e7a31b66328ee8b94e068c7\",\n        \"signature\": \"0371c2d64c5ec0c8276ca5ffa615eff42f9efffc58dd8ecfcf67620a9bcb38faf118932bf2cd5b9205fa551334df2a757c597744f791f371fbedd98b21f73405\"\n    },\n    {\n        \"secret_key\": \"75a503f48ffc221617672519111bf90da39da9eab2e2914fd3755f10f5393668\",\n        \"public_key\": \"f680cc0f6358cdcf537aa71128cfadfc0f3a89c100aa34bcd2427e248b6ed50b\",\n        \"message\": \"7b01090423236cb4b13c4177fce52a7ff6580588cc2eb5a3f39ff5d0c73e01e01bf7bd74afe4151250c391426ea507271bea1d6d85f0b2fe35c40500f98d0656c6388fc9efba1837db22dfa29d892676f50e575fe89fd29389d09d080bad67ba544cacabf5a7738237c55e2875ed4916302a2b4dc496e74273bf05191137810e50e48195260bab6d81f9c80562ee73ccb9333cd9b61daf5b0038a4e6c5c958a91f68508c1d882519c1aa4ffcc53562463a0ae30163696f84b97ccbd8679820edd3617e7b896eeffe341ec6b5b03f73b625d741c655fe6e82d11d478a7d543ff6c0fa3a3a8c94a616fb847070d1fbdde6010f026b089cd863c3bd29b1c4269f77659e515728890c973be87f0b833ca5af6b4c3133ad4fa4f91655c6adb5b7235c27fe348284f3f13366a6a03ad22b87c6f5584bdeaea48c70325d6e33a475f50511063875192a87edc388089b84395390c2a3ad89a22595dc4a715a42a2c0efdef67b354b34fc75ca98df913e759e51c7f625ddd598ac22d421decb57bebd54220ec6daa5ece769d2e01be7b6bee2ff5a0b06b32d6da1d7bc057e3abfaab242a3f7e6646a159e4f505e4662982b13d0cc1fba91d10309a42dc1087cf10d36e31f170615a0acb508bf683e2de00c87640d304a947bc4971ff3619c72abd83c7b2cbb3464c4040c2662b58508b74680cfa6de06e8d21e3bec8511199312680009071f706b7b133a2487d5745ffadd5dc0eb2b553df440787f011dda37719fa71315e8b291efd77da3ba14fb995f03571a3db522b63c60be5619941699b39222b59d0f23e5eb37ead4b7f750ed4abf4db87c70da665bef4d7a2921b2c99897f2321c9be6075e744c8228639ab736dbeb2beab440c156a39a2efd261db50855e304d9cfeb99141c613558109f21474d272a2d906d4893934aff8e08a4fcee964a5cd00732fd33af29849c8dfca65979421857185cf629f86807a85973d3440a6bf811a58d041387249811ec047e5e8b343b2387d0181e0d0bd461ef10e8164aae357d9b29dc0ace3ec6d743ae3454ab9f842a28d5710217dffe50344e8d932f1801b0e8f966198ef1c9cc6969f34734aa6a63aeaab4339f75d34ffa8acb937ed9c73092a309a9b84a25011e3114c265e4f602337eb699b5a22d572b03e4dad03b0461c00db9679b72fc5b493ef4486f85535d813a58080385afd4e8d871828034334bfe441d18984e4dfcde024403b5ae66cc50a47301b57f9a32f740bdc7ff1d\",\n        \"signed\": \"df28e3e630360867864bc41e43fd7ddeb52876dce9b234a3fcc3d8549db0112e176390a685ebd484936e25c08c8a3878a37b3c4e239ad0a0e5019937ffbcd4077b01090423236cb4b13c4177fce52a7ff6580588cc2eb5a3f39ff5d0c73e01e01bf7bd74afe4151250c391426ea507271bea1d6d85f0b2fe35c40500f98d0656c6388fc9efba1837db22dfa29d892676f50e575fe89fd29389d09d080bad67ba544cacabf5a7738237c55e2875ed4916302a2b4dc496e74273bf05191137810e50e48195260bab6d81f9c80562ee73ccb9333cd9b61daf5b0038a4e6c5c958a91f68508c1d882519c1aa4ffcc53562463a0ae30163696f84b97ccbd8679820edd3617e7b896eeffe341ec6b5b03f73b625d741c655fe6e82d11d478a7d543ff6c0fa3a3a8c94a616fb847070d1fbdde6010f026b089cd863c3bd29b1c4269f77659e515728890c973be87f0b833ca5af6b4c3133ad4fa4f91655c6adb5b7235c27fe348284f3f13366a6a03ad22b87c6f5584bdeaea48c70325d6e33a475f50511063875192a87edc388089b84395390c2a3ad89a22595dc4a715a42a2c0efdef67b354b34fc75ca98df913e759e51c7f625ddd598ac22d421decb57bebd54220ec6daa5ece769d2e01be7b6bee2ff5a0b06b32d6da1d7bc057e3abfaab242a3f7e6646a159e4f505e4662982b13d0cc1fba91d10309a42dc1087cf10d36e31f170615a0acb508bf683e2de00c87640d304a947bc4971ff3619c72abd83c7b2cbb3464c4040c2662b58508b74680cfa6de06e8d21e3bec8511199312680009071f706b7b133a2487d5745ffadd5dc0eb2b553df440787f011dda37719fa71315e8b291efd77da3ba14fb995f03571a3db522b63c60be5619941699b39222b59d0f23e5eb37ead4b7f750ed4abf4db87c70da665bef4d7a2921b2c99897f2321c9be6075e744c8228639ab736dbeb2beab440c156a39a2efd261db50855e304d9cfeb99141c613558109f21474d272a2d906d4893934aff8e08a4fcee964a5cd00732fd33af29849c8dfca65979421857185cf629f86807a85973d3440a6bf811a58d041387249811ec047e5e8b343b2387d0181e0d0bd461ef10e8164aae357d9b29dc0ace3ec6d743ae3454ab9f842a28d5710217dffe50344e8d932f1801b0e8f966198ef1c9cc6969f34734aa6a63aeaab4339f75d34ffa8acb937ed9c73092a309a9b84a25011e3114c265e4f602337eb699b5a22d572b03e4dad03b0461c00db9679b72fc5b493ef4486f85535d813a58080385afd4e8d871828034334bfe441d18984e4dfcde024403b5ae66cc50a47301b57f9a32f740bdc7ff1d\",\n        \"signature\": \"df28e3e630360867864bc41e43fd7ddeb52876dce9b234a3fcc3d8549db0112e176390a685ebd484936e25c08c8a3878a37b3c4e239ad0a0e5019937ffbcd407\"\n    },\n    {\n        \"secret_key\": \"d8aa2a0aa514fd845f7aa66b83c0eabb9c16023abc1695773450b2bb332522f2\",\n        \"public_key\": \"e4e8d6b298248c15fe08f87a3bc6084bf2d64d7f1e4b2d51599e9fad9cc91092\",\n        \"message\": \"08deb3b832f52d6556f78c3f0abe46f1efe45e3d5d88e7f8edf803670ce4612921749e9ece63fdc9bef2ba483812bb622be744d40404fd6e09c9e1cb7ce19de81a9dadf556352ee89810c76a9b1047ac62b16ebb7da23ddc2d4ab76a020561d02d41b58b94953a23faafddd781b7dca7b7fbee706ec10a73125bf74436056bf3b4f2a0701cfef05bebd3dd8eef306c1ac1b00950881ff05ab5c8248ad1096ac91d526ae59ba0583b27db7d1e390f57a5889e2799a4a1519b15d93dbf0b21d450873c76ba520461e8bb5c83c9012eacd557bea640586efcb869007647d449f91ccd52afe3a89477de7c2b647ecc9bf967fbf5769d74889447d9522d9e8069c3499af6a8a1097a95d3bcc5f83433934484314cb30758b525fe53e90721df5cbe03d96f0d0f98521f01a5fbe57ce8804dbd18f8f5eac8f7dbb58c41789a44433f8a8d1245d2adda8c78d881c65ea661ab178d4fc2634cd6cb514ab6f2543e9112183f3ff73a3f450106b0ee8a347a80cb824ac1f80164e3bb5123698de0e747359ca35acaa3ba0c943beacd7a9bdf8ff73978e9fb002045e8fe5648cc0f9cfa88b0d812e81aa62e0d9c73fe613afd9539bcb615721fb497d62f65c83b87a6d2143f9b1c880ec8671bd42c8de957b1a68ee49226ff717ccc6e74f2eee49c30dea53fec3cd4d90f2cccd8f97c55d5c752454be2ba7b6ff2030be67e0df50c5e883843e71612f2b95359543e2ba1bf2e98debcf5768f2be6fd504d9783ce921a81e09416dbcf2bb655a924b1ef0112d671f084a5b690b0b64a8b9bf50333c359ff3fef199694f9b6292424f00666cef6d06d161a79e3a1b9b9629eea53505f5e36aeadfe0d759672b0ffe498397d90a55d9944b30541a7e1bdac53020640137dc252aef622f3819d36ab498d763e4327ba8580dd9f7e5f47c24cc9928734b7e62112c57e3e0cfedecdcbaccb0c45af8219455ee7223c71e7e20410c5244eb827af2f3935ce4755444747aa945f4c26db3a298519e75fc6bace91529972e8691b694d30aa8b5ec4c1a028d3bd10bd0c8a408fb7d9d703495553ecea598d0622dcc74de489ba7195cdae8d5cff9855921837b528433ee55c0b7090857a0c2784d9310b4825a7993ad9c6f18f83bca5cc6a25047168a8376b062e3a48ea90cad88e331187c2b6f281426f81f78804a895c4ec06c341fe846af4527ea26069dcf61d813fddf0fc43c707350bfb2fc1cffcee7d7ccd7d75f7a465a3d14d57302c146aba3e\",\n        \"signed\": \"146f65d43e715542894b7900a2f8cd4b17d3870a6100e37de005b0db5d8151246de4ee3842d3ebca20a5da22a363a7575e7a55128295f27211484af57cd5310908deb3b832f52d6556f78c3f0abe46f1efe45e3d5d88e7f8edf803670ce4612921749e9ece63fdc9bef2ba483812bb622be744d40404fd6e09c9e1cb7ce19de81a9dadf556352ee89810c76a9b1047ac62b16ebb7da23ddc2d4ab76a020561d02d41b58b94953a23faafddd781b7dca7b7fbee706ec10a73125bf74436056bf3b4f2a0701cfef05bebd3dd8eef306c1ac1b00950881ff05ab5c8248ad1096ac91d526ae59ba0583b27db7d1e390f57a5889e2799a4a1519b15d93dbf0b21d450873c76ba520461e8bb5c83c9012eacd557bea640586efcb869007647d449f91ccd52afe3a89477de7c2b647ecc9bf967fbf5769d74889447d9522d9e8069c3499af6a8a1097a95d3bcc5f83433934484314cb30758b525fe53e90721df5cbe03d96f0d0f98521f01a5fbe57ce8804dbd18f8f5eac8f7dbb58c41789a44433f8a8d1245d2adda8c78d881c65ea661ab178d4fc2634cd6cb514ab6f2543e9112183f3ff73a3f450106b0ee8a347a80cb824ac1f80164e3bb5123698de0e747359ca35acaa3ba0c943beacd7a9bdf8ff73978e9fb002045e8fe5648cc0f9cfa88b0d812e81aa62e0d9c73fe613afd9539bcb615721fb497d62f65c83b87a6d2143f9b1c880ec8671bd42c8de957b1a68ee49226ff717ccc6e74f2eee49c30dea53fec3cd4d90f2cccd8f97c55d5c752454be2ba7b6ff2030be67e0df50c5e883843e71612f2b95359543e2ba1bf2e98debcf5768f2be6fd504d9783ce921a81e09416dbcf2bb655a924b1ef0112d671f084a5b690b0b64a8b9bf50333c359ff3fef199694f9b6292424f00666cef6d06d161a79e3a1b9b9629eea53505f5e36aeadfe0d759672b0ffe498397d90a55d9944b30541a7e1bdac53020640137dc252aef622f3819d36ab498d763e4327ba8580dd9f7e5f47c24cc9928734b7e62112c57e3e0cfedecdcbaccb0c45af8219455ee7223c71e7e20410c5244eb827af2f3935ce4755444747aa945f4c26db3a298519e75fc6bace91529972e8691b694d30aa8b5ec4c1a028d3bd10bd0c8a408fb7d9d703495553ecea598d0622dcc74de489ba7195cdae8d5cff9855921837b528433ee55c0b7090857a0c2784d9310b4825a7993ad9c6f18f83bca5cc6a25047168a8376b062e3a48ea90cad88e331187c2b6f281426f81f78804a895c4ec06c341fe846af4527ea26069dcf61d813fddf0fc43c707350bfb2fc1cffcee7d7ccd7d75f7a465a3d14d57302c146aba3e\",\n        \"signature\": \"146f65d43e715542894b7900a2f8cd4b17d3870a6100e37de005b0db5d8151246de4ee3842d3ebca20a5da22a363a7575e7a55128295f27211484af57cd53109\"\n    },\n    {\n        \"secret_key\": \"de8f1c99e7f8556df20b59b8504cff7c6c5241a8aeeb30b92eab97bf481d0fe9\",\n        \"public_key\": \"e463791d0f567ee73abbf47dd57167a535613b05cd48d92ebc7d24e6ebff9573\",\n        \"message\": \"38d93e5c9801db901797ec75c6dddc65ae7980de210bed43b33eb44cdc6dc9933fb6bec7421db10f0a59320b9e642a21f1dd235601fcd6c53be4a877f4fed3fa4a0ad4dc6e9b391bcfa434906925ba45ecc5b435d9ab8cfafc394bdcca9b07d5668393446e3400e9039435a1dc78cbc08807a3fb24ca8b19f64ea08b8bf6c20a195b51ff8015f3e7c91d08e4bc62415595a5a882fba651dc3a675187af618249747b4680d1d15a202ea9df48b1c214fd403466fd1a265f2defaf8ed5a6bf0eb08d1864f2a28e9472143c6fd103b6b108c0d1d1363b99f9202d11f02056c279cca315db1ab6d31018458f57ba3316cd2738e80c492d857cb1749925e331c65858b50983cd9838cfd2188a5e8f05b471fd3cddcd30d96901194020f115fb469ab5849006dffa2d543a13b3b506ed65cc457532b8aa3ee31d9d8d9e5298d7ac707ac15b827a578c81d434f84cb1b56120d667b2afe6d1530afddfb966d953be7e32df07de389e2d04b232d3512c7db9358fc944d1b118078e6999e891bbfa4a4329f65d807188b59858c431211b29576f4496138b7c0c128f7bef5f79b0f446fc6b4a0e20bca4c40a83571a36644abffabd49cb585fd064c8e509d9a0fcff462676f0ebcb61cec61e512be6f182abd59e09f642aa619634853482ece8f89800f9c5bcfb841431ca0691ed8d80e0a2fcb797a036897cfb6537586b31c00b7965efddfda72861845026459157f79eba1bcaf6cd41d618aeb1bd8da1be98f0cdc7f2e09b903de49c0c1be91dcc177b298096836dcea4f601dd86691555128325438bd9ccbfc0e777920ae8bbd57634c6104fe69a3a72012a2360b6e552550cffb4e2f0b41fe15537ee0e6f37e7880fb4d12bef6cad266ce58df9816b35960cd0bf8652862ee789ccc31a7efc21a81bda46146b111fcfd94f04856ab61a557b1ff7c8e4ea6d9c4bcdd93b151aa08461c568defb2aefdfce96394dc822d4ef6cc4b9a3e6c332039f6538aa0df8de8126d90c312ff496887486111565534346a7462625d63df69fcb5741906f19e00fc8003f08b95985c38b8674af423ca56de5f881b59c466243a7adbadba29caf57fa777122e61823b4e708182aaf37206d7d5ed051c12a5c0f6b4371043f562cdc029d5e1ba9b2bf5ffbf1f5f523db06feca427db7a08819ffb2d0585242e20da58e320b16b16e448d8be0ef7402d24a7194257133bdc982314d83adbcd12e8af31303426c59ffd8269ce4b987ca9b6f0ffdbb4d1d12\",\n        \"signed\": \"30abc4e4e4b388581e668bd409ee18a6ede81a136c28a2924df5fc00d7c280d97862ae3a67a935ce492364135e659adb5fbabe689816591f49ac5022a387cc0938d93e5c9801db901797ec75c6dddc65ae7980de210bed43b33eb44cdc6dc9933fb6bec7421db10f0a59320b9e642a21f1dd235601fcd6c53be4a877f4fed3fa4a0ad4dc6e9b391bcfa434906925ba45ecc5b435d9ab8cfafc394bdcca9b07d5668393446e3400e9039435a1dc78cbc08807a3fb24ca8b19f64ea08b8bf6c20a195b51ff8015f3e7c91d08e4bc62415595a5a882fba651dc3a675187af618249747b4680d1d15a202ea9df48b1c214fd403466fd1a265f2defaf8ed5a6bf0eb08d1864f2a28e9472143c6fd103b6b108c0d1d1363b99f9202d11f02056c279cca315db1ab6d31018458f57ba3316cd2738e80c492d857cb1749925e331c65858b50983cd9838cfd2188a5e8f05b471fd3cddcd30d96901194020f115fb469ab5849006dffa2d543a13b3b506ed65cc457532b8aa3ee31d9d8d9e5298d7ac707ac15b827a578c81d434f84cb1b56120d667b2afe6d1530afddfb966d953be7e32df07de389e2d04b232d3512c7db9358fc944d1b118078e6999e891bbfa4a4329f65d807188b59858c431211b29576f4496138b7c0c128f7bef5f79b0f446fc6b4a0e20bca4c40a83571a36644abffabd49cb585fd064c8e509d9a0fcff462676f0ebcb61cec61e512be6f182abd59e09f642aa619634853482ece8f89800f9c5bcfb841431ca0691ed8d80e0a2fcb797a036897cfb6537586b31c00b7965efddfda72861845026459157f79eba1bcaf6cd41d618aeb1bd8da1be98f0cdc7f2e09b903de49c0c1be91dcc177b298096836dcea4f601dd86691555128325438bd9ccbfc0e777920ae8bbd57634c6104fe69a3a72012a2360b6e552550cffb4e2f0b41fe15537ee0e6f37e7880fb4d12bef6cad266ce58df9816b35960cd0bf8652862ee789ccc31a7efc21a81bda46146b111fcfd94f04856ab61a557b1ff7c8e4ea6d9c4bcdd93b151aa08461c568defb2aefdfce96394dc822d4ef6cc4b9a3e6c332039f6538aa0df8de8126d90c312ff496887486111565534346a7462625d63df69fcb5741906f19e00fc8003f08b95985c38b8674af423ca56de5f881b59c466243a7adbadba29caf57fa777122e61823b4e708182aaf37206d7d5ed051c12a5c0f6b4371043f562cdc029d5e1ba9b2bf5ffbf1f5f523db06feca427db7a08819ffb2d0585242e20da58e320b16b16e448d8be0ef7402d24a7194257133bdc982314d83adbcd12e8af31303426c59ffd8269ce4b987ca9b6f0ffdbb4d1d12\",\n        \"signature\": \"30abc4e4e4b388581e668bd409ee18a6ede81a136c28a2924df5fc00d7c280d97862ae3a67a935ce492364135e659adb5fbabe689816591f49ac5022a387cc09\"\n    },\n    {\n        \"secret_key\": \"0736f801720a947c5c2f3258ce0d511c3e17e94e37b30adfa52095921171d400\",\n        \"public_key\": \"4f694255920d0c38de6e72e165c33aee76b1cbf6f4837aa5901475667acd2826\",\n        \"message\": \"7f87b51f6ead2d4402a3bd3c3769a267ac8e82f779ad7b986dec82cbfc1ea51291884326d9226967cb66a96873184f0e83b3ab25a5ab2fa805fe3a0e7b190a622d461b7830a3f697c831c29ea7c0cd4b68d8e77aa69711cf864dc1d5394f4845e2fbb5076404e09a88b79f05670551bce2ef5468b79d57888b9852a4bb479a4fd0beb681fd523fc5bf4458abbc38ece72e106e00222015a57ebec55bf47513e25c3c4554843bdacbcfe9f1b8d0ae354e48d03fdebdf20d655b5268d8bbbf33b1288910f0444fcd56c0da7b8903362b7e37a864654277cffbe6c60857f0b3514d22a40b9dd2d3fe5caea5507a0de3051bb3a4015fa0fe4c462b98fef2357dcf6b97dc75def382f901f96f4a04a3efc60254200a2c4cdc8a58b25d94e32954eaff1511ac46e3606663b6875f136499da6a769097879a6e0834d564fa7fdb99581183ed0c9d48fd195d7ecd9f4dd4865565fd17a008718dcd76f68a54e516a2b730ed3dba5c2cf40630bbfe7fa03bb7cdd967695495a7c86e2e84cb017ec69601924631595affaa8cfd048d14267c73e54cfa539047e717691e399737fa50cc4844961257c93d7253d23226b7cd0d1bd31f3f0d2d892d073d8c5073c602f61a04d6437c3903eb4a64a01fbcc0c7e159201cdc4aa42ef3b1ff9c78fc275cfb11a05ffed8f9f22d85ba924d8d32231c254d898da7f0679a64cab84026906e9e85f95efd8ee2a1725633f4de2ba67d99aa7f0550af139e9f8c5293786727d82630296d5daa9e830aa1b3b5b302b8b662ac832e9213016ba493a03a28cc3e9540d0d65acddbfe1252b5c16a84a445ce75415c6cd8ab16fe5eef117097d71eb5676b9a95b35882a7c3506bc5d02f03910a63d46846b213c3c9bb2fc34e6c69017d2065a1ad3ce3fd14ab0014f584e57ea9d903e40aceb230a8693fa2e63641c25438ff7a1638760438844cdf001180f5b177be69edf7ef66b39312805214cb17706cefe545be5a77019a5ec52bbf78850fa3d97de2d4d74aa68b58ca812a1b156a0c4001129f067232a6ec91a5ed4270f2a4c6efeee787004770c859e450e837efb04dc998bd273c27a09855e4eca1a22a9b88c17bdbf253a79761070a76817a7f74ff3f07fb718bffa0b4f326f284e62f836832427be82f483373515b9bf59af4a76a57e2f40b91034dd568ec14ac10e2309b87e2922f9cd9fc1a46a47ed3bc7e1b9feb9ee067073fa5dce2a67530526de67ee0e509663c44467eeb59420103ebcdffa709\",\n        \"signed\": \"c03c0314851279edcde970c23efa236f235eda960d2c27d3ca946f650c200b4eba04be668ff62eaffa6cea351abdfc54401dccce3dba78004aec9581a2ccf40f7f87b51f6ead2d4402a3bd3c3769a267ac8e82f779ad7b986dec82cbfc1ea51291884326d9226967cb66a96873184f0e83b3ab25a5ab2fa805fe3a0e7b190a622d461b7830a3f697c831c29ea7c0cd4b68d8e77aa69711cf864dc1d5394f4845e2fbb5076404e09a88b79f05670551bce2ef5468b79d57888b9852a4bb479a4fd0beb681fd523fc5bf4458abbc38ece72e106e00222015a57ebec55bf47513e25c3c4554843bdacbcfe9f1b8d0ae354e48d03fdebdf20d655b5268d8bbbf33b1288910f0444fcd56c0da7b8903362b7e37a864654277cffbe6c60857f0b3514d22a40b9dd2d3fe5caea5507a0de3051bb3a4015fa0fe4c462b98fef2357dcf6b97dc75def382f901f96f4a04a3efc60254200a2c4cdc8a58b25d94e32954eaff1511ac46e3606663b6875f136499da6a769097879a6e0834d564fa7fdb99581183ed0c9d48fd195d7ecd9f4dd4865565fd17a008718dcd76f68a54e516a2b730ed3dba5c2cf40630bbfe7fa03bb7cdd967695495a7c86e2e84cb017ec69601924631595affaa8cfd048d14267c73e54cfa539047e717691e399737fa50cc4844961257c93d7253d23226b7cd0d1bd31f3f0d2d892d073d8c5073c602f61a04d6437c3903eb4a64a01fbcc0c7e159201cdc4aa42ef3b1ff9c78fc275cfb11a05ffed8f9f22d85ba924d8d32231c254d898da7f0679a64cab84026906e9e85f95efd8ee2a1725633f4de2ba67d99aa7f0550af139e9f8c5293786727d82630296d5daa9e830aa1b3b5b302b8b662ac832e9213016ba493a03a28cc3e9540d0d65acddbfe1252b5c16a84a445ce75415c6cd8ab16fe5eef117097d71eb5676b9a95b35882a7c3506bc5d02f03910a63d46846b213c3c9bb2fc34e6c69017d2065a1ad3ce3fd14ab0014f584e57ea9d903e40aceb230a8693fa2e63641c25438ff7a1638760438844cdf001180f5b177be69edf7ef66b39312805214cb17706cefe545be5a77019a5ec52bbf78850fa3d97de2d4d74aa68b58ca812a1b156a0c4001129f067232a6ec91a5ed4270f2a4c6efeee787004770c859e450e837efb04dc998bd273c27a09855e4eca1a22a9b88c17bdbf253a79761070a76817a7f74ff3f07fb718bffa0b4f326f284e62f836832427be82f483373515b9bf59af4a76a57e2f40b91034dd568ec14ac10e2309b87e2922f9cd9fc1a46a47ed3bc7e1b9feb9ee067073fa5dce2a67530526de67ee0e509663c44467eeb59420103ebcdffa709\",\n        \"signature\": \"c03c0314851279edcde970c23efa236f235eda960d2c27d3ca946f650c200b4eba04be668ff62eaffa6cea351abdfc54401dccce3dba78004aec9581a2ccf40f\"\n    },\n    {\n        \"secret_key\": \"fa75650491047428d363b5822222122dffb5a9fddc603c33c8a608618375dcf3\",\n        \"public_key\": \"98c9641fa9dfa8ea13e0d1c716b8679e264be15dd2d4c06ab43cbee47916ee01\",\n        \"message\": \"f54e41b939e37df17c7d6043fded14a915d934e867c345269fdc0177f5bd10c4348f319e0ab9a64cc0b7d4e0c91ca9aadaab2edcba544f14ed2cb539ca8975097d87927095b4ebd490344340061ed93c38167edaa096a230db59624c67fb9a1e1ddac402133f4d47cfc11e2fae6b3f3c5001cba9a8aed90073103240227e716ff71bf68a591ba2ceff2d31b86ef21ab012eccd409ad5c29d659a1b37c4d85505304140fb2c3437a206868b1352c102bbfa3b9a76522a2bfc5406b257696de74ee7d315c8e99caa96bd838006c6da2a4233315a856acb8e80c33168b333551d91d074055734130bd7d14c56811ebabf7d5a250e6072593d9f2f8b97c12a703c2c479cb0b15b7a2775c9dcd2ca4624672368a2e6145467f3be6615f93b8120a0a12da1560663a26a61731966b44b299ebfad2a95c62360f39ce05d9558e305ee23a52fa5ce20f6be5e262aff3a864d5ddabe23ff943f71d5998493d99fe2ac2374b464a69183c3bc4f1ddb883611149d7ddbf1e8380b544335e2b89395054c9f2558dfc56ea93ff14d0f15d2e0bd8937a556387de96e418d8b3a7d666fb190364b2c2190d3c25f1752d5483dcbb5960064f0c87fcf8f313d28781c114a169b690a8701c50d89c77324531c0f849dbad1633d925acd06c16a9cea19a434ebc42aebb1fdb9b0bacc93cec39919943664ea1a958406ff9e4935c92ca7c39708f9cab710a583096b4ed9f48d9e090647240d76eccbaba591f55fe7e36d72c21727acba0f8030954e62bc580b8b670c4457c3403e369ac20e660d662f7f6a414213ea43f7c0105009c1de817adf6ffd9cca3b45a63a822281c6e2772fd7b7809603184b4879b18c887903f0fc8d8e1e2dbf6e772f0b2d9b8a29927acc81714a2256ad8d7b7330527d7dbf8befd82f8c9bb401cf0a90249a64ca6f8833db31bd03b9e7946d06dd04383d7c082d70aeb37ff84c2b057d973b894b4a03ec7bf031aea656a1908488894a4ada3fd7fadf91ede9550d38415f82a09455c0f432fb55987132f00042afd60ea51d1f1c6c1afe0cf87c346e31e63e26f49b137177b2d47ab30f07cea071931274cf010836d683fff3be7134c78b8bfd8b1b8fc2049e18ccb1e18a0a9585a7d8a1e25492608668c96d62a0aca8ef90e048d20378c108d06b03fe3ec4adb27528ae08f7ded9487893ae64ca4b939202aa4c17afe718cdca49ff9616d0cdf8334b6aee2d6d20947ca4bd7df531dd1da99581ff72ea56fe62caa2c95e3587\",\n        \"signed\": \"1effbf9299a1b9354fe1f1dec1766595ea767ab8e4da9bb57b4f69bcbd8cb3d86f768392f59b39fafa8a210a6509fe0d6008d6356111adfb3799c1d559c26309f54e41b939e37df17c7d6043fded14a915d934e867c345269fdc0177f5bd10c4348f319e0ab9a64cc0b7d4e0c91ca9aadaab2edcba544f14ed2cb539ca8975097d87927095b4ebd490344340061ed93c38167edaa096a230db59624c67fb9a1e1ddac402133f4d47cfc11e2fae6b3f3c5001cba9a8aed90073103240227e716ff71bf68a591ba2ceff2d31b86ef21ab012eccd409ad5c29d659a1b37c4d85505304140fb2c3437a206868b1352c102bbfa3b9a76522a2bfc5406b257696de74ee7d315c8e99caa96bd838006c6da2a4233315a856acb8e80c33168b333551d91d074055734130bd7d14c56811ebabf7d5a250e6072593d9f2f8b97c12a703c2c479cb0b15b7a2775c9dcd2ca4624672368a2e6145467f3be6615f93b8120a0a12da1560663a26a61731966b44b299ebfad2a95c62360f39ce05d9558e305ee23a52fa5ce20f6be5e262aff3a864d5ddabe23ff943f71d5998493d99fe2ac2374b464a69183c3bc4f1ddb883611149d7ddbf1e8380b544335e2b89395054c9f2558dfc56ea93ff14d0f15d2e0bd8937a556387de96e418d8b3a7d666fb190364b2c2190d3c25f1752d5483dcbb5960064f0c87fcf8f313d28781c114a169b690a8701c50d89c77324531c0f849dbad1633d925acd06c16a9cea19a434ebc42aebb1fdb9b0bacc93cec39919943664ea1a958406ff9e4935c92ca7c39708f9cab710a583096b4ed9f48d9e090647240d76eccbaba591f55fe7e36d72c21727acba0f8030954e62bc580b8b670c4457c3403e369ac20e660d662f7f6a414213ea43f7c0105009c1de817adf6ffd9cca3b45a63a822281c6e2772fd7b7809603184b4879b18c887903f0fc8d8e1e2dbf6e772f0b2d9b8a29927acc81714a2256ad8d7b7330527d7dbf8befd82f8c9bb401cf0a90249a64ca6f8833db31bd03b9e7946d06dd04383d7c082d70aeb37ff84c2b057d973b894b4a03ec7bf031aea656a1908488894a4ada3fd7fadf91ede9550d38415f82a09455c0f432fb55987132f00042afd60ea51d1f1c6c1afe0cf87c346e31e63e26f49b137177b2d47ab30f07cea071931274cf010836d683fff3be7134c78b8bfd8b1b8fc2049e18ccb1e18a0a9585a7d8a1e25492608668c96d62a0aca8ef90e048d20378c108d06b03fe3ec4adb27528ae08f7ded9487893ae64ca4b939202aa4c17afe718cdca49ff9616d0cdf8334b6aee2d6d20947ca4bd7df531dd1da99581ff72ea56fe62caa2c95e3587\",\n        \"signature\": \"1effbf9299a1b9354fe1f1dec1766595ea767ab8e4da9bb57b4f69bcbd8cb3d86f768392f59b39fafa8a210a6509fe0d6008d6356111adfb3799c1d559c26309\"\n    },\n    {\n        \"secret_key\": \"e1c12946d221a194f22f2762c0e51cbe3f98b914a47d3dc41a1f45c54370637c\",\n        \"public_key\": \"10408136a68fc56c7d3b36b7fef122094de081031189cc84a48806aaf6cb9185\",\n        \"message\": \"870f4cd97cfc0aafada40072312fb54bccc07628714e4962d4bef4eeb5de40a19a246b5b7d52d487b7e52d656f2c6403b916d02e02a6d291c1e1828dd945a583b438528d1c39765a572031ffa916b68321f32e6646f0dcc1c60235ffaa3235f484a5c4978fa3e6bf14301d53e12f4cc52118b1f6f07f5336f5d0a93789bb01d162fb3126dcd756e0642e7e698963c0345911a5cf3c9953f77319426cea2cdeda3efe989ecb63cb9eb8b920de766c4fcf6336e5bc4371a068371fed95c8c2b61ee9b7c3e3831c20bffe8707c0c98be96153c8a873d7f28afca1bf71085ce0e3899eef5591bdd666dc2d07641772d745c51644a260815b208c4dd305f05fe463d0d9d5a9eeff9779f5b1d44f26083078566d0e5ff56b3af0e64cc38708af5a65f654352df10437f1ddf945a0da1f4def6a71a060e0c4adeccaacf85e090f7090370ae24e5238d768a08fe6b4bb5ec497a6603198608415c7c6490048aa36737c08503008aece0f494219ddf89b72ea77171c6d3117089eb88907e8c33fb9e70b0dc281f664b5f965b5d2adb1250710ef2352025fb293395ae1d23ee3b592b4c5f2d55569a5458654ce3fc25dd0e3f7e6757aa7b347c1ffd3ba4d4f2c4b6d36afd59863a32a594e74537ece9b8b1ec269bbc4cb54d76238211f62a98a46a4af662fa81eba6f30f514b866b7942bc173f7211a6c014da14e741327a568623d14b8f835ef1d5d62b2523cfe6a85bc69fa05200deac1568b946a816b75c5d7603174fd4e2f9101a79063791bc3d59297cdc10bdaa663abf3c1be2fda17e4e5ce394e90bd76b1f9e0405f5675b99d638abc2c1b2d8b53a6fd3dc8375855ec54ccbda24e672527723b07bb599db54e38793391cf09ef3b1fd7614990065bbd4a19e8d3d1048253ba4c971c2f98d2b359df509087323aa6905029f5cc5e1a0aaf2f7c0108ddb1a40f562be64e57e695ed21dc7db17d533677ef12fcbbe29f3b237bb6344b1109b32a9462abc3ad3c0710b04f38c6f5952db275e77e2f37e95d55096bbaf3e305d5d743d36595bf0567892c210ac7bae7371d164584785dd890174159b3930a9a6ce3a166dda2383e6e2af28c1bf3192447e90511dcd80ebdf9ee2c9bdeddeeb610558641532d07cd13da61254154cc0fd9d481e3b0a237af2ec26256d4ab219faf15ad2b7e8e57ab726ff2723216a574585e2a639d948c2c4f69eeaad283e3a44ff268eaefd7e66b73ede473a8397c76b48d56cb3ccdabc91a8929cf42998350e0\",\n        \"signed\": \"8fd7fa400c032fcfbc402942fc78637526be97ab82f237bb393ea39e35738c67d75409543a8b3c055f08bf69199af63b6911a482fb4f6580802ec9d2dc3c1106870f4cd97cfc0aafada40072312fb54bccc07628714e4962d4bef4eeb5de40a19a246b5b7d52d487b7e52d656f2c6403b916d02e02a6d291c1e1828dd945a583b438528d1c39765a572031ffa916b68321f32e6646f0dcc1c60235ffaa3235f484a5c4978fa3e6bf14301d53e12f4cc52118b1f6f07f5336f5d0a93789bb01d162fb3126dcd756e0642e7e698963c0345911a5cf3c9953f77319426cea2cdeda3efe989ecb63cb9eb8b920de766c4fcf6336e5bc4371a068371fed95c8c2b61ee9b7c3e3831c20bffe8707c0c98be96153c8a873d7f28afca1bf71085ce0e3899eef5591bdd666dc2d07641772d745c51644a260815b208c4dd305f05fe463d0d9d5a9eeff9779f5b1d44f26083078566d0e5ff56b3af0e64cc38708af5a65f654352df10437f1ddf945a0da1f4def6a71a060e0c4adeccaacf85e090f7090370ae24e5238d768a08fe6b4bb5ec497a6603198608415c7c6490048aa36737c08503008aece0f494219ddf89b72ea77171c6d3117089eb88907e8c33fb9e70b0dc281f664b5f965b5d2adb1250710ef2352025fb293395ae1d23ee3b592b4c5f2d55569a5458654ce3fc25dd0e3f7e6757aa7b347c1ffd3ba4d4f2c4b6d36afd59863a32a594e74537ece9b8b1ec269bbc4cb54d76238211f62a98a46a4af662fa81eba6f30f514b866b7942bc173f7211a6c014da14e741327a568623d14b8f835ef1d5d62b2523cfe6a85bc69fa05200deac1568b946a816b75c5d7603174fd4e2f9101a79063791bc3d59297cdc10bdaa663abf3c1be2fda17e4e5ce394e90bd76b1f9e0405f5675b99d638abc2c1b2d8b53a6fd3dc8375855ec54ccbda24e672527723b07bb599db54e38793391cf09ef3b1fd7614990065bbd4a19e8d3d1048253ba4c971c2f98d2b359df509087323aa6905029f5cc5e1a0aaf2f7c0108ddb1a40f562be64e57e695ed21dc7db17d533677ef12fcbbe29f3b237bb6344b1109b32a9462abc3ad3c0710b04f38c6f5952db275e77e2f37e95d55096bbaf3e305d5d743d36595bf0567892c210ac7bae7371d164584785dd890174159b3930a9a6ce3a166dda2383e6e2af28c1bf3192447e90511dcd80ebdf9ee2c9bdeddeeb610558641532d07cd13da61254154cc0fd9d481e3b0a237af2ec26256d4ab219faf15ad2b7e8e57ab726ff2723216a574585e2a639d948c2c4f69eeaad283e3a44ff268eaefd7e66b73ede473a8397c76b48d56cb3ccdabc91a8929cf42998350e0\",\n        \"signature\": \"8fd7fa400c032fcfbc402942fc78637526be97ab82f237bb393ea39e35738c67d75409543a8b3c055f08bf69199af63b6911a482fb4f6580802ec9d2dc3c1106\"\n    },\n    {\n        \"secret_key\": \"762f06ca01e314715f92c90bbe72a25bf26212c81eb1d1a0dae2c31130f7cdbb\",\n        \"public_key\": \"f9626ffd692731925e5aacfa1bded01aa8f730b772d5e46adbc315565b9bf2c9\",\n        \"message\": \"9497483a4fba78433b38e9deb8915c750b6da0f78af4a68b62f9fc0391e338873b1d64b1b7f09f12f056a3c91653498ad56e069b8b160887e8e378a76d8b3c667083c0a2b2d2317d3b874857e57862ef0cb70436a9028f0191ccc616e9d7c9bd869808cf094835ff518677b3fb089f4c9d077cc7742405b4863ac7a59645c9cf540d57399da6ae9d07fd19fca95bc8a86d8b8e24e48733f32158fd19a8a1111d1da1f9b580a39c10484616cf2bc0ec29f63f77c85356158e16da594b5a890e55d0b64599b30293e900ed92ad261969e7df4c4b1d0b6024bdceb69067ef486c20fdcd22a10d5da45fbf905ba1e935c96f50afb63571bcff3130684eda0b56e60b26cf4c0ef9938a92768fc8631fe308236b012f92af24a8f6e6ecbe76629bbaf8ffe54cdbe8671de2ba624a7c0f6193bba4110412902bac2990922a9e5a81053cf876a4c805a04c56a8139d3419e454a622d0342bf426e9802c3dc1b4080c75492afe9d7b1545fe086d963541324ff52a48c6bfaea26668b3e01e5236fd45fe54594535c0b23e287ebd1428c8be0ad141600e91cb51e1ea66271a6421fb689e88a0790a651dbd21ee2089b274666f660ca09ce2d60e39e2ee5f03b6eb82d19976966e79900a810f6d5b5c1a548e5064f5c3d8a9f2def0179df99d143fde69b0712c091c29e9b25f40cafd57a024658d7774037610342f3800fd51f49e79a5b3decc112f58d03e3d2958758588bc4b1c6a6cda7bc5f5be183e41513c1f230f3cc364304bf82484b7cf19a002e150f98c5e97c6166ea15b86340b8c5ebe5c1a183e5588e66f55905086313f37a409e89b47db31ae97453edf69fed7be08113071f374b26ec6043f2a0e9cf8bad802abad69e617e76243b3cc034b099d8729ee407a53eb03bdc6410a039504b3b12c819b64545d405c6a4f084921935bdff4130ae629d909626b062676e538eafdffb1d6229c0889d3cddd3365dc3d6536f7248c49317cb50c56fb57855541d6feebac816c9928fa662d0ae80a0f39e570bb7d22416f98f371b64247968951a8a246f74b3061743c9af7684bbb966ae0bd78a810493ea4ccd71174871c82bb652b2748e5bccb0ab6388a50f053a048087fd97eb15c1a21b1ee1825e54aa130d66318aaf661bbb24763577eb37d310e219b0a9bba0375eb9c9b4af8c4b99a3699e0d3266733b6e4e9c534490a1341cb1990ca5b1c847bc8126026fea903a1f549d65af8fe02a9163ff8ea281e7226243e2a153b921851de10f7\",\n        \"signed\": \"e842b49e533dbc92998dc078e59793a2c2fa636bdfafdb48934c93cf34797102938d137ab7ead1a0f70e94a67d57ef6a02c9ec77d71f70cc57f1533bec87730e9497483a4fba78433b38e9deb8915c750b6da0f78af4a68b62f9fc0391e338873b1d64b1b7f09f12f056a3c91653498ad56e069b8b160887e8e378a76d8b3c667083c0a2b2d2317d3b874857e57862ef0cb70436a9028f0191ccc616e9d7c9bd869808cf094835ff518677b3fb089f4c9d077cc7742405b4863ac7a59645c9cf540d57399da6ae9d07fd19fca95bc8a86d8b8e24e48733f32158fd19a8a1111d1da1f9b580a39c10484616cf2bc0ec29f63f77c85356158e16da594b5a890e55d0b64599b30293e900ed92ad261969e7df4c4b1d0b6024bdceb69067ef486c20fdcd22a10d5da45fbf905ba1e935c96f50afb63571bcff3130684eda0b56e60b26cf4c0ef9938a92768fc8631fe308236b012f92af24a8f6e6ecbe76629bbaf8ffe54cdbe8671de2ba624a7c0f6193bba4110412902bac2990922a9e5a81053cf876a4c805a04c56a8139d3419e454a622d0342bf426e9802c3dc1b4080c75492afe9d7b1545fe086d963541324ff52a48c6bfaea26668b3e01e5236fd45fe54594535c0b23e287ebd1428c8be0ad141600e91cb51e1ea66271a6421fb689e88a0790a651dbd21ee2089b274666f660ca09ce2d60e39e2ee5f03b6eb82d19976966e79900a810f6d5b5c1a548e5064f5c3d8a9f2def0179df99d143fde69b0712c091c29e9b25f40cafd57a024658d7774037610342f3800fd51f49e79a5b3decc112f58d03e3d2958758588bc4b1c6a6cda7bc5f5be183e41513c1f230f3cc364304bf82484b7cf19a002e150f98c5e97c6166ea15b86340b8c5ebe5c1a183e5588e66f55905086313f37a409e89b47db31ae97453edf69fed7be08113071f374b26ec6043f2a0e9cf8bad802abad69e617e76243b3cc034b099d8729ee407a53eb03bdc6410a039504b3b12c819b64545d405c6a4f084921935bdff4130ae629d909626b062676e538eafdffb1d6229c0889d3cddd3365dc3d6536f7248c49317cb50c56fb57855541d6feebac816c9928fa662d0ae80a0f39e570bb7d22416f98f371b64247968951a8a246f74b3061743c9af7684bbb966ae0bd78a810493ea4ccd71174871c82bb652b2748e5bccb0ab6388a50f053a048087fd97eb15c1a21b1ee1825e54aa130d66318aaf661bbb24763577eb37d310e219b0a9bba0375eb9c9b4af8c4b99a3699e0d3266733b6e4e9c534490a1341cb1990ca5b1c847bc8126026fea903a1f549d65af8fe02a9163ff8ea281e7226243e2a153b921851de10f7\",\n        \"signature\": \"e842b49e533dbc92998dc078e59793a2c2fa636bdfafdb48934c93cf34797102938d137ab7ead1a0f70e94a67d57ef6a02c9ec77d71f70cc57f1533bec87730e\"\n    },\n    {\n        \"secret_key\": \"c5cc0b95818c4bf38da1d65f021627e9e57d262b02ec6d917a7d46b11c7fe48a\",\n        \"public_key\": \"457da4ef14519d541edf92cabed9b04d8a2f2afd1510a92f009bb4e8754f1eba\",\n        \"message\": \"d6608bf5ac000ecaf95fc09f9cb7498c518a6e0255586e6337853b1d7d9d7de4dfe1245d59031a317d4e2b6a73c4c3f95b582e72a6420221587bac120fb8ed7348070f2860d85866a09fe756743497f2119bc1bfdf573be35d1091be37f18bcda6741c90d566cc924b72164b749af9a6f40f71d3ea5d8764cdc81714bd7395e5f679973636eff1db1cf0012983f71a2f2b12d45a294e5a389f4cd2483eb39da0df26b736c7af6e41dd35a78e45292c394e34689532888721f863c56db97da1cd10a66a20a670b27fe8ce5568a42b8937790c7be1aa420d203d7a885c1729cd6b8e197189e479d542cbcb9b53656f2b9f539c325c34aa598fd91e7df70f9a74abec467654b1c9a3d14438e7c0836040b793871ecbe9e5f6680ccccd5d4696a87e37e89eab28b6bd679e8fe1627bdc9d373b82f52cd8c49be9bacdc630a32fd12835255a542fb7b12393779d4498aa06a0e7e1a4977939817eb2088af1e19bb0e5aca854c125dc603d835736a03d938051530c9ab1aa3bc779b3bae7450ef57d1b3fc093a37dbe9d1bd6d040f2f8eeba77f7fa88c149f065c7ace33277aa9969c266ea6d85cad62cfaf5508e7032716be684a22856413e0e65e42b6e9e6d865a87363cbb62d5bbb6a3731ddda0fa6ad0293af9893c09a9e743090f2cee2f4437736dd433e2ac7428bdc8c77cb9964355fa4415cc3831d8c7ca5af93d51752e718c6066eca1426a87c29808281a85ac7e0b4044ff6e280e28014b9383d19c9d387d29dc14de433da260784a4944ca76c2fe8a080d0996d9a6c2a3d3a7077280edcee0389aa8e5365d1d9b346eca0947b0ff5265943ccf09939a4b4a8f985f6a5e72723c795da0bc360dce501f673ab6ea8443f129427952453eb72b3a8d0d976c278c5bd1a9853c918e0c240c3c734932953fdb5039fbb04687937c9ff0ab74a16eae212bc6f20e700a77c092d23d2efb580e0c19d65f304129ab8e6cc12e58052257ba09449f30d3d974391afff5633def2f5c4ebd573a9e444bf3a3ddacedf02c05f3cc2e750664a84a1d24c5d28b49670de8a2f2090839483ca38959991a7d3727e21a15e82016c15a09ee71f4f43c0a608b48485c9934a38614794d6291daa39c01c45d3debe579b5823bf3406404b4c80ee6ff342b46b334b0b883b40bfd2f9a53595ab62fd1351ebc88308370497218dfc98ce081407da812a46d6497d7af9ec6d83e1c60eeb712d889dfbed0c805aa11cf817dd8f04396ef871a26112dcb7c0e1d2e68\",\n        \"signed\": \"3ba0af8af127c4584826090ecdaf485ebdf07b82bc499c9a2befca28d49344974addbc8d80a52560e0f3d73ff5cccc72c74b5b47ad2e6de9612d1a00aec92701d6608bf5ac000ecaf95fc09f9cb7498c518a6e0255586e6337853b1d7d9d7de4dfe1245d59031a317d4e2b6a73c4c3f95b582e72a6420221587bac120fb8ed7348070f2860d85866a09fe756743497f2119bc1bfdf573be35d1091be37f18bcda6741c90d566cc924b72164b749af9a6f40f71d3ea5d8764cdc81714bd7395e5f679973636eff1db1cf0012983f71a2f2b12d45a294e5a389f4cd2483eb39da0df26b736c7af6e41dd35a78e45292c394e34689532888721f863c56db97da1cd10a66a20a670b27fe8ce5568a42b8937790c7be1aa420d203d7a885c1729cd6b8e197189e479d542cbcb9b53656f2b9f539c325c34aa598fd91e7df70f9a74abec467654b1c9a3d14438e7c0836040b793871ecbe9e5f6680ccccd5d4696a87e37e89eab28b6bd679e8fe1627bdc9d373b82f52cd8c49be9bacdc630a32fd12835255a542fb7b12393779d4498aa06a0e7e1a4977939817eb2088af1e19bb0e5aca854c125dc603d835736a03d938051530c9ab1aa3bc779b3bae7450ef57d1b3fc093a37dbe9d1bd6d040f2f8eeba77f7fa88c149f065c7ace33277aa9969c266ea6d85cad62cfaf5508e7032716be684a22856413e0e65e42b6e9e6d865a87363cbb62d5bbb6a3731ddda0fa6ad0293af9893c09a9e743090f2cee2f4437736dd433e2ac7428bdc8c77cb9964355fa4415cc3831d8c7ca5af93d51752e718c6066eca1426a87c29808281a85ac7e0b4044ff6e280e28014b9383d19c9d387d29dc14de433da260784a4944ca76c2fe8a080d0996d9a6c2a3d3a7077280edcee0389aa8e5365d1d9b346eca0947b0ff5265943ccf09939a4b4a8f985f6a5e72723c795da0bc360dce501f673ab6ea8443f129427952453eb72b3a8d0d976c278c5bd1a9853c918e0c240c3c734932953fdb5039fbb04687937c9ff0ab74a16eae212bc6f20e700a77c092d23d2efb580e0c19d65f304129ab8e6cc12e58052257ba09449f30d3d974391afff5633def2f5c4ebd573a9e444bf3a3ddacedf02c05f3cc2e750664a84a1d24c5d28b49670de8a2f2090839483ca38959991a7d3727e21a15e82016c15a09ee71f4f43c0a608b48485c9934a38614794d6291daa39c01c45d3debe579b5823bf3406404b4c80ee6ff342b46b334b0b883b40bfd2f9a53595ab62fd1351ebc88308370497218dfc98ce081407da812a46d6497d7af9ec6d83e1c60eeb712d889dfbed0c805aa11cf817dd8f04396ef871a26112dcb7c0e1d2e68\",\n        \"signature\": \"3ba0af8af127c4584826090ecdaf485ebdf07b82bc499c9a2befca28d49344974addbc8d80a52560e0f3d73ff5cccc72c74b5b47ad2e6de9612d1a00aec92701\"\n    },\n    {\n        \"secret_key\": \"61fa8677eedaded69b165c8d277c978249663028301df6163e39b06ac2f5625f\",\n        \"public_key\": \"87339eb57238db2e4e60f3c28a3fd5fb611c65fddc81eed7cf7771df34d92267\",\n        \"message\": \"02c581dee03f2c603935af5eceecfa677134a3e0aea54fecaf4271fb52951a27b76877ccd49ab486dfc227cf31c9d957cc97306573fc7fe1d31b6c7df3d780f3a05ca6395657a9424342c9c6b703127e038df0792154e30a49476112cb92d0d5a2d22e895752a86edddd912fdc81b1e64a7bb750f099182132ee4823fde845802a944539d412b2a81a15b00071a950504c5b55a71bdb8c5a582639e855e8be241cda1ba6b3b4f64554d17824904cb30cd7efd9ac049e390bb79f53598ef1e8fc27dd7bf599c9028c9ebf92fc3be11df329612a228e0f5684687bf41ff203e97a7686126a39366bdc26d50be025d5187c6ba0666e379be4a80a9e62effcd916d7f98de651e00b97adf5d2d53daa7f8d695a291560755c744482364c4f1fa47ec0b1da161aa388f9597989a97726d3ed2cec82f1a1bbc4ac0be0a00cb4a8db1fb7c14ba05d896348dc0559d2a90beac2041dd77f82d6b12aeb2243ca0f419a57d3ca9c7d25a30ff0e8bb0d945155d1b36ad107b55beaa95b7d5e32003407629f1515f8a7089e2488d0d7544c2f7cc7c7f0985da42840d4368ff4f0fa4fa298e3b7229303aba514ae94e7026535a3f426ffbb4e001cd50ed12f214b3abef96e301635c987b133fc5e6184e7b7572bc3d99a4523cbd5afe593cedf4c9cd02ff2e36237e4ee12ef1a22d16d7cf4c072dced91cdd26ee144cc2bef4950026349e9444784081fe4e0498bc75f72e6818f459bba9049c561316c9f498e7b1a994b0e93055fe73e444cbdf96ac35e9c4e92e6b49e3bc0e99de1716df8eacaeb8d2fd74870044cb39c0e367a1fe32a9bb2974416364e730d5248dfb1df164a8d58caa1005fdc91bac2bc01cc77decc14893ef946fb3c81be0832c72fba372062f8360f4d8e6d5b741cf7032d8d89de2edf4c714a29f75abd8f5ff43ecdd4b7a04d7db0882d16e74473a0fb79db444a78ea44aa2631b8c0d7b0300d55cb6ac485f24c0acc647747c43db3b2a8677baf656fa735a575f1813f3668a2aca9175711b525eb496e9ef9711d75f590c7d9ef99e0f59e8483cbf9f284e3f5a33ee7781e62b8b05551777efe0fbfd19e54b6bbd142944bc2959a82ebd295d23d3443b6ce658c2d579a7637b549520491908e34282ec2716972e6f0353929547ef1537aecc96b2df616148599b09d9b81394a13fe7db86760b1e2a060efd484e8189939ebdf6f21640d89d8e736dee082ad72a0184adedd8df21474c9f526bcfdf7e85658194bb6d942e7f3fe96c23f\",\n        \"signed\": \"c04ebd11c3eb09396fe8d68279510a9efee391abee4081f0d275674a304794835aad7f3e345bcf0af8027f97477e79e6792b8f299846ae28cb13bd887537990d02c581dee03f2c603935af5eceecfa677134a3e0aea54fecaf4271fb52951a27b76877ccd49ab486dfc227cf31c9d957cc97306573fc7fe1d31b6c7df3d780f3a05ca6395657a9424342c9c6b703127e038df0792154e30a49476112cb92d0d5a2d22e895752a86edddd912fdc81b1e64a7bb750f099182132ee4823fde845802a944539d412b2a81a15b00071a950504c5b55a71bdb8c5a582639e855e8be241cda1ba6b3b4f64554d17824904cb30cd7efd9ac049e390bb79f53598ef1e8fc27dd7bf599c9028c9ebf92fc3be11df329612a228e0f5684687bf41ff203e97a7686126a39366bdc26d50be025d5187c6ba0666e379be4a80a9e62effcd916d7f98de651e00b97adf5d2d53daa7f8d695a291560755c744482364c4f1fa47ec0b1da161aa388f9597989a97726d3ed2cec82f1a1bbc4ac0be0a00cb4a8db1fb7c14ba05d896348dc0559d2a90beac2041dd77f82d6b12aeb2243ca0f419a57d3ca9c7d25a30ff0e8bb0d945155d1b36ad107b55beaa95b7d5e32003407629f1515f8a7089e2488d0d7544c2f7cc7c7f0985da42840d4368ff4f0fa4fa298e3b7229303aba514ae94e7026535a3f426ffbb4e001cd50ed12f214b3abef96e301635c987b133fc5e6184e7b7572bc3d99a4523cbd5afe593cedf4c9cd02ff2e36237e4ee12ef1a22d16d7cf4c072dced91cdd26ee144cc2bef4950026349e9444784081fe4e0498bc75f72e6818f459bba9049c561316c9f498e7b1a994b0e93055fe73e444cbdf96ac35e9c4e92e6b49e3bc0e99de1716df8eacaeb8d2fd74870044cb39c0e367a1fe32a9bb2974416364e730d5248dfb1df164a8d58caa1005fdc91bac2bc01cc77decc14893ef946fb3c81be0832c72fba372062f8360f4d8e6d5b741cf7032d8d89de2edf4c714a29f75abd8f5ff43ecdd4b7a04d7db0882d16e74473a0fb79db444a78ea44aa2631b8c0d7b0300d55cb6ac485f24c0acc647747c43db3b2a8677baf656fa735a575f1813f3668a2aca9175711b525eb496e9ef9711d75f590c7d9ef99e0f59e8483cbf9f284e3f5a33ee7781e62b8b05551777efe0fbfd19e54b6bbd142944bc2959a82ebd295d23d3443b6ce658c2d579a7637b549520491908e34282ec2716972e6f0353929547ef1537aecc96b2df616148599b09d9b81394a13fe7db86760b1e2a060efd484e8189939ebdf6f21640d89d8e736dee082ad72a0184adedd8df21474c9f526bcfdf7e85658194bb6d942e7f3fe96c23f\",\n        \"signature\": \"c04ebd11c3eb09396fe8d68279510a9efee391abee4081f0d275674a304794835aad7f3e345bcf0af8027f97477e79e6792b8f299846ae28cb13bd887537990d\"\n    },\n    {\n        \"secret_key\": \"7048c6521aefafa4eac6d6c3a702b9525480a66482e4969896757f2cd1ac7d5b\",\n        \"public_key\": \"ed93113c1643a53aa064caa631ceb6e20f6d6ec2fc6c0711cb8a1fe73139af93\",\n        \"message\": \"53f74c724db1578a1a296a7ccac904a2504dd9005389b4f8d4ea4b6307298fc6dcce98a6bc07280d20364e405a467e736578965269c81461d61fc6b7e4bad68d2b6dd0005850105f0a67bbc6ee223ec1754af4e3b9afa5062d1c1861048f185b128f1a5c0fb25c3919b4833e29e202bc941a905e63c2c05b1014647bd7ede5be9f996615187a3d3bb2c7dc4c28f7053def9b28b29e2331f16296dce8f1ede484caec996702bd9902e52684c812c87440f69bd141c7e00c6947d1fc7c3bdc0bc5506b6ea462e65f9e743b72c007ddc7a377493777d4eb12620ca6c019c8bfc4c29ec8af382fc3eac841021a74e4674ba3e43e5d7b41e3feeb17da00a7ce455a1cec70b0be6e56f85fc37f64cf0733b7e31241de641a8a8e5b91897bc158fe93d102c01d1f5e166d408165fe3fcb13d5304590ab8ef0dc8d5a8c1d8a93fceb854fc1fa36d0cc480cf8512d80bee69b0650a957daed283cd7638155ed773086e86a8ffb198acc7423b5d1a609a175a56b94c96b731851b93a94977101e255f1ce92e232a05e2e3387fcb4dc13a31bee6ee25507322c73c9883080a74c00f803a998dd530a79126bb144ed5574c4b23180e34e099283b4bb1d28822fce3717046ff32ef9e2cdf967e318ea726a2aeec57806643ad4801d3e0da52a1d77bf043f5ae9f3aea9e4bc4fa795d08401085ca94cfc4ce719dabc7b2390d03d294a65b7af9bc39072285b777b2f133dc11a70c0a9f060e10441f40216acb641637a2eadf1f7b8d262fec1b4d0f0f4faa93f3f732cac382d8ac42e178e2244999d764a9d0e981714686eb4924497e56b50157e9939032c9f88eb657cfde44ad34714af4a51324e5e77d0deea99c9f244d2e09ea425820a746d883a0cf4b705c29df8c037448154dc08a4d4337405fb8765823114370b37ed86086ec5f8bd6c72abf13f518430710f597b06108f65b30a483496e2ed81dab10fee947fe04b5485f2e3074049d22284266651ad10dd086aaa5d452e0d1a61129d1e77c663c26d088962b5545645b7a1a8713d51327a7a359b12daadb85a2cd4b5410d5c20267fa766b8c42a84dc42664588879b3eaefd4cc8dc693f98ac205609e570665b01ea4655e39429a7a7e542efb4f7890dbf4e34c6cff07e4d35bd3eeedf5b46280f4a0da0c2e73c94ea81cfeae7f9bd04fe2d45976500f7dcacb0df2a5dc736a823671db679be66cb33c162fd2c74ae71fbf4d2b05af042b3a977f5b944b9fdb6c34424421bcf4f6223768428fa140fd4\",\n        \"signed\": \"7c45703ed3942e44041c7fa1858aa5f1dc381f493a452dfb52708017898f710e31118e331f00aa64cb738836682b7d177e97955c00319abd79a49e0fcd16fe0053f74c724db1578a1a296a7ccac904a2504dd9005389b4f8d4ea4b6307298fc6dcce98a6bc07280d20364e405a467e736578965269c81461d61fc6b7e4bad68d2b6dd0005850105f0a67bbc6ee223ec1754af4e3b9afa5062d1c1861048f185b128f1a5c0fb25c3919b4833e29e202bc941a905e63c2c05b1014647bd7ede5be9f996615187a3d3bb2c7dc4c28f7053def9b28b29e2331f16296dce8f1ede484caec996702bd9902e52684c812c87440f69bd141c7e00c6947d1fc7c3bdc0bc5506b6ea462e65f9e743b72c007ddc7a377493777d4eb12620ca6c019c8bfc4c29ec8af382fc3eac841021a74e4674ba3e43e5d7b41e3feeb17da00a7ce455a1cec70b0be6e56f85fc37f64cf0733b7e31241de641a8a8e5b91897bc158fe93d102c01d1f5e166d408165fe3fcb13d5304590ab8ef0dc8d5a8c1d8a93fceb854fc1fa36d0cc480cf8512d80bee69b0650a957daed283cd7638155ed773086e86a8ffb198acc7423b5d1a609a175a56b94c96b731851b93a94977101e255f1ce92e232a05e2e3387fcb4dc13a31bee6ee25507322c73c9883080a74c00f803a998dd530a79126bb144ed5574c4b23180e34e099283b4bb1d28822fce3717046ff32ef9e2cdf967e318ea726a2aeec57806643ad4801d3e0da52a1d77bf043f5ae9f3aea9e4bc4fa795d08401085ca94cfc4ce719dabc7b2390d03d294a65b7af9bc39072285b777b2f133dc11a70c0a9f060e10441f40216acb641637a2eadf1f7b8d262fec1b4d0f0f4faa93f3f732cac382d8ac42e178e2244999d764a9d0e981714686eb4924497e56b50157e9939032c9f88eb657cfde44ad34714af4a51324e5e77d0deea99c9f244d2e09ea425820a746d883a0cf4b705c29df8c037448154dc08a4d4337405fb8765823114370b37ed86086ec5f8bd6c72abf13f518430710f597b06108f65b30a483496e2ed81dab10fee947fe04b5485f2e3074049d22284266651ad10dd086aaa5d452e0d1a61129d1e77c663c26d088962b5545645b7a1a8713d51327a7a359b12daadb85a2cd4b5410d5c20267fa766b8c42a84dc42664588879b3eaefd4cc8dc693f98ac205609e570665b01ea4655e39429a7a7e542efb4f7890dbf4e34c6cff07e4d35bd3eeedf5b46280f4a0da0c2e73c94ea81cfeae7f9bd04fe2d45976500f7dcacb0df2a5dc736a823671db679be66cb33c162fd2c74ae71fbf4d2b05af042b3a977f5b944b9fdb6c34424421bcf4f6223768428fa140fd4\",\n        \"signature\": \"7c45703ed3942e44041c7fa1858aa5f1dc381f493a452dfb52708017898f710e31118e331f00aa64cb738836682b7d177e97955c00319abd79a49e0fcd16fe00\"\n    },\n    {\n        \"secret_key\": \"3e6373b265b96789007ad2a10c309a567638f25587d77e28b0823a4f179ae4fe\",\n        \"public_key\": \"a3234e5d13b03472165036404f6de80e702839500f13d9c985a077d45c69ff45\",\n        \"message\": \"b9d068bbcae7722f828b0f8c98a738e36a7df4c997c724ba27531af34a2f106c7513a44a461a9aa4309bc15c4e0d42759193ea1cdea956bb815985f57867145e9e2c7585fc8d61027e47d2d735e2448af3782909404edeaac0fd73f6045dcdb04f0377758f02204aae3a7220311c0f4723582710cc440c36c9587b5c9ebc4063fea8ca3f43195894f79a365087137282302dbf2e7a0d411ab58b7026ccde198869aa734334c05238e275e3c3ab217083495769e2fad374051452d7f5b1db0e785836d4bd5e2978a3e991af0ff716f43889a07f5df299603621c39e2cdee089985d9e6bf7b2fbd02373ae1b5e9b88f5b54a076e676d7790bfc8f57dcc59ef52850ce992a73ba7bc991deb4dde5eb0b21670b1b3d4b64f36cca8e307098568497d8916f6b5d0e9e89f99f86006f39bd3a810769c8f7801773c9638abcf5e2711b19d1167593acbe85e4161428997a2194dc5e7b7640f0d2c1eb205553be9167ffbc22b7c2e7698f3afa10754cb44d4b1d45b837303b1669073415a22606b50f21f8265e139f2305ac0e0127ae056ce8abeaba20e1d269a2b2e899c49547268a0696ae450dc0267f7f63a8edf074c47d3c2db1da36393737304e6dd4faccdb6ab55e5f8520c3dff5f6beac30ba85b86082351e3ded8400aa57f650c0c33036d65b39b7d2fb6112863d59b72558242e8b045addd357de6fd37a8f6611765c9b5ff19cc4db7e117c65a00458908b0245d04f7908fc73b165dff6e4be4b42032d8cfd7d6f7772c1bfe721d4bcfe2fc527998f34fb4418a1fae1e6c3767c4d0780621f923da1f0a0d3d219c036acfd3709dad4cf24d90bc691d700e6a9c80ccfd10bde8e791c0fea82880c07baaaa311eef79240784f628a7d2a09184e016f81008e77429a8658b153e44e79a98ad248f7fda23b590d646d7c1d841f4927d6e8bc73214d10a7f3c29c8f839a8908d20a74e827af467ac5abf0f1d0ed39cddd969dde9eeb4a4b7527ab3e2475a195e24474a4e36b09052e2dad4a5eb4691e263b8c61bbde87772207e011c4c1e14235fb24e4da438875d18530fef902619dd485d77b545abb56b69c755afe758606971ab97dd3ace1c1a34a33794c8156da799e8224d885e1868f9cb466d802c827cc3e1ecd0ae6e0b01f8f791b12208fcc0fed385b796eb2f2908b58d30b3733f1470f2e2ef12ad43feb72d0816de3c13a8b5a523e14cdf5ff3720bf87769cde7495d226bf38238a825f75a09f6bb9afce516a7bc70114370bbc40f17c7bc\",\n        \"signed\": \"f51e0f878a5a709647e85fea839fd566e6f35c8a6185d0c9eb13e0d5b9e6e8aa95c333a8f50632a4d6657b518ce4cfde40b8f5a05b2d9f8441fcc9d2d692d509b9d068bbcae7722f828b0f8c98a738e36a7df4c997c724ba27531af34a2f106c7513a44a461a9aa4309bc15c4e0d42759193ea1cdea956bb815985f57867145e9e2c7585fc8d61027e47d2d735e2448af3782909404edeaac0fd73f6045dcdb04f0377758f02204aae3a7220311c0f4723582710cc440c36c9587b5c9ebc4063fea8ca3f43195894f79a365087137282302dbf2e7a0d411ab58b7026ccde198869aa734334c05238e275e3c3ab217083495769e2fad374051452d7f5b1db0e785836d4bd5e2978a3e991af0ff716f43889a07f5df299603621c39e2cdee089985d9e6bf7b2fbd02373ae1b5e9b88f5b54a076e676d7790bfc8f57dcc59ef52850ce992a73ba7bc991deb4dde5eb0b21670b1b3d4b64f36cca8e307098568497d8916f6b5d0e9e89f99f86006f39bd3a810769c8f7801773c9638abcf5e2711b19d1167593acbe85e4161428997a2194dc5e7b7640f0d2c1eb205553be9167ffbc22b7c2e7698f3afa10754cb44d4b1d45b837303b1669073415a22606b50f21f8265e139f2305ac0e0127ae056ce8abeaba20e1d269a2b2e899c49547268a0696ae450dc0267f7f63a8edf074c47d3c2db1da36393737304e6dd4faccdb6ab55e5f8520c3dff5f6beac30ba85b86082351e3ded8400aa57f650c0c33036d65b39b7d2fb6112863d59b72558242e8b045addd357de6fd37a8f6611765c9b5ff19cc4db7e117c65a00458908b0245d04f7908fc73b165dff6e4be4b42032d8cfd7d6f7772c1bfe721d4bcfe2fc527998f34fb4418a1fae1e6c3767c4d0780621f923da1f0a0d3d219c036acfd3709dad4cf24d90bc691d700e6a9c80ccfd10bde8e791c0fea82880c07baaaa311eef79240784f628a7d2a09184e016f81008e77429a8658b153e44e79a98ad248f7fda23b590d646d7c1d841f4927d6e8bc73214d10a7f3c29c8f839a8908d20a74e827af467ac5abf0f1d0ed39cddd969dde9eeb4a4b7527ab3e2475a195e24474a4e36b09052e2dad4a5eb4691e263b8c61bbde87772207e011c4c1e14235fb24e4da438875d18530fef902619dd485d77b545abb56b69c755afe758606971ab97dd3ace1c1a34a33794c8156da799e8224d885e1868f9cb466d802c827cc3e1ecd0ae6e0b01f8f791b12208fcc0fed385b796eb2f2908b58d30b3733f1470f2e2ef12ad43feb72d0816de3c13a8b5a523e14cdf5ff3720bf87769cde7495d226bf38238a825f75a09f6bb9afce516a7bc70114370bbc40f17c7bc\",\n        \"signature\": \"f51e0f878a5a709647e85fea839fd566e6f35c8a6185d0c9eb13e0d5b9e6e8aa95c333a8f50632a4d6657b518ce4cfde40b8f5a05b2d9f8441fcc9d2d692d509\"\n    },\n    {\n        \"secret_key\": \"f5e8597eac0ebfa9d385de85a1fbaa35146395b13457b5b14d3670daca6905e7\",\n        \"public_key\": \"ce93e642c2f15084bc83bafdaa196763de2a3c513b0e44f68ddbde378514c441\",\n        \"message\": \"273341f219ff5cf381c77b2dd226c58f8f33c4527048cb006affef8cee151e300efef629fed21b70451f729292627d1f3f1b5257359ee5a671cf62ae57324940f2d0b15aac76ff398220c08024e29a8cf36504e12a4e96438f42c3da0c000541bc11f091381b0b72b58a92083f446eca1991996878de35081cc4ab90958c96cf5c99796cba7951ee186f26527aede69db304ce2941ba15cc00ba2f1411f208dad45e87bcf638792de0a68624b667297c27a343db4baf34a0228eaf0d1022009b5d068b2534d920302e71310febf0df1bb02c2ef0ad1ae149deadf8c184373c0f7eb6b25695be82d12c71b6c83267d9a233667e77bc205983f8b8d877d85aead3f60e820ffcb17adddd92a7712bbeb34ee71966dafd9907d193dd9d725a31a613d29e32be72132808926d9437477fee25eda610aeb1dce12ea316c6aec6689e501c551923825a34b42c4f0675b86ab26adeea2e60dae6c6d1cdd0cb3c347b16384039a8e3fd6087381387cb4bc72ddb5f25b374859b02e5bb1ba06d3cc69ec44cec4b985c8476e35032e99abf001a1d44ddc6e2889c3c2c3ecaced609b2b2680e00b1efa7e9d26d62f2b3ab36f921044790abbd49360756dcffccf230f66dbb701aa164dad6069aa2b8b3309f2fe44d5e0b25bd556431f0df4c2ea97ae79ed4a57578d66fc6939c57628a90cac97adfa8702a4a1c8965ba1a90262567286664003003533cc9314caf7d3b982e0a432ff5aa4ed5741983d9b54323ac7e299b2b4956c1a2c191557b27d86be714b5b68fcb1d41f78ca5ddb6b53b3dfc8e7d6b3c3db059af9f2dd765ef04b6d16e6737c727aa11f3df3774a3fc96182e282acc3d233eeabf8c72d3f246ae184505288fef39b36766b10dd1bfbfbfa70f97b3c901726d1e0d0a837d11f0123a34abad1a79aabe80b125b128ee160b511848f7f04c49c8d5c2f2041da7d9599c29b1dac8c68077efac3eca58bbc1637aadce21c774fea42d2bcf4a0b9892307e36fa250acee795ad2bfecfbf60319b81663e2a26571946f75a8d969af16b3b57c3ec3e66158aaf42ccf5e58b937aaef613318606603317e5aa318be70f8da3c0c16be6c29e3ec9fef4e46e8ca241d941d58049a063d90afc953ca32e8a50a6473632588ac41eae97f20ce9b741ed41c9a4aa6551fd823ce0c811a5bb5a171c1ea4238a0246811e469cf498b79621c323eba7985344fe11e67499edf4967491aa749f8f3fe39961d76892c93aac3b19fa4b4fc174d7d4d4d8bd6ee475475008\",\n        \"signed\": \"576543fc21ab0a7c5f63b1cff01bf845df91792e7a9750c5508b51665e7f89f17c6ec3355a0aed87db8c77bdb271fbedc714ffadb78b5e0f978116771ba7cf0b273341f219ff5cf381c77b2dd226c58f8f33c4527048cb006affef8cee151e300efef629fed21b70451f729292627d1f3f1b5257359ee5a671cf62ae57324940f2d0b15aac76ff398220c08024e29a8cf36504e12a4e96438f42c3da0c000541bc11f091381b0b72b58a92083f446eca1991996878de35081cc4ab90958c96cf5c99796cba7951ee186f26527aede69db304ce2941ba15cc00ba2f1411f208dad45e87bcf638792de0a68624b667297c27a343db4baf34a0228eaf0d1022009b5d068b2534d920302e71310febf0df1bb02c2ef0ad1ae149deadf8c184373c0f7eb6b25695be82d12c71b6c83267d9a233667e77bc205983f8b8d877d85aead3f60e820ffcb17adddd92a7712bbeb34ee71966dafd9907d193dd9d725a31a613d29e32be72132808926d9437477fee25eda610aeb1dce12ea316c6aec6689e501c551923825a34b42c4f0675b86ab26adeea2e60dae6c6d1cdd0cb3c347b16384039a8e3fd6087381387cb4bc72ddb5f25b374859b02e5bb1ba06d3cc69ec44cec4b985c8476e35032e99abf001a1d44ddc6e2889c3c2c3ecaced609b2b2680e00b1efa7e9d26d62f2b3ab36f921044790abbd49360756dcffccf230f66dbb701aa164dad6069aa2b8b3309f2fe44d5e0b25bd556431f0df4c2ea97ae79ed4a57578d66fc6939c57628a90cac97adfa8702a4a1c8965ba1a90262567286664003003533cc9314caf7d3b982e0a432ff5aa4ed5741983d9b54323ac7e299b2b4956c1a2c191557b27d86be714b5b68fcb1d41f78ca5ddb6b53b3dfc8e7d6b3c3db059af9f2dd765ef04b6d16e6737c727aa11f3df3774a3fc96182e282acc3d233eeabf8c72d3f246ae184505288fef39b36766b10dd1bfbfbfa70f97b3c901726d1e0d0a837d11f0123a34abad1a79aabe80b125b128ee160b511848f7f04c49c8d5c2f2041da7d9599c29b1dac8c68077efac3eca58bbc1637aadce21c774fea42d2bcf4a0b9892307e36fa250acee795ad2bfecfbf60319b81663e2a26571946f75a8d969af16b3b57c3ec3e66158aaf42ccf5e58b937aaef613318606603317e5aa318be70f8da3c0c16be6c29e3ec9fef4e46e8ca241d941d58049a063d90afc953ca32e8a50a6473632588ac41eae97f20ce9b741ed41c9a4aa6551fd823ce0c811a5bb5a171c1ea4238a0246811e469cf498b79621c323eba7985344fe11e67499edf4967491aa749f8f3fe39961d76892c93aac3b19fa4b4fc174d7d4d4d8bd6ee475475008\",\n        \"signature\": \"576543fc21ab0a7c5f63b1cff01bf845df91792e7a9750c5508b51665e7f89f17c6ec3355a0aed87db8c77bdb271fbedc714ffadb78b5e0f978116771ba7cf0b\"\n    },\n    {\n        \"secret_key\": \"cdadc5b89cb2b6308a006f2f4e955a91aaf3ba70165f2d444ef1ffebbdaaa221\",\n        \"public_key\": \"0541415ff5467f28ceac839b13a1766e72c99e6545207d9d5d9697411eb6bca7\",\n        \"message\": \"911727036db309d6e2e3369e4f17d98d99ec070c33283bb1244efd62e76bd70a69b9723bd2b520472b98aa065924366de780900bcd8b77b50f87c3c36187024bbc59ccf4482c7b4aadb56e2e5ecc0003d989d6afc63ec10242e57482fe39215261d5fc95a0185f95e9540c55f74d696048bca7ab112681a5558ea93c3b1f1cd364659e9433ceeebe054ee713c47760d7ad132a7f3f8fe3d5041b811a26b65efb1f340e181a4ec720ea136b3af3d9e5461dd24370336f10e6354c8c17acf9998544cec0873efa687cb132aecf70aebbc567ba03c536499ef96cc8412e7aaad5bf96422be47cb9413645df2c1703192347dcbb123127455971ae157e9fa2dbff88745a96c658b865e41f55aebf98395005ddcbd5983e6ae02c4fbb5e17916796325f76edf5b64afa4ec5a7418afed23a97efade68b6a5b3145f08a5d3db9c298a512fabdac68562b3f55377ff44b00c1c2f3efd18132da71f971a953a9318c57523361a160f9b7e3b51c524e95dd5ef4568ef18a800775e9d26e07131942d2be4ef22c0cbc13df01c68b1bcd3bce9bd51c4ced652adc4007be43b37c67a5c55ed4029e8ad15def8305c968621aed4cd4bfe079a6f48884d85680392ca92ba6e12fea6f4a056f79d67b19b05f90d684be7d45725f7967c6a467af43b86a6b1b9d9eed3a4248971c76a7ac29c292dfba4d75c5f7ba709a39058e96adf6dbd760d3cef4024bf3edc441efbf1147a2c108bd6f9eb439c1c5c4d3a6ea4ec3d92cef38136188bec9e0b6c0518d8b79ba59c5dcba393aedfdffb0b70d779c2b9765ce4452e7e3b08c4402b1a608320840fbe96d1eb8656eb1c20d9551ddf533b9f15e4eb5783756c53ddd3b14d807f838ac9680f89f1adfb78d68ccb06731a90beac5f0d709d5b88c75437a663cb962d37f96b8e8928477b5611228015d337f049e8b62e4dff8d0bb6cda24a5df9083e348bef12585f5f4c4d3bb3c7e78d550194a45251a0879a1624bf9dd35eb655c3939fea8909f6df395bebd02b68a17a897c9aaddd6e2e20461e303f57cdeb00ae0f23e60a94c19c771d8aa60533b93cedc1b76d2290a01bf43b2725f125befa575154e986c9c6205a1596cbaa2d13470c23422f2df7bece4e6ebd752e9389ae60857b52969d2ddefa9c034f1bf35ae3316304e949c8990820e26e6cffae4b388d1505f923706297f8db556537919ebbe3086023f12f4ded3b11acf2a6d973ddd8eb27b07c580bf448caa5a2ea116c5eaf36f7a6b17a85b3955dc8a44a620d8\",\n        \"signed\": \"ffede701eb1829ce2361cda2c8bb63338539d8ad2f6677585531e7bf1d3922382679a1ae84ffeb753fc9754e50c01852f955e3fd609ff64bf05bbe7075cdbe00911727036db309d6e2e3369e4f17d98d99ec070c33283bb1244efd62e76bd70a69b9723bd2b520472b98aa065924366de780900bcd8b77b50f87c3c36187024bbc59ccf4482c7b4aadb56e2e5ecc0003d989d6afc63ec10242e57482fe39215261d5fc95a0185f95e9540c55f74d696048bca7ab112681a5558ea93c3b1f1cd364659e9433ceeebe054ee713c47760d7ad132a7f3f8fe3d5041b811a26b65efb1f340e181a4ec720ea136b3af3d9e5461dd24370336f10e6354c8c17acf9998544cec0873efa687cb132aecf70aebbc567ba03c536499ef96cc8412e7aaad5bf96422be47cb9413645df2c1703192347dcbb123127455971ae157e9fa2dbff88745a96c658b865e41f55aebf98395005ddcbd5983e6ae02c4fbb5e17916796325f76edf5b64afa4ec5a7418afed23a97efade68b6a5b3145f08a5d3db9c298a512fabdac68562b3f55377ff44b00c1c2f3efd18132da71f971a953a9318c57523361a160f9b7e3b51c524e95dd5ef4568ef18a800775e9d26e07131942d2be4ef22c0cbc13df01c68b1bcd3bce9bd51c4ced652adc4007be43b37c67a5c55ed4029e8ad15def8305c968621aed4cd4bfe079a6f48884d85680392ca92ba6e12fea6f4a056f79d67b19b05f90d684be7d45725f7967c6a467af43b86a6b1b9d9eed3a4248971c76a7ac29c292dfba4d75c5f7ba709a39058e96adf6dbd760d3cef4024bf3edc441efbf1147a2c108bd6f9eb439c1c5c4d3a6ea4ec3d92cef38136188bec9e0b6c0518d8b79ba59c5dcba393aedfdffb0b70d779c2b9765ce4452e7e3b08c4402b1a608320840fbe96d1eb8656eb1c20d9551ddf533b9f15e4eb5783756c53ddd3b14d807f838ac9680f89f1adfb78d68ccb06731a90beac5f0d709d5b88c75437a663cb962d37f96b8e8928477b5611228015d337f049e8b62e4dff8d0bb6cda24a5df9083e348bef12585f5f4c4d3bb3c7e78d550194a45251a0879a1624bf9dd35eb655c3939fea8909f6df395bebd02b68a17a897c9aaddd6e2e20461e303f57cdeb00ae0f23e60a94c19c771d8aa60533b93cedc1b76d2290a01bf43b2725f125befa575154e986c9c6205a1596cbaa2d13470c23422f2df7bece4e6ebd752e9389ae60857b52969d2ddefa9c034f1bf35ae3316304e949c8990820e26e6cffae4b388d1505f923706297f8db556537919ebbe3086023f12f4ded3b11acf2a6d973ddd8eb27b07c580bf448caa5a2ea116c5eaf36f7a6b17a85b3955dc8a44a620d8\",\n        \"signature\": \"ffede701eb1829ce2361cda2c8bb63338539d8ad2f6677585531e7bf1d3922382679a1ae84ffeb753fc9754e50c01852f955e3fd609ff64bf05bbe7075cdbe00\"\n    },\n    {\n        \"secret_key\": \"2ddd79e76064c2e6b322afb0c5c685cdbec62821cdfc0cb14db7d01ba3bf21a5\",\n        \"public_key\": \"f55b4ab64a2582212b96ccac0640e271944a34a286d035833045810e341824bb\",\n        \"message\": \"a56674a1e1f09795251abe54ab43c298208fefc9bb9176fdb23e1e9f60f032647915567ebdcc2b869edb7055f4aba67ecfe7fa19eda45c06047c7a51848be9973251f85ff76f1c59e3654382858c9be123db8a9490c6c9b309b82d1e2ca6f4a07d00120283c6c295644995a96628612b8d6791573518e2556a688a09f149bc846a68bd0ef79279035710031ef0a8fed1dd0bf026125dc6648f86f64309942e18f23b12d1dc68c6f2770ca8b5485b369b0c92007a9461c139fcbb41175f316d4467060ab43d1222f5802404bf63c2df7e004bdc400ca80fe0d2cb68a210fbc3fc0b903209d5476e7a56baefb8fad7f328b72f327113e139414ba6f34e99c2eccde044e7a3ac70c580cd26c7450192ca4c823c7ac5eae876c0d1c8c768c1cb0b7ea41fc9b7d29437bbadab18e0f5ed1defe0cf6c0ebaa6b6d777f4dad9abddbfc0fd6ab5eeea803cfa01c0bd46f65fefa46901abbe0d89104e3bc4aee1f0599c69b67ba545ab9b54f5dee340ac69d88299e86822acddddce601122012f99299774aaf17c964edecb95e1277d462de64e9115a61ad98aa3d22e3ba6f8f1cd69b6b52b83382823f30e966bdad1ff5fc198ae32e9b68055d4392bc7c3df1015f128aee1e4fa3d4999e329f22f0ff6aa778bae0294a1df7436cb16a2bfcd74b463abe7cb4bac5362c89c9d1a378a2cb885cc3b26ab4be881ef1afc14430e10d26539ca358c3676286ad81ce1c9e78592af66f182bb1f7f862fe755bffb5be5c5f2b731c132e2388a76a1a7b1cddf05aed2ac9ec408475271942ccadd32e49d8791edf8b8de117551ce264a60b84105eae87e66f6a401d1322bb21a98e8acd277493254e504004f72c76e7903d2fa38fab717e94ce627947c4ea326bd2575c37310f3b4d843b90fa77d32d9952194150b62f850187a4fdf38466dfa0656c0a2e0b3f07492ac8e37e5d0df95cc89df3085a269291dc2512210d3fe44248d7ab996be099af64c22756666f8dea56c00b90677d1182500dd274fd0769253826d677ab16a557b08b3c52265498d85c4cb2b600ee0481b7c1c476a9daa8b88c71fc21b6f89bfdfece58da9e8d565652e4395bdf4c811b4f4f22d2b9613261f88c604c2974d3e977d140d046e1b6625b7071640d352cb7e7e65d46c613447be8dc5a200aa9acab46afccfebb6b1c31973246c34faaf8d26ea5e83be15718f8fdb0cfc444e2eb60f3659b020161c228e6b9240b7ac394cab812de10515766f22473ecca535594ce528a57cf5dab2eb32ab84\",\n        \"signed\": \"a4c396e19dd42e039184cd251188ffa245f0367c69c02d12474e5ca9e5c768a7ee3a3d47eb22d1ac9e04b704a74f416947f3f49a3242594e7b6390e82b60d505a56674a1e1f09795251abe54ab43c298208fefc9bb9176fdb23e1e9f60f032647915567ebdcc2b869edb7055f4aba67ecfe7fa19eda45c06047c7a51848be9973251f85ff76f1c59e3654382858c9be123db8a9490c6c9b309b82d1e2ca6f4a07d00120283c6c295644995a96628612b8d6791573518e2556a688a09f149bc846a68bd0ef79279035710031ef0a8fed1dd0bf026125dc6648f86f64309942e18f23b12d1dc68c6f2770ca8b5485b369b0c92007a9461c139fcbb41175f316d4467060ab43d1222f5802404bf63c2df7e004bdc400ca80fe0d2cb68a210fbc3fc0b903209d5476e7a56baefb8fad7f328b72f327113e139414ba6f34e99c2eccde044e7a3ac70c580cd26c7450192ca4c823c7ac5eae876c0d1c8c768c1cb0b7ea41fc9b7d29437bbadab18e0f5ed1defe0cf6c0ebaa6b6d777f4dad9abddbfc0fd6ab5eeea803cfa01c0bd46f65fefa46901abbe0d89104e3bc4aee1f0599c69b67ba545ab9b54f5dee340ac69d88299e86822acddddce601122012f99299774aaf17c964edecb95e1277d462de64e9115a61ad98aa3d22e3ba6f8f1cd69b6b52b83382823f30e966bdad1ff5fc198ae32e9b68055d4392bc7c3df1015f128aee1e4fa3d4999e329f22f0ff6aa778bae0294a1df7436cb16a2bfcd74b463abe7cb4bac5362c89c9d1a378a2cb885cc3b26ab4be881ef1afc14430e10d26539ca358c3676286ad81ce1c9e78592af66f182bb1f7f862fe755bffb5be5c5f2b731c132e2388a76a1a7b1cddf05aed2ac9ec408475271942ccadd32e49d8791edf8b8de117551ce264a60b84105eae87e66f6a401d1322bb21a98e8acd277493254e504004f72c76e7903d2fa38fab717e94ce627947c4ea326bd2575c37310f3b4d843b90fa77d32d9952194150b62f850187a4fdf38466dfa0656c0a2e0b3f07492ac8e37e5d0df95cc89df3085a269291dc2512210d3fe44248d7ab996be099af64c22756666f8dea56c00b90677d1182500dd274fd0769253826d677ab16a557b08b3c52265498d85c4cb2b600ee0481b7c1c476a9daa8b88c71fc21b6f89bfdfece58da9e8d565652e4395bdf4c811b4f4f22d2b9613261f88c604c2974d3e977d140d046e1b6625b7071640d352cb7e7e65d46c613447be8dc5a200aa9acab46afccfebb6b1c31973246c34faaf8d26ea5e83be15718f8fdb0cfc444e2eb60f3659b020161c228e6b9240b7ac394cab812de10515766f22473ecca535594ce528a57cf5dab2eb32ab84\",\n        \"signature\": \"a4c396e19dd42e039184cd251188ffa245f0367c69c02d12474e5ca9e5c768a7ee3a3d47eb22d1ac9e04b704a74f416947f3f49a3242594e7b6390e82b60d505\"\n    },\n    {\n        \"secret_key\": \"3abbdb0ba11aa1063bd26b02c116037862285babd215d240bc9c0926f4ecea81\",\n        \"public_key\": \"b8fc59438f8ce9e3785a473b22c8892c51eac2568c681dcc77b6f0e0799c4e33\",\n        \"message\": \"dccd55f922cd274f6975000adc8d98630c6d752c1202a9dd121048b93945af2b1110967788f99ec028e3d3b4cf82fb07173ea4401e3bb4b07b7b0b24b059a766339532d9df3e31b72c958c119d8dfa15a507af6c5f7e78fe270fa81b9df0f2e4af24bd99fbeb14e0033084d7fbf84ddedfd5ce56751d15908475df8af013d091173c1386b9139426cc6081ea165b8ce48194b8e18a9b91a4631344fe29c8e72818b71fa15c9292d13fdf5f9d18e29bd0291b8138de738fd3a36c35239022368b456f1facba90a0d80d6e311c5f6c6f04677e92373a5fc4738894dbed206c30da341b3b196c947858a6d2adc68aac3f20cfdbe0497961dae33470266d17ec719a59f0586f82f99f1c90ed7005a207219a55edc760f4eb8f2402647f6f77971ff7b634357b6b29bbd7ea05e2e25854e99c620f4b8b64739022ff0b338afef35fb6f41a53629a518eb93d66020fb353aef8dd071e09c916d4704acdf776b38ca9c59f211ff88c430a57e8f1713923b3f30ca86970a14a52db4bcbe60df4bc3cfdf254bf10f8afae87bd61b358f43cc296c0412964c4e00f71213397468517cb01379cb729c7b9e35bd50bdd98c3d3b76297a138b57ceb6c77742df0881d07668c08a630a44e6ed7eb206d6a56440710438a5111424b61aaeece40e900f5e3c457e9d6e31a79ec5b4b42b68e66e199309287cad65336fc7fe43f43cd8c773d3c6580d7217e2cabecd3eabc485c4acf47718c39b02c7858ff347cec7535eddcd4fc815df814569a88ae70f2733a6539f208c79cf4e7c4f9ea241a92e9515171361418a4c2e53c076aaabc47e4c971bd04b100c26282308857e06e7e5fbc4342564fb3b1ea4a17a925e91ee69122321d392b246965b86b54fd5c83fa5c474163f98a9f447d88cb59fe2cdf9f5412fcbeb3effac8976791c6a47b669a2fc55abe8e09e74157efcd1ca78fc10fa687010c6826c6e896ef5cd71d0fe4d1bd07c10dac3b03485edd2569a7eecfbc4e5d2ee2379859e265267bedaad69d93b7c1bd18f27ea42483c7e4100ee05b283039bfb9891d37c467ed83b88c794eab6bab9dc677892650e2d896fbfec1b1cdb721be30b0b8e5358709e165cbe3a182c93bc0a0cea2f8cf3a6257adf764534041202241a5279b668e40125fc094585a3c588aba82b67cd91d483e54300428426863a42364049d7c45a169385aa89bf377f0d32b07809b5871395ec053a257d93e48bbf407eb6091401e256546e31f9fcd24d2c5b333cf65785002f08d548db26ad1f3\",\n        \"signed\": \"981f20055a457525aee5616264e6af42e8b387cb08f8b4a73f9be0b366f1035bb30a1c874894cbece0a846d849b7ecc556585d0d3d395645807ff2a3ca5a590cdccd55f922cd274f6975000adc8d98630c6d752c1202a9dd121048b93945af2b1110967788f99ec028e3d3b4cf82fb07173ea4401e3bb4b07b7b0b24b059a766339532d9df3e31b72c958c119d8dfa15a507af6c5f7e78fe270fa81b9df0f2e4af24bd99fbeb14e0033084d7fbf84ddedfd5ce56751d15908475df8af013d091173c1386b9139426cc6081ea165b8ce48194b8e18a9b91a4631344fe29c8e72818b71fa15c9292d13fdf5f9d18e29bd0291b8138de738fd3a36c35239022368b456f1facba90a0d80d6e311c5f6c6f04677e92373a5fc4738894dbed206c30da341b3b196c947858a6d2adc68aac3f20cfdbe0497961dae33470266d17ec719a59f0586f82f99f1c90ed7005a207219a55edc760f4eb8f2402647f6f77971ff7b634357b6b29bbd7ea05e2e25854e99c620f4b8b64739022ff0b338afef35fb6f41a53629a518eb93d66020fb353aef8dd071e09c916d4704acdf776b38ca9c59f211ff88c430a57e8f1713923b3f30ca86970a14a52db4bcbe60df4bc3cfdf254bf10f8afae87bd61b358f43cc296c0412964c4e00f71213397468517cb01379cb729c7b9e35bd50bdd98c3d3b76297a138b57ceb6c77742df0881d07668c08a630a44e6ed7eb206d6a56440710438a5111424b61aaeece40e900f5e3c457e9d6e31a79ec5b4b42b68e66e199309287cad65336fc7fe43f43cd8c773d3c6580d7217e2cabecd3eabc485c4acf47718c39b02c7858ff347cec7535eddcd4fc815df814569a88ae70f2733a6539f208c79cf4e7c4f9ea241a92e9515171361418a4c2e53c076aaabc47e4c971bd04b100c26282308857e06e7e5fbc4342564fb3b1ea4a17a925e91ee69122321d392b246965b86b54fd5c83fa5c474163f98a9f447d88cb59fe2cdf9f5412fcbeb3effac8976791c6a47b669a2fc55abe8e09e74157efcd1ca78fc10fa687010c6826c6e896ef5cd71d0fe4d1bd07c10dac3b03485edd2569a7eecfbc4e5d2ee2379859e265267bedaad69d93b7c1bd18f27ea42483c7e4100ee05b283039bfb9891d37c467ed83b88c794eab6bab9dc677892650e2d896fbfec1b1cdb721be30b0b8e5358709e165cbe3a182c93bc0a0cea2f8cf3a6257adf764534041202241a5279b668e40125fc094585a3c588aba82b67cd91d483e54300428426863a42364049d7c45a169385aa89bf377f0d32b07809b5871395ec053a257d93e48bbf407eb6091401e256546e31f9fcd24d2c5b333cf65785002f08d548db26ad1f3\",\n        \"signature\": \"981f20055a457525aee5616264e6af42e8b387cb08f8b4a73f9be0b366f1035bb30a1c874894cbece0a846d849b7ecc556585d0d3d395645807ff2a3ca5a590c\"\n    },\n    {\n        \"secret_key\": \"8a44d6afc6c8eee1bc7d5f69e495b0b18ca7aee007dea7cf0d1714d785a9f4ed\",\n        \"public_key\": \"d4f366b3377fa39b36f9ae14da404e2240490dbd8d796b1ab872dfcb83a59540\",\n        \"message\": \"de80326966536ce94996af2de7a07605cc4fcb9e75ee0a67a1e20932111de9b356d5beeae86cc5f564c10d66e3de95a5b99e844928ea8e77586cf3c10ad3633ddeeb1d9dcf3f94b70bf1ef63d238df204d705c0b174f83282545f5e4075f8d69a48179c29eabf5c1742ef39e1ad963bebbb66fce9491a984651215c2e750e6ee8365766440a84419e52dcf671f1c52eaa2b9902bcca4b37cffdbac8e7e7e6b0a5c8748efbf452df6163f4ca07b61f9a05ec20a2bd633389e670bb5454acd6f3a06335b5da9ec326264e962c7d9d06ce7e9ff04a0a5bbdfaa4c410866a572011651439f2dbce5dee667924ac4934d205496bd1d4df08bd0cb3fd2de73a2ef342ff0091e10e15b3b760a575df93cf1c97c01c5ab11c094bf34878206718f6b285aa5cc5127bd7f988b84a90495306fd9e99d8955e668d1a3ff10f65b7c479fac24119a3c10122d4d18a805b247df168c0a5100169b5572d17012d751a42e83376115e11561c160c15efad76d21f7abb430366475238631f84c88f838b0ac404c913d2fa12450238485c302fc201f44151c19bcbdc1190c12d1540831fb19581cb93172b0d2ff5c65f31caff20f813881f84e5ef9d5c165e096d254cadf895249aab8d4496c940a40f907bd40935a94f5e55b6dd051154100fe331770eff2bad6545619b8a33ef6462a50c0b2c4ed2fba4e4e383ebf2932e6192766a4aad1d6e2b692d9f2bdc23393e8aacfba323b534f84edf2dced7c94d51687daa27198a9144b312b716fe17014a7bed0c14a2438733d555c6564c8c1a3d997ebae7b3de8877af53c1d1a5029158a80aa0c87489fef270cdffe10d34b15c1a9693ae0390243e314cfac06ef6eefebccf43d42eac24ce9879429d2fc7253b3ed175825bc4da0762b4933a98afdb94b06f4fcd2ad3611aa999d7c1c8d852d01dd9e52648455a04eb2330a76fd942c531e514b5ec0728a89d34ca590ea99c88faa20dfb7bbf65654aa6c212beb8ad6bf7c777391cd49c39cf8ab51b95b419e3dfc8d94a93a1ef0223c6de90bf96218d8045bd4952a0d8372a5578c6aafa74ba662e3188e6a6e567e4d2fe8227d0743982a41ebfa0d310fe79fed27041790efd5afac2243e1d150b145015d9deab0eded6394ac36fc5fb201f5204fbd422a3604233015bb0a48a920e2e5e0d4deed672025f23cfba93889597e504c8887add46cfef4024afb8a26eeb7dcddb2397b44a1796367340042137028c3307626816c2931e61ebb6b69edcbcb612c9b181a285301ce46f82f\",\n        \"signed\": \"e0727eb72e84d2b82cdbd0a6bd2f49496316aae8351e4902acd5e3cc57346e7ebafdd92a90ded76fd0c6690d68bb2fedd613e44fa222be0126da520acc2c4105de80326966536ce94996af2de7a07605cc4fcb9e75ee0a67a1e20932111de9b356d5beeae86cc5f564c10d66e3de95a5b99e844928ea8e77586cf3c10ad3633ddeeb1d9dcf3f94b70bf1ef63d238df204d705c0b174f83282545f5e4075f8d69a48179c29eabf5c1742ef39e1ad963bebbb66fce9491a984651215c2e750e6ee8365766440a84419e52dcf671f1c52eaa2b9902bcca4b37cffdbac8e7e7e6b0a5c8748efbf452df6163f4ca07b61f9a05ec20a2bd633389e670bb5454acd6f3a06335b5da9ec326264e962c7d9d06ce7e9ff04a0a5bbdfaa4c410866a572011651439f2dbce5dee667924ac4934d205496bd1d4df08bd0cb3fd2de73a2ef342ff0091e10e15b3b760a575df93cf1c97c01c5ab11c094bf34878206718f6b285aa5cc5127bd7f988b84a90495306fd9e99d8955e668d1a3ff10f65b7c479fac24119a3c10122d4d18a805b247df168c0a5100169b5572d17012d751a42e83376115e11561c160c15efad76d21f7abb430366475238631f84c88f838b0ac404c913d2fa12450238485c302fc201f44151c19bcbdc1190c12d1540831fb19581cb93172b0d2ff5c65f31caff20f813881f84e5ef9d5c165e096d254cadf895249aab8d4496c940a40f907bd40935a94f5e55b6dd051154100fe331770eff2bad6545619b8a33ef6462a50c0b2c4ed2fba4e4e383ebf2932e6192766a4aad1d6e2b692d9f2bdc23393e8aacfba323b534f84edf2dced7c94d51687daa27198a9144b312b716fe17014a7bed0c14a2438733d555c6564c8c1a3d997ebae7b3de8877af53c1d1a5029158a80aa0c87489fef270cdffe10d34b15c1a9693ae0390243e314cfac06ef6eefebccf43d42eac24ce9879429d2fc7253b3ed175825bc4da0762b4933a98afdb94b06f4fcd2ad3611aa999d7c1c8d852d01dd9e52648455a04eb2330a76fd942c531e514b5ec0728a89d34ca590ea99c88faa20dfb7bbf65654aa6c212beb8ad6bf7c777391cd49c39cf8ab51b95b419e3dfc8d94a93a1ef0223c6de90bf96218d8045bd4952a0d8372a5578c6aafa74ba662e3188e6a6e567e4d2fe8227d0743982a41ebfa0d310fe79fed27041790efd5afac2243e1d150b145015d9deab0eded6394ac36fc5fb201f5204fbd422a3604233015bb0a48a920e2e5e0d4deed672025f23cfba93889597e504c8887add46cfef4024afb8a26eeb7dcddb2397b44a1796367340042137028c3307626816c2931e61ebb6b69edcbcb612c9b181a285301ce46f82f\",\n        \"signature\": \"e0727eb72e84d2b82cdbd0a6bd2f49496316aae8351e4902acd5e3cc57346e7ebafdd92a90ded76fd0c6690d68bb2fedd613e44fa222be0126da520acc2c4105\"\n    },\n    {\n        \"secret_key\": \"8a972dd0f1190c2b9d548f4ba58264bb04826775502a8d5c2b209ee88dcea5fb\",\n        \"public_key\": \"6d80375f3cf1aab283551df445d17e7d3baf9bcbecbbb267052e02fdb69144d3\",\n        \"message\": \"30b28948939aa263437e45c5c0254fb20e617ed0f3fa7dace5a0a8e0fe3c1fc4adb2809b61c5e8d92cd2f3de93b173be707bada94240c6262c160e8c782165beef99d0be8ecdad6316dcd734bbb90a66cbd5b1cb4fd8f2226cea948e4df76bbe251d478f5c3fe0d6de4be54f67f502b2804f628b79a550fb1ac483ad2ba16637c4bc9da67fb4f98659c4c4394d16b6d14b3e0b0c1e625d710dcc1c11df5d34147b1ec5a417b9e21f908cfc523d43e3f181c7209cc56bdb5a21628695ed320f8d4c07fd6d84aa03426f21644aaefeeec311c74e9499936047350a9bf5b703962e77ce551336835fc32ccbd2c90ae52e24d47d8dcb987abd121d3f746b5de230f26469603fb0c4a8f6cd7973d7da882ed1d6e4d9c5a46ec2c21940ad3389a186014ee97278e5350988b15ecd9ea7456b3cb55e4d3093f13a875b50d6516378ecaf58d752c6374ed15638409311fcd379d122c8d8c59b86f4e8dc46adb730a933846e0bd248d3608252d970b504c813c6dea9fc88a3de641956dca291204d390b6b39981f8c0a6bcfc31ca0744420662a9b35eb3fc211f810a3e8062500b1e49bdf857665ff32a9ba76194bbb77fb9c15412964244b9865f73ded9f25b49b425aa253d807d9818292763a513ec80747344fba0acfe593cc26b1330bb9ade66c4e88cf1baed6d6e7b750e6c7239d7bcbfa3fbe45405a63b96d5034cc0c07ffc3b50858081d1955e2d2fe5be5fda7a8996943768b055170b7fd52f0a32097fe1b7a94f1bf879a0cbabe10ac9a7cc1f9f55068c48e3ccc065136431018d38d20109dc95d99cc2bbe7c627ab1a8aa5f431613b790c2e6526cf04fdc9e55f51c055f3c2045a675e3a1e54ba409f7aefa7e4aa07a2bbd5e4ab16321a9f099694391fda68a74581e2f1f11dd9a6d524b1b83260db57b72ef29c28c8db5c37fd185b7c2d8455090653af332dbc82bfb0db5dccabfb6b28caa350525cb54cc84e553e1cf3954b612393e7993ff7e8bf5ece3f145094dd7a27cb47f227476f289235251f772b3ba776bb773af0cc5f786a3fb9e931a530cfbd891cb5a5dfe25169ef933cc82c9080f323961a120158e4bbd71134ef1f90108b815c289d4e9a9589ec64c05fbb42a21b23d16e2a64678aecfab65cd9a806c598103d41f7009776317831feddd1c9002d4a92204f97ba9490c61469803072102524b9df519005f98af54d60ca5ba60b55b096a4ac2b16eb9cc81973c3135d3fb6873dd9653800a22bb5d0d6117ca5d916553be39c9a3b511eb3db730\",\n        \"signed\": \"bd45b3c045850ebef7b80dd1deab48037b1346c71deaf1e58f2a7b162674f94d1ef3d4239037330bd6335fe4f0149250901f00a8e46be5fa0aaec69de06d730430b28948939aa263437e45c5c0254fb20e617ed0f3fa7dace5a0a8e0fe3c1fc4adb2809b61c5e8d92cd2f3de93b173be707bada94240c6262c160e8c782165beef99d0be8ecdad6316dcd734bbb90a66cbd5b1cb4fd8f2226cea948e4df76bbe251d478f5c3fe0d6de4be54f67f502b2804f628b79a550fb1ac483ad2ba16637c4bc9da67fb4f98659c4c4394d16b6d14b3e0b0c1e625d710dcc1c11df5d34147b1ec5a417b9e21f908cfc523d43e3f181c7209cc56bdb5a21628695ed320f8d4c07fd6d84aa03426f21644aaefeeec311c74e9499936047350a9bf5b703962e77ce551336835fc32ccbd2c90ae52e24d47d8dcb987abd121d3f746b5de230f26469603fb0c4a8f6cd7973d7da882ed1d6e4d9c5a46ec2c21940ad3389a186014ee97278e5350988b15ecd9ea7456b3cb55e4d3093f13a875b50d6516378ecaf58d752c6374ed15638409311fcd379d122c8d8c59b86f4e8dc46adb730a933846e0bd248d3608252d970b504c813c6dea9fc88a3de641956dca291204d390b6b39981f8c0a6bcfc31ca0744420662a9b35eb3fc211f810a3e8062500b1e49bdf857665ff32a9ba76194bbb77fb9c15412964244b9865f73ded9f25b49b425aa253d807d9818292763a513ec80747344fba0acfe593cc26b1330bb9ade66c4e88cf1baed6d6e7b750e6c7239d7bcbfa3fbe45405a63b96d5034cc0c07ffc3b50858081d1955e2d2fe5be5fda7a8996943768b055170b7fd52f0a32097fe1b7a94f1bf879a0cbabe10ac9a7cc1f9f55068c48e3ccc065136431018d38d20109dc95d99cc2bbe7c627ab1a8aa5f431613b790c2e6526cf04fdc9e55f51c055f3c2045a675e3a1e54ba409f7aefa7e4aa07a2bbd5e4ab16321a9f099694391fda68a74581e2f1f11dd9a6d524b1b83260db57b72ef29c28c8db5c37fd185b7c2d8455090653af332dbc82bfb0db5dccabfb6b28caa350525cb54cc84e553e1cf3954b612393e7993ff7e8bf5ece3f145094dd7a27cb47f227476f289235251f772b3ba776bb773af0cc5f786a3fb9e931a530cfbd891cb5a5dfe25169ef933cc82c9080f323961a120158e4bbd71134ef1f90108b815c289d4e9a9589ec64c05fbb42a21b23d16e2a64678aecfab65cd9a806c598103d41f7009776317831feddd1c9002d4a92204f97ba9490c61469803072102524b9df519005f98af54d60ca5ba60b55b096a4ac2b16eb9cc81973c3135d3fb6873dd9653800a22bb5d0d6117ca5d916553be39c9a3b511eb3db730\",\n        \"signature\": \"bd45b3c045850ebef7b80dd1deab48037b1346c71deaf1e58f2a7b162674f94d1ef3d4239037330bd6335fe4f0149250901f00a8e46be5fa0aaec69de06d7304\"\n    },\n    {\n        \"secret_key\": \"12380c45a79ade0f483c881aaa3730438b083590f404dc9e601f7615f375a628\",\n        \"public_key\": \"d66fc59ae917f76d24ce8ab8ee03fbcb715d5eea4b08392b591e648591c73c89\",\n        \"message\": \"684523c2e7fa8b4bd7548c4bacaa8678a330dbbb960632940166b2cc9afc1535c80c112c8dc4ada7629233fe909055237d513e292af15ad7692f115aa092da657532f51899c3f7f5d9d407ed5c163eb3950480a4122a0992981f077bc867f906075407ba9849c4ea0473ce540a796744efa3860378e1b89343e583d0807e5a67c4d5bd7ce64129fe902b8cfabd2c21fa3d2a10e9bf9ea5e5473ae250c9160509972678f9a740e6cadb3b52f502fa616cffae1def893d54e41e54d326464c9f435c63505fb15e3eeaf5021c65dcd010f840aab317c8605dfb1a0c8a3d5549861b69af2c93d86c981df3a51c5bf5785c2f852610e44fa4ff1c7161152e5618384744fe83babf0bcb7561789a023125f6242a183cac9549c932733a868aa182656e2ba0a8c0be106996a85cebf1bdad123b982b4e055510879482021daea9d8f26c588e6cd10126cb3196880356bee8f298bca306ec5699c7576b765087c253a60214010c6ed70d871cfc8738018a0edb57f106b4218d855eab2c91f39f858b3f25905631a0eee29856fd34f7b8c9ba51c1c4c6a735d6c7a13d220d7a566c3f506c72bc7417ab37f0d6d796ffc71df9dc7c6e137da56b7a3e10cf0b1abb3ffb70bc66293b5d75b405ed8bec0d6fcd06925c381168ac188d0b8a1af0839f5bde843b6991e5a5d6cd66fe6b0fde867c086ed43876919a1b7233d8d7e1d2742f61c77d8e5991689c8328676655b76a3750560e75d1c7e85e3c0085059331094bba5710032cf679a525c78b31700e6d91f75294c422489297e1735943e417fcd35580582fdd0239b51146530cc09d83b28f0a1d642220dfb99bad62f39541035081d65d778ddf3239ba0e6fa9914b17b397a534cb8fd3b4ff42a8d8c8ee66153fbb1ff0fa54f7bd03278516e6341af80fcd1fcee70c359d205368ac490d75a354512da46ba7634c15b284b24477808f17633360a4b49fb3bcaa841841cf92417eb24ce482d5a24bfd2dac372231da539a05420002ff7a20c476097da06f59f03314e6059fad88c50c3baac03cefa7cd8211d2461b1660ea6bcf476838c91a10074eb4b40e6e974a945a67f6ee6904231ef04188f1ead5baf35694efe301edc7e866da23b5a6c58f01b2a52cf3ab805edc5c1368626b95b94eb4645b693ec880f2b8117a693afbdcd2482431890f410bc580530fef375879c2e46049ca891a2c3ecd6043ae80d8af346634674c6dfe905997de5d05d62009eeed277502fb5a5a3155eeeeb67348b60d89a34a7812639f541ffe\",\n        \"signed\": \"02b25174a3dd5219ed48b2c94ca212b63a6a3a2597703c07b7f0c965c3c6ac2eb450efe38716a2a28b3f89846b06ebdca4bd09aa581f24e84d80fc10ac1a000a684523c2e7fa8b4bd7548c4bacaa8678a330dbbb960632940166b2cc9afc1535c80c112c8dc4ada7629233fe909055237d513e292af15ad7692f115aa092da657532f51899c3f7f5d9d407ed5c163eb3950480a4122a0992981f077bc867f906075407ba9849c4ea0473ce540a796744efa3860378e1b89343e583d0807e5a67c4d5bd7ce64129fe902b8cfabd2c21fa3d2a10e9bf9ea5e5473ae250c9160509972678f9a740e6cadb3b52f502fa616cffae1def893d54e41e54d326464c9f435c63505fb15e3eeaf5021c65dcd010f840aab317c8605dfb1a0c8a3d5549861b69af2c93d86c981df3a51c5bf5785c2f852610e44fa4ff1c7161152e5618384744fe83babf0bcb7561789a023125f6242a183cac9549c932733a868aa182656e2ba0a8c0be106996a85cebf1bdad123b982b4e055510879482021daea9d8f26c588e6cd10126cb3196880356bee8f298bca306ec5699c7576b765087c253a60214010c6ed70d871cfc8738018a0edb57f106b4218d855eab2c91f39f858b3f25905631a0eee29856fd34f7b8c9ba51c1c4c6a735d6c7a13d220d7a566c3f506c72bc7417ab37f0d6d796ffc71df9dc7c6e137da56b7a3e10cf0b1abb3ffb70bc66293b5d75b405ed8bec0d6fcd06925c381168ac188d0b8a1af0839f5bde843b6991e5a5d6cd66fe6b0fde867c086ed43876919a1b7233d8d7e1d2742f61c77d8e5991689c8328676655b76a3750560e75d1c7e85e3c0085059331094bba5710032cf679a525c78b31700e6d91f75294c422489297e1735943e417fcd35580582fdd0239b51146530cc09d83b28f0a1d642220dfb99bad62f39541035081d65d778ddf3239ba0e6fa9914b17b397a534cb8fd3b4ff42a8d8c8ee66153fbb1ff0fa54f7bd03278516e6341af80fcd1fcee70c359d205368ac490d75a354512da46ba7634c15b284b24477808f17633360a4b49fb3bcaa841841cf92417eb24ce482d5a24bfd2dac372231da539a05420002ff7a20c476097da06f59f03314e6059fad88c50c3baac03cefa7cd8211d2461b1660ea6bcf476838c91a10074eb4b40e6e974a945a67f6ee6904231ef04188f1ead5baf35694efe301edc7e866da23b5a6c58f01b2a52cf3ab805edc5c1368626b95b94eb4645b693ec880f2b8117a693afbdcd2482431890f410bc580530fef375879c2e46049ca891a2c3ecd6043ae80d8af346634674c6dfe905997de5d05d62009eeed277502fb5a5a3155eeeeb67348b60d89a34a7812639f541ffe\",\n        \"signature\": \"02b25174a3dd5219ed48b2c94ca212b63a6a3a2597703c07b7f0c965c3c6ac2eb450efe38716a2a28b3f89846b06ebdca4bd09aa581f24e84d80fc10ac1a000a\"\n    },\n    {\n        \"secret_key\": \"d1b3430d4e63aabfa9ef96bcbaf1fa6a9eb5219dd44df3b1a61563dffe1ccb28\",\n        \"public_key\": \"c28a05195245290ecd38535585ce51f3c235c5d650c8c57c2f79bb0ac0e80834\",\n        \"message\": \"076c0c8762e4bc003c360a12a19598050551d16b4b8da0fb9c4afcc81adbe61995f25cbc28dca420bfa9461054d3ee00ad78183e7f26df6898af9a4d225fcab67c042e9a13525d1f75ff0e3d8da80896b728f3e2db65944ae0717d775990b59e5b70434bd4b3ee452f10ac0610570b38220832968f544d3e4d119b1d4b5015c6cdf4cf220b56b5c0ccd8e398d5e4a58da3b0e2b270a5d39b82abb7f9d27a419018550b6200ae51c84882f086ae7ea5351671b6dd960923ad6befc13409879a8df619bdf6c88a6fe1ecc0f0f3aa219fb61902be48a53df2bc66c56f1c1d17f7e6167d255165f174baa9caf53c73cbbb7cc2c7c087f43abe2aed5a21fe4290b8d67960a8a9cbc2a57abe22654dc184cff9168bb697270375fe88d5c49cf95b06cf9d0dac81fbd9c0d7b82d05ed2c3fd49ccc29404441712545f9a991e4f0ddb62190838296f967299a38607226d8a681f0a8f3c4384fd18b30257c463c0abd0f4f6f1225a51b762d6d0ac7d59cd2efd698b8d13e23d70409f6b07d695c1671cd6f59443b1db0ab35b9dc0640e4c6d1ac50475d28ef94f81790e2e5b2545514b2a49c5c2153459be540890f53bc18e4a16dcb5dcf50f37a95c606fdf48598e52af3179a2048615d93d97e0599b7088c1174bb9f15e37018f99acbce5b1302f8d8ce2ab85437feeb0caa7784dc83c9e7c36fe059906b030a86a3ded0ab9d8b73529d475e661a0808d6d3f0907f8528873f08d5748be1d69712e85262d77bdf13bfd18a5cde6f71462673ab29b1617315a9a6e936a8e81a8e43bd0f6644a5c69eaaac89bdaa99cca803833705e5afa69b3bd1d0252b854650f2199791e6aca7c75a861283216233a2633a6aeff9d301ee5cb4dd72c08a45cdae8f5458c095b22e759c43b49b98e9f4cb33d5dea879449eae73cb874c73594325ebf68c1ed4064b6f61ab2f014a2f19f32e12b33c5eaa8a29204d5eba58dc075072fe399be7d1ab1808208fb408123bdc0b4ab3130f9f706dc3eb194b605e73a32f125ae491285ce6039fb623c38b81d5aba0f5599f6c86e872486b4e9649daffe3a3d06cb073dd3bc6f4e10a18700e45722d78a6b0972dc94d5c7a7b6641757b796075719d7b8ec36a1e796fb5f8fe6f1b79a0859cb4d67cec05ed914cfa32c1ddfe218ef963436c3a1148ac2cf909df7359890657463a4ea25fed59618a0681a1217e22d64ef9d9b4559d0a0f6b3ce8d847930b232301caf44cdf7a3f18a2ac130b92cfd9c03360557b5f7c4775462a1071f70344c718374b\",\n        \"signed\": \"4cb6ff5dd706b1ae816cdbaf9e9e1edc80a66284f94652d50ec14e283b2adc592fd084337144ffa712dc34ce8e610668a65e969f05ceb54786304d0d58d31a08076c0c8762e4bc003c360a12a19598050551d16b4b8da0fb9c4afcc81adbe61995f25cbc28dca420bfa9461054d3ee00ad78183e7f26df6898af9a4d225fcab67c042e9a13525d1f75ff0e3d8da80896b728f3e2db65944ae0717d775990b59e5b70434bd4b3ee452f10ac0610570b38220832968f544d3e4d119b1d4b5015c6cdf4cf220b56b5c0ccd8e398d5e4a58da3b0e2b270a5d39b82abb7f9d27a419018550b6200ae51c84882f086ae7ea5351671b6dd960923ad6befc13409879a8df619bdf6c88a6fe1ecc0f0f3aa219fb61902be48a53df2bc66c56f1c1d17f7e6167d255165f174baa9caf53c73cbbb7cc2c7c087f43abe2aed5a21fe4290b8d67960a8a9cbc2a57abe22654dc184cff9168bb697270375fe88d5c49cf95b06cf9d0dac81fbd9c0d7b82d05ed2c3fd49ccc29404441712545f9a991e4f0ddb62190838296f967299a38607226d8a681f0a8f3c4384fd18b30257c463c0abd0f4f6f1225a51b762d6d0ac7d59cd2efd698b8d13e23d70409f6b07d695c1671cd6f59443b1db0ab35b9dc0640e4c6d1ac50475d28ef94f81790e2e5b2545514b2a49c5c2153459be540890f53bc18e4a16dcb5dcf50f37a95c606fdf48598e52af3179a2048615d93d97e0599b7088c1174bb9f15e37018f99acbce5b1302f8d8ce2ab85437feeb0caa7784dc83c9e7c36fe059906b030a86a3ded0ab9d8b73529d475e661a0808d6d3f0907f8528873f08d5748be1d69712e85262d77bdf13bfd18a5cde6f71462673ab29b1617315a9a6e936a8e81a8e43bd0f6644a5c69eaaac89bdaa99cca803833705e5afa69b3bd1d0252b854650f2199791e6aca7c75a861283216233a2633a6aeff9d301ee5cb4dd72c08a45cdae8f5458c095b22e759c43b49b98e9f4cb33d5dea879449eae73cb874c73594325ebf68c1ed4064b6f61ab2f014a2f19f32e12b33c5eaa8a29204d5eba58dc075072fe399be7d1ab1808208fb408123bdc0b4ab3130f9f706dc3eb194b605e73a32f125ae491285ce6039fb623c38b81d5aba0f5599f6c86e872486b4e9649daffe3a3d06cb073dd3bc6f4e10a18700e45722d78a6b0972dc94d5c7a7b6641757b796075719d7b8ec36a1e796fb5f8fe6f1b79a0859cb4d67cec05ed914cfa32c1ddfe218ef963436c3a1148ac2cf909df7359890657463a4ea25fed59618a0681a1217e22d64ef9d9b4559d0a0f6b3ce8d847930b232301caf44cdf7a3f18a2ac130b92cfd9c03360557b5f7c4775462a1071f70344c718374b\",\n        \"signature\": \"4cb6ff5dd706b1ae816cdbaf9e9e1edc80a66284f94652d50ec14e283b2adc592fd084337144ffa712dc34ce8e610668a65e969f05ceb54786304d0d58d31a08\"\n    },\n    {\n        \"secret_key\": \"033e003d7aab7bc7fc8ac204c733799ae553c3fec53f10dbf795b5f4b87f1c95\",\n        \"public_key\": \"682f46f5c056dd45ba0b5a782031f9596a73aa292ca2326beda74a52fc32b716\",\n        \"message\": \"596aa2c40b3318878938ebc138db274bb38a5201eb7caf875e6c645791dae012bdefd485e6bd9d8499c42a2ae86cf32b18002e76bb582cca0dec4815ded8a1211f8fc8857fce1d57f6151d88787b978fab56bf926b1533e19499e8bb99158cdd6e980f6ba543ae831f9dd134b0fe6d5c24887dc7a8d4781dd9b7fc5dc9464b045cbf9d1ef5036b5bf28b549ac7aa8fafb91adc9feca7a14554d110e310c749e48533f359c70f05fb7aedef136636b8ef7223886539864ee52d34118b4b8b74e08fe6b65896e4b19b6d7c3f2528265585481710d2d74948eb4b1708a50fa74021bda4b361bc68d2a5d202109f8d28d8aa67d78c1136cd2e903c8dfa175af7bd963b73dae495873ccdae62bfef885636dd83550ff9c05c37ba3389d1543685d89483b0c104e7efbb7702c5a0398ac720484c50936835ee9df253f0ef8cbef3e07de969511ccbf87557493a0b972ef0e8e629cf3822db21286ed727661bd31786fca1421106dacdee1caaf49454e854794f704d22a95a4c8e6b1c2feea57e56238c2096f1cc578647fea544d6764482bdf5148879a25f943db16f29021b9ecfe3e090b425c81c7009842e1c7a02d91ca60c1201c3bdae9c5373af03f2f4dbef40de8d9b21fed68dee510de0427234caa1c20a3ae549954834c93373d913b8750f23a03780d7a9454ed6fe51fd2d276b9d4aa32de05e03816e64e9466f4f0e224651428d342cbcc697170a47ef996bdacbce91117ca1f8455b25b2b08443e9914e3d90c489eeaa7731ddea2123d55d67b16683fb7c8236aaa5a1b0fcaf8d170011dbe9aa2857be612cbb85ef69e56831b4dacfbc7a59b465a66dc7412ddb3d6af4ebfd705864e7d4fb99a6ccb48b118368feab02a340c432768de0e067871e9ea808d6d993815829e71f6c042b664995098fee94d543df15e5b16957031bd238bcadbbdcc576affb640303d69c5b250b3a539afd127f7ee2609e52e5154fbdff3e45f9c44066656d561e0f64dff2805df88e30a380530822413a7ab76a1b9a865378d24763069a814002a9a9d03795ca8d2b5bd1090393e9e4b1ff7d7f0eb84e712a018f68c9e384f0a0aef3967879284f409e30d2365086e66952278ca9b6f90e8f69a48d9b28bb4c4ed632abca3af4144da7422bf51992f734731453c7a33e15e59f5308129d6a774a94586f723311179176c0948fff4e30c1b959812cac977cc74347b007940f2fb962a90d66066a6de8801984dee4a532d4b0acd6dcaf06727bab70b3866232234c9100bfdc669f77ca49\",\n        \"signed\": \"edb4e020d676fac6a845534880bf6136374a8b7f2c5385bb9ee225381f494efb74a55b413ae0ea70add61bfdfb87fb42d5bc0c5359dddd573d538ae93a6b3609596aa2c40b3318878938ebc138db274bb38a5201eb7caf875e6c645791dae012bdefd485e6bd9d8499c42a2ae86cf32b18002e76bb582cca0dec4815ded8a1211f8fc8857fce1d57f6151d88787b978fab56bf926b1533e19499e8bb99158cdd6e980f6ba543ae831f9dd134b0fe6d5c24887dc7a8d4781dd9b7fc5dc9464b045cbf9d1ef5036b5bf28b549ac7aa8fafb91adc9feca7a14554d110e310c749e48533f359c70f05fb7aedef136636b8ef7223886539864ee52d34118b4b8b74e08fe6b65896e4b19b6d7c3f2528265585481710d2d74948eb4b1708a50fa74021bda4b361bc68d2a5d202109f8d28d8aa67d78c1136cd2e903c8dfa175af7bd963b73dae495873ccdae62bfef885636dd83550ff9c05c37ba3389d1543685d89483b0c104e7efbb7702c5a0398ac720484c50936835ee9df253f0ef8cbef3e07de969511ccbf87557493a0b972ef0e8e629cf3822db21286ed727661bd31786fca1421106dacdee1caaf49454e854794f704d22a95a4c8e6b1c2feea57e56238c2096f1cc578647fea544d6764482bdf5148879a25f943db16f29021b9ecfe3e090b425c81c7009842e1c7a02d91ca60c1201c3bdae9c5373af03f2f4dbef40de8d9b21fed68dee510de0427234caa1c20a3ae549954834c93373d913b8750f23a03780d7a9454ed6fe51fd2d276b9d4aa32de05e03816e64e9466f4f0e224651428d342cbcc697170a47ef996bdacbce91117ca1f8455b25b2b08443e9914e3d90c489eeaa7731ddea2123d55d67b16683fb7c8236aaa5a1b0fcaf8d170011dbe9aa2857be612cbb85ef69e56831b4dacfbc7a59b465a66dc7412ddb3d6af4ebfd705864e7d4fb99a6ccb48b118368feab02a340c432768de0e067871e9ea808d6d993815829e71f6c042b664995098fee94d543df15e5b16957031bd238bcadbbdcc576affb640303d69c5b250b3a539afd127f7ee2609e52e5154fbdff3e45f9c44066656d561e0f64dff2805df88e30a380530822413a7ab76a1b9a865378d24763069a814002a9a9d03795ca8d2b5bd1090393e9e4b1ff7d7f0eb84e712a018f68c9e384f0a0aef3967879284f409e30d2365086e66952278ca9b6f90e8f69a48d9b28bb4c4ed632abca3af4144da7422bf51992f734731453c7a33e15e59f5308129d6a774a94586f723311179176c0948fff4e30c1b959812cac977cc74347b007940f2fb962a90d66066a6de8801984dee4a532d4b0acd6dcaf06727bab70b3866232234c9100bfdc669f77ca49\",\n        \"signature\": \"edb4e020d676fac6a845534880bf6136374a8b7f2c5385bb9ee225381f494efb74a55b413ae0ea70add61bfdfb87fb42d5bc0c5359dddd573d538ae93a6b3609\"\n    },\n    {\n        \"secret_key\": \"ee55fcf70a275c726bd4856683b347decfd422f1826c07a932cb85be9fa4ef3c\",\n        \"public_key\": \"dfcffb5e1553789d56a9f3914bce500d07c5ac311f927854b2cf1e5833c03237\",\n        \"message\": \"b8c845cf7c5485f0622d1ddc17f7a0f6f0fd7074fe194b0e0cd42650cfc817f57f095f8cdfad1ebe0dfbc1bd7617ab4f204e9d55d81a7c8a433940ec6f17c8a8e3d56c1afb0af374bd32d54ef7132d26b89c470c2ab5be16fabb4c75193d6da59ba2fd157e9ea4e0c5c08a5202f5edc6a61701f08bb344ca6455d75d145adb244c534c8cfc623f4d4b6767594b39a7690beeec4df9746a57ffee051454c4278ea43c810ff13cd769615f9d05d4fe4a51583e80c015dcfed9af05f93d054d34ffd939bdd8f0518fa3030a964dc9d80df00f1635824072cdf29bc80259209d50f56fca9fbd6ae1514a671989cea4f6846bc19179097cca40c624d7edbf91fb5b2539ebbd502d3646711430bae423fd115848093318b7d087ef1e3b894bc3b9ea27af853fca8595d36fb7299969162f2ed6a2b55075b2c630802857176dec4cb5acf2b13a35a9949b912bb57d81eb0c8a8adf3cf64cb571bf5f3d71f987d64d74e919a00336e57d35ee4eecfc657000dd5b12995ee1b116591ce58e56de25b29c94829d1d68521b9558e4725ec77039069c0cd17b2a003359e9e1e112c7590176cebce7f001f1d136e818f4818cfd94745afaab56f1a406f97dd9e61b735266d682ad7df26dd70cde0b57fea7db2df832fa88a35f539794884ddc41218403016cb6d5221f3feb5d3aee4a9840a913072d29f8d1a9367bb0bbf545f7dae7c00a0d0c0342231ae462bb742e1498ee584ae6c83f2f1f2d0452bead982268cd3cfde78ff422e226bf7b2af1137757797fb02e5275c34809d54ca9ee2a65275e6e5cffdd20ad1fa1ee0bd8b21e04ce829e02cdb63c48bfcdd86d3a08c59789c9d78e36181defeb7227107275ed6b5ccb127cd72b374e17f5ee0b5e47b4b3e14a8ec6d86bb7507187f28db32b3f3fa1ca13446fe5253ee783645e794272799a863b4fca99e443cbaa05de3c50edf3d5cd7c10529c6c09a0c1453406ac7ecafa9b3a1f369d68f3c618f58efc359df2f3fcd2478b55a41a11f2487e7f70ec293b3eccc700ef444a33d1eae9849c5b76d29afd5a23861aef4f2a7ba3f666301fdeb5d3d8f0dc9ee2e014b24c7465dee3c0964edd49ed49edabb5ca7afb99574d001e5812a085231f241b6b08c73e80fb44bb2adf554f14fd6dce94a6f63623d9c1deb41ad101651a6b67ae5234daae81979fbd823389649a3b0a06c68b80468a991d3007748751fa69281db1b94d6c160a1cab50943cdbb8dea5750906b3c6595bb580dedbfae57464cc7a651d4c51dbb5fa980597d17669\",\n        \"signed\": \"9d8cb2eaf3ff3e0c2bc672e1d255c5b8e80731bff6f6aba517e13354e851080f4a8bb8121b2624244c9ee95c8a092f103703fbe66f9cba100d2e91ed774ac907b8c845cf7c5485f0622d1ddc17f7a0f6f0fd7074fe194b0e0cd42650cfc817f57f095f8cdfad1ebe0dfbc1bd7617ab4f204e9d55d81a7c8a433940ec6f17c8a8e3d56c1afb0af374bd32d54ef7132d26b89c470c2ab5be16fabb4c75193d6da59ba2fd157e9ea4e0c5c08a5202f5edc6a61701f08bb344ca6455d75d145adb244c534c8cfc623f4d4b6767594b39a7690beeec4df9746a57ffee051454c4278ea43c810ff13cd769615f9d05d4fe4a51583e80c015dcfed9af05f93d054d34ffd939bdd8f0518fa3030a964dc9d80df00f1635824072cdf29bc80259209d50f56fca9fbd6ae1514a671989cea4f6846bc19179097cca40c624d7edbf91fb5b2539ebbd502d3646711430bae423fd115848093318b7d087ef1e3b894bc3b9ea27af853fca8595d36fb7299969162f2ed6a2b55075b2c630802857176dec4cb5acf2b13a35a9949b912bb57d81eb0c8a8adf3cf64cb571bf5f3d71f987d64d74e919a00336e57d35ee4eecfc657000dd5b12995ee1b116591ce58e56de25b29c94829d1d68521b9558e4725ec77039069c0cd17b2a003359e9e1e112c7590176cebce7f001f1d136e818f4818cfd94745afaab56f1a406f97dd9e61b735266d682ad7df26dd70cde0b57fea7db2df832fa88a35f539794884ddc41218403016cb6d5221f3feb5d3aee4a9840a913072d29f8d1a9367bb0bbf545f7dae7c00a0d0c0342231ae462bb742e1498ee584ae6c83f2f1f2d0452bead982268cd3cfde78ff422e226bf7b2af1137757797fb02e5275c34809d54ca9ee2a65275e6e5cffdd20ad1fa1ee0bd8b21e04ce829e02cdb63c48bfcdd86d3a08c59789c9d78e36181defeb7227107275ed6b5ccb127cd72b374e17f5ee0b5e47b4b3e14a8ec6d86bb7507187f28db32b3f3fa1ca13446fe5253ee783645e794272799a863b4fca99e443cbaa05de3c50edf3d5cd7c10529c6c09a0c1453406ac7ecafa9b3a1f369d68f3c618f58efc359df2f3fcd2478b55a41a11f2487e7f70ec293b3eccc700ef444a33d1eae9849c5b76d29afd5a23861aef4f2a7ba3f666301fdeb5d3d8f0dc9ee2e014b24c7465dee3c0964edd49ed49edabb5ca7afb99574d001e5812a085231f241b6b08c73e80fb44bb2adf554f14fd6dce94a6f63623d9c1deb41ad101651a6b67ae5234daae81979fbd823389649a3b0a06c68b80468a991d3007748751fa69281db1b94d6c160a1cab50943cdbb8dea5750906b3c6595bb580dedbfae57464cc7a651d4c51dbb5fa980597d17669\",\n        \"signature\": \"9d8cb2eaf3ff3e0c2bc672e1d255c5b8e80731bff6f6aba517e13354e851080f4a8bb8121b2624244c9ee95c8a092f103703fbe66f9cba100d2e91ed774ac907\"\n    },\n    {\n        \"secret_key\": \"49c298a2db3d2589c9fe16a4e571e5aa23cbaa777b86470290a3eda7a5d3e96b\",\n        \"public_key\": \"dac523d6374c8ff15fc4ddc713715ac35cf5547fc1b1b2646b63fb41a7f21621\",\n        \"message\": \"3582eeb0d371df385de88baad380cb0cdb60eab2baebb3c79837753d08e1cb78c0bd76dd1104454956d571ceb7e6b571a5236835d784b50ff66057b13595e7d0c8f25d08ae8b54b6123ba08151ac7db0c56a980f7f0bb39a54b437f54851979986ab1367835e5c4f3a3b3d760d3827e76c568ae7aebbb612e775bddeccd334ac6bcd3253abc29d4b7c3f10362666f6ae75080370a36cba55db3a91cb5789e4d6f9efea4df1dd7730a5e27960d53b5121948cce5af653fff1d5b4e5b0a88c718c49b31c793d88c1cc45ab8da29d05e906cd0594b5f6638c8ec3f1760ba423b5ab1d08a58770afb0f139abd349c1bf160d8902239ce24f19b4e1be095f7ed165f3931e3cbcc307e9fc5c658031228e55cbbeec0d0bcf8f695154a9eed1bef35228789bfc0d238b8372d318328c1339fea08814db8621abca3aeb82098b5aa87bb98f5e40522a0888532c1748453db2d2b3943e4abb312de319aec48cc1c94775972953fb6496b8168937623510cd48c8b247956d3168486c176ae7a4cb384eacfdabfadd9fba30a23b811bd779f3cba54338c28bb3382238ed3b8dd21beab2f5cade28c5e09b31a454808a5348122e3ae3812296f7869c3865c3c9d8fe18bd812f2e60e914975cfe1bef8dbb8097006f0d7cf3fc15eb95c27854b14312b88d528015af69fb7505b8f32703f64eb1c958f046dd251242f8bea7467fc7291d095e9696e11aa45abe7924e856351535aa0773d3d9e61cc9a2d89b5b0774d7645ee1af7eb6fcd440bc69d43edeaaf935fd2a5295ac19a97d70af9298830f81c0a509f242f473372478fa5879fb2cb8511080fc2ecd8259b8c3ce9e8b640761dc7927c32e7f5bae97a8b8ac935662e5f45d14cad6d34affc9a19414c4566f45f977396710894c5399ed4480f18e90957faa76ccb512a2d07573058a95b42fe1810249d1c85ec431a049d1aecb0f118379bdc3f1ee490bc8a054c32c3dac7659966cdb66f995ac403d5e79eb6b25b3f3f65a6ceec220d66c05f8a8a98b80799ba4f2c6dbbb4dfb5862c9a46bca013ebdfaba7494a30ce14606afc0b0f993143fedee7896d9a6bb81499166ed02e94186aaf32187aeb6e282501bca43b57b7efa0939c934bc8fbbd26c44b618335a35c692ff996a5b95d327df9b2a6621b3b0f190db1f36d911d1a663a4ebf9a2854bb4f4061095b69812c82c2ffe3f92e9b44d2ea63169881cae8453d6eef7cf69c25a28b3f8ddc70148ef26721a3c1f2e62d9d10cea42fca3facd74673a4e7f33507364aa286c0f38d7\",\n        \"signed\": \"2a439c73c98117fb2952e2b161f7f3b99e7d39bc697f794075db7b634d29f1ff5724f677f8312ad515b097cca9dfc30e79ee8a7c9dd728bdd45df859c7bde30a3582eeb0d371df385de88baad380cb0cdb60eab2baebb3c79837753d08e1cb78c0bd76dd1104454956d571ceb7e6b571a5236835d784b50ff66057b13595e7d0c8f25d08ae8b54b6123ba08151ac7db0c56a980f7f0bb39a54b437f54851979986ab1367835e5c4f3a3b3d760d3827e76c568ae7aebbb612e775bddeccd334ac6bcd3253abc29d4b7c3f10362666f6ae75080370a36cba55db3a91cb5789e4d6f9efea4df1dd7730a5e27960d53b5121948cce5af653fff1d5b4e5b0a88c718c49b31c793d88c1cc45ab8da29d05e906cd0594b5f6638c8ec3f1760ba423b5ab1d08a58770afb0f139abd349c1bf160d8902239ce24f19b4e1be095f7ed165f3931e3cbcc307e9fc5c658031228e55cbbeec0d0bcf8f695154a9eed1bef35228789bfc0d238b8372d318328c1339fea08814db8621abca3aeb82098b5aa87bb98f5e40522a0888532c1748453db2d2b3943e4abb312de319aec48cc1c94775972953fb6496b8168937623510cd48c8b247956d3168486c176ae7a4cb384eacfdabfadd9fba30a23b811bd779f3cba54338c28bb3382238ed3b8dd21beab2f5cade28c5e09b31a454808a5348122e3ae3812296f7869c3865c3c9d8fe18bd812f2e60e914975cfe1bef8dbb8097006f0d7cf3fc15eb95c27854b14312b88d528015af69fb7505b8f32703f64eb1c958f046dd251242f8bea7467fc7291d095e9696e11aa45abe7924e856351535aa0773d3d9e61cc9a2d89b5b0774d7645ee1af7eb6fcd440bc69d43edeaaf935fd2a5295ac19a97d70af9298830f81c0a509f242f473372478fa5879fb2cb8511080fc2ecd8259b8c3ce9e8b640761dc7927c32e7f5bae97a8b8ac935662e5f45d14cad6d34affc9a19414c4566f45f977396710894c5399ed4480f18e90957faa76ccb512a2d07573058a95b42fe1810249d1c85ec431a049d1aecb0f118379bdc3f1ee490bc8a054c32c3dac7659966cdb66f995ac403d5e79eb6b25b3f3f65a6ceec220d66c05f8a8a98b80799ba4f2c6dbbb4dfb5862c9a46bca013ebdfaba7494a30ce14606afc0b0f993143fedee7896d9a6bb81499166ed02e94186aaf32187aeb6e282501bca43b57b7efa0939c934bc8fbbd26c44b618335a35c692ff996a5b95d327df9b2a6621b3b0f190db1f36d911d1a663a4ebf9a2854bb4f4061095b69812c82c2ffe3f92e9b44d2ea63169881cae8453d6eef7cf69c25a28b3f8ddc70148ef26721a3c1f2e62d9d10cea42fca3facd74673a4e7f33507364aa286c0f38d7\",\n        \"signature\": \"2a439c73c98117fb2952e2b161f7f3b99e7d39bc697f794075db7b634d29f1ff5724f677f8312ad515b097cca9dfc30e79ee8a7c9dd728bdd45df859c7bde30a\"\n    },\n    {\n        \"secret_key\": \"823f0c29fbfdd3d1828f3055e9ec01ffd1b5a375118ddd7e4e0c43719f573ff7\",\n        \"public_key\": \"73125fc83abb8b7c658559fc127393231d03ca5846e0c88118d13d55ca44789d\",\n        \"message\": \"802c39ce7f2a50bd81622add0df4e0fe03ec3d2d305a45a6165271ed79add243b9a00e52183192feb24c4fdbd22c807ae100efcf165b9c996194e00fa817765ea94a03070e486686b445fcb263ccfe1f5862f3b84b10f390080bfcae447ae0069742b8618fa9575f7e637ad54e834caf0394d745032ce1e255c0273250f1504b37a0add94aa245c7de52c80e05d6e0a96a14410543826a49e9b945626d4e89f55027163d4bd6d0e9bd1a2477f67d3d5668a42e94d8b61193d821e0d1b230fcadc53613b75b02cfb8158456077ebdf5a5f00c3b5b186370cafec4a21c69dce1f01efef23c37ab90f858238aefbe212b556d2f073406559f1a51d84efffdce07b00d01bbf33771cc12c960ac89365a9c82c52343f7603381b89023c1a6e702a5b1e4bd191ea6970b5ea451ea05b59bf83e55f29a1f803212bb2e58f0616333d9114708529e8b6c6081deeb7c299a5a2a53ccd24ed58ffbfe503d80614adb05ca11cf29ded00904ea1239f82ba40c793ebc339775f8b0fe3901f5482e310c793c6e2cf01dc157727af238f49c9862804b047551fd886f4a4899e22a6a65701117a3858055bbfe966e370e733e17efada2859fd8ffa9e01fce5606a255367678f4bd4e21e5da0fef30757f34e389f76b7d57c4e410a002e900e48fb218c8f2778f148fee56965f5b473e25256c23a7af198342cf3ef02b84df2cd5800a461c1b07bda2f42628a68ad29dbb82a470967d7302c993b234136e5bf255e6248b102c2bffb20172371f1ca3e10b0810e8649503546d9a731cf19b083357d4cfecc89bedb53506fe199b670391a620069a3081f253b4d790880aa23b53e97c75dc0c360540e5b0a3efb1accffd137414ff8423d54646fc56ba5f53bd84c7267c2f7ee3e37607544154365f9f85081dd7d2ee75d302275c799ef2427ca6496355dcda1d44e0d977bf68db3006500ae3f400d6a8c7cf47057d4fc87eeecb02116b73eed6ce1fccef6e8fb8aea363b2f6f5322a5f0753f45899537646d58651be9037bf91423c2986f5cc2bcbce4faec903498b40fc2deab6603d6eea585d2720d21bb2722bc05b35aed2bcc0e804fe9d239fafda7ddafe1d7860abb0fb28f4bf2b1fbb62a786e455be024b193b7830be0d558f02c9f3ae31dc107ee9421dc5f0b0f89402b71a4581401536bc47308506d96939a206362744e27dde944f4096a12b5f63dab64d041484d3fd91a62c2f0ef9ae787422eb27fed0802e25f9bc775c4915a837fe3eb7b9d5843e4d8210c6b494b61281637a6be32052\",\n        \"signed\": \"fa747b6fe3381ad6bc82a95643c1f4a20b76ba73bff00e635d64202d8b0df03dbc56b0138b3a6d4198ffaf58ccd3d388ed25ebcf770443e41e9d2147950a300b802c39ce7f2a50bd81622add0df4e0fe03ec3d2d305a45a6165271ed79add243b9a00e52183192feb24c4fdbd22c807ae100efcf165b9c996194e00fa817765ea94a03070e486686b445fcb263ccfe1f5862f3b84b10f390080bfcae447ae0069742b8618fa9575f7e637ad54e834caf0394d745032ce1e255c0273250f1504b37a0add94aa245c7de52c80e05d6e0a96a14410543826a49e9b945626d4e89f55027163d4bd6d0e9bd1a2477f67d3d5668a42e94d8b61193d821e0d1b230fcadc53613b75b02cfb8158456077ebdf5a5f00c3b5b186370cafec4a21c69dce1f01efef23c37ab90f858238aefbe212b556d2f073406559f1a51d84efffdce07b00d01bbf33771cc12c960ac89365a9c82c52343f7603381b89023c1a6e702a5b1e4bd191ea6970b5ea451ea05b59bf83e55f29a1f803212bb2e58f0616333d9114708529e8b6c6081deeb7c299a5a2a53ccd24ed58ffbfe503d80614adb05ca11cf29ded00904ea1239f82ba40c793ebc339775f8b0fe3901f5482e310c793c6e2cf01dc157727af238f49c9862804b047551fd886f4a4899e22a6a65701117a3858055bbfe966e370e733e17efada2859fd8ffa9e01fce5606a255367678f4bd4e21e5da0fef30757f34e389f76b7d57c4e410a002e900e48fb218c8f2778f148fee56965f5b473e25256c23a7af198342cf3ef02b84df2cd5800a461c1b07bda2f42628a68ad29dbb82a470967d7302c993b234136e5bf255e6248b102c2bffb20172371f1ca3e10b0810e8649503546d9a731cf19b083357d4cfecc89bedb53506fe199b670391a620069a3081f253b4d790880aa23b53e97c75dc0c360540e5b0a3efb1accffd137414ff8423d54646fc56ba5f53bd84c7267c2f7ee3e37607544154365f9f85081dd7d2ee75d302275c799ef2427ca6496355dcda1d44e0d977bf68db3006500ae3f400d6a8c7cf47057d4fc87eeecb02116b73eed6ce1fccef6e8fb8aea363b2f6f5322a5f0753f45899537646d58651be9037bf91423c2986f5cc2bcbce4faec903498b40fc2deab6603d6eea585d2720d21bb2722bc05b35aed2bcc0e804fe9d239fafda7ddafe1d7860abb0fb28f4bf2b1fbb62a786e455be024b193b7830be0d558f02c9f3ae31dc107ee9421dc5f0b0f89402b71a4581401536bc47308506d96939a206362744e27dde944f4096a12b5f63dab64d041484d3fd91a62c2f0ef9ae787422eb27fed0802e25f9bc775c4915a837fe3eb7b9d5843e4d8210c6b494b61281637a6be32052\",\n        \"signature\": \"fa747b6fe3381ad6bc82a95643c1f4a20b76ba73bff00e635d64202d8b0df03dbc56b0138b3a6d4198ffaf58ccd3d388ed25ebcf770443e41e9d2147950a300b\"\n    },\n    {\n        \"secret_key\": \"65676633374214c4ac4b7bcea9f1cc84b1b7e79411e310525ace385f4566c1d5\",\n        \"public_key\": \"0e6ec5801d8bd6b1eb421421a1408f134cf712338e0ffc24cdccdc4f7fa31dbe\",\n        \"message\": \"9d622c206787694093c6f29f93619f21bb64c039416d20dc708a084a9d2e490cf5658e13d62cb0d21eab00e42d851bc6ec75daf405d2373246eea415e866291babf76497680aaf04425a42552b107d58cd18561c8c9483f740744cbfa6054c1b126f5a76659ac19dddad4ab5a09155d8c050b5354e06a4dd3ee3a6f9c91e8b4c7af2749664e7abe97061589e153c58e27cf299a25f2b530c060731ec0f4366bd1debeb4d4e912e76e508534d433ec48f96b62e150de93963a1b3e6c8091b495a96518ce3d3b9a8dbdc2a13fdd077f2231de8d76f56d9ab1c2f9efabce4638364f8fb2a2c683ca819b703ab453b11d37a69fa4bcb8023980834f7b902ad1819fc029212fdea0abf11dec88c55d68ef87a26dbb15dc3d3dfbcdddd5ed71be86f32c76ee2221d9243683df9516564b26bab5c845d4dfe0adcc7cb9fe1ee2c051af5908ce0cc3a90904dbc0d3680ed4992f46ce25c2ee851c414f0187d893e5c3b0189a7bb6893d683f5e3394cc046299a16a1c1b5695933a89bb13030855b81b3c74685f719de0160575a0ff0a91fd94347b8bcbe125d1d3f9ce772a8126e00f563b3189656d5522c187ab831a7ade7ac06fdcac7f1d45882e51f9bf5b44a2daba4a53dbb31970b4a0f1272fe14087e0c3c7e4542312fe74d767f21e7ea487d5284284f46f20f32c5b16e1e0ac8d796ab2f80b344e7a8d84d5de823a50897752dc549a48fc10bcd436a7a93e97cd05d7830138f323879680c343c16467d264d749bf45e40f39fbc3a00c43b00693b0156768ff2e3f8ad9eb6405022f5cada6694e8a33cdc59c6673c44117244eb03fd7fd675930c294edd2940f5f180953d910c55485b2057ae0c9302f4a8e831a5530e3cbbf6f472224083a952a8390ab00dc0f69dfd880eea2d739d218d6a66f237f10d4401aa758ff8120c0ae2766127849024f5a4cc574a5b02b935966812cd1fb6d79d0c4f59ff80f035a0b109cccb22fb08535b874149edf2a0970c14888427d07d1eafa684a6d3454e49b225184c6b993ec8ddb8b5a35ee45f87f69266d49096a317d86ade27f4529fe72364d0b958007299d9de87d6ff9fb04d573aea46bac8eb764752eb465caaaba689a6460c110730bdd08b1689de7b05de59af9fe244ac363e95c98b669359af9031a3a93ba631abf1f61d20ef7fc6883b4840fc926712e13d874b722f6a79b16070c0311325e9a70fcd86916cfa1da7f9d0563a22fe9bfe854b0c186c8663b061b65bc071e839938d8fdd7cf8f6952a6467fad8e58490ed2b26813301\",\n        \"signed\": \"e0b867c9dbda35323433c046e0830c251b4346c5395972286b3a72310ed4526e545dc09d3918f2eb9920bc9b241e9050d848d3830288651591f936d3bae453019d622c206787694093c6f29f93619f21bb64c039416d20dc708a084a9d2e490cf5658e13d62cb0d21eab00e42d851bc6ec75daf405d2373246eea415e866291babf76497680aaf04425a42552b107d58cd18561c8c9483f740744cbfa6054c1b126f5a76659ac19dddad4ab5a09155d8c050b5354e06a4dd3ee3a6f9c91e8b4c7af2749664e7abe97061589e153c58e27cf299a25f2b530c060731ec0f4366bd1debeb4d4e912e76e508534d433ec48f96b62e150de93963a1b3e6c8091b495a96518ce3d3b9a8dbdc2a13fdd077f2231de8d76f56d9ab1c2f9efabce4638364f8fb2a2c683ca819b703ab453b11d37a69fa4bcb8023980834f7b902ad1819fc029212fdea0abf11dec88c55d68ef87a26dbb15dc3d3dfbcdddd5ed71be86f32c76ee2221d9243683df9516564b26bab5c845d4dfe0adcc7cb9fe1ee2c051af5908ce0cc3a90904dbc0d3680ed4992f46ce25c2ee851c414f0187d893e5c3b0189a7bb6893d683f5e3394cc046299a16a1c1b5695933a89bb13030855b81b3c74685f719de0160575a0ff0a91fd94347b8bcbe125d1d3f9ce772a8126e00f563b3189656d5522c187ab831a7ade7ac06fdcac7f1d45882e51f9bf5b44a2daba4a53dbb31970b4a0f1272fe14087e0c3c7e4542312fe74d767f21e7ea487d5284284f46f20f32c5b16e1e0ac8d796ab2f80b344e7a8d84d5de823a50897752dc549a48fc10bcd436a7a93e97cd05d7830138f323879680c343c16467d264d749bf45e40f39fbc3a00c43b00693b0156768ff2e3f8ad9eb6405022f5cada6694e8a33cdc59c6673c44117244eb03fd7fd675930c294edd2940f5f180953d910c55485b2057ae0c9302f4a8e831a5530e3cbbf6f472224083a952a8390ab00dc0f69dfd880eea2d739d218d6a66f237f10d4401aa758ff8120c0ae2766127849024f5a4cc574a5b02b935966812cd1fb6d79d0c4f59ff80f035a0b109cccb22fb08535b874149edf2a0970c14888427d07d1eafa684a6d3454e49b225184c6b993ec8ddb8b5a35ee45f87f69266d49096a317d86ade27f4529fe72364d0b958007299d9de87d6ff9fb04d573aea46bac8eb764752eb465caaaba689a6460c110730bdd08b1689de7b05de59af9fe244ac363e95c98b669359af9031a3a93ba631abf1f61d20ef7fc6883b4840fc926712e13d874b722f6a79b16070c0311325e9a70fcd86916cfa1da7f9d0563a22fe9bfe854b0c186c8663b061b65bc071e839938d8fdd7cf8f6952a6467fad8e58490ed2b26813301\",\n        \"signature\": \"e0b867c9dbda35323433c046e0830c251b4346c5395972286b3a72310ed4526e545dc09d3918f2eb9920bc9b241e9050d848d3830288651591f936d3bae45301\"\n    },\n    {\n        \"secret_key\": \"d2ededcd853206cbf59bd74a25a303fa2d6c3936bb48eb42f6d900cbe80772be\",\n        \"public_key\": \"2244111e2e769eab81871e06c580178c235c7bf4a52d2ecce11887a9b46c45c8\",\n        \"message\": \"8070bc0db089a5925446019b7e403c74ec78903e4bd54bc1d08a54a6f0ed75a85b763ff54dc33a2600ccb457fdbaeae548477f6d6947ae26deb71eacd1d2d62282a083843be4e5931d91c93b6282c58807ce8f0d880b1438dad8fdcba8612df73b9faff3a9f7db3005250536aabd98ae027a895e10b5cb7b69875c0f3993af245192f4393e9c4d3405746e311d3a91447fcdbd7306b6020c933bbab9e39d13491625035c9c636efa1739c3588710a879d9e3ce1764616f1082e8dff57559c3f5a5d76dd301124fa489fb949e9e039dd4621bda60f0b86b311e78ed0ab3b528965044b23d78ee2f81061f8edbd6929933d18c0207dec4b5b6b2fa4aca2747cf5b110df00b0c9827bdb3d9db2c7b0328d40d99e1f6b228e40dadae78aeda0289b6a23d4eb5837088e5d88413632ccc22e21a73768c673201e9a8d8dc6eb6f7397fedbd398d26f9692ca72f6d6cf056aaac50ac2f3b266dbe5e7be7a024774578ead585245daaa73e0aaf833c070ba4b2044ccb5e5cd16f9c0ad92ea8448055dd828c79935aa6c0741f9e2b810324fdc6e61e842f94572268bf7d5adfa7ab35b07fb19e7815a8aa5d81130130ac5cda8a4751ee76038c0a6bc2faba4c497e62b9f1f194b8a599b07701814b6dfb7d84bcdd5b7b5bc2249f1d3845eff9ef8cc7328535d70d53c7aa0c7305901de7c4ed2fe1838265d4a417b876adbd88eb933f27c9aa48c8c7e34e48147ccffb2fb61a348fea13ef67cdf2e039e33fd89e2c1ad2a4254e3bf748452aa83efeca46e780ede1d13ff4cc5e7d01ed45eb8c74818d4860af4759a83e148896ab68734395760e00146b793c3e72898aa0b3c5e0c1d3fdf12158d2e8ff1123a3a0c64cf6374a7f44f11a575e48a379181b30a4865cfd022aa983275635ce4f2cc40bfe066067ec4fe241fa047b55270a1ad0776c5f96861014cbf40a0432c559f22d79342b79f8e7042dccfb1cf50f83085f8063fb1887ed2dfc9db7efc96daa0ff2bc4f52335b02112d16392e134c0223de458fc072cc22bf9e7eabc06208180a57e7ce4805ee4e0fc015840998fd568644a0386b3d8e7dda52abf64f7dd00868fc84f036ca8a78e9ba8171ca90267c74e6159acac7af5bf23759abc53d82e793db87fdade1363354ffdcb0bd4cc9213f5c845445fc649b2a1f329f9d41d8a031ab46b472160f03434b4b6bc5a401524d6179ad66f9e221c9067fc87fe4a77e21e8023b6169ebf1090cd556a9be50b9187fe4607c5925e60b414f6a5cbf8afa15ed0eb34b67b4c9c5d54adbe640\",\n        \"signed\": \"be3c2b567fe8c208c98e7197117eb01b3c197bdfc858562dc5cd90f8e2c0357042303995baba2f40b7345c56db0b4625580aa8dcc48df6019d23a838ea7172028070bc0db089a5925446019b7e403c74ec78903e4bd54bc1d08a54a6f0ed75a85b763ff54dc33a2600ccb457fdbaeae548477f6d6947ae26deb71eacd1d2d62282a083843be4e5931d91c93b6282c58807ce8f0d880b1438dad8fdcba8612df73b9faff3a9f7db3005250536aabd98ae027a895e10b5cb7b69875c0f3993af245192f4393e9c4d3405746e311d3a91447fcdbd7306b6020c933bbab9e39d13491625035c9c636efa1739c3588710a879d9e3ce1764616f1082e8dff57559c3f5a5d76dd301124fa489fb949e9e039dd4621bda60f0b86b311e78ed0ab3b528965044b23d78ee2f81061f8edbd6929933d18c0207dec4b5b6b2fa4aca2747cf5b110df00b0c9827bdb3d9db2c7b0328d40d99e1f6b228e40dadae78aeda0289b6a23d4eb5837088e5d88413632ccc22e21a73768c673201e9a8d8dc6eb6f7397fedbd398d26f9692ca72f6d6cf056aaac50ac2f3b266dbe5e7be7a024774578ead585245daaa73e0aaf833c070ba4b2044ccb5e5cd16f9c0ad92ea8448055dd828c79935aa6c0741f9e2b810324fdc6e61e842f94572268bf7d5adfa7ab35b07fb19e7815a8aa5d81130130ac5cda8a4751ee76038c0a6bc2faba4c497e62b9f1f194b8a599b07701814b6dfb7d84bcdd5b7b5bc2249f1d3845eff9ef8cc7328535d70d53c7aa0c7305901de7c4ed2fe1838265d4a417b876adbd88eb933f27c9aa48c8c7e34e48147ccffb2fb61a348fea13ef67cdf2e039e33fd89e2c1ad2a4254e3bf748452aa83efeca46e780ede1d13ff4cc5e7d01ed45eb8c74818d4860af4759a83e148896ab68734395760e00146b793c3e72898aa0b3c5e0c1d3fdf12158d2e8ff1123a3a0c64cf6374a7f44f11a575e48a379181b30a4865cfd022aa983275635ce4f2cc40bfe066067ec4fe241fa047b55270a1ad0776c5f96861014cbf40a0432c559f22d79342b79f8e7042dccfb1cf50f83085f8063fb1887ed2dfc9db7efc96daa0ff2bc4f52335b02112d16392e134c0223de458fc072cc22bf9e7eabc06208180a57e7ce4805ee4e0fc015840998fd568644a0386b3d8e7dda52abf64f7dd00868fc84f036ca8a78e9ba8171ca90267c74e6159acac7af5bf23759abc53d82e793db87fdade1363354ffdcb0bd4cc9213f5c845445fc649b2a1f329f9d41d8a031ab46b472160f03434b4b6bc5a401524d6179ad66f9e221c9067fc87fe4a77e21e8023b6169ebf1090cd556a9be50b9187fe4607c5925e60b414f6a5cbf8afa15ed0eb34b67b4c9c5d54adbe640\",\n        \"signature\": \"be3c2b567fe8c208c98e7197117eb01b3c197bdfc858562dc5cd90f8e2c0357042303995baba2f40b7345c56db0b4625580aa8dcc48df6019d23a838ea717202\"\n    },\n    {\n        \"secret_key\": \"b569f7c1aadf56ed1b5fa1b6fad648d0dc544ff8fcd173780de41a7d4de60cb6\",\n        \"public_key\": \"9effa4aed9c658e4346071434468a0b8a04ecf7841699d63e8887ce205570cea\",\n        \"message\": \"7c5aa4dc8078aa77e8b3b7fee61084cfad764762f1ef26d8deb7f2f3b186dfc772487550197845fba2f4c23c835b9b58dd0b635c649135137f248f5ef713564de3c966efa5f6db6bea9e30970749f8e872d8d7ae4535b75e176ea0489b915f3471d827eb5b444586488cfc3fa6a45082dacb826495e50a3b5dc6bb930a331f30c385bc3b24ce70b89596db6bfb687d99a581987ca876ea0e757696b3fc03779a658130c410b344edacc4277d44845499d678e1414f15f36e166335189569cef3567ac2e3ab821c91c93274f5c28a5d1f7c1bf5099b10f84ecb13a4e4538f6649bf74f7394b703ef53649d81516cb1db521416065cf9f276ab80c9308897a27dfe37e5e142f1819b8d348df50a046a12888e3b7f2dcc70f5218d15ebb9aa7291a1a92ac445c51d3a53dd691efffcf5a01e876a72aa481eb4f121a072397d8cc93bbc2c9a6c28cc89b11ffc0e910d82d9d6298a367a0e1e3e8c865e4326a319b22666e529f1998f1b3c8efb5fc21cce97040fb6247daa0000ac5554d89e7b27159dd0b1800b760b79c91ef6e970b1e6c5ff42442b1b3ae4d3c439e08ec2f6b94177387ca5c01df6f07f8e34d25edbd49d8b74e31a5e65dec1f8760fa22c00e6fb1cd555be68b0ab43599f0b9f4a54a7ccb062683895d5ef66d24dfb1678cb0d0e8c801d8e5ffe79b9139fc96d118eb39b9c8d4404489325d45b4a3202beadca66f831c68efb815941581930ead29fd5f211b90e7a39f0d4ff48c62a545e28ac2ce29bedc356d92fc00347176d77623e0e1809eff3fe62b75a7d9deb727d86172d14edbf2789a57143c69925c917d433b4683b0693b3cd9e7e377996410727f5e6fb8f5ccd1860a20294ecf33faf97a1e0f85b761447d4761b96e4df1b312bd414cabcf498497b0ead67cd1e5901bbf3a16a8891ccced8a907df88726952d4ab370a6b7df2942cf13615a5bc12b4e106dc3013c68b8fb906399df15f1aa90d56aa974b1d2b28c1a8453b9bf0792a51c97ce8a12afc9341bb4c0c37b12dcb12c639449775d9ac5c2ec49673da5aaf7493ed5f1f2116eaef72bb7fb1e093ede2c26317f4f4b6ad585346205df91a6e96bc66d3064bce952398ffce88071ed9ff2750c65c0c304125ac2cadc4fef71a818732496a84ca574d482d5a3bba20e16dd2fa24d3270f6c60992f7f63e88f52eff6222998eb4416727384375f59f00e47512ee464c3184aceaff3ccfb06bd15c183c5e485926288b997bfaaaecf6ecbbf7d2abf4906df76b1277c5f5a87e6817b1c636e91efd7eccf64f\",\n        \"signed\": \"2e32ba0556bde974d7a19b3b9a1e92f183924c4b74c5d751b5ab3d007967016ec03afe91d742fb22b63e5e55b2fcb6c61a46e9dce7fe9fa30bbf66aef4b85f097c5aa4dc8078aa77e8b3b7fee61084cfad764762f1ef26d8deb7f2f3b186dfc772487550197845fba2f4c23c835b9b58dd0b635c649135137f248f5ef713564de3c966efa5f6db6bea9e30970749f8e872d8d7ae4535b75e176ea0489b915f3471d827eb5b444586488cfc3fa6a45082dacb826495e50a3b5dc6bb930a331f30c385bc3b24ce70b89596db6bfb687d99a581987ca876ea0e757696b3fc03779a658130c410b344edacc4277d44845499d678e1414f15f36e166335189569cef3567ac2e3ab821c91c93274f5c28a5d1f7c1bf5099b10f84ecb13a4e4538f6649bf74f7394b703ef53649d81516cb1db521416065cf9f276ab80c9308897a27dfe37e5e142f1819b8d348df50a046a12888e3b7f2dcc70f5218d15ebb9aa7291a1a92ac445c51d3a53dd691efffcf5a01e876a72aa481eb4f121a072397d8cc93bbc2c9a6c28cc89b11ffc0e910d82d9d6298a367a0e1e3e8c865e4326a319b22666e529f1998f1b3c8efb5fc21cce97040fb6247daa0000ac5554d89e7b27159dd0b1800b760b79c91ef6e970b1e6c5ff42442b1b3ae4d3c439e08ec2f6b94177387ca5c01df6f07f8e34d25edbd49d8b74e31a5e65dec1f8760fa22c00e6fb1cd555be68b0ab43599f0b9f4a54a7ccb062683895d5ef66d24dfb1678cb0d0e8c801d8e5ffe79b9139fc96d118eb39b9c8d4404489325d45b4a3202beadca66f831c68efb815941581930ead29fd5f211b90e7a39f0d4ff48c62a545e28ac2ce29bedc356d92fc00347176d77623e0e1809eff3fe62b75a7d9deb727d86172d14edbf2789a57143c69925c917d433b4683b0693b3cd9e7e377996410727f5e6fb8f5ccd1860a20294ecf33faf97a1e0f85b761447d4761b96e4df1b312bd414cabcf498497b0ead67cd1e5901bbf3a16a8891ccced8a907df88726952d4ab370a6b7df2942cf13615a5bc12b4e106dc3013c68b8fb906399df15f1aa90d56aa974b1d2b28c1a8453b9bf0792a51c97ce8a12afc9341bb4c0c37b12dcb12c639449775d9ac5c2ec49673da5aaf7493ed5f1f2116eaef72bb7fb1e093ede2c26317f4f4b6ad585346205df91a6e96bc66d3064bce952398ffce88071ed9ff2750c65c0c304125ac2cadc4fef71a818732496a84ca574d482d5a3bba20e16dd2fa24d3270f6c60992f7f63e88f52eff6222998eb4416727384375f59f00e47512ee464c3184aceaff3ccfb06bd15c183c5e485926288b997bfaaaecf6ecbbf7d2abf4906df76b1277c5f5a87e6817b1c636e91efd7eccf64f\",\n        \"signature\": \"2e32ba0556bde974d7a19b3b9a1e92f183924c4b74c5d751b5ab3d007967016ec03afe91d742fb22b63e5e55b2fcb6c61a46e9dce7fe9fa30bbf66aef4b85f09\"\n    },\n    {\n        \"secret_key\": \"323465d0313d1001a261abfd44fe65c38c9a00ca0f20335d6553de492699fc46\",\n        \"public_key\": \"e22f16bd4cc7e94c46ba31961af8c583f9d2718c68f73d85069f608e15ba8766\",\n        \"message\": \"bb1082e1cfdcd29bfca2464d5ce446b5ba654ba58c22538da926b8303cabfd284a7bd5994a786fa66aedf0e15f20c382cdacf3d14557ff7a8267fa04672cacab767008650aa9b4a7c9071c4799f1ffa45ca4d586e02047444c14231943467a3abaefa53959da226eb0c15392019760159697748293c025568783588a3910e78e5ea427c4407a8901061b8b992b82a2df58c04a1b2c5fad11c6b379856c2e0fef8a950de7e0fc22310309e08b132b0cce4fc1ecbf94574a388d4ae36675d3299a951554ebf180eb381e1b5df977d938433891bc478d7681850b9dc9c5c769d405f5d8839fc97361d6cb306c203026cf2e2b3d39849e1f4b1225eb25ef8acd40b006f20c644db650c75d38c0fcdd48f598c7b4a60106e69e19cd712589cedccf50864ea5f9e95e01f1dd85c7514f2c94b28359de4132b88c3ee1d10a80a9fadfb690e3d88641b3168f0b896af8990adbf0e4f8e9d3f9d4cd314e12c3bce0cc8738e0cfc1905be5efa071f710b32f8e5898c60eb1bb8feeb74000560f41cb2ebc32b2600b6980a2a4064dfaa3797ec44cfb72d379f8097379cad67ecdc0c32414fa41c72b1b9e4edf5518cb39fe9092b439af3a4ebd5afe79bedc0ea8bf17479a2821f5e9bd91d7f4aa5e384699523719b6957f82367cd85fea9ded6236a207c94cb373e3393cb4fe11f90a1b8779e4ab4c3466136bf21e2aab78f7d2726db6414fa5c4a3f7313ad2116a6d7ce40aaa1001c2704d5b05ae54c7cc6f567217f1a47bfd0ee738eaea5eadb5371075be076c8750aecefc417ea7bfdaac3cc38bf16cc26df7600e3c7e8e431f2676fc2a8c43a6a14368ba62bb32439a06beac38a047b3745e26f407ad823d6ad1c0b6a44341e15fc9b331214ffc89698211b05133d6d3433b5d59f7ab4d109e54e4c5d6f32fcf7230fa4e2528c861bb21ccc9e310e9497e077ea675510da712b1a5df575c5d1bf7362d071180039aecfaa5c8573c24c0f4ebe81c2f889aed3de5a000be12fe3d0af2dc2cd4240e314a176c553efd5cba798d9ff1e3d4bd9e90bb8113e3849d735afa4af6945cc57d4c378db84f206ef7eab11c637a7f7260f122a97dff6747e9b4c174ed0d64f9efd7fcccf981519ec580a8182547d17968c40151fdf6d54bc57a9115f040fab5c100deb039122b7d2bfd98b6adf38f42b296ea3b378a904259b75d60703b4840b3f5da09620a54776280e9ca9e8cd924aed2b5dd2b49834e581caed5271cd78ce08e4bba49b59cd77c1b6276649148ab7247f97fc0131635de474d3c23493ca98d\",\n        \"signed\": \"da3aadb34360b2da0c26542ea71defa8a0bf7fbdae3ee9e11c84084ad05cce7ba7d94de25d8563982616bcdb5bb6395fac4a7e84bc77e21ed36df75dec990b06bb1082e1cfdcd29bfca2464d5ce446b5ba654ba58c22538da926b8303cabfd284a7bd5994a786fa66aedf0e15f20c382cdacf3d14557ff7a8267fa04672cacab767008650aa9b4a7c9071c4799f1ffa45ca4d586e02047444c14231943467a3abaefa53959da226eb0c15392019760159697748293c025568783588a3910e78e5ea427c4407a8901061b8b992b82a2df58c04a1b2c5fad11c6b379856c2e0fef8a950de7e0fc22310309e08b132b0cce4fc1ecbf94574a388d4ae36675d3299a951554ebf180eb381e1b5df977d938433891bc478d7681850b9dc9c5c769d405f5d8839fc97361d6cb306c203026cf2e2b3d39849e1f4b1225eb25ef8acd40b006f20c644db650c75d38c0fcdd48f598c7b4a60106e69e19cd712589cedccf50864ea5f9e95e01f1dd85c7514f2c94b28359de4132b88c3ee1d10a80a9fadfb690e3d88641b3168f0b896af8990adbf0e4f8e9d3f9d4cd314e12c3bce0cc8738e0cfc1905be5efa071f710b32f8e5898c60eb1bb8feeb74000560f41cb2ebc32b2600b6980a2a4064dfaa3797ec44cfb72d379f8097379cad67ecdc0c32414fa41c72b1b9e4edf5518cb39fe9092b439af3a4ebd5afe79bedc0ea8bf17479a2821f5e9bd91d7f4aa5e384699523719b6957f82367cd85fea9ded6236a207c94cb373e3393cb4fe11f90a1b8779e4ab4c3466136bf21e2aab78f7d2726db6414fa5c4a3f7313ad2116a6d7ce40aaa1001c2704d5b05ae54c7cc6f567217f1a47bfd0ee738eaea5eadb5371075be076c8750aecefc417ea7bfdaac3cc38bf16cc26df7600e3c7e8e431f2676fc2a8c43a6a14368ba62bb32439a06beac38a047b3745e26f407ad823d6ad1c0b6a44341e15fc9b331214ffc89698211b05133d6d3433b5d59f7ab4d109e54e4c5d6f32fcf7230fa4e2528c861bb21ccc9e310e9497e077ea675510da712b1a5df575c5d1bf7362d071180039aecfaa5c8573c24c0f4ebe81c2f889aed3de5a000be12fe3d0af2dc2cd4240e314a176c553efd5cba798d9ff1e3d4bd9e90bb8113e3849d735afa4af6945cc57d4c378db84f206ef7eab11c637a7f7260f122a97dff6747e9b4c174ed0d64f9efd7fcccf981519ec580a8182547d17968c40151fdf6d54bc57a9115f040fab5c100deb039122b7d2bfd98b6adf38f42b296ea3b378a904259b75d60703b4840b3f5da09620a54776280e9ca9e8cd924aed2b5dd2b49834e581caed5271cd78ce08e4bba49b59cd77c1b6276649148ab7247f97fc0131635de474d3c23493ca98d\",\n        \"signature\": \"da3aadb34360b2da0c26542ea71defa8a0bf7fbdae3ee9e11c84084ad05cce7ba7d94de25d8563982616bcdb5bb6395fac4a7e84bc77e21ed36df75dec990b06\"\n    },\n    {\n        \"secret_key\": \"60ffdbae003fa2794fcabbf8f5b41644fe3a7f44ed6c834193da07a9dc5e2665\",\n        \"public_key\": \"35b5eb31ab556492578b3dbd6cf1687d1fdb216a725818079663482f221ce421\",\n        \"message\": \"3f8ff20bb4f00834c80f2ee6893d6f73bf7ace2729601bb26a0fb272a4d0eea1fae1d306ac2c5f32add60135851da27e4f12e64ea5e9e9960b1383b04ce05a98b0414dad971ea98944871d415cc2c46da403976d9f21938958d4ea8c7903b14f2a4485fd69afb24abe102d8fec266fb468b411eb20a339677d88eb31c997b4dc885613f0be7c70daf856a3df92da9602fba2e6749d2f426beef68662d5b0c2fd31321b22b5ec597da5d7e6a288ebd9443c5f39eb87dcf4a5ad9d56c6baf6080996a77936bd87dc3cb42ed4c4d42688a9e193829b761ff320e2a66cc67648e70eea3a1f2f9b9d5b4202fb5a39e9adc609086a9be2a8323ac66931bdf6c504d3336211e46fdefc481fbf17f613dab1fc5c097c92db0609906d78b25a455a3045718efd3e3b14e252b1ae59c7c3893e31913b2c264c0ffc3b606ca1b01dc47ee828a08e46af604e590def44d27aab93a403251fca0772e9df0fab7af0cbc5181efda4da913d8eb6452f6cecbda204bc72d7c990f60ce0dd83c634e912236091b0a6673a7c89ea59308d55bd7e63a8526774cbdd7a1339fac2124c9022abd6fece7f2daedfd87fa683dc0e3ef40806a0ab198769d3a99fe81a99b68600319087afa4ea79d7ee45da9cd40809f4ee8f4e25a0177521ee9dba8b56212e88719bb7367336f4a7bc7122b41a7dfaa2672f92f23403a10c4fb25388c6b20081093d49f3be8a9e1c634ef7ba96b6d523dd6ff613c0a23b60457026cd485ba8db61d80a0dc659d9af42a38cae777fec68e39c52986ff9fc20789c10585107c04047b66ba14e93fb904ea90df7ac9f0154c96f3236acf6dc8b44f554c0cd513193e5dfd87e085ad4b38aa4c5e36b2427722088816ecd2bc3a3dda01e4fb3ff5eec7a6417322ba6a27773d24495a839194a4a582fe5abdb8b5d533a24262589241fc81fdf5e79fd26776428f8e1ce9e926cf272716e7583abfc67a94aae0816c1000a196170bbff1f45e5ed9e267ace1e4d915dce7216c5f404def6fe2bd8b28b2eccf3e2aea0c0d6626390274e47e745ed3a23bcfd21d284c395379dc02080f07936bc154e7b99ee73db188bd2a394e03a01ffe2d1b330ceb72158f958c716a81711dbf65aff8cd12f5dfa53b376ebb8b98f8628f17ef8b2ab9c0bb68412f4e347a633e2f8da1a556d96f4af7211c078079c10541c07dc3722d18dab8fa8bc4925aba5c966f805040322dfbbbe87fbfeb1961f5ccd40a91b997e54315a7eefc3a47bb0c87dc23755ce7227574996f4be7aa344fe0d17b97bc50c5838f99292\",\n        \"signed\": \"b8f3e1f3785a2a39bb086ca465c0abf0a3e87443225ac6e966ed9b4531c54a894a9abd01ac31b85757fe75308c9594ff65f97cdd91e8d8a93cf12b9e6dbee90b3f8ff20bb4f00834c80f2ee6893d6f73bf7ace2729601bb26a0fb272a4d0eea1fae1d306ac2c5f32add60135851da27e4f12e64ea5e9e9960b1383b04ce05a98b0414dad971ea98944871d415cc2c46da403976d9f21938958d4ea8c7903b14f2a4485fd69afb24abe102d8fec266fb468b411eb20a339677d88eb31c997b4dc885613f0be7c70daf856a3df92da9602fba2e6749d2f426beef68662d5b0c2fd31321b22b5ec597da5d7e6a288ebd9443c5f39eb87dcf4a5ad9d56c6baf6080996a77936bd87dc3cb42ed4c4d42688a9e193829b761ff320e2a66cc67648e70eea3a1f2f9b9d5b4202fb5a39e9adc609086a9be2a8323ac66931bdf6c504d3336211e46fdefc481fbf17f613dab1fc5c097c92db0609906d78b25a455a3045718efd3e3b14e252b1ae59c7c3893e31913b2c264c0ffc3b606ca1b01dc47ee828a08e46af604e590def44d27aab93a403251fca0772e9df0fab7af0cbc5181efda4da913d8eb6452f6cecbda204bc72d7c990f60ce0dd83c634e912236091b0a6673a7c89ea59308d55bd7e63a8526774cbdd7a1339fac2124c9022abd6fece7f2daedfd87fa683dc0e3ef40806a0ab198769d3a99fe81a99b68600319087afa4ea79d7ee45da9cd40809f4ee8f4e25a0177521ee9dba8b56212e88719bb7367336f4a7bc7122b41a7dfaa2672f92f23403a10c4fb25388c6b20081093d49f3be8a9e1c634ef7ba96b6d523dd6ff613c0a23b60457026cd485ba8db61d80a0dc659d9af42a38cae777fec68e39c52986ff9fc20789c10585107c04047b66ba14e93fb904ea90df7ac9f0154c96f3236acf6dc8b44f554c0cd513193e5dfd87e085ad4b38aa4c5e36b2427722088816ecd2bc3a3dda01e4fb3ff5eec7a6417322ba6a27773d24495a839194a4a582fe5abdb8b5d533a24262589241fc81fdf5e79fd26776428f8e1ce9e926cf272716e7583abfc67a94aae0816c1000a196170bbff1f45e5ed9e267ace1e4d915dce7216c5f404def6fe2bd8b28b2eccf3e2aea0c0d6626390274e47e745ed3a23bcfd21d284c395379dc02080f07936bc154e7b99ee73db188bd2a394e03a01ffe2d1b330ceb72158f958c716a81711dbf65aff8cd12f5dfa53b376ebb8b98f8628f17ef8b2ab9c0bb68412f4e347a633e2f8da1a556d96f4af7211c078079c10541c07dc3722d18dab8fa8bc4925aba5c966f805040322dfbbbe87fbfeb1961f5ccd40a91b997e54315a7eefc3a47bb0c87dc23755ce7227574996f4be7aa344fe0d17b97bc50c5838f99292\",\n        \"signature\": \"b8f3e1f3785a2a39bb086ca465c0abf0a3e87443225ac6e966ed9b4531c54a894a9abd01ac31b85757fe75308c9594ff65f97cdd91e8d8a93cf12b9e6dbee90b\"\n    },\n    {\n        \"secret_key\": \"174e993d9b81f2af67e9ffb8ebd5da417966a9e77f66c65c767738fe8357d07c\",\n        \"public_key\": \"3bb7386f1b1cbfae553703833ebcbfe2dfff8c899a0792d7ce2322b5ba645a5f\",\n        \"message\": \"a401750afc4837dfe3aacc284a597145dfef02629ef87bd0938d443979df76f29fcd66a5b71ea8ab787277e3056f6ea11b08bd238979f9d3b062538c4d6040a86b6e32047aecc59c2377ad0ea4c40c79ff9fe98c958b2bf25f2fd6342432636f5f7d5bb0d2ecf18183426c73147984d95bbe162e11972ddb78a2a7c345c5c0bbbaba9cf38a2d5dd509a7df8b842874a96e64b5d64f5c41a21d208d14cea7066cf22dee0ca41aa46ab921d4ceec89ec873f77960eda60d9676cfd0dbfaec872c2ade8fba4285aacd527143ae0341d67d0078119653b5d23d46e6ef70264b1b0913870877623716d0f1a59021be74c914b432471a43a29f2b6dbeb6a223e2dbaabb820b4adbe337829e1de0c184dd0d09f9d01d42527e5d40abbdacc8ac0f1b2c5c1cb2f23876d2d1b6b43dfe482f9d45a18f5c22b15f1fe521ef57b08aec6a3033925c7454c93e6319e778ac494fb140ae5f1a31cc832ca2488651004063bcff8fd9ae9266af527f2c31f6acb8f3debd9978ef9df0108e3d50c491990c90dd8ee9d64ea4ebfd711c99d9044ec11342c5383ca39232ed97a07e4dc51db4c1fe947348dffe70a95c99db14751314801f13fa2bf42d867375a08ee9b3b799e0b15278e95e91a8968064d6dfd8f5115438ccb8b516ca0c41dbb19873c6e10a236ecc2dad522f80f01c14e2fa14a0d792b9fc486c6fb0efbdf2130f02df1497db5aba8be61ca70b29388e4eec7e0694a38c0d03c59bb6a2dc3ccd6dde1e29ee2c1b325ac72aa8e6fab9138f8b6f5d324d46af3a3542c8bd87cb04fafc54b5db827de606762a097b622799ca827bda9c1c0bb267eba8254a81c6b858a375b94bd09f39eeb88cb14b8d46e4740dc1ab42a895f86d2c57fc28b07b7f60fc4f8847b8bc8ad83a2481a28f29bca3510ff8bf1dd7581e3357164f4fe920f9de839376de064900dc7f8bcf511dc572e0f0f6a75b929797da41c52eae6fe13750ce351e8767630badf6d7d4eab90cd1904c96c048a9acb213a9e5b864615738a84f222986ac23554cf4ce54e80ab5733c065b80459921dd3d8372d0e8594d4364351bf041c146fa8d23a193eb807ece23f24ab6595e932c9ce1a759bf788914db008e87098dd81465e2610647ac38e088666f60ec5d0e2173320a40cd985f0e00dbc2b4570727483a8c25f6fc1e093bb57ccafd1ca202f2986c7c5540a7c3e10c4a6fc26d1d62c2ca5af8305ceebe42ff96e7dc548214375e8a7f9f712ba8bd875e43ca10cf9b183f0c8519512928538a478cb98259bd8b3e334bcc4635595cad3\",\n        \"signed\": \"e607bc9a5360b31da56be1c544c2000284951d8689f4b722bc4673a0c8489b84483ed8e76e297ea046e85b37ba5630585e5375566a187afb5696661e5bfdc10ea401750afc4837dfe3aacc284a597145dfef02629ef87bd0938d443979df76f29fcd66a5b71ea8ab787277e3056f6ea11b08bd238979f9d3b062538c4d6040a86b6e32047aecc59c2377ad0ea4c40c79ff9fe98c958b2bf25f2fd6342432636f5f7d5bb0d2ecf18183426c73147984d95bbe162e11972ddb78a2a7c345c5c0bbbaba9cf38a2d5dd509a7df8b842874a96e64b5d64f5c41a21d208d14cea7066cf22dee0ca41aa46ab921d4ceec89ec873f77960eda60d9676cfd0dbfaec872c2ade8fba4285aacd527143ae0341d67d0078119653b5d23d46e6ef70264b1b0913870877623716d0f1a59021be74c914b432471a43a29f2b6dbeb6a223e2dbaabb820b4adbe337829e1de0c184dd0d09f9d01d42527e5d40abbdacc8ac0f1b2c5c1cb2f23876d2d1b6b43dfe482f9d45a18f5c22b15f1fe521ef57b08aec6a3033925c7454c93e6319e778ac494fb140ae5f1a31cc832ca2488651004063bcff8fd9ae9266af527f2c31f6acb8f3debd9978ef9df0108e3d50c491990c90dd8ee9d64ea4ebfd711c99d9044ec11342c5383ca39232ed97a07e4dc51db4c1fe947348dffe70a95c99db14751314801f13fa2bf42d867375a08ee9b3b799e0b15278e95e91a8968064d6dfd8f5115438ccb8b516ca0c41dbb19873c6e10a236ecc2dad522f80f01c14e2fa14a0d792b9fc486c6fb0efbdf2130f02df1497db5aba8be61ca70b29388e4eec7e0694a38c0d03c59bb6a2dc3ccd6dde1e29ee2c1b325ac72aa8e6fab9138f8b6f5d324d46af3a3542c8bd87cb04fafc54b5db827de606762a097b622799ca827bda9c1c0bb267eba8254a81c6b858a375b94bd09f39eeb88cb14b8d46e4740dc1ab42a895f86d2c57fc28b07b7f60fc4f8847b8bc8ad83a2481a28f29bca3510ff8bf1dd7581e3357164f4fe920f9de839376de064900dc7f8bcf511dc572e0f0f6a75b929797da41c52eae6fe13750ce351e8767630badf6d7d4eab90cd1904c96c048a9acb213a9e5b864615738a84f222986ac23554cf4ce54e80ab5733c065b80459921dd3d8372d0e8594d4364351bf041c146fa8d23a193eb807ece23f24ab6595e932c9ce1a759bf788914db008e87098dd81465e2610647ac38e088666f60ec5d0e2173320a40cd985f0e00dbc2b4570727483a8c25f6fc1e093bb57ccafd1ca202f2986c7c5540a7c3e10c4a6fc26d1d62c2ca5af8305ceebe42ff96e7dc548214375e8a7f9f712ba8bd875e43ca10cf9b183f0c8519512928538a478cb98259bd8b3e334bcc4635595cad3\",\n        \"signature\": \"e607bc9a5360b31da56be1c544c2000284951d8689f4b722bc4673a0c8489b84483ed8e76e297ea046e85b37ba5630585e5375566a187afb5696661e5bfdc10e\"\n    },\n    {\n        \"secret_key\": \"e53715fec9d3b20e9c2991e54b5eb0a8cc81875569c95e22a200136002176004\",\n        \"public_key\": \"5351899b69b2116bc7f8a8814d1e5b9fc785698bebd9ab14277c3ecc01ef8b1d\",\n        \"message\": \"8431cd16d5c093775e18c08252c43f95b1017eb711fcaf73e1e00c0cd6f3448744ab9b0e64335518c483ae94deb97677f818f0e81a7490615b7141b9c35f80556e6971cea28e9a32c328cc2669fca5b123cb662debab2b98157764668070e18edf761ae196bd4b244fea7b74984516be2c00739e76e6c4b621cb3983765a20d84778d5a4350b168f6a0f712a9820a85a636faf92c789c428cfd2962ed207c3ac8899c258cac1adb5159f764ba37229c5cbf783fc9aa4d1ea46ecc85fe0961485d4fc5cb21df0012ac9b955373b1422e51afa1c550988862c86133b760aa630fc0acee8989117d1dd96e3e6287b69287c590bdca9cbc8eecef281ee6d1c8d88822bfea5fa0f530f23278093c7c85a0d44c3a77404ee79f1c8368cd7321bf148fda4dcf2eb07e4630ea422587586371780514536b894c524e6b83d5a76a15c83e95ab314e07b34b98cd99e0770b4eb9b3f3f505bae8a06f7f950258d790748107195eb4f6b84840f8c0590727396ed14e3f53239476c4d2a7269b2e1f972fbff33e4724426745ec886a32916295e70d468d06c7dbb5ff9a354e1ac903bb45ca526f08b49a65e82297d8dd3fb25aa428f64345bca9740d9078dac9e1138c921bdd74881673d49d0cd2006811723de287c6c9583e456a01ab1a34dfa1eaa963b71e8bc7fa8a98cad4f941e4b37b60eef923b3294882350b38ea4eac0e9232e93c532db5d7eec8ecfae65e080473078777ddfdd11508a6e59f0ebaa3f60441f82a71a73c84bca06a371ff5c9f77213a2db795d4a8897823d88fd92ae3e057e8bbd80c990af8386bdf26f12d973c8c5ff9ed6f7b2d8e6183cf6e68f3bb898f59a93ec4de3bea605a5d8b15dfab713f3585c48dc9a5768242b33101438030e7044880d17c2ee84f89d26a1f7b1986193f9663c587d50ca9ddf6186a5176afef1adb2481b79254b78d3b34c69790eb28b90b1461170c3d73818376cdf371af0a0feaf14fdf7016ed6e7f08c0c14b52705c86d4f0003b5e45f974c06416ccb5ca3e9d529aa9d415c25a446fa2d69e82f4994e57e922c17c1c342dd7281e410052d9e4aa1b309b7d470d458c663e17ff2500d0bb8e46a9c4367e091caf87ddfc062aae08a65cb9e0eaa71c99459c5e7cb112a2ee98a5e4cbee0dc520f87c3022da6549be1ee70a0a73ad8499c97dd06aa14c9fd8628a92ca6db487322db9598ada1fce28f4b9fc1d3cc39dcf2ed1df3d862d87f55cc1016fb9e73e7cc897b970d5ff35acfeb05c1c89192808aeebfb2cd17cb1c94fab059898fedc2fbd44ccef\",\n        \"signed\": \"3d0adce77a4e046fcb9b49ad5e6c6809c8ac336c733404e5d3f015c9225c3df46ef21ea34cffb3af69974f8b7eab2d23fcd5a1e1753a4023deb3818629a98a0b8431cd16d5c093775e18c08252c43f95b1017eb711fcaf73e1e00c0cd6f3448744ab9b0e64335518c483ae94deb97677f818f0e81a7490615b7141b9c35f80556e6971cea28e9a32c328cc2669fca5b123cb662debab2b98157764668070e18edf761ae196bd4b244fea7b74984516be2c00739e76e6c4b621cb3983765a20d84778d5a4350b168f6a0f712a9820a85a636faf92c789c428cfd2962ed207c3ac8899c258cac1adb5159f764ba37229c5cbf783fc9aa4d1ea46ecc85fe0961485d4fc5cb21df0012ac9b955373b1422e51afa1c550988862c86133b760aa630fc0acee8989117d1dd96e3e6287b69287c590bdca9cbc8eecef281ee6d1c8d88822bfea5fa0f530f23278093c7c85a0d44c3a77404ee79f1c8368cd7321bf148fda4dcf2eb07e4630ea422587586371780514536b894c524e6b83d5a76a15c83e95ab314e07b34b98cd99e0770b4eb9b3f3f505bae8a06f7f950258d790748107195eb4f6b84840f8c0590727396ed14e3f53239476c4d2a7269b2e1f972fbff33e4724426745ec886a32916295e70d468d06c7dbb5ff9a354e1ac903bb45ca526f08b49a65e82297d8dd3fb25aa428f64345bca9740d9078dac9e1138c921bdd74881673d49d0cd2006811723de287c6c9583e456a01ab1a34dfa1eaa963b71e8bc7fa8a98cad4f941e4b37b60eef923b3294882350b38ea4eac0e9232e93c532db5d7eec8ecfae65e080473078777ddfdd11508a6e59f0ebaa3f60441f82a71a73c84bca06a371ff5c9f77213a2db795d4a8897823d88fd92ae3e057e8bbd80c990af8386bdf26f12d973c8c5ff9ed6f7b2d8e6183cf6e68f3bb898f59a93ec4de3bea605a5d8b15dfab713f3585c48dc9a5768242b33101438030e7044880d17c2ee84f89d26a1f7b1986193f9663c587d50ca9ddf6186a5176afef1adb2481b79254b78d3b34c69790eb28b90b1461170c3d73818376cdf371af0a0feaf14fdf7016ed6e7f08c0c14b52705c86d4f0003b5e45f974c06416ccb5ca3e9d529aa9d415c25a446fa2d69e82f4994e57e922c17c1c342dd7281e410052d9e4aa1b309b7d470d458c663e17ff2500d0bb8e46a9c4367e091caf87ddfc062aae08a65cb9e0eaa71c99459c5e7cb112a2ee98a5e4cbee0dc520f87c3022da6549be1ee70a0a73ad8499c97dd06aa14c9fd8628a92ca6db487322db9598ada1fce28f4b9fc1d3cc39dcf2ed1df3d862d87f55cc1016fb9e73e7cc897b970d5ff35acfeb05c1c89192808aeebfb2cd17cb1c94fab059898fedc2fbd44ccef\",\n        \"signature\": \"3d0adce77a4e046fcb9b49ad5e6c6809c8ac336c733404e5d3f015c9225c3df46ef21ea34cffb3af69974f8b7eab2d23fcd5a1e1753a4023deb3818629a98a0b\"\n    },\n    {\n        \"secret_key\": \"abfd697bfbc5b6ff2bdff3bce1d777e05fbe3ec8b95ce693d623931209313d4f\",\n        \"public_key\": \"a709321a0210cb80ab58bf955ecdeb8aaf9ee4c375f959c53089d437488c082d\",\n        \"message\": \"896b7ab8413ffe439a2f4487ec49d64e31c74f50ac83f55da61a7003aa716c2a9df6b438e62f53d8f0192f3736324760d7e8c44ac0baca3ae2a6fb93f13d96886799fd2c4551b0ab36f1730855551265a5a3c3c21d9516a237f5dbc1c8e72999b782c5ca41a4f6e9308e64afdee0bf479e546b89c51bc5e4f71e57fb24ce437a8b81b91dc798b5ab36f29afd5b48e81c176ae5edf95371ba3246fb439405bd10eed3678e3ec62307a3b3dc1badba051f16774b85088188c2a9e320a1618d5f26ce94ee2b933c305f6d9584958eea3156c3d1e0ef39a186275ee62c40f3c1acd15d8be6e074351f5349ce3df69517505f45fa06a815c69ca18f450f42b5cf4ebd99268445e0f68104a7deeb0a115b817b99e1a73e0fa9d87db71f8ec94f8708c9bc2e622b963365ebcfb97cfe7332630070e9654eaa60361a45d402dc0ab297665242667fbd9940f6cd33195246a8c2869af759a862d4b641db144d5732366b20636c4027787f558027d76fcbf8432eb93e6d14567df8dbf211daeb5655db10acddd05eca06accee9fda8d3b70ca1e6dc587fa4b78f63cd663ff0243870570f4dcbaa3fb626b4e113bde47d5c9db2b4ba6ec6dbf918ac056949ef3cfcb115561615771a035a43d33ba2651dbeb46348261ce3c4c9f246d23f94dbc2d0c19b921e24c77da5992f1b4bdf2edea499f5411168ac0c12e96f3b15d2e12ac8d7b3ed8d1e07c4267a25d3a3c353a4208b7406278aab9e700f7b206f48e6ea7cc97e554f15c9be349dd91514dbe8d889f2dcbbfa182c9faf5807a69b2e97fa771a6f231a4c7b31d117b8ed0e630cdf13e082bb4f63c3f9acb3553204ccd76e1835c46eec3d43c561bbf17c92214a6db1212b6003cf2cc26c7ae675fcd053b947e722f9e85762ce8a16e4654ec6342fc646e5cab472797eabf658ba4afd142fc8fc4c8f98f23c24dc99847ae8cef0879e1ab3bb8097e4c3529add2d8e8e2c2069210f50ace1ae32a6c8e6384a2bf7d79c66c746149c84ad75a3a176e45e136d94695aed4bfd08b426ea8c4b9379f3742550e1cf5ac84c18174d680e92af2c1874ac1c13d28232de193768e561947cbd6b79e9b99da65cfb74ffb32f7d3d2025c60763dc07f55539b4d253de1e6c25823a6258c7a9ced1501dce2786898a3e05c9bff8fc5b2125d0f471088a134b4873c8d55c0445f6ca396b3d7b4bc2bf5c4d2240da418293af6a3ed853dedd3bf668d937b35aa0c2acbf23766f9f3e96828475ab086496617a6e81d653589b2fe50b7ba8f0cf1e5a44d8d62f08377abfc26297\",\n        \"signed\": \"8c36b5a111c5a8119f2d9db57ebb592dae86ad4bf678c1492e26f3c10fbe03f105cae0dc68b55259b9b5989289db33d95d2ee6b756c760f9d3aa0e68a189de02896b7ab8413ffe439a2f4487ec49d64e31c74f50ac83f55da61a7003aa716c2a9df6b438e62f53d8f0192f3736324760d7e8c44ac0baca3ae2a6fb93f13d96886799fd2c4551b0ab36f1730855551265a5a3c3c21d9516a237f5dbc1c8e72999b782c5ca41a4f6e9308e64afdee0bf479e546b89c51bc5e4f71e57fb24ce437a8b81b91dc798b5ab36f29afd5b48e81c176ae5edf95371ba3246fb439405bd10eed3678e3ec62307a3b3dc1badba051f16774b85088188c2a9e320a1618d5f26ce94ee2b933c305f6d9584958eea3156c3d1e0ef39a186275ee62c40f3c1acd15d8be6e074351f5349ce3df69517505f45fa06a815c69ca18f450f42b5cf4ebd99268445e0f68104a7deeb0a115b817b99e1a73e0fa9d87db71f8ec94f8708c9bc2e622b963365ebcfb97cfe7332630070e9654eaa60361a45d402dc0ab297665242667fbd9940f6cd33195246a8c2869af759a862d4b641db144d5732366b20636c4027787f558027d76fcbf8432eb93e6d14567df8dbf211daeb5655db10acddd05eca06accee9fda8d3b70ca1e6dc587fa4b78f63cd663ff0243870570f4dcbaa3fb626b4e113bde47d5c9db2b4ba6ec6dbf918ac056949ef3cfcb115561615771a035a43d33ba2651dbeb46348261ce3c4c9f246d23f94dbc2d0c19b921e24c77da5992f1b4bdf2edea499f5411168ac0c12e96f3b15d2e12ac8d7b3ed8d1e07c4267a25d3a3c353a4208b7406278aab9e700f7b206f48e6ea7cc97e554f15c9be349dd91514dbe8d889f2dcbbfa182c9faf5807a69b2e97fa771a6f231a4c7b31d117b8ed0e630cdf13e082bb4f63c3f9acb3553204ccd76e1835c46eec3d43c561bbf17c92214a6db1212b6003cf2cc26c7ae675fcd053b947e722f9e85762ce8a16e4654ec6342fc646e5cab472797eabf658ba4afd142fc8fc4c8f98f23c24dc99847ae8cef0879e1ab3bb8097e4c3529add2d8e8e2c2069210f50ace1ae32a6c8e6384a2bf7d79c66c746149c84ad75a3a176e45e136d94695aed4bfd08b426ea8c4b9379f3742550e1cf5ac84c18174d680e92af2c1874ac1c13d28232de193768e561947cbd6b79e9b99da65cfb74ffb32f7d3d2025c60763dc07f55539b4d253de1e6c25823a6258c7a9ced1501dce2786898a3e05c9bff8fc5b2125d0f471088a134b4873c8d55c0445f6ca396b3d7b4bc2bf5c4d2240da418293af6a3ed853dedd3bf668d937b35aa0c2acbf23766f9f3e96828475ab086496617a6e81d653589b2fe50b7ba8f0cf1e5a44d8d62f08377abfc26297\",\n        \"signature\": \"8c36b5a111c5a8119f2d9db57ebb592dae86ad4bf678c1492e26f3c10fbe03f105cae0dc68b55259b9b5989289db33d95d2ee6b756c760f9d3aa0e68a189de02\"\n    },\n    {\n        \"secret_key\": \"dcfad59fc6b697109e727ff66a5fe93a6a226f631a64e5797ad8d8c8b6358734\",\n        \"public_key\": \"e79f4f511372e355e7e9e0e8b5346fdbcd2df1fc5c3a1890d27fa1fa928d27a6\",\n        \"message\": \"7d92ddd8133c61c610c1308c23aeaf993884a4e67f7b94bb886dad509869a932ec4a27d410d2c29ca7aeae6f9280cf6c4b067ec751e5e8c39ff444d422ceabae145d42f047453dd402d1797405033409e72cc19f793d5d268fb3fd2c11ea2cb0d70436e18f9e88a01515dc865f6a1eb23690328fd75de26321a38f12197a97201b1d8452944fbc541cb68c77d49515db5326f2b1d0763eda06d250ce2a5e0bbd7d1676d7d41fb3abe88bdbe372f96bf7bb526d6b65a2515e83a577045b5479b38b852fe4ab011cbf21c085ef5f0a7c1bed76572b0f860228067a899f895ae7f6256eb6514087f9d6f5c35596c1f480c73113546cb9cc30f56ab074a9ff28acab7e42650a961da325ac5b6594b81c93250ae7d39267a19c97625407edda0404cbe5a36e959fc820b27ef5cad796c11eaff1c0e2f9d4b3c6491502195de03659b364e4e87b2b2d733ec25e6f9b63d5f69179e0d27bd4aecc8f12a507a91baa48d99b3a426cecebaef37d7361106a8490644309f6eb4d2596443b6b0118b945acecc6443ea61fcd155b54325bc2c31be0250f9482e13fd8eb44e2aed76be812af5453cb7f8632458fc8a02a2f45480d79b06c7dda38b4695d08b5a430504f1ae2275b05c91e799d4470f38abe77736dfa895c197ea4b63c2df18efeb14184837b8ddf48909520d91045b9d9655c225a83173960b4d7cd0d8bae30237557f869708be138ad5246c866c6c059dc597abfd4943237376896736b97b7e0289ef9bbd29477745cb60f46202f1de984f509b1808833f58018cde8c26bef4c005bdca385b05735110ca02e562b50eddff6fde9fbb8d030cedf7031bbeb32b12b242be49fde0160c1fbde99b03c062a1a47062345c92e0b604d080facce9243481529c70597dfd64382cb540691b59b71b094332baf0bbb125b63a446bb97491c0464328cabd7627c46f392f3b124822f2013c6e16d3ca87cc5becf56b0fc6eb2bf9923b3012ba2b61250a633a4d2ee391256c520957382aff970c5d22385c3344c6d4b4561571c96329bf75615297516b9f2ceb9f997a39523aa0f58b488772d82fc0d78c5dd52ecfa6bfac63a76e148088b36f24a88e68385496ddadf3023f72d87c2efa26e877d32f1da97cdb42c8f15718988e428cd02f4d09543bd0bd5b2f409963d0fa373531f78b592bd137eeaea0b4e7f918208e1d59008a8af5058f5d923c4f32df19990f10dd3f0eb206293b2b3443f4a5d2dcc5f7d3bbaf6af43fe45f5dbbe53ecf4bf1b4a13e2d46ef80298d4f01c402e210fcb9ff2084ec03e42008d\",\n        \"signed\": \"052ff79540737456c6a42c41c97d6bf517b8cf289bc78b503dee6a30ef5168b38f75beaca1e14d971f8773e3941bd6df5cb9778dea125a4c4fe0116b70ee840b7d92ddd8133c61c610c1308c23aeaf993884a4e67f7b94bb886dad509869a932ec4a27d410d2c29ca7aeae6f9280cf6c4b067ec751e5e8c39ff444d422ceabae145d42f047453dd402d1797405033409e72cc19f793d5d268fb3fd2c11ea2cb0d70436e18f9e88a01515dc865f6a1eb23690328fd75de26321a38f12197a97201b1d8452944fbc541cb68c77d49515db5326f2b1d0763eda06d250ce2a5e0bbd7d1676d7d41fb3abe88bdbe372f96bf7bb526d6b65a2515e83a577045b5479b38b852fe4ab011cbf21c085ef5f0a7c1bed76572b0f860228067a899f895ae7f6256eb6514087f9d6f5c35596c1f480c73113546cb9cc30f56ab074a9ff28acab7e42650a961da325ac5b6594b81c93250ae7d39267a19c97625407edda0404cbe5a36e959fc820b27ef5cad796c11eaff1c0e2f9d4b3c6491502195de03659b364e4e87b2b2d733ec25e6f9b63d5f69179e0d27bd4aecc8f12a507a91baa48d99b3a426cecebaef37d7361106a8490644309f6eb4d2596443b6b0118b945acecc6443ea61fcd155b54325bc2c31be0250f9482e13fd8eb44e2aed76be812af5453cb7f8632458fc8a02a2f45480d79b06c7dda38b4695d08b5a430504f1ae2275b05c91e799d4470f38abe77736dfa895c197ea4b63c2df18efeb14184837b8ddf48909520d91045b9d9655c225a83173960b4d7cd0d8bae30237557f869708be138ad5246c866c6c059dc597abfd4943237376896736b97b7e0289ef9bbd29477745cb60f46202f1de984f509b1808833f58018cde8c26bef4c005bdca385b05735110ca02e562b50eddff6fde9fbb8d030cedf7031bbeb32b12b242be49fde0160c1fbde99b03c062a1a47062345c92e0b604d080facce9243481529c70597dfd64382cb540691b59b71b094332baf0bbb125b63a446bb97491c0464328cabd7627c46f392f3b124822f2013c6e16d3ca87cc5becf56b0fc6eb2bf9923b3012ba2b61250a633a4d2ee391256c520957382aff970c5d22385c3344c6d4b4561571c96329bf75615297516b9f2ceb9f997a39523aa0f58b488772d82fc0d78c5dd52ecfa6bfac63a76e148088b36f24a88e68385496ddadf3023f72d87c2efa26e877d32f1da97cdb42c8f15718988e428cd02f4d09543bd0bd5b2f409963d0fa373531f78b592bd137eeaea0b4e7f918208e1d59008a8af5058f5d923c4f32df19990f10dd3f0eb206293b2b3443f4a5d2dcc5f7d3bbaf6af43fe45f5dbbe53ecf4bf1b4a13e2d46ef80298d4f01c402e210fcb9ff2084ec03e42008d\",\n        \"signature\": \"052ff79540737456c6a42c41c97d6bf517b8cf289bc78b503dee6a30ef5168b38f75beaca1e14d971f8773e3941bd6df5cb9778dea125a4c4fe0116b70ee840b\"\n    },\n    {\n        \"secret_key\": \"696dc481f619a9498563c83d0d0e55565c14a07845fe4a66aba2247b113ff8ef\",\n        \"public_key\": \"c9d737abc4a9e73c149eadc195a837899f2cd5019373c30ecaf62e5f8e14b645\",\n        \"message\": \"2d4b3ad0cc99f983e41f9b48c4a818eff75fcfb93a1229ec2740ed19c107d621df78058de7c2dd7251f5ff454340865f6c86da65831f6672db231726fdfe4b9ee315d93c7244a920df37054c82449d310f892932ddbad94cc9bb39ac8937cc76c96521d3fdc028ba23410b29023e8138fd3f524319884ee5dad0d234c8df661f8824be477e21699f6369b15ff3ffefc151aa555b3c3d76adb45f25672d380d472b3148dabdef4245b68e828562f25cc5b81d9bbb241bca9d1934ea353f95f7dbf3646433e81a354e1e2056b81c15aa1fa8ed7a9d1af99238cd5a5ae9e841c48dc348ae1de7c41aca23328236bc38b47f47c736b257a3078d57d574b647a7fc8c4d01bc50302150d5032bfacb04bb0fd155d94d9206667720e180a645af462459e3326d460da3c48e7572678e1919268d3e4740d62a26f7c8559c1c439b4b0b0c5942a620cfdb93cc68aa15520ff2864269d7a0c155780adc6c188e0b565fb9594319e6f51d15caf6b280e7158f25799407f3ba0dd1ceea64b9326d2cfdef017e1f172f4dde0f7e4613501af01ee0ac30095f48b59590902b1aecfe093413918d835adf962ecf18580d16f9fd4f6fa1098af1d8a2bc24dc86f71d0a61ff150010867d086987b51dd030f50ab6e374b8e01184b3e2b214ab1c7fdfaedbc545e38c3cd2f6982979541fe0ff88bed67506da95727af1a2038f3240ae5bfd30ee09210e00fdcf2a064d5db4614946bda972c670081a6ee6a10b63f673c83c915ca5573e0ed687b0067c400792a9bcc3344e0e43f5df63fed5efa85e9aaf85e4d7a2c53a6c92828e07fe63e2d23f1bdf97d84adc36e9fc95faadf03e06d65a19c5e285effd0ea0cfa839d55a0a0dbf6da28785c77f5c04bfd59974ef3793cdc398df7a1bbc9cfcfc3a51ffa9a20d60c47b245dafa3e44623cd711d7762c50a67d650c7e8c4fd3bebc0c498d2152ab9827c700c7b2861565749b5864fec95b7f6b1994e78d8f85d069cc11f85bed9712f7a9f060b0bf67532e88eb9df3eb4a8d2fbbaa85eda926d81c49fb86e73731b7ed2a1905078513f7ca0fdcc3b1d576e6a60124c44618df1890e169794956cb1ec501ba2049970c8e74cc180064c184468be4f089a3ae2263c855863b62c28313ddf9ca85bf66b08a264155ad7c328238dfe614a07ede9155a09ccaff92292249341baedcbe0e6466e2c76045e46dad2fc899a1782e00998e79a83abfae9b706f707f58e730203e1d2cca028c922beb6d157fa7a98132a921a3da21f2f769bb6c1f5f19e9e85a13b781af141039d514ee107\",\n        \"signed\": \"ded5d991935cd1f9390f1e85929ca16dabfc83e65e43272eb1751671aa31930c728555341430ce7c80485de58006427129a4d34fd681d52d840a16bafa1530022d4b3ad0cc99f983e41f9b48c4a818eff75fcfb93a1229ec2740ed19c107d621df78058de7c2dd7251f5ff454340865f6c86da65831f6672db231726fdfe4b9ee315d93c7244a920df37054c82449d310f892932ddbad94cc9bb39ac8937cc76c96521d3fdc028ba23410b29023e8138fd3f524319884ee5dad0d234c8df661f8824be477e21699f6369b15ff3ffefc151aa555b3c3d76adb45f25672d380d472b3148dabdef4245b68e828562f25cc5b81d9bbb241bca9d1934ea353f95f7dbf3646433e81a354e1e2056b81c15aa1fa8ed7a9d1af99238cd5a5ae9e841c48dc348ae1de7c41aca23328236bc38b47f47c736b257a3078d57d574b647a7fc8c4d01bc50302150d5032bfacb04bb0fd155d94d9206667720e180a645af462459e3326d460da3c48e7572678e1919268d3e4740d62a26f7c8559c1c439b4b0b0c5942a620cfdb93cc68aa15520ff2864269d7a0c155780adc6c188e0b565fb9594319e6f51d15caf6b280e7158f25799407f3ba0dd1ceea64b9326d2cfdef017e1f172f4dde0f7e4613501af01ee0ac30095f48b59590902b1aecfe093413918d835adf962ecf18580d16f9fd4f6fa1098af1d8a2bc24dc86f71d0a61ff150010867d086987b51dd030f50ab6e374b8e01184b3e2b214ab1c7fdfaedbc545e38c3cd2f6982979541fe0ff88bed67506da95727af1a2038f3240ae5bfd30ee09210e00fdcf2a064d5db4614946bda972c670081a6ee6a10b63f673c83c915ca5573e0ed687b0067c400792a9bcc3344e0e43f5df63fed5efa85e9aaf85e4d7a2c53a6c92828e07fe63e2d23f1bdf97d84adc36e9fc95faadf03e06d65a19c5e285effd0ea0cfa839d55a0a0dbf6da28785c77f5c04bfd59974ef3793cdc398df7a1bbc9cfcfc3a51ffa9a20d60c47b245dafa3e44623cd711d7762c50a67d650c7e8c4fd3bebc0c498d2152ab9827c700c7b2861565749b5864fec95b7f6b1994e78d8f85d069cc11f85bed9712f7a9f060b0bf67532e88eb9df3eb4a8d2fbbaa85eda926d81c49fb86e73731b7ed2a1905078513f7ca0fdcc3b1d576e6a60124c44618df1890e169794956cb1ec501ba2049970c8e74cc180064c184468be4f089a3ae2263c855863b62c28313ddf9ca85bf66b08a264155ad7c328238dfe614a07ede9155a09ccaff92292249341baedcbe0e6466e2c76045e46dad2fc899a1782e00998e79a83abfae9b706f707f58e730203e1d2cca028c922beb6d157fa7a98132a921a3da21f2f769bb6c1f5f19e9e85a13b781af141039d514ee107\",\n        \"signature\": \"ded5d991935cd1f9390f1e85929ca16dabfc83e65e43272eb1751671aa31930c728555341430ce7c80485de58006427129a4d34fd681d52d840a16bafa153002\"\n    },\n    {\n        \"secret_key\": \"f3f8d62fee3af375669630cbf063bfa930189af136cd7591e24d578d7366bf61\",\n        \"public_key\": \"4714c604aa95e1828a28367ba78760b5896431683ee996cff96871773291953c\",\n        \"message\": \"e1dd1ffd737ac6dc24b3b9ce3b79e835bf698e931303d809cea1782dc3af63a0d5e67392823d1439e7b6e337b01c8b215434c2782b3be7443cb5c881e5fb6cf3bb244128b4da6a6f42b2bb2cd75129d56418854348c339dcd912b45557a915e9fd7f37916236510cb6c331c140b87d225311600b8d132ac47473839c720f9ff0f9c1dcaa85815a9d27b9758cd91dc5d3e53326fcdfb2730e52be3103957ac89149a4c3004cb6038c0d80fa72ac630d333be5ad4adb585aeb71aef1cdfd57b915fac4f1af78e7a597f8d1ba06672b19c0b65808a8a071ff8409034379589f3d41302d2d39b3318e8c0090fa36cb958857ff5b211c9666e27bc895ab9d006abaf5950a03ff17ea982178a446dda2466f5a40b8f895509e4f4d4a6a2739997fbd4968f89436cee3d8edb8a6da9bd3d55b066490e8339c78935b77883f95b932fa5e6bb7df303be30fa567249fffb473a1e464322d7c103fe8224c7ec57bd39bcd030b96787aebcd20e9ad651cfa2bf04ba70a1cf648e0a5449567202a937a45becbb6fcded30cf9b5c748f882b5dc2a4d65be69fd7d9c381e83d0dc2a34b6dee91220ba906e512fcd63368e2ce733e466b4b82b84fb0c717dc8945caf6d46ac1c2f6418f7729ef4c35e402422d64b1c3ebd1b32a30fc4c5eece7d4408ff679ff01a1c7b03ca517be52e6ae7650f7bad38901e348a5593bc998f7cf2ea97729cb004f561b3b58fe59809a41fd4b3b76660906ad9eda23bf925437ef452b16f540b3b80a35a7093c2734eefe6fa97d881d79ef5b767d9889f118477b73f58a4c0cb15e0ac8101120571ca32ce871f308ad9057a80c828154fb1bc2b201d0cd1006e022d444dc93f1bcf224db74a5b373e153e851854948b6da147b73287cf17d1fb72b4827611103609cab2a1779e9793b9a70820fc6f3828a64c9eac35ef7aa7b17609d8eff8a9e52e4ebcd86b1e14fd140bea47c6b8ddc41e8cd271eb92287cbd0610512242f76a1ef3eac1e4bbbc1adae50034a7a2647e08b2fd20aa93a93cb2ffdebf2e461eccefbbd1fe894ce70adf790173bae96f5a55a1887e9ae09fced1d4306c291c6b19ecac4707e9ef713ea18a7562c6678326228992077a4669734966108000b4144f45a0c3a2863a4c6a3c07632cb93eb197d294884d9ca3dd4b21f39db707f63a7f9a570f7f0feb99b2ca7da7df92a177abcfe86ec661d30bcdcf1522bdb1fe11673258df7e46ef4d326665093156553f28b3563fe7192f72f5f9b3903d79fea04e2c488b465b4978d69f26e05a59d5ed4ef4cab232acfd564fc6\",\n        \"signed\": \"8d6f7ceeb9308b4a303879fc6cfa5ca8e05dfc3defc2b2cd2910dd4b17c94eaee845abe65fd715df05b0128e4316e2334799c6e8fa747ebc8a040c74f5a1480ce1dd1ffd737ac6dc24b3b9ce3b79e835bf698e931303d809cea1782dc3af63a0d5e67392823d1439e7b6e337b01c8b215434c2782b3be7443cb5c881e5fb6cf3bb244128b4da6a6f42b2bb2cd75129d56418854348c339dcd912b45557a915e9fd7f37916236510cb6c331c140b87d225311600b8d132ac47473839c720f9ff0f9c1dcaa85815a9d27b9758cd91dc5d3e53326fcdfb2730e52be3103957ac89149a4c3004cb6038c0d80fa72ac630d333be5ad4adb585aeb71aef1cdfd57b915fac4f1af78e7a597f8d1ba06672b19c0b65808a8a071ff8409034379589f3d41302d2d39b3318e8c0090fa36cb958857ff5b211c9666e27bc895ab9d006abaf5950a03ff17ea982178a446dda2466f5a40b8f895509e4f4d4a6a2739997fbd4968f89436cee3d8edb8a6da9bd3d55b066490e8339c78935b77883f95b932fa5e6bb7df303be30fa567249fffb473a1e464322d7c103fe8224c7ec57bd39bcd030b96787aebcd20e9ad651cfa2bf04ba70a1cf648e0a5449567202a937a45becbb6fcded30cf9b5c748f882b5dc2a4d65be69fd7d9c381e83d0dc2a34b6dee91220ba906e512fcd63368e2ce733e466b4b82b84fb0c717dc8945caf6d46ac1c2f6418f7729ef4c35e402422d64b1c3ebd1b32a30fc4c5eece7d4408ff679ff01a1c7b03ca517be52e6ae7650f7bad38901e348a5593bc998f7cf2ea97729cb004f561b3b58fe59809a41fd4b3b76660906ad9eda23bf925437ef452b16f540b3b80a35a7093c2734eefe6fa97d881d79ef5b767d9889f118477b73f58a4c0cb15e0ac8101120571ca32ce871f308ad9057a80c828154fb1bc2b201d0cd1006e022d444dc93f1bcf224db74a5b373e153e851854948b6da147b73287cf17d1fb72b4827611103609cab2a1779e9793b9a70820fc6f3828a64c9eac35ef7aa7b17609d8eff8a9e52e4ebcd86b1e14fd140bea47c6b8ddc41e8cd271eb92287cbd0610512242f76a1ef3eac1e4bbbc1adae50034a7a2647e08b2fd20aa93a93cb2ffdebf2e461eccefbbd1fe894ce70adf790173bae96f5a55a1887e9ae09fced1d4306c291c6b19ecac4707e9ef713ea18a7562c6678326228992077a4669734966108000b4144f45a0c3a2863a4c6a3c07632cb93eb197d294884d9ca3dd4b21f39db707f63a7f9a570f7f0feb99b2ca7da7df92a177abcfe86ec661d30bcdcf1522bdb1fe11673258df7e46ef4d326665093156553f28b3563fe7192f72f5f9b3903d79fea04e2c488b465b4978d69f26e05a59d5ed4ef4cab232acfd564fc6\",\n        \"signature\": \"8d6f7ceeb9308b4a303879fc6cfa5ca8e05dfc3defc2b2cd2910dd4b17c94eaee845abe65fd715df05b0128e4316e2334799c6e8fa747ebc8a040c74f5a1480c\"\n    },\n    {\n        \"secret_key\": \"865a432ecce7e78c42709fc1e531df5e3959132b2b6f318fd1c34521f9a26e3b\",\n        \"public_key\": \"c7a8caf8930b622a501337f92840ed96611a322080fde5e49f0a2f6e33b88283\",\n        \"message\": \"b231b6d2ecde49f513b0df25aafc3e5da45b6a9958d60f5464ca593c03005ecf361ef1696bb6e55d6538e34b38f324c21cea5cc81a0073278bb92727eff81af561802dcef33bec10ad6594e22d9c4418af3988a43ed087b9954bf8d6283e4beae8c096de6606751cbed685846c6630b9528ff364a7c48464113472c9860b3371963c911495a9c628a3e3e47ab0991f10dd1dd33161525262d63bab648819d57d1269e114825c5434e6b2845f42795d4fb083ad79401f2a0761c634a545aec7cdb13b5be449f1d829326378ed1f493fe8c8e9b068cc1dbcf165550b8132c319dac487b87bb22a54cdf60aac71516182a4e69ba083f6e86d1a4f05083a77619ef239f702396d7e46968cc04a3b34df3265ecf16157abe15c642cd7427096d8d40db002d196cab1be304bcf322d9d1a2451b6c11eeaf3e8e3d929f480b6b77804fe84496ca757e04337914ce94475d7990c7457c8e606f8bc207d2d48119c80a6b4a9e07b229226570dcd994989fecc694c6c2fb5975c9a6a9b74e8159c27dd3677dfd5cb651f1e32adfafd810b6e5d5efbace31ae6d9b12191e89398da063f138b7584c58e77e7f9fdd7fb9ef5d68ae49c6ccad28d18bc6009d4187ed1420224a5658aadf135b5a953f2dc3c8bfcaf669ed5da38d0144fd9665e6f0677d3fc8804e21cc25fd5e01a3f3fa83e571eb2f882a7659ce5d864d8bb54072b0986a854f1a7f2d2720df857e6d4219630841b1ccdcfc6726b91bfc17e18c3e3480c23a2c05e4bfeddd4db9ef42388f234fd3e4f3dad666026e2780612374161316afc7665f9411b6c5aa78933b18021c012b084f3244760a4ea1bcf31cc9f5c4044a9bcc75a986707f38f45ac1c7fa139ee95a6d8f16c3c1e12764c4b0b1194c0fc5f7eeff9a848c4050b0e651684719d438aad56019164fae4f48882205ece0b99736791084a753ba7d56e88fceea533566c3a2ca48dd6efc49b27dbf14f2616ced652e13833ab9028ada454431c89b3cb7441fdb8f23e12b60a1a104a2a8cf4a64e878aa26f54e8881a4b151a16a96de8b9807e729396ebe3e3d394f808bd74b7312fe6b84b1312af8a1e4133599d07bdf33db21e016b5c196c1ba3115708f581bb82f4b57a6ca1a529e64d193042c1dc5faa0a03abf53849e1bdefbab64b1cb60fe10a3fc1823a234c45f3b0dce66a46739c01aead12de6f0313c7be71405f3fdc4a507a9d84e8686f6fc92635db0f7856c7373a618a7252c129a7760e2029543d726228c21d00ad4ac52e5b1a6e31200917f15af515859e08f2a79ace67991ed69044\",\n        \"signed\": \"32bb7520e2639c6cca19a2b9836b08f8b083ca33369ddf5f9a877d4c7a9eb05f9c3dc34ed4cfa4b283e51922b094066ce9ffa4d9df621910ca37b0b37fbabb0eb231b6d2ecde49f513b0df25aafc3e5da45b6a9958d60f5464ca593c03005ecf361ef1696bb6e55d6538e34b38f324c21cea5cc81a0073278bb92727eff81af561802dcef33bec10ad6594e22d9c4418af3988a43ed087b9954bf8d6283e4beae8c096de6606751cbed685846c6630b9528ff364a7c48464113472c9860b3371963c911495a9c628a3e3e47ab0991f10dd1dd33161525262d63bab648819d57d1269e114825c5434e6b2845f42795d4fb083ad79401f2a0761c634a545aec7cdb13b5be449f1d829326378ed1f493fe8c8e9b068cc1dbcf165550b8132c319dac487b87bb22a54cdf60aac71516182a4e69ba083f6e86d1a4f05083a77619ef239f702396d7e46968cc04a3b34df3265ecf16157abe15c642cd7427096d8d40db002d196cab1be304bcf322d9d1a2451b6c11eeaf3e8e3d929f480b6b77804fe84496ca757e04337914ce94475d7990c7457c8e606f8bc207d2d48119c80a6b4a9e07b229226570dcd994989fecc694c6c2fb5975c9a6a9b74e8159c27dd3677dfd5cb651f1e32adfafd810b6e5d5efbace31ae6d9b12191e89398da063f138b7584c58e77e7f9fdd7fb9ef5d68ae49c6ccad28d18bc6009d4187ed1420224a5658aadf135b5a953f2dc3c8bfcaf669ed5da38d0144fd9665e6f0677d3fc8804e21cc25fd5e01a3f3fa83e571eb2f882a7659ce5d864d8bb54072b0986a854f1a7f2d2720df857e6d4219630841b1ccdcfc6726b91bfc17e18c3e3480c23a2c05e4bfeddd4db9ef42388f234fd3e4f3dad666026e2780612374161316afc7665f9411b6c5aa78933b18021c012b084f3244760a4ea1bcf31cc9f5c4044a9bcc75a986707f38f45ac1c7fa139ee95a6d8f16c3c1e12764c4b0b1194c0fc5f7eeff9a848c4050b0e651684719d438aad56019164fae4f48882205ece0b99736791084a753ba7d56e88fceea533566c3a2ca48dd6efc49b27dbf14f2616ced652e13833ab9028ada454431c89b3cb7441fdb8f23e12b60a1a104a2a8cf4a64e878aa26f54e8881a4b151a16a96de8b9807e729396ebe3e3d394f808bd74b7312fe6b84b1312af8a1e4133599d07bdf33db21e016b5c196c1ba3115708f581bb82f4b57a6ca1a529e64d193042c1dc5faa0a03abf53849e1bdefbab64b1cb60fe10a3fc1823a234c45f3b0dce66a46739c01aead12de6f0313c7be71405f3fdc4a507a9d84e8686f6fc92635db0f7856c7373a618a7252c129a7760e2029543d726228c21d00ad4ac52e5b1a6e31200917f15af515859e08f2a79ace67991ed69044\",\n        \"signature\": \"32bb7520e2639c6cca19a2b9836b08f8b083ca33369ddf5f9a877d4c7a9eb05f9c3dc34ed4cfa4b283e51922b094066ce9ffa4d9df621910ca37b0b37fbabb0e\"\n    },\n    {\n        \"secret_key\": \"2be1f98ce6553c915b6a0933ec0de347b370e29ca294e8005541239f63b430d0\",\n        \"public_key\": \"7a6f4469c30a63f560f98734fc1906ebd1371ed80125fa3e4c86b43f262cabbc\",\n        \"message\": \"6268201f932a7cd3f879ae6ab83855a2f50291de784d7d9e9adaa1b9afed6f5aea20240e59fe93e5a7088c95ec8e15745fb8fdeb91df0151c7b4605067561ea08dbf00c4ffe1fd0acf103656a7b54fad0f25ab16b4bda347179ed1cadb7b98be0895e050dcbc379d1fd553e99795928b67a752f8d2ec1b9d66bf6ac997e744dc327f242230f92e79ae312745a5ab6ddec1998fb63dc4f6b05f147222d4b65ace9017dc1bcd675e495f9eabb5f602133f6c72e053e9f4ae30d872d78bf71feba37acc595055c3bea53a05ef0c7f212dcf4e0af838ea2928f4cdc9fdc837da25f26966b2456abea66a5dfb8faa8fa091f7331d5436e98a8d6323cc9e9a91d5a02a49511714849b47454baf99c5f850a08d3d98410e939a9e89b15053825f3e9aee71447416140782e1bf3b0d8b4ff62e77a4a03f710a8ab76cf63592c05c440c8f064770099163c12270f3d5ec9a6bc9715bfffec769611d21fa003c3cc8356c975d37b62b88aabb8597daca196c9648a31d15bb0b86cf070ee01e511ef373b4a44c6a00160a797f2e820b716f5ca64464e4189a00fee978d35bf204f71db1f501f9b6e5dfc821a8af5dbfefd353ad3681f9bc3c22c67cb211b430b6a55f3e73da7c3a07ceb7d2fe254b10c2703ab2e2294dd0d3152dc7b21aab87b150f737a947463fb204175de8543236fbb0da5c7d48c57f61744de6f984aa8e61b970c62d0eeb849da7e89a61222d432079cbcf5f8a2ba930301683c0785c26fdf85da3020874604599ac6c847ec2608658b5788c7b8d3a3744fd5442e24c8eeccd420756bdd8b8a77cfd80589605dced9afda2bdb630a0cb612f739ce617d54ede6ccf36aa31e7e373d8a0fb1b7c9906f76b5f9de8c26891de006eb797ead4a86f7016f34bcde92f94ac3e920ba58d6dff772078d802a94f56cb26bf794fd90ca0ad4f2e7acdc5929bc7364997ded98ca69c573991bb9ab85f235b63e76f77e0ab45e78912389869af21e74e66f7c456b827e670beb0f0726688bb1f9036d38da07d69ea3666f76bd605d82e2dd6387ece6e824a569700f01b195d1a9bdcb0f96ab5c54e06c2119b406bc4888480660418bb4288ea2fda96631b0e1f60ac861d6ccc4c844b647a7d7403bc2d15bafe4af677e856fe0d2b5f663be4e480b38f6b766adcd3d05298ef1398d04d1523a68b91dd31cf5dc4b73decbfd7213f981b207e1f6ef225d7948a1aa17d8d57a112f1d4468d2d28f7ec2e54b74a692c5958022e82031a41b315090ed4d5bd7bd0b451476338f739a7d7031af2d36caa09ffdbb7c396507c75\",\n        \"signed\": \"8e659a3f535a589a5fd2d217cbcb8b777e5af20b234432f7dac29f810a2b4737c5cab10b59dfd0144f3090f5f9e0e667f0e21a9f573fe13b1c28eccbb531a2056268201f932a7cd3f879ae6ab83855a2f50291de784d7d9e9adaa1b9afed6f5aea20240e59fe93e5a7088c95ec8e15745fb8fdeb91df0151c7b4605067561ea08dbf00c4ffe1fd0acf103656a7b54fad0f25ab16b4bda347179ed1cadb7b98be0895e050dcbc379d1fd553e99795928b67a752f8d2ec1b9d66bf6ac997e744dc327f242230f92e79ae312745a5ab6ddec1998fb63dc4f6b05f147222d4b65ace9017dc1bcd675e495f9eabb5f602133f6c72e053e9f4ae30d872d78bf71feba37acc595055c3bea53a05ef0c7f212dcf4e0af838ea2928f4cdc9fdc837da25f26966b2456abea66a5dfb8faa8fa091f7331d5436e98a8d6323cc9e9a91d5a02a49511714849b47454baf99c5f850a08d3d98410e939a9e89b15053825f3e9aee71447416140782e1bf3b0d8b4ff62e77a4a03f710a8ab76cf63592c05c440c8f064770099163c12270f3d5ec9a6bc9715bfffec769611d21fa003c3cc8356c975d37b62b88aabb8597daca196c9648a31d15bb0b86cf070ee01e511ef373b4a44c6a00160a797f2e820b716f5ca64464e4189a00fee978d35bf204f71db1f501f9b6e5dfc821a8af5dbfefd353ad3681f9bc3c22c67cb211b430b6a55f3e73da7c3a07ceb7d2fe254b10c2703ab2e2294dd0d3152dc7b21aab87b150f737a947463fb204175de8543236fbb0da5c7d48c57f61744de6f984aa8e61b970c62d0eeb849da7e89a61222d432079cbcf5f8a2ba930301683c0785c26fdf85da3020874604599ac6c847ec2608658b5788c7b8d3a3744fd5442e24c8eeccd420756bdd8b8a77cfd80589605dced9afda2bdb630a0cb612f739ce617d54ede6ccf36aa31e7e373d8a0fb1b7c9906f76b5f9de8c26891de006eb797ead4a86f7016f34bcde92f94ac3e920ba58d6dff772078d802a94f56cb26bf794fd90ca0ad4f2e7acdc5929bc7364997ded98ca69c573991bb9ab85f235b63e76f77e0ab45e78912389869af21e74e66f7c456b827e670beb0f0726688bb1f9036d38da07d69ea3666f76bd605d82e2dd6387ece6e824a569700f01b195d1a9bdcb0f96ab5c54e06c2119b406bc4888480660418bb4288ea2fda96631b0e1f60ac861d6ccc4c844b647a7d7403bc2d15bafe4af677e856fe0d2b5f663be4e480b38f6b766adcd3d05298ef1398d04d1523a68b91dd31cf5dc4b73decbfd7213f981b207e1f6ef225d7948a1aa17d8d57a112f1d4468d2d28f7ec2e54b74a692c5958022e82031a41b315090ed4d5bd7bd0b451476338f739a7d7031af2d36caa09ffdbb7c396507c75\",\n        \"signature\": \"8e659a3f535a589a5fd2d217cbcb8b777e5af20b234432f7dac29f810a2b4737c5cab10b59dfd0144f3090f5f9e0e667f0e21a9f573fe13b1c28eccbb531a205\"\n    },\n    {\n        \"secret_key\": \"10bbe6e761a75c935b517f0936fecb9ec6fc215e58130800ea18d1ff442a4f13\",\n        \"public_key\": \"8643ddf8aa8d9c8a78b6eb699fd20a57f6f18636b06ce69dacdca1267acb3954\",\n        \"message\": \"e8108c6de4133733dc199a73392e226f712c36a24fa91d6fb09f92df218deb2d2830a668fd694b4809d0253507231247c7f258b4d65c56bb69345ef6aa97e7c59e8153775a5a3cf109c4bca9815569da6932e82183425b42d7483c9dbfcbd8eb38c84729571e8ec93982c317716759598c4f6a1b7f8da7306a7815721caf02e70246712314f766be9cb177cd2fa3bda22cd676c5d2e86e8d798fd34f543c9be3129651f273f484f0b9467b140955cd2981ff2603c0bdbb436ac0955a116c5e5fc30425e1fe78f6410f6ef757f604668854bae79bfe22e1a85ce5ee5d6434b4610120ea7e5d3d137ce207514f8534ad9bf392b7dc5355514b59f835466c8eb56f44eddc5bad20cf0b480b2e822a6f46fd95f30f183c7bb3143e4e6100e2dbc9f2bf0d43073e0fe65f01bcce6a1ae401c12541be3ae68cdeac2a4ac71f1663b5fdfc2e50f0e077fb3a0a8b8eeead627c1c3e79dd7361046f7e57c17436c32dc4432f050028cc7aa4408c2d29d1d7998fdcdda32bb32f704dc263db9b8e06c57630870f8bb6ec661fde1b7da94d53b047701a4588478c1c662346741aeac4c25338556a3d848de5b2a23ecea61b776bd0e8037efb8501eff239c7facca6c8367ed7c8adce919fef1a155ae0d5478a98002c95a16fbf4c0ed016ea5d3866fe1de454832a4e9565976b60b3dd2eaf7fee612f2bc040d93975435eebd12f06eb09ecea2c66768308f58c77ac51ed7bd21636fc9cc3fd14870bd06bdf128a81b14792e608c47ea2d535ca7aa21eb8a8a56d76991663a8190a95057d33671e73c7cbce5a98d31ef0d73bd0b163787b7fdcd2ddfc72960f2be320846d4b29080d7aeb5b7ea645a2ad5a59c012bf7b9515d859e1c1472ef8a4d3c95e711af97ae4618efbab3dffe88c9f6af4a09b0e73387e251b77d7bff5214f791862db6988411e2ae2c75bf28d28602a637c26f49c18d309d2fc58a126667ad3c2ec160c99ba40fbdac17e7e4c21a5d507859762eba09c4160df66f5feefe6715a28c5296cf43e5e771f31fce5133be97cab57301b4c9df9cd9a4acf1c33fac946fa1596fa65c8f3658be47a473a62c52181eca183e4246cd624d8783dcce5fdcc1fea173f8071f7074f55897de9bfe84a6c4fdf802d5026b8145e6c8c8950afc5b40fd0356fc55ee17e1f853a4c2fcc34a1369b87d28dc2fd2010f19903aff8e46de04938f4948245d5b425d074acdf2bd80bfc3735cc34a22590f194af9313eef4ab5fde61f1f9b58578638fcb4f2850b2fce6e03db4d0a834848163c4b27e129f5cc74f67f008a2712d1d\",\n        \"signed\": \"f0f357410373313b7c6252d6d96600360c23752d431ca8075bcfb772d49cd609b65c9cd838d634d8d9b95d1ee30edecc13e3ca997b2437303f8a33a1ffc83306e8108c6de4133733dc199a73392e226f712c36a24fa91d6fb09f92df218deb2d2830a668fd694b4809d0253507231247c7f258b4d65c56bb69345ef6aa97e7c59e8153775a5a3cf109c4bca9815569da6932e82183425b42d7483c9dbfcbd8eb38c84729571e8ec93982c317716759598c4f6a1b7f8da7306a7815721caf02e70246712314f766be9cb177cd2fa3bda22cd676c5d2e86e8d798fd34f543c9be3129651f273f484f0b9467b140955cd2981ff2603c0bdbb436ac0955a116c5e5fc30425e1fe78f6410f6ef757f604668854bae79bfe22e1a85ce5ee5d6434b4610120ea7e5d3d137ce207514f8534ad9bf392b7dc5355514b59f835466c8eb56f44eddc5bad20cf0b480b2e822a6f46fd95f30f183c7bb3143e4e6100e2dbc9f2bf0d43073e0fe65f01bcce6a1ae401c12541be3ae68cdeac2a4ac71f1663b5fdfc2e50f0e077fb3a0a8b8eeead627c1c3e79dd7361046f7e57c17436c32dc4432f050028cc7aa4408c2d29d1d7998fdcdda32bb32f704dc263db9b8e06c57630870f8bb6ec661fde1b7da94d53b047701a4588478c1c662346741aeac4c25338556a3d848de5b2a23ecea61b776bd0e8037efb8501eff239c7facca6c8367ed7c8adce919fef1a155ae0d5478a98002c95a16fbf4c0ed016ea5d3866fe1de454832a4e9565976b60b3dd2eaf7fee612f2bc040d93975435eebd12f06eb09ecea2c66768308f58c77ac51ed7bd21636fc9cc3fd14870bd06bdf128a81b14792e608c47ea2d535ca7aa21eb8a8a56d76991663a8190a95057d33671e73c7cbce5a98d31ef0d73bd0b163787b7fdcd2ddfc72960f2be320846d4b29080d7aeb5b7ea645a2ad5a59c012bf7b9515d859e1c1472ef8a4d3c95e711af97ae4618efbab3dffe88c9f6af4a09b0e73387e251b77d7bff5214f791862db6988411e2ae2c75bf28d28602a637c26f49c18d309d2fc58a126667ad3c2ec160c99ba40fbdac17e7e4c21a5d507859762eba09c4160df66f5feefe6715a28c5296cf43e5e771f31fce5133be97cab57301b4c9df9cd9a4acf1c33fac946fa1596fa65c8f3658be47a473a62c52181eca183e4246cd624d8783dcce5fdcc1fea173f8071f7074f55897de9bfe84a6c4fdf802d5026b8145e6c8c8950afc5b40fd0356fc55ee17e1f853a4c2fcc34a1369b87d28dc2fd2010f19903aff8e46de04938f4948245d5b425d074acdf2bd80bfc3735cc34a22590f194af9313eef4ab5fde61f1f9b58578638fcb4f2850b2fce6e03db4d0a834848163c4b27e129f5cc74f67f008a2712d1d\",\n        \"signature\": \"f0f357410373313b7c6252d6d96600360c23752d431ca8075bcfb772d49cd609b65c9cd838d634d8d9b95d1ee30edecc13e3ca997b2437303f8a33a1ffc83306\"\n    },\n    {\n        \"secret_key\": \"186dcc7efc5ed7e61ae53dc42093bae8f15dd99f0f033326c576ff756950d06d\",\n        \"public_key\": \"c8d141acb642aa9bfbd543277c2dca8aa9888eeff04543b3789b21f26aeb0f71\",\n        \"message\": \"974364d6c838842ccc4e749e6afd537170dcd8cc50d66654d105482339cabdf74e32935ee219272ea1684fb93c1fab42b5631839243591bd07d3be949b0dd15e3196df196ba752ad1121ac7112d566944e153a4e0619b3a232241f020be0719f6bec918b26828eb1670ecfc73c66844ea3e404c6a2fc01beb403c9d6ca551ad8a6e71f46647fa6053f0314f8124d8d2bc12cc8fa8db95f2b735375201b816a9cf40f83ee4b8671618032de229ce76271d03d2672a1ae4a288c85dcd27fb8452a8132e9ff29e1e89bf11b1c835192c04b13be14f3cde5d37ce96f1dc2a9ccda0c4d737bca1fa220d21bf360b90515bbd226bb2a6c8d5f2ab018d4084e24ee333ce4e39bcb6b46e7aeb4db9b6c65b244d982823a770f9c62a0bde2cbb7ec36840d455187faff4e488a5c608ebdb7db84d87dad3867e3b0d04b64715e16560a62f1ee03df6183fd5e37555da1972fca062d12bb8420e082dacb8debb9c1438541d0da2464ef7ec52263fb9b9a4c469c83323e4819dfdf4fa0a770c3a709254e05314830e87fbb6736c72d9dabe01a310e91ebbfae767a1fcb62f64fa3ba8d53400d6469ad1ccb811fb9e115f14127b13e8364aa2fe80bbc886a10df1b9cc4ae4601f5461af091f526d272da9b203857a4447eabdef439830496a5759c21de65ba3a3c8b8e939c461332a924852c205c7711f3a68a2367a945def4fbe5f81c60cbb7e394a2a49be9ec2aaeb1f330575979446ad9d0d54abd436f2860f0423426f4bbc26b3b9f650d69b10072d747a39e478f455eaa12c7c6e12bfc4536a3594344bd02b620e3e2b4e0d534089dd7b04fa634804567586c62be0391c7bdb0a9fbc1ef3b33211edbf8ef58c2b7a49d06667959d7e5d44671ee7357a10ba0cb1a445ae5d709ce255e92de715975af94b89d4a29c71f9d88c85b6cd11d8b335bf8f2c658e6dd7c3f6c80ad4d0e5a6c87dba7b5b8a8a47e72f4d1d3c743631df9adfcfa45cee0498d5a44a9f75c83b75b2a3c230ff0767d3888f941ee1b6624dd0e12d06ed1ab8bb135ffd379e9de3788be541aadb2d6a7cc601316f21eb9aaa922f56a8e3526c9bd1177fefc2fbe3e430b628eebd6661e3ba2d631c6a8422c241ecd969972412f74da6b1243bf0fbee8a84d52e40aee3f1e4fc831402c62f3576b22e8e3c3dc4e160bc3b6b9d2ce005853812eafc0a4e25ba712279b00ba3f9130ff36e3ef1971dde7508b2792fe64d475688fc6f3313aadb785302e6b7f9a84f2dbc2f3cf060ee08b463736f836dbb262d329684c208492d17d811221be02b65ee28e11b54692\",\n        \"signed\": \"8945069787c1c676a84a703cae1e0bacaeffd33e91bec3603e1f13fb170e31e6d7049eda2bf627180f456c3f7aabfcd36c49a8c04f8ae6929ec5ada07b657208974364d6c838842ccc4e749e6afd537170dcd8cc50d66654d105482339cabdf74e32935ee219272ea1684fb93c1fab42b5631839243591bd07d3be949b0dd15e3196df196ba752ad1121ac7112d566944e153a4e0619b3a232241f020be0719f6bec918b26828eb1670ecfc73c66844ea3e404c6a2fc01beb403c9d6ca551ad8a6e71f46647fa6053f0314f8124d8d2bc12cc8fa8db95f2b735375201b816a9cf40f83ee4b8671618032de229ce76271d03d2672a1ae4a288c85dcd27fb8452a8132e9ff29e1e89bf11b1c835192c04b13be14f3cde5d37ce96f1dc2a9ccda0c4d737bca1fa220d21bf360b90515bbd226bb2a6c8d5f2ab018d4084e24ee333ce4e39bcb6b46e7aeb4db9b6c65b244d982823a770f9c62a0bde2cbb7ec36840d455187faff4e488a5c608ebdb7db84d87dad3867e3b0d04b64715e16560a62f1ee03df6183fd5e37555da1972fca062d12bb8420e082dacb8debb9c1438541d0da2464ef7ec52263fb9b9a4c469c83323e4819dfdf4fa0a770c3a709254e05314830e87fbb6736c72d9dabe01a310e91ebbfae767a1fcb62f64fa3ba8d53400d6469ad1ccb811fb9e115f14127b13e8364aa2fe80bbc886a10df1b9cc4ae4601f5461af091f526d272da9b203857a4447eabdef439830496a5759c21de65ba3a3c8b8e939c461332a924852c205c7711f3a68a2367a945def4fbe5f81c60cbb7e394a2a49be9ec2aaeb1f330575979446ad9d0d54abd436f2860f0423426f4bbc26b3b9f650d69b10072d747a39e478f455eaa12c7c6e12bfc4536a3594344bd02b620e3e2b4e0d534089dd7b04fa634804567586c62be0391c7bdb0a9fbc1ef3b33211edbf8ef58c2b7a49d06667959d7e5d44671ee7357a10ba0cb1a445ae5d709ce255e92de715975af94b89d4a29c71f9d88c85b6cd11d8b335bf8f2c658e6dd7c3f6c80ad4d0e5a6c87dba7b5b8a8a47e72f4d1d3c743631df9adfcfa45cee0498d5a44a9f75c83b75b2a3c230ff0767d3888f941ee1b6624dd0e12d06ed1ab8bb135ffd379e9de3788be541aadb2d6a7cc601316f21eb9aaa922f56a8e3526c9bd1177fefc2fbe3e430b628eebd6661e3ba2d631c6a8422c241ecd969972412f74da6b1243bf0fbee8a84d52e40aee3f1e4fc831402c62f3576b22e8e3c3dc4e160bc3b6b9d2ce005853812eafc0a4e25ba712279b00ba3f9130ff36e3ef1971dde7508b2792fe64d475688fc6f3313aadb785302e6b7f9a84f2dbc2f3cf060ee08b463736f836dbb262d329684c208492d17d811221be02b65ee28e11b54692\",\n        \"signature\": \"8945069787c1c676a84a703cae1e0bacaeffd33e91bec3603e1f13fb170e31e6d7049eda2bf627180f456c3f7aabfcd36c49a8c04f8ae6929ec5ada07b657208\"\n    },\n    {\n        \"secret_key\": \"0705b336c89ca35ffdde0af0f906eacf623c56c3f76738168e76fcd5882df79e\",\n        \"public_key\": \"eaaaf2a15f44b634cef15a638b80207f61099a0796f5d43f3e9d048e6ae796c1\",\n        \"message\": \"616fe15fccb3310f9ec7456447dadaf8e0a5fb269be169b0c3ea2cfdaaa55d37937fe75b78324ac278a65047e0ae4f327e97effcb7bed91d09da720b0a101be9e96d0ba85b1ff49d8d1df362d3454f0db6825596101c97e5dacad07ec492d30f2d0cb7e7de4e744bb6a6100b754da847411d09aace8d5d410758b83087db4b5e6297979a21fb65af390952c4f936260e72d7c78327b94aa6cd617278b0ce9e1bd3fbed93b69bc64985dde0e2c4357b502f055ee7b0a0388474dae02d6c1a731f87785d753aeb0d9cfdf85002df566fc2507de7ba6fd035bee17a2e808b4a7588c583375c82407a40ae9eebdf94df2fb8cabf17606c439ea70459b212aae4a3f530ecadc5e88e2548fa643c7ddf5063b2e10673e59d07fe906892b67eb58f9388a56b370452e9977755fc04dfbc77da6c05beddebf0365256b52c9aef8a82173b8c89fbd98cea36a8b896fe66d37ca79bec7fbfe958fe89f6765085b335dc770343e230caddfa2833daa662fe8208dd885a6fdf72e36ecf22bbbbcbe79d370650236940bc2e6d4ac74fe4d554c9bc232f07d2af6220d157bd2da6a6612a081b4c9904a2869b137ee3a0856f12b2eb8762db94ed0ba136f23e7fb4bd1fcdee10dd84e2cd3b0a49148ac74db466dbeef81e6a8ce0861102de9b1a3e1dcf5c6b0308a82e3ac7c2283c7cc2f34ffa145b9f74b79904b32b79e960b814aade63a0df0167dcd24ed90a8da7b934c772932f5a478fe2a72f945a13096ec37ce764b581eb89e5f6b2bd7eb88b85a89587774d458c58cd879457973d648ef771c5f1deb27a0cc5b29246ac2fa12d18ddc6b9f9ac9cf146c3f22b1e4499adeefbcd2249740e13a224e7b6b3ef15605e7e74e68d7b72642409b90c4ec161eb24c9b40ff9c7e6e5da98322aca52c46a8ddc190f1cab157c4c7619601a6b33df6a50da661bc75360dff69750d3457409cc0241c3e8c4b3e506d426af52b70231cd6c91260cc431e4ccfd496ca14ceaae1cda78721e16339d52682b6951f966c7da5c6e10d919ae66a9f52dec10867538d3df6d593a32db695a8d7745703516ea56f8c1c8f0ef53bdeb7f53c2d944f511940ccb90624922ac599f4619c3046207d605f6ff94de788d25342229dc8af92b5fdf0dd71df2b446cdf1d9a20524339ee1c31826287ef72781a7a35289f85a15ba57c7fd5d885bd0553ab40805f517e8f1b1b3c4fc6771e6f224bc031124b9c9aeb19c5a96bf1488e1e66c6e88809230c83a74155554a219ec379ae54a9fe79dbede3d576042a635d197f4d818c778755b8b45e513deac88f60425\",\n        \"signed\": \"d4a9bae8ecc472c376bab805c2ce0c1c2ed5fc773715468cb1a4934564dacecf438b1dd2ac1b5c5e336a1e20701d5dcf3c8ee3ad223b139fa90a1b552e1b7707616fe15fccb3310f9ec7456447dadaf8e0a5fb269be169b0c3ea2cfdaaa55d37937fe75b78324ac278a65047e0ae4f327e97effcb7bed91d09da720b0a101be9e96d0ba85b1ff49d8d1df362d3454f0db6825596101c97e5dacad07ec492d30f2d0cb7e7de4e744bb6a6100b754da847411d09aace8d5d410758b83087db4b5e6297979a21fb65af390952c4f936260e72d7c78327b94aa6cd617278b0ce9e1bd3fbed93b69bc64985dde0e2c4357b502f055ee7b0a0388474dae02d6c1a731f87785d753aeb0d9cfdf85002df566fc2507de7ba6fd035bee17a2e808b4a7588c583375c82407a40ae9eebdf94df2fb8cabf17606c439ea70459b212aae4a3f530ecadc5e88e2548fa643c7ddf5063b2e10673e59d07fe906892b67eb58f9388a56b370452e9977755fc04dfbc77da6c05beddebf0365256b52c9aef8a82173b8c89fbd98cea36a8b896fe66d37ca79bec7fbfe958fe89f6765085b335dc770343e230caddfa2833daa662fe8208dd885a6fdf72e36ecf22bbbbcbe79d370650236940bc2e6d4ac74fe4d554c9bc232f07d2af6220d157bd2da6a6612a081b4c9904a2869b137ee3a0856f12b2eb8762db94ed0ba136f23e7fb4bd1fcdee10dd84e2cd3b0a49148ac74db466dbeef81e6a8ce0861102de9b1a3e1dcf5c6b0308a82e3ac7c2283c7cc2f34ffa145b9f74b79904b32b79e960b814aade63a0df0167dcd24ed90a8da7b934c772932f5a478fe2a72f945a13096ec37ce764b581eb89e5f6b2bd7eb88b85a89587774d458c58cd879457973d648ef771c5f1deb27a0cc5b29246ac2fa12d18ddc6b9f9ac9cf146c3f22b1e4499adeefbcd2249740e13a224e7b6b3ef15605e7e74e68d7b72642409b90c4ec161eb24c9b40ff9c7e6e5da98322aca52c46a8ddc190f1cab157c4c7619601a6b33df6a50da661bc75360dff69750d3457409cc0241c3e8c4b3e506d426af52b70231cd6c91260cc431e4ccfd496ca14ceaae1cda78721e16339d52682b6951f966c7da5c6e10d919ae66a9f52dec10867538d3df6d593a32db695a8d7745703516ea56f8c1c8f0ef53bdeb7f53c2d944f511940ccb90624922ac599f4619c3046207d605f6ff94de788d25342229dc8af92b5fdf0dd71df2b446cdf1d9a20524339ee1c31826287ef72781a7a35289f85a15ba57c7fd5d885bd0553ab40805f517e8f1b1b3c4fc6771e6f224bc031124b9c9aeb19c5a96bf1488e1e66c6e88809230c83a74155554a219ec379ae54a9fe79dbede3d576042a635d197f4d818c778755b8b45e513deac88f60425\",\n        \"signature\": \"d4a9bae8ecc472c376bab805c2ce0c1c2ed5fc773715468cb1a4934564dacecf438b1dd2ac1b5c5e336a1e20701d5dcf3c8ee3ad223b139fa90a1b552e1b7707\"\n    },\n    {\n        \"secret_key\": \"95174a0915684cdbb619b055495b00f19282cffc3b05019e6ab709a4a1742bab\",\n        \"public_key\": \"aa8c872d7e10b67f7ff24172c3637e80825a0a71ee0c48863a2acdcbe8da459a\",\n        \"message\": \"5e1a7400456cad4f9ba86643bc7cbf3b3568dcb522b37055e8c39d3c80f2284238e5727fd7513cc8b31c57ae7b4050aa819fc2360930eb0dd677a5b2c729feb2da3ad79ae7fccdddb6c08446261ec9bbe59c64e99abbc86d3c4835f00fefe527433a501a3b6d572cf5e12a88010b46a472b9bd8691a407c365f9f71634b4d97edfdff06314c0c1b4eb93c7607f1d6fa354659322c284073f42602518c54fdf26ea2c27c80a6dfa20568391ab357282c06b23bedc1df1264b611c1e9cf18aebe249fd8617c6e3ee98c53c0f6f2175c57ef8e206bd3cf105627a9892eb689920213aaeb63d87663dbfa53f0fb281626948296b2dbcdde1c51af862eecf1cfe8a46a2c4b28cfe7130330ad173f87127aacaff43c0bddea48b0038976e662c04b6b04ad03de12462c2765db535049520cc114afdb6c92549b0546a9027d449755beb8d4c17e6a2a475f9676a337b4e866d96325e389a52c16c51e18e0d8103340c8417b2c57a55d042ff5e5fc65df423e0092b0ea88b96a907c95121c547a68061f27bcfb58ce6c07728d4846bdcbf0c625410edf8dea8cb4c9d0bbeefcde19273365f48d75aec07d1c22ccd23068a97c3fe752e87a30118fe2dfd5218b6b125154e0ea386cf239e3137f8ca6d8b746b6a67d508cf8c1ab63e5715e6721eda5c2bc393a493dbd2f9a1fa926b9a59e45a180aeeb02599a8cdd686f889b4852723cb6dbfb5014cab5f658a309a472239360eeaf64fc8203a3c708970e15cbcf136255d96446c39a927031d267d69ecd51d7af6e91fb4aef9d78c3335e9071133cfb8e2129990c64637c7adf1daef2dc26c1163399f3fe1e792338092ef6f8dfaf25730dd2fe8d978f6f770f52b68238176564cee5fbb9850b3b3a04d948460417826eb2eb24fcc5fe35334bb9521e87bc4dbde2ac9e1c98949dc2d29ad279e3884b905268ebd0808bf418257e75e262b4d01b024a6e9aa7bd501dba94ff506394b4b0ae6081ea73030c43a6a91766e80f9f42c0b68b98419ad4eee4e9a728adefbd79e831f70f41e62b43f0bf42b3b2cd53b5589117664bcebc409a7645b1eedda482f6b6895a657ba789b89e502d6998751d6303ded5fa156ee7c7eafe54626d1032c4d7dff977f1dcc86af89b1e646a4afc2427ed02c0af5d32890f95f13f98c1a5b1d9fbb781a9a89b2d790c1465c2d1520926fdf28c17d9ba1587ad761f065d339bdbe38f4133f45bb5978742642f90c065ee4892573f6059f8b4ce2c13e73b891cd05f23731ed9a07e2b8ffdc963b06a510209c329980949f40d8073a013ef843dfcc4a3394\",\n        \"signed\": \"780f40c20fea3b11c9422a43b9a6f79611e7f1f59d1488c15a5fd2d32c07dadc391c38953edf0de48be52da2af335c47b8d2e44ab9d3dfb76ba538b0664952085e1a7400456cad4f9ba86643bc7cbf3b3568dcb522b37055e8c39d3c80f2284238e5727fd7513cc8b31c57ae7b4050aa819fc2360930eb0dd677a5b2c729feb2da3ad79ae7fccdddb6c08446261ec9bbe59c64e99abbc86d3c4835f00fefe527433a501a3b6d572cf5e12a88010b46a472b9bd8691a407c365f9f71634b4d97edfdff06314c0c1b4eb93c7607f1d6fa354659322c284073f42602518c54fdf26ea2c27c80a6dfa20568391ab357282c06b23bedc1df1264b611c1e9cf18aebe249fd8617c6e3ee98c53c0f6f2175c57ef8e206bd3cf105627a9892eb689920213aaeb63d87663dbfa53f0fb281626948296b2dbcdde1c51af862eecf1cfe8a46a2c4b28cfe7130330ad173f87127aacaff43c0bddea48b0038976e662c04b6b04ad03de12462c2765db535049520cc114afdb6c92549b0546a9027d449755beb8d4c17e6a2a475f9676a337b4e866d96325e389a52c16c51e18e0d8103340c8417b2c57a55d042ff5e5fc65df423e0092b0ea88b96a907c95121c547a68061f27bcfb58ce6c07728d4846bdcbf0c625410edf8dea8cb4c9d0bbeefcde19273365f48d75aec07d1c22ccd23068a97c3fe752e87a30118fe2dfd5218b6b125154e0ea386cf239e3137f8ca6d8b746b6a67d508cf8c1ab63e5715e6721eda5c2bc393a493dbd2f9a1fa926b9a59e45a180aeeb02599a8cdd686f889b4852723cb6dbfb5014cab5f658a309a472239360eeaf64fc8203a3c708970e15cbcf136255d96446c39a927031d267d69ecd51d7af6e91fb4aef9d78c3335e9071133cfb8e2129990c64637c7adf1daef2dc26c1163399f3fe1e792338092ef6f8dfaf25730dd2fe8d978f6f770f52b68238176564cee5fbb9850b3b3a04d948460417826eb2eb24fcc5fe35334bb9521e87bc4dbde2ac9e1c98949dc2d29ad279e3884b905268ebd0808bf418257e75e262b4d01b024a6e9aa7bd501dba94ff506394b4b0ae6081ea73030c43a6a91766e80f9f42c0b68b98419ad4eee4e9a728adefbd79e831f70f41e62b43f0bf42b3b2cd53b5589117664bcebc409a7645b1eedda482f6b6895a657ba789b89e502d6998751d6303ded5fa156ee7c7eafe54626d1032c4d7dff977f1dcc86af89b1e646a4afc2427ed02c0af5d32890f95f13f98c1a5b1d9fbb781a9a89b2d790c1465c2d1520926fdf28c17d9ba1587ad761f065d339bdbe38f4133f45bb5978742642f90c065ee4892573f6059f8b4ce2c13e73b891cd05f23731ed9a07e2b8ffdc963b06a510209c329980949f40d8073a013ef843dfcc4a3394\",\n        \"signature\": \"780f40c20fea3b11c9422a43b9a6f79611e7f1f59d1488c15a5fd2d32c07dadc391c38953edf0de48be52da2af335c47b8d2e44ab9d3dfb76ba538b066495208\"\n    },\n    {\n        \"secret_key\": \"5a84af28a5dfbb3233a12f0837f6e8654e7b0de16b02ab3cd17864431e274667\",\n        \"public_key\": \"80d4ba789f8a4b2047adafa5ed26cd8c546733292e8bf693cfd17e284efc6871\",\n        \"message\": \"8aacd1b8a39bf08fd5c918446be576e6a3f27f36111607f27b56a91214e763f9a87fb1d1844898961797644460bff5488c103af605e8740e46588fb93e443c3bb23b92c09870a557653a1f22c218ccbc2f073a272d17a84223ef143f4c7ca258460b798169673da107d71d5356ce9f7559a9b038399951f575c77e5b9d0529578ecaa2e2089266fc526c5d409fbd46bb86841cb554f5bd3c99713b043e404653a7d01344d4db831a217282c4b336405653b85d27a46b259c855cdd85ad6f7aedd835ff5500cc8baf0fb2f0180910c64672b8a8d49d984a78293cf5779c910c3acbbca455a85466e535044f3480262c090fbf4e0b0db4d1ef8759daafdd8d05907482461ff910c437195d5c7fed9d82cb94e7e4ec24da053e47f62b488eb7b244655c7dbb20ed607eed4531449e0780e61cfd574086ffc5dc524283775c44f7547cdab04a51eee4e1b7b65a57573a92484a35900a909f81e415029d22ca937a3acd9e61f8c0e686b2d2ad0377af8ee166e4a20a82aff451e151103e0a1767b271fa9c2b1dd120f805853b3b8a560fc8b9376283b51124324a284a0e9ac49df69f524c8e042df82efbcd16881ec131a15210df73de02943447f22a2ea1dc8bf968298ee97f3ad546d78bc660897e08d2a28b2ba68b54b954f1476451c69207e5dd248ae47ef35694990e6f058bc0017b7495105cc8739066afb11e1f26601942546ae849ff2f56730f1326bbeea640ee178fa247adffefc046494fc7ffc0777d5dbe8a55daee61406fe3c7088d43d9e14da21ca52fd8c160091c8f99a67dad65c64fea9d18b1537d061f5dce879e0bc42648d2eaa02d972185753cb2f6225d8d03bb07f944b10cf4ea22275c3d70848020f30c823b76143acf545999a2cc4b5898d94b4a25efbe5a60331cc009fec0a25bc98947b1b7139e22d23280ff8854a1ec76221b1bf3d108328c8ac463c65263a2d7ca7433482931a1d8fc144bbe9bef678c92e1c2d10921b6ad43a75c53bc075854ed2d99d825f30a5e10d517438e4d4f7113429f1edb387d6bd7aad29274f8d2dc889b7efbeb58686f8d669ceaef92c75ed5307f0c03f5900181ce573c8fa28675205fb1057f626aa230d03e2eaa8cffcde20081475d80b245a1ca6045ba204ab00069079c637fc3fb3e80ca0462e7a4cdd9283ff9008530364816792fdf3b9a4e4dc8379228edcbb154bef387d37760d79afbb736260a1db10138361f24b826dbcd5f0fc9e7830d26d80c52a792189276bce34760fb77be1312ac8cf97d92cbf3d0778028db5e8eae89e0b9bc8778aeb1278f0471cb\",\n        \"signed\": \"a0b84ca5af7646e6f62a6935379473fa6e4c27695851fcbdae2917b2dc68d796e278d70cd67fcedf6ca629b881f7c4f2aa2559b20d670611766bd65aa4fef2048aacd1b8a39bf08fd5c918446be576e6a3f27f36111607f27b56a91214e763f9a87fb1d1844898961797644460bff5488c103af605e8740e46588fb93e443c3bb23b92c09870a557653a1f22c218ccbc2f073a272d17a84223ef143f4c7ca258460b798169673da107d71d5356ce9f7559a9b038399951f575c77e5b9d0529578ecaa2e2089266fc526c5d409fbd46bb86841cb554f5bd3c99713b043e404653a7d01344d4db831a217282c4b336405653b85d27a46b259c855cdd85ad6f7aedd835ff5500cc8baf0fb2f0180910c64672b8a8d49d984a78293cf5779c910c3acbbca455a85466e535044f3480262c090fbf4e0b0db4d1ef8759daafdd8d05907482461ff910c437195d5c7fed9d82cb94e7e4ec24da053e47f62b488eb7b244655c7dbb20ed607eed4531449e0780e61cfd574086ffc5dc524283775c44f7547cdab04a51eee4e1b7b65a57573a92484a35900a909f81e415029d22ca937a3acd9e61f8c0e686b2d2ad0377af8ee166e4a20a82aff451e151103e0a1767b271fa9c2b1dd120f805853b3b8a560fc8b9376283b51124324a284a0e9ac49df69f524c8e042df82efbcd16881ec131a15210df73de02943447f22a2ea1dc8bf968298ee97f3ad546d78bc660897e08d2a28b2ba68b54b954f1476451c69207e5dd248ae47ef35694990e6f058bc0017b7495105cc8739066afb11e1f26601942546ae849ff2f56730f1326bbeea640ee178fa247adffefc046494fc7ffc0777d5dbe8a55daee61406fe3c7088d43d9e14da21ca52fd8c160091c8f99a67dad65c64fea9d18b1537d061f5dce879e0bc42648d2eaa02d972185753cb2f6225d8d03bb07f944b10cf4ea22275c3d70848020f30c823b76143acf545999a2cc4b5898d94b4a25efbe5a60331cc009fec0a25bc98947b1b7139e22d23280ff8854a1ec76221b1bf3d108328c8ac463c65263a2d7ca7433482931a1d8fc144bbe9bef678c92e1c2d10921b6ad43a75c53bc075854ed2d99d825f30a5e10d517438e4d4f7113429f1edb387d6bd7aad29274f8d2dc889b7efbeb58686f8d669ceaef92c75ed5307f0c03f5900181ce573c8fa28675205fb1057f626aa230d03e2eaa8cffcde20081475d80b245a1ca6045ba204ab00069079c637fc3fb3e80ca0462e7a4cdd9283ff9008530364816792fdf3b9a4e4dc8379228edcbb154bef387d37760d79afbb736260a1db10138361f24b826dbcd5f0fc9e7830d26d80c52a792189276bce34760fb77be1312ac8cf97d92cbf3d0778028db5e8eae89e0b9bc8778aeb1278f0471cb\",\n        \"signature\": \"a0b84ca5af7646e6f62a6935379473fa6e4c27695851fcbdae2917b2dc68d796e278d70cd67fcedf6ca629b881f7c4f2aa2559b20d670611766bd65aa4fef204\"\n    },\n    {\n        \"secret_key\": \"793ac88d7d3b6fa7f47deec31f68ddccb701820f1b13ddc652f7c6a85b6052a5\",\n        \"public_key\": \"91b6227acdd183da62c51965c635358b204d683ee06443cbd40e71c1f76ad102\",\n        \"message\": \"ec50afad8ade7405e2c6f5c6247bbbccfb2c17166f7884feae10d90f5d83c4b6f0bf76de2f7897ba1194d6d3449ddb80ae74eb8ed68f049b35c6f21916db4dfc2724dc3af7ad8dd5c44f60d2f49fadd7004da1593093942cae5208bf54cf903bee646905fce2eb2e370d0dca48d820adeab16a3b675e5a4a8e267e34ff96f3122b18de0cad9292ab63d26e5f310fa2168c2966bdb63b0de08626767b379de4633b9f3eda7917281dad661e9f772b844a79e800fd842702446e4aa731757107f3fd6547bf4075963d5fd5f58e80853fc42751dca078a9fa8d5bb3d9a34abcab0293d6ceaec48967a1e6224398cad0f605a3be8e6758ea8f29209d8e4c4ca1893baad91e379ba3b17330c12a5b6f219b384a8ab978bf1b37c3731a1b474b24b5d67d4cec28aac6510b11f2cf21bc16963d51f5538727718fc4e2e5172e3c0cdabc277f0d7037c34ca68f73288848b926bde0cf47abfa66600916946f07651c280a2086b14d52570cc8a4b74358b59c302b9d00e1b498f3bc33ee4ecf2bce2c65ed7e8ba74d35b751d3c99f40861968c2b7f3a5be348c57d93b40ffd051edd7caca6ee6bca721dcba8db8d0064f54d36ec5e8d62a71fd1c90f14924f41c163f007afc6fbbfe8645fa47c3c980246d1b92274385953c5341cd64c34ae9717cc2c37f58359c0a9991c23fe637de6cdf0862f7d0329fe758aa892ad4583b9df2f3337d5be570ba654998ed292f11f01772382a04342fdd99e69e0d97c43f10ac9b96f140a6f83c4729e7a900471f2b1df2401bc5c680422b13b0c8007d63681f66a0595a1c5d3acde5b779426e736bc100c5e6f52608dc391e3ef9b1bb6af13d249b7d32ce0680c368f54d5fe039cfe10130251e4db14c79c8d044060465822990d88093cd736532852e447889db89cc60052996a32a64365c0726051c119eda901de576b334fc7049482392e2620b0a3a13fab1d36fc0a5f23db147fd857b26a698048f8b811e23d722e2e9027ed4124b48dc5e578a7aeb19a1b4f948ee5b46f65b979646e2be074714118baa4bfc15b089a0e06627da46e4bb06aa3c7c5dd648e03c9c2dec3facd95626562f3000883230d2b0a1f8a7478cb77f939a5f188f458d1037b90176664d86ea850b8af5087f86605a77e025ef6c7e6a2a59f006cba189fad933f42c532708109bc1af814819595ffcb95fbf5b7e93a71197e477ee7c04b851c1c36622cdd8e6c860d9ab2cac56d2dc98fa69124f2bb2a6471e1c73b661f071f5d86de7d1deafa4edcdc7bf1f705c56300affd058b9697791419e5fb2a5b7f78ce3401ff550\",\n        \"signed\": \"a84f552bf44322a6db245ca006d1cf780c61680fe7429a8947c35f21bc4b44228ba30aea0c744b866459d3b8acad453b06ace247ba69528c6b3bc4b20e75630eec50afad8ade7405e2c6f5c6247bbbccfb2c17166f7884feae10d90f5d83c4b6f0bf76de2f7897ba1194d6d3449ddb80ae74eb8ed68f049b35c6f21916db4dfc2724dc3af7ad8dd5c44f60d2f49fadd7004da1593093942cae5208bf54cf903bee646905fce2eb2e370d0dca48d820adeab16a3b675e5a4a8e267e34ff96f3122b18de0cad9292ab63d26e5f310fa2168c2966bdb63b0de08626767b379de4633b9f3eda7917281dad661e9f772b844a79e800fd842702446e4aa731757107f3fd6547bf4075963d5fd5f58e80853fc42751dca078a9fa8d5bb3d9a34abcab0293d6ceaec48967a1e6224398cad0f605a3be8e6758ea8f29209d8e4c4ca1893baad91e379ba3b17330c12a5b6f219b384a8ab978bf1b37c3731a1b474b24b5d67d4cec28aac6510b11f2cf21bc16963d51f5538727718fc4e2e5172e3c0cdabc277f0d7037c34ca68f73288848b926bde0cf47abfa66600916946f07651c280a2086b14d52570cc8a4b74358b59c302b9d00e1b498f3bc33ee4ecf2bce2c65ed7e8ba74d35b751d3c99f40861968c2b7f3a5be348c57d93b40ffd051edd7caca6ee6bca721dcba8db8d0064f54d36ec5e8d62a71fd1c90f14924f41c163f007afc6fbbfe8645fa47c3c980246d1b92274385953c5341cd64c34ae9717cc2c37f58359c0a9991c23fe637de6cdf0862f7d0329fe758aa892ad4583b9df2f3337d5be570ba654998ed292f11f01772382a04342fdd99e69e0d97c43f10ac9b96f140a6f83c4729e7a900471f2b1df2401bc5c680422b13b0c8007d63681f66a0595a1c5d3acde5b779426e736bc100c5e6f52608dc391e3ef9b1bb6af13d249b7d32ce0680c368f54d5fe039cfe10130251e4db14c79c8d044060465822990d88093cd736532852e447889db89cc60052996a32a64365c0726051c119eda901de576b334fc7049482392e2620b0a3a13fab1d36fc0a5f23db147fd857b26a698048f8b811e23d722e2e9027ed4124b48dc5e578a7aeb19a1b4f948ee5b46f65b979646e2be074714118baa4bfc15b089a0e06627da46e4bb06aa3c7c5dd648e03c9c2dec3facd95626562f3000883230d2b0a1f8a7478cb77f939a5f188f458d1037b90176664d86ea850b8af5087f86605a77e025ef6c7e6a2a59f006cba189fad933f42c532708109bc1af814819595ffcb95fbf5b7e93a71197e477ee7c04b851c1c36622cdd8e6c860d9ab2cac56d2dc98fa69124f2bb2a6471e1c73b661f071f5d86de7d1deafa4edcdc7bf1f705c56300affd058b9697791419e5fb2a5b7f78ce3401ff550\",\n        \"signature\": \"a84f552bf44322a6db245ca006d1cf780c61680fe7429a8947c35f21bc4b44228ba30aea0c744b866459d3b8acad453b06ace247ba69528c6b3bc4b20e75630e\"\n    },\n    {\n        \"secret_key\": \"89de7442d74ba9385969c9651a88fe28e040d593907dac1a3987418bdfdbad89\",\n        \"public_key\": \"fd3ba9fad320eba45d07b84a497be17d3fc7dd9999c968883cd6ac13b0669b17\",\n        \"message\": \"9d5272f0b784882b94c76dfb9d460ca495025e0aec5d52ccfffece9f8173c10558266c498525891a97bf3878e33c3de2fc2e52550b431562cbe4a3d011ecc9e77ec36ad38341358c88321c03d08bb426a7d5854171c027ec48d57819a91afd02a618ccbc25e68e5309d047b156e35705373ada2eb831321a203e1bd8f0efecc09618647b41dff22b39d02235f871532f6085e9cc52ec009b33eebcdc267d7767c90c927e154f72f3f48a34956319b293c8a8b3e34efc5f62f2b4e8019b50a08f5ccf95bc831baf40811d87e5edbd2fd5365b26a431ae95800ff381cd62ca40e1866d950dce14f030918abac68e7916ddb95adc1971287874d07eb0edef64296652c48044b0c5521a8d270d53d74ec63b890f3363f9207f6652ae8e7835c3820ad6d9e3633f4bfd5379a44f29d65f3609fe355817dca5518dfe3bd769320a031902e9cf6669c24f88b01eb36995bdb8dbed6ee0c9b7f32295c61ba8905e5598f3c9e1c8bf7264f98293faea17747f88440c31818c433ea3d23c01f4f7e9c3dd3d5f32ec9eacd71a09e3a997381f1cbffdf4b5ba4979deb7b09841afa3b03d1c9311097b862cae11707cbd3a4ae6c8a26a306a687c414a4ea1e812f115f60f70bda7f8fbe7bc2d50cc550bba291d5ec523229a08ed568b5cee18fe6f46782c17cd828801639215bc5e9be4555c9a18009767a6c5c74a8229d2ffaa399d8e64324e884223d5070f735a75d85ff6c94a9fbc2b3651386de5a23cce95c87881c79399ae71f090737e2187fe904aab1d92d6186795c9b46c62a5914f3630fdcbac3bd4b0da4ec3136a1fb2ba40322d7cc4085e167009cf7450fc6a286c2f7951d51aae23b8f33020efb5e3245ba6a3543a2bdec447d51ae00b5e1678b76093cf216b9507c963ebfc024ccd6ef6c78c4572273beaaf55076dc44a224b58615705791965307cefd48672c081bccfbc1d15b062b38b4fba9b9bec956cd14444ee437e7960cc601eddc02f1a76b68574d5f8843150c0b9009934a2bfaf605770c136ba29f3dc7e29597a2480db23e2b2677ec6c51bd301f2b5a39dfda7b477bedd1cdaed10e29d2954629b9876f8ee54e4047369d534cab54aea441dc947eb3f59382b218360572f2659583153c0e2b912cf30c815b26f05853dd30551eecf64b858a441bb8c6db8a9fde77a32a7b46af66f8cb9f35ee0fafb0bd42d9e65b2a9058241a31b8ca1115434237670aab4eff36010ed0371f46595da1bdd579bbb67aadb68e77ad3a38c8f26d2af5a7103ba5f22b42cc12a8c3ce5c921c91cfc0e63df9027d26229b1047cbc18f6b0\",\n        \"signed\": \"bab57284d20ee54cc7f9708d717706d8faf6e46332b0691d6f213a8db801155b4e338c1361b592be758501b1821793ae5227cc3ba8df8adfc6ed9acab54cc4019d5272f0b784882b94c76dfb9d460ca495025e0aec5d52ccfffece9f8173c10558266c498525891a97bf3878e33c3de2fc2e52550b431562cbe4a3d011ecc9e77ec36ad38341358c88321c03d08bb426a7d5854171c027ec48d57819a91afd02a618ccbc25e68e5309d047b156e35705373ada2eb831321a203e1bd8f0efecc09618647b41dff22b39d02235f871532f6085e9cc52ec009b33eebcdc267d7767c90c927e154f72f3f48a34956319b293c8a8b3e34efc5f62f2b4e8019b50a08f5ccf95bc831baf40811d87e5edbd2fd5365b26a431ae95800ff381cd62ca40e1866d950dce14f030918abac68e7916ddb95adc1971287874d07eb0edef64296652c48044b0c5521a8d270d53d74ec63b890f3363f9207f6652ae8e7835c3820ad6d9e3633f4bfd5379a44f29d65f3609fe355817dca5518dfe3bd769320a031902e9cf6669c24f88b01eb36995bdb8dbed6ee0c9b7f32295c61ba8905e5598f3c9e1c8bf7264f98293faea17747f88440c31818c433ea3d23c01f4f7e9c3dd3d5f32ec9eacd71a09e3a997381f1cbffdf4b5ba4979deb7b09841afa3b03d1c9311097b862cae11707cbd3a4ae6c8a26a306a687c414a4ea1e812f115f60f70bda7f8fbe7bc2d50cc550bba291d5ec523229a08ed568b5cee18fe6f46782c17cd828801639215bc5e9be4555c9a18009767a6c5c74a8229d2ffaa399d8e64324e884223d5070f735a75d85ff6c94a9fbc2b3651386de5a23cce95c87881c79399ae71f090737e2187fe904aab1d92d6186795c9b46c62a5914f3630fdcbac3bd4b0da4ec3136a1fb2ba40322d7cc4085e167009cf7450fc6a286c2f7951d51aae23b8f33020efb5e3245ba6a3543a2bdec447d51ae00b5e1678b76093cf216b9507c963ebfc024ccd6ef6c78c4572273beaaf55076dc44a224b58615705791965307cefd48672c081bccfbc1d15b062b38b4fba9b9bec956cd14444ee437e7960cc601eddc02f1a76b68574d5f8843150c0b9009934a2bfaf605770c136ba29f3dc7e29597a2480db23e2b2677ec6c51bd301f2b5a39dfda7b477bedd1cdaed10e29d2954629b9876f8ee54e4047369d534cab54aea441dc947eb3f59382b218360572f2659583153c0e2b912cf30c815b26f05853dd30551eecf64b858a441bb8c6db8a9fde77a32a7b46af66f8cb9f35ee0fafb0bd42d9e65b2a9058241a31b8ca1115434237670aab4eff36010ed0371f46595da1bdd579bbb67aadb68e77ad3a38c8f26d2af5a7103ba5f22b42cc12a8c3ce5c921c91cfc0e63df9027d26229b1047cbc18f6b0\",\n        \"signature\": \"bab57284d20ee54cc7f9708d717706d8faf6e46332b0691d6f213a8db801155b4e338c1361b592be758501b1821793ae5227cc3ba8df8adfc6ed9acab54cc401\"\n    },\n    {\n        \"secret_key\": \"2622bd9bbef7ff4a87629ea0153dc4d608c31fa5847988ff500d880681f11372\",\n        \"public_key\": \"199758a9c3d0ee3eebcbbda3e1ef5455ff46d736bb4ef0c06a739f9ac5848395\",\n        \"message\": \"891e82122547d61e83b0abaf27c7303f0522a2ec4af44ef0ac196a9978b1c623ef1fa72baf70910a5c51c4f78e0fe9fe37e2439c4795916cfa22ab471a2557cc7ba6b66956063ddeb39c50f14f06348fa66b6064dcffca5043967f05254d577abf22ae8c90000ce2e6a1a8b2e3a6b3abc563ebffb20445f0911cc42a987f8456efba4130e68f01fcdf7bf771fc1d35371a0d75dd5f90002c90b6cbade40d5b23fdb49abacb7219ae27561aa2a879da88df34a8c581f0c67198ffc608fe9195b5555c8ae934c830aae2885bea87487448e11b4f2f172e4d5cfe4fd113f9d2016c24a734512bb918f575e754139718e3d20e790abb942cba3ec8b2db590796dc435f139fc64ddc85a22494ef2bfa1f5c0f1875ea58e84eb374ecf8cec6468b6b09d1e74f1541ed454a2807d3f4053566b0e4e2c6aeced10dc007e9df416f267fcb3fe17b8bace03f0743e0e6d4a48ce76edff60c0e3a308456995413c1076ff37ecf2381a0d4e9e4a913a258d983b9696b5c45af37c8684070e400b8f865a504043f45d78b9713f335aa416a46166410735fb5d82210458d5a08a104d4002ab61188f9df457dd7ed5937ca5077606b418bbc8684a1d525bfa551087640b1d177ca6d4f6471b39b2ce43afbf8285ecd687e438f4425df568ab86fa2316349a1102b4143d71ef4e24f5c530c77afb0100788636440e740675a6174c5f05710b253a411173f9e82ce6e22f4095e7714b8737e147aa0f23191578ffd93823ce4bf91c1d110982a5da0e4b81bd25b9b9c2142a7671ee937c90fd0715ec9afa44d86046898b42f753589d2268d2aaaa985cc90e0f9e827a3923e7716346f4f8931c72821b3eb645daa7452c8afc898d7975545c12da1bdb209045cb00f4bfd5383df01f003680b973440f1a39c9d820959ef6f85bd33639065aefdc8bcfecbd9b9554049738af29f1294639d3915d632995e8faf713ef2ee3c298b5596fa10c99f946ddb32340695df1c194594eaf3778d73c8ba6040c04eb3a4ff8677936b88e0c5f0441480d107d7ac2202b3b694e57ccca6d825e2a07e812ed29b2c20d5c605471579e3edffc223f242c59391db41e98d5f3d6c5b1e32ac8237fcfd1020543a4041e03d92ad3e2ec552914707c77cd01f3e48011444283f0968fa4deeee55c456ed1f877ade04ac8e8d2cb6c85820b4929b25bf31e925435d6bcc50d3e2e9b85102e970d7895c25ade52161a3b6bf501ab01961cb63ed990aeb93eda3828bf04ca52853c7b6b8e9e49e349d69b53be07485f542b7cdd06b527d41dd119c70b564f1a93aec62ae74e6e8f855\",\n        \"signed\": \"4378966b7831def4aecb4989bcaf9cae99461cb9b59d19518cc1ec7b8351bcd1f723aac5f061b38363574ff96ba10e196b1b0531e1183036a425e69c4598040c891e82122547d61e83b0abaf27c7303f0522a2ec4af44ef0ac196a9978b1c623ef1fa72baf70910a5c51c4f78e0fe9fe37e2439c4795916cfa22ab471a2557cc7ba6b66956063ddeb39c50f14f06348fa66b6064dcffca5043967f05254d577abf22ae8c90000ce2e6a1a8b2e3a6b3abc563ebffb20445f0911cc42a987f8456efba4130e68f01fcdf7bf771fc1d35371a0d75dd5f90002c90b6cbade40d5b23fdb49abacb7219ae27561aa2a879da88df34a8c581f0c67198ffc608fe9195b5555c8ae934c830aae2885bea87487448e11b4f2f172e4d5cfe4fd113f9d2016c24a734512bb918f575e754139718e3d20e790abb942cba3ec8b2db590796dc435f139fc64ddc85a22494ef2bfa1f5c0f1875ea58e84eb374ecf8cec6468b6b09d1e74f1541ed454a2807d3f4053566b0e4e2c6aeced10dc007e9df416f267fcb3fe17b8bace03f0743e0e6d4a48ce76edff60c0e3a308456995413c1076ff37ecf2381a0d4e9e4a913a258d983b9696b5c45af37c8684070e400b8f865a504043f45d78b9713f335aa416a46166410735fb5d82210458d5a08a104d4002ab61188f9df457dd7ed5937ca5077606b418bbc8684a1d525bfa551087640b1d177ca6d4f6471b39b2ce43afbf8285ecd687e438f4425df568ab86fa2316349a1102b4143d71ef4e24f5c530c77afb0100788636440e740675a6174c5f05710b253a411173f9e82ce6e22f4095e7714b8737e147aa0f23191578ffd93823ce4bf91c1d110982a5da0e4b81bd25b9b9c2142a7671ee937c90fd0715ec9afa44d86046898b42f753589d2268d2aaaa985cc90e0f9e827a3923e7716346f4f8931c72821b3eb645daa7452c8afc898d7975545c12da1bdb209045cb00f4bfd5383df01f003680b973440f1a39c9d820959ef6f85bd33639065aefdc8bcfecbd9b9554049738af29f1294639d3915d632995e8faf713ef2ee3c298b5596fa10c99f946ddb32340695df1c194594eaf3778d73c8ba6040c04eb3a4ff8677936b88e0c5f0441480d107d7ac2202b3b694e57ccca6d825e2a07e812ed29b2c20d5c605471579e3edffc223f242c59391db41e98d5f3d6c5b1e32ac8237fcfd1020543a4041e03d92ad3e2ec552914707c77cd01f3e48011444283f0968fa4deeee55c456ed1f877ade04ac8e8d2cb6c85820b4929b25bf31e925435d6bcc50d3e2e9b85102e970d7895c25ade52161a3b6bf501ab01961cb63ed990aeb93eda3828bf04ca52853c7b6b8e9e49e349d69b53be07485f542b7cdd06b527d41dd119c70b564f1a93aec62ae74e6e8f855\",\n        \"signature\": \"4378966b7831def4aecb4989bcaf9cae99461cb9b59d19518cc1ec7b8351bcd1f723aac5f061b38363574ff96ba10e196b1b0531e1183036a425e69c4598040c\"\n    },\n    {\n        \"secret_key\": \"aeb13ccb90c8cbef90d553da3f6901b3d75c13011f024974daf79a1789c8c632\",\n        \"public_key\": \"5faafeb595f16d338f1c72a9f3e498f38bab69a81b37d2d092b7bf7e505d820d\",\n        \"message\": \"861a1018d6bdc4805a5c4df87efaa462c68b4bf4065c684c2af131c6377388baee58c6c8f8842362ec6e3bce07c8af55885e82db87a15227800dd33afc5e5fd15701e95f53501b1a6ff83c64e8517149bf3ff011b094a09c673d0fc4a39ee55e69f071177b8aa364e1e256064cf70279cc76695ae49dafcd80ca0a14e1691db946422ec75ab4f7865915a69bd48d89b12adf487d4db9be87cddca211aa88e9bbe849da213989eb0844592ad63e281b2e4afe6a8836006609926c0f787e84f2a95b46b66f0e4555c9483ce2176fc63f7cc9f4f2a22db055aae2e68b30a0da5feb80c2a60ea10dbf67fbbcdbe0be33f2e9c13c469e7768f2ff5960a55eb482ec11d47e154b7c42a5fb756c8ad539b33d125a4a65192c6c9bd576238ca72a73cd179e8cf5cd048ed330213823abbafc3682b2b7f68c5bc46fd09a8cb2a3fd099573ee2e6f28c82e271bb5ef934b0b0c381cfaaec666d717106a874af30aa74125eae9acc2f1f24118cb4e683a731e37e5e464a1ea3d2a53cc0dcad4c17cea9a43e2365f3ae3dd89eb39977420045550745fc267fc7dcc5602e914972a4da6ebeb687f68a0cd7d8b4fdd73722106a8e436b93e5b58f5982acecdecfdb382fe98538261426ba64052557643ce9fec71ea43cf5b6cbadeb4953193ff3ed1a1f922a9af2ec6f338e7fb0affe3d13c33e395873e4a7a7fb044981e05a67197b996b199b43011119363e561d5b8a51784fdff58ab80ed4c49e93f0cf41924f9835efb09f64463b65517b67b15dc3f28ad9a9b2d29468de2c63e62004b6a3fd0c5c2e2aaa6cfa15e4faafa1e2c713e98d3fd25cab9e5170359c8365152b474276ed0037cdf771828e2fb7ccec4895f21adcc5b6887c86e51ad05f255f6e9dad2c41f56b98b7bbbf9fcb6ba8cadfd38ad8c62f92dd87740fa1e1bd170c00b2049c5130fe733f16b1f2c7f00b2ef97b3a95458c53f199d465336d5ff5977806e1afde3eaa246d85cabf7e123481e23929976ed19c40e29ff33d80e7deab19271decd5ee06172b0b0a139bd62a2e7c83a8a65601d0a05d61af9c6032df58001d473e20dd6c6afd78ddbd7cd178e9c271e0572f85982823ce6c402930cf80f5e0c7cda85122a76d1ce021b1e3de2556d1b45ac7b01b59cada25291d638a52a5e7dbcddf96bb1774ab0b077e4b3da5a958fe11dee4a02e69b918ddbfa1c5b3b7dca9f8784bb6b0b9d5a7fee74bb03747f61c2b2f1b492452d3b560b48d39d8721e983752556d44da6b028d9aef8bff9aa379c8e2b0a636d748860abd8e64fc8e96520a34a27f767aa97a8f77b6095218ead\",\n        \"signed\": \"0611b19a7472a443e87e54d7c6647faab1b79a83fd4371c92b975400fd628acfc32577ccbbaf03d88f893c88f2cac784c722a08f387abc319a702c868479650b861a1018d6bdc4805a5c4df87efaa462c68b4bf4065c684c2af131c6377388baee58c6c8f8842362ec6e3bce07c8af55885e82db87a15227800dd33afc5e5fd15701e95f53501b1a6ff83c64e8517149bf3ff011b094a09c673d0fc4a39ee55e69f071177b8aa364e1e256064cf70279cc76695ae49dafcd80ca0a14e1691db946422ec75ab4f7865915a69bd48d89b12adf487d4db9be87cddca211aa88e9bbe849da213989eb0844592ad63e281b2e4afe6a8836006609926c0f787e84f2a95b46b66f0e4555c9483ce2176fc63f7cc9f4f2a22db055aae2e68b30a0da5feb80c2a60ea10dbf67fbbcdbe0be33f2e9c13c469e7768f2ff5960a55eb482ec11d47e154b7c42a5fb756c8ad539b33d125a4a65192c6c9bd576238ca72a73cd179e8cf5cd048ed330213823abbafc3682b2b7f68c5bc46fd09a8cb2a3fd099573ee2e6f28c82e271bb5ef934b0b0c381cfaaec666d717106a874af30aa74125eae9acc2f1f24118cb4e683a731e37e5e464a1ea3d2a53cc0dcad4c17cea9a43e2365f3ae3dd89eb39977420045550745fc267fc7dcc5602e914972a4da6ebeb687f68a0cd7d8b4fdd73722106a8e436b93e5b58f5982acecdecfdb382fe98538261426ba64052557643ce9fec71ea43cf5b6cbadeb4953193ff3ed1a1f922a9af2ec6f338e7fb0affe3d13c33e395873e4a7a7fb044981e05a67197b996b199b43011119363e561d5b8a51784fdff58ab80ed4c49e93f0cf41924f9835efb09f64463b65517b67b15dc3f28ad9a9b2d29468de2c63e62004b6a3fd0c5c2e2aaa6cfa15e4faafa1e2c713e98d3fd25cab9e5170359c8365152b474276ed0037cdf771828e2fb7ccec4895f21adcc5b6887c86e51ad05f255f6e9dad2c41f56b98b7bbbf9fcb6ba8cadfd38ad8c62f92dd87740fa1e1bd170c00b2049c5130fe733f16b1f2c7f00b2ef97b3a95458c53f199d465336d5ff5977806e1afde3eaa246d85cabf7e123481e23929976ed19c40e29ff33d80e7deab19271decd5ee06172b0b0a139bd62a2e7c83a8a65601d0a05d61af9c6032df58001d473e20dd6c6afd78ddbd7cd178e9c271e0572f85982823ce6c402930cf80f5e0c7cda85122a76d1ce021b1e3de2556d1b45ac7b01b59cada25291d638a52a5e7dbcddf96bb1774ab0b077e4b3da5a958fe11dee4a02e69b918ddbfa1c5b3b7dca9f8784bb6b0b9d5a7fee74bb03747f61c2b2f1b492452d3b560b48d39d8721e983752556d44da6b028d9aef8bff9aa379c8e2b0a636d748860abd8e64fc8e96520a34a27f767aa97a8f77b6095218ead\",\n        \"signature\": \"0611b19a7472a443e87e54d7c6647faab1b79a83fd4371c92b975400fd628acfc32577ccbbaf03d88f893c88f2cac784c722a08f387abc319a702c868479650b\"\n    },\n    {\n        \"secret_key\": \"73872b14762f68dae4fc10dfd6f42d3f9622bf2afe6b34a95649aa387424ee6c\",\n        \"public_key\": \"dfab2ce1ab9981aa7cbf3207350007fa6ce6ca60a2ed7b590f3c2f62922d8f61\",\n        \"message\": \"433d71781ceab2b47d826e67d39f9b80d2ffd725f8c5aeb40cbe4f9b5f48ef93521ccec604360b9647323190bfef75ac931562d27f4a4e31f46e57bc99fa5158c82e12b737e45c5de9f7dd7c8622d4a7eaadf7202fb49d819c9ad24f8807313c5f37dc20453bdf05c9bf1a3c2117c93e7f3cc8a2542098e8fc1c642fa47b05543657b85f480bc86ec42800bb1422359c7c3e8ff4be598bd54f1dc586acae45a4740622b962742bc86e17cfa63e775354e7707e5079589e8d108b1f11dace0575cb9a6d26b59fce981465d9bc344ea6945a95b862796384fa8170560857457beff95a9b5ac3d6ad282d44929a303026b4bbedd60e2ef055a31f52d7ce8df2ca5d1851c5b167db0809259bb812569074105c734c85d6231273755f3a8b56dc508db5c23dacb7a06167bda51bc01350f016cd41b21e8cc5bc93343a9bb6ea4738c5c84b78fa963c410e433dc598196c22e5b791e12a4b343f7cd47bbb0eb0782bdb1a4e466846a030528eeb89056f73257193adaabc1b229862034878c3258a532548762e29ecc001abd989649da5e144cf35d48699f23bc46c5b34e04a53e72724b2b0b878982575d688e23cbe3a34067f4971e555972ec2908ae5f03e8831ec67755be95687ce6372939e1e2fb6951ec9ecf4bf7d1535431e259f29ad431222b54b65aa7d07cfb5df162a87c4d03481eb441f221d7f58627a14164e7f4c2e3a1d507e899d5358e00829b08cf3aecb8a75b2a31c3185a580e12b13f0642869fffb056723e961aaf6fefe67b4a7c4c93db3fe1f61adcc765569a99c09a3c824ed4a98babeae43efb1f351ba130e22aa97811986be923cc4180a7c4b78bcc140cec15574654aa6d65a06b97ecfa5f3a9355f96e4eeaa7689217b663fba4dab0d99b19c8d8dbf47a157e5d5969a35ef84dff9562edd434e73aee7d0d892dda72a362a22a7e9fa8634a57eebd1a907485ca8921bdc19ee9ee588f395687d3fc8f8c25f2e9576ca60313fbb2c265a99f2cdd5575b1dd530604e9ad6695c9fb35994a8b87d5c8570549a4d329b9fe087069ab7eb0d714a94e19261f86e448f2da9b1cb0c0dbe41d44c3a824783d1bdbd7326051aeb10adab805c5c59d0e83b1c11a2fdd35e444a499ed15dafd83862775f6cdfc67595818407be55ecbf7bf86c73069aace577626a8563536f605042cf7caaf6fc8e3b545b77414df8d9f649b99ee42541da38c3aae627207845b8f414a8074d70868a5c0b07b070c3c653be04076b83cad7b0305d9500aa44455cb860dcc76400af93c3d2efb42ae056f1428b65f122e1c7b9584d814d50ac72efdb\",\n        \"signed\": \"8525c346ca3a6a6c5f65c41778599377659870cb6df9a4a0e55b40c35beba55c8e009e5600b6447dc7402ba27749297e8f9528691856f72d2ad761ed1bc15309433d71781ceab2b47d826e67d39f9b80d2ffd725f8c5aeb40cbe4f9b5f48ef93521ccec604360b9647323190bfef75ac931562d27f4a4e31f46e57bc99fa5158c82e12b737e45c5de9f7dd7c8622d4a7eaadf7202fb49d819c9ad24f8807313c5f37dc20453bdf05c9bf1a3c2117c93e7f3cc8a2542098e8fc1c642fa47b05543657b85f480bc86ec42800bb1422359c7c3e8ff4be598bd54f1dc586acae45a4740622b962742bc86e17cfa63e775354e7707e5079589e8d108b1f11dace0575cb9a6d26b59fce981465d9bc344ea6945a95b862796384fa8170560857457beff95a9b5ac3d6ad282d44929a303026b4bbedd60e2ef055a31f52d7ce8df2ca5d1851c5b167db0809259bb812569074105c734c85d6231273755f3a8b56dc508db5c23dacb7a06167bda51bc01350f016cd41b21e8cc5bc93343a9bb6ea4738c5c84b78fa963c410e433dc598196c22e5b791e12a4b343f7cd47bbb0eb0782bdb1a4e466846a030528eeb89056f73257193adaabc1b229862034878c3258a532548762e29ecc001abd989649da5e144cf35d48699f23bc46c5b34e04a53e72724b2b0b878982575d688e23cbe3a34067f4971e555972ec2908ae5f03e8831ec67755be95687ce6372939e1e2fb6951ec9ecf4bf7d1535431e259f29ad431222b54b65aa7d07cfb5df162a87c4d03481eb441f221d7f58627a14164e7f4c2e3a1d507e899d5358e00829b08cf3aecb8a75b2a31c3185a580e12b13f0642869fffb056723e961aaf6fefe67b4a7c4c93db3fe1f61adcc765569a99c09a3c824ed4a98babeae43efb1f351ba130e22aa97811986be923cc4180a7c4b78bcc140cec15574654aa6d65a06b97ecfa5f3a9355f96e4eeaa7689217b663fba4dab0d99b19c8d8dbf47a157e5d5969a35ef84dff9562edd434e73aee7d0d892dda72a362a22a7e9fa8634a57eebd1a907485ca8921bdc19ee9ee588f395687d3fc8f8c25f2e9576ca60313fbb2c265a99f2cdd5575b1dd530604e9ad6695c9fb35994a8b87d5c8570549a4d329b9fe087069ab7eb0d714a94e19261f86e448f2da9b1cb0c0dbe41d44c3a824783d1bdbd7326051aeb10adab805c5c59d0e83b1c11a2fdd35e444a499ed15dafd83862775f6cdfc67595818407be55ecbf7bf86c73069aace577626a8563536f605042cf7caaf6fc8e3b545b77414df8d9f649b99ee42541da38c3aae627207845b8f414a8074d70868a5c0b07b070c3c653be04076b83cad7b0305d9500aa44455cb860dcc76400af93c3d2efb42ae056f1428b65f122e1c7b9584d814d50ac72efdb\",\n        \"signature\": \"8525c346ca3a6a6c5f65c41778599377659870cb6df9a4a0e55b40c35beba55c8e009e5600b6447dc7402ba27749297e8f9528691856f72d2ad761ed1bc15309\"\n    },\n    {\n        \"secret_key\": \"67cf27155287be6bfab66215e017c3466322f21e6eb140be4f1bdecf55abfdc1\",\n        \"public_key\": \"d070aab295a8af935727c3be442b251db9e774d2f44b3c2424c52fc89656e169\",\n        \"message\": \"0ff05297031c892774cb2c01e8ca60ddd0ceacc0b8d591a891e33b19e1be9e363bc6420d6f529f04840b3b08853c835a03e036978b04a4f9ec6be4aef331956190996dea272619f1686d33bef03dbc085a923a0f115b78f653feeb60bb9e45f34fb8be5a4cbb648c7d29956f0d0e96bdd3c8d0649720624cbc2079e84fd6d010241124098459f12af2991d3828770f50b104ea6e5f51fdad30a9b8079d2159e46d64af91d07c10ed19814df2afe660d7d8f2403534e92c62e1ea6d688203bca3d97c2afda83b255520ffe92a33625772513b1fe34fafe32b6a9b8cf994df7e634e686591e5f0073ababc64a89210ba53a4991c11557e0334e6c6a5036c642a318f2295117139085fb34075647006758e32bc00ad109fe803f7ee9f5ec2af4d25c3070abc51cf4d78e13a7ce283d4fb4eb41d3e8ce90238500ae0ceda320ec5922efa10b903748e1e853a3729d24c105439df2f7000123db9b2c01533bbf0d028ebb2fc00dce38ad06328ee9ecd849a6efc3ae884ef6933cfebed055bb2968a0b0676b5729216178c7519ef0788593fc0dcff50d7e0b1ebb3cf49bbd1bfa5c30ea7b88c36e1a1593aef0bb3f9e2091c8589f7414beed8df466a2ed87b2cb5f35f1d31246ceb968609253615d78043517379ee6974a669cb48da6ac2f96d700b7e44a435cfefec402a1e3110e76981924f2601c01dc03546fd4f511649302f0633dfbd25651c5a599c90954489c76a65ec05a7e4cc74616ce25601cc37b804e1f0bcc8651023b12e13568441e8b8ef4c305fcdad3d2b13fa080324b2fd6b61998cf864b658bc7fefcc48a5a7681d7c866c342c7f5d6cf10881522cc710257d25a4c1e352d270e902082ab9541d5900ceffa0914b16b55e0dd3786e98d41720875a148eb4abdb0153856679fb98c0ec485e5f458d635b7861a2b3a8ba5ec2c1444d353980200e5e071808854a268cc76c605c94f37329c36187a41fddf92aabdb4996a0e10b315526afeac80eb2fa32af786a34316b36111ee9352108144d70f7d1723b32f4dbaa82201353411d657713e55e35df78580b1bc08680f0159fa116faf463566aafe8aea69857e72e44ac809ac43f5c45939d85a1a5f4a370a18996c8514a46f34371ef9e5fb204422c934a1d293d101b8c16f99cc073ea366a13a45c437d620d132b74409cbf8b9c075b4163f726aa67e509a24874fc1b1fb6fb7c7355159c02aa13e64badf150356b1841b321f8041e13ed77e8461cfbb8e828488bf517a5d29ff82e7367480a8edddeb5350e7a83423bd0b1c55f7bb424ca04c205723cd5405671e733f391600a\",\n        \"signed\": \"c934a3a1aaab78d9269d1e9d13392f72c637bc5de54f04691efc29d473b475025d8d8fe3c523d2d29c41c5f3dec6ca38ce6d68d7ff09b6135ba24d0d32cc15020ff05297031c892774cb2c01e8ca60ddd0ceacc0b8d591a891e33b19e1be9e363bc6420d6f529f04840b3b08853c835a03e036978b04a4f9ec6be4aef331956190996dea272619f1686d33bef03dbc085a923a0f115b78f653feeb60bb9e45f34fb8be5a4cbb648c7d29956f0d0e96bdd3c8d0649720624cbc2079e84fd6d010241124098459f12af2991d3828770f50b104ea6e5f51fdad30a9b8079d2159e46d64af91d07c10ed19814df2afe660d7d8f2403534e92c62e1ea6d688203bca3d97c2afda83b255520ffe92a33625772513b1fe34fafe32b6a9b8cf994df7e634e686591e5f0073ababc64a89210ba53a4991c11557e0334e6c6a5036c642a318f2295117139085fb34075647006758e32bc00ad109fe803f7ee9f5ec2af4d25c3070abc51cf4d78e13a7ce283d4fb4eb41d3e8ce90238500ae0ceda320ec5922efa10b903748e1e853a3729d24c105439df2f7000123db9b2c01533bbf0d028ebb2fc00dce38ad06328ee9ecd849a6efc3ae884ef6933cfebed055bb2968a0b0676b5729216178c7519ef0788593fc0dcff50d7e0b1ebb3cf49bbd1bfa5c30ea7b88c36e1a1593aef0bb3f9e2091c8589f7414beed8df466a2ed87b2cb5f35f1d31246ceb968609253615d78043517379ee6974a669cb48da6ac2f96d700b7e44a435cfefec402a1e3110e76981924f2601c01dc03546fd4f511649302f0633dfbd25651c5a599c90954489c76a65ec05a7e4cc74616ce25601cc37b804e1f0bcc8651023b12e13568441e8b8ef4c305fcdad3d2b13fa080324b2fd6b61998cf864b658bc7fefcc48a5a7681d7c866c342c7f5d6cf10881522cc710257d25a4c1e352d270e902082ab9541d5900ceffa0914b16b55e0dd3786e98d41720875a148eb4abdb0153856679fb98c0ec485e5f458d635b7861a2b3a8ba5ec2c1444d353980200e5e071808854a268cc76c605c94f37329c36187a41fddf92aabdb4996a0e10b315526afeac80eb2fa32af786a34316b36111ee9352108144d70f7d1723b32f4dbaa82201353411d657713e55e35df78580b1bc08680f0159fa116faf463566aafe8aea69857e72e44ac809ac43f5c45939d85a1a5f4a370a18996c8514a46f34371ef9e5fb204422c934a1d293d101b8c16f99cc073ea366a13a45c437d620d132b74409cbf8b9c075b4163f726aa67e509a24874fc1b1fb6fb7c7355159c02aa13e64badf150356b1841b321f8041e13ed77e8461cfbb8e828488bf517a5d29ff82e7367480a8edddeb5350e7a83423bd0b1c55f7bb424ca04c205723cd5405671e733f391600a\",\n        \"signature\": \"c934a3a1aaab78d9269d1e9d13392f72c637bc5de54f04691efc29d473b475025d8d8fe3c523d2d29c41c5f3dec6ca38ce6d68d7ff09b6135ba24d0d32cc1502\"\n    },\n    {\n        \"secret_key\": \"18c21c0d0de13d4c64497ef0260d66cfd34216981a1b49391ae5cb0e41436e9f\",\n        \"public_key\": \"f7d4dd1e059c36f6d121c0affeb21f0c572b45992f84948b09aafbcd86bb535c\",\n        \"message\": \"68abca7c166afe063e477b80e37db224e1a235de8fcdeb7f427af67e001247cc5e057182fd9b6db8babaa658cf3b3fe4b0763bf88d67311b1190be834018cf57a332922413764620ace05445ee019a06dff98b238979ad6d30901befa3c64f6bd8c6eb092c2e62841388fd8c4e8419e2778984896737ed90a2cdb21996aef7c21638d6cbe680322d08996597a9e303f6f5f47940f8c5ba5f5f76383e7e18064a3d2dff5fdf95e90c5eb30f4d8d459ee1d506a8cd29cdc69b6754963b84d67494b35305d10d12b9487417b2ce28adcb10b65cc931fb3381ae02e7af79a02bf99e258a56361090e0b71222b3ac60bf2fb7ba832d034f5b6bc6fa663ae741f76d97c1ac32bcb7411507d518d2f6054b578328c5f67f758ac01bfe6f4d35900f50a5dcd30d2f9261b6bbec4c1d1fc18d2a7e70c4d36c21faf8cf94a587c3a0d1a9cde7831ae626775468ddcd40a8ba18f42b34188de5741e1be8307b1084586515ec015e4e371d29443a40b0c069c641d8cee5e4611862987c3e356b1293b0518b4a4c8ea97fc5a4db1f0129abee72fb8092ea35c2dab67573850207b8e82718999ad99c4c839eac14636bd5e4d8436a270dd90b8e321302e52a92d891ff1891542ae2caa0d66e0f661eae37b25b08bb2e0eeec4838009778cd525984380983b2baadd7102a1e356734e41d76183829ea9ab8244c336597ca2d67988f281438467e453f562c67b22d0a4dd9fcb46a5f80d299db5f01f59160a19d74c644fa5a940e32c9d8d983bab7efb0d7c7da4e3fda1cd0d18a4558eb9fe46408aab5085912bf2f46ab63a9354f9027c93691223ffaab8463bac4c4bc3b11abc46ba68717c91780d3f30470dbdd88b3780a194c8a40a2c0a81a4d56dec2d8962c34d2ab73369028e1bfeaa6bb58241ff4f898f80ad3bb1c691b8647f2c6983954c1c77957458eebf1c5055c31693abced05384735a4f741968bd6ac31565cfee71c884c1e29e9e7ae0f7ecd04d463b1dc389c36037e81458dcec61d0764032dd589b92afda2fc9028f41ab53cca2d04ec6a9565955cbcf1a3463989c7139bb902a5921e8b2c99c48e13711f0bcc399259516c81ae942a679d4ba33979eb12fcd2860602e4724b1330f1cd257b5b2891daee8ef4c92fc3bfdb34e532d5870f3805986ac97b503fd85873548e30950000f8a70be51fa757603501f2d30e852efeac4826862aed7f6d20c9a8c8dbe362dfee41893f27e6fd5e91d0e7e3d4fd8155f44fd8ef17af14a848d44a87631aeee751462b2a54087068daeab3ea3289ece6212b3b52ce7a8886df2a727b72a570c2fb9c50341\",\n        \"signed\": \"c9c099e21d095afadd4e71c9abf6b7083324776225b587b60a0e6092ecb3d33cff39c67d34776ae99dda754a3c2b3f781135a38c78ed6455aaf0ae0c313b620568abca7c166afe063e477b80e37db224e1a235de8fcdeb7f427af67e001247cc5e057182fd9b6db8babaa658cf3b3fe4b0763bf88d67311b1190be834018cf57a332922413764620ace05445ee019a06dff98b238979ad6d30901befa3c64f6bd8c6eb092c2e62841388fd8c4e8419e2778984896737ed90a2cdb21996aef7c21638d6cbe680322d08996597a9e303f6f5f47940f8c5ba5f5f76383e7e18064a3d2dff5fdf95e90c5eb30f4d8d459ee1d506a8cd29cdc69b6754963b84d67494b35305d10d12b9487417b2ce28adcb10b65cc931fb3381ae02e7af79a02bf99e258a56361090e0b71222b3ac60bf2fb7ba832d034f5b6bc6fa663ae741f76d97c1ac32bcb7411507d518d2f6054b578328c5f67f758ac01bfe6f4d35900f50a5dcd30d2f9261b6bbec4c1d1fc18d2a7e70c4d36c21faf8cf94a587c3a0d1a9cde7831ae626775468ddcd40a8ba18f42b34188de5741e1be8307b1084586515ec015e4e371d29443a40b0c069c641d8cee5e4611862987c3e356b1293b0518b4a4c8ea97fc5a4db1f0129abee72fb8092ea35c2dab67573850207b8e82718999ad99c4c839eac14636bd5e4d8436a270dd90b8e321302e52a92d891ff1891542ae2caa0d66e0f661eae37b25b08bb2e0eeec4838009778cd525984380983b2baadd7102a1e356734e41d76183829ea9ab8244c336597ca2d67988f281438467e453f562c67b22d0a4dd9fcb46a5f80d299db5f01f59160a19d74c644fa5a940e32c9d8d983bab7efb0d7c7da4e3fda1cd0d18a4558eb9fe46408aab5085912bf2f46ab63a9354f9027c93691223ffaab8463bac4c4bc3b11abc46ba68717c91780d3f30470dbdd88b3780a194c8a40a2c0a81a4d56dec2d8962c34d2ab73369028e1bfeaa6bb58241ff4f898f80ad3bb1c691b8647f2c6983954c1c77957458eebf1c5055c31693abced05384735a4f741968bd6ac31565cfee71c884c1e29e9e7ae0f7ecd04d463b1dc389c36037e81458dcec61d0764032dd589b92afda2fc9028f41ab53cca2d04ec6a9565955cbcf1a3463989c7139bb902a5921e8b2c99c48e13711f0bcc399259516c81ae942a679d4ba33979eb12fcd2860602e4724b1330f1cd257b5b2891daee8ef4c92fc3bfdb34e532d5870f3805986ac97b503fd85873548e30950000f8a70be51fa757603501f2d30e852efeac4826862aed7f6d20c9a8c8dbe362dfee41893f27e6fd5e91d0e7e3d4fd8155f44fd8ef17af14a848d44a87631aeee751462b2a54087068daeab3ea3289ece6212b3b52ce7a8886df2a727b72a570c2fb9c50341\",\n        \"signature\": \"c9c099e21d095afadd4e71c9abf6b7083324776225b587b60a0e6092ecb3d33cff39c67d34776ae99dda754a3c2b3f781135a38c78ed6455aaf0ae0c313b6205\"\n    },\n    {\n        \"secret_key\": \"db9aaee198cd26a52b1181fa3fd92abe425e666d890bf969467dd2ce280ed4a7\",\n        \"public_key\": \"3c897cafe2b499ecb2e1dd01ea55f3fc88f68c25b64a636b31a1fd1c78f37f3f\",\n        \"message\": \"47fb621561f8b7eecec6033f2bcb6f43ac68c958dfd2656f52a0c29b4acd44f4304c6bf77eeaa0c5f6d3b22db19699c3dcdede698abde623ec4b2b90910c80ac3af39c550b6dd409e63d77706655a9199cb5c0258f5ba38285ffdc64b8a8f373d1fb29ba87f84ddf5f34d8f140bbc17b3961682df5d0a8f9102e379a9998139dfe40ab8ce753bf5626108237771a7d8e109e9e0afe9b66d0420942e163a4f3c03f71813ee078bd090ac3d0772e2622c259e682552c75b08dd055a4a5eb5e609440bcd3f3a6feb876fd16921520c6cb6884710d2e15cdad6daaeed95962dda21c6788f784917917982e1ccbb5fdd9bdc1769db6b6db57ca354e01a1339d8e77e9dbbb5812fbab6a14c54085c0659599f150e22472470f1e5e672c425f375f9e0d6e8d52fa17b7a8d7a4d7ca3e12f4db53836aed2bebd74589baca8ce9100291bfb7e456db7f2f0a84dc0a7488851366a9a5fea0e3efc74b9cdd4bd97b65abf361393ce1703d8571805ee68a13d3654f03dcecfb77a53430d09496ad73ec01759957e51046aa7396f592338650117ac7b4dd3573eb53d9c9f9dfa62e2369c77af9c0d42f61bae74b287ddfa27b7f1c1be9883a044691d56dc13734ad4ee3a32a9f40e328c500d0fed8ea0510e938f2758004022bcaa6902bda1014b8ae3365272829ed94faba63cb14a36cf81390eca83fc1c627172013261b3993779aa076a5c5d81d90d27062e1a6d90b5cf1005c701917b7adac180cb75bbce0f27f2f180e2cb90140c14cc6009d2d41aab1db9418f91d4cf394002cd70ac9dc11ce865347fa3f56f87c149e2b17d2c72b663a58e3187bb19b9bac2d11483ba12f770ac04dc46d388518fa54dc152e9a9dfbff14f14c61cb375897e30c53e6de42d5e1401dae1b22baaa0e8a41c6af9d0e0b13a91a23d9b7d5552047029a3521946c7120d3d258b3aefcf754d1959487a1fe7743ac7e1cc89e368b197809c3a27317e0ec48d546db1e21eb629a29bc6247cdd4a1371437563edd12faea2c5cb77eededbfc58008fad1f65af35843fa274c734e3fbbaa9cc50d683748b75a485f94d630b032a5f1067d1deb30e9d2218c935c981d01c0c547fd68413136edf4c0c770286e823442e1c513651929213c121c1de700989141ab4af3b3fe7404b4d2a38c530bafb498e64953ce1c0fb7d340e21135bf8afdd8dd65b1b18cf1c8fb9f402b2670400b86ddafb184cc51d5fda273b80c26521f912f3583b4ae301dae151cb55c75703aadef032415227d53e395db6c150a1ee839ad26bae552e1ab736214dc04b0f3c41b7cfbd049681bc84c3d16530768\",\n        \"signed\": \"b2e3d9c5d0ff329996bc89d26fb3ac126bded313cbf8df86718638c199e057273d09eb163c6c181fd8bce51f72d4d9d2e84abbe08330773b9fcc2166f140d60e47fb621561f8b7eecec6033f2bcb6f43ac68c958dfd2656f52a0c29b4acd44f4304c6bf77eeaa0c5f6d3b22db19699c3dcdede698abde623ec4b2b90910c80ac3af39c550b6dd409e63d77706655a9199cb5c0258f5ba38285ffdc64b8a8f373d1fb29ba87f84ddf5f34d8f140bbc17b3961682df5d0a8f9102e379a9998139dfe40ab8ce753bf5626108237771a7d8e109e9e0afe9b66d0420942e163a4f3c03f71813ee078bd090ac3d0772e2622c259e682552c75b08dd055a4a5eb5e609440bcd3f3a6feb876fd16921520c6cb6884710d2e15cdad6daaeed95962dda21c6788f784917917982e1ccbb5fdd9bdc1769db6b6db57ca354e01a1339d8e77e9dbbb5812fbab6a14c54085c0659599f150e22472470f1e5e672c425f375f9e0d6e8d52fa17b7a8d7a4d7ca3e12f4db53836aed2bebd74589baca8ce9100291bfb7e456db7f2f0a84dc0a7488851366a9a5fea0e3efc74b9cdd4bd97b65abf361393ce1703d8571805ee68a13d3654f03dcecfb77a53430d09496ad73ec01759957e51046aa7396f592338650117ac7b4dd3573eb53d9c9f9dfa62e2369c77af9c0d42f61bae74b287ddfa27b7f1c1be9883a044691d56dc13734ad4ee3a32a9f40e328c500d0fed8ea0510e938f2758004022bcaa6902bda1014b8ae3365272829ed94faba63cb14a36cf81390eca83fc1c627172013261b3993779aa076a5c5d81d90d27062e1a6d90b5cf1005c701917b7adac180cb75bbce0f27f2f180e2cb90140c14cc6009d2d41aab1db9418f91d4cf394002cd70ac9dc11ce865347fa3f56f87c149e2b17d2c72b663a58e3187bb19b9bac2d11483ba12f770ac04dc46d388518fa54dc152e9a9dfbff14f14c61cb375897e30c53e6de42d5e1401dae1b22baaa0e8a41c6af9d0e0b13a91a23d9b7d5552047029a3521946c7120d3d258b3aefcf754d1959487a1fe7743ac7e1cc89e368b197809c3a27317e0ec48d546db1e21eb629a29bc6247cdd4a1371437563edd12faea2c5cb77eededbfc58008fad1f65af35843fa274c734e3fbbaa9cc50d683748b75a485f94d630b032a5f1067d1deb30e9d2218c935c981d01c0c547fd68413136edf4c0c770286e823442e1c513651929213c121c1de700989141ab4af3b3fe7404b4d2a38c530bafb498e64953ce1c0fb7d340e21135bf8afdd8dd65b1b18cf1c8fb9f402b2670400b86ddafb184cc51d5fda273b80c26521f912f3583b4ae301dae151cb55c75703aadef032415227d53e395db6c150a1ee839ad26bae552e1ab736214dc04b0f3c41b7cfbd049681bc84c3d16530768\",\n        \"signature\": \"b2e3d9c5d0ff329996bc89d26fb3ac126bded313cbf8df86718638c199e057273d09eb163c6c181fd8bce51f72d4d9d2e84abbe08330773b9fcc2166f140d60e\"\n    },\n    {\n        \"secret_key\": \"a804c33b4d38cb3ce31cf3bac1049e0d4ec63a1a0b7b59fd8a36ee37541656aa\",\n        \"public_key\": \"6072256d6574a293bd7c221c551c32cf2f7715e19e433a49d9b8b0490e56ef62\",\n        \"message\": \"dbfe307f2aae9e07ec7c4b682106d2c9367b0c4aaa58ae804e0a3904754e6cf8fee73cf9e2d45d0289e5078293dfc469d46ea67026c5aa692d2f2c9fb4ec57cdab4c043ff9ae6185f27a704454e5f53950aabd25c9910474d45af8836862723e0e6a27823d82bcbb68a96052422a1819512e3b43408cf48957ad6ae235b7233df18284749153dfa57de35074a30edfab8a56df28ab2e2940306c221aa55490cc664e14683f30ee615e2d93fdf971f596663465843b3add6392ba3390311ef8dc59f251445d669e10a0061991e113561923aa215244463d8264199ac588924e231e8419d8685f338e599b5f40bf9bd1aece772535bbbcb8f6881c2e800491ab3b57b44b8ae43aeb5c4ae5e7edeb228fedc9f6b9cadea176e134936ded60af1c228734fb00570f2374bbbfa1bb170785805d6b6c701e820952eae45b8c2366113a1dfb2e35852af419b754f9cf7a081c3dde6c8053bf1ce0c85339d5699c422476fc21f26ce75d2a7fed09fc0f4175789847d876c51aa4e0bf7ce842b8308dc7a28c8239520714dc233136e09f557c7ef3e0f83bad63cb28ac616d3928f3837dce1dd58acb8ddbc72e822deee45f00776acc88e00cd3a9db486d92d535a57a0fdc4f903b62e517221c308cba2e30ffe7b91937a99417721f56fe6df44840e9e41136929c0ca3dc28ddf2379e4dcfde83723e2d4c9e23299c056afb31d3e70d085d0a312c5cd570b699dea8717458531348c96f6eb52d7ee61d5660f65e909a14ce1033dc853f2f25d09cf4e40d07eff72e15a390564a2be3c042d89a68660a97ffacec4967a4b618712d7060756520c29ee8d9220ad8615c4fcf3969bd3b2e0947e1f0be7e2d80e0a61480c3166db5582218bb0a8be9848efd41b6ce0cd795c486abb67210beb60cd078b46aeb7f4f485031902bcd7131e00b7035aa2d43fee063f7f30bd570da1dbb65c0ca92a4812632e432778553e35e856caa8218221fd6316ab0869173b38409bcefe6d2db9210f9024173b66dbb92677cbc71c8a1cd583fa6f354d3c93fa8b16c71374f25a00c332f85a8befd540388fb50db9f5d96e4e4e698833ce3d63c10b8eec70a243b9015db459431b62f5668bba60f0704f6bdfe9546ea475cef2ebccba4b7680848e82beff5854e49f65bb773a4922e90f9b8afc7cf818730588ed5aa7b399826aadd54372fcb761458b64de66857f4adacd4c32900cb77136a535d7bbbb554597aecf39ff698b45e6a218df1d2abe615eb8d9e1824c0becce90767899ebfd2c730144b32c74604c0e53e2505bb15d28007a87b9931d6eec0a6cb5b0f96d3194b2423\",\n        \"signed\": \"b1b44a142a7c4c3d0bf4661edac5b767005726c14a2769b7c214fb58737ec2e4bc51c3a195d2ba1b74a54eff4c33a90f41ccdefa9e9365fde8dd859fd3978c0adbfe307f2aae9e07ec7c4b682106d2c9367b0c4aaa58ae804e0a3904754e6cf8fee73cf9e2d45d0289e5078293dfc469d46ea67026c5aa692d2f2c9fb4ec57cdab4c043ff9ae6185f27a704454e5f53950aabd25c9910474d45af8836862723e0e6a27823d82bcbb68a96052422a1819512e3b43408cf48957ad6ae235b7233df18284749153dfa57de35074a30edfab8a56df28ab2e2940306c221aa55490cc664e14683f30ee615e2d93fdf971f596663465843b3add6392ba3390311ef8dc59f251445d669e10a0061991e113561923aa215244463d8264199ac588924e231e8419d8685f338e599b5f40bf9bd1aece772535bbbcb8f6881c2e800491ab3b57b44b8ae43aeb5c4ae5e7edeb228fedc9f6b9cadea176e134936ded60af1c228734fb00570f2374bbbfa1bb170785805d6b6c701e820952eae45b8c2366113a1dfb2e35852af419b754f9cf7a081c3dde6c8053bf1ce0c85339d5699c422476fc21f26ce75d2a7fed09fc0f4175789847d876c51aa4e0bf7ce842b8308dc7a28c8239520714dc233136e09f557c7ef3e0f83bad63cb28ac616d3928f3837dce1dd58acb8ddbc72e822deee45f00776acc88e00cd3a9db486d92d535a57a0fdc4f903b62e517221c308cba2e30ffe7b91937a99417721f56fe6df44840e9e41136929c0ca3dc28ddf2379e4dcfde83723e2d4c9e23299c056afb31d3e70d085d0a312c5cd570b699dea8717458531348c96f6eb52d7ee61d5660f65e909a14ce1033dc853f2f25d09cf4e40d07eff72e15a390564a2be3c042d89a68660a97ffacec4967a4b618712d7060756520c29ee8d9220ad8615c4fcf3969bd3b2e0947e1f0be7e2d80e0a61480c3166db5582218bb0a8be9848efd41b6ce0cd795c486abb67210beb60cd078b46aeb7f4f485031902bcd7131e00b7035aa2d43fee063f7f30bd570da1dbb65c0ca92a4812632e432778553e35e856caa8218221fd6316ab0869173b38409bcefe6d2db9210f9024173b66dbb92677cbc71c8a1cd583fa6f354d3c93fa8b16c71374f25a00c332f85a8befd540388fb50db9f5d96e4e4e698833ce3d63c10b8eec70a243b9015db459431b62f5668bba60f0704f6bdfe9546ea475cef2ebccba4b7680848e82beff5854e49f65bb773a4922e90f9b8afc7cf818730588ed5aa7b399826aadd54372fcb761458b64de66857f4adacd4c32900cb77136a535d7bbbb554597aecf39ff698b45e6a218df1d2abe615eb8d9e1824c0becce90767899ebfd2c730144b32c74604c0e53e2505bb15d28007a87b9931d6eec0a6cb5b0f96d3194b2423\",\n        \"signature\": \"b1b44a142a7c4c3d0bf4661edac5b767005726c14a2769b7c214fb58737ec2e4bc51c3a195d2ba1b74a54eff4c33a90f41ccdefa9e9365fde8dd859fd3978c0a\"\n    },\n    {\n        \"secret_key\": \"f820e6f24a8418b6acda165f29a360f767cdedde8f64d768b95fc2a5f3f404e7\",\n        \"public_key\": \"79c4b263b2e58f678628d4ea82b175aca230b9a20285c828f94e1ffd63d75b23\",\n        \"message\": \"ab6bd45bb06dfb9069118ff998f3bd393ea8e944979e89e049f2505cd8931b93086b7e9d8ee764e9b447ea4ea12138bb45275a21a19843f75dc5421d61ffd861838e5833825d67162f3259c26447be51dc1802ef5a04ba73b783935706abb42c513b65f2bbc44f83da1061242f2d5e5198f38c10717a86a3a197e7cd9034f636114499037277acb4722c06a91cb2f65e21eb8d22d36ad73b4265f7a7947e00e722bda67043cd1281bcd87e763fc97b54c8f86836cdbf08c9a1f700f4eaed9ea59a6fc1bc0df8c9ec1fc2977cad60f978abc0c8381aa9fb060e3f99378a51b2d9afbef358d55162a38922ebb87d2a3e0f0f4000b1c39b1502e95945e8ac9f4a3ea7c9ddb581a5ec06c00ba87a737084b384faba09c84871ddd67dc1bebb2f7fbd94a5597d019fe629e5bf12bea2e33ca84c680dc5a3989bbf3af9eeece8ab8fc861e3b8bfc1e67e2aee326b37fb9b51cfa0b5f5fc160069b450b704e0fab7fb6c5ab3c40b8f0b3d0930b9112d64b9dacab4dd875f29d8c58c5d2053ad9148ffde22d90bc0d50f5deca68d3ea25c5b4c7688871c0c77dbceeacbd0a4229f4970ec87b34499e278303c06694c30ac68524d11b172794b481273a5dac46122d2472095a563a435d185d5e91da726e74592999cdac688a33f38f7c035588f625dc6ac73d0047ab3d6d12f1ae33d8b62d6d6c6cacff0bdd894b57e318912ac0cf4a534762b2f6d263c935804423ed868cf8cfbb8be8f6d8a714a268a390edc2dd509d2dc96851d1bd43249bd0f69b0c4cb2ff4080d1fd5622bc238dda6e930025d8a2b12b972f9eba17421d4cea642f40ad9ea8547ae59498c3ad1b9a0c34ed8c01aae3bd21ac17743b577f9515cfbdde2704dc57e80f125323d55100b9f697927d431dfe73631b58e52aa6aeb0478bf459552438689fbeb9c60d87aae09954362cd02a2b0b479efd38f17821af39b21926ee02f7d972ad0f54ea6572cc3ebd020b1ee26882533bd19114323815f672ec8c90568730a58e4e1e35f6821219a32b8a6c52ced6f9573d9f3beb28513ba62fb201f7fd41bb10ca34bb1c70f2fd7bb9299a7c5f7f2e0fa1d1af0e9aef5ede7c16950e860ecd61f1842a1a22c9831c0c0d4eda840b088a54520c9b18c76eba9bebcd591381c180d7f86a0e58add92b9b0c8076a7cdcab60dea4c1afb18c8b94b1b392ccfb4dae2711e7d12d2bc7c7825f63992ec3247163c283b1075e32245f69cf47240aef0db43efae86fc1fd3bb99cf5b789f5bcba9504657d9e622a4aa16f01d4d844413124447d6d1a4423e7b55db7e6a31a319f4bacae430a33a9bdd4ef3680\",\n        \"signed\": \"f9fd72f321ca2133bf8585908d9ca7b8e336227e3ffb3749a1fbe8c9b1e5d50ef01f9db5f0d2a7c7c1399b97c9044e1bc1adc32b8bea46dad7b8102646960303ab6bd45bb06dfb9069118ff998f3bd393ea8e944979e89e049f2505cd8931b93086b7e9d8ee764e9b447ea4ea12138bb45275a21a19843f75dc5421d61ffd861838e5833825d67162f3259c26447be51dc1802ef5a04ba73b783935706abb42c513b65f2bbc44f83da1061242f2d5e5198f38c10717a86a3a197e7cd9034f636114499037277acb4722c06a91cb2f65e21eb8d22d36ad73b4265f7a7947e00e722bda67043cd1281bcd87e763fc97b54c8f86836cdbf08c9a1f700f4eaed9ea59a6fc1bc0df8c9ec1fc2977cad60f978abc0c8381aa9fb060e3f99378a51b2d9afbef358d55162a38922ebb87d2a3e0f0f4000b1c39b1502e95945e8ac9f4a3ea7c9ddb581a5ec06c00ba87a737084b384faba09c84871ddd67dc1bebb2f7fbd94a5597d019fe629e5bf12bea2e33ca84c680dc5a3989bbf3af9eeece8ab8fc861e3b8bfc1e67e2aee326b37fb9b51cfa0b5f5fc160069b450b704e0fab7fb6c5ab3c40b8f0b3d0930b9112d64b9dacab4dd875f29d8c58c5d2053ad9148ffde22d90bc0d50f5deca68d3ea25c5b4c7688871c0c77dbceeacbd0a4229f4970ec87b34499e278303c06694c30ac68524d11b172794b481273a5dac46122d2472095a563a435d185d5e91da726e74592999cdac688a33f38f7c035588f625dc6ac73d0047ab3d6d12f1ae33d8b62d6d6c6cacff0bdd894b57e318912ac0cf4a534762b2f6d263c935804423ed868cf8cfbb8be8f6d8a714a268a390edc2dd509d2dc96851d1bd43249bd0f69b0c4cb2ff4080d1fd5622bc238dda6e930025d8a2b12b972f9eba17421d4cea642f40ad9ea8547ae59498c3ad1b9a0c34ed8c01aae3bd21ac17743b577f9515cfbdde2704dc57e80f125323d55100b9f697927d431dfe73631b58e52aa6aeb0478bf459552438689fbeb9c60d87aae09954362cd02a2b0b479efd38f17821af39b21926ee02f7d972ad0f54ea6572cc3ebd020b1ee26882533bd19114323815f672ec8c90568730a58e4e1e35f6821219a32b8a6c52ced6f9573d9f3beb28513ba62fb201f7fd41bb10ca34bb1c70f2fd7bb9299a7c5f7f2e0fa1d1af0e9aef5ede7c16950e860ecd61f1842a1a22c9831c0c0d4eda840b088a54520c9b18c76eba9bebcd591381c180d7f86a0e58add92b9b0c8076a7cdcab60dea4c1afb18c8b94b1b392ccfb4dae2711e7d12d2bc7c7825f63992ec3247163c283b1075e32245f69cf47240aef0db43efae86fc1fd3bb99cf5b789f5bcba9504657d9e622a4aa16f01d4d844413124447d6d1a4423e7b55db7e6a31a319f4bacae430a33a9bdd4ef3680\",\n        \"signature\": \"f9fd72f321ca2133bf8585908d9ca7b8e336227e3ffb3749a1fbe8c9b1e5d50ef01f9db5f0d2a7c7c1399b97c9044e1bc1adc32b8bea46dad7b8102646960303\"\n    },\n    {\n        \"secret_key\": \"0a056be039fd55dada441d037361273f206e000a74a05c51c0cbb62743f1f340\",\n        \"public_key\": \"73140217a493a17866fff5154832273df79d5811543c222a39d056b8c970dbfa\",\n        \"message\": \"a5ab147684e4d4a7bcb5a96fb39818e23f56c2d8a744e9123d62083930ab1d0bb532e68714fcec7e6c41134b6b19ddd867fe635c9ed65393ee39c5e8fab456cb5b32797883f3cd9a0902b9796348ee66c691fb4f2bb14764410657c74ab364567879b6fa0a6f4dafd930d9234cd7834fb9d0eedfbb5a394bf0846ec6969c2ef7ce39e3853895ff5b4da31e54341b4272e4a26049189ff28241ceeffb7d2e1faf4f779fa65cac0f5783c60ae77de30ad4465fdb390d42571eff4a63136349937d6caeefcdae229e2f28cea8abf3ffae3c3eccd90670a4212a2bee1ca6a5b54f094fc3231058f5cb9eceb9993be47027d51c18deca41cddaf4e8bc56a99fd270355ff45971950e3437a198ccc3254168dfc1574080802ee101a617fb604e868f8fa8fb30daeb43074de11f2483d916de5643b7cac23d9340508a3fd621ecd25004356a53554ad3ad7d5d25817ad7c9a610008c67ac16ba4211c42f5dadf86c2c3aed825cf2a9b523bfc03dd7de400c67807e139ea5dbce4ee1f7d318889b01a9f44803c322ac3b61e20e6312d0a03bf9927fa33f04ed7e207b16f26502c2983a3a961f224461fe9b64923b1d09189476ae8d001d0ecaae4df60db35f448bb612f9655a5fb144df11d83aa6936886c304949e59aa46df65c22ce7bf289b3c77c25d896be6d51dee10748261688c8b071c856f9962c66775ddf16083dae06587e32a6361199d72097e383ad7439491b5a563a3e6d58da3d5abb1de84890a36b421ce03d484dfd60039638d46edfb60659e3a25ac6e9a935ad6dad50f927bcc2ff99f9924a5b7995dc23c8f301ccc7769f71c18260904a3dcfb817d2d805cb1f196be8b6ecf352bc296bc3f76ea91353f8cf35bcd2b57eb5942773d6834ac50eeadc7e66461d1da098ccec75ff7205215f52459d97620f9f0289e93911db39b21df818fdf0bed45509244633df01cdddb4b75972fa7ea6f73281cbdbbd1bcb00c3bc1b1728eeae0bba172b131f5d30890a341e6b72f7e89dd4b6db3e79b6927586cf2c8ac38dd14f374d7f5bba9f4353def10ddc94d3d1118c5699e38b6b504918e589efe3f7e973fb40e2ebd057de1385e39d699a8f683b962fae4f3902881f1afbed7c783823558c36d68c6875d166fa243eb2ae14f7e6315a6d2ab4e79ea8e16e69d30edc708f1e7af7adafedcd3168898b331878178c4ba8833d20b3cac9d32b8888cc6783206397470a2e7cc4c9809ff79ceac9dc24ca1438c919c8a415e82f0902b4d9cf4ccd576968d5bee81c5f19c7d57b9bada8eab4756ea270dd26129e6122ee2d615242bc7fabff4f8312e686c8f\",\n        \"signed\": \"fab8e5d93d7d46c65ee117c5375e73c9705f8754177fdd46efed4737c28768cc4b95a9c84c529b4b916b28dabd8741183144bcdb483df98af89d8240cf094604a5ab147684e4d4a7bcb5a96fb39818e23f56c2d8a744e9123d62083930ab1d0bb532e68714fcec7e6c41134b6b19ddd867fe635c9ed65393ee39c5e8fab456cb5b32797883f3cd9a0902b9796348ee66c691fb4f2bb14764410657c74ab364567879b6fa0a6f4dafd930d9234cd7834fb9d0eedfbb5a394bf0846ec6969c2ef7ce39e3853895ff5b4da31e54341b4272e4a26049189ff28241ceeffb7d2e1faf4f779fa65cac0f5783c60ae77de30ad4465fdb390d42571eff4a63136349937d6caeefcdae229e2f28cea8abf3ffae3c3eccd90670a4212a2bee1ca6a5b54f094fc3231058f5cb9eceb9993be47027d51c18deca41cddaf4e8bc56a99fd270355ff45971950e3437a198ccc3254168dfc1574080802ee101a617fb604e868f8fa8fb30daeb43074de11f2483d916de5643b7cac23d9340508a3fd621ecd25004356a53554ad3ad7d5d25817ad7c9a610008c67ac16ba4211c42f5dadf86c2c3aed825cf2a9b523bfc03dd7de400c67807e139ea5dbce4ee1f7d318889b01a9f44803c322ac3b61e20e6312d0a03bf9927fa33f04ed7e207b16f26502c2983a3a961f224461fe9b64923b1d09189476ae8d001d0ecaae4df60db35f448bb612f9655a5fb144df11d83aa6936886c304949e59aa46df65c22ce7bf289b3c77c25d896be6d51dee10748261688c8b071c856f9962c66775ddf16083dae06587e32a6361199d72097e383ad7439491b5a563a3e6d58da3d5abb1de84890a36b421ce03d484dfd60039638d46edfb60659e3a25ac6e9a935ad6dad50f927bcc2ff99f9924a5b7995dc23c8f301ccc7769f71c18260904a3dcfb817d2d805cb1f196be8b6ecf352bc296bc3f76ea91353f8cf35bcd2b57eb5942773d6834ac50eeadc7e66461d1da098ccec75ff7205215f52459d97620f9f0289e93911db39b21df818fdf0bed45509244633df01cdddb4b75972fa7ea6f73281cbdbbd1bcb00c3bc1b1728eeae0bba172b131f5d30890a341e6b72f7e89dd4b6db3e79b6927586cf2c8ac38dd14f374d7f5bba9f4353def10ddc94d3d1118c5699e38b6b504918e589efe3f7e973fb40e2ebd057de1385e39d699a8f683b962fae4f3902881f1afbed7c783823558c36d68c6875d166fa243eb2ae14f7e6315a6d2ab4e79ea8e16e69d30edc708f1e7af7adafedcd3168898b331878178c4ba8833d20b3cac9d32b8888cc6783206397470a2e7cc4c9809ff79ceac9dc24ca1438c919c8a415e82f0902b4d9cf4ccd576968d5bee81c5f19c7d57b9bada8eab4756ea270dd26129e6122ee2d615242bc7fabff4f8312e686c8f\",\n        \"signature\": \"fab8e5d93d7d46c65ee117c5375e73c9705f8754177fdd46efed4737c28768cc4b95a9c84c529b4b916b28dabd8741183144bcdb483df98af89d8240cf094604\"\n    },\n    {\n        \"secret_key\": \"220524860cb89ab295bd884f988a57911868693d6b105a80b230f21e57805a7d\",\n        \"public_key\": \"4ab32bc1566a7677e799734dc84181fbb654b813379180f1dd35aef2d324c12c\",\n        \"message\": \"024a54ac5e0163b3a4fdd02f5936888ae2f9b74a6414b53c6381173b095a4ddacfc3a69f19167d0f1ae0c120bba7e9fcb7ccfc796d89ea46ef8058866ef6da7d01a6a142ea69d720c4f805ac5405a8012c3c2a8263b5372d59bf7f4099299013d26259dfd5193ece56179777be51b86bd1ce5f1fc9156f2b3a32c09d86bc6132de576102e2f03c716db5366ccbe742aee3552ac3b39d0ec7d4e4e9626bf8ece031d678d3480905c0e338fb7cc026e3e79cf2c2781ac2a5a40df4284e235a0389e928fc63557dc6f199fcec5f361ea24759fa7c5f71978c0ba245e4b03ae435941c86c81a51430c2dc9927e3b0f4ec4eba7c2745b493987154d7da85b67de21c598407fb2a760804ad05bfdfa45a613224b22a08588ccea3cbdf47a198bebf8cfed8649d6d5f3fa501376bdfba4003dac2237dcace5315b7fefb879a89a85bce6da526fc360cbb4fd554ef013f33b7384cd2b22a88577f3a2d366422aae46417ba916e1646e24404a88b5d53ff1aed2a47baf81fcb4286397991394b2ecc39667ac46c2bdb6d023b33db013457c4005d839015d8851f028ac334fb24bbad2902a4d63ae68e0eca7eaea1e856529647baf1412213754ed50af3f436e9bafc1601639b39d3e52a93a898fb6019fd5ed6e7dfc050e7ce5f3d35ceb5067021c0fbdc708d3f26bd60568d1ed2b612b696235d5333318f9a6c987235a7a07f8c6a9354fb8e734763065afcd4d937764a4f037cc7e7e2b93217f1641684fa81b7ff7986a28b38e95b332e74649e83d0ded795c57f24cf276e0143901bafef0f1693fe7cf10904fb0d880d72e44716a7069daaae742cf0ff3ed92f5f7d1e10e049d8df043631ed0ed4c4ac4022d8403cb0421b454cbfb6f48a30e9ee1609ad7b68211977acb33b9c1a1be735814c58f66db5f0b8ac773b1d58d4e6bc45dfd48a294bbd25e92671f56f302f29b50d80431c8f2ea33996257b208e057ea7672cc2d1cd4204b85b2ab509027131359aeb42e3eccdbaecfe2cd3e5a3313266e761194ff69cae9e37e51cc0a54f086dde13cb33118e34fe33c74d735582752d68d21c79e5c3aaea94ba107cb7ee8a70a3f9a01e9808c0aeba6665315b45625840a033a6e2a875495057942ed9bb2ce6e4ee60bed47cd9d584bc24524397a109498ee2a973aad6a29b70a1cfbfe9aa5c7cb9f35f0fa00227f43988d07619b6fb2f6d3bee28e10ee705347015a922e2e88d34fb0ce515b08df3a1b634ff9ec15d0594182c86ebb0db783612a7d19e4b22e822d566245aed72e694c3d101bfa4ca879862e5f99c23a5d66083ce06d87f399aa7888ab83b8664472\",\n        \"signed\": \"db1cc0c5db773ec51689be28842fa6791a7d75e29c228ae9593a580e0875b1670f09b03442929a18f1e9414ea34315ff09d91d922ee47f10f71da4ab13b7d901024a54ac5e0163b3a4fdd02f5936888ae2f9b74a6414b53c6381173b095a4ddacfc3a69f19167d0f1ae0c120bba7e9fcb7ccfc796d89ea46ef8058866ef6da7d01a6a142ea69d720c4f805ac5405a8012c3c2a8263b5372d59bf7f4099299013d26259dfd5193ece56179777be51b86bd1ce5f1fc9156f2b3a32c09d86bc6132de576102e2f03c716db5366ccbe742aee3552ac3b39d0ec7d4e4e9626bf8ece031d678d3480905c0e338fb7cc026e3e79cf2c2781ac2a5a40df4284e235a0389e928fc63557dc6f199fcec5f361ea24759fa7c5f71978c0ba245e4b03ae435941c86c81a51430c2dc9927e3b0f4ec4eba7c2745b493987154d7da85b67de21c598407fb2a760804ad05bfdfa45a613224b22a08588ccea3cbdf47a198bebf8cfed8649d6d5f3fa501376bdfba4003dac2237dcace5315b7fefb879a89a85bce6da526fc360cbb4fd554ef013f33b7384cd2b22a88577f3a2d366422aae46417ba916e1646e24404a88b5d53ff1aed2a47baf81fcb4286397991394b2ecc39667ac46c2bdb6d023b33db013457c4005d839015d8851f028ac334fb24bbad2902a4d63ae68e0eca7eaea1e856529647baf1412213754ed50af3f436e9bafc1601639b39d3e52a93a898fb6019fd5ed6e7dfc050e7ce5f3d35ceb5067021c0fbdc708d3f26bd60568d1ed2b612b696235d5333318f9a6c987235a7a07f8c6a9354fb8e734763065afcd4d937764a4f037cc7e7e2b93217f1641684fa81b7ff7986a28b38e95b332e74649e83d0ded795c57f24cf276e0143901bafef0f1693fe7cf10904fb0d880d72e44716a7069daaae742cf0ff3ed92f5f7d1e10e049d8df043631ed0ed4c4ac4022d8403cb0421b454cbfb6f48a30e9ee1609ad7b68211977acb33b9c1a1be735814c58f66db5f0b8ac773b1d58d4e6bc45dfd48a294bbd25e92671f56f302f29b50d80431c8f2ea33996257b208e057ea7672cc2d1cd4204b85b2ab509027131359aeb42e3eccdbaecfe2cd3e5a3313266e761194ff69cae9e37e51cc0a54f086dde13cb33118e34fe33c74d735582752d68d21c79e5c3aaea94ba107cb7ee8a70a3f9a01e9808c0aeba6665315b45625840a033a6e2a875495057942ed9bb2ce6e4ee60bed47cd9d584bc24524397a109498ee2a973aad6a29b70a1cfbfe9aa5c7cb9f35f0fa00227f43988d07619b6fb2f6d3bee28e10ee705347015a922e2e88d34fb0ce515b08df3a1b634ff9ec15d0594182c86ebb0db783612a7d19e4b22e822d566245aed72e694c3d101bfa4ca879862e5f99c23a5d66083ce06d87f399aa7888ab83b8664472\",\n        \"signature\": \"db1cc0c5db773ec51689be28842fa6791a7d75e29c228ae9593a580e0875b1670f09b03442929a18f1e9414ea34315ff09d91d922ee47f10f71da4ab13b7d901\"\n    },\n    {\n        \"secret_key\": \"4ef60f0691d737e64d437bfd3398330e55e3c094cf41fc557b0fe0b643909ab8\",\n        \"public_key\": \"306ab146e5c8cd630f9b48bf8b685db0b6b553ef69686853b6b531960118548c\",\n        \"message\": \"0a188ac26f3c5d89f3d588374fac5ecf9a467e2165b31d0b0f23501bd22e62bf3555ffba94631de74a6a3c3cf63b03ac1bbb37d233eca5993b0970a0220de8d6c41a970307309a52da0576dc334d806447aa09d0b245eacd0b42c4e19fa3d6fbdc229430eb3c7558af5331c6e7fcc2e552ce35d579073b548dc115bbd27e5a33ce1c47fc8461e391b6d767953487cc52ee673bc4be96569c8557369ebb6e02f79238108c3b5856ee381a79ff464c8f6009fd47e67b4c80201e11e61ab8f59ba5d07b15ace3fb374c64b6b4c345e2b00e9151ab8e1c5c98568bc58dd0812aaa3beee165e7eae58fbde63077203c4fd6e16068d76e3d3a13f1cdd73288bd5e4da44eb119a04c4d32efa2f13e7426a2f41c5623c9b066b1303639b8fcea0d8774cc08045f7e346365ff31d3b1ed99e97bca5f25c92b2843ac585d02193a2fd39466f73aaa989b1fa05b9a157fd0277c5e745d258e027803a524ad94309425c3f4dec31c0efc547752f4c7194cbb272f849a52169c6a078d20ede1432016528477b58c2bdf6063f9447e33837ccb437d8d6b95cf4c44be70c8193ad980a105f3db6f9930bab4678c776342faf170edf74248d3b1ca96f731b9d026d8f0f7c34ed372c1cde176f55f558675cc3180c23902f4ba9508d1c91c3c9e688730327f3f7b637a8fee54373759fcb17c9217ea44ce43691a8f6463640a4a5e151e6254c4ef12623b49394da7cc79452693817d6baea9a0a75876948b1f8d3b717f9ec36753f53263710383b98262ae6354ff2a2283220ad42c5cb2cbbdf12c879513710b16be856f3b1355b36f4b80c017c21be85e96053da050c40312100abb640b873d88fb6ee0d19e9e61b04c970bd1f060dd311bbb9a6e35b985fdca17caee8cd5db637acd90cb8e823255c056018fef5920db640d2201c5eddbd8a9c9474da8def7e1325b3cc436c74f815db1e42b421faab626a4378c2d84261bf649a53b321f598c44bbd3002b06cf7f1fdef84ab35f73ed7dc65096cb1dc0cc0e34c561c8a15cf5279abbed9b16ff24a9744e3f5e649cc9d8884f891c3fb78902031ffe0e0121c72080ad10c247b7c93a9ebb2d84d4f877750d7b3416393d03045226bb7994eea58e272dc18c46b382d1f97b23765fda7a8ce21fc6b98d723ffccd99ac4655cc5d10105a2a5b7c8cfbfb90e27a9a809e41ae640063286405a9be83ac5d2907a45f163c7764b09f99a55593220d6901292b9b5803a0fe71b0e4441cbfef841c33cebc98364d666e5a9f5e7e69a1508e4380ed361345b7248a4c1c1ce08769bc7152ddb332fba176200f5abbae3812f406da72dde5db\",\n        \"signed\": \"cbf7cf22081c5f235dba35630fb3f0408fceccefeb28b99d74dbd98c902c7d99ba9ca7fab3747c504cc219f4dd101081f58ce616e29280e362539fe49f34d7050a188ac26f3c5d89f3d588374fac5ecf9a467e2165b31d0b0f23501bd22e62bf3555ffba94631de74a6a3c3cf63b03ac1bbb37d233eca5993b0970a0220de8d6c41a970307309a52da0576dc334d806447aa09d0b245eacd0b42c4e19fa3d6fbdc229430eb3c7558af5331c6e7fcc2e552ce35d579073b548dc115bbd27e5a33ce1c47fc8461e391b6d767953487cc52ee673bc4be96569c8557369ebb6e02f79238108c3b5856ee381a79ff464c8f6009fd47e67b4c80201e11e61ab8f59ba5d07b15ace3fb374c64b6b4c345e2b00e9151ab8e1c5c98568bc58dd0812aaa3beee165e7eae58fbde63077203c4fd6e16068d76e3d3a13f1cdd73288bd5e4da44eb119a04c4d32efa2f13e7426a2f41c5623c9b066b1303639b8fcea0d8774cc08045f7e346365ff31d3b1ed99e97bca5f25c92b2843ac585d02193a2fd39466f73aaa989b1fa05b9a157fd0277c5e745d258e027803a524ad94309425c3f4dec31c0efc547752f4c7194cbb272f849a52169c6a078d20ede1432016528477b58c2bdf6063f9447e33837ccb437d8d6b95cf4c44be70c8193ad980a105f3db6f9930bab4678c776342faf170edf74248d3b1ca96f731b9d026d8f0f7c34ed372c1cde176f55f558675cc3180c23902f4ba9508d1c91c3c9e688730327f3f7b637a8fee54373759fcb17c9217ea44ce43691a8f6463640a4a5e151e6254c4ef12623b49394da7cc79452693817d6baea9a0a75876948b1f8d3b717f9ec36753f53263710383b98262ae6354ff2a2283220ad42c5cb2cbbdf12c879513710b16be856f3b1355b36f4b80c017c21be85e96053da050c40312100abb640b873d88fb6ee0d19e9e61b04c970bd1f060dd311bbb9a6e35b985fdca17caee8cd5db637acd90cb8e823255c056018fef5920db640d2201c5eddbd8a9c9474da8def7e1325b3cc436c74f815db1e42b421faab626a4378c2d84261bf649a53b321f598c44bbd3002b06cf7f1fdef84ab35f73ed7dc65096cb1dc0cc0e34c561c8a15cf5279abbed9b16ff24a9744e3f5e649cc9d8884f891c3fb78902031ffe0e0121c72080ad10c247b7c93a9ebb2d84d4f877750d7b3416393d03045226bb7994eea58e272dc18c46b382d1f97b23765fda7a8ce21fc6b98d723ffccd99ac4655cc5d10105a2a5b7c8cfbfb90e27a9a809e41ae640063286405a9be83ac5d2907a45f163c7764b09f99a55593220d6901292b9b5803a0fe71b0e4441cbfef841c33cebc98364d666e5a9f5e7e69a1508e4380ed361345b7248a4c1c1ce08769bc7152ddb332fba176200f5abbae3812f406da72dde5db\",\n        \"signature\": \"cbf7cf22081c5f235dba35630fb3f0408fceccefeb28b99d74dbd98c902c7d99ba9ca7fab3747c504cc219f4dd101081f58ce616e29280e362539fe49f34d705\"\n    },\n    {\n        \"secret_key\": \"197e15dce4c47d734dbce4688a7ad5fe41ebf2aa29a2bddb2bee628429c1bc02\",\n        \"public_key\": \"30fac323048b0c781a9f63c1ee69f2b9e75a2706d249512a2739607f26db138f\",\n        \"message\": \"fd971d48946b51ffed7b62c5d099c1e56b1358b92235e1010e3f23844ddb73bcee8d2e1c9977353bc96a221c05602931fa16ccc2ab6d0f01c846c2920e99de026dc2897f3d5f3cee174ce751d4a805ee1959a3c69cfd42d7c9afd31fa9b1cf05786d8f9042a4f9f81cf7ac9c1c39b36f1ee95b98cf7ee3f43e2c343733d1d82cc08b2cdeb78d982034085ff4dc6536cd154a790c85c8613ec4e5e1dc377d38a745d938cfb15c8b8aa86121835f2e25e9e6d0de68025d810c3dc9df991dadad39dc6981fdbac1ff9b7a791c3960d8564366e5aa39a9e9c7cbf1d3f0f820d1b90108751ac764dabe05c51c18529da1b0349614668424ab4e936440c4a2513be528539372eee78754589dbe7994faa1f6229124f839950ed0923f4323315ac963bbe4c8e177dac516e7342238f1cdf140befc8acdca3d002b16c1398d868600304c7e9853b23a51b17d9fd06156e1d1d08a28460909fa209ccccc4cecbdb1a46348089115318681a95ae580ab6766041384651cc4e6145103923bdf4a32a93d93eed318791f20805f7ea84b743ee11ead9e4ca03da76ddd249fd4475fc1a353c70a83389bfac52098db066d1029c4effbed864ebe7f107e0103b3a8f3fd1d6ab4360b99e8b140c5ea133e923c392b8e4063aa6e522638f61d7a71c9225897d9f8a1e16cfcc801e7d54104eb10e61a5ae63c5c85a5b29392ab3ab8e5c039f100d0f4600c610e0209436ef2ece4d0bdb0bab437b2db5f3708fddf96660f6fb1a90d6048d395afafa760ccaf15deaa0effeb26ec17681d172c1330f78e78a8736b285f615f15d4f2c313d25f30aee9d1db39f535fcdd0ebc8e71b89ce6b3fcb567cd0fa288f48ed3a759bb2ed200fdc23091502fd9ca651ce5e3422a98335a81d74a65cc1500e9070abb609c1c1f68fc2ca94cdd550f99bcb2d092416b9bd388410b8fe748fb8c9a5ab8615f2ed968f85dcb2727726984beada7a18afdb0c72aa65de7abb7a86f11169a6eadf1c21d614e52c0c8f019747d341a05d85e37bf58d8327e9939c2387c2744edf838563cb37f0b16e8a06fc628a97230506fa4183954dc74815f3be2eb2aff4a13c065f743b7d85de804eb28efe570ed5ecc71aba97f9763b436173247f38e0cf6297209b65128465a382664ced8011fcc3d0e563f155bc63c94dde73c7b17247b8c3a4e8034ebd4364635185ce9c7081dbdbe8545f79d01aa532a0dc52cb790a31fc2ff41acebad27cce9244554db652fa287bae7decbcc8ce9e01d1a88ab412b6c6578203b42dec982b7f3b82314db2cc7c5c3dc1d3d8b17144da7fe60e7a8725fd0a97c610607cf413c72\",\n        \"signed\": \"2c3c8cd299c9060b65999b03a6579bc50ef1fe0d851f23be9cb58f8fb8c672ee086a539ead949e087df091122d26faaad206a5c52fcd58b514d7a935be017908fd971d48946b51ffed7b62c5d099c1e56b1358b92235e1010e3f23844ddb73bcee8d2e1c9977353bc96a221c05602931fa16ccc2ab6d0f01c846c2920e99de026dc2897f3d5f3cee174ce751d4a805ee1959a3c69cfd42d7c9afd31fa9b1cf05786d8f9042a4f9f81cf7ac9c1c39b36f1ee95b98cf7ee3f43e2c343733d1d82cc08b2cdeb78d982034085ff4dc6536cd154a790c85c8613ec4e5e1dc377d38a745d938cfb15c8b8aa86121835f2e25e9e6d0de68025d810c3dc9df991dadad39dc6981fdbac1ff9b7a791c3960d8564366e5aa39a9e9c7cbf1d3f0f820d1b90108751ac764dabe05c51c18529da1b0349614668424ab4e936440c4a2513be528539372eee78754589dbe7994faa1f6229124f839950ed0923f4323315ac963bbe4c8e177dac516e7342238f1cdf140befc8acdca3d002b16c1398d868600304c7e9853b23a51b17d9fd06156e1d1d08a28460909fa209ccccc4cecbdb1a46348089115318681a95ae580ab6766041384651cc4e6145103923bdf4a32a93d93eed318791f20805f7ea84b743ee11ead9e4ca03da76ddd249fd4475fc1a353c70a83389bfac52098db066d1029c4effbed864ebe7f107e0103b3a8f3fd1d6ab4360b99e8b140c5ea133e923c392b8e4063aa6e522638f61d7a71c9225897d9f8a1e16cfcc801e7d54104eb10e61a5ae63c5c85a5b29392ab3ab8e5c039f100d0f4600c610e0209436ef2ece4d0bdb0bab437b2db5f3708fddf96660f6fb1a90d6048d395afafa760ccaf15deaa0effeb26ec17681d172c1330f78e78a8736b285f615f15d4f2c313d25f30aee9d1db39f535fcdd0ebc8e71b89ce6b3fcb567cd0fa288f48ed3a759bb2ed200fdc23091502fd9ca651ce5e3422a98335a81d74a65cc1500e9070abb609c1c1f68fc2ca94cdd550f99bcb2d092416b9bd388410b8fe748fb8c9a5ab8615f2ed968f85dcb2727726984beada7a18afdb0c72aa65de7abb7a86f11169a6eadf1c21d614e52c0c8f019747d341a05d85e37bf58d8327e9939c2387c2744edf838563cb37f0b16e8a06fc628a97230506fa4183954dc74815f3be2eb2aff4a13c065f743b7d85de804eb28efe570ed5ecc71aba97f9763b436173247f38e0cf6297209b65128465a382664ced8011fcc3d0e563f155bc63c94dde73c7b17247b8c3a4e8034ebd4364635185ce9c7081dbdbe8545f79d01aa532a0dc52cb790a31fc2ff41acebad27cce9244554db652fa287bae7decbcc8ce9e01d1a88ab412b6c6578203b42dec982b7f3b82314db2cc7c5c3dc1d3d8b17144da7fe60e7a8725fd0a97c610607cf413c72\",\n        \"signature\": \"2c3c8cd299c9060b65999b03a6579bc50ef1fe0d851f23be9cb58f8fb8c672ee086a539ead949e087df091122d26faaad206a5c52fcd58b514d7a935be017908\"\n    },\n    {\n        \"secret_key\": \"08b5fd4e419d2370c0fcd6c3b92f8db3afd42268f533085d9fce32b522824e34\",\n        \"public_key\": \"cd0da699379e4f9425e84b9757300a51a163f358734cc37a91ff0ea488d29779\",\n        \"message\": \"3ceeeea30fa401563df36b198b9b59698c10e100a2f30e6f78fe62b92ecac989e8aa09ec760e89cac0a16bde3cac73622a8627efedfa4ec09b873f7e1000e76982910ca0aa4afb1ff5a8448b76f7b0d2a2d52a7f40dedefc68d60ce6622ca080d6698ea6c3bd7210b3b648f53252291494b35a55ff40fa1a631a57c510011a46bfb9e271bae1e78ce6c6ea60c55ba0cce36059bfb01e394556987f744b72aebbdb4b1bdbb3bbaaee1b8b2f3174506a793f0a511b2b569049b30a2e0841424184a48eca9e2d83783ac5b61eb947cbd8bab7ad38b0c68427d8f94ae285190dbb6e0c6d580a25142394be948158d8da83b4f34a8d258b97075632b3c28bfae3105ed1872e356e43aed59397b9110bbf9d8ca2a044d5271e6cc361e14e69a932517683ec81818f02cfa0295e5661cea3e586afc0db41ba95553ee75b200b0f9790111d3757a739e563557aff9b70ca14e87b795437ba91a95dd07ea69a11359f36ca03298e0bfa4f912f64a2924ad901975a2a960ba1be89921b1f5485496b7ea5da6d8a6937ac105bf3760e4876990a0f5c5a634f74cb57df7c172c8a415372e6d903298717499616f8971c68bbece92ea878a18e23f327c3649b6a852ef23b7b3e603cdf80452dbf1be2fb77e814d2525496bb31fb6e4ed2533248b39d5fbe2390a9b6fccaba997e8b49b59836e3e09529ea5e4113eee451c9c6bb26741d0e4c586f53d604c6ea0c0e60db02e5109f3734f51cdd8985afeb3ecaff65e059e312cd50fa349ff28bdc9b70b7f532dbab1df43b03167c1d2e3fa6ee8c9b174a0b2cf8aa9ffa406bf5bd7288780c9c4a6b697949b48638d42079c8c66e14d9b572a210a093eaf1d2f7a703b5cd20adc4f9927a6ea8ea78faa61bc62b3c5cbd3a53252566d043ba556590d9a763be7fea4b20e1e9cfbebfae15439b334dc539b17dada2e434e9c83225b1e8f6beb7d556b47d7f69f7eb7df5ede2eebd84e250b7c9468c21fdc0170ea8df662d6180581f657fe76cef1858b6b02f7325c7219643fba2f7e9963a33322d6504ab91bf10a978fa07b47d5db0be000dcd002bddaf676b77259c9f60ad0b11671cd5777c1e80b13f82eb0fb6a180b5666293a43240862fbfa3978d95311971afab9e1cc8ab14a876b6572ac8a4b7e0b40aaf6b52a1cf4c1ebc6c1c487df5a3cbc4005a0ee329cabc286db10f17d0f1782e07d3324f0c73efbd3c2fb52b71f98ad95db95062d91425e73467bc1e4e9bf552e8a24429d97db1d66dd4d995e5f8d24e9c910b2eb1758ef75525c3d65a3f430a027348820ce3053b6f3af4ec96d0493731c818c6b1a70c250ac686a4fc\",\n        \"signed\": \"42a13756b75c6722485fa3f694041b39b7d7c5fd40ebc06a52e0ff34ce14d8d40fa82a9508b568537d26d0dd7c0a31be710da80aab35196a039b60641db1e1013ceeeea30fa401563df36b198b9b59698c10e100a2f30e6f78fe62b92ecac989e8aa09ec760e89cac0a16bde3cac73622a8627efedfa4ec09b873f7e1000e76982910ca0aa4afb1ff5a8448b76f7b0d2a2d52a7f40dedefc68d60ce6622ca080d6698ea6c3bd7210b3b648f53252291494b35a55ff40fa1a631a57c510011a46bfb9e271bae1e78ce6c6ea60c55ba0cce36059bfb01e394556987f744b72aebbdb4b1bdbb3bbaaee1b8b2f3174506a793f0a511b2b569049b30a2e0841424184a48eca9e2d83783ac5b61eb947cbd8bab7ad38b0c68427d8f94ae285190dbb6e0c6d580a25142394be948158d8da83b4f34a8d258b97075632b3c28bfae3105ed1872e356e43aed59397b9110bbf9d8ca2a044d5271e6cc361e14e69a932517683ec81818f02cfa0295e5661cea3e586afc0db41ba95553ee75b200b0f9790111d3757a739e563557aff9b70ca14e87b795437ba91a95dd07ea69a11359f36ca03298e0bfa4f912f64a2924ad901975a2a960ba1be89921b1f5485496b7ea5da6d8a6937ac105bf3760e4876990a0f5c5a634f74cb57df7c172c8a415372e6d903298717499616f8971c68bbece92ea878a18e23f327c3649b6a852ef23b7b3e603cdf80452dbf1be2fb77e814d2525496bb31fb6e4ed2533248b39d5fbe2390a9b6fccaba997e8b49b59836e3e09529ea5e4113eee451c9c6bb26741d0e4c586f53d604c6ea0c0e60db02e5109f3734f51cdd8985afeb3ecaff65e059e312cd50fa349ff28bdc9b70b7f532dbab1df43b03167c1d2e3fa6ee8c9b174a0b2cf8aa9ffa406bf5bd7288780c9c4a6b697949b48638d42079c8c66e14d9b572a210a093eaf1d2f7a703b5cd20adc4f9927a6ea8ea78faa61bc62b3c5cbd3a53252566d043ba556590d9a763be7fea4b20e1e9cfbebfae15439b334dc539b17dada2e434e9c83225b1e8f6beb7d556b47d7f69f7eb7df5ede2eebd84e250b7c9468c21fdc0170ea8df662d6180581f657fe76cef1858b6b02f7325c7219643fba2f7e9963a33322d6504ab91bf10a978fa07b47d5db0be000dcd002bddaf676b77259c9f60ad0b11671cd5777c1e80b13f82eb0fb6a180b5666293a43240862fbfa3978d95311971afab9e1cc8ab14a876b6572ac8a4b7e0b40aaf6b52a1cf4c1ebc6c1c487df5a3cbc4005a0ee329cabc286db10f17d0f1782e07d3324f0c73efbd3c2fb52b71f98ad95db95062d91425e73467bc1e4e9bf552e8a24429d97db1d66dd4d995e5f8d24e9c910b2eb1758ef75525c3d65a3f430a027348820ce3053b6f3af4ec96d0493731c818c6b1a70c250ac686a4fc\",\n        \"signature\": \"42a13756b75c6722485fa3f694041b39b7d7c5fd40ebc06a52e0ff34ce14d8d40fa82a9508b568537d26d0dd7c0a31be710da80aab35196a039b60641db1e101\"\n    },\n    {\n        \"secret_key\": \"1e85c9e451b7acf801d16bc8268eb42ae85c72c68e9f90927aa0f3b50befd229\",\n        \"public_key\": \"a69d057f4b743811e07ac74561c225be0381c7d5849e6018793701a8cb6c99b5\",\n        \"message\": \"189ea9c8d9ed14b0de82b44cbdd58757a27c68383fba597761f9e862e08de15b1e44c3db1badbde76980ee39e699629f6fcfef32d36b3393da2ca5a81f959c8b0f1b801b5fa4c47ca39591e612a2435c5bafd77a5c7ab74359210906f47533b1879e2a5af5864d961c8146e25dac772555e042a887261419ab8c9f6f625625481da5b93526a131f37b534a0050a8a462b33f20a7e94b891530b19bf654ee9534c9a8361d03635d8d27d46be7bf84781ad0d42d1e7c4854a49ba1ba458262fe5ea19021b935a6949492d70b605e151989ef2641b2bf81ec4b92020fc7074c2a63229d51a944186a28895e8ea95292c2f872bb21a3149399e23ccd8e2fc4f17a46b59c282c51b58d00266a5c16b1ce350d5485e8d8016dd0a50a5984cc948154cd5ce7cda0ee0ab1d7251bdc70a1785b8e9103917f4b917ab2b494f3483389a2f9237541849ed3bd565cffac9e756db56ef5e23495bc771e88bffa8707ceea5c09becadd059ab889d1df7e887b71a9e6c238378fbe0c3630386616363f207b16c3270d39acded511529992f4e598789121d316135810636baade8a28edc66bbf5ede3f404a70b47d35988be706b4eaa03023a39093d583cd4cd8bf4c74341a028c19d60da31b6a7a034c081a2b030feb3cd2f03d0faabffb58e3fc36c006cfb92947a7de5ba87476c1b051e18283c03e9c6e5a5c3c2777d9a0757372379664e82f8485824fedb70a4bc4e356edd1b5ce0fb6e41de0171621b84fafa00189afa8a6a900b14c70758f7aa4fb82400e0d18ab3cd7e48acfd489cab0e72e719f79a07d066c531a891c55291f2245dbbee44e52b1dfc8727aae387ab9e71994a3854e1add73d9a7965c775521c2f540842276dd309e2f6a341e7f0f37f22bb6627b6e9cb25ba24c6c4f4eb9f5e7622d88da1984e29c5da001039c44042b59351406a41336dd772d497d3fc8aac41172eb5aa6417fe422ec7c150b96b0454ee331247cb1538aeff3eca2d50e53d6d13170a76a0049ea0c05904a6390ed14ce7491e97f754c5222dac4b6118ba381f552e73ea8491e3b7ac949569b569cf2d29a80410e065b5cc4a466bb04eb7a15f596792e8490ba7002ec361571af5d8f57675c956449470a2f9955407367e409a232899553120a277db863e9a82ddabae87b789145ba898df3c28b96fbe3014cd085c6e60ee8831701036d99c5425d58e8bcc9fd9271d46aec1eb955130102eaaab44e0770c30b2b127efb0e5f8a3f7a0ca34ec9984a46011bc26bfde0c0819bb54706b565638b7542dc4b8bf8098dc01f161b3b129618b59aded33cb59ce9189a6762dbae5b0d34b71c8dbf\",\n        \"signed\": \"6c36da9ad6c456343ce642aca454923a52a2844ce5ee58947c8df7bab2ebe467823c5633e530b167d71c47ad9549df05943f99421e17475c4d4f08dedf6f3205189ea9c8d9ed14b0de82b44cbdd58757a27c68383fba597761f9e862e08de15b1e44c3db1badbde76980ee39e699629f6fcfef32d36b3393da2ca5a81f959c8b0f1b801b5fa4c47ca39591e612a2435c5bafd77a5c7ab74359210906f47533b1879e2a5af5864d961c8146e25dac772555e042a887261419ab8c9f6f625625481da5b93526a131f37b534a0050a8a462b33f20a7e94b891530b19bf654ee9534c9a8361d03635d8d27d46be7bf84781ad0d42d1e7c4854a49ba1ba458262fe5ea19021b935a6949492d70b605e151989ef2641b2bf81ec4b92020fc7074c2a63229d51a944186a28895e8ea95292c2f872bb21a3149399e23ccd8e2fc4f17a46b59c282c51b58d00266a5c16b1ce350d5485e8d8016dd0a50a5984cc948154cd5ce7cda0ee0ab1d7251bdc70a1785b8e9103917f4b917ab2b494f3483389a2f9237541849ed3bd565cffac9e756db56ef5e23495bc771e88bffa8707ceea5c09becadd059ab889d1df7e887b71a9e6c238378fbe0c3630386616363f207b16c3270d39acded511529992f4e598789121d316135810636baade8a28edc66bbf5ede3f404a70b47d35988be706b4eaa03023a39093d583cd4cd8bf4c74341a028c19d60da31b6a7a034c081a2b030feb3cd2f03d0faabffb58e3fc36c006cfb92947a7de5ba87476c1b051e18283c03e9c6e5a5c3c2777d9a0757372379664e82f8485824fedb70a4bc4e356edd1b5ce0fb6e41de0171621b84fafa00189afa8a6a900b14c70758f7aa4fb82400e0d18ab3cd7e48acfd489cab0e72e719f79a07d066c531a891c55291f2245dbbee44e52b1dfc8727aae387ab9e71994a3854e1add73d9a7965c775521c2f540842276dd309e2f6a341e7f0f37f22bb6627b6e9cb25ba24c6c4f4eb9f5e7622d88da1984e29c5da001039c44042b59351406a41336dd772d497d3fc8aac41172eb5aa6417fe422ec7c150b96b0454ee331247cb1538aeff3eca2d50e53d6d13170a76a0049ea0c05904a6390ed14ce7491e97f754c5222dac4b6118ba381f552e73ea8491e3b7ac949569b569cf2d29a80410e065b5cc4a466bb04eb7a15f596792e8490ba7002ec361571af5d8f57675c956449470a2f9955407367e409a232899553120a277db863e9a82ddabae87b789145ba898df3c28b96fbe3014cd085c6e60ee8831701036d99c5425d58e8bcc9fd9271d46aec1eb955130102eaaab44e0770c30b2b127efb0e5f8a3f7a0ca34ec9984a46011bc26bfde0c0819bb54706b565638b7542dc4b8bf8098dc01f161b3b129618b59aded33cb59ce9189a6762dbae5b0d34b71c8dbf\",\n        \"signature\": \"6c36da9ad6c456343ce642aca454923a52a2844ce5ee58947c8df7bab2ebe467823c5633e530b167d71c47ad9549df05943f99421e17475c4d4f08dedf6f3205\"\n    },\n    {\n        \"secret_key\": \"51cf868f820eeda0dbd10180f777e6065c93a483c58a778b67e7d842302fb767\",\n        \"public_key\": \"ab088f502fbcf2150e4846b34d2c8097ff013c02a8b97cfcf2b95a1c72df3e24\",\n        \"message\": \"7c2d8ee82d9abf8aa9c724c75b90990473f131763fe93b30cb04723588621da2a327928b22649fa062cdeabd77761538b2709b8fb7a2006e503509134c929c3011e1d728a57a4e175198075e214253f3f30e01b6e04eabd4de06789558e698b186efe34b32129568b3e8d0d7ea3ff00b3f25a42236893aa8a41b674a0ab5f41e7b28cf5a7cb765e18ead6de6a353a7824a3c49786038d6f4937f3264d6ccf0c0a2465bb693e52b3d1e6eb9ae4cb65d09cff54842e85362857a59f7198a688a3df38513cdd61e21dfd859142c8344a3b8b2a7c7db170f39f87ca3ff8ed427962b2b1a14d122fa2d5aea2a6640117dd258fa0fc54ac6e940bc16d211ec9adf914ab16578f521f655d2127e79e871bf7fa7544719d58ed847850cb27b99eb8f29b16cdcc28b15c1259ab4d589705a406688f605a2ebf58051c43a77c4e01fd6f749d32db4e89f263c2c16de181f0e6bdd0a6a64ffe6f1829444096d9f3e2b67e4bb006650b5929d1f82eb11bbed24e8f1018a7384605a3cf29ab598337939c76a3be861e483c5805ec3cee45e3424847a08558dcc99499fb9382acae56cdc87fbd5b26ff94c86f2e108794383501c8b33366850a76a0dfc0a7cd789a03f01a3e9d9e9ae39fd7245dc29299d24f3b4b167caccd223a99b6b20a3b673dc5f7466d0b2f815098a497ccaf80420168eddbf4da57b8666e9d33c48eb304b4cfcf457cd7659543f6d1e661890f562b43b8b6d1c4dcc077b60bfa533ffab928dbfd955dc5116d770950b690e2106ad52d42c31c22b8848894332b5c699e5c331fb381e5812e7526fdf4b8aa2daaa2ca2cfb9c92111b61cbc3d1eef6c8c6737f05588f04467db8330843acc98dc1a16fbd9d9d94bd8bfde26c3f71dee72b50910c36b240f802a61ca16372f6ffaadb2be4e853c5ed69a3d1f6c7b2de513c53a3fdd0a676f83d09d5c51176047d9200716bf22bae45fe01b3e0c2c51c16e46ad0637f79f9b4d83867704feda9f227831dea263399ca2771a4e78b4df8ac0de6a941eab370b1fdb47daf6642aaeaa63170fa9b3d1e1628f7c4e7cf0ea8b8a8e518cbacef9ade84df032484847ffb61bbd07e8727cc4c25da577b264519b4999fa7c0bc323d4f3f9739f780b9b2c23c77855ee5f6dcc401544d6b64b2770158fdc6c12f4d89beb044e0e85ac7a68d42917b1345114b9a672d1231b2c6c0f969f203531e71bbb4005b103a7dc3a58b5b824a7e01b6eb9f496dfa64d64d8c6777f53aa58d5da046d726f55454c88b6d7d4ab0d2198a89709f118a6b32460b9ebceff3fddc605da77ef3d1ba30fecf07be2f5313f4ee635af5e9561d877e99c\",\n        \"signed\": \"e15342a11caf892895e466228863d083b0692f010610748c23df2f11d29475bafce927cafe7f07efb8c347ed5663e73bea89531cedc0c348e79b6e58a75749077c2d8ee82d9abf8aa9c724c75b90990473f131763fe93b30cb04723588621da2a327928b22649fa062cdeabd77761538b2709b8fb7a2006e503509134c929c3011e1d728a57a4e175198075e214253f3f30e01b6e04eabd4de06789558e698b186efe34b32129568b3e8d0d7ea3ff00b3f25a42236893aa8a41b674a0ab5f41e7b28cf5a7cb765e18ead6de6a353a7824a3c49786038d6f4937f3264d6ccf0c0a2465bb693e52b3d1e6eb9ae4cb65d09cff54842e85362857a59f7198a688a3df38513cdd61e21dfd859142c8344a3b8b2a7c7db170f39f87ca3ff8ed427962b2b1a14d122fa2d5aea2a6640117dd258fa0fc54ac6e940bc16d211ec9adf914ab16578f521f655d2127e79e871bf7fa7544719d58ed847850cb27b99eb8f29b16cdcc28b15c1259ab4d589705a406688f605a2ebf58051c43a77c4e01fd6f749d32db4e89f263c2c16de181f0e6bdd0a6a64ffe6f1829444096d9f3e2b67e4bb006650b5929d1f82eb11bbed24e8f1018a7384605a3cf29ab598337939c76a3be861e483c5805ec3cee45e3424847a08558dcc99499fb9382acae56cdc87fbd5b26ff94c86f2e108794383501c8b33366850a76a0dfc0a7cd789a03f01a3e9d9e9ae39fd7245dc29299d24f3b4b167caccd223a99b6b20a3b673dc5f7466d0b2f815098a497ccaf80420168eddbf4da57b8666e9d33c48eb304b4cfcf457cd7659543f6d1e661890f562b43b8b6d1c4dcc077b60bfa533ffab928dbfd955dc5116d770950b690e2106ad52d42c31c22b8848894332b5c699e5c331fb381e5812e7526fdf4b8aa2daaa2ca2cfb9c92111b61cbc3d1eef6c8c6737f05588f04467db8330843acc98dc1a16fbd9d9d94bd8bfde26c3f71dee72b50910c36b240f802a61ca16372f6ffaadb2be4e853c5ed69a3d1f6c7b2de513c53a3fdd0a676f83d09d5c51176047d9200716bf22bae45fe01b3e0c2c51c16e46ad0637f79f9b4d83867704feda9f227831dea263399ca2771a4e78b4df8ac0de6a941eab370b1fdb47daf6642aaeaa63170fa9b3d1e1628f7c4e7cf0ea8b8a8e518cbacef9ade84df032484847ffb61bbd07e8727cc4c25da577b264519b4999fa7c0bc323d4f3f9739f780b9b2c23c77855ee5f6dcc401544d6b64b2770158fdc6c12f4d89beb044e0e85ac7a68d42917b1345114b9a672d1231b2c6c0f969f203531e71bbb4005b103a7dc3a58b5b824a7e01b6eb9f496dfa64d64d8c6777f53aa58d5da046d726f55454c88b6d7d4ab0d2198a89709f118a6b32460b9ebceff3fddc605da77ef3d1ba30fecf07be2f5313f4ee635af5e9561d877e99c\",\n        \"signature\": \"e15342a11caf892895e466228863d083b0692f010610748c23df2f11d29475bafce927cafe7f07efb8c347ed5663e73bea89531cedc0c348e79b6e58a7574907\"\n    },\n    {\n        \"secret_key\": \"543d5f1d4a6e1029b1914138fb1f4659e69456557207406688a2035cbbb2a68a\",\n        \"public_key\": \"3c83790c3b4553deae4f843b501d26f6167093ee54e279759ffad8cbc061e720\",\n        \"message\": \"fe0057f062fc871324b8bd5d427e9a5276231bd309907e5881d7ae53b1f370c2a43302a16510b46064a30736bac90951f1d9881af62c701483ebb9272ad77212eeb5fcbc7ec228d969f8902732113b98e3bf82dfeadd0de5e765d2870b12d1f9b5a28297c9fdd1495cf87789196a7d644eecd93587dbf20c28eb09da286603c582d2129a657db2d17add3558dde029ce27b88352de3f95aba17e1ed1913722db08a795dfbb70d62a8802724cb0f535f848d052aa3dde9166963a8041fccc4e60bfb11de2bf286eb602a4af842f4d1a340d78bbbcb2857f0c308f44bb101e7bc8b741d506094e27bbafa72428ef666ea6ea16f799b4ee58278f045974d86dc72cf5260d96f9c09b2f1181e1a4500f9283dc677f384ff64e51e89f76582020326c388c08a0fd00de73d5d49c06c0c684191a264fff726d872dc3ae496c7b478cfc61b51714192f76463e3d0aab410ea115e8befedb997ddd169921b3207ea66c1f59450b7623129fd1e2dd3da8f5206391171338ea0ec8ef3c59ed8afc69f3865c29a0723a9bbe95a742681ef9857e81abc80c92d2a718a804f5304fef3c63d799a6ef8782a7db46681d0de3506446982267b2152b0c321869e23cce8c4ebebeaf4aa1ebe9283b692605260ff621b03c10822aa5f6d03bdef49c462a68d471e849e164e3874f6e9f6cb3b5f293eb38ae5245a159ec4261a9bf6b5f7b7615fd339ea12733113ce767f883ae6675417fc770b50bd60e6f20addb29c1f7506233e32a7ebfadabff98cfd09b2b3bbd3eae0069548b9d8987af46ca98eb095bacbd874724ba10f3633aa08ab6ec26494ddf6854309b55d43bdbd29a7556f12dfb23cd0db4eb3937a65c4aed96e87b346555f9fc6897943a0faee65ccf394bd89b381beece25d1ba68f8fe32c23b3354f5be7e3ea3c0dec0f7ec2dd83f92b73058892b638d4c3b7242bb8f55bf087ba45a190a698bae675e0cd5e8446f2b21aeb63d2caea0f679a837e79357308d9f0b8af31f9d08008c39ee8d347528713c8850017a7f4ab98a35c7531940fa7621e67203ee782db3a2faa30f3aa850a5ff7aaed84c00ffd214f2c9261735fac3259d50e03c2652505279d91251927de5e56a8b9064ccf9f45dcbef46e1189ced2bc79e6ff652e69097ace5568bb2d5bef3ce21a25b3f79ee275ea34e621380566d704cd93f24dd9020932cc05218c23b5b22fffa7e99ee7fe457876a5e3364c9a8e8b049cfa20969774f506d1996cbe6ef5a37793ecdb04cfdeaed7dcf79ab278474dd770822d4b36fc68e4b2dd661ef99de01de6eec57fa573ede10fbbd5ac6fd6cd8bb4eee509dbb4610374401\",\n        \"signed\": \"55201194026fd6448b1d52f83ed20ac284e7e77fa92d5295d33825cea3aca47ec7aaca2fc08679f9acfcedb376fda4619be3272c7445e8705c306141cde16c0ffe0057f062fc871324b8bd5d427e9a5276231bd309907e5881d7ae53b1f370c2a43302a16510b46064a30736bac90951f1d9881af62c701483ebb9272ad77212eeb5fcbc7ec228d969f8902732113b98e3bf82dfeadd0de5e765d2870b12d1f9b5a28297c9fdd1495cf87789196a7d644eecd93587dbf20c28eb09da286603c582d2129a657db2d17add3558dde029ce27b88352de3f95aba17e1ed1913722db08a795dfbb70d62a8802724cb0f535f848d052aa3dde9166963a8041fccc4e60bfb11de2bf286eb602a4af842f4d1a340d78bbbcb2857f0c308f44bb101e7bc8b741d506094e27bbafa72428ef666ea6ea16f799b4ee58278f045974d86dc72cf5260d96f9c09b2f1181e1a4500f9283dc677f384ff64e51e89f76582020326c388c08a0fd00de73d5d49c06c0c684191a264fff726d872dc3ae496c7b478cfc61b51714192f76463e3d0aab410ea115e8befedb997ddd169921b3207ea66c1f59450b7623129fd1e2dd3da8f5206391171338ea0ec8ef3c59ed8afc69f3865c29a0723a9bbe95a742681ef9857e81abc80c92d2a718a804f5304fef3c63d799a6ef8782a7db46681d0de3506446982267b2152b0c321869e23cce8c4ebebeaf4aa1ebe9283b692605260ff621b03c10822aa5f6d03bdef49c462a68d471e849e164e3874f6e9f6cb3b5f293eb38ae5245a159ec4261a9bf6b5f7b7615fd339ea12733113ce767f883ae6675417fc770b50bd60e6f20addb29c1f7506233e32a7ebfadabff98cfd09b2b3bbd3eae0069548b9d8987af46ca98eb095bacbd874724ba10f3633aa08ab6ec26494ddf6854309b55d43bdbd29a7556f12dfb23cd0db4eb3937a65c4aed96e87b346555f9fc6897943a0faee65ccf394bd89b381beece25d1ba68f8fe32c23b3354f5be7e3ea3c0dec0f7ec2dd83f92b73058892b638d4c3b7242bb8f55bf087ba45a190a698bae675e0cd5e8446f2b21aeb63d2caea0f679a837e79357308d9f0b8af31f9d08008c39ee8d347528713c8850017a7f4ab98a35c7531940fa7621e67203ee782db3a2faa30f3aa850a5ff7aaed84c00ffd214f2c9261735fac3259d50e03c2652505279d91251927de5e56a8b9064ccf9f45dcbef46e1189ced2bc79e6ff652e69097ace5568bb2d5bef3ce21a25b3f79ee275ea34e621380566d704cd93f24dd9020932cc05218c23b5b22fffa7e99ee7fe457876a5e3364c9a8e8b049cfa20969774f506d1996cbe6ef5a37793ecdb04cfdeaed7dcf79ab278474dd770822d4b36fc68e4b2dd661ef99de01de6eec57fa573ede10fbbd5ac6fd6cd8bb4eee509dbb4610374401\",\n        \"signature\": \"55201194026fd6448b1d52f83ed20ac284e7e77fa92d5295d33825cea3aca47ec7aaca2fc08679f9acfcedb376fda4619be3272c7445e8705c306141cde16c0f\"\n    },\n    {\n        \"secret_key\": \"f8d257fdfcf99796f8ce4d8aade3b225a53c26feecef395b9561d9d587f5a33c\",\n        \"public_key\": \"f66bd4877df78aec04ca7e77732899de06777e698629f29969f8fa9c2f47ab9e\",\n        \"message\": \"233e1ef901abcb69fb486085d8db0233ff78f37b136f0afe24f7dac1944c3678e74fed58a1ad54835b7dbcb46fff6c3524312273300b6d878a93e0608a4abaca4e3194722bb9e23d17194d8667b84f2db038c24efb8f53409cf5594fddb8bcd61f74cf0726b51c651ce01eb66a59b455f7d8a7d60d3927e0c6c54b138e01925371d2d9d962aa982f5e6085280cc05f356993911fd2039dfc342117970291381d82027db36c799100057d9352b2cd879d9c82af734b7fa297d21149c978aa5e125b20372a9b2e0ed357337efaea1391f3b9ef11e3e5135bb70bdbe32a9bdb7c3c42d5d57cc8dab6811628a01089495cb8a4a76a48296cd8dfafc005ad49d70bb19faca2084a1b6f5e48d23c03fbcf6f106db770f07c33e8e7f4757da904a44dd0e738f3d5733a329375ced74f3c42bfcdbb910100455d6aa7d2e3e3aaa58a829630d376b0b466dc85aac48fe269946a7bc72d91eb37ded2f4a77c684be01093fd12de9d9d83199ccc50959a48d6e9a41427566092f04a0f95ca52372e0762b966ce6232055a4fd757c61b8bad83baef91a3c2772fb32ead8f591ac1e02bbf90a7f6c39079b86fb814cc242e980f0b8b1a2cecb8e6d4e8a5211bf8babf38e829ab9883608bd6d59ea5e836a9b4a4fbeded1bea2ffe977e8cf3615ca4a50fea1f05f1fe53c8eac500323e1f52a806831539957988d79acc7b54f7d02b480c469fd69540fea4bdd68cbdc68cf9c7872fd792591b01e9d9902d8a614f4c21823f23508ffd49ff218bea922ec141eff60da177ccad7d7b9d444f3b03458115f116cc6e37625c39cbadf09362f31d33f4c13c33b6292007f2cafd194f62c643e7a25571564febad7d33e364b633d008b090d7a091358bc69c567b9522b5c1cd01218d38529aebb03d9c2a5eb2285a7176f98c28036f21e19e92b406e94895fa281b35228fbf76e73e1758af1b434a4df98e8cc556b9d83f6b0b7ff52c680f65efe4e00c59b46ce593bf98899805d02b9165b7429849e73953770ae393e4f1f97cb90cd6159cc93952ae8a4d3d56a9a95df7cfabacd4d030d736ea454dfa4b4aed1bcd885d2fbea5ffa2cf2927c137c86be4fe016412628fe7a0a0f02b6b6a9a2168932b943ff8b28dd587e77287790aaaa69a98506c764e6f5ba6338c09f382e1b987d99f14a3e1958cb62ae6705a577f9ffc67306401128741a8d0af03c0aaaf6af06bd88ee4b0af6703e0ea60b0409ace24572fb386e07e9c22c9686bdc66d4fcf3c7461d3833a4c3013243607d4d158217187326df51725a6bc5116e990bef8a5a9579600207206bfc3a6dcf0746ef756fd939e187f668750716c0\",\n        \"signed\": \"9235d44807869816e28e42c81c801ffb121de826c0d33dcc4a4e1c932d5228b639bb294e16090a93d1f6904a7004222fda0a55446d9901c72340007bb45ae103233e1ef901abcb69fb486085d8db0233ff78f37b136f0afe24f7dac1944c3678e74fed58a1ad54835b7dbcb46fff6c3524312273300b6d878a93e0608a4abaca4e3194722bb9e23d17194d8667b84f2db038c24efb8f53409cf5594fddb8bcd61f74cf0726b51c651ce01eb66a59b455f7d8a7d60d3927e0c6c54b138e01925371d2d9d962aa982f5e6085280cc05f356993911fd2039dfc342117970291381d82027db36c799100057d9352b2cd879d9c82af734b7fa297d21149c978aa5e125b20372a9b2e0ed357337efaea1391f3b9ef11e3e5135bb70bdbe32a9bdb7c3c42d5d57cc8dab6811628a01089495cb8a4a76a48296cd8dfafc005ad49d70bb19faca2084a1b6f5e48d23c03fbcf6f106db770f07c33e8e7f4757da904a44dd0e738f3d5733a329375ced74f3c42bfcdbb910100455d6aa7d2e3e3aaa58a829630d376b0b466dc85aac48fe269946a7bc72d91eb37ded2f4a77c684be01093fd12de9d9d83199ccc50959a48d6e9a41427566092f04a0f95ca52372e0762b966ce6232055a4fd757c61b8bad83baef91a3c2772fb32ead8f591ac1e02bbf90a7f6c39079b86fb814cc242e980f0b8b1a2cecb8e6d4e8a5211bf8babf38e829ab9883608bd6d59ea5e836a9b4a4fbeded1bea2ffe977e8cf3615ca4a50fea1f05f1fe53c8eac500323e1f52a806831539957988d79acc7b54f7d02b480c469fd69540fea4bdd68cbdc68cf9c7872fd792591b01e9d9902d8a614f4c21823f23508ffd49ff218bea922ec141eff60da177ccad7d7b9d444f3b03458115f116cc6e37625c39cbadf09362f31d33f4c13c33b6292007f2cafd194f62c643e7a25571564febad7d33e364b633d008b090d7a091358bc69c567b9522b5c1cd01218d38529aebb03d9c2a5eb2285a7176f98c28036f21e19e92b406e94895fa281b35228fbf76e73e1758af1b434a4df98e8cc556b9d83f6b0b7ff52c680f65efe4e00c59b46ce593bf98899805d02b9165b7429849e73953770ae393e4f1f97cb90cd6159cc93952ae8a4d3d56a9a95df7cfabacd4d030d736ea454dfa4b4aed1bcd885d2fbea5ffa2cf2927c137c86be4fe016412628fe7a0a0f02b6b6a9a2168932b943ff8b28dd587e77287790aaaa69a98506c764e6f5ba6338c09f382e1b987d99f14a3e1958cb62ae6705a577f9ffc67306401128741a8d0af03c0aaaf6af06bd88ee4b0af6703e0ea60b0409ace24572fb386e07e9c22c9686bdc66d4fcf3c7461d3833a4c3013243607d4d158217187326df51725a6bc5116e990bef8a5a9579600207206bfc3a6dcf0746ef756fd939e187f668750716c0\",\n        \"signature\": \"9235d44807869816e28e42c81c801ffb121de826c0d33dcc4a4e1c932d5228b639bb294e16090a93d1f6904a7004222fda0a55446d9901c72340007bb45ae103\"\n    },\n    {\n        \"secret_key\": \"8da9f54da0b6a5a38985b88b71339dc7384cfd5a60bee159c394c22363bc7edd\",\n        \"public_key\": \"1ac1a8edeb217ae9b3a3de530d24d83e11fb6538cc709b52994fa9c3f1faddc8\",\n        \"message\": \"bd53baba6657d8db8becae6eabffa52b015a5a05fdd2e070647de96f9ca4dd219fe0da608fa0447f46d17c9a358244cd5408596582ccd3cdd0151d6f0923e63d166837845f273fca7af6c89d8d5246175c2167fbb9c2ebf6a7595491f97a9713b02bdf413e209ab22db7dd2b37fc49436918ccebe5746bc64ddd6dce19ec4558c40e0896e21909280cba06d16b72f31d987685d071db8155e99ebcc6c821d92683fdcee08668a5ed58f839d9edafb9f1459d48de8e1bb6f7ce84da0be411c8f7be1b9a24bc5d0fe3a96b02350750a5cb250b49555a487672bdff3c3f784e3fb63c1c97ba6ae43a10e196f188dcc635e214e29df509e5608a5367aa2800c1a96ad936a9e2a579b8592ec13a359336a62788c3ec55c0ffd6a7d49ecb7c682efa308199f708d79d0e8856366d269fab24eb1a075c96c881cab89708ced279230d3f1f3ee173672283eb8d8a824038f648ac437275d75a0e15f71ce56a8aeb771f07a7f32afc9d612a13bd83b7f93990d38fc3f4f4ab8aa9430c65736eb64b16806e995c1ce9dcf4c5544e7b3d01541c5721bb4be4cf0ae382a0c1b169d8e418defd559442acea14b00d705bcfa78be0756a8f377cbf183bf25906874115d8ce4c3ba874102938a4ea16036d91a42c5f8f188655cacb00c88e3a68508816e5e1c31d27180bbba9518a9630726d7d047dd8d2c0401219e14e6badfc9b95b77a6ace9bea71d1b47c218903a115ad029e7f2039ea23cfd1fa6a44d089fcacb678153d674c0e081764995595cb6894895f08e25b984e3a694c92fc7cbe0ffc4697230bcb0ca408c2d7085c11badeb3e6c0e75e6c498db1bec1ed2a3e2445c32b1913a89500f69e7f23f41d62e5c189f39a056cb9fc68a452023a333f75220cb9b94484acac6bbc671f59ffa072b71a1896a1b306e9dc558da0ec20f373e4c355e0c5eccbbf1350c8c07914892c454defcefb717be34d087aeb244a86ff49a6c470afb36b40fe8b71c505a4ff7af2984c65284938ec0e405231521f4810147dc4e373fdab6647b86f79827502fd087e27f310d6b312363113842155c57a32ba03b6cff965530bd795fc292e241c9b6ca085140032efe746f37d57e958421184b8a4c1a6a1e37d45e077319833068ddcb89d38c75beba1a6e8e4052888ec18162dd6ff0c59a2fd0b47f3119195680ffccddf5f76b35f022aa66bd1ac56f1ae333e9b9d046f0b79a892ecc4f8d2f31e17536c4c62a9b5e063dd2dce37d3d0acb42023eb2f2ea329d3876c2386a02276fff9d308abbadb7274301a6962ecaeeb20bef5e36afffc387ca8e185e562b865b49204c17b2a70119b061c29c0fe9004\",\n        \"signed\": \"f6dcc2d27baf16c4f4817f87499157d3ac1f84ed398a5e8b0d50f42edd7385cf06337a0236109970b79ca09d7c9831c876a802799421c2abd07587f5eb66160fbd53baba6657d8db8becae6eabffa52b015a5a05fdd2e070647de96f9ca4dd219fe0da608fa0447f46d17c9a358244cd5408596582ccd3cdd0151d6f0923e63d166837845f273fca7af6c89d8d5246175c2167fbb9c2ebf6a7595491f97a9713b02bdf413e209ab22db7dd2b37fc49436918ccebe5746bc64ddd6dce19ec4558c40e0896e21909280cba06d16b72f31d987685d071db8155e99ebcc6c821d92683fdcee08668a5ed58f839d9edafb9f1459d48de8e1bb6f7ce84da0be411c8f7be1b9a24bc5d0fe3a96b02350750a5cb250b49555a487672bdff3c3f784e3fb63c1c97ba6ae43a10e196f188dcc635e214e29df509e5608a5367aa2800c1a96ad936a9e2a579b8592ec13a359336a62788c3ec55c0ffd6a7d49ecb7c682efa308199f708d79d0e8856366d269fab24eb1a075c96c881cab89708ced279230d3f1f3ee173672283eb8d8a824038f648ac437275d75a0e15f71ce56a8aeb771f07a7f32afc9d612a13bd83b7f93990d38fc3f4f4ab8aa9430c65736eb64b16806e995c1ce9dcf4c5544e7b3d01541c5721bb4be4cf0ae382a0c1b169d8e418defd559442acea14b00d705bcfa78be0756a8f377cbf183bf25906874115d8ce4c3ba874102938a4ea16036d91a42c5f8f188655cacb00c88e3a68508816e5e1c31d27180bbba9518a9630726d7d047dd8d2c0401219e14e6badfc9b95b77a6ace9bea71d1b47c218903a115ad029e7f2039ea23cfd1fa6a44d089fcacb678153d674c0e081764995595cb6894895f08e25b984e3a694c92fc7cbe0ffc4697230bcb0ca408c2d7085c11badeb3e6c0e75e6c498db1bec1ed2a3e2445c32b1913a89500f69e7f23f41d62e5c189f39a056cb9fc68a452023a333f75220cb9b94484acac6bbc671f59ffa072b71a1896a1b306e9dc558da0ec20f373e4c355e0c5eccbbf1350c8c07914892c454defcefb717be34d087aeb244a86ff49a6c470afb36b40fe8b71c505a4ff7af2984c65284938ec0e405231521f4810147dc4e373fdab6647b86f79827502fd087e27f310d6b312363113842155c57a32ba03b6cff965530bd795fc292e241c9b6ca085140032efe746f37d57e958421184b8a4c1a6a1e37d45e077319833068ddcb89d38c75beba1a6e8e4052888ec18162dd6ff0c59a2fd0b47f3119195680ffccddf5f76b35f022aa66bd1ac56f1ae333e9b9d046f0b79a892ecc4f8d2f31e17536c4c62a9b5e063dd2dce37d3d0acb42023eb2f2ea329d3876c2386a02276fff9d308abbadb7274301a6962ecaeeb20bef5e36afffc387ca8e185e562b865b49204c17b2a70119b061c29c0fe9004\",\n        \"signature\": \"f6dcc2d27baf16c4f4817f87499157d3ac1f84ed398a5e8b0d50f42edd7385cf06337a0236109970b79ca09d7c9831c876a802799421c2abd07587f5eb66160f\"\n    },\n    {\n        \"secret_key\": \"7a2efd390124d3fbefc54a577106e74b2d1f5dd504c050d0d359e53c0f5c872b\",\n        \"public_key\": \"efc303d922e88f70f38c1a2b920684ef663034a1b23ab9d69b6ce8ed8706f7f7\",\n        \"message\": \"238fbe9fb35c725c6c1f329248094bc7da1b273edc7699a7e3452b5788d87867defc40a00590e87580d2c0275df5abcce0e1aaa18290bf93b44e5ad9d760dd21f1aaca383178f9fff9130f73187ba9d31ea3604a1cdf3911e14377a0ce8b44189adaa7aac23b6cdc7a425b7ea745508455704f9ad7a8952718c398b421b6e09cb78cb52a1814ee2e9639ec68d361f0a32041d6e7425b4bb33c70196e2400eb812db8506c9f3245bd988fbc891be20cb0691559fc916b57ff96c9b14489e0993cb739a39da246d01a6ebd07583581f250bf480bc44b2c3391542d595e4d399490195f8445df638f34698f1a96ed27b3533e3eb67e8f865865fa9555ed34df11157641a00e6d60cf623fec1a92b87a15d765185fd9055acb38d75c99db4fce7b0e39fdc3f851daf65c7a33f464816931839fefe8e58d9ab742b861873fd229189e59cd4ce8239fc9543f539d2d296114266ea8c6fd152ac6b342e5d1a557ab35cac51e2d1212ee317c4d26716829e25746df17d2a622c243f3ecbb65f57ab0f4270e3d0668a962502245b94c06df0c5e39e353aa842ea080cf502708b1dda2d001824de458d37762af2cdfd5a6d3f35e08a18e14aa7a642c51e4047e637517846df646d07336fb172434e0883e2b77d8ed1c52c9cc636a56a19e57a5f161b92d1dcbfa496f344ae6d4dfdc9569ade457a49091362e5a0cdd81b3753243fdac30a2d27ea026a5e601441ecd5537a7201bdcb7fd58b240d0229fdd9babf112b5694812250e768d7c0ce6ca565ad06ab8f78a5c9950eef538726f576c4bd2e0755c7f983929372a5fe11c73f9e1fa453ab54b5817aad3596756127d84e3119453e8825bb8460d851f1f7e4a2838a2be786b233504a691db0fa22a5f41fe3fd3c9b538b04f409e091809486b28ad0deda7b38a42cefc48de7d8679c03bf877238511820d0770cc8d7b4172377823a0b99149abb8918bfb66d5abfcd10060b05cb4f239dd4281d93483504b731eaf5add515f1f3c3b52b4e3bdaf976a17b3c9ec61bfc8e77116715804532cf2dbf20b7ba5ead85afb952beec2fccff85ff5072ba4ed6b5438ab1520c6ef4b0b26f12e84aedd65ce5c7bbe6acb6772f593a6b4f81ddd9d502746505047c812a0067afceb8dc9bff30d4087f8d5a375eca605a0622784d8fea278cd1a5241ad4b3f1b914f74f73bc36ee7cc82d96efda63a3b6799730f20656c12356c79069b2be6f9b77be101983118823ea66e7c2098fbc72fc9c039dfe30f2daba13c3bdefb8a780beb5cb1b6c286a6b3ef48fd15c66c045ba29f0970413b988d0ea004ab84c93919f04f9bf8caf58c4eb478f358ef8b68\",\n        \"signed\": \"c28b34804805d81f7aef784970670edaa417232bcc67da9b51e9c3d74fc4991bde97a06bd53fa00bb440fd5616cd0de6e9b0d19f2f68bfaf9d4c5172c4e5200a238fbe9fb35c725c6c1f329248094bc7da1b273edc7699a7e3452b5788d87867defc40a00590e87580d2c0275df5abcce0e1aaa18290bf93b44e5ad9d760dd21f1aaca383178f9fff9130f73187ba9d31ea3604a1cdf3911e14377a0ce8b44189adaa7aac23b6cdc7a425b7ea745508455704f9ad7a8952718c398b421b6e09cb78cb52a1814ee2e9639ec68d361f0a32041d6e7425b4bb33c70196e2400eb812db8506c9f3245bd988fbc891be20cb0691559fc916b57ff96c9b14489e0993cb739a39da246d01a6ebd07583581f250bf480bc44b2c3391542d595e4d399490195f8445df638f34698f1a96ed27b3533e3eb67e8f865865fa9555ed34df11157641a00e6d60cf623fec1a92b87a15d765185fd9055acb38d75c99db4fce7b0e39fdc3f851daf65c7a33f464816931839fefe8e58d9ab742b861873fd229189e59cd4ce8239fc9543f539d2d296114266ea8c6fd152ac6b342e5d1a557ab35cac51e2d1212ee317c4d26716829e25746df17d2a622c243f3ecbb65f57ab0f4270e3d0668a962502245b94c06df0c5e39e353aa842ea080cf502708b1dda2d001824de458d37762af2cdfd5a6d3f35e08a18e14aa7a642c51e4047e637517846df646d07336fb172434e0883e2b77d8ed1c52c9cc636a56a19e57a5f161b92d1dcbfa496f344ae6d4dfdc9569ade457a49091362e5a0cdd81b3753243fdac30a2d27ea026a5e601441ecd5537a7201bdcb7fd58b240d0229fdd9babf112b5694812250e768d7c0ce6ca565ad06ab8f78a5c9950eef538726f576c4bd2e0755c7f983929372a5fe11c73f9e1fa453ab54b5817aad3596756127d84e3119453e8825bb8460d851f1f7e4a2838a2be786b233504a691db0fa22a5f41fe3fd3c9b538b04f409e091809486b28ad0deda7b38a42cefc48de7d8679c03bf877238511820d0770cc8d7b4172377823a0b99149abb8918bfb66d5abfcd10060b05cb4f239dd4281d93483504b731eaf5add515f1f3c3b52b4e3bdaf976a17b3c9ec61bfc8e77116715804532cf2dbf20b7ba5ead85afb952beec2fccff85ff5072ba4ed6b5438ab1520c6ef4b0b26f12e84aedd65ce5c7bbe6acb6772f593a6b4f81ddd9d502746505047c812a0067afceb8dc9bff30d4087f8d5a375eca605a0622784d8fea278cd1a5241ad4b3f1b914f74f73bc36ee7cc82d96efda63a3b6799730f20656c12356c79069b2be6f9b77be101983118823ea66e7c2098fbc72fc9c039dfe30f2daba13c3bdefb8a780beb5cb1b6c286a6b3ef48fd15c66c045ba29f0970413b988d0ea004ab84c93919f04f9bf8caf58c4eb478f358ef8b68\",\n        \"signature\": \"c28b34804805d81f7aef784970670edaa417232bcc67da9b51e9c3d74fc4991bde97a06bd53fa00bb440fd5616cd0de6e9b0d19f2f68bfaf9d4c5172c4e5200a\"\n    },\n    {\n        \"secret_key\": \"ef3648cbe73402ab450cd6ec37e545d0cd2c999ecc1fa381a45c660e18533032\",\n        \"public_key\": \"52a1a45273872676582cc767339926414cd5d03d980cf629dda2d1a205e9830a\",\n        \"message\": \"6a93378f880cf0ffdb8e07d683cc352e2a1033c450baa0e8c4e16205fd0c02743b0ea064971d911e494713e6d94a02172ed014d506592ec6c70a9c97855246bf3d26f3cf74f493c1b697a0c414160c341412830985430806a0cb3c8475e7e5a973686c24d5ef1be7d0065096feb52eab260b5c488af09270de6decd33fea8589dd1021baf41e3f255fb8fa1916ebd8531eeb2f886bb3b3b04f9af6b276c35923f10d3a0af1e3f58b0d15aed165045f206f3f430abdff09449097e4b26d00a8f9f1e8f7a19f38588124c328ec43a9cfb43d3b2c6bdf6a3c1a102e0e333de1ac214a6df76dab44ba76bf035273b7ff6238ec82483b2d2d9d54291a72270f88933b786cac051d990b3cf740845fed3a67867d7c7c05674e7cb02ca5b7acdfba3852803a3d56c4d5c13bb1d7723467741eac1f2a7acd3a95f3a51610a486fc53a9851628c557d36d8a4cd37aae9c4174dbbdb6bd885cf40b382b8ded24a4522a278fef76c45319067e55286e7b08c603486e38a0acf47edef848ecbe942eceadb8636c833feb882a51a4595e24f607ca3c9da1b2404ce5c747e06264174d64504331709bef30055a5d695e09537c8f8c1e5a3a5db06599e319dfdb28729665273bf868955ea56427f08bacd777f179b302f3f68d04f3f3883d344955b655ddc6d5282b6d4df1d83630210e699178e11f722e9e5cda672892ae9b23e8169cbb548093b83e643eb499d937d28f3811597b6484102f0c8eb8c8888cdac229aebf89086a6495ac551f3bbdf2d1c9a93ed1d3a861eecd9eb839949bfbe6a4f6e6486ededab5229d532b58976d67512f9f71ae79b4145ca2fa497a165f110717666ca3340bbda8df1f82b8c054cf7654c35690168f96277d41c1c236b68198173c6e2b0a208ef83c02a43e473d90686ace75b5bd321b3f54281327a673cad4d4ad3040d48cf493ea231b3fec06f39932d7f70a38428df8fee4370532ae5fb112059f0a1d4fbe11b5a23bb87635429ed33ad1f6148014cbc160d93ca2592053a6e95378d6cd3f50db52be928e4092fe5d2b7095a9566864adfda59fd5f2fb6254bd5917b70fa14699665a37297c983c1bb9efe1c67b413dd1a8530cbf227297a8bbf93a8a02454e8e461ac212b846a70d5d56d6c3a6e65a03be0580219bddec88d4038911fd9574563f33e0f9e6044688d3dd48fac703869aa09d96efee7d6c68071d9922d5e8ed8dc40f1b798f1c580f7859cb84f1e14b5e74ddea16ad5cbeea4c48fbcffd29531accc0633938e3bcb2212676b61ef901e9c831a41774d8317ef35af76990bd24931fde6d407e22e763cf6a5790b23761908eee609637a2c11059\",\n        \"signed\": \"f670792942ec414428475638853c42728e86ba12bbe85948b39134cf6e2bd12813e0d83e51e657c90107ad93a4788aa38313fa962f6767a8f7805bde65ca420d6a93378f880cf0ffdb8e07d683cc352e2a1033c450baa0e8c4e16205fd0c02743b0ea064971d911e494713e6d94a02172ed014d506592ec6c70a9c97855246bf3d26f3cf74f493c1b697a0c414160c341412830985430806a0cb3c8475e7e5a973686c24d5ef1be7d0065096feb52eab260b5c488af09270de6decd33fea8589dd1021baf41e3f255fb8fa1916ebd8531eeb2f886bb3b3b04f9af6b276c35923f10d3a0af1e3f58b0d15aed165045f206f3f430abdff09449097e4b26d00a8f9f1e8f7a19f38588124c328ec43a9cfb43d3b2c6bdf6a3c1a102e0e333de1ac214a6df76dab44ba76bf035273b7ff6238ec82483b2d2d9d54291a72270f88933b786cac051d990b3cf740845fed3a67867d7c7c05674e7cb02ca5b7acdfba3852803a3d56c4d5c13bb1d7723467741eac1f2a7acd3a95f3a51610a486fc53a9851628c557d36d8a4cd37aae9c4174dbbdb6bd885cf40b382b8ded24a4522a278fef76c45319067e55286e7b08c603486e38a0acf47edef848ecbe942eceadb8636c833feb882a51a4595e24f607ca3c9da1b2404ce5c747e06264174d64504331709bef30055a5d695e09537c8f8c1e5a3a5db06599e319dfdb28729665273bf868955ea56427f08bacd777f179b302f3f68d04f3f3883d344955b655ddc6d5282b6d4df1d83630210e699178e11f722e9e5cda672892ae9b23e8169cbb548093b83e643eb499d937d28f3811597b6484102f0c8eb8c8888cdac229aebf89086a6495ac551f3bbdf2d1c9a93ed1d3a861eecd9eb839949bfbe6a4f6e6486ededab5229d532b58976d67512f9f71ae79b4145ca2fa497a165f110717666ca3340bbda8df1f82b8c054cf7654c35690168f96277d41c1c236b68198173c6e2b0a208ef83c02a43e473d90686ace75b5bd321b3f54281327a673cad4d4ad3040d48cf493ea231b3fec06f39932d7f70a38428df8fee4370532ae5fb112059f0a1d4fbe11b5a23bb87635429ed33ad1f6148014cbc160d93ca2592053a6e95378d6cd3f50db52be928e4092fe5d2b7095a9566864adfda59fd5f2fb6254bd5917b70fa14699665a37297c983c1bb9efe1c67b413dd1a8530cbf227297a8bbf93a8a02454e8e461ac212b846a70d5d56d6c3a6e65a03be0580219bddec88d4038911fd9574563f33e0f9e6044688d3dd48fac703869aa09d96efee7d6c68071d9922d5e8ed8dc40f1b798f1c580f7859cb84f1e14b5e74ddea16ad5cbeea4c48fbcffd29531accc0633938e3bcb2212676b61ef901e9c831a41774d8317ef35af76990bd24931fde6d407e22e763cf6a5790b23761908eee609637a2c11059\",\n        \"signature\": \"f670792942ec414428475638853c42728e86ba12bbe85948b39134cf6e2bd12813e0d83e51e657c90107ad93a4788aa38313fa962f6767a8f7805bde65ca420d\"\n    },\n    {\n        \"secret_key\": \"2c8ee7fa9ba28ce7049676087b1163b241118d34cdf534aebe8ba59282a62ac2\",\n        \"public_key\": \"244c24f5ecb2dd1d1463512221325d73c81ee4d8adb8e01e23345caf9ca5353b\",\n        \"message\": \"07669a8964f06380d2d4982cb6349de550b38cbc35db2ce572de887f663055736faac7ec07c32df60ee2598422bf37e7cf319ab3c9055608ca0c49757d7688e2013b8244f35404f45ac219497fe924de93a58d0f721aed7825f63b2667077c161eb4dd8bf7ddbdbbc19a9eae5978978d5aeb33a06dde18e612e05bdbcae0161aa2389038026429960dda3aa17e967d10773ca49735d8ecd7409be165c09bb0b509691d591c185c93cdeeae95352316544680523821458caccf528ac0454e4cddc6df0d1ea5f1f5cc1eeee05e19a2ad0b6a49736ed8552336fcfcadbd931b0b8e963be05c8e7037388552512b6823583e4a14384cef5029232d3e0bafe466351b4bb3f567545ab41fa46bffafa877a12b38a27abd64f77fbb4db466ff7f706504141d3add0d7372f16fe3d8c69f6299d93966d624a3070eadb8b49f29fab4844c7528a2a40b66987060695caa66b86718c51049acf4cfad3853edb492e368cbd073968ecaa4a1ee6046b5e826e901f4a808c0427c026fe2f7b2e1968667b53a7d36d702f2ff82c642d34919f8e9aaafe462a3d4f92692deac752be348f54cf089dd9cd051846b04b71931e19e89d125864bfa8948ace0eff33c45110569a0df3753f4c58d8002b5bc38102ec2ecf695fafa8916da9002387e44f96dabf8a982c53c9badbc37bde437f146f77d8f7baf12873196b0c36193af55f542d9968aed8069ab9fbcd6814ec472799ad09c730d41eddeca3b6269d31ab523b59547077376345b05f2ae69b4ee728c863d1bc04e9b7d3d0fcceb359cbd0858597af2d6063e253fae2c3f25034c33ed59edd2782868298681caf564db8d19366f34eae85ba73c1e2389b0dd78a9d2caa0f23c9ad5f6cd9f2c4ad5d58946adb718cb83da58e2fcbb6025bef4660a83e0af55e2030802932f2a896a096079b754c99f7b6423b45a86472e6723ef8896c4324c73d34ad58a4c01b38a97c73be5aa7f74a2fa4d0795af6dbfcd6d4eb442a7e204db4ecb1f8a226bdfa21b6eb171c9e59f1a192e23a76c352b04d8a80233985b77a29c020119ce651c7f4183d0e9c19fe18aa1020c25e4589dee34b901bdaf9ff9450c91af3c1db670b477e0ac2107696c9ec0d31d82647b68ea19499fe34a8e2e7b378dc7e75424e8c45645b0c2818e9f885a1c58415bba1c3f2a77549bdc4680dbcd1650c75d0f452a6b208591df0fa6e181da2abfab444621d5f77c2cd79556467246447a89f0aaacad660c9a925ebafbad43c478a3c850a27e01019d88a5b1dc81b5d2e9f740a028ccb72c1acf897ea5ad89e0f9448888d5b15ce6e42977f7a729155a284d118758ac65f3fbb98deb65\",\n        \"signed\": \"ca0bb6c12356555f6e1d8f5c8aa7b5e80cd280e8b1b9ba2ec9550f622f482c3a9ad3be03a4c9dfc10d0112b0189de94bffafd7034114e0e0d42c23f32dc8180707669a8964f06380d2d4982cb6349de550b38cbc35db2ce572de887f663055736faac7ec07c32df60ee2598422bf37e7cf319ab3c9055608ca0c49757d7688e2013b8244f35404f45ac219497fe924de93a58d0f721aed7825f63b2667077c161eb4dd8bf7ddbdbbc19a9eae5978978d5aeb33a06dde18e612e05bdbcae0161aa2389038026429960dda3aa17e967d10773ca49735d8ecd7409be165c09bb0b509691d591c185c93cdeeae95352316544680523821458caccf528ac0454e4cddc6df0d1ea5f1f5cc1eeee05e19a2ad0b6a49736ed8552336fcfcadbd931b0b8e963be05c8e7037388552512b6823583e4a14384cef5029232d3e0bafe466351b4bb3f567545ab41fa46bffafa877a12b38a27abd64f77fbb4db466ff7f706504141d3add0d7372f16fe3d8c69f6299d93966d624a3070eadb8b49f29fab4844c7528a2a40b66987060695caa66b86718c51049acf4cfad3853edb492e368cbd073968ecaa4a1ee6046b5e826e901f4a808c0427c026fe2f7b2e1968667b53a7d36d702f2ff82c642d34919f8e9aaafe462a3d4f92692deac752be348f54cf089dd9cd051846b04b71931e19e89d125864bfa8948ace0eff33c45110569a0df3753f4c58d8002b5bc38102ec2ecf695fafa8916da9002387e44f96dabf8a982c53c9badbc37bde437f146f77d8f7baf12873196b0c36193af55f542d9968aed8069ab9fbcd6814ec472799ad09c730d41eddeca3b6269d31ab523b59547077376345b05f2ae69b4ee728c863d1bc04e9b7d3d0fcceb359cbd0858597af2d6063e253fae2c3f25034c33ed59edd2782868298681caf564db8d19366f34eae85ba73c1e2389b0dd78a9d2caa0f23c9ad5f6cd9f2c4ad5d58946adb718cb83da58e2fcbb6025bef4660a83e0af55e2030802932f2a896a096079b754c99f7b6423b45a86472e6723ef8896c4324c73d34ad58a4c01b38a97c73be5aa7f74a2fa4d0795af6dbfcd6d4eb442a7e204db4ecb1f8a226bdfa21b6eb171c9e59f1a192e23a76c352b04d8a80233985b77a29c020119ce651c7f4183d0e9c19fe18aa1020c25e4589dee34b901bdaf9ff9450c91af3c1db670b477e0ac2107696c9ec0d31d82647b68ea19499fe34a8e2e7b378dc7e75424e8c45645b0c2818e9f885a1c58415bba1c3f2a77549bdc4680dbcd1650c75d0f452a6b208591df0fa6e181da2abfab444621d5f77c2cd79556467246447a89f0aaacad660c9a925ebafbad43c478a3c850a27e01019d88a5b1dc81b5d2e9f740a028ccb72c1acf897ea5ad89e0f9448888d5b15ce6e42977f7a729155a284d118758ac65f3fbb98deb65\",\n        \"signature\": \"ca0bb6c12356555f6e1d8f5c8aa7b5e80cd280e8b1b9ba2ec9550f622f482c3a9ad3be03a4c9dfc10d0112b0189de94bffafd7034114e0e0d42c23f32dc81807\"\n    },\n    {\n        \"secret_key\": \"ddd8e9ff855679896a1397b427db8543abe8bb5dd122e3e302ccfce5fdc63e12\",\n        \"public_key\": \"5a9a312e892a10b98d0dcdd28db3481c3c28add5ad0b194616da4a3df7660109\",\n        \"message\": \"5e8feec509350d2ee7955b6f3e278278a4cb48ae72b46589e478be59747df5394a169f19e10db53202a6a52320b63a9a2b723fd31aa2db6d58c57332da3178bcf966c53abda35f12daef9edcf399e4a8c5f83d36f44a17d79846bfc96ce690194c219a29892f0367a7ab3844837879e3818db8d70c4e3fba4d28073464df2085951038fea43281b6b606dc8846b30b0763f2ca82bd5021f9117035a77bcd1075477c5f43214334d4d4cedd18f738d676c7b51a185ffa8d04101186a4952bbd8722f53990b60637041e114aeb8ce7111131d4db3fb4d35d995ad8d6650c0c4ccdce9dcc39db188a68785562740626b3ae3e023f40772ded876a45cbef74a058fd78c1a1ff2c2451e111ac1b4b7ee4c81cd76310d4d298fb3c49f5e6401908a630fa85db7471804fe990847f0f759472f593dcf02e113e15e564d30d5984692da55b0b7f2219c4ac1626511acf194dc7026eb9d367a4a2f1dfb515cb2c08da4fe595c85811120cba2ae7b66e67c91fb8fbcb9d99f13e50fd67464d90c8dcf6935523cf6d13fdd10635b9232b7a61dcec9a2b921061410df1de6a45167fb9f6f109dcc08891f203b274a3b68271b3f35e74f94bdced0c5ff8637173a176e7dacc81f2cdc4fb0d52d1dfa7f27b552fd8d87a1c55d6947fd92ed3253f9594db7df17a7fc6a75ecf4faa4d1e21b676b3727d77fbd43fa7be76bfb58fc309e5675f0a859cc47f37b1bf455932d824e86378de7a7e8c40ced22090044dbbf91c70e528eacdef3785ba3c69a3735af6709cd76aab28a6aca6e844974b10b3fb7b0986007a727c2c8fc95b25f31f146b36acd4c537074920aff247de0f179c13ca57790a6a71d62e23321ccc75b7f3b0afa0d03527c9114a7d4e30c1ace6d7712013dee66699af9c561c44ae6198ed39104e6061ae2c45a9a3c74b5d0fbc4a33e8dfe2a8acc9511ef7e6567133f9fe3554284a75a059a649dd24ec04a57730c6d2e9bf114ea58a8994abdb0c1943241572c79ead043ad1c8caaf5c9da53dd05522febc403354d62fe3ff93882df75fb29458d22e6996c35b69faaef2e0c4163886cb3c3d0f60e150d363d6db59fefc626b1bbb1e052a62414c4b7856d72093432b08f821bc784a5a6b0bc2649c2daa508658980d802291e734abaff06afbf2795e4e354d5221dc4f52cc96d6b8cf1808b1a8208db7daa80ab710c56a8b0e9cb8081dee93f5f015f07664463a3dccff7c8ad19923a97e39045bcc4dce0a73d49c56d5e937bd11e61823401c066206e313e60b47537e34704d7d3515559bb9d0532d028e28a57a879fd617cc61f7f776bd6a008cd4f812378ed37f394bb97e6e756da819\",\n        \"signed\": \"df849b7bd29745f8becdddf6c9baf094d7a98cc9338c344eca17fde075fda8d1543299f625982317db7b3c773b64f7d1f28692ac453b81d7ec7b7ec3417ace045e8feec509350d2ee7955b6f3e278278a4cb48ae72b46589e478be59747df5394a169f19e10db53202a6a52320b63a9a2b723fd31aa2db6d58c57332da3178bcf966c53abda35f12daef9edcf399e4a8c5f83d36f44a17d79846bfc96ce690194c219a29892f0367a7ab3844837879e3818db8d70c4e3fba4d28073464df2085951038fea43281b6b606dc8846b30b0763f2ca82bd5021f9117035a77bcd1075477c5f43214334d4d4cedd18f738d676c7b51a185ffa8d04101186a4952bbd8722f53990b60637041e114aeb8ce7111131d4db3fb4d35d995ad8d6650c0c4ccdce9dcc39db188a68785562740626b3ae3e023f40772ded876a45cbef74a058fd78c1a1ff2c2451e111ac1b4b7ee4c81cd76310d4d298fb3c49f5e6401908a630fa85db7471804fe990847f0f759472f593dcf02e113e15e564d30d5984692da55b0b7f2219c4ac1626511acf194dc7026eb9d367a4a2f1dfb515cb2c08da4fe595c85811120cba2ae7b66e67c91fb8fbcb9d99f13e50fd67464d90c8dcf6935523cf6d13fdd10635b9232b7a61dcec9a2b921061410df1de6a45167fb9f6f109dcc08891f203b274a3b68271b3f35e74f94bdced0c5ff8637173a176e7dacc81f2cdc4fb0d52d1dfa7f27b552fd8d87a1c55d6947fd92ed3253f9594db7df17a7fc6a75ecf4faa4d1e21b676b3727d77fbd43fa7be76bfb58fc309e5675f0a859cc47f37b1bf455932d824e86378de7a7e8c40ced22090044dbbf91c70e528eacdef3785ba3c69a3735af6709cd76aab28a6aca6e844974b10b3fb7b0986007a727c2c8fc95b25f31f146b36acd4c537074920aff247de0f179c13ca57790a6a71d62e23321ccc75b7f3b0afa0d03527c9114a7d4e30c1ace6d7712013dee66699af9c561c44ae6198ed39104e6061ae2c45a9a3c74b5d0fbc4a33e8dfe2a8acc9511ef7e6567133f9fe3554284a75a059a649dd24ec04a57730c6d2e9bf114ea58a8994abdb0c1943241572c79ead043ad1c8caaf5c9da53dd05522febc403354d62fe3ff93882df75fb29458d22e6996c35b69faaef2e0c4163886cb3c3d0f60e150d363d6db59fefc626b1bbb1e052a62414c4b7856d72093432b08f821bc784a5a6b0bc2649c2daa508658980d802291e734abaff06afbf2795e4e354d5221dc4f52cc96d6b8cf1808b1a8208db7daa80ab710c56a8b0e9cb8081dee93f5f015f07664463a3dccff7c8ad19923a97e39045bcc4dce0a73d49c56d5e937bd11e61823401c066206e313e60b47537e34704d7d3515559bb9d0532d028e28a57a879fd617cc61f7f776bd6a008cd4f812378ed37f394bb97e6e756da819\",\n        \"signature\": \"df849b7bd29745f8becdddf6c9baf094d7a98cc9338c344eca17fde075fda8d1543299f625982317db7b3c773b64f7d1f28692ac453b81d7ec7b7ec3417ace04\"\n    },\n    {\n        \"secret_key\": \"a886f4d3f34e320ec6d5f4caa863f81477df772eff97e64a37a05f4211d190a8\",\n        \"public_key\": \"e9bc96c81e878110268b55def7ea4007a4ef9f54d383d5fb0f6d4343e1010f38\",\n        \"message\": \"8b831b877bc3a99f613c89cda698b3759d643822b5a88faf3822ecb2ce98f671d7554321b24b74b4e30a663f7a5570ae917f479bda29894b1a8c028c9d193e4e7ac11916dd8e9c3f0ec0ef80bd27fdfeee80c170c78140b24c15271415acf75c26956a4d4bf99d40e861e9078320d097e1259e5ec17b583a95e52430dd8c008ed8c7dd1de1becdd1e6bfec4bf3347a22dd249f3ac307a2945e9137fa4a8c26c8021077239cb324816a8dad32b01ee34a08903098cb9c4245291b903c9627074095249e782813477032ba32ef041a07486eb4478c57b9d532269a4a47cb5e974df7e01096fbe4f1ccd4e663663487974c62cdd94d77716c8479d79f6b6a7d9c155988cf3902fb697424963ec4ec34ff2a35d742c4455a593bacffc4d9699ba7626c76cb1a616253751887f6ffe2be208c713df1ab636d722ea06c1c03a57f2cec0803866cca3335c28bf41c7def81acb38858dc10e59467208624967e2e22d9e5661bb945f9e0517687dc80f9b8fdecc8a97600b6c219a3b23a90b6d18aaace2c78400ff38c8c05967f544b6a606c71ac199eafd07eb5848df1657efb233fbabae63a05638191a0af7484a1bae1581375672c571e264f604225173a54a38dd62ae7130d05dd291ad12354de86a6e113e83f6d668516157b7967020dc6517d8cf42dd7b1a897fe1b4e04553ce26e299980aa5f7ce0179bf4954f01c2a23654e5e9731e1447347fa43aa8b2cbd6d4b2df93fa54af71e5028a6da8c71ef3c50c0de24dcaee785678e92aafabeb233b011f45c1064965085d2547050f21c652aa533afe918aa0f9bdaa2607b873ccd3dbd1d3a8cc62172ceb43b921ef6b25c06b0992e4df2b91e371b0ef2b3947388daec8ec6f7e3867d1f61072af590154fa619a07f87e02bddc7406314270af1c15e8ee88b39c01be602e4f0b52d9a0724e71eddd7fa9134169c5faab915979eea9362d0f1f9160268162dd38db02fcfb41350aa08e1e1409b2288db1fe4a0e586b5910f4de894bf9974f6a4983013a190e7a736d14ec54c3644a3ee958a5bdfbcb6297aba43af6c72746bb135410507d8fdde73a2a48b746f918bef9ed92c5be62dd5523fe14b16d6384ca46ef59b2185fe933383a2c7a9bf02da9d0fd8b0c7d7bde6b439f9960155e345d685d4dc3c71404d656811923aa3c47d4b09a0baef0a12e75b6439ba8135db15865874222cd7aa428f5ca5ce5140e22ff92697f37fc70b5b4c94d3314e6aa16b2146bca4fc94157951fc49245da53f6c43d1bebd894e31a1349884d711b55dbe778ffa727165cf7cb676435866c2d2cb839745ca40166a2f7cfc77a842468b51a8e76575fc9ddfb5f\",\n        \"signed\": \"abf283db1f80c54c583b499dbe20aa04248c1dce121f3911677813ac3e011fd159ad0bf76b1aa7cc7b14d7b550848688252acc7fece90487240c3d399dd343088b831b877bc3a99f613c89cda698b3759d643822b5a88faf3822ecb2ce98f671d7554321b24b74b4e30a663f7a5570ae917f479bda29894b1a8c028c9d193e4e7ac11916dd8e9c3f0ec0ef80bd27fdfeee80c170c78140b24c15271415acf75c26956a4d4bf99d40e861e9078320d097e1259e5ec17b583a95e52430dd8c008ed8c7dd1de1becdd1e6bfec4bf3347a22dd249f3ac307a2945e9137fa4a8c26c8021077239cb324816a8dad32b01ee34a08903098cb9c4245291b903c9627074095249e782813477032ba32ef041a07486eb4478c57b9d532269a4a47cb5e974df7e01096fbe4f1ccd4e663663487974c62cdd94d77716c8479d79f6b6a7d9c155988cf3902fb697424963ec4ec34ff2a35d742c4455a593bacffc4d9699ba7626c76cb1a616253751887f6ffe2be208c713df1ab636d722ea06c1c03a57f2cec0803866cca3335c28bf41c7def81acb38858dc10e59467208624967e2e22d9e5661bb945f9e0517687dc80f9b8fdecc8a97600b6c219a3b23a90b6d18aaace2c78400ff38c8c05967f544b6a606c71ac199eafd07eb5848df1657efb233fbabae63a05638191a0af7484a1bae1581375672c571e264f604225173a54a38dd62ae7130d05dd291ad12354de86a6e113e83f6d668516157b7967020dc6517d8cf42dd7b1a897fe1b4e04553ce26e299980aa5f7ce0179bf4954f01c2a23654e5e9731e1447347fa43aa8b2cbd6d4b2df93fa54af71e5028a6da8c71ef3c50c0de24dcaee785678e92aafabeb233b011f45c1064965085d2547050f21c652aa533afe918aa0f9bdaa2607b873ccd3dbd1d3a8cc62172ceb43b921ef6b25c06b0992e4df2b91e371b0ef2b3947388daec8ec6f7e3867d1f61072af590154fa619a07f87e02bddc7406314270af1c15e8ee88b39c01be602e4f0b52d9a0724e71eddd7fa9134169c5faab915979eea9362d0f1f9160268162dd38db02fcfb41350aa08e1e1409b2288db1fe4a0e586b5910f4de894bf9974f6a4983013a190e7a736d14ec54c3644a3ee958a5bdfbcb6297aba43af6c72746bb135410507d8fdde73a2a48b746f918bef9ed92c5be62dd5523fe14b16d6384ca46ef59b2185fe933383a2c7a9bf02da9d0fd8b0c7d7bde6b439f9960155e345d685d4dc3c71404d656811923aa3c47d4b09a0baef0a12e75b6439ba8135db15865874222cd7aa428f5ca5ce5140e22ff92697f37fc70b5b4c94d3314e6aa16b2146bca4fc94157951fc49245da53f6c43d1bebd894e31a1349884d711b55dbe778ffa727165cf7cb676435866c2d2cb839745ca40166a2f7cfc77a842468b51a8e76575fc9ddfb5f\",\n        \"signature\": \"abf283db1f80c54c583b499dbe20aa04248c1dce121f3911677813ac3e011fd159ad0bf76b1aa7cc7b14d7b550848688252acc7fece90487240c3d399dd34308\"\n    },\n    {\n        \"secret_key\": \"497e3ebd9e4caa81c5a8973d52f1d23f60c134ca53f62a853a0ac043e51cb517\",\n        \"public_key\": \"71c0ca7cfa05cafabb143d84ae41de83846f42c77caa7a91a2e348397d07d52f\",\n        \"message\": \"e132f9d67b1729389b828a9fae05a67aa57f0ef7e7d4d1ba244dec8704db969565d1cab809e48fc0abf950bcd4a37d97aeace6da546d4914cb5b86d6ab181d831870c309bca616468f2a34d3dfafcdbb7580b0c5d9ff98e2c54ec803be0d3fda1d4b8c0d7709c89e680b008bf9b8d903b5e934b019705fe0b0c8cfbc3c0967843b0a1fa1b3f162776ebe96b740edd64ad7c35b3fd1a085c99d16f5416782de17358587470dd13b5194f20f23232b2f702f10aafcaa59c7066f24c4c471e42fa86c6b9c5c3e1e8f8365f4dd75acb32fffc053c9af41c6fd2efac30ecf6a2dd0085de9b1d8cdc50b1660a866df7767198bd9c87370615d2bca99f77b84d98d7b24c9c20fd7768fd0380d6b37360340d13598047820dced88a8d42d572937b6efa16921a1b2b2d0eb931673070838e611e6c023290d86fe902f14ac3acd029e3397feb97b17166245ab407a766d2e0904424d33cd3d6e2e62a52c65df7cf004d1415c0b430c1127623dab272a2c2e2b43e02b481be928e89954272832be098b502b8b5643c67482f5de4403032581f08afb0aea48868582607bb39198c1bf13a869b63258a75890b69445ffd34564023e47f8b1884a5e49b7d9425f28d5153013fe3755c6cb114db180e60b3dc4adb36a21428128005a772fb57189345565bbd1759813523bad62855e7928eef5880d3bfff1d0ec65c24592335cda47cfcc5b5fa652b47263225224846a209a3dd7766661fca4ccca59c456fc9cc3e1cf804255aa5f397bab199804336bde29e55c6c377d583f082ce64723739e4f024606f906c110d0a5b610e5fed96dab5f08f4cb3cfc40a35557e1a740b8c7c01f7d3279dd9c4e8764c90bc14f4161db5a37f0989b7bd8035f8bea394ea1d6002ce9c34f1e9c52c6a15d15bc5b25c6c15ab00dfd6a5b1bc917af0b1b05fd10d061b3683d75b5f9effb22ae72085be4f6797b58cb0cab561844121f98bfd9583e0bccb70fad76980a7a73b23c70b3fd02f7757c11a3c21d19e05650ffb82b9e0df8a6735d480156f47949d445851baeaa5ee23814a41b25234fb92cc0df1980d023d51b5cf4c31185c118e3ee3c0c0a46e0a2be6f1d3ae452cbb66f0fd91971342da7b1b996589d94096781552195c433caf19c37f9f14fa0ae15ae0b02b939e402034ff81885939d944e604f474f21524389390fdada06e30d69068c8848cf0a951eab25c4912562944f402468187a23239d33632f29123d49b7de13083398dba97dede12f7959b95247a08fc8e4b5399d1c035c0894cc75ae981c2dd4935413bbeb6853fe04655c77d158c1237b3e0deca5636d69e0dbc5acaf72b60c10bb98ccdd60098a03\",\n        \"signed\": \"12740839b3c9f1ba879896dff6d725e84e0443ef96c349eff94dc4833143e5b419804da9db118a9592b1b1ca48af18f75bef1ca468a1a5c74c7ac813bb2cf306e132f9d67b1729389b828a9fae05a67aa57f0ef7e7d4d1ba244dec8704db969565d1cab809e48fc0abf950bcd4a37d97aeace6da546d4914cb5b86d6ab181d831870c309bca616468f2a34d3dfafcdbb7580b0c5d9ff98e2c54ec803be0d3fda1d4b8c0d7709c89e680b008bf9b8d903b5e934b019705fe0b0c8cfbc3c0967843b0a1fa1b3f162776ebe96b740edd64ad7c35b3fd1a085c99d16f5416782de17358587470dd13b5194f20f23232b2f702f10aafcaa59c7066f24c4c471e42fa86c6b9c5c3e1e8f8365f4dd75acb32fffc053c9af41c6fd2efac30ecf6a2dd0085de9b1d8cdc50b1660a866df7767198bd9c87370615d2bca99f77b84d98d7b24c9c20fd7768fd0380d6b37360340d13598047820dced88a8d42d572937b6efa16921a1b2b2d0eb931673070838e611e6c023290d86fe902f14ac3acd029e3397feb97b17166245ab407a766d2e0904424d33cd3d6e2e62a52c65df7cf004d1415c0b430c1127623dab272a2c2e2b43e02b481be928e89954272832be098b502b8b5643c67482f5de4403032581f08afb0aea48868582607bb39198c1bf13a869b63258a75890b69445ffd34564023e47f8b1884a5e49b7d9425f28d5153013fe3755c6cb114db180e60b3dc4adb36a21428128005a772fb57189345565bbd1759813523bad62855e7928eef5880d3bfff1d0ec65c24592335cda47cfcc5b5fa652b47263225224846a209a3dd7766661fca4ccca59c456fc9cc3e1cf804255aa5f397bab199804336bde29e55c6c377d583f082ce64723739e4f024606f906c110d0a5b610e5fed96dab5f08f4cb3cfc40a35557e1a740b8c7c01f7d3279dd9c4e8764c90bc14f4161db5a37f0989b7bd8035f8bea394ea1d6002ce9c34f1e9c52c6a15d15bc5b25c6c15ab00dfd6a5b1bc917af0b1b05fd10d061b3683d75b5f9effb22ae72085be4f6797b58cb0cab561844121f98bfd9583e0bccb70fad76980a7a73b23c70b3fd02f7757c11a3c21d19e05650ffb82b9e0df8a6735d480156f47949d445851baeaa5ee23814a41b25234fb92cc0df1980d023d51b5cf4c31185c118e3ee3c0c0a46e0a2be6f1d3ae452cbb66f0fd91971342da7b1b996589d94096781552195c433caf19c37f9f14fa0ae15ae0b02b939e402034ff81885939d944e604f474f21524389390fdada06e30d69068c8848cf0a951eab25c4912562944f402468187a23239d33632f29123d49b7de13083398dba97dede12f7959b95247a08fc8e4b5399d1c035c0894cc75ae981c2dd4935413bbeb6853fe04655c77d158c1237b3e0deca5636d69e0dbc5acaf72b60c10bb98ccdd60098a03\",\n        \"signature\": \"12740839b3c9f1ba879896dff6d725e84e0443ef96c349eff94dc4833143e5b419804da9db118a9592b1b1ca48af18f75bef1ca468a1a5c74c7ac813bb2cf306\"\n    },\n    {\n        \"secret_key\": \"85b4d764169128626fd9c782ad6116229edd77631c2bc9b8ee54b36542c149eb\",\n        \"public_key\": \"6a09897e629bb43704debb6715c9dea5d892b634306440997c3c9e94be8ab547\",\n        \"message\": \"b2a0493d471c3391f7add1e2cf0bfb32ab05dbcb14f6e4f5f3463aa8d99552f433022046d2f8eb763c0171fcb1e74a049ffeb4b8f0100b8210fce856b2e1a8e739d2f93673ef8f8f40498b3081fa1fd785198c6d370e162d41abe83186f2329783408b9b880d00f81d53100b42d27a261f20cdeed19cc58cb8631281d80db1925310e235e44966309b879bdfc232221433bae5cae46690cb527b6779e11f1bd2a56b59c56ed4d94fdf7aa89dfa9bf20dbfa6a4398b98384517e1dd5d2cd9ce524a47362ef32ac792742a129c9e06130876ab5ad5518eabc5e80b022d8fa13e50d55ded589533e6ea32242c1b3fd7e65f80dee720b6d87dcff3e3df04c802d2e914a87a3629c90bb69e0a6f8bbb5ee505f143c9977375adb065c3e3d391f905fa3c336c9da41e4a2320bcf460976fc7eb1fb6c6a3c395dbd1d28a1b09cdb9ae9f9aaee4d9c566a2ac40add870479faf54ad1b7697710b4eb6f7320244b59757d1eac3d922b7a730b1acf0de9a45d4ac879d21fc616ef3965d74345ed70779eb683280cee25bf3739beb6b4cdfa25d202da13a4a673040d97048658b9205479505d0bee4880a73997c70825a6ec5fd9f952e65fa02225445fc3bdf4adea3d4d22551cbaceb3874798d6a33a6663fe3757081d6243dfd7cd2eebf60a3899fa1f8f6c956a3b183f89b9e7d2ca36448584d53aa8b44e65ad3e527f78723fa6f59224298df31d5e8ada567c8d1b11f3b1314755331c1732dc54a12a4356edda47e3c130b325282a354bfe15c3000d207822931794187e0973ab8ef87bf89c354a035a81f45911223563bfd99f90a75e53d010d8929f4f85a5a5a4f9fcc1c78f0a2fc466f5f1c6522cf62a7be37880796e9b3ca0911ecca3f22c3b24d5d9daa6888f89a8f71a15859359cea468ef238ecf646192783a257addade9047e13edd8bcc1fd4177cb20f88d11998d9c7262d648c2bf66fb227b9b3a9ed46962d2257a420f64bead9e28657b521db2e22165287791f3a1bec4c7822a6cabde5ec770188cb74498a4f08e5a3a7639d240ae3f4fd0353c0dda8ae410b9fa7f43feed13e9f13e6c9410a1d24cdfc2c8e64a15a12f75545b0a575713523d4dfa1a47427a8851ba9acccad78b4ef6a185f5c3b001190dd8f37088a000accf448be8d49371d9da2e1cb5ffe07d41a5c22e94660ac37135ac858cb1769cb66e8269fd53358ecacf5dd92c7eb6186b4d4d6130a732dc10bbb2be32f9b1d6951014a635c12d22f0dc5bd5c2a3f96aec62e7777947eaa022812caced33a5bef9ff8835f880367a37b0b76d2dde396c614e1a4721e000c00f161935b14a738a1b70f6ea54255b7951869646212\",\n        \"signed\": \"4a79c442a4c39c62892617ef8e80b40911c4b9d3ff0a5673b57bdb8454ad736769df27c78a4bf7ad566040e747278b11eb65cf9ec7eba866120a3654f4716e00b2a0493d471c3391f7add1e2cf0bfb32ab05dbcb14f6e4f5f3463aa8d99552f433022046d2f8eb763c0171fcb1e74a049ffeb4b8f0100b8210fce856b2e1a8e739d2f93673ef8f8f40498b3081fa1fd785198c6d370e162d41abe83186f2329783408b9b880d00f81d53100b42d27a261f20cdeed19cc58cb8631281d80db1925310e235e44966309b879bdfc232221433bae5cae46690cb527b6779e11f1bd2a56b59c56ed4d94fdf7aa89dfa9bf20dbfa6a4398b98384517e1dd5d2cd9ce524a47362ef32ac792742a129c9e06130876ab5ad5518eabc5e80b022d8fa13e50d55ded589533e6ea32242c1b3fd7e65f80dee720b6d87dcff3e3df04c802d2e914a87a3629c90bb69e0a6f8bbb5ee505f143c9977375adb065c3e3d391f905fa3c336c9da41e4a2320bcf460976fc7eb1fb6c6a3c395dbd1d28a1b09cdb9ae9f9aaee4d9c566a2ac40add870479faf54ad1b7697710b4eb6f7320244b59757d1eac3d922b7a730b1acf0de9a45d4ac879d21fc616ef3965d74345ed70779eb683280cee25bf3739beb6b4cdfa25d202da13a4a673040d97048658b9205479505d0bee4880a73997c70825a6ec5fd9f952e65fa02225445fc3bdf4adea3d4d22551cbaceb3874798d6a33a6663fe3757081d6243dfd7cd2eebf60a3899fa1f8f6c956a3b183f89b9e7d2ca36448584d53aa8b44e65ad3e527f78723fa6f59224298df31d5e8ada567c8d1b11f3b1314755331c1732dc54a12a4356edda47e3c130b325282a354bfe15c3000d207822931794187e0973ab8ef87bf89c354a035a81f45911223563bfd99f90a75e53d010d8929f4f85a5a5a4f9fcc1c78f0a2fc466f5f1c6522cf62a7be37880796e9b3ca0911ecca3f22c3b24d5d9daa6888f89a8f71a15859359cea468ef238ecf646192783a257addade9047e13edd8bcc1fd4177cb20f88d11998d9c7262d648c2bf66fb227b9b3a9ed46962d2257a420f64bead9e28657b521db2e22165287791f3a1bec4c7822a6cabde5ec770188cb74498a4f08e5a3a7639d240ae3f4fd0353c0dda8ae410b9fa7f43feed13e9f13e6c9410a1d24cdfc2c8e64a15a12f75545b0a575713523d4dfa1a47427a8851ba9acccad78b4ef6a185f5c3b001190dd8f37088a000accf448be8d49371d9da2e1cb5ffe07d41a5c22e94660ac37135ac858cb1769cb66e8269fd53358ecacf5dd92c7eb6186b4d4d6130a732dc10bbb2be32f9b1d6951014a635c12d22f0dc5bd5c2a3f96aec62e7777947eaa022812caced33a5bef9ff8835f880367a37b0b76d2dde396c614e1a4721e000c00f161935b14a738a1b70f6ea54255b7951869646212\",\n        \"signature\": \"4a79c442a4c39c62892617ef8e80b40911c4b9d3ff0a5673b57bdb8454ad736769df27c78a4bf7ad566040e747278b11eb65cf9ec7eba866120a3654f4716e00\"\n    },\n    {\n        \"secret_key\": \"33d477602f296305a6719ea694c044e90d233c2dea85c46abe1920e88c317849\",\n        \"public_key\": \"ff6feea028ec346dd49107bb713fddbb282ebcd034e2eafc7cdb1c5adf926390\",\n        \"message\": \"cfea07a779f1537e498123c676290573efcc5db70245d93dea5c05726f8713d002ae66c1c9690747ca9230b1629d3662ab73d66b949879164b21a35f40cf3799041908ed6f9229ecb390c5f22234e1c5f26b3ab5ba59e78c64969871b428b78516777555af4e89c6fbc193a94695226c6d329991a11bd580d18956089b58a0e42ca35f6c6d2609ade0d0b619d48925c68cd9d2250dff27cf2f0d44448709b679f35bbdce0f496b0a16ca67eaceec258b1aec91775a3a2ee801b1c9a226a6b001926a057a06306727eedae8c577531df04ac09b5b49bcdeabdeb8ac4e8e82cf1e7af835fc611ca7a684b83526042415b1d6652e8634311e194627eae78d011e6f40f645794e36895a23e1bd84883a393ecfe5a248026aea86447059f7a429368f21c89e0145207978b913c80a22d7caf2673f7c76f6c26cf884412e17d0c255430f502bce74e3a310d17f6f4d485da280ed5b5eea6c49ba748d764814b9e3daf6fcc218c2740ca77018f71344519da82ada31e001924fc77679e3e9ff9fab67dd09a61924c821a1fd999f74dfa3f819adb31d15e5ed8aaa52c1bd7cca266711a74dd62104ef3c2bf737fce6942b348a33c3dfd6d92a724b6d5878421aeb230a533fe21c8b2fd3da596a6180a45c986d7ece4cdc8ad681ead69064bbddfc20f3c52125f83395bed1557f67182b9fe99138af3c356c5e652978dd238b761c742f8158e2314b964208330978b0620a13a16d761d52f06e466a4094b65cd6f26854aed6f9a8c2a884a0d0bf4ee587eeb8b602487239a7e58172c809983a8db1c1fc7ce8c48bc8a6fb812d6aa9e83a3ab4ddf7a8d40d3fe00ea16e04062b8aceb9c99eefa41f4f87447828126d0d9c9f8605e8467c5e4d671d5c6d9fa70d747098d941211223b9bcf261938d6704a32d22c61e30f3570a1f5d0998b4791080882aa5623167b63a23f340f0e7c6f9a830a75b74631fa5b57afdb1e6bc22699bb03156675d598353a5d1b55897e4c11061dd145f23e8537c632f75c10df05b25547238574017fe7b64b8e99869157fee35f7ad7e63e99593302929503a96768023b4125ad749dff4b992ee5c2b4f3ada4889e4ae62ec15d2db5969d730db307547f638c3185032b12f75fbb317e47df7b9292ae9e76a2c0a06fcad108cdd235f6e38d967b6379511ff6965c22f2c6680a12b0304eb2b296c99a76c2729d98e0a7824b67f3fe842d6f6ab273e894845b32dc6ddfc7a220f76bd965c69858183c8f357395fc57dc829defaacb5603a757868d5e562f9781ee39e0e94688ad3545b32dd7366b6b047e8d1d3d565997b236e7f7596c5f8d7c1c11bcf4a244620cbd21d559a7c9b3f\",\n        \"signed\": \"caa2879895d4f620b9eb5fed22b4562eeb1ad63822968f76ad91076b166c05ee20864d98bbbc6e79dd0362cacf7a21b4cfc230d6355d43120cfffb948b8f6c0ecfea07a779f1537e498123c676290573efcc5db70245d93dea5c05726f8713d002ae66c1c9690747ca9230b1629d3662ab73d66b949879164b21a35f40cf3799041908ed6f9229ecb390c5f22234e1c5f26b3ab5ba59e78c64969871b428b78516777555af4e89c6fbc193a94695226c6d329991a11bd580d18956089b58a0e42ca35f6c6d2609ade0d0b619d48925c68cd9d2250dff27cf2f0d44448709b679f35bbdce0f496b0a16ca67eaceec258b1aec91775a3a2ee801b1c9a226a6b001926a057a06306727eedae8c577531df04ac09b5b49bcdeabdeb8ac4e8e82cf1e7af835fc611ca7a684b83526042415b1d6652e8634311e194627eae78d011e6f40f645794e36895a23e1bd84883a393ecfe5a248026aea86447059f7a429368f21c89e0145207978b913c80a22d7caf2673f7c76f6c26cf884412e17d0c255430f502bce74e3a310d17f6f4d485da280ed5b5eea6c49ba748d764814b9e3daf6fcc218c2740ca77018f71344519da82ada31e001924fc77679e3e9ff9fab67dd09a61924c821a1fd999f74dfa3f819adb31d15e5ed8aaa52c1bd7cca266711a74dd62104ef3c2bf737fce6942b348a33c3dfd6d92a724b6d5878421aeb230a533fe21c8b2fd3da596a6180a45c986d7ece4cdc8ad681ead69064bbddfc20f3c52125f83395bed1557f67182b9fe99138af3c356c5e652978dd238b761c742f8158e2314b964208330978b0620a13a16d761d52f06e466a4094b65cd6f26854aed6f9a8c2a884a0d0bf4ee587eeb8b602487239a7e58172c809983a8db1c1fc7ce8c48bc8a6fb812d6aa9e83a3ab4ddf7a8d40d3fe00ea16e04062b8aceb9c99eefa41f4f87447828126d0d9c9f8605e8467c5e4d671d5c6d9fa70d747098d941211223b9bcf261938d6704a32d22c61e30f3570a1f5d0998b4791080882aa5623167b63a23f340f0e7c6f9a830a75b74631fa5b57afdb1e6bc22699bb03156675d598353a5d1b55897e4c11061dd145f23e8537c632f75c10df05b25547238574017fe7b64b8e99869157fee35f7ad7e63e99593302929503a96768023b4125ad749dff4b992ee5c2b4f3ada4889e4ae62ec15d2db5969d730db307547f638c3185032b12f75fbb317e47df7b9292ae9e76a2c0a06fcad108cdd235f6e38d967b6379511ff6965c22f2c6680a12b0304eb2b296c99a76c2729d98e0a7824b67f3fe842d6f6ab273e894845b32dc6ddfc7a220f76bd965c69858183c8f357395fc57dc829defaacb5603a757868d5e562f9781ee39e0e94688ad3545b32dd7366b6b047e8d1d3d565997b236e7f7596c5f8d7c1c11bcf4a244620cbd21d559a7c9b3f\",\n        \"signature\": \"caa2879895d4f620b9eb5fed22b4562eeb1ad63822968f76ad91076b166c05ee20864d98bbbc6e79dd0362cacf7a21b4cfc230d6355d43120cfffb948b8f6c0e\"\n    },\n    {\n        \"secret_key\": \"7074568611a66dfca8307cae608bb26995844df435e5300e5b4d7291cc22907f\",\n        \"public_key\": \"ddabddd15eaf83115ddd065d7e220b1efc262a61c52e914347442bde6d002506\",\n        \"message\": \"6c137423eac790b8e8e418b290e0579c7b86b14aed818de8ce53cea3f340a1a95391f984968f2b4229282a8161c09ab149cdacd66970b4013f52e5e68ea8c9db685b2c53073500e5b35e29ea0ba1f4d159a558d361b06516836cf7b9ea501fa0506b985f036a82d9e084489d3bfed34093e2d6d9edf55785ed35a90ce56c761686cc3ea1a2c76ada5ec8c145d818b047cc516eec5d2d6a93a55592d892e3d5cd10c250c04b049b38fc7ec0f39aba15824007336c2b0f7f81d64d5ca3e29d6fda4c23d9ba65d9fe3cb4e03913697287b46a0b1fccd2624e397ae95c5254bcd88d2c7c8f70fdc8173f64c1de32281ab4184693b48a349e6782bc8992b43c7de7cb9d33929bf95306c2af7e938d8486b386f9fd3f0f7161e0e6862d4f9281446865a1c9be2460efbc20151b06e79d014617d0300e671d48767458596625b76dffc558aa9b40612196ec827e1c6fff518fb7ad4bf8c46fcb278885aa491b77a28995cfb9d79640aad174c6df43938e3f1385205c54595b33dede50143746a1705e7e0b69af4a26c3b76515051892b15ca6e48c3d91fbc75e8fe4a0fe8ed2c26c1073beb70ea38d0927029278406755ae6e11da378653649515e0085b5ea7db3249208e33a6c8b6ae8cd80c9bd6b983e73e9b91dbec091fae995f8032427edec02cad9055eb8b7dbcfa80d4f64f5727a152f11c47e52d753a57b6e5fddf774cea4da910026819c41e32b4f199727e23c54ab5d70142b854a27b04e64cf44af2a8995e1200bd117c7a1674edef59bc53f73adaf638e0773b85b56334aff6e11743e3a3d3614aa8a375b3781ec814cc08e71efa7818519cb24af82c331dfd6ac78ec17fd7174b61021e8cf901a2aaa6adbc902a916b2a2f4f79e551501fbf01df6b8518504c1e94646938bed1a8509c2a38fb6a798a7858f409b0f2fb9b3f4817e568c52d9abfe2168cc3650fc43e0f9975fe29e33aed1a7bf30d8631150790650a3cb78c368f1aea9ac60c5eeb969a45f84aa37366a83977190f41ae421e0c46fda3fa01b926fcef8224fda36df4f8a87701fe79fe0628ef0cc02df2bd783207c7db87119a0369fe16eeb38fdc9fb35d9e195fe14f8c1038208ab97700af79f2e2e05496830207c7da8dbe8e9bb73bc471a43f1be650fa92819aeb5dc7eed7eed8171270d219257d19610b89d2d62d3f5b648e139eedf1ff74be01a5ef1d95f812922601ee92515157c4ecadfa3eef9f2a677c003ca4ab9b2c45472ce55e18f40a21fe1b0d45b50b50c52a0b1a5d7c37d8ebc15e020584d9edd7b56505f82078e0f899389135014c86d1e2ed49f9cd319076943553a312ae05ab333526e136714f09a402b3c8\",\n        \"signed\": \"7f653134c0b90f44a489f0b05fc40707ad9f1398f340b447a3c9861f511c9f1568803b7684a04a898c45154dd486bd50758998e126439378b3f59ff367492a0a6c137423eac790b8e8e418b290e0579c7b86b14aed818de8ce53cea3f340a1a95391f984968f2b4229282a8161c09ab149cdacd66970b4013f52e5e68ea8c9db685b2c53073500e5b35e29ea0ba1f4d159a558d361b06516836cf7b9ea501fa0506b985f036a82d9e084489d3bfed34093e2d6d9edf55785ed35a90ce56c761686cc3ea1a2c76ada5ec8c145d818b047cc516eec5d2d6a93a55592d892e3d5cd10c250c04b049b38fc7ec0f39aba15824007336c2b0f7f81d64d5ca3e29d6fda4c23d9ba65d9fe3cb4e03913697287b46a0b1fccd2624e397ae95c5254bcd88d2c7c8f70fdc8173f64c1de32281ab4184693b48a349e6782bc8992b43c7de7cb9d33929bf95306c2af7e938d8486b386f9fd3f0f7161e0e6862d4f9281446865a1c9be2460efbc20151b06e79d014617d0300e671d48767458596625b76dffc558aa9b40612196ec827e1c6fff518fb7ad4bf8c46fcb278885aa491b77a28995cfb9d79640aad174c6df43938e3f1385205c54595b33dede50143746a1705e7e0b69af4a26c3b76515051892b15ca6e48c3d91fbc75e8fe4a0fe8ed2c26c1073beb70ea38d0927029278406755ae6e11da378653649515e0085b5ea7db3249208e33a6c8b6ae8cd80c9bd6b983e73e9b91dbec091fae995f8032427edec02cad9055eb8b7dbcfa80d4f64f5727a152f11c47e52d753a57b6e5fddf774cea4da910026819c41e32b4f199727e23c54ab5d70142b854a27b04e64cf44af2a8995e1200bd117c7a1674edef59bc53f73adaf638e0773b85b56334aff6e11743e3a3d3614aa8a375b3781ec814cc08e71efa7818519cb24af82c331dfd6ac78ec17fd7174b61021e8cf901a2aaa6adbc902a916b2a2f4f79e551501fbf01df6b8518504c1e94646938bed1a8509c2a38fb6a798a7858f409b0f2fb9b3f4817e568c52d9abfe2168cc3650fc43e0f9975fe29e33aed1a7bf30d8631150790650a3cb78c368f1aea9ac60c5eeb969a45f84aa37366a83977190f41ae421e0c46fda3fa01b926fcef8224fda36df4f8a87701fe79fe0628ef0cc02df2bd783207c7db87119a0369fe16eeb38fdc9fb35d9e195fe14f8c1038208ab97700af79f2e2e05496830207c7da8dbe8e9bb73bc471a43f1be650fa92819aeb5dc7eed7eed8171270d219257d19610b89d2d62d3f5b648e139eedf1ff74be01a5ef1d95f812922601ee92515157c4ecadfa3eef9f2a677c003ca4ab9b2c45472ce55e18f40a21fe1b0d45b50b50c52a0b1a5d7c37d8ebc15e020584d9edd7b56505f82078e0f899389135014c86d1e2ed49f9cd319076943553a312ae05ab333526e136714f09a402b3c8\",\n        \"signature\": \"7f653134c0b90f44a489f0b05fc40707ad9f1398f340b447a3c9861f511c9f1568803b7684a04a898c45154dd486bd50758998e126439378b3f59ff367492a0a\"\n    },\n    {\n        \"secret_key\": \"7d7ca8e8d3b84344a5e4dea08b338d8faa5ffc119ce566ef656f0f4584775b21\",\n        \"public_key\": \"0bde34b746d2c5490853064d48c6b4c1cbbc3ee7beff5e8f684c120f315d7e4e\",\n        \"message\": \"0b727075345d619f5cdc7fc4c43cdc19105811d95d069f81c0a62fe1e1178cf1c35db05e2de87d11ae1a6f53ef38b39bf4ed8fbf56ef017a1d3c15b64fe4b2610bf69bd19ac7afd46a2b87b488b6c78ad456811c1dd6bd4a6b5da698739fd1a14ceb9f27f124b69f6bd16de5537aad80681c5633580394da3b84e9b7a55ebab8522d2d6bf1aa4e7b159cbf4e20b50bfe9c711aa047119f1dad8749260b87639e9c141def62026a990373dcfd99f77b0f5ea6adfd8f594b9ce41064a5ed307bf2d8d17370498ad7f45f9c4dd26c420f450f53623bb6d7f3f46a149d8f135bc2913310fb8f9043d099278bbeba39179fa367b01673e1c953effd2caea7311c47c0372744095b1c8f90eef5f1929db1996cd584f615d56fae3aecac3ee88bd0b296f449cc2713c52da695248faa8e389b05a0bcac69dce9719723194f433b0297eb0859019f141a207ce8ccb59882caa6e18f0b43bdddb90a0a85ffd577d6394a1d80489410f92afb85ba506aa9f3f427445d21224b9cb046c05f1bacd7b749fb7b1024d092e4ee4b30a46edf718470c99491c68f4879d62bfce7046d8138cbb9e7212999a4498b455fc90ac283e935de04df6fc999e4434be11063d6e4ee9e096a87bc716d2c819916c37a4e6298c49945366ec3f500720b06dc99d3d8ac303e6c264e28a7c2d419ec622a97a711544fb1f4735b11f8bb1d7e2c816a156287b4cc0c65aaa280b837737f0a84e36de2df2fc3a50df980918fb9e5834b42ac0e0c7278d7fe8db4dbdeca0141d5fef5dc6151f87b8634c241a8fa0a82717899773ae89f537890b9155a7a05bce47866ec2028a47898d485823a2e992319680eb699b0dd5358f546fc537c73d3a4b223a0941518b6d1e66b27676c1b1fc76a08320524a72e297fce17aa80d8ea7b388a55168e7dadb836e9dee707ed25c0ee4db25bee3c485b39649204efaf2820b2736368fc773ce090c385378002c471b094795cb266d39eb7580d701be4c8916f6b38bfe25fdf36d6c4adafa9ae9864c57bb737b49506ed38d62de60cc0599ec6bb1acf24b1d37d60efdeb7d942c53603a2f0476e9512c938b28d495a6f26a907c396b841aedd8e14ac447b495df1f676daccd5a740c042f5772b7db17f4f1a3a1c8e7c488370e736b51e690fd2ddcb5aa61957a7c7975acb2dcb915d074d744279ea1c4169f868873ac5c20890162c1df9656419975a43d3198e18c309a1eb7c1d87873fb15c6da47f548a01f69bdab9c39ef00d418a6f619dd73d7db45cbb6ad225a2de787ba777bc73d28fc304f10009f4022c2cf84de008d70fcdc8ba7f107c369859e9c90ca8a393b553f26605ffd7230c921490700f\",\n        \"signed\": \"d0c3e248a8cb2ddc7e9f21c9c5b009f70ea29da6897cd92c260f047ed68aa1c8b9657f9d826e88f4a512c5003be6406880741263ae7ce6860efe73ad54d482040b727075345d619f5cdc7fc4c43cdc19105811d95d069f81c0a62fe1e1178cf1c35db05e2de87d11ae1a6f53ef38b39bf4ed8fbf56ef017a1d3c15b64fe4b2610bf69bd19ac7afd46a2b87b488b6c78ad456811c1dd6bd4a6b5da698739fd1a14ceb9f27f124b69f6bd16de5537aad80681c5633580394da3b84e9b7a55ebab8522d2d6bf1aa4e7b159cbf4e20b50bfe9c711aa047119f1dad8749260b87639e9c141def62026a990373dcfd99f77b0f5ea6adfd8f594b9ce41064a5ed307bf2d8d17370498ad7f45f9c4dd26c420f450f53623bb6d7f3f46a149d8f135bc2913310fb8f9043d099278bbeba39179fa367b01673e1c953effd2caea7311c47c0372744095b1c8f90eef5f1929db1996cd584f615d56fae3aecac3ee88bd0b296f449cc2713c52da695248faa8e389b05a0bcac69dce9719723194f433b0297eb0859019f141a207ce8ccb59882caa6e18f0b43bdddb90a0a85ffd577d6394a1d80489410f92afb85ba506aa9f3f427445d21224b9cb046c05f1bacd7b749fb7b1024d092e4ee4b30a46edf718470c99491c68f4879d62bfce7046d8138cbb9e7212999a4498b455fc90ac283e935de04df6fc999e4434be11063d6e4ee9e096a87bc716d2c819916c37a4e6298c49945366ec3f500720b06dc99d3d8ac303e6c264e28a7c2d419ec622a97a711544fb1f4735b11f8bb1d7e2c816a156287b4cc0c65aaa280b837737f0a84e36de2df2fc3a50df980918fb9e5834b42ac0e0c7278d7fe8db4dbdeca0141d5fef5dc6151f87b8634c241a8fa0a82717899773ae89f537890b9155a7a05bce47866ec2028a47898d485823a2e992319680eb699b0dd5358f546fc537c73d3a4b223a0941518b6d1e66b27676c1b1fc76a08320524a72e297fce17aa80d8ea7b388a55168e7dadb836e9dee707ed25c0ee4db25bee3c485b39649204efaf2820b2736368fc773ce090c385378002c471b094795cb266d39eb7580d701be4c8916f6b38bfe25fdf36d6c4adafa9ae9864c57bb737b49506ed38d62de60cc0599ec6bb1acf24b1d37d60efdeb7d942c53603a2f0476e9512c938b28d495a6f26a907c396b841aedd8e14ac447b495df1f676daccd5a740c042f5772b7db17f4f1a3a1c8e7c488370e736b51e690fd2ddcb5aa61957a7c7975acb2dcb915d074d744279ea1c4169f868873ac5c20890162c1df9656419975a43d3198e18c309a1eb7c1d87873fb15c6da47f548a01f69bdab9c39ef00d418a6f619dd73d7db45cbb6ad225a2de787ba777bc73d28fc304f10009f4022c2cf84de008d70fcdc8ba7f107c369859e9c90ca8a393b553f26605ffd7230c921490700f\",\n        \"signature\": \"d0c3e248a8cb2ddc7e9f21c9c5b009f70ea29da6897cd92c260f047ed68aa1c8b9657f9d826e88f4a512c5003be6406880741263ae7ce6860efe73ad54d48204\"\n    },\n    {\n        \"secret_key\": \"d21fdd7b10e54a8b6be95a0224ad70664dd92112e2683a4fd279c407db3871bb\",\n        \"public_key\": \"f89c272e7d1cc93d69f694dec9cce05ac247734504829c56997413c8958b9330\",\n        \"message\": \"b8644adbef9c7cab9120acedc8e75c433d036ffae0f955be6a488f1f427a68a8902d026e63dd6c9bf9d97de786b31dd4f4c9a4f8a622f1ffc84da6967ca77433c398f4d3f1c4434989b7ac9d0f3b1be0c8b352824f4e7a083f342ec1be1da8fb755242a654880ef298f05979ff026ddcc044860e6757a29cfaa222a3597e38f1779962a41a4c8ce6a65b878199b4d80f4a0390cac19c226eea4b6036e57ad830ecfc00693e2613d3edf465fc8c4fa293fd8cfc36dc8e37bcebabec0349ebd884e1b28bce824e0d55b6d015383801668b34f5ba723d2ac0a264fab2c728608f162de01179259be2ccb0815002fded8e0d78b02807313e910eb3a7337c534e846f9ee155426e4aef643661b0edb44596fddcd0b3e814c137817a422baa40c9053d0386c6ecdb589052594742677c48dcfc8cd4a93667ed4d87646001eda079e8b99d52ba21c5ec5669fedf6f40447a7ff8901db0ef1847d3cacf0198a2f3bd7bcf2dd811a097fc5e5188b03fdf54e517637a14501000d0d35516caf0699402b48f8d8cc3afb17a56132d08237035a0c95490bfe5d7b7fb40178f281e4d872e47a0e955ce9736f3c333a6adf50ad31994eb9f45327facc8c5d113fad4713fe7f198010d42046bbfe68b0daa79dcb8755929be92f9caa150dfbde3fc9e392b2b701c3021c240e4679de41124b1888e5db5a83d05ceaf49eb440dc45026d450bc984b8d6f02850ecb570eee0a3819b12bc26367b5b98e1b141c9b0a9690ea4a3700dad12395f975d11cd77f96368831f21f4e968cc5ba9ef82474038bc7aa26122d218b743041506aebbd1f987959fd160d6eb7d58d4f576f8c0ca8af868e39b5ea87203937e0308acbeae91e10607e44e8ab495bc01dd573fbadc94479ff92082c7bb7513479c70f0407769025d34d72140c25d821f034a39851a93c623b71c9400e942639f28bbd032e1d8d3c059f7c2cd31d7476462d2776035d07880202dbfe9e07d154622d7ac6175a5afa79fed4dcc13712620c41994e11d924308fb2ff3a1eda44c761bc736f345122f02a40ae6f7dbd03d9fe96ee3d7a3b4a5eefbfcc56dc42ef27bd8085176038b9ebae63aa75035275ec34e4185739d636246770acccc6dc620e2fc9156fa9483e0d9cae0e8c463948a3d97ae8dda5966c88f07093292cce22bbda062baafa7fe84d0ba2d2dd295b23458bcaeb2ef742a2ed1c834483cd709385afeadcbc0a9c6a4f387babf7e3dc36c810db209beb66c8666404c661dfe9d32c4c08afc6f3b1257d6484a755f5ac701eb13f87763fee330ffa0422cd80a92038c6f45292bdee5f89e94c7a652197fc1906b48258372449b1081c6b97134c43c89ee2\",\n        \"signed\": \"6d69e83b3e7ed55a85f9fc9d2519da0b0a1eb4daaee991a6651f5c89190c0de72373cd989d46be1367f9daf1b92fed3b52bba54a1e4cca5bc8726ed07f302501b8644adbef9c7cab9120acedc8e75c433d036ffae0f955be6a488f1f427a68a8902d026e63dd6c9bf9d97de786b31dd4f4c9a4f8a622f1ffc84da6967ca77433c398f4d3f1c4434989b7ac9d0f3b1be0c8b352824f4e7a083f342ec1be1da8fb755242a654880ef298f05979ff026ddcc044860e6757a29cfaa222a3597e38f1779962a41a4c8ce6a65b878199b4d80f4a0390cac19c226eea4b6036e57ad830ecfc00693e2613d3edf465fc8c4fa293fd8cfc36dc8e37bcebabec0349ebd884e1b28bce824e0d55b6d015383801668b34f5ba723d2ac0a264fab2c728608f162de01179259be2ccb0815002fded8e0d78b02807313e910eb3a7337c534e846f9ee155426e4aef643661b0edb44596fddcd0b3e814c137817a422baa40c9053d0386c6ecdb589052594742677c48dcfc8cd4a93667ed4d87646001eda079e8b99d52ba21c5ec5669fedf6f40447a7ff8901db0ef1847d3cacf0198a2f3bd7bcf2dd811a097fc5e5188b03fdf54e517637a14501000d0d35516caf0699402b48f8d8cc3afb17a56132d08237035a0c95490bfe5d7b7fb40178f281e4d872e47a0e955ce9736f3c333a6adf50ad31994eb9f45327facc8c5d113fad4713fe7f198010d42046bbfe68b0daa79dcb8755929be92f9caa150dfbde3fc9e392b2b701c3021c240e4679de41124b1888e5db5a83d05ceaf49eb440dc45026d450bc984b8d6f02850ecb570eee0a3819b12bc26367b5b98e1b141c9b0a9690ea4a3700dad12395f975d11cd77f96368831f21f4e968cc5ba9ef82474038bc7aa26122d218b743041506aebbd1f987959fd160d6eb7d58d4f576f8c0ca8af868e39b5ea87203937e0308acbeae91e10607e44e8ab495bc01dd573fbadc94479ff92082c7bb7513479c70f0407769025d34d72140c25d821f034a39851a93c623b71c9400e942639f28bbd032e1d8d3c059f7c2cd31d7476462d2776035d07880202dbfe9e07d154622d7ac6175a5afa79fed4dcc13712620c41994e11d924308fb2ff3a1eda44c761bc736f345122f02a40ae6f7dbd03d9fe96ee3d7a3b4a5eefbfcc56dc42ef27bd8085176038b9ebae63aa75035275ec34e4185739d636246770acccc6dc620e2fc9156fa9483e0d9cae0e8c463948a3d97ae8dda5966c88f07093292cce22bbda062baafa7fe84d0ba2d2dd295b23458bcaeb2ef742a2ed1c834483cd709385afeadcbc0a9c6a4f387babf7e3dc36c810db209beb66c8666404c661dfe9d32c4c08afc6f3b1257d6484a755f5ac701eb13f87763fee330ffa0422cd80a92038c6f45292bdee5f89e94c7a652197fc1906b48258372449b1081c6b97134c43c89ee2\",\n        \"signature\": \"6d69e83b3e7ed55a85f9fc9d2519da0b0a1eb4daaee991a6651f5c89190c0de72373cd989d46be1367f9daf1b92fed3b52bba54a1e4cca5bc8726ed07f302501\"\n    },\n    {\n        \"secret_key\": \"d336fd8408196d22fb698eb25b7654fda46f5de4c9b4d04950c398b59a44290a\",\n        \"public_key\": \"f3cd96347cea63e500a4c92c3bf215662dd0400784dbf8b595dd3d395f90cc12\",\n        \"message\": \"fb49c19bc4444c28eb2625f31d996d5e36c57fa6fdd772e67b7199cec67eda5451712df7a69dbbd56e7c398796b2001def651c4b9c05ee31d95679535c812a37d31ddb3073199cd704ff7ca2981f7b9c927a7f7d776fb6f609f727e6ea709ce7f43a60793504169a8905d9b23109f0d867966aa3e300c7e11ddedb9cc117b904f62927e48e4d73fe1a6ceccc4ceb08e64ab55f25c98216cec937608ad793146998f14c2985e6c2910df7b1388f9dd863f1e4d7d1621479b8512cdb34e673eb02a48934e39c2d18d70f966d676a2bd75db543d25c5dcdc3ef3b8bc8201848c30961e915d968bdc31946b0d18ede7cb0166dbe1ffeff9439c9c3404af6016c73edeb253d93f562a1a6cdd57898a9b3422587d5f56af3d06b3f6c25751f44460fb3299656dc11227ef4837aabddee400fa53f69e5ced053c76dcecdf0adc9ef80f4b330542ff1fa2df0b8d43cd1c311b1b9955c632c8e5f0491931c04de434df8f7a394e5fef016db2eb7c87b2ac7a4a73043bd7f98ad0a4d453abfb0be8be4cb145742aa56aa5ef2dff12230a510e3b7f82f7847700eeea5905b0289696c4c142bf34bcf81a962d75b8d091055733779335b7fd47a20d17c948ab732947832674371e22e711134f5c919792357f79bf70c4470787528434fc0b4ca093ee92543420d1ca81124f5585317e250821a4f3d8ce0f919de9fbf0127087e676903f6cb39025bcc73a0762954b72e66a6be9b96c97b6f6030bf5ca0bc2727a9a179cf9d9405f3fe18f3492389079a5b65bcb13a0d5ef41c2cd97e702cee4a2feb1e6702bd4c63fe0a4ae994c4287a837bc3f64c2d898857cdb32acd4bd133676e51f77bc7110e3ce52d9204fd2691a6d37078f68e7bcef30fc9c483985822b661119238e40f9cfdcabef2d7b16b059ab24adc05003712bbb128096e37f91bc4c5c81508be27fa0b84940be36bced2e65cd36b39fbdc5ea68614159228ca65c5d8407baf663b528e7d87734c7bc77dc8431a1dd6873cfddfc3e757d9ad1fedd3c798f1fe60e715ee48a6bcbb13b616a89a38e336489d3d6ccb726914112a1bc5d977c9b2a3fac107ad094b038ab75468263c34bda817c056e07a6c56697cb64a0b1f966f6de0bb1c0a71c8a5fe133ba2036d24daccad3fa03b39cd27f832752751055a8155913d040f51dae78d71946ca04d83c7c894c280aaec285543e5fd5e327accca9abef156a13b9571446bd8007ff92dbc0fbaf23a9441b53c1cd740c34c282929101ad2ea8b85d70052991b774e92ff75cc85113e0900b51b863e1f2adaab2dbcf46af479ea248ec2889afbfe737408393a2b1b3301f65c1fac8b676795ab5bf447f05e0daf6776\",\n        \"signed\": \"af7e2df7529fd18d1b21b8fd4c0681505918e2511434fe4e4954e743c1cfa45e4109d36c3eecf2e25d209b9b5d25f7cbc380296d647752e30d3bea3b929b0903fb49c19bc4444c28eb2625f31d996d5e36c57fa6fdd772e67b7199cec67eda5451712df7a69dbbd56e7c398796b2001def651c4b9c05ee31d95679535c812a37d31ddb3073199cd704ff7ca2981f7b9c927a7f7d776fb6f609f727e6ea709ce7f43a60793504169a8905d9b23109f0d867966aa3e300c7e11ddedb9cc117b904f62927e48e4d73fe1a6ceccc4ceb08e64ab55f25c98216cec937608ad793146998f14c2985e6c2910df7b1388f9dd863f1e4d7d1621479b8512cdb34e673eb02a48934e39c2d18d70f966d676a2bd75db543d25c5dcdc3ef3b8bc8201848c30961e915d968bdc31946b0d18ede7cb0166dbe1ffeff9439c9c3404af6016c73edeb253d93f562a1a6cdd57898a9b3422587d5f56af3d06b3f6c25751f44460fb3299656dc11227ef4837aabddee400fa53f69e5ced053c76dcecdf0adc9ef80f4b330542ff1fa2df0b8d43cd1c311b1b9955c632c8e5f0491931c04de434df8f7a394e5fef016db2eb7c87b2ac7a4a73043bd7f98ad0a4d453abfb0be8be4cb145742aa56aa5ef2dff12230a510e3b7f82f7847700eeea5905b0289696c4c142bf34bcf81a962d75b8d091055733779335b7fd47a20d17c948ab732947832674371e22e711134f5c919792357f79bf70c4470787528434fc0b4ca093ee92543420d1ca81124f5585317e250821a4f3d8ce0f919de9fbf0127087e676903f6cb39025bcc73a0762954b72e66a6be9b96c97b6f6030bf5ca0bc2727a9a179cf9d9405f3fe18f3492389079a5b65bcb13a0d5ef41c2cd97e702cee4a2feb1e6702bd4c63fe0a4ae994c4287a837bc3f64c2d898857cdb32acd4bd133676e51f77bc7110e3ce52d9204fd2691a6d37078f68e7bcef30fc9c483985822b661119238e40f9cfdcabef2d7b16b059ab24adc05003712bbb128096e37f91bc4c5c81508be27fa0b84940be36bced2e65cd36b39fbdc5ea68614159228ca65c5d8407baf663b528e7d87734c7bc77dc8431a1dd6873cfddfc3e757d9ad1fedd3c798f1fe60e715ee48a6bcbb13b616a89a38e336489d3d6ccb726914112a1bc5d977c9b2a3fac107ad094b038ab75468263c34bda817c056e07a6c56697cb64a0b1f966f6de0bb1c0a71c8a5fe133ba2036d24daccad3fa03b39cd27f832752751055a8155913d040f51dae78d71946ca04d83c7c894c280aaec285543e5fd5e327accca9abef156a13b9571446bd8007ff92dbc0fbaf23a9441b53c1cd740c34c282929101ad2ea8b85d70052991b774e92ff75cc85113e0900b51b863e1f2adaab2dbcf46af479ea248ec2889afbfe737408393a2b1b3301f65c1fac8b676795ab5bf447f05e0daf6776\",\n        \"signature\": \"af7e2df7529fd18d1b21b8fd4c0681505918e2511434fe4e4954e743c1cfa45e4109d36c3eecf2e25d209b9b5d25f7cbc380296d647752e30d3bea3b929b0903\"\n    },\n    {\n        \"secret_key\": \"6573227841f6f92831146c44c0e480cdf544bb876552cc5f9d42f15bdcc044b8\",\n        \"public_key\": \"192257a54ce5d04c19439fdc9ede18ec856e29870e24d3731fe2224799949b7e\",\n        \"message\": \"6e7c6b122ab36bd135f69e2b85e7fccefb072c12cf088a3229d876eff532389f0577116f7af29f1195e3828839381380467178b229c5a18d7c4943ec970dd18bce723bd0ca91ffa95563546a324fe0b9bf6c0455d4276039e8d291fc7276aa55a1cd3ea05282654a7f9700adcbc78077c5dd0fc86eced48f4a60ccb76bfb8b4562bac22a02d19e4489394ab9719fc144f5db2ef039b37f3b51d1d657a0cf835d71f1a4af01eb9fd885c604a624cbe910bfde093ad3f0cbfd9a48307329d44234bd01191d56e522d72b54e1fe4733da3aec6827eab3554898e03e577b4e7b9dd3f308e616808d0294499f2886295e54c360199ca83a83ff46195ea3c484a66838d51acbe9611eee036ae281c6793cbd451f9271fb5d25ea7c1899ab5d43ed8b9d067bc56d8d4a15f1dab8d8d95d1b17af64cb18c1147551147addcbdd53fbccd9026f855547131bee95071639f649f2d035a25a3e42e38e22bbf038106ce8bc4ad6768ab92cd57afacd04ee55cf0714b768952dac240b1e9b2835ecf7b0d6c407c82524a923b9f54d1b8f12564a872144efad3f3a7d2397cd1217dc5a9c96e43b2960a8425e97e07a02b0dac90f346b91a346a23ed2bb7fe6919c22dff03f62da7dba176e8ddb22f3f3a668891d3f4e69548d0ac4e71e6d28ed5a67ab5ac611d460b67a201f4f56a5003ca7a7d1cd1db6c10075b09227cb8c5dc1666f8be710b4b7bc2b95ae60da4f64179a50d2f88744361591671d36b7296315f6996439ad79821da8e772dfbf55a90d5d52ef7d76b35ffebd42e3525f4530c54a0f23b4d07c5f5974470e89404d176eeff9ef2333619691c59b7aadd42c296b1d0d328d9a3bd59a54bba93a0c1f1d62418c2190c38174b6abea02db66e818320ec4b8bac1c12f18f30dade27e63c58f9e7caf4bf69b265a2f9d91800861acf479e65ec17e680577e058cb16c109bcf9b2909fce3361a2c2685c10be8540a1222db5ecf0cc4d53a4214b7bf6248adc3a861e34841a3779c46046c5364f1ea91a78c9700d462ecfaae36ba760c1bd6a237c961edf4022cedefe5e937bbed7051ae61b96d08b0487ce0568ff0d32740bbd49ad0db86e09102ab21a915616e9dfddc81ebfb36c903e07a40cd2dd119ff4a50b93fc6fdfc0f36e59e0148fcff3fe8e2cd6d30a9e4b8f015567d118b6274e1ed75b22e44ca9d9dbfc160742cfac581e1a0bf5ff3326bc5f7896b9ca05a811d55e97c834d37a6495cc26cf442bd2d90129895e9cc0ed01e2155293f47a07ab5880c6ca29ed44d9ccbcaada7f3eb60402181488654e04911578b1aa9cdd4b86b0dd2450df3a43081e4110ab58de763924d3c89152e99293e638f9acd8d7\",\n        \"signed\": \"538eace493de53384b1e985bb907c094f8168430dab14d37791be6e78ff3f5a306ec70dcac86d993a4c1f75850786d795f022b79be6a547769e41569c5a9a30a6e7c6b122ab36bd135f69e2b85e7fccefb072c12cf088a3229d876eff532389f0577116f7af29f1195e3828839381380467178b229c5a18d7c4943ec970dd18bce723bd0ca91ffa95563546a324fe0b9bf6c0455d4276039e8d291fc7276aa55a1cd3ea05282654a7f9700adcbc78077c5dd0fc86eced48f4a60ccb76bfb8b4562bac22a02d19e4489394ab9719fc144f5db2ef039b37f3b51d1d657a0cf835d71f1a4af01eb9fd885c604a624cbe910bfde093ad3f0cbfd9a48307329d44234bd01191d56e522d72b54e1fe4733da3aec6827eab3554898e03e577b4e7b9dd3f308e616808d0294499f2886295e54c360199ca83a83ff46195ea3c484a66838d51acbe9611eee036ae281c6793cbd451f9271fb5d25ea7c1899ab5d43ed8b9d067bc56d8d4a15f1dab8d8d95d1b17af64cb18c1147551147addcbdd53fbccd9026f855547131bee95071639f649f2d035a25a3e42e38e22bbf038106ce8bc4ad6768ab92cd57afacd04ee55cf0714b768952dac240b1e9b2835ecf7b0d6c407c82524a923b9f54d1b8f12564a872144efad3f3a7d2397cd1217dc5a9c96e43b2960a8425e97e07a02b0dac90f346b91a346a23ed2bb7fe6919c22dff03f62da7dba176e8ddb22f3f3a668891d3f4e69548d0ac4e71e6d28ed5a67ab5ac611d460b67a201f4f56a5003ca7a7d1cd1db6c10075b09227cb8c5dc1666f8be710b4b7bc2b95ae60da4f64179a50d2f88744361591671d36b7296315f6996439ad79821da8e772dfbf55a90d5d52ef7d76b35ffebd42e3525f4530c54a0f23b4d07c5f5974470e89404d176eeff9ef2333619691c59b7aadd42c296b1d0d328d9a3bd59a54bba93a0c1f1d62418c2190c38174b6abea02db66e818320ec4b8bac1c12f18f30dade27e63c58f9e7caf4bf69b265a2f9d91800861acf479e65ec17e680577e058cb16c109bcf9b2909fce3361a2c2685c10be8540a1222db5ecf0cc4d53a4214b7bf6248adc3a861e34841a3779c46046c5364f1ea91a78c9700d462ecfaae36ba760c1bd6a237c961edf4022cedefe5e937bbed7051ae61b96d08b0487ce0568ff0d32740bbd49ad0db86e09102ab21a915616e9dfddc81ebfb36c903e07a40cd2dd119ff4a50b93fc6fdfc0f36e59e0148fcff3fe8e2cd6d30a9e4b8f015567d118b6274e1ed75b22e44ca9d9dbfc160742cfac581e1a0bf5ff3326bc5f7896b9ca05a811d55e97c834d37a6495cc26cf442bd2d90129895e9cc0ed01e2155293f47a07ab5880c6ca29ed44d9ccbcaada7f3eb60402181488654e04911578b1aa9cdd4b86b0dd2450df3a43081e4110ab58de763924d3c89152e99293e638f9acd8d7\",\n        \"signature\": \"538eace493de53384b1e985bb907c094f8168430dab14d37791be6e78ff3f5a306ec70dcac86d993a4c1f75850786d795f022b79be6a547769e41569c5a9a30a\"\n    },\n    {\n        \"secret_key\": \"a63c1f54b2ca058fed2ee2504b983ff33d570a9baba583c086cefe19f43ec49d\",\n        \"public_key\": \"329b866bca4194297fc1ad5a0eba0df956699c74ab7da5fa5462bd0661471020\",\n        \"message\": \"791b86fd587713478f9234ff30cefc123cd7c3eb125fa74e4c6db64e7844f7c85b1686e71ed08d1a6a04e0ebbdff4ab160c976c8ab9b505f6a7eb0a18427e999a8828df10684f8c75b6a6b0a64c0afa4bb22bed1cb9325359cac3b8c508d98bcb0ebcd748dc132f1d6a360a4450d1292a1fefc4e57e4107a223f421e7d14a384b85c18844d0b9eed2ecb81bb74e8a12652d98505795a013116a7076ccb5493d6a711f7637e97a780e74da1b39b15cc7bbde2e6c4d0d3e8300597c836e80bcb8d8081d974e02432eac88368211d3aaae89a14417108e1ff6737083849c625b40d631f6c8357220c7f37380b3b2cc5d0e2df6b4d1196579dbc57b6c9ea0d41f4fa0e556f943c9448ef42fc78df5996648ce2f3de04d8a663f967f3d933d4f65357ab29ba5b6405fb162972578ddbb2367bed143c854c1088de921d79f5a92a854837eb7702e1ba925c6eac23d134ba1bafc5d46de2a1942c7f366f701b0afabb75cb1d808e1a1e4e3ae5de88e8e9989757458bddd8a806c110cc3a733d1d4ac58a405c4d81134fbc24ccde7d5afe420f9f1785f0a5020fafbb2261222508aa0528b7b48b567200958425efcb42934a880b133444bb109f2a954cfa35a2d17cb05ee3f16d06b321a15f91339abeda243ad6c0919fac51e907e053fdeed1cf03003734137793941b8adf9ab6af819c245d6d56f16964c8a75b0756a8cb0ca8c12ac6e6b3942eebec2f868835f81b109db498a4ca2e021fa765608d23d803dedc9e51453fc1d2a6a38a4aab257c0fe7d67d32a541e014b60e1013a92c1b3ad9e6f11be293b246f9a0c6440b0b54fee75fed2fb75cc91ecb32738c495831586a11242d87dcb4883edf6757a50b18843759b98dd0cef4a3fe10d76370ecda8c83fab87eee2656c5f261c340ea91a560d0e2c64289267f0036ba35944800a5a0aef3f1df839a724e181d79b8a3c16f65ae27953c4aae8ccd30ff5acc4b31e4765c68fb38319f10acf89247b5a39b3b08a191754a24aca9596a1f8a70b6e4f03a2004a9086ff6ed07652a926e1e2df7bdccd5bec16e5c4e968364a09abf9ded93df5fca0bcca5c812976e5cfb3c3493fc175d1d92ee8d1c98fb3382b3ab90c5c0e4bdf6a3ac94767b68d47e6b9c244265e3b1ab0623a8f0100273f2c607de89612c72d39be4c0b4d77a3c61368df40b3608652989d1e19c0aaf0e3c253e562c6409fe6448929b33753de162e6de5bd466a5114fc0e5f57102755e29544f03b28d4f78de9a024dd4c4e8c3c2d44115a7ae15edb4f558aa7dba6426e7e372c54f7940bd7714467f8c3a1add3c640189c31660d8cc01d3c5382e42abc104c723f948a804ca853047b6b87b5b6ef4\",\n        \"signed\": \"283359be41290a51e6a7c5d5725ca4ea0a68f14aca14b0f02566dee21f490da3c7e95f7ab739bc35a7f4f232e971aa157657a633eba0e72dc97af32cdb928702791b86fd587713478f9234ff30cefc123cd7c3eb125fa74e4c6db64e7844f7c85b1686e71ed08d1a6a04e0ebbdff4ab160c976c8ab9b505f6a7eb0a18427e999a8828df10684f8c75b6a6b0a64c0afa4bb22bed1cb9325359cac3b8c508d98bcb0ebcd748dc132f1d6a360a4450d1292a1fefc4e57e4107a223f421e7d14a384b85c18844d0b9eed2ecb81bb74e8a12652d98505795a013116a7076ccb5493d6a711f7637e97a780e74da1b39b15cc7bbde2e6c4d0d3e8300597c836e80bcb8d8081d974e02432eac88368211d3aaae89a14417108e1ff6737083849c625b40d631f6c8357220c7f37380b3b2cc5d0e2df6b4d1196579dbc57b6c9ea0d41f4fa0e556f943c9448ef42fc78df5996648ce2f3de04d8a663f967f3d933d4f65357ab29ba5b6405fb162972578ddbb2367bed143c854c1088de921d79f5a92a854837eb7702e1ba925c6eac23d134ba1bafc5d46de2a1942c7f366f701b0afabb75cb1d808e1a1e4e3ae5de88e8e9989757458bddd8a806c110cc3a733d1d4ac58a405c4d81134fbc24ccde7d5afe420f9f1785f0a5020fafbb2261222508aa0528b7b48b567200958425efcb42934a880b133444bb109f2a954cfa35a2d17cb05ee3f16d06b321a15f91339abeda243ad6c0919fac51e907e053fdeed1cf03003734137793941b8adf9ab6af819c245d6d56f16964c8a75b0756a8cb0ca8c12ac6e6b3942eebec2f868835f81b109db498a4ca2e021fa765608d23d803dedc9e51453fc1d2a6a38a4aab257c0fe7d67d32a541e014b60e1013a92c1b3ad9e6f11be293b246f9a0c6440b0b54fee75fed2fb75cc91ecb32738c495831586a11242d87dcb4883edf6757a50b18843759b98dd0cef4a3fe10d76370ecda8c83fab87eee2656c5f261c340ea91a560d0e2c64289267f0036ba35944800a5a0aef3f1df839a724e181d79b8a3c16f65ae27953c4aae8ccd30ff5acc4b31e4765c68fb38319f10acf89247b5a39b3b08a191754a24aca9596a1f8a70b6e4f03a2004a9086ff6ed07652a926e1e2df7bdccd5bec16e5c4e968364a09abf9ded93df5fca0bcca5c812976e5cfb3c3493fc175d1d92ee8d1c98fb3382b3ab90c5c0e4bdf6a3ac94767b68d47e6b9c244265e3b1ab0623a8f0100273f2c607de89612c72d39be4c0b4d77a3c61368df40b3608652989d1e19c0aaf0e3c253e562c6409fe6448929b33753de162e6de5bd466a5114fc0e5f57102755e29544f03b28d4f78de9a024dd4c4e8c3c2d44115a7ae15edb4f558aa7dba6426e7e372c54f7940bd7714467f8c3a1add3c640189c31660d8cc01d3c5382e42abc104c723f948a804ca853047b6b87b5b6ef4\",\n        \"signature\": \"283359be41290a51e6a7c5d5725ca4ea0a68f14aca14b0f02566dee21f490da3c7e95f7ab739bc35a7f4f232e971aa157657a633eba0e72dc97af32cdb928702\"\n    },\n    {\n        \"secret_key\": \"5b67a6d7c650dd92ddd036ce7a305bc959a497c5e515a68493035cb3850ee03d\",\n        \"public_key\": \"4c6fc1640505fb46669f93048f8ef557099f3fd92a53064b163363a31b7f00aa\",\n        \"message\": \"62ccde31772c57e4853aaf2a8181fdb53fb82790ea6501bfc8f5d4ae8dbd52de42ce2e8961ac1731f4bc085fb561ef09a2442970b6297901aeaa2ee555b7d5e3951c7c351239ddee95ff54f924da95cae7b15ba6a9a1337b8ce4921ed913cd791c1c6941080e548f3c36e845acbfd8d8ce35e2fdc2a2ad6c7e2461bfcbf1aabc55cf0fae428885be5e86533308c9756805219abd7ffc1657b6f4632920a0c10e0e363319d900fcd61e7ddbcd6e762a7db92480c363b2c0640c6bf32d690dd829d8405fa66e4783ebe1cbde9547954a90baad9f774e94549abbff2c1f5caec2bfd28e415d36429d58518c3e17e8699e1989d47b8d627ef9ab4d1e7d120b372c2141304f7fabd0265b8be41f5467f4de9e65c125ee1f27a289c4f7c9a1fbf25bfc2f8d308e7ff52191cb7644c6af204522f2ac87b5f40525fd43d308c8dbc6a861d25db23ee276678a1b6e8e91283be02470482ed6cc9f6e396351d11b1c7e22329c091fe7d368f60653f93b0f6a3f712c20f9d2d8a9a0819872f0c71d7b1c0bc1683a152b484bc21cf556093ab4c0ac16d322ff0bf452e5581e1e7241673884023c7d6e17e2de8059f60e4c18e13bd55fcfee623fd0469c0d0911611d099a257020f2f31bf5078e6e65a135d5bf407620236d6cc759310fa728ff8bb5ec56abbe1a3cd15153f892d958d30d162d01ee665f5b562781d8dcf8428059e5fd225ad78a99ea760fe5d9ee8219c95acb18d05622e10a9b6c67f6d4f6ed11635c5e2e0f85dd5d3cbda65aa423d594a80b40427bc321e0eef9afd2bc8746ab7399ff6d0e1287b661ddc4062d072018f4c10e86cfaed72d9e686ed09d5255d360e3eea2c29b9eaea05fc78c8cdb8c9d4afc7adc6d4aa067b7abfb0a4e940a77580ec206456cb9e9f95f6d565d536e535a167ede8e20ec36081e2fc55aefaf24d227fffe5e6cb03093f443b4c51655d91ca6f275959d1a802adeab44701b31e8b0fd0222c499966c72d1020ad9370e2802be04c9933f6b774f6e8c69fc0bfd315939a127b4e06d0f6f5ede671ce11612126b5187b53329b0a9cb7da3b1ccd67b8c07bab99a662df8ce851f502fc4e1ed1632b6ba555544018f7527e362efc7e3b2ba6f75a1254f428b3b7e0bea69549e7f9c736275550080aee3af5914e3a34be656c77f6b29420e5433f3dff3811f3528208e9d850aa3c29b0f778a2427d5fde30732dfe50443a9c1ad55c72a08ab26ffaf8efb90bcafd3726b00c005c8c0f0dbf2a1353086721e446545b813441194a755fd26b963afd977278d1b10f09001c7ed975403c15cbe7f992ab07b8470c939f866f420f77db779af839700329e0777a6116365d76c36d09d860472a5\",\n        \"signed\": \"0f073c9a586f6f5e08389a2a5e1808e270f0edb6af104496f93757623fea53133a731c445ac23578cd56a3883c08958668631fedf1446ce34f857f90822ba80a62ccde31772c57e4853aaf2a8181fdb53fb82790ea6501bfc8f5d4ae8dbd52de42ce2e8961ac1731f4bc085fb561ef09a2442970b6297901aeaa2ee555b7d5e3951c7c351239ddee95ff54f924da95cae7b15ba6a9a1337b8ce4921ed913cd791c1c6941080e548f3c36e845acbfd8d8ce35e2fdc2a2ad6c7e2461bfcbf1aabc55cf0fae428885be5e86533308c9756805219abd7ffc1657b6f4632920a0c10e0e363319d900fcd61e7ddbcd6e762a7db92480c363b2c0640c6bf32d690dd829d8405fa66e4783ebe1cbde9547954a90baad9f774e94549abbff2c1f5caec2bfd28e415d36429d58518c3e17e8699e1989d47b8d627ef9ab4d1e7d120b372c2141304f7fabd0265b8be41f5467f4de9e65c125ee1f27a289c4f7c9a1fbf25bfc2f8d308e7ff52191cb7644c6af204522f2ac87b5f40525fd43d308c8dbc6a861d25db23ee276678a1b6e8e91283be02470482ed6cc9f6e396351d11b1c7e22329c091fe7d368f60653f93b0f6a3f712c20f9d2d8a9a0819872f0c71d7b1c0bc1683a152b484bc21cf556093ab4c0ac16d322ff0bf452e5581e1e7241673884023c7d6e17e2de8059f60e4c18e13bd55fcfee623fd0469c0d0911611d099a257020f2f31bf5078e6e65a135d5bf407620236d6cc759310fa728ff8bb5ec56abbe1a3cd15153f892d958d30d162d01ee665f5b562781d8dcf8428059e5fd225ad78a99ea760fe5d9ee8219c95acb18d05622e10a9b6c67f6d4f6ed11635c5e2e0f85dd5d3cbda65aa423d594a80b40427bc321e0eef9afd2bc8746ab7399ff6d0e1287b661ddc4062d072018f4c10e86cfaed72d9e686ed09d5255d360e3eea2c29b9eaea05fc78c8cdb8c9d4afc7adc6d4aa067b7abfb0a4e940a77580ec206456cb9e9f95f6d565d536e535a167ede8e20ec36081e2fc55aefaf24d227fffe5e6cb03093f443b4c51655d91ca6f275959d1a802adeab44701b31e8b0fd0222c499966c72d1020ad9370e2802be04c9933f6b774f6e8c69fc0bfd315939a127b4e06d0f6f5ede671ce11612126b5187b53329b0a9cb7da3b1ccd67b8c07bab99a662df8ce851f502fc4e1ed1632b6ba555544018f7527e362efc7e3b2ba6f75a1254f428b3b7e0bea69549e7f9c736275550080aee3af5914e3a34be656c77f6b29420e5433f3dff3811f3528208e9d850aa3c29b0f778a2427d5fde30732dfe50443a9c1ad55c72a08ab26ffaf8efb90bcafd3726b00c005c8c0f0dbf2a1353086721e446545b813441194a755fd26b963afd977278d1b10f09001c7ed975403c15cbe7f992ab07b8470c939f866f420f77db779af839700329e0777a6116365d76c36d09d860472a5\",\n        \"signature\": \"0f073c9a586f6f5e08389a2a5e1808e270f0edb6af104496f93757623fea53133a731c445ac23578cd56a3883c08958668631fedf1446ce34f857f90822ba80a\"\n    },\n    {\n        \"secret_key\": \"2631c8c34d2948ddd5996b4149cefd238ea7452ec22e246124dfa279ccc27db8\",\n        \"public_key\": \"c3906786ffb8a7c27c44c2447f9dde7d666dfe588cfc54f2d25040512a371bc1\",\n        \"message\": \"6f9bdce1443f2856d4a2f22782835012b7818a0e020dbcc22a821658305f134234d14cea636100ed896c2a8fb0e87048ec6f8b31484f78eb171045add72c85710ec9f9b5d43623417b5653be86e7fbf8b4ff91110a808cb41acf66d436e89a737faea4eff3544960f114b833b0b4ebc2c14070b0bfb7b0057eebb842bd1c1ed458ad3428f8f72a1d1db3c4cb4797a399d47a1e6db74dcb2ee24ae81585cf66ef6d9bd223f0f54bc8c1cec1bb4460bef4ffd32ee805c3ca5ee976ff9c14559f8d756662a2bc19e4c5985406a07305c9950d866c9a79a3e5f6c5969753a170e0fc4cc09c6d87a12b44cdf3be1623159e90cab7a8a3e6f01f268595b021b1ef7d00769477270d5584c912e22a367438277f59df20c5620dd5beaa9bb60bee47f4af527d892957b2d12b678b5279a3f83264654c0a0f8d21e709668f30fb6e68f047d0d9a7c2ae9a28f7cb9dbf18f63fc1661f07d310e540c77631f5bdac5824685d7c9aba0fe1d09407a9662ef18eb3e28fd1e8bc892657bc38243a2e6453bdaeabb2791fc5489521295457ad04180ca871f6318792bd15fd1800ce59dd3ecc7e0b72979267d8183e804fdd45daad84fc4cafeb561ea8d6a74a7cde722d96253ab3e75f0adde02a61fd5e1f59cb1f5f1b2e052643589a9e4be4dd6ee64538cb0b109a113f30a58b3565624043662abe17f60e31e89c36c995e00ae07f56a9118a31aec24ad544bc965811218df827c1730bb904bb79b68613f6c994679b6990d775b5cb32db97194bd81019bea41f3a7eef501bf8491b0ea859388452e3ecbe16aa7d5691510a6606c493e4c293961bf40b4cd300d9d22ea1a7724c078b8bab1fd16504e989b136d9251ac9f1ed94a5e9acbd9c04f8058afe03049aed8ba29fa2e8fb44f8e8c04e8727f399e735e6c1496a91a9b2cd2ab02d43b285e9d7610293b6749df1044b30e2da99a564429a23e68c96fce92b08a00b7b742ba97a62ee58776d7dd565a490071d4b19dc648e03329cc5c825d387eba49e2eff6c4341865c464f13f1beb1827a7f268cc15a982480bf084fe3652c1b0e0b4ad26255859abf1c8a7f9b3bef098a9407fdea0a539eb008fdd749fa0186cc0169d9d9e68fe5e54cac32ce57b5c84c2d805eca39c2dbbdd2e02f7d228826712ff4a61411ca0aeb6f01a1f80ef29eeb071a43222d9497184bd85d9e44b166be97cfd2a732af4a233463d3ab543a7a3c7aec555656568840f4dfea217f6553aa98af324c12b2c3214ee76eec700670af68c8c1f36946efd7ff0933e5453f128e9715fdb3344ac10c4bb7ec8f10ddf5db71f1cf0efe40f75e5b6334ef8cf8429b3291e6e4ce379c178affcbc61030eb896d744d\",\n        \"signed\": \"0adc6fa40ffb81f6ef4e4187554917775cf465e7b5e857f2e1e7f400977106d2377ebc76abb1db924c64867e3c6fe38c0b4fcb1d0f9468e8fb235029a81ce6046f9bdce1443f2856d4a2f22782835012b7818a0e020dbcc22a821658305f134234d14cea636100ed896c2a8fb0e87048ec6f8b31484f78eb171045add72c85710ec9f9b5d43623417b5653be86e7fbf8b4ff91110a808cb41acf66d436e89a737faea4eff3544960f114b833b0b4ebc2c14070b0bfb7b0057eebb842bd1c1ed458ad3428f8f72a1d1db3c4cb4797a399d47a1e6db74dcb2ee24ae81585cf66ef6d9bd223f0f54bc8c1cec1bb4460bef4ffd32ee805c3ca5ee976ff9c14559f8d756662a2bc19e4c5985406a07305c9950d866c9a79a3e5f6c5969753a170e0fc4cc09c6d87a12b44cdf3be1623159e90cab7a8a3e6f01f268595b021b1ef7d00769477270d5584c912e22a367438277f59df20c5620dd5beaa9bb60bee47f4af527d892957b2d12b678b5279a3f83264654c0a0f8d21e709668f30fb6e68f047d0d9a7c2ae9a28f7cb9dbf18f63fc1661f07d310e540c77631f5bdac5824685d7c9aba0fe1d09407a9662ef18eb3e28fd1e8bc892657bc38243a2e6453bdaeabb2791fc5489521295457ad04180ca871f6318792bd15fd1800ce59dd3ecc7e0b72979267d8183e804fdd45daad84fc4cafeb561ea8d6a74a7cde722d96253ab3e75f0adde02a61fd5e1f59cb1f5f1b2e052643589a9e4be4dd6ee64538cb0b109a113f30a58b3565624043662abe17f60e31e89c36c995e00ae07f56a9118a31aec24ad544bc965811218df827c1730bb904bb79b68613f6c994679b6990d775b5cb32db97194bd81019bea41f3a7eef501bf8491b0ea859388452e3ecbe16aa7d5691510a6606c493e4c293961bf40b4cd300d9d22ea1a7724c078b8bab1fd16504e989b136d9251ac9f1ed94a5e9acbd9c04f8058afe03049aed8ba29fa2e8fb44f8e8c04e8727f399e735e6c1496a91a9b2cd2ab02d43b285e9d7610293b6749df1044b30e2da99a564429a23e68c96fce92b08a00b7b742ba97a62ee58776d7dd565a490071d4b19dc648e03329cc5c825d387eba49e2eff6c4341865c464f13f1beb1827a7f268cc15a982480bf084fe3652c1b0e0b4ad26255859abf1c8a7f9b3bef098a9407fdea0a539eb008fdd749fa0186cc0169d9d9e68fe5e54cac32ce57b5c84c2d805eca39c2dbbdd2e02f7d228826712ff4a61411ca0aeb6f01a1f80ef29eeb071a43222d9497184bd85d9e44b166be97cfd2a732af4a233463d3ab543a7a3c7aec555656568840f4dfea217f6553aa98af324c12b2c3214ee76eec700670af68c8c1f36946efd7ff0933e5453f128e9715fdb3344ac10c4bb7ec8f10ddf5db71f1cf0efe40f75e5b6334ef8cf8429b3291e6e4ce379c178affcbc61030eb896d744d\",\n        \"signature\": \"0adc6fa40ffb81f6ef4e4187554917775cf465e7b5e857f2e1e7f400977106d2377ebc76abb1db924c64867e3c6fe38c0b4fcb1d0f9468e8fb235029a81ce604\"\n    },\n    {\n        \"secret_key\": \"39769a66f0ca1290fda14375b35c663f6a4b2ab3607179abd99063e2efa2c6a8\",\n        \"public_key\": \"f9fd4c191f38f12190d3285e20c6cee54cfd6ff315300a4efdc8a90e80af4083\",\n        \"message\": \"ff4d8987e3fa36012b7586736b793d659754698cd12b65e5ba9d758cac1649288d20224377283ea5425dec10ab9917d18cd13d1bdf4a769f37044c84faa2a449c689e004c14e005c49da4106ff75ce1303361c6e3e34ccfee75ee9c31cbd06a4bcdbb42fd649be4dfcd664006d6a5f61077c04a6a81db36be86ba42c2951f051aeda64acea496cb924982b9f7d234ac9723fef98a8e12755e326a52fbe35851f411eeb867606d45b513f54526391c554635c180b8fd0ee451afc96e4efd360b61e6baf03dd6d19ba515c31ec1cdd3affffdb27354e3e6b56e9e1a1a1b7d4b57d9d7689bb2fea6c8d3f9ce0df2d9ee919c4230a1f20b85dfefe1ea3d7f77db470e4022429ef609b0ff44946440acb44cd13445bcfa3f20503c26c2fb663c89065fb9334a603eb9ab7152e62629233c44cb00e77716d9b72c84fd1b340634ff1cea347501576100ecb0fd1bb76ae0dff1c2b0948eb71ee2cc31e79d3015d72dbee224a980e0f95a69f793da83a2daa56efe57b2f8ceaac9e55f443ca9e732b48c75fac21c36fa77273c3f34835ffd83c96f00ac6e86cffed08153646c1cea223da9ca360cab97e03b2b6c8fba7c195a39ae52eb2ee864300ae56a10f547f99a3169872249f97774b1798935536f2f5f011ce57613a94fcb7e7286a6d49c10fd929d7671cbb8cf17dfcad4b2485c3d8fd79128721e55d84808763c2afa9c55e3b0cd7bf2f0a66b5e467bec5ee89ad570b60f188b3f7b4a511ff859312ded078d8d0091134fd49bc792d2d7d60b304941c7f23206f99e863b1e2d8c9ecffd2ff0a3a3c754985615a9a92edcead00fe0e05493b198d1f7c90088446bba46038a71f32653b5912b24f43137748b75aec2c15fe4bf5a6f86b8a6cdd9c7447f2ebb0f43b01ca1523e0d496240006ad7ffffafe0df5754b342caff3555d72a27d0b92ca1667665cec43bfb583077a9c1741fa492ce3dc2c7529cded81b8281a3f375948b8a7ced096b2facc25e39029e221b66a53d3979e1f405fd88afc06ec6e4309dc85e69d6ef2b4b49266164a9d9d1c31ee3921127b13381bfb740dd38dc1c7315921f9c2fe58b61b631a7d9fde2dd8a4be3ded0490ae3b8376791955c1c4b4fed00b9f4c38ab7350fc2e37a3150c18162b1faf0337894bc23e74f595e4be33466deab35458be97b4f7565897f06852f71c60fef9101d726b72e0102a97b2ca5211e3806834b0ac1a7df87c2a078df263ef8ba457dc891b7f2e627811ab622b9946f8c6b731f24078d17b06b200c3447f8032aa3e7a243ee422dda2e652fd75713afbce8a59ef8536653a48dcf42a70e7621f9b2802409be1c1a61f32e36789a5c5055e1a8268e9dc438c2e1527\",\n        \"signed\": \"1442dea2807e031159ec6a412d8e07bb3e299308090f218fa7c10a9c5068ef9b64ef11ca9fb92be1d0216b99318ff0f03cb871cd7dd63a38ae1702313e5b250cff4d8987e3fa36012b7586736b793d659754698cd12b65e5ba9d758cac1649288d20224377283ea5425dec10ab9917d18cd13d1bdf4a769f37044c84faa2a449c689e004c14e005c49da4106ff75ce1303361c6e3e34ccfee75ee9c31cbd06a4bcdbb42fd649be4dfcd664006d6a5f61077c04a6a81db36be86ba42c2951f051aeda64acea496cb924982b9f7d234ac9723fef98a8e12755e326a52fbe35851f411eeb867606d45b513f54526391c554635c180b8fd0ee451afc96e4efd360b61e6baf03dd6d19ba515c31ec1cdd3affffdb27354e3e6b56e9e1a1a1b7d4b57d9d7689bb2fea6c8d3f9ce0df2d9ee919c4230a1f20b85dfefe1ea3d7f77db470e4022429ef609b0ff44946440acb44cd13445bcfa3f20503c26c2fb663c89065fb9334a603eb9ab7152e62629233c44cb00e77716d9b72c84fd1b340634ff1cea347501576100ecb0fd1bb76ae0dff1c2b0948eb71ee2cc31e79d3015d72dbee224a980e0f95a69f793da83a2daa56efe57b2f8ceaac9e55f443ca9e732b48c75fac21c36fa77273c3f34835ffd83c96f00ac6e86cffed08153646c1cea223da9ca360cab97e03b2b6c8fba7c195a39ae52eb2ee864300ae56a10f547f99a3169872249f97774b1798935536f2f5f011ce57613a94fcb7e7286a6d49c10fd929d7671cbb8cf17dfcad4b2485c3d8fd79128721e55d84808763c2afa9c55e3b0cd7bf2f0a66b5e467bec5ee89ad570b60f188b3f7b4a511ff859312ded078d8d0091134fd49bc792d2d7d60b304941c7f23206f99e863b1e2d8c9ecffd2ff0a3a3c754985615a9a92edcead00fe0e05493b198d1f7c90088446bba46038a71f32653b5912b24f43137748b75aec2c15fe4bf5a6f86b8a6cdd9c7447f2ebb0f43b01ca1523e0d496240006ad7ffffafe0df5754b342caff3555d72a27d0b92ca1667665cec43bfb583077a9c1741fa492ce3dc2c7529cded81b8281a3f375948b8a7ced096b2facc25e39029e221b66a53d3979e1f405fd88afc06ec6e4309dc85e69d6ef2b4b49266164a9d9d1c31ee3921127b13381bfb740dd38dc1c7315921f9c2fe58b61b631a7d9fde2dd8a4be3ded0490ae3b8376791955c1c4b4fed00b9f4c38ab7350fc2e37a3150c18162b1faf0337894bc23e74f595e4be33466deab35458be97b4f7565897f06852f71c60fef9101d726b72e0102a97b2ca5211e3806834b0ac1a7df87c2a078df263ef8ba457dc891b7f2e627811ab622b9946f8c6b731f24078d17b06b200c3447f8032aa3e7a243ee422dda2e652fd75713afbce8a59ef8536653a48dcf42a70e7621f9b2802409be1c1a61f32e36789a5c5055e1a8268e9dc438c2e1527\",\n        \"signature\": \"1442dea2807e031159ec6a412d8e07bb3e299308090f218fa7c10a9c5068ef9b64ef11ca9fb92be1d0216b99318ff0f03cb871cd7dd63a38ae1702313e5b250c\"\n    },\n    {\n        \"secret_key\": \"0c808b066f0c8e8dbb1c23d6c2cedd0be866d8425f241a9285700ea54536cf6d\",\n        \"public_key\": \"44ee72900450c56ab21f2686d29525d0663e0bdd87725beac5d68baceb69f1d2\",\n        \"message\": \"c945714100581f4e24da11fc0f6c6d0210433f9777525124c55ee072d85d798b705f9d31c8f977db6edfb7a65c78ad2d7d31d6b7b5be40ff1178d303b6839bb0c63210c1d338c103afa0d453eca1bca277d930778ad50802272f03dbe2184fc31ef8ea6abe216997199f7c1b337737968907272aa51bd49c07389c95468cef4fd99ae78ca4542a2bbc0e8aa95214ad1cfff9d5085a434394473b84b74be9bf2f0202ad1ee4616604ca1dd75f4a195342ebbf8fc59f3f79616554dc7bfdd556be437221c10bfad39e119e06045be5fed683d3534fb6cfed33891c96f9c330f28b684f8fbad47c01418eab6ceecc2ed777f4c218a27ac22582392315c53aa7309ec54c6175236e4424dc978465ab628d9544b0be84103eb56f1bafe5e5eaed04c98bfe2e8a2418c6c52a61eace85236b66c7b3b8707ed55641dd9d5da97c99c11cbeb9aa2db147820dc724800a9d80f505fa5af20921cad2435683bb4fc60bddd475f863e2f5950d236399d8d75b404b394a546737f93a62408700b3ab3c1e922b1a859a2915c2d35368815cd45b85b2ac083121ff000f050dcdf415e5275a5c42dae3b15400f3ddaf9339f20a1261a88cd90205639763211152df414a9a6a6218f56b35a2de9e8482449f6da77c9e3d4af0493015a726217f82ac58954fe3e2e34440356b112e06a6f671fb5a6ef4619a6ea7b4e04db3757fb664c396b341ca89001dc1604b51fa9153f9130c1020ff88909287823ab3915ccc85c4e35df6c2f8e6f902be82ba21297fd3835aff5ce02f3c07dc093fcb1aba26e06dfe6f02df79291aaca069ecab9381404c9c3ea1ad409adf292a91e3a582d5a7b68ffbe10a0305248e0967e6df372f281bd192e139979c9866ca8fe1e10e0616dc2d4f85e119e0cb4bfe8cc31d9f5c018b65408524000a3016a23d9914d57e955576e2660b0e0d96c8495a12c3d73122d200b0f0e5ebd446562b08f47934ab499a96991dcf99c96a62880739845d29820150553eae9be0bb41d53d3af01d9867bb4732c90bf6e137316e3b1edcc209a8a09fb062a6ef05f37e57f2c5d1d0cabaf07a8ed7d41455407b096754180aa96d3d96591945dd7a1040a2de60d8e1c054f7854652b732e7a8f5b6474c3baa1840fbe81b1e6b54e201ef0bc8d0f213d7cec1d824d22209ac72525a64b903e773b83f1b68f640279f15053d21ec15ce2ff75922176b7584a16bf1a1f0d636b7942a3d61862f6fd1309972d3141eb769314ca975d020bf02bfddf17d14b60eb786bf9f55989fe473320d4429677e301c682633f813ff26c0a3da92f6d0680616105b0425af338c2ea6153bdd5216fae2afe461e9249c05e32f76ad7c429d92534b686dd1\",\n        \"signed\": \"38c682cedefb13e46b11f7b5f800cc8120d45a83cd8d8dec10c577bb0153d509ba4fdf400998788b706007ce162b96945c7140beee74e19d0743afa4ecfd250ac945714100581f4e24da11fc0f6c6d0210433f9777525124c55ee072d85d798b705f9d31c8f977db6edfb7a65c78ad2d7d31d6b7b5be40ff1178d303b6839bb0c63210c1d338c103afa0d453eca1bca277d930778ad50802272f03dbe2184fc31ef8ea6abe216997199f7c1b337737968907272aa51bd49c07389c95468cef4fd99ae78ca4542a2bbc0e8aa95214ad1cfff9d5085a434394473b84b74be9bf2f0202ad1ee4616604ca1dd75f4a195342ebbf8fc59f3f79616554dc7bfdd556be437221c10bfad39e119e06045be5fed683d3534fb6cfed33891c96f9c330f28b684f8fbad47c01418eab6ceecc2ed777f4c218a27ac22582392315c53aa7309ec54c6175236e4424dc978465ab628d9544b0be84103eb56f1bafe5e5eaed04c98bfe2e8a2418c6c52a61eace85236b66c7b3b8707ed55641dd9d5da97c99c11cbeb9aa2db147820dc724800a9d80f505fa5af20921cad2435683bb4fc60bddd475f863e2f5950d236399d8d75b404b394a546737f93a62408700b3ab3c1e922b1a859a2915c2d35368815cd45b85b2ac083121ff000f050dcdf415e5275a5c42dae3b15400f3ddaf9339f20a1261a88cd90205639763211152df414a9a6a6218f56b35a2de9e8482449f6da77c9e3d4af0493015a726217f82ac58954fe3e2e34440356b112e06a6f671fb5a6ef4619a6ea7b4e04db3757fb664c396b341ca89001dc1604b51fa9153f9130c1020ff88909287823ab3915ccc85c4e35df6c2f8e6f902be82ba21297fd3835aff5ce02f3c07dc093fcb1aba26e06dfe6f02df79291aaca069ecab9381404c9c3ea1ad409adf292a91e3a582d5a7b68ffbe10a0305248e0967e6df372f281bd192e139979c9866ca8fe1e10e0616dc2d4f85e119e0cb4bfe8cc31d9f5c018b65408524000a3016a23d9914d57e955576e2660b0e0d96c8495a12c3d73122d200b0f0e5ebd446562b08f47934ab499a96991dcf99c96a62880739845d29820150553eae9be0bb41d53d3af01d9867bb4732c90bf6e137316e3b1edcc209a8a09fb062a6ef05f37e57f2c5d1d0cabaf07a8ed7d41455407b096754180aa96d3d96591945dd7a1040a2de60d8e1c054f7854652b732e7a8f5b6474c3baa1840fbe81b1e6b54e201ef0bc8d0f213d7cec1d824d22209ac72525a64b903e773b83f1b68f640279f15053d21ec15ce2ff75922176b7584a16bf1a1f0d636b7942a3d61862f6fd1309972d3141eb769314ca975d020bf02bfddf17d14b60eb786bf9f55989fe473320d4429677e301c682633f813ff26c0a3da92f6d0680616105b0425af338c2ea6153bdd5216fae2afe461e9249c05e32f76ad7c429d92534b686dd1\",\n        \"signature\": \"38c682cedefb13e46b11f7b5f800cc8120d45a83cd8d8dec10c577bb0153d509ba4fdf400998788b706007ce162b96945c7140beee74e19d0743afa4ecfd250a\"\n    },\n    {\n        \"secret_key\": \"049dac3c977d9df503496b43d76e5540e315001ad57f15ea9f0870cad2d4f9e9\",\n        \"public_key\": \"fc6f4b7eb39a711680f966d468a61abb13a9b6449bb99fda3d12ce1b506d1b4b\",\n        \"message\": \"7f31e346f68da73716aacb16eea19bb24142dc283e7263ffc3f704a22ae5275a0ef95f0669bae5a54c7feb84bc74873cca0f335d6cff3d8b4a20056c64f5e882cbbbd2ac74207676467e5466ddd56aedf56e097c7f59d945915eb0ebd0c3c83d48888d3e9ede51ad2dd8a0ee1eab4cf87ffa78635afc4d6ef3e87dda3b65565c2985a4ad0acfdfb81cb0e61c67826a6ea0bed4c08aa1a541de60458704ac21ca12f1c8118bb3092c35a40c921e684564562c2c1049dcdc2b8d6a97e3567d356bffb5692a41d89ddda0ec3552152a27577f1cce57d00986dca77edf5e2518158200adf690affb31aaf2b574836839440999f15791cea85342ac94a96c7af7a19e494310ae26675f43c35258e85b6840b99c6b09cfa58d19f1e43a77e397b08c0db1830bca67b39ecd8752da611e0832c6cae7bb8ce74a82e7e7330be5062ed05aa5c84457b007fb5ccdc20a55d54d8e0409c8bd83883d2e029dff26ea5db275dce099e418659a0400f13be9ffdc14e7d645a94677ca846970b7e6ac527fa009a359454b3c49364905189fb49c9bacb650c03cd82875894e3546ba03c32e336fc6516a87676c50d5b80b3054273b157c5d767514e54574b8a101985a8e967e95da8f929800260e08148beee2d7781e9e85d463a94ffefdbb75c28fa8898015680999429cee798b3fd2d96737868a263fba9fb6f4aad56a15c6412ff85e7d3752102daaf25e745fa5f6f174a231fcce8624dd70856f9babcc209144ff6864648dea0d6884566a4c39147805be084e4740bc509309bcb142964bb0cfcf6726a0e04bbf32ae6834732bda0384cea8f4a4849bba0d18646c1c34471896b5bef149f8cab9ec83722b0fb209efe8a04c4a235dc8ddb20acd92765afbf3058740ea70b9c10d9c5aef8606298fe4151593b21f797d92ae9f1e0881b0d271b0d5b10c6ed83c349ec2473fbf2ff780dcd076d8cf0aeafa71fe2b8c5128015f8fbbcfecd5281cd5eacb6fe9ac6eaa6e47d667b9ad4b7e411e6cb7463d567607afbfd0418c4eb06afe847f5e40b499443828d5a273a4a87e46def21a919d73863af0054a099e3adc5450b8e32f51ea52c599a4a2a35351788af7cb71e5c44bcb8df54a601e6ec2c1828b48c4b1ae4463106f10efa5caf3091abf99aaba5252f484d3bbc62bfa6b2a806d23c6331a62fc46bc627679e73ec82dcc08f79143f4b71ecf357ea2f0d74e6d3058e606043f6e8fed704282c16b1f988ffa365cfae9a3cf792e0c5baad70ca7e25776018b5e7f0e9544e1d73f3e5d1e416a5e50fbed296dc1bf4b29a3fbe32efbd7e99c83015d27f535adecf175fc36c1ea4f4423b36dcdc054ba993278e85ac3622d435f5237ba61b49a\",\n        \"signed\": \"7532d1a61a981f303d7c2454354f99540cd484cde9ab337d6f7b51f179220f7fa2073476b41c71529f9836db6b1d0f5a482bbb4c68366176ed14d4d8eefade0d7f31e346f68da73716aacb16eea19bb24142dc283e7263ffc3f704a22ae5275a0ef95f0669bae5a54c7feb84bc74873cca0f335d6cff3d8b4a20056c64f5e882cbbbd2ac74207676467e5466ddd56aedf56e097c7f59d945915eb0ebd0c3c83d48888d3e9ede51ad2dd8a0ee1eab4cf87ffa78635afc4d6ef3e87dda3b65565c2985a4ad0acfdfb81cb0e61c67826a6ea0bed4c08aa1a541de60458704ac21ca12f1c8118bb3092c35a40c921e684564562c2c1049dcdc2b8d6a97e3567d356bffb5692a41d89ddda0ec3552152a27577f1cce57d00986dca77edf5e2518158200adf690affb31aaf2b574836839440999f15791cea85342ac94a96c7af7a19e494310ae26675f43c35258e85b6840b99c6b09cfa58d19f1e43a77e397b08c0db1830bca67b39ecd8752da611e0832c6cae7bb8ce74a82e7e7330be5062ed05aa5c84457b007fb5ccdc20a55d54d8e0409c8bd83883d2e029dff26ea5db275dce099e418659a0400f13be9ffdc14e7d645a94677ca846970b7e6ac527fa009a359454b3c49364905189fb49c9bacb650c03cd82875894e3546ba03c32e336fc6516a87676c50d5b80b3054273b157c5d767514e54574b8a101985a8e967e95da8f929800260e08148beee2d7781e9e85d463a94ffefdbb75c28fa8898015680999429cee798b3fd2d96737868a263fba9fb6f4aad56a15c6412ff85e7d3752102daaf25e745fa5f6f174a231fcce8624dd70856f9babcc209144ff6864648dea0d6884566a4c39147805be084e4740bc509309bcb142964bb0cfcf6726a0e04bbf32ae6834732bda0384cea8f4a4849bba0d18646c1c34471896b5bef149f8cab9ec83722b0fb209efe8a04c4a235dc8ddb20acd92765afbf3058740ea70b9c10d9c5aef8606298fe4151593b21f797d92ae9f1e0881b0d271b0d5b10c6ed83c349ec2473fbf2ff780dcd076d8cf0aeafa71fe2b8c5128015f8fbbcfecd5281cd5eacb6fe9ac6eaa6e47d667b9ad4b7e411e6cb7463d567607afbfd0418c4eb06afe847f5e40b499443828d5a273a4a87e46def21a919d73863af0054a099e3adc5450b8e32f51ea52c599a4a2a35351788af7cb71e5c44bcb8df54a601e6ec2c1828b48c4b1ae4463106f10efa5caf3091abf99aaba5252f484d3bbc62bfa6b2a806d23c6331a62fc46bc627679e73ec82dcc08f79143f4b71ecf357ea2f0d74e6d3058e606043f6e8fed704282c16b1f988ffa365cfae9a3cf792e0c5baad70ca7e25776018b5e7f0e9544e1d73f3e5d1e416a5e50fbed296dc1bf4b29a3fbe32efbd7e99c83015d27f535adecf175fc36c1ea4f4423b36dcdc054ba993278e85ac3622d435f5237ba61b49a\",\n        \"signature\": \"7532d1a61a981f303d7c2454354f99540cd484cde9ab337d6f7b51f179220f7fa2073476b41c71529f9836db6b1d0f5a482bbb4c68366176ed14d4d8eefade0d\"\n    },\n    {\n        \"secret_key\": \"f07d61b5ca1c2700cb50f900c26b7c28f6c6940808c7bafff74fca4b11f425d4\",\n        \"public_key\": \"eb243dfacc2dc6435776d554eced8bf92390604b35557cda51fd203eddb493fa\",\n        \"message\": \"c1c67843d69a0e62e7bf71f90206a3d5595ca3c482aaa767e931b0d6c2f4752ab86991f03583bb138e9f72fab58fd602a4b6b29602cf891408af5a1bfd3398c0178c441461e3f49bc81d64c0d97f5ded692c75d4d64dac5d80d63bd4dc5210c1d9350b142ba6e768f150807ab8a86cacdb59d84ddf660be56203c014fba1e0dc16fa6d32694e14b128edd1f6c6ab445a3ad34174fa9e4b01f25b1d5e6eb76983b4295ce4914d3ae48c704a30e554fc1f868b6272eff06da24bfe17e4e0f0fa46bb08ffb907cb61bebe52df311a64cb578b30fd627df11221ae4003a0b0c68e3c6f95a21c8500d41b2c589cc46a139cacff57dcf00759f52e9ca3dabdb1788ab6b38a5048f58e08e05c394f9d3c72113d452b7084c519f86c1689ffdbae506ed8450522cbe43de27aa3bfdd92a91b71e52a3cbf77c1bd2893eabd407a57fe5e146873bfb2043f4a6147df083e54a2208d1925813fa404e4c47406e7728643ebfb0b10142f909ef856fd3a916bc0851543b82a55f8cd529bd21d9e2909d6d7e77bdcea4673e545ff4a67fa37d65f1f63f11d5d0d55974a30abe188335db5dcbd356658f9b77682d96dabb258ea95951a0559aea4064d5ea1680501dcb4228f2c956f81d2101144af74c716bc8bf4296dc3b831725cc17d3bfd9066a29953b2ecd75059435b49a25ac525b4fbab1779022dfb6de525149dcd902ac8a7e21f344f5f0101480692d61608952c71413e30037945e206c5eeadfc3edc4bae0d796ca0c5f56d6ffb3f0969df9df8a794f5dc83a3b2f5c3ab36bb901bcc31551c550c63fa41d6a8d57bdb9b5c65bc610c3a989752ab28a015e7c2f6b2fbf199a76b9750c0d3d592119c8b4022fa45bade2fbb41432679b52acb4608a95c34aa40bffec10bc98f4729dfccb650b2a052dfb068959e648a92d5aa4dd2d17dde67cdf2e6377af0d4ae379607389d7e3596441b9f4222cff6af73b3300270ce54800bd934a9109a02563adc56ae46584451cdaf4a77538157e5870f4ae12dbc81870f5db41a2cb55e00db3d2231628f1727c3acb99ed3acd8b67156a8005a4cc8f3d3555b79a03773a931f14eebce40b9fe46ede5da0881fb220717e418e8b5a0fe5e477e7285c554e859e16441672b489934a3a9eeb88d78fcc5c1db2d1fbdde392773f6c939972ee8fa3189f4e9872b4abdc83b379c0c10e818dcff75c83d6870729284ced41f2ff55a87c960e63d1211f08071293f6ac63f9bdef38fd5919ca90b3f5e25a6c0c664c4ecf831c64e2d4c6e798a98a3a0f7be7a2463eadaa6a2a348f9a494717123cc0a28c0a5eae3f5b585f2cb8cb260c2c503e41578573cd9b7cba1408dca9d860ae4f8c3d3f322a45b58a2c4\",\n        \"signed\": \"c19b532b8248563932639701bf15bc015faebb17bb98d871616e1048d64ca5f955f558f63b5353a1576fa1acaef39bcbc9021756df5d1ab3bc741accf9059b04c1c67843d69a0e62e7bf71f90206a3d5595ca3c482aaa767e931b0d6c2f4752ab86991f03583bb138e9f72fab58fd602a4b6b29602cf891408af5a1bfd3398c0178c441461e3f49bc81d64c0d97f5ded692c75d4d64dac5d80d63bd4dc5210c1d9350b142ba6e768f150807ab8a86cacdb59d84ddf660be56203c014fba1e0dc16fa6d32694e14b128edd1f6c6ab445a3ad34174fa9e4b01f25b1d5e6eb76983b4295ce4914d3ae48c704a30e554fc1f868b6272eff06da24bfe17e4e0f0fa46bb08ffb907cb61bebe52df311a64cb578b30fd627df11221ae4003a0b0c68e3c6f95a21c8500d41b2c589cc46a139cacff57dcf00759f52e9ca3dabdb1788ab6b38a5048f58e08e05c394f9d3c72113d452b7084c519f86c1689ffdbae506ed8450522cbe43de27aa3bfdd92a91b71e52a3cbf77c1bd2893eabd407a57fe5e146873bfb2043f4a6147df083e54a2208d1925813fa404e4c47406e7728643ebfb0b10142f909ef856fd3a916bc0851543b82a55f8cd529bd21d9e2909d6d7e77bdcea4673e545ff4a67fa37d65f1f63f11d5d0d55974a30abe188335db5dcbd356658f9b77682d96dabb258ea95951a0559aea4064d5ea1680501dcb4228f2c956f81d2101144af74c716bc8bf4296dc3b831725cc17d3bfd9066a29953b2ecd75059435b49a25ac525b4fbab1779022dfb6de525149dcd902ac8a7e21f344f5f0101480692d61608952c71413e30037945e206c5eeadfc3edc4bae0d796ca0c5f56d6ffb3f0969df9df8a794f5dc83a3b2f5c3ab36bb901bcc31551c550c63fa41d6a8d57bdb9b5c65bc610c3a989752ab28a015e7c2f6b2fbf199a76b9750c0d3d592119c8b4022fa45bade2fbb41432679b52acb4608a95c34aa40bffec10bc98f4729dfccb650b2a052dfb068959e648a92d5aa4dd2d17dde67cdf2e6377af0d4ae379607389d7e3596441b9f4222cff6af73b3300270ce54800bd934a9109a02563adc56ae46584451cdaf4a77538157e5870f4ae12dbc81870f5db41a2cb55e00db3d2231628f1727c3acb99ed3acd8b67156a8005a4cc8f3d3555b79a03773a931f14eebce40b9fe46ede5da0881fb220717e418e8b5a0fe5e477e7285c554e859e16441672b489934a3a9eeb88d78fcc5c1db2d1fbdde392773f6c939972ee8fa3189f4e9872b4abdc83b379c0c10e818dcff75c83d6870729284ced41f2ff55a87c960e63d1211f08071293f6ac63f9bdef38fd5919ca90b3f5e25a6c0c664c4ecf831c64e2d4c6e798a98a3a0f7be7a2463eadaa6a2a348f9a494717123cc0a28c0a5eae3f5b585f2cb8cb260c2c503e41578573cd9b7cba1408dca9d860ae4f8c3d3f322a45b58a2c4\",\n        \"signature\": \"c19b532b8248563932639701bf15bc015faebb17bb98d871616e1048d64ca5f955f558f63b5353a1576fa1acaef39bcbc9021756df5d1ab3bc741accf9059b04\"\n    },\n    {\n        \"secret_key\": \"50864a75aa0c69b59350077c204b20757f2b8b6855c37ed721b49f2ac917d6b2\",\n        \"public_key\": \"cff3ebd5ea0c8b5531d9211e2219e4cfe5ded991d8ec424df54cf53c8376f9bd\",\n        \"message\": \"b365f476ac92e76012a7ffd8782af15a3f5ee147f603a367adf2f9724613e8765b037ac0eb1f673736e11363e352ed5ae9eb5a67125ed818900342ae93371c433b91f6021d4be2a052b0da43b3682e7f740ae801d0541057858eb0c9c28d98f03b45e128aaa342c6b602776792aa81241cad06f1338fa0c71757180f588c8301d91c27679b5021cd75d7f6171ee9f8d56e4377679812f6ec5ed46538caed500c1d15f5fc86eaf9ed9cf9a0606b22614faf676462134e3db3582332b483dfa54ca29a5eb0d6bae3380e19d060113453f32bbab7e118627b40bcabf1711bcfeab8957de339436c7088bb883101539a09d3bef088fc1f840764036ffbb33decd12aac57fd26f84823e19553d4d67e000e9436ca323de099bc1ce75ebf5ddccb448cd7a2e4bbd6b32e3f2024f96cc5c7152b8be8ed0bd8e436d324d1ce1dd3cfcc452a28c73a95af8482aa772ae53d5be1292e39d1716b43758fe563c8aa3b74bba5c02d04778d91e3d43dcc72bb7c7b043c05c8745b705ee75b5a4ec7b95b654359fb5e853338219851d40a8afbb4f91ecbb41eb81534196cc0cc9d3eb714396caf045b231722d4486503640419988480a7815808be974287372cfc489965aac5b8095c637581eb910f9055cd1c0a0a3b0b33aca90f7c5b8e6ef683abf0ce53aeba51bec4fc7b427a2347360fca8636d3f1469284f269a9abf0cb1a244a15d6b40465e75cf89092474a8beda033391dd311c499519a08c4f034e71918d7cad41845327c89e7b1e94afb0723782ce5c553ef36791bba63de17d746491894012cebd87b1837a821ef5c624bbc84cc5035f5e70cd9f21b42219a2dce30e0e65c250d0d194d2b52486b03ee66332981a5225174db17e5a8bb4a10ed9c8a445c41442f3bcdb6b4f49e4e1dc87661a7b6e41f35f55dd67bd4cbc6ff58bfbffaffd2c382fcad0cae8f0df9af6acf0940007618a54aee31d932cbd8e8b41ca03821c428a0ef8e58d2435eecd503c54da9c1628f3c749b770519f53bf2d57ed712d075d37337b77a2b10a72d2d590c20d5cec2cacc6c3a8dc113e2d16ef2d1b390ed96e4036acd304e0c7cef9d431f88218aa1f83828dda636b94aa761c7317ecf116cbfc611e5ba6d94c50e994693023bdf2d248ed603f85be73a0008b75adef951dccfa30e42e9f5bb05023ade797506cbf90bb6dce43cf3a1c3141a5cc5fd9a4f3cc557b90e18049b3c130f461e4f32299fa1d1cf9c7f2ea2053565e8160a341cddf99acddd491697fa705124abdab42a5e8fcf048dd9f179384ec92a469aeb11e8bc62b69dbcfcec6681754757e4c5d0fdd9b9cfda49af09b83a5a4a10aed9a4cf7ddfa289209d475ab3318cd4b965e007dce1\",\n        \"signed\": \"177455a71694f12b762fd17e08bdf010a7fc91d19141d7ae2399bd241a998a6a50a9722ac1232c59e4e2aaa828078b2b92f4a54cdf0efebba2c16dbeaf072203b365f476ac92e76012a7ffd8782af15a3f5ee147f603a367adf2f9724613e8765b037ac0eb1f673736e11363e352ed5ae9eb5a67125ed818900342ae93371c433b91f6021d4be2a052b0da43b3682e7f740ae801d0541057858eb0c9c28d98f03b45e128aaa342c6b602776792aa81241cad06f1338fa0c71757180f588c8301d91c27679b5021cd75d7f6171ee9f8d56e4377679812f6ec5ed46538caed500c1d15f5fc86eaf9ed9cf9a0606b22614faf676462134e3db3582332b483dfa54ca29a5eb0d6bae3380e19d060113453f32bbab7e118627b40bcabf1711bcfeab8957de339436c7088bb883101539a09d3bef088fc1f840764036ffbb33decd12aac57fd26f84823e19553d4d67e000e9436ca323de099bc1ce75ebf5ddccb448cd7a2e4bbd6b32e3f2024f96cc5c7152b8be8ed0bd8e436d324d1ce1dd3cfcc452a28c73a95af8482aa772ae53d5be1292e39d1716b43758fe563c8aa3b74bba5c02d04778d91e3d43dcc72bb7c7b043c05c8745b705ee75b5a4ec7b95b654359fb5e853338219851d40a8afbb4f91ecbb41eb81534196cc0cc9d3eb714396caf045b231722d4486503640419988480a7815808be974287372cfc489965aac5b8095c637581eb910f9055cd1c0a0a3b0b33aca90f7c5b8e6ef683abf0ce53aeba51bec4fc7b427a2347360fca8636d3f1469284f269a9abf0cb1a244a15d6b40465e75cf89092474a8beda033391dd311c499519a08c4f034e71918d7cad41845327c89e7b1e94afb0723782ce5c553ef36791bba63de17d746491894012cebd87b1837a821ef5c624bbc84cc5035f5e70cd9f21b42219a2dce30e0e65c250d0d194d2b52486b03ee66332981a5225174db17e5a8bb4a10ed9c8a445c41442f3bcdb6b4f49e4e1dc87661a7b6e41f35f55dd67bd4cbc6ff58bfbffaffd2c382fcad0cae8f0df9af6acf0940007618a54aee31d932cbd8e8b41ca03821c428a0ef8e58d2435eecd503c54da9c1628f3c749b770519f53bf2d57ed712d075d37337b77a2b10a72d2d590c20d5cec2cacc6c3a8dc113e2d16ef2d1b390ed96e4036acd304e0c7cef9d431f88218aa1f83828dda636b94aa761c7317ecf116cbfc611e5ba6d94c50e994693023bdf2d248ed603f85be73a0008b75adef951dccfa30e42e9f5bb05023ade797506cbf90bb6dce43cf3a1c3141a5cc5fd9a4f3cc557b90e18049b3c130f461e4f32299fa1d1cf9c7f2ea2053565e8160a341cddf99acddd491697fa705124abdab42a5e8fcf048dd9f179384ec92a469aeb11e8bc62b69dbcfcec6681754757e4c5d0fdd9b9cfda49af09b83a5a4a10aed9a4cf7ddfa289209d475ab3318cd4b965e007dce1\",\n        \"signature\": \"177455a71694f12b762fd17e08bdf010a7fc91d19141d7ae2399bd241a998a6a50a9722ac1232c59e4e2aaa828078b2b92f4a54cdf0efebba2c16dbeaf072203\"\n    },\n    {\n        \"secret_key\": \"e55f220fff8079148b254189bb294174f8e2c575e57f39d4bac8165c5e56e769\",\n        \"public_key\": \"7fd507d03fe1d6e3f911f059597b0e292ea096f5bc851852916bf1217cafdc6c\",\n        \"message\": \"1e2ce8bf0ea7875df285b1dbd34bbe67307f2e8ac8bc142c3ba314c1642c65a2d62eb2c783f916283ca4ec3e536d3eeb65cfdcc0549ac4f6a45f539ac5df79a6d5768219739d0c9a0cdbb31242296c3312b7ed560043f536cd1de9a9c2b289641a1c2d84f9a68b7c03b8b8567e5dc7138c2cb967c628aa25b2eab434d4490b23507409717cde94da59dc1dc25c7be42a8aa02edcf4d995368e6ba0ee1f953600db98d22de0f8d257020e0a406ee1669bd527b9fe1c611f9be5a3d7528e8b6151670a8663d2ed1a58d3e369bb722a6302d7c172a19bdaf357eedb02279156e3b9034431a7d68a39528eb4023587573eb88f30f94e833e8a23b9d0ac7b5ca87824596bbb0a3d0ca1b16a6878fdf7e2cea34a6ffb95a9ff4e888a97593735b868da75d8707bbfdb1d93eb86a51e2d215f1dd9dcf78388729a3eb0f066ddc941e950c92127198bce63a54868d997029572ffa6f6fea1d3a69164c9996953dc8b6f9dad0635c9b081f55f983340f0814bf5470803090e7997f7ab796c2b15adaf4021d67cffaf6e1ef62867503945c21a329664e08a95a41582300da9bed208444ce6aa12b3f867795c6ee4c4c9257018627361293bd527821a29a339b404a2da4bd9944f877040798bb54abd2d76cbb18df4297f4ce3337f64d20580aa64bdecac376a6a4ff74d0144b2fe74cef82d50a5e6bdd799e55ff69662bac537adcb6881228cb63704500c143a4f4d1db28d4556bee604a399ffd206546597dee92252547f6c657f36841a87d565f6552716c25a21151477bee9ef961855fb1af2da8068f28ce9ff70d5252c7a63a2e14ded6b8977b1d7691a77ed2e57d22ff2e1fc4cdbceb5e805858d903896ea6707e48b345f60e2818b2fcec4dba48caea9efa38279fb83d5b0f46a45e42c41765d0171baacd8d6dda7991314b34e15fd36127c467d1de01c01a3a78a8c1b103bee17a7a0b7ac5576fdc226dd2459773146cf38261417ca19135dbda9bdbe54cd17aa7ddd38fdcac2aba396b365ceae98919f6c5177fc583f5bee3f48704914306aa19ee90e3fd0de5591c669ff35ab16fef38dee187bae1e5aaa566df10544b7d6d4eb00da7ebeb4ecdcc4d8e32b49cbbdc6e66640bdb0f72e05918a05c35d9bff7e0e88f241d7c6c8cb2fedccdf65560af0e7833efe34af790db63189022cfd71fc8acf88860127bd4fbf026bcbe360e33a8995e636d03bb86dfd0198ada959342d8e9c9ed93e23297da98d66a0d4fc965162733bc86541b95a6c9097cb55a973c6fac194e8f8a164274c479c510e62d8a035eb751181b502afb614d8c4467b5445c268dc3dd0abbd577004c0bc47b15fcb801b79359757b5ea89cf8cf77fc6d160e6cd73c4\",\n        \"signed\": \"c1023a7068743ec4668f495eb7bd4db58129c11e58299ea87d6facd302bf296a98e298fdb48eddf9c44e79ae8641f734503bb83dc0b31f610df1d1e9d619a7051e2ce8bf0ea7875df285b1dbd34bbe67307f2e8ac8bc142c3ba314c1642c65a2d62eb2c783f916283ca4ec3e536d3eeb65cfdcc0549ac4f6a45f539ac5df79a6d5768219739d0c9a0cdbb31242296c3312b7ed560043f536cd1de9a9c2b289641a1c2d84f9a68b7c03b8b8567e5dc7138c2cb967c628aa25b2eab434d4490b23507409717cde94da59dc1dc25c7be42a8aa02edcf4d995368e6ba0ee1f953600db98d22de0f8d257020e0a406ee1669bd527b9fe1c611f9be5a3d7528e8b6151670a8663d2ed1a58d3e369bb722a6302d7c172a19bdaf357eedb02279156e3b9034431a7d68a39528eb4023587573eb88f30f94e833e8a23b9d0ac7b5ca87824596bbb0a3d0ca1b16a6878fdf7e2cea34a6ffb95a9ff4e888a97593735b868da75d8707bbfdb1d93eb86a51e2d215f1dd9dcf78388729a3eb0f066ddc941e950c92127198bce63a54868d997029572ffa6f6fea1d3a69164c9996953dc8b6f9dad0635c9b081f55f983340f0814bf5470803090e7997f7ab796c2b15adaf4021d67cffaf6e1ef62867503945c21a329664e08a95a41582300da9bed208444ce6aa12b3f867795c6ee4c4c9257018627361293bd527821a29a339b404a2da4bd9944f877040798bb54abd2d76cbb18df4297f4ce3337f64d20580aa64bdecac376a6a4ff74d0144b2fe74cef82d50a5e6bdd799e55ff69662bac537adcb6881228cb63704500c143a4f4d1db28d4556bee604a399ffd206546597dee92252547f6c657f36841a87d565f6552716c25a21151477bee9ef961855fb1af2da8068f28ce9ff70d5252c7a63a2e14ded6b8977b1d7691a77ed2e57d22ff2e1fc4cdbceb5e805858d903896ea6707e48b345f60e2818b2fcec4dba48caea9efa38279fb83d5b0f46a45e42c41765d0171baacd8d6dda7991314b34e15fd36127c467d1de01c01a3a78a8c1b103bee17a7a0b7ac5576fdc226dd2459773146cf38261417ca19135dbda9bdbe54cd17aa7ddd38fdcac2aba396b365ceae98919f6c5177fc583f5bee3f48704914306aa19ee90e3fd0de5591c669ff35ab16fef38dee187bae1e5aaa566df10544b7d6d4eb00da7ebeb4ecdcc4d8e32b49cbbdc6e66640bdb0f72e05918a05c35d9bff7e0e88f241d7c6c8cb2fedccdf65560af0e7833efe34af790db63189022cfd71fc8acf88860127bd4fbf026bcbe360e33a8995e636d03bb86dfd0198ada959342d8e9c9ed93e23297da98d66a0d4fc965162733bc86541b95a6c9097cb55a973c6fac194e8f8a164274c479c510e62d8a035eb751181b502afb614d8c4467b5445c268dc3dd0abbd577004c0bc47b15fcb801b79359757b5ea89cf8cf77fc6d160e6cd73c4\",\n        \"signature\": \"c1023a7068743ec4668f495eb7bd4db58129c11e58299ea87d6facd302bf296a98e298fdb48eddf9c44e79ae8641f734503bb83dc0b31f610df1d1e9d619a705\"\n    },\n    {\n        \"secret_key\": \"d5e3a40671bd45f08842ddc78abe57de3b9ce5646b730d2e59fecf5a7df80f40\",\n        \"public_key\": \"416c37ae1ad15b632b0ea43932c17637282cd91d5979552e5eebb99a419d5c97\",\n        \"message\": \"09fe6ffa8bf0942a64921357659dbc6e4f8b63ca3b9ea475ea39d7925290a148d87bb155741dfa28ae1beadc1f3e1ab76737eb5d5ddaded0bb382d7e11ea81a5e7801612696260ba3bd09c80b623f636380aa0208fee0aff70812d5307b27183832343debaa3605ddad17ddd70d611400ddd10d638aa3d6c68a28cf0e97c1dedf6ccd9c731a84ff0405a3a22dcba00ab44d5b21844f14d1374ac0cb1e58df4a90c412563cfe69d882d350f6aafbfa64fa2f9ff826032326780aecf9305d8217c179dbb63c151541232eb65979265d876c4bc4305c02f40bc1d05dbaf7dcf4f7dd9232c17ee0f7a0555f504ba3774548488933e7571eb3f71c4cbb20cc4e4a7322f35ac0e79a59155798dd0f5b3c11319b7d8f3ea79ee3acc68bdb9f37c7d4c8f9caba1ebf8eb7f43b462aefd38e8c0d4c63979cf6631dec31ab5ced3937ef5b2362cb09c71dd096657700fd96bda555e22712f71aec11ae5e91b24bd1649498b8d9f867fb6c41e076080f740d074c2a25572d34e666b6367bf7cbb3dd42a2382dc1973961268605396810a456ac081bbfd3a54b44881fcfc45b4245ee72465b487d07f2ef3f74add71cdfdd16e92fe257d334645b0a9bc7d072613fb9c0cdea9db4c72bc87109e102d7cbaf366ecd67fbe3ded32747307a7aeef61735ad3aa5ce95deecc16a16eb2a0bcc7adc0a11d888032260e7c7ec9e54f5a2531702a7e5dfb87c36ce313a3147588aef962c72fa966d241637c388b83ddec9343bb86343e920b12ce1cc915c83b31e99862690674ea4935a48809d4d279054137546392ad9f08e7b8de61ae73e81e483d3c63b5ae734e18e7a22feed1233d0ca63355f3a48a33067e1a0e1971f36aa929fe0613c21c4aeff9418429c3b072a5984959287a5e5c40be02bd22b9a79c7f3f5359d2bbe493f556dacbb0cb4c293c7d941265e777392d148d68c07a13c8dec8e5d1e1c7f041e8983edddaa4649dac1572a39ae4c6480ca550e2e4462dcc849c1bab781d28a3552b2d98e02e1518e6555340fb76d68db58916d556a7b81563aba81d9a57ae50f04cf5686021847d79b6bb3da8017a60b1c3beefd48d2b3cd39c6f53c08bcc967d93069f562bb36e0c4f4ca6bccc5e57d35903cd800a61785a93770e377f4fe8e9f4b66680984968f9649e105e7a119d97636f3a05caeab1d7ea0bc81334b42d5cc080830ec24d369cf8673a490d59eb4cb08181da39a46d966e23fed8d38a5fabc7e843bcfb015a4474bfd46d4a43ff4a51a9567661e2696db87c3758d3b54ce7846d1391d7f46526ef30844d49320018d749b5d4dfd30d380c6e573fc414d8fefc5d710470756bec00d88ac4afc925d1ede37eaee6004a23ea0ef8b60e48\",\n        \"signed\": \"63de6a981142365a3e592631c8277237809739d1c98f5a1cb2cccd34067d1ca5dc8f2fc63b8ae1a689dcaa291ba6b69b1a6795c579a5db6dccee73f6a420ac0a09fe6ffa8bf0942a64921357659dbc6e4f8b63ca3b9ea475ea39d7925290a148d87bb155741dfa28ae1beadc1f3e1ab76737eb5d5ddaded0bb382d7e11ea81a5e7801612696260ba3bd09c80b623f636380aa0208fee0aff70812d5307b27183832343debaa3605ddad17ddd70d611400ddd10d638aa3d6c68a28cf0e97c1dedf6ccd9c731a84ff0405a3a22dcba00ab44d5b21844f14d1374ac0cb1e58df4a90c412563cfe69d882d350f6aafbfa64fa2f9ff826032326780aecf9305d8217c179dbb63c151541232eb65979265d876c4bc4305c02f40bc1d05dbaf7dcf4f7dd9232c17ee0f7a0555f504ba3774548488933e7571eb3f71c4cbb20cc4e4a7322f35ac0e79a59155798dd0f5b3c11319b7d8f3ea79ee3acc68bdb9f37c7d4c8f9caba1ebf8eb7f43b462aefd38e8c0d4c63979cf6631dec31ab5ced3937ef5b2362cb09c71dd096657700fd96bda555e22712f71aec11ae5e91b24bd1649498b8d9f867fb6c41e076080f740d074c2a25572d34e666b6367bf7cbb3dd42a2382dc1973961268605396810a456ac081bbfd3a54b44881fcfc45b4245ee72465b487d07f2ef3f74add71cdfdd16e92fe257d334645b0a9bc7d072613fb9c0cdea9db4c72bc87109e102d7cbaf366ecd67fbe3ded32747307a7aeef61735ad3aa5ce95deecc16a16eb2a0bcc7adc0a11d888032260e7c7ec9e54f5a2531702a7e5dfb87c36ce313a3147588aef962c72fa966d241637c388b83ddec9343bb86343e920b12ce1cc915c83b31e99862690674ea4935a48809d4d279054137546392ad9f08e7b8de61ae73e81e483d3c63b5ae734e18e7a22feed1233d0ca63355f3a48a33067e1a0e1971f36aa929fe0613c21c4aeff9418429c3b072a5984959287a5e5c40be02bd22b9a79c7f3f5359d2bbe493f556dacbb0cb4c293c7d941265e777392d148d68c07a13c8dec8e5d1e1c7f041e8983edddaa4649dac1572a39ae4c6480ca550e2e4462dcc849c1bab781d28a3552b2d98e02e1518e6555340fb76d68db58916d556a7b81563aba81d9a57ae50f04cf5686021847d79b6bb3da8017a60b1c3beefd48d2b3cd39c6f53c08bcc967d93069f562bb36e0c4f4ca6bccc5e57d35903cd800a61785a93770e377f4fe8e9f4b66680984968f9649e105e7a119d97636f3a05caeab1d7ea0bc81334b42d5cc080830ec24d369cf8673a490d59eb4cb08181da39a46d966e23fed8d38a5fabc7e843bcfb015a4474bfd46d4a43ff4a51a9567661e2696db87c3758d3b54ce7846d1391d7f46526ef30844d49320018d749b5d4dfd30d380c6e573fc414d8fefc5d710470756bec00d88ac4afc925d1ede37eaee6004a23ea0ef8b60e48\",\n        \"signature\": \"63de6a981142365a3e592631c8277237809739d1c98f5a1cb2cccd34067d1ca5dc8f2fc63b8ae1a689dcaa291ba6b69b1a6795c579a5db6dccee73f6a420ac0a\"\n    },\n    {\n        \"secret_key\": \"4ed7048aa1284dbbcc248938b40c35742193597addafdde06413b8d4ccfbe137\",\n        \"public_key\": \"bf841fe444add1f7c3eacdfd0784b4e855d2405f4021cd9d8266071c32c8a273\",\n        \"message\": \"dcff9587d6046c1132be07df26df6382ff92cfc8eb5345c51dd50dd188ee769f10a4de5e8883d116967bea97d3b32bc8aebb9f013d6df952f251c1a312346e72cee135a1bfd76bf3080a35c838b44d755f263d210310fa8d28c4ca52f08cac5b83a8a3b1dfc46d9b752d9fc73649d00bb9ee992650639c225deac1f39b9e803689d19e6d9f8ef4f51f1d11601facf410db648bcc82bf648769a7dd59c6e8a237db239d3f661d7852c426d394a90509526a859b476459dedbe6d89936c0f3989995511d4a576e542cce5e0dd7eeefeb0326d33f25c22ab6e7690633f4c9ed2aadf1d24f94862123a464042cea193a2f0479d39bcd1bbd1c7a0ca7e6258ed3732372f54e0ed5e3f1e2e4d4a04c510bee08d1c6d570cfd63abf14b4eef0b96f39ca29e43c52f2ca3dfd460f66e30235b159aaef2cc156012969fd3d159978d6caa0a94522291f7989d8af10831996137b68d97fc17f6a9bc2845ef3dd47cbc386e8977a8654363412dac3ac51c63817b7c051878dcf458ab3630dd7aef68d270f8da7880a467b3304f5baedfba9173e7efd007c412d17209c56d23968e340b8a0edb41b7e2a4088bec01b532df89b5215813131107b7b474f03c2e47d4317f11c4f5160904304997e76a121a9560235208d79b2dab4f7e196793202c0902ce9c4bfc10b8fe397e35ca0256454662ae878efb0a0a606fac0a952c9f6baaeb2d45b258c617559c0ed2528a88b49aa44ee43035b0d793aad3953c1a5a3463866bc815b1ffce2ff2b65e0fd47dbc15f4e7a06bfabc290fc62090bf7d94853f77c0444a9b90efe77d1ceb4bd39e203bc884011624e6846e2a371058daba63c23f86c42c3e31eaa4bd7d7a42af2d524896e31baa3e20763f85dcfd52775f28072d89f0bd4fae30d0b137ee37ab063ba06fe9d4ec62abb2fea0f81b8cbeefc030080b8026a58fd1867f66be1154e65bfea7dcec55fe32d51fb0b4a8a5a8a044263943d6ac8011c6e6701beec3a88655840c4892d450d312b7652d2514769f23bfd6e7046467df29a287ff3c4c9d0e64e6d9e4edee1b935d07681d47004352886e847b0c6d5762fd45a81a53cce9476c887221aea6c0c82bbf3b297932e5b11e538a3245d63d7b7b091dfa1d7b9a0e2db6698a4c5e9fe931662d7c6ec6d9d5b92bc7e041555df4df0ca11cabc485f9c556138a71745f03b9783bb200b72d233697e8bcf6b4117ee6763d792d7422264852f4f30f8d1890e2ea08098040f7f288e4abe90b63cab2c14373060840ef827ecc846cd560e90a20b8305f463c36ea03884a5df4c25f1ba9ea125952dc091b97516de1d287c0e2bf529775ba6d2f8ede03cb42c1e400ec804a9df08e46f44b5066346e3f7c7a1a8\",\n        \"signed\": \"106a9deb2327f338ccb71bcc94e2fe3d2e973ce6dd8fa7baca808b4111813e3bc3b4d88efa6a00c4710bbfe53196f9ab3a150b1654b908feacf9c13df2d63802dcff9587d6046c1132be07df26df6382ff92cfc8eb5345c51dd50dd188ee769f10a4de5e8883d116967bea97d3b32bc8aebb9f013d6df952f251c1a312346e72cee135a1bfd76bf3080a35c838b44d755f263d210310fa8d28c4ca52f08cac5b83a8a3b1dfc46d9b752d9fc73649d00bb9ee992650639c225deac1f39b9e803689d19e6d9f8ef4f51f1d11601facf410db648bcc82bf648769a7dd59c6e8a237db239d3f661d7852c426d394a90509526a859b476459dedbe6d89936c0f3989995511d4a576e542cce5e0dd7eeefeb0326d33f25c22ab6e7690633f4c9ed2aadf1d24f94862123a464042cea193a2f0479d39bcd1bbd1c7a0ca7e6258ed3732372f54e0ed5e3f1e2e4d4a04c510bee08d1c6d570cfd63abf14b4eef0b96f39ca29e43c52f2ca3dfd460f66e30235b159aaef2cc156012969fd3d159978d6caa0a94522291f7989d8af10831996137b68d97fc17f6a9bc2845ef3dd47cbc386e8977a8654363412dac3ac51c63817b7c051878dcf458ab3630dd7aef68d270f8da7880a467b3304f5baedfba9173e7efd007c412d17209c56d23968e340b8a0edb41b7e2a4088bec01b532df89b5215813131107b7b474f03c2e47d4317f11c4f5160904304997e76a121a9560235208d79b2dab4f7e196793202c0902ce9c4bfc10b8fe397e35ca0256454662ae878efb0a0a606fac0a952c9f6baaeb2d45b258c617559c0ed2528a88b49aa44ee43035b0d793aad3953c1a5a3463866bc815b1ffce2ff2b65e0fd47dbc15f4e7a06bfabc290fc62090bf7d94853f77c0444a9b90efe77d1ceb4bd39e203bc884011624e6846e2a371058daba63c23f86c42c3e31eaa4bd7d7a42af2d524896e31baa3e20763f85dcfd52775f28072d89f0bd4fae30d0b137ee37ab063ba06fe9d4ec62abb2fea0f81b8cbeefc030080b8026a58fd1867f66be1154e65bfea7dcec55fe32d51fb0b4a8a5a8a044263943d6ac8011c6e6701beec3a88655840c4892d450d312b7652d2514769f23bfd6e7046467df29a287ff3c4c9d0e64e6d9e4edee1b935d07681d47004352886e847b0c6d5762fd45a81a53cce9476c887221aea6c0c82bbf3b297932e5b11e538a3245d63d7b7b091dfa1d7b9a0e2db6698a4c5e9fe931662d7c6ec6d9d5b92bc7e041555df4df0ca11cabc485f9c556138a71745f03b9783bb200b72d233697e8bcf6b4117ee6763d792d7422264852f4f30f8d1890e2ea08098040f7f288e4abe90b63cab2c14373060840ef827ecc846cd560e90a20b8305f463c36ea03884a5df4c25f1ba9ea125952dc091b97516de1d287c0e2bf529775ba6d2f8ede03cb42c1e400ec804a9df08e46f44b5066346e3f7c7a1a8\",\n        \"signature\": \"106a9deb2327f338ccb71bcc94e2fe3d2e973ce6dd8fa7baca808b4111813e3bc3b4d88efa6a00c4710bbfe53196f9ab3a150b1654b908feacf9c13df2d63802\"\n    },\n    {\n        \"secret_key\": \"c7eca83e948576bd9f278fd7b82800a41d92da9b72d5a1ccdbbc65581052568b\",\n        \"public_key\": \"076b8352dca8031e853c8d9099c2ef579337cc7b2b4c75d1a063ea3ec725b7fd\",\n        \"message\": \"8d8cefd673855ccd8eb8534c312d338005bb05f5b9507d58859e1e953b0a4d913be759d8edfa92898c6e70a53f81954fc344b4ad6246b0109481ba6f73ae6331abf2df108eb2e85ceb087c1f6fcfc9de2c1f139ba1771b72680302d811ccd0ccd4e0c7feb0132eb20b334e5aabe5f6119fd8947d9e8852e1eb1b74107e174100e3e6df0c3a68130ca6309402594bb50c1c8e2774f13214496a7b1f348385eabfbccbac165a5a2e7d9dea5ffd58b0bd88b49cb331ecb7f4e9d6bae9791ad788e6ab8926c1cc1615deaf4cc400c77a316197bca1904995e1365d1b9702648376116930f6f91166e6148629e75be2d06895f6a8d15d5a94ca69b712f33bcf95be0c1be6902bb78b8a230d7a8560c4d84e2389552a81571aa665c19c2e93b0d43e8c2cbd9e885d7052518b77c47e841d119dc28b65a7504f664271f06c7ff393f825b1e5930d02b9c70035e292411c4aedf66047006970e349dfca7fb41c10fd537e35252e109e3336d7a82a14de5d5540c6fc6571d5774f39b7c403e7b8875ec215877efc6cc8ea48b186b46821ea5ef2ba8bacd40d797e6add06413283145b60462b3503c5b881d79a592955d18afa08969e31457f5b27daec010338ed867f300878fd87ce321880b860a0c64284ca2dc15f5e5310e10e6a73a7ea650ea9d373694da4dd429ae7412ef9b29c83b3b068c74769f431ce0615f9ff4f82baac47b4bce90449ec41c2a2d573d92b92e05631486165bc710ef5840f80dae9f9dd5cffd4ebf5d10746510c5fcbfe62cb9703c0b154c86f10816672497670a3b0150bb4e1b03b3bd544c12a90c3edccd7900ebb5b31c91117cc8281a3c4ed04998e99aed41bb41fce9990a406485b14dbe3bc1a5fcf7719507990da3b0b3c68ad40d8950c0d49ced1019319a3f36aff6caf75d7f9a0933dd3abdd7692a1562f0613fe4a278d5ce4c8dafbb55b2ec2af2b24e8396f587b170c9ca6547508facde73490dfb01eb6657e3f4f272304b70bf047a43a2b58e5568bc52b2c8d4c03219a5a8bd3dc0643185913c0af7411f81b77be2a9bfd5cb26977113d2658a97192b41cf6c7011b0ff6a11cbff3505546322f0bef6097e46b36492b016a4562e092b67c3fccc7780ea274d96d595849f7e2a56d79edcb32d784049fc1324a5beefc24193a66e1cac4a13a811b909583cc910cf08d4b104dbdb8a6f2b21fbc1db1175a1a2356a63d3eea9dbb8537d2c68627543df0d1f8fd8d57a18b0dbd69b920cb9b286e3c07ae44ae2e1beec01cee6ba988b5d1afb99790b1dd910655c43d7f2a3ed3754ba46516d278705559f5741622a9abb5c8f23fa976a9d146948ade6ba6608a35e4e0d330e82e96a2be6c78ad0cd4d8704e57cea146\",\n        \"signed\": \"86996a1b8e495d425277e97cc0830549349bc2b6f3dcda60f3b7d3501b8b50b5b458cda58b436e23c02cd4a22b234813aa9bcc3c61f983c0b7efeca0f1bec20d8d8cefd673855ccd8eb8534c312d338005bb05f5b9507d58859e1e953b0a4d913be759d8edfa92898c6e70a53f81954fc344b4ad6246b0109481ba6f73ae6331abf2df108eb2e85ceb087c1f6fcfc9de2c1f139ba1771b72680302d811ccd0ccd4e0c7feb0132eb20b334e5aabe5f6119fd8947d9e8852e1eb1b74107e174100e3e6df0c3a68130ca6309402594bb50c1c8e2774f13214496a7b1f348385eabfbccbac165a5a2e7d9dea5ffd58b0bd88b49cb331ecb7f4e9d6bae9791ad788e6ab8926c1cc1615deaf4cc400c77a316197bca1904995e1365d1b9702648376116930f6f91166e6148629e75be2d06895f6a8d15d5a94ca69b712f33bcf95be0c1be6902bb78b8a230d7a8560c4d84e2389552a81571aa665c19c2e93b0d43e8c2cbd9e885d7052518b77c47e841d119dc28b65a7504f664271f06c7ff393f825b1e5930d02b9c70035e292411c4aedf66047006970e349dfca7fb41c10fd537e35252e109e3336d7a82a14de5d5540c6fc6571d5774f39b7c403e7b8875ec215877efc6cc8ea48b186b46821ea5ef2ba8bacd40d797e6add06413283145b60462b3503c5b881d79a592955d18afa08969e31457f5b27daec010338ed867f300878fd87ce321880b860a0c64284ca2dc15f5e5310e10e6a73a7ea650ea9d373694da4dd429ae7412ef9b29c83b3b068c74769f431ce0615f9ff4f82baac47b4bce90449ec41c2a2d573d92b92e05631486165bc710ef5840f80dae9f9dd5cffd4ebf5d10746510c5fcbfe62cb9703c0b154c86f10816672497670a3b0150bb4e1b03b3bd544c12a90c3edccd7900ebb5b31c91117cc8281a3c4ed04998e99aed41bb41fce9990a406485b14dbe3bc1a5fcf7719507990da3b0b3c68ad40d8950c0d49ced1019319a3f36aff6caf75d7f9a0933dd3abdd7692a1562f0613fe4a278d5ce4c8dafbb55b2ec2af2b24e8396f587b170c9ca6547508facde73490dfb01eb6657e3f4f272304b70bf047a43a2b58e5568bc52b2c8d4c03219a5a8bd3dc0643185913c0af7411f81b77be2a9bfd5cb26977113d2658a97192b41cf6c7011b0ff6a11cbff3505546322f0bef6097e46b36492b016a4562e092b67c3fccc7780ea274d96d595849f7e2a56d79edcb32d784049fc1324a5beefc24193a66e1cac4a13a811b909583cc910cf08d4b104dbdb8a6f2b21fbc1db1175a1a2356a63d3eea9dbb8537d2c68627543df0d1f8fd8d57a18b0dbd69b920cb9b286e3c07ae44ae2e1beec01cee6ba988b5d1afb99790b1dd910655c43d7f2a3ed3754ba46516d278705559f5741622a9abb5c8f23fa976a9d146948ade6ba6608a35e4e0d330e82e96a2be6c78ad0cd4d8704e57cea146\",\n        \"signature\": \"86996a1b8e495d425277e97cc0830549349bc2b6f3dcda60f3b7d3501b8b50b5b458cda58b436e23c02cd4a22b234813aa9bcc3c61f983c0b7efeca0f1bec20d\"\n    },\n    {\n        \"secret_key\": \"7b469df9c8f78489ab47cc70a88503f1b8f3d929c33feab1c503f0969a3ac37b\",\n        \"public_key\": \"a814c7e373d0113b90624a8ab2bca5cf53bf528e39fc3d367de154b94bb22f1d\",\n        \"message\": \"1c0fd7450e29675c93091638c2ac933ca997766e380ec33a92b8a7e1a1ed9821c75fccb5c5f3760e76d0e8810311ddc624ea8742131c1c4308f4178e04d04960693d846c1f51d8773b6deb3443d874b9e2de3b77785185518b2e9ee736c63a39c8212ca8669e161d131b1ab2264fdd72dc5628b11c06f2af9f0789047bdd4ebb5d55899f74dc4e12e7975363f63a8da76b5585c16bb6d55b05fade8713d19cad1a211640262691aac9b437a9ecf89a9246ecdba1ff0bea78494cee15296216ea6bb882479d2437c9494ac7fa4f3015d1d3149d5564d7c11a7e7b614f7d3e9d454f0a05b040a1e06fe7837c2a9da2794d918bffa9e61a0c3f089f6c9f7eeac586e34bf94470d913da41371cacdfc7ee8bd1135655566924eadf096ac030a65902c103b172d12e88f053fc56ee73f31870817083afa802f7668b815ee790f7d40b437a2e6db2f0fb26836b4b2331eba55539614c0fe17240242dd3af7383bcff7d3f47d6544b08720c0a52441f7411935dd4a952d38651a80005fa3eb0eaecc735d290e8bd5e31b740140e136b2c002523d8eb2a0ab5bd687002b3b926f75eb690d1da73ad235892f3b23a756b605a437c00e0621304e810f99e314c4d63e322d9b69815f382ffa1ec6280fc0e641c8a6f6f7f61985bd3567e0f440de9f7621715dacd07428c0090154d59ce6db40169c658ac5bf44b67671fe19e4b5b38aad2d3d4e190a550aad4188352f7981a6d88062502df86791350392d41cefacb24e37bc700cb029190c3b1821477e117d5a462fb3e79133b1073598966f52b63256dbf326ace14db0c80058cf00d689a0a58111af1692744bf791bcbb427a372246e9501a85cd520c61a1e59ee180e8c97192f60fa5d3ab05df8d8551c1ac6ca0a9a012ffeceb3c1f521411edb6509bc278a651e129e96b0adc7aed707221caeac229884413daa10595d22d1db7082125f4f969500a1d48dacdae80f4029c163dcd79ddc6468fcda1637b87ddcf2a3d9b4d299a0e5394df90ed03b62137ba67b9fea8ae1f0d22f91c63a24b5934f74c265c43f1b923db980adfcee8313da520176730ef9736b27e6ba32d17ea69dcac6f4a016edfe2db5a5bb3b64932f7011f1c453bbe88bbac8c7035f93fe39b581fcaa7aaf082fbed004fd1fd5a4e2d9c19716604b19ce199e2169a7be518d5fadd2ac31b95478082ac91306008de4ec0ef4c9f9d6f96d2f66d62fafc2194082808af0d67b9fba0d189b055f061ccac24b27610bfbd5a2232dd6f3c890a9b1266471b322e9e1bf97757bef72abcee93b051fc923cfd4e723be3e17143f38eebb900b5bbcf7304732b9c0a1c5fc9509a693580ae73a4cdfc5fbf20ce81ebc835c6c909d831141b194f6\",\n        \"signed\": \"18faf82d08e1068e9f983d812f05fdb6929d2723db1f77c45a74bb09cff27773b54ce8f43b3015419112e725ea7acda4b23b8120e7b0cf420153e5b03dd061091c0fd7450e29675c93091638c2ac933ca997766e380ec33a92b8a7e1a1ed9821c75fccb5c5f3760e76d0e8810311ddc624ea8742131c1c4308f4178e04d04960693d846c1f51d8773b6deb3443d874b9e2de3b77785185518b2e9ee736c63a39c8212ca8669e161d131b1ab2264fdd72dc5628b11c06f2af9f0789047bdd4ebb5d55899f74dc4e12e7975363f63a8da76b5585c16bb6d55b05fade8713d19cad1a211640262691aac9b437a9ecf89a9246ecdba1ff0bea78494cee15296216ea6bb882479d2437c9494ac7fa4f3015d1d3149d5564d7c11a7e7b614f7d3e9d454f0a05b040a1e06fe7837c2a9da2794d918bffa9e61a0c3f089f6c9f7eeac586e34bf94470d913da41371cacdfc7ee8bd1135655566924eadf096ac030a65902c103b172d12e88f053fc56ee73f31870817083afa802f7668b815ee790f7d40b437a2e6db2f0fb26836b4b2331eba55539614c0fe17240242dd3af7383bcff7d3f47d6544b08720c0a52441f7411935dd4a952d38651a80005fa3eb0eaecc735d290e8bd5e31b740140e136b2c002523d8eb2a0ab5bd687002b3b926f75eb690d1da73ad235892f3b23a756b605a437c00e0621304e810f99e314c4d63e322d9b69815f382ffa1ec6280fc0e641c8a6f6f7f61985bd3567e0f440de9f7621715dacd07428c0090154d59ce6db40169c658ac5bf44b67671fe19e4b5b38aad2d3d4e190a550aad4188352f7981a6d88062502df86791350392d41cefacb24e37bc700cb029190c3b1821477e117d5a462fb3e79133b1073598966f52b63256dbf326ace14db0c80058cf00d689a0a58111af1692744bf791bcbb427a372246e9501a85cd520c61a1e59ee180e8c97192f60fa5d3ab05df8d8551c1ac6ca0a9a012ffeceb3c1f521411edb6509bc278a651e129e96b0adc7aed707221caeac229884413daa10595d22d1db7082125f4f969500a1d48dacdae80f4029c163dcd79ddc6468fcda1637b87ddcf2a3d9b4d299a0e5394df90ed03b62137ba67b9fea8ae1f0d22f91c63a24b5934f74c265c43f1b923db980adfcee8313da520176730ef9736b27e6ba32d17ea69dcac6f4a016edfe2db5a5bb3b64932f7011f1c453bbe88bbac8c7035f93fe39b581fcaa7aaf082fbed004fd1fd5a4e2d9c19716604b19ce199e2169a7be518d5fadd2ac31b95478082ac91306008de4ec0ef4c9f9d6f96d2f66d62fafc2194082808af0d67b9fba0d189b055f061ccac24b27610bfbd5a2232dd6f3c890a9b1266471b322e9e1bf97757bef72abcee93b051fc923cfd4e723be3e17143f38eebb900b5bbcf7304732b9c0a1c5fc9509a693580ae73a4cdfc5fbf20ce81ebc835c6c909d831141b194f6\",\n        \"signature\": \"18faf82d08e1068e9f983d812f05fdb6929d2723db1f77c45a74bb09cff27773b54ce8f43b3015419112e725ea7acda4b23b8120e7b0cf420153e5b03dd06109\"\n    },\n    {\n        \"secret_key\": \"dfecde7a56a18c1f19d80a19a4f1daddd0bcecb01eecad6dfca0f957a914ed7a\",\n        \"public_key\": \"afbaa6e73e85b02b25a4b587ecb8c4dfb79aa9202761efa8d1df2cd0aa6316c4\",\n        \"message\": \"ae6e8ff65ccde6f26484950826b43623058a5efe020bb19b7d8b4e25768b692734fe07c913b9e88126becbf14a0fd0205b39fcc2aec373f8c184c6a9bbbb84449a7ca3b920ada08801dfc66ff19aeb92f2555399a430277ae22d23754eaace3c73846797536dd71a56f4b5842c0f410d1989acac5d805d26572c0f3a64dd2071662212d52fe99e59d966047777f9030fa4fd2ee74b7a7c9f7c34a6dc7e03593a13d64ce62453ee3ca30d84672839f19f1c15d0c45d2755bb394acf4dcb7f7f0711ac40ea46612ea37a7607ad32e818265fab1933f5094e2d03bcfaa5f61667f3b37f00c4c58d9b41b9af3900482b0ffb4fa4376aa040009dec2f4525799cb005f39d74cb2d8dce8c20c2c3f5409703af156cfba28a9d916439cb29f83d2429ce6223519e75e15c7c7fa215119e073fa7974db14f7a01093faa94ad52ab1eadce1a89366ca13adb89066438a2beb73034170aa42d9c2ddb97c14a17c3094376d2a3ffd8095fc4053d91d16e06d27693a1310f01a75111cfeda892c3972a133a09addaa8f74145f88681b6d277964bfe38551a2c619fa3cae394acb29c9410b45e101b1740e8b2aa6febc3a45dadb9d9589d597e57cd947b684cc355246ce6c326dd98cf92b6eea3ba5ab03700622636324dc1222cd748fa07bfd39a1e069809e567141a613e2e8be9dd398ab6beaafd85ff3628ee2aa32d0a57bbacf956190b5c4242eb5b8587d2fdcb0741b9416a05f5fecb1fb2d64788dce783c1f63e60641fce5e1d2b18a9500cd6a1fd335cc1db46ef04752b2d22072e6dfcfcfa569bb25e457afeb63a4fbedc293ad9d1aba4e394aa1097e12b0fc90c89f76df0d6441fa99808b60be07dfcc7f9010bbf9033556d5ee2d448937b783493920f681e4da708671097e199481b8ef0e0150d7c2851df44c545122f9b0e5ba2eeff2d988d56d9bbb55d9896111151a436af065e0cad178a2c9fa8f6974ecdf09adf013300cffedaf4b8791b467ba7933ada5d632db44ed6dcf2aa648917be6337d2e2d206856d08f9ee7b5e2f14ddc6d3ac429215a87923ad32d5dcfee3686316ddd1b27bb193a5fc05c893a939a5b98987366c829e392f485ea15e22cd8f857a134afa98f37215576ddc5aab4f2d10caaf050059a335f24bcdcbac819f66db07aabdfb76271d17bce22cba463a80aa892d0d8e055f948df7f6e6c300daeffd3a236dddcf238fe10666a57c6e3ae7e3673d35578f8b8ea69d3c08e0140afd3ee030b22a372160f908a378f8101b5f5969fea310eed37a00d97302d5c2dbe8cc600075dccd33ad63d265aaf60e241ce311bed7dd5e2745241ae02ae532d15c18886e818138751afc51850e506c6d31a8eef451adfd4b3d266b415a7e\",\n        \"signed\": \"b4fde55b916cf60068f19b25351c1410dcf66bfc40f96d1ba2368bc2b9115aaa5b2d1cf0e3dfca02ac902a943e2489a5681bbafed39c6e33211a9cb2ff6e5409ae6e8ff65ccde6f26484950826b43623058a5efe020bb19b7d8b4e25768b692734fe07c913b9e88126becbf14a0fd0205b39fcc2aec373f8c184c6a9bbbb84449a7ca3b920ada08801dfc66ff19aeb92f2555399a430277ae22d23754eaace3c73846797536dd71a56f4b5842c0f410d1989acac5d805d26572c0f3a64dd2071662212d52fe99e59d966047777f9030fa4fd2ee74b7a7c9f7c34a6dc7e03593a13d64ce62453ee3ca30d84672839f19f1c15d0c45d2755bb394acf4dcb7f7f0711ac40ea46612ea37a7607ad32e818265fab1933f5094e2d03bcfaa5f61667f3b37f00c4c58d9b41b9af3900482b0ffb4fa4376aa040009dec2f4525799cb005f39d74cb2d8dce8c20c2c3f5409703af156cfba28a9d916439cb29f83d2429ce6223519e75e15c7c7fa215119e073fa7974db14f7a01093faa94ad52ab1eadce1a89366ca13adb89066438a2beb73034170aa42d9c2ddb97c14a17c3094376d2a3ffd8095fc4053d91d16e06d27693a1310f01a75111cfeda892c3972a133a09addaa8f74145f88681b6d277964bfe38551a2c619fa3cae394acb29c9410b45e101b1740e8b2aa6febc3a45dadb9d9589d597e57cd947b684cc355246ce6c326dd98cf92b6eea3ba5ab03700622636324dc1222cd748fa07bfd39a1e069809e567141a613e2e8be9dd398ab6beaafd85ff3628ee2aa32d0a57bbacf956190b5c4242eb5b8587d2fdcb0741b9416a05f5fecb1fb2d64788dce783c1f63e60641fce5e1d2b18a9500cd6a1fd335cc1db46ef04752b2d22072e6dfcfcfa569bb25e457afeb63a4fbedc293ad9d1aba4e394aa1097e12b0fc90c89f76df0d6441fa99808b60be07dfcc7f9010bbf9033556d5ee2d448937b783493920f681e4da708671097e199481b8ef0e0150d7c2851df44c545122f9b0e5ba2eeff2d988d56d9bbb55d9896111151a436af065e0cad178a2c9fa8f6974ecdf09adf013300cffedaf4b8791b467ba7933ada5d632db44ed6dcf2aa648917be6337d2e2d206856d08f9ee7b5e2f14ddc6d3ac429215a87923ad32d5dcfee3686316ddd1b27bb193a5fc05c893a939a5b98987366c829e392f485ea15e22cd8f857a134afa98f37215576ddc5aab4f2d10caaf050059a335f24bcdcbac819f66db07aabdfb76271d17bce22cba463a80aa892d0d8e055f948df7f6e6c300daeffd3a236dddcf238fe10666a57c6e3ae7e3673d35578f8b8ea69d3c08e0140afd3ee030b22a372160f908a378f8101b5f5969fea310eed37a00d97302d5c2dbe8cc600075dccd33ad63d265aaf60e241ce311bed7dd5e2745241ae02ae532d15c18886e818138751afc51850e506c6d31a8eef451adfd4b3d266b415a7e\",\n        \"signature\": \"b4fde55b916cf60068f19b25351c1410dcf66bfc40f96d1ba2368bc2b9115aaa5b2d1cf0e3dfca02ac902a943e2489a5681bbafed39c6e33211a9cb2ff6e5409\"\n    },\n    {\n        \"secret_key\": \"07828c580ebf9e1d825a59c3bf35f072ae123355bdcc249eec7f2fc5755e29b5\",\n        \"public_key\": \"58e5ed85100bbd9b2221afc9c93184330ad59e1385606244bf003b8d2018501b\",\n        \"message\": \"0edad5cae6ed9843e91c50d934cf55dd658f3d252039cd6c75be4f6b866fb75f35c8f98f1721d7e6d9d98a22e0b4934dcc129261bf6723b2fa7a995e35c4bd79c5816a321607d9dcce39fefa1d55de4e7617548ec385c3de01e366bf50c457a555e932070e2a5a0197b79efbe7006f0cec78b60ebb8fa8781d8eb7326edc30e62d3297a1e0a1117108c46ee5dbefc6594289335e780d55a084f552da3f36d3c4c6178ba74d4decefc5a3b8c47c16f534bdb60895d3d54cd2bb266b399e4d4fb48d7a8cde17f42412560737d3c06e29df524d0cbd3093efca1c8fedcaa124abb27abdac6a29e0e8246abd6f5f531950037f76323aa56cc3fefa603041d55f1929e277e72cda1f96541d2af3e90c0f0e28be196d8f6921f3cd57a7926b860aa1bc403576892a96b93190ae383f631b72802658b2e8451d52a2f45db4f8bc3b0e4e50b6d603a5bdd30c234200ad7debb963f58a4fa20330b3696449445aa371824842fbf326d901dfe3be045452a3740dd160e72733f6e2733525a29a865f6f50d53bf7191c599c876f5c9ca1e3fad7960648e0d471f7d5c01c673f42d659bc3d98dbf07d8febfb995d17f9a02cd6c39f2ddcd0f1d222b9e11f2dd7d3c7518224bb6bfb8b7c58fe8ac105405903a1b9da7516715b7afc38a555e6bbcdbad46e34e576fea34ce35734ed20af5d88eeb1047a2660648bbb113ad9db8c53edb6ed9871a1e44c9ed2df5656fb2b2806ecf03b1eca9eab50a6eaab55b933b2dd1f21d450de9d5cb2232f07a392081b0b4b885d54789e2f75bf2c4cdad878989b1d6dabd9ed23c7c5b0356a7d9e7335290d7c85b966e80184bd07998602886d7076193565c81cccda4cc7d33c85d905b1beb6e8e7418e8acaedf0d9a32a7d29d07cf44d3119d4e7896820b77de64b655e4f148800434af7bdb2a56b25eb94ea39f2169596bb2b11761f082baec08885f4a0eb6c95767135a7f7cd72e743d2dff144dd8bafb1b318006e5876f8e2cb44aa588f906266ac67119c17f5de114e72e42a1fb39944321a111fa795ff7017f2fb8caf482f55d77a80855428ded7ec20acecca83f8d1eb137b588ccb745c105f2b2ca41c3a9f49d3c6e9d7c648b003b9707c906462edad617a8cfbf9bcc6c5fb6fa984325d6582e28f62005383f338df5b38fa9d19c22a2a7ea1d68a92d1d93b7fb0b8f33bc8760f28aeb1439a8b07f3da58ddb155b498cb09c75a5596838a65013e24d5640d0842a7699322cf3ffcb5703f414ffd168860bad3e308b2b5bf3cdf7f363bf9aaf4b3bc424c146c6f5421430f9f476aa34a0c6ee80131fc4d4d970723a2186ae3625e286d17dddc435ccb00831678aba584a62dbff002bead6e11e23c54d33cf3a4b231a908\",\n        \"signed\": \"bb09360439a82dee5c7d85779e54c13f88e06d38f4b94960fe17a1ebcaa3ee2f330c649154bbc875a4076cf0bbf7eebf7b8d08d5aa4be7413881245fc2d2b6010edad5cae6ed9843e91c50d934cf55dd658f3d252039cd6c75be4f6b866fb75f35c8f98f1721d7e6d9d98a22e0b4934dcc129261bf6723b2fa7a995e35c4bd79c5816a321607d9dcce39fefa1d55de4e7617548ec385c3de01e366bf50c457a555e932070e2a5a0197b79efbe7006f0cec78b60ebb8fa8781d8eb7326edc30e62d3297a1e0a1117108c46ee5dbefc6594289335e780d55a084f552da3f36d3c4c6178ba74d4decefc5a3b8c47c16f534bdb60895d3d54cd2bb266b399e4d4fb48d7a8cde17f42412560737d3c06e29df524d0cbd3093efca1c8fedcaa124abb27abdac6a29e0e8246abd6f5f531950037f76323aa56cc3fefa603041d55f1929e277e72cda1f96541d2af3e90c0f0e28be196d8f6921f3cd57a7926b860aa1bc403576892a96b93190ae383f631b72802658b2e8451d52a2f45db4f8bc3b0e4e50b6d603a5bdd30c234200ad7debb963f58a4fa20330b3696449445aa371824842fbf326d901dfe3be045452a3740dd160e72733f6e2733525a29a865f6f50d53bf7191c599c876f5c9ca1e3fad7960648e0d471f7d5c01c673f42d659bc3d98dbf07d8febfb995d17f9a02cd6c39f2ddcd0f1d222b9e11f2dd7d3c7518224bb6bfb8b7c58fe8ac105405903a1b9da7516715b7afc38a555e6bbcdbad46e34e576fea34ce35734ed20af5d88eeb1047a2660648bbb113ad9db8c53edb6ed9871a1e44c9ed2df5656fb2b2806ecf03b1eca9eab50a6eaab55b933b2dd1f21d450de9d5cb2232f07a392081b0b4b885d54789e2f75bf2c4cdad878989b1d6dabd9ed23c7c5b0356a7d9e7335290d7c85b966e80184bd07998602886d7076193565c81cccda4cc7d33c85d905b1beb6e8e7418e8acaedf0d9a32a7d29d07cf44d3119d4e7896820b77de64b655e4f148800434af7bdb2a56b25eb94ea39f2169596bb2b11761f082baec08885f4a0eb6c95767135a7f7cd72e743d2dff144dd8bafb1b318006e5876f8e2cb44aa588f906266ac67119c17f5de114e72e42a1fb39944321a111fa795ff7017f2fb8caf482f55d77a80855428ded7ec20acecca83f8d1eb137b588ccb745c105f2b2ca41c3a9f49d3c6e9d7c648b003b9707c906462edad617a8cfbf9bcc6c5fb6fa984325d6582e28f62005383f338df5b38fa9d19c22a2a7ea1d68a92d1d93b7fb0b8f33bc8760f28aeb1439a8b07f3da58ddb155b498cb09c75a5596838a65013e24d5640d0842a7699322cf3ffcb5703f414ffd168860bad3e308b2b5bf3cdf7f363bf9aaf4b3bc424c146c6f5421430f9f476aa34a0c6ee80131fc4d4d970723a2186ae3625e286d17dddc435ccb00831678aba584a62dbff002bead6e11e23c54d33cf3a4b231a908\",\n        \"signature\": \"bb09360439a82dee5c7d85779e54c13f88e06d38f4b94960fe17a1ebcaa3ee2f330c649154bbc875a4076cf0bbf7eebf7b8d08d5aa4be7413881245fc2d2b601\"\n    },\n    {\n        \"secret_key\": \"f08ee8daa73e1feb61a88e062dfb1003c8578a0d53bd3bc9e589efb92f68be14\",\n        \"public_key\": \"76692ce8d116eccb897077edcaafdd3eb44ea1a486b90e49e97f966901015502\",\n        \"message\": \"64de90044d0e76bc02fcffcb75263667b3bd733b40bfb26c6c52fdb4b0782278cabae41e2129ea4017e94de86087964f66d86207987467a1688f9fab3ffb2f1d0063bf626c941367c12e319ab7ca3020c9b3a7215a19303e2d0e8988791de0d8e1632daa38c7f3e7f6e48ce122143d1e2cb661ba77c69e6a710911644bc110ff58bb00b5290820ce30970e7fde189e140e5c70c783eed53f0e2ac7ecae4f27db81d15b8646faa9c5a3ae2b7f47cd580d7707b002499b4cfeb8c591afdf1cc62af2595c184abcf0b2623a1bae60af7026b28d0540b41526e3020f81b894eb3fe31b72b21a3260dae3210c4ce4fd69e2e5ea0c8632a583262a12b3a8b16c9c1206ad73023037cf30653cb80aa7df8314b0f5bc6e9d5fa00b009d5552d83b7970b5bc4b9984f69d1cca9ce4cb74ddd2d879d37312a0e159d7a6afb77ac585e6b459c551304e1eebfbcab43a10b505924e03ea332f5d020a55c7aa683c541dcf7790a240af079baba94096b46060fd7afe9056ca99e688df280a9be8c8c73e6e6fb052a33eb3328a7f602542fe280c890e3ccaf22c7f34f87b5e5ba784b472b1e1a99347a9e0d240858d1277a5c6b349383fe4fd55cf92e69faad326b8d6db46233026221ee6d0a1c4246533c4a0e5bd172eb8936a9c0d30066538e3eb4ad5cb9877fd861b482b30150a06104161647e01d004d997403ee06726cb97e2e25f18c668eee4c5bf72529803189ee6a7aec238d5906ea5ae10722c9a61a78aea52af33eaac75406b1a60befbaad48476d9ff887fd283eb1655bcc07cf753331436db5b3b13032ff9c3d696380e9f5abf50d3556fda0df0b53897a737ac7a3b87c2a832b0c7273ea9fc54a767f1a812bf0164bf7521630b81b9dd930d92ee2ca28e3203b77bc082ceb37d55edbcb71df0b79236789a25d418cbb95544e2cef33bbdeb27a3f7909c1f498f47135ae9033adf250ad4f6575361e4cfcc9bcf4b90c3ad47a3442297a223cca843d7205ed08a9b87160a6d01b46a7d1c844e8d1f18f618682bfb22955f395b2a5790a51a696499d9e71a501f3fa546de9b10ae47bcee42ba7f869fb9ce4ed7c6453326c034cf05d9f1e3c200701ba752dabbd868521c3d8f80672d42f6cf4564f08cd7b390e6d49dd90090afdb84486ffcaa4e84d88682744dc0a878faa7cd440a8b276710902081f4dc84174619a66ea3a371f95505400d99fa999017710c8e2714be60949d461310f7d43a0dc123516d77d362213f9f75a5a1c393affc49ea151d46a81ffad239f28c07f65f59ea077d9a4d9c752de49b9ef36be60d112d795f588b00ef6e7730dea65e1016da0dd462370e0ba5c660001e457c08b436da2903b62906932084728c81671cbfb079bb29\",\n        \"signed\": \"66dfa4c1575beff2f5a230b28c58c3eea0736df379d75559bc9d37a9579d121c05c373e8484c9747ef4477e80c4b2cb4ddf16ae9fdfa08a07547d107dcea120364de90044d0e76bc02fcffcb75263667b3bd733b40bfb26c6c52fdb4b0782278cabae41e2129ea4017e94de86087964f66d86207987467a1688f9fab3ffb2f1d0063bf626c941367c12e319ab7ca3020c9b3a7215a19303e2d0e8988791de0d8e1632daa38c7f3e7f6e48ce122143d1e2cb661ba77c69e6a710911644bc110ff58bb00b5290820ce30970e7fde189e140e5c70c783eed53f0e2ac7ecae4f27db81d15b8646faa9c5a3ae2b7f47cd580d7707b002499b4cfeb8c591afdf1cc62af2595c184abcf0b2623a1bae60af7026b28d0540b41526e3020f81b894eb3fe31b72b21a3260dae3210c4ce4fd69e2e5ea0c8632a583262a12b3a8b16c9c1206ad73023037cf30653cb80aa7df8314b0f5bc6e9d5fa00b009d5552d83b7970b5bc4b9984f69d1cca9ce4cb74ddd2d879d37312a0e159d7a6afb77ac585e6b459c551304e1eebfbcab43a10b505924e03ea332f5d020a55c7aa683c541dcf7790a240af079baba94096b46060fd7afe9056ca99e688df280a9be8c8c73e6e6fb052a33eb3328a7f602542fe280c890e3ccaf22c7f34f87b5e5ba784b472b1e1a99347a9e0d240858d1277a5c6b349383fe4fd55cf92e69faad326b8d6db46233026221ee6d0a1c4246533c4a0e5bd172eb8936a9c0d30066538e3eb4ad5cb9877fd861b482b30150a06104161647e01d004d997403ee06726cb97e2e25f18c668eee4c5bf72529803189ee6a7aec238d5906ea5ae10722c9a61a78aea52af33eaac75406b1a60befbaad48476d9ff887fd283eb1655bcc07cf753331436db5b3b13032ff9c3d696380e9f5abf50d3556fda0df0b53897a737ac7a3b87c2a832b0c7273ea9fc54a767f1a812bf0164bf7521630b81b9dd930d92ee2ca28e3203b77bc082ceb37d55edbcb71df0b79236789a25d418cbb95544e2cef33bbdeb27a3f7909c1f498f47135ae9033adf250ad4f6575361e4cfcc9bcf4b90c3ad47a3442297a223cca843d7205ed08a9b87160a6d01b46a7d1c844e8d1f18f618682bfb22955f395b2a5790a51a696499d9e71a501f3fa546de9b10ae47bcee42ba7f869fb9ce4ed7c6453326c034cf05d9f1e3c200701ba752dabbd868521c3d8f80672d42f6cf4564f08cd7b390e6d49dd90090afdb84486ffcaa4e84d88682744dc0a878faa7cd440a8b276710902081f4dc84174619a66ea3a371f95505400d99fa999017710c8e2714be60949d461310f7d43a0dc123516d77d362213f9f75a5a1c393affc49ea151d46a81ffad239f28c07f65f59ea077d9a4d9c752de49b9ef36be60d112d795f588b00ef6e7730dea65e1016da0dd462370e0ba5c660001e457c08b436da2903b62906932084728c81671cbfb079bb29\",\n        \"signature\": \"66dfa4c1575beff2f5a230b28c58c3eea0736df379d75559bc9d37a9579d121c05c373e8484c9747ef4477e80c4b2cb4ddf16ae9fdfa08a07547d107dcea1203\"\n    },\n    {\n        \"secret_key\": \"272d64de50b1312bee23d7f4cea508a8fccf3e9b324e97b1c8e72502f61fbf45\",\n        \"public_key\": \"33498c3b712ab9c01ec76b2efe2b83add1e1f2b5eb78f21692323451820cbe10\",\n        \"message\": \"d6260d7eec5d436208e7e737655e0971814270194405e36e39f8f17b649fbc16c0f3d7f2bef5ebc02bb1c4df48e8470a3eae8a3ccaf640abcc094aa91150ff1a8cf1169693ebf5ac0034b9b919ecf17db791dfe5fedc90918b23e54e9004a1ae771c213ed7ed7334434e5bc02c0dda2bd1a876fb824a197bc99613b1409e7052310b0820da71446929ae7cfd3afba042de54578a5bfd94c1544391a3d9acbd5663ef65c6920d78516dec1cd55f6eb7290ba0aaf9a171658200b24a47a071b96fea03c6ca7ed0d6fe675dd63761833d75bc5e58a958582db02a60c6ce0a63f42ba837ae77c17a32705fd9cafa587b555dd4619851079794e24eb44608835a6f4824920d577a270396c9573bc7d82fe2aa0465956613a2c508cf2432337a365e6c984cba917f0cf842af122dc89dea958d418cae44a6e4ed263a415ff994a5ffb2ff13913df214bbfe90a34b247e71ab73f7ff004c23acfd90c767611aa55814c66964168e568ba75bf34903597cdcac78c24bb9f14f5c86a51f364f9ab41e464aee64fa50a1c159cbd850832c504ab42a584a96d5aee082d82c1edda19338160b8dcfa3419b3af64d9cfb104f98f9d35e5394e23228e275c87db50ca867540b880c7af29fbf534294581c22240bcd4d7d2c20ffc36733ada27653d3ae1a8c2203eac626e2e9bb4b52ce523e5adb3b2c10dcf78c2a1e626a16ebfa1bdb8c161493a5aaa2d84bfaa0f2027ffe4e9eaeb332ebda7cbbb677769d78517adf72f823a7f844165a079878d258fd95225c21177837e69c19685a051ca92b120b7d86d78595471ffc42a5e6e6431be7b64f8076458bacd6c72903cc34fc63a40cf3df00eff9d6ee9a8f39d25ead81a8128888b0a1ac0e5e3ad927712c14146adf828770ff958709eb19288e77bb70734881e9e016cd29e7d0899341ff6b297ac796bbde486ec35949f6a32b2ca647385915ecba3b9f0225087145c18d6559d3a31d6f22fc49f8a6315f1d32abeeb7cf2c2c776ea7350fd5ebc0e0f265baccc2697a7c8ca40c135f6cfcb0b58a61431960ffa9065709a961a633d570b73fb4491de52ad0d7b204b6e997b037ede3f7eca820a7cdb2c69ac29148be3523508ae7e4c3d1a717f55a821d14c3b64f08ca9ae49613b115773ef618d321c908bd2156717a434e5089a5948c045c8da8a4bd86ed5fabc6b13466e6deda583207d2ada2b2ab9cb1543df7a3734dfbc6fc428106d4844724a13df42faab18ca89db20ac9bc27b85394667c5a2779ca63ed7ac2b7c0d4122391ee4602d61ea0381764fb72dcc224e65eae2bc4506b0f09e23205d0bb21c77d8287c165e0b42c551579778acb7258a2479d7cf25b902e8d0da429bde36b4590dae96f525481ac8378\",\n        \"signed\": \"33814c6ef375ab963769b2de4a25e7020fcd97f78f8fc93455c4b1c2bd45d4b01e192900e3122265fc552cd5c5f00e931e3a183cca5ba0802dafdebb79ebeb03d6260d7eec5d436208e7e737655e0971814270194405e36e39f8f17b649fbc16c0f3d7f2bef5ebc02bb1c4df48e8470a3eae8a3ccaf640abcc094aa91150ff1a8cf1169693ebf5ac0034b9b919ecf17db791dfe5fedc90918b23e54e9004a1ae771c213ed7ed7334434e5bc02c0dda2bd1a876fb824a197bc99613b1409e7052310b0820da71446929ae7cfd3afba042de54578a5bfd94c1544391a3d9acbd5663ef65c6920d78516dec1cd55f6eb7290ba0aaf9a171658200b24a47a071b96fea03c6ca7ed0d6fe675dd63761833d75bc5e58a958582db02a60c6ce0a63f42ba837ae77c17a32705fd9cafa587b555dd4619851079794e24eb44608835a6f4824920d577a270396c9573bc7d82fe2aa0465956613a2c508cf2432337a365e6c984cba917f0cf842af122dc89dea958d418cae44a6e4ed263a415ff994a5ffb2ff13913df214bbfe90a34b247e71ab73f7ff004c23acfd90c767611aa55814c66964168e568ba75bf34903597cdcac78c24bb9f14f5c86a51f364f9ab41e464aee64fa50a1c159cbd850832c504ab42a584a96d5aee082d82c1edda19338160b8dcfa3419b3af64d9cfb104f98f9d35e5394e23228e275c87db50ca867540b880c7af29fbf534294581c22240bcd4d7d2c20ffc36733ada27653d3ae1a8c2203eac626e2e9bb4b52ce523e5adb3b2c10dcf78c2a1e626a16ebfa1bdb8c161493a5aaa2d84bfaa0f2027ffe4e9eaeb332ebda7cbbb677769d78517adf72f823a7f844165a079878d258fd95225c21177837e69c19685a051ca92b120b7d86d78595471ffc42a5e6e6431be7b64f8076458bacd6c72903cc34fc63a40cf3df00eff9d6ee9a8f39d25ead81a8128888b0a1ac0e5e3ad927712c14146adf828770ff958709eb19288e77bb70734881e9e016cd29e7d0899341ff6b297ac796bbde486ec35949f6a32b2ca647385915ecba3b9f0225087145c18d6559d3a31d6f22fc49f8a6315f1d32abeeb7cf2c2c776ea7350fd5ebc0e0f265baccc2697a7c8ca40c135f6cfcb0b58a61431960ffa9065709a961a633d570b73fb4491de52ad0d7b204b6e997b037ede3f7eca820a7cdb2c69ac29148be3523508ae7e4c3d1a717f55a821d14c3b64f08ca9ae49613b115773ef618d321c908bd2156717a434e5089a5948c045c8da8a4bd86ed5fabc6b13466e6deda583207d2ada2b2ab9cb1543df7a3734dfbc6fc428106d4844724a13df42faab18ca89db20ac9bc27b85394667c5a2779ca63ed7ac2b7c0d4122391ee4602d61ea0381764fb72dcc224e65eae2bc4506b0f09e23205d0bb21c77d8287c165e0b42c551579778acb7258a2479d7cf25b902e8d0da429bde36b4590dae96f525481ac8378\",\n        \"signature\": \"33814c6ef375ab963769b2de4a25e7020fcd97f78f8fc93455c4b1c2bd45d4b01e192900e3122265fc552cd5c5f00e931e3a183cca5ba0802dafdebb79ebeb03\"\n    },\n    {\n        \"secret_key\": \"0c9fe559ad1ed3ba164daceacb023567b2430320b6715de732a03c59c7303130\",\n        \"public_key\": \"e70fc466fb2acd74e099c36e2c22fa51290bdde96df9c31b6dfbfdc2e2c14a40\",\n        \"message\": \"26ebc648cf8c7965ec6ebe965d9c792bed90655ad440183c6d70ea6467bb8e6f04ec843f333156917bf4c51d0ed0f28b7cd31bc12cf840686b82b0c2c350bbdac805333725d6b69c2ab7f34ee593fa1cccedf3f0642a688fcc1cd98b0987d01f713a2fa6416c961921de0cc2c9ec7a555855e7fcd4c7ddaa14fd91ecb04224e1761b7d6b35f4aa5618a500ca00d1ca2451b5d368afde3a407e783135f39019a5b984e82ac279c05e48c295ebd1563821a0743c52246b5d2b2034e3aeb6ce7c5cf919e74a9c7bbc9e25da30430eb16ecf3837eb38a0f559792a729890ba8310260f8aeb9b5af00eb633c12dee022628ba418d75cf18de2f2e65e49b1a69684d6127ef481ca861ecbce3be86497e65df4c5fcd0817c9716b59f2a263d5e9eb606839f85c5a365837b0fbe2c4274d66cb2c65ed365fabf58f15be52b51cb60118ca4f730d447359f7ef346b750217d47b2e79c86c0c62816a0c7c18a2ce2b688e0cce0d752321e79b423857dac59f8fbeb09411e71669ef9a2643f2e99f387ac183e0b0ac72c59a0c3c18c0de8b010878074acc1a2b39f9df99d9f8f8b52fefe4943c525fd4d06ad878e46608abf27a54bc5006f647db724851db7c4578ae66583dc4bb518ef028890347e8fce0927d7d9af3ab5d0d2d202a4026aa2ea7487962676a603298e7d2e7b90921ee1b52806d71a764e03e25ddd6848f61d46fad3d008e10ee5cd5a3390f9d158a4437ef615fc90ac5bf3a9d682e12c3398ac77680d22cd1a6a56ec3b25cede867edd383159c6164d63e9cd1c956ac7235fffae936166ccd35898e29c9b4ca4e2925da323b6fbf67cfd596c88a1a35a8359851ddcba8f6134a9faa244dcb47e691276ee625cc20adcec21cbe77a3acb9ba72f0c9d3da7e9cd5be3b95990ba54a9f31af171f95aeead3331cb188a5b2c6f539acb48b98b3f7341f60251cb60429ccd9cf32f009205f2753fbbb26aa53174342ad184dab6870c0fb52930119d9f97d8489a60076aadb2e96054ac7cb7f84e13c75bbf9e4d924d2272afef0871915e243ce66fc2a8888513535b10bb4079c806bd949281e28283523d0d210b31ef62a95dcae0cd25290c7edf2c24b432822debe347f1cae945f5728c71b5403ef14e72c3d8342e198b362ee20f809e46aca015f35477ff89ac4b37e6615856f7ea251fbfe13f9065259b0946aaef24943270a854de889780033d63dda5447998a3ed7e506aeb51ea37b681ac3076797acdbfcc27883630adb72260a46af0a60d53f6654566e20d6088cd48e23b28d81f0eed205b92aafd96164d6d3ca3fc8b171804ee9fce7abaed2ea4ddf9cb2b3ae73a70ed63de45e14101428d0a7a226db39ab6cd04374080e6983f018ce93da4c89ac\",\n        \"signed\": \"6cd8aed97d9c62d5fdae597d061c0c2bc37e42df06b8327a468f92b3f438a1e6b6b1ef2be78549a289fd3fc1a6299e5a33d5396cb4fac1e8e9982f0cb3d20d0726ebc648cf8c7965ec6ebe965d9c792bed90655ad440183c6d70ea6467bb8e6f04ec843f333156917bf4c51d0ed0f28b7cd31bc12cf840686b82b0c2c350bbdac805333725d6b69c2ab7f34ee593fa1cccedf3f0642a688fcc1cd98b0987d01f713a2fa6416c961921de0cc2c9ec7a555855e7fcd4c7ddaa14fd91ecb04224e1761b7d6b35f4aa5618a500ca00d1ca2451b5d368afde3a407e783135f39019a5b984e82ac279c05e48c295ebd1563821a0743c52246b5d2b2034e3aeb6ce7c5cf919e74a9c7bbc9e25da30430eb16ecf3837eb38a0f559792a729890ba8310260f8aeb9b5af00eb633c12dee022628ba418d75cf18de2f2e65e49b1a69684d6127ef481ca861ecbce3be86497e65df4c5fcd0817c9716b59f2a263d5e9eb606839f85c5a365837b0fbe2c4274d66cb2c65ed365fabf58f15be52b51cb60118ca4f730d447359f7ef346b750217d47b2e79c86c0c62816a0c7c18a2ce2b688e0cce0d752321e79b423857dac59f8fbeb09411e71669ef9a2643f2e99f387ac183e0b0ac72c59a0c3c18c0de8b010878074acc1a2b39f9df99d9f8f8b52fefe4943c525fd4d06ad878e46608abf27a54bc5006f647db724851db7c4578ae66583dc4bb518ef028890347e8fce0927d7d9af3ab5d0d2d202a4026aa2ea7487962676a603298e7d2e7b90921ee1b52806d71a764e03e25ddd6848f61d46fad3d008e10ee5cd5a3390f9d158a4437ef615fc90ac5bf3a9d682e12c3398ac77680d22cd1a6a56ec3b25cede867edd383159c6164d63e9cd1c956ac7235fffae936166ccd35898e29c9b4ca4e2925da323b6fbf67cfd596c88a1a35a8359851ddcba8f6134a9faa244dcb47e691276ee625cc20adcec21cbe77a3acb9ba72f0c9d3da7e9cd5be3b95990ba54a9f31af171f95aeead3331cb188a5b2c6f539acb48b98b3f7341f60251cb60429ccd9cf32f009205f2753fbbb26aa53174342ad184dab6870c0fb52930119d9f97d8489a60076aadb2e96054ac7cb7f84e13c75bbf9e4d924d2272afef0871915e243ce66fc2a8888513535b10bb4079c806bd949281e28283523d0d210b31ef62a95dcae0cd25290c7edf2c24b432822debe347f1cae945f5728c71b5403ef14e72c3d8342e198b362ee20f809e46aca015f35477ff89ac4b37e6615856f7ea251fbfe13f9065259b0946aaef24943270a854de889780033d63dda5447998a3ed7e506aeb51ea37b681ac3076797acdbfcc27883630adb72260a46af0a60d53f6654566e20d6088cd48e23b28d81f0eed205b92aafd96164d6d3ca3fc8b171804ee9fce7abaed2ea4ddf9cb2b3ae73a70ed63de45e14101428d0a7a226db39ab6cd04374080e6983f018ce93da4c89ac\",\n        \"signature\": \"6cd8aed97d9c62d5fdae597d061c0c2bc37e42df06b8327a468f92b3f438a1e6b6b1ef2be78549a289fd3fc1a6299e5a33d5396cb4fac1e8e9982f0cb3d20d07\"\n    },\n    {\n        \"secret_key\": \"15d75ad8e4afb12634cc8e600f1a4267ef9584f4c4ac44fffe4b9fcb885c9d2a\",\n        \"public_key\": \"09d126f017e0169774e8c37ab379263a8075746127c2d11ecb0e4cb454709ff1\",\n        \"message\": \"d1cea2b7e9afc1f0fab890d2700a5ae41e15e7d34d3bf19d0f34d9f9f0ab9812dc7c2a8dc44c8ee7f3788761ecd988ee72c736b62a7cac3cc9b738e938df7787377eb9ffd120d4ff58cf1c0675633f7e83c4b115548f14d2f70c6d482211443a8499599558c14277980fa42a78427907f73a41f5f6693b2f75fe5e7a6ff0a6c3a4e2ed1d0d968d5cc9d6f13d41c3d291396ae7e434e664b2ff243e7f6d88010210078c39b5a576caf409bb4711b3eefc486b67b7ffeae0cbac6a0fbdf5343fb2ae4e057edc8c9d2ed31eae9ec83d2bedd219eb989b2d4419618c2d3ce4490e35fbcad432b0124795f9c5cbdc1eb0c3072b4aa801d26fbcc7b07b8257f5fe47acd9bc587b5657cf07ca545bb568c9e4e73cddf6254e22f78ab2f8064519f8abfd16fcfa90f87687db0c4209be2c6c79a5521f44189678d932c54585700a2437702e56aab588a17cb2cc94c00e87570ef3ac5133d753038aa46510a260c1fe80479bc02eed9a8d1de99354ac2648b48b96ab1b80cca6cae1877f37d70428bb50850e0308db0b423087bf7dde279e096766f2ab3ab2385b0464a5bed7bbd8d457e935e200aaaa8d951570e053076db18a6a62f72b319579884a0826ba2b436371dd218b01a0c5e58d0cd5ff9825e4466fe966df05cc31c803e5212183ddf29cef7fb91648a4f8ee19fd5f8dbd8a56be7abf33659a9224a1e27a1024effdfb88e8806148d0d1780906af1ebe3e5f14363190d88cc6e5089444f125d063155dcf86ca9263f2f5f183c26974fe000b9342d24c781e2058287cb6f3f1e3270c22b7707b8323a5cc8db81aa906bb59d696cb97cc74e359595ffb8373cad3710ea09ea9744c20e9a12e05be5a95f085ac561678d7da432e4c7cb53e1271df5cd5a339d2d7520f1c1848d15071d8c69846b23c5d2432c73890f2eded37c3d2964a4b5b55225888e892f526d1cac31eac356f361c2bf336c462d60c82e82b616f2a519c2f67bf01290369be9b55e9f5c8cec4f2e1b2ab302506c903dc3e7b9c978141dc904b01b1c23d25004399bf8b73d69cd539c79af5e9a0a511eca221078a1ff7b0f604aea84246c3cb32db9381be121767e097bea517bfcd82dfe921379840efb4b6f02a48ecdaf12d2cd38930d4473adf97cd71dc4ea10382f4f5d1dd7562cd4bf5115932f6c4700aa8fe8deca9d5e7277902b8f886529765db2486074b23a19fd4b04356bfa6226c82baf69a087d9ca18823f8e3e68308e16b804c363df5b6307e76240db1ed841b612d65548ddfbe8367da60772c6aff554dc85d041948345e567da9333151858fdf6993273925bfdc7181b5f646d063a8c8f310569b0ed093bd9dff04febf0b41c6dc55169a14a3c862e5416f1e582fdee8fe87dc\",\n        \"signed\": \"a8f2f4b9e2072ca9fade37fdd62d8d0242fd4daa09fd856e75f4e343c7260ea677f753a627aed08cb96c444e29bdb5b5385d43843bbe79a3dda36e1e1101c50fd1cea2b7e9afc1f0fab890d2700a5ae41e15e7d34d3bf19d0f34d9f9f0ab9812dc7c2a8dc44c8ee7f3788761ecd988ee72c736b62a7cac3cc9b738e938df7787377eb9ffd120d4ff58cf1c0675633f7e83c4b115548f14d2f70c6d482211443a8499599558c14277980fa42a78427907f73a41f5f6693b2f75fe5e7a6ff0a6c3a4e2ed1d0d968d5cc9d6f13d41c3d291396ae7e434e664b2ff243e7f6d88010210078c39b5a576caf409bb4711b3eefc486b67b7ffeae0cbac6a0fbdf5343fb2ae4e057edc8c9d2ed31eae9ec83d2bedd219eb989b2d4419618c2d3ce4490e35fbcad432b0124795f9c5cbdc1eb0c3072b4aa801d26fbcc7b07b8257f5fe47acd9bc587b5657cf07ca545bb568c9e4e73cddf6254e22f78ab2f8064519f8abfd16fcfa90f87687db0c4209be2c6c79a5521f44189678d932c54585700a2437702e56aab588a17cb2cc94c00e87570ef3ac5133d753038aa46510a260c1fe80479bc02eed9a8d1de99354ac2648b48b96ab1b80cca6cae1877f37d70428bb50850e0308db0b423087bf7dde279e096766f2ab3ab2385b0464a5bed7bbd8d457e935e200aaaa8d951570e053076db18a6a62f72b319579884a0826ba2b436371dd218b01a0c5e58d0cd5ff9825e4466fe966df05cc31c803e5212183ddf29cef7fb91648a4f8ee19fd5f8dbd8a56be7abf33659a9224a1e27a1024effdfb88e8806148d0d1780906af1ebe3e5f14363190d88cc6e5089444f125d063155dcf86ca9263f2f5f183c26974fe000b9342d24c781e2058287cb6f3f1e3270c22b7707b8323a5cc8db81aa906bb59d696cb97cc74e359595ffb8373cad3710ea09ea9744c20e9a12e05be5a95f085ac561678d7da432e4c7cb53e1271df5cd5a339d2d7520f1c1848d15071d8c69846b23c5d2432c73890f2eded37c3d2964a4b5b55225888e892f526d1cac31eac356f361c2bf336c462d60c82e82b616f2a519c2f67bf01290369be9b55e9f5c8cec4f2e1b2ab302506c903dc3e7b9c978141dc904b01b1c23d25004399bf8b73d69cd539c79af5e9a0a511eca221078a1ff7b0f604aea84246c3cb32db9381be121767e097bea517bfcd82dfe921379840efb4b6f02a48ecdaf12d2cd38930d4473adf97cd71dc4ea10382f4f5d1dd7562cd4bf5115932f6c4700aa8fe8deca9d5e7277902b8f886529765db2486074b23a19fd4b04356bfa6226c82baf69a087d9ca18823f8e3e68308e16b804c363df5b6307e76240db1ed841b612d65548ddfbe8367da60772c6aff554dc85d041948345e567da9333151858fdf6993273925bfdc7181b5f646d063a8c8f310569b0ed093bd9dff04febf0b41c6dc55169a14a3c862e5416f1e582fdee8fe87dc\",\n        \"signature\": \"a8f2f4b9e2072ca9fade37fdd62d8d0242fd4daa09fd856e75f4e343c7260ea677f753a627aed08cb96c444e29bdb5b5385d43843bbe79a3dda36e1e1101c50f\"\n    },\n    {\n        \"secret_key\": \"bf3c0cbbbe20be2acfafb27a3611b48921a728ab17334b8afdee8305178f613b\",\n        \"public_key\": \"4500a03c3a3fc78ac79d0c6e03dfc27cfc3616a42ed2c8c187886d4e6e0c27fd\",\n        \"message\": \"8f30ba2f792e9a97f6eafe29f976a48028cb8857b5c798bc2b6168c46444c0ce696070374c5e6a40c3d18a5dc7669fc41db9a81cff759b8ca0159871c3442e8c7512698fa447b5783ee01d1b611449abad237162922b02d1aec5de1d666f17da1613106301d30586d116e2ac09007dd71e8123ede4c5a6a9ac077fe3d93909da628e865870a4e25cb35591675a0690bec4af0281714fe6661bd5c00a27d79f959fb4d4fb1636a6a3575f4f01470663899d737472b096be4db723715367a41a3a4c13f742d908f4d921cfdd156e75868261ba9c10d85874ca2d6c0c9e7295e5662bd916a363c7a796ead617c4251e6794da06c3d08f2fdc3886944a7509e6409c906b593113b4b1f9850132960d9f3a4eeb7386fa592f6193beab8e0ff0f28908a0d548db87bae978b05abbca9b3e96d8795b88077f620f2124e31590eb099e94e0e6e3cd620ae6290f3e2d01467e5bef4fabdef79d9ab9239e753ec4fa0bb110ff1d393fca02243502d7e987991eb76d08f8be7eb2b1ee00c3b68bbf72a623baa15be896b3215ebe8a82313109fc629b0cce6491f813c24970e4ffe6869e40b46b4ed22986d0042155276c230de4c05d678552f2e851cacf5a472157dbb1a99a2b42ff4037f0dc6380672921c909206e80050e61a6b3056b17e3ae835009b20419a3b9846d374892e719f1b35bc1257da93ccc6d8f8fcaa8e609a8d204df108be7193467e7f105935282c3fe6670a5329442ea3edda2376a03a1cfe8723a909c064d30fe9bb0212c33afe2bea30c9143c001da01c7ed504559b97fe2cea09beb9db51900dc136705921e20297845ba72a97aa7c953814571be3f08cef968045a5ac34004f67fbfa54e996b311bd8dc527d89e1d4f53453a6713720101c45a60ee3a05c2ee66f134b5af40e4b70ef37ba3f0afdefc039f342c28af9198251381a1079a5dd035a8c28976c6b7f4db09ea383a3a87f0f851fd331aea7fa4bfcd95631d652fa2f50f1c23ff2bc137a0604e3d9f39ccb965145bca48b06dc8a817547b625effa796d000c3774bad198db1241be7a2c0dc4a4641b9a8cb9cb8c8c3887576f5272c33aaffe45615f51a96fae76cf5125bc69ad0a4038790799b5c2624421a6433dbab39cccb0b1787b5bce289594489d17edb5f9310374807d36c6e6734726bb33004ecae8bb691dcd387601f4ea911b4b90ebff756d7d8d9eb422cbb9aaf7f4772e0a5436430685e57b697454e82eeadce4aba062b77682cf219be1fd9b00f1cb1135a1021349539a4b93ae213f193d2932738ef72920499b7be2a81c9baaed17c54641a5974d27223241e3c6a095226bd237e0591e002b3af0565df3e976420f9764a09ae8bfa2795f8fad7fc687bd2de23d1488f449d8\",\n        \"signed\": \"8f8703bcf4c0329417339eb026f2b72d314d922e9accb5d8bb7eec87e07e6138551672a6132cb4f875508ed3299567b4a74134d2bdf0d857f980861d18be7e018f30ba2f792e9a97f6eafe29f976a48028cb8857b5c798bc2b6168c46444c0ce696070374c5e6a40c3d18a5dc7669fc41db9a81cff759b8ca0159871c3442e8c7512698fa447b5783ee01d1b611449abad237162922b02d1aec5de1d666f17da1613106301d30586d116e2ac09007dd71e8123ede4c5a6a9ac077fe3d93909da628e865870a4e25cb35591675a0690bec4af0281714fe6661bd5c00a27d79f959fb4d4fb1636a6a3575f4f01470663899d737472b096be4db723715367a41a3a4c13f742d908f4d921cfdd156e75868261ba9c10d85874ca2d6c0c9e7295e5662bd916a363c7a796ead617c4251e6794da06c3d08f2fdc3886944a7509e6409c906b593113b4b1f9850132960d9f3a4eeb7386fa592f6193beab8e0ff0f28908a0d548db87bae978b05abbca9b3e96d8795b88077f620f2124e31590eb099e94e0e6e3cd620ae6290f3e2d01467e5bef4fabdef79d9ab9239e753ec4fa0bb110ff1d393fca02243502d7e987991eb76d08f8be7eb2b1ee00c3b68bbf72a623baa15be896b3215ebe8a82313109fc629b0cce6491f813c24970e4ffe6869e40b46b4ed22986d0042155276c230de4c05d678552f2e851cacf5a472157dbb1a99a2b42ff4037f0dc6380672921c909206e80050e61a6b3056b17e3ae835009b20419a3b9846d374892e719f1b35bc1257da93ccc6d8f8fcaa8e609a8d204df108be7193467e7f105935282c3fe6670a5329442ea3edda2376a03a1cfe8723a909c064d30fe9bb0212c33afe2bea30c9143c001da01c7ed504559b97fe2cea09beb9db51900dc136705921e20297845ba72a97aa7c953814571be3f08cef968045a5ac34004f67fbfa54e996b311bd8dc527d89e1d4f53453a6713720101c45a60ee3a05c2ee66f134b5af40e4b70ef37ba3f0afdefc039f342c28af9198251381a1079a5dd035a8c28976c6b7f4db09ea383a3a87f0f851fd331aea7fa4bfcd95631d652fa2f50f1c23ff2bc137a0604e3d9f39ccb965145bca48b06dc8a817547b625effa796d000c3774bad198db1241be7a2c0dc4a4641b9a8cb9cb8c8c3887576f5272c33aaffe45615f51a96fae76cf5125bc69ad0a4038790799b5c2624421a6433dbab39cccb0b1787b5bce289594489d17edb5f9310374807d36c6e6734726bb33004ecae8bb691dcd387601f4ea911b4b90ebff756d7d8d9eb422cbb9aaf7f4772e0a5436430685e57b697454e82eeadce4aba062b77682cf219be1fd9b00f1cb1135a1021349539a4b93ae213f193d2932738ef72920499b7be2a81c9baaed17c54641a5974d27223241e3c6a095226bd237e0591e002b3af0565df3e976420f9764a09ae8bfa2795f8fad7fc687bd2de23d1488f449d8\",\n        \"signature\": \"8f8703bcf4c0329417339eb026f2b72d314d922e9accb5d8bb7eec87e07e6138551672a6132cb4f875508ed3299567b4a74134d2bdf0d857f980861d18be7e01\"\n    },\n    {\n        \"secret_key\": \"287fafd21374572f57810047d0d98cb1ff3d0120faa4886132245732c1a6ab78\",\n        \"public_key\": \"e8252063f5ad7e95bd05c502a8bc4a17556360869b9de0a3b858938e11117619\",\n        \"message\": \"b3c443e4e5899c16d39e81b4f8074042a904a735074b2795d9ac06b1379ef7618d2a534b6bef81569e60719267bf29cd9d16acc9a174d8026b14b127d0d2d8b4583998895ad7ef72fedc53b8f08a2250100e1f1f0aab48bc7074643488e6b670e1b0727c385a34ff65a0d7e83ba86083b873dff0559209b14b2ac42bf7c572d0c5917ac42e4ae4dae1dd4235795276a076132cfe3e0c350b26580fbb3af81777b93ad95cb7ff17c2d980ce0d492f6d40fa90ba3fcaa21bb68735ee1ef208495ebf7b02276ffa1efc081658bb44cd2761ef5e3e1ca60ec8b5d816d4abacd0bcc80268d8f4df8b3a52049db0157e2b6e81acd6f3f28947c07627955cdac9eaa1de17d4b9daa361fb49782664d7d6d2ca5cec6d14893c3e80b6d16daacffcc0b75937e8bef6f9e112a87f4b035f9036070a2ccc55c2aad939df674f7e4e12685e016ea0e4902aaaafaffe38ddb2f90d9cf78537f61391696ff0330ae8f79a1c1ed5d52b4ee2a62d90fb82d9a48393fa33810b40d0455902d574ff052003e0160c0f47b5e580a078bceef06073dda8b2d1f104a595e90bb6a48eddd865f1cae4f178fe22e75f2f6124a9da0682447112b3db5be8c42472b241e944fd2370c2dc2715c05a41bdbc890c41c65fb08c2f593174391ac880f3cb67d1b74ff802ef962afef7b9f3ea326f9527e7fba698187924b64ccdd0866248c76ee64c79069be0a057b10ae190f38ff5aba844e39331cf1db13c900906bee0d7e7546ef52324e37c590675f139f58f573a494f4ae82c4ec81066a68e2d92900191c47d3062f0f9aaed191137cda9b83cd130e8262960e6244f8f6ef39f15a4fed13cb669edc19f5ce162ceb8d242b9addbfba8772ce74985a5f3720d590a920e1dca75a879b1aa459f7462fff2e95072761b209254fe38c54d833a8e2cb8fc40c598f3c7f7d6c5705715d0308dc30eaa84676d209d7b7b31344756e69a9a4cb4e4a251817a3786fea6728dd60822336b45ae5d47c704b45c4cad38c1e01ab93d141692d55d12fdb9740f1d181582f1c48ce5434860d930f0e7e70edcffb85560a53dba95d57b31e8924137bc2c19e34bb9c9866877174280e80c23978d57795864a7374aef383f3bf6375359bf63564740098461a6c76e8f238913288769a1cb1c95b22c32a9ebb3eceb048ee324cf0d7e85a389b04dedbbcbeef298d0527816085c0c83efaa298546e8390bd1bfe465ec1bafae69ee5218e72caedb9b649cf73eec454a2b484965179672debcf9441363995a8a907de17dc0684f2aea579a2fb4484195db4115ca32e970526dc00a5cacaf588711dbd469ce80bd297c4f41d6fa28a597c6372c0d214960b54598cd8bc849ebdca36d6225b20dec0d031169cebb36eadc3a\",\n        \"signed\": \"6201e30591d36b7b226e36fdf56434c47cd3051837af31313a9917fd02dded2b5bbb4bbc368b3bd15d062045f105b6e7341b15150d36f90087591d839901b801b3c443e4e5899c16d39e81b4f8074042a904a735074b2795d9ac06b1379ef7618d2a534b6bef81569e60719267bf29cd9d16acc9a174d8026b14b127d0d2d8b4583998895ad7ef72fedc53b8f08a2250100e1f1f0aab48bc7074643488e6b670e1b0727c385a34ff65a0d7e83ba86083b873dff0559209b14b2ac42bf7c572d0c5917ac42e4ae4dae1dd4235795276a076132cfe3e0c350b26580fbb3af81777b93ad95cb7ff17c2d980ce0d492f6d40fa90ba3fcaa21bb68735ee1ef208495ebf7b02276ffa1efc081658bb44cd2761ef5e3e1ca60ec8b5d816d4abacd0bcc80268d8f4df8b3a52049db0157e2b6e81acd6f3f28947c07627955cdac9eaa1de17d4b9daa361fb49782664d7d6d2ca5cec6d14893c3e80b6d16daacffcc0b75937e8bef6f9e112a87f4b035f9036070a2ccc55c2aad939df674f7e4e12685e016ea0e4902aaaafaffe38ddb2f90d9cf78537f61391696ff0330ae8f79a1c1ed5d52b4ee2a62d90fb82d9a48393fa33810b40d0455902d574ff052003e0160c0f47b5e580a078bceef06073dda8b2d1f104a595e90bb6a48eddd865f1cae4f178fe22e75f2f6124a9da0682447112b3db5be8c42472b241e944fd2370c2dc2715c05a41bdbc890c41c65fb08c2f593174391ac880f3cb67d1b74ff802ef962afef7b9f3ea326f9527e7fba698187924b64ccdd0866248c76ee64c79069be0a057b10ae190f38ff5aba844e39331cf1db13c900906bee0d7e7546ef52324e37c590675f139f58f573a494f4ae82c4ec81066a68e2d92900191c47d3062f0f9aaed191137cda9b83cd130e8262960e6244f8f6ef39f15a4fed13cb669edc19f5ce162ceb8d242b9addbfba8772ce74985a5f3720d590a920e1dca75a879b1aa459f7462fff2e95072761b209254fe38c54d833a8e2cb8fc40c598f3c7f7d6c5705715d0308dc30eaa84676d209d7b7b31344756e69a9a4cb4e4a251817a3786fea6728dd60822336b45ae5d47c704b45c4cad38c1e01ab93d141692d55d12fdb9740f1d181582f1c48ce5434860d930f0e7e70edcffb85560a53dba95d57b31e8924137bc2c19e34bb9c9866877174280e80c23978d57795864a7374aef383f3bf6375359bf63564740098461a6c76e8f238913288769a1cb1c95b22c32a9ebb3eceb048ee324cf0d7e85a389b04dedbbcbeef298d0527816085c0c83efaa298546e8390bd1bfe465ec1bafae69ee5218e72caedb9b649cf73eec454a2b484965179672debcf9441363995a8a907de17dc0684f2aea579a2fb4484195db4115ca32e970526dc00a5cacaf588711dbd469ce80bd297c4f41d6fa28a597c6372c0d214960b54598cd8bc849ebdca36d6225b20dec0d031169cebb36eadc3a\",\n        \"signature\": \"6201e30591d36b7b226e36fdf56434c47cd3051837af31313a9917fd02dded2b5bbb4bbc368b3bd15d062045f105b6e7341b15150d36f90087591d839901b801\"\n    },\n    {\n        \"secret_key\": \"9ad049100851d0f79b711225c98847795acfc3601c14b8a9778d6270cd4c05ed\",\n        \"public_key\": \"e7cacf4f3714543c27a3e9ed833baf3bde4c09563bef59e763fab71fb5e4ff56\",\n        \"message\": \"c284bdd8f8275b49ac808c39045e50e1ed50c8a1afd011afe5db3dda620be8aec37f45605762e225d04111f21b49fcefca3f3d5f813b2020a52c49f95c4ad61ca214618ade7eed6cd8d314dc4c6355955277d457462f03b9fba2e225b1b537cd4b5237505c90d43205e1715c3963ccfbec379e6c1705e08034a31afce646727e78a20eed88aeb0dcdabc5c86e86979e63a5c26c3e2177973b6983cebfeda9f31479361b661763aa7261c0939cad48b71908ea90768bb6c9583d8eaeb9e0338515aca1242626dc6be04ecc4429e4cbb4ff336096192f7501ec471b596a99d4c027582cc69e204b6fbcddf59f5bf7462ddcd5989121fd10f11a0675b6c4e4f6520d27d7c61431ba7d174f57395a0bf72d38c1142736ded6b91e4811c0e8541a6c0d996c5a17dc97db388f721d2357d3c6af5c86b1d5e476ea0ac0b1c11d4387f769039bdf538a0216edd0045ee6dd89eef82a425a83faa1b12807038ca19ebec002e8b3c15344c61cfd1e5f0e3b0273deb37278cf197d8a83b13d992308a51373eb38114c9e45b438780277d1e32f3972962a3e14a8d08db9f09aec3dd32a5b99423e61f5e79944ab57a36f6ec07cc3204f9165ee021ada93e6fecb7ec456aa0288c378a75afd6e9dad6c6f88e959a2cf28bfe56d2e61b2adaecf0d86dd8928bceda26b0540246b7337f5cdcec11fb0c1a59d631fcca19408f9522b68a39f86ef970b883a0f0bd6b7b1415ec9aa043b52e19bac176d67b79e2a5dca8bfd29102ac608e473e9f982c3ec8932d8aa8cd565284491de52f516b9ebfb7dbe1299511ae732c2ad1ee4992b077faffc65f488f1ba215da6979600971196d0ff3a08ad9f00e829c1de1afca10ca476be664aad261889b0eb7aeb6ed8637618900acf481e2d224ec64a6e6cf4fa4df731b7a4feeff2580c99b6d75b4dcd0976965cb2b0b5635227842d08a7d907aaebc2fded8009811dcdd73354921753bc5dec017689335f56d0fb7ae213b41792b1f4eb14a24535977a305b19eb9838dc6b51528b98a39bda06010717a208c347aa158eecdfd9a0472d3b8d920f969e12b65919bda38b461949850cc9cc18d8e3baa8c886d93cd096a209d543ca3375fc4e7d65103cb6424beab44e8bc4a5b62c29a01bcf44dcc61e7675c025dec0724200194bde74d72c02e94a946a752f3608457fd91f292715771487d26cad4e5cf6ef7c6f71627a4daf8a4c9b891c1ee8f04aeaa99fe0c8b4e833b7609066b6132a968890e2695da22b2d857c8c0ad9187c96069e476e27e4632c447ee76714a31d1e5149ecb337ee132f3552da33ab2d6fa9d7e93f68a77cbf191cb06bc22f3470af6d7581e3accbeca0b6feb08a14b9a80c1ef59374ccdc0523c3684504c0104bba22c10\",\n        \"signed\": \"fec0af34cbc5cffc56e96dd5ed5968e52cbd4269844fc30e3ab0d3472b5d180c8d1b7690518f41f14438e7f3a83d5e8976cb9a26151fc4149a3298d7e42c0503c284bdd8f8275b49ac808c39045e50e1ed50c8a1afd011afe5db3dda620be8aec37f45605762e225d04111f21b49fcefca3f3d5f813b2020a52c49f95c4ad61ca214618ade7eed6cd8d314dc4c6355955277d457462f03b9fba2e225b1b537cd4b5237505c90d43205e1715c3963ccfbec379e6c1705e08034a31afce646727e78a20eed88aeb0dcdabc5c86e86979e63a5c26c3e2177973b6983cebfeda9f31479361b661763aa7261c0939cad48b71908ea90768bb6c9583d8eaeb9e0338515aca1242626dc6be04ecc4429e4cbb4ff336096192f7501ec471b596a99d4c027582cc69e204b6fbcddf59f5bf7462ddcd5989121fd10f11a0675b6c4e4f6520d27d7c61431ba7d174f57395a0bf72d38c1142736ded6b91e4811c0e8541a6c0d996c5a17dc97db388f721d2357d3c6af5c86b1d5e476ea0ac0b1c11d4387f769039bdf538a0216edd0045ee6dd89eef82a425a83faa1b12807038ca19ebec002e8b3c15344c61cfd1e5f0e3b0273deb37278cf197d8a83b13d992308a51373eb38114c9e45b438780277d1e32f3972962a3e14a8d08db9f09aec3dd32a5b99423e61f5e79944ab57a36f6ec07cc3204f9165ee021ada93e6fecb7ec456aa0288c378a75afd6e9dad6c6f88e959a2cf28bfe56d2e61b2adaecf0d86dd8928bceda26b0540246b7337f5cdcec11fb0c1a59d631fcca19408f9522b68a39f86ef970b883a0f0bd6b7b1415ec9aa043b52e19bac176d67b79e2a5dca8bfd29102ac608e473e9f982c3ec8932d8aa8cd565284491de52f516b9ebfb7dbe1299511ae732c2ad1ee4992b077faffc65f488f1ba215da6979600971196d0ff3a08ad9f00e829c1de1afca10ca476be664aad261889b0eb7aeb6ed8637618900acf481e2d224ec64a6e6cf4fa4df731b7a4feeff2580c99b6d75b4dcd0976965cb2b0b5635227842d08a7d907aaebc2fded8009811dcdd73354921753bc5dec017689335f56d0fb7ae213b41792b1f4eb14a24535977a305b19eb9838dc6b51528b98a39bda06010717a208c347aa158eecdfd9a0472d3b8d920f969e12b65919bda38b461949850cc9cc18d8e3baa8c886d93cd096a209d543ca3375fc4e7d65103cb6424beab44e8bc4a5b62c29a01bcf44dcc61e7675c025dec0724200194bde74d72c02e94a946a752f3608457fd91f292715771487d26cad4e5cf6ef7c6f71627a4daf8a4c9b891c1ee8f04aeaa99fe0c8b4e833b7609066b6132a968890e2695da22b2d857c8c0ad9187c96069e476e27e4632c447ee76714a31d1e5149ecb337ee132f3552da33ab2d6fa9d7e93f68a77cbf191cb06bc22f3470af6d7581e3accbeca0b6feb08a14b9a80c1ef59374ccdc0523c3684504c0104bba22c10\",\n        \"signature\": \"fec0af34cbc5cffc56e96dd5ed5968e52cbd4269844fc30e3ab0d3472b5d180c8d1b7690518f41f14438e7f3a83d5e8976cb9a26151fc4149a3298d7e42c0503\"\n    },\n    {\n        \"secret_key\": \"de54e13f9e2cc754546c99b33b3d72f4d1f7715038a9659f33636577bb526adb\",\n        \"public_key\": \"36338db3326b005e5c61ff782be2eab166d4eb7234a98ea1cd855e1ad535e94c\",\n        \"message\": \"dc4041ad61423a12a0411318a6e62a5ef64a19abe2d9852297be2d4a35eb8670ca36c521531b3038acdaeea2ea01a0b6187862a4e1a89d4b81c5318ed4d67131bc38f841a142a2f6f316dff076939dc0eb81b230fea9881f8f0ff7ed0b293f69b289fe770881fb3710808e8e59e64e190c1e379b9dd348b02c2347d7e20696790b62776a2e825bed6917037cb635c92fbc76b4c5851027e7f13852ee7e7c52573a9030b79f22b60d5869efe680c01664929fe9a06fa333052be1d6af3a0b482c332e18051e78b333839d6cb93d93ebfb277e4268fbeeeeba1e8f96a5c9e328c4267212cac251215bfaa78fd88a87417a80602dcd8828e80400da304e989862d13201082de3530925e0edc2c130a9a419071b31088da6f6ff4056301c129fc2135233628d16d8bf160f6ce86d83cd4e29ae0c73843d70b53056c5af3f3dc561271cb5aff393f0803ade072d9ceb745b6187b28d24696767d5c21f4d4ac58d5bb66c5cadfefb1626ef93f714c782b6ef3ccf4b44ee75f0bb757a25d9b46a9d931a03727d496a22810c634f5c1ae60cbdf2f1ea29b54607cff50d9f8e03a0a4513cf68dfb619773411b6180959a8aac30b2eee4ad327915f60ae52b90e04a9bcef8dc67e71ea10aca553db9895cd8008457d76f02ceb53500211109e89603f304d880aaf02861fe37c9534a9d672d83713cd326c9ab81c353764ca5ad5ac0e7f1ff880fb48acd9cbb949064e21183bc38fb1d90cfe619a8b8fbf5321889bb15c02a53e4d367fc668877b662281c4a2af678f86e691daa8afdcac1b820189fe5c2508ce36edd9c6f8f51575071839439a003352c1573e12768dd6debdf1ed4f94ac79df1ab6a0bc25079c0935477d9149988ec3b8793efcda859acc392ab3fa99493d7ae0a6575b695a1ce076532860287dd498967c46f7add49494c02e744c40280195782e2424476165e72cee23642e51cec432191116aec59b59fcf0a3683b95f760760a20bd67454d8de647c0f9ffc4f90f6e45ac93d802f338299ef280d3bb7a4a89db8c59a12526f2783024c8ade9002f00e3d529b78dcdd4903daf5767a2bed75145396efb69790712de6a5901e6d8c15280182388285021d0e70929215d9f2b799bb92f2ca56f48e8cbba2f19b085845126567cfafa603c2946ea1e7d274554a38bf7d86511f3e474f9fa5cb11105fb52fc68177f3385fe1397be584a70089dc741b4b0095bf7eb2993b418df87b14a1f97926e868df6e568beca2215f2dd7ce8a3c9ee849cb41346c684f7ffef0a792edf433ca99ef34c73f9272a7eb97587c8fce4a5136444737138d53eadf3a84f501bb10456e8e4a4047082c9e1435f576526c2164714d70b3d0a6e9c08a53e323840f4dcfe8f2d19f0be2c88e\",\n        \"signed\": \"37aca8f248394a9e04d06a7da84a7defa39de4da2bcb18d5f64cc34db08651af4abb19fa2a92a7dda56ec9930b81aebd23990511f684c6d15ba595f7d4a2740edc4041ad61423a12a0411318a6e62a5ef64a19abe2d9852297be2d4a35eb8670ca36c521531b3038acdaeea2ea01a0b6187862a4e1a89d4b81c5318ed4d67131bc38f841a142a2f6f316dff076939dc0eb81b230fea9881f8f0ff7ed0b293f69b289fe770881fb3710808e8e59e64e190c1e379b9dd348b02c2347d7e20696790b62776a2e825bed6917037cb635c92fbc76b4c5851027e7f13852ee7e7c52573a9030b79f22b60d5869efe680c01664929fe9a06fa333052be1d6af3a0b482c332e18051e78b333839d6cb93d93ebfb277e4268fbeeeeba1e8f96a5c9e328c4267212cac251215bfaa78fd88a87417a80602dcd8828e80400da304e989862d13201082de3530925e0edc2c130a9a419071b31088da6f6ff4056301c129fc2135233628d16d8bf160f6ce86d83cd4e29ae0c73843d70b53056c5af3f3dc561271cb5aff393f0803ade072d9ceb745b6187b28d24696767d5c21f4d4ac58d5bb66c5cadfefb1626ef93f714c782b6ef3ccf4b44ee75f0bb757a25d9b46a9d931a03727d496a22810c634f5c1ae60cbdf2f1ea29b54607cff50d9f8e03a0a4513cf68dfb619773411b6180959a8aac30b2eee4ad327915f60ae52b90e04a9bcef8dc67e71ea10aca553db9895cd8008457d76f02ceb53500211109e89603f304d880aaf02861fe37c9534a9d672d83713cd326c9ab81c353764ca5ad5ac0e7f1ff880fb48acd9cbb949064e21183bc38fb1d90cfe619a8b8fbf5321889bb15c02a53e4d367fc668877b662281c4a2af678f86e691daa8afdcac1b820189fe5c2508ce36edd9c6f8f51575071839439a003352c1573e12768dd6debdf1ed4f94ac79df1ab6a0bc25079c0935477d9149988ec3b8793efcda859acc392ab3fa99493d7ae0a6575b695a1ce076532860287dd498967c46f7add49494c02e744c40280195782e2424476165e72cee23642e51cec432191116aec59b59fcf0a3683b95f760760a20bd67454d8de647c0f9ffc4f90f6e45ac93d802f338299ef280d3bb7a4a89db8c59a12526f2783024c8ade9002f00e3d529b78dcdd4903daf5767a2bed75145396efb69790712de6a5901e6d8c15280182388285021d0e70929215d9f2b799bb92f2ca56f48e8cbba2f19b085845126567cfafa603c2946ea1e7d274554a38bf7d86511f3e474f9fa5cb11105fb52fc68177f3385fe1397be584a70089dc741b4b0095bf7eb2993b418df87b14a1f97926e868df6e568beca2215f2dd7ce8a3c9ee849cb41346c684f7ffef0a792edf433ca99ef34c73f9272a7eb97587c8fce4a5136444737138d53eadf3a84f501bb10456e8e4a4047082c9e1435f576526c2164714d70b3d0a6e9c08a53e323840f4dcfe8f2d19f0be2c88e\",\n        \"signature\": \"37aca8f248394a9e04d06a7da84a7defa39de4da2bcb18d5f64cc34db08651af4abb19fa2a92a7dda56ec9930b81aebd23990511f684c6d15ba595f7d4a2740e\"\n    },\n    {\n        \"secret_key\": \"8504fbcaaba67683f815499282b6ebd497a81a9156f53e025c2d3ecee0db6559\",\n        \"public_key\": \"e62da86493a0caf52921d5602fbdc3dd3a8436941f6be240b31509681238746d\",\n        \"message\": \"6c63edbd40a03874ecaef81602cd6850c09f4915b7aaf418258c568364538e8392a8c379838b0c95345bf64c3dbc175853fb641f350f0b53a05a8ec290288c0326d435ff776f8683a273333f9bb2802184ecc53b06b28c2c402a54bf134c1a23299749a6ce2b51a7ba22232148797e993ff258286e947778a8742d3f36cc7842976043fc23da8a97ecb9715fc05fb0f23fa7321ddc1932861631604eba2ef25d8b756ce4733656bfd1e14708923ac7c60a79846136d741973ba5514189720bc0f7774b7bd3574595bde2515031b25b62654b161035778070ace14971df1fe0be4ea1ef55cf8747d3716c1ce707b1a7c8520e6deb334eb186338fc93000768eb2be40c6e0dc3f5df831b32c3a2c33e28898d6762a1522d3d48daee56a0269bddf6cfc9d73f8d178aeccbffef7ce164f98afea224a9b60ede46a95fadc9fc5d94d209c166d9b8de253381ea2248862946b9cf534947455c24458cf56683a0ec47a2c65075c694c7c3d6adf9ae5e8ad31ac769f83aa26e312c5b01a9a09404b15b814baa7666b3e03f06a8d6348ab8ccb9b60a4a4faf86f7135df039d955c07bd92e7b8e327ee6c1b40196a28b4446aa5a9b2b9773ab76e3ce21180f09d6c08d277c6771d67e22d84540fa43b38f634cfc46e5b8c33f15a568a77e4914aad9ab8c9f7fea47f7677c01880b3e85d2d0e3fbd6dc6e99e437ddc736f92b5a2ff2927e0b442142f0897d0b8a19ac203633df413feaf8ef50a5f767bedaf20f1c13f3b89d1e8b7bd18d591f9de116ee34f9824e4ead1ae9da2e8caaef88b29516aa942de77a7467b6fb26a666f30648c715a2ee9f946743b543a4428e0dfd06178e7e93ec6f26e003e058bec14a4aa2e3b8de11295a764cab30b313fcc5743b2fb89962ddc5cdc6aa0d2e4a306e77af76a05a598923f628a85df1cc73ad3bc01c4b979bd7cb296590a88b0a41b445d50a08423e4ed80f1763c716b6c457d845dfaa68d12b0d03c55fde8ae6b2b92bc6322943dbe54c706bc8e5fcee70654b26f3bfd877f5f5339ac182d5417bd4c0735d825bf70e85eab8216edda632ae7e22b3e53d078a8b20b5a7e2385337cf92b3c16b023563e11cb5043b704d37eb5ed9e85fcdc95cf7a6eade40803175a008ef653ac6136f16129abae1137c5823400748a81256254d317cfc939e26ea0cef9f6548db42890c48beb0479103ba089e514118038b1b90943d716f7a8d4cda5983a674b83a002d8ac9c65734a28b77b760c8e3803f8781ea9199f797ce729e06bfffe8c29b20bc85227c09cc05219ff2ba38e18051083732f83cbfccc310756450b261d5be183d9fb44ec18529f2cc9848c40119c607676bc4d9015fd4bd2fc918dc8031ec19a05ff362c184043be7fe066019ac5\",\n        \"signed\": \"c0ea074bf9addee2e3350a969e7c569e3aea1a4188ee5af34cb73f388298653d299b5dbd94163fba209e8f7dc2e2634d3a52a02810a88c6152945bc16bbdfb0c6c63edbd40a03874ecaef81602cd6850c09f4915b7aaf418258c568364538e8392a8c379838b0c95345bf64c3dbc175853fb641f350f0b53a05a8ec290288c0326d435ff776f8683a273333f9bb2802184ecc53b06b28c2c402a54bf134c1a23299749a6ce2b51a7ba22232148797e993ff258286e947778a8742d3f36cc7842976043fc23da8a97ecb9715fc05fb0f23fa7321ddc1932861631604eba2ef25d8b756ce4733656bfd1e14708923ac7c60a79846136d741973ba5514189720bc0f7774b7bd3574595bde2515031b25b62654b161035778070ace14971df1fe0be4ea1ef55cf8747d3716c1ce707b1a7c8520e6deb334eb186338fc93000768eb2be40c6e0dc3f5df831b32c3a2c33e28898d6762a1522d3d48daee56a0269bddf6cfc9d73f8d178aeccbffef7ce164f98afea224a9b60ede46a95fadc9fc5d94d209c166d9b8de253381ea2248862946b9cf534947455c24458cf56683a0ec47a2c65075c694c7c3d6adf9ae5e8ad31ac769f83aa26e312c5b01a9a09404b15b814baa7666b3e03f06a8d6348ab8ccb9b60a4a4faf86f7135df039d955c07bd92e7b8e327ee6c1b40196a28b4446aa5a9b2b9773ab76e3ce21180f09d6c08d277c6771d67e22d84540fa43b38f634cfc46e5b8c33f15a568a77e4914aad9ab8c9f7fea47f7677c01880b3e85d2d0e3fbd6dc6e99e437ddc736f92b5a2ff2927e0b442142f0897d0b8a19ac203633df413feaf8ef50a5f767bedaf20f1c13f3b89d1e8b7bd18d591f9de116ee34f9824e4ead1ae9da2e8caaef88b29516aa942de77a7467b6fb26a666f30648c715a2ee9f946743b543a4428e0dfd06178e7e93ec6f26e003e058bec14a4aa2e3b8de11295a764cab30b313fcc5743b2fb89962ddc5cdc6aa0d2e4a306e77af76a05a598923f628a85df1cc73ad3bc01c4b979bd7cb296590a88b0a41b445d50a08423e4ed80f1763c716b6c457d845dfaa68d12b0d03c55fde8ae6b2b92bc6322943dbe54c706bc8e5fcee70654b26f3bfd877f5f5339ac182d5417bd4c0735d825bf70e85eab8216edda632ae7e22b3e53d078a8b20b5a7e2385337cf92b3c16b023563e11cb5043b704d37eb5ed9e85fcdc95cf7a6eade40803175a008ef653ac6136f16129abae1137c5823400748a81256254d317cfc939e26ea0cef9f6548db42890c48beb0479103ba089e514118038b1b90943d716f7a8d4cda5983a674b83a002d8ac9c65734a28b77b760c8e3803f8781ea9199f797ce729e06bfffe8c29b20bc85227c09cc05219ff2ba38e18051083732f83cbfccc310756450b261d5be183d9fb44ec18529f2cc9848c40119c607676bc4d9015fd4bd2fc918dc8031ec19a05ff362c184043be7fe066019ac5\",\n        \"signature\": \"c0ea074bf9addee2e3350a969e7c569e3aea1a4188ee5af34cb73f388298653d299b5dbd94163fba209e8f7dc2e2634d3a52a02810a88c6152945bc16bbdfb0c\"\n    },\n    {\n        \"secret_key\": \"eac0f06c2c14f37d434bc99897225dd2e3f1ed74aa7442c550339df77d0b7b32\",\n        \"public_key\": \"43e62055db6e1349c94d89029187882020cbcf9d75e03eb656fa0a15b19002d7\",\n        \"message\": \"27b7fd0e71adf194cf5407b6771793060de0fca7ca0ae64835c43187408a704f533d5ea0c83a654387ba7db16ed58ec837226df57c1fe6382c5919e92213f6f18cbb5735d178a476af35d390b7cd2556217c530f3a1f8ab2339c1a5e8d969387efd39414b56bb784dfd5eb89b859e1f403a238eca2a941e6db56ac456b73450698d1455ec1e9b39a1e907d6bc7e6cff424a28eed579af16310115b67f5fcf7f8346b3fa0260c6da2e27755aca570babb3d303cc832460c963bfdd5c1ffb2fc19921929dda2a717fbcbeb2b8525761bd660ce4a0f7685285d7fad6115ab09f8e63f5f773914494e20be1b512d1114cce3f0f68c7d94f54857694f22af4c698d782ce837b0c1722bb7313bb2c41f6d3dd1a02877fb4296d8662a9e8625984dc1fd1a9510eba9d643ac58a886a045cd0e53c056a833f968b35d01320e9cc0b435d3f6bfad26f9eb5754d38ddf6d5c4bf615a7644a23f9826bcc976092d82d81d547000de0081b7a40a93fbddac13f7d99708ccdeeb9405cd634ca0748cad2c1d8f164f5d77a4f364ae488bedcf1f20eb954bc8a278af81432417856a900f8f152921afbe17914229a513bd71ab7e661cde129af93e25094c56118ed1f22db644428b474651fe36be82fa3695c41fc8699667e053743b0a41155c31f1e2679c6e8cb9c9d1f5f4b40a320a9fd9f47da9b94211ba601b22a115210d9f559c4496f01732458f49ac34eb386636c8b6c68c7bbc0078ab6f398a624b8bafb1c622958562d231dffd4db096196bb87479e42ea22acbdcde8deb10e311632f02fca14787fd3140569b9428991543ec6e834e10b149f23c74bb99ac7b3799a2096d22e387a712b6f9011ea34c5be4c468581ac62ce662063252e066a9a3b15c9570d065dc1619929f06bc75a3179468bc8a16e3ddc4fe185ceba0a92a546b8675fc1ade56307150c7e4c844f6aa5f1edbfb54ac632ca2b259c32a33ee2867856c3390a6740364cb0dfb976e53d0cc6c42a106a1c26918c8a6a033b2aa3c7f2e4392e79f8eca5b336bac5061d7698a3bfe7c2c292892554030de6ce7c0d06eefc54906f81e0097fcff27d14b9b7994a7970e1a5f5c6b6405dca22033dff0eae138ad899f6ee68120b8f22744b0269a9a8989b6f7e08affae77bca2168ade24058ae68a7f800e02e7c38391baf565dd40b55fa3ab3c247b9ceb4d967471775e663d6a1c6c7e17350bbd6b9a3eb1e484ac2e7a7a5c84f5083e5ace8730de89c47e8dcf8341e40ba345dbd66bae0f7f076a705b1bb7f470e3edfb2b78e4d6359413d18d33280b454a0dbb881d8606726fa9bea272475e79fea6a54cb4c0619541b4e77c170c8616874b954beb8d105b86bd1917e25cfba9267187ee2038b3f0078f4c318b587cf44\",\n        \"signed\": \"45f2803afeb0fc44d3aa965b12659bf502e47295706184b2a1c6f16d050613f596a2001394e00e2a44c46cf6505d5cf5b8ab8412f07eda951a15005e338f3c0e27b7fd0e71adf194cf5407b6771793060de0fca7ca0ae64835c43187408a704f533d5ea0c83a654387ba7db16ed58ec837226df57c1fe6382c5919e92213f6f18cbb5735d178a476af35d390b7cd2556217c530f3a1f8ab2339c1a5e8d969387efd39414b56bb784dfd5eb89b859e1f403a238eca2a941e6db56ac456b73450698d1455ec1e9b39a1e907d6bc7e6cff424a28eed579af16310115b67f5fcf7f8346b3fa0260c6da2e27755aca570babb3d303cc832460c963bfdd5c1ffb2fc19921929dda2a717fbcbeb2b8525761bd660ce4a0f7685285d7fad6115ab09f8e63f5f773914494e20be1b512d1114cce3f0f68c7d94f54857694f22af4c698d782ce837b0c1722bb7313bb2c41f6d3dd1a02877fb4296d8662a9e8625984dc1fd1a9510eba9d643ac58a886a045cd0e53c056a833f968b35d01320e9cc0b435d3f6bfad26f9eb5754d38ddf6d5c4bf615a7644a23f9826bcc976092d82d81d547000de0081b7a40a93fbddac13f7d99708ccdeeb9405cd634ca0748cad2c1d8f164f5d77a4f364ae488bedcf1f20eb954bc8a278af81432417856a900f8f152921afbe17914229a513bd71ab7e661cde129af93e25094c56118ed1f22db644428b474651fe36be82fa3695c41fc8699667e053743b0a41155c31f1e2679c6e8cb9c9d1f5f4b40a320a9fd9f47da9b94211ba601b22a115210d9f559c4496f01732458f49ac34eb386636c8b6c68c7bbc0078ab6f398a624b8bafb1c622958562d231dffd4db096196bb87479e42ea22acbdcde8deb10e311632f02fca14787fd3140569b9428991543ec6e834e10b149f23c74bb99ac7b3799a2096d22e387a712b6f9011ea34c5be4c468581ac62ce662063252e066a9a3b15c9570d065dc1619929f06bc75a3179468bc8a16e3ddc4fe185ceba0a92a546b8675fc1ade56307150c7e4c844f6aa5f1edbfb54ac632ca2b259c32a33ee2867856c3390a6740364cb0dfb976e53d0cc6c42a106a1c26918c8a6a033b2aa3c7f2e4392e79f8eca5b336bac5061d7698a3bfe7c2c292892554030de6ce7c0d06eefc54906f81e0097fcff27d14b9b7994a7970e1a5f5c6b6405dca22033dff0eae138ad899f6ee68120b8f22744b0269a9a8989b6f7e08affae77bca2168ade24058ae68a7f800e02e7c38391baf565dd40b55fa3ab3c247b9ceb4d967471775e663d6a1c6c7e17350bbd6b9a3eb1e484ac2e7a7a5c84f5083e5ace8730de89c47e8dcf8341e40ba345dbd66bae0f7f076a705b1bb7f470e3edfb2b78e4d6359413d18d33280b454a0dbb881d8606726fa9bea272475e79fea6a54cb4c0619541b4e77c170c8616874b954beb8d105b86bd1917e25cfba9267187ee2038b3f0078f4c318b587cf44\",\n        \"signature\": \"45f2803afeb0fc44d3aa965b12659bf502e47295706184b2a1c6f16d050613f596a2001394e00e2a44c46cf6505d5cf5b8ab8412f07eda951a15005e338f3c0e\"\n    },\n    {\n        \"secret_key\": \"e608d5de9797907db6d98e0345d5caf2ad33e0eddebf18b81d61e8373ecfb499\",\n        \"public_key\": \"60e0c16ada586e3646912a5f2bb318fbc3d50b57d36fabb637696f9d8d4dc761\",\n        \"message\": \"e610fa7d8385c09c78989ed5ef7a230547f013cb7e8ddf31749ffc31cee10ab3efaca3f14ea194510f0985a818ef8b040e10c3a5114de1ac080f14c3d65d3c244f9242f75492cabae800fcfc9bc275ea1f27728c920c258fe7aa73948060299cb87835792edcc072150b73cefeb0d51562e53b46810e27a4d7f6abd32e959f7d731dde01d94bc41ed835efcd42c922437037a87dd366ffad2eecab6abaeb4fcf07392b3ab40cfaefeaa4266bc537671693c9093dabe8a0538cafd12c639a04bd2ba80ce0f29adbfc66bd4637ca0543a53b0e371d0e2e470d31ba360642a45ab4cfe3e790f587f6c5a5583fd15b18997838a200921c1c399c0b16278b7dd6d3aaab6f325b16afdf761a1bbf867de2bdd48615f15b526770ed20d79f0f30714beeeda58f52a3cc0c5a618315e522b9ebe7cd99b65ed532a62e0f0df72764d6ec6d6d1ba40ef40e05426360795d6dd85bb39f7321d3fb06275de096aae4a2fa2293f31b33f4ad4d7c251ac13e8e15c2bfb1f98f4962c54b6ce033b08aa626f2905d463f55b71cbdadecdb3e0b365dae07b170301983aeb83b1e9f2f28cf65419fd6b0a1a9c26cb54b5949f4bc01a98681844b43034c372a453d38f0473d0ddc709d9f49c8753a75b856c7e9775517df574a09a3953bde5daedf8e4a8da9d773a215120e269fa1861133cd4ceaeb91d5cca2606325458e50cb966d14055b22447eb65dc10118da0831df28c3b4ee8b11f0732f1521bb9482b11f5a86b22f18e83dd1d967d3944285e5d63a5a989817ab2418bc7ed891a373846747a12b527c2f44ee0197b946c67e67fa4aa1c29f3379d46fe07d3aab83da17f9d76bedd38436a055e34ca1d3af5a8754d38c17b9ba4e6419cbab515f431a2595954e428c2670fae3bed62b4596179cb59e21108708d071bcf9c621c6dff03d3cdc9202029454013b9d133847f26544811c0169770fdc6fe5638bfd7a720d8b38f7e30a7e6879060b5f28c8ab17b00200713207e8637bff4844d842d9ca788391340198a3fe0172dfa74de1e55adefbc2e9bc7e885476d1b9c055813408a47528434355bf03fdd4e27d8b3461b0fb66ab3e15a879a184457e9ed9ea6c51b663b31edc8c4a3cd454f69d9ce518d1b87888ee3d9dd5416e43e114ac05721352dffc2ca88597377bbc414009b0c2fd369be5ba35a6dce3478b6c11b33c0a33918b6ee5ac4cd4c2f1ca6bd190a000a838da38f53077560335596d1358937793963810a79a21b8d46140e768898dcda88a0faf8ddd0d633847aaea0e030be6455b41e3ede1e2873730eb8481acaa7a519cf9195847a86afa57f9071d44f4af4ca0d343c90c0d22d946146585f00ef3aef57f0f9e55e818c0128ae255dbc3116cf0fe02166d54859decbfdccc\",\n        \"signed\": \"0d8f095e42a2730a3c7bedf42d5c83398b5c0ee9c77c5a61d982291396a9182a0802a37f324bc4fb5d4aa4ed60444b66144bacbc865105d7690f140650691d03e610fa7d8385c09c78989ed5ef7a230547f013cb7e8ddf31749ffc31cee10ab3efaca3f14ea194510f0985a818ef8b040e10c3a5114de1ac080f14c3d65d3c244f9242f75492cabae800fcfc9bc275ea1f27728c920c258fe7aa73948060299cb87835792edcc072150b73cefeb0d51562e53b46810e27a4d7f6abd32e959f7d731dde01d94bc41ed835efcd42c922437037a87dd366ffad2eecab6abaeb4fcf07392b3ab40cfaefeaa4266bc537671693c9093dabe8a0538cafd12c639a04bd2ba80ce0f29adbfc66bd4637ca0543a53b0e371d0e2e470d31ba360642a45ab4cfe3e790f587f6c5a5583fd15b18997838a200921c1c399c0b16278b7dd6d3aaab6f325b16afdf761a1bbf867de2bdd48615f15b526770ed20d79f0f30714beeeda58f52a3cc0c5a618315e522b9ebe7cd99b65ed532a62e0f0df72764d6ec6d6d1ba40ef40e05426360795d6dd85bb39f7321d3fb06275de096aae4a2fa2293f31b33f4ad4d7c251ac13e8e15c2bfb1f98f4962c54b6ce033b08aa626f2905d463f55b71cbdadecdb3e0b365dae07b170301983aeb83b1e9f2f28cf65419fd6b0a1a9c26cb54b5949f4bc01a98681844b43034c372a453d38f0473d0ddc709d9f49c8753a75b856c7e9775517df574a09a3953bde5daedf8e4a8da9d773a215120e269fa1861133cd4ceaeb91d5cca2606325458e50cb966d14055b22447eb65dc10118da0831df28c3b4ee8b11f0732f1521bb9482b11f5a86b22f18e83dd1d967d3944285e5d63a5a989817ab2418bc7ed891a373846747a12b527c2f44ee0197b946c67e67fa4aa1c29f3379d46fe07d3aab83da17f9d76bedd38436a055e34ca1d3af5a8754d38c17b9ba4e6419cbab515f431a2595954e428c2670fae3bed62b4596179cb59e21108708d071bcf9c621c6dff03d3cdc9202029454013b9d133847f26544811c0169770fdc6fe5638bfd7a720d8b38f7e30a7e6879060b5f28c8ab17b00200713207e8637bff4844d842d9ca788391340198a3fe0172dfa74de1e55adefbc2e9bc7e885476d1b9c055813408a47528434355bf03fdd4e27d8b3461b0fb66ab3e15a879a184457e9ed9ea6c51b663b31edc8c4a3cd454f69d9ce518d1b87888ee3d9dd5416e43e114ac05721352dffc2ca88597377bbc414009b0c2fd369be5ba35a6dce3478b6c11b33c0a33918b6ee5ac4cd4c2f1ca6bd190a000a838da38f53077560335596d1358937793963810a79a21b8d46140e768898dcda88a0faf8ddd0d633847aaea0e030be6455b41e3ede1e2873730eb8481acaa7a519cf9195847a86afa57f9071d44f4af4ca0d343c90c0d22d946146585f00ef3aef57f0f9e55e818c0128ae255dbc3116cf0fe02166d54859decbfdccc\",\n        \"signature\": \"0d8f095e42a2730a3c7bedf42d5c83398b5c0ee9c77c5a61d982291396a9182a0802a37f324bc4fb5d4aa4ed60444b66144bacbc865105d7690f140650691d03\"\n    },\n    {\n        \"secret_key\": \"0e86872c78620f10cb6dfc463d2c2872c4da660748c9cda01ab1456958afba7f\",\n        \"public_key\": \"de4989989269cabd8f4f409cf1a4d974038b275502273557f312d5553fab93c3\",\n        \"message\": \"a900f3e9c643a5649b076fb69c3b2ac084d52ccbafcdca5a9db1daa70500de9933d23d153f74954e1bd5f57b899fe8a4b134c195412b49833b6e5095a6554eaa6d844b11f1584c85055b87f41c999669046c71aeb5c0453fd6a3c437f815f068987c3868cc07aa2af65819046c307bafb7530de84f7130aea78ef005d5fff52f8deaf1d5e9c326d3217fc55b94f628aa104f6a24a395e62d1b62bd9c0d82436319c5d73e5765435f3ba856a4734fd60ae617f7f0c3ba5722a73366c88a6dfeca85c444639f441f2c55fdc464ecb299eee36d8eae063bb94bb2439da04fa5ebc5092338a5035e480f0834aeee8d711f28c46dc960de1be9df307c18c5c178b26296dc567f15bf60863a36710867e92fd51048865674c2af0c53b2e7a248ae5bd09a49aa030618495f82480c420ae106889bec006278b92272075709fec95487cfb10061e6722b93eebfc0bc587bf7ba5f6692b074f55a98d5c302760b1bf1d09f7e8668479ca6f01eeda2fdaf584ac2058fbf7cf3100d06b8091bfeab51c0c0b1d4ee3a8257f69b1617604fce953bb5f7f271c6a1880ea1b3f66267e2439f34580628917877c66ec0fed76e44e8bb2b91a8806df4baca6cc92889b8805070c9a617f807157530751cc17c47b09eeba94d22b4e547c370ce7a496fcaa3412affffb8c9b4de89b9f121aaec5f544b0c725ec5ee9d4b3476adc9d050edb0fdbaf02ca9e38af15f515015a267292ec9aa5444ed1decd9cd9e1ead6487a0ccef995b1c600a036935838660acab276d8b0e5b07d9f36353214bf80f941ac88cf40a08af917926234112eccdaa162dc99de3e25baff65bb01e49898986332bdc2d705d5aea40f9bc4fbb2806894496038da236e9dc29600c9cedeac3b616cc56d89ec2fa67389666c6c4fe233b639105023e101b874a6330fe573f80ace55d037cc612e6dfd5a6e686f9a83054fc46e15bb6da453d810cf138a178bf039d1e181614ff40cbe6bb3b473663752ea8025ff7f739ee4b67110f968089b2473cd044d48b009d0677f791f54e2df6afdc3acb9e99dd6958a450c0e1b6dd5e97a2cc46298b4f48ac6adaf013d75b2c42072d2ee13f733687ee83c3f70c4fdd9720fd1798c662fef3ba012bedd445c4729f2130484fe77ac1b4c4ddeb81faf60f76e3bd7d21a9a6c57a69a9cd9cc203fc63b59ee84b8915b3c18a5954e227c86ebbb7d4c4c1a08d0c5e467c68a06970751ef584bdd611e1dd1b48900ab354b99cec6e1df3bd4146ea0755350dc11c3a3f600d470a74f475e4feedaf0865276fa8a97713471d0ca9955c713588339dee79656e567e6ab1dbf9830703817ae620929a0684a5caf20fef81a8ee897be7e505ade6496b9aef0272bd8f350860233b338c2e36d3138db69538\",\n        \"signed\": \"2037e97741c3e6409c66fc6782aab389c5d778097ac778999e8576e49ef4f6a0c7730bd9e093dd3c0ae7ec76203380da657147d33a8d9dd65ed00cf76224d601a900f3e9c643a5649b076fb69c3b2ac084d52ccbafcdca5a9db1daa70500de9933d23d153f74954e1bd5f57b899fe8a4b134c195412b49833b6e5095a6554eaa6d844b11f1584c85055b87f41c999669046c71aeb5c0453fd6a3c437f815f068987c3868cc07aa2af65819046c307bafb7530de84f7130aea78ef005d5fff52f8deaf1d5e9c326d3217fc55b94f628aa104f6a24a395e62d1b62bd9c0d82436319c5d73e5765435f3ba856a4734fd60ae617f7f0c3ba5722a73366c88a6dfeca85c444639f441f2c55fdc464ecb299eee36d8eae063bb94bb2439da04fa5ebc5092338a5035e480f0834aeee8d711f28c46dc960de1be9df307c18c5c178b26296dc567f15bf60863a36710867e92fd51048865674c2af0c53b2e7a248ae5bd09a49aa030618495f82480c420ae106889bec006278b92272075709fec95487cfb10061e6722b93eebfc0bc587bf7ba5f6692b074f55a98d5c302760b1bf1d09f7e8668479ca6f01eeda2fdaf584ac2058fbf7cf3100d06b8091bfeab51c0c0b1d4ee3a8257f69b1617604fce953bb5f7f271c6a1880ea1b3f66267e2439f34580628917877c66ec0fed76e44e8bb2b91a8806df4baca6cc92889b8805070c9a617f807157530751cc17c47b09eeba94d22b4e547c370ce7a496fcaa3412affffb8c9b4de89b9f121aaec5f544b0c725ec5ee9d4b3476adc9d050edb0fdbaf02ca9e38af15f515015a267292ec9aa5444ed1decd9cd9e1ead6487a0ccef995b1c600a036935838660acab276d8b0e5b07d9f36353214bf80f941ac88cf40a08af917926234112eccdaa162dc99de3e25baff65bb01e49898986332bdc2d705d5aea40f9bc4fbb2806894496038da236e9dc29600c9cedeac3b616cc56d89ec2fa67389666c6c4fe233b639105023e101b874a6330fe573f80ace55d037cc612e6dfd5a6e686f9a83054fc46e15bb6da453d810cf138a178bf039d1e181614ff40cbe6bb3b473663752ea8025ff7f739ee4b67110f968089b2473cd044d48b009d0677f791f54e2df6afdc3acb9e99dd6958a450c0e1b6dd5e97a2cc46298b4f48ac6adaf013d75b2c42072d2ee13f733687ee83c3f70c4fdd9720fd1798c662fef3ba012bedd445c4729f2130484fe77ac1b4c4ddeb81faf60f76e3bd7d21a9a6c57a69a9cd9cc203fc63b59ee84b8915b3c18a5954e227c86ebbb7d4c4c1a08d0c5e467c68a06970751ef584bdd611e1dd1b48900ab354b99cec6e1df3bd4146ea0755350dc11c3a3f600d470a74f475e4feedaf0865276fa8a97713471d0ca9955c713588339dee79656e567e6ab1dbf9830703817ae620929a0684a5caf20fef81a8ee897be7e505ade6496b9aef0272bd8f350860233b338c2e36d3138db69538\",\n        \"signature\": \"2037e97741c3e6409c66fc6782aab389c5d778097ac778999e8576e49ef4f6a0c7730bd9e093dd3c0ae7ec76203380da657147d33a8d9dd65ed00cf76224d601\"\n    },\n    {\n        \"secret_key\": \"520354d85a87d7c22ca6f784714410ec98bf6a65f803ef9379bdc804359b2349\",\n        \"public_key\": \"d8511ceac2fd661acbffb01ba2741cad889934de6392961bdec6fa46123b7f0f\",\n        \"message\": \"a1d4ad486ebb7c1a0acb8f117013e8e4746789c6244a56c9edfbf1ef37ac1309aaf51c9375fc12cacd6897a4479545f2bf390ab7c0c0e5c592f5506e9938378a11b636bf857029b968547aa506c4a0829a15fd3995fead4f860fd7c623c63e8695436eae55816414778347092f5f4d422bb1b5e5a06966241efec14f1e4fca06639114718c30ebcadd4c6d8abe7fe93b25d17173533954188b1ab03fcb7792cb635ce36e9bdbdde7a561c5f66920d910cb269c8c1c3f593265090072c48932e692a9c738c704897489a715c2b394d5a86f7036a4cac5dcb5b85cfa162156e0bc6bfe02fb4c38608cfb23c92b8b6a3cb46e487d60e0dc97aa2e33e3dada925e4e6612cc5af125e5aca45817a2fd6c3ff10b18938b44bd4dd20d7fccf7f26b40a66f48aaffc9a541e6d37138fc55469868e2d10365eff37fac360fab3dc55437ac2d8fea7474405fb3630f7963d2d45958f909d14830286ff152aa752f510ce980bd5754e3fa32c69924dd95d5c152a737a8fadcfd0a4560e0b114f8e8aaa618d438b9877111da1740ef817c441939ecec799ba16b1b171ca9b649b7d78fa052d1497a507688bede4900abc53a9648da5917035ceffe0da21c25c09b06d6185bdda2d778f7ede6153e3eaff495c9796d4d166d2d2ea418e4a4aa6e678faf0696e752a09e02eaade763070e088e9964919ff4aa4c82f8629a3d5c797c2a64594d206835da0bfa43ccd9ddfcdb6aac4d486e03c84122375939a5270bc1519e0707e51c3f46f1e5c566b33a245fa0c202838472363de9f0edde2e791d82293095f750bff545e6c34739dcc54db0a36ae2e2aa39b07cb4f6a9646240d2d31488f67815b29545d220be929e3339f8281a937e05a8c5c3887e06048ea7b18a48f8d91b1e3af5cab5ceda0ebd71bf54edec203d37165e4c9f9f80461cd29fcd99ddea439693941b5d53ff94379cf642571dd559a11f8f383d943f2255cf715800af776b1045bf19a9c9bb095155dfb646b65f4a280f2a97ef927ddabe24a2f971a8170dd42a089276825cb9148c015aae1e9dadf22c10e7548c59bf6b868b20e86c83a9e7343aec2754ee6225f9fdceaf8e51c40e955bda49c35ded38fa8bcc1e6c8fc9c2412e9104c5c2368b1f9923e010fa2ede911d42b139f4007e3426922ffb6158eca97b47cfc997853512bb9d4ca2f017c2c263dc199f3bf1eb4f1508ef828b0e00db21002736a7f22ec91298194583139ad75f58e21b518daa49a4076c6375faa60891a69e52a656699d8034a7ab7fcbe42175491441fe61b1783e837857522215a5fac5590bed2e9d206606096d3be8ee92873bfc30cab15ce9f9910d01a117f89926cc3afa8d104f799ff38098de28b8ff0f038725c2903b24c1429cea4925249d8781\",\n        \"signed\": \"754e60d3f6f4ab4f5d0ddbb001532009166388487f780b76f60bd0bc9fefabfaab6be2ae7869573a64796ef2846e85e5cdae52db1044fefa796bacf48b968b0da1d4ad486ebb7c1a0acb8f117013e8e4746789c6244a56c9edfbf1ef37ac1309aaf51c9375fc12cacd6897a4479545f2bf390ab7c0c0e5c592f5506e9938378a11b636bf857029b968547aa506c4a0829a15fd3995fead4f860fd7c623c63e8695436eae55816414778347092f5f4d422bb1b5e5a06966241efec14f1e4fca06639114718c30ebcadd4c6d8abe7fe93b25d17173533954188b1ab03fcb7792cb635ce36e9bdbdde7a561c5f66920d910cb269c8c1c3f593265090072c48932e692a9c738c704897489a715c2b394d5a86f7036a4cac5dcb5b85cfa162156e0bc6bfe02fb4c38608cfb23c92b8b6a3cb46e487d60e0dc97aa2e33e3dada925e4e6612cc5af125e5aca45817a2fd6c3ff10b18938b44bd4dd20d7fccf7f26b40a66f48aaffc9a541e6d37138fc55469868e2d10365eff37fac360fab3dc55437ac2d8fea7474405fb3630f7963d2d45958f909d14830286ff152aa752f510ce980bd5754e3fa32c69924dd95d5c152a737a8fadcfd0a4560e0b114f8e8aaa618d438b9877111da1740ef817c441939ecec799ba16b1b171ca9b649b7d78fa052d1497a507688bede4900abc53a9648da5917035ceffe0da21c25c09b06d6185bdda2d778f7ede6153e3eaff495c9796d4d166d2d2ea418e4a4aa6e678faf0696e752a09e02eaade763070e088e9964919ff4aa4c82f8629a3d5c797c2a64594d206835da0bfa43ccd9ddfcdb6aac4d486e03c84122375939a5270bc1519e0707e51c3f46f1e5c566b33a245fa0c202838472363de9f0edde2e791d82293095f750bff545e6c34739dcc54db0a36ae2e2aa39b07cb4f6a9646240d2d31488f67815b29545d220be929e3339f8281a937e05a8c5c3887e06048ea7b18a48f8d91b1e3af5cab5ceda0ebd71bf54edec203d37165e4c9f9f80461cd29fcd99ddea439693941b5d53ff94379cf642571dd559a11f8f383d943f2255cf715800af776b1045bf19a9c9bb095155dfb646b65f4a280f2a97ef927ddabe24a2f971a8170dd42a089276825cb9148c015aae1e9dadf22c10e7548c59bf6b868b20e86c83a9e7343aec2754ee6225f9fdceaf8e51c40e955bda49c35ded38fa8bcc1e6c8fc9c2412e9104c5c2368b1f9923e010fa2ede911d42b139f4007e3426922ffb6158eca97b47cfc997853512bb9d4ca2f017c2c263dc199f3bf1eb4f1508ef828b0e00db21002736a7f22ec91298194583139ad75f58e21b518daa49a4076c6375faa60891a69e52a656699d8034a7ab7fcbe42175491441fe61b1783e837857522215a5fac5590bed2e9d206606096d3be8ee92873bfc30cab15ce9f9910d01a117f89926cc3afa8d104f799ff38098de28b8ff0f038725c2903b24c1429cea4925249d8781\",\n        \"signature\": \"754e60d3f6f4ab4f5d0ddbb001532009166388487f780b76f60bd0bc9fefabfaab6be2ae7869573a64796ef2846e85e5cdae52db1044fefa796bacf48b968b0d\"\n    },\n    {\n        \"secret_key\": \"061bcf1aa6fd989897b322e591ccef5454ef4a5adb1a4800f32611cff2b5bc78\",\n        \"public_key\": \"73c80b734bfc9417d576890c20166da5c7fabd613f75474f7649732e00295be2\",\n        \"message\": \"d63bb9208c1f4c7d43326cf35fa5d83933151804ab891d49b0bdaf429e4c39a321428e0d90aa00318b97e08c7024c912cf388879f3cf974bb253a1e7a4c8eec193bf4c14af6fb9794df0d497850edb04d574c97ed76c702139968401b40eb54394ef4cfaa7e5d3cd943af12192538ddee593c2a24a267afa1371fd77feee2071f4369fbef87976e7ebd81d1e5b31d6e09e02d830357d36bff8596703e4146d0827bec9c0f87b26f31195c96c93b6d8c46767ec1bc6de39f0008a41ff875da050a3f865ab92cbf29c38a280f3bf69f68e92b5f430cdee3501981d0b3d189096e0aeacd64c33102421348812158bb61e51ae936592b2f8f1b910949ef3723258a9b44e4e1bdadf1ae2cfc18e37d2ed0dd1734404b8baa5f393cd56069ecebf7edd7c06cf6c8aa3e8e12fbf946d7b32d8453b6fbb6535526c8fb8fc1d5815560bb31b995df2adbd836add929a56fdd93a1747d93a40c05e129eb6f8583c2921cc9dbdda4225e176db386a02ec40af1032c9b62e95147025f4ac8dd58433b64ac073150c69b9c4154dcbb00344f308113cd9199ccfb5075801c705b8fc43b7c8bc167365e46293d06c4f4835c64ee5d5383f6890ca35a80af917748162df2518ab1468f153629899406cde66ce07fa7d2993dabe0c60089c91892488f3bcaaec408a0cd08c9aa98e0937e02c41ad52d241a99833e3b83f7d3f1b078c31d45c34fa0175abbd0f322b8fd2dc83491da292ad00762e3e577b9eee0aae08729070ac25e33bc94525bc0d2ab59704efec5c0148421a47928d34b1e45ce721ee6447fb082ac400b3e6846d204f7f9db6f0a32b2a69738b3ee9ddbb0dbd7e0f041d7ea53a5d647fb50b39ae24d78c8b07cfc4e052711f0d4639e721d5c36f31b588866712b757108a40cc7abbb9913083303aae05a0f1af0ec6878441a25cf8729aba42a3a94ce9b73888a0f5c9e40c9fc45410f0681fa7f90898562ccb4bbc55f0ab1fe9c70ea66026dda8d7090f7b38edb5aec1557b1166987cd41a7059cdee609b74d8fe06b7059b7724bff53007f7e110462f06ad14d07ee1b4d69ac823bcf576d2fa9e2e8ed7f3198040d471296063137c981adbf364cb20f0a1ad2054472f7cee2527f99809615d2e4b734b06f35deecbd62619663dde81d6e23528b0c97132af0a23bad63d9c08142a26e2743f8618ecfe723b19ffdd0b19abd9a3f4fe210b1e71acdfe38abebe23f7fdef66381cbc75f307e5577235b02e4cd9cfaa15030868ed1453da58f783b7352b04656844c042441efe6a3b4f8fec8f7de80744540c4fc7a107f4e1bfcbd99da25b9746095ddf0125d56da7e7f8603f04d359a088b4c044f936ccb7d8f89ed53cc991a3497ca952094ff3c33046f2609d07b29b633981369cb2f0eecd\",\n        \"signed\": \"5adaa94330a0353712a34dbe973b7518f9a2c713f8aad100251b086ae8de26f6d2b6ccf0528cc5dedca318df19cc7e45deae281e1324b96e32fef45aaf60b10cd63bb9208c1f4c7d43326cf35fa5d83933151804ab891d49b0bdaf429e4c39a321428e0d90aa00318b97e08c7024c912cf388879f3cf974bb253a1e7a4c8eec193bf4c14af6fb9794df0d497850edb04d574c97ed76c702139968401b40eb54394ef4cfaa7e5d3cd943af12192538ddee593c2a24a267afa1371fd77feee2071f4369fbef87976e7ebd81d1e5b31d6e09e02d830357d36bff8596703e4146d0827bec9c0f87b26f31195c96c93b6d8c46767ec1bc6de39f0008a41ff875da050a3f865ab92cbf29c38a280f3bf69f68e92b5f430cdee3501981d0b3d189096e0aeacd64c33102421348812158bb61e51ae936592b2f8f1b910949ef3723258a9b44e4e1bdadf1ae2cfc18e37d2ed0dd1734404b8baa5f393cd56069ecebf7edd7c06cf6c8aa3e8e12fbf946d7b32d8453b6fbb6535526c8fb8fc1d5815560bb31b995df2adbd836add929a56fdd93a1747d93a40c05e129eb6f8583c2921cc9dbdda4225e176db386a02ec40af1032c9b62e95147025f4ac8dd58433b64ac073150c69b9c4154dcbb00344f308113cd9199ccfb5075801c705b8fc43b7c8bc167365e46293d06c4f4835c64ee5d5383f6890ca35a80af917748162df2518ab1468f153629899406cde66ce07fa7d2993dabe0c60089c91892488f3bcaaec408a0cd08c9aa98e0937e02c41ad52d241a99833e3b83f7d3f1b078c31d45c34fa0175abbd0f322b8fd2dc83491da292ad00762e3e577b9eee0aae08729070ac25e33bc94525bc0d2ab59704efec5c0148421a47928d34b1e45ce721ee6447fb082ac400b3e6846d204f7f9db6f0a32b2a69738b3ee9ddbb0dbd7e0f041d7ea53a5d647fb50b39ae24d78c8b07cfc4e052711f0d4639e721d5c36f31b588866712b757108a40cc7abbb9913083303aae05a0f1af0ec6878441a25cf8729aba42a3a94ce9b73888a0f5c9e40c9fc45410f0681fa7f90898562ccb4bbc55f0ab1fe9c70ea66026dda8d7090f7b38edb5aec1557b1166987cd41a7059cdee609b74d8fe06b7059b7724bff53007f7e110462f06ad14d07ee1b4d69ac823bcf576d2fa9e2e8ed7f3198040d471296063137c981adbf364cb20f0a1ad2054472f7cee2527f99809615d2e4b734b06f35deecbd62619663dde81d6e23528b0c97132af0a23bad63d9c08142a26e2743f8618ecfe723b19ffdd0b19abd9a3f4fe210b1e71acdfe38abebe23f7fdef66381cbc75f307e5577235b02e4cd9cfaa15030868ed1453da58f783b7352b04656844c042441efe6a3b4f8fec8f7de80744540c4fc7a107f4e1bfcbd99da25b9746095ddf0125d56da7e7f8603f04d359a088b4c044f936ccb7d8f89ed53cc991a3497ca952094ff3c33046f2609d07b29b633981369cb2f0eecd\",\n        \"signature\": \"5adaa94330a0353712a34dbe973b7518f9a2c713f8aad100251b086ae8de26f6d2b6ccf0528cc5dedca318df19cc7e45deae281e1324b96e32fef45aaf60b10c\"\n    },\n    {\n        \"secret_key\": \"2e19cd442f22a4a99dffc55e7bf625f89d1344b563f6785313a7eee973b4aa36\",\n        \"public_key\": \"ee3da76a8fcf403a2958d4551da0a72b2e738522b2e6b20fba6aa26b32307357\",\n        \"message\": \"1bfc5c6aa6a5354fbb861469796348ac6319124da3f10d20d50bbdc7159d41b5abb136c7996a773797122b525e8e2dca1954f6391707301d90f2101b46c7b086efa15877cadcd05812db34b996cb4f531abcd1e98db08a5cf1368e8f4b1109142e9562bd0085ffae5e660f59c930793ebdb6e80b0a2f4f3f59bf9d395c48d26e0a72a60f9d1ff87fd2d7a3f5383aa902adededebc6cd1befd038336162749d91a957ca2e3dd47091c5593113da87c3d66a02c80a6eddb535c48ca1f34a97fd1c95ebc2e570fc8fafe6e5d6546d1f3a9ba8daac334cf47bf117e1280d0ebdf14b0fcdbb43b8d248cc6b61320fdb0449ed5f5de8bab121af0d8554956e6a12016b42677b44367892c3b20afcc2cb9cfb5b100a95b51e8b07da9f51415f4cd7781a313765e20db27f2343e0f719ecea9af026956f3387e9ea7ed0a293759b4a262202807b41309fb80f50185db6a5f8bdca178841bec06addc7610df76017b514bc4142f26a36bf5bacecb012fa41710dd849bef7a7e451432836fe9b3265fd5b59ee40b04dad85cf48f891465a842cd4500a1024eefdf0f554f0ca17ec9f7b715256a9b9dbe27966386d8ac37d3c515896de0f7cdf7cf5b320ff7a8ef6b34ba820aba9066dd253c5b7763777f94b2d6ad8c710221e1137535dff8a1b7565ec81bd8ddeb502e3d58ff8f1fe6e86b8dc15a3aaec688bbbecd4688281db0f818de0f7261ba9cc58c8bc0d02e06632efe7287ad7a84331a824d9287344efaaa74f1fc576d0269430f856a8565265b9d6ef71fe134d2510ab06b60bf3c153b57ecfd2e6342403fe678b5886b6b734b7d3690662b6c8c6f6e250e5af6a8183166ddcd0a17f0cddc8636ef1a68498be50b6599539d46b4cea97130e08f94ca53e884644eda75d23cd2c038a5f17b591e21369378cd3fb5762d1a7c3e66a11ae6e91cbae616ad055e39dc41e154f4fced7b2696d9dc67380bb8eef474e9aa83cec47fafafb941d626564b2075bcc0856da8d6e1b0b8f18baf7513bbd14e491ed517968c4f7241af25098ee8df130b7a34d59736d7836d323fe3f43f508cdcb755895f59a00c804ed164cc33992f3aee962ae9e990b74272eb987b12d90b27314d57400e737d1343e970985c4271060876abcd7049e7c9fe244ff3ef98560995b7482d31bc7c09d9969f7cd41f4e4e252750dc16ccdb29b985314a0b6e749c95f9bd2838d5ac49ee031fd079bec3028dd9dd07db6fa622ad621b3b1e127e8fca37bd146e3cf703e911701b7a16c2d30369c94648ecc03df10d7dd5c0558fa9593425d948727d6860c3a14f811245106616d2a5fa981c6b7f47ec9def65412d132acc6919da4e88597aa9190ca614b218066a0f7b16997ee747c5a09785e50d0a891d95937863d613ceff7\",\n        \"signed\": \"28326b5b978e0dbdab5dde703785a667a7ef439d81ea47e066b089d116c25a34bb633f260d55f45bdf6bcda74803d7624b1927cec18eb1992260beefc399d90e1bfc5c6aa6a5354fbb861469796348ac6319124da3f10d20d50bbdc7159d41b5abb136c7996a773797122b525e8e2dca1954f6391707301d90f2101b46c7b086efa15877cadcd05812db34b996cb4f531abcd1e98db08a5cf1368e8f4b1109142e9562bd0085ffae5e660f59c930793ebdb6e80b0a2f4f3f59bf9d395c48d26e0a72a60f9d1ff87fd2d7a3f5383aa902adededebc6cd1befd038336162749d91a957ca2e3dd47091c5593113da87c3d66a02c80a6eddb535c48ca1f34a97fd1c95ebc2e570fc8fafe6e5d6546d1f3a9ba8daac334cf47bf117e1280d0ebdf14b0fcdbb43b8d248cc6b61320fdb0449ed5f5de8bab121af0d8554956e6a12016b42677b44367892c3b20afcc2cb9cfb5b100a95b51e8b07da9f51415f4cd7781a313765e20db27f2343e0f719ecea9af026956f3387e9ea7ed0a293759b4a262202807b41309fb80f50185db6a5f8bdca178841bec06addc7610df76017b514bc4142f26a36bf5bacecb012fa41710dd849bef7a7e451432836fe9b3265fd5b59ee40b04dad85cf48f891465a842cd4500a1024eefdf0f554f0ca17ec9f7b715256a9b9dbe27966386d8ac37d3c515896de0f7cdf7cf5b320ff7a8ef6b34ba820aba9066dd253c5b7763777f94b2d6ad8c710221e1137535dff8a1b7565ec81bd8ddeb502e3d58ff8f1fe6e86b8dc15a3aaec688bbbecd4688281db0f818de0f7261ba9cc58c8bc0d02e06632efe7287ad7a84331a824d9287344efaaa74f1fc576d0269430f856a8565265b9d6ef71fe134d2510ab06b60bf3c153b57ecfd2e6342403fe678b5886b6b734b7d3690662b6c8c6f6e250e5af6a8183166ddcd0a17f0cddc8636ef1a68498be50b6599539d46b4cea97130e08f94ca53e884644eda75d23cd2c038a5f17b591e21369378cd3fb5762d1a7c3e66a11ae6e91cbae616ad055e39dc41e154f4fced7b2696d9dc67380bb8eef474e9aa83cec47fafafb941d626564b2075bcc0856da8d6e1b0b8f18baf7513bbd14e491ed517968c4f7241af25098ee8df130b7a34d59736d7836d323fe3f43f508cdcb755895f59a00c804ed164cc33992f3aee962ae9e990b74272eb987b12d90b27314d57400e737d1343e970985c4271060876abcd7049e7c9fe244ff3ef98560995b7482d31bc7c09d9969f7cd41f4e4e252750dc16ccdb29b985314a0b6e749c95f9bd2838d5ac49ee031fd079bec3028dd9dd07db6fa622ad621b3b1e127e8fca37bd146e3cf703e911701b7a16c2d30369c94648ecc03df10d7dd5c0558fa9593425d948727d6860c3a14f811245106616d2a5fa981c6b7f47ec9def65412d132acc6919da4e88597aa9190ca614b218066a0f7b16997ee747c5a09785e50d0a891d95937863d613ceff7\",\n        \"signature\": \"28326b5b978e0dbdab5dde703785a667a7ef439d81ea47e066b089d116c25a34bb633f260d55f45bdf6bcda74803d7624b1927cec18eb1992260beefc399d90e\"\n    },\n    {\n        \"secret_key\": \"82109099d1eafeed5a85206046491b34d06dcde33f080960287b10fb23ff9f78\",\n        \"public_key\": \"081cfdf2d758654c41c447e1e6273810f8a738a733afc42294a2b1bbb769efce\",\n        \"message\": \"84f47dd794977a6c1505ac8c05680c5615a2d5b057e39b04f85e3f9ff04960e0e016685a86eebcecf6fbce5fddcdac1a474c8a0d502c40e10f948646fdac6c81f1ffbb177a2a4963b67825903cde65b5dbe0d8941d546cffa2bf8a8ca8d6c6408530a6290f5d0882f1a1672dbf978e10c5c8af5e0a6239f0655ee7fd9e66963077a0e847137397d1f06999dc6f8a945c6003ea4ea7fd58378acb44ed5780eaa367796beea37ddc236999d012d6a716d7915649cc28e58875647e9f5ac0553c0f544df56469c67081d5e30395f3e960e6a52f0833192c548cd57c926b82db48c361bde70333a370083eaaa068dc2ae452d21ef1331aed190bd3e1289a104cf667834377cf7b5a29774807c3f1ea9e7b28831d0f6c4294785867b137b65028c14f932a1ba8e6f9f59624fe0c396843ea19e46fba09142cf9d42497312f360244032f1e00f38dd0de29f963b5ccc1ef12b2cc6204b994af1f3baf196d9e21e8fa4f097320c64404d0b7d5ab38560ca0655364b0b09cd6dc0f0e05b8c9110364f1424a9672b7efdf7e1f378e234550566dbe13b01578b04153e9c37b553e32a4441bc97e2953bec2e41455510f9802ef948dcbf13faddd722ede573627b258d55e83c0895b22919e4be5ce8d819ce6ad843b2dd09df64004c826c1dde7ce6480a271a858a1db169e1494d4469032bcc1ccd89653198b7c073f76a26a2999b5648cbadc1574c78ead8eece83b91e129c437f9eeec04c807459002e66dcca9bfc2caed9e6c0ba23d2355def75665749430ee92c532a695479fec929174f440ecb61a5ae8b2b7e958920558268978f7fb4da1b38b12014f5d61b0fdd7f6136ba4281b41a3a3cd188052b698765b6f05e41e78373ea830469787a37510993d12f93e96c72d72f4461984f691a41c7d3397ddd5a1b39237d1308864d415fc6c22b63f376cedde37f5252b51ec72e5155f3bdb4fcd5412498bd2e0c1f9850b3a85d1dfd25167a3cd771e8e4c9d868c95a7175e3775f6cef17e4e36497ce9e45532bd7f44b2776e40f91a07ca4fa1b95dbe81cf8f49e46b6c82a6ee4347918a7643b0d9a38857212c693eadacfd37a5f1d91558f5454dcdd05935f290e62d7e65006cd549f6553ce741df44d39644001eb479ca69568ad1f23bba099a41a47294db938731c530af1ceb9217d29bc2705613c1a1fe9c208d0b01ba6f4d9b4c7ba8f021df91ea2d578ce083123e83ba4b9c50407f6666fbe61158b0d1b9577772e3eaff8fb429d0f6d2e384126130f21b449fb1dc170db45af505bd3182678a9b5f9fdff65f0413b672c4786340fcf2522ea7f3d8ade8a059529649dbda9ce51ff05a2a2a3d66d2166bf2c9c6772ba0ef4105e68c055e0213d42c1ee123b3c1217843e6ec575d754df3c90a75\",\n        \"signed\": \"b3987f324bc7e776c0f287fa13ad28741695e2e7bce8d143e29fad5d00994758e225fb802100d23fd6ccafee8e0a95bc479be8c23a11319745765b7cd47e700684f47dd794977a6c1505ac8c05680c5615a2d5b057e39b04f85e3f9ff04960e0e016685a86eebcecf6fbce5fddcdac1a474c8a0d502c40e10f948646fdac6c81f1ffbb177a2a4963b67825903cde65b5dbe0d8941d546cffa2bf8a8ca8d6c6408530a6290f5d0882f1a1672dbf978e10c5c8af5e0a6239f0655ee7fd9e66963077a0e847137397d1f06999dc6f8a945c6003ea4ea7fd58378acb44ed5780eaa367796beea37ddc236999d012d6a716d7915649cc28e58875647e9f5ac0553c0f544df56469c67081d5e30395f3e960e6a52f0833192c548cd57c926b82db48c361bde70333a370083eaaa068dc2ae452d21ef1331aed190bd3e1289a104cf667834377cf7b5a29774807c3f1ea9e7b28831d0f6c4294785867b137b65028c14f932a1ba8e6f9f59624fe0c396843ea19e46fba09142cf9d42497312f360244032f1e00f38dd0de29f963b5ccc1ef12b2cc6204b994af1f3baf196d9e21e8fa4f097320c64404d0b7d5ab38560ca0655364b0b09cd6dc0f0e05b8c9110364f1424a9672b7efdf7e1f378e234550566dbe13b01578b04153e9c37b553e32a4441bc97e2953bec2e41455510f9802ef948dcbf13faddd722ede573627b258d55e83c0895b22919e4be5ce8d819ce6ad843b2dd09df64004c826c1dde7ce6480a271a858a1db169e1494d4469032bcc1ccd89653198b7c073f76a26a2999b5648cbadc1574c78ead8eece83b91e129c437f9eeec04c807459002e66dcca9bfc2caed9e6c0ba23d2355def75665749430ee92c532a695479fec929174f440ecb61a5ae8b2b7e958920558268978f7fb4da1b38b12014f5d61b0fdd7f6136ba4281b41a3a3cd188052b698765b6f05e41e78373ea830469787a37510993d12f93e96c72d72f4461984f691a41c7d3397ddd5a1b39237d1308864d415fc6c22b63f376cedde37f5252b51ec72e5155f3bdb4fcd5412498bd2e0c1f9850b3a85d1dfd25167a3cd771e8e4c9d868c95a7175e3775f6cef17e4e36497ce9e45532bd7f44b2776e40f91a07ca4fa1b95dbe81cf8f49e46b6c82a6ee4347918a7643b0d9a38857212c693eadacfd37a5f1d91558f5454dcdd05935f290e62d7e65006cd549f6553ce741df44d39644001eb479ca69568ad1f23bba099a41a47294db938731c530af1ceb9217d29bc2705613c1a1fe9c208d0b01ba6f4d9b4c7ba8f021df91ea2d578ce083123e83ba4b9c50407f6666fbe61158b0d1b9577772e3eaff8fb429d0f6d2e384126130f21b449fb1dc170db45af505bd3182678a9b5f9fdff65f0413b672c4786340fcf2522ea7f3d8ade8a059529649dbda9ce51ff05a2a2a3d66d2166bf2c9c6772ba0ef4105e68c055e0213d42c1ee123b3c1217843e6ec575d754df3c90a75\",\n        \"signature\": \"b3987f324bc7e776c0f287fa13ad28741695e2e7bce8d143e29fad5d00994758e225fb802100d23fd6ccafee8e0a95bc479be8c23a11319745765b7cd47e7006\"\n    },\n    {\n        \"secret_key\": \"65fcbd626d002111334baad4e6a8006e47a1f91397bee6dd6cd7da5a0e0248a4\",\n        \"public_key\": \"20409a146b42c96beab0b42ea7f2c25193119d0df44dc2bf14d11a32fd733615\",\n        \"message\": \"e4c0947fc8ca78fa8863f4d044499d036e2e7ef8c17e838f2fac02675b7b5381e5f9abceafd0d8886a929d9d9b49fcb73861b29d1518ac5f83f7f8fc26bd1cebc22d873a9a08231406fb032e4866e5f55c7c0441c519041bb2cc73f9226dd5d07eceb660d6c967db23365574bee8fc10222928767713571a71c93a85278d42299a70599ca99326cc86f6d98daac000fdfa710562f481faa020c72a76e2067d154c235a7a4f29708cc544533bd799ed6363eb3b56aa4a6d0e379bbf07600595c23ab1f3f9f1708e0070261bbbf4bfeaf6d6ced4d7ff722c9cc52d9133ea68d495dc9489c3edf6830231351f65cb5272f5396e2c4a1a5c88661a101892249e23d6ce9fdb6a9abf74272c2f59c3d8fd8743cce461126ca0a8b832b4b218336b1ae14da677ba7f1b2cc5ca3c7158f727a9e1b8fdd9edf5c2187fcb83db862ad0c6b39216de3116919556465100ade0a42bd6ba10d95418b69a3e005e9f104589ea5948b2b51bc7b1a9a0749da8f013781bc05c805bb51e187761ac24c76414f668eb45fb0a5024dfe5a5ca06f0403a02e3b2fef7a2c4bcfb1d075d310d5197e659cd14023faec20e045cabcb86b221a1d4827113ff3267a64debe9939004cabac85e5c7461e7e82a975acfae0b6c516a1c605374cfea7d819044efd6d74654424fd5c90ff2574fcd8e007740d975861d0df5259fe43e43639e36e52895439ba2c27c1e889c93094104fe914921bd6f25d3985ab1f22ca557b0e49afc7375243c521c6d5fafe0381ccea828e88e647fd90976b3fbec19fe9adb113c6404bd352bfc000446d21005b5f950ae07e51c768ca3ff6177b2eac50f10dd2e64610fa8ab5788faeee29d129009d7fe46aa3da6b9d86c73065eb5161fbdbdfac5777c4e75452e6e16ae9fd66bb7d9aaa426bcb7a6915f0ff44a1f8ec71394e9352fdf20e02fafe1e0cefe50744c3194956f928f82533755373838dcc1296a891adf641c7382d69b4f5a43d4af7772a4a1ee879292d7a4f32ac35ee121c6c34ca5f98487a941fcb1e65b44d4456127eedb2fcc1c3f48eff9300981e52ac38b496ab8bbce144a85eb9c07638b31fdaa781744bce17e8d93dcdc60afeda488807617f88d6aa54422fd347ddaddeff37a563dbf19974b2a23be300fbfa6c7fc41f84c6905415269f195990b5b4de12668c71c87b504f41124bf94436f333045631518152c5162a2475c40efb6cbdaaf9af428fed325b3a7d94c17520fd89e00ddf08b22adf661f0acd723b3969dc6434ea6f92ef58e8dfae5b0cc2885ba987ea1d16c39b34ef65023009d6345e48e3691a41f02a77b7fe133ea9de7565f157a2078ae988bbb266d22d5fa91a7b263e98ad2dc0731fe5a29025a0cb436864a5a60db257f1e76b5c608f25cdecc87eae6\",\n        \"signed\": \"bc78e16ba674e0a7dba57a19094f9733c55d74b9d15f8a44d1bbc0a023f70155de2977111a417eefa8cb30ec12abc8384228167c70982a8206b1ffb72174af01e4c0947fc8ca78fa8863f4d044499d036e2e7ef8c17e838f2fac02675b7b5381e5f9abceafd0d8886a929d9d9b49fcb73861b29d1518ac5f83f7f8fc26bd1cebc22d873a9a08231406fb032e4866e5f55c7c0441c519041bb2cc73f9226dd5d07eceb660d6c967db23365574bee8fc10222928767713571a71c93a85278d42299a70599ca99326cc86f6d98daac000fdfa710562f481faa020c72a76e2067d154c235a7a4f29708cc544533bd799ed6363eb3b56aa4a6d0e379bbf07600595c23ab1f3f9f1708e0070261bbbf4bfeaf6d6ced4d7ff722c9cc52d9133ea68d495dc9489c3edf6830231351f65cb5272f5396e2c4a1a5c88661a101892249e23d6ce9fdb6a9abf74272c2f59c3d8fd8743cce461126ca0a8b832b4b218336b1ae14da677ba7f1b2cc5ca3c7158f727a9e1b8fdd9edf5c2187fcb83db862ad0c6b39216de3116919556465100ade0a42bd6ba10d95418b69a3e005e9f104589ea5948b2b51bc7b1a9a0749da8f013781bc05c805bb51e187761ac24c76414f668eb45fb0a5024dfe5a5ca06f0403a02e3b2fef7a2c4bcfb1d075d310d5197e659cd14023faec20e045cabcb86b221a1d4827113ff3267a64debe9939004cabac85e5c7461e7e82a975acfae0b6c516a1c605374cfea7d819044efd6d74654424fd5c90ff2574fcd8e007740d975861d0df5259fe43e43639e36e52895439ba2c27c1e889c93094104fe914921bd6f25d3985ab1f22ca557b0e49afc7375243c521c6d5fafe0381ccea828e88e647fd90976b3fbec19fe9adb113c6404bd352bfc000446d21005b5f950ae07e51c768ca3ff6177b2eac50f10dd2e64610fa8ab5788faeee29d129009d7fe46aa3da6b9d86c73065eb5161fbdbdfac5777c4e75452e6e16ae9fd66bb7d9aaa426bcb7a6915f0ff44a1f8ec71394e9352fdf20e02fafe1e0cefe50744c3194956f928f82533755373838dcc1296a891adf641c7382d69b4f5a43d4af7772a4a1ee879292d7a4f32ac35ee121c6c34ca5f98487a941fcb1e65b44d4456127eedb2fcc1c3f48eff9300981e52ac38b496ab8bbce144a85eb9c07638b31fdaa781744bce17e8d93dcdc60afeda488807617f88d6aa54422fd347ddaddeff37a563dbf19974b2a23be300fbfa6c7fc41f84c6905415269f195990b5b4de12668c71c87b504f41124bf94436f333045631518152c5162a2475c40efb6cbdaaf9af428fed325b3a7d94c17520fd89e00ddf08b22adf661f0acd723b3969dc6434ea6f92ef58e8dfae5b0cc2885ba987ea1d16c39b34ef65023009d6345e48e3691a41f02a77b7fe133ea9de7565f157a2078ae988bbb266d22d5fa91a7b263e98ad2dc0731fe5a29025a0cb436864a5a60db257f1e76b5c608f25cdecc87eae6\",\n        \"signature\": \"bc78e16ba674e0a7dba57a19094f9733c55d74b9d15f8a44d1bbc0a023f70155de2977111a417eefa8cb30ec12abc8384228167c70982a8206b1ffb72174af01\"\n    },\n    {\n        \"secret_key\": \"b500768a2823915c4a6848d35f6487d43bd766d2ce0945f8a3ccdb8d82a3892b\",\n        \"public_key\": \"b8cea215a0124eed27005725d897781ea064dcefb21422c8bd2402c56a10571c\",\n        \"message\": \"0a9fda8b8cfca7a5b05d78116fcee19ab803c1c6010ce11daa8e93a66d12c12e474eb91c2640d97a813d9a830d268868eb2e3770425f10c75840468e669dc7f61d3be2de88ae0e542bc809679113957a14da4eaff549bfde637d7cafdc6aa83994837397f86e4fde86d402fa9aef7f65549a214373e560e6d7a1c2769e0c7d5a0171e7cc00dff36e0429798b53aa621624bda74d6df0bffffbd8fd7bef1a64f36c000782f6ed031af5c2a74a18963598c9ba062392de9602036794b7b5e68c25c93fe7cfad47a7c5b979d476cd513a12bf0307cb1631740042a9fbf3eb0be5170620dafd5f16ed89342c2625d783e74ee0d784bf051943740c88b0bef7bc85e1a6a4a517d492fb737e776699590c93224cd4d9245d4e9371a367c0712f87490f9247c49add9313f277a4d9f26b75aae4ded6a3def85f83fc995910405548af670ed8aaa30524ab829ccb56a5005b58bce868c9e8074f07dd7f3818f299e4e086bed9eab902cf11b398d531b8632e7d523a8f877695f46ccf9ce24e62cab2c7cd0aaee17db52676a4b5058e9c1d7c47bffcb641b0ea2b0944f39a75665a7ef29b7f02a878db823883bdacfb0fbe5dfe5a9bed9fdac7e4142e3eb50d5e840bd0ac0becf4fa97e1fc4827c397a52465d916889954b3701b0fac61159b23092f4685f4788bad35d00da2679ecc54921f1a8647101657ab49477420567aed67c8605930444b5d07927c17eff1f8570cf2af29e719f85ca7849b895549f13dfeca68bbef71e3ce8b6cedd2ff68d32b02caf5951a0b3e6b0bae6a96c02058191f305e090711c46daddcd5aeee769c3a105e9a827bbd195d329231c26238479a9bb0071afb160ef955e874d7a420c56785f44ae0a18c52d8280c5998cf3888feaf89898134bc8d411fc9f6c5768ea7a249729413739e532b643937152cdfb8d2ff87fd48084dd8aeebeaf0f7b10d87b6e4423228c9fc8dc5e3852aa8b8acc545d18f25c55d73da1bb82e3eb376f9ef05b274d7ecb1845d65ca0cd2629f038a2d664d7a69781c84e98de2c209c46efc51162172856649469e673308dcc145eaf783f5cb5b4be7d9fd58ee0974c981a38fea8e31267abfa410e69e46482f5134f3da1ffe381bd69d8d0b78ea909b4af9396dcaff89960a049eda6946616fc27ccf9a9e5ba1a0135764f37719da4d28078185d04d72419c2c70f290d97e1f82b879f71b9e19d504d364cd3ba22cf905250fd37d58e5fe40209f6072a06d8b5ba70196230577877ec46153167a7c7aea270fa1098aba9e3a74acb36a11b09bd07a3b88ea654e268365625b589b2206c710d960f42ea419b7e4e3da4759fcbca50e4bf4cc55cf88f70b3180c805a7045086afa04c6be23223ecae5f82c146d54311d1807c2e4a53f9e0a4482b4e1e\",\n        \"signed\": \"e3db47a11e10e788925d14b1e28b54c9fcf9b6acc1df8c14f683a5672fd504dd4a475a3393b3ef8bceac2361dbba3530af25c246c3ec4c05899b517f6cd34f0a0a9fda8b8cfca7a5b05d78116fcee19ab803c1c6010ce11daa8e93a66d12c12e474eb91c2640d97a813d9a830d268868eb2e3770425f10c75840468e669dc7f61d3be2de88ae0e542bc809679113957a14da4eaff549bfde637d7cafdc6aa83994837397f86e4fde86d402fa9aef7f65549a214373e560e6d7a1c2769e0c7d5a0171e7cc00dff36e0429798b53aa621624bda74d6df0bffffbd8fd7bef1a64f36c000782f6ed031af5c2a74a18963598c9ba062392de9602036794b7b5e68c25c93fe7cfad47a7c5b979d476cd513a12bf0307cb1631740042a9fbf3eb0be5170620dafd5f16ed89342c2625d783e74ee0d784bf051943740c88b0bef7bc85e1a6a4a517d492fb737e776699590c93224cd4d9245d4e9371a367c0712f87490f9247c49add9313f277a4d9f26b75aae4ded6a3def85f83fc995910405548af670ed8aaa30524ab829ccb56a5005b58bce868c9e8074f07dd7f3818f299e4e086bed9eab902cf11b398d531b8632e7d523a8f877695f46ccf9ce24e62cab2c7cd0aaee17db52676a4b5058e9c1d7c47bffcb641b0ea2b0944f39a75665a7ef29b7f02a878db823883bdacfb0fbe5dfe5a9bed9fdac7e4142e3eb50d5e840bd0ac0becf4fa97e1fc4827c397a52465d916889954b3701b0fac61159b23092f4685f4788bad35d00da2679ecc54921f1a8647101657ab49477420567aed67c8605930444b5d07927c17eff1f8570cf2af29e719f85ca7849b895549f13dfeca68bbef71e3ce8b6cedd2ff68d32b02caf5951a0b3e6b0bae6a96c02058191f305e090711c46daddcd5aeee769c3a105e9a827bbd195d329231c26238479a9bb0071afb160ef955e874d7a420c56785f44ae0a18c52d8280c5998cf3888feaf89898134bc8d411fc9f6c5768ea7a249729413739e532b643937152cdfb8d2ff87fd48084dd8aeebeaf0f7b10d87b6e4423228c9fc8dc5e3852aa8b8acc545d18f25c55d73da1bb82e3eb376f9ef05b274d7ecb1845d65ca0cd2629f038a2d664d7a69781c84e98de2c209c46efc51162172856649469e673308dcc145eaf783f5cb5b4be7d9fd58ee0974c981a38fea8e31267abfa410e69e46482f5134f3da1ffe381bd69d8d0b78ea909b4af9396dcaff89960a049eda6946616fc27ccf9a9e5ba1a0135764f37719da4d28078185d04d72419c2c70f290d97e1f82b879f71b9e19d504d364cd3ba22cf905250fd37d58e5fe40209f6072a06d8b5ba70196230577877ec46153167a7c7aea270fa1098aba9e3a74acb36a11b09bd07a3b88ea654e268365625b589b2206c710d960f42ea419b7e4e3da4759fcbca50e4bf4cc55cf88f70b3180c805a7045086afa04c6be23223ecae5f82c146d54311d1807c2e4a53f9e0a4482b4e1e\",\n        \"signature\": \"e3db47a11e10e788925d14b1e28b54c9fcf9b6acc1df8c14f683a5672fd504dd4a475a3393b3ef8bceac2361dbba3530af25c246c3ec4c05899b517f6cd34f0a\"\n    },\n    {\n        \"secret_key\": \"9eb5c9ef13535f808109f4a43cfad5684f80daf02eed5410ac0b0a09a6082d69\",\n        \"public_key\": \"367eea1ecb4e5eecdf7e471b90bb34f9b7982c8cd66d42555c240b41cd8739db\",\n        \"message\": \"2d7cb05e61dbae26258e3861c639ef0e1d17fc711a00f335ba3c027137e00708d708c1ff457ff2c65112f7dcd7d02f24d56f072158ea1c71832550a58366fd9197296bbe61aa4d00de18a453ef9174fa81968305c41c3455f42d447a9234f06e13bf8bcaa1babb11695fafdc08f7a584b2ea1f61e9389260ce7335a07de72c8911a58a313f1088dcdf5c8d4c456cba2dcb4f2d156b4943b95bd493ea4fe1a82d4e3ea02aa02972400b5ee17842832d59979fc179f843c44b03eb3c302416d0cdaf11c4ca8a66ccbb6997395edf6fca2ea004cf3486971004a42042af8ece005b94461d86dcde212a2eb1be3b914c783e48ac1ad46cacd73e1eb448368322d2678efcb2abff52093db0f259dce5c1e19a512820f235d6aeaf0e1a723c2c650cff1ee3b6b4f4cc989c0b7d6de3cd7e6daa39bb690710df00a7194c17201f0e81be64b6739e1c1e8176b7e12a353427c067c19314db642e5c76266b640eb1cc0c73f84fc0227e5a96060d814071cde2fed944767b7466f9001dfc223685429bc4e5e48f5c13a63a4e0d826133ad920d11772145ad6e13c93897398a8a401f93dbd103005c7dae44387f3e80b793607d05d2d8bc0d0351a3a452b8ce759c1ad48df7b9ba9e4a17df61fdabb9b577b5cec3e9461fbb5e128155a3c9c89f8f6bebb7322a16678e8ecb98953d958310db1b063448c349f36e168fac484cb3c0d4cb2c251bd92ef8e9262b44093d7e650a7d3bed3791fa88100fee6ef0d5e23d1e9a8099cc0335202a4f106c24777e98f81d26efba15c9ad1541e0adbf1d1d76076b0dfd7b7d6c8b82f9c093468cd196672dc5478e91ce701cdd7b68b353c97111f0429760635762f8683ae970564bceba9120517642e8b3a2baaa85c25b54a943766184904c72d929634ec5f0c28473415f12538906c678fca4e682db4879758492537e7850b9bfef3eb9053b43920d810e55be966aec68c9dd3b62ccf57e8178cb5ef6d16d172a56dd924f00f2d3b5e93aaa92b29fb8336d73e29e59d1c47ea6230cda1d5b03bba5dfdb331feb19443f123d2a03ff4f10eca166c2998588f1e584ed194dd6f73c8aca846631904d9fe4a98b367823e46edba2885129879e9277e150f029b8fa7bd11eab9ce1336777c80b56b3a1f0811adbca0f5b4025a5503c8196661aee90006e9c85bbfa4c5a0e902885c8ce51212ee67f0fe0b6afbc8bad453727543b3c68b890ddaba269d25fc1643f54835136a1a25ba18d916cedd6a47fc07adf6fc69fa508949dc10d9dc5e0261b52f3657170384eccd9c80541354b1ce0f6fb5ed3e8d54af0b5bf0a92835125c7d9bc4f092ff380e5e896fbf302552b14d5b61a224d86e301c7a66a66e4e4329aac0a66b156772374dc1c7168d5b561652f8f4387e4f289b6366a\",\n        \"signed\": \"429ce1fe846d250849eca7d456f8c59f8675b1f4c13f2be41688dfb8ca2a3b24ae29d5b6bf471157bcb6e2ec9d4a26b038e6ec28584cc23f2a03556dbb37e9002d7cb05e61dbae26258e3861c639ef0e1d17fc711a00f335ba3c027137e00708d708c1ff457ff2c65112f7dcd7d02f24d56f072158ea1c71832550a58366fd9197296bbe61aa4d00de18a453ef9174fa81968305c41c3455f42d447a9234f06e13bf8bcaa1babb11695fafdc08f7a584b2ea1f61e9389260ce7335a07de72c8911a58a313f1088dcdf5c8d4c456cba2dcb4f2d156b4943b95bd493ea4fe1a82d4e3ea02aa02972400b5ee17842832d59979fc179f843c44b03eb3c302416d0cdaf11c4ca8a66ccbb6997395edf6fca2ea004cf3486971004a42042af8ece005b94461d86dcde212a2eb1be3b914c783e48ac1ad46cacd73e1eb448368322d2678efcb2abff52093db0f259dce5c1e19a512820f235d6aeaf0e1a723c2c650cff1ee3b6b4f4cc989c0b7d6de3cd7e6daa39bb690710df00a7194c17201f0e81be64b6739e1c1e8176b7e12a353427c067c19314db642e5c76266b640eb1cc0c73f84fc0227e5a96060d814071cde2fed944767b7466f9001dfc223685429bc4e5e48f5c13a63a4e0d826133ad920d11772145ad6e13c93897398a8a401f93dbd103005c7dae44387f3e80b793607d05d2d8bc0d0351a3a452b8ce759c1ad48df7b9ba9e4a17df61fdabb9b577b5cec3e9461fbb5e128155a3c9c89f8f6bebb7322a16678e8ecb98953d958310db1b063448c349f36e168fac484cb3c0d4cb2c251bd92ef8e9262b44093d7e650a7d3bed3791fa88100fee6ef0d5e23d1e9a8099cc0335202a4f106c24777e98f81d26efba15c9ad1541e0adbf1d1d76076b0dfd7b7d6c8b82f9c093468cd196672dc5478e91ce701cdd7b68b353c97111f0429760635762f8683ae970564bceba9120517642e8b3a2baaa85c25b54a943766184904c72d929634ec5f0c28473415f12538906c678fca4e682db4879758492537e7850b9bfef3eb9053b43920d810e55be966aec68c9dd3b62ccf57e8178cb5ef6d16d172a56dd924f00f2d3b5e93aaa92b29fb8336d73e29e59d1c47ea6230cda1d5b03bba5dfdb331feb19443f123d2a03ff4f10eca166c2998588f1e584ed194dd6f73c8aca846631904d9fe4a98b367823e46edba2885129879e9277e150f029b8fa7bd11eab9ce1336777c80b56b3a1f0811adbca0f5b4025a5503c8196661aee90006e9c85bbfa4c5a0e902885c8ce51212ee67f0fe0b6afbc8bad453727543b3c68b890ddaba269d25fc1643f54835136a1a25ba18d916cedd6a47fc07adf6fc69fa508949dc10d9dc5e0261b52f3657170384eccd9c80541354b1ce0f6fb5ed3e8d54af0b5bf0a92835125c7d9bc4f092ff380e5e896fbf302552b14d5b61a224d86e301c7a66a66e4e4329aac0a66b156772374dc1c7168d5b561652f8f4387e4f289b6366a\",\n        \"signature\": \"429ce1fe846d250849eca7d456f8c59f8675b1f4c13f2be41688dfb8ca2a3b24ae29d5b6bf471157bcb6e2ec9d4a26b038e6ec28584cc23f2a03556dbb37e900\"\n    },\n    {\n        \"secret_key\": \"ef0948e13281f3cf352cbfaf8d89d117768552d5a1548ecbaf37412e97670fac\",\n        \"public_key\": \"58c2457f5a5e3cfbf47119a87f2aff1918f1e67ae6fa9171d3f41eee07a86872\",\n        \"message\": \"7ec47f2f1fe3b70a6d1d82c7cd924b4bf9b2029fc12c52a6e1cc06cf5abfc0a442e7cf145c1542b9b135049665711035e3c29a91d4fdaed6127057a812c22cd75ad1879be1d2c6110e79e987524e4e8f27f16eda90cbd4733f111825b516d1067f81eca5e6948576d5bfedb3277c1abc1e60f374d0701b32ccfd6a5e9c8d1659aaf3d0818613613b7e288d845e9aaaba2e3e9b411d501dffe856fd313e9fcc9e7430b9983f20ab4ebf4eb616bd63e2c57743658995ed0a149ae620a395613719b3ed7ced4588d5915d70a2f0c687680ec34fe3e9f72392e189e13a4749d5ca9fac651b92c084c4066fdf98a869223e4e0c9bec5812b5c1900e6e60d3a188d48a74dfd415b5cad2e91ff76df75089d20a755f260756c8f1382a29f7b93726e731071cd477458c6f2022dfad7d4fc7ab2380541864f6b58774f9ae8e5f077c1a8da073c39853eb2fd477220b45a3d92263dc7e14d3bb2b36fca466c7ef8a247538725f2fce5c7221bc751cde1394604f5931d733360ccd47ce087712958180ad84fae713b543f05eef6abc0661433121ed3b4506a1465025316fb8f9d64535cc4538acd4064dd576b0740e1beb13bceaf155543dc89097ca5ca1cffa0ad65a10bcb759354eab8a42de734af909c2feba380d66409f325d5f17af9ca7f8cb4134fd6a2b6a528d9e60d9612b8e8b4062f8e0fad1e7eeb9cbfef6e9738ec7973e1cb2ba2327deca4ea46568f31e12f730e247c1d07029fd4422b298ff2398023b4120a3a425ffb652880c19ea69f3639e0f6df4f00876cc4528e267e81d5943199d0feb6cb4e1baf404bb6f8b39b12dbce9fdc35dc158066e9975ae5bd3b55f2a41a791baf3e8351ec604944790a22c933c80b1590ba197a4706f7f5128682edcd74dd78d435e787c2b76a57b3f4e7d7be2efd26da5f9a829119b01508b7072c7699ce52bb578cc5b1b93661b5172fb84daf1ba364d2cbd80e2c99bca9caea873cc0a1629eac384e9b206842a6e6183387591b4aa34a95fd89b49d8d15d91e21940e17dcaf1eff8a0a47a0d7a95daead82aa3df8204a0cd206924ae510fec8a9c4e8d85d466fdb4dd365dc99336b22ce0b956b5ee0017f29d25ee66fbdcecb0d996ffb97c8defde40a9ff9993193ca8f1685067c19c526e0efed236f8edb8def6c2a03e21952c8612d624e6886a311ffb9e2f15da44abe180d26a14b15f63561e097a730ecabb792c7c235fdd360f571f27ef68677a7d63beb4975982cb199a560f816ee12989445f7f75b83eb278d62825947d84099af2a6ff2eadbbf589b5eb2f72ed114c73151153ae0022bc9564d15c2d5cdbbaabbef638f03095f53eebac9683409ad3060cfb7c7037b9b0befe069c92a02be953388e9ea45d36ddf4f5a8389432ccf504c50808b07f69\",\n        \"signed\": \"cc12f69db63a678ec477a605a505c57dc2b810ef85e3e34519cb25c51063aa66355d3f1e2974695866edf6f17171ce37842fbab5075fc895d18ed743c546080c7ec47f2f1fe3b70a6d1d82c7cd924b4bf9b2029fc12c52a6e1cc06cf5abfc0a442e7cf145c1542b9b135049665711035e3c29a91d4fdaed6127057a812c22cd75ad1879be1d2c6110e79e987524e4e8f27f16eda90cbd4733f111825b516d1067f81eca5e6948576d5bfedb3277c1abc1e60f374d0701b32ccfd6a5e9c8d1659aaf3d0818613613b7e288d845e9aaaba2e3e9b411d501dffe856fd313e9fcc9e7430b9983f20ab4ebf4eb616bd63e2c57743658995ed0a149ae620a395613719b3ed7ced4588d5915d70a2f0c687680ec34fe3e9f72392e189e13a4749d5ca9fac651b92c084c4066fdf98a869223e4e0c9bec5812b5c1900e6e60d3a188d48a74dfd415b5cad2e91ff76df75089d20a755f260756c8f1382a29f7b93726e731071cd477458c6f2022dfad7d4fc7ab2380541864f6b58774f9ae8e5f077c1a8da073c39853eb2fd477220b45a3d92263dc7e14d3bb2b36fca466c7ef8a247538725f2fce5c7221bc751cde1394604f5931d733360ccd47ce087712958180ad84fae713b543f05eef6abc0661433121ed3b4506a1465025316fb8f9d64535cc4538acd4064dd576b0740e1beb13bceaf155543dc89097ca5ca1cffa0ad65a10bcb759354eab8a42de734af909c2feba380d66409f325d5f17af9ca7f8cb4134fd6a2b6a528d9e60d9612b8e8b4062f8e0fad1e7eeb9cbfef6e9738ec7973e1cb2ba2327deca4ea46568f31e12f730e247c1d07029fd4422b298ff2398023b4120a3a425ffb652880c19ea69f3639e0f6df4f00876cc4528e267e81d5943199d0feb6cb4e1baf404bb6f8b39b12dbce9fdc35dc158066e9975ae5bd3b55f2a41a791baf3e8351ec604944790a22c933c80b1590ba197a4706f7f5128682edcd74dd78d435e787c2b76a57b3f4e7d7be2efd26da5f9a829119b01508b7072c7699ce52bb578cc5b1b93661b5172fb84daf1ba364d2cbd80e2c99bca9caea873cc0a1629eac384e9b206842a6e6183387591b4aa34a95fd89b49d8d15d91e21940e17dcaf1eff8a0a47a0d7a95daead82aa3df8204a0cd206924ae510fec8a9c4e8d85d466fdb4dd365dc99336b22ce0b956b5ee0017f29d25ee66fbdcecb0d996ffb97c8defde40a9ff9993193ca8f1685067c19c526e0efed236f8edb8def6c2a03e21952c8612d624e6886a311ffb9e2f15da44abe180d26a14b15f63561e097a730ecabb792c7c235fdd360f571f27ef68677a7d63beb4975982cb199a560f816ee12989445f7f75b83eb278d62825947d84099af2a6ff2eadbbf589b5eb2f72ed114c73151153ae0022bc9564d15c2d5cdbbaabbef638f03095f53eebac9683409ad3060cfb7c7037b9b0befe069c92a02be953388e9ea45d36ddf4f5a8389432ccf504c50808b07f69\",\n        \"signature\": \"cc12f69db63a678ec477a605a505c57dc2b810ef85e3e34519cb25c51063aa66355d3f1e2974695866edf6f17171ce37842fbab5075fc895d18ed743c546080c\"\n    },\n    {\n        \"secret_key\": \"903f3b5399892e29ccfafbafbd7cc4533c154a625682406c89bf894c889e43f4\",\n        \"public_key\": \"8fa5ff5b6b26bd67df864046429df124b523005dd89444275c8ab7ebddb6f4db\",\n        \"message\": \"a2c11b5fb884a822fae64da8dcb4452cfd7a04ca6d7a5abc8d8271e93f93449e1feb8e02975f496b9034400d3599ab97aa3997dad1c9ffab5b9f8df4aaa5b840d90d862fff7ff0cf73a60c66150009e01c937bd1af6807b5ba2ef612ee13d6def40bb09c46811a2d4e468e038b323055f9dfbd01829ae2f1a535ef0295ca1ed176e46de996cc87bace45356233211835b6f4757c99bd527e766a5f0b127c8cff8e6d66f8bab86d0000452cd7f67be557788513ec0709b537b007b42016e7a89683469bd8ff8d21eb10c14917d47f2dc4f826324f7c01b24f8dcff04aa6d85095d9ab154ba5c3bd919c9d728dbdc990d19ceb237b452907bdbe21f9f08cddae5be479276709b8ae73f8974c4b113841ad535d6ff6223eea47d185c8e8a65fdee2c2d45800c17cb556eafd676647d9968e55ca9c59232b9770ad10f955fcb5858edf0b7483adc1817c0f8d02240482caa76f43c6d2e96a4ff9591cd7b878ea619ea56d1b588631e7633c5ecb2ba6998398cb06e3cf75aeb3e08dab19632d454ff7dc0e2a41f09737e8ee823d1b9e24dda84a2ce0313cb9fce31cb663c55c05645e63401756e8ad38f5174c02a663d815ad64422ff7727d4fda16e48d4bf8f6602e7260da62330e6878c34764e129afbd552208f6bed4f7cee9b671f488388815d74b4951b8682ce76cfe31e938c470b8f7a45fd63a9691f426a75c58ed3dbce3ae8fd9d10a8352e47cc1b12c9192ac8626d1b384b77a18b986e71a998646c137992b67c4817e346345faf50a2659fdc5cad5c719648efee3847c0ff6bd7095c28b4c5195967c90cf84e1ef68a1ada01f6274ede363fb82e0b549a870245d608cae8234f6d84abeb61b718466093620d85c584ab01eeda091ee8aff1cf67a4675679a1f4003e66aaf43871b88ecda6a16dc5acb05395f2da9df70d3bdb61438e1c3d40981e034627d026ee1d2e79f65cbb8189fcbb3cc8b5c2e7e796b5d2889411d5641fb869c7b0a589c43254f8c5438aaf5ac423832f018d79a51b96f242e2de0c851cc5fc2b206bca4b5be836125aca144bbc38c8c638be0d3bbe025a1be8b3d03d5929baa649c3544a32a915e926a38791b134a971bc52d1b6ca625efb7c2f3bb47ab51d43c8e374d16cda882204b71cafe9093cb6078ef2bdfad59edeaf36d0c1a4dc425b9e718c45185225a9c3084b782bfe163492f8e8482ec9aa073f6901ff3d1117ce917e19122fa67650d858f8f82b37669723c226d721697e7ae3359f5a6b02424ee8794cbeaa641edbbf753b103a5fe158be0ba60d8a212d42f8c5c2af254bf1b9c80df6f1cf09d70793cae1abb4627b1780f1bce7f617ee50f6bd4b083b2fc7cd844afb72380d5cb6b255bf47ea71cad6c6c4df021f81b548f432c18ac366c6aecd03b6c8ce2\",\n        \"signed\": \"495a8f991941c629bd641a67471ab860bfd39b72f23355f7270909d5307c77b1b94bae3ed19450780e9085305f31b1e1683facf0d1fc8840aec77df67aeab302a2c11b5fb884a822fae64da8dcb4452cfd7a04ca6d7a5abc8d8271e93f93449e1feb8e02975f496b9034400d3599ab97aa3997dad1c9ffab5b9f8df4aaa5b840d90d862fff7ff0cf73a60c66150009e01c937bd1af6807b5ba2ef612ee13d6def40bb09c46811a2d4e468e038b323055f9dfbd01829ae2f1a535ef0295ca1ed176e46de996cc87bace45356233211835b6f4757c99bd527e766a5f0b127c8cff8e6d66f8bab86d0000452cd7f67be557788513ec0709b537b007b42016e7a89683469bd8ff8d21eb10c14917d47f2dc4f826324f7c01b24f8dcff04aa6d85095d9ab154ba5c3bd919c9d728dbdc990d19ceb237b452907bdbe21f9f08cddae5be479276709b8ae73f8974c4b113841ad535d6ff6223eea47d185c8e8a65fdee2c2d45800c17cb556eafd676647d9968e55ca9c59232b9770ad10f955fcb5858edf0b7483adc1817c0f8d02240482caa76f43c6d2e96a4ff9591cd7b878ea619ea56d1b588631e7633c5ecb2ba6998398cb06e3cf75aeb3e08dab19632d454ff7dc0e2a41f09737e8ee823d1b9e24dda84a2ce0313cb9fce31cb663c55c05645e63401756e8ad38f5174c02a663d815ad64422ff7727d4fda16e48d4bf8f6602e7260da62330e6878c34764e129afbd552208f6bed4f7cee9b671f488388815d74b4951b8682ce76cfe31e938c470b8f7a45fd63a9691f426a75c58ed3dbce3ae8fd9d10a8352e47cc1b12c9192ac8626d1b384b77a18b986e71a998646c137992b67c4817e346345faf50a2659fdc5cad5c719648efee3847c0ff6bd7095c28b4c5195967c90cf84e1ef68a1ada01f6274ede363fb82e0b549a870245d608cae8234f6d84abeb61b718466093620d85c584ab01eeda091ee8aff1cf67a4675679a1f4003e66aaf43871b88ecda6a16dc5acb05395f2da9df70d3bdb61438e1c3d40981e034627d026ee1d2e79f65cbb8189fcbb3cc8b5c2e7e796b5d2889411d5641fb869c7b0a589c43254f8c5438aaf5ac423832f018d79a51b96f242e2de0c851cc5fc2b206bca4b5be836125aca144bbc38c8c638be0d3bbe025a1be8b3d03d5929baa649c3544a32a915e926a38791b134a971bc52d1b6ca625efb7c2f3bb47ab51d43c8e374d16cda882204b71cafe9093cb6078ef2bdfad59edeaf36d0c1a4dc425b9e718c45185225a9c3084b782bfe163492f8e8482ec9aa073f6901ff3d1117ce917e19122fa67650d858f8f82b37669723c226d721697e7ae3359f5a6b02424ee8794cbeaa641edbbf753b103a5fe158be0ba60d8a212d42f8c5c2af254bf1b9c80df6f1cf09d70793cae1abb4627b1780f1bce7f617ee50f6bd4b083b2fc7cd844afb72380d5cb6b255bf47ea71cad6c6c4df021f81b548f432c18ac366c6aecd03b6c8ce2\",\n        \"signature\": \"495a8f991941c629bd641a67471ab860bfd39b72f23355f7270909d5307c77b1b94bae3ed19450780e9085305f31b1e1683facf0d1fc8840aec77df67aeab302\"\n    },\n    {\n        \"secret_key\": \"ee81e0fb052e23ad759de6aa9838de98e36d4820dc0e1b7b3ef1141ab9de3340\",\n        \"public_key\": \"98f3c9880794de64fa269bdf336095e0e01b1a3b375f965b93700bbdf4b96869\",\n        \"message\": \"28d99e9518b88283c220e76de205d7b6162359b1dfec1fbaab98ec0ef1df8da40b6b7a775e9728450aeb2351fe5c16afda3aec0d71049da4cb7d4c63713a2410abb022f81611cc064587c8047d4383c00c3c562e9ceea35775095391b5f3dda0e373c4a77ff618a28ef68787ebfc3ebcccc5d1ce32ddf43bfce57203da76a8664b3c616a8869282db0b72811b5fd5a2a03a4ff66724b0489ea2e1073d781c3f189115d79ba20a46d1dfaf5b1a5847b2a2e31b2808737569e60b57231e6a99af26f58afeb15770810474812fe4afacf884506b8c314bc6751bb42b4bd6e87d2e5de70fec5f0014c4257b13472a3b0111a7a8cf83b1dc0cf962022cd44468a3ab1f0016b70cafb1d0246acd7053937c9ac40207cf13b50dd15e2a2e15f50a05bca2f28e770262371dacee02e25b2a59658ed90c0600fa265b7de3d44f8ef0721bf39ec4d4eca5888527b778067b1d659c00514c8d7056273a294cbafe45090d069bbd09f92f461e648f3e682882c71576e974debb0cb7e0e8316406660150dabb58e76246614a291c12ce9e0346c02774d4d09cecc23696712fee250c0bb5df7a2a4c43a5563331bcbbf84be3f2eeb0654532e85ec597b53b32f3954ccaf0cd426def91ec4b208416948af27de04d832705897a04c5e24a2e88b20040fd4eca3089fdb918a92e35c4d31da26850b9dd34118c74449a855ff4bc9fff0d1447839654b00417999fa4eb89102133cd320409153584957c10489db4b7244c95907988e83dc821271dc1ab643d6992d0fd820492ae642e24d19a179fa75d9363b321662606fd94a47fdb2e68d3f30c04673f809de0144945ea4d4183d48f175079eed50323c6b192e020e162a3503aa582fb08b403624a23e357eeda08d904386f358c36c64d314c77cd9d4d23d581ee53d81ff97ada019cfcf04eb9dcc1de9b74c3db6b811578bd4f219c5ca48ef4c826b09e6c96d031f65dd48b6e73d0c100586b21df0293a03d2ed7e5009ad025340c21d09060691f5cd8af2ab12f9b860ee87815e1a9f400c2a6f634ea8f9b3425a08d10b3c815367388f4d1be356318ecf9035d0ee975affa859caac28ebccd0599bb2f6f3523661bd178fc9e4cac378bb9dd4716bb06923fd2bbd56c959c42b95d50193f8bf299fcca3b2eea94ec5f98583924c080416e28b54fe57658458b055ce4de8a75fc82715cae91d375cf69281378051bb61fdd7bb0068f63efa6d6e83d8fd4257af80970f4a9e6924b2de0ad966dffe6fa4a113b0e772f1768785b3b42049f76c48ad80f2c67fb0f91a5fc4107912520d8d683c062c3a222bcda7e710bacd478ee88367b6a059a452fd26f114a5acbd6979ba019f7da68ac04a193026bc1c27e4837b1de29cce090e3380d5051a586409e628e3145665bb1d84ecd8\",\n        \"signed\": \"f0d873be15cf454c7434deab71de25cfe99e81a48d2dce6a35d1633714df0f8b4029e0582511efc4d06892f672850246bcf070c46fadc2faab44dc435045de0028d99e9518b88283c220e76de205d7b6162359b1dfec1fbaab98ec0ef1df8da40b6b7a775e9728450aeb2351fe5c16afda3aec0d71049da4cb7d4c63713a2410abb022f81611cc064587c8047d4383c00c3c562e9ceea35775095391b5f3dda0e373c4a77ff618a28ef68787ebfc3ebcccc5d1ce32ddf43bfce57203da76a8664b3c616a8869282db0b72811b5fd5a2a03a4ff66724b0489ea2e1073d781c3f189115d79ba20a46d1dfaf5b1a5847b2a2e31b2808737569e60b57231e6a99af26f58afeb15770810474812fe4afacf884506b8c314bc6751bb42b4bd6e87d2e5de70fec5f0014c4257b13472a3b0111a7a8cf83b1dc0cf962022cd44468a3ab1f0016b70cafb1d0246acd7053937c9ac40207cf13b50dd15e2a2e15f50a05bca2f28e770262371dacee02e25b2a59658ed90c0600fa265b7de3d44f8ef0721bf39ec4d4eca5888527b778067b1d659c00514c8d7056273a294cbafe45090d069bbd09f92f461e648f3e682882c71576e974debb0cb7e0e8316406660150dabb58e76246614a291c12ce9e0346c02774d4d09cecc23696712fee250c0bb5df7a2a4c43a5563331bcbbf84be3f2eeb0654532e85ec597b53b32f3954ccaf0cd426def91ec4b208416948af27de04d832705897a04c5e24a2e88b20040fd4eca3089fdb918a92e35c4d31da26850b9dd34118c74449a855ff4bc9fff0d1447839654b00417999fa4eb89102133cd320409153584957c10489db4b7244c95907988e83dc821271dc1ab643d6992d0fd820492ae642e24d19a179fa75d9363b321662606fd94a47fdb2e68d3f30c04673f809de0144945ea4d4183d48f175079eed50323c6b192e020e162a3503aa582fb08b403624a23e357eeda08d904386f358c36c64d314c77cd9d4d23d581ee53d81ff97ada019cfcf04eb9dcc1de9b74c3db6b811578bd4f219c5ca48ef4c826b09e6c96d031f65dd48b6e73d0c100586b21df0293a03d2ed7e5009ad025340c21d09060691f5cd8af2ab12f9b860ee87815e1a9f400c2a6f634ea8f9b3425a08d10b3c815367388f4d1be356318ecf9035d0ee975affa859caac28ebccd0599bb2f6f3523661bd178fc9e4cac378bb9dd4716bb06923fd2bbd56c959c42b95d50193f8bf299fcca3b2eea94ec5f98583924c080416e28b54fe57658458b055ce4de8a75fc82715cae91d375cf69281378051bb61fdd7bb0068f63efa6d6e83d8fd4257af80970f4a9e6924b2de0ad966dffe6fa4a113b0e772f1768785b3b42049f76c48ad80f2c67fb0f91a5fc4107912520d8d683c062c3a222bcda7e710bacd478ee88367b6a059a452fd26f114a5acbd6979ba019f7da68ac04a193026bc1c27e4837b1de29cce090e3380d5051a586409e628e3145665bb1d84ecd8\",\n        \"signature\": \"f0d873be15cf454c7434deab71de25cfe99e81a48d2dce6a35d1633714df0f8b4029e0582511efc4d06892f672850246bcf070c46fadc2faab44dc435045de00\"\n    },\n    {\n        \"secret_key\": \"69d01d829113081cbf5d0c6ef77b21775c8d9b680000056f03c75a7d0a0587d2\",\n        \"public_key\": \"ee8469dd61cf5de400da7d7a479a4418e6772e69ff5330ce5ca77859fe271755\",\n        \"message\": \"0b9e110f29d19816a17b2c75478f13cee953811a1983014cb7eb0f75526912044c3ea6829780e657f817c5597d4661080d9034c9778722418f2c3aeecaef6b690c5bd3b593701086988e4340aec34e0172758eb24087d03a8f76e7cbca53aaafc4d2155c7532ab54be48872653066fa1fdd54acfe9daaeca356c290e6be63355b6d9fc52eb5e4fccbbc6083507132de485bfae9f42e19712232b716402c23fea74efa69d73c8c2e3a8662b8b65b0fd007741013e1f6e3cfe4345d5c830682fe60021d708e10a9e9f4052ff7a6abf28acb1d6b5fb038eed3f72513c355bbfd5c2274fa85fc4f446974b2d1bc036507a1eb5fcf55dbd44210e538274de808b900bf1c0fcc0241270db8dbdcd88349d67224f087e5f07f699b0bae68b2ebc9a4e27c70d3ac7d996fa7d4dabd568378e3f93905b1c89c652d384c16c2bcb1c9844c38f71bb13e0c6a2ea95b612e390c5f86d248ea531f2ec6f639a402dfaccf37217005344030745d1f1e520cc195dafdd7f295f377b8d614716703836219bb7b09fea7aae9ac33e42dcab65cc6142fcd8ce15e97717fdb33e9538c44f6cd9c1c65db62751f552f870f10142c96f9df1855abb39e42706a563ab154511fdce687c9576f9edc3b4ba55346ce66802fffef4b1b5e12015ce8b57de5458caa0daf341968128584288c2f27cbfb76eab286bac5f66aad0049e0ca60a9014e17901c4130e83ceaeb4c2713e971a235eff995a813ae4ea64a583ffdefdac82ac76eaf4d47c4ac8250fcbafd6b88faeb48015f5b42b5334a50b31d4502ea491da90dce93c08fd56f5c58eedb379166a23762be5e4adeaa6f4ae1c24e0cac4ddca0383458560cdc48b8cd1f42a3ba2f6ffb6077909fcb294ad1ef4a44c22ec4b3987ddbeef325b98ced56815ea7d5fccf5afdfe98e0e6d920f7ada2eb5c91624c76cbba2993a9c7a55021d127a667b39e235df4f81dee7dd142898778dbd92135b70b3acf59f6c29a2c9d4a7006ef11a918b3a2906264a15d6b529308cbc89f85601fc1ea1314d67f7566cf109165c7f92de1a18d70debe024349db3560a6e527e2ac3e06789468704e6b8f1871f16bae9827392b418f1086cc497086ced14b1249d6d8794f23bb8779d418648f2155656a6fda7440c56284d9b2188fa7d1736bccc9cff0be5b1e1f551ff8137ff5966ed9d0f7f01c3dff298e9102ffbd324bfca5ffe0968e66f9d82f487d303934f27f78b28378eb72c38272962a5f735d7392e5d333fd86de167269c17a165b92d31a4880a41e136f718960a919b3d7c4e74cbd73c73f921be513f739affb2e41f80426bb8cfb4564b98fc4de53255ce3f98b4d22ae6fce9190b55bf2c93861c1dcac101b5e16cf09991c5defa33f8d51056d934bb4b477b6520d4c7ae22ea7fb3109de7f4\",\n        \"signed\": \"408cefcf01417e2dc6a8a18284e411657f039250c31278db2819f9eaea4293fbf6831a2801fc1ea6871657b841e173f451b0d575a9379e35857e8c7297fa14040b9e110f29d19816a17b2c75478f13cee953811a1983014cb7eb0f75526912044c3ea6829780e657f817c5597d4661080d9034c9778722418f2c3aeecaef6b690c5bd3b593701086988e4340aec34e0172758eb24087d03a8f76e7cbca53aaafc4d2155c7532ab54be48872653066fa1fdd54acfe9daaeca356c290e6be63355b6d9fc52eb5e4fccbbc6083507132de485bfae9f42e19712232b716402c23fea74efa69d73c8c2e3a8662b8b65b0fd007741013e1f6e3cfe4345d5c830682fe60021d708e10a9e9f4052ff7a6abf28acb1d6b5fb038eed3f72513c355bbfd5c2274fa85fc4f446974b2d1bc036507a1eb5fcf55dbd44210e538274de808b900bf1c0fcc0241270db8dbdcd88349d67224f087e5f07f699b0bae68b2ebc9a4e27c70d3ac7d996fa7d4dabd568378e3f93905b1c89c652d384c16c2bcb1c9844c38f71bb13e0c6a2ea95b612e390c5f86d248ea531f2ec6f639a402dfaccf37217005344030745d1f1e520cc195dafdd7f295f377b8d614716703836219bb7b09fea7aae9ac33e42dcab65cc6142fcd8ce15e97717fdb33e9538c44f6cd9c1c65db62751f552f870f10142c96f9df1855abb39e42706a563ab154511fdce687c9576f9edc3b4ba55346ce66802fffef4b1b5e12015ce8b57de5458caa0daf341968128584288c2f27cbfb76eab286bac5f66aad0049e0ca60a9014e17901c4130e83ceaeb4c2713e971a235eff995a813ae4ea64a583ffdefdac82ac76eaf4d47c4ac8250fcbafd6b88faeb48015f5b42b5334a50b31d4502ea491da90dce93c08fd56f5c58eedb379166a23762be5e4adeaa6f4ae1c24e0cac4ddca0383458560cdc48b8cd1f42a3ba2f6ffb6077909fcb294ad1ef4a44c22ec4b3987ddbeef325b98ced56815ea7d5fccf5afdfe98e0e6d920f7ada2eb5c91624c76cbba2993a9c7a55021d127a667b39e235df4f81dee7dd142898778dbd92135b70b3acf59f6c29a2c9d4a7006ef11a918b3a2906264a15d6b529308cbc89f85601fc1ea1314d67f7566cf109165c7f92de1a18d70debe024349db3560a6e527e2ac3e06789468704e6b8f1871f16bae9827392b418f1086cc497086ced14b1249d6d8794f23bb8779d418648f2155656a6fda7440c56284d9b2188fa7d1736bccc9cff0be5b1e1f551ff8137ff5966ed9d0f7f01c3dff298e9102ffbd324bfca5ffe0968e66f9d82f487d303934f27f78b28378eb72c38272962a5f735d7392e5d333fd86de167269c17a165b92d31a4880a41e136f718960a919b3d7c4e74cbd73c73f921be513f739affb2e41f80426bb8cfb4564b98fc4de53255ce3f98b4d22ae6fce9190b55bf2c93861c1dcac101b5e16cf09991c5defa33f8d51056d934bb4b477b6520d4c7ae22ea7fb3109de7f4\",\n        \"signature\": \"408cefcf01417e2dc6a8a18284e411657f039250c31278db2819f9eaea4293fbf6831a2801fc1ea6871657b841e173f451b0d575a9379e35857e8c7297fa1404\"\n    },\n    {\n        \"secret_key\": \"4b8ed29731f104795e97dee7c8b401a02afaa9a795e613353d2b95001765027a\",\n        \"public_key\": \"f22298210b09fd617fc8b35074ca1801e6075dc92a8f50344b80e85405a038f5\",\n        \"message\": \"cbb5f13a0ef2837b805d3b785109f9f2e0d0a017bfe7692d91ec23ddab7817330bef247fd91ab2c77dd4412519cbd38475ce0cb39b1480092bc738d4152b8a6d55248e3b9f32cdcd15ec5d059ec3c8847554ee47005394974d8eb23592d17f5a396e3c19f8e898370679fef5318c4dd299c6217d6abcc9b61a5b2d0cfef695d170ca20a83d6fd3c666c8fd1c10ad970e2fa6af10ff0ed0cbfe752246d03f3a3c6032dbb319bcfdac4dafc50bc3e6bf595f491dec388b3441b8cee0df91f55cc7807d07f8f541ed7322ffc39d18f89560e4123aec1d77969cf1877786f4cf94b1770b1090655e8c72eecea4572e46f580f963966db2a1085eeabc57bf4a84724b9c8599a433abf58bca804091d3d5e6e5048ec27bf8129b670cc2c88d9cac471859f469b918f3f6d70f7d6663501ffbefef026d79ea70927ccf6075ee5105423321e11aee9ad16f987efbdd00b62aff698e521adf9203b15e9f0f3ad07dcad9ddccaae9b490247f12c311dee6b73b8f9124fdce1299b47fb1914cee7e3a07814e312c3ce56927672c51b3185980cde57f3a759b50bcfc4cb0753b954d97135deb2a0532e98b66f39a7c08cf4d548539e2eb9f422f6649658893a7c3c25a4fc901f8c398b8c72733911a0072ed6bd2f4189389ae10a814f648d71f69c37e8295784428183b93c8013b964a9fef86b48f489316bc222e96b3bd15ff149b96820329551c15e0d095d1569b1e2131c78751565c3041f29785395b97151317f62e3582e407b1649e60d03a8599120a302a4695fa862b4120f94d22ecae72398d2094d108ad2dbc1b959735902142aa5fe6e7996559f6f601448aea02f356f8dcdd144340eb3619f9865bf7672aea326c4e93c99f0ed1f9ed866be15d3af2675f6dd6e296602ca373a815b0be46bc2a3fbba06b8805c731fe08007daa06050961b24d14693a72898ccfb8b8fedc60a4eef8ff79b6dd7592591833b576ef48294e5e0485942e57c119602eddf88b1faea517f2fc2e3d14d246a52cbd71a108c66b6cc4f2d45804a282ecedb1b0ad3dc3b4880ab2ff78b8ddde48f7466c14fed349e95b5053abf1bf0991126031d97547d143c2ae164928b61c0708af8ca3e4f55154d13d75e97db4ba3e69d36e9b37082368c2f721bd3f95126a1e004eb2a1bf268343ae21d2995044a2cadd67ffac9e1538175b3cc44db5d26f1d5cc89ca0e1c1ee8537a8a91d324c2e02e18b9fb9730d6dda55f72d843389693ebfcba7fbe1a0bcffb9aa284f4ae66f44a8b89302983b22736d0c72d6a044e4291624243a4e0ce65d5e5346d67fed3760ddb0c510b50ff3eef0a18a267de730476dd82dff7072cba0984825a004dd4bcd8c37fdaf1f683d1d9380e135a95d24b89fad0be941c548251bec90ccae015bc0567da84b371e50\",\n        \"signed\": \"2345886686eb39b5199caaa9615bc6b4896f076e8bd736c0038a6517f9c2b167e759f37372268a697e9b78605f2ed94725f6905a7900153fc9e8beed31ffae05cbb5f13a0ef2837b805d3b785109f9f2e0d0a017bfe7692d91ec23ddab7817330bef247fd91ab2c77dd4412519cbd38475ce0cb39b1480092bc738d4152b8a6d55248e3b9f32cdcd15ec5d059ec3c8847554ee47005394974d8eb23592d17f5a396e3c19f8e898370679fef5318c4dd299c6217d6abcc9b61a5b2d0cfef695d170ca20a83d6fd3c666c8fd1c10ad970e2fa6af10ff0ed0cbfe752246d03f3a3c6032dbb319bcfdac4dafc50bc3e6bf595f491dec388b3441b8cee0df91f55cc7807d07f8f541ed7322ffc39d18f89560e4123aec1d77969cf1877786f4cf94b1770b1090655e8c72eecea4572e46f580f963966db2a1085eeabc57bf4a84724b9c8599a433abf58bca804091d3d5e6e5048ec27bf8129b670cc2c88d9cac471859f469b918f3f6d70f7d6663501ffbefef026d79ea70927ccf6075ee5105423321e11aee9ad16f987efbdd00b62aff698e521adf9203b15e9f0f3ad07dcad9ddccaae9b490247f12c311dee6b73b8f9124fdce1299b47fb1914cee7e3a07814e312c3ce56927672c51b3185980cde57f3a759b50bcfc4cb0753b954d97135deb2a0532e98b66f39a7c08cf4d548539e2eb9f422f6649658893a7c3c25a4fc901f8c398b8c72733911a0072ed6bd2f4189389ae10a814f648d71f69c37e8295784428183b93c8013b964a9fef86b48f489316bc222e96b3bd15ff149b96820329551c15e0d095d1569b1e2131c78751565c3041f29785395b97151317f62e3582e407b1649e60d03a8599120a302a4695fa862b4120f94d22ecae72398d2094d108ad2dbc1b959735902142aa5fe6e7996559f6f601448aea02f356f8dcdd144340eb3619f9865bf7672aea326c4e93c99f0ed1f9ed866be15d3af2675f6dd6e296602ca373a815b0be46bc2a3fbba06b8805c731fe08007daa06050961b24d14693a72898ccfb8b8fedc60a4eef8ff79b6dd7592591833b576ef48294e5e0485942e57c119602eddf88b1faea517f2fc2e3d14d246a52cbd71a108c66b6cc4f2d45804a282ecedb1b0ad3dc3b4880ab2ff78b8ddde48f7466c14fed349e95b5053abf1bf0991126031d97547d143c2ae164928b61c0708af8ca3e4f55154d13d75e97db4ba3e69d36e9b37082368c2f721bd3f95126a1e004eb2a1bf268343ae21d2995044a2cadd67ffac9e1538175b3cc44db5d26f1d5cc89ca0e1c1ee8537a8a91d324c2e02e18b9fb9730d6dda55f72d843389693ebfcba7fbe1a0bcffb9aa284f4ae66f44a8b89302983b22736d0c72d6a044e4291624243a4e0ce65d5e5346d67fed3760ddb0c510b50ff3eef0a18a267de730476dd82dff7072cba0984825a004dd4bcd8c37fdaf1f683d1d9380e135a95d24b89fad0be941c548251bec90ccae015bc0567da84b371e50\",\n        \"signature\": \"2345886686eb39b5199caaa9615bc6b4896f076e8bd736c0038a6517f9c2b167e759f37372268a697e9b78605f2ed94725f6905a7900153fc9e8beed31ffae05\"\n    },\n    {\n        \"secret_key\": \"080d7f76182ee6bcea894b1e0060558b3b125a3499df3973b8dd6693408ee469\",\n        \"public_key\": \"4124713d7c2df50f93055730d1b281daec3028cf2c1e4858d128707a23d6deb0\",\n        \"message\": \"ab0a6de2351b9a8498f68272d9a0a7a057365d34efa0fd34cc3bf862e49cdc302b2bd5a30d601a130ec4032f541ae6cb7ba97f84183d2d2581287ca701d7d7a9aba110ce58b946ac0824305df7929f3dd7fc9c8732238637e2b181d6e116c7f66e3226aae3ced1610262da1a0a4aa50a1b9443ec828329e4734d28fc25ab9c1de9b8987e5dc0c8131916c5f18928704a71e80622b1492bf2fec5d4b6dbe415c8af2ce3ef109b34dd5e64d56846f085935a4a5d1073497fb3fb8fb77e8f5d5e3fd00c30652e3c5cde40a335d14e5425ffba942885ed17bd36df506924237e75be84da821950b91424fd9f16c1b2c783e90f8cc2ccc7980ce915c7696b06a586730259e6d14588582bab9d2a39f69e98e7f2ae9bc0c2610d7e0457f26a5d66543be1d65b79c4b7c0d8ee73d0c2b67bf50d8082f006f96d119505873193dfdbd432bb1c9ee0d03ee54cf95d20e91f7f3a069b6256f42159cdc1e600a9a1c2f5a8e467d5c2a9dff8730e6be826fb2a1e6448bfc4fcaaaacdaa7662351faadc91f7caa7737dc82ec3d4b21936bca1bd7ce373ad66264af13241167549318cdd78e563827f85eab20e0b42bc554a712c0051a5010dc2f2c7db85acf6549f9d102c903c1be5a05292c30f21ab1b2b8abcbbf104723c63f0ebc554fbee42020ccb14f443478df77c6aa44db9a57f8fd44d97ea099e4774823ebe123fcf5016a66e837b2f65c1845e681ee2a7059fb1290cd0a933129855cc83c87e0b3bb61e44134addd3637850246cdcdaa29f15c41a3d4dd2c1d760062124333124cf091435fdce711f52316368999befa4c80a39b3750e4e386289e4e2855e97b619b0a25799912408b7d58a4dd9819571e901430f6d555529dd630a1867459b8022d0e0add6ab4f12f60baac75979bbff7f6258d28d6760b1ff243c39e4bbd6cf9bea572a9c082d05adcfd4ccf9fa026f2c904b6e782ed709df7748a307cd2dc3a0fc4123df580cbf49e05ceeabc9f39e57b7f300905d8b310091fb953f3def36deb3e8bf372f5916b51597df024ce85cc4c36eabdc580b5cf152994648f1d7f35fed5cd10f6e2949161a3359b3034d450ea6f61cdf1d5af76d40102b60294f4e49078249026d62fe35fdf224928b0c49ba2b5339ebb192c5ab7f05cdb946e37d671a4a5ef2a5827220b4438cbda05736292806648f5bdd52420fa76b84a6addb1263eb0c500e81566d718d5066026da097054a86631016ddfb706a5677d502ef84aa73b5863bc40fdc42cb7321ac5f00e2928fed7b0418596db4b6151dd6bc6e818f0253552bf13741e69680e966c92c293e13c90f7c9999bd1ec6afe3b4affb47340c89859829feb599db3a8c3d33fc8d45fa5381078ae9f75d85c1496f5fb5addf4e4009b764bcc9118e9275dc7219f281d0d1ef7158\",\n        \"signed\": \"185fb1b6d86dc4444810cf5ec6fef0abdafa2a6fccb45d11cfb54ba16a6843f280d380471002ae0d71508556c78ed5415e42338c161f2b621e74cba4f6a1d402ab0a6de2351b9a8498f68272d9a0a7a057365d34efa0fd34cc3bf862e49cdc302b2bd5a30d601a130ec4032f541ae6cb7ba97f84183d2d2581287ca701d7d7a9aba110ce58b946ac0824305df7929f3dd7fc9c8732238637e2b181d6e116c7f66e3226aae3ced1610262da1a0a4aa50a1b9443ec828329e4734d28fc25ab9c1de9b8987e5dc0c8131916c5f18928704a71e80622b1492bf2fec5d4b6dbe415c8af2ce3ef109b34dd5e64d56846f085935a4a5d1073497fb3fb8fb77e8f5d5e3fd00c30652e3c5cde40a335d14e5425ffba942885ed17bd36df506924237e75be84da821950b91424fd9f16c1b2c783e90f8cc2ccc7980ce915c7696b06a586730259e6d14588582bab9d2a39f69e98e7f2ae9bc0c2610d7e0457f26a5d66543be1d65b79c4b7c0d8ee73d0c2b67bf50d8082f006f96d119505873193dfdbd432bb1c9ee0d03ee54cf95d20e91f7f3a069b6256f42159cdc1e600a9a1c2f5a8e467d5c2a9dff8730e6be826fb2a1e6448bfc4fcaaaacdaa7662351faadc91f7caa7737dc82ec3d4b21936bca1bd7ce373ad66264af13241167549318cdd78e563827f85eab20e0b42bc554a712c0051a5010dc2f2c7db85acf6549f9d102c903c1be5a05292c30f21ab1b2b8abcbbf104723c63f0ebc554fbee42020ccb14f443478df77c6aa44db9a57f8fd44d97ea099e4774823ebe123fcf5016a66e837b2f65c1845e681ee2a7059fb1290cd0a933129855cc83c87e0b3bb61e44134addd3637850246cdcdaa29f15c41a3d4dd2c1d760062124333124cf091435fdce711f52316368999befa4c80a39b3750e4e386289e4e2855e97b619b0a25799912408b7d58a4dd9819571e901430f6d555529dd630a1867459b8022d0e0add6ab4f12f60baac75979bbff7f6258d28d6760b1ff243c39e4bbd6cf9bea572a9c082d05adcfd4ccf9fa026f2c904b6e782ed709df7748a307cd2dc3a0fc4123df580cbf49e05ceeabc9f39e57b7f300905d8b310091fb953f3def36deb3e8bf372f5916b51597df024ce85cc4c36eabdc580b5cf152994648f1d7f35fed5cd10f6e2949161a3359b3034d450ea6f61cdf1d5af76d40102b60294f4e49078249026d62fe35fdf224928b0c49ba2b5339ebb192c5ab7f05cdb946e37d671a4a5ef2a5827220b4438cbda05736292806648f5bdd52420fa76b84a6addb1263eb0c500e81566d718d5066026da097054a86631016ddfb706a5677d502ef84aa73b5863bc40fdc42cb7321ac5f00e2928fed7b0418596db4b6151dd6bc6e818f0253552bf13741e69680e966c92c293e13c90f7c9999bd1ec6afe3b4affb47340c89859829feb599db3a8c3d33fc8d45fa5381078ae9f75d85c1496f5fb5addf4e4009b764bcc9118e9275dc7219f281d0d1ef7158\",\n        \"signature\": \"185fb1b6d86dc4444810cf5ec6fef0abdafa2a6fccb45d11cfb54ba16a6843f280d380471002ae0d71508556c78ed5415e42338c161f2b621e74cba4f6a1d402\"\n    },\n    {\n        \"secret_key\": \"49846ada7ae684971dd91710799090b37fe5ad561d72a35f2efb405f196ab0ec\",\n        \"public_key\": \"4d370a8194a3045b09b3bdafa27fb9acd59943a54ae14cbaaa2200eb0f3da71b\",\n        \"message\": \"ab398d94f928b1d42102a3e513ccd1cb10899011039410a8888bba26df1a0372bdba0ce8d854af51e9330a8daa93c10580906a8ac72d294aeb9566fe1c78ba8471c06c4a8a75113b34893f6276ed813292053b956a465d847d2ece86e2da8a9f0fe3db52a5aac746ef96485ef81f1362b5a42eaaee1fbb0646704471a21bf76367beaa07812b3d32adcdedded7539e3a501b83c05b19a49b520ededc9a78a5fc2d5012f1d4e381844e792ed90b0f57bce375c75a658b2c78c6ff7d9efcd4bfa35c4768cbb195e4823d9bbd835a374fa04ca1eaae9c566d8fd5aa7ca5efe0dfc317fffa409ef1022f1c3b376a935af557083e95287b07a98ac6c1b7bd8bb26b60fa7c4bc91973b201b29922b4b9d03dd6882a0bd3b7d9e5b81ee74c36bec665e4343c8c9ad336da3850c9b2697fe1cce29c378622a33c248f448c88f48df0260143b2a342f1ddee74d3b97ca3e1166b156993dad30c49d810d74048bc6d467652004d7edb65c6dac3a2c5d300b97ee3a10a9e14b69f3cad675972962e1f8ed97547adedc47d1cf3471ef3b22fdbf78e34f31a3bb7669c41bd9292c380bce9a42d84bc27ac928b8bfc3c63d20ccdb478df7ddf421fb1cd905ffc4c04786fd9aef06b8938ab8ef522217b2c04515f61a1c312ea83253f8458c0918fcfe874e6e7fb11275db2a2ec79a2d868303233c1b697952a3bfd3ad0a6f6cdd5e72cc9409f7410a40d5b4536dd46eb1611ae86703671b3a0515a0377bea15654ba0a0d1e4e9602632842f2acd4ef993236e993f2650d59923f24e2cd30932d8bf8aeec644472ba46a07881496c92a0135c675aeb0ce6181088db8f156cfe7435cac6c97da637db4a89f51331da13731e741fccc0355542ce11efa69d0538d3ef127aa68745ed3085d29da90dc583701b6b3a70a3ef3e16a924b33203b92396c4b945f127a7888fa05015c0603007566729237cc0782b30c020d9959547feec9f4d676460bfe0c5c19ceabaee0682db8be69135181ec0fdd9f7a66d50bdc379e4a2c598178f9593946aca6405b177fcade0f86421583ed67eba187222a1e44495b3ae544fdca28e2c14485eab0471aaa803c29a9d8a48926764fca1df51407ad33ec17e941e6e2617237a84309873dc71365587bde4274b5dc327ccb1e1e9c857e042ccca8d8552ba288c978cfa0af99d67cd034060628e23525dbca207679ce29690878448553cd38675bce07bf97b9317dc44468b768b158b0c111d63a572235655c40e16597ca059f40c3d8ac5bd61a487c15313846a704a7811b8bc0cee61e34762b6c1b7cea1c46e6087e9a36f89918a258b3fa77620be10c184c3fc39739024e98278fd65b82cad83699f3ad8c6eccbec8b7b1bd7914d3f6c3d02bf40283b1c1f1e98e308beaebbf894b8f5e91bbbc62535f923\",\n        \"signed\": \"a5c809d1ca4cfbb3dc70a2a3a1f267c27330420719e3606218a1471cac57cb674b9b42827c5e9a7b25c8139c13dff60bde6c2dbad3a8361197c1fb19d2cd520bab398d94f928b1d42102a3e513ccd1cb10899011039410a8888bba26df1a0372bdba0ce8d854af51e9330a8daa93c10580906a8ac72d294aeb9566fe1c78ba8471c06c4a8a75113b34893f6276ed813292053b956a465d847d2ece86e2da8a9f0fe3db52a5aac746ef96485ef81f1362b5a42eaaee1fbb0646704471a21bf76367beaa07812b3d32adcdedded7539e3a501b83c05b19a49b520ededc9a78a5fc2d5012f1d4e381844e792ed90b0f57bce375c75a658b2c78c6ff7d9efcd4bfa35c4768cbb195e4823d9bbd835a374fa04ca1eaae9c566d8fd5aa7ca5efe0dfc317fffa409ef1022f1c3b376a935af557083e95287b07a98ac6c1b7bd8bb26b60fa7c4bc91973b201b29922b4b9d03dd6882a0bd3b7d9e5b81ee74c36bec665e4343c8c9ad336da3850c9b2697fe1cce29c378622a33c248f448c88f48df0260143b2a342f1ddee74d3b97ca3e1166b156993dad30c49d810d74048bc6d467652004d7edb65c6dac3a2c5d300b97ee3a10a9e14b69f3cad675972962e1f8ed97547adedc47d1cf3471ef3b22fdbf78e34f31a3bb7669c41bd9292c380bce9a42d84bc27ac928b8bfc3c63d20ccdb478df7ddf421fb1cd905ffc4c04786fd9aef06b8938ab8ef522217b2c04515f61a1c312ea83253f8458c0918fcfe874e6e7fb11275db2a2ec79a2d868303233c1b697952a3bfd3ad0a6f6cdd5e72cc9409f7410a40d5b4536dd46eb1611ae86703671b3a0515a0377bea15654ba0a0d1e4e9602632842f2acd4ef993236e993f2650d59923f24e2cd30932d8bf8aeec644472ba46a07881496c92a0135c675aeb0ce6181088db8f156cfe7435cac6c97da637db4a89f51331da13731e741fccc0355542ce11efa69d0538d3ef127aa68745ed3085d29da90dc583701b6b3a70a3ef3e16a924b33203b92396c4b945f127a7888fa05015c0603007566729237cc0782b30c020d9959547feec9f4d676460bfe0c5c19ceabaee0682db8be69135181ec0fdd9f7a66d50bdc379e4a2c598178f9593946aca6405b177fcade0f86421583ed67eba187222a1e44495b3ae544fdca28e2c14485eab0471aaa803c29a9d8a48926764fca1df51407ad33ec17e941e6e2617237a84309873dc71365587bde4274b5dc327ccb1e1e9c857e042ccca8d8552ba288c978cfa0af99d67cd034060628e23525dbca207679ce29690878448553cd38675bce07bf97b9317dc44468b768b158b0c111d63a572235655c40e16597ca059f40c3d8ac5bd61a487c15313846a704a7811b8bc0cee61e34762b6c1b7cea1c46e6087e9a36f89918a258b3fa77620be10c184c3fc39739024e98278fd65b82cad83699f3ad8c6eccbec8b7b1bd7914d3f6c3d02bf40283b1c1f1e98e308beaebbf894b8f5e91bbbc62535f923\",\n        \"signature\": \"a5c809d1ca4cfbb3dc70a2a3a1f267c27330420719e3606218a1471cac57cb674b9b42827c5e9a7b25c8139c13dff60bde6c2dbad3a8361197c1fb19d2cd520b\"\n    },\n    {\n        \"secret_key\": \"83343e37ad091a85eec370701b81a58f9370a4b0423a070d60f92d8d1809844e\",\n        \"public_key\": \"50b68bf726eabca53ac6c90d4eac554703712d22105554f05bf79f9d08fcc493\",\n        \"message\": \"c7dadcac5d8795e174b69138912e70ff41e7a725faf385b773ed15098972b30d9b739372d975b480ccfdfc580e2e2ddf5e3c27ee791279ab95e4382b1459dd8d41ae360d4a878846692924feef390c0dbbfa35e4b82d7cbc33ee1581c52bd949385b2ee40263a57da1174bb4acad37cd8ae2a6b45f7a6d6bbef5a798ce85b9e05e7647e334ecfc776378de174c497c0f4075e625af7aed502cd1cf7f588d0d807f02e32f4300f228a50a667b5ad1fbbc17e0b3c57051ddc602f576079f6fc5889b7f2900711334420fc666f66dbaff4126336c353f1e5b564a664537f83786da5c5627745406d7b2fe3233bfd58ef464a06c95cfd0b988a76d053a644bcc159cad53a7c5dbb40eef5cd047056a3f09265b1325699c7d159d5c902440173357ffab8f7a5e389f468c333b782f80170ae90983af153f2e73bd2bef125e3d3868c2ab9ecf03aff76ecbeb18167ca2f711cd565851d7f04ee9d9b01b6d83a7605722620d28c84d6c1af42f6a769258f53c1f66da36666da5caa9bd9e8fbc169211b1aed9c2558f6aaf5b145abc721abb00720194e027035468bde3fe0b88884f4e9b26e771e6c7a0a55ea36fc50dec8cef162f9bba5b4b16105afd6e374e038d5c8587cfd7dd88290b2c9cab45a264d6540ea1416e6e4e74a12f45a2ef13cc8a36e7b0a26b902c3d96e2e2229202e25765694b943373d16e600bd786d955a4b3f1021640c39a0b6c691500281ae0d098cc7f385e18a07e62fa4a101ef5b78551fa29bd15ee0353a1a5ef9b216e8b0fa50750a34162b635a0bc5e5d7230aa19afa128aba6422d38eb77a3f0bb9dd8e4652f12070a37361c3725503c9d22e2face2ea74a7002406247dd86975f07575c9e7c6f41b53b26d5cf52c5acc2c5d98271434e9fa509c6dfbd724372aa5c13451aae393de0a186464f5d337e9f627b4f1c2909467065e89a422ec40ee1d80a133900a62f4e4f7e94eb72615e7ec2996c6c2430c3e957ceae2105a1e90eaeac0d31affa9f57926d71d972a9a2de11258cc1e728599c9fb3872491847e10c67efaef6b696a030ff0533a583bea1d04df25f7eef3a13b8e31aad133857df1b4e5ffbdee37f40f38d224c70ae04ef33b41b02e7191a86656b0d72b2cbb53c4908ca206f75734b27708154fcd8a97429cfd1f2da2429778438003f5b5b9c21d9ed23b8ad8a228eb4f65c24c1c59699a5c90aff773e5c676db362a1930ba16aba76ef8daa42b3eb2ccc45c934d23d4929a7ad9e3ef468b06a4995c80dd236a7bcf3879d8b79467f72b3384c160cc181714e92f2035e7b972a2cc5242d932525eae7c50bd263b0fa09cbd9d6f984b9cf6152d9a133c27843202d1e87fa5a6e1235d9c756bb8e68b05b98da54195223fdf0210253250633c11c5f60b5e67d7eefcaa6c2daa523137\",\n        \"signed\": \"9c6989cbe17e16caa253ffb1a64a106fb01782c99b1722baf1acaa42ae5b36b79b2a2cd8fc91f5ad8923817025a77825a05df8c417ec53c4a3aa1c0efd5bbe0fc7dadcac5d8795e174b69138912e70ff41e7a725faf385b773ed15098972b30d9b739372d975b480ccfdfc580e2e2ddf5e3c27ee791279ab95e4382b1459dd8d41ae360d4a878846692924feef390c0dbbfa35e4b82d7cbc33ee1581c52bd949385b2ee40263a57da1174bb4acad37cd8ae2a6b45f7a6d6bbef5a798ce85b9e05e7647e334ecfc776378de174c497c0f4075e625af7aed502cd1cf7f588d0d807f02e32f4300f228a50a667b5ad1fbbc17e0b3c57051ddc602f576079f6fc5889b7f2900711334420fc666f66dbaff4126336c353f1e5b564a664537f83786da5c5627745406d7b2fe3233bfd58ef464a06c95cfd0b988a76d053a644bcc159cad53a7c5dbb40eef5cd047056a3f09265b1325699c7d159d5c902440173357ffab8f7a5e389f468c333b782f80170ae90983af153f2e73bd2bef125e3d3868c2ab9ecf03aff76ecbeb18167ca2f711cd565851d7f04ee9d9b01b6d83a7605722620d28c84d6c1af42f6a769258f53c1f66da36666da5caa9bd9e8fbc169211b1aed9c2558f6aaf5b145abc721abb00720194e027035468bde3fe0b88884f4e9b26e771e6c7a0a55ea36fc50dec8cef162f9bba5b4b16105afd6e374e038d5c8587cfd7dd88290b2c9cab45a264d6540ea1416e6e4e74a12f45a2ef13cc8a36e7b0a26b902c3d96e2e2229202e25765694b943373d16e600bd786d955a4b3f1021640c39a0b6c691500281ae0d098cc7f385e18a07e62fa4a101ef5b78551fa29bd15ee0353a1a5ef9b216e8b0fa50750a34162b635a0bc5e5d7230aa19afa128aba6422d38eb77a3f0bb9dd8e4652f12070a37361c3725503c9d22e2face2ea74a7002406247dd86975f07575c9e7c6f41b53b26d5cf52c5acc2c5d98271434e9fa509c6dfbd724372aa5c13451aae393de0a186464f5d337e9f627b4f1c2909467065e89a422ec40ee1d80a133900a62f4e4f7e94eb72615e7ec2996c6c2430c3e957ceae2105a1e90eaeac0d31affa9f57926d71d972a9a2de11258cc1e728599c9fb3872491847e10c67efaef6b696a030ff0533a583bea1d04df25f7eef3a13b8e31aad133857df1b4e5ffbdee37f40f38d224c70ae04ef33b41b02e7191a86656b0d72b2cbb53c4908ca206f75734b27708154fcd8a97429cfd1f2da2429778438003f5b5b9c21d9ed23b8ad8a228eb4f65c24c1c59699a5c90aff773e5c676db362a1930ba16aba76ef8daa42b3eb2ccc45c934d23d4929a7ad9e3ef468b06a4995c80dd236a7bcf3879d8b79467f72b3384c160cc181714e92f2035e7b972a2cc5242d932525eae7c50bd263b0fa09cbd9d6f984b9cf6152d9a133c27843202d1e87fa5a6e1235d9c756bb8e68b05b98da54195223fdf0210253250633c11c5f60b5e67d7eefcaa6c2daa523137\",\n        \"signature\": \"9c6989cbe17e16caa253ffb1a64a106fb01782c99b1722baf1acaa42ae5b36b79b2a2cd8fc91f5ad8923817025a77825a05df8c417ec53c4a3aa1c0efd5bbe0f\"\n    },\n    {\n        \"secret_key\": \"da013221b2f588af40e211a0f975d44f9d65028160514c396189f27c7b0666ea\",\n        \"public_key\": \"07117c6b0db5b6fda1edc4396c47c22b54ee0ce5375c3ec633c83afc53ad6ce4\",\n        \"message\": \"bc93ee1ec4728ac636a6248fcc4551c9d15980db8e5f54b0ef075a71970e176a3cb9182e32da7a8c2ac0cd7e595774575f9c83506a606face89512135d032ab05e39fff9c8ca6c25cd5d78ecc3ac323290c9c81626735e190eb5ae345ca7a958409f7743b0b1614916832217c57eee1b4f8e622ac052a93dd5b39d0761e40e9fbd8396f60a3bf6660c5fa99cd8139f68cbe0894e5c67e168cc74b2724e9d91d6000a0cec587a11463f72ee6ed255bd87eb30fd457596f688ca0ea73f30497238de21c93fbb1294db61e4a56089106d1cf7ce5a65ec3d12170ce7840f088a8d0e3aef17e531de478003570258e927f156e7961065afa666af38582b353cc477ba775cae45946d08db75215914da3261b62294e92afb381459c21dda4ea6ed795f79257c094dd608dc8e1b7c40cd29fea222088f65697ea88895d10acea8797360dcbacee269c606600adffdcf9c7c381d0ad6696967d9ff03e61a24906502b295e76f4d0875655b01e6ffcacc8ef01129c72a5846b60ec80017374e75d306403d9eccf26495d298120a0633835c5d1eff17c9c62476f752c89710adfa4d51617b5918173cba722540e388ffbffb966874db00404d06b0ce1139ba74143c76b8f4d33b2116e1cce175173a96fc151ea239bfc20d66fbb6f52a666c0e81cc2b80209106e2480e4111c70e7be4aabb68422f0b8c6ba15c142f82e6c7f378d7800a09eaa4da253c2fd91e1263c6b655bf70255d7e3bb4775523a0a9e7ff03797ee3ffca8a50d10f20d5e5a889ec5e334ef26cf7998b0836f656456888e137f39d3e43e2ce3c6ef540d95d9a20c42cb8ae2d9d0f25a891c363ead9cc423f9a323fe232281fb67f5be1c0784361460468a87e95dfa35d7f0ffa2211be6b5fb32d42ba6518ab6ea93780f431d3006731be4440e712974f74baea419f4022fa2502e1b2398e9386167d93eca92ca60dd7d91fe82324f682d94aa7a86ab034f8a9e952e8fc95bff4dfed6a43313abb92401b30c33c79a7ba3efdbe1628040fbaf443f3f980846fdb283dccd93fab09708b7d54861d74b1fe8f10701f211ba3d390e8a6ae407739646a79a58337a717a872009c2df6761c2425a32a0018aaf9646470cbc87c3a65c0e0effbaa528fe4783c772ab266b8f28268cf14af234b15816d1a3a491af5f297e33d5729715d512c373fef5ecc3f3954a60a2a0f64d829474119ca1a18f10578d04d638d5eeafc371a946f6ce7efbd2acce34e20441cde9a37d5a87dc619b0a727596cd12e15cd9784bb91f1399a59fc0a7a4af68b0d575d93387172973375c465df5d2d5e061a2a9b23b4915a0a8b8c1f0942094af728c8c31145fa7aaf74a21a3b032bb09c392205bf095bda986e5dd6627c1e417f650326dfe3a9c9994c6e0e01276f91f2987d2b85deda965491\",\n        \"signed\": \"10cb52d610e4a81d32869bffce3807e6391f782fcd538b554d09037fda72285b9662b1b1107c408178ac009f0525967388a7d85fa12359d3ce3875037dcf6a04bc93ee1ec4728ac636a6248fcc4551c9d15980db8e5f54b0ef075a71970e176a3cb9182e32da7a8c2ac0cd7e595774575f9c83506a606face89512135d032ab05e39fff9c8ca6c25cd5d78ecc3ac323290c9c81626735e190eb5ae345ca7a958409f7743b0b1614916832217c57eee1b4f8e622ac052a93dd5b39d0761e40e9fbd8396f60a3bf6660c5fa99cd8139f68cbe0894e5c67e168cc74b2724e9d91d6000a0cec587a11463f72ee6ed255bd87eb30fd457596f688ca0ea73f30497238de21c93fbb1294db61e4a56089106d1cf7ce5a65ec3d12170ce7840f088a8d0e3aef17e531de478003570258e927f156e7961065afa666af38582b353cc477ba775cae45946d08db75215914da3261b62294e92afb381459c21dda4ea6ed795f79257c094dd608dc8e1b7c40cd29fea222088f65697ea88895d10acea8797360dcbacee269c606600adffdcf9c7c381d0ad6696967d9ff03e61a24906502b295e76f4d0875655b01e6ffcacc8ef01129c72a5846b60ec80017374e75d306403d9eccf26495d298120a0633835c5d1eff17c9c62476f752c89710adfa4d51617b5918173cba722540e388ffbffb966874db00404d06b0ce1139ba74143c76b8f4d33b2116e1cce175173a96fc151ea239bfc20d66fbb6f52a666c0e81cc2b80209106e2480e4111c70e7be4aabb68422f0b8c6ba15c142f82e6c7f378d7800a09eaa4da253c2fd91e1263c6b655bf70255d7e3bb4775523a0a9e7ff03797ee3ffca8a50d10f20d5e5a889ec5e334ef26cf7998b0836f656456888e137f39d3e43e2ce3c6ef540d95d9a20c42cb8ae2d9d0f25a891c363ead9cc423f9a323fe232281fb67f5be1c0784361460468a87e95dfa35d7f0ffa2211be6b5fb32d42ba6518ab6ea93780f431d3006731be4440e712974f74baea419f4022fa2502e1b2398e9386167d93eca92ca60dd7d91fe82324f682d94aa7a86ab034f8a9e952e8fc95bff4dfed6a43313abb92401b30c33c79a7ba3efdbe1628040fbaf443f3f980846fdb283dccd93fab09708b7d54861d74b1fe8f10701f211ba3d390e8a6ae407739646a79a58337a717a872009c2df6761c2425a32a0018aaf9646470cbc87c3a65c0e0effbaa528fe4783c772ab266b8f28268cf14af234b15816d1a3a491af5f297e33d5729715d512c373fef5ecc3f3954a60a2a0f64d829474119ca1a18f10578d04d638d5eeafc371a946f6ce7efbd2acce34e20441cde9a37d5a87dc619b0a727596cd12e15cd9784bb91f1399a59fc0a7a4af68b0d575d93387172973375c465df5d2d5e061a2a9b23b4915a0a8b8c1f0942094af728c8c31145fa7aaf74a21a3b032bb09c392205bf095bda986e5dd6627c1e417f650326dfe3a9c9994c6e0e01276f91f2987d2b85deda965491\",\n        \"signature\": \"10cb52d610e4a81d32869bffce3807e6391f782fcd538b554d09037fda72285b9662b1b1107c408178ac009f0525967388a7d85fa12359d3ce3875037dcf6a04\"\n    },\n    {\n        \"secret_key\": \"5a868fb75ea0721f7e86c7bc106d7413c8cf4d033ce14005df23ce4c155bbd27\",\n        \"public_key\": \"6d1e29f39deda2bbfbb57cb01cb39e58808278e5196ada1c027646f20487d252\",\n        \"message\": \"d5aa11825b99448c80630623d8c746017cfe3de6fa8a0c6ed6627127cfc1f84d4e0a54e6a7d908d3719f1421d1d4c78b3cdd94769ab6033bce979dd90e106802eba9a03295d48f9b9a95d57ee7745402a48023bf3bddd5c6b91c773e491913a38ac3462605cf282deac75742fbd27529276e81dcce8dff9605035e8cf05df6a43db151f0415765bcbd1f1bb668ad6273b891c0dc4f3dba590ea82f8363769b9c77511947117375dc4904d48b88b68a255b28011b11048194093e98207ab1cf756ab8331f8d6f9d5be2e1190573e95e710f2a3501b53aa0825d6c12dcfb94ac80dc1082cb4ad262e6d493adceb6bc19145fbf738df76f2134fa04cbbe44ffc55ffe5f9d3e9bebd159a001aa9bf78892a16538a520823cde5d61e29a56a77ab96e49e300d9865962c7e7fb8bcf5de0b938297c3f4d6f6021e24dfdad9861652f340f421e7af2c71ed9a71587fc753b115549b2f7f7cb29690ea2b158a94cd2bc42e7063d619b939d523e3c237eb1f40810de0b44aa6937863d629edd5575e6c0475261b627473092775c84360011d57c57209c2e875a3f8963e8b241a7aa75ef30c4a718ac4dd466dc7a3e40e5874f157a849ed3a3a9d4aeb7d94df09bb55a0b2bc9f8b695c37179302367606367c5f324828ce75a944f50703a47906a8088f3a11cfe4a854e01f1741252c486337d06b1cc6c6b9b1295431ee07359357b3a78ef5075b65d7fed5eb742e5101598444b46623f89a303acc10c732449513b70dc456a79d37c48e5e726c2f558da0a1c46efbd2d920326a678b8a22f0944be4af55b6c71f453fbae400e6acc04e0e95ca200167e96ee98ea839316da93a12c2d76f11aeebeb78e65ea48f7feebbb137b2ac67eaef02a2d9e6471dd634a037d4f5d35a2f78af41a8ea5af5bc8150a99ed68a6a0ccff2b1d7965d8bc3ef9285ba6421d87c33aad8103a587be01926845bfbddbafc69c4b9252886720d418509f40f3dcf55765dccc3deed8277215e69f056ba31b8a30b50094ea8f144720760c8f8c055cf1a86964ffcbb8ee1bb2181276ea99a7b8e71067fa310ba4471e84279037bc492a55de205548e77b014504ee6664c4988cbb9ed91ff32e2259ed4cfd61a197d0dbc32c68f6549c0d29fc45f36acb26b164de97ccdc37900d93cdbcf9687ef53f1f4da1b1ae4225b884209e81ba4311520477ed4211b09240bd7b825e54739fe25d8624af04b86f6d1106d18170e5064d1a73c1fb1a27b289a948d771a2f6b8b09a635db96c6251c35a1876d369626699416c0e40298a681fdaf5255f58c2557759d8f5df148dec9dbe1ce6df041c36f83e69ccfb4aaca5cb48fa6a85c8ff66061524d8b11bd7ffaed99d0cd45c42010f21d36cc316ca860955635bffaa7d9aac572dccf3153d42ee8a2b12baa57c160bd0ad\",\n        \"signed\": \"38c48dba99a6524a188d5cd78a98e677dd263ef6b4df446b310b3dd89cafddb9b17a65bba8e13968bdc25b1d84b6e2436edf31aa756e3a48726d6f91c808ee0ed5aa11825b99448c80630623d8c746017cfe3de6fa8a0c6ed6627127cfc1f84d4e0a54e6a7d908d3719f1421d1d4c78b3cdd94769ab6033bce979dd90e106802eba9a03295d48f9b9a95d57ee7745402a48023bf3bddd5c6b91c773e491913a38ac3462605cf282deac75742fbd27529276e81dcce8dff9605035e8cf05df6a43db151f0415765bcbd1f1bb668ad6273b891c0dc4f3dba590ea82f8363769b9c77511947117375dc4904d48b88b68a255b28011b11048194093e98207ab1cf756ab8331f8d6f9d5be2e1190573e95e710f2a3501b53aa0825d6c12dcfb94ac80dc1082cb4ad262e6d493adceb6bc19145fbf738df76f2134fa04cbbe44ffc55ffe5f9d3e9bebd159a001aa9bf78892a16538a520823cde5d61e29a56a77ab96e49e300d9865962c7e7fb8bcf5de0b938297c3f4d6f6021e24dfdad9861652f340f421e7af2c71ed9a71587fc753b115549b2f7f7cb29690ea2b158a94cd2bc42e7063d619b939d523e3c237eb1f40810de0b44aa6937863d629edd5575e6c0475261b627473092775c84360011d57c57209c2e875a3f8963e8b241a7aa75ef30c4a718ac4dd466dc7a3e40e5874f157a849ed3a3a9d4aeb7d94df09bb55a0b2bc9f8b695c37179302367606367c5f324828ce75a944f50703a47906a8088f3a11cfe4a854e01f1741252c486337d06b1cc6c6b9b1295431ee07359357b3a78ef5075b65d7fed5eb742e5101598444b46623f89a303acc10c732449513b70dc456a79d37c48e5e726c2f558da0a1c46efbd2d920326a678b8a22f0944be4af55b6c71f453fbae400e6acc04e0e95ca200167e96ee98ea839316da93a12c2d76f11aeebeb78e65ea48f7feebbb137b2ac67eaef02a2d9e6471dd634a037d4f5d35a2f78af41a8ea5af5bc8150a99ed68a6a0ccff2b1d7965d8bc3ef9285ba6421d87c33aad8103a587be01926845bfbddbafc69c4b9252886720d418509f40f3dcf55765dccc3deed8277215e69f056ba31b8a30b50094ea8f144720760c8f8c055cf1a86964ffcbb8ee1bb2181276ea99a7b8e71067fa310ba4471e84279037bc492a55de205548e77b014504ee6664c4988cbb9ed91ff32e2259ed4cfd61a197d0dbc32c68f6549c0d29fc45f36acb26b164de97ccdc37900d93cdbcf9687ef53f1f4da1b1ae4225b884209e81ba4311520477ed4211b09240bd7b825e54739fe25d8624af04b86f6d1106d18170e5064d1a73c1fb1a27b289a948d771a2f6b8b09a635db96c6251c35a1876d369626699416c0e40298a681fdaf5255f58c2557759d8f5df148dec9dbe1ce6df041c36f83e69ccfb4aaca5cb48fa6a85c8ff66061524d8b11bd7ffaed99d0cd45c42010f21d36cc316ca860955635bffaa7d9aac572dccf3153d42ee8a2b12baa57c160bd0ad\",\n        \"signature\": \"38c48dba99a6524a188d5cd78a98e677dd263ef6b4df446b310b3dd89cafddb9b17a65bba8e13968bdc25b1d84b6e2436edf31aa756e3a48726d6f91c808ee0e\"\n    },\n    {\n        \"secret_key\": \"c54bd3431f2659281d31e93b30787668bcba6e5ee47db46e50deabe3f48c9ed8\",\n        \"public_key\": \"1eba6eb3f7f24cdf80abf8a19d308c24f1e25ba15970eda7116707b0f12cf932\",\n        \"message\": \"6f8cdd75e1b856bbbe9cdc25537fdf7e8236cb029acd3984492110d0c30441d42184b5fb183da9f3140378dfa7d74ccc9ef500193cc9579fffa60bd2a8ab9e09581500cf06cd35abc171d9d12c6580d9682f9f49fe36d0a3177238fa50e7eb4c27e460f5e4580a56568a19e03d95b0ff4f4a231824cd2f3442e0ba400bc11b7a989d501f5df35e4301508f72a852014bfbf4001e28095473d9659eed6067baf68f92bef312c09b19aaf7c4fba3d902b9f6cf952eb9b9a53ca8bcbd042d842e9853b672a1d009d823838bebe5637c4c07ed1b1948554b23b32de1d6c116f933b354f28bbb779fa6548c48292b612c7f551a75fbc46c02736bf99e9c8ead56f05ab0427a6ec616e3dcc7757efdb7628d4e96325fe0ae254cef5cb7a704b35a920cb3fa2a03e961daf371821be0b30f19ae4952441e08a7d22f5431390a5be8097fd5797a1a6297664da42c2008d0321060ebe3181eb795a728925808da7867293b7208f377d3a771185e6d2c1c8ce18376fe3c0c1458c7f5be34f428a0d575931074c97cbfce8ad81313ecca73a9f3db434fbad4bbbff502bf7297e17a97a8864211e6789ba192036ea59a34d84ff2a111074c3f2373b10111b5daa789560cb35490954c88ea00c410df850ad00cae2f28e719fb06716988a9bb0bfc6c989d587e5685ae883c2c2e74ddbf915c9856aae8f3288fc625bfb2fe268d74f59f8b7d8363749769169007d5e67b7d0b8c8f5a9d9f9c7b745c0a4294762cbeca42d5384961e921a7efb65da8d1e03b6745cdf308097fb13d64fd2f8c10fa9509eb2d91387f00645ca7d0483b2cd14c206b8d7ae0a3fb7c09bc6843d102adcda19f8bbd851eb683c4435ceb4b3d23d38f56d4d1114eef0fc6f24df52770d8f1f3f82f4720e892b315244ef56c36b23fcd407978524140382e11740fd46fe4299923f52b88b4a9cff4b2b4b23a2e760ad81c78ba876931d9aaa4beed40fb10a799eb30d37f754778bac85bf0631d852be7d74a6431f384a4025c1091421d67a4e9c94c1be3690c6bf81d06bdaf32feabbaf1dc263f273a0b9ed65460baefcefcf6acccda0edd23df9e05128e29d661c4b44bd92d640faa853afd8370e563b40ae0149a1428e06e3dd8e66b79da21cc753ddc476e3d76e2f36f2b6c6bc1b65087d5f86c8ac354711a8c08f3486e479d6ae943f8846332d4e5b4bb2e8257e3083df4f81dd4f0c1ee1d97182166161a18597ee0b959de1c45591abf7c51033d7c66352deeb682e777aeae2fa8d3a77f470db78ddc1b1fc82840c4065776d9bfca9d392d9288ee9132aa3e4f2d19d0d93e01b666f3647abaf225c292419c8a82eba3e11ab103846fcd4935f41241477c0f152b7965ad54bb72bc3de2e0b79d6225e8fa7a6286b5fccbb35822e80c8bfea74cb48a22d241385395c2\",\n        \"signed\": \"df4541dff1a9797feb617f98e4b57aa7714131ee8ff545ed5082e3568efd1c399cdc56f5582991eb8785fb33864eef7f553f3e248262ed548a1a6888f92e920e6f8cdd75e1b856bbbe9cdc25537fdf7e8236cb029acd3984492110d0c30441d42184b5fb183da9f3140378dfa7d74ccc9ef500193cc9579fffa60bd2a8ab9e09581500cf06cd35abc171d9d12c6580d9682f9f49fe36d0a3177238fa50e7eb4c27e460f5e4580a56568a19e03d95b0ff4f4a231824cd2f3442e0ba400bc11b7a989d501f5df35e4301508f72a852014bfbf4001e28095473d9659eed6067baf68f92bef312c09b19aaf7c4fba3d902b9f6cf952eb9b9a53ca8bcbd042d842e9853b672a1d009d823838bebe5637c4c07ed1b1948554b23b32de1d6c116f933b354f28bbb779fa6548c48292b612c7f551a75fbc46c02736bf99e9c8ead56f05ab0427a6ec616e3dcc7757efdb7628d4e96325fe0ae254cef5cb7a704b35a920cb3fa2a03e961daf371821be0b30f19ae4952441e08a7d22f5431390a5be8097fd5797a1a6297664da42c2008d0321060ebe3181eb795a728925808da7867293b7208f377d3a771185e6d2c1c8ce18376fe3c0c1458c7f5be34f428a0d575931074c97cbfce8ad81313ecca73a9f3db434fbad4bbbff502bf7297e17a97a8864211e6789ba192036ea59a34d84ff2a111074c3f2373b10111b5daa789560cb35490954c88ea00c410df850ad00cae2f28e719fb06716988a9bb0bfc6c989d587e5685ae883c2c2e74ddbf915c9856aae8f3288fc625bfb2fe268d74f59f8b7d8363749769169007d5e67b7d0b8c8f5a9d9f9c7b745c0a4294762cbeca42d5384961e921a7efb65da8d1e03b6745cdf308097fb13d64fd2f8c10fa9509eb2d91387f00645ca7d0483b2cd14c206b8d7ae0a3fb7c09bc6843d102adcda19f8bbd851eb683c4435ceb4b3d23d38f56d4d1114eef0fc6f24df52770d8f1f3f82f4720e892b315244ef56c36b23fcd407978524140382e11740fd46fe4299923f52b88b4a9cff4b2b4b23a2e760ad81c78ba876931d9aaa4beed40fb10a799eb30d37f754778bac85bf0631d852be7d74a6431f384a4025c1091421d67a4e9c94c1be3690c6bf81d06bdaf32feabbaf1dc263f273a0b9ed65460baefcefcf6acccda0edd23df9e05128e29d661c4b44bd92d640faa853afd8370e563b40ae0149a1428e06e3dd8e66b79da21cc753ddc476e3d76e2f36f2b6c6bc1b65087d5f86c8ac354711a8c08f3486e479d6ae943f8846332d4e5b4bb2e8257e3083df4f81dd4f0c1ee1d97182166161a18597ee0b959de1c45591abf7c51033d7c66352deeb682e777aeae2fa8d3a77f470db78ddc1b1fc82840c4065776d9bfca9d392d9288ee9132aa3e4f2d19d0d93e01b666f3647abaf225c292419c8a82eba3e11ab103846fcd4935f41241477c0f152b7965ad54bb72bc3de2e0b79d6225e8fa7a6286b5fccbb35822e80c8bfea74cb48a22d241385395c2\",\n        \"signature\": \"df4541dff1a9797feb617f98e4b57aa7714131ee8ff545ed5082e3568efd1c399cdc56f5582991eb8785fb33864eef7f553f3e248262ed548a1a6888f92e920e\"\n    },\n    {\n        \"secret_key\": \"ea60da0179bcaf6b218142b1119046ffe6d85a741b0d166230bc6de3304f6773\",\n        \"public_key\": \"506b2ebb49bd9b9ff66e6b7b1fab9668cb181b4fb5e4343dddd3f8a9d702031c\",\n        \"message\": \"612d6ef6e4349ffae516e983e8fa7b52d9fd134282240d95143824bd4aae03234b76a8cd6d4068cf009e481c2685361c755042c4e6ab8703ecbf8f020cf5739a4c2a03c3731e9cf75aee25966153b9711515c6c39afa95f221ac3395b089c97ac9b514e17d55f796a3ecc135faaaee907aab1029647b48ac81749bab26627cf7095d74c2fcee35671c8bb46053f5151b0c2e5dabe0f2d6aa20413305020b2afd9ee3387b2c9ed0bc3fe2902af4100cec23327b0f1e4ca39ef6eaf6fdf5d5acf93fc868536d8cba401769329fbe93effc7ee6bf93a6e588bd551eaa512853952c81b245e5d229d294e41370b867808667887a6f9eba2a8d56a7a704e66b1c02f96e73895f483e44a5c566cb1af26573bfe2afce06b1fb5877e51ef3126a3f210fbf213ed65d5ca46c46ce4aa945bd8ca611e3836250f564f7ea35423982f9705fcd6bef46ae16cb0f6bc912c3f28642b8d87775b818e4e4e8061167899bd27a7e2fb8187ee9917d2d586bf9d499e8fabca83ddf58c7437eaacec4f444fb2bf745dccd8cae38944571dede2037dc41f0818a3d91e3020a7274c6674247876083d0e39746c9684061bf74ad588436ce1b763dbf4bfcf8de6e35c5a7626675c127292b21df3c16f81063322a75f3438886f1f0cebfc1a96f41384cbdd861b04f519ff6a9344d94f3d3a0aba8409dfcf18d01f2b5b455171639eea77dee706ea83dcd2b8b1fc5ec0d740761a5f05f7ec8d87ad1f292a50c8bae0ad32b03419a950d9fe3b3ecc4d8d3aa95e02b51b1831d83eadeaa44238635f9c65efe2f6744a70b9ae41ef15d97908c0533934412f79583d0e9b3d706a128e88fb51eedb65e46d8a2b38bbdd6455554967a8dc0c68bddfeae0f8f72f0b886c3c741fac4f91e5c491dbae9da4594836cf1d9fb6ee130025089aed350ef247bc9887a2050159dded1428ffd9b07b9ec2e3d4bbdc2ddb54e873b63f2475233e19133a14b6658509457008186d6225995a96726b529f44281aa24fefd1cff8f815d93a5986931662290b3ee16833c60f0afcef2cbc000623f3931909ca976a094e2b0fdb7dcf7c485e14988a36f19b66425385f5632cef65d1d3414623ae3ee816e763a5f606466622be6602114502951cf0c097c1648a72e2c43d9afa9689f2c3cfe026cdce3bd1bf9ebf777562ecd8ff1b0d775306d900443f30a843310b8de6a38ff108b723913d7899b9fbe7c3d766ef8bdfb6d8b0b52956cb1cec9936d70b487c01440a842b2fabe38e7b8851a387d358be7ef12a7e4f2b527e83090d67eb013c9c2cfd3de5a1a3f99748a41f4819d9036e500c504c988bfd24f617d6ebdcab2ddeaa61579414f360b469a33a6ded96ba1d8c140c4ffc94990d8adf78cd38780bd68663d1a0ee33f537cdf892d562e82dcd1d912cad38d65567d291406\",\n        \"signed\": \"27fb6b5f06528a64198a3e7d67c738840a8cff4b482b4d524b122d17d2aebcc0389be2c6e28e2cdfc484c18de425db56cdfa561c507cd970602d3a385d3aea0f612d6ef6e4349ffae516e983e8fa7b52d9fd134282240d95143824bd4aae03234b76a8cd6d4068cf009e481c2685361c755042c4e6ab8703ecbf8f020cf5739a4c2a03c3731e9cf75aee25966153b9711515c6c39afa95f221ac3395b089c97ac9b514e17d55f796a3ecc135faaaee907aab1029647b48ac81749bab26627cf7095d74c2fcee35671c8bb46053f5151b0c2e5dabe0f2d6aa20413305020b2afd9ee3387b2c9ed0bc3fe2902af4100cec23327b0f1e4ca39ef6eaf6fdf5d5acf93fc868536d8cba401769329fbe93effc7ee6bf93a6e588bd551eaa512853952c81b245e5d229d294e41370b867808667887a6f9eba2a8d56a7a704e66b1c02f96e73895f483e44a5c566cb1af26573bfe2afce06b1fb5877e51ef3126a3f210fbf213ed65d5ca46c46ce4aa945bd8ca611e3836250f564f7ea35423982f9705fcd6bef46ae16cb0f6bc912c3f28642b8d87775b818e4e4e8061167899bd27a7e2fb8187ee9917d2d586bf9d499e8fabca83ddf58c7437eaacec4f444fb2bf745dccd8cae38944571dede2037dc41f0818a3d91e3020a7274c6674247876083d0e39746c9684061bf74ad588436ce1b763dbf4bfcf8de6e35c5a7626675c127292b21df3c16f81063322a75f3438886f1f0cebfc1a96f41384cbdd861b04f519ff6a9344d94f3d3a0aba8409dfcf18d01f2b5b455171639eea77dee706ea83dcd2b8b1fc5ec0d740761a5f05f7ec8d87ad1f292a50c8bae0ad32b03419a950d9fe3b3ecc4d8d3aa95e02b51b1831d83eadeaa44238635f9c65efe2f6744a70b9ae41ef15d97908c0533934412f79583d0e9b3d706a128e88fb51eedb65e46d8a2b38bbdd6455554967a8dc0c68bddfeae0f8f72f0b886c3c741fac4f91e5c491dbae9da4594836cf1d9fb6ee130025089aed350ef247bc9887a2050159dded1428ffd9b07b9ec2e3d4bbdc2ddb54e873b63f2475233e19133a14b6658509457008186d6225995a96726b529f44281aa24fefd1cff8f815d93a5986931662290b3ee16833c60f0afcef2cbc000623f3931909ca976a094e2b0fdb7dcf7c485e14988a36f19b66425385f5632cef65d1d3414623ae3ee816e763a5f606466622be6602114502951cf0c097c1648a72e2c43d9afa9689f2c3cfe026cdce3bd1bf9ebf777562ecd8ff1b0d775306d900443f30a843310b8de6a38ff108b723913d7899b9fbe7c3d766ef8bdfb6d8b0b52956cb1cec9936d70b487c01440a842b2fabe38e7b8851a387d358be7ef12a7e4f2b527e83090d67eb013c9c2cfd3de5a1a3f99748a41f4819d9036e500c504c988bfd24f617d6ebdcab2ddeaa61579414f360b469a33a6ded96ba1d8c140c4ffc94990d8adf78cd38780bd68663d1a0ee33f537cdf892d562e82dcd1d912cad38d65567d291406\",\n        \"signature\": \"27fb6b5f06528a64198a3e7d67c738840a8cff4b482b4d524b122d17d2aebcc0389be2c6e28e2cdfc484c18de425db56cdfa561c507cd970602d3a385d3aea0f\"\n    },\n    {\n        \"secret_key\": \"b62c241878273513e0bf6f33d2104365b2ce9c5a1b786058e9c5b4d1d192f87f\",\n        \"public_key\": \"bbf6fc5198f3fba5ab007f8a632d28d1af865d290fa0a90faa9a9b5b9c13f3fb\",\n        \"message\": \"26a3c26a5a189cad407cbaa3a6867ac0a26088c75f9d0fa19bd50274cec5755a497109a473284d6fc81ad4b9ec29fa7ec9764fd3099f060e36836552ff2413e3d5095fe0b1a8bfcf67ee06aa9032e7bb3249698047714d281415273c9834ad9eb665a7d97220e72d9ca73f31afa7738675ba3162efefe7479a5bc4bce2e8b7af4741d703dc9bbd60b4cf4b9087f6cf86cf53aed02bf4ca6a18f607cb52a303d78e85ad88fdfc86dcb7187727b03be227745bea744fd006525bc59a4dddab915cef40a8f30802913b7913eaf974336552e2f1456ad803dc58c9b4b18efaf7f7e357e2cd77d138d90080e296d1364a2f324d3e0d6edc20b8bdaa9d2e871f5e7b051fb6fcdb5595f21d3f8de29fb78678fa479eaa32579c784d513ac5f836d954d0d3fc0e5fc8a6eeab90202b4c4a2bec24cf63ea67c470096218cd431e883105fc9c27f9ea77c18eda69bc00a2242bd420f095c9b9a92d956ccc5a8572b057a7fe173eeb2a3166cb2089d113a816462b25805b8abaff5b0b2287c508ec2b8c34b2195c332870d3cc396017a16b9e0da6182d071d3bf363d3f1e7b7da11d711250a58afd74ed3e3158d4718bad4d274bb3444cfc318074b53beba44a2a34ff8eb726e4a1daa911051621651898b887169f62b9c0f4020483ef544f8f572fa6a6640a4cffce976cb7024f847bdc95d1d7ce653505debfc6988ed289dd47a9eb261259e3e65e45fc9d714946935cd8ea13bc6db5eaab9e8b10dae0fdd6979c2035cfb8098252f2205443b808816bf7787b7f1e78bc98a7285e733d45fc4610c20977ca3229889bb8cd2b694ce9e3fe78303af83e106422542fb7961d32eb1d2c5fbe60751674b074773ee0616e02973f6a74a3ae4664a2650915a3e10493b9e66a39fa5c89c61d44735f107d33757ae679b43a8d43a01757ae1f3279e862442e150715550ee82e49c0d4943faf13f22791f0e66f24ac50ab3c003852b21e15b2f006edc2cd6a879c476ab5b352eb1099dad4c50372400faa5498d78c6b857034c25caf7b933faf6bd7c59fa3da57397b603de9cb9d80e51f7997baa462acd537e2c4194c76c7e0be6512bce4d63660b36c7cc46631fb9671ad8c5d28e2f2ee2edce81954421b8a3d9ff6f66699f4bce88bcb8ef192c262a74ab7e191eee9101a28d4b66282b5122093d141c6496c7aba4d352e472ee7440e05af60da0cfc93e303642ba8fb8e5c568687abd63afb3ed6a32b6dae56a7e5d73debaf41d35ca36adb97a22c0adbe718bec1fa51998de9b4b96a79c5b9655b0165d5e1b9a8cc552e8c9329ede58df74c67b2ba1a842fd3e8158c1fea3a99b56a2c2a96207853d26022cec170d7e79944d2f56aab1f191bfd48d725490ca82b8d906f0680e69eeb9575774fb9d604513fbc26f5d303b6885cac0bf8efee0538f92\",\n        \"signed\": \"c59039587b38dc141e055a93850104d629e380705b8fc918847c5e2a352da3a02fce7f7199f4ae2b1e2a59483418932e185f7e45b5050c642cecc7e78199850726a3c26a5a189cad407cbaa3a6867ac0a26088c75f9d0fa19bd50274cec5755a497109a473284d6fc81ad4b9ec29fa7ec9764fd3099f060e36836552ff2413e3d5095fe0b1a8bfcf67ee06aa9032e7bb3249698047714d281415273c9834ad9eb665a7d97220e72d9ca73f31afa7738675ba3162efefe7479a5bc4bce2e8b7af4741d703dc9bbd60b4cf4b9087f6cf86cf53aed02bf4ca6a18f607cb52a303d78e85ad88fdfc86dcb7187727b03be227745bea744fd006525bc59a4dddab915cef40a8f30802913b7913eaf974336552e2f1456ad803dc58c9b4b18efaf7f7e357e2cd77d138d90080e296d1364a2f324d3e0d6edc20b8bdaa9d2e871f5e7b051fb6fcdb5595f21d3f8de29fb78678fa479eaa32579c784d513ac5f836d954d0d3fc0e5fc8a6eeab90202b4c4a2bec24cf63ea67c470096218cd431e883105fc9c27f9ea77c18eda69bc00a2242bd420f095c9b9a92d956ccc5a8572b057a7fe173eeb2a3166cb2089d113a816462b25805b8abaff5b0b2287c508ec2b8c34b2195c332870d3cc396017a16b9e0da6182d071d3bf363d3f1e7b7da11d711250a58afd74ed3e3158d4718bad4d274bb3444cfc318074b53beba44a2a34ff8eb726e4a1daa911051621651898b887169f62b9c0f4020483ef544f8f572fa6a6640a4cffce976cb7024f847bdc95d1d7ce653505debfc6988ed289dd47a9eb261259e3e65e45fc9d714946935cd8ea13bc6db5eaab9e8b10dae0fdd6979c2035cfb8098252f2205443b808816bf7787b7f1e78bc98a7285e733d45fc4610c20977ca3229889bb8cd2b694ce9e3fe78303af83e106422542fb7961d32eb1d2c5fbe60751674b074773ee0616e02973f6a74a3ae4664a2650915a3e10493b9e66a39fa5c89c61d44735f107d33757ae679b43a8d43a01757ae1f3279e862442e150715550ee82e49c0d4943faf13f22791f0e66f24ac50ab3c003852b21e15b2f006edc2cd6a879c476ab5b352eb1099dad4c50372400faa5498d78c6b857034c25caf7b933faf6bd7c59fa3da57397b603de9cb9d80e51f7997baa462acd537e2c4194c76c7e0be6512bce4d63660b36c7cc46631fb9671ad8c5d28e2f2ee2edce81954421b8a3d9ff6f66699f4bce88bcb8ef192c262a74ab7e191eee9101a28d4b66282b5122093d141c6496c7aba4d352e472ee7440e05af60da0cfc93e303642ba8fb8e5c568687abd63afb3ed6a32b6dae56a7e5d73debaf41d35ca36adb97a22c0adbe718bec1fa51998de9b4b96a79c5b9655b0165d5e1b9a8cc552e8c9329ede58df74c67b2ba1a842fd3e8158c1fea3a99b56a2c2a96207853d26022cec170d7e79944d2f56aab1f191bfd48d725490ca82b8d906f0680e69eeb9575774fb9d604513fbc26f5d303b6885cac0bf8efee0538f92\",\n        \"signature\": \"c59039587b38dc141e055a93850104d629e380705b8fc918847c5e2a352da3a02fce7f7199f4ae2b1e2a59483418932e185f7e45b5050c642cecc7e781998507\"\n    },\n    {\n        \"secret_key\": \"0f77f77a1c7e04bda8e534f4e3eff9a238cc14876b7e3eca8bede1923a336406\",\n        \"public_key\": \"1045ea9fe214583a0cdbc494932bc44afeeb080bec485cc234fddcff139cce00\",\n        \"message\": \"0ecb746dbdb0161421afeb7adea7a37c2ea4408a592c9d781ed6ac6f4ee5cc65d5270e4cf27632f7c5c133d439b78d1f71aa6dd80713d90b151e19121bfa87710e84a4850a3b5b0265ba2603d0716e9b7e1122109c39c6f1027fce18798cbb4f6bc5e4d7aca4704690f5c981510871c313595798338681107f2b5794d46f6e0bde2cd064b3b1fc00ca47188bbbc1f4a0ce305cc6d8a896920eb9ebae579fd3385f8f1f35976288f4c58ffc4760f359b003c872e9a24055355ea9585e951069dca25fd0cc0b9db52aaeaf19d43f2eab4f835603ad12d2dc49b310256b94bed54896a16b69b09cb4c8ff5c23cce5593d87ade2a82ada50859e1544c18618a65c007ef424c9854a175b6e6c0e64b2c8eb8ad4d28b977d68e78169915198975394d3b9b269cab0d3261b2b56cd2cc4bddbd4f1439e0dbe2c9b3f3f7514edac5ebb4622b92a69a840a9028550b221db59ddfb001396f86392a17f08ccb194cd9e1a0081d7dd9cca2357feb8b795e517029f79c82a3be6f9a031dd1af1e79e4982bf8e76b310f9d355efcd5b1efa9f359c17cf3b510d513e8cd5786a0d3445dc59a8433a46488687b0f58b1bd6567c2af4873b51fc845e767e243005192f8f0674f281265a55d76cea322260c932cea6717adb98a2dda8c698e2e89255feb77da7648167bc1e58877feb72d1d14b0c304f07372d955675237c49f7a6dbc915e6814abae6cce4caf9f48087e9dfb282d8f340377c1e29c6731ccc2667da6695b712be0312d865111934f168d5544365ddae27abc64aefbcb322db7d97d90d957a637bd826c227e9eb180b45a431626a6fd890c0e5f4ed7e856474752f80b5aef6e73efdaa6c2c451bd74c1ef466ca3aaa2573bb52cb2b1ca96a1b574403ceae1cf05ffc53430e1e4cd5593bd1ef84bcbfe219f08160d166f2731d99b8d7a32b12991f77775a267ec08297ec512d7b72435632525c04000fb00a793f8b5f8f3747b55359df21b7e2c49f2b0b9ae082afc70a146871370b8d50086de00f9448be8902174ba2cc851fa379dd7031ca457a8869af4b6c2729dac519556b8bb4ab519ef1bb024ea8b7f01771c9aab748e57381a0192a6e398cbe6dd9f367cc7b3354f83b79bcda46b793a4ada85549c8d6bdd6168124362ff908aa1a0cb78aa330c42d5a5d481235acac3a919b969c50987266d404d15d0e706fd9007634f69e13c56ec47133884fcaddc16beeeed19e0cd917aa496367867dfcea274e1a47da774f3c9363021e7c8d6bf8f00053facc11cb68a9d6e1fc2d6d19175d6324ff7ca6c23058b8b693d8fd4e0b51dcbb113543f2fcc0452eb9d967ac0fa9b23e9e0b1da8d83a3c1fc9e9ec971f0f67fc745bb17376bc46245f528cb6e5fee11bcdda867b7f79019cf9db591858230aecb4d1e93d167cd86b42dd879a13fa0e\",\n        \"signed\": \"b20b9c4246f0d2970138af7dc9af629b68fbc37df87afdcadcb545c1768376a09c3babc3eb1af3b7519852f75fab1c9c119c662c5877fb2f7299cab57fad3d0e0ecb746dbdb0161421afeb7adea7a37c2ea4408a592c9d781ed6ac6f4ee5cc65d5270e4cf27632f7c5c133d439b78d1f71aa6dd80713d90b151e19121bfa87710e84a4850a3b5b0265ba2603d0716e9b7e1122109c39c6f1027fce18798cbb4f6bc5e4d7aca4704690f5c981510871c313595798338681107f2b5794d46f6e0bde2cd064b3b1fc00ca47188bbbc1f4a0ce305cc6d8a896920eb9ebae579fd3385f8f1f35976288f4c58ffc4760f359b003c872e9a24055355ea9585e951069dca25fd0cc0b9db52aaeaf19d43f2eab4f835603ad12d2dc49b310256b94bed54896a16b69b09cb4c8ff5c23cce5593d87ade2a82ada50859e1544c18618a65c007ef424c9854a175b6e6c0e64b2c8eb8ad4d28b977d68e78169915198975394d3b9b269cab0d3261b2b56cd2cc4bddbd4f1439e0dbe2c9b3f3f7514edac5ebb4622b92a69a840a9028550b221db59ddfb001396f86392a17f08ccb194cd9e1a0081d7dd9cca2357feb8b795e517029f79c82a3be6f9a031dd1af1e79e4982bf8e76b310f9d355efcd5b1efa9f359c17cf3b510d513e8cd5786a0d3445dc59a8433a46488687b0f58b1bd6567c2af4873b51fc845e767e243005192f8f0674f281265a55d76cea322260c932cea6717adb98a2dda8c698e2e89255feb77da7648167bc1e58877feb72d1d14b0c304f07372d955675237c49f7a6dbc915e6814abae6cce4caf9f48087e9dfb282d8f340377c1e29c6731ccc2667da6695b712be0312d865111934f168d5544365ddae27abc64aefbcb322db7d97d90d957a637bd826c227e9eb180b45a431626a6fd890c0e5f4ed7e856474752f80b5aef6e73efdaa6c2c451bd74c1ef466ca3aaa2573bb52cb2b1ca96a1b574403ceae1cf05ffc53430e1e4cd5593bd1ef84bcbfe219f08160d166f2731d99b8d7a32b12991f77775a267ec08297ec512d7b72435632525c04000fb00a793f8b5f8f3747b55359df21b7e2c49f2b0b9ae082afc70a146871370b8d50086de00f9448be8902174ba2cc851fa379dd7031ca457a8869af4b6c2729dac519556b8bb4ab519ef1bb024ea8b7f01771c9aab748e57381a0192a6e398cbe6dd9f367cc7b3354f83b79bcda46b793a4ada85549c8d6bdd6168124362ff908aa1a0cb78aa330c42d5a5d481235acac3a919b969c50987266d404d15d0e706fd9007634f69e13c56ec47133884fcaddc16beeeed19e0cd917aa496367867dfcea274e1a47da774f3c9363021e7c8d6bf8f00053facc11cb68a9d6e1fc2d6d19175d6324ff7ca6c23058b8b693d8fd4e0b51dcbb113543f2fcc0452eb9d967ac0fa9b23e9e0b1da8d83a3c1fc9e9ec971f0f67fc745bb17376bc46245f528cb6e5fee11bcdda867b7f79019cf9db591858230aecb4d1e93d167cd86b42dd879a13fa0e\",\n        \"signature\": \"b20b9c4246f0d2970138af7dc9af629b68fbc37df87afdcadcb545c1768376a09c3babc3eb1af3b7519852f75fab1c9c119c662c5877fb2f7299cab57fad3d0e\"\n    },\n    {\n        \"secret_key\": \"c5a5053477ae31158e7469dd1504867650d46f1589067f5cd881caf25c26cb21\",\n        \"public_key\": \"70f85db9807b26fcf3e6690b91724f7ae3d20ec3604ab7d6308d9094308b2d59\",\n        \"message\": \"8571ff3903486a43a6126c323e7b3a74141d1385d4bd703f19e2d1b64b50281d27168ae3e769c6dd9df7d97864fb37822f0021852e3168ab7d845a6545ed0c377d9f7c048a2b96e8dcf445779684a058c2b9c21ac68a0c341d1d6c0981456457458eb7cebf66678740777eca26e01e1c8f53b5d4756cc5f0b90f0c5db05393cd4b8e44f6810caa5a116a33577724395d413af619632a6fed14e215c2f19d105ce2bf1498e6d2ab4f650f61ba5cf6d0c73bbbde98e30429910a4e67dfbc717cb091182d597058b5d765d097e6875831b588aaeb3e7327e856b42fa983fd254ef1f918b043d1dd3d7b7e30b315386eec91e7f94d598f4beb3b27b42f4ee1fbf7afb486bdcc6081ccb867f04111044f4bbbe3c8122edeadefa9d693906e0d6e133bf6f2da6158feedbda024410f12086e7accf1c68e1557f00c14e9c7ea76a5ed1337a054ac2c949c05977e030274f6a4f2a6b30a15c570ec9433f74f47528087c9ce9a6292951c54354996fb283c0dc4cf33c001bc96875ea6e1f46f837ff18dd9545fb9934655342b12c2990b9f1c6ff4d66489d6aedce75c7cb03ac134bfd39b181dfb7f9a97ce737fe570ad5f81345939a6de5a40a33a0e44bf957503d5ca0283512e57fba8a3a6f2c390687b1b7708676e0fd03b7c188d4561c1879163eaf2b596ddd5f3c1f4dadbc139c2164892820b2fe09cbc3d19088076364510254f2b6d410329e70f2e5a945bbacd2ca89bd4b6e1f5e2e1d4f4ed2fe0113bcf32962f00d5c33b1df988402ba0dc8804c1af66ccae2670efa3134c67fc90feed8d8deedccf6a46f22940454af2bb6754cf235ddbb0001c6c741bf874bcd8d41d9dba8162581c3746d7f30e73def69415af5181c149914295122d45982f94943e20b0ffc7fe6ddf19a022e87a52133357a1e80f37f28a4c4a8a61c148dd875c1e8ecdcd840dd863e44d9bcb16b6e5af0147b34a7a9052c8d3f452013d2d354f6803f9eaf6056f3b013c616e47f398819146320a5e3dbdf16843ea29def262cc9a343672cf96bccc6e87e6a6baf0712e6ee89aa60489f17cb72ddc44bad161587d87f54d67cc0a2778497d831088315ffeee3d268c59befe884c3aa0e0ae2296bbb60eac9097cdf8dc0987ceb1742b0586dfce79ec10425b28f4e64520d712e3f46ea83be2de6a1574073bc5c7557b8e25b6411184ea283d8800232c79069421811f883c2994e7b7e2ad9f8dc489c9347724394609c98909a6c26017b50f20d50ccacbde36b76ba646a76dc6a5b0f50649c5658bbdfdd3b5cafc5479a2f48ee51542f23e9fc92132060fd635eff452111cdaf3efbdb7db9e7d4716d0d6011c29118a55d4c1a436abe24e3cbf40235b76dd1923503c5f3598124e2df55a2d1f246e90de4b71645d5175b61b0174e7e57df1285ccf8c86b8382c258079\",\n        \"signed\": \"f5191b44bd6cc3ea281771df12549ba2be228b51eb791b9e5ed2815f862aa630b56967cdef8b6af0b9d21ab8c97a6dff681cced9f5019713d4357cb3e54c0d088571ff3903486a43a6126c323e7b3a74141d1385d4bd703f19e2d1b64b50281d27168ae3e769c6dd9df7d97864fb37822f0021852e3168ab7d845a6545ed0c377d9f7c048a2b96e8dcf445779684a058c2b9c21ac68a0c341d1d6c0981456457458eb7cebf66678740777eca26e01e1c8f53b5d4756cc5f0b90f0c5db05393cd4b8e44f6810caa5a116a33577724395d413af619632a6fed14e215c2f19d105ce2bf1498e6d2ab4f650f61ba5cf6d0c73bbbde98e30429910a4e67dfbc717cb091182d597058b5d765d097e6875831b588aaeb3e7327e856b42fa983fd254ef1f918b043d1dd3d7b7e30b315386eec91e7f94d598f4beb3b27b42f4ee1fbf7afb486bdcc6081ccb867f04111044f4bbbe3c8122edeadefa9d693906e0d6e133bf6f2da6158feedbda024410f12086e7accf1c68e1557f00c14e9c7ea76a5ed1337a054ac2c949c05977e030274f6a4f2a6b30a15c570ec9433f74f47528087c9ce9a6292951c54354996fb283c0dc4cf33c001bc96875ea6e1f46f837ff18dd9545fb9934655342b12c2990b9f1c6ff4d66489d6aedce75c7cb03ac134bfd39b181dfb7f9a97ce737fe570ad5f81345939a6de5a40a33a0e44bf957503d5ca0283512e57fba8a3a6f2c390687b1b7708676e0fd03b7c188d4561c1879163eaf2b596ddd5f3c1f4dadbc139c2164892820b2fe09cbc3d19088076364510254f2b6d410329e70f2e5a945bbacd2ca89bd4b6e1f5e2e1d4f4ed2fe0113bcf32962f00d5c33b1df988402ba0dc8804c1af66ccae2670efa3134c67fc90feed8d8deedccf6a46f22940454af2bb6754cf235ddbb0001c6c741bf874bcd8d41d9dba8162581c3746d7f30e73def69415af5181c149914295122d45982f94943e20b0ffc7fe6ddf19a022e87a52133357a1e80f37f28a4c4a8a61c148dd875c1e8ecdcd840dd863e44d9bcb16b6e5af0147b34a7a9052c8d3f452013d2d354f6803f9eaf6056f3b013c616e47f398819146320a5e3dbdf16843ea29def262cc9a343672cf96bccc6e87e6a6baf0712e6ee89aa60489f17cb72ddc44bad161587d87f54d67cc0a2778497d831088315ffeee3d268c59befe884c3aa0e0ae2296bbb60eac9097cdf8dc0987ceb1742b0586dfce79ec10425b28f4e64520d712e3f46ea83be2de6a1574073bc5c7557b8e25b6411184ea283d8800232c79069421811f883c2994e7b7e2ad9f8dc489c9347724394609c98909a6c26017b50f20d50ccacbde36b76ba646a76dc6a5b0f50649c5658bbdfdd3b5cafc5479a2f48ee51542f23e9fc92132060fd635eff452111cdaf3efbdb7db9e7d4716d0d6011c29118a55d4c1a436abe24e3cbf40235b76dd1923503c5f3598124e2df55a2d1f246e90de4b71645d5175b61b0174e7e57df1285ccf8c86b8382c258079\",\n        \"signature\": \"f5191b44bd6cc3ea281771df12549ba2be228b51eb791b9e5ed2815f862aa630b56967cdef8b6af0b9d21ab8c97a6dff681cced9f5019713d4357cb3e54c0d08\"\n    },\n    {\n        \"secret_key\": \"05c719cae06e2bb7d87863ab3150272cb2f8c3aa2421912d87f98e7589638ce9\",\n        \"public_key\": \"90211796fed3d53b81f8feeb1bad1ffc933e5f10d3bc1b36ddf210a47923df03\",\n        \"message\": \"ec241918418e60522042e67339e6649499f31a6c7cf8925f1f61dde894603602ae8bb5f58809821f83344f23cd31e64ec9ffe79a986b7e29e4319a63414316bd6ee20e02a50da44012bd2d6f9f679e88ed0c8bb1e2cad55e565789883345b7546f3d54b1b362b1c650502c019d7313afbc82689b23a3a52d8f1af9f81e188dbdf203fb5300b4225bfb6773337be6750b3db88ce097343f62ee2c118574ef150cbd4c62760c3e43dcbc39218bd6d98565fa389811b1a674f617fd756733dcb567a92dbf3855b57b1f4a46d5b8974b39ac0d0e24d99d2037c04f60d9140f64b07a77d7eaa1ce8a78e844b1dcf0e37424f3f9d253a548561a0375a8d4341297bfedb7048c7935e1481418f9bba9271f9fd6026224e78e055d8a0939fa2fe1dbc0fc7b583e4cff3490e1d0f610b252e30d8497d00e4aacb375f19a4719f79ca1ea583a2f8b1406a4aa5cb55c08b6593b676eb5c34abe89392d62d23308a3348b57affbba7739cde8e1909d3425eeb20926a977d3a94a86e0ba10b386926698827e86b4fd6c6180047c87ec3b31619d05a9df34efd3d76a836962b2ef604d07af0975eb8f3dd22594323802564c929b3f65dacb572b32553d69b31a197690a9bb860b080a77cfbb3c175aafce0146a82a4d06e8c750521b726ef1cb29d021e5915e5e8462ede5395445245c9ae882eec4b1745e11791f7621d3fe702cac1525e1f7b46e1105cdd06da2afde26475dc1f78df8e2d72b0ec3ef7dd956193c996842a432696538cf123d7687211ffcd090b9381eabec879f769aac0d3564e16df794fa24728d7172fd07732eab077ed81c22084f6f781b626dac67428a9ddf3b0db0465251220d18b8bf620464c51a578decccbbaba545ed442cf12c4c66f6cb6e6901ea54aeda236ec45eef886a7ddd2c041caba3a6cee339715b6ce97e765ec3479f3d52824a8194bec2a89647e8c63ff7645ff6d05367c767bc48cc96baf05d6a415b2a5aff9bfb217948fad357b98f47dfed62ff1285eb9f468f0f29edd75adc0c8c2ff6a565edb8edfb48bea03b70c447369c52d881eea0eedb08c315cdf0bfeb979c1c0250946bb100c2866b4169b8cbd44d658f0236e1e9f3aa13bb8e8022a38ce997c94b5baf97e0ba621f7e09671ce638c2a39ee6c6e25a688019dd167675ceaec21c6b42a7c8c476d129dcc693c392a02be91b87437a08a0ebf1a7bd976ba23774766838b8d6024f5bb9b07f3c6b719b4de15b72448048ab70db3d4bea77ba359b51b1ec17dbe8010aef0244a8079ca8b9a2a797f3b1fe047c8dd5cab7fb486829239c4ef6d9a38370d488c47b7c030e49a5500c9abb39a9a5abfe72e918b76384ecaafe1627266cd14e696c09d2512e312582a8a911e7b7bfa04c21819af687f04c5e0cbe9a2ce24d4d3fd12190b253dabc12c63cabfa94\",\n        \"signed\": \"ba6eb751371df721b7707a5b3339edb55f138640b97be6334d6cda5191a3ff6367911761882a4a007f161b748cec95b19e995f2858c257cd6169256662301102ec241918418e60522042e67339e6649499f31a6c7cf8925f1f61dde894603602ae8bb5f58809821f83344f23cd31e64ec9ffe79a986b7e29e4319a63414316bd6ee20e02a50da44012bd2d6f9f679e88ed0c8bb1e2cad55e565789883345b7546f3d54b1b362b1c650502c019d7313afbc82689b23a3a52d8f1af9f81e188dbdf203fb5300b4225bfb6773337be6750b3db88ce097343f62ee2c118574ef150cbd4c62760c3e43dcbc39218bd6d98565fa389811b1a674f617fd756733dcb567a92dbf3855b57b1f4a46d5b8974b39ac0d0e24d99d2037c04f60d9140f64b07a77d7eaa1ce8a78e844b1dcf0e37424f3f9d253a548561a0375a8d4341297bfedb7048c7935e1481418f9bba9271f9fd6026224e78e055d8a0939fa2fe1dbc0fc7b583e4cff3490e1d0f610b252e30d8497d00e4aacb375f19a4719f79ca1ea583a2f8b1406a4aa5cb55c08b6593b676eb5c34abe89392d62d23308a3348b57affbba7739cde8e1909d3425eeb20926a977d3a94a86e0ba10b386926698827e86b4fd6c6180047c87ec3b31619d05a9df34efd3d76a836962b2ef604d07af0975eb8f3dd22594323802564c929b3f65dacb572b32553d69b31a197690a9bb860b080a77cfbb3c175aafce0146a82a4d06e8c750521b726ef1cb29d021e5915e5e8462ede5395445245c9ae882eec4b1745e11791f7621d3fe702cac1525e1f7b46e1105cdd06da2afde26475dc1f78df8e2d72b0ec3ef7dd956193c996842a432696538cf123d7687211ffcd090b9381eabec879f769aac0d3564e16df794fa24728d7172fd07732eab077ed81c22084f6f781b626dac67428a9ddf3b0db0465251220d18b8bf620464c51a578decccbbaba545ed442cf12c4c66f6cb6e6901ea54aeda236ec45eef886a7ddd2c041caba3a6cee339715b6ce97e765ec3479f3d52824a8194bec2a89647e8c63ff7645ff6d05367c767bc48cc96baf05d6a415b2a5aff9bfb217948fad357b98f47dfed62ff1285eb9f468f0f29edd75adc0c8c2ff6a565edb8edfb48bea03b70c447369c52d881eea0eedb08c315cdf0bfeb979c1c0250946bb100c2866b4169b8cbd44d658f0236e1e9f3aa13bb8e8022a38ce997c94b5baf97e0ba621f7e09671ce638c2a39ee6c6e25a688019dd167675ceaec21c6b42a7c8c476d129dcc693c392a02be91b87437a08a0ebf1a7bd976ba23774766838b8d6024f5bb9b07f3c6b719b4de15b72448048ab70db3d4bea77ba359b51b1ec17dbe8010aef0244a8079ca8b9a2a797f3b1fe047c8dd5cab7fb486829239c4ef6d9a38370d488c47b7c030e49a5500c9abb39a9a5abfe72e918b76384ecaafe1627266cd14e696c09d2512e312582a8a911e7b7bfa04c21819af687f04c5e0cbe9a2ce24d4d3fd12190b253dabc12c63cabfa94\",\n        \"signature\": \"ba6eb751371df721b7707a5b3339edb55f138640b97be6334d6cda5191a3ff6367911761882a4a007f161b748cec95b19e995f2858c257cd6169256662301102\"\n    },\n    {\n        \"secret_key\": \"5311f3c96101cb8b7abc622bb9326b8f513c2b16d294df797f56dfd8203dda27\",\n        \"public_key\": \"230b7002f57c79ae2e6bfdb8df30db3e900756b54af3968c670ee2f32bb11e0a\",\n        \"message\": \"61b15be37c4eb397d9e77e00151a28ed3e86d50a9552bb4850b621763f012e7e77bb5db8f3df7dcf769f2d1d46d8d60bae40c8ca6e25c6410b60078a93fd05902114bd91045c06192c70c42c9f41f8161ca46564ebc21a4bdd8190eba2aeb309823072ec2c0200ce6498f9d72b37b3fb466774326df37ad880d8eddb32af673e45d88eec49b1577b43b8639111c2e0b94187d2d4e0173c000f4c37be845d68810b7889ff2a049f3f9f245ec70f21def97780b611400a83c31a79d93a8e98b608fdcf2488b068fe1ae4217293a9367bb734b5bc7bd8819b377f090b4f8fdbff50799c76880d19133580e1ddfc2b9baaddbab34fc6fdc078014bd1ff739daafe5476f3f79d4dbec216fa7680ee8e84002dcb9ddbc7fc1e1c8ef4f1b2a2081b9282243da6153c1fce0905cf35f83a684c01b04557ec84f7e9a94fc2882e2ff19fea21d2ce6167861ce01df8b8d3c3e8d255610b7af2596cd5cf0016734942cc714c272c05fda9d34723626646a46130182cebcf179ec00a6a173bd8577fa845c44d19c6997944755f2b4e468563a75e9016523b87ddac3eee21bcbca08fcc29546a43cbe0d8d10a0e8ddcba172d1ded150378e18b368c7763913e4b407012fd76a872d2cb04930b8e22b308243d4cc278fdf2e1f940ae89ac891b9e0661aee553937bf350b407070a1bdfc4f7a3787ef399d2caf4ec74439c587376c77be0c3de539d3ac26089765b9be10b9038694636e262d7baa0b3a8941a2015967639f6044c67e59bc81cf2fba704ac0df48da6037405a8e8b8a7ce3c58ef38a883538b247ffe18097af095242b058bdd1e3e245eece0a71b75b97d52f20d6d51bb9766b0da0fc09c8ac2a30fb6e7b32ee06dadf46d7359cc066aa94785d8a882ff097d78a86be2d45600dd3d3060125f01c063e488d5c3efee1bca1e58516455ffcaec1b81ef433876bf09ffa51d6f5018585224579cb67b56ce1c216ec0a883e06c8e1563421ea72b0c10d4bb31e491c2ae2fe8139f249ec927d806ba08db52b1b506669047f0c116ff37ac5ba6cdb1eaaf33fdadb0705c799d35ac6d9c80da90c1438b585ffd59350a2686b1ec35166cb9b69ad0f56586aa03274d782e3f858db64adfbf04d5228a7b1c4a2048bbcdb941153a436d742c38b58b4d7d13c9f1d60e152aa2792349a3d94e7e6b1104aa1b870998c18dd7065654a85281bb6f027faad556b1f532e7a1e22d564069289587a0efc9c1585d135f31233c41f440466e71fe9012e5f9a0d74a7282ee392fb0165db79ff1d3176ed08afe1daa66cfbf4305ae16ac1792334399f71b1917ddec270acff665ea05d184c2c5cd2ccd902b22f9b7195e66a65556ca884ba6f5da04dcd4617f33dc2b44a0ea742aeb2b93f3a41df7957a026797a585ceee814b1975f523d2db5dbb9be0ca649d1d45dcfd\",\n        \"signed\": \"3cbbb2608870dea1efeebb3fbf681e27705c35e4ddeea86c1b342a77dc296b498419808eacbc78855611ffbc9265a74798e51827e6e5d811816d3ca21e8b9c0661b15be37c4eb397d9e77e00151a28ed3e86d50a9552bb4850b621763f012e7e77bb5db8f3df7dcf769f2d1d46d8d60bae40c8ca6e25c6410b60078a93fd05902114bd91045c06192c70c42c9f41f8161ca46564ebc21a4bdd8190eba2aeb309823072ec2c0200ce6498f9d72b37b3fb466774326df37ad880d8eddb32af673e45d88eec49b1577b43b8639111c2e0b94187d2d4e0173c000f4c37be845d68810b7889ff2a049f3f9f245ec70f21def97780b611400a83c31a79d93a8e98b608fdcf2488b068fe1ae4217293a9367bb734b5bc7bd8819b377f090b4f8fdbff50799c76880d19133580e1ddfc2b9baaddbab34fc6fdc078014bd1ff739daafe5476f3f79d4dbec216fa7680ee8e84002dcb9ddbc7fc1e1c8ef4f1b2a2081b9282243da6153c1fce0905cf35f83a684c01b04557ec84f7e9a94fc2882e2ff19fea21d2ce6167861ce01df8b8d3c3e8d255610b7af2596cd5cf0016734942cc714c272c05fda9d34723626646a46130182cebcf179ec00a6a173bd8577fa845c44d19c6997944755f2b4e468563a75e9016523b87ddac3eee21bcbca08fcc29546a43cbe0d8d10a0e8ddcba172d1ded150378e18b368c7763913e4b407012fd76a872d2cb04930b8e22b308243d4cc278fdf2e1f940ae89ac891b9e0661aee553937bf350b407070a1bdfc4f7a3787ef399d2caf4ec74439c587376c77be0c3de539d3ac26089765b9be10b9038694636e262d7baa0b3a8941a2015967639f6044c67e59bc81cf2fba704ac0df48da6037405a8e8b8a7ce3c58ef38a883538b247ffe18097af095242b058bdd1e3e245eece0a71b75b97d52f20d6d51bb9766b0da0fc09c8ac2a30fb6e7b32ee06dadf46d7359cc066aa94785d8a882ff097d78a86be2d45600dd3d3060125f01c063e488d5c3efee1bca1e58516455ffcaec1b81ef433876bf09ffa51d6f5018585224579cb67b56ce1c216ec0a883e06c8e1563421ea72b0c10d4bb31e491c2ae2fe8139f249ec927d806ba08db52b1b506669047f0c116ff37ac5ba6cdb1eaaf33fdadb0705c799d35ac6d9c80da90c1438b585ffd59350a2686b1ec35166cb9b69ad0f56586aa03274d782e3f858db64adfbf04d5228a7b1c4a2048bbcdb941153a436d742c38b58b4d7d13c9f1d60e152aa2792349a3d94e7e6b1104aa1b870998c18dd7065654a85281bb6f027faad556b1f532e7a1e22d564069289587a0efc9c1585d135f31233c41f440466e71fe9012e5f9a0d74a7282ee392fb0165db79ff1d3176ed08afe1daa66cfbf4305ae16ac1792334399f71b1917ddec270acff665ea05d184c2c5cd2ccd902b22f9b7195e66a65556ca884ba6f5da04dcd4617f33dc2b44a0ea742aeb2b93f3a41df7957a026797a585ceee814b1975f523d2db5dbb9be0ca649d1d45dcfd\",\n        \"signature\": \"3cbbb2608870dea1efeebb3fbf681e27705c35e4ddeea86c1b342a77dc296b498419808eacbc78855611ffbc9265a74798e51827e6e5d811816d3ca21e8b9c06\"\n    },\n    {\n        \"secret_key\": \"d290ffd93395bd5fc587d1ab511866e72b371a1735732d9d5c6a18dd465e9363\",\n        \"public_key\": \"fd4aad73b032461ca0aae871ca7016383b2be0169053fdbf6c5914fdd6dd6f92\",\n        \"message\": \"ebd900bc910c5ecc4d97daf7cb5ebb5491500b7ad116e30660950709d8084bb6434c5bea4a8ccc1ed5a801bebb1a117878c03747003e148ed91434832e8966241a7fff22fe1d6d8c3c3ddd7215a1efaf4b07afee1b25673a1439eaac324e895d4be839e976c03ac001254876888ccaaf3912727a60106a87be69247c9e438c31fca8d9c61bae368c83e40901a99700dff839b513ba8dc42d93ce0987a2333470a9f983313f91988659da54039e499cd1af2b8fa0ebe750e24d55c2a5bd1ade3f680092542bd1be0b9735ba393ad5697d241e8e8b28646db27d2fb5a940e8faeaf0b6c9efda88615dec891ce732930813bfbbd0bc5f8210abe843beb5e4f028f49bea34f1e5b09eac4c6662c74fba39de4a9602a9694a85c7c1375fdadfda6a1957fc5b5987a687b03995e51697a1ab5bb6cb11b663c1372fade4c0aca8fbebb4eb54ce7ce36c6904eaf6eab2f34facd8c768c8d36da2397b1a02735aea72cfaad0393410db527a8ab236d4cdabdc888fac6f182148b132614425d390ff036e54855e4203c51203c1f43e37bbf6b9bf27f5b7e7c665151465401ac32cbe9e3350535edf48a7bc3603e2232e938f9a815ac4d1deec991ef9620948441f7a2f4a46e2c400ab914c4be51dcaad8ed8239cbbe977a9f09c02698319d9fe2a8c6eb60b799f29ae7659970d2ebdff3c6cf709bbf6f4bb55b9df4f61a241dec144b5993f087e784b97be1e53608c2e817ce3d9aaf914e6b723f5b4afffd2a6b9fe9d2d73915c7ad1ffb13efcb73c56238195645203984c99aafd0235f73b3f882e073939bf786657280138db05b86fcc9460b385ef4559204ecd81e2f12f5f062aa448dccc82ea8d89466dd1be46f82c4f87bf0db2b878acbb0d9112c8db6f51d35f6d42f749856b99e550b6c454e9e8be4da175f0b5e86be66c979fd878237e57f691f0d2acd028fbffa5b0668775034db1f21ddbe7114ee3dc0b44daca64c5a03a2feeaeabeb7063bfcccc559baf27f1ccb2202fa4d1b2bf44c04b2c2f81f94e281b1a5adc850da1b9479fcabddadea56a115bb5f06cc016f141c0fcb5e83ab248eaec90158d8be647aff12e7eeb5e57dbcc293cb3b6aacb55236d4a839a0620f4762387dd1714df5c135e3d9d6824f93b7c90d3ae38c518d607120c839570413b46b8ccd7370492d8ae5c609e00cf8251e2e7df81e5b4f9c16a5a539f0afcce41bb4362e5eaa5f940a1706f4afb6b14432c81d4ba1a33d322dbf10645ab63737eadc86fe6e0976f763397fb898637595dfd36934792d779e24c2a3f0bacf53e0473c5fda9c61284e4419bdc0eef5d22f4d9bf42e8c04933bb93b53c295d7ac9395abb6dcbd742b1e1bc3b0ea4434ea21b8eca9ae682d3315a41e9c3c3371840761dc59cac45da7e3813e28788dc89de355b5aee088090a38dd39d83e5e4\",\n        \"signed\": \"21704d5e626dcf6a9dcdef935429eb7fb5b257eecd7bf74acb0cd30ecfcf608d0c5b633a4a8a9ba2cc82a21e03355e01d85dae7ecac8896dc15dae0485707104ebd900bc910c5ecc4d97daf7cb5ebb5491500b7ad116e30660950709d8084bb6434c5bea4a8ccc1ed5a801bebb1a117878c03747003e148ed91434832e8966241a7fff22fe1d6d8c3c3ddd7215a1efaf4b07afee1b25673a1439eaac324e895d4be839e976c03ac001254876888ccaaf3912727a60106a87be69247c9e438c31fca8d9c61bae368c83e40901a99700dff839b513ba8dc42d93ce0987a2333470a9f983313f91988659da54039e499cd1af2b8fa0ebe750e24d55c2a5bd1ade3f680092542bd1be0b9735ba393ad5697d241e8e8b28646db27d2fb5a940e8faeaf0b6c9efda88615dec891ce732930813bfbbd0bc5f8210abe843beb5e4f028f49bea34f1e5b09eac4c6662c74fba39de4a9602a9694a85c7c1375fdadfda6a1957fc5b5987a687b03995e51697a1ab5bb6cb11b663c1372fade4c0aca8fbebb4eb54ce7ce36c6904eaf6eab2f34facd8c768c8d36da2397b1a02735aea72cfaad0393410db527a8ab236d4cdabdc888fac6f182148b132614425d390ff036e54855e4203c51203c1f43e37bbf6b9bf27f5b7e7c665151465401ac32cbe9e3350535edf48a7bc3603e2232e938f9a815ac4d1deec991ef9620948441f7a2f4a46e2c400ab914c4be51dcaad8ed8239cbbe977a9f09c02698319d9fe2a8c6eb60b799f29ae7659970d2ebdff3c6cf709bbf6f4bb55b9df4f61a241dec144b5993f087e784b97be1e53608c2e817ce3d9aaf914e6b723f5b4afffd2a6b9fe9d2d73915c7ad1ffb13efcb73c56238195645203984c99aafd0235f73b3f882e073939bf786657280138db05b86fcc9460b385ef4559204ecd81e2f12f5f062aa448dccc82ea8d89466dd1be46f82c4f87bf0db2b878acbb0d9112c8db6f51d35f6d42f749856b99e550b6c454e9e8be4da175f0b5e86be66c979fd878237e57f691f0d2acd028fbffa5b0668775034db1f21ddbe7114ee3dc0b44daca64c5a03a2feeaeabeb7063bfcccc559baf27f1ccb2202fa4d1b2bf44c04b2c2f81f94e281b1a5adc850da1b9479fcabddadea56a115bb5f06cc016f141c0fcb5e83ab248eaec90158d8be647aff12e7eeb5e57dbcc293cb3b6aacb55236d4a839a0620f4762387dd1714df5c135e3d9d6824f93b7c90d3ae38c518d607120c839570413b46b8ccd7370492d8ae5c609e00cf8251e2e7df81e5b4f9c16a5a539f0afcce41bb4362e5eaa5f940a1706f4afb6b14432c81d4ba1a33d322dbf10645ab63737eadc86fe6e0976f763397fb898637595dfd36934792d779e24c2a3f0bacf53e0473c5fda9c61284e4419bdc0eef5d22f4d9bf42e8c04933bb93b53c295d7ac9395abb6dcbd742b1e1bc3b0ea4434ea21b8eca9ae682d3315a41e9c3c3371840761dc59cac45da7e3813e28788dc89de355b5aee088090a38dd39d83e5e4\",\n        \"signature\": \"21704d5e626dcf6a9dcdef935429eb7fb5b257eecd7bf74acb0cd30ecfcf608d0c5b633a4a8a9ba2cc82a21e03355e01d85dae7ecac8896dc15dae0485707104\"\n    },\n    {\n        \"secret_key\": \"d7fd73d1d229a65894420e4ba734270d5a20758364de897d8555e24197453c19\",\n        \"public_key\": \"3c22772aec0a0c1559077f2cfd1f2465d4b48495c5d05f1f837c31845f34cad1\",\n        \"message\": \"c9225859d555bc42011af1b4f14998e6e9b0a65e2172713e968380fb6ceedda22e022c51303031d9931ccef2f7bc705c9e215c1d089d488daddaee155c939b6202ca53bfc7f6e88e1529d82fb45e02b5d05a82bbb9db5f415c58ba8bd56cffd92270b24749e56d12c99ae90c7800f54f55254ea42da5dcfbe0e1d989cd2f6897e232df04707b34af75fa7fec33e55ed56aee39c22b045bedd161083bc5514c1f81ca907b7c760317a7fd5a5a02a5d40e2e823e24ad96aef6da8ea982b5161cc39d84aa2ffd9544c11b634037ab0a1c8e36ac63019da1b2d995cb7bd3d62fe574deabccbd0d3ae7a56e5bec91e4ba3f3db8bfea88e67da62e88278a6e3b418dceea0589f25f7dd8ad19dd845089419b472efccc879c172b32ee4a4dbc2e6c2e865bb3b8ca0adcb71fdf89e1973910ef242915f33e236d2f7c8e9f1ee5b07c6e3c25360f8cb1460be87db31a291d4dee34953e75c675bf181bb7a0b7b5c1befdc86ada072a48f6ac755d499bd68d625d8514525cc3ab8f54ce15a871291778de1305d2219361aa30e332a2e069077c5c53457520379d8b90d24bd8a3a7700ff766231cb5697f9ace521a99e896da54c40793bc7c1fb1584bb1c86194d2fb7a4b802f30885e0ee8af88d6886e3a3a4d4c854649cc01abdf35319a0856cc65d092a386f8869625cd0acac087e9351790ccb4a865f651a881c3ebf109072774f940f5aa98a2a2aa3dd36647d0de83001aa7cdc031cc4a4d75dc11ce551676a2ad43a3f6a16a4bc5aee80e5364206087364eb8b2b15fb705380a072d7c8b51995943aa762e8deb4c568cdaa1411ab68f28489e1323bb6156ce2500b06e7793c510a3de29150840bfdb0b2b7b21c2bb8a7746167c929dd0adad44fed8f36e8381b342080b2a7d82a3f81ff72630cb78df91f7b65a44eff6ed64d48afed109dd7a693a1ba8c37e008fcb157e37297d32eba765a6c7193e73bd97647985b16038c74a084a8f25654cd8cd2cdd27ff17334e06adaa058264017a3b2da78e5738a27e350d882f5fae199278d4e50b8badf57c2141dfdc3cff99df5de86fec293c76cb94b6b19ba3034e460f84c280a2e6412fab5698ce890207cababca0a95b5ad533ce114bf71a404a87590d35fa7cedba43131c4ee92344839f25cbfaeb12aeebc8040893951a346bd28fdd167bd20f71a1e59fb60d55e1c567f478f027cf679a37d1d9db867e17bfdd60b347d89d322639d315bb7a2c9134f00ea03a367f305ea4d60dc9d567cf924851e469ea954ed3ea63ea8606f79f077339bfa2b51ae49baa0fb25377821d7c11ef9ad4bb4c0fe489acbab0ef000d618c7af5efd205d68599fcbdd95e28f836e0916f9ff548d0ba17da62536e74646801eeb6122ba32c41073ae04e42c6c1d5d8d22976a56226ddf4b6ac95455fb53099f20215b2ebc907\",\n        \"signed\": \"400c3505f1dfa80df4b26db24c027eb81977f0fb9b5aca524ad51200f4bfb133db834823314195f4edc292d5f530d08556e7809caf2339768aa38029fdbc280fc9225859d555bc42011af1b4f14998e6e9b0a65e2172713e968380fb6ceedda22e022c51303031d9931ccef2f7bc705c9e215c1d089d488daddaee155c939b6202ca53bfc7f6e88e1529d82fb45e02b5d05a82bbb9db5f415c58ba8bd56cffd92270b24749e56d12c99ae90c7800f54f55254ea42da5dcfbe0e1d989cd2f6897e232df04707b34af75fa7fec33e55ed56aee39c22b045bedd161083bc5514c1f81ca907b7c760317a7fd5a5a02a5d40e2e823e24ad96aef6da8ea982b5161cc39d84aa2ffd9544c11b634037ab0a1c8e36ac63019da1b2d995cb7bd3d62fe574deabccbd0d3ae7a56e5bec91e4ba3f3db8bfea88e67da62e88278a6e3b418dceea0589f25f7dd8ad19dd845089419b472efccc879c172b32ee4a4dbc2e6c2e865bb3b8ca0adcb71fdf89e1973910ef242915f33e236d2f7c8e9f1ee5b07c6e3c25360f8cb1460be87db31a291d4dee34953e75c675bf181bb7a0b7b5c1befdc86ada072a48f6ac755d499bd68d625d8514525cc3ab8f54ce15a871291778de1305d2219361aa30e332a2e069077c5c53457520379d8b90d24bd8a3a7700ff766231cb5697f9ace521a99e896da54c40793bc7c1fb1584bb1c86194d2fb7a4b802f30885e0ee8af88d6886e3a3a4d4c854649cc01abdf35319a0856cc65d092a386f8869625cd0acac087e9351790ccb4a865f651a881c3ebf109072774f940f5aa98a2a2aa3dd36647d0de83001aa7cdc031cc4a4d75dc11ce551676a2ad43a3f6a16a4bc5aee80e5364206087364eb8b2b15fb705380a072d7c8b51995943aa762e8deb4c568cdaa1411ab68f28489e1323bb6156ce2500b06e7793c510a3de29150840bfdb0b2b7b21c2bb8a7746167c929dd0adad44fed8f36e8381b342080b2a7d82a3f81ff72630cb78df91f7b65a44eff6ed64d48afed109dd7a693a1ba8c37e008fcb157e37297d32eba765a6c7193e73bd97647985b16038c74a084a8f25654cd8cd2cdd27ff17334e06adaa058264017a3b2da78e5738a27e350d882f5fae199278d4e50b8badf57c2141dfdc3cff99df5de86fec293c76cb94b6b19ba3034e460f84c280a2e6412fab5698ce890207cababca0a95b5ad533ce114bf71a404a87590d35fa7cedba43131c4ee92344839f25cbfaeb12aeebc8040893951a346bd28fdd167bd20f71a1e59fb60d55e1c567f478f027cf679a37d1d9db867e17bfdd60b347d89d322639d315bb7a2c9134f00ea03a367f305ea4d60dc9d567cf924851e469ea954ed3ea63ea8606f79f077339bfa2b51ae49baa0fb25377821d7c11ef9ad4bb4c0fe489acbab0ef000d618c7af5efd205d68599fcbdd95e28f836e0916f9ff548d0ba17da62536e74646801eeb6122ba32c41073ae04e42c6c1d5d8d22976a56226ddf4b6ac95455fb53099f20215b2ebc907\",\n        \"signature\": \"400c3505f1dfa80df4b26db24c027eb81977f0fb9b5aca524ad51200f4bfb133db834823314195f4edc292d5f530d08556e7809caf2339768aa38029fdbc280f\"\n    },\n    {\n        \"secret_key\": \"fda7cb084016ba513c7c4f8f7180480bb181e95695ea68737fa34a40ecbdf3ef\",\n        \"public_key\": \"a2de3a0ef97298fd716106e2f3f54513057a40072d234c3518154c1bd12de037\",\n        \"message\": \"c21bb3f8e37befa367c913673101ba30d3b5c74bd8bdb09cd28640012db41120c2bcc4085de2a0f95c9215ddef8cb5fc8d8b1251b41527c67dfaa3f95ba3578391ea5a6629a733095fd0a43fdba40ffe260fff82acee2ebe980e9ececcfe7e10b2ed8c2e6b410d547a1286571df3d701174e579fcf19d3bd8086c0423f37117789f305d9670ad28c99674f52cf64211a081d0c6c3096da2c71bf5f5799a7910e6f38104a37a6557c2daef340814a1f830d593773c6cf48d83ea07294b94eb080b85d6970e28f4051d5066db10e961973a626a826aeaf8a06ec0d566b7e0c4ef60f0c5678fcbb5b2ac63f7bed06448a247b3d427b87086d33573fb2d7228c5c34ea6640eefa9564485a79638e9c97c0af84cfee7ce4a739220c8429e067143953d550668dadc84e7bed9ab070a5943390c611d75b1cb12873a37d9850661a0077bfa9ca9b8b263766c149ff0ee4b4adba25eaf7d7f501f362454256bc1269378ef3359a8ed6b960b86621fa3b613eb132122f49f2eb2ceb6832a3991e961cb0e78b742ef4d65e8de3469666fec7c5b874789571c5c99a2c02a053ff7d2fc90076bafe1f267fa81a3990f27ff14f03000af00c59286cb9bb98e204e90190ae2a50edef049ea92a1f785088f94adf6588fb43bb40fbe2324235cc7e168b80264b069f944f503692c949234d5b76bcffabe29ff9064bd7cbed9e00e5b7fdda4312eb801465f127d0ca68832a7f4ed0eaed8f559c1631cd4d34f0dc414d9fcfe849a91e25f3e0ff013a8cffa806ed8e93d08a1e5a757682ca3d26abc869c76f1c79007d559dfe67e78d8af0195808b0e771c71e64b5716fb36309c25025fae6414c28bbdbd4de597a74996c9da974920d59e6f4c2edfe110ff817fd480a5080978048865712058c5fe7b560b12b67f737ea6e2af9242cf07ad0a8a679f26430046adc3e70664cc9c0ee5abcef6d726b4e04176048b795be12851bdb74003a13204119b86864d6535ba095040a85d9781cf4f3480a304e227f787ad538e68f4bab014179e30d3fdef9eff11bcf471fa3a0bc74b5576f302d3a6b499f11f2ef326ac026c98db10e2741413f322228b3cff0f337ba2f294c78ef73f0e877878f8fc7ff6d10bce66ad6284379b80ca89327d4db0bf14e6d8f01b22ab202b716cc07e3c8866d168a5094bac5a495e73868eedc27222e6444f83bcf65acdc3ec89120bb50e8abfc28b78e6d980c775f4849a0e8cada80240bca245e39966e89a0344df8363a7dcc81b201ce9c753ad544e1124e21020d4c62deda9ed9b9d1f2fb7c54ca7ab09f383bef48cfc6848c271302a10fa687f56e00e0a7d093c927b4fdd8f1bedf6288a0e302848a8012f127a79d2d30a06ce17d94aa6f7f8a1e6eb9d0681c3774f614cc6dbcb2a813f925c6306a630572a83ec109d5f533c0584cb421d919\",\n        \"signed\": \"33614b7a94f75e036534d76e30147eccdd2a04e00cd4704ab6e807d6a2acc1e1d963b8eee0810d412d9d56e54556302b10730c15abf89c29a027303ea88ae701c21bb3f8e37befa367c913673101ba30d3b5c74bd8bdb09cd28640012db41120c2bcc4085de2a0f95c9215ddef8cb5fc8d8b1251b41527c67dfaa3f95ba3578391ea5a6629a733095fd0a43fdba40ffe260fff82acee2ebe980e9ececcfe7e10b2ed8c2e6b410d547a1286571df3d701174e579fcf19d3bd8086c0423f37117789f305d9670ad28c99674f52cf64211a081d0c6c3096da2c71bf5f5799a7910e6f38104a37a6557c2daef340814a1f830d593773c6cf48d83ea07294b94eb080b85d6970e28f4051d5066db10e961973a626a826aeaf8a06ec0d566b7e0c4ef60f0c5678fcbb5b2ac63f7bed06448a247b3d427b87086d33573fb2d7228c5c34ea6640eefa9564485a79638e9c97c0af84cfee7ce4a739220c8429e067143953d550668dadc84e7bed9ab070a5943390c611d75b1cb12873a37d9850661a0077bfa9ca9b8b263766c149ff0ee4b4adba25eaf7d7f501f362454256bc1269378ef3359a8ed6b960b86621fa3b613eb132122f49f2eb2ceb6832a3991e961cb0e78b742ef4d65e8de3469666fec7c5b874789571c5c99a2c02a053ff7d2fc90076bafe1f267fa81a3990f27ff14f03000af00c59286cb9bb98e204e90190ae2a50edef049ea92a1f785088f94adf6588fb43bb40fbe2324235cc7e168b80264b069f944f503692c949234d5b76bcffabe29ff9064bd7cbed9e00e5b7fdda4312eb801465f127d0ca68832a7f4ed0eaed8f559c1631cd4d34f0dc414d9fcfe849a91e25f3e0ff013a8cffa806ed8e93d08a1e5a757682ca3d26abc869c76f1c79007d559dfe67e78d8af0195808b0e771c71e64b5716fb36309c25025fae6414c28bbdbd4de597a74996c9da974920d59e6f4c2edfe110ff817fd480a5080978048865712058c5fe7b560b12b67f737ea6e2af9242cf07ad0a8a679f26430046adc3e70664cc9c0ee5abcef6d726b4e04176048b795be12851bdb74003a13204119b86864d6535ba095040a85d9781cf4f3480a304e227f787ad538e68f4bab014179e30d3fdef9eff11bcf471fa3a0bc74b5576f302d3a6b499f11f2ef326ac026c98db10e2741413f322228b3cff0f337ba2f294c78ef73f0e877878f8fc7ff6d10bce66ad6284379b80ca89327d4db0bf14e6d8f01b22ab202b716cc07e3c8866d168a5094bac5a495e73868eedc27222e6444f83bcf65acdc3ec89120bb50e8abfc28b78e6d980c775f4849a0e8cada80240bca245e39966e89a0344df8363a7dcc81b201ce9c753ad544e1124e21020d4c62deda9ed9b9d1f2fb7c54ca7ab09f383bef48cfc6848c271302a10fa687f56e00e0a7d093c927b4fdd8f1bedf6288a0e302848a8012f127a79d2d30a06ce17d94aa6f7f8a1e6eb9d0681c3774f614cc6dbcb2a813f925c6306a630572a83ec109d5f533c0584cb421d919\",\n        \"signature\": \"33614b7a94f75e036534d76e30147eccdd2a04e00cd4704ab6e807d6a2acc1e1d963b8eee0810d412d9d56e54556302b10730c15abf89c29a027303ea88ae701\"\n    },\n    {\n        \"secret_key\": \"a1ac48aa5ffa3d800819d03b7f62babf291f20904c11a6400e4f45205f103e38\",\n        \"public_key\": \"0854e0340f814985fb122b78729479e3fde855c211cadeae56f0d4dc0828d5fa\",\n        \"message\": \"d6f124ed752021c10926972a0c26f3b1838b3c7af247c18009a231ecce964bf6698637833f607dca836f8a606c72ae3cb170174447a2cce583f6e244dbc163e215b9820de7496ffc5b7050c48f2830246678cba4dc5caa07c1458563aa2d10dcb7770ef8fede027dd7f20ddc8cc78c3a2e2e958bd18c0006cf8fb82d44e53e1da7aa80fd1006f3b2300c9b079d8a66f1e4a3f47061f9e2f45dae35dc295204b19460ca5707ab57ce215a24c10faab3fa20bccd101e7a7d70077599f3d6725707552129cad757d6514c1b28997e471f94b0fded8fbbd065dead196d2c07d3dfa7b9fb3bae7680f76621200d099eebebbea0e8957df5b5e204ca3e9e2952b8a30f0a131a6867b1381e394b1b444310f076326656cf9341678008e9525147d8d61ce93d3bf53900cab912663717e0987293833d1902d7fb047b997b86026c467d7bb17cf45796738f7a774ac126764ed4eb45124309f4586260176ba465918d48330a9cc18c4ecea0ddaf38946acc0e361dd40a7e9133ceb50e1c317ea42bd0980a72b8ba3d8a6c7693dd5602f374f2664df4ba56df01e882fca42cb4db621f476c76e1ea9fd105911a74b77952d9914a5ac0f98a900c1b2e1a56c4ea8518a9ee47c4ed14d0bd35eca560319c8ea24755d71a4e030850bc4dc60389f325804021204ccebc25fedbd32edd8d8446aa23ce56a85f779e858d36af7c073c115e341f412c660fab800fe74c50e714ee086e2fbc8d7abbf3e98fb40ca27f1f01a9aadd8cc2275c2dd3f76e4c1d81c4b792daecc9fe66044941b8b2918486dd4acb562a7b58ad8c60c21b83cf48aefa7256a1ed809e669811f484364970bc5695089919bc32d28ea752e8e318ceff467f77ae1977c5ffd79c17c2da8bc7f823dd94398683189945f8b79238a4e815b142b866acbdbcb7aea7f143fffb7cc2b4b54bbf361afda913ad6df1e49dfd6b532642e63f55d893a470d40370665cfb74efd3f59cb0ff6006174ca35f53b97c543e08af4bf5bb75ff9031610652a3f6f2a0cfe97e7a521f3d2a289114ded34772b0e49817bde1cb924ff514e2866a09e3ede0782d2c0c98e6814b8c1e778cf8306348c933adb2e472dba09db954ff49648373395a2f0181958feb1ea2834c99532873db5c88eb5289c77e90015203ef502ac8e1c48fa1a06dafa6519d52dae3c5567570dd2434e671927c66363f783156893f138a84c75664b30ae4275112736d53d4f399ddda3d23067c073f521afba1f7be585513c2cec9c8f08d2a22c3c85392cd2ae50f3928251f86b310c69a0f8c4e853ab3f3e8129b0566ef4bbbe80b8c02c8928a4de56c0d119a45bbf5af1808d488852d8a45beb0d683248a4d65de1526b3d1d2ffc1f22215b608468cbc3bd39514b397fc0db0f113dbe6fce4652e82ff895b2b4387e041d7e4e7bde4694769665e81\",\n        \"signed\": \"c57e3c091ed24e5e84665bd9bb102db49797df9008f05557fa0d5ad7a295e5e4d2a4716b17f8c91cb12f5abfb1af027fb0411199acc5d285d842a4b65bde4902d6f124ed752021c10926972a0c26f3b1838b3c7af247c18009a231ecce964bf6698637833f607dca836f8a606c72ae3cb170174447a2cce583f6e244dbc163e215b9820de7496ffc5b7050c48f2830246678cba4dc5caa07c1458563aa2d10dcb7770ef8fede027dd7f20ddc8cc78c3a2e2e958bd18c0006cf8fb82d44e53e1da7aa80fd1006f3b2300c9b079d8a66f1e4a3f47061f9e2f45dae35dc295204b19460ca5707ab57ce215a24c10faab3fa20bccd101e7a7d70077599f3d6725707552129cad757d6514c1b28997e471f94b0fded8fbbd065dead196d2c07d3dfa7b9fb3bae7680f76621200d099eebebbea0e8957df5b5e204ca3e9e2952b8a30f0a131a6867b1381e394b1b444310f076326656cf9341678008e9525147d8d61ce93d3bf53900cab912663717e0987293833d1902d7fb047b997b86026c467d7bb17cf45796738f7a774ac126764ed4eb45124309f4586260176ba465918d48330a9cc18c4ecea0ddaf38946acc0e361dd40a7e9133ceb50e1c317ea42bd0980a72b8ba3d8a6c7693dd5602f374f2664df4ba56df01e882fca42cb4db621f476c76e1ea9fd105911a74b77952d9914a5ac0f98a900c1b2e1a56c4ea8518a9ee47c4ed14d0bd35eca560319c8ea24755d71a4e030850bc4dc60389f325804021204ccebc25fedbd32edd8d8446aa23ce56a85f779e858d36af7c073c115e341f412c660fab800fe74c50e714ee086e2fbc8d7abbf3e98fb40ca27f1f01a9aadd8cc2275c2dd3f76e4c1d81c4b792daecc9fe66044941b8b2918486dd4acb562a7b58ad8c60c21b83cf48aefa7256a1ed809e669811f484364970bc5695089919bc32d28ea752e8e318ceff467f77ae1977c5ffd79c17c2da8bc7f823dd94398683189945f8b79238a4e815b142b866acbdbcb7aea7f143fffb7cc2b4b54bbf361afda913ad6df1e49dfd6b532642e63f55d893a470d40370665cfb74efd3f59cb0ff6006174ca35f53b97c543e08af4bf5bb75ff9031610652a3f6f2a0cfe97e7a521f3d2a289114ded34772b0e49817bde1cb924ff514e2866a09e3ede0782d2c0c98e6814b8c1e778cf8306348c933adb2e472dba09db954ff49648373395a2f0181958feb1ea2834c99532873db5c88eb5289c77e90015203ef502ac8e1c48fa1a06dafa6519d52dae3c5567570dd2434e671927c66363f783156893f138a84c75664b30ae4275112736d53d4f399ddda3d23067c073f521afba1f7be585513c2cec9c8f08d2a22c3c85392cd2ae50f3928251f86b310c69a0f8c4e853ab3f3e8129b0566ef4bbbe80b8c02c8928a4de56c0d119a45bbf5af1808d488852d8a45beb0d683248a4d65de1526b3d1d2ffc1f22215b608468cbc3bd39514b397fc0db0f113dbe6fce4652e82ff895b2b4387e041d7e4e7bde4694769665e81\",\n        \"signature\": \"c57e3c091ed24e5e84665bd9bb102db49797df9008f05557fa0d5ad7a295e5e4d2a4716b17f8c91cb12f5abfb1af027fb0411199acc5d285d842a4b65bde4902\"\n    },\n    {\n        \"secret_key\": \"f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5\",\n        \"public_key\": \"278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e\",\n        \"message\": \"08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0\",\n        \"signed\": \"0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a0308b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0\",\n        \"signature\": \"0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03\"\n    }\n]\n"
  },
  {
    "path": "tests/hydra/algebra/test_polynomial.py",
    "content": "import pytest\n\nfrom garaga.algebra import BaseField, Polynomial\nfrom garaga.curves import CURVES, CurveID\n\n# List of curve IDs to test\np = CURVES[CurveID.SECP256K1.value].p\nzero = Polynomial.zero(p)\n\n\n@pytest.mark.parametrize(\"degree_x\", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])\n@pytest.mark.parametrize(\"degree_y\", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])\ndef test_xgcd(degree_x: int, degree_y: int):\n    field = BaseField(p)\n    x_coeffs = [field.random() for _ in range(degree_x + 1)]\n    y_coeffs = [field.random() for _ in range(degree_y + 1)]\n\n    x = Polynomial(x_coeffs)\n    y = Polynomial(y_coeffs)\n\n    a, b, g = Polynomial.xgcd(x, y)\n\n    assert a * x + b * y == g\n    assert x % g == zero\n    assert y % g == zero\n\n\n@pytest.mark.parametrize(\"degree\", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])\ndef test_lagrange_interpolation(degree: int):\n    field = BaseField(p)\n\n    # Define domain and values for interpolation\n    domain = [field(i) for i in range(1, degree + 2)]\n    values = [field(i * i) for i in range(1, degree + 2)]\n\n    # Perform Lagrange interpolation\n    interpolated_poly = Polynomial.lagrange_interpolation(p, domain, values)\n\n    # Check that the polynomial evaluates correctly at the domain points\n    for x, y in zip(domain, values):\n        assert interpolated_poly.evaluate(x) == y\n\n    # Additional checks for edge cases\n    domain_edge = [field(0)]\n    values_edge = [field(7)]\n    interpolated_poly_edge = Polynomial.lagrange_interpolation(\n        p, domain_edge, values_edge\n    )\n    assert interpolated_poly_edge.evaluate(domain_edge[0]) == values_edge[0]\n\n    # Check for larger set of points\n    domain_large = [field(i) for i in range(1, 11)]\n    values_large = [field(i * i) for i in range(1, 11)]\n    interpolated_poly_large = Polynomial.lagrange_interpolation(\n        p, domain_large, values_large\n    )\n    for x, y in zip(domain_large, values_large):\n        assert interpolated_poly_large.evaluate(x) == y\n"
  },
  {
    "path": "tests/hydra/algebra/test_pyfelt.py",
    "content": "import pytest\n\nfrom garaga.algebra import PyFelt\n\n# Define a prime number for the finite field\np = 101\n\n\ndef test_pyfelt_addition():\n    a = PyFelt(10, p)\n    b = PyFelt(20, p)\n    c = 30\n    assert a + b == PyFelt(30, p)\n    assert a + c == PyFelt(40, p)\n    assert c + a == PyFelt(40, p)\n\n\ndef test_pyfelt_subtraction():\n    a = PyFelt(10, p)\n    b = PyFelt(20, p)\n    c = 5\n    assert a - b == PyFelt(-10 % p, p)\n    assert a - c == PyFelt(5, p)\n    assert c - a == PyFelt(-5 % p, p)\n\n\ndef test_pyfelt_multiplication():\n    a = PyFelt(10, p)\n    b = PyFelt(20, p)\n    c = 2\n    assert a * b == PyFelt(200 % p, p)\n    assert a * c == PyFelt(20, p)\n    assert c * a == PyFelt(20, p)\n\n\ndef test_pyfelt_division():\n    a = PyFelt(10, p)\n    c = PyFelt(1, p)\n    assert a / c == a\n    with pytest.raises(ValueError):\n        a / PyFelt(0, p)\n\n\ndef test_pyfelt_negation():\n    a = PyFelt(10, p)\n    assert -a == PyFelt(-10 % p, p)\n\n\ndef test_pyfelt_inversion():\n    a = PyFelt(10, p)\n    inv_a = a.__inv__()\n    assert a * inv_a == PyFelt(1, p)\n    with pytest.raises(ValueError):\n        PyFelt(0, p).__inv__()\n\n\ndef test_pyfelt_exponentiation():\n    a = PyFelt(10, p)\n    assert a**3 == PyFelt(1000 % p, p)\n    assert a**0 == PyFelt(1, p)\n\n\ndef test_pyfelt_equality():\n    a = PyFelt(10, p)\n    b = PyFelt(10, p)\n    c = PyFelt(20, p)\n    assert a == b\n    assert a != c\n    assert a == 10\n    assert a != 20\n\n\ndef test_pyfelt_comparison():\n    a = PyFelt(10, p)\n    b = PyFelt(20, p)\n    c = 15\n    assert a < b\n    assert a <= b\n    assert b > a\n    assert b >= a\n    assert a < c\n    assert a <= c\n    assert b > c\n    assert b >= c\n\n\ndef test_pyfelt_quadratic_residue():\n    a = PyFelt(4, p)\n    b = PyFelt(99, p)\n    assert a.is_quad_residue()\n    assert not b.is_quad_residue()\n\n\ndef test_pyfelt_sqrt():\n    a = PyFelt(4, p)\n    b = PyFelt(99, p)\n    assert a.sqrt() == PyFelt(2, p)\n    with pytest.raises(ValueError):\n        print(b.sqrt())\n\n\ndef test_pyfelt_repr():\n    a = PyFelt(10, p)\n    assert repr(a) == \"PyFelt(10, 0x65)\"\n\n\ndef test_pyfelt_invalid_operations():\n    a = PyFelt(10, p)\n    with pytest.raises(Exception):\n        a + \"invalid\"\n    with pytest.raises(Exception):\n        a - \"invalid\"\n    with pytest.raises(Exception):\n        a * \"invalid\"\n    with pytest.raises(Exception):\n        a / \"invalid\"\n    with pytest.raises(Exception):\n        a == \"invalid\"\n    with pytest.raises(Exception):\n        a < \"invalid\"\n    with pytest.raises(Exception):\n        a <= \"invalid\"\n    with pytest.raises(Exception):\n        a > \"invalid\"\n    with pytest.raises(Exception):\n        a >= \"invalid\"\n\n\nif __name__ == \"__main__\":\n    pytest.main()\n"
  },
  {
    "path": "tests/hydra/algebra/test_tower_final_exp.py",
    "content": "import time\n\nimport pytest\n\nfrom garaga.curves import CurveID\nfrom garaga.hints.tower_backup import E12, get_base_field\n\n\n@pytest.mark.parametrize(\"curve_id\", [CurveID.BN254.value, CurveID.BLS12_381.value])\ndef test_tower_final_exp(curve_id):\n    e12 = E12.random(curve_id)\n    start = time.time()\n    e12t = e12.final_exp(use_rust=False)\n    end = time.time()\n    print(f\"Python final_exp time: {end - start}\")\n    start = time.time()\n    e12t_rust = e12.final_exp(use_rust=True)\n    end = time.time()\n    print(f\"Rust final_exp time: {end - start}\")\n    assert e12t == e12t_rust\n\n\n@pytest.mark.parametrize(\"curve_id\", [CurveID.BN254.value, CurveID.BLS12_381.value])\ndef test_tower_final_exp_zero_numerator(curve_id):\n    field = get_base_field(curve_id)\n    for _ in range(5):\n        e12 = E12.from_direct(\n            [\n                field.zero(),\n                field.random(),\n                field.zero(),\n                field.random(),\n                field.zero(),\n                field.random(),\n                field.zero(),\n                field.random(),\n                field.zero(),\n                field.random(),\n                field.zero(),\n                field.random(),\n            ],\n            curve_id,\n        )\n        e12t_rust = e12.final_exp(use_rust=True)\n        assert e12t_rust == E12.one(curve_id)\n"
  },
  {
    "path": "tests/hydra/circuits/test_ec.py",
    "content": "import pytest\n\nfrom garaga.curves import CURVES, CurveID, get_base_field\nfrom garaga.modulo_circuit import WriteOps\nfrom garaga.points import G1Point, G2Point\nfrom garaga.precompiled_circuits.ec import BasicEC, BasicECG2\n\n\n@pytest.mark.parametrize(\"curve_id\", [CurveID.BLS12_381])\ndef test_double_point_g1(curve_id: CurveID):\n    g = G1Point.get_nG(curve_id, 1)\n    circuit = BasicEC(\"test\", 1)\n    gxys = circuit.write_elements(g.to_pyfelt_list(), WriteOps.INPUT)\n    field = get_base_field(CurveID.BLS12_381)\n    A = CURVES[CurveID.BLS12_381.value].a\n    a = circuit.write_element(field(A))\n\n    resx, resy = circuit.double_point(gxys, a)\n\n    got = G1Point(\n        resx.value,\n        resy.value,\n        curve_id,\n    )\n\n    expected = G1Point.get_nG(CurveID.BLS12_381, 2)\n    assert got == expected, f\"{got} != {expected}\"\n\n\n@pytest.mark.parametrize(\"curve_id\", [CurveID.BLS12_381])\ndef test_add_point_g1(curve_id: CurveID):\n    g = G1Point.get_nG(curve_id, 1)\n    h = G1Point.get_nG(curve_id, 2)\n    circuit = BasicEC(\"test\", 1)\n    gxys = circuit.write_elements(g.to_pyfelt_list(), WriteOps.INPUT)\n    hxys = circuit.write_elements(h.to_pyfelt_list(), WriteOps.INPUT)\n\n    resx, resy = circuit.add_points(gxys, hxys)\n\n    got = G1Point(\n        resx.value,\n        resy.value,\n        curve_id,\n    )\n\n    expected = G1Point.get_nG(curve_id, 3)\n    assert got == expected, f\"{got} != {expected}\"\n\n\n@pytest.mark.parametrize(\"curve_id\", [CurveID.BLS12_381])\ndef test_double_point_g2(curve_id: CurveID):\n    # Arrange\n    g = G2Point.get_nG(CurveID.BLS12_381, 1)\n    circuit = BasicECG2(\"test\", 1)\n    gxys = circuit.write_elements(g.to_pyfelt_list(), WriteOps.INPUT)\n\n    # Act\n    resx, resy = circuit.double_point_a_eq_0((gxys[0:2], gxys[2:4]))\n\n    # Assert\n    got = G2Point(\n        (resx[0].value, resx[1].value),\n        (resy[0].value, resy[1].value),\n        CurveID.BLS12_381,\n    )\n    expected = G2Point.get_nG(CurveID.BLS12_381, 2)\n    assert got == expected, f\"{got} != {expected}\"\n\n\n@pytest.mark.parametrize(\"curve_id\", [CurveID.BLS12_381])\ndef test_add_point_g2(curve_id: CurveID):\n    # Arrange\n    g = G2Point.get_nG(curve_id, 1)\n    h = G2Point.get_nG(curve_id, 2)\n    circuit = BasicECG2(\"test\", 1)\n    gxys = circuit.write_elements(g.to_pyfelt_list(), WriteOps.INPUT)\n    hxys = circuit.write_elements(h.to_pyfelt_list(), WriteOps.INPUT)\n\n    # Act\n    resx, resy = circuit.add_points((gxys[0:2], gxys[2:4]), (hxys[0:2], hxys[2:4]))\n\n    # Assert\n    got = G2Point(\n        (resx[0].value, resx[1].value),\n        (resy[0].value, resy[1].value),\n        CurveID.BLS12_381,\n    )\n\n    expected = G2Point.get_nG(curve_id, 3)\n    assert got == expected, f\"{got} != {expected}\"\n"
  },
  {
    "path": "tests/hydra/circuits/test_honk.py",
    "content": "import pytest\n\nimport garaga.hints.io as io\nfrom garaga.curves import ProofSystem\nfrom garaga.hints.keccak256 import keccak_256\nfrom garaga.points import G1G2Pair\nfrom garaga.precompiled_circuits.zk_honk import (\n    CURVES,\n    G2_POINT_KZG_1,\n    G2_POINT_KZG_2,\n    CurveID,\n    G1Point,\n    HonkVk,\n    ZKHonkProof,\n    ZKHonkTranscript,\n    ZKHonkVerifierCircuits,\n    get_msm_points_from_vk_and_proof,\n    honk_proof_from_bytes,\n)\n\nPATH = \"hydra/garaga/starknet/honk_contract_generator/examples\"\n\n\ndef convert_pairing_points_to_g1(\n    pairing_point_object: list[int],\n) -> tuple[G1Point, G1Point]:\n    \"\"\"Convert the 16 field element pairing point object to two G1 points (lhs, rhs).\n\n    Each point is encoded as 4 68-bit limbs for x and 4 68-bit limbs for y.\n    \"\"\"\n\n    def decode_coord(limbs):\n        return limbs[0] | (limbs[1] << 68) | (limbs[2] << 136) | (limbs[3] << 204)\n\n    lhs_x = decode_coord(pairing_point_object[0:4])\n    lhs_y = decode_coord(pairing_point_object[4:8])\n    rhs_x = decode_coord(pairing_point_object[8:12])\n    rhs_y = decode_coord(pairing_point_object[12:16])\n\n    lhs = G1Point(x=lhs_x, y=lhs_y, curve_id=CurveID.BN254)\n    rhs = G1Point(x=rhs_x, y=rhs_y, curve_id=CurveID.BN254)\n\n    return lhs, rhs\n\n\ndef generate_recursion_separator(\n    pairing_point_object: list[int], acc_lhs: G1Point, acc_rhs: G1Point\n) -> int:\n    \"\"\"Generate the recursion separator by hashing the proof and accumulator points.\n\n    Matches Solidity's generateRecursionSeparator function.\n    \"\"\"\n    proof_lhs, proof_rhs = convert_pairing_points_to_g1(pairing_point_object)\n\n    # Hash 8 uint256 values: proofLhs.x, proofLhs.y, proofRhs.x, proofRhs.y, accLhs.x, accLhs.y, accRhs.x, accRhs.y\n    data = b\"\"\n    data += proof_lhs.x.to_bytes(32, \"big\")\n    data += proof_lhs.y.to_bytes(32, \"big\")\n    data += proof_rhs.x.to_bytes(32, \"big\")\n    data += proof_rhs.y.to_bytes(32, \"big\")\n    data += acc_lhs.x.to_bytes(32, \"big\")\n    data += acc_lhs.y.to_bytes(32, \"big\")\n    data += acc_rhs.x.to_bytes(32, \"big\")\n    data += acc_rhs.y.to_bytes(32, \"big\")\n\n    hash_result = keccak_256(data).digest()\n    # Convert to field element (mod p)\n    FR = CURVES[CurveID.GRUMPKIN.value].p\n    return int.from_bytes(hash_result, \"big\") % FR\n\n\n@pytest.mark.parametrize(\n    \"proof_path, system\",\n    [\n        (f\"{PATH}/proof_ultra_keccak_zk.bin\", ProofSystem.UltraKeccakZKHonk),\n    ],\n)\ndef test_verify_honk_proof(proof_path: str, system: ProofSystem):\n\n    vk: HonkVk = HonkVk.from_bytes(open(f\"{PATH}/vk_ultra_keccak.bin\", \"rb\").read())\n\n    proof: ZKHonkProof = honk_proof_from_bytes(\n        open(proof_path, \"rb\").read(),\n        open(f\"{PATH}/public_inputs_ultra_keccak.bin\", \"rb\").read(),\n        vk,\n        system,\n    )\n\n    tp = ZKHonkTranscript.from_proof(vk, proof, system)\n    circuit: ZKHonkVerifierCircuits = ZKHonkVerifierCircuits(\n        name=\"test\", log_n=vk.log_circuit_size\n    )\n\n    vk_circuit = vk.to_circuit_elements(circuit)\n    proof_circuit = proof.to_circuit_elements(circuit)\n    tp = tp.to_circuit_elements(circuit)\n\n    public_input_delta = circuit.compute_public_input_delta(\n        public_inputs=proof_circuit.public_inputs,\n        pairing_point_object=proof_circuit.pairing_point_object,\n        beta=tp.beta,\n        gamma=tp.gamma,\n    )\n\n    vanishing_check, diff_check = circuit.check_evals_consistency(\n        proof_circuit.libra_evaluation,\n        proof_circuit.libra_poly_evals,\n        tp.gemini_r,\n        tp.sum_check_u_challenges,\n    )\n    assert vanishing_check.value != 0\n    assert diff_check.value == 0\n\n    rlc_check, check = circuit.verify_sum_check(\n        libra_sum=proof_circuit.libra_sum,\n        sumcheck_univariates=proof_circuit.sumcheck_univariates,\n        sumcheck_evaluations=(proof_circuit.sumcheck_evaluations),\n        libra_evaluation=proof_circuit.libra_evaluation,\n        beta=tp.beta,\n        gamma=tp.gamma,\n        public_inputs_delta=public_input_delta,\n        eta=tp.eta,\n        eta_two=tp.etaTwo,\n        eta_three=tp.etaThree,\n        libra_challenge=tp.libra_challenge,\n        sum_check_u_challenges=tp.sum_check_u_challenges,\n        gate_challenge=tp.gate_challenge,\n        alpha=tp.alpha,\n        log_n=vk.log_circuit_size,\n        base_rlc=circuit.write_element(1234),\n    )\n\n    assert rlc_check.value == 0\n    assert check.value == 0\n\n    print(f\"Pub input delta: {io.int_to_u384(public_input_delta, as_hex=False)}\")\n\n    scalars = circuit.compute_shplemini_msm_scalars(\n        proof_circuit.sumcheck_evaluations,\n        proof_circuit.gemini_masking_eval,\n        proof_circuit.gemini_a_evaluations,\n        proof_circuit.libra_poly_evals,\n        tp.gemini_r,\n        tp.rho,\n        tp.shplonk_z,\n        tp.shplonk_nu,\n        tp.sum_check_u_challenges,\n    )\n\n    print([scalar.value if scalar else scalar for scalar in scalars])\n    print(len(scalars))\n\n    points = get_msm_points_from_vk_and_proof(vk, proof)\n\n    for i, (p, s) in enumerate(zip(points, scalars)):\n        if s:\n            print(i, hex(s.value))\n\n    P_0 = G1Point.msm(points=points, scalars=[scalar.value for scalar in scalars])\n\n    P_1 = -proof.kzg_quotient\n\n    # Extract the points from pairing_point_object\n    P_0_other, P_1_other = convert_pairing_points_to_g1(proof.pairing_point_object)\n    print(f\"P_0_other: x={hex(P_0_other.x)}, y={hex(P_0_other.y)}\")\n    print(f\"P_1_other: x={hex(P_1_other.x)}, y={hex(P_1_other.y)}\")\n\n    # Generate recursion separator\n    recursion_separator = generate_recursion_separator(\n        proof.pairing_point_object, P_0, P_1\n    )\n    print(f\"Recursion separator: {hex(recursion_separator)}\")\n\n    # Aggregate: P_0_final = recursionSeparator * P_0 + P_0_other\n    #            P_1_final = recursionSeparator * P_1 + P_1_other\n    P_0_final = P_0.scalar_mul(recursion_separator).add(P_0_other)\n    P_1_final = P_1.scalar_mul(recursion_separator).add(P_1_other)\n\n    print(f\"P_0_final: x={hex(P_0_final.x)}, y={hex(P_0_final.y)}\")\n    print(f\"P_1_final: x={hex(P_1_final.x)}, y={hex(P_1_final.y)}\")\n\n    # Final pairing check with aggregated points\n    pairs = [G1G2Pair(P_0_final, G2_POINT_KZG_1), G1G2Pair(P_1_final, G2_POINT_KZG_2)]\n    pairing_result = G1G2Pair.pair(pairs).value_coeffs\n    print(f\"Pairing result WITH recursion aggregation: {pairing_result[:3]}...\")\n\n    assert (\n        pairing_result == [1] + [0] * 11\n    ), \"Pairing check failed with recursion aggregation\"\n\n\n@pytest.mark.parametrize(\n    \"proof_path, system\",\n    [\n        (f\"{PATH}/proof_ultra_keccak_zk.bin\", ProofSystem.UltraKeccakZKHonk),\n    ],\n)\ndef test_check_evals_consistency(proof_path: str, system: ProofSystem):\n    vk: HonkVk = HonkVk.from_bytes(open(f\"{PATH}/vk_ultra_keccak.bin\", \"rb\").read())\n    proof = honk_proof_from_bytes(\n        open(proof_path, \"rb\").read(),\n        open(f\"{PATH}/public_inputs_ultra_keccak.bin\", \"rb\").read(),\n        vk,\n        system,\n    )\n\n    tp = ZKHonkTranscript.from_proof(vk, proof, system)\n    circuit = ZKHonkVerifierCircuits(name=\"test\", log_n=vk.log_circuit_size)\n\n    proof_circuit = proof.to_circuit_elements(circuit)\n    tp = tp.to_circuit_elements(circuit)\n\n    vanishing_check_expected, diff_check_expected = circuit.check_evals_consistency(\n        proof_circuit.libra_evaluation,\n        proof_circuit.libra_poly_evals,\n        tp.gemini_r,\n        tp.sum_check_u_challenges,\n    )\n\n    vanishing_check, diff_check = circuit.check_evals_consistency_split(\n        proof_circuit.libra_evaluation,\n        proof_circuit.libra_poly_evals,\n        tp.gemini_r,\n        tp.sum_check_u_challenges,\n    )\n\n    assert vanishing_check.value == vanishing_check_expected.value\n    assert diff_check.value == diff_check_expected.value\n"
  },
  {
    "path": "tests/hydra/circuits/test_multi_miller_loop.py",
    "content": "import copy\n\nimport pytest\n\nfrom garaga.curves import CurveID\nfrom garaga.hints.extf_mul import nondeterministic_extension_field_mul_divmod\nfrom garaga.modulo_circuit import WriteOps\nfrom garaga.points import G1Point, G2Point\nfrom garaga.precompiled_circuits.multi_miller_loop import (\n    MultiMillerLoopCircuit,\n    precompute_lines,\n)\n\n\n@pytest.fixture(\n    params=[\n        (CurveID.BN254, 1),\n        (CurveID.BLS12_381, 1),\n        (CurveID.BN254, 2),\n        (CurveID.BLS12_381, 2),\n        (CurveID.BN254, 3),\n        (CurveID.BLS12_381, 3),\n        (CurveID.BN254, 4),\n        (CurveID.BLS12_381, 4),\n    ]\n)\ndef circuit_and_points(\n    request,\n) -> tuple[MultiMillerLoopCircuit, list[G1Point], list[G2Point]]:\n    curve_id, n_pairs = request.param\n\n    def init_miller_loop_circuit() -> (\n        tuple[MultiMillerLoopCircuit, list[G1Point], list[G2Point]]\n    ):\n        circuit = MultiMillerLoopCircuit(\n            name=\"test\", curve_id=curve_id.value, n_pairs=n_pairs, hash_input=False\n        )\n        Ps = [G1Point.gen_random_point(curve_id) for _ in range(n_pairs)]\n        Qs = [G2Point.gen_random_point(curve_id) for _ in range(n_pairs)]\n        circuit.write_p_and_q(Ps, Qs)\n        return circuit, Ps, Qs\n\n    return init_miller_loop_circuit()\n\n\ndef test_precomputed_and_without_precompute_gives_same_output(\n    circuit_and_points: tuple[MultiMillerLoopCircuit, list[G1Point], list[G2Point]],\n):\n    circuit0, Ps, Qs = circuit_and_points\n    n_pairs = len(Ps)\n\n    f0 = circuit0.miller_loop(n_pairs)\n    f0 = [fi.felt for fi in f0]\n\n    circuit1 = copy.deepcopy(circuit0)\n    circuit1.precompute_lines = True\n    circuit1.precomputed_lines = circuit1.write_elements(\n        precompute_lines(Qs), WriteOps.INPUT\n    )\n    circuit1._precomputed_lines_generator = (\n        circuit1._create_precomputed_lines_generator()\n    )\n    circuit1.n_points_precomputed_lines = n_pairs\n\n    f1 = circuit1.miller_loop(n_pairs)\n    f1 = [fi.felt for fi in f1]\n\n    assert f0 == f1\n\n\ndef test_partially_precomputed_and_without_precompute_gives_same_output(\n    circuit_and_points: tuple[MultiMillerLoopCircuit, list[G1Point], list[G2Point]],\n):\n    circuit0, Ps, Qs = circuit_and_points\n    n_pairs = len(Ps)\n    f0 = circuit0.miller_loop(n_pairs)\n    f0 = [fi.felt for fi in f0]\n\n    circuit1 = copy.deepcopy(circuit0)\n    circuit1.precompute_lines = True\n    circuit1.precomputed_lines = circuit1.write_elements(\n        precompute_lines(Qs[: n_pairs // 2]), WriteOps.INPUT\n    )\n    circuit1._precomputed_lines_generator = (\n        circuit1._create_precomputed_lines_generator()\n    )\n    circuit1.n_points_precomputed_lines = n_pairs // 2\n\n    f1 = circuit1.miller_loop(n_pairs)\n    f1 = [fi.felt for fi in f1]\n\n    assert f0 == f1\n\n\ndef test_prod_miller_loop_equals_multi_miller_loop(\n    circuit_and_points: tuple[MultiMillerLoopCircuit, list[G1Point], list[G2Point]],\n):\n    circuit_multi, Ps, Qs = circuit_and_points\n    curve_id = circuit_multi.curve_id\n    n_pairs = len(Ps)\n    f0 = circuit_multi.miller_loop(n_pairs)\n    f0 = [fi.felt for fi in f0]\n\n    fis = []\n    for i in range(n_pairs):\n        circuit_prod_i = MultiMillerLoopCircuit(\n            name=\"test\", curve_id=curve_id, n_pairs=1, hash_input=False\n        )\n        circuit_prod_i.write_p_and_q(Ps[i : i + 1], Qs[i : i + 1])\n        f_i = circuit_prod_i.miller_loop(1)\n\n        fis.append(f_i)\n\n    _, R = nondeterministic_extension_field_mul_divmod(fis, curve_id, 12)\n\n    assert f0 == R\n"
  },
  {
    "path": "tests/hydra/hints/test_ecip.py",
    "content": "import random\n\nimport pytest\n\nfrom garaga.curves import CURVES, CurveID, PairingCurve\nfrom garaga.hints.ecip import verify_ecip, zk_ecip_hint\nfrom garaga.points import G1Point, G2Point\n\n# Define the curves to be tested\ncurves = list(CurveID)\n\n\n@pytest.mark.parametrize(\"curve_id\", curves)\n@pytest.mark.parametrize(\"msm_size\", range(1, 3))\ndef test_verify_ecip(curve_id, msm_size):\n    curve = CURVES[curve_id.value]\n    order = curve.n\n\n    # Test for G1 points\n    Bs_G1 = [G1Point.get_nG(curve_id, 1) for _ in range(msm_size)]\n    scalars = [random.randint(1, order - 1) for _ in range(msm_size)]\n\n    Q, sum_dlog = zk_ecip_hint(Bs_G1, scalars, use_rust=False)\n\n    Q_rust, sum_dlog_rust = zk_ecip_hint(Bs_G1, scalars, use_rust=True)\n\n    assert Q == Q_rust, f\"Q: {Q}, \\nQ_rust: {Q_rust}\"\n    assert (\n        sum_dlog == sum_dlog_rust\n    ), f\"sum_dlog: {sum_dlog}, \\nsum_dlog_rust: {sum_dlog_rust}\"\n\n    assert verify_ecip(Bs_G1, scalars, Q=Q_rust, sum_dlog=sum_dlog_rust)\n    # Test for G2 points if the curve supports pairing\n    if isinstance(CURVES[curve_id.value], PairingCurve):\n        Bs_G2 = [G2Point.gen_random_point(curve_id) for _ in range(msm_size)]\n        assert verify_ecip(Bs_G2, scalars)\n\n\n@pytest.mark.parametrize(\"curve_id\", curves)\n@pytest.mark.parametrize(\"msm_size\", range(0, 3))\ndef test_verify_ecip_edge_cases(curve_id, msm_size):\n    curve = CURVES[curve_id.value]\n    order = curve.n\n\n    # Test for G1 points\n    Bs_G1 = [G1Point.gen_random_point(curve_id) for _ in range(msm_size)] + [\n        G1Point.infinity(curve_id)\n    ]\n\n    scalars = [0] + [random.randint(1, order - 1) for _ in range(msm_size)]\n    assert verify_ecip(Bs_G1, scalars)\n\n    # Test for G2 points if the curve supports pairing\n    if isinstance(CURVES[curve_id.value], PairingCurve):\n        Bs_G2 = [G2Point.gen_random_point(curve_id) for _ in range(msm_size)] + [\n            G2Point.infinity(curve_id)\n        ]\n        assert verify_ecip(Bs_G2, scalars)\n\n\nif __name__ == \"__main__\":\n    pytest.main()\n"
  },
  {
    "path": "tests/hydra/hints/test_eisenstein.py",
    "content": "import pytest\nfrom hypothesis import given, settings\nfrom hypothesis import strategies as st\n\nfrom hydra.garaga.hints.eisenstein import EisensteinInteger, half_gcd\n\n# --- Hypothesis Strategies ---\n\n# Define reasonable bounds for generated integers to avoid excessively long tests\n# Using 64-bit range as a starting point, adjust if needed based on performance/coverage\nMAX_BITS = 64\nmin_int = -(2 ** (MAX_BITS - 1))\nmax_int = 2 ** (MAX_BITS - 1) - 1\n\nMAX_EXAMPLES = 50\n\n# Strategy for generating individual integers\ninteger_strategy = st.integers(min_value=min_int, max_value=max_int)\n\n# Strategy for generating EisensteinInteger instances\neisenstein_integer_strategy = st.builds(\n    EisensteinInteger, a0=integer_strategy, a1=integer_strategy\n)\n\n# Strategy for generating non-zero EisensteinInteger instances (for division)\nnon_zero_eisenstein_integer_strategy = eisenstein_integer_strategy.filter(\n    lambda x: not x.is_zero()\n)\n\n# --- Test Constants ---\nZERO = EisensteinInteger(0, 0)\nONE = EisensteinInteger(1, 0)\n\n# --- Test Functions ---\n\n\n@settings(max_examples=MAX_EXAMPLES)  # Adjust number of examples as needed\n@given(eisenstein_integer_strategy)\ndef test_neg_twice_invariant(a: EisensteinInteger):\n    \"\"\"Test that negating twice returns the original number: -(-a) == a\"\"\"\n    assert -(-a) == a\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(eisenstein_integer_strategy)\ndef test_conj_twice_invariant(a: EisensteinInteger):\n    \"\"\"Test that conjugating twice returns the original number: conj(conj(a)) == a\"\"\"\n    assert a.conjugate().conjugate() == a\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(eisenstein_integer_strategy, eisenstein_integer_strategy)\ndef test_add_sub_invariant(a: EisensteinInteger, b: EisensteinInteger):\n    \"\"\"Test that adding then subtracting the same number is invariant: (a + b) - b == a\"\"\"\n    assert (a + b) - b == a\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(eisenstein_integer_strategy, eisenstein_integer_strategy)\ndef test_sub_add_invariant(a: EisensteinInteger, b: EisensteinInteger):\n    \"\"\"Test that subtracting then adding the same number is invariant: (a - b) + b == a\"\"\"\n    assert (a - b) + b == a\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(eisenstein_integer_strategy)\ndef test_add_zero_invariant(a: EisensteinInteger):\n    \"\"\"Test that adding zero is invariant: a + 0 == a\"\"\"\n    assert a + ZERO == a\n    assert ZERO + a == a\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(eisenstein_integer_strategy)\ndef test_mul_one_invariant(a: EisensteinInteger):\n    \"\"\"Test that multiplying by one is invariant: a * 1 == a\"\"\"\n    assert a * ONE == a\n    assert ONE * a == a\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(eisenstein_integer_strategy)\ndef test_mul_zero(a: EisensteinInteger):\n    \"\"\"Test that multiplying by zero results in zero: a * 0 == 0\"\"\"\n    assert a * ZERO == ZERO\n    assert ZERO * a == ZERO\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(eisenstein_integer_strategy, eisenstein_integer_strategy)\ndef test_add_commutative(a: EisensteinInteger, b: EisensteinInteger):\n    \"\"\"Test addition commutativity: a + b == b + a\"\"\"\n    assert a + b == b + a\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(\n    eisenstein_integer_strategy,\n    eisenstein_integer_strategy,\n    eisenstein_integer_strategy,\n)\ndef test_add_associative(\n    a: EisensteinInteger, b: EisensteinInteger, c: EisensteinInteger\n):\n    \"\"\"Test addition associativity: (a + b) + c == a + (b + c)\"\"\"\n    assert (a + b) + c == a + (b + c)\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(eisenstein_integer_strategy, eisenstein_integer_strategy)\ndef test_mul_commutative(a: EisensteinInteger, b: EisensteinInteger):\n    \"\"\"Test multiplication commutativity: a * b == b * a\"\"\"\n    assert a * b == b * a\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(\n    eisenstein_integer_strategy,\n    eisenstein_integer_strategy,\n    eisenstein_integer_strategy,\n)\ndef test_mul_associative(\n    a: EisensteinInteger, b: EisensteinInteger, c: EisensteinInteger\n):\n    \"\"\"Test multiplication associativity: (a * b) * c == a * (b * c)\"\"\"\n    assert (a * b) * c == a * (b * c)\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(\n    eisenstein_integer_strategy,\n    eisenstein_integer_strategy,\n    eisenstein_integer_strategy,\n)\ndef test_distributive(a: EisensteinInteger, b: EisensteinInteger, c: EisensteinInteger):\n    \"\"\"Test distributivity: a * (b + c) == (a * b) + (a * c)\"\"\"\n    assert a * (b + c) == (a * b) + (a * c)\n    assert (b + c) * a == (b * a) + (c * a)  # Right distributivity\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(eisenstein_integer_strategy, eisenstein_integer_strategy)\ndef test_sub_definition(a: EisensteinInteger, b: EisensteinInteger):\n    \"\"\"Test subtraction definition: a - b == a + (-b)\"\"\"\n    assert a - b == a + (-b)\n\n\n@settings(max_examples=MAX_EXAMPLES)\n@given(eisenstein_integer_strategy)\ndef test_norm_positive(a: EisensteinInteger):\n    \"\"\"Test that the norm is always non-negative: norm(a) >= 0\"\"\"\n    assert a.norm() >= 0\n\n\n@settings(\n    max_examples=MAX_EXAMPLES\n)  # Reduced examples, increased deadline for performance\n@given(eisenstein_integer_strategy, non_zero_eisenstein_integer_strategy)\ndef test_half_gcd(a: EisensteinInteger, b: EisensteinInteger):\n    \"\"\"\n    Test the half_gcd identity: w = a*u + b*v\n    Where (w, v, u) is the result of half_gcd(a, b).\n    Handles the case where b might become zero during the process.\n    \"\"\"\n    # half_gcd might raise ZeroDivisionError if b is zero initially or becomes zero\n    # in an unexpected way, although the internal check should prevent this normally.\n    try:\n        w, v, u = half_gcd(a, b)\n        # Verify the Bézout-like identity returned by half_gcd\n        assert a * u + b * v == w\n    except ZeroDivisionError:\n        # This case might occur if the input 'b' leads to division by zero internally,\n        # which shouldn't happen with the non_zero strategy and internal checks,\n        # but we catch it defensively.\n        pytest.skip(\n            \"Skipping test case due to potential division by zero in half_gcd internals.\"\n        )\n    except Exception as e:\n        # Catch any other unexpected exceptions\n        pytest.fail(f\"half_gcd raised an unexpected exception: {e}\")\n\n\n# You might want to add specific edge case tests manually as well\ndef test_specific_cases():\n    z1 = EisensteinInteger(3, 2)\n    z2 = EisensteinInteger(1, -1)\n    assert z1 + z2 == EisensteinInteger(4, 1)\n    assert z1 * z2 == EisensteinInteger(5, 1)\n    assert z1.norm() == 7\n    assert z2.norm() == 3\n    q, r = z1.quo_rem(z2)\n\n    assert z1 == z2 * q + r\n\n    # Test half_gcd with a specific case from the original Python example\n    a_int = EisensteinInteger(0, 1)\n    b_int = EisensteinInteger(-3, 19999)\n    w, v, u = half_gcd(a_int, b_int)\n    assert a_int * u + b_int * v == w\n\n\ndef test_zero_division():\n    a = EisensteinInteger(5, 2)\n    with pytest.raises(ZeroDivisionError):\n        a.quo_rem(ZERO)\n    with pytest.raises(ZeroDivisionError):\n        a // ZERO\n    with pytest.raises(ZeroDivisionError):\n        a % ZERO\n    # half_gcd(a, ZERO) should ideally handle this gracefully or be caught by tests\n    # Let's see how the current implementation handles it\n    try:\n        w, v, u = half_gcd(a, ZERO)\n        # If b is zero, the loop condition `b_run.norm() >= limit` might be false initially\n        # The result should be (a, 0, 1) according to standard extended Euclidean Alg. conventions?\n        # Let's check what the code *actually* does.\n        # The loop `while b_run.norm() >= limit:` will not run if b_run is zero.\n        # It returns `b_run, v_, u_` initialized as `(b, 1, 0)` before loop.\n        # So it should return (ZERO, 1, 0)\n        assert w == ZERO\n        assert v == ONE  # Initial v_\n        assert u == ZERO  # Initial u_\n        # Let's check the identity a*u + b*v == w\n        # a*0 + 0*1 == 0 -> Correct\n    except ZeroDivisionError:\n        pytest.fail(\"half_gcd(a, ZERO) raised ZeroDivisionError unexpectedly\")\n    except Exception as e:\n        pytest.fail(f\"half_gcd(a, ZERO) raised an unexpected exception: {e}\")\n\n\ndef test_half_gcd_a_zero():\n    b = EisensteinInteger(3, 5)\n    # half_gcd(0, b)\n    try:\n        w, v, u = half_gcd(ZERO, b)\n        # Initialization: a_run=0, b_run=b, u=1, v=0, u_=0, v_=1\n        # limit = isqrt(0) = 0\n        # Loop condition: b.norm() >= 0 (true if b != 0)\n        # Inside loop: quotient, remainder = a_run.quo_rem(b_run) -> 0.quo_rem(b)\n        # 0 // b = 0, 0 % b = 0\n        # quotient = 0, remainder = 0\n        # next_u_ = u - quotient * u_ = 1 - 0*0 = 1\n        # next_v_ = v - quotient * v_ = 0 - 0*1 = 0\n        # a_run = b_run = b\n        # b_run = remainder = 0\n        # u = u_ = 0\n        # v = v_ = 1\n        # u_ = next_u_ = 1\n        # v_ = next_v_ = 0\n        # Loop condition: b_run.norm() (0) >= limit (0) -> true? No, condition is >= limit, should be false if limit=0.\n        # Let's re-read loop: `while b_run.norm() >= limit:`\n        # If limit is 0, loop runs as long as norm is non-negative. Needs a b_run.is_zero() check.\n        # The code *has* `if b_run.is_zero(): break`\n        # So, in the first iteration: a_run=0, b_run=b. limit=0. norm(b) >= 0.\n        # quo=0, rem=0.\n        # next_u_=1, next_v_=0\n        # a_run becomes b. b_run becomes 0. u becomes 0, v becomes 1. u_ becomes 1, v_ becomes 0.\n        # Next iteration: b_run is 0. Break.\n        # Return b_run, v_, u_ -> (0, 0, 1)\n        assert w == ZERO\n        assert v == ZERO  # Final v_\n        assert u == ONE  # Final u_\n        # Check identity: a*u + b*v == w\n        # 0*1 + b*0 == 0 -> Correct\n    except ZeroDivisionError:\n        pytest.fail(\"half_gcd(ZERO, b) raised ZeroDivisionError unexpectedly\")\n    except Exception as e:\n        pytest.fail(f\"half_gcd(ZERO, b) raised an unexpected exception: {e}\")\n"
  },
  {
    "path": "tests/hydra/hints/test_fake_glv.py",
    "content": "import random\n\nimport pytest\n\nfrom garaga.curves import CURVES, CurveID\nfrom garaga.hints.fake_glv import (\n    half_gcd_eisenstein_hint,\n    scalar_mul_fake_glv,\n    scalar_mul_glv_and_fake_glv,\n)\nfrom garaga.points import G1Point\n\nGLV_FAKE_GLV_CURVES = [\n    CurveID(k) for k, v in CURVES.items() if v.is_endomorphism_available()\n]\nFAKE_GLV_CURVES = [\n    CurveID(k) for k, v in CURVES.items() if not v.is_endomorphism_available()\n]\n\n\n@pytest.mark.parametrize(\"curve_id\", GLV_FAKE_GLV_CURVES)\ndef test_half_gcd_eisenstein_hint(curve_id):\n    curve = CURVES[curve_id.value]\n    eigen_value = curve.eigen_value\n    order = curve.n\n\n    max_bit_length = curve.n.bit_length() // 4 + 9\n    print(f\"max_bit_length: {max_bit_length}\")\n    for _ in range(10000):\n        scalar = random.randint(1, order)\n        u1, u2, v1, v2 = half_gcd_eisenstein_hint(order, scalar, eigen_value)\n        # assert (scalar * (v1 + eigen_value * v2) + u1 + eigen_value * u2) % order == 0\n\n        assert abs(u1).bit_length() <= max_bit_length\n        assert abs(u2).bit_length() <= max_bit_length\n        assert abs(v1).bit_length() <= max_bit_length\n        assert abs(v2).bit_length() <= max_bit_length\n\n\n@pytest.mark.parametrize(\"curve_id\", GLV_FAKE_GLV_CURVES)\ndef test_glv_fake_glv(curve_id):\n    curve = CURVES[curve_id.value]\n    random_point = G1Point.get_nG(curve_id, 1)\n    # for _ in range(100):\n    #     scalar = random.randint(1, curve.n)\n    #     _ = scalar_mul_glv_and_fake_glv(random_point, scalar)\n    scalar = curve.n - 2\n    _ = scalar_mul_glv_and_fake_glv(random_point, scalar)\n\n    # for _ in range(100):\n    #     _ = scalar_mul_glv_and_fake_glv(random_point, scalar)\n    #     scalar -= 1\n\n\ndef test_glv_fake_glv_bls12_381_2():\n    curve = CURVES[CurveID.BLS12_381.value]\n    n_failed = 0\n    n_passed = 0\n    for _ in range(10):\n        try:\n            point = G1Point.gen_random_point_not_in_subgroup(CurveID.BLS12_381)\n            scalar = random.randint(1, 2**63)\n            expected_point = point.scalar_mul(scalar)\n            print(f\"expected_point: {expected_point}\")\n            _ = scalar_mul_glv_and_fake_glv(point, scalar)\n            n_passed += 1\n        except AssertionError as e:\n            print(f\"Assertion error for scalar = {e}\")\n            n_failed += 1\n    print(f\"n_failed: {n_failed}, n_passed: {n_passed}\")\n\n    # _ = scalar_mul_glv_and_fake_glv(point, scalar)\n    assert not point.is_in_prime_order_subgroup_generic()\n    print(f\"point nisg: {point}\")\n\n\ndef test_glv_fake_glv_bls12_381_3():\n    curve = CURVES[CurveID.BLS12_381.value]\n    n_failed = 0\n    n_passed = 0\n    for _ in range(100):\n        try:\n            point = G1Point.gen_random_point(CurveID.BLS12_381)\n            scalar = random.randint(1, curve.n)\n            _ = scalar_mul_glv_and_fake_glv(point, scalar)\n            n_passed += 1\n        except AssertionError as e:\n            print(f\"Assertion error for scalar = {scalar}\")\n            n_failed += 1\n    print(f\"n_failed: {n_failed}, n_passed: {n_passed}\")\n\n    # _ = scalar_mul_glv_and_fake_glv(point, scalar)\n\n\n@pytest.mark.parametrize(\"curve_id\", FAKE_GLV_CURVES)\ndef test_scalar_mul_fake_glv(curve_id):\n    curve = CURVES[curve_id.value]\n    G = G1Point.get_nG(curve_id, 1)\n    infinity_point = G1Point.infinity(curve_id)\n    n = curve.n\n\n    test_cases = [\n        # Point, Scalar, Description\n        (G, 0, \"Generator * 0\"),\n        (G, 1, \"Generator * 1\"),\n        (G, 2, \"Generator * 2\"),\n        (G, n - 1, \"Generator * (n-1)\"),\n        (G, n, \"Generator * n\"),\n        (infinity_point, 5, \"Infinity * 5\"),\n        (infinity_point, 0, \"Infinity * 0\"),\n    ]\n\n    # Add a random point case\n    random_point = G1Point.gen_random_point(curve_id)\n    test_cases.extend(\n        [\n            (random_point, 0, \"Random * 0\"),\n            (random_point, 1, \"Random * 1\"),\n            (random_point, n, \"Random * n\"),\n        ]\n    )\n\n    print(f\"\\nTesting Curve: {curve_id.name}\")\n    for point, scalar, desc in test_cases:\n        print(f\"  Case: {desc} (P={point}, s={scalar})\")\n        expected = point.scalar_mul(scalar)\n        actual = scalar_mul_fake_glv(point, scalar)\n        assert actual == expected, f\"Mismatch for {desc}\"\n\n    # Test more random points and scalars\n    num_random_tests = 10\n    print(f\"  Running {num_random_tests} random tests...\")\n    for i in range(num_random_tests):\n        point = G1Point.gen_random_point(curve_id)\n        scalar = random.randint(1, n)\n        # print(f\"    Random Test {i+1}: P={point}, s={scalar}\") # Optional: verbose logging\n        expected = point.scalar_mul(scalar)\n        actual = scalar_mul_fake_glv(point, scalar)\n        assert (\n            actual == expected\n        ), f\"Mismatch for random test {i+1} (P={point}, s={scalar})\"\n    print(f\"  {num_random_tests} random tests passed.\")\n\n    # Test random scalars for each bit length up to n.bit_length()\n    print(f\"  Running tests for scalar bit lengths 1 to {n.bit_length()}...\")\n    for k in range(1, n.bit_length() + 1, 4):\n        # Generate a scalar with exactly k bits\n        if k == 1:\n            scalar = 1  # Only possible 1-bit scalar > 0\n        else:\n            lower_bound = 1 << (k - 1)\n            upper_bound = (1 << k) - 1\n            scalar = random.randint(lower_bound, upper_bound)\n\n        # Ensure scalar is less than n (important for high bit lengths)\n        scalar = scalar % n\n        if scalar == 0:  # Avoid scalar 0 if it happens by modulo\n            scalar = 1  # Or continue; let's test with 1 in this rare case\n\n        point_to_test = G  # Use generator for consistency\n        # print(f\"    Bit Length {k}: s={scalar}\") # Optional: verbose logging\n\n        expected = point_to_test.scalar_mul(scalar)\n        actual = scalar_mul_fake_glv(point_to_test, scalar)\n        assert actual == expected, f\"Mismatch for scalar bit length {k} (s={scalar})\"\n    print(f\"  Scalar bit length tests passed.\")\n"
  },
  {
    "path": "tests/hydra/hints/test_final_exp_witness.py",
    "content": "import random\n\nimport pytest\n\nfrom garaga.algebra import get_sparsity\nfrom garaga.curves import CURVES, CurveID\nfrom garaga.hints.multi_miller_witness import (\n    get_final_exp_witness,\n    get_lambda,\n    get_miller_loop_output,\n)\nfrom garaga.hints.tower_backup import E6, E12\nfrom garaga.precompiled_circuits.multi_pairing_check import (\n    MultiPairingCheckCircuit,\n    WriteOps,\n    get_max_Q_degree,\n    get_pairing_check_input,\n)\n\n\n@pytest.mark.parametrize(\"seed\", range(4))\n@pytest.mark.parametrize(\"curve_id\", [CurveID.BN254, CurveID.BLS12_381])\ndef test_final_exp_witness(seed, curve_id):\n    random.seed(seed)\n    ONE = E12.one(curve_id.value)\n    λ = get_lambda(curve_id)\n    q = CURVES[curve_id.value].p\n    r = CURVES[curve_id.value].n\n    h = (q**12 - 1) // r\n\n    # Test correct case\n    f_correct = get_miller_loop_output(curve_id=curve_id, will_be_one=True)\n    root_correct_rust, w_full_correct_rust = get_final_exp_witness(\n        curve_id.value, f_correct, use_rust=True\n    )\n    root_correct_python, w_full_correct_python = get_final_exp_witness(\n        curve_id.value, f_correct, use_rust=False\n    )\n\n    # Compare Rust and Python implementations\n    assert (\n        root_correct_rust == root_correct_python\n    ), \"Roots should match between Rust and Python implementations\"\n    assert (\n        w_full_correct_rust == w_full_correct_python\n    ), \"Scaling factors should match between Rust and Python implementations\"\n\n    e6_subfield = E12(\n        [E6.random(curve_id.value), E6.zero(curve_id.value)], curve_id.value\n    )\n    scaling_factor_sparsity = get_sparsity(e6_subfield.to_direct())\n    scaling_factor = w_full_correct_rust.to_direct()\n    # Assert sparsity is correct: for every index where the sparsity is 0, the coefficient must 0 in scaling factor\n    for i in range(len(scaling_factor_sparsity)):\n        if scaling_factor_sparsity[i] == 0:\n            assert scaling_factor[i].value == 0\n    # Therefore scaling factor lies in Fp6\n\n    assert f_correct**h == ONE, \"f^h should equal 1 for correct case\"\n    assert (\n        f_correct * w_full_correct_rust == root_correct_rust**λ\n    ), \"f * w_full should equal root**λ for correct case\"\n\n    # Test incorrect case\n    f_incorrect = get_miller_loop_output(curve_id=curve_id, will_be_one=False)\n    root_incorrect_rust, w_full_incorrect_rust = get_final_exp_witness(\n        curve_id.value, f_incorrect, use_rust=True\n    )\n    root_incorrect_python, w_full_incorrect_python = get_final_exp_witness(\n        curve_id.value, f_incorrect, use_rust=False\n    )\n\n    # Compare Rust and Python implementations\n    assert (\n        root_incorrect_rust == root_incorrect_python\n    ), \"Roots should match between Rust and Python implementations\"\n    assert (\n        w_full_incorrect_rust == w_full_incorrect_python\n    ), \"Scaling factors should match between Rust and Python implementations\"\n\n    assert f_incorrect**h != ONE, \"f^h should not equal 1 for incorrect case\"\n    assert (\n        f_incorrect * w_full_incorrect_rust != root_incorrect_rust**λ\n    ), \"f * w_full should not equal root**λ for incorrect case\"\n\n    print(f\"{seed}-th check ok\")\n\n\n@pytest.mark.parametrize(\"curve_id\", [CurveID.BN254, CurveID.BLS12_381])\n@pytest.mark.parametrize(\"n_pairs\", [2, 3, 4, 5])\n@pytest.mark.parametrize(\"include_m\", [False, True])\ndef test_mpcheck(curve_id: CurveID, n_pairs: int, include_m: bool):\n    c = MultiPairingCheckCircuit(name=\"mock\", curve_id=curve_id.value, n_pairs=n_pairs)\n    circuit_input, m = get_pairing_check_input(curve_id, n_pairs, include_m=include_m)\n    c.write_p_and_q_raw(circuit_input)\n    M = c.write_elements(m, WriteOps.INPUT) if m is not None else None\n    c.multi_pairing_check(n_pairs, M)  # Check done implicitely here\n    c.finalize_circuit()\n\n    def total_cost(c):\n        summ = c.summarize()\n        summ[\"total_steps_cost\"] = (\n            summ[\"MULMOD\"] * 8\n            + summ[\"ADDMOD\"] * 4\n            + summ[\"ASSERT_EQ\"] * 2\n            + summ[\"POSEIDON\"] * 17\n            + summ[\"RLC\"] * 28\n        )\n        return summ\n\n    cost = total_cost(c)\n    q_max_degree = max([q.degree() for q in c.accumulate_poly_instructions[0].Qis])\n\n    # Assertions\n    assert q_max_degree <= get_max_Q_degree(curve_id.value, n_pairs)\n\n    print(f\"\\nTest {curve_id.name} {n_pairs=} {'with m' if include_m else 'without m'}\")\n    print(f\"Total cost: {cost}\")\n    print(f\"Q max degree: {q_max_degree}\")\n"
  },
  {
    "path": "tests/hydra/hints/test_frobenius.py",
    "content": "import pytest\n\nfrom garaga.curves import CurveID\nfrom garaga.hints.frobenius import generate_frobenius_maps, get_frobenius_maps\n\n\n@pytest.mark.parametrize(\"curve_id\", [CurveID.BN254.value, CurveID.BLS12_381.value])\n@pytest.mark.parametrize(\"extension_degree\", [6, 12])\n@pytest.mark.parametrize(\"frob_power\", [1, 2, 3])\ndef test_get_frobenius_maps(curve_id, extension_degree, frob_power):\n    k_expressions, constants_list = get_frobenius_maps(\n        curve_id, extension_degree, frob_power\n    )\n    k_expressions_gen, constants_list_gen = generate_frobenius_maps(\n        curve_id, extension_degree, frob_power\n    )\n    assert k_expressions == k_expressions_gen, f\"{k_expressions} != {k_expressions_gen}\"\n    assert constants_list == constants_list_gen\n"
  },
  {
    "path": "tests/hydra/hints/test_neg3.py",
    "content": "import random\n\nimport pytest\n\nfrom garaga.hints.neg_3 import neg_3_base_le, positive_negative_multiplicities\n\n\n@pytest.fixture\ndef test_params():\n    return list(range(128)) + [random.randint(0, 2**128) for _ in range(128)]\n\n\ndef test_neg_3_base_le(test_params):\n    for integer in test_params:\n        assert (\n            sum((-3) ** i * x for i, x in enumerate(neg_3_base_le(integer))) == integer\n        )\n\n\ndef test_positive_negative_multiplicities(test_params):\n    for integer in test_params:\n        ep, en = positive_negative_multiplicities(neg_3_base_le(integer))\n        assert integer == ep - en\n\n\nif __name__ == \"__main__\":\n    pytest.main()\n"
  },
  {
    "path": "tests/hydra/starknet/test_calldata.py",
    "content": "import random\n\nimport pytest\n\nfrom garaga.curves import CURVES, CurveID\nfrom garaga.points import G1Point\nfrom garaga.precompiled_circuits.multi_pairing_check import get_pairing_check_input\nfrom garaga.starknet.tests_and_calldata_generators.drand_calldata import (\n    drand_encrypt_to_calldata,\n    drand_round_to_calldata,\n)\nfrom garaga.starknet.tests_and_calldata_generators.mpcheck import MPCheckCalldataBuilder\nfrom garaga.starknet.tests_and_calldata_generators.msm import MSMCalldataBuilder\n\n# Define the curves to be tested\ncurves = list(CurveID)\n\n\n@pytest.mark.parametrize(\"curve_id\", [CurveID.BN254, CurveID.BLS12_381])\n@pytest.mark.parametrize(\"mpc_size\", [2, 3])\n@pytest.mark.parametrize(\"n_fixed_g2\", [2])\n@pytest.mark.parametrize(\"include_m\", [True, False])\ndef test_mpc_calldata_builder(\n    curve_id,\n    mpc_size,\n    n_fixed_g2,\n    include_m,\n):\n    pairs, public_pair = get_pairing_check_input(\n        curve_id=curve_id,\n        n_pairs=mpc_size,\n        include_m=include_m,\n        return_pairs=True,\n    )\n\n    mpc = MPCheckCalldataBuilder(\n        curve_id=curve_id,\n        pairs=pairs,\n        n_fixed_g2=n_fixed_g2,\n        public_pair=public_pair,\n    )\n\n    calldata_py = mpc.serialize_to_calldata(use_rust=False)\n\n    calldata_rs = mpc.serialize_to_calldata(use_rust=True)\n\n    assert len(calldata_py) == len(calldata_rs)\n    assert calldata_py == calldata_rs\n\n\n@pytest.mark.parametrize(\"curve_id\", curves)\n@pytest.mark.parametrize(\"msm_size\", [1, 2])\n@pytest.mark.parametrize(\"include_points_and_scalars\", [True, False])\n@pytest.mark.parametrize(\"serialize_as_pure_felt252_array\", [True, False])\ndef test_msm_calldata_builder(\n    curve_id,\n    msm_size,\n    include_points_and_scalars,\n    serialize_as_pure_felt252_array,\n):\n    curve = CURVES[curve_id.value]\n    order = curve.n\n\n    scalar_limit = order\n\n    points = [G1Point.gen_random_point(curve_id) for _ in range(msm_size)]\n    scalars = [random.randint(0, scalar_limit - 1) for _ in range(msm_size)]\n\n    msm = MSMCalldataBuilder(\n        points=points,\n        scalars=scalars,\n        curve_id=curve_id,\n    )\n\n    calldata1 = msm.serialize_to_calldata(\n        include_points_and_scalars=include_points_and_scalars,\n        serialize_as_pure_felt252_array=serialize_as_pure_felt252_array,\n        use_rust=False,\n    )\n\n    calldata2 = msm.serialize_to_calldata(\n        include_points_and_scalars=include_points_and_scalars,\n        serialize_as_pure_felt252_array=serialize_as_pure_felt252_array,\n        use_rust=True,\n    )\n\n    assert calldata1 == calldata2\n\n\n@pytest.mark.parametrize(\"round_number\", [1, 2, 3])\ndef test_drand_randomness_to_calldata(\n    round_number,\n):\n    calldata1 = drand_round_to_calldata(\n        round_number,\n        use_rust=False,\n    )\n\n    calldata2 = drand_round_to_calldata(\n        round_number,\n        use_rust=True,\n    )\n\n    assert calldata1 == calldata2\n\n\n@pytest.mark.parametrize(\"round_number\", [1, 2, 3])\n@pytest.mark.parametrize(\n    \"message\", [b\"0000000000000000\", b\"1234567890abcdef\", b\"fedababafecacaca\"]\n)\n@pytest.mark.parametrize(\"randomness\", [b\"0000000000000000\", b\"dead00013000beef\"])\ndef test_drand_encrypt_to_round_calldata(\n    round_number,\n    message,\n    randomness,\n):\n    calldata1 = drand_encrypt_to_calldata(\n        round_number,\n        message,\n        randomness,\n        use_rust=False,\n    )\n\n    calldata2 = drand_encrypt_to_calldata(\n        round_number,\n        message,\n        randomness,\n        use_rust=True,\n    )\n\n    assert calldata1 == calldata2\n\n\nif __name__ == \"__main__\":\n    pytest.main()\n"
  },
  {
    "path": "tests/hydra/starknet/test_groth16_vk_proof_parsing.py",
    "content": "import pytest\n\nfrom garaga.starknet.groth16_contract_generator.calldata import (\n    groth16_calldata_from_vk_and_proof,\n)\nfrom garaga.starknet.groth16_contract_generator.parsing_utils import (\n    Groth16Proof,\n    Groth16VerifyingKey,\n)\n\nPATH = \"hydra/garaga/starknet/groth16_contract_generator/examples\"\n\n\n@pytest.mark.parametrize(\n    \"vk_path\",\n    [\n        f\"{PATH}/snarkjs_vk_bn254.json\",\n        f\"{PATH}/snarkjs_vk_bls12381.json\",\n        f\"{PATH}/vk_bn254.json\",\n        f\"{PATH}/vk_bls.json\",\n        f\"{PATH}/gnark_vk_bn254.json\",\n        f\"{PATH}/vk_risc0.json\",\n        f\"{PATH}/vk_sp1.json\",\n    ],\n)\ndef test_vk_parsing(vk_path: str):\n    vk = Groth16VerifyingKey.from_json(vk_path)\n    print(vk)\n\n    # if vk_path == f\"{PATH}/vk_sp1.json\":\n    #     print(\"[\")\n    #     for e in vk.flatten():\n    #         print(f'\"{hex(e)[2:]}\",')\n    #     print(\"]\")\n\n\n@pytest.mark.parametrize(\n    \"proof_path\",\n    [\n        f\"{PATH}/proof_bn254.json\",\n        f\"{PATH}/proof_bls.json\",\n        f\"{PATH}/proof_risc0.json\",\n        f\"{PATH}/proof_sp1.json\",\n    ],\n)\ndef test_proof_parsing(proof_path: str):\n    proof = Groth16Proof.from_json(proof_path)\n    print(proof)\n\n\n@pytest.mark.parametrize(\n    \"proof_path, pub_inputs_path\",\n    [\n        (f\"{PATH}/snarkjs_proof_bn254.json\", f\"{PATH}/snarkjs_public_bn254.json\"),\n        (f\"{PATH}/snarkjs_proof_bls12381.json\", f\"{PATH}/snarkjs_public_bls12381.json\"),\n        (f\"{PATH}/gnark_proof_bn254.json\", f\"{PATH}/gnark_public_bn254.json\"),\n    ],\n)\ndef test_proof_parsing_with_public_input(proof_path: str, pub_inputs_path: str):\n    proof = Groth16Proof.from_json(proof_path, pub_inputs_path)\n\n    print(proof)\n\n\n@pytest.mark.parametrize(\n    \"proof_path, vk_path, pub_inputs_path\",\n    [\n        (f\"{PATH}/proof_bn254.json\", f\"{PATH}/vk_bn254.json\", None),\n        (f\"{PATH}/proof_bls.json\", f\"{PATH}/vk_bls.json\", None),\n        (\n            f\"{PATH}/gnark_proof_bn254.json\",\n            f\"{PATH}/gnark_vk_bn254.json\",\n            f\"{PATH}/gnark_public_bn254.json\",\n        ),\n        (\n            f\"{PATH}/snarkjs_proof_bn254.json\",\n            f\"{PATH}/snarkjs_vk_bn254.json\",\n            f\"{PATH}/snarkjs_public_bn254.json\",\n        ),\n        (f\"{PATH}/proof_risc0.json\", f\"{PATH}/vk_risc0.json\", None),\n        (f\"{PATH}/proof_sp1.json\", f\"{PATH}/vk_sp1.json\", None),\n    ],\n)\ndef test_calldata_generation(\n    proof_path: str, vk_path: str, pub_inputs_path: str | None\n):\n    import time\n\n    vk = Groth16VerifyingKey.from_json(vk_path)\n    proof = Groth16Proof.from_json(proof_path, pub_inputs_path)\n\n    start = time.time()\n    calldata = groth16_calldata_from_vk_and_proof(vk, proof, use_rust=False)\n    end = time.time()\n    print(f\"Python time: {end - start}\")\n\n    start = time.time()\n    calldata_rust = groth16_calldata_from_vk_and_proof(vk, proof, use_rust=True)\n    end = time.time()\n    print(f\"Rust time: {end - start}\")\n    assert calldata == calldata_rust\n"
  },
  {
    "path": "tests/hydra/starknet/test_honk_vk_proof_parsing.py",
    "content": "import pytest\n\nfrom garaga.curves import ProofSystem\nfrom garaga.precompiled_circuits.zk_honk import HonkVk, honk_proof_from_bytes\nfrom garaga.starknet.honk_contract_generator.calldata import (\n    get_ultra_flavor_honk_calldata_from_vk_and_proof,\n)\n\nPATH = \"hydra/garaga/starknet/honk_contract_generator/examples\"\n\n\n@pytest.mark.parametrize(\n    \"vk_path, vk_hash_path\",\n    [\n        (f\"{PATH}/vk_ultra_keccak.bin\", f\"{PATH}/vk_hash_ultra_keccak.bin\"),\n    ],\n)\ndef test_vk_parsing(vk_path: str, vk_hash_path: str):\n    vk = HonkVk.from_bytes(open(vk_path, \"rb\").read())\n    vk_hash_expected = int.from_bytes(open(vk_hash_path, \"rb\").read(), \"big\")\n    assert (\n        vk.vk_hash == vk_hash_expected\n    ), f\"vk_hash: {hex(vk.vk_hash)} != vk_hash_expected: {hex(vk_hash_expected)}\"\n    print(vk)\n\n\n@pytest.mark.parametrize(\n    \"proof_path, public_inputs_path, vk_path, system\",\n    [\n        (\n            f\"{PATH}/proof_ultra_keccak_zk.bin\",\n            f\"{PATH}/public_inputs_ultra_keccak.bin\",\n            f\"{PATH}/vk_ultra_keccak.bin\",\n            ProofSystem.UltraKeccakZKHonk,\n        ),\n    ],\n)\ndef test_proof_parsing(\n    proof_path: str,\n    public_inputs_path: str,\n    vk_path: str,\n    system: ProofSystem,\n):\n    vk = HonkVk.from_bytes(open(vk_path, \"rb\").read())\n    proof = honk_proof_from_bytes(\n        open(proof_path, \"rb\").read(), open(public_inputs_path, \"rb\").read(), vk, system\n    )\n    print(proof)\n\n\n@pytest.mark.parametrize(\n    \"proof_path, public_inputs_path, vk_path, system\",\n    [\n        (\n            f\"{PATH}/proof_ultra_keccak_zk.bin\",\n            f\"{PATH}/public_inputs_ultra_keccak.bin\",\n            f\"{PATH}/vk_ultra_keccak.bin\",\n            ProofSystem.UltraKeccakZKHonk,\n        ),\n    ],\n)\ndef test_calldata_generation(\n    proof_path: str,\n    public_inputs_path: str,\n    vk_path: str,\n    system: ProofSystem,\n):\n    import time\n\n    vk = HonkVk.from_bytes(open(vk_path, \"rb\").read())\n    proof = honk_proof_from_bytes(\n        open(proof_path, \"rb\").read(), open(public_inputs_path, \"rb\").read(), vk, system\n    )\n\n    start = time.time()\n    calldata = get_ultra_flavor_honk_calldata_from_vk_and_proof(\n        vk, proof, system, use_rust=False\n    )\n    end = time.time()\n    print(f\"Python time: {end - start}\")\n\n    start = time.time()\n    calldata_rust = get_ultra_flavor_honk_calldata_from_vk_and_proof(\n        vk, proof, system, use_rust=True\n    )\n    end = time.time()\n    print(f\"Rust time: {end - start}\")\n    assert calldata == calldata_rust\n"
  },
  {
    "path": "tests/hydra/starknet/test_signatures_calldata.py",
    "content": "import json\n\nimport pytest\nfrom garaga.curves import CurveID\nfrom garaga.starknet.tests_and_calldata_generators.signatures import (\n    ECDSASignature,\n    EdDSA25519Signature,\n    RSA2048Signature,\n    SchnorrSignature,\n)\n\n# Define the curves to be tested\ncurves = list(CurveID)\n\n\n@pytest.mark.parametrize(\"curve_id\", curves)\n@pytest.mark.parametrize(\"prepend_public_key\", [True, False])\ndef test_schnorr_calldata_builder(curve_id, prepend_public_key):\n    \"\"\"Test that Python and Rust implementations of Schnorr signature calldata match\"\"\"\n    for _ in range(3):  # Test 3 random samples\n        # Generate a random valid signature\n        sig = SchnorrSignature.sample(curve_id)\n\n        # Get calldata from Python implementation\n        calldata1 = sig.serialize_with_hints(\n            use_rust=False, prepend_public_key=prepend_public_key\n        )\n\n        # Get calldata from Rust implementation\n        calldata2 = sig.serialize_with_hints(\n            use_rust=True, prepend_public_key=prepend_public_key\n        )\n\n        assert (\n            calldata1 == calldata2\n        ), f\"Mismatch in Schnorr calldata for curve {curve_id.name}\"\n\n\n@pytest.mark.parametrize(\"curve_id\", curves)\n@pytest.mark.parametrize(\"prepend_public_key\", [True, False])\ndef test_ecdsa_calldata_builder(curve_id, prepend_public_key):\n    \"\"\"Test that Python and Rust implementations of ECDSA signature calldata match\"\"\"\n    for _ in range(4):  # Test 4 random samples\n        # Generate a random valid signature\n        sig = ECDSASignature.sample(curve_id)\n\n        # Get calldata from Python implementation\n        calldata1 = sig.serialize_with_hints(\n            use_rust=False, prepend_public_key=prepend_public_key\n        )\n\n        # Get calldata from Rust implementation\n        calldata2 = sig.serialize_with_hints(\n            use_rust=True, prepend_public_key=prepend_public_key\n        )\n\n        assert (\n            calldata1 == calldata2\n        ), f\"Mismatch in ECDSA calldata for curve {curve_id.name}\"\n\n\n@pytest.mark.parametrize(\"prepend_public_key\", [True, False])\ndef test_eddsa_25519_signatures(prepend_public_key, full=False):\n    with open(\"tests/ed25519_test_vectors.json\", \"r\") as f:\n        test_vectors = json.load(f)\n\n    if full:\n        test_vectors = test_vectors\n    else:\n        test_vectors = test_vectors[0:96]\n\n    for i, test_vector in enumerate(test_vectors):\n        signature = EdDSA25519Signature.from_json(test_vector)\n        assert signature.is_valid(), f\"Signature {i} is invalid\"\n\n        calldata_py = signature.serialize_with_hints(\n            use_rust=False, prepend_public_key=prepend_public_key\n        )\n        calldata_rust = signature.serialize_with_hints(\n            use_rust=True, prepend_public_key=prepend_public_key\n        )\n\n        assert (\n            calldata_py == calldata_rust\n        ), f\"Mismatch in EdDSA calldata for test vector {i}\"\n\n\n@pytest.mark.parametrize(\"prepend_public_key\", [True, False])\ndef test_rsa2048_calldata_lengths(prepend_public_key):\n    signature = RSA2048Signature.sample(seed=0)\n    calldata = signature.serialize_with_hints(\n        use_rust=False, prepend_public_key=prepend_public_key\n    )\n    expected_len = 888 if prepend_public_key else 864\n    assert len(calldata) == expected_len\n\n\ndef test_rsa2048_calldata_public_key_prefix():\n    signature = RSA2048Signature.sample(seed=0)\n    full = signature.serialize_with_hints(use_rust=False, prepend_public_key=True)\n    public_key = signature.serialize_public_key()\n    witness = signature.serialize_signature_with_hints()\n\n    assert full[: len(public_key)] == public_key\n    assert full[len(public_key) :] == witness\n\n\n@pytest.mark.parametrize(\"prepend_public_key\", [True, False])\ndef test_rsa2048_calldata_builder(prepend_public_key):\n    \"\"\"Test that Python and Rust implementations of RSA-2048 calldata match\"\"\"\n    for seed in range(3):\n        sig = RSA2048Signature.sample(seed=seed)\n\n        calldata_py = sig.serialize_with_hints(\n            use_rust=False, prepend_public_key=prepend_public_key\n        )\n        calldata_rs = sig.serialize_with_hints(\n            use_rust=True, prepend_public_key=prepend_public_key\n        )\n\n        assert (\n            calldata_py == calldata_rs\n        ), f\"Mismatch in RSA-2048 calldata for seed {seed}\"\n\n\n@pytest.mark.parametrize(\"prepend_public_key\", [True, False])\n@pytest.mark.parametrize(\"message\", [b\"hello garaga\", b\"\", b\"a\" * 100, b\"\\x00\\x01\\x02\"])\ndef test_rsa2048_sha256_calldata_builder(prepend_public_key, message):\n    \"\"\"Test that Python and Rust implementations of RSA-2048 SHA-256 calldata match\"\"\"\n    sig = RSA2048Signature.from_sha256_message(message, seed=0)\n\n    calldata_py = sig.serialize_sha256_with_hints(\n        message=message,\n        use_rust=False,\n        prepend_public_key=prepend_public_key,\n    )\n    calldata_rs = sig.serialize_sha256_with_hints(\n        message=message,\n        use_rust=True,\n        prepend_public_key=prepend_public_key,\n    )\n\n    assert (\n        calldata_py == calldata_rs\n    ), f\"Mismatch in RSA-2048 SHA-256 calldata for message {message!r}\"\n\n\nif __name__ == \"__main__\":\n    pytest.main()\n"
  },
  {
    "path": "tests/hydra/test_bls18_381_map_to_curve.py",
    "content": "from garaga.modulo_circuit import WriteOps\nfrom garaga.precompiled_circuits.map_to_curve import MapToCurveG1, MapToCurveG2\n\n\ndef test_bls18_381_map_to_curve_g2_non_quadratic():\n    circuit = MapToCurveG2(\"test\", 1)\n    circuit.set_consts()\n\n    field = circuit.write_elements(\n        [\n            circuit.field(\n                3741944764571472160006322193608041966151877622471123223277469611910821820061028054244113212685535996904839352799402\n            ),\n            circuit.field(\n                2076377621229436486953902801269393160218977179950230047408992877427440885760409779221205731516804245080380194857867\n            ),\n        ],\n        WriteOps.INPUT,\n    )\n\n    g1x, div, num_x1, zeta_u2 = circuit.map_to_curve_part_1(field)\n\n    # Assert intermediate results\n    assert (\n        g1x[0].emulated_felt.value\n        == 953996773580150187658453355749387256203585747550541475689949001565592017941792784008487857020741875161940439358169\n    )\n    assert (\n        g1x[1].emulated_felt.value\n        == 1091041959624877033265075916985653082630429384881674462548287154185532968300913190673468388150241943339667076518253\n    )\n\n    assert (\n        div[0].emulated_felt.value\n        == 1271124738425673168909051490409346544806999942963856749219399676853245141674638476952210593612982147617933716830990\n    )\n    assert (\n        div[1].emulated_felt.value\n        == 2707549614030537572533166896762785147996244686855330285575235995466755739337470183080976608052299087222211278178288\n    )\n\n    assert (\n        num_x1[0].emulated_felt.value\n        == 3368717908425370587121521256961562283349295337955434359453978866874955592536159067888255032927442968748123109596151\n    )\n    assert (\n        num_x1[1].emulated_felt.value\n        == 3415444388557434595807082624117973727069974003779938583652094445339905219350042585004730694719550642891646061378068\n    )\n\n    assert (\n        zeta_u2[0].emulated_felt.value\n        == 2066503771099735372725208757434934470387642893685367231392552060087408173898621033802030119021772665098131312925308\n    )\n    assert (\n        zeta_u2[1].emulated_felt.value\n        == 1011496392125783422068061997226415746244229915320831072846626167000664891392171563621675612638222437312051389941143\n    )\n\n    x_affine, y, field = circuit.compute_initial_coordinates_non_quadratic(\n        field, g1x, div, num_x1, zeta_u2\n    )\n\n    y_affine, qfield, qy = circuit.adjust_y_sign(y, field)\n\n    # Assert final results\n    assert (\n        x_affine[0].emulated_felt.value\n        == 2006413752686223508612366075043722458232321744863932880413784802489452766740742045984482044248764924205010366531647\n    )\n    assert (\n        x_affine[1].emulated_felt.value\n        == 2103918733930157635900741069076788853417130098910518594897125230089087553459780427160470339353748226243766968776215\n    )\n\n    assert (\n        y_affine[0].emulated_felt.value\n        == 2345181275451808874246097791768578660839971403546046193253448677984295781774410213317345275973043584946083029690838\n    )\n    assert (\n        y_affine[1].emulated_felt.value\n        == 491718355885353185704655750809656447183587281146662745649897882009019112506313662303269809992594062560315039747134\n    )\n\n\ndef test_bls18_381_map_to_curve_g2_quadratic():\n    circuit = MapToCurveG2(\"test\", 1)\n    circuit.set_consts()\n\n    field = circuit.write_elements(\n        [\n            circuit.field(\n                1556800727266659224486307223710983989761661593776178353933175239605467918853638579207638742450628877266610077644019\n            ),\n            circuit.field(\n                2231413721970278425038638834062370180699174210864795385441649994565282274875534254514118105433862522641883533654145\n            ),\n        ],\n        WriteOps.INPUT,\n    )\n\n    g1x, div, num_x1, zeta_u2 = circuit.map_to_curve_part_1(field)\n\n    # Assert intermediate results\n    assert (\n        g1x[0].emulated_felt.value\n        == 1741461048819108320601120926297383578798673393844727619465122674954412335152552581570073244593349691385858884173583\n    )\n    assert (\n        g1x[1].emulated_felt.value\n        == 622728400870450638897257156989331087788861565586056105959821305999301052577755232615332472975146795773248285518397\n    )\n\n    assert (\n        div[0].emulated_felt.value\n        == 245484112468371472016059514225945212312552892410862615098545961349697995155733061412689120985823985643121008707443\n    )\n    assert (\n        div[1].emulated_felt.value\n        == 2710033076136311888860218740720521072952923210029411465485968205608170799418483286817121694092479356648635501832540\n    )\n\n    assert (\n        num_x1[0].emulated_felt.value\n        == 678813894361393103360103286141952477825674360176586850375556142934890501990305386551122112060089003594179575462051\n    )\n    assert (\n        num_x1[1].emulated_felt.value\n        == 481031161552380994425457621530411412945970154876090436018460806513725659192179414613944042534095739563026661110941\n    )\n\n    assert (\n        zeta_u2[0].emulated_felt.value\n        == 2605347211487192472869035898066121846694525878433542755302801455037350149869786867270039608133704248908541829065188\n    )\n    assert (\n        zeta_u2[1].emulated_felt.value\n        == 2186733141282187687524429079326838649285331456588145172920951615849025076744838489106511432055390831654029460361575\n    )\n\n    x_affine, y, field = circuit.compute_initial_coordinates_quadratic(\n        field, g1x, div, num_x1\n    )\n\n    y_affine, qfield, qy = circuit.adjust_y_sign(y, field)\n\n    # Assert final results\n    assert (\n        x_affine[0].emulated_felt.value\n        == 2843075373688611471290556504186176053275483247291128525980163517764803526616259371130035811825227707920936817728741\n    )\n    assert (\n        x_affine[1].emulated_felt.value\n        == 3661712616179456093275454398202160102594067191736010383603184812959944211042529505618295008186663134429283699505891\n    )\n\n    assert (\n        y_affine[0].emulated_felt.value\n        == 2229899020770589661585214900480830515873415727829711460134445858387853696109925143060238999266818473086058450471795\n    )\n    assert (\n        y_affine[1].emulated_felt.value\n        == 3127664777588830509127251096086955764006894160737524705993294599144750103128110100147816255502757346871240956727581\n    )\n\n\ndef test_bls18_381_map_to_curve_g1_quadratic():\n    circuit = MapToCurveG1(\"test\", 1)\n    circuit.set_consts()\n\n    field = circuit.write_element(\n        circuit.field(\n            2231413721970278425038638834062370180699174210864795385441649994565282274875534254514118105433862522641883533654145\n        )\n    )\n\n    g1x, div, num_x1, zeta_u2 = circuit.map_to_curve_part_1(field)\n\n    # Assert intermediate results\n    assert (\n        g1x.emulated_felt.value\n        == 2597611908074869266676097344052780591254059561619989704088799034359084350987704445977946845985385140941235233170571\n    )\n    assert (\n        div.emulated_felt.value\n        == 2805237479025562283149334731040192757369528037210657601602127558394884972035943561694397352660127862349210615463142\n    )\n    assert (\n        num_x1.emulated_felt.value\n        == 357516532893183420527219030989999274866612035539674613298479245292141662614414253856542640697610990033784993055353\n    )\n    assert (\n        zeta_u2.emulated_felt.value\n        == 1458720157247399937074920312179320190319011370446888399995409372377477911247349655187476411795089883075347478260790\n    )\n\n    x_affine, y_initial, field = circuit.compute_initial_coordinates_quadratic(\n        field, g1x, div, num_x1\n    )\n\n    y_affine, qy, qfield = circuit.adjust_y_sign(y_initial, field)\n\n    # Assert final results\n    assert (\n        x_affine.emulated_felt.value\n        == 821680820282835312240647697969669528662337868557420531415876216710180320418897646214379495222032594074174798424202\n    )\n    assert (\n        y_affine.emulated_felt.value\n        == 2810929796268343801118836101228108033947242316820103062127644703467142871560955216144508646104360230898984292110363\n    )\n\n\ndef test_bls18_381_map_to_curve_g1_non_quadratic():\n    circuit = MapToCurveG1(\"test\", 1)\n    circuit.set_consts()\n\n    field = circuit.write_element(\n        circuit.field(\n            1556800727266659224486307223710983989761661593776178353933175239605467918853638579207638742450628877266610077644019\n        )\n    )\n\n    g1x, div, num_x1, zeta_u2 = circuit.map_to_curve_part_1(field)\n\n    # Assert intermediate results\n    assert (\n        g1x.emulated_felt.value\n        == 341972610627912974245460429393853020244324285563375868527372516439156668443097006714852415949547549919046535667616\n    )\n    assert (\n        div.emulated_felt.value\n        == 437377489188823988571636230286582387258102034988413032009071756963827842481400269867189494736241034037731549310834\n    )\n    assert (\n        num_x1.emulated_felt.value\n        == 859079108276904279242178106413495842276094320054147243681841678369946208284556898300157013329362279916993343726889\n    )\n    assert (\n        zeta_u2.emulated_felt.value\n        == 3595463469902610153619251584554498156597029272564817168764456841515827675239496939601340079478403412813212271353518\n    )\n\n    x_affine, y_initial, field = circuit.compute_initial_coordinates_non_quadratic(\n        field, g1x, div, num_x1, zeta_u2\n    )\n\n    y_affine, qy, qfield = circuit.adjust_y_sign(y_initial, field)\n\n    # Assert final results\n    assert (\n        x_affine.emulated_felt.value\n        == 1412853964218444964438936699552956047210482383152224645596624291427056376487356261681298103080878386132407858666637\n    )\n    assert (\n        y_affine.emulated_felt.value\n        == 752734926215712395741522221355891264404138695398702662135908094550118515106801651502315795564392519475687558113863\n    )\n"
  },
  {
    "path": "tests/hydra/test_cofactor_clearing.py",
    "content": "import garaga.modulo_circuit_structs as structs\nfrom garaga.curves import CURVES, PyFelt\nfrom garaga.modulo_circuit import WriteOps\nfrom hydra.garaga.precompiled_circuits.cofactor_clearing import (\n    FastG2CofactorClearing,\n    G1CofactorClearing,\n    SlowG2CofactorClearing,\n)\n\n\ndef test_cofactor_clearing():\n    # Initialize circuit\n    circuit = FastG2CofactorClearing(name=\"cofactor_clearing\", curve_id=1)\n\n    # Input values\n    values = [\n        PyFelt(\n            3789617024712504402204306620295003375951143917889162928515122476381982967144814366712031831841518399614182231387665,\n            CURVES[1].p,\n        ),\n        PyFelt(\n            1467567314213963969852279817989131104935039564231603908576814773321528757289376676761397368853965316423532584391899,\n            CURVES[1].p,\n        ),\n        PyFelt(\n            1292375129422168617658520396283100687686347104559592203462491249161639006037671760603453326853098986903549775136448,\n            CURVES[1].p,\n        ),\n        PyFelt(\n            306655960768766438834866368706782505873384691666290681181893693450298456233972904889955517117016529975705729523733,\n            CURVES[1].p,\n        ),\n    ]\n\n    # Write struct and get coordinates\n    px0, px1, py0, py1 = circuit.write_struct(\n        structs.G2PointCircuit(\"G2\", values), WriteOps.INPUT\n    )\n\n    # Run cofactor clearing\n    result = circuit.clear_cofactor(([px0, px1], [py0, py1]))\n    print(result)\n\n    # Assert x coordinates\n    assert (\n        result[0][0].emulated_felt.value\n        == 3553105769882656599146811322193073462254184878577379981354181602459568891247079537874757677386646278295787021209189\n    )\n    assert (\n        result[0][1].emulated_felt.value\n        == 214383232028397026483172293507406653308736549333914058501039576182920645751681896937109061242049824624418352241545\n    )\n\n    # Assert y coordinates\n    assert (\n        result[1][0].emulated_felt.value\n        == 3739747178790495019675321498823208242976352322769291665915571365507822310651678949551185523146598688776619260961478\n    )\n    assert (\n        result[1][1].emulated_felt.value\n        == 2892856738085945244799268348340138656888776287206503012318583837503972113824639536543638524553710065178322083313320\n    )\n\n    # Test slow cofactor clearing produces same results\n    slow_circuit = SlowG2CofactorClearing(name=\"slow_co_clear\", curve_id=1)\n\n    # Write struct and get coordinates\n    slow_px0, slow_px1, slow_py0, slow_py1 = slow_circuit.write_struct(\n        structs.G2PointCircuit(\"G2\", values), WriteOps.INPUT\n    )\n\n    # Run slow cofactor clearing\n    slow_result = slow_circuit.clear_cofactor(\n        ([slow_px0, slow_px1], [slow_py0, slow_py1])\n    )\n\n    # Assert results match fast implementation\n    assert slow_result[0][0].emulated_felt.value == result[0][0].emulated_felt.value\n    assert slow_result[0][1].emulated_felt.value == result[0][1].emulated_felt.value\n    assert slow_result[1][0].emulated_felt.value == result[1][0].emulated_felt.value\n    assert slow_result[1][1].emulated_felt.value == result[1][1].emulated_felt.value\n\n\ndef test_cofactor_clearing_g1():\n    circuit = G1CofactorClearing(name=\"cofactor_clearing\", curve_id=1)\n    val_x = circuit.write_element(\n        circuit.field(\n            3789617024712504402204306620295003375951143917889162928515122476381982967144814366712031831841518399614182231387665\n        )\n    )\n\n    val_y = circuit.write_element(\n        circuit.field(\n            1292375129422168617658520396283100687686347104559592203462491249161639006037671760603453326853098986903549775136448\n        )\n    )\n\n    x, y = circuit.clear_cofactor((val_x, val_y))\n    assert (\n        x.emulated_felt.value\n        == 124653168926536040050712523694358620626733702681766514335826706855268535061758110145263289951074346182616444645930\n    )\n    assert (\n        y.emulated_felt.value\n        == 1763117104256928975303050316870512727100973588519940064853641891041664131774050255702157308774582078610333186925605\n    )\n"
  },
  {
    "path": "tests/hydra/test_drand.py",
    "content": "import hashlib\nimport random\n\nimport pytest\nimport requests\n\nfrom garaga.curves import CurveID\nfrom garaga.drand.client import (\n    BASE_URLS,\n    DrandNetwork,\n    digest_func,\n    get_randomness,\n    print_all_chain_info,\n)\nfrom garaga.drand.tlock import decrypt_at_round, encrypt_for_round\nfrom garaga.points import G1G2Pair, G2Point\nfrom garaga.signature import hash_to_curve\n\n\n@pytest.mark.parametrize(\"round_number\", list(range(1, 5)) + list(range(1000, 1005)))\ndef test_drand_sig_verification(round_number: int):\n    chain_infos = print_all_chain_info()\n\n    network = DrandNetwork.quicknet\n    chain = chain_infos[network]\n\n    round = get_randomness(chain.hash, round_number)\n    print(f\"Randomness for round {round_number}:\", round)\n    sha256 = hashlib.sha256()\n    sha256.update(bytes.fromhex(round.signature))\n    print(\"randomness\", sha256.hexdigest())\n    print(\"random beacon\", hex(round.randomness))\n\n    msg_point = hash_to_curve(\n        digest_func(round.round_number), CurveID.BLS12_381, \"sha256\"\n    )\n    print(\"message\", msg_point)\n\n    assert (\n        G1G2Pair.pair(\n            [\n                G1G2Pair(\n                    p=round.signature_point, q=G2Point.get_nG(CurveID.BLS12_381, 1)\n                ),\n                G1G2Pair(p=msg_point, q=-chain.public_key),\n            ],\n            curve_id=CurveID.BLS12_381,\n        ).value_coeffs\n        == [1] + [0] * 11\n    ), \"Signature verification failed\"\n\n\n@pytest.mark.parametrize(\"round\", list(range(1, 5)) + list(range(1000, 1005)))\ndef test_tlock_encrypt_decrypt(round: int):\n    random.seed(42)\n    chain_infos = print_all_chain_info()\n    network = DrandNetwork.quicknet\n    chain = chain_infos[network]\n\n    master = chain.public_key\n\n    msg = random.randbytes(16)\n\n    ciph = encrypt_for_round(master, round, msg)\n\n    chain = chain_infos[network]\n    beacon = get_randomness(chain.hash, round)\n    signature_at_round = beacon.signature_point\n\n    msg_decrypted = decrypt_at_round(signature_at_round, ciph)\n    assert msg_decrypted == msg\n\n\n@pytest.mark.parametrize(\"round\", list(range(1, 5)))\ndef test_tlock_encrypt_same_message_gives_different_ciphertexts(round: int):\n    random.seed(42)\n    chain_infos = print_all_chain_info()\n    network = DrandNetwork.quicknet\n    chain = chain_infos[network]\n\n    master = chain.public_key\n\n    msg = b\"0123456789abcdef\"\n\n    ciph1 = encrypt_for_round(master, round, msg)\n    ciph2 = encrypt_for_round(master, round, msg)\n\n    assert ciph1.U != ciph2.U\n    assert ciph1.V != ciph2.V\n    assert ciph1.W != ciph2.W\n\n    chain = chain_infos[network]\n    beacon = get_randomness(chain.hash, round)\n    signature_at_round = beacon.signature_point\n\n    msg_decrypted1 = decrypt_at_round(signature_at_round, ciph1)\n    msg_decrypted2 = decrypt_at_round(signature_at_round, ciph2)\n\n    assert msg_decrypted1 == msg\n    assert msg_decrypted2 == msg\n\n\ndef test_all_base_urls_return_chains():\n    for url in BASE_URLS:\n        try:\n            response = requests.get(f\"{url}/chains\")\n            response.raise_for_status()\n            chains = response.json()\n\n            # Check that both default and quicknet chains are present\n            expected_chains = {network.value for network in DrandNetwork}\n            found_chains = set(chains)\n\n            assert expected_chains.issubset(\n                found_chains\n            ), f\"URL {url} missing chains: {expected_chains - found_chains}\"\n\n            print(f\"✓ {url} returned all expected chains\")\n        except Exception as e:\n            print(f\"✗ {url} failed: {str(e)}\")\n            continue\n"
  },
  {
    "path": "tests/hydra/test_extension_field_modulo_circuit.py",
    "content": "import random\n\nimport pytest\n\nfrom garaga.algebra import PyFelt\nfrom garaga.curves import CurveID\nfrom garaga.extension_field_modulo_circuit import ExtensionFieldModuloCircuit\nfrom garaga.modulo_circuit import ModuloCircuitElement, WriteOps\n\n\n@pytest.fixture(\n    params=[\n        (CurveID.BN254, 6),\n        (CurveID.BLS12_381, 6),\n        (CurveID.BN254, 12),\n        (CurveID.BLS12_381, 12),\n    ]\n)\ndef circuit(request) -> tuple[ExtensionFieldModuloCircuit, list[ModuloCircuitElement]]:\n    curve_id, extension_degree = request.param\n\n    def init_z_circuit(\n        z: int = 2,\n    ) -> tuple[ExtensionFieldModuloCircuit, list[ModuloCircuitElement]]:\n        c = ExtensionFieldModuloCircuit(\n            name=\"test\", curve_id=curve_id.value, extension_degree=extension_degree\n        )\n        c.create_powers_of_Z(c.field(z))\n        X = c.write_elements(\n            [PyFelt(i + 1, c.field.p) for i in range(extension_degree)],\n            operation=WriteOps.INPUT,\n        )\n        return c, X\n\n    return init_z_circuit()\n\n\ndef test_eval(circuit: tuple[ExtensionFieldModuloCircuit, list[ModuloCircuitElement]]):\n    c, X = circuit\n\n    X_of_z = c.eval_poly_in_precomputed_Z(X)\n    assert (\n        X_of_z.value\n        == sum((i + 1) * 2**i for i in range(c.extension_degree)) % c.field.p\n    )\n    assert len(c.z_powers) == c.extension_degree\n\n\ndef generate_random_sparsity(\n    extension_degree: int, num_cases: int = 32\n) -> list[list[int]]:\n    sparsities = [\n        [random.choice([0, 1, 2]) for _ in range(extension_degree)]\n        for _ in range(num_cases)\n    ]\n    for sparsity in sparsities:\n        if all(x == 0 for x in sparsity):\n            # Make sure there is at least one non-zero element somewhere\n            sparsity[random.randint(0, extension_degree - 1)] = random.choice([1, 2])\n    return sparsities\n\n\ndef test_eval_sparse(\n    circuit: tuple[ExtensionFieldModuloCircuit, list[ModuloCircuitElement]],\n):\n    c, X = circuit\n\n    sparsities = generate_random_sparsity(c.extension_degree)\n    for sparsity in sparsities:\n        X_of_z = c.eval_poly_in_precomputed_Z(X, sparsity=sparsity)\n        assert (\n            X_of_z.value\n            == (\n                sum((i + 1) * 2**i for i, s in enumerate(sparsity) if s == 1)\n                + sum(2**i for i, s in enumerate(sparsity) if s == 2)\n            )\n            % c.field.p\n        )\n\n\nif __name__ == \"__main__\":\n    pytest.main()\n"
  },
  {
    "path": "tests/hydra/test_g1_point.py",
    "content": "import pytest\n\nfrom garaga.curves import CURVES, CurveID, TwistedEdwardsCurve, is_generator\nfrom garaga.points import G1Point\n\n# List of curve IDs to test\ncurve_ids = list(CurveID)\n\n\n@pytest.mark.parametrize(\"curve_id\", [CurveID.ED25519])\ndef test_weierstrass_to_twistededwards_and_back(curve_id):\n    curve: TwistedEdwardsCurve = CURVES[curve_id.value]\n\n    # Define a point in Weierstrass form\n    x_weierstrass = curve.Gx\n    y_weierstrass = curve.Gy\n\n    x_twisted, y_twisted = curve.to_twistededwards(x_weierstrass, y_weierstrass)\n    x_weierstrass_back, y_weierstrass_back = curve.to_weierstrass(x_twisted, y_twisted)\n    assert x_weierstrass == x_weierstrass_back\n    assert y_weierstrass == y_weierstrass_back\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_fp_generator(curve_id):\n    if curve_id == CurveID.BLS12_381:\n        pytest.skip(\n            \"Skipping test for curve BLS12_381, it's a bit too slow to factorize p-1, but already tested. Uncomment to convince yourself.\"\n        )\n    g = CURVES[curve_id.value].fp_generator\n    p = CURVES[curve_id.value].p\n    assert is_generator(g, p)\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_equality(curve_id):\n    p1 = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    p2 = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    p3 = p1.add(p2)\n    assert p1 == p2\n    assert p1 != p3\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_infinity(curve_id):\n    inf = G1Point.infinity(curve_id)\n    assert inf.is_infinity()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_on_curve(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    assert p.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_not_on_curve(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    p.y = 3  # Modify y to make it not on the curve\n    assert not p.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_scalar_mul(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    result = p.scalar_mul(2)\n    assert result.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_addition(curve_id):\n    p1 = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    p2 = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    result = p1.add(p2)\n    assert result.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_addition_with_negative_point(curve_id):\n    p1 = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    p2 = -p1\n    result = p1.add(p2)\n    assert result.is_infinity()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_negation(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    neg_p = -p\n    assert neg_p.is_on_curve()\n    assert p.add(neg_p).is_infinity()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_msm(curve_id):\n    p1 = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    p2 = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    points = [p1, p2]\n    scalars = [2, 3]\n    result = G1Point.msm(points, scalars)\n    assert result.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_gen_random_point(curve_id):\n    p = G1Point.gen_random_point(curve_id)\n    assert p.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_gen_random_point_not_in_subgroup(curve_id):\n    if CURVES[curve_id.value].h == 1:\n        pytest.skip(f\"Skipping test for curve {curve_id} because the cofactor is 1\")\n    p = G1Point.gen_random_point_not_in_subgroup(curve_id, force_gen=True)\n    assert p.is_on_curve()\n    assert not p.is_in_prime_order_subgroup_generic()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_to_cairo_1(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    cairo_repr = p.to_cairo_1()\n    assert isinstance(cairo_repr, str)\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_doubling(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    doubled = p.add(p)\n    assert doubled.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_addition_vs_doubling(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    doubled = p.add(p)\n    scalar_mul_2 = p.scalar_mul(2)\n    assert doubled == scalar_mul_2\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_msm_vs_scalar_mul(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    scalar = 3\n    msm_result = G1Point.msm([p], [scalar])\n    scalar_mul_result = p.scalar_mul(scalar)\n    assert msm_result == scalar_mul_result\n\n\n# Edge case tests for scalar multiplication\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_scalar_mul_zero(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    result = p.scalar_mul(0)\n    assert result.is_infinity()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_scalar_mul_one(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    result = p.scalar_mul(1)\n    assert result == p\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_scalar_mul_negative(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    result = p.scalar_mul(-1)\n    assert result == -p\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_scalar_mul_large(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    large_scalar = 10**18\n    result = p.scalar_mul(large_scalar)\n    assert result.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_scalar_mul_invalid(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    with pytest.raises(TypeError):\n        p.scalar_mul(\"invalid_scalar\")\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_scalar_mul_order(curve_id):\n    p = G1Point(CURVES[curve_id.value].Gx, CURVES[curve_id.value].Gy, curve_id)\n    result = p.scalar_mul(CURVES[curve_id.value].n)\n    assert result.is_infinity()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g1point_scalar_mul_larger_than_order(curve_id):\n    # Generate 10 random points on the curve\n    random_points = [G1Point.gen_random_point(curve_id) for _ in range(10)]\n\n    for p in random_points:\n        result = p.scalar_mul(CURVES[curve_id.value].n + 1)\n        assert result == p\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_is_in_subgroup(curve_id):\n    for _ in range(10):\n        p = G1Point.gen_random_point(curve_id)\n        assert p.is_in_prime_order_subgroup()\n        assert p.is_in_prime_order_subgroup_generic()\n\n        if CURVES[curve_id.value].h != 1:\n            p = G1Point.gen_random_point_not_in_subgroup(curve_id)\n            assert not p.is_in_prime_order_subgroup()\n            assert not p.is_in_prime_order_subgroup_generic()\n"
  },
  {
    "path": "tests/hydra/test_g2_point.py",
    "content": "import random\n\nimport pytest\n\nfrom garaga.curves import CURVES, CurveID\nfrom garaga.points import G2Point\n\n# List of curve IDs to test\ncurve_ids = [CurveID.BN254, CurveID.BLS12_381]\n\n\ndef get_g2_generator_point(curve_id):\n    return G2Point(CURVES[curve_id.value].G2x, CURVES[curve_id.value].G2y, curve_id)\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_equality(curve_id):\n    p1 = get_g2_generator_point(curve_id)\n    p2 = get_g2_generator_point(curve_id)\n    p3 = p1.add(p2)\n    assert p1 == p2\n    assert p1 != p3\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_ng2(curve_id):\n    p = get_g2_generator_point(curve_id)\n    nG = G2Point.get_nG(curve_id, 1)\n\n    assert nG == p\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_infinity(curve_id):\n    inf = G2Point.infinity(curve_id)\n    assert inf.is_infinity()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_on_curve(curve_id):\n    p = get_g2_generator_point(curve_id)\n    assert p.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_not_on_curve(curve_id):\n    with pytest.raises(ValueError):\n        _ = G2Point((1, 2), (3, 4), curve_id)\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_scalar_mul(curve_id):\n    p = get_g2_generator_point(curve_id)\n    result = p.scalar_mul(2)\n    assert result.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_addition(curve_id):\n    p1 = get_g2_generator_point(curve_id)\n    p2 = get_g2_generator_point(curve_id)\n    result = p1.add(p2)\n    assert result.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_negation(curve_id):\n    p = get_g2_generator_point(curve_id)\n    neg_p = -p\n    assert neg_p.is_on_curve()\n    assert p.add(neg_p).is_infinity()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_msm(curve_id):\n    p1 = get_g2_generator_point(curve_id)\n    p2 = get_g2_generator_point(curve_id)\n    points = [p1, p2]\n    scalars = [2, 3]\n    result = G2Point.msm(points, scalars)\n    assert result.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_gen_random_point(curve_id):\n    p = G2Point.gen_random_point(curve_id)\n    assert p.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_scalar_mul_zero(curve_id):\n    p = get_g2_generator_point(curve_id)\n    result = p.scalar_mul(0)\n    assert result.is_infinity()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_scalar_mul_one(curve_id):\n    p = get_g2_generator_point(curve_id)\n    result = p.scalar_mul(1)\n    assert result == p\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_scalar_mul_negative(curve_id):\n    p = get_g2_generator_point(curve_id)\n    result = p.scalar_mul(-1)\n    assert result == -p\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_scalar_mul_large(curve_id):\n    p = get_g2_generator_point(curve_id)\n    large_scalar = 10**18\n    result = p.scalar_mul(large_scalar)\n    assert result.is_on_curve()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_scalar_mul_invalid(curve_id):\n    p = get_g2_generator_point(curve_id)\n    with pytest.raises(TypeError):\n        p.scalar_mul(\"invalid_scalar\")\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_scalar_mul_order(curve_id):\n    p = get_g2_generator_point(curve_id)\n    result = p.scalar_mul(CURVES[curve_id.value].n)\n    assert result.is_infinity()\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_scalar_mul_larger_than_order(curve_id):\n    p = get_g2_generator_point(curve_id)\n    result = p.scalar_mul(CURVES[curve_id.value].n + 1)\n    assert result == p\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_g2point_scalar_mul_larger_than_order_random_points(curve_id):\n    # Generate 10 random points on the curve\n    random_points = [G2Point.gen_random_point(curve_id) for _ in range(10)]\n\n    # Shuffle the points\n    random.shuffle(random_points)\n\n    for p in random_points:\n        result = p.scalar_mul(CURVES[curve_id.value].n + 1)\n        assert result == p\n\n\n@pytest.mark.parametrize(\"curve_id\", curve_ids)\ndef test_is_in_subgroup(curve_id):\n    for _ in range(10):\n        p = G2Point.gen_random_point(curve_id)\n        assert p.is_in_prime_order_subgroup()\n        assert p.is_in_prime_order_subgroup_generic()\n\n        if CURVES[curve_id.value].h != 1:\n            p = G2Point.gen_random_point_not_in_subgroup(curve_id)\n            assert not p.is_in_prime_order_subgroup()\n            assert not p.is_in_prime_order_subgroup_generic()\n"
  },
  {
    "path": "tests/hydra/test_isogeny.py",
    "content": "from garaga.modulo_circuit import WriteOps\nfrom hydra.garaga.precompiled_circuits.isogeny import IsogenyG1, IsogenyG2\n\n\ndef test_isogeny_g2():\n    # Initialize circuit\n    circuit = IsogenyG2(\"isogeny\", 1)  # BLS12-381\n\n    # Input coordinates\n    field_x = circuit.write_elements(\n        [\n            circuit.field(\n                169519152402139697623491793754012113789032894758910773796231348501731795490199910990796174115277871812568749679080\n            ),\n            circuit.field(\n                1728095456082680609005278389175634228411286941580472237217092659287996601824281397719739792814994738024437208024916\n            ),\n        ],\n        WriteOps.INPUT,\n    )\n\n    field_y = circuit.write_elements(\n        [\n            circuit.field(\n                921899175962300040840420456901482071750200770271137541308616448315528969776376924836021205171957295791079922974103\n            ),\n            circuit.field(\n                3684633599184560222490700115577520911020962810206788383522966831012065752604210815152740734710545831758791724608234\n            ),\n        ],\n        WriteOps.INPUT,\n    )\n\n    # Run isogeny calculation\n    x_affine, y_affine = circuit.run_isogeny(field_x, field_y)\n\n    # Expected values for x_affine coordinates\n    expected_x = [\n        3789617024712504402204306620295003375951143917889162928515122476381982967144814366712031831841518399614182231387665,\n        1467567314213963969852279817989131104935039564231603908576814773321528757289376676761397368853965316423532584391899,\n    ]\n\n    # Expected values for y_affine coordinates\n    expected_y = [\n        1292375129422168617658520396283100687686347104559592203462491249161639006037671760603453326853098986903549775136448,\n        306655960768766438834866368706782505873384691666290681181893693450298456233972904889955517117016529975705729523733,\n    ]\n\n    # Assert x coordinates match\n    assert len(x_affine) == 2, \"Expected x_affine to have 2 coordinates\"\n    assert (\n        x_affine[0].emulated_felt.value == expected_x[0]\n    ), \"First x coordinate doesn't match\"\n    assert (\n        x_affine[1].emulated_felt.value == expected_x[1]\n    ), \"Second x coordinate doesn't match\"\n\n    # Assert y coordinates match\n    assert len(y_affine) == 2, \"Expected y_affine to have 2 coordinates\"\n    assert (\n        y_affine[0].emulated_felt.value == expected_y[0]\n    ), \"First y coordinate doesn't match\"\n    assert (\n        y_affine[1].emulated_felt.value == expected_y[1]\n    ), \"Second y coordinate doesn't match\"\n\n\ndef test_isogeny_g1():\n    circuit = IsogenyG1(\"isogeny\", 1)  # BLS12-381\n\n    field_x = circuit.write_element(\n        circuit.field(\n            1412853964218444964438936699552956047210482383152224645596624291427056376487356261681298103080878386132407858666637\n        )\n    )\n    field_y = circuit.write_element(\n        circuit.field(\n            752734926215712395741522221355891264404138695398702662135908094550118515106801651502315795564392519475687558113863\n        )\n    )\n\n    x_affine, y_affine = circuit.run_isogeny(field_x, field_y)\n\n    assert (\n        x_affine.emulated_felt.value\n        == 446982818448762443925483450503077743305378332574765060957007466897598303326699997098749910515002846743254056890542\n    )\n    assert (\n        y_affine.emulated_felt.value\n        == 3454829136341282129428339331123792952068649713505379945415096993679155752159553081385690994340465600247693047311369\n    )\n"
  },
  {
    "path": "tests/hydra/test_poseidon_hash.py",
    "content": "import time\n\nimport pytest\n\nfrom garaga import garaga_rs\nfrom garaga.precompiled_circuits.poseidon_bn254 import poseidon_hash\n\n\ndef test_poseidon_hash_bn254():\n    # Test with valid inputs\n    x = 1\n    y = 2\n    expected = 0x115CC0F5E7D690413DF64C6B9662E9CF2A3617F2743245519E19607A4417189A\n\n    tr0 = time.time()\n    for _ in range(20):\n        result = garaga_rs.poseidon_hash_bn254(x, y)\n    tr1 = time.time()\n    print(f\"Garaga RS time: {tr1 - tr0} seconds\")\n    assert result == expected\n\n    tp0 = time.time()\n    for _ in range(20):\n        result = poseidon_hash(x, y)\n    tp1 = time.time()\n\n    print(f\"Garaga Python time: {tp1 - tp0} seconds\")\n    assert result.value == expected\n\n    # Test different inputs give different results\n    result2 = garaga_rs.poseidon_hash_bn254(2, 1)\n    assert result != result2\n\n    # Test with large numbers\n    x_large = 2**255 - 1\n    y_large = 2**255 - 2\n    result = garaga_rs.poseidon_hash_bn254(x_large, y_large)\n    assert isinstance(result, int)\n    assert len(hex(result)[2:]) <= 64  # Result should be within field size\n\n    # Test invalid inputs\n    with pytest.raises((OverflowError, ValueError)):\n        garaga_rs.poseidon_hash_bn254(-1, 1)  # Negative numbers not allowed\n"
  },
  {
    "path": "tests/hydra/test_rsa_rns.py",
    "content": "import math\n\nfrom garaga.rsa_rns import (\n    BASE,\n    CHANNEL_MODULI,\n    CHUNK_LIMBS,\n    CRT_EXACTNESS_BOUND,\n    PKCS1_SHA256_DIGEST_INFO_PREFIX,\n    RSA_PUBLIC_EXPONENT,\n    RSA_REDUCTION_COUNT,\n    RNSContext,\n    generate_rsa2048_sha256_witness,\n    generate_rsa2048_witness,\n    is_valid_rsa2048_witness,\n    modular_exponentiation_with_proof,\n    pkcs1_v1_5_encode_sha256,\n)\nfrom garaga.starknet.tests_and_calldata_generators.signatures import RSA2048Signature\n\n\ndef eval_chunks_mod(chunks: tuple[int, ...], step: int, modulus: int) -> int:\n    \"\"\"Horner evaluation of chunk polynomial at step, reduced modulo modulus.\"\"\"\n    acc = 0\n    for chunk in reversed(chunks):\n        acc = (acc * step + chunk) % modulus\n    return acc\n\n\ndef test_rsa_channel_moduli_are_pairwise_coprime():\n    for i, lhs in enumerate(CHANNEL_MODULI):\n        assert lhs > 1\n        for j, rhs in enumerate(CHANNEL_MODULI[i + 1 :], start=i + 1):\n            assert (\n                math.gcd(lhs, rhs) == 1\n            ), f\"channel moduli {i} and {j} are not coprime\"\n\n\ndef test_rsa_chunk_steps_match_chunk_radix_mod_channel_moduli():\n    expected_steps = [pow(BASE, CHUNK_LIMBS, p) for p in CHANNEL_MODULI]\n    assert expected_steps == [\n        5880,\n        9624,\n        24728,\n        32024,\n        38504,\n        45624,\n        48200,\n        55592,\n        57224,\n        64488,\n        71448,\n    ]\n\n\ndef test_rsa_chunk_horner_evaluation_matches_residues():\n    ctx = RNSContext(CHANNEL_MODULI)\n    steps = [pow(BASE, CHUNK_LIMBS, p) for p in CHANNEL_MODULI]\n\n    for seed in range(3):\n        sample = RSA2048Signature.sample(seed=seed)\n        encoded_values = [\n            sample.modulus,\n            sample.signature,\n            sample.expected_message,\n            sample.reductions[0].quotient,\n            sample.reductions[0].remainder,\n            sample.reductions[-1].quotient,\n            sample.reductions[-1].remainder,\n        ]\n        for encoded_value in encoded_values:\n            horner_residues = tuple(\n                eval_chunks_mod(encoded_value.chunks, step, modulus)\n                for step, modulus in zip(steps, CHANNEL_MODULI)\n            )\n            assert horner_residues == ctx.residues_from_limbs(encoded_value.limbs)\n\n\ndef test_rsa_context_exactness_bound():\n    ctx = RNSContext(CHANNEL_MODULI)\n    assert ctx.M > CRT_EXACTNESS_BOUND\n\n\ndef test_rsa_sample_is_valid():\n    sample = RSA2048Signature.sample(seed=0)\n    assert sample.is_valid()\n    assert len(sample.reductions) == RSA_REDUCTION_COUNT\n    assert len(sample.serialize_public_key()) == 24\n    assert len(sample.serialize_signature_with_hints()) == 864\n    assert len(sample.serialize()) == 888\n\n\ndef test_rsa_verification_path_uses_expected_reductions():\n    ctx = RNSContext(CHANNEL_MODULI)\n    bundle = generate_rsa2048_witness(seed=0)\n    verified_message, reduction_count = modular_exponentiation_with_proof(\n        ctx,\n        bundle.signature.value,\n        RSA_PUBLIC_EXPONENT,\n        bundle.modulus.value,\n    )\n    assert reduction_count == RSA_REDUCTION_COUNT\n    assert verified_message == bundle.expected_message.value\n\n\ndef test_rsa_tampered_residue_is_invalid():\n    assert not RSA2048Signature.tampered_residue_sample(seed=0).is_valid()\n\n\ndef test_rsa_tampered_limb_is_invalid():\n    assert not RSA2048Signature.tampered_limb_sample(seed=0).is_valid()\n\n\ndef test_rsa_tampered_expected_message_is_invalid():\n    assert not RSA2048Signature.tampered_expected_message_sample(seed=0).is_valid()\n\n\ndef test_pkcs1_v1_5_encode_sha256_structure():\n    message_hash = bytes(range(32))\n    encoded = pkcs1_v1_5_encode_sha256(message_hash)\n    encoded_bytes = encoded.to_bytes(256, byteorder=\"big\")\n\n    # 0x00 || 0x01 || PS(0xFF × 202) || 0x00 || DigestInfo(19) || Hash(32) = 256\n    assert encoded_bytes[0] == 0x00\n    assert encoded_bytes[1] == 0x01\n    assert encoded_bytes[2:204] == b\"\\xff\" * 202\n    assert encoded_bytes[204] == 0x00\n    assert encoded_bytes[205:224] == PKCS1_SHA256_DIGEST_INFO_PREFIX\n    assert encoded_bytes[224:256] == message_hash\n\n\ndef test_rsa2048_sha256_witness_is_valid():\n    bundle = generate_rsa2048_sha256_witness(b\"hello garaga\", seed=0)\n    assert is_valid_rsa2048_witness(bundle)\n    assert len(bundle.reductions) == RSA_REDUCTION_COUNT\n\n    # Verify the expected message is a valid PKCS#1 v1.5 encoding\n    import hashlib\n\n    message_hash = hashlib.sha256(b\"hello garaga\").digest()\n    expected = pkcs1_v1_5_encode_sha256(message_hash)\n    assert bundle.expected_message.value == expected\n\n\ndef test_rsa2048_sha256_byte_array_serialization():\n    \"\"\"Test that ByteArray serialization matches Cairo's format.\"\"\"\n    from garaga.starknet.tests_and_calldata_generators.signatures import (\n        _serialize_byte_array,\n    )\n\n    # Empty\n    cd = _serialize_byte_array(b\"\")\n    assert cd == [0, 0, 0]\n\n    # Short message (< 31 bytes)\n    cd = _serialize_byte_array(b\"hello\")\n    assert cd[0] == 0  # 0 full words\n    assert cd[1] == int.from_bytes(b\"hello\", \"big\")  # pending word\n    assert cd[2] == 5  # pending len\n\n    # Exactly 31 bytes\n    data = bytes(range(31))\n    cd = _serialize_byte_array(data)\n    assert cd[0] == 1  # 1 full word\n    assert cd[1] == int.from_bytes(data[:31], \"big\")\n    assert cd[2] == 0  # pending = 0\n    assert cd[3] == 0  # pending len = 0\n\n    # 65 bytes = 2 full words + 3 pending\n    data = bytes([0xCD] * 65)\n    cd = _serialize_byte_array(data)\n    assert cd[0] == 2\n    assert len(cd) == 5\n    assert cd[4] == 3  # pending len\n"
  },
  {
    "path": "tools/addchain/bls12_381_e.acc",
    "content": "_10       = 2*1\n_11       = 1 + _10\n_101      = _10 + _11\n_111      = _10 + _101\n_1001     = _10 + _111\n_1011     = _10 + _1001\n_1101     = _10 + _1011\n_1111     = _10 + _1101\n_10001    = _10 + _1111\n_10011    = _10 + _10001\n_10101    = _10 + _10011\n_10111    = _10 + _10101\n_11001    = _10 + _10111\n_11011    = _10 + _11001\n_11101    = _10 + _11011\n_11111    = _10 + _11101\n_100001   = _10 + _11111\n_100011   = _10 + _100001\n_100101   = _10 + _100011\n_100111   = _10 + _100101\n_101001   = _10 + _100111\n_101011   = _10 + _101001\n_101101   = _10 + _101011\n_101111   = _10 + _101101\n_110001   = _10 + _101111\n_110011   = _10 + _110001\n_110101   = _10 + _110011\n_110111   = _10 + _110101\n_111001   = _10 + _110111\n_111011   = _10 + _111001\n_111101   = _10 + _111011\n_111111   = _10 + _111101\n_1000001  = _10 + _111111\n_1000011  = _10 + _1000001\n_1000101  = _10 + _1000011\n_1000111  = _10 + _1000101\n_1001001  = _10 + _1000111\n_1001011  = _10 + _1001001\n_1001101  = _10 + _1001011\n_1001111  = _10 + _1001101\n_1010001  = _10 + _1001111\n_1010011  = _10 + _1010001\n_1010101  = _10 + _1010011\n_1010111  = _10 + _1010101\n_1011001  = _10 + _1010111\n_1011011  = _10 + _1011001\n_1011101  = _10 + _1011011\n_1011111  = _10 + _1011101\n_1100001  = _10 + _1011111\n_1100011  = _10 + _1100001\n_1100101  = _10 + _1100011\n_1100111  = _10 + _1100101\n_1101001  = _10 + _1100111\n_1101011  = _10 + _1101001\n_1101101  = _10 + _1101011\n_1101111  = _10 + _1101101\n_1110001  = _10 + _1101111\n_1110011  = _10 + _1110001\n_1110101  = _10 + _1110011\n_1110111  = _10 + _1110101\n_1111001  = _10 + _1110111\n_1111011  = _10 + _1111001\n_1111101  = _10 + _1111011\n_1111111  = _10 + _1111101\n_11111110 = 2*_1111111\n_11111111 = 1 + _11111110\nx9        = 2*_11111111 + 1\ni69       = _1110001 + x9\nx10       = 2*x9 + 1\ni72       = 2*i69\nx11       = 2*x10 + 1\ni95       = ((i72 << 2 + _101001) << 8 + _100011) << 9\ni118      = ((_1100101 + i95) << 7 + _1100101) << 13 + _1101011\ni140      = ((i118 << 7 + _1010111) << 4 + _101) << 9\ni163      = ((_101 + i140) << 13 + _1110111) << 7 + _10001\ni188      = ((i163 << 9 + _100001) << 7 + _100001) << 7\ni214      = ((_101011 + i188) << 7 + _11) << 16 + _111001\ni242      = ((i214 << 8 + _101001) << 8 + _111011) << 10\ni258      = ((_1010011 + i242) << 7 + _1001001) << 6 + _101001\ni286      = ((i258 << 9 + _1010111) << 7 + _1101) << 10\ni306      = ((_1100011 + i286) << 7 + _101011) << 10 + _1110111\ni331      = ((i306 << 7 + _1110001) << 7 + _11101) << 9\ni349      = ((_1000111 + i331) << 8 + _1011101) << 7 + _1101\ni380      = ((i349 << 9 + _110101) << 10 + _1111001) << 10\ni400      = ((_110101 + i380) << 10 + _1101111) << 7 + _1101101\ni428      = ((i400 << 8 + _1111) << 11 + _1011011) << 7\ni449      = ((_1110111 + i428) << 8 + _101011) << 10 + _1000011\ni473      = ((i449 << 7 + _1010111) << 6 + _100101) << 9\ni489      = ((_1010001 + i473) << 5 + _1011) << 8 + _1001\ni518      = ((i489 << 12 + _1001011) << 8 + _1010001) << 7\ni537      = ((_1101111 + i518) << 8 + _1010001) << 8 + _1110111\ni562      = ((i537 << 8 + _1001001) << 5 + _11101) << 10\ni578      = ((_101111 + i562) << 8 + _1001101) << 5 + _10001\ni609      = ((i578 << 9 + _1011101) << 13 + _110011) << 7\ni627      = ((_110001 + i609) << 6 + _11011) << 9 + _1100111\ni651      = ((i627 << 7 + _1101) << 10 + _1000111) << 5\ni672      = ((_10001 + i651) << 10 + _1000001) << 8 + _1100011\ni699      = ((i672 << 10 + _1111011) << 8 + _1001101) << 7\ni715      = ((_1110101 + i699) << 9 + _1000011) << 4 + _1101\ni742      = ((i715 << 14 + _1010101) << 6 + _111101) << 5\ni764      = ((_111 + i742) << 10 + _110111) << 9 + _1101001\ni789      = ((i764 << 7 + _1100101) << 3 + _11) << 13\ni807      = ((_1010011 + i789) << 4 + _11) << 11 + _11001\ni833      = ((i807 << 9 + _100111) << 8 + _1111011) << 7\ni855      = ((_1100111 + i833) << 2 + _11) << 17 + x11\ni882      = ((i855 << 7 + _101111) << 10 + _1101011) << 8\ni902      = ((_1001111 + i882) << 7 + _111001) << 10 + _11111111\ni928      = ((i902 << 8 + _100111) << 8 + _110011) << 8\ni946      = ((_10111 + i928) << 6 + _1101) << 9 + _11011\ni971      = ((i946 << 9 + _110101) << 6 + _11101) << 8\ni992      = ((_100011 + i971) << 10 + _110001) << 8 + _10101\ni1018     = ((i992 << 10 + _1010001) << 7 + _111111) << 7\ni1039     = ((_101101 + i1018) << 9 + _11011) << 9 + _101111\ni1063     = ((i1039 << 8 + _1001001) << 6 + _111001) << 8\ni1081     = ((_110111 + i1063) << 8 + _1010101) << 7 + _1111001\ni1101     = ((i1081 << 6 + _111011) << 8 + _1100011) << 4\ni1123     = ((_1101 + i1101) << 13 + _1111011) << 6 + _110001\ni1147     = ((i1123 << 8 + _1101101) << 7 + _1000001) << 7\ni1163     = ((_1100001 + i1147) << 6 + _111011) << 7 + _100111\ni1193     = ((i1163 << 8 + _10011) << 11 + _1111111) << 9\ni1210     = ((_1001101 + i1193) << 6 + _101011) << 8 + _1011011\ni1233     = ((i1210 << 7 + _1110111) << 7 + _1001011) << 7\ni1254     = ((_110101 + i1233) << 8 + _1011111) << 10 + _1101111\ni1283     = ((i1254 << 7 + _101101) << 5 + _111) << 15\ni1297     = ((_1000001 + i1283) << 8 + _1110001) << 3 + 1\ni1331     = ((i1297 << 15 + _110001) << 8 + _1100001) << 9\ni1351     = ((_1111011 + i1331) << 7 + _10011) << 10 + _1011101\ni1372     = ((i1351 << 8 + _1110111) << 5 + _10111) << 6\ni1395     = ((_1011 + i1372) << 6 + _11) << 14 + x11\ni1415     = ((2*i1395 + 1) << 8 + _1011001) << 9\ni1437     = ((_1110101 + i1415) << 9 + _1111011) << 10 + _1101011\ni1459     = ((i1437 << 8 + _100101) << 3 + 1) << 9\ni1480     = ((_11111111 + i1459) << 11 + _101011) << 7 + _110011\ni1503     = ((i1480 << 7 + _111111) << 7 + _101011) << 7\ni1529     = ((_100101 + i1503) << 13 + _1000001) << 10 + _1001101\ni1553     = ((i1529 << 8 + _1100101) << 8 + _1010101) << 6\ni1573     = ((_100101 + i1553) << 9 + _1010001) << 8 + _1011101\ni1599     = ((i1573 << 6 + _111011) << 8 + _1011111) << 10\ni1617     = ((_1011101 + i1599) << 7 + _1001111) << 8 + _1111001\ni1642     = ((i1617 << 8 + _1100001) << 7 + _1010111) << 8\ni1662     = ((_1001001 + i1642) << 7 + _1000111) << 10 + _1001001\ni1695     = ((i1662 << 12 + _1011101) << 9 + _1110101) << 10\ni1713     = ((_111101 + i1695) << 8 + _111011) << 7 + _111101\ni1735     = ((i1713 << 6 + _11011) << 9 + _1101011) << 5\ni1758     = ((_11011 + i1735) << 10 + _1001011) << 10 + _1001001\ni1782     = ((i1758 << 4 + _1111) << 11 + _1000011) << 7\ni1803     = ((_10101 + i1782) << 9 + _111001) << 9 + _1000011\ni1829     = ((i1803 << 5 + _10011) << 10 + _1011001) << 9\ni1846     = ((_1110011 + i1829) << 8 + _1100001) << 6 + _110011\ni1875     = ((i1846 << 9 + _110001) << 7 + _101101) << 11\ni1898     = ((_1100111 + i1875) << 8 + _1011011) << 12 + _1101101\ni1927     = ((i1898 << 11 + _1000011) << 7 + _1110111) << 9\ni1945     = ((_1101001 + i1927) << 4 + _1011) << 11 + _1100011\ni1967     = ((i1945 << 4 + _1001) << 11 + _1001111) << 5\ni1986     = ((_10111 + i1967) << 6 + _1001) << 10 + _1001011\ni2009     = ((i1986 << 8 + _1011011) << 4 + _1001) << 9\ni2029     = ((_100101 + i2009) << 10 + _11111111) << 7 + _101011\ni2057     = ((i2029 << 10 + _1111) << 10 + _1011011) << 6\ni2075     = ((_111001 + i2057) << 9 + _1101001) << 6 + _101111\ni2100     = ((i2075 << 7 + _10011) << 9 + _1110011) << 7\ni2125     = ((_1110011 + i2100) << 10 + _101101) << 12 + _1110001\ni2153     = ((i2125 << 6 + _11) << 12 + _1101101) << 8\ni2171     = ((_110011 + i2153) << 6 + _10111) << 9 + _1011011\ni2199     = ((i2171 << 10 + _1000111) << 7 + _1111011) << 9\ni2220     = ((_1111111 + i2199) << 11 + _1110001) << 7 + _1101111\ni2244     = ((i2220 << 9 + _1001101) << 7 + _1000111) << 6\ni2264     = ((_1011 + i2244) << 11 + _1010001) << 6 + _11001\ni2289     = ((i2264 << 10 + _1101001) << 8 + _1010111) << 5\ni2309     = ((_10111 + i2289) << 6 + _101) << 11 + _1010011\ni2333     = ((i2309 << 6 + _110101) << 5 + _1101) << 11\ni2354     = ((_110101 + i2333) << 8 + _11001) << 10 + _1111011\ni2378     = ((i2354 << 8 + _1110111) << 6 + _1011) << 8\ni2398     = ((_11001 + i2378) << 9 + _11111111) << 8 + _1011111\ni2427     = ((i2398 << 6 + _1111) << 13 + _1100001) << 8\ni2444     = ((_1100001 + i2427) << 5 + _11001) << 9 + _1101001\ni2470     = ((i2444 << 9 + _1010111) << 3 + _111) << 12\ni2487     = ((_1000011 + i2470) << 6 + _100011) << 8 + _1011111\ni2519     = ((i2487 << 10 + _111011) << 10 + _101011) << 10\ni2538     = ((_11111111 + i2519) << 9 + _111101) << 7 + _11111\ni2566     = ((i2538 << 7 + _11001) << 9 + _10101) << 10\ni2586     = ((_1111001 + i2566) << 9 + _1010101) << 8 + _10101\ni2609     = ((i2586 << 9 + _1110001) << 5 + _1001) << 7\ni2631     = ((_1011 + i2609) << 12 + _1011101) << 7 + _1000011\ni2658     = ((i2631 << 9 + _1011001) << 9 + _1100101) << 7\ni2679     = ((_1010111 + i2658) << 10 + _11111) << 8 + _11111\ni2703     = ((i2679 << 7 + _10111) << 10 + _1110011) << 5\ni2725     = ((_10111 + i2703) << 9 + _100101) << 10 + _1011101\ni2749     = ((i2725 << 4 + _1111) << 11 + _1010011) << 7\ni2771     = ((_1000001 + i2749) << 9 + _1111001) << 10 + _1100101\ni2799     = ((2*i2771 + 1) << 17 + _1000001) << 8\ni2815     = ((_1011101 + i2799) << 7 + _1010101) << 6 + _111011\ni2842     = ((i2815 << 8 + _1100011) << 5 + _11011) << 12\ni2861     = ((_1101011 + i2842) << 8 + _1101111) << 8 + _1000111\ni2882     = ((i2861 << 2 + 1) << 10 + x9) << 7\ni2900     = ((_101101 + i2882) << 3 + _11) << 12 + _1110111\ni2929     = ((i2900 << 6 + 1) << 12 + _100111) << 9\ni2949     = ((_1010001 + i2929) << 6 + _110011) << 11 + _1100011\ni2971     = ((i2949 << 6 + _101111) << 11 + _1110011) << 3\ni2990     = ((_111 + i2971) << 11 + _1010111) << 5 + _11101\ni3017     = ((i2990 << 9 + _1110011) << 5 + _1101) << 11\ni3037     = ((x9 + i3017) << 6 + _10011) << 11 + _1101011\ni3061     = ((i3037 << 7 + _1110111) << 6 + _10011) << 9\ni3081     = ((_1101111 + i3061) << 10 + _1100011) << 7 + _1000111\ni3099     = 2*((i3081 << 3 + _111) << 12 + _1111001)\ni3125     = ((1 + i3099) << 15 + _111101) << 8 + _1101111\ni3152     = ((i3125 << 5 + _1101) << 10 + _1011001) << 10\ni3172     = ((_1101011 + i3152) << 6 + _110111) << 11 + _10011\ni3200     = ((i3172 << 12 + _1111011) << 8 + _1100001) << 6\ni3220     = ((_10101 + i3200) << 9 + _1011011) << 8 + _1010111\ni3243     = ((i3220 << 5 + _11101) << 8 + _100001) << 8\ni3262     = ((_1101101 + i3243) << 8 + _1001101) << 8 + _100101\ni3286     = 2*((i3262 << 12 + _1111101) << 9 + _1000011)\ni3309     = ((1 + i3286) << 11 + x10) << 9 + _1110111\ni3330     = ((i3309 << 7 + _101011) << 8 + _1110101) << 4\ni3350     = ((_1111 + i3330) << 10 + _1000101) << 7 + _111101\ni3373     = ((i3350 << 9 + _1101101) << 6 + _110101) << 6\ni3395     = ((_11101 + i3373) << 8 + _101) << 11 + _1001101\ni3420     = ((i3395 << 9 + _1000111) << 2 + _11) << 12\ni3435     = ((_1110111 + i3420) << 6 + _111011) << 6 + _10101\ni3462     = ((i3435 << 9 + _100001) << 7 + _101101) << 9\ni3480     = ((_1101001 + i3462) << 7 + _101001) << 8 + _101101\ni3505     = ((i3480 << 8 + _1000101) << 4 + _1001) << 11\ni3522     = ((_1111001 + i3505) << 7 + _110001) << 7 + _100011\ni3551     = ((i3522 << 12 + _1011001) << 4 + _1101) << 11\ni3568     = ((_1100011 + i3551) << 5 + _11111) << 9 + _111001\ni3592     = ((i3568 << 8 + _1010011) << 7 + _1100011) << 7\ni3609     = ((_101101 + i3592) << 8 + _1101111) << 6 + _100111\ni3637     = ((i3609 << 8 + _1000101) << 9 + _100001) << 9\ni3657     = ((_1010111 + i3637) << 7 + _1101101) << 10 + _1100001\ni3682     = ((i3657 << 10 + _100101) << 7 + _101111) << 6\ni3704     = ((_11111 + i3682) << 9 + _101101) << 10 + _1101001\ni3728     = ((i3704 << 7 + _101101) << 8 + _1110111) << 7\ni3746     = ((_100011 + i3728) << 8 + _1000111) << 7 + _110101\ni3769     = ((i3746 << 8 + _1110101) << 7 + _1010001) << 6\ni3785     = ((_101001 + i3769) << 6 + _10001) << 7 + _10111\ni3811     = ((i3785 << 9 + _1110011) << 8 + _110001) << 7\ni3831     = ((_100101 + i3811) << 8 + _1010011) << 9 + _1100111\ni3857     = ((i3831 << 7 + _1000011) << 10 + _1111011) << 7\ni3879     = ((_101 + i3857) << 12 + _1111001) << 7 + _1101011\ni3902     = ((i3879 << 6 + _110011) << 9 + _10101) << 6\ni3928     = ((_101 + i3902) << 13 + _10111) << 10 + _1011101\ni3953     = ((i3928 << 5 + _1001) << 12 + _100001) << 6\ni3977     = ((_1001 + i3953) << 9 + _11111) << 12 + _1111101\ni4010     = ((i3977 << 10 + _1011101) << 12 + _1111101) << 9\ni4029     = ((_1001001 + i4010) << 7 + _101011) << 9 + _100111\ni4058     = ((i4029 << 9 + _11011) << 9 + _1100011) << 9\ni4075     = ((_1010101 + i4058) << 6 + _110001) << 8 + _1101101\ni4098     = ((i4075 << 7 + _110101) << 8 + _1000111) << 6\ni4120     = ((_101011 + i4098) << 10 + _11011) << 9 + _101011\ni4145     = ((i4120 << 5 + _101) << 8 + _111) << 10\ni4169     = ((_11101 + i4145) << 10 + _1110011) << 11 + _101001\ni4194     = ((i4169 << 7 + _111011) << 14 + _101111) << 2\ni4218     = ((1 + i4194) << 14 + _1011111) << 7 + _1101101\ni4243     = ((i4218 << 7 + _1110101) << 4 + _101) << 12\ni4262     = ((_110001 + i4243) << 5 + _1101) << 11 + _1011001\ni4286     = ((i4262 << 7 + _1011011) << 6 + _110011) << 9\ni4311     = ((_110101 + i4286) << 15 + _1100001) << 7 + _101001\ni4336     = ((i4311 << 9 + _1001011) << 7 + _110011) << 7\ni4354     = ((_10101 + i4336) << 6 + _1101) << 9 + _101001\ni4382     = ((i4354 << 9 + _1010011) << 9 + _1111111) << 8\ni4400     = ((_1010101 + i4382) << 5 + _10101) << 10 + _1000111\ni4424     = ((i4400 << 8 + _110101) << 4 + _101) << 10\ni4444     = ((_111001 + i4424) << 8 + _11001) << 9 + _1011101\ni4471     = ((i4444 << 7 + _1101101) << 11 + _1110001) << 7\ni4491     = ((_1100001 + i4471) << 2 + _11) << 15 + _1010001\ni4515     = ((i4491 << 5 + _1101) << 8 + _10011) << 9\ni4532     = ((_1010011 + i4515) << 7 + _1110101) << 7 + _1010111\ni4561     = ((i4532 << 8 + _1010001) << 8 + _101101) << 11\ni4580     = ((_1100101 + i4561) << 7 + _101111) << 9 + _111011\ni4605     = ((i4580 << 6 + _11111) << 6 + _1011) << 11\ni4619     = ((_1000001 + i4605) << 7 + _1101001) << 4 + _1011\ni4646     = ((i4619 << 10 + _1111101) << 3 + 1) << 12\ni4665     = ((_111001 + i4646) << 9 + _1000101) << 7 + _1111011\ni4688     = ((i4665 << 7 + _1110011) << 6 + _100011) << 8\ni4704     = ((_1001001 + i4688) << 8 + _1011101) << 5 + _101\ni4731     = ((i4704 << 11 + _1111011) << 5 + _10101) << 9\ni4747     = ((_1000011 + i4731) << 5 + _10101) << 8 + _100101\ni4778     = ((i4747 << 6 + _10011) << 8 + _110111) << 15\ni4797     = ((_1011011 + i4778) << 4 + _111) << 12 + x9\ni4822     = ((i4797 << 8 + _1111101) << 8 + _1010111) << 7\nreturn      (_1011011 + i4822) << 10 + _100011\n"
  },
  {
    "path": "tools/addchain/bls12_381_h3_s.acc",
    "content": "_10       = 2*1\n_11       = 1 + _10\n_101      = _10 + _11\n_111      = _10 + _101\n_1001     = _10 + _111\n_1011     = _10 + _1001\n_1101     = _10 + _1011\n_1111     = _10 + _1101\n_10001    = _10 + _1111\n_10011    = _10 + _10001\n_10101    = _10 + _10011\n_10111    = _10 + _10101\n_11001    = _10 + _10111\n_11011    = _10 + _11001\n_11101    = _10 + _11011\n_11111    = _10 + _11101\n_100001   = _10 + _11111\n_100011   = _10 + _100001\n_100101   = _10 + _100011\n_100110   = 1 + _100101\n_100111   = 1 + _100110\n_101001   = _10 + _100111\n_101011   = _10 + _101001\n_101101   = _10 + _101011\n_110001   = _1011 + _100110\n_110011   = _10 + _110001\n_110101   = _10 + _110011\n_110111   = _10 + _110101\n_111001   = _10 + _110111\n_111011   = _10 + _111001\n_111101   = _10 + _111011\n_111111   = _10 + _111101\n_1000001  = _10 + _111111\n_1000011  = _10 + _1000001\n_1000101  = _10 + _1000011\n_1000111  = _10 + _1000101\n_1001001  = _10 + _1000111\n_1001011  = _10 + _1001001\n_1001101  = _10 + _1001011\n_1001111  = _10 + _1001101\n_1010001  = _10 + _1001111\n_1010011  = _10 + _1010001\n_1010101  = _10 + _1010011\n_1010111  = _10 + _1010101\n_1011001  = _10 + _1010111\n_1011011  = _10 + _1011001\n_1011101  = _10 + _1011011\n_1011111  = _10 + _1011101\n_1100001  = _10 + _1011111\n_1100011  = _10 + _1100001\n_1100101  = _10 + _1100011\n_1100111  = _10 + _1100101\n_1101001  = _10 + _1100111\n_1101011  = _10 + _1101001\n_1101101  = _10 + _1101011\n_1101111  = _10 + _1101101\n_1110001  = _10 + _1101111\n_1110011  = _10 + _1110001\n_1110101  = _10 + _1110011\n_1110111  = _10 + _1110101\n_1111001  = _10 + _1110111\n_1111011  = _10 + _1111001\n_1111101  = _10 + _1111011\n_1111111  = _10 + _1111101\n_10000001 = _10 + _1111111\n_10000011 = _10 + _10000001\n_10000101 = _10 + _10000011\n_10000111 = _10 + _10000101\n_10001001 = _10 + _10000111\n_10001011 = _10 + _10001001\n_10001101 = _10 + _10001011\n_10001111 = _10 + _10001101\n_10010001 = _10 + _10001111\n_10010011 = _10 + _10010001\n_10010101 = _10 + _10010011\n_10010111 = _10 + _10010101\n_10011001 = _10 + _10010111\n_10011011 = _10 + _10011001\n_10011101 = _10 + _10011011\n_10011111 = _10 + _10011101\n_10100001 = _10 + _10011111\n_10100011 = _10 + _10100001\n_10100101 = _10 + _10100011\n_10100111 = _10 + _10100101\n_10101001 = _10 + _10100111\n_10101011 = _10 + _10101001\n_10101101 = _10 + _10101011\n_10101111 = _10 + _10101101\n_10110001 = _10 + _10101111\n_10110011 = _10 + _10110001\n_10110101 = _10 + _10110011\n_10110111 = _10 + _10110101\n_10111001 = _10 + _10110111\n_10111011 = _10 + _10111001\n_10111101 = _10 + _10111011\n_10111111 = _10 + _10111101\n_11000001 = _10 + _10111111\n_11000011 = _10 + _11000001\n_11000101 = _10 + _11000011\n_11000111 = _10 + _11000101\n_11001001 = _10 + _11000111\n_11001011 = _10 + _11001001\n_11001101 = _10 + _11001011\n_11001111 = _10 + _11001101\n_11010001 = _10 + _11001111\n_11010011 = _10 + _11010001\n_11010101 = _10 + _11010011\n_11010111 = _10 + _11010101\n_11011001 = _10 + _11010111\n_11011011 = _10 + _11011001\n_11011101 = _10 + _11011011\n_11011111 = _10 + _11011101\n_11100001 = _10 + _11011111\n_11100011 = _10 + _11100001\n_11100101 = _10 + _11100011\n_11100111 = _10 + _11100101\n_11101001 = _10 + _11100111\n_11101011 = _10 + _11101001\n_11101101 = _10 + _11101011\n_11101111 = _10 + _11101101\n_11110101 = _100110 + _11001111\n_11110111 = _10 + _11110101\n_11111001 = _10 + _11110111\n_11111101 = _100110 + _11010111\n_11111111 = _10 + _11111101\ni145      = ((_110001 + _11111111) << 7 + _11001101) << 10 + _10100111\ni172      = ((i145 << 9 + _1001011) << 8 + _1011001) << 8\ni199      = ((_100001 + i172) << 10 + _10111) << 14 + _1111101\ni228      = ((i199 << 11 + _1000111) << 9 + _11111101) << 7\ni248      = ((_1101011 + i228) << 10 + _11011001) << 7 + _1011111\ni274      = ((i248 << 8 + _1101011) << 9 + _1001111) << 7\ni295      = ((_101001 + i274) << 10 + _10100011) << 8 + _11101011\ni321      = ((i295 << 9 + _11011011) << 6 + _111111) << 9\ni342      = ((_100111 + i321) << 9 + _1011001) << 9 + _11000101\ni368      = ((i342 << 7 + _1101111) << 9 + _10010011) << 8\ni388      = ((_10001001 + i368) << 9 + _11101001) << 8 + _1010011\ni417      = ((i388 << 3 + _11) << 15 + _1110101) << 9\ni437      = ((_10110111 + i417) << 5 + _10001) << 12 + _10010111\ni463      = ((i437 << 9 + _10101001) << 9 + _10100111) << 6\ni486      = ((_10101 + i463) << 9 + _10101) << 11 + _10101011\ni513      = ((i486 << 4 + _101) << 13 + _10001101) << 8\ni530      = ((_10100011 + i513) << 8 + _11011101) << 6 + _10011\ni560      = ((i530 << 11 + _1101111) << 8 + _101001) << 9\ni582      = ((_1001101 + i560) << 11 + _10111001) << 8 + _11000011\ni606      = ((i582 << 9 + _11100111) << 10 + _11010011) << 3\ni630      = ((_101 + i606) << 13 + _10110011) << 8 + _11011101\ni661      = ((i630 << 8 + _1000011) << 12 + _10101111) << 9\ni679      = ((_10010001 + i661) << 9 + _10000001) << 6 + _100101\ni708      = ((i679 << 8 + _100101) << 10 + _1100111) << 9\ni727      = ((_1100001 + i708) << 9 + _10110101) << 7 + _110011\ni755      = ((i727 << 8 + _101101) << 10 + _1101101) << 8\ni776      = ((_1110111 + i755) << 9 + _1101011) << 9 + _11001011\ni806      = ((i776 << 4 + _1001) << 9 + _10011) << 15\ni826      = ((_11000011 + i806) << 10 + _10001001) << 7 + _1011101\ni855      = ((i826 << 9 + _10011111) << 8 + _1100111) << 10\ni876      = ((_11100101 + i855) << 9 + _10101111) << 9 + _10001111\ni904      = ((i876 << 7 + _110001) << 9 + _1110111) << 10\ni925      = ((_1100011 + i904) << 9 + _1010101) << 9 + _11110111\ni955      = ((i925 << 10 + _10100011) << 10 + _11110101) << 8\ni978      = ((_11101111 + i955) << 12 + _11100001) << 8 + _10000001\ni1010     = ((i978 << 5 + _10101) << 11 + _1111101) << 14\ni1029     = ((_11101001 + i1010) << 7 + _1110011) << 9 + _11000101\ni1057     = ((i1029 << 11 + _1001011) << 9 + _10101011) << 6\ni1081     = ((_111011 + i1057) << 11 + _111101) << 10 + _10011101\ni1108     = ((i1081 << 8 + _10000011) << 8 + _11010111) << 9\ni1129     = ((_11010001 + i1108) << 8 + _11011001) << 10 + _10101001\ni1157     = ((i1129 << 5 + _10011) << 12 + _11010011) << 9\ni1176     = ((_10101101 + i1157) << 8 + _11110101) << 8 + _10000101\ni1201     = ((i1176 << 7 + _1111011) << 8 + _1110001) << 8\ni1222     = ((_1111011 + i1201) << 9 + _11010001) << 9 + _11111101\ni1250     = ((i1222 << 7 + _1101101) << 8 + _1111011) << 11\ni1270     = ((_11101111 + i1250) << 8 + _11101101) << 9 + _11111001\ni1299     = ((i1270 << 10 + _10000011) << 8 + _11110111) << 9\ni1322     = ((_101101 + i1299) << 8 + _100101) << 12 + _1111101\ni1354     = ((i1322 << 10 + _1001011) << 11 + _11011001) << 9\ni1376     = ((_100101 + i1354) << 10 + _10001011) << 9 + _11101111\ni1399     = ((i1376 << 8 + _1010111) << 8 + _1010111) << 5\ni1423     = ((_111 + i1399) << 12 + _1001001) << 9 + _10000111\ni1449     = ((i1423 << 7 + _1111111) << 7 + _11011) << 10\ni1470     = ((_1111011 + i1449) << 10 + _10011101) << 8 + _11011001\ni1499     = ((i1470 << 6 + _11001) << 11 + _10111101) << 10\ni1522     = ((_1111101 + i1499) << 12 + _11010001) << 8 + _11010011\ni1548     = ((i1522 << 8 + _11000011) << 8 + _10010011) << 8\ni1563     = ((_10011001 + i1548) << 7 + _1110111) << 5 + _1011\ni1599     = ((i1563 << 18 + _10001101) << 9 + _10101101) << 7\ni1618     = ((_1100101 + i1599) << 8 + _1001001) << 8 + _1111111\ni1651     = ((i1618 << 10 + _10010101) << 10 + _100011) << 11\ni1672     = ((_11100111 + i1651) << 7 + _1101111) << 11 + _1000001\ni1701     = ((i1672 << 9 + _10100011) << 10 + _10010111) << 8\ni1720     = ((_11101001 + i1701) << 9 + _1111101) << 7 + _110011\ni1752     = ((i1720 << 8 + _110101) << 12 + _1010011) << 10\ni1775     = ((_1101001 + i1752) << 9 + _1000001) << 11 + _11001111\ni1801     = ((i1775 << 6 + _110001) << 10 + _11010011) << 8\ni1825     = ((_11001011 + i1801) << 13 + _11101001) << 8 + _10010111\ni1852     = ((i1825 << 7 + _1111011) << 10 + _11001001) << 8\ni1874     = ((_11111101 + i1852) << 7 + _1011011) << 12 + _1010111\ni1906     = ((i1874 << 11 + _11101) << 9 + _110001) << 10\ni1925     = ((_10111001 + i1906) << 8 + _10011001) << 8 + _10110101\ni1954     = ((i1925 << 11 + _10100011) << 7 + _1010101) << 9\ni1971     = ((_11001011 + i1954) << 9 + _10110111) << 5 + _10001\ni2003     = ((i1971 << 11 + _1101011) << 9 + _100011) << 10\ni2023     = ((_11110111 + i2003) << 10 + _1011101) << 7 + _11011\ni2052     = ((i2023 << 10 + _1001001) << 6 + _11001) << 11\ni2076     = ((_10011011 + i2052) << 8 + _1100111) << 13 + _11001001\ni2102     = ((i2076 << 8 + _11110111) << 8 + _11100101) << 8\ni2127     = ((_10111011 + i2102) << 7 + _111001) << 15 + _11101011\ni2153     = ((i2127 << 9 + _11010011) << 6 + _10001) << 9\ni2178     = ((_110111 + i2153) << 10 + _11101001) << 12 + _11100011\ni2205     = ((i2178 << 7 + _1010011) << 9 + _10101111) << 9\ni2237     = ((_10001 + i2205) << 20 + _11111111) << 9 + _11111001\ni2267     = ((i2237 << 8 + _10011111) << 8 + _101001) << 12\ni2287     = ((_10110011 + i2267) << 7 + _1011101) << 10 + _10111111\ni2312     = ((i2287 << 8 + _11111101) << 8 + _11011001) << 7\ni2333     = ((_1011111 + i2312) << 8 + _100011) << 10 + _10011101\ni2357     = ((i2333 << 8 + _11101001) << 10 + _10101001) << 4\ni2381     = ((_111 + i2357) << 14 + _10010101) << 7 + _101011\ni2407     = ((i2381 << 9 + _1111111) << 5 + _1011) << 10\ni2428     = ((_101101 + i2407) << 11 + _1000101) << 7 + _11101\ni2458     = ((i2428 << 11 + _10101111) << 4 + _11) << 13\ni2482     = ((_110111 + i2458) << 10 + _10110011) << 11 + _1100111\ni2514     = ((i2482 << 10 + _1101001) << 9 + _101011) << 11\ni2536     = ((_1101001 + i2514) << 8 + _1100011) << 11 + _10011001\ni2564     = ((i2536 << 4 + _1101) << 15 + _1111011) << 7\ni2586     = ((_11011 + i2564) << 8 + _10101) << 11 + _10111101\ni2612     = ((i2586 << 6 + _110011) << 7 + _11111) << 11\ni2633     = ((_11100101 + i2612) << 8 + _111001) << 10 + _10101111\ni2661     = ((i2633 << 8 + _10000111) << 7 + _110011) << 11\ni2685     = ((_11100101 + i2661) << 10 + _11010111) << 11 + _10000001\ni2715     = ((i2685 << 6 + _110001) << 12 + _11100001) << 10\ni2737     = ((_1011111 + i2715) << 9 + _11001101) << 10 + _1111011\ni2767     = ((i2737 << 8 + _1100011) << 8 + _110101) << 12\ni2789     = ((_10101111 + i2767) << 8 + _10010011) << 11 + _11011001\ni2815     = ((i2789 << 9 + _1100111) << 10 + _10101101) << 5\ni2839     = ((_11011 + i2815) << 11 + _101101) << 10 + _1001111\ni2866     = ((i2839 << 9 + _11110101) << 7 + _1111001) << 9\ni2888     = ((_10110001 + i2866) << 3 + _101) << 16 + _10011111\ni2912     = ((i2888 << 7 + _1011101) << 6 + _11001) << 9\ni2934     = ((_100011 + i2912) << 10 + _10111101) << 9 + _1001011\ni2960     = ((i2934 << 6 + _10011) << 12 + _11111001) << 6\ni2982     = ((_101001 + i2960) << 13 + _10001101) << 6 + _111011\ni3017     = ((i2982 << 11 + _10001001) << 15 + _11111001) << 7\ni3042     = ((_111011 + i3017) << 9 + _10101) << 13 + _10111011\ni3071     = ((i3042 << 9 + _11001011) << 4 + _1111) << 14\ni3096     = ((_10001001 + i3071) << 13 + _10011011) << 9 + _100111\ni3123     = ((i3096 << 10 + _11110101) << 7 + _1110111) << 8\ni3146     = ((_1100001 + i3123) << 10 + _11111111) << 10 + _1011001\ni3174     = ((i3146 << 9 + _11001101) << 7 + _1000011) << 10\ni3193     = ((_11000111 + i3174) << 8 + _10110001) << 8 + _11001011\ni3221     = ((i3193 << 5 + _10001) << 8 + _11001) << 13\ni3241     = ((_1101101 + i3221) << 9 + _10000011) << 8 + _11000011\ni3269     = ((i3241 << 9 + _11101001) << 9 + _10011111) << 8\ni3288     = ((_10110011 + i3269) << 3 + _11) << 13 + _1000001\ni3317     = ((i3288 << 10 + _1010011) << 8 + _1010111) << 9\ni3340     = ((_1000101 + i3317) << 11 + _11001001) << 9 + _1000101\ni3366     = ((i3340 << 8 + _1010001) << 3 + _11) << 13\ni3386     = ((_1001011 + i3366) << 9 + _1000101) << 8 + _1110011\ni3414     = ((i3386 << 10 + _10110101) << 9 + _10101101) << 7\ni3433     = ((_1010001 + i3414) << 12 + _10001111) << 4 + _1101\ni3463     = ((i3433 << 12 + _10000111) << 7 + _100111) << 9\ni3485     = ((_1110101 + i3463) << 9 + _1000001) << 10 + _11111101\ni3514     = ((i3485 << 9 + _11000001) << 8 + _1011011) << 10\ni3534     = ((_1101001 + i3514) << 9 + _10000001) << 8 + _11000111\ni3564     = ((i3534 << 8 + _10000011) << 8 + _10110011) << 12\ni3580     = ((_10011111 + i3564) << 8 + _1000101) << 5 + _1011\ni3611     = ((i3580 << 11 + _1111001) << 10 + _11000011) << 8\ni3633     = ((_10011111 + i3611) << 11 + _10001) << 8 + _101\ni3663     = ((i3633 << 13 + _1100001) << 7 + _100001) << 8\ni3684     = ((_100011 + i3663) << 10 + _10011111) << 8 + _1101001\ni3712     = ((i3684 << 7 + _100101) << 10 + _11110111) << 9\ni3733     = ((_1110001 + i3712) << 9 + _101001) << 9 + _11001\ni3766     = ((i3733 << 14 + _11011001) << 10 + _10101101) << 7\ni3789     = ((_100111 + i3766) << 9 + _11101) << 11 + _11101111\ni3814     = ((i3789 << 9 + _11100001) << 8 + _11010001) << 6\ni3838     = ((_100101 + i3814) << 11 + _11011001) << 10 + _11101001\ni3864     = ((i3838 << 8 + _11111111) << 8 + _11110111) << 8\ni3884     = ((_10101111 + i3864) << 5 + _10101) << 12 + _10100001\ni3910     = ((i3884 << 8 + _11010101) << 9 + _10000001) << 7\ni3932     = ((_1010001 + i3910) << 9 + _1101101) << 10 + _1000011\ni3958     = ((i3932 << 8 + _1010011) << 8 + _1001101) << 8\ni3980     = ((_1100011 + i3958) << 11 + _11111101) << 8 + _11100001\ni4013     = ((i3980 << 12 + _11001111) << 5 + _1101) << 14\ni4033     = ((_10100101 + i4013) << 7 + _1001111) << 10 + _10110111\ni4065     = ((i4033 << 12 + _11100111) << 11 + _11100001) << 7\ni4087     = ((_1010101 + i4065) << 8 + _11011) << 11 + _11101011\ni4116     = ((i4087 << 8 + _10110101) << 8 + _100111) << 11\ni4136     = ((_11001011 + i4116) << 9 + _10110001) << 8 + _10001011\ni4162     = ((i4136 << 4 + _1111) << 7 + _101) << 13\ni4181     = ((_10111001 + i4162) << 8 + _10101101) << 8 + _10100111\ni4208     = ((i4181 << 8 + _10010101) << 9 + _11110101) << 8\ni4227     = ((_11001001 + i4208) << 8 + _10101101) << 8 + _1101001\ni4263     = ((i4227 << 17 + _1100001) << 8 + _1001011) << 9\ni4284     = ((_10001 + i4263) << 11 + _11001001) << 7 + _111111\ni4316     = ((i4284 << 14 + _11111001) << 8 + _11101011) << 8\ni4344     = ((_1101011 + i4316) << 12 + _10001111) << 13 + _1000011\ni4375     = ((i4344 << 8 + _1011001) << 10 + _1101011) << 11\ni4389     = ((_11110111 + i4375) << 7 + _1111001) << 4 + _101\ni4421     = ((i4389 << 12 + _100001) << 7 + _10101) << 11\ni4440     = ((_10001001 + i4421) << 8 + _10111011) << 8 + _1000101\ni4475     = ((i4440 << 11 + _110101) << 12 + _11001) << 10\ni4493     = ((_1011111 + i4475) << 8 + _1111101) << 7 + _100001\ni4523     = ((i4493 << 11 + _11101011) << 6 + _111111) << 11\ni4545     = ((_10010111 + i4523) << 10 + _1010001) << 9 + _11110101\ni4565     = ((i4545 << 6 + _110011) << 10 + _10101001) << 2\ni4590     = ((1 + i4565) << 16 + _10100011) << 6 + _111111\ni4620     = ((i4590 << 7 + _10001) << 10 + _1100011) << 11\ni4638     = ((_1101111 + i4620) << 9 + _10000101) << 6 + _100111\ni4665     = ((i4638 << 13 + _111111) << 10 + _11011101) << 2\ni4687     = ((1 + i4665) << 14 + _1000101) << 5 + _1111\ni4719     = ((i4687 << 14 + _10000111) << 8 + _11110101) << 8\ni4741     = ((_11011001 + i4719) << 8 + _11011111) << 11 + _11000011\ni4767     = ((i4741 << 7 + _1111101) << 9 + _10001011) << 8\ni4787     = ((_1010011 + i4767) << 9 + _1000001) << 8 + _110011\ni4814     = ((i4787 << 11 + _1111001) << 9 + _11100001) << 5\ni4836     = ((_11101 + i4814) << 12 + _10000101) << 7 + _1010111\ni4867     = ((i4836 << 10 + _11010101) << 11 + _11011001) << 8\ni4886     = ((_11011111 + i4867) << 4 + _111) << 12 + _10001\nreturn      ((i4886 << 7 + _1001) << 8 + _1111) << 4\n"
  },
  {
    "path": "tools/addchain/bn254_exp.acc",
    "content": "_10       = 2*1\n_11       = 1 + _10\n_101      = _10 + _11\n_111      = _10 + _101\n_1001     = _10 + _111\n_1011     = _10 + _1001\n_1101     = _10 + _1011\n_1111     = _10 + _1101\n_10001    = _10 + _1111\n_10011    = _10 + _10001\n_10101    = _10 + _10011\n_10111    = _10 + _10101\n_11001    = _10 + _10111\n_11011    = _10 + _11001\n_11101    = _10 + _11011\n_11111    = _10 + _11101\n_100001   = _10 + _11111\n_100011   = _10 + _100001\n_100101   = _10 + _100011\n_100111   = _10 + _100101\n_101001   = _10 + _100111\n_101011   = _10 + _101001\n_101101   = _10 + _101011\n_101111   = _10 + _101101\n_110001   = _10 + _101111\n_110011   = _10 + _110001\n_110101   = _10 + _110011\n_110111   = _10 + _110101\n_111001   = _10 + _110111\n_111011   = _10 + _111001\n_111101   = _10 + _111011\n_111111   = _10 + _111101\n_1000001  = _10 + _111111\n_1000011  = _10 + _1000001\n_1000101  = _10 + _1000011\n_1000111  = _10 + _1000101\n_1001001  = _10 + _1000111\n_1001011  = _10 + _1001001\n_1001101  = _10 + _1001011\n_1001111  = _10 + _1001101\n_1010001  = _10 + _1001111\n_1010011  = _10 + _1010001\n_1010101  = _10 + _1010011\n_1010111  = _10 + _1010101\n_1011001  = _10 + _1010111\n_1011011  = _10 + _1011001\n_1011101  = _10 + _1011011\n_1011111  = _10 + _1011101\n_1100001  = _10 + _1011111\n_1100011  = _10 + _1100001\n_1100101  = _10 + _1100011\n_1100111  = _10 + _1100101\n_1101001  = _10 + _1100111\n_1101011  = _10 + _1101001\n_1101101  = _10 + _1101011\n_1101111  = _10 + _1101101\n_1110001  = _10 + _1101111\n_1110011  = _10 + _1110001\n_1110101  = _10 + _1110011\n_1110111  = _10 + _1110101\n_1111001  = _10 + _1110111\n_1111011  = _10 + _1111001\n_1111101  = _10 + _1111011\n_1111111  = _10 + _1111101\n_11111110 = 2*_1111111\n_11111111 = 1 + _11111110\ni81       = ((_1111101 + _11111111) << 4 + _10111) << 8 + _100001\ni105      = ((i81 << 7 + _111001) << 9 + _1001011) << 6\ni125      = ((_100111 + i105) << 9 + _1001001) << 8 + _101001\ni150      = ((i125 << 8 + _1110101) << 7 + _1001111) << 8\ni168      = ((_1001011 + i150) << 6 + _101001) << 9 + _1011001\ni192      = ((i168 << 6 + _11001) << 4 + 1) << 12\ni209      = ((_110111 + i192) << 6 + _10011) << 8 + _10101\ni236      = ((i209 << 9 + _1110001) << 9 + _1011111) << 7\ni256      = ((_1101 + i236) << 9 + _110101) << 8 + _1000101\ni281      = ((i256 << 6 + _101101) << 11 + _110001) << 6\ni307      = ((_11111 + i281) << 17 + _1010111) << 6 + _110011\ni337      = ((i307 << 6 + _11011) << 12 + _11111111) << 10\ni356      = ((_10101 + i337) << 7 + _10101) << 9 + _1110011\ni384      = ((i356 << 10 + _1000101) << 8 + _100001) << 8\ni399      = ((_1100111 + i384) << 6 + _101011) << 6 + _10011\ni427      = ((i399 << 8 + _111011) << 9 + _11111) << 9\ni437      = (2*(_11111111 + i427) + 1) << 6 + _111\ni466      = ((i437 << 11 + _1001011) << 6 + _110001) << 10\ni484      = ((_1100111 + i466) << 7 + _1001101) << 8 + _1100111\ni510      = ((i484 << 6 + _11011) << 9 + _110111) << 9\ni527      = ((_1111011 + i510) << 4 + _1101) << 10 + _1101111\ni557      = ((i527 << 5 + _11011) << 13 + _101111) << 10\ni577      = ((_1110011 + i557) << 10 + _1000101) << 7 + _1000011\ni598      = ((i577 << 7 + _1010101) << 6 + _11111) << 6\ni613      = ((_1001 + i598) << 10 + _100101) << 2 + 1\ni644      = ((i613 << 9 + _11111111) << 9 + _1110111) << 11\ni661      = ((_1100011 + i644) << 6 + _110011) << 8 + _1110011\ni684      = ((i661 << 7 + _1000101) << 7 + _1110001) << 7\ni700      = ((_1001111 + i684) << 9 + _1000101) << 4 + _11\ni727      = ((i700 << 12 + _1001101) << 3 + _101) << 10\ni746      = ((_1101 + i727) << 10 + _1001011) << 6 + _110001\ni772      = ((i746 << 8 + _110111) << 8 + _110011) << 8\ni790      = (2*(_1001011 + i772) + 1) << 14 + _1101011\ni815      = ((i790 << 8 + _1000111) << 5 + _10101) << 10\ni834      = ((_1000101 + i815) << 6 + _11101) << 10 + _100111\ni856      = ((i834 << 5 + _1101) << 10 + _100011) << 5\ni876      = ((_1011 + i856) << 9 + _110111) << 8 + _1010011\ni900      = ((i876 << 7 + _1000001) << 7 + _110101) << 8\ni925      = ((_1101101 + i900) << 11 + _1111101) << 11 + _1010101\ni953      = ((i925 << 7 + _1001111) << 9 + _1000111) << 10\ni971      = ((_1111011 + i953) << 8 + _1100111) << 7 + _1011011\ni996      = ((i971 << 8 + _1011111) << 7 + _101001) << 8\ni1012     = ((_110001 + i996) << 5 + _1101) << 8 + _10011\ni1037     = ((i1012 << 9 + _1001101) << 6 + _110101) << 8\ni1055     = ((_1101111 + i1037) << 8 + _1110101) << 7 + _101001\ni1081     = ((i1055 << 10 + _1001101) << 7 + _1010001) << 7\ni1098     = ((_1111101 + i1081) << 5 + _10101) << 9 + _100111\ni1125     = ((i1098 << 7 + _11111) << 8 + _110111) << 10\ni1144     = ((_101111 + i1125) << 8 + _1000111) << 8 + _1111101\ni1169     = ((i1144 << 5 + _10001) << 12 + _110101) << 6\ni1189     = ((_11011 + i1169) << 10 + _1110101) << 7 + _1010111\ni1217     = ((i1189 << 7 + _111101) << 12 + _1101011) << 7\ni1236     = ((_101111 + i1217) << 8 + _1001001) << 8 + _1001011\ni1267     = ((i1236 << 12 + _1100001) << 10 + _100011) << 7\ni1287     = ((_100111 + i1267) << 10 + _1011011) << 7 + _1001001\ni1309     = ((i1287 << 7 + _1101111) << 7 + _1101011) << 6\ni1329     = ((_10001 + i1309) << 8 + _111011) << 9 + _1010001\ni1351     = ((i1329 << 7 + _1100011) << 8 + _1001101) << 5\ni1374     = ((_10111 + i1351) << 13 + _1111001) << 7 + _1011001\ni1398     = ((i1374 << 7 + _1010101) << 7 + _1101001) << 8\ni1417     = ((_110011 + i1398) << 6 + _1011) << 10 + _1001011\ni1444     = ((i1417 << 8 + _1111101) << 4 + _101) << 13\ni1463     = ((_1100101 + i1444) << 7 + _1000101) << 9 + _100111\ni1491     = ((i1463 << 8 + _1101101) << 10 + _1001011) << 8\ni1509     = ((_1000011 + i1491) << 9 + _110101) << 6 + _10111\ni1539     = ((i1509 << 9 + _110111) << 9 + _111101) << 10\ni1558     = ((_101011 + i1539) << 2 + 1) << 14 + _1111101\ni1585     = ((i1558 << 7 + _1101) << 10 + _101111) << 8\ni1610     = ((_1110001 + i1585) << 15 + _1011101) << 7 + _1101001\ni1637     = ((i1610 << 6 + _11001) << 9 + _101011) << 10\ni1654     = (2*(_1001111 + i1637) + 1) << 13 + _1011001\ni1678     = ((i1654 << 4 + _1111) << 9 + _111011) << 9\ni1695     = ((_1011011 + i1678) << 6 + _110011) << 8 + _1101\ni1725     = ((i1695 << 10 + _1101011) << 7 + _1010001) << 11\ni1746     = ((_1111001 + i1725) << 6 + _100011) << 12 + _1111111\ni1769     = ((i1746 << 8 + _1000111) << 7 + _1010001) << 6\ni1788     = ((_110101 + i1769) << 8 + _1011001) << 8 + _110111\ni1812     = ((i1788 << 10 + _1110011) << 6 + _101011) << 6\ni1834     = ((_11111 + i1812) << 8 + _101101) << 11 + _1111001\ni1863     = ((i1834 << 9 + _10111) << 10 + _1000111) << 8\ni1880     = ((_1011001 + i1863) << 5 + _11011) << 9 + _1000001\ni1907     = ((i1880 << 2 + _11) << 16 + _1100011) << 7\ni1923     = ((_1001001 + i1907) << 7 + _1100111) << 6 + _110111\ni1950     = ((i1923 << 8 + _1111011) << 10 + _1100111) << 7\ni1971     = ((_11011 + i1950) << 6 + _111) << 12 + _101101\ni1994     = ((i1971 << 8 + _1001001) << 7 + _1101111) << 6\ni2016     = ((_110011 + i1994) << 10 + _100101) << 9 + _1101001\ni2041     = ((i2016 << 7 + _1110101) << 6 + _10101) << 10\ni2060     = ((_1100001 + i2041) << 7 + _1000101) << 9 + _110101\ni2085     = ((i2060 << 5 + _1101) << 11 + _1100111) << 7\ni2103     = ((_1010011 + i2085) << 6 + _100001) << 9 + _1000111\ni2129     = ((i2103 << 5 + _11011) << 9 + _1100011) << 10\ni2146     = ((_1001011 + i2129) << 7 + _1110011) << 7 + _101111\ni2167     = ((i2146 << 6 + _11101) << 9 + _1010111) << 4\ni2195     = ((1 + i2167) << 16 + _101111) << 9 + _100011\ni2220     = ((i2195 << 7 + _11101) << 8 + _111111) << 8\ni2238     = ((_1011101 + i2220) << 6 + _10001) << 9 + _1100011\ni2264     = ((i2238 << 7 + _1101111) << 8 + _1001001) << 9\ni2283     = ((_10011 + i2264) << 9 + _1111011) << 7 + _1110111\ni2308     = ((i2283 << 7 + _1110101) << 7 + _1101111) << 9\ni2327     = ((_10001 + i2308) << 8 + _100111) << 8 + _1001011\ni2351     = ((i2327 << 5 + _10101) << 9 + _1110101) << 8\ni2371     = ((_1010011 + i2351) << 7 + _1101111) << 10 + _1010011\ni2402     = ((i2371 << 13 + _1010111) << 9 + _1010001) << 7\ni2420     = ((_1111101 + i2402) << 7 + _110001) << 8 + _1001001\ni2446     = (2*(i2420 << 7 + _1001101) + 1) << 16\ni2465     = ((_111011 + i2446) << 8 + _1010011) << 8 + _1111011\ni2492     = ((i2465 << 8 + _1011111) << 8 + _111001) << 9\ni2511     = ((_100001 + i2492) << 8 + _1100101) << 8 + _1010011\ni2542     = ((i2511 << 9 + _1010111) << 9 + _1001) << 11\ni2562     = ((_10111 + i2542) << 9 + _1111111) << 8 + _1010111\ni2585     = ((i2562 << 6 + _110001) << 8 + _1010001) << 7\ni2607     = ((_1100101 + i2585) << 7 + _1011001) << 12 + _1000011\ni2635     = ((i2607 << 6 + _110111) << 11 + _1110111) << 9\ni2656     = ((_110111 + i2635) << 6 + _1111) << 12 + _1000011\ni2679     = ((i2656 << 7 + _1101101) << 5 + _10111) << 9\ni2691     = 2*((_101001 + i2679) << 8 + _1110001) + 1\ni2720     = ((i2691 << 14 + _1100001) << 6 + _111101) << 7\ni2740     = ((_110101 + i2720) << 11 + _1110001) << 6 + _111011\ni2770     = ((i2740 << 9 + _1110011) << 12 + _1000101) << 7\ni2788     = ((_101101 + i2770) << 6 + _10101) << 9 + _1001001\ni2811     = ((i2788 << 4 + _1001) << 10 + _1100011) << 7\ni2829     = ((_1011001 + i2811) << 5 + _11111) << 10 + _1101011\ni2853     = ((i2829 << 6 + _11011) << 9 + _110001) << 7\ni2866     = 2*((_11111 + i2853) << 9 + _1101111) + 1\ni2896     = ((i2866 << 12 + _111011) << 8 + _110101) << 8\ni2915     = ((_1000101 + i2896) << 7 + _11101) << 9 + _1111101\ni2941     = ((i2915 << 9 + _1001011) << 6 + _10011) << 9\ni2957     = ((_1110001 + i2941) << 6 + _111101) << 7 + _10111\ni2984     = ((i2957 << 9 + _111011) << 8 + _100111) << 8\ni3001     = ((_1001101 + i2984) << 6 + _110011) << 8 + _1001111\ni3025     = ((i3001 << 8 + _1001001) << 6 + _100111) << 8\ni3040     = ((_1110011 + i3025) << 5 + _10011) << 7 + _10101\ni3065     = ((i3040 << 9 + _1111001) << 7 + _1101001) << 7\ni3085     = ((_1111011 + i3065) << 8 + _101101) << 9 + _1000001\ni3110     = ((i3085 << 8 + _111001) << 8 + _1011101) << 7\ni3126     = ((_1111011 + i3110) << 5 + _10001) << 8 + _110111\ni3150     = ((i3126 << 8 + _1000101) << 6 + _101111) << 8\ni3168     = ((_1101011 + i3150) << 2 + _11) << 13 + _1110011\ni3191     = ((i3168 << 7 + _1000001) << 5 + _10011) << 9\ni3207     = ((_1111101 + i3191) << 7 + _1010011) << 6 + _110011\ni3232     = ((i3207 << 8 + _1010011) << 5 + _1011) << 10\ni3251     = ((_1110101 + i3232) << 10 + _1101111) << 6 + _110001\ni3282     = ((i3251 << 12 + _100011) << 9 + _1011011) << 8\ni3299     = ((_1001011 + i3282) << 6 + _100111) << 8 + _1100011\ni3324     = ((i3299 << 7 + _1011111) << 7 + _1101101) << 9\ni3341     = ((_10001 + i3324) << 10 + _1101001) << 4 + _1111\ni3372     = ((i3341 << 12 + _100101) << 8 + _1000001) << 9\ni3391     = ((_1100111 + i3372) << 9 + _1010111) << 7 + _1000001\ni3415     = ((i3391 << 2 + _11) << 11 + _11111111) << 9\ni3433     = ((_1111101 + i3415) << 5 + _1101) << 10 + _1101111\ni3456     = ((i3433 << 6 + _11001) << 8 + _11001) << 7\ni3477     = ((_111 + i3456) << 11 + _100101) << 7 + _11\nreturn      i3477 << 5\n"
  },
  {
    "path": "tools/addchain/bn254_exp0.acc",
    "content": "_10       = 2*1\n_11       = 1 + _10\n_101      = _10 + _11\n_111      = _10 + _101\n_1001     = _10 + _111\n_1011     = _10 + _1001\n_1101     = _10 + _1011\n_1111     = _10 + _1101\n_10001    = _10 + _1111\n_10011    = _10 + _10001\n_10101    = _10 + _10011\n_10111    = _10 + _10101\n_11001    = _10 + _10111\n_11011    = _10 + _11001\n_11101    = _10 + _11011\n_11111    = _10 + _11101\n_100001   = _10 + _11111\n_100011   = _10 + _100001\n_100101   = _10 + _100011\n_100111   = _10 + _100101\n_101001   = _10 + _100111\n_101011   = _10 + _101001\n_101101   = _10 + _101011\n_101111   = _10 + _101101\n_110001   = _10 + _101111\n_110011   = _10 + _110001\n_110101   = _10 + _110011\n_110111   = _10 + _110101\n_111001   = _10 + _110111\n_111011   = _10 + _111001\n_111101   = _10 + _111011\n_111111   = _10 + _111101\n_1000001  = _10 + _111111\n_1000011  = _10 + _1000001\n_1000101  = _10 + _1000011\n_1000111  = _10 + _1000101\n_1001001  = _10 + _1000111\n_1001011  = _10 + _1001001\n_1001101  = _10 + _1001011\n_1001111  = _10 + _1001101\n_1010001  = _10 + _1001111\n_1010011  = _10 + _1010001\n_1010101  = _10 + _1010011\n_1010111  = _10 + _1010101\n_1011001  = _10 + _1010111\n_1011011  = _10 + _1011001\n_1011101  = _10 + _1011011\n_1011111  = _10 + _1011101\n_1100001  = _10 + _1011111\n_1100011  = _10 + _1100001\n_1100101  = _10 + _1100011\n_1100111  = _10 + _1100101\n_1101001  = _10 + _1100111\n_1101011  = _10 + _1101001\n_1101101  = _10 + _1101011\n_1101111  = _10 + _1101101\n_1110001  = _10 + _1101111\n_1110011  = _10 + _1110001\n_1110101  = _10 + _1110011\n_1110111  = _10 + _1110101\n_1111001  = _10 + _1110111\n_1111011  = _10 + _1111001\n_1111101  = _10 + _1111011\n_1111111  = _10 + _1111101\n_11100010 = _1100011 + _1111111\n_11111111 = _11101 + _11100010\ni67       = 2*_11100010\nx9        = _111011 + i67\ni94       = ((i67 << 10 + _1010101) << 7 + _1100001) << 7\ni118      = ((_1000011 + i94) << 8 + _111011) << 13 + _101011\ni146      = ((i118 << 8 + _1101111) << 8 + _110111) << 10\ni165      = ((_1010111 + i146) << 11 + _1110111) << 5 + _1011\ni191      = ((i165 << 6 + _101) << 10 + _111001) << 8\ni212      = ((_100101 + i191) << 5 + _11) << 13 + _1100011\ni243      = ((i212 << 10 + _111) << 11 + _1011011) << 8\ni261      = ((_1100001 + i243) << 4 + _1111) << 11 + _110101\ni287      = ((i261 << 6 + _10111) << 9 + _1010101) << 9\ni308      = ((_10011 + i287) << 9 + _100001) << 9 + _100011\ni334      = ((i308 << 9 + _1100001) << 8 + _101101) << 7\ni359      = ((_1011 + i334) << 13 + _1100011) << 9 + _100111\ni384      = ((i359 << 9 + _1101001) << 5 + _10001) << 9\ni402      = ((_100101 + i384) << 9 + _1010001) << 6 + _100011\ni426      = ((i402 << 9 + _1100001) << 9 + _1001011) << 4\ni445      = ((_1101 + i426) << 7 + _1101) << 9 + _101001\ni469      = ((i445 << 8 + _1101001) << 5 + _10011) << 9\ni489      = ((_1111101 + i469) << 9 + _1111101) << 8 + _1110101\ni515      = ((i489 << 7 + _111011) << 10 + _100011) << 7\ni532      = ((_111001 + i515) << 5 + _1101) << 9 + _111\ni561      = ((i532 << 11 + _11111111) << 8 + _1111001) << 8\ni576      = ((_1010111 + i561) << 5 + _11101) << 7 + _1001\ni602      = ((i576 << 10 + _1011001) << 7 + _1111001) << 7\ni625      = ((_11001 + i602) << 9 + _101101) << 11 + _111101\ni649      = ((i625 << 6 + _10011) << 6 + _101) << 10\ni671      = ((_10111 + i649) << 11 + _1101101) << 8 + _1111001\ni696      = ((i671 << 9 + _1000001) << 7 + _1101101) << 7\ni716      = ((_1100111 + i696) << 7 + _10001) << 10 + _1100011\ni737      = ((i716 << 6 + _100111) << 8 + _1101101) << 5\ni762      = ((_11101 + i737) << 8 + _10101) << 14 + _1111001\ni787      = ((i762 << 7 + _1001011) << 8 + _1000011) << 8\ni805      = ((_1011101 + i787) << 9 + _110111) << 6 + _10001\ni830      = ((i805 << 6 + _1111) << 10 + _1010101) << 7\ni847      = ((_1011001 + i830) << 8 + _1011111) << 6 + _1001\ni872      = ((i847 << 5 + _11) << 11 + _110111) << 7\ni887      = ((_100101 + i872) << 5 + _1011) << 7 + _1011\ni913      = ((i887 << 10 + _1011011) << 6 + _10101) << 8\ni936      = ((_111001 + i913) << 8 + _1001001) << 12 + _1110111\ni965      = ((i936 << 10 + _101111) << 8 + _10001) << 9\ni984      = ((_1010011 + i965) << 7 + _1111011) << 9 + _1010001\ni1004     = ((i984 << 6 + _10011) << 9 + _1010111) << 3\ni1023     = ((_111 + i1004) << 10 + _110001) << 6 + _11101\ni1051     = ((i1023 << 11 + x9) << 8 + _1011011) << 7\ni1071     = ((_1010001 + i1051) << 7 + _1101111) << 10 + _111011\ni1099     = ((i1071 << 9 + _1111001) << 6 + _101001) << 11\ni1118     = ((_101111 + i1099) << 9 + _1011001) << 7 + _1000001\ni1143     = ((i1118 << 9 + _1000011) << 7 + _111101) << 7\ni1162     = ((_111001 + i1143) << 4 + _11) << 12 + _1100101\ni1187     = ((i1162 << 4 + _1001) << 11 + _110011) << 8\ni1205     = ((_1100101 + i1187) << 4 + _1101) << 11 + _1101011\ni1231     = ((i1205 << 7 + _1010101) << 8 + _11111) << 9\ni1248     = ((_1100101 + i1231) << 5 + _1011) << 9 + _111011\ni1272     = ((i1248 << 8 + _1010111) << 7 + _100101) << 7\ni1292     = ((_110001 + i1272) << 8 + _1110011) << 9 + _1111011\ni1317     = ((i1292 << 9 + _1010011) << 5 + _10011) << 9\ni1336     = ((_1111001 + i1317) << 6 + _10001) << 10 + _1111001\ni1357     = ((i1336 << 7 + _1001101) << 7 + _1110001) << 5\ni1382     = ((_11011 + i1357) << 9 + _1001001) << 13 + _1100111\ni1407     = ((i1382 << 8 + _1110011) << 6 + _101011) << 9\ni1423     = ((_100111 + i1407) << 7 + _101001) << 6 + _11101\ni1458     = ((i1423 << 8 + _111001) << 14 + _1101001) << 11\ni1478     = ((_1100011 + i1458) << 8 + _110111) << 9 + _1001111\ni1498     = ((i1478 << 4 + _11) << 12 + _1010011) << 2\ni1519     = ((_11 + i1498) << 12 + _1110101) << 6 + _110111\ni1544     = ((i1519 << 10 + _1010101) << 7 + _1011101) << 6\ni1559     = ((_111011 + i1544) << 8 + _1100111) << 4 + _111\ni1594     = ((i1559 << 12 + _111) << 10 + _11101) << 11\ni1610     = ((_1001111 + i1594) << 8 + _1010011) << 5 + _10101\ni1636     = ((i1610 << 10 + _1001111) << 11 + _1010111) << 3\ni1658     = ((_101 + i1636) << 11 + _1011001) << 8 + _101101\ni1680     = ((i1658 << 8 + _1001111) << 7 + _1001111) << 5\ni1700     = ((_1011 + i1680) << 10 + _1111001) << 7 + _1000101\ni1727     = ((i1700 << 7 + _1001101) << 9 + _111011) << 9\ni1744     = ((_1000111 + i1727) << 7 + _1000111) << 7 + _1011001\ni1766     = ((i1744 << 6 + _101001) << 8 + _1101101) << 6\ni1784     = ((_100101 + i1766) << 9 + _1000111) << 6 + _110101\ni1812     = ((i1784 << 9 + _1100111) << 7 + _110001) << 10\ni1828     = ((_1101111 + i1812) << 7 + _1101001) << 6 + _100011\ni1854     = ((i1828 << 6 + _10011) << 10 + _1000111) << 8\ni1876     = ((_1110001 + i1854) << 12 + _100011) << 7 + _101\ni1918     = ((i1876 << 20 + _111011) << 11 + _10001) << 9\ni1937     = ((_1011001 + i1918) << 6 + _110001) << 10 + _110101\ni1962     = ((i1937 << 8 + _110111) << 4 + _111) << 11\ni1978     = ((_1001101 + i1962) << 7 + _1000011) << 6 + _101111\ni2002     = ((i1978 << 8 + _1000001) << 7 + _1110001) << 7\ni2019     = ((_1111001 + i2002) << 7 + _1001101) << 7 + _101001\ni2043     = ((i2019 << 10 + _1010111) << 6 + _111011) << 6\ni2061     = ((_11111 + i2043) << 8 + _110001) << 7 + _110001\ni2084     = ((i2061 << 8 + _1010111) << 2 + 1) << 11\ni2103     = ((_10111 + i2084) << 9 + _1000011) << 7 + _1011001\ni2126     = ((i2103 << 7 + _1011011) << 5 + _11101) << 9\ni2144     = ((_101001 + i2126) << 8 + _1110011) << 7 + _1100011\ni2173     = ((i2144 << 9 + _1110111) << 8 + _1010011) << 10\ni2184     = 2*((_1110001 + i2173) << 7 + _1110001) + 1\ni2216     = ((i2184 << 14 + _111101) << 9 + _1110001) << 7\ni2233     = ((_1001011 + i2216) << 7 + _111001) << 7 + _11111\ni2259     = ((i2233 << 10 + _1100111) << 7 + _1101111) << 7\ni2280     = ((_1011011 + i2259) << 10 + x9) << 8 + _1100101\ni2305     = ((i2280 << 7 + _1110011) << 6 + _100001) << 10\ni2327     = ((_101011 + i2305) << 13 + _1000101) << 6 + _1011\ni2354     = ((i2327 << 10 + _110111) << 7 + _100111) << 8\ni2374     = ((_1100101 + i2354) << 7 + _1100101) << 10 + _1011111\ni2402     = ((i2374 << 12 + _1000011) << 7 + _1110001) << 7\ni2421     = ((_1011101 + i2402) << 8 + _1011011) << 8 + _1101111\ni2446     = ((i2421 << 5 + _11101) << 9 + _10011) << 9\ni2461     = ((_1111001 + i2446) << 5 + _10101) << 7 + _10111\ni2494     = ((i2461 << 11 + _100101) << 10 + _101) << 10\ni2519     = ((_110011 + i2494) << 8 + _101001) << 14 + _1100111\ni2543     = ((i2519 << 9 + _1000011) << 4 + _1001) << 9\ni2561     = ((_110101 + i2543) << 8 + _1010011) << 7 + _1100011\ni2586     = ((i2561 << 5 + _1001) << 6 + _101) << 12\ni2614     = ((_11011 + i2586) << 13 + _101) << 12 + _1101101\ni2641     = ((i2614 << 4 + _101) << 14 + _1000001) << 7\ni2658     = ((_111011 + i2641) << 6 + _10011) << 8 + _11011\ni2684     = ((i2658 << 8 + _10111) << 9 + _1010001) << 7\ni2702     = ((_111001 + i2684) << 8 + _1010101) << 7 + _1000111\ni2726     = ((i2702 << 4 + _1011) << 10 + _1000101) << 8\ni2741     = ((_1011101 + i2726) << 6 + _110001) << 6 + _11011\ni2767     = ((i2741 << 9 + _1000111) << 9 + _1100001) << 6\ni2792     = ((_111111 + i2767) << 9 + _1101011) << 13 + _111011\ni2820     = ((i2792 << 8 + _1111101) << 6 + _11101) << 12\ni2837     = ((_1110101 + i2820) << 2 + _11) << 12 + _1101001\ni2862     = ((i2837 << 8 + _110101) << 8 + _1001101) << 7\ni2878     = ((_1110101 + i2862) << 8 + _1011001) << 5 + _10111\ni2910     = ((i2878 << 8 + _11) << 13 + _1011101) << 9\ni2932     = ((_1011101 + i2910) << 10 + _1111111) << 9 + _1010111\ni2956     = ((i2932 << 8 + _1110001) << 4 + _1001) << 10\ni2972     = ((_1101001 + i2956) << 6 + _11001) << 7 + _1001\ni3000     = ((i2972 << 9 + _100011) << 7 + _101001) << 10\ni3019     = ((_11111 + i3000) << 9 + _1010111) << 7 + _1000101\ni3046     = ((i3019 << 7 + _100011) << 11 + _1111101) << 7\ni3065     = ((_1000001 + i3046) << 7 + _1111011) << 9 + _1010111\ni3094     = ((i3065 << 14 + _1001101) << 8 + _1001101) << 5\ni3115     = ((_1111 + i3094) << 8 + _11011) << 10 + _1111101\ni3140     = ((i3115 << 7 + _100111) << 9 + _1101111) << 7\ni3160     = ((_101001 + i3140) << 9 + _1010101) << 8 + _1110111\ni3182     = ((i3160 << 7 + _1000111) << 6 + _100101) << 7\ni3202     = ((_111101 + i3182) << 5 + _1001) << 12 + _1111001\ni3225     = ((i3202 << 5 + _10101) << 9 + _1000111) << 7\ni3243     = ((_1010011 + i3225) << 7 + _1001111) << 8 + _1100011\ni3266     = ((i3243 << 7 + _1101101) << 6 + _10111) << 8\ni3284     = ((_110111 + i3266) << 7 + _111111) << 8 + _1011001\ni3309     = ((i3284 << 7 + _1011011) << 8 + _101111) << 8\ni3326     = ((_1010001 + i3309) << 4 + _1101) << 10 + _1001111\ni3354     = ((i3326 << 7 + _1100011) << 8 + _1000011) << 11\ni3369     = ((_1111011 + i3354) << 3 + _11) << 9 + _11111111\ni3396     = ((i3369 << 12 + _1000111) << 7 + _11111) << 6\ni3421     = ((_111 + i3396) << 11 + _1110001) << 11 + _10101\ni3449     = ((i3421 << 12 + _1101001) << 5 + _10011) << 9\ni3470     = ((_111101 + i3449) << 11 + _1100001) << 7 + _1100101\nreturn      2*i3470 + 1\n"
  },
  {
    "path": "tools/addchain/bn254_r_m_d_inv.acc",
    "content": "_10       = 2*1\n_11       = 1 + _10\n_100      = 1 + _11\n_101      = 1 + _100\n_111      = _10 + _101\n_1001     = _10 + _111\n_1011     = _10 + _1001\n_1101     = _10 + _1011\n_1111     = _10 + _1101\n_10001    = _10 + _1111\n_10011    = _10 + _10001\n_10101    = _10 + _10011\n_10111    = _10 + _10101\n_11001    = _10 + _10111\n_11011    = _10 + _11001\n_11101    = _10 + _11011\n_11111    = _10 + _11101\n_100001   = _10 + _11111\n_100011   = _10 + _100001\n_100101   = _10 + _100011\n_100111   = _10 + _100101\n_101001   = _10 + _100111\n_101011   = _10 + _101001\n_101101   = _10 + _101011\n_101111   = _10 + _101101\n_110001   = _10 + _101111\n_110011   = _10 + _110001\n_110101   = _10 + _110011\n_110111   = _10 + _110101\n_111001   = _10 + _110111\n_111011   = _10 + _111001\n_111101   = _10 + _111011\n_111111   = _10 + _111101\n_1000001  = _10 + _111111\n_1000011  = _10 + _1000001\n_1000101  = _10 + _1000011\n_1000111  = _10 + _1000101\n_1001001  = _10 + _1000111\n_1001011  = _10 + _1001001\n_1001101  = _10 + _1001011\n_1001111  = _10 + _1001101\n_1010001  = _10 + _1001111\n_1010011  = _10 + _1010001\n_1010101  = _10 + _1010011\n_1010111  = _10 + _1010101\n_1011001  = _10 + _1010111\n_1011011  = _10 + _1011001\n_1011101  = _10 + _1011011\n_1011111  = _10 + _1011101\n_1100001  = _10 + _1011111\n_1100011  = _10 + _1100001\n_1100101  = _10 + _1100011\n_1100111  = _10 + _1100101\n_1101001  = _10 + _1100111\n_1101011  = _10 + _1101001\n_1101101  = _10 + _1101011\n_1101111  = _10 + _1101101\n_1110001  = _10 + _1101111\n_1110011  = _10 + _1110001\n_1110101  = _10 + _1110011\n_1110111  = _10 + _1110101\n_1111001  = _10 + _1110111\n_1111011  = _10 + _1111001\n_1111101  = _10 + _1111011\n_1111111  = _10 + _1111101\n_10000001 = _10 + _1111111\n_10000011 = _10 + _10000001\n_10000101 = _10 + _10000011\n_10000111 = _10 + _10000101\n_10001001 = _10 + _10000111\n_10001011 = _10 + _10001001\n_10001101 = _10 + _10001011\n_10001111 = _10 + _10001101\n_10010001 = _10 + _10001111\n_10010011 = _10 + _10010001\n_10010101 = _10 + _10010011\n_10010111 = _10 + _10010101\n_10011001 = _10 + _10010111\n_10011011 = _10 + _10011001\n_10011101 = _10 + _10011011\n_10011111 = _10 + _10011101\n_10100001 = _10 + _10011111\n_10100011 = _10 + _10100001\n_10100101 = _10 + _10100011\n_10100111 = _10 + _10100101\n_10101001 = _10 + _10100111\n_10101011 = _10 + _10101001\n_10101101 = _10 + _10101011\n_10101111 = _10 + _10101101\n_10110001 = _10 + _10101111\n_10110011 = _10 + _10110001\n_10110101 = _10 + _10110011\n_10110111 = _10 + _10110101\n_10111001 = _10 + _10110111\n_10111011 = _10 + _10111001\n_10111101 = _10 + _10111011\n_10111111 = _10 + _10111101\n_11000001 = _10 + _10111111\n_11000011 = _10 + _11000001\n_11000101 = _10 + _11000011\n_11000111 = _10 + _11000101\n_11001001 = _10 + _11000111\n_11001011 = _10 + _11001001\n_11001101 = _10 + _11001011\n_11001111 = _10 + _11001101\n_11010001 = _10 + _11001111\n_11010011 = _10 + _11010001\n_11010111 = _100 + _11010011\n_11011001 = _10 + _11010111\n_11011011 = _10 + _11011001\n_11011101 = _10 + _11011011\n_11011111 = _10 + _11011101\n_11100001 = _10 + _11011111\n_11100011 = _10 + _11100001\n_11100101 = _10 + _11100011\n_11100111 = _10 + _11100101\n_11101001 = _10 + _11100111\n_11101011 = _10 + _11101001\n_11101101 = _10 + _11101011\n_11101111 = _10 + _11101101\n_11110001 = _10 + _11101111\n_11110011 = _10 + _11110001\n_11110101 = _10 + _11110011\n_11110111 = _10 + _11110101\n_11111001 = _10 + _11110111\n_11111011 = _10 + _11111001\n_11111101 = _10 + _11111011\n_11111111 = _10 + _11111101\ni146      = ((_11 + _11111111) << 7 + _10100011) << 8 + _11010011\ni174      = ((i146 << 9 + _1110011) << 9 + _10101001) << 8\ni199      = ((_101011 + i174) << 11 + _100011) << 11 + _11100011\ni229      = ((i199 << 8 + _10011011) << 8 + _11000001) << 12\ni255      = ((_11110111 + i229) << 9 + _10000111) << 14 + _10100001\ni278      = ((i255 << 5 + _11101) << 9 + _10101) << 7\ni298      = ((_1011 + i278) << 10 + _100011) << 7 + _11111\ni330      = ((i298 << 12 + _10111111) << 8 + _1000011) << 10\ni352      = ((_1011111 + i330) << 8 + _1100001) << 11 + _11111111\ni387      = ((i352 << 10 + _11011001) << 10 + _10001) << 13\ni411      = ((_1000111 + i387) << 6 + _10111) << 15 + _1101101\ni441      = ((i411 << 12 + _11100011) << 7 + _1111011) << 9\ni461      = ((_11111011 + i441) << 8 + _11111011) << 9 + _10101011\ni490      = ((i461 << 11 + _10111111) << 9 + _10011011) << 7\ni508      = ((_1100111 + i490) << 8 + _1101111) << 7 + _101111\ni537      = ((i508 << 10 + _11000011) << 6 + _11011) << 11\ni560      = ((_10111111 + i537) << 9 + _10010101) << 11 + _10100101\ni587      = ((i560 << 9 + _1001101) << 9 + _1100001) << 7\ni609      = ((_110111 + i587) << 7 + _10111) << 12 + _11101\ni638      = ((i609 << 11 + _11100111) << 6 + _100111) << 10\ni660      = ((_100111 + i638) << 12 + _10110011) << 7 + _1111101\ni686      = ((i660 << 12 + _10100101) << 8 + _11110011) << 4\ni710      = ((_1001 + i686) << 13 + _10001011) << 8 + _1001101\ni737      = ((i710 << 5 + _1001) << 12 + _10100011) << 8\ni755      = ((_10001101 + i737) << 7 + _1010101) << 8 + _1001001\ni788      = ((i755 << 5 + _1011) << 13 + _1001001) << 13\ni806      = ((_10110011 + i788) << 8 + _11001101) << 7 + _1010011\ni838      = ((i806 << 11 + _1101111) << 10 + _10000001) << 9\ni860      = ((_10111011 + i838) << 11 + _11100111) << 8 + _11101011\ni884      = ((i860 << 2 + _11) << 13 + _1010101) << 7\ni912      = ((_101101 + i884) << 12 + _10101011) << 13 + _111011\ni937      = ((i912 << 7 + _11101) << 7 + _1111) << 9\ni962      = ((_10011 + i937) << 10 + _100001) << 12 + _101011\ni993      = ((i962 << 10 + _11100011) << 10 + _10111011) << 9\ni1013     = ((_11001111 + i993) << 10 + _10101101) << 7 + _1001111\ni1041     = ((i1013 << 10 + _11110011) << 8 + _10001001) << 8\ni1060     = ((_10011101 + i1041) << 8 + _10001001) << 8 + _1101011\ni1092     = ((i1060 << 7 + _111011) << 12 + _1000101) << 11\ni1116     = ((_10011011 + i1092) << 10 + _111001) << 11 + _10111011\ni1151     = ((i1116 << 11 + _10111011) << 10 + _11011011) << 12\ni1173     = ((_10011111 + i1151) << 12 + _11100111) << 7 + _1000111\ni1204     = ((i1173 << 9 + _10001111) << 10 + _11110001) << 10\ni1223     = ((_10001001 + i1204) << 8 + _10000011) << 8 + _10001001\ni1250     = ((i1223 << 6 + _100111) << 11 + _10011011) << 8\ni1273     = ((_11101001 + i1250) << 13 + _1110111) << 7 + _100011\ni1304     = ((i1273 << 11 + _1100001) << 9 + _11110111) << 9\ni1324     = ((_1011011 + i1304) << 10 + _11100001) << 7 + _1100011\ni1352     = ((i1324 << 9 + _11010001) << 8 + _11000111) << 9\ni1378     = ((_10010101 + i1352) << 14 + _11010001) << 9 + _1001101\ni1409     = ((i1378 << 8 + _1010001) << 12 + _1011011) << 9\ni1430     = ((_1101111 + i1409) << 8 + _111101) << 10 + _1010011\ni1460     = ((i1430 << 12 + _10101101) << 8 + _10011011) << 8\ni1485     = ((_10100001 + i1460) << 8 + _10001111) << 14 + _1111101\ni1511     = ((i1485 << 7 + _100011) << 9 + _1000111) << 8\ni1532     = ((_1100001 + i1511) << 9 + _1110011) << 9 + _11110001\ni1559     = ((i1532 << 7 + _1100111) << 10 + _11101101) << 8\ni1579     = ((_1101101 + i1559) << 8 + _11001) << 9 + _110001\ni1613     = ((i1579 << 9 + _1000011) << 10 + _1000011) << 13\ni1640     = ((_11001101 + i1613) << 12 + _1110001) << 12 + _10101011\ni1666     = ((i1640 << 4 + _1011) << 12 + _10111011) << 8\ni1685     = ((_11011011 + i1666) << 7 + _1010101) << 9 + _11101101\ni1712     = ((i1685 << 8 + _11001011) << 7 + _1111101) << 10\ni1732     = ((_11100101 + i1712) << 7 + _1101011) << 10 + _10101101\ni1759     = ((i1732 << 8 + _1000001) << 9 + _11001011) << 8\ni1778     = ((_11001011 + i1759) << 3 + _111) << 13 + _11011111\ni1809     = ((i1778 << 8 + _100011) << 12 + _11100111) << 9\ni1827     = ((_10001111 + i1809) << 6 + _110101) << 9 + _1111111\ni1854     = ((i1827 << 10 + _10111101) << 8 + _10001101) << 7\ni1877     = ((_1101011 + i1854) << 10 + _11101101) << 10 + _10001111\ni1900     = ((i1877 << 9 + _11110101) << 8 + _11000111) << 4\ni1922     = ((_1111 + i1900) << 12 + _10110111) << 7 + _10001\ni1945     = ((i1922 << 12 + _11101001) << 6 + _111101) << 3\ni1970     = ((1 + i1945) << 14 + _1101011) << 8 + _111011\ni1997     = ((i1970 << 11 + _11011001) << 7 + _1100001) << 7\ni2018     = ((_110001 + i1997) << 10 + _11000111) << 8 + _11110111\ni2044     = ((i2018 << 6 + _11011) << 12 + _10110011) << 6\ni2067     = ((_11111 + i2044) << 11 + _1101101) << 9 + _10110011\ni2093     = ((i2067 << 8 + _11010001) << 5 + _10011) << 11\ni2112     = ((_10001001 + i2093) << 5 + _11001) << 11 + _11011111\ni2138     = ((i2112 << 8 + _11001001) << 8 + _11111001) << 8\ni2160     = ((_10101111 + i2138) << 11 + _10111001) << 8 + _1001001\ni2189     = ((i2160 << 10 + _11100111) << 9 + _10111101) << 8\ni2210     = ((_11101011 + i2189) << 8 + _1111001) << 10 + _1100001\ni2238     = ((i2210 << 9 + _11010111) << 10 + _10100011) << 7\ni2258     = ((_1111101 + i2238) << 9 + _11000011) << 8 + _1001001\ni2284     = ((i2258 << 9 + _1000001) << 12 + _11001001) << 3\ni2312     = ((_111 + i2284) << 18 + _10011001) << 7 + _1010111\ni2340     = ((i2312 << 9 + _11100001) << 8 + _11110101) << 9\ni2359     = ((_10011011 + i2340) << 8 + _10000011) << 8 + _1001101\ni2387     = ((i2359 << 8 + _100111) << 9 + _1100001) << 9\ni2409     = ((_10100011 + i2387) << 8 + _1000011) << 11 + _10001\ni2451     = ((i2409 << 18 + _1111001) << 9 + _111001) << 13\ni2469     = ((_11101011 + i2451) << 7 + _1011101) << 8 + _1001101\ni2491     = ((i2469 << 10 + _10000111) << 8 + _11001001) << 2\ni2515     = ((_11 + i2491) << 13 + _1011011) << 8 + _1010101\ni2544     = ((i2515 << 9 + _100011) << 9 + _111101) << 9\ni2568     = ((_10001 + i2544) << 14 + _10010011) << 7 + _1001101\ni2599     = ((i2568 << 3 + 1) << 18 + _110011) << 8\ni2618     = ((_110011 + i2599) << 10 + _10100111) << 6 + _11011\ni2648     = ((i2618 << 8 + _11101) << 12 + _10101111) << 8\ni2671     = ((_101101 + i2648) << 10 + _10101111) << 10 + _11100101\ni2696     = ((i2671 << 7 + _110111) << 10 + _10110001) << 6\ni2716     = ((_101101 + i2696) << 11 + _10001001) << 6 + _1001\ni2749     = ((i2716 << 9 + _11101) << 12 + _101011) << 10\ni2769     = ((_100001 + i2749) << 11 + _10001111) << 6 + _101001\ni2800     = ((i2769 << 12 + _10111101) << 8 + _10111011) << 9\ni2820     = ((_101101 + i2800) << 10 + _10101001) << 7 + _1110011\ni2849     = ((i2820 << 9 + _10000001) << 7 + _101011) << 11\ni2869     = ((_10110101 + i2849) << 8 + _1110101) << 9 + _10001101\ni2895     = ((i2869 << 8 + _11111001) << 8 + _1110101) << 8\ni2918     = ((_1111 + i2895) << 6 + _11) << 14 + _1011111\ni2939     = ((i2918 << 5 + _1111) << 11 + _1100101) << 3\ni2968     = ((_11 + i2939) << 13 + _1011011) << 13 + _10001001\ni2994     = ((i2968 << 8 + _10000111) << 8 + _10100001) << 8\ni3013     = ((_11001101 + i2994) << 8 + _1000111) << 8 + _1101111\ni3042     = ((i3013 << 11 + _10010001) << 8 + _1011001) << 8\ni3064     = ((_100001 + i3042) << 9 + _1101001) << 10 + _11010011\ni3092     = ((i3064 << 8 + _11110011) << 8 + _110111) << 10\ni3114     = ((_101111 + i3092) << 11 + _11100001) << 8 + _10000111\ni3140     = ((i3114 << 5 + _10111) << 12 + _10111111) << 7\ni3165     = ((_1110011 + i3140) << 10 + _11110111) << 12 + _10110011\ni3191     = ((i3165 << 8 + _10111111) << 7 + _1010011) << 9\ni3212     = ((_1100101 + i3191) << 9 + _10000001) << 9 + _10101101\ni3239     = ((i3212 << 6 + _11011) << 11 + _10111101) << 8\ni3258     = ((_11100001 + i3239) << 7 + _1111001) << 9 + _1110111\ni3287     = ((i3258 << 10 + _11111001) << 6 + _10011) << 11\ni3308     = ((_11110101 + i3287) << 7 + _100101) << 11 + _11101111\ni3344     = ((i3308 << 11 + _1100111) << 10 + _1110001) << 13\ni3365     = ((_1100011 + i3344) << 12 + _11110111) << 6 + _111011\ni3399     = ((i3365 << 12 + _10010001) << 7 + _1110101) << 13\ni3418     = ((_11100101 + i3399) << 7 + _1010111) << 9 + _1100111\ni3444     = ((i3418 << 9 + _11110101) << 9 + _1010011) << 6\ni3470     = ((_10001 + i3444) << 9 + _101101) << 14 + _1101001\ni3497     = ((i3470 << 9 + _10100101) << 4 + _101) << 12\ni3515     = ((_1010001 + i3497) << 3 + 1) << 12 + _11011\ni3551     = ((i3515 << 14 + _11011001) << 12 + _1101011) << 8\ni3570     = ((_1101111 + i3551) << 9 + _10110111) << 7 + _110001\ni3604     = ((i3570 << 10 + _11110111) << 8 + _11111111) << 14\ni3623     = ((_10101001 + i3604) << 9 + _11010001) << 7 + _1011011\ni3650     = ((i3623 << 9 + _10100111) << 4 + _1111) << 12\ni3676     = ((_100101 + i3650) << 15 + _10011111) << 8 + _11001011\ni3706     = ((i3676 << 9 + _11000101) << 8 + _11101111) << 11\ni3726     = ((_11101101 + i3706) << 6 + _100101) << 11 + _10001011\ni3753     = ((i3726 << 7 + _1010001) << 9 + _1011001) << 9\ni3771     = ((_10001001 + i3753) << 8 + _11101011) << 7 + _1000101\ni3804     = ((i3771 << 11 + _1010011) << 8 + _1001111) << 12\ni3825     = ((_1101111 + i3804) << 10 + _11111101) << 8 + _1100111\ni3852     = ((i3825 << 8 + _1000001) << 3 + _11) << 14\ni3867     = ((_10101101 + i3852) << 8 + _10011001) << 4 + _1011\ni3895     = ((i3867 << 14 + _11110011) << 8 + _10101001) << 4\ni3919     = ((_1101 + i3895) << 11 + _110111) << 10 + _11011111\ni3946     = ((i3919 << 9 + _10010011) << 6 + _10101) << 10\ni3967     = ((_1101001 + i3946) << 12 + _10011011) << 6 + _110111\ni3998     = ((i3967 << 10 + _11000111) << 6 + _11011) << 13\ni4017     = ((_11010111 + i3998) << 7 + _1001001) << 9 + _11100011\ni4047     = ((i4017 << 8 + _11101) << 11 + _11111011) << 9\ni4063     = ((_10111111 + i4047) << 8 + _10100011) << 5 + _1101\ni4093     = ((i4063 << 11 + _1110001) << 9 + _10111101) << 8\ni4113     = ((_10111011 + i4093) << 9 + _10001101) << 8 + _10100001\ni4143     = ((i4113 << 9 + _11111001) << 11 + _10111111) << 8\ni4168     = ((_11111001 + i4143) << 5 + _111) << 17 + _10001001\ni4191     = ((i4168 << 4 + _1001) << 12 + _1111001) << 5\ni4217     = ((_1001 + i4191) << 14 + _10111101) << 9 + _11111111\ni4245     = ((i4217 << 8 + _10101011) << 8 + _10101101) << 10\ni4267     = ((_101111 + i4245) << 11 + _110011) << 8 + _101101\ni4294     = ((i4267 << 9 + _1100001) << 9 + _10111001) << 7\ni4317     = ((_100001 + i4294) << 12 + _11110001) << 8 + _10101101\ni4345     = ((i4317 << 11 + _10111011) << 7 + _1111011) << 8\ni4366     = ((_1101101 + i4345) << 10 + _10100101) << 8 + _1110111\ni4396     = ((i4366 << 11 + _11100101) << 4 + _111) << 13\ni4418     = ((_1100011 + i4396) << 9 + _111111) << 10 + _10010011\ni4446     = ((i4418 << 9 + _11111011) << 8 + _1111111) << 9\ni4462     = ((_10010101 + i4446) << 8 + _10010101) << 5 + _10011\ni4495     = ((i4462 << 11 + _1101101) << 8 + _1000111) << 12\ni4514     = ((_11000001 + i4495) << 8 + _1101111) << 8 + _1100001\ni4543     = ((i4514 << 10 + _10011101) << 8 + _11000001) << 9\ni4562     = ((_1010011 + i4543) << 7 + _111111) << 9 + _101001\ni4589     = ((i4562 << 10 + _11010001) << 9 + _11110111) << 6\ni4609     = ((_111001 + i4589) << 4 + _11) << 13 + _1001001\ni4637     = ((i4609 << 8 + _1010001) << 9 + _11101011) << 9\ni4658     = ((_10100101 + i4637) << 10 + _11100101) << 8 + _10001\ni4686     = ((i4658 << 11 + _10011011) << 8 + _10001011) << 7\ni4706     = ((_1111111 + i4686) << 7 + _100011) << 10 + _1101011\ni4732     = ((i4706 << 9 + _10010001) << 5 + _10011) << 10\ni4760     = ((_10001 + i4732) << 17 + _10000101) << 8 + _11001111\ni4787     = ((i4760 << 7 + _1000111) << 9 + _11011011) << 9\ni4806     = ((_10011101 + i4787) << 6 + _101101) << 10 + _111001\ni4834     = ((i4806 << 10 + _11111) << 9 + _110011) << 7\ni4863     = ((_10101 + i4834) << 11 + _1111) << 15 + _11111011\ni4889     = ((i4863 << 7 + _1001101) << 6 + _11001) << 11\ni4914     = ((_11110111 + i4889) << 13 + _1111111) << 9 + _10000011\ni4942     = ((i4914 << 10 + _11100011) << 10 + _11010011) << 6\ni4959     = ((_111011 + i4942) << 10 + _11111111) << 4 + _1001\ni4991     = ((i4959 << 12 + _10111111) << 8 + _110001) << 10\ni5010     = ((_11001111 + i4991) << 6 + _111111) << 10 + _11011\ni5033     = ((i5010 << 11 + _11110001) << 7 + _1111111) << 3\ni5060     = ((_11 + i5033) << 13 + _1010001) << 11 + _11101111\ni5088     = ((i5060 << 6 + _101111) << 11 + _11010111) << 9\ni5109     = ((_10101101 + i5088) << 11 + _11011001) << 7 + _1011101\ni5134     = ((i5109 << 9 + _10101011) << 8 + _10010111) << 6\ni5161     = ((_100101 + i5134) << 12 + _11001101) << 12 + _10000011\ni5192     = ((i5161 << 7 + _1101011) << 10 + _10110011) << 12\ni5209     = ((_1100001 + i5192) << 9 + _1001001) << 5 + _1011\ni5243     = ((i5209 << 12 + _11100101) << 8 + _110111) << 12\ni5264     = ((_11111111 + i5243) << 9 + _11110001) << 9 + _11101101\ni5291     = ((i5264 << 9 + _11100111) << 7 + _1100101) << 9\ni5314     = ((_1101011 + i5291) << 4 + _11) << 16 + _11001011\ni5341     = ((i5314 << 7 + _1010101) << 10 + _10100111) << 8\ni5359     = ((_10100001 + i5341) << 4 + _1111) << 11 + _1011101\ni5388     = ((i5359 << 10 + _10111101) << 10 + _11111101) << 7\ni5406     = ((_1011011 + i5388) << 8 + _1011111) << 7 + _110101\ni5435     = ((i5406 << 10 + _10110001) << 8 + _11010011) << 9\ni5457     = ((_11011011 + i5435) << 10 + _11101101) << 9 + _1010011\ni5485     = ((i5457 << 3 + _11) << 13 + _1001111) << 10\ni5506     = ((_1010101 + i5485) << 9 + _10100011) << 9 + _11110111\ni5530     = ((i5506 << 8 + _11110011) << 7 + _1011011) << 7\ni5547     = ((_111011 + i5530) << 10 + _11010111) << 4 + _1011\ni5576     = ((i5547 << 12 + _1000101) << 11 + _11110111) << 4\ni5600     = ((_1001 + i5576) << 13 + _11001111) << 8 + _11001011\ni5631     = ((i5600 << 9 + _10010111) << 9 + _10101) << 11\ni5650     = ((_10011111 + i5631) << 9 + _11011101) << 7 + _1101011\ni5676     = ((i5650 << 7 + _100011) << 10 + _10111001) << 7\ni5697     = ((_1001011 + i5676) << 8 + _110011) << 10 + _11100011\ni5725     = ((i5697 << 8 + _11001001) << 9 + _10011011) << 9\ni5744     = ((_10100111 + i5725) << 8 + _11001011) << 8 + _10011001\ni5773     = ((i5744 << 7 + _11111) << 11 + _11110111) << 9\ni5793     = ((_11100101 + i5773) << 9 + _11010111) << 8 + _10011001\ni5821     = ((i5793 << 6 + _11101) << 12 + _11101011) << 8\ni5844     = ((_1111001 + i5821) << 9 + _10110111) << 11 + _10100001\ni5867     = ((i5844 << 9 + _10111001) << 8 + _11001001) << 4\ni5890     = ((_1011 + i5867) << 13 + _11110101) << 7 + _1001001\ni5917     = ((i5890 << 8 + _1011101) << 6 + _10111) << 11\ni5939     = ((_10010101 + i5917) << 9 + _1011101) << 10 + _11110101\ni5969     = ((i5939 << 5 + _1001) << 11 + _1110111) << 12\ni5985     = ((_10110011 + i5969) << 8 + _10110101) << 5 + _10111\ni6017     = ((i5985 << 12 + _11011111) << 10 + _11111011) << 8\ni6037     = ((_10101011 + i6017) << 8 + _11010001) << 9 + _10000011\ni6066     = ((i6037 << 9 + _11011111) << 11 + _1010111) << 7\ni6088     = ((_110001 + i6066) << 5 + _111) << 14 + _11011111\ni6112     = ((i6088 << 6 + _101101) << 9 + _1101101) << 7\ni6137     = ((_110111 + i6112) << 9 + _10001) << 13 + _11100011\ni6161     = ((i6137 << 8 + _10010001) << 5 + _11001) << 9\ni6182     = ((_101101 + i6161) << 10 + _1011101) << 8 + _1110101\ni6208     = ((i6182 << 10 + _10101001) << 11 + _10000101) << 3\ni6235     = ((_111 + i6208) << 10 + _10101) << 14 + _101001\ni6263     = ((i6235 << 10 + _1100001) << 9 + _10010011) << 7\ni6283     = ((_100111 + i6263) << 10 + _10111111) << 7 + _1111101\ni6314     = ((i6283 << 12 + _11101111) << 9 + _1111101) << 8\nreturn      _10111 + i6314\n"
  },
  {
    "path": "tools/addchain/gen_rust_addchain.py",
    "content": "#!/usr/bin/env python3\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import List, Tuple\n\nACC_DIR = Path(__file__).resolve().parent\nOUTPUT_FILE = (\n    ACC_DIR.parent\n    / \"garaga_rs\"\n    / \"src\"\n    / \"pairing\"\n    / \"final_exp_witness\"\n    / \"addchain_pow_generated.rs\"\n)\n\nCHAINS: List[Tuple[str, str, str]] = [\n    (\"bn254_exp.acc\", \"bn254\", \"pow_exp\"),\n    (\"bn254_exp0.acc\", \"bn254\", \"pow_exp0\"),\n    (\"bn254_r_m_d_inv.acc\", \"bn254\", \"pow_r_m_d_inv\"),\n    (\"bls12_381_h3_s.acc\", \"bls12_381\", \"pow_h3_s\"),\n    (\"bls12_381_e.acc\", \"bls12_381\", \"pow_e\"),\n]\n\n\n@dataclass(frozen=True)\nclass Var:\n    name: str\n\n\n@dataclass(frozen=True)\nclass Add:\n    left: \"Expr\"\n    right: \"Expr\"\n\n\n@dataclass(frozen=True)\nclass Shift:\n    value: \"Expr\"\n    amount: int\n\n\nExpr = Var | Add | Shift\n\n\n@dataclass(frozen=True)\nclass Token:\n    kind: str\n    value: str | int\n\n\ndef tokenize(expr: str) -> List[Token]:\n    tokens: List[Token] = []\n    i = 0\n    while i < len(expr):\n        ch = expr[i]\n        if ch.isspace():\n            i += 1\n            continue\n        if expr.startswith(\"<<\", i):\n            tokens.append(Token(\"SYMBOL\", \"<<\"))\n            i += 2\n            continue\n        if ch.isdigit():\n            j = i + 1\n            while j < len(expr) and expr[j].isdigit():\n                j += 1\n            tokens.append(Token(\"NUMBER\", int(expr[i:j])))\n            i = j\n            continue\n        if ch.isalpha() or ch == \"_\":\n            j = i + 1\n            while j < len(expr) and (expr[j].isalnum() or expr[j] == \"_\"):\n                j += 1\n            tokens.append(Token(\"NAME\", expr[i:j]))\n            i = j\n            continue\n        if ch in \"+*()\":\n            tokens.append(Token(\"SYMBOL\", ch))\n            i += 1\n            continue\n        raise ValueError(f\"Unexpected character {ch!r} in {expr!r}\")\n    return tokens\n\n\nclass Parser:\n    def __init__(self, tokens: List[Token]) -> None:\n        self.tokens = tokens\n        self.pos = 0\n\n    def _peek(self) -> Token | None:\n        if self.pos >= len(self.tokens):\n            return None\n        return self.tokens[self.pos]\n\n    def _peek_next(self) -> Token | None:\n        if self.pos + 1 >= len(self.tokens):\n            return None\n        return self.tokens[self.pos + 1]\n\n    def _match(self, kind: str, value: str | None = None) -> bool:\n        tok = self._peek()\n        if tok is None or tok.kind != kind:\n            return False\n        if value is not None and tok.value != value:\n            return False\n        self.pos += 1\n        return True\n\n    def _expect(self, kind: str, value: str | None = None) -> Token:\n        tok = self._peek()\n        if (\n            tok is None\n            or tok.kind != kind\n            or (value is not None and tok.value != value)\n        ):\n            raise ValueError(\n                f\"Expected {kind} {value or ''} at {self.pos}, got {tok!r}\"\n            )\n        self.pos += 1\n        return tok\n\n    def parse(self) -> Expr:\n        expr = self._parse_expr()\n        if self._peek() is not None:\n            raise ValueError(f\"Unexpected trailing tokens at {self.pos}\")\n        return expr\n\n    def _parse_expr(self) -> Expr:\n        expr = self._parse_chain()\n        while self._match(\"SYMBOL\", \"+\"):\n            rhs = self._parse_chain()\n            expr = Add(expr, rhs)\n        return expr\n\n    def _parse_chain(self) -> Expr:\n        expr = self._parse_term()\n        while self._match(\"SYMBOL\", \"<<\"):\n            amount = self._expect(\"NUMBER\").value\n            if not isinstance(amount, int):\n                raise ValueError(\"Shift amount must be integer\")\n            expr = Shift(expr, amount)\n            if self._match(\"SYMBOL\", \"+\"):\n                rhs = self._parse_term()\n                expr = Add(expr, rhs)\n        return expr\n\n    def _parse_term(self) -> Expr:\n        tok = self._peek()\n        if tok and tok.kind == \"NUMBER\" and tok.value == 2:\n            if self._peek_next() and self._peek_next().kind == \"SYMBOL\":\n                if self._peek_next().value == \"*\":\n                    self._expect(\"NUMBER\", None)\n                    self._expect(\"SYMBOL\", \"*\")\n                    atom = self._parse_atom()\n                    return Shift(atom, 1)\n        return self._parse_atom()\n\n    def _parse_atom(self) -> Expr:\n        if self._match(\"SYMBOL\", \"(\"):\n            expr = self._parse_expr()\n            self._expect(\"SYMBOL\", \")\")\n            return expr\n        tok = self._peek()\n        if tok is None:\n            raise ValueError(\"Unexpected end of expression\")\n        if tok.kind == \"NAME\":\n            self.pos += 1\n            return Var(str(tok.value))\n        if tok.kind == \"NUMBER\":\n            self.pos += 1\n            if tok.value != 1:\n                raise ValueError(f\"Unsupported literal {tok.value}\")\n            return Var(\"1\")\n        raise ValueError(f\"Unexpected token {tok!r}\")\n\n\ndef parse_expr(expr: str) -> Expr:\n    tokens = tokenize(expr)\n    return Parser(tokens).parse()\n\n\ndef load_chain(path: Path) -> Tuple[List[Tuple[str, Expr]], Expr]:\n    defs: List[Tuple[str, Expr]] = []\n    return_expr: Expr | None = None\n    for raw_line in path.read_text(encoding=\"utf-8\").splitlines():\n        line = raw_line.strip()\n        if not line:\n            continue\n        if line.startswith(\"return\"):\n            expr = line[len(\"return\") :].strip()\n            return_expr = parse_expr(expr)\n            continue\n        name, expr = line.split(\"=\", 1)\n        defs.append((name.strip(), parse_expr(expr.strip())))\n    if return_expr is None:\n        raise ValueError(f\"{path} missing return expression\")\n    return defs, return_expr\n\n\nclass Emitter:\n    def __init__(self) -> None:\n        self.temp_counter = 0\n\n    def _temp(self) -> str:\n        name = f\"t{self.temp_counter}\"\n        self.temp_counter += 1\n        return name\n\n    def emit_expr(self, expr: Expr, lines: List[str]) -> str:\n        if isinstance(expr, Var):\n            if expr.name == \"1\":\n                return \"base\"\n            return expr.name\n        if isinstance(expr, Add):\n            left = self.emit_expr(expr.left, lines)\n            right = self.emit_expr(expr.right, lines)\n            temp = self._temp()\n            lines.append(f\"let {temp} = &{left} * &{right};\")\n            return temp\n        if isinstance(expr, Shift):\n            value = self.emit_expr(expr.value, lines)\n            temp = self._temp()\n            lines.append(f\"let {temp} = square_n(&{value}, {expr.amount});\")\n            return temp\n        raise TypeError(f\"Unknown expr type {expr}\")\n\n    def emit_assignment(self, name: str, expr: Expr, indent: str) -> str:\n        self.temp_counter = 0\n        lines: List[str] = []\n        result = self.emit_expr(expr, lines)\n        if not lines:\n            return f\"{indent}let {name} = {result}.clone();\"\n        lines.append(result)\n        inner = \"\\n\".join(f\"{indent}    {line}\" for line in lines)\n        return f\"{indent}let {name} = {{\\n{inner}\\n{indent}}};\"\n\n\ndef emit_chain_function(name: str, defs: List[Tuple[str, Expr]], ret: Expr) -> str:\n    emitter = Emitter()\n    indent = \"        \"\n    body_lines: List[str] = [f\"{indent}let base = base.clone();\"]\n    for var, expr in defs:\n        body_lines.append(emitter.emit_assignment(var, expr, indent))\n    body_lines.append(emitter.emit_assignment(\"result\", ret, indent))\n    body_lines.append(f\"{indent}result\")\n    return \"\\n\".join(body_lines)\n\n\ndef main() -> int:\n    header_lines = [\n        \"// AUTO-GENERATED: DO NOT EDIT BY HAND.\",\n        \"// Generated by tools/addchain/gen_rust_addchain.py from:\",\n    ]\n    for acc_name, _, _ in CHAINS:\n        header_lines.append(f\"//   - tools/addchain/{acc_name}\")\n    header = \"\\n\".join(header_lines)\n\n    blocks: List[str] = [\n        header,\n        \"\",\n        \"use lambdaworks_math::field::element::FieldElement;\",\n        \"use lambdaworks_math::field::traits::IsField;\",\n        \"\",\n        \"fn square_n<F: IsField>(x: &FieldElement<F>, n: usize) -> FieldElement<F> {\",\n        \"    let mut t = x.clone();\",\n        \"    for _ in 0..n {\",\n        \"        t = t.square();\",\n        \"    }\",\n        \"    t\",\n        \"}\",\n        \"\",\n        \"pub mod bn254 {\",\n        \"    use super::square_n;\",\n        \"    use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree12ExtensionField;\",\n        \"    use lambdaworks_math::field::element::FieldElement;\",\n        \"\",\n    ]\n\n    for acc_name, module, func_name in CHAINS:\n        acc_path = ACC_DIR / acc_name\n        defs, ret = load_chain(acc_path)\n        if module != \"bn254\":\n            continue\n        blocks.append(f\"    /// Generated from tools/addchain/{acc_name}\")\n        blocks.append(\n            f\"    pub fn {func_name}(base: &FieldElement<Degree12ExtensionField>) -> FieldElement<Degree12ExtensionField> {{\"\n        )\n        blocks.append(emit_chain_function(func_name, defs, ret))\n        blocks.append(\"    }\")\n        blocks.append(\"\")\n\n    blocks.append(\"}\")\n    blocks.append(\"\")\n    blocks.append(\"pub mod bls12_381 {\")\n    blocks.append(\"    use super::square_n;\")\n    blocks.append(\n        \"    use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree12ExtensionField;\"\n    )\n    blocks.append(\"    use lambdaworks_math::field::element::FieldElement;\")\n    blocks.append(\"\")\n\n    for acc_name, module, func_name in CHAINS:\n        acc_path = ACC_DIR / acc_name\n        defs, ret = load_chain(acc_path)\n        if module != \"bls12_381\":\n            continue\n        blocks.append(f\"    /// Generated from tools/addchain/{acc_name}\")\n        blocks.append(\n            f\"    pub fn {func_name}(base: &FieldElement<Degree12ExtensionField>) -> FieldElement<Degree12ExtensionField> {{\"\n        )\n        blocks.append(emit_chain_function(func_name, defs, ret))\n        blocks.append(\"    }\")\n        blocks.append(\"\")\n\n    blocks.append(\"}\")\n    blocks.append(\"\")\n\n    OUTPUT_FILE.write_text(\"\\n\".join(blocks), encoding=\"utf-8\")\n    return 0\n\n\nif __name__ == \"__main__\":\n    raise SystemExit(main())\n"
  },
  {
    "path": "tools/garaga_rs/Cargo.toml",
    "content": "[package]\nname = \"garaga_rs\"\nversion = \"1.1.0\"\nedition = \"2021\"\n\n# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html\n[lib]\nname = \"garaga_rs\"\ncrate-type = [\"cdylib\", \"rlib\"]\n\n[features]\n# By default, we don't include any bindings - pure Rust library mode\n# This allows users to import garaga_rs without pulling in pyo3 or wasm-bindgen\ndefault = []\n# Enable Python bindings (for maturin builds)\npython = [\"dep:pyo3\"]\n# Enable WASM bindings (for wasm-pack builds)\nwasm = [\"dep:wasm-bindgen\", \"dep:js-sys\"]\n\n[dev-dependencies]\n#proptest = \"1.6.0\"\n#proptest-arbitrary-interop = \"0.1\"\ntest-strategy = \"0.4.0\"\n\n# WASM-specific dev dependencies - only included when target is wasm32\n[target.'cfg(target_arch = \"wasm32\")'.dev-dependencies]\nwasm-bindgen-test = \"0.3\"\n\n# Platform-specific optional dependencies:\n# These ensure the right bindings are available only when needed and on the right platform\n\n# Python bindings - only available when:\n# 1. Not on wasm32 target AND\n# 2. \"python\" feature is enabled (e.g., when building with maturin)\n[target.'cfg(not(target_arch = \"wasm32\"))'.dependencies]\npyo3 = { version = \"0.28\", features = [\"extension-module\", \"num-bigint\"], optional = true }\n\n# WASM bindings - only available when:\n# 1. On wasm32 target AND\n# 2. \"wasm\" feature is enabled (e.g., when building with wasm-pack)\n[target.'cfg(target_arch = \"wasm32\")'.dependencies]\nwasm-bindgen = { version = \"0.2\", optional = true }\njs-sys = { version = \"0.3\", optional = true }\n\n[dependencies]\ngetrandom = { version = \"0.3.1\", features = [\"wasm_js\"] }\nnum-bigint = \"0.4\"\nnum-integer = \"0.1\"\nnum-traits = \"0.2\"\nhex = \"0.4\"\nsha2 = \"0.10\"\nsha3 = \"0.10\"\nlazy_static = \"1.4\"\nrand = \"0.9.0\"\nstarknet-types-core = { version = \"1.0\", default-features = false, features = [\"curve\"] }\nlambdaworks-crypto = { git = \"https://github.com/lambdaclass/lambdaworks.git\", rev=\"be4a329\" }\nlambdaworks-math = { git = \"https://github.com/lambdaclass/lambdaworks.git\", rev=\"be4a329\" }\narbitrary = \"1.0\"\nthiserror = \"2.0.11\"\nitertools = \"0.14\"\nrayon = \"1.8\"\n"
  },
  {
    "path": "tools/garaga_rs/src/algebra/extf_mul.rs",
    "content": "use crate::algebra::polynomial::{pad_with_zero_coefficients_to_length, Polynomial};\nuse crate::definitions::{get_irreducible_poly, CurveParamsProvider};\nuse lambdaworks_math::field::element::FieldElement;\nuse lambdaworks_math::field::traits::{IsField, IsPrimeField, IsSubFieldOf};\n\n// Returns (Q(X), R(X)) such that Π(Pi)(X) = Q(X) * P_irr(X) + R(X), for a given curve and extension degree.\n// R(X) is the result of the multiplication in the extension field.\n// Q(X) is used for verification.\npub fn nondeterministic_extension_field_mul_divmod<F: IsPrimeField + CurveParamsProvider<F>>(\n    ext_degree: usize,\n    ps: Vec<Polynomial<F>>,\n) -> (Polynomial<F>, Polynomial<F>) {\n    let mut z_poly = Polynomial::one();\n    for poly in ps {\n        z_poly = z_poly.mul_with_ref(&poly);\n    }\n\n    let p_irr = get_irreducible_poly(ext_degree);\n\n    let (z_polyq, mut z_polyr) = z_poly.divmod(&p_irr);\n    assert!(z_polyr.coefficients.len() <= ext_degree);\n\n    // Extend polynomial with 0 coefficients to match the expected length.\n    if z_polyr.coefficients.len() < ext_degree {\n        pad_with_zero_coefficients_to_length(&mut z_polyr, ext_degree);\n    }\n\n    (z_polyq, z_polyr)\n}\n\npub fn nondeterministic_extension_field_div<F, E2, E6, E12>(\n    x: Polynomial<F>,\n    y: Polynomial<F>,\n    ext_degree: usize,\n) -> Polynomial<F>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n{\n    let a = direct_to_tower(&x.get_coefficients_ext_degree(ext_degree), ext_degree);\n    let b = direct_to_tower(&y.get_coefficients_ext_degree(ext_degree), ext_degree);\n    let div = tower_div(&a, &b, ext_degree);\n    Polynomial::new(tower_to_direct(&div, ext_degree))\n}\n\npub fn tower_to_direct<F>(x: &[FieldElement<F>], ext_degree: usize) -> Vec<FieldElement<F>>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n{\n    assert_eq!(x.len(), ext_degree);\n    let nr_a0 = &FieldElement::<F>::from(F::get_curve_params().nr_a0);\n    match ext_degree {\n        2 => x.to_vec(),\n        6 => vec![\n            &x[0] - nr_a0 * &x[1],\n            &x[2] - nr_a0 * &x[3],\n            &x[4] - nr_a0 * &x[5],\n            x[1].clone(),\n            x[3].clone(),\n            x[5].clone(),\n        ],\n        12 => vec![\n            &x[0] - nr_a0 * &x[1],\n            &x[6] - nr_a0 * &x[7],\n            &x[2] - nr_a0 * &x[3],\n            &x[8] - nr_a0 * &x[9],\n            &x[4] - nr_a0 * &x[5],\n            &x[10] - nr_a0 * &x[11],\n            x[1].clone(),\n            x[7].clone(),\n            x[3].clone(),\n            x[9].clone(),\n            x[5].clone(),\n            x[11].clone(),\n        ],\n        _ => panic!(\"Unsupported extension degree\"),\n    }\n}\n\npub fn direct_to_tower<F>(x: &[FieldElement<F>], ext_degree: usize) -> Vec<FieldElement<F>>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n{\n    assert_eq!(x.len(), ext_degree);\n    let nr_a0 = &FieldElement::<F>::from(F::get_curve_params().nr_a0);\n    match ext_degree {\n        2 => x.to_vec(),\n        6 => vec![\n            &x[0] + nr_a0 * &x[3],\n            x[3].clone(),\n            &x[1] + nr_a0 * &x[4],\n            x[4].clone(),\n            &x[2] + nr_a0 * &x[5],\n            x[5].clone(),\n        ],\n        12 => vec![\n            &x[0] + nr_a0 * &x[6],\n            x[6].clone(),\n            &x[2] + nr_a0 * &x[8],\n            x[8].clone(),\n            &x[4] + nr_a0 * &x[10],\n            x[10].clone(),\n            &x[1] + nr_a0 * &x[7],\n            x[7].clone(),\n            &x[3] + nr_a0 * &x[9],\n            x[9].clone(),\n            &x[5] + nr_a0 * &x[11],\n            x[11].clone(),\n        ],\n        _ => panic!(\"Unsupported extension degree\"),\n    }\n}\n\npub fn tower_mul<F, E2, E6, E12>(\n    a: &[FieldElement<F>],\n    b: &[FieldElement<F>],\n    ext_degree: usize,\n) -> Vec<FieldElement<F>>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n{\n    assert_eq!(a.len(), ext_degree);\n    assert_eq!(b.len(), ext_degree);\n    match ext_degree {\n        2 => {\n            let a = to_e2(a.to_vec().try_into().unwrap());\n            let b = to_e2(b.to_vec().try_into().unwrap());\n            let c = a * b;\n            from_e2(c).to_vec()\n        }\n        6 => {\n            let a = to_e6(a.to_vec().try_into().unwrap());\n            let b = to_e6(b.to_vec().try_into().unwrap());\n            let c = a * b;\n            from_e6(c).to_vec()\n        }\n        12 => {\n            let a = to_e12(a.to_vec().try_into().unwrap());\n            let b = to_e12(b.to_vec().try_into().unwrap());\n            let c = a * b;\n            from_e12(c).to_vec()\n        }\n        _ => panic!(\"Unsupported extension degree\"),\n    }\n}\n\npub fn tower_div<F, E2, E6, E12>(\n    a: &[FieldElement<F>],\n    b: &[FieldElement<F>],\n    ext_degree: usize,\n) -> Vec<FieldElement<F>>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n{\n    assert_eq!(a.len(), ext_degree);\n    assert_eq!(b.len(), ext_degree);\n    match ext_degree {\n        2 => {\n            let a = to_e2(a.to_vec().try_into().unwrap());\n            let b = to_e2(b.to_vec().try_into().unwrap());\n            let c = (a / b).unwrap();\n            from_e2(c).to_vec()\n        }\n        6 => {\n            let a = to_e6(a.to_vec().try_into().unwrap());\n            let b = to_e6(b.to_vec().try_into().unwrap());\n            let c = (a / b).unwrap();\n            from_e6(c).to_vec()\n        }\n        12 => {\n            let a = to_e12(a.to_vec().try_into().unwrap());\n            let b = to_e12(b.to_vec().try_into().unwrap());\n            let c = (a / b).unwrap();\n            from_e12(c).to_vec()\n        }\n        _ => panic!(\"Unsupported extension degree\"),\n    }\n}\n\npub fn tower_inv<F, E2, E6, E12>(a: &[FieldElement<F>], ext_degree: usize) -> Vec<FieldElement<F>>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n{\n    let mut one = vec![FieldElement::from(0); ext_degree];\n    one[0] = FieldElement::from(1);\n    tower_div(&one, a, ext_degree)\n}\n\npub fn to_e2<F, E2>(v: [FieldElement<F>; 2]) -> FieldElement<E2>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    FieldElement::new(v)\n}\n\npub fn to_e6<F, E2, E6>(v: [FieldElement<F>; 6]) -> FieldElement<E6>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]>,\n{\n    let [v0, v1, v2, v3, v4, v5] = v;\n    FieldElement::new([to_e2([v0, v1]), to_e2([v2, v3]), to_e2([v4, v5])])\n}\n\npub fn to_e12<F, E2, E6, E12>(v: [FieldElement<F>; 12]) -> FieldElement<E12>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n{\n    let [v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11] = v;\n    FieldElement::new([\n        to_e6([v0, v1, v2, v3, v4, v5]),\n        to_e6([v6, v7, v8, v9, v10, v11]),\n    ])\n}\n\npub fn from_e2<F, E2>(v: FieldElement<E2>) -> [FieldElement<F>; 2]\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let [v0, v1] = v.to_subfield_vec().try_into().unwrap();\n    [v0, v1]\n}\n\npub fn from_e6<F, E2, E6>(v: FieldElement<E6>) -> [FieldElement<F>; 6]\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]>,\n{\n    let [a1, a2, a3] = v.to_subfield_vec().try_into().unwrap();\n    let [v0, v1] = from_e2(a1);\n    let [v2, v3] = from_e2(a2);\n    let [v4, v5] = from_e2(a3);\n    [v0, v1, v2, v3, v4, v5]\n}\n\npub fn from_e12<F, E2, E6, E12>(v: FieldElement<E12>) -> [FieldElement<F>; 12]\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n{\n    let [a0, a1] = v.to_subfield_vec().try_into().unwrap();\n    let [v0, v1, v2, v3, v4, v5] = from_e6(a0);\n    let [v6, v7, v8, v9, v10, v11] = from_e6(a1);\n    [v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11]\n}\n\npub fn e2_conjugate<F, E2>(a: FieldElement<E2>) -> FieldElement<E2>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let [x, y] = from_e2(a);\n    to_e2([x, -y])\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::definitions::{BLS12381PrimeField, BN254PrimeField};\n\n    #[test]\n    fn test_nondeterministic_extension_field_mul_divmod_1() {\n        let ps = [\n            [\n                \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n            ],\n            [\n                \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n            ],\n            [\n                \"0x1\",\n                \"0x3049ed443e0ee79060270c9094ac6390a5c1ab3db65328a47174c6c33f6bd5f2\",\n                \"0x0\",\n                \"0xa279a60d390f263fa2b23afda6a2160c7af52ea6fdddb7ffe26ded0e216c821\",\n                \"0x0\",\n                \"0x0\",\n                \"0x0\",\n                \"0x146bccf3dc47e8eedf574326c5188ea8e4978a568116c9aa5b8517cdeb0e1f38\",\n                \"0x0\",\n                \"0x10b71d55b795eb0c1590286e48c412e3434b0def1afddfc8840541b6936825fd\",\n                \"0x0\",\n                \"0x0\",\n            ],\n            [\n                \"0x1\",\n                \"0x10b80d23f4e55970de219c8bb6cc99af9ca48837a7da389ff6e02693c8912bf3\",\n                \"0x0\",\n                \"0x1999e3b5911b71ef05b218f5be987ba6f43afb6a702ffca89c7a6643b411046f\",\n                \"0x0\",\n                \"0x0\",\n                \"0x0\",\n                \"0x2a00794e593076aab0ec5e6283a9ed0ddbe6ef97af88861febd351722d50802a\",\n                \"0x0\",\n                \"0x22583e5a131ce5504fbb720b2081781441eeb10978efac409e27787d1fa359b6\",\n                \"0x0\",\n                \"0x0\",\n            ],\n        ];\n        let q = [\n            \"0xe894c747efef08ab122e832492446abf3359cf28786e81ab3a81a74fce2c75b\",\n            \"0x0\",\n            \"0x221a77eeae1aacc77e771d8440e698d3b8d2447bb8de2a046cf8c063f7523fb7\",\n            \"0x0\",\n            \"0x1d9393fe1dfd5bf8174a7b2086cdc6288de8ee5409946e58d5385d342633aa56\",\n            \"0x0\",\n            \"0x122377527927c40e63ddc4c9ef6a51a864d1e6575602045f81ddf7ae83afc4c3\",\n        ];\n        let r = [\n            \"0x11d12be7502f97a642a86eb73802fe0fe4772283c9e66f3d535534c22390e0ca\",\n            \"0x109dabf551c2a0d785f86365c9f7a4e2aae4c8e3f5bb96b72c3461402f80049e\",\n            \"0x15e06e6b765f21da4c21d50705a9bf0f72ba0283f93e75a896235fa107d4ca4d\",\n            \"0x23c17e1664ac6452ffdd3ca599029d07bbea4e54e00dd8289aa145149627cc90\",\n            \"0x751d37ad50cc00d6245f08ca81ce16f9a3714c3efe87c95ae8e132234b5dd07\",\n            \"0x0\",\n            \"0x1535e3c0e51be5f14093e8501425031896dfb26ec8759e3409e44e94d81e17cf\",\n            \"0xe07f7cf5446bf6fd7f35bd2c741235928fd0f5cc82d853d0b37dd293fe1a21b\",\n            \"0x2eae2d9b2332fb1f1c3617826ac6ede574d04ed01692a36b9743fc604b3f3bf\",\n            \"0x2ab0d3ce9813032acfb54c2e7c43299edb854672b7bc17be60c2e1cda8e826c\",\n            \"0x1f316d8807400efe60a15b7e5311a9031439eb344c0d84fb80044f8786d59de4\",\n            \"0x0\",\n        ];\n        let ps = ps\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xq = q\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xr = r\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let (q, r) = nondeterministic_extension_field_mul_divmod(12, ps);\n        let q = q.coefficients;\n        let r = r.coefficients;\n        assert_eq!(q, xq);\n        assert_eq!(r, xr);\n    }\n\n    #[test]\n    fn test_nondeterministic_extension_field_mul_divmod_2() {\n        let ps = [\n            [\n                \"0x1d7a9ffbbe137d697794dbccbd7925ea98507cf8d4445d3e89123811ede12825\",\n                \"0x1f45aa2ee73f15e275e5c1fc0ff08be0981a61d8e7642301653a6307c7467811\",\n                \"0x2446d99f276e4c8bc63d81e8d0c1e37c901a5a569865533968e39b5083fc576e\",\n                \"0x223bd50b771fcaa905131a5f04c3c634c9df344731b5aada49be919aaa447cc7\",\n                \"0x24cfef2958a7c9c4d7ddfacdd59750105dcc37f6aefbf4a9ce706bc36252c47\",\n                \"0x3a974db52b274684955cb370b0ac66e3e295ea6e9789fb7259c294210f7720e\",\n                \"0x160b7346ec9fdd9841feb355a44845dc30c2a9ae3fb8266ad697b531de5e2fb6\",\n                \"0xe46af84e1cbba805f204fa5ce1c9a99c79799110a56b5d534495a358f9c739f\",\n                \"0x1f2b5709d0d7c9499b9524e9708ac412d3fa05fea9b51192113e131bd5572a21\",\n                \"0x8a75eef583ffc3b0f690cd9eab121b1f329194c1052a86d50224b92838c5d76\",\n                \"0xef3a64570d17038de7ec74175c125ac7e8780509764f07572ce9593878da9fb\",\n                \"0x2a6290607745b58a7b87bc78053320664e06d12b35825f15893ad52a39f54331\",\n            ],\n            [\n                \"0x14156ca1853095df27f3cb7c50eca75e794d2f14195c16df4a0f8f9dcb48bee9\",\n                \"0xdc2a20a6107d4c49fed6b2018946bcc2a8dad06f01d099a6df0a4a55ed21b59\",\n                \"0x14260c5afb0b1148ed80f8339cf9e06ff04257cb6c1817c4efa721fc98f69503\",\n                \"0xafe8a09df07bf3dffefe512eb9448ef436dd090f98323135baab8ae3c766c60\",\n                \"0x114692950f53d4f707bb02cc2b5dc98aff5936811707d6579371dae20368253c\",\n                \"0x2dd3fca72591963149646f1e106dc0ee917551f5a9da397fe12d4a3939ce650c\",\n                \"0x1750bd450b85cbd62ea3f1b228beff5fd364a127d6054be99a9248497b82062a\",\n                \"0x1248cfad33a2147726169d3ce55db12ecafd74bc4b83377c168d89b919386546\",\n                \"0x28d156bac04e64938816b055888399c99a954b82724e5f5589d549a709b2b5ef\",\n                \"0x39e1ab153bd709556afece475580f453f9126f256fbb49c235bc75082f5f26e\",\n                \"0x14853f940bf5c557c7f558d3e74e6617d7f08b54fd83597fed1d7e7b9d09e04\",\n                \"0xaa480d613601947fee14a3ce2b7af4e1872fe49ae3473546aa01a618b78b125\",\n            ],\n        ];\n        let q = [\n            \"0x13e8e196ed7970229c16369f6f62a54fe9848ec0abbb56e77355358805db92a6\",\n            \"0x29aa20be8afc3104b3211fb1c2636e3291bca41e1276bdbbb485917fae34c150\",\n            \"0xcbdf387c0036815f944eeedb8a3ed8babb406326444cbed0df3e47fc7a3f440\",\n            \"0xcc614e3d877550dc9bb19f8dfdc513f2f8fed01d3a180a2a9e475c9a29f6d96\",\n            \"0x1a6e474f0a5394b39bd15f2390e0cfa64391cb4ffc5d435a63028ac3c744d064\",\n            \"0x8fc0b38f1129ab34ebd5a5888f0711adecaecc7aa5312cc62508d51da03aa1e\",\n            \"0xff9b26cf44e068601c663a62662f0ef698166a3410d4f36a68b2e46800daa6e\",\n            \"0xf4ec161da901a5ab3f6088ede93acdbf15f0c18b653b9f7146d132c6d4111c5\",\n            \"0x1843faa07a91bed2c949f1b3f126e0ae88d429bf7d37b5e00696b22be53ac607\",\n            \"0x1c151df931008732415af45f4616affed9e0e64976e66cc5e2e57c799ddfa646\",\n            \"0x1526c80d7045ccb0ae04a7cf1de7a2519ad52f885c7b9acb7bed0d027459433\",\n        ];\n        let r = [\n            \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n        ];\n        let ps = ps\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xq = q\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xr = r\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let (q, r) = nondeterministic_extension_field_mul_divmod(12, ps);\n        let q = q.coefficients;\n        let r = r.coefficients;\n        assert_eq!(q, xq);\n        assert_eq!(r, xr);\n    }\n\n    #[test]\n    fn test_nondeterministic_extension_field_mul_divmod_3() {\n        let ps = [\n            [\"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\"],\n            [\"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\"],\n            [\"0x183a80ffaffb035552f419948ba0d8b0148bb90e6bcbb072eece2a095bc3205571aa45062fb615d5204db9b0c13f16e4\", \"0x0\", \"0x141ce6d849b3b3ffd366962219920de592e0ea7888507ff651543f3d3a8c57b5778f9afcad1c00079fa2fc01d02a31de\", \"0x1\", \"0x0\", \"0x0\", \"0x12b7ea026b36040c682213ecc6663b4f916612568d3ceaa4876f9acffd4c8fb349a27daa5d44ff45bb92b5007dd00a56\", \"0x0\", \"0xead53480ba83b742644a3d8bfd432993007ed23c1a85090c6434e1ddd4dc8f16f8f6673fda2e538f5e9e9599b6062bc\", \"0x0\", \"0x0\", \"0x0\"],\n            [\"0x9cbaaa39d75e767a38004c5e4e834cda92fe4fff0759cdfb078c61cff1349b3342fb6a19dc7ce19412c60791e787332\", \"0x0\", \"0x16422cfd0179e176be2c6e27226f61c162e6b3a7051f9e20ca33a1c7e99bd8cd5877aff6a82f042819707e2978027054\", \"0x1\", \"0x0\", \"0x0\", \"0x12138c3d7561ca85c9104207590388d773edbd1c46ecd9a2c1361c65ba39f487ff39a9d5edbbd942ee1bd5aae5fba357\", \"0x0\", \"0x709ac70c47538c5c9b0049aed2d39ed130b9053cd39a2c8534dfa6cb7ae9a6e13d78c0d5c7382ae146e085e91eeb43c\", \"0x0\", \"0x0\", \"0x0\"],\n            [\"0x9f80115619172e4eaaf3a62b7d000cc462cff591e011ff8c39ec0595d8b263320711ed10ee74568947c52ac80f129bc\", \"0x0\", \"0x31679196cf9cc8a93705f2bb6cbcbb0e7b0196b962472706b416552474f667dd33b2d50a9800ac99110e7750e1d1618\", \"0x1\", \"0x0\", \"0x0\", \"0x4569b6e40372c16710ab2e2f85b80033cfab50f70f991c76de84083a53f47d14e26fa59b9a8fc74f8b95bcefb1f92fb\", \"0x0\", \"0x11efd369477790f94456f4fc5baea8c480249c8f56623b31e444435bd1e8b39e757ca81b8d19b958d6b425a17c15ec7f\", \"0x0\", \"0x0\", \"0x0\"],\n            [\"0x142105c43e7e33dbcc983f7b693970ae4ea601a5c627832343932cf6f182d6ef712a0d4b0cfbfb92da1e505c39cf5bc0\", \"0x0\", \"0x83e650c23da50b57d95f2ef421a27900ff6e0f98249dd136de37c6c48fa04f830455843af17f7b00406d3ee2534e65d\", \"0x1\", \"0x0\", \"0x0\", \"0x15ad49314f1e2bbf517f7d37bb828abdedefb77d9e7762477bac0436451e74e9131399b84307d62da5495a0f3708b9cb\", \"0x0\", \"0x195ed72d7f572bb7dc0a78b45f824d75e155eb0dc7430f1544193109d75e4dbf5167d465a21b346c1ece84d7938e7107\", \"0x0\", \"0x0\", \"0x0\"],\n        ];\n        let q = [\"0x15b1a92444c003fd30d2759337ee1d2b521d89eb3e8d5f9c89def701a70b9e590d409ee54018189157fb5b83fbc6e281\", \"0x3b383b5cd40d3b067def58412145c9dabdd2b59b7cd1cf07f832e97d05219ca794c099ba76477110a811e0a886fb833\", \"0xadbf541db6df55a263938da2e0ae43b6c9217f748fc8d2e668133cc88eec729e76b65fc361a4b58266ae0c46b5d3b7e\", \"0x19da2ede02f3dc475518f4df24b7478c26ef3e18edce534e307f24161b09dd2f287fe8a27c63bd9f145b2a3f782eb0d1\", \"0x13f314681f4f7af49a1de550de5c171c36fa385ab2c0ecdbc73aee60cf8374ab43795b72d38f3e3bfe70505932163789\", \"0x12426b3d3990b9b961f1686e6274f1b97fbd3646512c80a0e5ee05c2ff5193709e760abbb6c676531078a768bedd7124\", \"0x10c8f0fec5ead5f4d5d7bb706d5e3da8f609a48a4da086ee82bc3b9d27ef5e52af16c8b309cf88c0d433985fc56b1e42\", \"0x5cb67da1dd940f40ecffb3f4683b6f6253fc005fbd345d5fa74ed9b0c33de90b875699040e7a4298059eb58baced6bf\", \"0xecffb82dcfdf5bdf438503c919684f0cfe228611387f6b404c7fdd0d0a4c1f2615e65450f4cc416f27038f083bc5e9c\", \"0x44b8912d0d9311ae5eb2205969a85d426b3d6c5d58cd3db35ffe118abb24510c503b91a0c476274832acc12327506d8\", \"0x151de551fd53045ea8127ed3887126378157871289970127638dcf0214f26b2c946216c5e4418a0b5b8e19e14984714b\", \"0x1b9bcc051f541e88e9377684505f5ded93b7d350b427ec2ba79970220ad2f6f781be5559762b1789038fe7c8f1d8fd7\", \"0x539e9ef4cfe0c1c409c6b724f8420997dcd0d0e0b8c12d44a883d8188fc1f8802753128bcb3533c154c449e4986e2d7\", \"0x10e1aafbcaeb68abb0fa69263c5a78ffea85c3fcee39a9ea478f3e7953407c81d32bb8808bde55c8c2b4fd37a4aeea73\", \"0x17b51d4ffaf4e7cb1b66757d4658959ee4492146684bac3062740594c753d58362c79d57ba6a46323404ea6219f70a51\", \"0xc0084a4d0393cd3768c8733ac77addd268dd86fcd3de379a08aab70a1a96c8bad202694ab0cc9e9dd401bf576ccc0ac\", \"0x14fdce739f217fefb6716848b5618143fdfb07de6c348ce5d0dcaaf3d3dfb07f8bc0883376eb80ccdc7db9ca23acee1c\", \"0x0\", \"0x2b05f7876fe128e401cd7f696383c57f638f58d1dd09fdcbd0d28ff4561e9e3f3a90da3b62783914f74a2bce9c76cfc\", \"0x0\", \"0x186ebefaece7849868ec8c230d6c288155e9f9376c0e6db3e75dbd02d80456323a4bfd6ea33441ab580942a3fe2f9364\"];\n        let r = [\"0xc71fb5b76cf57e5c7c9dbbd201062289f97dedce8bbb72d15abaec86c40039d3b4f3fccb7338ff3e7701b7f6619769b\", \"0x129a0a7e9efe3f397b5dbcae1f22f39c0cbcf4d183ead8de682a7571560cc28f2c13ecc7628b11dda4fcc3eaef203a45\", \"0x162ca20e57a4ad07f919b85c9975acd11d5f0cddd22192ebc465e5a89a0546be2ec98581fcda54c808aa8790189addd6\", \"0x10a05ef6bc41b1ac2ba68a585a4c7016589ffad9c5412bf00fd0f50f8ac9ea3d9a7db639e62eae3ca960447fb588a60b\", \"0x16dbc5bd5769b32d94959f3a71085f5adc66454928e158caeecda06706afd32cea844001820431c1f3534760c01c3ce5\", \"0x199988fcc386f48448a34d747599bd68a9bb4993cc0e6d2434e9182475096fe323352ae743be4cec47278fbbb8d52f52\", \"0x189109c92dac219f6b362d169e4ca995bbd0536c8727610f0f361f3490e9d41a94c69d397c1401b31b5a973bc393f3b1\", \"0x19ea64dde64bbb01d1072ca0532cbe26f8227deaf22155b2ba4bacf79ec45d43bbecca1bb35c6efdd163d6d7ff862979\", \"0xd9b819680b2cfa830393d2a883cbf07d691020e2a01580c62c9bb1869a1c40317ab6b0df57ff873f2b4bc93d71985e5\", \"0x704a7bc9193e53c9dde39b3a0a34d0e76345261a4caa612bb3ee39b3715a0d649760f83a32b24cc4b37fe549e80afde\", \"0x117957ce838607a66a58785c7af8af5a2d3a1832a559f19b20af84c9a5e968cabea23dd6815968b93234b9b34f8108e1\", \"0xae22d05bd7cd226ba438387b13606f1ad88319c787ccdcec28ab4de6e9bd5fd1ede497ebb746c3313cd6655b961689d\"];\n        let ps = ps\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xq = q\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xr = r\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let (q, r) = nondeterministic_extension_field_mul_divmod(12, ps);\n        let q = q.coefficients;\n        let r = r.coefficients;\n        assert_eq!(q, xq);\n        assert_eq!(r, xr);\n    }\n\n    #[test]\n    fn nondeterministic_extension_field_div_1() {\n        let x = [\n            \"0x2f6a437ba87bf892de86475ec2155dd6bf2acf7ddb7ad74c028c1a0bd146a17d\",\n            \"0xc2fc4dd8bf1d0a89f2a486ff97fe6ba7ef3267310f51196b7463fd620b3b35a\",\n        ];\n        let y = [\n            \"0x2590bd4bb718dbd69556e3011b96811fc7a3ced21887a6f699cd9802cdf4fb54\",\n            \"0x120d13a0b0bfe0ebd93d335ad218672b78966266e1671de6ab59b5b9a2452eb6\",\n        ];\n        let z = [\n            \"0x237db2935c4432bc98005e68cacde68a193b54e64d347301094edcbfa224d3d5\",\n            \"0x124077e14a7d826a707c3ec1809ae9bafafa05dd6b4ba735fba44e801d415637\",\n        ];\n        let x = Polynomial::new(\n            x.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let y = Polynomial::new(\n            y.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xz = z\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree12ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree6ExtensionField;\n        let z = nondeterministic_extension_field_div::<\n            BN254PrimeField,\n            Degree2ExtensionField,\n            Degree6ExtensionField,\n            Degree12ExtensionField,\n        >(x, y, 2);\n        let z = z.coefficients;\n        assert_eq!(z, xz);\n    }\n\n    #[test]\n    fn nondeterministic_extension_field_div_2() {\n        let x = [\n            \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n        ];\n        let y = [\n            \"0x14156ca1853095df27f3cb7c50eca75e794d2f14195c16df4a0f8f9dcb48bee9\",\n            \"0xdc2a20a6107d4c49fed6b2018946bcc2a8dad06f01d099a6df0a4a55ed21b59\",\n            \"0x14260c5afb0b1148ed80f8339cf9e06ff04257cb6c1817c4efa721fc98f69503\",\n            \"0xafe8a09df07bf3dffefe512eb9448ef436dd090f98323135baab8ae3c766c60\",\n            \"0x114692950f53d4f707bb02cc2b5dc98aff5936811707d6579371dae20368253c\",\n            \"0x2dd3fca72591963149646f1e106dc0ee917551f5a9da397fe12d4a3939ce650c\",\n            \"0x1750bd450b85cbd62ea3f1b228beff5fd364a127d6054be99a9248497b82062a\",\n            \"0x1248cfad33a2147726169d3ce55db12ecafd74bc4b83377c168d89b919386546\",\n            \"0x28d156bac04e64938816b055888399c99a954b82724e5f5589d549a709b2b5ef\",\n            \"0x39e1ab153bd709556afece475580f453f9126f256fbb49c235bc75082f5f26e\",\n            \"0x14853f940bf5c557c7f558d3e74e6617d7f08b54fd83597fed1d7e7b9d09e04\",\n            \"0xaa480d613601947fee14a3ce2b7af4e1872fe49ae3473546aa01a618b78b125\",\n        ];\n        let z = [\n            \"0x1d7a9ffbbe137d697794dbccbd7925ea98507cf8d4445d3e89123811ede12825\",\n            \"0x1f45aa2ee73f15e275e5c1fc0ff08be0981a61d8e7642301653a6307c7467811\",\n            \"0x2446d99f276e4c8bc63d81e8d0c1e37c901a5a569865533968e39b5083fc576e\",\n            \"0x223bd50b771fcaa905131a5f04c3c634c9df344731b5aada49be919aaa447cc7\",\n            \"0x24cfef2958a7c9c4d7ddfacdd59750105dcc37f6aefbf4a9ce706bc36252c47\",\n            \"0x3a974db52b274684955cb370b0ac66e3e295ea6e9789fb7259c294210f7720e\",\n            \"0x160b7346ec9fdd9841feb355a44845dc30c2a9ae3fb8266ad697b531de5e2fb6\",\n            \"0xe46af84e1cbba805f204fa5ce1c9a99c79799110a56b5d534495a358f9c739f\",\n            \"0x1f2b5709d0d7c9499b9524e9708ac412d3fa05fea9b51192113e131bd5572a21\",\n            \"0x8a75eef583ffc3b0f690cd9eab121b1f329194c1052a86d50224b92838c5d76\",\n            \"0xef3a64570d17038de7ec74175c125ac7e8780509764f07572ce9593878da9fb\",\n            \"0x2a6290607745b58a7b87bc78053320664e06d12b35825f15893ad52a39f54331\",\n        ];\n        let x = Polynomial::new(\n            x.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let y = Polynomial::new(\n            y.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xz = z\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree12ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree6ExtensionField;\n        let z = nondeterministic_extension_field_div::<\n            BN254PrimeField,\n            Degree2ExtensionField,\n            Degree6ExtensionField,\n            Degree12ExtensionField,\n        >(x, y, 12);\n        let z = z.coefficients;\n        assert_eq!(z, xz);\n    }\n\n    #[test]\n    fn nondeterministic_extension_field_div_3() {\n        let x = [\"0xcebfbdf0b4abf3a47cd17cf6b889effc2af960568f453fe4b87e955f8a854ba4df986c2aa1974e16b32c53379d3e81f\", \"0x8acd6cd869315ed3703b767ffdbb324a2e3f13b6352bdcb503496ebf38b120e3b623f3a913c43356e4431c1e9ca9332\"];\n        let y = [\"0x19cbaa4ee4fadc2319939b8db45c6a355bfb3755197ba74eda8534d2a2c1a2592475939877594513c326a90c11705002\", \"0xc0d89405d4e69986559a56057851733967c50fd0b4ec75e4ce92556ae5d33567e6e1a4eb9d83b4355520ebfe0bef37c\"];\n        let z = [\"0x15a76ee3d8d1c3451005d56067cd27cf7598a85f81c23cd926ad0ec05ad6440f1df034cf36701a5831c9fb39250e2ea9\", \"0x16d96e785c797fb5d6afcb1400d7656829a6a71c42deb7ddce5cd2ccda4704dc0e4b92b69009367bbf6e6aa19488df66\"];\n        let x = Polynomial::new(\n            x.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let y = Polynomial::new(\n            y.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xz = z\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree6ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree12ExtensionField;\n        let z = nondeterministic_extension_field_div::<\n            BLS12381PrimeField,\n            Degree2ExtensionField,\n            Degree6ExtensionField,\n            Degree12ExtensionField,\n        >(x, y, 2);\n        let z = z.coefficients;\n        assert_eq!(z, xz);\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/algebra/g1g2pair.rs",
    "content": "use crate::algebra::g1point::G1Point;\nuse crate::algebra::g2point::G2Point;\nuse crate::definitions::{CurveParamsProvider, FieldElement};\nuse lambdaworks_math::field::traits::{IsField, IsPrimeField, IsSubFieldOf};\n\n#[derive(Debug, Clone)]\npub struct G1G2Pair<F, E2>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    pub g1: G1Point<F>,\n    pub g2: G2Point<F, E2>,\n}\n\nimpl<F, E2> G1G2Pair<F, E2>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2> + CurveParamsProvider<F>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    pub fn new(g1: G1Point<F>, g2: G2Point<F, E2>) -> Self {\n        Self { g1, g2 }\n    }\n    pub fn flatten(&self) -> Vec<FieldElement<F>> {\n        let mut elements = vec![];\n        let (x, y) = self.g1.get_coords();\n        elements.push(x[0].clone());\n        elements.push(y[0].clone());\n        let (x, y) = self.g2.get_coords();\n        elements.push(x[0].clone());\n        elements.push(x[1].clone());\n        elements.push(y[0].clone());\n        elements.push(y[1].clone());\n        elements\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/algebra/g1point.rs",
    "content": "use crate::definitions::{CurveParamsProvider, FieldElement};\nuse lambdaworks_math::field::traits::IsPrimeField;\nuse num_bigint::{BigInt, BigUint, Sign};\n\n#[derive(Debug, Clone)]\npub struct G1Point<F: IsPrimeField> {\n    pub x: FieldElement<F>,\n    pub y: FieldElement<F>,\n    pub iso_point: bool,\n}\n\nimpl<F: IsPrimeField> G1Point<F> {\n    pub fn is_infinity(&self) -> bool {\n        let zero = FieldElement::zero();\n        self.x.eq(&zero) && self.y.eq(&zero)\n    }\n    pub fn representative(&self) -> String {\n        format!(\n            \"({:?}, {:?})\",\n            self.x.representative().to_string(),\n            self.y.representative().to_string()\n        )\n    }\n}\n\nimpl<F: IsPrimeField + CurveParamsProvider<F>> G1Point<F> {\n    pub fn get_coords(&self) -> ([FieldElement<F>; 1], [FieldElement<F>; 1]) {\n        ([self.x.clone()], [self.y.clone()])\n    }\n\n    pub fn new(x: FieldElement<F>, y: FieldElement<F>, iso_point: bool) -> Result<Self, String> {\n        let point = Self { x, y, iso_point };\n        if !point.is_infinity() && !point.is_on_curve() {\n            return Err(format!(\n                \"Point ({:?}, {:?}) is not on the curve\",\n                point.x.representative().to_string(),\n                point.y.representative().to_string(),\n            ));\n        }\n        Ok(point)\n    }\n\n    pub fn new_unchecked(x: FieldElement<F>, y: FieldElement<F>, iso_point: bool) -> Self {\n        Self { x, y, iso_point }\n    }\n\n    pub fn add(&self, other: &G1Point<F>) -> G1Point<F> {\n        assert!(self.iso_point == other.iso_point);\n        if self.is_infinity() {\n            return other.clone();\n        }\n        if other.is_infinity() {\n            return self.clone();\n        }\n\n        if self.x == other.x && self.y != other.y {\n            return Self::new_unchecked(\n                FieldElement::<F>::zero(),\n                FieldElement::<F>::zero(),\n                self.iso_point,\n            );\n        }\n\n        let lambda = if self.eq(other) {\n            let curve_params = F::get_curve_params();\n            let alpha = if self.iso_point {\n                let swu_params = curve_params.swu_params.unwrap();\n                swu_params.a\n            } else {\n                curve_params.a\n            };\n            let numerator = FieldElement::<F>::from(3_u64) * &self.x.square() + alpha;\n            let denominator = FieldElement::<F>::from(2_u64) * &self.y;\n            numerator / denominator\n        } else {\n            (&other.y - &self.y) / (&other.x - &self.x)\n        }\n        .unwrap();\n\n        let x3 = &lambda.square() - &self.x - &other.x;\n\n        let y3 = &lambda * &(self.x.clone() - &x3) - &self.y;\n\n        Self::new_unchecked(x3, y3, self.iso_point)\n    }\n\n    pub fn neg(&self) -> Self {\n        if self.is_infinity() {\n            self.clone()\n        } else {\n            Self::new_unchecked(self.x.clone(), -self.y.clone(), self.iso_point)\n        }\n    }\n\n    pub fn scalar_mul_neg_3(&self) -> G1Point<F> {\n        let double_point = self.add(self);\n        let triple_point = self.add(&double_point);\n        triple_point.neg()\n    }\n    pub fn scalar_mul(&self, scalar: BigInt) -> G1Point<F> {\n        if self.is_infinity() {\n            return self.clone();\n        }\n        if scalar == BigInt::ZERO {\n            return Self::new_unchecked(\n                FieldElement::<F>::zero(),\n                FieldElement::<F>::zero(),\n                self.iso_point,\n            );\n        }\n\n        let mut result = Self::new_unchecked(\n            FieldElement::<F>::zero(),\n            FieldElement::<F>::zero(),\n            self.iso_point,\n        );\n        let mut base = self.clone();\n\n        //println!(\"scalar mul scalar: {:?}\", scalar);\n        let sign = scalar.sign();\n        let abs_scalar = match sign {\n            Sign::Plus => scalar,\n            Sign::Minus => -scalar,\n            _ => scalar,\n        };\n        let mut scalar: BigUint = abs_scalar.to_biguint().unwrap();\n\n        while scalar > BigUint::ZERO {\n            if &scalar & BigUint::from(1_u64) != BigUint::ZERO {\n                result = result.add(&base);\n            }\n            base = base.add(&base);\n            scalar >>= 1;\n        }\n\n        if sign == num_bigint::Sign::Minus {\n            result = result.neg();\n        }\n\n        result\n    }\n\n    pub fn is_on_curve(&self) -> bool {\n        if self.is_infinity() {\n            return true;\n        }\n\n        let curve_params = F::get_curve_params();\n        let (a, b) = if self.iso_point {\n            let swu_params = curve_params.swu_params.unwrap();\n            (swu_params.a, swu_params.b)\n        } else {\n            (curve_params.a, curve_params.b)\n        };\n        self.y.square() == self.x.clone().square() * self.x.clone() + a * self.x.clone() + b\n    }\n\n    pub fn print(&self) {\n        println!(\n            \"G1Point: x = {:?}, y = {:?}\",\n            self.x.representative().to_string(),\n            self.y.representative().to_string()\n        );\n    }\n\n    pub fn generator() -> Self {\n        let curve_params = F::get_curve_params();\n        let generator_x = curve_params.g_x;\n        let generator_y = curve_params.g_y;\n        G1Point::new(generator_x, generator_y, false).unwrap()\n    }\n\n    pub fn msm(points: &[Self], scalars: &[BigUint]) -> Self {\n        assert!(!points.is_empty());\n        assert_eq!(points.len(), scalars.len());\n        let mut result = points[0].scalar_mul(scalars[0].clone().into());\n        for i in 1..points.len() {\n            result = result.add(&points[i].scalar_mul(scalars[i].clone().into()));\n        }\n        result\n    }\n\n    pub fn new_infinity() -> Self {\n        G1Point::new_unchecked(FieldElement::<F>::zero(), FieldElement::<F>::zero(), false)\n    }\n}\n\nimpl<F: IsPrimeField> PartialEq for G1Point<F> {\n    fn eq(&self, other: &Self) -> bool {\n        self.x == other.x && self.y == other.y\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/algebra/g2point.rs",
    "content": "use crate::algebra::extf_mul::{from_e2, to_e2};\nuse crate::definitions::{CurveParamsProvider, FieldElement};\nuse crate::io::biguint_to_u256;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::traits::IsShortWeierstrass;\nuse lambdaworks_math::field::traits::{IsField, IsPrimeField, IsSubFieldOf};\nuse num_bigint::{BigInt, BigUint, Sign};\n\n#[derive(Debug, Clone)]\npub struct G2Point<F, E2>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    pub x: FieldElement<E2>,\n    pub y: FieldElement<E2>,\n}\n\nimpl<F, E2> G2Point<F, E2>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    pub fn get_coords(&self) -> ([FieldElement<F>; 2], [FieldElement<F>; 2]) {\n        (from_e2(self.x.clone()), from_e2(self.y.clone()))\n    }\n\n    pub fn representative(&self) -> String {\n        let ([x0, x1], [y0, y1]) = self.get_coords();\n        format!(\n            \"G2Point: X = ({:?}, {:?}), Y = ({:?}, {:?})\",\n            x0.representative().to_string(),\n            x1.representative().to_string(),\n            y0.representative().to_string(),\n            y1.representative().to_string()\n        )\n    }\n    pub fn new(x: [FieldElement<F>; 2], y: [FieldElement<F>; 2]) -> Result<Self, String> {\n        let x = to_e2(x);\n        let y = to_e2(y);\n        let point = Self { x, y };\n        if !point.is_infinity() && !point.is_on_curve() {\n            let x = from_e2(point.x);\n            let y = from_e2(point.y);\n            return Err(format!(\n                \"Point (({:?}, {:?}), ({:?}, {:?})) is not on the curve\",\n                x[0].representative().to_string(),\n                x[1].representative().to_string(),\n                y[0].representative().to_string(),\n                y[1].representative().to_string(),\n            ));\n        }\n        Ok(point)\n    }\n\n    pub fn new_unchecked(x: FieldElement<E2>, y: FieldElement<E2>) -> Self {\n        Self { x, y }\n    }\n\n    pub fn is_infinity(&self) -> bool {\n        let zero = to_e2([FieldElement::zero(), FieldElement::zero()]);\n        self.x.eq(&zero) && self.y.eq(&zero)\n    }\n\n    pub fn neg(&self) -> Self {\n        if self.is_infinity() {\n            self.clone()\n        } else {\n            G2Point::new_unchecked(self.x.clone(), -self.y.clone())\n        }\n    }\n\n    pub fn is_on_curve(&self) -> bool {\n        if self.is_infinity() {\n            return true;\n        }\n\n        let curve_params = F::get_curve_params();\n        let a = curve_params.a;\n        let b = to_e2([curve_params.b20, curve_params.b21]);\n        self.y.square() == self.x.clone().square() * self.x.clone() + a * self.x.clone() + b\n    }\n\n    pub fn generator() -> Self {\n        let curve_params = F::get_curve_params();\n        let generator_x = curve_params\n            .g2_x\n            .expect(\"G2 generator coordinates not defined for this curve\");\n        let generator_y = curve_params\n            .g2_y\n            .expect(\"G2 generator coordinates not defined for this curve\");\n        G2Point::new(generator_x, generator_y).unwrap()\n    }\n\n    pub fn compute_doubling_slope(a: &Self) -> FieldElement<E2> {\n        let [x, y] = &from_e2(a.x.clone());\n        let num = to_e2([\n            (x + y) * (x - y) * FieldElement::<F>::from(3),\n            x * y * FieldElement::<F>::from(6),\n        ]);\n        (num / (&a.y + &a.y)).unwrap()\n    }\n\n    pub fn compute_adding_slope(a: &Self, b: &Self) -> FieldElement<E2> {\n        ((&a.y - &b.y) / (&a.x - &b.x)).unwrap()\n    }\n\n    pub fn new_infinity() -> Self {\n        let zero = to_e2([FieldElement::zero(), FieldElement::zero()]);\n        G2Point::new_unchecked(zero.clone(), zero)\n    }\n\n    pub fn add<C>(&self, other: &G2Point<F, E2>) -> G2Point<F, E2>\n    where\n        C: IsShortWeierstrass<BaseField = E2>,\n    {\n        g2_point_add::<F, E2, C>(self.clone(), other.clone())\n    }\n\n    pub fn scalar_mul<C>(&self, scalar: BigInt) -> G2Point<F, E2>\n    where\n        C: IsShortWeierstrass<BaseField = E2>,\n    {\n        if self.is_infinity() {\n            return self.clone();\n        }\n        if scalar == BigInt::ZERO {\n            return Self::new_infinity();\n        }\n\n        let base = self.clone();\n\n        let sign = scalar.sign();\n        let abs_scalar = match sign {\n            Sign::Plus => scalar,\n            Sign::Minus => -scalar,\n            _ => scalar,\n        };\n        let scalar: BigUint = abs_scalar.to_biguint().unwrap();\n\n        let mut result = g2_point_scalar_mul::<F, E2, C>(base, scalar);\n\n        if sign == num_bigint::Sign::Minus {\n            result = result.neg();\n        }\n\n        result\n    }\n}\n\nfn g2_point_add<F, E2, C>(a: G2Point<F, E2>, b: G2Point<F, E2>) -> G2Point<F, E2>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2> + CurveParamsProvider<F>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n    C: IsShortWeierstrass<BaseField = E2>,\n{\n    use lambdaworks_math::cyclic_group::IsGroup;\n    use lambdaworks_math::elliptic_curve::short_weierstrass::point::ShortWeierstrassProjectivePoint;\n    use lambdaworks_math::elliptic_curve::traits::FromAffine;\n    let a = ShortWeierstrassProjectivePoint::<C>::from_affine(a.x, a.y).unwrap();\n    let b = ShortWeierstrassProjectivePoint::<C>::from_affine(b.x, b.y).unwrap();\n    let c = a.operate_with(&b).to_affine();\n    if c.z() == &FieldElement::zero() {\n        G2Point::new_infinity()\n    } else {\n        let x = c.x().value().clone();\n        let y = c.y().value().clone();\n        G2Point::new(x, y).unwrap()\n    }\n}\n\nfn g2_point_scalar_mul<F, E2, C>(a: G2Point<F, E2>, k: BigUint) -> G2Point<F, E2>\nwhere\n    F: IsPrimeField + IsSubFieldOf<E2> + CurveParamsProvider<F>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n    C: IsShortWeierstrass<BaseField = E2>,\n{\n    use lambdaworks_math::cyclic_group::IsGroup;\n    use lambdaworks_math::elliptic_curve::short_weierstrass::point::ShortWeierstrassProjectivePoint;\n    use lambdaworks_math::elliptic_curve::traits::FromAffine;\n    let a = ShortWeierstrassProjectivePoint::<C>::from_affine(a.x, a.y).unwrap();\n    let c = a.operate_with_self(biguint_to_u256(&k)).to_affine();\n    if c.z() == &FieldElement::zero() {\n        G2Point::new_infinity()\n    } else {\n        let x = c.x().value().clone();\n        let y = c.y().value().clone();\n        G2Point::new(x, y).unwrap()\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/algebra/polynomial.rs",
    "content": "use crate::definitions::FieldElement;\nuse lambdaworks_math::field::traits::IsPrimeField;\n\n#[derive(Debug, Clone)]\npub struct Polynomial<F: IsPrimeField> {\n    pub coefficients: Vec<FieldElement<F>>,\n    // Cache the degree to avoid recomputing it\n    degree: isize,\n}\n\nimpl<F: IsPrimeField> Polynomial<F> {\n    pub fn get_coefficients_ext_degree(&self, ext_degree: usize) -> Vec<FieldElement<F>> {\n        assert!(self.coefficients.len() <= ext_degree);\n        let mut coefficients = self.coefficients.clone();\n        coefficients.resize(ext_degree, FieldElement::zero());\n        coefficients\n    }\n\n    pub fn new(mut coefficients: Vec<FieldElement<F>>) -> Self {\n        // Find the position of the last non-zero coefficient\n        let last_non_zero = coefficients\n            .iter()\n            .rposition(|x| *x != FieldElement::zero());\n\n        // Truncate the vector to remove trailing zeros\n        let degree = if let Some(pos) = last_non_zero {\n            coefficients.truncate(pos + 1);\n            pos as isize\n        } else {\n            // All coefficients are zero, return a zero polynomial\n            coefficients = vec![FieldElement::zero()];\n            -1\n        };\n\n        Self {\n            coefficients,\n            degree,\n        }\n    }\n\n    pub fn print_as_sage_poly(&self) -> String {\n        let var_name = 'x';\n        if self.degree == -1 {\n            return String::new();\n        }\n\n        let mut string = String::new();\n        let zero = FieldElement::<F>::zero();\n\n        for (i, coeff) in self.coefficients.iter().rev().enumerate() {\n            if *coeff == zero {\n                continue;\n            }\n\n            let coeff_str = coeff.representative().to_string();\n\n            if i == self.coefficients.len() - 1 {\n                string.push_str(&coeff_str);\n            } else if i == self.coefficients.len() - 2 {\n                string.push_str(&format!(\"{}*{} + \", coeff_str, var_name));\n            } else {\n                string.push_str(&format!(\n                    \"{}*{}^{} + \",\n                    coeff_str,\n                    var_name,\n                    self.coefficients.len() - 1 - i\n                ));\n            }\n        }\n\n        string\n    }\n\n    #[inline]\n    pub fn degree(&self) -> isize {\n        // Use cached degree value\n        self.degree\n    }\n\n    pub fn evaluate(&self, x: &FieldElement<F>) -> FieldElement<F> {\n        // Use Horner's method for polynomial evaluation\n        if self.degree == -1 {\n            return FieldElement::zero();\n        }\n\n        let mut result = self.coefficients[self.degree as usize].clone();\n        for i in (0..self.degree as usize).rev() {\n            result = &result * x + &self.coefficients[i];\n        }\n        result\n    }\n\n    pub fn leading_coefficient(&self) -> FieldElement<F> {\n        if self.degree == -1 {\n            return FieldElement::zero();\n        }\n        self.coefficients[self.degree as usize].clone()\n    }\n\n    pub fn zero() -> Self {\n        Self {\n            coefficients: vec![FieldElement::<F>::zero()],\n            degree: -1,\n        }\n    }\n\n    pub fn one() -> Self {\n        Self {\n            coefficients: vec![FieldElement::<F>::one()],\n            degree: 0,\n        }\n    }\n\n    pub fn mul_with_ref(&self, other: &Polynomial<F>) -> Polynomial<F> {\n        if self.degree == -1 || other.degree == -1 {\n            return Polynomial::zero();\n        }\n\n        let result_len = (self.degree + other.degree + 1) as usize;\n        let mut result_coeffs = vec![FieldElement::<F>::zero(); result_len];\n\n        for (i, self_coeff) in self.coefficients.iter().enumerate() {\n            for (j, other_coeff) in other.coefficients.iter().enumerate() {\n                result_coeffs[i + j] += self_coeff * other_coeff;\n            }\n        }\n\n        // We already know the degree, so construct directly\n        let degree = self.degree + other.degree;\n        Polynomial {\n            coefficients: result_coeffs,\n            degree,\n        }\n    }\n    pub fn divmod(self, denominator: &Self) -> (Self, Self) {\n        let den_deg = denominator.degree;\n        if den_deg == -1 {\n            panic!(\"Division by zero polynomial\");\n        }\n        let num_deg = self.degree;\n        let mut remainder = self.clone();\n        if num_deg < den_deg {\n            return (Polynomial::zero(), self);\n        }\n\n        let mut quotient_coeffs = vec![FieldElement::<F>::zero(); (num_deg - den_deg + 1) as usize];\n        let denom_lead_inv = denominator.leading_coefficient().inv().unwrap();\n\n        let mut rem_deg = num_deg;\n        while rem_deg >= den_deg {\n            let shift = rem_deg - den_deg;\n            let coefficient = &remainder.coefficients[rem_deg as usize] * &denom_lead_inv;\n            quotient_coeffs[shift as usize] = coefficient.clone();\n            let subtractee = denominator\n                .scale_by_coeff(&coefficient)\n                .shift(shift as usize);\n            remainder = remainder - subtractee;\n            rem_deg = remainder.degree;\n        }\n\n        let degree = num_deg - den_deg;\n        let quotient = Polynomial {\n            coefficients: quotient_coeffs,\n            degree,\n        };\n        (quotient, remainder)\n    }\n\n    pub fn shift(&self, shift: usize) -> Self {\n        if self.degree == -1 {\n            return Polynomial::zero();\n        }\n\n        let mut shifted_coeffs = vec![FieldElement::<F>::zero(); shift];\n        shifted_coeffs.extend(self.coefficients.clone());\n\n        Self {\n            coefficients: shifted_coeffs,\n            degree: self.degree + shift as isize,\n        }\n    }\n\n    pub fn divfloor(&self, denominator: &Self) -> Self {\n        let (quotient, _remainder) = self.clone().divmod(denominator);\n        quotient\n    }\n\n    pub fn differentiate(&self) -> Self {\n        if self.degree <= 0 {\n            return Polynomial::zero();\n        }\n\n        let new_deg = self.degree - 1;\n        let mut new_coeffs = vec![FieldElement::<F>::zero(); new_deg as usize + 1];\n\n        for i in 1..=self.degree as usize {\n            let u_64 = i as u64;\n            let degree = &FieldElement::<F>::from(u_64);\n            new_coeffs[i - 1] = &self.coefficients[i] * degree;\n        }\n\n        Polynomial {\n            coefficients: new_coeffs,\n            degree: new_deg,\n        }\n    }\n\n    pub fn xgcd(&self, other: &Polynomial<F>) -> (Polynomial<F>, Polynomial<F>, Polynomial<F>) {\n        let mut old_r = self.clone();\n        let mut r = other.clone();\n        let mut old_s = Polynomial::one();\n        let mut s = Polynomial::zero();\n        let mut old_t = Polynomial::zero();\n        let mut t = Polynomial::one();\n\n        while r.degree != -1 {\n            let quotient = old_r.clone().div_with_ref(&r);\n\n            let new_r = old_r - quotient.clone().mul_with_ref(&r);\n            old_r = r;\n            r = new_r;\n\n            let new_s = old_s - quotient.clone().mul_with_ref(&s);\n            old_s = s;\n            s = new_s;\n\n            let new_t = old_t - quotient.clone().mul_with_ref(&t);\n            old_t = t;\n            t = new_t;\n        }\n\n        let lcinv = old_r.leading_coefficient().inv().unwrap();\n        (\n            old_s.scale_by_coeff(&lcinv),\n            old_t.scale_by_coeff(&lcinv),\n            old_r.scale_by_coeff(&lcinv),\n        )\n    }\n\n    pub fn div_with_ref(self, dividend: &Self) -> Self {\n        let (quotient, _remainder) = self.divmod(dividend);\n        quotient\n    }\n\n    pub fn scale_by_coeff(&self, coeff: &FieldElement<F>) -> Polynomial<F> {\n        if *coeff == FieldElement::zero() {\n            return Polynomial::zero();\n        }\n\n        if self.degree == -1 {\n            return Polynomial::zero();\n        }\n\n        let scaled_coeffs = self.coefficients.iter().map(|c| c * coeff).collect();\n\n        // Degree remains the same when scaling by non-zero coefficient\n        Polynomial {\n            coefficients: scaled_coeffs,\n            degree: self.degree,\n        }\n    }\n}\n\npub fn pad_with_zero_coefficients_to_length<F: IsPrimeField>(pa: &mut Polynomial<F>, n: usize) {\n    if pa.coefficients.len() < n {\n        pa.coefficients.resize(n, FieldElement::zero());\n        // Degree doesn't change when adding trailing zeros\n    }\n}\npub fn pad_with_zero_coefficients<F: IsPrimeField>(\n    pa: &Polynomial<F>,\n    pb: &Polynomial<F>,\n) -> (Polynomial<F>, Polynomial<F>) {\n    let mut pa = pa.clone();\n    let mut pb = pb.clone();\n\n    if pa.coefficients.len() > pb.coefficients.len() {\n        pad_with_zero_coefficients_to_length(&mut pb, pa.coefficients.len());\n    } else {\n        pad_with_zero_coefficients_to_length(&mut pa, pb.coefficients.len());\n    }\n    (pa, pb)\n}\n\nimpl<F: IsPrimeField> std::ops::Add<&Polynomial<F>> for &Polynomial<F> {\n    type Output = Polynomial<F>;\n\n    fn add(self, a_polynomial: &Polynomial<F>) -> Self::Output {\n        let (pa, pb) = pad_with_zero_coefficients(self, a_polynomial);\n\n        // Calculate new coefficients\n        let mut new_coefficients = Vec::with_capacity(pa.coefficients.len());\n        for (x, y) in pa.coefficients.iter().zip(pb.coefficients.iter()) {\n            new_coefficients.push(x + y);\n        }\n\n        // Find max degree - this is a potential optimization spot if we find this is slow\n        let degree = if self.degree > a_polynomial.degree {\n            self.degree\n        } else if self.degree < a_polynomial.degree {\n            a_polynomial.degree\n        } else {\n            // If degrees are equal, we need to check if leading terms cancel out\n            let mut max_deg = self.degree;\n            // Find the actual degree by scanning backward for first non-zero term\n            while max_deg >= 0 && new_coefficients[max_deg as usize] == FieldElement::<F>::zero() {\n                max_deg -= 1;\n            }\n            max_deg\n        };\n\n        // If degree is -1, ensure we have a single zero\n        if degree == -1 {\n            Polynomial::zero()\n        } else {\n            // Trim the vector to actual degree + 1\n            new_coefficients.truncate(degree as usize + 1);\n            Polynomial {\n                coefficients: new_coefficients,\n                degree,\n            }\n        }\n    }\n}\n\nimpl<F: IsPrimeField> std::ops::Add for Polynomial<F> {\n    type Output = Polynomial<F>;\n\n    fn add(self, other: Polynomial<F>) -> Polynomial<F> {\n        // Fast path for zeros\n        if self.degree == -1 {\n            return other;\n        }\n        if other.degree == -1 {\n            return self;\n        }\n\n        let (mut longer, shorter, longer_deg) = if self.degree >= other.degree {\n            (self.coefficients, other.coefficients, self.degree)\n        } else {\n            (other.coefficients, self.coefficients, other.degree)\n        };\n\n        // Add shorter polynomial terms to longer one\n        for (i, coeff) in shorter.into_iter().enumerate() {\n            longer[i] += coeff;\n        }\n\n        // Check if the degree has changed due to cancellations\n        let mut actual_deg = longer_deg;\n        while actual_deg >= 0 && longer[actual_deg as usize] == FieldElement::<F>::zero() {\n            actual_deg -= 1;\n        }\n\n        if actual_deg == -1 {\n            Polynomial::zero()\n        } else {\n            longer.truncate(actual_deg as usize + 1);\n\n            Polynomial {\n                coefficients: longer,\n                degree: actual_deg,\n            }\n        }\n    }\n}\n\nimpl<F: IsPrimeField> std::ops::Neg for &Polynomial<F> {\n    type Output = Polynomial<F>;\n\n    fn neg(self) -> Polynomial<F> {\n        if self.degree == -1 {\n            return Polynomial::zero();\n        }\n\n        Polynomial {\n            coefficients: self.coefficients.iter().map(|c| -c).collect(),\n            degree: self.degree,\n        }\n    }\n}\n\nimpl<F: IsPrimeField> std::ops::Neg for Polynomial<F> {\n    type Output = Polynomial<F>;\n\n    fn neg(self) -> Polynomial<F> {\n        -&self\n    }\n}\n\nimpl<F: IsPrimeField> std::ops::Sub for Polynomial<F> {\n    type Output = Polynomial<F>;\n\n    fn sub(self, other: Polynomial<F>) -> Polynomial<F> {\n        // Fast path for zeros\n        if self.degree == -1 {\n            return -other;\n        }\n        if other.degree == -1 {\n            return self;\n        }\n\n        self + (-other)\n    }\n}\n\nimpl<F: IsPrimeField> PartialEq for Polynomial<F> {\n    fn eq(&self, other: &Self) -> bool {\n        // Quick check based on degree\n        if self.degree != other.degree {\n            return false;\n        }\n\n        // If both are zero polynomials\n        if self.degree == -1 {\n            return true;\n        }\n\n        // Compare coefficients\n        for i in 0..=self.degree as usize {\n            if self.coefficients[i] != other.coefficients[i] {\n                return false;\n            }\n        }\n\n        true\n    }\n}\n\nimpl<F: IsPrimeField> std::ops::Mul<&Polynomial<F>> for &Polynomial<F> {\n    type Output = Polynomial<F>;\n    fn mul(self, factor: &Polynomial<F>) -> Polynomial<F> {\n        self.mul_with_ref(factor)\n    }\n}\n\nimpl<F: IsPrimeField> std::ops::Mul<Polynomial<F>> for Polynomial<F> {\n    type Output = Polynomial<F>;\n    fn mul(self, factor: Polynomial<F>) -> Polynomial<F> {\n        &self * &factor\n    }\n}\n\nimpl<F: IsPrimeField> std::ops::Mul<Polynomial<F>> for &Polynomial<F> {\n    type Output = Polynomial<F>;\n    fn mul(self, factor: Polynomial<F>) -> Polynomial<F> {\n        self * &factor\n    }\n}\n\nimpl<F: IsPrimeField> std::ops::Mul<&Polynomial<F>> for Polynomial<F> {\n    type Output = Polynomial<F>;\n    fn mul(self, factor: &Polynomial<F>) -> Polynomial<F> {\n        &self * factor\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/algebra/rational_function.rs",
    "content": "use crate::algebra::polynomial::Polynomial;\nuse crate::definitions::FieldElement;\nuse lambdaworks_math::field::traits::IsPrimeField;\n\n#[derive(Debug, Clone)]\npub struct RationalFunction<F: IsPrimeField> {\n    pub numerator: Polynomial<F>,\n    pub denominator: Polynomial<F>,\n}\n\nimpl<F: IsPrimeField> RationalFunction<F> {\n    pub fn new(numerator: Polynomial<F>, denominator: Polynomial<F>) -> Self {\n        Self {\n            numerator,\n            denominator,\n        }\n    }\n\n    pub fn simplify(&self) -> RationalFunction<F> {\n        let (_, _, gcd) = self.numerator.xgcd(&self.denominator);\n        let num_simplified = self.numerator.clone().div_with_ref(&gcd);\n        let den_simplified = self.denominator.clone().div_with_ref(&gcd);\n\n        RationalFunction::new(\n            num_simplified.scale_by_coeff(&self.denominator.leading_coefficient().inv().unwrap()),\n            den_simplified.scale_by_coeff(&den_simplified.leading_coefficient().inv().unwrap()),\n        )\n    }\n\n    pub fn evaluate(&self, x: FieldElement<F>) -> FieldElement<F> {\n        (self.numerator.evaluate(&x.clone()) / self.denominator.evaluate(&x.clone())).unwrap()\n    }\n\n    pub fn scale_by_coeff(&self, coeff: FieldElement<F>) -> RationalFunction<F> {\n        RationalFunction::new(\n            self.numerator.scale_by_coeff(&coeff),\n            self.denominator.clone(),\n        )\n    }\n}\n\nimpl<F: IsPrimeField> std::ops::Add for RationalFunction<F> {\n    type Output = RationalFunction<F>;\n\n    fn add(self, other: RationalFunction<F>) -> RationalFunction<F> {\n        let num_1: Polynomial<F> = self.numerator.clone() * other.denominator.clone();\n        let num_2 = other.numerator.clone() * self.denominator.clone();\n        let num = num_1 + num_2;\n        let den: Polynomial<F> = self.denominator.clone() * other.denominator.clone();\n        RationalFunction::new(num, den).simplify()\n    }\n}\n\n#[derive(Debug, Clone)]\npub struct FunctionFelt<F: IsPrimeField> {\n    pub a: RationalFunction<F>,\n    pub b: RationalFunction<F>,\n}\n\nimpl<F: IsPrimeField> FunctionFelt<F> {\n    pub fn new(a: RationalFunction<F>, b: RationalFunction<F>) -> Self {\n        Self { a, b }\n    }\n\n    pub fn simplify(&self) -> FunctionFelt<F> {\n        FunctionFelt::new(self.a.simplify(), self.b.simplify())\n    }\n\n    pub fn evaluate(&self, x: FieldElement<F>, y: &FieldElement<F>) -> FieldElement<F> {\n        self.a.evaluate(x.clone()) + y * self.b.evaluate(x.clone())\n    }\n\n    pub fn scale_by_coeff(&self, coeff: FieldElement<F>) -> FunctionFelt<F> {\n        FunctionFelt::new(\n            self.a.scale_by_coeff(coeff.clone()),\n            self.b.scale_by_coeff(coeff),\n        )\n    }\n\n    // def print_as_sage_poly(self, var: str = \"x\") -> str:\n    //     return f\"(({self.b.numerator.print_as_sage_poly(var)}) / ({self.b.denominator.print_as_sage_poly(var)}) * y + ({self.a.numerator.print_as_sage_poly(var)} / ({self.a.denominator.print_as_sage_poly(var)})\"\n\n    pub fn print_as_sage_poly(&self) -> String {\n        format!(\n            \"(({}) / ({}) * y + ({}) / ({})\",\n            self.b.numerator.print_as_sage_poly(),\n            self.b.denominator.print_as_sage_poly(),\n            self.a.numerator.print_as_sage_poly(),\n            self.a.denominator.print_as_sage_poly()\n        )\n    }\n}\n\nimpl<F: IsPrimeField> std::ops::Add for FunctionFelt<F> {\n    type Output = FunctionFelt<F>;\n\n    fn add(self, other: FunctionFelt<F>) -> FunctionFelt<F> {\n        FunctionFelt {\n            a: self.a + other.a,\n            b: self.b + other.b,\n        }\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/calldata/drand_calldata.rs",
    "content": "use crate::algebra::g1g2pair::G1G2Pair;\nuse crate::algebra::g1point::G1Point;\nuse crate::algebra::g2point::G2Point;\nuse crate::algebra::polynomial::Polynomial;\nuse crate::algebra::rational_function::RationalFunction;\nuse crate::calldata::mpc_calldata;\nuse crate::definitions::{BLS12381PrimeField, CurveID, CurveParamsProvider, FieldElement};\nuse crate::io::{\n    element_from_biguint, element_from_bytes_be, element_to_biguint, field_element_to_u384_limbs,\n};\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree12ExtensionField as BLS12381Degree12ExtensionField;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField as BLS12381Degree2ExtensionField;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree6ExtensionField as BLS12381Degree6ExtensionField;\nuse lambdaworks_math::field::traits::{IsPrimeField, LegendreSymbol};\nuse lambdaworks_math::traits::ByteConversion;\nuse num_bigint::{BigInt, BigUint};\nuse num_traits::Num;\nuse sha2::{Digest, Sha256};\n\npub fn drand_calldata_builder(values: &[BigUint]) -> Result<Vec<BigUint>, String> {\n    if values.len() != 3 {\n        return Err(format!(\"Invalid data array length: {}\", values.len()));\n    }\n    let round_number: usize = (&values[0])\n        .try_into()\n        .map_err(|e| format!(\"Invalid round number: {}\", e))?;\n    let randomness = {\n        let bytes = values[1].to_bytes_be();\n        if bytes.len() > 32 {\n            return Err(format!(\"Invalid randomness array length: {}\", bytes.len()));\n        }\n        let mut padded_bytes = [0; 32];\n        let len = bytes.len();\n        padded_bytes[32 - len..].copy_from_slice(&bytes);\n        padded_bytes\n    };\n    let signature = {\n        let bytes = values[2].to_bytes_be();\n        // Only supports G1 compressed points as per Quicknet\n        if bytes.len() > 48 {\n            return Err(format!(\"Invalid signature array length: {}\", bytes.len()));\n        }\n        let mut padded_bytes = [0; 48];\n        let len = bytes.len();\n        padded_bytes[48 - len..].copy_from_slice(&bytes);\n        deserialize_bls_point(&padded_bytes)?\n    };\n    let round = RandomnessBeacon {\n        round_number,\n        randomness,\n        signature,\n        previous_signature: None,\n    };\n    drand_randomness_to_calldata(round)\n}\n\npub fn drand_randomness_to_calldata(round: RandomnessBeacon) -> Result<Vec<BigUint>, String> {\n    let chain = get_chain_info(get_chain_hash(DrandNetwork::Quicknet))?;\n\n    let round_number = round.round_number.try_into().unwrap();\n\n    let message = digest_func(round_number);\n\n    let msg_point = hash_to_curve(message, \"sha256\")?;\n\n    let sig_pt = round.signature.g1_point().unwrap().clone();\n\n    let hash_to_curve_hint = build_hash_to_curve_hint(message)?.to_calldata()?;\n\n    let pairs = [\n        G1G2Pair::new(sig_pt.clone(), G2Point::generator()),\n        G1G2Pair::new(msg_point, chain.public_key.g2_point().unwrap().neg()),\n    ];\n    let mpc_data = {\n        mpc_calldata::calldata_builder::<\n            false,\n            BLS12381PrimeField,\n            BLS12381Degree2ExtensionField,\n            BLS12381Degree6ExtensionField,\n            BLS12381Degree12ExtensionField,\n        >(&pairs, 2, &None)?\n    };\n\n    let size = 1 + 4 + 4 + hash_to_curve_hint.len() + mpc_data.len();\n    let mut call_data = vec![size.into()];\n    call_data.push(round_number.into());\n    call_data.extend(field_element_to_u384_limbs(&sig_pt.x).map(BigUint::from));\n    call_data.extend(field_element_to_u384_limbs(&sig_pt.y).map(BigUint::from));\n    call_data.extend(hash_to_curve_hint);\n    call_data.extend(mpc_data);\n    assert!(call_data.len() == 1 + size);\n    Ok(call_data)\n}\n\npub fn drand_round_to_calldata(round_number: usize) -> Result<Vec<BigUint>, String> {\n    let round_number = round_number.try_into().map_err(|err| format!(\"{}\", err))?;\n    let round = get_randomness(get_chain_hash(DrandNetwork::Quicknet), round_number);\n    drand_randomness_to_calldata(round)\n}\n\npub fn digest_func(round_number: u64) -> [u8; 32] {\n    let bytes = round_number.to_be_bytes();\n    let digest = Sha256::digest(bytes);\n    digest.into()\n}\n\npub fn hash_to_curve<F>(message: [u8; 32], hash_name: &str) -> Result<G1Point<F>, String>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    let [felt0, felt1] = hash_to_field::<F>(message, 2, hash_name)?\n        .try_into()\n        .unwrap();\n\n    let pt0 = map_to_curve(felt0);\n    let pt1 = map_to_curve(felt1);\n    assert!(pt0.iso_point, \"Point {:?} is not an iso point\", pt0);\n    assert!(pt1.iso_point, \"Point {:?} is not an iso point\", pt1);\n\n    let curve_params = F::get_curve_params();\n    let cofactor = match curve_params.curve_id {\n        CurveID::BLS12_381 => {\n            let x = BigInt::from(curve_params.x);\n            let n: BigInt = curve_params.n.into();\n            (BigInt::from(1) - (&x % &n)) % &n\n        }\n        _ => BigInt::from(curve_params.h),\n    };\n\n    let sum = pt0.add(&pt1);\n    assert!(sum.iso_point, \"Point {:?} is not an iso point\", sum);\n\n    Ok(apply_isogeny(sum).scalar_mul(cofactor))\n}\n\nfn map_to_curve<F>(field_element: FieldElement<F>) -> G1Point<F>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    let curve_params = F::get_curve_params();\n    let swu_params = curve_params.swu_params.unwrap();\n    let a = swu_params.a;\n    let b = swu_params.b;\n    let z = swu_params.z;\n\n    let u = field_element;\n\n    let zeta_u2 = &z * (&u * &u);\n    let ta = (&zeta_u2 * &zeta_u2) + &zeta_u2;\n    let num_x1 = &b * (&ta + FieldElement::<F>::from(1));\n\n    let div = if ta == FieldElement::from(0) {\n        &a * &z\n    } else {\n        &a * -ta\n    };\n\n    let num2_x1 = &num_x1 * &num_x1;\n    let div2 = &div * &div;\n    let div3 = &div2 * &div;\n    assert!(div3 != FieldElement::from(0));\n\n    let num_gx1 = (&num2_x1 + &a * &div2) * &num_x1 + &b * &div3;\n    let num_x2 = &zeta_u2 * &num_x1;\n\n    let gx1 = (&num_gx1 / &div3).unwrap();\n    let gx1_square = is_quad_residue(&gx1);\n    let y1 = if gx1_square {\n        let y1 = max_sqrt(&gx1);\n        assert!(&y1 * &y1 == gx1);\n        y1\n    } else {\n        let y1 = max_sqrt(&(&z * &gx1));\n        assert!(&y1 * &y1 == &z * &gx1);\n        y1\n    };\n\n    let y2 = &zeta_u2 * &u * &y1;\n    let num_x = if gx1_square { num_x1 } else { num_x2 };\n    let y = if gx1_square { y1.clone() } else { y2.clone() };\n    let x_affine = (&num_x / &div).unwrap();\n    let y_flag = element_to_biguint(&y) % BigUint::from(2usize)\n        == element_to_biguint(&u) % BigUint::from(2usize);\n    let y_affine = if !y_flag { -y.clone() } else { y.clone() };\n\n    G1Point::new(x_affine, y_affine, true).unwrap()\n}\n\nfn hash_to_field<F>(\n    message: [u8; 32],\n    count: usize,\n    hash_name: &str,\n) -> Result<Vec<FieldElement<F>>, String>\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    let len_per_elem = get_len_per_elem::<F>(None);\n    let output = match hash_name {\n        \"sha256\" => hash_to_bytes::<Sha256Hasher>(message, count, len_per_elem),\n        _ => return Err(format!(\"Unsupported hash function: {}\", hash_name)),\n    };\n    Ok(output\n        .into_iter()\n        .map(|v| element_from_bytes_be(&v))\n        .collect())\n}\n\nfn hash_to_bytes<H: Hasher>(message: [u8; 32], count: usize, len_per_elem: usize) -> Vec<Vec<u8>> {\n    let len_in_bytes = count * len_per_elem;\n    assert!(\n        len_in_bytes < (1 << 16),\n        \"Length should be smaller than 2^16\"\n    );\n    let mut expander = ExpanderXmd::<H>::new(DST, len_per_elem);\n    let uniform_bytes = expander.expand_message_xmd(&message, len_in_bytes.try_into().unwrap());\n    let mut output = vec![];\n    for i in (0..len_in_bytes).step_by(len_per_elem) {\n        output.push(uniform_bytes[i..i + len_per_elem].to_vec());\n    }\n    output\n}\n\n/*\nThis function computes the length in bytes that a hash function should output\nfor hashing an element of type `Field`.\n\n:param sec_param: The security parameter.\n:return: The length in bytes.\n*/\nfn get_len_per_elem<F>(sec_param: Option<usize>) -> usize\nwhere\n    F: IsPrimeField,\n{\n    let sec_param = sec_param.unwrap_or(128);\n    let base_field_size_in_bits = F::field_bit_size();\n    let base_field_size_with_security_padding_in_bits = base_field_size_in_bits + sec_param;\n\n    base_field_size_with_security_padding_in_bits.div_ceil(8)\n}\n\nfn is_quad_residue<F: IsPrimeField>(element: &FieldElement<F>) -> bool {\n    if element == &FieldElement::from(0) {\n        true\n    } else {\n        element.legendre_symbol() == LegendreSymbol::One\n    }\n}\n\nfn min_sqrt<F>(element: &FieldElement<F>) -> FieldElement<F>\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    let (sqrt1, sqrt2) = element.sqrt().unwrap();\n    if element_to_biguint(&sqrt1) < element_to_biguint(&sqrt2) {\n        sqrt1\n    } else {\n        sqrt2\n    }\n}\n\nfn max_sqrt<F>(element: &FieldElement<F>) -> FieldElement<F>\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    let (sqrt1, sqrt2) = element.sqrt().unwrap();\n    if element_to_biguint(&sqrt1) > element_to_biguint(&sqrt2) {\n        sqrt1\n    } else {\n        sqrt2\n    }\n}\n\npub trait Hasher: Clone {\n    fn new() -> Self;\n    fn reset(&mut self);\n    fn update(&mut self, bytes: &[u8]);\n    fn digest_size(&self) -> usize;\n    fn digest(&self) -> Vec<u8>;\n}\n\n#[derive(Clone)]\npub struct Sha256Hasher {\n    data: Vec<u8>,\n}\n\nimpl Hasher for Sha256Hasher {\n    fn new() -> Self {\n        Self { data: vec![] }\n    }\n    fn reset(&mut self) {\n        self.data = vec![];\n    }\n    fn update(&mut self, bytes: &[u8]) {\n        self.data.extend_from_slice(bytes);\n    }\n    fn digest_size(&self) -> usize {\n        32\n    }\n    fn digest(&self) -> Vec<u8> {\n        Sha256::digest(&self.data).to_vec()\n    }\n}\n\nconst G1_DOMAIN: &[u8] = b\"BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_\";\nconst DST: &[u8] = G1_DOMAIN;\nconst LONG_DST_PREFIX: &[u8] = b\"H2C-OVERSIZE-DST-\";\nconst MAX_DST_LENGTH: usize = 255;\n\npub struct ExpanderXmd<H: Hasher> {\n    pub hasher: H,\n    pub dst: Vec<u8>,\n    pub block_size: usize,\n}\n\nimpl<H: Hasher> ExpanderXmd<H> {\n    fn new(dst: &[u8], block_size: usize) -> Self {\n        Self {\n            hasher: H::new(),\n            dst: dst.to_vec(),\n            block_size,\n        }\n    }\n    fn construct_dst_prime(&self) -> Vec<u8> {\n        let mut dst_prime = if self.dst.len() > MAX_DST_LENGTH {\n            let mut hasher_copy = self.hasher.clone();\n            hasher_copy.update(LONG_DST_PREFIX);\n            hasher_copy.update(&self.dst);\n            hasher_copy.digest()\n        } else {\n            self.dst.clone()\n        };\n        dst_prime.push(dst_prime.len().try_into().unwrap());\n        dst_prime\n    }\n    fn expand_message_xmd(&mut self, msg: &[u8], n: u16) -> Vec<u8> {\n        let mut uniform_bytes = vec![];\n\n        let b_len = self.hasher.digest_size();\n        let ell = Into::<usize>::into(n).div_ceil(b_len);\n        assert!(\n            ell <= 255,\n            \"The ratio of desired output to the output size of hash function is too large!\"\n        );\n\n        let dst_prime = self.construct_dst_prime();\n        let z_pad = vec![0u8; self.block_size];\n        let lib_str: [u8; 2] = n.to_be_bytes();\n\n        self.hasher.update(&z_pad);\n        self.hasher.update(msg);\n        let mut lib_str_dst_prime = lib_str.to_vec();\n        lib_str_dst_prime.push(0);\n        lib_str_dst_prime.extend_from_slice(&dst_prime);\n        self.hasher.update(&lib_str_dst_prime);\n        let b0 = self.hasher.digest();\n        let mut hasher = self.hasher.clone();\n        hasher.reset();\n        hasher.update(&b0);\n        let mut one_dst_prime = vec![1];\n        one_dst_prime.extend_from_slice(&dst_prime);\n        hasher.update(&one_dst_prime);\n        let mut bi = hasher.digest();\n\n        uniform_bytes.extend_from_slice(&bi);\n\n        for i in 2..ell + 1 {\n            let b0_xor_bi = b0\n                .iter()\n                .zip(bi.iter())\n                .map(|(&x, &y)| x ^ y)\n                .collect::<Vec<u8>>();\n            let mut hasher = self.hasher.clone();\n            hasher.reset();\n            hasher.update(&b0_xor_bi);\n            let mut bytes_i_dst_prime = vec![i.try_into().unwrap()];\n            bytes_i_dst_prime.extend_from_slice(&dst_prime);\n            hasher.update(&bytes_i_dst_prime);\n            bi = hasher.digest();\n            uniform_bytes.extend_from_slice(&bi);\n        }\n        uniform_bytes[0..n.into()].to_vec()\n    }\n}\n\nfn apply_isogeny<F>(pt: G1Point<F>) -> G1Point<F>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    assert!(pt.iso_point, \"Point {:?} is not an iso point\", pt);\n    let (x_rational, y_rational) = get_isogeny_to_g1_map::<F>();\n    let x_affine = x_rational.evaluate(pt.x.clone());\n    let y_affine = y_rational.evaluate(pt.x) * pt.y;\n    G1Point::new(x_affine, y_affine, false).unwrap()\n}\n\nfn get_isogeny_to_g1_map<F>() -> (RationalFunction<F>, RationalFunction<F>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    let curve_params = F::get_curve_params();\n    match curve_params.curve_id {\n        CurveID::BLS12_381 => {\n            let f1 = RationalFunction::new(\n                Polynomial::new(\n                    [\n                        BigUint::from_str_radix(\"11A05F2B1E833340B809101DD99815856B303E88A2D7005FF2627B56CDB4E2C85610C2D5F2E62D6EAEAC1662734649B7\", 16).unwrap(),\n                        BigUint::from_str_radix(\"17294ED3E943AB2F0588BAB22147A81C7C17E75B2F6A8417F565E33C70D1E86B4838F2A6F318C356E834EEF1B3CB83BB\", 16).unwrap(),\n                        BigUint::from_str_radix(\"D54005DB97678EC1D1048C5D10A9A1BCE032473295983E56878E501EC68E25C958C3E3D2A09729FE0179F9DAC9EDCB0\", 16).unwrap(),\n                        BigUint::from_str_radix(\"1778E7166FCC6DB74E0609D307E55412D7F5E4656A8DBF25F1B33289F1B330835336E25CE3107193C5B388641D9B6861\", 16).unwrap(),\n                        BigUint::from_str_radix(\"E99726A3199F4436642B4B3E4118E5499DB995A1257FB3F086EEB65982FAC18985A286F301E77C451154CE9AC8895D9\", 16).unwrap(),\n                        BigUint::from_str_radix(\"1630C3250D7313FF01D1201BF7A74AB5DB3CB17DD952799B9ED3AB9097E68F90A0870D2DCAE73D19CD13C1C66F652983\", 16).unwrap(),\n                        BigUint::from_str_radix(\"D6ED6553FE44D296A3726C38AE652BFB11586264F0F8CE19008E218F9C86B2A8DA25128C1052ECADDD7F225A139ED84\", 16).unwrap(),\n                        BigUint::from_str_radix(\"17B81E7701ABDBE2E8743884D1117E53356DE5AB275B4DB1A682C62EF0F2753339B7C8F8C8F475AF9CCB5618E3F0C88E\", 16).unwrap(),\n                        BigUint::from_str_radix(\"80D3CF1F9A78FC47B90B33563BE990DC43B756CE79F5574A2C596C928C5D1DE4FA295F296B74E956D71986A8497E317\", 16).unwrap(),\n                        BigUint::from_str_radix(\"169B1F8E1BCFA7C42E0C37515D138F22DD2ECB803A0C5C99676314BAF4BB1B7FA3190B2EDC0327797F241067BE390C9E\", 16).unwrap(),\n                        BigUint::from_str_radix(\"10321DA079CE07E272D8EC09D2565B0DFA7DCCDDE6787F96D50AF36003B14866F69B771F8C285DECCA67DF3F1605FB7B\", 16).unwrap(),\n                        BigUint::from_str_radix(\"6E08C248E260E70BD1E962381EDEE3D31D79D7E22C837BC23C0BF1BC24C6B68C24B1B80B64D391FA9C8BA2E8BA2D229\", 16).unwrap(),\n                    ].iter().map(element_from_biguint).collect()\n                ),\n                Polynomial::new(\n                    [\n                        BigUint::from_str_radix(\"8CA8D548CFF19AE18B2E62F4BD3FA6F01D5EF4BA35B48BA9C9588617FC8AC62B558D681BE343DF8993CF9FA40D21B1C\", 16).unwrap(),\n                        BigUint::from_str_radix(\"12561A5DEB559C4348B4711298E536367041E8CA0CF0800C0126C2588C48BF5713DAA8846CB026E9E5C8276EC82B3BFF\", 16).unwrap(),\n                        BigUint::from_str_radix(\"B2962FE57A3225E8137E629BFF2991F6F89416F5A718CD1FCA64E00B11ACEACD6A3D0967C94FEDCFCC239BA5CB83E19\", 16).unwrap(),\n                        BigUint::from_str_radix(\"3425581A58AE2FEC83AAFEF7C40EB545B08243F16B1655154CCA8ABC28D6FD04976D5243EECF5C4130DE8938DC62CD8\", 16).unwrap(),\n                        BigUint::from_str_radix(\"13A8E162022914A80A6F1D5F43E7A07DFFDFC759A12062BB8D6B44E833B306DA9BD29BA81F35781D539D395B3532A21E\", 16).unwrap(),\n                        BigUint::from_str_radix(\"E7355F8E4E667B955390F7F0506C6E9395735E9CE9CAD4D0A43BCEF24B8982F7400D24BC4228F11C02DF9A29F6304A5\", 16).unwrap(),\n                        BigUint::from_str_radix(\"772CAACF16936190F3E0C63E0596721570F5799AF53A1894E2E073062AEDE9CEA73B3538F0DE06CEC2574496EE84A3A\", 16).unwrap(),\n                        BigUint::from_str_radix(\"14A7AC2A9D64A8B230B3F5B074CF01996E7F63C21BCA68A81996E1CDF9822C580FA5B9489D11E2D311F7D99BBDCC5A5E\", 16).unwrap(),\n                        BigUint::from_str_radix(\"A10ECF6ADA54F825E920B3DAFC7A3CCE07F8D1D7161366B74100DA67F39883503826692ABBA43704776EC3A79A1D641\", 16).unwrap(),\n                        BigUint::from_str_radix(\"95FC13AB9E92AD4476D6E3EB3A56680F682B4EE96F7D03776DF533978F31C1593174E4B4B7865002D6384D168ECDD0A\", 16).unwrap(),\n                        BigUint::from_str_radix(\"1\", 16).unwrap(),\n                    ].iter().map(element_from_biguint).collect()\n                ),\n            );\n            let f2 = RationalFunction::new(\n                Polynomial::new(\n                    [\n                        BigUint::from_str_radix(\"90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33\", 16).unwrap(),\n                        BigUint::from_str_radix(\"134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696\", 16).unwrap(),\n                        BigUint::from_str_radix(\"cc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6\", 16).unwrap(),\n                        BigUint::from_str_radix(\"1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb\", 16).unwrap(),\n                        BigUint::from_str_radix(\"8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb\", 16).unwrap(),\n                        BigUint::from_str_radix(\"16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0\", 16).unwrap(),\n                        BigUint::from_str_radix(\"4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2\", 16).unwrap(),\n                        BigUint::from_str_radix(\"987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29\", 16).unwrap(),\n                        BigUint::from_str_radix(\"9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587\", 16).unwrap(),\n                        BigUint::from_str_radix(\"e1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30\", 16).unwrap(),\n                        BigUint::from_str_radix(\"19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132\", 16).unwrap(),\n                        BigUint::from_str_radix(\"18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e\", 16).unwrap(),\n                        BigUint::from_str_radix(\"b182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8\", 16).unwrap(),\n                        BigUint::from_str_radix(\"245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133\", 16).unwrap(),\n                        BigUint::from_str_radix(\"5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b\", 16).unwrap(),\n                        BigUint::from_str_radix(\"15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604\", 16).unwrap(),\n                    ].iter().map(element_from_biguint).collect()\n                ),\n                Polynomial::new(\n                    [\n                        BigUint::from_str_radix(\"16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1\", 16).unwrap(),\n                        BigUint::from_str_radix(\"1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d\", 16).unwrap(),\n                        BigUint::from_str_radix(\"58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2\", 16).unwrap(),\n                        BigUint::from_str_radix(\"16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416\", 16).unwrap(),\n                        BigUint::from_str_radix(\"be0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d\", 16).unwrap(),\n                        BigUint::from_str_radix(\"8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac\", 16).unwrap(),\n                        BigUint::from_str_radix(\"166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c\", 16).unwrap(),\n                        BigUint::from_str_radix(\"16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9\", 16).unwrap(),\n                        BigUint::from_str_radix(\"1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a\", 16).unwrap(),\n                        BigUint::from_str_radix(\"167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55\", 16).unwrap(),\n                        BigUint::from_str_radix(\"4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8\", 16).unwrap(),\n                        BigUint::from_str_radix(\"accbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092\", 16).unwrap(),\n                        BigUint::from_str_radix(\"ad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc\", 16).unwrap(),\n                        BigUint::from_str_radix(\"2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7\", 16).unwrap(),\n                        BigUint::from_str_radix(\"e0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f\", 16).unwrap(),\n                        BigUint::from_str_radix(\"1\", 16).unwrap(),\n                    ].iter().map(element_from_biguint).collect()\n                ),\n            );\n            (f1, f2)\n        }\n        curve_id => unimplemented!(\"Isogeny for curve {:?} is not implemented\", curve_id),\n    }\n}\n\npub struct MapToCurveHint {\n    pub gx1_is_square: bool,\n    pub y1: FieldElement<BLS12381PrimeField>,\n    pub y_flag: bool,\n}\n\nimpl MapToCurveHint {\n    fn to_calldata(&self) -> Vec<BigUint> {\n        let mut call_data = vec![];\n        call_data.push(self.gx1_is_square.into());\n        call_data.extend(field_element_to_u384_limbs(&self.y1).map(BigUint::from));\n        call_data.push(self.y_flag.into());\n        call_data\n    }\n}\n\npub struct HashToCurveHint {\n    pub f0_hint: MapToCurveHint,\n    pub f1_hint: MapToCurveHint,\n}\n\nimpl HashToCurveHint {\n    fn to_calldata(&self) -> Result<Vec<BigUint>, String> {\n        let mut call_data = vec![];\n        call_data.extend(self.f0_hint.to_calldata());\n        call_data.extend(self.f1_hint.to_calldata());\n        Ok(call_data)\n    }\n}\n\nfn build_hash_to_curve_hint(message: [u8; 32]) -> Result<HashToCurveHint, String> {\n    let [felt0, felt1] = hash_to_field::<BLS12381PrimeField>(message, 2, \"sha256\")?\n        .try_into()\n        .unwrap();\n    let f0_hint = build_map_to_curve_hint(felt0);\n    let f1_hint = build_map_to_curve_hint(felt1);\n    Ok(HashToCurveHint { f0_hint, f1_hint })\n}\n\nfn build_map_to_curve_hint(u: FieldElement<BLS12381PrimeField>) -> MapToCurveHint {\n    let curve_params = BLS12381PrimeField::get_curve_params();\n    let swu_params = curve_params.swu_params.unwrap();\n    let a = swu_params.a;\n    let b = swu_params.b;\n    let z = swu_params.z;\n\n    let zeta_u2 = &z * (&u * &u);\n    let ta = (&zeta_u2 * &zeta_u2) + &zeta_u2;\n    let num_x1 = &b * (&ta + FieldElement::<BLS12381PrimeField>::from(1));\n\n    let div = if ta == FieldElement::from(0) {\n        &a * &z\n    } else {\n        &a * -ta\n    };\n\n    let num2_x1 = &num_x1 * &num_x1;\n    let div2 = &div * &div;\n    let div3 = &div2 * &div;\n    assert!(div3 != FieldElement::from(0));\n\n    let num_gx1 = (&num2_x1 + &a * &div2) * &num_x1 + &b * &div3;\n\n    let gx1 = (&num_gx1 / &div3).unwrap();\n    let gx1_square = is_quad_residue(&gx1);\n    let y1 = if gx1_square {\n        let y1 = max_sqrt(&gx1);\n        assert!(&y1 * &y1 == gx1);\n        y1\n    } else {\n        let y1 = max_sqrt(&(&z * &gx1));\n        assert!(&y1 * &y1 == &z * &gx1);\n        y1\n    };\n\n    let y2 = &zeta_u2 * &u * &y1;\n    let y = if gx1_square { y1.clone() } else { y2 };\n    let y_flag = element_to_biguint(&y) % BigUint::from(2usize)\n        == element_to_biguint(&u) % BigUint::from(2usize);\n\n    MapToCurveHint {\n        gx1_is_square: gx1_square,\n        y1,\n        y_flag,\n    }\n}\n\npub fn get_base_urls() -> Vec<&'static str> {\n    vec![\n        \"https://drand.cloudflare.com\",\n        \"https://api.drand.sh\",\n        \"https://api2.drand.sh\",\n        \"https://api3.drand.sh\",\n    ]\n}\n\npub enum DrandNetwork {\n    Default,\n    Quicknet,\n}\n\npub fn get_chain_hash(network: DrandNetwork) -> [u8; 32] {\n    match network {\n        DrandNetwork::Default => {\n            from_hex(\"8990e7a9aaed2ffed73dbd7092123d6f289930540d7651336225dc172e51b2ce\")\n        }\n        DrandNetwork::Quicknet => {\n            from_hex(\"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971\")\n        }\n    }\n}\n\npub enum CurvePoint {\n    G1Point(G1Point<BLS12381PrimeField>),\n    G2Point(G2Point<BLS12381PrimeField, BLS12381Degree2ExtensionField>),\n}\n\nimpl CurvePoint {\n    pub fn g1_point(&self) -> Option<&G1Point<BLS12381PrimeField>> {\n        match self {\n            Self::G1Point(point) => Some(point),\n            _ => None,\n        }\n    }\n    pub fn g2_point(&self) -> Option<&G2Point<BLS12381PrimeField, BLS12381Degree2ExtensionField>> {\n        match self {\n            Self::G2Point(point) => Some(point),\n            _ => None,\n        }\n    }\n}\n\npub fn deserialize_bls_point(s_string: &[u8]) -> Result<CurvePoint, String> {\n    let m_byte = s_string[0] & 0xE0;\n    if [0x20, 0x60, 0xE0].contains(&m_byte) {\n        return Err(\"Invalid encoding\".to_string());\n    }\n\n    let c_bit = (m_byte & 0x80) >> 7; // Compression bit\n    let i_bit = (m_byte & 0x40) >> 6; // Infinity bit\n    let s_bit = (m_byte & 0x20) >> 5; // Sign bit\n\n    let mut s_string = s_string.to_vec();\n    s_string[0] &= 0x1F;\n\n    if i_bit == 1 {\n        if !s_string.iter().all(|&b| b == 0) {\n            return Err(\"Invalid encoding for point at infinity\".to_string());\n        }\n        let point = if [48, 96].contains(&s_string.len()) {\n            CurvePoint::G1Point(G1Point::new_infinity())\n        } else {\n            CurvePoint::G2Point(G2Point::new_infinity())\n        };\n        return Ok(point);\n    }\n\n    if c_bit == 0 {\n        if s_string.len() == 96 {\n            // G1 point (uncompressed)\n            let x = element_from_bytes_be(&s_string[..48]);\n            let y = element_from_bytes_be(&s_string[48..]);\n            return Ok(CurvePoint::G1Point(G1Point::new(x, y, false)?));\n        }\n        if s_string.len() == 192 {\n            // G2 point (uncompressed)\n            let x0 = element_from_bytes_be(&s_string[..48]);\n            let x1 = element_from_bytes_be(&s_string[48..96]);\n            let y0 = element_from_bytes_be(&s_string[96..144]);\n            let y1 = element_from_bytes_be(&s_string[144..]);\n            return Ok(CurvePoint::G2Point(G2Point::new([x0, x1], [y0, y1])?));\n        }\n        Err(format!(\n            \"Invalid length for uncompressed point: {}\",\n            s_string.len()\n        ))\n    } else {\n        // C_bit == 1\n        if s_string.len() == 48 {\n            // G1 point (compressed)\n            let x = element_from_bytes_be(&s_string);\n            let y2 = &x * &x * &x + FieldElement::from(4);\n            let y = if s_bit == 1 {\n                max_sqrt(&y2)\n            } else {\n                min_sqrt(&y2)\n            };\n            return Ok(CurvePoint::G1Point(G1Point::new(x, y, false)?));\n        }\n        if s_string.len() == 96 {\n            // G2 point (compressed)\n            unimplemented!(\"Decoding of compressed G2 points not yet supported\");\n        }\n        Err(format!(\n            \"Invalid length for compressed point: {}\",\n            s_string.len()\n        ))\n    }\n}\n\npub struct NetworkInfo {\n    pub public_key: CurvePoint,\n    pub period: usize,\n    pub genesis_time: usize,\n    pub hash: [u8; 32],\n    pub group_hash: [u8; 32],\n    pub scheme_id: String,\n    pub beacon_id: DrandNetwork,\n}\n\npub fn get_chain_info(chain_hash: [u8; 32]) -> Result<NetworkInfo, String> {\n    let network = if chain_hash == get_chain_hash(DrandNetwork::Default) {\n        DrandNetwork::Default\n    } else if chain_hash == get_chain_hash(DrandNetwork::Quicknet) {\n        DrandNetwork::Quicknet\n    } else {\n        return Err(format!(\"Unknown chain hash: {:?}\", chain_hash));\n    };\n    let info = match network {\n        DrandNetwork::Default => {\n            let x = FieldElement::from_hex_unchecked(\"68f005eb8e6e4ca0a47c8a77ceaa5309a47978a7c71bc5cce96366b5d7a569937c529eeda66c7293784a9402801af31\");\n            let y = FieldElement::from_hex_unchecked(\"26fa5eef143aaa17c53b3c150d96a18051b718531af576803cfb9acf29b8774a8184e63c62da81ddf4d76fb0a65895c\");\n            NetworkInfo {\n                public_key: CurvePoint::G1Point(G1Point::new(x, y, false).unwrap()),\n                period: 30,\n                genesis_time: 1595431050,\n                hash: chain_hash,\n                group_hash: from_hex(\n                    \"176f93498eac9ca337150b46d21dd58673ea4e3581185f869672e59fa4cb390a\",\n                ),\n                scheme_id: \"pedersen-bls-chained\".to_string(),\n                beacon_id: DrandNetwork::Default,\n            }\n        }\n        DrandNetwork::Quicknet => {\n            let x = [\n                FieldElement::from_hex_unchecked(\"d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a\"),\n                FieldElement::from_hex_unchecked(\"3cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d106451\"),\n            ];\n            let y = [\n                FieldElement::from_hex_unchecked(\"e5db2b6bfbb01c867749cadffca88b36c24f3012ba09fc4d3022c5c37dce0f977d3adb5d183c7477c442b1f04515273\"),\n                FieldElement::from_hex_unchecked(\"1a714f2edb74119a2f2b0d5a7c75ba902d163700a61bc224ededd8e63aef7be1aaf8e93d7a9718b047ccddb3eb5d68b\"),\n            ];\n            NetworkInfo {\n                public_key: CurvePoint::G2Point(G2Point::new(x, y).unwrap()),\n                period: 3,\n                genesis_time: 1692803367,\n                hash: chain_hash,\n                group_hash: from_hex(\n                    \"f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e\",\n                ),\n                scheme_id: \"bls-unchained-g1-rfc9380\".to_string(),\n                beacon_id: DrandNetwork::Quicknet,\n            }\n        }\n    };\n    Ok(info)\n}\n\npub struct RandomnessBeacon {\n    pub round_number: usize,\n    pub randomness: [u8; 32],\n    pub signature: CurvePoint,\n    pub previous_signature: Option<CurvePoint>,\n}\n\nfn from_hex(hex: &str) -> [u8; 32] {\n    assert!(hex.len() == 64);\n    let mut bytes = [0u8; 32];\n    for i in 0..32 {\n        bytes[i] = u8::from_str_radix(&hex[2 * i..2 * (i + 1)], 16).unwrap();\n    }\n    bytes\n}\n\nfn get_randomness(chain_hash: [u8; 32], round_number: u64) -> RandomnessBeacon {\n    /* hardcoded for testing */\n    if chain_hash == get_chain_hash(DrandNetwork::Quicknet) {\n        match round_number {\n            1 => {\n                let x = FieldElement::from_hex_unchecked(\"155e7cb2d5c613ee0b2e28d6750aabbb78c39dcc96bd9d38c2c2e12198df95571de8e8e402a0cc48871c7089a2b3af4b\");\n                let y = FieldElement::from_hex_unchecked(\"0fbb74ee8788264320f2501b0fa0dd56363bcec5ce4b113b2bf1de6e331116c79191af99234824f03aeb10ab1c4c7771\");\n                return RandomnessBeacon {\n                    round_number: round_number.try_into().unwrap(),\n                    randomness: from_hex(\n                        \"1466a6cd24e327188770752f6134001c64d6efcc590ccc26b721611ad96f165a\",\n                    ),\n                    signature: CurvePoint::G1Point(G1Point::new(x, y, false).unwrap()),\n                    previous_signature: None,\n                };\n            }\n            2 => {\n                let x = FieldElement::from_hex_unchecked(\"16b6a585449b66eb12e875b64fcbab3799861a00e4dbf092d99e969a5eac57dd3f798acf61e705fe4f093db926626807\");\n                let y = FieldElement::from_hex_unchecked(\"15ff2dfd0adad43e0219d11f00f14d4e14cb0d8292bd2c0a8ec634c1b402c2a067fc5d9c53aa2aa0aab8214ca1fce58c\");\n                return RandomnessBeacon {\n                    round_number: round_number.try_into().unwrap(),\n                    randomness: from_hex(\n                        \"5782d6987841c654515a0e72b2d1ebb4e741234042c37cb19608ae50d93fb60c\",\n                    ),\n                    signature: CurvePoint::G1Point(G1Point::new(x, y, false).unwrap()),\n                    previous_signature: None,\n                };\n            }\n            3 => {\n                let x = FieldElement::from_hex_unchecked(\"13fab6df720b68cc47175f2c777e86d84187caab5770906f515ff1099cb01e4deaa027075d860823e49477b93c72bd64\");\n                let y = FieldElement::from_hex_unchecked(\"18a83e0a35ee138a879bebc1ac56ab46832bf67deaa63061fb98c8d35333557003c4cde8c2b5320ce2be2073a12b6112\");\n                return RandomnessBeacon {\n                    round_number: round_number.try_into().unwrap(),\n                    randomness: from_hex(\n                        \"7ef4621ace1c6da4eb2eee7cd901f81385bca5b189771ec0f08d0d2566dd1a21\",\n                    ),\n                    signature: CurvePoint::G1Point(G1Point::new(x, y, false).unwrap()),\n                    previous_signature: None,\n                };\n            }\n            _ => (),\n        }\n    }\n    unimplemented!(\"Not to be used in production\");\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_drand_round_to_calldata_1() {\n        let _ = drand_round_to_calldata(1).unwrap();\n    }\n\n    #[test]\n    fn test_drand_round_to_calldata_2() {\n        let _ = drand_round_to_calldata(2).unwrap();\n    }\n\n    #[test]\n    fn test_drand_round_to_calldata_3() {\n        let _ = drand_round_to_calldata(3).unwrap();\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/calldata/drand_tlock_calldata.rs",
    "content": "use crate::algebra::extf_mul::from_e2;\nuse crate::algebra::g1point::G1Point;\nuse crate::algebra::g2point::G2Point;\nuse crate::calldata::drand_calldata::{\n    digest_func, get_chain_hash, get_chain_info, hash_to_curve, DrandNetwork,\n};\nuse crate::definitions::{BLS12381PrimeField, CurveParamsProvider, FieldElement};\nuse crate::io::field_element_to_u384_limbs;\nuse crate::pairing::final_exp_witness::{bls12_381_final_exp_witness, to_bls};\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree12ExtensionField as BLS12381Degree12ExtensionField;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField as BLS12381Degree2ExtensionField;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::pairing::BLS12381AtePairing;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::twist::BLS12381TwistCurve;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::point::ShortWeierstrassProjectivePoint;\nuse lambdaworks_math::elliptic_curve::traits::{FromAffine, IsPairing};\nuse num_bigint::BigUint;\nuse sha2::{Digest, Sha256};\n\npub fn drand_tlock_encrypt_calldata_builder(values: &[BigUint]) -> Result<Vec<BigUint>, String> {\n    if values.len() != 3 {\n        return Err(format!(\"Invalid data array length: {}\", values.len()));\n    }\n    let round_number: usize = (&values[0])\n        .try_into()\n        .map_err(|e| format!(\"Invalid round number: {}\", e))?;\n    let message = {\n        let bytes = values[1].to_bytes_be();\n        if bytes.len() > 16 {\n            return Err(format!(\"Invalid message array length: {}\", bytes.len()));\n        }\n        let mut padded_bytes = [0; 16];\n        let len = bytes.len();\n        padded_bytes[16 - len..].copy_from_slice(&bytes);\n        padded_bytes\n    };\n    let randomness = {\n        let bytes = values[2].to_bytes_be();\n        if bytes.len() > 16 {\n            return Err(format!(\"Invalid randomness array length: {}\", bytes.len()));\n        }\n        let mut padded_bytes = [0; 16];\n        let len = bytes.len();\n        padded_bytes[16 - len..].copy_from_slice(&bytes);\n        padded_bytes\n    };\n    let chain = get_chain_info(get_chain_hash(DrandNetwork::Quicknet))?;\n    let public_key = chain.public_key.g2_point().unwrap().clone();\n    let cipher_text = encrypt_for_round(public_key, round_number, message, randomness)?;\n    let cipher_text_hint = cipher_text.to_calldata();\n    let size = 1 + cipher_text_hint.len();\n    let mut call_data = vec![size.into()];\n    call_data.push(round_number.into());\n    call_data.extend(cipher_text_hint);\n    assert!(call_data.len() == 1 + size);\n    Ok(call_data)\n}\n\npub struct CipherText {\n    pub u: G2Point<BLS12381PrimeField, BLS12381Degree2ExtensionField>,\n    pub v: [u8; 16],\n    pub w: [u8; 16],\n}\n\nimpl CipherText {\n    pub fn to_calldata(&self) -> Vec<BigUint> {\n        let u_x = from_e2(self.u.x.clone());\n        let u_y = from_e2(self.u.y.clone());\n        let mut call_data = vec![];\n        call_data.extend(field_element_to_u384_limbs(&u_x[0]).map(BigUint::from));\n        call_data.extend(field_element_to_u384_limbs(&u_x[1]).map(BigUint::from));\n        call_data.extend(field_element_to_u384_limbs(&u_y[0]).map(BigUint::from));\n        call_data.extend(field_element_to_u384_limbs(&u_y[1]).map(BigUint::from));\n        for b in self.v {\n            call_data.push(b.into());\n        }\n        for b in self.w {\n            call_data.push(b.into());\n        }\n        call_data\n    }\n}\n\npub fn encrypt_for_round(\n    public_key: G2Point<BLS12381PrimeField, BLS12381Degree2ExtensionField>,\n    round_number: usize,\n    message: [u8; 16],\n    sigma: [u8; 16],\n) -> Result<CipherText, String> {\n    let round_number = round_number.try_into().unwrap();\n\n    let msg_at_round = digest_func(round_number);\n\n    let pt_at_round = hash_to_curve::<BLS12381PrimeField>(msg_at_round, \"sha256\")?;\n\n    let gid = bls12381_single_pairing(pt_at_round, public_key)?;\n\n    let r = {\n        let mut bytes = vec![];\n        bytes.extend(b\"IBE-H3\");\n        bytes.extend(sigma);\n        bytes.extend(message);\n        let output = sha256_digest(&bytes);\n        BigUint::from_bytes_le(&expand_message_drand(&output, 32))\n    };\n    let r = {\n        let curve_params = BLS12381PrimeField::get_curve_params();\n        r % curve_params.n\n    };\n\n    let u = G2Point::generator().scalar_mul::<BLS12381TwistCurve>(r.clone().into());\n\n    let r_gid = bls12_381_final_exp_witness::pow_custom(&gid, &r);\n\n    let r_gid_serialized = {\n        let mut bytes = vec![];\n        let mut values = to_bls(r_gid);\n        values.reverse();\n        for value in values {\n            let mut padded_value_bytes = [0u8; 48];\n            let value_bytes = value.to_bytes_be();\n            let len = value_bytes.len();\n            assert!(len <= 48);\n            padded_value_bytes[48 - len..].copy_from_slice(&value_bytes);\n            bytes.extend(padded_value_bytes);\n        }\n        bytes\n    };\n\n    let r_gid_hash: [u8; 16] = {\n        let mut bytes = vec![];\n        bytes.extend(b\"IBE-H2\");\n        bytes.extend(r_gid_serialized);\n        let output = sha256_digest(&bytes);\n        output[..16].to_vec().try_into().unwrap()\n    };\n\n    let v: [u8; 16] = {\n        let bytes = sigma\n            .into_iter()\n            .zip(r_gid_hash)\n            .map(|(a, b)| a ^ b)\n            .collect::<Vec<_>>();\n        bytes.try_into().unwrap()\n    };\n\n    let sigma_hash: [u8; 16] = {\n        let mut bytes = vec![];\n        bytes.extend(b\"IBE-H4\");\n        bytes.extend(sigma);\n        let output = sha256_digest(&bytes);\n        output[..16].to_vec().try_into().unwrap()\n    };\n\n    let w: [u8; 16] = {\n        let bytes = message\n            .into_iter()\n            .zip(sigma_hash)\n            .map(|(a, b)| a ^ b)\n            .collect::<Vec<_>>();\n        bytes.try_into().unwrap()\n    };\n\n    Ok(CipherText { u, v, w })\n}\n\nfn bls12381_single_pairing(\n    g1_point: G1Point<BLS12381PrimeField>,\n    g2_point: G2Point<BLS12381PrimeField, BLS12381Degree2ExtensionField>,\n) -> Result<FieldElement<BLS12381Degree12ExtensionField>, String> {\n    let g1_point = ShortWeierstrassProjectivePoint::from_affine(g1_point.x, g1_point.y)\n        .map_err(|err| format!(\"{:?}\", err))?;\n    let g2_point = ShortWeierstrassProjectivePoint::from_affine(g2_point.x, g2_point.y)\n        .map_err(|err| format!(\"{:?}\", err))?;\n    let product = BLS12381AtePairing::compute_batch(&[(&g1_point, &g2_point)])\n        .map_err(|err| format!(\"{:?}\", err))?;\n    Ok(product)\n}\n\nfn expand_message_drand(msg: &[u8], buf_size: usize) -> Vec<u8> {\n    assert!(buf_size <= 32);\n    const BITS_TO_MASK_FOR_BLS12381: usize = 1;\n    let curve_params = BLS12381PrimeField::get_curve_params();\n    let order = curve_params.n;\n    for i in 1..65536 {\n        let i: u16 = i.try_into().unwrap();\n\n        let hash_result = {\n            let mut bytes = vec![];\n            bytes.extend(i.to_le_bytes());\n            bytes.extend(msg);\n            sha256_digest(&bytes)\n        };\n\n        let hash_result = {\n            let mut bytes = hash_result;\n            bytes[0] >>= BITS_TO_MASK_FOR_BLS12381;\n            bytes\n        };\n\n        let reversed_hash = {\n            let mut bytes = hash_result;\n            bytes.reverse();\n            bytes\n        };\n\n        let scalar = &BigUint::from_bytes_le(&reversed_hash) % &order;\n        if scalar != BigUint::from(0usize) {\n            return reversed_hash[..buf_size].to_vec();\n        }\n    }\n    panic!(\"You are insanely unlucky and should have been hit by a meteor before now\");\n}\n\nfn sha256_digest(data: &[u8]) -> [u8; 32] {\n    Sha256::digest(data).into()\n}\n\npub fn get_drand_round_at(genesis_time: usize, period: usize, time: usize) -> usize {\n    assert!(time >= genesis_time);\n    (time - genesis_time) / period + 1\n}\n\npub fn get_drand_round_time(genesis_time: usize, period: usize, round_number: usize) -> usize {\n    assert!(round_number >= 1);\n    genesis_time + period * (round_number - 1)\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_encrypt_for_round_1() {\n        let chain = get_chain_info(get_chain_hash(DrandNetwork::Quicknet)).unwrap();\n        let public_key = chain.public_key.g2_point().unwrap().clone();\n        let cypher_text =\n            encrypt_for_round(public_key, 1, *b\"1234567890abcdef\", *b\"deaf00013000beef\").unwrap();\n        let expected_v = [\n            211, 169, 110, 124, 57, 249, 177, 59, 54, 206, 185, 125, 242, 220, 74, 184,\n        ];\n        let expected_w = [\n            60, 105, 170, 165, 30, 223, 128, 199, 37, 162, 104, 106, 18, 148, 250, 43,\n        ];\n        assert_eq!(cypher_text.v, expected_v);\n        assert_eq!(cypher_text.w, expected_w);\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/calldata/full_proof_with_hints/groth16.rs",
    "content": "// use crate::algebra::g1g2pair::G1G2Pair;\nuse crate::calldata::mpc_calldata::mpc_calldata_builder;\nuse crate::calldata::msm_calldata::msm_calldata_builder;\nuse crate::calldata::G1PointBigUint;\nuse crate::calldata::G2PointBigUint;\nuse crate::constants::{get_risc0_constants, SP1_VERIFIER_HASH, SP1_VERIFIER_VERSION};\nuse crate::definitions::{\n    BLS12381PrimeField, BN254PrimeField, CurveID, CurveParamsProvider, FieldElement,\n};\nuse crate::io::{\n    biguint_split, element_to_biguint, field_elements_from_big_uints,\n    parse_g1_points_from_flattened_field_elements_list,\n};\nuse hex;\nuse lambdaworks_math::field::traits::IsPrimeField;\nuse lambdaworks_math::traits::ByteConversion;\nuse num_bigint::{BigInt, BigUint, Sign};\nuse num_traits::Num;\nuse sha2::{Digest, Sha256};\nuse starknet_types_core::felt::Felt;\npub struct Groth16Proof {\n    pub a: G1PointBigUint,\n    pub b: G2PointBigUint,\n    pub c: G1PointBigUint,\n    pub public_inputs: Vec<BigUint>,\n    pub image_id_journal_risc0: Option<(Vec<u8>, Vec<u8>)>, // Only used for risc0 proofs\n    pub vkey_public_values_sp1: Option<(Vec<u8>, Vec<u8>)>, // Only used for sp1 proofs\n}\n\nimpl Groth16Proof {\n    pub fn flatten(&self) -> Vec<BigUint> {\n        let mut result = Vec::new();\n        result.extend(self.a.flatten());\n        result.extend(self.b.flatten());\n        result.extend(self.c.flatten());\n        result\n    }\n\n    pub fn from(\n        values: Vec<BigUint>,\n        image_id_journal_risc0: Option<(Vec<u8>, Vec<u8>)>,\n        vkey_public_values_sp1: Option<(Vec<u8>, Vec<u8>)>,\n    ) -> Self {\n        let a = G1PointBigUint::from(values[0..2].to_vec());\n        let b = G2PointBigUint::from(values[2..6].to_vec());\n        let c = G1PointBigUint::from(values[6..8].to_vec());\n        let public_inputs = values[8..].to_vec();\n        Groth16Proof {\n            a,\n            b,\n            c,\n            public_inputs,\n            image_id_journal_risc0,\n            vkey_public_values_sp1,\n        }\n    }\n\n    pub fn serialize_to_calldata(&self) -> Vec<BigUint> {\n        let mut cd: Vec<BigUint> = vec![];\n\n        // Serialize a.x, a.y, b.x[0], b.x[1], b.y[0], b.y[1], c.x, c.y directly\n        // This matches the Python: cd.extend(io.bigint_split(self.a.x)) etc.\n        for v in [\n            &self.a.x, &self.a.y, &self.b.x0, &self.b.x1, &self.b.y0, &self.b.y1, &self.c.x,\n            &self.c.y,\n        ] {\n            cd.extend(biguint_split::<4, 96>(v).iter().map(|&x| BigUint::from(x)));\n        }\n\n        let risc0_mode = self.image_id_journal_risc0.is_some();\n        let _sp1_mode = self.vkey_public_values_sp1.is_some();\n\n        if risc0_mode && !_sp1_mode {\n            // Risc0 mode.\n            // Public inputs will be reconstructed from image id and journal.\n            let (image_id, journal) = self.image_id_journal_risc0.as_ref().unwrap();\n            let image_id_u256 = BigUint::from_bytes_be(image_id);\n            let image_id_u256_split = biguint_split::<8, 32>(&image_id_u256).map(BigUint::from);\n            let image_id_u256_split_reversed: Vec<BigUint> =\n                image_id_u256_split.iter().rev().cloned().collect();\n            // Span of u32, length 8.\n            cd.push(BigUint::from(8u64));\n            cd.extend(image_id_u256_split_reversed);\n            // Span of u8, length depends on input\n            cd.push(BigUint::from(journal.len()));\n            cd.extend(journal.iter().map(|&x| BigUint::from(x)));\n        } else if _sp1_mode && !risc0_mode {\n            // SP1 mode - matches Python implementation exactly\n            let (_vkey, public_values) = self.vkey_public_values_sp1.as_ref().unwrap();\n\n            // public_inputs[0] is the vkey as BigUint - serialize as 2 limbs of 128 bits\n            // This matches Python: cd.extend(io.bigint_split(self.public_inputs[0], 2, 2**128))\n            let vkey_int = &self.public_inputs[0]; // This should already be the vkey as BigUint\n            let vkey_limbs = biguint_split::<2, 128>(vkey_int);\n            cd.extend(vkey_limbs.iter().map(|&x| BigUint::from(x)));\n\n            // Serialize public_values (public_inputs_sp1) as u32 array\n            // This matches Python SP1 serialization exactly\n            let n_bytes = public_values.len();\n            assert_eq!(\n                n_bytes % 32,\n                0,\n                \"SP1 public inputs must be a multiple of 32 bytes\"\n            );\n            let n_words = n_bytes / 32;\n\n            // Add number of words first (matches Python: cd.append(n_words))\n            cd.push(BigUint::from(n_words));\n\n            // Then serialize as u32 values (matches Python: for i in range(0, n_bytes, 4): cd.append(int.from_bytes(...)))\n            for i in (0..n_bytes).step_by(4) {\n                let word = u32::from_be_bytes([\n                    public_values[i],\n                    public_values[i + 1],\n                    public_values[i + 2],\n                    public_values[i + 3],\n                ]);\n                cd.push(BigUint::from(word));\n            }\n        } else if risc0_mode && _sp1_mode {\n            panic!(\"Cannot have both RISC0 and SP1 modes enabled\");\n        } else {\n            // Normal mode.\n            cd.push(BigUint::from(self.public_inputs.len()));\n            for pub_input in &self.public_inputs {\n                cd.extend(\n                    biguint_split::<2, 128>(pub_input)\n                        .iter()\n                        .map(|&x| BigUint::from(x)),\n                );\n            }\n        }\n\n        cd\n    }\n\n    pub fn from_risc0(seal: Vec<u8>, image_id: Vec<u8>, journal: Vec<u8>) -> Self {\n        assert!(image_id.len() <= 32, \"image_id must be 32 bytes\");\n\n        let (control_root, bn254_control_id) = get_risc0_constants();\n\n        let (control_root_0, control_root_1) = risc0_utils::split_digest(&control_root);\n\n        let proof = &seal[4..];\n\n        let mut hasher = Sha256::new();\n        hasher.update(&journal);\n        let journal_digest = hasher.finalize();\n\n        let claim_digest = risc0_utils::ok_digest(&image_id, &journal_digest);\n        let claim_digest_biguint = BigUint::from_bytes_be(&claim_digest);\n        let (claim0, claim1) = risc0_utils::split_digest(&claim_digest_biguint);\n\n        Groth16Proof {\n            a: G1PointBigUint {\n                x: BigUint::from_bytes_be(&proof[0..32]),\n                y: BigUint::from_bytes_be(&proof[32..64]),\n            },\n            b: G2PointBigUint {\n                x0: BigUint::from_bytes_be(&proof[96..128]),\n                x1: BigUint::from_bytes_be(&proof[64..96]),\n                y0: BigUint::from_bytes_be(&proof[160..192]),\n                y1: BigUint::from_bytes_be(&proof[128..160]),\n            },\n            c: G1PointBigUint {\n                x: BigUint::from_bytes_be(&proof[192..224]),\n                y: BigUint::from_bytes_be(&proof[224..256]),\n            },\n            public_inputs: vec![\n                control_root_0,\n                control_root_1,\n                claim0,\n                claim1,\n                bn254_control_id,\n            ],\n            image_id_journal_risc0: Some((image_id, journal)),\n            vkey_public_values_sp1: None,\n        }\n    }\n    pub fn from_sp1(vkey: Vec<u8>, public_values: Vec<u8>, proof: Vec<u8>) -> Self {\n        // Skip the first 4 bytes (selector)\n        let selector = &proof[..4];\n        let proof = &proof[4..];\n\n        // Validate SP1 verifier version by checking selector against expected hash\n        let expected_selector = hex::decode(&SP1_VERIFIER_HASH[2..]).unwrap()[..4].to_vec();\n        if selector != expected_selector {\n            panic!(\n                \"Invalid SP1 proof version. Expected {:02x}{:02x}{:02x}{:02x} for version {}, got {:02x}{:02x}{:02x}{:02x}\\nPlease use SP1 verifier version {} or contact garaga developers to update the SP1 verifier version.\",\n                expected_selector[0], expected_selector[1], expected_selector[2], expected_selector[3],\n                SP1_VERIFIER_VERSION,\n                selector[0], selector[1], selector[2], selector[3],\n                SP1_VERIFIER_VERSION\n            );\n        }\n\n        // sha256(public_values) % 2**253\n        assert!(\n            public_values.len().is_multiple_of(32),\n            \"public_values must be a multiple of 32 bytes\"\n        );\n        let pub_input_hash = BigUint::from_bytes_be(&Sha256::digest(&public_values));\n        // 2^253 as BigUint to avoid overflow\n        let modulus = BigUint::from(2u64).pow(253);\n        let pub_input_hash = pub_input_hash % modulus;\n\n        let mut public_inputs_sp1 = Vec::new();\n        for i in 0..public_values.len() / 32 {\n            let public_input = BigUint::from_bytes_be(&public_values[i * 32..(i + 1) * 32]);\n            public_inputs_sp1.push(public_input);\n        }\n\n        Groth16Proof {\n            a: G1PointBigUint {\n                x: BigUint::from_bytes_be(&proof[0..32]),\n                y: BigUint::from_bytes_be(&proof[32..64]),\n            },\n            b: G2PointBigUint {\n                x0: BigUint::from_bytes_be(&proof[96..128]),\n                x1: BigUint::from_bytes_be(&proof[64..96]),\n                y0: BigUint::from_bytes_be(&proof[160..192]),\n                y1: BigUint::from_bytes_be(&proof[128..160]),\n            },\n            c: G1PointBigUint {\n                x: BigUint::from_bytes_be(&proof[192..224]),\n                y: BigUint::from_bytes_be(&proof[224..256]),\n            },\n            public_inputs: vec![BigUint::from_bytes_be(&vkey), pub_input_hash],\n            image_id_journal_risc0: None,\n            vkey_public_values_sp1: Some((vkey, public_values)),\n        }\n    }\n}\n\n#[derive(Debug, PartialEq)]\npub struct Groth16VerificationKey {\n    pub alpha: G1PointBigUint,\n    pub beta: G2PointBigUint,\n    pub gamma: G2PointBigUint,\n    pub delta: G2PointBigUint,\n    pub ic: Vec<G1PointBigUint>,\n}\n\nimpl Groth16VerificationKey {\n    pub fn from(values: Vec<BigUint>) -> Self {\n        let alpha = G1PointBigUint::from(values[0..2].to_vec());\n        let beta = G2PointBigUint::from(values[2..6].to_vec());\n        let gamma = G2PointBigUint::from(values[6..10].to_vec());\n        let delta = G2PointBigUint::from(values[10..14].to_vec());\n        let ic = values[14..]\n            .chunks(2)\n            .map(|chunk| G1PointBigUint::from(chunk.to_vec()))\n            .collect();\n\n        Groth16VerificationKey {\n            alpha,\n            beta,\n            gamma,\n            delta,\n            ic,\n        }\n    }\n}\n\npub fn get_sp1_vk() -> Groth16VerificationKey {\n    let vk_hex = [\n        \"2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e2\",\n        \"14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926\",\n        \"e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab\",\n        \"967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c\",\n        \"1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8\",\n        \"304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a7\",\n        \"1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\",\n        \"198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\",\n        \"12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\",\n        \"90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b\",\n        \"3ff41f4ba0c37fe2caf27354d28e4b8f83d3b76777a63b327d736bffb0122ed\",\n        \"1cc7cb8de715675f21f01ecc9b46d236e0865e0cc020024521998269845f74e6\",\n        \"17387b4b9cf03927909b4f1c3d80fcd6865afc4a264a04499f7e2f6df690dd85\",\n        \"2ed3b19b5eb39db0d19a3d72dcd590ac85a971def614f4fd11b56b3c5e53c44c\",\n        \"26091e1cafb0ad8a4ea0a694cd3743ebf524779233db734c451d28b58aa9758e\",\n        \"9ff50a6b8b11c3ca6fdb2690a124f8ce25489fefa65a3e782e7ba70b66690e\",\n        \"61c3fd0fd3da25d2607c227d090cca750ed36c6ec878755e537c1c48951fb4c\",\n        \"fa17ae9c2033379df7b5c65eff0e107055e9a273e6119a212dd09eb51707219\",\n        \"4eab241388a79817fe0e0e2ead0b2ec4ffdec51a16028dee020634fd129e71c\",\n        \"7236256d21c60d02f0bdbf95cff83e03ea9e16fca56b18d5544b0889a65c1f5\",\n    ];\n\n    Groth16VerificationKey::from(\n        vk_hex\n            .iter()\n            .map(|s| BigUint::from_str_radix(s, 16).unwrap())\n            .collect::<Vec<BigUint>>(),\n    )\n}\n\npub fn get_groth16_calldata_felt(\n    proof: &Groth16Proof,\n    vk: &Groth16VerificationKey,\n    curve_id: CurveID,\n) -> Result<Vec<Felt>, String> {\n    let calldata = get_groth16_calldata(proof, vk, curve_id)?;\n\n    Ok(calldata.into_iter().map(Felt::from).collect())\n}\n\npub fn get_groth16_calldata(\n    proof: &Groth16Proof,\n    vk: &Groth16VerificationKey,\n    curve_id: CurveID,\n) -> Result<Vec<BigUint>, String> {\n    let mut calldata: Vec<BigUint> = Vec::new();\n    let risc0_mode = proof.image_id_journal_risc0.is_some();\n    let _sp1_mode = proof.vkey_public_values_sp1.is_some();\n    // Calculate vk_x\n    let vk_x = calculate_vk_x(vk, &proof.public_inputs, curve_id);\n\n    // MPC calldata\n    let mut mpc_values: Vec<BigUint> = vec![];\n    mpc_values.extend(vk_x.flatten());\n    mpc_values.extend(vk.gamma.flatten());\n    mpc_values.extend(proof.c.flatten());\n    mpc_values.extend(vk.delta.flatten());\n    mpc_values.extend(proof.a.neg(curve_id).flatten());\n    mpc_values.extend(proof.b.flatten());\n\n    let mut mpc_public_pair: Vec<BigUint> = vec![];\n    mpc_public_pair.extend(vk.alpha.flatten());\n    mpc_public_pair.extend(vk.beta.flatten());\n\n    let mpc_calldata = mpc_calldata_builder(curve_id as usize, &mpc_values, 2, &mpc_public_pair)?;\n\n    // MSM calldata\n    let msm_calldata = match risc0_mode {\n        false => msm_calldata_builder(\n            &vk.ic\n                .iter()\n                .skip(1)\n                .flat_map(|point| vec![point.x.clone(), point.y.clone()])\n                .collect::<Vec<BigUint>>(),\n            &proof.public_inputs,\n            curve_id as usize,\n            false,\n            true,\n        )?,\n        true => msm_calldata_builder(\n            &[\n                vk.ic[3].x.clone(),\n                vk.ic[3].y.clone(),\n                vk.ic[4].x.clone(),\n                vk.ic[4].y.clone(),\n            ],\n            &[\n                proof.public_inputs[2].clone(),\n                proof.public_inputs[3].clone(),\n            ],\n            curve_id as usize,\n            false,\n            true,\n        )?,\n    };\n\n    calldata.push(BigUint::from(0u64)); // Len Placeholder.\n    calldata.extend(proof.serialize_to_calldata());\n    calldata.extend(mpc_calldata);\n    calldata.extend(msm_calldata);\n\n    // Update length\n    calldata[0] = BigUint::from(calldata.len() - 1);\n\n    Ok(calldata)\n}\n\nfn calculate_vk_x(\n    vk: &Groth16VerificationKey,\n    pub_inputs: &[BigUint],\n    curve_id: CurveID,\n) -> G1PointBigUint {\n    match curve_id {\n        CurveID::BN254 => vk_x_handle_curve::<BN254PrimeField>(vk, pub_inputs),\n        CurveID::BLS12_381 => vk_x_handle_curve::<BLS12381PrimeField>(vk, pub_inputs),\n        _ => panic!(\"Unsupported curve ID for vk_x\"),\n    }\n}\n\nfn vk_x_handle_curve<F>(vk: &Groth16VerificationKey, pub_inputs: &[BigUint]) -> G1PointBigUint\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    // Parse IC points from BigUint to FieldElement\n    let ic_elements = field_elements_from_big_uints::<F>(\n        &vk.ic\n            .iter()\n            .flat_map(|point| vec![point.x.clone(), point.y.clone()])\n            .collect::<Vec<BigUint>>(),\n    );\n    let ic_points = parse_g1_points_from_flattened_field_elements_list(&ic_elements).unwrap();\n\n    // Start with IC[0]\n    let mut vk_x = ic_points[0].clone();\n\n    // Compute IC[0] + pub_input_i * IC[i] for each public input\n    for (i, pub_input) in pub_inputs.iter().enumerate() {\n        let pub_input_bigint = BigInt::from_biguint(Sign::Plus, pub_input.clone());\n        let scaled_ic = ic_points[i + 1].scalar_mul(pub_input_bigint);\n        vk_x = vk_x.add(&scaled_ic);\n    }\n\n    // Convert G1Point back to G1PointBigUint\n    G1PointBigUint {\n        x: element_to_biguint(&vk_x.x),\n        y: element_to_biguint(&vk_x.y),\n    }\n}\n\npub mod risc0_utils {\n    use super::Groth16VerificationKey;\n    use hex;\n    use num_bigint::BigUint;\n    use num_traits::Num;\n    use sha2::{Digest, Sha256};\n\n    pub fn get_risc0_vk() -> Groth16VerificationKey {\n        let vk_hex = [\n            \"2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e2\",\n            \"14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926\",\n            \"e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab\",\n            \"967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c\",\n            \"1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8\",\n            \"304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a7\",\n            \"1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\",\n            \"198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\",\n            \"12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\",\n            \"90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b\",\n            \"1aa085ff28179a12d922dba0547057ccaae94b9d69cfaa4e60401fea7f3e0333\",\n            \"3b03cd5effa95ac9bee94f1f5ef907157bda4812ccf0b4c91f42bb629f83a1c\",\n            \"1e60f31fcbf757e837e867178318832d0b2d74d59e2fea1c7142df187d3fc6d3\",\n            \"110c10134f200b19f6490846d518c9aea868366efb7228ca5c91d2940d030762\",\n            \"12ac9a25dcd5e1a832a9061a082c15dd1d61aa9c4d553505739d0f5d65dc3be4\",\n            \"25aa744581ebe7ad91731911c898569106ff5a2d30f3eee2b23c60ee980acd4\",\n            \"707b920bc978c02f292fae2036e057be54294114ccc3c8769d883f688a1423f\",\n            \"2e32a094b7589554f7bc357bf63481acd2d55555c203383782a4650787ff6642\",\n            \"bca36e2cbe6394b3e249751853f961511011c7148e336f4fd974644850fc347\",\n            \"2ede7c9acf48cf3a3729fa3d68714e2a8435d4fa6db8f7f409c153b1fcdf9b8b\",\n            \"1b8af999dbfbb3927c091cc2aaf201e488cbacc3e2c6b6fb5a25f9112e04f2a7\",\n            \"2b91a26aa92e1b6f5722949f192a81c850d586d81a60157f3e9cf04f679cccd6\",\n            \"2b5f494ed674235b8ac1750bdfd5a7615f002d4a1dcefeddd06eda5a076ccd0d\",\n            \"2fe520ad2020aab9cbba817fcbb9a863b8a76ff88f14f912c5e71665b2ad5e82\",\n            \"f1c3c0d5d9da0fa03666843cde4e82e869ba5252fce3c25d5940320b1c4d493\",\n            \"214bfcff74f425f6fe8c0d07b307482d8bc8bb2f3608f68287aa01bd0b69e809\",\n        ];\n\n        Groth16VerificationKey::from(\n            vk_hex\n                .iter()\n                .map(|s| BigUint::from_str_radix(s, 16).unwrap())\n                .collect::<Vec<BigUint>>(),\n        )\n    }\n\n    pub fn split_digest(digest: &BigUint) -> (BigUint, BigUint) {\n        // Convert to bytes, ensure 32 bytes, and reverse\n        let mut bytes = digest.to_bytes_be();\n        bytes.resize(32, 0);\n        bytes.reverse();\n\n        // Split into two 128-bit parts\n        let lower = BigUint::from_bytes_be(&bytes[0..16]);\n        let upper = BigUint::from_bytes_be(&bytes[16..32]);\n\n        (upper, lower)\n    }\n\n    struct ExitCode {\n        system: u32,\n        user: u32,\n    }\n\n    struct Output {\n        journal_digest: Vec<u8>,\n        assumptions_digest: Vec<u8>,\n    }\n\n    impl Output {\n        fn digest(&self) -> Vec<u8> {\n            let mut hasher = Sha256::new();\n            hasher.update(Sha256::digest(b\"risc0.Output\"));\n            hasher.update(&self.journal_digest);\n            hasher.update(&self.assumptions_digest);\n            hasher.update((2u16 << 8).to_be_bytes());\n            hasher.finalize().to_vec()\n        }\n    }\n\n    struct ReceiptClaim {\n        pre_state_digest: Vec<u8>,\n        post_state_digest: Vec<u8>,\n        exit_code: ExitCode,\n        input: Vec<u8>,\n        output: Vec<u8>,\n        tag_digest: Vec<u8>,\n    }\n\n    impl ReceiptClaim {\n        fn digest(&self) -> Vec<u8> {\n            let mut hasher = Sha256::new();\n            hasher.update(&self.tag_digest);\n            hasher.update(&self.input);\n            hasher.update(&self.pre_state_digest);\n            hasher.update(&self.post_state_digest);\n            hasher.update(&self.output);\n            hasher.update((self.exit_code.system << 24).to_be_bytes());\n            hasher.update((self.exit_code.user << 24).to_be_bytes());\n            hasher.update((4u16 << 8).to_be_bytes());\n            hasher.finalize().to_vec()\n        }\n    }\n\n    pub fn ok_digest(image_id: &[u8], journal_digest: &[u8]) -> Vec<u8> {\n        let system_state_zero_digest =\n            hex::decode(\"A3ACC27117418996340B84E5A90F3EF4C49D22C79E44AAD822EC9C313E1EB8E2\")\n                .unwrap();\n        let output = Output {\n            journal_digest: journal_digest.to_vec(),\n            assumptions_digest: vec![0; 32],\n        };\n        let receipt_claim = ReceiptClaim {\n            pre_state_digest: image_id.to_vec(),\n            post_state_digest: system_state_zero_digest,\n            exit_code: ExitCode { system: 0, user: 0 },\n            input: vec![0; 32],\n            output: output.digest(),\n            tag_digest: Sha256::digest(b\"risc0.ReceiptClaim\").to_vec(),\n        };\n        receipt_claim.digest()\n    }\n}\n\n#[cfg(test)]\nmod test_groth16_calldata {\n    use super::risc0_utils::{ok_digest, split_digest};\n    use super::Groth16Proof;\n    use hex;\n    use num_bigint::BigUint;\n    use sha2::{Digest, Sha256};\n\n    #[test]\n    fn test_ok_digest_1() {\n        let image_id = vec![\n            0xd0, 0x1c, 0x15, 0xaf, 0xa7, 0x68, 0xa0, 0x5b, 0x21, 0x3a, 0x9e, 0x5f, 0xcd, 0xcc,\n            0x57, 0x24, 0xa2, 0x94, 0x7e, 0x00, 0x09, 0x8c, 0x7e, 0xc3, 0x4c, 0xcb, 0xe2, 0x94,\n            0x6b, 0xbc, 0x00, 0x13,\n        ];\n        let journal = vec![\n            0x6a, 0x75, 0x73, 0x74, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20,\n            0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74,\n        ];\n        let journal_digest = Sha256::digest(&journal);\n        let digest = ok_digest(&image_id, &journal_digest);\n\n        let (claim0, claim1) = split_digest(&BigUint::from_bytes_be(&digest));\n        assert_eq!(\n            hex::encode(digest),\n            \"e58e40abecebcfa4af85692fca5ed77d4ccb4b3f640f5e684e4faf3a36b0c4e0\"\n        );\n\n        assert_eq!(\n            hex::encode(claim0.to_bytes_be()),\n            \"7dd75eca2f6985afa4cfebecab408ee5\"\n        );\n\n        assert_eq!(\n            hex::encode(claim1.to_bytes_be()),\n            \"e0c4b0363aaf4f4e685e0f643f4bcb4c\"\n        );\n    }\n\n    #[test]\n    fn test_ok_digest_2() {\n        let image_id = vec![\n            0x07, 0x9f, 0x23, 0xf1, 0x3e, 0xa8, 0x1b, 0xde, 0x11, 0xa9, 0x49, 0x12, 0xba, 0xdf,\n            0xe8, 0xd9, 0x2d, 0x5b, 0xe1, 0x13, 0x4b, 0x2c, 0x99, 0x1b, 0x99, 0x55, 0xe9, 0xc1,\n            0x89, 0x41, 0xba, 0x69,\n        ];\n\n        let journal: Vec<u8> = vec![0x01, 0x00, 0x00, 0x78];\n        let journal_digest = Sha256::digest(&journal);\n        let digest = ok_digest(&image_id, &journal_digest);\n\n        let (claim0, claim1) = split_digest(&BigUint::from_bytes_be(&digest));\n        assert_eq!(\n            hex::encode(claim0.to_bytes_be()),\n            \"d284212f0d87311c45e710301d86639f\"\n        );\n        assert_eq!(\n            hex::encode(claim1.to_bytes_be()),\n            \"8875bcad22cdcfda1e2878df4e414108\"\n        );\n    }\n    #[test]\n    #[should_panic(expected = \"Invalid SP1 proof version\")]\n    fn test_from_sp1_invalid_selector() {\n        // Create test data with invalid selector (wrong first 4 bytes)\n        let vkey = vec![0u8; 32];\n        let public_values = vec![0u8; 64]; // Must be multiple of 32\n        let mut proof = vec![0xde, 0xad, 0xbe, 0xef]; // Invalid selector\n        proof.extend(vec![0u8; 252]); // Add remaining proof data\n\n        // This should panic with our error message\n        Groth16Proof::from_sp1(vkey, public_values, proof);\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/calldata/full_proof_with_hints/zk_honk.rs",
    "content": "use crate::algebra::g1g2pair::G1G2Pair;\nuse crate::algebra::g1point::G1Point;\nuse crate::algebra::g2point::G2Point;\nuse crate::calldata::mpc_calldata;\nuse crate::calldata::msm_calldata;\nuse crate::calldata::G1PointBigUint;\nuse crate::definitions::BN254PrimeField;\nuse crate::definitions::CurveID;\nuse crate::definitions::FieldElement;\nuse crate::definitions::GrumpkinPrimeField;\nuse crate::definitions::Stark252PrimeField;\nuse crate::io::{element_from_biguint, element_to_biguint, field_element_to_u256_limbs};\nuse lambdaworks_crypto::hash::poseidon::starknet::PoseidonCairoStark252;\nuse lambdaworks_crypto::hash::poseidon::Poseidon;\nuse lambdaworks_math::field::errors::FieldError;\nuse lambdaworks_math::field::traits::IsPrimeField;\nuse lambdaworks_math::traits::ByteConversion;\nuse num_bigint::BigUint;\nuse sha3::{Digest, Keccak256};\n\npub const NUMBER_OF_SUBRELATIONS: usize = 28;\npub const NUMBER_OF_ALPHAS: usize = NUMBER_OF_SUBRELATIONS - 1;\npub const NUMBER_OF_ENTITIES: usize = 41;\npub const NUMBER_UNSHIFTED: usize = 36;\npub const NUMBER_TO_BE_SHIFTED: usize = 5;\npub const SHIFTED_COMMITMENTS_START: usize = 30;\npub const MAX_LOG_N: usize = 23;\npub const MAX_CIRCUIT_SIZE: usize = 1 << MAX_LOG_N;\npub const PAIRING_POINT_OBJECT_LENGTH: usize = 16;\npub const CONST_PROOF_SIZE_LOG_N: usize = 28;\n\npub const NUM_WITNESS_ENTITIES: usize = 8;\npub const NUM_ELEMENTS_COMM: usize = 2;\npub const NUM_ELEMENTS_FR: usize = 1;\n\n/// Calculate expected proof size based on log_circuit_size\npub fn calculate_proof_size(log_circuit_size: usize) -> usize {\n    let mut proof_size = NUM_WITNESS_ENTITIES * NUM_ELEMENTS_COMM; // 16\n    proof_size += NUM_ELEMENTS_COMM * 4; // 8 (Libra concat, grand sum, quotient comms + Gemini masking)\n    proof_size += log_circuit_size * ZK_BATCHED_RELATION_PARTIAL_LENGTH * NUM_ELEMENTS_FR; // sumcheck univariates\n    proof_size += NUMBER_OF_ENTITIES * NUM_ELEMENTS_FR; // 41 (sumcheck evaluations)\n    proof_size += NUM_ELEMENTS_FR * 3; // 3 (Libra sum, claimed eval, Gemini masking eval)\n    proof_size += log_circuit_size * NUM_ELEMENTS_FR; // Gemini a evaluations\n    proof_size += LIBRA_EVALUATIONS * NUM_ELEMENTS_FR; // 4 (libra evaluations)\n    proof_size += (log_circuit_size - 1) * NUM_ELEMENTS_COMM; // Gemini Fold commitments\n    proof_size += NUM_ELEMENTS_COMM * 2; // 4 (Shplonk Q and KZG W)\n    proof_size += PAIRING_POINT_OBJECT_LENGTH; // 16 (pairing inputs)\n    proof_size\n}\npub const ZK_BATCHED_RELATION_PARTIAL_LENGTH: usize = 9;\npub const SUBGROUP_SIZE: usize = 256;\npub const LIBRA_COMMITMENTS: usize = 3;\npub const LIBRA_EVALUATIONS: usize = 4;\npub const LIBRA_UNIVARIATES_LENGTH: usize = 9;\n\n// Number of G1 points in the VK\npub const VK_NUM_POINTS: usize = 28;\n\npub struct HonkVerificationKey {\n    pub log_circuit_size: usize,\n    pub public_inputs_size: usize,\n    pub public_inputs_offset: usize,\n    pub qm: G1PointBigUint,\n    pub qc: G1PointBigUint,\n    pub ql: G1PointBigUint,\n    pub qr: G1PointBigUint,\n    pub qo: G1PointBigUint,\n    pub q4: G1PointBigUint,\n    pub q_lookup: G1PointBigUint,\n    pub q_arith: G1PointBigUint,\n    pub q_delta_range: G1PointBigUint,\n    pub q_elliptic: G1PointBigUint,\n    pub q_memory: G1PointBigUint,\n    pub q_nnf: G1PointBigUint,\n    pub q_poseidon2_external: G1PointBigUint,\n    pub q_poseidon2_internal: G1PointBigUint,\n    pub s1: G1PointBigUint,\n    pub s2: G1PointBigUint,\n    pub s3: G1PointBigUint,\n    pub s4: G1PointBigUint,\n    pub id1: G1PointBigUint,\n    pub id2: G1PointBigUint,\n    pub id3: G1PointBigUint,\n    pub id4: G1PointBigUint,\n    pub t1: G1PointBigUint,\n    pub t2: G1PointBigUint,\n    pub t3: G1PointBigUint,\n    pub t4: G1PointBigUint,\n    pub lagrange_first: G1PointBigUint,\n    pub lagrange_last: G1PointBigUint,\n    pub vk_hash: BigUint,\n}\n\nimpl HonkVerificationKey {\n    pub fn from_bytes(vk_bytes: &[u8]) -> Result<Self, String> {\n        // VK format: 3 * 32 bytes for log_circuit_size, public_inputs_size, public_inputs_offset\n        // then 28 * 64 bytes for G1 points\n        let expected_len = 3 * 32 + VK_NUM_POINTS * 64;\n        if vk_bytes.len() != expected_len {\n            return Err(format!(\n                \"Invalid input length: {} (expected {})\",\n                vk_bytes.len(),\n                expected_len\n            ));\n        }\n\n        // Compute vk_hash using keccak256, then mod by BN254 curve order\n        let vk_hash_bytes = Keccak256::digest(vk_bytes);\n        let vk_hash_full = BigUint::from_bytes_be(&vk_hash_bytes);\n        // BN254 curve order (n)\n        let bn254_n = BigUint::parse_bytes(\n            b\"30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001\",\n            16,\n        )\n        .unwrap();\n        let vk_hash = vk_hash_full % bn254_n;\n\n        // Parse header fields (32 bytes each)\n        let log_circuit_size = BigUint::from_bytes_be(&vk_bytes[0..32]);\n        let public_inputs_size = BigUint::from_bytes_be(&vk_bytes[32..64]);\n        let public_inputs_offset = BigUint::from_bytes_be(&vk_bytes[64..96]);\n\n        let log_circuit_size: usize = log_circuit_size\n            .try_into()\n            .map_err(|e: num_bigint::TryFromBigIntError<BigUint>| e.to_string())?;\n        let public_inputs_size: usize = public_inputs_size\n            .try_into()\n            .map_err(|e: num_bigint::TryFromBigIntError<BigUint>| e.to_string())?;\n        let public_inputs_offset: usize = public_inputs_offset\n            .try_into()\n            .map_err(|e: num_bigint::TryFromBigIntError<BigUint>| e.to_string())?;\n\n        if public_inputs_offset != 1 {\n            return Err(format!(\n                \"Invalid public inputs offset: {}\",\n                public_inputs_offset\n            ));\n        }\n\n        if log_circuit_size > CONST_PROOF_SIZE_LOG_N {\n            return Err(format!(\"Invalid log circuit size: {}\", log_circuit_size));\n        }\n\n        if public_inputs_size < PAIRING_POINT_OBJECT_LENGTH {\n            return Err(format!(\n                \"Invalid public inputs size: {}\",\n                public_inputs_size\n            ));\n        }\n\n        // Parse G1 points (64 bytes each: 32 for x, 32 for y)\n        let mut cursor = 96;\n        let mut points = vec![];\n        for _ in 0..VK_NUM_POINTS {\n            let x = BigUint::from_bytes_be(&vk_bytes[cursor..cursor + 32]);\n            let y = BigUint::from_bytes_be(&vk_bytes[cursor + 32..cursor + 64]);\n            points.push(G1PointBigUint { x, y });\n            cursor += 64;\n        }\n\n        let [qm, qc, ql, qr, qo, q4, q_lookup, q_arith, q_delta_range, q_elliptic, q_memory, q_nnf, q_poseidon2_external, q_poseidon2_internal, s1, s2, s3, s4, id1, id2, id3, id4, t1, t2, t3, t4, lagrange_first, lagrange_last] =\n            points.try_into().unwrap();\n\n        Ok(Self {\n            log_circuit_size,\n            public_inputs_size,\n            public_inputs_offset,\n            qm,\n            qc,\n            ql,\n            qr,\n            qo,\n            q4,\n            q_lookup,\n            q_arith,\n            q_delta_range,\n            q_elliptic,\n            q_memory,\n            q_nnf,\n            q_poseidon2_external,\n            q_poseidon2_internal,\n            s1,\n            s2,\n            s3,\n            s4,\n            id1,\n            id2,\n            id3,\n            id4,\n            t1,\n            t2,\n            t3,\n            t4,\n            lagrange_first,\n            lagrange_last,\n            vk_hash,\n        })\n    }\n}\n\npub trait Hasher {\n    fn reset(&mut self);\n    fn digest_as_bytes(&self) -> Vec<u8>;\n    fn update_bytes(&mut self, data: &[u8]);\n\n    fn digest(&self) -> BigUint {\n        let bytes = self.digest_as_bytes();\n        BigUint::from_bytes_be(&bytes)\n    }\n\n    fn digest_reset(&mut self) -> Vec<u8> {\n        let result = self.digest_as_bytes();\n        self.reset();\n        result\n    }\n\n    fn update(&mut self, value: &BigUint) {\n        // Pad to 32 bytes\n        let mut bytes = value.to_bytes_be();\n        while bytes.len() < 32 {\n            bytes.insert(0, 0);\n        }\n        self.update_bytes(&bytes);\n    }\n\n    fn update_point(&mut self, point: &G1PointBigUint) {\n        self.update(&point.x);\n        self.update(&point.y);\n    }\n}\n\npub struct KeccakHasher {\n    data: Vec<u8>,\n}\n\nimpl Default for KeccakHasher {\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl KeccakHasher {\n    pub fn new() -> Self {\n        KeccakHasher { data: vec![] }\n    }\n}\n\nimpl Hasher for KeccakHasher {\n    fn reset(&mut self) {\n        self.data = vec![];\n    }\n\n    fn update_bytes(&mut self, data: &[u8]) {\n        self.data.extend_from_slice(data);\n    }\n\n    fn digest_as_bytes(&self) -> Vec<u8> {\n        let hash = Keccak256::digest(&self.data);\n        let hash_int = BigUint::from_bytes_be(&hash);\n        // Reduce modulo Grumpkin field prime (same as BN254 curve order)\n        let grumpkin_p = BigUint::parse_bytes(\n            b\"30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001\",\n            16,\n        )\n        .unwrap();\n        let reduced = hash_int % grumpkin_p;\n        // Convert back to 32 bytes\n        let mut bytes = reduced.to_bytes_be();\n        while bytes.len() < 32 {\n            bytes.insert(0, 0);\n        }\n        bytes\n    }\n}\n\npub struct ZKHonkProof {\n    pub public_inputs: Vec<BigUint>,\n    pub pairing_point_object: [BigUint; PAIRING_POINT_OBJECT_LENGTH],\n    pub w1: G1PointBigUint,\n    pub w2: G1PointBigUint,\n    pub w3: G1PointBigUint,\n    pub w4: G1PointBigUint,\n    pub z_perm: G1PointBigUint,\n    pub lookup_read_counts: G1PointBigUint,\n    pub lookup_read_tags: G1PointBigUint,\n    pub lookup_inverses: G1PointBigUint,\n    pub libra_commitments: [G1PointBigUint; 3],\n    pub libra_sum: BigUint,\n    pub sumcheck_univariates:\n        [[BigUint; ZK_BATCHED_RELATION_PARTIAL_LENGTH]; CONST_PROOF_SIZE_LOG_N],\n    pub sumcheck_evaluations: [BigUint; NUMBER_OF_ENTITIES],\n    pub libra_evaluation: BigUint,\n    pub gemini_masking_poly: G1PointBigUint,\n    pub gemini_masking_eval: BigUint,\n    pub gemini_fold_comms: [G1PointBigUint; CONST_PROOF_SIZE_LOG_N - 1],\n    pub gemini_a_evaluations: [BigUint; CONST_PROOF_SIZE_LOG_N],\n    pub libra_poly_evals: [BigUint; 4],\n    pub shplonk_q: G1PointBigUint,\n    pub kzg_quotient: G1PointBigUint,\n}\n\nimpl ZKHonkProof {\n    pub fn from_bytes(\n        proof_bytes: &[u8],\n        public_inputs_bytes: &[u8],\n        log_circuit_size: usize,\n    ) -> Result<Self, String> {\n        let expected_proof_size = calculate_proof_size(log_circuit_size);\n        if proof_bytes.len() != 32 * expected_proof_size {\n            return Err(format!(\n                \"Invalid proof bytes length: {} (expected {})\",\n                proof_bytes.len(),\n                32 * expected_proof_size\n            ));\n        }\n\n        let mut values = vec![];\n        for i in (0..).step_by(32).take(expected_proof_size) {\n            values.push(BigUint::from_bytes_be(&proof_bytes[i..i + 32]));\n        }\n\n        if !public_inputs_bytes.len().is_multiple_of(32) {\n            return Err(format!(\n                \"Invalid public input bytes length: {}\",\n                public_inputs_bytes.len()\n            ));\n        }\n\n        let public_inputs_size = public_inputs_bytes.len() / 32;\n        let mut public_inputs = vec![];\n        for i in (0..).step_by(32).take(public_inputs_size) {\n            public_inputs.push(BigUint::from_bytes_be(&public_inputs_bytes[i..i + 32]));\n        }\n\n        Self::from(values, public_inputs, log_circuit_size)\n    }\n\n    pub fn from(\n        values: Vec<BigUint>,\n        public_inputs: Vec<BigUint>,\n        log_circuit_size: usize,\n    ) -> Result<Self, String> {\n        let expected_proof_size = calculate_proof_size(log_circuit_size);\n        if values.len() != expected_proof_size {\n            return Err(format!(\n                \"Invalid proof length: {} (expected {})\",\n                values.len(),\n                expected_proof_size\n            ));\n        }\n\n        let mut offset = 0;\n\n        // Parse pairing point object\n        let pairing_point_object: [BigUint; PAIRING_POINT_OBJECT_LENGTH] = values\n            [offset..offset + PAIRING_POINT_OBJECT_LENGTH]\n            .to_vec()\n            .try_into()\n            .unwrap();\n        offset += PAIRING_POINT_OBJECT_LENGTH;\n\n        fn parse_g1_proof_point(values: [BigUint; 2]) -> G1PointBigUint {\n            let [x, y] = values;\n            G1PointBigUint { x, y }\n        }\n\n        // Parse 9 G1 points: w1, w2, w3, lookup_read_counts, lookup_read_tags, w4, lookup_inverses, z_perm, libra_commitment_0\n        let mut points = vec![];\n        for i in (offset..).step_by(2).take(9) {\n            points.push(parse_g1_proof_point(\n                values[i..i + 2].to_vec().try_into().unwrap(),\n            ));\n        }\n        offset += 9 * 2;\n        let [w1, w2, w3, lookup_read_counts, lookup_read_tags, w4, lookup_inverses, z_perm, libra_commitment_0] =\n            points.try_into().unwrap();\n\n        let libra_sum = values[offset].clone();\n        offset += 1;\n\n        // Parse sumcheck univariates\n        let mut sumcheck_univariates = vec![];\n        for i in (offset..)\n            .step_by(ZK_BATCHED_RELATION_PARTIAL_LENGTH)\n            .take(log_circuit_size)\n        {\n            sumcheck_univariates.push(\n                values[i..i + ZK_BATCHED_RELATION_PARTIAL_LENGTH]\n                    .to_vec()\n                    .try_into()\n                    .unwrap(),\n            );\n        }\n        // Fill rest with zeros\n        while sumcheck_univariates.len() < CONST_PROOF_SIZE_LOG_N {\n            sumcheck_univariates.push([0u8; ZK_BATCHED_RELATION_PARTIAL_LENGTH].map(BigUint::from));\n        }\n        let sumcheck_univariates: [[BigUint; ZK_BATCHED_RELATION_PARTIAL_LENGTH];\n            CONST_PROOF_SIZE_LOG_N] = sumcheck_univariates.try_into().unwrap();\n        offset += log_circuit_size * ZK_BATCHED_RELATION_PARTIAL_LENGTH;\n\n        // Parse sumcheck evaluations\n        let sumcheck_evaluations: [BigUint; NUMBER_OF_ENTITIES] = values\n            [offset..offset + NUMBER_OF_ENTITIES]\n            .to_vec()\n            .try_into()\n            .unwrap();\n        offset += NUMBER_OF_ENTITIES;\n\n        let libra_evaluation = values[offset].clone();\n        offset += 1;\n\n        // Parse libra_commitment_1, libra_commitment_2, gemini_masking_poly\n        let mut points = vec![];\n        for i in (offset..).step_by(2).take(3) {\n            points.push(parse_g1_proof_point(\n                values[i..i + 2].to_vec().try_into().unwrap(),\n            ));\n        }\n        offset += 3 * 2;\n        let [libra_commitment_1, libra_commitment_2, gemini_masking_poly] =\n            points.try_into().unwrap();\n\n        let libra_commitments = [libra_commitment_0, libra_commitment_1, libra_commitment_2];\n\n        let gemini_masking_eval = values[offset].clone();\n        offset += 1;\n\n        // Parse gemini fold comms\n        let mut gemini_fold_comms = vec![];\n        for i in (offset..).step_by(2).take(log_circuit_size - 1) {\n            gemini_fold_comms.push(parse_g1_proof_point(\n                values[i..i + 2].to_vec().try_into().unwrap(),\n            ));\n        }\n        // Fill rest with dummy points\n        while gemini_fold_comms.len() < CONST_PROOF_SIZE_LOG_N - 1 {\n            gemini_fold_comms.push(G1PointBigUint {\n                x: BigUint::from(0u8),\n                y: BigUint::from(0u8),\n            });\n        }\n        let gemini_fold_comms: [G1PointBigUint; CONST_PROOF_SIZE_LOG_N - 1] =\n            gemini_fold_comms.try_into().unwrap();\n        offset += (log_circuit_size - 1) * 2;\n\n        // Parse gemini a evaluations\n        let mut gemini_a_evaluations = values[offset..offset + log_circuit_size].to_vec();\n        // Fill rest with zeros\n        while gemini_a_evaluations.len() < CONST_PROOF_SIZE_LOG_N {\n            gemini_a_evaluations.push(BigUint::from(0u8));\n        }\n        let gemini_a_evaluations: [BigUint; CONST_PROOF_SIZE_LOG_N] =\n            gemini_a_evaluations.try_into().unwrap();\n        offset += log_circuit_size;\n\n        let libra_poly_evals: [BigUint; 4] =\n            values[offset..offset + 4].to_vec().try_into().unwrap();\n        offset += 4;\n\n        // Parse shplonk_q, kzg_quotient\n        let mut points = vec![];\n        for i in (offset..).step_by(2).take(2) {\n            points.push(parse_g1_proof_point(\n                values[i..i + 2].to_vec().try_into().unwrap(),\n            ));\n        }\n        let [shplonk_q, kzg_quotient] = points.try_into().unwrap();\n        offset += 2 * 2;\n\n        assert_eq!(offset, expected_proof_size);\n\n        Ok(Self {\n            public_inputs,\n            pairing_point_object,\n            w1,\n            w2,\n            w3,\n            w4,\n            z_perm,\n            lookup_read_counts,\n            lookup_read_tags,\n            lookup_inverses,\n            libra_commitments,\n            libra_sum,\n            sumcheck_univariates,\n            sumcheck_evaluations,\n            libra_evaluation,\n            gemini_masking_poly,\n            gemini_masking_eval,\n            gemini_fold_comms,\n            gemini_a_evaluations,\n            libra_poly_evals,\n            shplonk_q,\n            kzg_quotient,\n        })\n    }\n}\n\npub struct ZKHonkTranscript {\n    pub eta: BigUint,\n    pub eta_two: BigUint,\n    pub eta_three: BigUint,\n    pub beta: BigUint,\n    pub gamma: BigUint,\n    pub alpha: BigUint,\n    pub gate_challenge: BigUint,\n    pub libra_challenge: BigUint,\n    pub sumcheck_u_challenges: [BigUint; CONST_PROOF_SIZE_LOG_N],\n    pub rho: BigUint,\n    pub gemini_r: BigUint,\n    pub shplonk_nu: BigUint,\n    pub shplonk_z: BigUint,\n}\n\nimpl ZKHonkTranscript {\n    pub fn from_proof(\n        vk: &HonkVerificationKey,\n        proof: &ZKHonkProof,\n    ) -> Result<\n        (\n            Self,\n            FieldElement<Stark252PrimeField>,\n            FieldElement<Stark252PrimeField>,\n        ),\n        String,\n    > {\n        if proof.public_inputs.len() != vk.public_inputs_size - PAIRING_POINT_OBJECT_LENGTH {\n            return Err(format!(\n                \"Public inputs length mismatch: proof {}, vk {}\",\n                proof.public_inputs.len(),\n                vk.public_inputs_size - PAIRING_POINT_OBJECT_LENGTH\n            ));\n        }\n        Ok(compute_zk_transcript(vk, proof, KeccakHasher::new()))\n    }\n}\n\npub fn get_zk_honk_calldata(\n    proof: &ZKHonkProof,\n    vk: &HonkVerificationKey,\n) -> Result<Vec<BigUint>, String> {\n    let (transcript, transcript_state, _) = ZKHonkTranscript::from_proof(vk, proof)?;\n\n    fn element_on_curve(element: &BigUint) -> FieldElement<GrumpkinPrimeField> {\n        element_from_biguint(element)\n    }\n\n    fn g1_point_on_curve(point: &G1PointBigUint) -> Result<G1Point<BN254PrimeField>, String> {\n        G1Point::new(\n            element_from_biguint(&point.x),\n            element_from_biguint(&point.y),\n            false,\n        )\n    }\n\n    let public_inputs: Vec<FieldElement<GrumpkinPrimeField>> =\n        proof.public_inputs.iter().map(element_on_curve).collect();\n    let pairing_point_object: Vec<FieldElement<GrumpkinPrimeField>> = proof\n        .pairing_point_object\n        .iter()\n        .map(element_on_curve)\n        .collect();\n    let w1 = g1_point_on_curve(&proof.w1)?;\n    let w2 = g1_point_on_curve(&proof.w2)?;\n    let w3 = g1_point_on_curve(&proof.w3)?;\n    let w4 = g1_point_on_curve(&proof.w4)?;\n    let z_perm = g1_point_on_curve(&proof.z_perm)?;\n    let lookup_read_counts = g1_point_on_curve(&proof.lookup_read_counts)?;\n    let lookup_read_tags = g1_point_on_curve(&proof.lookup_read_tags)?;\n    let lookup_inverses = g1_point_on_curve(&proof.lookup_inverses)?;\n    let libra_commitments: Vec<G1Point<BN254PrimeField>> = proof\n        .libra_commitments\n        .iter()\n        .map(g1_point_on_curve)\n        .collect::<Result<Vec<_>, _>>()?;\n    let libra_sum = element_on_curve(&proof.libra_sum);\n    let sumcheck_univariates: Vec<Vec<FieldElement<GrumpkinPrimeField>>> = proof\n        .sumcheck_univariates\n        .iter()\n        .map(|v| v.iter().map(element_on_curve).collect())\n        .collect();\n    let sumcheck_evaluations: [FieldElement<GrumpkinPrimeField>; NUMBER_OF_ENTITIES] = proof\n        .sumcheck_evaluations\n        .iter()\n        .map(element_on_curve)\n        .collect::<Vec<_>>()\n        .try_into()\n        .unwrap();\n    let libra_evaluation = element_on_curve(&proof.libra_evaluation);\n    let gemini_masking_poly = g1_point_on_curve(&proof.gemini_masking_poly)?;\n    let gemini_masking_eval = element_on_curve(&proof.gemini_masking_eval);\n    let gemini_fold_comms: Vec<G1Point<BN254PrimeField>> = proof\n        .gemini_fold_comms\n        .iter()\n        .map(g1_point_on_curve)\n        .collect::<Result<Vec<_>, _>>()?;\n    let gemini_a_evaluations: [FieldElement<GrumpkinPrimeField>; CONST_PROOF_SIZE_LOG_N] = proof\n        .gemini_a_evaluations\n        .iter()\n        .map(element_on_curve)\n        .collect::<Vec<_>>()\n        .try_into()\n        .unwrap();\n    let libra_poly_evals: [FieldElement<GrumpkinPrimeField>; 4] = proof\n        .libra_poly_evals\n        .iter()\n        .map(element_on_curve)\n        .collect::<Vec<_>>()\n        .try_into()\n        .unwrap();\n    let shplonk_q = g1_point_on_curve(&proof.shplonk_q)?;\n    let kzg_quotient = g1_point_on_curve(&proof.kzg_quotient)?;\n\n    let qm = g1_point_on_curve(&vk.qm)?;\n    let qc = g1_point_on_curve(&vk.qc)?;\n    let ql = g1_point_on_curve(&vk.ql)?;\n    let qr = g1_point_on_curve(&vk.qr)?;\n    let qo = g1_point_on_curve(&vk.qo)?;\n    let q4 = g1_point_on_curve(&vk.q4)?;\n    let q_lookup = g1_point_on_curve(&vk.q_lookup)?;\n    let q_arith = g1_point_on_curve(&vk.q_arith)?;\n    let q_delta_range = g1_point_on_curve(&vk.q_delta_range)?;\n    let q_elliptic = g1_point_on_curve(&vk.q_elliptic)?;\n    let q_memory = g1_point_on_curve(&vk.q_memory)?;\n    let q_nnf = g1_point_on_curve(&vk.q_nnf)?;\n    let q_poseidon2_external = g1_point_on_curve(&vk.q_poseidon2_external)?;\n    let q_poseidon2_internal = g1_point_on_curve(&vk.q_poseidon2_internal)?;\n    let s1 = g1_point_on_curve(&vk.s1)?;\n    let s2 = g1_point_on_curve(&vk.s2)?;\n    let s3 = g1_point_on_curve(&vk.s3)?;\n    let s4 = g1_point_on_curve(&vk.s4)?;\n    let id1 = g1_point_on_curve(&vk.id1)?;\n    let id2 = g1_point_on_curve(&vk.id2)?;\n    let id3 = g1_point_on_curve(&vk.id3)?;\n    let id4 = g1_point_on_curve(&vk.id4)?;\n    let t1 = g1_point_on_curve(&vk.t1)?;\n    let t2 = g1_point_on_curve(&vk.t2)?;\n    let t3 = g1_point_on_curve(&vk.t3)?;\n    let t4 = g1_point_on_curve(&vk.t4)?;\n    let lagrange_first = g1_point_on_curve(&vk.lagrange_first)?;\n    let lagrange_last = g1_point_on_curve(&vk.lagrange_last)?;\n\n    let sumcheck_u_challenges: [FieldElement<GrumpkinPrimeField>; CONST_PROOF_SIZE_LOG_N] =\n        transcript\n            .sumcheck_u_challenges\n            .iter()\n            .map(element_on_curve)\n            .collect::<Vec<_>>()\n            .try_into()\n            .unwrap();\n    let rho = element_on_curve(&transcript.rho);\n    let gemini_r = element_on_curve(&transcript.gemini_r);\n    let shplonk_nu = element_on_curve(&transcript.shplonk_nu);\n    let shplonk_z = element_on_curve(&transcript.shplonk_z);\n\n    let consistent = check_evals_consistency(\n        &libra_evaluation,\n        &libra_poly_evals,\n        &gemini_r,\n        &sumcheck_u_challenges,\n        vk.log_circuit_size,\n    )\n    .map_err(|e| format!(\"Field error: {:?}\", e))?;\n    if !consistent {\n        return Err(\"Consistency check failed\".to_string());\n    }\n\n    let scalars = extract_msm_scalars(\n        vk.log_circuit_size,\n        compute_shplemini_msm_scalars(\n            vk.log_circuit_size,\n            &sumcheck_evaluations,\n            &gemini_masking_eval,\n            &gemini_a_evaluations,\n            &libra_poly_evals,\n            &gemini_r,\n            &rho,\n            &shplonk_z,\n            &shplonk_nu,\n            &sumcheck_u_challenges,\n        )\n        .map_err(|e| format!(\"Field error: {:?}\", e))?,\n    );\n\n    let mut scalars_msm = scalars;\n\n    // Swap last two scalars\n    let len = scalars_msm.len();\n    if len >= 2 {\n        scalars_msm.swap(len - 1, len - 2);\n    }\n\n    // Place first scalar just after the vk_lagrange_last point (index 28)\n    if !scalars_msm.is_empty() {\n        let first_scalar = scalars_msm.remove(0);\n        scalars_msm.insert(28, first_scalar);\n    }\n\n    let proof_data = {\n        let mut call_data = vec![];\n        let call_data_ref = &mut call_data;\n\n        fn push<T>(call_data_ref: &mut Vec<BigUint>, value: T)\n        where\n            BigUint: From<T>,\n        {\n            call_data_ref.push(value.into());\n        }\n\n        fn push_element<F>(call_data_ref: &mut Vec<BigUint>, element: &FieldElement<F>)\n        where\n            F: IsPrimeField,\n            FieldElement<F>: ByteConversion,\n        {\n            let limbs = field_element_to_u256_limbs(element);\n            for limb in limbs {\n                push(call_data_ref, limb);\n            }\n        }\n\n        fn push_elements(\n            call_data_ref: &mut Vec<BigUint>,\n            elements: &[FieldElement<GrumpkinPrimeField>],\n            prepend_length: bool,\n        ) {\n            if prepend_length {\n                push(call_data_ref, elements.len());\n            }\n            for element in elements {\n                push_element(call_data_ref, element);\n            }\n        }\n\n        fn push_point(call_data_ref: &mut Vec<BigUint>, point: &G1Point<BN254PrimeField>) {\n            push_element(call_data_ref, &point.x);\n            push_element(call_data_ref, &point.y);\n        }\n\n        push_elements(call_data_ref, &public_inputs, true);\n        push_elements(call_data_ref, &pairing_point_object, true);\n        push_point(call_data_ref, &w1);\n        push_point(call_data_ref, &w2);\n        push_point(call_data_ref, &w3);\n        push_point(call_data_ref, &w4);\n        push_point(call_data_ref, &z_perm);\n        push_point(call_data_ref, &lookup_read_counts);\n        push_point(call_data_ref, &lookup_read_tags);\n        push_point(call_data_ref, &lookup_inverses);\n        push(call_data_ref, libra_commitments.len());\n        for point in &libra_commitments {\n            push_point(call_data_ref, point);\n        }\n        push_element(call_data_ref, &libra_sum);\n        push_elements(\n            call_data_ref,\n            &(0..vk.log_circuit_size)\n                .flat_map(|i| sumcheck_univariates[i].clone())\n                .collect::<Vec<_>>(),\n            true,\n        );\n        push_elements(call_data_ref, &sumcheck_evaluations, true);\n        push_element(call_data_ref, &libra_evaluation);\n        push_point(call_data_ref, &gemini_masking_poly);\n        push_element(call_data_ref, &gemini_masking_eval);\n        push(call_data_ref, vk.log_circuit_size - 1);\n        for point in &gemini_fold_comms[..vk.log_circuit_size - 1] {\n            push_point(call_data_ref, point);\n        }\n        push_elements(\n            call_data_ref,\n            &gemini_a_evaluations[..vk.log_circuit_size],\n            true,\n        );\n        push_elements(call_data_ref, &libra_poly_evals, true);\n        push_point(call_data_ref, &shplonk_q);\n        push_point(call_data_ref, &kzg_quotient);\n\n        call_data\n    };\n\n    let mut points = vec![\n        qm,                   // 0\n        qc,                   // 1\n        ql,                   // 2\n        qr,                   // 3\n        qo,                   // 4\n        q4,                   // 5\n        q_lookup,             // 6\n        q_arith,              // 7\n        q_delta_range,        // 8\n        q_elliptic,           // 9\n        q_memory,             // 10\n        q_nnf,                // 11\n        q_poseidon2_external, // 12\n        q_poseidon2_internal, // 13\n        s1,                   // 14\n        s2,                   // 15\n        s3,                   // 16\n        s4,                   // 17\n        id1,                  // 18\n        id2,                  // 19\n        id3,                  // 20\n        id4,                  // 21\n        t1,                   // 22\n        t2,                   // 23\n        t3,                   // 24\n        t4,                   // 25\n        lagrange_first,       // 26\n        lagrange_last,        // 27\n        gemini_masking_poly,  // 28\n        w1,                   // 29\n        w2,                   // 30\n        w3,                   // 31\n        w4,                   // 32\n        z_perm,               // 33\n        lookup_inverses,      // 34\n        lookup_read_counts,   // 35\n        lookup_read_tags,     // 36\n    ];\n\n    points.extend(gemini_fold_comms[0..vk.log_circuit_size - 1].to_vec());\n    points.extend(libra_commitments);\n    points.push(kzg_quotient.clone());\n    points.push(G1Point::generator());\n\n    let two = FieldElement::<Stark252PrimeField>::one().double();\n\n    let vk_hash_element: FieldElement<Stark252PrimeField> = element_from_biguint(&vk.vk_hash);\n    let mut state = [vk_hash_element, transcript_state, two];\n    PoseidonCairoStark252::hades_permutation(&mut state);\n\n    let msm_data =\n        msm_calldata::calldata_builder(&points, &scalars_msm, CurveID::BN254 as usize, false, true);\n\n    let p_0 = G1Point::msm(&points, &scalars_msm).add(&shplonk_q);\n    let p_1 = kzg_quotient.neg();\n    let g2_point_kzg_1 = G2Point::generator();\n    let g2_point_kzg_2 = G2Point::new(\n        [\n            FieldElement::from_hex_unchecked(\n                \"0118C4D5B837BCC2BC89B5B398B5974E9F5944073B32078B7E231FEC938883B0\",\n            ),\n            FieldElement::from_hex_unchecked(\n                \"260E01B251F6F1C7E7FF4E580791DEE8EA51D87A358E038B4EFE30FAC09383C1\",\n            ),\n        ],\n        [\n            FieldElement::from_hex_unchecked(\n                \"22FEBDA3C0C0632A56475B4214E5615E11E6DD3F96E6CEA2854A87D4DACC5E55\",\n            ),\n            FieldElement::from_hex_unchecked(\n                \"04FC6369F7110FE3D25156C1BB9A72859CF2A04641F99BA4EE413C80DA6A5FE4\",\n            ),\n        ],\n    )?;\n    let pairs = [\n        G1G2Pair::new(p_0, g2_point_kzg_1),\n        G1G2Pair::new(p_1, g2_point_kzg_2),\n    ];\n    let mpc_data = {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree12ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree6ExtensionField;\n        mpc_calldata::calldata_builder::<\n            true,\n            BN254PrimeField,\n            Degree2ExtensionField,\n            Degree6ExtensionField,\n            Degree12ExtensionField,\n        >(&pairs, 2, &None)?\n    };\n\n    let size = proof_data.len() + msm_data.len() + mpc_data.len();\n    let mut call_data = vec![size.into()];\n    call_data.extend(proof_data);\n    call_data.extend(msm_data);\n    call_data.extend(mpc_data);\n    Ok(call_data)\n}\n\n#[allow(clippy::needless_range_loop)]\nfn compute_zk_transcript<T: Hasher>(\n    vk: &HonkVerificationKey,\n    proof: &ZKHonkProof,\n    mut hasher: T,\n) -> (\n    ZKHonkTranscript,\n    FieldElement<Stark252PrimeField>,\n    FieldElement<Stark252PrimeField>,\n) {\n    fn split(ch: &[u8]) -> [BigUint; 2] {\n        let ch_int = BigUint::from_bytes_be(ch);\n        let mask = (BigUint::from(1u8) << 128) - 1u8;\n        let low_128 = &ch_int & &mask;\n        let high_128 = &ch_int >> 128;\n        [low_128, high_128]\n    }\n\n    // Round 0: vk_hash, public_inputs, pairing_point_object, w1, w2, w3\n    hasher.update(&vk.vk_hash);\n\n    for pub_input in &proof.public_inputs {\n        hasher.update(pub_input);\n    }\n    for pub_input in &proof.pairing_point_object {\n        hasher.update(pub_input);\n    }\n\n    hasher.update_point(&proof.w1);\n    hasher.update_point(&proof.w2);\n    hasher.update_point(&proof.w3);\n\n    let ch0 = hasher.digest_reset();\n    let [eta, eta_two] = split(&ch0);\n\n    hasher.update_bytes(&ch0);\n    let ch0 = hasher.digest_reset();\n    let [eta_three, _] = split(&ch0);\n\n    // Round 1: ch0, lookup_read_counts, lookup_read_tags, w4\n    hasher.update_bytes(&ch0);\n    hasher.update_point(&proof.lookup_read_counts);\n    hasher.update_point(&proof.lookup_read_tags);\n    hasher.update_point(&proof.w4);\n\n    let ch1 = hasher.digest_reset();\n    let [beta, gamma] = split(&ch1);\n\n    // Round 2: ch1, lookup_inverses, z_perm -> alpha\n    hasher.update_bytes(&ch1);\n    hasher.update_point(&proof.lookup_inverses);\n    hasher.update_point(&proof.z_perm);\n\n    let ch2 = hasher.digest_reset();\n    let [alpha, _] = split(&ch2);\n\n    // Round 3: Gate challenge\n    hasher.update_bytes(&ch2);\n    let ch3 = hasher.digest_reset();\n    let [gate_challenge, _] = split(&ch3);\n\n    // Round 3.5: Libra challenge\n    hasher.update_bytes(&ch3);\n    hasher.update_point(&proof.libra_commitments[0]);\n    hasher.update(&proof.libra_sum);\n\n    let ch3 = hasher.digest_reset();\n    let [libra_challenge, _] = split(&ch3);\n\n    // Round 4: Sumcheck u challenges\n    let mut sumcheck_u_challenges = [0u8; CONST_PROOF_SIZE_LOG_N].map(BigUint::from);\n    let mut ch4 = ch3;\n\n    for i in 0..vk.log_circuit_size {\n        hasher.update_bytes(&ch4);\n        for j in 0..ZK_BATCHED_RELATION_PARTIAL_LENGTH {\n            hasher.update(&proof.sumcheck_univariates[i][j]);\n        }\n\n        ch4 = hasher.digest_reset();\n        let [challenge, _] = split(&ch4);\n        sumcheck_u_challenges[i] = challenge;\n    }\n\n    // Rho challenge\n    hasher.update_bytes(&ch4);\n    for i in 0..NUMBER_OF_ENTITIES {\n        hasher.update(&proof.sumcheck_evaluations[i]);\n    }\n\n    hasher.update(&proof.libra_evaluation);\n    hasher.update_point(&proof.libra_commitments[1]);\n    hasher.update_point(&proof.libra_commitments[2]);\n    hasher.update_point(&proof.gemini_masking_poly);\n    hasher.update(&proof.gemini_masking_eval);\n\n    let c5 = hasher.digest_reset();\n    let [rho, _] = split(&c5);\n\n    // Gemini R\n    hasher.update_bytes(&c5);\n    for i in 0..vk.log_circuit_size - 1 {\n        hasher.update_point(&proof.gemini_fold_comms[i]);\n    }\n\n    let c6 = hasher.digest_reset();\n    let [gemini_r, _] = split(&c6);\n\n    // Shplonk Nu\n    hasher.update_bytes(&c6);\n    for i in 0..vk.log_circuit_size {\n        hasher.update(&proof.gemini_a_evaluations[i]);\n    }\n\n    for i in 0..4 {\n        hasher.update(&proof.libra_poly_evals[i]);\n    }\n\n    let c7 = hasher.digest_reset();\n    let [shplonk_nu, _] = split(&c7);\n\n    // Shplonk Z\n    hasher.update_bytes(&c7);\n    hasher.update_point(&proof.shplonk_q);\n\n    let c8 = hasher.digest_reset();\n    let [shplonk_z_low, shplonk_z_high] = split(&c8);\n\n    let mut state: [FieldElement<Stark252PrimeField>; 3] = [\n        element_from_biguint(&shplonk_z_low),\n        element_from_biguint(&shplonk_z_high),\n        FieldElement::one().double(),\n    ];\n    PoseidonCairoStark252::hades_permutation(&mut state);\n    let [s0, s1, _] = state;\n\n    (\n        ZKHonkTranscript {\n            eta,\n            eta_two,\n            eta_three,\n            beta,\n            gamma,\n            alpha,\n            gate_challenge,\n            libra_challenge,\n            sumcheck_u_challenges,\n            rho,\n            gemini_r,\n            shplonk_nu,\n            shplonk_z: shplonk_z_low,\n        },\n        s0,\n        s1,\n    )\n}\n\n#[allow(clippy::needless_range_loop, clippy::too_many_arguments)]\nfn compute_shplemini_msm_scalars(\n    log_circuit_size: usize,\n    sumcheck_evaluations: &[FieldElement<GrumpkinPrimeField>; NUMBER_OF_ENTITIES],\n    gemini_masking_eval: &FieldElement<GrumpkinPrimeField>,\n    gemini_a_evaluations: &[FieldElement<GrumpkinPrimeField>; CONST_PROOF_SIZE_LOG_N],\n    libra_poly_evals: &[FieldElement<GrumpkinPrimeField>; 4],\n    gemini_r: &FieldElement<GrumpkinPrimeField>,\n    rho: &FieldElement<GrumpkinPrimeField>,\n    shplonk_z: &FieldElement<GrumpkinPrimeField>,\n    shplonk_nu: &FieldElement<GrumpkinPrimeField>,\n    sumcheck_u_challenges: &[FieldElement<GrumpkinPrimeField>; CONST_PROOF_SIZE_LOG_N],\n) -> Result<\n    [Option<BigUint>; NUMBER_UNSHIFTED + CONST_PROOF_SIZE_LOG_N + LIBRA_COMMITMENTS + 3],\n    FieldError,\n> {\n    let powers_of_evaluations_challenge = {\n        let mut values = vec![];\n        let mut value = *gemini_r;\n        for _ in 0..log_circuit_size {\n            values.push(value);\n            value = value * value;\n        }\n        values\n    };\n\n    let mut pos_inverted_denominator = (shplonk_z - powers_of_evaluations_challenge[0]).inv()?;\n    let mut neg_inverted_denominator = (shplonk_z + powers_of_evaluations_challenge[0]).inv()?;\n\n    let mut scalars = {\n        const NONE: Option<FieldElement<GrumpkinPrimeField>> = None;\n        let mut values = [NONE; NUMBER_UNSHIFTED + CONST_PROOF_SIZE_LOG_N + LIBRA_COMMITMENTS + 3];\n        for i in 0..values.len() {\n            values[i] = Some(FieldElement::zero());\n        }\n        values\n    };\n\n    let unshifted_scalar = pos_inverted_denominator + (shplonk_nu * neg_inverted_denominator);\n    let unshifted_scalar_neg = -unshifted_scalar;\n\n    let shifted_scalar_neg =\n        -(gemini_r.inv()? * (pos_inverted_denominator - (shplonk_nu * neg_inverted_denominator)));\n\n    scalars[0] = Some(FieldElement::one());\n\n    let mut batched_evaluation = *gemini_masking_eval;\n    let mut batching_challenge = *rho;\n    scalars[1] = Some(unshifted_scalar_neg);\n\n    for i in 0..NUMBER_UNSHIFTED {\n        scalars[i + 2] = Some(unshifted_scalar_neg * batching_challenge);\n        batched_evaluation += sumcheck_evaluations[i] * batching_challenge;\n        batching_challenge *= rho;\n    }\n\n    for i in 0..NUMBER_TO_BE_SHIFTED {\n        let scalar_offset = i + SHIFTED_COMMITMENTS_START;\n        let evaluation_offset = i + NUMBER_UNSHIFTED;\n        scalars[scalar_offset] =\n            Some(scalars[scalar_offset].unwrap() + (shifted_scalar_neg * batching_challenge));\n        batched_evaluation += sumcheck_evaluations[evaluation_offset] * batching_challenge;\n        // skip last round:\n        if i < NUMBER_TO_BE_SHIFTED - 1 {\n            batching_challenge *= rho;\n        }\n    }\n\n    // computeFoldPosEvaluations\n    let fold_pos_evaluations = {\n        let mut values = vec![FieldElement::from(0); CONST_PROOF_SIZE_LOG_N];\n        let mut batched_eval_accumulator = batched_evaluation;\n        for i in (0..log_circuit_size).rev() {\n            let challenge_power = &powers_of_evaluations_challenge[i];\n            let u = &sumcheck_u_challenges[i];\n            let eval_neg = &gemini_a_evaluations[i];\n            let term = challenge_power * (FieldElement::<GrumpkinPrimeField>::one() - u);\n            let batched_eval_round_acc = (FieldElement::<GrumpkinPrimeField>::from(2)\n                * challenge_power\n                * batched_eval_accumulator)\n                - (eval_neg * (term - u));\n            let den = term + u;\n            batched_eval_accumulator = batched_eval_round_acc * den.inv()?;\n            values[i] = batched_eval_accumulator;\n        }\n        values\n    };\n\n    let mut constant_term_accumulator = fold_pos_evaluations[0] * pos_inverted_denominator;\n    constant_term_accumulator += gemini_a_evaluations[0] * shplonk_nu * neg_inverted_denominator;\n\n    let mut batching_challenge = shplonk_nu * shplonk_nu;\n\n    let boundary = NUMBER_UNSHIFTED + 2;\n\n    for i in 0..log_circuit_size - 1 {\n        pos_inverted_denominator = (shplonk_z - powers_of_evaluations_challenge[i + 1]).inv()?;\n        neg_inverted_denominator = (shplonk_z + powers_of_evaluations_challenge[i + 1]).inv()?;\n\n        let scaling_factor_pos = batching_challenge * pos_inverted_denominator;\n        let scaling_factor_neg = batching_challenge * shplonk_nu * neg_inverted_denominator;\n        scalars[boundary + i] = Some(-(scaling_factor_neg + scaling_factor_pos));\n\n        let mut accum_contribution = scaling_factor_neg * gemini_a_evaluations[i + 1];\n        accum_contribution += scaling_factor_pos * fold_pos_evaluations[i + 1];\n        constant_term_accumulator += accum_contribution;\n\n        batching_challenge *= shplonk_nu * shplonk_nu;\n    }\n\n    let boundary = boundary + log_circuit_size - 1;\n\n    let subgroup_generator = FieldElement::<GrumpkinPrimeField>::from_hex_unchecked(\n        \"07B0C561A6148404F086204A9F36FFB0617942546750F230C893619174A57A76\",\n    );\n\n    let denom_0 = (FieldElement::<GrumpkinPrimeField>::from(1) / (shplonk_z - gemini_r)).unwrap();\n    let denom_1 = (FieldElement::<GrumpkinPrimeField>::from(1)\n        / (shplonk_z - subgroup_generator * gemini_r))\n        .unwrap();\n    let denominators = [denom_0, denom_1, denom_0, denom_0];\n\n    let mut batching_scalars = vec![];\n    batching_challenge *= shplonk_nu * shplonk_nu;\n    for i in 0..LIBRA_EVALUATIONS {\n        let scaling_factor = denominators[i] * batching_challenge;\n        batching_scalars.push(-scaling_factor);\n        // skip last step:\n        if i < LIBRA_EVALUATIONS - 1 {\n            batching_challenge *= shplonk_nu;\n        }\n        constant_term_accumulator += scaling_factor * libra_poly_evals[i];\n    }\n    scalars[boundary] = Some(batching_scalars[0]);\n    scalars[boundary + 1] = Some(batching_scalars[1] + batching_scalars[2]);\n    scalars[boundary + 2] = Some(batching_scalars[3]);\n\n    scalars[boundary + 3] = Some(constant_term_accumulator);\n    scalars[boundary + 4] = Some(*shplonk_z);\n\n    Ok(scalars\n        .into_iter()\n        .map(|v| v.map(|e| element_to_biguint(&e)))\n        .collect::<Vec<_>>()\n        .try_into()\n        .unwrap())\n}\n\nfn check_evals_consistency(\n    libra_evaluation: &FieldElement<GrumpkinPrimeField>,\n    libra_poly_evals: &[FieldElement<GrumpkinPrimeField>; 4],\n    gemini_r: &FieldElement<GrumpkinPrimeField>,\n    sumcheck_u_challenges: &[FieldElement<GrumpkinPrimeField>; CONST_PROOF_SIZE_LOG_N],\n    log_circuit_size: usize,\n) -> Result<bool, FieldError> {\n    let vanishing_poly_eval =\n        gemini_r.pow(SUBGROUP_SIZE) - FieldElement::<GrumpkinPrimeField>::from(1);\n    if vanishing_poly_eval == FieldElement::<GrumpkinPrimeField>::from(0) {\n        return Ok(false);\n    }\n\n    let mut challenge_poly_lagrange =\n        vec![FieldElement::<GrumpkinPrimeField>::from(0); SUBGROUP_SIZE];\n    challenge_poly_lagrange[0] = FieldElement::<GrumpkinPrimeField>::from(1);\n    for (round, u_challenge) in sumcheck_u_challenges\n        .iter()\n        .enumerate()\n        .take(log_circuit_size)\n    {\n        let curr_idx = 1 + LIBRA_UNIVARIATES_LENGTH * round;\n        challenge_poly_lagrange[curr_idx] = FieldElement::<GrumpkinPrimeField>::from(1);\n        for idx in curr_idx + 1..curr_idx + LIBRA_UNIVARIATES_LENGTH {\n            challenge_poly_lagrange[idx] = challenge_poly_lagrange[idx - 1] * u_challenge;\n        }\n    }\n\n    let subgroup_generator_inverse = FieldElement::<GrumpkinPrimeField>::from_hex_unchecked(\n        \"204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d6\",\n    );\n\n    let mut root_power = FieldElement::<GrumpkinPrimeField>::from(1);\n    let mut challenge_poly_eval = FieldElement::<GrumpkinPrimeField>::from(0);\n    let mut denominators = vec![FieldElement::<GrumpkinPrimeField>::from(0); SUBGROUP_SIZE];\n    for idx in 0..SUBGROUP_SIZE {\n        denominators[idx] = root_power * gemini_r - FieldElement::<GrumpkinPrimeField>::from(1);\n        denominators[idx] = denominators[idx].inv()?;\n        challenge_poly_eval += challenge_poly_lagrange[idx] * denominators[idx];\n        // skip last step:\n        if idx < SUBGROUP_SIZE - 1 {\n            root_power *= subgroup_generator_inverse;\n        }\n    }\n\n    let numerator = vanishing_poly_eval\n        * FieldElement::<GrumpkinPrimeField>::from(SUBGROUP_SIZE as u64).inv()?;\n    challenge_poly_eval *= numerator;\n    let lagrange_first = denominators[0] * numerator;\n    let lagrange_last = denominators[SUBGROUP_SIZE - 1] * numerator;\n\n    let mut diff = lagrange_first * libra_poly_evals[2];\n    diff += (gemini_r - subgroup_generator_inverse)\n        * (libra_poly_evals[1] - libra_poly_evals[2] - libra_poly_evals[0] * challenge_poly_eval);\n    diff = diff + lagrange_last * (libra_poly_evals[2] - libra_evaluation)\n        - vanishing_poly_eval * libra_poly_evals[3];\n    if diff != FieldElement::<GrumpkinPrimeField>::from(0) {\n        return Ok(false);\n    }\n\n    Ok(true)\n}\n\nfn extract_msm_scalars(\n    log_circuit_size: usize,\n    scalars: [Option<BigUint>; NUMBER_UNSHIFTED + CONST_PROOF_SIZE_LOG_N + LIBRA_COMMITMENTS + 3],\n) -> Vec<BigUint> {\n    // Remove first element (==1)\n    // scalars[1..NUMBER_UNSHIFTED+2] are the unshifted/shifted scalars\n    // scalars[NUMBER_UNSHIFTED+2..NUMBER_UNSHIFTED+2+log_n-1] are gemini fold comm scalars\n    // scalars[NUMBER_UNSHIFTED+2+log_n-1..NUMBER_UNSHIFTED+2+log_n-1+5] are libra + final scalars\n    let gemini_end = NUMBER_UNSHIFTED + 2 + log_circuit_size - 1;\n    let libra_start = gemini_end;\n    let libra_end = libra_start + 5; // 3 libra + constant_term + shplonk_z\n\n    [&scalars[1..gemini_end], &scalars[libra_start..libra_end]]\n        .concat()\n        .into_iter()\n        .flatten()\n        .collect()\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/calldata/mod.rs",
    "content": "pub mod drand_calldata;\npub mod drand_tlock_calldata;\npub mod full_proof_with_hints {\n    pub mod groth16;\n    pub mod zk_honk;\n}\npub mod mpc_calldata;\npub mod msm_calldata;\npub mod signatures;\n\nuse crate::definitions::{get_modulus_from_curve_id, CurveID};\nuse num_bigint::BigUint;\n\n#[derive(Debug, PartialEq)]\npub struct G1PointBigUint {\n    pub x: BigUint,\n    pub y: BigUint,\n}\n\n#[derive(Debug, PartialEq)]\npub struct G2PointBigUint {\n    pub x0: BigUint,\n    pub x1: BigUint,\n    pub y0: BigUint,\n    pub y1: BigUint,\n}\n\nimpl G1PointBigUint {\n    pub fn neg(&self, curve_id: CurveID) -> Self {\n        let modulus = get_modulus_from_curve_id(curve_id);\n        G1PointBigUint {\n            x: self.x.clone(),\n            y: &modulus - &self.y,\n        }\n    }\n    pub fn flatten(&self) -> Vec<BigUint> {\n        vec![self.x.clone(), self.y.clone()]\n    }\n    pub fn from(values: Vec<BigUint>) -> Self {\n        G1PointBigUint {\n            x: values[0].clone(),\n            y: values[1].clone(),\n        }\n    }\n}\n\nimpl G2PointBigUint {\n    pub fn flatten(&self) -> Vec<BigUint> {\n        vec![\n            self.x0.clone(),\n            self.x1.clone(),\n            self.y0.clone(),\n            self.y1.clone(),\n        ]\n    }\n    pub fn from(values: Vec<BigUint>) -> Self {\n        G2PointBigUint {\n            x0: values[0].clone(),\n            x1: values[1].clone(),\n            y0: values[2].clone(),\n            y1: values[3].clone(),\n        }\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/calldata/mpc_calldata.rs",
    "content": "use crate::algebra::g1g2pair::G1G2Pair;\nuse crate::algebra::polynomial::Polynomial;\nuse crate::definitions::{CurveID, CurveParamsProvider, Stark252PrimeField};\nuse crate::io::{\n    element_from_bytes_be, field_element_to_u288_limbs, field_element_to_u384_limbs,\n    field_elements_from_big_uints, parse_g1_g2_pairs_from_flattened_field_elements_list,\n};\nuse crate::pairing::multi_miller_loop::miller_loop;\nuse crate::pairing::multi_pairing_check::{get_max_q_degree, multi_pairing_check};\nuse crate::poseidon_transcript::CairoPoseidonTranscript;\nuse lambdaworks_math::field::element::FieldElement;\nuse lambdaworks_math::field::traits::{IsField, IsPrimeField, IsSubFieldOf};\nuse lambdaworks_math::traits::ByteConversion;\nuse num_bigint::BigUint;\n\npub fn mpc_calldata_builder(\n    curve_id: usize,\n    values1: &[BigUint],\n    n_fixed_g2: usize,\n    values2: &[BigUint],\n) -> Result<Vec<BigUint>, String> {\n    if !values1.len().is_multiple_of(6) {\n        return Err(\"Pairs values length must be a multiple of 6\".to_string());\n    }\n    let n_pairs = values1.len() / 6;\n    if n_pairs < 2 {\n        return Err(\"A minimum number of 2 pairs is required\".to_string());\n    }\n    if !values2.is_empty() && values2.len() != 6 {\n        return Err(\"Public pair values length must be 0 or 6\".to_string());\n    }\n    if n_fixed_g2 > n_pairs {\n        return Err(\"Fixed G2 count must be less than or equal to pairs count\".to_string());\n    }\n    let curve_id = CurveID::try_from(curve_id)?;\n    match curve_id {\n        CurveID::BN254 => {\n            use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::BN254PrimeField;\n            use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n            use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree6ExtensionField;\n            use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree12ExtensionField;\n            handle_curve::<\n                true,\n                BN254PrimeField,\n                Degree2ExtensionField,\n                Degree6ExtensionField,\n                Degree12ExtensionField,\n            >(values1, n_fixed_g2, values2)\n        }\n        CurveID::BLS12_381 => {\n            use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::BLS12381PrimeField;\n            use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n            use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree6ExtensionField;\n            use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree12ExtensionField;\n            handle_curve::<\n                false,\n                BLS12381PrimeField,\n                Degree2ExtensionField,\n                Degree6ExtensionField,\n                Degree12ExtensionField,\n            >(values1, n_fixed_g2, values2)\n        }\n        _ => Err(\"Unsupported curve\".to_string()),\n    }\n}\n\nfn handle_curve<const USE_288: bool, F, E2, E6, E12>(\n    values1: &[BigUint],\n    n_fixed_g2: usize,\n    values2: &[BigUint],\n) -> Result<Vec<BigUint>, String>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n    FieldElement<F>: ByteConversion,\n{\n    let elements = field_elements_from_big_uints::<F>(values1);\n    let pairs = parse_g1_g2_pairs_from_flattened_field_elements_list(&elements)?;\n    let public_pair = if values2.len() == 6 {\n        let elements = field_elements_from_big_uints::<F>(values2);\n        let pairs = parse_g1_g2_pairs_from_flattened_field_elements_list(&elements)?;\n        Some(pairs[0].clone())\n    } else {\n        None\n    };\n    calldata_builder::<USE_288, F, E2, E6, E12>(&pairs, n_fixed_g2, &public_pair)\n}\n\nfn extra_miller_loop_result<F, E2>(public_pair: &G1G2Pair<F, E2>) -> Polynomial<F>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    miller_loop(\n        std::slice::from_ref(&public_pair.g1),\n        std::slice::from_ref(&public_pair.g2),\n    )\n}\n\n#[allow(clippy::type_complexity)]\nfn multi_pairing_check_result<F, E2, E6, E12>(\n    pairs: &[G1G2Pair<F, E2>],\n    m: &Option<Polynomial<F>>,\n) -> (\n    Polynomial<F>,\n    Option<Polynomial<F>>,\n    Polynomial<F>,\n    Vec<FieldElement<F>>,\n    Vec<Polynomial<F>>,\n    Vec<Polynomial<F>>,\n)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n    FieldElement<F>: ByteConversion,\n{\n    assert!(pairs.len() >= 2);\n    let mut p = vec![];\n    let mut q = vec![];\n    for pair in pairs {\n        p.push(pair.g1.clone());\n        q.push(pair.g2.clone());\n    }\n    let (f, lambda_root, lambda_root_inverse, scaling_factor, qis, ris) =\n        multi_pairing_check(&p, &q, m);\n    let curve_id = F::get_curve_params().curve_id;\n    let ris = match curve_id {\n        CurveID::BN254 => ris[1..].to_vec(),\n        CurveID::BLS12_381 => ris,\n        _ => unimplemented!(),\n    };\n\n    (\n        f,\n        lambda_root,\n        lambda_root_inverse,\n        scaling_factor,\n        qis,\n        ris,\n    )\n}\n\n#[allow(clippy::too_many_arguments)]\nfn hash_hints_and_get_base_random_rlc_coeff<F, E2>(\n    pairs: &[G1G2Pair<F, E2>],\n    n_fixed_g2: usize,\n    curve_id: CurveID,\n    three_limbs_only: bool,\n    lambda_root: &Option<Polynomial<F>>,\n    lambda_root_inverse: &Polynomial<F>,\n    scaling_factor: &[FieldElement<F>],\n    ris: &[Polynomial<F>],\n    m: Option<Polynomial<F>>,\n) -> (FieldElement<F>, CairoPoseidonTranscript)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n    FieldElement<F>: ByteConversion,\n{\n    let curve_name = match curve_id {\n        CurveID::BN254 => \"BN254\",\n        CurveID::BLS12_381 => \"BLS12_381\",\n        _ => unimplemented!(),\n    };\n    let init_hash_text = format!(\"MPCHECK_{}_{}P_{}F\", curve_name, pairs.len(), n_fixed_g2);\n    let init_hash_hex = \"0x\".to_owned()\n        + &init_hash_text\n            .as_bytes()\n            .iter()\n            .fold(String::new(), |mut acc, byte| {\n                use std::fmt::Write;\n                write!(&mut acc, \"{:02X}\", byte).unwrap();\n                acc\n            });\n    let init_hash = FieldElement::from_hex(&init_hash_hex).unwrap();\n    let mut transcript = CairoPoseidonTranscript::new(init_hash);\n    for pair in pairs {\n        let pairs_elements_flat = pair.flatten();\n        transcript.hash_emulated_field_elements(&pairs_elements_flat, None, false);\n    }\n\n    // println!(\n    //     \"RS transcript.state1: {:?}\",\n    //     transcript.state[0].representative().to_string()\n    // );\n\n    if let Some(lambda_root) = lambda_root {\n        assert_eq!(curve_id, CurveID::BN254);\n        transcript.hash_emulated_field_elements(\n            &lambda_root.get_coefficients_ext_degree(12),\n            None,\n            three_limbs_only,\n        );\n    }\n    transcript.hash_emulated_field_elements(\n        &lambda_root_inverse.get_coefficients_ext_degree(12),\n        None,\n        three_limbs_only,\n    );\n    transcript.hash_emulated_field_elements(scaling_factor, None, three_limbs_only);\n    for ri in ris {\n        transcript.hash_emulated_field_elements(\n            &ri.get_coefficients_ext_degree(12),\n            None,\n            three_limbs_only,\n        );\n    }\n    if let Some(m) = m {\n        transcript.hash_emulated_field_elements(\n            &m.get_coefficients_ext_degree(12),\n            None,\n            three_limbs_only,\n        );\n    }\n    (\n        element_from_bytes_be(&transcript.state[1].to_bytes_be()),\n        transcript,\n    )\n}\n\nfn compute_big_q_coeffs<F>(\n    n_pairs: usize,\n    qis: &[Polynomial<F>],\n    ris_len: usize,\n    c1: &FieldElement<F>,\n) -> Vec<FieldElement<F>>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    let curve_id = F::get_curve_params().curve_id;\n    let extra_n = match curve_id {\n        CurveID::BN254 => 1,\n        CurveID::BLS12_381 => 0,\n        _ => unimplemented!(),\n    };\n    let n_relations_with_ci = ris_len + extra_n;\n    let (mut ci, mut big_q) = (FieldElement::one(), Polynomial::<F>::zero());\n    for i in (0..n_relations_with_ci).rev() {\n        big_q = big_q + (&qis[i] * &Polynomial::new(vec![ci.clone()]));\n        ci *= c1;\n    }\n    let big_q_expected_len = get_max_q_degree(curve_id, n_pairs) + 1;\n    let mut big_q_coeffs = big_q.coefficients;\n    while big_q_coeffs.len() < big_q_expected_len {\n        big_q_coeffs.push(FieldElement::from(0));\n    }\n    big_q_coeffs\n}\n\nfn hash_big_q_and_get_z<F, E2>(\n    big_q: &[FieldElement<F>],\n    n_pairs: usize,\n    n_fixed_g2: usize,\n    three_limbs_only: bool,\n    c1: &FieldElement<F>,\n) -> FieldElement<Stark252PrimeField>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n    FieldElement<F>: ByteConversion,\n{\n    let init_hash_text = init_hash_label::<F>(n_pairs, n_fixed_g2, true);\n    let mut new_transcript = new_transcript_from_text(init_hash_text);\n    seed_transcript_with_base_rlc::<F>(&mut new_transcript, c1, three_limbs_only);\n    new_transcript.hash_emulated_field_elements(big_q, None, three_limbs_only);\n    new_transcript.state[0]\n}\n\n#[allow(clippy::type_complexity)]\nfn build_mpcheck_hint<F, E2, E6, E12>(\n    pairs: &[G1G2Pair<F, E2>],\n    n_fixed_g2: usize,\n    public_pair: &Option<G1G2Pair<F, E2>>,\n) -> (\n    Polynomial<F>,\n    Option<Polynomial<F>>,\n    Polynomial<F>,\n    Vec<FieldElement<F>>,\n    Vec<Polynomial<F>>,\n    Vec<FieldElement<F>>,\n    FieldElement<Stark252PrimeField>,\n)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n    FieldElement<F>: ByteConversion,\n{\n    let n_pairs = pairs.len();\n    assert!(n_pairs >= 2);\n    assert!(n_fixed_g2 <= n_pairs);\n\n    let curve_id = F::get_curve_params().curve_id;\n    let three_limbs_only: bool = !matches!(curve_id, CurveID::BLS12_381);\n\n    let m = public_pair\n        .as_ref()\n        .map(|public_pair| extra_miller_loop_result(public_pair));\n    let (f, lambda_root, lambda_root_inverse, scaling_factor, qis, ris) =\n        multi_pairing_check_result(pairs, &m);\n    let (c1, _transcript) = hash_hints_and_get_base_random_rlc_coeff(\n        pairs,\n        n_fixed_g2,\n        curve_id,\n        three_limbs_only,\n        &lambda_root,\n        &lambda_root_inverse,\n        &scaling_factor,\n        &ris,\n        m,\n    );\n    let big_q_coeffs = compute_big_q_coeffs(n_pairs, &qis, ris.len(), &c1);\n    let z =\n        hash_big_q_and_get_z::<F, E2>(&big_q_coeffs, n_pairs, n_fixed_g2, three_limbs_only, &c1);\n    // Assert last Ri is 1\n    assert_eq!(ris[ris.len() - 1], Polynomial::one());\n    // Skip last Ri as it is known to be 1 for pairing checks\n    let ris = ris[..ris.len() - 1].to_vec();\n    (\n        f,\n        lambda_root,\n        lambda_root_inverse,\n        scaling_factor,\n        ris,\n        big_q_coeffs,\n        z,\n    )\n}\n\nfn init_hash_label<F: IsPrimeField + CurveParamsProvider<F>>(\n    n_pairs: usize,\n    n_fixed_g2: usize,\n    second_stage: bool,\n) -> String {\n    let curve_name = match F::get_curve_params().curve_id {\n        CurveID::BN254 => \"BN254\",\n        CurveID::BLS12_381 => \"BLS12_381\",\n        _ => unreachable!(),\n    };\n    if second_stage {\n        format!(\"MPCHECK_{}_{}P_{}F_II\", curve_name, n_pairs, n_fixed_g2)\n    } else {\n        format!(\"MPCHECK_{}_{}P_{}F\", curve_name, n_pairs, n_fixed_g2)\n    }\n}\n\nfn seed_transcript_with_base_rlc<F>(\n    transcript: &mut CairoPoseidonTranscript,\n    c1: &FieldElement<F>,\n    three_limbs_only: bool,\n) where\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    transcript.hash_emulated_field_elements(std::slice::from_ref(c1), None, three_limbs_only);\n}\n\nfn new_transcript_from_text(init_hash_text: String) -> CairoPoseidonTranscript {\n    let init_hash_hex = \"0x\".to_owned()\n        + &init_hash_text\n            .as_bytes()\n            .iter()\n            .fold(String::new(), |mut acc, byte| {\n                use std::fmt::Write;\n                write!(&mut acc, \"{:02X}\", byte).unwrap();\n                acc\n            });\n    let init_hash = FieldElement::from_hex(&init_hash_hex).unwrap();\n    CairoPoseidonTranscript::new(init_hash)\n}\n\npub fn calldata_builder<const USE_288: bool, F, E2, E6, E12>(\n    pairs: &[G1G2Pair<F, E2>],\n    n_fixed_g2: usize,\n    public_pair: &Option<G1G2Pair<F, E2>>,\n) -> Result<Vec<BigUint>, String>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n    FieldElement<F>: ByteConversion,\n{\n    let (f, lambda_root, lambda_root_inverse, scaling_factor, ris, big_q_coeffs, z) =\n        build_mpcheck_hint(pairs, n_fixed_g2, public_pair);\n\n    if f != Polynomial::one() {\n        return Err(\"Pairing check is not == 1\".to_string());\n    }\n\n    let mut call_data = vec![];\n    let call_data_ref = &mut call_data;\n\n    fn push<T>(call_data_ref: &mut Vec<BigUint>, value: T)\n    where\n        BigUint: From<T>,\n    {\n        call_data_ref.push(value.into());\n    }\n\n    fn push_element<const USE_288: bool, F>(\n        call_data_ref: &mut Vec<BigUint>,\n        element: &FieldElement<F>,\n    ) where\n        F: IsPrimeField,\n        FieldElement<F>: ByteConversion,\n    {\n        if USE_288 {\n            let limbs = field_element_to_u288_limbs(element);\n            for limb in limbs {\n                push(call_data_ref, limb);\n            }\n        } else {\n            let limbs = field_element_to_u384_limbs(element);\n            for limb in limbs {\n                push(call_data_ref, limb);\n            }\n        }\n    }\n\n    fn push_elements<const USE_288: bool, F>(\n        call_data_ref: &mut Vec<BigUint>,\n        elements: &[FieldElement<F>],\n        prepend_length: bool,\n    ) where\n        F: IsPrimeField,\n        FieldElement<F>: ByteConversion,\n    {\n        if prepend_length {\n            push(call_data_ref, elements.len());\n        }\n        for element in elements {\n            push_element::<USE_288, F>(call_data_ref, element);\n        }\n    }\n\n    if let Some(lambda_root) = lambda_root {\n        push_elements::<USE_288, F>(\n            call_data_ref,\n            &lambda_root.get_coefficients_ext_degree(12),\n            false,\n        );\n    }\n    push_elements::<USE_288, F>(\n        call_data_ref,\n        &lambda_root_inverse.get_coefficients_ext_degree(12),\n        false,\n    );\n    push_elements::<USE_288, F>(call_data_ref, &scaling_factor, false);\n    push(call_data_ref, ris.len());\n    for ri in ris {\n        push_elements::<USE_288, F>(call_data_ref, &ri.get_coefficients_ext_degree(12), false);\n    }\n    push_elements::<USE_288, F>(call_data_ref, &big_q_coeffs, true);\n\n    push(call_data_ref, BigUint::from_bytes_be(&z.to_bytes_be()));\n\n    Ok(call_data)\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/calldata/msm_calldata.rs",
    "content": "use crate::algebra::g1point::G1Point;\nuse crate::definitions::{\n    BLS12381PrimeField, BN254PrimeField, CurveParamsProvider, FieldElement, GrumpkinPrimeField,\n    SECP256K1PrimeField, SECP256R1PrimeField, X25519PrimeField,\n};\nuse crate::hints::fake_glv::{get_fake_glv_hint, get_glv_fake_glv_hint};\nuse crate::io::{\n    element_to_biguint, field_element_to_u288_limbs, field_element_to_u384_limbs,\n    field_elements_from_big_uints, parse_g1_points_from_flattened_field_elements_list,\n    scalar_to_limbs,\n};\nuse lambdaworks_math::{field::traits::IsPrimeField, traits::ByteConversion};\n\nuse num_bigint::BigUint;\n\nuse crate::definitions::CurveID;\n\npub fn msm_calldata_builder(\n    values: &[BigUint],\n    scalars: &[BigUint],\n    curve_id: usize,\n    include_points_and_scalars: bool,\n    serialize_as_pure_felt252_array: bool,\n) -> Result<Vec<BigUint>, String> {\n    if values.len() != 2 * scalars.len() {\n        return Err(\"Values length must be twice the scalars length\".to_string());\n    }\n    let curve_id = CurveID::try_from(curve_id)?;\n    match curve_id {\n        CurveID::BN254 => handle_curve::<BN254PrimeField>(\n            values,\n            scalars,\n            curve_id as usize,\n            include_points_and_scalars,\n            serialize_as_pure_felt252_array,\n        ),\n        CurveID::BLS12_381 => handle_curve::<BLS12381PrimeField>(\n            values,\n            scalars,\n            curve_id as usize,\n            include_points_and_scalars,\n            serialize_as_pure_felt252_array,\n        ),\n        CurveID::SECP256K1 => handle_curve::<SECP256K1PrimeField>(\n            values,\n            scalars,\n            curve_id as usize,\n            include_points_and_scalars,\n            serialize_as_pure_felt252_array,\n        ),\n        CurveID::SECP256R1 => handle_curve::<SECP256R1PrimeField>(\n            values,\n            scalars,\n            curve_id as usize,\n            include_points_and_scalars,\n            serialize_as_pure_felt252_array,\n        ),\n        CurveID::X25519 => handle_curve::<X25519PrimeField>(\n            values,\n            scalars,\n            curve_id as usize,\n            include_points_and_scalars,\n            serialize_as_pure_felt252_array,\n        ),\n        CurveID::GRUMPKIN => handle_curve::<GrumpkinPrimeField>(\n            values,\n            scalars,\n            curve_id as usize,\n            include_points_and_scalars,\n            serialize_as_pure_felt252_array,\n        ),\n    }\n}\n\nfn handle_curve<F>(\n    values: &[BigUint],\n    scalars: &[BigUint],\n    curve_id: usize,\n    include_points_and_scalars: bool,\n    serialize_as_pure_felt252_array: bool,\n) -> Result<Vec<BigUint>, String>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    let elements = field_elements_from_big_uints::<F>(values);\n    let points = parse_g1_points_from_flattened_field_elements_list(&elements)?;\n    let limit = &F::get_curve_params().n;\n\n    if !scalars.iter().all(|x| x < limit) {\n        return Err(\"Scalar value must be less than the curve order\".to_string());\n    }\n\n    Ok(calldata_builder::<F>(\n        &points,\n        scalars,\n        curve_id,\n        include_points_and_scalars,\n        serialize_as_pure_felt252_array,\n    ))\n}\n\n#[allow(non_snake_case)]\npub fn calldata_builder<F: IsPrimeField + CurveParamsProvider<F>>(\n    points: &[G1Point<F>],\n    scalars: &[BigUint],\n    curve_id: usize,\n    include_points_and_scalars: bool,\n    serialize_as_pure_felt252_array: bool,\n) -> Vec<BigUint>\nwhere\n    FieldElement<F>: ByteConversion,\n{\n    let mut scalars_low = vec![];\n    let mut scalars_high = vec![];\n    for scalar in scalars {\n        let [low, high] = scalar_to_limbs(scalar);\n        scalars_low.push(BigUint::from(low));\n        scalars_high.push(BigUint::from(high));\n    }\n\n    let mut call_data = vec![];\n    let call_data_ref = &mut call_data;\n\n    fn push<T>(call_data_ref: &mut Vec<BigUint>, value: T)\n    where\n        BigUint: From<T>,\n    {\n        call_data_ref.push(value.into());\n    }\n\n    fn push_element<F>(call_data_ref: &mut Vec<BigUint>, element: &FieldElement<F>, use_288: bool)\n    where\n        F: IsPrimeField,\n        FieldElement<F>: ByteConversion,\n    {\n        if use_288 {\n            let limbs = field_element_to_u288_limbs(element);\n            for limb in limbs {\n                push(call_data_ref, limb);\n            }\n        } else {\n            let limbs = field_element_to_u384_limbs(element);\n            for limb in limbs {\n                push(call_data_ref, limb);\n            }\n        }\n    }\n\n    if serialize_as_pure_felt252_array {\n        // placeholder, actual length is updated at the end\n        push(call_data_ref, 0usize);\n    }\n\n    if include_points_and_scalars {\n        // points\n        {\n            push(call_data_ref, points.len());\n            for point in points {\n                push_element(call_data_ref, &point.x, false);\n                push_element(call_data_ref, &point.y, false);\n            }\n        }\n\n        // scalars\n        {\n            push(call_data_ref, scalars.len());\n            for i in 0..scalars.len() {\n                push(call_data_ref, scalars_low[i].clone());\n                push(call_data_ref, scalars_high[i].clone());\n            }\n        }\n\n        // curve id\n        push(call_data_ref, curve_id);\n    }\n\n    // Hint\n    for (pt, scalar) in points.iter().zip(scalars.iter()) {\n        match curve_id {\n            0..=2 => {\n                let (Q, u1, u2, v1, v2) = get_glv_fake_glv_hint(pt, scalar).unwrap();\n                push_element(call_data_ref, &Q.x, false);\n                push_element(call_data_ref, &Q.y, false);\n                push(call_data_ref, u1);\n                push(call_data_ref, u2);\n                push(call_data_ref, v1);\n                push(call_data_ref, v2);\n            }\n            _ => {\n                let scalar = if scalar == &BigUint::from(0u64) {\n                    BigUint::from(1u64)\n                } else {\n                    scalar.clone()\n                };\n\n                let (Q, u1, u2) = get_fake_glv_hint(pt, &scalar).unwrap();\n\n                push_element(call_data_ref, &Q.x, false);\n                push_element(call_data_ref, &Q.y, false);\n                push(call_data_ref, u1);\n                push(call_data_ref, u2);\n            }\n        }\n    }\n\n    if serialize_as_pure_felt252_array {\n        // updates overall length\n        call_data[0] = (call_data.len() - 1).into();\n    }\n\n    call_data\n}\n\n#[allow(dead_code)]\nfn sqrt<F>(value: &FieldElement<F>) -> FieldElement<F>\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    let (root1, root2) = value.sqrt().expect(\"there is no root\");\n    if element_to_biguint(&root1) < element_to_biguint(&root2) {\n        root1\n    } else {\n        root2\n    }\n}\n\n#[cfg(test)]\nmod tests {}\n"
  },
  {
    "path": "tools/garaga_rs/src/calldata/signatures.rs",
    "content": "use crate::algebra::g1point::G1Point;\nuse crate::definitions::{\n    get_modulus_from_curve_id, BLS12381PrimeField, BN254PrimeField, CurveParamsProvider,\n    GrumpkinPrimeField, SECP256K1PrimeField, SECP256R1PrimeField, ToWeierstrassCurve,\n    X25519PrimeField,\n};\n\nuse crate::calldata::msm_calldata::msm_calldata_builder;\nuse crate::io::{biguint_split, element_from_biguint, element_to_biguint};\nuse lambdaworks_math::field::element::FieldElement;\nuse lambdaworks_math::unsigned_integer::element::U256;\nuse num_bigint::BigUint;\nuse num_traits::{One, Zero};\nuse sha2::{Digest, Sha256, Sha512};\n\nuse crate::definitions::CurveID;\n\n// Fix the get_curve_order function to use FieldElement\npub fn get_curve_order(curve_id: CurveID) -> BigUint {\n    match curve_id {\n        CurveID::BLS12_381 => BLS12381PrimeField::get_curve_params().n,\n        CurveID::BN254 => BN254PrimeField::get_curve_params().n,\n        CurveID::SECP256K1 => SECP256K1PrimeField::get_curve_params().n,\n        CurveID::SECP256R1 => SECP256R1PrimeField::get_curve_params().n,\n        CurveID::X25519 => X25519PrimeField::get_curve_params().n,\n        CurveID::GRUMPKIN => GrumpkinPrimeField::get_curve_params().n,\n    }\n}\n/// Build calldata for Schnorr signature verification\n///\n/// Arguments:\n/// * `rx` - x-coordinate of R point\n/// * `s` - signature value\n/// * `e` - challenge hash\n/// * `px` - public key x-coordinate\n/// * `py` - public key y-coordinate\n/// * `prepend_public_key` - whether to prepend the public key to the calldata\n/// * `curve_id` - curve identifier\npub fn schnorr_calldata_builder(\n    rx: BigUint,\n    s: BigUint,\n    e: BigUint,\n    px: BigUint,\n    py: BigUint,\n    prepend_public_key: bool,\n    curve_id: usize,\n) -> Result<Vec<BigUint>, String> {\n    let mut cd = Vec::new();\n\n    if prepend_public_key {\n        cd.extend(biguint_split::<4, 96>(&px).map(BigUint::from));\n        cd.extend(biguint_split::<4, 96>(&py).map(BigUint::from));\n    }\n    // Add base signature components\n    cd.extend(biguint_split::<4, 96>(&rx).map(BigUint::from));\n    cd.extend(biguint_split::<2, 128>(&s).map(BigUint::from));\n    cd.extend(biguint_split::<2, 128>(&e).map(BigUint::from));\n\n    // Calculate e_neg = -e mod n\n    let curve_id = CurveID::try_from(curve_id)?;\n    let n = get_curve_order(curve_id);\n    let e_neg = n - e;\n\n    // Add MSM calldata for sG + (-e)P\n    let msm_cd = msm_calldata_builder(\n        &[\n            match curve_id {\n                CurveID::BN254 => element_to_biguint(&BN254PrimeField::get_curve_params().g_x),\n                CurveID::BLS12_381 => {\n                    element_to_biguint(&BLS12381PrimeField::get_curve_params().g_x)\n                }\n                CurveID::SECP256K1 => {\n                    element_to_biguint(&SECP256K1PrimeField::get_curve_params().g_x)\n                }\n                CurveID::SECP256R1 => {\n                    element_to_biguint(&SECP256R1PrimeField::get_curve_params().g_x)\n                }\n                CurveID::X25519 => element_to_biguint(&X25519PrimeField::get_curve_params().g_x),\n                CurveID::GRUMPKIN => {\n                    element_to_biguint(&GrumpkinPrimeField::get_curve_params().g_x)\n                }\n            },\n            match curve_id {\n                CurveID::BN254 => element_to_biguint(&BN254PrimeField::get_curve_params().g_y),\n                CurveID::BLS12_381 => {\n                    element_to_biguint(&BLS12381PrimeField::get_curve_params().g_y)\n                }\n                CurveID::SECP256K1 => {\n                    element_to_biguint(&SECP256K1PrimeField::get_curve_params().g_y)\n                }\n                CurveID::SECP256R1 => {\n                    element_to_biguint(&SECP256R1PrimeField::get_curve_params().g_y)\n                }\n                CurveID::X25519 => element_to_biguint(&X25519PrimeField::get_curve_params().g_y),\n                CurveID::GRUMPKIN => {\n                    element_to_biguint(&GrumpkinPrimeField::get_curve_params().g_y)\n                }\n            },\n            px,\n            py,\n        ],\n        &[s, e_neg],\n        curve_id as usize,\n        false,\n        true,\n    )?;\n\n    cd.extend(msm_cd);\n    Ok(cd)\n}\n\n/// Build calldata for ECDSA signature verification\n///\n/// Arguments:\n/// * `r` - signature r value\n/// * `s` - signature s value\n/// * `v` - recovery parameter (0 or 1)\n/// * `px` - public key x-coordinate\n/// * `py` - public key y-coordinate\n/// * `z` - message hash\n/// * `prepend_public_key` - whether to prepend the public key to the calldata\n/// * `curve_id` - curve identifier\n#[allow(clippy::too_many_arguments)]\npub fn ecdsa_calldata_builder(\n    r: BigUint,\n    s: BigUint,\n    v: u8,\n    px: BigUint,\n    py: BigUint,\n    z: BigUint,\n    prepend_public_key: bool,\n    curve_id: usize,\n) -> Result<Vec<BigUint>, String> {\n    let mut cd = Vec::new();\n\n    if prepend_public_key {\n        cd.extend(biguint_split::<4, 96>(&px).map(BigUint::from));\n        cd.extend(biguint_split::<4, 96>(&py).map(BigUint::from));\n    }\n    // Add base signature components\n    cd.extend(biguint_split::<4, 96>(&r).map(BigUint::from));\n    cd.extend(biguint_split::<2, 128>(&s).map(BigUint::from));\n    cd.push(BigUint::from(v));\n    cd.extend(biguint_split::<2, 128>(&z).map(BigUint::from));\n\n    // Calculate s_inv, u1, u2\n    let curve_id = CurveID::try_from(curve_id)?;\n    let n = get_curve_order(curve_id);\n\n    let s_inv = s.modpow(&(n.clone() - BigUint::from(2u32)), &n);\n    let u1 = (z * &s_inv) % &n;\n    let u2 = (r * &s_inv) % &n;\n\n    // Add MSM calldata for u1*G + u2*P\n    let msm_cd = msm_calldata_builder(\n        &[\n            match curve_id {\n                CurveID::BN254 => element_to_biguint(&BN254PrimeField::get_curve_params().g_x),\n                CurveID::BLS12_381 => {\n                    element_to_biguint(&BLS12381PrimeField::get_curve_params().g_x)\n                }\n                CurveID::SECP256K1 => {\n                    element_to_biguint(&SECP256K1PrimeField::get_curve_params().g_x)\n                }\n                CurveID::SECP256R1 => {\n                    element_to_biguint(&SECP256R1PrimeField::get_curve_params().g_x)\n                }\n                CurveID::X25519 => element_to_biguint(&X25519PrimeField::get_curve_params().g_x),\n                CurveID::GRUMPKIN => {\n                    element_to_biguint(&GrumpkinPrimeField::get_curve_params().g_x)\n                }\n            },\n            match curve_id {\n                CurveID::BN254 => element_to_biguint(&BN254PrimeField::get_curve_params().g_y),\n                CurveID::BLS12_381 => {\n                    element_to_biguint(&BLS12381PrimeField::get_curve_params().g_y)\n                }\n                CurveID::SECP256K1 => {\n                    element_to_biguint(&SECP256K1PrimeField::get_curve_params().g_y)\n                }\n                CurveID::SECP256R1 => {\n                    element_to_biguint(&SECP256R1PrimeField::get_curve_params().g_y)\n                }\n                CurveID::X25519 => element_to_biguint(&X25519PrimeField::get_curve_params().g_y),\n                CurveID::GRUMPKIN => {\n                    element_to_biguint(&GrumpkinPrimeField::get_curve_params().g_y)\n                }\n            },\n            px,\n            py,\n        ],\n        &[u1, u2],\n        curve_id as usize,\n        false,\n        true,\n    )?;\n\n    cd.extend(msm_cd);\n    Ok(cd)\n}\n\npub fn eddsa_calldata_builder(\n    ry_twisted: BigUint,\n    s: BigUint,\n    py_twisted: BigUint,\n    msg: Vec<u8>,\n    prepend_public_key: bool,\n) -> Result<Vec<BigUint>, String> {\n    let mut cd = Vec::new();\n\n    let max_value = BigUint::from(1u64) << 256;\n    if ry_twisted >= max_value {\n        return Err(\"Invalid Ry value\".to_string());\n    }\n    if py_twisted >= max_value {\n        return Err(\"Invalid Py value\".to_string());\n    }\n    if s >= max_value {\n        return Err(\"Invalid s value\".to_string());\n    }\n\n    if prepend_public_key {\n        cd.extend(biguint_split::<2, 128>(&py_twisted).map(BigUint::from));\n    }\n\n    cd.extend(biguint_split::<2, 128>(&ry_twisted).map(BigUint::from));\n    cd.extend(biguint_split::<2, 128>(&s).map(BigUint::from));\n    cd.push(BigUint::from(msg.len() as u64));\n    for byte in msg.clone() {\n        cd.push(BigUint::from(byte as u64));\n    }\n\n    let mut hasher = Sha512::new();\n\n    let ry_bytes = ry_twisted.to_bytes_le();\n    let py_bytes = py_twisted.to_bytes_le();\n\n    // Ensure the byte arrays are of length 32\n    let ry_bytes_padded = if ry_bytes.len() < 32 {\n        let mut padded = vec![0; 32];\n        padded[..ry_bytes.len()].copy_from_slice(&ry_bytes);\n        padded\n    } else {\n        ry_bytes\n    };\n\n    let py_bytes_padded = if py_bytes.len() < 32 {\n        let mut padded = vec![0; 32];\n        padded[..py_bytes.len()].copy_from_slice(&py_bytes);\n        padded\n    } else {\n        py_bytes\n    };\n\n    hasher.update(&ry_bytes_padded);\n    hasher.update(&py_bytes_padded);\n    hasher.update(msg);\n\n    let hash = hasher.finalize();\n\n    let hash_biguint = BigUint::from_bytes_le(&hash);\n\n    fn xrecover(y_twisted: FieldElement<X25519PrimeField>) -> FieldElement<X25519PrimeField> {\n        let d_twisted = FieldElement::<X25519PrimeField>::from_hex(\n            \"52036CEE2B6FFE738CC740797779E89800700A4D4141D8AB75EB4DCA135978A3\",\n        )\n        .unwrap();\n        let i = FieldElement::<X25519PrimeField>::from_hex(\n            \"2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0\",\n        )\n        .unwrap();\n        let y_sq = y_twisted.square();\n        let xx = ((y_sq - FieldElement::<X25519PrimeField>::one())\n            / (d_twisted * y_sq + FieldElement::<X25519PrimeField>::one()))\n        .unwrap();\n        // exp =(p+3) // 8\n        let exp = U256::from_hex(\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe\")\n            .unwrap();\n        let x = xx.pow(exp);\n        let x = if x.square() != xx { x * i } else { x };\n        let is_even = element_to_biguint(&x) % 2_u32 == BigUint::zero();\n        if is_even {\n            x\n        } else {\n            -x\n        }\n    }\n    fn decode_point(\n        compressed_point_le: BigUint,\n    ) -> (\n        FieldElement<X25519PrimeField>,\n        FieldElement<X25519PrimeField>,\n    ) {\n        let two_pow_255: BigUint = BigUint::from(1u64) << 255;\n        let sign_bit: BigUint = compressed_point_le.clone() / two_pow_255.clone();\n\n        let y_twisted = compressed_point_le % two_pow_255;\n\n        let y_twisted = element_from_biguint(&y_twisted);\n        let x_twisted = xrecover(y_twisted);\n\n        let x_twisted = if element_to_biguint(&x_twisted.clone()) % 2_u32 != sign_bit {\n            -x_twisted\n        } else {\n            x_twisted\n        };\n\n        (x_twisted, y_twisted)\n    }\n\n    let (r_point_x_twisted, r_point_y_twisted) = decode_point(ry_twisted);\n    let (p_point_x_twisted, p_point_y_twisted) = decode_point(py_twisted);\n\n    let (r_point_x_weierstrass, r_point_y_weierstrass) =\n        X25519PrimeField::to_weirstrass(r_point_x_twisted, r_point_y_twisted);\n    let (p_point_x_weierstrass, p_point_y_weierstrass) =\n        X25519PrimeField::to_weirstrass(p_point_x_twisted, p_point_y_twisted);\n\n    let _p_pt =\n        G1Point::new(p_point_x_weierstrass, p_point_y_weierstrass, false).expect(\"Invalid point P\");\n    let _r_pt =\n        G1Point::new(r_point_x_weierstrass, r_point_y_weierstrass, false).expect(\"Invalid point R\");\n\n    let gx = element_to_biguint(&X25519PrimeField::get_curve_params().g_x);\n    let modulus = get_modulus_from_curve_id(CurveID::X25519);\n    let neg_gy = modulus - element_to_biguint(&X25519PrimeField::get_curve_params().g_y);\n\n    let h = hash_biguint % get_curve_order(CurveID::X25519);\n\n    let values = &[\n        gx,\n        neg_gy,\n        element_to_biguint(&p_point_x_weierstrass),\n        element_to_biguint(&p_point_y_weierstrass),\n    ];\n    let scalars = &[s, h];\n\n    let msm_cd = msm_calldata_builder(values, scalars, CurveID::X25519 as usize, false, true)?;\n\n    cd.extend(msm_cd);\n\n    cd.extend(biguint_split::<2, 128>(&element_to_biguint(&r_point_x_twisted)).map(BigUint::from));\n    cd.extend(biguint_split::<2, 128>(&element_to_biguint(&p_point_x_twisted)).map(BigUint::from));\n\n    Ok(cd)\n}\n\n/// PKCS#1 v1.5 SHA-256 DigestInfo prefix (DER-encoded AlgorithmIdentifier + NULL param).\n/// RFC 8017, Section 9.2, Note 1.\nconst PKCS1_SHA256_DIGEST_INFO_PREFIX: [u8; 19] = [\n    0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05,\n    0x00, 0x04, 0x20,\n];\n\n/// Encode a SHA-256 hash as a PKCS#1 v1.5 padded integer (RFC 8017, Section 9.2).\n///\n/// Constructs: 0x00 || 0x01 || PS(0xFF × 202) || 0x00 || DigestInfo || H\nfn pkcs1_v1_5_encode_sha256(message_hash: &[u8; 32]) -> BigUint {\n    let mut encoded = vec![0x00, 0x01];\n    encoded.extend(std::iter::repeat_n(0xff, 202));\n    encoded.push(0x00);\n    encoded.extend_from_slice(&PKCS1_SHA256_DIGEST_INFO_PREFIX);\n    encoded.extend_from_slice(message_hash);\n    BigUint::from_bytes_be(&encoded)\n}\n\n/// Serialize a Cairo `ByteArray` as felt252 calldata.\n///\n/// Layout: [num_full_words, word_0, ..., word_{n-1}, pending_word, pending_word_len]\n/// Each full word is 31 bytes. The pending word is 0-30 bytes.\nfn serialize_byte_array(data: &[u8]) -> Vec<BigUint> {\n    let full_word_count = data.len() / 31;\n    let pending_len = data.len() % 31;\n\n    let mut cd = Vec::new();\n    cd.push(BigUint::from(full_word_count as u64));\n\n    for i in 0..full_word_count {\n        let start = i * 31;\n        let word = BigUint::from_bytes_be(&data[start..start + 31]);\n        cd.push(word);\n    }\n\n    if pending_len > 0 {\n        let pending = BigUint::from_bytes_be(&data[full_word_count * 31..]);\n        cd.push(pending);\n    } else {\n        cd.push(BigUint::zero());\n    }\n    cd.push(BigUint::from(pending_len as u64));\n\n    cd\n}\n\n/// Build calldata for RSA-2048 SHA-256 signature verification.\n///\n/// Computes SHA-256(message), builds PKCS#1 v1.5 encoding, generates\n/// the RSA reduction witnesses, and appends the ByteArray-serialized message.\n///\n/// Arguments:\n/// * `signature` - RSA signature s in [0, modulus)\n/// * `message` - Raw message bytes\n/// * `modulus` - RSA-2048 modulus n\n/// * `prepend_public_key` - Whether to prepend n to the calldata\npub fn rsa_2048_sha256_calldata_builder(\n    signature: BigUint,\n    message: &[u8],\n    modulus: BigUint,\n    prepend_public_key: bool,\n) -> Result<Vec<BigUint>, String> {\n    let hash: [u8; 32] = Sha256::digest(message)\n        .as_slice()\n        .try_into()\n        .map_err(|_| \"SHA-256 digest failed\")?;\n\n    let expected_message = pkcs1_v1_5_encode_sha256(&hash);\n\n    let mut cd =\n        rsa_2048_calldata_builder(signature, expected_message, modulus, prepend_public_key)?;\n\n    cd.extend(serialize_byte_array(message));\n\n    Ok(cd)\n}\n\n/// Serialize a 2048-bit integer to 24 calldata elements (96-bit words).\n///\n/// Layout: 6 chunks of 4 words each. The first 5 chunks hold 384 bits,\n/// the last chunk holds 128 bits (top 2 words are zero).\nfn serialize_rsa2048_integer(x: &BigUint) -> Vec<BigUint> {\n    biguint_split::<24, 96>(x)\n        .iter()\n        .map(|&w| BigUint::from(w))\n        .collect()\n}\n\n/// Build calldata for RSA-2048 signature verification.\n///\n/// Computes s^{65537} mod n via square-and-multiply, generating 17\n/// reduction witnesses (quotient, remainder) that certify each step.\n///\n/// Arguments:\n/// * `signature` - RSA signature s in [0, modulus)\n/// * `expected_message` - Expected result m = s^{65537} mod n\n/// * `modulus` - RSA-2048 modulus n\n/// * `prepend_public_key` - Whether to prepend n to the calldata\npub fn rsa_2048_calldata_builder(\n    signature: BigUint,\n    expected_message: BigUint,\n    modulus: BigUint,\n    prepend_public_key: bool,\n) -> Result<Vec<BigUint>, String> {\n    if modulus.bits() > 2048 || modulus <= BigUint::one() {\n        return Err(\"modulus must be a positive integer fitting in 2048 bits\".into());\n    }\n    if signature >= modulus {\n        return Err(\"signature must be less than modulus\".into());\n    }\n    if expected_message >= modulus {\n        return Err(\"expected_message must be less than modulus\".into());\n    }\n\n    // Verify s^{65537} ≡ m (mod n)\n    let e = BigUint::from(65537u32);\n    if signature.modpow(&e, &modulus) != expected_message {\n        return Err(\"signature^65537 mod modulus does not equal expected_message\".into());\n    }\n\n    // Square-and-multiply for e = 65537 = 2^16 + 1:\n    // 16 squarings followed by 1 multiplication = 17 reductions.\n    let mut acc = signature.clone();\n    let mut witnesses: Vec<(BigUint, BigUint)> = Vec::with_capacity(17);\n\n    for _ in 0..16 {\n        let product = &acc * &acc;\n        let quotient = &product / &modulus;\n        let remainder = &product % &modulus;\n        witnesses.push((quotient, remainder.clone()));\n        acc = remainder;\n    }\n\n    let product = &acc * &signature;\n    let quotient = &product / &modulus;\n    let remainder = &product % &modulus;\n    witnesses.push((quotient, remainder));\n\n    // Serialize to calldata\n    let mut cd = Vec::new();\n    if prepend_public_key {\n        cd.extend(serialize_rsa2048_integer(&modulus));\n    }\n    cd.extend(serialize_rsa2048_integer(&signature));\n    cd.extend(serialize_rsa2048_integer(&expected_message));\n\n    for (q, r) in &witnesses {\n        cd.extend(serialize_rsa2048_integer(q));\n        cd.extend(serialize_rsa2048_integer(r));\n    }\n\n    Ok(cd)\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_pkcs1_v1_5_encode_sha256_structure() {\n        let hash = [0u8; 32];\n        let encoded = pkcs1_v1_5_encode_sha256(&hash);\n        let encoded_bytes = encoded.to_bytes_be();\n\n        // Pad to 256 bytes (leading 0x00 is dropped by BigUint)\n        let mut padded = vec![0u8; 256 - encoded_bytes.len()];\n        padded.extend_from_slice(&encoded_bytes);\n\n        assert_eq!(padded[0], 0x00);\n        assert_eq!(padded[1], 0x01);\n        assert!(padded[2..204].iter().all(|&b| b == 0xff));\n        assert_eq!(padded[204], 0x00);\n        assert_eq!(&padded[205..224], &PKCS1_SHA256_DIGEST_INFO_PREFIX);\n        assert_eq!(&padded[224..256], &hash);\n    }\n\n    #[test]\n    fn test_serialize_byte_array_empty() {\n        let cd = serialize_byte_array(b\"\");\n        // [0 full words, pending_word=0, pending_word_len=0]\n        assert_eq!(cd.len(), 3);\n        assert_eq!(cd[0], BigUint::zero());\n        assert_eq!(cd[1], BigUint::zero());\n        assert_eq!(cd[2], BigUint::zero());\n    }\n\n    #[test]\n    fn test_serialize_byte_array_short() {\n        let msg = b\"hello\";\n        let cd = serialize_byte_array(msg);\n        // 5 bytes < 31, so 0 full words, pending = \"hello\", pending_len = 5\n        assert_eq!(cd.len(), 3);\n        assert_eq!(cd[0], BigUint::zero()); // 0 full words\n        assert_eq!(cd[1], BigUint::from_bytes_be(msg)); // pending word\n        assert_eq!(cd[2], BigUint::from(5u32)); // pending len\n    }\n\n    #[test]\n    fn test_serialize_byte_array_exact_word() {\n        let msg = vec![0xABu8; 31]; // exactly one full word\n        let cd = serialize_byte_array(&msg);\n        // 1 full word, pending = 0, pending_len = 0\n        assert_eq!(cd.len(), 4);\n        assert_eq!(cd[0], BigUint::one()); // 1 full word\n        assert_eq!(cd[1], BigUint::from_bytes_be(&msg)); // word_0\n        assert_eq!(cd[2], BigUint::zero()); // pending = 0\n        assert_eq!(cd[3], BigUint::zero()); // pending_len = 0\n    }\n\n    #[test]\n    fn test_serialize_byte_array_multi() {\n        let msg = vec![0xCDu8; 65]; // 2 full words (62 bytes) + 3 pending\n        let cd = serialize_byte_array(&msg);\n        assert_eq!(cd.len(), 5); // num_full + word0 + word1 + pending + pending_len\n        assert_eq!(cd[0], BigUint::from(2u32));\n        assert_eq!(cd[4], BigUint::from(3u32)); // pending_len\n    }\n\n    #[test]\n    fn test_rsa_2048_sha256_calldata_pkcs_encoding() {\n        let hash: [u8; 32] = Sha256::digest(b\"hello garaga\").into();\n        let expected_message = pkcs1_v1_5_encode_sha256(&hash);\n        let em_bytes = expected_message.to_bytes_be();\n        let mut padded = vec![0u8; 256 - em_bytes.len()];\n        padded.extend_from_slice(&em_bytes);\n        assert_eq!(&padded[224..256], &hash);\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/constants.rs",
    "content": "//! Auto-generated constants file from constants.json. Do not edit manually.\n\nuse num_bigint::BigUint;\nuse num_traits::Num;\n\n// RISC0 Constants\n// https://github.com/risc0/risc0-ethereum/blob/v2.2.2/contracts/src/groth16/ControlID.sol\n// release v2.2.2\npub fn get_risc0_constants() -> (BigUint, BigUint) {\n    let risc0_control_root = BigUint::from_str_radix(\n        \"CE52BF56033842021AF3CF6DB8A50D1B7535C125A34F1A22C6FDCF002C5A1529\",\n        16,\n    )\n    .unwrap();\n    let risc0_bn254_control_id = BigUint::from_str_radix(\n        \"04446E66D300EB7FB45C9726BB53C793DDA407A62E9601618BB43C5C14657AC0\",\n        16,\n    )\n    .unwrap();\n    (risc0_control_root, risc0_bn254_control_id)\n}\n\n// SP1 Constants\n// https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/v5.0.0/SP1VerifierGroth16.sol\npub const SP1_VERIFIER_VERSION: &str = \"v5.0.0\";\npub const SP1_VERIFIER_HASH: &str =\n    \"0xa4594c59bbc142f3b81c3ecb7f50a7c34bc9af7c4c444b5d48b795427e285913\";\n\n// Additional RISC0 constants for internal use\npub const RISC0_SYSTEM_STATE_ZERO_DIGEST: &str =\n    \"0xA3ACC27117418996340B84E5A90F3EF4C49D22C79E44AAD822EC9C313E1EB8E2\";\npub const RISC0_TAG_DIGEST: &str =\n    \"0xcb1fefcd1f2d9a64975cbbbf6e161e2914434b0cbb9960b84df5d717e86b48af\";\npub const RISC0_OUTPUT_TAG: &str =\n    \"0x77eafeb366a78b47747de0d7bb176284085ff5564887009a5be63da32d3559d4\";\n"
  },
  {
    "path": "tools/garaga_rs/src/crypto/digest.rs",
    "content": "use core::fmt;\n\n// use arbitrary::Arbitrary;\n// use bfieldcodec_derive::BFieldCodec;\n// use get_size2::GetSize;\n// use itertools::Itertools;\n// use num_traits::Zero;\n// use rand::distr::Distribution;\n// use rand::distr::StandardUniform;\n// use rand::Rng;\n// use serde::Deserialize;\n// use serde::Deserializer;\n// use serde::Serialize;\n// use serde::Serializer;\n\n// use crate::crypto::poseidon_bn254::poseidon_hash_bn254;\nuse crate::crypto::poseidon_bn254::poseidon_hash_bn254;\nuse crate::definitions::{FieldElement, GrumpkinPrimeField, Random};\n// use crate::error::TryFromDigestError;\n// use crate::error::TryFromHexDigestError;\n// use crate::math::b_field_element::BFieldElement;\n// use crate::prelude::Tip5;\n\n/// A trait defining the hash function interface\npub trait HashFunction: Clone + Copy + fmt::Debug + PartialEq {\n    /// The type of elements being hashed\n    type Element: Clone + Copy + PartialEq + Eq + Default + fmt::Debug + From<u64>;\n\n    /// Hash two elements together\n    fn hash_pair(left: &Self::Element, right: &Self::Element) -> Self::Element;\n    fn hash_single(element: &Self::Element) -> Self::Element;\n    fn random() -> Self::Element;\n}\n\n// /// A fixed-size array of BFieldElements\n// #[derive(Clone, Copy, Debug, PartialEq, Eq)]\n// pub struct Tip5Element([BFieldElement; 5]);\n\n// /// Implementation for Tip5 hash function\n// pub struct Tip5Hash;\n\n// impl HashFunction for Tip5Hash {\n//     type Element = Tip5Element;\n\n//     fn hash_pair(left: &Self::Element, right: &Self::Element) -> Self::Element {\n//         let result = Tip5::hash_pair(&left.0, &right.0);\n//         Tip5Element(result.try_into().unwrap())\n//     }\n// }\n\n/// Implementation for Poseidon BN254 hash function\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\npub struct PoseidonBn254Hash;\n\nimpl HashFunction for PoseidonBn254Hash {\n    type Element = FieldElement<GrumpkinPrimeField>;\n\n    fn hash_pair(left: &Self::Element, right: &Self::Element) -> Self::Element {\n        poseidon_hash_bn254(left, right)\n    }\n    fn hash_single(element: &Self::Element) -> Self::Element {\n        let zero = FieldElement::<GrumpkinPrimeField>::zero();\n        poseidon_hash_bn254(element, &zero)\n    }\n    fn random() -> Self::Element {\n        FieldElement::<GrumpkinPrimeField>::random()\n    }\n}\n\n/// Generate a vector of n random digests for the given hash function type\npub fn random_elements<H: HashFunction>(n: usize) -> Vec<Digest<H>> {\n    (0..n).map(|_| Digest::new(H::random())).collect()\n}\n\n/// A fixed-size digest for hash functions\n#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]\npub struct Digest<H: HashFunction>\nwhere\n    H::Element: Clone + Copy + PartialEq + Eq + fmt::Debug,\n{\n    pub data: H::Element,\n}\n\nimpl<H: HashFunction> Digest<H> {\n    /// The number of bytes in a digest.\n    // pub const BYTES: usize = BFieldElement::BYTES;\n    /// The all-zero digest.\n    pub(crate) fn all_zero() -> Self {\n        Self {\n            data: H::Element::default(),\n        }\n    }\n\n    pub const fn value(self) -> H::Element {\n        self.data\n    }\n\n    pub const fn new(element: H::Element) -> Self {\n        Self { data: element }\n    }\n\n    /// Hash this digest using the specified hash function H\n    pub fn hash_pair(left: &Self, right: &Self) -> Self {\n        Self {\n            data: H::hash_pair(&left.data, &right.data),\n        }\n    }\n\n    pub fn to_element(self) -> H::Element {\n        self.data\n    }\n\n    pub fn from_element(element: H::Element) -> Self {\n        Self { data: element }\n    }\n}\n\nimpl<H: HashFunction> Default for Digest<H> {\n    fn default() -> Self {\n        Self::all_zero()\n    }\n}\n\nimpl<H: HashFunction> fmt::Display for Digest<H> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        write!(f, \"{:?}\", self.data)\n    }\n}\n\n// impl<H: HashFunction> fmt::LowerHex for Digest<H> {\n//     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n//         let bytes = <[u8; Self::BYTES]>::from(*self);\n//         write!(f, \"{}\", hex::encode(bytes))\n//     }\n// }\n\n// impl<H: HashFunction> fmt::UpperHex for Digest<H> {\n//     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n//         let bytes = <[u8; Self::BYTES]>::from(*self);\n//         write!(f, \"{}\", hex::encode_upper(bytes))\n//     }\n// }\n\n// impl<H: HashFunction> Distribution<Digest<H>> for StandardUniform {\n//     fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Digest<H> {\n//         Digest::new(rng.random())\n//     }\n// }\n\n// impl<H: HashFunction> FromStr for Digest<H> {\n//     type Err = TryFromDigestError;\n\n//     fn from_str(string: &str) -> Result<Self, Self::Err> {\n//         let bfes: Vec<_> = string\n//             .split(',')\n//             .map(str::parse::<H::Element>)\n//             .try_collect()?;\n//         let invalid_len_err = Self::Err::InvalidLength(bfes.len());\n//         let digest_innards = bfes.try_into().map_err(|_| invalid_len_err)?;\n\n//         Ok(Digest {\n//             data: digest_innards,\n//         })\n//     }\n// }\n\n#[derive(Debug)]\npub struct TryFromDigestError;\n\n#[derive(Debug)]\npub struct TryFromHexDigestError;\n\n// impl<H: HashFunction> TryFrom<Vec<H::Element>> for Digest<H> {\n//     type Error = TryFromDigestError;\n\n//     fn try_from(value: Vec<H::Element>) -> Result<Self, Self::Error> {\n//         Digest::try_from(&value as &[H::Element])\n//     }\n// }\n\n// impl<H: HashFunction> From<Digest<H>> for Vec<H::Element> {\n//     fn from(val: Digest<H>) -> Self {\n//         val.data.to_vec()\n//     }\n// }\n\n// impl<H: HashFunction> From<Digest<H>> for [u8; BFieldElement::BYTES] {\n//     fn from(Digest { data }: Digest<H>) -> Self {\n//         // This needs to be implemented based on how you want to serialize your Element type\n//         unimplemented!(\"Implement byte serialization for Element type\")\n//     }\n// }\n\n// impl<H: HashFunction> TryFrom<[u8; BFieldElement::BYTES]> for Digest<H> {\n//     type Error = TryFromDigestError;\n\n//     fn try_from(bytes: [u8; BFieldElement::BYTES]) -> Result<Self, Self::Error> {\n//         // This needs to be implemented based on how you want to deserialize your Element type\n//         unimplemented!(\"Implement byte deserialization for Element type\")\n//     }\n// }\n\n// impl<H: HashFunction> TryFrom<BigUint> for Digest<H>\n// where\n//     H::Element: TryFrom<BigUint, Error = TryFromDigestError>,\n// {\n//     type Error = TryFromDigestError;\n\n//     fn try_from(value: BigUint) -> Result<Self, Self::Error> {\n//         let mut remaining = value;\n//         let mut digest_innards = H::Element::ZERO;\n//         let modulus: BigUint = BFieldElement::P.into();\n//         for digest_element in &mut digest_innards {\n//             let element = u64::try_from(remaining.clone() % modulus.clone()).unwrap();\n//             *digest_element = H::Element::new(element);\n//             remaining /= modulus.clone();\n//         }\n\n//         if !remaining.is_zero() {\n//             return Err(Self::Error::Overflow);\n//         }\n\n//         Ok(Self {\n//             data: digest_innards,\n//         })\n//     }\n// }\n\n// impl<H: HashFunction> From<Digest<H>> for BigUint\n// where\n//     H::Element: Into<BigUint>,\n// {\n//     fn from(digest: Digest<H>) -> Self {\n//         let Digest { data } = digest;\n//         let mut ret = BigUint::zero();\n//         let modulus: BigUint = BFieldElement::P.into();\n//         for i in (0..BFieldElement::BYTES).rev() {\n//             ret *= modulus.clone();\n//             let digest_element: BigUint = data[i].value().into();\n//             ret += digest_element;\n//         }\n\n//         ret\n//     }\n// }\n\n// impl<H: HashFunction> Digest<H> {\n//     /// Encode digest as hex.\n//     ///\n//     /// Since `Digest` also implements [`LowerHex`][lo] and [`UpperHex`][up], it is\n//     /// possible to `{:x}`-format directly, _e.g._, `print!(\"{digest:x}\")`.\n//     ///\n//     /// [lo]: fmt::LowerHex\n//     /// [up]: fmt::UpperHex\n//     pub fn to_hex(self) -> String {\n//         format!(\"{self:x}\")\n//     }\n\n//     /// Decode hex string to [`Digest`]. Must not include leading \"0x\".\n//     pub fn try_from_hex(data: impl AsRef<[u8]>) -> Result<Self, TryFromHexDigestError> {\n//         let slice = hex::decode(data)?;\n//         Ok(Self::try_from(&slice as &[u8])?)\n//     }\n// }\n\n// we implement Serialize so that we can serialize as hex for human readable\n// formats like JSON but use default serializer for other formats likes bincode\n// impl<H: HashFunction> Serialize for Digest<H>\n// where\n//     H::Element: Serialize,\n// {\n//     fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n//     where\n//         S: Serializer,\n//     {\n//         if serializer.is_human_readable() {\n//             self.to_hex().serialize(serializer)\n//         } else {\n//             self.data.serialize(serializer)\n//         }\n//     }\n// }\n\n// we impl Deserialize so that we can deserialize as hex for human readable\n// formats like JSON but use default deserializer for other formats like bincode\n// impl<'de, H: HashFunction> Deserialize<'de> for Digest<H>\n// where\n//     H::Element: Deserialize<'de>,\n// {\n//     fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>\n//     where\n//         D: Deserializer<'de>,\n//     {\n//         if deserializer.is_human_readable() {\n//             let hex_string = String::deserialize(deserializer)?;\n//             Self::try_from_hex(hex_string).map_err(serde::de::Error::custom)\n//         } else {\n//             Ok(Self::new(H::Element::deserialize(deserializer)?))\n//         }\n//     }\n// }\n\n// Implement conversion between Digest and FieldElement for PoseidonBn254\nimpl From<Digest<PoseidonBn254Hash>> for FieldElement<GrumpkinPrimeField> {\n    fn from(_digest: Digest<PoseidonBn254Hash>) -> Self {\n        // Implement conversion logic here\n        // This might need to be adjusted based on your specific requirements\n        unimplemented!(\"Need to implement conversion from Digest to FieldElement\")\n    }\n}\n\nimpl From<FieldElement<GrumpkinPrimeField>> for Digest<PoseidonBn254Hash> {\n    fn from(_field: FieldElement<GrumpkinPrimeField>) -> Self {\n        // Implement conversion logic here\n        // This might need to be adjusted based on your specific requirements\n        unimplemented!(\"Need to implement conversion from FieldElement to Digest\")\n    }\n}\n\n// // Keep existing implementations but make them generic over H\n// impl<H: HashFunction> PartialOrd for Digest<H> {\n//     fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {\n//         self.data.partial_cmp(&other.data)\n//     }\n// }\n\n// impl<H: HashFunction> Ord for Digest<H> {\n//     fn cmp(&self, other: &Self) -> std::cmp::Ordering {\n//         self.data.cmp(&other.data)\n//     }\n// }\n\n// impl<H: HashFunction> GetSize for Digest<H>\n// where\n//     H::Element: GetSize,\n// {\n//     fn get_stack_size() -> usize {\n//         std::mem::size_of::<Self>()\n//     }\n\n//     fn get_heap_size(&self) -> usize {\n//         self.data.get_heap_size()\n//     }\n// }\n\n// impl fmt::Display for Tip5Element {\n//     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n//         write!(f, \"{:?}\", self.0)\n//     }\n// }\n\n// // Implement conversion between array and Tip5Element\n// impl From<[BFieldElement; 5]> for Tip5Element {\n//     fn from(array: [BFieldElement; 5]) -> Self {\n//         Self(array)\n//     }\n// }\n\n// impl From<Tip5Element> for [BFieldElement; 5] {\n//     fn from(element: Tip5Element) -> Self {\n//         element.0\n//     }\n// }\n\n// // Add AsRef for convenient slice access\n// impl AsRef<[BFieldElement]> for Tip5Element {\n//     fn as_ref(&self) -> &[BFieldElement] {\n//         &self.0\n//     }\n// }\n\n// // Add AsMut for convenient mutable slice access\n// impl AsMut<[BFieldElement]> for Tip5Element {\n//     fn as_mut(&mut self) -> &mut [BFieldElement] {\n//         &mut self.0\n//     }\n// }\n\n// // Add these impls\n// impl<H: HashFunction> From<Digest<H>> for H::Element {\n//     fn from(digest: Digest<H>) -> Self {\n//         digest.data\n//     }\n// }\n\nimpl<H: HashFunction> AsRef<H::Element> for Digest<H> {\n    fn as_ref(&self) -> &H::Element {\n        &self.data\n    }\n}\n\nimpl<'a, H: HashFunction> arbitrary::Arbitrary<'a> for Digest<H> {\n    fn arbitrary(_u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result<Self> {\n        Ok(Self::new(H::random()))\n    }\n}\n\n// #[cfg(test)]\n// pub(crate) mod digest_tests {\n//     use num_traits::One;\n//     use proptest::collection::vec;\n//     use proptest::prelude::Arbitrary as ProptestArbitrary;\n//     use proptest::prelude::*;\n//     use proptest_arbitrary_interop::arb;\n//     use test_strategy::proptest;\n\n//     use super::*;\n//     // use crate::prelude::*;\n\n//     impl ProptestArbitrary for Digest<PoseidonBn254Hash> {\n//         type Parameters = ();\n//         fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {\n//             arb().prop_map(|d| d).no_shrink().boxed()\n//         }\n\n//         type Strategy = BoxedStrategy<Self>;\n//     }\n\n//     /// Test helper struct for corrupting digests. Primarily used for negative tests.\n//     #[derive(Debug, Clone, PartialEq, Eq, test_strategy::Arbitrary)]\n//     pub(crate) struct DigestCorruptor;\n\n//     impl DigestCorruptor {\n//         pub fn corrupt_digest<H: HashFunction>(&self, digest: Digest<H>) -> Digest<H> {\n//             // Generate a new random digest different from the input\n//             loop {\n//                 let new_digest = Digest::new(H::random());\n//                 if new_digest != digest {\n//                     return new_digest;\n//                 }\n//             }\n//         }\n//     }\n\n//     // mod serde_test {\n//     //     use super::hex_test::hex_examples;\n//     //     use super::*;\n\n//     //     mod json_test {\n//     //         use super::*;\n\n//     //         #[test]\n//     //         fn serialize() -> Result<(), serde_json::Error> {\n//     //             for (digest, hex) in hex_examples() {\n//     //                 assert_eq!(serde_json::to_string(&digest)?, format!(\"\\\"{}\\\"\", hex));\n//     //             }\n//     //             Ok(())\n//     //         }\n\n//     //         #[test]\n//     //         fn deserialize() -> Result<(), serde_json::Error> {\n//     //             for (digest, hex) in hex_examples() {\n//     //                 let json_hex = format!(\"\\\"{}\\\"\", hex);\n//     //                 let digest_deserialized: Digest = serde_json::from_str::<Digest>(&json_hex)?;\n//     //                 assert_eq!(digest_deserialized, digest);\n//     //             }\n//     //             Ok(())\n//     //         }\n//     //     }\n\n//     //     mod bincode_test {\n//     //         use super::*;\n\n//     //         fn bincode_examples() -> Vec<(Digest, [u8; Digest::BYTES])> {\n//     //             vec![\n//     //                 (Digest::default(), [0u8; Digest::BYTES]),\n//     //                 (\n//     //                     Digest::new(bfe_array![0, 1, 10, 15, 255]),\n//     //                     [\n//     //                         0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0,\n//     //                         0, 15, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0,\n//     //                     ],\n//     //                 ),\n//     //             ]\n//     //         }\n\n//     //         #[test]\n//     //         fn serialize() {\n//     //             for (digest, bytes) in bincode_examples() {\n//     //                 assert_eq!(bincode::serialize(&digest).unwrap(), bytes);\n//     //             }\n//     //         }\n\n//     //         #[test]\n//     //         fn deserialize() {\n//     //             for (digest, bytes) in bincode_examples() {\n//     //                 assert_eq!(bincode::deserialize::<Digest>(&bytes).unwrap(), digest);\n//     //             }\n//     //         }\n//     //     }\n//     // }\n// }\n"
  },
  {
    "path": "tools/garaga_rs/src/crypto/merkle_tree.rs",
    "content": "use crate::crypto::digest::{Digest, HashFunction};\nuse arbitrary::{Arbitrary, Unstructured};\nuse itertools::Itertools;\nuse lazy_static::lazy_static;\n// use rayon::prelude::*;\nuse std::collections::hash_map::Entry::*;\nuse std::collections::*;\nuse std::fmt::Debug;\nuse std::result;\nuse thiserror::Error; // Add this import\n\n// use crate::prelude::*;\n\nconst DEFAULT_PARALLELIZATION_CUTOFF: usize = 512;\nlazy_static! {\n    static ref PARALLELIZATION_CUTOFF: usize =\n        std::env::var(\"TWENTY_FIRST_MERKLE_TREE_PARALLELIZATION_CUTOFF\")\n            .ok()\n            .and_then(|v| v.parse().ok())\n            .unwrap_or(DEFAULT_PARALLELIZATION_CUTOFF);\n}\n\n/// Enforces that all compilation targets have a consistent [`MAX_TREE_HEIGHT`].\n/// In particular, if `usize` has more than 32 bits, the maximum height of a\n/// Merkle tree is limited as if only 32 bits were available. If `usize` has\n/// less than 32 bits, compilation will fail.\n///\n/// Using a type other than `usize` could enable a higher maximum height, but\n/// would require a different storage mechanism for the Merkle tree's nodes:\n/// indexing into a `Vec<_>` can only be done with `usize`.\nconst MAX_NUM_NODES: usize = 1 << (32 - 1);\nconst MAX_NUM_LEAFS: usize = MAX_NUM_NODES / 2;\n\n/// The maximum height of a Merkle tree.\npub const MAX_TREE_HEIGHT: usize = MAX_NUM_LEAFS.ilog2() as usize;\n\ntype Result<T> = result::Result<T, MerkleTreeError>;\n\n/// A [Merkle tree][merkle_tree] is a binary tree of [digests](Digest) that is\n/// used to efficiently prove the inclusion of items in a set. Set inclusion can\n/// be verified through an [inclusion proof](MerkleTreeInclusionProof).\n///\n/// The used hash function is [`Tip5`].\n///\n/// [merkle_tree]: https://en.wikipedia.org/wiki/Merkle_tree\n#[derive(Debug, Clone, PartialEq, Eq)]\npub struct MerkleTree<H: HashFunction> {\n    nodes: Vec<Digest<H>>,\n}\n\n/// A full inclusion proof for the leafs at the supplied indices, including the\n/// leafs themselves. The proof is relative to some [Merkle tree](MerkleTree),\n/// which is not necessarily (and generally cannot be) known in its entirety by\n/// the verifier.\n#[derive(Debug, Clone, PartialEq, Eq, Default)]\npub struct MerkleTreeInclusionProof<H: HashFunction> {\n    /// The stated height of the Merkle tree this proof is relative to.\n    pub tree_height: usize,\n\n    /// The leafs the proof is about, _i.e._, the revealed leafs.\n    ///\n    /// Purposefully not a [`HashMap`] to preserve order of the keys, which is\n    /// relevant for [`into_authentication_paths`][paths].\n    ///\n    /// [paths]: MerkleTreeInclusionProof::into_authentication_paths\n    pub indexed_leafs: Vec<(usize, Digest<H>)>,\n\n    /// The proof's witness: de-duplicated authentication structure for the\n    /// leafs this proof is about. See [`authentication_structure`][auth_structure]\n    /// for details.\n    ///\n    /// [auth_structure]: MerkleTree::authentication_structure\n    pub authentication_structure: Vec<Digest<H>>,\n}\n\n/// Helper struct for verifying inclusion of items in a Merkle tree.\n///\n/// Continuing the example from [`authentication_structure`][auth_structure],\n/// the partial tree for leafs 0 and 2, _i.e._, nodes 8 and 10 respectively,\n/// with nodes [11, 9, 3] from the authentication structure is:\n///\n/// ```markdown\n///         ──── _ ────\n///        ╱           ╲\n///       _             3\n///      ╱  ╲\n///     ╱    ╲\n///    _      _\n///   ╱ ╲    ╱ ╲\n///  8   9  10 11\n/// ```\n///\n/// [auth_structure]: MerkleTree::authentication_structure\n#[derive(Debug, Clone, PartialEq, Eq, Default)]\npub(crate) struct PartialMerkleTree<H: HashFunction> {\n    tree_height: usize,\n    leaf_indices: Vec<usize>,\n    nodes: HashMap<usize, Digest<H>>,\n}\n\nimpl<H: HashFunction> MerkleTree<H> {\n    /// The index of the root node.\n    ///\n    /// If you need to read the root, try [`root()`](Self::root) instead.\n    pub(crate) const ROOT_INDEX: usize = 1;\n\n    /// Build a MerkleTree with the given leafs.\n    ///\n    /// [`MerkleTree::par_new`] is equivalent and usually faster.\n    ///\n    /// # Errors\n    ///\n    /// - If the number of leafs is zero.\n    /// - If the number of leafs is not a power of two.\n    pub fn sequential_new(leafs: &[Digest<H>]) -> Result<Self> {\n        let mut nodes = Self::initialize_merkle_tree_nodes(leafs)?;\n\n        for i in (MerkleTree::<H>::ROOT_INDEX..leafs.len()).rev() {\n            nodes[i] =\n                Digest::<H>::from_element(H::hash_pair(&nodes[i * 2].data, &nodes[i * 2 + 1].data));\n        }\n\n        Ok(MerkleTree { nodes })\n    }\n\n    /// Build a MerkleTree with the given leafs.\n    ///\n    /// Uses [`rayon`] to parallelize Merkle tree construction. If the use of\n    /// [`rayon`] is not an option in your context, use\n    /// [`MerkleTree::sequential_new`], which is equivalent but usually slower.\n    ///\n    /// # Errors\n    ///\n    /// - If the number of leafs is zero.\n    /// - If the number of leafs is not a power of two.\n    pub fn par_new(leafs: &[Digest<H>]) -> Result<Self> {\n        let mut nodes = Self::initialize_merkle_tree_nodes(leafs)?;\n\n        // (not) parallel\n        let mut num_nodes_on_this_level = leafs.len();\n        while num_nodes_on_this_level >= *PARALLELIZATION_CUTOFF {\n            num_nodes_on_this_level /= 2;\n            let node_indices_on_this_level = num_nodes_on_this_level..2 * num_nodes_on_this_level;\n            let nodes_on_this_level = node_indices_on_this_level\n                .clone()\n                .map(|i| {\n                    Digest::<H>::from_element(H::hash_pair(\n                        &nodes[i * 2].data,\n                        &nodes[i * 2 + 1].data,\n                    ))\n                })\n                .collect::<Vec<_>>();\n            nodes[node_indices_on_this_level].copy_from_slice(&nodes_on_this_level);\n        }\n\n        // sequential\n        let num_remaining_nodes = num_nodes_on_this_level;\n        for i in (MerkleTree::<H>::ROOT_INDEX..num_remaining_nodes).rev() {\n            nodes[i] =\n                Digest::<H>::from_element(H::hash_pair(&nodes[i * 2].data, &nodes[i * 2 + 1].data));\n        }\n\n        Ok(MerkleTree { nodes })\n    }\n\n    /// Helps to kick off Merkle tree construction. Sets up the Merkle tree's\n    /// internal nodes if (and only if) it is possible to construct a Merkle\n    /// tree with the given leafs.\n    fn initialize_merkle_tree_nodes(leafs: &[Digest<H>]) -> Result<Vec<Digest<H>>> {\n        if leafs.is_empty() {\n            return Err(MerkleTreeError::TooFewLeafs);\n        }\n\n        let num_leafs = leafs.len();\n        if !num_leafs.is_power_of_two() {\n            return Err(MerkleTreeError::IncorrectNumberOfLeafs);\n        }\n        if num_leafs > MAX_NUM_LEAFS {\n            return Err(MerkleTreeError::TreeTooHigh);\n        }\n\n        let mut nodes = vec![Digest::<H>::default(); 2 * num_leafs];\n        nodes[num_leafs..].copy_from_slice(leafs);\n\n        Ok(nodes)\n    }\n\n    /// Given a list of leaf indices, return the indices of exactly those nodes that\n    /// are needed to prove (or verify) that the indicated leafs are in the Merkle\n    /// tree.\n    // This function is not defined as a method (taking self as argument) since it's\n    // needed by the verifier, who does not have access to the Merkle tree.\n    fn authentication_structure_node_indices(\n        num_leafs: usize,\n        leaf_indices: &[usize],\n    ) -> Result<impl ExactSizeIterator<Item = usize>> {\n        // The set of indices of nodes that need to be included in the authentications\n        // structure. In principle, every node of every authentication path is needed.\n        // The root is never needed. Hence, it is not considered below.\n        let mut node_is_needed = HashSet::new();\n\n        // The set of indices of nodes that can be computed from other nodes in the\n        // authentication structure or the leafs that are explicitly supplied during\n        // verification. Every node on the direct path from the leaf to the root can\n        // be computed by the very nature of \"authentication path\".\n        let mut node_can_be_computed = HashSet::new();\n\n        for &leaf_index in leaf_indices {\n            if leaf_index >= num_leafs {\n                return Err(MerkleTreeError::LeafIndexInvalid { num_leafs });\n            }\n\n            let mut node_index = leaf_index + num_leafs;\n            while node_index > Self::ROOT_INDEX {\n                let sibling_index = node_index ^ 1;\n                node_can_be_computed.insert(node_index);\n                node_is_needed.insert(sibling_index);\n                node_index /= 2;\n            }\n        }\n\n        let set_difference = node_is_needed.difference(&node_can_be_computed).copied();\n        Ok(set_difference.sorted_unstable().rev())\n    }\n\n    /// Generate a de-duplicated authentication structure for the given leaf indices.\n    /// If a single index is supplied, the authentication structure is the\n    /// authentication path for the indicated leaf.\n    ///\n    /// For example, consider the following Merkle tree.\n    ///\n    /// ```markdown\n    ///         ──── 1 ────          ╮\n    ///        ╱           ╲         │\n    ///       2             3        │\n    ///      ╱  ╲          ╱  ╲      ├╴ node indices\n    ///     ╱    ╲        ╱    ╲     │\n    ///    4      5      6      7    │\n    ///   ╱ ╲    ╱ ╲    ╱ ╲    ╱ ╲   │\n    ///  8   9  10 11  12 13  14 15  ╯\n    ///\n    ///  0   1  2   3  4   5  6   7  ←── leaf indices\n    /// ```\n    ///\n    /// The authentication path for leaf 2, _i.e._, node 10, is nodes [11, 4, 3].\n    ///\n    /// The authentication structure for leafs 0 and 2, _i.e._, nodes 8 and 10\n    /// respectively, is nodes [11, 9, 3].\n    /// Note how:\n    /// - Node 3 is included only once, even though the individual authentication\n    ///   paths for leafs 0 and 2 both include node 3. This is one part of the\n    ///   de-duplication.\n    /// - Node 4 is not included at all, even though the authentication path for\n    ///   leaf 2 requires the node: node 4 can be computed from nodes 8 and 9;\n    ///   the former is supplied explicitly during [verification][verify],\n    ///   the latter is included in the authentication structure.\n    ///   This is the other part of the de-duplication.\n    ///\n    /// [verify]: MerkleTreeInclusionProof::verify\n    pub fn authentication_structure(&self, leaf_indices: &[usize]) -> Result<Vec<Digest<H>>> {\n        let num_leafs = self.num_leafs();\n        let indices = Self::authentication_structure_node_indices(num_leafs, leaf_indices)?;\n        let auth_structure = indices.map(|idx| self.nodes[idx]).collect();\n        Ok(auth_structure)\n    }\n\n    pub fn root(&self) -> Digest<H> {\n        self.nodes[Self::ROOT_INDEX]\n    }\n\n    pub fn num_leafs(&self) -> usize {\n        let node_count = self.nodes.len();\n        debug_assert!(node_count.is_power_of_two());\n        node_count / 2\n    }\n\n    pub fn height(&self) -> usize {\n        let leaf_count = self.num_leafs();\n        debug_assert!(leaf_count.is_power_of_two());\n        leaf_count.ilog2() as usize\n    }\n\n    /// All nodes of the Merkle tree.\n    pub fn nodes(&self) -> &[Digest<H>] {\n        &self.nodes\n    }\n\n    /// The node at the given node index, if it exists.\n    pub fn node(&self, index: usize) -> Option<Digest<H>> {\n        self.nodes.get(index).copied()\n    }\n\n    /// All leafs of the Merkle tree.\n    pub fn leafs(&self) -> &[Digest<H>] {\n        let first_leaf = self.nodes.len() / 2;\n        &self.nodes[first_leaf..]\n    }\n\n    /// The leaf at the given index, if it exists.\n    pub fn leaf(&self, index: usize) -> Option<Digest<H>> {\n        let first_leaf_index = self.nodes.len() / 2;\n        self.nodes.get(first_leaf_index + index).copied()\n    }\n\n    pub fn indexed_leafs(&self, indices: &[usize]) -> Result<Vec<(usize, Digest<H>)>> {\n        let num_leafs = self.num_leafs();\n        let invalid_index = MerkleTreeError::LeafIndexInvalid { num_leafs };\n        let maybe_indexed_leaf = |&i| self.leaf(i).ok_or(invalid_index).map(|leaf| (i, leaf));\n\n        indices.iter().map(maybe_indexed_leaf).collect()\n    }\n\n    /// A full inclusion proof for the leafs at the supplied indices, including the\n    /// leafs. Generally, using [`authentication_structure`][auth_structure] is\n    /// preferable. Use this method only if the verifier needs explicit access to the\n    /// leafs, _i.e._, cannot compute them from other information.\n    ///\n    /// [auth_structure]: Self::authentication_structure\n    pub fn inclusion_proof_for_leaf_indices(\n        &self,\n        indices: &[usize],\n    ) -> Result<MerkleTreeInclusionProof<H>> {\n        let proof = MerkleTreeInclusionProof {\n            tree_height: self.height(),\n            indexed_leafs: self.indexed_leafs(indices)?,\n            authentication_structure: self.authentication_structure(indices)?,\n        };\n        Ok(proof)\n    }\n\n    // fn test_tree_of_height(tree_height: usize) -> Self {\n    //     let num_leafs = 1 << tree_height;\n    //     let leafs = (0..num_leafs)\n    //         .map(|i| Digest::new(H::random()))\n    //         .collect_vec();\n    //     let tree = Self::par_new(&leafs).unwrap();\n    //     assert!(leafs.iter().all_unique());\n    //     tree\n    // }\n}\n\nimpl<'a, H: HashFunction> Arbitrary<'a> for MerkleTree<H> {\n    fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {\n        let height = u.int_in_range(0..=13)?;\n        let num_leafs = 1 << height;\n        let leaf_digests: arbitrary::Result<Vec<_>> =\n            (0..num_leafs).map(|_| u.arbitrary()).collect();\n\n        let tree = Self::par_new(&leaf_digests?).unwrap();\n        Ok(tree)\n    }\n}\n\nimpl<H: HashFunction> MerkleTreeInclusionProof<H> {\n    fn leaf_indices(&self) -> impl Iterator<Item = &usize> {\n        self.indexed_leafs.iter().map(|(index, _)| index)\n    }\n\n    fn is_trivial(&self) -> bool {\n        self.indexed_leafs.is_empty() && self.authentication_structure.is_empty()\n    }\n\n    /// Verify that the given root digest is the root of a Merkle tree that contains\n    /// the indicated leafs.\n    pub fn verify(self, expected_root: Digest<H>) -> bool {\n        if self.is_trivial() {\n            return true;\n        }\n        let Ok(partial_tree) = PartialMerkleTree::try_from(self) else {\n            return false;\n        };\n        let Ok(computed_root) = partial_tree.root() else {\n            return false;\n        };\n        computed_root == expected_root\n    }\n\n    /// Transform the inclusion proof into a list of authentication paths.\n    ///\n    /// This corresponds to a decompression of the authentication structure.\n    /// In some contexts, it is easier to deal with individual authentication paths\n    /// than with the de-duplicated authentication structure.\n    ///\n    /// Continuing the example from [`authentication_structure`][auth_structure],\n    /// the authentication structure for leafs 0 and 2, _i.e._, nodes 8 and 10\n    /// respectively, is nodes [11, 9, 3].\n    ///\n    /// The authentication path\n    /// - for leaf 0 is [9, 5, 3], and\n    /// - for leaf 2 is [11, 4, 3].\n    ///\n    /// ```markdown\n    ///         ──── 1 ────\n    ///        ╱           ╲\n    ///       2             3\n    ///      ╱  ╲          ╱  ╲\n    ///     ╱    ╲        ╱    ╲\n    ///    4      5      6      7\n    ///   ╱ ╲    ╱ ╲    ╱ ╲    ╱ ╲\n    ///  8   9  10 11  12 13  14 15\n    /// ```\n    ///\n    /// [auth_structure]: MerkleTree::authentication_structure\n    pub fn into_authentication_paths(self) -> Result<Vec<Vec<Digest<H>>>> {\n        let partial_tree = PartialMerkleTree::try_from(self)?;\n        partial_tree.into_authentication_paths()\n    }\n}\n\nimpl<H: HashFunction> PartialMerkleTree<H> {\n    pub fn root(&self) -> Result<Digest<H>> {\n        self.nodes\n            .get(&MerkleTree::<H>::ROOT_INDEX)\n            .copied()\n            .ok_or(MerkleTreeError::RootNotFound)\n    }\n\n    fn node(&self, index: usize) -> Result<Digest<H>> {\n        self.nodes\n            .get(&index)\n            .copied()\n            .ok_or(MerkleTreeError::MissingNodeIndex(index))\n    }\n\n    fn num_leafs(&self) -> Result<usize> {\n        if self.tree_height > MAX_TREE_HEIGHT {\n            return Err(MerkleTreeError::TreeTooHigh);\n        }\n        Ok(1 << self.tree_height)\n    }\n\n    /// Compute all computable digests of the partial Merkle tree, modifying self.\n    /// Returns an error if self is either\n    /// - incomplete, _i.e._, does not contain all the nodes required to compute\n    ///   the root, or\n    /// - not minimal, _i.e._, if it contains nodes that can be computed from other\n    ///   nodes.\n    pub fn fill(&mut self) -> Result<()> {\n        let mut parent_node_indices = self.first_layer_parent_node_indices()?;\n\n        for _ in 0..self.tree_height {\n            for &parent_node_index in &parent_node_indices {\n                self.insert_digest_for_index(parent_node_index)?;\n            }\n            parent_node_indices = Self::move_indices_one_layer_up(parent_node_indices);\n        }\n\n        Ok(())\n    }\n\n    /// Any parent node index is included only once. This guarantees that the number\n    /// of hash operations is minimal.\n    fn first_layer_parent_node_indices(&self) -> Result<Vec<usize>> {\n        let num_leafs = self.num_leafs()?;\n        let leaf_to_parent_node_index = |&leaf_index| (leaf_index + num_leafs) / 2;\n\n        let parent_node_indices = self.leaf_indices.iter().map(leaf_to_parent_node_index);\n        let mut parent_node_indices = parent_node_indices.collect_vec();\n        parent_node_indices.sort_unstable();\n        parent_node_indices.dedup();\n        Ok(parent_node_indices)\n    }\n\n    fn insert_digest_for_index(&mut self, parent_index: usize) -> Result<()> {\n        let (left_child, right_child) = self.children_of_node(parent_index)?;\n        let parent_digest =\n            Digest::<H>::from_element(H::hash_pair(&left_child.data, &right_child.data));\n\n        match self.nodes.insert(parent_index, parent_digest) {\n            Some(_) => Err(MerkleTreeError::SpuriousNodeIndex(parent_index)),\n            None => Ok(()),\n        }\n    }\n\n    fn children_of_node(&self, parent_index: usize) -> Result<(Digest<H>, Digest<H>)> {\n        let left_child_index = parent_index * 2;\n        let right_child_index = left_child_index ^ 1;\n\n        let left_child = self.node(left_child_index)?;\n        let right_child = self.node(right_child_index)?;\n        Ok((left_child, right_child))\n    }\n\n    /// Indices are deduplicated to guarantee minimal number of hash operations.\n    fn move_indices_one_layer_up(mut indices: Vec<usize>) -> Vec<usize> {\n        indices.iter_mut().for_each(|i| *i /= 2);\n        indices.dedup();\n        indices\n    }\n\n    /// Collect all individual authentication paths for the indicated leafs.\n    fn into_authentication_paths(self) -> Result<Vec<Vec<Digest<H>>>> {\n        self.leaf_indices\n            .iter()\n            .map(|&i| self.authentication_path_for_index(i))\n            .collect()\n    }\n\n    /// Given a single leaf index and a partial Merkle tree, collect the\n    /// authentication path for the indicated leaf.\n    ///\n    /// Fails if the partial Merkle tree does not contain the entire\n    /// authentication path.\n    fn authentication_path_for_index(&self, leaf_index: usize) -> Result<Vec<Digest<H>>> {\n        let num_leafs = self.num_leafs()?;\n        let mut authentication_path = vec![];\n        let mut node_index = leaf_index + num_leafs;\n        while node_index > MerkleTree::<H>::ROOT_INDEX {\n            let sibling_index = node_index ^ 1;\n            let sibling = self.node(sibling_index)?;\n            authentication_path.push(sibling);\n            node_index /= 2;\n        }\n        Ok(authentication_path)\n    }\n}\n\nimpl<H: HashFunction> TryFrom<MerkleTreeInclusionProof<H>> for PartialMerkleTree<H> {\n    type Error = MerkleTreeError;\n\n    fn try_from(proof: MerkleTreeInclusionProof<H>) -> Result<Self> {\n        let leaf_indices = proof.leaf_indices().copied().collect();\n        let mut partial_tree = PartialMerkleTree {\n            tree_height: proof.tree_height,\n            leaf_indices,\n            nodes: HashMap::new(),\n        };\n\n        let num_leafs = partial_tree.num_leafs()?;\n        if partial_tree.leaf_indices.iter().any(|&i| i >= num_leafs) {\n            return Err(MerkleTreeError::LeafIndexInvalid { num_leafs });\n        }\n\n        let node_indices = MerkleTree::<H>::authentication_structure_node_indices(\n            num_leafs,\n            &partial_tree.leaf_indices,\n        )?;\n        if proof.authentication_structure.len() != node_indices.len() {\n            return Err(MerkleTreeError::AuthenticationStructureLengthMismatch);\n        }\n\n        let mut nodes: HashMap<_, _> = node_indices\n            .zip_eq(proof.authentication_structure)\n            .collect();\n\n        for (leaf_index, leaf_digest) in proof.indexed_leafs {\n            let node_index = leaf_index + num_leafs;\n            if let Vacant(entry) = nodes.entry(node_index) {\n                entry.insert(leaf_digest);\n            } else if nodes[&node_index] != leaf_digest {\n                return Err(MerkleTreeError::RepeatedLeafDigestMismatch);\n            }\n        }\n\n        partial_tree.nodes = nodes;\n        partial_tree.fill()?;\n        Ok(partial_tree)\n    }\n}\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq, Error)]\npub enum MerkleTreeError {\n    #[error(\"All leaf indices must be valid, i.e., less than {num_leafs}.\")]\n    LeafIndexInvalid { num_leafs: usize },\n\n    #[error(\"The length of the supplied authentication structure must match the expected length.\")]\n    AuthenticationStructureLengthMismatch,\n\n    #[error(\"Leaf digests of repeated indices must be identical.\")]\n    RepeatedLeafDigestMismatch,\n\n    #[error(\"The partial tree must be minimal. Node {0} was supplied but can be computed.\")]\n    SpuriousNodeIndex(usize),\n\n    #[error(\"The partial tree must contain all necessary information. Node {0} is missing.\")]\n    MissingNodeIndex(usize),\n\n    #[error(\"Could not compute the root. Maybe no leaf indices were supplied?\")]\n    RootNotFound,\n\n    #[error(\"Too few leafs to build a Merkle tree.\")]\n    TooFewLeafs,\n\n    #[error(\"The number of leafs must be a power of two.\")]\n    IncorrectNumberOfLeafs,\n\n    #[error(\"Tree height must not exceed {MAX_TREE_HEIGHT}.\")]\n    TreeTooHigh,\n}\n\n// #[cfg(test)]\n// pub mod merkle_tree_test {\n//     use crate::crypto::digest::*;\n//     use crate::definitions::{FieldElement, GrumpkinPrimeField};\n//     use proptest::collection::vec;\n//     use proptest::prelude::*;\n//     use proptest_arbitrary_interop::arb;\n//     use test_strategy::proptest;\n\n//     use super::*;\n//     use crate::crypto::digest::digest_tests::DigestCorruptor;\n\n//     impl MerkleTree<PoseidonBn254Hash> {\n//         fn test_tree_of_height(tree_height: usize) -> Self {\n//             let num_leafs = 1 << tree_height;\n//             let leafs = (0..num_leafs)\n//                 .map(|i| Digest::new(FieldElement::<GrumpkinPrimeField>::from(i)))\n//                 .collect_vec();\n//             let tree = Self::par_new(&leafs).unwrap();\n//             assert!(leafs.iter().all_unique());\n//             tree\n//         }\n//     }\n\n//     impl PartialMerkleTree<PoseidonBn254Hash> {\n//         fn dummy_nodes_for_indices(\n//             node_indices: &[usize],\n//         ) -> HashMap<usize, Digest<PoseidonBn254Hash>> {\n//             node_indices\n//                 .iter()\n//                 .map(|&i| (i, FieldElement::<GrumpkinPrimeField>::from(i as u64)))\n//                 .map(|(i, leaf)| (i, Digest::new(PoseidonBn254Hash::hash_single(&leaf))))\n//                 .collect()\n//         }\n//     }\n\n//     /// Test helper to deduplicate generation of Merkle trees.\n//     #[derive(Debug, Clone, test_strategy::Arbitrary)]\n//     pub(crate) struct MerkleTreeToTest {\n//         #[strategy(arb())]\n//         pub tree: MerkleTree<PoseidonBn254Hash>,\n\n//         #[strategy(vec(0..#tree.num_leafs(), 0..#tree.num_leafs()))]\n//         pub selected_indices: Vec<usize>,\n//     }\n\n//     impl MerkleTreeToTest {\n//         fn has_non_trivial_proof(&self) -> bool {\n//             !self.selected_indices.is_empty()\n//         }\n\n//         fn proof(&self) -> MerkleTreeInclusionProof<PoseidonBn254Hash> {\n//             // test helper – unwrap is fine\n//             self.tree\n//                 .inclusion_proof_for_leaf_indices(&self.selected_indices)\n//                 .unwrap()\n//         }\n//     }\n\n//     #[test]\n//     fn building_merkle_tree_from_empty_list_of_digests_fails_with_expected_error() {\n//         let maybe_tree = MerkleTree::<PoseidonBn254Hash>::par_new(&[]);\n//         let err = maybe_tree.unwrap_err();\n//         assert_eq!(MerkleTreeError::TooFewLeafs, err);\n//     }\n\n//     #[test]\n//     fn merkle_tree_with_one_leaf_has_expected_height_and_number_of_leafs() {\n//         let digest = Digest::<PoseidonBn254Hash>::default();\n//         let tree = MerkleTree::<PoseidonBn254Hash>::par_new(&[digest]).unwrap();\n//         assert_eq!(1, tree.num_leafs());\n//         assert_eq!(0, tree.height());\n//     }\n\n//     #[proptest]\n//     fn building_merkle_tree_from_one_digest_makes_that_digest_the_root(\n//         digest: Digest<PoseidonBn254Hash>,\n//     ) {\n//         let tree = MerkleTree::par_new(&[digest]).unwrap();\n//         assert_eq!(digest, tree.root());\n//     }\n\n//     #[proptest]\n//     fn building_merkle_tree_from_list_of_digests_with_incorrect_number_of_leafs_fails(\n//         #[filter(!#num_leafs.is_power_of_two())]\n//         #[strategy(1_usize..1 << 13)]\n//         num_leafs: usize,\n//     ) {\n//         let digest = Digest::<PoseidonBn254Hash>::default();\n//         let digests = vec![digest; num_leafs];\n//         let maybe_tree = MerkleTree::<PoseidonBn254Hash>::par_new(&digests);\n//         let err = maybe_tree.unwrap_err();\n//         assert_eq!(MerkleTreeError::IncorrectNumberOfLeafs, err);\n//     }\n\n//     #[proptest]\n//     fn merkle_tree_construction_strategies_behave_identically_on_random_input(\n//         leafs: Vec<Digest<PoseidonBn254Hash>>,\n//     ) {\n//         let sequential = MerkleTree::sequential_new(&leafs);\n//         let parallel = MerkleTree::par_new(&leafs);\n//         prop_assert_eq!(sequential, parallel);\n//     }\n\n//     #[proptest]\n//     fn merkle_tree_construction_strategies_produce_identical_trees(\n//         #[strategy(0_usize..10)] _tree_height: usize,\n//         #[strategy(vec(arb(), 1 << #_tree_height))] leafs: Vec<Digest<PoseidonBn254Hash>>,\n//     ) {\n//         let sequential = MerkleTree::sequential_new(&leafs)?;\n//         let parallel = MerkleTree::par_new(&leafs)?;\n//         prop_assert_eq!(sequential, parallel);\n//     }\n\n//     #[proptest(cases = 100)]\n//     fn accessing_number_of_leafs_and_height_never_panics(\n//         #[strategy(arb())] merkle_tree: MerkleTree<PoseidonBn254Hash>,\n//     ) {\n//         let _ = merkle_tree.num_leafs();\n//         let _ = merkle_tree.height();\n//     }\n\n//     #[proptest(cases = 50)]\n//     fn trivial_proof_can_be_verified(\n//         #[strategy(arb())] merkle_tree: MerkleTree<PoseidonBn254Hash>,\n//     ) {\n//         let proof = merkle_tree.inclusion_proof_for_leaf_indices(&[]).unwrap();\n//         prop_assert!(proof.authentication_structure.is_empty());\n//         let verdict = proof.verify(merkle_tree.root());\n//         prop_assert!(verdict);\n//     }\n\n//     #[proptest(cases = 40)]\n//     fn honestly_generated_authentication_structure_can_be_verified(test_tree: MerkleTreeToTest) {\n//         let proof = test_tree.proof();\n//         let verdict = proof.verify(test_tree.tree.root());\n//         prop_assert!(verdict);\n//     }\n\n//     #[proptest(cases = 30)]\n//     fn corrupt_root_leads_to_verification_failure(\n//         #[filter(#test_tree.has_non_trivial_proof())] test_tree: MerkleTreeToTest,\n//         corruptor: DigestCorruptor,\n//     ) {\n//         let bad_root = corruptor.corrupt_digest(test_tree.tree.root());\n//         let proof = test_tree.proof();\n//         let verdict = proof.verify(bad_root);\n//         prop_assert!(!verdict);\n//     }\n\n//     #[proptest(cases = 20)]\n//     fn corrupt_authentication_structure_leads_to_verification_failure(\n//         #[filter(!#test_tree.proof().authentication_structure.is_empty())]\n//         test_tree: MerkleTreeToTest,\n//         #[strategy(Just(#test_tree.proof().authentication_structure.len()))]\n//         _num_auth_structure_entries: usize,\n//         #[strategy(vec(0..#_num_auth_structure_entries, 1..=#_num_auth_structure_entries))]\n//         indices_to_corrupt: Vec<usize>,\n//         #[strategy(vec(any::<DigestCorruptor>(),  #indices_to_corrupt.len()))]\n//         digest_corruptors: Vec<DigestCorruptor>,\n//     ) {\n//         let mut proof = test_tree.proof();\n//         for (i, digest_corruptor) in indices_to_corrupt.into_iter().zip_eq(digest_corruptors) {\n//             proof.authentication_structure[i] =\n//                 digest_corruptor.corrupt_digest(proof.authentication_structure[i]);\n//         }\n//         if proof == test_tree.proof() {\n//             let reject_reason = \"corruption must change authentication structure\".into();\n//             return Err(TestCaseError::Reject(reject_reason));\n//         }\n\n//         let verdict = proof.verify(test_tree.tree.root());\n//         prop_assert!(!verdict);\n//     }\n\n//     #[proptest(cases = 30)]\n//     fn corrupt_leaf_digests_lead_to_verification_failure(\n//         #[filter(#test_tree.has_non_trivial_proof())] test_tree: MerkleTreeToTest,\n//         #[strategy(Just(#test_tree.proof().indexed_leafs.len()))] _n_leafs: usize,\n//         #[strategy(vec(0..#_n_leafs, 1..=#_n_leafs))] leafs_to_corrupt: Vec<usize>,\n//         #[strategy(vec(any::<DigestCorruptor>(), #leafs_to_corrupt.len()))] digest_corruptors: Vec<\n//             DigestCorruptor,\n//         >,\n//     ) {\n//         let mut proof = test_tree.proof();\n//         for (&i, digest_corruptor) in leafs_to_corrupt.iter().zip_eq(&digest_corruptors) {\n//             let (leaf_index, leaf_digest) = proof.indexed_leafs[i];\n//             let corrupt_digest = digest_corruptor.corrupt_digest(leaf_digest);\n//             proof.indexed_leafs[i] = (leaf_index, corrupt_digest);\n//         }\n//         if proof == test_tree.proof() {\n//             let reject_reason = \"corruption must change leaf digests\".into();\n//             return Err(TestCaseError::Reject(reject_reason));\n//         }\n\n//         let verdict = proof.verify(test_tree.tree.root());\n//         prop_assert!(!verdict);\n//     }\n\n//     #[proptest(cases = 30)]\n//     fn removing_leafs_from_proof_leads_to_verification_failure(\n//         #[filter(#test_tree.has_non_trivial_proof())] test_tree: MerkleTreeToTest,\n//         #[strategy(Just(#test_tree.proof().indexed_leafs.len()))] _n_leafs: usize,\n//         #[strategy(vec(0..#_n_leafs, 1..=#_n_leafs))] leaf_indices_to_remove: Vec<usize>,\n//     ) {\n//         let mut proof = test_tree.proof();\n//         let leafs_to_keep = proof\n//             .indexed_leafs\n//             .iter()\n//             .filter(|(i, _)| !leaf_indices_to_remove.contains(i));\n//         proof.indexed_leafs = leafs_to_keep.copied().collect();\n//         if proof == test_tree.proof() {\n//             let reject_reason = \"removing leafs must change proof\".into();\n//             return Err(TestCaseError::Reject(reject_reason));\n//         }\n\n//         let verdict = proof.verify(test_tree.tree.root());\n//         prop_assert!(!verdict);\n//     }\n\n//     #[proptest(cases = 30)]\n//     fn checking_set_inclusion_of_items_not_in_set_leads_to_verification_failure(\n//         #[filter(#test_tree.has_non_trivial_proof())] test_tree: MerkleTreeToTest,\n//         #[strategy(vec(0..#test_tree.tree.num_leafs(), 1..=#test_tree.tree.num_leafs()))]\n//         spurious_indices: Vec<usize>,\n//         #[strategy(vec(any::<Digest<PoseidonBn254Hash>>(), #spurious_indices.len()))]\n//         spurious_digests: Vec<Digest<PoseidonBn254Hash>>,\n//     ) {\n//         let spurious_leafs = spurious_indices\n//             .into_iter()\n//             .zip_eq(spurious_digests)\n//             .collect_vec();\n//         let mut proof = test_tree.proof();\n//         proof.indexed_leafs.extend(spurious_leafs);\n\n//         let verdict = proof.verify(test_tree.tree.root());\n//         prop_assert!(!verdict);\n//     }\n\n//     #[proptest(cases = 30)]\n//     fn honestly_generated_proof_with_duplicate_leafs_can_be_verified(\n//         #[filter(#test_tree.has_non_trivial_proof())] test_tree: MerkleTreeToTest,\n//         #[strategy(Just(#test_tree.proof().indexed_leafs.len()))] _n_leafs: usize,\n//         #[strategy(vec(0..#_n_leafs, 1..=#_n_leafs))] indices_to_duplicate: Vec<usize>,\n//     ) {\n//         let mut proof = test_tree.proof();\n//         let duplicate_leafs = indices_to_duplicate\n//             .into_iter()\n//             .map(|i| proof.indexed_leafs[i])\n//             .collect_vec();\n//         proof.indexed_leafs.extend(duplicate_leafs);\n//         let verdict = proof.verify(test_tree.tree.root());\n//         prop_assert!(verdict);\n//     }\n\n//     #[proptest(cases = 40)]\n//     fn incorrect_tree_height_leads_to_verification_failure(\n//         #[filter(#test_tree.has_non_trivial_proof())] test_tree: MerkleTreeToTest,\n//         #[strategy(0..=MAX_TREE_HEIGHT)]\n//         #[filter(#test_tree.tree.height() != #incorrect_height)]\n//         incorrect_height: usize,\n//     ) {\n//         let mut proof = test_tree.proof();\n//         proof.tree_height = incorrect_height;\n//         let verdict = proof.verify(test_tree.tree.root());\n//         prop_assert!(!verdict);\n//     }\n\n//     #[proptest(cases = 20)]\n//     fn honestly_generated_proof_with_all_leafs_revealed_can_be_verified(\n//         #[strategy(arb())] tree: MerkleTree<PoseidonBn254Hash>,\n//     ) {\n//         let leaf_indices = (0..tree.num_leafs()).collect_vec();\n//         let proof = tree\n//             .inclusion_proof_for_leaf_indices(&leaf_indices)\n//             .unwrap();\n//         let verdict = proof.verify(tree.root());\n//         prop_assert!(verdict);\n//     }\n\n//     #[proptest(cases = 30)]\n//     fn requesting_inclusion_proof_for_nonexistent_leaf_fails_with_expected_error(\n//         #[strategy(arb())] tree: MerkleTree<PoseidonBn254Hash>,\n//         #[filter(#leaf_indices.iter().any(|&i| i > #tree.num_leafs()))] leaf_indices: Vec<usize>,\n//     ) {\n//         let maybe_proof = tree.inclusion_proof_for_leaf_indices(&leaf_indices);\n//         let err = maybe_proof.unwrap_err();\n\n//         let num_leafs = tree.num_leafs();\n//         assert_eq!(MerkleTreeError::LeafIndexInvalid { num_leafs }, err);\n//     }\n\n//     #[test]\n//     fn authentication_paths_of_extremely_small_tree_use_expected_digests() {\n//         //     _ 1_\n//         //    /    \\\n//         //   2      3\n//         //  / \\    / \\\n//         // 4   5  6   7\n//         //\n//         // 0   1  2   3 <- leaf indices\n\n//         let tree = MerkleTree::test_tree_of_height(2);\n//         let auth_path_with_nodes = |indices: [usize; 2]| indices.map(|i| tree.nodes[i]).to_vec();\n//         let auth_path_for_leaf = |index| tree.authentication_structure(&[index]).unwrap();\n\n//         assert_eq!(auth_path_with_nodes([5, 3]), auth_path_for_leaf(0));\n//         assert_eq!(auth_path_with_nodes([4, 3]), auth_path_for_leaf(1));\n//         assert_eq!(auth_path_with_nodes([7, 2]), auth_path_for_leaf(2));\n//         assert_eq!(auth_path_with_nodes([6, 2]), auth_path_for_leaf(3));\n//     }\n\n//     #[test]\n//     fn authentication_paths_of_very_small_tree_use_expected_digests() {\n//         //         ──── 1 ────\n//         //        ╱           ╲\n//         //       2             3\n//         //      ╱  ╲          ╱  ╲\n//         //     ╱    ╲        ╱    ╲\n//         //    4      5      6      7\n//         //   ╱ ╲    ╱ ╲    ╱ ╲    ╱ ╲\n//         //  8   9  10 11  12 13  14 15\n//         //\n//         //  0   1  2   3  4   5  6   7  <- leaf indices\n\n//         let tree = MerkleTree::test_tree_of_height(3);\n//         let auth_path_with_nodes = |indices: [usize; 3]| indices.map(|i| tree.nodes[i]).to_vec();\n//         let auth_path_for_leaf = |index| tree.authentication_structure(&[index]).unwrap();\n\n//         assert_eq!(auth_path_with_nodes([9, 5, 3]), auth_path_for_leaf(0));\n//         assert_eq!(auth_path_with_nodes([8, 5, 3]), auth_path_for_leaf(1));\n//         assert_eq!(auth_path_with_nodes([11, 4, 3]), auth_path_for_leaf(2));\n//         assert_eq!(auth_path_with_nodes([10, 4, 3]), auth_path_for_leaf(3));\n//         assert_eq!(auth_path_with_nodes([13, 7, 2]), auth_path_for_leaf(4));\n//         assert_eq!(auth_path_with_nodes([12, 7, 2]), auth_path_for_leaf(5));\n//         assert_eq!(auth_path_with_nodes([15, 6, 2]), auth_path_for_leaf(6));\n//         assert_eq!(auth_path_with_nodes([14, 6, 2]), auth_path_for_leaf(7));\n//     }\n\n//     #[proptest(cases = 10)]\n//     fn each_leaf_can_be_verified_individually(test_tree: MerkleTreeToTest) {\n//         let tree = test_tree.tree;\n//         for (leaf_index, &leaf) in tree.leafs().iter().enumerate() {\n//             let authentication_path = tree.authentication_structure(&[leaf_index]).unwrap();\n//             let proof = MerkleTreeInclusionProof {\n//                 tree_height: tree.height(),\n//                 indexed_leafs: [(leaf_index, leaf)].into(),\n//                 authentication_structure: authentication_path,\n//             };\n//             let verdict = proof.verify(tree.root());\n//             prop_assert!(verdict);\n//         }\n//     }\n\n//     #[test]\n//     fn partial_merkle_tree_built_from_authentication_structure_contains_expected_nodes() {\n//         let merkle_tree = MerkleTree::test_tree_of_height(3);\n//         let proof = merkle_tree\n//             .inclusion_proof_for_leaf_indices(&[0, 2])\n//             .unwrap();\n//         let partial_tree = PartialMerkleTree::try_from(proof).unwrap();\n\n//         //         ──── 1 ────\n//         //        ╱           ╲\n//         //       2             3\n//         //      ╱  ╲\n//         //     ╱    ╲\n//         //    4      5\n//         //   ╱ ╲    ╱ ╲\n//         //  8   9  10 11\n//         //\n//         //  0      2   <-- opened_leaf_indices\n\n//         let expected_node_indices = vec![1, 2, 3, 4, 5, 8, 9, 10, 11];\n//         let node_indices = partial_tree.nodes.keys().copied().sorted().collect_vec();\n//         assert_eq!(expected_node_indices, node_indices);\n//     }\n\n//     #[test]\n//     fn manually_constructed_partial_tree_can_be_filled() {\n//         //         ──── _ ───\n//         //        ╱           ╲\n//         //       _             3\n//         //      ╱  ╲\n//         //     ╱    ╲\n//         //    _      _\n//         //   ╱ ╲    ╱ ╲\n//         //  8   9  10 11\n//         //\n//         //  0      2   <-- opened_leaf_indices\n\n//         let node_indices = [3, 8, 9, 10, 11];\n//         let mut partial_tree = PartialMerkleTree {\n//             tree_height: 3,\n//             leaf_indices: vec![0, 2],\n//             nodes: PartialMerkleTree::dummy_nodes_for_indices(&node_indices),\n//         };\n//         partial_tree.fill().unwrap();\n//     }\n\n//     #[test]\n//     fn trying_to_compute_root_of_partial_tree_with_necessary_node_missing_gives_expected_error() {\n//         //         ──── _ ────\n//         //        ╱           ╲\n//         //       _             _ (!)\n//         //      ╱  ╲\n//         //     ╱    ╲\n//         //    _      _\n//         //   ╱ ╲    ╱ ╲\n//         //  8   9  10 11\n//         //\n//         //  0      2   <-- opened_leaf_indices\n\n//         let node_indices = [8, 9, 10, 11];\n//         let mut partial_tree = PartialMerkleTree {\n//             tree_height: 3,\n//             leaf_indices: vec![0, 2],\n//             nodes: PartialMerkleTree::dummy_nodes_for_indices(&node_indices),\n//         };\n\n//         let err = partial_tree.fill().unwrap_err();\n//         assert_eq!(MerkleTreeError::MissingNodeIndex(3), err);\n//     }\n\n//     #[test]\n//     fn trying_to_compute_root_of_partial_tree_with_redundant_node_gives_expected_error() {\n//         //         ──── _ ────\n//         //        ╱           ╲\n//         //       2 (!)         3\n//         //      ╱  ╲\n//         //     ╱    ╲\n//         //    _      _\n//         //   ╱ ╲    ╱ ╲\n//         //  8   9  10 11\n//         //\n//         //  0      2   <-- opened_leaf_indices\n\n//         let node_indices = [2, 3, 8, 9, 10, 11];\n//         let mut partial_tree = PartialMerkleTree {\n//             tree_height: 3,\n//             leaf_indices: vec![0, 2],\n//             nodes: PartialMerkleTree::dummy_nodes_for_indices(&node_indices),\n//         };\n\n//         let err = partial_tree.fill().unwrap_err();\n//         assert_eq!(MerkleTreeError::SpuriousNodeIndex(2), err);\n//     }\n\n//     #[test]\n//     fn converting_authentication_structure_to_authentication_paths_results_in_expected_paths() {\n//         const TREE_HEIGHT: usize = 3;\n//         let merkle_tree = MerkleTree::test_tree_of_height(TREE_HEIGHT);\n//         let proof = merkle_tree\n//             .inclusion_proof_for_leaf_indices(&[0, 2])\n//             .unwrap();\n//         let auth_paths = proof.into_authentication_paths().unwrap();\n\n//         let auth_path_with_nodes =\n//             |indices: [usize; TREE_HEIGHT]| indices.map(|i| merkle_tree.nodes[i]).to_vec();\n//         let expected_path_0 = auth_path_with_nodes([9, 5, 3]);\n//         let expected_path_1 = auth_path_with_nodes([11, 4, 3]);\n//         let expected_paths = vec![expected_path_0, expected_path_1];\n\n//         assert_eq!(expected_paths, auth_paths);\n//     }\n// }\n"
  },
  {
    "path": "tools/garaga_rs/src/crypto/mmr/mmr_accumulator.rs",
    "content": "use std::collections::HashMap;\nuse std::fmt::Debug;\n\n// use arbitrary::Arbitrary;\n// use get_size2::GetSize;\nuse itertools::Itertools;\n// use serde::Deserialize;\n// use serde::Serialize;\n\nuse super::mmr_trait::LeafMutation;\nuse super::shared_basic;\nuse super::TOO_MANY_LEAFS_ERR;\nuse crate::crypto::digest::Digest;\nuse crate::crypto::digest::HashFunction;\nuse crate::crypto::mmr::mmr_membership_proof::MmrMembershipProof;\nuse crate::crypto::mmr::mmr_trait::Mmr;\nuse crate::crypto::mmr::shared_advanced;\n\n// use crate::prelude::*;\n\n#[derive(Debug, Clone, PartialEq, Eq)] // Serialize, Deserialize, , GetSize)]\npub struct MmrAccumulator<H: HashFunction> {\n    leaf_count: u64,\n    peaks: Vec<Digest<H>>,\n}\n\nimpl<H: HashFunction> MmrAccumulator<H> {\n    pub fn init(peaks: Vec<Digest<H>>, leaf_count: u64) -> Self {\n        Self { leaf_count, peaks }\n    }\n\n    pub fn new_from_leafs(digests: Vec<Digest<H>>) -> Self {\n        let mut mmra = MmrAccumulator {\n            leaf_count: 0,\n            peaks: vec![],\n        };\n        for digest in digests {\n            mmra.append(digest);\n        }\n\n        mmra\n    }\n\n    /// Is `self` self-consistent? That is, is it possible to have the claimed\n    /// number of leafs given the number of peaks?\n    pub(crate) fn is_consistent(&self) -> bool {\n        let num_peaks = u32::try_from(self.peaks.len()).expect(TOO_MANY_LEAFS_ERR);\n        num_peaks == self.num_leafs().count_ones()\n    }\n}\n\nimpl<H: HashFunction> Mmr<H> for MmrAccumulator<H> {\n    /// Calculate a commitment to the entire MMR.\n    fn bag_peaks(&self) -> Digest<H> {\n        bag_peaks(&self.peaks, self.leaf_count)\n    }\n\n    /// Return the Merkle tree roots of the Merkle trees that this MMR consists\n    /// of.\n    fn peaks(&self) -> Vec<Digest<H>> {\n        self.peaks.clone()\n    }\n\n    /// Returns true iff there are no leafs in the MMR.\n    fn is_empty(&self) -> bool {\n        self.leaf_count == 0\n    }\n\n    /// Return the number of leafs in the MMR.\n    fn num_leafs(&self) -> u64 {\n        self.leaf_count\n    }\n\n    /// Add a leaf to the MMR. Returns the membership proof of the newly added\n    /// leaf.\n    fn append(&mut self, new_leaf: Digest<H>) -> MmrMembershipProof<H> {\n        let (new_peaks, membership_proof) = shared_basic::calculate_new_peaks_from_append(\n            self.leaf_count,\n            self.peaks.clone(),\n            new_leaf,\n        );\n        self.peaks = new_peaks;\n        self.leaf_count += 1;\n\n        membership_proof\n    }\n\n    /// Mutate an existing leaf. It is the caller's responsibility that the\n    /// membership proof is valid. If the membership proof is wrong, the MMR\n    /// will end up in a broken state.\n    fn mutate_leaf(&mut self, leaf_mutation: LeafMutation<H>) {\n        self.peaks = shared_basic::calculate_new_peaks_from_leaf_mutation(\n            &self.peaks,\n            self.leaf_count,\n            leaf_mutation.new_leaf,\n            leaf_mutation.leaf_index,\n            &leaf_mutation.membership_proof,\n        )\n    }\n\n    /// Mutate multiple leafs in the MMR. Takes a list of membership proofs\n    /// that will be updated accordingly. Meaning that the provided membership\n    /// proofs will be valid for the new MMR, provided they were valid before\n    /// the update was applied.\n    /// Panics if `membership_proofs` and `membership_proof_leaf_indices` do not have\n    /// the same length, or if a leaf index is out-of-bounds for the MMR.\n    fn batch_mutate_leaf_and_update_mps(\n        &mut self,\n        membership_proofs: &mut [&mut MmrMembershipProof<H>],\n        membership_proof_leaf_indices: &[u64],\n        mut mutation_data: Vec<LeafMutation<H>>,\n    ) -> Vec<usize> {\n        assert_eq!(\n            membership_proofs.len(),\n            membership_proof_leaf_indices.len(),\n            \"Lists must have same length. Got: {} and {}\",\n            membership_proofs.len(),\n            membership_proof_leaf_indices.len()\n        );\n\n        assert!(\n            membership_proof_leaf_indices\n                .iter()\n                .all(|x| *x < self.leaf_count),\n            \"All leaf indices must be in-bounds. Got indices [{}] and leaf_count = {}\",\n            membership_proof_leaf_indices.iter().join(\", \"),\n            self.leaf_count\n        );\n\n        // Calculate all derivable paths\n        let mut new_ap_digests: HashMap<u64, Digest<H>> = HashMap::new();\n\n        // Calculate the derivable digests from a number of leaf mutations and their\n        // associated authentication paths. Notice that all authentication paths\n        // are only valid *prior* to any updates. They get invalidated (unless updated)\n        // throughout the updating as their neighbor leaf digests change values.\n        // The hash map `new_ap_digests` takes care of that.\n        while let Some(LeafMutation {\n            leaf_index,\n            new_leaf,\n            membership_proof,\n        }) = mutation_data.pop()\n        {\n            let mut node_index = shared_advanced::leaf_index_to_node_index(leaf_index);\n            let former_value = new_ap_digests.insert(node_index, new_leaf);\n            assert!(\n                former_value.is_none(),\n                \"Duplicated leaf indices are not allowed in membership proof updater\"\n            );\n            let mut acc_hash: Digest<H> = new_leaf.to_owned();\n\n            for (count, &hash) in membership_proof.authentication_path.iter().enumerate() {\n                // If sibling node is something that has already been calculated, we use that\n                // hash digest. Otherwise, we use the one in our authentication path.\n                let (right_ancestor_count, height) =\n                    shared_advanced::right_lineage_length_and_own_height(node_index);\n                let is_right_child = right_ancestor_count != 0;\n                if is_right_child {\n                    let left_sibling_index = shared_advanced::left_sibling(node_index, height);\n                    let sibling_hash: Digest<H> = new_ap_digests\n                        .get(&left_sibling_index)\n                        .copied()\n                        .unwrap_or(hash);\n                    acc_hash =\n                        Digest::<H>::from_element(H::hash_pair(&sibling_hash.data, &acc_hash.data));\n\n                    // Find parent node index\n                    node_index += 1;\n                } else {\n                    let right_sibling_index = shared_advanced::right_sibling(node_index, height);\n                    let sibling_hash: Digest<H> = new_ap_digests\n                        .get(&right_sibling_index)\n                        .copied()\n                        .unwrap_or(hash);\n                    acc_hash =\n                        Digest::<H>::from_element(H::hash_pair(&acc_hash.data, &sibling_hash.data));\n\n                    // Find parent node index\n                    node_index += 1 << (height + 1);\n                }\n\n                // The last hash calculated is the peak hash\n                // This is not inserted in the hash map, as it will never be in any\n                // authentication path\n                if count < membership_proof.authentication_path.len() - 1 {\n                    new_ap_digests.insert(node_index, acc_hash);\n                }\n            }\n\n            // Update the peak\n            let (_, peak_index) =\n                shared_basic::leaf_index_to_mt_index_and_peak_index(leaf_index, self.num_leafs());\n            self.peaks[peak_index as usize] = acc_hash;\n        }\n\n        // Update all the supplied membership proofs\n        let mut modified_membership_proof_indices: Vec<usize> = vec![];\n        for (i, (membership_proof, mp_leaf_index)) in membership_proofs\n            .iter_mut()\n            .zip(membership_proof_leaf_indices)\n            .enumerate()\n        {\n            let ap_indices = membership_proof.get_node_indices(*mp_leaf_index);\n\n            // Some of the hashes in `membership_proof` might need to be updated. We can\n            // loop over `authentication_path_indices` and check if the element is\n            // contained `deducible_hashes`. If it is, then the appropriate element in\n            // `membership_proof.authentication_path` needs to be replaced with an element\n            // from `deducible_hashes`.\n            for (digest, authentication_path_indices) in membership_proof\n                .authentication_path\n                .iter_mut()\n                .zip(ap_indices.into_iter())\n            {\n                // Any number of hashes can be updated in the authentication path, since\n                // we're modifying multiple leafs in the MMR\n                // Since this function returns the indices of the modified membership proofs,\n                // a check if the new digest is actually different from the previous value is\n                // needed.\n                if new_ap_digests.contains_key(&authentication_path_indices)\n                    && *digest != new_ap_digests[&authentication_path_indices]\n                {\n                    *digest = new_ap_digests[&authentication_path_indices];\n                    modified_membership_proof_indices.push(i);\n                }\n            }\n        }\n\n        modified_membership_proof_indices.dedup();\n        modified_membership_proof_indices\n    }\n\n    /// `true` if the `new_peaks` input matches the calculated new MMR peaks\n    /// resulting from the provided appends and mutations. Can panic if initial\n    /// state is not a valid MMR.\n    fn verify_batch_update(\n        &self,\n        new_peaks: &[Digest<H>],\n        appended_leafs: &[Digest<H>],\n        leaf_mutations: Vec<LeafMutation<H>>,\n    ) -> bool {\n        let mut manipulated_leaf_indices = leaf_mutations.iter().map(|x| x.leaf_index);\n        if !manipulated_leaf_indices.clone().all_unique() {\n            return false;\n        }\n        if manipulated_leaf_indices.any(|idx| idx >= self.leaf_count) {\n            return false;\n        }\n\n        // Reverse the leaf mutation vectors, since we want to apply them using `pop`\n        let (\n            mut leaf_mutation_indices,\n            mut leaf_mutation_target_values,\n            mut updated_membership_proofs,\n        ): (Vec<_>, Vec<_>, Vec<_>) = leaf_mutations\n            .into_iter()\n            .rev()\n            .map(|m| (m.leaf_index, m.new_leaf, m.membership_proof))\n            .multiunzip();\n\n        let mut running_peaks = self.peaks.clone();\n        while let Some(membership_proof) = updated_membership_proofs.pop() {\n            let new_leaf_value = leaf_mutation_target_values.pop().unwrap();\n            let leaf_index_mutated_leaf = leaf_mutation_indices.pop().unwrap();\n\n            // TODO: Should we verify the membership proof here?\n\n            // Calculate the new peaks after mutating a leaf\n            running_peaks = shared_basic::calculate_new_peaks_from_leaf_mutation(\n                &running_peaks,\n                self.leaf_count,\n                new_leaf_value,\n                leaf_index_mutated_leaf,\n                &membership_proof,\n            );\n\n            // TODO: Replace this with the new batch updater `batch_update_from_batch_leaf_mutation`\n            // Update all remaining membership proofs with this leaf mutation\n            let leaf_mutation =\n                LeafMutation::new(leaf_index_mutated_leaf, new_leaf_value, membership_proof);\n            MmrMembershipProof::batch_update_from_leaf_mutation(\n                &mut updated_membership_proofs,\n                &leaf_mutation_indices,\n                leaf_mutation,\n            );\n        }\n\n        for (append_count, &leaf_to_append) in (0..).zip(appended_leafs) {\n            let (calculated_new_peaks, _) = shared_basic::calculate_new_peaks_from_append(\n                self.leaf_count + append_count,\n                running_peaks,\n                leaf_to_append,\n            );\n            running_peaks = calculated_new_peaks;\n        }\n\n        running_peaks == new_peaks\n    }\n\n    fn to_accumulator(&self) -> MmrAccumulator<H> {\n        self.to_owned()\n    }\n}\n\n/// Follows the description on\n/// <https://github.com/mimblewimble/grin/blob/master/doc/mmr.md#hashing-and-bagging>\n/// to calculate a root from a list of peaks and the size of the MMR.\npub(crate) fn bag_peaks<H: HashFunction>(peaks: &[Digest<H>], leaf_count: u64) -> Digest<H> {\n    // use `hash_10` over `hash` or `hash_varlen` to simplify hashing in Triton VM\n    let leaf_count_elem = H::Element::from(leaf_count);\n    let hashed_leaf_count = Digest::<H>::from_element(H::hash_single(&leaf_count_elem));\n\n    peaks.iter().rev().fold(hashed_leaf_count, |acc, &peak| {\n        Digest::<H>::from_element(H::hash_pair(&peak.data, &acc.data))\n    })\n}\n\npub mod util {\n    // use itertools::Itertools;\n\n    use super::super::shared_advanced::right_lineage_length_from_node_index;\n    use super::super::shared_basic::leaf_index_to_mt_index_and_peak_index;\n    use super::*;\n    use crate::crypto::digest::random_elements;\n\n    /// Get an MMR accumulator with a requested number of leafs, and requested leaf\n    /// digests at specified indices. Also returns the MMR membership proofs for the\n    /// specified leafs.\n    pub fn mmra_with_mps<H: HashFunction>(\n        leaf_count: u64,\n        specified_leafs: Vec<(u64, Digest<H>)>,\n    ) -> (MmrAccumulator<H>, Vec<MmrMembershipProof<H>>) {\n        assert!(\n            specified_leafs.iter().map(|&(idx, _)| idx).all_unique(),\n            \"Specified leaf indices must be unique\"\n        );\n\n        // initial_setup\n        let mut peaks: Vec<Digest<H>> = random_elements::<H>(leaf_count.count_ones() as usize);\n        if specified_leafs.is_empty() {\n            return (MmrAccumulator::init(peaks, leaf_count), vec![]);\n        }\n\n        let (first_leaf_index, first_specified_digest) = specified_leafs[0];\n        let (first_mt_index, first_peak_index) =\n            leaf_index_to_mt_index_and_peak_index(first_leaf_index, leaf_count);\n\n        // Change peaks such that the 1st specification belongs in the MMR\n        let first_mt_height = (first_mt_index + 1).next_power_of_two().ilog2() - 1;\n        let first_ap: Vec<Digest<H>> = random_elements(first_mt_height as usize);\n\n        let first_mp = MmrMembershipProof::new(first_ap);\n        let original_node_indices = first_mp.get_node_indices(first_leaf_index);\n        let mut derivable_node_values: HashMap<u64, Digest<H>> = HashMap::default();\n        let mut first_acc_hash = first_specified_digest;\n        for (height, node_index_in_path) in first_mp\n            .get_direct_path_indices(first_leaf_index)\n            .into_iter()\n            .enumerate()\n        {\n            derivable_node_values.insert(node_index_in_path, first_acc_hash);\n            if first_mp.authentication_path.len() > height {\n                if right_lineage_length_from_node_index(node_index_in_path) != 0 {\n                    first_acc_hash = Digest::<H>::from_element(H::hash_pair(\n                        &first_mp.authentication_path[height].data,\n                        &first_acc_hash.data,\n                    ));\n                } else {\n                    first_acc_hash = Digest::<H>::from_element(H::hash_pair(\n                        &first_acc_hash.data,\n                        &first_mp.authentication_path[height].data,\n                    ));\n                }\n            }\n        }\n\n        // Update root\n        peaks[first_peak_index as usize] = first_acc_hash;\n\n        let mut all_ap_elements: HashMap<u64, Digest<H>> = original_node_indices\n            .into_iter()\n            .zip_eq(first_mp.authentication_path.clone())\n            .collect();\n        let mut all_mps = vec![first_mp];\n        let mut all_leaf_indices = vec![first_leaf_index];\n        let mut all_leafs = vec![first_specified_digest];\n\n        for (new_leaf_index, new_leaf) in specified_leafs.into_iter().skip(1) {\n            let (new_leaf_mt_index, _new_leaf_peaks_index) =\n                leaf_index_to_mt_index_and_peak_index(new_leaf_index, leaf_count);\n            let height_of_new_mt = (new_leaf_mt_index + 1).next_power_of_two().ilog2() - 1;\n            let mut new_mp = MmrMembershipProof::new(random_elements(height_of_new_mt as usize));\n            let new_node_indices = new_mp.get_node_indices(new_leaf_index);\n\n            for (height, new_node_index) in new_node_indices.iter().enumerate() {\n                if all_ap_elements.contains_key(new_node_index) {\n                    // AP element may not be mutated\n                    new_mp.authentication_path[height] = all_ap_elements[new_node_index];\n                } else if derivable_node_values.contains_key(new_node_index) {\n                    // AP element must refer to both old and new leaf\n                    new_mp.authentication_path[height] = derivable_node_values[new_node_index];\n                }\n            }\n\n            let new_peaks = shared_basic::calculate_new_peaks_from_leaf_mutation(\n                &peaks,\n                leaf_count,\n                new_leaf,\n                new_leaf_index,\n                &new_mp,\n            );\n            assert!(new_mp.verify(new_leaf_index, new_leaf, &new_peaks, leaf_count));\n\n            let leaf_mutations = vec![LeafMutation::new(new_leaf_index, new_leaf, new_mp.clone())];\n            let mutated = MmrMembershipProof::batch_update_from_batch_leaf_mutation(\n                &mut all_mps.iter_mut().collect_vec(),\n                &all_leaf_indices,\n                leaf_mutations,\n            );\n\n            // Sue me\n            for muta in mutated.iter() {\n                let mp = &all_mps[*muta];\n                let mp_leaf_index = all_leaf_indices[*muta];\n                for (hght, idx) in mp.get_node_indices(mp_leaf_index).iter().enumerate() {\n                    all_ap_elements.insert(*idx, mp.authentication_path[hght]);\n                }\n            }\n\n            // Update derivable node values\n            let mut acc_hash = new_leaf;\n            for (height, node_index_in_path) in new_mp\n                .get_direct_path_indices(new_leaf_index)\n                .into_iter()\n                .enumerate()\n            {\n                if height == new_mp.get_direct_path_indices(new_leaf_index).len() - 1 {\n                    break;\n                }\n                derivable_node_values.insert(node_index_in_path, acc_hash);\n                if right_lineage_length_from_node_index(node_index_in_path) != 0 {\n                    acc_hash = Digest::<H>::from_element(H::hash_pair(\n                        &new_mp.authentication_path[height].data,\n                        &acc_hash.data,\n                    ));\n                } else {\n                    acc_hash = Digest::<H>::from_element(H::hash_pair(\n                        &acc_hash.data,\n                        &new_mp.authentication_path[height].data,\n                    ));\n                }\n            }\n\n            // Update all_ap_elements\n            for (node_index, ap_element) in new_node_indices\n                .into_iter()\n                .zip_eq(new_mp.authentication_path.clone().into_iter())\n            {\n                all_ap_elements.insert(node_index, ap_element);\n            }\n\n            all_mps.push(new_mp);\n            peaks = new_peaks;\n            all_leafs.push(new_leaf);\n            all_leaf_indices.push(new_leaf_index);\n        }\n\n        (MmrAccumulator::init(peaks, leaf_count), all_mps)\n    }\n}\n\nuse arbitrary::Arbitrary;\n\nimpl<'a, H: HashFunction> Arbitrary<'a> for MmrAccumulator<H> {\n    fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result<Self> {\n        let num_leafs = u.arbitrary::<u64>()? >> 1; // num_leafs can be at most 63 bits\n        let peaks = (0..num_leafs.count_ones())\n            .map(|_| Digest::arbitrary(u))\n            .try_collect()?;\n\n        Ok(MmrAccumulator::init(peaks, num_leafs))\n    }\n}\n\n// #[cfg(test)]\n// mod accumulator_mmr_tests {\n//     use std::cmp;\n\n//     use insta::assert_snapshot;\n//     use itertools::izip;\n//     use itertools::Itertools;\n//     use num_traits::ConstZero;\n//     use proptest::collection::vec;\n//     use proptest::prop_assert_eq;\n//     use proptest_arbitrary_interop::arb;\n//     use rand::distr::Uniform;\n//     use rand::prelude::*;\n//     use rand::random;\n//     use test_strategy::proptest;\n\n//     use super::*;\n//     use crate::math::b_field_element::BFieldElement;\n//     use crate::math::other::random_elements;\n//     use crate::math::tip5::Tip5;\n//     use crate::mock::mmr::get_mock_ammr_from_digests;\n//     use crate::mock::mmr::MockMmr;\n\n//     impl From<MockMmr> for MmrAccumulator {\n//         fn from(ammr: MockMmr) -> Self {\n//             MmrAccumulator {\n//                 leaf_count: ammr.num_leafs(),\n//                 peaks: ammr.peaks(),\n//             }\n//         }\n//     }\n\n//     impl From<&MockMmr> for MmrAccumulator {\n//         fn from(ammr: &MockMmr) -> Self {\n//             MmrAccumulator {\n//                 leaf_count: ammr.num_leafs(),\n//                 peaks: ammr.peaks(),\n//             }\n//         }\n//     }\n\n//     #[test]\n//     fn conversion_test() {\n//         let leaf_hashes: Vec<Digest> = random_elements(3);\n//         let mock_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes);\n//         let accumulator_mmr = MmrAccumulator::from(mock_mmr.clone());\n\n//         assert_eq!(mock_mmr.peaks(), accumulator_mmr.peaks());\n//         assert_eq!(mock_mmr.bag_peaks(), accumulator_mmr.bag_peaks());\n//         assert_eq!(mock_mmr.is_empty(), accumulator_mmr.is_empty());\n//         assert!(!mock_mmr.is_empty());\n//         assert_eq!(mock_mmr.num_leafs(), accumulator_mmr.num_leafs());\n//         assert_eq!(3, accumulator_mmr.num_leafs());\n//     }\n\n//     #[test]\n//     fn verify_batch_update_single_append_test() {\n//         let leaf_hashes_start: Vec<Digest> = random_elements(3);\n//         let appended_leaf: Digest = random();\n\n//         let mut leaf_hashes_end: Vec<Digest> = leaf_hashes_start.clone();\n//         leaf_hashes_end.push(appended_leaf);\n\n//         let accumulator_mmr_start: MmrAccumulator =\n//             MmrAccumulator::new_from_leafs(leaf_hashes_start);\n//         let accumulator_mmr_end: MmrAccumulator = MmrAccumulator::new_from_leafs(leaf_hashes_end);\n\n//         let leafs_were_appended = accumulator_mmr_start.verify_batch_update(\n//             &accumulator_mmr_end.peaks(),\n//             &[appended_leaf],\n//             vec![],\n//         );\n//         assert!(leafs_were_appended);\n//     }\n\n//     #[test]\n//     fn verify_batch_update_single_mutate_test() {\n//         let leaf0: Digest = random();\n//         let leaf1: Digest = random();\n//         let leaf2: Digest = random();\n//         let leaf3: Digest = random();\n//         let leaf4: Digest = random();\n//         let leaf_hashes_start: Vec<Digest> = vec![leaf0, leaf1, leaf2, leaf4];\n//         let leaf_hashes_end: Vec<Digest> = vec![leaf0, leaf1, leaf2, leaf3];\n\n//         let accumulator_mmr_start: MmrAccumulator =\n//             MmrAccumulator::new_from_leafs(leaf_hashes_start.clone());\n//         let archive_mmr_start: MockMmr = get_mock_ammr_from_digests(leaf_hashes_start);\n//         let leaf_index_3 = 3;\n//         let membership_proof = archive_mmr_start.prove_membership(leaf_index_3);\n//         let accumulator_mmr_end: MmrAccumulator = MmrAccumulator::new_from_leafs(leaf_hashes_end);\n\n//         {\n//             let appended_leafs = [];\n//             let leaf_mutations = vec![LeafMutation::new(\n//                 leaf_index_3,\n//                 leaf3,\n//                 membership_proof.clone(),\n//             )];\n//             assert!(accumulator_mmr_start.verify_batch_update(\n//                 &accumulator_mmr_end.peaks(),\n//                 &appended_leafs,\n//                 leaf_mutations,\n//             ));\n//         }\n//         // Verify that repeated mutations are disallowed\n//         {\n//             let appended_leafs = [];\n//             let leaf_mutations = vec![\n//                 LeafMutation::new(leaf_index_3, leaf3, membership_proof.clone()),\n//                 LeafMutation::new(leaf_index_3, leaf3, membership_proof),\n//             ];\n//             assert!(!accumulator_mmr_start.verify_batch_update(\n//                 &accumulator_mmr_end.peaks(),\n//                 &appended_leafs,\n//                 leaf_mutations,\n//             ));\n//         }\n//     }\n\n//     #[test]\n//     fn verify_batch_update_two_append_test() {\n//         let leaf_hashes_start: Vec<Digest> = random_elements(3);\n//         let appended_leafs: Vec<Digest> = random_elements(2);\n//         let leaf_hashes_end: Vec<Digest> =\n//             [leaf_hashes_start.clone(), appended_leafs.clone()].concat();\n//         let accumulator_mmr_start: MmrAccumulator =\n//             MmrAccumulator::new_from_leafs(leaf_hashes_start);\n//         let accumulator_mmr_end: MmrAccumulator = MmrAccumulator::new_from_leafs(leaf_hashes_end);\n\n//         let leafs_were_appended = accumulator_mmr_start.verify_batch_update(\n//             &accumulator_mmr_end.peaks(),\n//             &appended_leafs,\n//             vec![],\n//         );\n//         assert!(leafs_were_appended);\n//     }\n\n//     #[test]\n//     fn verify_batch_update_two_mutate_test() {\n//         let leaf14: Digest = random();\n//         let leaf15: Digest = random();\n//         let leaf16: Digest = random();\n//         let leaf17: Digest = random();\n//         let leaf20: Digest = random();\n//         let leaf21: Digest = random();\n\n//         let leaf_hashes_start: Vec<Digest> = vec![leaf14, leaf15, leaf16, leaf17];\n//         let leaf_hashes_end: Vec<Digest> = vec![leaf14, leaf20, leaf16, leaf21];\n\n//         let accumulator_mmr_start: MmrAccumulator =\n//             MmrAccumulator::new_from_leafs(leaf_hashes_start.clone());\n//         let archive_mmr_start: MockMmr = get_mock_ammr_from_digests(leaf_hashes_start);\n//         let leaf_index_1 = 1;\n//         let leaf_index_3 = 3;\n//         let membership_proof1 = archive_mmr_start.prove_membership(leaf_index_1);\n//         let membership_proof3 = archive_mmr_start.prove_membership(leaf_index_3);\n//         let accumulator_mmr_end: MmrAccumulator = MmrAccumulator::new_from_leafs(leaf_hashes_end);\n//         let leaf_mutations = vec![\n//             LeafMutation::new(leaf_index_1, leaf20, membership_proof1),\n//             LeafMutation::new(leaf_index_3, leaf21, membership_proof3),\n//         ];\n//         assert!(accumulator_mmr_start.verify_batch_update(\n//             &accumulator_mmr_end.peaks(),\n//             &[],\n//             leaf_mutations\n//         ));\n//     }\n\n//     #[test]\n//     fn batch_mutate_leaf_and_update_mps_test() {\n//         let mut rng = rand::rng();\n//         for mmr_leaf_count in 1..100 {\n//             let initial_leaf_digests: Vec<Digest> = random_elements(mmr_leaf_count);\n\n//             let mut mmra: MmrAccumulator =\n//                 MmrAccumulator::new_from_leafs(initial_leaf_digests.clone());\n//             let mut ammr: MockMmr = get_mock_ammr_from_digests(initial_leaf_digests.clone());\n//             let mut ammr_copy: MockMmr = get_mock_ammr_from_digests(initial_leaf_digests.clone());\n\n//             let mutated_leaf_count = rng.random_range(0..mmr_leaf_count);\n//             let all_indices: Vec<u64> = (0..mmr_leaf_count as u64).collect();\n\n//             // Pick indices for leafs that are being mutated\n//             let mut all_indices_mut0 = all_indices.clone();\n//             let mut mutated_leaf_indices: Vec<u64> = vec![];\n//             for _ in 0..mutated_leaf_count {\n//                 let leaf_index =\n//                     all_indices_mut0.remove(rng.random_range(0..all_indices_mut0.len()));\n//                 mutated_leaf_indices.push(leaf_index);\n//             }\n\n//             // Pick membership proofs that we want to update\n//             let membership_proof_count = rng.random_range(0..mmr_leaf_count);\n//             let mut all_indices_mut1 = all_indices.clone();\n//             let mut membership_proof_indices: Vec<u64> = vec![];\n//             for _ in 0..membership_proof_count {\n//                 let leaf_index =\n//                     all_indices_mut1.remove(rng.random_range(0..all_indices_mut1.len()));\n//                 membership_proof_indices.push(leaf_index);\n//             }\n\n//             // Calculate the terminal leafs, as they look after the batch leaf mutation\n//             // that we are preparing to execute\n//             let new_leafs: Vec<Digest> = random_elements(mutated_leaf_count);\n//             let mut terminal_leafs: Vec<Digest> = initial_leaf_digests;\n\n//             for (i, new_leaf) in mutated_leaf_indices.iter().zip(new_leafs.iter()) {\n//                 new_leaf.clone_into(&mut terminal_leafs[*i as usize]);\n//             }\n\n//             // Calculate the leafs digests associated with the membership proofs, as they look\n//             // *after* the batch leaf mutation\n//             let mut terminal_leafs_for_mps: Vec<Digest> = vec![];\n//             for i in membership_proof_indices.iter() {\n//                 terminal_leafs_for_mps.push(terminal_leafs[*i as usize]);\n//             }\n\n//             // Construct the mutation data\n//             let all_mps = mutated_leaf_indices\n//                 .iter()\n//                 .map(|i| ammr.prove_membership(*i))\n//                 .collect_vec();\n//             let mutation_data: Vec<LeafMutation> = new_leafs\n//                 .into_iter()\n//                 .zip(mutated_leaf_indices)\n//                 .zip(all_mps.iter())\n//                 .map(|((leaf, leaf_index), mp)| LeafMutation::new(leaf_index, leaf, mp.clone()))\n//                 .collect_vec();\n\n//             assert_eq!(mutated_leaf_count, mutation_data.len());\n\n//             let original_membership_proofs: Vec<MmrMembershipProof> = membership_proof_indices\n//                 .iter()\n//                 .map(|i| ammr.prove_membership(*i))\n//                 .collect();\n\n//             // Do the update on both MMRs\n//             let mut mmra_mps = original_membership_proofs.clone();\n//             let mut ammr_mps = original_membership_proofs.clone();\n//             let mutated_mps_mmra = mmra.batch_mutate_leaf_and_update_mps(\n//                 &mut mmra_mps.iter_mut().collect::<Vec<_>>(),\n//                 &membership_proof_indices,\n//                 mutation_data.clone(),\n//             );\n//             let mutated_mps_ammr = ammr.batch_mutate_leaf_and_update_mps(\n//                 &mut ammr_mps.iter_mut().collect::<Vec<_>>(),\n//                 &membership_proof_indices,\n//                 mutation_data.clone(),\n//             );\n//             assert_eq!(mutated_mps_mmra, mutated_mps_ammr);\n\n//             // Verify that both MMRs end up with same peaks\n//             assert_eq!(mmra.peaks(), ammr.peaks());\n\n//             // Verify that membership proofs from AMMR and MMRA are equal\n//             assert_eq!(membership_proof_count, mmra_mps.len());\n//             assert_eq!(membership_proof_count, ammr_mps.len());\n//             assert_eq!(ammr_mps, mmra_mps);\n\n//             // Verify that all membership proofs still work\n//             assert!(mmra_mps\n//                 .iter()\n//                 .zip(terminal_leafs_for_mps.iter())\n//                 .zip(membership_proof_indices.iter())\n//                 .all(|((mp, &leaf), leaf_index)| mp.verify(\n//                     *leaf_index,\n//                     leaf,\n//                     &mmra.peaks(),\n//                     mmra.num_leafs()\n//                 )));\n\n//             // Manually construct an MMRA from the new data and verify that peaks and leaf\n//             // count matches\n//             assert!(\n//                 mutated_leaf_count == 0 || ammr_copy.peaks() != ammr.peaks(),\n//                 \"If mutated leaf count is non-zero, at least on peaks must be different\"\n//             );\n//             mutation_data.into_iter().for_each(\n//                 |LeafMutation {\n//                      leaf_index,\n//                      new_leaf,\n//                      ..\n//                  }| {\n//                     ammr_copy.mutate_leaf_raw(leaf_index, new_leaf);\n//                 },\n//             );\n//             assert_eq!(\n//                 ammr_copy.peaks(),\n//                 ammr.peaks(),\n//                 \"Mutation though batch mutation function must transform the MMR \\\n//                 like a list of individual leaf mutations\"\n//             );\n//         }\n//     }\n\n//     #[test]\n//     fn verify_batch_update_pbt() {\n//         type H = Tip5;\n\n//         for start_size in 1..18 {\n//             let leaf_hashes_start: Vec<Digest> = random_elements(start_size);\n\n//             let local_hash = |x: u128| H::hash_varlen(&[BFieldElement::new(x as u64)]);\n\n//             let bad_digests: Vec<Digest> = (12..12 + start_size)\n//                 .map(|x| local_hash(x as u128))\n//                 .collect();\n\n//             let bad_mmr: MockMmr = get_mock_ammr_from_digests(bad_digests.clone());\n//             let bad_membership_proof: MmrMembershipProof = bad_mmr.prove_membership(0);\n//             let bad_membership_proof_digest = bad_digests[0];\n//             let bad_leaf: Digest = local_hash(8765432165123u128);\n//             let mock_mmr_init: MockMmr = get_mock_ammr_from_digests(leaf_hashes_start.clone());\n//             let accumulator_mmr = MmrAccumulator::new_from_leafs(leaf_hashes_start.clone());\n\n//             for append_size in 0..18 {\n//                 let appends: Vec<Digest> = (2000..2000 + append_size).map(local_hash).collect();\n//                 let mutate_count = cmp::min(12, start_size);\n//                 for mutate_size in 0..mutate_count {\n//                     let new_leaf_values: Vec<Digest> = (13..13 + mutate_size)\n//                         .map(|x| local_hash(x as u128))\n//                         .collect();\n\n//                     // Ensure that indices are unique since batch updating cannot update\n//                     // the same leaf twice in one go\n//                     let mutated_indices: Vec<u64> = rand::rng()\n//                         .sample_iter(Uniform::new(0, start_size as u64).unwrap())\n//                         .take(mutate_size)\n//                         .sorted()\n//                         .unique()\n//                         .collect();\n\n//                     // Create the expected MMRs\n//                     let mut leaf_hashes_mutated = leaf_hashes_start.clone();\n//                     for (index, new_leaf) in izip!(mutated_indices.clone(), new_leaf_values.clone())\n//                     {\n//                         leaf_hashes_mutated[index as usize] = new_leaf;\n//                     }\n//                     for appended_digest in appends.iter() {\n//                         leaf_hashes_mutated.push(appended_digest.to_owned());\n//                     }\n\n//                     // let mutated_mock_mmr =\n//                     //     MockMmr::<Hasher>::new(leaf_hashes_mutated.clone());\n//                     let mutated_mock_mmr: MockMmr =\n//                         get_mock_ammr_from_digests(leaf_hashes_mutated.clone());\n//                     let mutated_accumulator_mmr =\n//                         MmrAccumulator::new_from_leafs(leaf_hashes_mutated);\n//                     let expected_new_peaks_from_archival = mutated_mock_mmr.peaks();\n//                     let expected_new_peaks_from_accumulator = mutated_accumulator_mmr.peaks();\n//                     assert_eq!(\n//                         expected_new_peaks_from_archival,\n//                         expected_new_peaks_from_accumulator\n//                     );\n\n//                     // Create the inputs to the method call\n//                     let all_mps = mutated_indices\n//                         .iter()\n//                         .map(|i| mock_mmr_init.prove_membership(*i))\n//                         .collect_vec();\n//                     let mut leaf_mutations: Vec<LeafMutation> = new_leaf_values\n//                         .clone()\n//                         .into_iter()\n//                         .zip(mutated_indices.iter())\n//                         .zip(all_mps.iter())\n//                         .map(|((leaf, leaf_index), mp)| {\n//                             LeafMutation::new(*leaf_index, leaf, mp.clone())\n//                         })\n//                         .collect_vec();\n//                     assert!(accumulator_mmr.verify_batch_update(\n//                         &expected_new_peaks_from_accumulator,\n//                         &appends,\n//                         leaf_mutations.clone()\n//                     ));\n//                     assert!(mock_mmr_init.verify_batch_update(\n//                         &expected_new_peaks_from_accumulator,\n//                         &appends,\n//                         leaf_mutations.clone()\n//                     ));\n\n//                     // Negative tests\n//                     let mut bad_appends = appends.clone();\n//                     if append_size > 0 && mutate_size > 0 {\n//                         // bad append vector\n//                         bad_appends[(mutated_indices[0] % append_size as u64) as usize] = bad_leaf;\n//                         assert!(!accumulator_mmr.verify_batch_update(\n//                             &expected_new_peaks_from_accumulator,\n//                             &bad_appends,\n//                             leaf_mutations.clone()\n//                         ));\n\n//                         // Bad membership proof\n//                         let bad_index = mutated_indices[0] as usize % mutated_indices.len();\n//                         leaf_mutations[bad_index].new_leaf = bad_membership_proof_digest;\n//                         assert!(!accumulator_mmr.verify_batch_update(\n//                             &expected_new_peaks_from_accumulator,\n//                             &appends,\n//                             leaf_mutations.clone()\n//                         ));\n//                         leaf_mutations[mutated_indices[0] as usize % mutated_indices.len()]\n//                             .membership_proof = bad_membership_proof.clone();\n//                         assert!(!accumulator_mmr.verify_batch_update(\n//                             &expected_new_peaks_from_accumulator,\n//                             &appends,\n//                             leaf_mutations\n//                         ));\n//                     }\n//                 }\n//             }\n//         }\n//     }\n\n//     #[test]\n//     fn mmra_serialization_test() {\n//         // You could argue that this test doesn't belong here, as it tests the behavior of\n//         // an imported library. I included it here, though, because the setup seems a bit clumsy\n//         // to me so far.\n//         type H = Tip5;\n//         type Mmr = MmrAccumulator;\n//         let mut mmra: Mmr = MmrAccumulator::new_from_leafs(vec![]);\n//         mmra.append(H::hash(&BFieldElement::ZERO));\n\n//         let json = serde_json::to_string(&mmra).unwrap();\n//         let s_back = serde_json::from_str::<Mmr>(&json).unwrap();\n//         assert_eq!(mmra.bag_peaks(), s_back.bag_peaks());\n//         assert_eq!(1, mmra.num_leafs());\n//     }\n\n//     #[test]\n//     fn get_size_test() {\n//         type Mmr = MmrAccumulator;\n\n//         // 10 digests produces an MMRA with two peaks\n//         let digests: Vec<Digest> = random_elements(10);\n//         let mmra: Mmr = MmrAccumulator::new_from_leafs(digests);\n\n//         println!(\"mmra.get_size() =  {}\", mmra.get_size());\n\n//         // Sanity check of measured size in RAM\n//         assert!(mmra.get_size() > 2 * std::mem::size_of::<Digest>());\n\n//         // For some reason this failed on GitHub's server when only multiplied by 4. This worked\n//         // consistently on my machine with `4`. It's probably because of a different architecture.\n//         // So the number was just increased to 100. See:\n//         // https://github.com/Neptune-Crypto/twenty-first/actions/runs/4928129170/jobs/8806086355\n//         assert!(mmra.get_size() < 100 * std::mem::size_of::<Digest>());\n//     }\n\n//     #[test]\n//     fn test_mmr_accumulator_decode() {\n//         for _ in 0..100 {\n//             let num_leafs = rand::random_range(0..100);\n//             let leafs = random_elements(num_leafs);\n//             let mmra = MmrAccumulator::new_from_leafs(leafs);\n//             let encoded = mmra.encode();\n//             let decoded = *MmrAccumulator::decode(&encoded).unwrap();\n//             assert_eq!(mmra, decoded);\n//         }\n//     }\n\n//     #[test]\n//     #[should_panic(expected = \"Lists must have same length. Got: 0 and 3\")]\n//     fn test_diff_len_lists_batch_mutate_leaf_and_update_mps() {\n//         // Checks that batch_mutate_leaf_and_update_mps panics when passed differing length lists\n\n//         // differing length lists\n//         let mut mock_membership_proofs: Vec<MmrMembershipProof> = vec![];\n//         let membership_proof_leaf_indices = vec![1, 2, 3];\n\n//         // This should trigger the panic due to the lengths mismatch\n//         let mut mmra: MmrAccumulator = MmrAccumulator::new_from_leafs(vec![]);\n//         mmra.batch_mutate_leaf_and_update_mps(\n//             mock_membership_proofs\n//                 .iter_mut()\n//                 .collect::<Vec<_>>()\n//                 .as_mut_slice(),\n//             &membership_proof_leaf_indices,\n//             vec![],\n//         );\n//     }\n\n//     #[proptest]\n//     fn arbitrary_mmra_has_consistent_num_leafs_and_peaks(\n//         #[strategy(arb::<MmrAccumulator>())] mmra: MmrAccumulator,\n//     ) {\n//         prop_assert_eq!(mmra.peaks().len(), mmra.num_leafs().count_ones() as usize);\n//     }\n\n//     #[proptest(cases = 20)]\n//     fn mmra_with_mps_produces_valid_output(\n//         #[strategy(0..u64::MAX / 2)] mmr_leaf_count: u64,\n//         #[strategy(0usize..10)] _num_revealed_leafs: usize,\n//         #[strategy(vec(0u64..#mmr_leaf_count, #_num_revealed_leafs))]\n//         mmr_revealed_leaf_indices: Vec<u64>,\n//     ) {\n//         let indexed_leafs_input: Vec<(u64, Digest)> = mmr_revealed_leaf_indices\n//             .iter()\n//             .map(|idx| (*idx, random()))\n//             .collect_vec();\n//         let (mmra, mmr_mps) = util::mmra_with_mps(mmr_leaf_count, indexed_leafs_input.clone());\n//         for (mmr_mp, (mmr_leaf_index, leaf)) in\n//             mmr_mps.into_iter().zip_eq(indexed_leafs_input.iter())\n//         {\n//             mmr_mp.verify(*mmr_leaf_index, *leaf, &mmra.peaks(), mmra.num_leafs());\n//         }\n//     }\n\n//     #[test]\n//     fn computing_mmr_root_for_no_leafs_produces_some_digest() {\n//         MmrAccumulator::new_from_leafs(vec![]).bag_peaks();\n//     }\n\n//     #[test]\n//     fn bag_peaks_snapshot() {\n//         let mut rng = StdRng::seed_from_u64(0x92ca758afeec6d29);\n\n//         let empty_mmr = MmrAccumulator::new_from_leafs(vec![]);\n//         assert_snapshot!(empty_mmr.bag_peaks().0[0], @\"00941080798860502477\");\n\n//         let one_leaf_mmr = MmrAccumulator::new_from_leafs(vec![rng.random()]);\n//         assert_snapshot!(one_leaf_mmr.bag_peaks().0[0], @\"16030278140236594076\");\n\n//         let two_leafs_mmr = MmrAccumulator::new_from_leafs(vec![rng.random()]);\n//         assert_snapshot!(two_leafs_mmr.bag_peaks().0[0], @\"09405464453414142998\");\n\n//         let ten_peaks: [Digest; 10] = rng.random();\n//         let ten_peak_mmr = MmrAccumulator::init(ten_peaks.to_vec(), 0b11_1111_1111);\n//         assert_snapshot!(ten_peak_mmr.bag_peaks().0[0], @\"03780783030734820370\");\n//     }\n// }\n"
  },
  {
    "path": "tools/garaga_rs/src/crypto/mmr/mmr_membership_proof.rs",
    "content": "use std::collections::hash_map::RandomState;\nuse std::collections::hash_set::Intersection;\nuse std::collections::HashMap;\nuse std::collections::HashSet;\nuse std::fmt::Debug;\nuse std::iter::FromIterator;\n\n// use arbitrary::Arbitrary;\n// use get_size2::GetSize;\nuse itertools::Itertools;\n// use serde::Deserialize;\n// use serde::Serialize;\n\nuse super::mmr_trait::LeafMutation;\nuse super::shared_advanced;\nuse super::shared_basic;\nuse super::TOO_MANY_LEAFS_ERR;\nuse crate::crypto::digest::{Digest, HashFunction};\nuse crate::crypto::merkle_tree::MerkleTree;\n// use crate::error::U32_TO_USIZE_ERR;\n// use crate::error::USIZE_TO_U64_ERR;\n// use crate::prelude::*;\n\n#[derive(Debug, Clone, Eq, PartialEq)] //  Serialize, Deserialize, GetSize, Arbitrary)]\npub struct MmrMembershipProof<H: HashFunction> {\n    pub authentication_path: Vec<Digest<H>>,\n}\n\nimpl<H: HashFunction> MmrMembershipProof<H> {\n    pub fn new(authentication_path: Vec<Digest<H>>) -> Self {\n        Self {\n            authentication_path,\n        }\n    }\n\n    /// Verify a membership proof for an MMR.\n    pub fn verify(\n        &self,\n        leaf_index: u64,\n        leaf_hash: Digest<H>,\n        peaks: &[Digest<H>],\n        num_leafs: u64,\n    ) -> bool {\n        if leaf_index >= num_leafs {\n            // out of bounds\n            return false;\n        }\n\n        let (mut mt_index, peak_index) =\n            shared_basic::leaf_index_to_mt_index_and_peak_index(leaf_index, num_leafs);\n        let expected_peak_count = num_leafs.count_ones();\n        let actual_peak_count = u32::try_from(peaks.len()).expect(TOO_MANY_LEAFS_ERR);\n        if expected_peak_count != actual_peak_count {\n            return false;\n        }\n\n        let merkle_tree_height = u64::from(mt_index.ilog2());\n        let auth_path_len = u64::try_from(self.authentication_path.len())\n            .expect(\"Authentication path length is too large\");\n        if merkle_tree_height != auth_path_len {\n            return false;\n        }\n\n        let mut current_node = leaf_hash;\n        for &sibling in &self.authentication_path {\n            let current_node_is_left_sibling = mt_index % 2 == 0;\n            current_node = if current_node_is_left_sibling {\n                Digest::<H>::from_element(H::hash_pair(&current_node.data, &sibling.data))\n            } else {\n                Digest::<H>::from_element(H::hash_pair(&sibling.data, &current_node.data))\n            };\n            mt_index /= 2;\n        }\n        debug_assert_eq!(MerkleTree::<H>::ROOT_INDEX as u64, mt_index);\n\n        let peak_index = usize::try_from(peak_index).expect(\"Peak index is too large\");\n\n        peaks[peak_index] == current_node\n    }\n\n    /// Return the node indices for the authentication path in this membership proof\n    pub(crate) fn get_node_indices(&self, leaf_index: u64) -> Vec<u64> {\n        let mut node_index = shared_advanced::leaf_index_to_node_index(leaf_index);\n        let mut node_indices = vec![];\n        for _ in 0..self.authentication_path.len() {\n            let (right_ancestor_count, height) =\n                shared_advanced::right_lineage_length_and_own_height(node_index);\n            let is_right_child = right_ancestor_count != 0;\n            if is_right_child {\n                node_indices.push(shared_advanced::left_sibling(node_index, height));\n\n                // parent of right child is +1\n                node_index += 1;\n            } else {\n                node_indices.push(shared_advanced::right_sibling(node_index, height));\n\n                // parent of left child:\n                node_index += 1 << (height + 1);\n            }\n        }\n\n        node_indices\n    }\n\n    /// Return the node indices for the hash values that can be derived from this proof,\n    /// including the node index for the leaf itself.\n    pub(crate) fn get_direct_path_indices(&self, leaf_index: u64) -> Vec<u64> {\n        let mut node_index = shared_advanced::leaf_index_to_node_index(leaf_index);\n        let mut node_indices = vec![node_index];\n        for _ in 0..self.authentication_path.len() {\n            node_index = shared_advanced::parent(node_index);\n            node_indices.push(node_index);\n        }\n\n        node_indices\n    }\n\n    /// Return the node index of the peak that the membership proof is pointing\n    /// to, as well as this peak's height.\n    fn get_peak_index_and_height(&self, leaf_index: u64) -> (u64, u32) {\n        (\n            *self.get_direct_path_indices(leaf_index).last().unwrap(),\n            self.authentication_path.len() as u32,\n        )\n    }\n\n    /// Update a membership proof with a `verify_append` proof. Returns `true` if an\n    /// authentication path has been mutated, false otherwise.\n    pub fn update_from_append(\n        &mut self,\n        membership_proof_leaf_index: u64,\n        old_mmr_leaf_count: u64,\n        new_mmr_leaf: Digest<H>,\n        old_mmr_peaks: &[Digest<H>],\n    ) -> bool {\n        // 1. Get index of authentication paths's peak\n        // 2. Get node indices for nodes added by the append\n        // 3. Check if authentication path's peak's parent is present in the added nodes\n        //   (peak can only be left child)\n        //   a. If not, then we are done, return from method\n        // 4. Get the indices that auth path must be extended with\n        // 5. Get all derivable node digests, store in hash map\n        //   a. Get the node digests from the previous peaks\n        //   b. Get the node digests that can be calculated by hashing from the new leaf\n        // 6. Push required digests to the authentication path\n\n        // 1\n        let (own_old_peak_index, own_old_peak_height) =\n            self.get_peak_index_and_height(membership_proof_leaf_index);\n\n        // 2\n        let added_node_indices = shared_advanced::node_indices_added_by_append(old_mmr_leaf_count);\n\n        // 3\n        // Any peak is a left child, so we don't have to check if it's a right or left child.\n        // This means we can use a faster method to find the parent index than the generic method.\n        let peak_parent_index = own_old_peak_index + (1 << (own_old_peak_height + 1));\n\n        // 3a\n        if !added_node_indices.contains(&peak_parent_index) {\n            return false;\n        }\n\n        // 4 Get node indices of missing digests\n        let new_peak_index: u64 = *added_node_indices.last().unwrap();\n        let new_node_count: u64 = shared_advanced::num_leafs_to_num_nodes(old_mmr_leaf_count + 1);\n        let node_indices_for_missing_digests: Vec<u64> =\n            shared_advanced::get_authentication_path_node_indices(\n                own_old_peak_index,\n                new_peak_index,\n                new_node_count,\n            )\n            .unwrap();\n\n        // 5 collect all derivable peaks in a hashmap indexed by node index\n        // 5.a, collect all node hash digests that are present in the old peaks\n        // The keys in the hash map are node indices\n        let mut known_digests: HashMap<u64, Digest<H>> = HashMap::new();\n        let (_old_mmr_peak_heights, old_mmr_peak_indices) =\n            shared_advanced::get_peak_heights_and_peak_node_indices(old_mmr_leaf_count);\n        for (old_peak_index, old_peak_digest) in\n            old_mmr_peak_indices.iter().zip(old_mmr_peaks.iter())\n        {\n            known_digests.insert(*old_peak_index, old_peak_digest.to_owned());\n        }\n\n        // 5.b collect all node hash digests that are derivable from `new_leaf` and\n        // `old_peaks`. These are the digests of `new_leaf`'s path to the root.\n        // break out of loop once *one* digest is found this way since that will\n        // always suffice.\n        let mut acc_hash = new_mmr_leaf.to_owned();\n        for (node_index, &old_peak_digest) in\n            added_node_indices.iter().zip(old_mmr_peaks.iter().rev())\n        {\n            known_digests.insert(*node_index, acc_hash.to_owned());\n\n            // peaks are always left children, so we don't have to check for that\n            acc_hash =\n                Digest::<H>::from_element(H::hash_pair(&old_peak_digest.data, &acc_hash.data));\n\n            // once we encounter the first of the needed accumulator indices,\n            // we can break. Just like we could in the update for the leaf update\n            // membership proof update.\n            // The reason for this break is that the authentication path consists of\n            // commits to disjoint sets, so anything that can be derived from a\n            // hash that is part of the missing digests cannot possible be an\n            // element in an authentication path\n            if node_indices_for_missing_digests.contains(node_index) {\n                break;\n            }\n        }\n\n        // 6\n        for missing_digest_node_index in node_indices_for_missing_digests {\n            self.authentication_path\n                .push(known_digests[&missing_digest_node_index]);\n        }\n\n        true\n    }\n\n    /// Batch update multiple membership proofs.\n    /// Returns the indices of the membership proofs that were modified where index refers\n    /// to the order in which the membership proofs were given to this function.\n    /// Panics if `membership_proofs` and `membership_proof_leaf_indices` do not have\n    /// the same length, or if a leaf index is out-of-bounds for the MMR.\n    pub fn batch_update_from_append(\n        membership_proofs: &mut [&mut Self],\n        membership_proof_leaf_indices: &[u64],\n        old_leaf_count: u64,\n        new_leaf: Digest<H>,\n        old_peaks: &[Digest<H>],\n    ) -> Vec<usize> {\n        assert_eq!(\n            membership_proofs.len(),\n            membership_proof_leaf_indices.len(),\n            \"Lists must have same length. Got: {} and {}\",\n            membership_proofs.len(),\n            membership_proof_leaf_indices.len()\n        );\n\n        assert!(\n            membership_proof_leaf_indices\n                .iter()\n                .all(|x| *x < old_leaf_count),\n            \"All leaf indices must be in-bounds. Got indices [{}] and old_leaf_count = {}\",\n            membership_proof_leaf_indices.iter().join(\", \"),\n            old_leaf_count\n        );\n\n        // 1. Get node indices for nodes added by the append\n        //   a. If length of this list is one, newly added leaf was a left child. Return.\n        // 2. Get all derivable node digests, store in hash map\n        let added_node_indices = shared_advanced::node_indices_added_by_append(old_leaf_count);\n        if added_node_indices.len() == 1 {\n            return vec![];\n        }\n\n        // 2 collect all derivable peaks in a hashmap indexed by node index\n        // 2.a, collect all node hash digests that are present in the old peaks\n        // The keys in the hash map are node indices\n        let mut known_digests: HashMap<u64, Digest<H>> = HashMap::new();\n        let (_old_peak_heights, old_peak_indices) =\n            shared_advanced::get_peak_heights_and_peak_node_indices(old_leaf_count);\n        for (old_peak_index, old_peak_digest) in old_peak_indices.iter().zip(old_peaks.iter()) {\n            known_digests.insert(*old_peak_index, old_peak_digest.to_owned());\n        }\n\n        // 2.b collect all node hash digests that are derivable from `new_leaf` and\n        // `old_peaks`. These are the digests of `new_leaf`'s path to the root.\n        let mut acc_hash = new_leaf.to_owned();\n        for ((count, node_index), &old_peak_digest) in added_node_indices\n            .iter()\n            .enumerate()\n            .zip(old_peaks.iter().rev())\n        {\n            known_digests.insert(*node_index, acc_hash.to_owned());\n\n            // The last index in `added_node_indices` is the new peak\n            // and the 2nd last will hash to the digest of the new peak,\n            // so we can skip the last two values from this list\n            if count == added_node_indices.len() - 2 {\n                break;\n            }\n\n            // peaks are always left children, so we don't have to check for that\n            acc_hash =\n                Digest::<H>::from_element(H::hash_pair(&old_peak_digest.data, &acc_hash.data));\n        }\n\n        // Loop over all membership proofs and insert missing hashes for each\n        let mut modified: Vec<usize> = vec![];\n        let new_peak_index: u64 = *added_node_indices.last().unwrap();\n        let new_node_count: u64 = shared_advanced::num_leafs_to_num_nodes(old_leaf_count + 1);\n        for (i, (membership_proof, mp_leaf_index)) in membership_proofs\n            .iter_mut()\n            .zip(membership_proof_leaf_indices)\n            .enumerate()\n        {\n            let (old_peak_index, old_peak_height) =\n                membership_proof.get_peak_index_and_height(*mp_leaf_index);\n\n            // Any peak is a left child, so we don't have to check if it's a right or left child.\n            // This means we can use a faster method to find the parent index than the generic\n            // method.\n            let peak_parent_index = old_peak_index + (1 << (old_peak_height + 1));\n            if !added_node_indices.contains(&peak_parent_index) {\n                continue;\n            }\n\n            modified.push(i);\n\n            let node_indices_for_missing_digests: Vec<u64> =\n                shared_advanced::get_authentication_path_node_indices(\n                    old_peak_index,\n                    new_peak_index,\n                    new_node_count,\n                )\n                .unwrap();\n\n            // Sanity check\n            debug_assert!(\n                !node_indices_for_missing_digests.is_empty(),\n                \"authentication path must be missing digests at this point\"\n            );\n\n            for missing_digest_node_index in node_indices_for_missing_digests {\n                membership_proof\n                    .authentication_path\n                    .push(known_digests[&missing_digest_node_index]);\n            }\n        }\n\n        modified\n    }\n\n    /// Update a membership proof with a `leaf_mutation` data structure. In\n    /// other words: Given a valid MMR membership proof for an MMR, calculate\n    /// the updated MMR membership proof after one of the MMR's leafs have been\n    /// changed.\n    pub fn update_from_leaf_mutation(\n        &mut self,\n        own_mp_leaf_index: u64,\n        leaf_mutation: &LeafMutation<H>,\n    ) -> bool {\n        let affected_node_indices: HashSet<u64> =\n            leaf_mutation.affected_node_indices().into_iter().collect();\n        let own_node_ap_indices = self.get_node_indices(own_mp_leaf_index);\n        let own_node_indices_hash_set: HashSet<u64> =\n            HashSet::from_iter(own_node_ap_indices.clone());\n        let mut intersection: Intersection<u64, RandomState> =\n            own_node_indices_hash_set.intersection(&affected_node_indices);\n\n        // If intersection is empty no change is needed\n        let Some(&intersection_index) = intersection.next() else {\n            return false;\n        };\n\n        // Sanity check, should always be true, since `intersection` can at most\n        // contain *one* element.\n        assert!(intersection.next().is_none());\n\n        // If intersection is **not** empty, we need to calculate all deducible node hashes from the\n        // `leaf_mutation_membership_proof`, until we meet the intersecting node.\n        let mut deducible_hashes: HashMap<u64, Digest<H>> = HashMap::new();\n        let mut node_index = shared_advanced::leaf_index_to_node_index(leaf_mutation.leaf_index);\n        deducible_hashes.insert(node_index, leaf_mutation.new_leaf);\n        let mut acc_hash: Digest<H> = leaf_mutation.new_leaf;\n\n        // Calculate hashes from the bottom towards the peak. Break when\n        // the intersecting node is reached.\n        for &hash in leaf_mutation.membership_proof.authentication_path.iter() {\n            // It's not necessary to calculate all the way to the root since,\n            // the intersection set has a size of at most one.\n            // So we can break the loop when we find a `node_index` that\n            // is equal to the intersection index. This way we same some\n            // hash calculations here.\n            if intersection_index == node_index {\n                break;\n            }\n\n            let (acc_right_ancestor_count, acc_height) =\n                shared_advanced::right_lineage_length_and_own_height(node_index);\n            if acc_right_ancestor_count != 0 {\n                acc_hash = Digest::<H>::from_element(H::hash_pair(&hash.data, &acc_hash.data));\n\n                // parent of right child is +1\n                node_index += 1;\n            } else {\n                acc_hash = Digest::<H>::from_element(H::hash_pair(&acc_hash.data, &hash.data));\n\n                // parent of left child:\n                node_index += 1 << (acc_height + 1);\n            };\n            deducible_hashes.insert(node_index, acc_hash);\n        }\n\n        // Some of the hashes in `self` need to be updated. We can loop over\n        // `own_node_indices` and check if the element is contained `deducible_hashes`.\n        // If it is, then the appropriate element in `self.authentication_path` needs to\n        // be replaced with an element from `deducible_hashes`.\n        for (digest, own_node_index) in self\n            .authentication_path\n            .iter_mut()\n            .zip(own_node_ap_indices.into_iter())\n        {\n            if !deducible_hashes.contains_key(&own_node_index) {\n                continue;\n            }\n            *digest = deducible_hashes[&own_node_index];\n        }\n\n        true\n    }\n\n    /// Update multiple membership proofs with a `leaf_mutation` proof. For the\n    /// `leaf_mutation_membership_proof` parameter, it doesn't matter if you use the\n    /// old or new membership proof associated with the leaf mutation, as they are\n    /// the same before and after the leaf mutation.\n    ///\n    /// Returns the indices of the membership proofs that were modified where index refers\n    /// to the order in which the membership proofs were given to this function.\n    /// Panics if `membership_proofs` and `membership_proof_leaf_indices` do not have\n    /// the same length.\n    pub fn batch_update_from_leaf_mutation(\n        membership_proofs: &mut [Self],\n        membership_proof_leaf_indices: &[u64],\n        leaf_mutation: LeafMutation<H>,\n    ) -> Vec<u64> {\n        assert_eq!(\n            membership_proofs.len(),\n            membership_proof_leaf_indices.len(),\n            \"Lists must have same length. Got: {} and {}\",\n            membership_proofs.len(),\n            membership_proof_leaf_indices.len()\n        );\n\n        // 1. Calculate all hashes that are deducible from the leaf update\n        // 2. Iterate through all membership proofs and update digests that\n        //    are deducible from the leaf update proof.\n        // Calculate hashes from the bottom towards the peak. Break before we\n        // calculate the hash of the peak, since peaks are never included in\n        // authentication paths\n        let mut deducible_hashes: HashMap<u64, Digest<H>> = HashMap::new();\n        let mut node_index = shared_advanced::leaf_index_to_node_index(leaf_mutation.leaf_index);\n        deducible_hashes.insert(node_index, leaf_mutation.new_leaf);\n        let mut acc_hash: Digest<H> = leaf_mutation.new_leaf;\n        for (count, &hash) in leaf_mutation\n            .membership_proof\n            .authentication_path\n            .iter()\n            .enumerate()\n        {\n            // Do not calculate the last hash as it will always be a peak which\n            // are never included in the authentication path\n            if count == leaf_mutation.membership_proof.authentication_path.len() - 1 {\n                break;\n            }\n\n            let (right_ancestor_count, acc_height) =\n                shared_advanced::right_lineage_length_and_own_height(node_index);\n            if right_ancestor_count != 0 {\n                // node is right child\n                acc_hash = Digest::<H>::from_element(H::hash_pair(&hash.data, &acc_hash.data));\n\n                // parent of right child is +1\n                node_index += 1;\n            } else {\n                // node is left child\n                acc_hash = Digest::<H>::from_element(H::hash_pair(&acc_hash.data, &hash.data));\n\n                // parent of left child:\n                node_index += 1 << (acc_height + 1);\n            };\n            deducible_hashes.insert(node_index, acc_hash);\n        }\n\n        let mut modified_membership_proofs: Vec<u64> = vec![];\n        for (i, (membership_proof, mp_leaf_index)) in membership_proofs\n            .iter_mut()\n            .zip(membership_proof_leaf_indices)\n            .enumerate()\n        {\n            let ap_indices = membership_proof.get_node_indices(*mp_leaf_index);\n\n            // Some of the hashes in `membership_proof` might need to be updated. We can loop over\n            // `authentication_path_indices` and check if the element is contained\n            // `deducible_hashes`.\n            // If it is, then the appropriate element in `membership_proof.authentication_path`\n            // needs to be replaced with an element from `deducible_hashes`.\n            for (digest, authentication_path_indices) in membership_proof\n                .authentication_path\n                .iter_mut()\n                .zip(ap_indices.into_iter())\n            {\n                // Maximum 1 digest can be updated in each authentication path\n                // so if that is encountered, we might as well break and go to\n                // the next membership proof\n                // Since this function returns the indices of the modified membership proofs,\n                // a check if the new digest is actually different from the previous value is\n                // needed.\n                if deducible_hashes.contains_key(&authentication_path_indices)\n                    && *digest != deducible_hashes[&authentication_path_indices]\n                {\n                    *digest = deducible_hashes[&authentication_path_indices];\n                    modified_membership_proofs.push(i as u64);\n                    break;\n                }\n            }\n        }\n\n        modified_membership_proofs\n    }\n\n    /// batch_update_from_batch_leaf_mutation\n    /// Update a batch of own membership proofs given a batch of\n    /// authenticated leaf modifications. It is the caller's res-\n    /// ponsibility to ensure that the authentication paths are\n    /// valid; if not, the updated membership proofs will become\n    /// invalid as well.\n    /// @params\n    ///  - membership_proofs -- own membership proofs, to be updated\n    ///  - authentication_paths_and_leafs -- membership proofs of the mutated\n    ///    leafs, and the new leaf values\n    ///\n    /// Returns those indices into the slice of membership proofs that were updated.\n    pub fn batch_update_from_batch_leaf_mutation(\n        membership_proofs: &mut [&mut Self],\n        membership_proof_leaf_indices: &[u64],\n        mut leaf_mutations: Vec<LeafMutation<H>>,\n    ) -> Vec<usize> {\n        assert_eq!(\n            membership_proofs.len(),\n            membership_proof_leaf_indices.len(),\n            \"Lists must have same length. Got: {} and {}\",\n            membership_proofs.len(),\n            membership_proof_leaf_indices.len()\n        );\n\n        // Calculate all derivable paths\n        let mut new_ap_digests: HashMap<u64, Digest<H>> = HashMap::new();\n\n        // Calculate the derivable digests from a number of leaf mutations and their\n        // associated authentication paths. Notice that all authentication paths\n        // are only valid *prior* to any updates. They get invalidated (unless updated)\n        // throughout the updating as their neighbor leaf digests change values.\n        // The hash map `new_ap_digests` takes care of that.\n        while let Some(LeafMutation {\n            leaf_index,\n            new_leaf,\n            membership_proof,\n        }) = leaf_mutations.pop()\n        {\n            let mut node_index = shared_advanced::leaf_index_to_node_index(leaf_index);\n            let former_value = new_ap_digests.insert(node_index, new_leaf);\n            assert!(\n                former_value.is_none(),\n                \"Duplicated leafs are not allowed in membership proof updater\"\n            );\n            let mut acc_hash: Digest<H> = new_leaf.to_owned();\n\n            for (i, &hash) in membership_proof.authentication_path.iter().enumerate() {\n                // Do not calculate the last hash as it will always be a peak which\n                // are never included in the authentication path\n                if i == membership_proof.authentication_path.len() - 1 {\n                    break;\n                }\n\n                // If sibling node is something that has already been calculated, we use that\n                // hash digest. Otherwise, we use the one in our authentication path.\n                let (right_ancestor_count, height) =\n                    shared_advanced::right_lineage_length_and_own_height(node_index);\n                if right_ancestor_count != 0 {\n                    let left_sibling_index = shared_advanced::left_sibling(node_index, height);\n                    let sibling_hash: Digest<H> = new_ap_digests\n                        .get(&left_sibling_index)\n                        .copied()\n                        .unwrap_or(hash);\n                    acc_hash =\n                        Digest::<H>::from_element(H::hash_pair(&sibling_hash.data, &acc_hash.data));\n\n                    // Find parent node index\n                    node_index += 1;\n                } else {\n                    let right_sibling_index = shared_advanced::right_sibling(node_index, height);\n                    let sibling_hash: Digest<H> = new_ap_digests\n                        .get(&right_sibling_index)\n                        .copied()\n                        .unwrap_or(hash);\n                    acc_hash =\n                        Digest::<H>::from_element(H::hash_pair(&acc_hash.data, &sibling_hash.data));\n\n                    // Find parent node index\n                    node_index += 1 << (height + 1);\n                }\n\n                new_ap_digests.insert(node_index, acc_hash);\n            }\n        }\n\n        let mut modified_membership_proof_indices: Vec<usize> = vec![];\n        for (i, (membership_proof, mp_leaf_index)) in membership_proofs\n            .iter_mut()\n            .zip(membership_proof_leaf_indices)\n            .enumerate()\n        {\n            let ap_indices = membership_proof.get_node_indices(*mp_leaf_index);\n\n            // Some of the hashes in `membership_proof` might need to be updated. We can\n            // loop over `authentication_path_indices` and check if the element is contained\n            // `deducible_hashes`. If it is, then the appropriate element in\n            // `membership_proof.authentication_path` needs to be replaced with an element\n            // from `deducible_hashes`.\n            for (digest, authentication_path_indices) in membership_proof\n                .authentication_path\n                .iter_mut()\n                .zip(ap_indices.into_iter())\n            {\n                // Any number of hashes can be updated in the authentication path, since\n                // we're modifying multiple leafs in the MMR\n                // Since this function returns the indices of the modified membership proofs,\n                // a check if the new digest is actually different from the previous value is\n                // needed.\n                if new_ap_digests.contains_key(&authentication_path_indices)\n                    && *digest != new_ap_digests[&authentication_path_indices]\n                {\n                    modified_membership_proof_indices.push(i);\n                    *digest = new_ap_digests[&authentication_path_indices];\n                }\n            }\n        }\n\n        modified_membership_proof_indices.dedup();\n        modified_membership_proof_indices\n    }\n}\n\n// #[cfg(test)]\n// mod mmr_membership_proof_test {\n//     use itertools::Itertools;\n//     use proptest_arbitrary_interop::arb;\n//     use rand::random;\n//     use rand::Rng;\n//     use test_strategy::proptest;\n\n//     use super::*;\n//     use crate::math::b_field_element::BFieldElement;\n//     use crate::math::digest::Digest;\n//     use crate::math::other::random_elements;\n//     use crate::math::tip5::Tip5;\n//     use crate::mock::mmr::get_mock_ammr_from_digests;\n//     use crate::mock::mmr::MockMmr;\n//     use crate::util_types::mmr::mmr_accumulator::util::mmra_with_mps;\n//     use crate::util_types::mmr::mmr_accumulator::MmrAccumulator;\n//     use crate::util_types::mmr::mmr_trait::Mmr;\n\n//     #[test]\n//     fn equality_and_hash_test() {\n//         type H = Tip5;\n//         let mut rng = rand::rng();\n//         let some_digest: Digest = rng.random();\n//         let other_digest: Digest = rng.random();\n\n//         // Assert that both membership proofs and their digests are equal\n//         let mp0 = MmrMembershipProof::new(vec![]);\n//         let mp1 = MmrMembershipProof::new(vec![]);\n//         assert_eq!(mp0, mp1);\n//         assert_eq!(H::hash(&mp0), H::hash(&mp1));\n\n//         let mp2 = MmrMembershipProof::new(vec![some_digest]);\n//         let mp3 = MmrMembershipProof::new(vec![some_digest]);\n//         assert_eq!(mp2, mp3);\n//         assert_eq!(H::hash(&mp2), H::hash(&mp3));\n\n//         assert_ne!(mp0, mp2);\n//         assert_ne!(H::hash(&mp0), H::hash(&mp2));\n\n//         let mp4 = MmrMembershipProof::new(vec![other_digest]);\n//         assert_ne!(mp2, mp4);\n//         assert_ne!(H::hash(&mp2), H::hash(&mp4));\n\n//         let mp5 = MmrMembershipProof::new(vec![some_digest, other_digest]);\n//         let mp6 = MmrMembershipProof::new(vec![other_digest, some_digest]);\n//         assert_eq!(mp5, mp5);\n//         assert_eq!(H::hash(&mp5), H::hash(&mp5));\n//         assert_ne!(mp5, mp6);\n//         assert_ne!(H::hash(&mp5), H::hash(&mp6));\n//         assert_ne!(mp0, mp5);\n//         assert_ne!(H::hash(&mp0), H::hash(&mp5));\n//         assert_ne!(mp2, mp5);\n//         assert_ne!(H::hash(&mp2), H::hash(&mp5));\n//         assert_ne!(mp4, mp5);\n//         assert_ne!(H::hash(&mp4), H::hash(&mp5));\n//     }\n\n//     #[test]\n//     fn get_node_indices_simple_test() {\n//         const LEAF_INDEX: u64 = 4;\n//         let leaf_hashes: Vec<Digest> = random_elements(8);\n//         let archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes);\n//         let membership_proof = archival_mmr.prove_membership(LEAF_INDEX);\n//         assert_eq!(\n//             vec![9, 13, 7],\n//             membership_proof.get_node_indices(LEAF_INDEX)\n//         );\n//         assert_eq!(\n//             vec![8, 10, 14, 15],\n//             membership_proof.get_direct_path_indices(LEAF_INDEX)\n//         );\n//     }\n\n//     #[test]\n//     fn get_peak_index_simple_test() {\n//         type H = Tip5;\n\n//         let mut mmr_size = 7;\n//         let leaf_digests: Vec<Digest> = random_elements(mmr_size);\n//         let mut archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_digests);\n//         let mut expected_peak_indices_and_heights: Vec<(u64, u32)> =\n//             vec![(7, 2), (7, 2), (7, 2), (7, 2), (10, 1), (10, 1), (11, 0)];\n//         for (leaf_index, expected_peak_index) in\n//             (0..mmr_size as u64).zip(expected_peak_indices_and_heights.into_iter())\n//         {\n//             let membership_proof = archival_mmr.prove_membership(leaf_index);\n//             assert_eq!(\n//                 expected_peak_index,\n//                 membership_proof.get_peak_index_and_height(leaf_index)\n//             );\n//         }\n\n//         // Increase size to 8 and verify that the peaks are now different\n//         mmr_size = 8;\n//         let leaf_hash: Digest = H::hash(&1337u64);\n//         archival_mmr.append(leaf_hash);\n//         expected_peak_indices_and_heights = vec![(15, 3); mmr_size];\n//         for (leaf_index, expected_peak_index) in\n//             (0..mmr_size as u64).zip(expected_peak_indices_and_heights.into_iter())\n//         {\n//             let membership_proof = archival_mmr.prove_membership(leaf_index);\n//             assert_eq!(\n//                 expected_peak_index,\n//                 membership_proof.get_peak_index_and_height(leaf_index)\n//             );\n//         }\n\n//         // Increase size to 9 and verify that the peaks are now different\n//         mmr_size = 9;\n//         let another_leaf_hash: Digest = H::hash(&13337u64);\n//         archival_mmr.append(another_leaf_hash);\n//         expected_peak_indices_and_heights = vec![\n//             (15, 3),\n//             (15, 3),\n//             (15, 3),\n//             (15, 3),\n//             (15, 3),\n//             (15, 3),\n//             (15, 3),\n//             (15, 3),\n//             (16, 0),\n//         ];\n//         for (leaf_index, expected_peak_index) in\n//             (0..mmr_size as u64).zip(expected_peak_indices_and_heights.into_iter())\n//         {\n//             let membership_proof = archival_mmr.prove_membership(leaf_index);\n//             assert_eq!(\n//                 expected_peak_index,\n//                 membership_proof.get_peak_index_and_height(leaf_index)\n//             );\n//         }\n//     }\n\n//     #[proptest(cases = 10)]\n//     fn mmr_verification_if_leaf_index_is_out_of_bounds(\n//         #[strategy(0..=121usize)] leaf_count: usize,\n//     ) {\n//         let leafs: Vec<Digest> = random_elements(leaf_count);\n//         let archival_mmr: MockMmr = get_mock_ammr_from_digests(leafs.clone());\n//         let peaks = archival_mmr.peaks();\n//         for (i, leaf) in leafs.into_iter().enumerate() {\n//             let leaf_index = i as u64;\n//             let mp = archival_mmr.prove_membership(leaf_index);\n//             assert!(mp.verify(leaf_index, leaf, &peaks, leaf_count as u64));\n//             let bad_leaf_index = leaf_index + leaf_count as u64;\n//             assert!(!mp.verify(bad_leaf_index, leaf, &peaks, leaf_count as u64));\n//         }\n//     }\n\n//     #[test]\n//     fn mmr_verify_does_not_crash_on_too_short_peaks_list_unit() {\n//         let mmr_mp = MmrMembershipProof::new(vec![Default::default()]);\n//         assert!(!mmr_mp.verify(0, Default::default(), &[], 2));\n//     }\n\n//     #[proptest(cases = 10)]\n//     fn mmr_verification_with_wrong_length_of_peak_list(\n//         #[strategy(0..=1_000_000u64)] leaf_count: u64,\n//         #[strategy(0..=#leaf_count)] leaf_index: u64,\n//         #[strategy(arb())] leaf: Digest,\n//     ) {\n//         let (mmra, mps) = mmra_with_mps(leaf_count, vec![(leaf_index, leaf)]);\n//         let mp = mps[0].clone();\n\n//         let peaks_list = mmra.peaks();\n//         assert!(mp.verify(leaf_index, leaf, &peaks_list, leaf_count));\n\n//         let one_too_few = if peaks_list.is_empty() {\n//             return Ok(());\n//         } else {\n//             &peaks_list[..peaks_list.len() - 1]\n//         };\n//         assert!(!mp.verify(leaf_index, leaf, one_too_few, leaf_count));\n\n//         let one_too_many = [peaks_list.clone(), vec![Digest::default()]].concat();\n//         assert!(!mp.verify(leaf_index, leaf, &one_too_many, leaf_count));\n//     }\n\n//     #[test]\n//     fn update_batch_membership_proofs_from_leaf_mutations_new_test() {\n//         type H = Tip5;\n\n//         let total_leaf_count = 8;\n//         let leaf_hashes: Vec<Digest> = random_elements(total_leaf_count);\n//         let mut archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone());\n//         let mut membership_proofs: Vec<MmrMembershipProof> = vec![];\n//         for i in 0..total_leaf_count {\n//             let leaf_index = i as u64;\n//             membership_proofs.push(archival_mmr.prove_membership(leaf_index));\n//         }\n\n//         let new_leaf2: Digest = H::hash(&133337u64);\n//         let new_leaf3: Digest = H::hash(&12345678u64);\n//         let mutation_membership_proof_old2 = archival_mmr.prove_membership(2);\n//         let mutation_membership_proof_old3 = archival_mmr.prove_membership(3);\n//         archival_mmr.mutate_leaf_raw(2, new_leaf2);\n//         archival_mmr.mutate_leaf_raw(3, new_leaf3);\n//         for (mp_leaf_index, mp) in membership_proofs.iter_mut().enumerate() {\n//             let leaf_mutation =\n//                 LeafMutation::new(2, new_leaf2, mutation_membership_proof_old2.clone());\n//             mp.update_from_leaf_mutation(mp_leaf_index as u64, &leaf_mutation);\n//         }\n//         for (mp_leaf_index, mp) in membership_proofs.iter_mut().enumerate() {\n//             let leaf_mutation =\n//                 LeafMutation::new(3, new_leaf3, mutation_membership_proof_old3.clone());\n//             mp.update_from_leaf_mutation(mp_leaf_index as u64, &leaf_mutation);\n//         }\n\n//         let mut updated_leaf_hashes = leaf_hashes;\n//         updated_leaf_hashes[2] = new_leaf2;\n//         updated_leaf_hashes[3] = new_leaf3;\n//         for (mp_leaf_index, (mp, &leaf_hash)) in membership_proofs\n//             .iter()\n//             .zip(&updated_leaf_hashes)\n//             .enumerate()\n//         {\n//             mp.verify(\n//                 mp_leaf_index as u64,\n//                 leaf_hash,\n//                 &archival_mmr.peaks(),\n//                 archival_mmr.num_leafs(),\n//             );\n//         }\n//     }\n\n//     #[test]\n//     fn batch_update_from_batch_leaf_mutation_total_replacement_test() {\n//         let total_leaf_count = 268;\n//         let leaf_hashes_init: Vec<Digest> = random_elements(total_leaf_count);\n//         let archival_mmr_init: MockMmr = get_mock_ammr_from_digests(leaf_hashes_init);\n//         let leaf_hashes_final: Vec<Digest> = random_elements(total_leaf_count);\n//         let archival_mmr_final: MockMmr = get_mock_ammr_from_digests(leaf_hashes_final.clone());\n//         let mp_leaf_indices = 0..total_leaf_count as u64;\n//         let mut membership_proofs: Vec<MmrMembershipProof> = mp_leaf_indices\n//             .clone()\n//             .map(|leaf_index| archival_mmr_init.prove_membership(leaf_index))\n//             .collect();\n//         let membership_proofs_clone = membership_proofs.clone();\n//         let leaf_mutations: Vec<LeafMutation> = leaf_hashes_final\n//             .clone()\n//             .into_iter()\n//             .zip(mp_leaf_indices.clone())\n//             .zip(membership_proofs_clone)\n//             .map(|((leaf, leaf_index), mp)| LeafMutation::new(leaf_index, leaf, mp))\n//             .collect();\n//         let changed_values = MmrMembershipProof::batch_update_from_batch_leaf_mutation(\n//             &mut membership_proofs.iter_mut().collect::<Vec<_>>(),\n//             &mp_leaf_indices.clone().collect_vec(),\n//             leaf_mutations,\n//         );\n\n//         // This assert only works if `total_leaf_count` is an even number since there\n//         // otherwise is a membership proof that's an empty authentication path, and that\n//         // does not change\n//         assert_eq!(\n//             (0..total_leaf_count).collect::<Vec<_>>(),\n//             changed_values,\n//             \"All membership proofs must be indicated as changed\"\n//         );\n\n//         for ((mp, final_leaf_hash), leaf_index) in membership_proofs\n//             .into_iter()\n//             .zip(leaf_hashes_final)\n//             .zip(mp_leaf_indices)\n//         {\n//             assert!(mp.verify(\n//                 leaf_index,\n//                 final_leaf_hash,\n//                 &archival_mmr_final.peaks(),\n//                 total_leaf_count as u64\n//             ));\n//         }\n//     }\n\n//     #[test]\n//     fn batch_update_from_batch_leaf_mutation_test() {\n//         let total_leaf_count = 34;\n//         let mut leaf_hashes: Vec<Digest> = random_elements(total_leaf_count);\n//         let mut archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone());\n//         let mut rng = rand::rng();\n//         for modified_leaf_count in 0..=total_leaf_count {\n//             // Pick a set of membership proofs that we want to batch-update\n//             let own_membership_proof_count = rng.random_range(0..total_leaf_count);\n//             let mut all_leaf_indices: Vec<u64> = (0..total_leaf_count as u64).collect();\n//             let mut own_mp_leaf_indices = vec![];\n//             let mut own_membership_proofs: Vec<MmrMembershipProof> = vec![];\n//             for _ in 0..own_membership_proof_count {\n//                 let leaf_index =\n//                     all_leaf_indices.remove(rng.random_range(0..all_leaf_indices.len()));\n//                 own_membership_proofs.push(archival_mmr.prove_membership(leaf_index));\n//                 own_mp_leaf_indices.push(leaf_index);\n//             }\n\n//             // Set the new leafs and their associated authentication paths for the mutation\n//             // argument\n//             let new_leafs: Vec<Digest> = random_elements(modified_leaf_count);\n//             let mut all_leaf_indices_new: Vec<u64> = (0..total_leaf_count as u64).collect();\n//             let mut authentication_paths: Vec<MmrMembershipProof> = vec![];\n//             let mut mutated_leaf_leaf_indices = vec![];\n//             for _ in 0..modified_leaf_count {\n//                 let leaf_index =\n//                     all_leaf_indices_new.remove(rng.random_range(0..all_leaf_indices_new.len()));\n//                 authentication_paths.push(archival_mmr.prove_membership(leaf_index));\n//                 mutated_leaf_leaf_indices.push(leaf_index);\n//             }\n\n//             // let the magic start\n//             let original_mps = own_membership_proofs.clone();\n//             let mutation_argument: Vec<LeafMutation> = authentication_paths\n//                 .into_iter()\n//                 .zip(new_leafs.clone().into_iter())\n//                 .zip(mutated_leaf_leaf_indices.iter())\n//                 .map(|((mp, leaf), leaf_idx)| LeafMutation::new(*leaf_idx, leaf, mp))\n//                 .collect();\n//             let updated_mp_indices_0 = MmrMembershipProof::batch_update_from_batch_leaf_mutation(\n//                 &mut own_membership_proofs.iter_mut().collect::<Vec<_>>(),\n//                 &own_mp_leaf_indices,\n//                 mutation_argument.clone(),\n//             );\n\n//             // update MMR\n//             for (i, mutated_leaf_index) in mutated_leaf_leaf_indices.iter().enumerate() {\n//                 leaf_hashes[*mutated_leaf_index as usize] = new_leafs[i];\n//                 archival_mmr.mutate_leaf_raw(*mutated_leaf_index, new_leafs[i]);\n//             }\n\n//             // Let's verify that `batch_mutate_leaf_and_update_mps` from the\n//             // MmrAccumulator agrees\n//             let mut mmra: MmrAccumulator = (&archival_mmr).into();\n//             let mut mps_copy = original_mps;\n//             let updated_mp_indices_1 = mmra.batch_mutate_leaf_and_update_mps(\n//                 &mut mps_copy.iter_mut().collect::<Vec<_>>(),\n//                 &own_mp_leaf_indices,\n//                 mutation_argument,\n//             );\n//             assert_eq!(own_membership_proofs, mps_copy);\n//             assert_eq!(mmra.peaks(), archival_mmr.peaks());\n//             assert_eq!(updated_mp_indices_0, updated_mp_indices_1);\n\n//             // test that all updated membership proofs are valid under the updated MMR\n//             (0..own_membership_proof_count)\n//                 .zip(own_mp_leaf_indices)\n//                 .for_each(|(i, own_leaf_index)| {\n//                     let membership_proof = own_membership_proofs[i].clone();\n//                     assert!(membership_proof.verify(\n//                         own_leaf_index,\n//                         leaf_hashes[own_leaf_index as usize],\n//                         &archival_mmr.peaks(),\n//                         archival_mmr.num_leafs(),\n//                     ));\n//                 });\n//         }\n//     }\n\n//     #[test]\n//     fn batch_update_from_leaf_mutation_no_change_return_value_test() {\n//         // This test verifies that the return value indicating changed membership proofs is empty\n//         // even though the mutations affect the membership proofs. The reason it is empty is that\n//         // the resulting membership proof digests are unchanged, since the leaf hashes mutations\n//         // are the identity operators. In other words: the leafs don't change.\n\n//         let total_leaf_count = 8;\n//         let (leaf_hashes, mut membership_proofs) = make_populated_archival_mmr(total_leaf_count);\n//         let own_leaf_indices = (0..total_leaf_count as u64).collect_vec();\n\n//         for leaf_index in own_leaf_indices.iter() {\n//             let leaf_mutation_membership_proof = membership_proofs[*leaf_index as usize].clone();\n//             let new_leaf = leaf_hashes[*leaf_index as usize];\n//             let leaf_mutation =\n//                 LeafMutation::new(*leaf_index, new_leaf, leaf_mutation_membership_proof);\n//             let ret = MmrMembershipProof::batch_update_from_leaf_mutation(\n//                 &mut membership_proofs,\n//                 &own_leaf_indices,\n//                 leaf_mutation,\n//             );\n\n//             // the return value must be empty since no membership proof has changed\n//             assert!(ret.is_empty());\n//         }\n\n//         let membership_proofs_clone = membership_proofs.clone();\n//         let membership_proofs_init_and_new_leafs: Vec<LeafMutation> = leaf_hashes\n//             .clone()\n//             .into_iter()\n//             .zip(membership_proofs_clone)\n//             .zip(own_leaf_indices.iter())\n//             .map(|((leaf, mp), leaf_idx)| LeafMutation::new(*leaf_idx, leaf, mp))\n//             .collect();\n//         let ret = MmrMembershipProof::batch_update_from_batch_leaf_mutation(\n//             &mut membership_proofs.iter_mut().collect::<Vec<_>>(),\n//             &own_leaf_indices,\n//             membership_proofs_init_and_new_leafs.clone(),\n//         );\n\n//         // the return value must be empty since no membership proof has changed\n//         assert!(ret.is_empty());\n\n//         // Let's test the exact same for the MMR accumulator scheme\n//         let mut mmra: MmrAccumulator = MmrAccumulator::new_from_leafs(leaf_hashes);\n//         let ret_from_acc = mmra.batch_mutate_leaf_and_update_mps(\n//             &mut membership_proofs.iter_mut().collect::<Vec<_>>(),\n//             &own_leaf_indices,\n//             membership_proofs_init_and_new_leafs,\n//         );\n//         assert!(ret_from_acc.is_empty());\n//     }\n\n//     fn make_populated_archival_mmr(\n//         total_leaf_count: usize,\n//     ) -> (Vec<Digest>, Vec<MmrMembershipProof>) {\n//         let leaf_hashes: Vec<Digest> = random_elements(total_leaf_count);\n//         let archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone());\n//         let mut membership_proofs: Vec<MmrMembershipProof> = vec![];\n//         for i in 0..total_leaf_count {\n//             let leaf_index = i as u64;\n//             membership_proofs.push(archival_mmr.prove_membership(leaf_index));\n//         }\n//         (leaf_hashes, membership_proofs)\n//     }\n\n//     #[test]\n//     fn update_batch_membership_proofs_from_batch_leaf_mutations_test() {\n//         let total_leaf_count = 8;\n//         let leaf_hashes: Vec<Digest> = random_elements(total_leaf_count);\n//         let mut archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes);\n//         let modified_leaf_count: usize = 8;\n//         let mut membership_proofs: Vec<MmrMembershipProof> = vec![];\n//         let mut own_mp_leaf_indices = vec![];\n//         for i in 0..modified_leaf_count {\n//             let leaf_index = i as u64;\n//             membership_proofs.push(archival_mmr.prove_membership(leaf_index));\n//             own_mp_leaf_indices.push(leaf_index);\n//         }\n\n//         let new_leafs: Vec<Digest> = random_elements(modified_leaf_count);\n//         for i in 0..modified_leaf_count {\n//             let leaf_mutation_membership_proof = membership_proofs[i].clone();\n//             let new_leaf = new_leafs[i];\n//             let leaf_mutation =\n//                 LeafMutation::new(i as u64, new_leaf, leaf_mutation_membership_proof);\n//             MmrMembershipProof::batch_update_from_leaf_mutation(\n//                 &mut membership_proofs,\n//                 &own_mp_leaf_indices,\n//                 leaf_mutation,\n//             );\n//         }\n\n//         (0..modified_leaf_count).for_each(|i| {\n//             let leaf_index = i as u64;\n//             archival_mmr.mutate_leaf_raw(leaf_index, new_leafs[i]);\n//         });\n\n//         for (i, (mp, mp_leaf_idx)) in membership_proofs\n//             .into_iter()\n//             .zip_eq(own_mp_leaf_indices)\n//             .enumerate()\n//         {\n//             assert!(mp.verify(\n//                 mp_leaf_idx,\n//                 new_leafs[i],\n//                 &archival_mmr.peaks(),\n//                 archival_mmr.num_leafs()\n//             ));\n//         }\n//     }\n\n//     #[test]\n//     fn update_membership_proof_from_leaf_mutation_test() {\n//         type H = Tip5;\n\n//         let leaf_hashes: Vec<Digest> = random_elements(8);\n//         let new_leaf: Digest = H::hash(&133337u64);\n//         let mut accumulator_mmr = MmrAccumulator::new_from_leafs(leaf_hashes.clone());\n\n//         assert_eq!(8, accumulator_mmr.num_leafs());\n//         let mut an_archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone());\n//         let original_archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone());\n\n//         let own_leaf_leaf_index = 4;\n//         let mut membership_proof = an_archival_mmr.prove_membership(own_leaf_leaf_index);\n\n//         // 1. Update a leaf in both the accumulator MMR and in the archival MMR\n//         let old_peaks = an_archival_mmr.peaks();\n//         let mutated_leaf_leaf_index = 2;\n//         let membership_proof_for_manipulated_leaf =\n//             an_archival_mmr.prove_membership(mutated_leaf_leaf_index);\n//         an_archival_mmr.mutate_leaf_raw(mutated_leaf_leaf_index, new_leaf);\n\n//         let leaf_mutation = LeafMutation::new(\n//             mutated_leaf_leaf_index,\n//             new_leaf,\n//             membership_proof_for_manipulated_leaf,\n//         );\n//         accumulator_mmr.mutate_leaf(leaf_mutation.clone());\n//         assert_eq!(an_archival_mmr.peaks(), accumulator_mmr.peaks());\n\n//         let new_peaks_1 = an_archival_mmr.peaks();\n//         assert_ne!(\n//             new_peaks_1, old_peaks,\n//             \"Peaks must change when leaf is mutated\"\n//         );\n\n//         let real_membership_proof_from_archival =\n//             an_archival_mmr.prove_membership(own_leaf_leaf_index);\n//         let archival_peaks = an_archival_mmr.peaks();\n//         assert_eq!(\n//             new_peaks_1, archival_peaks,\n//             \"peaks returned from `get_peaks` must match that returned with membership proof\"\n//         );\n\n//         // 2. Verify that the proof fails but that the one from archival works\n//         assert!(!membership_proof.verify(\n//             own_leaf_leaf_index,\n//             new_leaf,\n//             &new_peaks_1,\n//             accumulator_mmr.num_leafs()\n//         ));\n//         assert!(membership_proof.verify(\n//             own_leaf_leaf_index,\n//             leaf_hashes[own_leaf_leaf_index as usize],\n//             &old_peaks,\n//             accumulator_mmr.num_leafs()\n//         ));\n//         assert!(real_membership_proof_from_archival.verify(\n//             own_leaf_leaf_index,\n//             leaf_hashes[own_leaf_leaf_index as usize],\n//             &new_peaks_1,\n//             accumulator_mmr.num_leafs()\n//         ));\n\n//         // 3. Update the membership proof with the membership method\n//         membership_proof.update_from_leaf_mutation(own_leaf_leaf_index, &leaf_mutation);\n\n//         // 4. Verify that the proof now succeeds\n//         assert!(membership_proof.verify(\n//             own_leaf_leaf_index,\n//             leaf_hashes[own_leaf_leaf_index as usize],\n//             &new_peaks_1,\n//             accumulator_mmr.num_leafs()\n//         ));\n\n//         // 5. test batch update from leaf update\n//         let all_leaf_indices = (0..8u64).collect_vec();\n//         for leaf_index_mutated in all_leaf_indices.iter() {\n//             let mut archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone());\n//             let mut mps: Vec<MmrMembershipProof> = vec![];\n\n//             for j in all_leaf_indices.iter() {\n//                 mps.push(original_archival_mmr.prove_membership(*j));\n//             }\n//             let original_mps = mps.clone();\n//             let leaf_mutation_membership_proof = archival_mmr.prove_membership(*leaf_index_mutated);\n//             archival_mmr.mutate_leaf_raw(*leaf_index_mutated, new_leaf);\n//             let new_peaks_2 = archival_mmr.peaks();\n//             let new_leaf_mutation = LeafMutation::new(\n//                 *leaf_index_mutated,\n//                 new_leaf,\n//                 leaf_mutation_membership_proof,\n//             );\n//             let modified = MmrMembershipProof::batch_update_from_leaf_mutation(\n//                 &mut mps,\n//                 &all_leaf_indices,\n//                 new_leaf_mutation,\n//             );\n\n//             // when updating data index i, all authentication paths are updated\n//             // *except* for element i.\n//             let mut expected_modified = all_leaf_indices.clone();\n//             expected_modified.remove(*leaf_index_mutated as usize);\n//             assert_eq!(expected_modified, modified);\n\n//             for j in all_leaf_indices.iter() {\n//                 let our_leaf = if *leaf_index_mutated == *j {\n//                     new_leaf\n//                 } else {\n//                     leaf_hashes[*j as usize]\n//                 };\n//                 assert!(mps[*j as usize].verify(*j, our_leaf, &new_peaks_2, 8));\n\n//                 // Verify that original membership proofs are no longer valid\n//                 // For size = 8, all membership proofs except the one for element 0\n//                 // will be updated since this MMR only contains a single peak.\n//                 // An updated leaf (0 in this case) retains its authentication path after\n//                 // the update. But all other leafs pointing to the same MMR will have updated\n//                 // authentication paths.\n//                 if j == leaf_index_mutated {\n//                     assert!(\n//                         original_mps[*j as usize].verify(*j, our_leaf, &new_peaks_2, 8),\n//                         \"original membership proof must be valid when j = i\"\n//                     );\n//                 } else {\n//                     assert!(\n//                         !original_mps[*j as usize].verify(*j, our_leaf, &new_peaks_2, 8),\n//                         \"original membership proof must be invalid when j != i\"\n//                     );\n//                 }\n//             }\n//         }\n//     }\n\n//     #[test]\n//     fn update_membership_proof_from_leaf_mutation_big_test() {\n//         // Build MMR from leaf count 0 to 22, and loop through *each*\n//         // leaf index for MMR, modifying its membership proof with a\n//         // leaf update.\n//         for leaf_count in 0..=22 {\n//             let leaf_hashes: Vec<Digest> = random_elements(leaf_count);\n//             let new_leaf: Digest = random();\n//             let archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone());\n\n//             // Loop over all leaf indices that we want to modify in the MMR\n//             for i in 0..leaf_count {\n//                 let leaf_index_i = i as u64;\n//                 let leaf_mutation_membership_proof = archival_mmr.prove_membership(leaf_index_i);\n//                 let mut modified_archival_mmr: MockMmr =\n//                     get_mock_ammr_from_digests(leaf_hashes.clone());\n//                 modified_archival_mmr.mutate_leaf_raw(leaf_index_i, new_leaf);\n//                 let new_peaks = modified_archival_mmr.peaks();\n\n//                 // Loop over all leaf indices want a membership proof of, for modification\n//                 for j in 0..leaf_count {\n//                     let leaf_index_j = j as u64;\n//                     let mut membership_proof: MmrMembershipProof =\n//                         archival_mmr.prove_membership(leaf_index_j);\n//                     let original_membership_roof = membership_proof.clone();\n//                     let leaf_mutation = LeafMutation::new(\n//                         leaf_index_i,\n//                         new_leaf,\n//                         leaf_mutation_membership_proof.clone(),\n//                     );\n//                     let membership_proof_was_mutated =\n//                         membership_proof.update_from_leaf_mutation(leaf_index_j, &leaf_mutation);\n//                     let our_leaf = if leaf_index_i == leaf_index_j {\n//                         new_leaf\n//                     } else {\n//                         leaf_hashes[leaf_index_j as usize]\n//                     };\n//                     assert!(membership_proof.verify(\n//                         leaf_index_j,\n//                         our_leaf,\n//                         &new_peaks,\n//                         leaf_count as u64\n//                     ));\n\n//                     // If membership proof was mutated, the original proof must fail\n//                     if membership_proof_was_mutated {\n//                         assert!(!original_membership_roof.verify(\n//                             leaf_index_j,\n//                             our_leaf,\n//                             &new_peaks,\n//                             leaf_count as u64\n//                         ));\n//                     }\n\n//                     // Verify that modified membership proof matches that which can be\n//                     // fetched from the modified archival MMR\n//                     assert_eq!(\n//                         modified_archival_mmr.prove_membership(leaf_index_j),\n//                         membership_proof\n//                     );\n//                 }\n//             }\n//         }\n//     }\n\n//     #[test]\n//     fn update_membership_proof_from_append_simple_with_bit_mmra() {\n//         let original_leaf_count = (1 << 35) + (1 << 7) - 1;\n\n//         let specified_count = 40;\n//         let mut rng = rand::rng();\n//         let mut specified_indices: HashSet<u64> = HashSet::default();\n//         for _ in 0..specified_count {\n//             specified_indices.insert(rng.random_range(0..original_leaf_count));\n//         }\n\n//         // Ensure that at least *one* MP will be mutated upon insertion of a new leaf\n//         specified_indices.insert(original_leaf_count - 1);\n\n//         let collected_values = specified_indices.len();\n//         let specified_leafs: Vec<(u64, Digest)> = specified_indices\n//             .clone()\n//             .into_iter()\n//             .zip_eq(random_elements(collected_values))\n//             .collect_vec();\n//         let (mut mmra, mut mps) = mmra_with_mps(original_leaf_count, specified_leafs.clone());\n\n//         let new_leaf: Digest = random();\n//         let old_peaks = mmra.peaks();\n//         mmra.append(new_leaf);\n//         assert!(!mps\n//             .iter()\n//             .zip_eq(specified_leafs.iter())\n//             .all(|(mp, (leaf_index, leaf))| mp.verify(\n//                 *leaf_index,\n//                 *leaf,\n//                 &mmra.peaks(),\n//                 mmra.num_leafs()\n//             )));\n//         MmrMembershipProof::batch_update_from_append(\n//             &mut mps.iter_mut().collect_vec(),\n//             &specified_indices.into_iter().collect_vec(),\n//             original_leaf_count,\n//             new_leaf,\n//             &old_peaks,\n//         );\n\n//         assert!(mps\n//             .iter()\n//             .zip_eq(specified_leafs.iter())\n//             .all(|(mp, (leaf_index, leaf))| mp.verify(\n//                 *leaf_index,\n//                 *leaf,\n//                 &mmra.peaks(),\n//                 mmra.num_leafs()\n//             )));\n//     }\n\n//     #[test]\n//     fn update_membership_proof_from_append_simple() {\n//         type H = Tip5;\n\n//         let leaf_count = 7;\n//         let leaf_hashes: Vec<Digest> = random_elements(leaf_count);\n//         let new_leaf: Digest = H::hash(&133337u64);\n//         let archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone());\n\n//         for i in 0..leaf_count {\n//             let leaf_index = i as u64;\n//             let mut membership_proof = archival_mmr.prove_membership(leaf_index);\n//             let old_peaks = archival_mmr.peaks();\n//             let mut appended_archival_mmr: MockMmr =\n//                 get_mock_ammr_from_digests(leaf_hashes.clone());\n//             // let mut appended_archival_mmr = archival_mmr.clone();\n//             appended_archival_mmr.append(new_leaf);\n//             let new_peaks = appended_archival_mmr.peaks();\n\n//             // Verify that membership proof fails before update and succeeds after\n//             // for the case of leaf_count 7, **all** membership proofs have to be\n//             // updated to be valid, so they should all fail prior to the update.\n//             let last_leaf_index = leaf_count as u64;\n//             assert!(!membership_proof.verify(\n//                 leaf_index,\n//                 leaf_hashes[leaf_index as usize],\n//                 &new_peaks,\n//                 last_leaf_index + 1\n//             ));\n//             membership_proof.update_from_append(leaf_index, last_leaf_index, new_leaf, &old_peaks);\n//             assert!(membership_proof.verify(\n//                 leaf_index,\n//                 leaf_hashes[leaf_index as usize],\n//                 &new_peaks,\n//                 last_leaf_index + 1\n//             ));\n\n//             // Verify that the appended Arhival MMR produces the same membership proof\n//             // as the one we got by updating the old membership proof\n//             assert_eq!(\n//                 appended_archival_mmr.prove_membership(leaf_index),\n//                 membership_proof\n//             );\n//         }\n//     }\n\n//     #[test]\n//     fn update_membership_proof_from_append_big_tests() {\n//         for leaf_count in 0..68u64 {\n//             // 1. Build a MockMmr with a variable amount of leafs\n//             let leaf_digests: Vec<Digest> = random_elements(leaf_count as usize);\n//             let new_leaf_digest: Digest = random();\n//             let archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_digests.clone());\n\n//             // For every valid data index\n//             for leaf_index in 0..leaf_count {\n//                 // 2. Create an equivalent MockMmr, but with `new_leaf_digest` appended\n//                 let mut appended_archival_mmr: MockMmr =\n//                     get_mock_ammr_from_digests(leaf_digests.clone());\n//                 appended_archival_mmr.append(new_leaf_digest);\n//                 let new_peaks = appended_archival_mmr.peaks();\n\n//                 // 3. Create membership proof for MockMmr from before `new_leaf_digest`\n//                 let original_membership_proof = archival_mmr.prove_membership(leaf_index);\n\n//                 // 4. Update (a copy of) membership proof and verify it\n//                 let mut updated_membership_proof = original_membership_proof.clone();\n//                 let is_updated_membership_proof_changed = updated_membership_proof\n//                     .update_from_append(\n//                         leaf_index,\n//                         leaf_count,\n//                         new_leaf_digest,\n//                         &archival_mmr.peaks(),\n//                     );\n\n//                 let updated_membership_proof_verifies = updated_membership_proof.verify(\n//                     leaf_index,\n//                     leaf_digests[leaf_index as usize],\n//                     &new_peaks,\n//                     leaf_count + 1,\n//                 );\n//                 assert!(updated_membership_proof_verifies);\n\n//                 // 5. Assert that original membership proof fails iff a change was indicated\n//                 let original_membership_proof_verifies = original_membership_proof.verify(\n//                     leaf_index,\n//                     leaf_digests[leaf_index as usize],\n//                     &new_peaks,\n//                     leaf_count + 1,\n//                 );\n//                 if is_updated_membership_proof_changed {\n//                     assert!(!original_membership_proof_verifies,);\n//                 } else {\n//                     assert!(original_membership_proof_verifies,);\n//                 }\n\n//                 // 6. Assert that updating an old membership proof is equivalent to getting a\n//                 // proof for an appended MockMmr\n//                 assert_eq!(\n//                     updated_membership_proof,\n//                     appended_archival_mmr.prove_membership(leaf_index)\n//                 );\n//             }\n\n//             // 7. Test batch update of membership proofs...\n//             let old_peaks = archival_mmr.peaks();\n//             let mp_leaf_indices = (0..leaf_count).collect_vec();\n//             let original_membership_proofs = mp_leaf_indices\n//                 .iter()\n//                 .map(|leaf_index| archival_mmr.prove_membership(*leaf_index))\n//                 .collect_vec();\n\n//             // ...first by asserting that all leafs are members...\n//             for (membership_proof, leaf_index) in original_membership_proofs\n//                 .iter()\n//                 .zip(mp_leaf_indices.iter())\n//             {\n//                 let membership_proof_verifies_before_batch_update = membership_proof.verify(\n//                     *leaf_index,\n//                     leaf_digests[*leaf_index as usize],\n//                     &old_peaks,\n//                     leaf_count,\n//                 );\n//                 assert!(membership_proof_verifies_before_batch_update);\n//             }\n\n//             // ...and then create an equivalent MockMmr, but with `new_leaf_digest` appended...\n//             let mut appended_archival_mmr: MockMmr =\n//                 get_mock_ammr_from_digests(leaf_digests.clone());\n//             appended_archival_mmr.append(new_leaf_digest);\n//             let new_peaks = appended_archival_mmr.peaks();\n//             let mut mutated_membership_proofs = original_membership_proofs.clone();\n\n//             // ...run batch_update_from_append()...\n//             let indices_of_mutated_membership_proofs: Vec<usize> =\n//                 MmrMembershipProof::batch_update_from_append(\n//                     &mut mutated_membership_proofs.iter_mut().collect_vec(),\n//                     &mp_leaf_indices,\n//                     leaf_count,\n//                     new_leaf_digest,\n//                     &old_peaks,\n//                 );\n\n//             // ...and assert that mutated membership proofs with new peaks verify!\n//             for (leaf_index, mutated_membership_proof) in\n//                 mutated_membership_proofs.iter().enumerate()\n//             {\n//                 let mutated_membership_proof_verifies_with_new_peaks = mutated_membership_proof\n//                     .verify(\n//                         leaf_index as u64,\n//                         leaf_digests[leaf_index],\n//                         &new_peaks,\n//                         leaf_count + 1,\n//                     );\n//                 assert!(mutated_membership_proof_verifies_with_new_peaks);\n//             }\n\n//             // Finally, assert that original membership proofs only work if they're not mutated.\n//             for (leaf_index, original_membership_proof) in\n//                 original_membership_proofs.iter().enumerate()\n//             {\n//                 let original_membership_proof_verifies = original_membership_proof.verify(\n//                     leaf_index as u64,\n//                     leaf_digests[leaf_index],\n//                     &new_peaks,\n//                     leaf_count + 1,\n//                 );\n\n//                 if indices_of_mutated_membership_proofs.contains(&leaf_index) {\n//                     assert!(!original_membership_proof_verifies)\n//                 } else {\n//                     assert!(original_membership_proof_verifies);\n//                 }\n//             }\n//         }\n//     }\n\n//     #[test]\n//     fn update_membership_proof_from_append_big_tip5() {\n//         type H = Tip5;\n\n//         // Build MMR from leaf count 0 to 9, and loop through *each*\n//         // leaf index for MMR, modifying its membership proof with an\n//         // append update.\n//         for leaf_count in 0..9 {\n//             let leaf_hashes: Vec<Digest> = random_elements(leaf_count);\n//             let archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone());\n//             let new_leaf = H::hash(&BFieldElement::new(13333337));\n//             for i in 0..leaf_count {\n//                 let leaf_index = i as u64;\n//                 let leaf_count_index = leaf_count as u64;\n//                 let original_membership_proof = archival_mmr.prove_membership(leaf_index);\n//                 let mut appended_archival_mmr: MockMmr =\n//                     get_mock_ammr_from_digests(leaf_hashes.clone());\n//                 appended_archival_mmr.append(new_leaf);\n//                 let new_peaks = appended_archival_mmr.peaks();\n\n//                 // Update membership proof and verify that it succeeds\n//                 let mut membership_proof_mutated = original_membership_proof.clone();\n//                 let mutated = membership_proof_mutated.update_from_append(\n//                     leaf_index,\n//                     leaf_count_index,\n//                     new_leaf,\n//                     &archival_mmr.peaks(),\n//                 );\n//                 assert!(membership_proof_mutated.verify(\n//                     leaf_index,\n//                     leaf_hashes[i],\n//                     &new_peaks,\n//                     leaf_count_index + 1\n//                 ));\n\n//                 // If membership proof mutated, then the old proof must be invalid\n//                 if mutated {\n//                     assert!(!original_membership_proof.verify(\n//                         leaf_index,\n//                         leaf_hashes[i],\n//                         &new_peaks,\n//                         leaf_count_index + 1\n//                     ));\n//                 }\n\n//                 // Verify that the appended Arhival MMR produces the same membership proof\n//                 // as the one we got by updating the old membership proof\n//                 assert_eq!(\n//                     appended_archival_mmr.prove_membership(leaf_index),\n//                     membership_proof_mutated\n//                 );\n//             }\n//         }\n//     }\n\n//     #[test]\n//     fn serialization_test() {\n//         // You could argue that this test doesn't belong here, as it tests the behavior of\n//         // an imported library. I included it here, though, because the setup seems a bit clumsy\n//         // to me so far.\n\n//         let leaf_index = 1;\n//         let leaf_count = 3;\n//         let leaf_hashes: Vec<Digest> = random_elements(leaf_count);\n//         let archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone());\n//         let mp: MmrMembershipProof = archival_mmr.prove_membership(1);\n//         let json = serde_json::to_string(&mp).unwrap();\n//         let s_back = serde_json::from_str::<MmrMembershipProof>(&json).unwrap();\n//         assert!(s_back.verify(\n//             leaf_index,\n//             leaf_hashes[leaf_index as usize],\n//             &archival_mmr.peaks(),\n//             leaf_count as u64\n//         ));\n//     }\n\n//     #[test]\n//     fn test_decode_mmr_membership_proof() {\n//         let mut rng = rand::rng();\n//         for _ in 0..100 {\n//             let num_leafs = 2 + rng.random_range(0..1000);\n//             let leaf_hashes = random_elements(num_leafs);\n//             let archival_mmr = get_mock_ammr_from_digests(leaf_hashes);\n//             let leaf_index = rng.random_range(0..num_leafs) as u64;\n//             let mp = archival_mmr.prove_membership(leaf_index);\n//             let mp_encoded = mp.encode();\n//             let mp_decoded = *MmrMembershipProof::decode(&mp_encoded).unwrap();\n//             assert_eq!(mp, mp_decoded);\n//         }\n//     }\n\n//     #[test]\n//     #[should_panic(expected = \"Lists must have same length. Got: 0 and 3\")]\n//     fn test_diff_len_lists_batch_update_from_append() {\n//         // Checks that batch_update_from_append() panics when passed differing length lists\n\n//         // different length lists\n//         let mut mock_membership_proofs: Vec<MmrMembershipProof> = vec![];\n//         let mock_membership_proof_leaf_indices: Vec<u64> = vec![0, 1, 2];\n\n//         // This should panic due to mismatched lengths\n//         MmrMembershipProof::batch_update_from_append(\n//             &mut mock_membership_proofs.iter_mut().collect_vec(),\n//             &mock_membership_proof_leaf_indices,\n//             3,\n//             random(),\n//             &[],\n//         );\n//     }\n\n//     #[test]\n//     #[should_panic(expected = \"Lists must have same length. Got: 0 and 3\")]\n//     fn test_diff_len_lists_batch_update_from_leaf_mutation() {\n//         // Checks that batch_update_from_leaf_mutation() panics when passed differing length lists\n\n//         // differing length lists\n//         let mut mock_membership_proofs: Vec<MmrMembershipProof> = vec![];\n//         let mock_membership_proof_leaf_indices: Vec<u64> = vec![0, 1, 2];\n\n//         // other mock input params\n//         let membership_proof = MmrMembershipProof::new(vec![random()]);\n//         let mock_leaf_mutation = LeafMutation::new(0, random(), membership_proof);\n\n//         // This should panic due to mismatched lengths\n//         MmrMembershipProof::batch_update_from_leaf_mutation(\n//             &mut mock_membership_proofs,\n//             &mock_membership_proof_leaf_indices,\n//             mock_leaf_mutation,\n//         );\n//     }\n\n//     #[test]\n//     #[should_panic(expected = \"Lists must have same length. Got: 0 and 3\")]\n//     fn test_diff_len_lists_batch_update_from_batch_leaf_mutation() {\n//         // Checks that batch_update_from_batch_leaf_mutation() panics when passed\n//         // differing length lists\n\n//         // differing length lists\n//         let mut mock_membership_proofs: Vec<MmrMembershipProof> = vec![];\n//         let mock_membership_proof_leaf_indices: Vec<u64> = vec![0, 1, 2];\n\n//         // other mock input params\n//         let membership_proof = MmrMembershipProof::new(vec![random()]);\n//         let mock_leaf_mutation = LeafMutation::new(0, random(), membership_proof);\n//         let mock_leaf_mutations = vec![mock_leaf_mutation; 3];\n\n//         // This should panic due to mismatched lengths\n//         MmrMembershipProof::batch_update_from_batch_leaf_mutation(\n//             &mut mock_membership_proofs.iter_mut().collect::<Vec<_>>(),\n//             &mock_membership_proof_leaf_indices,\n//             mock_leaf_mutations,\n//         );\n//     }\n// }\n"
  },
  {
    "path": "tools/garaga_rs/src/crypto/mmr/mmr_successor_proof.rs",
    "content": "// use arbitrary::Arbitrary;\n\nuse super::mmr_accumulator::MmrAccumulator;\nuse super::mmr_trait::Mmr;\nuse super::shared_basic::leaf_index_to_mt_index_and_peak_index;\n// use crate::error::USIZE_TO_U64_ERR;\n// use crate::prelude::*;\nuse super::super::digest::{Digest, HashFunction};\nuse crate::crypto::merkle_tree::MerkleTree;\n\n/// Asserts that one [MMR Accumulator] is the descendant of another, *i.e.*,\n/// that the second can be obtained by appending a set of leafs to the first. It\n/// consists of an authentication path connecting the relevant old peaks to the\n/// new peaks.\n///\n/// [MMR Accumulator]: MmrAccumulator\n#[derive(Debug, Clone)]\npub struct MmrSuccessorProof<H: HashFunction> {\n    pub paths: Vec<Digest<H>>,\n}\n\nimpl<H: HashFunction> MmrSuccessorProof<H> {\n    /// Compute a new `MmrSuccessorProof` given the starting MMR accumulator (MMRA)\n    /// and a list of digests to be appended.\n    ///\n    /// # Panics\n    ///\n    /// This function will panic if the number of leafs in the MMRA is greater than\n    /// or equal to 2^63.\n    ///\n    /// This function may panic if the passed-in MMRA is inconsistent, that is, has\n    /// fewer peaks than is possible for its claimed number of leafs.\n    //\n    // For an introduction to the inner workings of this function, see\n    // [`Self::verify_internal`].\n    pub fn new_from_batch_append(mmra: &MmrAccumulator<H>, new_leafs: &[Digest<H>]) -> Self {\n        if mmra.num_leafs() == 0 {\n            // any MMR is a successor to the empty MMR – nothing to check, nothing to prove\n            return Self { paths: vec![] };\n        }\n\n        let height_of_lowest_peak = mmra.num_leafs().trailing_zeros();\n        let num_leafs_in_lowest_peak = 1 << height_of_lowest_peak;\n        if new_leafs.len() < num_leafs_in_lowest_peak {\n            // the new leafs do not affect the old peaks\n            return Self { paths: vec![] };\n        }\n\n        let leafs_in_initial_right_tree = &new_leafs[..num_leafs_in_lowest_peak];\n        let initial_right_tree = MerkleTree::par_new(leafs_in_initial_right_tree)\n            .expect(\"internal error: should be able to build Merkle tree\");\n\n        let num_total_leafs =\n            mmra.num_leafs() + u64::try_from(new_leafs.len()).expect(\"USIZE_TO_U64_ERR\");\n        let first_new_leaf_index = mmra.num_leafs();\n        let (mut merkle_tree_index, _) =\n            leaf_index_to_mt_index_and_peak_index(first_new_leaf_index, num_total_leafs);\n        let height_of_new_peak = merkle_tree_index.ilog2();\n        merkle_tree_index >>= height_of_lowest_peak;\n\n        let mut current_node = initial_right_tree.root();\n        let mut paths = vec![current_node];\n        let mut old_peaks = mmra.peaks().into_iter();\n        let mut first_unused_new_leaf_idx = num_leafs_in_lowest_peak;\n\n        let merkle_tree_root_index =\n            u64::try_from(MerkleTree::<H>::ROOT_INDEX).expect(\"USIZE_TO_U64_ERR\");\n\n        while merkle_tree_index > merkle_tree_root_index {\n            let current_node_is_left_sibling = merkle_tree_index % 2 == 0;\n            current_node = if current_node_is_left_sibling {\n                let current_height = height_of_new_peak - merkle_tree_index.ilog2();\n                let num_leafs_in_right_tree = 1 << current_height;\n                let indices_of_leafs_in_right_tree =\n                    first_unused_new_leaf_idx..first_unused_new_leaf_idx + num_leafs_in_right_tree;\n                let leafs_in_right_tree = &new_leafs[indices_of_leafs_in_right_tree];\n                let right_tree = MerkleTree::par_new(leafs_in_right_tree)\n                    .expect(\"internal error: should be able to build Merkle tree\");\n                first_unused_new_leaf_idx += num_leafs_in_right_tree;\n\n                paths.push(right_tree.root());\n                Digest::<H>::from_element(H::hash_pair(\n                    &current_node.to_element(),\n                    &right_tree.root().to_element(),\n                ))\n            } else {\n                let left_sibling = old_peaks\n                    .next_back()\n                    .expect(\"Merkle Mountain Range Accumulator should be consistent\");\n                Digest::<H>::from_element(H::hash_pair(\n                    &left_sibling.to_element(),\n                    &current_node.to_element(),\n                ))\n            };\n            merkle_tree_index /= 2;\n        }\n        debug_assert_eq!(merkle_tree_root_index, merkle_tree_index);\n\n        Self { paths }\n    }\n\n    /// Verify that the `old` [`MmrAccumulator`] is a predecessor of the `new` one.\n    pub fn verify(&self, old: &MmrAccumulator<H>, new: &MmrAccumulator<H>) -> bool {\n        self.verify_internal(old, new).is_ok()\n    }\n\n    /// Like [`Self::verify`], but with failure reasons instead of a `bool` to\n    /// increase testability.\n    //\n    // An explanation of the algorithm follows. As an example, take the following\n    // Merkle Mountain Range with 42 = 101010₂ leafs. Peaks are marked with `·`s.\n    //\n    //                                ·\n    //                ╭───────────────┴───────────────╮\n    //        ╭───────┴───────╮               ╭───────┴───────╮               ·\n    //    ╭───┴───╮       ╭───┴───╮       ╭───┴───╮       ╭───┴───╮       ╭───┴───╮\n    //  ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ·\n    // ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮\n    //\n    // Adding 8 leafs to it results in the following new Merkle Mountain Range with\n    // 50 = 110010₂ leafs. The addition is drawn boxy and bold. The elements of the\n    // required authentication path are marked with `x`es. The new peaks are marked\n    // with `○`. The one peak that's both old and new is marked `⊙`.\n    //\n    //             ⊙\n    //   ╭─────────┴─────────╮                               ○\n    // ┄┄┴┄┄         ╭───────┴───────╮               ·━━━━━━━┻━━━━━━━┓\n    //           ╭───┴───╮       ╭───┴───╮       ╭───┴───╮       ┏━━━┻━━━x\n    //         ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ·━┻━x   ┏━┻━┓   ○\n    //        ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ┏┻┓ ┏┻┓ ┏┻┓ ┏┻┓\n    //\n    // The new MMR Accumulator (the one with 50 leafs) is a successor to the old\n    // MMR Accumulator (the one with 42 leafs) if all of the following are true:\n    // - Both MMR Accumulators are self-consistent.\n    // - The new MMR Accumulator has more or equal the number of leafs as the old\n    //   one.\n    // - All “shared peaks” are identical. In the example, only the highest peak is\n    //   shared.\n    // - The first unshared peak in the new MMR Accumulator is a Merkle tree that\n    //   contains all remaining old peaks. In the example, the second new peak\n    //   contains the second and third old peaks.\n    //\n    // All subsequent new peaks are irrelevant for verification. In the example,\n    // this is only the smallest peak of the new MMR Accumulator.\n    //\n    // To re-compute the first unshared peak in the new MMR Accumulator,\n    // - start the Merkle tree authentication from the correct height, that is, from\n    //   the height of the smallest old peak;\n    // - for any left sibling, use an old peak; and\n    // - for any right sibling, use an element of the authentication path.\n    fn verify_internal(\n        &self,\n        old: &MmrAccumulator<H>,\n        new: &MmrAccumulator<H>,\n    ) -> Result<(), Error> {\n        if !old.is_consistent() {\n            return Err(Error::InconsistentOldMmr);\n        }\n\n        if !new.is_consistent() {\n            return Err(Error::InconsistentNewMmr);\n        }\n\n        let verify_auth_path_is_empty = || {\n            if self.paths.is_empty() {\n                Ok(())\n            } else {\n                Err(Error::AuthenticationPathTooLong)\n            }\n        };\n\n        match old.num_leafs() {\n            0 => return verify_auth_path_is_empty(), // any MMR is a successor to the empty MMR\n            n if n < new.num_leafs() => (),          // nominal case, continued below\n            n if n == new.num_leafs() => {\n                // treated separately to simplify logic in nominal case\n                return if old.peaks() == new.peaks() {\n                    verify_auth_path_is_empty()\n                } else {\n                    Err(Error::DifferentSharedPeak)\n                };\n            }\n            _ => return Err(Error::OldHasMoreLeafsThanNew),\n        };\n\n        let index_of_first_unverified_leaf = old.num_leafs();\n        let (merkle_tree_index, num_unchanged_peaks) =\n            leaf_index_to_mt_index_and_peak_index(index_of_first_unverified_leaf, new.num_leafs());\n\n        let mut old_peaks = old.peaks().into_iter();\n        let mut new_peaks = new.peaks().into_iter();\n        for _ in 0..num_unchanged_peaks {\n            let old_peak = old_peaks.next().ok_or(Error::MissingOldPeak)?;\n            let new_peak = new_peaks.next().ok_or(Error::MissingNewPeak)?;\n            if old_peak != new_peak {\n                return Err(Error::DifferentSharedPeak);\n            }\n        }\n\n        let height_of_lowest_old_peak = old.num_leafs().trailing_zeros();\n        let num_leafs_in_lowest_old_peak = 1 << height_of_lowest_old_peak;\n        let num_new_leafs = new.num_leafs() - old.num_leafs();\n        if num_new_leafs < num_leafs_in_lowest_old_peak {\n            // the new leafs don't affect the old peaks\n            return verify_auth_path_is_empty();\n        }\n\n        let mut auth_path = self.paths.iter();\n        let mut current_node = *auth_path.next().ok_or(Error::AuthenticationPathTooShort)?;\n        let mut merkle_tree_index = merkle_tree_index >> height_of_lowest_old_peak;\n\n        let merkle_tree_root_index =\n            u64::try_from(MerkleTree::<H>::ROOT_INDEX).expect(\"USIZE_TO_U64_ERR\");\n        while merkle_tree_index > merkle_tree_root_index {\n            let current_node_is_left_sibling = merkle_tree_index % 2 == 0;\n            current_node = if current_node_is_left_sibling {\n                let &right_sibling = auth_path.next().ok_or(Error::AuthenticationPathTooShort)?;\n                Digest::<H>::from_element(H::hash_pair(\n                    &current_node.to_element(),\n                    &right_sibling.to_element(),\n                ))\n            } else {\n                let left_sibling = old_peaks.next_back().ok_or(Error::MissingOldPeak)?;\n                Digest::<H>::from_element(H::hash_pair(\n                    &left_sibling.to_element(),\n                    &current_node.to_element(),\n                ))\n            };\n            merkle_tree_index /= 2;\n        }\n\n        debug_assert_eq!(0, old_peaks.len());\n        if auth_path.len() > 0 {\n            return Err(Error::AuthenticationPathTooLong);\n        }\n\n        let first_unshared_peak = new_peaks.next().ok_or(Error::MissingNewPeak)?;\n        if current_node != first_unshared_peak {\n            return Err(Error::DifferentUnsharedPeak);\n        }\n\n        Ok(())\n    }\n}\n\n#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, thiserror::Error)] // , Arbitrary)]\nenum Error {\n    #[error(\"the new MMRA must not take away any leafs\")]\n    OldHasMoreLeafsThanNew,\n\n    #[error(\"the old MMRA must be self-consistent\")]\n    InconsistentOldMmr,\n\n    #[error(\"the new MMRA must be self-consistent\")]\n    InconsistentNewMmr,\n\n    #[error(\"the old MMRA has too few peaks – is it consistent?\")]\n    MissingOldPeak,\n\n    #[error(\"the new MMRA has too few peaks – is it consistent?\")]\n    MissingNewPeak,\n\n    #[error(\"the authentication path contains too few elements\")]\n    AuthenticationPathTooShort,\n\n    #[error(\"the authentication path contains spurious elements\")]\n    AuthenticationPathTooLong,\n\n    #[error(\"a peak that should be shared between old and new MMRA is unequal\")]\n    DifferentSharedPeak,\n\n    #[error(\"the first peak that's unshared between old and new MMRA is not as claimed\")]\n    DifferentUnsharedPeak,\n}\n\n// #[cfg(test)]\n// mod test {\n//     use std::ops::Range;\n\n//     use itertools::Itertools;\n//     use proptest::prelude::*;\n//     use proptest_arbitrary_interop::arb;\n//     use test_strategy::proptest;\n\n//     use super::*;\n//     use crate::math::digest::digest_tests::DigestCorruptor;\n\n//     /// A type exclusive to testing. Simplifies construction and verification of\n//     /// [`MmrSuccessorProof`]s.\n//     #[derive(Debug, Clone)]\n//     struct MmrSuccessorRelation {\n//         old: MmrAccumulator,\n//         new: MmrAccumulator,\n//         proof: MmrSuccessorProof,\n//     }\n\n//     impl MmrSuccessorRelation {\n//         fn new(old_leafs: Vec<Digest>, new_leafs: Vec<Digest>) -> Self {\n//             let old = MmrAccumulator::new_from_leafs(old_leafs.clone());\n//             let proof = MmrSuccessorProof::new_from_batch_append(&old, &new_leafs);\n//             let new = MmrAccumulator::new_from_leafs([old_leafs, new_leafs].concat());\n\n//             Self { old, new, proof }\n//         }\n\n//         fn new_with_numbered_leafs(num_old_leafs: u64, num_new_leafs: u64) -> Self {\n//             let numbered_leafs = |r: Range<_>| r.map(|leaf| Tip5::hash(&leaf)).collect();\n\n//             let old_leafs = numbered_leafs(0..num_old_leafs);\n//             let new_leafs = numbered_leafs(num_old_leafs..num_old_leafs + num_new_leafs);\n\n//             Self::new(old_leafs, new_leafs)\n//         }\n\n//         fn verify(&self) -> Result<(), Error> {\n//             self.proof.verify_internal(&self.old, &self.new)\n//         }\n//     }\n\n//     impl<'a> arbitrary::Arbitrary<'a> for MmrSuccessorRelation {\n//         fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result<Self> {\n//             let mut leafs = |upper_bound| -> Result<Vec<_>, _> {\n//                 let num_leafs = u.int_in_range(0..=upper_bound)?;\n//                 (0..num_leafs).map(|_| u.arbitrary()).collect()\n//             };\n\n//             Ok(Self::new(leafs(1 << 8)?, leafs(1 << 8)?))\n//         }\n//     }\n\n//     impl proptest::arbitrary::Arbitrary for MmrSuccessorRelation {\n//         type Parameters = ();\n\n//         fn arbitrary_with(_: Self::Parameters) -> Self::Strategy {\n//             arb().boxed()\n//         }\n\n//         type Strategy = BoxedStrategy<Self>;\n//     }\n\n//     #[test]\n//     fn append_nothing_to_empty_mmra() {\n//         let relation = MmrSuccessorRelation::new_with_numbered_leafs(0, 0);\n//         assert_eq!(0, relation.proof.paths.len());\n//         relation.verify().unwrap();\n//     }\n\n//     #[test]\n//     fn append_one_thing_to_empty_mmra() {\n//         let relation = MmrSuccessorRelation::new_with_numbered_leafs(0, 1);\n//         assert_eq!(0, relation.proof.paths.len());\n//         relation.verify().unwrap();\n//     }\n\n//     #[test]\n//     fn append_leafs_without_influence_on_existing_peaks() {\n//         let relation = MmrSuccessorRelation::new_with_numbered_leafs(1 << 3, 3);\n//         assert_eq!(0, relation.proof.paths.len());\n//         relation.verify().unwrap();\n//     }\n\n//     /// 42 = 101010₂ gives nice gaps between peaks, the additional 8 leafs fill some\n//     /// of them nicely and adds a non-trivial new peak that's irrelevant for\n//     /// verification.\n//     ///\n//     /// See the figure below, where the old Merkle Mountain Range is drawn rounded\n//     /// and thin, the addition boxy and bold. The elements of the authentication\n//     /// path are marked with `x`es, the “old peaks” required for authentication are\n//     /// marked with `·`s.\n//     ///\n//     /// ```markdown\n//     ///   ╭─────────┴─────────╮\n//     /// ┄┄┴┄┄         ╭───────┴───────╮               ·━━━━━━━┻━━━━━━━┓\n//     ///           ╭───┴───╮       ╭───┴───╮       ╭───┴───╮       ┏━━━┻━━━x\n//     ///         ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ╭─┴─╮   ·━┻━x   ┏━┻━┓\n//     ///        ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ╭┴╮ ┏┻┓ ┏┻┓ ┏┻┓ ┏┻┓\n//     /// ```\n//     #[test]\n//     fn append_8_leafs_to_mmra_with_42_leafs() {\n//         let relation = MmrSuccessorRelation::new_with_numbered_leafs(42, 8);\n//         assert_eq!(2, relation.proof.paths.len());\n\n//         let first_merkle_tree_leafs = [42_u64, 43].map(|i| Tip5::hash(&i));\n//         let first_merkle_tree = MerkleTree::par_new(&first_merkle_tree_leafs).unwrap();\n//         assert_eq!(first_merkle_tree.root(), relation.proof.paths[0]);\n\n//         let second_merkle_tree_leafs = [44_u64, 45, 46, 47].map(|i| Tip5::hash(&i));\n//         let second_merkle_tree = MerkleTree::par_new(&second_merkle_tree_leafs).unwrap();\n//         assert_eq!(second_merkle_tree.root(), relation.proof.paths[1]);\n\n//         relation.verify().unwrap();\n//     }\n\n//     #[test]\n//     fn unit_tests() {\n//         for (n, m) in (0..18).cartesian_product(0..18) {\n//             dbg!((n, m));\n//             let relation = MmrSuccessorRelation::new_with_numbered_leafs(n, m);\n//             relation.verify().unwrap();\n//         }\n//     }\n\n//     #[proptest]\n//     fn arbitrary_mmr_successor_relation_holds(relation: MmrSuccessorRelation) {\n//         relation.verify()?;\n//     }\n\n//     #[proptest]\n//     fn verification_fails_if_old_mmr_is_inconsistent(\n//         mut relation: MmrSuccessorRelation,\n//         wrong_num_leafs: u64,\n//     ) {\n//         prop_assume!(wrong_num_leafs != relation.old.num_leafs());\n//         relation.old = MmrAccumulator::init(relation.old.peaks(), wrong_num_leafs);\n//         prop_assert_eq!(Err(Error::InconsistentOldMmr), relation.verify());\n//     }\n\n//     #[proptest]\n//     fn verification_fails_if_new_mmr_is_inconsistent(\n//         mut relation: MmrSuccessorRelation,\n//         wrong_num_leafs: u64,\n//     ) {\n//         prop_assume!(wrong_num_leafs != relation.new.num_leafs());\n//         relation.new = MmrAccumulator::init(relation.new.peaks(), wrong_num_leafs);\n//         prop_assert_eq!(Err(Error::InconsistentNewMmr), relation.verify());\n//     }\n\n//     #[proptest]\n//     fn verification_fails_if_old_mmra_has_more_leafs_than_new_mmra(\n//         #[filter(#relation.old != #relation.new)] mut relation: MmrSuccessorRelation,\n//     ) {\n//         std::mem::swap(&mut relation.old, &mut relation.new);\n//         prop_assert_eq!(Err(Error::OldHasMoreLeafsThanNew), relation.verify());\n//     }\n\n//     #[proptest]\n//     fn verification_fails_if_old_mmra_has_swapped_peaks(\n//         #[filter(#relation.old.peaks().len() >= 2)] mut relation: MmrSuccessorRelation,\n//         #[strategy(0..#relation.old.peaks().len())] first_swap_idx: usize,\n//         #[strategy(0..#relation.old.peaks().len())] second_swap_idx: usize,\n//     ) {\n//         prop_assume!(first_swap_idx != second_swap_idx);\n//         let mut wrong_peaks = relation.old.peaks();\n//         wrong_peaks.swap(first_swap_idx, second_swap_idx);\n//         relation.old = MmrAccumulator::init(wrong_peaks, relation.old.num_leafs());\n\n//         prop_assert!(matches!(\n//             relation.verify(),\n//             Err(Error::DifferentSharedPeak) | Err(Error::DifferentUnsharedPeak)\n//         ));\n//     }\n\n//     /// Because some peaks of the new MMRA might be irrelevant for the successor\n//     /// relation, it is impossible to swap arbitrary peaks and guarantee a\n//     /// verification failure. However, if the old MMRA is non-empty, the first\n//     /// peak of the new MMRA is always relevant.\n//     #[proptest]\n//     fn verification_fails_if_new_mmra_has_first_peak_swapped_out(\n//         #[filter(#relation.old.num_leafs() > 0)]\n//         #[filter(#relation.new.peaks().len() >= 2)]\n//         mut relation: MmrSuccessorRelation,\n//         #[strategy(1..#relation.new.peaks().len())] swap_idx: usize,\n//     ) {\n//         let mut wrong_peaks = relation.new.peaks();\n//         wrong_peaks.swap(0, swap_idx);\n//         relation.new = MmrAccumulator::init(wrong_peaks, relation.new.num_leafs());\n\n//         prop_assert!(matches!(\n//             relation.verify(),\n//             Err(Error::DifferentSharedPeak) | Err(Error::DifferentUnsharedPeak)\n//         ));\n//     }\n\n//     #[proptest(cases = 50)]\n//     fn verification_fails_if_authentication_path_is_corrupt(\n//         #[filter(!#relation.proof.paths.is_empty())] mut relation: MmrSuccessorRelation,\n//         #[strategy(0..#relation.proof.paths.len())] corruption_idx: usize,\n//         corruptor: DigestCorruptor,\n//     ) {\n//         let auth_path = &mut relation.proof.paths;\n//         auth_path[corruption_idx] = corruptor.corrupt_digest(auth_path[corruption_idx])?;\n\n//         prop_assert!(matches!(\n//             relation.verify(),\n//             Err(Error::DifferentSharedPeak) | Err(Error::DifferentUnsharedPeak)\n//         ));\n//     }\n\n//     #[proptest]\n//     fn verification_fails_if_authentication_path_has_too_few_elements(\n//         #[filter(!#relation.proof.paths.is_empty())] mut relation: MmrSuccessorRelation,\n//         #[strategy(0..#relation.proof.paths.len())] deletion_idx: usize,\n//     ) {\n//         relation.proof.paths.remove(deletion_idx);\n//         prop_assert_eq!(Err(Error::AuthenticationPathTooShort), relation.verify());\n//     }\n\n//     #[proptest]\n//     fn verification_fails_if_authentication_path_has_too_many_elements(\n//         mut relation: MmrSuccessorRelation,\n//         #[strategy(arb())] spurious_element: Digest,\n//     ) {\n//         relation.proof.paths.push(spurious_element);\n//         prop_assert_eq!(Err(Error::AuthenticationPathTooLong), relation.verify());\n//     }\n// }\n"
  },
  {
    "path": "tools/garaga_rs/src/crypto/mmr/mmr_trait.rs",
    "content": "use super::mmr_accumulator::MmrAccumulator;\nuse super::mmr_membership_proof::MmrMembershipProof;\nuse crate::crypto::digest::{Digest, HashFunction};\n\n/// A wrapper for the data needed to change the value of a leaf in an MMR when\n/// only the MMR-accumulator is known, i.e., only the peaks and the leaf-count\n/// are known.\n#[derive(Debug, Clone)]\npub struct LeafMutation<H: HashFunction> {\n    /// The leaf-index of the leaf being mutated. If the MMR is viewed as a\n    /// commitment to a list, then this is simply the (0-indexed) list-index\n    /// into that list.\n    pub leaf_index: u64,\n\n    /// The new leaf value, after the mutation has been applied.\n    pub new_leaf: Digest<H>,\n\n    /// MMR membership proof (authentication path) both before *and* after the\n    /// leaf has been mutated. An authentication path is a commitment to all\n    /// other leafs in the Merkle tree than the one it is a membership proof\n    /// for.\n    pub membership_proof: MmrMembershipProof<H>,\n}\n\nimpl<H: HashFunction> LeafMutation<H> {\n    pub fn new(\n        leaf_index: u64,\n        new_leaf: Digest<H>,\n        membership_proof: MmrMembershipProof<H>,\n    ) -> Self {\n        Self {\n            leaf_index,\n            new_leaf,\n            membership_proof,\n        }\n    }\n\n    /// Returns the node indices into the MMR of the nodes that are mutated by\n    /// this leaf-mutation.\n    pub fn affected_node_indices(&self) -> Vec<u64> {\n        self.membership_proof\n            .get_direct_path_indices(self.leaf_index)\n    }\n}\n\n/// A “Merkle Mountain Range” (MMR) is a data structure for storing lists of\n/// hashes. Similar to [Merkle trees](crate::prelude::MerkleTree), they enable\n/// efficient set inclusion proofs. Unlike Merkle trees, the number of leafs of\n/// an MMR is not required to be a power of 2.\n///\n/// One valid perspective of this data structure is to see it as a list of\n/// Merkle trees. Each of the Merkle tree's roots is one peak of the MMR.\n/// In order to keep the number of peaks to a minimum, any two Merkle trees of\n/// the same height are merged, which results in a single tree that has one\n/// additional “tier”, _i.e._, it's height is one more than that of the two\n/// trees that got merged.\n///\n/// # Example\n///\n/// The following is a Merkle Mountain Range, annotated with both node and leaf\n/// indices:\n///\n/// ```markdown\n///         ──── 15 ───                           ╮\n///        ╱           ╲                          │\n///       7             14            22          │\n///      ╱  ╲          ╱  ╲          ╱  ╲         ├╴ node indices\n///     ╱    ╲        ╱    ╲        ╱    ╲        │\n///    3      6     10      13     18     21      │\n///   ╱ ╲    ╱ ╲    ╱ ╲    ╱ ╲    ╱ ╲    ╱ ╲      │\n///  1   2  4   5  8   9  11 12  16 17  19 20 21  ╯\n///\n///  0   1  2   3  4   5  6   7  8   9  10 11 12  ←── leaf indices\n/// ```\n///\n/// Adding another leaf to the above MMR will result in the following MMR:\n///\n/// ```markdown\n///         ──── 15 ───\n///        ╱           ╲\n///       7             14            22\n///      ╱  ╲          ╱  ╲          ╱  ╲\n///     ╱    ╲        ╱    ╲        ╱    ╲\n///    3      6     10      13     18     21       25\n///   ╱ ╲    ╱ ╲    ╱ ╲    ╱ ╲    ╱ ╲    ╱ ╲      ╱ ╲\n///  1   2  4   5  8   9  11 12  16 17  19 20 21 23 24\n///\n///  0   1  2   3  4   5  6   7  8   9  10 11 12 13 14\n/// ```\n///\n/// Note how the new leaf with index 13, which by itself is a Merkle tree of\n/// height 0, was merged with its neighboring Merkle tree of equal height,\n/// resulting in a new Merkle tree of height 1 (the nodes 23, 24, and 25).\n///\n/// Adding two more leafs to this MMR results in a single Merkle tree of height\n/// four.\n///\n/// # Counterexample\n///\n/// The following is **not** a valid Merkle Mountain Range, since it contains\n/// trees of equal height.\n///\n/// ```markdown\n///       _                        _\n///      ╱  ╲                     ╱  ╲\n///     ╱    ╲                   ╱    ╲\n///    _      _     _     _     _      _\n///   ╱ ╲    ╱ ╲   ╱ ╲   ╱ ╲   ╱ ╲    ╱ ╲\n///  _   _  _   _ _   _ _   _ _   _  _   _\n/// ```\n///\n/// # Terminology\n///\n/// Similar to Merkle trees, Merkle Mountain Ranges have “leafs” and “nodes”.\n/// Any leaf is a node, but the reverse is not true. Note that the indexing\n/// scheme for the nodes does not follow that of a Merkle tree – see\n/// [this][mt_proof] explanation for Merkle tree indexing.\n///\n/// A single Merkle tree's root is one “peak” of the MMR. The number of peaks in\n/// the MMR equals the number of Merkle trees it is made out of. Because of the\n/// 1-to-1 mapping between peaks and Merkle trees, the “peak index” uniquely\n/// identifies any one Merkle tree.\n///\n/// When selecting for a single Merkle tree within a Merkle Mountain Range, the\n/// usual Merkel tree indexing is used to identify nodes. This is called the\n/// “Merkle tree index” and is usually only meaningful in combination with a\n/// peak index, for example like [here][mt_peak_idx].\n///\n/// [mt_proof]: crate::util_types::merkle_tree::MerkleTree::authentication_structure\n/// [mt_peak_idx]: crate::util_types::mmr::shared_basic::leaf_index_to_mt_index_and_peak_index\npub trait Mmr<H: HashFunction> {\n    /// A single digest committing to the entire MMR.\n    fn bag_peaks(&self) -> Digest<H>;\n\n    /// The peaks of the MMR, _i.e._, the roots of the Merkle trees that constitute\n    /// the MMR.\n    fn peaks(&self) -> Vec<Digest<H>>;\n\n    /// `true` iff the MMR has no leafs.\n    fn is_empty(&self) -> bool;\n\n    /// The number of leafs in the MMR.\n    fn num_leafs(&self) -> u64;\n\n    /// Append a hash digest to the MMR.\n    fn append(&mut self, new_leaf: Digest<H>) -> MmrMembershipProof<H>;\n\n    /// Mutate an existing leaf. It is the caller's responsibility that the\n    /// membership proof is valid. If the membership proof is wrong, the MMR\n    /// will end up in a broken state.\n    fn mutate_leaf(&mut self, leaf_mutation: LeafMutation<H>);\n\n    /// Batch mutate an MMR while updating a list of membership proofs. Returns the\n    /// indices of the membership proofs that have changed as a result of this\n    /// operation.\n    fn batch_mutate_leaf_and_update_mps(\n        &mut self,\n        membership_proofs: &mut [&mut MmrMembershipProof<H>],\n        membership_proof_leaf_indices: &[u64],\n        mutation_data: Vec<LeafMutation<H>>,\n    ) -> Vec<usize>;\n\n    /// `true` iff a list of leaf mutations and a list of appends results in the expected\n    /// `new_peaks`.\n    fn verify_batch_update(\n        &self,\n        new_peaks: &[Digest<H>],\n        appended_leafs: &[Digest<H>],\n        leaf_mutations: Vec<LeafMutation<H>>,\n    ) -> bool;\n\n    /// Derive an MMR accumulator, which contains only peaks and the number of\n    /// leafs.\n    fn to_accumulator(&self) -> MmrAccumulator<H>;\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/crypto/mmr/shared_advanced.rs",
    "content": "use super::shared_basic::*;\n\n/// Get (index, height) of leftmost ancestor\n/// This ancestor does *not* have to be in the MMR\n/// This algorithm finds the closest $2^n - 1$ that's bigger than\n/// or equal to `node_index`.\n#[inline]\npub fn leftmost_ancestor(node_index: u64) -> (u64, u32) {\n    if node_index.leading_zeros() == 0 {\n        return (u64::MAX, 63);\n    }\n\n    let height = node_index.ilog2();\n    let index = (1 << (height + 1)) - 1;\n\n    (index, height)\n}\n\n/// Traversing from this node upwards, count how many of the ancestor (including itself)\n/// is a right child. Also returns node's height.\npub fn right_lineage_length_and_own_height(node_index: u64) -> (u32, u32) {\n    let (mut candidate, mut candidate_height) = leftmost_ancestor(node_index);\n\n    // leftmost ancestor is always a left node, so count starts at 0.\n    let mut right_ancestor_count = 0;\n\n    loop {\n        if candidate == node_index {\n            return (right_ancestor_count, candidate_height);\n        }\n\n        let left_child = left_child(candidate, candidate_height);\n        let candidate_is_right_child = left_child < node_index;\n        if candidate_is_right_child {\n            candidate = right_child(candidate);\n            right_ancestor_count += 1;\n        } else {\n            candidate = left_child;\n            right_ancestor_count = 0;\n        };\n\n        candidate_height -= 1;\n    }\n}\n\npub fn right_lineage_length_from_node_index(node_index: u64) -> u32 {\n    let bit_width = u64::BITS - node_index.leading_zeros();\n    let npo2 = 1u128 << bit_width;\n\n    let dist = (npo2 - (node_index as u128)) as u64;\n\n    if (bit_width as u64) < dist {\n        right_lineage_length_from_node_index(node_index - (1 << (bit_width - 1)) + 1)\n    } else {\n        (dist - 1) as u32\n    }\n}\n\n/// Convert from leaf index to node index.\n///\n/// Crashes if `leaf_index` exceeds 63 bits.\npub fn leaf_index_to_node_index(leaf_index: u64) -> u64 {\n    let hamming_weight = leaf_index.count_ones() as u64;\n    2 * leaf_index - hamming_weight + 1\n}\n\n/// Get the node_index of the parent\n#[inline]\npub fn parent(node_index: u64) -> u64 {\n    let (right_ancestor_count, height) = right_lineage_length_and_own_height(node_index);\n\n    if right_ancestor_count != 0 {\n        node_index + 1\n    } else {\n        node_index + (1 << (height + 1))\n    }\n}\n\n/// Get the node index of the left sibling, given the right sibling's node index\n/// and the height of the layer on which it lives.\n#[inline]\npub fn left_sibling(node_index: u64, height: u32) -> u64 {\n    node_index - (1 << (height + 1)) + 1\n}\n\n/// Get the node index of the right sibling, given the left sibling's node index\n/// and the height of the layer on which it lives.\n#[inline]\npub fn right_sibling(node_index: u64, height: u32) -> u64 {\n    node_index + (1 << (height + 1)) - 1\n}\n\n/// The number of nodes in an MMR with `leaf_count` leafs.\npub fn num_leafs_to_num_nodes(num_leafs: u64) -> u64 {\n    let hamming_weight = num_leafs.count_ones() as u64;\n    2 * num_leafs - hamming_weight\n}\n\n/// Return the indices of the nodes added by an append, including the (node index\n/// of the) peak that this append gave rise to and (that of) the new leaf.\npub fn node_indices_added_by_append(old_leaf_count: u64) -> Vec<u64> {\n    let mut node_index = leaf_index_to_node_index(old_leaf_count);\n    let mut added_node_indices = vec![node_index];\n    let mut right_count = right_lineage_length_from_node_index(node_index);\n    while right_count != 0 {\n        // a right child's parent is found by adding 1 to the node index\n        node_index += 1;\n        added_node_indices.push(node_index);\n        right_count -= 1;\n    }\n\n    added_node_indices\n}\n\n/// Get the node indices of the authentication path starting from the specified\n/// leaf, to its peak.\n///\n/// # Panics\n///\n/// Panics if the leaf index is out-of-bounds.\npub fn auth_path_node_indices(num_leafs: u64, leaf_index: u64) -> Vec<u64> {\n    assert!(\n        leaf_index < num_leafs,\n        \"Leaf index out-of-bounds: {leaf_index}/{num_leafs}\"\n    );\n\n    let (mut merkle_tree_index, _) = leaf_index_to_mt_index_and_peak_index(leaf_index, num_leafs);\n    let mut node_index = leaf_index_to_node_index(leaf_index);\n    let mut height = 0;\n    let tree_height = u64::BITS - merkle_tree_index.leading_zeros() - 1;\n    let mut ret = Vec::with_capacity(tree_height as usize);\n    while merkle_tree_index > 1 {\n        let is_left_sibling = merkle_tree_index & 1 == 0;\n        let height_pow = 1u64 << (height + 1);\n        let as_1_or_minus_1: u64 = (2 * (is_left_sibling as i64) - 1) as u64;\n        let signed_height_pow = height_pow.wrapping_mul(as_1_or_minus_1);\n        let sibling = node_index\n            .wrapping_add(signed_height_pow)\n            .wrapping_sub(as_1_or_minus_1);\n\n        node_index += 1 << ((height + 1) * is_left_sibling as u32);\n\n        ret.push(sibling);\n        merkle_tree_index >>= 1;\n        height += 1;\n    }\n\n    debug_assert_eq!(tree_height, ret.len() as u32, \"Allocation must be optimal\");\n\n    ret\n}\n\n/// Get the node indices of the authentication path hash digest needed\n/// to calculate the digest of `peak_node_index` from `start_node_index`\npub fn get_authentication_path_node_indices(\n    start_node_index: u64,\n    peak_node_index: u64,\n    node_count: u64,\n) -> Option<Vec<u64>> {\n    let mut authentication_path_node_indices = vec![];\n    let mut node_index = start_node_index;\n    while node_index <= node_count && node_index != peak_node_index {\n        // TODO: Consider if this function can be written better, or discard\n        // it entirely.\n        let (right_ancestor_count, height) = right_lineage_length_and_own_height(node_index);\n        let sibling_node_index: u64;\n        if right_ancestor_count != 0 {\n            sibling_node_index = left_sibling(node_index, height);\n\n            // parent of right child is +1\n            node_index += 1;\n        } else {\n            sibling_node_index = right_sibling(node_index, height);\n\n            // parent of left child:\n            node_index += 1 << (height + 1);\n        }\n\n        authentication_path_node_indices.push(sibling_node_index);\n    }\n\n    if node_index == peak_node_index {\n        Some(authentication_path_node_indices)\n    } else {\n        None\n    }\n}\n\n/// Return a list of the peak heights for a given leaf count.\n///\n/// # Examples\n///\n/// ```\n// /// use twenty_first::util_types::mmr::shared_advanced::get_peak_heights;\n// /// assert_eq!(get_peak_heights(0b1010), vec![3, 1]);\n// /// assert_eq!(get_peak_heights(0b1011), vec![3, 1, 0]);\n// /// ```\npub fn get_peak_heights(leaf_count: u64) -> Vec<u32> {\n    // In an MMR, the peak heights directly correspond the leaf count's bit decomposition. That is,\n    // the indices of the bits that are set in the binary representation of the leaf count are the\n    // peaks' heights.\n    let Some(num_bits_in_leaf_count) = leaf_count.checked_ilog2() else {\n        return vec![];\n    };\n\n    let mut indices_of_set_bits = vec![];\n    for bit_index in 0..=num_bits_in_leaf_count {\n        let bit_mask = 1 << bit_index;\n        let is_set_bit_in_leaf_count = bit_mask & leaf_count != 0;\n        if is_set_bit_in_leaf_count {\n            indices_of_set_bits.push(bit_index);\n        }\n    }\n\n    // put highest index first\n    indices_of_set_bits.reverse();\n    indices_of_set_bits\n}\n\n/// Given the number of leafs in the MMR, return one vector representing the heights\n/// of the peaks, and another vector representing their MMR node indices.\npub fn get_peak_heights_and_peak_node_indices(leaf_count: u64) -> (Vec<u32>, Vec<u64>) {\n    if leaf_count == 0 {\n        return (vec![], vec![]);\n    }\n\n    let node_index_of_rightmost_leaf = leaf_index_to_node_index(leaf_count - 1);\n    let node_count = num_leafs_to_num_nodes(leaf_count);\n    let (mut top_peak, mut top_height) = leftmost_ancestor(node_index_of_rightmost_leaf);\n    if top_peak > node_count {\n        top_peak = left_child(top_peak, top_height);\n        top_height -= 1;\n    }\n\n    let mut heights: Vec<u32> = vec![top_height];\n    let mut node_indices: Vec<u64> = vec![top_peak];\n    let mut height = top_height;\n    let mut candidate = right_sibling(top_peak, height);\n    'outer: while height > 0 {\n        '_inner: while candidate > node_count && height > 0 {\n            candidate = left_child(candidate, height);\n            height -= 1;\n            if candidate <= node_count {\n                heights.push(height);\n                node_indices.push(candidate);\n                candidate = right_sibling(candidate, height);\n                continue 'outer;\n            }\n        }\n    }\n\n    (heights, node_indices)\n}\n\n/// Convert from node index to leaf index in log(size) time\npub fn node_index_to_leaf_index(node_index: u64) -> Option<u64> {\n    let (_right, own_height) = right_lineage_length_and_own_height(node_index);\n    if own_height != 0 {\n        return None;\n    }\n\n    let (mut node, mut node_height) = leftmost_ancestor(node_index);\n    let mut leaf_index = 0;\n    while node_height > 0 {\n        let left_child = left_child(node, node_height);\n        if node_index <= left_child {\n            node = left_child;\n            node_height -= 1;\n        } else {\n            node = right_child(node);\n            node_height -= 1;\n            leaf_index += 1 << node_height;\n        }\n    }\n\n    Some(leaf_index)\n}\n\n// #[cfg(test)]\n// mod mmr_test {\n//     use proptest::prelude::Just;\n//     use proptest::prop_assert_eq;\n//     use rand::RngCore;\n//     use test_strategy::proptest;\n\n//     use super::*;\n//     use crate::prelude::Digest;\n//     use crate::prelude::MmrMembershipProof;\n\n//     #[test]\n//     fn leaf_index_to_node_index_test() {\n//         assert_eq!(1, leaf_index_to_node_index(0));\n//         assert_eq!(2, leaf_index_to_node_index(1));\n//         assert_eq!(4, leaf_index_to_node_index(2));\n//         assert_eq!(5, leaf_index_to_node_index(3));\n//         assert_eq!(8, leaf_index_to_node_index(4));\n//         assert_eq!(9, leaf_index_to_node_index(5));\n//         assert_eq!(11, leaf_index_to_node_index(6));\n//         assert_eq!(12, leaf_index_to_node_index(7));\n//         assert_eq!(16, leaf_index_to_node_index(8));\n//         assert_eq!(17, leaf_index_to_node_index(9));\n//         assert_eq!(19, leaf_index_to_node_index(10));\n//         assert_eq!(20, leaf_index_to_node_index(11));\n//         assert_eq!(23, leaf_index_to_node_index(12));\n//         assert_eq!(24, leaf_index_to_node_index(13));\n//         assert_eq!(26, leaf_index_to_node_index(14));\n//         assert_eq!(27, leaf_index_to_node_index(15));\n//         assert_eq!(32, leaf_index_to_node_index(16));\n//         assert_eq!(33, leaf_index_to_node_index(17));\n//         assert_eq!(35, leaf_index_to_node_index(18));\n//         assert_eq!(36, leaf_index_to_node_index(19));\n//         assert_eq!(39, leaf_index_to_node_index(20));\n//         assert_eq!(40, leaf_index_to_node_index(21));\n//     }\n\n//     #[test]\n//     fn node_indices_added_by_append_test() {\n//         assert_eq!(vec![1], node_indices_added_by_append(0));\n//         assert_eq!(vec![2, 3], node_indices_added_by_append(1));\n//         assert_eq!(vec![4], node_indices_added_by_append(2));\n//         assert_eq!(vec![5, 6, 7], node_indices_added_by_append(3));\n//         assert_eq!(vec![8], node_indices_added_by_append(4));\n//         assert_eq!(vec![9, 10], node_indices_added_by_append(5));\n//         assert_eq!(vec![11], node_indices_added_by_append(6));\n//         assert_eq!(vec![12, 13, 14, 15], node_indices_added_by_append(7));\n//         assert_eq!(vec![16], node_indices_added_by_append(8));\n//         assert_eq!(vec![17, 18], node_indices_added_by_append(9));\n//         assert_eq!(vec![19], node_indices_added_by_append(10));\n//         assert_eq!(vec![20, 21, 22], node_indices_added_by_append(11));\n//         assert_eq!(vec![23], node_indices_added_by_append(12));\n//         assert_eq!(vec![24, 25], node_indices_added_by_append(13));\n//         assert_eq!(vec![26], node_indices_added_by_append(14));\n//         assert_eq!(vec![27, 28, 29, 30, 31], node_indices_added_by_append(15));\n//         assert_eq!(vec![32], node_indices_added_by_append(16));\n//         assert_eq!(vec![33, 34], node_indices_added_by_append(17));\n//         assert_eq!(vec![35], node_indices_added_by_append(18));\n//         assert_eq!(vec![36, 37, 38], node_indices_added_by_append(19));\n//         assert_eq!(\n//             vec![58, 59, 60, 61, 62, 63],\n//             node_indices_added_by_append(31)\n//         );\n//         assert_eq!(vec![64], node_indices_added_by_append(32));\n//     }\n\n//     #[test]\n//     fn leaf_index_node_index_pbt() {\n//         let mut rng = rand::rng();\n//         for _ in 0..10_000 {\n//             let rand = rng.next_u32();\n//             let inversion_result = node_index_to_leaf_index(leaf_index_to_node_index(rand as u64));\n//             let inversion = inversion_result.unwrap();\n//             assert_eq!(rand, inversion as u32);\n//         }\n//     }\n\n//     #[test]\n//     fn right_ancestor_count_test() {\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(1)); // 0b1 => 0\n//         assert_eq!((1, 0), right_lineage_length_and_own_height(2)); // 0b10 => 1\n//         assert_eq!((0, 1), right_lineage_length_and_own_height(3)); // 0b11 => 0\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(4)); // 0b100 => 0\n//         assert_eq!((2, 0), right_lineage_length_and_own_height(5)); // 0b101 => 2\n//         assert_eq!((1, 1), right_lineage_length_and_own_height(6)); // 0b110 => 1\n//         assert_eq!((0, 2), right_lineage_length_and_own_height(7)); // 0b111 => 0\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(8)); // 0b1000 => 0\n//         assert_eq!((1, 0), right_lineage_length_and_own_height(9)); // 0b1001 => 1\n//         assert_eq!((0, 1), right_lineage_length_and_own_height(10)); // 0b1010 => 0\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(11)); // 0b1011 => 0\n//         assert_eq!((3, 0), right_lineage_length_and_own_height(12)); // 0b1100 => 3\n//         assert_eq!((2, 1), right_lineage_length_and_own_height(13)); // 0b1101 => 2\n//         assert_eq!((1, 2), right_lineage_length_and_own_height(14)); // 0b1110 => 1\n//         assert_eq!((0, 3), right_lineage_length_and_own_height(15)); // 0b1111 => 0\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(16)); // 0b10000 => 0\n//         assert_eq!((1, 0), right_lineage_length_and_own_height(17)); // 0b10001 => 1\n//         assert_eq!((0, 1), right_lineage_length_and_own_height(18)); // 0b10010 => 0\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(19)); // 0b10011 => 0\n//         assert_eq!((2, 0), right_lineage_length_and_own_height(20)); // 0b10100 => 2\n//         assert_eq!((1, 1), right_lineage_length_and_own_height(21)); // 0b10101 => 1\n//         assert_eq!((0, 2), right_lineage_length_and_own_height(22)); // 0b10110 => 0\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(23)); // 0b10111 => 0\n//         assert_eq!((1, 0), right_lineage_length_and_own_height(24)); // 0b11000 => 1\n//         assert_eq!((0, 1), right_lineage_length_and_own_height(25)); // 0b11001 => 0\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(26)); // 0b11010 => 0\n//         assert_eq!((4, 0), right_lineage_length_and_own_height(27)); // 0b11011 => 4\n//         assert_eq!((3, 1), right_lineage_length_and_own_height(28)); // 0b11100 => 3\n//         assert_eq!((2, 2), right_lineage_length_and_own_height(29)); // 0b11101 => 2\n//         assert_eq!((1, 3), right_lineage_length_and_own_height(30)); // 0b11110 => 1\n//         assert_eq!((0, 4), right_lineage_length_and_own_height(31)); // 0b11111 => 0\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(32)); // 0b100000 => 0\n//         assert_eq!((1, 0), right_lineage_length_and_own_height(33)); // 0b100001 => 1\n//         assert_eq!((0, 1), right_lineage_length_and_own_height(34)); // 0b100010 => 0\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(35)); // 0b100011 => 0\n//         assert_eq!((2, 0), right_lineage_length_and_own_height(36)); // 0b100100 => 2\n//         assert_eq!((1, 1), right_lineage_length_and_own_height(37)); // 0b100101 => 1\n//         assert_eq!((0, 2), right_lineage_length_and_own_height(38)); // 0b100110 => 0\n//         assert_eq!((0, 0), right_lineage_length_and_own_height(39)); // 0b100111 => 0\n//         assert_eq!((1, 0), right_lineage_length_and_own_height(40)); // 0b101000 => 1\n//         assert_eq!((0, 1), right_lineage_length_and_own_height(41)); // 0b101001 => 0\n\n//         assert_eq!(\n//             (61, 1),\n//             right_lineage_length_and_own_height(u64::MAX / 2 - 61)\n//         ); // 0b111...11 => 0\n//         assert_eq!(\n//             (3, 59),\n//             right_lineage_length_and_own_height(u64::MAX / 2 - 3)\n//         ); // 0b111...11 => 0\n//         assert_eq!(\n//             (2, 60),\n//             right_lineage_length_and_own_height(u64::MAX / 2 - 2)\n//         ); // 0b111...11 => 0\n//         assert_eq!(\n//             (1, 61),\n//             right_lineage_length_and_own_height(u64::MAX / 2 - 1)\n//         ); // 0b111...11 => 0\n//         assert_eq!((0, 62), right_lineage_length_and_own_height(u64::MAX / 2)); // 0b111...11 => 0\n//     }\n\n//     #[proptest]\n//     fn right_lineage_length_property(#[strategy(0u64..(1<<63))] leaf_index: u64) {\n//         let rll = right_lineage_length_from_leaf_index(leaf_index);\n//         let rac = right_lineage_length_and_own_height(leaf_index_to_node_index(leaf_index)).0;\n//         prop_assert_eq!(rac, rll);\n//     }\n\n//     #[test]\n//     fn leftmost_ancestor_test() {\n//         assert_eq!((1, 0), leftmost_ancestor(1));\n//         assert_eq!((3, 1), leftmost_ancestor(2));\n//         assert_eq!((3, 1), leftmost_ancestor(3));\n//         assert_eq!((7, 2), leftmost_ancestor(4));\n//         assert_eq!((7, 2), leftmost_ancestor(5));\n//         assert_eq!((7, 2), leftmost_ancestor(6));\n//         assert_eq!((7, 2), leftmost_ancestor(7));\n//         assert_eq!((15, 3), leftmost_ancestor(8));\n//         assert_eq!((15, 3), leftmost_ancestor(9));\n//         assert_eq!((15, 3), leftmost_ancestor(10));\n//         assert_eq!((15, 3), leftmost_ancestor(11));\n//         assert_eq!((15, 3), leftmost_ancestor(12));\n//         assert_eq!((15, 3), leftmost_ancestor(13));\n//         assert_eq!((15, 3), leftmost_ancestor(14));\n//         assert_eq!((15, 3), leftmost_ancestor(15));\n//         assert_eq!((31, 4), leftmost_ancestor(16));\n//     }\n\n//     #[test]\n//     fn left_sibling_test() {\n//         assert_eq!(3, left_sibling(6, 1));\n//         assert_eq!(1, left_sibling(2, 0));\n//         assert_eq!(4, left_sibling(5, 0));\n//         assert_eq!(15, left_sibling(30, 3));\n//         assert_eq!(22, left_sibling(29, 2));\n//         assert_eq!(7, left_sibling(14, 2));\n//     }\n\n//     #[test]\n//     fn node_index_to_leaf_index_test() {\n//         assert_eq!(Some(0), node_index_to_leaf_index(1));\n//         assert_eq!(Some(1), node_index_to_leaf_index(2));\n//         assert_eq!(None, node_index_to_leaf_index(3));\n//         assert_eq!(Some(2), node_index_to_leaf_index(4));\n//         assert_eq!(Some(3), node_index_to_leaf_index(5));\n//         assert_eq!(None, node_index_to_leaf_index(6));\n//         assert_eq!(None, node_index_to_leaf_index(7));\n//         assert_eq!(Some(4), node_index_to_leaf_index(8));\n//         assert_eq!(Some(5), node_index_to_leaf_index(9));\n//         assert_eq!(None, node_index_to_leaf_index(10));\n//         assert_eq!(Some(6), node_index_to_leaf_index(11));\n//         assert_eq!(Some(7), node_index_to_leaf_index(12));\n//         assert_eq!(None, node_index_to_leaf_index(13));\n//         assert_eq!(None, node_index_to_leaf_index(14));\n//         assert_eq!(None, node_index_to_leaf_index(15));\n//         assert_eq!(Some(8), node_index_to_leaf_index(16));\n//         assert_eq!(Some(9), node_index_to_leaf_index(17));\n//         assert_eq!(None, node_index_to_leaf_index(18));\n//         assert_eq!(Some(10), node_index_to_leaf_index(19));\n//         assert_eq!(Some(11), node_index_to_leaf_index(20));\n//         assert_eq!(None, node_index_to_leaf_index(21));\n//         assert_eq!(None, node_index_to_leaf_index(22));\n//     }\n\n//     #[test]\n//     fn leaf_count_to_node_count_test() {\n//         let node_counts: Vec<u64> = vec![\n//             0, 1, 3, 4, 7, 8, 10, 11, 15, 16, 18, 19, 22, 23, 25, 26, 31, 32, 34, 35, 38, 39, 41,\n//             42, 46, 47, 49, 50, 53, 54, 56, 57, 63, 64,\n//         ];\n//         for (i, node_count) in node_counts.iter().enumerate() {\n//             assert_eq!(*node_count, num_leafs_to_num_nodes(i as u64));\n//         }\n//     }\n\n//     #[test]\n//     fn get_peak_heights_and_peak_node_indices_test() {\n//         type TestCase = (u64, (Vec<u32>, Vec<u64>));\n//         let leaf_count_and_expected: Vec<TestCase> = vec![\n//             (0, (vec![], vec![])),\n//             (1, (vec![0], vec![1])),\n//             (2, (vec![1], vec![3])),\n//             (3, (vec![1, 0], vec![3, 4])),\n//             (4, (vec![2], vec![7])),\n//             (5, (vec![2, 0], vec![7, 8])),\n//             (6, (vec![2, 1], vec![7, 10])),\n//             (7, (vec![2, 1, 0], vec![7, 10, 11])),\n//             (8, (vec![3], vec![15])),\n//             (9, (vec![3, 0], vec![15, 16])),\n//             (10, (vec![3, 1], vec![15, 18])),\n//             (11, (vec![3, 1, 0], vec![15, 18, 19])),\n//             (12, (vec![3, 2], vec![15, 22])),\n//             (13, (vec![3, 2, 0], vec![15, 22, 23])),\n//             (14, (vec![3, 2, 1], vec![15, 22, 25])),\n//             (15, (vec![3, 2, 1, 0], vec![15, 22, 25, 26])),\n//             (16, (vec![4], vec![31])),\n//             (17, (vec![4, 0], vec![31, 32])),\n//             (18, (vec![4, 1], vec![31, 34])),\n//             (19, (vec![4, 1, 0], vec![31, 34, 35])),\n//         ];\n//         for (leaf_count, (expected_heights, expected_indices)) in leaf_count_and_expected {\n//             assert_eq!(\n//                 (expected_heights.clone(), expected_indices),\n//                 get_peak_heights_and_peak_node_indices(leaf_count)\n//             );\n\n//             assert_eq!(expected_heights, get_peak_heights(leaf_count));\n//         }\n//     }\n\n//     #[test]\n//     fn get_authentication_path_node_indices_test() {\n//         type Interval = (u64, u64, u64);\n//         type TestCase = (Interval, Option<Vec<u64>>);\n//         let start_end_node_count_expected: Vec<TestCase> = vec![\n//             ((1, 31, 31), Some(vec![2, 6, 14, 30])),\n//             ((2, 31, 31), Some(vec![1, 6, 14, 30])),\n//             ((3, 31, 31), Some(vec![6, 14, 30])),\n//             ((4, 31, 31), Some(vec![5, 3, 14, 30])),\n//             ((21, 31, 31), Some(vec![18, 29, 15])),\n//             ((21, 31, 32), Some(vec![18, 29, 15])),\n//             ((32, 32, 32), Some(vec![])),\n//             ((1, 32, 32), None),\n//         ];\n//         for ((start, end, node_count), expected) in start_end_node_count_expected {\n//             assert_eq!(\n//                 expected,\n//                 get_authentication_path_node_indices(start, end, node_count)\n//             );\n//         }\n//     }\n\n//     #[test]\n//     #[should_panic(expected = \"Leaf index out-of-bounds: 5/5\")]\n//     fn auth_path_indices_out_of_bounds_unit_test() {\n//         auth_path_node_indices(5, 5);\n//     }\n\n//     #[proptest]\n//     fn auth_path_indices_prop(\n//         #[strategy(0u64..(u64::MAX>>1))] _num_leafs: u64,\n//         #[strategy(0u64..(#_num_leafs))] leaf_index: u64,\n//         #[strategy(Just(auth_path_node_indices(#_num_leafs, #leaf_index)))] node_indices: Vec<u64>,\n//     ) {\n//         let mp = MmrMembershipProof {\n//             authentication_path: vec![Digest::default(); node_indices.len()],\n//         };\n//         prop_assert_eq!(mp.get_node_indices(leaf_index), node_indices);\n//     }\n\n//     #[test]\n//     fn auth_path_indices_unit_test() {\n//         assert_eq!(vec![2, 6, 14, 30], auth_path_node_indices(16, 0));\n//         assert_eq!(vec![1, 6, 14, 30], auth_path_node_indices(16, 1));\n//         assert_eq!(vec![5, 3, 14, 30], auth_path_node_indices(16, 2));\n//         assert_eq!(vec![4, 3, 14, 30], auth_path_node_indices(16, 3));\n//         assert_eq!(vec![9, 13, 7, 30], auth_path_node_indices(16, 4));\n//         assert_eq!(vec![8, 13, 7, 30], auth_path_node_indices(16, 5));\n//         assert_eq!(vec![12, 10, 7, 30], auth_path_node_indices(16, 6));\n//         assert_eq!(vec![11, 10, 7, 30], auth_path_node_indices(16, 7));\n//         assert_eq!(vec![17, 21, 29, 15], auth_path_node_indices(16, 8));\n//         assert_eq!(vec![16, 21, 29, 15], auth_path_node_indices(16, 9));\n//         assert_eq!(vec![20, 18, 29, 15], auth_path_node_indices(16, 10));\n//         assert_eq!(vec![19, 18, 29, 15], auth_path_node_indices(16, 11));\n//         assert_eq!(vec![24, 28, 22, 15], auth_path_node_indices(16, 12));\n//         assert_eq!(vec![23, 28, 22, 15], auth_path_node_indices(16, 13));\n//         assert_eq!(vec![27, 25, 22, 15], auth_path_node_indices(16, 14));\n//         assert_eq!(vec![26, 25, 22, 15], auth_path_node_indices(16, 15));\n\n//         assert_eq!(Vec::<u64>::new(), auth_path_node_indices(1, 0));\n//         assert_eq!(vec![2], auth_path_node_indices(2, 0));\n//         assert_eq!(vec![1], auth_path_node_indices(2, 1));\n\n//         let mut expected = vec![];\n//         for i in 1..63 {\n//             expected.push((1u64 << (i + 1)) - 2);\n//             assert_eq!(\n//                 expected,\n//                 auth_path_node_indices(1 << i, 0),\n//                 \"must match for i={i}\"\n//             );\n//         }\n//     }\n\n//     #[proptest]\n//     fn right_lineage_length_from_node_index_does_not_crash(node_index: u64) {\n//         right_lineage_length_from_node_index(node_index);\n//     }\n\n//     #[proptest]\n//     fn leftmost_ancestor_does_not_crash(node_index: u64) {\n//         leftmost_ancestor(node_index);\n//     }\n\n//     #[proptest]\n//     fn right_lineage_length_and_own_height_does_not_crash(node_index: u64) {\n//         right_lineage_length_and_own_height(node_index);\n//     }\n// }\n"
  },
  {
    "path": "tools/garaga_rs/src/crypto/mmr/shared_basic.rs",
    "content": "// use crate::prelude::*;\n\nuse crate::crypto::digest::{Digest, HashFunction};\nuse crate::crypto::merkle_tree::MerkleTree;\nuse crate::crypto::mmr::mmr_membership_proof::MmrMembershipProof;\n\npub(crate) const USIZE_TO_U64_ERR: &str =\n    \"internal error: type `usize` should have at most 64 bits\";\npub(crate) const U32_TO_USIZE_ERR: &str =\n    \"internal error: type `usize` should have at least 32 bits\";\n\n#[inline]\npub fn left_child(node_index: u64, height: u32) -> u64 {\n    node_index - (1 << height)\n}\n\n#[inline]\npub fn right_child(node_index: u64) -> u64 {\n    node_index - 1\n}\n\n/// Given the leaf index in the MMR as well as the number of leafs in the MMR,\n/// compute that leaf's Merkle tree index and its peak index.\n///\n/// For an explanation of the terminology, see [`Mmr`].\n///\n/// # Panics\n///\n/// - if the leaf index is larger than or equal to the number of leafs\n#[inline]\npub fn leaf_index_to_mt_index_and_peak_index(leaf_index: u64, num_leafs: u64) -> (u64, u32) {\n    // This algorithm works by first identifying how high the local Merkle tree is. This is\n    // the Merkle tree that the leaf with `leaf_index` is part of. Then it finds the peak\n    // index which identifies which of the N Merkle trees the leaf is part of.\n    //\n    // The height of local tree is the lowest index (from least significant) of the bits where\n    // there is a discrepancy between `leaf_index` and `num_leafs`. The discrepant bits can\n    // be identified with a xor.\n    //\n    // The bit-decomposition of `num_leafs` shows the height of the involved Merkle trees.\n    // The number of ones in this bit-decomposition is the number of Merkle trees in the MMR;\n    // the index of each one (counting from least-significant bit) is the height of that\n    // Merkle tree. So counting the ones before and after the discrepancy bit reveals which\n    // Merkle tree the leaf is in. This value is called \"peak index\" since we have a list\n    // of digests that are the peaks of the MMR, and the peak index shows which element of\n    // that list is the Merkle root that its authentication path refers to.\n    assert!(\n        leaf_index < num_leafs,\n        \"Leaf index must be strictly smaller than the number of leafs\"\n    );\n\n    // get node index, as if this was a Merkle tree\n    let discrepancies = leaf_index ^ num_leafs;\n    let local_mt_height = discrepancies.ilog2();\n    let local_mt_num_leafs = 1 << local_mt_height;\n    let remainder_bitmask = local_mt_num_leafs - 1;\n    let local_leaf_index = remainder_bitmask & leaf_index;\n    let mt_node_index = local_leaf_index + local_mt_num_leafs;\n\n    // peak index\n    let num_peaks = num_leafs.count_ones();\n    let num_peaks_smaller_or_equal_own_peak = (num_leafs & remainder_bitmask).count_ones();\n\n    // subtract one to go from cardinal to ordinal\n    let peak_index = num_peaks - num_peaks_smaller_or_equal_own_peak - 1;\n\n    (mt_node_index, peak_index)\n}\n\n#[inline]\n/// The number of parents that need to be added when a new leaf is inserted.\npub fn right_lineage_length_from_leaf_index(leaf_index: u64) -> u32 {\n    leaf_index.trailing_ones()\n}\n\n/// Return the new peaks of the MMR after adding `new_leaf` as well as the membership\n/// proof for the added leaf.\n///\n/// # Panics\n///\n/// - if the `old_peaks` and the `old_num_leafs` are inconsistent\npub fn calculate_new_peaks_from_append<H: HashFunction>(\n    old_num_leafs: u64,\n    old_peaks: Vec<Digest<H>>,\n    new_leaf: Digest<H>,\n) -> (Vec<Digest<H>>, MmrMembershipProof<H>) {\n    assert_eq!(\n        old_peaks.len(),\n        usize::try_from(old_num_leafs.count_ones()).expect(U32_TO_USIZE_ERR)\n    );\n\n    let mut peaks = old_peaks;\n    peaks.push(new_leaf);\n    let mut authentication_path = vec![];\n    for _ in 0..right_lineage_length_from_leaf_index(old_num_leafs) {\n        let in_progress_peak = peaks.pop().unwrap();\n        let previous_peak = peaks.pop().unwrap();\n        authentication_path.push(previous_peak);\n        peaks.push(Digest::<H>::from_element(H::hash_pair(\n            &previous_peak.data,\n            &in_progress_peak.data,\n        )));\n    }\n\n    (peaks, MmrMembershipProof::new(authentication_path))\n}\n\n/// Calculate a new peak list given the mutation of a leaf\n/// The new peak list will only (max) have *one* element different\n/// from `old_peaks`\n///\n/// # Panics\n///\n/// Panics if the `membership_proof`'s authentication path is of insufficient\n/// length. This can only happen if the `membership_proof` is invalid (but\n/// there are other ways in which it can be invalid, too).\npub fn calculate_new_peaks_from_leaf_mutation<H: HashFunction>(\n    old_peaks: &[Digest<H>],\n    num_leafs: u64,\n    new_leaf: Digest<H>,\n    leaf_index: u64,\n    membership_proof: &MmrMembershipProof<H>,\n) -> Vec<Digest<H>> {\n    let merkle_tree_root_index =\n        u64::try_from(MerkleTree::<H>::ROOT_INDEX).expect(USIZE_TO_U64_ERR);\n\n    let (mut acc_mt_index, peak_index) =\n        leaf_index_to_mt_index_and_peak_index(leaf_index, num_leafs);\n\n    let mut acc_hash = new_leaf;\n    let mut authentication_path = membership_proof.authentication_path.iter();\n    while acc_mt_index > merkle_tree_root_index {\n        let &ap_element = authentication_path.next().unwrap();\n        let accumulator_is_left_child = acc_mt_index % 2 == 0;\n        if accumulator_is_left_child {\n            acc_hash = Digest::<H>::from_element(H::hash_pair(&acc_hash.data, &ap_element.data));\n        } else {\n            acc_hash = Digest::<H>::from_element(H::hash_pair(&ap_element.data, &acc_hash.data));\n        }\n\n        acc_mt_index /= 2;\n    }\n    debug_assert_eq!(merkle_tree_root_index, acc_mt_index);\n\n    let mut calculated_peaks: Vec<Digest<H>> = old_peaks.to_vec();\n    calculated_peaks[peak_index as usize] = acc_hash;\n\n    calculated_peaks\n}\n\n// #[cfg(test)]\n// mod mmr_test {\n//     use proptest::collection::vec;\n//     use proptest_arbitrary_interop::arb;\n//     use test_strategy::proptest;\n\n//     use super::*;\n\n//     #[test]\n//     fn right_lineage_length_from_leaf_index_test() {\n//         assert_eq!(0, right_lineage_length_from_leaf_index(0));\n//         assert_eq!(1, right_lineage_length_from_leaf_index(1));\n//         assert_eq!(0, right_lineage_length_from_leaf_index(2));\n//         assert_eq!(2, right_lineage_length_from_leaf_index(3));\n//         assert_eq!(0, right_lineage_length_from_leaf_index(4));\n//         assert_eq!(1, right_lineage_length_from_leaf_index(5));\n//         assert_eq!(0, right_lineage_length_from_leaf_index(6));\n//         assert_eq!(3, right_lineage_length_from_leaf_index(7));\n//         assert_eq!(0, right_lineage_length_from_leaf_index(8));\n//         assert_eq!(1, right_lineage_length_from_leaf_index(9));\n//         assert_eq!(0, right_lineage_length_from_leaf_index(10));\n//         assert_eq!(32, right_lineage_length_from_leaf_index((1 << 32) - 1));\n//         assert_eq!(63, right_lineage_length_from_leaf_index((1 << 63) - 1));\n//     }\n\n//     #[test]\n//     fn leaf_index_to_mt_index_test() {\n//         // 1 leaf\n//         assert_eq!((1, 0), leaf_index_to_mt_index_and_peak_index(0, 1));\n\n//         // 2 leafs\n//         assert_eq!((2, 0), leaf_index_to_mt_index_and_peak_index(0, 2));\n//         assert_eq!((3, 0), leaf_index_to_mt_index_and_peak_index(1, 2));\n\n//         // 3 leafs\n//         assert_eq!((2, 0), leaf_index_to_mt_index_and_peak_index(0, 3));\n//         assert_eq!((3, 0), leaf_index_to_mt_index_and_peak_index(1, 3));\n//         assert_eq!((1, 1), leaf_index_to_mt_index_and_peak_index(2, 3));\n\n//         // 4 leafs\n//         assert_eq!((4, 0), leaf_index_to_mt_index_and_peak_index(0, 4));\n//         assert_eq!((5, 0), leaf_index_to_mt_index_and_peak_index(1, 4));\n//         assert_eq!((6, 0), leaf_index_to_mt_index_and_peak_index(2, 4));\n//         assert_eq!((7, 0), leaf_index_to_mt_index_and_peak_index(3, 4));\n\n//         // 14 leafs\n//         assert_eq!((8, 0), leaf_index_to_mt_index_and_peak_index(0, 14));\n//         assert_eq!((9, 0), leaf_index_to_mt_index_and_peak_index(1, 14));\n//         assert_eq!((10, 0), leaf_index_to_mt_index_and_peak_index(2, 14));\n//         assert_eq!((11, 0), leaf_index_to_mt_index_and_peak_index(3, 14));\n//         assert_eq!((12, 0), leaf_index_to_mt_index_and_peak_index(4, 14));\n//         assert_eq!((13, 0), leaf_index_to_mt_index_and_peak_index(5, 14));\n//         assert_eq!((14, 0), leaf_index_to_mt_index_and_peak_index(6, 14));\n//         assert_eq!((15, 0), leaf_index_to_mt_index_and_peak_index(7, 14));\n//         assert_eq!((4, 1), leaf_index_to_mt_index_and_peak_index(8, 14));\n//         assert_eq!((5, 1), leaf_index_to_mt_index_and_peak_index(9, 14));\n//         assert_eq!((6, 1), leaf_index_to_mt_index_and_peak_index(10, 14));\n//         assert_eq!((7, 1), leaf_index_to_mt_index_and_peak_index(11, 14));\n//         assert_eq!((7, 1), leaf_index_to_mt_index_and_peak_index(11, 14));\n\n//         // 22 leafs\n//         assert_eq!((16, 0), leaf_index_to_mt_index_and_peak_index(0, 23));\n//         assert_eq!((17, 0), leaf_index_to_mt_index_and_peak_index(1, 23));\n//         assert_eq!((18, 0), leaf_index_to_mt_index_and_peak_index(2, 23));\n//         assert_eq!((19, 0), leaf_index_to_mt_index_and_peak_index(3, 23));\n//         assert_eq!((30, 0), leaf_index_to_mt_index_and_peak_index(14, 23));\n//         assert_eq!((31, 0), leaf_index_to_mt_index_and_peak_index(15, 23));\n//         assert_eq!((4, 1), leaf_index_to_mt_index_and_peak_index(16, 23));\n//         assert_eq!((5, 1), leaf_index_to_mt_index_and_peak_index(17, 23));\n//         assert_eq!((6, 1), leaf_index_to_mt_index_and_peak_index(18, 23));\n//         assert_eq!((7, 1), leaf_index_to_mt_index_and_peak_index(19, 23));\n//         assert_eq!((2, 2), leaf_index_to_mt_index_and_peak_index(20, 23));\n//         assert_eq!((3, 2), leaf_index_to_mt_index_and_peak_index(21, 23));\n//         assert_eq!((1, 3), leaf_index_to_mt_index_and_peak_index(22, 23));\n\n//         // 32 leafs\n//         for i in 0..32 {\n//             assert_eq!((32 + i, 0), leaf_index_to_mt_index_and_peak_index(i, 32));\n//         }\n\n//         // 33 leafs\n//         for i in 0..32 {\n//             assert_eq!((32 + i, 0), leaf_index_to_mt_index_and_peak_index(i, 33));\n//         }\n//         assert_eq!((1, 1), leaf_index_to_mt_index_and_peak_index(32, 33));\n\n//         // 34 leafs\n//         for i in 0..32 {\n//             assert_eq!((32 + i, 0), leaf_index_to_mt_index_and_peak_index(i, 34));\n//         }\n//         assert_eq!((2, 1), leaf_index_to_mt_index_and_peak_index(32, 34));\n//         assert_eq!((3, 1), leaf_index_to_mt_index_and_peak_index(33, 34));\n\n//         // 35 leafs\n//         for i in 0..32 {\n//             assert_eq!((32 + i, 0), leaf_index_to_mt_index_and_peak_index(i, 35));\n//         }\n//         assert_eq!((2, 1), leaf_index_to_mt_index_and_peak_index(32, 35));\n//         assert_eq!((3, 1), leaf_index_to_mt_index_and_peak_index(33, 35));\n//         assert_eq!((1, 2), leaf_index_to_mt_index_and_peak_index(34, 35));\n\n//         // 36 leafs\n//         for i in 0..32 {\n//             assert_eq!((32 + i, 0), leaf_index_to_mt_index_and_peak_index(i, 36));\n//         }\n//         assert_eq!((4, 1), leaf_index_to_mt_index_and_peak_index(32, 36));\n//         assert_eq!((5, 1), leaf_index_to_mt_index_and_peak_index(33, 36));\n//         assert_eq!((6, 1), leaf_index_to_mt_index_and_peak_index(34, 36));\n//         assert_eq!((7, 1), leaf_index_to_mt_index_and_peak_index(35, 36));\n\n//         // 37 leafs\n//         for i in 0..32 {\n//             assert_eq!((32 + i, 0), leaf_index_to_mt_index_and_peak_index(i, 37));\n//         }\n//         assert_eq!((4, 1), leaf_index_to_mt_index_and_peak_index(32, 37));\n//         assert_eq!((5, 1), leaf_index_to_mt_index_and_peak_index(33, 37));\n//         assert_eq!((6, 1), leaf_index_to_mt_index_and_peak_index(34, 37));\n//         assert_eq!((7, 1), leaf_index_to_mt_index_and_peak_index(35, 37));\n//         assert_eq!((1, 2), leaf_index_to_mt_index_and_peak_index(36, 37));\n\n//         for i in (10..63).map(|x| 1 << x) {\n//             assert_eq!((14 + i, 0), leaf_index_to_mt_index_and_peak_index(14, i));\n//             assert_eq!((3, 2), leaf_index_to_mt_index_and_peak_index(i + 9, i + 11));\n//             assert_eq!(\n//                 (1, 3),\n//                 leaf_index_to_mt_index_and_peak_index(i + 10, i + 11)\n//             );\n//         }\n//     }\n\n//     #[test]\n//     fn peak_index_test() {\n//         let peak_index = |leaf_index, num_leafs| {\n//             let (_, peak_index) = leaf_index_to_mt_index_and_peak_index(leaf_index, num_leafs);\n//             peak_index\n//         };\n\n//         assert_eq!(0, peak_index(0, 1));\n\n//         assert_eq!(0, peak_index(0, 2));\n//         assert_eq!(0, peak_index(1, 2));\n\n//         assert_eq!(0, peak_index(0, 3));\n//         assert_eq!(0, peak_index(1, 3));\n//         assert_eq!(1, peak_index(2, 3));\n\n//         assert_eq!(0, peak_index(0, 4));\n//         assert_eq!(0, peak_index(1, 4));\n//         assert_eq!(0, peak_index(2, 4));\n//         assert_eq!(0, peak_index(3, 4));\n\n//         assert_eq!(0, peak_index(0, 5));\n//         assert_eq!(0, peak_index(1, 5));\n//         assert_eq!(0, peak_index(2, 5));\n//         assert_eq!(0, peak_index(3, 5));\n//         assert_eq!(1, peak_index(4, 5));\n\n//         assert_eq!(0, peak_index(0, 7));\n//         assert_eq!(0, peak_index(1, 7));\n//         assert_eq!(0, peak_index(2, 7));\n//         assert_eq!(0, peak_index(3, 7));\n//         assert_eq!(1, peak_index(4, 7));\n//         assert_eq!(1, peak_index(5, 7));\n//         assert_eq!(2, peak_index(6, 7));\n\n//         assert_eq!(0, peak_index(0, (1 << 32) - 1));\n//         assert_eq!(0, peak_index(1, (1 << 32) - 1));\n\n//         assert_eq!(0, peak_index((0b01 << 31) - 1, (0b10 << 31) - 1));\n//         assert_eq!(1, peak_index(0b01 << 31, (0b10 << 31) - 1));\n\n//         assert_eq!(1, peak_index((0b011 << 30) - 1, (0b100 << 30) - 1));\n//         assert_eq!(2, peak_index(0b011 << 30, (0b100 << 30) - 1));\n\n//         assert_eq!(1, peak_index((0b0101 << 29) - 1, (0b1000 << 29) - 1));\n//         assert_eq!(2, peak_index((0b0111 << 29) - 1, (0b1000 << 29) - 1));\n//     }\n\n//     #[test]\n//     fn merkle_tree_and_peak_indices_can_be_computed_for_large_mmrs() {\n//         leaf_index_to_mt_index_and_peak_index(0, u64::MAX);\n//         leaf_index_to_mt_index_and_peak_index(u64::MAX - 1, u64::MAX);\n//     }\n\n//     #[proptest]\n//     fn right_lineage_length_from_leaf_index_does_not_crash(\n//         #[strategy(0..=u64::MAX >> 1)] leaf_index: u64,\n//     ) {\n//         right_lineage_length_from_leaf_index(leaf_index);\n//     }\n\n//     #[proptest]\n//     fn calculate_new_peaks_from_append_does_not_crash(\n//         #[strategy(0..u64::MAX >> 1)] old_num_leafs: u64,\n//         #[strategy(vec(arb(), #old_num_leafs.count_ones() as usize))] old_peaks: Vec<Digest>,\n//         #[strategy(arb())] new_leaf: Digest,\n//     ) {\n//         calculate_new_peaks_from_append(old_num_leafs, old_peaks, new_leaf);\n//     }\n\n//     #[test]\n//     fn calculate_new_peaks_from_append_to_empty_mmra_does_not_crash() {\n//         calculate_new_peaks_from_append(0, vec![], rand::random());\n//     }\n// }\n"
  },
  {
    "path": "tools/garaga_rs/src/crypto/poseidon_bn254.rs",
    "content": "use crate::definitions::{FieldElement, GrumpkinPrimeField};\nuse lazy_static::lazy_static;\n\ntype F = GrumpkinPrimeField;\n\n// Poseidon hash parameters.\nconst T: usize = 3; // Width of the state\nconst N_ROUNDS_F: usize = 8; // Number of full rounds\nconst N_ROUNDS_P: usize = 57; // Number of partial rounds\n\n// Precompute and cache the Poseidon constants.\nlazy_static! {\n    static ref POSEIDON_C_VEC: Vec<FieldElement<F>> = POSEIDON_C\n        .iter()\n        .copied()\n        .map(FieldElement::from_hex_unchecked)\n        .collect();\n    static ref POSEIDON_M_MAT: Vec<Vec<FieldElement<F>>> = POSEIDON_M\n        .iter()\n        .map(|row| row\n            .iter()\n            .copied()\n            .map(FieldElement::from_hex_unchecked)\n            .collect())\n        .collect();\n    static ref POSEIDON_P_MAT: Vec<Vec<FieldElement<F>>> = POSEIDON_P\n        .iter()\n        .map(|row| row\n            .iter()\n            .copied()\n            .map(FieldElement::from_hex_unchecked)\n            .collect())\n        .collect();\n    static ref POSEIDON_S_VEC: Vec<FieldElement<F>> = POSEIDON_S\n        .iter()\n        .copied()\n        .map(FieldElement::from_hex_unchecked)\n        .collect();\n}\n\n/// Computes the Poseidon hash for BN254 given two inputs.\npub fn poseidon_hash_bn254(x: &FieldElement<F>, y: &FieldElement<F>) -> FieldElement<F> {\n    let mut state = vec![FieldElement::zero(), *x, *y];\n\n    // Initial Ark\n    state = ark(&state, &POSEIDON_C_VEC, 0);\n\n    // First half of full rounds.\n    for r in 0..(N_ROUNDS_F / 2 - 1) {\n        state = state.iter().map(sigma).collect();\n        state = ark(&state, &POSEIDON_C_VEC, (r + 1) * T);\n        state = mix(&state, &POSEIDON_M_MAT);\n    }\n\n    // Middle round.\n    state = state.iter().map(sigma).collect();\n    state = ark(&state, &POSEIDON_C_VEC, (N_ROUNDS_F / 2) * T);\n    state = mix(&state, &POSEIDON_P_MAT);\n\n    // Partial rounds.\n    for r in 0..N_ROUNDS_P {\n        state[0] = sigma(&state[0]);\n        let mut new_state = vec![state[0] + POSEIDON_C_VEC[(N_ROUNDS_F / 2 + 1) * T + r]];\n        new_state.extend_from_slice(&state[1..]);\n        state = mix_s(&new_state, &POSEIDON_S_VEC, r);\n    }\n\n    // Second half of full rounds.\n    for r in 0..(N_ROUNDS_F / 2 - 1) {\n        state = state.iter().map(sigma).collect();\n        state = ark(\n            &state,\n            &POSEIDON_C_VEC,\n            (N_ROUNDS_F / 2 + 1) * T + N_ROUNDS_P + r * T,\n        );\n        state = mix(&state, &POSEIDON_M_MAT);\n    }\n\n    // Final round.\n    state = state.iter().map(sigma).collect();\n\n    mix_last(&state, &POSEIDON_M_MAT)\n}\n\n// --- Utility functions ---\n\nfn sigma(value: &FieldElement<F>) -> FieldElement<F> {\n    // Computes x^5 = x^2 * x^2 * x.\n    let x2 = value * value;\n    let x4 = x2 * x2;\n    x4 * value\n}\n\nfn ark(\n    state: &[FieldElement<F>],\n    constants: &[FieldElement<F>],\n    offset: usize,\n) -> Vec<FieldElement<F>> {\n    state\n        .iter()\n        .enumerate()\n        .map(|(i, s)| s + constants[i + offset])\n        .collect()\n}\n\nfn mix(state: &[FieldElement<F>], matrix: &[Vec<FieldElement<F>>]) -> Vec<FieldElement<F>> {\n    (0..T)\n        .map(|i| {\n            state\n                .iter()\n                .enumerate()\n                .fold(FieldElement::zero(), |acc, (j, s)| acc + (matrix[j][i] * s))\n        })\n        .collect()\n}\n\nfn mix_last(state: &[FieldElement<F>], matrix: &[Vec<FieldElement<F>>]) -> FieldElement<F> {\n    state\n        .iter()\n        .enumerate()\n        .fold(FieldElement::zero(), |acc, (j, s)| acc + (matrix[j][0] * s))\n}\n\nfn mix_s(\n    state: &[FieldElement<F>],\n    s_constants: &[FieldElement<F>],\n    r: usize,\n) -> Vec<FieldElement<F>> {\n    let mut result = vec![state\n        .iter()\n        .enumerate()\n        .fold(FieldElement::zero(), |acc, (i, s)| {\n            acc + (s_constants[(T * 2 - 1) * r + i] * s)\n        })];\n\n    for i in 1..T {\n        result.push(state[i] + (state[0] * s_constants[(T * 2 - 1) * r + T + i - 1]));\n    }\n    result\n}\n\n// --- Poseidon constant definitions (unchanged) ---\n\nconst POSEIDON_M: [[&str; 3]; 3] = [\n    [\n        \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n        \"0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771\",\n        \"0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7\",\n    ],\n    [\n        \"0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0\",\n        \"0x2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe23\",\n        \"0x176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911\",\n    ],\n    [\n        \"0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d\",\n        \"0x101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa\",\n        \"0x19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0\",\n    ],\n];\n\nconst POSEIDON_P: [[&str; 3]; 3] = [\n    [\n        \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n        \"0x1e6f20a11d1e31e43f83dcedddb9a0236203f5f24ae72c925a8a79a66831f51d\",\n        \"0x1bd8c528472e57bdc722a141f8785694484f426725403ae24084e3027e782467\",\n    ],\n    [\n        \"0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0\",\n        \"0x2d51ba82c8073c6d6bacf1ad5e56655b7143625b0a9e9c3190527a1a5f05079a\",\n        \"0x1b07d6d51e6f7e97e0ab10fc2e51ea83ce0611f940ff0731b5f927fe8d6a77c9\",\n    ],\n    [\n        \"0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d\",\n        \"0x11e12a40d262ae88e8376f62d19edf43093cdef1ccf34d985a3e53f0bc5765a0\",\n        \"0x221c170e4d02a2479c6f3e47b5ff55781574f980d89038308a3ef37cce8463bd\",\n    ],\n];\n\nconst POSEIDON_S: [&str; 285] = [\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x3f0815ab463f1b76ee25a9b8768b3231a89752f427f4f063ab718e707576b31\",\n    \"0x15648bf46f60d82954c7e33029b3617357012a3d3b1d34c8e008859f1dbfb317\",\n    \"0x127e00c2253de07818ca7f2eafdd7564d05ea850cf61f1daa0cfefbf7fbfba85\",\n    \"0x66365afd18a41ef9382fc0b1d265cb4d3ce470a8cbbb878f7d48051630747bd\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x219d14f823513140dc69a96f7fe7e086f4fa24c84e57dcf2b099715c4404aae7\",\n    \"0x3a30bfbbf2cb86d4a6a63a8050d91f9f14f4d33696d37ebaefa9ac2302132d5\",\n    \"0x2121bbcdeaa33a35b0270fb7d5c9f94edad5a84d74b06e3385104b0b41935bcc\",\n    \"0x196b544fbeb0a792cfbb82c289e579b7cd5580c2e338a389d053ef8b3d10e70e\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2809c3a1547c0cee89c1db270ef479c26973ec73edb4bd4e7d907ea0202f560f\",\n    \"0x11c34446b083ef92ca157585a02b8b342a4c67175b31f4b5d40d4e96dfc5c8f1\",\n    \"0x253ea0b33a8bf3b2367c030e3289cbe0f6242ad7709d90b86d9d8026e2e39925\",\n    \"0x30467dc1930f6afe90c89d4007ad29fc4f5a19c006d1030438c16df85637bd5f\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2f9d4b55495f7e377e20e6f5a3a88af7aa6a536458b38bbe13c8ebfbbba54f44\",\n    \"0x1d9e9d5c736e3151f11d36d499e7e093d8ee2353be18aad54cfd03ff0feac4b8\",\n    \"0x124b617b43e598f9ebf622f7823a3de7d1bfedb87e097c315f343de301e54841\",\n    \"0x198e7cfc66ae45774055cf073bedc945a5f9c5b19cae08d789cc5748ffe199b2\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2eac25b3498dfadffd124ab3aad57789eb945ba57443099c5bb6c27ed977fe24\",\n    \"0x1ee02c175cdfe1871b378305c1bb9c904e8af1d4454ed3550b3c6ab5f4f90126\",\n    \"0x616f8c34c607266b29ea8f9d2dfa47ff6fbb1d9745c48609fa98301d0f679d5\",\n    \"0x181d68b0a188504958b9f19cbbdb972a853e51ed385e4883a43a42832803370b\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2d5397ce863464a25d6b7f5b015d579181d1ce2f24cbabf6059e9327f5ba7004\",\n    \"0x15bf817491b94d71e8912940cc0b80277713e7d32da2b6591724d8dbd4bc2618\",\n    \"0x2a7cbd11460b177ab76feab28b69485ac8cc687740bc910994a3827d29c08714\",\n    \"0xf7cd5ffa4661730ab56e447fae5cc1763cb462da80a85614c237b290de9d502\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0xe0766004b4c4176eb13273508eb6575f768137d86d305be644ce04531008100\",\n    \"0x625fa7145813481f6d148be6b9c8bb7b54ee3c1afac00104e1f763000b9924c\",\n    \"0x7c5472508b459916ee0f5461aad2e0b19cd9c7b184f515b65136318ce2c6a5\",\n    \"0x567375470d189b693ac77ab3fb7557231d53073951d43c54685879cb7a89fcb\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x1d0406bcbec83f8d5165f56c063e42108ad21f51ea4bfc71601174ba5c7b8bcc\",\n    \"0xc02b18eef22332d280a8aa1f86405f3375f06342f8696ee7c73b46c63272cb7\",\n    \"0x17c1fc174cd9a6ebeaa7add2f801a664823509ad4fd1b15aad053a55ad6da4cf\",\n    \"0x5f843c23024eb1dab7ebbc86709a021aaa6caf433f7ed258a08638e9584b32d\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x22df2420697ca28b5cc51c53165e002727b45ccd90a55c87589f792f0ad8cb37\",\n    \"0x2f1438303a7b49d473400aaedf0f48009fd3af804b76be86417588efc4d7302a\",\n    \"0x2323d5fcf2da8965c6b2b7b4fbf9a24bbaa7f4dccd35d5ca6155c5463093b23b\",\n    \"0x26c85b9dfbbe48fe83b753a5e7336b9f40f7b961e9c54f94e37700073d4d26e\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x31511000251ec86feb38b5ab4e335f070b271df4c20979528e41d65384c318f\",\n    \"0x18e588324a9bbaacb42fa69e5d90a0c0e27cd16b941e34a60ff5df9a26c03af1\",\n    \"0x2642b5d8e16b953b070635775c8d3c9498357d6ad9bef2e7d99f03c10ea1f95f\",\n    \"0x21fc313ba11c60e8e84ff60db906a0f031189b0b48335c4221f909aef836c133\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2d3562e3d4b42bc6890b698cc6ab89f7311298bcbac6e4e9f2f4d93d06dae151\",\n    \"0xa74ef541d360e842e3e0b6ff7e5c7c77934a5f67616f01c189d886dfd2e0808\",\n    \"0x140564b53e0a812ac3983d6e3b433afa43f434087d9e754967c2c9b1b02caf8a\",\n    \"0x14709e32d98ae4cd18b400181e71ab9759c436c8e83fa6993adb6f2db6bba9d0\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x734b2366c59e394423f179e1266dd392372db4f2dba651f4a619a4b52bdc010\",\n    \"0x11fb2d705c94b08d5ad3e3c5fb6629abe963ed92913642c7d02d7e71088fd2d4\",\n    \"0x27d03abf5c1f290e5d715eba19371050ef6eb7f78fd84be834e4cc3618059484\",\n    \"0x13ed9e9e6b452df27fb3353cfc2cd63ebe817f212a39c6a8bb9b441ac1395861\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x1319c51cf37aaa10246cdaaa04a12e88795de4452604263a7c5b79ab99cbd23c\",\n    \"0xbca25588d187b7f9dad839f2c8cb526a4cf444eebbd0e715b6cea019ac3f2\",\n    \"0x1d837ea0341c5964181226874b923cd01a069b493f02f7a3c01be23cf51d593f\",\n    \"0x1b41ce9ed3634cbd42c427ce4c5c83774149e2a6dbd25f24012090db7de4e7f9\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x671f0e3b674ae7cddc790ecc4e946f4bca74b98b78a127c7b56bd6673f1ce1f\",\n    \"0x19fc073797a39b272e40cd30615f55fefeb682c1ac14143071d0449a5426e4e\",\n    \"0x17bee47d262a497fd1f7c5c6d5a7c70fa4209480bf5d97311c5096619e9fd13\",\n    \"0x2073cff92d3141b480763539cff2978a4c7944721cc937ba00cc8527274471e3\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x3bd7b3e2c1885877f43182a55a91d48f9c58d152e730fe2c7aa46b1fa663baa\",\n    \"0x226ebc9a538b5bbaff128edfb9bbf5fa0ceb100719a14c8dfed9ffbbbad9b6b7\",\n    \"0xd395f0b08b9fede0373a06e1552c0e634a49572af1d830dc6e394e8a5d3b21a\",\n    \"0x28242439b524540a30d49b68e19e31ba5284bd3bcf1e0f2f41f77d5331f99ffa\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x370d6fa19eaac142d2de034801ab85e0b457e129e91f929754b48c6154d4df6\",\n    \"0x9a16f573b3280f390762abf269579eaa37939bc0c753feb0a2b2e0bcbde1659\",\n    \"0x2228e360fb5b162b496ac443f98127ee3c0021a690b71b268d99981368231d97\",\n    \"0x7e42c2ca633d2c49fabf83991476d209431e34d8032b6a1b97675f3c567f944\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2ce12d7269663770c3cab85a6215a32eed35fda1d8e9d753a50fe96097724a9f\",\n    \"0x3d7427704c61e2009eeb9b1b45a0125084bc4daf70973a7ba0b2231815b15de\",\n    \"0x10f8abf0764185861c1267fcf4b4b33ca096fb4ddc4626732d86921e553e69c6\",\n    \"0x17ccaf6f26f7267a025d7cb456e3aeb251a1a620aaf6568a5c95644c7c5914cc\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x63bb306b96310051385c3ce00ca820ad0e3651a6e55754d59de6df28cea4d51\",\n    \"0x1f761ee5553c5e86f2c304a18095ab7403242e0b65e608bc920cf993a4169974\",\n    \"0xdc5f00bbfd7c1d9a23c0e666859ba6564bcde8761b45717cd6bdfc09de4e8f2\",\n    \"0x6de511520e277b7df07c3536381c13eb44cf790a230abc391089760bfc40ef2\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2a134348c8660efcf9ef54863e70528a1fd4481b50a1fe21f24a8c06e10cca03\",\n    \"0xaeb5023bbb9a64c4bd80089e99edf8ed5f6f1ffb63a7dbba1b33520bcfce37b\",\n    \"0x141a6d0810366ae225ecb5f0bfdc9995406c5960ab26155836fc51fb7cb933d1\",\n    \"0x9d2ea05ef54dadbbe776f404dca6626cc0b2539990bc0b8bfe87497f1e2c5b7\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x1e56d244a8e41be5d104d5f8ef70891d22d4a5432441bfe8ff1a16e91719cdde\",\n    \"0x1d4f020c57c4f14aec908b2f99b5c4fd5e09447fa85c2fd68ba4d5c5f50c7b49\",\n    \"0x763911a3a92a4f0e09f4e14cd03398d8d82a1e09db80fb0ee1e833764c18fd3\",\n    \"0x12857275be2fe6b9ba2ec68f9061643f1fc5d9a2c5e47e55684366e54b302946\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2ed11ccd2e2e2376655ffe9a96c4b81adc0a60353c5d83d4d0ebf50d1bbf87c0\",\n    \"0x3e31de8958e82645b320d5e3e966ef4726d5b1c2cfbb4acd288a21543c6d594\",\n    \"0x11e880dfefdbd08858ae890046533d58da28a608d7e905366ec2ca4a36e71963\",\n    \"0x1835b275deaed2d00704a9c3cc21ab7a44a34662978d53c190dc25e969a507b2\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x68b75315e25ed4ace5a4a9480e1d82ce5d44f76f1324240419f372ff8d3c3f5\",\n    \"0x1b7ef7d04aec73d62b052d2ad12b92a4268fccd795c839d698ad3b22823274d1\",\n    \"0x28c0c848022a90606f6193ff5501b57216b670727f4b8efcc240d30bbaa9f03f\",\n    \"0x13bda49296cbcc51686a7bfb1c39f3f254370985a16660efd6e5d82d4f068e1b\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2e7987ea8204389d11eb10b34265e378a945729f86c3e0e2fd38490d3a594141\",\n    \"0x826d4a2324ad3aa4b2b45c10a190fedef702aeffda3226ce5415fffd03935c8\",\n    \"0x2dbeee85eaeaa9fa3675ef541c9df7bb964a85435c3b59685f93b434036ded\",\n    \"0x227ee7a945edaee6919418ecb3279b11e6fa44f5f5c5abfb966a4be599cb86c7\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x1d0a6d1a9519877805ac90d696faf2a5ffadc23986de8c698d541471c7244220\",\n    \"0x2208aaba508ae816da4f333b7854fbbcd10eea1db284ec3e9f4de02b25f6e9d4\",\n    \"0x28a58901035b2c99e36a7d29b587a215c9e59268e2f8e01a175720971ccf04ec\",\n    \"0x112f6d8d42b0a0d123a07865ca1376df317a2a14ffc0191226f38a8adfd6238\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x8c6eb19c016d1833174dda182d266d5c727f97fb4d01f1daf906b6d3c6e2308\",\n    \"0x1359d2d6c8b5a116d0b38b95f9c642df75b1be9a48c8698ecfea9103f73f1879\",\n    \"0x10c5052ec67ab9b6a467c1cc1878d91aaa07aacf7725f8a5ed42b699c4af3ca7\",\n    \"0x583c4d292d54f3cdb708803e6338fc6afdb188d5d4e9f060193823684c96c75\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2d94a1c55be382151a4054c5b96322e7bcd1fe2b3e076e16ee2c18bfc06f57b4\",\n    \"0x15e3402fdde8770fb997369579c1b1703ef77c671927ead80dbc64dd2211c3ec\",\n    \"0x185be98784817f22f7b21e6b867d5a71b5000bef8bb902eb302677e20a727be3\",\n    \"0x18db4321c721c03666ed8927c89890aa8aad1b00c054547b5ca14cd94de467b6\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2a852b6247f5d61f0c390b3f3d799188528849bcd2cd0aff4eb2134a039b5126\",\n    \"0x2510aeed51b7f506e65fb9a18ee0124aa5276f6de1cd771b165930204da58f22\",\n    \"0xf2074a32eb8260fb5bd3a236f03a47b47b7fb54dcad1d7977d6486513bab5f2\",\n    \"0x2f4c69297866bd45a8270e19941926cec3531c9e12c4c2c84971404bfa044090\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x154668727d2dbadf05d083a65093c0d0e92df5fd5f3fd75e9b792c562a37473f\",\n    \"0x1e6ffc5d6a1ff5dc4fd77fc5ab5c8c4e8d3e2e375bcd1194a91e5b0f7b13cadf\",\n    \"0x2cf1a1d7c44309109d75acbc9395cb8398c8b2d428538571fafa389da29990c6\",\n    \"0x140fb39a89f26f6d87cf76cd5ce8da47aa5d8a023e24cf016ecf64cf793c9880\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x1289d13d58a17b5bf0712b201fb3cddfce2c16dac159990b8298a93a8589f9e8\",\n    \"0xf45cf974d2c9edb5781e8d3d207adc8370cf56bc5218749610920fe98b2db2e\",\n    \"0x11909c81a16518046b79edfd24f5abcc585a81d1b333568b8687a1c9eceb44d4\",\n    \"0x2990b23c81882f7709f3b891a0e3da4d6917672f2d5a1041fd7bbd6792330d16\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x609551b14716ca3cd5560e0821e7285e0a083ea9a16dc102ecf461e4aef7277\",\n    \"0xc8c1abdfab99d03fd93dced2467354b6175de1755f4f93dc0880eaa08d03f77\",\n    \"0x138bd098c4923b9fbd02f33f8bec6c730db3fed298ec09f78a7a55d08f2e0b10\",\n    \"0x2e61e4bc021630114673f0f77161ae55dcd0b45ce07d9ae3f21bb5a3190f14c0\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x124860913e3df8f65a9c4060ce3297c626abd1c22401c905ddb408260d8e910\",\n    \"0x13807f89c394a133ec104804d955cbe125f24c5701d98286c6ac8b7ed052ec8\",\n    \"0x2e88d1a6938f0788132aa9eeaec08d2f59aa444050c8f4c4e85578abb0fc2fe5\",\n    \"0x1f3d24f17cfc6050a0cbf64e1f1787e2257be3c3ba607c2e8fcc1f26abf3104\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x1fe1cb0e2ae169f83b9d4f133d41fb5b3fe6c76a82a916bfd9b62f82f0f8d0bf\",\n    \"0xef79351229409cd353329221229827e19946f3d8d1c48bf5e3377f9177071f3\",\n    \"0x18fb2e46fc1b90fe1c4893ef77a9d111507551883127860e89088608373beda9\",\n    \"0x77afe2579f42ec14c32ef0761e23a3cc0ad6263a68c5cb61916bd57120d1868\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x79769092daa5a752642c04ccf8a6ea54e2ac9836fdd65d248b186f1490b7b99\",\n    \"0x1d8bf229c19968f0254eb6e09c5c8bfd67eb9734606b676b663c76cf76bab4a5\",\n    \"0x2a33b7d855e7fe55f93556e49e4b37737664f14236f17256428f29f6ec1bddad\",\n    \"0x25b0331d7e2b15af4ec161c86e84ba6ab2056077e7aa7536340dc3187ccca8b2\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x762098f5fe26598ccbf45e4810211b0ffcf8ccbb92c16e2f4f13f22342474e2\",\n    \"0xe234d720d70b2886d0da4c007b1bda42362e144185c70716dece2b6172c2514\",\n    \"0x1d82bedccd2bc8a06e3742e720b7fec2ea72182f11c0c60d135c811152aa4b60\",\n    \"0x480064d4b3eb0ada5e9a3e7d05930b7c3397fd6b94d481314bd1c690a17c979\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x10a892763b3cca9ef7593fbb1140edc8c8e4580568560cf41867f7464fb0c11a\",\n    \"0xb5ec64548ea841ac921f9b2553680785978b315667ae4714dde4cd7f4de8b91\",\n    \"0x10554aca4e348e5949761bd7131dfaebd78010edd030e1a9ce3c65c9db931d46\",\n    \"0x15be66f38d86b0998b93655462b1f475b9be9de306e150d4ac648fab3db0cff6\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x176ad3600fd3491182d182957ffad01bf6c26e9d4ab0c23caaf308e427d3dbe8\",\n    \"0x2b6f355b3dbf65f09335001d705ac125e3beb20f4fc11bd3ce82b5cf0af2e6f2\",\n    \"0x1c85c06a6d5d40d81d7c89edefb32d1a8448c51288fa296b6de9ff788c77451\",\n    \"0x20e1e876c4746a0cbd9a51d76b2e25f82361c389e43f7d1f51a70aaac2460d79\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x20e46219f684186d2a024b637bc35a29ee3b08ce737701392d987dda9217fa08\",\n    \"0x2ea7279db9f2aa0f654e987907277c24480766367a8bd90e28be0f2ed6091367\",\n    \"0x136be2a7f18924c9362096d472bc75ca0969dc077c9171b1641be95091780f74\",\n    \"0x1ca2033501baa3f73067c4300fb0f51119ed5736fbc8f1f6c924baf0df5a0e9e\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0xa82f199c2505277ecaa75e495f34e3525824f7a4a9d9fa1da810832b48a50c7\",\n    \"0xecf10485307b4bae92fefb0d7f7782a9f37a2722e7ed9eb7925a2dea580b7d5\",\n    \"0x7b642138dfd6a6dd12aa22f08a8296d68615c8478f13af16aebbbb339a3936b\",\n    \"0x1d9dda43a25593ffd2256d34921fb86ed70e760ba76d61e9cbc3b6dd0f1a2150\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2f1af228520c8b751dc91136c91c6bccd5367eb08213d392958ce2fd3d7d2fce\",\n    \"0x1fecfe833ad540455c6d6c1ab3de4abae61ada625a1a2b6b18551a45a6cde123\",\n    \"0x18fc8e608c735b2b3b0d7583460227575657ff8a77abe637bdd3ad28e4a23c88\",\n    \"0x28f740bc1182e9706ebf03cb3f53aba8a43ce0b618783a5586388a7547faa815\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x47998cc0af5a26b94ad301e4b998d29e960a4851cfd13822bed35b7146966a4\",\n    \"0x1b5f1525b31db911dda43e415e1b9a3a9725c7b52e880ee130a14a692b777b70\",\n    \"0x275a83fa5d19b4535f65e965a90eac9bf770ae9bd1d7b1af945fa57ed5c8de6e\",\n    \"0x2e8789257ed2cbcccb430568e49bc9dc2a563359808c9897ce3e40a6f6a27aa8\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x927f46cfe80feefeb2721a4c09e9d17f60c34500dcd6e41e2925a39c8e2c7c1\",\n    \"0x1f868ae04832a5dbc37619bfe6ab6a97fd8fb2cfbc1ecf9e0e484bbfe7698101\",\n    \"0x9d7a11e27d2f53109b73f745b2defed65d94ba80f308fb19ce6d56c9b45eff4\",\n    \"0x282d857cfe8da3b5104e1c2823fb7c5b9a7b25924fda5995b0c351aa2b879dff\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x20ba8a9fcec815b13f349ff830ae663b27576e135c0744f6987fb0f6ff49c217\",\n    \"0x11b6afc91e32f1ca4589fba12e657d226d57b471ddd2ab1b66a8ae4dcbfb136e\",\n    \"0x2e666402ac9cc588316e335c7d93db344788eec2c72ddf3f908141736cebc3be\",\n    \"0x17522e0e9e64f795a202a110e283faad7057aec5c9ed9a1a74920f2794f18595\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2d2ed17f7a1f3ee9e20b470cad4cc7319e6adb40e2ff24b7878cb9878edbd3b9\",\n    \"0x1a81efb19d7e1edaa96fa276e89e85d08f75e54a8136f4d73c937da16c7bf9f4\",\n    \"0x27ff57c1ca847e57210a7b44e52e5630f299c5f451c7a0d515a16bb3bd33e237\",\n    \"0x1c1a8e22230abcd13c5be96031bfa167840d117b3c6a5a0a11be26a7f5fb1a94\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2a1c3f15d4927c843627a9cd533e4250d81e7774d2c32b59d5836f9c19a5657\",\n    \"0x2ddbb7239eb904d81c52499b37cb4be1af0373a10ac112e185acb219899357e4\",\n    \"0xdff198393085a754e0d6faec54be81d8edf8bc25edadab48a86fad6da0afb60\",\n    \"0x10d50c2473146bbc76275fcc589d038dec8db28728789f28b6d5f504bd1645ca\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x61e8328fb5593f92a53dfd40e1022e6231ba45948506282536b08b4476c1538\",\n    \"0x1b589243847198ded90b644bee31ac58067debf3f07d3c51cfa5a0dd9f6d9784\",\n    \"0x4b00c0da1f851e59863b053bd4c6087190f0bdcced99d5ce6f67a420a3bd1f7\",\n    \"0x239941a46c2b93d9126a70163009a7ac27f8a8d42e35018b3bec8cdcb5ddfd67\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x204f26ca7993b03ac2c35377cb0a3712bfc9bc3ec0bfecb4e87ef6814acf2ea2\",\n    \"0x85aff9c7fdadba039d832d8be165a1e5747cf7308d515e348ef117e926d721c\",\n    \"0x249042a8dc111f27c4ae9db044c0b0b3f10e57d05e093158efd375df00ea2068\",\n    \"0x6e799bcdf2b4a74542854f3029803e2f84550665203327b3e0825977413e96b\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x1cb3caed4bffb6aca9f4d2c002921bc3fffed333cae12085c612496183b87996\",\n    \"0xb47e9755fae480128a128bfd4faa6a3dd6ea03cab566889dcd99e84d310d51c\",\n    \"0xc7e4cea365c2061920a0c9fd2c360a6506293bc024fd1ca3f0bb730da886a4f\",\n    \"0x21da1f701bac77bcbbaa30d964d6f6f63dbe1b20d9d6988c8dcd7ba4187215df\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x9ae612e8ba1ca1370905fb67899d10db86b47bd19965b6edd1a9486e3c6cc55\",\n    \"0x262e1e0b56cac47fc150f284491190e6aab75445b0c99373fe1f7a0e3b95cf3d\",\n    \"0x234bf4a7dce7587c2c87c293e3bb7c9e2a7bfa5f29fd4ddeaa5d3f67491d34bd\",\n    \"0x2f6cbac694c886b02d0a527cac744fb658d2690e213d7432eee67f6cb69f70c2\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x22accb18b7c49b4b7bb8c9fdf78b7aded52aa1842fff818d9a3300876dec3ad9\",\n    \"0x81e2f0652f898c6d659f22d2c77be302eabd9182a0b3d3cbf623a1df7f8f2fc\",\n    \"0x12c0a25e70d006eccea3ada75d669b8c534b962890f3ffc016b3186ad675b935\",\n    \"0x10ef9c23848128cc2fd6fc869df24d7ab56efd349edd56f49f8d4f2381df3259\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x2161cd280772819dd4a81262b71df1bcc2c1d41b9491e0620bda347962b240f0\",\n    \"0x2cebb0ae5108318eb406590041b5248292533364f799bc41b7f4fdd12cb8d38a\",\n    \"0x2b2092f86b5979a7fe4f7c22d9561f3bf2852283a656880fb759e08709a0a62f\",\n    \"0x1566b3402d774b8c08146188425a442450cfc900cf643e7382b2d8507a065fed\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x11a316aa31607f268fb4c56d6c57ba01627c3635fccf8d3d1a163e601d1a0173\",\n    \"0xde7ee069c934256b782648b560e595408a5e8434644609152e353d9c2874e44\",\n    \"0x2d36f4029245704cc84df0297708c5e5845c36ae706c72e67128b8949eab1af\",\n    \"0x1b8cc326b5ee160f53198c217fb34e899bde46cd82dabdc284d7951d546f858\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x27625da0f73ea07110689fb2187b71694cbf9203fd4ddf8a96ece85407550ebb\",\n    \"0x1cd8338a3e5b1ad7cdc0da581a6950f6dea349c3edda06cb99ba025b94e4790d\",\n    \"0x5ea02d65b209f6da763856c94b6438c78a8aed8d3e67e877a10a84072741a56\",\n    \"0x9f7cb68d4e388f85366cfcf284a895d8b6250ced627e810817743ce03330a55\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x18c6230ddc0f896827b043f5e58dbd1aec13995a202e4ebcdfeb969e9d5c1212\",\n    \"0x73a6114b997285e1a91c0a0fdccdaa8452e4f07bfd2e1a10578232096db6dcd\",\n    \"0x2e78746340b2a6d222c6a1fc0838adf5fe013f39b1660ce7a3e7742b2f37be7f\",\n    \"0x7aa27e7150baddd06303ad8e5e4bf4249b7ea846553def28e675259d3e5c851\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0xb66fdec210ea4eabf623d2712cf4d9fa90273ccb4643f680cbc98345715ead8\",\n    \"0x2fb6a29d9f394a589b633b8a4d6be51c9c0601ce0b140be641acea41c49aa5e3\",\n    \"0x29025cc66fd041c4fc845e9c1c2cd1288569fb243d049bd675a69dc889b2ce2a\",\n    \"0x150963f0aca9bcbe4126214ab9c627a6f7ed731cfa695168b85d534b17be3f48\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0xed59780302257663f72c1bfc6656eb7b5bca2e47bec0d5798a08a32a61a8a65\",\n    \"0x7e19cb8a893369b3d30ae188c767f391c11888a3000debfc8d30c06143cc084\",\n    \"0x600c7d2b6946345e5f1eeeafb5eb8ec2b6ecfe528d2c052cd860afb4a3aa272\",\n    \"0x596083b6c972bc13022a1f33d6523b4773f2cd0a480e19ea0125119f0385705\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0x210b5c36f27a07d97f98b9d8663d85db2e64513099a8e1ef6db21043631e24c4\",\n    \"0x13bb2764bf1475cfc7bb9f3d563c5cc201c2489874e9159326a8f4930b7883f9\",\n    \"0x202cf557d625c26080eb082862a76757287872b181e89997219e4b7576e24d30\",\n    \"0xe561c3f8bd4f76e76d49e97142d220601fbc5a03d905a4728ea1f95fd8824b2\",\n    \"0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b\",\n    \"0xde20097480e7555471785de07bd9809d57dd859bbe827307c33ae9ed7890597\",\n    \"0x72f2a6287fb984bb810df8c5788eebcfd2825613cb72bb80cde8edd76d2e97d\",\n    \"0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771\",\n    \"0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7\",\n];\n\nconst POSEIDON_C: [&str; 81] = [\n    \"0xee9a592ba9a9518d05986d656f40c2114c4993c11bb29938d21d47304cd8e6e\",\n    \"0xf1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e864\",\n    \"0x8dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f5\",\n    \"0x84d520e4e5bb469e1f9075cb7c490efa59565eedae2d00ca8ef88ceea2b0197\",\n    \"0x2d15d982d99577fa33da56722416fd734b3e667a2f9f15d8eb3e767ae0fd811e\",\n    \"0xed2538844aba161cf1578a43cf0364e91601f6536a5996d0efbe65632c41b6d\",\n    \"0x2600c27d879fbca186e739e6363c71cf804c877d829b735dcc3e3af02955e60a\",\n    \"0x28f8bd44a583cbaa475bd15396430e7ccb99a5517440dfd970058558282bf2c5\",\n    \"0x9cd7d4c380dc5488781aad012e7eaef1ed314d7f697a5572d030c55df153221\",\n    \"0x11bb6ee1291aabb206120ecaace460d24b6713febe82234951e2bee7d0f855f5\",\n    \"0x2d74e8fa0637d9853310f3c0e3fae1d06f171580f5b8fd05349cadeecfceb230\",\n    \"0x2735e4ec9d39bdffac9bef31bacba338b1a09559a511a18be4b4d316ed889033\",\n    \"0xf03c1e9e0895db1a5da6312faa78e971106c33f826e08dcf617e24213132dfd\",\n    \"0x17094cd297bf827caf92920205b719c18741090b8f777811848a7e9ead6778c4\",\n    \"0xdb8f419c21f92461fc2b3219465798348df90d4178042c81ba7d4b4d559e2b8\",\n    \"0x243443613f64ffa417427ed5933fcfbc66809db60b9ca1724a22709ceceeece2\",\n    \"0x22af49fbfd5d7e9fcd256c25c07d3dd8ecbbae6deecd03aa04bb191fada75411\",\n    \"0x14fbd37fa8ad6e4e0c78a20d93c7230c4677f797b4327323f7f7c097c19420e0\",\n    \"0x15a9298bbb882534d4b2c9fbc6e4ef4189420c4eb3f3e1ea22faa7e18b5ae625\",\n    \"0x2f7de75f23ddaaa5221323ebceb2f2ac83eef92e854e75434c2f1d90562232bc\",\n    \"0x36a4432a868283b78a315e84c4ae5aeca216f2ff9e9b2e623584f7479cd5c27\",\n    \"0x2180d7786a8cf810e277218ab14a11e5e39f3c962f11e860ae1c5682c797de5c\",\n    \"0xa268ef870736eebd0cb55be640d73ee3778990484cc03ce53572377eefff8e4\",\n    \"0x1eefefe11c0be4664f2999031f15994829e982e8c90e09069df9bae16809a5b2\",\n    \"0x27e87f033bd1e0a89ca596e8cb77fe3a4b8fb93d9a1129946571a3c3cf244c52\",\n    \"0x1498a3e6599fe243321f57d6c5435889979c4f9d2a3e184d21451809178ee39\",\n    \"0x27c0a41f4cb9fe67e9dd4d7ce33707f74d5d6bcc235bef108dea1bbebde507aa\",\n    \"0x1f75230908b141b46637238b120fc770f4f4ae825d5004c16a7c91fe1dae280f\",\n    \"0x25f99a9198e923167bba831b15fffd2d7b97b3a089808d4eb1f0a085bee21656\",\n    \"0x101bc318e9ea5920d0f6acdc2bb526593d3d56ec8ed14c67622974228ba900c6\",\n    \"0x1a175607067d517397c1334ecb019754ebc0c852a3cf091ec1ccc43207a83c76\",\n    \"0xf02f0e6d25f9ea3deb245f3e8c381ee6b2eb380ba4af5c1c4d89770155df37b\",\n    \"0x151d757acc8237af08d8a6677203ec9692565de456ae789ff358b3163b393bc9\",\n    \"0x256cd9577cea143049e0a1fe0068dd20084980ee5b757890a79d13a3a624fad4\",\n    \"0x513abaff6195ea48833b13da50e0884476682c3fbdd195497b8ae86e1937c61\",\n    \"0x1d9570dc70a205f36f610251ee6e2e8039246e84e4ac448386d19dbac4e4a655\",\n    \"0x18f1a5194755b8c5d5d7f1bf8aaa6f56effb012dd784cf5e044eec50b29fc9d4\",\n    \"0x266b53b615ef73ac866512c091e4a4f2fa4bb0af966ef420d88163238eebbca8\",\n    \"0x2d63234c9207438aa42b8de27644c02268304dfeb8c89a1a3f4fd6e8344ae0f7\",\n    \"0x2ab30fbe51ee49bc7b3adde219a6f0b5fbb976205ef8df7e0021daee6f55c693\",\n    \"0x1aee6d4b3ebe9366dcb9cce48969d4df1dc42abcd528b270068d9207fa6a45c9\",\n    \"0x1891aeab71e34b895a79452e5864ae1d11f57646c60bb34aa211d123f6095219\",\n    \"0x24492b5f95c0b0876437e94b4101c69118e16b2657771bd3a7caab01c818aa4b\",\n    \"0x1752161b3350f7e1b3b2c8663a0d642964628213d66c10ab2fddf71bcfde68f\",\n    \"0xab676935722e2f67cfb84938e614c6c2f445b8d148de54368cfb8f90a00f3a7\",\n    \"0xb0f72472b9a2f5f45bc730117ed9ae5683fc2e6e227e3d4fe0da1f7aa348189\",\n    \"0x16aa6f9273acd5631c201d1a52fc4f8acaf2b2152c3ae6df13a78a513edcd369\",\n    \"0x2f60b987e63614eb13c324c1d8716eb0bf62d9b155d23281a45c08d52435cd60\",\n    \"0x18d24ae01dde92fd7606bb7884554e9df1cb89b042f508fd9db76b7cc1b21212\",\n    \"0x4fc3bf76fe31e2f8d776373130df79d18c3185fdf1593960715d4724cffa586\",\n    \"0xd18f6b53fc69546cfdd670b41732bdf6dee9e06b21260c6b5d26270468dbf82\",\n    \"0xba4231a918f13acec11fbafa17c5223f1f70b4cdb045036fa5d7045bd10e24\",\n    \"0x7b458b2e00cd7c6100985301663e7ec33c826da0635ff1ebedd0dd86120b4c8\",\n    \"0x1c35c2d96db90f4f6058e76f15a0c8286bba24e2ed40b16cec39e9fd7baa5799\",\n    \"0x1d12bea3d8c32a5d766568f03dd1ecdb0a4f589abbef96945e0dde688e292050\",\n    \"0xd953e20022003270525f9a73526e9889c995bb62fdea94313db405a61300286\",\n    \"0x29f053ec388795d786a40bec4c875047f06ff0b610b4040a760e33506d2671e1\",\n    \"0x4188e33735f46b14a4952a98463bc12e264d5f446e0c3f64b9679caaae44fc2\",\n    \"0x149ec28846d4f438a84f1d0529431bb9e996a408b7e97eb3bf1735cdbe96f68f\",\n    \"0xde20fae0af5188bca24b5f63630bad47aeafd98e651922d148cce1c5fdddee8\",\n    \"0x12d650e8f790b1253ea94350e722ad2f7d836c234b8660edf449fba6984c6709\",\n    \"0x22ab53aa39f34ad30ea96717ba7446aafdadbc1a8abe28d78340dfc4babb8f6c\",\n    \"0x26503e8d4849bdf5450dabea7907bc3de0de109871dd776904a129db9149166c\",\n    \"0x1d5e7a0e2965dffa00f5454f5003c5c8ec34b23d897e7fc4c8064035b0d33850\",\n    \"0xee3d8daa098bee012d96b7ec48448c6bc9a6aefa544615b9cb3c7bbd07104cb\",\n    \"0x1bf282082a04979955d30754cd4d9056fa9ef7a7175703d91dc232b5f98ead00\",\n    \"0x7ae1344abfc6c2ce3e951bc316bee49971645f16b693733a0272173ee9ad461\",\n    \"0x217e3a247827c376ec21b131d511d7dbdc98a36b7a47d97a5c8e89762ee80488\",\n    \"0x215ffe584b0eb067a003d438e2fbe28babe1e50efc2894117509b616addc30ee\",\n    \"0x1e770fc8ecbfdc8692dcedc597c4ca0fbec19b84e33da57412a92d1d3ce3ec20\",\n    \"0x2f6243cda919bf4c9f1e3a8a6d66a05742914fc19338b3c0e50e828f69ff6d1f\",\n    \"0x246efddc3117ecd39595d0046f44ab303a195d0e9cc89345d3c03ff87a11b693\",\n    \"0x53e8d9b3ea5b8ed4fe006f139cbc4e0168b1c89a918dfbe602bc62cec6adf1\",\n    \"0x1b894a2f45cb96647d910f6a710d38b7eb4f261beefff135aec04c1abe59427b\",\n    \"0xaeb1554e266693d8212652479107d5fdc077abf88651f5a42553d54ec242cc0\",\n    \"0x16a735f6f7209d24e6888680d1781c7f04ba7d71bd4b7d0e11faf9da8d9ca28e\",\n    \"0x487b8b7fab5fc8fd7c13b4df0543cd260e4bcbb615b19374ff549dcf073d41b\",\n    \"0x1e75b9d2c2006307124bea26b0772493cfb5d512068c3ad677fdf51c92388793\",\n    \"0x5120e3d0e28003c253b46d5ff77d272ae46fa1e239d1c6c961dcb02da3b388f\",\n    \"0xda5feb534576492b822e8763240119ac0900a053b171823f890f5fd55d78372\",\n    \"0x2e211b39a023031a22acc1a1f5f3bb6d8c2666a6379d9d2c40cc8f78b7bd9abe\",\n];\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_poseidon_bn254() {\n        let x = FieldElement::from_hex_unchecked(\"1\");\n        let y = FieldElement::from_hex_unchecked(\"2\");\n        let z = poseidon_hash_bn254(&x, &y);\n        assert_eq!(\n            z,\n            FieldElement::from_hex_unchecked(\n                \"115cc0f5e7d690413df64c6b9662e9cf2a3617f2743245519e19607a4417189a\"\n            )\n        );\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/definitions.rs",
    "content": "use crate::algebra::polynomial::Polynomial;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::BLS12381PrimeField as BLSPF;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::BN254PrimeField as BNPF;\nuse lambdaworks_math::field::element::FieldElement as Felt;\nuse lambdaworks_math::field::fields::fft_friendly::stark_252_prime_field::Stark252PrimeField as StrkPF;\nuse lambdaworks_math::field::fields::montgomery_backed_prime_fields::{\n    IsModulus, MontgomeryBackendPrimeField,\n};\nuse lambdaworks_math::field::traits::IsPrimeField;\nuse lambdaworks_math::traits::ByteConversion;\nuse lambdaworks_math::unsigned_integer::element::U256;\nuse num_bigint::BigInt;\nuse num_bigint::BigUint;\nuse num_traits::Num;\nuse std::cmp::PartialEq;\nuse std::collections::HashMap;\n\nuse crate::io::{biguint_from_hex, element_from_biguint};\n\n#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum CurveID {\n    BN254 = 0,\n    BLS12_381 = 1,\n    SECP256K1 = 2,\n    SECP256R1 = 3,\n    X25519 = 4,\n    GRUMPKIN = 5,\n}\n\nimpl TryFrom<u8> for CurveID {\n    type Error = String;\n\n    fn try_from(value: u8) -> Result<Self, Self::Error> {\n        match value {\n            0 => Ok(CurveID::BN254),\n            1 => Ok(CurveID::BLS12_381),\n            2 => Ok(CurveID::SECP256K1),\n            3 => Ok(CurveID::SECP256R1),\n            4 => Ok(CurveID::X25519),\n            5 => Ok(CurveID::GRUMPKIN),\n            _ => Err(format!(\"Invalid curve ID: {}\", value)),\n        }\n    }\n}\n\nimpl TryFrom<usize> for CurveID {\n    type Error = String;\n\n    fn try_from(value: usize) -> Result<Self, Self::Error> {\n        match value {\n            0 => Ok(CurveID::BN254),\n            1 => Ok(CurveID::BLS12_381),\n            2 => Ok(CurveID::SECP256K1),\n            3 => Ok(CurveID::SECP256R1),\n            4 => Ok(CurveID::X25519),\n            5 => Ok(CurveID::GRUMPKIN),\n            _ => Err(format!(\"Invalid curve ID: {}\", value)),\n        }\n    }\n}\npub type FieldElement<F> = Felt<F>;\npub type BN254PrimeField = BNPF;\npub type BLS12381PrimeField = BLSPF;\npub type Stark252PrimeField = StrkPF;\n\npub const SECP256K1_PRIME_FIELD_ORDER: U256 =\n    U256::from_hex_unchecked(\"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F\");\n\n#[derive(Clone, Debug, Copy)]\npub struct SECP256K1FieldModulus;\nimpl IsModulus<U256> for SECP256K1FieldModulus {\n    const MODULUS: U256 = SECP256K1_PRIME_FIELD_ORDER;\n}\n\npub type SECP256K1PrimeField = MontgomeryBackendPrimeField<SECP256K1FieldModulus, 4>;\n\npub const SECP256R1_PRIME_FIELD_ORDER: U256 =\n    U256::from_hex_unchecked(\"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF\");\n\n#[derive(Clone, Debug)]\npub struct SECP256R1FieldModulus;\nimpl IsModulus<U256> for SECP256R1FieldModulus {\n    const MODULUS: U256 = SECP256R1_PRIME_FIELD_ORDER;\n}\n\npub type SECP256R1PrimeField = MontgomeryBackendPrimeField<SECP256R1FieldModulus, 4>;\n\npub const X25519_PRIME_FIELD_ORDER: U256 =\n    U256::from_hex_unchecked(\"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed\");\n\n#[derive(Clone, Debug, Copy)]\npub struct X25519FieldModulus;\nimpl IsModulus<U256> for X25519FieldModulus {\n    const MODULUS: U256 = X25519_PRIME_FIELD_ORDER;\n}\n\npub type X25519PrimeField = MontgomeryBackendPrimeField<X25519FieldModulus, 4>;\n\npub const GRUMPKIN_PRIME_FIELD_ORDER: U256 =\n    U256::from_hex_unchecked(\"30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000001\");\n\n#[derive(Clone, Debug, Copy, Hash)]\npub struct GrumpkinFieldModulus;\nimpl IsModulus<U256> for GrumpkinFieldModulus {\n    const MODULUS: U256 = GRUMPKIN_PRIME_FIELD_ORDER;\n}\n\npub type GrumpkinPrimeField = MontgomeryBackendPrimeField<GrumpkinFieldModulus, 4>;\n\n/// A trait to generate random field elements.\npub trait Random<F: IsPrimeField> {\n    fn random() -> Self;\n}\n\nimpl<F: IsPrimeField> Random<F> for FieldElement<F>\nwhere\n    FieldElement<F>: ByteConversion,\n{\n    fn random() -> Self {\n        use rand::Rng;\n        let mut rng = rand::rng();\n        let bits = F::field_bit_size();\n        let bytes = bits.div_ceil(8); // Round up to nearest byte\n\n        let random_bytes: Vec<u8> = (0..bytes).map(|_| rng.random()).collect();\n        let random_num = BigUint::from_bytes_be(&random_bytes);\n\n        // Try to convert to field element\n        element_from_biguint::<F>(&random_num)\n    }\n}\n\npub struct CurveParams<F: IsPrimeField> {\n    pub curve_id: CurveID,\n    pub a: FieldElement<F>,\n    pub b: FieldElement<F>,\n    pub b20: FieldElement<F>,\n    pub b21: FieldElement<F>,\n    pub g_x: FieldElement<F>,\n    pub g_y: FieldElement<F>,\n    pub g2_x: Option<[FieldElement<F>; 2]>, // Only for pairing curves\n    pub g2_y: Option<[FieldElement<F>; 2]>, // Only for pairing curves\n    pub n: BigUint,                         // Order of the curve\n    pub h: u32,                             // Cofactor\n    pub x: i128,\n    pub fp_generator: FieldElement<F>,\n    pub irreducible_polys: HashMap<usize, &'static [i8]>,\n    pub loop_counter: &'static [i8],\n    pub nr_a0: u64,                  // E2 non residue\n    pub eigen_value: Option<BigInt>, // Endomorphism eigenvalue\n    pub swu_params: Option<SWUParams<F>>,\n}\n\npub struct SWUParams<F: IsPrimeField> {\n    pub a: FieldElement<F>,\n    pub b: FieldElement<F>,\n    pub z: FieldElement<F>,\n}\n\npub fn get_irreducible_poly<F: IsPrimeField + CurveParamsProvider<F>>(\n    ext_degree: usize,\n) -> Polynomial<F> {\n    let coeffs = (F::get_curve_params().irreducible_polys)[&ext_degree];\n    fn lift<F: IsPrimeField>(c: i8) -> FieldElement<F> {\n        if c >= 0 {\n            FieldElement::from(c as u64)\n        } else {\n            -FieldElement::from(-c as u64)\n        }\n    }\n    Polynomial::new(coeffs.iter().map(|x| lift::<F>(*x)).collect())\n}\n\n/// A trait that provides curve parameters for a specific field type.\npub trait CurveParamsProvider<F: IsPrimeField> {\n    fn get_curve_params() -> CurveParams<F>;\n}\n\n/// A trait to convert a BigUint into a FieldElement.\npub trait FromBigUint<F: IsPrimeField> {\n    fn from_biguint(num: BigUint) -> FieldElement<F>;\n}\n\nimpl CurveParamsProvider<SECP256K1PrimeField> for SECP256K1PrimeField {\n    fn get_curve_params() -> CurveParams<SECP256K1PrimeField> {\n        CurveParams {\n            curve_id: CurveID::SECP256K1,\n            a: FieldElement::zero(),\n            b: FieldElement::from_hex_unchecked(\"7\"),\n            b20: FieldElement::zero(), // Provide appropriate values here\n            b21: FieldElement::zero(), // Provide appropriate values here\n            g_x: FieldElement::from_hex_unchecked(\n                \"79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798\",\n            ),\n            g_y: FieldElement::from_hex_unchecked(\n                \"483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8\",\n            ),\n            g2_x: None,\n            g2_y: None,\n            n: BigUint::from_str_radix(\n                \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\",\n                16,\n            )\n            .unwrap(),\n            h: 1,\n            x: 0, // Replace with actual 'x'\n            fp_generator: FieldElement::from(3),\n            irreducible_polys: HashMap::from([]), // Provide appropriate values here\n            loop_counter: &[],                    // Provide appropriate values here\n            nr_a0: 0,                             // Provide appropriate values here\n            eigen_value: Some(\n                BigInt::from_str_radix(\n                    \"5363AD4CC05C30E0A5261C028812645A122E22EA20816678DF02967C1B23BD72\",\n                    16,\n                )\n                .unwrap(),\n            ),\n            swu_params: None,\n        }\n    }\n}\n\nimpl CurveParamsProvider<SECP256R1PrimeField> for SECP256R1PrimeField {\n    fn get_curve_params() -> CurveParams<SECP256R1PrimeField> {\n        CurveParams {\n            curve_id: CurveID::SECP256R1,\n            a: FieldElement::from_hex_unchecked(\n                \"ffffffff00000001000000000000000000000000fffffffffffffffffffffffc\",\n            ),\n            b: FieldElement::from_hex_unchecked(\n                \"5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b\",\n            ),\n            b20: FieldElement::zero(), // Provide appropriate values here\n            b21: FieldElement::zero(), // Provide appropriate values here\n            g_x: FieldElement::from_hex_unchecked(\n                \"6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296\",\n            ),\n            g_y: FieldElement::from_hex_unchecked(\n                \"4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5\",\n            ),\n            g2_x: None,\n            g2_y: None,\n            n: BigUint::from_str_radix(\n                \"FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551\",\n                16,\n            )\n            .unwrap(),\n            h: 1,\n            x: 0, // Replace with actual 'x'\n            fp_generator: FieldElement::from(6),\n            irreducible_polys: HashMap::from([]), // Provide appropriate values here\n            loop_counter: &[],                    // Provide appropriate values here\n            nr_a0: 0,                             // Provide appropriate values here\n            eigen_value: None, // SECP256R1 does not have a known endomorphism eigenvalue for GLV\n            swu_params: None,\n        }\n    }\n}\n\nimpl CurveParamsProvider<X25519PrimeField> for X25519PrimeField {\n    fn get_curve_params() -> CurveParams<X25519PrimeField> {\n        CurveParams {\n            curve_id: CurveID::X25519,\n            a: FieldElement::from_hex_unchecked(\n                \"0x5d4eacd3a5b9bee63197e10d617b3dd66bb8b65d0ca52af7ac71e18ef8bc172d\",\n            ),\n            b: FieldElement::from_hex_unchecked(\n                \"0x1d11b29bcfd0b3e0550ddb06105780d5f54831976b9fbc329004ebc1f364b2a4\",\n            ),\n            b20: FieldElement::zero(), // Provide appropriate values here\n            b21: FieldElement::zero(), // Provide appropriate values here\n            g_x: FieldElement::from_hex_unchecked(\n                \"2a78dd0fd02c0339f00b8f02f1c20618a9c13fdf0d617c9aca55c89b025aef35\",\n            ),\n            g_y: FieldElement::from_hex_unchecked(\n                \"29c644a5c71da22ebe483ba563798323cf6fd061807131659b7830f3f62c1d14\",\n            ),\n            g2_x: None,\n            g2_y: None,\n            n: BigUint::from_str_radix(\n                \"1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3ED\",\n                16,\n            )\n            .unwrap(),\n            h: 8,\n            x: 0, // Replace with actual 'x'\n            fp_generator: FieldElement::from(6),\n            irreducible_polys: HashMap::from([]), // Provide appropriate values here\n            loop_counter: &[],                    // Provide appropriate values here\n            nr_a0: 0,                             // Provide appropriate values here\n            eigen_value: None, // X25519 (Edwards/Montgomery) does not typically use this type of endomorphism\n            swu_params: None,\n        }\n    }\n}\n\nimpl CurveParamsProvider<GrumpkinPrimeField> for GrumpkinPrimeField {\n    fn get_curve_params() -> CurveParams<GrumpkinPrimeField> {\n        CurveParams {\n            curve_id: CurveID::GRUMPKIN,\n            a: FieldElement::from_hex_unchecked(\"0\"),\n            b: FieldElement::from_hex_unchecked(\n                \"0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffff0\",\n            ),\n            b20: FieldElement::zero(),\n            b21: FieldElement::zero(),\n            g_x: FieldElement::from_hex_unchecked(\"0x1\"),\n            g_y: FieldElement::from_hex_unchecked(\n                \"0x2CF135E7506A45D632D270D45F1181294833FC48D823F272C\",\n            ),\n            g2_x: None,\n            g2_y: None,\n            n: BigUint::from_str_radix(\n                \"30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD47\",\n                16,\n            )\n            .unwrap(),\n            h: 1,\n            x: 0, // Replace with actual 'x'\n            fp_generator: FieldElement::from(5),\n            irreducible_polys: HashMap::from([]), // Provide appropriate values here\n            loop_counter: &[],                    // Provide appropriate values here\n            nr_a0: 0,                             // Provide appropriate values here\n            eigen_value: None, // Grumpkin does not have a known endomorphism eigenvalue for GLV\n            swu_params: None,\n        }\n    }\n}\n\nimpl CurveParamsProvider<BN254PrimeField> for BN254PrimeField {\n    fn get_curve_params() -> CurveParams<BN254PrimeField> {\n        CurveParams {\n            curve_id: CurveID::BN254,\n            a: FieldElement::zero(),\n            b: FieldElement::from(3),\n            b20: FieldElement::from_hex_unchecked(\n                \"2B149D40CEB8AAAE81BE18991BE06AC3B5B4C5E559DBEFA33267E6DC24A138E5\",\n            ),\n            b21: FieldElement::from_hex_unchecked(\n                \"009713B03AF0FED4CD2CAFADEED8FDF4A74FA084E52D1852E4A2BD0685C315D2\",\n            ),\n            g_x: FieldElement::from_hex_unchecked(\"1\"), // Replace with actual 'g_x'\n            g_y: FieldElement::from_hex_unchecked(\"2\"), // Replace with actual 'g_y'\n            g2_x: Some([\n                FieldElement::from_hex_unchecked(\n                    \"1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED\",\n                ),\n                FieldElement::from_hex_unchecked(\n                    \"198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2\",\n                ),\n            ]),\n            g2_y: Some([\n                FieldElement::from_hex_unchecked(\n                    \"12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA\",\n                ),\n                FieldElement::from_hex_unchecked(\n                    \"090689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B\",\n                ),\n            ]),\n            n: BigUint::from_str_radix(\n                \"30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000001\",\n                16,\n            )\n            .unwrap(),\n            h: 1, // Replace with actual 'h'\n            x: 0x44E992B44A6909F1,\n            fp_generator: FieldElement::from(3),\n            irreducible_polys: HashMap::from([\n                (6, [82, 0, 0, -18, 0, 0, 1].as_slice()),\n                (12, [82, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 1].as_slice()),\n            ]),\n            loop_counter: &[\n                0, 0, 0, -1, -1, 0, -1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, -1, 0, 0, 0, 1, 0,\n                -1, 0, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 1, 0, 0,\n                -1, 0, 0, 0, -1, 0, -1, 0, 0, 0, 1, 0, -1, 0, 1,\n            ],\n            nr_a0: 9,\n            eigen_value: Some(\n                BigInt::from_str_radix(\"B3C4D79D41A917585BFC41088D8DAAA78B17EA66B99C90DD\", 16)\n                    .unwrap(),\n            ),\n            swu_params: None,\n        }\n    }\n}\n\nimpl CurveParamsProvider<BLS12381PrimeField> for BLS12381PrimeField {\n    fn get_curve_params() -> CurveParams<BLS12381PrimeField> {\n        CurveParams {\n            curve_id: CurveID::BLS12_381,\n            a: FieldElement::zero(),\n            b: FieldElement::from(4),\n            b20: FieldElement::from_hex_unchecked(\"4\"),\n            b21: FieldElement::from_hex_unchecked(\"4\"),\n            g_x: FieldElement::from_hex_unchecked(\"17F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB\"), // Replace with actual 'g_x'\n            g_y: FieldElement::from_hex_unchecked(\"08B3F481E3AAA0F1A09E30ED741D8AE4FCF5E095D5D00AF600DB18CB2C04B3EDD03CC744A2888AE40CAA232946C5E7E1\"), // Replace with actual 'g_y'\n            g2_x: Some([\n                FieldElement::from_hex_unchecked(\"24AA2B2F08F0A91260805272DC51051C6E47AD4FA403B02B4510B647AE3D1770BAC0326A805BBEFD48056C8C121BDB8\"), // Replace with actual 'g2_x.0'\n                FieldElement::from_hex_unchecked(\"13E02B6052719F607DACD3A088274F65596BD0D09920B61AB5DA61BBDC7F5049334CF11213945D57E5AC7D055D042B7E\"), // Replace with actual 'g2_x.1'\n            ]),\n            g2_y: Some([\n                FieldElement::from_hex_unchecked(\"CE5D527727D6E118CC9CDC6DA2E351AADFD9BAA8CBDD3A76D429A695160D12C923AC9CC3BACA289E193548608B82801\"), // Replace with actual 'g2_y.0'\n                FieldElement::from_hex_unchecked(\"606C4A02EA734CC32ACD2B02BC28B99CB3E287E85A763AF267492AB572E99AB3F370D275CEC1DA1AAA9075FF05F79BE\"), // Replace with actual 'g2_y.1'\n            ]),\n            n: BigUint::from_str_radix(\n                \"73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001\",\n                16,\n            )\n            .unwrap(),\n            h: 1, // Replace with actual 'h'\n            x: -0xD201000000010000,\n            fp_generator: FieldElement::from(3),\n            irreducible_polys: HashMap::from([\n                (6, [2, 0, 0, -2, 0, 0, 1].as_slice()),\n                (12, [2, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 1].as_slice()),\n            ]),\n            loop_counter: &[\n                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n                0, 1, 0, 0, 1, 0, 1, 1,\n            ],\n            nr_a0: 1,\n            eigen_value: Some(\n                BigInt::from_str_radix(\"AC45A4010001A40200000000FFFFFFFF\", 16).unwrap(),\n            ),\n            swu_params: Some(SWUParams {\n                a: FieldElement::from_hex_unchecked(\"144698A3B8E9433D693A02C96D4982B0EA985383EE66A8D8E8981AEFD881AC98936F8DA0E0F97F5CF428082D584C1D\"),\n                b: FieldElement::from_hex_unchecked(\"12E2908D11688030018B12E8753EEE3B2016C1F0F24F4070A0B9C14FCEF35EF55A23215A316CEAA5D1CC48E98E172BE0\"),\n                z: FieldElement::from_hex_unchecked(\"B\"),\n            }),\n        }\n    }\n}\n\npub trait ToWeierstrassCurve {\n    fn to_weirstrass(\n        x_twisted: FieldElement<X25519PrimeField>,\n        y_twisted: FieldElement<X25519PrimeField>,\n    ) -> (\n        FieldElement<X25519PrimeField>,\n        FieldElement<X25519PrimeField>,\n    );\n}\n\npub trait ToTwistedEdwardsCurve {\n    fn to_twistededwards(\n        x_weierstrass: FieldElement<X25519PrimeField>,\n        y_weierstrass: FieldElement<X25519PrimeField>,\n    ) -> (\n        FieldElement<X25519PrimeField>,\n        FieldElement<X25519PrimeField>,\n    );\n}\n\nimpl ToWeierstrassCurve for X25519PrimeField {\n    fn to_weirstrass(\n        x_twisted: FieldElement<X25519PrimeField>,\n        y_twisted: FieldElement<X25519PrimeField>,\n    ) -> (\n        FieldElement<X25519PrimeField>,\n        FieldElement<X25519PrimeField>,\n    ) {\n        let a = element_from_biguint::<X25519PrimeField>(&biguint_from_hex(\n            \"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC\",\n        )); // Replace with actual a_twisted\n        let d = element_from_biguint::<X25519PrimeField>(&biguint_from_hex(\n            \"0x52036CEE2B6FFE738CC740797779E89800700A4D4141D8AB75EB4DCA135978A3\",\n        )); // Replace with actual d_twisted\n\n        let x = (FieldElement::<X25519PrimeField>::from(5) * a + a * y_twisted\n            - FieldElement::<X25519PrimeField>::from(5) * d * y_twisted\n            - d)\n            * (FieldElement::<X25519PrimeField>::from(12)\n                - FieldElement::<X25519PrimeField>::from(12) * y_twisted)\n                .inv()\n                .unwrap();\n        let y = (a + a * y_twisted - d * y_twisted - d)\n            * (FieldElement::<X25519PrimeField>::from(4) * x_twisted\n                - FieldElement::<X25519PrimeField>::from(4) * x_twisted * y_twisted)\n                .inv()\n                .unwrap();\n\n        (x, y)\n    }\n}\n\nimpl ToTwistedEdwardsCurve for X25519PrimeField {\n    fn to_twistededwards(\n        x_weierstrass: FieldElement<X25519PrimeField>,\n        y_weierstrass: FieldElement<X25519PrimeField>,\n    ) -> (\n        FieldElement<X25519PrimeField>,\n        FieldElement<X25519PrimeField>,\n    ) {\n        let a = element_from_biguint::<X25519PrimeField>(&biguint_from_hex(\n            \"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC\",\n        )); // Replace with actual a_twisted\n        let d = element_from_biguint::<X25519PrimeField>(&biguint_from_hex(\n            \"0x52036CEE2B6FFE738CC740797779E89800700A4D4141D8AB75EB4DCA135978A3\",\n        )); // Replace with actual d_twisted\n\n        let y = (FieldElement::<X25519PrimeField>::from(5) * a\n            - FieldElement::<X25519PrimeField>::from(12) * x_weierstrass\n            - d)\n            * (-FieldElement::<X25519PrimeField>::from(12) * x_weierstrass - a\n                + FieldElement::<X25519PrimeField>::from(5) * d)\n                .inv()\n                .unwrap();\n        let x = (a + a * y - d * y - d)\n            * (FieldElement::<X25519PrimeField>::from(4) * y_weierstrass\n                - FieldElement::<X25519PrimeField>::from(4) * y_weierstrass * y)\n                .inv()\n                .unwrap();\n\n        (x, y)\n    }\n}\n\npub fn get_modulus_from_curve_id(curve_id: CurveID) -> BigUint {\n    match curve_id {\n        CurveID::BN254 => biguint_from_hex(\"0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD47\"),\n        CurveID::BLS12_381 => biguint_from_hex(\"0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAB\"),\n        CurveID::SECP256K1 => biguint_from_hex(\"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F\"),\n        CurveID::SECP256R1 => biguint_from_hex(\"0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF\"),\n        CurveID::X25519 => biguint_from_hex(\"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED\"),\n        CurveID::GRUMPKIN => biguint_from_hex(\"0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000001\"),\n    }\n}\n\n#[cfg(test)]\nmod tests {\n\n    use super::{CurveParamsProvider, ToTwistedEdwardsCurve, ToWeierstrassCurve, X25519PrimeField};\n\n    #[test]\n    fn test_to_weierstrass_and_back() {\n        let curve = X25519PrimeField::get_curve_params();\n\n        let x_weirstrass = curve.g_x;\n        let y_weirstrass = curve.g_y;\n\n        let (x_twisted, y_twisted) =\n            X25519PrimeField::to_twistededwards(x_weirstrass.clone(), y_weirstrass.clone());\n        let (x_weirstrass_back, y_weirstrass_back) =\n            X25519PrimeField::to_weirstrass(x_twisted, y_twisted);\n\n        assert_eq!(x_weirstrass, x_weirstrass_back);\n        assert_eq!(y_weirstrass, y_weirstrass_back);\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/ecip/core.rs",
    "content": "use crate::algebra::polynomial::Polynomial;\nuse crate::definitions::FieldElement;\nuse lambdaworks_math::field::traits::IsPrimeField;\nuse lambdaworks_math::traits::ByteConversion;\n\nuse crate::algebra::g1point::G1Point;\nuse crate::algebra::rational_function::{FunctionFelt, RationalFunction};\nuse crate::definitions::{\n    BLS12381PrimeField, BN254PrimeField, CurveParamsProvider, GrumpkinPrimeField,\n    SECP256K1PrimeField, SECP256R1PrimeField, X25519PrimeField,\n};\nuse crate::ecip::ff::FF;\nuse crate::io::{\n    field_elements_from_big_uints, field_elements_to_big_uints,\n    parse_g1_points_from_flattened_field_elements_list,\n};\n\nuse num_bigint::{BigInt, BigUint, ToBigInt};\n\npub fn zk_ecip_hint(\n    points: Vec<BigUint>,\n    scalars: Vec<BigUint>,\n    curve_id: usize,\n) -> Result<[Vec<BigUint>; 5], String> {\n    match curve_id {\n        0 => handle_curve::<BN254PrimeField>(points, scalars, field_elements_from_big_uints),\n        1 => handle_curve::<BLS12381PrimeField>(points, scalars, field_elements_from_big_uints),\n        2 => handle_curve::<SECP256K1PrimeField>(points, scalars, field_elements_from_big_uints),\n        3 => handle_curve::<SECP256R1PrimeField>(points, scalars, field_elements_from_big_uints),\n        4 => handle_curve::<X25519PrimeField>(points, scalars, field_elements_from_big_uints),\n        5 => handle_curve::<GrumpkinPrimeField>(points, scalars, field_elements_from_big_uints),\n        _ => Err(String::from(\"Invalid curve ID\")),\n    }\n}\n\nfn handle_curve<F>(\n    values: Vec<BigUint>,\n    scalars: Vec<BigUint>,\n    parse_fn: fn(&[BigUint]) -> Vec<FieldElement<F>>,\n) -> Result<[Vec<BigUint>; 5], String>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    let elements = parse_fn(&values);\n    let points = parse_g1_points_from_flattened_field_elements_list(&elements)?;\n    let (q, sum_dlog) = run_ecip(&points, &scalars);\n    Ok(prepare_result(&q, &sum_dlog))\n}\n\nfn construct_digits_vectors<F: IsPrimeField + CurveParamsProvider<F>>(\n    list: &[BigUint],\n) -> Vec<Vec<i8>> {\n    let mut dss_ = Vec::new();\n\n    for scalar_biguint in list {\n        let neg_3_digits = neg_3_base_le(scalar_biguint);\n        dss_.push(neg_3_digits);\n    }\n\n    let max_len = dss_.iter().map(|ds| ds.len()).max().unwrap();\n    dss_.iter_mut().for_each(|ds| {\n        while ds.len() < max_len {\n            ds.push(0);\n        }\n    });\n\n    // Transpose the matrix\n    let mut dss = Vec::new();\n    for i in 0..max_len {\n        let ds: Vec<_> = dss_.iter().map(|d| d[i]).collect();\n        dss.push(ds);\n    }\n\n    dss\n}\n\npub fn neg_3_base_le(scalar: &BigUint) -> Vec<i8> {\n    if scalar == &BigUint::from(0u32) {\n        return vec![0];\n    }\n\n    let mut iscalar = scalar.to_bigint().unwrap();\n    let mut digits = Vec::new();\n    let three = BigInt::from(3);\n    let one = BigInt::from(1);\n    let min_one = BigInt::from(-1);\n    let zero = BigInt::from(0);\n    let two = BigInt::from(2);\n\n    while iscalar != zero {\n        let mut remainder = iscalar.clone() % three.clone();\n        if remainder < zero {\n            remainder += three.clone();\n        }\n        if remainder == two {\n            remainder = min_one.clone();\n            iscalar += one.clone();\n        }\n        digits.push(remainder.try_into().unwrap());\n        iscalar = -floor_division(iscalar.clone(), three.clone()); // Use floor division\n    }\n\n    digits\n}\n\nfn floor_division(a: BigInt, b: BigInt) -> BigInt {\n    let div = &a / &b;\n    let rem = &a % &b;\n    if (rem != BigInt::from(0)) && ((rem < BigInt::from(0)) != (b < BigInt::from(0))) {\n        div - BigInt::from(1)\n    } else {\n        div\n    }\n}\n\npub fn run_ecip<F>(points: &[G1Point<F>], scalars: &[BigUint]) -> (G1Point<F>, FunctionFelt<F>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n{\n    let dss = construct_digits_vectors::<F>(scalars);\n\n    // println!(\"Running ecip\");\n    let (q, divisors) = ecip_functions(points, dss);\n    // println!(\"Calculating dlogs\");\n    let dlogs: Vec<_> = divisors.iter().map(|d| dlog(d.clone())).collect();\n\n    let mut sum_dlog = dlogs[0].clone();\n    let minus_three = FieldElement::<F>::zero() - FieldElement::<F>::from(3);\n    let mut neg_3_power = FieldElement::<F>::one();\n    for dlog in dlogs.iter().skip(1) {\n        neg_3_power *= minus_three.clone();\n        sum_dlog = sum_dlog + dlog.clone().scale_by_coeff(neg_3_power.clone());\n    }\n\n    // let sum_dlog = sum_dlog.simplify();\n\n    (q, sum_dlog)\n}\n\nfn prepare_result<F>(q: &G1Point<F>, sum_dlog: &FunctionFelt<F>) -> [Vec<BigUint>; 5]\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    let q_list = &[q.x.clone(), q.y.clone()];\n    let a_num_list = &sum_dlog.a.numerator.coefficients;\n    let a_den_list = &sum_dlog.a.denominator.coefficients;\n    let b_num_list = &sum_dlog.b.numerator.coefficients;\n    let b_den_list = &sum_dlog.b.denominator.coefficients;\n    [\n        field_elements_to_big_uints(q_list),\n        field_elements_to_big_uints(a_num_list),\n        field_elements_to_big_uints(a_den_list),\n        field_elements_to_big_uints(b_num_list),\n        field_elements_to_big_uints(b_den_list),\n    ]\n}\n\n// Equivalent to line(p, p.neg()), converted to a polynomial\nfn line_p_p_neg<F: IsPrimeField + CurveParamsProvider<F>>(p: &G1Point<F>) -> FF<F> {\n    if p.is_infinity() {\n        // 1 + 0 * y.\n        return FF::new(vec![Polynomial::new(vec![FieldElement::one()])]);\n    }\n\n    // (-px + x) + 0 * y\n    FF::new(vec![Polynomial::new(vec![-&p.x, FieldElement::one()])])\n}\n\n// Equivalent to (line(a, a.neg()) * line(b, b.neg())).to_poly()\nfn mul_line_line_p_p_neg<F: IsPrimeField>(p: &G1Point<F>, q: &G1Point<F>) -> Polynomial<F> {\n    if p.is_infinity() {\n        // 1\n        if q.is_infinity() {\n            // 1\n            Polynomial::one()\n        } else {\n            // -qx + X\n            Polynomial::new(vec![-&q.x, FieldElement::one()])\n        }\n    } else if q.is_infinity() {\n        // -px + X\n        Polynomial::new(vec![-&p.x, FieldElement::one()])\n    } else {\n        // (-px+X) * (-qx+X) = px*qx -px * X - qx* X + X^2 = px*qx -(px + qx)X + X^2\n        Polynomial::new(vec![&p.x * &q.x, -&p.x - &q.x, FieldElement::one()])\n    }\n}\n\nfn line<F: IsPrimeField + CurveParamsProvider<F>>(p: &G1Point<F>, q: &G1Point<F>) -> FF<F> {\n    if p.is_infinity() {\n        if q.is_infinity() {\n            return FF::new(vec![Polynomial::new(vec![FieldElement::one()])]);\n        } else {\n            let qx = q.x.clone();\n            return FF::new(vec![Polynomial::new(vec![-qx, FieldElement::one()])]);\n        }\n    }\n    if q.is_infinity() {\n        let px = p.x.clone();\n        return FF::new(vec![Polynomial::new(vec![-px, FieldElement::one()])]);\n    }\n\n    let px = p.x.clone();\n    let py = p.y.clone();\n    let three: FieldElement<F> = FieldElement::from(3);\n    if p == q {\n        let m = (three * &px.square() + F::get_curve_params().a) / (py.double());\n        let m = m.unwrap();\n        let b = py - &m * px;\n        return FF::new(vec![\n            Polynomial::new(vec![-b, -m]),\n            Polynomial::new(vec![FieldElement::one()]),\n        ]);\n    }\n\n    if p == &q.neg() {\n        return FF::new(vec![Polynomial::new(vec![-px, FieldElement::one()])]);\n    }\n\n    let qx = q.x.clone();\n    let qy = q.y.clone();\n\n    let m = (py - &qy) / (px - &qx);\n    let m = m.unwrap();\n    let b = qy - &m * qx;\n    FF::new(vec![\n        Polynomial::new(vec![-b, -m]),\n        Polynomial::new(vec![FieldElement::one()]),\n    ])\n}\n\nfn construct_function<F: IsPrimeField + CurveParamsProvider<F>>(ps: Vec<G1Point<F>>) -> FF<F> {\n    if ps.is_empty() {\n        return FF::new(vec![Polynomial::new(vec![FieldElement::one()])]);\n    }\n\n    let mut xs: Vec<(G1Point<F>, FF<F>)> =\n        ps.iter().map(|p| (p.clone(), line_p_p_neg(p))).collect();\n\n    while xs.len() != 1 {\n        let mut xs2: Vec<(G1Point<F>, FF<F>)> = Vec::new();\n\n        let x0 = if !xs.len().is_multiple_of(2) {\n            let x0 = xs[0].clone();\n            xs.remove(0);\n            Some(x0)\n        } else {\n            None\n        };\n\n        for n in 0..(xs.len() / 2) {\n            let (a, a_num) = &xs[2 * n];\n            let (b, b_num) = &xs[2 * n + 1];\n            let a_num_b_num = a_num * b_num;\n\n            let line_ab = line(a, b);\n            let product = a_num_b_num * line_ab;\n            let num = product.reduce();\n            let den = mul_line_line_p_p_neg(a, b);\n            let d = num.div_by_poly(&den);\n            xs2.push((a.add(b), d));\n        }\n\n        if let Some(x0) = x0 {\n            xs2.push(x0);\n        }\n\n        xs = xs2;\n    }\n\n    assert!(xs[0].0.is_infinity(), \"xs[0] is not infinity\");\n\n    xs.last().unwrap().1.normalize()\n}\n\nfn row_function<F: IsPrimeField + CurveParamsProvider<F>>(\n    ds: Vec<i8>,\n    ps: &[G1Point<F>],\n    q: G1Point<F>,\n) -> (FF<F>, G1Point<F>) {\n    let one = 1;\n    let minus_one = -1;\n\n    let digits_points: Vec<G1Point<F>> = ds\n        .iter()\n        .zip(ps.iter())\n        .map(|(&d, p)| {\n            if d == one {\n                p.clone()\n            } else if d == minus_one {\n                p.neg()\n            } else {\n                G1Point::new_infinity()\n            }\n        })\n        .collect();\n\n    let sum_digits_points = digits_points\n        .iter()\n        .cloned()\n        .reduce(|x, y| x.add(&y))\n        .unwrap();\n\n    let q2 = q.scalar_mul_neg_3().add(&sum_digits_points);\n\n    let q_neg = q.neg();\n\n    // Pre-allocate with exact capacity to avoid reallocations\n    let mut div = Vec::with_capacity(4 + digits_points.len());\n\n    // Push negated points without cloning\n    div.push(q_neg.clone()); // Only clone once\n    div.push(q_neg.clone());\n    div.push(q_neg.clone());\n    div.push(q2.neg());\n\n    // Extend with non-infinity points directly to avoid double filtering\n    div.extend(digits_points.iter().filter(|p| !p.is_infinity()).cloned());\n\n    let d = construct_function(div);\n\n    (d, q2)\n}\n\nfn ecip_functions<F: IsPrimeField + CurveParamsProvider<F>>(\n    bs: &[G1Point<F>],\n    dss: Vec<Vec<i8>>,\n) -> (G1Point<F>, Vec<FF<F>>) {\n    let mut dss = dss;\n    dss.reverse();\n    let mut q = G1Point::new_infinity();\n    let mut divisors: Vec<FF<F>> = Vec::new();\n    for ds in dss.iter() {\n        let (div, new_q) = row_function(ds.clone(), bs, q);\n\n        divisors.push(div);\n        q = new_q;\n    }\n\n    divisors.reverse();\n    (q, divisors)\n}\n\nfn dlog<F: IsPrimeField + CurveParamsProvider<F>>(d: FF<F>) -> FunctionFelt<F> {\n    let d = d.reduce();\n    assert!(\n        d.coeffs.len() == 2,\n        \"D has {} coeffs: {:?}\",\n        d.coeffs.len(),\n        d.coeffs\n    );\n\n    let dx = FF::new(vec![\n        d.coeffs[0].differentiate(),\n        d.coeffs[1].differentiate(),\n    ]);\n\n    let dy = d.coeffs[1].clone();\n\n    let two_y = FF::<F>::new(vec![\n        Polynomial::<F>::zero(),\n        Polynomial::new(vec![FieldElement::<F>::from(2)]),\n    ]);\n\n    let poly = dy.clone()\n        * Polynomial::<F>::new(vec![\n            F::get_curve_params().a,\n            FieldElement::zero(),\n            FieldElement::from(3),\n        ]);\n\n    let u = dx * two_y.clone() + FF::new(vec![poly, Polynomial::zero()]);\n\n    let v = two_y * d;\n\n    let num = (u * v.clone().neg_y()).reduce();\n\n    let den_ff = (v.clone() * v.neg_y()).reduce();\n\n    assert!(\n        den_ff.coeffs[1].degree() == -1,\n        \"Den[1] is not zero: {:?}\",\n        den_ff.coeffs[1].degree()\n    );\n\n    let den = den_ff.coeffs[0].clone();\n\n    let den_lead_inv = den.leading_coefficient().inv().unwrap();\n\n    let (_, _, gcd_0) = Polynomial::xgcd(&num.coeffs[0], &den);\n    let (_, _, gcd_1) = Polynomial::xgcd(&num.coeffs[1], &den);\n\n    let a_num = num.coeffs[0].divfloor(&gcd_0);\n    let a_den = den.divfloor(&gcd_0);\n    let b_num = num.coeffs[1].divfloor(&gcd_1);\n    let b_den = den.divfloor(&gcd_1);\n\n    FunctionFelt {\n        a: RationalFunction::new(\n            a_num.scale_by_coeff(&den_lead_inv),\n            a_den.scale_by_coeff(&a_den.leading_coefficient().inv().unwrap()),\n        ),\n        b: RationalFunction::new(\n            b_num.scale_by_coeff(&den_lead_inv),\n            b_den.scale_by_coeff(&b_den.leading_coefficient().inv().unwrap()),\n        ),\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/ecip/ff.rs",
    "content": "use crate::algebra::polynomial::Polynomial;\nuse crate::definitions::FieldElement;\nuse lambdaworks_math::field::traits::IsPrimeField;\nuse std::ops::{Add, Mul};\n\nuse crate::definitions::CurveParamsProvider;\n\n#[derive(Debug, Clone)]\npub struct FF<F: IsPrimeField> {\n    pub coeffs: Vec<Polynomial<F>>,\n}\n\nimpl<F: IsPrimeField + CurveParamsProvider<F>> FF<F> {\n    pub fn new(coeffs: Vec<Polynomial<F>>) -> Self {\n        FF { coeffs }\n    }\n\n    pub fn degree(&self) -> usize {\n        self.coeffs.len() - 1\n    }\n\n    pub fn neg_y(self) -> FF<F> {\n        if self.coeffs.len() < 2 {\n            self\n        } else {\n            let mut coeff_neg = self.coeffs.clone();\n            for i in (1..coeff_neg.len()).step_by(2) {\n                coeff_neg[i] = -&coeff_neg[i];\n            }\n            FF { coeffs: coeff_neg }\n        }\n    }\n\n    pub fn reduce(&self) -> FF<F> {\n        match self.coeffs.len() {\n            0 => FF {\n                coeffs: vec![Polynomial::zero(), Polynomial::zero()],\n            },\n            1 => FF {\n                coeffs: vec![self.coeffs[0].clone(), Polynomial::zero()],\n            },\n            _ => {\n                let mut deg_0_coeff = self.coeffs[0].clone();\n                let mut deg_1_coeff = self.coeffs[1].clone();\n                let curve_params = F::get_curve_params();\n                let a = curve_params.a;\n                let b = curve_params.b;\n\n                let mut y2 = Polynomial::new(vec![b, a, FieldElement::zero(), FieldElement::one()]);\n\n                for (i, poly) in self.coeffs.iter().enumerate().skip(2) {\n                    if i % 2 == 0 {\n                        deg_0_coeff = deg_0_coeff + poly * &y2;\n                    } else {\n                        deg_1_coeff = deg_1_coeff + poly * &y2;\n\n                        y2 = &y2 * &y2;\n                    }\n                }\n\n                FF {\n                    coeffs: vec![deg_0_coeff, deg_1_coeff],\n                }\n            }\n        }\n    }\n\n    pub fn normalize(&self) -> FF<F> {\n        let coeff = self.coeffs[0].coefficients[0].clone();\n        let inv_coeff: FieldElement<F> = coeff.inv().unwrap();\n\n        FF {\n            coeffs: self\n                .coeffs\n                .iter()\n                .map(|c| c.scale_by_coeff(&inv_coeff))\n                .collect(),\n        }\n    }\n\n    pub fn to_poly(&self) -> Polynomial<F> {\n        assert!(self.coeffs.len() == 1);\n        self.coeffs[0].clone()\n    }\n\n    pub fn div_by_poly(&self, poly: &Polynomial<F>) -> FF<F> {\n        let coeffs: Vec<Polynomial<F>> = self\n            .coeffs\n            .iter()\n            .map(|c| c.clone().div_with_ref(poly))\n            .collect();\n\n        // println!(\"Final coefficients after division: {:?}\", coeffs);\n\n        FF { coeffs }\n    }\n\n    pub fn print_as_sage_poly(&self) -> String {\n        let mut string = String::new();\n        let coeffs = &self.coeffs;\n\n        for (i, p) in coeffs.iter().rev().enumerate() {\n            let coeff_str = p.print_as_sage_poly();\n\n            if i == coeffs.len() - 1 {\n                if coeff_str.is_empty() {\n                    string.truncate(string.len().saturating_sub(2));\n                } else {\n                    string.push_str(&coeff_str);\n                }\n            } else if i == coeffs.len() - 2 {\n                string.push_str(&format!(\"({})*y + \", coeff_str));\n            } else {\n                string.push_str(&format!(\"({})*y^{} + \", coeff_str, coeffs.len() - i - 1));\n            }\n        }\n\n        string\n    }\n}\n\nimpl<F: IsPrimeField + CurveParamsProvider<F>> Add for FF<F> {\n    type Output = Self;\n\n    fn add(self, other: Self) -> Self::Output {\n        let max_degree = self.coeffs.len().max(other.coeffs.len());\n        let mut coeffs = vec![Polynomial::zero(); max_degree];\n\n        for i in 0..self.coeffs.len() {\n            coeffs[i] = &coeffs[i] + &self.coeffs[i];\n        }\n\n        for i in 0..other.coeffs.len() {\n            coeffs[i] = &coeffs[i] + &other.coeffs[i];\n        }\n\n        FF::new(coeffs)\n    }\n}\n\nimpl<F: IsPrimeField + CurveParamsProvider<F>> Mul for FF<F> {\n    type Output = Self;\n\n    fn mul(self, other: Self) -> Self::Output {\n        let max_degree = self.coeffs.len() + other.coeffs.len() - 1;\n        let mut coeffs = vec![Polynomial::zero(); max_degree];\n\n        if self.coeffs.is_empty() || other.coeffs.is_empty() {\n            return FF::new(vec![Polynomial::zero()]);\n        }\n\n        for (i, self_poly) in self.coeffs.iter().enumerate() {\n            for (j, other_poly) in other.coeffs.iter().enumerate() {\n                let product = self_poly * other_poly;\n                coeffs[i + j] = &coeffs[i + j] + &product;\n            }\n        }\n\n        FF::new(coeffs)\n    }\n}\n\nimpl<F: IsPrimeField + CurveParamsProvider<F>> Mul for &FF<F> {\n    type Output = FF<F>;\n\n    fn mul(self, other: Self) -> Self::Output {\n        let max_degree = self.coeffs.len() + other.coeffs.len() - 1;\n        let mut coeffs = vec![Polynomial::zero(); max_degree];\n\n        if self.coeffs.is_empty() || other.coeffs.is_empty() {\n            return FF::new(vec![Polynomial::zero()]);\n        }\n\n        for (i, self_poly) in self.coeffs.iter().enumerate() {\n            for (j, other_poly) in other.coeffs.iter().enumerate() {\n                let product = self_poly * other_poly;\n                coeffs[i + j] = &coeffs[i + j] + &product;\n            }\n        }\n\n        FF::new(coeffs)\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/frobenius.rs",
    "content": "use crate::algebra::polynomial::Polynomial;\nuse crate::definitions::CurveID;\nuse lambdaworks_math::field::element::FieldElement;\nuse lambdaworks_math::field::traits::IsPrimeField;\nuse std::collections::HashMap;\n\ntype FrobeniusMap<F> = HashMap<usize, Vec<Vec<(usize, FieldElement<F>)>>>;\n\npub fn frobenius<F: IsPrimeField>(\n    frobenius_maps: &FrobeniusMap<F>,\n    x: &Polynomial<F>,\n    frob_power: usize,\n    ext_degree: usize,\n) -> Polynomial<F> {\n    let frobenius_map = frobenius_maps.get(&frob_power).unwrap();\n    assert!(x.coefficients.len() <= ext_degree);\n    let mut frob = vec![];\n    for coeffs in frobenius_map.iter().take(x.coefficients.len()) {\n        let mut v = FieldElement::from(0);\n        for (index, constant) in coeffs {\n            v += constant * &x.coefficients[*index];\n        }\n        frob.push(v);\n    }\n    Polynomial::new(frob)\n}\n\n// returns only the indices required by multi_pairing_check (bn254: 1, 2, 3; bls12-381: 1)\npub fn get_frobenius_maps_ext_degree_12<F: IsPrimeField>(curve_id: CurveID) -> FrobeniusMap<F> {\n    match curve_id {\n    CurveID::BN254 =>\n        HashMap::from([\n            (1, vec![\n                vec![\n                    (0, FieldElement::from_hex(\"1\").unwrap()),\n                    (6, FieldElement::from_hex(\"12\").unwrap()),\n                ],\n                vec![\n                    (1, FieldElement::from_hex(\"1d8c8daef3eee1e81b2522ec5eb28ded6895e1cdfde6a43f5daa971f3fa65955\").unwrap()),\n                    (7, FieldElement::from_hex(\"217e400dc9351e774e34e2ac06ead4000d14d1e242b29c567e9c385ce480a71a\").unwrap()),\n                ],\n                vec![\n                    (2, FieldElement::from_hex(\"242b719062f6737b8481d22c6934ce844d72f250fd28d102c0d147b2f4d521a7\").unwrap()),\n                    (8, FieldElement::from_hex(\"359809094bd5c8e1b9c22d81246ffc2e794e17643ac198484b8d9094aa82536\").unwrap()),\n                ],\n                vec![\n                    (3, FieldElement::from_hex(\"21436d48fcb50cc60dd4ef1e69a0c1f0dd2949fa6df7b44cbb259ef7cb58d5ed\").unwrap()),\n                    (9, FieldElement::from_hex(\"18857a58f3b5bb3038a4311a86919d9c7c6c15f88a4f4f0831364cf35f78f771\").unwrap()),\n                ],\n                vec![\n                    (4, FieldElement::from_hex(\"2c84bbad27c3671562b7adefd44038ab3c0bbad96fc008e7d6998c82f7fc048b\").unwrap()),\n                    (10, FieldElement::from_hex(\"c33b1c70e4fd11b6d1eab6fcd18b99ad4afd096a8697e0c9c36d8ca3339a7b5\").unwrap()),\n                ],\n                vec![\n                    (5, FieldElement::from_hex(\"1b007294a55accce13fe08bea73305ff6bdac77c5371c546d428780a6e3dcfa8\").unwrap()),\n                    (11, FieldElement::from_hex(\"215d42e7ac7bd17cefe88dd8e6965b3adae92c974f501fe811493d72543a3977\").unwrap()),\n                ],\n                vec![\n                    (6, FieldElement::from_hex(\"30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46\").unwrap()),\n                ],\n                vec![\n                    (1, FieldElement::from_hex(\"246996f3b4fae7e6a6327cfe12150b8e747992778eeec7e5ca5cf05f80f362ac\").unwrap()),\n                    (7, FieldElement::from_hex(\"12d7c0c3ed42be419d2b22ca22ceca702eeb88c36a8b264dde75f4f798d6a3f2\").unwrap()),\n                ],\n                vec![\n                    (2, FieldElement::from_hex(\"16c9e55061ebae204ba4cc8bd75a079432ae2a1d0b7c9dce1665d51c640fcba2\").unwrap()),\n                    (8, FieldElement::from_hex(\"c38dce27e3b2cae33ce738a184c89d94a0e78406b48f98a7b4f4463e3a7dba0\").unwrap()),\n                ],\n                vec![\n                    (3, FieldElement::from_hex(\"7c03cbcac41049a0704b5a7ec796f2b21807dc98fa25bd282d37f632623b0e3\").unwrap()),\n                    (9, FieldElement::from_hex(\"f20e129e47c9363aa7b569817e0966cba582096fa7a164080faed1f0d24275a\").unwrap()),\n                ],\n                vec![\n                    (4, FieldElement::from_hex(\"2c145edbe7fd8aee9f3a80b03b0b1c923685d2ea1bdec763c13b4711cd2b8126\").unwrap()),\n                    (10, FieldElement::from_hex(\"3df92c5b96e3914559897c6ad411fb25b75afb7f8b1c1a56586ff93e080f8bc\").unwrap()),\n                ],\n                vec![\n                    (5, FieldElement::from_hex(\"12acf2ca76fd0675a27fb246c7729f7db080cb99678e2ac024c6b8ee6e0c2c4b\").unwrap()),\n                    (11, FieldElement::from_hex(\"1563dbde3bd6d35ba4523cf7da4e525e2ba6a3151500054667f8140c6a3f2d9f\").unwrap()),\n                ],\n            ]),\n            (2, vec![\n                vec![\n                    (0, FieldElement::from_hex(\"1\").unwrap()),\n                ],\n                vec![\n                    (1, FieldElement::from_hex(\"30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd49\").unwrap()),\n                ],\n                vec![\n                    (2, FieldElement::from_hex(\"30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd48\").unwrap()),\n                ],\n                vec![\n                    (3, FieldElement::from_hex(\"30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46\").unwrap()),\n                ],\n                vec![\n                    (4, FieldElement::from_hex(\"59e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe\").unwrap()),\n                ],\n                vec![\n                    (5, FieldElement::from_hex(\"59e26bcea0d48bacd4f263f1acdb5c4f5763473177ffffff\").unwrap()),\n                ],\n                vec![\n                    (6, FieldElement::from_hex(\"1\").unwrap()),\n                ],\n                vec![\n                    (7, FieldElement::from_hex(\"30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd49\").unwrap()),\n                ],\n                vec![\n                    (8, FieldElement::from_hex(\"30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd48\").unwrap()),\n                ],\n                vec![\n                    (9, FieldElement::from_hex(\"30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46\").unwrap()),\n                ],\n                vec![\n                    (10, FieldElement::from_hex(\"59e26bcea0d48bacd4f263f1acdb5c4f5763473177fffffe\").unwrap()),\n                ],\n                vec![\n                    (11, FieldElement::from_hex(\"59e26bcea0d48bacd4f263f1acdb5c4f5763473177ffffff\").unwrap()),\n                ],\n            ]),\n            (3, vec![\n                vec![\n                    (0, FieldElement::from_hex(\"1\").unwrap()),\n                    (6, FieldElement::from_hex(\"12\").unwrap()),\n                ],\n                vec![\n                    (1, FieldElement::from_hex(\"13d0c369615f7bb0b2bdfa8fef85fa07122bde8d67dfc8fabd3581ad840ddd76\").unwrap()),\n                    (7, FieldElement::from_hex(\"18a0f4219f4fdff6fc2bf531eb331a053a35744cac285af5685d3f90eacf7a66\").unwrap()),\n                ],\n                vec![\n                    (2, FieldElement::from_hex(\"c3a5e9c462a654779c3e050c9ca2a428908a81264e2b5a5bf22f67654883ae6\").unwrap()),\n                    (8, FieldElement::from_hex(\"2ce02aa5f9bf8cd65bdd2055c255cf9d9e08c1d9345582cc92fd973c74bd77f4\").unwrap()),\n                ],\n                vec![\n                    (3, FieldElement::from_hex(\"f20e129e47c9363aa7b569817e0966cba582096fa7a164080faed1f0d24275a\").unwrap()),\n                    (9, FieldElement::from_hex(\"17ded419ed7be4f97fac149bfaefbac11b155498de227b850aea3f23790405d6\").unwrap()),\n                ],\n                vec![\n                    (4, FieldElement::from_hex(\"1bfe7b214c0294242fb81a8dccd8a9b4441d64f34150a79753fb0cd31cc99cc0\").unwrap()),\n                    (10, FieldElement::from_hex(\"697b9c523e0390ed15da0ec97a9b8346513297b9efaf0f0f1a228f0d5662fbd\").unwrap()),\n                ],\n                vec![\n                    (5, FieldElement::from_hex(\"7a0e052f2b1c443b5186d6ac4c723b85d3f78a3182d2db0c413901c32b0c6fe\").unwrap()),\n                    (11, FieldElement::from_hex(\"1b76a37fba85f3cd5dc79824a3792597356c892c39c0d06b220500933945267f\").unwrap()),\n                ],\n                vec![\n                    (6, FieldElement::from_hex(\"30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46\").unwrap()),\n                ],\n                vec![\n                    (1, FieldElement::from_hex(\"abf8b60be77d7306cbeee33576139d7f03a5e397d439ec7694aa2bf4c0c101\").unwrap()),\n                    (7, FieldElement::from_hex(\"1c938b097fd2247905924b2691fb5e5685558c04009201927eeb0a69546f1fd1\").unwrap()),\n                ],\n                vec![\n                    (2, FieldElement::from_hex(\"4f1de41b3d1766fa9f30e6dec26094f0fdf31bf98ff2631380cab2baaa586de\").unwrap()),\n                    (8, FieldElement::from_hex(\"2429efd69b073ae23e8c6565b7b72e1b0e78c27f038f14e77cfd95a083f4c261\").unwrap()),\n                ],\n                vec![\n                    (3, FieldElement::from_hex(\"28a411b634f09b8fb14b900e9507e9327600ecc7d8cf6ebab94d0cb3b2594c64\").unwrap()),\n                    (9, FieldElement::from_hex(\"21436d48fcb50cc60dd4ef1e69a0c1f0dd2949fa6df7b44cbb259ef7cb58d5ed\").unwrap()),\n                ],\n                vec![\n                    (4, FieldElement::from_hex(\"23d5e999e1910a12feb0f6ef0cd21d04a44a9e08737f96e55fe3ed9d730c239f\").unwrap()),\n                    (10, FieldElement::from_hex(\"1465d351952f0c0588982b28b4a8aea95364059e272122f5e8257f43bbb36087\").unwrap()),\n                ],\n                vec![\n                    (5, FieldElement::from_hex(\"16db366a59b1dd0b9fb1b2282a48633d3e2ddaea200280211f25041384282499\").unwrap()),\n                    (11, FieldElement::from_hex(\"28c36e1fee7fdbe60337d84bbcba34a53a41f1ee50449cdc780cfbfaa5cc3649\").unwrap()),\n                ],\n            ]),\n        ]),\n    CurveID::BLS12_381 =>\n        HashMap::from([\n            (1, vec![\n                vec![\n                    (0, FieldElement::from_hex(\"1\").unwrap()),\n                    (6, FieldElement::from_hex(\"2\").unwrap()),\n                ],\n                vec![\n                    (1, FieldElement::from_hex(\"18089593cbf626353947d5b1fd0c6d66bb34bc7585f5abdf8f17b50e12c47d65ce514a7c167b027b600febdb244714c5\").unwrap()),\n                    (7, FieldElement::from_hex(\"18089593cbf626353947d5b1fd0c6d66bb34bc7585f5abdf8f17b50e12c47d65ce514a7c167b027b600febdb244714c5\").unwrap()),\n                ],\n                vec![\n                    (2, FieldElement::from_hex(\"5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffeffff\").unwrap()),\n                ],\n                vec![\n                    (9, FieldElement::from_hex(\"d5e1c086ffe8016d063c6dad7a2fffc9072bb5785a686bcefeedc2e0124838bdccf325ee5d80be9902109f7dbc79812\").unwrap()),\n                ],\n                vec![\n                    (4, FieldElement::from_hex(\"1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaad\").unwrap()),\n                    (10, FieldElement::from_hex(\"1a0111ea397fe6998ce8d956845e1033efa3bf761f6622e9abc9802928bfc912627c4fd7ed3ffffb5dfb00000001aaaf\").unwrap()),\n                ],\n                vec![\n                    (5, FieldElement::from_hex(\"b659fb20274bfb1be8ff4d69163c08be7302c4818171fdd17d5be9b1d380acd8c747cdc4aff0e653631f5d3000f022c\").unwrap()),\n                    (11, FieldElement::from_hex(\"b659fb20274bfb1be8ff4d69163c08be7302c4818171fdd17d5be9b1d380acd8c747cdc4aff0e653631f5d3000f022c\").unwrap()),\n                ],\n                vec![\n                    (6, FieldElement::from_hex(\"1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaaa\").unwrap()),\n                ],\n                vec![\n                    (1, FieldElement::from_hex(\"fc3e2b36c4e03288e9e902231f9fb854a14787b6c7b36fec0c8ec971f63c5f282d5ac14d6c7ec22cf78a126ddc4af3\").unwrap()),\n                    (7, FieldElement::from_hex(\"1f87c566d89c06511d3d204463f3f70a9428f0f6d8f66dfd8191d92e3ec78be505ab5829ad8fd8459ef1424dbb895e6\").unwrap()),\n                ],\n                vec![\n                    (2, FieldElement::from_hex(\"1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaac\").unwrap()),\n                    (8, FieldElement::from_hex(\"1a0111ea397fe699ec02408663d4de85aa0d857d89759ad4897d29650fb85f9b409427eb4f49fffd8bfd00000000aaac\").unwrap()),\n                ],\n                vec![\n                    (3, FieldElement::from_hex(\"6af0e0437ff400b6831e36d6bd17ffe48395dabc2d3435e77f76e17009241c5ee67992f72ec05f4c81084fbede3cc09\").unwrap()),\n                ],\n                vec![\n                    (10, FieldElement::from_hex(\"5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe\").unwrap()),\n                ],\n                vec![\n                    (5, FieldElement::from_hex(\"144e4211384586c16bd3ad4afa99cc9170df3560e77982d0db45f3536814f0bd5871c1908bd478cd1ee605167ff82995\").unwrap()),\n                    (11, FieldElement::from_hex(\"e9b7238370b26e88c8bb2dfb1e7ec4b7d471f3cdb6df2e24f5b1405d978eb56923783226654f19a83cd0a2cfff0a87f\").unwrap()),\n                ],\n            ]),\n        ]),\n    _ => unimplemented!(),\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/hints/eisenstein.rs",
    "content": "use num_bigint::BigInt;\nuse num_traits::{One, Signed, Zero};\n\n/// Axial coordinates of the 6 unit directions in the hexagonal lattice.\nconst NEIGHBOURS: [(i32, i32); 6] = [(1, 0), (0, 1), (-1, 1), (-1, 0), (0, -1), (1, -1)];\n\n/// Symmetric integer rounding  ⌊(z + d/2) / d⌋  valid for *any* sign of `z`.\nfn round_nearest(z: &BigInt, d: &BigInt) -> BigInt {\n    debug_assert!(*d > BigInt::zero());\n    let half = d >> 1; // d / 2\n    if *z >= BigInt::zero() {\n        (z + &half) / d\n    } else {\n        let quotient: BigInt = ((-z) + &half) / d;\n        -quotient\n    }\n}\n\n/*\nRepresents an Eisenstein integer z = a0 + a1*ω, where ω = exp(2πi/3).\n\nω satisfies ω^2 + ω + 1 = 0.\nUses Python's built-in arbitrary-precision integers.\n\nAttributes:\n    a0: The integer coefficient of 1.\n    a1: The integer coefficient of ω.\n*/\n#[derive(Clone, Debug, Eq, PartialEq)]\npub struct EisensteinInteger {\n    pub a0: BigInt,\n    pub a1: BigInt,\n}\n\nimpl EisensteinInteger {\n    /*Initializes an EisensteinInteger.*/\n    pub fn new(a0: BigInt, a1: BigInt) -> Self {\n        Self { a0, a1 }\n    }\n    /*Sets the value of self to the value of other. Returns self.*/\n    pub fn set(&mut self, other: &Self) -> &Self {\n        self.a0 = other.a0.clone();\n        self.a1 = other.a1.clone();\n        self\n    }\n    /*Sets the value of self to zero. Returns self.*/\n    pub fn set_zero(&mut self) -> &Self {\n        self.a0 = BigInt::zero();\n        self.a1 = BigInt::zero();\n        self\n    }\n    /*Sets the value of self to one. Returns self.*/\n    pub fn set_one(&mut self) -> &Self {\n        self.a0 = BigInt::one();\n        self.a1 = BigInt::zero();\n        self\n    }\n    /*\n    Computes the complex conjugate.\n\n    conj(a0 + a1*ω) = (a0 - a1) - a1*ω\n    */\n    pub fn conjugate(&self) -> Self {\n        Self::new(&self.a0 - &self.a1, -&self.a1)\n    }\n    /*\n    Computes the norm N(self).\n\n    N(a0 + a1*ω) = a0^2 + a1^2 - a0*a1\n    The norm is always non-negative.\n    */\n    pub fn norm(&self) -> BigInt {\n        &self.a0.pow(2) + &self.a1.pow(2) - &self.a0 * &self.a1\n    }\n    /*\n    Performs Euclidean division self / y using rounding to the NEAREST Eisenstein integer.\n\n    This method guarantees norm(remainder) < norm(divisor).\n\n    Args:\n        y: The divisor (must be non-zero).\n\n    Returns:\n        A tuple (quotient, remainder).\n\n    Raises:\n        ZeroDivisionError: If y is zero.\n        TypeError: If y is not an EisensteinInteger.\n    */\n    /* ---------- Euclidean division in ℤ[ω] ---------- */\n    pub fn quo_rem(&self, y: &Self) -> Result<[Self; 2], String> {\n        if y.is_zero() {\n            return Err(\"division by zero EisensteinInteger\".into());\n        }\n        let nrm = y.norm(); // positive\n        let num = self * &y.conjugate(); // still integer-only\n\n        // first guess by independent symmetric rounding\n        let mut q0 = round_nearest(&num.a0, &nrm);\n        let mut q1 = round_nearest(&num.a1, &nrm);\n        let mut q = Self::new(q0.clone(), q1.clone());\n        // Calculate product first, then subtract its reference\n        let qy = &q * y;\n        let mut r = self - &qy;\n\n        // walk the neighbourhood until  N(r) < N(y)  (≤ 2 iterations)\n        while r.norm() >= nrm {\n            let mut best_q = None;\n            let mut best_r = None;\n            let mut best_n2 = r.norm(); // current (worst) remainder\n\n            for (dp, dq) in NEIGHBOURS.iter() {\n                let cand_q = Self::new(&q0 + dp, &q1 + dq);\n                // Calculate product first, then subtract its reference\n                let cand_qy = &cand_q * y;\n                let cand_r = self - &cand_qy;\n                let cand_n2 = cand_r.norm();\n                if cand_n2 < best_n2 {\n                    best_q = Some(cand_q);\n                    best_r = Some(cand_r);\n                    best_n2 = cand_n2;\n                }\n            }\n            q = best_q.expect(\"Euclidean property violated\");\n            r = best_r.unwrap();\n            q0 = q.a0.clone();\n            q1 = q.a1.clone(); // centre for 2nd lap\n        }\n        Ok([q, r])\n    }\n}\n\nimpl std::fmt::Display for EisensteinInteger {\n    /*Returns a user-friendly string representation (e.g., '3 + 2*ω').*/\n    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {\n        if self.a1.is_zero() {\n            write!(f, \"{}\", self.a0)\n        } else {\n            let a0_str = if !self.a0.is_zero() {\n                format!(\"{}\", self.a0)\n            } else {\n                \"\".into()\n            };\n\n            let a1_str = if self.a1 == BigInt::one() {\n                \"ω\".into()\n            } else if self.a1 == (-1).into() {\n                \"-ω\".into()\n            } else {\n                format!(\"{}*ω\", self.a1)\n            };\n\n            if a0_str.is_empty() {\n                write!(f, \"{}\", a1_str)\n            } else {\n                let sign = if self.a1 > BigInt::zero() {\n                    \" + \"\n                } else {\n                    \" - \"\n                };\n                let a1_abs_str = if self.a1.abs() == BigInt::one() {\n                    \"ω\".into()\n                } else {\n                    format!(\"{}*ω\", self.a1.abs())\n                };\n                write!(f, \"{}{}{}\", a0_str, sign, a1_abs_str)\n            }\n        }\n    }\n}\n\nimpl std::ops::Neg for EisensteinInteger {\n    type Output = Self;\n\n    /*Computes the negation -self.*/\n    fn neg(self) -> Self::Output {\n        Self {\n            a0: -self.a0,\n            a1: -self.a1,\n        }\n    }\n}\n\nimpl std::ops::Add for EisensteinInteger {\n    type Output = Self;\n\n    /*Computes the sum self + other.*/\n    fn add(self, other: Self) -> Self::Output {\n        &self + &other\n    }\n}\n\nimpl<'a> std::ops::Add<&'a EisensteinInteger> for &'a EisensteinInteger {\n    type Output = EisensteinInteger;\n\n    /*Computes the sum self + other.*/\n    fn add(self, other: Self) -> Self::Output {\n        EisensteinInteger::new(&self.a0 + &other.a0, &self.a1 + &other.a1)\n    }\n}\n\nimpl std::ops::Sub for EisensteinInteger {\n    type Output = Self;\n\n    /*Computes the difference self - other.*/\n    fn sub(self, other: Self) -> Self::Output {\n        &self - &other\n    }\n}\n\nimpl<'a> std::ops::Sub<&'a EisensteinInteger> for &'a EisensteinInteger {\n    type Output = EisensteinInteger;\n\n    /*Computes the difference self - other.*/\n    fn sub(self, other: Self) -> Self::Output {\n        EisensteinInteger::new(&self.a0 - &other.a0, &self.a1 - &other.a1)\n    }\n}\n\nimpl std::ops::Mul for EisensteinInteger {\n    type Output = Self;\n\n    /*\n    Computes the product self * other.\n\n    Supports multiplication by another EisensteinInteger.\n    Uses the identity (x0+x1ω)(y0+y1ω) = (x0y0 - x1y1) + (x0y1 + x1y0 - x1y1)ω.\n    */\n    fn mul(self, other: Self) -> Self::Output {\n        &self * &other\n    }\n}\n\nimpl<'a> std::ops::Mul<&'a EisensteinInteger> for &'a EisensteinInteger {\n    type Output = EisensteinInteger;\n\n    /*\n    Computes the product self * other.\n\n    Supports multiplication by another EisensteinInteger.\n    Uses the identity (x0+x1ω)(y0+y1ω) = (x0y0 - x1y1) + (x0y1 + x1y0 - x1y1)ω.\n    */\n    fn mul(self, other: Self) -> Self::Output {\n        let (x0, x1) = (&self.a0, &self.a1);\n        let (y0, y1) = (&other.a0, &other.a1);\n        let res_a0 = x0 * y0 - x1 * y1;\n        let res_a1 = x0 * y1 + x1 * y0 - x1 * y1;\n        EisensteinInteger::new(res_a0, res_a1)\n    }\n}\n\nimpl std::ops::Mul<BigInt> for EisensteinInteger {\n    type Output = Self;\n\n    /*Computes the product self * int.*/\n    fn mul(self, other: BigInt) -> Self::Output {\n        &self * &other\n    }\n}\n\nimpl<'a> std::ops::Mul<&'a BigInt> for &'a EisensteinInteger {\n    type Output = EisensteinInteger;\n\n    /*Computes the product self * int.*/\n    fn mul(self, other: &BigInt) -> Self::Output {\n        other * self\n    }\n}\n\nimpl std::ops::Mul<EisensteinInteger> for BigInt {\n    type Output = EisensteinInteger;\n\n    /*Computes the product int * self.*/\n    fn mul(self, other: EisensteinInteger) -> Self::Output {\n        &self * &other\n    }\n}\n\nimpl<'a> std::ops::Mul<&'a EisensteinInteger> for &'a BigInt {\n    type Output = EisensteinInteger;\n\n    /*Computes the product int * self.*/\n    fn mul(self, other: &EisensteinInteger) -> Self::Output {\n        EisensteinInteger::new(self * &other.a0, self * &other.a1)\n    }\n}\n\nimpl std::ops::Div for EisensteinInteger {\n    type Output = Self;\n\n    /*Computes the quotient self // other using Euclidean rounding division.*/\n    fn div(self, other: Self) -> Self::Output {\n        &self / &other\n    }\n}\n\nimpl<'a> std::ops::Div<&'a EisensteinInteger> for &'a EisensteinInteger {\n    type Output = EisensteinInteger;\n\n    /*Computes the quotient self // other using Euclidean rounding division.*/\n    fn div(self, other: Self) -> Self::Output {\n        let [q, _] = self.quo_rem(other).unwrap();\n        q\n    }\n}\n\nimpl std::ops::Rem for EisensteinInteger {\n    type Output = Self;\n\n    /*Computes the remainder self % other using Euclidean rounding division.*/\n    fn rem(self, other: Self) -> Self::Output {\n        &self % &other\n    }\n}\n\nimpl<'a> std::ops::Rem<&'a EisensteinInteger> for &'a EisensteinInteger {\n    type Output = EisensteinInteger;\n\n    /*Computes the remainder self % other using Euclidean rounding division.*/\n    fn rem(self, other: Self) -> Self::Output {\n        let [_, r] = self.quo_rem(other).unwrap();\n        r\n    }\n}\n\nimpl Zero for EisensteinInteger {\n    fn zero() -> Self {\n        Self::new(BigInt::zero(), BigInt::zero())\n    }\n\n    /*Checks if the value is zero.*/\n    fn is_zero(&self) -> bool {\n        self.a0.is_zero() && self.a1.is_zero()\n    }\n}\n\nimpl One for EisensteinInteger {\n    fn one() -> Self {\n        Self::new(BigInt::one(), BigInt::zero())\n    }\n}\n\n/*\nComputes the partial GCD result using the Half-GCD approach based on norm reduction.\n\nArgs:\n    a: The first EisensteinInteger.\n    b: The second EisensteinInteger.\n\nReturns:\n    A tuple (w, v, u) such that w = a*u + b*v and norm(w) is approximately\n    less than sqrt(norm(a)). The identity w = a*u + b*v always holds.\n\nRaises:\n    TypeError: If inputs are not EisensteinInteger instances.\n    ValueError: If the norm of 'a' is unexpectedly negative.\n    RuntimeError: If the algorithm takes an excessive number of iterations.\n*/\npub fn half_gcd(\n    a: &EisensteinInteger,\n    b: &EisensteinInteger,\n) -> Result<[EisensteinInteger; 3], String> {\n    // Initialize variables for the Extended Euclidean Algorithm\n    let mut a_run = a.clone();\n    let mut b_run = b.clone();\n    let mut u = EisensteinInteger::one(); // Use class constant copies\n    let mut v = EisensteinInteger::zero();\n    let mut u_ = EisensteinInteger::zero();\n    let mut v_ = EisensteinInteger::one();\n    // Invariants: a_run = a*u + b*v,  b_run = a*u_ + b*v_\n\n    let norm_a = a.norm();\n    if norm_a < BigInt::zero() {\n        return Err(\"Norm of input 'a' cannot be negative\".into());\n    }\n    // Calculate the termination threshold\n    let limit = norm_a.sqrt();\n\n    // Loop while the norm of the 'smaller' value (b_run) is >= the limit\n    let mut iteration = 0;\n    let max_iterations = 20000; // Safety limit\n\n    while b_run.norm() >= limit {\n        if iteration > max_iterations {\n            return Err(format!(\n                \"HalfGCD exceeded {} iterations for a={}, b={}\",\n                max_iterations, a, b\n            ));\n        }\n\n        if b_run.is_zero() {\n            break; // GCD is a_run\n        }\n\n        let [quotient, remainder] = match a_run.quo_rem(&b_run) {\n            Ok(result) => result,\n            _ => break, // Should ideally not happen if b_run.is_zero() check works\n        };\n\n        // Update coefficients\n        let next_u_ = u - &quotient * &u_;\n        let next_v_ = v - &quotient * &v_;\n\n        // Update state\n        (a_run, b_run) = (b_run, remainder);\n        (u, u_) = (u_, next_u_);\n        (v, v_) = (v_, next_v_);\n\n        iteration += 1;\n    }\n\n    // Return the final state corresponding to the Go implementation's return values\n    // (b_run, v_, u_) which satisfy b_run = a*u_ + b*v_\n    Ok([b_run, v_, u_])\n}\n\n#[allow(unused_imports)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn test_01() -> Result<(), String> {\n        let z1 = EisensteinInteger::new(3.into(), 2.into()); // 3 + 2ω\n        let z2 = EisensteinInteger::new(1.into(), (-1).into()); // 1 - ω\n\n        println!(\"z1 = {}\", z1);\n        println!(\"z2 = {}\", z2);\n        println!(\"z1 + z2 = {}\", &z1 + &z2);\n        println!(\"z1 - z2 = {}\", &z1 - &z2);\n        println!(\"z1 * z2 = {}\", &z1 * &z2);\n        println!(\"Norm(z1) = {}\", z1.norm());\n        println!(\"Conj(z1) = {}\", z1.conjugate());\n        println!(\"-z1 = {}\", -z1.clone());\n\n        let [q, r] = z1.quo_rem(&z2)?;\n        println!(\"z1 // z2 = {}\", q);\n        println!(\"z1 % z2 = {}\", r);\n        println!(\"Check: z2 * q + r = {}, Expected: {}\", &(&z2 * &q) + &r, z1);\n        assert_eq!(&(&z2 * &q) + &r, z1);\n\n        // Half GCD example\n        let a = EisensteinInteger::new(10.into(), 3.into());\n        let b = EisensteinInteger::new(3.into(), 1.into());\n        println!(\"\\nHalf GCD for a = {}, b = {}\", a, b);\n        let [w, v_res, u_res] = half_gcd(&a, &b)?;\n        println!(\"  w = {}\", w);\n        println!(\"  v = {}\", v_res);\n        println!(\"  u = {}\", u_res);\n        let check = &a * &u_res + &b * &v_res;\n        println!(\"  Check: a*u + b*v = {}, Expected w: {}\", check, w);\n        println!(\"  Norm(w) = {}, Limit = {}\", w.norm(), a.norm().sqrt());\n        assert_eq!(check, w);\n\n        // a = EisensteinInteger(8+7j * (math.sqrt(3)/2 + 0.5j)) # Approximate large number\n        let a_int = EisensteinInteger::new(13.into(), 14.into()); // Example large int coeffs\n        let b_int = EisensteinInteger::new(5.into(), 3.into());\n        println!(\"\\nHalf GCD for a = {}, b = {}\", a_int, b_int);\n        let [w, v_res, u_res] = half_gcd(&a_int, &b_int)?;\n        println!(\"  w = {}\", w);\n        println!(\"  v = {}\", v_res);\n        println!(\"  u = {}\", u_res);\n        let check = &a_int * &u_res + &b_int * &v_res;\n        println!(\"  Check: a*u + b*v = {}, Expected w: {}\", check, w);\n        println!(\"  Norm(w) = {}, Limit = {}\", w.norm(), a_int.norm().sqrt());\n        assert_eq!(check, w);\n\n        Ok(())\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/hints/fake_glv.rs",
    "content": "use crate::algebra::g1point::G1Point;\nuse crate::definitions::CurveParamsProvider;\nuse crate::hints::eisenstein;\nuse lambdaworks_math::field::traits::IsPrimeField;\nuse num_bigint::{BigInt, BigUint, Sign, ToBigInt};\nuse num_integer::Integer;\nuse num_traits::Signed;\n\n/*\nRepresents a 2D lattice basis (V1, V2) derived from GLV decomposition.\n\nAttributes:\n    V1: First basis vector [v11, v12].\n    V2: Second basis vector [v21, v22], chosen to be short.\n    Det: Determinant of the lattice basis (v11*v22 - v12*v21).\n    b1: Rounding coefficient derived from V2, used in scalar decomposition.\n    b2: Rounding coefficient derived from V1, used in scalar decomposition.\n*/\nstruct Lattice {\n    v1: [BigInt; 2],\n    v2: [BigInt; 2],\n    det: BigInt,\n    b1: BigInt,\n    b2: BigInt,\n}\n\n/*\nComputes the first vector of a GLV lattice basis for a given modulus and input.\n\nThis is a Python adaptation of a Go function likely used for cryptographic\nscalar multiplication optimizations (GLV method).\n\nArgs:\n    modu (int): The modulus (often the group order `r`).\n    input_val (int): The input value (often the eigenvalue `lambda`).\n\nReturns:\n    Tuple[int, int]: The components (v11, |v12|) of the first basis vector V1.\n*/\npub fn half_gcd(modu: &BigInt, input_val: &BigInt) -> Result<[BigInt; 2], String> {\n    let lattice = precompute_lattice(modu, input_val)?;\n    let output0 = lattice.v1[0].clone();\n    let output1 = lattice.v1[1].clone();\n\n    // The GLV decomposition often requires the absolute value of the second component.\n    Ok([output0, output1.abs()])\n}\n\n/*\nComputes a short 2D lattice basis related to parameters (r, lambda).\n\nUses a variant of the Extended Euclidean Algorithm to find short vectors\n(v1, v2) such that v1 = [a, b] and v2 = [c, d] satisfy\na + b*lambda = 0 (mod r) and c + d*lambda = 0 (mod r).\nSee https://www.iacr.org/archive/crypto2001/21390189.pdf (Algorithm 3.7)\n\nArgs:\n    r (int): The modulus.\n    lam (int): The lambda value (e.g., eigenvalue in GLV).\n\nReturns:\n    Lattice: An object containing the lattice basis vectors (V1, V2),\n             determinant (Det), and rounding coefficients (b1, b2).\n\nRaises:\n    ValueError: If intermediate steps lead to division by zero (e.g., lam=0 mod r)\n                or if the final determinant is zero.\n*/\nfn precompute_lattice(r: &BigInt, lam: &BigInt) -> Result<Lattice, String> {\n    // Extended Euclidean Algorithm State: [[value, s_coeff, t_coeff], ...]\n    // We maintain two states [ri, si, ti] such that ri = si*r + ti*lambda\n    let mut euclidean_state = [\n        [r.clone(), 1.into(), 0.into()], // Corresponds to r = 1*r + 0*lambda\n        [lam.clone(), 0.into(), 1.into()], // Corresponds to lam = 0*r + 1*lambda\n    ];\n\n    // Compute the integer square root of r as the termination threshold\n    let sqrt_r = r.sqrt();\n\n    // Run Euclidean algorithm until the remainder (state[1][0]) is smaller than sqrt(r)\n    while euclidean_state[1][0].abs() >= sqrt_r {\n        let [current_rem, s_curr, t_curr] = euclidean_state[1].clone();\n        let [prev_rem, s_prev, t_prev] = euclidean_state[0].clone();\n\n        if current_rem == 0.into() {\n            // This occurs if lambda is a multiple of r or lambda is 0.\n            return Err(\"Division by zero in Euclidean algorithm. Check inputs r and lam.\".into());\n        }\n\n        let quotient = prev_rem.div_floor(&current_rem);\n        let next_rem = prev_rem.mod_floor(&current_rem);\n\n        // Update coefficients using the identity: R_next = R_prev - q * R_curr\n        // where R represents [rem, s, t]\n        let s_next = &s_prev - &s_curr * &quotient;\n        let t_next = &t_prev - &t_curr * &quotient;\n\n        // Shift states: current becomes previous, new becomes current\n        euclidean_state[0] = [current_rem, s_curr, t_curr];\n        euclidean_state[1] = [next_rem, s_next, t_next];\n    }\n\n    // One final step to potentially find a shorter vector combination\n    let [current_rem, _s_curr, t_curr] = euclidean_state[1].clone();\n    let [prev_rem, _s_prev, t_prev] = euclidean_state[0].clone();\n\n    if current_rem == 0.into() {\n        return Err(\n            \"Division by zero in Euclidean algorithm final step. Check inputs r and lam.\".into(),\n        );\n    }\n\n    let quotient = prev_rem.div_floor(&current_rem);\n    // Calculate the next potential remainder and t-coefficient\n    let final_rem = prev_rem.mod_floor(&current_rem);\n    let final_t = &t_prev - &t_curr * &quotient;\n\n    // First basis vector: V1 = [current_rem, -t_curr]\n    // Satisfies current_rem + (-t_curr)*lambda = 0 mod r (since current_rem = s_curr*r + t_curr*lambda)\n    let v1_list = [current_rem.clone(), -t_curr];\n\n    // Candidate vectors for the second basis vector V2\n    // Candidate 1: [prev_rem, -t_prev]\n    let cand1 = [prev_rem.clone(), -t_prev];\n    // Candidate 2: [final_rem, -final_t]\n    let cand2 = [final_rem.clone(), -final_t];\n\n    // Choose the shorter candidate vector based on squared Euclidean norm (||v||^2 = x^2 + y^2)\n    let norm1_sq = cand1[0].pow(2) + cand1[1].pow(2);\n    let norm2_sq = cand2[0].pow(2) + cand2[1].pow(2);\n\n    let v2_list = if norm1_sq > norm2_sq { cand2 } else { cand1 };\n\n    // Calculate the determinant of the chosen basis {V1, V2}\n    let det = &v1_list[0] * &v2_list[1] - &v1_list[1] * &v2_list[0];\n\n    if det == 0.into() {\n        // Basis vectors are linearly dependent, which shouldn't happen for typical inputs.\n        return Err(\"Lattice determinant is zero. Input parameters might be unsuitable.\".into());\n    }\n\n    /*\n    Computes round(a / b), rounding ties away from zero.\n\n    Equivalent to standard mathematical rounding, differs from Python's\n    default round() which rounds ties to the nearest even number.\n    Needed to potentially match specific Go implementation behavior.\n    */\n    fn round_half_away_from_zero(a: &BigInt, b: &BigInt) -> Result<BigInt, String> {\n        if *b == 0.into() {\n            return Err(\"Division by zero in rounding.\".into());\n        }\n        // Perform division using absolute values\n        let (mut quotient, remainder) = a.abs().div_rem(&b.abs());\n        // Check if the remainder is large enough to round up (away from zero)\n        if remainder * 2 >= b.abs() {\n            quotient += 1;\n        }\n        // Restore the sign based on the original signs of a and b\n        if (*a < 0.into()) != (*b < 0.into()) {\n            Ok(-quotient) // Result is negative\n        } else {\n            Ok(quotient) // Result is positive\n        }\n    }\n\n    // Compute rounding coefficients b1, b2 used in scalar decomposition\n    // n is calculated to ensure 2^n is sufficiently larger than |det|,\n    // potentially matching Go's fixed-size integer/word alignment logic.\n    // The `+ 32 >> 6 << 6` part aligns the bit length to a multiple of 64.\n    let n_bit_length = std::cmp::max(&1.into(), &det).bits(); // Use max(1,...) for robustness if det=0 (though checked above)\n    let n = 2 * (((n_bit_length + 32) >> 6) << 6);\n\n    // Calculate b1 = round(2^n * V2[1] / det)\n    let b1 = round_half_away_from_zero(&(&v2_list[1] << n), &det)?;\n    // Calculate b2 = round(2^n * V1[1] / det)\n    let b2 = round_half_away_from_zero(&(&v1_list[1] << n), &det)?;\n\n    // Return the results structured in the Lattice dataclass\n    Ok(Lattice {\n        v1: v1_list,\n        v2: v2_list,\n        det,\n        b1,\n        b2,\n    })\n}\n\n/*\nSplits a scalar s into components (u, v) using a precomputed GLV lattice.\n\nBased on the approach described in https://www.iacr.org/archive/crypto2001/21390189.pdf,\nthis function finds a vector (u, v) such that s = u + v*lambda (mod r),\nwhere lambda and r are the parameters used to generate the lattice l.\nThe vector (u, v) is typically chosen such that u and v have smaller magnitudes than s.\n\nArgs:\n    s: The scalar to split.\n    l: The precomputed Lattice object containing basis V1, V2, determinant Det,\n       and rounding coefficients b1, b2.\n\nReturns:\n    A tuple (u, v) representing the scalar decomposition.\n*/\nfn split_scalar(s: &BigInt, l: &Lattice) -> [BigInt; 2] {\n    // Calculate intermediate values k1, k2 using the scalar and rounding coefficients\n    let mut k1 = s * &l.b1;\n    let mut k2 = -(s * &l.b2);\n\n    // Determine the shift amount 'n' used during lattice precomputation\n    // This should match the logic in precompute_lattice\n    let n_bit_length = std::cmp::max(1.into(), l.det.clone()).bits();\n    let n = 2 * (((n_bit_length + 32) >> 6) << 6);\n\n    // Right-shift k1 and k2 to effectively divide by 2^n,\n    // approximating division by the determinant Det.\n    // This gives the integer coefficients for the closest lattice vector approximation.\n    k1 >>= n;\n    k2 >>= n;\n\n    // Calculate the lattice vector w = k1*V1 + k2*V2\n    let w_vec0 = &k1 * &l.v1[0] + &k2 * &l.v2[0];\n    let w_vec1 = &k1 * &l.v1[1] + &k2 * &l.v2[1];\n\n    // Calculate the final decomposition (u, v)\n    // u = s - w[0]\n    // v = -w[1]\n    let u = s - &w_vec0;\n    let v = -w_vec1;\n\n    [u, v]\n}\n\npub fn half_gcd_eisenstein_hint(\n    modulus: &BigInt,\n    scalar: &BigInt,\n    eigen_value: &BigInt,\n) -> Result<[BigInt; 4], String> {\n    let glv_basis = precompute_lattice(modulus, eigen_value)?;\n    let r = eisenstein::EisensteinInteger::new(glv_basis.v1[0].clone(), glv_basis.v1[1].clone());\n    let scalar = if scalar % modulus == modulus - 1 {\n        BigInt::from(1)\n    } else {\n        scalar.clone()\n    };\n\n    let sp = split_scalar(&scalar, &glv_basis);\n    let s = eisenstein::EisensteinInteger::new(sp[0].clone(), sp[1].clone());\n    // in-circuit we check that Q - [s]P = 0 or equivalently Q + [-s]P = 0\n    // so here we return -s instead of s.\n    let s = -s;\n    // println!(\"r: {}, \\ns: {}\", r, s);\n    let [w, v_res, _] = eisenstein::half_gcd(&r, &s)?;\n\n    // Note : outputs can be negative.\n    Ok([\n        w.a0.clone(),\n        w.a1.clone(),\n        v_res.a0.clone(),\n        v_res.a1.clone(),\n    ])\n}\n\nfn encode_value(value: &BigInt) -> BigUint {\n    // Corresponds to Python: abs(value) + 2**128 if value < 0 else value\n    let power_128_bigint: BigInt = BigInt::from(1) << 128;\n    let power_128_biguint = power_128_bigint.to_biguint().unwrap(); // Safe because 2^128 > 0\n\n    if value.sign() == Sign::Minus {\n        // Convert `value.abs()` (BigInt) to BigUint before adding power_128 (BigUint)\n        value.abs().to_biguint().unwrap() + power_128_biguint\n    } else {\n        // value is non-negative, safe to convert to BigUint\n        value.to_biguint().unwrap()\n    }\n}\n\nfn encode_glv_fake_glv_hint(u1: &BigInt, u2: &BigInt, v1: &BigInt, v2: &BigInt) -> [BigUint; 4] {\n    // Re-use the standalone encode_value function\n    [\n        encode_value(u1),\n        encode_value(u2),\n        encode_value(v1),\n        encode_value(v2),\n    ]\n}\n\n/// Corresponds to Python `get_glv_fake_glv_hint`.\n/// Computes the GLV hint components (u1, u2, v1, v2) encoded for Cairo, and the scalar multiplication result Q.\npub fn get_glv_fake_glv_hint<F>(\n    point: &G1Point<F>,\n    scalar: &BigUint,\n) -> Result<(G1Point<F>, BigUint, BigUint, BigUint, BigUint), String>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n{\n    let curve_params = F::get_curve_params();\n    let curve_n_bigint = curve_params.n.to_bigint().unwrap();\n    let scalar_bigint = scalar.to_bigint().unwrap();\n\n    // Get eigen_value from curve_params\n    let eigen_value = match &curve_params.eigen_value {\n        Some(ev) => ev,\n        None => {\n            return Err(format!(\n                \"Curve {:?} does not have a known endomorphism eigenvalue or is not supported here.\",\n                curve_params.curve_id\n            ));\n        }\n    };\n\n    // Call half_gcd_eisenstein_hint to get raw u1, u2, v1, v2\n    let hint_result = half_gcd_eisenstein_hint(&curve_n_bigint, &scalar_bigint, eigen_value)?;\n    let [u1_raw, u2_raw, v1_raw, v2_raw] = hint_result;\n\n    // Encode the results for Cairo compatibility\n    let encoded_hints = encode_glv_fake_glv_hint(&u1_raw, &u2_raw, &v1_raw, &v2_raw);\n    let [u1_encoded, u2_encoded, v1_encoded, v2_encoded] = encoded_hints;\n\n    // Compute Q = [scalar]P\n    let q = point.scalar_mul(scalar_bigint.clone()); // Assumes G1Point::scalar_mul takes BigInt\n\n    Ok((q, u1_encoded, u2_encoded, v1_encoded, v2_encoded))\n}\n\npub fn get_fake_glv_hint<F>(\n    point: &G1Point<F>,\n    scalar: &BigUint,\n) -> Result<(G1Point<F>, BigUint, BigUint), String>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n{\n    let curve_params = F::get_curve_params();\n    let curve_n_bigint = curve_params.n.to_bigint().unwrap();\n    let scalar_bigint = scalar.to_bigint().unwrap();\n\n    // Check if the curve has an endomorphism; if so, this hint shouldn't be used.\n    if curve_params.eigen_value.is_some() {\n        return Err(format!(\n            \"Curve {:?} has an endomorphism, use get_glv_fake_glv_hint instead\",\n            curve_params.curve_id\n        ));\n    }\n\n    // Call precompute_lattice using the scalar as the 'lambda' parameter,\n    // mimicking the Python implementation.\n    let glv_basis = precompute_lattice(&curve_n_bigint, &scalar_bigint)?;\n    let s1 = &glv_basis.v1[0];\n    let s2 = &glv_basis.v1[1];\n\n    // Assertions from Python code converted to Rust checks\n    if (s1 + &scalar_bigint * s2).mod_floor(&curve_n_bigint) != BigInt::from(0) {\n        return Err(\"Assertion failed: (s1 + scalar * s2) % curve.n != 0\".to_string());\n    }\n    // Check s1 > 0 and s2 != 0\n    if !(s1.sign() == Sign::Plus && s2.sign() != Sign::NoSign) {\n        return Err(\"Assertion failed: !(s1 > 0 and s2 != 0)\".to_string());\n    }\n\n    // Compute Q = [scalar]P\n    let q = point.scalar_mul(scalar_bigint.clone());\n\n    // Convert s1 (known positive) to BigUint\n    let s1_biguint = s1.to_biguint().unwrap();\n    // Encode s2\n    let s2_encoded = encode_value(s2);\n\n    Ok((q, s1_biguint, s2_encoded))\n}\n\n#[allow(unused_imports)]\nmod tests {\n    use super::*;\n    use num_traits::Num;\n    use rand::Rng;\n    use std::str::FromStr;\n\n    #[test]\n    fn test_bn254() -> Result<(), String> {\n        let mut rng = rand::rng();\n        for _ in 0..100 {\n            let scalar = rng.random::<u128>().into();\n            let curve_n = BigInt::from_str_radix(\n                \"30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000001\",\n                16,\n            )\n            .unwrap();\n            let eigen_value =\n                BigInt::from_str_radix(\"B3C4D79D41A917585BFC41088D8DAAA78B17EA66B99C90DD\", 16)\n                    .unwrap();\n            let [u1, u2, v1, v2] = half_gcd_eisenstein_hint(&curve_n, &scalar, &eigen_value)?;\n            assert!(\n                (&scalar * (&v1 + &eigen_value * &v2) + &u1 + &eigen_value * &u2)\n                    .mod_floor(&curve_n)\n                    == 0.into()\n            );\n        }\n        Ok(())\n    }\n\n    #[test]\n    fn test_bls12_381() -> Result<(), String> {\n        use rand::Rng;\n        let mut rng = rand::rng();\n        for _ in 0..100 {\n            let scalar = rng.random::<u128>().into();\n            let curve_n = BigInt::from_str_radix(\n                \"73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001\",\n                16,\n            )\n            .unwrap();\n            let eigen_value =\n                BigInt::from_str_radix(\"AC45A4010001A40200000000FFFFFFFF\", 16).unwrap();\n            let [u1, u2, v1, v2] = half_gcd_eisenstein_hint(&curve_n, &scalar, &eigen_value)?;\n            assert!(\n                (&scalar * (&v1 + &eigen_value * &v2) + &u1 + &eigen_value * &u2)\n                    .mod_floor(&curve_n)\n                    == 0.into()\n            );\n        }\n        Ok(())\n    }\n\n    #[test]\n    fn test_secp256k1() -> Result<(), String> {\n        use rand::Rng;\n        let mut rng = rand::rng();\n        for _ in 0..100 {\n            let scalar = rng.random::<u128>().into();\n            let curve_n = BigInt::from_str_radix(\n                \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\",\n                16,\n            )\n            .unwrap();\n            let eigen_value = BigInt::from_str_radix(\n                \"5363AD4CC05C30E0A5261C028812645A122E22EA20816678DF02967C1B23BD72\",\n                16,\n            )\n            .unwrap();\n            let [u1, u2, v1, v2] = half_gcd_eisenstein_hint(&curve_n, &scalar, &eigen_value)?;\n            assert!(\n                (&scalar * (&v1 + &eigen_value * &v2) + &u1 + &eigen_value * &u2)\n                    .mod_floor(&curve_n)\n                    == 0.into()\n            );\n        }\n        Ok(())\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/io.rs",
    "content": "use crate::algebra::{\n    g1g2pair::G1G2Pair, g1point::G1Point, g2point::G2Point, rational_function::FunctionFelt,\n};\nuse crate::definitions::{CurveParamsProvider, FieldElement, Stark252PrimeField};\nuse lambdaworks_math::{\n    field::traits::{IsField, IsPrimeField, IsSubFieldOf},\n    traits::ByteConversion,\n};\nuse num_bigint::BigUint;\n\nuse lambdaworks_math::unsigned_integer::element::U256;\n\npub fn biguint_to_u256(x: &BigUint) -> U256 {\n    U256::from_hex_unchecked(&x.to_str_radix(16))\n}\n\npub fn parse_g1_points_from_flattened_field_elements_list<F>(\n    values: &[FieldElement<F>],\n) -> Result<Vec<G1Point<F>>, String>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n{\n    values\n        .chunks(2)\n        .map(|chunk| G1Point::new(chunk[0].clone(), chunk[1].clone(), false))\n        .collect::<Result<Vec<_>, _>>()\n}\n\npub fn parse_g1_g2_pairs_from_flattened_field_elements_list<F, E2>(\n    values: &[FieldElement<F>],\n) -> Result<Vec<G1G2Pair<F, E2>>, String>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    values\n        .chunks(6)\n        .map(|chunk| {\n            let g1 = G1Point::new(chunk[0].clone(), chunk[1].clone(), false)?;\n            let g2 = G2Point::new(\n                [chunk[2].clone(), chunk[3].clone()],\n                [chunk[4].clone(), chunk[5].clone()],\n            )?;\n            Ok(G1G2Pair::new(g1, g2))\n        })\n        .collect::<Result<Vec<_>, _>>()\n}\n\npub fn field_elements_from_big_uints<F>(values: &[BigUint]) -> Vec<FieldElement<F>>\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    values.iter().map(element_from_biguint).collect()\n}\n\npub fn element_from_biguint<F>(value: &BigUint) -> FieldElement<F>\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    element_from_bytes_be(&value.to_bytes_be())\n}\n\npub fn element_from_bytes_be<F>(bytes: &[u8]) -> FieldElement<F>\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    let length = F::field_bit_size().div_ceil(8);\n    if bytes.len() > length {\n        let x = BigUint::from_bytes_be(bytes);\n        let p = biguint_from_hex(&F::modulus_minus_one().to_string()) + 1usize;\n        return element_from_bytes_be(&(x % p).to_bytes_be());\n    }\n    let pad_length = length - bytes.len();\n    let mut padded_bytes = vec![0u8; pad_length];\n    padded_bytes.extend(bytes);\n    FieldElement::from_bytes_be(&padded_bytes).unwrap() // must never fail\n}\n\npub fn field_elements_to_big_uints<F>(values: &[FieldElement<F>]) -> Vec<BigUint>\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    values.iter().map(element_to_biguint).collect()\n}\n\npub fn element_to_biguint<F>(x: &FieldElement<F>) -> BigUint\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    BigUint::from_bytes_be(&x.to_bytes_be())\n}\n\npub fn felt252_to_element<F>(x: &FieldElement<Stark252PrimeField>) -> FieldElement<F>\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    element_from_bytes_be(&x.to_bytes_be())\n}\n\npub fn padd_function_felt<F: IsPrimeField>(\n    f: &FunctionFelt<F>,\n    n: usize,\n    batched: bool,\n) -> [Vec<FieldElement<F>>; 4] {\n    fn pad_vec<F: IsPrimeField>(v: &mut Vec<FieldElement<F>>, n: usize) {\n        assert!(v.len() <= n);\n        while v.len() < n {\n            v.push((0u64).into());\n        }\n    }\n\n    let mut a_num = f.a.numerator.coefficients.clone();\n    let mut a_den = f.a.denominator.coefficients.clone();\n    let mut b_num = f.b.numerator.coefficients.clone();\n    let mut b_den = f.b.denominator.coefficients.clone();\n\n    let extra_padding = if batched { 2 } else { 0 };\n    pad_vec(&mut a_num, n + 1 + extra_padding);\n    pad_vec(&mut a_den, n + 2 + extra_padding);\n    pad_vec(&mut b_num, n + 2 + extra_padding);\n    pad_vec(&mut b_den, n + 5 + extra_padding);\n    [a_num, a_den, b_num, b_den]\n}\n\npub fn u128_from_bytes_be(bytes: &[u8]) -> u128 {\n    assert!(bytes.len() <= 16);\n    let mut v = 0;\n    for byte in bytes {\n        v = (v << 8) | (*byte as u128);\n    }\n    v\n}\n\npub fn u128_to_bytes_be(v: u128) -> Vec<u8> {\n    let mut bytes = vec![];\n    let mut v = v;\n    while v > 0 {\n        bytes.push(v as u8);\n        v >>= 8;\n    }\n    bytes.reverse();\n    bytes\n}\n\npub fn element_from_u128<F>(value: u128) -> FieldElement<F>\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    element_from_bytes_be(&u128_to_bytes_be(value))\n}\n\npub fn field_element_to_u256_limbs<F>(x: &FieldElement<F>) -> [u128; 2]\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    byte_slice_split::<2, 128>(&x.to_bytes_be())\n}\n\npub fn field_element_to_u288_limbs<F>(x: &FieldElement<F>) -> [u128; 3]\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    byte_slice_split::<3, 96>(&x.to_bytes_be())\n}\n\npub fn field_element_to_u384_limbs<F>(x: &FieldElement<F>) -> [u128; 4]\nwhere\n    F: IsPrimeField,\n    FieldElement<F>: ByteConversion,\n{\n    byte_slice_split::<4, 96>(&x.to_bytes_be())\n}\n\npub fn scalar_to_limbs(x: &BigUint) -> [u128; 2] {\n    byte_slice_split::<2, 128>(&x.to_bytes_be())\n}\n\npub fn biguint_split<const N: usize, const SIZE: usize>(x: &BigUint) -> [u128; N] {\n    byte_slice_split::<N, SIZE>(&x.to_bytes_be())\n}\n\npub fn byte_slice_split<const N: usize, const SIZE: usize>(bytes: &[u8]) -> [u128; N] {\n    assert!(SIZE <= 128 && SIZE.is_multiple_of(8));\n    assert!(bytes.len() <= N * SIZE / 8);\n    let mut bytes = bytes;\n    let mut limbs = [0u128; N];\n    for limb in limbs.iter_mut().take(N) {\n        let index = bytes.len().saturating_sub(SIZE / 8);\n        let slice = &bytes[index..];\n        *limb = u128_from_bytes_be(slice);\n        bytes = &bytes[..index];\n    }\n    limbs\n}\n\npub fn biguint_from_hex(hex: &str) -> BigUint {\n    let mut s = hex;\n    if let Some(stripped) = s.strip_prefix(\"0x\") {\n        s = stripped;\n    }\n    BigUint::parse_bytes(s.as_bytes(), 16).unwrap_or_else(|| panic!(\"invalid hex string: {}\", hex))\n}\n\n#[cfg(test)]\nmod tests {\n    use super::{biguint_from_hex, element_from_biguint, FieldElement};\n    use crate::definitions::{\n        BLS12381PrimeField, BN254PrimeField, SECP256K1PrimeField, SECP256R1PrimeField,\n        Stark252PrimeField, X25519PrimeField,\n    };\n\n    #[test]\n    fn test_element_from_hex() {\n        let s = \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\";\n        let x = biguint_from_hex(s);\n\n        {\n            let s = \"6D89F71CAB8351F47AB1EFF0A417FF6B5E71911D44501FBF32CFC5B538AFA88\";\n            let one = element_from_biguint::<BN254PrimeField>(&x);\n            assert_eq!(one, FieldElement::from_hex(s).unwrap());\n        }\n        {\n            let s = \"2CB5D3A884E56C4FAB7CD07EE4E16BC15EFEBB5D396D7CF82383087033108464532383FA8EAFF4E967D3988A62B6C9C\";\n            let one = element_from_biguint::<BLS12381PrimeField>(&x);\n            assert_eq!(one, FieldElement::from_hex(s).unwrap());\n        }\n        {\n            let s = \"1000007A2000E90A0\";\n            let one = element_from_biguint::<SECP256K1PrimeField>(&x);\n            assert_eq!(one, FieldElement::from_hex(s).unwrap());\n        }\n        {\n            let s = \"4FFFFFFFDFFFFFFFFFFFFFFFEFFFFFFFBFFFFFFFF0000000000000002\";\n            let one = element_from_biguint::<SECP256R1PrimeField>(&x);\n            assert_eq!(one, FieldElement::from_hex(s).unwrap());\n        }\n        {\n            let s = \"5A3\";\n            let one = element_from_biguint::<X25519PrimeField>(&x);\n            assert_eq!(one, FieldElement::from_hex(s).unwrap());\n        }\n        {\n            let s = \"7FFD4AB5E008810FFFFFFFFFF6F800000000001330FFFFFFFFFFD737E000400\";\n            let one = element_from_biguint::<Stark252PrimeField>(&x);\n            assert_eq!(one, FieldElement::from_hex(s).unwrap());\n        }\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/lib.rs",
    "content": "pub mod algebra {\n    pub mod extf_mul;\n    pub mod g1g2pair;\n    pub mod g1point;\n    pub mod g2point;\n    pub mod polynomial;\n    pub mod rational_function;\n}\npub mod calldata;\npub mod constants;\n\npub mod crypto {\n    pub mod mmr {\n        pub mod mmr_accumulator;\n        pub mod mmr_membership_proof;\n        pub mod mmr_successor_proof;\n        pub mod mmr_trait;\n        pub mod shared_advanced;\n        pub mod shared_basic;\n        pub const TOO_MANY_LEAFS_ERR: &str =\n            \"internal error: Merkle Mountain Ranges should have at most 2^63 leafs\";\n    }\n    pub mod digest;\n    pub mod merkle_tree;\n    #[allow(dead_code)]\n    pub mod poseidon_bn254;\n}\npub mod definitions;\npub mod ecip {\n    pub mod core;\n    pub mod ff;\n}\npub mod frobenius;\npub mod io;\n\npub mod pairing {\n    pub mod final_exp_witness;\n    pub mod multi_miller_loop;\n    pub mod multi_pairing_check;\n}\n\npub mod poseidon_transcript;\n\npub mod hints {\n    pub mod eisenstein;\n    pub mod fake_glv;\n}\n\n// automatically excludes python bindings on wasm32-unknown-unknown (pyo3 not supported)\n#[cfg(all(feature = \"python\", not(target_arch = \"wasm32\")))]\npub mod python_bindings;\n\n// only include wasm bindings when both wasm feature is enabled AND on wasm32 target\n#[cfg(all(feature = \"wasm\", target_arch = \"wasm32\"))]\npub mod wasm_bindings;\n"
  },
  {
    "path": "tools/garaga_rs/src/pairing/final_exp_witness/addchain_pow_generated.rs",
    "content": "// AUTO-GENERATED: DO NOT EDIT BY HAND.\n// Generated by tools/addchain/gen_rust_addchain.py from:\n//   - tools/addchain/bn254_exp.acc\n//   - tools/addchain/bn254_exp0.acc\n//   - tools/addchain/bn254_r_m_d_inv.acc\n//   - tools/addchain/bls12_381_h3_s.acc\n//   - tools/addchain/bls12_381_e.acc\n\nuse lambdaworks_math::field::element::FieldElement;\nuse lambdaworks_math::field::traits::IsField;\n\nfn square_n<F: IsField>(x: &FieldElement<F>, n: usize) -> FieldElement<F> {\n    let mut t = x.clone();\n    for _ in 0..n {\n        t = t.square();\n    }\n    t\n}\n\npub mod bn254 {\n    use super::square_n;\n    use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree12ExtensionField;\n    use lambdaworks_math::field::element::FieldElement;\n\n    /// Generated from tools/addchain/bn254_exp.acc\n    pub fn pow_exp(\n        base: &FieldElement<Degree12ExtensionField>,\n    ) -> FieldElement<Degree12ExtensionField> {\n        let base = base.clone();\n        let _10 = {\n            let t0 = square_n(&base, 1);\n            t0\n        };\n        let _11 = {\n            let t0 = &base * &_10;\n            t0\n        };\n        let _101 = {\n            let t0 = &_10 * &_11;\n            t0\n        };\n        let _111 = {\n            let t0 = &_10 * &_101;\n            t0\n        };\n        let _1001 = {\n            let t0 = &_10 * &_111;\n            t0\n        };\n        let _1011 = {\n            let t0 = &_10 * &_1001;\n            t0\n        };\n        let _1101 = {\n            let t0 = &_10 * &_1011;\n            t0\n        };\n        let _1111 = {\n            let t0 = &_10 * &_1101;\n            t0\n        };\n        let _10001 = {\n            let t0 = &_10 * &_1111;\n            t0\n        };\n        let _10011 = {\n            let t0 = &_10 * &_10001;\n            t0\n        };\n        let _10101 = {\n            let t0 = &_10 * &_10011;\n            t0\n        };\n        let _10111 = {\n            let t0 = &_10 * &_10101;\n            t0\n        };\n        let _11001 = {\n            let t0 = &_10 * &_10111;\n            t0\n        };\n        let _11011 = {\n            let t0 = &_10 * &_11001;\n            t0\n        };\n        let _11101 = {\n            let t0 = &_10 * &_11011;\n            t0\n        };\n        let _11111 = {\n            let t0 = &_10 * &_11101;\n            t0\n        };\n        let _100001 = {\n            let t0 = &_10 * &_11111;\n            t0\n        };\n        let _100011 = {\n            let t0 = &_10 * &_100001;\n            t0\n        };\n        let _100101 = {\n            let t0 = &_10 * &_100011;\n            t0\n        };\n        let _100111 = {\n            let t0 = &_10 * &_100101;\n            t0\n        };\n        let _101001 = {\n            let t0 = &_10 * &_100111;\n            t0\n        };\n        let _101011 = {\n            let t0 = &_10 * &_101001;\n            t0\n        };\n        let _101101 = {\n            let t0 = &_10 * &_101011;\n            t0\n        };\n        let _101111 = {\n            let t0 = &_10 * &_101101;\n            t0\n        };\n        let _110001 = {\n            let t0 = &_10 * &_101111;\n            t0\n        };\n        let _110011 = {\n            let t0 = &_10 * &_110001;\n            t0\n        };\n        let _110101 = {\n            let t0 = &_10 * &_110011;\n            t0\n        };\n        let _110111 = {\n            let t0 = &_10 * &_110101;\n            t0\n        };\n        let _111001 = {\n            let t0 = &_10 * &_110111;\n            t0\n        };\n        let _111011 = {\n            let t0 = &_10 * &_111001;\n            t0\n        };\n        let _111101 = {\n            let t0 = &_10 * &_111011;\n            t0\n        };\n        let _111111 = {\n            let t0 = &_10 * &_111101;\n            t0\n        };\n        let _1000001 = {\n            let t0 = &_10 * &_111111;\n            t0\n        };\n        let _1000011 = {\n            let t0 = &_10 * &_1000001;\n            t0\n        };\n        let _1000101 = {\n            let t0 = &_10 * &_1000011;\n            t0\n        };\n        let _1000111 = {\n            let t0 = &_10 * &_1000101;\n            t0\n        };\n        let _1001001 = {\n            let t0 = &_10 * &_1000111;\n            t0\n        };\n        let _1001011 = {\n            let t0 = &_10 * &_1001001;\n            t0\n        };\n        let _1001101 = {\n            let t0 = &_10 * &_1001011;\n            t0\n        };\n        let _1001111 = {\n            let t0 = &_10 * &_1001101;\n            t0\n        };\n        let _1010001 = {\n            let t0 = &_10 * &_1001111;\n            t0\n        };\n        let _1010011 = {\n            let t0 = &_10 * &_1010001;\n            t0\n        };\n        let _1010101 = {\n            let t0 = &_10 * &_1010011;\n            t0\n        };\n        let _1010111 = {\n            let t0 = &_10 * &_1010101;\n            t0\n        };\n        let _1011001 = {\n            let t0 = &_10 * &_1010111;\n            t0\n        };\n        let _1011011 = {\n            let t0 = &_10 * &_1011001;\n            t0\n        };\n        let _1011101 = {\n            let t0 = &_10 * &_1011011;\n            t0\n        };\n        let _1011111 = {\n            let t0 = &_10 * &_1011101;\n            t0\n        };\n        let _1100001 = {\n            let t0 = &_10 * &_1011111;\n            t0\n        };\n        let _1100011 = {\n            let t0 = &_10 * &_1100001;\n            t0\n        };\n        let _1100101 = {\n            let t0 = &_10 * &_1100011;\n            t0\n        };\n        let _1100111 = {\n            let t0 = &_10 * &_1100101;\n            t0\n        };\n        let _1101001 = {\n            let t0 = &_10 * &_1100111;\n            t0\n        };\n        let _1101011 = {\n            let t0 = &_10 * &_1101001;\n            t0\n        };\n        let _1101101 = {\n            let t0 = &_10 * &_1101011;\n            t0\n        };\n        let _1101111 = {\n            let t0 = &_10 * &_1101101;\n            t0\n        };\n        let _1110001 = {\n            let t0 = &_10 * &_1101111;\n            t0\n        };\n        let _1110011 = {\n            let t0 = &_10 * &_1110001;\n            t0\n        };\n        let _1110101 = {\n            let t0 = &_10 * &_1110011;\n            t0\n        };\n        let _1110111 = {\n            let t0 = &_10 * &_1110101;\n            t0\n        };\n        let _1111001 = {\n            let t0 = &_10 * &_1110111;\n            t0\n        };\n        let _1111011 = {\n            let t0 = &_10 * &_1111001;\n            t0\n        };\n        let _1111101 = {\n            let t0 = &_10 * &_1111011;\n            t0\n        };\n        let _1111111 = {\n            let t0 = &_10 * &_1111101;\n            t0\n        };\n        let _11111110 = {\n            let t0 = square_n(&_1111111, 1);\n            t0\n        };\n        let _11111111 = {\n            let t0 = &base * &_11111110;\n            t0\n        };\n        let i81 = {\n            let t0 = &_1111101 * &_11111111;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_10111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_100001;\n            t4\n        };\n        let i105 = {\n            let t0 = square_n(&i81, 7);\n            let t1 = &t0 * &_111001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1001011;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i125 = {\n            let t0 = &_100111 * &i105;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1001001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i150 = {\n            let t0 = square_n(&i125, 8);\n            let t1 = &t0 * &_1110101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1001111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i168 = {\n            let t0 = &_1001011 * &i150;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_101001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1011001;\n            t4\n        };\n        let i192 = {\n            let t0 = square_n(&i168, 6);\n            let t1 = &t0 * &_11001;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &base;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i209 = {\n            let t0 = &_110111 * &i192;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_10011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10101;\n            t4\n        };\n        let i236 = {\n            let t0 = square_n(&i209, 9);\n            let t1 = &t0 * &_1110001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1011111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i256 = {\n            let t0 = &_1101 * &i236;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_110101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1000101;\n            t4\n        };\n        let i281 = {\n            let t0 = square_n(&i256, 6);\n            let t1 = &t0 * &_101101;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_110001;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i307 = {\n            let t0 = &_11111 * &i281;\n            let t1 = square_n(&t0, 17);\n            let t2 = &t1 * &_1010111;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_110011;\n            t4\n        };\n        let i337 = {\n            let t0 = square_n(&i307, 6);\n            let t1 = &t0 * &_11011;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_11111111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i356 = {\n            let t0 = &_10101 * &i337;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1110011;\n            t4\n        };\n        let i384 = {\n            let t0 = square_n(&i356, 10);\n            let t1 = &t0 * &_1000101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_100001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i399 = {\n            let t0 = &_1100111 * &i384;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_101011;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_10011;\n            t4\n        };\n        let i427 = {\n            let t0 = square_n(&i399, 8);\n            let t1 = &t0 * &_111011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_11111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i437 = {\n            let t0 = &_11111111 * &i427;\n            let t1 = square_n(&t0, 1);\n            let t2 = &t1 * &base;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_111;\n            t4\n        };\n        let i466 = {\n            let t0 = square_n(&i437, 11);\n            let t1 = &t0 * &_1001011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_110001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i484 = {\n            let t0 = &_1100111 * &i466;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1001101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1100111;\n            t4\n        };\n        let i510 = {\n            let t0 = square_n(&i484, 6);\n            let t1 = &t0 * &_11011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_110111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i527 = {\n            let t0 = &_1111011 * &i510;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_1101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1101111;\n            t4\n        };\n        let i557 = {\n            let t0 = square_n(&i527, 5);\n            let t1 = &t0 * &_11011;\n            let t2 = square_n(&t1, 13);\n            let t3 = &t2 * &_101111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i577 = {\n            let t0 = &_1110011 * &i557;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1000011;\n            t4\n        };\n        let i598 = {\n            let t0 = square_n(&i577, 7);\n            let t1 = &t0 * &_1010101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_11111;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i613 = {\n            let t0 = &_1001 * &i598;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_100101;\n            let t3 = square_n(&t2, 2);\n            let t4 = &t3 * &base;\n            t4\n        };\n        let i644 = {\n            let t0 = square_n(&i613, 9);\n            let t1 = &t0 * &_11111111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1110111;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i661 = {\n            let t0 = &_1100011 * &i644;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_110011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1110011;\n            t4\n        };\n        let i684 = {\n            let t0 = square_n(&i661, 7);\n            let t1 = &t0 * &_1000101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1110001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i700 = {\n            let t0 = &_1001111 * &i684;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 4);\n            let t4 = &t3 * &_11;\n            t4\n        };\n        let i727 = {\n            let t0 = square_n(&i700, 12);\n            let t1 = &t0 * &_1001101;\n            let t2 = square_n(&t1, 3);\n            let t3 = &t2 * &_101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i746 = {\n            let t0 = &_1101 * &i727;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1001011;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_110001;\n            t4\n        };\n        let i772 = {\n            let t0 = square_n(&i746, 8);\n            let t1 = &t0 * &_110111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i790 = {\n            let t0 = &_1001011 * &i772;\n            let t1 = square_n(&t0, 1);\n            let t2 = &t1 * &base;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_1101011;\n            t4\n        };\n        let i815 = {\n            let t0 = square_n(&i790, 8);\n            let t1 = &t0 * &_1000111;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i834 = {\n            let t0 = &_1000101 * &i815;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_11101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_100111;\n            t4\n        };\n        let i856 = {\n            let t0 = square_n(&i834, 5);\n            let t1 = &t0 * &_1101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_100011;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i876 = {\n            let t0 = &_1011 * &i856;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_110111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1010011;\n            t4\n        };\n        let i900 = {\n            let t0 = square_n(&i876, 7);\n            let t1 = &t0 * &_1000001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_110101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i925 = {\n            let t0 = &_1101101 * &i900;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1111101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1010101;\n            t4\n        };\n        let i953 = {\n            let t0 = square_n(&i925, 7);\n            let t1 = &t0 * &_1001111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1000111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i971 = {\n            let t0 = &_1111011 * &i953;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1100111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1011011;\n            t4\n        };\n        let i996 = {\n            let t0 = square_n(&i971, 8);\n            let t1 = &t0 * &_1011111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_101001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1012 = {\n            let t0 = &_110001 * &i996;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_1101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10011;\n            t4\n        };\n        let i1037 = {\n            let t0 = square_n(&i1012, 9);\n            let t1 = &t0 * &_1001101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_110101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1055 = {\n            let t0 = &_1101111 * &i1037;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1110101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i1081 = {\n            let t0 = square_n(&i1055, 10);\n            let t1 = &t0 * &_1001101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1010001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1098 = {\n            let t0 = &_1111101 * &i1081;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_100111;\n            t4\n        };\n        let i1125 = {\n            let t0 = square_n(&i1098, 7);\n            let t1 = &t0 * &_11111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1144 = {\n            let t0 = &_101111 * &i1125;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1000111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1111101;\n            t4\n        };\n        let i1169 = {\n            let t0 = square_n(&i1144, 5);\n            let t1 = &t0 * &_10001;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_110101;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i1189 = {\n            let t0 = &_11011 * &i1169;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1110101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1010111;\n            t4\n        };\n        let i1217 = {\n            let t0 = square_n(&i1189, 7);\n            let t1 = &t0 * &_111101;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1101011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1236 = {\n            let t0 = &_101111 * &i1217;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1001001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001011;\n            t4\n        };\n        let i1267 = {\n            let t0 = square_n(&i1236, 12);\n            let t1 = &t0 * &_1100001;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_100011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1287 = {\n            let t0 = &_100111 * &i1267;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1011011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1001001;\n            t4\n        };\n        let i1309 = {\n            let t0 = square_n(&i1287, 7);\n            let t1 = &t0 * &_1101111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1101011;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i1329 = {\n            let t0 = &_10001 * &i1309;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_111011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1010001;\n            t4\n        };\n        let i1351 = {\n            let t0 = square_n(&i1329, 7);\n            let t1 = &t0 * &_1100011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1001101;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i1374 = {\n            let t0 = &_10111 * &i1351;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1111001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1011001;\n            t4\n        };\n        let i1398 = {\n            let t0 = square_n(&i1374, 7);\n            let t1 = &t0 * &_1010101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1101001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1417 = {\n            let t0 = &_110011 * &i1398;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_1011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1001011;\n            t4\n        };\n        let i1444 = {\n            let t0 = square_n(&i1417, 8);\n            let t1 = &t0 * &_1111101;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_101;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i1463 = {\n            let t0 = &_1100101 * &i1444;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_100111;\n            t4\n        };\n        let i1491 = {\n            let t0 = square_n(&i1463, 8);\n            let t1 = &t0 * &_1101101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1001011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1509 = {\n            let t0 = &_1000011 * &i1491;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_110101;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_10111;\n            t4\n        };\n        let i1539 = {\n            let t0 = square_n(&i1509, 9);\n            let t1 = &t0 * &_110111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_111101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1558 = {\n            let t0 = &_101011 * &i1539;\n            let t1 = square_n(&t0, 2);\n            let t2 = &t1 * &base;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_1111101;\n            t4\n        };\n        let i1585 = {\n            let t0 = square_n(&i1558, 7);\n            let t1 = &t0 * &_1101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_101111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1610 = {\n            let t0 = &_1110001 * &i1585;\n            let t1 = square_n(&t0, 15);\n            let t2 = &t1 * &_1011101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1101001;\n            t4\n        };\n        let i1637 = {\n            let t0 = square_n(&i1610, 6);\n            let t1 = &t0 * &_11001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_101011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1654 = {\n            let t0 = &_1001111 * &i1637;\n            let t1 = square_n(&t0, 1);\n            let t2 = &t1 * &base;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_1011001;\n            t4\n        };\n        let i1678 = {\n            let t0 = square_n(&i1654, 4);\n            let t1 = &t0 * &_1111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_111011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1695 = {\n            let t0 = &_1011011 * &i1678;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_110011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1101;\n            t4\n        };\n        let i1725 = {\n            let t0 = square_n(&i1695, 10);\n            let t1 = &t0 * &_1101011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1010001;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i1746 = {\n            let t0 = &_1111001 * &i1725;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_100011;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1111111;\n            t4\n        };\n        let i1769 = {\n            let t0 = square_n(&i1746, 8);\n            let t1 = &t0 * &_1000111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1010001;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i1788 = {\n            let t0 = &_110101 * &i1769;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1011001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_110111;\n            t4\n        };\n        let i1812 = {\n            let t0 = square_n(&i1788, 10);\n            let t1 = &t0 * &_1110011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_101011;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i1834 = {\n            let t0 = &_11111 * &i1812;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_101101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1111001;\n            t4\n        };\n        let i1863 = {\n            let t0 = square_n(&i1834, 9);\n            let t1 = &t0 * &_10111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1000111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1880 = {\n            let t0 = &_1011001 * &i1863;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_11011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1000001;\n            t4\n        };\n        let i1907 = {\n            let t0 = square_n(&i1880, 2);\n            let t1 = &t0 * &_11;\n            let t2 = square_n(&t1, 16);\n            let t3 = &t2 * &_1100011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1923 = {\n            let t0 = &_1001001 * &i1907;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1100111;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_110111;\n            t4\n        };\n        let i1950 = {\n            let t0 = square_n(&i1923, 8);\n            let t1 = &t0 * &_1111011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1100111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1971 = {\n            let t0 = &_11011 * &i1950;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_111;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_101101;\n            t4\n        };\n        let i1994 = {\n            let t0 = square_n(&i1971, 8);\n            let t1 = &t0 * &_1001001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1101111;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i2016 = {\n            let t0 = &_110011 * &i1994;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_100101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1101001;\n            t4\n        };\n        let i2041 = {\n            let t0 = square_n(&i2016, 7);\n            let t1 = &t0 * &_1110101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_10101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2060 = {\n            let t0 = &_1100001 * &i2041;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_110101;\n            t4\n        };\n        let i2085 = {\n            let t0 = square_n(&i2060, 5);\n            let t1 = &t0 * &_1101;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1100111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2103 = {\n            let t0 = &_1010011 * &i2085;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_100001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1000111;\n            t4\n        };\n        let i2129 = {\n            let t0 = square_n(&i2103, 5);\n            let t1 = &t0 * &_11011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1100011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2146 = {\n            let t0 = &_1001011 * &i2129;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1110011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_101111;\n            t4\n        };\n        let i2167 = {\n            let t0 = square_n(&i2146, 6);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1010111;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        let i2195 = {\n            let t0 = &base * &i2167;\n            let t1 = square_n(&t0, 16);\n            let t2 = &t1 * &_101111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_100011;\n            t4\n        };\n        let i2220 = {\n            let t0 = square_n(&i2195, 7);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_111111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2238 = {\n            let t0 = &_1011101 * &i2220;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_10001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i2264 = {\n            let t0 = square_n(&i2238, 7);\n            let t1 = &t0 * &_1101111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1001001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2283 = {\n            let t0 = &_10011 * &i2264;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1111011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1110111;\n            t4\n        };\n        let i2308 = {\n            let t0 = square_n(&i2283, 7);\n            let t1 = &t0 * &_1110101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1101111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2327 = {\n            let t0 = &_10001 * &i2308;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_100111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001011;\n            t4\n        };\n        let i2351 = {\n            let t0 = square_n(&i2327, 5);\n            let t1 = &t0 * &_10101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1110101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2371 = {\n            let t0 = &_1010011 * &i2351;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1101111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1010011;\n            t4\n        };\n        let i2402 = {\n            let t0 = square_n(&i2371, 13);\n            let t1 = &t0 * &_1010111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1010001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2420 = {\n            let t0 = &_1111101 * &i2402;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_110001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001001;\n            t4\n        };\n        let i2446 = {\n            let t0 = square_n(&i2420, 7);\n            let t1 = &t0 * &_1001101;\n            let t2 = square_n(&t1, 1);\n            let t3 = &t2 * &base;\n            let t4 = square_n(&t3, 16);\n            t4\n        };\n        let i2465 = {\n            let t0 = &_111011 * &i2446;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1010011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1111011;\n            t4\n        };\n        let i2492 = {\n            let t0 = square_n(&i2465, 8);\n            let t1 = &t0 * &_1011111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_111001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2511 = {\n            let t0 = &_100001 * &i2492;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1100101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1010011;\n            t4\n        };\n        let i2542 = {\n            let t0 = square_n(&i2511, 9);\n            let t1 = &t0 * &_1010111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1001;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i2562 = {\n            let t0 = &_10111 * &i2542;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1111111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1010111;\n            t4\n        };\n        let i2585 = {\n            let t0 = square_n(&i2562, 6);\n            let t1 = &t0 * &_110001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1010001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2607 = {\n            let t0 = &_1100101 * &i2585;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1011001;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1000011;\n            t4\n        };\n        let i2635 = {\n            let t0 = square_n(&i2607, 6);\n            let t1 = &t0 * &_110111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1110111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2656 = {\n            let t0 = &_110111 * &i2635;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_1111;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1000011;\n            t4\n        };\n        let i2679 = {\n            let t0 = square_n(&i2656, 7);\n            let t1 = &t0 * &_1101101;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2691 = {\n            let t0 = &_101001 * &i2679;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1110001;\n            let t3 = square_n(&t2, 1);\n            let t4 = &t3 * &base;\n            t4\n        };\n        let i2720 = {\n            let t0 = square_n(&i2691, 14);\n            let t1 = &t0 * &_1100001;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_111101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2740 = {\n            let t0 = &_110101 * &i2720;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1110001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_111011;\n            t4\n        };\n        let i2770 = {\n            let t0 = square_n(&i2740, 9);\n            let t1 = &t0 * &_1110011;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1000101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2788 = {\n            let t0 = &_101101 * &i2770;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1001001;\n            t4\n        };\n        let i2811 = {\n            let t0 = square_n(&i2788, 4);\n            let t1 = &t0 * &_1001;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1100011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2829 = {\n            let t0 = &_1011001 * &i2811;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_11111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1101011;\n            t4\n        };\n        let i2853 = {\n            let t0 = square_n(&i2829, 6);\n            let t1 = &t0 * &_11011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_110001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2866 = {\n            let t0 = &_11111 * &i2853;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1101111;\n            let t3 = square_n(&t2, 1);\n            let t4 = &t3 * &base;\n            t4\n        };\n        let i2896 = {\n            let t0 = square_n(&i2866, 12);\n            let t1 = &t0 * &_111011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2915 = {\n            let t0 = &_1000101 * &i2896;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_11101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1111101;\n            t4\n        };\n        let i2941 = {\n            let t0 = square_n(&i2915, 9);\n            let t1 = &t0 * &_1001011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2957 = {\n            let t0 = &_1110001 * &i2941;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_111101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_10111;\n            t4\n        };\n        let i2984 = {\n            let t0 = square_n(&i2957, 9);\n            let t1 = &t0 * &_111011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_100111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3001 = {\n            let t0 = &_1001101 * &i2984;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_110011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001111;\n            t4\n        };\n        let i3025 = {\n            let t0 = square_n(&i3001, 8);\n            let t1 = &t0 * &_1001001;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_100111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3040 = {\n            let t0 = &_1110011 * &i3025;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_10011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_10101;\n            t4\n        };\n        let i3065 = {\n            let t0 = square_n(&i3040, 9);\n            let t1 = &t0 * &_1111001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1101001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3085 = {\n            let t0 = &_1111011 * &i3065;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_101101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1000001;\n            t4\n        };\n        let i3110 = {\n            let t0 = square_n(&i3085, 8);\n            let t1 = &t0 * &_111001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1011101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3126 = {\n            let t0 = &_1111011 * &i3110;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_10001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_110111;\n            t4\n        };\n        let i3150 = {\n            let t0 = square_n(&i3126, 8);\n            let t1 = &t0 * &_1000101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_101111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3168 = {\n            let t0 = &_1101011 * &i3150;\n            let t1 = square_n(&t0, 2);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_1110011;\n            t4\n        };\n        let i3191 = {\n            let t0 = square_n(&i3168, 7);\n            let t1 = &t0 * &_1000001;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3207 = {\n            let t0 = &_1111101 * &i3191;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1010011;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_110011;\n            t4\n        };\n        let i3232 = {\n            let t0 = square_n(&i3207, 8);\n            let t1 = &t0 * &_1010011;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_1011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i3251 = {\n            let t0 = &_1110101 * &i3232;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1101111;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_110001;\n            t4\n        };\n        let i3282 = {\n            let t0 = square_n(&i3251, 12);\n            let t1 = &t0 * &_100011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1011011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3299 = {\n            let t0 = &_1001011 * &i3282;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_100111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i3324 = {\n            let t0 = square_n(&i3299, 7);\n            let t1 = &t0 * &_1011111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1101101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3341 = {\n            let t0 = &_10001 * &i3324;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1101001;\n            let t3 = square_n(&t2, 4);\n            let t4 = &t3 * &_1111;\n            t4\n        };\n        let i3372 = {\n            let t0 = square_n(&i3341, 12);\n            let t1 = &t0 * &_100101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1000001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3391 = {\n            let t0 = &_1100111 * &i3372;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1010111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1000001;\n            t4\n        };\n        let i3415 = {\n            let t0 = square_n(&i3391, 2);\n            let t1 = &t0 * &_11;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_11111111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3433 = {\n            let t0 = &_1111101 * &i3415;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_1101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1101111;\n            t4\n        };\n        let i3456 = {\n            let t0 = square_n(&i3433, 6);\n            let t1 = &t0 * &_11001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3477 = {\n            let t0 = &_111 * &i3456;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_100101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_11;\n            t4\n        };\n        let result = {\n            let t0 = square_n(&i3477, 5);\n            t0\n        };\n        result\n    }\n\n    /// Generated from tools/addchain/bn254_exp0.acc\n    pub fn pow_exp0(\n        base: &FieldElement<Degree12ExtensionField>,\n    ) -> FieldElement<Degree12ExtensionField> {\n        let base = base.clone();\n        let _10 = {\n            let t0 = square_n(&base, 1);\n            t0\n        };\n        let _11 = {\n            let t0 = &base * &_10;\n            t0\n        };\n        let _101 = {\n            let t0 = &_10 * &_11;\n            t0\n        };\n        let _111 = {\n            let t0 = &_10 * &_101;\n            t0\n        };\n        let _1001 = {\n            let t0 = &_10 * &_111;\n            t0\n        };\n        let _1011 = {\n            let t0 = &_10 * &_1001;\n            t0\n        };\n        let _1101 = {\n            let t0 = &_10 * &_1011;\n            t0\n        };\n        let _1111 = {\n            let t0 = &_10 * &_1101;\n            t0\n        };\n        let _10001 = {\n            let t0 = &_10 * &_1111;\n            t0\n        };\n        let _10011 = {\n            let t0 = &_10 * &_10001;\n            t0\n        };\n        let _10101 = {\n            let t0 = &_10 * &_10011;\n            t0\n        };\n        let _10111 = {\n            let t0 = &_10 * &_10101;\n            t0\n        };\n        let _11001 = {\n            let t0 = &_10 * &_10111;\n            t0\n        };\n        let _11011 = {\n            let t0 = &_10 * &_11001;\n            t0\n        };\n        let _11101 = {\n            let t0 = &_10 * &_11011;\n            t0\n        };\n        let _11111 = {\n            let t0 = &_10 * &_11101;\n            t0\n        };\n        let _100001 = {\n            let t0 = &_10 * &_11111;\n            t0\n        };\n        let _100011 = {\n            let t0 = &_10 * &_100001;\n            t0\n        };\n        let _100101 = {\n            let t0 = &_10 * &_100011;\n            t0\n        };\n        let _100111 = {\n            let t0 = &_10 * &_100101;\n            t0\n        };\n        let _101001 = {\n            let t0 = &_10 * &_100111;\n            t0\n        };\n        let _101011 = {\n            let t0 = &_10 * &_101001;\n            t0\n        };\n        let _101101 = {\n            let t0 = &_10 * &_101011;\n            t0\n        };\n        let _101111 = {\n            let t0 = &_10 * &_101101;\n            t0\n        };\n        let _110001 = {\n            let t0 = &_10 * &_101111;\n            t0\n        };\n        let _110011 = {\n            let t0 = &_10 * &_110001;\n            t0\n        };\n        let _110101 = {\n            let t0 = &_10 * &_110011;\n            t0\n        };\n        let _110111 = {\n            let t0 = &_10 * &_110101;\n            t0\n        };\n        let _111001 = {\n            let t0 = &_10 * &_110111;\n            t0\n        };\n        let _111011 = {\n            let t0 = &_10 * &_111001;\n            t0\n        };\n        let _111101 = {\n            let t0 = &_10 * &_111011;\n            t0\n        };\n        let _111111 = {\n            let t0 = &_10 * &_111101;\n            t0\n        };\n        let _1000001 = {\n            let t0 = &_10 * &_111111;\n            t0\n        };\n        let _1000011 = {\n            let t0 = &_10 * &_1000001;\n            t0\n        };\n        let _1000101 = {\n            let t0 = &_10 * &_1000011;\n            t0\n        };\n        let _1000111 = {\n            let t0 = &_10 * &_1000101;\n            t0\n        };\n        let _1001001 = {\n            let t0 = &_10 * &_1000111;\n            t0\n        };\n        let _1001011 = {\n            let t0 = &_10 * &_1001001;\n            t0\n        };\n        let _1001101 = {\n            let t0 = &_10 * &_1001011;\n            t0\n        };\n        let _1001111 = {\n            let t0 = &_10 * &_1001101;\n            t0\n        };\n        let _1010001 = {\n            let t0 = &_10 * &_1001111;\n            t0\n        };\n        let _1010011 = {\n            let t0 = &_10 * &_1010001;\n            t0\n        };\n        let _1010101 = {\n            let t0 = &_10 * &_1010011;\n            t0\n        };\n        let _1010111 = {\n            let t0 = &_10 * &_1010101;\n            t0\n        };\n        let _1011001 = {\n            let t0 = &_10 * &_1010111;\n            t0\n        };\n        let _1011011 = {\n            let t0 = &_10 * &_1011001;\n            t0\n        };\n        let _1011101 = {\n            let t0 = &_10 * &_1011011;\n            t0\n        };\n        let _1011111 = {\n            let t0 = &_10 * &_1011101;\n            t0\n        };\n        let _1100001 = {\n            let t0 = &_10 * &_1011111;\n            t0\n        };\n        let _1100011 = {\n            let t0 = &_10 * &_1100001;\n            t0\n        };\n        let _1100101 = {\n            let t0 = &_10 * &_1100011;\n            t0\n        };\n        let _1100111 = {\n            let t0 = &_10 * &_1100101;\n            t0\n        };\n        let _1101001 = {\n            let t0 = &_10 * &_1100111;\n            t0\n        };\n        let _1101011 = {\n            let t0 = &_10 * &_1101001;\n            t0\n        };\n        let _1101101 = {\n            let t0 = &_10 * &_1101011;\n            t0\n        };\n        let _1101111 = {\n            let t0 = &_10 * &_1101101;\n            t0\n        };\n        let _1110001 = {\n            let t0 = &_10 * &_1101111;\n            t0\n        };\n        let _1110011 = {\n            let t0 = &_10 * &_1110001;\n            t0\n        };\n        let _1110101 = {\n            let t0 = &_10 * &_1110011;\n            t0\n        };\n        let _1110111 = {\n            let t0 = &_10 * &_1110101;\n            t0\n        };\n        let _1111001 = {\n            let t0 = &_10 * &_1110111;\n            t0\n        };\n        let _1111011 = {\n            let t0 = &_10 * &_1111001;\n            t0\n        };\n        let _1111101 = {\n            let t0 = &_10 * &_1111011;\n            t0\n        };\n        let _1111111 = {\n            let t0 = &_10 * &_1111101;\n            t0\n        };\n        let _11100010 = {\n            let t0 = &_1100011 * &_1111111;\n            t0\n        };\n        let _11111111 = {\n            let t0 = &_11101 * &_11100010;\n            t0\n        };\n        let i67 = {\n            let t0 = square_n(&_11100010, 1);\n            t0\n        };\n        let x9 = {\n            let t0 = &_111011 * &i67;\n            t0\n        };\n        let i94 = {\n            let t0 = square_n(&i67, 10);\n            let t1 = &t0 * &_1010101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1100001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i118 = {\n            let t0 = &_1000011 * &i94;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_111011;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_101011;\n            t4\n        };\n        let i146 = {\n            let t0 = square_n(&i118, 8);\n            let t1 = &t0 * &_1101111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i165 = {\n            let t0 = &_1010111 * &i146;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1110111;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_1011;\n            t4\n        };\n        let i191 = {\n            let t0 = square_n(&i165, 6);\n            let t1 = &t0 * &_101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_111001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i212 = {\n            let t0 = &_100101 * &i191;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i243 = {\n            let t0 = square_n(&i212, 10);\n            let t1 = &t0 * &_111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1011011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i261 = {\n            let t0 = &_1100001 * &i243;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_1111;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_110101;\n            t4\n        };\n        let i287 = {\n            let t0 = square_n(&i261, 6);\n            let t1 = &t0 * &_10111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1010101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i308 = {\n            let t0 = &_10011 * &i287;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_100001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_100011;\n            t4\n        };\n        let i334 = {\n            let t0 = square_n(&i308, 9);\n            let t1 = &t0 * &_1100001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_101101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i359 = {\n            let t0 = &_1011 * &i334;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1100011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_100111;\n            t4\n        };\n        let i384 = {\n            let t0 = square_n(&i359, 9);\n            let t1 = &t0 * &_1101001;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i402 = {\n            let t0 = &_100101 * &i384;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1010001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_100011;\n            t4\n        };\n        let i426 = {\n            let t0 = square_n(&i402, 9);\n            let t1 = &t0 * &_1100001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1001011;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        let i445 = {\n            let t0 = &_1101 * &i426;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i469 = {\n            let t0 = square_n(&i445, 8);\n            let t1 = &t0 * &_1101001;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i489 = {\n            let t0 = &_1111101 * &i469;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1111101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1110101;\n            t4\n        };\n        let i515 = {\n            let t0 = square_n(&i489, 7);\n            let t1 = &t0 * &_111011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_100011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i532 = {\n            let t0 = &_111001 * &i515;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_1101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_111;\n            t4\n        };\n        let i561 = {\n            let t0 = square_n(&i532, 11);\n            let t1 = &t0 * &_11111111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1111001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i576 = {\n            let t0 = &_1010111 * &i561;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_11101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1001;\n            t4\n        };\n        let i602 = {\n            let t0 = square_n(&i576, 10);\n            let t1 = &t0 * &_1011001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1111001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i625 = {\n            let t0 = &_11001 * &i602;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_101101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_111101;\n            t4\n        };\n        let i649 = {\n            let t0 = square_n(&i625, 6);\n            let t1 = &t0 * &_10011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i671 = {\n            let t0 = &_10111 * &i649;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1101101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1111001;\n            t4\n        };\n        let i696 = {\n            let t0 = square_n(&i671, 9);\n            let t1 = &t0 * &_1000001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1101101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i716 = {\n            let t0 = &_1100111 * &i696;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_10001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i737 = {\n            let t0 = square_n(&i716, 6);\n            let t1 = &t0 * &_100111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1101101;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i762 = {\n            let t0 = &_11101 * &i737;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_1111001;\n            t4\n        };\n        let i787 = {\n            let t0 = square_n(&i762, 7);\n            let t1 = &t0 * &_1001011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1000011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i805 = {\n            let t0 = &_1011101 * &i787;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_110111;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_10001;\n            t4\n        };\n        let i830 = {\n            let t0 = square_n(&i805, 6);\n            let t1 = &t0 * &_1111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1010101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i847 = {\n            let t0 = &_1011001 * &i830;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1011111;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_1001;\n            t4\n        };\n        let i872 = {\n            let t0 = square_n(&i847, 5);\n            let t1 = &t0 * &_11;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_110111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i887 = {\n            let t0 = &_100101 * &i872;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_1011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1011;\n            t4\n        };\n        let i913 = {\n            let t0 = square_n(&i887, 10);\n            let t1 = &t0 * &_1011011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_10101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i936 = {\n            let t0 = &_111001 * &i913;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1001001;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1110111;\n            t4\n        };\n        let i965 = {\n            let t0 = square_n(&i936, 10);\n            let t1 = &t0 * &_101111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i984 = {\n            let t0 = &_1010011 * &i965;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1111011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1010001;\n            t4\n        };\n        let i1004 = {\n            let t0 = square_n(&i984, 6);\n            let t1 = &t0 * &_10011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1010111;\n            let t4 = square_n(&t3, 3);\n            t4\n        };\n        let i1023 = {\n            let t0 = &_111 * &i1004;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_110001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_11101;\n            t4\n        };\n        let i1051 = {\n            let t0 = square_n(&i1023, 11);\n            let t1 = &t0 * &x9;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1011011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1071 = {\n            let t0 = &_1010001 * &i1051;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1101111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_111011;\n            t4\n        };\n        let i1099 = {\n            let t0 = square_n(&i1071, 9);\n            let t1 = &t0 * &_1111001;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_101001;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i1118 = {\n            let t0 = &_101111 * &i1099;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1011001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1000001;\n            t4\n        };\n        let i1143 = {\n            let t0 = square_n(&i1118, 9);\n            let t1 = &t0 * &_1000011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_111101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1162 = {\n            let t0 = &_111001 * &i1143;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1100101;\n            t4\n        };\n        let i1187 = {\n            let t0 = square_n(&i1162, 4);\n            let t1 = &t0 * &_1001;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_110011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1205 = {\n            let t0 = &_1100101 * &i1187;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_1101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1101011;\n            t4\n        };\n        let i1231 = {\n            let t0 = square_n(&i1205, 7);\n            let t1 = &t0 * &_1010101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1248 = {\n            let t0 = &_1100101 * &i1231;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_1011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_111011;\n            t4\n        };\n        let i1272 = {\n            let t0 = square_n(&i1248, 8);\n            let t1 = &t0 * &_1010111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_100101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1292 = {\n            let t0 = &_110001 * &i1272;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1110011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1111011;\n            t4\n        };\n        let i1317 = {\n            let t0 = square_n(&i1292, 9);\n            let t1 = &t0 * &_1010011;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1336 = {\n            let t0 = &_1111001 * &i1317;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_10001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1111001;\n            t4\n        };\n        let i1357 = {\n            let t0 = square_n(&i1336, 7);\n            let t1 = &t0 * &_1001101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1110001;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i1382 = {\n            let t0 = &_11011 * &i1357;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1001001;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_1100111;\n            t4\n        };\n        let i1407 = {\n            let t0 = square_n(&i1382, 8);\n            let t1 = &t0 * &_1110011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_101011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1423 = {\n            let t0 = &_100111 * &i1407;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_101001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_11101;\n            t4\n        };\n        let i1458 = {\n            let t0 = square_n(&i1423, 8);\n            let t1 = &t0 * &_111001;\n            let t2 = square_n(&t1, 14);\n            let t3 = &t2 * &_1101001;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i1478 = {\n            let t0 = &_1100011 * &i1458;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_110111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1001111;\n            t4\n        };\n        let i1498 = {\n            let t0 = square_n(&i1478, 4);\n            let t1 = &t0 * &_11;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1010011;\n            let t4 = square_n(&t3, 2);\n            t4\n        };\n        let i1519 = {\n            let t0 = &_11 * &i1498;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_1110101;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_110111;\n            t4\n        };\n        let i1544 = {\n            let t0 = square_n(&i1519, 10);\n            let t1 = &t0 * &_1010101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1011101;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i1559 = {\n            let t0 = &_111011 * &i1544;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1100111;\n            let t3 = square_n(&t2, 4);\n            let t4 = &t3 * &_111;\n            t4\n        };\n        let i1594 = {\n            let t0 = square_n(&i1559, 12);\n            let t1 = &t0 * &_111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11101;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i1610 = {\n            let t0 = &_1001111 * &i1594;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1010011;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_10101;\n            t4\n        };\n        let i1636 = {\n            let t0 = square_n(&i1610, 10);\n            let t1 = &t0 * &_1001111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1010111;\n            let t4 = square_n(&t3, 3);\n            t4\n        };\n        let i1658 = {\n            let t0 = &_101 * &i1636;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1011001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_101101;\n            t4\n        };\n        let i1680 = {\n            let t0 = square_n(&i1658, 8);\n            let t1 = &t0 * &_1001111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1001111;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i1700 = {\n            let t0 = &_1011 * &i1680;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1111001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1000101;\n            t4\n        };\n        let i1727 = {\n            let t0 = square_n(&i1700, 7);\n            let t1 = &t0 * &_1001101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_111011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1744 = {\n            let t0 = &_1000111 * &i1727;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1000111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1011001;\n            t4\n        };\n        let i1766 = {\n            let t0 = square_n(&i1744, 6);\n            let t1 = &t0 * &_101001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1101101;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i1784 = {\n            let t0 = &_100101 * &i1766;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1000111;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_110101;\n            t4\n        };\n        let i1812 = {\n            let t0 = square_n(&i1784, 9);\n            let t1 = &t0 * &_1100111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_110001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1828 = {\n            let t0 = &_1101111 * &i1812;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1101001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_100011;\n            t4\n        };\n        let i1854 = {\n            let t0 = square_n(&i1828, 6);\n            let t1 = &t0 * &_10011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1000111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1876 = {\n            let t0 = &_1110001 * &i1854;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_100011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_101;\n            t4\n        };\n        let i1918 = {\n            let t0 = square_n(&i1876, 20);\n            let t1 = &t0 * &_111011;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_10001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1937 = {\n            let t0 = &_1011001 * &i1918;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_110001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_110101;\n            t4\n        };\n        let i1962 = {\n            let t0 = square_n(&i1937, 8);\n            let t1 = &t0 * &_110111;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_111;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i1978 = {\n            let t0 = &_1001101 * &i1962;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1000011;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_101111;\n            t4\n        };\n        let i2002 = {\n            let t0 = square_n(&i1978, 8);\n            let t1 = &t0 * &_1000001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1110001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2019 = {\n            let t0 = &_1111001 * &i2002;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1001101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i2043 = {\n            let t0 = square_n(&i2019, 10);\n            let t1 = &t0 * &_1010111;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_111011;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i2061 = {\n            let t0 = &_11111 * &i2043;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_110001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_110001;\n            t4\n        };\n        let i2084 = {\n            let t0 = square_n(&i2061, 8);\n            let t1 = &t0 * &_1010111;\n            let t2 = square_n(&t1, 2);\n            let t3 = &t2 * &base;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i2103 = {\n            let t0 = &_10111 * &i2084;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1000011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1011001;\n            t4\n        };\n        let i2126 = {\n            let t0 = square_n(&i2103, 7);\n            let t1 = &t0 * &_1011011;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_11101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2144 = {\n            let t0 = &_101001 * &i2126;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1110011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i2173 = {\n            let t0 = square_n(&i2144, 9);\n            let t1 = &t0 * &_1110111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1010011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2184 = {\n            let t0 = &_1110001 * &i2173;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1110001;\n            let t3 = square_n(&t2, 1);\n            let t4 = &t3 * &base;\n            t4\n        };\n        let i2216 = {\n            let t0 = square_n(&i2184, 14);\n            let t1 = &t0 * &_111101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1110001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2233 = {\n            let t0 = &_1001011 * &i2216;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_111001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_11111;\n            t4\n        };\n        let i2259 = {\n            let t0 = square_n(&i2233, 10);\n            let t1 = &t0 * &_1100111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1101111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2280 = {\n            let t0 = &_1011011 * &i2259;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &x9;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1100101;\n            t4\n        };\n        let i2305 = {\n            let t0 = square_n(&i2280, 7);\n            let t1 = &t0 * &_1110011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_100001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2327 = {\n            let t0 = &_101011 * &i2305;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_1011;\n            t4\n        };\n        let i2354 = {\n            let t0 = square_n(&i2327, 10);\n            let t1 = &t0 * &_110111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_100111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2374 = {\n            let t0 = &_1100101 * &i2354;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1100101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1011111;\n            t4\n        };\n        let i2402 = {\n            let t0 = square_n(&i2374, 12);\n            let t1 = &t0 * &_1000011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1110001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2421 = {\n            let t0 = &_1011101 * &i2402;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1011011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1101111;\n            t4\n        };\n        let i2446 = {\n            let t0 = square_n(&i2421, 5);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2461 = {\n            let t0 = &_1111001 * &i2446;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_10111;\n            t4\n        };\n        let i2494 = {\n            let t0 = square_n(&i2461, 11);\n            let t1 = &t0 * &_100101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2519 = {\n            let t0 = &_110011 * &i2494;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_101001;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_1100111;\n            t4\n        };\n        let i2543 = {\n            let t0 = square_n(&i2519, 9);\n            let t1 = &t0 * &_1000011;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_1001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2561 = {\n            let t0 = &_110101 * &i2543;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1010011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i2586 = {\n            let t0 = square_n(&i2561, 5);\n            let t1 = &t0 * &_1001;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_101;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i2614 = {\n            let t0 = &_11011 * &i2586;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_101;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1101101;\n            t4\n        };\n        let i2641 = {\n            let t0 = square_n(&i2614, 4);\n            let t1 = &t0 * &_101;\n            let t2 = square_n(&t1, 14);\n            let t3 = &t2 * &_1000001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2658 = {\n            let t0 = &_111011 * &i2641;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_10011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11011;\n            t4\n        };\n        let i2684 = {\n            let t0 = square_n(&i2658, 8);\n            let t1 = &t0 * &_10111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1010001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2702 = {\n            let t0 = &_111001 * &i2684;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1010101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1000111;\n            t4\n        };\n        let i2726 = {\n            let t0 = square_n(&i2702, 4);\n            let t1 = &t0 * &_1011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1000101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2741 = {\n            let t0 = &_1011101 * &i2726;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_110001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_11011;\n            t4\n        };\n        let i2767 = {\n            let t0 = square_n(&i2741, 9);\n            let t1 = &t0 * &_1000111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1100001;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i2792 = {\n            let t0 = &_111111 * &i2767;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1101011;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_111011;\n            t4\n        };\n        let i2820 = {\n            let t0 = square_n(&i2792, 8);\n            let t1 = &t0 * &_1111101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_11101;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i2837 = {\n            let t0 = &_1110101 * &i2820;\n            let t1 = square_n(&t0, 2);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1101001;\n            t4\n        };\n        let i2862 = {\n            let t0 = square_n(&i2837, 8);\n            let t1 = &t0 * &_110101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1001101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2878 = {\n            let t0 = &_1110101 * &i2862;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1011001;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_10111;\n            t4\n        };\n        let i2910 = {\n            let t0 = square_n(&i2878, 8);\n            let t1 = &t0 * &_11;\n            let t2 = square_n(&t1, 13);\n            let t3 = &t2 * &_1011101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2932 = {\n            let t0 = &_1011101 * &i2910;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1111111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1010111;\n            t4\n        };\n        let i2956 = {\n            let t0 = square_n(&i2932, 8);\n            let t1 = &t0 * &_1110001;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_1001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2972 = {\n            let t0 = &_1101001 * &i2956;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_11001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1001;\n            t4\n        };\n        let i3000 = {\n            let t0 = square_n(&i2972, 9);\n            let t1 = &t0 * &_100011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_101001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i3019 = {\n            let t0 = &_11111 * &i3000;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1010111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1000101;\n            t4\n        };\n        let i3046 = {\n            let t0 = square_n(&i3019, 7);\n            let t1 = &t0 * &_100011;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1111101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3065 = {\n            let t0 = &_1000001 * &i3046;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1111011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1010111;\n            t4\n        };\n        let i3094 = {\n            let t0 = square_n(&i3065, 14);\n            let t1 = &t0 * &_1001101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1001101;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i3115 = {\n            let t0 = &_1111 * &i3094;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1111101;\n            t4\n        };\n        let i3140 = {\n            let t0 = square_n(&i3115, 7);\n            let t1 = &t0 * &_100111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1101111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3160 = {\n            let t0 = &_101001 * &i3140;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1010101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1110111;\n            t4\n        };\n        let i3182 = {\n            let t0 = square_n(&i3160, 7);\n            let t1 = &t0 * &_1000111;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_100101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3202 = {\n            let t0 = &_111101 * &i3182;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_1001;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1111001;\n            t4\n        };\n        let i3225 = {\n            let t0 = square_n(&i3202, 5);\n            let t1 = &t0 * &_10101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1000111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3243 = {\n            let t0 = &_1010011 * &i3225;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1001111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i3266 = {\n            let t0 = square_n(&i3243, 7);\n            let t1 = &t0 * &_1101101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_10111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3284 = {\n            let t0 = &_110111 * &i3266;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_111111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1011001;\n            t4\n        };\n        let i3309 = {\n            let t0 = square_n(&i3284, 7);\n            let t1 = &t0 * &_1011011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_101111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3326 = {\n            let t0 = &_1010001 * &i3309;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_1101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1001111;\n            t4\n        };\n        let i3354 = {\n            let t0 = square_n(&i3326, 7);\n            let t1 = &t0 * &_1100011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1000011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i3369 = {\n            let t0 = &_1111011 * &i3354;\n            let t1 = square_n(&t0, 3);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11111111;\n            t4\n        };\n        let i3396 = {\n            let t0 = square_n(&i3369, 12);\n            let t1 = &t0 * &_1000111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_11111;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i3421 = {\n            let t0 = &_111 * &i3396;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1110001;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10101;\n            t4\n        };\n        let i3449 = {\n            let t0 = square_n(&i3421, 12);\n            let t1 = &t0 * &_1101001;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3470 = {\n            let t0 = &_111101 * &i3449;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1100001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1100101;\n            t4\n        };\n        let result = {\n            let t0 = square_n(&i3470, 1);\n            let t1 = &t0 * &base;\n            t1\n        };\n        result\n    }\n\n    /// Generated from tools/addchain/bn254_r_m_d_inv.acc\n    pub fn pow_r_m_d_inv(\n        base: &FieldElement<Degree12ExtensionField>,\n    ) -> FieldElement<Degree12ExtensionField> {\n        let base = base.clone();\n        let _10 = {\n            let t0 = square_n(&base, 1);\n            t0\n        };\n        let _11 = {\n            let t0 = &base * &_10;\n            t0\n        };\n        let _100 = {\n            let t0 = &base * &_11;\n            t0\n        };\n        let _101 = {\n            let t0 = &base * &_100;\n            t0\n        };\n        let _111 = {\n            let t0 = &_10 * &_101;\n            t0\n        };\n        let _1001 = {\n            let t0 = &_10 * &_111;\n            t0\n        };\n        let _1011 = {\n            let t0 = &_10 * &_1001;\n            t0\n        };\n        let _1101 = {\n            let t0 = &_10 * &_1011;\n            t0\n        };\n        let _1111 = {\n            let t0 = &_10 * &_1101;\n            t0\n        };\n        let _10001 = {\n            let t0 = &_10 * &_1111;\n            t0\n        };\n        let _10011 = {\n            let t0 = &_10 * &_10001;\n            t0\n        };\n        let _10101 = {\n            let t0 = &_10 * &_10011;\n            t0\n        };\n        let _10111 = {\n            let t0 = &_10 * &_10101;\n            t0\n        };\n        let _11001 = {\n            let t0 = &_10 * &_10111;\n            t0\n        };\n        let _11011 = {\n            let t0 = &_10 * &_11001;\n            t0\n        };\n        let _11101 = {\n            let t0 = &_10 * &_11011;\n            t0\n        };\n        let _11111 = {\n            let t0 = &_10 * &_11101;\n            t0\n        };\n        let _100001 = {\n            let t0 = &_10 * &_11111;\n            t0\n        };\n        let _100011 = {\n            let t0 = &_10 * &_100001;\n            t0\n        };\n        let _100101 = {\n            let t0 = &_10 * &_100011;\n            t0\n        };\n        let _100111 = {\n            let t0 = &_10 * &_100101;\n            t0\n        };\n        let _101001 = {\n            let t0 = &_10 * &_100111;\n            t0\n        };\n        let _101011 = {\n            let t0 = &_10 * &_101001;\n            t0\n        };\n        let _101101 = {\n            let t0 = &_10 * &_101011;\n            t0\n        };\n        let _101111 = {\n            let t0 = &_10 * &_101101;\n            t0\n        };\n        let _110001 = {\n            let t0 = &_10 * &_101111;\n            t0\n        };\n        let _110011 = {\n            let t0 = &_10 * &_110001;\n            t0\n        };\n        let _110101 = {\n            let t0 = &_10 * &_110011;\n            t0\n        };\n        let _110111 = {\n            let t0 = &_10 * &_110101;\n            t0\n        };\n        let _111001 = {\n            let t0 = &_10 * &_110111;\n            t0\n        };\n        let _111011 = {\n            let t0 = &_10 * &_111001;\n            t0\n        };\n        let _111101 = {\n            let t0 = &_10 * &_111011;\n            t0\n        };\n        let _111111 = {\n            let t0 = &_10 * &_111101;\n            t0\n        };\n        let _1000001 = {\n            let t0 = &_10 * &_111111;\n            t0\n        };\n        let _1000011 = {\n            let t0 = &_10 * &_1000001;\n            t0\n        };\n        let _1000101 = {\n            let t0 = &_10 * &_1000011;\n            t0\n        };\n        let _1000111 = {\n            let t0 = &_10 * &_1000101;\n            t0\n        };\n        let _1001001 = {\n            let t0 = &_10 * &_1000111;\n            t0\n        };\n        let _1001011 = {\n            let t0 = &_10 * &_1001001;\n            t0\n        };\n        let _1001101 = {\n            let t0 = &_10 * &_1001011;\n            t0\n        };\n        let _1001111 = {\n            let t0 = &_10 * &_1001101;\n            t0\n        };\n        let _1010001 = {\n            let t0 = &_10 * &_1001111;\n            t0\n        };\n        let _1010011 = {\n            let t0 = &_10 * &_1010001;\n            t0\n        };\n        let _1010101 = {\n            let t0 = &_10 * &_1010011;\n            t0\n        };\n        let _1010111 = {\n            let t0 = &_10 * &_1010101;\n            t0\n        };\n        let _1011001 = {\n            let t0 = &_10 * &_1010111;\n            t0\n        };\n        let _1011011 = {\n            let t0 = &_10 * &_1011001;\n            t0\n        };\n        let _1011101 = {\n            let t0 = &_10 * &_1011011;\n            t0\n        };\n        let _1011111 = {\n            let t0 = &_10 * &_1011101;\n            t0\n        };\n        let _1100001 = {\n            let t0 = &_10 * &_1011111;\n            t0\n        };\n        let _1100011 = {\n            let t0 = &_10 * &_1100001;\n            t0\n        };\n        let _1100101 = {\n            let t0 = &_10 * &_1100011;\n            t0\n        };\n        let _1100111 = {\n            let t0 = &_10 * &_1100101;\n            t0\n        };\n        let _1101001 = {\n            let t0 = &_10 * &_1100111;\n            t0\n        };\n        let _1101011 = {\n            let t0 = &_10 * &_1101001;\n            t0\n        };\n        let _1101101 = {\n            let t0 = &_10 * &_1101011;\n            t0\n        };\n        let _1101111 = {\n            let t0 = &_10 * &_1101101;\n            t0\n        };\n        let _1110001 = {\n            let t0 = &_10 * &_1101111;\n            t0\n        };\n        let _1110011 = {\n            let t0 = &_10 * &_1110001;\n            t0\n        };\n        let _1110101 = {\n            let t0 = &_10 * &_1110011;\n            t0\n        };\n        let _1110111 = {\n            let t0 = &_10 * &_1110101;\n            t0\n        };\n        let _1111001 = {\n            let t0 = &_10 * &_1110111;\n            t0\n        };\n        let _1111011 = {\n            let t0 = &_10 * &_1111001;\n            t0\n        };\n        let _1111101 = {\n            let t0 = &_10 * &_1111011;\n            t0\n        };\n        let _1111111 = {\n            let t0 = &_10 * &_1111101;\n            t0\n        };\n        let _10000001 = {\n            let t0 = &_10 * &_1111111;\n            t0\n        };\n        let _10000011 = {\n            let t0 = &_10 * &_10000001;\n            t0\n        };\n        let _10000101 = {\n            let t0 = &_10 * &_10000011;\n            t0\n        };\n        let _10000111 = {\n            let t0 = &_10 * &_10000101;\n            t0\n        };\n        let _10001001 = {\n            let t0 = &_10 * &_10000111;\n            t0\n        };\n        let _10001011 = {\n            let t0 = &_10 * &_10001001;\n            t0\n        };\n        let _10001101 = {\n            let t0 = &_10 * &_10001011;\n            t0\n        };\n        let _10001111 = {\n            let t0 = &_10 * &_10001101;\n            t0\n        };\n        let _10010001 = {\n            let t0 = &_10 * &_10001111;\n            t0\n        };\n        let _10010011 = {\n            let t0 = &_10 * &_10010001;\n            t0\n        };\n        let _10010101 = {\n            let t0 = &_10 * &_10010011;\n            t0\n        };\n        let _10010111 = {\n            let t0 = &_10 * &_10010101;\n            t0\n        };\n        let _10011001 = {\n            let t0 = &_10 * &_10010111;\n            t0\n        };\n        let _10011011 = {\n            let t0 = &_10 * &_10011001;\n            t0\n        };\n        let _10011101 = {\n            let t0 = &_10 * &_10011011;\n            t0\n        };\n        let _10011111 = {\n            let t0 = &_10 * &_10011101;\n            t0\n        };\n        let _10100001 = {\n            let t0 = &_10 * &_10011111;\n            t0\n        };\n        let _10100011 = {\n            let t0 = &_10 * &_10100001;\n            t0\n        };\n        let _10100101 = {\n            let t0 = &_10 * &_10100011;\n            t0\n        };\n        let _10100111 = {\n            let t0 = &_10 * &_10100101;\n            t0\n        };\n        let _10101001 = {\n            let t0 = &_10 * &_10100111;\n            t0\n        };\n        let _10101011 = {\n            let t0 = &_10 * &_10101001;\n            t0\n        };\n        let _10101101 = {\n            let t0 = &_10 * &_10101011;\n            t0\n        };\n        let _10101111 = {\n            let t0 = &_10 * &_10101101;\n            t0\n        };\n        let _10110001 = {\n            let t0 = &_10 * &_10101111;\n            t0\n        };\n        let _10110011 = {\n            let t0 = &_10 * &_10110001;\n            t0\n        };\n        let _10110101 = {\n            let t0 = &_10 * &_10110011;\n            t0\n        };\n        let _10110111 = {\n            let t0 = &_10 * &_10110101;\n            t0\n        };\n        let _10111001 = {\n            let t0 = &_10 * &_10110111;\n            t0\n        };\n        let _10111011 = {\n            let t0 = &_10 * &_10111001;\n            t0\n        };\n        let _10111101 = {\n            let t0 = &_10 * &_10111011;\n            t0\n        };\n        let _10111111 = {\n            let t0 = &_10 * &_10111101;\n            t0\n        };\n        let _11000001 = {\n            let t0 = &_10 * &_10111111;\n            t0\n        };\n        let _11000011 = {\n            let t0 = &_10 * &_11000001;\n            t0\n        };\n        let _11000101 = {\n            let t0 = &_10 * &_11000011;\n            t0\n        };\n        let _11000111 = {\n            let t0 = &_10 * &_11000101;\n            t0\n        };\n        let _11001001 = {\n            let t0 = &_10 * &_11000111;\n            t0\n        };\n        let _11001011 = {\n            let t0 = &_10 * &_11001001;\n            t0\n        };\n        let _11001101 = {\n            let t0 = &_10 * &_11001011;\n            t0\n        };\n        let _11001111 = {\n            let t0 = &_10 * &_11001101;\n            t0\n        };\n        let _11010001 = {\n            let t0 = &_10 * &_11001111;\n            t0\n        };\n        let _11010011 = {\n            let t0 = &_10 * &_11010001;\n            t0\n        };\n        let _11010111 = {\n            let t0 = &_100 * &_11010011;\n            t0\n        };\n        let _11011001 = {\n            let t0 = &_10 * &_11010111;\n            t0\n        };\n        let _11011011 = {\n            let t0 = &_10 * &_11011001;\n            t0\n        };\n        let _11011101 = {\n            let t0 = &_10 * &_11011011;\n            t0\n        };\n        let _11011111 = {\n            let t0 = &_10 * &_11011101;\n            t0\n        };\n        let _11100001 = {\n            let t0 = &_10 * &_11011111;\n            t0\n        };\n        let _11100011 = {\n            let t0 = &_10 * &_11100001;\n            t0\n        };\n        let _11100101 = {\n            let t0 = &_10 * &_11100011;\n            t0\n        };\n        let _11100111 = {\n            let t0 = &_10 * &_11100101;\n            t0\n        };\n        let _11101001 = {\n            let t0 = &_10 * &_11100111;\n            t0\n        };\n        let _11101011 = {\n            let t0 = &_10 * &_11101001;\n            t0\n        };\n        let _11101101 = {\n            let t0 = &_10 * &_11101011;\n            t0\n        };\n        let _11101111 = {\n            let t0 = &_10 * &_11101101;\n            t0\n        };\n        let _11110001 = {\n            let t0 = &_10 * &_11101111;\n            t0\n        };\n        let _11110011 = {\n            let t0 = &_10 * &_11110001;\n            t0\n        };\n        let _11110101 = {\n            let t0 = &_10 * &_11110011;\n            t0\n        };\n        let _11110111 = {\n            let t0 = &_10 * &_11110101;\n            t0\n        };\n        let _11111001 = {\n            let t0 = &_10 * &_11110111;\n            t0\n        };\n        let _11111011 = {\n            let t0 = &_10 * &_11111001;\n            t0\n        };\n        let _11111101 = {\n            let t0 = &_10 * &_11111011;\n            t0\n        };\n        let _11111111 = {\n            let t0 = &_10 * &_11111101;\n            t0\n        };\n        let i146 = {\n            let t0 = &_11 * &_11111111;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_10100011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11010011;\n            t4\n        };\n        let i174 = {\n            let t0 = square_n(&i146, 9);\n            let t1 = &t0 * &_1110011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10101001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i199 = {\n            let t0 = &_101011 * &i174;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_100011;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11100011;\n            t4\n        };\n        let i229 = {\n            let t0 = square_n(&i199, 8);\n            let t1 = &t0 * &_10011011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11000001;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i255 = {\n            let t0 = &_11110111 * &i229;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10000111;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_10100001;\n            t4\n        };\n        let i278 = {\n            let t0 = square_n(&i255, 5);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i298 = {\n            let t0 = &_1011 * &i278;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_100011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_11111;\n            t4\n        };\n        let i330 = {\n            let t0 = square_n(&i298, 12);\n            let t1 = &t0 * &_10111111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1000011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i352 = {\n            let t0 = &_1011111 * &i330;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1100001;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11111111;\n            t4\n        };\n        let i387 = {\n            let t0 = square_n(&i352, 10);\n            let t1 = &t0 * &_11011001;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10001;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i411 = {\n            let t0 = &_1000111 * &i387;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_10111;\n            let t3 = square_n(&t2, 15);\n            let t4 = &t3 * &_1101101;\n            t4\n        };\n        let i441 = {\n            let t0 = square_n(&i411, 12);\n            let t1 = &t0 * &_11100011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1111011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i461 = {\n            let t0 = &_11111011 * &i441;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11111011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_10101011;\n            t4\n        };\n        let i490 = {\n            let t0 = square_n(&i461, 11);\n            let t1 = &t0 * &_10111111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10011011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i508 = {\n            let t0 = &_1100111 * &i490;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1101111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_101111;\n            t4\n        };\n        let i537 = {\n            let t0 = square_n(&i508, 10);\n            let t1 = &t0 * &_11000011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_11011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i560 = {\n            let t0 = &_10111111 * &i537;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10010101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10100101;\n            t4\n        };\n        let i587 = {\n            let t0 = square_n(&i560, 9);\n            let t1 = &t0 * &_1001101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1100001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i609 = {\n            let t0 = &_110111 * &i587;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_10111;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_11101;\n            t4\n        };\n        let i638 = {\n            let t0 = square_n(&i609, 11);\n            let t1 = &t0 * &_11100111;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_100111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i660 = {\n            let t0 = &_100111 * &i638;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_10110011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1111101;\n            t4\n        };\n        let i686 = {\n            let t0 = square_n(&i660, 12);\n            let t1 = &t0 * &_10100101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11110011;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        let i710 = {\n            let t0 = &_1001 * &i686;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_10001011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001101;\n            t4\n        };\n        let i737 = {\n            let t0 = square_n(&i710, 5);\n            let t1 = &t0 * &_1001;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_10100011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i755 = {\n            let t0 = &_10001101 * &i737;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1010101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001001;\n            t4\n        };\n        let i788 = {\n            let t0 = square_n(&i755, 5);\n            let t1 = &t0 * &_1011;\n            let t2 = square_n(&t1, 13);\n            let t3 = &t2 * &_1001001;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i806 = {\n            let t0 = &_10110011 * &i788;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11001101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1010011;\n            t4\n        };\n        let i838 = {\n            let t0 = square_n(&i806, 11);\n            let t1 = &t0 * &_1101111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10000001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i860 = {\n            let t0 = &_10111011 * &i838;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_11100111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11101011;\n            t4\n        };\n        let i884 = {\n            let t0 = square_n(&i860, 2);\n            let t1 = &t0 * &_11;\n            let t2 = square_n(&t1, 13);\n            let t3 = &t2 * &_1010101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i912 = {\n            let t0 = &_101101 * &i884;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_10101011;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_111011;\n            t4\n        };\n        let i937 = {\n            let t0 = square_n(&i912, 7);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i962 = {\n            let t0 = &_10011 * &i937;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_100001;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_101011;\n            t4\n        };\n        let i993 = {\n            let t0 = square_n(&i962, 10);\n            let t1 = &t0 * &_11100011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10111011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1013 = {\n            let t0 = &_11001111 * &i993;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10101101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1001111;\n            t4\n        };\n        let i1041 = {\n            let t0 = square_n(&i1013, 10);\n            let t1 = &t0 * &_11110011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10001001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1060 = {\n            let t0 = &_10011101 * &i1041;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10001001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1101011;\n            t4\n        };\n        let i1092 = {\n            let t0 = square_n(&i1060, 7);\n            let t1 = &t0 * &_111011;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1000101;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i1116 = {\n            let t0 = &_10011011 * &i1092;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_111001;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10111011;\n            t4\n        };\n        let i1151 = {\n            let t0 = square_n(&i1116, 11);\n            let t1 = &t0 * &_10111011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11011011;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i1173 = {\n            let t0 = &_10011111 * &i1151;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_11100111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1000111;\n            t4\n        };\n        let i1204 = {\n            let t0 = square_n(&i1173, 9);\n            let t1 = &t0 * &_10001111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11110001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1223 = {\n            let t0 = &_10001001 * &i1204;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10000011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10001001;\n            t4\n        };\n        let i1250 = {\n            let t0 = square_n(&i1223, 6);\n            let t1 = &t0 * &_100111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_10011011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1273 = {\n            let t0 = &_11101001 * &i1250;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1110111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_100011;\n            t4\n        };\n        let i1304 = {\n            let t0 = square_n(&i1273, 11);\n            let t1 = &t0 * &_1100001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_11110111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1324 = {\n            let t0 = &_1011011 * &i1304;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11100001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i1352 = {\n            let t0 = square_n(&i1324, 9);\n            let t1 = &t0 * &_11010001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11000111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1378 = {\n            let t0 = &_10010101 * &i1352;\n            let t1 = square_n(&t0, 14);\n            let t2 = &t1 * &_11010001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1001101;\n            t4\n        };\n        let i1409 = {\n            let t0 = square_n(&i1378, 8);\n            let t1 = &t0 * &_1010001;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1011011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1430 = {\n            let t0 = &_1101111 * &i1409;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_111101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1010011;\n            t4\n        };\n        let i1460 = {\n            let t0 = square_n(&i1430, 12);\n            let t1 = &t0 * &_10101101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10011011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1485 = {\n            let t0 = &_10100001 * &i1460;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10001111;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_1111101;\n            t4\n        };\n        let i1511 = {\n            let t0 = square_n(&i1485, 7);\n            let t1 = &t0 * &_100011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1000111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1532 = {\n            let t0 = &_1100001 * &i1511;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1110011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11110001;\n            t4\n        };\n        let i1559 = {\n            let t0 = square_n(&i1532, 7);\n            let t1 = &t0 * &_1100111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11101101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1579 = {\n            let t0 = &_1101101 * &i1559;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_110001;\n            t4\n        };\n        let i1613 = {\n            let t0 = square_n(&i1579, 9);\n            let t1 = &t0 * &_1000011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1000011;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i1640 = {\n            let t0 = &_11001101 * &i1613;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_1110001;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_10101011;\n            t4\n        };\n        let i1666 = {\n            let t0 = square_n(&i1640, 4);\n            let t1 = &t0 * &_1011;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_10111011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1685 = {\n            let t0 = &_11011011 * &i1666;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1010101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11101101;\n            t4\n        };\n        let i1712 = {\n            let t0 = square_n(&i1685, 8);\n            let t1 = &t0 * &_11001011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1111101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1732 = {\n            let t0 = &_11100101 * &i1712;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1101011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_10101101;\n            t4\n        };\n        let i1759 = {\n            let t0 = square_n(&i1732, 8);\n            let t1 = &t0 * &_1000001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_11001011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1778 = {\n            let t0 = &_11001011 * &i1759;\n            let t1 = square_n(&t0, 3);\n            let t2 = &t1 * &_111;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_11011111;\n            t4\n        };\n        let i1809 = {\n            let t0 = square_n(&i1778, 8);\n            let t1 = &t0 * &_100011;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_11100111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1827 = {\n            let t0 = &_10001111 * &i1809;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_110101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1111111;\n            t4\n        };\n        let i1854 = {\n            let t0 = square_n(&i1827, 10);\n            let t1 = &t0 * &_10111101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10001101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1877 = {\n            let t0 = &_1101011 * &i1854;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11101101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_10001111;\n            t4\n        };\n        let i1900 = {\n            let t0 = square_n(&i1877, 9);\n            let t1 = &t0 * &_11110101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11000111;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        let i1922 = {\n            let t0 = &_1111 * &i1900;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_10110111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_10001;\n            t4\n        };\n        let i1945 = {\n            let t0 = square_n(&i1922, 12);\n            let t1 = &t0 * &_11101001;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_111101;\n            let t4 = square_n(&t3, 3);\n            t4\n        };\n        let i1970 = {\n            let t0 = &base * &i1945;\n            let t1 = square_n(&t0, 14);\n            let t2 = &t1 * &_1101011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_111011;\n            t4\n        };\n        let i1997 = {\n            let t0 = square_n(&i1970, 11);\n            let t1 = &t0 * &_11011001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1100001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2018 = {\n            let t0 = &_110001 * &i1997;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11000111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11110111;\n            t4\n        };\n        let i2044 = {\n            let t0 = square_n(&i2018, 6);\n            let t1 = &t0 * &_11011;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_10110011;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i2067 = {\n            let t0 = &_11111 * &i2044;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1101101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_10110011;\n            t4\n        };\n        let i2093 = {\n            let t0 = square_n(&i2067, 8);\n            let t1 = &t0 * &_11010001;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i2112 = {\n            let t0 = &_10001001 * &i2093;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_11001;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11011111;\n            t4\n        };\n        let i2138 = {\n            let t0 = square_n(&i2112, 8);\n            let t1 = &t0 * &_11001001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11111001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2160 = {\n            let t0 = &_10101111 * &i2138;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_10111001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001001;\n            t4\n        };\n        let i2189 = {\n            let t0 = square_n(&i2160, 10);\n            let t1 = &t0 * &_11100111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10111101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2210 = {\n            let t0 = &_11101011 * &i2189;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1111001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1100001;\n            t4\n        };\n        let i2238 = {\n            let t0 = square_n(&i2210, 9);\n            let t1 = &t0 * &_11010111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10100011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2258 = {\n            let t0 = &_1111101 * &i2238;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11000011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001001;\n            t4\n        };\n        let i2284 = {\n            let t0 = square_n(&i2258, 9);\n            let t1 = &t0 * &_1000001;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_11001001;\n            let t4 = square_n(&t3, 3);\n            t4\n        };\n        let i2312 = {\n            let t0 = &_111 * &i2284;\n            let t1 = square_n(&t0, 18);\n            let t2 = &t1 * &_10011001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1010111;\n            t4\n        };\n        let i2340 = {\n            let t0 = square_n(&i2312, 9);\n            let t1 = &t0 * &_11100001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11110101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2359 = {\n            let t0 = &_10011011 * &i2340;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10000011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001101;\n            t4\n        };\n        let i2387 = {\n            let t0 = square_n(&i2359, 8);\n            let t1 = &t0 * &_100111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1100001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2409 = {\n            let t0 = &_10100011 * &i2387;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1000011;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10001;\n            t4\n        };\n        let i2451 = {\n            let t0 = square_n(&i2409, 18);\n            let t1 = &t0 * &_1111001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_111001;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i2469 = {\n            let t0 = &_11101011 * &i2451;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1011101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001101;\n            t4\n        };\n        let i2491 = {\n            let t0 = square_n(&i2469, 10);\n            let t1 = &t0 * &_10000111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11001001;\n            let t4 = square_n(&t3, 2);\n            t4\n        };\n        let i2515 = {\n            let t0 = &_11 * &i2491;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1011011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1010101;\n            t4\n        };\n        let i2544 = {\n            let t0 = square_n(&i2515, 9);\n            let t1 = &t0 * &_100011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_111101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2568 = {\n            let t0 = &_10001 * &i2544;\n            let t1 = square_n(&t0, 14);\n            let t2 = &t1 * &_10010011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1001101;\n            t4\n        };\n        let i2599 = {\n            let t0 = square_n(&i2568, 3);\n            let t1 = &t0 * &base;\n            let t2 = square_n(&t1, 18);\n            let t3 = &t2 * &_110011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2618 = {\n            let t0 = &_110011 * &i2599;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10100111;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_11011;\n            t4\n        };\n        let i2648 = {\n            let t0 = square_n(&i2618, 8);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_10101111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2671 = {\n            let t0 = &_101101 * &i2648;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10101111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_11100101;\n            t4\n        };\n        let i2696 = {\n            let t0 = square_n(&i2671, 7);\n            let t1 = &t0 * &_110111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10110001;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i2716 = {\n            let t0 = &_101101 * &i2696;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_10001001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_1001;\n            t4\n        };\n        let i2749 = {\n            let t0 = square_n(&i2716, 9);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_101011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2769 = {\n            let t0 = &_100001 * &i2749;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_10001111;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i2800 = {\n            let t0 = square_n(&i2769, 12);\n            let t1 = &t0 * &_10111101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10111011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2820 = {\n            let t0 = &_101101 * &i2800;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10101001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1110011;\n            t4\n        };\n        let i2849 = {\n            let t0 = square_n(&i2820, 9);\n            let t1 = &t0 * &_10000001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_101011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i2869 = {\n            let t0 = &_10110101 * &i2849;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1110101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_10001101;\n            t4\n        };\n        let i2895 = {\n            let t0 = square_n(&i2869, 8);\n            let t1 = &t0 * &_11111001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1110101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2918 = {\n            let t0 = &_1111 * &i2895;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_1011111;\n            t4\n        };\n        let i2939 = {\n            let t0 = square_n(&i2918, 5);\n            let t1 = &t0 * &_1111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1100101;\n            let t4 = square_n(&t3, 3);\n            t4\n        };\n        let i2968 = {\n            let t0 = &_11 * &i2939;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1011011;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_10001001;\n            t4\n        };\n        let i2994 = {\n            let t0 = square_n(&i2968, 8);\n            let t1 = &t0 * &_10000111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10100001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3013 = {\n            let t0 = &_11001101 * &i2994;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1000111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1101111;\n            t4\n        };\n        let i3042 = {\n            let t0 = square_n(&i3013, 11);\n            let t1 = &t0 * &_10010001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1011001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3064 = {\n            let t0 = &_100001 * &i3042;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1101001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_11010011;\n            t4\n        };\n        let i3092 = {\n            let t0 = square_n(&i3064, 8);\n            let t1 = &t0 * &_11110011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i3114 = {\n            let t0 = &_101111 * &i3092;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_11100001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10000111;\n            t4\n        };\n        let i3140 = {\n            let t0 = square_n(&i3114, 5);\n            let t1 = &t0 * &_10111;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_10111111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3165 = {\n            let t0 = &_1110011 * &i3140;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11110111;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_10110011;\n            t4\n        };\n        let i3191 = {\n            let t0 = square_n(&i3165, 8);\n            let t1 = &t0 * &_10111111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1010011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3212 = {\n            let t0 = &_1100101 * &i3191;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10000001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_10101101;\n            t4\n        };\n        let i3239 = {\n            let t0 = square_n(&i3212, 6);\n            let t1 = &t0 * &_11011;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_10111101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3258 = {\n            let t0 = &_11100001 * &i3239;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1111001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1110111;\n            t4\n        };\n        let i3287 = {\n            let t0 = square_n(&i3258, 10);\n            let t1 = &t0 * &_11111001;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i3308 = {\n            let t0 = &_11110101 * &i3287;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_100101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11101111;\n            t4\n        };\n        let i3344 = {\n            let t0 = square_n(&i3308, 11);\n            let t1 = &t0 * &_1100111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1110001;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i3365 = {\n            let t0 = &_1100011 * &i3344;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_11110111;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_111011;\n            t4\n        };\n        let i3399 = {\n            let t0 = square_n(&i3365, 12);\n            let t1 = &t0 * &_10010001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1110101;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i3418 = {\n            let t0 = &_11100101 * &i3399;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1010111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1100111;\n            t4\n        };\n        let i3444 = {\n            let t0 = square_n(&i3418, 9);\n            let t1 = &t0 * &_11110101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1010011;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i3470 = {\n            let t0 = &_10001 * &i3444;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_101101;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_1101001;\n            t4\n        };\n        let i3497 = {\n            let t0 = square_n(&i3470, 9);\n            let t1 = &t0 * &_10100101;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_101;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i3515 = {\n            let t0 = &_1010001 * &i3497;\n            let t1 = square_n(&t0, 3);\n            let t2 = &t1 * &base;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_11011;\n            t4\n        };\n        let i3551 = {\n            let t0 = square_n(&i3515, 14);\n            let t1 = &t0 * &_11011001;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1101011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3570 = {\n            let t0 = &_1101111 * &i3551;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10110111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_110001;\n            t4\n        };\n        let i3604 = {\n            let t0 = square_n(&i3570, 10);\n            let t1 = &t0 * &_11110111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11111111;\n            let t4 = square_n(&t3, 14);\n            t4\n        };\n        let i3623 = {\n            let t0 = &_10101001 * &i3604;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11010001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1011011;\n            t4\n        };\n        let i3650 = {\n            let t0 = square_n(&i3623, 9);\n            let t1 = &t0 * &_10100111;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_1111;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i3676 = {\n            let t0 = &_100101 * &i3650;\n            let t1 = square_n(&t0, 15);\n            let t2 = &t1 * &_10011111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11001011;\n            t4\n        };\n        let i3706 = {\n            let t0 = square_n(&i3676, 9);\n            let t1 = &t0 * &_11000101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11101111;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i3726 = {\n            let t0 = &_11101101 * &i3706;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_100101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10001011;\n            t4\n        };\n        let i3753 = {\n            let t0 = square_n(&i3726, 7);\n            let t1 = &t0 * &_1010001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1011001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3771 = {\n            let t0 = &_10001001 * &i3753;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11101011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1000101;\n            t4\n        };\n        let i3804 = {\n            let t0 = square_n(&i3771, 11);\n            let t1 = &t0 * &_1010011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1001111;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i3825 = {\n            let t0 = &_1101111 * &i3804;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11111101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1100111;\n            t4\n        };\n        let i3852 = {\n            let t0 = square_n(&i3825, 8);\n            let t1 = &t0 * &_1000001;\n            let t2 = square_n(&t1, 3);\n            let t3 = &t2 * &_11;\n            let t4 = square_n(&t3, 14);\n            t4\n        };\n        let i3867 = {\n            let t0 = &_10101101 * &i3852;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10011001;\n            let t3 = square_n(&t2, 4);\n            let t4 = &t3 * &_1011;\n            t4\n        };\n        let i3895 = {\n            let t0 = square_n(&i3867, 14);\n            let t1 = &t0 * &_11110011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10101001;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        let i3919 = {\n            let t0 = &_1101 * &i3895;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_110111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_11011111;\n            t4\n        };\n        let i3946 = {\n            let t0 = square_n(&i3919, 9);\n            let t1 = &t0 * &_10010011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_10101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i3967 = {\n            let t0 = &_1101001 * &i3946;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_10011011;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_110111;\n            t4\n        };\n        let i3998 = {\n            let t0 = square_n(&i3967, 10);\n            let t1 = &t0 * &_11000111;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_11011;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i4017 = {\n            let t0 = &_11010111 * &i3998;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1001001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11100011;\n            t4\n        };\n        let i4047 = {\n            let t0 = square_n(&i4017, 8);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_11111011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4063 = {\n            let t0 = &_10111111 * &i4047;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10100011;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_1101;\n            t4\n        };\n        let i4093 = {\n            let t0 = square_n(&i4063, 11);\n            let t1 = &t0 * &_1110001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10111101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i4113 = {\n            let t0 = &_10111011 * &i4093;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10001101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10100001;\n            t4\n        };\n        let i4143 = {\n            let t0 = square_n(&i4113, 9);\n            let t1 = &t0 * &_11111001;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_10111111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i4168 = {\n            let t0 = &_11111001 * &i4143;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_111;\n            let t3 = square_n(&t2, 17);\n            let t4 = &t3 * &_10001001;\n            t4\n        };\n        let i4191 = {\n            let t0 = square_n(&i4168, 4);\n            let t1 = &t0 * &_1001;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1111001;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i4217 = {\n            let t0 = &_1001 * &i4191;\n            let t1 = square_n(&t0, 14);\n            let t2 = &t1 * &_10111101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11111111;\n            t4\n        };\n        let i4245 = {\n            let t0 = square_n(&i4217, 8);\n            let t1 = &t0 * &_10101011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10101101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i4267 = {\n            let t0 = &_101111 * &i4245;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_110011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_101101;\n            t4\n        };\n        let i4294 = {\n            let t0 = square_n(&i4267, 9);\n            let t1 = &t0 * &_1100001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10111001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i4317 = {\n            let t0 = &_100001 * &i4294;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_11110001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10101101;\n            t4\n        };\n        let i4345 = {\n            let t0 = square_n(&i4317, 11);\n            let t1 = &t0 * &_10111011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1111011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i4366 = {\n            let t0 = &_1101101 * &i4345;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10100101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1110111;\n            t4\n        };\n        let i4396 = {\n            let t0 = square_n(&i4366, 11);\n            let t1 = &t0 * &_11100101;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_111;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i4418 = {\n            let t0 = &_1100011 * &i4396;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_111111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_10010011;\n            t4\n        };\n        let i4446 = {\n            let t0 = square_n(&i4418, 9);\n            let t1 = &t0 * &_11111011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1111111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4462 = {\n            let t0 = &_10010101 * &i4446;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10010101;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_10011;\n            t4\n        };\n        let i4495 = {\n            let t0 = square_n(&i4462, 11);\n            let t1 = &t0 * &_1101101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1000111;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i4514 = {\n            let t0 = &_11000001 * &i4495;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1101111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1100001;\n            t4\n        };\n        let i4543 = {\n            let t0 = square_n(&i4514, 10);\n            let t1 = &t0 * &_10011101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11000001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4562 = {\n            let t0 = &_1010011 * &i4543;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_111111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i4589 = {\n            let t0 = square_n(&i4562, 10);\n            let t1 = &t0 * &_11010001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_11110111;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i4609 = {\n            let t0 = &_111001 * &i4589;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_1001001;\n            t4\n        };\n        let i4637 = {\n            let t0 = square_n(&i4609, 8);\n            let t1 = &t0 * &_1010001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_11101011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4658 = {\n            let t0 = &_10100101 * &i4637;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11100101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10001;\n            t4\n        };\n        let i4686 = {\n            let t0 = square_n(&i4658, 11);\n            let t1 = &t0 * &_10011011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10001011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i4706 = {\n            let t0 = &_1111111 * &i4686;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_100011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1101011;\n            t4\n        };\n        let i4732 = {\n            let t0 = square_n(&i4706, 9);\n            let t1 = &t0 * &_10010001;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i4760 = {\n            let t0 = &_10001 * &i4732;\n            let t1 = square_n(&t0, 17);\n            let t2 = &t1 * &_10000101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11001111;\n            t4\n        };\n        let i4787 = {\n            let t0 = square_n(&i4760, 7);\n            let t1 = &t0 * &_1000111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_11011011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4806 = {\n            let t0 = &_10011101 * &i4787;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_101101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_111001;\n            t4\n        };\n        let i4834 = {\n            let t0 = square_n(&i4806, 10);\n            let t1 = &t0 * &_11111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_110011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i4863 = {\n            let t0 = &_10101 * &i4834;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1111;\n            let t3 = square_n(&t2, 15);\n            let t4 = &t3 * &_11111011;\n            t4\n        };\n        let i4889 = {\n            let t0 = square_n(&i4863, 7);\n            let t1 = &t0 * &_1001101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_11001;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i4914 = {\n            let t0 = &_11110111 * &i4889;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1111111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_10000011;\n            t4\n        };\n        let i4942 = {\n            let t0 = square_n(&i4914, 10);\n            let t1 = &t0 * &_11100011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11010011;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i4959 = {\n            let t0 = &_111011 * &i4942;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11111111;\n            let t3 = square_n(&t2, 4);\n            let t4 = &t3 * &_1001;\n            t4\n        };\n        let i4991 = {\n            let t0 = square_n(&i4959, 12);\n            let t1 = &t0 * &_10111111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i5010 = {\n            let t0 = &_11001111 * &i4991;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_111111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_11011;\n            t4\n        };\n        let i5033 = {\n            let t0 = square_n(&i5010, 11);\n            let t1 = &t0 * &_11110001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1111111;\n            let t4 = square_n(&t3, 3);\n            t4\n        };\n        let i5060 = {\n            let t0 = &_11 * &i5033;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1010001;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11101111;\n            t4\n        };\n        let i5088 = {\n            let t0 = square_n(&i5060, 6);\n            let t1 = &t0 * &_101111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_11010111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i5109 = {\n            let t0 = &_10101101 * &i5088;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_11011001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1011101;\n            t4\n        };\n        let i5134 = {\n            let t0 = square_n(&i5109, 9);\n            let t1 = &t0 * &_10101011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10010111;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i5161 = {\n            let t0 = &_100101 * &i5134;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_11001101;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_10000011;\n            t4\n        };\n        let i5192 = {\n            let t0 = square_n(&i5161, 7);\n            let t1 = &t0 * &_1101011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10110011;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i5209 = {\n            let t0 = &_1100001 * &i5192;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1001001;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_1011;\n            t4\n        };\n        let i5243 = {\n            let t0 = square_n(&i5209, 12);\n            let t1 = &t0 * &_11100101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110111;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i5264 = {\n            let t0 = &_11111111 * &i5243;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11110001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11101101;\n            t4\n        };\n        let i5291 = {\n            let t0 = square_n(&i5264, 9);\n            let t1 = &t0 * &_11100111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1100101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i5314 = {\n            let t0 = &_1101011 * &i5291;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 16);\n            let t4 = &t3 * &_11001011;\n            t4\n        };\n        let i5341 = {\n            let t0 = square_n(&i5314, 7);\n            let t1 = &t0 * &_1010101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10100111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i5359 = {\n            let t0 = &_10100001 * &i5341;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_1111;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1011101;\n            t4\n        };\n        let i5388 = {\n            let t0 = square_n(&i5359, 10);\n            let t1 = &t0 * &_10111101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11111101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i5406 = {\n            let t0 = &_1011011 * &i5388;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1011111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_110101;\n            t4\n        };\n        let i5435 = {\n            let t0 = square_n(&i5406, 10);\n            let t1 = &t0 * &_10110001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11010011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i5457 = {\n            let t0 = &_11011011 * &i5435;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11101101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1010011;\n            t4\n        };\n        let i5485 = {\n            let t0 = square_n(&i5457, 3);\n            let t1 = &t0 * &_11;\n            let t2 = square_n(&t1, 13);\n            let t3 = &t2 * &_1001111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i5506 = {\n            let t0 = &_1010101 * &i5485;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10100011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11110111;\n            t4\n        };\n        let i5530 = {\n            let t0 = square_n(&i5506, 8);\n            let t1 = &t0 * &_11110011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1011011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i5547 = {\n            let t0 = &_111011 * &i5530;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11010111;\n            let t3 = square_n(&t2, 4);\n            let t4 = &t3 * &_1011;\n            t4\n        };\n        let i5576 = {\n            let t0 = square_n(&i5547, 12);\n            let t1 = &t0 * &_1000101;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_11110111;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        let i5600 = {\n            let t0 = &_1001 * &i5576;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_11001111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11001011;\n            t4\n        };\n        let i5631 = {\n            let t0 = square_n(&i5600, 9);\n            let t1 = &t0 * &_10010111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10101;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i5650 = {\n            let t0 = &_10011111 * &i5631;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11011101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1101011;\n            t4\n        };\n        let i5676 = {\n            let t0 = square_n(&i5650, 7);\n            let t1 = &t0 * &_100011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10111001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i5697 = {\n            let t0 = &_1001011 * &i5676;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_110011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_11100011;\n            t4\n        };\n        let i5725 = {\n            let t0 = square_n(&i5697, 8);\n            let t1 = &t0 * &_11001001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10011011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i5744 = {\n            let t0 = &_10100111 * &i5725;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11001011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10011001;\n            t4\n        };\n        let i5773 = {\n            let t0 = square_n(&i5744, 7);\n            let t1 = &t0 * &_11111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_11110111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i5793 = {\n            let t0 = &_11100101 * &i5773;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11010111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10011001;\n            t4\n        };\n        let i5821 = {\n            let t0 = square_n(&i5793, 6);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_11101011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i5844 = {\n            let t0 = &_1111001 * &i5821;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10110111;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10100001;\n            t4\n        };\n        let i5867 = {\n            let t0 = square_n(&i5844, 9);\n            let t1 = &t0 * &_10111001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11001001;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        let i5890 = {\n            let t0 = &_1011 * &i5867;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_11110101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1001001;\n            t4\n        };\n        let i5917 = {\n            let t0 = square_n(&i5890, 8);\n            let t1 = &t0 * &_1011101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_10111;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i5939 = {\n            let t0 = &_10010101 * &i5917;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1011101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_11110101;\n            t4\n        };\n        let i5969 = {\n            let t0 = square_n(&i5939, 5);\n            let t1 = &t0 * &_1001;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1110111;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i5985 = {\n            let t0 = &_10110011 * &i5969;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10110101;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_10111;\n            t4\n        };\n        let i6017 = {\n            let t0 = square_n(&i5985, 12);\n            let t1 = &t0 * &_11011111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11111011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i6037 = {\n            let t0 = &_10101011 * &i6017;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11010001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_10000011;\n            t4\n        };\n        let i6066 = {\n            let t0 = square_n(&i6037, 9);\n            let t1 = &t0 * &_11011111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1010111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i6088 = {\n            let t0 = &_110001 * &i6066;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_111;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_11011111;\n            t4\n        };\n        let i6112 = {\n            let t0 = square_n(&i6088, 6);\n            let t1 = &t0 * &_101101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1101101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i6137 = {\n            let t0 = &_110111 * &i6112;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10001;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_11100011;\n            t4\n        };\n        let i6161 = {\n            let t0 = square_n(&i6137, 8);\n            let t1 = &t0 * &_10010001;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_11001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i6182 = {\n            let t0 = &_101101 * &i6161;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1011101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1110101;\n            t4\n        };\n        let i6208 = {\n            let t0 = square_n(&i6182, 10);\n            let t1 = &t0 * &_10101001;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_10000101;\n            let t4 = square_n(&t3, 3);\n            t4\n        };\n        let i6235 = {\n            let t0 = &_111 * &i6208;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i6263 = {\n            let t0 = square_n(&i6235, 10);\n            let t1 = &t0 * &_1100001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10010011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i6283 = {\n            let t0 = &_100111 * &i6263;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10111111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1111101;\n            t4\n        };\n        let i6314 = {\n            let t0 = square_n(&i6283, 12);\n            let t1 = &t0 * &_11101111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1111101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let result = {\n            let t0 = &_10111 * &i6314;\n            t0\n        };\n        result\n    }\n}\n\npub mod bls12_381 {\n    use super::square_n;\n    use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree12ExtensionField;\n    use lambdaworks_math::field::element::FieldElement;\n\n    /// Generated from tools/addchain/bls12_381_h3_s.acc\n    pub fn pow_h3_s(\n        base: &FieldElement<Degree12ExtensionField>,\n    ) -> FieldElement<Degree12ExtensionField> {\n        let base = base.clone();\n        let _10 = {\n            let t0 = square_n(&base, 1);\n            t0\n        };\n        let _11 = {\n            let t0 = &base * &_10;\n            t0\n        };\n        let _101 = {\n            let t0 = &_10 * &_11;\n            t0\n        };\n        let _111 = {\n            let t0 = &_10 * &_101;\n            t0\n        };\n        let _1001 = {\n            let t0 = &_10 * &_111;\n            t0\n        };\n        let _1011 = {\n            let t0 = &_10 * &_1001;\n            t0\n        };\n        let _1101 = {\n            let t0 = &_10 * &_1011;\n            t0\n        };\n        let _1111 = {\n            let t0 = &_10 * &_1101;\n            t0\n        };\n        let _10001 = {\n            let t0 = &_10 * &_1111;\n            t0\n        };\n        let _10011 = {\n            let t0 = &_10 * &_10001;\n            t0\n        };\n        let _10101 = {\n            let t0 = &_10 * &_10011;\n            t0\n        };\n        let _10111 = {\n            let t0 = &_10 * &_10101;\n            t0\n        };\n        let _11001 = {\n            let t0 = &_10 * &_10111;\n            t0\n        };\n        let _11011 = {\n            let t0 = &_10 * &_11001;\n            t0\n        };\n        let _11101 = {\n            let t0 = &_10 * &_11011;\n            t0\n        };\n        let _11111 = {\n            let t0 = &_10 * &_11101;\n            t0\n        };\n        let _100001 = {\n            let t0 = &_10 * &_11111;\n            t0\n        };\n        let _100011 = {\n            let t0 = &_10 * &_100001;\n            t0\n        };\n        let _100101 = {\n            let t0 = &_10 * &_100011;\n            t0\n        };\n        let _100110 = {\n            let t0 = &base * &_100101;\n            t0\n        };\n        let _100111 = {\n            let t0 = &base * &_100110;\n            t0\n        };\n        let _101001 = {\n            let t0 = &_10 * &_100111;\n            t0\n        };\n        let _101011 = {\n            let t0 = &_10 * &_101001;\n            t0\n        };\n        let _101101 = {\n            let t0 = &_10 * &_101011;\n            t0\n        };\n        let _110001 = {\n            let t0 = &_1011 * &_100110;\n            t0\n        };\n        let _110011 = {\n            let t0 = &_10 * &_110001;\n            t0\n        };\n        let _110101 = {\n            let t0 = &_10 * &_110011;\n            t0\n        };\n        let _110111 = {\n            let t0 = &_10 * &_110101;\n            t0\n        };\n        let _111001 = {\n            let t0 = &_10 * &_110111;\n            t0\n        };\n        let _111011 = {\n            let t0 = &_10 * &_111001;\n            t0\n        };\n        let _111101 = {\n            let t0 = &_10 * &_111011;\n            t0\n        };\n        let _111111 = {\n            let t0 = &_10 * &_111101;\n            t0\n        };\n        let _1000001 = {\n            let t0 = &_10 * &_111111;\n            t0\n        };\n        let _1000011 = {\n            let t0 = &_10 * &_1000001;\n            t0\n        };\n        let _1000101 = {\n            let t0 = &_10 * &_1000011;\n            t0\n        };\n        let _1000111 = {\n            let t0 = &_10 * &_1000101;\n            t0\n        };\n        let _1001001 = {\n            let t0 = &_10 * &_1000111;\n            t0\n        };\n        let _1001011 = {\n            let t0 = &_10 * &_1001001;\n            t0\n        };\n        let _1001101 = {\n            let t0 = &_10 * &_1001011;\n            t0\n        };\n        let _1001111 = {\n            let t0 = &_10 * &_1001101;\n            t0\n        };\n        let _1010001 = {\n            let t0 = &_10 * &_1001111;\n            t0\n        };\n        let _1010011 = {\n            let t0 = &_10 * &_1010001;\n            t0\n        };\n        let _1010101 = {\n            let t0 = &_10 * &_1010011;\n            t0\n        };\n        let _1010111 = {\n            let t0 = &_10 * &_1010101;\n            t0\n        };\n        let _1011001 = {\n            let t0 = &_10 * &_1010111;\n            t0\n        };\n        let _1011011 = {\n            let t0 = &_10 * &_1011001;\n            t0\n        };\n        let _1011101 = {\n            let t0 = &_10 * &_1011011;\n            t0\n        };\n        let _1011111 = {\n            let t0 = &_10 * &_1011101;\n            t0\n        };\n        let _1100001 = {\n            let t0 = &_10 * &_1011111;\n            t0\n        };\n        let _1100011 = {\n            let t0 = &_10 * &_1100001;\n            t0\n        };\n        let _1100101 = {\n            let t0 = &_10 * &_1100011;\n            t0\n        };\n        let _1100111 = {\n            let t0 = &_10 * &_1100101;\n            t0\n        };\n        let _1101001 = {\n            let t0 = &_10 * &_1100111;\n            t0\n        };\n        let _1101011 = {\n            let t0 = &_10 * &_1101001;\n            t0\n        };\n        let _1101101 = {\n            let t0 = &_10 * &_1101011;\n            t0\n        };\n        let _1101111 = {\n            let t0 = &_10 * &_1101101;\n            t0\n        };\n        let _1110001 = {\n            let t0 = &_10 * &_1101111;\n            t0\n        };\n        let _1110011 = {\n            let t0 = &_10 * &_1110001;\n            t0\n        };\n        let _1110101 = {\n            let t0 = &_10 * &_1110011;\n            t0\n        };\n        let _1110111 = {\n            let t0 = &_10 * &_1110101;\n            t0\n        };\n        let _1111001 = {\n            let t0 = &_10 * &_1110111;\n            t0\n        };\n        let _1111011 = {\n            let t0 = &_10 * &_1111001;\n            t0\n        };\n        let _1111101 = {\n            let t0 = &_10 * &_1111011;\n            t0\n        };\n        let _1111111 = {\n            let t0 = &_10 * &_1111101;\n            t0\n        };\n        let _10000001 = {\n            let t0 = &_10 * &_1111111;\n            t0\n        };\n        let _10000011 = {\n            let t0 = &_10 * &_10000001;\n            t0\n        };\n        let _10000101 = {\n            let t0 = &_10 * &_10000011;\n            t0\n        };\n        let _10000111 = {\n            let t0 = &_10 * &_10000101;\n            t0\n        };\n        let _10001001 = {\n            let t0 = &_10 * &_10000111;\n            t0\n        };\n        let _10001011 = {\n            let t0 = &_10 * &_10001001;\n            t0\n        };\n        let _10001101 = {\n            let t0 = &_10 * &_10001011;\n            t0\n        };\n        let _10001111 = {\n            let t0 = &_10 * &_10001101;\n            t0\n        };\n        let _10010001 = {\n            let t0 = &_10 * &_10001111;\n            t0\n        };\n        let _10010011 = {\n            let t0 = &_10 * &_10010001;\n            t0\n        };\n        let _10010101 = {\n            let t0 = &_10 * &_10010011;\n            t0\n        };\n        let _10010111 = {\n            let t0 = &_10 * &_10010101;\n            t0\n        };\n        let _10011001 = {\n            let t0 = &_10 * &_10010111;\n            t0\n        };\n        let _10011011 = {\n            let t0 = &_10 * &_10011001;\n            t0\n        };\n        let _10011101 = {\n            let t0 = &_10 * &_10011011;\n            t0\n        };\n        let _10011111 = {\n            let t0 = &_10 * &_10011101;\n            t0\n        };\n        let _10100001 = {\n            let t0 = &_10 * &_10011111;\n            t0\n        };\n        let _10100011 = {\n            let t0 = &_10 * &_10100001;\n            t0\n        };\n        let _10100101 = {\n            let t0 = &_10 * &_10100011;\n            t0\n        };\n        let _10100111 = {\n            let t0 = &_10 * &_10100101;\n            t0\n        };\n        let _10101001 = {\n            let t0 = &_10 * &_10100111;\n            t0\n        };\n        let _10101011 = {\n            let t0 = &_10 * &_10101001;\n            t0\n        };\n        let _10101101 = {\n            let t0 = &_10 * &_10101011;\n            t0\n        };\n        let _10101111 = {\n            let t0 = &_10 * &_10101101;\n            t0\n        };\n        let _10110001 = {\n            let t0 = &_10 * &_10101111;\n            t0\n        };\n        let _10110011 = {\n            let t0 = &_10 * &_10110001;\n            t0\n        };\n        let _10110101 = {\n            let t0 = &_10 * &_10110011;\n            t0\n        };\n        let _10110111 = {\n            let t0 = &_10 * &_10110101;\n            t0\n        };\n        let _10111001 = {\n            let t0 = &_10 * &_10110111;\n            t0\n        };\n        let _10111011 = {\n            let t0 = &_10 * &_10111001;\n            t0\n        };\n        let _10111101 = {\n            let t0 = &_10 * &_10111011;\n            t0\n        };\n        let _10111111 = {\n            let t0 = &_10 * &_10111101;\n            t0\n        };\n        let _11000001 = {\n            let t0 = &_10 * &_10111111;\n            t0\n        };\n        let _11000011 = {\n            let t0 = &_10 * &_11000001;\n            t0\n        };\n        let _11000101 = {\n            let t0 = &_10 * &_11000011;\n            t0\n        };\n        let _11000111 = {\n            let t0 = &_10 * &_11000101;\n            t0\n        };\n        let _11001001 = {\n            let t0 = &_10 * &_11000111;\n            t0\n        };\n        let _11001011 = {\n            let t0 = &_10 * &_11001001;\n            t0\n        };\n        let _11001101 = {\n            let t0 = &_10 * &_11001011;\n            t0\n        };\n        let _11001111 = {\n            let t0 = &_10 * &_11001101;\n            t0\n        };\n        let _11010001 = {\n            let t0 = &_10 * &_11001111;\n            t0\n        };\n        let _11010011 = {\n            let t0 = &_10 * &_11010001;\n            t0\n        };\n        let _11010101 = {\n            let t0 = &_10 * &_11010011;\n            t0\n        };\n        let _11010111 = {\n            let t0 = &_10 * &_11010101;\n            t0\n        };\n        let _11011001 = {\n            let t0 = &_10 * &_11010111;\n            t0\n        };\n        let _11011011 = {\n            let t0 = &_10 * &_11011001;\n            t0\n        };\n        let _11011101 = {\n            let t0 = &_10 * &_11011011;\n            t0\n        };\n        let _11011111 = {\n            let t0 = &_10 * &_11011101;\n            t0\n        };\n        let _11100001 = {\n            let t0 = &_10 * &_11011111;\n            t0\n        };\n        let _11100011 = {\n            let t0 = &_10 * &_11100001;\n            t0\n        };\n        let _11100101 = {\n            let t0 = &_10 * &_11100011;\n            t0\n        };\n        let _11100111 = {\n            let t0 = &_10 * &_11100101;\n            t0\n        };\n        let _11101001 = {\n            let t0 = &_10 * &_11100111;\n            t0\n        };\n        let _11101011 = {\n            let t0 = &_10 * &_11101001;\n            t0\n        };\n        let _11101101 = {\n            let t0 = &_10 * &_11101011;\n            t0\n        };\n        let _11101111 = {\n            let t0 = &_10 * &_11101101;\n            t0\n        };\n        let _11110101 = {\n            let t0 = &_100110 * &_11001111;\n            t0\n        };\n        let _11110111 = {\n            let t0 = &_10 * &_11110101;\n            t0\n        };\n        let _11111001 = {\n            let t0 = &_10 * &_11110111;\n            t0\n        };\n        let _11111101 = {\n            let t0 = &_100110 * &_11010111;\n            t0\n        };\n        let _11111111 = {\n            let t0 = &_10 * &_11111101;\n            t0\n        };\n        let i145 = {\n            let t0 = &_110001 * &_11111111;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_11001101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_10100111;\n            t4\n        };\n        let i172 = {\n            let t0 = square_n(&i145, 9);\n            let t1 = &t0 * &_1001011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1011001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i199 = {\n            let t0 = &_100001 * &i172;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10111;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &_1111101;\n            t4\n        };\n        let i228 = {\n            let t0 = square_n(&i199, 11);\n            let t1 = &t0 * &_1000111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_11111101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i248 = {\n            let t0 = &_1101011 * &i228;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11011001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1011111;\n            t4\n        };\n        let i274 = {\n            let t0 = square_n(&i248, 8);\n            let t1 = &t0 * &_1101011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1001111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i295 = {\n            let t0 = &_101001 * &i274;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10100011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11101011;\n            t4\n        };\n        let i321 = {\n            let t0 = square_n(&i295, 9);\n            let t1 = &t0 * &_11011011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_111111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i342 = {\n            let t0 = &_100111 * &i321;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1011001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11000101;\n            t4\n        };\n        let i368 = {\n            let t0 = square_n(&i342, 7);\n            let t1 = &t0 * &_1101111;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10010011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i388 = {\n            let t0 = &_10001001 * &i368;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11101001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1010011;\n            t4\n        };\n        let i417 = {\n            let t0 = square_n(&i388, 3);\n            let t1 = &t0 * &_11;\n            let t2 = square_n(&t1, 15);\n            let t3 = &t2 * &_1110101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i437 = {\n            let t0 = &_10110111 * &i417;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_10001;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_10010111;\n            t4\n        };\n        let i463 = {\n            let t0 = square_n(&i437, 9);\n            let t1 = &t0 * &_10101001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10100111;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i486 = {\n            let t0 = &_10101 * &i463;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10101011;\n            t4\n        };\n        let i513 = {\n            let t0 = square_n(&i486, 4);\n            let t1 = &t0 * &_101;\n            let t2 = square_n(&t1, 13);\n            let t3 = &t2 * &_10001101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i530 = {\n            let t0 = &_10100011 * &i513;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11011101;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_10011;\n            t4\n        };\n        let i560 = {\n            let t0 = square_n(&i530, 11);\n            let t1 = &t0 * &_1101111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_101001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i582 = {\n            let t0 = &_1001101 * &i560;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_10111001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11000011;\n            t4\n        };\n        let i606 = {\n            let t0 = square_n(&i582, 9);\n            let t1 = &t0 * &_11100111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11010011;\n            let t4 = square_n(&t3, 3);\n            t4\n        };\n        let i630 = {\n            let t0 = &_101 * &i606;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_10110011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11011101;\n            t4\n        };\n        let i661 = {\n            let t0 = square_n(&i630, 8);\n            let t1 = &t0 * &_1000011;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_10101111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i679 = {\n            let t0 = &_10010001 * &i661;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10000001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_100101;\n            t4\n        };\n        let i708 = {\n            let t0 = square_n(&i679, 8);\n            let t1 = &t0 * &_100101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1100111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i727 = {\n            let t0 = &_1100001 * &i708;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10110101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_110011;\n            t4\n        };\n        let i755 = {\n            let t0 = square_n(&i727, 8);\n            let t1 = &t0 * &_101101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1101101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i776 = {\n            let t0 = &_1110111 * &i755;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1101011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11001011;\n            t4\n        };\n        let i806 = {\n            let t0 = square_n(&i776, 4);\n            let t1 = &t0 * &_1001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 15);\n            t4\n        };\n        let i826 = {\n            let t0 = &_11000011 * &i806;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10001001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1011101;\n            t4\n        };\n        let i855 = {\n            let t0 = square_n(&i826, 9);\n            let t1 = &t0 * &_10011111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1100111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i876 = {\n            let t0 = &_11100101 * &i855;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10101111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_10001111;\n            t4\n        };\n        let i904 = {\n            let t0 = square_n(&i876, 7);\n            let t1 = &t0 * &_110001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1110111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i925 = {\n            let t0 = &_1100011 * &i904;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1010101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11110111;\n            t4\n        };\n        let i955 = {\n            let t0 = square_n(&i925, 10);\n            let t1 = &t0 * &_10100011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11110101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i978 = {\n            let t0 = &_11101111 * &i955;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_11100001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10000001;\n            t4\n        };\n        let i1010 = {\n            let t0 = square_n(&i978, 5);\n            let t1 = &t0 * &_10101;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1111101;\n            let t4 = square_n(&t3, 14);\n            t4\n        };\n        let i1029 = {\n            let t0 = &_11101001 * &i1010;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1110011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11000101;\n            t4\n        };\n        let i1057 = {\n            let t0 = square_n(&i1029, 11);\n            let t1 = &t0 * &_1001011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10101011;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i1081 = {\n            let t0 = &_111011 * &i1057;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_111101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_10011101;\n            t4\n        };\n        let i1108 = {\n            let t0 = square_n(&i1081, 8);\n            let t1 = &t0 * &_10000011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11010111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1129 = {\n            let t0 = &_11010001 * &i1108;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11011001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_10101001;\n            t4\n        };\n        let i1157 = {\n            let t0 = square_n(&i1129, 5);\n            let t1 = &t0 * &_10011;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_11010011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1176 = {\n            let t0 = &_10101101 * &i1157;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11110101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10000101;\n            t4\n        };\n        let i1201 = {\n            let t0 = square_n(&i1176, 7);\n            let t1 = &t0 * &_1111011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1110001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1222 = {\n            let t0 = &_1111011 * &i1201;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11010001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11111101;\n            t4\n        };\n        let i1250 = {\n            let t0 = square_n(&i1222, 7);\n            let t1 = &t0 * &_1101101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1111011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i1270 = {\n            let t0 = &_11101111 * &i1250;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11101101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11111001;\n            t4\n        };\n        let i1299 = {\n            let t0 = square_n(&i1270, 10);\n            let t1 = &t0 * &_10000011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11110111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1322 = {\n            let t0 = &_101101 * &i1299;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_100101;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1111101;\n            t4\n        };\n        let i1354 = {\n            let t0 = square_n(&i1322, 10);\n            let t1 = &t0 * &_1001011;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_11011001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1376 = {\n            let t0 = &_100101 * &i1354;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10001011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11101111;\n            t4\n        };\n        let i1399 = {\n            let t0 = square_n(&i1376, 8);\n            let t1 = &t0 * &_1010111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1010111;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i1423 = {\n            let t0 = &_111 * &i1399;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_1001001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_10000111;\n            t4\n        };\n        let i1449 = {\n            let t0 = square_n(&i1423, 7);\n            let t1 = &t0 * &_1111111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_11011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1470 = {\n            let t0 = &_1111011 * &i1449;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10011101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11011001;\n            t4\n        };\n        let i1499 = {\n            let t0 = square_n(&i1470, 6);\n            let t1 = &t0 * &_11001;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_10111101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1522 = {\n            let t0 = &_1111101 * &i1499;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_11010001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11010011;\n            t4\n        };\n        let i1548 = {\n            let t0 = square_n(&i1522, 8);\n            let t1 = &t0 * &_11000011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10010011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1563 = {\n            let t0 = &_10011001 * &i1548;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1110111;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_1011;\n            t4\n        };\n        let i1599 = {\n            let t0 = square_n(&i1563, 18);\n            let t1 = &t0 * &_10001101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10101101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1618 = {\n            let t0 = &_1100101 * &i1599;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1001001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1111111;\n            t4\n        };\n        let i1651 = {\n            let t0 = square_n(&i1618, 10);\n            let t1 = &t0 * &_10010101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_100011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i1672 = {\n            let t0 = &_11100111 * &i1651;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1101111;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1000001;\n            t4\n        };\n        let i1701 = {\n            let t0 = square_n(&i1672, 9);\n            let t1 = &t0 * &_10100011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10010111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1720 = {\n            let t0 = &_11101001 * &i1701;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1111101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_110011;\n            t4\n        };\n        let i1752 = {\n            let t0 = square_n(&i1720, 8);\n            let t1 = &t0 * &_110101;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1010011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1775 = {\n            let t0 = &_1101001 * &i1752;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1000001;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11001111;\n            t4\n        };\n        let i1801 = {\n            let t0 = square_n(&i1775, 6);\n            let t1 = &t0 * &_110001;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11010011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1825 = {\n            let t0 = &_11001011 * &i1801;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_11101001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10010111;\n            t4\n        };\n        let i1852 = {\n            let t0 = square_n(&i1825, 7);\n            let t1 = &t0 * &_1111011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11001001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1874 = {\n            let t0 = &_11111101 * &i1852;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1011011;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1010111;\n            t4\n        };\n        let i1906 = {\n            let t0 = square_n(&i1874, 11);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_110001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1925 = {\n            let t0 = &_10111001 * &i1906;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10011001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10110101;\n            t4\n        };\n        let i1954 = {\n            let t0 = square_n(&i1925, 11);\n            let t1 = &t0 * &_10100011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1010101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1971 = {\n            let t0 = &_11001011 * &i1954;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10110111;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_10001;\n            t4\n        };\n        let i2003 = {\n            let t0 = square_n(&i1971, 11);\n            let t1 = &t0 * &_1101011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_100011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2023 = {\n            let t0 = &_11110111 * &i2003;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1011101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_11011;\n            t4\n        };\n        let i2052 = {\n            let t0 = square_n(&i2023, 10);\n            let t1 = &t0 * &_1001001;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_11001;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i2076 = {\n            let t0 = &_10011011 * &i2052;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1100111;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_11001001;\n            t4\n        };\n        let i2102 = {\n            let t0 = square_n(&i2076, 8);\n            let t1 = &t0 * &_11110111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11100101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2127 = {\n            let t0 = &_10111011 * &i2102;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_111001;\n            let t3 = square_n(&t2, 15);\n            let t4 = &t3 * &_11101011;\n            t4\n        };\n        let i2153 = {\n            let t0 = square_n(&i2127, 9);\n            let t1 = &t0 * &_11010011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_10001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2178 = {\n            let t0 = &_110111 * &i2153;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11101001;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_11100011;\n            t4\n        };\n        let i2205 = {\n            let t0 = square_n(&i2178, 7);\n            let t1 = &t0 * &_1010011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10101111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2237 = {\n            let t0 = &_10001 * &i2205;\n            let t1 = square_n(&t0, 20);\n            let t2 = &t1 * &_11111111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11111001;\n            t4\n        };\n        let i2267 = {\n            let t0 = square_n(&i2237, 8);\n            let t1 = &t0 * &_10011111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_101001;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i2287 = {\n            let t0 = &_10110011 * &i2267;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1011101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_10111111;\n            t4\n        };\n        let i2312 = {\n            let t0 = square_n(&i2287, 8);\n            let t1 = &t0 * &_11111101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11011001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2333 = {\n            let t0 = &_1011111 * &i2312;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_100011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_10011101;\n            t4\n        };\n        let i2357 = {\n            let t0 = square_n(&i2333, 8);\n            let t1 = &t0 * &_11101001;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10101001;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        let i2381 = {\n            let t0 = &_111 * &i2357;\n            let t1 = square_n(&t0, 14);\n            let t2 = &t1 * &_10010101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_101011;\n            t4\n        };\n        let i2407 = {\n            let t0 = square_n(&i2381, 9);\n            let t1 = &t0 * &_1111111;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_1011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2428 = {\n            let t0 = &_101101 * &i2407;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_11101;\n            t4\n        };\n        let i2458 = {\n            let t0 = square_n(&i2428, 11);\n            let t1 = &t0 * &_10101111;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_11;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i2482 = {\n            let t0 = &_110111 * &i2458;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10110011;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1100111;\n            t4\n        };\n        let i2514 = {\n            let t0 = square_n(&i2482, 10);\n            let t1 = &t0 * &_1101001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_101011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i2536 = {\n            let t0 = &_1101001 * &i2514;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1100011;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10011001;\n            t4\n        };\n        let i2564 = {\n            let t0 = square_n(&i2536, 4);\n            let t1 = &t0 * &_1101;\n            let t2 = square_n(&t1, 15);\n            let t3 = &t2 * &_1111011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2586 = {\n            let t0 = &_11011 * &i2564;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10111101;\n            t4\n        };\n        let i2612 = {\n            let t0 = square_n(&i2586, 6);\n            let t1 = &t0 * &_110011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_11111;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i2633 = {\n            let t0 = &_11100101 * &i2612;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_111001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_10101111;\n            t4\n        };\n        let i2661 = {\n            let t0 = square_n(&i2633, 8);\n            let t1 = &t0 * &_10000111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_110011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i2685 = {\n            let t0 = &_11100101 * &i2661;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11010111;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10000001;\n            t4\n        };\n        let i2715 = {\n            let t0 = square_n(&i2685, 6);\n            let t1 = &t0 * &_110001;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_11100001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2737 = {\n            let t0 = &_1011111 * &i2715;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11001101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1111011;\n            t4\n        };\n        let i2767 = {\n            let t0 = square_n(&i2737, 8);\n            let t1 = &t0 * &_1100011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110101;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i2789 = {\n            let t0 = &_10101111 * &i2767;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10010011;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11011001;\n            t4\n        };\n        let i2815 = {\n            let t0 = square_n(&i2789, 9);\n            let t1 = &t0 * &_1100111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10101101;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i2839 = {\n            let t0 = &_11011 * &i2815;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_101101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1001111;\n            t4\n        };\n        let i2866 = {\n            let t0 = square_n(&i2839, 9);\n            let t1 = &t0 * &_11110101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1111001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2888 = {\n            let t0 = &_10110001 * &i2866;\n            let t1 = square_n(&t0, 3);\n            let t2 = &t1 * &_101;\n            let t3 = square_n(&t2, 16);\n            let t4 = &t3 * &_10011111;\n            t4\n        };\n        let i2912 = {\n            let t0 = square_n(&i2888, 7);\n            let t1 = &t0 * &_1011101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_11001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2934 = {\n            let t0 = &_100011 * &i2912;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10111101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1001011;\n            t4\n        };\n        let i2960 = {\n            let t0 = square_n(&i2934, 6);\n            let t1 = &t0 * &_10011;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_11111001;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i2982 = {\n            let t0 = &_101001 * &i2960;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_10001101;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_111011;\n            t4\n        };\n        let i3017 = {\n            let t0 = square_n(&i2982, 11);\n            let t1 = &t0 * &_10001001;\n            let t2 = square_n(&t1, 15);\n            let t3 = &t2 * &_11111001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3042 = {\n            let t0 = &_111011 * &i3017;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_10111011;\n            t4\n        };\n        let i3071 = {\n            let t0 = square_n(&i3042, 9);\n            let t1 = &t0 * &_11001011;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_1111;\n            let t4 = square_n(&t3, 14);\n            t4\n        };\n        let i3096 = {\n            let t0 = &_10001001 * &i3071;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_10011011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_100111;\n            t4\n        };\n        let i3123 = {\n            let t0 = square_n(&i3096, 10);\n            let t1 = &t0 * &_11110101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1110111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3146 = {\n            let t0 = &_1100001 * &i3123;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11111111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1011001;\n            t4\n        };\n        let i3174 = {\n            let t0 = square_n(&i3146, 9);\n            let t1 = &t0 * &_11001101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1000011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i3193 = {\n            let t0 = &_11000111 * &i3174;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10110001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11001011;\n            t4\n        };\n        let i3221 = {\n            let t0 = square_n(&i3193, 5);\n            let t1 = &t0 * &_10001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11001;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i3241 = {\n            let t0 = &_1101101 * &i3221;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10000011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11000011;\n            t4\n        };\n        let i3269 = {\n            let t0 = square_n(&i3241, 9);\n            let t1 = &t0 * &_11101001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10011111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3288 = {\n            let t0 = &_10110011 * &i3269;\n            let t1 = square_n(&t0, 3);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_1000001;\n            t4\n        };\n        let i3317 = {\n            let t0 = square_n(&i3288, 10);\n            let t1 = &t0 * &_1010011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1010111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3340 = {\n            let t0 = &_1000101 * &i3317;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_11001001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1000101;\n            t4\n        };\n        let i3366 = {\n            let t0 = square_n(&i3340, 8);\n            let t1 = &t0 * &_1010001;\n            let t2 = square_n(&t1, 3);\n            let t3 = &t2 * &_11;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i3386 = {\n            let t0 = &_1001011 * &i3366;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1110011;\n            t4\n        };\n        let i3414 = {\n            let t0 = square_n(&i3386, 10);\n            let t1 = &t0 * &_10110101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10101101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3433 = {\n            let t0 = &_1010001 * &i3414;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_10001111;\n            let t3 = square_n(&t2, 4);\n            let t4 = &t3 * &_1101;\n            t4\n        };\n        let i3463 = {\n            let t0 = square_n(&i3433, 12);\n            let t1 = &t0 * &_10000111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_100111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3485 = {\n            let t0 = &_1110101 * &i3463;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1000001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_11111101;\n            t4\n        };\n        let i3514 = {\n            let t0 = square_n(&i3485, 9);\n            let t1 = &t0 * &_11000001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1011011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i3534 = {\n            let t0 = &_1101001 * &i3514;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10000001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11000111;\n            t4\n        };\n        let i3564 = {\n            let t0 = square_n(&i3534, 8);\n            let t1 = &t0 * &_10000011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10110011;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i3580 = {\n            let t0 = &_10011111 * &i3564;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_1011;\n            t4\n        };\n        let i3611 = {\n            let t0 = square_n(&i3580, 11);\n            let t1 = &t0 * &_1111001;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11000011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3633 = {\n            let t0 = &_10011111 * &i3611;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_10001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_101;\n            t4\n        };\n        let i3663 = {\n            let t0 = square_n(&i3633, 13);\n            let t1 = &t0 * &_1100001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_100001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3684 = {\n            let t0 = &_100011 * &i3663;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_10011111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1101001;\n            t4\n        };\n        let i3712 = {\n            let t0 = square_n(&i3684, 7);\n            let t1 = &t0 * &_100101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11110111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3733 = {\n            let t0 = &_1110001 * &i3712;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_101001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11001;\n            t4\n        };\n        let i3766 = {\n            let t0 = square_n(&i3733, 14);\n            let t1 = &t0 * &_11011001;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10101101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3789 = {\n            let t0 = &_100111 * &i3766;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11101111;\n            t4\n        };\n        let i3814 = {\n            let t0 = square_n(&i3789, 9);\n            let t1 = &t0 * &_11100001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11010001;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i3838 = {\n            let t0 = &_100101 * &i3814;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_11011001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_11101001;\n            t4\n        };\n        let i3864 = {\n            let t0 = square_n(&i3838, 8);\n            let t1 = &t0 * &_11111111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11110111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3884 = {\n            let t0 = &_10101111 * &i3864;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_10100001;\n            t4\n        };\n        let i3910 = {\n            let t0 = square_n(&i3884, 8);\n            let t1 = &t0 * &_11010101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10000001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3932 = {\n            let t0 = &_1010001 * &i3910;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1101101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1000011;\n            t4\n        };\n        let i3958 = {\n            let t0 = square_n(&i3932, 8);\n            let t1 = &t0 * &_1010011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1001101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3980 = {\n            let t0 = &_1100011 * &i3958;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_11111101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11100001;\n            t4\n        };\n        let i4013 = {\n            let t0 = square_n(&i3980, 12);\n            let t1 = &t0 * &_11001111;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_1101;\n            let t4 = square_n(&t3, 14);\n            t4\n        };\n        let i4033 = {\n            let t0 = &_10100101 * &i4013;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1001111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_10110111;\n            t4\n        };\n        let i4065 = {\n            let t0 = square_n(&i4033, 12);\n            let t1 = &t0 * &_11100111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_11100001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i4087 = {\n            let t0 = &_1010101 * &i4065;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11011;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11101011;\n            t4\n        };\n        let i4116 = {\n            let t0 = square_n(&i4087, 8);\n            let t1 = &t0 * &_10110101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_100111;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i4136 = {\n            let t0 = &_11001011 * &i4116;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10110001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10001011;\n            t4\n        };\n        let i4162 = {\n            let t0 = square_n(&i4136, 4);\n            let t1 = &t0 * &_1111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_101;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i4181 = {\n            let t0 = &_10111001 * &i4162;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10101101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10100111;\n            t4\n        };\n        let i4208 = {\n            let t0 = square_n(&i4181, 8);\n            let t1 = &t0 * &_10010101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_11110101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i4227 = {\n            let t0 = &_11001001 * &i4208;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10101101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1101001;\n            t4\n        };\n        let i4263 = {\n            let t0 = square_n(&i4227, 17);\n            let t1 = &t0 * &_1100001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1001011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4284 = {\n            let t0 = &_10001 * &i4263;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_11001001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_111111;\n            t4\n        };\n        let i4316 = {\n            let t0 = square_n(&i4284, 14);\n            let t1 = &t0 * &_11111001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11101011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i4344 = {\n            let t0 = &_1101011 * &i4316;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_10001111;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_1000011;\n            t4\n        };\n        let i4375 = {\n            let t0 = square_n(&i4344, 8);\n            let t1 = &t0 * &_1011001;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1101011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i4389 = {\n            let t0 = &_11110111 * &i4375;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1111001;\n            let t3 = square_n(&t2, 4);\n            let t4 = &t3 * &_101;\n            t4\n        };\n        let i4421 = {\n            let t0 = square_n(&i4389, 12);\n            let t1 = &t0 * &_100001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_10101;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i4440 = {\n            let t0 = &_10001001 * &i4421;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_10111011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1000101;\n            t4\n        };\n        let i4475 = {\n            let t0 = square_n(&i4440, 11);\n            let t1 = &t0 * &_110101;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_11001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i4493 = {\n            let t0 = &_1011111 * &i4475;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1111101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_100001;\n            t4\n        };\n        let i4523 = {\n            let t0 = square_n(&i4493, 11);\n            let t1 = &t0 * &_11101011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_111111;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i4545 = {\n            let t0 = &_10010111 * &i4523;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1010001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11110101;\n            t4\n        };\n        let i4565 = {\n            let t0 = square_n(&i4545, 6);\n            let t1 = &t0 * &_110011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_10101001;\n            let t4 = square_n(&t3, 2);\n            t4\n        };\n        let i4590 = {\n            let t0 = &base * &i4565;\n            let t1 = square_n(&t0, 16);\n            let t2 = &t1 * &_10100011;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_111111;\n            t4\n        };\n        let i4620 = {\n            let t0 = square_n(&i4590, 7);\n            let t1 = &t0 * &_10001;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1100011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i4638 = {\n            let t0 = &_1101111 * &i4620;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_10000101;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_100111;\n            t4\n        };\n        let i4665 = {\n            let t0 = square_n(&i4638, 13);\n            let t1 = &t0 * &_111111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_11011101;\n            let t4 = square_n(&t3, 2);\n            t4\n        };\n        let i4687 = {\n            let t0 = &base * &i4665;\n            let t1 = square_n(&t0, 14);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_1111;\n            t4\n        };\n        let i4719 = {\n            let t0 = square_n(&i4687, 14);\n            let t1 = &t0 * &_10000111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_11110101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i4741 = {\n            let t0 = &_11011001 * &i4719;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11011111;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11000011;\n            t4\n        };\n        let i4767 = {\n            let t0 = square_n(&i4741, 7);\n            let t1 = &t0 * &_1111101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10001011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i4787 = {\n            let t0 = &_1010011 * &i4767;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1000001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_110011;\n            t4\n        };\n        let i4814 = {\n            let t0 = square_n(&i4787, 11);\n            let t1 = &t0 * &_1111001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_11100001;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i4836 = {\n            let t0 = &_11101 * &i4814;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_10000101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1010111;\n            t4\n        };\n        let i4867 = {\n            let t0 = square_n(&i4836, 10);\n            let t1 = &t0 * &_11010101;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_11011001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i4886 = {\n            let t0 = &_11011111 * &i4867;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_111;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_10001;\n            t4\n        };\n        let result = {\n            let t0 = square_n(&i4886, 7);\n            let t1 = &t0 * &_1001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1111;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        result\n    }\n\n    /// Generated from tools/addchain/bls12_381_e.acc\n    pub fn pow_e(\n        base: &FieldElement<Degree12ExtensionField>,\n    ) -> FieldElement<Degree12ExtensionField> {\n        let base = base.clone();\n        let _10 = {\n            let t0 = square_n(&base, 1);\n            t0\n        };\n        let _11 = {\n            let t0 = &base * &_10;\n            t0\n        };\n        let _101 = {\n            let t0 = &_10 * &_11;\n            t0\n        };\n        let _111 = {\n            let t0 = &_10 * &_101;\n            t0\n        };\n        let _1001 = {\n            let t0 = &_10 * &_111;\n            t0\n        };\n        let _1011 = {\n            let t0 = &_10 * &_1001;\n            t0\n        };\n        let _1101 = {\n            let t0 = &_10 * &_1011;\n            t0\n        };\n        let _1111 = {\n            let t0 = &_10 * &_1101;\n            t0\n        };\n        let _10001 = {\n            let t0 = &_10 * &_1111;\n            t0\n        };\n        let _10011 = {\n            let t0 = &_10 * &_10001;\n            t0\n        };\n        let _10101 = {\n            let t0 = &_10 * &_10011;\n            t0\n        };\n        let _10111 = {\n            let t0 = &_10 * &_10101;\n            t0\n        };\n        let _11001 = {\n            let t0 = &_10 * &_10111;\n            t0\n        };\n        let _11011 = {\n            let t0 = &_10 * &_11001;\n            t0\n        };\n        let _11101 = {\n            let t0 = &_10 * &_11011;\n            t0\n        };\n        let _11111 = {\n            let t0 = &_10 * &_11101;\n            t0\n        };\n        let _100001 = {\n            let t0 = &_10 * &_11111;\n            t0\n        };\n        let _100011 = {\n            let t0 = &_10 * &_100001;\n            t0\n        };\n        let _100101 = {\n            let t0 = &_10 * &_100011;\n            t0\n        };\n        let _100111 = {\n            let t0 = &_10 * &_100101;\n            t0\n        };\n        let _101001 = {\n            let t0 = &_10 * &_100111;\n            t0\n        };\n        let _101011 = {\n            let t0 = &_10 * &_101001;\n            t0\n        };\n        let _101101 = {\n            let t0 = &_10 * &_101011;\n            t0\n        };\n        let _101111 = {\n            let t0 = &_10 * &_101101;\n            t0\n        };\n        let _110001 = {\n            let t0 = &_10 * &_101111;\n            t0\n        };\n        let _110011 = {\n            let t0 = &_10 * &_110001;\n            t0\n        };\n        let _110101 = {\n            let t0 = &_10 * &_110011;\n            t0\n        };\n        let _110111 = {\n            let t0 = &_10 * &_110101;\n            t0\n        };\n        let _111001 = {\n            let t0 = &_10 * &_110111;\n            t0\n        };\n        let _111011 = {\n            let t0 = &_10 * &_111001;\n            t0\n        };\n        let _111101 = {\n            let t0 = &_10 * &_111011;\n            t0\n        };\n        let _111111 = {\n            let t0 = &_10 * &_111101;\n            t0\n        };\n        let _1000001 = {\n            let t0 = &_10 * &_111111;\n            t0\n        };\n        let _1000011 = {\n            let t0 = &_10 * &_1000001;\n            t0\n        };\n        let _1000101 = {\n            let t0 = &_10 * &_1000011;\n            t0\n        };\n        let _1000111 = {\n            let t0 = &_10 * &_1000101;\n            t0\n        };\n        let _1001001 = {\n            let t0 = &_10 * &_1000111;\n            t0\n        };\n        let _1001011 = {\n            let t0 = &_10 * &_1001001;\n            t0\n        };\n        let _1001101 = {\n            let t0 = &_10 * &_1001011;\n            t0\n        };\n        let _1001111 = {\n            let t0 = &_10 * &_1001101;\n            t0\n        };\n        let _1010001 = {\n            let t0 = &_10 * &_1001111;\n            t0\n        };\n        let _1010011 = {\n            let t0 = &_10 * &_1010001;\n            t0\n        };\n        let _1010101 = {\n            let t0 = &_10 * &_1010011;\n            t0\n        };\n        let _1010111 = {\n            let t0 = &_10 * &_1010101;\n            t0\n        };\n        let _1011001 = {\n            let t0 = &_10 * &_1010111;\n            t0\n        };\n        let _1011011 = {\n            let t0 = &_10 * &_1011001;\n            t0\n        };\n        let _1011101 = {\n            let t0 = &_10 * &_1011011;\n            t0\n        };\n        let _1011111 = {\n            let t0 = &_10 * &_1011101;\n            t0\n        };\n        let _1100001 = {\n            let t0 = &_10 * &_1011111;\n            t0\n        };\n        let _1100011 = {\n            let t0 = &_10 * &_1100001;\n            t0\n        };\n        let _1100101 = {\n            let t0 = &_10 * &_1100011;\n            t0\n        };\n        let _1100111 = {\n            let t0 = &_10 * &_1100101;\n            t0\n        };\n        let _1101001 = {\n            let t0 = &_10 * &_1100111;\n            t0\n        };\n        let _1101011 = {\n            let t0 = &_10 * &_1101001;\n            t0\n        };\n        let _1101101 = {\n            let t0 = &_10 * &_1101011;\n            t0\n        };\n        let _1101111 = {\n            let t0 = &_10 * &_1101101;\n            t0\n        };\n        let _1110001 = {\n            let t0 = &_10 * &_1101111;\n            t0\n        };\n        let _1110011 = {\n            let t0 = &_10 * &_1110001;\n            t0\n        };\n        let _1110101 = {\n            let t0 = &_10 * &_1110011;\n            t0\n        };\n        let _1110111 = {\n            let t0 = &_10 * &_1110101;\n            t0\n        };\n        let _1111001 = {\n            let t0 = &_10 * &_1110111;\n            t0\n        };\n        let _1111011 = {\n            let t0 = &_10 * &_1111001;\n            t0\n        };\n        let _1111101 = {\n            let t0 = &_10 * &_1111011;\n            t0\n        };\n        let _1111111 = {\n            let t0 = &_10 * &_1111101;\n            t0\n        };\n        let _11111110 = {\n            let t0 = square_n(&_1111111, 1);\n            t0\n        };\n        let _11111111 = {\n            let t0 = &base * &_11111110;\n            t0\n        };\n        let x9 = {\n            let t0 = square_n(&_11111111, 1);\n            let t1 = &t0 * &base;\n            t1\n        };\n        let i69 = {\n            let t0 = &_1110001 * &x9;\n            t0\n        };\n        let x10 = {\n            let t0 = square_n(&x9, 1);\n            let t1 = &t0 * &base;\n            t1\n        };\n        let i72 = {\n            let t0 = square_n(&i69, 1);\n            t0\n        };\n        let x11 = {\n            let t0 = square_n(&x10, 1);\n            let t1 = &t0 * &base;\n            t1\n        };\n        let i95 = {\n            let t0 = square_n(&i72, 2);\n            let t1 = &t0 * &_101001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_100011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i118 = {\n            let t0 = &_1100101 * &i95;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1100101;\n            let t3 = square_n(&t2, 13);\n            let t4 = &t3 * &_1101011;\n            t4\n        };\n        let i140 = {\n            let t0 = square_n(&i118, 7);\n            let t1 = &t0 * &_1010111;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i163 = {\n            let t0 = &_101 * &i140;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1110111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_10001;\n            t4\n        };\n        let i188 = {\n            let t0 = square_n(&i163, 9);\n            let t1 = &t0 * &_100001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_100001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i214 = {\n            let t0 = &_101011 * &i188;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 16);\n            let t4 = &t3 * &_111001;\n            t4\n        };\n        let i242 = {\n            let t0 = square_n(&i214, 8);\n            let t1 = &t0 * &_101001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_111011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i258 = {\n            let t0 = &_1010011 * &i242;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1001001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i286 = {\n            let t0 = square_n(&i258, 9);\n            let t1 = &t0 * &_1010111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i306 = {\n            let t0 = &_1100011 * &i286;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_101011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1110111;\n            t4\n        };\n        let i331 = {\n            let t0 = square_n(&i306, 7);\n            let t1 = &t0 * &_1110001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_11101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i349 = {\n            let t0 = &_1000111 * &i331;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1011101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1101;\n            t4\n        };\n        let i380 = {\n            let t0 = square_n(&i349, 9);\n            let t1 = &t0 * &_110101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1111001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i400 = {\n            let t0 = &_110101 * &i380;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1101111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1101101;\n            t4\n        };\n        let i428 = {\n            let t0 = square_n(&i400, 8);\n            let t1 = &t0 * &_1111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1011011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i449 = {\n            let t0 = &_1110111 * &i428;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_101011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1000011;\n            t4\n        };\n        let i473 = {\n            let t0 = square_n(&i449, 7);\n            let t1 = &t0 * &_1010111;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_100101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i489 = {\n            let t0 = &_1010001 * &i473;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_1011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1001;\n            t4\n        };\n        let i518 = {\n            let t0 = square_n(&i489, 12);\n            let t1 = &t0 * &_1001011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1010001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i537 = {\n            let t0 = &_1101111 * &i518;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1010001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1110111;\n            t4\n        };\n        let i562 = {\n            let t0 = square_n(&i537, 8);\n            let t1 = &t0 * &_1001001;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_11101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i578 = {\n            let t0 = &_101111 * &i562;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1001101;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_10001;\n            t4\n        };\n        let i609 = {\n            let t0 = square_n(&i578, 9);\n            let t1 = &t0 * &_1011101;\n            let t2 = square_n(&t1, 13);\n            let t3 = &t2 * &_110011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i627 = {\n            let t0 = &_110001 * &i609;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_11011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1100111;\n            t4\n        };\n        let i651 = {\n            let t0 = square_n(&i627, 7);\n            let t1 = &t0 * &_1101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1000111;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i672 = {\n            let t0 = &_10001 * &i651;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1000001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i699 = {\n            let t0 = square_n(&i672, 10);\n            let t1 = &t0 * &_1111011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1001101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i715 = {\n            let t0 = &_1110101 * &i699;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1000011;\n            let t3 = square_n(&t2, 4);\n            let t4 = &t3 * &_1101;\n            t4\n        };\n        let i742 = {\n            let t0 = square_n(&i715, 14);\n            let t1 = &t0 * &_1010101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_111101;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i764 = {\n            let t0 = &_111 * &i742;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_110111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1101001;\n            t4\n        };\n        let i789 = {\n            let t0 = square_n(&i764, 7);\n            let t1 = &t0 * &_1100101;\n            let t2 = square_n(&t1, 3);\n            let t3 = &t2 * &_11;\n            let t4 = square_n(&t3, 13);\n            t4\n        };\n        let i807 = {\n            let t0 = &_1010011 * &i789;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_11001;\n            t4\n        };\n        let i833 = {\n            let t0 = square_n(&i807, 9);\n            let t1 = &t0 * &_100111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1111011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i855 = {\n            let t0 = &_1100111 * &i833;\n            let t1 = square_n(&t0, 2);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 17);\n            let t4 = &t3 * &x11;\n            t4\n        };\n        let i882 = {\n            let t0 = square_n(&i855, 7);\n            let t1 = &t0 * &_101111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1101011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i902 = {\n            let t0 = &_1001111 * &i882;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_111001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_11111111;\n            t4\n        };\n        let i928 = {\n            let t0 = square_n(&i902, 8);\n            let t1 = &t0 * &_100111;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i946 = {\n            let t0 = &_10111 * &i928;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_1101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_11011;\n            t4\n        };\n        let i971 = {\n            let t0 = square_n(&i946, 9);\n            let t1 = &t0 * &_110101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_11101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i992 = {\n            let t0 = &_100011 * &i971;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_110001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10101;\n            t4\n        };\n        let i1018 = {\n            let t0 = square_n(&i992, 10);\n            let t1 = &t0 * &_1010001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_111111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1039 = {\n            let t0 = &_101101 * &i1018;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_101111;\n            t4\n        };\n        let i1063 = {\n            let t0 = square_n(&i1039, 8);\n            let t1 = &t0 * &_1001001;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_111001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1081 = {\n            let t0 = &_110111 * &i1063;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1010101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1111001;\n            t4\n        };\n        let i1101 = {\n            let t0 = square_n(&i1081, 6);\n            let t1 = &t0 * &_111011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1100011;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        let i1123 = {\n            let t0 = &_1101 * &i1101;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1111011;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_110001;\n            t4\n        };\n        let i1147 = {\n            let t0 = square_n(&i1123, 8);\n            let t1 = &t0 * &_1101101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1000001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1163 = {\n            let t0 = &_1100001 * &i1147;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_111011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_100111;\n            t4\n        };\n        let i1193 = {\n            let t0 = square_n(&i1163, 8);\n            let t1 = &t0 * &_10011;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1111111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1210 = {\n            let t0 = &_1001101 * &i1193;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_101011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1011011;\n            t4\n        };\n        let i1233 = {\n            let t0 = square_n(&i1210, 7);\n            let t1 = &t0 * &_1110111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1001011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1254 = {\n            let t0 = &_110101 * &i1233;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1011111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1101111;\n            t4\n        };\n        let i1283 = {\n            let t0 = square_n(&i1254, 7);\n            let t1 = &t0 * &_101101;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_111;\n            let t4 = square_n(&t3, 15);\n            t4\n        };\n        let i1297 = {\n            let t0 = &_1000001 * &i1283;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1110001;\n            let t3 = square_n(&t2, 3);\n            let t4 = &t3 * &base;\n            t4\n        };\n        let i1331 = {\n            let t0 = square_n(&i1297, 15);\n            let t1 = &t0 * &_110001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1100001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1351 = {\n            let t0 = &_1111011 * &i1331;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_10011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1011101;\n            t4\n        };\n        let i1372 = {\n            let t0 = square_n(&i1351, 8);\n            let t1 = &t0 * &_1110111;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10111;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i1395 = {\n            let t0 = &_1011 * &i1372;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 14);\n            let t4 = &t3 * &x11;\n            t4\n        };\n        let i1415 = {\n            let t0 = square_n(&i1395, 1);\n            let t1 = &t0 * &base;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1011001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1437 = {\n            let t0 = &_1110101 * &i1415;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1111011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1101011;\n            t4\n        };\n        let i1459 = {\n            let t0 = square_n(&i1437, 8);\n            let t1 = &t0 * &_100101;\n            let t2 = square_n(&t1, 3);\n            let t3 = &t2 * &base;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1480 = {\n            let t0 = &_11111111 * &i1459;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_101011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_110011;\n            t4\n        };\n        let i1503 = {\n            let t0 = square_n(&i1480, 7);\n            let t1 = &t0 * &_111111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_101011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1529 = {\n            let t0 = &_100101 * &i1503;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_1000001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1001101;\n            t4\n        };\n        let i1553 = {\n            let t0 = square_n(&i1529, 8);\n            let t1 = &t0 * &_1100101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1010101;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i1573 = {\n            let t0 = &_100101 * &i1553;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1010001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1011101;\n            t4\n        };\n        let i1599 = {\n            let t0 = square_n(&i1573, 6);\n            let t1 = &t0 * &_111011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1011111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1617 = {\n            let t0 = &_1011101 * &i1599;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1001111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1111001;\n            t4\n        };\n        let i1642 = {\n            let t0 = square_n(&i1617, 8);\n            let t1 = &t0 * &_1100001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1010111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i1662 = {\n            let t0 = &_1001001 * &i1642;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1000111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1001001;\n            t4\n        };\n        let i1695 = {\n            let t0 = square_n(&i1662, 12);\n            let t1 = &t0 * &_1011101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1110101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i1713 = {\n            let t0 = &_111101 * &i1695;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_111011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_111101;\n            t4\n        };\n        let i1735 = {\n            let t0 = square_n(&i1713, 6);\n            let t1 = &t0 * &_11011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1101011;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i1758 = {\n            let t0 = &_11011 * &i1735;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1001011;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1001001;\n            t4\n        };\n        let i1782 = {\n            let t0 = square_n(&i1758, 4);\n            let t1 = &t0 * &_1111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1000011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i1803 = {\n            let t0 = &_10101 * &i1782;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_111001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1000011;\n            t4\n        };\n        let i1829 = {\n            let t0 = square_n(&i1803, 5);\n            let t1 = &t0 * &_10011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1011001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1846 = {\n            let t0 = &_1110011 * &i1829;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1100001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_110011;\n            t4\n        };\n        let i1875 = {\n            let t0 = square_n(&i1846, 9);\n            let t1 = &t0 * &_110001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_101101;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i1898 = {\n            let t0 = &_1100111 * &i1875;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1011011;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1101101;\n            t4\n        };\n        let i1927 = {\n            let t0 = square_n(&i1898, 11);\n            let t1 = &t0 * &_1000011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1110111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i1945 = {\n            let t0 = &_1101001 * &i1927;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_1011;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i1967 = {\n            let t0 = square_n(&i1945, 4);\n            let t1 = &t0 * &_1001;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1001111;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i1986 = {\n            let t0 = &_10111 * &i1967;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_1001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1001011;\n            t4\n        };\n        let i2009 = {\n            let t0 = square_n(&i1986, 8);\n            let t1 = &t0 * &_1011011;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_1001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2029 = {\n            let t0 = &_100101 * &i2009;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11111111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_101011;\n            t4\n        };\n        let i2057 = {\n            let t0 = square_n(&i2029, 10);\n            let t1 = &t0 * &_1111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1011011;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i2075 = {\n            let t0 = &_111001 * &i2057;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1101001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_101111;\n            t4\n        };\n        let i2100 = {\n            let t0 = square_n(&i2075, 7);\n            let t1 = &t0 * &_10011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1110011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2125 = {\n            let t0 = &_1110011 * &i2100;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_101101;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1110001;\n            t4\n        };\n        let i2153 = {\n            let t0 = square_n(&i2125, 6);\n            let t1 = &t0 * &_11;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1101101;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2171 = {\n            let t0 = &_110011 * &i2153;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_10111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1011011;\n            t4\n        };\n        let i2199 = {\n            let t0 = square_n(&i2171, 10);\n            let t1 = &t0 * &_1000111;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1111011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2220 = {\n            let t0 = &_1111111 * &i2199;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1110001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1101111;\n            t4\n        };\n        let i2244 = {\n            let t0 = square_n(&i2220, 9);\n            let t1 = &t0 * &_1001101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1000111;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i2264 = {\n            let t0 = &_1011 * &i2244;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1010001;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_11001;\n            t4\n        };\n        let i2289 = {\n            let t0 = square_n(&i2264, 10);\n            let t1 = &t0 * &_1101001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1010111;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i2309 = {\n            let t0 = &_10111 * &i2289;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1010011;\n            t4\n        };\n        let i2333 = {\n            let t0 = square_n(&i2309, 6);\n            let t1 = &t0 * &_110101;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_1101;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i2354 = {\n            let t0 = &_110101 * &i2333;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1111011;\n            t4\n        };\n        let i2378 = {\n            let t0 = square_n(&i2354, 8);\n            let t1 = &t0 * &_1110111;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_1011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2398 = {\n            let t0 = &_11001 * &i2378;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11111111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1011111;\n            t4\n        };\n        let i2427 = {\n            let t0 = square_n(&i2398, 6);\n            let t1 = &t0 * &_1111;\n            let t2 = square_n(&t1, 13);\n            let t3 = &t2 * &_1100001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2444 = {\n            let t0 = &_1100001 * &i2427;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_11001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1101001;\n            t4\n        };\n        let i2470 = {\n            let t0 = square_n(&i2444, 9);\n            let t1 = &t0 * &_1010111;\n            let t2 = square_n(&t1, 3);\n            let t3 = &t2 * &_111;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i2487 = {\n            let t0 = &_1000011 * &i2470;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_100011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1011111;\n            t4\n        };\n        let i2519 = {\n            let t0 = square_n(&i2487, 10);\n            let t1 = &t0 * &_111011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_101011;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2538 = {\n            let t0 = &_11111111 * &i2519;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_111101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_11111;\n            t4\n        };\n        let i2566 = {\n            let t0 = square_n(&i2538, 7);\n            let t1 = &t0 * &_11001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i2586 = {\n            let t0 = &_1111001 * &i2566;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1010101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_10101;\n            t4\n        };\n        let i2609 = {\n            let t0 = square_n(&i2586, 9);\n            let t1 = &t0 * &_1110001;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_1001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2631 = {\n            let t0 = &_1011 * &i2609;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_1011101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1000011;\n            t4\n        };\n        let i2658 = {\n            let t0 = square_n(&i2631, 9);\n            let t1 = &t0 * &_1011001;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1100101;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2679 = {\n            let t0 = &_1010111 * &i2658;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_11111;\n            t4\n        };\n        let i2703 = {\n            let t0 = square_n(&i2679, 7);\n            let t1 = &t0 * &_10111;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1110011;\n            let t4 = square_n(&t3, 5);\n            t4\n        };\n        let i2725 = {\n            let t0 = &_10111 * &i2703;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_100101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1011101;\n            t4\n        };\n        let i2749 = {\n            let t0 = square_n(&i2725, 4);\n            let t1 = &t0 * &_1111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1010011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2771 = {\n            let t0 = &_1000001 * &i2749;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1111001;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1100101;\n            t4\n        };\n        let i2799 = {\n            let t0 = square_n(&i2771, 1);\n            let t1 = &t0 * &base;\n            let t2 = square_n(&t1, 17);\n            let t3 = &t2 * &_1000001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i2815 = {\n            let t0 = &_1011101 * &i2799;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1010101;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_111011;\n            t4\n        };\n        let i2842 = {\n            let t0 = square_n(&i2815, 8);\n            let t1 = &t0 * &_1100011;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_11011;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i2861 = {\n            let t0 = &_1101011 * &i2842;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1101111;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1000111;\n            t4\n        };\n        let i2882 = {\n            let t0 = square_n(&i2861, 2);\n            let t1 = &t0 * &base;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &x9;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i2900 = {\n            let t0 = &_101101 * &i2882;\n            let t1 = square_n(&t0, 3);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1110111;\n            t4\n        };\n        let i2929 = {\n            let t0 = square_n(&i2900, 6);\n            let t1 = &t0 * &base;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_100111;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i2949 = {\n            let t0 = &_1010001 * &i2929;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_110011;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1100011;\n            t4\n        };\n        let i2971 = {\n            let t0 = square_n(&i2949, 6);\n            let t1 = &t0 * &_101111;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1110011;\n            let t4 = square_n(&t3, 3);\n            t4\n        };\n        let i2990 = {\n            let t0 = &_111 * &i2971;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &_1010111;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_11101;\n            t4\n        };\n        let i3017 = {\n            let t0 = square_n(&i2990, 9);\n            let t1 = &t0 * &_1110011;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_1101;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i3037 = {\n            let t0 = &x9 * &i3017;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_10011;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1101011;\n            t4\n        };\n        let i3061 = {\n            let t0 = square_n(&i3037, 7);\n            let t1 = &t0 * &_1110111;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3081 = {\n            let t0 = &_1101111 * &i3061;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1100011;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1000111;\n            t4\n        };\n        let i3099 = {\n            let t0 = square_n(&i3081, 3);\n            let t1 = &t0 * &_111;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1111001;\n            let t4 = square_n(&t3, 1);\n            t4\n        };\n        let i3125 = {\n            let t0 = &base * &i3099;\n            let t1 = square_n(&t0, 15);\n            let t2 = &t1 * &_111101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1101111;\n            t4\n        };\n        let i3152 = {\n            let t0 = square_n(&i3125, 5);\n            let t1 = &t0 * &_1101;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1011001;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i3172 = {\n            let t0 = &_1101011 * &i3152;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_110111;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_10011;\n            t4\n        };\n        let i3200 = {\n            let t0 = square_n(&i3172, 12);\n            let t1 = &t0 * &_1111011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1100001;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i3220 = {\n            let t0 = &_10101 * &i3200;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1011011;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1010111;\n            t4\n        };\n        let i3243 = {\n            let t0 = square_n(&i3220, 5);\n            let t1 = &t0 * &_11101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_100001;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i3262 = {\n            let t0 = &_1101101 * &i3243;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1001101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_100101;\n            t4\n        };\n        let i3286 = {\n            let t0 = square_n(&i3262, 12);\n            let t1 = &t0 * &_1111101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1000011;\n            let t4 = square_n(&t3, 1);\n            t4\n        };\n        let i3309 = {\n            let t0 = &base * &i3286;\n            let t1 = square_n(&t0, 11);\n            let t2 = &t1 * &x10;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1110111;\n            t4\n        };\n        let i3330 = {\n            let t0 = square_n(&i3309, 7);\n            let t1 = &t0 * &_101011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1110101;\n            let t4 = square_n(&t3, 4);\n            t4\n        };\n        let i3350 = {\n            let t0 = &_1111 * &i3330;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_111101;\n            t4\n        };\n        let i3373 = {\n            let t0 = square_n(&i3350, 9);\n            let t1 = &t0 * &_1101101;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_110101;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i3395 = {\n            let t0 = &_11101 * &i3373;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1001101;\n            t4\n        };\n        let i3420 = {\n            let t0 = square_n(&i3395, 9);\n            let t1 = &t0 * &_1000111;\n            let t2 = square_n(&t1, 2);\n            let t3 = &t2 * &_11;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i3435 = {\n            let t0 = &_1110111 * &i3420;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_111011;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_10101;\n            t4\n        };\n        let i3462 = {\n            let t0 = square_n(&i3435, 9);\n            let t1 = &t0 * &_100001;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_101101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3480 = {\n            let t0 = &_1101001 * &i3462;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_101001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_101101;\n            t4\n        };\n        let i3505 = {\n            let t0 = square_n(&i3480, 8);\n            let t1 = &t0 * &_1000101;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_1001;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i3522 = {\n            let t0 = &_1111001 * &i3505;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_110001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_100011;\n            t4\n        };\n        let i3551 = {\n            let t0 = square_n(&i3522, 12);\n            let t1 = &t0 * &_1011001;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_1101;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i3568 = {\n            let t0 = &_1100011 * &i3551;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_11111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_111001;\n            t4\n        };\n        let i3592 = {\n            let t0 = square_n(&i3568, 8);\n            let t1 = &t0 * &_1010011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1100011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3609 = {\n            let t0 = &_101101 * &i3592;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1101111;\n            let t3 = square_n(&t2, 6);\n            let t4 = &t3 * &_100111;\n            t4\n        };\n        let i3637 = {\n            let t0 = square_n(&i3609, 8);\n            let t1 = &t0 * &_1000101;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_100001;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i3657 = {\n            let t0 = &_1010111 * &i3637;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1101101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1100001;\n            t4\n        };\n        let i3682 = {\n            let t0 = square_n(&i3657, 10);\n            let t1 = &t0 * &_100101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_101111;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i3704 = {\n            let t0 = &_11111 * &i3682;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_101101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1101001;\n            t4\n        };\n        let i3728 = {\n            let t0 = square_n(&i3704, 7);\n            let t1 = &t0 * &_101101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1110111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3746 = {\n            let t0 = &_100011 * &i3728;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1000111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_110101;\n            t4\n        };\n        let i3769 = {\n            let t0 = square_n(&i3746, 8);\n            let t1 = &t0 * &_1110101;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_1010001;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i3785 = {\n            let t0 = &_101001 * &i3769;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_10001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_10111;\n            t4\n        };\n        let i3811 = {\n            let t0 = square_n(&i3785, 9);\n            let t1 = &t0 * &_1110011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3831 = {\n            let t0 = &_100101 * &i3811;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1010011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1100111;\n            t4\n        };\n        let i3857 = {\n            let t0 = square_n(&i3831, 7);\n            let t1 = &t0 * &_1000011;\n            let t2 = square_n(&t1, 10);\n            let t3 = &t2 * &_1111011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i3879 = {\n            let t0 = &_101 * &i3857;\n            let t1 = square_n(&t0, 12);\n            let t2 = &t1 * &_1111001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1101011;\n            t4\n        };\n        let i3902 = {\n            let t0 = square_n(&i3879, 6);\n            let t1 = &t0 * &_110011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_10101;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i3928 = {\n            let t0 = &_101 * &i3902;\n            let t1 = square_n(&t0, 13);\n            let t2 = &t1 * &_10111;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1011101;\n            t4\n        };\n        let i3953 = {\n            let t0 = square_n(&i3928, 5);\n            let t1 = &t0 * &_1001;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_100001;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i3977 = {\n            let t0 = &_1001 * &i3953;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_11111;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &_1111101;\n            t4\n        };\n        let i4010 = {\n            let t0 = square_n(&i3977, 10);\n            let t1 = &t0 * &_1011101;\n            let t2 = square_n(&t1, 12);\n            let t3 = &t2 * &_1111101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4029 = {\n            let t0 = &_1001001 * &i4010;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_101011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_100111;\n            t4\n        };\n        let i4058 = {\n            let t0 = square_n(&i4029, 9);\n            let t1 = &t0 * &_11011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1100011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4075 = {\n            let t0 = &_1010101 * &i4058;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_110001;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_1101101;\n            t4\n        };\n        let i4098 = {\n            let t0 = square_n(&i4075, 7);\n            let t1 = &t0 * &_110101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1000111;\n            let t4 = square_n(&t3, 6);\n            t4\n        };\n        let i4120 = {\n            let t0 = &_101011 * &i4098;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_11011;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_101011;\n            t4\n        };\n        let i4145 = {\n            let t0 = square_n(&i4120, 5);\n            let t1 = &t0 * &_101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_111;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i4169 = {\n            let t0 = &_11101 * &i4145;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_1110011;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i4194 = {\n            let t0 = square_n(&i4169, 7);\n            let t1 = &t0 * &_111011;\n            let t2 = square_n(&t1, 14);\n            let t3 = &t2 * &_101111;\n            let t4 = square_n(&t3, 2);\n            t4\n        };\n        let i4218 = {\n            let t0 = &base * &i4194;\n            let t1 = square_n(&t0, 14);\n            let t2 = &t1 * &_1011111;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1101101;\n            t4\n        };\n        let i4243 = {\n            let t0 = square_n(&i4218, 7);\n            let t1 = &t0 * &_1110101;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_101;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i4262 = {\n            let t0 = &_110001 * &i4243;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_1101;\n            let t3 = square_n(&t2, 11);\n            let t4 = &t3 * &_1011001;\n            t4\n        };\n        let i4286 = {\n            let t0 = square_n(&i4262, 7);\n            let t1 = &t0 * &_1011011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_110011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4311 = {\n            let t0 = &_110101 * &i4286;\n            let t1 = square_n(&t0, 15);\n            let t2 = &t1 * &_1100001;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i4336 = {\n            let t0 = square_n(&i4311, 9);\n            let t1 = &t0 * &_1001011;\n            let t2 = square_n(&t1, 7);\n            let t3 = &t2 * &_110011;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i4354 = {\n            let t0 = &_10101 * &i4336;\n            let t1 = square_n(&t0, 6);\n            let t2 = &t1 * &_1101;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_101001;\n            t4\n        };\n        let i4382 = {\n            let t0 = square_n(&i4354, 9);\n            let t1 = &t0 * &_1010011;\n            let t2 = square_n(&t1, 9);\n            let t3 = &t2 * &_1111111;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i4400 = {\n            let t0 = &_1010101 * &i4382;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 10);\n            let t4 = &t3 * &_1000111;\n            t4\n        };\n        let i4424 = {\n            let t0 = square_n(&i4400, 8);\n            let t1 = &t0 * &_110101;\n            let t2 = square_n(&t1, 4);\n            let t3 = &t2 * &_101;\n            let t4 = square_n(&t3, 10);\n            t4\n        };\n        let i4444 = {\n            let t0 = &_111001 * &i4424;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_11001;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_1011101;\n            t4\n        };\n        let i4471 = {\n            let t0 = square_n(&i4444, 7);\n            let t1 = &t0 * &_1101101;\n            let t2 = square_n(&t1, 11);\n            let t3 = &t2 * &_1110001;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let i4491 = {\n            let t0 = &_1100001 * &i4471;\n            let t1 = square_n(&t0, 2);\n            let t2 = &t1 * &_11;\n            let t3 = square_n(&t2, 15);\n            let t4 = &t3 * &_1010001;\n            t4\n        };\n        let i4515 = {\n            let t0 = square_n(&i4491, 5);\n            let t1 = &t0 * &_1101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_10011;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4532 = {\n            let t0 = &_1010011 * &i4515;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1110101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1010111;\n            t4\n        };\n        let i4561 = {\n            let t0 = square_n(&i4532, 8);\n            let t1 = &t0 * &_1010001;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_101101;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i4580 = {\n            let t0 = &_1100101 * &i4561;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_101111;\n            let t3 = square_n(&t2, 9);\n            let t4 = &t3 * &_111011;\n            t4\n        };\n        let i4605 = {\n            let t0 = square_n(&i4580, 6);\n            let t1 = &t0 * &_11111;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_1011;\n            let t4 = square_n(&t3, 11);\n            t4\n        };\n        let i4619 = {\n            let t0 = &_1000001 * &i4605;\n            let t1 = square_n(&t0, 7);\n            let t2 = &t1 * &_1101001;\n            let t3 = square_n(&t2, 4);\n            let t4 = &t3 * &_1011;\n            t4\n        };\n        let i4646 = {\n            let t0 = square_n(&i4619, 10);\n            let t1 = &t0 * &_1111101;\n            let t2 = square_n(&t1, 3);\n            let t3 = &t2 * &base;\n            let t4 = square_n(&t3, 12);\n            t4\n        };\n        let i4665 = {\n            let t0 = &_111001 * &i4646;\n            let t1 = square_n(&t0, 9);\n            let t2 = &t1 * &_1000101;\n            let t3 = square_n(&t2, 7);\n            let t4 = &t3 * &_1111011;\n            t4\n        };\n        let i4688 = {\n            let t0 = square_n(&i4665, 7);\n            let t1 = &t0 * &_1110011;\n            let t2 = square_n(&t1, 6);\n            let t3 = &t2 * &_100011;\n            let t4 = square_n(&t3, 8);\n            t4\n        };\n        let i4704 = {\n            let t0 = &_1001001 * &i4688;\n            let t1 = square_n(&t0, 8);\n            let t2 = &t1 * &_1011101;\n            let t3 = square_n(&t2, 5);\n            let t4 = &t3 * &_101;\n            t4\n        };\n        let i4731 = {\n            let t0 = square_n(&i4704, 11);\n            let t1 = &t0 * &_1111011;\n            let t2 = square_n(&t1, 5);\n            let t3 = &t2 * &_10101;\n            let t4 = square_n(&t3, 9);\n            t4\n        };\n        let i4747 = {\n            let t0 = &_1000011 * &i4731;\n            let t1 = square_n(&t0, 5);\n            let t2 = &t1 * &_10101;\n            let t3 = square_n(&t2, 8);\n            let t4 = &t3 * &_100101;\n            t4\n        };\n        let i4778 = {\n            let t0 = square_n(&i4747, 6);\n            let t1 = &t0 * &_10011;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_110111;\n            let t4 = square_n(&t3, 15);\n            t4\n        };\n        let i4797 = {\n            let t0 = &_1011011 * &i4778;\n            let t1 = square_n(&t0, 4);\n            let t2 = &t1 * &_111;\n            let t3 = square_n(&t2, 12);\n            let t4 = &t3 * &x9;\n            t4\n        };\n        let i4822 = {\n            let t0 = square_n(&i4797, 8);\n            let t1 = &t0 * &_1111101;\n            let t2 = square_n(&t1, 8);\n            let t3 = &t2 * &_1010111;\n            let t4 = square_n(&t3, 7);\n            t4\n        };\n        let result = {\n            let t0 = &_1011011 * &i4822;\n            let t1 = square_n(&t0, 10);\n            let t2 = &t1 * &_100011;\n            t2\n        };\n        result\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/pairing/final_exp_witness/bls12_381_final_exp_witness.rs",
    "content": "use super::addchain_pow_generated::bls12_381 as bls12_addchain;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree12ExtensionField;\nuse lambdaworks_math::field::element::FieldElement;\nuse num_bigint::BigUint;\n\npub fn pow_custom(\n    base: &FieldElement<Degree12ExtensionField>,\n    exponent: &BigUint,\n) -> FieldElement<Degree12ExtensionField> {\n    if exponent == &BigUint::from(0u64) {\n        return FieldElement::<Degree12ExtensionField>::one();\n    }\n    if exponent == &BigUint::from(1u64) {\n        return base.clone();\n    }\n\n    let mut result = FieldElement::<Degree12ExtensionField>::one();\n    let temp = base.clone();\n\n    let exponent_bytes = exponent.to_bytes_be();\n\n    for byte in exponent_bytes {\n        for i in (0..8).rev() {\n            result = result.square();\n\n            if (byte >> i) & 1 == 1 {\n                result = &result * &temp;\n            }\n        }\n    }\n\n    result\n}\n\n/// Takes a miller loop output and returns root, shift such that\n/// root ** lam = shift * mlo, if and only if mlo ** h == 1.\npub fn get_final_exp_witness(\n    mlo: FieldElement<Degree12ExtensionField>,\n) -> (\n    FieldElement<Degree12ExtensionField>,\n    FieldElement<Degree12ExtensionField>,\n) {\n    // Calculate shift and root\n    let shift = bls12_addchain::pow_h3_s(&mlo);\n    let root = bls12_addchain::pow_e(&(&shift * &mlo));\n\n    (root, shift)\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::definitions::BLS12381PrimeField;\n    use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::{\n        Degree2ExtensionField, Degree6ExtensionField,\n    };\n    use num_bigint::BigUint;\n    use num_traits::Num;\n\n    fn sample_element() -> FieldElement<Degree12ExtensionField> {\n        FieldElement::<Degree12ExtensionField>::new([\n            FieldElement::<Degree6ExtensionField>::new([\n                FieldElement::<Degree2ExtensionField>::new([\n                    FieldElement::<BLS12381PrimeField>::from_hex_unchecked(\"2\"),\n                    FieldElement::<BLS12381PrimeField>::zero(),\n                ]),\n                FieldElement::<Degree2ExtensionField>::zero(),\n                FieldElement::<Degree2ExtensionField>::zero(),\n            ]),\n            FieldElement::<Degree6ExtensionField>::zero(),\n        ])\n    }\n\n    #[test]\n    fn addchain_matches_pow_custom() {\n        let base = sample_element();\n        let h3_s = BigUint::from_str_radix(H3_S, 16).unwrap();\n        let e = BigUint::from_str_radix(E, 16).unwrap();\n\n        assert_eq!(bls12_addchain::pow_h3_s(&base), pow_custom(&base, &h3_s));\n        assert_eq!(bls12_addchain::pow_e(&base), pow_custom(&base, &e));\n    }\n\n    const H3_S: &str = \"4c6694e4b592105c07d08efdd66cdf6b27a928fadb7f89cb2c5de938974a9b00eab7884baa54ea85455a82368f7530de524d17386e734e82cf750c2bd228194946730ad59968daee6b65c84c061913753ece72abd1ec4ee31955ee519ebde1c30350fa074f36284b55f60f49d83d768ec95330d356fac2fb717b68bf76bd8efed7c907ee2d2507d12c6c8948b77abab9c1250ffcd8f64eecb22f47d0d1d3c39399eeb002355b9525fc9508c73ef082a325fa4faccd414c69208cfc4d3cb074cbfb327f6d82b81d18973336a28eab2d6f10d6233dc5d3624b226d9c193efcb76e4075b4d11b9d21c74d5e11000ff7ccf94859dd2fff766f9193bd254b812aacfeb0b4229d15e60372cc338d22b0d2c6267403d9b1517b99f1ca7257c3b31ca6b881c43845f668f6c66a15f26364ce56ec1689ef5f2b1a013f7591197a4b4c3e69046f622407cbb0a82ed97e044826c4e7af7613fc5966c331ec72e23206d41e1ba53f66c08229ab9146491545812c8ae65aab68847e843a73a904fd60ad8d281c783b309f45587930e7c0882818509193ed294f7388a43206c95a9c3a3bdc3a328d93a7ffdebea143aa81a26d10d4d358c7ef0867b40a59e5b8738e1aa363aed49c65ac62fc282e6b69e55eb935ad200614b088c97e07cf5b5847810d646b1efe54084a889bb4506a0322fbea11d7f897145eb99528051fe44630de859c07e6ea022bc087f5d9df187f516a641330f2e1e842d73546cefb808890f0\";\n    const E: &str = \"4ea48ccb940d75d40a077222142ac1801c949d8a72692b8d18d58efc4e91d7468d4790d46fda1e16fb958875e528ac2412d477a8bba4f42f4d8974066c5b338d11e220b18f69bd487a02afa70dcd395814cc0c89def3e07ff5e35a7b93fc9ccc5cd0d8d5d230c454517eb4362f49e4dd57cf6c7a07bc5b60e1ed38987f26d6b7de5b55f1bd69c020b890062c27b262ebbdcb0c7ffac9d4f6359297f82b66fd5a502089acaab294577b5f1767bcb0d7498e2482e9d43d3b7ad9af625893e10ca8e4873164e6c398c568675b06d087dcd3618e427dc912d6e44a7fab03c5be4d379339f30b41c4306d335cb623fb3f871de4d8e5851646957b8a14f56835191eddcb197faf9e06161c9a4afc10e35f0ec2b3fc7a7cc854792a8a9c522c1761964cb5c1f1f2e39dc4a2ef853827919600415dabdb1ec1adbd1d7fd6b0770409ca39863bc39f0afd39b4ffa61afba66f18e3f079803d6f68b235ee04c1ed8552dabf485b534941f4877fe7756ebe22bd36eae8284d23e0efdaa215a69525a8b21e58a3059d0c7f1ca9e35adf3a2884afb4610957be2d1a56bba3476aeb46944b9ccc52a999e18f6141e75e6151402e2ea408490f83e8ba0fa4956270d98cab8b6b547ac1b15941c1d1cc14bb00bd017f6f550316859b798d4030a925b32a68a4a67f55a88e6aa1c8c9776871c3805168994fad7512d0cabc76f961074d8fa40e48bef9c692ba50f7521d49533700b6e3fefaaf6c23\";\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/pairing/final_exp_witness/bn254_final_exp_witness.rs",
    "content": "use super::addchain_pow_generated::bn254 as bn254_addchain;\nuse crate::definitions::BN254PrimeField;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::{\n    Degree12ExtensionField, Degree2ExtensionField, Degree6ExtensionField,\n};\nuse lambdaworks_math::field::element::FieldElement;\n\n/// Algorithm for computing λ residues over BN254 curve\n/// Input: Output of a Miller loop f\n/// Output: (c, wi) such that c ** λ = f * wi\npub fn get_final_exp_witness(\n    f: FieldElement<Degree12ExtensionField>,\n) -> (\n    FieldElement<Degree12ExtensionField>,\n    FieldElement<Degree12ExtensionField>,\n) {\n    let w = get_27th_root();\n    let mut c = f.clone();\n    let mut ws = FieldElement::<Degree12ExtensionField>::one();\n\n    if bn254_addchain::pow_exp(&c) != FieldElement::<Degree12ExtensionField>::one() {\n        c = &c * &w;\n        ws = &ws * &w;\n        if bn254_addchain::pow_exp(&c) != FieldElement::<Degree12ExtensionField>::one() {\n            c = &c * &w;\n            ws = &ws * &w;\n        }\n    }\n\n    c = bn254_addchain::pow_r_m_d_inv(&c);\n    (find_cube_root(c, w), ws)\n}\n\nfn get_27th_root() -> FieldElement<Degree12ExtensionField> {\n    FieldElement::<Degree12ExtensionField>::new([\n        FieldElement::<Degree6ExtensionField>::new([\n            FieldElement::<Degree2ExtensionField>::zero(),\n            FieldElement::<Degree2ExtensionField>::zero(),\n            FieldElement::<Degree2ExtensionField>::new([\n                FieldElement::<BN254PrimeField>::from_hex_unchecked(\n                    \"1223c9e5932f55ff4c5bb93e3ae400abc8ff620b6cd0ba64515fe1909e9f8e51\",\n                ),\n                FieldElement::<BN254PrimeField>::from_hex_unchecked(\n                    \"279a0a9dbd98089c184dac0e71909eb223ea52bfc24790f6d545aed52a2fbdb8\",\n                ),\n            ]),\n        ]),\n        FieldElement::<Degree6ExtensionField>::zero(),\n    ])\n}\n\nfn find_cube_root(\n    a: FieldElement<Degree12ExtensionField>,\n    w: FieldElement<Degree12ExtensionField>,\n) -> FieldElement<Degree12ExtensionField> {\n    let a_inv = a.inv().unwrap();\n    let we = bn254_addchain::pow_exp0(&w);\n    let mut x = bn254_addchain::pow_exp0(&a);\n    let mut t = pow_3_ord(&(&x.pow(3u64) * &a_inv));\n    while t != 0 {\n        x = &x * &we;\n        t = pow_3_ord(&(&x.pow(3u64) * &a_inv));\n    }\n    x\n}\n\nfn pow_3_ord(a: &FieldElement<Degree12ExtensionField>) -> usize {\n    let mut a = a.clone();\n    let mut t = 0;\n    while a != FieldElement::<Degree12ExtensionField>::one() {\n        a = a.pow(3u64);\n        t += 1;\n    }\n    t\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use num_bigint::BigUint;\n    use num_traits::Num;\n\n    // Optimized implementation of exponentiation using square-and-multiply algorithm\n    // with binary representation scanning\n    fn pow_custom(\n        base: &FieldElement<Degree12ExtensionField>,\n        exponent: &BigUint,\n    ) -> FieldElement<Degree12ExtensionField> {\n        if exponent == &BigUint::from(0u64) {\n            return FieldElement::<Degree12ExtensionField>::one();\n        }\n        if exponent == &BigUint::from(1u64) {\n            return base.clone();\n        }\n\n        let mut result = FieldElement::<Degree12ExtensionField>::one();\n        let temp = base.clone();\n\n        // Use bytes directly instead of string conversion for better performance\n        let exponent_bytes = exponent.to_bytes_be();\n\n        for byte in exponent_bytes {\n            for i in (0..8).rev() {\n                result = result.square();\n\n                if (byte >> i) & 1 == 1 {\n                    result = &result * &temp;\n                }\n            }\n        }\n\n        result\n    }\n\n    fn sample_element() -> FieldElement<Degree12ExtensionField> {\n        FieldElement::<Degree12ExtensionField>::new([\n            FieldElement::<Degree6ExtensionField>::new([\n                FieldElement::<Degree2ExtensionField>::new([\n                    FieldElement::<BN254PrimeField>::from_hex_unchecked(\"2\"),\n                    FieldElement::<BN254PrimeField>::zero(),\n                ]),\n                FieldElement::<Degree2ExtensionField>::zero(),\n                FieldElement::<Degree2ExtensionField>::zero(),\n            ]),\n            FieldElement::<Degree6ExtensionField>::zero(),\n        ])\n    }\n\n    #[test]\n    fn addchain_matches_pow_custom() {\n        let base = sample_element();\n        let exp = BigUint::from_str_radix(EXP, 16).unwrap();\n        let exp0 = BigUint::from_str_radix(EXP0, 16).unwrap();\n        let r_m_d_inv = BigUint::from_str_radix(R_M_D_INV, 16).unwrap();\n\n        assert_eq!(bn254_addchain::pow_exp(&base), pow_custom(&base, &exp));\n        assert_eq!(bn254_addchain::pow_exp0(&base), pow_custom(&base, &exp0));\n        assert_eq!(\n            bn254_addchain::pow_r_m_d_inv(&base),\n            pow_custom(&base, &r_m_d_inv)\n        );\n    }\n\n    // (q ** k - 1) / 3\n    const EXP: &str = \"2fae42e4973924a5d67a5d2596440dd3153897c68d516d062f8015f36c3fc152a73114859eb4cec3eff8e12f119e6b3b6373de8dfb0178e622c3aaf9212aff3b863cdce2f19e45304da0689789b99a5c06b47a88ae84ed08d6375382d5b43e8559e471ed9edafa93168993756f755226d1fb5139f370bd1df6206ad8eb5de835af494b06108d38b7277eb44eca38d36e079b3574999625bea8196289db44b431aae371e85680fa342f7100bba591589f02cf8ecb79868d7443cc60fe8f47559371ceb7cb43c85c4759d9070063939f77b19cd8e05a93bf3094d3d5518628d5a19e9c247d98c4be6bdd2b8801788ce9faea263de92133df7ebbc224e9753aa9ef14c0ae51fac5266c00ed4ded7ce442caa657048173fabe2a396c821ee1dc6e7821edb8a5c6030fad438f6730455aa926463b3f1adb189f37c0ecd514e9f49699c7d2e3b274dcd3d267739953ce9f65a41395df713745bdaf039c199f69e6a6b1d46fc408cb6973b1dfda111a7c09504ce57838ff3eb46f64643825060\";\n    // (s + 1) / 3\n    const EXP0: &str = \"1c41570c33b015b79b8ae1dd628724a303180e16d87c1aae550988446612d16063139a622528c66125e8d14b4ccfa7d757611b9681c7fbcabf448b3e4c8b41ea6282e1b5e483b739118e76de8a80f32d0d746e89e2ad95f2460dd2ac58b6a9ca483b85e2253f6514cafc3174ffadd1de1d9e6905e5982437ae4c196419b2e86baa3e6558ed5d2b1733d94e67944799bc7649033b9d62752e9c80d218cdc9e60a783aee2added9dc01c1d09ea7513c2bd0b25a9f3d63cc59a3b23c7b34b6ca47d4cec46fd31a623b8811850003b02259c43537709b0ef41e3e66a915fb7cc58aba05c8766df452e78ceea638f1807a7196e4f8cfbedbfecbce10ac08a586e9d9728be087c6eadb7f42679a9704a028665203390e46aa78d2280d80141b540417698d8b945caac7b1157716c8e61fcd603b7d741d7069354deab370302e9747f2bb8c8d2c8911a907caf15187d83ecae026a6bc6c7d4e6f5255778f2bd483cd48f4e7b1ed5cddfacdb2f51d13f1a187b6ff0473e387102a0d331e861cb\";\n\n    // r_inv * m_dash_inv\n    const R_M_D_INV: &str = \"40d1e99cd525608c71cde087ba1c0a1e85458467c2fd0c5f611fe6c8220475c036871fb7dfdaac5fa6f3b7af30db17e9514a4d30b72e03a39e709c2cfe852f9c822d3521471b55256049059e6d30de40aec73f5e0555a15603b3a3c26108159c65db3cad9e79c4cec4b5bb0451361c8bb1766d84f873c7479e244c1c4ce26fa40ee8c30bdcb670e368e3a540d126a882d9bcf4530ad9ba18f01f5191d84e6f1ce76b68c8c4862183341c42aec2ef6eabb72fe9cbacad4165e5f06f91873a3f53f97b1baced23deb8fe16e443a7d20359d8d9c2c4c7f76c2cdf0dab3d19889c8dfc9f9af1729273af7ade4616b947f58692410c9e004cd770faa6e0d349cc2a343022003c8e41d7753487c9c0b6aa231e8440939a400333329db1d0af2d2bce56e58da22490e81584223e90bdbb16953cd02ac5abaa37e5d43c3017de195816c1130f439a8ede2456484d269f99b85e3861ee17fccf70b3bfa66540ab5b17bc3e4ee7ca63d528ef0ce38818c3dfb091ea0e5ae677a94d11680d2a55051203606c835b7add89effe054b46da9fc09404fe5b17bc76ca22e896513d71429a78379face82c0ad99b03cea741b9be93546909bdcc76c1af25c63a3ed7f46d0e2bdbb46d0be45ffc9c011320f2902f5ff575a178332d30ae50878d68bbf6da52bb8e570318fc937dbfa565661b51c305bd849dc129bf149a2f7e4c092a2eb529ca2226e2ffa31ad233044010b9f1db69db43907c66540780fb9ac8f703fa0ce334fb3fe42fcc4cffc1b1e3fd814477de35d5a366eaae5e50cd083d65983092561ca6e1fef176b9f29acc032ea94f43e174bd3f6dafb52c74db67694d813c5551bdfcedbb35ec1147bc833f2d2e1513eddd68cb9966671e4a6d4f97327c7bb95af32e875bcadc50ae726c1eb2575712a5d3d521dc2ced6e1be7dd5e8a0dbe15d89c0dfb4dadc220e391c8b45d752a442f054029185269cbffa1de7d17\";\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/pairing/final_exp_witness/mod.rs",
    "content": "#[allow(clippy::all)]\npub mod addchain_pow_generated;\npub mod bls12_381_final_exp_witness;\npub mod bn254_final_exp_witness;\nuse crate::definitions::{BLS12381PrimeField, BN254PrimeField};\nuse crate::io::{element_from_biguint, element_to_biguint};\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254;\n\nuse lambdaworks_math::field::element::FieldElement;\nuse num_bigint::BigUint;\n\npub fn to_bn(v: FieldElement<bn_254::field_extension::Degree12ExtensionField>) -> [BigUint; 12] {\n    let [c0, c1] = v.value();\n    let [c0b0, c0b1, c0b2] = c0.value();\n    let [c1b0, c1b1, c1b2] = c1.value();\n    let [c0b0a0, c0b0a1] = c0b0.value();\n    let [c0b1a0, c0b1a1] = c0b1.value();\n    let [c0b2a0, c0b2a1] = c0b2.value();\n    let [c1b0a0, c1b0a1] = c1b0.value();\n    let [c1b1a0, c1b1a1] = c1b1.value();\n    let [c1b2a0, c1b2a1] = c1b2.value();\n    [\n        element_to_biguint(c0b0a0),\n        element_to_biguint(c0b0a1),\n        element_to_biguint(c0b1a0),\n        element_to_biguint(c0b1a1),\n        element_to_biguint(c0b2a0),\n        element_to_biguint(c0b2a1),\n        element_to_biguint(c1b0a0),\n        element_to_biguint(c1b0a1),\n        element_to_biguint(c1b1a0),\n        element_to_biguint(c1b1a1),\n        element_to_biguint(c1b2a0),\n        element_to_biguint(c1b2a1),\n    ]\n}\n\npub fn to_bls(\n    v: FieldElement<bls12_381::field_extension::Degree12ExtensionField>,\n) -> [BigUint; 12] {\n    let [c0, c1] = v.value();\n    let [c0b0, c0b1, c0b2] = c0.value();\n    let [c1b0, c1b1, c1b2] = c1.value();\n    let [c0b0a0, c0b0a1] = c0b0.value();\n    let [c0b1a0, c0b1a1] = c0b1.value();\n    let [c0b2a0, c0b2a1] = c0b2.value();\n    let [c1b0a0, c1b0a1] = c1b0.value();\n    let [c1b1a0, c1b1a1] = c1b1.value();\n    let [c1b2a0, c1b2a1] = c1b2.value();\n    [\n        element_to_biguint(c0b0a0),\n        element_to_biguint(c0b0a1),\n        element_to_biguint(c0b1a0),\n        element_to_biguint(c0b1a1),\n        element_to_biguint(c0b2a0),\n        element_to_biguint(c0b2a1),\n        element_to_biguint(c1b0a0),\n        element_to_biguint(c1b0a1),\n        element_to_biguint(c1b1a0),\n        element_to_biguint(c1b1a1),\n        element_to_biguint(c1b2a0),\n        element_to_biguint(c1b2a1),\n    ]\n}\n\npub fn get_final_exp_witness(curve_id: usize, f: [BigUint; 12]) -> ([BigUint; 12], [BigUint; 12]) {\n    let [f_0, f_1, f_2, f_3, f_4, f_5, f_6, f_7, f_8, f_9, f_10, f_11] = f;\n\n    if curve_id == 0 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::{Degree12ExtensionField, Degree6ExtensionField, Degree2ExtensionField};\n\n        let f = FieldElement::<Degree12ExtensionField>::new([\n            FieldElement::<Degree6ExtensionField>::new([\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_0),\n                    element_from_biguint::<BN254PrimeField>(&f_1),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_2),\n                    element_from_biguint::<BN254PrimeField>(&f_3),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_4),\n                    element_from_biguint::<BN254PrimeField>(&f_5),\n                ]),\n            ]),\n            FieldElement::<Degree6ExtensionField>::new([\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_6),\n                    element_from_biguint::<BN254PrimeField>(&f_7),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_8),\n                    element_from_biguint::<BN254PrimeField>(&f_9),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_10),\n                    element_from_biguint::<BN254PrimeField>(&f_11),\n                ]),\n            ]),\n        ]);\n        let (c, wi) = bn254_final_exp_witness::get_final_exp_witness(f);\n\n        return (to_bn(c), to_bn(wi));\n    }\n\n    if curve_id == 1 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::{Degree12ExtensionField, Degree6ExtensionField, Degree2ExtensionField};\n\n        let f = FieldElement::<Degree12ExtensionField>::new([\n            FieldElement::<Degree6ExtensionField>::new([\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_0),\n                    element_from_biguint::<BLS12381PrimeField>(&f_1),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_2),\n                    element_from_biguint::<BLS12381PrimeField>(&f_3),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_4),\n                    element_from_biguint::<BLS12381PrimeField>(&f_5),\n                ]),\n            ]),\n            FieldElement::<Degree6ExtensionField>::new([\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_6),\n                    element_from_biguint::<BLS12381PrimeField>(&f_7),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_8),\n                    element_from_biguint::<BLS12381PrimeField>(&f_9),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_10),\n                    element_from_biguint::<BLS12381PrimeField>(&f_11),\n                ]),\n            ]),\n        ]);\n        let (c, wi) = bls12_381_final_exp_witness::get_final_exp_witness(f);\n        return (to_bls(c), to_bls(wi));\n    }\n\n    panic!(\"Curve ID {} not supported\", curve_id);\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::definitions::{BLS12381PrimeField, BN254PrimeField, FieldElement};\n    use crate::io::element_to_biguint;\n\n    #[test]\n    fn get_final_exp_witness_1() {\n        let x = [\n            \"0x1783da1d016c7d380bab8db21a4f525528f83278c6254b13db77fe8107a60be8\",\n            \"0x4416c4d771078798075d9cc460c7e56f7f542684531e2ee2edbac2c6ebbdbaa\",\n            \"0xaea0397220f7c7c61e7177abe59b7dfae731041bb381ea6993f45b251ae79ce\",\n            \"0x29b9c51055891c1a3b737806faf180242ad61412f5085b626fc947d8aee4d4c5\",\n            \"0xa6cd400de616117bc7c37de0c125e55223b735265eca4e175be078132ad0392\",\n            \"0x28c17a415e6aab151f632943c971274916c89f88e0826a7ad992060e110cf9a8\",\n            \"0x218f7d922f219475c106f110a215a256f4c6853d96d4691f93ef8def3553244d\",\n            \"0x18ba4cb6edcb80bdd3f053158786731fd54bd02afc16a4d65e82d41ee8f71269\",\n            \"0x3ade11ccef2e9df15c2b9fa6144b5c707dd49b92fb62a4382f3c2e94ac20c84\",\n            \"0x201b5f896062f80674ac89dc04ef8753139fbf37db26c3c7c9614977f007260d\",\n            \"0x11f27b345af3ee8d876267a812b60c46c3868500f2e402d0493bc689dd6c5277\",\n            \"0x2cde97e8c9b263ffbcb53d46c4ed015fdeeb692d8fbf301ad8dc0c1e656d5c27\",\n        ];\n        let y = [\n            \"0x245ada43681e3fbfea7633e5b99e404689d12f34fdc497e0c8b1e9d7c0e70147\",\n            \"0x1750bd450b85cbd62ea3f1b228beff5fd364a127d6054be99a9248497b82062a\",\n            \"0x5fa554b43f992af3cafd815d8f8599a376aad62d4b1d5ce72258252c571032\",\n            \"0x28d156bac04e64938816b055888399c99a954b82724e5f5589d549a709b2b5ef\",\n            \"0x1cd18658560e13f8683504c35d79e2f868d084e0e5a1b8af88d272078bbdb360\",\n            \"0x14853f940bf5c557c7f558d3e74e6617d7f08b54fd83597fed1d7e7b9d09e04\",\n            \"0x212503c88e25ac77cdc82120a45b9d5886f287f15e649d4f8488d7e2b856b2fa\",\n            \"0x1248cfad33a2147726169d3ce55db12ecafd74bc4b83377c168d89b919386546\",\n            \"0x2b8d7a45d0b0b47e0c1f391b0bacd25e7f882f16085c7c9099e4ba82d71bf23e\",\n            \"0x39e1ab153bd709556afece475580f453f9126f256fbb49c235bc75082f5f26e\",\n            \"0x2cd3e748118f3965ceaf7fd505e039f23e7d6d69f8ceb25d288d1f797012a4cb\",\n            \"0xaa480d613601947fee14a3ce2b7af4e1872fe49ae3473546aa01a618b78b125\",\n        ];\n        let z = [\n            \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n        ];\n        let x = x\n            .into_iter()\n            .map(|v| element_to_biguint(&FieldElement::<BN254PrimeField>::from_hex(v).unwrap()))\n            .collect::<Vec<_>>();\n        let xy = y\n            .into_iter()\n            .map(|v| element_to_biguint(&FieldElement::<BN254PrimeField>::from_hex(v).unwrap()))\n            .collect::<Vec<_>>();\n        let xz = z\n            .into_iter()\n            .map(|v| element_to_biguint(&FieldElement::<BN254PrimeField>::from_hex(v).unwrap()))\n            .collect::<Vec<_>>();\n        let (y, z) = get_final_exp_witness(0, x.try_into().unwrap());\n        assert_eq!(y.to_vec(), xy);\n        assert_eq!(z.to_vec(), xz);\n    }\n\n    #[test]\n    fn get_final_exp_witness_2() {\n        let x = [\"0x189edeac1525a5256ae8c76a82b4df330e0fdac10c95d7fb5f01e6c6b243a52cc62f55f9b74e8bcef7cf857ec72dce93\", \"0x1c5cc475a78741fb935272142f80370ecc6a698ef863d33e5e187f3cd4fcdb91c49236aafcce6c2b7e91ff0678305ee\", \"0x38f22b3f8377694c4b17bbea3afd26c71d6c07f64c4661a0d8d77bc9f8f1752bfcbe1e3c6ab95b6eb522fa601ea9305\", \"0x431d707ff3a55977c4868bc4de8c336ecf67b804ac90c2c739ff85161bbe9a730e3021edaed5902502eb385ea4cc50c\", \"0x14a833d75d7614710c13c79f3df94ae7d9fa9ec20fa02356381fd6755be5a71ca30e230a1bece62346f0bcfa0f10c949\", \"0x12bd3ae4a4aca5e0db13fd94c2c2b0127ee3d7d9491d3fa7faa9fb6046a0543f1092c5761636021e091d1a18beeccfba\", \"0x8577fff37edfad39505f3c47bd6df6fdd80d5f75aff4efd05edf11725abf6458c140d50d4b33c0560aaed4d8167373b\", \"0x71ad85945ebc453009cb5cf204e41fa0caf2075fc94cf9a57b2460ca293b6eb5c12df3ceb0d17ca563eb044181077c\", \"0xe17d78c3c7663a52347558b81f589708ad2e84bd32830f61b9d25f1d8f2fe668f9548e4f6bc8a2a6cbf63f72e538a1\", \"0x15b2f2eca1e3e6c52dc3e40ccdef2f63d0085c459442bdbf592cb6df02973c4f21c96db9ee3d7084d33b0699d260eb06\", \"0x110cf0e03683bd834bf62dfa7717e01f244814560f4bd540f96ab24703ecc763272a2594a640383e1496b1d6cbdd032f\", \"0xc54fb45e0131b724250f6b3cf02d8287133dd162bf106ab6ed3d3101b20f9045c77b25ad127a0e193d95f573796e10\"];\n        let y = [\"0x12deecbe6648e28516e35daa1e0c318027b97f93995f24274523f4382c02ce6aacce3efefec37100737f82dfe340a4d3\", \"0xb417c5f4b0e31cdc36e64f4220554380793013c3a3a18557ce659630295c5e67e4cc6131699b575e3435a2c495d3d34\", \"0x21b2745b9213155921a4e4f1f78aa93aacf1acab10c8f49685f617c0c881fd11ccb4a00d6198229a0f329755fdaa894\", \"0x174ce865876ea77ee960d6a7b9eada1e4b8afab93489903fbed3dd36c52f4b70fc0d52418a67418ee47875805d80b77d\", \"0x11307f8213b5a5cf011068461c937525fcc1bac74e8440a0011e899805c83143f52e11e2540f90027da0a3795bdbc359\", \"0x1976eebc878d175bc93678c0985755703c9866091b78ec8bef5f8948f3b6fa174a284c65e9913a4346aa72b17c319aa\", \"0xa35d36af451eb622dc96a60848761402315cca37f2fa9e861fb1ac89348be93bf05793ed4ac0c9fd9de3befa4f2577c\", \"0x36837217109690a2f7f6cd5df81e0f5d49597d200624b374626abf6d941253feb172c215a05d52f76a75caf3b6ea5d2\", \"0x3f0bccdc44d95bf26b464dcc1a586b8521061565c1ee05cfba8cb30479aaf08448f6451ea7fdc3fff0efd54f27ec0fb\", \"0xb98f31f1bce837a3fee2cd18f3d43a542e2b386b893be959d87e1541dd78939de6b6e3050e52f17111ab805cf5c0434\", \"0x177f4b467a8559f03d1ce53454a64dd7a5fdc0e2a0d2cb6593184986d2dcc78dab7bf8e95a1e41b3ed044ebe3aa84c2f\", \"0xb26abddfd9c70b423b180f3ea13c507dbe3396e795d2f2f8a303718e823dfb73f1073bdf99057642a29280f237244ef\"];\n        let z = [\"0x0\", \"0x0\", \"0x18bc5b99f39cbf0fd8d087688e9a0930581e2c940247cd0991e7a80fe41d8f58d83f1513f1ca42a0e74df934924892fb\", \"0x18bc5b99f39cbf0fd8d087688e9a0930581e2c940247cd0991e7a80fe41d8f58d83f1513f1ca42a0e74df934924892fb\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\"];\n        let x = x\n            .into_iter()\n            .map(|v| element_to_biguint(&FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap()))\n            .collect::<Vec<_>>();\n        let xy = y\n            .into_iter()\n            .map(|v| element_to_biguint(&FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap()))\n            .collect::<Vec<_>>();\n        let xz = z\n            .into_iter()\n            .map(|v| element_to_biguint(&FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap()))\n            .collect::<Vec<_>>();\n        let (y, z) = get_final_exp_witness(1, x.try_into().unwrap());\n        assert_eq!(y.to_vec(), xy);\n        assert_eq!(z.to_vec(), xz);\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/pairing/multi_miller_loop.rs",
    "content": "use crate::algebra::extf_mul::{\n    e2_conjugate, nondeterministic_extension_field_div, nondeterministic_extension_field_mul_divmod,\n};\nuse crate::algebra::g1point::G1Point;\nuse crate::algebra::g2point::G2Point;\nuse crate::algebra::polynomial::Polynomial;\nuse crate::definitions::{CurveID, CurveParamsProvider};\nuse lambdaworks_math::field::element::FieldElement;\nuse lambdaworks_math::field::traits::{IsField, IsPrimeField, IsSubFieldOf};\nuse lambdaworks_math::traits::ByteConversion;\n\n// Replaces elements in a list by zero where sparsity is not set\n// e.g. [1 2 3 4] [T F T F] => [1 0 3 0]\npub fn replace_by_zero_elements_given_sparsity<F: IsPrimeField>(\n    elmts: &[FieldElement<F>],\n    sparsity: &[bool],\n) -> Vec<FieldElement<F>> {\n    assert_eq!(sparsity.len(), elmts.len());\n    let mut result = vec![];\n    for i in 0..elmts.len() {\n        result.push(if sparsity[i] {\n            elmts[i].clone()\n        } else {\n            FieldElement::from(0)\n        });\n    }\n    result\n}\n\n// Removes elements from a list where sparsity is not set, it compacts the list\n// e.g. [1 2 3 4] [T F T F] => [1 3]\npub fn remove_and_compact_elements_given_sparsity<F: IsPrimeField>(\n    elmts: &[FieldElement<F>],\n    sparsity: &[bool],\n) -> Vec<FieldElement<F>> {\n    assert_eq!(sparsity.len(), elmts.len());\n    let mut result = vec![];\n    for i in 0..elmts.len() {\n        if sparsity[i] {\n            result.push(elmts[i].clone());\n        }\n    }\n    result\n}\n\npub fn extf_mul<F>(\n    ps: Vec<Polynomial<F>>,\n    r_sparsity: Option<Vec<bool>>,\n    qis: Option<&mut Vec<Polynomial<F>>>,\n    ris: Option<&mut Vec<Polynomial<F>>>,\n) -> Polynomial<F>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n{\n    let (q, r) = nondeterministic_extension_field_mul_divmod(12, ps);\n    let mut r = r.get_coefficients_ext_degree(12);\n    if let Some(r_sparsity) = r_sparsity {\n        r = replace_by_zero_elements_given_sparsity(&r, &r_sparsity);\n    }\n    let r = Polynomial::new(r);\n    if let Some(qis) = qis {\n        qis.push(q)\n    }\n    if let Some(ris) = ris {\n        ris.push(r.clone())\n    }\n    r\n}\n\npub fn extf_inv<F, E2, E6, E12>(\n    y: &Polynomial<F>,\n    qis: Option<&mut Vec<Polynomial<F>>>,\n    ris: Option<&mut Vec<Polynomial<F>>>,\n) -> Polynomial<F>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n    FieldElement<F>: ByteConversion,\n{\n    let one = Polynomial::one();\n    let y_inv = nondeterministic_extension_field_div(one, y.clone(), 12);\n    let (q, r) = nondeterministic_extension_field_mul_divmod(12, vec![y_inv.clone(), y.clone()]);\n    let r = Polynomial::new(r.coefficients); // removes trailing zero coefficients\n    assert_eq!(r, Polynomial::one());\n    if let Some(qis) = qis {\n        qis.push(q)\n    }\n    if let Some(ris) = ris {\n        ris.push(r)\n    }\n    y_inv\n}\n\npub fn conjugate_e12d<F: IsPrimeField>(f: Polynomial<F>) -> Polynomial<F> {\n    let e12d = f.get_coefficients_ext_degree(12);\n    Polynomial::new(vec![\n        e12d[0].clone(),\n        -&e12d[1],\n        e12d[2].clone(),\n        -&e12d[3],\n        e12d[4].clone(),\n        -&e12d[5],\n        e12d[6].clone(),\n        -&e12d[7],\n        e12d[8].clone(),\n        -&e12d[9],\n        e12d[10].clone(),\n        -&e12d[11],\n    ])\n}\n\npub fn precompute_consts<F: IsPrimeField>(\n    p: &[G1Point<F>],\n) -> (Vec<FieldElement<F>>, Vec<FieldElement<F>>) {\n    let mut y_inv = vec![];\n    let mut x_neg_over_y = vec![];\n    for point in p {\n        y_inv.push(point.y.inv().unwrap());\n        x_neg_over_y.push(-&(&point.x / &point.y).unwrap());\n    }\n    (y_inv, x_neg_over_y)\n}\n\nfn build_sparse_line_eval<F, E2>(\n    r0: &FieldElement<E2>,\n    r1: &FieldElement<E2>,\n    y_inv: &FieldElement<F>,\n    x_neg_over_y: &FieldElement<F>,\n) -> Polynomial<F>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    use crate::algebra::extf_mul::from_e2;\n    let curve_id = F::get_curve_params().curve_id;\n    let [r0x, r0y] = from_e2(r0.clone());\n    let [r1x, r1y] = from_e2(r1.clone());\n    let coefficients = match curve_id {\n        CurveID::BN254 => vec![\n            FieldElement::from(1),\n            &(&r0x + &(&-FieldElement::<F>::from(9) * &r0y)) * x_neg_over_y,\n            FieldElement::from(0),\n            &(&r1x + &(&-FieldElement::<F>::from(9) * &r1y)) * y_inv,\n            FieldElement::from(0),\n            FieldElement::from(0),\n            FieldElement::from(0),\n            &r0y * x_neg_over_y,\n            FieldElement::from(0),\n            &r1y * y_inv,\n            FieldElement::from(0),\n            FieldElement::from(0),\n        ],\n        CurveID::BLS12_381 => vec![\n            &(&r1x - &r1y) * y_inv,\n            FieldElement::from(0),\n            &(&r0x - &r0y) * x_neg_over_y,\n            FieldElement::from(1),\n            FieldElement::from(0),\n            FieldElement::from(0),\n            &r1y * y_inv,\n            FieldElement::from(0),\n            &r0y * x_neg_over_y,\n            FieldElement::from(0),\n            FieldElement::from(0),\n            FieldElement::from(0),\n        ],\n        _ => unimplemented!(),\n    };\n    Polynomial::new(coefficients)\n}\n\npub fn add_step<F, E2>(\n    qa: &G2Point<F, E2>,\n    qb: &G2Point<F, E2>,\n    y_inv: &FieldElement<F>,\n    x_neg_over_y: &FieldElement<F>,\n) -> (G2Point<F, E2>, Polynomial<F>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let λ = G2Point::compute_adding_slope(qa, qb);\n    let xr = &(&λ * &λ) - &(&qa.x + &qb.x);\n    let yr = &(&λ * &(&qa.x - &xr)) - &qa.y;\n    let p = G2Point::new_unchecked(xr, yr);\n    let line_r0 = λ.clone();\n    let line_r1 = &(&λ * &qa.x) - &qa.y;\n    let line = build_sparse_line_eval(&line_r0, &line_r1, y_inv, x_neg_over_y);\n    (p, line)\n}\n\npub fn line_compute_step<F, E2>(\n    qa: &G2Point<F, E2>,\n    qb: &G2Point<F, E2>,\n    y_inv: &FieldElement<F>,\n    x_neg_over_y: &FieldElement<F>,\n) -> Polynomial<F>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let λ = G2Point::compute_adding_slope(qa, qb);\n    let line_r0 = λ.clone();\n    let line_r1 = &(&λ * &qa.x) - &qa.y;\n\n    build_sparse_line_eval(&line_r0, &line_r1, y_inv, x_neg_over_y)\n}\n\npub fn double_step<F, E2>(\n    q: &G2Point<F, E2>,\n    y_inv: &FieldElement<F>,\n    x_neg_over_y: &FieldElement<F>,\n) -> (G2Point<F, E2>, Polynomial<F>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let λ = G2Point::compute_doubling_slope(q);\n    let xr = &(&λ * &λ) - &(&q.x + &q.x);\n    let yr = &(&λ * &(&q.x - &xr)) - &q.y;\n    let p = G2Point::new_unchecked(xr, yr);\n    let line_r0 = λ.clone();\n    let line_r1 = &(&λ * &q.x) - &q.y;\n    let line = build_sparse_line_eval(&line_r0, &line_r1, y_inv, x_neg_over_y);\n    (p, line)\n}\n\npub fn double_and_add_step<F, E2>(\n    qa: &G2Point<F, E2>,\n    qb: &G2Point<F, E2>,\n    y_inv: &FieldElement<F>,\n    x_neg_over_y: &FieldElement<F>,\n) -> (G2Point<F, E2>, Polynomial<F>, Polynomial<F>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let λ1 = G2Point::compute_adding_slope(qa, qb);\n    let x3 = &(&λ1 * &λ1) - &(&qa.x + &qb.x);\n    let line1_r0 = λ1.clone();\n    let line1_r1 = &(&λ1 * &qa.x) - &qa.y;\n    let num = &qa.y + &qa.y;\n    let den = &x3 - &qa.x;\n    let λ2 = -&(&λ1 + &(&num / &den).unwrap());\n    let x4 = &(&(&λ2 * &λ2) - &qa.x) - &x3;\n    let y4 = &(&λ2 * &(&qa.x - &x4)) - &qa.y;\n    let p = G2Point::new_unchecked(x4, y4);\n    let line2_r0 = λ2.clone();\n    let line2_r1 = &(&λ2 * &qa.x) - &qa.y;\n    let line1 = build_sparse_line_eval(&line1_r0, &line1_r1, y_inv, x_neg_over_y);\n    let line2 = build_sparse_line_eval(&line2_r0, &line2_r1, y_inv, x_neg_over_y);\n    (p, line1, line2)\n}\n\npub fn triple_step<F, E2>(\n    q: &G2Point<F, E2>,\n    y_inv: &FieldElement<F>,\n    x_neg_over_y: &FieldElement<F>,\n) -> (G2Point<F, E2>, Polynomial<F>, Polynomial<F>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let λ1 = G2Point::compute_doubling_slope(q);\n    let line1_r0 = λ1.clone();\n    let line1_r1 = &(&λ1 * &q.x) - &q.y;\n    let x2 = &(&λ1 * &λ1) - &(&q.x + &q.x);\n    let λ2 = &(((&q.y + &q.y) / &(&q.x - &x2)).unwrap()) - &λ1;\n    let line2_r0 = λ2.clone();\n    let line2_r1 = &(&λ2 * &q.x) - &q.y;\n    let xr = &(&λ2 * &λ2) - &(&q.x + &x2);\n    let yr = &(&λ2 * &(&q.x - &xr)) - &q.y;\n    let p = G2Point::new_unchecked(xr, yr);\n    let line1 = build_sparse_line_eval(&line1_r0, &line1_r1, y_inv, x_neg_over_y);\n    let line2 = build_sparse_line_eval(&line2_r0, &line2_r1, y_inv, x_neg_over_y);\n    (p, line1, line2)\n}\n\nfn bit_0_case<F, E2>(\n    f: &Polynomial<F>,\n    q: &[G2Point<F, E2>],\n    y_inv: &[FieldElement<F>],\n    x_neg_over_y: &[FieldElement<F>],\n) -> (Polynomial<F>, Vec<G2Point<F, E2>>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let mut new_lines = vec![f.clone(), f.clone()];\n    let mut new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1) = double_step(&q[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1);\n        new_points.push(t);\n    }\n    let new_f = extf_mul(new_lines, None, None, None);\n    (new_f, new_points)\n}\n\nfn bit_1_init_case<F, E2>(\n    f: &Polynomial<F>,\n    q: &[G2Point<F, E2>],\n    y_inv: &[FieldElement<F>],\n    x_neg_over_y: &[FieldElement<F>],\n) -> (Polynomial<F>, Vec<G2Point<F, E2>>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let mut new_lines = vec![f.clone(), f.clone()];\n    let mut new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1, l2) = triple_step(&q[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1);\n        new_lines.push(l2);\n        new_points.push(t);\n    }\n    let new_f = extf_mul(new_lines, None, None, None);\n    (new_f, new_points)\n}\n\nfn bit_1_case<F, E2>(\n    f: &Polynomial<F>,\n    q: &[G2Point<F, E2>],\n    q_select: &[G2Point<F, E2>],\n    y_inv: &[FieldElement<F>],\n    x_neg_over_y: &[FieldElement<F>],\n) -> (Polynomial<F>, Vec<G2Point<F, E2>>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let mut new_lines = vec![f.clone(), f.clone()];\n    let mut new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1, l2) = double_and_add_step(&q[k], &q_select[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1);\n        new_lines.push(l2);\n        new_points.push(t);\n    }\n    let new_f = extf_mul(new_lines, None, None, None);\n    (new_f, new_points)\n}\n\npub fn bn254_finalize_step<F, E2>(\n    qs: &[G2Point<F, E2>],\n    q: &[G2Point<F, E2>],\n    y_inv: &[FieldElement<F>],\n    x_neg_over_y: &[FieldElement<F>],\n) -> Vec<Polynomial<F>>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    use crate::algebra::extf_mul::to_e2;\n    let nr1p2 = to_e2([\n        FieldElement::<F>::from_hex(\n            \"2fb347984f7911f74c0bec3cf559b143b78cc310c2c3330c99e39557176f553d\",\n        )\n        .unwrap(),\n        FieldElement::<F>::from_hex(\n            \"16c9e55061ebae204ba4cc8bd75a079432ae2a1d0b7c9dce1665d51c640fcba2\",\n        )\n        .unwrap(),\n    ]);\n    let nr1p3 = to_e2([\n        FieldElement::<F>::from_hex(\n            \"63cf305489af5dcdc5ec698b6e2f9b9dbaae0eda9c95998dc54014671a0135a\",\n        )\n        .unwrap(),\n        FieldElement::<F>::from_hex(\n            \"7c03cbcac41049a0704b5a7ec796f2b21807dc98fa25bd282d37f632623b0e3\",\n        )\n        .unwrap(),\n    ]);\n    let nr2p2 = FieldElement::<F>::from_hex(\n        \"30644e72e131a0295e6dd9e7e0acccb0c28f069fbb966e3de4bd44e5607cfd48\",\n    )\n    .unwrap();\n    let nr2p3 = -FieldElement::<F>::from_hex(\n        \"30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd46\",\n    )\n    .unwrap();\n    let mut lines = vec![];\n    for k in 0..q.len() {\n        let q1x = nr1p2.clone() * e2_conjugate(q[k].x.clone());\n        let q1y = nr1p3.clone() * e2_conjugate(q[k].y.clone());\n        let q2x = nr2p2.clone() * q[k].x.clone();\n        let q2y = nr2p3.clone() * q[k].y.clone();\n        let (t, line1) = add_step(\n            &qs[k],\n            &G2Point::new_unchecked(q1x, q1y),\n            &y_inv[k],\n            &x_neg_over_y[k],\n        );\n        lines.push(line1);\n        let line2 = line_compute_step(\n            &t,\n            &G2Point::new_unchecked(q2x, q2y),\n            &y_inv[k],\n            &x_neg_over_y[k],\n        );\n        lines.push(line2);\n    }\n    lines\n}\n\npub fn miller_loop<F, E2>(p: &[G1Point<F>], q: &[G2Point<F, E2>]) -> Polynomial<F>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    assert_eq!(p.len(), q.len());\n\n    let (y_inv, x_neg_over_y) = precompute_consts(p);\n\n    let loop_counter = &F::get_curve_params().loop_counter;\n\n    let mut f = Polynomial::new(vec![\n        FieldElement::from(1),\n        FieldElement::from(0),\n        FieldElement::from(0),\n        FieldElement::from(0),\n        FieldElement::from(0),\n        FieldElement::from(0),\n        FieldElement::from(0),\n        FieldElement::from(0),\n        FieldElement::from(0),\n        FieldElement::from(0),\n        FieldElement::from(0),\n        FieldElement::from(0),\n    ]);\n    let mut qs;\n\n    let mut q_neg = vec![];\n    if loop_counter.contains(&-1) {\n        for point in q {\n            q_neg.push(point.neg());\n        }\n    }\n\n    let start_index = loop_counter.len() - 2;\n\n    if loop_counter[start_index] == 1 {\n        (f, qs) = bit_1_init_case(&f, q, &y_inv, &x_neg_over_y);\n    } else if loop_counter[start_index] == 0 {\n        (f, qs) = bit_0_case(&f, q, &y_inv, &x_neg_over_y);\n    } else {\n        unimplemented!();\n    }\n\n    for i in (0..start_index).rev() {\n        if loop_counter[i] == 0 {\n            (f, qs) = bit_0_case(&f, &qs, &y_inv, &x_neg_over_y);\n        } else if loop_counter[i] == 1 || loop_counter[i] == -1 {\n            let mut q_selects = vec![];\n            for k in 0..q.len() {\n                q_selects.push(if loop_counter[i] == 1 {\n                    q[k].clone()\n                } else {\n                    q_neg[k].clone()\n                });\n            }\n            (f, qs) = bit_1_case(&f, &qs, &q_selects, &y_inv, &x_neg_over_y);\n        } else {\n            unimplemented!();\n        }\n    }\n\n    let curve_id = F::get_curve_params().curve_id;\n    match curve_id {\n        CurveID::BN254 => {\n            let mut lines = bn254_finalize_step(&qs, q, &y_inv, &x_neg_over_y);\n            lines.insert(0, f);\n            f = extf_mul(lines, None, None, None);\n        }\n        CurveID::BLS12_381 => {\n            f = conjugate_e12d(f);\n        }\n        _ => unimplemented!(),\n    }\n\n    f\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::algebra::extf_mul::{from_e2, to_e2};\n    use crate::definitions::{BLS12381PrimeField, BN254PrimeField};\n\n    #[test]\n    fn test_extf_mul_1() {\n        let p = [\n            [\n                \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n            ],\n            [\n                \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n            ],\n            [\n                \"0x1\",\n                \"0x3049ed443e0ee79060270c9094ac6390a5c1ab3db65328a47174c6c33f6bd5f2\",\n                \"0x0\",\n                \"0xa279a60d390f263fa2b23afda6a2160c7af52ea6fdddb7ffe26ded0e216c821\",\n                \"0x0\",\n                \"0x0\",\n                \"0x0\",\n                \"0x146bccf3dc47e8eedf574326c5188ea8e4978a568116c9aa5b8517cdeb0e1f38\",\n                \"0x0\",\n                \"0x10b71d55b795eb0c1590286e48c412e3434b0def1afddfc8840541b6936825fd\",\n                \"0x0\",\n                \"0x0\",\n            ],\n            [\n                \"0x1\",\n                \"0x10b80d23f4e55970de219c8bb6cc99af9ca48837a7da389ff6e02693c8912bf3\",\n                \"0x0\",\n                \"0x1999e3b5911b71ef05b218f5be987ba6f43afb6a702ffca89c7a6643b411046f\",\n                \"0x0\",\n                \"0x0\",\n                \"0x0\",\n                \"0x2a00794e593076aab0ec5e6283a9ed0ddbe6ef97af88861febd351722d50802a\",\n                \"0x0\",\n                \"0x22583e5a131ce5504fbb720b2081781441eeb10978efac409e27787d1fa359b6\",\n                \"0x0\",\n                \"0x0\",\n            ],\n        ];\n        let xf = [\n            \"0x11d12be7502f97a642a86eb73802fe0fe4772283c9e66f3d535534c22390e0ca\",\n            \"0x109dabf551c2a0d785f86365c9f7a4e2aae4c8e3f5bb96b72c3461402f80049e\",\n            \"0x15e06e6b765f21da4c21d50705a9bf0f72ba0283f93e75a896235fa107d4ca4d\",\n            \"0x23c17e1664ac6452ffdd3ca599029d07bbea4e54e00dd8289aa145149627cc90\",\n            \"0x751d37ad50cc00d6245f08ca81ce16f9a3714c3efe87c95ae8e132234b5dd07\",\n            \"0x0\",\n            \"0x1535e3c0e51be5f14093e8501425031896dfb26ec8759e3409e44e94d81e17cf\",\n            \"0xe07f7cf5446bf6fd7f35bd2c741235928fd0f5cc82d853d0b37dd293fe1a21b\",\n            \"0x2eae2d9b2332fb1f1c3617826ac6ede574d04ed01692a36b9743fc604b3f3bf\",\n            \"0x2ab0d3ce9813032acfb54c2e7c43299edb854672b7bc17be60c2e1cda8e826c\",\n            \"0x1f316d8807400efe60a15b7e5311a9031439eb344c0d84fb80044f8786d59de4\",\n            \"0x0\",\n        ];\n        let p: Vec<Polynomial<BN254PrimeField>> = p\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let f = extf_mul(p, None, None, None);\n        assert_eq!(f, xf);\n    }\n\n    #[test]\n    fn test_extf_mul_2() {\n        let p = [[\"0xc71fb5b76cf57e5c7c9dbbd201062289f97dedce8bbb72d15abaec86c40039d3b4f3fccb7338ff3e7701b7f6619769b\", \"0x129a0a7e9efe3f397b5dbcae1f22f39c0cbcf4d183ead8de682a7571560cc28f2c13ecc7628b11dda4fcc3eaef203a45\", \"0x162ca20e57a4ad07f919b85c9975acd11d5f0cddd22192ebc465e5a89a0546be2ec98581fcda54c808aa8790189addd6\", \"0x10a05ef6bc41b1ac2ba68a585a4c7016589ffad9c5412bf00fd0f50f8ac9ea3d9a7db639e62eae3ca960447fb588a60b\", \"0x16dbc5bd5769b32d94959f3a71085f5adc66454928e158caeecda06706afd32cea844001820431c1f3534760c01c3ce5\", \"0x199988fcc386f48448a34d747599bd68a9bb4993cc0e6d2434e9182475096fe323352ae743be4cec47278fbbb8d52f52\", \"0x189109c92dac219f6b362d169e4ca995bbd0536c8727610f0f361f3490e9d41a94c69d397c1401b31b5a973bc393f3b1\", \"0x19ea64dde64bbb01d1072ca0532cbe26f8227deaf22155b2ba4bacf79ec45d43bbecca1bb35c6efdd163d6d7ff862979\", \"0xd9b819680b2cfa830393d2a883cbf07d691020e2a01580c62c9bb1869a1c40317ab6b0df57ff873f2b4bc93d71985e5\", \"0x704a7bc9193e53c9dde39b3a0a34d0e76345261a4caa612bb3ee39b3715a0d649760f83a32b24cc4b37fe549e80afde\", \"0x117957ce838607a66a58785c7af8af5a2d3a1832a559f19b20af84c9a5e968cabea23dd6815968b93234b9b34f8108e1\", \"0xae22d05bd7cd226ba438387b13606f1ad88319c787ccdcec28ab4de6e9bd5fd1ede497ebb746c3313cd6655b961689d\"], [\"0xc71fb5b76cf57e5c7c9dbbd201062289f97dedce8bbb72d15abaec86c40039d3b4f3fccb7338ff3e7701b7f6619769b\", \"0x129a0a7e9efe3f397b5dbcae1f22f39c0cbcf4d183ead8de682a7571560cc28f2c13ecc7628b11dda4fcc3eaef203a45\", \"0x162ca20e57a4ad07f919b85c9975acd11d5f0cddd22192ebc465e5a89a0546be2ec98581fcda54c808aa8790189addd6\", \"0x10a05ef6bc41b1ac2ba68a585a4c7016589ffad9c5412bf00fd0f50f8ac9ea3d9a7db639e62eae3ca960447fb588a60b\", \"0x16dbc5bd5769b32d94959f3a71085f5adc66454928e158caeecda06706afd32cea844001820431c1f3534760c01c3ce5\", \"0x199988fcc386f48448a34d747599bd68a9bb4993cc0e6d2434e9182475096fe323352ae743be4cec47278fbbb8d52f52\", \"0x189109c92dac219f6b362d169e4ca995bbd0536c8727610f0f361f3490e9d41a94c69d397c1401b31b5a973bc393f3b1\", \"0x19ea64dde64bbb01d1072ca0532cbe26f8227deaf22155b2ba4bacf79ec45d43bbecca1bb35c6efdd163d6d7ff862979\", \"0xd9b819680b2cfa830393d2a883cbf07d691020e2a01580c62c9bb1869a1c40317ab6b0df57ff873f2b4bc93d71985e5\", \"0x704a7bc9193e53c9dde39b3a0a34d0e76345261a4caa612bb3ee39b3715a0d649760f83a32b24cc4b37fe549e80afde\", \"0x117957ce838607a66a58785c7af8af5a2d3a1832a559f19b20af84c9a5e968cabea23dd6815968b93234b9b34f8108e1\", \"0xae22d05bd7cd226ba438387b13606f1ad88319c787ccdcec28ab4de6e9bd5fd1ede497ebb746c3313cd6655b961689d\"], [\"0xed2ad16fd30c6bae9d4659d084faa4e8bbce72d77ce2867a8ccd2916078758f11a33bf3f6acad21af21aafd4dbe67c1\", \"0x0\", \"0x143159d9a3967261ec92e14b1108686052cbe30a24c1142a087b498252aaef8b03b69ea297bc174eb69de56e7a594cfa\", \"0x1\", \"0x0\", \"0x0\", \"0xd2c6c6d4383235e52ea373e1add3c36becb732dbd0fae843b6a12f2841cfa4243dd3bead4e582e60c1e81c3f4db03bb\", \"0x0\", \"0x5dd1d6911248fb5ef5a2e4f99c1f90767186060eda81b7f490cc99583db6989183cc9884244bc5b62a507c413c93e2e\", \"0x0\", \"0x0\", \"0x0\"], [\"0x4ca59a9615490d4871ae113788793a0ef5c6dbbfb2602731932d16dd279f227782505589090120984a32f00d5c17317\", \"0x0\", \"0x9649308cd68a27b4e25e3702dab91e62890a1fb24fa7318b413f60fc7b95245612a76f802df69650a6d78458addb193\", \"0x1\", \"0x0\", \"0x0\", \"0x6d3c6b1903e1d11b99026fac6088b42737e0e7cddf5e95d20f6b7b05c13589063d20aefc27a91c014a7b5f49957ff\", \"0x0\", \"0xc9fb3306280d86d70eb3b713248de91c6d4ef90148d3c2300b3d6b19df197e00e70af98bcd050a431a8c58b53832815\", \"0x0\", \"0x0\", \"0x0\"]];\n        let xf = [\"0x1913c7c566f59082bc8178020dbab618db967238ea9cd35f30a48e8f4e37b31fa826f2ce8023e3f492da64e7fc430262\", \"0xe88184d680a3c04ed182e6b263c806982325a7601dab1e928ee1cf7c98a702c77ef44f6202e8049b3eb05d0d530416d\", \"0x133b8d475abdbde6aa5ce6524599001bdebe394bd4b3c7a7c62a4c736176f27fabcb165d0e9db88c3aa8af04ac87b690\", \"0xff88e1756ceadda3075ef7ac6f1764de912e15b03a34e439b837bfa984174e90399e3fbda93a12cc209b1ed1469ab6f\", \"0xa2e5dd0e5330c07becfea58e47106140d177f1b1241de5c1e752050408f4970ed1275db43a9c3cc8b4f393a72148638\", \"0x1124c5ec5de53991b87616d2e433c3387e4ea68342f9713bcf93e2be0ff2b07e03ff0091e0ff71ae050db38a10394cca\", \"0x47203ee35055ffa8e288c3da40c9831b46d6c7b911ea92ee62d4af79903c75831bb79321155920b413155ca1f2424bf\", \"0x180ccf08a53eb9416fc958429dfea456e5e802217f5f5ecc44653622720256512e4c7f01efa251cd28065c103db44f11\", \"0xf4e1f72f26c9590b43bc7b7c45fff374a786d462f2dc275bc0812c9a26969ce0bd7d8fc5a90a9fa47cb7f40320d6418\", \"0x134043dade475ebc5c796603d3ae7161f7f06e07e968716ea64520685e44705bd9221f8d7d7b0b9e2d131576fdb3af44\", \"0x19ceec83acdc521e6a9dbf17392e097e01a2685cc2c9d7f3f1430e22221070d222e599ac3e9142d486383eec146b8dac\", \"0x7ca2e9db2452cc19c71ff5049bdd024819954fb83f0f903169da844e8fe4a584031b750f0678f8661f1c1e1f4653a84\"];\n        let p: Vec<Polynomial<BLS12381PrimeField>> = p\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let f = extf_mul(p, None, None, None);\n        assert_eq!(f, xf);\n    }\n\n    #[test]\n    fn test_extf_inv_1() {\n        let c = [\n            \"0x14156ca1853095df27f3cb7c50eca75e794d2f14195c16df4a0f8f9dcb48bee9\",\n            \"0xdc2a20a6107d4c49fed6b2018946bcc2a8dad06f01d099a6df0a4a55ed21b59\",\n            \"0x14260c5afb0b1148ed80f8339cf9e06ff04257cb6c1817c4efa721fc98f69503\",\n            \"0xafe8a09df07bf3dffefe512eb9448ef436dd090f98323135baab8ae3c766c60\",\n            \"0x114692950f53d4f707bb02cc2b5dc98aff5936811707d6579371dae20368253c\",\n            \"0x2dd3fca72591963149646f1e106dc0ee917551f5a9da397fe12d4a3939ce650c\",\n            \"0x1750bd450b85cbd62ea3f1b228beff5fd364a127d6054be99a9248497b82062a\",\n            \"0x1248cfad33a2147726169d3ce55db12ecafd74bc4b83377c168d89b919386546\",\n            \"0x28d156bac04e64938816b055888399c99a954b82724e5f5589d549a709b2b5ef\",\n            \"0x39e1ab153bd709556afece475580f453f9126f256fbb49c235bc75082f5f26e\",\n            \"0x14853f940bf5c557c7f558d3e74e6617d7f08b54fd83597fed1d7e7b9d09e04\",\n            \"0xaa480d613601947fee14a3ce2b7af4e1872fe49ae3473546aa01a618b78b125\",\n        ];\n        let xi = [[\n            \"0x13e8e196ed7970229c16369f6f62a54fe9848ec0abbb56e77355358805db92a6\",\n            \"0x29aa20be8afc3104b3211fb1c2636e3291bca41e1276bdbbb485917fae34c150\",\n            \"0xcbdf387c0036815f944eeedb8a3ed8babb406326444cbed0df3e47fc7a3f440\",\n            \"0xcc614e3d877550dc9bb19f8dfdc513f2f8fed01d3a180a2a9e475c9a29f6d96\",\n            \"0x1a6e474f0a5394b39bd15f2390e0cfa64391cb4ffc5d435a63028ac3c744d064\",\n            \"0x8fc0b38f1129ab34ebd5a5888f0711adecaecc7aa5312cc62508d51da03aa1e\",\n            \"0xff9b26cf44e068601c663a62662f0ef698166a3410d4f36a68b2e46800daa6e\",\n            \"0xf4ec161da901a5ab3f6088ede93acdbf15f0c18b653b9f7146d132c6d4111c5\",\n            \"0x1843faa07a91bed2c949f1b3f126e0ae88d429bf7d37b5e00696b22be53ac607\",\n            \"0x1c151df931008732415af45f4616affed9e0e64976e66cc5e2e57c799ddfa646\",\n            \"0x1526c80d7045ccb0ae04a7cf1de7a2519ad52f885c7b9acb7bed0d027459433\",\n        ]];\n        let xj = [[\n            \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n        ]];\n        let xc = [\n            \"0x1d7a9ffbbe137d697794dbccbd7925ea98507cf8d4445d3e89123811ede12825\",\n            \"0x1f45aa2ee73f15e275e5c1fc0ff08be0981a61d8e7642301653a6307c7467811\",\n            \"0x2446d99f276e4c8bc63d81e8d0c1e37c901a5a569865533968e39b5083fc576e\",\n            \"0x223bd50b771fcaa905131a5f04c3c634c9df344731b5aada49be919aaa447cc7\",\n            \"0x24cfef2958a7c9c4d7ddfacdd59750105dcc37f6aefbf4a9ce706bc36252c47\",\n            \"0x3a974db52b274684955cb370b0ac66e3e295ea6e9789fb7259c294210f7720e\",\n            \"0x160b7346ec9fdd9841feb355a44845dc30c2a9ae3fb8266ad697b531de5e2fb6\",\n            \"0xe46af84e1cbba805f204fa5ce1c9a99c79799110a56b5d534495a358f9c739f\",\n            \"0x1f2b5709d0d7c9499b9524e9708ac412d3fa05fea9b51192113e131bd5572a21\",\n            \"0x8a75eef583ffc3b0f690cd9eab121b1f329194c1052a86d50224b92838c5d76\",\n            \"0xef3a64570d17038de7ec74175c125ac7e8780509764f07572ce9593878da9fb\",\n            \"0x2a6290607745b58a7b87bc78053320664e06d12b35825f15893ad52a39f54331\",\n        ];\n        let c = c\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let c = Polynomial::new(c);\n        let xc = Polynomial::new(\n            xc.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xi = xi\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xj = xj\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let mut i = vec![];\n        let mut j = vec![];\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree12ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree6ExtensionField;\n        let c = extf_inv::<\n            BN254PrimeField,\n            Degree2ExtensionField,\n            Degree6ExtensionField,\n            Degree12ExtensionField,\n        >(&c, Some(&mut i), Some(&mut j));\n        assert_eq!(c, xc);\n        assert_eq!(i, xi);\n        assert_eq!(j, xj);\n    }\n\n    #[test]\n    fn test_precompute_consts_1() {\n        let p = [\n            (\n                \"0x1d0634f3f21e7890d1df87eab84852372b905c9ccdb6d03cb7b9a5409b7efcd8\",\n                \"0x24c53532773dce26eb3f1d6ba3b10e2b53dc193baa1d4f4d3021032564460978\",\n            ),\n            (\n                \"0x2585e4f8a31664cbfc531bccffafcf1e59d91fb9536c985db33c69f7c242e07a\",\n                \"0x1d2d2799db056ed14f48d341183118d68ea4131357fa42444057cf0c1d62ae3c\",\n            ),\n        ];\n        let y = [\n            \"0x1ab9de59fc825e8b5326694c7d82556785cb9cbfd0d0a11721d1972c21c411f8\",\n            \"0x16a475582082ae3616c808acd62684170d9fa7bf234110353e9cbceca19d2c69\",\n        ];\n        let x = [\n            \"0x27783160c70b7ac760cff888c621846a7ed80e50c7ea8a7a718a4ad8a50886fb\",\n            \"0x10a6d46618419682152a25b5f819b22c2e572d1f670d12026a18c384248dad2f\",\n        ];\n        let p = p\n            .into_iter()\n            .map(|(x, y)| {\n                G1Point::new(\n                    FieldElement::<BN254PrimeField>::from_hex(x).unwrap(),\n                    FieldElement::<BN254PrimeField>::from_hex(y).unwrap(),\n                    false,\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let xy = y\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xx = x\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let (y, x) = precompute_consts(&p);\n        assert_eq!(y.to_vec(), xy);\n        assert_eq!(x.to_vec(), xx);\n    }\n\n    #[test]\n    fn test_precompute_consts_2() {\n        let p = [(\"0x59d2a79bda5f8a941d4db9e360a80121d5ef96fd687003db24ddec0e0c3b63d82efa81fe174bb39be8658ef83c8c2d\", \"0x2df47e8cdf189985d5085bdcebb5ee96e40a033f5d3b7986f6992be16bc35f88c471acf7f68344f543e52fe891285a9\"), (\"0x105dcc4dce3960447d21d3c1dc39e973aaf31de52219df089bb5f797ac6d3395b71420b50de4f62a6588c9401ffefbd3\", \"0x17cb6c41f0c4e1a7394ab62a9db0be660d847ccc58358f3f9b63c98d9a7845c52e1e2b0faefd0d854043fd325dd3c34f\")];\n        let y = [\"0x6ce420ceafa50ff15baa710e1633d7893404a18b69ef5316a81b182dadbe66bb0ef4fe49ffa578c7698795e6d4a12cb\", \"0xf45ba6de68a0f1ab26ba5fac564f3f21a75239243fae800e2a8665fd9699e2795c674834c6ce016370aee9e4a1d38d1\"];\n        let x = [\"0x7f2db8fbcf121365e92ce3d77bf5d9a3537b5422e894c09e00053ace96a5403a8db66fbe03950e93033c5874bbe8046\", \"0xb190c99770f69f3e912d3ef69f63e082a05a1e63b50eb9a5de3e07b14aed7eded07b2f2b3c42c7e365d2a47945fc285\"];\n        let p = p\n            .into_iter()\n            .map(|(x, y)| {\n                G1Point::new(\n                    FieldElement::<BLS12381PrimeField>::from_hex(x).unwrap(),\n                    FieldElement::<BLS12381PrimeField>::from_hex(y).unwrap(),\n                    false,\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let xy = y\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xx = x\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let (y, x) = precompute_consts(&p);\n        assert_eq!(y.to_vec(), xy);\n        assert_eq!(x.to_vec(), xx);\n    }\n\n    #[test]\n    fn test_build_sparse_line_eval_1() {\n        let r0 = [\n            \"0x237db2935c4432bc98005e68cacde68a193b54e64d347301094edcbfa224d3d5\",\n            \"0x124077e14a7d826a707c3ec1809ae9bafafa05dd6b4ba735fba44e801d415637\",\n        ];\n        let r1 = [\n            \"0x3b7178c857630da7676d0000961488f8fbce03349a8dc1dd6e067932b6a7e0d\",\n            \"0x2b17c2b12c26fdd0e3520b9dfa601ead6f0bf9cd98c81278efe1e96b86397652\",\n        ];\n        let y = \"0x1ab9de59fc825e8b5326694c7d82556785cb9cbfd0d0a11721d1972c21c411f8\";\n        let x = \"0x27783160c70b7ac760cff888c621846a7ed80e50c7ea8a7a718a4ad8a50886fb\";\n        let xl = [\n            \"0x1\",\n            \"0x3049ed443e0ee79060270c9094ac6390a5c1ab3db65328a47174c6c33f6bd5f2\",\n            \"0x0\",\n            \"0xa279a60d390f263fa2b23afda6a2160c7af52ea6fdddb7ffe26ded0e216c821\",\n            \"0x0\",\n            \"0x0\",\n            \"0x0\",\n            \"0x146bccf3dc47e8eedf574326c5188ea8e4978a568116c9aa5b8517cdeb0e1f38\",\n            \"0x0\",\n            \"0x10b71d55b795eb0c1590286e48c412e3434b0def1afddfc8840541b6936825fd\",\n            \"0x0\",\n            \"0x0\",\n        ];\n        let r0 = r0\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let r1 = r1\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xl = Polynomial::new(\n            xl.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let r0: [FieldElement<BN254PrimeField>; 2] = r0.try_into().unwrap();\n        let r1: [FieldElement<BN254PrimeField>; 2] = r1.try_into().unwrap();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        let r0 = to_e2::<BN254PrimeField, Degree2ExtensionField>(r0);\n        let r1 = to_e2::<BN254PrimeField, Degree2ExtensionField>(r1);\n        let y = FieldElement::<BN254PrimeField>::from_hex(y).unwrap();\n        let x = FieldElement::<BN254PrimeField>::from_hex(x).unwrap();\n        let l = build_sparse_line_eval(&r0, &r1, &y, &x);\n        assert_eq!(l, xl);\n    }\n\n    #[test]\n    fn test_build_sparse_line_eval_2() {\n        let r0 = [\"0x56ceab5d5d994dee0ca07fc0d41aa908b1a833b94e768d2dec05cffe4a869aed2a64ee86a72f085ee4e78bd4c2aef8e\", \"0x39b596a976f556e5ea4016a3111e14b674a67295a242cf3b343a6878db6ec20bcac1275d23aad6cd3e84e398a4e7bc8\"];\n        let r1 = [\"0x4786cc02b147d13e701c1f52827dbba9d5d8516fb557dfb71bc60f1a68459eb52df6a9219fcdcac7feb1f0edbefdbf8\", \"0x145f508c63c10d270e027b2b0bf6789475132950c583823a43387d10f8329296e43e6610cb7555c0db86510eb99cfadd\"];\n        let y = \"0x6ce420ceafa50ff15baa710e1633d7893404a18b69ef5316a81b182dadbe66bb0ef4fe49ffa578c7698795e6d4a12cb\";\n        let x = \"0x7f2db8fbcf121365e92ce3d77bf5d9a3537b5422e894c09e00053ace96a5403a8db66fbe03950e93033c5874bbe8046\";\n        let xl = [\"0xed2ad16fd30c6bae9d4659d084faa4e8bbce72d77ce2867a8ccd2916078758f11a33bf3f6acad21af21aafd4dbe67c1\", \"0x0\", \"0x143159d9a3967261ec92e14b1108686052cbe30a24c1142a087b498252aaef8b03b69ea297bc174eb69de56e7a594cfa\", \"0x1\", \"0x0\", \"0x0\", \"0xd2c6c6d4383235e52ea373e1add3c36becb732dbd0fae843b6a12f2841cfa4243dd3bead4e582e60c1e81c3f4db03bb\", \"0x0\", \"0x5dd1d6911248fb5ef5a2e4f99c1f90767186060eda81b7f490cc99583db6989183cc9884244bc5b62a507c413c93e2e\", \"0x0\", \"0x0\", \"0x0\"];\n        let r0 = r0\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let r1 = r1\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xl = Polynomial::new(\n            xl.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let r0: [FieldElement<BLS12381PrimeField>; 2] = r0.try_into().unwrap();\n        let r1: [FieldElement<BLS12381PrimeField>; 2] = r1.try_into().unwrap();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        let r0 = to_e2::<BLS12381PrimeField, Degree2ExtensionField>(r0);\n        let r1 = to_e2::<BLS12381PrimeField, Degree2ExtensionField>(r1);\n        let y = FieldElement::<BLS12381PrimeField>::from_hex(y).unwrap();\n        let x = FieldElement::<BLS12381PrimeField>::from_hex(x).unwrap();\n        let l = build_sparse_line_eval(&r0, &r1, &y, &x);\n        assert_eq!(l, xl);\n    }\n\n    #[test]\n    fn test_bit_0_case_1() {\n        let f = [\n            \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n        ];\n        let q = [\n            (\n                \"0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\",\n                \"0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\",\n                \"0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\",\n                \"0x90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b\",\n            ),\n            (\n                \"0x1314aaf1c372e6d7635e573808d9d5c7178bdce7335eb0538f718d8e6651eeb1\",\n                \"0x14c25d3aec745e5a2d4aba9e1448a8cc1048d01a5289f29ccc5acf5e81526673\",\n                \"0x397391b7b25e2fba7d1de6d86501d49b6a8dab10d1d0efd5869ecd23aab8e9\",\n                \"0x1863ac65eca09e89b058c1ff7e4c5c7ec7e5859b385a553ea12434f4eda6db36\",\n            ),\n        ];\n        let y = [\n            \"0x1ab9de59fc825e8b5326694c7d82556785cb9cbfd0d0a11721d1972c21c411f8\",\n            \"0x16a475582082ae3616c808acd62684170d9fa7bf234110353e9cbceca19d2c69\",\n        ];\n        let x = [\n            \"0x27783160c70b7ac760cff888c621846a7ed80e50c7ea8a7a718a4ad8a50886fb\",\n            \"0x10a6d46618419682152a25b5f819b22c2e572d1f670d12026a18c384248dad2f\",\n        ];\n        let xf = [\n            \"0x11d12be7502f97a642a86eb73802fe0fe4772283c9e66f3d535534c22390e0ca\",\n            \"0x109dabf551c2a0d785f86365c9f7a4e2aae4c8e3f5bb96b72c3461402f80049e\",\n            \"0x15e06e6b765f21da4c21d50705a9bf0f72ba0283f93e75a896235fa107d4ca4d\",\n            \"0x23c17e1664ac6452ffdd3ca599029d07bbea4e54e00dd8289aa145149627cc90\",\n            \"0x751d37ad50cc00d6245f08ca81ce16f9a3714c3efe87c95ae8e132234b5dd07\",\n            \"0x0\",\n            \"0x1535e3c0e51be5f14093e8501425031896dfb26ec8759e3409e44e94d81e17cf\",\n            \"0xe07f7cf5446bf6fd7f35bd2c741235928fd0f5cc82d853d0b37dd293fe1a21b\",\n            \"0x2eae2d9b2332fb1f1c3617826ac6ede574d04ed01692a36b9743fc604b3f3bf\",\n            \"0x2ab0d3ce9813032acfb54c2e7c43299edb854672b7bc17be60c2e1cda8e826c\",\n            \"0x1f316d8807400efe60a15b7e5311a9031439eb344c0d84fb80044f8786d59de4\",\n            \"0x0\",\n        ];\n        let xp = [\n            (\n                \"0x27dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9\",\n                \"0x203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad79\",\n                \"0x4bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e\",\n                \"0x195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de152\",\n            ),\n            (\n                \"0x19092b3d714b3bb6599b735386dd05eab401e72057bab79773a6de8f5693387b\",\n                \"0x1acb3fbdde3ce471791558747f0e52b1b7a708834dc533393bcfc2af317703ee\",\n                \"0x258d7966e4b36382460549a44d5cbe96fbe1c412e36f25218438f72d7d387077\",\n                \"0x2a58bf6a639ae104439ba4e8db873938a26fcd5bd0b68beb20c44705d9820860\",\n            ),\n        ];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        let (f, p) = bit_0_case::<BN254PrimeField, Degree2ExtensionField>(&f, &q, &y, &x);\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n    }\n\n    #[test]\n    fn test_bit_0_case_2() {\n        let f = [\"0xc71fb5b76cf57e5c7c9dbbd201062289f97dedce8bbb72d15abaec86c40039d3b4f3fccb7338ff3e7701b7f6619769b\", \"0x129a0a7e9efe3f397b5dbcae1f22f39c0cbcf4d183ead8de682a7571560cc28f2c13ecc7628b11dda4fcc3eaef203a45\", \"0x162ca20e57a4ad07f919b85c9975acd11d5f0cddd22192ebc465e5a89a0546be2ec98581fcda54c808aa8790189addd6\", \"0x10a05ef6bc41b1ac2ba68a585a4c7016589ffad9c5412bf00fd0f50f8ac9ea3d9a7db639e62eae3ca960447fb588a60b\", \"0x16dbc5bd5769b32d94959f3a71085f5adc66454928e158caeecda06706afd32cea844001820431c1f3534760c01c3ce5\", \"0x199988fcc386f48448a34d747599bd68a9bb4993cc0e6d2434e9182475096fe323352ae743be4cec47278fbbb8d52f52\", \"0x189109c92dac219f6b362d169e4ca995bbd0536c8727610f0f361f3490e9d41a94c69d397c1401b31b5a973bc393f3b1\", \"0x19ea64dde64bbb01d1072ca0532cbe26f8227deaf22155b2ba4bacf79ec45d43bbecca1bb35c6efdd163d6d7ff862979\", \"0xd9b819680b2cfa830393d2a883cbf07d691020e2a01580c62c9bb1869a1c40317ab6b0df57ff873f2b4bc93d71985e5\", \"0x704a7bc9193e53c9dde39b3a0a34d0e76345261a4caa612bb3ee39b3715a0d649760f83a32b24cc4b37fe549e80afde\", \"0x117957ce838607a66a58785c7af8af5a2d3a1832a559f19b20af84c9a5e968cabea23dd6815968b93234b9b34f8108e1\", \"0xae22d05bd7cd226ba438387b13606f1ad88319c787ccdcec28ab4de6e9bd5fd1ede497ebb746c3313cd6655b961689d\"];\n        let q = [(\"0x122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae\", \"0x9380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc\", \"0xb21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd892\", \"0x8f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e849\"), (\"0x893227b499dab30e15b606ec3c375f9fabf7fbb574b9b11c9eefbe33fae82066297e23c518f59e74d5cf646cec6464f\", \"0x10578234a81819d1ebb3d77b03a128f3165642386fff1b0a74ad73c139425703a991ce459cdc1995351adff98061f0ea\", \"0x16efa85752a02d4358a92eb3b577c1e27a02ec36000c44403159baf7022541a02104b633549e05b774e1b76343a8e661\", \"0xaf65df48a519d9209257e3df9fb0a1bd3491799091df954380242592db0bead0ddd62dbe33aeeaf1d4a63bdbc4c6008\")];\n        let y = [\"0x6ce420ceafa50ff15baa710e1633d7893404a18b69ef5316a81b182dadbe66bb0ef4fe49ffa578c7698795e6d4a12cb\", \"0xf45ba6de68a0f1ab26ba5fac564f3f21a75239243fae800e2a8665fd9699e2795c674834c6ce016370aee9e4a1d38d1\"];\n        let x = [\"0x7f2db8fbcf121365e92ce3d77bf5d9a3537b5422e894c09e00053ace96a5403a8db66fbe03950e93033c5874bbe8046\", \"0xb190c99770f69f3e912d3ef69f63e082a05a1e63b50eb9a5de3e07b14aed7eded07b2f2b3c42c7e365d2a47945fc285\"];\n        let xf = [\"0x1913c7c566f59082bc8178020dbab618db967238ea9cd35f30a48e8f4e37b31fa826f2ce8023e3f492da64e7fc430262\", \"0xe88184d680a3c04ed182e6b263c806982325a7601dab1e928ee1cf7c98a702c77ef44f6202e8049b3eb05d0d530416d\", \"0x133b8d475abdbde6aa5ce6524599001bdebe394bd4b3c7a7c62a4c736176f27fabcb165d0e9db88c3aa8af04ac87b690\", \"0xff88e1756ceadda3075ef7ac6f1764de912e15b03a34e439b837bfa984174e90399e3fbda93a12cc209b1ed1469ab6f\", \"0xa2e5dd0e5330c07becfea58e47106140d177f1b1241de5c1e752050408f4970ed1275db43a9c3cc8b4f393a72148638\", \"0x1124c5ec5de53991b87616d2e433c3387e4ea68342f9713bcf93e2be0ff2b07e03ff0091e0ff71ae050db38a10394cca\", \"0x47203ee35055ffa8e288c3da40c9831b46d6c7b911ea92ee62d4af79903c75831bb79321155920b413155ca1f2424bf\", \"0x180ccf08a53eb9416fc958429dfea456e5e802217f5f5ecc44653622720256512e4c7f01efa251cd28065c103db44f11\", \"0xf4e1f72f26c9590b43bc7b7c45fff374a786d462f2dc275bc0812c9a26969ce0bd7d8fc5a90a9fa47cb7f40320d6418\", \"0x134043dade475ebc5c796603d3ae7161f7f06e07e968716ea64520685e44705bd9221f8d7d7b0b9e2d131576fdb3af44\", \"0x19ceec83acdc521e6a9dbf17392e097e01a2685cc2c9d7f3f1430e22221070d222e599ac3e9142d486383eec146b8dac\", \"0x7ca2e9db2452cc19c71ff5049bdd024819954fb83f0f903169da844e8fe4a584031b750f0678f8661f1c1e1f4653a84\"];\n        let xp = [(\"0x19e384121b7d70927c49e6d044fd8517c36bc6ed2813a8956dd64f049869e8a77f7e46930240e6984abe26fa6a89658f\", \"0x3f4b4e761936d90fd5f55f99087138a07a69755ad4a46e4dd1c2cfe6d11371e1cc033111a0595e3bba98d0f538db451\", \"0x17a31a4fccfb5f768a2157517c77a4f8aaf0dee8f260d96e02e1175a8754d09600923beae02a019afc327b65a2fdbbfc\", \"0x88bb5832f4a4a452edda646ebaa2853a54205d56329960b44b2450070734724a74daaa401879bad142132316e9b3401\"), (\"0x1604bd06ba18d6d65bdd88e22c26eaef8a620a1a9fefe016d00eac356f9ceda8bc8eee5e46f9f4736ab22cff0e8cb9e8\", \"0x3e5755e9bfc250ff0a03efea22428a36a247504e613980918dc5319efb7f66b10d5fe2e7e86af7e014e1456aeaeac5f\", \"0x5655a99f7ff904c1e41382c25ff0360d9c51d0e331bfb1e38f5dd41c6909caaf6e313f47f727922109bf8c3204fe274\", \"0x62ec2ed9b207f63e0d9899ed11f9a125b472586b65bb77b8a04d5d446d15a8701ba5c361a07cd85e0743f5ae2e95a9f\")];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        let (f, p) = bit_0_case::<BLS12381PrimeField, Degree2ExtensionField>(&f, &q, &y, &x);\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n    }\n\n    #[test]\n    fn test_bit_1_init_case_1() {\n        let f = [\n            \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n        ];\n        let q = [(\"0x24aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8\", \"0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e\", \"0xce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801\", \"0x606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be\"), (\"0x82dc9154807866eb0f36ccb665a5fc010510bd690ddd7b540e5bf3ff02d81e98b75703a3b3d3c305a70960906e6cb09\", \"0xdd18d077ad5bd58dabb18d84a6ceebe6375a83dd242851bb4dcf956002c4efb974ffceee6709deb0dcf81d4285e5e60\", \"0x4a468eb9e206b9833d8e8e2197d3446652372ce5ef50e93c91aa58105d3a281b2e84ddb61535fe1a90bae7e6692f9b0\", \"0x198fd0ab6249082bf7007d7e8be8992de81f47ae3341c590194fa3bf769a2e5a5253527727115c334e82ed4be8da6c10\")];\n        let y = [\"0x6ce420ceafa50ff15baa710e1633d7893404a18b69ef5316a81b182dadbe66bb0ef4fe49ffa578c7698795e6d4a12cb\", \"0xf45ba6de68a0f1ab26ba5fac564f3f21a75239243fae800e2a8665fd9699e2795c674834c6ce016370aee9e4a1d38d1\"];\n        let x = [\"0x7f2db8fbcf121365e92ce3d77bf5d9a3537b5422e894c09e00053ace96a5403a8db66fbe03950e93033c5874bbe8046\", \"0xb190c99770f69f3e912d3ef69f63e082a05a1e63b50eb9a5de3e07b14aed7eded07b2f2b3c42c7e365d2a47945fc285\"];\n        let xf = [\"0xc71fb5b76cf57e5c7c9dbbd201062289f97dedce8bbb72d15abaec86c40039d3b4f3fccb7338ff3e7701b7f6619769b\", \"0x129a0a7e9efe3f397b5dbcae1f22f39c0cbcf4d183ead8de682a7571560cc28f2c13ecc7628b11dda4fcc3eaef203a45\", \"0x162ca20e57a4ad07f919b85c9975acd11d5f0cddd22192ebc465e5a89a0546be2ec98581fcda54c808aa8790189addd6\", \"0x10a05ef6bc41b1ac2ba68a585a4c7016589ffad9c5412bf00fd0f50f8ac9ea3d9a7db639e62eae3ca960447fb588a60b\", \"0x16dbc5bd5769b32d94959f3a71085f5adc66454928e158caeecda06706afd32cea844001820431c1f3534760c01c3ce5\", \"0x199988fcc386f48448a34d747599bd68a9bb4993cc0e6d2434e9182475096fe323352ae743be4cec47278fbbb8d52f52\", \"0x189109c92dac219f6b362d169e4ca995bbd0536c8727610f0f361f3490e9d41a94c69d397c1401b31b5a973bc393f3b1\", \"0x19ea64dde64bbb01d1072ca0532cbe26f8227deaf22155b2ba4bacf79ec45d43bbecca1bb35c6efdd163d6d7ff862979\", \"0xd9b819680b2cfa830393d2a883cbf07d691020e2a01580c62c9bb1869a1c40317ab6b0df57ff873f2b4bc93d71985e5\", \"0x704a7bc9193e53c9dde39b3a0a34d0e76345261a4caa612bb3ee39b3715a0d649760f83a32b24cc4b37fe549e80afde\", \"0x117957ce838607a66a58785c7af8af5a2d3a1832a559f19b20af84c9a5e968cabea23dd6815968b93234b9b34f8108e1\", \"0xae22d05bd7cd226ba438387b13606f1ad88319c787ccdcec28ab4de6e9bd5fd1ede497ebb746c3313cd6655b961689d\"];\n        let xp = [(\"0x122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae\", \"0x9380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc\", \"0xb21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd892\", \"0x8f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e849\"), (\"0x893227b499dab30e15b606ec3c375f9fabf7fbb574b9b11c9eefbe33fae82066297e23c518f59e74d5cf646cec6464f\", \"0x10578234a81819d1ebb3d77b03a128f3165642386fff1b0a74ad73c139425703a991ce459cdc1995351adff98061f0ea\", \"0x16efa85752a02d4358a92eb3b577c1e27a02ec36000c44403159baf7022541a02104b633549e05b774e1b76343a8e661\", \"0xaf65df48a519d9209257e3df9fb0a1bd3491799091df954380242592db0bead0ddd62dbe33aeeaf1d4a63bdbc4c6008\")];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        let (f, p) = bit_1_init_case::<BLS12381PrimeField, Degree2ExtensionField>(&f, &q, &y, &x);\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n    }\n\n    #[test]\n    fn test_bit_1_case_1() {\n        let f = [\n            \"0x11d12be7502f97a642a86eb73802fe0fe4772283c9e66f3d535534c22390e0ca\",\n            \"0x109dabf551c2a0d785f86365c9f7a4e2aae4c8e3f5bb96b72c3461402f80049e\",\n            \"0x15e06e6b765f21da4c21d50705a9bf0f72ba0283f93e75a896235fa107d4ca4d\",\n            \"0x23c17e1664ac6452ffdd3ca599029d07bbea4e54e00dd8289aa145149627cc90\",\n            \"0x751d37ad50cc00d6245f08ca81ce16f9a3714c3efe87c95ae8e132234b5dd07\",\n            \"0x0\",\n            \"0x1535e3c0e51be5f14093e8501425031896dfb26ec8759e3409e44e94d81e17cf\",\n            \"0xe07f7cf5446bf6fd7f35bd2c741235928fd0f5cc82d853d0b37dd293fe1a21b\",\n            \"0x2eae2d9b2332fb1f1c3617826ac6ede574d04ed01692a36b9743fc604b3f3bf\",\n            \"0x2ab0d3ce9813032acfb54c2e7c43299edb854672b7bc17be60c2e1cda8e826c\",\n            \"0x1f316d8807400efe60a15b7e5311a9031439eb344c0d84fb80044f8786d59de4\",\n            \"0x0\",\n        ];\n        let q = [\n            (\n                \"0x27dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9\",\n                \"0x203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad79\",\n                \"0x4bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e\",\n                \"0x195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de152\",\n            ),\n            (\n                \"0x19092b3d714b3bb6599b735386dd05eab401e72057bab79773a6de8f5693387b\",\n                \"0x1acb3fbdde3ce471791558747f0e52b1b7a708834dc533393bcfc2af317703ee\",\n                \"0x258d7966e4b36382460549a44d5cbe96fbe1c412e36f25218438f72d7d387077\",\n                \"0x2a58bf6a639ae104439ba4e8db873938a26fcd5bd0b68beb20c44705d9820860\",\n            ),\n        ];\n        let s = [\n            (\n                \"0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\",\n                \"0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\",\n                \"0x1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d\",\n                \"0x275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec\",\n            ),\n            (\n                \"0x1314aaf1c372e6d7635e573808d9d5c7178bdce7335eb0538f718d8e6651eeb1\",\n                \"0x14c25d3aec745e5a2d4aba9e1448a8cc1048d01a5289f29ccc5acf5e81526673\",\n                \"0x302adae1297f41f9fdd327cfa91c5688fc16dce6579ff99d6699ed49b4d2445e\",\n                \"0x1800a20cf49101a007f783b70334fbdecf9be4f63017754e9afc5721ead62211\",\n            ),\n        ];\n        let y = [\n            \"0x1ab9de59fc825e8b5326694c7d82556785cb9cbfd0d0a11721d1972c21c411f8\",\n            \"0x16a475582082ae3616c808acd62684170d9fa7bf234110353e9cbceca19d2c69\",\n        ];\n        let x = [\n            \"0x27783160c70b7ac760cff888c621846a7ed80e50c7ea8a7a718a4ad8a50886fb\",\n            \"0x10a6d46618419682152a25b5f819b22c2e572d1f670d12026a18c384248dad2f\",\n        ];\n        let xf = [\n            \"0x44e300afb5d8c9fe4ed7556cdf91d67bae6f78cdd7b5afdb2d62ae76d668cf9\",\n            \"0x2d6f11dc8d07f13fae893dc146f477a28fdcbe346b5536270b156027e060cbb6\",\n            \"0x1d6149797ffea4e32ec9ad26f54081fc57e62a50c0657a81f91fe7e5b0ee93d0\",\n            \"0x297f8335441b111054cbff68ca424972bff570bcb8b05d4876e93c92fe0b6ff0\",\n            \"0x7aedbe74e081653144a40e4713c7d64ce54773908e447526ec741ff71182e8d\",\n            \"0x164a744315557a2bcc0654ff50e4d8a2ee66dd2a5046c3a93c677b5d76febcf5\",\n            \"0x2b1a554f7baf8c4b91a81e797d2cafbc401bd86d331a29d9309ced81b8b81c26\",\n            \"0x197d1963b67e5a1ffff3e87eca2bc07326ce5e0b7be87d82a1f0ed18c864f08c\",\n            \"0x1bf49bd642edf7a1b83ca6efc6293abfcf04bdc29066ceb99b02c0e71bd454f0\",\n            \"0x243aef64db80f1e463301ece27afe624978d8bfc8033b3470b14731fd488561f\",\n            \"0x2c2632c4740be43538ff3ac49b28b87df2ae5ebe6c5f5853b62815d62cb02e1e\",\n            \"0x4a1156582f27dbbb55d2203377de72269bee7a13ed0105a8a6f2e434c3bcc6d\",\n        ];\n        let xp = [\n            (\n                \"0x6064e784db10e9051e52826e192715e8d7e478cb09a5e0012defa0694fbc7f5\",\n                \"0x1014772f57bb9742735191cd5dcfe4ebbc04156b6878a0a7c9824f32ffb66e85\",\n                \"0x58e1d5681b5b9e0074b0f9c8d2c68a069b920d74521e79765036d57666c5597\",\n                \"0x21e2335f3354bb7922ffcc2f38d3323dd9453ac49b55441452aeaca147711b2\",\n            ),\n            (\n                \"0xbddb1ea5c182ba12d0762b9c85ebd180541e0b153ca85ff24489f09cb0d44a7\",\n                \"0x2170b47e91296dad38a19f370fa3368b1f333b8f05e5018b7a38af0a045be237\",\n                \"0x760488b80e6b5dd63b4b7422f5609df112bf8a63604449ae3020c63ad8e2489\",\n                \"0x1c937b1f996ef4397c744c8b2503cf644feb5b6d8b7f77237a7b8a2bcb98583a\",\n            ),\n        ];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let s = s\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        let (f, p) = bit_1_case::<BN254PrimeField, Degree2ExtensionField>(&f, &q, &s, &y, &x);\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n    }\n\n    #[test]\n    fn test_bit_1_case_2() {\n        let f = [\"0x1913c7c566f59082bc8178020dbab618db967238ea9cd35f30a48e8f4e37b31fa826f2ce8023e3f492da64e7fc430262\", \"0xe88184d680a3c04ed182e6b263c806982325a7601dab1e928ee1cf7c98a702c77ef44f6202e8049b3eb05d0d530416d\", \"0x133b8d475abdbde6aa5ce6524599001bdebe394bd4b3c7a7c62a4c736176f27fabcb165d0e9db88c3aa8af04ac87b690\", \"0xff88e1756ceadda3075ef7ac6f1764de912e15b03a34e439b837bfa984174e90399e3fbda93a12cc209b1ed1469ab6f\", \"0xa2e5dd0e5330c07becfea58e47106140d177f1b1241de5c1e752050408f4970ed1275db43a9c3cc8b4f393a72148638\", \"0x1124c5ec5de53991b87616d2e433c3387e4ea68342f9713bcf93e2be0ff2b07e03ff0091e0ff71ae050db38a10394cca\", \"0x47203ee35055ffa8e288c3da40c9831b46d6c7b911ea92ee62d4af79903c75831bb79321155920b413155ca1f2424bf\", \"0x180ccf08a53eb9416fc958429dfea456e5e802217f5f5ecc44653622720256512e4c7f01efa251cd28065c103db44f11\", \"0xf4e1f72f26c9590b43bc7b7c45fff374a786d462f2dc275bc0812c9a26969ce0bd7d8fc5a90a9fa47cb7f40320d6418\", \"0x134043dade475ebc5c796603d3ae7161f7f06e07e968716ea64520685e44705bd9221f8d7d7b0b9e2d131576fdb3af44\", \"0x19ceec83acdc521e6a9dbf17392e097e01a2685cc2c9d7f3f1430e22221070d222e599ac3e9142d486383eec146b8dac\", \"0x7ca2e9db2452cc19c71ff5049bdd024819954fb83f0f903169da844e8fe4a584031b750f0678f8661f1c1e1f4653a84\"];\n        let q = [(\"0x19e384121b7d70927c49e6d044fd8517c36bc6ed2813a8956dd64f049869e8a77f7e46930240e6984abe26fa6a89658f\", \"0x3f4b4e761936d90fd5f55f99087138a07a69755ad4a46e4dd1c2cfe6d11371e1cc033111a0595e3bba98d0f538db451\", \"0x17a31a4fccfb5f768a2157517c77a4f8aaf0dee8f260d96e02e1175a8754d09600923beae02a019afc327b65a2fdbbfc\", \"0x88bb5832f4a4a452edda646ebaa2853a54205d56329960b44b2450070734724a74daaa401879bad142132316e9b3401\"), (\"0x1604bd06ba18d6d65bdd88e22c26eaef8a620a1a9fefe016d00eac356f9ceda8bc8eee5e46f9f4736ab22cff0e8cb9e8\", \"0x3e5755e9bfc250ff0a03efea22428a36a247504e613980918dc5319efb7f66b10d5fe2e7e86af7e014e1456aeaeac5f\", \"0x5655a99f7ff904c1e41382c25ff0360d9c51d0e331bfb1e38f5dd41c6909caaf6e313f47f727922109bf8c3204fe274\", \"0x62ec2ed9b207f63e0d9899ed11f9a125b472586b65bb77b8a04d5d446d15a8701ba5c361a07cd85e0743f5ae2e95a9f\")];\n        let s = [(\"0x24aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8\", \"0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e\", \"0xce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801\", \"0x606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be\"), (\"0x82dc9154807866eb0f36ccb665a5fc010510bd690ddd7b540e5bf3ff02d81e98b75703a3b3d3c305a70960906e6cb09\", \"0xdd18d077ad5bd58dabb18d84a6ceebe6375a83dd242851bb4dcf956002c4efb974ffceee6709deb0dcf81d4285e5e60\", \"0x4a468eb9e206b9833d8e8e2197d3446652372ce5ef50e93c91aa58105d3a281b2e84ddb61535fe1a90bae7e6692f9b0\", \"0x198fd0ab6249082bf7007d7e8be8992de81f47ae3341c590194fa3bf769a2e5a5253527727115c334e82ed4be8da6c10\")];\n        let y = [\"0x6ce420ceafa50ff15baa710e1633d7893404a18b69ef5316a81b182dadbe66bb0ef4fe49ffa578c7698795e6d4a12cb\", \"0xf45ba6de68a0f1ab26ba5fac564f3f21a75239243fae800e2a8665fd9699e2795c674834c6ce016370aee9e4a1d38d1\"];\n        let x = [\"0x7f2db8fbcf121365e92ce3d77bf5d9a3537b5422e894c09e00053ace96a5403a8db66fbe03950e93033c5874bbe8046\", \"0xb190c99770f69f3e912d3ef69f63e082a05a1e63b50eb9a5de3e07b14aed7eded07b2f2b3c42c7e365d2a47945fc285\"];\n        let xf = [\"0x1a009648cc19099f6492fffcdbb1fbed70f61197872a6cbe7e8dda188a5d86701784d71b61130b358bf54a34a90ef1b9\", \"0x12a81cb61e9b5488fd7cdce673b05acb85475e23b8a68a787721d157650449c422c2903f1f40bab857321ca2aa7ad526\", \"0x9f9613378d1e258091b5642054bd71a71b047398ae80810d638e9376ae6e45487b41b4d0e5f766f5213b574c27049a1\", \"0xa211beb012676eacf4c5b94424d3691722b63d3d4493933ffac06589780f351522a8581a194c0663460652181577475\", \"0x7cdae4413bdf98e6ddbde01882644efcf0cda6141b28ae006abaea3bd405dfcece6208283faef1dad7be06019612c51\", \"0x1000cb1d25ade5a4224ab93d088ac6a9c5a26cb42b515b71b62ea00d23d39580d75fc848b3ed14fe32b393cd2aa77a29\", \"0xdfa1993791bd8119033f1734210190856724381a8c45726a9f0f2639f7d5d6b088f4771ae23235234d8108f4beb088\", \"0x3defca275c0c70ef01a514491daac5461b809ecd6890ef97bafc8e603d20c8e1c75650097bcbc9aaf67428bff100652\", \"0x62dde56c4a01536859050695f6b9236a150fe6cc3bfd1cfe15921706a387e20dc210c1e0d186abb3a2bcbf8c468135d\", \"0x15c7bab248f754a557cbaac90c4dda45383bdb5d55cc267955f7b12c32aadcce7f967fcc20f5e803369dfbb63332db60\", \"0x16a53e4e17f1ba363ae7d2374caaf5b1c11876e4979c1d9ad8f6503f3e2bc05b4fecb1c25d4639d2664929ce90b9552f\", \"0xb943117f90666049d9ca925443e630eb956afcd48a48f44b90da802913f096aad69e0be1318bff8e88512eaa1f1e13d\"];\n        let xp = [(\"0x152110e866f1a6e8c5348f6e005dbd93de671b7d0fbfa04d6614bcdd27a3cb2a70f0deacb3608ba95226268481a0be7c\", \"0xbf78a97086750eb166986ed8e428ca1d23ae3bbf8b2ee67451d7dd84445311e8bc8ab558b0bc008199f577195fc39b7\", \"0x845be51ad0d708657bfb0da8eec64cd7779c50d90b59a3ac6a2045cad0561d654af9a84dd105cea5409d2adf286b561\", \"0xa298f69fd652551e12219252baacab101768fc6651309450e49c7d3bb52b7547f218d12de64961aa7f059025b8e0cb5\"), (\"0xbfa363ea499e05a429d9af2a73ba635e0ff3825edddacfab8afc6b9188700c835282a2c4c7effe70dc61c557b8d90e1\", \"0x5c3fefe5849b36814f32ce71dee6eba467b220e1b53f01421b9ec6d23209f6206e864539ddaa327b085ad8d78a8589b\", \"0x17b304f1c4f58afee1ecd75f1570b13da2ee02dfc5731f82ac55d5b6d011ce70ae42061b3d205cbe49efdfcd8d2c04b4\", \"0x101d88f38de6be9d7eb2c074905585f487715b3e6d8179a066ba56988207caa28f7a5f1ba2f7abd01e200ac71d198282\")];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let s = s\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        let (f, p) = bit_1_case::<BLS12381PrimeField, Degree2ExtensionField>(&f, &q, &s, &y, &x);\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/pairing/multi_pairing_check.rs",
    "content": "use crate::algebra::extf_mul::{direct_to_tower, tower_inv, tower_mul, tower_to_direct};\nuse crate::algebra::g1point::G1Point;\nuse crate::algebra::g2point::G2Point;\nuse crate::algebra::polynomial::Polynomial;\nuse crate::definitions::{CurveID, CurveParamsProvider};\nuse crate::frobenius::{frobenius, get_frobenius_maps_ext_degree_12};\nuse crate::pairing::multi_miller_loop::{\n    bn254_finalize_step, conjugate_e12d, double_and_add_step, double_step, extf_inv, extf_mul,\n    miller_loop, precompute_consts, remove_and_compact_elements_given_sparsity, triple_step,\n};\nuse lambdaworks_math::field::element::FieldElement;\nuse lambdaworks_math::field::traits::{IsField, IsPrimeField, IsSubFieldOf};\nuse lambdaworks_math::traits::ByteConversion;\n\npub fn get_max_q_degree(curve_id: CurveID, n_pairs: usize) -> usize {\n    let line_degree = match curve_id {\n        CurveID::BN254 => 9,\n        CurveID::BLS12_381 => 8,\n        _ => unimplemented!(),\n    };\n\n    let f_degree = 11;\n    let lambda_root_degree = 11;\n\n    match curve_id {\n        CurveID::BN254 => {\n            // Largest degree happens in bit_10 case where we do (f*f*C * Π_n_pairs(line)^2 * Π_n_pairs(line))\n            4 * f_degree\n                + 2 * lambda_root_degree\n                + 4 * line_degree * n_pairs\n                + line_degree * n_pairs\n                - 12\n        }\n        CurveID::BLS12_381 => {\n            // Largest Q happens in bit_00 case where we do (f*f* Π_n_pairs(line)^2 * Π_n_pairs(line)\n            4 * f_degree + 2 * line_degree * n_pairs + line_degree * n_pairs - 12\n        }\n        _ => unimplemented!(),\n    }\n}\nfn get_final_exp_witness<F>(f: &[FieldElement<F>]) -> (Vec<FieldElement<F>>, Vec<FieldElement<F>>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    use crate::io::{element_from_biguint, element_to_biguint};\n    let f = f.iter().map(element_to_biguint).collect::<Vec<_>>();\n    let curve_id = F::get_curve_params().curve_id;\n    let (c, wi) = crate::pairing::final_exp_witness::get_final_exp_witness(\n        curve_id as usize,\n        f.try_into().unwrap(),\n    );\n    let c = c.iter().map(element_from_biguint).collect::<Vec<_>>();\n    let wi = wi.iter().map(element_from_biguint).collect::<Vec<_>>();\n    (c, wi)\n}\n\npub fn get_root_and_scaling_factor<F, E2, E6, E12>(\n    p: &[G1Point<F>],\n    q: &[G2Point<F, E2>],\n    m: &Option<Polynomial<F>>,\n) -> (Polynomial<F>, Vec<FieldElement<F>>, Vec<bool>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n    FieldElement<F>: ByteConversion,\n{\n    assert!(p.len() >= 2);\n    let f = miller_loop(p, q);\n    let mut f = direct_to_tower(&f.get_coefficients_ext_degree(12), 12);\n    if let Some(m) = m {\n        let m = direct_to_tower(&m.get_coefficients_ext_degree(12), 12);\n        f = tower_mul(&f, &m, 12);\n    }\n    let (lambda_root, scaling_factor) = get_final_exp_witness(&f);\n    let curve_id = F::get_curve_params().curve_id;\n    let lambda_root_or_inv = match curve_id {\n        CurveID::BN254 => lambda_root,\n        CurveID::BLS12_381 => tower_inv(&lambda_root, 12),\n        _ => unimplemented!(),\n    };\n    let lambda_root = Polynomial::new(tower_to_direct(&lambda_root_or_inv, 12));\n    let scaling_factor = tower_to_direct(&scaling_factor, 12);\n    let scaling_factor_sparsity = vec![\n        true, false, true, false, true, false, true, false, true, false, true, false,\n    ];\n    for i in 0..scaling_factor.len() {\n        if !scaling_factor_sparsity[i] {\n            assert_eq!(scaling_factor[i], FieldElement::from(0));\n        }\n    }\n    (lambda_root, scaling_factor, scaling_factor_sparsity)\n}\n\nfn bit_0_case<F, E2>(\n    f: &Polynomial<F>,\n    q: &[G2Point<F, E2>],\n    y_inv: &[FieldElement<F>],\n    x_neg_over_y: &[FieldElement<F>],\n    qis: &mut Vec<Polynomial<F>>,\n    ris: &mut Vec<Polynomial<F>>,\n) -> (Polynomial<F>, Vec<G2Point<F, E2>>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let mut new_lines = vec![f.clone(), f.clone()];\n    let mut new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1) = double_step(&q[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1);\n        new_points.push(t);\n    }\n    let new_f = extf_mul(new_lines, None, Some(qis), Some(ris));\n    (new_f, new_points)\n}\n\nfn bit_00_case<F, E2>(\n    f: &Polynomial<F>,\n    q: &[G2Point<F, E2>],\n    y_inv: &[FieldElement<F>],\n    x_neg_over_y: &[FieldElement<F>],\n    qis: &mut Vec<Polynomial<F>>,\n    ris: &mut Vec<Polynomial<F>>,\n) -> (Polynomial<F>, Vec<G2Point<F, E2>>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let mut new_lines = vec![f.clone(), f.clone(), f.clone(), f.clone()];\n    let mut new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1) = double_step(&q[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1.clone());\n        new_lines.push(l1);\n        new_points.push(t);\n    }\n    let mut new_new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1) = double_step(&new_points[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1);\n        new_new_points.push(t);\n    }\n    let new_f = extf_mul(new_lines, None, Some(qis), Some(ris));\n    (new_f, new_new_points)\n}\n\nfn bit_1_init_case<F, E2>(\n    f: &Polynomial<F>,\n    q: &[G2Point<F, E2>],\n    y_inv: &[FieldElement<F>],\n    x_neg_over_y: &[FieldElement<F>],\n    c: &Polynomial<F>,\n    qis: &mut Vec<Polynomial<F>>,\n    ris: &mut Vec<Polynomial<F>>,\n) -> (Polynomial<F>, Vec<G2Point<F, E2>>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let mut new_lines = vec![f.clone(), f.clone(), c.clone()];\n    let mut new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1, l2) = triple_step(&q[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1);\n        new_lines.push(l2);\n        new_points.push(t);\n    }\n    let new_f = extf_mul(new_lines, None, Some(qis), Some(ris));\n    (new_f, new_points)\n}\n\n#[allow(clippy::too_many_arguments)]\nfn bit_1_case<F, E2>(\n    f: &Polynomial<F>,\n    q: &[G2Point<F, E2>],\n    q_select: &[G2Point<F, E2>],\n    y_inv: &[FieldElement<F>],\n    x_neg_over_y: &[FieldElement<F>],\n    c_or_c_inv: &Polynomial<F>,\n    qis: &mut Vec<Polynomial<F>>,\n    ris: &mut Vec<Polynomial<F>>,\n) -> (Polynomial<F>, Vec<G2Point<F, E2>>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let mut new_lines = vec![f.clone(), f.clone(), c_or_c_inv.clone()];\n    let mut new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1, l2) = double_and_add_step(&q[k], &q_select[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1);\n        new_lines.push(l2);\n        new_points.push(t);\n    }\n    let new_f = extf_mul(new_lines, None, Some(qis), Some(ris));\n    (new_f, new_points)\n}\n\n#[allow(clippy::too_many_arguments)]\nfn bit_01_case<F, E2>(\n    f: &Polynomial<F>,\n    q: &[G2Point<F, E2>],\n    q_select: &[G2Point<F, E2>],\n    y_inv: &[FieldElement<F>],\n    x_neg_over_y: &[FieldElement<F>],\n    c_or_c_inv: &Polynomial<F>,\n    qis: &mut Vec<Polynomial<F>>,\n    ris: &mut Vec<Polynomial<F>>,\n) -> (Polynomial<F>, Vec<G2Point<F, E2>>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let mut new_lines = vec![f.clone(), f.clone(), f.clone(), f.clone()];\n    let mut new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1) = double_step(&q[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1.clone());\n        new_lines.push(l1);\n        new_points.push(t);\n    }\n\n    let mut new_new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1, l2) =\n            double_and_add_step(&new_points[k], &q_select[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1);\n        new_lines.push(l2);\n        new_new_points.push(t);\n    }\n\n    new_lines.push(c_or_c_inv.clone());\n    let new_f = extf_mul(new_lines, None, Some(qis), Some(ris));\n    (new_f, new_new_points)\n}\n\n#[allow(clippy::too_many_arguments)]\nfn bit_10_case<F, E2>(\n    f: &Polynomial<F>,\n    q: &[G2Point<F, E2>],\n    q_select: &[G2Point<F, E2>],\n    y_inv: &[FieldElement<F>],\n    x_neg_over_y: &[FieldElement<F>],\n    c_or_c_inv: &Polynomial<F>,\n    qis: &mut Vec<Polynomial<F>>,\n    ris: &mut Vec<Polynomial<F>>,\n) -> (Polynomial<F>, Vec<G2Point<F, E2>>)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]>,\n{\n    let mut new_lines = vec![f.clone(), f.clone(), f.clone(), f.clone()];\n    new_lines.push(c_or_c_inv.clone());\n    new_lines.push(c_or_c_inv.clone());\n\n    let mut new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1, l2) = double_and_add_step(&q[k], &q_select[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1.clone());\n        new_lines.push(l1);\n        new_lines.push(l2.clone());\n        new_lines.push(l2);\n        new_points.push(t);\n    }\n\n    let mut new_new_points = vec![];\n    for k in 0..q.len() {\n        let (t, l1) = double_step(&new_points[k], &y_inv[k], &x_neg_over_y[k]);\n        new_lines.push(l1);\n        new_new_points.push(t);\n    }\n\n    let new_f = extf_mul(new_lines, None, Some(qis), Some(ris));\n    (new_f, new_new_points)\n}\n\n#[allow(clippy::type_complexity)]\npub fn multi_pairing_check<F, E2, E6, E12>(\n    p: &[G1Point<F>],\n    q: &[G2Point<F, E2>],\n    m: &Option<Polynomial<F>>,\n) -> (\n    Polynomial<F>,\n    Option<Polynomial<F>>,\n    Polynomial<F>,\n    Vec<FieldElement<F>>,\n    Vec<Polynomial<F>>,\n    Vec<Polynomial<F>>,\n)\nwhere\n    F: IsPrimeField + CurveParamsProvider<F> + IsSubFieldOf<E2>,\n    E2: IsField<BaseType = [FieldElement<F>; 2]> + IsSubFieldOf<E6>,\n    E6: IsField<BaseType = [FieldElement<E2>; 3]> + IsSubFieldOf<E12>,\n    E12: IsField<BaseType = [FieldElement<E6>; 2]>,\n    FieldElement<F>: ByteConversion,\n{\n    assert_eq!(p.len(), q.len());\n    // let n_pairs: usize = p.len();\n\n    let (y_inv, x_neg_over_y) = precompute_consts(p);\n\n    let loop_counter = &F::get_curve_params().loop_counter;\n\n    let (mut qis, mut ris) = (vec![], vec![]);\n\n    let (c_or_c_inv, scaling_factor, scaling_factor_sparsity) =\n        get_root_and_scaling_factor(p, q, m);\n    let w = Polynomial::new(scaling_factor.clone());\n    let compact_scaling_factor =\n        remove_and_compact_elements_given_sparsity(&scaling_factor, &scaling_factor_sparsity);\n\n    let lambda_root;\n    let lambda_root_inverse;\n    let c;\n    let c_inv;\n\n    let curve_id = F::get_curve_params().curve_id;\n    match curve_id {\n        CurveID::BLS12_381 => {\n            lambda_root = None;\n            lambda_root_inverse = c_or_c_inv.clone();\n            c = None;\n            c_inv = conjugate_e12d(lambda_root_inverse.clone());\n        }\n        CurveID::BN254 => {\n            lambda_root = Some(c_or_c_inv.clone());\n            lambda_root_inverse = extf_inv(&c_or_c_inv, Some(&mut qis), Some(&mut ris));\n            c = Some(c_or_c_inv.clone());\n            c_inv = lambda_root_inverse.clone();\n        }\n        _ => unimplemented!(),\n    }\n\n    let mut f = c_inv.clone();\n    let mut qs;\n\n    let mut q_neg = vec![];\n    if loop_counter.contains(&-1) {\n        for point in q {\n            q_neg.push(point.neg());\n        }\n    }\n\n    let start_index = loop_counter.len() - 2;\n\n    if loop_counter[start_index] == 1 {\n        (f, qs) = bit_1_init_case(&f, q, &y_inv, &x_neg_over_y, &c_inv, &mut qis, &mut ris);\n    } else if loop_counter[start_index] == 0 {\n        (f, qs) = bit_0_case(&f, q, &y_inv, &x_neg_over_y, &mut qis, &mut ris);\n    } else {\n        unimplemented!();\n    }\n\n    let mut i: i32 = (start_index - 1) as i32;\n    while i >= 0 {\n        let idx = i as usize;\n        if loop_counter[idx] == 0 {\n            if idx > 0 {\n                let next_bit = loop_counter[idx - 1];\n                if next_bit == 0 {\n                    // 00 case\n                    let (new_f, new_points) =\n                        bit_00_case(&f, &qs, &y_inv, &x_neg_over_y, &mut qis, &mut ris);\n                    f = new_f;\n                    qs = new_points;\n                    i -= 1; // Skip next bit\n                } else if (next_bit == 1 || next_bit == -1)\n                    && F::get_curve_params().curve_id == CurveID::BN254\n                {\n                    // 01 or 0(-1) case\n                    let q_select: Vec<G2Point<F, E2>> = qs\n                        .iter()\n                        .enumerate()\n                        .map(|(k, _)| {\n                            if next_bit == 1 {\n                                q[k].clone()\n                            } else {\n                                q_neg[k].clone()\n                            }\n                        })\n                        .collect();\n                    let c_or_c_inv = if next_bit == 1 {\n                        &c_inv\n                    } else {\n                        c.as_ref().unwrap()\n                    };\n                    let (new_f, new_points) = bit_01_case(\n                        &f,\n                        &qs,\n                        &q_select,\n                        &y_inv,\n                        &x_neg_over_y,\n                        c_or_c_inv,\n                        &mut qis,\n                        &mut ris,\n                    );\n                    f = new_f;\n                    qs = new_points;\n                    i -= 1; // Skip next bit\n                } else {\n                    // Single 0 (BLS only)\n                    let (new_f, new_points) =\n                        bit_0_case(&f, &qs, &y_inv, &x_neg_over_y, &mut qis, &mut ris);\n                    f = new_f;\n                    qs = new_points;\n                }\n            } else {\n                // Single 0 at the end\n                let (new_f, new_points) =\n                    bit_0_case(&f, &qs, &y_inv, &x_neg_over_y, &mut qis, &mut ris);\n                f = new_f;\n                qs = new_points;\n            }\n        } else if loop_counter[idx] == 1 || loop_counter[idx] == -1 {\n            let q_select: Vec<G2Point<F, E2>> = qs\n                .iter()\n                .enumerate()\n                .map(|(k, _)| {\n                    if loop_counter[idx] == 1 {\n                        q[k].clone()\n                    } else {\n                        q_neg[k].clone()\n                    }\n                })\n                .collect();\n            let c_or_c_inv = if loop_counter[idx] == 1 {\n                &c_inv\n            } else {\n                &c.clone().unwrap()\n            };\n\n            if idx > 0\n                && loop_counter[idx - 1] == 0\n                && F::get_curve_params().curve_id == CurveID::BN254\n            {\n                // 10 or (-1)0 case\n                let (new_f, new_points) = bit_10_case(\n                    &f,\n                    &qs,\n                    &q_select,\n                    &y_inv,\n                    &x_neg_over_y,\n                    c_or_c_inv,\n                    &mut qis,\n                    &mut ris,\n                );\n                f = new_f;\n                qs = new_points;\n                i -= 1; // Skip next bit\n            } else if idx == 0 || F::get_curve_params().curve_id == CurveID::BLS12_381 {\n                // Single ±1 at the end\n                let (new_f, new_points) = bit_1_case(\n                    &f,\n                    &qs,\n                    &q_select,\n                    &y_inv,\n                    &x_neg_over_y,\n                    c_or_c_inv,\n                    &mut qis,\n                    &mut ris,\n                );\n                f = new_f;\n                qs = new_points;\n            } else {\n                panic!(\"Bit {} not implemented\", loop_counter[idx]);\n            }\n        } else {\n            panic!(\"Bit {} not implemented\", loop_counter[idx]);\n        }\n        i -= 1;\n    }\n\n    let final_r_sparsity = Some(vec![\n        true, false, false, false, false, false, false, false, false, false, false, false,\n    ]);\n\n    let frobenius_maps = get_frobenius_maps_ext_degree_12(curve_id);\n\n    match curve_id {\n        CurveID::BN254 => {\n            let mut lines = bn254_finalize_step(&qs, q, &y_inv, &x_neg_over_y);\n            lines.insert(0, f);\n            f = extf_mul(lines, None, Some(&mut qis), Some(&mut ris));\n            let c_inv_frob_1 = frobenius(&frobenius_maps, &c_inv, 1, 12);\n            let c_frob_2 = frobenius(&frobenius_maps, c.as_ref().unwrap(), 2, 12);\n            let c_inv_frob_3 = frobenius(&frobenius_maps, &c_inv, 3, 12);\n            let mut ps = vec![f, w, c_inv_frob_1, c_frob_2, c_inv_frob_3];\n            if m.is_some() {\n                ps.push(m.clone().unwrap());\n            }\n            f = extf_mul(ps, final_r_sparsity, Some(&mut qis), Some(&mut ris));\n        }\n        CurveID::BLS12_381 => {\n            let c_inv_frob_1 = frobenius(&frobenius_maps, &c_inv, 1, 12);\n            f = conjugate_e12d(f);\n            let w = conjugate_e12d(w);\n            let c_inv_frob_1 = conjugate_e12d(c_inv_frob_1);\n            let mut ps = vec![f, w, c_inv_frob_1];\n            if m.is_some() {\n                ps.push(m.clone().unwrap());\n            }\n            f = extf_mul(ps, final_r_sparsity, Some(&mut qis), Some(&mut ris));\n        }\n        _ => unimplemented!(),\n    }\n\n    (\n        f,\n        lambda_root,\n        lambda_root_inverse,\n        compact_scaling_factor,\n        qis,\n        ris,\n    )\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::algebra::extf_mul::from_e2;\n    use crate::definitions::{BLS12381PrimeField, BN254PrimeField};\n\n    #[test]\n    fn test_get_root_and_scaling_factor_1() {\n        let p = [\n            (\n                \"0x1d0634f3f21e7890d1df87eab84852372b905c9ccdb6d03cb7b9a5409b7efcd8\",\n                \"0x24c53532773dce26eb3f1d6ba3b10e2b53dc193baa1d4f4d3021032564460978\",\n            ),\n            (\n                \"0x2585e4f8a31664cbfc531bccffafcf1e59d91fb9536c985db33c69f7c242e07a\",\n                \"0x1d2d2799db056ed14f48d341183118d68ea4131357fa42444057cf0c1d62ae3c\",\n            ),\n        ];\n        let q = [\n            (\n                \"0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\",\n                \"0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\",\n                \"0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\",\n                \"0x90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b\",\n            ),\n            (\n                \"0x1314aaf1c372e6d7635e573808d9d5c7178bdce7335eb0538f718d8e6651eeb1\",\n                \"0x14c25d3aec745e5a2d4aba9e1448a8cc1048d01a5289f29ccc5acf5e81526673\",\n                \"0x397391b7b25e2fba7d1de6d86501d49b6a8dab10d1d0efd5869ecd23aab8e9\",\n                \"0x1863ac65eca09e89b058c1ff7e4c5c7ec7e5859b385a553ea12434f4eda6db36\",\n            ),\n        ];\n        let c = [\n            \"0x14156ca1853095df27f3cb7c50eca75e794d2f14195c16df4a0f8f9dcb48bee9\",\n            \"0xdc2a20a6107d4c49fed6b2018946bcc2a8dad06f01d099a6df0a4a55ed21b59\",\n            \"0x14260c5afb0b1148ed80f8339cf9e06ff04257cb6c1817c4efa721fc98f69503\",\n            \"0xafe8a09df07bf3dffefe512eb9448ef436dd090f98323135baab8ae3c766c60\",\n            \"0x114692950f53d4f707bb02cc2b5dc98aff5936811707d6579371dae20368253c\",\n            \"0x2dd3fca72591963149646f1e106dc0ee917551f5a9da397fe12d4a3939ce650c\",\n            \"0x1750bd450b85cbd62ea3f1b228beff5fd364a127d6054be99a9248497b82062a\",\n            \"0x1248cfad33a2147726169d3ce55db12ecafd74bc4b83377c168d89b919386546\",\n            \"0x28d156bac04e64938816b055888399c99a954b82724e5f5589d549a709b2b5ef\",\n            \"0x39e1ab153bd709556afece475580f453f9126f256fbb49c235bc75082f5f26e\",\n            \"0x14853f940bf5c557c7f558d3e74e6617d7f08b54fd83597fed1d7e7b9d09e04\",\n            \"0xaa480d613601947fee14a3ce2b7af4e1872fe49ae3473546aa01a618b78b125\",\n        ];\n        let f = [\n            \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n        ];\n        let xs = [\n            true, false, true, false, true, false, true, false, true, false, true, false,\n        ];\n        let p = p\n            .into_iter()\n            .map(|(x, y)| {\n                G1Point::new(\n                    FieldElement::<BN254PrimeField>::from_hex(x).unwrap(),\n                    FieldElement::<BN254PrimeField>::from_hex(y).unwrap(),\n                    false,\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let xc = Polynomial::new(\n            c.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xf = f\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree12ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree6ExtensionField;\n        let (c, f, s) = get_root_and_scaling_factor::<\n            BN254PrimeField,\n            Degree2ExtensionField,\n            Degree6ExtensionField,\n            Degree12ExtensionField,\n        >(&p, &q, &None);\n        assert_eq!(c, xc);\n        assert_eq!(f.to_vec(), xf);\n        assert_eq!(s.to_vec(), xs);\n    }\n\n    #[test]\n    fn test_get_root_and_scaling_factor_2() {\n        let p = [\n            (\n                \"0x72f26b55fb56be102cd3bc838c66439a3d6160b5c724369afbc772d02aed58e\",\n                \"0x2884b1dc4e84e30fce2f55e418ca01b3d6d1014b772ca79c580e121ca148fe75\",\n            ),\n            (\n                \"0x72f26b55fb56be102cd3bc838c66439a3d6160b5c724369afbc772d02aed58e\",\n                \"0x2884b1dc4e84e30fce2f55e418ca01b3d6d1014b772ca79c580e121ca148fe75\",\n            ),\n            (\n                \"0x72f26b55fb56be102cd3bc838c66439a3d6160b5c724369afbc772d02aed58e\",\n                \"0x2884b1dc4e84e30fce2f55e418ca01b3d6d1014b772ca79c580e121ca148fe75\",\n            ),\n        ];\n        let q = [\n            (\n                \"0xf0e8184945e8d3483069b5050fd7194c7e35d0c0a30b422f34656d6c94e40be\",\n                \"0x1752c7b6b35af45db602cf367841e5047ffab14de9079ee8fa5e15901dfef27\",\n                \"0xa822a5ba029a28335c8bbffe201ffd56deb5dea4dafbd7f615fd2aa9f5a0acc\",\n                \"0x1228147f83e3ea517fe961ad4b8ee3bf2ade626ec6d9e4fafec17b8404c0341\",\n            ),\n            (\n                \"0xf0e8184945e8d3483069b5050fd7194c7e35d0c0a30b422f34656d6c94e40be\",\n                \"0x1752c7b6b35af45db602cf367841e5047ffab14de9079ee8fa5e15901dfef27\",\n                \"0xa822a5ba029a28335c8bbffe201ffd56deb5dea4dafbd7f615fd2aa9f5a0acc\",\n                \"0x1228147f83e3ea517fe961ad4b8ee3bf2ade626ec6d9e4fafec17b8404c0341\",\n            ),\n            (\n                \"0xf0e8184945e8d3483069b5050fd7194c7e35d0c0a30b422f34656d6c94e40be\",\n                \"0x1752c7b6b35af45db602cf367841e5047ffab14de9079ee8fa5e15901dfef27\",\n                \"0xa822a5ba029a28335c8bbffe201ffd56deb5dea4dafbd7f615fd2aa9f5a0acc\",\n                \"0x1228147f83e3ea517fe961ad4b8ee3bf2ade626ec6d9e4fafec17b8404c0341\",\n            ),\n        ];\n        let m = [\n            \"0x590ff61397d0dd212bfc53caae870d85457c4bcfaccb300f066ee143625434e\",\n            \"0xf706ef44c1d0af1cc055f39a02506234d00e8eb3d74a2131fff08abcc77f5ff\",\n            \"0x22a5875254921ffd7da5ae6eba3609b9a258aeb54605464626791e8c2d23914a\",\n            \"0xae461e60176f9fc701510a38855b7b7bbcf7e5ba36080e7d54da24b20b89bf4\",\n            \"0xaae21f01619c3fa4ec0223c3dc06216c285cccb310a2f82381041f00ab0a97b\",\n            \"0xe203da0f9a03b1aac945c0f61fb2673fb43b2aaa206b95ba090599b7a5e8c2e\",\n            \"0x1e2de9ed7968cac14ad4e2c546956c34ec381b30280fda652c0775ee0202237c\",\n            \"0xf3b13b4d08af03303a0db8cbb989aa911eec40dff110a40e2837285a53cdc9\",\n            \"0x242bd1109f659686c79a5ba5d705c69b59a88b64622927b875c780e6f64e6abe\",\n            \"0x1f626f25b03417e492d2dc829a2f34f4ee684f0447a207ed1fe3501ee8a66a12\",\n            \"0x234cc399b032b927dca506524d7f4aeb8f0939709cf6ea1c727f2d3d16f4095b\",\n            \"0x8dd178fb6d5acd8339c2266bcf3504782285acc0c04208d92713b2b39e39f93\",\n        ];\n        let c = [\n            \"0x25202875a18b48d6e87a29af47945c59bebde6e323ca9e30f07b55b24f193b0f\",\n            \"0xe200b0579a47bb3bc4e8cdff399f10e04552e9e73c45803819fb7aff4be48d4\",\n            \"0x2743277dfb400b1209b242eecb685264d1d38f92b7e202dd946f1c1e893294f5\",\n            \"0x7ce37c37c9a9830297d2b276e1e10592a67e028713dcf49af707a72abcdd23f\",\n            \"0x2209ca34e9632ffe10ec67e9ba10af63294f90671a1e7136ddb0226444e3dd93\",\n            \"0x56824745ec0be7ecd30a7361a37968571854966282b36f9275c1d75a96b4bba\",\n            \"0x21c2ff8564f4b3599e173cc60a49b16b0ae54cb6fd161b3f69becd983863c1f8\",\n            \"0x21dfaf1ab1424f7a1d49d1548ca28958a1477f7783b2b95b17f74a4135c8f0ec\",\n            \"0x2cedae6373f81ff31d527af4bf9944d9cacfc9b69f42e8c899eb37b1c750776a\",\n            \"0x1b4e8f8bab34df2763de3d3ed13db73b40636e335826957af02c5ff75ecf2f7f\",\n            \"0x1da51303ee50de4521c9659455fa7db99219fcb1e47acbb5fc054b575c4de206\",\n            \"0x291ee2a6f851083adcca144de9ddd923bbb33c4bfba59dce6d63b61b27c81f88\",\n        ];\n        let f = [\n            \"0x1\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\",\n        ];\n        let xs = [\n            true, false, true, false, true, false, true, false, true, false, true, false,\n        ];\n        let p = p\n            .into_iter()\n            .map(|(x, y)| {\n                G1Point::new(\n                    FieldElement::<BN254PrimeField>::from_hex(x).unwrap(),\n                    FieldElement::<BN254PrimeField>::from_hex(y).unwrap(),\n                    false,\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let m = Polynomial::new(\n            m.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xc = Polynomial::new(\n            c.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xf = f\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree12ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree6ExtensionField;\n        let (c, f, s) = get_root_and_scaling_factor::<\n            BN254PrimeField,\n            Degree2ExtensionField,\n            Degree6ExtensionField,\n            Degree12ExtensionField,\n        >(&p, &q, &Some(m));\n        assert_eq!(c, xc);\n        assert_eq!(f.to_vec(), xf);\n        assert_eq!(s.to_vec(), xs);\n    }\n\n    #[test]\n    fn test_get_root_and_scaling_factor_3() {\n        let p = [(\"0x59d2a79bda5f8a941d4db9e360a80121d5ef96fd687003db24ddec0e0c3b63d82efa81fe174bb39be8658ef83c8c2d\", \"0x2df47e8cdf189985d5085bdcebb5ee96e40a033f5d3b7986f6992be16bc35f88c471acf7f68344f543e52fe891285a9\"), (\"0x105dcc4dce3960447d21d3c1dc39e973aaf31de52219df089bb5f797ac6d3395b71420b50de4f62a6588c9401ffefbd3\", \"0x17cb6c41f0c4e1a7394ab62a9db0be660d847ccc58358f3f9b63c98d9a7845c52e1e2b0faefd0d854043fd325dd3c34f\")];\n        let q = [(\"0x24aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8\", \"0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e\", \"0xce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801\", \"0x606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be\"), (\"0x82dc9154807866eb0f36ccb665a5fc010510bd690ddd7b540e5bf3ff02d81e98b75703a3b3d3c305a70960906e6cb09\", \"0xdd18d077ad5bd58dabb18d84a6ceebe6375a83dd242851bb4dcf956002c4efb974ffceee6709deb0dcf81d4285e5e60\", \"0x4a468eb9e206b9833d8e8e2197d3446652372ce5ef50e93c91aa58105d3a281b2e84ddb61535fe1a90bae7e6692f9b0\", \"0x198fd0ab6249082bf7007d7e8be8992de81f47ae3341c590194fa3bf769a2e5a5253527727115c334e82ed4be8da6c10\")];\n        let c = [\"0x521ad898cee9071ebcbf44d874b1a6540a5a24a4fd9c68f45778308171f9267fab695191d4eab620cf33a8eded7fd2c\", \"0x5966d7f6d173ea01e1a586966651ab83510fb89f6b2afe45cecf0013c8d5695a1e6a597a9f581d9c26c7bc732af4135\", \"0x110012a0987f151e6eacf408ccd24b9c3e637b240a4100a3ccdc16d44e3cbdf8393eb3557a64d089a1a115a3eab1a695\", \"0xfc350acc198fbd5b4d95cfcae897c7118bbf9c0479cff61cdaab0fcd1147d96b5521ac4d7d9acb3a8622465c6b1c0fe\", \"0x6d44964cce393f36664dfb78c36a4b56c817816904d06056f68e9017165ef8db1a4f97532d5c3bbed4da9a68948c926\", \"0x86f3ebd100f5f5157bc57f79a49542de5fc03a989fe46f82b0c186b4950da2943f4ad019715bc72d9969488889a609f\", \"0x18776284b17c0858f647e075e04c49ded673151413b8ce9b65bf572081d748820d57d62d54e14ea09aad1c01c5c5faac\", \"0x647bb2047c521d397fd0f7ae5bd1a1ce889e14808c4ee8f5bd8e019057fb48dad4ea34d4ff280a7232eada165a4400\", \"0xa97b4be53ee479681acc5ebfc4fae663d5040baacca25a862aae0152d3543705d87df48c8266658d2a03e597cfec8fc\", \"0x1338aeb075e78cc7505a5d70f24bb9b22ece2fe9e392d6ff22bbd02e82d79e84d590ca9645b2fc96a09f2ffc8b84a4dc\", \"0xe608702099837e04fc2e999cbb4b845ab04d0a51ea25ee04675bf96847cb9d629da62d1e4354c04ab5208100a0129af\", \"0x12c968f3ea7364e3ee21b8b2e8162fd74d36e0786ea6a88c7a10d38aa97360f22cd213ab003cca5a2ae19eefaf128521\"];\n        let f = [\"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x18bc5b99f39cbf0fd8d087688e9a0930581e2c940247cd0991e7a80fe41d8f58d83f1513f1ca42a0e74df934924892fb\", \"0x0\", \"0x0\", \"0x0\"];\n        let xs = [\n            true, false, true, false, true, false, true, false, true, false, true, false,\n        ];\n        let p = p\n            .into_iter()\n            .map(|(x, y)| {\n                G1Point::new(\n                    FieldElement::<BLS12381PrimeField>::from_hex(x).unwrap(),\n                    FieldElement::<BLS12381PrimeField>::from_hex(y).unwrap(),\n                    false,\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let xc = Polynomial::new(\n            c.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xf = f\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree6ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree12ExtensionField;\n        let (c, f, s) = get_root_and_scaling_factor::<\n            BLS12381PrimeField,\n            Degree2ExtensionField,\n            Degree6ExtensionField,\n            Degree12ExtensionField,\n        >(&p, &q, &None);\n        assert_eq!(c, xc);\n        assert_eq!(f.to_vec(), xf);\n        assert_eq!(s.to_vec(), xs);\n    }\n\n    #[test]\n    fn test_get_root_and_scaling_factor_4() {\n        let p = [(\"0x18154782ce0913b21588066dbed78d3d341e911d49f154540dff1f15010392a6da1f95a6e4f817e54aede0613c17035c\", \"0x11a612bdd0bc09562856a70df9ef4088763fe611fb85858d3070afd4f0e121de7fcee603d77d61326ef5a9a5a681757\"), (\"0x18154782ce0913b21588066dbed78d3d341e911d49f154540dff1f15010392a6da1f95a6e4f817e54aede0613c17035c\", \"0x11a612bdd0bc09562856a70df9ef4088763fe611fb85858d3070afd4f0e121de7fcee603d77d61326ef5a9a5a681757\"), (\"0x18154782ce0913b21588066dbed78d3d341e911d49f154540dff1f15010392a6da1f95a6e4f817e54aede0613c17035c\", \"0x11a612bdd0bc09562856a70df9ef4088763fe611fb85858d3070afd4f0e121de7fcee603d77d61326ef5a9a5a681757\")];\n        let q = [(\"0x120a838699abaae7ed9481944d92a8c02d22b8cea4ff21ab92fab4f255a20d09700542e530d2fddc2fa171cdd4d31a55\", \"0x158186f6f2dd04cfa4e785476143a906b63b7f3476ad681992e1b13e2c93fc9957b1784151cd5fdc71cf4557ef606935\", \"0x2bd32fdfe26d866771e21806a44c4a6d642c3dd98128703cde395f3ee4e353cf25a2e219f1c7dcdbe4574f05d0c093b\", \"0x7ff9623d918ca12e0ff6ccefc83cf9d283b7231df1db3f9eb8540654b533da9b594fc277060005397ea11f7e9a26050\"), (\"0x120a838699abaae7ed9481944d92a8c02d22b8cea4ff21ab92fab4f255a20d09700542e530d2fddc2fa171cdd4d31a55\", \"0x158186f6f2dd04cfa4e785476143a906b63b7f3476ad681992e1b13e2c93fc9957b1784151cd5fdc71cf4557ef606935\", \"0x2bd32fdfe26d866771e21806a44c4a6d642c3dd98128703cde395f3ee4e353cf25a2e219f1c7dcdbe4574f05d0c093b\", \"0x7ff9623d918ca12e0ff6ccefc83cf9d283b7231df1db3f9eb8540654b533da9b594fc277060005397ea11f7e9a26050\"), (\"0x120a838699abaae7ed9481944d92a8c02d22b8cea4ff21ab92fab4f255a20d09700542e530d2fddc2fa171cdd4d31a55\", \"0x158186f6f2dd04cfa4e785476143a906b63b7f3476ad681992e1b13e2c93fc9957b1784151cd5fdc71cf4557ef606935\", \"0x2bd32fdfe26d866771e21806a44c4a6d642c3dd98128703cde395f3ee4e353cf25a2e219f1c7dcdbe4574f05d0c093b\", \"0x7ff9623d918ca12e0ff6ccefc83cf9d283b7231df1db3f9eb8540654b533da9b594fc277060005397ea11f7e9a26050\")];\n        let m = [\"0x276d8a09b1ef471d61e1fe932f3136b6412048dad82afcf371bde647281b4f0753c7b540b911c83d732e7d278eca2b2\", \"0x84dc8eb534426c70fdeb97ad357bcaa08f3bcf837b69302f78975823557a6eaed4035682d08819331e98c628ad7e6a4\", \"0xad1ecf602d65fe881eaa6e0db2e7f9897c5d9aac15601e7eac85ffce2bc7b2518fb953cd8ab7356837a3539e775e8a4\", \"0xc44713fa939be012d57473ac1ba1386389c858a2803bf5114d8b2b539c52b38e862bb30b4bbd298bab0e4881a5ebb34\", \"0x17d27924032bad1b96b038a774356664cf5f284c5d9047dd1f6ed0fc4768c4d33ae5bde98c8a60ac405578242750266c\", \"0x252d46d43966352b46ef871529d5c8a74ead9d4395930565d5411099e394511d4bf5f21dca890b5c14238be57f05981\", \"0xdb2280eeda7144c402dfe7f6198bb2924ef03ae600f7222606ac452167328657347b2031e65e90c6094915aaef973cd\", \"0x190ab4a19e1f1b981b892baedf1e1ed1387d8c002c5f3a2031f94b4bb159c235c039f75271c5034bc18b6d1c45a03c30\", \"0x16e03a19b04611cdff78c5fd9170f7ea386763607860320a369f48c0083f000e7eeec362f00e883b8262021a004b9fc8\", \"0x128d8d88c3c8616ff326a554bed73f63ea723c5eca33d4914ba7b263cc869557904c59cff3b76b5dfdcf84760b96fa0c\", \"0x36d2ef1d9b923357234e298303031f5c1bf5e2f73d4750a712262fd5e7ddfa653a4708e4380616825a3a723a4dc2b5c\", \"0x329f18e7852fa05613e92046afab08a2bc52479f09c105f34b2a5b11f48e46a872245a2be53e886831d35b55f343069\"];\n        let c = [\"0x105016815aeab4c1b10cba422f6a4e683585d4ccc465352ad2f1409607d64c54b73d78aa8bdaa3278720844c37567039\", \"0xe11367a38a9da9df34240738a7a3dca8c8fe5ccf68c0b23ece7f8c4810788c9023c2ad2f14f1369d17825c133efc2d6\", \"0x13e42c3e0801ac2144a06fbf1712c06213e43c0272585dc031325aee1b1dbae62f7c153bf3c140b105713ed07834b4a\", \"0xc759210484ca64b6a064096c61d5ab0a8dc2dffbaa7e2dc7336f37c2c0d759c4ff697bf713b362105bba1e8fcbb94a0\", \"0xd6a3922a006a5ac269f11053acef2763be703fa77d9050683f2d1513c7ce01407cbcbebdb2b0eb950e9144b7f2f02fa\", \"0xde779332fd6d9f465b20e6a6a17068bd9eb8099e645e126c5ec4b01df1cb55da421916cd7a563e564895cf2511754e1\", \"0x92dc96c5c90e4a4e20a4cc830355b613eab563b9cb9b14af48de62916116cc249eda46862b4676a303984e5006cae4a\", \"0xe6467206b01d8ecaea8fdd90675022b9d62cbd8685978d49df16aef14c96dda37955922adef7cf0ce5e70667934f1c\", \"0x33f8a5722e1821e1f8c5f4aeb067bfcab205abe6c371677f1cea39accc8cc574af258075a0918f6778263817954d908\", \"0x130fe108a81a7753e3f765d559da93e49907f3bcb160ed13cf4fd2a6884e312f05ffe06b5bec5a38ecbb7806f62dcc79\", \"0xcd24160fefddfaa66c9468a5c5e051f326dbaef7f17399b2f2f405981e6aca41db75f4d675bac7aed2b433f922616d3\", \"0x17f2b41158bbf2cb53644eae30ce07f0ccb46385c2b2b40a6e0c09afc5dbcf4dffd7fc0582d362ba811d62d7264e9909\"];\n        let f = [\"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x0\", \"0x66ba50e8c99edbeedf33b876935c3e1b9cf1af588eafb63c6a64d7c9213ad89ad6e2940079b43033d2c6148ace378dd\", \"0x0\", \"0x0\", \"0x0\"];\n        let xs = [\n            true, false, true, false, true, false, true, false, true, false, true, false,\n        ];\n        let p = p\n            .into_iter()\n            .map(|(x, y)| {\n                G1Point::new(\n                    FieldElement::<BLS12381PrimeField>::from_hex(x).unwrap(),\n                    FieldElement::<BLS12381PrimeField>::from_hex(y).unwrap(),\n                    false,\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let m = Polynomial::new(\n            m.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xc = Polynomial::new(\n            c.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xf = f\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree6ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree12ExtensionField;\n        let (c, f, s) = get_root_and_scaling_factor::<\n            BLS12381PrimeField,\n            Degree2ExtensionField,\n            Degree6ExtensionField,\n            Degree12ExtensionField,\n        >(&p, &q, &Some(m));\n        assert_eq!(c, xc);\n        assert_eq!(f.to_vec(), xf);\n        assert_eq!(s.to_vec(), xs);\n    }\n\n    #[test]\n    fn test_bit_0_case_1() {\n        let f = [\n            \"0x1d7a9ffbbe137d697794dbccbd7925ea98507cf8d4445d3e89123811ede12825\",\n            \"0x1f45aa2ee73f15e275e5c1fc0ff08be0981a61d8e7642301653a6307c7467811\",\n            \"0x2446d99f276e4c8bc63d81e8d0c1e37c901a5a569865533968e39b5083fc576e\",\n            \"0x223bd50b771fcaa905131a5f04c3c634c9df344731b5aada49be919aaa447cc7\",\n            \"0x24cfef2958a7c9c4d7ddfacdd59750105dcc37f6aefbf4a9ce706bc36252c47\",\n            \"0x3a974db52b274684955cb370b0ac66e3e295ea6e9789fb7259c294210f7720e\",\n            \"0x160b7346ec9fdd9841feb355a44845dc30c2a9ae3fb8266ad697b531de5e2fb6\",\n            \"0xe46af84e1cbba805f204fa5ce1c9a99c79799110a56b5d534495a358f9c739f\",\n            \"0x1f2b5709d0d7c9499b9524e9708ac412d3fa05fea9b51192113e131bd5572a21\",\n            \"0x8a75eef583ffc3b0f690cd9eab121b1f329194c1052a86d50224b92838c5d76\",\n            \"0xef3a64570d17038de7ec74175c125ac7e8780509764f07572ce9593878da9fb\",\n            \"0x2a6290607745b58a7b87bc78053320664e06d12b35825f15893ad52a39f54331\",\n        ];\n        let q = [\n            (\n                \"0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\",\n                \"0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\",\n                \"0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\",\n                \"0x90689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b\",\n            ),\n            (\n                \"0x1314aaf1c372e6d7635e573808d9d5c7178bdce7335eb0538f718d8e6651eeb1\",\n                \"0x14c25d3aec745e5a2d4aba9e1448a8cc1048d01a5289f29ccc5acf5e81526673\",\n                \"0x397391b7b25e2fba7d1de6d86501d49b6a8dab10d1d0efd5869ecd23aab8e9\",\n                \"0x1863ac65eca09e89b058c1ff7e4c5c7ec7e5859b385a553ea12434f4eda6db36\",\n            ),\n        ];\n        let y = [\n            \"0x1ab9de59fc825e8b5326694c7d82556785cb9cbfd0d0a11721d1972c21c411f8\",\n            \"0x16a475582082ae3616c808acd62684170d9fa7bf234110353e9cbceca19d2c69\",\n        ];\n        let x = [\n            \"0x27783160c70b7ac760cff888c621846a7ed80e50c7ea8a7a718a4ad8a50886fb\",\n            \"0x10a6d46618419682152a25b5f819b22c2e572d1f670d12026a18c384248dad2f\",\n        ];\n        let xf = [\n            \"0x6e2d5c667e253ffe1d604e9b0c0efb376aaa3e1f2fa8194a9fdd627525394de\",\n            \"0x2dc3c5e55face7c5e2c971b204e63954fbc8ad239d2d152e532c421b7834a99d\",\n            \"0x2ff47505930441520ea2801041714bcb5d41a0ffa81940aec94ea9901fcac97d\",\n            \"0xdab9fd3d1ef5226f76a2af1d6b410d8639501aa55867c1f0779e0422d545f0c\",\n            \"0x2fea029bdb6a10f53ffd60992916c6410e0f53520845bfd3e55f70e8272c8fb3\",\n            \"0x2f329aa1c588e3e4b7d8f5bedbe3c09728563ff0c46ce45b66636cb6ba1ee436\",\n            \"0x2290e74d07afff26a405ca3722d951cb9a512f1c100fa50e29907ad3283e7b83\",\n            \"0x6bd6eba6eb034c98be6fdabbb6f2986a20934fe7f4ccb1aa1cff1983d7d2ae4\",\n            \"0x1ca0c85d7f94b5c6b3543992e315765cb35d0f7d49149a6939c1e7afec80ee3c\",\n            \"0x1f70622e79ccbeb35ecce1f7718bba441de2df4f3e916ca84262a68f9eea11f9\",\n            \"0x2492333e1554b6d2c1ad39913d06e14c6ad3a1569e62952be0e54c3427ea8aab\",\n            \"0x2a9baf66b1ec17ae1f6f435746d944886953830b40efced523794fd2aa17d4a\",\n        ];\n        let xp = [\n            (\n                \"0x27dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9\",\n                \"0x203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad79\",\n                \"0x4bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e\",\n                \"0x195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de152\",\n            ),\n            (\n                \"0x19092b3d714b3bb6599b735386dd05eab401e72057bab79773a6de8f5693387b\",\n                \"0x1acb3fbdde3ce471791558747f0e52b1b7a708834dc533393bcfc2af317703ee\",\n                \"0x258d7966e4b36382460549a44d5cbe96fbe1c412e36f25218438f72d7d387077\",\n                \"0x2a58bf6a639ae104439ba4e8db873938a26fcd5bd0b68beb20c44705d9820860\",\n            ),\n        ];\n        let xi = [[\n            \"0x11a253cbe22e3132c161d5e3e3343657bbd9cf3475b824786b01f9b6b2954451\",\n            \"0x15c7110a9b8d99717d5b36a5ace0ec208511247742b718857d387d03646e962a\",\n            \"0xce691f6829cbf96477c2680a0b89f055de1342852e78bf44a00a771618a2fb9\",\n            \"0x1dbb1eac7562ccccd643bd095a91457d40cdc83000932991e9eb0d518a123ac8\",\n            \"0x334cb5ce87c27266ceb11f14868d44bc2b0d0642fe2d03cccf424afcde8fb8f\",\n            \"0x2fad54548575eabff6e9ff91ccec2fd782accb81b070e6920fff020ab182dcab\",\n            \"0x205830d2f4414548e1226815b77fa991c4ad82698e2714e9fe8186d3eb02a938\",\n            \"0x20e43c4e7765ce864bc67ee78d7ee54a77de4888351a6f55e1014a7ba6b7db7d\",\n            \"0xf5529f07c581dfe555a1997f4037a95be74e5a845fbe8ef3bfee3bfa46bafee\",\n            \"0x2fdbcae39c35e9916e344eca4617e328542adda118c9c7647a66752f0f9312be\",\n            \"0x22cece7898caa51dc9b45b37d3bcab7bee6bf46a8bb62a59772f9bfba17143c7\",\n            \"0x237133eb50789ad88140f3acabdd1e0eb4f1a5ba81f2dbcf40379242cfcbcebc\",\n            \"0xd6bc07c1405393e2a04f16c95d908468731b135ec8df7280a411bbf74bc2a97\",\n            \"0x1c8f529ca5c5f3db100755ee2b62b30fbac4ee36be96a2991bb5c5df10409f30\",\n            \"0x29692f0b8e65ae15c851e5558aba62671dbbad538149b59ada944f8913daab87\",\n            \"0x2091081625469e0549f3ad0902bb68b780db24524a08fcab699a012dead87cb5\",\n            \"0x15420ca5e286164b842ccdd5ede9c9d488836ae7e4250735d913bc865c686ffd\",\n            \"0x2910950b8c5e2f956ea34c9f80bedc007437f5be8a2d391182d57cc107d44ceb\",\n            \"0xcddf598527c71f4c6fe7f3a63f2a6088c35d97703d6a457935d29e9e80f32eb\",\n            \"0x26ffdefe8388fcb1b412d6d5da117ad677c3d01634e46a148db9582257e95966\",\n            \"0xd6ab9f93f6f075e4d50a47dfd2b76c7891b8a7d309beb55e52ff2573ee2f439\",\n            \"0x488ebca58142b146b8891ec91c9eb2f7dd13a31d648eb3b58337aa3f473f7c\",\n            \"0x4a5388ce5bbca66cb7b57f8d1ef6d825f32ba5dee832d7120c24de5db34b0d1\",\n            \"0x6d4d58288e64b3cc7248a086e64f07c9edd468fe1339b6475c6cabe949e4492\",\n            \"0x27a0872bf114a6aff047a0c387c16408308894a8586b2ceca263af44b9e5e2ad\",\n            \"0x212c049231594608761ee58f620b6744e388ff939835e413e987b16a53ac10ee\",\n            \"0xd6fb3a414a6bf136a738e599e89ac51c2bc026a344b709e78b931803d9eb471\",\n            \"0x2d5fd74719cbc5e3b6e5d5acbe6d908e436163e27df30a584573e7beecee6a8c\",\n            \"0x2b238a056fc7b2b14b73eaef6efba5a7fb9ac70d230379d1c72d70fa80ec5f83\",\n        ]];\n        let xj = [[\n            \"0x6e2d5c667e253ffe1d604e9b0c0efb376aaa3e1f2fa8194a9fdd627525394de\",\n            \"0x2dc3c5e55face7c5e2c971b204e63954fbc8ad239d2d152e532c421b7834a99d\",\n            \"0x2ff47505930441520ea2801041714bcb5d41a0ffa81940aec94ea9901fcac97d\",\n            \"0xdab9fd3d1ef5226f76a2af1d6b410d8639501aa55867c1f0779e0422d545f0c\",\n            \"0x2fea029bdb6a10f53ffd60992916c6410e0f53520845bfd3e55f70e8272c8fb3\",\n            \"0x2f329aa1c588e3e4b7d8f5bedbe3c09728563ff0c46ce45b66636cb6ba1ee436\",\n            \"0x2290e74d07afff26a405ca3722d951cb9a512f1c100fa50e29907ad3283e7b83\",\n            \"0x6bd6eba6eb034c98be6fdabbb6f2986a20934fe7f4ccb1aa1cff1983d7d2ae4\",\n            \"0x1ca0c85d7f94b5c6b3543992e315765cb35d0f7d49149a6939c1e7afec80ee3c\",\n            \"0x1f70622e79ccbeb35ecce1f7718bba441de2df4f3e916ca84262a68f9eea11f9\",\n            \"0x2492333e1554b6d2c1ad39913d06e14c6ad3a1569e62952be0e54c3427ea8aab\",\n            \"0x2a9baf66b1ec17ae1f6f435746d944886953830b40efced523794fd2aa17d4a\",\n        ]];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        let xi = xi\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xj = xj\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let mut i = vec![];\n        let mut j = vec![];\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        let (f, p) =\n            bit_0_case::<BN254PrimeField, Degree2ExtensionField>(&f, &q, &y, &x, &mut i, &mut j);\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n        assert_eq!(i, xi);\n        assert_eq!(j, xj);\n    }\n\n    #[test]\n    fn test_bit_0_case_2() {\n        let f = [\"0x6dcf1ec2bee9d55fd7c7dd01f0d89e52ce00053fb4cd271af8ac67e915aa56c1f18943cf63d7acf09f9e238c86f7575\", \"0x7f05f480f32402899fc238d5e397600577a07eddd78a63793400f32912e689ef50ff7298c542fcbddc8a2f30326ff28\", \"0x71d870e4553f214175e57f71397705b5336a8c404e29abab7505079976315ae30aea8c7fc8e47f2ce78aed551c79270\", \"0x37df42454ed3974bb2b32f97123a17956e452893cabef6a29a0888f8ce8b899253e37ae32f0ae88611fa10260d597c0\", \"0xba703f387adf415b877fd75815f8322190dde62bdc8a55e54b5dec1284a8c9177b3c945a72f0e1e9c109d242988e116\", \"0x14068f72159c932c910dd5126f8907d9616c496a0f51dbcc5585ddebaf32dc4e03ae577f1f07d02f85fc8a875e197521\", \"0x17dfc12834ee7334831b24af1174df6680c4991d4d20cc807c5e8df6083d142e2fd17ccfce6bb359366acbb7781372b9\", \"0x17d3b0da632dabdf4ba0f6c890308dd36ed98b5e1d50a8160a2349e79dd3de20eea74d8b95daa3bc8b9ac34a59ff12f0\", \"0x17ddaa28e29c2317b96c21b7fd31f8f2bab3cabf17b82c770ed0c77db94e0738119993eb4c5d01ef3358bf5ad26286cc\", \"0x22b2500baf6ce28a86979f31387bb67348f155192cf97f99aeb257fdcdc23c15eb5315ea817f28532b8d5198e199dd\", \"0x6524f53a10bd1ed1f7de6acc2d4414912600bfec37d116a4d096e4e54120fe17325dec0b0e382b90ef6654c3bd2e20c\", \"0xebb85352772f284d12c95bf531a0f1fc69bf6acd1695e9af23d641db780ebb70c7fbfbe8a680e766390ddaa62af47cd\"];\n        let q = [(\"0x122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae\", \"0x9380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc\", \"0xb21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd892\", \"0x8f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e849\"), (\"0x893227b499dab30e15b606ec3c375f9fabf7fbb574b9b11c9eefbe33fae82066297e23c518f59e74d5cf646cec6464f\", \"0x10578234a81819d1ebb3d77b03a128f3165642386fff1b0a74ad73c139425703a991ce459cdc1995351adff98061f0ea\", \"0x16efa85752a02d4358a92eb3b577c1e27a02ec36000c44403159baf7022541a02104b633549e05b774e1b76343a8e661\", \"0xaf65df48a519d9209257e3df9fb0a1bd3491799091df954380242592db0bead0ddd62dbe33aeeaf1d4a63bdbc4c6008\")];\n        let y = [\"0x6ce420ceafa50ff15baa710e1633d7893404a18b69ef5316a81b182dadbe66bb0ef4fe49ffa578c7698795e6d4a12cb\", \"0xf45ba6de68a0f1ab26ba5fac564f3f21a75239243fae800e2a8665fd9699e2795c674834c6ce016370aee9e4a1d38d1\"];\n        let x = [\"0x7f2db8fbcf121365e92ce3d77bf5d9a3537b5422e894c09e00053ace96a5403a8db66fbe03950e93033c5874bbe8046\", \"0xb190c99770f69f3e912d3ef69f63e082a05a1e63b50eb9a5de3e07b14aed7eded07b2f2b3c42c7e365d2a47945fc285\"];\n        let xf = [\"0x1727a4684524eb2175d31f506b07370100418d3fcd5ad5c5586b3c2927dbffdd38a1a44b46f601ab362202e8276c007d\", \"0x57d77a9e8e6cd838edc1e63052a64d020d10ab12ab460dd755dec64232750ca866647b373738bbe4943b6aee387caa1\", \"0x42e0115d1c759474549023340d4f01ea67f2f082b59dec03aa7e22e27bccb5d4840ac815f2c12da594e423a2108737d\", \"0x54735182a914667a25226c91d61ee1f8c5c6c2e40b633da27379618cb58b0b55c0acff39fe7471a196e8bd9a0db6863\", \"0x14276d83ecbbeddabdf9bf5d9449deaf0a40d6de94e8347d983e97ed4491a3cda57fabebeb6d788023db42ceefa73d8b\", \"0xda9195159528161fa4960f25523d4d906c194a134c2695ba34577b4dcbbb76911a90cbb411db147cc5627ef50c9210d\", \"0x9552828c7dcc07d56efc554f98880b746c6ce0f7f41377d934699dcb5cf7eab408dbe027df4506c40e2424b24c6b69b\", \"0x122dcaa1ba9a8a8613064735071ae0aeab8e0333d7ff3018c9d51a652303decdf4907f6e7f232224b4fe0b20245f2fd4\", \"0x112f00e12354b1ad57581a4dde94de861275afae359c3016f8a13e81943a4a18f4896097697c449335ca5f9d21b7f654\", \"0x13bbf456483cd4566ed59718bd067589e294b4d7084073073fc77a685f0e4ae94092405afc2ecc6d437c20102b74f4ae\", \"0xeef615cd28929e56a59bf2e2e93db68f2ed629f9872a3b1aefdccb098674950b928bb5c920a2dc4d6405a69dafd98b8\", \"0xebec00852daa59ee4861f6c55f01d098689453651a335e711a11c3e6606acd9cd851f8132fb24bfa3edf65997e82785\"];\n        let xp = [(\"0x19e384121b7d70927c49e6d044fd8517c36bc6ed2813a8956dd64f049869e8a77f7e46930240e6984abe26fa6a89658f\", \"0x3f4b4e761936d90fd5f55f99087138a07a69755ad4a46e4dd1c2cfe6d11371e1cc033111a0595e3bba98d0f538db451\", \"0x17a31a4fccfb5f768a2157517c77a4f8aaf0dee8f260d96e02e1175a8754d09600923beae02a019afc327b65a2fdbbfc\", \"0x88bb5832f4a4a452edda646ebaa2853a54205d56329960b44b2450070734724a74daaa401879bad142132316e9b3401\"), (\"0x1604bd06ba18d6d65bdd88e22c26eaef8a620a1a9fefe016d00eac356f9ceda8bc8eee5e46f9f4736ab22cff0e8cb9e8\", \"0x3e5755e9bfc250ff0a03efea22428a36a247504e613980918dc5319efb7f66b10d5fe2e7e86af7e014e1456aeaeac5f\", \"0x5655a99f7ff904c1e41382c25ff0360d9c51d0e331bfb1e38f5dd41c6909caaf6e313f47f727922109bf8c3204fe274\", \"0x62ec2ed9b207f63e0d9899ed11f9a125b472586b65bb77b8a04d5d446d15a8701ba5c361a07cd85e0743f5ae2e95a9f\")];\n        let xi = [[\"0x4058ae506a6ea2d9acf5767ef521a39416357fba20e7c319ff4bc05fead6c03a9f34ff39427dd30ca948256f8f5e776\", \"0x15124e81cc29571ada5ab8d3c9d55f5f083502a4b884a87ea770d7087dce6fc1a4143063e431ab1965a326d6cc5cf28e\", \"0x190d1a256dc8cad275af59ea8f7d203c3bb8c8a34b2078662bbfd23e7e7294f4afd91a8877df524ca96a0a34ec4fc2d4\", \"0x18881b4d655fddc0574a3f3cbcbfb2ff8dc94eed30e46b6ae7144979716438563e9ba0cf2a2973a17db83db2e5314407\", \"0xc65c65aa02e44da35031c6b340fc9709367a561d0bf13a144f325beeba0e0f837e91b5218aac9eb1f28c196c093af1d\", \"0x10fcc3d0cbcae26707dc37c424fa4c3a37744fbaad96c6df4b766075ccfb1f59f458be55d30259657664f11127121f3c\", \"0x110c58ec3d55cc3593e958640c42d93f05c964469be251ad45a2e7af7646ff0daba3ef5e5618ece1e61f64fdab4dd60a\", \"0x173e8e07ef932c01bcc0be6e316728d8acdaebb34d0630aabc5960f155c3dc7c94efff23d3a81c5545aed40de3353b24\", \"0x167b41861a4cf1f89dd265419cffa76667283a684802d8543352088a297ffac030708ca3205c22ff262b4c32af064100\", \"0x3b4fa4dc3a053fbc445810c88a8198298b1dad990acb6b4ebb7058fa77a680751dd9ac9bb42ae39582ad6ad7647e2d9\", \"0xa14179662d3280fa96471af03be7fc5feaca5fbbdd79f0eef4b1e354fc4ae6e4fddf497eeb8f3ad8613273537c80c08\", \"0xf8242af4b8ae30e76ded4ea3db45d278d4782604e03214436fd0ea18d6f45914fd8d25937ae6c7af57f6c1fa36a075a\", \"0x1859b038205c8a50cb4f91f15b8828a0c649fd9bd316b0d42bef6398bcb47ec124b1c884dd3c52f08396e95ffa0d2048\", \"0x15ce69cc39bf81686ea6b3e18bd550a9d570a14a9e397c6c1fefad6e5efd209e994f31f93bdad0f5a85cdf7eb8f71f1e\", \"0x46f25b1914231273bef92307b4a85cf4f558882c65c35cc36e685ba343e66314e03f1a97b91cb45be155085e29255a8\", \"0x85450ffae0bf84261ee380b516b33ea88e49cca061f6ccc4818232d9a845081eadd269b1d6c86ac42b4a6c88ba177b8\", \"0x49d9c4120a63a738795739519c8463107763e61e1aadf534ab6477567e6d327c56c45cb93e9be10a894cab32d9186a9\", \"0x48aba2f406cc53ac0c9d572d6fd9e99ca649a8d2ce390771d4264c0766a974bf4fc6b3222d6596a946a8187ae404004\", \"0xb3d9d9f100e451e2ff5d3ff32d211a539a0d90f190e3cc0ccf0d2d44ba805072589b66c7f53c916463cdda53fb33bd0\", \"0x115caccb0b82e44cf7079fd95d8b6cb506de5e6a67f28c6a5ae713497742697960f5e9dc08d75cacc6f0ea6e4f29e76c\", \"0x1674a25b64d278d9c8747d1d1a532686bce60ab496ba0ba83a26e3d30942f1ef3c7aa05187a258032ee573659693d6e2\", \"0x14d18d8c6242d9c3b2cfcf95da5628e94694fec1d40f64e432f1a4e79f9b96ed40b3d9cd602855fde8e8f6527570af27\", \"0x161fb4586486c4828d6de3f6b1da13867f8db7916355427d8573b8891ec2f2e533e4988d374bf52f0868f45e89b47410\", \"0x1075865248624b63a4b59a293747451724956b8517187e9554770f9c5551534815ff969dcb1857ce1ab2093cf9c9a8b8\", \"0x9f685cfe49c968d8c596d9f647ec9a2c5b8b45ae16fef8d7cc9ccd858f5b66fc526c01589a93fadef83efc0b865661c\", \"0x366861d36b3781daea9909bcde600135486e55965744c33f0f88e1a74f270b402fe2a1eb34bd412007a7501bcc0a1e\", \"0xe53938fd56c7fdf34c21c1b011fb083c02fb12b440c859f910ff0671a8348d38bac8380d170b07f8dd6e50ac18a8dc8\"]];\n        let xj = [[\"0x1727a4684524eb2175d31f506b07370100418d3fcd5ad5c5586b3c2927dbffdd38a1a44b46f601ab362202e8276c007d\", \"0x57d77a9e8e6cd838edc1e63052a64d020d10ab12ab460dd755dec64232750ca866647b373738bbe4943b6aee387caa1\", \"0x42e0115d1c759474549023340d4f01ea67f2f082b59dec03aa7e22e27bccb5d4840ac815f2c12da594e423a2108737d\", \"0x54735182a914667a25226c91d61ee1f8c5c6c2e40b633da27379618cb58b0b55c0acff39fe7471a196e8bd9a0db6863\", \"0x14276d83ecbbeddabdf9bf5d9449deaf0a40d6de94e8347d983e97ed4491a3cda57fabebeb6d788023db42ceefa73d8b\", \"0xda9195159528161fa4960f25523d4d906c194a134c2695ba34577b4dcbbb76911a90cbb411db147cc5627ef50c9210d\", \"0x9552828c7dcc07d56efc554f98880b746c6ce0f7f41377d934699dcb5cf7eab408dbe027df4506c40e2424b24c6b69b\", \"0x122dcaa1ba9a8a8613064735071ae0aeab8e0333d7ff3018c9d51a652303decdf4907f6e7f232224b4fe0b20245f2fd4\", \"0x112f00e12354b1ad57581a4dde94de861275afae359c3016f8a13e81943a4a18f4896097697c449335ca5f9d21b7f654\", \"0x13bbf456483cd4566ed59718bd067589e294b4d7084073073fc77a685f0e4ae94092405afc2ecc6d437c20102b74f4ae\", \"0xeef615cd28929e56a59bf2e2e93db68f2ed629f9872a3b1aefdccb098674950b928bb5c920a2dc4d6405a69dafd98b8\", \"0xebec00852daa59ee4861f6c55f01d098689453651a335e711a11c3e6606acd9cd851f8132fb24bfa3edf65997e82785\"]];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        let xi = xi\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xj = xj\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let mut i = vec![];\n        let mut j = vec![];\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        let (f, p) =\n            bit_0_case::<BLS12381PrimeField, Degree2ExtensionField>(&f, &q, &y, &x, &mut i, &mut j);\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n        assert_eq!(i, xi);\n        assert_eq!(j, xj);\n    }\n\n    #[test]\n    fn test_bit_00_case_1() {\n        let f = [\n            \"0x9f8f3a5142813065834851b0abdb02873b62058c141808bf3d908c4616492b3\",\n            \"0x2e48eb414b93a0b30e2c3f393d3ed30b098663d73b820a07ba724a9917378495\",\n            \"0xbdf45af1f5b4215f808a4d7ad54cfeb6d8eba26084098a37010e1038db40961\",\n            \"0xf6c4c18f9d9acdf9b467c9e83e6ad6cb145da60900ccb524892622686c3b558\",\n            \"0x8c23916cee1cbeefa7be656ef56e78fce55e743b2a38810a29073d9d799fbd6\",\n            \"0x1d16044d319830664057b4957d214455b93b6279e9b5f5ac08dc3072186dc4f3\",\n            \"0x17f1f10e76b4e9fdb704ceb895c3924cf4727927b0ad3ee897b0f656eabd71b5\",\n            \"0x1095b03dcb74d1b11d583e19e6bc9ac57db13a0c4f04625b02e3e1bf6d387c36\",\n            \"0x2d67c398ad69288c687f6f86108390a0cf2dd20821c4399cc18b975d04242497\",\n            \"0x2955c5cde10bd61dadcf00e62f844d042fa55c88603e3fe991e6720bd794401c\",\n            \"0x2ecbad3d0674a417f39baea2524cc0790b3ba9673433d6d3c30f1ede92e895d6\",\n            \"0x11b947c4a0acbee9a2eb50c665bf7a12292ea3bc4cb8e0bfc2f34d527970ee48\",\n        ];\n        let q = [\n            (\n                \"0x23ad66f3a7cca9dc75049635faebd124316244b91de5fb2764cd151572a905f7\",\n                \"0x9edaf0698a8c56f51139588acc094cee3c37d427bb6d2eab830aae529097d1\",\n                \"0x1ad4f87d3b4375a39988ac099b042b1e7c0c715678e4c2bea8905f607cf950f8\",\n                \"0x2700e8a29b7bb45f3022a18a07bdc66d0254559e17cce64e3b4ad21578fcf410\",\n            ),\n            (\n                \"0x2c261e6771e418f02c5225132405065a249033d6f8799261934c3c9f9b3d33f7\",\n                \"0x270394a3fc58d9e321fcdfb8fffd764208a6caea73d65f24bba0cc1ae0d3750f\",\n                \"0x2cb21d611ecd44169370fcad2b3dcb1d757f0e468ed4cc0d6c680d0d89c3214e\",\n                \"0x1a737173a08f49638e4b84b0fbe900d1831d55c6097a45af5af1ec1eaedb5726\",\n            ),\n        ];\n        let y = [\n            \"0x1ab9de59fc825e8b5326694c7d82556785cb9cbfd0d0a11721d1972c21c411f8\",\n            \"0x16a475582082ae3616c808acd62684170d9fa7bf234110353e9cbceca19d2c69\",\n        ];\n        let x = [\n            \"0x27783160c70b7ac760cff888c621846a7ed80e50c7ea8a7a718a4ad8a50886fb\",\n            \"0x10a6d46618419682152a25b5f819b22c2e572d1f670d12026a18c384248dad2f\",\n        ];\n        let xf = [\n            \"0x17774e3e8a23ff734ca1598a87bc0412dd8d117f26c62ee7e94dcb29e0357bb1\",\n            \"0x1982b56c3e0bcdc9c994b0437e4dc0b9527821ca7809068c62de431b5489c670\",\n            \"0x2872b0c088da975ca497c1a9c18ef0ef3993ddfd09077dade5d72d1ad3abd8fd\",\n            \"0x2969378a0cfddacbdbcbcc93eb8642d2dc8167a467acef3ecbb15eee40139640\",\n            \"0x193581cebff836c6d2319b0bfd91255bddcef3eba4383bb93d17ceefd6953d3c\",\n            \"0x26457780a6d80fcc0f23a463b42645f7fec8e6f0a0008e4410656947089801c1\",\n            \"0x24e212fee032cb7c7409ae15eaa0aa0311a810586db2f6f180a6b0cab54e0502\",\n            \"0x260d3e40114b8d2ecb09e3f0e4fcd13eece95b0a7d7b5ce96bac14f5cb32d71b\",\n            \"0x1b1a5d98ae47d8520d89e8c8fa73dbf28988f9670c62aa77588361bf2193aa0c\",\n            \"0x19139c8f3a190fa873462ce2dd5f25690f00ec110f4b62996e365f3421a3259b\",\n            \"0x2143f989b60bcfb4a9887cd610decf67818b14bd709d865aa40c7a52986a5e5a\",\n            \"0x2d87bf0c00e24b175e5363e0de0a1c9ed68f160c43ca0093e2dca54f07586b65\",\n        ];\n        let xp = [\n            (\n                \"0x126a285e45fa024002aa806848f10e5b2c64a25c6af0163612ef34379fd72584\",\n                \"0x1303baa20971befe5aa7458c1164eac4a10108c8abbcd37a1e09d83ee94bdbd5\",\n                \"0x37dedb5d778240b5f237eaa4160f20981e0ed5d24f832e9eb07004e1a722d0c\",\n                \"0x1305fcc05ab211db0fd12d1f8f1f894726dc7bdbfedeab57b33af11d81279c2b\",\n            ),\n            (\n                \"0xdded79e4d972e50343575387abeef8a0e3c874b791e2c9491e583ed9d1dfd82\",\n                \"0x2e89537cdf57a51d5d306241c3360b78ab60e5fdbca2bebaae6544d0a9fb6d9a\",\n                \"0x1f661619c64b414dfbf50599d40cee296e40fee522ff41a1039e9b21d41a37e6\",\n                \"0x15de46c6b8e5286908252cdc6a905536304a49b95b386e8139797409df7a1527\",\n            ),\n        ];\n        let xi = [[\n            \"0x1b0a3a3d5e555ec6d6bda084d0fad0138fd60d139e23540b5d4a49b45ac56587\",\n            \"0xc191bad21244bcb105c57c9b4967e036b3b7e3ea1ec8778a8a9371f58d430b1\",\n            \"0x1f4207ade61d68bb73fe79838db33e1b17e3857b7fe958ab082c04ac63561f87\",\n            \"0x3ce267d6ec699ef2f104643b6bb6ab6ddfddc83763b2647a99f23941c324142\",\n            \"0x1b3e7e2fbe90dcaf67c060a52268ee3bf1384274580bfab77a2f986369216fa7\",\n            \"0x1f4204f30004aaa5ec1e9e3b9e81d05ba8672bb8db19e9a79df837073a2d493b\",\n            \"0x1c6b68ae31ec29d4014068f482fbe495e277fd1016cf0ca4883e1fe6da155abb\",\n            \"0x2e2e0e7f32035eddd17a6b3e42c6e311081ee61f8a7372f76c9920109d008214\",\n            \"0x243ce082e4280ebbfb5b3c1f2175052d62978b43133d9f61b38790b33222f17e\",\n            \"0x15bc2bb4c2356e76895c57bf67b8d4a2964bb0dbe972a7b446800dfdfe24e6ee\",\n            \"0xea059ff364db12717381403450f58d590818fff46c46fc0aebdabbb0624ace7\",\n            \"0xe292bee9383249aeaef594757561443d0fea89fdca0b2e9bb1cb2b9979c6466\",\n            \"0x14b41af439343d54bd5aa01e3ac5dbf852fe6ae591dbd86765e376787ee3cc0d\",\n            \"0x1dd42fe7d2d0f14e414514edb81e5f7578d0ad524267c77457f5dc16dc8dfa2e\",\n            \"0x1099b52fd7afa1cb074293cca265168ad673ef7ae209f473fd17bea6e168a5bb\",\n            \"0x17fcc96a8db4a93d6470aab33710e1c9b38fb564679c8849635a53b896ddaa01\",\n            \"0x278f744a391cfa66ca77f51e8aac097db3f4589a7a7438207fcbe7734ee67a89\",\n            \"0x9c274d0e18f401ed95a636f9b7e688ea30c8fd32edb8a2b498ed95e6f0d3678\",\n            \"0x298bf2d5da37d9694cd289309a1a3cfb5977aef139b51f6b5586e6e7969c6676\",\n            \"0x23b4dbd772dad9320234a772dad888faf4054fac8cbc73f2078dff2825e9f7dc\",\n            \"0x7e4100c82537ac9286ff99c1eff62318a12c18c63c9f10e59b02531e40b9d4e\",\n            \"0x194fb153c621bb05efe4a0b8ab9ecbd016865ece06cd81862bf80faba6fbb041\",\n            \"0x1df7ec45772db3f999295ff6bdd8333535b1b4b96b19ca3fae0237ba3d883a8e\",\n            \"0x2b0249411af1423381825db72aa8373b35a5687f4d553fff50bad5dee900a989\",\n            \"0x208bb01a1c668e48ac1c862f3daef64529f2bd36ee2ae50aede8a66d7c8be06d\",\n            \"0x2a920d7def469f8e332dc14d6554d260fb8bf21775a45e9550c9cffbf1583f4f\",\n            \"0x9711d36060019a300a8c5ae3d121b0c5350c00adda85e86ce4bf0ce175cb30a\",\n            \"0x5f9cfb1ea6bf7c0053f7f71df63c007829252cad120c40181eed11520f8ef3a\",\n            \"0x8d951ab724ffc54a8b9c5cb73e77a4ef38a0aaebad1b66e954b54d50e61026b\",\n            \"0x2e2c1f50d0f642d878adf4e06190b5d9f44daf16706f494a71168aacc05d0590\",\n            \"0x2513136cc9d436edca83a981b22b66862cf71e478b09f93d38a2898f80938ae8\",\n            \"0xb811f4b5506117dce1adff60d3b331d796cc4b2900897db300d641be0ba59bd\",\n            \"0x2058f15a7df528cc1d8460287e3a0c5cd66116f98bf8d36fae19f595ba683131\",\n            \"0x2fd9e7a48c6d265a6d76368ae6762f2a3cbac6594ca02481cf295198e65ad723\",\n            \"0x25e61d1cdb9d0efa3dfb7a705f9a2f1d649e113b072bc835776080dc692da4ff\",\n            \"0x688733a105f7f2bbf8f1e99f24a881e4f9e1e1a79551cc40d3038e796b23aee\",\n            \"0x14a5bcaf7f082ae94ba1c357ed865c5e73864a7e2a1a5ad55a6e6f20f1b4f88e\",\n            \"0x1afa85300fbc30626fec5727e2b13b4522eea1731747644bc408319746646fbd\",\n            \"0x2b51d05dd1a610997be175ce8d95064e1bdc83b535da2d8ebfcc58f36e8999c\",\n            \"0x1211e87fd861a4ff60aca71a116f379e6d014ebd50cc4b9de88bd476a28a6cd7\",\n            \"0x16a28d23e4e16eb5f46935a6a6c078810254eaca76f3adb24788543bffb6dce1\",\n            \"0x1a9cb5868564b268952c4cff2c1588cbc95f867cfb112d2634b78f6939b1089c\",\n            \"0x167e0bf6a4329f36deb8c0f66377e8706c2c62686b635ec8e7b965a465d765c7\",\n            \"0x1d48e9c952fdd47498442beb72ed468cd0bd1aaa797482777fa0b45df9391e29\",\n            \"0x2be24efdb917338d46cc5776eaa4fd1eec584b3e55c612c754279f2350072ef7\",\n            \"0x12e7dd26b099490c1682623afbfab964afc23f7b18c77df371b233564c1c75d5\",\n            \"0xf872fd57889ff7b68b0206ca3080fde59c7d2c71b043b8fef8ea9d4e7fdfaf1\",\n            \"0x1a305a6ee976d6d5bb781eb230f24fc1e944ab44caead8b97939ead5b206d56e\",\n            \"0x110248593cb658c9dad10ab6ff442f60c708d63144366926c74ece34926b667d\",\n            \"0x2911a9443b7c8e59996bbbfeec60928da492646304d750b48e054150f21ae7c7\",\n            \"0xae050eee5defe765dd9f066e7714f97441b6c7a1da9a169b9ed7cdb0124da8a\",\n            \"0x1b43e5c7e755e6e22a0bcb8ff95e247bb6ba30d845e27c3c6a65088b7d9f8651\",\n            \"0xf68c7b436f14e3dead7e8c7de3c0b4af4dc7d36f922766893a2e9559c8610d2\",\n            \"0xb085935a1ae2fb12dd4aeff87d34da6ea8f1f03cff8cc20ee66e036613a6b08\",\n            \"0x2b39ad399267003696ecd758fb89cc0a1c49551ff69da652404564d56a3d3481\",\n            \"0x144b43003888f26443fa2dc2c7354749117b746a05f8e3ef4a4abaf0afb60600\",\n            \"0xa90bbac85af36a606d100f71b9b1c9f2c705906a83e659ef457c7e952ed0b28\",\n            \"0xfacd123f0294b69dd2508b485842d1cda5cba41270ad7dfbb9fc97f5bb0547f\",\n            \"0x4e6285a710a4dd253ba29e1b0f6ccfc1209b236b01367c612e546bc683c293b\",\n            \"0x1b6948fd0b32c3feb50d66c5ae5685587ac7ffcf1aff3e3601a31201a424db7f\",\n            \"0x4f662e8e1fc8523907b3e887990ab29087bf2f1e7ba12e4ccbf06b474894d81\",\n            \"0x2bf8a1279f19a68c96de2f2115fcf8d0828cca0491c10cb1b97ab200a8499fe\",\n            \"0x65e1427c6c0a7f1c4e20cddea99611b66a4668966b788dd590f6469679c47b3\",\n            \"0x91660f9429fc5f9985030ea064d3d7aaf2234eee7320c1c730c08a8413869a8\",\n            \"0x87e9d609a0f6c29d4e57bf4a3e1743f6b698486d689569033a5f987a24347fd\",\n            \"0x2c5528aca016c80f5aea6e50df4ba106b830de16871528264bcf3bfeb5bffceb\",\n            \"0x1a94deec61949e75978d9c94826b8bfa8e6f4a20751f5a17374694d5aa93e715\",\n            \"0x60845a0f779048ec9a712ce5da33a370b785401d838b6d92e1177ff7113265d\",\n            \"0x1fd4046339acb4631e26777abde4a0de9d2bb27cc226dcf6c03ca1520366c8eb\",\n            \"0x1943e7070264148ca273df06a7bcd984ba03497dc86cd5480e0c072a1c2bfda9\",\n            \"0x2cf34e981d2335162e7a8c523110a9ac4042df6181038ebd4080ffb5100e1751\",\n            \"0x13230369b80fe2e6c83adae77dbb3d8d7b6ac03073afb55b45dc2e9360de216f\",\n            \"0xe4e4fff31c6a7b4dbe201ce9b4271bf28e1f52ea3e5ceef05dbf29db763e65\",\n            \"0x1a630eb03a920cf31ed396a0b1f900fb699350244c6b8790c12e0dd9241470fe\",\n            \"0x1644c6bd2f50746f3d469743b173655b5665ea0eb77070785efce560b681463a\",\n            \"0x2935c80cbd7a4336883fb448ee6750c75ff4037f996f2040e2bc0bb2066f17ba\",\n            \"0x2ee3eb795e73b84f1d042b472b98b5f884ce32b5bc36b05787d33831a504fd80\",\n            \"0x22ca9da95fc7621796cff16d5a7538d711eb230aca1667afb948910b2aa767a8\",\n            \"0x2d529009c37ddf423d9264df6743990d63604bb168cbdef2bc6a99e886fe8452\",\n            \"0x2407471f7d9339927a72aac4a02eb1f2b2999a6892f5869a54587f4842100434\",\n            \"0x66103e919367b340c163e96eadbd09c01b616f075baa12d999c5af10af900e7\",\n            \"0x28c276632422a69e7dc41ed859375de537917402930e3c3733df4fa8e30df41f\",\n            \"0x2f088812877deb6674478c892a6277820b4836151bc7bca42f4af5cc1135d160\",\n            \"0x1340222ea17d6c3ae591db414b6ba52c14881e2595e9be814df595cd038d6628\",\n            \"0x18514fbb98af7b4ef58db81dd0d1e195a1e3e6d094856f2c457dd19b6c6fa9cc\",\n            \"0x70d71dc0012610f06b23ffae222632103d468d952e2c274848c3d28f4f66d3f\",\n            \"0x5358f254bd79cfcb37aea816e287d08f86b324fd9ea61beea1eff33ee3eb374\",\n        ]];\n        let xj = [[\n            \"0x17774e3e8a23ff734ca1598a87bc0412dd8d117f26c62ee7e94dcb29e0357bb1\",\n            \"0x1982b56c3e0bcdc9c994b0437e4dc0b9527821ca7809068c62de431b5489c670\",\n            \"0x2872b0c088da975ca497c1a9c18ef0ef3993ddfd09077dade5d72d1ad3abd8fd\",\n            \"0x2969378a0cfddacbdbcbcc93eb8642d2dc8167a467acef3ecbb15eee40139640\",\n            \"0x193581cebff836c6d2319b0bfd91255bddcef3eba4383bb93d17ceefd6953d3c\",\n            \"0x26457780a6d80fcc0f23a463b42645f7fec8e6f0a0008e4410656947089801c1\",\n            \"0x24e212fee032cb7c7409ae15eaa0aa0311a810586db2f6f180a6b0cab54e0502\",\n            \"0x260d3e40114b8d2ecb09e3f0e4fcd13eece95b0a7d7b5ce96bac14f5cb32d71b\",\n            \"0x1b1a5d98ae47d8520d89e8c8fa73dbf28988f9670c62aa77588361bf2193aa0c\",\n            \"0x19139c8f3a190fa873462ce2dd5f25690f00ec110f4b62996e365f3421a3259b\",\n            \"0x2143f989b60bcfb4a9887cd610decf67818b14bd709d865aa40c7a52986a5e5a\",\n            \"0x2d87bf0c00e24b175e5363e0de0a1c9ed68f160c43ca0093e2dca54f07586b65\",\n        ]];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        let xi = xi\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xj = xj\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let mut i = vec![];\n        let mut j = vec![];\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        let (f, p) =\n            bit_00_case::<BN254PrimeField, Degree2ExtensionField>(&f, &q, &y, &x, &mut i, &mut j);\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n        assert_eq!(i, xi);\n        assert_eq!(j, xj);\n    }\n\n    #[test]\n    fn test_bit_00_case_2() {\n        let f = [\"0x10bbd67a2e6b8bd12ca2a8fc9ebb9d7748bb4b630bb9e8ad6ff87ec4e2647706b3fde59249168a1f3a22e43aa9131c14\", \"0x10b832788eae08063407690bf13628a4c95b6fc55a9eef6a4e4e1893305748d5ffd9fef14dbbf2265569906a0d24b1bb\", \"0x19496c56f34ced68a7cd75ca45a97406d2a99dc971e2c9ebd6ec68233a19bba472836ae01acce936e2cf8c477b127acb\", \"0x925d1d1ef9c0beba6f0a34cac08da0adfb221ad320d929c4a12e88d4c855c6e93e88d2422cc017e588ebe02c9d8944d\", \"0x63551db5a468540a882a52a9fc100a34798496f25a17711a0f7fe84c2f3b0c22ea84f0e3de8b6df17b043f047eb3d95\", \"0x1452bf2c3fe715937d83b5c57df5b7b9df88e4cf55e829b75743d3be8818de60a9a1a5156acb9303682c1c8ca5fac965\", \"0x159fe260119fbb98baf253f4e0f865fe70bcd3a215ac2d2e10d9eea83bb012f8e01a28ebe1e1ab9e46108a3da2287de\", \"0x2cf0869f40402c8b16429547884c156e8281d85d5a0ee4e6fa097bc9669f5a4c6e33dbebe7a9434b3beb015897656bd\", \"0xd2c631a38ce47d9e8f0ee1fc2ccd8f589dd387f86500444d3dded1b3595c3ce4312a36a95cdf327419c78b6710a6c8c\", \"0xcaa4d999eec4b8f23cb8406c8fb3405378036f4c5867363b504394fbc5fc5b04e7a846507e6f24ade84350245ac9e72\", \"0xdca015d5a2e52becd816f7a434f9cece5b000d281057b64de60f93bdf429d379caaf598e7e990c95a109a8caa63a02b\", \"0x6995ffd83bb53d7b9787c81663ec0365e65c06194887eb1591ab99d664c7bb9537bd1bd1b9bf5b1707249c394b385b4\"];\n        let q = [(\"0x152110e866f1a6e8c5348f6e005dbd93de671b7d0fbfa04d6614bcdd27a3cb2a70f0deacb3608ba95226268481a0be7c\", \"0xbf78a97086750eb166986ed8e428ca1d23ae3bbf8b2ee67451d7dd84445311e8bc8ab558b0bc008199f577195fc39b7\", \"0x845be51ad0d708657bfb0da8eec64cd7779c50d90b59a3ac6a2045cad0561d654af9a84dd105cea5409d2adf286b561\", \"0xa298f69fd652551e12219252baacab101768fc6651309450e49c7d3bb52b7547f218d12de64961aa7f059025b8e0cb5\"), (\"0xbfa363ea499e05a429d9af2a73ba635e0ff3825edddacfab8afc6b9188700c835282a2c4c7effe70dc61c557b8d90e1\", \"0x5c3fefe5849b36814f32ce71dee6eba467b220e1b53f01421b9ec6d23209f6206e864539ddaa327b085ad8d78a8589b\", \"0x17b304f1c4f58afee1ecd75f1570b13da2ee02dfc5731f82ac55d5b6d011ce70ae42061b3d205cbe49efdfcd8d2c04b4\", \"0x101d88f38de6be9d7eb2c074905585f487715b3e6d8179a066ba56988207caa28f7a5f1ba2f7abd01e200ac71d198282\")];\n        let y = [\"0x6ce420ceafa50ff15baa710e1633d7893404a18b69ef5316a81b182dadbe66bb0ef4fe49ffa578c7698795e6d4a12cb\", \"0xf45ba6de68a0f1ab26ba5fac564f3f21a75239243fae800e2a8665fd9699e2795c674834c6ce016370aee9e4a1d38d1\"];\n        let x = [\"0x7f2db8fbcf121365e92ce3d77bf5d9a3537b5422e894c09e00053ace96a5403a8db66fbe03950e93033c5874bbe8046\", \"0xb190c99770f69f3e912d3ef69f63e082a05a1e63b50eb9a5de3e07b14aed7eded07b2f2b3c42c7e365d2a47945fc285\"];\n        let xf = [\"0x7f7956e7258b204e6bb76fb6530b54704b338c9e41d551b4c65d12afeff17a68cd917da4aa7f5d7f85dd4c4af5e97a3\", \"0x61f63de6863a0737ea4c564fb2649c3298b59c310e023469e9f6a61c9d21a413a15b875c3b5ae69e8bc70cc1642be88\", \"0xd54ccfbe6ce28ca435fb866b16f94ad9149d23b673b8b033c7415a182a906c0c440ec19e65eff130e3bf3e78e64a8d5\", \"0x5b0b2403b504c7c3c04fa2649405e14816e285681f6d10877632f67dd17dd934dcdc3b3d59039e2f71aab9d24fe1f50\", \"0x120e02660f9058203246fbf0112482fcc1899b14e6ac805c02a2d7664553675a1cd30ab8eef17c2cd5a8e39666056b16\", \"0x848bb58f7c097a46b3a03ed0f1e29a3fe03f4e210140c9f40bce68d096dad390d28e98224a2242169998bd45bcfecd\", \"0xdc72aced2c6f4a5c4819c14494f27de393ef818bbd4517d07dd58a061d1a3e0141a6e2e95f2d0acc60f04b266569319\", \"0x4a715b7a58dc6543add0fc9ea5a83207f896f6abf8ab0e2333622e9b8f46b0713f2f072d77df88de226de432ab03d2b\", \"0xc04235cb1fe7822f16be8bc01f84be86960bad82590ceca82fde4beda8b9e6a5885c858c2816abbab513ff9a9c7b5d1\", \"0xe44406c2cb2d23cae0a6ab38bf6b02312251b650e69f258a269f5787fd2b0bd9ed885f0edb79bdcbaa9dc247ec2effa\", \"0x86501a5cf1b338e3103b59e485f10c54276bce940584dc74efb1890226e01d82c5dd98529dfd9eaed5f6ee84dbefdc7\", \"0x10a91f5f4e43b2f252c415e2034cc18aa5ab46c409e63ff37f5499c66dc28fbd4c3207007302b90bf0cd9d620156bc89\"];\n        let xp = [(\"0x76147fc1a30a666d36b43fa11419b6fa517b642c143cc2ad863426f2c7832c9c9fb62fd3c6f9dc94801523782f9b37b\", \"0x12f4b28115b81c38e3bbf17cf69059247c386ecccbaed914cbf1417f24431096f49191365acd1aafeffe8c4489a89415\", \"0x164aaf1243752293eb1376a3448bc1941c8b25df7cfd0bcb708514d7f477439817f367d8ffbf02b95629d336e7da1574\", \"0xe46ddd6615bd3583b69fe7156087f35ed4b8896375ccd7f52459f56836fa38e0b596d289800df74c3a361e813b24550\"), (\"0x86fe5ccf8266e2300ca10c33b1c74cfa6cb698664f6c984cc2545f9c89af0520d755ca7ffdbc37d75f20fff15e4518\", \"0x18c767f073bb43219f813ed472efb42787e62706503974e6c49c10fd5a41e617f592da748faf3e3d7139b54f8accc080\", \"0x558b3b314565e03cfdec488e39e9c099eebea93016d9e1e3a93bec47068d4dad9910792eb85c8382bc646aede853bff\", \"0xcd8cc6ed38c417768827084f4d1e22c516dbaf1a90f29c2249210c3476f70251f1923bca1422ba5f9f4f6db107339ec\")];\n        let xi = [[\"0x11ba967b8fcf46c439d636b9e14c3edd68e62dc6cc493f4e1a7c214779913dd40e5ebc6bfbae882c56c11ff73e7bed8f\", \"0xcc9f9862097d6f31f2781f916f394a4d9a06009f54f616d9d5c5a517a880391ed02b8f871d1004a5a305453e0c4075b\", \"0x1a66a98e21ca07db0b1b7d6b7bf65921c7dfce0cc9b25efcdd5e7c1b8e492ffff9dfedb9b32b3affb827c5478907357\", \"0xc82b7ea20f3578f7eb67a4d7e966e54e595b2ecf91e2a4210f76656817e35952cac71e75199e7fb161f85d569406353\", \"0x189640b74e901e4042df77f784cc7381c43e27d3da200ce86f47f308a6ea37932bd16fbab80fa131c37d8b429d7598b6\", \"0x6f14945ff075b3221a66ee8ad672b31c0f85429ab90d7a9c8bf557813fa0efbfe25e5f49f87ffcd4956e178a119492a\", \"0xf5628335e48c424da2650414f0baf02b9e296d9efebc881f597af374dbe634ddb199eda9ac5ac7c4d76150b6243e95e\", \"0x1443dc581cbc60dd4197b6f74799d7cebe9cb6bc1932d2f117a6687849f319f20c6c51637f416117f896c0826f70c6a3\", \"0x5ecc867bb9640bab6c57f5446f435a473568f31dcd5ed8e20f1097f4e3a5c98b9d2fd9170309e54f0d23595241e9ab4\", \"0xb35142bf853116f48afac573549d09794c7b8d4ca101d4a64fd850cd7a72385486e7c965e9b58910c237a0b61dfb0d1\", \"0x495f2d46c6fe317c3557f02ad66976d933fcf31aed50fd27207d34b5546dc367a479be3a9dc0d748ee958dbdf4c3dc6\", \"0x4b87f6f948320dd3accbcc1653d67f9ee8a8495695c52c0463544a7775a58518a607e074453f8663e7b0ad8ea07e21c\", \"0x65810cc51bcd92db40f079a885a7657d113367ef6b2321380496cb4e94e4c6189b9c80b51107ba437417a83bec3670d\", \"0x13dddbb670491725aec1646c87db2e3fea286661dd0dc9f62ceba6b063eda63672d8ecc5180785f602438e64bbcd1f17\", \"0x108542e68466c8e6c016bba69375a0ae187a4e357d15853dfe777e2cad3467f288b83356dd39d2af46db6ad97d56c658\", \"0xb39e319c9be2be6e28c6d4fa1e3a62a586467af5fa17e602acfa253883982c30bef0ae4bd9af5afa14c357da2dee047\", \"0x83070c328cf2393b9c0e28a6863343a05d51d75e8a1a489998663833a08663e952bab23b09696d397cbd542f7af429a\", \"0x78d9252259df0ecdad5e05685c241525043ce26007d819f5c211e8384f6fa9929e8a7f6a7fbe43f15a46544fc8b46ec\", \"0x9534112d11f8c6657e1eb94a03d1694c7ecfc2d833e8b9b32555d40b8cce7ed08b6cde4c0a8a1a481d509a142dada65\", \"0x17fb2d3043728a3c9f4f7eb7147eefa2ae79f8ecec711064d1a396f10625c33e2e67085d1f974f1c283e084505347b11\", \"0x1527d49f0223c4632d2978541c5e7d8d51a7283bd1985381512c5dd8b2103e51c61667251be7e073a48da118fd27232b\", \"0x181fc8ed425ead408c6162e73014b441098305a952c7b215beb11798b894b948772a699f7560657e0791f7353df0fd5d\", \"0xd2a54509e10e5665e61510098a424a76631a524e26b5d033d53575a81d77565c865023853d8778c869559a08cadb589\", \"0x6a3a81c3d7ec179f1becd1274efb578b65b64466ff53b9b9f7f990ce828624ba8fecf97cfd459b2b24c0b02eb315b01\", \"0x2ccba8aa6af85b297f41cf199aaf4a3f0650cdc229e926e25ff6133b52e12964907bf7c1ab807fa1c1a27077f82fcf4\", \"0x13f701cb63206a749cc4547b34fc3542d8be923cd0e05a141f5238f8b32ba5f381d59fd53cc11dc73a6988109694725b\", \"0x104a7d09036552a18da7875dab655b8e25de43d2f2fb359d2c1000ccaeeef04fad656589265f4c04113e798a73c20330\", \"0x930275466d564f686f7319a6a4727f3d02c510a942f72381b77c9ab13b2adffadee2bcceb4aa896dcebb7b064442c07\", \"0x23a127089f836b5408e8988a0b92a096caf8d05ee8447312f063af45c922bd8723c158b1562c936e4fb1b53aa43d1e1\", \"0x8287b7ae5eed694cc39d607c7b7d971612d1bbf700af830baa9494e633b6fb89c2413f8a8ad726c8e283eb3c1be71d2\", \"0xd3abe3cb1df8ab5cb11d076cd758cb1432c326ddd72aa2a71227a94ed7229680b089254776d3b94a3dce697af042639\", \"0x160189e110bda3353ae5682c644795d63233a1fa07a574d48ba2836408c15cceb02f98d62856a3d1cf7a6642db52fca8\", \"0x8ea0f4b667ddae4e4a277bae882943a2111525e96173e9285514b6fdf91ca60123fe4de5f1d49ed1385231a5e71b28b\", \"0xa791a01fb8b16a02152ebc641bd7a3a6509f18b2581db4aefb73a72fddd79466a905fa8d0e5e7f5ad2c593d095627e\", \"0x870ad87f645720a0ba982b6466f9a581ed89af7cc0080c7f1d114536877e26b953f26804458cf3fd67cc53be9bae575\", \"0x3811a0a51b11eeaa5e4de1b43984feb40668a0c62c5530b738dafbdba6c9e815cc4cf952c6207ebfc6b46b2a788c065\", \"0x4abffc61e058a798cb893b106afd6642a9a5b9c9d190ec6b7e7b7736ae7f55a249a0b111e77724efa62ffa005d60c1b\", \"0x15001106717bc45a513b6146a10459901cff726c93d0d1e631079bee82eefa9155dbd411db488636973beb7098c9c4b4\", \"0xab0519a411e6eff310339690c65e26a5fe9b219c8c6945c187f8770c76c54868e294fa116e256a599fad06fe2083152\", \"0x520c7b90cf5c98118a54b28000fa41595bd4268ae83a9bdb5577168577387d851618625ecc43910bbab4c61a021591\", \"0xc65eacc9be6245d73eed5b34f8ac954da859308e4b75dbf9c2d3112091ab90f36538189e6273259d778197bb7ce6818\", \"0x71c5b1b76aba5f951b840c414510b8a36729740fbb935ee17a89d02a9118d4b299f7f704c2814db96c58b5c3e8e4d32\", \"0xbd28e1ac6c5e1fc4c3c997bfdc3b364690a7fe355062b0cfeb9891f24d1e1098dd536b4174c486ab9acd77c6aff88a4\", \"0x19adf3b54e4ede32e8529051b0da99c4ab475a13ae3aec8ce601154c65a333d3db61523e885303ec600017b7628ea4cb\", \"0x1414c8b51b998f78adf2545657e79e04c5e6713c798ba7fbea1b3100eec83d020178ee760d4aa7cfe33d5c9a82591444\", \"0x5251cc2093d6ace28beccc75ba85b076a4f82043696c3596f25482780c5d16de2d89576fd654eed140266533553b456\", \"0x44adc21c8b70388f0d70a25d9da68a9b1c99e5db0339827f45d676d966ecd70d51c17e99be1eaebe4256435ec7b2cb3\", \"0xd2764ffdd4aafbec5111e3502e485297b41c4eb78cd1aca40b15b39ff5f15d0164e59d271a9765179d78100e190c08a\", \"0xf495343ff43c6582b39c72d7c8451702f9f60ec9e718c09d10a9e93bb138cc69c9674cae87e3dc51c9782830fe3a1c3\", \"0x813353910401dd8201039268d018a7dcfd8666549fe5f94c51374ef5a37e15c8477d0a60e906c0fb761eae9eb6a3ca1\", \"0x18a61359e28c306f78bc965891d78d017ddd72a45062b72cf8dce528b0f32dae65e85266779e83ffe2250308e69dd641\", \"0x14d41d8887c59da2b7cddc906b83183a8d3c745d247eaf6bfc04e806c4696d177ba228233cea1f2adf60e9a125821564\", \"0x27b4eb6686078e08e0b2c5cea6c4e60bfbbc7839ac73c47ab312a1959c261cf2c2949031a36cfe5624595eb1105eb9f\", \"0x157440aa6437f627e6177f5e1f009a2cd4f844beedd80029b7b2caf076b31974a103ec4f7bc04326b50da3d2abbd1093\", \"0xdbfeadd899ed34a01cfd537096e630c70209c4bcfd61188dbe39b7dd19dbe13774820c247de3fec5143e4d23a89d0dd\", \"0x10431edbc907726e8f1471a35aad7df33f528ed82b927926cca56c54d70c84c511feb40d5f76da3ccc22e3b9a4fc7003\", \"0x742a7bab4d10cf49e492e363988c6faeb8320a3d46913f3b89907afdb9ce12df2e0674a5e4661193657916509398d3f\", \"0x49def4922bc54ec02e8412e5265310b6e778071fa1083980ecc1034ccd3dc724ef66584834e9dddc689900aaa044ef3\", \"0x138f41302d6034a1952188cab929eb75a81d1c8a1adea5099537ed125d6fbf33a330b83096d3145b90919d5e3c992255\", \"0x6ebb5f7da78c6138fa6834af37751887cdc9cee7518dd38ccc4ee0b5611195a70a401db0e755ba00b56b76f6c9f94a6\", \"0x126c7803e4974596968a4f04cb60c0ce1b2e259bc760a8e439eb3279905d908a6dd94746750996f969b08d93a2e524d1\", \"0xa6d898382d6eda6ac3e11fec169f84e17f16397e41b2df42707046ef7fe2ebd592c79977881f70b7bfe829d66d5765b\", \"0x137218011633b381bd89a97e55763aa251d63568f442799981da6f8735a7dfa1ee0402830ab83afdc84348871ac16e37\", \"0x2760e0d91fe71d8b4b54e9c65b91e89f5a4ea2a3e3bae93c0bb37ac9b28c8a3390e2a572a56ed9859d027d5500e54ca\", \"0x14addd1e3595e48b0d69ff071fad7e8decea0154410b54843d8bbece5c0fb194c9ff11e548e3d85022533f0124485c6e\", \"0xc922489ee0d82dd82e9c9fa32fafb8653984c6847bb45d09429a64bcf8b483c5925582f20b95b4f3386708fb12e1972\", \"0x124198bd68cdd64d11b74a28e390a36b2b76eefed0a9692cb7f68cfccfd03a91cf4770e6b584334aade210bb1addc2af\", \"0x12c5e08cba713e18995f1fe5c2941ce6812ba3af7597767d5f9846f4f4484302ca7aeff43ccceff055fbb5045467a5a0\", \"0x48529961f0804ff9d586c6fce3865111121f620920b5f5c8fe5260d8abad708978027fff404c819fb03d0b1a57fb212\", \"0x9900bc240091764a11f90800c16626daa8ea09d84ee80ef30eae8f0c2b73a2b0e502a90225fd77e61fe5514c02661bb\", \"0x21cb6d48e3869a917ea7f7c2c8348bca2f28ee8858ef05dc213b7b3866858eb1d2ff273bd9a7e9094f7395f08cd2494\", \"0xf310752dd0682895f38102bd06e233884d4c1f9a90fbbd0ebd2ed6970b4009373bc13eeae85e57e4ff71e10d363aebd\", \"0xb521644578cf2ac7c7427e6bb83a50d771124be587383ca5243a7aa37061cadd7de09dbfdc0e4b3e0733fb33927f485\", \"0x378f671119170c553acd6df72c0aec702f32dd9c90fd959bada99fc7650e9e121d1a933c2089e03112b40be116ebe3d\", \"0x1054ee4ca3b1d8523e0e4d82bc512f8e057e843968d57185220906c270ff8dc90a9e903f928967422ff4775a65934653\", \"0x3c7dacef5d95a76e46ce2f737eea2116d95ac0afa8cedca27dbe830464e9fe9cdc82be6709bafe101a4cfea5286dba5\", \"0x1534470261aa9852854998dfa667ff1d2fcccb490e54d4b41be562e7a9bc3f5f5772a676d94523b83ce39b61d635a25c\", \"0x8dec854c0b36dbd59a59a4b391e5bbf8d7dd6a66c21362acf590035182f517da887406fe26bf7bea657269ea5e33c1d\", \"0xad646d6e77d25c4825dd9bf177d4d4b5b2efd71c31e5977ce2156daafde511c63b6830d944b87697dc19bb9cc0b4bfc\", \"0x20c0214d819311198ddf2f073f3ec68bc3762fe0299707152bd06a9daadddb87f4c0b5edbc90da730abf7bb2407cef8\", \"0x1569c15b058a27e1957b7302e1ee92036f14d15f5389f63a875e5e2b5d53f7c48defe9eb7dedd9939e905f7f3dc950a4\"]];\n        let xj = [[\"0x7f7956e7258b204e6bb76fb6530b54704b338c9e41d551b4c65d12afeff17a68cd917da4aa7f5d7f85dd4c4af5e97a3\", \"0x61f63de6863a0737ea4c564fb2649c3298b59c310e023469e9f6a61c9d21a413a15b875c3b5ae69e8bc70cc1642be88\", \"0xd54ccfbe6ce28ca435fb866b16f94ad9149d23b673b8b033c7415a182a906c0c440ec19e65eff130e3bf3e78e64a8d5\", \"0x5b0b2403b504c7c3c04fa2649405e14816e285681f6d10877632f67dd17dd934dcdc3b3d59039e2f71aab9d24fe1f50\", \"0x120e02660f9058203246fbf0112482fcc1899b14e6ac805c02a2d7664553675a1cd30ab8eef17c2cd5a8e39666056b16\", \"0x848bb58f7c097a46b3a03ed0f1e29a3fe03f4e210140c9f40bce68d096dad390d28e98224a2242169998bd45bcfecd\", \"0xdc72aced2c6f4a5c4819c14494f27de393ef818bbd4517d07dd58a061d1a3e0141a6e2e95f2d0acc60f04b266569319\", \"0x4a715b7a58dc6543add0fc9ea5a83207f896f6abf8ab0e2333622e9b8f46b0713f2f072d77df88de226de432ab03d2b\", \"0xc04235cb1fe7822f16be8bc01f84be86960bad82590ceca82fde4beda8b9e6a5885c858c2816abbab513ff9a9c7b5d1\", \"0xe44406c2cb2d23cae0a6ab38bf6b02312251b650e69f258a269f5787fd2b0bd9ed885f0edb79bdcbaa9dc247ec2effa\", \"0x86501a5cf1b338e3103b59e485f10c54276bce940584dc74efb1890226e01d82c5dd98529dfd9eaed5f6ee84dbefdc7\", \"0x10a91f5f4e43b2f252c415e2034cc18aa5ab46c409e63ff37f5499c66dc28fbd4c3207007302b90bf0cd9d620156bc89\"]];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        let xi = xi\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xj = xj\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let mut i = vec![];\n        let mut j = vec![];\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        let (f, p) = bit_00_case::<BLS12381PrimeField, Degree2ExtensionField>(\n            &f, &q, &y, &x, &mut i, &mut j,\n        );\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n        assert_eq!(i, xi);\n        assert_eq!(j, xj);\n    }\n\n    #[test]\n    fn test_bit_1_init_case_1() {\n        let f = [\"0x521ad898cee9071ebcbf44d874b1a6540a5a24a4fd9c68f45778308171f9267fab695191d4eab620cf33a8eded7fd2c\", \"0x146aa46acc68a7fa2d014f4cdce6921f2f664ffafcd262db0a43e29fba239f8e7cc55a67075e7e25f7928438cd506976\", \"0x110012a0987f151e6eacf408ccd24b9c3e637b240a4100a3ccdc16d44e3cbdf8393eb3557a64d089a1a115a3eab1a695\", \"0xa3dc13d77e6eac496424ab994c230664bbb51c4abe8135d998621a4259c788d6959e539d97a534c119cdb9a394de9ad\", \"0x6d44964cce393f36664dfb78c36a4b56c817816904d06056f68e9017165ef8db1a4f97532d5c3bbed4da9a68948c926\", \"0x1191d32d29708748f35f4fbea90258a97e7b47db6986cbc73c24ba35ad601bfadab752fd1a3e438ce0686b7777654a0c\", \"0x18776284b17c0858f647e075e04c49ded673151413b8ce9b65bf572081d748820d57d62d54e14ea09aad1c01c5c5faac\", \"0x199c96383503947d119bd6be94efdb3595eead7072f8c3d67173449f6658fadb43d715c9dc54d7f547cc1525e9a566ab\", \"0xa97b4be53ee479681acc5ebfc4fae663d5040baacca25a862aae0152d3543705d87df48c8266658d2a03e597cfec8fc\", \"0x6c86339c39859d2fac14a4550fff32535a91b9b0ff23bc04475027273d9579f491b35686ba10369195fd003747b05cf\", \"0xe608702099837e04fc2e999cbb4b845ab04d0a51ea25ee04675bf96847cb9d629da62d1e4354c04ab5208100a0129af\", \"0x737a8f64f0c81b65cf9ef035b357d0017406b0c84de6a32ed1fff164d3d9531f1d9ec53b11735a58f1d611050ed258a\"];\n        let q = [(\"0x24aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8\", \"0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e\", \"0xce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801\", \"0x606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be\"), (\"0x82dc9154807866eb0f36ccb665a5fc010510bd690ddd7b540e5bf3ff02d81e98b75703a3b3d3c305a70960906e6cb09\", \"0xdd18d077ad5bd58dabb18d84a6ceebe6375a83dd242851bb4dcf956002c4efb974ffceee6709deb0dcf81d4285e5e60\", \"0x4a468eb9e206b9833d8e8e2197d3446652372ce5ef50e93c91aa58105d3a281b2e84ddb61535fe1a90bae7e6692f9b0\", \"0x198fd0ab6249082bf7007d7e8be8992de81f47ae3341c590194fa3bf769a2e5a5253527727115c334e82ed4be8da6c10\")];\n        let y = [\"0x6ce420ceafa50ff15baa710e1633d7893404a18b69ef5316a81b182dadbe66bb0ef4fe49ffa578c7698795e6d4a12cb\", \"0xf45ba6de68a0f1ab26ba5fac564f3f21a75239243fae800e2a8665fd9699e2795c674834c6ce016370aee9e4a1d38d1\"];\n        let x = [\"0x7f2db8fbcf121365e92ce3d77bf5d9a3537b5422e894c09e00053ace96a5403a8db66fbe03950e93033c5874bbe8046\", \"0xb190c99770f69f3e912d3ef69f63e082a05a1e63b50eb9a5de3e07b14aed7eded07b2f2b3c42c7e365d2a47945fc285\"];\n        let c = [\"0x521ad898cee9071ebcbf44d874b1a6540a5a24a4fd9c68f45778308171f9267fab695191d4eab620cf33a8eded7fd2c\", \"0x146aa46acc68a7fa2d014f4cdce6921f2f664ffafcd262db0a43e29fba239f8e7cc55a67075e7e25f7928438cd506976\", \"0x110012a0987f151e6eacf408ccd24b9c3e637b240a4100a3ccdc16d44e3cbdf8393eb3557a64d089a1a115a3eab1a695\", \"0xa3dc13d77e6eac496424ab994c230664bbb51c4abe8135d998621a4259c788d6959e539d97a534c119cdb9a394de9ad\", \"0x6d44964cce393f36664dfb78c36a4b56c817816904d06056f68e9017165ef8db1a4f97532d5c3bbed4da9a68948c926\", \"0x1191d32d29708748f35f4fbea90258a97e7b47db6986cbc73c24ba35ad601bfadab752fd1a3e438ce0686b7777654a0c\", \"0x18776284b17c0858f647e075e04c49ded673151413b8ce9b65bf572081d748820d57d62d54e14ea09aad1c01c5c5faac\", \"0x199c96383503947d119bd6be94efdb3595eead7072f8c3d67173449f6658fadb43d715c9dc54d7f547cc1525e9a566ab\", \"0xa97b4be53ee479681acc5ebfc4fae663d5040baacca25a862aae0152d3543705d87df48c8266658d2a03e597cfec8fc\", \"0x6c86339c39859d2fac14a4550fff32535a91b9b0ff23bc04475027273d9579f491b35686ba10369195fd003747b05cf\", \"0xe608702099837e04fc2e999cbb4b845ab04d0a51ea25ee04675bf96847cb9d629da62d1e4354c04ab5208100a0129af\", \"0x737a8f64f0c81b65cf9ef035b357d0017406b0c84de6a32ed1fff164d3d9531f1d9ec53b11735a58f1d611050ed258a\"];\n        let xf = [\"0x6dcf1ec2bee9d55fd7c7dd01f0d89e52ce00053fb4cd271af8ac67e915aa56c1f18943cf63d7acf09f9e238c86f7575\", \"0x7f05f480f32402899fc238d5e397600577a07eddd78a63793400f32912e689ef50ff7298c542fcbddc8a2f30326ff28\", \"0x71d870e4553f214175e57f71397705b5336a8c404e29abab7505079976315ae30aea8c7fc8e47f2ce78aed551c79270\", \"0x37df42454ed3974bb2b32f97123a17956e452893cabef6a29a0888f8ce8b899253e37ae32f0ae88611fa10260d597c0\", \"0xba703f387adf415b877fd75815f8322190dde62bdc8a55e54b5dec1284a8c9177b3c945a72f0e1e9c109d242988e116\", \"0x14068f72159c932c910dd5126f8907d9616c496a0f51dbcc5585ddebaf32dc4e03ae577f1f07d02f85fc8a875e197521\", \"0x17dfc12834ee7334831b24af1174df6680c4991d4d20cc807c5e8df6083d142e2fd17ccfce6bb359366acbb7781372b9\", \"0x17d3b0da632dabdf4ba0f6c890308dd36ed98b5e1d50a8160a2349e79dd3de20eea74d8b95daa3bc8b9ac34a59ff12f0\", \"0x17ddaa28e29c2317b96c21b7fd31f8f2bab3cabf17b82c770ed0c77db94e0738119993eb4c5d01ef3358bf5ad26286cc\", \"0x22b2500baf6ce28a86979f31387bb67348f155192cf97f99aeb257fdcdc23c15eb5315ea817f28532b8d5198e199dd\", \"0x6524f53a10bd1ed1f7de6acc2d4414912600bfec37d116a4d096e4e54120fe17325dec0b0e382b90ef6654c3bd2e20c\", \"0xebb85352772f284d12c95bf531a0f1fc69bf6acd1695e9af23d641db780ebb70c7fbfbe8a680e766390ddaa62af47cd\"];\n        let xp = [(\"0x122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae\", \"0x9380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc\", \"0xb21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd892\", \"0x8f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e849\"), (\"0x893227b499dab30e15b606ec3c375f9fabf7fbb574b9b11c9eefbe33fae82066297e23c518f59e74d5cf646cec6464f\", \"0x10578234a81819d1ebb3d77b03a128f3165642386fff1b0a74ad73c139425703a991ce459cdc1995351adff98061f0ea\", \"0x16efa85752a02d4358a92eb3b577c1e27a02ec36000c44403159baf7022541a02104b633549e05b774e1b76343a8e661\", \"0xaf65df48a519d9209257e3df9fb0a1bd3491799091df954380242592db0bead0ddd62dbe33aeeaf1d4a63bdbc4c6008\")];\n        let xi = [[\"0xe8899bf2d1f2f54c552427835589cd2828d33eb1fef81e5382af6e33a32d19e7436939b3a0aca3000826ee5f29f7a41\", \"0x163cc7d50f58e7fd58c4467784a7f6848c725dbed14ffa37ceb2664733594beecc9e8e74e15b88e3df1df249b1ee10e7\", \"0x5456b23a25e181f03ecaf790566ee2ae3f9a7c9aace97c5f51b1822a9d2e8b0ceb672afdc6811f64c2a47bf3b14a670\", \"0x148cc9dcaebdde0fa4b641ce52ac847504136c550836467c59fdc151741f4e8e8bb6dac0275c34709e7f843f60afe9dc\", \"0xef2dcf1a1af1d85290833bdc8d333eae4a2416662a7f8d1f171df42ba46755601670b356942900157a4a691278e838a\", \"0x76ec0b906fec3e2548ddafd05cbe92834d9f67602526598cf63790c56effc25547b035723461181b30bb7f402c48ad5\", \"0x1893ea72d489bb198282ce86062a8f7d79862b680b0dc9a96d0e0c06024a12ae4269cff7afad6d3c5475405e2884021\", \"0x380676d535bcc75c2ff6b216b5bc81b5725b2aff21e124d93fd6315a2248700c21be8f775d2bf696c927decf4af8b7f\", \"0x1ee362659422cdf7cb061e82acac95cc7cb4cf73f02e0c49bc166bbc125ee67ee92e8111ee26b7a8624e906fdba11be\", \"0x16cc42e3d79053697cf26dfaa74a55c8546d3a08ecefd2b6c0c7ffc2eaf861068d95bba66b1eb9b4daca7ac05c61305d\", \"0xa9cf5030f0c62f73281fad2c97854ff91e3e22ad09abdb334743ed5de591bba3496cdf30a3357f360fad1f2d109b7ff\", \"0x1343b69e1140100f3dc3aedcdbfcc4363709747a511a3d8b576f2a210c59a8378ee1acf6ad57126d9da7e4f2099902dc\", \"0x463f6de4e5ef5d7b704ab2fb2eaf6ba225d334c2080f688657bf8eba8cfdd7d090b35bd45a8d09f1fd5e3ef3a8ce079\", \"0x114fb86f02da46f189d2db73a0c8a258472caa22d95d35ff3ea1f72cc98d310000e5e3451cef06cbc702937b1ef2fa9c\", \"0x123daf0320a5fe89b20346dc0f6f518d5ae7cad91197b2d9838bbc04ed0c6681dfb816e4cb8f5f763e05be29aabfa3b4\", \"0x4ebdb59fa847ba75e7fba78eca31af430c4ce13b8b845d6f1cb144eb550379e57b248c2cf134622a17a72daec5a175d\", \"0x12bc3e0a8465166f229da4dea0b0698e143efd397b0421810c07ba2caa14590a92641f141e42823cd0d4be8161d8a0cf\", \"0xc841c20248b8989103512b3c9b44da503c1aa5e941109fd849821197ba666bca1daddba36e8f615fdf46b8f74148576\", \"0xef637fc86371e1f3f24608bc1ab79884f9ead6afb9102b802ab14471b2298f46c5ce6718c8fb1861e7f0ca584df38e8\", \"0x8a18906704d81bbe407f0003945c43f7f0827f9dfb606caa563c62390ced3f07a091ee47c69d5c38505445ab5404686\", \"0xb41a7c5f385e5e11370c7febebccc6c906f7dd9351bc99f3c47b45f89c740383b21ccda4e78a74e1f02df5685fec579\", \"0x18152c8ebc343acf58014d9f9b8f3f44379b2ef18c288b1a2413e416d3e4e97f18c9eea2a988bafe4b405e9b1e6a1068\", \"0xd9bec30500bf612262f752ac2c2981be010f17e60f210b21978f498af139b2601f81df384f7891155dc524028a9c85a\", \"0x3677bf0ef760a7e32576dd0376c00d6c2619cc2a4ed7246a57d7c2f5bdab6ea17d8cc25736f9435d795542853f87851\", \"0x1a8e6daeeec4175a6a74f5e40f57ca05149fcbdbbc9d4dcba25bff52377e27bdeaa64591b6b4d05b6ec5a6aaad93bb5\", \"0xb1d85cbda8e37689d68ac73b63a2c4c62582bead16d0572003865fe6a85e8e49f37374ae25acf5584962cc0e85f502d\", \"0xc85c01b9b42b297feb1a34cc0aefb3739f44df44f6409865738862a7b741741e29841860c40e51d4f154ec443783197\", \"0xbb3b12dc3cfc717a4612174b132d1c2e06b1ff648cd27d00e2e15247de13695aa784234aa6ad5f62976e220f2802f7c\", \"0x4a4c14b30188c9e4b26e5362872eb13784c6c7effa2a3de7bb05c6c2c3277d2426a62a490d49d2930e8c6787507b4fe\", \"0xfd9b096dc81d49c0f30145d2d462c986462656d2fea44782020eae45c9ecfed514d15a91907c933f2cff180d01230f7\", \"0x1050d223a7ae09664142e67d8bcf631d8e8270c7cf379f55da84fb35756ec93aac7062850e88a2d80a9f8c6eabcde61a\", \"0x10d6c35de0dbf0832bfac6901fc2f4cebfe769d251c1d018f15709279f7378f5611951d66f04935523f8d3e6bbcfc40a\", \"0x17502e841d1c751f97992599ab672fd7b4406353102a50e13849da6a584f2defc35cb436546b6ad48a39fdad2448a82e\", \"0xaaf33baa4db7f6edb87dd9cd7311bd39069a840fa8d8dd49e58df12f3714d71eb7c83e43fa5423d80d01c7fb35712d9\", \"0x5d0f763804e8e4e17c6e29ff93ceb128a5c6e46c3a6688ed3285727b387018fa11003d39c8d5356b83f5a050f2ba23f\", \"0x210f7ce0277ee88f4bdfb77a38d8333eaf3ee9aa8d846351042248be09dcbea0fe06622a82d2a52e2f15942cecf7868\", \"0x7009a78d046a4223d6918822cbc00c0523696f78e85d7883cacccc3eb781350c85fcf0f278738b86441a6806e2556d4\", \"0x6c2041bd2df5687640ef195e8677a03c150050f4bbe304da55ea4c4a1036aeafb73cff23a63f3fe06d9480947e55a52\", \"0x4d9c72a03be12a88b76831d01a353ee068c09f96fdaec74eb60a38c08bd5ad8c393119a1b3227b4ac72455594358da1\", \"0x13f228eb5b3f295c64e9ddf2250879b623441c0db2f2617b3b85df938f2427a7190d721d87254067019582785dd6964f\", \"0x23d5b1edc9d5bf13fd5dde686530cae59ad34f32962a43efc58eb582cf3f69d9360706533a5a3043913f97b1f01bc4d\", \"0x15fba452e8ffcd78d21f4ded67b9c9eac394df22928fd62ea7d3375de41fa486f272a3e7c9dbfe15d4344718257ee00d\", \"0x119e8db942cd3373ead2539dc6c19d97c28ace94de92e80a71e49ca831646f45cce63f39ab8dbc4063e136195ba9df9e\", \"0x54872800533a260494090d1f316a5b6aae9fa22843ba6b76ce5f7db72189c29195731167868ce96342dcb9a1d676c67\", \"0x190ec7594c543f6a6279c47fb997f36649b16583c9493ec0e80fbe17d6b32b6f6a025a31625357d868db93889fa9bc83\", \"0x1076cb0dfadbeeba2605e596436f69349532cd836fc10b9997fb9a5f1f5b73eee3b055b5cebaa2435c9ff0f8146d07b4\", \"0x74d333f32f240ba7aafdb1572a94d228ade7d6bb45b67654606f8d98c05b2b091cfc71957338186d26c9bdbfb03d775\", \"0x10d9f3c7dacc7ef8b7b60f7474d5329b95c597c4083e626a618690793228b1f358623c4c5772ecd80b3c9ac273608279\", \"0x8dbb8728b6da5f245cd61eb18a4a34d1382b0a44c1ed8c88c3f620b14fe9211f61d69c5cc9529da708a50e3a97aa176\", \"0xc12777fe64bffb84d4d0c6c409519da77a081bfb05bce0c326aad71c243b134577ef7921fd3927bf956ac0d7704f7ea\", \"0xcb09aa163755c68a0e912444b03f8c2c26284f784b191ceecc23922c1c6b67a2e0b86d26c8d31f2bca44df1a40628e5\", \"0x32281704643a5a864ec2140874d8a97299d4a552d31df0f92c3e07c745b074f42c3ffe54e7d95c0b0ce5552e684a43a\", \"0x15f0a4d8bae8b018138c36b4021e8b66465477f4bbbad73cd44ce790b461f3cb3b3030a39599a4db7f147ba2c75a4ec3\", \"0xa505444671788b4d171af1972edb140da8569c5beab9becbb9ede13407cb096491558679fc1746bd66e36b53e7c5340\"]];\n        let xj = [[\"0x6dcf1ec2bee9d55fd7c7dd01f0d89e52ce00053fb4cd271af8ac67e915aa56c1f18943cf63d7acf09f9e238c86f7575\", \"0x7f05f480f32402899fc238d5e397600577a07eddd78a63793400f32912e689ef50ff7298c542fcbddc8a2f30326ff28\", \"0x71d870e4553f214175e57f71397705b5336a8c404e29abab7505079976315ae30aea8c7fc8e47f2ce78aed551c79270\", \"0x37df42454ed3974bb2b32f97123a17956e452893cabef6a29a0888f8ce8b899253e37ae32f0ae88611fa10260d597c0\", \"0xba703f387adf415b877fd75815f8322190dde62bdc8a55e54b5dec1284a8c9177b3c945a72f0e1e9c109d242988e116\", \"0x14068f72159c932c910dd5126f8907d9616c496a0f51dbcc5585ddebaf32dc4e03ae577f1f07d02f85fc8a875e197521\", \"0x17dfc12834ee7334831b24af1174df6680c4991d4d20cc807c5e8df6083d142e2fd17ccfce6bb359366acbb7781372b9\", \"0x17d3b0da632dabdf4ba0f6c890308dd36ed98b5e1d50a8160a2349e79dd3de20eea74d8b95daa3bc8b9ac34a59ff12f0\", \"0x17ddaa28e29c2317b96c21b7fd31f8f2bab3cabf17b82c770ed0c77db94e0738119993eb4c5d01ef3358bf5ad26286cc\", \"0x22b2500baf6ce28a86979f31387bb67348f155192cf97f99aeb257fdcdc23c15eb5315ea817f28532b8d5198e199dd\", \"0x6524f53a10bd1ed1f7de6acc2d4414912600bfec37d116a4d096e4e54120fe17325dec0b0e382b90ef6654c3bd2e20c\", \"0xebb85352772f284d12c95bf531a0f1fc69bf6acd1695e9af23d641db780ebb70c7fbfbe8a680e766390ddaa62af47cd\"]];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let c = Polynomial::new(\n            c.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        let xi = xi\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xj = xj\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let mut i = vec![];\n        let mut j = vec![];\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        let (f, p) = bit_1_init_case::<BLS12381PrimeField, Degree2ExtensionField>(\n            &f, &q, &y, &x, &c, &mut i, &mut j,\n        );\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n        assert_eq!(i, xi);\n        assert_eq!(j, xj);\n    }\n\n    #[test]\n    fn test_bit_1_case_1() {\n        let f = [\n            \"0x6e2d5c667e253ffe1d604e9b0c0efb376aaa3e1f2fa8194a9fdd627525394de\",\n            \"0x2dc3c5e55face7c5e2c971b204e63954fbc8ad239d2d152e532c421b7834a99d\",\n            \"0x2ff47505930441520ea2801041714bcb5d41a0ffa81940aec94ea9901fcac97d\",\n            \"0xdab9fd3d1ef5226f76a2af1d6b410d8639501aa55867c1f0779e0422d545f0c\",\n            \"0x2fea029bdb6a10f53ffd60992916c6410e0f53520845bfd3e55f70e8272c8fb3\",\n            \"0x2f329aa1c588e3e4b7d8f5bedbe3c09728563ff0c46ce45b66636cb6ba1ee436\",\n            \"0x2290e74d07afff26a405ca3722d951cb9a512f1c100fa50e29907ad3283e7b83\",\n            \"0x6bd6eba6eb034c98be6fdabbb6f2986a20934fe7f4ccb1aa1cff1983d7d2ae4\",\n            \"0x1ca0c85d7f94b5c6b3543992e315765cb35d0f7d49149a6939c1e7afec80ee3c\",\n            \"0x1f70622e79ccbeb35ecce1f7718bba441de2df4f3e916ca84262a68f9eea11f9\",\n            \"0x2492333e1554b6d2c1ad39913d06e14c6ad3a1569e62952be0e54c3427ea8aab\",\n            \"0x2a9baf66b1ec17ae1f6f435746d944886953830b40efced523794fd2aa17d4a\",\n        ];\n        let q = [\n            (\n                \"0x27dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9\",\n                \"0x203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad79\",\n                \"0x4bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e\",\n                \"0x195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de152\",\n            ),\n            (\n                \"0x19092b3d714b3bb6599b735386dd05eab401e72057bab79773a6de8f5693387b\",\n                \"0x1acb3fbdde3ce471791558747f0e52b1b7a708834dc533393bcfc2af317703ee\",\n                \"0x258d7966e4b36382460549a44d5cbe96fbe1c412e36f25218438f72d7d387077\",\n                \"0x2a58bf6a639ae104439ba4e8db873938a26fcd5bd0b68beb20c44705d9820860\",\n            ),\n        ];\n        let s = [\n            (\n                \"0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\",\n                \"0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\",\n                \"0x1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d\",\n                \"0x275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec\",\n            ),\n            (\n                \"0x1314aaf1c372e6d7635e573808d9d5c7178bdce7335eb0538f718d8e6651eeb1\",\n                \"0x14c25d3aec745e5a2d4aba9e1448a8cc1048d01a5289f29ccc5acf5e81526673\",\n                \"0x302adae1297f41f9fdd327cfa91c5688fc16dce6579ff99d6699ed49b4d2445e\",\n                \"0x1800a20cf49101a007f783b70334fbdecf9be4f63017754e9afc5721ead62211\",\n            ),\n        ];\n        let y = [\n            \"0x1ab9de59fc825e8b5326694c7d82556785cb9cbfd0d0a11721d1972c21c411f8\",\n            \"0x16a475582082ae3616c808acd62684170d9fa7bf234110353e9cbceca19d2c69\",\n        ];\n        let x = [\n            \"0x27783160c70b7ac760cff888c621846a7ed80e50c7ea8a7a718a4ad8a50886fb\",\n            \"0x10a6d46618419682152a25b5f819b22c2e572d1f670d12026a18c384248dad2f\",\n        ];\n        let c = [\n            \"0x14156ca1853095df27f3cb7c50eca75e794d2f14195c16df4a0f8f9dcb48bee9\",\n            \"0xdc2a20a6107d4c49fed6b2018946bcc2a8dad06f01d099a6df0a4a55ed21b59\",\n            \"0x14260c5afb0b1148ed80f8339cf9e06ff04257cb6c1817c4efa721fc98f69503\",\n            \"0xafe8a09df07bf3dffefe512eb9448ef436dd090f98323135baab8ae3c766c60\",\n            \"0x114692950f53d4f707bb02cc2b5dc98aff5936811707d6579371dae20368253c\",\n            \"0x2dd3fca72591963149646f1e106dc0ee917551f5a9da397fe12d4a3939ce650c\",\n            \"0x1750bd450b85cbd62ea3f1b228beff5fd364a127d6054be99a9248497b82062a\",\n            \"0x1248cfad33a2147726169d3ce55db12ecafd74bc4b83377c168d89b919386546\",\n            \"0x28d156bac04e64938816b055888399c99a954b82724e5f5589d549a709b2b5ef\",\n            \"0x39e1ab153bd709556afece475580f453f9126f256fbb49c235bc75082f5f26e\",\n            \"0x14853f940bf5c557c7f558d3e74e6617d7f08b54fd83597fed1d7e7b9d09e04\",\n            \"0xaa480d613601947fee14a3ce2b7af4e1872fe49ae3473546aa01a618b78b125\",\n        ];\n        let xf = [\n            \"0x9cc2ac2feb91b788f180b7f837ff5880af2d8a7b2cbc2078ddbfaa7de025ab5\",\n            \"0x2b4691bfa6539beb28208698d947d559a85b25c7a591428b92ebd2a21abec753\",\n            \"0x27b1bda2ff2bbe089cd77810447ab3747db696a3f6ef1e002aa95b3c440d8421\",\n            \"0xfc2973e1356ebf52ddb6a5f96f0380df66dfe01de4cd7d7910730b235b46414\",\n            \"0x96dc0c72aa87605c1be1f3b6812a70f1d4dbdefd725e7a84302d8aa32e80fcf\",\n            \"0xea15f5754762638499ad8458f796af631ece5e5aa4b56d786db49e831390ace\",\n            \"0x103abf47dccc2f4d223ede9edcf039bf49c1ec61174d95d075fd3727469afe66\",\n            \"0x26e4a5a33276fc3166bb1e1310597230fbd36c03a6cf05749310487c359ed5e3\",\n            \"0x65373ec7b46d26577bdfb0a69f8df530bdd64ae3b63b728ddcc7c24ba04ea22\",\n            \"0x51b781e90fe55d3767d00d134cad0d2879f07054f31198ee15d57679a07cceb\",\n            \"0x880237565c157f17a67f4f4d74fd3acd28c325e1d25747ef4e9d6c1a688457c\",\n            \"0x1c718116af5b9bfe4b9a0f502db2b1916a717feb5c1a016cca2b0b70d3882c4\",\n        ];\n        let xp = [\n            (\n                \"0x6064e784db10e9051e52826e192715e8d7e478cb09a5e0012defa0694fbc7f5\",\n                \"0x1014772f57bb9742735191cd5dcfe4ebbc04156b6878a0a7c9824f32ffb66e85\",\n                \"0x58e1d5681b5b9e0074b0f9c8d2c68a069b920d74521e79765036d57666c5597\",\n                \"0x21e2335f3354bb7922ffcc2f38d3323dd9453ac49b55441452aeaca147711b2\",\n            ),\n            (\n                \"0xbddb1ea5c182ba12d0762b9c85ebd180541e0b153ca85ff24489f09cb0d44a7\",\n                \"0x2170b47e91296dad38a19f370fa3368b1f333b8f05e5018b7a38af0a045be237\",\n                \"0x760488b80e6b5dd63b4b7422f5609df112bf8a63604449ae3020c63ad8e2489\",\n                \"0x1c937b1f996ef4397c744c8b2503cf644feb5b6d8b7f77237a7b8a2bcb98583a\",\n            ),\n        ];\n        let xi = [[\n            \"0xa79ee9efbaa87e84974d0064a9b0a54517dd0e329163c9af0ca337787769c76\",\n            \"0x2e6655c0294cbfc67c5eafdd31ccb9a5bfd1bd6f6d00d86b27ee6f0f45132db9\",\n            \"0x223aa77e00ac43da1cb9698a9bcd76dd0d4dc9e9f3361c19fbdfc575f825dfcd\",\n            \"0xba550ec81fdab48e83ae063002c0a4363f06d42bc9fb8cd9c54bb9a738583fd\",\n            \"0xc46766575f8ded7a90993cd70cc42210d77233b92ac51af1b37d71fdc9f03a5\",\n            \"0x1d93b6b19feee096b780bf18a2084117c9fc934df72b39b9856368f6d621b7e0\",\n            \"0xf790c1fea05178b7f9de1aabfb394cfafdc45716ffdb752bedf419215896403\",\n            \"0x2e7f87004e656e2f0a90f87cc58103f6dbc75f156feb6e940594809f32468890\",\n            \"0x1b7de56671644ff780c45f087d0b1b8f2c9603c7748e99bf81ac39475092049e\",\n            \"0x1d4f78206e251a9dcef0c173c33a2860153e783ab6fdfca8734f90b9695e7825\",\n            \"0x271eefd32b948443ea242ffa8d1f3c281c64272c21580c03d60b46b9cefd3903\",\n            \"0x26d01c1ee109d33051f2f49f318c80672f843c74b859e1bb3249b20dc11f559d\",\n            \"0x45f8774c96e9d51f4d665cffa0f9ac1b8cb75fa4ef193ed5e67609288bb62c8\",\n            \"0x191b686c256a3b826b6f99ff6dfb1f7cb22f02515655b308d60bc4563459264c\",\n            \"0x170eba3d98078d3d7cdadabf7e2eb4e24aed94351ef9de5ca685e544cc958cc9\",\n            \"0x99c99ebce93adddeba403ffecc8c37691bf52cddce48fb2092b99baa9c37fc1\",\n            \"0xa794d503fc1a9aaa6ed5c70d1452971e44ce9e14c4e33d728ca3aa71a139bac\",\n            \"0xda34cb75f019e7077721004cef3c0ed836d7a62ac54f203f01a7ea5caeba2c9\",\n            \"0x15284512bc0074e4ae175a7a86cca36b516e4ee6230ebcd426435f215cd7e1ba\",\n            \"0xa4370b540cdf6a3ba34992e9b9c4c715119fe0f3307eff2a746493af08ff459\",\n            \"0x14536aa2d190a0ceae4599fce6f4e99835d08b23d98e5217c654d41d8035cdca\",\n            \"0x383c83dc474b9cb3d2f2b2bf0cbfc2713bd31e45cf8d30e4989451d3c929897\",\n            \"0x23d8e6b10a662363f1b4711ed89c7f057c63679d41f3aa7e215cce1c65afeb3e\",\n            \"0xcaaaa24187a70d233875111d0cdb09351153eada98914d9de99eee6a5ab5193\",\n            \"0x182fcae609a86cdc19e81d291fae341048bedef4988ce4b3290e7997f9f71a80\",\n            \"0x1f9a679a7a9aa2f6bbc8b2b7ca097db3784e7014d77a6e4b495ed3a6f2a4f727\",\n            \"0x297aab9149267a69d02e8a75a50eae577160b740b19c2eae326fe2e8411a2818\",\n            \"0x1b7b271c51f6252ad920dd621b69da3c60606c5ce9d8029ccbc807548c882cea\",\n            \"0xb55add16f95fca8c970b0ae91796ce3fca1f40869b7ce250b5893f118080586\",\n            \"0x29b43ab30d36fb285b38dd37771d6d998397e2f6a89ae62246af45d79e14becc\",\n            \"0x23d92b8079583f2a528fcabe2d23eaaaad7e52a42d5e8b6eee647dc1d4d6e274\",\n            \"0x138492ccab0224206a5c568fb3e7e73859e9f8f5e72da7654418a584284f5960\",\n            \"0x2af93e8c93e9bd75f1cd46b9906b58634677b179a97288f27ef07b1b5fc9d8dd\",\n            \"0x20fc268e39b33c7617497bdc3e7bd939a45e832ed413bb408b7d79230ce4f60b\",\n            \"0xb9dc0788d376ac77f442031ac7bde522955a9eef3395343a6d3edce03b4a829\",\n            \"0x15e9ec57703b3c37f621b98b75e94b0885b27936d94b8ae29f78c9f1adc0ed1e\",\n            \"0xce8e0c66aeabaf7877a971e4043ac96f34f540c7b5aa6e074fe17407c48b071\",\n            \"0x24567171e46bb99f25f932f8924da00f057613de43e23523768a838f3e06a3f1\",\n            \"0xf4465460c7ff15d8a5adb5af8645cba61d4b9fcbe36a81476207fcc031e40a5\",\n            \"0x1b8eea0e13a9845eadf38c4778cdb5a43d81cb0747a31d1b8d940ea59b149951\",\n            \"0x13577c9318b6a3919ab6701bab529507e4b5300312ef2d6f1f958a42be9c2eb\",\n            \"0x2d03f66a7b412e0bd1630dd126a66b046e6bbd16ea1ae05fb3ac8c34c176cc95\",\n            \"0x2b8d2b6aad77b369fd5d502a8b00b8b6247fcacf16b1ae354c57901d6b3eb934\",\n            \"0x8b452b0ab3e4d897e1fec5b90f0450ef9036e4966049120832a980ea5a83d29\",\n            \"0x6af107effff47a9e2609ca233e81e6bde4bcaaca497a816c0645d039241c7d0\",\n            \"0x26ac80e013f793ef90929288be4f84d3be8f3ba373e8fdc2897ec1d500fa86f0\",\n            \"0x29c9bcac9752160d466ece56a3066fd4ddfde6dac1d7dd2ffc43e264bbe46fdf\",\n            \"0x22181cddd7f75ec3e11f54f23e4a4488d762d3e0d06911a076cc0ffa57a57094\",\n            \"0x1dbb2fde8644a40b897c3b8c87426d37c2ac98507eb2c2321d53c07c1120eae\",\n            \"0x2be613f72c50ce45878c294c553e1d9b3929f33466f99cfca6b61dd0b38714f7\",\n            \"0x2673bef40c708e61da5540d99a69ea7a04777ca491b53359bc19d7131cb0a73\",\n            \"0x185efbfcab081123f13ac188e539580aa7ba31fcb1fd1464ecc52c4c597534bd\",\n            \"0xa98fb59b21fd4a2619712941a0a1ef57964e02ec3892e46422442c6cdc0766f\",\n            \"0x965417e5cc262886ba34dfc81b0dbce0ad7ec0f1703ae45608792577b69793f\",\n            \"0x9fffdbf32bec4ef94ba958e1b1ec8b5da5701ffe9c9e039794fda3d60b97296\",\n            \"0x1788f44b56ed3ededf77708e0a2e1e5523368c5731c1366fab9d6dba253525d0\",\n            \"0x2d62c0f8a2c995ccce46c16747f8c800ce5d8f00cfb013448883f0f2c37d076c\",\n            \"0x2487fc89973ad2a53dc502d6826c03bd8a129d37efbd987c0c8c2d224dbb0fe0\",\n        ]];\n        let xj = [[\n            \"0x9cc2ac2feb91b788f180b7f837ff5880af2d8a7b2cbc2078ddbfaa7de025ab5\",\n            \"0x2b4691bfa6539beb28208698d947d559a85b25c7a591428b92ebd2a21abec753\",\n            \"0x27b1bda2ff2bbe089cd77810447ab3747db696a3f6ef1e002aa95b3c440d8421\",\n            \"0xfc2973e1356ebf52ddb6a5f96f0380df66dfe01de4cd7d7910730b235b46414\",\n            \"0x96dc0c72aa87605c1be1f3b6812a70f1d4dbdefd725e7a84302d8aa32e80fcf\",\n            \"0xea15f5754762638499ad8458f796af631ece5e5aa4b56d786db49e831390ace\",\n            \"0x103abf47dccc2f4d223ede9edcf039bf49c1ec61174d95d075fd3727469afe66\",\n            \"0x26e4a5a33276fc3166bb1e1310597230fbd36c03a6cf05749310487c359ed5e3\",\n            \"0x65373ec7b46d26577bdfb0a69f8df530bdd64ae3b63b728ddcc7c24ba04ea22\",\n            \"0x51b781e90fe55d3767d00d134cad0d2879f07054f31198ee15d57679a07cceb\",\n            \"0x880237565c157f17a67f4f4d74fd3acd28c325e1d25747ef4e9d6c1a688457c\",\n            \"0x1c718116af5b9bfe4b9a0f502db2b1916a717feb5c1a016cca2b0b70d3882c4\",\n        ]];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let s = s\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let c = Polynomial::new(\n            c.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BN254PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BN254PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        let xi = xi\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xj = xj\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BN254PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let mut i = vec![];\n        let mut j = vec![];\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree2ExtensionField;\n        let (f, p) = bit_1_case::<BN254PrimeField, Degree2ExtensionField>(\n            &f, &q, &s, &y, &x, &c, &mut i, &mut j,\n        );\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n        assert_eq!(i, xi);\n        assert_eq!(j, xj);\n    }\n\n    #[test]\n    fn test_bit_1_case_2() {\n        let f = [\"0x1727a4684524eb2175d31f506b07370100418d3fcd5ad5c5586b3c2927dbffdd38a1a44b46f601ab362202e8276c007d\", \"0x57d77a9e8e6cd838edc1e63052a64d020d10ab12ab460dd755dec64232750ca866647b373738bbe4943b6aee387caa1\", \"0x42e0115d1c759474549023340d4f01ea67f2f082b59dec03aa7e22e27bccb5d4840ac815f2c12da594e423a2108737d\", \"0x54735182a914667a25226c91d61ee1f8c5c6c2e40b633da27379618cb58b0b55c0acff39fe7471a196e8bd9a0db6863\", \"0x14276d83ecbbeddabdf9bf5d9449deaf0a40d6de94e8347d983e97ed4491a3cda57fabebeb6d788023db42ceefa73d8b\", \"0xda9195159528161fa4960f25523d4d906c194a134c2695ba34577b4dcbbb76911a90cbb411db147cc5627ef50c9210d\", \"0x9552828c7dcc07d56efc554f98880b746c6ce0f7f41377d934699dcb5cf7eab408dbe027df4506c40e2424b24c6b69b\", \"0x122dcaa1ba9a8a8613064735071ae0aeab8e0333d7ff3018c9d51a652303decdf4907f6e7f232224b4fe0b20245f2fd4\", \"0x112f00e12354b1ad57581a4dde94de861275afae359c3016f8a13e81943a4a18f4896097697c449335ca5f9d21b7f654\", \"0x13bbf456483cd4566ed59718bd067589e294b4d7084073073fc77a685f0e4ae94092405afc2ecc6d437c20102b74f4ae\", \"0xeef615cd28929e56a59bf2e2e93db68f2ed629f9872a3b1aefdccb098674950b928bb5c920a2dc4d6405a69dafd98b8\", \"0xebec00852daa59ee4861f6c55f01d098689453651a335e711a11c3e6606acd9cd851f8132fb24bfa3edf65997e82785\"];\n        let q = [(\"0x19e384121b7d70927c49e6d044fd8517c36bc6ed2813a8956dd64f049869e8a77f7e46930240e6984abe26fa6a89658f\", \"0x3f4b4e761936d90fd5f55f99087138a07a69755ad4a46e4dd1c2cfe6d11371e1cc033111a0595e3bba98d0f538db451\", \"0x17a31a4fccfb5f768a2157517c77a4f8aaf0dee8f260d96e02e1175a8754d09600923beae02a019afc327b65a2fdbbfc\", \"0x88bb5832f4a4a452edda646ebaa2853a54205d56329960b44b2450070734724a74daaa401879bad142132316e9b3401\"), (\"0x1604bd06ba18d6d65bdd88e22c26eaef8a620a1a9fefe016d00eac356f9ceda8bc8eee5e46f9f4736ab22cff0e8cb9e8\", \"0x3e5755e9bfc250ff0a03efea22428a36a247504e613980918dc5319efb7f66b10d5fe2e7e86af7e014e1456aeaeac5f\", \"0x5655a99f7ff904c1e41382c25ff0360d9c51d0e331bfb1e38f5dd41c6909caaf6e313f47f727922109bf8c3204fe274\", \"0x62ec2ed9b207f63e0d9899ed11f9a125b472586b65bb77b8a04d5d446d15a8701ba5c361a07cd85e0743f5ae2e95a9f\")];\n        let s = [(\"0x24aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8\", \"0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e\", \"0xce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801\", \"0x606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be\"), (\"0x82dc9154807866eb0f36ccb665a5fc010510bd690ddd7b540e5bf3ff02d81e98b75703a3b3d3c305a70960906e6cb09\", \"0xdd18d077ad5bd58dabb18d84a6ceebe6375a83dd242851bb4dcf956002c4efb974ffceee6709deb0dcf81d4285e5e60\", \"0x4a468eb9e206b9833d8e8e2197d3446652372ce5ef50e93c91aa58105d3a281b2e84ddb61535fe1a90bae7e6692f9b0\", \"0x198fd0ab6249082bf7007d7e8be8992de81f47ae3341c590194fa3bf769a2e5a5253527727115c334e82ed4be8da6c10\")];\n        let y = [\"0x6ce420ceafa50ff15baa710e1633d7893404a18b69ef5316a81b182dadbe66bb0ef4fe49ffa578c7698795e6d4a12cb\", \"0xf45ba6de68a0f1ab26ba5fac564f3f21a75239243fae800e2a8665fd9699e2795c674834c6ce016370aee9e4a1d38d1\"];\n        let x = [\"0x7f2db8fbcf121365e92ce3d77bf5d9a3537b5422e894c09e00053ace96a5403a8db66fbe03950e93033c5874bbe8046\", \"0xb190c99770f69f3e912d3ef69f63e082a05a1e63b50eb9a5de3e07b14aed7eded07b2f2b3c42c7e365d2a47945fc285\"];\n        let c = [\"0x521ad898cee9071ebcbf44d874b1a6540a5a24a4fd9c68f45778308171f9267fab695191d4eab620cf33a8eded7fd2c\", \"0x146aa46acc68a7fa2d014f4cdce6921f2f664ffafcd262db0a43e29fba239f8e7cc55a67075e7e25f7928438cd506976\", \"0x110012a0987f151e6eacf408ccd24b9c3e637b240a4100a3ccdc16d44e3cbdf8393eb3557a64d089a1a115a3eab1a695\", \"0xa3dc13d77e6eac496424ab994c230664bbb51c4abe8135d998621a4259c788d6959e539d97a534c119cdb9a394de9ad\", \"0x6d44964cce393f36664dfb78c36a4b56c817816904d06056f68e9017165ef8db1a4f97532d5c3bbed4da9a68948c926\", \"0x1191d32d29708748f35f4fbea90258a97e7b47db6986cbc73c24ba35ad601bfadab752fd1a3e438ce0686b7777654a0c\", \"0x18776284b17c0858f647e075e04c49ded673151413b8ce9b65bf572081d748820d57d62d54e14ea09aad1c01c5c5faac\", \"0x199c96383503947d119bd6be94efdb3595eead7072f8c3d67173449f6658fadb43d715c9dc54d7f547cc1525e9a566ab\", \"0xa97b4be53ee479681acc5ebfc4fae663d5040baacca25a862aae0152d3543705d87df48c8266658d2a03e597cfec8fc\", \"0x6c86339c39859d2fac14a4550fff32535a91b9b0ff23bc04475027273d9579f491b35686ba10369195fd003747b05cf\", \"0xe608702099837e04fc2e999cbb4b845ab04d0a51ea25ee04675bf96847cb9d629da62d1e4354c04ab5208100a0129af\", \"0x737a8f64f0c81b65cf9ef035b357d0017406b0c84de6a32ed1fff164d3d9531f1d9ec53b11735a58f1d611050ed258a\"];\n        let xf = [\"0x10bbd67a2e6b8bd12ca2a8fc9ebb9d7748bb4b630bb9e8ad6ff87ec4e2647706b3fde59249168a1f3a22e43aa9131c14\", \"0x10b832788eae08063407690bf13628a4c95b6fc55a9eef6a4e4e1893305748d5ffd9fef14dbbf2265569906a0d24b1bb\", \"0x19496c56f34ced68a7cd75ca45a97406d2a99dc971e2c9ebd6ec68233a19bba472836ae01acce936e2cf8c477b127acb\", \"0x925d1d1ef9c0beba6f0a34cac08da0adfb221ad320d929c4a12e88d4c855c6e93e88d2422cc017e588ebe02c9d8944d\", \"0x63551db5a468540a882a52a9fc100a34798496f25a17711a0f7fe84c2f3b0c22ea84f0e3de8b6df17b043f047eb3d95\", \"0x1452bf2c3fe715937d83b5c57df5b7b9df88e4cf55e829b75743d3be8818de60a9a1a5156acb9303682c1c8ca5fac965\", \"0x159fe260119fbb98baf253f4e0f865fe70bcd3a215ac2d2e10d9eea83bb012f8e01a28ebe1e1ab9e46108a3da2287de\", \"0x2cf0869f40402c8b16429547884c156e8281d85d5a0ee4e6fa097bc9669f5a4c6e33dbebe7a9434b3beb015897656bd\", \"0xd2c631a38ce47d9e8f0ee1fc2ccd8f589dd387f86500444d3dded1b3595c3ce4312a36a95cdf327419c78b6710a6c8c\", \"0xcaa4d999eec4b8f23cb8406c8fb3405378036f4c5867363b504394fbc5fc5b04e7a846507e6f24ade84350245ac9e72\", \"0xdca015d5a2e52becd816f7a434f9cece5b000d281057b64de60f93bdf429d379caaf598e7e990c95a109a8caa63a02b\", \"0x6995ffd83bb53d7b9787c81663ec0365e65c06194887eb1591ab99d664c7bb9537bd1bd1b9bf5b1707249c394b385b4\"];\n        let xp = [(\"0x152110e866f1a6e8c5348f6e005dbd93de671b7d0fbfa04d6614bcdd27a3cb2a70f0deacb3608ba95226268481a0be7c\", \"0xbf78a97086750eb166986ed8e428ca1d23ae3bbf8b2ee67451d7dd84445311e8bc8ab558b0bc008199f577195fc39b7\", \"0x845be51ad0d708657bfb0da8eec64cd7779c50d90b59a3ac6a2045cad0561d654af9a84dd105cea5409d2adf286b561\", \"0xa298f69fd652551e12219252baacab101768fc6651309450e49c7d3bb52b7547f218d12de64961aa7f059025b8e0cb5\"), (\"0xbfa363ea499e05a429d9af2a73ba635e0ff3825edddacfab8afc6b9188700c835282a2c4c7effe70dc61c557b8d90e1\", \"0x5c3fefe5849b36814f32ce71dee6eba467b220e1b53f01421b9ec6d23209f6206e864539ddaa327b085ad8d78a8589b\", \"0x17b304f1c4f58afee1ecd75f1570b13da2ee02dfc5731f82ac55d5b6d011ce70ae42061b3d205cbe49efdfcd8d2c04b4\", \"0x101d88f38de6be9d7eb2c074905585f487715b3e6d8179a066ba56988207caa28f7a5f1ba2f7abd01e200ac71d198282\")];\n        let xi = [[\"0xfa0a76861031f74c3397565d1db68d2963758855de5ff1cffb69bf13a0ea4371279ac1efa65710c7f4a97919a78ff59\", \"0x510accb9026da5f06a82195a8b978613fda96cf96aed978cca28a204a199cedc7d167de9ed320732d244e33e99e023\", \"0x15c6dd3afd26f1e0be2ddbb1b37dbc396c0d3cf212cf9f913d234eff2e573adf0c3801e3e2b0000295bed5df8256241d\", \"0xe4b5650a1764134020a30d8b7db861be3d99eabc16f3be0c3ccd04aedd3396d12f676011cc534280d11de2c32174054\", \"0x92b6ac1f5ee0d203bb67f480484b3bc8e1ae220dd231a7e8551aa0f1870337992bbe9468d227d075a169fac1df2c8cd\", \"0xa2f8871f36609c163c8f4fdc40e2a9e929064409ecf1f5f97663ddab6050fe1d57588d8b03f2a4fbec819cecb39deb3\", \"0x174392a02f5845ab761133e81929786093fd6dde47f00acabcabaa7df89d108873e342125536e31efb1bdddd7093573f\", \"0x19b7370d6e64482d5a63c2e296b9d58c27367b340d071f0b83753b977eec6d95847ab64f51e8b2b2b86a21700fc1036a\", \"0x16aafd26dece43d80d70cdcb43e12f92b10667ba3c079f4714bb254dc4a87dea3329e95692ebb10341473208df09ace0\", \"0x100e7e1d58af9be477931364d058b55599df02466821b9b708aa273e764a0a70bc05a73457f377972563f1bcb81f11d5\", \"0x170d56bd6ad6c4de225b80b20ccedbdb8e8df8a04779caa0e1556af352cc3ecd056532fae73625550ca6b183fcf0a096\", \"0xece7f85c875c8e55edec040d13de2bdaa6d2857da5d6a015778afa6331abd58894791f3c3518c9f45ba74c620b46d41\", \"0x1607bb82f6dd503070001a627a4af4c14804ba89eebaf68263f9bd809f9e0c8a864dc9830ae4cdf08fcc98ca8b40946b\", \"0xc5768744b07f71ca9929c2eb4d1c6e7ef588be129d03e364b9a6de5363e625c35120c6457e55c9869ac77c4e68ec86\", \"0xaf6c9e178fb5b59b567c04cdd4aa040aab8de72fe49c1446bf5199cd13161196a9b6d91fc8ae08fe1bf7d3298713131\", \"0x124afd78e247a139b8cb3bb39508823c22f7e82b5c7efebe5dbb5362fd9518cc0f978862a5a6b9fa8b69845e104c6d02\", \"0x5d6e665e77ca1f94e0e0d1167ab09c74e1968c6c237e04da4e30581076651295154a4a5e87f457561b6d5018e45ce0\", \"0x10f8bc2e981e2fb9c2d3523c3133480686050d777200627b7b4618d52460a7c5e77052ebe7840f526ec51d5936e353e4\", \"0x10fd3968a035eb5802605b0a1a74fad870dc523e869a8a387f0c54254a837be577e145bb93f66ea2c68eda44071f2cfe\", \"0xf5f7384635978f87c75314add179a7da2ac4f123d1ddb75c53595c04078a212534b0a21504085f4df62156608d80212\", \"0x8341b253d9c0094bf3d43fdb03c965eda9e5aa299cf380e3dcf9029d38e858d3a7295bff01cb5715e8e33baa9b6977f\", \"0x165960db1dfc8f1762170585bd7070d53f454c1f6a9ca49e3d45d8496a5ead89adbebd3c0aa9ea01394b672c4aa894ea\", \"0x131c0b3cd87830c0b91ea8df14129a2cddff268498079d99e38d2be315ac4fdbcff0f825e13ba9e4a9432d4b60167f2b\", \"0x2f9b19cd56d9d4ca715391183b5f6e03d281b33be0c460dfabb5e0dd022bc55693304f1cc256b54eb812efd68a36d37\", \"0x14c0070279d9be555722b667e01e5f500d8eadbba9f5e7cdb91d46924827f5268656e8866e285c2fb4c1e51bb61a0177\", \"0xcb3a116c5f6723d33a71594caa68ec1c8b6c5f5dfe1b9f0a41d9a60242cdb2df01904a42c125d77f7bdb03b900abe5b\", \"0x18d59a51db9f1248df991f56a7d48b8e6ea57f000d4c84b0d72a74ee646c2d8925e6196f2a77660e4a77608bddc25f9\", \"0x19af59a0c7b6682c578e96b27ca0f1b9e253245d818e0c1edecddd98bc6f97d027b28f31dd23c32125316145dca9de58\", \"0x153c39704769fc40669f0a815152cb1551adbd773c24127acfeda50a2c9c12771b77af68528b524ef497a42076d31c87\", \"0xe2d3b3118f05cb799343c422605fb005e2e739eceaf0cfd73b770bc5d5deb4edfcac88256e8acfa2647a337312e6e65\", \"0x1a0100e060db5cdfcd5066fe802535e18f96907085a2952bf7a6e0dc14be04f669df6608c60262347bfa0f198a5ce318\", \"0xce0cebc0ca92c4c756a3d5b1d1ec42da974ff6e0e2d0c7171c3aaea7ffa0757c0fedb1761d9c4d8d9b289069dd41250\", \"0x160d326dedc18b7005ca481307404f7f274d900494d7e3fe5b15bec1cb78f3e4a79b19745e6323506dd9f231ae866779\", \"0x1af4ed07df74414ca87f776e4dd643c8bd7349cbc1e6c2de84a20743369bbb016a5993f0e66568235d44f58d9cbc38b\", \"0x8d0a11ab066bfc13b257f2b9b860457a3b944f78951b2f7cf3887e22bf75516749ccc5d4f91c14ffefb1cbd92409b1d\", \"0x23d98a00873b026887cf7eb45508774de78d2412c09f564e43093f04699ad31d05bc73d28126b35f23596da726b644\", \"0x14207774abb793f1d52aa7c8ac936076506a86a651134cb8ba65d95740b2f8a3ae1afe5ebe0e886326111ce837d6effc\", \"0xb33f8a80d98e787229da96e781febf5660519e6b448c2239665b43ca641e9c68bee7f63a1807b15d7d271945312c3c1\", \"0x1428ec16f781182ad72b3bf06f6218cd798f16b662c2393581b47b697b8af05a28c5da63394c737343ecb50c9d27438b\", \"0x17532398aac71a6c4741eee86041daa073963428b809a020bb2b83b43242f0ed2c169504a1f3007389361a1d5d78774e\", \"0x44224d63e381d69226405fdbafedfdd5da9456f6c4e155f82570869b69aba03a38400086f0eb8432f2d1d216b69bdd1\", \"0x21e0297c72148c86aa36a059f19b04c75c95e8c7344026cea29241eff3bece2d7e44645183d2b081bc846ba0cf97e16\", \"0x503b980fe1358a7f87af5c7eb65b389a0188da60c45be6a540bacb5b66075c991276fa6383d987e5f94ee897417a0f5\", \"0xc9035d2db00a9ae5f26b4adc44f00d813bb51f8726987918aa26d0eafab97c243e43cf15ab4fcb3ec97b8fca39ddb07\", \"0x1688460ce66c019b531545c1dab18ade5626fe61eac71df48814c0f5921d48deaab89097cb728efb319b71d29cfc8cbe\", \"0xb74bc33f01fbf84ebb3d80025cc8b60a2c00cb34b70ffa2903f38c7648c3c5173cae4df4d36646947688488dc6423fd\", \"0xb0fdff8ae056ea274693d443ed2b2abec5cbd272f090cba71b45adeda28670bb64b26968c1dea90077a422656379b4c\", \"0x1da52b1ef7183381d3f1557bf9cb515b38124b3f3247400248735e18ebae90b0dfe82b3ab03e48b9f61d5bdfa0885ee\", \"0x1062e0ee97214d084babe14f0717c2e37f30332e837499400ac3afe77017dff007f0b72ed14a05c96e435a3ef2764d11\", \"0x16d97325a47795dd4153640facfdf98323eebd53fe8cb69190d6fea3a2790f8ad0e608966bfeb4baf4c415a5f62d654\", \"0x70e8df7511e1f3476b3fe23002d2c68e9a436310c1e0d4cc099aa5909358e6bb1bbf8e1e10c2917053795568c5c3f67\", \"0x2e7db1c975008709135824f015babb80e570cdadd85ef1314f376d102036ce3774efc376c0cfdc73201659d99037ba9\", \"0x1341d5d6806f9bb5bb82898a095128304b1715d59315e7733d82f7fe91c7906d87b76d4fd03825e24eea1ea2e60ce145\", \"0xdcec9030cb633c339a6db2ed9639197e426e4768c74ece2ac97d78a778ebd7955f47161e041812a516257489e1a357f\"]];\n        let xj = [[\"0x10bbd67a2e6b8bd12ca2a8fc9ebb9d7748bb4b630bb9e8ad6ff87ec4e2647706b3fde59249168a1f3a22e43aa9131c14\", \"0x10b832788eae08063407690bf13628a4c95b6fc55a9eef6a4e4e1893305748d5ffd9fef14dbbf2265569906a0d24b1bb\", \"0x19496c56f34ced68a7cd75ca45a97406d2a99dc971e2c9ebd6ec68233a19bba472836ae01acce936e2cf8c477b127acb\", \"0x925d1d1ef9c0beba6f0a34cac08da0adfb221ad320d929c4a12e88d4c855c6e93e88d2422cc017e588ebe02c9d8944d\", \"0x63551db5a468540a882a52a9fc100a34798496f25a17711a0f7fe84c2f3b0c22ea84f0e3de8b6df17b043f047eb3d95\", \"0x1452bf2c3fe715937d83b5c57df5b7b9df88e4cf55e829b75743d3be8818de60a9a1a5156acb9303682c1c8ca5fac965\", \"0x159fe260119fbb98baf253f4e0f865fe70bcd3a215ac2d2e10d9eea83bb012f8e01a28ebe1e1ab9e46108a3da2287de\", \"0x2cf0869f40402c8b16429547884c156e8281d85d5a0ee4e6fa097bc9669f5a4c6e33dbebe7a9434b3beb015897656bd\", \"0xd2c631a38ce47d9e8f0ee1fc2ccd8f589dd387f86500444d3dded1b3595c3ce4312a36a95cdf327419c78b6710a6c8c\", \"0xcaa4d999eec4b8f23cb8406c8fb3405378036f4c5867363b504394fbc5fc5b04e7a846507e6f24ade84350245ac9e72\", \"0xdca015d5a2e52becd816f7a434f9cece5b000d281057b64de60f93bdf429d379caaf598e7e990c95a109a8caa63a02b\", \"0x6995ffd83bb53d7b9787c81663ec0365e65c06194887eb1591ab99d664c7bb9537bd1bd1b9bf5b1707249c394b385b4\"]];\n        let f = Polynomial::new(\n            f.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let q = q\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let s = s\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                G2Point::new(\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n                .unwrap()\n            })\n            .collect::<Vec<_>>();\n        let y = y\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let x = x\n            .into_iter()\n            .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n            .collect::<Vec<_>>();\n        let c = Polynomial::new(\n            c.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xf = Polynomial::new(\n            xf.into_iter()\n                .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                .collect::<Vec<_>>(),\n        );\n        let xp = xp\n            .into_iter()\n            .map(|(x1, y1, x2, y2)| {\n                (\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x1).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y1).unwrap(),\n                    ],\n                    [\n                        FieldElement::<BLS12381PrimeField>::from_hex(x2).unwrap(),\n                        FieldElement::<BLS12381PrimeField>::from_hex(y2).unwrap(),\n                    ],\n                )\n            })\n            .collect::<Vec<_>>();\n        let xi = xi\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let xj = xj\n            .into_iter()\n            .map(|v| {\n                Polynomial::new(\n                    v.into_iter()\n                        .map(|v| FieldElement::<BLS12381PrimeField>::from_hex(v).unwrap())\n                        .collect::<Vec<_>>(),\n                )\n            })\n            .collect::<Vec<_>>();\n        let mut i = vec![];\n        let mut j = vec![];\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree2ExtensionField;\n        let (f, p) = bit_1_case::<BLS12381PrimeField, Degree2ExtensionField>(\n            &f, &q, &s, &y, &x, &c, &mut i, &mut j,\n        );\n        let p = p\n            .into_iter()\n            .map(|g| (from_e2(g.x), from_e2(g.y)))\n            .collect::<Vec<_>>();\n        assert_eq!(f, xf);\n        assert_eq!(p, xp);\n        assert_eq!(i, xi);\n        assert_eq!(j, xj);\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/poseidon_transcript.rs",
    "content": "use crate::definitions::{FieldElement, Stark252PrimeField};\nuse crate::io::{biguint_split, element_from_u128, field_element_to_u384_limbs};\nuse lambdaworks_crypto::hash::poseidon::{starknet::PoseidonCairoStark252, Poseidon};\nuse lambdaworks_math::{field::traits::IsPrimeField, traits::ByteConversion};\nuse num_bigint::BigUint;\n\nconst BASE_96_FELT252: FieldElement<Stark252PrimeField> =\n    FieldElement::from_hex_unchecked(\"0x1000000000000000000000000\");\n\npub struct CairoPoseidonTranscript {\n    pub init_hash: FieldElement<Stark252PrimeField>,\n    pub state: [FieldElement<Stark252PrimeField>; 3],\n}\n\nfn biguint_split_1_128(x: &BigUint) -> [FieldElement<Stark252PrimeField>; 1] {\n    let limbs = biguint_split::<1, 128>(x);\n    [element_from_u128(limbs[0])]\n}\n\nfn biguint_split_2_128(x: &BigUint) -> [FieldElement<Stark252PrimeField>; 2] {\n    let limbs = biguint_split::<2, 128>(x);\n    [element_from_u128(limbs[0]), element_from_u128(limbs[1])]\n}\n\nimpl CairoPoseidonTranscript {\n    pub fn new(init_hash: FieldElement<Stark252PrimeField>) -> Self {\n        let mut state = [FieldElement::zero(), FieldElement::zero(), init_hash];\n        PoseidonCairoStark252::hades_permutation(&mut state);\n        Self { init_hash, state }\n    }\n\n    pub fn continuable_hash(&self) -> FieldElement<Stark252PrimeField> {\n        self.state[0]\n    }\n\n    pub fn rlc_coeff(&mut self) -> FieldElement<Stark252PrimeField> {\n        self.state[1]\n    }\n\n    pub fn update_sponge_state(\n        &mut self,\n        x: FieldElement<Stark252PrimeField>,\n        y: FieldElement<Stark252PrimeField>,\n    ) {\n        self.state[0] += x;\n        self.state[1] += y;\n        PoseidonCairoStark252::hades_permutation(&mut self.state);\n    }\n\n    fn hash_u384_limbs(&mut self, limbs: [u128; 4]) {\n        // Private function.\n        // Should be called from hash_emulated_field_element to guarantee the limbs fits in u96\n        let elems: [FieldElement<Stark252PrimeField>; 4] = [\n            element_from_u128(limbs[0]),\n            element_from_u128(limbs[1]),\n            element_from_u128(limbs[2]),\n            element_from_u128(limbs[3]),\n        ];\n        self.state[0] += elems[0] + BASE_96_FELT252 * elems[1];\n        self.state[1] += elems[2] + BASE_96_FELT252 * elems[3];\n        PoseidonCairoStark252::hades_permutation(&mut self.state)\n    }\n\n    pub fn hash_emulated_field_element<F>(&mut self, element: &FieldElement<F>)\n    where\n        F: IsPrimeField,\n        FieldElement<F>: ByteConversion,\n    {\n        let limbs = field_element_to_u384_limbs(element);\n        self.hash_u384_limbs(limbs);\n    }\n    pub fn hash_emulated_field_elements<F>(\n        &mut self,\n        xs: &[FieldElement<F>],\n        sparsity: Option<&[bool]>,\n        three_limbs_only: bool,\n    ) where\n        F: IsPrimeField,\n        FieldElement<F>: ByteConversion,\n    {\n        let mut xs_filtered: Vec<FieldElement<F>> = vec![];\n\n        if let Some(sparsity) = sparsity {\n            assert_eq!(xs.len(), sparsity.len());\n            for i in 0..xs.len() {\n                if sparsity[i] {\n                    xs_filtered.push(xs[i].clone());\n                }\n            }\n        } else {\n            xs_filtered = xs.to_vec();\n        }\n\n        if three_limbs_only {\n            let (n_quadruples, rest) = (xs_filtered.len() / 4, xs_filtered.len() % 4);\n            for i in 0..n_quadruples {\n                self.hash_quadruple_u288(&xs_filtered[i * 4..(i + 1) * 4]);\n            }\n            for i in 0..rest {\n                self.hash_emulated_field_element(&xs_filtered[n_quadruples * 4 + i]);\n            }\n        } else {\n            for x in xs_filtered {\n                self.hash_emulated_field_element(&x);\n            }\n        }\n    }\n\n    pub fn hash_quadruple_u288<F>(&mut self, xs: &[FieldElement<F>])\n    where\n        F: IsPrimeField,\n        FieldElement<F>: ByteConversion,\n    {\n        assert_eq!(\n            xs.len(),\n            4,\n            \"hash_quadruple_u288 requires exactly 4 elements\"\n        );\n\n        // Split each element into 3 limbs of 96 bits and convert to FieldElements\n        let mut elems: Vec<[FieldElement<Stark252PrimeField>; 3]> = Vec::with_capacity(4);\n        for x in xs {\n            let x_bytes = x.to_bytes_be();\n            let x_biguint = BigUint::from_bytes_be(&x_bytes);\n            let x_limbs = biguint_split::<3, 96>(&x_biguint);\n            elems.push([\n                element_from_u128::<Stark252PrimeField>(x_limbs[0]),\n                element_from_u128::<Stark252PrimeField>(x_limbs[1]),\n                element_from_u128::<Stark252PrimeField>(x_limbs[2]),\n            ]);\n        }\n\n        // First permutation: s0 + x[0][0] + BASE*x[0][1], s1 + x[0][2] + BASE*x[1][0], s2\n        self.state[0] += elems[0][0] + BASE_96_FELT252 * elems[0][1];\n        self.state[1] += elems[0][2] + BASE_96_FELT252 * elems[1][0];\n        PoseidonCairoStark252::hades_permutation(&mut self.state);\n\n        // Second permutation: s0 + x[1][1] + BASE*x[1][2], s1 + x[2][0] + BASE*x[2][1], s2\n        self.state[0] += elems[1][1] + BASE_96_FELT252 * elems[1][2];\n        self.state[1] += elems[2][0] + BASE_96_FELT252 * elems[2][1];\n        PoseidonCairoStark252::hades_permutation(&mut self.state);\n\n        // Third permutation: s0 + x[2][2] + BASE*x[3][0], s1 + x[3][1] + BASE*x[3][2], s2\n        self.state[0] += elems[2][2] + BASE_96_FELT252 * elems[3][0];\n        self.state[1] += elems[3][1] + BASE_96_FELT252 * elems[3][2];\n        PoseidonCairoStark252::hades_permutation(&mut self.state);\n    }\n\n    pub fn hash_u128(&mut self, x: &BigUint) -> FieldElement<Stark252PrimeField> {\n        let elems = biguint_split_1_128(x);\n        self.state[0] += elems[0];\n        PoseidonCairoStark252::hades_permutation(&mut self.state);\n        self.state[0]\n    }\n\n    pub fn hash_u256(&mut self, x: &BigUint) -> FieldElement<Stark252PrimeField> {\n        let elems = biguint_split_2_128(x);\n        self.state[0] += elems[0];\n        self.state[1] += elems[1];\n        PoseidonCairoStark252::hades_permutation(&mut self.state);\n        self.state[0]\n    }\n\n    pub fn hash_u128_multi(&mut self, xs: &[BigUint]) -> FieldElement<Stark252PrimeField> {\n        for x in xs {\n            self.hash_u128(x);\n        }\n        self.state[0]\n    }\n\n    pub fn hash_u256_multi(&mut self, xs: &[BigUint]) -> FieldElement<Stark252PrimeField> {\n        for x in xs {\n            self.hash_u256(x);\n        }\n        self.state[0]\n    }\n\n    // fn hash_biguint(\n    //     &mut self,\n    //     x: &BigUint,\n    // ) -> (\n    //     FieldElement<Stark252PrimeField>,\n    //     FieldElement<Stark252PrimeField>,\n    // ) {\n    //     let elems = biguint_split_4_96(x);\n    //     self.state[0] += elems[0] + BASE_96_FELT252 * elems[1];\n    //     self.state[1] += elems[2] + BASE_96_FELT252 * elems[3];\n    //     PoseidonCairoStark252::hades_permutation(&mut self.state);\n    //     (self.state[0], self.state[1])\n    // }\n    // // TODO unused, should remove?\n    // pub fn hash_biguint_limbs_multi(&mut self, xs: &[BigUint], sparsity: Option<&[bool]>) {\n    //     if let Some(sparsity) = sparsity {\n    //         assert_eq!(xs.len(), sparsity.len());\n    //         for i in 0..xs.len() {\n    //             if sparsity[i] {\n    //                 self.hash_biguint(&xs[i]);\n    //             }\n    //         }\n    //     } else {\n    //         for x in xs {\n    //             self.hash_biguint(x);\n    //         }\n    //     }\n    // }\n}\n\n#[cfg(test)]\nmod tests {\n\n    use super::CairoPoseidonTranscript;\n    use crate::definitions::FieldElement;\n    use num_bigint::BigUint;\n\n    #[test]\n    fn test_hash_u256() {\n        let values = vec![\n            \"11104976625974322414992515260237855724255768622271447502939221706321239646163926750529079402619769361141474851372384\",\n            \"3967829709048026487667605767879663147330695847448860299062651717898165991149219471605164102628080243401554871141161\",\n            \"20542379293379792421624641272746453190479316725484729966518436208854994615297484525229284199372356175508316843532962\",\n            \"17650899844399818850216658397857397433150932740144581357248968616099085471799047373874018729030516138169880851496140\",\n            \"23153291335322918391032655582853912472568833796263669034103198103796686482485894027826714525281391374850320336394313\",\n            \"32367456268301553665798368340615053510284603246272143427825701218738172825017097170094900631328955480180538273877253\",\n        ];\n        let values = values\n            .iter()\n            .map(|s| BigUint::parse_bytes(s.as_bytes(), 10).unwrap())\n            .collect::<Vec<BigUint>>();\n        let mut transcript = CairoPoseidonTranscript::new(FieldElement::one());\n        for value in values {\n            transcript.hash_u256(&(value % (BigUint::from(1usize) << 256)));\n        }\n        let expected_res: lambdaworks_math::field::element::FieldElement<lambdaworks_math::field::fields::montgomery_backed_prime_fields::MontgomeryBackendPrimeField<lambdaworks_math::field::fields::fft_friendly::stark_252_prime_field::MontgomeryConfigStark252PrimeField, 4>> = transcript.continuable_hash();\n        assert_eq!(\n            expected_res,\n            FieldElement::from_hex(\n                \"2a4b9382c92e77909659d0406c152da22c176cc4d7109e3fc32aff80da50bf9\"\n            )\n            .unwrap()\n        );\n    }\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/drand_calldata.rs",
    "content": "use super::*;\n\n#[pyfunction]\npub fn drand_calldata_builder(py: Python, py_list1: &Bound<'_, PyList>) -> PyResult<Py<PyAny>> {\n    let values1 = py_list1\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n    let result = crate::calldata::drand_calldata::drand_calldata_builder(&values1)\n        .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n\n#[pyfunction]\npub fn drand_tlock_encrypt_calldata_builder(\n    py: Python,\n    py_list1: &Bound<'_, PyList>,\n) -> PyResult<Py<PyAny>> {\n    let values1 = py_list1\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n    let result =\n        crate::calldata::drand_tlock_calldata::drand_tlock_encrypt_calldata_builder(&values1)\n            .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/ecip.rs",
    "content": "use super::*;\nuse crate::ecip;\n#[pyfunction]\npub fn zk_ecip_hint(\n    py: Python,\n    flattened_g1_points_list: &Bound<'_, PyList>,\n    scalars_list: &Bound<'_, PyList>,\n    curve_id: usize,\n) -> PyResult<Py<PyAny>> {\n    let list_values = flattened_g1_points_list\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n\n    let list_scalars = scalars_list\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n\n    let v = ecip::core::zk_ecip_hint(list_values, list_scalars, curve_id)\n        .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    let inner_lists: Vec<_> = v\n        .into_iter()\n        .map(|x| PyList::new(py, x))\n        .collect::<PyResult<_>>()?;\n    let py_list = PyList::new(py, inner_lists)?;\n    Ok(py_list.into())\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/extf_mul.rs",
    "content": "use crate::algebra::extf_mul;\nuse crate::algebra::polynomial::Polynomial;\nuse crate::definitions::{CurveID, CurveParamsProvider};\nuse crate::io::field_elements_from_big_uints;\n\nuse super::*;\n\n#[pyfunction]\npub fn nondeterministic_extension_field_mul_divmod(\n    py: Python,\n    curve_id: usize,\n    ext_degree: usize,\n    py_list: &Bound<'_, PyList>,\n) -> PyResult<Py<PyAny>> {\n    let list_coeffs = py_list\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<Vec<BigUint>>, _>>()?;\n    let curve_id = CurveID::try_from(curve_id).unwrap();\n    match curve_id {\n        CurveID::BN254 => {\n            handle_extension_field_mul_divmod::<BN254PrimeField>(py, ext_degree, list_coeffs)\n        }\n        CurveID::BLS12_381 => {\n            handle_extension_field_mul_divmod::<BLS12381PrimeField>(py, ext_degree, list_coeffs)\n        }\n        _ => panic!(\"Curve ID {} not supported\", curve_id as usize),\n    }\n}\n\nfn handle_extension_field_mul_divmod<F>(\n    py: Python,\n    ext_degree: usize,\n    list_coeffs: Vec<Vec<BigUint>>,\n) -> PyResult<Py<PyAny>>\nwhere\n    F: IsPrimeField + CurveParamsProvider<F>,\n    FieldElement<F>: ByteConversion,\n{\n    let mut ps = Vec::new();\n    for coeffs in list_coeffs {\n        let coeffs = field_elements_from_big_uints::<F>(&coeffs);\n        ps.push(Polynomial::new(coeffs));\n    }\n    let (z_polyq, z_polyr) = extf_mul::nondeterministic_extension_field_mul_divmod(ext_degree, ps);\n    let q = z_polyq\n        .coefficients\n        .into_iter()\n        .map(|x| BigUint::from_bytes_be(&x.to_bytes_be()))\n        .collect::<Vec<BigUint>>();\n    let r = z_polyr\n        .coefficients\n        .into_iter()\n        .map(|x| BigUint::from_bytes_be(&x.to_bytes_be()))\n        .collect::<Vec<BigUint>>();\n    let q_list = PyList::new(py, q)?;\n    let r_list = PyList::new(py, r)?;\n    let py_tuple = PyTuple::new(py, [q_list, r_list])?;\n    Ok(py_tuple.into())\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/final_exp_witness.rs",
    "content": "use super::*;\n\n#[pyfunction]\npub fn get_final_exp_witness(\n    py: Python,\n    curve_id: usize,\n    py_list: &Bound<'_, PyList>,\n) -> PyResult<Py<PyAny>> {\n    let f_0: BigUint = py_list.get_item(0)?.extract()?;\n    let f_1: BigUint = py_list.get_item(1)?.extract()?;\n    let f_2: BigUint = py_list.get_item(2)?.extract()?;\n    let f_3: BigUint = py_list.get_item(3)?.extract()?;\n    let f_4: BigUint = py_list.get_item(4)?.extract()?;\n    let f_5: BigUint = py_list.get_item(5)?.extract()?;\n    let f_6: BigUint = py_list.get_item(6)?.extract()?;\n    let f_7: BigUint = py_list.get_item(7)?.extract()?;\n    let f_8: BigUint = py_list.get_item(8)?.extract()?;\n    let f_9: BigUint = py_list.get_item(9)?.extract()?;\n    let f_10: BigUint = py_list.get_item(10)?.extract()?;\n    let f_11: BigUint = py_list.get_item(11)?.extract()?;\n    let f = [f_0, f_1, f_2, f_3, f_4, f_5, f_6, f_7, f_8, f_9, f_10, f_11];\n    let (c, wi) = crate::pairing::final_exp_witness::get_final_exp_witness(curve_id, f);\n    let c_list = PyList::new(py, c)?;\n    let wi_list = PyList::new(py, wi)?;\n    let py_tuple = PyTuple::new(py, [c_list, wi_list])?;\n    Ok(Py::from(py_tuple))\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/g2.rs",
    "content": "use super::*;\nuse crate::io::{biguint_to_u256, element_from_biguint};\nuse lambdaworks_math::cyclic_group::IsGroup;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::point::ShortWeierstrassProjectivePoint;\nuse lambdaworks_math::elliptic_curve::traits::FromAffine;\n#[pyfunction]\npub fn g2_add(\n    py: Python,\n    curve_id: usize,\n    py_tuple_1: &Bound<'_, PyTuple>,\n    py_tuple_2: &Bound<'_, PyTuple>,\n) -> PyResult<Py<PyAny>> {\n    let a_0: BigUint = py_tuple_1.get_item(0)?.extract()?;\n    let a_1: BigUint = py_tuple_1.get_item(1)?.extract()?;\n    let a_2: BigUint = py_tuple_1.get_item(2)?.extract()?;\n    let a_3: BigUint = py_tuple_1.get_item(3)?.extract()?;\n    let b_0: BigUint = py_tuple_2.get_item(0)?.extract()?;\n    let b_1: BigUint = py_tuple_2.get_item(1)?.extract()?;\n    let b_2: BigUint = py_tuple_2.get_item(2)?.extract()?;\n    let b_3: BigUint = py_tuple_2.get_item(3)?.extract()?;\n\n    if curve_id == CURVE_BN254 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::BN254PrimeField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::twist::BN254TwistCurve;\n        let a = ShortWeierstrassProjectivePoint::<BN254TwistCurve>::from_affine(\n            FieldElement::new([\n                element_from_biguint::<BN254PrimeField>(&a_0),\n                element_from_biguint::<BN254PrimeField>(&a_1),\n            ]),\n            FieldElement::new([\n                element_from_biguint::<BN254PrimeField>(&a_2),\n                element_from_biguint::<BN254PrimeField>(&a_3),\n            ]),\n        )\n        .unwrap();\n        let b = ShortWeierstrassProjectivePoint::<BN254TwistCurve>::from_affine(\n            FieldElement::new([\n                element_from_biguint::<BN254PrimeField>(&b_0),\n                element_from_biguint::<BN254PrimeField>(&b_1),\n            ]),\n            FieldElement::new([\n                element_from_biguint::<BN254PrimeField>(&b_2),\n                element_from_biguint::<BN254PrimeField>(&b_3),\n            ]),\n        )\n        .unwrap();\n        let c = a.operate_with(&b);\n        let c_affine = c.to_affine();\n        let [[x0, x1], [y0, y1]] = match c_affine.z() == &FieldElement::zero() {\n            true => [\n                &[FieldElement::zero(), FieldElement::zero()],\n                &[FieldElement::zero(), FieldElement::zero()],\n            ],\n            false => [c_affine.x().value(), c_affine.y().value()],\n        };\n        let py_tuple = PyTuple::new(\n            py,\n            [\n                element_to_biguint::<BN254PrimeField>(x0),\n                element_to_biguint::<BN254PrimeField>(x1),\n                element_to_biguint::<BN254PrimeField>(y0),\n                element_to_biguint::<BN254PrimeField>(y1),\n            ],\n        );\n        return Ok(py_tuple?.into());\n    }\n\n    if curve_id == CURVE_BLS12_381 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::twist::BLS12381TwistCurve;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::BLS12381PrimeField;\n        let a = ShortWeierstrassProjectivePoint::<BLS12381TwistCurve>::from_affine(\n            FieldElement::new([\n                element_from_biguint::<BLS12381PrimeField>(&a_0),\n                element_from_biguint::<BLS12381PrimeField>(&a_1),\n            ]),\n            FieldElement::new([\n                element_from_biguint::<BLS12381PrimeField>(&a_2),\n                element_from_biguint::<BLS12381PrimeField>(&a_3),\n            ]),\n        )\n        .unwrap();\n        let b = ShortWeierstrassProjectivePoint::<BLS12381TwistCurve>::from_affine(\n            FieldElement::new([\n                element_from_biguint::<BLS12381PrimeField>(&b_0),\n                element_from_biguint::<BLS12381PrimeField>(&b_1),\n            ]),\n            FieldElement::new([\n                element_from_biguint::<BLS12381PrimeField>(&b_2),\n                element_from_biguint::<BLS12381PrimeField>(&b_3),\n            ]),\n        )\n        .unwrap();\n        let c = a.operate_with(&b);\n        let c_affine = c.to_affine();\n        let [[x0, x1], [y0, y1]] = match c_affine.z() == &FieldElement::zero() {\n            true => [\n                &[FieldElement::zero(), FieldElement::zero()],\n                &[FieldElement::zero(), FieldElement::zero()],\n            ],\n            false => [c_affine.x().value(), c_affine.y().value()],\n        };\n\n        let py_tuple = PyTuple::new(\n            py,\n            [\n                element_to_biguint::<BLS12381PrimeField>(x0),\n                element_to_biguint::<BLS12381PrimeField>(x1),\n                element_to_biguint::<BLS12381PrimeField>(y0),\n                element_to_biguint::<BLS12381PrimeField>(y1),\n            ],\n        );\n        return Ok(py_tuple?.into());\n    }\n\n    panic!(\"Curve ID {} not supported\", curve_id);\n}\n\n#[pyfunction]\npub fn g2_scalar_mul(\n    py: Python,\n    curve_id: usize,\n    py_tuple_1: &Bound<'_, PyTuple>,\n    py_int_2: &Bound<'_, PyInt>,\n) -> PyResult<Py<PyAny>> {\n    let a_0: BigUint = py_tuple_1.get_item(0)?.extract()?;\n    let a_1: BigUint = py_tuple_1.get_item(1)?.extract()?;\n    let a_2: BigUint = py_tuple_1.get_item(2)?.extract()?;\n    let a_3: BigUint = py_tuple_1.get_item(3)?.extract()?;\n    let k: BigUint = py_int_2.extract()?;\n\n    if curve_id == CURVE_BN254 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::BN254PrimeField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::twist::BN254TwistCurve;\n        let a = ShortWeierstrassProjectivePoint::<BN254TwistCurve>::from_affine(\n            FieldElement::new([\n                element_from_biguint::<BN254PrimeField>(&a_0),\n                element_from_biguint::<BN254PrimeField>(&a_1),\n            ]),\n            FieldElement::new([\n                element_from_biguint::<BN254PrimeField>(&a_2),\n                element_from_biguint::<BN254PrimeField>(&a_3),\n            ]),\n        )\n        .unwrap();\n\n        let c = a.operate_with_self(biguint_to_u256(&k));\n        let c_affine = c.to_affine();\n        let [[x0, x1], [y0, y1]] = match c_affine.z() == &FieldElement::zero() {\n            true => [\n                &[FieldElement::zero(), FieldElement::zero()],\n                &[FieldElement::zero(), FieldElement::zero()],\n            ],\n            false => [c_affine.x().value(), c_affine.y().value()],\n        };\n        let py_tuple = PyTuple::new(\n            py,\n            [\n                element_to_biguint::<BN254PrimeField>(x0),\n                element_to_biguint::<BN254PrimeField>(x1),\n                element_to_biguint::<BN254PrimeField>(y0),\n                element_to_biguint::<BN254PrimeField>(y1),\n            ],\n        );\n        return Ok(py_tuple?.into());\n    }\n\n    if curve_id == CURVE_BLS12_381 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::BLS12381PrimeField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::twist::BLS12381TwistCurve;\n        let a = ShortWeierstrassProjectivePoint::<BLS12381TwistCurve>::from_affine(\n            FieldElement::new([\n                element_from_biguint::<BLS12381PrimeField>(&a_0),\n                element_from_biguint::<BLS12381PrimeField>(&a_1),\n            ]),\n            FieldElement::new([\n                element_from_biguint::<BLS12381PrimeField>(&a_2),\n                element_from_biguint::<BLS12381PrimeField>(&a_3),\n            ]),\n        )\n        .unwrap();\n\n        let c = a.operate_with_self(biguint_to_u256(&k));\n\n        let c_affine = c.to_affine();\n        let [[x0, x1], [y0, y1]] = match c_affine.z() == &FieldElement::zero() {\n            true => [\n                &[FieldElement::zero(), FieldElement::zero()],\n                &[FieldElement::zero(), FieldElement::zero()],\n            ],\n            false => [c_affine.x().value(), c_affine.y().value()],\n        };\n        let py_tuple = PyTuple::new(\n            py,\n            [\n                element_to_biguint::<BLS12381PrimeField>(x0),\n                element_to_biguint::<BLS12381PrimeField>(x1),\n                element_to_biguint::<BLS12381PrimeField>(y0),\n                element_to_biguint::<BLS12381PrimeField>(y1),\n            ],\n        );\n        return Ok(py_tuple?.into());\n    }\n\n    panic!(\"Curve ID {} not supported\", curve_id);\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/groth16_calldata.rs",
    "content": "use super::*;\nuse crate::calldata::full_proof_with_hints::groth16;\nuse crate::calldata::full_proof_with_hints::groth16::{Groth16Proof, Groth16VerificationKey};\nuse crate::definitions::CurveID;\nuse pyo3::prelude::*;\nuse pyo3::types::PyList;\n\n#[pyfunction(signature = (proof, vk, curve_id, image_id=None, journal=None, public_inputs_sp1=None, vkey=None))]\npub fn get_groth16_calldata(\n    py: Python,\n    proof: &Bound<'_, PyList>,\n    vk: &Bound<'_, PyList>,\n    curve_id: usize,\n    image_id: Option<&[u8]>,\n    journal: Option<&[u8]>,\n    public_inputs_sp1: Option<&[u8]>,\n    vkey: Option<&[u8]>,\n) -> PyResult<Py<PyAny>> {\n    let proof_values = proof\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n    let vk_values = vk\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n\n    // Handle RISC0 optional parameters\n    let image_id_journal_risc0 = if let (Some(image_id), Some(journal)) = (image_id, journal) {\n        Some((image_id.to_vec(), journal.to_vec()))\n    } else {\n        None\n    };\n\n    let verifying_key = Groth16VerificationKey::from(vk_values);\n\n    // Handle SP1 optional parameters\n    let vkey_public_values_sp1 =\n        if let (Some(vkey), Some(public_inputs_sp1)) = (vkey, public_inputs_sp1) {\n            assert!(verifying_key == groth16::get_sp1_vk());\n            Some((vkey.to_vec(), public_inputs_sp1.to_vec()))\n        } else {\n            None\n        };\n\n    let result = groth16::get_groth16_calldata(\n        &Groth16Proof::from(proof_values, image_id_journal_risc0, vkey_public_values_sp1),\n        &verifying_key,\n        CurveID::try_from(curve_id).map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?,\n    )\n    .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/hades_permutation.rs",
    "content": "use super::*;\n\n#[pyfunction]\npub fn hades_permutation(\n    py: Python,\n    py_value_1: &Bound<'_, PyBytes>,\n    py_value_2: &Bound<'_, PyBytes>,\n    py_value_3: &Bound<'_, PyBytes>,\n) -> PyResult<Py<PyAny>> {\n    let byte_slice_1: &[u8] = py_value_1.as_bytes();\n    let byte_slice_2: &[u8] = py_value_2.as_bytes();\n    let byte_slice_3: &[u8] = py_value_3.as_bytes();\n\n    let mut state: Vec<FieldElement<Stark252PrimeField>> = vec![\n        FieldElement::<Stark252PrimeField>::from_bytes_be(byte_slice_1)\n            .expect(\"Unable to convert first param from bytes to FieldElement\"),\n        FieldElement::<Stark252PrimeField>::from_bytes_be(byte_slice_2)\n            .expect(\"Unable to convert second param from bytes to FieldElement\"),\n        FieldElement::<Stark252PrimeField>::from_bytes_be(byte_slice_3)\n            .expect(\"Unable to convert third param from bytes to FieldElement\"),\n    ];\n\n    PoseidonCairoStark252::hades_permutation(&mut state);\n\n    let py_tuple = PyTuple::new(\n        py,\n        state.iter().map(|fe| {\n            let fe_bytes = fe.to_bytes_be();\n            PyBytes::new(py, &fe_bytes)\n        }),\n    );\n    Ok(py_tuple?.into())\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/mod.rs",
    "content": "pub mod drand_calldata;\npub mod ecip;\npub mod extf_mul;\npub mod final_exp_witness;\npub mod g2;\npub mod groth16_calldata;\npub mod hades_permutation;\npub mod mpc_calldata;\npub mod msm;\npub mod pairing;\npub mod signatures;\npub mod zk_honk_calldata;\n\nuse lambdaworks_crypto::hash::poseidon::{starknet::PoseidonCairoStark252, Poseidon};\n\nuse lambdaworks_math::{field::traits::IsPrimeField, traits::ByteConversion};\n\nuse crate::crypto::poseidon_bn254::poseidon_hash_bn254 as core_poseidon_hash_bn254;\nuse crate::definitions::{\n    BLS12381PrimeField, BN254PrimeField, FieldElement, GrumpkinPrimeField, Stark252PrimeField,\n};\n\nuse crate::io::{element_from_biguint, element_to_biguint};\nuse num_bigint::BigUint;\nuse pyo3::{\n    conversion::IntoPyObject,\n    prelude::*,\n    types::{PyBytes, PyInt, PyList, PyTuple},\n};\n\nconst CURVE_BN254: usize = 0;\nconst CURVE_BLS12_381: usize = 1;\n\n#[pyfunction]\npub fn poseidon_hash_bn254(\n    py: Python,\n    x: &Bound<'_, PyInt>,\n    y: &Bound<'_, PyInt>,\n) -> PyResult<Py<PyAny>> {\n    let x_biguint: BigUint = x.extract()?;\n    let y_biguint: BigUint = y.extract()?;\n\n    let x_fe = element_from_biguint::<GrumpkinPrimeField>(&x_biguint);\n    let y_fe = element_from_biguint::<GrumpkinPrimeField>(&y_biguint);\n\n    let result = core_poseidon_hash_bn254(&x_fe, &y_fe);\n    let result_biguint = element_to_biguint(&result);\n\n    Ok(result_biguint.into_pyobject(py)?.into())\n}\n\n#[pymodule]\nfn garaga_rs(m: &Bound<'_, PyModule>) -> PyResult<()> {\n    m.add_function(wrap_pyfunction!(g2::g2_add, m)?)?;\n    m.add_function(wrap_pyfunction!(g2::g2_scalar_mul, m)?)?;\n    m.add_function(wrap_pyfunction!(pairing::multi_pairing, m)?)?;\n    m.add_function(wrap_pyfunction!(pairing::multi_miller_loop, m)?)?;\n    m.add_function(wrap_pyfunction!(\n        final_exp_witness::get_final_exp_witness,\n        m\n    )?)?;\n    m.add_function(wrap_pyfunction!(hades_permutation::hades_permutation, m)?)?;\n    m.add_function(wrap_pyfunction!(\n        extf_mul::nondeterministic_extension_field_mul_divmod,\n        m\n    )?)?;\n    m.add_function(wrap_pyfunction!(ecip::zk_ecip_hint, m)?)?;\n    m.add_function(wrap_pyfunction!(msm::msm_calldata_builder, m)?)?;\n    m.add_function(wrap_pyfunction!(mpc_calldata::mpc_calldata_builder, m)?)?;\n    m.add_function(wrap_pyfunction!(groth16_calldata::get_groth16_calldata, m)?)?;\n    m.add_function(wrap_pyfunction!(zk_honk_calldata::get_zk_honk_calldata, m)?)?;\n    m.add_function(wrap_pyfunction!(signatures::schnorr_calldata_builder, m)?)?;\n    m.add_function(wrap_pyfunction!(signatures::ecdsa_calldata_builder, m)?)?;\n    m.add_function(wrap_pyfunction!(signatures::eddsa_calldata_builder, m)?)?;\n    m.add_function(wrap_pyfunction!(signatures::rsa_2048_calldata_builder, m)?)?;\n    m.add_function(wrap_pyfunction!(\n        signatures::rsa_2048_sha256_calldata_builder,\n        m\n    )?)?;\n    m.add_function(wrap_pyfunction!(poseidon_hash_bn254, m)?)?;\n    m.add_function(wrap_pyfunction!(pairing::final_exp, m)?)?;\n    m.add_function(wrap_pyfunction!(drand_calldata::drand_calldata_builder, m)?)?;\n    m.add_function(wrap_pyfunction!(\n        drand_calldata::drand_tlock_encrypt_calldata_builder,\n        m\n    )?)?;\n    Ok(())\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/mpc_calldata.rs",
    "content": "use super::*;\n\n#[pyfunction]\npub fn mpc_calldata_builder(\n    py: Python,\n    curve_id: usize,\n    py_list1: &Bound<'_, PyList>,\n    n_fixed_g2: usize,\n    py_list2: &Bound<'_, PyList>,\n) -> PyResult<Py<PyAny>> {\n    let values1 = py_list1\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n    let values2 = py_list2\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n    let result = crate::calldata::mpc_calldata::mpc_calldata_builder(\n        curve_id, &values1, n_fixed_g2, &values2,\n    )\n    .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/msm.rs",
    "content": "use super::*;\n\n#[pyfunction]\n#[allow(clippy::too_many_arguments)]\npub fn msm_calldata_builder(\n    py: Python,\n    py_list1: &Bound<'_, PyList>,\n    py_list2: &Bound<'_, PyList>,\n    curve_id: usize,\n    include_points_and_scalars: bool,\n    serialize_as_pure_felt252_array: bool,\n) -> PyResult<Py<PyAny>> {\n    let values = py_list1\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n    let scalars = py_list2\n        .into_iter()\n        .map(|x| x.extract())\n        .collect::<Result<Vec<BigUint>, _>>()?;\n    let result = crate::calldata::msm_calldata::msm_calldata_builder(\n        &values,\n        &scalars,\n        curve_id,\n        include_points_and_scalars,\n        serialize_as_pure_felt252_array,\n    )\n    .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/pairing.rs",
    "content": "use super::*;\n\nuse crate::definitions::{BLS12381PrimeField, BN254PrimeField};\nuse crate::io::element_from_biguint;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::curve::BN254Curve;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::twist::BN254TwistCurve;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::point::ShortWeierstrassProjectivePoint;\nuse lambdaworks_math::elliptic_curve::traits::FromAffine;\nuse lambdaworks_math::elliptic_curve::{\n    short_weierstrass::curves::bn_254::pairing::BN254AtePairing, traits::IsPairing,\n};\n\nuse itertools::Itertools;\nuse lambdaworks_math::cyclic_group::IsGroup;\nuse lambdaworks_math::field::element::FieldElement;\n\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381;\nuse lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254;\nuse lambdaworks_math::unsigned_integer::element::U256;\n\nuse crate::pairing::final_exp_witness::{to_bls, to_bn};\n\n#[pyfunction]\npub fn multi_pairing(\n    py: Python,\n    curve_id: usize,\n    py_list_1: &Bound<'_, PyList>,\n) -> PyResult<Py<PyAny>> {\n    assert!(py_list_1.len() % 6 == 0, \"invalid length\");\n\n    if curve_id == CURVE_BN254 {\n        let pairs = py_list_1\n            .iter()\n            .chunks(6)\n            .into_iter()\n            .map(|chunk| {\n                let [a_0, a_1, b_0, b_1, b_2, b_3] = chunk\n                    .map(|item| item.extract::<BigUint>().unwrap())\n                    .collect::<Vec<_>>()\n                    .try_into()\n                    .unwrap();\n\n                let ap = ShortWeierstrassProjectivePoint::<BN254Curve>::from_affine(\n                    element_from_biguint::<BN254PrimeField>(&a_0),\n                    element_from_biguint::<BN254PrimeField>(&a_1),\n                )\n                .unwrap();\n\n                let bp = ShortWeierstrassProjectivePoint::<BN254TwistCurve>::from_affine(\n                    FieldElement::new([\n                        element_from_biguint::<BN254PrimeField>(&b_0),\n                        element_from_biguint::<BN254PrimeField>(&b_1),\n                    ]),\n                    FieldElement::new([\n                        element_from_biguint::<BN254PrimeField>(&b_2),\n                        element_from_biguint::<BN254PrimeField>(&b_3),\n                    ]),\n                )\n                .unwrap();\n\n                (ap, bp)\n            })\n            .collect::<Vec<_>>();\n\n        let cx =\n            BN254AtePairing::compute_batch(&pairs.iter().map(|(a, b)| (a, b)).collect::<Vec<_>>())\n                .unwrap();\n\n        let cx = match cx == FieldElement::one() {\n            true => cx,\n            false => {\n                let final_exp_cofactor =\n                    U256::from_hex_unchecked(\"3bec47df15e307c81ea96b02d9d9e38d2e5d4e223ddedaf4\");\n                cx.pow(final_exp_cofactor)\n            }\n        };\n\n        let py_list = PyList::new(py, to_bn(cx));\n        return Ok(py_list?.into());\n    }\n\n    if curve_id == CURVE_BLS12_381 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::{\n            curve::BLS12381Curve, pairing::BLS12381AtePairing, twist::BLS12381TwistCurve,\n        };\n\n        let pairs = py_list_1\n            .iter()\n            .chunks(6)\n            .into_iter()\n            .map(|chunk| {\n                let [a_0, a_1, b_0, b_1, b_2, b_3] = chunk\n                    .map(|item| item.extract::<BigUint>().unwrap())\n                    .collect::<Vec<_>>()\n                    .try_into()\n                    .unwrap();\n\n                let ap = ShortWeierstrassProjectivePoint::<BLS12381Curve>::from_affine(\n                    element_from_biguint::<BLS12381PrimeField>(&a_0),\n                    element_from_biguint::<BLS12381PrimeField>(&a_1),\n                )\n                .unwrap();\n\n                let bp = ShortWeierstrassProjectivePoint::<BLS12381TwistCurve>::from_affine(\n                    FieldElement::new([\n                        element_from_biguint::<BLS12381PrimeField>(&b_0),\n                        element_from_biguint::<BLS12381PrimeField>(&b_1),\n                    ]),\n                    FieldElement::new([\n                        element_from_biguint::<BLS12381PrimeField>(&b_2),\n                        element_from_biguint::<BLS12381PrimeField>(&b_3),\n                    ]),\n                )\n                .unwrap();\n\n                (ap, bp)\n            })\n            .collect::<Vec<_>>();\n\n        let cx = BLS12381AtePairing::compute_batch(\n            &pairs.iter().map(|(a, b)| (a, b)).collect::<Vec<_>>(),\n        )\n        .unwrap();\n\n        let py_list = PyList::new(py, to_bls(cx));\n        return Ok(py_list?.into());\n    }\n\n    panic!(\"Curve ID {} not supported\", curve_id);\n}\n\n#[pyfunction]\npub fn multi_miller_loop(\n    py: Python,\n    curve_id: usize,\n    py_list_1: &Bound<'_, PyList>,\n) -> PyResult<Py<PyAny>> {\n    assert!(py_list_1.len() % 6 == 0, \"invalid length\");\n\n    if curve_id == CURVE_BN254 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::Degree12ExtensionField;\n\n        let pairs = py_list_1\n            .iter()\n            .chunks(6)\n            .into_iter()\n            .map(|chunk| {\n                let [a_0, a_1, b_0, b_1, b_2, b_3] = chunk\n                    .map(|item| item.extract::<BigUint>().unwrap())\n                    .collect::<Vec<_>>()\n                    .try_into()\n                    .unwrap();\n\n                let ap = ShortWeierstrassProjectivePoint::<BN254Curve>::from_affine(\n                    element_from_biguint::<BN254PrimeField>(&a_0),\n                    element_from_biguint::<BN254PrimeField>(&a_1),\n                )\n                .unwrap();\n\n                let bp = ShortWeierstrassProjectivePoint::<BN254TwistCurve>::from_affine(\n                    FieldElement::new([\n                        element_from_biguint::<BN254PrimeField>(&b_0),\n                        element_from_biguint::<BN254PrimeField>(&b_1),\n                    ]),\n                    FieldElement::new([\n                        element_from_biguint::<BN254PrimeField>(&b_2),\n                        element_from_biguint::<BN254PrimeField>(&b_3),\n                    ]),\n                )\n                .unwrap();\n\n                (ap, bp)\n            })\n            .collect::<Vec<_>>();\n\n        let mut result = FieldElement::<Degree12ExtensionField>::one();\n        for (p, q) in pairs {\n            // We don't need to check if p is in the subgroup because the subgroup oF G1 is G1.\n            // See https://hackmd.io/@jpw/bn254#Subgroup-checks.\n            if !q.is_in_subgroup() {\n                return Err(PyErr::new::<pyo3::exceptions::PyValueError, _>(\n                    \"Point not in subgroup\",\n                ));\n            }\n            if !p.is_neutral_element() && !q.is_neutral_element() {\n                let p = p.to_affine();\n                let q = q.to_affine();\n                result *= bn_254::pairing::miller_optimized(&p, &q);\n            }\n        }\n\n        let py_list = PyList::new(py, to_bn(result));\n        return Ok(py_list?.into());\n    }\n\n    if curve_id == CURVE_BLS12_381 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::Degree12ExtensionField;\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::{\n            curve::BLS12381Curve, twist::BLS12381TwistCurve,\n        };\n\n        let pairs = py_list_1\n            .iter()\n            .chunks(6)\n            .into_iter()\n            .map(|chunk| {\n                let [a_0, a_1, b_0, b_1, b_2, b_3] = chunk\n                    .map(|item| item.extract::<BigUint>().unwrap())\n                    .collect::<Vec<_>>()\n                    .try_into()\n                    .unwrap();\n\n                let ap = ShortWeierstrassProjectivePoint::<BLS12381Curve>::from_affine(\n                    element_from_biguint::<BLS12381PrimeField>(&a_0),\n                    element_from_biguint::<BLS12381PrimeField>(&a_1),\n                )\n                .unwrap();\n\n                let bp = ShortWeierstrassProjectivePoint::<BLS12381TwistCurve>::from_affine(\n                    FieldElement::new([\n                        element_from_biguint::<BLS12381PrimeField>(&b_0),\n                        element_from_biguint::<BLS12381PrimeField>(&b_1),\n                    ]),\n                    FieldElement::new([\n                        element_from_biguint::<BLS12381PrimeField>(&b_2),\n                        element_from_biguint::<BLS12381PrimeField>(&b_3),\n                    ]),\n                )\n                .unwrap();\n\n                (ap, bp)\n            })\n            .collect::<Vec<_>>();\n\n        let mut result = FieldElement::<Degree12ExtensionField>::one();\n        for (p, q) in pairs {\n            // We don't need to check if p is in the subgroup because the subgroup oF G1 is G1.\n            // See https://hackmd.io/@jpw/bn254#Subgroup-checks.\n            if !q.is_in_subgroup() {\n                return Err(PyErr::new::<pyo3::exceptions::PyValueError, _>(\n                    \"Point not in subgroup\",\n                ));\n            }\n            if !p.is_neutral_element() && !q.is_neutral_element() {\n                let p = p.to_affine();\n                let q = q.to_affine();\n                result *= bls12_381::pairing::miller(&q, &p);\n            }\n        }\n\n        let py_list = PyList::new(py, to_bls(result));\n        return Ok(py_list?.into());\n    }\n\n    panic!(\"Curve ID {} not supported\", curve_id);\n}\n\n#[pyfunction]\npub fn final_exp(\n    py: Python,\n    curve_id: usize,\n    py_list_1: &Bound<'_, PyList>,\n) -> PyResult<Py<PyAny>> {\n    assert!(py_list_1.len() == 12, \"invalid length\");\n\n    let [f_0, f_1, f_2, f_3, f_4, f_5, f_6, f_7, f_8, f_9, f_10, f_11] =\n        py_list_1.extract::<[BigUint; 12]>().unwrap();\n\n    if curve_id == 0 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bn_254::field_extension::{Degree12ExtensionField, Degree6ExtensionField, Degree2ExtensionField};\n\n        let f = FieldElement::<Degree12ExtensionField>::new([\n            FieldElement::<Degree6ExtensionField>::new([\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_0),\n                    element_from_biguint::<BN254PrimeField>(&f_1),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_2),\n                    element_from_biguint::<BN254PrimeField>(&f_3),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_4),\n                    element_from_biguint::<BN254PrimeField>(&f_5),\n                ]),\n            ]),\n            FieldElement::<Degree6ExtensionField>::new([\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_6),\n                    element_from_biguint::<BN254PrimeField>(&f_7),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_8),\n                    element_from_biguint::<BN254PrimeField>(&f_9),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BN254PrimeField>(&f_10),\n                    element_from_biguint::<BN254PrimeField>(&f_11),\n                ]),\n            ]),\n        ]);\n\n        let final_exp = bn_254::pairing::final_exponentiation_optimized(&f);\n        let fx = match final_exp == FieldElement::one() {\n            true => final_exp,\n            false => {\n                let final_exp_cofactor =\n                    U256::from_hex_unchecked(\"3bec47df15e307c81ea96b02d9d9e38d2e5d4e223ddedaf4\");\n                final_exp.pow(final_exp_cofactor)\n            }\n        };\n        let py_list = PyList::new(py, to_bn(fx));\n        return Ok(py_list?.into());\n    }\n\n    if curve_id == 1 {\n        use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::field_extension::{Degree12ExtensionField, Degree6ExtensionField, Degree2ExtensionField};\n\n        let f = FieldElement::<Degree12ExtensionField>::new([\n            FieldElement::<Degree6ExtensionField>::new([\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_0),\n                    element_from_biguint::<BLS12381PrimeField>(&f_1),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_2),\n                    element_from_biguint::<BLS12381PrimeField>(&f_3),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_4),\n                    element_from_biguint::<BLS12381PrimeField>(&f_5),\n                ]),\n            ]),\n            FieldElement::<Degree6ExtensionField>::new([\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_6),\n                    element_from_biguint::<BLS12381PrimeField>(&f_7),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_8),\n                    element_from_biguint::<BLS12381PrimeField>(&f_9),\n                ]),\n                FieldElement::<Degree2ExtensionField>::new([\n                    element_from_biguint::<BLS12381PrimeField>(&f_10),\n                    element_from_biguint::<BLS12381PrimeField>(&f_11),\n                ]),\n            ]),\n        ]);\n\n        let fx = bls12_381::pairing::final_exponentiation(&f);\n\n        let py_list = PyList::new(py, to_bls(fx));\n        return Ok(py_list?.into());\n    }\n\n    panic!(\"Curve ID {} not supported\", curve_id);\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/signatures.rs",
    "content": "use super::*;\n\n#[pyfunction]\npub fn schnorr_calldata_builder(\n    py: Python,\n    rx: &Bound<'_, PyInt>,\n    s: &Bound<'_, PyInt>,\n    e: &Bound<'_, PyInt>,\n    px: &Bound<'_, PyInt>,\n    py_coord: &Bound<'_, PyInt>,\n    prepend_public_key: bool,\n    curve_id: usize,\n) -> PyResult<Py<PyAny>> {\n    let rx: BigUint = rx.extract()?;\n    let s: BigUint = s.extract()?;\n    let e: BigUint = e.extract()?;\n    let px: BigUint = px.extract()?;\n    let py_coord: BigUint = py_coord.extract()?;\n\n    let result = crate::calldata::signatures::schnorr_calldata_builder(\n        rx,\n        s,\n        e,\n        px,\n        py_coord,\n        prepend_public_key,\n        curve_id,\n    )\n    .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n\n#[pyfunction]\npub fn ecdsa_calldata_builder(\n    py: Python,\n    r: &Bound<'_, PyInt>,\n    s: &Bound<'_, PyInt>,\n    v: u8,\n    px: &Bound<'_, PyInt>,\n    py_coord: &Bound<'_, PyInt>,\n    z: &Bound<'_, PyInt>,\n    prepend_public_key: bool,\n    curve_id: usize,\n) -> PyResult<Py<PyAny>> {\n    let r: BigUint = r.extract()?;\n    let s: BigUint = s.extract()?;\n    let px: BigUint = px.extract()?;\n    let py_coord: BigUint = py_coord.extract()?;\n    let z: BigUint = z.extract()?;\n\n    let result = crate::calldata::signatures::ecdsa_calldata_builder(\n        r,\n        s,\n        v,\n        px,\n        py_coord,\n        z,\n        prepend_public_key,\n        curve_id,\n    )\n    .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n\n#[pyfunction]\npub fn eddsa_calldata_builder(\n    py: Python,\n    rx: &Bound<'_, PyInt>,\n    s: &Bound<'_, PyInt>,\n    py_coord: &Bound<'_, PyInt>,\n    msg: &Bound<'_, PyBytes>,\n    prepend_public_key: bool,\n) -> PyResult<Py<PyAny>> {\n    let rx: BigUint = rx.extract()?;\n    let s: BigUint = s.extract()?;\n    let py_coord: BigUint = py_coord.extract()?;\n    let msg: Vec<u8> = msg.extract()?;\n\n    let result = crate::calldata::signatures::eddsa_calldata_builder(\n        rx,\n        s,\n        py_coord,\n        msg,\n        prepend_public_key,\n    )\n    .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n\n#[pyfunction]\npub fn rsa_2048_calldata_builder(\n    py: Python,\n    signature: &Bound<'_, PyInt>,\n    expected_message: &Bound<'_, PyInt>,\n    modulus: &Bound<'_, PyInt>,\n    prepend_public_key: bool,\n) -> PyResult<Py<PyAny>> {\n    let signature: BigUint = signature.extract()?;\n    let expected_message: BigUint = expected_message.extract()?;\n    let modulus: BigUint = modulus.extract()?;\n\n    let result = crate::calldata::signatures::rsa_2048_calldata_builder(\n        signature,\n        expected_message,\n        modulus,\n        prepend_public_key,\n    )\n    .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n\n#[pyfunction]\npub fn rsa_2048_sha256_calldata_builder(\n    py: Python,\n    signature: &Bound<'_, PyInt>,\n    message: &Bound<'_, PyBytes>,\n    modulus: &Bound<'_, PyInt>,\n    prepend_public_key: bool,\n) -> PyResult<Py<PyAny>> {\n    let signature: BigUint = signature.extract()?;\n    let message: Vec<u8> = message.extract()?;\n    let modulus: BigUint = modulus.extract()?;\n\n    let result = crate::calldata::signatures::rsa_2048_sha256_calldata_builder(\n        signature,\n        &message,\n        modulus,\n        prepend_public_key,\n    )\n    .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/python_bindings/zk_honk_calldata.rs",
    "content": "use super::*;\nuse crate::calldata::full_proof_with_hints::zk_honk;\nuse crate::calldata::full_proof_with_hints::zk_honk::{HonkVerificationKey, ZKHonkProof};\nuse pyo3::prelude::*;\nuse pyo3::types::PyList;\n\n#[pyfunction]\npub fn get_zk_honk_calldata(\n    py: Python,\n    proof: &Bound<'_, PyBytes>,\n    public_inputs: &Bound<'_, PyBytes>,\n    vk: &Bound<'_, PyBytes>,\n) -> PyResult<Py<PyAny>> {\n    let proof_bytes = proof.as_bytes();\n    let public_inputs_bytes = public_inputs.as_bytes();\n    let vk_bytes = vk.as_bytes();\n\n    let vk = HonkVerificationKey::from_bytes(vk_bytes)\n        .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    let proof = ZKHonkProof::from_bytes(proof_bytes, public_inputs_bytes, vk.log_circuit_size)\n        .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    let result = zk_honk::get_zk_honk_calldata(&proof, &vk)\n        .map_err(PyErr::new::<pyo3::exceptions::PyValueError, _>)?;\n\n    let py_list = PyList::new(py, result);\n    Ok(py_list?.into())\n}\n"
  },
  {
    "path": "tools/garaga_rs/src/wasm_bindings.rs",
    "content": "use crate::calldata::full_proof_with_hints::groth16;\nuse crate::calldata::full_proof_with_hints::groth16::{Groth16Proof, Groth16VerificationKey};\nuse crate::calldata::full_proof_with_hints::zk_honk;\nuse crate::calldata::full_proof_with_hints::zk_honk::{HonkVerificationKey, ZKHonkProof};\nuse crate::calldata::{G1PointBigUint, G2PointBigUint};\nuse crate::crypto::poseidon_bn254::poseidon_hash_bn254;\nuse crate::definitions::CurveID;\nuse crate::definitions::{\n    GrumpkinPrimeField, ToTwistedEdwardsCurve, ToWeierstrassCurve, X25519PrimeField,\n};\nuse crate::io::{element_from_biguint, element_to_biguint};\nuse js_sys::{Array, Uint8Array};\nuse num_bigint::BigUint;\nuse num_traits::Num;\nuse wasm_bindgen::prelude::*; // Import the Num trait\n\n#[wasm_bindgen]\npub fn drand_calldata_builder(values: Vec<JsValue>) -> Result<Vec<JsValue>, JsValue> {\n    let values: Vec<BigUint> = values\n        .into_iter()\n        .map(jsvalue_to_biguint)\n        .collect::<Result<Vec<_>, _>>()?;\n\n    let result = crate::calldata::drand_calldata::drand_calldata_builder(&values)\n        .map_err(|e| JsValue::from_str(&e.to_string()))?; // Handle error here\n\n    let result: Vec<BigUint> = result; // Ensure result is of type Vec<BigUint>\n\n    Ok(result.into_iter().map(biguint_to_jsvalue).collect())\n}\n\n#[wasm_bindgen]\npub fn drand_tlock_encrypt_calldata_builder(values: Vec<JsValue>) -> Result<Vec<JsValue>, JsValue> {\n    let values: Vec<BigUint> = values\n        .into_iter()\n        .map(jsvalue_to_biguint)\n        .collect::<Result<Vec<_>, _>>()?;\n\n    let result =\n        crate::calldata::drand_tlock_calldata::drand_tlock_encrypt_calldata_builder(&values)\n            .map_err(|e| JsValue::from_str(&e.to_string()))?;\n\n    let result: Vec<BigUint> = result;\n\n    Ok(result.into_iter().map(biguint_to_jsvalue).collect())\n}\n\n#[wasm_bindgen]\npub fn msm_calldata_builder(\n    values: Vec<JsValue>,\n    scalars: Vec<JsValue>,\n    curve_id: usize,\n    include_points_and_scalars: bool,\n    serialize_as_pure_felt252_array: bool,\n) -> Result<Vec<JsValue>, JsValue> {\n    let values: Vec<BigUint> = values\n        .into_iter()\n        .map(jsvalue_to_biguint)\n        .collect::<Result<Vec<_>, _>>()?;\n    let scalars: Vec<BigUint> = scalars\n        .into_iter()\n        .map(jsvalue_to_biguint)\n        .collect::<Result<Vec<_>, _>>()?;\n\n    // Ensure msm_calldata_builder returns a Result type\n    let result = crate::calldata::msm_calldata::msm_calldata_builder(\n        &values,\n        &scalars,\n        curve_id,\n        include_points_and_scalars,\n        serialize_as_pure_felt252_array,\n    )\n    .map_err(|e| JsValue::from_str(&e.to_string()))?; // Handle error here\n\n    let result: Vec<BigUint> = result; // Ensure result is of type Vec<BigUint>\n\n    Ok(result.into_iter().map(biguint_to_jsvalue).collect())\n}\n\n#[wasm_bindgen]\npub fn mpc_calldata_builder(\n    curve_id: usize,\n    values1: Vec<JsValue>,\n    n_fixed_g2: usize,\n    values2: Vec<JsValue>,\n) -> Result<Vec<JsValue>, JsValue> {\n    let values1: Vec<BigUint> = values1\n        .into_iter()\n        .map(jsvalue_to_biguint)\n        .collect::<Result<Vec<_>, _>>()?;\n    let values2: Vec<BigUint> = values2\n        .into_iter()\n        .map(jsvalue_to_biguint)\n        .collect::<Result<Vec<_>, _>>()?;\n\n    // Ensure msm_calldata_builder returns a Result type\n    let result = crate::calldata::mpc_calldata::mpc_calldata_builder(\n        curve_id, &values1, n_fixed_g2, &values2,\n    )\n    .map_err(|e| JsValue::from_str(&e.to_string()))?; // Handle error here\n\n    let result: Vec<BigUint> = result; // Ensure result is of type Vec<BigUint>\n\n    Ok(result.into_iter().map(biguint_to_jsvalue).collect())\n}\n\n#[wasm_bindgen]\npub fn schnorr_calldata_builder(\n    rx: JsValue,\n    s: JsValue,\n    e: JsValue,\n    px: JsValue,\n    py: JsValue,\n    prepend_public_key: bool,\n    curve_id: usize,\n) -> Result<Vec<JsValue>, JsValue> {\n    let rx: BigUint = jsvalue_to_biguint(rx)?;\n    let s: BigUint = jsvalue_to_biguint(s)?;\n    let e: BigUint = jsvalue_to_biguint(e)?;\n    let px: BigUint = jsvalue_to_biguint(px)?;\n    let py: BigUint = jsvalue_to_biguint(py)?;\n\n    let result = crate::calldata::signatures::schnorr_calldata_builder(\n        rx,\n        s,\n        e,\n        px,\n        py,\n        prepend_public_key,\n        curve_id,\n    )\n    .map_err(|e| JsValue::from_str(&e.to_string()))?; // Handle error here\n\n    let result: Vec<BigUint> = result; // Ensure result is of type Vec<BigUint>\n\n    Ok(result.into_iter().map(biguint_to_jsvalue).collect())\n}\n\n#[wasm_bindgen]\npub fn ecdsa_calldata_builder(\n    r: JsValue,\n    s: JsValue,\n    v: usize,\n    px: JsValue,\n    py: JsValue,\n    z: JsValue,\n    prepend_public_key: bool,\n    curve_id: usize,\n) -> Result<Vec<JsValue>, JsValue> {\n    let r: BigUint = jsvalue_to_biguint(r)?;\n    let s: BigUint = jsvalue_to_biguint(s)?;\n    let v: u8 = v\n        .try_into()\n        .map_err(|_| JsValue::from_str(\"Failed to convert value to u8\"))?;\n    let px: BigUint = jsvalue_to_biguint(px)?;\n    let py: BigUint = jsvalue_to_biguint(py)?;\n    let z: BigUint = jsvalue_to_biguint(z)?;\n\n    let result = crate::calldata::signatures::ecdsa_calldata_builder(\n        r,\n        s,\n        v,\n        px,\n        py,\n        z,\n        prepend_public_key,\n        curve_id,\n    )\n    .map_err(|e| JsValue::from_str(&e.to_string()))?; // Handle error here\n\n    let result: Vec<BigUint> = result; // Ensure result is of type Vec<BigUint>\n\n    Ok(result.into_iter().map(biguint_to_jsvalue).collect())\n}\n\n#[wasm_bindgen]\npub fn eddsa_calldata_builder(\n    ry_twisted: JsValue,\n    s: JsValue,\n    py_twisted: JsValue,\n    msg: JsValue,\n    prepend_public_key: bool,\n) -> Result<Vec<JsValue>, JsValue> {\n    let r: BigUint = jsvalue_to_biguint(ry_twisted)?;\n    let s: BigUint = jsvalue_to_biguint(s)?;\n    let py: BigUint = jsvalue_to_biguint(py_twisted)?;\n    let msg: Vec<u8> = msg.dyn_into::<Uint8Array>().map(|arr| arr.to_vec())?;\n\n    let result =\n        crate::calldata::signatures::eddsa_calldata_builder(r, s, py, msg, prepend_public_key)\n            .map_err(|e| JsValue::from_str(&e.to_string()))?; // Handle error here\n\n    let result: Vec<BigUint> = result; // Ensure result is of type Vec<BigUint>\n\n    Ok(result.into_iter().map(biguint_to_jsvalue).collect())\n}\n\n#[wasm_bindgen]\npub fn rsa_2048_calldata_builder(\n    signature: JsValue,\n    expected_message: JsValue,\n    modulus: JsValue,\n    prepend_public_key: bool,\n) -> Result<Vec<JsValue>, JsValue> {\n    let signature: BigUint = jsvalue_to_biguint(signature)?;\n    let expected_message: BigUint = jsvalue_to_biguint(expected_message)?;\n    let modulus: BigUint = jsvalue_to_biguint(modulus)?;\n\n    let result = crate::calldata::signatures::rsa_2048_calldata_builder(\n        signature,\n        expected_message,\n        modulus,\n        prepend_public_key,\n    )\n    .map_err(|e| JsValue::from_str(&e.to_string()))?;\n\n    Ok(result.into_iter().map(biguint_to_jsvalue).collect())\n}\n\n#[wasm_bindgen]\npub fn rsa_2048_sha256_calldata_builder(\n    signature: JsValue,\n    message: JsValue,\n    modulus: JsValue,\n    prepend_public_key: bool,\n) -> Result<Vec<JsValue>, JsValue> {\n    let signature: BigUint = jsvalue_to_biguint(signature)?;\n    let message: Vec<u8> = message\n        .dyn_into::<Uint8Array>()\n        .map(|arr| arr.to_vec())\n        .map_err(|_| JsValue::from_str(\"message must be a Uint8Array\"))?;\n    let modulus: BigUint = jsvalue_to_biguint(modulus)?;\n\n    let result = crate::calldata::signatures::rsa_2048_sha256_calldata_builder(\n        signature,\n        &message,\n        modulus,\n        prepend_public_key,\n    )\n    .map_err(|e| JsValue::from_str(&e.to_string()))?;\n\n    Ok(result.into_iter().map(biguint_to_jsvalue).collect())\n}\n\nfn jsvalue_to_biguint(v: JsValue) -> Result<BigUint, JsValue> {\n    let s = (JsValue::from_str(\"\") + v)\n        .as_string()\n        .ok_or_else(|| JsValue::from_str(\"Failed to convert JsValue to string\"))?;\n\n    let (number_str, radix) = if s.starts_with(\"0x\") || s.starts_with(\"0X\") {\n        // It's a hexadecimal string; remove the '0x' prefix\n        (&s[2..], 16)\n    } else {\n        // Assume it's a decimal string\n        (s.as_str(), 10)\n    };\n    BigUint::from_str_radix(number_str, radix)\n        .map_err(|_| JsValue::from_str(\"Failed to convert string to BigUint\"))\n}\n\nfn biguint_to_jsvalue(v: BigUint) -> JsValue {\n    JsValue::bigint_from_str(&v.to_string())\n}\n// Helper function to get a property from an object\nfn get_property(obj: &js_sys::Object, key: &str) -> Result<JsValue, JsValue> {\n    js_sys::Reflect::get(obj, &JsValue::from_str(key))\n}\n\n#[allow(dead_code)]\nfn set_property(obj: &js_sys::Object, key: &str, value: &JsValue) -> Result<(), JsValue> {\n    let success = js_sys::Reflect::set(obj, &JsValue::from_str(key), value)?;\n    if !success {\n        return Err(JsValue::from_str(&format!(\n            \"Failed to set property: {}\",\n            key\n        )));\n    }\n    Ok(())\n}\n\n// Parsing helper for G1PointBigUint\nfn parse_g1_point(value: JsValue) -> Result<G1PointBigUint, JsValue> {\n    let obj = value\n        .dyn_into::<js_sys::Object>()\n        .map_err(|_| JsValue::from_str(\"Failed to parse G1PointBigUint\"))?;\n\n    let x = jsvalue_to_biguint(get_property(&obj, \"x\")?)?;\n\n    let y = jsvalue_to_biguint(get_property(&obj, \"y\")?)?;\n\n    Ok(G1PointBigUint { x, y })\n}\n\n#[allow(dead_code)]\nfn jsvalue_from_g1_point(point: &G1PointBigUint, curve_id: usize) -> Result<JsValue, JsValue> {\n    let point_obj = js_sys::Object::new();\n    set_property(&point_obj, \"x\", &biguint_to_jsvalue(point.x.clone()))?;\n    set_property(&point_obj, \"y\", &biguint_to_jsvalue(point.y.clone()))?;\n    set_property(&point_obj, \"curveId\", &curve_id.into())?;\n    Ok(point_obj.into())\n}\n\n// Parsing helper for G2PointBigUint\nfn parse_g2_point(value: JsValue) -> Result<G2PointBigUint, JsValue> {\n    let obj = value\n        .dyn_into::<js_sys::Object>()\n        .map_err(|_| JsValue::from_str(\"Failed to parse G2PointBigUint\"))?;\n    let x_tuple = get_property(&obj, \"x\")?\n        .dyn_into::<Array>()\n        .map_err(|_| JsValue::from_str(\"x is not an array\"))?;\n    let y_tuple = get_property(&obj, \"y\")?\n        .dyn_into::<Array>()\n        .map_err(|_| JsValue::from_str(\"y is not an array\"))?;\n\n    let x0 = jsvalue_to_biguint(x_tuple.get(0))?;\n    let x1 = jsvalue_to_biguint(x_tuple.get(1))?;\n\n    let y0 = jsvalue_to_biguint(y_tuple.get(0))?;\n    let y1 = jsvalue_to_biguint(y_tuple.get(1))?;\n\n    Ok(G2PointBigUint { x0, x1, y0, y1 })\n}\n\n// Parsing helper for an array of BigUint\nfn parse_biguint_array(value: JsValue) -> Result<Vec<BigUint>, JsValue> {\n    let array = value\n        .dyn_into::<Array>()\n        .map_err(|_| JsValue::from_str(\"public_inputs is not an array\"))?;\n\n    array\n        .iter()\n        .map(|v| {\n            // let s = v\n            //     .as_string()\n            //     .ok_or_else(|| JsValue::from_str(\"public_inputs element is not a string\"))?;\n\n            // Parse the string into BigUint using the helper function\n            jsvalue_to_biguint(v)\n        })\n        .collect()\n}\n\n#[allow(dead_code)]\nfn jsvalue_from_biguint_array(values: &[BigUint]) -> Result<JsValue, JsValue> {\n    let values = values\n        .iter()\n        .cloned()\n        .map(biguint_to_jsvalue)\n        .collect::<Vec<_>>();\n    Ok(values.into())\n}\n\n// Parses an array of G1 points from JsValue\nfn parse_g1_point_array(value: JsValue) -> Result<Vec<G1PointBigUint>, JsValue> {\n    let array = value\n        .dyn_into::<Array>()\n        .map_err(|_| JsValue::from_str(\"ic is not an array\"))?;\n    let mut points = Vec::new();\n    for i in 0..array.length() {\n        let point = parse_g1_point(array.get(i))?;\n        points.push(point);\n    }\n    Ok(points)\n}\n\n#[allow(dead_code)]\nfn jsvalue_from_g1_point_array(\n    points: &[G1PointBigUint],\n    curve_id: usize,\n) -> Result<JsValue, JsValue> {\n    let points = points\n        .iter()\n        .map(|point| jsvalue_from_g1_point(point, curve_id))\n        .collect::<Result<Vec<_>, _>>()?;\n    Ok(points.into())\n}\n\n// Optional parsing helper for Uint8Array\n#[allow(dead_code)]\nfn _parse_optional_uint8_array(value: JsValue) -> Option<Vec<u8>> {\n    value.dyn_into::<Uint8Array>().ok().map(|arr| arr.to_vec())\n}\n\n#[wasm_bindgen]\npub fn to_weirstrass(x_twisted: JsValue, y_twisted: JsValue) -> Result<Vec<JsValue>, JsValue> {\n    let x_twisted_biguint = jsvalue_to_biguint(x_twisted).unwrap();\n    let x_twisted = element_from_biguint::<X25519PrimeField>(&x_twisted_biguint);\n\n    let y_twisted_biguint = jsvalue_to_biguint(y_twisted).unwrap();\n    let y_twisted = element_from_biguint::<X25519PrimeField>(&y_twisted_biguint);\n\n    let result = crate::definitions::X25519PrimeField::to_weirstrass(x_twisted, y_twisted);\n\n    let x_weirstrass = element_to_biguint::<X25519PrimeField>(&result.0);\n    let y_weirstrass = element_to_biguint::<X25519PrimeField>(&result.1);\n\n    let result = vec![\n        biguint_to_jsvalue(x_weirstrass),\n        biguint_to_jsvalue(y_weirstrass),\n    ];\n\n    Ok(result)\n}\n\n#[wasm_bindgen]\npub fn to_twistededwards(\n    x_weirstrass: JsValue,\n    y_weirstrass: JsValue,\n) -> Result<Vec<JsValue>, JsValue> {\n    let x_weirstrass_biguint = jsvalue_to_biguint(x_weirstrass).unwrap();\n    let x_weirstrass = element_from_biguint::<X25519PrimeField>(&x_weirstrass_biguint);\n\n    let y_weirstrass_biguint = jsvalue_to_biguint(y_weirstrass).unwrap();\n    let y_weirstrass = element_from_biguint::<X25519PrimeField>(&y_weirstrass_biguint);\n\n    let result =\n        crate::definitions::X25519PrimeField::to_twistededwards(x_weirstrass, y_weirstrass);\n\n    let x_twisted = element_to_biguint::<X25519PrimeField>(&result.0);\n    let y_twisted = element_to_biguint::<X25519PrimeField>(&result.1);\n\n    let result = vec![biguint_to_jsvalue(x_twisted), biguint_to_jsvalue(y_twisted)];\n\n    Ok(result)\n}\n\n#[wasm_bindgen]\npub fn get_groth16_calldata(\n    proof_js: JsValue,\n    vk_js: JsValue,\n    curve_id_js: JsValue,\n) -> Result<Vec<JsValue>, JsValue> {\n    let proof_obj = proof_js\n        .dyn_into::<js_sys::Object>()\n        .map_err(|_| JsValue::from_str(\"proof_js is not an object\"))?;\n    let property = get_property(&proof_obj, \"a\")?;\n\n    let a = parse_g1_point(property)?;\n    let b = parse_g2_point(get_property(&proof_obj, \"b\")?)?;\n    let c = parse_g1_point(get_property(&proof_obj, \"c\")?)?;\n\n    let public_inputs = parse_biguint_array(get_property(&proof_obj, \"publicInputs\")?)?;\n\n    // Parse RISC0 data if present\n    let image_id_journal_risc0 = match get_property(&proof_obj, \"imageIdJournalRisc0\") {\n        Ok(value) if !value.is_undefined() && !value.is_null() => {\n            let risc0_obj = value\n                .dyn_into::<js_sys::Object>()\n                .map_err(|_| JsValue::from_str(\"imageIdJournalRisc0 is not an object\"))?;\n            let image_id = get_property(&risc0_obj, \"imageId\")?\n                .dyn_into::<Uint8Array>()\n                .map(|arr| arr.to_vec())\n                .map_err(|_| JsValue::from_str(\"imageId is not a Uint8Array\"))?;\n            let journal = get_property(&risc0_obj, \"journal\")?\n                .dyn_into::<Uint8Array>()\n                .map(|arr| arr.to_vec())\n                .map_err(|_| JsValue::from_str(\"journal is not a Uint8Array\"))?;\n            Some((image_id, journal))\n        }\n        _ => None,\n    };\n\n    // Parse SP1 data if present\n    let vkey_public_values_sp1 = match get_property(&proof_obj, \"vkeyPublicValuesSp1\") {\n        Ok(value) if !value.is_undefined() && !value.is_null() => {\n            let sp1_obj = value\n                .dyn_into::<js_sys::Object>()\n                .map_err(|_| JsValue::from_str(\"vkeyPublicValuesSp1 is not an object\"))?;\n            let vkey = get_property(&sp1_obj, \"vkey\")?\n                .dyn_into::<Uint8Array>()\n                .map(|arr| arr.to_vec())\n                .map_err(|_| JsValue::from_str(\"vkey is not a Uint8Array\"))?;\n            let public_values = get_property(&sp1_obj, \"publicValues\")?\n                .dyn_into::<Uint8Array>()\n                .map(|arr| arr.to_vec())\n                .map_err(|_| JsValue::from_str(\"publicValues is not a Uint8Array\"))?;\n            Some((vkey, public_values))\n        }\n        _ => None,\n    };\n\n    let proof = Groth16Proof {\n        a,\n        b,\n        c,\n        public_inputs,\n        image_id_journal_risc0,\n        vkey_public_values_sp1,\n    };\n\n    let vk_obj = vk_js\n        .dyn_into::<js_sys::Object>()\n        .map_err(|_| JsValue::from_str(\"vk_js is not an object\"))?;\n\n    let alpha = parse_g1_point(get_property(&vk_obj, \"alpha\")?)?;\n    let beta = parse_g2_point(get_property(&vk_obj, \"beta\")?)?;\n    let gamma = parse_g2_point(get_property(&vk_obj, \"gamma\")?)?;\n    let delta = parse_g2_point(get_property(&vk_obj, \"delta\")?)?;\n    let ic = parse_g1_point_array(get_property(&vk_obj, \"ic\")?)?;\n\n    let vk = Groth16VerificationKey {\n        alpha,\n        beta,\n        gamma,\n        delta,\n        ic,\n    };\n\n    //Parse curve_id_js into usize\n    let curve_id_num = curve_id_js\n        .as_f64()\n        .ok_or_else(|| JsValue::from_str(\"curve_id_js is not a number\"))?\n        as usize;\n\n    // Convert usize to CurveID using TryFrom\n    let curve_id = CurveID::try_from(curve_id_num).map_err(|e| JsValue::from_str(&e))?;\n\n    let groth16_calldata_biguint = groth16::get_groth16_calldata(&proof, &vk, curve_id);\n\n    let groth16_calldata_js = groth16_calldata_biguint?\n        .into_iter()\n        .map(biguint_to_jsvalue)\n        .collect::<Vec<_>>();\n\n    Ok(groth16_calldata_js)\n}\n\n#[wasm_bindgen]\npub fn get_zk_honk_calldata(\n    proof_js: JsValue,\n    public_inputs_js: JsValue,\n    vk_js: JsValue,\n) -> Result<Vec<JsValue>, JsValue> {\n    let proof_bytes = proof_js.dyn_into::<Uint8Array>().map(|arr| arr.to_vec())?;\n    let public_inputs_bytes = public_inputs_js\n        .dyn_into::<Uint8Array>()\n        .map(|arr| arr.to_vec())?;\n    let vk_bytes = vk_js.dyn_into::<Uint8Array>().map(|arr| arr.to_vec())?;\n    let vk = HonkVerificationKey::from_bytes(&vk_bytes).map_err(|s| JsValue::from_str(&s))?;\n\n    let proof = ZKHonkProof::from_bytes(&proof_bytes, &public_inputs_bytes, vk.log_circuit_size)\n        .map_err(|s| JsValue::from_str(&s))?;\n\n    let honk_calldata_biguint = zk_honk::get_zk_honk_calldata(&proof, &vk);\n\n    let honk_calldata_js = honk_calldata_biguint?\n        .into_iter()\n        .map(biguint_to_jsvalue)\n        .collect::<Vec<_>>();\n\n    Ok(honk_calldata_js)\n}\n\n#[wasm_bindgen]\npub fn poseidon_hash(x: JsValue, y: JsValue) -> Result<JsValue, JsValue> {\n    // Convert hex strings to field elements, handling potential errors\n\n    let x_biguint =\n        jsvalue_to_biguint(x).map_err(|_| JsValue::from_str(\"Failed to parse x input as hex\"))?;\n    let x_fe = element_from_biguint::<GrumpkinPrimeField>(&x_biguint);\n\n    let y_biguint =\n        jsvalue_to_biguint(y).map_err(|_| JsValue::from_str(\"Failed to parse y input as hex\"))?;\n    let y_fe = element_from_biguint::<GrumpkinPrimeField>(&y_biguint);\n\n    // Compute hash\n    let result = poseidon_hash_bn254(&x_fe, &y_fe);\n    let res_biguint = element_to_biguint::<GrumpkinPrimeField>(&result);\n    // Convert result to hex string\n    Ok(biguint_to_jsvalue(res_biguint))\n}\n\n#[allow(dead_code)]\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use crate::definitions::CurveParamsProvider;\n    use js_sys::Object;\n    use num_bigint::BigUint;\n    use wasm_bindgen_test::wasm_bindgen_test;\n\n    // This test runs only in wasm32-unknown-unknown targets\n    // wasm-pack test --node --release --no-default-features\n    #[wasm_bindgen_test]\n    pub fn test_biguint_marshalling() {\n        let v = 31415usize;\n        assert_eq!(\n            jsvalue_to_biguint(biguint_to_jsvalue(BigUint::from(v))).unwrap(),\n            BigUint::from(v)\n        );\n    }\n\n    #[wasm_bindgen_test]\n    pub fn test_to_weierstrass_and_back() {\n        let curve = X25519PrimeField::get_curve_params();\n\n        let x_weirstrass = curve.g_x;\n        let y_weirstrass = curve.g_y;\n\n        let (x_twisted, y_twisted) =\n            X25519PrimeField::to_twistededwards(x_weirstrass.clone(), y_weirstrass.clone());\n        let (x_weirstrass_back, y_weirstrass_back) =\n            X25519PrimeField::to_weirstrass(x_twisted, y_twisted);\n\n        assert_eq!(x_weirstrass, x_weirstrass_back);\n        assert_eq!(y_weirstrass, y_weirstrass_back);\n    }\n\n    #[wasm_bindgen_test]\n    pub fn test_to_twistededwards_and_back_from_js() {\n        let curve = X25519PrimeField::get_curve_params();\n\n        let x_weirstrass = curve.g_x;\n        let y_weirstrass = curve.g_y;\n\n        let x_weirstrass_js =\n            biguint_to_jsvalue(element_to_biguint::<X25519PrimeField>(&x_weirstrass));\n        let y_weirstrass_js =\n            biguint_to_jsvalue(element_to_biguint::<X25519PrimeField>(&y_weirstrass));\n        let result_js = to_twistededwards(x_weirstrass_js, y_weirstrass_js).unwrap();\n        assert_eq!(result_js.len(), 2);\n\n        let x_twisted_js = result_js.get(0).unwrap();\n        let y_twisted_js = result_js.get(1).unwrap();\n\n        let x_twisted_biguint = jsvalue_to_biguint(x_twisted_js.clone()).unwrap();\n        let y_twisted_biguint = jsvalue_to_biguint(y_twisted_js.clone()).unwrap();\n\n        let x_twisted = element_from_biguint::<X25519PrimeField>(&x_twisted_biguint);\n        let y_twisted = element_from_biguint::<X25519PrimeField>(&y_twisted_biguint);\n\n        let (x_weirstrass_back, y_weirstrass_back) =\n            X25519PrimeField::to_weirstrass(x_twisted, y_twisted);\n\n        assert_eq!(x_weirstrass, x_weirstrass_back);\n        assert_eq!(y_weirstrass, y_weirstrass_back);\n    }\n\n    #[wasm_bindgen_test]\n    pub fn test_get_groth16_calldata() {\n        let proof_js = mock_proof_js();\n        assert!(proof_js.is_object(), \"Failed to parse proof\");\n\n        let vk_js = mock_vk_js();\n        assert!(vk_js.is_object(), \"Failed to parse Verifying Key\");\n        let curve_id_js = JsValue::from_f64(0.0);\n\n        let result = get_groth16_calldata(proof_js, vk_js, curve_id_js);\n\n        assert!(\n            result.is_ok(),\n            \"Expected successful result, got {:?}\",\n            result\n        );\n        let result_values = result.unwrap();\n\n        // Add specific assertions here to validate expected output structure or content\n        assert!(\n            !result_values.is_empty(),\n            \"Expected non-empty result values\"\n        );\n    }\n\n    // Mock helper to create G1 and G2 points as JsValues\n    fn mock_g1_point(x: &str, y: &str) -> JsValue {\n        let obj = Object::new();\n        js_sys::Reflect::set(&obj, &JsValue::from_str(\"x\"), &JsValue::from_str(x)).unwrap();\n        js_sys::Reflect::set(&obj, &JsValue::from_str(\"y\"), &JsValue::from_str(y)).unwrap();\n        obj.into()\n    }\n\n    fn mock_g2_point(x0: &str, x1: &str, y0: &str, y1: &str) -> JsValue {\n        let obj = Object::new();\n        let x_tuple = Array::of2(&JsValue::from_str(x0), &JsValue::from_str(x1));\n        let y_tuple = Array::of2(&JsValue::from_str(y0), &JsValue::from_str(y1));\n        js_sys::Reflect::set(&obj, &JsValue::from_str(\"x\"), &x_tuple).unwrap();\n        js_sys::Reflect::set(&obj, &JsValue::from_str(\"y\"), &y_tuple).unwrap();\n        obj.into()\n    }\n\n    fn mock_proof_js() -> JsValue {\n        let obj = Object::new();\n        js_sys::Reflect::set(\n            &obj,\n            &JsValue::from_str(\"a\"),\n            &mock_g1_point(\n                \"0x2abaae3dd6e4c662f5e071bca525a26d21e2400d01d02c87bce2e8363285990a\",\n                \"0x24211ff0aa742a6dd1651aadce6f72757beb89de2cff83a6162de7c15674c2\",\n            ),\n        )\n        .unwrap();\n        js_sys::Reflect::set(\n            &obj,\n            &JsValue::from_str(\"b\"),\n            &mock_g2_point(\n                \"0x2335f1564c154d7a2ec5d11faf6d991a205bef2858f1687976d0a46502f5224a\",\n                \"0x223af0bb0912d8ebc535ed489d06cd01fcf4a8ab4596cc28164edf9041d97080\",\n                \"0x182e8fd86a44983de1d1d9dc4f12f134535b75d39f7aeb21adbf57e1a32ee603\",\n                \"0xecb11668a0dd5d5031b0837e62ba14222b45718dc101c1278f44a9ed823c16b\",\n            ),\n        )\n        .unwrap();\n        js_sys::Reflect::set(\n            &obj,\n            &JsValue::from_str(\"c\"),\n            &mock_g1_point(\n                \"0x290243624a4c11868e7cb0c0f7cfd690dac08e4205d19795b0a8f686dddcdfd6\",\n                \"0x15de00cc8af159fbdbdc802592e83e1ac61a8026b97e8889b8c5def59ec50b16\",\n            ),\n        )\n        .unwrap();\n\n        let public_inputs = Array::new();\n        public_inputs.push(&JsValue::from_str(\n            \"0x1e17db88c1d2e83e49f692cce4bb8169309de90afb2b141156243106aa34b474\",\n        ));\n        js_sys::Reflect::set(&obj, &JsValue::from_str(\"publicInputs\"), &public_inputs).unwrap();\n\n        obj.into()\n    }\n\n    fn mock_vk_js() -> JsValue {\n        let obj = Object::new();\n        js_sys::Reflect::set(\n            &obj,\n            &JsValue::from_str(\"alpha\"),\n            &mock_g1_point(\n                \"0xef3cb41414ad20b4fc5891f6b41a263d9f0c0509ee5ab16f866ff6a33fb9e73\",\n                \"0x1b30646c7d96cf7830a42b1f2f7c0527c38601f1030674b0f14cf7c67de5027b\",\n            ),\n        )\n        .unwrap();\n        js_sys::Reflect::set(\n            &obj,\n            &JsValue::from_str(\"beta\"),\n            &mock_g2_point(\n                \"0x21f7077b68f4faa9dcbfdc868e9a0b5c76eb0d62b919772a83b34a8bc1108489\",\n                \"0x8693a2418c12721dddb0d4f9f3811645c372de7400061b6c6cebc4b3b799bb2\",\n                \"0x3062e0c71d392fb15f33a8d7f87bf689709cb28f87d554e29dc92d92d1b0ce46\",\n                \"0x4976fda5a1cd2a69e5b4fd77116cf638be2063a3359e40d8f3e8ec0c90ffd90\",\n            ),\n        )\n        .unwrap();\n        js_sys::Reflect::set(\n            &obj,\n            &JsValue::from_str(\"gamma\"),\n            &mock_g2_point(\n                \"0x3541dacedd860ef884359c76cc9c6b81d289d3389e732f5f87195d15a4ce637\",\n                \"0x2eb7d1fa8416da97272d9cc4aa2e71146c83c13be313e222b376d9a9da02f080\",\n                \"0x8dce093ad7f7fe20efcb8bbb160b0f2ecb7cd98a7d48b949e86c8b00eef73f9\",\n                \"0x29a4b793edc639746eb4af5910b954a713c49174d917839a146ea15cd7493f1d\",\n            ),\n        )\n        .unwrap();\n        js_sys::Reflect::set(\n            &obj,\n            &JsValue::from_str(\"delta\"),\n            &mock_g2_point(\n                \"0x34fc9ba8eba1e49185580c9ee198f6cac8bc78463d786683ef471af4434acdc\",\n                \"0x17f115a16975c6f261912be284ecae3a3f0899bb161153d19ebc7f594246b9b0\",\n                \"0x17fd1ad43bbc8ef931c92abab72ef0ed83a3c195b4dbc7294e1eacf59b3e2054\",\n                \"0x1bd7d75bf918b6766ff9481052ddb780a4cc43da055b6e98c187b34ca3e7cd1b\",\n            ),\n        )\n        .unwrap();\n\n        let ic_array = Array::new();\n        ic_array.push(&mock_g1_point(\n            \"0x124e30bf4dff3ae9c9da665a8bebfd01ce6489a462587fa0f6c879156e7390bc\",\n            \"0x1fdc3a96cea49b085e101dd2383fdc600dcb4a3450c0471724e1b022791c7532\",\n        ));\n        ic_array.push(&mock_g1_point(\n            \"0x164668f89d9d6c6126a8465790ba44ddb5716750edaa0ed100691cceb974c6a1\",\n            \"0x1d9c7309625ec7cf153290e7b5c8497412386c61f3d9d0426a702f368be936da\",\n        ));\n        js_sys::Reflect::set(&obj, &JsValue::from_str(\"ic\"), &ic_array).unwrap();\n\n        obj.into()\n    }\n\n    #[wasm_bindgen_test]\n    fn test_poseidon_hash() {\n        // Test with valid inputs\n        let x_js = JsValue::from_str(\"1\");\n        let y_js = JsValue::from_str(\"2\");\n        let result = poseidon_hash(x_js, y_js);\n        let expected_js = biguint_to_jsvalue(\n            BigUint::from_str_radix(\n                \"115CC0F5E7D690413DF64C6B9662E9CF2A3617F2743245519E19607A4417189A\",\n                16,\n            )\n            .unwrap(),\n        );\n        assert_eq!(result.unwrap(), expected_js);\n    }\n}\n"
  },
  {
    "path": "tools/make/bytecode_check.sh",
    "content": "#!/bin/bash\n\n# Store the original working directory\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_ROOT=\"$(cd \"$SCRIPT_DIR/../..\" && pwd)\"\n\ncd \"$PROJECT_ROOT/src/contracts\"\necho \"----------------------------------------\"\n\nget_target_dir() {\n    local contract_folder_path=$1\n    local metadata\n    local target_dir\n\n    # Get absolute path of the contract folder\n    local abs_contract_path=\"$PROJECT_ROOT/src/contracts/$contract_folder_path\"\n\n    # Change to the contract directory and run scarb metadata\n    metadata=$(cd \"$abs_contract_path\" && scarb metadata --format-version 1 2>/dev/null)\n\n    if [[ $? -ne 0 ]] || [[ -z \"$metadata\" ]]; then\n        return 1\n    fi\n\n    # Extract the target_dir from the JSON output\n    target_dir=$(echo \"$metadata\" | jq -r '.target_dir' 2>/dev/null)\n\n    if [[ -z \"$target_dir\" ]] || [[ \"$target_dir\" == \"null\" ]]; then\n        return 1\n    fi\n\n    # The target_dir from metadata is usually an absolute path to the workspace target\n    # We need to append \"/dev\" to get the dev build directory\n    if [[ \"$target_dir\" == */ ]]; then\n        echo \"${target_dir}dev\"\n    else\n        echo \"${target_dir}/dev\"\n    fi\n}\n\n# Function to build and check bytecode length\ncheck_bytecode_length() {\n    local contract_dir=$1\n    local target_dir\n    local abs_contract_path=\"$PROJECT_ROOT/src/contracts/$contract_dir\"\n\n    target_dir=$(get_target_dir \"$contract_dir\")\n    if [[ $? -ne 0 ]] || [[ -z \"$target_dir\" ]]; then\n        echo \"Error: Could not determine target directory for $contract_dir\"\n        echo \"----------------------------------------\"\n        return 1\n    fi\n\n    # echo \"target_dir: $target_dir\"\n    cd \"$abs_contract_path\"\n    scarb build\n\n    # Find the compiled contract class JSON file\n    # Find the files that start with the base name of the contract directory and end with \"compiled_contract_class.json\", with anything in between\n    # ex : target/dev/groth16_example_bls12_381_Groth16VerifierBLS12_381.compiled_contract_class.json\n\n    compiled_file=$(find \"$target_dir\" -type f -name \"$(basename \"$contract_dir\")*.compiled_contract_class.json\" -print -quit 2>/dev/null)\n    if [[ -f \"$compiled_file\" ]]; then\n        bytecode_length=$(jq '.bytecode | length' \"$compiled_file\" 2>/dev/null)\n        if [[ -n \"$bytecode_length\" ]] && [[ \"$bytecode_length\" != \"null\" ]]; then\n            # Color the output: use green for the bytecode length line\n            echo -e \"\\e[32mBytecode length [$contract_dir] = $bytecode_length\\e[0m\"\n        else\n            echo \"Error: Could not read bytecode length from $compiled_file\"\n        fi\n        echo \"----------------------------------------\"\n    else\n        echo \"Compiled contract class JSON not found in $contract_dir\"\n        echo \"Searched in: $target_dir\"\n        echo \"Pattern: $(basename \"$contract_dir\")*.compiled_contract_class.json\"\n        echo \"----------------------------------------\"\n    fi\n}\n\n# List of contract directories\ncontracts=(\n    \"autogenerated/groth16_example_bn254\"\n    \"autogenerated/groth16_example_bls12_381\"\n    \"autogenerated/noir_ultra_keccak_zk_honk_example\"\n    \"universal_ecip\"\n    \"drand_quicknet\"\n    \"autogenerated/risc0_verifier_bn254\"\n)\n\n# Run sequentially - this is reliable and fast enough\nfor contract in \"${contracts[@]}\"; do\n    check_bytecode_length \"$contract\"\ndone\n"
  },
  {
    "path": "tools/make/bytecode_check_max_log_n.sh",
    "content": "#!/bin/bash\necho \"Cleaning up max log n contracts\"\nrm -rf src/contracts/autogenerated/ultra_keccak_zk_honk_max_log_n\n\necho \"Generating max log n contracts\"\npython hydra/garaga/starknet/honk_contract_generator/generator_honk.py --max-log-n\n\ncd src/contracts\necho \"----------------------------------------\"\necho \"Checking bytecode length\"\n\n# Maximum allowed bytecode length\nMAX_BYTECODE_LENGTH=81290  # Adjust this value as needed\n\n# Function to get bytecode length\nget_bytecode_length() {\n    local contract_dir=$1\n    local bytecode_length=0\n\n    cd \"$contract_dir\" || return 1\n    # Redirect scarb build output to /dev/null to avoid mixing with our output\n    scarb build > /dev/null 2>&1\n\n    # Find the compiled contract class JSON file\n    compiled_file=$(find ./target/dev -name '*.compiled_contract_class.json' -print -quit)\n    if [[ -f \"$compiled_file\" ]]; then\n        bytecode_length=$(jq '.bytecode | length' \"$compiled_file\")\n    else\n        echo \"Error: Compiled contract class JSON not found in $contract_dir\" >&2\n        cd ../\n        return 1\n    fi\n\n    cd ../\n    echo \"$bytecode_length\"\n    return 0\n}\n\n# Function to print bytecode length\nprint_bytecode_length() {\n    local contract_dir=$1\n    local length=$2\n    echo -e \"\\e[32mBytecode length [$contract_dir] = $length (max: $MAX_BYTECODE_LENGTH)\\e[0m\"\n    echo \"----------------------------------------\"\n}\n\n# List of contract directories\ncontracts=(\n    \"autogenerated/ultra_keccak_zk_honk_max_log_n\"\n)\n\n# Check each contract\nresults=()\nfor contract in \"${contracts[@]}\"; do\n    length=$(get_bytecode_length \"$contract\")\n    if [ $? -eq 0 ]; then\n        print_bytecode_length \"$contract\" \"$length\"\n        results+=(\"$length\")\n    else\n        echo \"Error checking bytecode length for $contract\" >&2\n        exit 1\n    fi\ndone\n\n# Check if all bytecode lengths are below the limit\nall_below_limit=true\nfor length in \"${results[@]}\"; do\n    if [ \"$length\" -gt \"$MAX_BYTECODE_LENGTH\" ]; then\n        all_below_limit=false\n        break\n    fi\ndone\n\nrm -rf autogenerated/ultra_keccak_zk_honk_max_log_n\n\n\n# Return true/false based on the check\nif [ \"$all_below_limit\" = true ]; then\n    echo \"true\"\n    exit 0\nelse\n    echo \"false\"\n    exit 1\nfi\n"
  },
  {
    "path": "tools/make/check_sierra_size.py",
    "content": "import json\n\ndata = json.load(\n    open(\"src/cairo/target/dev/garaga_contracts_Garaga.contract_class.json\")\n)\n\nprint(len(data[\"sierra_program\"]))\n"
  },
  {
    "path": "tools/make/ci_cairo.sh",
    "content": "#!/bin/bash\n\nsource $(dirname \"$0\")/common.sh\n\nrun_ci_workflow \".github/workflows/cairo.yml\"\n"
  },
  {
    "path": "tools/make/ci_e2e.sh",
    "content": "#!/bin/bash\n\nsource $(dirname \"$0\")/common.sh\n\nrun_ci_workflow \".github/workflows/e2e.yml\"\n"
  },
  {
    "path": "tools/make/ci_hydra.sh",
    "content": "#!/bin/bash\n\nsource $(dirname \"$0\")/common.sh\n\nrun_ci_workflow \".github/workflows/hydra.yml\"\n"
  },
  {
    "path": "tools/make/ci_wasm.sh",
    "content": "#!/bin/bash\n\nsource $(dirname \"$0\")/common.sh\n\nrun_ci_workflow \".github/workflows/wasm.yml\"\n"
  },
  {
    "path": "tools/make/common.sh",
    "content": "#!/bin/bash\n\n# Function to check for 'act' or 'gh act' and execute the appropriate command\nrun_ci_workflow() {\n    local workflow_file=$1\n\n    if command -v act &> /dev/null\n    then\n        act -W $workflow_file --secret-file .secrets\n    elif command -v gh &> /dev/null && gh act --version &> /dev/null\n    then\n        gh act -W $workflow_file --secret-file .secrets\n    else\n        echo \"Error: Neither 'act' nor 'gh act' command found. Please install one of them to proceed.\"\n        exit 1\n    fi\n}\n"
  },
  {
    "path": "tools/make/constants.json",
    "content": "{\n    \"risc0\": {\n        \"control_root\": \"0xCE52BF56033842021AF3CF6DB8A50D1B7535C125A34F1A22C6FDCF002C5A1529\",\n        \"bn254_control_id\": \"0x04446E66D300EB7FB45C9726BB53C793DDA407A62E9601618BB43C5C14657AC0\",\n        \"system_state_zero_digest\": \"0xA3ACC27117418996340B84E5A90F3EF4C49D22C79E44AAD822EC9C313E1EB8E2\",\n        \"tag_digest\": \"0xcb1fefcd1f2d9a64975cbbbf6e161e2914434b0cbb9960b84df5d717e86b48af\",\n        \"output_tag\": \"0x77eafeb366a78b47747de0d7bb176284085ff5564887009a5be63da32d3559d4\"\n    },\n    \"sp1\": {\n        \"verifier_version\": \"v5.0.0\",\n        \"verifier_hash\": \"0xa4594c59bbc142f3b81c3ecb7f50a7c34bc9af7c4c444b5d48b795427e285913\"\n    },\n    \"release_info\": {\n        \"garaga_version\": \"1.1.0\",\n        \"risc0_release\": \"v2.2.2\",\n        \"cairo_version\": \"2.16.1\",\n        \"starknet_foundry_version\": \"0.57.0\"\n    },\n    \"noir\": {\n        \"bb_version\": \"3.0.0-nightly.20251104\",\n        \"bbup_version\": \"3.0.0-nightly.20251104\",\n        \"nargo_version\": \"1.0.0-beta.16\"\n    }\n}\n"
  },
  {
    "path": "tools/make/generate_constants.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nGenerate language-specific constants from constants.json and sync version numbers across files.\n\"\"\"\n\nimport json\nimport logging\nimport os\nimport re\nimport subprocess\nimport sys\nfrom dataclasses import dataclass\nfrom pathlib import Path\nfrom typing import Any, Dict, Optional, Protocol\n\nfrom garaga.starknet.groth16_contract_generator.parsing_utils import Groth16VerifyingKey\n\n\nclass FormatterProtocol(Protocol):\n    \"\"\"Protocol for code formatters.\"\"\"\n\n    def format_file(self, file_path: str, cwd: Optional[str] = None) -> bool:\n        \"\"\"Format a file. Returns True if successful, False otherwise.\"\"\"\n        ...\n\n\nclass SubprocessFormatter:\n    \"\"\"Formatter that uses external subprocess commands.\"\"\"\n\n    def __init__(self, cmd: list[str], name: str):\n        self.cmd = cmd\n        self.name = name\n\n    def format_file(self, file_path: str, cwd: Optional[str] = None) -> bool:\n        \"\"\"Format a file using subprocess command.\"\"\"\n        print(f\"Formatting {file_path} with {self.name}\")\n        try:\n            cmd = self.cmd + [file_path]\n            subprocess.run(cmd, check=True, capture_output=True, text=True, cwd=cwd)\n            logger.info(f\"Successfully formatted with {self.name}\")\n            return True\n        except subprocess.CalledProcessError as e:\n            logger.warning(f\"{self.name} formatting failed: {e.stderr}\")\n            return False\n        except FileNotFoundError:\n            logger.warning(f\"{self.name} not found - skipping formatting\")\n            return False\n        except Exception as e:\n            logger.warning(f\"Unexpected error running {self.name}: {e}\")\n            return False\n\n\nfrom rich.logging import RichHandler\n\n# Configure logging with rich for color-based level printing\nlogging.basicConfig(\n    level=logging.INFO,\n    format=\"%(asctime)s - %(name)s - %(levelname)s - %(message)s\",\n    handlers=[\n        RichHandler(),\n    ],\n)\nlogger = logging.getLogger(__name__)\n\n\nclass ConstantsError(Exception):\n    \"\"\"Base exception for constants generation errors.\"\"\"\n\n\nclass VKError(ConstantsError):\n    \"\"\"Raised when verification key processing fails.\"\"\"\n\n\n@dataclass(frozen=True)\nclass UpdateConfig:\n    \"\"\"Configuration for version update operations.\"\"\"\n\n    name: str\n    pattern: str\n    replacement: str\n    description: str = \"\"\n    version_key: str = (\n        \"garaga_version\"  # Default to garaga_version for backward compatibility\n    )\n\n    def apply_update(self, content: str, version: str) -> tuple[str, bool]:\n        \"\"\"Apply the update to content and return (new_content, changed).\"\"\"\n        replacement = self.replacement.replace(\"{version}\", version)\n        new_content = re.sub(self.pattern, replacement, content)\n        return new_content, content != new_content\n\n\n@dataclass(frozen=True)\nclass VKConfig:\n    \"\"\"Configuration for verification key updates.\"\"\"\n\n    name: str\n    json_filename: str\n    function_name: str\n\n    def get_json_path(self, project_root: Path) -> Path:\n        return (\n            project_root\n            / \"hydra\"\n            / \"garaga\"\n            / \"starknet\"\n            / \"groth16_contract_generator\"\n            / \"examples\"\n            / self.json_filename\n        )\n\n    def get_function_pattern(self) -> str:\n        \"\"\"Generate the regex pattern for this VK function.\"\"\"\n        return (\n            f\"(pub fn {self.function_name}\\\\(\\\\) -> Groth16VerificationKey \\\\{{\\\\s*let vk_hex = \\\\[)\"\n            \"([\\\\s\\\\S]*?)\"\n            \"(\\\\];\\\\s*Groth16VerificationKey::from\\\\([\\\\s\\\\S]*?\\\\}\\\\s*\\\\})\"\n        )\n\n\n# VK Configurations - simplified with pattern generation\nSP1_VK_CONFIG = VKConfig(\n    name=\"SP1\",\n    json_filename=\"vk_sp1.json\",\n    function_name=\"get_sp1_vk\",\n)\n\nRISC0_VK_CONFIG = VKConfig(\n    name=\"RISC0\",\n    json_filename=\"vk_risc0.json\",\n    function_name=\"get_risc0_vk\",\n)\n\n\n@dataclass(frozen=True)\nclass PathConfig:\n    \"\"\"Configuration for all file paths used in the script.\"\"\"\n\n    project_root: Path\n\n    @property\n    def python_output(self) -> Path:\n        return self.project_root / \"hydra\" / \"garaga\" / \"starknet\" / \"constants.py\"\n\n    @property\n    def rust_output(self) -> Path:\n        return self.project_root / \"tools\" / \"garaga_rs\" / \"src\" / \"constants.rs\"\n\n    @property\n    def typescript_output(self) -> Path:\n        return (\n            self.project_root / \"tools\" / \"npm\" / \"garaga_ts\" / \"src\" / \"constants.ts\"\n        )\n\n    @property\n    def readme_path(self) -> Path:\n        return self.project_root / \"docs\" / \"PYPI_README.md\"\n\n    @property\n    def pyproject_path(self) -> Path:\n        return self.project_root / \"pyproject.toml\"\n\n    @property\n    def garaga_rs_cargo_path(self) -> Path:\n        return self.project_root / \"tools\" / \"garaga_rs\" / \"Cargo.toml\"\n\n    @property\n    def package_json_path(self) -> Path:\n        return self.project_root / \"tools\" / \"npm\" / \"garaga_ts\" / \"package.json\"\n\n    @property\n    def npm_readme_path(self) -> Path:\n        return self.project_root / \"tools\" / \"npm\" / \"garaga_ts\" / \"README.md\"\n\n    @property\n    def noir_smart_contract_docs_path(self) -> Path:\n        return (\n            self.project_root\n            / \"docs\"\n            / \"gitbook\"\n            / \"smart-contract-generators\"\n            / \"noir.md\"\n        )\n\n    @property\n    def groth16_rust_file(self) -> Path:\n        return (\n            self.project_root\n            / \"tools\"\n            / \"garaga_rs\"\n            / \"src\"\n            / \"calldata\"\n            / \"full_proof_with_hints\"\n            / \"groth16.rs\"\n        )\n\n\n# File path to update config mappings\nVERSION_UPDATES = [\n    (\n        \"PYPI README\",\n        \"readme_path\",\n        UpdateConfig(\n            name=\"PYPI README\",\n            pattern=r\"(pip\\s+install\\s+garaga==)[\\d]+\\.[\\d]+\\.[\\d]+(?:[\\w\\-\\.]*)?\",\n            replacement=r\"\\g<1>{version}\",\n            description=\"pip install commands\",\n        ),\n    ),\n    (\n        \"pyproject.toml\",\n        \"pyproject_path\",\n        UpdateConfig(\n            name=\"pyproject.toml\",\n            pattern=r'(version\\s*=\\s*[\"\\'])[\\d]+\\.[\\d]+\\.[\\d]+(?:[\\w\\-\\.]*)?([\"\\'])',\n            replacement=r\"\\g<1>{version}\\g<2>\",\n            description=\"Python package version\",\n        ),\n    ),\n    (\n        \"Cargo.toml\",\n        \"garaga_rs_cargo_path\",\n        UpdateConfig(\n            name=\"Cargo.toml\",\n            pattern=r'(\\[package\\].*?^version\\s*=\\s*[\"\\'])[\\d]+\\.[\\d]+\\.[\\d]+(?:[\\w\\-\\.]*)?([\"\\'])',\n            replacement=r\"\\g<1>{version}\\g<2>\",\n            description=\"Rust package version\",\n        ),\n    ),\n    (\n        \"package.json\",\n        \"package_json_path\",\n        UpdateConfig(\n            name=\"package.json\",\n            pattern=r'(\"version\"\\s*:\\s*[\"\\'])[\\d]+\\.[\\d]+\\.[\\d]+(?:[\\w\\-\\.]*)?([\"\\'])',\n            replacement=r\"\\g<1>{version}\\g<2>\",\n            description=\"NPM package version\",\n        ),\n    ),\n    (\n        \"npm README\",\n        \"npm_readme_path\",\n        UpdateConfig(\n            name=\"npm README\",\n            pattern=r\"(📋 \\*\\*For complete API documentation.*?)v[\\d]+\\.[\\d]+\\.[\\d]+(?:[\\w\\-\\.]*)?(/tools/npm/garaga_ts/src/node/api\\.ts)\",\n            replacement=r\"\\g<1>v{version}\\g<2>\",\n            description=\"API documentation links\",\n        ),\n    ),\n    (\n        \"Noir version in smart contract docs\",\n        \"noir_smart_contract_docs_path\",\n        UpdateConfig(\n            name=\"Noir version in smart contract docs\",\n            pattern=r\"(\\* Noir\\s+)[\\d]+\\.[\\d]+\\.[\\d]+[-\\w\\.]*(\\s+\\(install with `noirup --version\\s+)[\\d]+\\.[\\d]+\\.[\\d]+[-\\w\\.]*(`\\s+or `npm i @noir-lang/noir_js@)[\\d]+\\.[\\d]+\\.[\\d]+[-\\w\\.]*(`\\s*\\))\",\n            replacement=r\"\\g<1>{version}\\g<2>{version}\\g<3>{version}\\g<4>\",\n            description=\"Noir version in smart contract generator documentation\",\n            version_key=\"nargo_version\",\n        ),\n    ),\n    (\n        \"BB version in smart contract docs\",\n        \"noir_smart_contract_docs_path\",\n        UpdateConfig(\n            name=\"BB version in smart contract docs\",\n            pattern=r\"(\\* Barretenberg\\s+)[\\d]+\\.[\\d]+\\.[\\d]+[-\\w\\.]*(\\s+\\(install with `bbup --version\\s+)[\\d]+\\.[\\d]+\\.[\\d]+[-\\w\\.]*(`\\s+or `npm i @aztec/bb\\.js@)[\\d]+\\.[\\d]+\\.[\\d]+[-\\w\\.]*(`\\s+\\))\",\n            replacement=r\"\\g<1>{version}\\g<2>{version}\\g<3>{version}\\g<4>\",\n            description=\"Barretenberg version in smart contract generator documentation\",\n            version_key=\"bb_version\",\n        ),\n    ),\n]\n\nVK_UPDATES = [\n    (\"SP1 VK in Rust\", SP1_VK_CONFIG),\n    (\"RISC0 VK in Rust\", RISC0_VK_CONFIG),\n]\n\n\ndef load_constants() -> Dict[str, Any]:\n    \"\"\"Load constants from the centralized JSON file.\"\"\"\n    constants_file = Path(__file__).parent / \"constants.json\"\n\n    try:\n        if not constants_file.exists():\n            raise ConstantsError(f\"Constants file not found: {constants_file}\")\n\n        with open(constants_file, \"r\") as f:\n            constants = json.load(f)\n\n        # Basic validation\n        required_keys = [\"risc0\", \"sp1\", \"release_info\", \"noir\"]\n        missing_keys = [key for key in required_keys if key not in constants]\n        if missing_keys:\n            raise ConstantsError(\n                f\"Missing required keys in constants.json: {missing_keys}\"\n            )\n\n        logger.info(f\"Successfully loaded constants from {constants_file}\")\n        return constants\n\n    except (json.JSONDecodeError, IOError) as e:\n        raise ConstantsError(f\"Failed to load constants from {constants_file}: {e}\")\n    except Exception as e:\n        raise ConstantsError(f\"Unexpected error loading constants: {e}\")\n\n\n@dataclass(frozen=True)\nclass LanguageConfig:\n    \"\"\"Configuration for language-specific code generation.\"\"\"\n\n    name: str\n    comment_prefix: str\n    constant_template: str\n    formatter: FormatterProtocol\n\n\n# Language-specific configurations\nCOMMON_FILE_HEADER = (\n    \"Auto-generated constants file from constants.json. Do not edit manually.\"\n)\n\nLANGUAGE_CONFIGS = [\n    LanguageConfig(\n        name=\"Python\",\n        comment_prefix=\"#\",\n        constant_template=\"{name} = {value}\",\n        formatter=SubprocessFormatter([\"black\"], \"black\"),\n    ),\n    LanguageConfig(\n        name=\"Rust\",\n        comment_prefix=\"//\",\n        constant_template=\"pub const {name}: &str = {value};\",\n        formatter=SubprocessFormatter([\"cargo\", \"fmt\", \"--\"], \"cargo fmt\"),\n    ),\n    LanguageConfig(\n        name=\"TypeScript\",\n        comment_prefix=\"//\",\n        constant_template=\"export const {name}: string = {value};\",\n        formatter=SubprocessFormatter(\n            [\"npx\", \"prettier\", \"--write\"], \"prettier (ensure it's installed)\"\n        ),\n    ),\n]\n\n\ndef hex_to_uint8array_literal(hex_str: str) -> str:\n    \"\"\"Convert a hex string like '0xABCD...' to 'new Uint8Array([0xAB, 0xCD, ...])'.\"\"\"\n    raw = hex_str.removeprefix(\"0x\").removeprefix(\"0X\")\n    byte_values = [f\"0x{raw[i:i+2].upper()}\" for i in range(0, len(raw), 2)]\n    # Format in rows of 16 for readability\n    rows = []\n    for i in range(0, len(byte_values), 16):\n        rows.append(\"    \" + \", \".join(byte_values[i : i + 16]))\n    return \"new Uint8Array([\\n\" + \",\\n\".join(rows) + \"\\n])\"\n\n\ndef safe_read_file(file_path: str) -> str:\n    \"\"\"Safely read a file with proper error handling.\"\"\"\n    try:\n        with open(file_path, \"r\", encoding=\"utf-8\") as f:\n            return f.read()\n    except IOError as e:\n        raise ConstantsError(f\"Failed to read {file_path}: {e}\")\n\n\ndef safe_write_file(file_path: str, content: str) -> None:\n    \"\"\"Safely write to a file with proper error handling.\"\"\"\n    try:\n        os.makedirs(os.path.dirname(file_path), exist_ok=True)\n        with open(file_path, \"w\", encoding=\"utf-8\") as f:\n            f.write(content)\n    except IOError as e:\n        raise ConstantsError(f\"Failed to write {file_path}: {e}\")\n\n\ndef generate_unified_constants(\n    constants: Dict[str, Any], config: LanguageConfig\n) -> str:\n    \"\"\"Generate constants file content using unified template.\"\"\"\n\n    # Build content sections\n    lines = []\n\n    # File header\n    if config.name == \"Python\":\n        lines.extend(['\"\"\"', COMMON_FILE_HEADER, '\"\"\"', \"\"])\n    elif config.name == \"TypeScript\":\n        lines.extend(\n            [\"/**\", \" * \" + COMMON_FILE_HEADER.replace(\"\\n\", \"\\n * \"), \" */\", \"\"]\n        )\n    else:  # Rust\n        lines.extend([f\"//! {line}\" for line in COMMON_FILE_HEADER.split(\"\\n\")] + [\"\"])\n\n    # Add Rust-specific imports\n    if config.name == \"Rust\":\n        lines.extend([\"use num_bigint::BigUint;\", \"use num_traits::Num;\", \"\"])\n\n    # RISC0 section\n    risc0_info = constants[\"risc0\"]\n    release_version = constants[\"release_info\"][\"risc0_release\"]\n    lines.extend(\n        [\n            f\"{config.comment_prefix} RISC0 Constants\",\n            f\"{config.comment_prefix} https://github.com/risc0/risc0-ethereum/blob/{release_version}/contracts/src/groth16/ControlID.sol\",\n            f\"{config.comment_prefix} release {release_version}\",\n        ]\n    )\n\n    if config.name == \"Rust\":\n        lines.extend(\n            [\n                \"pub fn get_risc0_constants() -> (BigUint, BigUint) {\",\n                f'    let risc0_control_root = BigUint::from_str_radix(\"{risc0_info[\"control_root\"][2:]}\", 16).unwrap();',\n                f'    let risc0_bn254_control_id = BigUint::from_str_radix(\"{risc0_info[\"bn254_control_id\"][2:]}\", 16).unwrap();',\n                \"    (risc0_control_root, risc0_bn254_control_id)\",\n                \"}\",\n            ]\n        )\n    elif config.name == \"TypeScript\":\n        lines.extend(\n            [\n                f'export const RISC0_CONTROL_ROOT = BigInt(\"{risc0_info[\"control_root\"]}\");',\n                f'export const RISC0_BN254_CONTROL_ID = BigInt(\"{risc0_info[\"bn254_control_id\"]}\");',\n            ]\n        )\n    else:  # Python\n        lines.extend(\n            [\n                f'RISC0_CONTROL_ROOT = {risc0_info[\"control_root\"]}',\n                f'RISC0_BN254_CONTROL_ID = {risc0_info[\"bn254_control_id\"]}',\n            ]\n        )\n\n    lines.append(\"\")\n\n    # SP1 section\n    sp1_info = constants[\"sp1\"]\n    lines.extend(\n        [\n            f\"{config.comment_prefix} SP1 Constants\",\n            f\"{config.comment_prefix} https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/{sp1_info['verifier_version']}/SP1VerifierGroth16.sol\",\n        ]\n    )\n\n    if config.name == \"Python\":\n        lines.extend(\n            [\n                f'SP1_VERIFIER_VERSION = \"{sp1_info[\"verifier_version\"]}\"',\n                f'SP1_VERIFIER_HASH = bytes.fromhex(\"{sp1_info[\"verifier_hash\"][2:]}\")',\n            ]\n        )\n    elif config.name == \"TypeScript\":\n        lines.extend(\n            [\n                f'export const SP1_VERIFIER_VERSION = \"{sp1_info[\"verifier_version\"]}\";',\n                f'export const SP1_VERIFIER_HASH = \"{sp1_info[\"verifier_hash\"]}\";',\n            ]\n        )\n    else:  # Rust\n        lines.extend(\n            [\n                f'pub const SP1_VERIFIER_VERSION: &str = \"{sp1_info[\"verifier_version\"]}\";',\n                f'pub const SP1_VERIFIER_HASH: &str = \"{sp1_info[\"verifier_hash\"]}\";',\n            ]\n        )\n\n    lines.append(\"\")\n\n    # Additional constants\n    lines.extend(\n        [\n            f\"{config.comment_prefix} Additional RISC0 constants for internal use\",\n        ]\n    )\n\n    if config.name == \"Python\":\n        lines.extend(\n            [\n                f'RISC0_SYSTEM_STATE_ZERO_DIGEST = \"{risc0_info[\"system_state_zero_digest\"]}\"',\n                f'RISC0_TAG_DIGEST = \"{risc0_info[\"tag_digest\"]}\"',\n                f'RISC0_OUTPUT_TAG = \"{risc0_info[\"output_tag\"]}\"',\n                f'RISC0_RELEASE_VERSION = \"{constants[\"release_info\"][\"risc0_release\"]}\"',\n            ]\n        )\n    elif config.name == \"TypeScript\":\n        lines.extend(\n            [\n                f'export const RISC0_SYSTEM_STATE_ZERO_DIGEST = {hex_to_uint8array_literal(risc0_info[\"system_state_zero_digest\"])};',\n                f'export const RISC0_TAG_DIGEST = \"{risc0_info[\"tag_digest\"]}\";',\n                f'export const RISC0_OUTPUT_TAG = \"{risc0_info[\"output_tag\"]}\";',\n            ]\n        )\n    else:  # Rust\n        lines.extend(\n            [\n                f'pub const RISC0_SYSTEM_STATE_ZERO_DIGEST: &str = \"{risc0_info[\"system_state_zero_digest\"]}\";',\n                f'pub const RISC0_TAG_DIGEST: &str = \"{risc0_info[\"tag_digest\"]}\";',\n                f'pub const RISC0_OUTPUT_TAG: &str = \"{risc0_info[\"output_tag\"]}\";',\n            ]\n        )\n\n    if config.name == \"Python\":\n        release_info = constants[\"release_info\"]\n        noir_info = constants[\"noir\"]\n        lines.extend(\n            [\n                \"\",\n                f\"{config.comment_prefix} Version info\",\n                f'CAIRO_VERSION = \"{release_info[\"cairo_version\"]}\"',\n                f'STARKNET_FOUNDRY_VERSION = \"{release_info[\"starknet_foundry_version\"]}\"',\n                f'BB_VERSION = \"{noir_info[\"bb_version\"]}\"',\n                f'BBUP_VERSION = \"{noir_info[\"bbup_version\"]}\"',\n                f'NARGO_VERSION = \"{noir_info[\"nargo_version\"]}\"',\n            ]\n        )\n\n    return \"\\n\".join(lines) + \"\\n\"\n\n\ndef generate_language_constants(\n    constants: Dict[str, Any], config: LanguageConfig, output_path: str\n) -> None:\n    \"\"\"Generate constants file for a specific language.\"\"\"\n    try:\n        content = generate_unified_constants(constants, config)\n        safe_write_file(output_path, content)\n\n        # Format if formatter available\n        if config.formatter:\n            cwd = os.path.dirname(output_path) if config.name == \"Rust\" else None\n            config.formatter.format_file(output_path, cwd)\n\n        logger.info(f\"Generated {config.name} constants: {output_path}\")\n\n    except Exception as e:\n        raise ConstantsError(f\"Failed to generate {config.name} constants: {e}\")\n\n\ndef generate_constants_by_language(\n    constants: Dict[str, Any], language: str, output_path: str\n):\n    \"\"\"Generate constants file for a specific language by name.\"\"\"\n    # Find language config\n    config = next((cfg for cfg in LANGUAGE_CONFIGS if cfg.name == language), None)\n    if not config:\n        raise ConstantsError(f\"Unknown language: {language}\")\n\n    generate_language_constants(constants, config, output_path)\n\n\ndef update_file_version(file_path: str, config: UpdateConfig, version: str) -> bool:\n    \"\"\"Generic file version update function.\"\"\"\n    try:\n        if not Path(file_path).exists():\n            logger.warning(f\"{config.name} file not found: {file_path}\")\n            return False\n\n        content = safe_read_file(file_path)\n        new_content, changed = config.apply_update(content, version)\n\n        if not changed:\n            logger.info(f\"No {config.name} update needed (already {version})\")\n            return True\n\n        safe_write_file(file_path, new_content)\n        logger.info(f\"Updated {config.name} to version {version}\")\n        return True\n\n    except Exception as e:\n        raise ConstantsError(f\"Failed to update {config.name}: {e}\")\n\n\ndef update_vk_in_rust(\n    project_root: Path, groth16_rust_file: str, config: VKConfig\n) -> bool:\n    \"\"\"Update verification key function in Rust with values from JSON.\"\"\"\n    try:\n\n        # Load and parse VK\n        vk_path = config.get_json_path(project_root)\n        if not vk_path.exists():\n            raise ConstantsError(f\"{config.name} VK file not found at {vk_path}\")\n\n        try:\n            vk = Groth16VerifyingKey.from_json(vk_path)\n            logger.info(f\"Successfully loaded {config.name} VK from {vk_path}\")\n        except Exception as e:\n            raise VKError(f\"Failed to parse {config.name} VK: {e}\")\n\n        # Process VK data\n        hex_values = [hex(value)[2:] for value in vk.flatten()]\n\n        # Format hex array\n        hex_lines = []\n        for i in range(0, len(hex_values), 4):\n            line_values = hex_values[i : i + 4]\n            formatted_line = \"        \" + \", \".join(f'\"{val}\"' for val in line_values)\n            hex_lines.append(formatted_line)\n        new_hex_array = \",\\n\".join(hex_lines) + \",\"\n\n        # Update file\n        content = safe_read_file(groth16_rust_file)\n\n        match = re.search(config.get_function_pattern(), content)\n        if not match:\n            raise VKError(f\"Could not find {config.name} VK function pattern\")\n\n        new_content = re.sub(\n            config.get_function_pattern(),\n            f\"\\\\g<1>\\n{new_hex_array}\\n    \\\\g<3>\",\n            content,\n        )\n\n        if content == new_content:\n            logger.info(f\"No {config.name} VK update needed - already current\")\n            return True\n\n        safe_write_file(groth16_rust_file, new_content)\n        logger.info(\n            f\"Updated {config.name} verification key ({len(hex_values)} values)\"\n        )\n\n        # Format with cargo\n        rust_config = next(\n            (cfg for cfg in LANGUAGE_CONFIGS if cfg.name == \"Rust\"), None\n        )\n        if rust_config:\n            rust_config.formatter.format_file(\n                groth16_rust_file, os.path.dirname(groth16_rust_file)\n            )\n\n        return True\n\n    except (VKError, ConstantsError):\n        raise\n    except Exception as e:\n        raise VKError(f\"Unexpected error updating {config.name} VK: {e}\")\n    finally:\n        if str(project_root / \"hydra\") in sys.path:\n            sys.path.remove(str(project_root / \"hydra\"))\n\n\ndef report_results(all_results: list[tuple[str, bool]]) -> int:\n    \"\"\"Report operation results and return exit code.\"\"\"\n    failed = [result for result in all_results if not result[1]]\n    successful = [result for result in all_results if result[1]]\n\n    logger.info(\n        f\"Operations completed: {len(successful)}/{len(all_results)} successful\"\n    )\n\n    if successful:\n        logger.info(\"Successful operations:\")\n        for result in successful:\n            logger.info(f\"  ✓ {result[0]}\")\n\n    if failed:\n        logger.warning(\"Failed operations:\")\n        for result in failed:\n            logger.warning(f\"  ✗ {result[0]}\")\n\n        logger.warning(f\"{len(failed)} operations failed\")\n        return 1\n    else:\n        logger.info(\"All constants files and version references updated successfully!\")\n        return 0\n\n\ndef generate_all_constants(constants: Dict[str, Any], paths: PathConfig) -> None:\n    \"\"\"Generate constants files for all languages.\"\"\"\n    generate_constants_by_language(constants, \"Python\", str(paths.python_output))\n    generate_constants_by_language(constants, \"Rust\", str(paths.rust_output))\n    generate_constants_by_language(\n        constants, \"TypeScript\", str(paths.typescript_output)\n    )\n    logger.info(\"Successfully generated all constants files\")\n\n\ndef update_all_versions(\n    constants: Dict[str, Any], paths: PathConfig\n) -> list[tuple[str, bool]]:\n    \"\"\"Update version references across all files.\"\"\"\n    results = []\n\n    for mapping in VERSION_UPDATES:\n        try:\n            file_path = str(getattr(paths, mapping[1]))\n            config = mapping[2]\n\n            # Get the appropriate version based on the version_key\n            if config.version_key == \"nargo_version\":\n                version = constants[\"noir\"][\"nargo_version\"]\n            elif config.version_key == \"bb_version\":\n                version = constants[\"noir\"][\"bb_version\"]\n            else:\n                version = constants[\"release_info\"][\"garaga_version\"]\n\n            success = update_file_version(file_path, config, version)\n            results.append((mapping[0], success))\n            if success:\n                logger.info(f\"Successfully updated {mapping[0]}\")\n            else:\n                logger.warning(f\"No updates needed for {mapping[0]}\")\n        except Exception as e:\n            logger.error(f\"Failed to update {mapping[0]}: {e}\")\n            results.append((mapping[0], False))\n\n    return results\n\n\ndef update_verification_keys(paths: PathConfig) -> list[tuple[str, bool]]:\n    \"\"\"Update verification keys in Rust code.\"\"\"\n    results = []\n\n    for mapping in VK_UPDATES:\n        try:\n            success = update_vk_in_rust(\n                paths.project_root,\n                str(paths.groth16_rust_file),\n                mapping[1],\n            )\n            results.append((mapping[0], success))\n            if success:\n                logger.info(f\"Successfully updated {mapping[0]}\")\n        except (VKError, ConstantsError) as e:\n            logger.error(f\"Failed to update {mapping[0]}: {e}\")\n            results.append((mapping[0], False))\n        except Exception as e:\n            logger.error(f\"Unexpected error updating {mapping[0]}: {e}\")\n            results.append((mapping[0], False))\n\n    return results\n\n\ndef main():\n    \"\"\"Main function to generate all constants files and update version references.\"\"\"\n    try:\n        logger.info(\"Starting constants generation and version updates...\")\n\n        # Load and validate constants\n        constants = load_constants()\n\n        # Define output paths\n        project_root = Path(__file__).parent.parent.parent\n        paths = PathConfig(project_root)\n\n        # Generate constants files\n        generate_all_constants(constants, paths)\n\n        # Update version references and verification keys\n        logger.info(\"Updating version references...\")\n        version_results = update_all_versions(constants, paths)\n\n        logger.info(\"Updating verification keys...\")\n        vk_results = update_verification_keys(paths)\n\n        # Report results and return appropriate exit code\n        all_results = version_results + vk_results\n        return report_results(all_results)\n\n    except ConstantsError as e:\n        logger.error(f\"Constants error: {e}\")\n        return 1\n    except Exception as e:\n        logger.error(f\"Unexpected error in main: {e}\")\n        return 1\n\n\nif __name__ == \"__main__\":\n    exit_code = main()\n    sys.exit(exit_code)\n"
  },
  {
    "path": "tools/make/rewrite.sh",
    "content": "#!/bin/bash\nset -e\n\nclean_dirs() {\n    rm -rf src/src/circuits/*.cairo\n    rm -rf src/contracts/autogenerated/*\n}\n\nrun_generators() {\n    python hydra/garaga/starknet/honk_contract_generator/generator_honk.py\n    python hydra/garaga/precompiled_circuits/all_circuits.py\n    python hydra/garaga/starknet/groth16_contract_generator/generator.py\n    python hydra/garaga/starknet/groth16_contract_generator/generator_risc0.py\n    python hydra/garaga/starknet/groth16_contract_generator/generator_sp1.py\n}\n\nclean_dirs\n\nstart_time=$(date +%s)\n\nif [ \"$1\" = \"no-tests\" ]; then\n    run_generators\nelse\n    rm -rf src/src/tests/autogenerated/*\n    run_generators\n    python hydra/garaga/starknet/tests_and_calldata_generators/test_writer.py\nfi\n\nelapsed=$(($(date +%s) - start_time))\necho \"Total time taken: ${elapsed} seconds\"\n"
  },
  {
    "path": "tools/make/setup.sh",
    "content": "#!/bin/bash\nset -euo pipefail\n\nPYTHON_VERSION_TARGET=\"3.14\"\n\n# Function to install GNU parallel\ninstall_parallel() {\n    case \"$OSTYPE\" in\n        linux-gnu*)\n            # Linux\n            if command -v apt-get >/dev/null; then\n                # Debian/Ubuntu\n                sudo apt-get install -y parallel\n            elif command -v dnf >/dev/null; then\n                # Fedora\n                sudo dnf install -y parallel\n            else\n                echo \"Unsupported Linux distribution for automatic parallel installation.\"\n                exit 1\n            fi\n            ;;\n        darwin*)\n            # macOS\n            if command -v brew >/dev/null; then\n                brew install parallel\n            else\n                echo \"Homebrew is not installed. Please install Homebrew and try again.\"\n                exit 1\n            fi\n            ;;\n        *)\n            echo \"Unsupported operating system for automatic parallel installation.\"\n            exit 1\n            ;;\n    esac\n}\n\n# Function to install GMP (required by fastecdsa)\ninstall_gmp() {\n    case \"$OSTYPE\" in\n        linux-gnu*)\n            if command -v apt-get >/dev/null; then\n                sudo apt-get install -y libgmp-dev\n            elif command -v dnf >/dev/null; then\n                sudo dnf install -y gmp-devel\n            else\n                echo \"Unsupported Linux distribution for automatic GMP installation.\"\n                echo \"Please install GMP manually: https://pypi.org/project/fastecdsa/#installing\"\n                exit 1\n            fi\n            ;;\n        darwin*)\n            if command -v brew >/dev/null; then\n                brew install gmp\n            else\n                echo \"Homebrew is not installed. Please install Homebrew and try again.\"\n                exit 1\n            fi\n            ;;\n        *)\n            echo \"Unsupported operating system for automatic GMP installation.\"\n            echo \"Please install GMP manually: https://gmplib.org/\"\n            exit 1\n            ;;\n    esac\n}\n\n# Function to install cmake (required by crypto-cpp-py)\ninstall_cmake() {\n    case \"$OSTYPE\" in\n        linux-gnu*)\n            if command -v apt-get >/dev/null; then\n                sudo apt-get install -y cmake\n            elif command -v dnf >/dev/null; then\n                sudo dnf install -y cmake\n            else\n                echo \"Unsupported Linux distribution for automatic cmake installation.\"\n                exit 1\n            fi\n            ;;\n        darwin*)\n            if command -v brew >/dev/null; then\n                brew install cmake\n            else\n                echo \"Homebrew is not installed. Please install Homebrew and try again.\"\n                exit 1\n            fi\n            ;;\n        *)\n            echo \"Unsupported operating system for automatic cmake installation.\"\n            exit 1\n            ;;\n    esac\n}\n\n# Ensure uv is available (installs if missing)\nensure_uv() {\n    if command -v uv >/dev/null 2>&1; then\n        return 0\n    fi\n    echo \"Installing uv...\"\n    curl -LsSf https://astral.sh/uv/install.sh | sh\n    export PATH=\"$HOME/.local/bin:$PATH\"\n}\n\n# Find or install a suitable Python version (3.10-3.14)\nfind_python() {\n    # If PYTHON_VERSION env var is set, use that specific version\n    if [ -n \"${PYTHON_VERSION:-}\" ]; then\n        PYTHON_VERSION_TARGET=\"$PYTHON_VERSION\"\n    fi\n\n    # Try to find it on PATH first\n    for version in $PYTHON_VERSION_TARGET 3.14 3.13 3.12 3.11 3.10; do\n        if command -v \"python${version}\" >/dev/null 2>&1; then\n            echo \"python${version}\"\n            return 0\n        fi\n    done\n\n    # Fall back to python3 if it's in the right version range\n    if command -v python3 >/dev/null 2>&1; then\n        local py_version\n        py_version=$(python3 -c \"import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')\")\n        case \"$py_version\" in\n            3.10|3.11|3.12|3.13|3.14)\n                echo \"python3\"\n                return 0\n                ;;\n        esac\n    fi\n\n    # Not found — use uv to install it\n    echo \"Python ${PYTHON_VERSION_TARGET} not found. Installing via uv...\" >&2\n    ensure_uv\n    uv python install \"$PYTHON_VERSION_TARGET\" >&2\n    local uv_python\n    uv_python=$(uv python find \"$PYTHON_VERSION_TARGET\" 2>/dev/null || true)\n    if [ -n \"$uv_python\" ]; then\n        echo \"$uv_python\"\n        return 0\n    fi\n\n    return 1\n}\n\n# Check if existing venv is valid and matches expected Python version range\nvenv_is_valid() {\n    [ -f \"venv/bin/python\" ] || return 1\n    local py_version\n    py_version=$(venv/bin/python -c \"import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')\" 2>/dev/null) || return 1\n    case \"$py_version\" in\n        3.10|3.11|3.12|3.13|3.14) return 0 ;;\n        *) return 1 ;;\n    esac\n}\n\n# Check if parallel is installed, if not, attempt to install it\nif ! command -v parallel >/dev/null; then\n    echo \"GNU parallel not found. Attempting to install...\"\n    install_parallel\nelse\n    echo \"GNU parallel is already installed.\"\nfi\n\n# Check if GMP is installed (required by fastecdsa)\ngmp_found=false\ncase \"$OSTYPE\" in\n    linux-gnu*)\n        # Check for the development headers (gmp.h), not just the runtime library\n        if [ -f /usr/include/gmp.h ] \\\n            || pkg-config --exists gmp 2>/dev/null; then\n            gmp_found=true\n        fi\n        ;;\n    darwin*)\n        # Use formula-specific prefix (works even if formula is unlinked)\n        if command -v brew >/dev/null 2>&1; then\n            GMP_PREFIX=$(brew --prefix gmp 2>/dev/null || true)\n            if [ -n \"$GMP_PREFIX\" ] && [ -f \"${GMP_PREFIX}/include/gmp.h\" ]; then\n                gmp_found=true\n            fi\n        fi\n        ;;\nesac\n\nif [ \"$gmp_found\" = false ]; then\n    echo \"GMP not found. Attempting to install (required by fastecdsa)...\"\n    install_gmp\nelse\n    echo \"GMP is already installed.\"\nfi\n\n# Check if cmake is installed (required by crypto-cpp-py)\nif ! command -v cmake >/dev/null; then\n    echo \"cmake not found. Attempting to install (required by crypto-cpp-py)...\"\n    install_cmake\nelse\n    echo \"cmake is already installed.\"\nfi\n\nensure_uv\n\nif venv_is_valid; then\n    echo \"Existing venv is valid ($(venv/bin/python --version)). Updating dependencies...\"\nelse\n    # Clean up broken/outdated venv\n    if [ -d \"venv\" ]; then\n        echo \"Removing invalid venv...\"\n        rm -rf venv\n    fi\n\n    # Find a suitable Python version (installs via uv if needed)\n    PYTHON_CMD=$(find_python || true)\n    if [ -z \"$PYTHON_CMD\" ]; then\n        echo \"No suitable Python version found and uv install failed.\"\n        echo \"Please install Python 3.10 through 3.14 manually.\"\n        exit 1\n    fi\n\n    echo \"Using Python: $PYTHON_CMD ($($PYTHON_CMD --version))\"\n\n    # Create virtual environment using uv (no venv module needed)\n    if ! uv venv --python \"$PYTHON_CMD\" venv; then\n        echo \"Failed to create virtual environment\"\n        exit 1\n    fi\n\n    echo 'export PYTHONPATH=\"$PWD/hydra:$PWD:${PYTHONPATH:-}\"' >> venv/bin/activate\n    echo 'export PYTHONPYCACHEPREFIX=\"$PWD/venv/build/__pycache__\"' >> venv/bin/activate\nfi\n\necho \"PROJECT_ROOT=$PWD\" > .env\necho \"PYTHONPATH=$PWD/hydra\" >> .env # For vscode python path when running in integrated terminal.\nsource venv/bin/activate\n\n# On macOS, ensure compiler can find Homebrew-installed GMP\nif [[ \"$OSTYPE\" == darwin* ]] && command -v brew >/dev/null; then\n    GMP_PREFIX=$(brew --prefix gmp 2>/dev/null || true)\n    if [ -n \"$GMP_PREFIX\" ] && [ -d \"${GMP_PREFIX}/include\" ]; then\n        export CFLAGS=\"-I${GMP_PREFIX}/include ${CFLAGS:-}\"\n        export LDFLAGS=\"-L${GMP_PREFIX}/lib ${LDFLAGS:-}\"\n    fi\nfi\n\n# Allow crypto-cpp-py's bundled googletest to build with newer cmake (>= 4.x)\nexport CMAKE_POLICY_VERSION_MINIMUM=3.5\n# crypto-cpp-py hardcodes a -target flag that conflicts with cmake's auto-detected\n# -mmacosx-version-min on macOS; suppress the resulting -Werror to let it build.\nif [[ \"$OSTYPE\" == darwin* ]]; then\n    export CXXFLAGS=\"-Wno-overriding-option ${CXXFLAGS:-}\"\nfi\n\nuv pip compile pyproject.toml --extra dev --output-file tools/make/requirements.txt -q\nuv pip install -r tools/make/requirements.txt\n\n# Install the commit hooks (black, isort)\npre-commit install\n\necho \"Compiling garaga_rs Rust extension...\"\n# Create target directory with proper permissions in the correct location\nmkdir -p .cargo/garaga_rs/target\nchmod 755 .cargo/garaga_rs/target\n\n# Build the Rust extension with Python feature enabled\nmaturin develop --release --features python\n\necho \"All done!\"\n\n# Check Scarb version and print warning if it's not\ncd src/ # To use the .tool-versions file with asdf.\nscarb_version=$(scarb --version 2>/dev/null || true)\nif ! echo \"$scarb_version\" | grep -q \"2.16.1\"; then\n    echo \"Warning: Scarb is not installed or its version is not 2.16.1.\"\n    echo \"Got: ${scarb_version:-<not found>}\"\n    echo \"Please install Scarb 2.16.1 before continuing. https://docs.swmansion.com/scarb/download.html\"\nfi\n"
  },
  {
    "path": "tools/make/steps.sh",
    "content": "cd src/cairo\nscarb test -f test_BN254_mpcheck_3P_2F --print-resource-usage\n"
  },
  {
    "path": "tools/make/test_contracts.sh",
    "content": "#!/usr/bin/env bash\n\n# Script to run snforge test in all autogenerated contract folders\n# Usage: ./tools/make/test_contracts.sh\n\nset -e\n\n# Get the directory where this script is located\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\n# Get the repository root (two levels up from script location)\nREPO_ROOT=\"$(cd \"$SCRIPT_DIR/../..\" && pwd)\"\n\n# Path to autogenerated contracts\nAUTOGEN_DIR=\"$REPO_ROOT/src/contracts/autogenerated\"\n\n# Check if the autogenerated directory exists\nif [ ! -d \"$AUTOGEN_DIR\" ]; then\n    echo \"Error: Autogenerated directory not found at $AUTOGEN_DIR\"\n    exit 1\nfi\n\necho \"Running snforge test in all autogenerated contract folders...\"\necho \"========================================================\"\necho \"\"\n\n# Track success/failure\nFAILED_TESTS=()\nPASSED_TESTS=()\n\n# Iterate through each subdirectory in autogenerated\nfor dir in \"$AUTOGEN_DIR\"/*/ ; do\n    if [ -d \"$dir\" ]; then\n        folder_name=$(basename \"$dir\")\n        echo \"Testing: $folder_name\"\n        echo \"----------------------------------------\"\n\n        # Change to the directory and run snforge test\n        if (cd \"$dir\" && snforge test); then\n            PASSED_TESTS+=(\"$folder_name\")\n            echo \"✓ $folder_name: PASSED\"\n        else\n            FAILED_TESTS+=(\"$folder_name\")\n            echo \"✗ $folder_name: FAILED\"\n        fi\n\n        echo \"\"\n    fi\ndone\n\n# Print summary\necho \"========================================================\"\necho \"Test Summary\"\necho \"========================================================\"\necho \"Passed: ${#PASSED_TESTS[@]}\"\nfor test in \"${PASSED_TESTS[@]}\"; do\n    echo \"  ✓ $test\"\ndone\n\nif [ ${#FAILED_TESTS[@]} -gt 0 ]; then\n    echo \"\"\n    echo \"Failed: ${#FAILED_TESTS[@]}\"\n    for test in \"${FAILED_TESTS[@]}\"; do\n        echo \"  ✗ $test\"\n    done\n    exit 1\nelse\n    echo \"\"\n    echo \"All tests passed!\"\n    exit 0\nfi\n"
  },
  {
    "path": "tools/make/update_bench_in_readme.py",
    "content": "import re\nimport subprocess\n\n\ndef run_benchmarks():\n    try:\n        # Run benchmarks.py and capture its output\n        result = subprocess.run(\n            [\"python\", \"tests/benchmarks.py\"],\n            capture_output=True,\n            text=True,\n            check=True,\n        )\n        return result.stdout\n    except subprocess.CalledProcessError as e:\n        print(f\"Error running benchmarks: {e.stderr}\")\n        return None\n\n\ndef update_readme(benchmarks_markdown):\n    if benchmarks_markdown is None:\n        print(\"Skipping README update due to benchmark error.\")\n        return\n\n    # Read the current README.md content\n    with open(\"README.md\", \"r\", encoding=\"utf-8\") as file:\n        readme_contents = file.read()\n\n    # Define a pattern to find the Benchmarks section\n    # Adjust the pattern as necessary to match your README's structure\n    pattern = r\"(## Benchmarks\\n)(.*?)(\\n## )\"\n    replacement = r\"\\1\" + benchmarks_markdown + r\"\\3\"\n\n    # Replace the Benchmarks section with the new benchmarks\n    updated_readme = re.sub(pattern, replacement, readme_contents, flags=re.DOTALL)\n\n    # Write the updated README back to disk\n    with open(\"README.md\", \"w\", encoding=\"utf-8\") as file:\n        file.write(updated_readme)\n\n\nif __name__ == \"__main__\":\n    benchmarks_markdown = run_benchmarks()\n    update_readme(benchmarks_markdown)\n    print(f\"README updated with benchmarks: {benchmarks_markdown}\")\n"
  },
  {
    "path": "tools/make/update_risc0_class_hash.sh",
    "content": "#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_ROOT=\"$(cd \"$SCRIPT_DIR/../..\" && pwd)\"\nRISC0_VERIFIER_DIR=\"$PROJECT_ROOT/src/contracts/autogenerated/risc0_verifier_bn254\"\nFIBONACCI_SEQUENCER_FILE=\"$PROJECT_ROOT/src/contracts/risc0_sample_app/fibonacci_sequencer/src/lib.cairo\"\n\necho \"Computing class hash for Risc0Groth16VerifierBN254...\"\nOUTPUT=$(cd \"$RISC0_VERIFIER_DIR\" && sncast utils class-hash --contract-name Risc0Groth16VerifierBN254)\n\nCLASS_HASH=$(echo \"$OUTPUT\" | grep \"Class Hash:\" | awk '{print $3}')\nif [ -z \"$CLASS_HASH\" ]; then\n    echo \"Error: Could not parse class hash from sncast output: $OUTPUT\"\n    exit 1\nfi\n\n# Strip leading zeros for Cairo format (0x0708... -> 0x708...)\nCAIRO_CLASS_HASH=$(echo \"$CLASS_HASH\" | sed 's/^0x0*/0x/')\necho \"Class hash: $CAIRO_CLASS_HASH\"\n\n# Portable sed -i (macOS requires '' suffix, Linux does not)\nsed -i.bak \"s|^\\([[:space:]]*\\)0x[0-9a-fA-F]\\{1,64\\};|\\1$CAIRO_CLASS_HASH;|\" \"$FIBONACCI_SEQUENCER_FILE\"\nrm -f \"${FIBONACCI_SEQUENCER_FILE}.bak\"\n\nscarb fmt \"$FIBONACCI_SEQUENCER_FILE\"\necho \"Updated RISC_ZERO_VERIFIER_CLASS_HASH in fibonacci_sequencer.\"\n"
  },
  {
    "path": "tools/make/wasm-test-gen.sh",
    "content": "cd tools/npm/integration-test-suite\nrm -rf node_modules package-lock.json && npm cache clean --force && npm install garaga.tgz\n\n# Uses turbo to build all packages first, then run test-generate sequentially\n# (--concurrency 1 because web packages share port 8080)\nnpm run test-generate\n"
  },
  {
    "path": "tools/make/wasm.sh",
    "content": "#!/bin/bash\n\nstart_docker() {\n    local os_type=$1\n    echo \"Attempting to start Docker daemon...\"\n\n    case \"$os_type\" in\n        \"macos\")\n            echo \"Please start Docker Desktop manually for macOS\"\n            echo \"Cannot automatically start Docker Desktop due to security restrictions\"\n            exit 1\n            ;;\n        \"fedora\")\n            read -p \"Docker daemon is not running. Would you like to start it? (y/N) \" response\n            if [[ \"$response\" =~ ^[Yy]$ ]]; then\n                if command -v sudo >/dev/null 2>&1; then\n                    echo \"Starting Docker daemon...\"\n                    sudo systemctl start docker\n                    # Wait for Docker to be ready\n                    echo \"Waiting for Docker to be ready...\"\n                    sleep 3\n                else\n                    echo \"Error: sudo is not available. Please start Docker manually:\"\n                    echo \"sudo systemctl start docker\"\n                    exit 1\n                fi\n            else\n                echo \"Please start Docker manually when ready\"\n                exit 1\n            fi\n            ;;\n        \"debian\")\n            read -p \"Docker daemon is not running. Would you like to start it? (y/N) \" response\n            if [[ \"$response\" =~ ^[Yy]$ ]]; then\n                if command -v sudo >/dev/null 2>&1; then\n                    echo \"Starting Docker daemon...\"\n                    sudo systemctl start docker\n                    # Wait for Docker to be ready\n                    echo \"Waiting for Docker to be ready...\"\n                    sleep 3\n                else\n                    echo \"Error: sudo is not available. Please start Docker manually:\"\n                    echo \"sudo systemctl start docker\"\n                    exit 1\n                fi\n            else\n                echo \"Please start Docker manually when ready\"\n                exit 1\n            fi\n            ;;\n        *)\n            echo \"Unsupported operating system. Please start Docker daemon manually\"\n            exit 1\n            ;;\n    esac\n}\n\ncheck_docker() {\n    if ! docker info >/dev/null 2>&1; then\n        echo \"Docker daemon is not running.\"\n\n        # Detect OS and try to start Docker\n        if [[ \"$OSTYPE\" == \"darwin\"* ]]; then\n            start_docker \"macos\"\n        elif [ -f /etc/fedora-release ]; then\n            start_docker \"fedora\"\n        elif [ -f /etc/debian_version ] || [ -f /etc/lsb-release ]; then\n            start_docker \"debian\"\n        else\n            echo \"Unsupported operating system. Please start Docker daemon manually\"\n            exit 1\n        fi\n\n        # Double check if Docker started successfully\n        if ! docker info >/dev/null 2>&1; then\n            echo \"Failed to start Docker daemon\"\n            exit 1\n        fi\n    fi\n    echo \"Docker daemon is running\"\n}\n\n# Check if Docker is running and start if needed\ncheck_docker\n\ncd tools/npm/garaga_ts\ndocker compose up --build\n\ncd ../integration-test-suite\n\nGARAGA_VERSION=$(jq -r '.release_info.garaga_version' ../../make/constants.json)\ncp ../garaga_ts/garaga-$GARAGA_VERSION.tgz garaga.tgz\nnpm install garaga.tgz\n"
  },
  {
    "path": "tools/noir/Makefile",
    "content": "# ==============================================================================\n# Solidity Verifier Debugging\n# ==============================================================================\n# Run the Solidity ZK Honk verifier with the test proof and log variables.\n# This is useful for comparing intermediate values with the Python implementation.\n#\n# Prerequisites:\n#   1. Install Foundry: curl -L https://foundry.paradigm.xyz | bash && foundryup\n#   2. Install forge-std: forge install foundry-rs/forge-std --no-commit\n#\n# Usage:\n#   make sol-verify-debug              # Run with full logging\n#   make sol-verify-debug-detailed     # Run with detailed proof parsing\n#\n# To add custom logging, edit tools/noir/hello/target/contract_ultra_keccak_zk.sol:\n#   1. Add: import \"forge-std/console.sol\";\n#   2. Add: console.log(\"varName:\", value);  or  console.log(\"Fr:\", Fr.unwrap(frValue));\n#   3. Run: make sol-verify-debug\n#\n# See tools/noir/hello/README.md for more details.\n# ==============================================================================\n\nsol-verify-debug:\n\t@echo \"=== Running Solidity ZK Honk Verifier Test ===\"\n\t@echo \"See tools/noir/hello/README.md for how to add custom logging\"\n\t@echo \"\"\n\tcd hello && forge test -vv --match-test testVerifyProof\n\nsol-verify-debug-verbose:\n\t@echo \"=== Running Solidity ZK Honk Verifier Test (verbose) ===\"\n\tcd hello && forge test -vvvv --match-test testVerifyProof\n\nsol-verify-debug-detailed:\n\t@echo \"=== Running Detailed Proof Parsing Test ===\"\n\tcd hello && forge test -vv --match-test testVerifyProofWithDetailedLogging\n\nsol-verify-setup:\n\t@echo \"=== Setting up Foundry for Solidity testing ===\"\n\t@if [ -d \"hello/lib/forge-std\" ]; then \\\n\t\techo \"forge-std already installed\"; \\\n\telse \\\n\t\tcd hello && forge install foundry-rs/forge-std --no-git; \\\n\tfi\n\t@echo \"Setup complete! Now run: make sol-verify-debug\"\n"
  },
  {
    "path": "tools/noir/hello/Nargo.toml",
    "content": "[package]\nname = \"hello\"\ntype = \"bin\"\nauthors = [\"\"]\n\n[dependencies]\n"
  },
  {
    "path": "tools/noir/hello/Prover.toml",
    "content": "x = \"1\"\ny = \"2\"\n"
  },
  {
    "path": "tools/noir/hello/src/main.nr",
    "content": "fn main(x: u64, y: pub u64) {\n    assert(x != y);\n}\n\n#[test]\nfn test_main() {\n    main(1, 2);\n\n    // Uncomment to make test fail\n    // main(1, 1);\n}\n"
  },
  {
    "path": "tools/noir/run.sh",
    "content": "reset() {\n    rm -rf hello/\n    nargo new hello\n    cd hello\n    nargo check\n    cat << EOF > Prover.toml\nx = \"1\"\ny = \"2\"\nEOF\n    nargo execute witness\n    cd ../\n}\n\n# Setup Foundry for testing the generated Solidity verifier\nsetup_foundry() {\n    cd hello\n\n    # Create foundry.toml configuration\n    cat << 'EOF' > foundry.toml\n# Foundry configuration for testing the Honk verifier\n[profile.default]\nsrc = \"target\"\nout = \"out\"\nlibs = [\"lib\"]\ntest = \"test\"\n\n# Enable optimizer for faster execution\noptimizer = true\noptimizer_runs = 200\n# Increase memory limit for large proof verification\nmemory_limit = 134217728  # 128MB\n# Show more output\nverbosity = 3\n# EVM version\nevm_version = \"cancun\"\n# Allow reading binary files for proof verification tests\nfs_permissions = [{ access = \"read\", path = \"./target\" }]\n[fuzz]\nruns = 256\nEOF\n\n    # Create test directory\n    mkdir -p test\n\n    # Create the Foundry test file\n    cat << 'EOF' > test/VerifierTest.t.sol\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.27;\n\nimport \"forge-std/Test.sol\";\nimport \"forge-std/console.sol\";\n\n// Import the verifier contract\nimport \"../target/contract_ultra_keccak_zk.sol\";\n\n/**\n * @title VerifierTest\n * @notice Test contract for debugging the ZK Honk verifier\n * @dev This test loads the proof from binary files and verifies it,\n *      logging intermediate values for comparison with Python implementation.\n *\n * HOW TO RUN:\n *   From the project root:\n *     make sol-verify-debug\n *\n *   Or manually from tools/noir/hello/:\n *     forge test -vvvv --match-test testVerifyProof\n *\n * HOW TO ADD MORE LOGGING:\n *   1. Import console.sol in the contract you want to debug\n *   2. Add console.log() calls, e.g.:\n *      console.log(\"variableName:\", value);\n *      console.log(\"Fr value:\", Fr.unwrap(someField));\n *   3. Run with -vvvv for maximum verbosity\n */\ncontract VerifierTest is Test {\n    HonkVerifier verifier;\n\n    function setUp() public {\n        verifier = new HonkVerifier();\n        console.log(\"=== Verifier deployed ===\");\n        console.log(\"VK_HASH:\", VK_HASH);\n        console.log(\"N:\", N);\n        console.log(\"LOG_N:\", LOG_N);\n        console.log(\"NUMBER_OF_PUBLIC_INPUTS:\", NUMBER_OF_PUBLIC_INPUTS);\n    }\n\n    function testVerifyProof() public {\n        console.log(\"\\n=== Loading proof and public inputs ===\");\n\n        // Load proof bytes from file\n        bytes memory proofBytes = vm.readFileBinary(\"target/proof_ultra_keccak_zk.bin\");\n        console.log(\"Proof length (bytes):\", proofBytes.length);\n        console.log(\"Proof length (field elements):\", proofBytes.length / 32);\n\n        // Load public inputs from file\n        bytes memory pubInputsBytes = vm.readFileBinary(\"target/public_inputs_ultra_keccak_zk.bin\");\n        console.log(\"Public inputs length (bytes):\", pubInputsBytes.length);\n\n        // Parse public inputs into bytes32 array\n        uint256 numPubInputs = pubInputsBytes.length / 32;\n        console.log(\"Number of public inputs:\", numPubInputs);\n\n        bytes32[] memory publicInputs = new bytes32[](numPubInputs);\n        for (uint256 i = 0; i < numPubInputs; i++) {\n            bytes32 val;\n            uint256 offset = i * 32;\n            assembly {\n                val := mload(add(add(pubInputsBytes, 32), offset))\n            }\n            publicInputs[i] = val;\n            console.log(\"publicInput[%d]:\", i);\n            console.logBytes32(val);\n        }\n\n        console.log(\"\\n=== Calling verify() ===\");\n\n        // Call verify and check result\n        bool result = verifier.verify(proofBytes, publicInputs);\n\n        console.log(\"\\n=== Result ===\");\n        console.log(\"Verification result:\", result);\n\n        assertTrue(result, \"Proof verification failed!\");\n    }\n\n    /**\n     * @notice Test with manual proof parsing to log intermediate values\n     * @dev Uncomment and modify this to debug specific parts of the proof\n     */\n    function testVerifyProofWithDetailedLogging() public {\n        console.log(\"\\n=== Detailed Proof Parsing ===\");\n\n        bytes memory proofBytes = vm.readFileBinary(\"target/proof_ultra_keccak_zk.bin\");\n        bytes memory pubInputsBytes = vm.readFileBinary(\"target/public_inputs_ultra_keccak_zk.bin\");\n\n        // Parse first few elements of proof (pairing point object)\n        console.log(\"\\n--- Pairing Point Object (first 16 field elements) ---\");\n        for (uint256 i = 0; i < 16; i++) {\n            uint256 val;\n            uint256 offset = i * 32;\n            assembly {\n                val := mload(add(add(proofBytes, 32), offset))\n            }\n            console.log(\"pairingPointObject[%d]:\", i);\n            console.log(\"  hex:\", val);\n        }\n\n        // Parse commitment points (after pairing point object)\n        console.log(\"\\n--- Wire Commitments ---\");\n        uint256 baseOffset = 16 * 32; // After pairing point object\n\n        // W1\n        uint256 w1x;\n        uint256 w1y;\n        assembly {\n            w1x := mload(add(add(proofBytes, 32), baseOffset))\n            w1y := mload(add(add(proofBytes, 64), baseOffset))\n        }\n        console.log(\"W1.x:\", w1x);\n        console.log(\"W1.y:\", w1y);\n\n        // W2\n        uint256 w2x;\n        uint256 w2y;\n        assembly {\n            w2x := mload(add(add(proofBytes, 32), add(baseOffset, 64)))\n            w2y := mload(add(add(proofBytes, 64), add(baseOffset, 64)))\n        }\n        console.log(\"W2.x:\", w2x);\n        console.log(\"W2.y:\", w2y);\n\n        // W3\n        uint256 w3x;\n        uint256 w3y;\n        assembly {\n            w3x := mload(add(add(proofBytes, 32), add(baseOffset, 128)))\n            w3y := mload(add(add(proofBytes, 64), add(baseOffset, 128)))\n        }\n        console.log(\"W3.x:\", w3x);\n        console.log(\"W3.y:\", w3y);\n\n        // Now verify\n        uint256 numPubInputs = pubInputsBytes.length / 32;\n        bytes32[] memory publicInputs = new bytes32[](numPubInputs);\n        for (uint256 i = 0; i < numPubInputs; i++) {\n            bytes32 val;\n            uint256 offset = i * 32;\n            assembly {\n                val := mload(add(add(pubInputsBytes, 32), offset))\n            }\n            publicInputs[i] = val;\n        }\n\n        bool result = verifier.verify(proofBytes, publicInputs);\n        console.log(\"\\nVerification result:\", result);\n        assertTrue(result, \"Proof verification failed!\");\n    }\n}\nEOF\n\n    # Install forge-std if not already present\n    if [ ! -d \"lib/forge-std\" ]; then\n        echo \"Installing forge-std...\"\n        forge install foundry-rs/forge-std --no-git\n    fi\n\n    cd ../\n    echo \"Foundry setup complete!\"\n}\n\nreset\n\n\nBB_PATH=\"bb\"\n\n\necho \"nargo version : $(nargo --version)\" # See constants.json for recommended nargo version\necho \"bb version : $($BB_PATH --version)\" # See constants.json for recommended bb version\n\nSCRIPT_PATH=$(dirname $(realpath $0))\nHONK_FIXTURES_PATH=\"$SCRIPT_PATH/../../hydra/garaga/starknet/honk_contract_generator/examples\"\n\n\nrun_noir_proof_ultra_keccak_zk() {\n    cd hello\n    local suffix=\"_ultra_keccak_zk\"\n\n    mkdir -p target/proof${suffix}/\n    $BB_PATH prove -s ultra_honk --oracle_hash keccak --write_vk -b target/hello.json -w target/witness.gz -o target/proof${suffix}/\n    mv -f target/proof${suffix}/public_inputs target/public_inputs${suffix}.bin\n    mv -f target/proof${suffix}/proof target/proof${suffix}.bin\n    mv -f target/proof${suffix}/vk target/vk${suffix}.bin\n    mv -f target/proof${suffix}/vk_hash target/vk_hash${suffix}.bin\n\n    # Copy and replace proof.bin to HONK_FIXTURES_PATH/ (no renaming)\n    cp target/proof${suffix}.bin $HONK_FIXTURES_PATH/\n\n    rmdir target/proof${suffix}/\n\n    if $BB_PATH verify -s ultra_honk --oracle_hash keccak -i target/public_inputs${suffix}.bin -p target/proof${suffix}.bin -k target/vk${suffix}.bin; then\n        echo \"ok $suffix\"\n    else\n        echo \"Verification failed $suffix\"\n    fi\n    $BB_PATH write_solidity_verifier -s ultra_honk -k target/vk${suffix}.bin -o target/contract${suffix}.sol\n    cd ../\n}\n\n\n\n\n\n\necho $'\\n ultra keccak zk honk'\n# reset\nrun_noir_proof_ultra_keccak_zk\n\n\necho $'\\n'\n# Print sha256 hash of of .sol files :\nfor file in hello/target/*.sol; do\n    echo $(md5sum $file)\ndone\n\n# Print sha256 hash of of .bin files :\nfor file in hello/target/*.bin; do\n    echo $(md5sum $file)\ndone\n\n# Setup Foundry for testing the Solidity verifier\necho $'\\n Setting up Foundry...'\nsetup_foundry\n"
  },
  {
    "path": "tools/noir/transcript.py",
    "content": "x = \"\"\"received: circuit_size: 32\nreceived: public_input_size: 1\nreceived: pub_inputs_offset: 1\nreceived: public_input_0: 0x0000000000000000000000000000000000000000000000000000000000000002\nreceived: W_L: { 0x2465e9ff1629df572d7ae9fd1b9bd98946560392b669c03f9a4a496ae7e4cace, 0x17bce8fc74ab3b9430b6485da928ea6951ebee411689e29dc324843ee1708142 }\nreceived: W_R: { 0x0eb93267e664634c1ae1a608b81785cfec11669ee95a1dbc6386717066310cb1, 0x23169272f91d323ced584549d31020c12f7cbf314c309c0ee105c3bbfef28399 }\nreceived: W_O: { 0x0d394ffb5eb2d33c6a2540db125d27fb60665db10ae3f80d91eb189b318d7d58, 0x0a325d606966d0ecbf514d787c3440de179ff8427f66be54fcabe05420fc14d0 }\nreceived: LOOKUP_READ_COUNTS: { 0x0ddfdbbdefc4ac1580ed38e12cfa490d9d719a8b9f020ad3642d60fe704e696f, 0x0ff3e0896bdea021253b3d360fa6788289fe9754ce48cd01b7be96a861b5e157 }\nreceived: LOOKUP_READ_TAGS: { 0x0ddfdbbdefc4ac1580ed38e12cfa490d9d719a8b9f020ad3642d60fe704e696f, 0x0ff3e0896bdea021253b3d360fa6788289fe9754ce48cd01b7be96a861b5e157 }\nreceived: W_4: { 0x0ca7365a8a7d92bd713e8625cde47db105835a557cf68ce01414ede87a1ce97b, 0x26bf12dceab316d64651db4ea03663d3d9478d6ea9a1f20bbe215561e139c7f7 }\nreceived: LOOKUP_INVERSES: { 0x1fad315eb3f489658734a3aff63bfb846255a077783e50444d60ac2b104b1ad4, 0x1067a4d8157c660c69e7022dd32ab0e30dd9987dae02f54e15edab896b9469a2 }\nreceived: Z_PERM: { 0x069b493db1ad1bcb140505bc5a806d425af4e78b20794bc813a7669eba382a02, 0x2d6c35a33c91dd52432099ee20f87ed823919ed60347a56b4678b3a485e58197 }\nchallenge: Sumcheck:gate_challenge_0: 0x00000000000000000000000000000000c172dd2450a5c43df9f45a102035f4aa\nchallenge: Sumcheck:gate_challenge_1: 0x00000000000000000000000000000000d9e8e31dd1bf34b1fd2c8dc378718bad\nchallenge: Sumcheck:gate_challenge_2: 0x000000000000000000000000000000003b18273b302fc3f7e291bde9e8f657af\nchallenge: Sumcheck:gate_challenge_3: 0x0000000000000000000000000000000063851884d3d82ee17736f752da9bac35\nchallenge: Sumcheck:gate_challenge_4: 0x00000000000000000000000000000000f209bde7aca3c49f2cadbe4dca83dde9\nchallenge: Sumcheck:gate_challenge_5: 0x0000000000000000000000000000000069f14a768158343825c27a938fbf36b5\nchallenge: Sumcheck:gate_challenge_6: 0x00000000000000000000000000000000ec589c20c082a8bbc2a5358dffcbb029\nchallenge: Sumcheck:gate_challenge_7: 0x00000000000000000000000000000000cbc709637c971ff0235b30e22631d7c4\nchallenge: Sumcheck:gate_challenge_8: 0x00000000000000000000000000000000b21375f2d73fe9a9b9a0bc6ec2572958\nchallenge: Sumcheck:gate_challenge_9: 0x00000000000000000000000000000000245b66aebdb626945436091e17da60ac\nchallenge: Sumcheck:gate_challenge_10: 0x0000000000000000000000000000000062d7e222920e40d2706978b2e032cef5\nchallenge: Sumcheck:gate_challenge_11: 0x00000000000000000000000000000000d7f22806ba3855643a24874eacad3416\nchallenge: Sumcheck:gate_challenge_12: 0x00000000000000000000000000000000471214514009909e9ab6cb05b004dcd2\nchallenge: Sumcheck:gate_challenge_13: 0x00000000000000000000000000000000c5ea117fcb3a2986a4a0a3b2524e8cda\nchallenge: Sumcheck:gate_challenge_14: 0x00000000000000000000000000000000c83493ac2556971a3705619eb92a536f\nchallenge: Sumcheck:gate_challenge_15: 0x00000000000000000000000000000000c5830917428e1bac8ddffd2455fd95a4\nchallenge: Sumcheck:gate_challenge_16: 0x00000000000000000000000000000000c285c631c4c8da6a4878d427ab0ee02e\nchallenge: Sumcheck:gate_challenge_17: 0x00000000000000000000000000000000bf75c5b1da0b6a57af698f776b4739ab\nchallenge: Sumcheck:gate_challenge_18: 0x00000000000000000000000000000000276eccfb8e82d126f2c292d9708dd761\nchallenge: Sumcheck:gate_challenge_19: 0x000000000000000000000000000000009476a0a387149c8d1b78a58476b9efff\nchallenge: Sumcheck:gate_challenge_20: 0x000000000000000000000000000000007ffa377781a42d05905df51f7fe83dff\nchallenge: Sumcheck:gate_challenge_21: 0x00000000000000000000000000000000be0897e28f22aaf3c50014d76d49f4a0\nchallenge: Sumcheck:gate_challenge_22: 0x0000000000000000000000000000000062bcad183fec3655f642f8bd33895c5f\nchallenge: Sumcheck:gate_challenge_23: 0x000000000000000000000000000000002cd23571aaa192e5525b3f440c21946d\nchallenge: Sumcheck:gate_challenge_24: 0x00000000000000000000000000000000abc55392a196f776e4e6c843c9076946\nchallenge: Sumcheck:gate_challenge_25: 0x00000000000000000000000000000000609cc20bb22f811a3c24e0c1f20deb03\nchallenge: Sumcheck:gate_challenge_26: 0x0000000000000000000000000000000015356ea3058bd02736fc6ee7fae12b0d\nchallenge: Sumcheck:gate_challenge_27: 0x00000000000000000000000000000000dee13f4571cd5267161d943456bc803b\nchallenge: Sumcheck:u_0: 0x00000000000000000000000000000000e61948888da551fcbd6481a7af8cf0c0\nchallenge: Sumcheck:u_1: 0x000000000000000000000000000000001bc9a638f9f0e48211e06f74fdc4ee30\nchallenge: Sumcheck:u_2: 0x00000000000000000000000000000000b0494ceda348dd1ad61845b2820bb7a4\nchallenge: Sumcheck:u_3: 0x00000000000000000000000000000000e1a0fcc92b7bfa7d75edec03b2500e70\nchallenge: Sumcheck:u_4: 0x0000000000000000000000000000000049f16b7a01ed1d92bea9852b447cbbfa\nchallenge: Sumcheck:u_5: 0x00000000000000000000000000000000b05ec1b687b95e039f37a9c102b6faa1\nchallenge: Sumcheck:u_6: 0x0000000000000000000000000000000093f8c2d82054794f1d9bc5016a00093f\nchallenge: Sumcheck:u_7: 0x0000000000000000000000000000000059690cf79013abb0d194ec0d621435cb\nchallenge: Sumcheck:u_8: 0x00000000000000000000000000000000b092f424ff1f2dc7e55a9aec2bcd1b6a\nchallenge: Sumcheck:u_9: 0x00000000000000000000000000000000b41ba16fc7d5b8771894145a6a4a3653\nchallenge: Sumcheck:u_10: 0x00000000000000000000000000000000b7b0adaf7d801bae84bb10e77898104f\nchallenge: Sumcheck:u_11: 0x00000000000000000000000000000000dcc650724f78f5544d9e4104c0c66049\nchallenge: Sumcheck:u_12: 0x000000000000000000000000000000009372338e1b74cefc0a9297fb6c9cdf2f\nchallenge: Sumcheck:u_13: 0x00000000000000000000000000000000e7caf286270a5faab65e811c41b651ec\nchallenge: Sumcheck:u_14: 0x00000000000000000000000000000000c3ecafac87e8f09ca2d644596fdf1843\nchallenge: Sumcheck:u_15: 0x00000000000000000000000000000000680091c031e3e54068f30b1abbba4032\nchallenge: Sumcheck:u_16: 0x00000000000000000000000000000000e923e5d1a9f802c0de0263b0847a98a7\nchallenge: Sumcheck:u_17: 0x0000000000000000000000000000000001e082dbe7f823be4a12dc7fc18ff4ba\nchallenge: Sumcheck:u_18: 0x00000000000000000000000000000000f97bd808c15fcecef5eafa333438370b\nchallenge: Sumcheck:u_19: 0x00000000000000000000000000000000dfdcaff7ed6c257079dce44b5d1ad9d1\nchallenge: Sumcheck:u_20: 0x000000000000000000000000000000004cc20354eac16fac6ebafb10cd388f45\nchallenge: Sumcheck:u_21: 0x00000000000000000000000000000000d0c31e08a9ca0944d44537b854c011da\nchallenge: Sumcheck:u_22: 0x0000000000000000000000000000000065969933912dedee841ad8a92c062c7b\nchallenge: Sumcheck:u_23: 0x000000000000000000000000000000009ee2e4b83c5e0156a4902309cc087a9a\nchallenge: Sumcheck:u_24: 0x0000000000000000000000000000000011e8bfbd21b91ca1bee77a21bbc35be8\nchallenge: Sumcheck:u_25: 0x0000000000000000000000000000000010a6c496ccd27e38f0b8649a9470389f\nchallenge: Sumcheck:u_26: 0x0000000000000000000000000000000048effcc28eda12ce3859196ddc398c76\nchallenge: Sumcheck:u_27: 0x00000000000000000000000000000000c44b6fe342b5502bf9b7416f1f257b2e\nchallenge: rho: 0x00000000000000000000000000000000a4bb7935b0320a044f9a06e7ce23f501\nreceived: Gemini:FOLD_1: { 0x0030f6ead299b812a9d0e34913e4897baa11cec4f4364333bd02c3ddb15b2796, 0x0e2c88de5ecff9e5e57f587f11a581f95e8311abc9cbc8b79f71f5043aa54178 }\nreceived: Gemini:FOLD_2: { 0x24c191be28e3c61bc03e45da0e82ef589a4e35476322229e437e049dbdf633a9, 0x190ea556eee073ab057011ff249806fce345419ce1c38dc47e6eac312132d8c0 }\nreceived: Gemini:FOLD_3: { 0x0dca2271951c15f10fe1bd6b142ae96d710cbe11e7f67b885ba8cf553f9b7a89, 0x222d3b8adfc808eccc9b6be870295d686f2f78a47a20070faa67ac921a0d62ec }\nreceived: Gemini:FOLD_4: { 0x03518fba7088a6f8103d8bc2f72a67a68cff759c9e8e70071a0c0d67a89bd684, 0x2796e48e3909df2b389f68123329adb1994e35d6faad76671de81ead27b3bef0 }\nreceived: Gemini:FOLD_5: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_6: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_7: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_8: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_9: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_10: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_11: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_12: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_13: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_14: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_15: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_16: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_17: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_18: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_19: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_20: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_21: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_22: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_23: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_24: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_25: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_26: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nreceived: Gemini:FOLD_27: { 0x0000000000000000000000000000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000000000000000000000000000002 }\nchallenge: Gemini:r: 0x000000000000000000000000000000007f80d41613ee8455f306ecb97366f6fb\nreceived: Gemini:a_1: 0x06d88005bac7d50eaf47b0321f0075d0892f453254935ef79c503047f177ac3c\nreceived: Gemini:a_2: 0x1f22b729740dcd28043721670fa5c3f6ec7c6e8f7150848eb590a57bb2c774a1\nreceived: Gemini:a_3: 0x27af7bd3cb339be63a51d2305fc2ddf2c887b0a59511ec160aacec44308c9ffd\nreceived: Gemini:a_4: 0x16368d4a8fc2dee62530847567ad8d75ecd96aaa541c487628f56c47c5bb1771\nreceived: Gemini:a_5: 0x0e405cd6caac953006162d7c72468986e014792ee1e09e041c69bea39def7c6d\nreceived: Gemini:a_6: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_7: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_8: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_9: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_10: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_11: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_12: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_13: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_14: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_15: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_16: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_17: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_18: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_19: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_20: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_21: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_22: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_23: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_24: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_25: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_26: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_27: 0x0000000000000000000000000000000000000000000000000000000000000000\nreceived: Gemini:a_28: 0x0000000000000000000000000000000000000000000000000000000000000000\nchallenge: Shplonk:nu: 0x000000000000000000000000000000009f8c2321fe0106bf29aaadc94f24dea6\nreceived: Shplonk:Q: { 0x1e3ce2491c516e0e06eaa5dcad936bce2677c1867be2aeb5720375ffc79b6e21, 0x0d1133764157bc108c1e4e201a02968887c77e16afdbb635b2729af6424c9e9e }\nchallenge: Shplonk:z: 0x00000000000000000000000000000000d704d217bac677a48ad056c8aa8f9e44\nreceived: KZG:W: { 0x1068dd1d211c8b30fdbfa561f69a4d062daa8998dd609fd7de22ed5babb86c4b, 0x216af708e0184bcac66514720a6bffaa7fee53f2f7ae34dc374df8ede0c3c09b }\n\"\"\"\n\n# print(x)\n\n\n# Initialize an empty list to store the processed data\nprocessed_data = []\nlines = x.strip().split(\"\\n\")\n\n# Iterate over each line\n\n# Iterate over each line\n# ... existing code ...\n\n# Initialize an empty dictionary to store the processed data\nprocessed_data = {}\nlines = x.strip().split(\"\\n\")\n\n# Iterate over each line\nfor line in lines:\n    # Split the line into key and value based on the first occurrence of ': '\n    print(f\"Processing line: {line}\")\n    parts = line.split(\": \", 2)\n    print(f\"Parts: {parts}\")\n    op, key, value = parts\n    print(f\"Op: {op}, Key: {key}, Value: {value}\")\n\n# Print the processed data to verify\nprint(processed_data)\n\n\nimport os\n\ncwd = os.path.dirname(os.path.abspath(__file__))\nproof_bytes: bytes = open(f\"{cwd}/hello/target/proof_ultra_keccak.bin\", \"rb\").read()\nvk_bytes: bytes = open(f\"{cwd}/hello/target/vk_ultra_keccak.bin\", \"rb\").read()\n# print(proof_bytes.hex())\n\n\nproof = [\n    0x0000000000000000000000000000000000000000000000000000000000000020,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000008946560392B669C03F9A4A496AE7E4CACE,\n    0x00000000000000000000000000000000002465E9FF1629DF572D7AE9FD1B9BD9,\n    0x0000000000000000000000000000006951EBEE411689E29DC324843EE1708142,\n    0x000000000000000000000000000000000017BCE8FC74AB3B9430B6485DA928EA,\n    0x000000000000000000000000000000CFEC11669EE95A1DBC6386717066310CB1,\n    0x00000000000000000000000000000000000EB93267E664634C1AE1A608B81785,\n    0x000000000000000000000000000000C12F7CBF314C309C0EE105C3BBFEF28399,\n    0x000000000000000000000000000000000023169272F91D323CED584549D31020,\n    0x000000000000000000000000000000FB60665DB10AE3F80D91EB189B318D7D58,\n    0x00000000000000000000000000000000000D394FFB5EB2D33C6A2540DB125D27,\n    0x000000000000000000000000000000DE179FF8427F66BE54FCABE05420FC14D0,\n    0x00000000000000000000000000000000000A325D606966D0ECBF514D787C3440,\n    0x0000000000000000000000000000000D9D719A8B9F020AD3642D60FE704E696F,\n    0x00000000000000000000000000000000000DDFDBBDEFC4AC1580ED38E12CFA49,\n    0x0000000000000000000000000000008289FE9754CE48CD01B7BE96A861B5E157,\n    0x00000000000000000000000000000000000FF3E0896BDEA021253B3D360FA678,\n    0x0000000000000000000000000000000D9D719A8B9F020AD3642D60FE704E696F,\n    0x00000000000000000000000000000000000DDFDBBDEFC4AC1580ED38E12CFA49,\n    0x0000000000000000000000000000008289FE9754CE48CD01B7BE96A861B5E157,\n    0x00000000000000000000000000000000000FF3E0896BDEA021253B3D360FA678,\n    0x000000000000000000000000000000B105835A557CF68CE01414EDE87A1CE97B,\n    0x00000000000000000000000000000000000CA7365A8A7D92BD713E8625CDE47D,\n    0x000000000000000000000000000000D3D9478D6EA9A1F20BBE215561E139C7F7,\n    0x000000000000000000000000000000000026BF12DCEAB316D64651DB4EA03663,\n    0x000000000000000000000000000000846255A077783E50444D60AC2B104B1AD4,\n    0x00000000000000000000000000000000001FAD315EB3F489658734A3AFF63BFB,\n    0x000000000000000000000000000000E30DD9987DAE02F54E15EDAB896B9469A2,\n    0x00000000000000000000000000000000001067A4D8157C660C69E7022DD32AB0,\n    0x000000000000000000000000000000425AF4E78B20794BC813A7669EBA382A02,\n    0x0000000000000000000000000000000000069B493DB1AD1BCB140505BC5A806D,\n    0x000000000000000000000000000000D823919ED60347A56B4678B3A485E58197,\n    0x00000000000000000000000000000000002D6C35A33C91DD52432099EE20F87E,\n    0x0285E5FF7D3C0D15F59C2761A965696BF749065FE4CAC90B7C5310AFB3DF3B3B,\n    0x2DDE687363F59313C2B41E54D81BEEF130EAE1E894EEA785C78EE4E43C20C4C6,\n    0x013C19D3E42C8B355492F1D756884DEA3957B5BF6E2E8193FFB4E7FC3F158EFC,\n    0x1E4D71CFFDC20A5A19DD68D4CFE2CDF067A2AA1F44B89CECAB6CAAF55DAE3417,\n    0x1907EC4E632967F4F16250F16FA97EC7C9E8D7B72FEC50A60ADF7F77E14FB1B5,\n    0x125582C3C04F25EF9B7C841EDC3A461F112E792FED4296F2BCC67372E41BFAA3,\n    0x23F1075C04D207789C601197BE8D38A22A11E5D035BCE960F9DC69BAA6AF03C2,\n    0x12895DCC211378D9EB6614866AA0BB1A8CF720EE34451EFCD92DC82C43504C13,\n    0x2280F8067080C8F83123F8D052B5A181C0A5F3BAA905F42D4549057585E69821,\n    0x078DC17E403E81E7ABB5353B62A897955E9596F56744CD931E7063F7937418D9,\n    0x1E2C998E66E78DBFB4BB9658D8637F618BAF885995FBD76D7922CC4E26DBA669,\n    0x262CD1B8FDC741C2073C3C669B12E6DEAC6705F6214410306A8ECC6BDBEC8D71,\n    0x2228B8DCA9925FEE72E5587E58BAFBD45947C386446F3BDB63C4E010D72A0E56,\n    0x2BDA190568FDECABB525A7745C2D7D5242F264DAEEF67F932268E72B5ADCF6D1,\n    0x04266918448A9EC8CAC8F881C0BC1BA9C42959111B9F2991C93B169F38DCA51A,\n    0x1150A038BBADB896D080E0158F85E7B0DF710C1910A6503774BDCF08EF39A393,\n    0x092A9FD6FE59243760042DDCAF85DCF2C9268E52C5208D75CB9125B2DAA42700,\n    0x123D711E98A50C8EEF600161BC486D62069E13AD4D12064603D30E8F2D6E5265,\n    0x25B58D132934AFDCCC480A8C964E477B88CBAFDF91370EE9B4B4A1CC2E4E1A8E,\n    0x1537803983A0459D1E3ED61AA59CBF0856A2A510DF7901046B79A4257A9FCB30,\n    0x13C08CF9426D1E2F7E132E9C6E13E8B93B6905CCC539CB357E69E0F5D66DDFD7,\n    0x1F1CC54B85B64DB929DAF476A572212D852AD2E7666921E603BB50A1097C870F,\n    0x17CFEB6AB26A28116FE3D4B5156C1512223D86E3528CD667536F1C170A4CB755,\n    0x1610C336FC031BE68C629C990E755AFCBB43E7630726AF1DFB32FF7DE2A1F903,\n    0x078C2E9FCB11A9FF1DABDC022F77C29A52FF10E9BFC25A8E1C2F38EEB9A7B314,\n    0x24DF74453B540FC68C0A5BD1C618D3CCF49E7513983CD8FD4CF0899AD5CEF4E2,\n    0x252ED9CD7EF0D0E60AA1B3FED302A1314450EDF6EBCE5036CC81B5F21F166A35,\n    0x27B4EF390BAA1C9773A170AC64B0DEA0DFD02FBE3A43D8061E77C487EF097245,\n    0x25B39250035EBE1756EC1085919D0A90A973AAFCDC1B4CC77844DC81C81F017E,\n    0x28B32EE8F4DD8C62DE8140DD3730FC52DE4ABC0CAB9289BCEEFFB1469484B318,\n    0x053B798117B11AEE0C5BCCFB2A8D926DD45C7B3F560F8D3133D42F4DEAB22D45,\n    0x09EACAB815D72783FDF291121BE7AF695260916F8F9BD74B980317F9C6FF4CEA,\n    0x22FD30A934D68C2B3D1763E038F5F41EAAEFA2311ABBE8E38F00A4EDC500B322,\n    0x062E1857E2ED5546CE6EC7B4E2210329EB169F5695E3A04D48ACF52F5359E55D,\n    0x0BA09B18683D296CF830D2DA7515D381E431FE1AC792C3117007DD2E7AD8DE35,\n    0x16BF0A5F2ABCE1FDC44461687D611EF8B4A2B538249FEC1D8D32F25C3325AE4F,\n    0x090D1AABADA01C6D1EF8E122169F88BC36D80462934AC786ED7F63568A815F72,\n    0x263A15EB7A5D4DA20CD74BDA64ACD6BFD515FD57E001F571EE7F25DBBC819935,\n    0x1A6DA135C8B1C95F0EBAC3186421C4BF62C71F27FE9B2E34279AFE65270E21A0,\n    0x2D928D40BC62836DA72EADCED3C96F846CF0440B939D746DB2A987E41F8B7356,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x1A06A87012710FD1C416EE0A81DE014DC12DA6BD44C812868D4D8D91705294F3,\n    0x2012AFA46741D05CB85C40093907ABDB7574BF246DE6693C0BCB500C024BED49,\n    0x016D2DCCA0C4C5DD38A1CBDF00F94CC0F41954AE8A21B2EF2BAFB8007F380EF1,\n    0x1D767C5DBAC46EBF8A7013691EA0891882B5007674B35BBFDE9CD4BC2E527A32,\n    0x2072966D339011498D1331276EEE58F2716229236F13D7AC10775B81A2C70271,\n    0x29615ADFDC896C3C4BC11A471FDDEA935DE1DBCC34695ACB83BC52C1535A1FC7,\n    0x1CBD3ABDDB824AAB725A3E87F5202AECF7A87932DD8CD8AA01E86841F2025A5B,\n    0x2197C5A29E67EBCE890221A058378114009B563C25A66C334DE5A6F8DCC53094,\n    0x109D8838A44B820B35B284797BAA972B32ECAC1E785C28BF6FD46F538EF657CB,\n    0x0C5CE9A7DBA32F117596969C584075BA0BE089B3179250B54B4DE0F8B82306C9,\n    0x136B79129F5CBBEE2AC685099E0182BBF1B19D1A71CE8E1C988B096F63E63C9B,\n    0x09EBDA9FBB822762ED663D8F2900916556FD179EAAA9EA934B7E8A7D20E3E63B,\n    0x219F37DEDD2FEB7E2FC8732FF3A4F9744A0ADE748CC5DED5871788B08161F1BA,\n    0x1CBE60346ABB4BB1E5A18F5A3AE1BEBB0131281BC771E514646801BCAAAA7B19,\n    0x25C6182D057785E9974B649D809BA61F02F1B57F0285524F7FCFD846DAE74449,\n    0x0EC9D62836ACB4405A03D4B6DE597612AB38A7D4D7DB95C84B63AC9FED6E8E64,\n    0x0B7C8F939F6FA71843EFCEA2C04A8039A8F7B8FDD6626709C4AA17AB385349D9,\n    0x1654259AFE3AFFE4832121F56A178087DBCCABB19B86C25505A81BEFE75C45FE,\n    0x172C26EC9DC7BA6A44A801982A38DF0D66E7F0FBA528D13F8044E081BC42B50F,\n    0x28119325D0559D33E0EBD0D8A0DA55FF95092C22605A33B36CF68B61D065F7B0,\n    0x0000000000000000000000000000000F8AF0669A895C3C83D38E2A2D8D91DF30,\n    0x0A30795CCB3A688C8FA73E641B6B9378C6B16EE60E343B7956D76425403AC5E7,\n    0x2B0BB083AB6D90DDD5E5A21825F3A617262BC47AA93F52A20D3264284B311BB4,\n    0x1EB2D76140D9256752BA21EF4ED4EE8EF021591A723B15889A1E188E2333F3A9,\n    0x0370704ED29ED5BA64B5690F3BAC66B1FD991F58B9DF2D5485C44A2880717AB2,\n    0x26F2FF7FC2B01CEF7D34571CF0E6C1EFABB0F52FA3ABC4E240AC5B74EC777AEB,\n    0x2D545B9152DB90404ECFAA00E4AFE0D028F91370F587E97944335CF752030EEA,\n    0x182530062026DCA5E7F8FAE24AC91EEFBAA64CADD9FD5CE77EDB9A993AAD6024,\n    0x2334E657023EBE2D46FD71AF9CA0D42089AE8B1B3025926E1E090E6425232ED4,\n    0x04880BBFA8D664F43A1987A81D17C5346EB08BF4E2471146E1F501B38A6EF8A8,\n    0x23426D30A8D4E7874C7835E9D8B5365BFC06A64AEEA18FCEDB89271B35A1B490,\n    0x177AB630E0A4FB877DB50B2A8A06E7DBC4B5EE690ED3276E50CDEB10C53FA882,\n    0x1D288D5D4BB236954164D2DB3BB053A79A18BDF2E29D1A0D148FEBA5E6807A9E,\n    0x06BA070D3082E755A2F0477735BCD07D421B38DB6BABB576CAC465D1524CCCAF,\n    0x06BA070D3082E755A2F0477735BCD07D421B38DB6BABB576CAC465D1524CCCAF,\n    0x27C81BC615A22ABF1FAC518DD5E5989568A6C1A9E01C232DCE80FCAAE6D2483D,\n    0x161FFED97D6DE369AD85A1F0ECE8A2B78C2AD4C18E3CE0AA68970A210FC8CDAC,\n    0x0F4AB79878C744DC417E449D77D865F631040751C61751F26A5C47CC6103394C,\n    0x104A5D1F1FCDDCE2DAA6E7F1AB0C26493E2A01E32DEDF0FB4FE5E1330EB8298F,\n    0x0185AA4D67DFC4877AEA3C4019CDC087B504D06BDB54709C5A9E535E0A1001F6,\n    0x13F4DBCB20E54A15649D2A911E55E4148FDFCEB790222F87F2870EA0F2FAEA7A,\n    0x182C615F4962DD5E9E2BCAA2148668C2967B30CBDE78CDD953D5EFA1EE7305E7,\n    0x10E60EADF16DA6AE5691B91F92BEF89BA9C5A60574F6B23F8AC6FC39B0D73141,\n    0x12CEBF3DA6A166ED7F43F707C64CB377F4CF76063F8C5AFE9FB5A52C612E4CAE,\n    0x0000000000000000000000000000007BAA11CEC4F4364333BD02C3DDB15B2796,\n    0x00000000000000000000000000000000000030F6EAD299B812A9D0E34913E489,\n    0x000000000000000000000000000000F95E8311ABC9CBC8B79F71F5043AA54178,\n    0x00000000000000000000000000000000000E2C88DE5ECFF9E5E57F587F11A581,\n    0x000000000000000000000000000000589A4E35476322229E437E049DBDF633A9,\n    0x000000000000000000000000000000000024C191BE28E3C61BC03E45DA0E82EF,\n    0x000000000000000000000000000000FCE345419CE1C38DC47E6EAC312132D8C0,\n    0x0000000000000000000000000000000000190EA556EEE073AB057011FF249806,\n    0x0000000000000000000000000000006D710CBE11E7F67B885BA8CF553F9B7A89,\n    0x00000000000000000000000000000000000DCA2271951C15F10FE1BD6B142AE9,\n    0x000000000000000000000000000000686F2F78A47A20070FAA67AC921A0D62EC,\n    0x0000000000000000000000000000000000222D3B8ADFC808ECCC9B6BE870295D,\n    0x000000000000000000000000000000A68CFF759C9E8E70071A0C0D67A89BD684,\n    0x000000000000000000000000000000000003518FBA7088A6F8103D8BC2F72A67,\n    0x000000000000000000000000000000B1994E35D6FAAD76671DE81EAD27B3BEF0,\n    0x00000000000000000000000000000000002796E48E3909DF2B389F68123329AD,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000001,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000002,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x06D88005BAC7D50EAF47B0321F0075D0892F453254935EF79C503047F177AC3C,\n    0x1F22B729740DCD28043721670FA5C3F6EC7C6E8F7150848EB590A57BB2C774A1,\n    0x27AF7BD3CB339BE63A51D2305FC2DDF2C887B0A59511EC160AACEC44308C9FFD,\n    0x16368D4A8FC2DEE62530847567AD8D75ECD96AAA541C487628F56C47C5BB1771,\n    0x0E405CD6CAAC953006162D7C72468986E014792EE1E09E041C69BEA39DEF7C6D,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x0000000000000000000000000000000000000000000000000000000000000000,\n    0x000000000000000000000000000000CE2677C1867BE2AEB5720375FFC79B6E21,\n    0x00000000000000000000000000000000001E3CE2491C516E0E06EAA5DCAD936B,\n    0x0000000000000000000000000000008887C77E16AFDBB635B2729AF6424C9E9E,\n    0x00000000000000000000000000000000000D1133764157BC108C1E4E201A0296,\n    0x000000000000000000000000000000062DAA8998DD609FD7DE22ED5BABB86C4B,\n    0x00000000000000000000000000000000001068DD1D211C8B30FDBFA561F69A4D,\n    0x000000000000000000000000000000AA7FEE53F2F7AE34DC374DF8EDE0C3C09B,\n    0x0000000000000000000000000000000000216AF708E0184BCAC66514720A6BFF,\n]\n\n\nprint(len(proof))\n\n# Assert it's a multiple of 32 bytes\n# assert len(proof) % 32 == 0, f\"Proof is not a multiple of 32 bytes: {len(proof)}\"\n\n\ndef deserialize_ultraproof(proof: bytes) -> list[int]:\n    # Extract # of field elements from the first 4 bytes :\n    num_field_elements = int.from_bytes(proof[:4], \"big\")\n\n    assert len(proof[4:]) % 32 == 0\n    # Deserialize the rest of the proof\n    return [int.from_bytes(proof[i : i + 32], \"big\") for i in range(4, len(proof), 32)]\n\n\nassert deserialize_ultraproof(proof_bytes) == proof\n\n\nfrom garaga.precompiled_circuits.zk_honk import HonkProof, HonkTranscript, HonkVk\n\nfor i, elmt in enumerate(proof):\n    print(f\"element {i}: {hex(elmt)}\")\n\n\npproof = HonkProof.from_bytes(proof_bytes)\n\n# print(pproof)\n\n\ntranscript = HonkTranscript.from_proof(pproof)\n\n# print(transcript)\n\nprint(vk_bytes)\nprint(vk_bytes.hex())\nvk = HonkVk.from_bytes(vk_bytes)\n\nprint(f\"vk: {vk}\")\n# print(pproof)\n\n\nprint(vk.serialize_to_cairo())\n"
  },
  {
    "path": "tools/npm/garaga_ts/.gitignore",
    "content": "/node_modules\n/dist\n/*.tgz\n/coverage\n"
  },
  {
    "path": "tools/npm/garaga_ts/Dockerfile",
    "content": "# This file (along with docker-compose.yml) helps creating reproducible builds\n# - It must be manually triggered whenever the Rust code is changed\n# - It will update the code generated under src/wasm/pkg\n# Usage: docker compose up --build && docker compose down\n\nFROM rust:1.87.0\n\nRUN cargo install --locked wasm-pack@0.13.1\n\nRUN curl -L https://bit.ly/n-install | bash -s -- -y 20.17.0\n\nENV HOME=\"/root/\"\nENV N_PREFIX=\"$HOME/n\"\nENV PATH=\"$HOME/n/bin/:$PATH\"\n\nWORKDIR /garaga/tools/npm/garaga_ts\n\nCMD npm ci --ignore-scripts && npm run build && npm pack && ./fix-chown.sh ../..\n"
  },
  {
    "path": "tools/npm/garaga_ts/README.md",
    "content": "# Garaga 🐺\n\nState-of-the-art Elliptic Curve operations and SNARKS verification for Cairo & Starknet in TypeScript/JavaScript.\n\n## Quick Start\n\n```bash\nnpm install garaga\n```\n\n```bash\nyarn add garaga\n```\n\n**Requirements:** Node.js >= 18.0.0\n\n## What is Garaga?\n\nGaraga provides optimized cryptographic primitives for TypeScript/JavaScript:\n- **Elliptic Curve Operations** - High-performance curve arithmetic\n- **SNARK Verification** - Groth16, Noir Honk proof systems\n- **Pairing-Based Cryptography** - BN254, BLS12-381 curves\n- **Starknet Integration** - Generate calldata for Cairo contracts\n\n## Basic Usage\n\n```typescript\nimport { init, msmCalldataBuilder, getGroth16CallData, CurveId } from 'garaga';\n\n// Initialize WASM module\nawait init();\n\n// Multi-scalar multiplication\nconst calldata = msmCalldataBuilder(points, scalars, CurveId.BN254);\n\n// Groth16 proof verification calldata\nconst groth16Calldata = getGroth16CallData(proof, verifyingKey, CurveId.BN254);\n```\n\n## Key Features\n\n✅ **TypeScript Support** - Full type definitions included\n✅ **WASM Performance** - Rust-powered cryptographic operations\n✅ **Multiple Curves** - BN254, BLS12-381 support\n✅ **Proof Systems** - Groth16, Noir Honk verification\n✅ **Starknet Ready** - Generate calldata for Cairo contracts\n✅ **Drand Integration** - Verifiable randomness support\n\n## Available Functions\n\n📋 **For complete API documentation with examples, see:** [API Reference](https://github.com/keep-starknet-strange/garaga/blob/v1.1.0/tools/npm/garaga_ts/src/node/api.ts)\n\n- `msmCalldataBuilder()` - Multi-scalar multiplication calldata generation\n- `mpcCalldataBuilder()` - Multi-pairing check calldata generation\n- `schnorrCalldataBuilder()` - Schnorr signature verification calldata\n- `ecdsaCalldataBuilder()` - ECDSA signature verification calldata\n- `eddsaCalldataBuilder()` - EdDSA signature verification calldata\n- `toWeirstrass()` - Convert from Twisted Edwards to Weierstrass coordinates\n- `toTwistedEdwards()` - Convert from Weierstrass to Twisted Edwards coordinates\n- `getGroth16CallData()` - Generate Groth16 proof verification calldata\n- `getZKHonkCallData()` - Generate Noir ZK Honk proof verification calldata\n- `fetchAndGetDrandCallData()` - Fetch Drand randomness and generate calldata\n- `poseidonHashBN254()` - Compute Poseidon hash on BN254 curve\n- and more... See the api reference (link above) for more details.\n\n## Building from Source\n\nFor development or custom builds:\n\n```bash\ngit clone https://github.com/keep-starknet-strange/garaga.git\ncd tools/npm/garaga_ts\nnpm ci && npm run build\n```\n\n**Docker build (recommended):**\n```bash\ndocker compose up --build\nnpm install ./garaga-<version>.tgz\n```\n\n## Documentation & Links\n\n- 📖 **Documentation**: [garaga.gitbook.io](https://garaga.gitbook.io/)\n- 🔧 **GitHub**: [github.com/keep-starknet-strange/garaga](https://github.com/keep-starknet-strange/garaga)\n- 📦 **NPM**: [npmjs.com/package/garaga](https://www.npmjs.com/package/garaga)\n- 🐛 **Issues**: [Report bugs](https://github.com/keep-starknet-strange/garaga/issues)\n\n## Requirements\n\n - Node.js >= 18.0.0\n - For building: Rust + wasm-pack\n\n## License\n\n MIT License - see [LICENSE](https://github.com/keep-starknet-strange/garaga/blob/main/LICENSE)\n"
  },
  {
    "path": "tools/npm/garaga_ts/babel.config.cjs",
    "content": "module.exports = {\n    presets: [\n      '@babel/preset-env',\n      '@babel/preset-typescript',\n    ],\n};\n"
  },
  {
    "path": "tools/npm/garaga_ts/docker-compose.yml",
    "content": "# This file (along with Dockerfile) helps creating reproducible builds\n# - It must be manually triggered whenever the Rust code is changed\n# - It will update the code generated under src/wasm/pkg\n# Usage: docker compose up --build && docker compose down\n\nservices:\n  app:\n    platform: linux/amd64\n    build: .\n    volumes:\n      - \"../../..:/garaga\"\n"
  },
  {
    "path": "tools/npm/garaga_ts/fix-chown.sh",
    "content": "#!/bin/sh\n# This script will apply the current folder ownership to its contents recursively\n# It is useful to fix up the ownership of files handled by a docker container\nFOLDER=\"${1:-$(dirname \"$0\")}\"\nUID=$(stat -c \"%u\" \"$FOLDER\")\nGID=$(stat -c \"%g\" \"$FOLDER\")\nchown -R \"$UID:$GID\" \"$FOLDER\"\n"
  },
  {
    "path": "tools/npm/garaga_ts/jest.config.ts",
    "content": "module.exports= {\n    preset: 'ts-jest',\n    testEnvironment: 'node',\n    testMatch: ['**/tests/**/*.test.ts'],\n    moduleFileExtensions: ['ts', 'js'],\n    // transform: {\n    //   '^.+\\\\.ts$': 'ts-jest'\n    // },\n    collectCoverage: true,\n    collectCoverageFrom: ['src/**/*.ts'],\n    transform: {\n      '^.+\\\\.(ts|tsx|js|jsx)$': 'babel-jest',\n    },\n};\n"
  },
  {
    "path": "tools/npm/garaga_ts/patch.wasm.cjs",
    "content": "// This script will patch a 'wasm-pack --target web' output folder\n// towards a platform agnostic build\n\nconst fs = require('fs');\nconst path = require('path');\n\nfunction patch() {\n  // package folder\n  const pkgFolder = path.join(__dirname, 'src/wasm/pkg');\n\n  // package file name/path\n  const jsonName = 'package.json';\n  const jsonFile = path.join(pkgFolder, jsonName);\n\n  // package name\n  const pkgName = JSON.parse(fs.readFileSync(jsonFile, 'utf8'))['name'];\n\n  // other files\n  const gitignoreName = '.gitignore';\n  const gitignoreFile = path.join(pkgFolder, gitignoreName);\n\n  const jsName = pkgName + '.js';\n  const jsFile = path.join(pkgFolder, jsName);\n\n  const wasmName = pkgName + '_bg.wasm';\n  const wasmFile = path.join(pkgFolder, wasmName);\n\n  const wasmjsName = pkgName + '_bg.wasm.js';\n  const wasmjsFile = path.join(pkgFolder, wasmjsName);\n\n  const wasmtsName = pkgName + '_bg.wasm.d.ts';\n  const wasmtsFile = path.join(pkgFolder, wasmtsName);\n\n  // patches .js file:\n  // - replaces the default WASM load behavior via URL by error (cjs compatibility)\n  {\n    const input = fs.readFileSync(jsFile, 'utf8');\n    const output = input\n      .replaceAll('module_or_path = new URL(\\'' + wasmName + '\\', import.meta.url)', 'throw new Error()');\n    fs.writeFileSync(jsFile, output, 'utf8');\n  }\n\n  // encodes .wasm file as .wasm.js:\n  // - creates .wasm.js exporting the binary contents of the .wasm file\n  {\n    const input = fs.readFileSync(wasmFile).toString('base64');\n    const output =\n      'export default \\'data:application/wasm;base64,' + input + '\\';';\n    fs.writeFileSync(wasmjsFile, output, 'utf8');\n  }\n\n  // overwrites .wasm.d.ts file:\n  // - updates .wasm.d.ts with the type signature of the .wasm.js file\n  {\n    const output =\n      'declare const wasm_module_base64: string;' + '\\n' +\n      'export default wasm_module_base64;';\n    fs.writeFileSync(wasmtsFile, output, 'utf8');\n  }\n\n  // cleans up now obsolete files:\n  // - removes .gitignore and .wasm files\n  {\n    fs.rmSync(gitignoreFile);\n    fs.rmSync(wasmFile);\n  }\n}\n\npatch();\n"
  },
  {
    "path": "tools/npm/garaga_ts/rollup.config.js",
    "content": "import typescript from '@rollup/plugin-typescript';\nimport dts from 'rollup-plugin-dts';\n\nexport default [\n  {\n    input: './src/node/index.ts',\n    output: [\n      {\n        file: 'dist/index.cjs',\n        format: 'cjs',\n        sourcemap: true,\n      },\n      {\n        file: 'dist/index.mjs',\n        format: 'esm',\n        sourcemap: true,\n      },\n    ],\n    external: ['fs', 'crypto', 'path', 'util', 'os', 'stream', 'buffer'],\n    plugins: [typescript()],\n  },\n  {\n    input: './src/node/index.ts',\n    output: {\n      file: 'dist/index.d.ts',\n      format: 'esm',\n      sourcemap: false,\n    },\n    external: ['fs', 'crypto', 'path', 'util', 'os', 'stream', 'buffer'],\n    plugins: [typescript(), dts()],\n  },\n];\n"
  },
  {
    "path": "tools/npm/garaga_ts/src/constants.ts",
    "content": "/**\n * Auto-generated constants file from constants.json. Do not edit manually.\n */\n\n// RISC0 Constants\n// https://github.com/risc0/risc0-ethereum/blob/v2.2.2/contracts/src/groth16/ControlID.sol\n// release v2.2.2\nexport const RISC0_CONTROL_ROOT = BigInt(\n  \"0xCE52BF56033842021AF3CF6DB8A50D1B7535C125A34F1A22C6FDCF002C5A1529\",\n);\nexport const RISC0_BN254_CONTROL_ID = BigInt(\n  \"0x04446E66D300EB7FB45C9726BB53C793DDA407A62E9601618BB43C5C14657AC0\",\n);\n\n// SP1 Constants\n// https://github.com/succinctlabs/sp1-contracts/blob/main/contracts/src/v5.0.0/SP1VerifierGroth16.sol\nexport const SP1_VERIFIER_VERSION = \"v5.0.0\";\nexport const SP1_VERIFIER_HASH =\n  \"0xa4594c59bbc142f3b81c3ecb7f50a7c34bc9af7c4c444b5d48b795427e285913\";\n\n// Additional RISC0 constants for internal use\nexport const RISC0_SYSTEM_STATE_ZERO_DIGEST = new Uint8Array([\n  0xa3, 0xac, 0xc2, 0x71, 0x17, 0x41, 0x89, 0x96, 0x34, 0x0b, 0x84, 0xe5, 0xa9,\n  0x0f, 0x3e, 0xf4, 0xc4, 0x9d, 0x22, 0xc7, 0x9e, 0x44, 0xaa, 0xd8, 0x22, 0xec,\n  0x9c, 0x31, 0x3e, 0x1e, 0xb8, 0xe2,\n]);\nexport const RISC0_TAG_DIGEST =\n  \"0xcb1fefcd1f2d9a64975cbbbf6e161e2914434b0cbb9960b84df5d717e86b48af\";\nexport const RISC0_OUTPUT_TAG =\n  \"0x77eafeb366a78b47747de0d7bb176284085ff5564887009a5be63da32d3559d4\";\n"
  },
  {
    "path": "tools/npm/garaga_ts/src/node/api.ts",
    "content": "// This files provides a ts-like interface for garaga_rs\n\n\nimport {\n  drand_calldata_builder,\n  drand_tlock_encrypt_calldata_builder,\n  msm_calldata_builder,\n  mpc_calldata_builder,\n  schnorr_calldata_builder,\n  ecdsa_calldata_builder,\n  eddsa_calldata_builder,\n  rsa_2048_calldata_builder,\n  rsa_2048_sha256_calldata_builder,\n  to_twistededwards,\n  to_weirstrass,\n  get_groth16_calldata,\n  get_zk_honk_calldata,\n  poseidon_hash,\n} from '../wasm/pkg/garaga_rs';\nimport { CurveId } from './definitions';\nimport { Groth16Proof, Groth16VerifyingKey } from './starknet/groth16ContractGenerator/parsingUtils';\n\nexport {\n  parseGroth16ProofFromJson,\n  parseGroth16ProofFromObject,\n  parseGroth16VerifyingKeyFromJson,\n  parseGroth16VerifyingKeyFromObject,\n} from './starknet/groth16ContractGenerator/parsingUtils';\n\nexport type {\n  Groth16Proof,\n  Groth16VerifyingKey,\n} from './starknet/groth16ContractGenerator/parsingUtils';\n\n/**\n * Represents a point on an elliptic curve in affine coordinates (x, y)\n */\nexport type G1Point = [bigint, bigint];\n\n/**\n * Represents a point on a twisted elliptic curve over an extension field\n * Format: [[x0, x1], [y0, y1]] where x = x0 + x1*i and y = y0 + y1*i\n */\nexport type G2Point = [[bigint, bigint], [bigint, bigint]];\n\n/**\n * Represents a pairing of G1 and G2 points for pairing-based cryptography\n */\nexport type G1G2Pair = [G1Point, G2Point];\n\nfunction flatten(data: bigint[][]): bigint[] {\n  return data.reduce<bigint[]>((values, item) => values.concat(item), []);\n}\n\nfunction pairToList(pair: G1G2Pair): bigint[] {\n  const [[x1, y1], [[x2a, x2b], [y2a, y2b]]] = pair;\n  return [x1, y1, x2a, x2b, y2a, y2b];\n}\n\n/**\n * Configuration options for MSM (Multi-Scalar Multiplication) calldata builder\n */\nexport type MsmCalldataBuilderOptons = Partial<{\n  /** Whether to include the original points and scalars in the output */\n  includePointsAndScalars: boolean;\n  /** Whether to serialize the output as a pure felt252 array for Cairo compatibility */\n  serializeAsPureFelt252Array: boolean;\n}>;\n\n/**\n * Builds calldata for Multi-Scalar Multiplication (MSM) operations.\n * MSM computes the sum of scalar multiplications: Σ(scalar_i * point_i)\n *\n * @param points - Array of G1 points to be multiplied\n * @param scalars - Array of scalar values for multiplication\n * @param curveId - Identifier for the elliptic curve (e.g., BN254, BLS12_381)\n * @param options - Configuration options for the MSM operation\n * @returns Array of bigint values representing the MSM calldata\n *\n * @example\n * ```typescript\n * const points: G1Point[] = [[1n, 2n], [3n, 4n]];\n * const scalars = [5n, 6n];\n * const calldata = msmCalldataBuilder(points, scalars, CurveId.BN254);\n * ```\n */\nexport function msmCalldataBuilder(points: G1Point[], scalars: bigint[], curveId: CurveId, options: MsmCalldataBuilderOptons = {}): bigint[] {\n  const values = flatten(points);\n  const includePointsAndScalars = options.includePointsAndScalars ?? true;\n  const serializeAsPureFelt252Array = options.serializeAsPureFelt252Array ?? false;\n  return msm_calldata_builder(values, scalars, curveId, includePointsAndScalars, serializeAsPureFelt252Array);\n}\n\n/**\n * Builds calldata for Multi-Pairing Check (MPC) operations.\n * MPC verifies that a set of pairing equations hold: e(G1_i, G2_i) = 1\n *\n * @param curveId - Identifier for the elliptic curve\n * @param pairs - Array of G1-G2 point pairs for pairing\n * @param nFixedG2 - Number of fixed G2 points in the pairing\n * @param publicPair - Optional additional public pairing for verification\n * @returns Array of bigint values representing the MPC calldata\n *\n * @example\n * ```typescript\n * const pairs: G1G2Pair[] = [[[1n, 2n], [[3n, 4n], [5n, 6n]]]];\n * const calldata = mpcCalldataBuilder(CurveId.BN254, pairs, 1);\n * ```\n */\nexport function mpcCalldataBuilder(curveId: CurveId, pairs: G1G2Pair[], nFixedG2: number, publicPair?: G1G2Pair): bigint[] {\n  const values1 = flatten(pairs.map(pairToList));\n  const values2 = publicPair === undefined ? [] : pairToList(publicPair);\n  return mpc_calldata_builder(curveId, values1, nFixedG2, values2);\n}\n\n/**\n * Builds calldata for Schnorr signature verification.\n * Schnorr signatures provide a simple and efficient digital signature scheme.\n *\n * @param rx - X-coordinate of the signature point R\n * @param s - Signature scalar value\n * @param e - Challenge hash value\n * @param px - X-coordinate of the public key point\n * @param py - Y-coordinate of the public key point\n * @param prependPublickey - Whether to include the public key in the calldata.\n *                           When true, prepends (px, py) coordinates to the output.\n *                           When false, only includes signature data (rx, s, e).\n *                           Set to false when the public key is provided separately to the Cairo contract,\n *                           useful for verifying multiple signatures with the same public key.\n * @param curveId - Identifier for the elliptic curve\n * @returns Array of bigint values representing the Schnorr verification calldata\n *\n * @example\n * ```typescript\n * // With public key included (default behavior for single verification)\n * const calldata = schnorrCalldataBuilder(\n *   0x123n, // rx\n *   0x456n, // s\n *   0x789n, // e\n *   0xabcn, // px\n *   0xdefn, // py\n *   true,   // prependPublickey\n *   CurveId.BN254\n * );\n *\n * // Without public key (when provided separately to contract)\n * const calldataNoKey = schnorrCalldataBuilder(\n *   0x123n, // rx\n *   0x456n, // s\n *   0x789n, // e\n *   0xabcn, // px\n *   0xdefn, // py\n *   false,  // prependPublickey\n *   CurveId.BN254\n * );\n * ```\n */\nexport function schnorrCalldataBuilder(rx: bigint, s: bigint, e: bigint, px: bigint, py: bigint, prependPublickey: boolean, curveId: CurveId): bigint[] {\n  return schnorr_calldata_builder(rx, s, e, px, py, prependPublickey, curveId);\n}\n\n/**\n * Builds calldata for ECDSA signature verification.\n * ECDSA is the standard elliptic curve digital signature algorithm.\n *\n * @param r - R component of the ECDSA signature\n * @param s - S component of the ECDSA signature\n * @param v - Recovery ID (0 or 1) for public key recovery\n * @param px - X-coordinate of the public key point\n * @param py - Y-coordinate of the public key point\n * @param z - Hash of the signed message\n * @param prependPublickey - Whether to include the public key in the calldata.\n *                           When true, prepends (px, py) coordinates to the output.\n *                           When false, only includes signature data (r, s, v, z).\n *                           Set to false when the public key is provided separately to the Cairo contract,\n *                           useful for verifying multiple signatures with the same public key.\n * @param curveId - Identifier for the elliptic curve\n * @returns Array of bigint values representing the ECDSA verification calldata\n *\n * @example\n * ```typescript\n * // With public key included (default behavior for single verification)\n * const calldata = ecdsaCalldataBuilder(\n *   0x123n, // r\n *   0x456n, // s\n *   0,      // v\n *   0x789n, // px\n *   0xabcn, // py\n *   0xdefn, // z (message hash)\n *   true,   // prependPublickey\n *   CurveId.SECP256K1\n * );\n *\n * // Without public key (when provided separately to contract)\n * const calldataNoKey = ecdsaCalldataBuilder(\n *   0x123n, // r\n *   0x456n, // s\n *   0,      // v\n *   0x789n, // px\n *   0xabcn, // py\n *   0xdefn, // z (message hash)\n *   false,  // prependPublickey\n *   CurveId.SECP256K1\n * );\n * ```\n */\nexport function ecdsaCalldataBuilder(r: bigint, s: bigint, v: number, px: bigint, py: bigint, z: bigint, prependPublickey: boolean, curveId: CurveId): bigint[] {\n  return ecdsa_calldata_builder(r, s, v, px, py, z, prependPublickey, curveId);\n}\n\n/**\n * Builds calldata for EdDSA signature verification for Ed25519.\n * EdDSA provides deterministic signatures with strong security properties.\n *\n * @param ry_twisted_le - Y-coordinate of signature point R in twisted Edwards form (little-endian)\n * @param s - Signature scalar value\n * @param py_twisted_le - Y-coordinate of public key in twisted Edwards form (little-endian)\n * @param msg - Raw message bytes that were signed\n * @param prependPublickey - Whether to include the public key in the calldata.\n *                           When true, prepends py_twisted_le to the output.\n *                           When false, only includes signature data (ry_twisted_le, s, msg).\n *                           Set to false when the public key is provided separately to the Cairo contract,\n *                           useful for verifying multiple signatures with the same public key.\n * @returns Array of bigint values representing the EdDSA verification calldata\n *\n * @example\n * ```typescript\n * const message = new Uint8Array([1, 2, 3, 4]);\n *\n * // With public key included (default behavior for single verification)\n * const calldata = eddsaCalldataBuilder(\n *   0x123n, // ry_twisted_le\n *   0x456n, // s\n *   0x789n, // py_twisted_le\n *   message,\n *   true    // prependPublickey\n * );\n *\n * // Without public key (when provided separately to contract)\n * const calldataNoKey = eddsaCalldataBuilder(\n *   0x123n, // ry_twisted_le\n *   0x456n, // s\n *   0x789n, // py_twisted_le\n *   message,\n *   false   // prependPublickey\n * );\n * ```\n */\nexport function eddsaCalldataBuilder(ry_twisted_le: bigint, s: bigint, py_twisted_le: bigint, msg: Uint8Array, prependPublickey: boolean): bigint[] {\n  return eddsa_calldata_builder(ry_twisted_le, s, py_twisted_le, msg, prependPublickey);\n}\n\n/**\n * Builds calldata for RSA-2048 signature verification.\n * Computes s^{65537} mod n via square-and-multiply with 17 certified reductions.\n *\n * @param signature - RSA signature value s\n * @param expectedMessage - Expected result m = s^{65537} mod n\n * @param modulus - RSA-2048 modulus n\n * @param prependPublicKey - Whether to include the modulus in the calldata.\n *                           When true, prepends n to the output (24 elements).\n *                           When false, only includes signature, message, and reduction witnesses.\n * @returns Array of bigint values representing the RSA verification calldata\n *\n * @example\n * ```typescript\n * const calldata = rsa2048CalldataBuilder(\n *   signature,       // RSA signature\n *   expectedMessage, // s^65537 mod n\n *   modulus,         // RSA-2048 modulus\n *   true             // include modulus in calldata\n * );\n * ```\n */\nexport function rsa2048CalldataBuilder(signature: bigint, expectedMessage: bigint, modulus: bigint, prependPublicKey: boolean): bigint[] {\n  return rsa_2048_calldata_builder(signature, expectedMessage, modulus, prependPublicKey);\n}\n\n/**\n * Builds calldata for RSA-2048 SHA-256 full on-chain signature verification.\n * Computes SHA-256(message), constructs the PKCS#1 v1.5 encoding, generates\n * RSA reduction witnesses, and appends the ByteArray-serialized message.\n *\n * @param signature - RSA signature value s\n * @param message - Raw message bytes to verify\n * @param modulus - RSA-2048 modulus n\n * @param prependPublicKey - Whether to include the modulus in the calldata.\n *                           When true, prepends n to the output (24 elements).\n *                           When false, only includes signature, message, and reduction witnesses.\n * @returns Array of bigint values representing the RSA SHA-256 verification calldata\n *\n * @example\n * ```typescript\n * const message = new TextEncoder().encode(\"hello garaga\");\n * const calldata = rsa2048Sha256CalldataBuilder(\n *   signature,  // RSA signature\n *   message,    // raw message bytes\n *   modulus,    // RSA-2048 modulus\n *   true        // include modulus in calldata\n * );\n * ```\n */\nexport function rsa2048Sha256CalldataBuilder(signature: bigint, message: Uint8Array, modulus: bigint, prependPublicKey: boolean): bigint[] {\n  return rsa_2048_sha256_calldata_builder(signature, message, modulus, prependPublicKey);\n}\n\n/**\n * Converts a point from twisted Edwards form to Weierstrass form for Ed25519.\n * This is useful for interoperability between different curve representations.\n *\n * @param x_twisted - X-coordinate in twisted Edwards form\n * @param y_twisted - Y-coordinate in twisted Edwards form\n * @returns Tuple of [x_weierstrass, y_weierstrass] coordinates\n * @throws Error if the conversion fails or produces invalid results\n *\n * @example\n * ```typescript\n * const [x_w, y_w] = toWeirstrass(0x123n, 0x456n);\n * console.log(`Weierstrass form: (${x_w}, ${y_w})`);\n * ```\n */\nexport function toWeirstrass(x_twisted: bigint, y_twisted: bigint): [bigint, bigint] {\n  const result = to_weirstrass(x_twisted, y_twisted);\n\n  if (result.length !== 2) {\n    throw new Error('Invalid result length');\n  }\n\n  return [result[0], result[1]];\n}\n\n/**\n * Converts a point from Weierstrass form to twisted Edwards form for Ed25519.\n * This is useful for interoperability between different curve representations.\n *\n * @param x_weierstrass - X-coordinate in Weierstrass form\n * @param y_weierstrass - Y-coordinate in Weierstrass form\n * @returns Tuple of [x_twisted, y_twisted] coordinates\n * @throws Error if the conversion fails or produces invalid results\n *\n * @example\n * ```typescript\n * const [x_t, y_t] = toTwistedEdwards(0x789n, 0xabcn);\n * console.log(`Twisted Edwards form: (${x_t}, ${y_t})`);\n * ```\n */\nexport function toTwistedEdwards(x_weierstrass: bigint, y_weierstrass: bigint): [bigint, bigint] {\n  const result = to_twistededwards(x_weierstrass, y_weierstrass);\n\n  if (result.length !== 2) {\n    throw new Error('Invalid result length');\n  }\n\n  return [result[0], result[1]];\n}\n\n/**\n * Generates calldata for Groth16 zero-knowledge proof verification.\n * Groth16 is a succinct non-interactive zero-knowledge proof system.\n *\n * @param proof - The Groth16 proof containing points A, B, C and public inputs\n * @param verifyingKey - The verification key containing curve points for verification\n * @param curveId - Identifier for the elliptic curve used in the proof\n * @returns Array of bigint values representing the complete verification calldata\n *\n * @example\n * ```typescript\n * const proof: Groth16Proof = {\n *   a: [0x123n, 0x456n],\n *   b: [[0x789n, 0xabcn], [0xdefn, 0x111n]],\n *   c: [0x222n, 0x333n],\n *   publicInputs: [0x444n, 0x555n]\n * };\n * const calldata = getGroth16CallData(proof, verifyingKey, CurveId.BN254);\n * ```\n */\nexport function getGroth16CallData(proof: Groth16Proof, verifyingKey: Groth16VerifyingKey, curveId: CurveId): bigint[] {\n  return get_groth16_calldata(proof, verifyingKey, curveId);\n}\n\n\n/**\n * Generates calldata for ZK-Honk zero-knowledge proof verification.\n * ZK-Honk provides zero-knowledge properties on top of the Honk system.\n *\n * @param proof - Raw ZK proof bytes from the ZK-Honk prover\n * @param publicInputs - Public input bytes for the circuit\n * @param verifyingKey - Verification key bytes for the specific circuit\n * @returns Array of bigint values representing the complete verification calldata\n *\n * @example\n * ```typescript\n * const zkProofBytes = new Uint8Array([...]);\n * const publicInputsBytes = new Uint8Array([...]);\n * const vkBytes = new Uint8Array([...]);\n * const calldata = getZKHonkCallData(zkProofBytes, publicInputsBytes, vkBytes);\n * ```\n */\nexport function getZKHonkCallData(proof: Uint8Array, publicInputs: Uint8Array, verifyingKey: Uint8Array): bigint[] {\n  return get_zk_honk_calldata(proof, publicInputs, verifyingKey);\n}\n\n/**\n * Default base URLs for accessing drand randomness beacons\n */\nconst DRAND_BASE_URLS = [\n  'https://drand.cloudflare.com',\n  'https://api.drand.sh',\n  'https://api2.drand.sh',\n  'https://api3.drand.sh',\n];\n\n/**\n * Hash identifier for the drand quicknet chain\n */\nconst DRAND_QUICKNET_HASH = '52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971';\n\n/**\n * Represents a randomness beacon from the drand network\n */\ntype DrandRandomnessBeacon = {\n  /** The round number of this randomness beacon */\n  round: number;\n  /** The random value generated for this round */\n  randomness: bigint;\n  /** The BLS signature proving the randomness */\n  signature: bigint;\n};\n\n/**\n * Fetches drand randomness and generates verification calldata in one step.\n * This is a convenience function that combines fetching and calldata generation.\n *\n * @param roundNumber - The specific round to fetch, or 'latest' for the most recent\n * @param chainHash - Hash identifier of the drand chain (defaults to quicknet)\n * @param baseUrls - Array of drand API endpoints to try\n * @returns Promise resolving to calldata array for verifying the drand randomness\n *\n * @example\n * ```typescript\n * // Fetch latest randomness and generate calldata\n * const calldata = await fetchAndGetDrandCallData();\n *\n * // Fetch specific round\n * const roundCalldata = await fetchAndGetDrandCallData(12345);\n * ```\n */\nexport async function fetchAndGetDrandCallData(roundNumber: number | 'latest' = 'latest', chainHash = DRAND_QUICKNET_HASH, baseUrls = DRAND_BASE_URLS): Promise<bigint[]> {\n  return getDrandCallData(await fetchDrandRandomness(roundNumber, chainHash, baseUrls));\n}\n\n/**\n * Generates calldata for drand randomness beacon verification.\n * This prepares the data needed to verify a drand signature on-chain.\n *\n * @param beacon - The drand randomness beacon containing round, randomness, and signature\n * @returns Array of bigint values representing the verification calldata\n *\n * @example\n * ```typescript\n * const beacon = {\n *   round: 12345,\n *   randomness: 0x123456789n,\n *   signature: 0xabcdef123n\n * };\n * const calldata = getDrandCallData(beacon);\n * ```\n */\nexport function getDrandCallData({ round, randomness, signature }: DrandRandomnessBeacon): bigint[] {\n  return drand_calldata_builder([round, randomness, signature]);\n}\n\n/**\n * Encrypts a message using drand tlock encryption for a specific round and returns calldata.\n * The message can only be decrypted once the drand beacon for that round is published.\n *\n * @param roundNumber - The drand round number to encrypt for\n * @param message - 16-byte message to encrypt\n * @param randomness - 16-byte randomness for encryption\n * @returns Array of bigint values representing the tlock encryption calldata\n */\nexport function encryptToDrandRoundAndGetCallData(roundNumber: number, message: Uint8Array, randomness: Uint8Array): bigint[] {\n  if (message.length != 16) throw new Error('Message size should be 16');\n  if (randomness.length != 16) throw new Error('Randomness size should be 16');\n  const messageValue = message.reduce((acc: bigint, b: number) => (acc << 8n) | BigInt(b), 0n);\n  const randomnessValue = randomness.reduce((acc: bigint, b: number) => (acc << 8n) | BigInt(b), 0n);\n  return drand_tlock_encrypt_calldata_builder([roundNumber, messageValue, randomnessValue]);\n}\n\n/**\n * Fetches randomness data from the drand distributed randomness beacon network.\n * Tries multiple endpoints for reliability and returns the first successful response.\n *\n * @param roundNumber - The specific round to fetch, or 'latest' for the most recent\n * @param chainHash - Hash identifier of the drand chain to query\n * @param baseUrls - Array of drand API endpoints to attempt\n * @returns Promise resolving to the randomness beacon data\n * @throws Error if all endpoints fail or return invalid data\n *\n * @example\n * ```typescript\n * // Fetch latest round\n * const latest = await fetchDrandRandomness();\n *\n * // Fetch specific round\n * const round12345 = await fetchDrandRandomness(12345);\n *\n * // Use custom endpoints\n * const custom = await fetchDrandRandomness('latest', 'custom-hash', ['https://custom-drand.com']);\n * ```\n */\nexport async function fetchDrandRandomness(roundNumber: number | 'latest' = 'latest', chainHash = DRAND_QUICKNET_HASH, baseUrls = DRAND_BASE_URLS): Promise<DrandRandomnessBeacon> {\n  if (baseUrls.length == 0) {\n    throw new Error('No base url provided');\n  }\n  const endpoint = '/' + chainHash + '/public/' + roundNumber;\n  const promises = baseUrls.map((baseUrl) => fetch(baseUrl + endpoint));\n  let response;\n  try {\n    response = await Promise.any(promises);\n  } catch (e) {\n    throw new Error('All urls failed: ' + e);\n  }\n  const data = await response?.json();\n  if (!data || !data.round || !data.randomness || !data.signature) {\n    throw new Error('Unexpected response: ' + JSON.stringify(data));\n  }\n  const round = Number(data.round);\n  const randomness = BigInt('0x' + data.randomness.replace(/^0x/i, ''));\n  const signature = BigInt('0x' + data.signature.replace(/^0x/i, ''));\n  return { round, randomness, signature };\n}\n\n/**\n * Computes the Poseidon hash function over the BN254 curve.\n * Poseidon is a cryptographic hash function optimized for zero-knowledge circuits.\n *\n * @param x - First input field element\n * @param y - Second input field element\n * @returns The Poseidon hash result as a bigint\n * @throws Error if the hash computation fails or inputs are invalid\n *\n * @example\n * ```typescript\n * const hash = poseidonHashBN254(1n, 2n);\n * console.log(`Poseidon(1, 2) = ${hash.toString(16)}`);\n *\n * // Expected output for (1, 2):\n * // 115CC0F5E7D690413DF64C6B9662E9CF2A3617F2743245519E19607A4417189A\n * ```\n */\nexport function poseidonHashBN254(x: bigint, y: bigint): bigint {\n  try {\n    const result = poseidon_hash(x, y);\n\n    if (typeof result === 'bigint') {\n      return result;\n    }\n    throw new Error('Invalid result from poseidon_hash');\n  } catch (error) {\n    throw new Error(`Failed to compute Poseidon hash: ${error}`);\n  }\n}\n"
  },
  {
    "path": "tools/npm/garaga_ts/src/node/definitions.ts",
    "content": "\n// const N_LIMBS: number = 4\n// const BASE: number = 2**96\n// const STARK: bigint = BigInt(\"0x800000000000011000000000000000000000000000000000000000000000001\");\n// const BN254_ID: number = 0\n// const BLS12_381_ID: number = 1\n// const SECP256K1_ID: number = 2\n// const SECP256R1_ID: number = 3\n// const ED25519_ID: number = 4\n\n\nexport enum CurveId {\n    BN254 = 0,\n    BLS12_381 = 1,\n    SECP256K1 = 2,\n    SECP256R1 = 3,\n    ED25519 = 4,\n}\n\n\nexport interface G1Point {\n    x: bigint;\n    y: bigint;\n    curveId: CurveId\n}\n\nexport interface G2Point {\n    x: [bigint, bigint];\n    y: [bigint, bigint];\n    curveId: CurveId\n}\n\nexport interface G1G2Pair {\n    p: G1Point;\n    q: G2Point;\n    curveId: CurveId\n}\n\ninterface WeiertrassCurve {\n    cairoZeroNamespaceName: string,\n    curveId: CurveId,\n    p: bigint,\n    n: bigint,\n    h: bigint,\n    a?: bigint,\n    b?: bigint,\n    fpGenerator: bigint,\n    Gx: bigint,\n    Gy: bigint,\n}\n\ninterface PairingCurve extends WeiertrassCurve {\n    x: bigint,\n    irreduciblePolys: Record<number, number[]>,\n    nrA0: bigint,\n    nrA1: bigint,\n    b20: bigint,\n    b21: bigint,\n    loopCounter: number[],\n    lineFunctionSparcity: number[],\n    finalExpCofactor: bigint,\n    G2x: [bigint, bigint],\n    G2y: [bigint, bigint],\n}\n\ninterface TwistedEdwardsCurve extends WeiertrassCurve {\n    aTwisted: bigint,\n    dTwisted: bigint\n}\n\n\n\n\n\nexport const findValueInStringToCurveId = (s: string): CurveId | null =>{\n    // Find the value of the Curve ID in the string\n\n    if(s.toLowerCase() === \"bn128\"){\n        return CurveId.BN254;\n    }\n    if(s.toLowerCase() === \"bls12381\"){\n        return CurveId.BLS12_381;\n    }\n\n    let curveId: CurveId | null = null;\n\n    Object.entries(CurveId).forEach(([key, value]) => {\n        if(s.toLowerCase().includes(key.toLowerCase()) || key.toLowerCase().includes(s.toLowerCase())){\n            curveId = CurveId[key as keyof typeof CurveId];\n            return;\n        }\n    });\n    return curveId;\n\n}\nexport const  jy00 = (value: bigint): number[] => {\n    /**\n     * This is a minimum-Hamming-Weight left-to-right recoding.\n     * It outputs signed {-1, 0, 1} bits from MSB to LSB\n     * with minimal Hamming Weight to minimize operations\n     * in Miller Loops and vartime scalar multiplications\n     *\n     * - Optimal Left-to-Right Binary Signed-Digit Recoding\n     *   Joye, Yen, 2000\n     *   https://marcjoye.github.io/papers/JY00sd2r.pdf\n     */\n\n    const bit = (value: bigint, index: number): bigint => {\n        return (value >> BigInt(index)) & 1n;\n    };\n\n    let bi = 0n, bi1 = 0n, ri = 0n, ri1 = 0n, ri2 = 0n;\n    const bits = value.toString(2).length;\n    const recoded: number[] = [];\n\n    for (let i = bits; i >= 0; i--) {\n        if (i === bits) {\n            ri1 = bit(value, bits - 1);\n            ri2 = bit(value, bits - 2);\n        } else {\n            bi = bi1;\n            ri = ri1;\n            ri1 = ri2;\n            ri2 = i >= 2 ? bit(value, i - 2) : 0n;\n        }\n\n        bi1 = (bi + ri1 + ri2) >> 1n;\n        recoded.push(Number(-2n * bi + ri + bi1)); // Cast bigint result to number\n    }\n\n    return recoded;\n}\n\nexport const CURVES:  Record<CurveId, WeiertrassCurve | PairingCurve | TwistedEdwardsCurve> = {\n    [CurveId.BN254]: {\n        cairoZeroNamespaceName: \"bn254\",\n        curveId: CurveId.BN254,\n        p: BigInt(\"0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD47\"),\n        n: BigInt(\"0x44E992B44A6909F1\"),\n        h: BigInt(1),\n        irreduciblePolys: {\n            6: [82, 0, 0, -18, 0, 0, 1],\n            12: [82, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 1],\n        },\n        nrA0: BigInt(9),\n        nrA1: BigInt(1),\n        a: BigInt(0),\n        b: BigInt(3),\n        b20: BigInt(\"0x2B149D40CEB8AAAE81BE18991BE06AC3B5B4C5E559DBEFA33267E6DC24A138E5\"),\n        b21: BigInt(\"0x9713B03AF0FED4CD2CAFADEED8FDF4A74FA084E52D1852E4A2BD0685C315D2\"),\n        loopCounter: jy00(BigInt(6) * BigInt(\"0x44E992B44A6909F1\")  + BigInt(2)).reverse(),\n        lineFunctionSparcity: [2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0 ,0],\n        finalExpCofactor: BigInt(\"1469306990098747947464455738335385361638823152381947992820\"),\n        fpGenerator: BigInt(3),\n        Gx: BigInt(\"0x1\"),\n        Gy: BigInt(\"0x2\"),\n        G2x: [BigInt(\"0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED\"), BigInt(\"0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2\")],\n        G2y: [BigInt(\"0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA\"), BigInt(\"0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B\")]\n\n    },\n    [CurveId.BLS12_381]: {\n        cairoZeroNamespaceName: \"bls\",\n        curveId: CurveId.BLS12_381,\n        p: BigInt(\"0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAB\"),\n        n: BigInt(\"0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001\"),\n        x: -BigInt(\"0xD201000000010000\"),\n        h: BigInt(\"0x396C8C005555E1568C00AAAB0000AAAB\"),\n        irreduciblePolys: {\n            6: [2, 0, 0, -2, 0, 0, 1],\n            12: [2, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 1],\n        },\n        nrA0: BigInt(1),\n        nrA1: BigInt(1),\n        a: BigInt(0),\n        b: BigInt(4),\n        b20: BigInt(4),\n        b21: BigInt(4),\n        loopCounter: BigInt(\"0xD201000000010000\").toString(2).slice(0).split(\"\").reverse().map(x => parseInt(x, 10)),\n        lineFunctionSparcity: [1, 0, 1, 2, 0, 0, 1, 0, 1, 0, 0, 0],\n        finalExpCofactor: BigInt(3),\n        fpGenerator: BigInt(3),\n        Gx: BigInt(\"0x17F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB\"),\n        Gy: BigInt(\"0x08B3F481E3AAA0F1A09E30ED741D8AE4FCF5E095D5D00AF600DB18CB2C04B3EDD03CC744A2888AE40CAA232946C5E7E1\"),\n        G2x: [\n            BigInt(\"0x24AA2B2F08F0A91260805272DC51051C6E47AD4FA403B02B4510B647AE3D1770BAC0326A805BBEFD48056C8C121BDB8\"),\n            BigInt(\"0x13E02B6052719F607DACD3A088274F65596BD0D09920B61AB5DA61BBDC7F5049334CF11213945D57E5AC7D055D042B7E\")\n        ],\n        G2y: [\n            BigInt(\"0xCE5D527727D6E118CC9CDC6DA2E351AADFD9BAA8CBDD3A76D429A695160D12C923AC9CC3BACA289E193548608B82801\"),\n            BigInt(\"0x606C4A02EA734CC32ACD2B02BC28B99CB3E287E85A763AF267492AB572E99AB3F370D275CEC1DA1AAA9075FF05F79BE\")\n        ]\n    },\n    [CurveId.SECP256K1]: {\n        cairoZeroNamespaceName: \"secp256r1\",\n        curveId: CurveId.SECP256K1,\n        p: BigInt(\"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F\"),\n        n: BigInt(\"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\"),\n        h: BigInt(1),\n        a: BigInt(0),\n        b: BigInt(7),\n        fpGenerator: BigInt(2),\n        Gx: BigInt(\"0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798\"),\n        Gy: BigInt(\"0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8\")\n    },\n    [CurveId.SECP256R1]: {\n        cairoZeroNamespaceName: \"secp256r1\",\n        curveId: CurveId.SECP256R1,\n        p: BigInt(\"0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF\"),\n        n: BigInt(\"0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551\"),\n        h: BigInt(1),\n        a: BigInt(\"0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC\"),\n        b: BigInt(\"0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B\"),\n        fpGenerator: BigInt(6),\n        Gx: BigInt(\"0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296\"),\n        Gy: BigInt(\"0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5\")\n    },\n    [CurveId.ED25519]: {\n        cairoZeroNamespaceName: \"ED25519\",\n        curveId: CurveId.ED25519,\n        p: BigInt(\"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED\"),\n        n: BigInt(\"0x1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3ED\"),\n        h: BigInt(8),\n        dTwisted: BigInt(\"0x52036CEE2B6FFE738CC740797779E89800700A4D4141D8AB75EB4DCA135978A3\"),\n        aTwisted: BigInt(\"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC\"),\n        fpGenerator: BigInt(6),\n        Gx: BigInt(\"0x216936D3CD6E53FEC0A4E231FDD6DC5C692CC7609525A7B2C9562D608F25D51A\"),\n        Gy: BigInt(\"0x6666666666666666666666666666666666666666666666666666666666666658\")\n    }\n\n}\n"
  },
  {
    "path": "tools/npm/garaga_ts/src/node/hints/io.ts",
    "content": "\n\nexport const toBigInt = (value: string | bigint | number | Uint8Array): bigint => {\n  //Convert a string or integer to an integer. Supports hexadecimal and decimal strings.\n\n  if (typeof value === 'string') {\n    value = value.trim();\n    try {\n      return BigInt(value);\n    } catch (e) {\n      if (value.toLowerCase().startsWith('0x')) {\n        throw new Error(`Invalid hexadecimal value: ${value}`);\n      } else {\n        throw new Error(`Invalid decimal value: ${value}`);\n      }\n    }\n  } else if (typeof value === 'bigint') {\n    return value;\n  } else if (typeof value === 'number') {\n    if (Number.isInteger(value)) {\n      return BigInt(value);\n    } else {\n      throw new TypeError(`Expected integer number, got non-integer number: ${value}`);\n    }\n  } else if (value instanceof Uint8Array) {\n    let result = BigInt(0);\n    for (const byte of value) {\n      result = (result << 8n) + BigInt(byte);\n    }\n    return result;\n  } else {\n    throw new TypeError(\n      `Expected string, number, or Uint8Array, got ${typeof value}`\n    );\n  }\n}\n\nexport const toHexStr = (value: string | number | bigint): string => {\n  if (typeof value === 'string') {\n    value = value.trim();\n\n    const intValue = BigInt(value);\n\n    return ('0x' + intValue.toString(16)).toLowerCase();\n  } else if (typeof value === 'number' || typeof value === 'bigint') {\n    const intValue = BigInt(value);\n\n    return ('0x' + intValue.toString(16)).toLowerCase();\n  } else {\n    throw new TypeError(`Expected string, number integer, or bigint, got ${typeof value}`);\n  }\n}\n\nexport const hexStringToBytes = (hexString: string): Uint8Array => {\n  if (hexString.toLowerCase().startsWith('0x')) {\n    hexString = hexString.slice(2);\n  }\n  if (hexString.length % 2 !== 0) {\n    hexString = '0' + hexString;\n  }\n  const bytes = new Uint8Array(hexString.length / 2);\n  for (let i = 0; i < bytes.length; i++) {\n    const byte = hexString.slice(i * 2, i * 2 + 2);\n    bytes[i] = parseInt(byte, 16);\n  }\n  return bytes;\n}\n\nexport const bitLength = (x: bigint): number => {\n  if (x === 0n || x === -0n) {\n    return 0;\n  }\n  let bits = 0;\n  let n = x < 0n ? -x : x; // Handle negative numbers\n  while (n > 0n) {\n    n >>= 1n;\n    bits++;\n  }\n  return bits;\n}\n\nexport const split128 = (a: bigint): [bigint, bigint] => {\n  try {\n\n    console.log(\"a bigint\", a);\n\n    const MAX_UINT256 = 115792089237316195423570985008687907853269984665640564039457584007913129639936n;\n\n    const MASK_128 = BigInt((1n << 128n) - 1n);\n\n    if (a < 0n || a >= MAX_UINT256) {\n      throw new Error(`Value ${a} is too large to fit in a u256`);\n    }\n\n    const low = a & MASK_128;\n    const high = a >> BigInt(128);\n\n    return [low, high];\n  } catch (err) {\n    console.log(\"ERR split 128: \", err);\n    throw new Error(\"ERROR split 128\")\n  }\n}\n\nexport const modInverse = (a: bigint, p: bigint): bigint => {\n  let m0 = p;\n  let y = BigInt(0), x = BigInt(1);\n\n  if (p === BigInt(1)) {\n    return BigInt(0);\n  }\n\n  while (a > BigInt(1)) {\n    // q is quotient\n    let q = a / p;\n    let t = p;\n\n    // p is remainder now, process same as Euclid's algorithm\n    p = a % p;\n    a = t;\n    t = y;\n\n    // Update x and y\n    y = x - q * y;\n    x = t;\n  }\n\n  // Make x positive\n  if (x < BigInt(0)) {\n    x = x + m0;\n  }\n\n  return x;\n}\n"
  },
  {
    "path": "tools/npm/garaga_ts/src/node/index.ts",
    "content": "export * from './api'; // exports \"ts\" interface\nexport * from '../wasm/pkg/garaga_rs'; // export \"raw\" interface\n\nexport { CurveId } from './definitions';\n\nimport pkg_init from '../wasm/pkg/garaga_rs';\nimport module_or_path from '../wasm/pkg/garaga_rs_bg.wasm';\n\n\nexport function init(): ReturnType<typeof pkg_init> {\n  return pkg_init({ module_or_path });\n}\n"
  },
  {
    "path": "tools/npm/garaga_ts/src/node/starknet/groth16ContractGenerator/parsingUtils.ts",
    "content": "import { CURVES, CurveId, G1Point, G2Point, findValueInStringToCurveId } from \"../../definitions\";\nimport * as fs from 'fs';\nimport { bitLength, hexStringToBytes, modInverse, split128, toBigInt, toHexStr } from \"../../hints/io\";\nimport { createHash } from 'crypto';\nimport { RISC0_CONTROL_ROOT, RISC0_BN254_CONTROL_ID, RISC0_SYSTEM_STATE_ZERO_DIGEST, SP1_VERIFIER_HASH, SP1_VERIFIER_VERSION } from \"../../../constants\";\n\n\n//https://github.com/risc0/risc0-ethereum/blob/main/contracts/src/groth16/ControlID.sol\n\n\nexport interface Groth16Proof {\n    a: G1Point,\n    b: G2Point,\n    c: G1Point,\n    publicInputs: bigint[],\n    curveId?: CurveId,\n    imageIdJournalRisc0?: { imageId: Uint8Array, journal: Uint8Array },\n    vkeyPublicValuesSp1?: { vkey: Uint8Array, publicValues: Uint8Array }\n}\n\nexport interface Groth16VerifyingKey {\n    alpha: G1Point,\n    beta: G2Point,\n    gamma: G2Point,\n    delta: G2Point,\n    ic: G1Point[]\n}\n\ninterface Output {\n    journalDigest: Uint8Array;\n    assumptionsDigest: Uint8Array;\n}\n\ninterface ExitCode {\n    system: number;\n    user: number;\n}\n\n\ninterface ReceiptClaim {\n    preStateDigest: Uint8Array;\n    postStateDigest: Uint8Array;\n    exitCode: ExitCode;\n    input: Uint8Array;\n    output: Uint8Array;\n    tagDigest?: Uint8Array;\n}\n\nexport class KeyPatternNotFoundError extends Error {\n    constructor(message: string) {\n        super(message);\n        this.name = \"KeyPatternNotFoundError\";\n    }\n}\n\n\n\nexport const parseGroth16VerifyingKeyFromJson = (filePath: string): Groth16VerifyingKey => {\n    try {\n        const data: any = JSON.parse(fs.readFileSync(filePath, 'utf8'));\n\n        return parseGroth16VerifyingKeyFromObject(data);\n\n    } catch (err) {\n        throw new Error(`Failed to parse Groth16 verifying key from ${filePath}: ${err}`);\n\n    }\n}\n\nexport const parseGroth16VerifyingKeyFromObject = (data: any): Groth16VerifyingKey => {\n\n    try {\n        const curveId = tryGuessingCurveIdFromJson(data);\n        let verifyingKey: any;\n\n        try {\n            verifyingKey = findItemFromKeyPatterns(data, [\"verifying_key\"])\n        } catch (err) {\n            verifyingKey = data;\n        }\n\n        try {\n            const alpha = tryParseG1PointFromKey(verifyingKey, ['alpha'], curveId);\n            const beta = tryParseG2PointFromKey(verifyingKey, ['beta'], curveId);\n            const gamma = tryParseG2PointFromKey(verifyingKey, ['gamma'], curveId);\n            const delta = tryParseG2PointFromKey(verifyingKey, ['delta'], curveId);\n            if (curveId !== null && curveId !== undefined) {\n\n\n                const ic: G1Point[] = findItemFromKeyPatterns(verifyingKey, ['ic']).map((point: any) => {\n                    const g1Point = tryParseG1Point(point, curveId)\n                    return g1Point;\n                });\n\n                const vk: Groth16VerifyingKey = {\n                    alpha,\n                    beta,\n                    gamma,\n                    delta,\n                    ic\n                }\n\n\n                if (checkGroth16VerifyingKey(vk)) {\n                    return vk;\n                }\n                throw new Error(`Invalid Groth16 verifying key: ${vk}`);\n            }\n            throw new Error(\"Curve ID not provided\");\n\n        } catch (err) {\n            // Gnark case\n            const g1Points = findItemFromKeyPatterns(verifyingKey, ['g1']);\n            const g2Points = findItemFromKeyPatterns(verifyingKey, ['g2']);\n\n            const alpha = tryParseG1PointFromKey(g1Points, ['alpha'], curveId);\n            const beta = tryParseG2PointFromKey(g2Points, ['beta'], curveId);\n            const gamma = tryParseG2PointFromKey(g2Points, ['gamma'], curveId);\n            const delta = tryParseG2PointFromKey(g2Points, ['delta'], curveId);\n\n\n            if (curveId !== null && curveId !== undefined) {\n                const ic: G1Point[] = findItemFromKeyPatterns(g1Points, ['K']).map((point: any) => tryParseG1Point(point, curveId));\n                const vk = {\n                    alpha,\n                    beta,\n                    gamma,\n                    delta,\n                    ic\n                }\n\n                if (checkGroth16VerifyingKey(vk)) {\n                    return vk;\n                }\n            }\n            throw new Error(\"Curve ID not provided\");\n\n        }\n\n    } catch (err) {\n        throw new Error(`Failed to parse Groth16 verifying key from object: ${err}`);\n    }\n\n\n\n}\n\n\nexport const parseGroth16ProofFromJson = (proofPath: string, publicInputsPath?: string | null): Groth16Proof => {\n\n    try {\n\n        const data: any = JSON.parse(fs.readFileSync(proofPath, 'utf8'));\n\n        let publicInputs: any = null;\n\n\n        if (publicInputsPath && publicInputsPath !== null && publicInputsPath !== undefined) {\n\n            try {\n                publicInputs = JSON.parse(fs.readFileSync(publicInputsPath, 'utf8'));\n            }\n            catch (err) {\n                throw new Error(`Invalid public inputs format: ${publicInputsPath}`);\n            }\n        }\n\n        return parseGroth16ProofFromObject(data, publicInputs);\n\n    } catch (err) {\n        throw new Error(`Failed to parse Groth16 proof from ${proofPath}: ${err}`);\n    }\n\n}\n\n\nexport const parseGroth16ProofFromObject = (data: any, publicInputsData?: bigint[] | object): Groth16Proof => {\n    try {\n\n        let curveId = tryGuessingCurveIdFromJson(data);\n\n        let proof: any = null;\n\n        try {\n            proof = findItemFromKeyPatterns(data, ['proof']);\n        } catch (err) {\n            proof = data\n        }\n\n        // Try RISC0 parsing first\n        try {\n            const sealHex = toHexStr(findItemFromKeyPatterns(data, ['seal']));\n            const imageIdHex = toHexStr(findItemFromKeyPatterns(data, ['image_id']));\n            const journalHex = toHexStr(findItemFromKeyPatterns(data, ['journal']));\n\n            const sealBytes = hexStringToBytes(sealHex);\n            const imageIdBytes = hexStringToBytes(imageIdHex);\n            const journalBytes = hexStringToBytes(journalHex);\n\n            return createGroth16ProofFromRisc0(sealBytes, imageIdBytes, journalBytes)\n        } catch (err) {\n            // Continue to SP1 parsing\n        }\n\n        // Try SP1 parsing second\n        try {\n            const sp1VkeyHex = findItemFromKeyPatterns(data, ['vkey']);\n            const sp1PublicValuesHex = findItemFromKeyPatterns(data, ['publicValues']);\n            const sp1ProofHex = findItemFromKeyPatterns(data, ['proof']);\n\n            let vkeyBytes: Uint8Array;\n            let publicValuesBytes: Uint8Array;\n            let proofBytes: Uint8Array;\n\n            // Handle hex strings directly to preserve leading zeros\n            if (typeof sp1VkeyHex === 'string') {\n                vkeyBytes = hexStringToBytes(sp1VkeyHex);\n            } else {\n                vkeyBytes = hexStringToBytes(toHexStr(sp1VkeyHex));\n            }\n\n            if (typeof sp1PublicValuesHex === 'string') {\n                publicValuesBytes = hexStringToBytes(sp1PublicValuesHex);\n            } else {\n                publicValuesBytes = hexStringToBytes(toHexStr(sp1PublicValuesHex));\n            }\n\n            if (typeof sp1ProofHex === 'string') {\n                proofBytes = hexStringToBytes(sp1ProofHex);\n            } else {\n                proofBytes = hexStringToBytes(toHexStr(sp1ProofHex));\n            }\n\n            return createGroth16ProofFromSp1(vkeyBytes, publicValuesBytes, proofBytes);\n        } catch (err) {\n            // Continue to regular proof parsing\n        }\n\n        let publicInputs: bigint[] = [];\n\n        if (publicInputsData && publicInputsData !== null && publicInputsData !== undefined) {\n\n            if (typeof publicInputsData === 'object' && !Array.isArray(publicInputsData)) {\n                // If it's an object, convert it to a list (array) of its values\n                publicInputs = Object.values(publicInputsData).map(\n                    (value: any) => toBigInt(value)\n                );\n            } else if (Array.isArray(publicInputsData)) {\n                publicInputs = publicInputsData.map((value: any) => toBigInt(value));\n            } else {\n                throw new Error(`Invalid public inputs format: ${publicInputsData}`);\n            }\n        } else {\n\n            try {\n                publicInputs = findItemFromKeyPatterns(data, ['public']);\n            } catch (err) {\n\n            }\n        }\n        const a = tryParseG1PointFromKey(proof, ['a', 'Ar'], curveId);\n        const b = tryParseG2PointFromKey(proof, ['b', 'Bs'], curveId);\n        const c = tryParseG1PointFromKey(proof, ['c', 'Krs'], curveId);\n\n        const returnProof = {\n            a,\n            b,\n            c,\n            publicInputs: publicInputs\n        }\n\n        if (checkGroth16Proof(returnProof)) {\n            return returnProof;\n        }\n\n        throw new Error(`Invalid Groth16 proof: ${returnProof}`);\n\n    } catch (err) {\n        throw new Error(`Failed to parse Groth16 proof from object: ${err}`);\n    }\n\n}\n\n\nexport const createGroth16ProofFromRisc0 = (seal: Uint8Array, imageId: Uint8Array, journalBytes: Uint8Array,\n    controlRoot: bigint = RISC0_CONTROL_ROOT, bn254ControlId: bigint = RISC0_BN254_CONTROL_ID): Groth16Proof => {\n\n    if (imageId.length > 32) {\n        throw new Error(\"imageId must be 32 bytes\")\n    }\n\n    const [controlRoot0, controlRoot1] = splitDigest(controlRoot);\n\n    const proof = seal.slice(4);\n\n\n\n    const journal_digest = createHash(\"sha256\").update(journalBytes).digest();\n\n    const claimDigest = digestReceiptClaim(ok(imageId, journal_digest));\n\n\n    const [claim0, claim1] = splitDigest(claimDigest);\n\n\n\n    const groth16Proof: Groth16Proof = {\n        a: {\n            x: toBigInt(proof.slice(0, 32)),\n            y: toBigInt(proof.slice(32, 64)),\n            curveId: CurveId.BN254\n        },\n        b: {\n            x: [\n                toBigInt(proof.slice(96, 128)),\n                toBigInt(proof.slice(64, 96))\n            ],\n            y: [\n                toBigInt(proof.slice(160, 192)),\n                toBigInt(proof.slice(128, 160))\n            ],\n            curveId: CurveId.BN254\n        },\n        c: {\n            x: toBigInt(proof.slice(192, 224)),\n            y: toBigInt(proof.slice(224, 256)),\n            curveId: CurveId.BN254\n        },\n        publicInputs: [\n            controlRoot0,\n            controlRoot1,\n            claim0,\n            claim1,\n            bn254ControlId\n        ],\n        imageIdJournalRisc0: {\n            imageId,\n            journal: journalBytes\n        }\n    }\n    if (checkGroth16Proof(groth16Proof)) {\n        return groth16Proof;\n    }\n\n    throw new Error(`Invalid Groth16 proof: ${groth16Proof}`);\n\n}\n\n\nexport const checkGroth16Proof = (proof: Groth16Proof): boolean => {\n    return proof.a.curveId === proof.b.curveId && proof.b.curveId === proof.c.curveId;\n}\n\nexport const checkGroth16VerifyingKey = (vk: Groth16VerifyingKey): boolean => {\n    if (vk.ic.length <= 1) {\n        return false;\n    }\n\n    //check if ic points are different\n    for (let i = 0; i < vk.ic.length; i++) {\n        for (let j = i + 1; j < vk.ic.length; j++) {\n            if (vk.ic[i]?.x === vk.ic[j]?.x && vk.ic[i]?.y === vk.ic[j]?.y && vk.ic[i]?.curveId === vk.ic[j]?.curveId) {\n                return false;\n            }\n        }\n        if (vk.ic[i]?.curveId !== vk.alpha.curveId) {\n            return false;\n        }\n    }\n    return vk.alpha.curveId === vk.beta.curveId && vk.beta.curveId === vk.gamma.curveId && vk.gamma.curveId === vk.delta.curveId;\n\n}\n\n\n\n\n// Helper: concatenate multiple Uint8Arrays\nconst concatBytes = (...arrays: Uint8Array[]): Uint8Array => {\n    const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);\n    const result = new Uint8Array(totalLength);\n    let offset = 0;\n    for (const arr of arrays) {\n        result.set(arr, offset);\n        offset += arr.length;\n    }\n    return result;\n};\n\n// Helper: write uint32 as big-endian bytes\nconst uint32ToBE = (value: number): Uint8Array => {\n    const arr = new Uint8Array(4);\n    new DataView(arr.buffer).setUint32(0, value, false);\n    return arr;\n};\n\n// Helper: write uint16 as big-endian bytes\nconst uint16ToBE = (value: number): Uint8Array => {\n    const arr = new Uint8Array(2);\n    new DataView(arr.buffer).setUint16(0, value, false);\n    return arr;\n};\n\n// Helper: encode string to bytes\nconst stringToBytes = (str: string): Uint8Array => new TextEncoder().encode(str);\n\n// Helper: bytes to hex string\nconst bytesToHex = (bytes: Uint8Array): string =>\n    Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');\n\nconst digestReceiptClaim = (receipt: ReceiptClaim): Uint8Array => {\n    const { tagDigest, input, preStateDigest, postStateDigest, output, exitCode } = receipt;\n\n    const systemExitCodeBytes = uint32ToBE(exitCode.system << 24);\n    const userExitCodeBytes = uint32ToBE(exitCode.user << 24);\n    const twoBytes = uint16ToBE(4 << 8);\n\n    const data = concatBytes(\n        tagDigest!,\n        input,\n        preStateDigest,\n        postStateDigest,\n        output,\n        systemExitCodeBytes,\n        userExitCodeBytes,\n        twoBytes\n    );\n\n    return createHash('sha256').update(data).digest();\n}\n\nfunction ok(imageId: Uint8Array, journalDigest: Uint8Array): ReceiptClaim {\n    const exitCode: ExitCode = { system: 0, user: 0 };\n    const output: Output = {\n        journalDigest,\n        assumptionsDigest: new Uint8Array(32)\n    };\n\n    return {\n        tagDigest: createHash('sha256').update(stringToBytes(\"risc0.ReceiptClaim\")).digest(),\n        preStateDigest: imageId,\n        postStateDigest: RISC0_SYSTEM_STATE_ZERO_DIGEST,\n        exitCode,\n        input: new Uint8Array(32),\n        output: digestOutput(output),\n    };\n}\n\n\nconst digestOutput = (output: Output): Uint8Array => {\n    const { journalDigest, assumptionsDigest } = output;\n\n    const tagDigest = createHash('sha256').update(stringToBytes(\"risc0.Output\")).digest();\n    const twoBytes = uint16ToBE(512);\n\n    const combined = concatBytes(\n        tagDigest,\n        journalDigest,\n        assumptionsDigest,\n        twoBytes\n    );\n\n    return createHash('sha256').update(combined).digest();\n}\n\nconst reverseByteOrderUint256 = (value: bigint | Uint8Array): bigint => {\n    let valueBytes: Uint8Array;\n\n    if (typeof value === 'bigint') {\n        const hexString = value.toString(16).padStart(64, '0');\n        valueBytes = hexStringToBytes(hexString);\n    } else {\n        valueBytes = new Uint8Array(32);\n        valueBytes.set(value.slice(0, 32), 0);\n    }\n\n    const reversedBytes = valueBytes.slice().reverse();\n    return BigInt('0x' + bytesToHex(reversedBytes));\n}\n\nconst splitDigest = (digest: bigint | Uint8Array): [bigint, bigint] => {\n    const reversedDigest = reverseByteOrderUint256(digest);\n\n    return split128(reversedDigest);\n}\n\nexport const tryGuessingCurveIdFromJson = (data: Object): CurveId | null => {\n    try {\n        const curveId = findValueInStringToCurveId(findItemFromKeyPatterns(data, ['curve']));\n        return curveId;\n    } catch (err) {\n\n        let x: bigint | null = null;\n\n        for (let value in iterateNestedDictToArray(data)) {\n            try {\n                x = toBigInt(value);\n                break;\n            } catch (err) {\n                continue;\n            }\n        }\n\n        if (x == null || x == undefined) {\n            throw new Error(\"No integer found in the JSON data.\");\n        }\n\n        if (bitLength(x) > 256) {\n            return CurveId.BLS12_381;\n        } else {\n            return CurveId.BN254;\n        }\n    }\n}\n\n\nconst iterateNestedDictToArray = (d: any): any[] => {\n    const result: any[] = [];\n    for (const key in d) {\n        if (Object.prototype.hasOwnProperty.call(d, key)) {\n            const value = d[key];\n            if (value && typeof value === 'object' && !Array.isArray(value)) {\n                // Recursively collect values from nested objects\n                result.push(...iterateNestedDictToArray(value));\n            } else {\n                // Add the value to the result array\n                result.push(value);\n            }\n        }\n    }\n    return result;\n}\n\n\nconst findItemFromKeyPatterns = (data: { [key: string]: any }, keyPatterns: string[]): any => {\n    let bestMatch = null;\n    let bestScore = -1;\n\n    let bestMatchFound: boolean = false;\n\n\n    Object.keys(data).forEach(key => {\n        keyPatterns.forEach(pattern => {\n            if (key.toLowerCase() == pattern.toLowerCase()) {\n                bestMatch = data[key];\n                bestMatchFound = true;\n            }\n            else if (!bestMatchFound && key.trim().toLowerCase().includes(pattern.trim().toLowerCase())) {\n                //count number of matching character\n                const re = new RegExp(pattern.toLowerCase(), 'g');\n                const occurences = key.toLowerCase().match(re);\n                const score = occurences ? occurences.length : 0;\n\n                if (score > bestScore) {\n                    bestScore = score;\n                    bestMatch = data[key];\n                }\n            }\n        });\n    });\n\n    if (bestMatch !== null) {\n        return bestMatch;\n    }\n    throw new KeyPatternNotFoundError(`No key found with patterns ${keyPatterns}`);\n}\n\nexport const getPFromCurveId = (curveId: CurveId): bigint => {\n    return CURVES[curveId].p;\n}\n\nconst projToAffine = (x: string | number | bigint | Uint8Array, y: string | number | bigint | Uint8Array,\n    z: string | number | bigint | Uint8Array, curveId: CurveId): G1Point => {\n\n    let xBigInt = toBigInt(x);\n    let yBigInt = toBigInt(y);\n    let zBigInt = toBigInt(z);\n\n    const p = getPFromCurveId(curveId);\n\n    zBigInt = modInverse(zBigInt, p);\n    xBigInt = xBigInt * zBigInt % p;\n    yBigInt = yBigInt * zBigInt % p;\n\n    return {\n        x: xBigInt,\n        y: yBigInt,\n        curveId\n    }\n\n\n}\n\n\nconst tryParseG1PointFromKey = (data: any, keyPatterns: string[], curveId: CurveId | null): G1Point => {\n    const point = findItemFromKeyPatterns(data, keyPatterns);\n    if (curveId === null || curveId === undefined) {\n        throw new Error(\"Curve ID not provided\");\n    }\n    return tryParseG1Point(point, curveId);\n}\n\n\nconst tryParseG1Point = (point: any, curveId: CurveId): G1Point => {\n\n    if (typeof point === \"object\" && !Array.isArray(point)) {\n        const x = toBigInt(findItemFromKeyPatterns(point, [\"x\"]))\n        const y = toBigInt(findItemFromKeyPatterns(point, [\"y\"]))\n        return {\n            x,\n            y,\n            curveId\n        }\n    } else if (Array.isArray(point)) {\n        if (point.length == 2) {\n            return {\n                x: toBigInt(point[0]),\n                y: toBigInt(point[1]),\n                curveId\n            }\n        } else if (point.length == 3) {\n            return projToAffine(point[0], point[1], point[2], curveId);\n        }\n\n        throw new Error(`Invalid point: ${point}`);\n    } else {\n        throw new Error(`Invalid point: ${point}`);\n    }\n}\n\nconst tryParseG2PointFromKey = (data: any, keyPatterns: string[], curveId: CurveId | null): G2Point => {\n    const point = findItemFromKeyPatterns(data, keyPatterns);\n    if (curveId === null || curveId === undefined) {\n        throw new Error(\"Curve ID not provided\");\n    }\n    return tryParseG2Point(point, curveId);\n}\n\n\nconst tryParseG2Point = (point: any, curveId: CurveId): G2Point => {\n    if (typeof point === \"object\" && !Array.isArray(point)) {\n        const xG2 = findItemFromKeyPatterns(point, [\"x\"]);\n        const yG2 = findItemFromKeyPatterns(point, [\"y\"]);\n\n        if (typeof xG2 === \"object\" && typeof yG2 === \"object\" && !Array.isArray(xG2) && !Array.isArray(yG2)) {\n            return {\n                x: [\n                    toBigInt(findItemFromKeyPatterns(xG2, [\"a0\"])),\n                    toBigInt(findItemFromKeyPatterns(xG2, [\"a1\"]))\n                ],\n                y: [\n                    toBigInt(findItemFromKeyPatterns(yG2, [\"a0\"])),\n                    toBigInt(findItemFromKeyPatterns(yG2, [\"a1\"]))\n                ],\n                curveId: curveId\n            };\n        } else if (Array.isArray(xG2) && Array.isArray(yG2)) {\n            return {\n                x: [toBigInt(xG2[0]), toBigInt(xG2[1])],\n                y: [toBigInt(yG2[0]), toBigInt(yG2[1])],\n                curveId: curveId\n            };\n        } else {\n            throw new Error(`Invalid point: ${point}`);\n        }\n    } else if (Array.isArray(point)) {\n        let supposedX, supposedY;\n\n        if (point.length === 2) {\n            supposedX = point[0];\n            supposedY = point[1];\n        } else if (point.length === 3) {\n            const check = [\n                toBigInt(point[2][0]),\n                toBigInt(point[2][1])\n            ];\n            if (check[0] !== 1n || check[1] !== 0n) {\n                throw new Error(\"Non standard projective coordinates\");\n            }\n            supposedX = point[0];\n            supposedY = point[1];\n        }\n\n        if (Array.isArray(supposedX)) {\n            if (supposedX.length !== 2) {\n                throw new Error(`Invalid fp2 coordinates: ${supposedX}`);\n            }\n            supposedX = [toBigInt(supposedX[0]), toBigInt(supposedX[1])];\n        }\n        if (Array.isArray(supposedY)) {\n            if (supposedY.length !== 2) {\n                throw new Error(`Invalid fp2 coordinates: ${supposedY}`);\n            }\n            supposedY = [toBigInt(supposedY[0]), toBigInt(supposedY[1])];\n        }\n\n        return {\n            x: supposedX,\n            y: supposedY,\n            curveId: curveId\n        };\n    } else {\n        throw new Error(`Invalid point: ${point}`);\n    }\n}\n\nexport const createGroth16ProofFromSp1 = (vkey: Uint8Array, publicValues: Uint8Array, proof: Uint8Array): Groth16Proof => {\n    // SP1 version checking - first 4 bytes should match expected hash\n    const sp1VerifierHashBytes = hexStringToBytes(SP1_VERIFIER_HASH);\n    const selector = proof.slice(0, 4);\n    const expectedSelector = sp1VerifierHashBytes.slice(0, 4);\n\n    if (!selector.every((byte, index) => byte === expectedSelector[index])) {\n        throw new Error(`Invalid SP1 proof version. Expected ${Array.from(expectedSelector).map(b => b.toString(16).padStart(2, '0')).join('')} for version ${SP1_VERIFIER_VERSION}, got ${Array.from(selector).map(b => b.toString(16).padStart(2, '0')).join('')}`);\n    }\n\n    if (publicValues.length % 32 !== 0) {\n        throw new Error(\"SP1 public values must be a multiple of 32 bytes\");\n    }\n\n    // Hash public values and take mod 2^253\n    const pubInputHash = createHash(\"sha256\").update(publicValues).digest();\n    const power253 = 1n << 253n; // 2^253 using bit shift\n    const pubInputHashBigInt = toBigInt(pubInputHash) % power253;\n\n    const actualProof = proof.slice(4);\n\n    const groth16Proof: Groth16Proof = {\n        a: {\n            x: toBigInt(actualProof.slice(0, 32)),\n            y: toBigInt(actualProof.slice(32, 64)),\n            curveId: CurveId.BN254\n        },\n        b: {\n            x: [\n                toBigInt(actualProof.slice(96, 128)),\n                toBigInt(actualProof.slice(64, 96))\n            ],\n            y: [\n                toBigInt(actualProof.slice(160, 192)),\n                toBigInt(actualProof.slice(128, 160))\n            ],\n            curveId: CurveId.BN254\n        },\n        c: {\n            x: toBigInt(actualProof.slice(192, 224)),\n            y: toBigInt(actualProof.slice(224, 256)),\n            curveId: CurveId.BN254\n        },\n        publicInputs: [\n            toBigInt(vkey),\n            pubInputHashBigInt\n        ],\n        vkeyPublicValuesSp1: {\n            vkey,\n            publicValues\n        }\n    };\n\n    if (checkGroth16Proof(groth16Proof)) {\n        return groth16Proof;\n    }\n\n    throw new Error(`Invalid SP1 Groth16 proof: ${groth16Proof}`);\n};\n"
  },
  {
    "path": "tools/npm/garaga_ts/src/node/starknet/honkContractGenerator/parsingUtils.ts",
    "content": "export enum HonkFlavor {\n    KECCAK = 0,\n    STARKNET = 1,\n}\n"
  },
  {
    "path": "tools/npm/garaga_ts/src/wasm/pkg/garaga_rs.d.ts",
    "content": "/* tslint:disable */\n/* eslint-disable */\nexport function drand_calldata_builder(values: any[]): any[];\nexport function drand_tlock_encrypt_calldata_builder(values: any[]): any[];\nexport function msm_calldata_builder(values: any[], scalars: any[], curve_id: number, include_points_and_scalars: boolean, serialize_as_pure_felt252_array: boolean): any[];\nexport function mpc_calldata_builder(curve_id: number, values1: any[], n_fixed_g2: number, values2: any[]): any[];\nexport function schnorr_calldata_builder(rx: any, s: any, e: any, px: any, py: any, prepend_public_key: boolean, curve_id: number): any[];\nexport function ecdsa_calldata_builder(r: any, s: any, v: number, px: any, py: any, z: any, prepend_public_key: boolean, curve_id: number): any[];\nexport function eddsa_calldata_builder(ry_twisted: any, s: any, py_twisted: any, msg: any, prepend_public_key: boolean): any[];\nexport function rsa_2048_calldata_builder(signature: any, expected_message: any, modulus: any, prepend_public_key: boolean): any[];\nexport function rsa_2048_sha256_calldata_builder(signature: any, message: any, modulus: any, prepend_public_key: boolean): any[];\nexport function to_weirstrass(x_twisted: any, y_twisted: any): any[];\nexport function to_twistededwards(x_weirstrass: any, y_weirstrass: any): any[];\nexport function get_groth16_calldata(proof_js: any, vk_js: any, curve_id_js: any): any[];\nexport function get_zk_honk_calldata(proof_js: any, public_inputs_js: any, vk_js: any): any[];\nexport function poseidon_hash(x: any, y: any): any;\n\nexport type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;\n\nexport interface InitOutput {\n  readonly memory: WebAssembly.Memory;\n  readonly drand_calldata_builder: (a: number, b: number) => [number, number, number, number];\n  readonly drand_tlock_encrypt_calldata_builder: (a: number, b: number) => [number, number, number, number];\n  readonly msm_calldata_builder: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];\n  readonly mpc_calldata_builder: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];\n  readonly schnorr_calldata_builder: (a: any, b: any, c: any, d: any, e: any, f: number, g: number) => [number, number, number, number];\n  readonly ecdsa_calldata_builder: (a: any, b: any, c: number, d: any, e: any, f: any, g: number, h: number) => [number, number, number, number];\n  readonly eddsa_calldata_builder: (a: any, b: any, c: any, d: any, e: number) => [number, number, number, number];\n  readonly rsa_2048_calldata_builder: (a: any, b: any, c: any, d: number) => [number, number, number, number];\n  readonly rsa_2048_sha256_calldata_builder: (a: any, b: any, c: any, d: number) => [number, number, number, number];\n  readonly to_weirstrass: (a: any, b: any) => [number, number, number, number];\n  readonly to_twistededwards: (a: any, b: any) => [number, number, number, number];\n  readonly get_groth16_calldata: (a: any, b: any, c: any) => [number, number, number, number];\n  readonly get_zk_honk_calldata: (a: any, b: any, c: any) => [number, number, number, number];\n  readonly poseidon_hash: (a: any, b: any) => [number, number, number];\n  readonly __wbindgen_exn_store: (a: number) => void;\n  readonly __externref_table_alloc: () => number;\n  readonly __wbindgen_export_2: WebAssembly.Table;\n  readonly __wbindgen_malloc: (a: number, b: number) => number;\n  readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;\n  readonly __externref_table_dealloc: (a: number) => void;\n  readonly __externref_drop_slice: (a: number, b: number) => void;\n  readonly __wbindgen_free: (a: number, b: number, c: number) => void;\n  readonly __wbindgen_start: () => void;\n}\n\nexport type SyncInitInput = BufferSource | WebAssembly.Module;\n/**\n* Instantiates the given `module`, which can either be bytes or\n* a precompiled `WebAssembly.Module`.\n*\n* @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.\n*\n* @returns {InitOutput}\n*/\nexport function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;\n\n/**\n* If `module_or_path` is {RequestInfo} or {URL}, makes a request and\n* for everything else, calls `WebAssembly.instantiate` directly.\n*\n* @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.\n*\n* @returns {Promise<InitOutput>}\n*/\nexport default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;\n"
  },
  {
    "path": "tools/npm/garaga_ts/src/wasm/pkg/garaga_rs.js",
    "content": "let wasm;\n\nfunction addToExternrefTable0(obj) {\n    const idx = wasm.__externref_table_alloc();\n    wasm.__wbindgen_export_2.set(idx, obj);\n    return idx;\n}\n\nfunction handleError(f, args) {\n    try {\n        return f.apply(this, args);\n    } catch (e) {\n        const idx = addToExternrefTable0(e);\n        wasm.__wbindgen_exn_store(idx);\n    }\n}\n\nconst cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );\n\nif (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n    if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n        cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n    }\n    return cachedUint8ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n    ptr = ptr >>> 0;\n    return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nfunction debugString(val) {\n    // primitive types\n    const type = typeof val;\n    if (type == 'number' || type == 'boolean' || val == null) {\n        return  `${val}`;\n    }\n    if (type == 'string') {\n        return `\"${val}\"`;\n    }\n    if (type == 'symbol') {\n        const description = val.description;\n        if (description == null) {\n            return 'Symbol';\n        } else {\n            return `Symbol(${description})`;\n        }\n    }\n    if (type == 'function') {\n        const name = val.name;\n        if (typeof name == 'string' && name.length > 0) {\n            return `Function(${name})`;\n        } else {\n            return 'Function';\n        }\n    }\n    // objects\n    if (Array.isArray(val)) {\n        const length = val.length;\n        let debug = '[';\n        if (length > 0) {\n            debug += debugString(val[0]);\n        }\n        for(let i = 1; i < length; i++) {\n            debug += ', ' + debugString(val[i]);\n        }\n        debug += ']';\n        return debug;\n    }\n    // Test for built-in\n    const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n    let className;\n    if (builtInMatches && builtInMatches.length > 1) {\n        className = builtInMatches[1];\n    } else {\n        // Failed to match the standard '[object ClassName]'\n        return toString.call(val);\n    }\n    if (className == 'Object') {\n        // we're a user defined class or Object\n        // JSON.stringify avoids problems with cycles, and is generally much\n        // easier than looping through ownProperties of `val`.\n        try {\n            return 'Object(' + JSON.stringify(val) + ')';\n        } catch (_) {\n            return 'Object';\n        }\n    }\n    // errors\n    if (val instanceof Error) {\n        return `${val.name}: ${val.message}\\n${val.stack}`;\n    }\n    // TODO we could test for more things here, like `Set`s and `Map`s.\n    return className;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n    ? function (arg, view) {\n    return cachedTextEncoder.encodeInto(arg, view);\n}\n    : function (arg, view) {\n    const buf = cachedTextEncoder.encode(arg);\n    view.set(buf);\n    return {\n        read: arg.length,\n        written: buf.length\n    };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n    if (realloc === undefined) {\n        const buf = cachedTextEncoder.encode(arg);\n        const ptr = malloc(buf.length, 1) >>> 0;\n        getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n        WASM_VECTOR_LEN = buf.length;\n        return ptr;\n    }\n\n    let len = arg.length;\n    let ptr = malloc(len, 1) >>> 0;\n\n    const mem = getUint8ArrayMemory0();\n\n    let offset = 0;\n\n    for (; offset < len; offset++) {\n        const code = arg.charCodeAt(offset);\n        if (code > 0x7F) break;\n        mem[ptr + offset] = code;\n    }\n\n    if (offset !== len) {\n        if (offset !== 0) {\n            arg = arg.slice(offset);\n        }\n        ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n        const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n        const ret = encodeString(arg, view);\n\n        offset += ret.written;\n        ptr = realloc(ptr, len, offset, 1) >>> 0;\n    }\n\n    WASM_VECTOR_LEN = offset;\n    return ptr;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n    if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n        cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n    }\n    return cachedDataViewMemory0;\n}\n\nfunction isLikeNone(x) {\n    return x === undefined || x === null;\n}\n\nfunction passArrayJsValueToWasm0(array, malloc) {\n    const ptr = malloc(array.length * 4, 4) >>> 0;\n    for (let i = 0; i < array.length; i++) {\n        const add = addToExternrefTable0(array[i]);\n        getDataViewMemory0().setUint32(ptr + 4 * i, add, true);\n    }\n    WASM_VECTOR_LEN = array.length;\n    return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n    const value = wasm.__wbindgen_export_2.get(idx);\n    wasm.__externref_table_dealloc(idx);\n    return value;\n}\n\nfunction getArrayJsValueFromWasm0(ptr, len) {\n    ptr = ptr >>> 0;\n    const mem = getDataViewMemory0();\n    const result = [];\n    for (let i = ptr; i < ptr + 4 * len; i += 4) {\n        result.push(wasm.__wbindgen_export_2.get(mem.getUint32(i, true)));\n    }\n    wasm.__externref_drop_slice(ptr, len);\n    return result;\n}\n/**\n * @param {any[]} values\n * @returns {any[]}\n */\nexport function drand_calldata_builder(values) {\n    const ptr0 = passArrayJsValueToWasm0(values, wasm.__wbindgen_malloc);\n    const len0 = WASM_VECTOR_LEN;\n    const ret = wasm.drand_calldata_builder(ptr0, len0);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v2 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v2;\n}\n\n/**\n * @param {any[]} values\n * @returns {any[]}\n */\nexport function drand_tlock_encrypt_calldata_builder(values) {\n    const ptr0 = passArrayJsValueToWasm0(values, wasm.__wbindgen_malloc);\n    const len0 = WASM_VECTOR_LEN;\n    const ret = wasm.drand_tlock_encrypt_calldata_builder(ptr0, len0);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v2 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v2;\n}\n\n/**\n * @param {any[]} values\n * @param {any[]} scalars\n * @param {number} curve_id\n * @param {boolean} include_points_and_scalars\n * @param {boolean} serialize_as_pure_felt252_array\n * @returns {any[]}\n */\nexport function msm_calldata_builder(values, scalars, curve_id, include_points_and_scalars, serialize_as_pure_felt252_array) {\n    const ptr0 = passArrayJsValueToWasm0(values, wasm.__wbindgen_malloc);\n    const len0 = WASM_VECTOR_LEN;\n    const ptr1 = passArrayJsValueToWasm0(scalars, wasm.__wbindgen_malloc);\n    const len1 = WASM_VECTOR_LEN;\n    const ret = wasm.msm_calldata_builder(ptr0, len0, ptr1, len1, curve_id, include_points_and_scalars, serialize_as_pure_felt252_array);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v3 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v3;\n}\n\n/**\n * @param {number} curve_id\n * @param {any[]} values1\n * @param {number} n_fixed_g2\n * @param {any[]} values2\n * @returns {any[]}\n */\nexport function mpc_calldata_builder(curve_id, values1, n_fixed_g2, values2) {\n    const ptr0 = passArrayJsValueToWasm0(values1, wasm.__wbindgen_malloc);\n    const len0 = WASM_VECTOR_LEN;\n    const ptr1 = passArrayJsValueToWasm0(values2, wasm.__wbindgen_malloc);\n    const len1 = WASM_VECTOR_LEN;\n    const ret = wasm.mpc_calldata_builder(curve_id, ptr0, len0, n_fixed_g2, ptr1, len1);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v3 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v3;\n}\n\n/**\n * @param {any} rx\n * @param {any} s\n * @param {any} e\n * @param {any} px\n * @param {any} py\n * @param {boolean} prepend_public_key\n * @param {number} curve_id\n * @returns {any[]}\n */\nexport function schnorr_calldata_builder(rx, s, e, px, py, prepend_public_key, curve_id) {\n    const ret = wasm.schnorr_calldata_builder(rx, s, e, px, py, prepend_public_key, curve_id);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v1;\n}\n\n/**\n * @param {any} r\n * @param {any} s\n * @param {number} v\n * @param {any} px\n * @param {any} py\n * @param {any} z\n * @param {boolean} prepend_public_key\n * @param {number} curve_id\n * @returns {any[]}\n */\nexport function ecdsa_calldata_builder(r, s, v, px, py, z, prepend_public_key, curve_id) {\n    const ret = wasm.ecdsa_calldata_builder(r, s, v, px, py, z, prepend_public_key, curve_id);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v1;\n}\n\n/**\n * @param {any} ry_twisted\n * @param {any} s\n * @param {any} py_twisted\n * @param {any} msg\n * @param {boolean} prepend_public_key\n * @returns {any[]}\n */\nexport function eddsa_calldata_builder(ry_twisted, s, py_twisted, msg, prepend_public_key) {\n    const ret = wasm.eddsa_calldata_builder(ry_twisted, s, py_twisted, msg, prepend_public_key);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v1;\n}\n\n/**\n * @param {any} signature\n * @param {any} expected_message\n * @param {any} modulus\n * @param {boolean} prepend_public_key\n * @returns {any[]}\n */\nexport function rsa_2048_calldata_builder(signature, expected_message, modulus, prepend_public_key) {\n    const ret = wasm.rsa_2048_calldata_builder(signature, expected_message, modulus, prepend_public_key);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v1;\n}\n\n/**\n * @param {any} signature\n * @param {any} message\n * @param {any} modulus\n * @param {boolean} prepend_public_key\n * @returns {any[]}\n */\nexport function rsa_2048_sha256_calldata_builder(signature, message, modulus, prepend_public_key) {\n    const ret = wasm.rsa_2048_sha256_calldata_builder(signature, message, modulus, prepend_public_key);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v1;\n}\n\n/**\n * @param {any} x_twisted\n * @param {any} y_twisted\n * @returns {any[]}\n */\nexport function to_weirstrass(x_twisted, y_twisted) {\n    const ret = wasm.to_weirstrass(x_twisted, y_twisted);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v1;\n}\n\n/**\n * @param {any} x_weirstrass\n * @param {any} y_weirstrass\n * @returns {any[]}\n */\nexport function to_twistededwards(x_weirstrass, y_weirstrass) {\n    const ret = wasm.to_twistededwards(x_weirstrass, y_weirstrass);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v1;\n}\n\n/**\n * @param {any} proof_js\n * @param {any} vk_js\n * @param {any} curve_id_js\n * @returns {any[]}\n */\nexport function get_groth16_calldata(proof_js, vk_js, curve_id_js) {\n    const ret = wasm.get_groth16_calldata(proof_js, vk_js, curve_id_js);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v1;\n}\n\n/**\n * @param {any} proof_js\n * @param {any} public_inputs_js\n * @param {any} vk_js\n * @returns {any[]}\n */\nexport function get_zk_honk_calldata(proof_js, public_inputs_js, vk_js) {\n    const ret = wasm.get_zk_honk_calldata(proof_js, public_inputs_js, vk_js);\n    if (ret[3]) {\n        throw takeFromExternrefTable0(ret[2]);\n    }\n    var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();\n    wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n    return v1;\n}\n\n/**\n * @param {any} x\n * @param {any} y\n * @returns {any}\n */\nexport function poseidon_hash(x, y) {\n    const ret = wasm.poseidon_hash(x, y);\n    if (ret[2]) {\n        throw takeFromExternrefTable0(ret[1]);\n    }\n    return takeFromExternrefTable0(ret[0]);\n}\n\nasync function __wbg_load(module, imports) {\n    if (typeof Response === 'function' && module instanceof Response) {\n        if (typeof WebAssembly.instantiateStreaming === 'function') {\n            try {\n                return await WebAssembly.instantiateStreaming(module, imports);\n\n            } catch (e) {\n                if (module.headers.get('Content-Type') != 'application/wasm') {\n                    console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        const bytes = await module.arrayBuffer();\n        return await WebAssembly.instantiate(bytes, imports);\n\n    } else {\n        const instance = await WebAssembly.instantiate(module, imports);\n\n        if (instance instanceof WebAssembly.Instance) {\n            return { instance, module };\n\n        } else {\n            return instance;\n        }\n    }\n}\n\nfunction __wbg_get_imports() {\n    const imports = {};\n    imports.wbg = {};\n    imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) {\n        const ret = arg0.buffer;\n        return ret;\n    };\n    imports.wbg.__wbg_get_67b2ba62fc30de12 = function() { return handleError(function (arg0, arg1) {\n        const ret = Reflect.get(arg0, arg1);\n        return ret;\n    }, arguments) };\n    imports.wbg.__wbg_get_b9b93047fe3cf45b = function(arg0, arg1) {\n        const ret = arg0[arg1 >>> 0];\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_Object_7f2dcef8f78644a4 = function(arg0) {\n        let result;\n        try {\n            result = arg0 instanceof Object;\n        } catch (_) {\n            result = false;\n        }\n        const ret = result;\n        return ret;\n    };\n    imports.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9 = function(arg0) {\n        let result;\n        try {\n            result = arg0 instanceof Uint8Array;\n        } catch (_) {\n            result = false;\n        }\n        const ret = result;\n        return ret;\n    };\n    imports.wbg.__wbg_isArray_a1eab7e0d067391b = function(arg0) {\n        const ret = Array.isArray(arg0);\n        return ret;\n    };\n    imports.wbg.__wbg_length_a446193dc22c12f8 = function(arg0) {\n        const ret = arg0.length;\n        return ret;\n    };\n    imports.wbg.__wbg_length_e2d2a49132c1b256 = function(arg0) {\n        const ret = arg0.length;\n        return ret;\n    };\n    imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) {\n        const ret = new Uint8Array(arg0);\n        return ret;\n    };\n    imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) {\n        arg0.set(arg1, arg2 >>> 0);\n    };\n    imports.wbg.__wbindgen_add = function(arg0, arg1) {\n        const ret = arg0 + arg1;\n        return ret;\n    };\n    imports.wbg.__wbindgen_bigint_from_str = function(arg0, arg1) {\n        const ret = BigInt(getStringFromWasm0(arg0, arg1));\n        return ret;\n    };\n    imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n        const ret = debugString(arg1);\n        const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        const len1 = WASM_VECTOR_LEN;\n        getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n        getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n    };\n    imports.wbg.__wbindgen_init_externref_table = function() {\n        const table = wasm.__wbindgen_export_2;\n        const offset = table.grow(4);\n        table.set(0, undefined);\n        table.set(offset + 0, undefined);\n        table.set(offset + 1, null);\n        table.set(offset + 2, true);\n        table.set(offset + 3, false);\n        ;\n    };\n    imports.wbg.__wbindgen_is_null = function(arg0) {\n        const ret = arg0 === null;\n        return ret;\n    };\n    imports.wbg.__wbindgen_is_undefined = function(arg0) {\n        const ret = arg0 === undefined;\n        return ret;\n    };\n    imports.wbg.__wbindgen_memory = function() {\n        const ret = wasm.memory;\n        return ret;\n    };\n    imports.wbg.__wbindgen_number_get = function(arg0, arg1) {\n        const obj = arg1;\n        const ret = typeof(obj) === 'number' ? obj : undefined;\n        getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n        getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n    };\n    imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n        const obj = arg1;\n        const ret = typeof(obj) === 'string' ? obj : undefined;\n        var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        var len1 = WASM_VECTOR_LEN;\n        getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n        getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n    };\n    imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n        const ret = getStringFromWasm0(arg0, arg1);\n        return ret;\n    };\n    imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n        throw new Error(getStringFromWasm0(arg0, arg1));\n    };\n\n    return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n    wasm = instance.exports;\n    __wbg_init.__wbindgen_wasm_module = module;\n    cachedDataViewMemory0 = null;\n    cachedUint8ArrayMemory0 = null;\n\n\n    wasm.__wbindgen_start();\n    return wasm;\n}\n\nfunction initSync(module) {\n    if (wasm !== undefined) return wasm;\n\n\n    if (typeof module !== 'undefined') {\n        if (Object.getPrototypeOf(module) === Object.prototype) {\n            ({module} = module)\n        } else {\n            console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n        }\n    }\n\n    const imports = __wbg_get_imports();\n\n    __wbg_init_memory(imports);\n\n    if (!(module instanceof WebAssembly.Module)) {\n        module = new WebAssembly.Module(module);\n    }\n\n    const instance = new WebAssembly.Instance(module, imports);\n\n    return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n    if (wasm !== undefined) return wasm;\n\n\n    if (typeof module_or_path !== 'undefined') {\n        if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n            ({module_or_path} = module_or_path)\n        } else {\n            console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n        }\n    }\n\n    if (typeof module_or_path === 'undefined') {\n        throw new Error();\n    }\n    const imports = __wbg_get_imports();\n\n    if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n        module_or_path = fetch(module_or_path);\n    }\n\n    __wbg_init_memory(imports);\n\n    const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n    return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n"
  },
  {
    "path": "tools/npm/garaga_ts/src/wasm/pkg/garaga_rs_bg.wasm.d.ts",
    "content": "declare const wasm_module_base64: string;\nexport default wasm_module_base64;"
  },
  {
    "path": "tools/npm/garaga_ts/src/wasm/pkg/garaga_rs_bg.wasm.js",
    "content": "export default 'data:application/wasm;base64,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ZGF0YV9idWlsZGVyAKIEJGRyYW5kX3Rsb2NrX2VuY3J5cHRfY2FsbGRhdGFfYnVpbGRlcgCjBBRtc21fY2FsbGRhdGFfYnVpbGRlcgCIBBRtcGNfY2FsbGRhdGFfYnVpbGRlcgCPBBhzY2hub3JyX2NhbGxkYXRhX2J1aWxkZXIAiQQWZWNkc2FfY2FsbGRhdGFfYnVpbGRlcgCBBBZlZGRzYV9jYWxsZGF0YV9idWlsZGVyAJgEGXJzYV8yMDQ4X2NhbGxkYXRhX2J1aWxkZXIAnAQgcnNhXzIwNDhfc2hhMjU2X2NhbGxkYXRhX2J1aWxkZXIAnQQNdG9fd2VpcnN0cmFzcwCkBBF0b190d2lzdGVkZWR3YXJkcwClBBRnZXRfZ3JvdGgxNl9jYWxsZGF0YQCfBBRnZXRfemtfaG9ua19jYWxsZGF0YQCgBA1wb3NlaWRvbl9oYXNoAKkEFF9fd2JpbmRnZW5fZXhuX3N0b3JlANgEF19fZXh0ZXJucmVmX3RhYmxlX2FsbG9jAK0DE19fd2JpbmRnZW5fZXhwb3J0XzIBARFfX3diaW5kZ2VuX21hbGxvYwCZBBJfX3diaW5kZ2VuX3JlYWxsb2MAqwQZX19leHRlcm5yZWZfdGFibGVfZGVhbGxvYwCrAxZfX2V4dGVybnJlZl9kcm9wX3NsaWNlAJIDD19fd2JpbmRnZW5fZnJlZQDPBBBfX3diaW5kZ2VuX3N0YXJ0ABQJvQIBAEEBC5sBlAPzBIMEvwTLA8AE0APcA9oD0QPBBKIC9gTnBNYB7QOxBNQExgTsA+EC7ATpBMIErwSLBMAE0wTdA5AEkQSSBO4EywS3A9ME6wTEBPAExgTsA+IC6gTfA9UDsgSEBPsD+gOMBI0E6wP/AvkDrQSzBOkC6ALvBNMEuQOTA8YE7APfAu0E4AOWBOEDxgTsA+MC8QS/A88D2gOuBM4DvwTNA9cDzAPyBOIDtATjA4UEvwTABJoC1QT0BKwEtgTGBOwD5AL1BLUE5AOKBMYE0wS3BLgEsgO6BLgEsATFBMMEugS6BLkEvAS7BNUEzASfAocE+gTmA4ME5wOeBNsDxgTvA/MC+wTaBNkE3AT9A9sE/AS9BMgDigOpA4MFxgT2A+4C/QT+BNEE3QTeBKUCvAOGA6wC+AOABQwBNgrqj27zBLeHAgIIfyZ+IwBB8CdrIgMkAAJAAkACQAJAAkACQAJAIAJB4ABqIgVBwI3FAEEwEPEDBEAgAUHgAGoiBkHAjcUAQTAQ8QNFDQIgAikDMCEZIAIpAzghFiACKQNAIRcgAikDSCEVIAIpA1AhEyACKQNYIRFBiAEhBANAIANB4BtqIAEgBGopAwAiDkIAIBFCABDJAyADQfAbaiAOQgAgE0IAEMkDIANBgBxqIA5CACAVQgAQyQMgA0GQHGogDkIAIBdCABDJAyADQaAcaiAOQgAgFkIAEMkDIANBsBxqIA5CACAZQgAQyQMgA0HQG2ogAykD4BsiEiAUfCIcQv3/8//P///5iX9+Ig5CAEKr1f7///+//7l/QgAQyQMgA0HAG2ogDkIAQv//z4rr///VHkIAEMkDIANBsBtqIA5CAEKk7MO1j9S0mOcAQgAQyQMgA0GgG2ogDkIAQr+llJzP8NK75ABCABDJAyADQZAbaiAOQgBC19mumuT26Y3LAEIAEMkDIANBgBtqIA5CAEKazf/Lo73EgBpCABDJAyADKQOIGyADKQOwHCIOIA18IhogAykDqBwgAykDoBwiDSAQfCIYIA1UrXwgGCADKQOYHCALIAMpA5AcIgt8IhAgC1StfCAQIAMpA4gcIAMpA4AcIgsgDHwiDCALVK18IAwgAykD+BsgAykD8BsiCyAPfCINIAtUrXwgDSADKQPoGyASIBxWrXx8IgsgDVStfHwiDyAMVK18fCIMIBBUrXx8Ig0gGFStfHwiGyADKQOAG3wiGCAbVK18IBggAykDmBsgDSADKQOQG3wiECANVK18IBAgAykDqBsgDCADKQOgG3wiEiAMVK18IBIgAykDuBsgDyADKQOwG3wiDCAPVK18IAwgAykDyBsgCyADKQPAGyILfCINIAtUrXwgDSADKQPYGyADKQPQGyILIBx8IAtUrXx8IhQgDVStfHwiDyAMVK18fCIMIBJUrXx8IgsgEFStfHwiECAYVK18IBogG1atIAMpA7gcIA4gGlatfHx8IQ0gBEEIayIEQdgARw0ACyANQprN/8ujvcSAGlgNAQwECyADQbgfaiABQShqKQMANwMAIANBsB9qIAFBIGopAwA3AwAgA0GoH2ogAUEYaikDADcDACADQaAfaiABQRBqKQMANwMAIANBmB9qIAFBCGopAwA3AwAgA0HIH2ogAUE4aikDADcDACADQdAfaiABQUBrKQMANwMAIANB2B9qIAFByABqKQMANwMAIANB4B9qIAFB0ABqKQMANwMAIANB6B9qIAFB2ABqKQMANwMAIAMgASkDADcDkB8gAyABKQMwNwPAHyADQZggaiABQYgBaikDADcDACADQZAgaiABQYABaikDADcDACADQYggaiABQfgAaikDADcDACADQYAgaiABQfAAaikDADcDACADQfgfaiABQegAaikDADcDACADIAEpA2A3A/AfIAAgA0GQH2pBkAH8CgAADAULIA1Cms3/y6O9xIAaUQ0BIA8hDiAMIRIgCyERIBAhEwwDCyADQcggaiACQShqKQMANwMAIANBwCBqIAJBIGopAwA3AwAgA0G4IGogAkEYaikDADcDACADQbAgaiACQRBqKQMANwMAIANBqCBqIAJBCGopAwA3AwAgA0HYIGogAkEwaiIBQQhqKQMANwMAIANB4CBqIAFBEGopAwA3AwAgA0HoIGogAUEYaikDADcDACADQfAgaiABQSBqKQMANwMAIANB+CBqIAFBKGopAwA3AwAgAyACKQMANwOgICADIAEpAwA3A9AgIANBqCFqIAVBKGopAwA3AwAgA0GgIWogBUEgaikDADcDACADQZghaiAFQRhqKQMANwMAIANBkCFqIAVBEGopAwA3AwAgA0GIIWogBUEIaikDADcDACADIAUpAwA3A4AhIAAgA0GgIGpBkAH8CgAADAMLIBBC19mumuT26Y3LAFYNAAJAIBBC19mumuT26Y3LAFIEQCAPIQ4gDCESIAshESAQIRMMAQsgC0K/pZScz/DSu+QAVg0BQtfZrprk9umNywAhEyALQr+llJzP8NK75ABSBEAgDyEOIAwhEiALIREMAQsgDEKk7MO1j9S0mOcAVg0BQr+llJzP8NK75AAhESAMQqTsw7WP1LSY5wBSBEAgDyEOIAwhEgwBCyAPQv//z4rr///VHlYNAUKk7MO1j9S0mOcAIRIgD0L//8+K6///1R5SBEAgDyEODAELQv//z4rr///VHiEOIBRCqtX+////v/+5f1YNAQtCms3/y6O9xIAaIQ0MAQsgD0L//8+K6///1R59IhMgFEKr1f7///+//7l/VK0iEn0hDiAMQqTsw7WP1LSY5wB9IhEgD0L//8+K6///1R5UIBIgE1ZyrSIPfSES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yQMgA0GgGGogDkIAQr+llJzP8NK75ABCABDJAyADQZAYaiAOQgBC19mumuT26Y3LAEIAEMkDIANBgBhqIA5CAEKazf/Lo73EgBpCABDJAyADKQOIGCADKQOwGSIOIA18IhogAykDqBkgAykDoBkiDSAQfCIYIA1UrXwgGCADKQOYGSALIAMpA5AZIgt8IhAgC1StfCAQIAMpA4gZIAMpA4AZIgsgDHwiDCALVK18IAwgAykD+BggAykD8BgiCyAPfCINIAtUrXwgDSADKQPoGCASIBxWrXx8IgsgDVStfHwiDyAMVK18fCIMIBBUrXx8Ig0gGFStfHwiGyADKQOAGHwiGCAbVK18IBggAykDmBggDSADKQOQGHwiECANVK18IBAgAykDqBggDCADKQOgGHwiEiAMVK18IBIgAykDuBggDyADKQOwGHwiDCAPVK18IAwgAykDyBggCyADKQPAGCILfCINIAtUrXwgDSADKQPYGCADKQPQGCILIBx8IAtUrXx8IhQgDVStfHwiDyAMVK18fCIMIBJUrXx8IgsgEFStfHwiECAYVK18IBogG1atIAMpA7gZIA4gGlatfHx8IQ0gBEEIayIEQdgARw0ACwJAAkAgDUKazf/Lo73EgBpWDQAgDUKazf/Lo73EgBpSBEAgDyEOIAwhEiALIREgECETDAILIBBC19mumuT26Y3LAFYNAAJAIBBC19mumuT26Y3LAFIEQCAPIQ4gDCESIAshESAQIRMMAQsgC0K/pZScz/DSu+QAVg0BQtfZrprk9umNywAhEyALQr+llJzP8NK75ABSBEAgDyEOIAwhEiALIREMAQsgDEKk7MO1j9S0mOcAVg0BQr+llJzP8NK75AAhESAMQqTsw7WP1LSY5wBSBEAgDyEOIAwhEgwBCyAPQv//z4rr///VHlYNAUKk7MO1j9S0mOcAIRIgD0L//8+K6///1R5SBEAgDyEODAELQv//z4rr///VHiEOIBRCqtX+////v/+5f1YNAQtCms3/y6O9xIAaIQ0MAQsgD0L//8+K6///1R59IhMgFEKr1f7///+//7l/VK0iEn0hDiAMQqTsw7WP1LSY5wB9IhEgD0L//8+K6///1R5UIBIgE1ZyrSIPfSESIAtCv6WUnM/w0rvkAH0iEyAMQqTsw7WP1LSY5wBUIA8gEVZyrSIPfSERIBBC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AwsgA0HoJWogAUEoaikDADcDACADQeAlaiABQSBqKQMANwMAIANB2CVqIAFBGGopAwA3AwAgA0HQJWogAUEQaikDADcDACADQcglaiABQQhqKQMANwMAIANB+CVqIAdBCGopAwA3AwAgA0GAJmogB0EQaikDADcDACADQYgmaiAHQRhqKQMANwMAIANBkCZqIAdBIGopAwA3AwAgA0GYJmogB0EoaikDADcDACADIAEpAwA3A8AlIAMgBykDADcD8CUgA0HIJmogBkEoaikDADcDACADQcAmaiAGQSBqKQMANwMAIANBuCZqIAZBGGopAwA3AwAgA0GwJmogBkEQaikDADcDACADQagmaiAGQQhqKQMANwMAIAMgBikDADcDoCYgACADQcAlakGQAfwKAAAMCwtBkI3FAEErIANB7ydqQYCNxQBBsJLFABDKAwALIBBC19mumuT26Y3LAFYNBCAQQtfZrprk9umNywBSBEBCms3/y6O9xIAaIQ0MAQsgC0K/pZScz/DSu+QAVg0EQtfZrprk9umNywAhEyALQr+llJzP8NK75ABSBEBCms3/y6O9xIAaIQ0MAgsgDEKk7MO1j9S0mOcAVg0EQr+llJzP8NK75AAhESAMQqTsw7WP1LSY5wBSBEBCms3/y6O9xIAaIQ0MAwsgD0L//8+K6///1R5WDQRCpOzDtY/UtJjnACESIA9C///Piuv//9UeUQ0DQprN/8ujvcSAGiENIA8hDgwFCyAQIRMLIAshEQsgDCESIA8hDgwCC0L//8+K6///1R4hDiAUQqrV/v///7//uX9WDQBCms3/y6O9xIAaIQ0MAQsgD0L//8+K6///1R59IhMgFEKr1f7///+//7l/VK0iEn0hDiAMQqTsw7WP1LSY5wB9IhEgD0L//8+K6///1R5UIBIgE1ZyrSIPfSESIAtCv6WUnM/w0rvkAH0iEyAMQqTsw7WP1LSY5wBUIA8gEVZyrSIPfSERIBBC19mumuT26Y3LAH0iDCALQr+llJzP8NK75ABUIA8gE1ZyrSILfSETIA0gEELX2a6a5PbpjcsAVCALIAxWcq19QprN/8ujvcSAGn0hDSAUQtWqgYCAgMCAxgB8IRQLIAMgDjcD0CEgAyAUNwPYISADIBI3A8ghIAMgETcDwCEgAyATNwO4ISADIA03A7AhQprN/8ujvcSAGiEPIA1CAYYgEyATIBN8IhNWIBMgESARfCIQIBFUIBAgEiASfCIMIBJUIAwgDCAOIA58IgsgDlQgCyAUIBR8Ig0gFFStfCIRIAtUcq18IgxWcq18IhIgEFRyrXwiDiATVHKthCITIQsCQAJAAkAgE0Kazf/Lo73EgBpSDQBC19mumuT26Y3LACEPIA4iC0LX2a6a5PbpjcsAUg0AQr+llJzP8NK75AAhDyASIgtCv6WUnM/w0rvkAFINAEKk7MO1j9S0mOcAIQ8gDCILQqTsw7WP1LSY5wBSDQBC///Piuv//9UeIQ8gESILQv//z4rr///VHlINAEKr1f7///+//7l/IQ8gDSILQqvV/v///7//uX9RDQELIAsgD1oNACARIQsgDCERIBIhDCAOIRAMAQsgEUL//8+K6///1R59IhAgDUKr1f7///+//7l/VK0iD30hCyAMQqTsw7WP1LSY5wB9IhUgEUL//8+K6///1R5UIA8gEFZyrSIPfSERIBJCv6WUnM/w0rvkAH0iECAMQqTsw7WP1LSY5wBUIA8gFVZyrSIPfSEMIA5C19mumuT26Y3LAH0iFSASQr+llJzP8NK75ABUIA8gEFZyrSIPfSEQIBMgDkLX2a6a5PbpjcsAVCAPIBVWcq19QprN/8ujvcSAGn0hEyANQtWqgYCAgMCAxgB8IQ0LIAMgDTcD6CUgAyALNwPgJSADIBE3A9glIAMgDDcD0CUgAyAQNwPIJSADIBM3A8AlIANB4CFqIgUgA0HAJWoiAiADQbAhahC9AkEoIQQgA0HoJWpCADcDACADQeAlakIANwMAIANB2CVqQgA3AwAgA0HQJWpCADcDACADQcglakIANwMAIANCADcDwCUgA0HYJmoiByACIAYQuwEgAiAHIAYQuwEgA0GQImogAiAFEL0CIAMpA5AiIRkgAykDmCIhFiADKQOgIiEXIAMpA6giIRUgAykDsCIhEyADKQO4IiERQgAhFEIAIQ9CACEMQgAhC0IAIRBCACENA0AgA0HgCWogA0GQImogBGopAwAiDkIAIBFCABDJAyADQfAJaiAOQgAgE0IAEMkDIANBgApqIA5CACAVQgAQyQMgA0GQCmogDkIAIBdCABDJAyADQaAKaiAOQgAgFkIAEMkDIANBsApqIA5CACAZQgAQyQMgA0HQCWogAykD4AkiEiAUfCIcQv3/8//P///5iX9+Ig5CAEKr1f7///+//7l/QgAQyQMgA0HACWogDkIAQv//z4rr///VHkIAEMkDIANBsAlqIA5CAEKk7MO1j9S0mOcAQgAQyQMgA0GgCWogDkIAQr+llJzP8NK75ABCABDJAyADQZAJaiAOQgBC19mumuT26Y3LAEIAEMkDIANBgAlqIA5CAEKazf/Lo73EgBpCABDJAyADKQOICSADKQOwCiIOIA18IhogAykDqAogAykDoAoiDSAQfCIYIA1UrXwgGCADKQOYCiALIAMpA5AKIgt8IhAgC1StfCAQIAMpA4gKIAMpA4AKIgsgDHwiDCALVK18IAwgAykD+AkgAykD8AkiCyAPfCINIAtUrXwgDSADKQPoCSASIBxWrXx8IgsgDVStfHwiDyAMVK18fCIMIBBUrXx8Ig0gGFStfHwiGyADKQOACXwiGCAbVK18IBggAykDmAkgDSADKQOQCXwiECANVK18IBAgAykDqAkgDCADKQOgCXwiEiAMVK18IBIgAykDuAkgDyADKQOwCXwiDCAPVK18IAwgAykDyAkgCyADKQPACSILfCINIAtUrXwgDSADKQPYCSADKQPQCSILIBx8IAtUrXx8IhQgDVStfHwiDyAMVK18fCIMIBJUrXx8IgsgEFStfHwiECAYVK18IBogG1atIAMpA7gKIA4gGlatfHx8IQ0gBEEIayIEQXhHDQALAkACQCANQprN/8ujvcSAGlYNAAJAAkACQAJAIA1Cms3/y6O9xIAaUg0AIBBC19mumuT26Y3LAFYNBCAQQtfZrprk9umNywBSBEBCms3/y6O9xIAaIQ0MAQsgC0K/pZScz/DSu+QAVg0EQtfZrprk9umNywAhEyALQr+llJzP8NK75ABSBEBCms3/y6O9xIAaIQ0MAgsgDEKk7MO1j9S0mOcAVg0EQr+llJzP8NK75AAhESAMQqTsw7WP1LSY5wBSBEBCms3/y6O9xIAaIQ0MAwsgD0L//8+K6///1R5WDQRCpOzDtY/UtJjnACESIA9C///Piuv//9UeUQ0DQprN/8ujvcSAGiENIA8hDgwFCyAQIRMLIAshEQsgDCESIA8hDgwCC0L//8+K6///1R4hDiAUQqrV/v///7//uX9WDQBCms3/y6O9xIAaIQ0MAQsgD0L//8+K6///1R59IhMgFEKr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HiEOIBIiDUL//8+K6///1R5SDQBCq9X+////v/+5fyEOICUiDUKr1f7///+//7l/UQ0BCyANIA5aDQAgEiEnIA8hKCAMISQgCyEdDAELIBJC///Piuv//9UefSIRICVCq9X+////v/+5f1StIg19IScgD0Kk7MO1j9S0mOcAfSIOIBJC///Piuv//9UeVCANIBFWcq0iDX0hKCAMQr+llJzP8NK75AB9IhIgD0Kk7MO1j9S0mOcAVCANIA5Wcq0iDX0hJCALQtfZrprk9umNywB9Ig4gDEK/pZScz/DSu+QAVCANIBJWcq0iDX0hHSApIAtC19mumuT26Y3LAFQgDSAOVnKtfUKazf/Lo73EgBp9ISkgJULVqoGAgIDAgMYAfCElC0HYACEEQgAhFEIAIQ9CACEMQgAhC0IAIRBCACENA0AgA0HgA2ogASAEaikDACIOQgAgIUIAEMkDIANB8ANqIA5CACAgQgAQyQMgA0GABGogDkIAICNCABDJAyADQZAEaiAOQgAgIkIAEMkDIANBoARqIA5CACAmQgAQyQMgA0GwBGogDkIAIDBCABDJAyADQdADaiADKQPgAyISIBR8IhdC/f/z/8////mJf34iDkIAQqvV/v///7//uX9CABDJAyADQcADaiAOQgBC///Piuv//9UeQgAQyQMgA0GwA2ogDkIAQqTsw7WP1LSY5wBCABDJAyADQaADaiAOQgBCv6WUnM/w0rvkAEIAEMkDIANBkANqIA5CAELX2a6a5PbpjcsAQgAQyQMgA0GAA2ogDkIAQprN/8ujvcSAGkIAEMkDIAMpA4gDIAMpA7AEIg4gDXwiFSADKQOoBCADKQOgBCINIBB8IhAgDVStfCAQIAMpA5gEIAsgAykDkAQiC3wiESALVK18IBEgAykDiAQgAykDgAQiCyAMfCIMIAtUrXwgDCADKQP4AyADKQPwAyILIA98Ig0gC1StfCANIAMpA+gDIBIgF1atfHwiCyANVK18fCIPIAxUrXx8IgwgEVStfHwiDSAQVK18fCITIAMpA4ADfCIQIBNUrXwgECAQIAMpA5gDIA0gAykDkAN8IhEgDVStfCARIAMpA6gDIAwgAykDoAN8IhIgDFStfCASIAMpA7gDIA8gAykDsAN8IgwgD1StfCAMIAMpA8gDIAsgAykDwAMiC3wiDSALVK18IA0g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IA1CAEK/pZScz/DSu+QAQgAQyQMgA0HQAWogDUIAQtfZrprk9umNywBCABDJAyADQcABaiANQgBCms3/y6O9xIAaQgAQyQMgAykDyAEgAykD8AIiDiASfCIgIAMpA+gCIAMpA+ACIg0gEHwiECANVK18IBAgAykD2AIgCyADKQPQAiILfCISIAtUrXwgEiADKQPIAiADKQPAAiILIAx8IgwgC1StfCAMIAMpA7gCIAMpA7ACIgsgFXwiDSALVK18IA0gAykDqAIgDyAiVq18fCILIA1UrXx8Ig8gDFStfHwiDCASVK18fCINIBBUrXx8IhQgAykDwAF8IhwgFFStfCAcIAMpA9gBIA0gAykD0AF8IhAgDVStfCAQIAMpA+gBIAwgAykD4AF8IhIgDFStfCASIAMpA/gBIA8gAykD8AF8IgwgD1StfCAMIAMpA4gCIAsgAykDgAIiC3wiDSALVK18IA0gAykDmAIgAykDkAIiCyAifCALVK18fCIPIA1UrXx8IhUgDFStfHwiDCASVK18fCILIBBUrXx8IhAgHFStfCAUICBUrSADKQP4AiAOICBWrXx8fCESIARBCGsiBEF4Rw0ACwJAAkAgEkKazf/Lo73EgBpWDQACQAJAAkACQCASQprN/8ujvcSAGlINACAQQtfZrprk9umNywBWDQQgEELX2a6a5PbpjcsAUgRAQprN/8ujvcSAGiESDAELIAtCv6WUnM/w0rvkAFYNBELX2a6a5PbpjcsAIRkgC0K/pZScz/DSu+QAUgRAQprN/8ujvcSAGiESDAILIAxCpOzDtY/UtJjnAFYNBEK/pZScz/DSu+QAISAgDEKk7MO1j9S0mOcAUgRAQprN/8ujvcSAGiESDAMLIBVC///Piuv//9UeVg0EQqTsw7WP1LSY5wAhGiAVQv//z4rr///VHlENA0Kazf/Lo73EgBohEiAVIRwMBQsgECEZCyALISALIAwhGiAVIRwMAgtC///Piuv//9UeIRwgD0Kq1f7///+//7l/Vg0AQprN/8ujvcSAGiESDAELIBVC///Piuv//9UefSIOIA9Cq9X+////v/+5f1StIg19IRwgDEKk7MO1j9S0mOcAfSIRIBVC///Piuv//9UeVCANIA5Wcq0iDX0hGiALQr+llJzP8NK75AB9Ig4gDEKk7MO1j9S0mOcAVCANIBFWcq0iDH0hICAQQtfZrprk9umNywB9Ig0gC0K/pZScz/DSu+QAVCAMIA5Wcq0iC30hGSASIBBC19mumuT26Y3LAFQgCyANVnKtfUKazf/Lo73EgBp9IRIgD0LVqoGAgIDAgMYAfCEPC0HYACEEQgAhFEIAIRVCACEMQgAhC0IAIRBCACENA0AgA0HgAGogASAEaikDACIOQgAgL0IAEMkDIANB8ABqIA5CACAuQgAQyQMgA0GAAWogDkIAIC1CABDJAyADQZABaiAOQgAgLEIAEMkDIANBoAFqIA5CACArQgAQyQMgA0GwAWogDkIAICpCABDJAyADQdAAaiADKQNgIhEgFHwiFEL9//P/z///+Yl/fiIOQgBCq9X+////v/+5f0IAEMkDIANBQGsgDkIAQv//z4rr///VHkIAEMkDIANBMGogDkIAQqTsw7WP1LSY5wBCABDJAyADQSBqIA5CAEK/pZScz/DSu+QAQgAQyQMgA0EQaiAOQgBC19mumuT26Y3LAEIAEMkDIAMgDkIAQprN/8ujvcSAGkIAEMkDIAMpAwggAykDsAEiDiANfCIWIAMpA6gBIAMpA6ABIg0gEHwiEyANVK18IBMgAykDmAEgCyADKQOQASILfCIQIAtUrXwgECADKQOIASADKQOAASILIAx8IgwgC1StfCAMIAMpA3ggAykDcCILIBV8Ig0gC1StfCANIAMpA2ggESAUVq18fCILIA1UrXx8IhUgDFStfHwiDCAQVK18fCINIBNUrXx8IhcgAykDAHwiEyAXVK18IBMgAykDGCANIAMpAxB8IhAgDVStfCAQIAMpAyggDCADKQMgfCIRIAxUrXwgESADKQM4IBUgAykDMHwiDCAVVK18IAwgAykDSCALIAMpA0AiC3wiDSALVK18IA0gAykDWCADKQNQIgsgFHwgC1StfHwiFCANVK18fCIVIAxUrXx8IgwgEVStfHwiCyAQVK18fCIQIBNUrXwgFiAXVq0gAykDuAEgDiAWVq18fHwhDSAEQQhrIgRBKEcNAAsCQAJAIA1Cms3/y6O9xIAaVg0AAkACQAJAAkAgDUKazf/Lo73EgBpSDQAgEELX2a6a5PbpjcsAVg0EIBBC19mumuT26Y3LAFIEQEKazf/Lo73EgBohDQwBCyALQr+llJzP8NK75ABWDQRC19mumuT26Y3LACET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IRsMAQtC///Piuv//9UeIRsgC0Kq1f7///+//7l/Vg0BC0Kazf/Lo73EgBohEAwBCyAVQv//z4rr///VHn0iESALQqvV/v///7//uX9UrSINfSEbIBJCpOzDtY/UtJjnAH0iDiAVQv//z4rr///VHlQgDSARVnKtIg19ISEgD0K/pZScz/DSu+QAfSIRIBJCpOzDtY/UtJjnAFQgDSAOVnKtIg19IR4gDELX2a6a5PbpjcsAfSIOIA9Cv6WUnM/w0rvkAFQgDSARVnKtIg19IR8gECAMQtfZrprk9umNywBUIA0gDlZyrX1Cms3/y6O9xIAafSEQIAtC1aqBgICAwIDGAHwhCwtBKCEBIAMpA6AjISYgAykDqCMhIiADKQOwIyElIAMpA7gjISMgAykDwCMhICADKQPIIyEnQgAhDUIAIRFCACEMQgAhFUIAIRZCACEUA0AgA0HgEmogA0GgI2ogAWopAwAiDkIAICdCABDJAyADQfASaiAOQgAgIEIAEMkDIANBgBNqIA5CACAjQgAQyQMgA0GQE2ogDkIAICVCABDJAyADQaATaiAOQgAgIkIAEMkDIANBsBNqIA5CACAmQgAQyQMgA0HQEmogAykD4BIiDyANfCIaQv3/8//P///5iX9+Ig1CAEKr1f7///+//7l/QgAQyQMgA0HAEmogDUIAQv//z4rr///VHkIAEMkDIANBsBJqIA1CAEKk7MO1j9S0mOcAQgAQyQMgA0GgEmogDUIAQr+llJzP8NK75ABCABDJAyADQZASaiANQgBC19mumuT26Y3LAEIAEMkDIANBgBJqIA1CAEKazf/Lo73EgBpCABDJAyADKQOIEiADKQOwEyIOIBR8IhggAykDqBMgAykDoBMiDSAWfCIXIA1UrXwgFyADKQOYEyADKQOQEyINIBV8IhMgDVStfCATIAMpA4gTIAMpA4ATIg0gDHwiEiANVK18IBIgAykD+BIgAykD8BIiDSARfCIMIA1UrXwgDCADKQPoEiAPIBpWrXx8Ig0gDFStfHwiESASVK18fCIPIBNUrXx8IgwgF1StfHwiGSADKQOAEnwiFyAZVK18IBcgAykDmBIgDCADKQOQEnwiEyAMVK18IBMgAykDqBIgDyADKQOgEnwiEiAPVK18IBIgAykDuBIgESADKQOwEnwiDyARVK18IA8gAykDyBIg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DCAQQtfZrprk9umNywB9Ig8gC0K/pZScz/DSu+QAVCASIBNWcq0iC30hEyANIBBC19mumuT26Y3LAFQgCyAPVnKtfUKazf/Lo73EgBp9IQ0gFELVqoGAgIDAgMYAfCEUCyADIBQ3A4AnIAMgETcD+CYgAyAONwPwJiADIAw3A+gmIAMgEzcD4CYgAyANNwPYJiADQcAlaiICIANBsCRqIANB4B5qEIMCIANB4CRqIgQgA0GAHmogAhC7ASADQeglaiADQZgdaikDADcDACADQeAlaiADQZAdaikDADcDACADQdglaiADQYgdaikDADcDACADQdAlaiADQYAdaikDADcDACADQcglaiIBIANB+BxqKQMANwMAIAMgAykD8Bw3A8AlIANBkCVqIgYgA0GAJGoiBSACELsBIANBiCdqIAQgBhCDAiADQbgnaiAFIANBsB5qELsBIAIgA0HYJmoQ8gIgAygCwCUNASAAIAFBkAH8CgAACyADQfAnaiQADwtBkI3FAEErIANB7ydqQYCNxQBBwJLFABDKAwALr9oBAgl/KX4jAEHQKGsiAiQAIAJBoB1qECYCQAJAAkACQAJAAkACQCACKALAIEEBcQRAIAIpA6AhIS4gAikDmCEhLyACKQOQISEwIAIpA4ghITEgAikDgCEhMiACKQP4ICEzIAIpA/AgISIgAikD6CAhIyACKQPgICEkIAIpA9ggISUgAikD0CAhJiACKQPIICEnQSghAyACQegjaiACQdAhaikDADcDACACQeAjaiACQcghaikDADcDACACQdgjaiACQcAhaikDADcDACACQdAjaiACQbghaikDADcDACACQcgjaiACQbAhaikDADcDACACIAIpA6ghNwPAIyABKQMAIRMgASkDCCEVIAEpAxAhFiABKQMYIRcgASkDICEYIAEpAyghGQNAIAJBwBxqIAEgA2opAwAiDUIAIBlCABDJAyACQdAcaiANQgAgGEIAEMkDIAJB4BxqIA1CACAXQgAQyQMgAkHwHGogDUIAIBZCABDJAyACQYAdaiANQgAgFUIAEMkDIAJBkB1qIA1CACATQgAQyQMgAkGwHGogFCACKQPAHCIUfCISQgBCAEL9//P/z///+Yl/EMkDIAJBoBxqIAIpA7gcIg1CAEKr1f7///+//7l/QgAQyQMgAkGQHGogDUIAQv//z4rr///VHkIAEMkDIAJBgBxqIA1CAEKk7MO1j9S0mOcAQgAQyQMgAkHwG2ogDUIAQr+llJzP8NK75ABCABDJAyACQeAbaiANQgBC19mumuT26Y3LAEIAEMkDIAJB0BtqIA1CAEKazf/Lo73EgBpCABDJAyACKQPYGyACKQOQHSIaIA98Ig0gAikDiB0gAikDgB0iDyARfCIQIA9UrXwgECACKQP4HCACKQPwHCIPIA58Ig4gD1StfCAOIAIpA+gcIAIpA+AcIg8gDHwiDCAPVK18IAwgAikD2BwgAikD0BwiDyALfCILIA9UrXwgCyACKQPIHCASIBRUrXx8IhEgC1StfHwiCyAMVK18fCIMIA5UrXx8Ig4gEFStfHwiECACKQPQG3wiDyAQVK18IA8gAikD6BsgDiAOIAIpA+AbfCIOVq18IA4gDiACKQP4GyAMIAwgAikD8Bt8IgxWrXwgDCAMIAIpA4gcIAsgCyACKQOAHHwiC1atfCALIAsgAikDmBwgAikDkBwiFCARfCIRIBRUrXwgESACKQOoHCASIAIpA6AcIhJ8IBJUrXx8IhQgEVStfHwiC1atfHwiDFatfHwiDlatfHwiESAPVK18IA0gEFatIAIpA5gdIA0gGlStfHx8IQ8gA0EIayIDQXhHDQALIA9Cms3/y6O9xIAaVg0GIA9Cms3/y6O9xIAaUQ0BDAILQYzgwAAQ6AQACyARQtfZrprk9umNywBWDQQgEULX2a6a5PbpjcsAUgRAQprN/8ujvcSAGiEPDAELIA5Cv6WUnM/w0rvkAFYNBELX2a6a5PbpjcsAIRUgDkK/pZScz/DSu+QAUgRAQprN/8ujvcSAGiEPDAILIAxCpOzDtY/UtJjnAFYNBEK/pZScz/DSu+QAIRAgDEKk7MO1j9S0mOcAUgRAQprN/8ujvcSAGiEPDAMLIAtC///Piuv//9UeVg0EQqTsw7WP1LSY5wAhEiALQv//z4rr///VHlENA0Kazf/Lo73EgBohDyALIQ0MBQsgESEVCyAOIRALIAwhEiALIQ0MAgtC///Piuv//9UeIQ0gFEKq1f7///+//7l/Vg0AQprN/8ujvcSAGiEPDAELIAtC///Piuv//9UefSISIBRCq9X+////v/+5f1StIhB9IQ0gDEKk7MO1j9S0mOcAfSITIAtC///Piuv//9UeVCAQIBJWcq0iC30hEiAOQr+llJzP8NK75AB9IhUgDEKk7MO1j9S0mOcAVCALIBNWcq0iC30hECARQtfZrprk9umNywB9IgwgDkK/pZScz/DSu+QAVCALIBVWcq0iC30hFSAPIBFC19mumuT26Y3LAFQgCyAMVnKtfUKazf/Lo73EgBp9IQ8gFELVqoGAgIDAgMYAfCEUCyACIBQ3A5gnIAIgDTcDkCcgAiASNwOIJyACIBA3A4AnIAIgFTcD+CYgAiAPNwPwJkEoIQMgAikDwCMhKCACKQPIIyEpIAIpA9AjISogAikD2CMhKyACKQPgIyEsIAIpA+gjIS1CACEPQgAhC0IAIQxCACEOQgAhEUIAIRQDQCACQfAaaiACQfAmaiADaikDACINQgAgLUIAEMkDIAJBgBtqIA1CACAsQgAQyQMgAkGQG2ogDUIAICtCABDJAyACQaAbaiANQgAgKkIAEMkDIAJBsBtqIA1CACApQgAQyQMgAkHAG2ogDUIAIChCABDJAyACQeAaaiAPIAIpA/AaIg98IhJCAEIAQv3/8//P///5iX8QyQMgAkHQGmogAikD6BoiDUIAQqvV/v///7//uX9CABDJAyACQcAaaiANQgBC///Piuv//9UeQgAQyQMgAkGwGmogDUIAQqTsw7WP1LSY5wBCABDJAyACQaAaaiANQgBCv6WUnM/w0rvkAEIAEMkDIAJBkBpqIA1CAELX2a6a5PbpjcsAQgAQyQMgAkGAGmogDUIAQprN/8ujvcSAGkIAEMkDIAIpA4gaIAIpA8AbIhMgFHwiDSACKQO4GyARIAIpA7AbIhF8IhAgEVStfCAQIAIpA6gbIAIpA6AbIhEgDnwiDiARVK18IA4gAikDmBsgAikDkBsiESAMfCIMIBFUrXwgDCACKQOIGyACKQOAGyIRIAt8IgsgEVStfCALIAIpA/gaIA8gElatfHwiDyALVK18fCILIAxUrXx8IgwgDlStfHwiDiAQVK18fCIQIAIpA4AafCIRIBBUrXwgESARIAIpA5gaIA4gDiACKQOQGnwiDlatfCAOIA4gAikDqBogDCAMIAIpA6AafCIMVq18IAwgDCACKQO4GiALIAsgAikDsBp8IgtWrXwgCyALIAIpA8gaIAIpA8AaIhUgD3wiDyAVVK18IA8gDyACKQPYGiASIAIpA9AaIhJ8IBJUrXx8Ig9WrXx8IgtWrXx8IgxWrXx8Ig5WrXx8IhFWrXwgDSAQVq0gAikDyBsgDSATVK18fHwhFCADQQhrIgNBeEcNAAsCQAJAIBRCms3/y6O9xIAaVg0AAkACQAJAAkAgFEKazf/Lo73EgBpSDQAgEULX2a6a5PbpjcsAVg0EIBFC19mumuT26Y3LAFIEQEKazf/Lo73EgBohFAwBCyAOQr+llJzP8NK75ABWDQRC19mumuT26Y3LACEWIA5Cv6WUnM/w0rvkAFIEQEKazf/Lo73EgBohFAwCCyAMQqTsw7WP1LSY5wBWDQRCv6WUnM/w0rvkACEbIAxCpOzDtY/UtJjnAFIEQEKazf/Lo73EgBohFAwDCyALQv//z4rr///VHlYNBEKk7MO1j9S0mOcAIRggC0L//8+K6///1R5RDQNCms3/y6O9xIAaIRQgCyEaDAULIBEhFgsgDiEbCyAMIRggCyEaDAILQv//z4rr///VHiEaIA9CqtX+////v/+5f1YNAEKazf/Lo73EgBohFAwBCyALQv//z4rr///VHn0iDSAPQqvV/v///7//uX9UrSISfSEaIAxCpOzDtY/UtJjnAH0iECALQv//z4rr///VHlQgDSASVHKtIgt9IRggDkK/pZScz/DSu+QAfSINIAxCpOzDtY/UtJjnAFQgCyAQVnKtIgt9IRsgEULX2a6a5PbpjcsAfSIMIA5Cv6WUnM/w0rvkAFQgCyANVnKtIgt9IRYgFCARQtfZrprk9umNywBUIAsgDFZyrX1Cms3/y6O9xIAafSEUIA9C1aqBgICAwIDGAHwhDwsgAiAPNwOYJCACIBo3A5AkIAIgGDcDiCQgAiAbNwOAJCACIBY3A/gjIAIgFDcD8CNBKCEDQgAhEUIAIRNCACENQgAhEEIAIQxCACEOA0AgAkGgGWogAkHwI2ogA2opAwAiC0IAIA9CABDJAyACQbAZaiALQgAgGkIAEMkDIAJBwBlqIAtCACAYQgAQyQMgAkHQGWogC0IAIBtCABDJAyACQeAZaiALQgAgFkIAEMkDIAJB8BlqIAtCACAUQgAQyQMgAkGQGWogESACKQOgGSIRfCISQgBCAEL9//P/z///+Yl/EMkDIAJBgBlqIAIpA5gZIgtCAEKr1f7///+//7l/QgAQyQMgAkHwGGogC0IAQv//z4rr///VHkIAEMkDIAJB4BhqIAtCAEKk7MO1j9S0mOcAQgAQyQMgAkHQGGogC0IAQr+llJzP8NK75ABCABDJAyACQcAYaiALQgBC19mumuT26Y3LAEIAEMkDIAJBsBhqIAtCAEKazf/Lo73EgBpCABDJAyACKQO4GCACKQPwGSIZIA58IgsgAikD6BkgAikD4BkiDiAMfCIMIA5UrXwgDCAMIAIpA9gZIBAgAikD0BkiEHwiDiAQVK18IA4gDiACKQPIGSACKQPAGSIQIA18Ig0gEFStfCANIA0gAikDuBkgEyACKQOwGSITfCIQIBNUrXwgECAQIAIpA6gZIBEgElatfHwiEFatfHwiDVatfHwiDlatfHwiDFatfHwiFSACKQOwGHwiFyAVVK18IBcgAikDyBggDCAMIAIpA8AYfCIMVq18IAwgAikD2BggDiAOIAIpA9AYfCIOVq18IA4gAikD6BggDSANIAIpA+AYfCINVq18IA0gAikD+BggAikD8BgiESAQfCIQIBFUrXwgECACKQOIGSASIAIpA4AZIhJ8IBJUrXx8IhEgEFStfHwiEyANVK18fCINIA5UrXx8IhAgDFStfHwiDCAXVK18IAsgFVatIAIpA/gZIAsgGVStfHx8IQ4gA0EIayIDQXhHDQALAkACQCAOQprN/8ujvcSAGlYNAAJAAkACQAJAIA5Cms3/y6O9xIAaUg0AIAxC19mumuT26Y3LAFYNBCAMQtfZrprk9umNywBSBEBCms3/y6O9xIAaIQ4MAQsgEEK/pZScz/DSu+QAVg0EQtfZrprk9umNywAhFSAQQr+llJzP8NK75ABSBEBCms3/y6O9xIAaIQ4MAgsgDUKk7MO1j9S0mOcAVg0EQr+llJzP8NK75AAhCyANQqTsw7WP1LSY5wBSBEBCms3/y6O9xIAaIQ4MAwsgE0L//8+K6///1R5WDQRCpOzDtY/UtJjnACEXIBNC///Piuv//9UeUQ0DQprN/8ujvcSAGiEOIBMhEgwFCyAMIRULIBAhCwsgDSEXIBMhEgwCC0L//8+K6///1R4hEiARQqrV/v///7//uX9WDQBCms3/y6O9xIAaIQ4MAQsgE0L//8+K6///1R59IgsgEUKr1f7///+//7l/VK0iFX0hEiANQqTsw7WP1LSY5wB9IhkgE0L//8+K6///1R5UIAsgFVRyrSILfSEXIBBCv6WUnM/w0rvkAH0iEyANQqTsw7WP1LSY5wBUIAsgGVZyrSINfSELIAxC19mumuT26Y3LAH0iGSAQQr+llJzP8NK75ABUIA0gE1ZyrSINfSEVIA4gDELX2a6a5PbpjcsAVCANIBlWcq19QprN/8ujvcSAGn0hDiARQtWqgYCAgMCAxgB8IRELQprN/8ujvcSAGiEQIBUgFnwiEyAVVCATIAsgG3wiDSALVCANIA0gFyAYfCIMIBdUIAwgDCASIBp8IgsgElQgCyALIA8gEXwiFyARVK18IgtWcq18IgxWcq18Ig1Wcq18IhIgE1RyrSAOIBR8fCIcIQ8CQAJAAkAgHEKazf/Lo73EgBpSDQBC19mumuT26Y3LACEQIBIiD0LX2a6a5PbpjcsAUg0AQr+llJzP8NK75AAhECANIg9Cv6WUnM/w0rvkAFINAEKk7MO1j9S0mOcAIRAgDCIPQqTsw7WP1LSY5wBSDQBC///Piuv//9UeIRAgCyIPQv//z4rr///VHlINAEKr1f7///+//7l/IRAgFyIPQqvV/v///7//uX9RDQELIA8gEFoNACASIRYgDSEbIAwhGCALIRkMAQsgC0L//8+K6///1R59Ig4gF0Kr1f7///+//7l/VK0iEH0hGSAMQqTsw7WP1LSY5wB9Ig8gC0L//8+K6///1R5UIA4gEFRyrSILfSEYIA1Cv6WUnM/w0rvkAH0iDiAMQqTsw7WP1LSY5wBUIAsgD1ZyrSILfSEbIBJC19mumuT26Y3LAH0iDCANQr+llJzP8NK75ABUIAsgDlZyrSILfSEWIBwgEkLX2a6a5PbpjcsAVCALIAxWcq19QprN/8ujvcSAGn0hHCAXQtWqgYCAgMCAxgB8IRcLIAIgGTcDwCQgAiAXNwPIJCACIBg3A7gkIAIgGzcDsCQgAiAWNwOoJCACIBw3A6AkQprN/8ujvcSAGiEMIBwgFkLt2NuS+tLGg9wAfCILIBZUIAsgG0LFrsmCt4qW5/cAfCIOIBtUIA4gGEK6sZ2e9YqmpN8AfCISIBhUIBIgGUL+/8/fw/7/hRR9Ig0gGVQgDSANIBdC/f+LgICAwIT2AHwiFCAXVK18Ig1Wcq18IhAgElRyrXwiDyAOVHKtfCIRIAtUcq18QpPJg9S/2Jf7FXwiFSEOAkACQAJAIBVCms3/y6O9xIAaUg0AQtfZrprk9umNywAhDCARIg5C19mumuT26Y3LAFINAEK/pZScz/DSu+QAIQwgDyIOQr+llJzP8NK75ABSDQBCpOzDtY/UtJjnACEMIBAiDkKk7MO1j9S0mOcAUg0AQv//z4rr///VHiEMIA0iDkL//8+K6///1R5SDQBCq9X+////v/+5fyEMIBQiDkKr1f7///+//7l/UQ0BCyAMIA5YDQAgESEOIA8hDCAQIQsgDSESDAELIA1C///Piuv//9UefSILIBRCq9X+////v/+5f1StIgx9IRIgEEKk7MO1j9S0mOcAfSIOIA1C///Piuv//9UeVCALIAxUcq0iDH0hCyAPQr+llJzP8NK75AB9Ig0gEEKk7MO1j9S0mOcAVCAMIA5Wcq0iDn0hDCARQtfZrprk9umNywB9IhAgD0K/pZScz/DSu+QAVCANIA5Ucq0iDX0hDiAVIBFC19mumuT26Y3LAFQgDSAQVnKtfUKazf/Lo73EgBp9IRUgFELVqoGAgIDAgMYAfCEUCyACIBQ3A5gnIAIgEjcDkCcgAiALNwOIJyACIAw3A4AnIAIgDjcD+CYgAiAVNwPwJkEoIQNCACEPQgAhEUIAIQxCACELQgAhEkIAIQ4DQCACQdAXaiACQfAmaiADaikDACINQgAgLkIAEMkDIAJB4BdqIA1CACAvQgAQyQMgAkHwF2ogDUIAIDBCABDJAyACQYAYaiANQgAgMUIAEMkDIAJBkBhqIA1CACAyQgAQyQMgAkGgGGogDUIAIDNCABDJAyACQcAXaiACKQPQFyITIA58Ig1CAEIAQv3/8//P///5iX8QyQMgAkGwF2ogAikDyBciDkIAQqvV/v///7//uX9CABDJAyACQaAXaiAOQgBC///Piuv//9UeQgAQyQMgAkGQF2ogDkIAQqTsw7WP1LSY5wBCABDJAyACQYAXaiAOQgBCv6WUnM/w0rvkAEIAEMkDIAJB8BZqIA5CAELX2a6a5PbpjcsAQgAQyQMgAkHgFmogDkIAQprN/8ujvcSAGkIAEMkDIAIpA+gWIAIpA6AYIhUgD3wiECACKQOYGCACKQOQGCIPIBF8Ig4gD1StfCAOIA4gAikDiBggAikDgBgiDyAMfCIMIA9UrXwgDCAMIAIpA/gXIAIpA/AXIg8gC3wiCyAPVK18IAsgCyACKQPoFyACKQPgFyIPIBJ8IhIgD1StfCASIBIgAikD2BcgDSATVK18fCISVq18fCILVq18fCIMVq18fCIOVq18fCIPIAIpA+AWfCIRIA9UrXwgESARIAIpA/gWIA4gAikD8BZ8IhMgDlStfCATIAIpA4gXIAwgDCACKQOAF3wiDFatfCAMIAIpA5gXIAsgCyACKQOQF3wiC1atfCALIAIpA6gXIBIgAikDoBciEnwiDiASVK18IA4gDiACKQO4FyANIAIpA7AXIg18IA1UrXx8Ig5WrXx8IhIgC1StfHwiCyAMVK18fCIMIBNUrXx8IhFWrXwgDyAQVK0gAikDqBggECAVVK18fHwhDyADQQhrIgNBeEcNAAsCQAJAIA9Cms3/y6O9xIAaVg0AAkACQAJAAkAgD0Kazf/Lo73EgBpSDQAgEULX2a6a5PbpjcsAVg0EIBFC19mumuT26Y3LAFIEQEKazf/Lo73EgBohDwwBCyAMQr+llJzP8NK75ABWDQRC19mumuT26Y3LACEaIAxCv6WUnM/w0rvkAFIEQEKazf/Lo73EgBohDwwCCyALQqTsw7WP1LSY5wBWDQRCv6WUnM/w0rvkACEdIAtCpOzDtY/UtJjnAFIEQEKazf/Lo73EgBohDwwDCyASQv//z4rr///VHlYNBEKk7MO1j9S0mOcAIR8gEkL//8+K6///1R5RDQNCms3/y6O9xIAaIQ8gEiEeDAULIBEhGgsgDCEdCyALIR8gEiEeDAILQv//z4rr///VHiEeIA5CqtX+////v/+5f1YNAEKazf/Lo73EgBohDwwBCyASQv//z4rr///VHn0iDSAOQqvV/v///7//uX9UrSIQfSEeIAtCpOzDtY/UtJjnAH0iEyASQv//z4rr///VHlQgDSAQVHKtIg19IR8gDEK/pZScz/DSu+QAfSISIAtCpOzDtY/UtJjnAFQgDSATVnKtIgt9IR0gEULX2a6a5PbpjcsAfSINIAxCv6WUnM/w0rvkAFQgCyASVnKtIgt9IRogDyARQtfZrprk9umNywBUIAsgDVZyrX1Cms3/y6O9xIAafSEPIA5C1aqBgICAwIDGAHwhDgsgAiAONwP4JCACIB43A/AkIAIgHzcD6CQgAiAdNwPgJCACIBo3A9gkIAIgDzcD0CRBKCEDIAJBmCdqIgdCADcDACACQZAnaiIFQgA3AwAgAkGIJ2oiBEIANwMAIAJBgCdqIghCADcDACACQfgmaiIGQgA3AwAgAkIANwPwJgJAAkACQAJAAkACQCACQaAkaiACQfAmaiIJQTAQ8QMEQCAHIAJByCRqKQMANwMAIAUgAkHAJGopAwA3AwAgBCACQbgkaikDADcDACAIIAJBsCRqKQMANwMAIAYgAkGoJGopAwA3AwAgAiACKQOgJDcD8CYgAiAJQfiewABBMBDxAwR+Qv//z4rr///VHiACKQOQJyILfSIMIAIpA5gnIg1Cq9X+////v/+5f1atIhJ9IRlCpOzDtY/UtJjnACACKQOIJyIQfSIRIAwgElQgC0L//8+K6///1R5Wcq0iC30hGEK/pZScz/DSu+QAIAIpA4AnIgx9IhIgCyARViAQQqTsw7WP1LSY5wBWcq0iC30hG0LX2a6a5PbpjcsAIAIpA/gmIhB9IhEgCyASViAMQr+llJzP8NK75ABWcq0iC30hFkKazf/Lo73EgBogAikD8CYgCyARViAQQtfZrprk9umNywBWcq18fSEcQqvV/v///7//uX8gDX0FIBcLNwOwKCACIBk3A6goIAIgGDcDoCggAiAbNwOYKCACIBY3A5AoIAIgHDcDiChCACEUQgAhDEIAIRBCACENQgAhE0IAIREDQCACQYAWaiACQYgoaiADaikDACILQgAgIkIAEMkDIAJBkBZqIAtCACAjQgAQyQMgAkGgFmogC0IAICRCABDJAyACQbAWaiALQgAgJUIAEMkDIAJBwBZqIAtCACAmQgAQyQMgAkHQFmogC0IAICdCABDJAyACQfAVaiACKQOAFiIVIBF8IhJCAEIAQv3/8//P///5iX8QyQMgAkHgFWogAikD+BUiC0IAQqvV/v///7//uX9CABDJAyACQdAVaiALQgBC///Piuv//9UeQgAQyQMgAkHAFWogC0IAQqTsw7WP1LSY5wBCABDJAyACQbAVaiALQgBCv6WUnM/w0rvkAEIAEMkDIAJBoBVqIAtCAELX2a6a5PbpjcsAQgAQyQMgAkGQFWogC0IAQprN/8ujvcSAGkIAEMkDIAIpA5gVIAIpA9AWIhcgFHwiCyACKQPIFiACKQPAFiIRIAx8IgwgEVStfCAMIAwgAikDuBYgAikDsBYiESAQfCIQIBFUrXwgECAQIAIpA6gWIAIpA6AWIhEgDXwiDSARVK18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CyACKQOQEnwiC1atfCALIAIpA6gSIBIgEiACKQOgEnwiElatfCASIAIpA7gSIAIpA7ASIiEgFnwiFiAhVK18IBYgAikDyBIgECACKQPAEiIQfCAQVK18fCIcIBZUrXx8IhYgElStfHwiEiALVK18fCILIA1UrXx8Ig0gF1StfCAMIBNWrSACKQO4EyAMICBUrXx8fCETIANBCGsiA0F4Rw0ACwJAAkAgE0Kazf/Lo73EgBpWDQACQAJAAkACQCATQprN/8ujvcSAGlINACANQtfZrprk9umNywBWDQQgDULX2a6a5PbpjcsAUgRAQprN/8ujvcSAGiETDAELIAtCv6WUnM/w0rvkAFYNBELX2a6a5PbpjcsAIR4gC0K/pZScz/DSu+QAUgRAQprN/8ujvcSAGiETDAILIBJCpOzDtY/UtJjnAFYNBEK/pZScz/DSu+QAIR8gEkKk7MO1j9S0mOcAUgRAQprN/8ujvcSAGiETDAMLIBZC///Piuv//9UeVg0EQqTsw7WP1LSY5wAhISAWQv//z4rr///VHlENA0Kazf/Lo73EgBohEyAWISAMBQsgDSEeCyALIR8LIBIhISAWISAMAgtC///Piuv//9UeISAgHEKq1f7///+//7l/Vg0AQprN/8ujvcSAGiETDAELIBZC///Piuv//9UefSIMIBxCq9X+////v/+5f1StIg59ISAgEkKk7MO1j9S0mOcAfSIQIBZC///Piuv//9UeVCAMIA5Ucq0iDH0hISALQr+llJzP8NK75AB9Ig4gEkKk7MO1j9S0mOcAVCAMIBBWcq0iDH0hHyANQtfZrprk9umNywB9IhIgC0K/pZScz/DSu+QAVCAMIA5Wcq0iC30hHiATIA1C19mumuT26Y3LAFQgCyASVnKtfUKazf/Lo73EgBp9IRMgHELVqoGAgIDAgMYAfCEcC0EoIQNCACEPQgAhDEIAIRBCACENQgAhF0IAIQ4DQCACQZARaiACQYAlaiADaikDACILQgAgEUIAEMkDIAJBoBFqIAtCACAVQgAQyQMgAkGwEWogC0IAIBtCABDJAyACQcARaiALQgAgGUIAEMkDIAJB0BFqIAtCACAYQgAQyQMgAkHgEWogC0IAIBRCABDJAyACQYARaiACKQOQESIWIA58Ig5CAEIAQv3/8//P///5iX8QyQMgAkHwEGog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IBBUrXx8IhAgDFStfHwiDCAVVK18IAsgEVatIAIpA5gQIAsgG1StfHx8IREgA0EIayIDQXhHDQALAkACQCARQprN/8ujvcSAGlYNAAJAAkACQAJAIBFCms3/y6O9xIAaUg0AIAxC19mumuT26Y3LAFYNBCAMQtfZrprk9umNywBSBEBCms3/y6O9xIAaIREMAQsgEEK/pZScz/DSu+QAVg0EQtfZrprk9umNywAhFSAQQr+llJzP8NK75ABSBEBCms3/y6O9xIAaIREMAgsgDUKk7MO1j9S0mOcAVg0EQr+llJzP8NK75AAhDyANQqTsw7WP1LSY5wBSBEBCms3/y6O9xIAaIREMAwsgF0L//8+K6///1R5WDQRCpOzDtY/UtJjnACELIBdC///Piuv//9UeUQ0DQprN/8ujvcSAGiERIBchDgwFCyAMIRULIBAhDwsgDSELIBchDgwCC0L//8+K6///1R4hDiAUQqrV/v///7//uX9WDQBCms3/y6O9xIAaIREMAQsgF0L//8+K6///1R59IgsgFEKr1f7///+//7l/VK0iEn0hDiANQqTsw7WP1LSY5wB9Ig8gF0L//8+K6///1R5UIAsgElRyrSISfSELIBBCv6WUnM/w0rvkAH0iFSANQqTsw7WP1LSY5wBUIA8gElRyrSINfSEPIAxC19mumuT26Y3LAH0iEiAQQr+llJzP8NK75ABUIA0gFVZyrSINfSEVIBEgDELX2a6a5PbpjcsAVCANIBJWcq19QprN/8ujvcSAGn0hESAUQtWqgYCAgMCAxgB8IRQLIAIgFDcDiCYgAiAONwOAJiACIAs3A/glIAIgDzcD8CUgAiAVNwPoJSACIBE3A+AlQSghAyACQZgnakIANwMAIAJBkCdqQgA3AwAgAkGIJ2pCADcDACACQYAnakIANwMAIAJB+CZqQgA3AwAgAkIANwPwJgJAAkACQAJAAkACQAJAIAJB4CVqIAJB8CZqQTAQ8QMEQEIAIQ9CACERQgAhDkIAIQxCACELQgAhFANAIAJB8A1qIAJBsCVqIANqKQMAIg1CACAiQgAQyQMgAkGADmogDUIAICNCABDJAyACQZAOaiANQgAgJEIAEMkDIAJBoA5qIA1CACAlQgAQyQMgAkGwDmogDUIAICZCABDJAyACQcAOaiANQgAgJ0IAEMkDIAJB4A1q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AUK/pZScz/DSu+QAIRcgDEKk7MO1j9S0mOcAUgRAIAshEiAMIRUMAQsgC0L//8+K6///1R5WDQFCpOzDtY/UtJjnACEVIAtC///Piuv//9UeUgRAIAshEgwBC0L//8+K6///1R4hEiAPQqrV/v///7//uX9WDQELQprN/8ujvcSAGiEUDAELIAtC///Piuv//9UefSINIA9Cq9X+////v/+5f1StIhB9IRIgDEKk7MO1j9S0mOcAfSITIAtC///Piuv//9UeVCANIBBUcq0iC30hFSAOQr+llJzP8NK75AB9Ig0gDEKk7MO1j9S0mOcAVCALIBNWcq0iC30hFyARQtfZrprk9umNywB9IgwgDkK/pZScz/DSu+QAVCALIA1Wcq0iC30hFiAUIBFC19mumuT26Y3LAFQgCyAMVnKtfUKazf/Lo73EgBp9IRQgD0LVqoGAgIDAgMYAfCEPC0EoIQNCACEOQgAhDEIAIRBCACENQgAhE0IAIREDQCACQfAAaiACQagnaiADaikDACILQgAgD0IAEMkDIAJBgAFqIAtCACASQgAQyQMgAkGQAWogC0IAIBVCABDJAyACQaABaiALQgAgF0IAEMkDIAJBsAFqIAtCACAWQgAQyQMgAkHAAWogC0IAIBRCABDJAyACQeAAaiACKQNwIhggEXwiEUIAQgBC/f/z/8////mJfxDJAyACQdAAaiACKQNoIgtCAEKr1f7///+//7l/QgAQyQMgAkFAayALQgBC///Piuv//9UeQgAQyQMgAkEwaiALQgBCpOzDtY/UtJjnAEIAEMkDIAJBIGogC0IAQr+llJzP8NK75ABCABDJAyACQRBqIAtCAELX2a6a5PbpjcsAQgAQyQMgAiALQgBCms3/y6O9xIAaQgAQyQMgAikDCCACKQPAASIaIA58IgsgAikDuAEgAikDsAEiDiAMfCIMIA5UrXwgDCAMIAIpA6gBIBAgAikDoAEiEHwiDiAQVK18IA4gDiACKQOYASACKQOQASIQIA18Ig0gEFStfCANIA0gAikDiAEgEyACKQOAASITfCIQIBNUrXwgECAQIAIpA3ggESAYVK18fCIQVq18fCINVq18fCIOVq18fCIMVq18fCIYIAIpAwB8IhkgGFStfCAZIAIpAxggDCAMIAIpAxB8IgxWrXwgDCACKQMoIA4gDiACKQMg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A9gZIBEgElatIAMpA8gaIBAgEVatfHwiFCADKQOYGiAQIBhUrXx8IhAgAykDoBl8IhEgDSAOVq0gAykDuBkgDSASVK18fHwiEiADKQPQGXwiDSASVK18IA0gEyAWVq0gFSAOIBNWrXx8fCIOIA1UrXwiEyARIBJWrSADKQOoGSAQIBFWrXx8IhEgECAUVK18IhR8IhIgAykDsBh8Ig0gAykDyBggDiAOIAMpA8AYfCIOVq18IA4gDiAGIA9UrSADKQPYGCAPIBdUrXx8fCIOVq18fCIPIAMpA+AYfCIQIA9UrXwgECADKQP4GCIVIA4gDiAZfCIOVq18IA4gByAIVK0gFSAGIAhWrXx8fCIVIA5UrXx8IgYgEFStfCIQIA0gD1atIAMpA7gYIA0gElStfHwiDyASIBNUrSARIBRWrXx8IhF8IgggAykDwBd8Ig4gAykD2BcgBiAGIAMpA9AXfCIGVq18IAYgBiADKQPoFyADKQOoGCAHIAxWrXwiEiADKQPgF3wiByASVK18IAcgByAVfCIHVq18fCIGVq18fCISIAMpA/AXfCINIBJUrXwgDSADKQOIGCITIAYgBiADKQOAGCIUfCIGVq18IAYgEyAHIAcgFHwiB1atfCAHIAMpA5gYIAwgAykDkBgiDHwgDFStfHwiISAHVK18fCIaIAZUrXx8IiIgDVStfCIGIA4gElatIAMpA8gXIAggDlatfHwiByAIIBBUrSAPIBFWrXx8Igh8IiYgBlQgByAIVnIgJkIAU3IiBEUEQCAmIQwgGiIOICIiB4NCf1IgISISQm1UciAMQv///////////wBScg0BCyAaQgF8IgYgIUJtVK0iCH0hDiAiQgF8IgwgGkJ/UiAGIAhUcq0iBn0hByAmICJCf1IgBiAMVnKtfUL///////////8AfSEMICFCE3whEgsgCyAMfCINIAUgB3wiBiAFVCAGIAYgCSAOfCIFIAlUIAUgBSAKIBJ8IgwgClStfCIFVnKtfCIGVnKtfCEIAkACQCAIIA1UIAsgDVZyDQBC////////////ACELIAgiB0L///////////8AUQRAQn8hCUL///////////8AIQ4gBkJ/UgRAIAUhEiAGIQkMAwsgBUJ/UgRAIAUhEgwDC0JtIQsgDCIHQm1RDQELIAcgC1oNACAFIRIgBiEJIAghDgwBCyAFQgF8IgkgDEJtVK0iB30hEiAGQgF8IgogBUJ/UiAHIAlWcq0iBX0hCSAIIAZCf1IgBSAKVnKtfUL///////////8AfSEOIAxCE3whDAsgA0GAF2ogAykDuB0iF0IAQr4BQgAQyQMgA0HwFmogAykDgBciCEKblK/D8rWo3oZ/fiIFQgBCbUIAEMkDIANB4BZqIAVCAEJ/QgAQyQMgA0HwFWogBUIAQv///////////wBCABDJAyADQZAXaiADKQOwHSIYQgBCvgFCABDJAyADQdAWaiADKQPgFiIFIAMpA4gXfCIGIAMpA/gWIAMpA/AWIgcgCEJ+g3wgB1StfHwiCCADKQOQF3wiB0KblK/D8rWo3oZ/fiIKQgBCbUIAEMkDIANBwBZqIApCAEJ/QgAQyQMgA0GAFmogCkIAQv///////////wBCABDJAyADQaAXaiADKQOoHSIZQgBCvgFCABDJAyADQbAWaiADKQPAFiIKIAMpA5gXIAcgCFStfCILIAUgBiAIVq0gAykD6BYiDSAFIAZWrXx8Ig98IhB8IhF8IgUgAykD2BYgAykD0BYiBiAHfCAGVK18fCIGIAMpA6AXfCIIQpuUr8Pytajehn9+IgdCAEJtQgAQyQMgA0GgFmogB0IAQn9CABDJAyADQZAWaiAHQgBC////////////AEIAEMkDIANBsBdqIAMpA6AdIhxCAEK+AUIAEMkDIANB4BVqIAMpA6AWIgcgCiALIBFWrSIRIA0gDyAQVq18IhAgAykD8BV8IhN8Igt8Ig0gBSAGVq0gAykDyBYiFCAFIApUrXx8fCIFIAMpA6gXIAYgCFatfHwiFXwiBiADKQO4FiAIIAMpA7AWIgh8IAhUrXx8IgggAykDsBd8IgpCm5Svw/K1qN6Gf34iD0IAQm1CABDJAyADQdAVaiAPQgBCf0IAEMkDIANBwBVqIA9CAEL///////////8AQgAQyQMCQAJAIAMpA8gVIAMpA5gWIAMpA4gWIAMpA4AWIhYgAykD+BUgECATVq18fCIPIBZUrXwgDyAPIAsgEVStfCIPVq18IA8gBSANVK0gFCALIA1WrXx8fCILIA9UrXwiDyADKQOQFnwiDSAPVK18IA0gCyAFIBVWrXwiBSALVK18IgsgDVStfCALIAMpA6gWIg0gBSAFIAd8IgVWrXwgBSAFIAYgCFatIA0gBiAHVK18fHwiBVatfHwiBiALVK18IgsgAykDwBV8IgcgC1StfCAHIAYgBSADKQO4FyAIIApWrXx8IgsgBVStfCIFIAZUrXwiCCAHVK18IAggCCADKQPYFSIHIAUgBSADKQPQFSIGfCIFVq18IAUgByAGIAYgC3wiBlatfCAGIAMpA+gVIAMpA+AVIgcgCnwgB1StfHwiCiAGVK18fCIGIAVUrXx8IghWrXwiC0IAWQRAIAtC////////////AFIgCkJtVHIgBiAIg0J/UnINAQsgBkIBfCIHIApCbVStIg19IQUgCEIBfCIPIAZCf1IgByANVHKtIgZ9IQcgCyAIQn9SIAYgD1ZyrX1C////////////AH0hCyAKQhN8IQoMAQsgCCEHIAYhBQsgA0GwFWogCkIAIB1CABDJAyADQcAUaiAFQgAgHUIAEMkDIANB0BNqIAdCACAdQgAQyQMgA0HgEmogC0IAIB1CABDJAyADQaAVaiADKQOwFSINQpuUr8Pytajehn9+IgZCAEJtQgAQyQMgA0GQFWogBkIAQn9CABDJAyADQYAVaiAGQgBC////////////AEIAEMkDIANB8BRqIApCACAeQgAQyQMgA0GAFGogBUIAIB5CABDJAyADQZATaiAHQgAgHkIAEMkDIANBoBJqIAtCACAeQgAQyQMgA0GwFGogAykDkBUiBiADKQO4FSIRIAMpA8AUfCITfCIIIAMpA6gVIA0gAykDoBUiD3wgD1StfHwiDSADKQPwFHwiD0KblK/D8rWo3oZ/fiIQQgBCbUIAEMkDIANBoBRqIBBCAEJ/QgAQyQMgA0GQFGogEEIAQv///////////wBCABDJAyADQeAUaiAKQgAgH0IAEMkDIANB8BNqIAVCACAfQgAQyQMgA0GAE2ogB0IAIB9CABDJAyADQZASaiALQgAgH0IAEMkDIANBwBNqIAMpA/gUIA0gD1atfCIVIAMpA4AUfCIQIAYgAykDyBQgESATVq18IhYgAykD0BN8IhF8IhMgCCANVq0gAykDmBUiGyAGIAhWrXx8fCIlfCIGIAMpA6AUIiN8IgggAykDuBQgAykDsBQiDSAPfCANVK18fCINIAMpA+AUfCIPQpuUr8Pytajehn9+IhRCAEJtQgAQyQMgA0GwE2ogFEIAQn9CABDJAyADQaATaiAUQgBC////////////AEIAEMkDIANB0BRqIApCACAgQgAQyQMgA0HgE2ogBUIAICBCABDJAyADQfASaiAHQgAgIEIAEMkDIANBgBJqIAtCACAgQgAQyQMgA0HQEmogAykD6BQgDSAPVq18IiQgAykD8BN8IgUgIyADKQPYEyARIBZUrXwiFiADKQPgEnwiByADKQOAFXwiCiATICVWrSAbIBEgE1atfHx8IgsgAykDkBN8IhEgBiAQVK0gAykDiBQgECAVVK18fHwiEHwiEyAIIA1WrSADKQOoFCIVIAYgCFatfHx8Iht8IgYgAykDsBMiJXwiCCADKQPIEyADKQPAEyINIA98IA1UrXx8Ig0gAykD0BR8Ig9Cm5Svw/K1qN6Gf34iFEIAQm1CABDJAyADQcASaiAUQgBCf0IAEMkDIANBsBJqIBRCAEL///////////8AQgAQyQMCQAJAIAMpA7gSIAMpA6gTIAMpA5gUIAogC1atIAMpA4gVIAcgClatfHwiFCADKQPoEiAHIBZUrXx8IgcgAykDoBJ8IgogECARVK0gAykDmBMgCyARVq18fHwiCyADKQOQFHwiESALVK18IBEgEyAbVq0gFSAQIBNWrXx8fCIQIBFUrXwiESAKIAtWrSADKQOoEiAHIApWrXx8IhMgByAUVK18IhR8IgcgAykDkBJ8IgogAykDiBMgECADKQOAE3wiCyAQVK18IAsgBSAGVq0gAykD+BMgBSAkVK18fHwiBSALVK18fCILIAMpA6ATfCIQIAtUrXwgECADKQO4EyIVIAUgBSAlfCIFVq18IAUgCCANVq0gFSAGIAhWrXx8fCIIIAVUrXx8IgUgEFStfCIQIAogC1atIAMpA5gSIAcgClatfHwiFSAHIBFUrSATIBRWrXx8IhF8IgcgAykDgBJ8IgogAykD+BIgBSAFIAMpA/ASfCIFVq18IAUgBSADKQPoEyADKQPYFCANIA9WrXwiCyADKQPgE3wiBiALVK18IAYgBiAIfCIGVq18fCIFVq18fCINIAMpA7ASfCIIIA1UrXwgCCAIIAMpA8gSIgsgBSAFIAMpA8ASIhN8IgVWrXwgBSALIAYgBiATfCIGVq18IAYgAykD2BIgAykD0BIiCyAPfCALVK18fCILIAZUrXx8IgYgBVStfHwiCFatfCIFIAogDVatIAMpA4gSIAcgClatfHwiDSAHIBBUrSARIBVUrXx8Igd8IgogBVQgByANVHIgCkIAU3JFBEAgBiAIg0J/UiALQm1UciAKQv///////////wBScg0BCyAGQgF8IgcgC0JtVK0iDX0hBSAIQgF8Ig8gBkJ/UiAHIA1Ucq0iBn0hByAKIAhCf1IgBiAPVnKtfUL///////////8AfSEKIAtCE3whCwwBCyAIIQcgBiEFCwJ+AkACQCAKIgYgDiIIUg0AIAciBiAJIghSDQAgBSEGIBIiCCAFUg0AIAwiCCALIgZRDQELIAYgCFgNACAFIBJUIAUgEn0iBSALIAxUrSIGVHKtIgggByAJfSISQn+FfCINIAYgBUJ/hXwiBiALIAx9IgxCbVatIgtUrSIPfSEFIA0gD1QhAiAGIAt9IQYgByAJVCAIIBJWcq0gDiAKfXxC////////////AHwhB0JtIAx9DAELIBIgBX0iCCALIAxWrSINfSEGIAkgB30iDyAIIA1UIAUgElZyrSIIfSEFIAggD1YgByAJVnIhAiAOIAp9IQcgDCALfQshCiAHIAKtfSIJIQcCfwJAAkAgCSAcIgxSDQAgBSIHIBkiDFINACAGIgcgGCIMUg0AIAoiByAXIgxRDQELIAcgDFoNACAYIAZ9IgggCiAXVq0iB1QgBiAYVnKtIgYgGSAFfSIMQn+FfCIOIAhCf4UgB3wiCCAXIAp9IgdCbVatIgpUrSILfSEjIAggCn0hJCAFIBlWIAYgDFZyrSAJIBx9fEL///////////8AfCETQm0gB30hJSALIA5WDAELIAYgGH0iCCAKIBdUrSIHfSEkIAUgGX0iDCAGIBhUIAcgCFZyrSIGfSEjIAkgHH0hEyAKIBd9ISUgBSAZVCAGIAxWcgshAiADQcARaiAdQgBCyANCABDJAyADQbARaiADKQPAESIJQpuUr8Pytajehn9+IgVCAEJtQgAQyQMgA0GgEWogBUIAQn9CABDJAyADQbAQaiAFQgBC////////////AEIAEMkDIANB0BFqIB5CAELIA0IAEMkDIANBkBFqIAMpA6ARIgUgAykDyBF8IgYgAykDuBEgAykDsBEiCCAJQniDfCAIVK18fCIJIAMpA9ARfCIIQpuUr8Pytajehn9+IgdCAEJtQgAQyQMgA0GAEWogB0IAQn9CABDJAyADQcAQaiAHQgBC////////////AEIAEMkDIANB4BFqIB9CAELIA0IAEMkDIANB8BBqIAMpA4ARIgcgAykD2BEgCCAJVK18IgwgBSAGIAlWrSADKQOoESIKIAUgBlatfHwiDnwiC3wiEnwiBSADKQOYESADKQOQESIGIAh8IAZUrXx8IgYgAykD4BF8IglCm5Svw/K1qN6Gf34iCEIAQm1CABDJAyADQeAQaiAIQgBCf0IAEMkDIANB0BBqIAhCAEL///////////8AQgAQyQMgA0HwEWogIEIAQsgDQgAQyQMgA0GgEGogAykD4BAiCCAHIAwgElatIhIgCiALIA5UrXwiCyADKQOwEHwiDXwiDHwiCiAFIAZWrSADKQOIESIPIAUgB1StfHx8IgUgAykD6BEgBiAJVq18fCIQfCIGIAMpA/gQIAkgAykD8BAiCXwgCVStfHwiCSADKQPwEXwiB0KblK/D8rWo3oZ/fiIOQgBCbUIAEMkDIANBkBBqIA5CAEJ/QgAQyQMgA0GAEGogDkIAQv///////////wBCABDJAwJAAkAgAykDiBAgAykD2BAgAykDyBAgAykDwBAiESADKQO4ECALIA1WrXx8Ig4gEVStfCAOIA4gDCASVK18Ig5WrXwgDiAFIApUrSAPIAogDFStfHx8IgwgDlStfCIOIAMpA9AQfCIKIA5UrXwgCiAMIAUgEFatfCIFIAxUrXwiDCAKVK18IAwgAykD6BAiCiAFIAUgCHwiBVatfCAFIAUgBiAJVq0gCiAGIAhUrXx8fCIFVq18fCIGIAxUrXwiDCADKQOAEHwiCCAMVK18IAggBiAFIAMpA/gRIAcgCVStfHwiDCAFVK18IgUgBlStfCIJIAhUrXwgCSADKQOYECIIIAUgBSADKQOQECIGfCIFVq18IAUgCCAGIAYgDHwiBlatfCAGIAMpA6gQIAMpA6AQIgggB3wgCFStfHwiCiAGVK18fCIGIAVUrXx8IgggCVStfCILQgBZBEAgC0L///////////8AUiAKQm1UciAGIAiDQn9Scg0BCyAGQgF8IgkgCkJtVK0iB30hBSAIQgF8IgwgBkJ/UiAHIAlWcq0iBn0hCSALIAhCf1IgBiAMVnKtfUL///////////8AfSELIApCE3whCgwBCyAIIQkgBiEFC0LIAyEMIAMCfiAF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bSAHfSIKIAx8IgwgClStfCIRIAZUcq18IhAgBVRyrXxC////////////AHwhCiAVIQYgDyEVIA0hBQsgA0GAHmogA0HgHWpBIBDxAw0ACwsgA0HwD2ogDEIAICVCABDJAyADQbAPaiAMQgAgJEIAEMkDIANBoA9qIAxCACAjQgAQyQMgA0GQD2ogDEIAICxCABDJAyADQeAPaiADKQPwDyIJQpuUr8Pytajehn9+IgVCAEJtQgAQyQMgA0HQD2ogBUIAQn9CABDJAyADQcAPaiAFQgBC////////////AEIAEMkDIANBgA9qIBFCACAlQgAQyQMgA0HADmogEUIAICRCABDJAyADQbAOaiARQgAgI0IAEMkDIANBoA5qIBFCACAsQgAQyQMgA0HwDmogAykD0A8iBSADKQP4DyIMIAMpA7APfCIOfCIGIAMpA+gPIAkgAykD4A8iCHwgCFStfHwiCSADKQOAD3wiCEKblK/D8rWo3oZ/fiIHQgBCbUIAEMkDIANB4A5qIAdCAEJ/QgAQyQMgA0HQDmogB0IAQv///////////wBCABDJAyADQZAOaiAQQgAgJUIAEMkDIANB0A1qIBBCACAkQgAQyQMgA0HADWogEEIAICNCABDJAyADQbANaiAQQgAgLEIAEMkDIANBgA5qIAMpA4gPIAggCVStfCINIAMpA8AOfCIHIAUgAykDuA8gDCAOVq18IhIgAykDoA98Igx8Ig4gBiAJVq0gAykD2A8iDyAFIAZWrXx8fCIQfCIFIAMpA+AOIhF8IgYgAykD+A4gAykD8A4iCSAIfCAJVK18fCIJIAMpA5AOfCIIQpuUr8Pytajehn9+IgtCAEJtQgAQyQMgA0HwDWogC0IAQn9CABDJAyADQeANaiALQgBC////////////AEIAEMkDIANBoA1qIApCACAlQgAQyQMgA0HgDGogCkIAICRCABDJAyADQdAMaiAKQgAgI0IAEMkDIANBwAxqIApCACAsQgAQyQMgA0GQDWogAykDmA4gCCAJVK18IhMgAykD0A18IgogESADKQOoDyAMIBJUrXwiFCADKQOQD3wiCyADKQPAD3wiEiAOIBBWrSAPIAwgDlatfHx8IgwgAykDsA58Ig4gBSAHVK0gAykDyA4gByANVK18fHwiB3wiDSAGIAlWrSADKQPoDiIQIAUgBlatfHx8IhF8IgUgAykD8A0iFXwiBiADKQOIDiADKQOADiIJIAh8IAlUrXx8IgkgAykDoA18IghCm5Svw/K1qN6Gf34iD0IAQm1CABDJAyADQYANaiAPQgBCf0IAEMkDIANB8AxqIA9CAEL///////////8AQgAQyQMgAykD+AwgAykD6A0gAykD2A4gDCASVK0gAykDyA8gCyASVq18fCIPIAMpA5gPIAsgFFStfHwiCyADKQOgDnwiEiAHIA5UrSADKQO4DiAMIA5WrXx8fCIMIAMpA9AOfCIOIAxUrXwgDiANIBFWrSAQIAcgDVatfHx8IgcgDlStfCINIAwgElStIAMpA6gOIAsgElatfHwiEiALIA9UrXwiD3wiDCADKQOwDXwiDiADKQPIDSAHIAcgAykDwA18IgdWrXwgByAHIAUgClStIAMpA9gNIAogE1StfHx8IgdWrXx8IgogAykD4A18IgsgClStfCALIAMpA/gNIhAgByAHIBV8IgdWrXwgByAGIAlWrSAQIAUgBlatfHx8IhAgB1StfHwiBSALVK18IgsgCiAOVK0gAykDuA0gDCAOVq18fCIOIAwgDVStIA8gElStfHwiEnwiByADKQPADHwiDCADKQPYDCAFIAUgAykD0Ax8IgVWrXwgBSAFIAMpA+gMIAMpA6gNIAggCVStfCIJIAMpA+AMfCIGIAlUrXwgBiAGIBB8IgZWrXx8IgVWrXx8IgkgAykD8Ax8IgogCVStfCAKIAMpA4gNIg0gBSAFIAMpA4ANIg98IgVWrXwgBSAFIA0gBiAGIA98IgZWrXwgBiADKQOYDSAIIAMpA5ANIgh8IAhUrXx8IiMgBlStfHwiBVatfHwiBiAKVK18IgggCSAMVK0gAykDyAwgByAMVq18fCIJIAcgC1StIA4gElatfHwiB3wiJCAIVCAHIAlUciAkQgBTckUEQCAFIAaDQn9SICNCbVRyICRC////////////AFJyDQILIAVCAXwiCSAjQm1UrSIIfSEbIAZCAXwiByAFQn9SIAggCVZyrSIFfSElICQgBkJ/UiAFIAdWcq19Qv///////////wB9ISQgI0ITfCEjDAILIANCAjcDoB5BjPfBAEErIANBoB5qQfz2wQBB+JDCABDKAwALIAYhJSAFIRsLAkACQCAERQRAIBogIoNCf1IgIUJtVHIgJkL///////////8AUnINAQsgGkIBfCIFICFCbVStIgZ9IQsgIkIBfCIJIBpCf1IgBSAGVHKtIgV9IQogJiAiQn9SIAUgCVZyrX1C////////////AH0hJiAhQhN8ISEMAQsgIiEKIBohCwsgJiArfCIFIAogKnwiCSAqVCAJIAkgCyApfCIGIClUIAYgBiAhICh8IgwgKFStfCIGVnKtfCIJVnKtfCEIAkACQCAFICtUIAUgCFZyDQBC////////////ACEHIAgiBUL///////////8AUQRAQn8hB0L///////////8AIQUgCUJ/UgRAIAYhDiAJIQcMAwsgBkJ/UgRAIAYhDgwDC0JtIQcgDCIFQm1RDQELIAUgB1oNACAGIQ4gCSEHIAghBQwBCyAGQgF8IgUgDEJtVK0iB30hDiAJQgF8IgogBkJ/UiAFIAdUcq0iBX0hByAIIAlCf1IgBSAKVnKtfUL///////////8AfSEFIAxCE3whDAsgA0HwCmogF0IAIB1CABDJAyADQbAKaiAYQgAgHUIAEMkDIANB8AlqIBlCACAdQgAQyQMgA0GwCWogHEIAIB1CABDJAyADQeAKaiADKQPwCiIIQpuUr8Pytajehn9+IgZCAEJtQgAQyQMgA0HQCmogBkIAQn9CABDJAyADQcAKaiAGQgBC////////////AEIAEMkDIANBsAtqIBdCACAeQgAQyQMgA0GgC2ogGEIAIB5CABDJAyADQZALaiAZQgAgHkIAEMkDIANBgAtqIBxCACAeQgAQyQMgA0GgCmogAykD0AoiBiADKQP4CiISIAMpA7AKfCINfCIJIAMpA+gKIAggAykD4AoiCnwgClStfHwiCCADKQOwC3wiCkKblK/D8rWo3oZ/fiILQgBCbUIAEMkDIANBkApqIAtCAEJ/QgAQyQMgA0GACmogC0IAQv///////////wBCABDJAyADQfALaiAXQgAgH0IAEMkDIANB4AtqIBhCACAfQgAQyQMgA0HQC2ogGUIAIB9CABDJAyADQcALaiAcQgAgH0IAEMkDIANB4AlqIAMpA7gLIAggClatfCITIAMpA6ALfCILIAYgAykDuAogDSASVK18IhAgAykD8Al8IhJ8Ig0gCCAJVK0gAykD2AoiFCAGIAlWrXx8fCIVfCIGIAMpA5AKIhZ8IgkgAykDqAogAykDoAoiCCAKfCAIVK18fCIIIAMpA/ALfCIKQpuUr8Pytajehn9+Ig9CAEJtQgAQyQMgA0HQCWogD0IAQn9CABDJAyADQcAJaiAPQgBC////////////AEIAEMkDIANBsAxqIBdCACAgQgAQyQMgA0GgDGogGEIAICBCABDJAyADQZAMaiAZQgAgIEIAEMkDIANBgAxqIBxCACAgQgAQyQMgA0GgCWogAykD+AsgCCAKVq18IhogAykD4At8Ig8gFiADKQP4CSAQIBJWrXwiIiADKQOwCXwiECADKQPACnwiESANIBVWrSAUIA0gElStfHx8IhIgAykDkAt8Ig0gBiALVK0gAykDqAsgCyATVK18fHwiC3wiEyAIIAlUrSADKQOYCiIVIAYgCVatfHx8IhZ8IgYgAykD0AkiIXwiCSADKQPoCSADKQPgCSIIIAp8IAhUrXx8IgggAykDsAx8IgpCm5Svw/K1qN6Gf34iFEIAQm1CABDJAyADQZAJaiAUQgBCf0IAEMkDIANBgAlqIBRCAEL///////////8AQgAQyQMCQAJAIAMpA4gJIAMpA8gJIAMpA4gKIBEgElatIAMpA8gKIBAgEVatfHwiFCADKQO4CSAQICJUrXx8IhAgAykDgAt8IhEgCyANVK0gAykDmAsgDSASVK18fHwiEiADKQOACnwiDSASVK18IA0gEyAWVq0gFSALIBNWrXx8fCILIA1UrXwiEyARIBJWrSADKQOICyAQIBFWrXx8IhEgECAUVK18IhR8IhIgAykDwAt8Ig0gAykD2AsgCyALIAMpA9ALfCILVq18IAsgCyAGIA9UrSADKQPoCyAPIBpUrXx8fCILVq18fCIPIAMpA8AJfCIQIA9UrXwgECADKQPYCSIVIAsgCyAhfCILVq18IAsgCyAIIAlUrSAVIAYgCVatfHx8IgtWrXx8IgYgEFStfCIQIA0gD1atIAMpA8gLIA0gElStfHwiFSASIBNUrSARIBRWrXx8IhF8IgkgAykDgAx8IhIgAykDmAwgBiAGIAMpA5AMfCIGVq18IAYgBiADKQOoDCADKQO4DCAIIApWrXwiDSADKQOgDHwiCCANVK18IAggCCALfCIIVq18fCIGVq18fCINIAMpA4AJfCIPIA1UrXwgDyADKQOYCSILIAYgBiADKQOQCSITfCIGVq18IAYgBiALIAggCCATfCIIVq18IAggAykDqAkgCiADKQOgCSIKfCAKVK18fCILIAhUrXx8IgZWrXx8IgggD1StfCIPIA0gElStIAMpA4gMIAkgElatfHwiEiAJIBBUrSARIBVUrXx8Igl8IgogD1QgCSASVHIgCkIAU3JFBEAgBiAIg0J/UiALQm1UciAKQv///////////wBScg0BCyAGQgF8IgkgC0JtVK0iDX0hEiAIQgF8Ig8gBkJ/UiAJIA1Ucq0iBn0hCSAKIAhCf1IgBiAPVnKtfUL///////////8AfSEKIAtCE3whCwwBCyAIIQkgBiESCyAFIQgCfgJAAkAgBSAKIgZSDQAgByEIIAkiBiAHUg0AIA4iCCASIgZSDQAgDCIIIAsiBlENAQsgBiAIWA0AIBIgDn0iBiALIAxUrSIIVCAOIBJWcq0iEiAJIAd9Ig1Cf4V8Ig8gCCAGQn+FfCIGIAsgDH0iCEJtVq0iDFStIgt9IQ4gCyAPViECIAYgDH0hBiANIBJUIAcgCVZyrSAFIAp9fEL///////////8AfCEHQm0gCH0MAQsgDiASfSIIIAsgDFatIg19IQYgByAJfSIPIA4gElQgCCANVHKtIgh9IQ4gByAJVCAIIA9WciECIAUgCn0hByAMIAt9CyEKIAcgAq19IgUhBwJ+AkACQCAFIBwiDFINACAOIgcgGSIMUg0AIAYiByAYIgxSDQAgCiIHIBciDFENAQsgByAMWg0AIBggBn0iCSAKIBdWrSIIVCAGIBhWcq0iBiAZIA59IgdCf4V8IgwgCUJ/hSAIfCIJIBcgCn0iCEJtVq0iClStIgt9IRggCyAMViEEIAkgCn0hISAOIBlWIAYgB1ZyrSAFIBx9fEL///////////8AfCENQm0gCH0MAQsgBiAYfSIJIAogF1StIgh9ISEgDiAZfSIHIAYgGFQgCCAJVnKtIgZ9IRggDiAZVCAGIAdWciEEIAUgHH0hDSAKIBd9CyEZIANB8AhqIAEpAxhCAEKYAUIAEMkDIANB4AhqIAMpA/AIIglCm5Svw/K1qN6Gf34iBUIAQm1CABDJAyADQdAIaiAFQgBCf0IAEMkDIANBwAhqIAVCAEL///////////8AQgAQyQMgA0GwCGogASkDEEIAQpgBQgAQyQMgA0GgCGogAykD0AgiBSADKQP4CHwiBiADKQPoCCADKQPgCCIIIAlCeIN8IAhUrXx8IgkgAykDsAh8IghCm5Svw/K1qN6Gf34iB0IAQm1CABDJAyADQZAIaiAHQgBCf0IAEMkDIANBgAhqIAdCAEL///////////8AQgAQyQMgA0HwB2ogASkDCEIAQpgBQgAQyQMgA0HgB2ogAykDkAgiByADKQO4CCAIIAlUrXwiDCAFIAYgCVatIAMpA9gIIgogBSAGVq18fCIOfCILfCISfCIFIAMpA6gIIAMpA6AIIgYgCHwgBlStfHwiBiADKQPwB3wiCUKblK/D8rWo3oZ/fiIIQgBCbUIAEMkDIANB0AdqIAhCAEJ/QgAQyQMgA0HAB2ogCEIAQv///////////wBCABDJAyADQbAHaiABKQMAQgBCmAFCABDJAyADQaAHaiADKQPQByIIIAcgDCASVq0iEiAKIAsgDlStfCILIAMpA8AIfCIPfCIMfCIKIAUgBlatIAMpA5gIIhAgBSAHVK18fHwiBSADKQP4ByAGIAlWrXx8IhF8IgYgAykD6AcgCSADKQPgByIJfCAJVK18fCIJIAMpA7AHfCIHQpuUr8Pytajehn9+Ig5CAEJtQgAQyQMgA0GQB2ogDkIAQn9CABDJAyADQYAHaiAOQgBC////////////AEIAEMkDAkACQAJ+AkACQCADKQOIByADKQPIByADKQOICCADKQOACCITIAMpA8gIIAsgD1atfHwiDiATVK18IA4gDiAMIBJUrXwiDlatfCAOIAUgClStIBAgCiAMVK18fHwiDCAOVK18Ig4gAykDwAd8IgogDlStfCAKIAwgBSARVq18IgUgDFStfCIMIApUrXwgDCADKQPYByIKIAUgBSAIfCIFVq18IAUgBSAGIAlWrSAKIAYgCFStfHx8IgVWrXx8IgYgDFStfCIMIAMpA4AHfCIIIAxUrXwgCCAGIAUgAykDuAcgByAJVK18fCIMIAVUrXwiBSAGVK18IgYgCFStfCAGIAMpA5gHIgggBSAFIAMpA5AHIgl8IgVWrXwgBSAIIAkgCSAMfCIJVq18IAkgAykDqAcgAykDoAciCCAHfCAIVK18fCIHIAlUrXx8IgogBVStfHwiDCAGVK18IgtCAFMiAUUEQCAKIAyDIQUgC0L///////////8AUiAHQm1Ucg0BIAchBiAKIQggDCEOIAshEiAFQn9SDQILIApCAXwiECAHQm1UrSIFfSEIIAxCAXwiFSAKQn9SIAUgEFZyrSIFfSEOIAtC////////////AH0iFiAMQn9SIAUgFVZyrX0hEiAHQhN8IQYgBiABDQIaIAogDIMhBQwBCyAHIQYgCiEIIAwhDiALIRILIAtC////////////AFIgB0JtVHIgBUJ/UnINASAMQgF8IRUgCkIBfCEQQgAhFiAHQhN8CyEFIBUgCkJ/UiAQIAdCbVStIgdUcq0iCn0hCSAWIAxCf1IgCiAVVnKtfSELIBAgB30hCgwBCyAMIQkgByEFCyADQfAGaiAFQgAgHUIAEMkDIANBgAZqIApCACAdQgAQyQMgA0GQBWogCUIAIB1CABDJAyADQaAEaiALQgAgHUIAEMkDIANB4AZqIAMpA/AGIg9Cm5Svw/K1qN6Gf34iB0IAQm1CABDJAyADQdAGaiAHQgBCf0IAEMkDIANBwAZqIAdCAEL///////////8AQgAQyQMgA0GwBmogBUIAIB5CABDJAyADQcAFaiAKQgAgHkIAEMkDIANB0ARqIAlCACAeQgAQyQMgA0HgA2ogC0IAIB5CABDJAyADQfAFaiADKQPQBiIHIAMpA/gGIhMgAykDgAZ8IhR8IgwgAykD6AYgDyADKQPgBiIQfCAQVK18fCIPIAMpA7AGfCIQQpuUr8Pytajehn9+IhFCAEJtQgAQyQMgA0HgBWogEUIAQn9CABDJAyADQdAFaiARQgBC////////////AEIAEMkDIANBoAZqIAVCACAfQgAQyQMgA0GwBWogCkIAIB9CABDJAyADQcAEaiAJQgAgH0IAEMkDIANB0ANqIAtCACAfQgAQyQMgA0GABWogAykDuAYgDyAQVq18IhYgAykDwAV8IhEgByADKQOIBiATIBRWrXwiFyADKQOQBXwiE3wiFCAMIA9WrSADKQPYBiIcIAcgDFatfHx8Ihp8IgcgAykD4AUiInwiDCADKQP4BSADKQPwBSIPIBB8IA9UrXx8Ig8gAykDoAZ8IhBCm5Svw/K1qN6Gf34iFUIAQm1CABDJAyADQfAEaiAVQgBCf0IAEMkDIANB4ARqIBVCAEL///////////8AQgAQyQMgA0GQBmogBUIAICBCABDJAyADQaAFaiAKQgAgIEIAEMkDIANBsARqIAlCACAgQgAQyQMgA0HAA2ogC0IAICBCABDJAyADQZAEaiADKQOoBiAPIBBWrXwiJiADKQOwBXwiBSAiIAMpA5gFIBMgF1StfCIXIAMpA6AEfCIJIAMpA8AGfCIKIBQgGlatIBwgEyAUVq18fHwiCyADKQPQBHwiEyAHIBFUrSADKQPIBSARIBZUrXx8fCIRfCIUIAwgD1atIAMpA+gFIhYgByAMVq18fHwiHHwiByADKQPwBCIafCIMIAMpA4gFIAMpA4AFIg8gEHwgD1StfHwiDyADKQOQBnwiEEKblK/D8rWo3oZ/fiIVQgBCbUIAEMkDIANBgARqIBVCAEJ/QgAQyQMgA0HwA2ogFUIAQv///////////wBCABDJAwJAAkAgAykD+AMgAykD6AQgAykD2AUgCiALVq0gAykDyAYgCSAKVq18fCIVIAMpA6gEIAkgF1StfHwiCSADKQPgA3wiCiARIBNUrSADKQPYBCALIBNWrXx8fCILIAMpA9AFfCITIAtUrXwgEyAUIBxWrSAWIBEgFFatfHx8IhEgE1StfCITIAogC1atIAMpA+gDIAkgClatfHwiFCAJIBVUrXwiFXwiCSADKQPQA3wiCiADKQPIBCARIAMpA8AEfCILIBFUrXwgCyAFIAdWrSADKQO4BSAFICZUrXx8fCIFIAtUrXx8IgsgAykD4AR8IhEgC1StfCARIAMpA/gEIhYgBSAFIBp8IgVWrXwgBSAMIA9WrSAWIAcgDFatfHx8IhYgBVStfHwiBSARVK18IhEgCiALVq0gAykD2AMgCSAKVq18fCIXIAkgE1StIBQgFVatfHwiE3wiByADKQPAA3wiDCADKQO4BCAFIAUgAykDsAR8IgVWrXwgBSAFIAMpA6gFIAMpA5gGIA8gEFatfCIKIAMpA6AFfCIJIApUrXwgCSAJIBZ8IglWrXx8IgVWrXx8IgogAykD8AN8Ig8gClStfCAPIAMpA4gEIgsgBSAFIAMpA4AEIhR8IgVWrXwgBSAFIAsgCSAJIBR8IglWrXwgCSADKQOYBCADKQOQBCILIBB8IAtUrXx8IgsgCVStfHwiBVatfHwiCSAPVK18Ig8gCiAMVK0gAykDyAMgByAMVq18fCIMIAcgEVStIBMgF1StfHwiB3wiCiAPVCAHIAxUciAKQgBTckUEQCAFIAmDQn9SIAtCbVRyIApC////////////AFJyDQELIAVCAXwiDCALQm1UrSIPfSEHIAlCAXwiECAFQn9SIAwgD1RyrSIFfSEMIAogCUJ/UiAFIBBWcq19Qv///////////wB9IQogC0ITfCELDAELIAkhDCAFIQcLAn4CQAJAIAoiBSASIglSDQAgDCIFIA4iCVINACAHIgUgCCIJUg0AIAsiBSAGIglRDQELIAUgCVgNACAHIAhUIAcgCH0iBSAGIAtWrSIJVHKtIgggDCAOfSIPQn+FfCIQIAkgBUJ/hXwiBSALIAZ9IgZCbVatIglUrSILfSEHIAsgEFYhAiAFIAl9IQVCbSAGfSELIAwgDlQgCCAPVnKtIBIgCn18Qv///////////wB8DAELIAggB30iCSAGIAtUrSIPfSEFIA4gDH0iECAJIA9UIAcgCFZyrSIJfSEHIAkgEFYgDCAOVnIhAiAGIAt9IQsgEiAKfQshCiADIAs3A9gdIAMgBTcD0B0gAyAHNwPIHSADIAogAq19NwPAHQJAAkAgA0HAHWpB6NHBAEEgEPEDBEAgDSAErX0hHCADQfAdakIANwMAIANB6B1qQgA3AwAgA0IANwPgHSADQgE3A/gdIANBmB5qIANB2B1qKQMANwMAIANBkB5qIANB0B1qKQMANwMAIANBiB5qIANByB1qKQMANwMAIAMgAykDwB03A4AeIANBuB5qQeDRwQApAwA3AwAgA0GwHmpB2NHBACkDADcDACADQageakHQ0cEAKQMANwMAIANByNHBACkDADcDoB4CQCADQYAeaiADQeAdakEgEPEDRQRAQqQLIQxCACEKQgAhEEIAIREMAQtCpAshDCADKQOYHiEFIAMpA4AeIQ4gAykDkB4hFSADKQOIHiEGQgAhB0IAIRRCACETQgAhC0IAIRFCACEQQgAhCkJtIQlC////////////ACESQn8hCEJ/IRYDQCADQaAeaiADQeAdakEgEPEDRQRAIAshCiATIRAgFCERIAchDAwCCyAFp0EBcUUEQANAIBVCP4YgBUIBiIQhBQJ+IAynQQFxRQRAIBFCP4YgDEIBiIQhDCAQQj+GIBFCAYiEIREgCkI/hiAQQgGIhAwBCyAQQgF9Ig8gEUIAUiARQgF9Ig0gDEITfSIXIAxUrXwiDCANVHKtfCINQj+GIAxCAYiEIREgDEI/hiAXQgGIhCEMIAogEEIAUiANIA9Ucq18Qv///////////wB8IgpCP4YgDUIBiIQLIRAgDkI/hiAGQj+GIBVCAYiEIRUgDkIBiCEOIApCAYghCiAGQgGIhCEGIAVCAYNQDQALIAMgBjcDiB4gAyAVNwOQHgsgAyAONwOAHiADIAU3A5geIAmnQQFxRQRAA0AgFkI/hiAJQgGIhCEJAn4gB0IBg1BFBEAgE0IBfSIPIBRCAFIgFEIBfSINIAdCE30iFyAHVK18IgcgDVRyrXwiDUI/hiAHQgGIhCEUIAdCP4YgF0IBiIQhByALIBNCAFIgDSAPVHKtfEL///////////8AfCILQj+GIA1CAYiEDAELIBRCP4YgB0IBiIQhByATQj+GIBRCAYiEIRQgC0I/hiATQgGIhAshEyASQj+GIAhCP4YgFkIBiIQhFiASQgGIIRIgC0IBiCELIAhCAYiEIQggCUIBg1ANAAsgAyAINwOoHiADIBY3A7AeCyADIAk3A7geIAMgEjcDoB4gDiEPAkACQAJAAkACQCASIg0gDlINACAIIQ0gBiEPIAYgCFINACAVIg8gFiINUg0AIAkhDSAFIQ8gBSAJUQ0BCyANIA9YDQAgAyAJIAV9Ig03A7geIAMgFiAVfSIXIAUgCVatIgl9Ig83A7AeIAMgCCAGfSIaIAkgF1YgFSAWVnKtIgl9Ihc3A6geIAMgEiAOfSAJIBpWIAYgCFZyrX0iEjcDoB4CQAJAIAoiCCALIglSDQAgECIIIBMiCVINACARIgggFCIJUg0AIAchCSAHIAwiCFENAQsgCCAJVg0CCyALIAp9IBMgEH0iGiAUIBF9IiIgByAMVK0iJlQgESAUVnKtIhRUIBAgE1ZyrX0hCyAHIAx9IQcgDyEWIBchCCANIQkgGiAUfSETICIgJn0hFAwDCyADIAUgCX0iDTcDmB4gAyAVIBZ9IhcgBSAJVK0iBX0iDzcDkB4gAyAGIAh9IhogFSAWVCAFIBdWcq0iBX0iFTcDiB4gAyAOIBJ9IAYgCFQgBSAaVnKtfSIONwOAHgJAAkAgCiIFIAsiBlINACAQIgUgEyIGUg0AIBEiBSAUIgZSDQAgDCIFIAciBlENAQsgBSAGVA0CCyAKIAt9IBAgE1QgECATfSIQIBEgFFQgESAUfSIRIAcgDFatIhdUcq0iGlRyrX0hCiAMIAd9IQwgFSEGIA8hFSANIQUgECAafSEQIBEgF30hEQwCCyALQn9CACAQQn+FIgkgEUJ/hSIIIAxCbVatIgtUrSIWVBsgCn18IBMgCSAWfSITfCIJIBNUIAkgCCALfSILIBR8IgggC1QgCEJtIAx9IgsgB3wiByALVK18IhQgCFRyrXwiEyAJVHKtfEL///////////8AfCELIA8hFiAXIQggDSEJDAELIAogC30gE0J/hSIFIBRCf4UiBiAHQm1WrSIKVK0iF1StfSAQIAUgF30iEHwiBSAQVCAFIAYgCn0iCiARfCIGIApUIAZCbSAHfSIKIAx8IgwgClStfCIRIAZUcq18IhAgBVRyrXxC////////////AHwhCiAVIQYgDyEVIA0hBQsgA0GAHmogA0HgHWpBIBDxAw0ACwsgA0GwA2ogDEIAIBlCABDJAyADQfACaiAMQgAgIUIAEMkDIANB4AJqIAxCACAYQgAQyQMgA0HQAmogDEIAIBxCABDJAyADQaADaiADKQOwAyIJQpuUr8Pytajehn9+IgVCAEJtQgAQyQMgA0GQA2ogBUIAQn9CABDJAyADQYADaiAFQgBC////////////AEIAEMkDIANBwAJqIBFCACAZQgAQyQMgA0GAAmogEUIAICFCABDJAyADQfABaiARQgAgGEIAEMkDIANB4AFqIBFCACAcQgAQyQMgA0GwAmogAykDkAMiBSADKQO4AyIMIAMpA/ACfCIOfCIGIAMpA6gDIAkgAykDoAMiCHwgCFStfHwiCSADKQPAAnwiCEKblK/D8rWo3oZ/fiIHQgBCbUIAEMkDIANBoAJqIAdCAEJ/QgAQyQMgA0GQAmogB0IAQv///////////wBCABDJAyADQdABaiAQQgAgGUIAEMkDIANBkAFqIBBCACAhQgAQyQMgA0GAAWogEEIAIBhCABDJAyADQfAAaiAQQgAgHEIAEMkDIANBwAFqIAMpA8gCIAggCVStfCINIAMpA4ACfCIHIAUgAykD+AIgDCAOVq18IhIgAykD4AJ8Igx8Ig4gBiAJVq0gAykDmAMiDyAFIAZWrXx8fCIQfCIFIAMpA6ACIhF8IgYgAykDuAIgAykDsAIiCSAIfCAJVK18fCIJIAMpA9ABfCIIQpuUr8Pytajehn9+IgtCAEJtQgAQyQMgA0GwAWogC0IAQn9CABDJAyADQaABaiALQgBC////////////AEIAEMkDIANB4ABqIApCACAZQgAQyQMgA0EgaiAKQgAgIUIAEMkDIANBEGogCkIAIBhCABDJAyADIApCACAcQgAQyQMgA0HQAGogAykD2AEgCCAJVK18IhMgAykDkAF8IgogESADKQPoAiAMIBJUrXwiFCADKQPQAnwiCyADKQOAA3wiEiAOIBBWrSAPIAwgDlatfHx8IgwgAykD8AF8Ig4gBSAHVK0gAykDiAIgByANVK18fHwiB3wiDSAGIAlWrSADKQOoAiIQIAUgBlatfHx8IhF8IgUgAykDsAEiFXwiBiADKQPIASADKQPAASIJIAh8IAlUrXx8IgkgAykDYHwiCEKblK/D8rWo3oZ/fiIPQgBCbUIAEMkDIANBQGsgD0IAQn9CABDJAyADQTBqIA9CAEL///////////8AQgAQyQMgAykDOCADKQOoASADKQOYAiAMIBJUrSADKQOIAyALIBJWrXx8Ig8gAykD2AIgCyAUVK18fCILIAMpA+ABfCISIAcgDlStIAMpA/gBIAwgDlatfHx8IgwgAykDkAJ8Ig4gDFStfCAOIA0gEVatIBAgByANVq18fHwiByAOVK18Ig0gDCASVK0gAykD6AEgCyASVq18fCISIAsgD1StfCIPfCIMIAMpA3B8Ig4gAykDiAEgByAHIAMpA4ABfCIHVq18IAcgByAFIApUrSADKQOYASAKIBNUrXx8fCIHVq18fCIKIAMpA6ABfCILIApUrXwgCyADKQO4ASIQIAcgByAVfCIHVq18IAcgBiAJVq0gECAFIAZWrXx8fCIQIAdUrXx8IgUgC1StfCILIAogDlStIAMpA3ggDCAOVq18fCIRIAwgDVStIA8gElStfHwiEnwiByADKQMAfCIMIAMpAxggBSAFIAMpAxB8IgVWrXwgBSAFIAMpAyggAykDaCAIIAlUrXwiCSADKQMgfCIGIAlUrXwgBiAGIBB8IgZWrXx8IgVWrXx8IgkgAykDMHwiDiAJVK18IA4gAykDSCIKIAUgBSADKQNAIg18IgVWrXwgBSAKIAYgBiANfCIGVq18IAYgAykDWCAIIAMpA1AiCHwgCFStfHwiCiAGVK18fCIGIAVUrXx8IgggDlStfCIFIAkgDFStIAMpAwggByAMVq18fCIJIAcgC1StIBEgElatfHwiB3wiCyAFVCAHIAlUciALQgBTckUEQCAGIAiDQn9SIApCbVRyIAtC////////////AFJyDQILIAZCAXwiBSAKQm1UrSIHfSEJIAhCAXwiDCAGQn9SIAUgB1RyrSIGfSEFIAsgCEJ/UiAGIAxWcq19Qv///////////wB9IQsgCkITfCEKDAILIANCAjcDoB5BjPfBAEErIANBoB5qQfz2wQBB6JDCABDKAwALIAghBSAGIQkLIAAgCjcDOCAAIAk3AzAgACAFNwMoIAAgCzcDICAAICM3AxggACAbNwMQIAAgJTcDCCAAICQ3AwAgA0HAHmokAAv/wwECB38kfiMAQZAwayIDJAAgAyACNgLMKyADQQw2AsgrAkACQAJAAkACQAJAIAJBDEYEQCADQdArahAhIANBgCtqIAMpA/AtIgpCAEKJ9auctYu/lnNCABDJAyADQfAqaiADKQOAKyIMQgBCAEKJx5mkrvCB6Yd/EMkDIANB4CpqIAMpA/gqIgtCAELH+vPD7YKjkDxCABDJAyADQdAqaiALQgBCjZXHw5bS2sCXf0IAEMkDIANB8ClqIAtCAELdsIWM6LaRqLh/QgAQyQMgA0GQKWogC0IAQqnAxomuzpOyMEIAEMkDIANBkCtqIApCAEL7g5SinaLG87V/QgAQyQMgA0HAKmogAykD0CoiECADKQOIK3wiDyADKQPoKiAMIAMpA+AqIgt8IAtUrXx8IgwgAykDkCt8Ig1CAEIAQonHmaSu8IHph38QyQMgA0GwKmogAykDyCoiC0IAQsf688PtgqOQPEIAEMkDIANBoCpqIAtCAEKNlcfDltLawJd/QgAQyQMgA0GQKmogC0IAQt2whYzotpGouH9CABDJAyADQYAqaiALQgBCqcDGia7Ok7IwQgAQyQMgA0GgK2ogCkIAQvb/hdLw38fVxwBCABDJAyADQeApaiADKQOgKiIUIAMpA5grIAwgDVatfCIOIAwgD1StIAMpA9gqIA8gEFStfHwiECADKQPwKXwiEnwiEXwiDyADKQO4KiADKQOwKiILIA18IAtUrXx8IgwgAykDoCt8Ig1CAEIAQonHmaSu8IHph38QyQMgA0HQKWogAykD6CkiC0IAQsf688PtgqOQPEIAEMkDIANBwClqIAtCAEKNlcfDltLawJd/QgAQyQMgA0GwKWogC0IAQt2whYzotpGouH9CABDJAyADQaApaiALQgBCqcDGia7Ok7IwQgAQyQMgA0GwK2ogCkIAQp/q4NWc7qfsBkIAEMkDIANBgClqIAMpA8ApIhcgDiARVq0iDiADKQP4KSAQIBJWrXwiEiADKQOQKXwiEXwiCyADKQOQKnwiECAMIA9UrSADKQOoKiAPIBRUrXx8fCIPIAMpA6grIAwgDVatfHwiE3wiDCADKQPYKSADKQPQKSIKIA18IApUrXx8Ig0gAykDsCt8IhRCAEIAQonHmaSu8IHph38QyQMgA0HwKGogAykDiCkiCkIAQsf688PtgqOQPEIAEMkDIANB4ChqIApCAEKNlcfDltLawJd/QgAQyQMgA0HQKGogCkIAQt2whYzotpGouH9CABDJAyADQcAoaiAKQgBCqcDGia7Ok7IwQgAQyQMCQCADKQPIKCADKQOoKSADKQOIKiADKQOAKiIWIAMpA5gpIBEgElStfHwiCiAWVK18IAogCiALIA5UrXwiDlatfCAOIA4gDyAQVK0gAykDmCogCyAQVq18fHwiClatfCIQIAMpA6ApfCILIBBUrXwgCyALIAogCiAPIBNWrXwiD1atfCIKVq18IAogCiADKQO4KSAPIA8gAykDsCl8IgtWrXwgCyALIAwgDVatIAMpA8gpIAwgF1StfHx8Ig9WrXx8IgtWrXwiDCADKQPAKHwiCiAMVK18IAogCyALIA8gAykDuCsgDSAUVq18fCINIA9UrXwiC1atfCIPIApUrXwgDyADKQPYKCALIAsgAykD0Ch8IgxWrXwgDCAMIAMpA+goIA0gAykD4CgiC3wiCiALVK18IAogAykD+CggAykD8CgiCyAUfCALVK18fCITIApUrXx8IgpWrXx8IhkgD1StfCIaQqnAxomuzpOyMFQEQCAKIRQMAQsCQCAZQt2whYzotpGouH9WDQAgGULdsIWM6LaRqLh/UgRAIAohFEKpwMaJrs6TsjAhGgwCCyAKQo2Vx8OW0trAl39WDQACQCAKQo2Vx8OW0trAl39SBEAgCiEUDAELQo2Vx8OW0trAl38hFCATQsf688PtgqOQPFoNAQtC3bCFjOi2kai4fyEZQqnAxomuzpOyMCEaDAELIApC8+q4vOmtpb/oAHwiCyATQsf688PtgqOQPFStIg99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rXwiJCADKQOwAXwiFCADKQPoAyAWIB5UrXwiKCADKQPwA3wiEyADKQPwAnwiHiAVICdWrSADKQOIAyAVIBZUrXx8fCIWIAMpA9ACfCIVIA8gF1StIAMpA8gCIBcgIlStfHx8IhcgAykD8AF8IiIgDiASVq0gAykDiAIgDiAPVK18fHwiJ3wiDyADKQNwfCIOIAMpA4gBIAMpA4ABIgogIHwgClStfHwiEiADKQOABHwiIEIAQgBCiceZpK7wgemHfxDJAyADQdAAaiADKQNoIgpCAELH+vPD7YKjkDxCABDJAyADQUBrIApCAEKNlcfDltLawJd/QgAQyQMgA0EwaiAKQgBC3bCFjOi2kai4f0IAEMkDIANBIGogCkIAQqnAxomuzpOyMEIAEMkDAkACQCADKQMoIAMpAwggAykD6AEgFiAeVK0gAykD+AIgEyAeVq18fCADKQP4AyATIChUrXx8Ih4gAykD4AJ8IgogFSAXVq0gAykD2AIgFSAWVK18fHwiEyADKQPgAXwiFiATVK18IBYgIiAnVq0gAykD+AEgFyAiVq18fHwiFyAWVK18IAogE1atIAMpA+gCIAogHlStfHx8IhUgAykD0AF8IgogAykDyAEgFyAXIAMpA8ABfCITVq18IBMgDyAUVK0gAykDuAEgFCAkVK18fHwiFCATVK18fCIXIAMpAwB8IhMgF1StfCATIAMpAxggFCAUIAMpAxB8IhZWrXwgFiAOIBJWrSADKQN4IA4gD1StfHx8Ig4gFlStfHwiDyATVK18IAogF1atIAMpA9gBIAogFVStfHx8IhYgAykDsAR8IhQgAykDqAQgDyADKQOgBHwiCiAPVK18IAogCiADKQOYBCADKQOIBCASICBWrXwiEiADKQOQBHwiDyASVK18IA8gDiAPfCIOVq18fCIPVq18fCISIAMpAyB8IhcgElStfCAXIBcgAykDOCAPIA8gAykDMHwiE1atfCATIBMgAykDSCAOIA4gAykDQHwiClatfCAKIAMpA1ggAykDUCIPICB8IA9UrXx8IhkgClStfHwiClatfHwiDlatfCASIBRUrSADKQO4BCAUIBZUrXx8fCITQqnAxomuzpOyMFYNAAJAIBNCqcDGia7Ok7IwUQRAIA5C3bCFjOi2kai4f1YNAiAOQt2whYzotpGouH9RDQFCqcDGia7O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kai4f1YNAiAVQt2whYzotpGouH9RDQFCqcDGia7Ok7IwIRYLIBUhGSAUIQ0MAgsgFEKNlcfDltLawJd/Vg0AQt2whYzotpGouH8hGSAUQo2Vx8OW0trAl39SBEBCqcDGia7Ok7IwIRYgFCENDAILQo2Vx8OW0trAl38hDSAoQsf688PtgqOQPFoNAEKpwMaJrs6TsjAhFgwBCyAUQvPquLzpraW/6AB8IhkgKELH+vPD7YKjkDxUrSIYfSENIBVCo8/685fJ7tfHAHwiJyAUQo2Vx8OW0trAl39UIBggGVZyrSIUfSEZIBYgFULdsIWM6LaRqLh/VCAUICdWcq19QqnAxomuzpOyMH0hFiAoQsf688PtgqOQPH0hKAsgAUIANwPgAiABQgA3AyAgASAONwMYIAEgETcDECABIBc3AwggASAkNwMAIAFCnZu8rNzx0K5TNwN4IAFCvZacro/lurwKNwNwIAFCrIzlw/ftqLfmADcDaCABQq++n9CZ+J2FDjcDYCABIBM3A1ggASASNwNQIAEgEDcDSCABIAs3A0AgAUH4AmpCADcDACABQfACakIANwMAIAFB6AJqQgA3AwAgAUEoakIANwMAIAFBMGpCADcDACABQThqQgA3AwAgAUG4AWpCADcDACABQbABakIANwMAIAFBqAFqQgA3AwAgAUGgAWpCADcDACABQZgBakIANwMAIAFBkAFqQgA3AwAgAUGIAWpCADcDACABQgA3A4ABIAEgGjcD2AEgASAbNwPQASABIAw3A8gBIAEgDzcDwAEgAUIANwPgASABQegBakIANwMAIAFB8AFqQgA3AwAgAUH4AWpCADcDACABICg3A5gCIAEgDTcDkAIgASAZNwOIAiABIBY3A4ACIAFB2AJqQgA3AwAgAUHQAmpCADcDACABQcgCakIANwMAIAFBwAJqQgA3AwAgAUG4AmpCADcDACABQbACakIANwMAIAFBqAJqQgA3AwAgAUIANwOgAgwDCyAFIAc2AswyIAUgATYCyDIgBSAGNgLEMgwECyAFIAY2AswyIAUgATYCyDIgBSACNgLEMgwDC0EIQYADEP8EAAtBDCECAkACfyABQeACakHYw8IAQSAQ8QMEQEELIQRBDAwBCyABQcACakHYw8IAQSAQ8QMEQEEKIQRBCwwBCyABQaACakHYw8IAQSAQ8QMEQEEJIQRBCgwBCyABQYACakHYw8IAQSAQ8QMEQEEIIQRBCQwBCyABQeABakHYw8IAQSAQ8QMEQEEHIQRBCAwBCyABQcABakHYw8IAQSAQ8QMEQEEGIQRBBwwBCyABQaABakHYw8IAQSAQ8QMEQEEFIQRBBgwBCyABQYABakHYw8IAQSAQ8QMEQEEEIQRBBQwBCyABQeAAakHYw8IAQSAQ8QMEQEEDIQRBBAwBCyABQUBrQdjDwgBBIBDxAwRAQQIhBEEDDAELIAFBIGpB2MPCAEEgEPEDBEBBASEEQQIMAQsgAUHYw8IAQSAQ8QMEQEEAIQRBAQwBC0HRzsUALQAAGkEgQQgQ1gQiAkUNASACQgA3AwAgAkEYakIANwMAIAJBEGpCADcDACACQQhqQgA3AwAgAUGAAxDfBEF/IQQgAiEBQQEhAkEBCyEDIAAgBDYCDCAAIAM2AgggACABNgIEIAAgAjYCACAFQdAyaiQADwtBCEEgEP8EAAtBCEGAAxD/BAALQYCLwABBKyAFQcQyakHwisAAQaSNwAAQygMAC4ezAQIHfxN+IwBBsDFrIgMkACADIAI2AswrIANBDDYCyCsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAJBDEYEQCADQdArahAhIANBgCtqIAMpA/AtIgpCAEKJ9auctYu/lnNCABDJAyADQfAqaiADKQOAKyINQgBCAEKJx5mkrvCB6Yd/EMkDIANB4CpqIAMpA/gqIgtCAELH+vPD7YKjkDxCABDJAyADQdAqaiALQgBCjZXHw5bS2sCXf0IAEMkDIANB8ClqIAtCAELdsIWM6LaRqLh/QgAQyQMgA0GQKWogC0IAQqnAxomuzpOyMEIAEMkDIANBkCtqIApCAEL7g5SinaLG87V/QgAQyQMgA0HAKmogAykD0CoiDyADKQOIK3wiEiADKQPoKiANIAMpA+AqIgt8IAtUrXx8Ig0gAykDkCt8Ig5CAEIAQonHmaSu8IHph38QyQMgA0GwKmogAykDyCoiC0IAQsf688PtgqOQPEIAEMkDIANBoCpqIAtCAEKNlcfDltLawJd/QgAQyQMgA0GQKmogC0IAQt2whYzotpGouH9CABDJAyADQYAqaiALQgBCqcDGia7Ok7IwQgAQyQMgA0GgK2ogCkIAQvb/hdLw38fVxwBCABDJAyADQeApaiADKQOgKiIRIAMpA5grIA0gDlatfCIMIA0gElStIAMpA9gqIA8gElatfHwiDyADKQPwKXwiFHwiF3wiEiADKQO4KiADKQOwKiILIA58IAtUrXx8Ig0gAykDoCt8Ig5CAEIAQonHmaSu8IHph38QyQMgA0HQKWogAykD6CkiC0IAQsf688PtgqOQPEIAEMkDIANBwClqIAtCAEKNlcfDltLawJd/QgAQyQMgA0GwKWogC0IAQt2whYzotpGouH9CABDJAyADQaApaiALQgBCqcDGia7Ok7IwQgAQyQMgA0GwK2ogCkIAQp/q4NWc7qfsBkIAEMkDIANBgClqIAMpA8ApIhAgDCAXVq0iDCADKQP4KSAPIBRWrXwiFCADKQOQKXwiF3wiCyADKQOQKnwiDyANIBJUrSADKQOoKiARIBJWrXx8fCISIAMpA6grIA0gDlatfHwiE3wiDSADKQPYKSADKQPQKSIKIA58IApUrXx8Ig4gAykDsCt8IhFCAEIAQonHmaSu8IHph38QyQMgA0HwKGogAykDiCkiCkIAQsf688PtgqOQPEIAEMkDIANB4ChqIApCAEKNlcfDltLawJd/QgAQyQMgA0HQKGogCkIAQt2whYzotpGouH9CABDJAyADQcAoaiAKQgBCqcDGia7Ok7IwQgAQyQMCQCADKQPIKCADKQOoKSADKQOIKiADKQOAKiIWIAMpA5gpIBQgF1atfHwiCiAWVK18IAogCiALIAxUrXwiDFatfCAMIAwgDyASVq0gAykDmCogCyAPVq18fHwiClatfCIPIAMpA6ApfCILIA9UrXwgCyALIAogCiASIBNWrXwiElatfCIKVq18IAogCiADKQO4KSASIBIgAykDsCl8IgtWrXwgCyALIA0gDlatIAMpA8gpIA0gEFStfHx8IhJWrXx8IgtWrXwiDSADKQPAKHwiCiANVK18IAogCyALIBIgAykDuCsgDiARVq18fCIOIBJUrXwiC1atfCISIApUrXwgEiADKQPYKCALIAsgAykD0Ch8Ig1WrXwgDSANIAMpA+goIA4gAykD4CgiC3wiCiALVK18IAogAykD+CggAykD8CgiCyARfCALVK18fCIRIApUrXx8IgpWrXx8IhQgElStfCIXQqnAxomuzpOyMFQEQCAKIRIMAQsCQCAU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4AgiD3wgD1StfHwiFCANVK18fCINIAlUrXx8IgkgC1StfHwiCyAOVK18fCIMVq18IAogElatIAIpA9gJIAogGVStfHx8IQ4gA0EIayIDQXhHDQALAkACQCAOQprN/8ujvcSAGlYNACAOQprN/8ujvcSAGlIEQCANIRUgCSEXIAshGCAMIRkMAgsgDELX2a6a5PbpjcsAVg0AAkAgDELX2a6a5PbpjcsAUgRAIA0hFSAJIRcgCyEYIAwhGQwBCyALQr+llJzP8NK75ABWDQFC19mumuT26Y3LACEZIAtCv6WUnM/w0rvkAFIEQCANIRUgCSEXIAshGAwBCyAJQqTsw7WP1LSY5wBWDQFCv6WUnM/w0rvkACEYIAlCpOzDtY/UtJjnAFIEQCANIRUgCSEXDAELIA1C///Piuv//9UeVg0BQqTsw7WP1LSY5wAhFyANQv//z4rr///VHlIEQCANIRUMAQtC///Piuv//9UeIRUgFEKq1f7///+//7l/Vg0BC0Kazf/Lo73EgBohDgwBCyANQv//z4rr///VHn0iCiAUQqvV/v///7//uX9UrSIPfSEVIAlCpOzDtY/UtJjnAH0iEiANQv//z4rr///VHlQgCiAPVHKtIgp9IRcgC0K/pZScz/DSu+QAfSIPIAlCpOzDtY/UtJjnAFQgCiASVnKtIgp9IRggDELX2a6a5PbpjcsAfSIJIAtCv6WUnM/w0rvkAFQgCiAPVnKtIgp9IRkgDiAMQtfZrprk9umNywBUIAkgClRyrX1Cms3/y6O9xIAafSEOIBRC1aqBgICAwIDGAHwhFAsgAkH4I2oiBiACQZAhaiACQeAgahBMAn8CQAJAAkACQAJAAkAgAigC+CNBAUcEQCACQeghaiACQagkaikDADcDACACQeAhaiACQaAkaiIBKQMANwMAIAJB2CFqIAJBmCRqIgMpAwA3AwAgAkHQIWogAkGQJGoiBykDADcDACACQcghaiACQYgkaiIEKQMANwMAIAIgAikDgCQ3A8AhIAFCADcDACADQgA3AwAgB0IANwMAIARCADcDACACQYAkakIANwMAIAJCADcD+CMCQCACQcAhaiIBIAZBMBDxA0UNACABEPECQf8BcUECRg0AQSghAyACKQPgHSEWIAIpA+gdIRogAikD8B0hGyACKQP4HSEcIAIpA4AeIR0gAikDiB4hHkIAIRFCACEMQgAhC0IAIQlCACENQgAhEANAIAJBsAdqIAJBwCFqIANqKQMAIgpCACAeQgAQyQMgAkHAB2ogCkIAIB1CABDJAyACQdAHaiAKQgAgHEIAEMkDIAJB4AdqIApCACAbQgAQyQMgAkHwB2ogCkIAIBpCABDJAyACQYAIaiAKQgAgFkIAEMkDIAJBoAdqIAIpA7AHIhIgEHwiD0IAQgBC/f/z/8////mJfxDJAyACQZAHaiACKQOoByIKQgBCq9X+////v/+5f0IAEMkDIAJBgAdqIApCAEL//8+K6///1R5CABDJAyACQfAGaiAKQgBCpOzDtY/UtJjnAEIAEMkDIAJB4AZqIApCAEK/pZScz/DSu+QAQgAQyQMgAkHQBmogCkIAQtfZrprk9umNywBCABDJAyACQcAGaiAKQgBCms3/y6O9xIAaQgAQyQMgAikDyAYgESACKQOACCIRfCIKIAIpA/gHIAIpA/AHIhMgDHwiDCATVK18IAwgAikD6AcgAikD4AciEyALfCILIBNUrXwgCyALIAIpA9gHIAIpA9AHIhMgCXwiCSATVK18IAkgCSACKQPIByACKQPAByITIA18Ig0gE1StfCANIAIpA7gHIA8gElStfHwiECANVK18fCIJVq18fCILVq18fCINIAxUrXx8IhIgAikDwAZ8IgwgElStfCAMIAwgAikD2AYgDSACKQPQBnwiEyANVK18IBMgAikD6AYgCyALIAIpA+AGfCILVq18IAsgAikD+AYgCSAJIAIpA/AGfCIJVq18IAkgAikDiAcgECACKQOAByIQfCINIBBUrXwgDSACKQOYByAPIAIpA5AHIg98IA9UrXx8IhAgDVStfHwiDSAJVK18fCIJIAtUrXx8IgsgE1StfHwiDFatfCAKIBJWrSACKQOICCAKIBFUrXx8fCERIANBCGsiA0F4Rw0ACyARQprN/8ujvcSAGlYNBiARQprN/8ujvcSAGlENBSANIQogCSETIAshDyAMIRIMBwsgAkHgJGogAkHAIWoQoQJBKCEDIAIpA+AkIRYgAikD6CQhGiACKQPwJCEbIAIpA/gkIRwgAikDgCUhHSACKQOIJSEeQgAhEUIAIQxCACELQgAhCUIAIQ1CACEQA0AgAkHAAmogAkHgJGogA2opAwAiCkIAIB5CABDJAyACQdACaiAKQgAgHUIAEMkDIAJB4AJqIApCACAcQgAQyQMgAkHwAmogCkIAIBtCABDJAyACQYADaiAKQgAgGkIAEMkDIAJBkANqIApCACAWQgAQyQMgAkGwAmogAikDwAIiEiAQfCIPQgBCAEL9//P/z///+Yl/EMkDIAJBoAJqIAIpA7gCIgpCAEKr1f7///+//7l/QgAQyQMgAkGQAmogCkIAQv//z4rr///VHkIAEMkDIAJBgAJqIApCAEKk7MO1j9S0mOcAQgAQyQMgAkHwAWogCkIAQr+llJzP8NK75ABCABDJAyACQeABaiAKQgBC19mumuT26Y3LAEIAEMkDIAJB0AFqIApCAEKazf/Lo73EgBpCABDJAyACKQPYASARIAIpA5ADIhF8IgogAikDiAMgAikDgAMiEyAMfCIMIBNUrXwgDCACKQP4AiACKQPwAiITIAt8IgsgE1StfCALIAsgAikD6AIgAikD4AIiEyAJfCIJIBNUrXwgCSAJIAIpA9gCIAIpA9ACIhMgDXwiDSATVK18IA0gAikDyAIgDyASVK18fCIQIA1UrXx8IglWrXx8IgtWrXx8Ig0gDFStfHwiEiACKQPQAXwiDCASVK18IAwgDCACKQPoASANIAIpA+ABfCITIA1UrXwgEyACKQP4ASALIAsgAikD8AF8IgtWrXwgCyACKQOIAiAJIAkgAikDgAJ8IglWrXwgCSACKQOYAiAQIAIpA5ACIhB8Ig0gEFStfCANIAIpA6gCIA8gAikDoAIiD3wgD1StfHwiECANVK18fCINIAlUrXx8IgkgC1StfHwiCyATVK18fCIMVq18IAogElatIAIpA5gDIAogEVStfHx8IREgA0EIayIDQXhHDQALIBFCms3/y6O9xIAaWA0BDAILIAIgAikDiCQ3A+gkIAIgAikDgCQ3A+AkQYSdwABBKyACQeAkakH4q8AAQZiswAAQygMACyARQprN/8ujvcSAGlIEQCANIQogCSETIAshDyAMIRIMAgsgDELX2a6a5PbpjcsAVg0AIAxC19mumuT26Y3LAFIEQCANIQogCSETIAshDyAMIRJCms3/y6O9xIAaIREMAgsgC0K/pZScz/DSu+QAVg0AQtfZrprk9umNywAhEiALQr+llJzP8NK75ABSBEAgDSEKIAkhEyALIQ9Cms3/y6O9xIAaIREMAgsg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mOcAfSIWIA1C///Piuv//9UeVCAPIBJUcq0iD30hEyALQr+llJzP8NK75AB9Ig0gCUKk7MO1j9S0mOcAVCAPIBZWcq0iCX0hDyAMQtfZrprk9umNywB9IhYgC0K/pZScz/DSu+QAVCAJIA1Wcq0iCX0hEiARIAxC19mumuT26Y3LAFQgCSAWVnKtfUKazf/Lo73EgBp9IREgEELVqoGAgIDAgMYAfCEQCyACIBA3A6AkIAIgCjcDmCQgAiATNwOQJCACIA83A4gkIAIgEjcDgCQgAiARNwP4IyACQeAkaiACQfgjakEwEPEDBEBB7KrAAEEoQZSrwAAQ/gMACyACQZgiaiACQagjaikDADcDACACQZAiaiACQaAjaikDADcDACACQYgiaiACQZgjaikDADcDACACQYAiaiACQZAjaikDADcDACACQfghaiACQYgjaikDADcDACACIAIpA4AjNwPwIUEACyEBQSghAyACKQPAHiEWIAIpA8geIRogAikD0B4hGyACKQPYHiEcIAIpA+AeIR0gAikD6B4hHkIAIRFCACEMQgAhC0IAIQlCACENQgAhEANAIAJB8ABqIAJBkB5qIANqKQMAIgpCACAeQgAQyQMgAkGAAWogCkIAIB1CABDJAyACQZABaiAKQgAgHEIAEMkDIAJBoAFqIApCACAbQgAQyQMgAkGwAWogCkIAIBpCABDJAyACQcABaiAKQgAgFkIAEMkDIAJB4ABqIAIpA3AiEiAQfCIPQgBCAEL9//P/z///+Yl/EMkDIAJB0ABqIAIpA2giCkIAQqvV/v///7//uX9CABDJAyACQUBrIApCAEL//8+K6///1R5CABDJAyACQTBqIApCAEKk7MO1j9S0mOcAQgAQyQMgAkEgaiAKQgBCv6WUnM/w0rvkAEIAEMkDIAJBEGogCkIAQtfZrprk9umNywBCABDJAyACIApCAEKazf/Lo73EgBpCABDJAyACKQMIIBEgAikDwAEiEXwiCiACKQO4ASACKQOwASITIAx8IgwgE1StfCAMIAIpA6gBIAIpA6ABIhMgC3wiCyATVK18IAsgCyACKQOYASACKQOQASITIAl8IgkgE1StfCAJIAkgAikDiAEgAikDgAEiEyANfCINIBNUrXwgDSACKQN4IA8gElStfHwiECANVK18fCIJVq18fCILVq18fCIN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CEEYaikDADcDACAFQRBqIAhBEGopAwA3AwAgBUEIaiAIQQhqKQMANwMAIAUgCCkDADcDACAFQSBqIQUgAUEMaiEBIAlBAWsiCQ0ACwsgCEGAgICAeDYCqAYgCEECNgIIIAggAjYCBCAIIBI2AgAgCCAIQagGajYCDCAIQZAHaiEJIwBB0AJrIgEkACABQYACaiAIIAgoAgwQgAICQAJAIAEtAMACIgVBA0YNACABQfgBaiICIAFBuAJqKQMANwMAIAFB8AFqIhAgAUGwAmopAwA3AwAgAUHoAWoiCiABQagCaikDADcDACABQeABaiILIAFBoAJqKQMANwMAIAFB2AFqIg0gAUGYAmopAwA3AwAgAUHQAWoiDyABQZACaikDADcDACABQcgBaiIMIAFBiAJqKQMANwMAIAEgASkDgAI3A8ABIAEgASgAwQI2AnggASABQcQCaigAADYAeyAFQQJGDQAgAUHYAGogAikDADcDACABQdAAaiAQKQMANwMAIAFByABqIAopAwA3AwAgAUFAayALKQMANwMAIAFBOGogDSkDADcDACABQTBqIA8pAwA3AwAgAUEoaiAMKQMANwMAIAEgASkDwAE3AyAgASABKAJ4NgIYIAEgASgAezYAGwJAIAgoAgwoAgBBgICAgHhHDQAgCCgCBEUNACAIKAIIRQ0gC0HRzsUALQAAGkGgAkEIENYEIgJFDSAgAiABKQMgNwMAIAIgBToAQCACIAEoAhg2AEEgAkHEAGogASgAGzYAACACQThqIAFB2ABqKQMANwMAIAJBMGogAUHQAGopAwA3AwAgAkEoaiABQcgAaikDADcDACACQSBqIAFBQGspAwA3AwAgAkEYaiABQThqKQMANwMAIAJBEGogAUEwaikDADcDACACQQhqIAFBKGopAwA3AwAgAUEBNgIUIAEgAjYCECABQQQ2AgwgAUHoAGogCEEIaikCADcDACABIAgpAgA3A2AgAUGAAmogAUHgAGogASgCbBCAAgJAIAEtAMACIgVBA0YNAEGJASEKIAFBwQJqIg1BA2ohD0EBIRADQCABQfgBaiILIAFBuAJqKQMANwMAIAFB8AFqIgwgAUGwAmopAwA3AwAgAUHoAWoiESABQagCaikDADcDACABQeABaiIOIAFBoAJqKQMANwMAIAFB2AFqIhMgAUGYAmopAwA3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P0sgAkEFdCIFQfj///8HS3INEwJ/IAVFBEBBCCEQQQAMAQtB0c7FAC0AABpBCCEJIAVBCBDWBCIQRQ0UIAILIRggAgRAIBAhBSACIQkDQCMAQRBrIg0kAAJAAkACQAJAIAEoAghFBEBB0c7FAC0AABpBASESQQFBARDWBCIKRQ0DIApBADoAACAIIApBARCJAQwBCyANQQRqIAFBCBCwAiANKAIIIQoCQCANKAIMIg9BAkkNACAKIA9qIQxBACESIA9BAXYiEUEBRwRAIA9BAWshCyARQf7///8HcSEOA0AgCiALaiIRLQAAIRMgESAKIBJqIhEtAAA6AAAgESATOgAAIAwgEkF+c2oiEy0AACEUIBMgEUEBaiIRLQAAOgAAIBEgFDoAACALQQJrIQsgDiASQQJqIhJHDQALCyAPQQJxRQ0AIAogEmoiCy0AACERIAsgDCASQX9zaiISLQAAOgAAIBIgEToAAAsgDSgCBCESIAggCiAPEIkBIBJFDQELIAogEhDfBAsgDUEQaiQADAELQQFBARD/BAALIAVBGGogCEEYaikDADcDACAFQRBqIAhBEGopAwA3AwAgBUEIaiAIQQhqKQMANwMAIAUgCCkDADcDACAFQSBqIQUgAUEMaiEBIAlBAWsiCQ0ACwsgCEGAgICAeDYCqAYgCEECNgIIIAggAjYCBCAIIBA2AgAgCCAIQagGajYCDCAIQZAHaiEJIwBB0AJrIgEkACABQYACaiAIIAgoAgwQ/gECQAJAIAEtAMACIgVBA0YNACABQfgBaiICIAFBuAJqKQMANwMAIAFB8AFqIhIgAUGwAmopAwA3AwAgAUHoAWoiCiABQagCaikDADcDACABQeABaiILIAFBoAJqKQMANwMAIAFB2AFqIg0gAUGYAmopAwA3AwAgAUHQAWoiDyABQZACaikDADcDACABQcgBaiIMIAFBiAJqKQMANwMAIAEgASkDgAI3A8ABIAEgASgAwQI2AnggASABQcQCaigAADYAeyAFQQJGDQAgAUHYAGogAikDADcDACABQdAAaiASKQMANwMAIAFByABqIAopAwA3AwAgAUFAayALKQMANwMAIAFBOGogDSkDADcDACABQTBqIA8pAwA3AwAgAUEoaiAMKQMANwMAIAEgASkDwAE3AyAgASABKAJ4NgIYIAEgASgAezYAGwJAIAgoAgwoAgBBgICAgHhHDQAgCCgCBEUNACAIKAIIRQ0fC0HRzsUALQAAGkGgAkEIENYEIgJFDR8gAiABKQMgNwMAIAIgBToAQCACIAEoAhg2AEEgAkHEAGogASgAGzYAACACQThqIAFB2ABqKQMANwMAIAJBMGogAUHQAGopAwA3AwAgAkEoaiABQcgAaikDADcDACACQSBqIAFBQGspAwA3AwAgAkEYaiABQThqKQMANwMAIAJBEGogAUEwaikDADcDACACQQhqIAFBKGopAwA3AwAgAUEBNgIUIAEgAjYCECABQQQ2AgwgAUHoAGogCEEIaikCADcDACABIAgpAgA3A2AgAUGAAmogAUHgAGogASgCbBD+AQJAIAEtAMACIgVBA0YNAEGJASEKIAFBwQJqIg1BA2ohD0EBIRIDQCABQfgBaiILIAFBuAJqKQMANwMAIAFB8AFqIgwgAUGwAmopAwA3AwAgAUHoAWoiESABQagCaikDADcDACABQeABaiIOIAFBoAJqKQMANwMAIAFB2AFqIhMgAUGYAmopAwA3AwAgAUHQAWoiFCABQZACaikDADcDACABQcgBaiIWIAFBiAJqKQMANwMAIAEgASkDgAI3A8ABIAEgDSgAADYCuAEgASAPKAAANgC7ASAFQQJGDQEgAUGwAWoiFyALKQMANwMAIAFBqAFqIgsgDCkDADcDACABQaABaiIMIBEpAwA3AwAgAUGYAWoiESAOKQMANwMAIAFBkAFqIg4gEykDADcDACABQYgBaiITIBQpAwA3AwAgAUGAAWoiFCAWKQMANwMAIAEgASkDwAE3A3ggASABKAK4ATYCcCABIAEoALsBNgBzIAEoAgwgEkYEQAJAIAEoAmwoAgBBgICAgHhHDQAgASgCZEUNACABKAJoRQ0iCyABQQxqIBJBAUEIQcgAEIgDIAEoAhAhAgsgFCkDACEqIBMpAwAhLCAOKQMAISsgESkDACEtIAwpAwAhLiALKQMAIS8gFykDACEwIAEpA3ghMSACIApqIgtBAWsgBToAACALQcEAayIFIDE3AwAgCyABKAJwNgAAIAtBA2ogASgAczYAACAFQThqIDA3AwAgBUEwaiAvNwMAIAVBKGogLjcDACAFQSBqIC03AwAgBUEYaiArNwMAIAVBEGogLDcDACAFQQhqICo3AwAgASASQQFq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CikDADcDACABQUBrIAspAwA3AwAgAUE4aiANKQMANwMAIAFBMGogDykDADcDACABQShqIAwpAwA3AwAgASABKQPAATcDICABIAEoAng2AhggASABKAB7NgAbAkAgCCgCDCgCAEGAgICAeEcNACAIKAIERQ0AIAgoAghFDR4LQdHOxQAtAAAaQaACQQgQ1gQiAkUNHiACIAEpAyA3AwAgAiAFOgBAIAIgASgCGDYAQSACQcQAaiABKAAbNgAAIAJBOGogAUHYAGopAwA3AwAgAkEwaiABQdAAaikDADcDACACQShqIAFByABqKQMANwMAIAJBIGogAUFAaykDADcDACACQRhqIAFBOGopAwA3AwAgAkEQaiABQTBqKQMANwMAIAJBCGogAUEoaikDADcDACABQQE2AhQgASACNgIQIAFBBDYCDCABQegAaiAIQQhqKQIANwMAIAEgCCkCADcDYCABQYACaiABQeAAaiABKAJsEP0BAkAgAS0AwAIiBUEDRg0AQYkBIQogAUHBAmoiDUEDaiEPQQEhEgNAIAFB+AFqIgsgAUG4AmopAwA3AwAgAUHwAWoiDCABQbACaikDADcDACABQegBaiIRIAFBqAJqKQMANwMAIAFB4AFqIg4gAUGgAmopAwA3AwAgAUHYAWoiEyABQZgCaikDADcDACABQdABaiIUIAFBkAJqKQMANwMAIAFByAFqIhYgAUGIAmopAwA3AwAgASABKQOAAjcDwAEgASANKAAANgK4ASABIA8oAAA2ALsBIAVBAkYNASABQbABaiIXIAspAwA3AwAgAUGoAWoiCyAMKQMANwMAIAFBoAFqIgwgESkDADcDACABQZgBaiIRIA4pAwA3AwAgAUGQAWoiDiATKQMANwMAIAFBiAFqIhMgFCkDADcDACABQYABaiIUIBYpAwA3AwAgASABKQPAATcDeCABIAEoArgBNgJwIAEgASgAuwE2AHMgASgCDCASRgRAAkAgASgCbCgCAEGAgICAeEcNACABKAJkRQ0AIAEoAmhFDSELIAFBDGogEkEBQQhByAAQiAMgASgCECECCyAUKQMAISogEykDACEsIA4pAwAhKyARKQMAIS0gDCkDACEuIAspAwAhLyAXKQMAITAgASkDeCExIAIgCmoiC0EBayAFOgAAIAtBwQBrIgUgMTcDACALIAEoAnA2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DCABQYgCaikDADcDACABIAEpA4ACNwPAASABIAEoAMECNgJ4IAEgAUHEAmooAAA2AHsgBUECRg0AIAFB2ABqIAIpAwA3AwAgAUHQAGogEikDADcDACABQcgAaiAKKQMANwMAIAFBQGsgCykDADcDACABQThqIA0pAwA3AwAgAUEwaiAPKQMANwMAIAFBKGogDCkDADcDACABIAEpA8ABNwMgIAEgASgCeDYCGCABIAEoAHs2ABsCQCAIKAIMKAIAQYCAgIB4Rw0AIAgoAgRFDQAgCCgCCEUNHQtB0c7FAC0AABpBoAJBCBDWBCICRQ0dIAIgASkDIDcDACACIAU6AEAgAiABKAIYNgBBIAJBxABqIAEoABs2AAAgAkE4aiABQdgAaikDADcDACACQTBqIAFB0ABqKQMANwMAIAJBKGogAUHIAGopAwA3AwAgAkEgaiABQUBrKQMANwMAIAJBGGogAUE4aikDADcDACACQRBqIAFBMGopAwA3AwAgAkEIaiABQShqKQMANwMAIAFBATYCFCABIAI2AhAgAUEENgIMIAFB6ABqIAhBCGopAgA3AwAgASAIKQIANwNgIAFBgAJqIAFB4ABqIAEoAmwQ/wECQCABLQDAAiIFQQNGDQBBiQEhCiABQcECaiINQQNqIQ9BASESA0AgAUH4AWoiCyABQbgCaikDADcDACABQfABaiIMIAFBsAJqKQMANwMAIAFB6AFqIhEgAUGoAmopAwA3AwAgAUHgAWoiDiABQaACaikDADcDACABQdgBaiITIAFBmAJqKQMANwMAIAFB0AFqIhQgAUGQAmopAwA3AwAgAUHIAWoiFiABQYgCaikDADcDACABIAEpA4ACNwPAASABIA0oAAA2ArgBIAEgDygAADYAuwEgBUECRg0BIAFBsAFqIhcgCykDADcDACABQagBaiILIAwpAwA3AwAgAUGgAWoiDCARKQMANwMAIAFBmAFqIhEgDikDADcDACABQZABaiIOIBMpAwA3AwAgAUGIAWoiEyAUKQMANwMAIAFBgAFqIhQgFikDADcDACABIAEpA8ABNwN4IAEgASgCuAE2AnAgASABKAC7ATYAcyABKAIMIBJGBEACQCABKAJsKAIAQYCAgIB4Rw0AIAEoAmRFDQAgASgCaEUNIAsgAUEMaiASQQFBCEHIABCIAyABKAIQIQIL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ASABKQPIBjcC7AQgAyANIBkQlwIgAUHIBmoiCiABQegEaiADEPQBIAMgCiALEIEDIAEtAOQFIQMgASgC2AUiCgRAIAEoAtwFIApBAnQQ3wQLIAEoAsgGIgoEQCABKALMBiAKQQJ0EN8ECwJAIANBAUcEQEHRzsUALQAAGkEzIQZBM0EBENYEIgNFDR8gA0EvakGH4sIAKAAANgAAIANBKGpBgOLCACkAADcAACADQSBqQfjhwgApAAA3AAAgA0EYakHw4cIAKQAANwAAIANBEGpB6OHCACkAADcAACADQQhqQeDhwgApAAA3AAAgA0HY4cIAKQAANwAADAELAkAgAS0A9ARBAkYEQCABLQCEBUEBRw0BC0HRzsUALQAAGkEnIQZBJ0EBENYEIgNFDSAgA0EfakGq4sIAKQAANwAAIANBGGpBo+LCACkAADcAACADQRBqQZviwgApAAA3AAAgA0EIakGT4sIAKQAANwAAIANBi+LCACkAADcAAAwBCyAMQQJ0IQsCQCAMRQRAQQQhCgwBC0HRzsUALQAAGiALQQQQ1gQiCkUNIQsgCwRAIAogCSAL/AoAAAsgASAGOgDkBSABIAw2AuAFIAEgCjYC3AUgASAMNgLYBSABQdgGaiEGIAFB2AVqIQ1BACEKQQAhESMAQfABayIDJAACQAJAAkACQAJAIAJB6NHBAEEgEPEDRQRAIAJBIGoiDkHo0cEAQSAQ8QNFDQELAkACQCANLQAMIhpBAUcEQCADQRBqQgA3AwAgA0EYakIANwMAIANBIGpCADcDACADQShqQgA3AwAgA0EwakIANwMAIANBOGpCADcDACADQUBrQgA3AwAgA0IANwMIIAMgAi0AQCIOOgBIIANBiAFqIAJBOGopAwA3AwAgA0GAAWogAkEwaikDADcDACADQfgAaiACQShqKQMANwMAIANB2ABqIAJBCGopAwA3AwAgA0HgAGogAkEQaikDADcDACADQegAaiACQRhqKQMANwMAIAMgDjoAkAEgAyACKQMgNwNwIAMgAikDADcDUCANKAIEIRsgDSgCACEcQQQhDiAaDgMBAgECCyAGQgA3AwAgBkEIakIANwMAIAZBEGpCADcDACAGQRhqQgA3AwAgBkEgakIANwMAIAZBKGpCADcDACAGQTBqQgA3AwAgBkE4akIANwMADAMLIA0oAggi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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIARBAkYEQCABKAIEIQQgASgCACEFIANBoAtqIAFBCGpB2AD8CgAAIAIEQCABIAJBMGwQ3wQLIANBsAJqIgEgA0GgC2pB2AD8CgAAIANBEGogA0G4AmopAwA3AwAgA0EYaiADQcACaikDADcDACADQSBqIANByAJqKQMANwMAIANBKGogA0HQAmopAwA3AwAgA0E4aiADQeACaikDADcDACADQUBrIANB6AJqKQMANwMAIANByABqIANB8AJqKQMANwMAIANB0ABqIANB+AJqKQMANwMAIANB2ABqIANBgANqKQMANwMAIAMgBDYCBCADIAU2AgAgAyADKQOwAjcDCCADIAMpA9gCNwMwIANB4ABqIAMQGyADQcgBaiADQTBqEBsgAy0AwAFFDQEgAy0AqAJFDQIgARAmAkACQAJAIAMtAMgIIhtBAUYEQCADKQPwBCEiAkAgAykD+AQiI0IAUwRAIANBqAtqQdyawAAoAgA2AgAgA0HUmsAAKQIANwOgC0IAICJ9ISRCACAjICJCAFKtfH0hIkEAIQJBASEEA0AgAygCoAsgBEEBa0YEQCADQaALakHYm8AAEKUDCyADKAKkCyACaiAkPgIAICJCIIYgJEKAgICAEFQhASAiUCEFIAJBBGohAiAiQiCIISIgAyAENgKoCyAEQQFqIQQgJEIgiIQhJCABIAVxRQ0ACyADQdAJaiADQagLaigCADYCACADIAMpA6ALNwPICSADQQA6ANQJDAELICIgI4RQBEAgA0HQCWpBzJrAACkCADcDACADQcSawAApAgA3A8gJDAELIANBqAtqQdyawAAoAgA2AgAgA0HUmsAAKQIANwOgC0EAIQJBASEEA0AgAygCoAsgBEEBa0YEQCADQaALakHYm8AAEKUDCyADKAKkCyACaiAiPgIAICNCIIYgIkKAgICAEFQhASAjUCEFIAJBBGohAiAjQiCIISMgAyAENgKoCyAEQQFqIQQgIkIgiIQhIiABIAVxRQ0ACyADQdAJaiADQagLaigCADYCACADIAMpA6ALNwPICSADQQI6ANQJCyADKALECA0BIAMoAsAIIAMoArwIIQEgA0HIEWpBzJrAACkCADcDACADQcSawAApAgA3A8ARIAFFDQIgAUECdBDfBAwCCyADKAK4CCIBRQRAIANB2AhqQcyawAApAgA3AwAgA0HEmsAAKQIANwPQCAwDCyADQagLakHcmsAAKAIANgIAIANB1JrAACkCADcDoAsgA0GgC2pByJvAABClAyADKAKkCyABNgIAIANB2AhqQQE2AgAgAyADKQOgCzcD0AggA0ECOgDcCAwCCyADQcgRaiADQbwIaiIBQQhqKAIANgIAIANBAjoAzBEgAyABKQIANwPAEQsgA0GoC2oiBEHcmsAAKAIANgIAIANB1JrAACkCADcDoAsgA0GgC2oiBUHIm8AAEKUDIAMoAqQLQQE2AgAgAygCpAshAiADKAKgCyEBIAUgA0HICWogA0HAEWoQwgECQAJAAkACQAJAAkACQCADLQCsCw4CAgABCyADQQI6AIwTIANBATYCiBMgAyACNgKEEyADIAE2AoATIAMoAqALIgFFDQUgAygCpAsgAUECdBDfBAwFCwJ/IAMoAqgLIgRBAUYEQCACKAIAIgQgAygCpAsoAgAiBUYNAyAEIAVLIAQgBUlrDAELIARFIARBAUtrC0H/AXEOAgECAwsgA0EBNgKoFiADIAI2AqQWIAMgATYCoBYgA0HoCGogBCgCADYCACADIAMpAqALIiI3A+AIAn8gIqcgAUsEQCADQYgTaiADQagLaigCADYCACADIAMpAqALNwOAEyADQfAVaiADQYATaiADQaAWaiIBEMoBIAEMAQsgA0EBNgKIEyADIAI2AoQTIAMgATYCgBMgA0HwFWogA0GAE2ogA0HgCGoiARDKASABCyIBKAIAIgIEQCABKAIEIAJBAnQQ3wQLIAMoAvgVRQRAIANBiBNqIANB+BVqKAIANgIAIANBAToAjBMgAyADKQLwFTcDgBMMBAsgA0GIE2ogA0H4FWooAgA2AgAgA0ECOgCMEyADIAMpAvAVNwOAEwwDCyADQYgTakHMmsAAKQIANwMAIANBxJrAACkCADcDgBMgAygCoAsiBARAIAMoAqQLIARBAnQQ3wQLIAFFDQIgAiABQQJ0EN8EDAILIANBATYCqBYgAyACNgKkFiADIAE2AqAWIANB6AhqIANBqAtqKAIANgIAIAMgAykCoAs3A+AIIANB8BVqIANBoBZqIANB4AhqEIcCIAMoAuAIIgEEQCADKALkCCABQQJ0EN8ECyADQYgTaiADQfgVaigCACIBNgIAIAMgAykC8BU3A4ATIANBAkEBIAEbOgCMEwwBCyADQagWaiADQagLaigCADYCACADIAMpAqALNwOgFiADQQE2AugIIAMgAjYC5AggAyABNgLgCCADQfAVaiADQaAWaiADQeAIahCHAiADKALgCCIBBEAgAygC5AggAUECdBDfBAsgA0GIE2ogA0H4FWooAgAiATYCACADIAMpAvAVNwOAEyADIAFFOgCMEwsgA0HQCGogA0GAE2ogA0HAEWoQwgEgAygCgBMiAQRAIAMoAoQTIAFBAnQQ3wQLIAMoAsARIgEEQCADKALEESABQQJ0EN8ECyADKALICSIBRQ0AIAMoAswJIAFBAnQQ3wQLIANB4AhqIgEgA0HgAGogA0HIAWoQJyADLQDACUUNAyADQcgJaiABQegA/AoAACADLQCoCkUNBCADQaALahAmIAMtALgRIgFBAUcNBSADQYATaiIFQcCwwABB4ABBEBDxASADKAKAE0GAgICAeEYNBiADQZgVaiIGIANBiBNqIgEoAgA2AgAgAyADKQKAEzcDkBUgBUGgscAAQeAAQRAQ8QEgAygCgBNBgICAgHhGDQcgA0GoFWoiByABKAIANgIAIAMgAykCgBM3A6AVIAVBgLLAAEHfAEEQEPEBIAMoAoATQYCAgIB4Rg0IIANBuBVqIgggASgCADYCACADIAMpAoATNwOwFSAFQd+ywABB4ABBEBDxASADKAKAE0GAgICAeEYNCSADQcgVaiIJIAEoAgA2AgAgAyADKQKAEzcDwBUgBUG/s8AAQd8AQRAQ8QEgAygCgBNBgICAgHhGDQogA0HYFWoiCiABKAIANgIAIAMgAykCgBM3A9AVIAVBnrTAAEHgAEEQEPEBIAMoAoATQYCAgIB4Rg0LIANB6BVqIgsgASgCADYCACADIAMpAoATNwPgFSAFQf60wABB3wBBEBDxASADKAKAE0GAgICAeEYNDCADQbgKaiIMIAEoAgA2AgAgAyADKQKAEzcDsAogBUHdtcAAQeAAQRAQ8QEgAygCgBNBgICAgHhGDQ0gA0HYCmoiDSABKAIANgIAIAMgAykCgBM3A9AKIAVBvbbAAEHfAEEQEPEBIAMoAoATQYCAgIB4Rg0OIANB+ApqIg8gASgCADYCACADIAMpAoATNwPwCiAFQZy3wABB4ABBEBDxASADKAKAE0GAgICAeEYNDyADQfgVaiIOIAEoAgA2AgAgAyADKQKAEzcD8BUgBUH8t8AAQeAAQRAQ8QEgAygCgBNBgICAgHhGDRAgA0GoFmoiESABKAIANgIAIAMgAykCgBM3A6AWIANBwBFqIgJB3LjAAEHfAEEQEPEBIAMoAsARQYCAgIB4Rg0RIANBjBRqIANByBFqIgQoAgA2AgAgASAGKAIANgIAIANBlBNqIAcoAgA2AgAgA0GgE2ogCCgCADYCACADIAMpAsARNwKEFCADIAMpA5AVNwOAEyADIAMpA6AVNwKMEyADIAMpA7AVNwOYEyADQawTaiAJKAIANgIAIAMgAykDwBU3AqQTIANBuBNqIAooAgA2AgAgAyADKQPQFTcDsBMgA0HEE2ogCygCADYCACADIAMpA+AVNwK8EyADQdATaiAMKAIANgIAIAMgAykDsAo3A8gTIANB3BNqIA0oAgA2AgAgAyADKQPQCjcC1BMgA0HoE2ogDygCADYCACADIAMpA/AKNwPgEyADQfQTaiAOKAIANgIAIAMgAykD8BU3AuwTIANBgBRqIBEoAgA2AgAgAyADKQOgFjcD+BNB0c7FAC0AABoCfwJAQcAEQQgQ1gQiAQRAQQwhESACIAUQ9gIgAUEoaiADQegRaiIFKQMANwMAIAFBIGogA0HgEWoiBikDADcDACABQRhqIANB2BFqIgcpAwA3AwAgAUEQaiADQdARaiIIKQMANwMAIAFBCGogBCkDADcDACABIAMpA8ARNwMAIAIgA0GME2oQ9gIgAUHYAGogBSkDADcDACABQdAAaiAGKQMANwMAIAFByABqIAcpAwA3AwAgAUFAayAIKQMANwMAIAFBOGogBCkDADcDACABIAMpA8ARNwMwIAIgA0GYE2oQ9gIgAUGIAWogBSkDADcDACABQYABaiAGKQMANwMAIAFB+ABqIAcpAwA3AwAgAUHwAGogCCkDADcDACABQegAaiAEKQMANwMAIAEgAykDwBE3A2AgAiADQaQTahD2AiABQbgBaiAFKQMANwMAIAFBsAFqIAYpAwA3AwAgAUGoAWogBykDADcDACABQaABaiAIKQMANwMAIAFBmAFqIAQpAwA3AwAgASADKQPAETcDkAEgAiADQbATahD2AiABQegBaiAFKQMANwMAIAFB4AFqIAYpAwA3AwAgAUHYAWogBykDADcDACABQdABaiAIKQMANwMAIAFByAFqIAQpAwA3AwAgASADKQPAETcDwAEgAiADQbwTahD2AiABQZgCaiAFKQMANwMAIAFBkAJqIAYpAwA3AwAgAUGIAmogBykDADcDACABQYACaiAIKQMANwMAIAFB+AFqIAQpAwA3AwAgASADKQPAETcD8AEgAiADQcgTahD2AiABQcgCaiAFKQMANwMAIAFBwAJqIAYpAwA3AwAgAUG4AmogBykDADcDACABQbACaiAIKQMANwMAIAFBqAJqIAQpAwA3AwAgASADKQPAETcDoAIgAiADQdQTahD2AiABQfgCaiAFKQMANwMAIAFB8AJqIAYpAwA3AwAgAUHoAmogBykDADcDACABQeACaiAIKQMANwMAIAFB2AJqIAQpAwA3AwAgASADKQPAETcD0AIgAiADQeATahD2AiABQagDaiAFKQMANwMAIAFBoANqIAYpAwA3AwAgAUGYA2ogBykDADcDACABQZADaiAIKQMANwMAIAFBiANqIAQpAwA3AwAgASADKQPAETcDgAMgAiADQewTahD2AiABQdgDaiAFKQMANwMAIAFB0ANqIAYpAwA3AwAgAUHIA2ogBykDADcDACABQcADaiAIKQMANwMAIAFBuANqIAQpAwA3AwAgASADKQPAETcDsAMgAiADQfgTahD2AiABQYgEaiAFKQMANwMAIAFBgARqIAYpAwA3AwAgAUH4A2ogBykDADcDACABQfADaiAIKQMANwMAIAFB6ANqIAQpAwA3AwAgASADKQPAETcD4AMgAiADQYQUahD2AiABQbgEaiAFKQMANwMAIAFBsARqIAYpAwA3AwAgAUGoBGogBykDADcDACABQaAEaiAIKQMANwMAIAFBmARqIAQpAwA3AwAgASADKQPAETcDkAQgAUGQBGpB+MPCAEEwEPEDRQ0BQQshD0EMDAILQQhBwARBpK3AABDIBAALIAFB4ANqQfjDwgBBMBDxAwRAQQohD0ELDAELIAFBsANqQfjDwgBBMBDxAwRAQQkhD0EKDAELIAFBgANqQfjDwgBBMBDxAwRAQQghD0EJDAELIAFB0AJqQfjDwgBBMBDxAwRAQQchD0EIDAELIAFBoAJqQfjDwgBBMBDxAwRAQQYh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A0HkEmogGCgCADYCACADIAMpA/AVNwLcEiADQfASaiAEKAIANgIAIAMgAykDoBY3A+gSQdHOxQAtAAAaAn8CQEGABkEIENYEIgQEQCACIANBwBFqEPYCIARBKGogA0GoE2oiBykDADcDACAEQSBqIANBoBNqIggpAwA3AwAgBEEYaiADQZgTaiIJKQMANwMAIARBEGogA0GQE2oiCikDADcDACAEQQhqIAYpAwA3AwAgBCADKQOAEzcDACACIANBzBFqEPYCIARB2ABqIAcpAwA3AwAgBEHQAGogCCkDADcDACAEQcgAaiAJKQMANwMAIARBQGsgCikDADcDACAEQThqIAYpAwA3AwAgBCADKQOAEzcDMCACIANB2BFqEPYCIARBiAFqIAcpAwA3AwAgBEGAAWogCCkDADcDACAEQfgAaiAJKQMANwMAIARB8ABqIAopAwA3AwAgBEHoAGogBikDADcDACAEIAMpA4ATNwNgIAIgA0HkEWoQ9gIgBEG4AWogBykDADcDACAEQbABaiAIKQMANwMAIARBqAFqIAkpAwA3AwAgBEGgAWogCikDADcDACAEQZgBaiAGKQMANwMAIAQgAykDgBM3A5ABIAIgA0HwEWoQ9gIgBEHoAWogBykDADcDACAEQeABaiAIKQMANwMAIARB2AFqIAkpAwA3AwAgBEHQAWogCikDADcDACAEQcgBaiAGKQMANwMAIAQgAykDgBM3A8ABIAIgA0H8EWoQ9gIgBEGYAmogBykDADcDACAEQZACaiAIKQMANwMAIARBiAJqIAkpAwA3AwAgBEGAAmogCikDADcDACAEQfgBaiAGKQMANwMAIAQgAykDgBM3A/ABIAIgA0GIEmoQ9gIgBEHIAmogBykDADcDACAEQcACaiAIKQMANwMAIARBuAJqIAkpAwA3AwAgBEGwAmogCikDADcDACAEQagCaiAGKQMANwMAIAQgAykDgBM3A6ACIAIgA0GUEmoQ9gIgBEH4AmogBykDADcDACAEQfACaiAIKQMANwMAIARB6AJqIAkpAwA3AwAgBEHgAmogCikDADcDACAEQdgCaiAGKQMANwMAIAQgAykDgBM3A9ACIAIgA0GgEmoQ9gIgBEGoA2ogBykDADcDACAEQaADaiAIKQMANwMAIARBmANqIAkpAwA3AwAgBEGQA2ogCikDADcD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QbgWaiIMKQMANwMAQRAhECACQRBqIANBsBZqIg0pAwA3AwAgAkEIaiAJKQMANwMAIAIgAykDoBY3AwAgBiADQYwTahD2AiACQdgAaiAKKQMANwMAIAJB0ABqIAspAwA3AwAgAkHIAGogDCkDADcDACACQUBrIA0pAwA3AwAgAkE4aiAJKQMANwMAIAIgAykDoBY3AzAgBiADQZgTahD2AiACQYgBaiAKKQMANwMAIAJBgAFqIAspAwA3AwAgAkH4AGogDCkDADcDACACQfAAaiANKQMANwMAIAJB6ABqIAkpAwA3AwAgAiADKQOgFjcDYCAGIANBpBNqEPYCIAJBuAFqIAopAwA3AwAgAkGwAWogCykDADcDACACQagBaiAMKQMANwMAIAJBoAFqIA0pAwA3AwAgAkGYAWogCSkDADcDACACIAMpA6AWNwOQASAGIANBsBNqEPYCIAJB6AFqIAopAwA3AwAgAkHgAWogCykDADcDACACQdgBaiAMKQMANwMAIAJB0AFqIA0pAwA3AwAgAkHIAWogCSkDADcDACACIAMpA6AWNwPAASAGIANBvBNqEPYCIAJBmAJqIAopAwA3AwAgAkGQAmogCykDADcDACACQYgCaiAMKQMANwMAIAJBgAJqIA0pAwA3AwAgAkH4AWogCSkDADcDACACIAMpA6AWNwPwASAGIANByBNqEPYCIAJByAJqIAopAwA3AwAgAkHAAmogCykDADcDACACQbgCaiAMKQMANwMAIAJBsAJqIA0pAwA3AwAgAkGoAmogCSkDADcDACACIAMpA6AWNwOgAiAGIANB1BNqEPYCIAJB+AJqIAopAwA3AwAgAkHwAmogCykDADcDACACQegCaiAMKQMANwMAIAJB4AJqIA0pAwA3AwAgAkHYAmogCSkDADcDACACIAMpA6AWNwPQAiAGIANB4BNqEPYCIAJBqANqIAopAwA3AwAgAkGgA2ogCykDADcDACACQZgDaiAMKQMANwMAIAJBkANqIA0pAwA3AwAgAkGIA2ogCSkDADcDACACIAMpA6AWNwOAAyAGIANB7BNqEPYCIAJB2ANqIAopAwA3AwAgAkHQA2ogCykDADcDACACQcgDaiAMKQMANwMAIAJBwANqIA0pAwA3AwAgAkG4A2ogCSkDADcDACACIAMpA6AWNwOwAyAGIANB+BNq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AwAgAyADKQPICTcDgBMgEyAEKQMANwMAIBQgBSkDADcDACAVIAYpAwA3AwAgFiAHKQMANwMAIBcgCCkDADcDACADIAMpA8gJNwOgFiAJIANB0ApqIAoQlgEgASADQeAKaiALEJYBIAIgCSABEEwgAygCoAtBAUYNQSADQegRaiAYKQMANwMAIANB4BFqIAwpAwA3AwAgA0HYEWogDSkDADcDACADQdARaiAPKQMANwMAIANByBFqIA4pAwA3AwAgAyADKQOoCzcDwBEgDCADQaAKaikDADcDACANIANBmApqKQMANwMAIA8gA0GQCmopAwA3AwAgDiADQYgKaikDADcDACADQagLaiIEIANBgApqKQMANwMAIAMgAykD+Ak3A6ALIAogASACELIBIAIgA0HwCmogCkEAEDEgAy0AgAxBAkYNPSALIAJB6AD8CgAAIAMoAtAKIgEEQCADKALUCiABQTBsEN8ECyADKALgCiIBBEAgAygC5AogAUEwbBDfBAsgAygCsAoiAQRAIAMoArQKIAFBMGwQ3wQLIAMoAsAKIgEEQCADKALECiABQTBsEN8ECyADQagLaiADQdgIaikDADcDACADIAMpA9AINwOgCyAAIANBgBNqIANBoAtqEKcBIBtBAUYNPiADKAK8CCIARQ0+IAMoAsAIIABBAnQQ3wQMPgsgAyAENgKIEyADIAE2AoQTIAMgAjYCgBNBhJ3AAEErIANBgBNqQfypwABBjKrAABDKAwALIANBAjYCpAsgA0G8qcAANgKgCyADQgE3AqwLIAMgA0HgAGqtQoCAgICAAoQ3A7ACIAMgA0GwAmo2AqgLIANBoAtqQcypwAAQqAQACyADQQI2AqQLIANBvKnAADYCoAsgA0IBNwKsCyADIANByAFqrUKAgICAgAKENwOwAiADIANBsAJqNgKoCyADQaALakHcqcAAEKgEAAsgA0ECNgKkCyADQbypwAA2AqALIANCATcCrAsgAyADQeAIaq1CgICAgIAChDcDgBMgAyADQYATajYCqAsgA0GgC2pB7KnAABCoBAALIANBAjYCpAsgA0G8qcAANgKgCyADQgE3AqwLIAMgA0HICWqtQoCAgICAAoQ3A4ATIAMgA0GAE2o2AqgLIANBoAtqQaCwwAAQqAQACyADIAE6AKAWIANBAjYChBMgA0G838AANgKA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KQMANwMAIB4gBCkDADcDACAfIAMpAwA3AwAgAiACKQOAlAU3A4CdBSACQbikBWogGSkDADcDACACQbCkBWogGikDADcDACACQaikBWogGykDADcDACACQaCkBWogHCkDADcDACACQZikBWogHSkDADcDACACQZCkBWogHikDADcDACACQYikBWogHykDADcDACACIAIpA4CdBTcDgKQFQQBFBEAgAkGAoAVqIAJBgKMFakHAAfwKAAALIAIgAUGAA2o2AoSOBSACIBU2AoCOBSACQYCXBWoiJiACQYCOBWoiBxC9AyAOICApAwAiRzcDACAUICEpAwAiSDcDACALICIpAwAiSTcDACATICMpAwAiSjcDACANIBgpAwAiSzcDACACQYiRBWoiASACQYiXBWoiJykDADcDACACQZCRBWoiAyACQZCXBWoiKCkDADcDACACQZiRBWoiBCBLNwMAIAJBoJEFaiIVIEo3AwAgAkGokQVqIhYgSTcDACACQbCRBWoiFyBINwMAIAJBuJEFaiIkIEc3AwAgAiACKQOAlwUiRzcDgJQFIAIgRzcDgJEFIAUgJCkDADcDACAJIBcpAwA3AwAgCiAWKQMANwMAIA8gFSkDADcDACAQIAQpAwA3AwAgEiADKQMANwMAIBEgASkDADcDACACIAIpA4CRBTcDgJoFIBkgBSkDADcDACAaIAkpAwA3AwAgGyAKKQMANwMAIBwgDykDADcDACAdIBApAwA3AwAgHiASKQMANwMAIB8gESkDADcDACACIAIpA4CaBTcDgJ0FICYgBxC9AyAOICApAwAiRzcDACAUICEpAwAiSDcDACALICIpAwAiSTcDACATICMpAwAiSjcDACANIBgpAwAiSzcDACABICcpAwA3AwAgAyAoKQMANwMAIAQgSzcDACAVIEo3AwAgFiBJNwMAIBcgSDcDACAkIEc3AwAgAiACKQOAlwUiRzcDgJQFIAIgRzcDgJEFIAUgJCkDADcDACAJIBcpAwA3AwAgCiAWKQMANwMAIA8gFSkDADcDACAQIAQpAwA3AwAgEiADKQMANwMAIBEgASkDADcDACACIAIpA4CRBTcDgJoFIAJB+J0FaiAFKQMANwMAIAJB8J0FaiAJKQMANwMAIAJB6J0FaiAKKQMANwMAIAJB4J0FaiAPKQMANwMAIAJB2J0FaiAQ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IA0pAwA3AwAgHCAOKQMANwMAIB0gECkDADcDACAeIA8pAwA3AwAgAiACKQOAlwU3A4CaBSAmIAgQvQMgFSAfKQMAIkg3AwAgFCAgKQMAIkk3AwAgEyAhKQMAIko3AwAgEiAiKQMAIks3AwAgESAjKQMAIkw3AwAgASAnKQMANwMAIAQgKCkDADcDACADIEw3AwAgCSBLNwMAIBYgSjcDACAXIEk3AwAgJCBINwMAIAIgAikDgJQFIkg3A4CRBSACIEg3A4COBSAFICQpAwA3AwAgByAXKQMANwMAIAwgFikDADcDACANIAkpAwA3AwAgDiADKQMANwMAIBAgBCkDADcDACAPIAEpAwA3AwAgAiACKQOAjgU3A4CXBSACQfiaBWogBSkDADcDACACQfCaBWogBykDADcDACACQeiaBWogDCkDADcDACACQeCaBWogDSkDADcDACACQdiaBWogDikDADcDACACQdCaBWogECkDADcDACACQciaBWogDykDADcDACACIAIpA4CXBTcDwJoFICYgCBC9AyAVIB8pAwAiSDcDACAUICApAwAiSTcDACATICEpAwAiSjcDACASICIpAwAiSzcDACARICMpAwAiTDcDACABICcpAwA3AwAgBCAoKQMANwMAIAMgTDcDACAJIEs3AwAgFiBKNwMAIBcgSTcDACAkIEg3AwAgAiACKQOAlAUiSDcDgJEFIAIgSDcDgI4FIAUgJCkDADcDACAHIBcpAwA3AwAgDCAWKQMANwMAIA0gCSkDADcDACAOIAMpAwA3AwAgECAEKQMANwMAIA8gASkDADcDACACIAIpA4COBTcDgJcFIAJBuJsFaiAFKQMANwMAIAJBsJsFaiAHKQMANwMAIAJBqJsFaiAMKQMANwMAIAJBoJsFaiANKQMANwMAIAJBmJsFaiAOKQMANwMAIAJBkJsFaiAQKQMANwMAIAJBiJsFaiAPKQMANwMAIAIgAikDgJcFNwOAmwUgJUUEQCACQYCgBWogAkGAmgVqQcAB/AoAAAsgJUUEQCACQcCeBWogAkGAoAVqQcAB/AoAAAsgAiACQYCdBWpBgAP8CgAAIAJBgANqIgEgAkEBEHQgAkGABmoiFSACIAEQ9gEgAkGACWoiCSABIBUQ9gEgAkGADGoiHCABIAkQ9gEgAkGAD2oiGCABIBwQ9gEgAkGA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IAEpA7AdfCISIBggIFStIAEpA8gdIA8gIFatfHx8Iip8Ig8gASkD8Bx8IiAgASkDiB0gASkDgB0iCiAQfCAKVK18fCIYIAEpA7AefCIQQonHmaSu8IHph39+IgpCAELH+vPD7YKjkDxCABDJAyABQaAcaiAKQgBCjZXHw5bS2sCXf0IAEMkDIAFBkBxqIApCAELdsIWM6LaRqLh/QgAQyQMgAUGAHGogCkIAQqnAxomuzpOyMEIAEMkDAkACQAJAIAEpA4gcIAEpA+gfIAEpA+AfIAwgDlStIAEpA8gcIA0gDlatfHwiDiABKQPIHyANICFUrXx8IgogDlSthCIOIAEpA9gfIAogCiABKQPQH3wiClatfCAKIAogEyAVVq0gASkDmB8gDCATVq18fHwiClatfHwiDSAOVK18IA0gDSABKQOoHSAKIAogASkDoB18IgpWrXwgCiAKIBIgKlatIAEpA7gdIBIgFVStfHx8IgpWrXx8Ig1WrXwgDSABKQOoHyAKIAogASkDoB98IgpWrXwgCiAKIAsgD1atIAEpA+geIAsgGVStfHx8IgpWrXx8IgsgDVStfCIVIAEpA/AffCINIAEpA9gcIAsgCyABKQPQHHwiC1atfCALIAEpA+gcIAogCiABKQPgHHwiClatfCAKIBggIFStIAEpA/gcIA8gIFatfHx8IgwgClStfHwiCiALVK18fCIOIAEpA7gfIAogCiABKQOwH3wiClatfCAKIAogASkD+B4gASkDuB4gECAYVK18Ig8gASkD8B58IgsgD1StfCALIAsgDHwiC1atfHwiClatfHwiDCABKQOAHHwiDyAMVK18IA8gASkDmBwgCiAKIAEpA5AcfCIKVq18IAogCiABKQOoHCALIAsgASkDoBx8IgtWrXwgCyABKQO4HCABKQOwHCIgIBB8ICBUrXx8Ii4gC1StfHwiClatfHwiCyAPVK18IAwgDlStIA0gDlatIAEpA/gfIA0gFVStfHx8fCIrQqnAxomuzpOyMFYNAAJAICtCqcDGia7Ok7IwUQRAIAtC3bCFjOi2kai4f1YNAiALQt2whYzotpGouH9RDQFCqcDGia7Ok7IwISsLIAshKiAKISAMAwsgCkKNlcfDltLawJd/Vg0AQt2whYzotpGouH8hKiAKQo2Vx8OW0trAl39SIC5Cx/rzw+2Co5A8VHINAQsgCkLz6ri86a2lv+gAfCINIC5Cx/rzw+2Co5A8VK0iDn0hICALQqPP+vOXye7XxwB8IgwgCkKNlcfDltLawJd/VCANIA5Ucq0iCn0hKiArIAtC3bCFjOi2kai4f1QgCiAMVnKtfUKpwMaJrs6TsjB9ISsgLkLH+vPD7YKjkDx9IS4MAQtCqcDGia7Ok7IwISsgCiEgCyABQdAgakHog8IAQcAAELcCIAFBgBpqIAEpA+ggIgpCAEKJ9auctYu/lnNCABDJAyABQcAaaiABKQPgICILQgBCifWrnLWLv5ZzQgAQyQMgAUGAG2ogASkD2CAiDUIAQon1q5y1i7+Wc0IAEMkDIAFBwBtqIAEpA9AgIg5CAEKJ9auctYu/lnNCABDJAyABQfAZaiABKQOAGiIYQonHmaSu8IHph39+IgxCAELH+vPD7YKjkDxCABDJAyABQeAZaiAMQgBCjZXHw5bS2sCXf0IAEMkDIAFBkBlqIAxCAELdsIWM6LaRqLh/QgAQyQMgAUHAGGogDEIAQqnAxomuzpOyMEIAEMkDIAFBkBpqIApCAEL7g5SinaLG87V/QgAQyQMgAUHQGmogC0IAQvuDlKKdosbztX9CABDJAyABQZAbaiANQgBC+4OUop2ixvO1f0IAEMkDIAFB0BtqIA5CAEL7g5SinaLG87V/QgAQyQMgAUHQGWogASkD4BkiISABKQOIGiISIAEpA8AafCIQfCIPIAEpA/gZIBggASkD8BkiDHwgDFStfHwiGCABKQOQGnwiFUKJx5mkrvCB6Yd/fiIMQgBCx/rzw+2Co5A8QgAQyQMgAUHAGWogDEIAQo2Vx8OW0trAl39CABDJAyABQbAZaiAMQgBC3bCFjOi2kai4f0IAEMkDIAFBoBlqIAxCAEKpwMaJrs6TsjBCABDJAyABQaAaaiAKQgBC9v+F0vDfx9XHAEIAEMkDIAFB4BpqIAtCAEL2/4XS8N/H1ccAQgAQyQMgAUGgG2ogDUIAQvb/hdLw38fVxwBCABDJAyABQeAbaiAOQgBC9v+F0vDfx9XHAEIAEMkDIAFBgBlqIAEpA5gaIBUgGFStfCIfIAEpA9AafCITIAEpA8gaIBAgElStfCIZIAEpA4AbfCISIAEpA5AZfCIQIA8gGFatIAEpA+gZIA8gIVStfHx8Ihp8Ig8gASkDwBl8IhggASkD2BkgASkD0BkiDCAVfCAMVK18fCIVIAEpA6AafCIhQonHmaSu8IHph39+IgxCAELH+vPD7YKjkDxCABDJAyABQfAYaiAMQgBCjZXHw5bS2sCXf0IAEMkDIAFB4BhqIAxCAELdsIWM6LaRqLh/QgAQyQMgAUHQGGogDEIAQqnAxomuzpOyMEIAEMkDIAFBsBpqIApCAEKf6uDVnO6n7AZCABDJAyABQfAaaiALQgBCn+rg1Zzup+wGQgAQyQMgAUGwG2ogDUIAQp/q4NWc7qfsBkIAEMkDIAFB8BtqIA5CAEKf6uDVnO6n7AZCABDJAyABQbAYaiABKQOoGiAVICFWrXwiFCABKQPgGnwiCyABKQOIGyASIBlUrXwiGSABKQPAG3wiDSABKQPAGHwiDiAQIBpWrSABKQOYGSAQIBJUrXx8fCIMIAEpA5AbfCISIA8gE1StIAEpA9gaIBMgH1StfHx8IhMgASkDsBl8IhAgFSAYVK0gASkDyBkgDyAYVq18fHwiH3wiDyABKQPwGHwiGCABKQOIGSABKQOAGSIKICF8IApUrXx8IhUgASkDsBp8IiFCiceZpK7wgemHf34iCkIAQsf688PtgqOQPEIAEMkDIAFBoBhqIApCAEKNlcfDltLawJd/QgAQyQMgAUGQGGogCkIAQt2whYzotpGouH9CABDJAyABQYAYaiAKQgBCqcDGia7Ok7IwQgAQyQMCQAJAAkAgASkDiBggASkD6BsgASkD4BsgDCAOVK0gASkDyBggDSAOVq18fCIOIAEpA8gbIA0gGVStfHwiCiAOVK2EIg4gASkD2BsgCiAKIAEpA9AbfCIKVq18IAogCiASIBNWrSABKQOYGyAMIBJWrXx8fCIKVq18fCINIA5UrXwgDSANIAEpA6gZIAogCiABKQOgGXwiClatfCAKIAogECAfVq0gASkDuBkgECATVK18fHwiClatfHwiDVatfCANIAEpA6gbIAogCiABKQOgG3wiClatfCAKIAogCyAPVq0gASkD6BogCyAUVK18fHwiClatfHwiCyANVK18IhMgASkD8Bt8Ig0gASkD2BggCyALIAEpA9AYfCILVq18IAsgASkD6BggCiAKIAEpA+AYfCIKVq18IAogFSAYVK0gASkD+BggDyAYVq18fHwiDCAKVK18fCIKIAtUrXx8Ig4gASkDuBsgCiAKIAEpA7AbfCIKVq18IAogCiABKQP4GiABKQO4GiAVICFWrXwiDyABKQPwGnwiCyAPVK18IAsgCyAMfCILVq18fCIKVq18fCIMIAEpA4AYfCIPIAxUrXwgDyABKQOYGCAKIAogASkDkBh8IgpWrXwgCiAKIAEpA6gYIAsgCyABKQOgGHwiC1atfCALIAEpA7gYIAEpA7AYIhggIXwgGFStfHwiLyALVK18fCIKVq18fCILIA9UrXwgDCAOVK0gDSAOVq0gASkD+BsgDSATVK18fHx8IixCqcDGia7Ok7IwVg0AAkAgLEKpwMaJrs6TsjBRBEAgC0LdsIWM6LaRqLh/Vg0CIAtC3bCFjOi2kai4f1ENAUKpwMaJrs6TsjAhLAsgCyEhIAohGAwDCyAKQo2Vx8OW0trAl39WDQBC3bCFjOi2kai4fyEhIApCjZXHw5bS2sCXf1IgL0LH+vPD7YKjkDxUcg0BCyAKQvPquLzpraW/6AB8Ig0gL0LH+vPD7YKjkDxUrSIOfSEYIAtCo8/685fJ7tfHAHwiDCAKQo2Vx8OW0trAl39UIA0gDlRyrSIKfSEhICwgC0LdsIWM6LaRqLh/VCAKIAxWcq19QqnAxomuzpOyMH0hLCAvQsf688PtgqOQPH0hLwwBC0KpwMaJrs6TsjAhLCAKIRgLIAFB0CBqQaiEwgBBARC3AiABQYAWaiABKQPoICIKQgBCifWrnLWLv5ZzQgAQyQMgAUHAFmogASkD4CAiC0IAQon1q5y1i7+Wc0IAEMkDIAFBgBdqIAEpA9ggIg1CAEKJ9auctYu/lnNCABDJAyABQcAXaiABKQPQICIOQgBCifWrnLWLv5ZzQgAQyQMgAUHwFWogASkDgBYiFUKJx5mkrvCB6Yd/fiIMQgBCx/rzw+2Co5A8QgAQyQMgAUHgFWogDEIAQo2Vx8OW0trAl39CABDJAyABQZAVaiAMQgBC3bCFjOi2kai4f0IAEMkDIAFBwBRqIAxCAEKpwMaJrs6TsjBCABDJAyABQZAWaiAKQgBC+4OUop2ixvO1f0IAEMkDIAFB0BZqIAtCAEL7g5SinaLG87V/QgAQyQMgAUGQF2ogDUIAQvuDlKKdosbztX9CABDJAyABQdAXaiAOQgBC+4OUop2ixvO1f0IAEMkDIAFB0BVqIAEpA+AVIhkgASkDiBYiECABKQPAFnwiH3wiDyABKQP4FSAVIAEpA/AVIgx8IAxUrXx8IhUgASkDkBZ8IhNCiceZpK7wgemHf34iDEIAQsf688PtgqOQPEIAEMkDIAFBwBVqIAxCAEKNlcfDltLawJd/QgAQyQMgAUGwFWogDEIAQt2whYzotpGouH9CABDJAyABQaAVaiAMQgBCqcDGia7Ok7IwQgAQyQMgAUGgFmogCkIAQvb/hdLw38fVxwBCABDJAyABQeAWaiALQgBC9v+F0vDfx9XHAEIAEMkDIAFBoBdqIA1CAEL2/4XS8N/H1ccAQgAQyQMgAUHgF2ogDkIAQvb/hdLw38fVxwBCABDJAyABQYAVaiABKQOYFiATIBVUrXwiGiABKQPQFnwiEiABKQPIFiAQIB9WrXwiFCABKQOAF3wiECABKQOQFXwiHyAPIBVWrSABKQPoFSAPIBlUrXx8fCInfCIPIAEpA8AVfCIVIAEpA9gVIAEpA9AVIgwgE3wgDFStfHwiEyABKQOgFnwiGUKJx5mkrvCB6Yd/fiIMQgBCx/rzw+2Co5A8QgAQyQMgAUHwFGogDEIAQo2Vx8OW0trAl39CABDJAyABQeAUaiAMQgBC3bCFjOi2kai4f0IAEMkDIAFB0BRqIAxCAEKpwMaJrs6TsjBCABDJAyABQbAWaiAKQgBCn+rg1Zzup+wGQgAQyQMgAUHwFmogC0IAQp/q4NWc7qfsBkIAEMkDIAFBsBdqIA1CAEKf6uDVnO6n7AZCABDJAyABQfAXaiAOQgBCn+rg1Zzup+wGQgAQyQMgAUGwFGogASkDqBYgEyAZVq18IiQgASkD4BZ8IgsgASkDiBcgECAUVK18IhQgASkDwBd8Ig0gASkDwBR8Ig4gHyAnVq0gASkDmBUgECAfVq18fHwiDCABKQOQF3wiECAPIBJUrSABKQPYFiASIBpUrXx8fCISIAEpA7AVfCIfIBMgFVStIAEpA8gVIA8gFVatfHx8Ihp8Ig8gASkD8BR8IhUgASkDiBUgASkDgBUiCiAZfCAKVK18fCITIAEpA7AWfCIZQonHmaSu8IHph39+IgpCAELH+vPD7YKjkDxCABDJAyABQaAUaiAKQgBCjZXHw5bS2sCXf0IAEMkDIAFBkBRqIApCAELdsIWM6LaRqLh/QgAQyQMgAUGAFGogCkIAQqnAxomuzpOyMEIAEMkDAkACQAJAIAEpA4gUIAEpA+gXIAEpA+AXIAwgDlStIAEpA8gUIA0gDlatfHwiDiABKQPIFyANIBRUrXx8IgogDlSthCIOIAEpA9gXIAogCiABKQPQF3wiClatfCAKIAogECASVq0gASkDmBcgDCAQVq18fHwiClatfHwiDSAOVK18IA0gDSABKQOoFSAKIAogASkDoBV8IgpWrXwgCiAKIBogH1StIAEpA7gVIBIgH1atfHx8IgpWrXx8Ig1WrXwgDSABKQOoFyAKIAogASkDoBd8IgpWrXwgCiAKIAsgD1atIAEpA+gWIAsgJFStfHx8IgpWrXx8IgsgDVStfCISIAEpA/AXfCINIAEpA9gUIAsgCyABKQPQFHwiC1atfCALIAEpA+gUIAogCiABKQPgFHwiClatfCAKIBMgFVStIAEpA/gUIA8gFVatfHx8IgwgClStfHwiCiALVK18fCIOIAEpA7gXIAogCiABKQOwF3wiClatfCAKIAogASkD+BYgASkDuBYgEyAZVq18Ig8gASkD8BZ8IgsgD1StfCALIAsgDHwiC1atfHwiClatfHwiDCABKQOAFHwiDyAMVK18IA8gASkDmBQgCiAKIAEpA5AUfCIKVq18IAogCiABKQOoFCALIAsgASkDoBR8IgtWrXwgCyABKQO4FCABKQOwFCIVIBl8IBVUrXx8IjAgC1StfHwiClatfHwiCyAPVK18IAwgDlStIA0gDlatIAEpA/gXIA0gElStfHx8fCInQqnAxomuzpOyMFYNAAJAICdCqcDGia7Ok7IwUQRAIAtC3bCFjOi2kai4f1YNAiALQt2whYzotpGouH9RDQFCqcDGia7Ok7IwIScLIAshHyAKIRUMAwsgCkKNlcfDltLawJd/Vg0AQt2whYzotpGouH8hHyAKQo2Vx8OW0trAl39SIDBCx/rzw+2Co5A8VHINAQsgCkLz6ri86a2lv+gAfCINIDBCx/rzw+2Co5A8VK0iDn0hFSALQqPP+vOXye7XxwB8IgwgCkKNlcfDltLawJd/VCANIA5Ucq0iCn0hHyAnIAtC3bCFjOi2kai4f1QgCiAMVnKtfUKpwMaJrs6TsjB9IScgMELH+vPD7YKjkDx9ITAMAQtCqcDGia7Ok7IwIScgCiEVCyABQdAgakGphMIAQQEQtwIgAUGAEmogASkD6CAiCkIAQon1q5y1i7+Wc0IAEMkDIAFBwBJqIAEpA+AgIgtCAEKJ9auctYu/lnNCABDJAyABQYATaiABKQPYICINQgBCifWrnLWLv5ZzQgAQyQMgAUHAE2ogASkD0CAiDkIAQon1q5y1i7+Wc0IAEMkDIAFB8BFqIAEpA4ASIhNCiceZpK7wgemHf34iDEIAQsf688PtgqOQPEIAEMkDIAFB4BFqIAxCAEKNlcfDltLawJd/QgAQyQMgAUGQEWogDEIAQt2whYzotpGouH9CABDJAyABQcAQaiAMQgBCqcDGia7Ok7IwQgAQyQMgAUGQEmogCkIAQvuDlKKdosbztX9CABDJAyABQdASaiALQgBC+4OUop2ixvO1f0IAEMkDIAFBkBNqIA1CAEL7g5SinaLG87V/QgAQyQMgAUHQE2ogDkIAQvuDlKKdosbztX9CABDJAyABQdARaiABKQPgESIUIAEpA4gSIhkgASkDwBJ8Ihp8Ig8gASkD+BEgEyABKQPwESIMfCAMVK18fCITIAEpA5ASfCISQonHmaSu8IHph39+IgxCAELH+vPD7YKjkDxCABDJAyABQcARaiAMQgBCjZXHw5bS2sCXf0IAEMkDIAFBsBFqIAxCAELdsIWM6LaRqLh/QgAQyQMgAUGgEWogDEIAQqnAxomuzpOyMEIAEMkDIAFBoBJqIApCAEL2/4XS8N/H1ccAQgAQyQMgAUHgEmogC0IAQvb/hdLw38fVxwBCABDJAyABQaATaiANQgBC9v+F0vDfx9XHAEIAEMkDIAFB4BNqIA5CAEL2/4XS8N/H1ccAQgAQyQMgAUGAEWogASkDmBIgEiATVK18IiQgASkD0BJ8IhAgASkDyBIgGSAaVq18Ih4gASkDgBN8IhkgASkDkBF8IhogDyATVq0gASkD6BEgDyAUVK18fHwiG3wiDyABKQPAEXwiEyABKQPYESABKQPQESIMIBJ8IAxUrXx8IhIgASkDoBJ8IhRCiceZpK7wgemHf34iDEIAQsf688PtgqOQPEIAEMkDIAFB8BBqIAxCAEKNlcfDltLawJd/QgAQyQMgAUHgEGogDEIAQt2whYzotpGouH9CABDJAyABQdAQaiAMQgBCqcDGia7Ok7IwQgAQyQMgAUGwEmogCkIAQp/q4NWc7qfsBkIAEMkDIAFB8BJqIAtCAEKf6uDVnO6n7AZCABDJAyABQbATaiANQgBCn+rg1Zzup+wGQgAQyQMgAUHwE2ogDkIAQp/q4NWc7qfsBkIAEMkDIAFBsBBqIAEpA6gSIBIgFFatfCIWIAEpA+ASfCILIAEpA4gTIBkgHlStfCIeIAEpA8ATfCINIAEpA8AQfCIOIBogG1atIAEpA5gRIBkgGlatfHx8IgwgASkDkBN8IhkgDyAQVK0gASkD2BIgECAkVK18fHwiECABKQOwEXwiGiASIBNUrSABKQPIESAPIBNWrXx8fCIkfCIPIAEpA/AQfCITIAEpA4gRIAEpA4ARIgogFHwgClStfHwiEiABKQOwEnwiFEKJx5mkrvCB6Yd/fiIKQgBCx/rzw+2Co5A8QgAQyQMgAUGgEGogCkIAQo2Vx8OW0trAl39CABDJAyABQZAQaiAKQgBC3bCFjOi2kai4f0IAEMkDIAFBgBBqIApCAEKpwMaJrs6TsjBCABDJAwJAAkACQCABKQOIECABKQPoEyABKQPgEyAMIA5UrSABKQPIECANIA5WrXx8Ig4gASkDyBMgDSAeVK18fCIKIA5UrYQiDiABKQPYEyAKIAogASkD0BN8IgpWrXwgCiAKIBAgGVStIAEpA5gTIAwgGVatfHx8IgpWrXx8Ig0gDlStfCANIA0gASkDqBEgCiAKIAEpA6ARfCIKVq18IAogCiAaICRWrSABKQO4ESAQIBpWrXx8fCIKVq18fCINVq18IA0gASkDqBMgCiAKIAEpA6ATfCIKVq18IAogCiALIA9WrSABKQPoEiALIBZUrXx8fCIKVq18fCILIA1UrXwiECABKQPwE3wiDSABKQPYECALIAsgASkD0BB8IgtWrXwgCyABKQPoECAKIAogASkD4BB8IgpWrXwgCiASIBNUrSABKQP4ECAPIBNWrXx8fCIMIApUrXx8IgogC1StfHwiDiABKQO4EyAKIAogASkDsBN8IgpWrXwgCiAKIAEpA/gSIAEpA7gSIBIgFFatfCIPIAEpA/ASfCILIA9UrXwgCyALIAx8IgtWrXx8IgpWrXx8IgwgASkDgBB8Ig8gDFStfCAPIAEpA5gQIAogCiABKQOQEHwiClatfCAKIAogASkDqBAgCyALIAEpA6AQfCILVq18IAsgASkDuBAgASkDsBAiEyAUfCATVK18fCIxIAtUrXx8IgpWrXx8IgsgD1StfCAMIA5UrSANIA5WrSABKQP4EyANIBBUrXx8fHwiJEKpwMaJrs6TsjBWDQACQCAkQqnAxomuzpOyMFEEQCALQt2whYzotpGouH9WDQIgC0LdsIWM6LaRqLh/UQ0BQqnAxomuzpOyMCEkCyALIRkgCiETDAMLIApCjZXHw5bS2sCXf1YNAELdsIWM6LaRqLh/IRkgCkKNlcfDltLawJd/UiAxQsf688PtgqOQPFRyDQELIApC8+q4vOmtpb/oAHwiDSAxQsf688PtgqOQPFStIg59IRMgC0Kjz/rzl8nu18cAfCIMIApCjZXHw5bS2sCXf1QgDSAOVHKtIgp9IRkgJCALQt2whYzotpGouH9UIAogDFZyrX1CqcDGia7Ok7IwfSEkIDFCx/rzw+2Co5A8fSExDAELQqnAxomuzpOyMCEkIAohEwsgAUHQIGpBqoTCAEHAABC3AiABQYAOaiABKQPoICIKQgBCifWrnLWLv5ZzQgAQyQMgAUHADmogASkD4CAiC0IAQon1q5y1i7+Wc0IAEMkDIAFBgA9qIAEpA9ggIg1CAEKJ9auctYu/lnNCABDJAyABQcAPaiABKQPQICIOQgBCifWrnLWLv5ZzQgAQyQMgAUHwDWogASkDgA4iEkKJx5mkrvCB6Yd/fiIMQgBCx/rzw+2Co5A8QgAQyQMgAUHgDWogDEIAQo2Vx8OW0trAl39CABDJAyABQZANaiAMQgBC3bCFjOi2kai4f0IAEMkDIAFBwAxqIAxCAEKpwMaJrs6TsjBCABDJAyABQZAOaiAKQgBC+4OUop2ixvO1f0IAEMkDIAFB0A5qIAtCAEL7g5SinaLG87V/QgAQyQMgAUGQD2ogDUIAQvuDlKKdosbztX9CABDJAyABQdAPaiAOQgBC+4OUop2ixvO1f0IAEMkDIAFB0A1qIAEpA+ANIhsgASkDiA4iFCABKQPADnwiHnwiDyABKQP4DSASIAEpA/ANIgx8IAxUrXx8IhIgASkDkA58IhBCiceZpK7wgemHf34iDEIAQsf688PtgqOQPEIAEMkDIAFBwA1qIAxCAEKNlcfDltLawJd/QgAQyQMgAUGwDWogDEIAQt2whYzotpGouH9CABDJAyABQaANaiAMQgBCqcDGia7Ok7IwQgAQyQMgAUGgDmogCkIAQvb/hdLw38fVxwBCABDJAyABQeAOaiALQgBC9v+F0vDfx9XHAEIAEMkDIAFBoA9qIA1CAEL2/4XS8N/H1ccAQgAQyQMgAUHgD2ogDkIAQvb/hdLw38fVxwBCABDJAyABQYANaiABKQOYDiAQIBJUrXwiFiABKQPQDnwiGiABKQPIDiAUIB5WrXwiESABKQOAD3wiFCABKQOQDXwiHiAPIBJWrSABKQPoDSAPIBtUrXx8fCItfCIPIAEpA8ANfCISIAEpA9gNIAEpA9ANIgwgEHwgDFStfHwiECABKQOgDnwiG0KJx5mkrvCB6Yd/fiIMQgBCx/rzw+2Co5A8QgAQyQMgAUHwDGogDEIAQo2Vx8OW0trAl39CABDJAyABQeAMaiAMQgBC3bCFjOi2kai4f0IAEMkDIAFB0AxqIAxCAEKpwMaJrs6TsjBCABDJAyABQbAOaiAKQgBCn+rg1Zzup+wGQgAQyQMgAUHwDmogC0IAQp/q4NWc7qfsBkIAEMkDIAFBsA9qIA1CAEKf6uDVnO6n7AZCABDJAyABQfAPaiAOQgBCn+rg1Zzup+wGQgAQyQMgAUGwDGogASkDqA4gECAbVq18IiIgASkD4A58IgsgASkDiA8gESAUVq18IhEgASkDwA98Ig0gASkDwAx8Ig4gHiAtVq0gASkDmA0gFCAeVq18fHwiDCABKQOQD3wiFCAPIBpUrSABKQPYDiAWIBpWrXx8fCIaIAEpA7ANfCIeIBAgElStIAEpA8gNIA8gElatfHx8IhZ8Ig8gASkD8Ax8IhIgASkDiA0gASkDgA0iCiAbfCAKVK18fCIQIAEpA7AOfCIbQonHmaSu8IHph39+IgpCAELH+vPD7YKjkDxCABDJAyABQaAMaiAKQgBCjZXHw5bS2sCXf0IAEMkDIAFBkAxqIApCAELdsIWM6LaRqLh/QgAQyQMgAUGADGogCkIAQqnAxomuzpOyMEIAEMkDAkACQAJAIAEpA4gMIAEpA+gPIAEpA+APIAwgDlStIAEpA8gMIA0gDlatfHwiDiABKQPIDyANIBFUrXx8IgogDlSthCIOIAEpA9gPIAogCiABKQPQD3wiClatfCAKIAogFCAaVq0gASkDmA8gDCAUVq18fHwiClatfHwiDSAOVK18IA0gDSABKQOoDSAKIAogASkDoA18IgpWrXwgCiAKIBYgHlStIAEpA7gNIBogHlatfHx8IgpWrXx8Ig1WrXwgDSABKQOoDyAKIAogASkDoA98IgpWrXwgCiAKIAsgD1atIAEpA+gOIAsgIlStfHx8IgpWrXx8IgsgDVStfCIaIAEpA/APfCINIAEpA9gMIAsgCyABKQPQDHwiC1atfCALIAEpA+gMIAogCiABKQPgDHwiClatfCAKIBAgElStIAEpA/gMIA8gElatfHx8IgwgClStfHwiCiALVK18fCIOIAEpA7gPIAogCiABKQOwD3wiClatfCAKIAogASkD+A4gASkDuA4gECAbVq18Ig8gASkD8A58IgsgD1StfCALIAsgDHwiC1atfHwiClatfHwiDCABKQOADHwiDyAMVK18IA8gASkDmAwgCiAKIAEpA5AMfCIKVq18IAogCiABKQOoDCALIAsgASkDoAx8IgtWrXwgCyABKQO4DCABKQOwDCISIBt8IBJUrXx8Ii0gC1StfHwiClatfHwiCyAPVK18IAwgDlStIA0gDlatIAEpA/gPIA0gGlStfHx8fCIeQqnAxomuzpOyMFYNAAJAIB5CqcDGia7Ok7IwUQRAIAtC3bCFjOi2kai4f1YNAiALQt2whYzotpGouH9RDQFCqcDGia7Ok7IwIR4LIAshGiAKIRIMAwsgCkKNlcfDltLawJd/Vg0AQt2whYzotpGouH8hGiAKQo2Vx8OW0trAl39SIC1Cx/rzw+2Co5A8VHINAQsgCkLz6ri86a2lv+gAfCINIC1Cx/rzw+2Co5A8VK0iDn0hEiALQqPP+vOXye7XxwB8IgwgCkKNlcfDltLawJd/VCANIA5Ucq0iCn0hGiAeIAtC3bCFjOi2kai4f1QgCiAMVnKtfUKpwMaJrs6TsjB9IR4gLULH+vPD7YKjkDx9IS0MAQtCqcDGia7Ok7IwIR4gCiESCyABQdAgakHqhMIAQcAAELcCIAFBgApqIAEpA+ggIgpCAEKJ9auctYu/lnNCABDJAyABQcAKaiABKQPgICILQgBCifWrnLWLv5ZzQgAQyQMgAUGAC2ogASkD2CAiDUIAQon1q5y1i7+Wc0IAEMkDIAFBwAtqIAEpA9AgIg5CAEKJ9auctYu/lnNCABDJAyABQfAJaiABKQOACiIQQonHmaSu8IHph39+IgxCAELH+vPD7YKjkDxCABDJAyABQeAJaiAMQgBCjZXHw5bS2sCXf0IAEMkDIAFBkAlqIAxCAELdsIWM6LaRqLh/QgAQyQMgAUHACGogDEIAQqnAxomuzpOyMEIAEMkDIAFBkApqIApCAEL7g5SinaLG87V/QgAQyQMgAUHQCmogC0IAQvuDlKKdosbztX9CABDJAyABQZALaiANQgBC+4OUop2ixvO1f0IAEMkDIAFB0AtqIA5CAEL7g5SinaLG87V/QgAQyQMgAUHQCWogASkD4AkiIiABKQOICiIWIAEpA8AKfCIRfCIPIAEpA/gJIBAgASkD8AkiDHwgDFStfHwiECABKQOQCnwiFEKJx5mkrvCB6Yd/fiIMQgBCx/rzw+2Co5A8QgAQyQMgAUHACWogDEIAQo2Vx8OW0trAl39CABDJAyABQbAJaiAMQgBC3bCFjOi2kai4f0IAEMkDIAFBoAlqIAxCAEKpwMaJrs6TsjBCABDJAyABQaAKaiAKQgBC9v+F0vDfx9XHAEIAEMkDIAFB4ApqIAtCAEL2/4XS8N/H1ccAQgAQyQMgAUGgC2ogDUIAQvb/hdLw38fVxwBCABDJAyABQeALaiAOQgBC9v+F0vDfx9XHAEIAEMkDIAFBgAlqIAEpA5gKIBAgFFatfCIjIAEpA9AKfCIbIAEpA8gKIBEgFlStfCIXIAEpA4ALfCIWIAEpA5AJfCIRIA8gEFatIAEpA+gJIA8gIlStfHx8Ihx8Ig8gASkDwAl8IhAgASkD2AkgASkD0AkiDCAUfCAMVK18fCIUIAEpA6AKfCIiQonHmaSu8IHph39+IgxCAELH+vPD7YKjkDxCABDJAyABQfAIaiAMQgBCjZXHw5bS2sCXf0IAEMkDIAFB4AhqIAxCAELdsIWM6LaRqLh/QgAQyQMgAUHQCGogDEIAQqnAxomuzpOyMEIAEMkDIAFBsApqIApCAEKf6uDVnO6n7AZCABDJAyABQfAKaiALQgBCn+rg1Zzup+wGQgAQyQMgAUGwC2ogDUIAQp/q4NWc7qfsBkIAEMkDIAFB8AtqIA5CAEKf6uDVnO6n7AZCABDJAyABQbAIaiABKQOoCiAUICJWrXwiHSABKQPgCnwiCyABKQOICyAWIBdUrXwiFyABKQPAC3wiDSABKQPACHwiDiARIBxWrSABKQOYCSARIBZUrXx8fCIMIAEpA5ALfCIWIA8gG1StIAEpA9gKIBsgI1StfHx8IhsgASkDsAl8IhEgECAUVq0gASkDyAkgDyAQVq18fHwiI3wiDyABKQPwCHwiECABKQOICSABKQOACSIKICJ8IApUrXx8IhQgASkDsAp8IiJCiceZpK7wgemHf34iCkIAQsf688PtgqOQPEIAEMkDIAFBoAhqIApCAEKNlcfDltLawJd/QgAQyQMgAUGQCGogCkIAQt2whYzotpGouH9CABDJAyABQYAIaiAKQgBCqcDGia7Ok7IwQgAQyQMCQAJAAkAgASkDiAggASkD6AsgASkD4AsgDCAOVK0gASkDyAggDSAOVq18fCIOIAEpA8gLIA0gF1StfHwiCiAOVK2EIg4gASkD2AsgCiAKIAEpA9ALfCIKVq18IAogCiAWIBtWrSABKQOYCyAMIBZWrXx8fCIKVq18fCINIA5UrXwgDSANIAEpA6gJIAogCiABKQOgCXwiClatfCAKIAogESAjVq0gASkDuAkgESAbVK18fHwiClatfHwiDVatfCANIAEpA6gLIAogCiABKQOgC3wiClatfCAKIAogCyAPVq0gASkD6AogCyAdVK18fHwiClatfHwiCyANVK18IhsgASkD8At8Ig0gASkD2AggCyALIAEpA9AIfCILVq18IAsgASkD6AggCiAKIAEpA+AIfCIKVq18IAogECAUVq0gASkD+AggDyAQVq18fHwiDCAKVK18fCIKIAtUrXx8Ig4gASkDuAsgCiAKIAEpA7ALfCIKVq18IAogCiABKQP4CiABKQO4CiAUICJWrXwiDyABKQPwCnwiCyAPVK18IAsgCyAMfCILVq18fCIKVq18fCIMIAEpA4AIfCIPIAxUrXwgDyABKQOYCCAKIAogASkDkAh8IgpWrXwgCiAKIAEpA6gIIAsgCyABKQOgCHwiC1atfCALIAEpA7gIIAEpA7AIIhAgInwgEFStfHwiIiALVK18fCIKVq18fCILIA9UrXwgDCAOVK0gDSAOVq0gASkD+AsgDSAbVK18fHx8IhtCqcDGia7Ok7IwVg0AAkAgG0KpwMaJrs6TsjBRBEAgC0LdsIWM6LaRqLh/Vg0CIAtC3bCFjOi2kai4f1ENAUKpwMaJrs6TsjAhGwsgCyEUIAohEAwDCyAKQo2Vx8OW0trAl39WDQBC3bCFjOi2kai4fyEUIApCjZXHw5bS2sCXf1IgIkLH+vPD7YKjkDxUcg0BCyAKQvPquLzpraW/6AB8Ig0gIkLH+vPD7YKjkDxUrSIOfSEQIAtCo8/685fJ7tfHAHwiDCAKQo2Vx8OW0trAl39UIA0gDlRyrSIKfSEUIBsgC0LdsIWM6LaRqLh/VCAKIAxWcq19QqnAxomuzpOyMH0hGyAiQsf688PtgqOQPH0hIgwBC0KpwMaJrs6TsjAhGyAKIRALIAFB0CBqQaqFwgBBwAAQtwIgAUGABmogASkD6CAiCkIAQon1q5y1i7+Wc0IAEMkDIAFBwAZqIAEpA+AgIgtCAEKJ9auctYu/lnNCABDJAyABQYAHaiABKQPYICINQgBCifWrnLWLv5ZzQgAQyQMgAUHAB2ogASkD0CAiDkIAQon1q5y1i7+Wc0IAEMkDIAFB8AVqIAEpA4AGIhZCiceZpK7wgemHf34iDEIAQsf688PtgqOQPEIAEMkDIAFB4AVqIAxCAEKNlcfDltLawJd/QgAQyQMgAUGQBWogDEIAQt2whYzotpGouH9CABDJAyABQcAEaiAMQgBCqcDGia7Ok7IwQgAQyQMgAUGQBmogCkIAQvuDlKKdosbztX9CABDJAyABQdAGaiALQgBC+4OUop2ixvO1f0IAEMkDIAFBkAdqIA1CAEL7g5SinaLG87V/QgAQyQMgAUHQB2ogDkIAQvuDlKKdosbztX9CABDJAyABQdAFaiABKQPgBSIdIAEpA4gGIhcgASkDwAZ8Ihx8Ig8gASkD+AUgFiABKQPwBSIMfCAMVK18fCIWIAEpA5AGfCIRQonHmaSu8IHph39+IgxCAELH+vPD7YKjkDxCABDJAyABQcAFaiAMQgBCjZXHw5bS2sCXf0IAEMkDIAFBsAVqIAxCAELdsIWM6LaRqLh/QgAQyQMgAUGgBWogDEIAQqnAxomuzpOyMEIAEMkDIAFBoAZqIApCAEL2/4XS8N/H1ccAQgAQyQMgAUHgBmogC0IAQvb/hdLw38fVxwBCABDJAyABQaAHaiANQgBC9v+F0vDfx9XHAEIAEMkDIAFB4AdqIA5CAEL2/4XS8N/H1ccAQgAQyQMgAUGABWogASkDmAYgESAWVK18IiUgASkD0AZ8IiMgASkDyAYgFyAcVq18IiYgASkDgAd8IhcgASkDkAV8IhwgDyAWVq0gASkD6AUgDyAdVK18fHwiKHwiDyABKQPABXwiFiABKQPYBSABKQPQBSIMIBF8IAxUrXx8IhEgASkDoAZ8Ih1CiceZpK7wgemHf34iDEIAQsf688PtgqOQPEIAEMkDIAFB8ARqIAxCAEKNlcfDltLawJd/QgAQyQMgAUHgBGogDEIAQt2whYzotpGouH9CABDJAyABQdAEaiAMQgBCqcDGia7Ok7IwQgAQyQMgAUGwBmogCkIAQp/q4NWc7qfsBkIAEMkDIAFB8AZqIAtCAEKf6uDVnO6n7AZCABDJAyABQbAHaiANQgBCn+rg1Zzup+wGQgAQyQMgAUHwB2ogDkIAQp/q4NWc7qfsBkIAEMkDIAFBsARqIAEpA6gGIBEgHVatfCIpIAEpA+AGfCILIAEpA4gHIBcgJlStfCImIAEpA8AHfCINIAEpA8AEfCIOIBwgKFatIAEpA5gFIBcgHFatfHx8IgwgASkDkAd8IhcgDyAjVK0gASkD2AYgIyAlVK18fHwiIyABKQOwBXwiHCARIBZUrSABKQPIBSAPIBZWrXx8fCIlfCIPIAEpA/AEfCIWIAEpA4gFIAEpA4AFIgogHXwgClStfHwiESABKQOwBnwiHUKJx5mkrvCB6Yd/fiIKQgBCx/rzw+2Co5A8QgAQyQMgAUGgBGogCkIAQo2Vx8OW0trAl39CABDJAyABQZAEaiAKQgBC3bCFjOi2kai4f0IAEMkDIAFBgARqIApCAEKpwMaJrs6TsjBCABDJAwJAAkACQAJAIAEpA4gEIAEpA+gHIAEpA+AHIAwgDlStIAEpA8gEIA0gDlatfHwiDiABKQPIByANICZUrXx8IgogDlSthCIOIAEpA9gHIAogCiABKQPQB3wiClatfCAKIAogFyAjVq0gASkDmAcgDCAXVq18fHwiClatfHwiDSAOVK18IA0gDSABKQOoBSAKIAogASkDoAV8IgpWrXwgCiAKIBwgJVatIAEpA7gFIBwgI1StfHx8IgpWrXx8Ig1WrXwgDSABKQOoByAKIAogASkDoAd8IgpWrXwgCiAKIAsgD1atIAEpA+gGIAsgKVStfHx8IgpWrXx8IgsgDVStfCIXIAEpA/AHfCIOIAEpA9gEIAsgCyABKQPQBHwiC1atfCALIAEpA+gEIAogCiABKQPgBHwiClatfCAKIBEgFlStIAEpA/gEIA8gFlatfHx8IgwgClStfHwiCiALVK18fCILIAEpA7gHIAogCiABKQOwB3wiClatfCAKIAogASkD+AYgASkDuAYgESAdVq18Ig8gASkD8AZ8Ig0gD1StfCANIAwgDXwiDVatfHwiClatfHwiDCABKQOABHwiDyAMVK18IA8gASkDmAQgCiAKIAEpA5AEfCIKVq18IAogCiABKQOoBCANIA0gASkDoAR8Ig1WrXwgDSABKQO4BCABKQOwBCIWIB18IBZUrXx8IiMgDVStfHwiClatfHwiDSAPVK18IAsgDFatIAsgDlStIAEpA/gHIA4gF1StfHx8fCIWQqnAxomuzpOyMFYNACAWQqnAxomuzpOyMFINASANQt2whYzotpGouH9WDQAgDULdsIWM6LaRqLh/UgRAIAohCyANIQxCqcDGia7Ok7IwIRYMBAsgCkKNlcfDltLawJd/Vg0AQt2whYzotpGouH8hDCAKQo2Vx8OW0trAl39SICNCx/rzw+2Co5A8VHINAgsgCkLz6ri86a2lv+gAfCIOICNCx/rzw+2Co5A8VK0iDH0hCyANQqPP+vOXye7XxwB8Ig8gCkKNlcfDltLawJd/VCAMIA5Wcq0iCn0hDCAWIA1C3bCFjOi2kai4f1QgCiAPVnKtfUKpwMaJrs6TsjB9IRYgI0LH+vPD7YKjkDx9ISMMAgsgCiELIA0hDAwBCyAKIQtCqcDGia7Ok7IwIRYLIAFB0CBqQeqFwgBBwAAQtwIgAUGAAmogASkD6CAiCkIAQon1q5y1i7+Wc0IAEMkDIAFBwAJqIAEpA+AgIg1CAEKJ9auctYu/lnNCABDJAyABQYADaiABKQPYICIOQgBCifWrnLWLv5ZzQgAQyQMgAUHAA2ogASkD0CAiD0IAQon1q5y1i7+Wc0IAEMkDIAFB8AFqIAEpA4ACIhxCiceZpK7wgemHf34iEUIAQsf688PtgqOQPEIAEMkDIAFB4AFqIBFCAEKNlcfDltLawJd/QgAQyQMgAUGQAWogEUIAQt2whYzotpGouH9CABDJAyABQUBrIBFCAEKpwMaJrs6TsjBCABDJAyABQZACaiAKQgBC+4OUop2ixvO1f0IAEMkDIAFB0AJqIA1CAEL7g5SinaLG87V/QgAQyQMgAUGQA2ogDkIAQvuDlKKdosbztX9CABDJAyABQdADaiAPQgBC+4OUop2ixvO1f0IAEMkDIAFB0AFqIAEpA+ABIikgASkDiAIiJiABKQPAAnwiKHwiFyABKQP4ASAcIAEpA/ABIhF8IBFUrXx8IhwgASkDkAJ8Ih1CiceZpK7wgemHf34iEUIAQsf688PtgqOQPEIAEMkDIAFBwAFqIBFCAEKNlcfDltLawJd/QgAQyQMgAUGwAWogEUIAQt2whYzotpGouH9CABDJAyABQaABaiARQgBCqcDGia7Ok7IwQgAQyQMgAUGgAmogCkIAQvb/hdLw38fVxwBCABDJAyABQeACaiANQgBC9v+F0vDfx9XHAEIAEMkDIAFBoANqIA5CAEL2/4XS8N/H1ccAQgAQyQMgAUHgA2ogD0IAQvb/hdLw38fVxwBCABDJAyABQYABaiABKQOYAiAcIB1WrXwiMiABKQPQAnwiJSABKQPIAiAmIChWrXwiMyABKQOAA3wiJiABKQOQAXwiKCAXIBxWrSABKQPoASAXIClUrXx8fCI0fCIXIAEpA8ABfCIcIAEpA9gBIAEpA9ABIhEgHXwgEVStfHwiHSABKQOgAnwiKUKJx5mkrvCB6Yd/fiIRQgBCx/rzw+2Co5A8QgAQyQMgAUHwAGogEUIAQo2Vx8OW0trAl39CABDJAyABQeAAaiARQgBC3bCFjOi2kai4f0IAEMkDIAFB0ABqIBFCAEKpwMaJrs6TsjBCABDJAyABQbACaiAKQgBCn+rg1Zzup+wGQgAQyQMgAUHwAmogDUIAQp/q4NWc7qfsBkIAEMkDIAFBsANqIA5CAEKf6uDVnO6n7AZCABDJAyABQfADaiAPQgBCn+rg1Zzup+wGQgAQyQMgAUEwaiABKQOoAiAdIClWrXwiNSABKQPgAnwiDSABKQOIAyAmIDNUrXwiMyABKQPAA3wiDiABKQNAfCIPICggNFatIAEpA5gBICYgKFatfHx8IhEgASkDkAN8IiYgFyAlVK0gASkD2AIgJSAyVK18fHwiJSABKQOwAXwiKCAcIB1WrSABKQPIASAXIBxWrXx8fCIyfCIXIAEpA3B8IhwgASkDiAEgASkDgAEiCiApfCAKVK18fCIdIAEpA7ACfCIpQonHmaSu8IHph39+IgpCAELH+vPD7YKjkDxCABDJAyABQSBqIApCAEKNlcfDltLawJd/QgAQyQMgAUEQaiAKQgBC3bCFjOi2kai4f0IAEMkDIAEgCkIAQqnAxomuzpOyMEIAEMkDAkACQAJAAkAgASkDCCABKQPoAyABKQPgAyAPIBFWrSABKQNIIA4gD1atfHwiDyABKQPIAyAOIDNUrXx8IgogD1SthCIPIAEpA9gDIAogCiABKQPQA3wiClatfCAKIAogJSAmVK0gASkDmAMgESAmVq18fHwiClatfHwiDiAPVK18IA4gDiABKQOoASAKIAogASkDoAF8IgpWrXwgCiAKICggMlatIAEpA7gBICUgKFatfHx8IgpWrXx8Ig5WrXwgDiABKQOoAyAKIAogASkDoAN8IgpWrXwgCiAKIA0gF1atIAEpA+gCIA0gNVStfHx8IgpWrXx8Ig0gDlStfCIlIAEpA/ADfCIPIAEpA1ggDSANIAEpA1B8Ig1WrXwgDSABKQNoIAogCiABKQNgfCIKVq18IAogHCAdVq0gASkDeCAXIBxWrXx8fCIRIApUrXx8IgogDVStfHwiDSABKQO4AyAKIAogASkDsAN8IgpWrXwgCiAKIAEpA/gCIAEpA7gCIB0gKVatfCIXIAEpA/ACfCIOIBdUrXwgDiAOIBF8Ig5WrXx8IgpWrXx8IhEgASkDAHwiHCARVK18IBwgASkDGCAKIAogASkDEHwiClatfCAKIAogASkDKCAOIA4gASkDIHwiDlatfCAOIAEpAzggASkDMCIXICl8IBdUrXx8IhcgDlStfHwiClatfHwiDiAcVK18IA0gEVatIA0gD1StIAEpA/gDIA8gJVStfHx8fCIRQqnAxomuzpOyMFYNACARQqnAxomuzpOyMFINASAOQt2whYzotpGouH9WDQAgDkLdsIWM6LaRqLh/UgRAIAohDSAOIQ9CqcDGia7Ok7IwIREMBAsgCkKNlcfDltLawJd/Vg0AQt2whYzotpGouH8hDyAKQo2Vx8OW0trAl39SIBdCx/rzw+2Co5A8VHINAgsgCkLz6ri86a2lv+gAfCIPIBdCx/rzw+2Co5A8VK0iHH0hDSAOQqPP+vOXye7XxwB8Ih0gCkKNlcfDltLawJd/VCAPIBxUcq0iCn0hDyARIA5C3bCFjOi2kai4f1QgCiAdVnKtfUKpwMaJrs6TsjB9IREgF0LH+vPD7YKjkDx9IRcMAgsgCiENIA4hDwwBCyAKIQ1CqcDGia7Ok7IwIRELIAFB0CBqIgVBqobCAEHAAEEQEPEBAkACQCABKALQIEGAgICAeEcEQCABQZAgaiIGIAFB2CBqIgMoAgA2AgAgASABKQLQIDcDiCAgAUENNgLMICABQfGGwgA2AsggIAFCh4CAgMABNwLAICABQeqGwgA2ArwgIAFBBjYCuCAQxwQiAkUNASACIAIpAwAiCkIBfDcDACACKQMIIQ4gA0GIscIAKQMANwMAIAFB6CBqIgIgDjcDACABQeAgaiIEIAo3AwAgAUGAscIAKQMANwPQICAFIAFBuCBqEIIBIAFBsCBqIgcgAikDADcDACABQaggaiIIIAQpAwA3AwAgAUGgIGoiCSADKQMANwMAIAEgASkD0CA3A5ggIAVBwIfCAEEwQRAQ8QEgAS0A1CAhAiABKALQICIEQYCAgIB4Rg0CIAAgAS8A1SA7AJUCIABBlwJqIAFB1yBqLQAAOgAAIAEoAtggIQMgAEIANwMAIABBADoAuAQgAEEIakIANwMAIABBEGpCADcDACAAQRhqQgA3AwAgACAXNwOgBCAAIA03A5gEIAAgDzcDkAQgACARNwOIBCAAICM3A4AEIAAgCzcD+AMgACAMNwPwAyAAIBY3A+gDIABCATcD4AMgACAiNwPYAyAAIBA3A9ADIAAgFDcDyAMgACAbNwPAAyAAIC03A7gDIAAgEjcDsAMgACAaNwOoAyAAIB43A6ADIABCATcDmAMgACAxNwO4ASAAIBM3A7ABIAAgGTcDqAEgACAkNwOgASAAIDA3A5gBIAAgFTcDkAEgACAfNwOIASAAICc3A4ABIAAgLzcDeCAAIBg3A3AgACAhNwNoIAAgLDcDYCAAIC43A1ggACAgNwNQIAAgKjcDSCAAICs3A0AgAELX0bSFldXyi/oANwM4IABCucPUiq6vsLUfNwMwIABChKWvy+bJ+qUzNwMoIABCjrve8Mzo2Y8qNwMgIABBATYCqAQgAELxk6TTxNbk9MQANwOAAiAAQgA3A4gCIABCjrve8Mzo2Y8qNwPAASAAQoSlr8vmyfqlMzcDyAEgAEK5w9SKrq+wtR83A9ABIABC19G0hZXV8ov6ADcD2AEgAEG0BGogBigCADYCACAAIAEpA4ggNwKsBCAAIAEpA5ggNwPgASAAQegBaiAJKQMANwMAIABB8AFqIAgpAwA3AwAgAEH4AWogBykDADcDACAAQcIANgKsAiAAQf6GwgA2AqgCIABCCTcDoAIgAEECQQEgAxs6AJwCIAAgAjoAlAIgAEIANwOwAiAAIAM2ApgCIAAgBDYCkAIgAUHwIGokAA8LIAEgAS0A1CA6AJggQYz3wQBBKyABQZggakHk+8EAQYCIwgAQygMACxDwAwALIAEgAjoA0CBBjPfBAEErIAFB0CBqQeT7wQBB8IfCABDKAwALp4cBAgp/G34jAEHwHGsiAyQAIAMgAjYC3BQgA0EMNgLYFAJAAkAgAkEMRgRAIANB4BRqECYgA0HwE2ogAykD8BciDUIAQsau0OHB5sfvdEIAEMkDIANB4BNqIAMpA/ATQn6DIhRCAEIAQv3/8//P///5iX8QyQMgA0HQE2ogAykD6BMiDkIAQqvV/v///7//uX9CABDJAyADQcATaiAOQgBC///Piuv//9UeQgAQyQMgA0HAEmogDkIAQqTsw7WP1LSY5wBCABDJAyADQcARaiAOQgBCv6WUnM/w0rvkAEIAEMkDIANBwBBqIA5CAELX2a6a5PbpjcsAQgAQyQMgA0HAD2ogDkIAQprN/8ujvcSAGkIAEMkDIANBgBRqIA1CAELxicTO4NS5uwpCABDJAyADQbATaiADKQOAFCIQIAMpA8ATIhMgAykD+BN8Ig8gAykD2BMgAykD0BMiDiAUfCAOVK18fCIRfCIUQgBCAEL9//P/z///+Yl/EMkDIANBoBNqIAMpA7gTIg5CAEKr1f7///+//7l/QgAQyQMgA0GQE2ogDkIAQv//z4rr///VHkIAEMkDIANBgBNqIA5CAEKk7MO1j9S0mOcAQgAQyQMgA0HwEmogDkIAQr+llJzP8NK75ABCABDJAyADQeASaiAOQgBC19mumuT26Y3LAEIAEMkDIANB0BJqIA5CAEKazf/Lo73EgBpCABDJAyADQZAUaiANQgBC1e3W5MTt0fKNf0IAEMkDIANBsBJqIAMpA5AUIhUgAykDkBMiFyADKQOIFCAQIBRWrXwiECADKQPAEiIYIA8gEVatIAMpA8gTIA8gE1StfHx8IhN8IhF8Ig8gAykDqBMgAykDoBMiDiAUfCAOVK18fCIZfCIUQgBCAEL9//P/z///+Yl/EMkDIANBoBJqIAMpA7gSIg5CAEKr1f7///+//7l/QgAQyQMgA0GQEmogDkIAQv//z4rr///VHkIAEMkDIANBgBJqIA5CAEKk7MO1j9S0mOcAQgAQyQMgA0HwEWogDkIAQr+llJzP8NK75ABCABDJAyADQeARaiAOQgBC19mumuT26Y3LAEIAEMkDIANB0BFqIA5CAEKazf/Lo73EgBpCABDJAyADQaAUaiANQgBCwIf2nJmV4vXnAEIAEMkDIANBsBFqIAMpA6AUIhsgAykDkBIiEiADKQOYFCAUIBVUrXwiFSAQIBFWrSIRIAMpA8ARIhYgAykDyBIgEyAYVK18fCIYfCIQIAMpA4ATfCITIA8gGVatIAMpA5gTIA8gF1StfHx8Ihd8Ihl8Ig8gAykDqBIgAykDoBIiDiAUfCAOVK18fCIcfCIUQgBCAEL9//P/z///+Yl/EMkDIANBoBFqIAMpA7gRIg5CAEKr1f7///+//7l/QgAQyQMgA0GQEWogDkIAQv//z4rr///VHkIAEMkDIANBgBFqIA5CAEKk7MO1j9S0mOcAQgAQyQMgA0HwEGogDkIAQr+llJzP8NK75ABCABDJAyADQeAQaiAOQgBC19mumuT26Y3LAEIAEMkDIANB0BBqIA5CAEKazf/Lo73EgBpCABDJAyADQbAUaiANQgBCrarmqNvQz7yaf0IAEMkDIANBsBBqIAMpA7AUIh0gAykDkBEiGiADKQOoFCAUIBtUrXwiGyAVIBlWrSIZIBAgEVStIh4gAykDwBAiHyADKQPIESAWIBhWrXx8Ihh8IhEgAykD8BJ8IhUgEyAXVq0gAykDiBMgECATVq18fHwiFnwiECADKQOAEnwiEyAPIBxWrSADKQOYEiAPIBJUrXx8fCISfCIXfCIPIAMpA6gRIAMpA6ARIg4gFHwgDlStfHwiHHwiFEIAQgBC/f/z/8////mJfxDJAyADQaAQaiADKQO4ECIOQgBCq9X+////v/+5f0IAEMkDIANBkBBqIA5CAEL//8+K6///1R5CABDJAyADQYAQaiAOQgBCpOzDtY/UtJjnAEIAEMkDIANB8A9qIA5CAEK/pZScz/DSu+QAQgAQyQMgA0HgD2ogDkIAQtfZrprk9umNywBCABDJAyADQdAPaiAOQgBCms3/y6O9xIAaQgAQyQMgA0HAFGogDUIAQqrHq5bZ/KPMEUIAEMkDIANBsA9qIAMpA8AUIiAgAykDkBAiISADKQO4FCAUIB1UrXwiHSAXIBtUrSIbIBAgGVStIhkgESAeVK0iHiADKQPADyIiIAMpA8gQIBggH1StfHwiGHwiDiADKQPgEnwiFyAVIBZWrSADKQP4EiARIBVWrXx8fCIWfCIRIAMpA/ARfCIVIBIgE1StIAMpA4gSIBAgE1atfHx8IhJ8IhAgAykDgBF8IhMgDyAcVq0gAykDmBEgDyAaVK18fHwiHHwiGnwiDyADKQOoECADKQOgECINIBR8IA1UrXx8Ih98IhRCAEIAQv3/8//P///5iX8QyQMgA0GgD2ogAykDuA8iDUIAQqvV/v///7//uX9CABDJAyADQZAPaiANQgBC///Piuv//9UeQgAQyQMgA0GAD2ogDUIAQqTsw7WP1LSY5wBCABDJAyADQfAOaiANQgBCv6WUnM/w0rvkAEIAEMkDIANB4A5qIA1CAELX2a6a5PbpjcsAQgAQyQMgA0HQDmogDUIAQprN/8ujvcSAGkIAEMkDIAMpA9gOIAMpA9AOIiMgAykD2A8gAykD0A8iJCADKQPYECADKQPQECIlIAMpA9gRIAMpA9ARIiYgAykD2BIgAykD0BIiJyAOIB5UrSADKQPIDyAYICJUrXx8fCINICdUrXwgDSANIBYgF1StIAMpA+gSIA4gF1atfHx8Ig5WrXwgDiARIBlUrSIOfCINIA5UrXx8Ig4gJlStfCAOIA4gAykD6BEgDSANIAMpA+ARfCIXVq18IBcgFyASIBVUrSADKQP4ESARIBVWrXx8fCINVq18fCIRVq18IBEgECAbVK0iDiANfCINIA5UrSIVfCIOIBVUrXx8IhEgJVStfCARIAMpA+gQIA4gDiADKQPgEHwiFVatfCAVIBUgAykD+BAgDSANIAMpA/AQfCIOVq18IA4gDiATIBxWrSADKQOIESAQIBNWrXx8fCINVq18fCIOVq18fCIQIBFUrXwgECAOIBogHVStIhMgDXwiDSATVK0iE3wiDiATVK0iE3wiECATVK18fCITICRUrXwgEyADKQPoDyAQIBAgAykD4A98IhFWrXwgESADKQP4DyAOIA4gAykD8A98IhBWrXwgECAQIAMpA4gQIA0gDSADKQOAEHwiDlatfCAOIA4gDyAfVq0gAykDmBAgDyAhVK18fHwiDVatfHwiDlatfHwiDyARVK18fCIQIBNUrXwgECAPIA4gDSADKQPIFCAUICBUrXwiE3wiESATVK0iE3wiDSATVK0iE3wiDiATVK0iE3wiDyATVK18fCIQICNUrXwgECADKQPoDiAPIA8gAykD4A58IhNWrXwgEyADKQP4DiAOIA4gAykD8A58Ig9WrXwgDyADKQOIDyANIA0gAykDgA98Ig5WrXwgDiADKQOYDyARIAMpA5APIhF8Ig0gEVStfCANIAMpA6gPIBQgAykDoA8iEXwgEVStfHwiHCANVK18fCIXIA5UrXx8IhggD1StfHwiGSATVK18fCIbIBBUrXwiHUKazf/Lo73EgBpSDQICQCAbQtfZrprk9umNywBWDQBCms3/y6O9xIAaIR0gG0LX2a6a5PbpjcsAUg0DIBlCv6WUnM/w0rvkAFYNACAZQr+llJzP8NK75ABSBEBC19mumuT26Y3LACEbDAQLIBhCpOzDtY/UtJjnAFYNACAYQqTsw7WP1LSY5wBSDQIgF0L//8+K6///1R5WDQAgF0L//8+K6///1R5SBEBCpOzDtY/UtJjnACEYDAMLIBxCq9X+////v/+5f1oNAEL//8+K6///1R4hF0Kk7MO1j9S0mOcAIRgMAgtCf0IAIBtC19mumuT26Y3LAH0iDSAZQr+llJzP8NK75ABUIBlCv6WUnM/w0rvkAH0iDiAYQqTsw7WP1LSY5wBUIBhCpOzDtY/UtJjnAH0iDyAXQv//z4rr///VHlQgF0L//8+K6///1R59IhQgHEKr1f7///+//7l/VK0iEFRyrSITVHKtIhFUcq0iFVQbIR0gFCAQfSEXIA8gE30hGCAOIBF9IRkgDSAVfSEbIBxC1aqBgICAwIDGAHwhHAwCCyADQQA2AuAUIANB3BRqIANB2BRqIANB4BRqQaCJwAAQlwQAC0K/pZScz/DSu+QAIRlC19mumuT26Y3LACEbCyADKALsGiIEBEAgAygC8BogBEECdBDfBAsCQCADKALkFCIERQ0AIAQgBEEMbEETakF4cSIFakEJaiIERQ0AIAMoAuAUIAVrIAQQ3wQLIAMoAuAXIgRBgICAgHhGIARFckUEQCADKALkFyAEQQJ0EN8ECwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAkECaw4LAQAAAAIAAAAAAAMACyADQQA2AvAUIANBATYC5BQgA0GIicAANgLgFCADQgQ3AugUIANB4BRqQcCKwAAQqAQAC0HRzsUALQAAGkHgAEEIENYEIgRFDQIgBCABKQMANwMAIAQgASkDMDcDMCAEQShqIAFBKGopAwA3AwAgBEEgaiABQSBqKQMANwMAIARBGGogAUEYaikDADcDACAEQRBqIAFBEGopAwA3AwAgBEEIaiABQQhqKQMANwMAIARBOGogAUE4aikDADcDACAEQUBrIAFBQGspAwA3AwAgBEHIAGogAUHIAGopAwA3AwAgBEHQAGogAUHQAGopAwA3AwAgBEHYAGogAUHYAGopAwA3AwAMCwtB0c7FAC0AABpBoAJBCBDWBCIERQ0JIAFBkAFqIQdBuAEhBUIAIRJCACERQgAhEEIAIQ5CACENQgAhFgNAIANBkARqIAEgBWopAwAiD0IAIBxCABDJAyADQaAEaiAPQgAgF0IAEMkDIANBsARqIA9CACAYQgAQyQMgA0HABGogD0IAIBlCABDJAyADQdAEaiAPQgAgG0IAEMkDIANB4ARqIA9CACAdQgAQyQMgA0GABGogAykDkAQiFSAWfCIUQgBCAEL9//P/z///+Yl/EMkDIANB8ANqIAMpA4gEIg9CAEKr1f7///+//7l/QgAQyQMgA0HgA2ogD0IAQv//z4rr///VHkIAEMkDIANB0ANqIA9CAEKk7MO1j9S0mOcAQgAQyQMgA0HAA2ogD0IAQr+llJzP8NK75ABCABDJAyADQbADaiAPQgBC19mumuT26Y3LAEIAEMkDIANBoANqIA9CAEKazf/Lo73EgBpCABDJAyADKQOoAyASIAMpA+AEIhp8Ig8gAykD2AQgESADKQPQBCISfCITIBJUrXwgEyADKQPIBCADKQPABCIRIBB8IhAgEVStfCAQIAMpA7gEIAMpA7AEIhEgDnwiDiARVK18IA4gAykDqAQgAykDoAQiESANfCINIBFUrXwgDSADKQOYBCAUIBVUrXx8IhIgDVStfHwiDSAOVK18fCIOIBBUrXx8IhAgE1StfHwiEyADKQOgA3wiFSATVK18IBUgFSADKQO4AyAQIBAgAykDsAN8IhFWrXwgESARIAMpA8gDIA4gDiADKQPAA3wiEFatfCAQIBAgAykD2AMgDSANIAMpA9ADfCIOVq18IA4gDiADKQPoAyASIAMpA+ADIhJ8Ig0gElStfCANIAMpA/gDIBQgAykD8AMiEnwgElStfHwiFiANVK18fCINVq18fCIOVq18fCIQVq18fCIR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IAMgGTcD8BQgAyAbNwPoFCADIBI3A+AUIARB4ANqIAEgA0HgFGoQvQIgBCADKQOAGzcDACAEQQhqIANBiBtqKQMANwMAIARBEGogA0GQG2opAwA3AwAgBEEYaiADQZgbaikDADcDACAEQSBqIANBoBtqKQMANwMAIARBKGogA0GoG2opAwA3AwAgBEG4BGogC0EoaikDADcDACAEQbAEaiALQSBqKQMANwMAIARBqARqIAtBGGopAwA3AwAgBEGgBGogC0EQaikDADcDACAEQZgEaiALQQhqKQMANwMAIAQgCykDADcDkAQgBEHYAGogB0EoaikDADcDACAEQdAAaiAHQSBqKQMANwMAIARByABqIAdBGGopAwA3AwAgBEFAayAHQRBqKQMANwMAIARBOGogB0EIaikDADcDACAEIAcpAwA3AzAgBEGIAWogA0HYG2opAwA3AwAgBEGAAWogA0HQG2opAwA3AwAgBEH4AGogA0HIG2opAwA3AwAgBEHwAGogA0HAG2opAwA3AwAgBEHoAGogA0G4G2opAwA3AwAgBCADKQOwGzcDYCAEQbgBaiAIQShqKQMANwMAIARBsAFqIAhBIGopAwA3AwAgBEGoAWogCEEYaikDADcDACAEQaABaiAIQRBqKQMANwMAIARBmAFqIAhBCGopAwA3AwAgBCAIKQMANwOQASAEQegBaiADQYgcaikDADcDACAEQeABaiADQYAcaikDADcDACAEQdgBaiADQfgbaikDADcDACAEQdABaiADQfAbaikDADcDACAEQcgBaiADQegbaikDADcDACAEIAMpA+AbNwPAASAEQZgCaiAGQShqKQMANwMAIARBkAJqIAZBIGopAwA3AwAgBEGIAmogBkEYaikDADcDACAEQYACaiAGQRBqKQMANwMAIARB+AFqIAZBCGopAwA3AwAgBCAGKQMANwPwASAEQcgCaiADQbgcaikDADcDACAEQcACaiADQbAcaikDADcDACAEQbgCaiADQagcaikDADcDACAEQbACaiADQaAcaikDADcDACAEQagCaiADQZgcaikDADcDACAEIAMpA5AcNwOgAiAEQfgCaiAJQShqKQMANwMAIARB8AJqIAlBIGopAwA3AwAgBEHoAmogCUEYaikDADcDACAEQeACaiAJQRBqKQMANwMAIARB2AJqIAlBCGopAwA3AwAgBCAJKQMANwPQAiAEQagDaiADQegcaikDADcDACAEQaADaiADQeAcaikDADcDACAEQZgDaiADQdgcaikDADcDACAEQZADaiADQdAcaikDADcDACAEQYgDaiADQcgcaikDADcDACAEIAMpA8AcNwOAAyAEQdgDaiAKQShqKQMANwMAIARB0ANqIApBIGopAwA3AwAgBEHIA2ogCkEYaikDADcDACAEQcADaiAKQRBqKQMANwMAIARBuANqIApBCGopAwA3AwAgBCAKKQMANwOwAwwFC0EIQcAEEP8EAAsgEULX2a6a5PbpjcsAVg0AAkAgEULX2a6a5PbpjcsAUgRAIA0hDyAOIRQgECETIBEhFQwBCyAQQr+llJzP8NK75ABWDQFC19mumuT26Y3LACEVIBBCv6WUnM/w0rvkAFIEQCANIQ8gDiEUIBAhEwwBCyAOQqTsw7WP1LSY5wBWDQFCv6WUnM/w0rvkACETIA5CpOzDtY/UtJjnAFIEQCANIQ8gDiEUDAELIA1C///Piuv//9UeVg0BQqTsw7WP1LSY5wAhFCANQv//z4rr///VHlIEQCANIQ8MAQtC///Piuv//9UeIQ8gFkKq1f7///+//7l/Vg0BC0Kazf/Lo73EgBohEgwBCyANQv//z4rr///VHn0iFCAWQqvV/v///7//uX9UrSITfSEPIA5CpOzDtY/UtJjnAH0iFSANQv//z4rr///VHlQgEyAUVnKtIg19IRQgEEK/pZScz/DSu+QAfSIaIA5CpOzDtY/UtJjnAFQgDSAVVnKtIg19IRMgEULX2a6a5PbpjcsAfSIOIBBCv6WUnM/w0rvkAFQgDSAaVnKtIg19IRUgEiARQtfZrprk9umNywBUIA0gDlZyrX1Cms3/y6O9xIAafSESIBZC1aqBgICAwIDGAHwhFgsgAyAWNwOIFSADIA83A4AVIAMgFDcD+BQgAyATNwPwFCADIBU3A+gUIAMgEjcD4BQgA0GQHGogASADQeAUahC9AiABQegBaiEGIAFBwAFqIQhBACEFQgAhEkIAIRFCACEQQgAhDkIAIQ1CACEWA0AgA0HAAmogBSAGaikDACIPQgAgHEIAEMkDIANB0AJqIA9CACAXQgAQyQMgA0HgAmogD0IAIBhCABDJAyADQfACaiAPQgAgGUIAEMkDIANBgANqIA9CACAbQgAQyQMgA0GQA2ogD0IAIB1CABDJAyADQbACaiADKQPAAiIVIBZ8IhRCAEIAQv3/8//P///5iX8QyQMgA0GgAmogAykDuAIiD0IAQqvV/v///7//uX9CABDJAyADQZACaiAPQgBC///Piuv//9UeQgAQyQMgA0GAAmogD0IAQqTsw7WP1LSY5wBCABDJAyADQfABaiAPQgBCv6WUnM/w0rvkAEIAEMkDIANB4AFqIA9CAELX2a6a5PbpjcsAQgAQyQMgA0HQAWogD0IAQprN/8ujvcSAGkIAEMkDIAMpA9gBIBIgAykDkAMiGnwiDyADKQOIAyARIAMpA4ADIhJ8IhMgElStfCATIAMpA/gCIAMpA/ACIhEgEHwiECARVK18IBAgAykD6AIgAykD4AIiESAOfCIOIBFUrXwgDiADKQPYAiADKQPQAiIRIA18Ig0gEVStfCANIAMpA8gCIBQgFVStfHwiEiANVK18fCINIA5UrXx8Ig4gEFStfHwiECATVK18fCITIAMpA9ABfCIVIBNUrXwgFSAVIAMpA+gBIBAgECADKQPgAXwiEVatfCARIBEgAykD+AEgDiAOIAMpA/ABfCIQVq18IBAgECADKQOIAiANIA0gAykDgAJ8Ig5WrXwgDiAOIAMpA5gCIBIgAykDkAIiEnwiDSASVK18IA0gAykDqAIgFCADKQOgAiISfCASVK18fCIWIA1UrXx8Ig1WrXx8Ig5WrXx8IhBWrXx8IhFWrXwgDyATVq0gAykDmAMgDyAaVK18fHwhEiAFQQhrIgVBUEcNAAsgAUEwaiEFAkACQCASQprN/8ujvcSAGlYNACASQprN/8ujvcSAGlIEQCANIQ8gDiEUIBAhEyARIRUMAgsgEULX2a6a5PbpjcsAVg0AAkAgEULX2a6a5PbpjcsAUgRAIA0hDyAOIRQgECETIBEhFQwBCyAQQr+llJzP8NK75ABWDQFC19mumuT26Y3LACEVIBBCv6WUnM/w0rvkAFIEQCANIQ8gDiEUIBAhEwwBCyAOQqTsw7WP1LSY5wBWDQFCv6WUnM/w0rvkACETIA5CpOzDtY/UtJjnAFIEQCANIQ8gDiEUDAELIA1C///Piuv//9UeVg0BQqTsw7WP1LSY5wAhFCANQv//z4rr///VHlIEQCANIQ8MAQtC///Piuv//9UeIQ8gFkKq1f7///+//7l/Vg0BC0Kazf/Lo73EgBohEgwBCyANQv//z4rr///VHn0iFCAWQqvV/v///7//uX9UrSITfSEPIA5CpOzDtY/UtJjnAH0iFSANQv//z4rr///VHlQgEyAUVnKtIg19IRQgEEK/pZScz/DSu+QAfSIaIA5CpOzDtY/UtJjnAFQgDSAVVnKtIg19IRMgEULX2a6a5PbpjcsAfSIOIBBCv6WUnM/w0rvkAFQgDSAaVnKtIg19IRUgEiARQtfZrprk9umNywBUIA0gDlZyrX1Cms3/y6O9xIAafSESIBZC1aqBgICAwIDGAHwhFgsgAyAWNwOIFSADIA83A4AVIAMgFDcD+BQgAyATNwPwFCADIBU3A+gUIAMgEjcD4BQgA0HAHGogBSADQeAUahC9AiABQZgCaiEJIAFB8AFqIQZBACEFQgAhEkIAIRFCACEQQgAhDkIAIQ1CACEWA0AgA0HwAGogBSAJaikDACIPQgAgHEIAEMkDIANBgAFqIA9CACAXQgAQyQMgA0GQAWogD0IAIBhCABDJAyADQaABaiAPQgAgGUIAEMkDIANBsAFqIA9CACAbQgAQyQMgA0HAAWogD0IAIB1CABDJAyADQeAAaiADKQNwIhUgFnwiFEIAQgBC/f/z/8////mJfxDJAyADQdAAaiADKQNoIg9CAEKr1f7///+//7l/QgAQyQMgA0FAayAPQgBC///Piuv//9UeQgAQyQMgA0EwaiAPQgBCpOzDtY/UtJjnAEIAEMkDIANBIGogD0IAQr+llJzP8NK75ABCABDJAyADQRBqIA9CAELX2a6a5PbpjcsAQgAQyQMgAyAPQgBCms3/y6O9xIAaQgAQyQMgAykDCCASIAMpA8ABIhp8Ig8gAykDuAEgESADKQOwASISfCITIBJUrXwgEyADKQOoASADKQOgASIRIBB8IhAgEVStfCAQIAMpA5gBIAMpA5ABIhEgDnwiDiARVK18IA4gAykDiAEgAykDgAEiESANfCINIBFUrXwgDSADKQN4IBQgFVStfHwiEiANVK18fCINIA5UrXx8Ig4gEFStfHwiECATVK18fCITIAMpAwB8IhUgE1StfCAVIBUgAykDGCAQIBAgAykDEHwiEVatfCARIBEgAykDKCAOIA4gAykDIHwiEFatfCAQIBAgAykDOCANIA0gAykDMHwiDlatfCAOIA4gAykDSCASIAMpA0AiEnwiDSASVK18IA0gAykDWCAUIAMpA1AiEnwgElStfHwiFiANVK18fCINVq18fCIOVq18fCIQVq18fCIRVq18IA8gE1atIAMpA8gBIA8gGlStfHx8IRIgBUEIayIFQVBHDQALIAFB4ABqIQECQAJAIBJCms3/y6O9xIAaVg0AIBJCms3/y6O9xIAaUgRAIA0hFyAOIRggECEZIBEhGwwCCyARQtfZrprk9umNywBWDQACQCARQtfZrprk9umNywBSBEAgDSEXIA4hGCAQIRkgESEbDAELIBBCv6WUnM/w0rvkAFYNAULX2a6a5PbpjcsAIRsgEEK/pZScz/DSu+QAUgRAIA0hFyAOIRggECEZDAELIA5CpOzDtY/UtJjnAFYNAUK/pZScz/DSu+QAIRkgDkKk7MO1j9S0mOcAUgRAIA0hFyAOIRgMAQsgDUL//8+K6///1R5WDQFCpOzDtY/UtJjnACEYIA1C///Piuv//9UeUgRAIA0hFwwBC0L//8+K6///1R4hFyAWQqrV/v///7//uX9WDQELQprN/8ujvcSAGiESDAELIA1C///Piuv//9UefSIPIBZCq9X+////v/+5f1StIhR9IRcgDkKk7MO1j9S0mOcAfSITIA1C///Piuv//9UeVCAPIBRUcq0iDX0hGCAQQr+llJzP8NK75AB9Ig8gDkKk7MO1j9S0mOcAVCANIBNWcq0iDX0hGSARQtfZrprk9umNywB9Ig4gEEK/pZScz/DSu+QAVCANIA9Wcq0iDX0hGyASIBFC19mumuT26Y3LAFQgDSAOVnKtfUKazf/Lo73EgBp9IRIgFkLVqoGAgIDAgMYAfCEWCyADIBY3A4gVIAMgFzcDgBUgAyAYNwP4FCADIBk3A/AUIAMgGzcD6BQgAyASNwPgFCAEQcABaiABIANB4BRqEL0CIAQgAykDkBw3AwAgBEEIaiADQZgcaikDADcDACAEQRBqIANBoBxqKQMANwMAIARBGGogA0GoHGopAwA3AwAgBEEgaiADQbAcaikDADcDACAEQShqIANBuBxqKQMANwMAIARBmAJqIAZBKGopAwA3AwAgBEGQAmogBkEgaikDADcDACAEQYgCaiAGQRhqKQMANwMAIARBgAJqIAZBEGopAwA3AwAgBEH4AWogBkEIaikDADcDACAEIAYpAwA3A/ABIARB2ABqIAdBKGopAwA3AwAgBEHQAGogB0EgaikDADcDACAEQcgAaiAHQRhqKQMANwMAIARBQGsgB0EQaikDADcDACAEQThqIAdBCGopAwA3AwAgBCAHKQMANwMwIARBiAFqIANB6BxqKQMANwMAIARBgAFqIANB4BxqKQMANwMAIARB+ABqIANB2BxqKQMANwMAIARB8ABqIANB0BxqKQMANwMAIARB6ABqIANByBxqKQMANwMAIAQgAykDwBw3A2AgBEG4AWogCEEoaikDADcDACAEQbABaiAIQSBqKQMANwMAIARBqAFqIAhBGGopAwA3AwAgBEGgAWogCEEQaikDADcDACAEQZgBaiAIQQhqKQMANwMAIAQgCCkDADcDkAEMAQtBCEGgAhD/BAALIAAgAjYCCCAAIAQ2AgQgACACNgIAIANB8BxqJAALpocBAgp/G34jAEHwHGsiAyQAIAMgAjYC3BQgA0EMNgLYFAJAAkAgAkEMRgRAIANB4BRqECYgA0HwE2ogAykD8BciDUIAQsau0OHB5sfvdEIAEMkDIANB4BNqIAMpA/ATQn6DIhRCAEIAQv3/8//P///5iX8QyQMgA0HQE2ogAykD6BMiDkIAQqvV/v///7//uX9CABDJAyADQcATaiAOQgBC///Piuv//9UeQgAQyQMgA0HAEmogDkIAQqTsw7WP1LSY5wBCABDJAyADQcARaiAOQgBCv6WUnM/w0rvkAEIAEMkDIANBwBBqIA5CAELX2a6a5PbpjcsAQgAQyQMgA0HAD2ogDkIAQprN/8ujvcSAGkIAEMkDIANBgBRqIA1CAELxicTO4NS5uwpCABDJAyADQbATaiADKQOAFCIQIAMpA8ATIhMgAykD+BN8Ig8gAykD2BMgAykD0BMiDiAUfCAOVK18fCIRfCIUQgBCAEL9//P/z///+Yl/EMkDIANBoBNqIAMpA7gTIg5CAEKr1f7///+//7l/QgAQyQMgA0GQE2ogDkIAQv//z4rr///VHkIAEMkDIANBgBNqIA5CAEKk7MO1j9S0mOcAQgAQyQMgA0HwEmogDkIAQr+llJzP8NK75ABCABDJAyADQeASaiAOQgBC19mumuT26Y3LAEIAEMkDIANB0BJqIA5CAEKazf/Lo73EgBpCABDJAyADQZAUaiAN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A0HwCGogAykDgAkiFSAWfCIUQgBCAEL9//P/z///+Yl/EMkDIANB4AhqIAMpA/gIIg9CAEKr1f7///+//7l/QgAQyQMgA0HQCGogD0IAQv//z4rr///VHkIAEMkDIANBwAhqIA9CAEKk7MO1j9S0mOcAQgAQyQMgA0GwCGogD0IAQr+llJzP8NK75ABCABDJAyADQaAIaiAPQgBC19mumuT26Y3LAEIAEMkDIANBkAhqIA9CAEKazf/Lo73EgBpCABDJAyADKQOYCCASIAMpA9AJIhp8Ig8gAykDyAkgESADKQPACSISfCITIBJUrXwgEyADKQO4CSADKQOwCSIRIBB8IhAgEVStfCAQIAMpA6gJIAMpA6AJIhEgDnwiDiARVK18IA4gAykDmAkgAykDkAkiESANfCINIBFUrXwgDSADKQOICSAUIBVUrXx8IhIgDVStfHwiDSAOVK18fCIOIBBUrXx8IhAgE1StfHwiEyADKQOQCHwiFSATVK18IBUgFSADKQOoCCAQIBAgAykDoAh8IhFWrXwgESARIAMpA7gIIA4gDiADKQOwCHwiEFatfCAQIBAgAykDyAggDSANIAMpA8AIfCIOVq18IA4gDiADKQPYCCASIAMpA9AIIhJ8Ig0gElStfCANIAMpA+gIIBQgAykD4AgiEnwgElStfHwiFiANVK18fCINVq18fCIOVq18fCIQVq18fCIRVq18IA8gE1atIAMpA9gJIA8gGlStfHx8IRIgBUEIayIFQVBHDQALIAFBgANqIQUCQAJAIBJCms3/y6O9xIAaVg0AIBJCms3/y6O9xIAaUgRAIA0hDyAOIRQgECETIBEhFQwCCyARQtfZrprk9umNywBWDQACQCARQtfZrprk9umNywBSBEAgDSEPIA4hFCAQIRMgESEVDAELIBBCv6WUnM/w0rvkAFYNAULX2a6a5PbpjcsAIRUgEEK/pZScz/DSu+QAUgRAIA0hDyAOIRQgECETDAELIA5CpOzDtY/UtJjnAFYNAUK/pZScz/DSu+QAIRMgDkKk7MO1j9S0mOcAUgRAIA0hDyAOIRQMAQsgDUL//8+K6///1R5WDQFCpOzDtY/UtJjnACEUIA1C///Piuv//9UeUgRAIA0hDwwBC0L//8+K6///1R4hDyAWQqrV/v///7//uX9WDQELQprN/8ujvcSAGiES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1f7///+//7l/VK0iFH0hFyAOQqTsw7WP1LSY5wB9IhMgDUL//8+K6///1R5UIA8gFFRyrSINfSEYIBBCv6WUnM/w0rvkAH0iDyAOQqTsw7WP1LSY5wBUIA0gE1ZyrSINfSEZIBFC19mumuT26Y3LAH0iDiAQQr+llJzP8NK75ABUIA0gD1ZyrSINfSEbIBIgEULX2a6a5PbpjcsAVCANIA5Wcq19QprN/8ujvcSAGn0hEiAWQtWqgYCAgMCAxgB8IRYLIAMgFjcDiBUgAyAXNwOAFSADIBg3A/gUIAMgGTcD8BQgAyAbNwPoFCADIBI3A+AUIARB8AFqIAEgA0HgFGoQgwIgBEHIAmogB0EoaikDADcDACAEQcACaiAHQSBqKQMANwMAIARBuAJqIAdBGGopAwA3AwAgBEGwAmogB0EQaikDADcDACAEQagCaiAHQQhqKQMANwMAIAQgBykDADcDoAIgBCAIKQMANwPQAiAEQdgCaiAIQQhqKQMANwMAIARB4AJqIAhBEGopAwA3AwAgBEHoAmogCEEYaikDADcDACAEQfACaiAIQSBqKQMANwMAIARB+AJqIAhBKGopAwA3AwAgBEGoA2ogBkEoaikDADcDACAEQaADaiAGQSBqKQMANwMAIARBmANqIAZBGGopAwA3AwAgBEGQA2ogBkEQaikDADcDACAEQYgDaiAGQQhqKQMANwMAIAQgBikDADcDgAMgBEHYA2ogCUEoaikDADcDACAEQdADaiAJQSBqKQMANwMAIARByANqIAlBGGopAwA3AwAgBEHAA2ogCUEQaikDADcDACAEQbgDaiAJQQhqKQMANwMAIAQgCSkDADcDsAMgBEGIBGogCkEoaikDADcDACAEQYAEaiAKQSBqKQMANwMAIARB+ANqIApBGGopAwA3AwAgBEHwA2ogCkEQaikDADcDACAEQegDaiAKQQhqKQMANwMAIAQgCikDADcD4AMgBEG4BGogC0EoaikDADcDACAEQbAEaiALQSBqKQMANwMAIARBqARqIAtBGGopAwA3AwAgBEGgBGogC0EQaikDADcDACAEQZgEaiALQQhqKQMANwMAIAQgCykDADcDkAQgBEEoaiADQagbaikDADcDACAEQSBqIANBoBtqKQMANwMAIARBGGogA0GYG2opAwA3AwAgBEEQaiADQZAbaikDADcDACAEQQhqIANBiBtqKQMANwMAIAQgAykDgBs3AwAgBEHYAGogA0HYG2opAwA3AwAgBEHQAGogA0HQG2opAwA3AwAgBEHIAGogA0HIG2opAwA3AwAgBEFAayADQcAbaikDADcDACAEQThqIANBuBtqKQMANwMAIAQgAykDsBs3AzAgBEGIAWogA0GIHGopAwA3AwAgBEGAAWogA0GAHGopAwA3AwAgBEH4AGogA0H4G2opAwA3AwAgBEHwAGogA0HwG2opAwA3AwAgBEHoAGogA0HoG2opAwA3AwAgBCADKQPgGzcDYCAEQbgBaiADQbgcaikDADcDACAEQbABaiADQbAcaikDADcDACAEQagBaiADQagcaikDADcDACAEQaABaiADQaAcaikDADcDACAEQZgBaiADQZgcaikDADcDACAEIAMpA5AcNwOQASAEQegBaiADQegcaikDADcDACAEQeABaiADQeAcaikDADcDACAEQdgBaiADQdgcaikDADcDACAEQdABaiADQdAcaikDADcDACAEQcgBaiADQcgcaikDADcDACAEIAMpA8AcNwPAAQwFC0EIQcAEEP8EAAsgEULX2a6a5PbpjcsAVg0AAkAgEULX2a6a5PbpjcsAUgRAIA0hDyAOIRQgECETIBEhFQwBCyAQQr+llJzP8NK75ABWDQFC19mumuT26Y3LACEVIBBCv6WUnM/w0rvkAFIEQCANIQ8gDiEUIBAhEwwBCyAOQqTsw7WP1LSY5wBWDQFCv6WUnM/w0rvkACETIA5CpOzDtY/UtJjnAFIEQCANIQ8gDiEUDAELIA1C///Piuv//9UeVg0BQqTsw7WP1LSY5wAhFCANQv//z4rr///VHlIEQCANIQ8MAQtC///Piuv//9UeIQ8gFkKq1f7///+//7l/Vg0BC0Kazf/Lo73EgBohEgwBCyANQv//z4rr///VHn0iFCAWQqvV/v///7//uX9UrSITfSEPIA5CpOzDtY/UtJjnAH0iFSANQv//z4rr///VHlQgEyAUVnKtIg19IRQgEEK/pZScz/DSu+QAfSIaIA5CpOzDtY/UtJjnAFQgDSAVVnKtIg19IRMgEULX2a6a5PbpjcsAfSIOIBBCv6WUnM/w0rvkAFQgDSAaVnKtIg19IRUgEiARQtfZrprk9umNywBUIA0gDlZyrX1Cms3/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GDcD+BQgAyAZNwPwFCADIBs3A+gUIAMgEjcD4BQgBEHgAGogASADQeAUahCDAiAEQbgBaiAHQShqKQMANwMAIARBsAFqIAdBIGopAwA3AwAgBEGoAWogB0EYaikDADcDACAEQaABaiAHQRBqKQMANwMAIARBmAFqIAdBCGopAwA3AwAgBCAHKQMANwOQASAEIAgpAwA3A8ABIARByAFqIAhBCGopAwA3AwAgBEHQAWogCEEQaikDADcDACAEQdgBaiAIQRhqKQMANwMAIARB4AFqIAhBIGopAwA3AwAgBEHoAWogCEEoaikDADcDACAEQZgCaiAGQShqKQMANwMAIARBkAJqIAZBIGopAwA3AwAgBEGIAmogBkEYaikDADcDACAEQYACaiAGQRBqKQMANwMAIARB+AFqIAZBCGopAwA3AwAgBCAGKQMANwPwASAEQShqIANBuBxqKQMANwMAIARBIGogA0GwHGopAwA3AwAgBEEYaiADQagcaikDADcDACAEQRBqIANBoBxqKQMANwMAIARBCGogA0GYHGopAwA3AwAgBCADKQOQHDcDACAEQdgAaiADQegcaikDADcDACAEQdAAaiADQeAcaikDADcDACAEQcgAaiADQdgcaikDADcDACAEQUBrIANB0BxqKQMANwMAIARBOGogA0HIHGopAwA3AwAgBCADKQPAHDcDMAwBC0EIQaACEP8EAAsgACACNgIIIAAgBDYCBCAAIAI2AgAgA0HwHGokAAvnagIRfxV+IwBBgBFrIgQkACAEQQA2AowPIARCgICAgIABNwKEDyACrUIwfiIVpyEJAkACQAJAAkAgFUIgiKcgCUH4////B0tyDQACQCAJRQRAQQghBwwBC0HRzsUALQAAGkEIIQUgCUEIENYEIgdFDQEgAkUNAEEAIQUgAiEGA0AgBSAJRg0BIAUgB2oiDSABIAVqIgspAwA3AwAgDUEoaiALQShqKQMANwMAIA1BIGogC0EgaikDADcDACANQRhqIAtBGGopAwA3AwAgDUEQaiALQRBqKQMANwMAIA1BCGogC0EIaikDADcDACAFQTBqIQUgBkEBayIGDQALCyAEIAI2AowPIAQgBzYCiA8gBCACNgKEDyADRQRAIAQoAoQPIQMgAgRAIAJBMGwhBiAHIQEDQCAEQcAPaiABQShqKQMAIhU3AwAg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A/AOIiRCP4iEfCIgICFUrXwgICAgIAMpA+gPIiEgJEIBhnwiJCAhVK18IiBWrXwiISAOQgGGIBBCP4iEfCIfICFUrXwiHlatfCIQIBFCAYYgE0I/iIR8IiEgEFStfCIRIB1UrXwiECAVQgGGIA1CP4iEfCINIBBUrXwiDiAWVK18IhAgD0IBhiASQj+IhHwiEiAQVK18IhAgFFStfHwhEyADKQOIDyADKQOYDyADKQOoDyADKQO4DyADKQPIDyADKQPYDyADKQPQDyIPICNCfYN8IA9UrXwiFSADKQPAD3wiDyAVVK18IA8gJHwiFSAPVK18IhQgAykDsA98Ig8gFFStfCAPICB8IhQgD1StfCIWIAMpA6APfCIPIBZUrXwgDyAffCIWIA9UrXwiHSADKQOQD3wiDyAdVK18IA8gHnwiHSAPVK18Ih4gAykDgA98Ig8gHlStfCAPICF8Ih4gD1StfCIPUA0FIA8gEXwiESAPVCIERQ0FIAStIg8gDXwiDSAPWg0FIA0gD1StIg8gDnwiDiAPWg0FIA4gD1StIg8gEnwiEiAPWg0FIA8gElatIg8gEHwiECAPWg0FIA8gEFatIg8gE3wiEyAPVAwGC0Hs9sEAEOgEAAtBgPbBAEEzQdz2wQAQ/gMACyAAIAIpAzA3AzAgACACKQMANwMAIABB2ABqIAJB2ABqKQMANwMAIABB0ABqIAJB0ABqKQMANwMAIABByABqIAJByABqKQMANwMAIABBQGsgAkFAaykDADcDACAAQThqIAJBOGopAwA3AwAgAEEIaiACQQhqKQMANwMAIABBEGogAkEQaikDADcDACAAQRhqIAJBGGopAwA3AwAgAEEgaiACQSBqKQMANwMAIABBKGogAkEoaikDADcDAAwGCyAAIAEpAzA3AzAgACABKQMANwMAIABB2ABqIAFB2ABqKQMANwMAIABB0ABqIAFB0ABqKQMANwMAIABByABqIAFByABqKQMANwMAIABBQGsgAUFAaykDADcDACAAQThqIAFBOGopAwA3AwAgAEEIaiABQQhqKQMANwMAIABBEGogAUEQaikDADcDACAAQRhqIAFBGGopAwA3AwAgAEEgaiABQSBqKQMANwMAIABBKGogAUEoaikDADcDAAwFC0Kk7MO1j9S0mOcAIAEpA0giECACKQNIIhN9Ig4gASkD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IAIpAwghDSABKQMQIRggASkDGCEZIAIpAxghDiABKQMgIRogAikDICESIAEpAyghFyACKQMoIREgAikDEAshECASIBp9IhUgESAXVK0iFH0hEyAOIBl9IhYgEiAaVCAUIBVWcq0iFX0hEiAQIBh9IhQgDiAZVCAVIBZWcq0iFX0hDiANIBt9IhYgFCAVVCAQIBhUcq0iFX0hECANIBtUIBUgFlZyIQQgDyAcfSEUIBEgF30MAQtCpOzDtY/UtJjnACABKQMYIhkgAikDGCIQfSITIAEpAyAiGiACKQMgIg5UIBogDn0iDiABKQMoIhcgAikDKCISVK0iDVRyrSIRfSIVfSIUIA4gDX0iDkL//8+K6///1R5WQv//z4rr///VHiAOfSINIBcgEn0iFkKr1f7///+//7l/Vq0iHVRyrSIOfSESQr+llJzP8NK75AAgASkDECIYIAIpAxAiHn0iICAQIBlWIBEgE1ZyrSIQfSITfSIRIA4gFFYgFUKk7MO1j9S0mOcAVnKtIhV9IQ5C19mumuT26Y3LACABKQMIIhsgAikDCCIUfSIjIBggHlQgECAgVnKtIh59IiB9IiEgESAVVCATQr+llJzP8NK75ABWcq0iE30hECATICFWICBC19mumuT26Y3LAFZyIQQgDSAdfSETIBQgG1YgHiAjVnKtIA8gHH18QprN/8ujvcSAGnwhFEKr1f7///+//7l/IBZ9CzcD2BAgAyATNwPQECADIBI3A8gQIAMgDjcDwBAgAyAQNwO4ECADIBQgBK19NwOwECADQfgPaiADQcAYaiADQbAQahBMCyADKAL4DwRAIAMgAykDiBA3A7gQIAMgAykDgBA3A7AQQYz3wQBBKyADQbAQakH89sEAQbj3wQAQygMACyADQeAGaiADKQOgECIdQgAgAykDqBAiHkIAEMkDIANB0AZqIAMpA5gQIiBCACAeQgAQyQMgA0HABmogAykDkBAiI0IAIB5CABDJAyADQbAGaiADKQOIECIhQgAgHkIAEMkDIANBoAZqIAMpA4AQIiRCACAeQgAQyQMgA0GwB2ogIEIAIB1CABDJAyADQaAHaiAjQgAgHUIAEMkDIANBkAdqICFCACAdQgAQyQMgA0GAB2ogJEIAIB1CABDJAyADQfAHaiAjQgAgIEIAEMkDIANB4AdqICFCACAgQgAQyQMgA0HQB2ogJEIAICBCABDJAyADQaAIaiAhQgAgI0IAEMkDIANBkAhqICRCACAjQgAQyQMgA0HACGogJEIAICFCABDJAyADQZAGaiAeQgAgHkIAEMkDIANB8AZqIB1CACAdQgAQyQMgA0HAB2ogIEIAICBCABDJAyADQYAIaiAjQgAgI0IAEMkDIANBsAhqICFCACAhQgAQyQMgA0HQCGogJEIAICRCABDJAyADQYAGaiADKQOQBiIoQv3/8//P///5iX9+IhBCAEKr1f7///+//7l/QgAQyQMgA0HwBWogEEIAQv//z4rr///VHkIAEMkDIANB4AVqIBBCAEKk7MO1j9S0mOcAQgAQyQMgA0HQBWogEEIAQr+llJzP8NK75ABCABDJAyADQcAFaiAQQgBC19mumuT26Y3LAEIAEMkDIANBsAVqIBBCAEKazf/Lo73EgBpCABDJAyADKQPICCADKQOYCCADKQOoCCADKQPoByADKQP4ByADKQOoByADKQO4ByADKQPYBiADKQPoBiITIAMpA9AGfCIQIBNUrXwiEiADKQPABnwiEyADKQOwB3wiDiATVK18Ig0gAykDyAYgEiATVq18IhIgAykDsAZ8IhF8IhMgDVStfCATIBMgAykDoAd8IhNWrXwiDyADKQO4BiARIBJUrXwiFSADKQOgBnwiFHwiEiADKQOQB3wiDSADKQPwB3wiESANVK18IhYgDSASVK0gAykDmAcgDyASVq18fCIPIAMpA6gGIBQgFVStfHwiEiADKQOAB3wiFXwiDSAWVK18IA0gDSADKQPgB3wiDVatfCIUIBIgFVatIAMpA4gHIA8gElatfHx8IhIgAykD0Ad8Ig8gAykDoAh8IhUgD1StfCIWIA8gElStIAMpA9gHIBIgFFStfHx8IhIgFlStfCASIBIgAykDkAh8IhJWrXwiDyADKQPACHwiFCAPVK18Ig9CP4ggAykD2AggAykD0AgiHyAPQgGGIBRCP4iEfCIWIB9UrXwgFiADKQO4CCADKQOwCCIPIBJCAYYgFUI/iIR8Ih8gD1StfCAfIAMpA4gIIAMpA4AIIiIgDUIBhiARQj+IhHwiDyAiVK18IA8gDyADKQPIByADKQPAByImIBNCAYYgDkI/iIR8IiIgJlStfCAiICIgAykD+AYgAykD8AYiJSAQQgGGIAMpA+AGIidCP4iEfCImICVUrXwgJiAmIAMpA5gGIiUgJ0IBhnwiJyAlVK18IiZWrXwiJSAOQgGGIBBCP4iEfCIpICVUrXwiIlatfCIQIBFCAYYgE0I/iIR8IiUgEFStfCIPVq18IhAgFUIBhiANQj+IhHwiESAQVK18Ig4gH1StfCIQIBRCAYYgEkI/iIR8IhMgEFStfCIQIBZUrXx8IRJBACEIAn8CQCADKQO4BSADKQPIBSADKQPYBSADKQPoBSADKQP4BSADKQOIBiAoIAMpA4AGIg18IA1UrXwiFSADKQPwBXwiDSAVVK18IA0gJ3wiFSANVK18IhQgAykD4AV8Ig0gFFStfCANICZ8IhQgDVStfCIWIAMpA9AFfCINIBZUrXwgDSApfCIWIA1UrXwiHyADKQPABXwiDSAfVK18IA0gInwiHyANVK18IiIgAykDsAV8Ig0gIlStfCANICV8IiIgDVStfCINUA0AIA0gD3wiDyANVCIERQ0AIAStIg0gEXwiESANWg0AIA0gEVatIg0gDnwiDiANWg0AIA0gDlatIg0gE3wiEyANWg0AIA0gE1atIg0gEHwiECANWg0AIA0gEFatIg0gEnwiEiANVAwBC0EACyEHIANBoAVqIBVC/f/z/8////mJf34iDUIAQqvV/v///7//uX9CABDJAyADQZAFaiANQgBC///Piuv//9UeQgAQyQMgA0GABWogDUIAQqTsw7WP1LSY5wBCABDJAyADQfAEaiANQgBCv6WUnM/w0rvkAEIAEMkDIANB4ARqIA1CAELX2a6a5PbpjcsAQgAQyQMgA0HQBGogDUIAQprN/8ujvcSAGkIAEMkDAkAgAykD2AQgAykD6AQgAykD+AQgAykDiAUgAykDmAUgAykDqAUgAykDoAUiDSAVfCANVK18IhUgAykDkAV8Ig0gFVStfCANIBR8IhUgDVStfCIUIAMpA4AFfCINIBRUrXwgDSAWfCIUIA1UrXwiFiADKQPwBHwiDSAWVK18IA0gH3wiFiANVK18Ih8gAykD4AR8Ig0gH1StfCANICJ8Ih8gDVStfCIiIAMpA9AEfCINICJUrXwgDSAPfCIiIA1UrXwiDVANACANIBF8IhEgDVoNACANIBFWrSINIA58Ig4gDVoNACANIA5WrSINIBN8IhMgDVoNACANIBNWrSINIBB8IhAgDVoNACANIBBWrSINIBJ8IhIgDVQhCAsgA0HABGogFUL9//P/z///+Yl/fiINQgBCq9X+////v/+5f0IAEMkDIANBsARqIA1CAEL//8+K6///1R5CABDJAyADQaAEaiANQgBCpOzDtY/UtJjnAEIAEMkDIANBkARqIA1CAEK/pZScz/DSu+QAQgAQyQMgA0GABGogDUIAQtfZrprk9umNywBCABDJAyADQfADaiANQgBCms3/y6O9xIAaQgAQyQNBACEGAn9BACADKQP4AyADKQOIBCADKQOYBCADKQOoBCADKQO4BCADKQPIBCADKQPABCINIBV8IA1UrXwiDyADKQOwBHwiDSAPVK18IA0gFHwiDyANVK18IhUgAykDoAR8Ig0gFVStfCANIBZ8IhUgDVStfCIUIAMpA5AEfCINIBRUrXwgDSAffCIUIA1UrXwiFiADKQOABHwiDSAWVK18IA0gInwiFiANVK18Ih8gAykD8AN8Ig0gH1StfCANIBF8Ih8gDVStfCINUA0AGkEAIA0gDSAOfCIOWA0AGkEAIA0gDlatIg0gE3wiEyANWg0AGkEAIA0gE1atIg0gEHwiECANWg0AGiANIBBWrSINIBJ8IhIgDVQLIQQgA0HgA2ogD0L9//P/z///+Yl/fiINQgBCq9X+////v/+5f0IAEMkDIANB0ANqIA1CAEL//8+K6///1R5CABDJAyADQcADaiANQgBCpOzDtY/UtJjnAEIAEMkDIANBsANqIA1CAEK/pZScz/DSu+QAQgAQyQMgA0GgA2ogDUIAQtfZrprk9umNywBCABDJAyADQZADaiANQgBCms3/y6O9xIAaQgAQyQMCQCADKQOYAyADKQOoAyADKQO4AyADKQPIAyADKQPYAyADKQPoAyADKQPgAyINIA98IA1UrXwiESADKQPQA3wiDSARVK18IA0gDSAVfCINVq18Ig8gAykDwAN8IhEgD1StfCARIBR8Ig8gEVStfCIVIAMpA7ADfCIRIBVUrXwgESAWfCIVIBFUrXwiFCADKQOgA3wiESAUVK18IBEgH3wiFCARVK18IhYgAykDkAN8IhEgFlStfCARIA4gEXwiEVatfCIOUA0AIA4gE3wiEyAOWg0AIA4gE1atIg4gEHwiECAOWg0AIA4gEFatIg4gEnwiEiAOVCEGCyADQYADaiANQv3/8//P///5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IAVBqAlqKQMANwMAIAFBOGogBUG4CWopAwA3AwAgAUFAayAFQcAJaikDADcDACABQcgAaiAFQcgJaikDADcDACABQdAAaiAFQdAJaikDADcDACABQdgAaiAFQdgJaikDADcDACAAQQI2AgggACABNgIEIABBAjYCAAwICyACIAEpAwA3AwAgAiABKQMwNwMwIAJBKGogAUEoaikDADcDACACQSBqIAFBIGopAwA3AwAgAkEYaiABQRhqKQMANwMAIAJBEGogAUEQaikDADcDACACQQhqIgQgAUEIaikDADcDACACQThqIAFBOGopAwA3AwAgAkFAayABQUBrKQMANwMAIAJByABqIAFByABqKQMANwMAIAJB0ABqIAFB0ABqKQMANwMAIAJB2ABqIAFB2ABqKQMANwMAIAJBiAFqIAFBiAFqKQMANwMAIAJBgAFqIAFBgAFqKQMANwMAIAJB+ABqIAFB+ABqKQMANwMAIAJB8ABqIAFB8ABqKQMANwMAIAJB6ABqIAFB6ABqKQMANwMAIAIgASkDYDcDYCACIAEpA5ABNwOQASACQZgBaiABQZgBaikDADcDACACQaABaiABQaABaikDADcDACACQagBaiABQagBaikDADcDACACQbABaiABQbABaikDADcDACACQbgBaiABQbgBaikDADcDACACQegBaiABQegBaikDADcDACACQeABaiABQeABaikDADcDACACQdgBaiABQdgBaikDADcDACACQdABaiABQdABaikDADcDACACQcgBaiABQcgBaikDADcDACACIAEpA8ABNwPAASACQZgCaiABQZgCaikDADcDACACQZACaiABQZACaikDADcDACACQYgCaiABQYgCaikDADcDACACQYACaiABQYACaikDADcDACACQfgBaiABQfgBaikDADcDACACIAEpA/ABNwPwASACKQMAISogBUGoIGoiCSAEQZgC/AoAACACQaACEN8EIAVBmApqIAVB2CBqKQMANwMAIAVBoApqIAVB4CBqKQMANwMAIAVBqApqIAVB6CBqKQMANwMAIAVBsApqIAVB8CBqKQMANwMAIAVBuApqIAVB+CBqKQMANwMAIAVBkB5qIgsgBUGIIWopAwA3AwAgBUGYHmoiBiAFQZAhaikDADcDACAFQaAeaiIMIAVBmCFqKQMANwMA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IAVB4AlqIAoQuQIgBSkD6BshKiAFKQPwGyErIAVBuAJqIAhBkAL8CgAAIAUgKzcDsAIgBSAqNwOoAiABIAVBqAJqEKQBQdHOxQAtAAAaQaACQQgQ1gQiAUUNCSABIAUpA6ggNwMAIAEgBSkD2CA3AzAgAUEoaiAFQdAgaikDADcDACABQSBqIAVByCBqKQMANwMAIAFBGGogAikDADcDACABQRBqIAVBuCBqKQMANwMAIAFBCGogBUGwIGopAwA3AwAgAUE4aiAFQeAgaikDADcDACABQUBrIAVB6CBqKQMANwMAIAFByABqIAVB8CBqKQMANwMAIAFB0ABqIAVB+CBqKQMANwMAIAFB2ABqIAVBgCFqKQMANwMAIAFBiAFqIAVBsCFqKQMANwMAIAFBgAFqIAVBqCFqKQMANwMAIAFB+ABqIAVBoCFqKQMANwMAIAFB8ABqIAVBmCFqKQMANwMAIAFB6ABqIAVBkCFqKQMANwMAIAEgBSkDiCE3A2AgAUG4AWogBUHgIWopAwA3AwAgAUGwAWogBUHYIWopAwA3AwAgAUGoAWogBUHQIWopAwA3AwAgAUGgAWogBUHIIWopAwA3AwAgAUGYAWogBUHAIWopAwA3AwAgASAFKQO4ITcDkAEgAUHoAWogBUGQImopAwA3AwAgAUHgAWogBUGIImopAwA3AwAgAUHYAWogBUGAImopAwA3AwAgAUHQAWogBUH4IWopAwA3AwAgAUHIAWogBUHwIWopAwA3AwAgASAFKQPoITcDwAEgAUGYAmogBUHAImopAwA3AwAgAUGQAmogBUG4ImopAwA3AwAgAUGIAmogBUGwImopAwA3AwAgAUGAAmogBUGoImopAwA3AwAgAUH4AWogBUGgImopAwA3AwAgASAFKQOYIjcD8AEgAEEGNgIIIAAgATYCBCAAQQY2AgAMBwsgAiABKQMANwMAIAIgASkDMDcDMCACQShqIAFBKGopAwA3AwAgAkEgaiABQSBqKQMANwMAIAJBGGogAUEYaikDADcDACACQRBqIAFBEGopAwA3AwAgAkEIaiIEIAFBCGopAwA3AwAgAkE4aiABQThqKQMANwMAIAJBQGsgAUFAaykDADcDACACQcgAaiABQcgAaikDADcDACACQdAAaiABQdAAaikDADcDACACQdgAaiABQdgAaikDADcDACACQYgBaiABQYgBaikDADcDACACQYABaiABQYABaikDADcDACACQfgAaiABQfgAaikDADcDACACQfAAaiABQfAAaikDADcDACACQegAaiABQegAaikDADcDACACIAEpA2A3A2AgAiABKQOQATcDkAEgAkGYAWogAUGYAWopAwA3AwAgAkGgAWogAUGgAWopAwA3AwAgAkGoAWogAUGoAWopAwA3AwAgAkGwAWogAUGwAWopAwA3AwAgAkG4AWogAUG4AWopAwA3AwAgAkHoAWogAUHoAWopAwA3AwAgAkHgAWogAUHgAWopAwA3AwAgAkHYAWogAUHYAWopAwA3AwAgAkHQAWogAUHQAWopAwA3AwAgAkHIAWogAUHIAWopAwA3AwAgAiABKQPAATcDwAEgAkGYAmogAUGYAmopAwA3AwAgAkGQAmogAUGQAmopAwA3AwAgAkGIAmogAUGIAmopAwA3AwAgAkGAAmogAUGAAmopAwA3AwAgAkH4AWogAUH4AWopAwA3AwAgAiABKQPwATcD8AEgAkHIAmogAUHIAmopAwA3AwAgAkHAAmogAUHAAmopAwA3AwAgAkG4AmogAUG4AmopAwA3AwAgAkGwAmogAUGwAmopAwA3AwAgAkGoAmogAUGoAmopAwA3AwAgAiABKQOgAjcDoAIgAkH4AmogAUH4AmopAwA3AwAgAkHwAmogAUHwAmopAwA3AwAgAkHoAmogAUHoAmopAwA3AwAgAkHgAmogAUHgAmopAwA3AwAgAkHYAmogAUHYAmopAwA3AwAgAiABKQPQAjcD0AIgAkGoA2ogAUGoA2opAwA3AwAgAkGgA2ogAUGgA2opAwA3AwAgAkGYA2ogAUGYA2opAwA3AwAgAkGQA2ogAUGQA2opAwA3AwAgAkGIA2ogAUGIA2opAwA3AwAgAiABKQOAAzcDgAMgAkHYA2ogAUHYA2opAwA3AwAgAkHQA2ogAUHQA2opAwA3AwAgAkHIA2ogAUHIA2opAwA3AwAgAkHAA2ogAUHAA2opAwA3AwAgAkG4A2ogAUG4A2opAwA3AwAgAiABKQOwAzcDsAMgAkGIBGogAUGIBGopAwA3AwAgAkGABGogAUGABGopAwA3AwAgAkH4A2ogAUH4A2opAwA3AwAgAkHwA2ogAUHwA2opAwA3AwAgAkHoA2ogAUHoA2opAwA3AwAgAiABKQPgAzcD4AMgAkG4BGogAUG4BGopAwA3AwAgAkGwBGogAUGwBGopAwA3AwAgAkGoBGogAUGoBGopAwA3AwAgAkGgBGogAUGgBGopAwA3AwAgAkGYBGogAUGYBGopAwA3AwAgAiABKQOQBDcDkAQgAikDACEqIAVBqCBqIgkgBEG4BPwKAAAgAkHABBDfBCAFQdgOaiAFQdggaikDADcDACAFQeAOaiAFQeAgaikDADcDACAFQegOaiAFQeggaikDADcDACAFQfAOaiAFQfAgaikDADcDACAFQfgOaiAFQfggaikDADcDACAFQegSaiAFQYghaikDADcDACAFQfASaiAFQZAhaikDADcDACAFQfgSaiAFQZghaikDADcDACAFQYATaiAFQaAhaikDADcDACAFQYgTaiAFQaghaikDADcDACAFIAUpA9AgNwPQDiAFIAUpA4AhNwPgEiAFQbgTaiAFQdghaikDADcDACAFQbATaiAFQdAhaikDADcDACAFQagTaiAFQcghaikDADcDACAFQaATaiAFQcAhaikDADcDACAFQZgTaiAFQbghaikDADcDACAFQcgTaiAFQeghaikDADcDACAFQdATaiAFQfAhaikDADcDACAFQdgTaiAFQfghaikDADcDACAFQeATaiAFQYAiaikDADcDACAFQegTaiAFQYgiaikDADcDACAFIAUpA7AhNwOQEyAFIAUpA+AhNwPAEyAFQZgUaiAFQbgiaikDADcDACAFQZAUaiAFQbAiaikDADcDACAFQYgUaiAFQagiaikDADcDACAFQYAUaiAFQaAiaikDADcDACAFQfgTaiAFQZgiaikDADcDACAFQcgOaiAFQcggaikDADcDACAFQcAOaiAFQcAgaikDADcDACAFQbgOaiAFQbggaikDADcDACAFQbAOaiAFQbAgaikDADcDACAFIAUpA5AiNwPwEyAFIAUpA6ggNwOoDiAFQfgaaiIGIAVBmCNqKQMANwMAIAVB8BpqIgcgBUGQI2opAwA3AwAgBUHoGmoiCCAFQYgjaikDADcDACAFQeAaaiIKIAVBgCNqKQMANwMAIAVB2BpqIgsgBUH4ImopAwA3AwAgBSAFKQPwIjcD0BogBUGIG2oiDCAFQagjaikDADcDACAFQZAbaiINIAVBsCNqKQMANwMAIAVBmBtqIg4gBUG4I2opAwA3AwAgBUGgG2oiDyAFQcAjaikDADcDACAFQagbaiIQIAVByCNqKQMANwMAIAUgBSkDoCM3A4AbIAVB2BtqIhEgBUH4I2opAwA3AwAgBUHQG2oiEiAFQfAjaikDADcDACAFQcgbaiITIAVB6CNqKQMANwMAIAVBwBtqIhQgBUHgI2opAwA3AwAgBUG4G2oiFSAFQdgjaikDADcDACAFIAUpA9AjNwOwGyAFQbAeaiIWIAVBqCRqKQMANwMAIAVBqB5qIhcgBUGgJGopAwA3AwAgBUGgHmoiGCAFQZgkaikDADcDACAFQZgeaiIZIAVBkCRqKQMANwMAIAVBkB5qIhogBUGIJGopAwA3AwAgBSAFKQOAJDcDiB4gBUHgHmoiGyAFQdgkaikDADcDACAFQdgeaiIcIAVB0CRqKQMANwMAIAVB0B5qIh0gBUHIJGopAwA3AwAgBUHIHmoiHiAFQcAkaikDADcDACAFQcAeaiIfIAVBuCRqKQMANwMAIAUgBSkDsCQ3A7geIAVByBpqIiAgBUHoImopAwA3AwAgBUHAGmoiISAFQeAiaikDADcDACAFQbgaaiIiIAVB2CJqKQMANwMAIAVBsBpqIiMgBUHQImopAwA3AwAgBUGoGmoiJCAFQcgiaikDADcDACAFIAUpA8AiNwOgGiAFQeAbaiICIAVBoBpqIiVB4AD8CgAAIAVBwBxqIiYgBUGAG2oiJ0HgAPwKAAAgBUGgHWoiKCAFQYgeaiIpQeAA/AoAACAFICo3A6AOIAVBgA9qIAVB4BJqQeAA/AoAACAFQeAPaiAFQcATakHgAPwKAAAgBUHAEGogAkGgAvwKAABB0c7FAC0AABpBwARBCBDWBCIBRQ0JIAEgAykDADcDACABIAMpAzA3AzAgAUEoaiADQShqKQMANwMAIAFBIGogA0EgaikDADcDACABQRhqIANBGGopAwA3AwAgAUEQaiADQRBqKQMANwMAIAFBCGoiBCADQQhqKQMANwMAIAFBOGogA0E4aikDADcDACABQUBrIANBQGspAwA3AwAgAUHIAGogA0HIAGopAwA3AwAgAUHQAGogA0HQAGopAwA3AwAgAUHYAGogA0HYAGopAwA3AwAgAUGIAWogA0GIAWopAwA3AwAgAUGAAWogA0GAAWopAwA3AwAgAUH4AGogA0H4AGopAwA3AwAgAUHwAGogA0HwAGopAwA3AwAgAUHoAGogA0HoAGopAwA3AwAgASADKQNgNwNgIAEgAykDkAE3A5ABIAFBmAFqIANBmAFqKQMANwMAIAFBoAFqIANBoAFqKQMANwMAIAFBqAFqIANBqAFqKQMANwMAIAFBsAFqIANBsAFqKQMANwMAIAFBuAFqIANBuAFqKQMANwMAIAFB6AFqIANB6AFqKQMANwMAIAFB4AFqIANB4AFqKQMANwMAIAFB2AFqIANB2AFqKQMANwMAIAFB0AFqIANB0AFqKQMANwMAIAFByAFqIANByAFqKQMANwMAIAEgAykDwAE3A8ABIAFBmAJqIANBmAJqKQMANwMAIAFBkAJqIANBkAJqKQMANwMAIAFBiAJqIANBiAJqKQMANwMAIAFBgAJqIANBgAJqKQMANwMAIAFB+AFqIANB+AFqKQMANwMAIAEgAykD8AE3A/ABIAFByAJqIANByAJqKQMANwMAIAFBwAJqIANBwAJqKQMANwMAIAFBuAJqIANBuAJqKQMANwMAIAFBsAJqIANBsAJqKQMANwMAIAFBqAJqIANBqAJqKQMANwMAIAEgAykDoAI3A6ACIAFB+AJqIANB+AJqKQMANwMAIAFB8AJqIANB8AJqKQMANwMAIAFB6AJqIANB6AJqKQMANwMAIAFB4AJqIANB4AJqKQMANwMAIAFB2AJqIANB2AJqKQMANwMAIAEgAykD0AI3A9ACIAFBqANqIANBqANqKQMANwMAIAFBoANqIANBoANqKQMANwMAIAFBmANqIANBmANqKQMANwMAIAFBkANqIANBkANqKQMANwMAIAFBiANqIANBiANqKQMANwMAIAEgAykDgAM3A4ADIAFB2ANqIANB2ANqKQMANwMAIAFB0ANqIANB0ANqKQMANwMAIAFByANqIANByANqKQMANwMAIAFBwANqIANBwANqKQMANwMAIAFBuANqIANBuANqKQMANwMAIAEgAykDsAM3A7ADIAFBiARqIANBiARqKQMANwMAIAFBgARqIANBgARqKQMANwMAIAFB+ANqIANB+ANqKQMANwMAIAFB8ANqIANB8ANqKQMANwMAIAFB6ANqIANB6ANqKQMANwMAIAEgAykD4AM3A+ADIAFBuARqIANBuARqKQMANwMAIAFBsARqIANBsARqKQMANwMAIAFBqARqIANBqARqKQMANwMAIAFBoARqIANBoARqKQMANwMAIAFBmARqIANBmARqKQMANwMAIAEgAykDkAQ3A5AEIAEpAwAhKiAJIARBuAT8CgAAIAFBwAQQ3wQgBUHYFGogBUHYIGopAwA3AwAgBUHgFGogBUHgIGopAwA3AwAgBUHoFGogBUHoIGopAwA3AwAgBUHwFGogBUHwIGopAwA3AwAgBUH4FGogBUH4IGopAwA3AwAgBUHoGGogBUGIIWopAwA3AwAgBUHwGGogBUGQIWopAwA3AwAgBUH4GGogBUGYIWopAwA3AwAgBUGAGWogBUGgIWopAwA3AwAgBUGIGWogBUGoIWopAwA3AwAgBSAFKQPQIDcD0BQgBSAFKQOAITcD4BggBUG4GWogBUHYIWopAwA3AwAgBUGwGWogBUHQIWopAwA3AwAgBUGoGWogBUHIIWopAwA3AwAgBUGgGWogBUHAIWopAwA3AwAgBUGYGWogBUG4IWopAwA3AwAgBUHIGWogBUHoIWopAwA3AwAgBUHQGWogBUHwIWopAwA3AwAgBUHYGWogBUH4IWopAwA3AwAgBUHgGWogBUGAImopAwA3AwAgBUHoGWogBUGIImopAwA3AwAgBSAFKQOwITcDkBkgBSAFKQPgITcDwBkgBUGYGmogBUG4ImopAwA3AwAgBUGQGmogBUGwImopAwA3AwAgBUGIGmogBUGoImopAwA3AwAgBUGAGmogBUGgImopAwA3AwAgBUH4GWogBUGYImopAwA3AwAgBUHIFGogBUHIIGopAwA3AwAgBUHAFGogBUHAIGopAwA3AwAgBUG4FGogBUG4IGopAwA3AwAgBUGwFGogBUGwIGopAwA3AwAgBSAFKQOQIjcD8BkgBSAFKQOoIDcDqBQgBiAFQZgjaikDADcDACAHIAVBkCNqKQMANwMAIAggBUGII2opAwA3AwAgCiAFQYAjaikDADcDACALIAVB+CJqKQMANwMAIAUgBSkD8CI3A9AaIAwgBUGoI2opAwA3AwAgDSAFQbAjaikDADcDACAOIAVBuCNqKQMANwMAIA8gBUHAI2opAwA3AwAgECAFQcgjaikDADcDACAFIAUpA6AjNwOAGyARIAVB+CNqKQMANwMAIBIgBUHwI2opAwA3AwAgEyAFQegjaikDADcDACAUIAVB4CNqKQMANwMAIBUgBUHYI2opAwA3AwAgBSAFKQPQIzcDsBsgFiAFQagkaikDADcDACAXIAVBoCRqKQMANwMAIBggBUGYJGopAwA3AwAgGSAFQZAkaikDADcDACAaIAVBiCRqKQMANwMAIAUgBSkDgCQ3A4geIBsgBUHYJGopAwA3AwAgHCAFQdAkaikDADcDACAdIAVByCRqKQMANwMAIB4gBUHAJGopAwA3AwAgHyAFQbgkaikDADcDACAFIAUpA7AkNwO4HiAgIAVB6CJqKQMANwMAICEgBUHgImopAwA3AwAgIiAFQdgiaikDADcDACAjIAVB0CJqKQMANwMAICQgBUHIImopAwA3AwAgBSAFKQPAIjcDoBogAiAlQeAA/AoAACAmICdB4AD8CgAAICggKUHgAPwKAAAgBSAqNwOgFCAFQYAVaiAFQeAYakHgAPwKAAAgBUHgFWogBUHAGWpB4AD8CgAAIAVBwBZqIAJBoAL8CgAAIAVBoA5qIQcjAEGAEmsiASQAIAFBwA1qIgMgBUGgFGoiAhBxIAFBqAlqQfCDwAApAwA3AwAgAUGgCWpB6IPAACkDADcDACABQZgJakHgg8AAKQMANwMAIAFBkAlqQdiDwAApAwA3AwAgAUGICWpB0IPAACkDADcDACABQbgJakIANwMAIAFBwAlqQgA3AwAgAUHICWpCADcDACABQdAJakIANwMAIAFB2AlqQgA3AwAgAUHIg8AAKQMANwOACSABQgA3A7AJIAFB4A9qIgZBAEHgAPwLACABQcAQaiABQYAJaiIEQeAA/AoAACABQaARakEAQeAA/AsAIAQgAkGgAmoiCBBxIAEgBiAEELkCIAFB4AZqIgYgAyABEI0BIAFBwAdqIAFBoA5qIAFB4ABqEI0BIAFBoAhqIAFBgA9qIAFBwAFqEI0BIAQgBhBmIAkiAwJ+IAEoAoAJQQFGBEAgA0IANwMIQgEMAQsgASkDiAkhKiABKQOQCSErIAFB0ARqIAFBmAlqQZAC/AoAACABICs3A8gEIAEgKjcDwAQgAUGACWogAiABQcAEaiIEELkCIAFBwA1qIgYgCBC0AiABQaAOaiACQYADahC0AiABQYAPaiACQeADahC0AiABIARBoAL8CgAAIAFBoAtqIAYgARC5AiABKQOACSEqIAEpA4gJISsgAUEQaiABQZAJakGwBPwKAAAgASArNwMIIAEgKjcDACADQQhqIAcgARCbAkIACzcDACABQYASaiQAIAUpA7ggISogBSkDsCAhKyAFKAKoIEEBRg0FIAVB2ARqIAVBwCBqIgJBsAT8CgAAIAUgKjcD0AQgBSArNwPIBCADIAVByARqEKABQdHOxQAtAAAaQcAEQQgQ1gQiAUUNCSABIAUpA6ggNwMAIAEgBSkD2CA3AzAgAUEoaiAFQdAgaikDADcDACABQSBqIAVByCBqKQMANwMAIAFBGGogAikDADcDACABQRBqIAVBuCBqKQMANwMAIAFBCGogBUGwIGopAwA3AwAgAUE4aiAFQeAgaikDADcDACABQUBrIAVB6CBqKQMANwMAIAFByABqIAVB8CBqKQMANwMAIAFB0ABqIAVB+CBqKQMANwMAIAFB2ABqIAVBgCFqKQMANwMAIAFBiAFqIAVBsCFqKQMANwMAIAFBgAFqIAVBqCFqKQMANwMAIAFB+ABqIAVBoCFqKQMANwMAIAFB8ABqIAVBmCFqKQMANwMAIAFB6ABqIAVBkCFqKQMANwMAIAEgBSkDiCE3A2AgAUG4AWogBUHgIWopAwA3AwAgAUGwAWogBUHYIWopAwA3AwAgAUGoAWogBUHQIWopAwA3AwAgAUGgAWogBUHIIWopAwA3AwAgAUGYAWogBUHAIWopAwA3AwAgASAFKQO4ITcDkAEgAUHoAWogBUGQImopAwA3AwAgAUHgAWogBUGIImopAwA3AwAgAUHYAWogBUGAImopAwA3AwAgAUHQAWogBUH4IWopAwA3AwAgAUHIAWogBUHwIWopAwA3AwAgASAFKQPoITcDwAEgAUGYAmogBUHAImopAwA3AwAgAUGQAmogBUG4ImopAwA3AwAgAUGIAmogBUGwImopAwA3AwAgAUGAAmogBUGoImopAwA3AwAgAUH4AWogBUGgImopAwA3AwAgASAFKQOYIjcD8AEgAUHIAmogBUHwImopAwA3AwAgAUHAAmogBUHoImopAwA3AwAgAUG4AmogBUHgImopAwA3AwAgAUGwAmogBUHYImopAwA3AwAgAUGoAmogBUHQImopAwA3AwAgASAFKQPIIjcDoAIgAUH4AmogBUGgI2opAwA3AwAgAUHwAmogBUGYI2opAwA3AwAgAUHoAmogBUGQI2op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GVStfHwhEkEAIQECfwJAIAIpA5gLIAIpA6gLIAIpA7gLIAIpA8gLIAIpA9gLIAIpA+gLIAIpA+ALIhEgHUJ9g3wgEVStfCIWIAIpA9ALfCIRIBZUrXwgESAffCIWIBFUrXwiGCACKQPAC3wiESAYVK18IBEgHHwiGCARVK18IhkgAikDsAt8IhEgGVStfCARICN8IhkgEVStfCIaIAIpA6ALfCIRIBpUrXwgESAbfCIaIBFUrXwiFyACKQOQC3wiESAXVK18IBEgHnwiFyARVK18IhFQDQAgESAmfCImIBFUIgRFDQAgBK0iESAQfCIQIBFaDQAgECARVK0iESATfCITIBFaDQAgESATVq0iESAVfCIVIBFaDQAgESAVVq0iESAUfCIUIBFaDQAgESAUVq0iESASfCISIBFUDAELQQALIQsgAkHACGogFkL9//P/z///+Yl/fiIRQgBCq9X+////v/+5f0IAEMkDIAJBsAhqIBFCAEL//8+K6///1R5CABDJAyACQaAIaiARQgBCpOzDtY/UtJjnAEIAEMkDIAJBkAhqIBFCAEK/pZScz/DSu+QAQgAQyQMgAkGACGogEUIAQtfZrprk9umNywBCABDJAyACQfAHaiARQgBCms3/y6O9xIAaQgAQyQMCQCACKQP4ByACKQOICCACKQOYCCACKQOoCCACKQO4CCACKQPICCACKQPACCIRIBZ8IBFUrXwiFiACKQOwCHwiESAWVK18IBEgGHwiFiARVK18IhggAikDoAh8IhEgGFStfCARIBl8IhggEVStfCIZIAIpA5AIfCIRIBlUrXwgESAafCIZIBFUrXwiGiACKQOACHwiESAaVK18IBEgF3wiGiARVK18IhcgAikD8Ad8IhEgF1StfCARICZ8IhcgEVStfCIRUA0AIBAgEXwiECARWg0AIBAgEVStIhEgE3wiEyARWg0AIBEgE1atIhEgFXwiFSARWg0AIBEgFVatIhEgFHwiFCARWg0AIBEgFFatIhEgEnwiEiARVCEBCyACQeAHaiAWQv3/8//P///5iX9+IhFCAEKr1f7///+//7l/QgAQyQMgAkHQB2ogEUIAQv//z4rr///VHkIAEMkDIAJBwAdqIBFCAEKk7MO1j9S0mOcAQgAQyQMgAkGwB2ogEUIAQr+llJzP8NK75ABCABDJAyACQaAHaiAR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QgAQyQMgAkHQAmogF0IAICJCABDJAyACQeACaiAXQgAgIEIAEMkDIAJB8AJqIBdCACAkQgAQyQMgAkGAA2ogF0IAICVCABDJAyACQZADaiAXQgAgJ0IAEMkDIAJBsAJqIAIpA8ACIhsgEnwiF0IAQgBC/f/z/8////mJfxDJAyACQaACaiACKQO4AiISQgBCq9X+////v/+5f0IAEMkDIAJBkAJqIBJCAEL//8+K6///1R5CABDJAyACQYACaiASQgBCpOzDtY/UtJjnAEIAEMkDIAJB8AFqIBJCAEK/pZScz/DSu+QAQgAQyQMgAkHgAWogEkIAQtfZrprk9umNywBCABDJAyACQdABaiASQgBCms3/y6O9xIAaQgAQyQMgAikD2AEgAikDkAMiHiAVfCIVIAIpA4gDIBMgAikDgAMiE3wiEiATVK18IBIgEiACKQP4AiAUIAIpA/ACIhR8IhMgFFStfCATIAIpA+gCIAIpA+ACIhQgEHwiECAUVK18IBAgECACKQPYAiACKQPQAiIUIBF8IhEgFFStfCARIAIpA8gCIBcgG1StfHwiIyARVK18fCIQVq18fCIRIBNUrXx8IhJWrXx8IhsgAikD0AF8IhMgG1StfCATIBMgAikD6AEgEiACKQPgAXwiFCASVK18IBQgFCACKQP4ASARIAIpA/ABfCIdIBFUrXwgHSACKQOIAiAQIBAgAikDgAJ8IhBWrXwgECACKQOYAiACKQOQAiIRICN8IhIgEVStfCASIBIgAikDqAIgAikDoAIiESAXfCARVK18fCISVq18fCIRIBBUrXx8IhAgHVStfHwiFFatfHwiE1atfCAVIBtWrSACKQOYAyAVIB5UrXx8fCEVIANBCGsiA0F4Rw0ACwJ+AkAgFUKazf/Lo73EgBpWDQAgFUKazf/Lo73EgBpSBEAgESEiIBAhICAUISQgEyElIBUhJyASDAILIBNC19mumuT26Y3LAFYNAEKazf/Lo73EgBohJyATQtfZrprk9umNywBSBEAgESEiIBAhICAUISQgEyElIBIMAgsgFEK/pZScz/DSu+QAVg0AQtfZrprk9umNywAhJSAUQr+llJzP8NK75ABSBEAgESEiIBAhICAUISQgEgwCCyAQQqTsw7WP1LSY5wBWDQBCv6WUnM/w0rvkACEkIBBCpOzDtY/UtJjnAFIEQCARISIgECEgIBIMAgsgEUL//8+K6///1R5WDQBCpOzDtY/UtJjnACEgIBFC///Piuv//9UeUSASQqrV/v///7//uX9WcQ0AIBEhIiASDAELIBFC///Piuv//9UefSIXIBJCq9X+////v/+5f1StIht9ISIgEEKk7MO1j9S0mOcAfSIhIBFC///Piuv//9UeVCAXIBtUcq0iEX0hICAUQr+llJzP8NK75AB9IhcgEEKk7MO1j9S0mOcAVCARICFWcq0iEH0hJCATQtfZrprk9umNywB9IhEgFEK/pZScz/DSu+QAVCAQIBdWcq0iEH0hJSAVIBNC19mumuT26Y3LAFQgECARVnKtfUKazf/Lo73EgBp9IScgEkLVqoGAgIDAgMYAfAshIUIAIRFBKCEDQgAhEkIAIRBCACEUQgAhE0IAIRUDQCACQfAAaiACQbAOaiADaikDACIXQgAgL0IAEMkDIAJBgAFqIBdCACAtQgAQyQMgAkGQAWogF0IAIChCABDJAyACQaABaiAXQgAgKkIAEMkDIAJBsAFqIBdCACArQgAQyQMgAkHAAWogF0IAICxCABDJAyACQeAAaiACKQNwIhsgEnwiF0IAQgBC/f/z/8////mJfxDJAyACQdAAaiACKQNoIhJCAEKr1f7///+//7l/QgAQyQMgAkFAayASQgBC///Piuv//9UeQgAQyQMgAkEwaiASQgBCpOzDtY/UtJjnAEIAEMkDIAJBIGogEkIAQr+llJzP8NK75ABCABDJAyACQRBqIBJCAELX2a6a5PbpjcsAQgAQyQMgAiASQgBCms3/y6O9xIAaQgAQyQMgAikDCCACKQPAASIeIBV8IhUgAikDuAEgEyACKQOwASITfCISIBNUrXwgEiASIAIpA6gBIBQgAikDoAEiFHwiEyAUVK18IBMgAikDmAEgAikDkAEiFCAQfCIQIBRUrXwgECAQIAIpA4gBIAIpA4ABIhQgEXwiESAUVK18IBEgAikDeCAXIBtUrXx8IiMgEVStfHwiEFatfHwiESATVK18fCISVq18fCIbIAIpAwB8IhMgG1StfCATIBMgAikDGCASIAIpAxB8IhQgElStfCAUIBQgAikDKCARIAIpAyB8Ih0gEVStfCAdIAIpAzggECAQIAIpAzB8IhBWrXwgECACKQNIIAIpA0AiESAjfCISIBFUrXwgEiASIAIpA1ggAikDUCIRIBd8IBFUrXx8IhJWrXx8IhEgEFStfHwiECAdVK18fCIUVq18fCITVq18IBUgG1atIAIpA8gBIBUgHlStfHx8IRUgA0EIayIDQXhHDQALIAICfgJAIBVCms3/y6O9xIAaVg0AAkAgFUKazf/Lo73EgBpSBEAgFSEsIBMhKyAUISogECEoDAELIBNC19mumuT26Y3LAFYNAUKazf/Lo73EgBohLCATQtfZrprk9umNywBSBEAgEyErIBQhKiAQISgMAQsgFEK/pZScz/DSu+QAVg0BQtfZrprk9umNywAhKyAUQr+llJzP8NK75ABSBEAgFCEqIBAhKAwBCyAQQqTsw7WP1LSY5wBWDQFCv6WUnM/w0rvkACEqIBBCpOzDtY/UtJjnAFIEQCAQISgMAQsgEUL//8+K6///1R5WDQFCpOzDtY/UtJjnACEoIBFC///Piuv//9UeUg0AIBJCqtX+////v/+5f1YNAQsgESEtIBIMAQsgEUL//8+K6///1R59IhcgEkKr1f7///+//7l/VK0iG30hLSAQQqTsw7WP1LSY5wB9Ih0gEUL//8+K6///1R5UIBcgG1RyrSIRfSEoIBRCv6WUnM/w0rvkAH0iFyAQQqTsw7WP1LSY5wBUIBEgHVZyrSIQfSEqIBNC19mumuT26Y3LAH0iESAUQr+llJzP8NK75ABUIBAgF1ZyrSIQfSErIBUgE0LX2a6a5PbpjcsAVCAQIBFWcq19QprN/8ujvcSAGn0hLCASQtWqgYCAgMCAxgB8CyIvNwO4DyACIC03A7APIAIgKDcDqA8gAiAqNwOgDyACICs3A5gPIAIgLDcDkA8gAkGQD2pB+NPBAEEwEPEDDQALCyACICI3A4APIAIgITcDiA8gAiAgNwP4DiACICQ3A/AOIAIgJTcD6A4gAiAnNwPgDgJAIAJB4A5qQYjSwQBBMBDxA0UEQCAlIREgJCESICAhFSAiIRMMAQtC///Piuv//9UeICJ9IhIgIUKr1f7///+//7l/Vq0iEH0hE0Kk7MO1j9S0mOcAICB9IhEgECASViAiQv//z4rr///VHlZyrSISfSEVQr+llJzP8NK75AAgJH0iECARIBJUICBCpOzDtY/UtJjnAFZyrSIRfSESQtfZrprk9umNywAgJX0iFCAQIBFUICRCv6WUnM/w0rvkAFZyrSIQfSERQprN/8ujvcSAGiAQIBRWICVC19mumuT26Y3LAFZyrSAnfH0hJ0Kr1f7///+//7l/ICF9ISELIAAgAikD4A43AwggACAhNwNgIAAgEzcDWCAAIBU3A1AgACASNwNIIAAgETcDQCAAICc3AzggAEEwaiACQYgPaikDADcDACAAQShqIAJBgA9qKQMANwMAIABBIGogAkH4DmopAwA3AwAgAEEYaiACQfAOaikDADcDACAAQRBqIAJB6A5qKQMANwMAIABCATcDAAsgAkGgEGokAAvTSQI3fwd+IwBB0BtrIgUkACAFQQw2AgQgBSACNgLAEgJAAkACQAJAAkACQAJAAkACQCACQQxGBEAgBSAENgLAEiACIARHDQECQAJAAkACQAJAAkACQCACQQJrDgsBAAAAAgAAAAAAAwALIAVBADYC2BggBUEBNgLMGCAFQYiJwAA2AsgYIAVCBDcC0BggBUHIGGpBnIzAABCoBAALQdHOxQAtAAAaQcAAQQgQ1gQiAg0CDAwLQdHOxQAtAAAaQcABQQgQ1gQiAg0CDAwLQdHOxQAtAAAaQYADQQgQ1gQiAg0CDAwLIAIgASkDACI8NwMAIAIgASkDICI9NwMgIAVBKGogPTcDACACQRhqIAFBGGopAwAiPTcDACACQRBqIAFBEGopAwAiPjcDACACQQhqIAFBCGopAwAiPzcDACACQShqIAFBKGopAwAiQDcDACACQTBqIAFBMGopAwAiQTcDACACQThqIAFBOGopAwAiQjcDACAFQRhqID43AwAgBUEgaiA9NwMAIAVBMGogQDcDACAFQThqIEE3AwAgBUFAayBCNwMAIAUgPzcDECACQcAAEN8EQdHOxQAtAAAaIAUgPDcDCEHAAEEIENYEIgFFDQkgASADKQMAIjw3AwAgASADKQMgIj03AyAgBUHoAGogPTcDACABQRhqIANBGGopAwAiPTcDACABQRBqIANBEGopAwAiPjcDACABQQhqIANBCGopAwAiPzcDACABQShqIANBKGopAwAiQDcDACABQTBqIANBMGopAwAiQTcDACABQThqIANBOGopAwAiQjcDACAFQdgAaiA+NwMAIAVB4ABqID03AwAgBUHwAGogQDcDACAFQfgAaiBBNwMAIAVBgAFqIEI3AwAgBSA/NwNQIAFBwAAQ3wQgBSA8NwNIIAVByBhqIgEgBUEIaiAFQcgAahCRAyAFKQPYGCE8IAUpA9AYIT0gBSgCyBhBAUYNBCAFQcABaiAFQYgZaikDADcDACAFQbgBaiAFQYAZaikDADcDACAFQbABaiAFQfgYaikDADcDACAFQagBaiAFQfAYaikDADcDACAFQaABaiAFQegYaikDADcDACAFIAUpA+AYNwOYASAFIDw3A5ABIAUgPTcDiAEgASAFQYgBahCvAyAFKALMGCEBIAUoAsgYIQIgBSgC0BgiA0ECRw0FIAVBkAZqIAFBEGopAwA3AwAgBUGYBmogAUEYaikDADcDACAFQaAGaiABQSBqKQMANwMAIAVBqAZqIAFBKGopAwA3AwAgBUGwBmogAUEwaikDADcDACAFQbgGaiABQThqKQMANwMAIAUgASkDCDcDiAYgASgCBCEDIAEoAgAhBCACBEAgASACQQV0EN8EC0HRzsUALQAAGkHAAEEIENYEIgFFDQkgASADNgIEIAEgBDYCACABIAUpA4gGNwMIIAEgBSkDoAY3AyAgAEECNgIIIAAgATYCBCAAQQI2AgAgAUEQaiAFQZAGaikDADcDACABQRhqIAVBmAZqKQMANwMAIAFBKGogBUGoBmopAwA3AwAgAUEwaiAFQbAGaikDADcDACABQThqIAVBuAZqKQMANwMADAgLIAIgASkDADcDACACIAEpAyA3AyAgAiABKQNANwNAIAJBGGogAUEYaikDADcDACACQRBqIAFBEGopAwA3AwAgAkEIaiIEIAFBCGopAwA3AwAgAkEoaiABQShqKQMANwMAIAJBMGogAUEwaikDADcDACACQThqIAFBOGopAwA3AwAgAkHIAGogAUHIAGopAwA3AwAgAkHQAGogAUHQAGopAwA3AwAgAkHYAGogAUHYAGopAwA3AwAgAkH4AGogAUH4AGopAwA3AwAgAkHwAGogAUHwAGopAwA3AwAgAkHoAGogAUHoAGopAwA3AwAgAiABKQNgNwNgIAIgASkDgAE3A4ABIAJBiAFqIAFBiAFqKQMANwMAIAJBkAFqIAFBkAFqKQMANwMAIAJBmAFqIAFBmAFqKQMANwMAIAIgASkDoAE3A6ABIAJBqAFqIAFBqAFqKQMANwMAIAJBsAFqIAFBsAFqKQMANwMAIAJBuAFqIAFBuAFqKQMA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BUHIGGogBUHIAWoQhQFB0c7FAC0AABpBwAFBCBDWBCIBRQ0JIAEgBSkDyBg3AwAgASAFKQPoGDcDICABIAUpA4gZNwNAIAFBGGogBUHgGGopAwA3AwAgAUEQaiAFQdgYaikDADcDACABQQhqIAVB0BhqKQMANwMAIAFBKGogBUHwGGopAwA3AwAgAUEwaiAFQfgYaikDADcDACABQThqIAVBgBlqKQMANwMAIAFByABqIAVBkBlqKQMANwMAIAFB0ABqIAVBmBlqKQMANwMAIAFB2ABqIAVBoBlqKQMANwMAIAFB+ABqIAVBwBlqKQMANwMAIAFB8ABqIAVBuBlqKQMANwMAIAFB6ABqIAVBsBlqKQMANwMAIAEgBSkDqBk3A2AgAUGYAWogBUHgGWopAwA3AwAgAUGQAWogBUHYGWopAwA3AwAgAUGIAWogBUHQGWopAwA3AwAgASAFKQPIGTcDgAEgAUG4AWogBUGAGmopAwA3AwAgAUGwAWogBUH4GWopAwA3AwAgAUGoAWogBUHwGWopAwA3AwAgASAFKQPoGTcDoAEgAEEGNgIIIAAgATYCBCAAQQY2AgAMBwsgAiABKQMANwMAIAIgASkDIDcDICACIAEpA0A3A0AgAkEYaiABQRhqKQMANwMAIAJBEGogAUEQaikDADcDACACQQhqIgQgAUEIaikDADcDACACQShqIAFBKGopAwA3AwAgAkEwaiABQTBqKQMANwMAIAJBOGogAUE4aikDADcDACACQcgAaiABQcgAaikDADcDACACQdAAaiABQdAAaikDADcDACACQdgAaiABQdgAaikDADcDACACQfgAaiABQfgAaikDADcDACACQfAAaiABQfAAaikDADcDACACQegAaiABQegAaikDADcDACACIAEpA2A3A2AgAiABKQOAATcDgAEgAkGIAWogAUGIAWopAwA3AwAgAkGQAWogAUGQAWopAwA3AwAgAkGYAWogAUGYAWopAwA3AwAgAiABKQOgATcDoAEgAkGoAWogAUGoAWopAwA3AwAgAkGwAWogAUGwAWopAwA3AwAgAkG4AWogAUG4AWopAwA3AwAgAkHYAWogAUHYAWopAwA3AwAgAkHQAWogAUHQAWopAwA3AwAgAkHIAWogAUHIAWopAwA3AwAgAiABKQPAATcDwAEgAkH4AWogAUH4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KQPIBSADKQPYBSADKQOoBiADKQO4BiADKQP4BiADKQOIByADKQO4ByADKQPIByADKQPoByIPIAMpA8AHfCIQIA9UrXwiESADKQOQB3wiDyADKQOwB3wiFCAPVK18IhMgAykDmAcgDyARVK18IhEgAykD0AZ8IhZ8Ig8gE1StfCAPIA8gAykDgAd8Ig9WrXwiGCADKQPYBiARIBZWrXwiGyADKQOABnwiGnwiESADKQPABnwiEyADKQPwBnwiFiATVK18IhwgESATVq0gAykDyAYgESAYVK18fCIYIAMpA4gGIBogG1StfHwiESADKQPwBXwiG3wiEyAcVK18IBMgEyADKQOwBnwiE1atfCIaIBEgG1atIAMpA/gFIBEgGFStfHx8IhEgAykD4AV8IhggAykDoAZ8IhsgGFStfCIcIBEgGFatIAMpA+gFIBEgGlStfHx8IhEgHFStfCARIAMpA9AFfCIYIBFUrXwiESADKQPABXwiGiARVK18IhFCP4ggAykDuAUgAykDsAUiICARQgGGIBpCP4iEfCIcICBUrXwgHCADKQOYBiADKQOQBiIRIBhCAYYgG0I/iIR8IiAgEVStfCAgIAMpA+gGIAMpA+AGIiEgE0IBhiAWQj+IhHwiESAhVK18IBEgAykDqAcgAykDoAciHyAPQgGGIBRCP4iEfCIhIB9UrXwgISADKQPYByADKQPQByIiIBBCAYYgAykD4AciJ0I/iIR8Ih8gIlStfCAfIB8gAykD2AgiIiAnQgGGfCInICJUrXwiH1atfCIiIBRCAYYgEEI/iIR8IiogIlStfCIiICFUrXwiECAWQgGGIA9CP4iEfCIrIBBUrXwiISARVK18IhAgG0IBhiATQj+IhHwiESAQVK18IhAgIFStfCIPIBpCAYYgGEI/iIR8IhQgD1StfCITIBxUrXx8IRZBACEFAn8CQCADKQP4ByADKQOICCADKQOYCCADKQOoCCADKQO4CCADKQPICCADKQPACCIPICVCfYN8IA9UrXwiGCADKQOwCHwiDyAYVK18IA8gJ3wiGCAPVK18IhsgAykDoAh8Ig8gG1StfCAPIB98IhsgD1StfCIaIAMpA5AIfCIPIBpUrXwgDyAqfCIaIA9UrXwiHCADKQOACHwiDyAcVK18IA8gInwiHCAPVK18IiAgAykD8Ad8Ig8gIFStfCAP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gYCAgMCAxgB8IR8MAQsgECEcIBQhGiARIRsLIAMgHzcD+BAgAyAcNwPwECADIBo3A+gQIAMgGzcD4BAgAyAPNwPYECADICE3A9AQIAhCADcDACAJQgA3AwAgCkIANwMAIAtCADcDACADQgA3A4ARIAMgJEIBgzcDqBECQCADQYARaiADQaAQakEwEPEDDQBCACEUQSghAUIAIRBCACETQgAhEUIAIRhCACEWA0AgA0HwAGogA0HQEGogAWopAwAiEkIAIB1CABDJAyADQYABaiASQgAgFUIAEMkDIANBkAFqIBJCACAOQgAQyQMgA0GgAWogEkIAIBdCABDJAyADQbABaiASQgAgGUIAEMkDIANBwAFqIBJCACAeQgAQyQMgA0HgAGogAykDcCIlIBZ8IhZCAEIAQv3/8//P///5iX8QyQMgA0HQAGogAykDaCISQgBCq9X+////v/+5f0IAEMkDIANBQGsgEkIAQv//z4rr///VHkIAEMkDIANBMGogEkIAQqTsw7WP1LSY5wBCABDJAyADQSBqIBJCAEK/pZScz/DSu+QAQgAQyQMgA0EQaiASQgBC19mumuT26Y3LAEIAEMkDIAMgEkIAQprN/8ujvcSAGkIAEMkDIAMpAwggAykDwAEiJyAUfCISIAMpA7gBIAMpA7ABIhQgEHwiECAUVK18IBAgECADKQOoASATIAMpA6ABIhN8IhQgE1StfCAUIBQgAykDmAEgAykDkAEiEyARfCIRIBNUrXwgESARIAMpA4gBIBggAykDgAEiGHwiEyAYVK18IBMgEyADKQN4IBYgJVStfHwiE1atfHwiEVatfHwiFFatfHwiEFatfHwiJSADKQMAfCIiICVUrXwgIiADKQMYIBAgECADKQMQfCIQVq18IBAgAykDKCAUIBQgAykDIHwiFFatfCAUIAMpAzggESARIAMpAzB8IhFWrXwgESADKQNIIAMpA0AiGCATfCITIBhUrXwgEyADKQNYIBYgAykDUCIWfCAWVK18fCIWIBNUrXx8IhggEVStfHwiESAUVK18fCITIBBUrXx8IhAgIlStfCASICVWrSADKQPIASASICdUrXx8fCEUIAFBCGsiAUF4Rw0ACwJAIBRCms3/y6O9xIAaVg0AAkAgFEKazf/Lo73EgBpSBEAgFCEeIBAhGSATIRcgESEODAELIBBC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AEL///////////8AQgAQyQMgAkHgCGogD0IAICRCABDJAyACQaAIaiAPQgAgIUIAEMkDIAJBkAhqIA9CACAfQgAQyQMgAkGACGogD0IAIB1CABDJAyACQdAIaiACKQOwCSIaIAIpA9gJIhEgAikDkAl8Ig98IhggAikDyAkgECACKQPACSIOfCAOVK18fCIVIAIpA+AIfCITQpuUr8Pytajehn9+Ig5CAEJtQgAQyQMgAkHACGogDkIAQn9CABDJAyACQbAIaiAOQgBC////////////AEIAEMkDIAJB8AdqIBJCACAkQgAQyQMgAkGwB2ogEkIAICFCABDJAyACQaAHaiASQgAgH0IAEMkDIAJBkAdqIBJCACAdQgAQyQMgAkHgB2ogAikD6AggEyAVVK18IhYgAikDoAh8IhwgGiACKQOYCSAPIBFUrXwiECACKQOACXwiHnwiFyAVIBhUrSACKQO4CSISIBggGlStfHx8IhF8IhkgAikDwAgiD3wiGiACKQPYCCACKQPQCCIOIBN8IA5UrXx8IhggAikD8Ad8IhtCm5Svw/K1qN6Gf34iDkIAQm1CABDJAyACQdAHaiAOQgBCf0IAEMkDIAJBwAdqIA5CAEL///////////8AQgAQyQMgAkGAB2ogFEIAICRCABDJAyACQcAGaiAUQgAgIUIAEMkDIAJBsAZqIBRCACAfQgAQyQMgAkGgBmogFEIAIB1CABDJAyACQfAGaiACKQP4ByAYIBtWrXwiEyACKQOwB3wiHyAPIAIpA4gJIBAgHlatfCIQIAIpA/AIfCIVIAIpA6AJfCIUIBEgF1StIBIgFyAeVK18fHwiHSACKQOQCHwiFyAZIBxUrSACKQOoCCAWIBxWrXx8fCIefCIWIBggGlStIAIpA8gIIhIgGSAaVq18fHwiEXwiGiACKQPQByIPfCIYIAIpA+gHIAIpA+AHIg4gG3wgDlStfHwiGSACKQOAB3wiG0KblK/D8rWo3oZ/fiIOQgBCbUIAEMkDIAJB4AZqIA5CAEJ/QgAQyQMgAkHQBmogDkIAQv///////////wBCABDJAwJAAkAgAikD2AYgAikDyAcgAikDuAggFCAdVq0gAikDqAkgFCAVVK18fCIOIAIpA/gIIBAgFVatfHwiFSACKQOACHwiFCAXIB5WrSACKQOYCCAXIB1UrXx8fCIXIAIpA7AIfCIQIBdUrXwgECARIBZUrSASIBYgHlStfHx8IhYgEFStfCIQIBQgF1atIAIpA4gIIBQgFVStfHwiEiAOIBVWrXwiEXwiFSACKQOQB3wiFCACKQOoByAWIBYgAikDoAd8Ig5WrXwgDiAOIBogH1StIAIpA7gHIBMgH1atfHx8IhdWrXx8IhYgAikDwAd8IhMgFlStfCATIAIpA9gHIg4gFyAPIBd8Ig9WrXwgDyAPIBggGVatIA4gGCAaVK18fHwiD1atfHwiDiATVK18IhcgFCAWVq0gAikDmAcgFCAVVK18fCIWIBAgFVatIBEgElStfHwiE3wiGiACKQOgBnwiGCACKQO4BiAOIA4gAikDsAZ8IhJWrXwgEiASIAIpA8gGIAIpA4gHIBkgG1atfCIOIAIpA8AGfCIRIA5UrXwgESAPIBF8IhVWrXx8IhFWrXx8IhQgAikD0AZ8IhAgFFStfCAQIBAgAikD6AYiDyARIBEgAikD4AYiDnwiElatfCASIA8gFSAOIBV8IhFWrXwgESACKQP4BiAbIAIpA/AGIg58IA5UrXx8IhwgEVStfHwiESASVK18fCISVq18IhAgFCAYVK0gAikDqAYgGCAaVK18fCIPIBcgGlatIBMgFlStfHwiDnwiFCAQVCAOIA9UciAUQgBTcg0AAkAgFEL///////////8AUQRAQn8hDyASQn9RDQFC////////////ACEUCyASIQ8gESEODAILIBFCf1IEQEL///////////8AIRQgESEODAILIBxCbVoNAEL///////////8AIRRCfyEODAELIBFCAXwiEyAcQm1UrSIPfSEOIBJCAXwiECARQn9SIA8gE1ZyrSIRfSEPIBQgEkJ/UiAQIBFUcq19Qv///////////wB9IRQgHEITfCEcCwJAAkACQCAUIA8gDiAcQiZ8IhIgHFStfCIQIA5UrXwiEyAPVK18Ig8gFFQNAEL///////////8AIRQgDyIOQv///////////wBRBEBCfyEUQv///////////wAhDiATQn9SDQIgEEJ/UgRAIBAhEQwEC0JtIRQgEiIOQm1RDQELIA4gFFoNACAPIQ4MAQsgEEIBfCIXIBJCbVStIg59IREgE0IBfCIWIBBCf1IgDiAXVnKtIg59IRQgDyATQn9SIA4gFlZyrX1C////////////AH0hDiASQhN8IRIMAQsgEyEUIBAhEQsgAiASNwPQDSACIBE3A8gNIAIgFDcDwA0gAiAONwO4DSACQegNaiIFIAJBmA1qIgEgAkG4DWoQXAJ/AkACQCACKALoDUEBRwRAIAJBkA1qIAJBiA5qIgkpAwA3AwAgAkGIDWogAkGADmoiBikDADcDACACQYANaiACQfgNaiIEKQMANwMAIAIgAikD8A03A/gMIAVB767EAEE/ELECIAItAOgNQQFGDQEgAkGwDWogCSkDADcDACACQagNaiAGKQMANwMAIAJBoA1qIAQpAwA3AwAgAiACKQPwDTcDmA0gAkH4DGohBiMAQeAJayIDJAAgA0GYCWpCADcDACADQZAJakIANwMAIANBiAlqQgA3AwAgA0IANwOACSADQbAJakIANwMAIANBqAlqQgA3AwAgA0IANwOgCSADQgE3A7gJAkACQCABIANBgAlqIgRBIBDxAwRAIAEgA0GgCWpBIBDxA0UNASABKQMIIRYgASkDECEQIAEpAwAhDiAGKQMYIRsgBikDECERIAYpAwghEiAGKQMAIRQgASkDGCEXIANB0AlqIglCADcDACADQcgJaiIGQgA3AwAgA0IANwPACSADIBdCAYM3A9gJIANBwAlqIARBIBDxA0UEQANAIBAhFSADQbAIaiARQgAgG0IAEMkDIANBkAhqIBJCACAbQgAQyQMgA0HgB2ogFEIAIBtCABDJAyADQYAIaiASQgAgEUIAEMkDIANB0AdqIBRCACARQgAQyQMgA0HAB2ogFEIAIBJCABDJAyADQfAIaiAbQgAgG0IAEMkDIANBoAhqIBFCACARQgAQyQMgA0HwB2ogEkIAIBJCABDJAyADQbAHaiAUQgAgFEIAEMkDIANB4AhqIAMpA/AIIh5Cm5Svw/K1qN6Gf34iD0IAQm1CABDJAyADQdAIaiAPQgBCf0IAEMkDIANBwAhqIA9CAEL///////////8AQgAQyQMgAykDyAcgAykD2AcgAykD6AcgAykDmAggAykDuAgiDyADKQOQCHwiGCAPVK18Ig8gAykD4Ad8IhIgD1StfCIPIAMpA9AHfCIRIA9UrXwgESADKQOICCASIAMpA4AIfCIbIBJUrXx8IhQgEVStfCIPIAMpA8AHfCITIA9UrXwiEUI/iCADKQO4ByAD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fCIbIBlUrXwgGyADKQO4ASIPIBUgESAVfCIVVq18IBUgFSAgICJWrSAPICAgJlStfHx8IhFWrXx8Ig8gG1StfCIeIBkgHVStIAMpA3ggHSAfVK18fCIZIBQgH1atIBIgE1StfHwiFHwiICADKQMAfCIfIAMpAxggDyADKQMQfCITIA9UrXwgEyADKQMoIAMpA2ggIiAjVq18Ig8gAykDIHwiEiAPVK18IBEgEnwiGyASVK18fCISIBNUrXx8Ih0gAykDMHwiFSAdVK18IBUgAykDSCIRIBIgAykDQCIPfCITIBJUrXwgEyARIA8gG3wiEiAbVK18IBIgAykDWCADKQNQIg8gI3wgD1StfHwiGyASVK18fCISIBNUrXx8Ig8gFVStfCIVIB0gH1StIAMpAwggHyAgVK18fCITIB4gIFatIBQgGVStfHwiEXwiFCAVVCARIBNUciAUQgBTckUEQCAPIBKDQn9SIBtCbVRyIBRC////////////AFJyDQELIBJCAXwiGSAbQm1UrSITfSERIA9CAXwiFSASQn9SIBMgGVZyrSITfSESIBQgD0J/UiATIBVWcq19Qv///////////wB9IRQgG0ITfCEbDAELIBIhESAPIRILIAEgGEIBiCITNwMAIAEgK0I/hiAaQgGIhCIPNwMQIAEgGkI/hiAsQgGIhCIsNwMYIAEgGEI/hiArQgGIhCIrNwMIIAEgA0GACWpBIBDxAw0ACwsgBSAbNwMYIAUgETcDECAFIBI3AwggBSAUNwMADAILIAVBGGpBsNPBACkDADcDACAFQRBqQajTwQApAwA3AwAgBUEIakGg08EAKQMANwMAIAVBmNPBACkDADcDAAwBCyAFIAYpAwA3AwAgBUEYaiAGQRhqKQMANwMAIAVBEGogBkEQaikDADcDACAFQQhqIAZBCGopAwA3AwALIANB4AlqJAAgAkGwBWogAikDgA4iHEIAIAIpA/gNIg9CABDJAyACQaAFaiAcQgAgAikD8A0iEkIAEMkDIAJBkAVqIBxCACACKQPoDSIUQgAQyQMgAkHgBWogD0IAIBJCABDJAyACQdAFaiAPQgAgFEIAEMkDIAJBgAZqIBJCACAUQgAQyQMgAkGABWogHEIAIBxCABDJAyACQcAFaiAPQgAgD0IAEMkDIAJB8AVqIBJCACASQgAQyQMgAkGQ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AEL///////////8AQgAQyQMgAkHAAmogHEIAIChCABDJAyACQYACaiAPQgAgKEIAEMkDIAJB8AFqIBJCACAoQgAQyQMgAkHgAWogFEIAIChCABDJAyACQbACaiACKQOQAyIaIAIpA7gDIhAgAikD8AJ8IhF8IhggAikDqAMgEyACKQOgAyIOfCAOVK18fCIWIAIpA8ACfCITQpuUr8Pytajehn9+Ig5CAEJtQgAQyQMgAkGgAmogDkIAQn9CABDJAyACQZACaiAOQgBC////////////AEIAEMkDIAJB0AFqIBxCACApQgAQyQMgAkGQAWogD0IAIClCABDJAyACQYABaiASQgAgKUIAEMkDIAJB8ABqIBRCACApQgAQyQMgAkHAAWogAikDyAIgEyAWVK18IhUgAikDgAJ8IiEgGiACKQP4AiAQIBFWrXwiECACKQPgAnwiHXwiHiAWIBhUrSACKQOYAyIXIBggGlStfHx8IhZ8IhkgAikDoAIiEXwiGiACKQO4AiACKQOwAiIOIBN8IA5UrXx8IhggAikD0AF8IhtCm5Svw/K1qN6Gf34iDkIAQm1CABDJAyACQbABaiAOQgBCf0IAEMkDIAJBoAFqIA5CAEL///////////8AQgAQyQMgAkHgAGogHEIAICpCABDJAyACQSBqIA9CACAqQgAQyQMgAkEQaiASQgAgKkIAEMkDIAIgFEIAICpCABDJAyACQdAAaiACKQPYASAYIBtWrXwiEyACKQOQAXwiHCARIAIpA+gCIBAgHVatfCIQIAIpA9ACfCIfIAIpA4ADfCIUIBYgHlStIBcgHSAeVq18fHwiHSACKQPwAXwiFyAZICFUrSACKQOIAiAVICFWrXx8fCIefCIWIBggGlStIAIpA6gCIhIgGSAaVq18fHwiEXwiGiACKQOwASIPfCIYIAIpA8gBIAIpA8ABIg4gG3wgDlStfHwiGSACKQNgfCIbQpuUr8Pytajehn9+Ig5CAEJtQgAQyQMgAkFAayAOQgBCf0IAEMkDIAJBMGogDkIAQv///////////wBCABDJAwJAAkAgAikDOCACKQOoASACKQOYAiAUIB1WrSACKQOIAyAUIB9UrXx8Ig4gAikD2AIgECAfVq18fCIVIAIpA+ABfCIUIBcgHlatIAIpA/gBIBcgHVStfHx8IhcgAikDkAJ8IhAgF1StfCAQIBEgFlStIBIgFiAeVK18fHwiFiAQVK18IhAgFCAXVq0gAikD6AEgFCAVVK18fCISIA4gFVatfCIRfCIVIAIpA3B8IhQgAikDiAEgFiAWIAIpA4ABfCIOVq18IA4gGiAcVK0gAikDmAEgEyAcVq18fHwiFyAOVK18fCIWIAIpA6ABfCITIBZUrXwgEyACKQO4ASIOIBcgDyAXfCIPVq18IA8gDyAYIBlWrSAOIBggGlStfHx8Ig9WrXx8Ig4gE1StfCIXIBQgFlatIAIpA3ggFCAVVK18fCIWIBAgFVatIBEgElStfHwiE3wiGiACKQMAfCIYIAIpAxggDiAOIAIpAxB8IhJWrXwgEiASIAIpAyggAikDaCAZIBtWrXwiDiACKQMgfCIRIA5UrXwgESAPIBF8IhVWrXx8IhFWrXx8IhQgAikDMHwiECAUVK18IBAgAikDSCIPIBEgESACKQNAIg58IhJWrXwgEiASIA8gFSAOIBV8IhFWrXwgESACKQNYIBsgAikDUCIOfCAOVK18fCIcIBFUrXx8Ig5WrXx8IhEgEFStfCIQIBQgGFStIAIpAwggGCAaVK18fCISIBcgGlatIBMgFlStfHwiD3wiFCAQVCAPIBJUciAUQgBTcg0AIBRC////////////AFINAUJ/IRIgEUJ/UgRAQv///////////wAhFAwCCyAOQn9SBEBC////////////ACEUIA4hDwwDCyAcQm1aDQBC////////////ACEUQn8hDwwCCyAOQgF8IhMgHEJtVK0iEn0hDyARQgF8IhAgDkJ/UiASIBNWcq0iDn0hEiAUIBFCf1IgDiAQVnKtfUL///////////8AfSEUIBxCE3whHAwBCyARIRIgDiEPCyACIBw3A9ANIAIgDzcDyA0gAiASNwPADSACIBQ3A7gNIAJB3A1qIAJBuA1qENkCAn8gAigC5A0EQCACKALgDSgCACEBQQAhByACQfANakGMocQAKAIANgIAIAJBhKHEACkCADcD6A1BBCEIQQEgAUEBcUUNARogAkHoDWpB6KLEABClAyACKALsDUEBNgIAIAIoAuwNIQggAigC6A0hB0EADAELQQAhB0EEIQhBAQshBSACKALcDSIBBEAgAigC4A0gAUECdBDfBAsgBwRAIAggB0ECdBDfBAsCfiAFRQRA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aikDADcDACAGQdAUaiAGQagbaiIXKQMANwMAIAZB2BRqIAZBsBtqIj8pAwA3AwAgBkHgFGogBkG4G2oiHikDADcDACAGQegUaiAGQcAbaiJFKQMANwMAIAZBmAtqIgogBkHQG2oiRykDADcDACAGQaALaiIIIAZB2BtqKQMANwMAIAZBqAtqIgsgBkHgG2opAwA3AwAgBkGwC2oiESAGQegbaikDADcDACAGQbgLaiINIAZB8BtqKQMANwMAIAYgBikDmBs3A8AUIAYgBikDyBs3A5ALIAZB6AtqIioiByAGQaAcaikDADcDACAGQeALaiIrIhsgBkGYHGopAwA3AwAgBkHYC2oiKCAGQZAcaikDADcDACAGQdALaiI1IAZBiBxqKQMANwMAIAZByAtqIjYgBkGAHGopAwA3AwAgBkHYD2oiOCAGQbAcaiIfKQMANwMAIAZB4A9qIhogBkG4HGopAwA3AwAgBkHoD2oiGSAGQcAcaikDADcDACAGQfAPaiIwIAZByBxqKQMANwMAIAZB+A9qIi0gBkHQHGopAwA3AwAgBiAGKQP4GzcDwAsgBiAGKQOoHDcD0A8gBkGoEGoiMSAGQYAdaikDADcDACAGQaAQaiIyIAZB+BxqKQMANwMAIAZBmBBqIjMgBkHwHGopAwA3AwAgBkGQEGoiISAGQegcaikDADcDACAGQYgQaiIiIAZB4BxqKQMANwMAIAZBuBRqIAZBkBtqIiMpAwA3AwAgBkGwFGogBkGIG2oiJCkDADcDACAGQagUaiAGQYAbaiIlKQMANwMAIAZBoBRqIAZB+BpqKQMANwMAIAYgBikD2Bw3A4AQIAYgBikD8Bo3A5gUIAZB8BRqIAZBkAtqIgRB4AD8CgAAIAZB0BVqIAZB0A9qIglB4AD8CgAAIAZBmBpqIhAgBkHwHWopAwA3AwAgBkGgGmoiLyAGQfgdaikDADcDACAGQagaaiIPIAZBgB5qKQMANwMAIAZBsBpqIg4gBkGIHmopAwA3AwAgBkG4GmoiEyAGQZAeaikDADcDACAGQYgaaiImIAZB4B1qKQMANwMAIAZBgBpqIicgBkHYHWopAwA3AwAgBkH4GWoiKSAGQdAdaikDADcDACAGQfAZaiIsIAZByB1qKQMANwMAIAZB6BlqIi4gBkHAHWopAwA3AwAgBiAGKQPoHTcDkBogBiAGKQO4HTcD4BkgBkHoGmoiEiAGQcAeaikDADcDACAGQeAaaiIUIAZBuB5qKQMANwMAIAZB2BpqIhYgBkGwHmopAwA3AwAgBkHQGmoiHCAGQageaikDADcDACAGQcgaaiIdIAZBoB5qKQMANwMAIAogBkHQHmopAwA3AwAgCCAGQdgeaikDADcDACALIAZB4B5qKQMANwMAIBEgBkHoHmopAwA3AwAgDSAGQfAeaikDADcDACAGIAYpA5geNwPAGiAGIAYpA8geNwOQCyAHIAZBoB9qKQMANwMAIBsgBkGYH2opAwA3AwAgKCAGQZAfaikDADcDACA1IAZBiB9qKQMANwMAIDYgBkGAH2opAwA3AwAgBkHYGWoiOSAGQbAdaikDADcDACAGQdAZaiJAIAZBqB1qKQMANwMAIAZByBlqIkEgBkGgHWopAwA3AwAgBkHAGWoiRCAGQZgdaikDADcDACAGQbgZaiJGIAZBkB1qIkgpAwA3AwAgBiAGKQP4HjcDwAsgBiAGKQOIHTcDsBkgCSAGQbAZaiJNQeAA/AoAACAGQbAQaiJOIAZBkBpqIhtB4AD8CgAAIAZBkBFqIk8gBEHgAPwKAAAgBiBXNwOQFCAGQbAWaiAJQaAC/AoAAEHRzsUALQAAGkHABEEIENYEIgdFDQkgByAFKQMANwMAIAdBKGogBUEoaikDADcDACAHQSBqIAVBIGopAwA3AwAgB0EYaiAFQRhqKQMANwMAIAdBEGogBUEQaikDADcDACAHQQhqIlAgBUEIaikDADcDACAHIAUpAzA3AzAgB0E4aiAFQThqKQMANwMAIAdBQGsgBUFAaykDADcDACAHQcgAaiAFQcgAaikDADcDACAHQdAAaiAFQdAAaikDADcDACAHQdgAaiAFQdgAaikDADcDACAHQYgBaiAFQYgBaikDADcDACAHQYABaiAFQYABaikDADcDACAHQfgAaiAFQfgAaikDADcDACAHQfAAaiAFQfAAaikDADcDACAHQegAaiAFQegAaikDADcDACAHIAUpA2A3A2AgByAFKQOQATcDkAEgB0GYAWogBUGYAWopAwA3AwAgB0GgAWogBUGgAWopAwA3AwAgB0GoAWogBUGoAWopAwA3AwAgB0GwAWogBUGwAWopAwA3AwAgB0G4AWogBUG4AWopAwA3AwAgByAFKQPAATcDwAEgB0HIAWogBUHIAWopAwA3AwAgB0HQAWogBUHQAWopAwA3AwAgB0HYAWogBUHYAWopAwA3AwAgB0HoAWogBUHoAWopAwA3AwAgB0HgAWogBUHgAWopAwA3AwAgByAFKQPwATcD8AEgB0H4AWogBUH4AWopAwA3AwAgB0GAAmogBUGAAmopAwA3AwAgB0GIAmogBUGIAmopAwA3AwAgB0GQAmogBUGQAmopAwA3AwAgB0GYAmogBUGYAmopAwA3AwAgByAFKQOgAjcDoAIgB0GoAmogBUGoAmopAwA3AwAgB0GwAmogBUGwAmopAwA3AwAgB0G4AmogBUG4AmopAwA3AwAgB0HAAmogBUHAAmopAwA3AwAgB0HIAmogBUHIAmopAwA3AwAgB0H4AmogBUH4AmopAwA3AwAgB0HwAmogBUHwAmopAwA3AwAgB0HoAmogBUHoAmopAwA3AwAgB0HgAmogBUHgAmopAwA3AwAgB0HYAmogBUHYAmopAwA3AwAgByAFKQPQAjcD0AIgByAFKQOAAzcDgAMgB0GIA2ogBUGIA2opAwA3AwAgB0GQA2ogBUGQA2opAwA3AwAgB0GYA2ogBUGYA2opAwA3AwAgB0GgA2ogBUGgA2opAwA3AwAgB0GoA2ogBUGoA2opAwA3AwAgB0HYA2ogBUHYA2opAwA3AwAgB0HQA2ogBUHQA2opAwA3AwAgB0HIA2ogBUHIA2opAwA3AwAgB0HAA2ogBUHAA2opAwA3AwAgB0G4A2ogBUG4A2opAwA3AwAgByAFKQOwAzcDsAMgByAFKQPgAzcD4AMgB0HoA2ogBUHoA2opAwA3AwAgB0HwA2ogBUHwA2opAwA3AwAgB0H4A2ogBUH4A2opAwA3AwAgB0GABGogBUGABGopAwA3AwAgB0GIBGogBUGIBGopAwA3AwAgB0G4BGogBUG4BGopAwA3AwAgB0GwBGogBUGwBGopAwA3AwAgB0GoBGogBUGoBGopAwA3AwAgB0GgBGogBUGgBGopAwA3AwAgByAFKQOQBDcDkAQgB0GYBGogBUGYBGopAwA3AwAgBykDACFXIAkgUEG4BPwKAAAgB0HABBDfBCAXIAZBgBBqKQMANwMAID8gIikDADcDACAeICEpAwA3AwAgRSAzKQMANwMAIAZByBtqIDIpAwA3AwAgECBOKQMANwMAIC8gBkG4EGopAwA3AwAgDyAGQcAQaikDADcDACAOIAZByBBqKQMANwMAIBMgBkHQEGopAwA3AwAgBiAGKQP4DzcDoBsgBiAGKQOoEDcDkBogEiAGQYARaikDADcDACAUIAZB+BBqKQMANwMAIBYgBkHwEGopAwA3AwAgHCAGQegQaikDADcDACAdIAZB4BBqKQMANwMAIAogTykDADcDACAIIAZBmBFqKQMANwMAIAsgBkGgEWopAwA3AwAgESAGQagRaikDADcDACANIAZBsBFqKQMANwMAIAYgBikD2BA3A8AaIAYgBikDiBE3A5ALICogBkHgEWopAwA3AwAgKyAGQdgRaikDADcDACAoIAZB0BFqKQMANwMAIDUgBkHIEWopAwA3AwAgNiAGQcARaikDADcDACAGQZgbaiAwKQMANwMAICMgGSkDADcDACAkIBopAwA3AwAgJSA4KQMANwMAIAYgBikDuBE3A8ALIAYgBikD0A83A/gaIEcgG0HgAPwKAAAgHyAEQeAA/AoAACBGIAZB0BJqKQMANwMAIEQgBkHYEmopAwA3AwAgQSAGQeASaikDADcDACBAIAZB6BJqKQMANwMAIDkgBkHwEmopAwA3AwAgBkGoGWogBkHAEmopAwA3AwAgBkGgGWogBkG4EmopAwA3AwAgBkGYGWogBkGwEmopAwA3AwAgBkGQGWogBkGoEmopAwA3AwAgBkGIGWogBkGgEmopAwA3AwAgBiAGKQPIEjcDsBkgBiAGKQOYEjcDgBkgJiAGQaATaikDADcDACAnIAZBmBNqKQMANwMAICkgBkGQE2opAwA3AwAgLCAGQYgTaikDADcDACAuIAZBgBNqKQMANwMAIBAgBkGwE2opAwA3AwAgLyAGQbgTaikDADcDACAPIAZBwBNqKQMANwMAIA4gBkHIE2opAwA3AwAgEyAGQdATaikDADcDACAGIAYpA/gSNwPgGSAGIAYpA6gTNwOQGiASIAZBgBRqKQMANwMAIBQgBkH4E2opAwA3AwAgFiAGQfATaikDADcDACAcIAZB6BNqKQMANwMAIB0gBkHgE2opAwA3AwAgBkH4GGogBkGQEmopAwA3AwAgBkHwGGogBkGIEmopAwA3AwAgBkHoGGogBkGAEmopAwA3AwAgBkHgGGogBkH4EWopAwA3AwAgBkHYGGogBkHwEWopAwA3AwAgBiAGKQPYEzcDwBogBiAGKQPoETcD0BggBCAGQdAYakHgAPwKAAAgBkHwC2ogTUHgAPwKAAAgBkHQDGogG0HgAPwKAAAgBiBXNwPwGiBIIARBoAL8CgAAIAQgBkGQFGogFRCbAiAJIAQQoAFB0c7FAC0AABpBwARBCBDWBCIERQ0JIAQgBikD0A83AwAgBCAGKQOAEDcDMCAEQShqIC0pAwA3AwAgBEEgaiAwKQMANwMAIARBGGogGSkDADcDACAEQRBqIBopAwA3AwAgBEEIaiA4KQMANwMAIARBOGogIikDADcDACAEQUBrICEpAwA3AwAgBEHIAGogMykDADcDACAEQdAAaiAyKQMANwMAIARB2ABqIDEpAwA3AwAgBEGIAWogBkHYEGopAwA3AwAgBEGAAWogBkHQEGopAwA3AwAgBEH4AGogBkHIEGopAwA3AwAgBEHwAGogBkHAEGopAwA3AwAgBEHoAGogBkG4EGopAwA3AwAgBCAGKQOwEDcDYCAEIAYpA+AQNwOQASAEQZgBaiAGQegQaikDADcDACAEQaABaiAGQfAQaikDADcDACAEQagBaiAGQfgQaikDADcDACAEQbABaiAGQYARaikDADcDACAEQbgBaiAGQYgRaikDADcDACAEQegBaiAGQbgRaikDADcDACAEQeABaiAGQbARaikDADcDACAEQdgBaiAGQagRaikDADcDACAEQdABaiAGQaARaikDADcDACAEQcgBaiAGQZgRaikDADcDACAEIAYpA5ARNwPAASAEQZgCaiAGQegRaikDADcDACAEQZACaiAGQeARaikDADcDACAEQYgCaiAGQdgRaikDADcDACAEQYACaiAGQdARaikDADcDACAEQfgBaiAGQcgRaikDADcDACAEIAYpA8ARNwPwASAEQcgCaiAGQZgSaikDADcDACAEQcACaiAGQZASaikDADcDACAEQbgCaiAGQYgSaikDADcDACAEQbACaiAGQYASaikDADcDACAEQagCaiAGQfgRaikDADcDACAEIAYpA/ARNwOgAiAEQfgCaiAGQcgSaikDADcDACAEQfACaiAGQcASaikDADcDACAEQegCaiAGQbgSaikDADcDACAEQeACaiAGQbASaikDADcDACAEQdgCaiAGQagSaikDADcDACAEIAYpA6ASNwPQAiAEQagDaiAGQfgSaikDADcDACAEQaADaiAGQfASaikDADcDACAEQZgDaiAGQegSaikDADcDACAEQZADaiAGQeASaikDADcDACAEQYgDaiAGQdgSaikDADcDACAEIAYpA9ASNwOAAyAEQdgDaiAGQagTaikDADcDACAEQdADaiAGQaATaikDADcDACAEQcgDaiAGQZgTaikDADcDACAEQcADaiAGQZATaikDADcDACAEQbgDaiAGQYgTaikDADcDACAEIAYpA4ATNwOwAyAEQYgEaiAGQdgTaikDADcDACAEQYAEaiAGQdATaikDADcDACAEQfgDaiAGQcgTaikDADcDACAEQfADaiAGQcATaikDADcDACAEQegDaiAGQbgTaikDADcDACAEIAYpA7ATNwPgAyAEQbgEaiAGQYgUaikDADcDACAEQbAEaiAGQYAUaikDADcDACAEQagEaiAGQfgTaikDADcDACAEQaAEaiAGQfATaikDADcDACAEQZgEaiAGQegTaikDADcDACAEIAYpA+ATNwOQBCAGKALAISIHBEAgBigCxCEgB0EwbBDfBAtBDCEJIAZBDDYCyCEgBiAENgLEISAGQQw2AsAhIAYoAtAGIgcEQCAGKALUBiAHQTBsEN8EC0GQAQwBCyAGKALEISEEIAYoAsghIglFDQUgCUEMbAshB0HRzsUALQAAGiAHQQQQ1gQiBUUNBSAEIQcgBSEKIAkhCANAIAZB8BpqIAcQ2AIgCkEIaiAGQfgaaigCADYCACAKIAYpAvAaNwIAIApBDGohCiAHQTBqIQcgCEEBayIIDQALDAYLIAZBADYC8BogBkEQaiAGQQxqIAZB8BpqQbCXwAAQlwQAC0GAkMAAQR5BoJDAABD+AwALIAZBADYC8BogBkGQFGogBkG0IWogBkHwGmpB0IrAABCXBAALIAZBADYC8BogBkGQFGogBkG0IWogBkHwGmpB4IrAABCXBAALQQAhCUEEIQUMAQtBBCAHQZSNwAAQyAQACyAGQfAaahAmIAYtAIghIQ0gBigC/CAiBwRAIAYoAoAhIAdBAnQQ3wQLAkAgBigC9BoiB0UNACAHIAdBDGxBE2pBeHEiCmpBCWoiB0UNACAGKALwGiAKayAHEN8ECyAGKALwHSIHQYCAgIB4RiAHRXJFBEAgBigC9B0gB0EC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QAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgECAfSQRAIBAgGWoiBC0AACIHDgIBAwILIBAgH0HQmMAAENkDAAsgEEUEQCAGQfAaaiAGQYAHaiARIDYgNCA7IDcgOiAGQbgGaiAGQcQGahDQASAGQeAJaiIHIAZB+BpqKQIANwMAIAYgBikC8Bo3A9gJIAYoAoAbIQogBigChBsgBigCiBshNiAGKAKAByIFBEAgBigChAcgBUEwbBDfBAsgBkGIB2ogBykDADcDACAGIAYpA9gJNwOAByATBEAgESATQcABbBDfBAshEQwfCyAQQQFrIhIgH08NAyAGIBIgGWotAAAiFToApwkgFUUEQEHRzsUALQAAGkHAAEEEENYEIgdFDSogBigCiAciBK1CMH4iUachCUEAIQogUUIgiKcgCUH4////B0tyDSggBigChAchEAJAIAlFBEAgByAENgIIQQghFSAHQQg2AgQgByAENgIAIAcgBDYCKCAHQQg2AiQgByAENgIgIAcgBDYCGCAHQQg2AhQgByAENgIQIAYoAowHIRgMAQtB0c7FAC0AABpBCCEKIAlBCBDWBCILRQ0pAkAgBEUNAEEAIQggBCENA0AgCCAJRg0BIAggC2oiBSAIIBBqIgopAwA3AwAgBUEoaiAKQShqKQMANwMAIAVBIGogCkEgaikDADcDACAFQRhqIApBGGopAwA3AwAgBUEQaiAKQRBqKQMANwMAIAVBCGogCkEIaikDADcDACAIQTBqIQggDUEBayINDQALCyAHIAQ2AgggByALNgIEIAcgBDYCACAGKAKMByEYQdHOxQAtAAAaIAlBCBDWBCILRQ0nAkAgBEUNAEEAIQggBCENA0AgCCAJRg0BIAggC2oiBSAIIBBqIgopAwA3AwAgBUEoaiAKQShqKQMANwMAIAVBIGogCkEgaikDADcDACAFQRhqIApBGGopAwA3AwAgBUEQaiAKQRBqKQMANwMAIAVBCGogCkEIaikDADcDACAIQTBqIQggDUEBayINDQALCyAHIAQ2AhggByALNgIUIAcgBDYCEEHRzsUALQAAGiAJQQgQ1gQiC0UNJwJAIARFDQBBACEIIAQhDQNAIAggCUYNASAIIAtqIgUgCCAQaiIKKQMANwMAIAVBKGogCkEoaikD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QRhqKQMANwMAIA9BEGogC0EQaikDADcDACAPQQhqIAtBCGopAwA3AwAgByALQTBqKQMANwMAIAdBCGogC0E4aikDADcDACAHQRBqIAtBQGspAwA3AwAgB0EYaiALQcgAaikDADcDACAHQSBqIAtB0ABqKQMANwMAIAdBKGogC0HYAGopAwA3AwAgEEEoaiALQYgBaikDADcDACAQQSBqIAtBgAFqKQMANwMAIBBBGGogC0H4AGopAwA3AwAgEEEQaiALQfAAaikDADcDACAQQQhqIAtB6ABqKQMANwMAIBAgC0HgAGopAwA3AwAgCiALQZABaikDADcDACAKQQhqIAtBmAFqKQMANwMAIApBEGogC0GgAWopAwA3AwAgCkEYaiALQagBaikDADcDACAKQSBqIAtBsAFqKQMANwMAIApBKGogC0G4AWopAwA3AwAgDSAPQeAA/AoAACApIBBB4AD8CgAAIBcgDUHAAfwKAAAgFkHAAWohFiAXQcABaiEXIA5BAWohDiAUQQFqIRQgGkEBayIaDQALCyAtIBQ2AgAgDUHABGokAAwBCyAOIAdB5PvAABDZAwALIAYoAtAPIRYgBigC1A8hDyAGKALYDyEtIBshDiAdIRQgHCEQIBVBAUcEQCAoIQ4gKyEUICohECAGKAKAC0GAgICAeEYNBwtB0c7FAC0AABpBwABBBBDWBCINRQ0pIAYoAogHIgStQjB+IlGnIQVBACEKIFFCIIinIAVB+P///wdLcg0kIAYoAoQHIR4CQCAFRQRAQQghGCAGKAKMByEXQQghC0EIIRVBCCEaDAELQdHOxQAtAAAaQQghCiAFQQgQ1gQiC0UNJQJAIAQEQCALIQogBSEIIB4hByAEIQkDQCAIBEAgCiAHKQMANwMAIApBKGogB0EoaikDADcDACAKQSBqIAdBIGopAwA3AwAgCkEYaiAHQRhqKQMANwMAIApBEGogB0EQaikDADcDACAKQQhqIAdBCGopAwA3AwAgCkEwaiEKIAhBMGshCCAHQTBqIQcgCUEBayIJDQELC0HRzsUALQAAGiAGKAKMByEXIAVBCBDWBCIVRQ0rQQAhCCAEIQkDQCAFIAhGDQIgCCAVaiIHIAggHmoiCikDADcDACAHQShqIApBKGopAwA3AwAgB0EgaiAKQSBqKQMANwMAIAdBGGogCkEYaikDADcDACAHQRBqIApBEGopAwA3AwAgB0EIaiAKQQhqKQMANwMAIAhBMGohCCAJQQFrIgkNAAsMAQtB0c7FAC0AABogBigCjAchFyAFQQgQ1gQiFUUNKgtB0c7FAC0AABogBUEIENYEIhhFDSkgBARAQQAhCCAEIQkDQCAFIAhHBEAgCCAYaiIHIAggHmoiCikDADcDACAHQShqIApBKGopAwA3AwAgB0EgaiAKQSBqKQMANwMAIAdBGGogCkEYaikDADcDACAHQRBqIApBEGopAwA3AwAgB0EIaiAKQQhqKQMANwMAIAhBMGohCCAJQQFrIgkNAQsLQdHOxQAtAAAaIAVBCBDWBCIaRQ0qQQAhCCAEIQkDQCAFIAhGDQIgCCAaaiIHIAggHmoiCikDADcDACAHQShqIApBKGopAwA3AwAgB0EgaiAKQSBqKQMANwMAIAdBGGogCkEYaikDADcDACAHQRBqIApBEGopAwA3AwAgB0EIaiAKQQhqKQMANwMAIAhBMGohCCAJQQFrIgkNAAsMAQtB0c7FAC0AABogBUEIENYEIhpFDSkLIA0gFzYCPCANIAQ2AjggDSAaNgI0IA0gBDYCMCANIBc2AiwgDSAENgIoIA0gGDYCJCANIAQ2AiAgDSAXNgIcIA0gBDYCGCANIBU2AhQgDSAENgIQIA0gFzYCDCANIAQ2AgggDSALNgIEIA0gBDYCACAGQQQ2AqQhIAYgDTYCoCEgBkEENgKcISAGQQA2ArAhIAZCgICAgIABNwKoISA2RQ0PQQAhCkEBIQcDQAJAAkAgIiAHIglHBEAgByAhRg0LIAZB8BpqIgQgESAKQcABbGogNCAKQTBsIgdqIAcgN2oQxgIgBkHQD2ogBEHAAfwKAAAgBigCuBwiB61CMH4iUachBUEAIQogUUIgiKcgBUH4////B0tyDSggBigCvBwhFSAGKAK0HCEXIAYoArAcIRggBQ0BQQghDQwCCyA7IDtB8JTAABDZAwALQdHOxQAtAAAaQQghCiAFQQgQ1gQiDUUNJiAHRQ0AQQAhCCAHIQQDQCAFIAhGDQEgCCANaiIKIAggF2oiCykDADcDACAKQShqIAtBKGopAwA3AwAgCkEgaiALQSBqKQMANwMAIApBGGogC0EYaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEIaiALQQhqKQMANwMAIAhBMGohCCAEQQFrIgQNAAsLIAYoAqQhIgQgBigCnCFGBEAgBkGcIWpBkJXAABCjAwsgBigCoCEgBEEEdGoiBSAVNgIMIAUgBzYCCCAFIA02AgQgBSAHNgIAIAYgBEEBaiIFNgKkISAGKAKcISAFRgRAIAZBnCFqQaCVwAAQowMLIAYoAqAhIAVBBHRqIgUgFTYCDCAFIAc2AgggBSAXNgIEIAUgGDYCACAGIARBAmo2AqQhIAYoArAhIgQgBigCqCFGBEAgBkGoIWpBsJXAABCdAwsgBigCrCEgBEHAAWxqIAZB0A9qQcAB/AoAACAGIARBAWo2ArAhIAlBAWohByAJIgogNkcNAAsMEAsgB0H/AUcNAQsgNkHAAWwhBAJAIDZFBEBBCCEKDAELQdHOxQAtAAAaIARBCBDWBCIKRQ0HCyAGQQA2AtgPIAYgCjYC1A8gBiA2NgLQDyAGID42AowbIAYgPTYCiBsgBiAZNgL8GiAGQQA2AvgaIAYgBCARajYC9BogBiARNgLwGiAGIAZBlAdqNgKQGyAGIAZBoAlqNgKEGyAGIB82AoAbIAYgCjYCmBQgBkEANgKUFCAGICM2ApAUIwBBwARrIg0kACAGQZAUaiIHKAIEIRQgBygCACEtAkACQAJAIAZB8BpqIgQoAgAiBSAEKAIEIglHBEAgBCgCICEXIAQoAhwhGCAEKAIYISYgBCgCFCEnIAQoAhAhHiAEKAIMISkgBCgCCCISQcABbCEWIAcoAgggFEHAAWxqIRUgCSAFa0HAAW4hGiANQeAAaiEsIA1B0AJqIQQgDUHwAWohBSANQZAEaiEJIA1BsANqIQgDQCAnKAIAIgcgHk8NAgJ/IAcgKWotAABBAUYEQCASIBhJBEAgDUGgAmohDyANQcABaiEOIAUhByAEIQogJgwCCyASIBhBhPzAABDZAwALIBIgFygCCCIHTw0EIA1B4ANqIQ8gDUGAA2ohDiAIIQcgCSEKIBcoAgQLIQsgDiALIBZqIgspAwA3AwAgDkEoaiALQShqKQMANwMAIA5BIGogC0EgaikDADcDACAOQRhqIAtBGGopAwA3AwAgDkEQaiALQRBqKQMANwMAIA5BCGogC0EIaikDADcDACAHIAtBMGopAwA3AwAgB0EIaiALQThqKQMANwMAIAdBEGogC0FAaykDADcDACAHQRhqIAtByABqKQMANwMAIAdBIGogC0HQAGopAwA3AwAgB0EoaiALQdgAaikDADcDACAPQShqIAtBiAFqKQMANwMAIA9BIGogC0GAAWopAwA3AwAgD0EYaiALQfgAaikDADcDACAPQRBqIAtB8ABqKQMANwMAIA9BCGogC0HoAGopAwA3AwAgDyALQeAAaikDADcDACAKIAtBkAFqKQMANwMAIApBCGogC0GYAWopAwA3AwAgCkEQaiALQaABaikDADcDACAKQRhqIAtBqAFqKQMANwMAIApBIGogC0GwAWopAwA3AwAgCkEoaiALQbgBaikDADcDACANIA5B4AD8CgAAICwgD0HgAPwKAAAgFSANQcAB/AoAACAWQcABaiEWIBVBwAFqIRUgEkEBaiESIBRBAWohFCAaQQFrIhoNAAsLIC0gFDYCACANQcAEaiQADAILIAcgHkH0+8AAENkDAAsgEiAHQZT8wAAQ2QMACyAGKAKgCSIKIB9PDQcgBigC0A8hFiAGKALUDyEPIAYoAtgPIS0gGyEXIB0hGCAcIQsgCiAZai0AAEEBRiImRQRAIAYoAoALQYCAgIB4Rg0KIAYoAogLIiCtQjB+IlGnIQdBACEKIFFCIIinIAdB+P///wdLcg00AkAgB0UEQEEIIQkMAQsgBigChAshC0HRzsUALQAAGkEIIQogB0EIENYEIglFDTUgIEUNAEEAIQggICEEA0AgByAIRwRAIAggCWoiBSAIIAtqIgopAwA3AwAgBUEoaiAKQShqKQMANwMAIAVBIGogCkEgaikDADcDACAFQRhqIApBGGopAwA3AwAgBUEQaiAKQRBqKQMANwMAIAVBCGogCkEIaikDADcDACAIQTBqIQggBEEBayIEDQELCyAgQYCAgIB4Rg0LCyAGKAKMCyEEIAYgIDYC7AkgBiAJNgKcISAGIAQ2AugJIAZBnCFqIQsgBkHsCWohGCAGQegJaiEXIAYoAqAJIQoLIApFDQsgCkEBayIEIB9PDQgCQCAEIBlqLQAADQAgBkHwGmoQJiAGLQCIISAGKAL8ICIEBEAgBigCgCEgBEECdBDfBAsCQCAGKAL0GiIERQ0AIAQgBEEMbEETakF4cSIFakEJaiIERQ0AIAYoAvAaIAVrIAQQ3wQLIAYoAvAdIQQEQCAERSAEQYCAgIB4RnJFBEAgBigC9B0gBEECdBDfBAsgBigCoAkNAQwNCyAERSAEQYCAgIB4RnJFBEAgBigC9B0gBEECdBDfBAtB0c7FAC0AABpBwABBBBDWBCINRQ0oIAYoAogHIgStQjB+IlGnIQVBACEKIFFCIIinIAVB+P///wdLcg0jIAYoAoQHIR4gBUUEQEEIIRogBigCjAchFEEIIQ5BCCEVQQghEgwMC0HRzsUALQAAGkEIIQogBUEIENYEIg5FDSMCQCAEBEAgDiEKIAUhCCAeIQcgBCEJA0AgCARAIAogBykDADcDACAKQShqIAdBKGopAwA3AwAgCkEgaiAHQSBqKQMANwMAIApBGGogB0EYaikDADcDACAKQRBqIAdBEGopAwA3AwAgCkEIaiAHQQhqKQMANwMAIApBMGohCiAIQTBrIQggB0EwaiEHIAlBAWsiCQ0BCwtB0c7FAC0AABogBigCjAchFCAFQQgQ1gQiFUUNKUEAIQggBCEJA0AgBSAIRg0CIAggFWoiByAIIB5qIgopAwA3AwAgB0EoaiAKQShqKQMANwMAIAdBIGogCkEgaikDADcDACAHQRhqIApBGGopAwA3AwAgB0EQaiAKQRBqKQMANwMAIAdBCGogCkEIaikDADcDACAIQTBqIQggCUEBayIJDQALDAELQdHOxQAtAAAaIAYoAowHIRQgBUEIENYEIhVFDSgLQdHOxQAtAAAaIAVBCBDWBCIaRQ0nAkAgBARAQQAhCCAEIQkDQCAFIAhHBEAgCCAaaiIHIAggHmoiCikDADcDACAHQShqIApBKGopAwA3AwAgB0EgaiAKQSBqKQMANwMAIAdBGGogCkEYaikDADcDACAHQRBqIApBEGopAwA3AwAgB0EIaiAKQQhqKQMANwMAIAhBMGohCCAJQQFrIgkNAQsLQdHOxQAtAAAaIAVBCBDWBCISRQ0BQQAhCCAEIQkDQCAFIAhGDQ4gCCASaiIHIAggHmoiCikDADcDACAHQShqIApBKGopAwA3AwAgB0EgaiAKQSBqKQMANwMAIAdBGGogCkEYaikDADcDACAHQRBqIApBEGopAwA3AwAgB0EIaiAKQQhqKQMANwMAIAhBMGohCCAJQQFrIgkNAAsMDQtB0c7FAC0AABogBUEIENYEIhINDAsMJwsgBkHwGmoiBBAmAkAgBi0AiCFBAUcEQCAEKAKMBiIABEAgBCgCkAYgAEECdBDfBAsCQCAEKAIEIgBFDQAgACAAQQxsQRNqQXhxIgFqQQlqIgBFDQAgBCgCACABayAAEN8ECyAEKAKAAyIAQYCAgIB4RiAARXJFBEAgBCgChAMgAEECdBDfBAsgBigCoAkiACAfTw0BIAZBAjYC9BogBkHUmcAANgLwGiAGQgE3AvwaIAYgACAZaq1CgICAgBCENwOQFCAGIAZBkBRqNgL4GiAEQeSZwAAQqAQACyAGKAL8ICIEBEAgBigCgCEgBEECdBDfBAsCQCAGKAL0GiIERQ0AIAQgBEEMbEETakF4cSIHakEJaiIERQ0AIAYoAvAaIAdrIAQQ3wQLIAYoAvAdIgRBgICAgHhGIARFcg0MIAYoAvQdIARBAnQQ3wQMDAsgACAfQbCZwAAQ2QMACyAGQQI2AvQaIAZB1JnAADYC8BogBkIBNwL8GiAGIAStQoCAgIAQhDcDkBQgBiAGQZAUajYC+BogBkHwGmpB9JnAABCoBAALIBIgH0HgmMAAENkDAAsgOiA6QYCSwAAQ2QMAC0EIIARBlI3AABDIBAALQfCYwAAQ6AQACyA6IDpBgJXAABDZAwALQQggBEGUjcAAEMgEAAsgCiAfQYCZwAAQ2QMACyAEIB9BoJnAABDZAwALQZCZwAAQ6AQACyANIBQ2AjwgDSAENgI4IA0gEjYCNCANIAQ2AjAgDSAUNgIsIA0gBDYCKCANIBo2AiQgDSAENgIgIA0gFDYCHCANIAQ2AhggDSAVNgIUIA0gBDYCECANIBQ2AgwgDSAENgIIIA0gDjYCBCANIAQ2AgAgBkEENgKwISAGIA02AqwhIAZBBDYCqCEgGCgCACIHrUIwfiJRpyEFQQAhCiBRQiCIpyAFQfj///8HS3INFwJAIAVFBEBBCCEJDAELIAsoAgAhDkHRzsUALQAAGkEIIQogBUEIENYEIglFDRggB0UNAEEAIQggByEEA0AgBSAIRg0BIAggCWoiCiAIIA5qIg0pAwA3AwAgCkEoaiANQShqKQMANwMAIApBIGogDUEgaikDADcDACAKQRhqIA1BGGopAwA3AwAgCkEQaiANQRBqKQMANwMAIApBCGogDUEIaikDADcDACAIQTBqIQggBEEBayIEDQALCyAXKAIAIQ0gBigCsCEiBSAGKAKoIUYEQCAGQaghakHAlcAAEKMDCyAGKAKsISAFQQR0aiIEIA02AgwgBCAHNgIIIAQgCTYCBCAEIAc2AgAgBiAFQQFqNgKwISAYKAIAIgetQjB+IlGnIQVBACEKIFFCIIinIAVB+P///wdLcg0XAkAgBUUEQEEIIQkMAQsgCygCACEOQdHOxQAtAAAaQQghCiAFQQgQ1gQiCUUNGCAHRQ0AQQAhCCAHIQQDQCAFIAhGDQEgCCAJaiIKIAggDmoiCykDADcDACAKQShqIAtBKGopAwA3AwAgCkEgaiALQSBqKQMANwMAIApBGGogC0EYaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEIaiALQQhqKQMANwMAIAhBMGohCCAEQQFrIgQNAAsLIAYoArAhIgUgBigCqCFGBEAgBkGoIWpB0JXAABCjAwsgBigCrCEgBUEEdGoiBCANNgIMIAQgBzYCCCAEIAk2AgQgBCAHNgIAIAYgBUEBajYCsCEgBkEANgK8ISAGQoCAgICAATcCtCECQCA2RQRAIAZBADYCyCEgBkKAgICAgAE3AsAhDAELQQEhByAtQQFqIRhBACEKAkACQANAAkACQAJAIBggByIFRwRAIAUgIkYNASAFICFGDQUgBkHwGmogESAKQcABbCIEaiAEIA9qIDQgCkEwbCIEaiAEIDdqEKkBIAZB0A9qICRBwAH8CgAAIAYoAvgaIgmtQjB+IlGnIQtBACEKIFFCIIinIAtB+P///wdLcg0lIAYoAswcIRIgBigCyBwhByAGKALEHCEUIAYoAsAcIRogBigC/BohFSAGKAL0GiEXIAYoAvAaIScgCw0CQQghDQwDCyAtIC1BsJbAABDZAwALIDsgO0HAlsAAENkDAAtB0c7FAC0AABpBCCEKIAtBCBDWBCINRQ0iIAlFDQBBACEIIAkhBANAIAggC0YNASAIIA1qIgogCCAXaiIOKQMANwMAIApBKGogDkEoaikDADcDACAKQSBqIA5BIGopAwA3AwAgCkEYaiAOQRhqKQMANwMAIApBEGogDkEQaikDADcDACAKQQhqIA5BCGopAwA3AwAgCEEwaiEIIARBAWsiBA0ACwsgBigCsCEiBCAGKAKoIUYEQCAGQaghakHglsAAEKMDCyAGKAKsISAEQQR0aiIKIBU2AgwgCiAJNgIIIAogDTYCBCAKIAk2AgAgBiAEQQFqIgo2ArAhIAYoAqghIApGBEAgBkGoIWpB8JbAABCjAwsgBigCrCEgCkEEdGoiCiAVNgIMIAogCTYCCCAKIBc2AgQgCiAnNgIAIAYgBEECajYCsCEgB61CMH4iUachC0EAIQogUUIgiKcgC0H4////B0tyDSECQCALRQRAQQghCQwBC0HRzsUALQAAGkEIIQogC0EIENYEIglFDSIgB0UNAEEAIQggByEEA0AgCCALRg0BIAggCWoiCiAIIBRqIg0pAwA3AwAgCkEoaiANQShqKQMANwMAIApBIGogDUEgaikDADcDACAKQRhqIA1BGGopAwA3AwAgCkEQaiANQRBqKQMANwMAIApBCGogDUEIaikDADcDACAIQTBqIQggBEEBayIEDQALCyAGKAKwISIEIAYoAqghRgRAIAZBqCFqQYCXwAAQowMLIAYoAqwhIARBBHRqIgogEjYCDCAKIAc2AgggCiAJNgIEIAogBzYCACAGIARBAWoiCTYCsCEgBigCqCEgCUYEQCAGQaghakGQl8AAEKMDCyAGKAKsISAJQQR0aiIJIBI2AgwgCSAHNgIIIAkgFDYCBCAJIBo2AgAgBiAEQQJqNgKwISAGKAK8ISIEIAYoArQhRgRAIAZBtCFqQaCXwAAQnQMLIAYoArghIARBwAFsaiAGQdAPakHAAfwKAAAgBiAEQQFqNgK8ISAFQQFqIQcgBSIKIDZHDQALDAELIDogOkHQlsAAENkDAAtBACEHIAZBADYCyCEgBkKAgICAgAE3AsAhIDchCCA0IQRBACEKAkACQANAIAYoArwhIgUgCksEQCAKIDtGDQIgCiA6Rg0DIAZB8BpqIgUgBigCuCEgB2ogBCAIEMYCIAZBkBRqIAVBwAH8CgAAIAZBmBpqIgkgMkEIaikCADcDACAGIDIpAgA3A5AaIAYoArAhIgUgBigCqCFGBEAgBkGoIWpBkJbAABCjAwsgBigCrCEgBUEEdGoiCyAGKQOQGjcCACALQQhqIAkpAwA3AgAgBiAFQQFqNgKwISAGKALIISIFIAYoAsAhRgRAIAZBwCFqQaCWwAAQnQMLIAYoAsQhIAVBwAFsaiAGQZAUakHAAfwKAAAgBiAFQQFqNgLIISAIQTBqIQggBEEwaiEEIAdBwAFqIQcgCkEBaiIKIDZHDQEMBAsLIAogBUHglcAAENkDAAsgOyA7QfCVwAAQ2QMACyA6IDpBgJbAABDZAwALIAZBuBlqIAZBsCFqKAIANgIAIAYgBikCqCE3A7AZIAZBgICAgHg2AvAaIAZBkAtqIAZBsBlqIAZB8BpqIAZBuAZqIAZBxAZqEKsBIDBBCGogBkHIIWooAgA2AgAgMCAGKQLAITcCACAGKAK0ISIEBEAgBigCuCEgBEHAAWwQ3wQLIAZB+AlqIgQgBkGYC2opAgA3AwAgBiAGKQKQCzcD8AkgBigCoAshCiAGKAKkCyAGKAKoCyE2IAYoAoAHIgUEQCAeIAVBMGwQ3wQLIDEgBCkDADcDACAGIAYpA/AJNwOAByATBEAgESATQcABbBDfBAsgEEEBayESDAELQdHOxQAtAAAaAkBBMEEEENYEIgUEQCAGKAKIByIErUIwfiJRpyEHQQAhCiBRQiCIpyAHQfj///8HS3INKSAGKAKEByESIAdFBEAgBSAENgIIQQghDSAFQQg2AgQgBSAENgIAIAYoAowHIRoMAgtB0c7FAC0AABpBCCEKIAdBCBDWBCIORQ0pAkAgBARAQQAhCCAEIQkDQCAHIAhHBEAgCCAOaiIKIAggEmoiDSkDADcDACAKQShqIA1BKGopAwA3AwAgCkEgaiANQSBqKQMANwMAIApBGGogDUEYaikDADcDACAKQRBqIA1BEGopAwA3AwAgCkEIaiANQQhqKQMANwMAIAhBMGohCCAJQQFrIgkNAQsLIAUgBDYCCCAFIA42AgQgBSAENgIAQdHOxQAtAAAaIAYoAowHIRogB0EIENYEIg1FDQFBACEIIAQhCQNAIAcgCEYNBCAIIA1qIgogCCASaiIOKQMANwMAIApBKGogDkEoaikDADcDACAKQSBqIA5BIGopAwA3AwAgCkEYaiAOQRhqKQMANwMAIApBEGogDkEQaikDADcDACAKQQhqIA5BCGopAwA3AwAgCEEwaiEIIAlBAWsiCQ0ACwwDCyAFQQA2AgggBSAONgIEIAVBADYCAEHRzsUALQAAGiAGKAKMByEaIAdBCBDWBCINDQILQQggB0HogcAAEMgEAAsMGQsgBSAENgIYIAUgDTYCFCAFIAQ2AhAgGCgCACIHrUIwfiJRpyEJQQAhCiBRQiCIpyAJQfj///8HS3INGQJAIAlFBEBBCCENDAELIAsoAgAhDkHRzsUALQAAGkEIIQogCUEIENYEIg1FDRogB0UNAEEAIQggByEEA0AgCCAJRg0BIAggDWoiCiAIIA5qIgspAwA3AwAgCkEoaiALQShqKQMANwMAIApBIGogC0EgaikDADcDACAKQRhqIAtBGGopAwA3AwAgCkEQaiALQRBqKQMANwMAIApBCGogC0EIaikDADcDACAIQTBqIQggBEEBayIEDQALCyAFIAc2AiggBSANNgIkIAUgBzYCICAFIBo2AhwgBSAaNgIMIAUgFygCADYCLCAGQQM2ArwhIAYgBTYCuCEgBkEDNgK0ISAGQQA2AsghIAZCgICAgIABNwLAIQJAAkACQAJAIDYEQEEAIQogESEIIA8hBCA3IQUgNCEJA0AgCiAtRg0CIAogO0YNAyAKIDpGDQQgBkHwGmogCCAEIAkgBRCpASAGQZAUaiAkQcAB/AoAACAGQZgaaiILIAZB+BpqKQMANwMAIAZBmAtqIg0gM0EIaikCADcDACAGIAYpA/AaNwOQGiAGIDMpAgA3A5ALIAYoArwhIgcgBigCtCEiFUYEQCAGQbQhakHAk8AAEKMDIAYoArQhIRULIAYoArghIg4gB0EEdGoiFCAGKQOQGjcCACAUQQhqIAspAwA3AgAgBiAHQQFqIgs2ArwhIAsgFUYEfyAGQbQhakHQk8AAEKMDIAYoArghBSAOCyALQQR0aiILIAYpA5ALNwIAIAtBCGogDSkDADcCACAGIAdBAmo2ArwhIAYoAsghIgcgBigCwCFGBEAgBkHAIWpB4JPAABCdAwsgBigCxCEgB0HAAWxqIAZBkBRqQcAB/AoAACAGIAdBAWo2AsghIAhBwAFqIQggBEHAAWohBCAFQTBqIQUgCUEwaiEJIDYgCkEBaiIKRw0ACwsgBkG4GWogBkG8IWooAgA2AgAgBiAGKQK0ITcDsBkgBkGAgICAeDYC8BogBkHQD2ogBkGwGWogBkHwGmogBkG4BmogBkHEBmoQqwEgJUEIaiAGQcghaigCADYCACAlIAYpAsAhNwIAIAZBiApqIgQgIykCADcDACAGIAYpAtAPNwOACiAGKALgDyEKIAYoAuQPIQcgBigC6A8hNiAGKAKAByIFBEAgEiAFQTBsEN8ECyAxIAQpAwA3AwAgBiAGKQOACjcDgAcgE0UNAyARIBNBwAFsEN8EDAMLIC0gLUGQk8AAENkDAAsgOyA7QaCTwAAQ2QMACyA6IDpBsJPAABDZAwALIBAhEiAHCyERICYgIEVyRQRAIAYoApwhICBBMGwQ3wQgFkUNDgwKCyAWRQ0NDAkLIAZBADYCvCEgBkKAgICAgAE3ArQhDAELQQAhByAGQQA2ArwhIAZCgICAgIABNwK0ISA3IQQgNCEFQQAhCgNAIAogBigCsCEiCU8NAiAKIC1GDQMgCiA7Rg0EIAogOkYNBSAGQfAaaiAGKAKsISAHaiAHIA9qIAUgBBCpASAGQZAUaiAkQcAB/AoAACAGQbgZaiIIIAZB+BpqKQMANwMAIAZBmBpqIgsgM0EIaikCADcDACAGIAYpA/AaNwOwGSAGIDMpAgA3A5AaIAYoAqQhIgkgBigCnCEiDUYEQCAGQZwhakHAlMAAEKMDIAYoApwhIQ0LIAYoAqAhIhUgCUEEdGoiFyAGKQOwGTcCACAXQQhqIAgpAwA3AgAgBiAJQQFqIgg2AqQhIAggDUYEfyAGQZwhakHQlMAAEKMDIAYoAqAhBSAVCyAIQQR0aiIIIAYpA5AaNwIAIAhBCGogCykDADcCACAGIAlBAmo2AqQhIAYoArwhIgkgBigCtCFGBEAgBkG0IWpB4JTAABCdAwsgBigCuCEgCUHAAWxqIAZBkBRqQcAB/AoAACAGIAlBAWo2ArwhIARBMGohBCAFQTBqIQUgB0HAAWohByA2IApBAWoiCkcNAAsLIBQoAgAiB61CMH4iUachBUEAIQogUUIgiKcgBUH4////B0tyDRICQCAFRQRAQQghCQwBCyAQKAIAIQ1B0c7FAC0AABpBCCEKIAVBCBDWBCIJRQ0TIAdFDQBBACEIIAchBANAIAUgCEYNASAIIAlqIgogCCANaiILKQMANwMAIApBKGogC0EoaikDADcDACAKQSBqIAtBIGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBEGogC0EQaikDADcDACAKQQhqIAtBCGopAwA3AwAgCEEwaiEIIARBAWsiBA0ACwsgDigCACEKIAYoAqQhIgUgBigCnCFGBEAgBkGcIWpB8JPAABCjAwsgBigCoCEgBUEEdGoiBCAKNgIMIAQgBzYCCCAEIAk2AgQgBCAHNgIAIAZBpCFqIAVBAWoiBDYCACAGQcghaiAENgIAIAYgBikCnCE3A8AhIAZBgICAgHg2AvAaIAZBkAtqIAZBwCFqIAZB8BpqIAZBuAZqIAZBxAZqEKsBIDBBCGogBkG8IWooAgA2AgAgMCAGKQK0ITcCACAGKAKoISIEBEAgBigCrCEgBEHAAWwQ3wQLIAZBwAlqIgcgBkGYC2opAgA3AwAgBiAGKQKQCzcDuAkgBigCoAshCiAGKAKkCyAGKAKoCyE2IAYoAoAHIgUEQCAeIAVBMGwQ3wQLIDEgBykDADcDACAGIAYpA7gJNwOAByATBEAgESATQcABbBDfBAshESAWRQ0KDAYLIAogCUGAlMAAENkDAAsgLSAtQZCUwAAQ2QMACyA7IDtBoJTAABDZAwALIDogOkGwlMAAENkDAAtBACEHIAZBADYCyCEgBkKAgICAgAE3AsAhIDchCCA0IQRBACEKA0AgCiAGKAK8ISIFTw0DIAogO0YNBCAKIDpGDQUgBkHwGmoiBSAGKAK4ISAHaiAEIAgQxgIgBkGQFGogBUHAAfwKAAAgBkGYGmoiCSAyQQhqKQIANwMAIAYgMikCADcDkBogBigCsCEiBSAGKAKoIUYEQCAGQaghakHQkcAAEKMDCyAGKAKsISAFQQR0aiILIAYpA5AaNwIAIAtBCGogCSkDADcCACAGIAVBAWo2ArAhIAYoAsghIgUgBigCwCFGBEAgBkHAIWpB4JHAABCdAwsgBigCxCEgBUHAAWxqIAZBkBRqQcAB/AoAACAGIAVBAWo2AsghIAhBMGohCCAEQTBqIQQgB0HAAWohByA2IApBAWoiCkcNAAsLIAZBuBlqIAZBsCFqKAIANgIAIAYgBikCqCE3A7AZIAZBgICAgHg2AvAaIAZBkAtqIAZBsBlqIAZB8BpqIAZBuAZqIAZBxAZqEKsBIDBBCGogBkHIIWooAgA2AgAgMCAGKQLAITcCACAGKAK0ISIEBEAgBigCuCEgBEHAAWwQ3wQLIAZBsAlqIgcgBkGYC2opAgA3AwAgBiAGKQKQCzcDqAkgBigCoAshCiAGKAKkCyAGKAKoCyE2IAYoAoAHIgUEQCAQIAVBMGwQ3wQLIDEgBykDADcDACAGIAYpA6gJNwOAByATIRYgESEPIREgE0UNBAsgDyAWQcABbBDfBAwDCyAKIAVBoJHAABDZAwALIDsgO0GwkcAAENkDAAsgOiA6QcCRwAAQ2QMACyASQQFrIRAgEkEASg0ACwtB0c7FAC0AABpBDEEBENYEIgRFBEBBAUEMEP8EAAsgBEIANwABIARBAToAACAEQQhqQQA2AAAgBkEMNgKcCiAGIAQ2ApgKIAZBDDYClAogBkHwGmohQSMAQeABayIFJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgRg4CAQIAC0GYycEAQQ9BqMnBABD+AwALQdHOxQAtAAAaQZABQQQQ1gQiH0UNU0HRzsUALQAAGkHwAEEIENYEIhpFDVEgBUGoAWoiFEHYn8EAQQEQgwEgBS0AqAFBAUYNASAFQZ4BaiIWIg0gBUHYAWoiCykDACJRNwEAIAVBlgFqIhwiECAFQdABaiIEKQMAIlI3AQAgBUHIAGoiHSIPIAVBuAFqIgcpAwAiVTcBACAFQdAAaiIbIg4gBUHAAWoiCSkDACJTNwEAIAVB2ABqIhUiEyAFQcgBaiIIKQMAIlY3AQAgBUHgAGoiFyBSNwEAIAVB6ABqIhggUTcBACAFIAUpA7ABIlQ3AUAgBCBRNwMAIAggUjcDACAJIFY3AwAgByBTNwMAIAVBsAFqIhIgVTcDACAFIFQ3A6gBIAVBMGoiMCAEKQMANwIAIAVBKGoiLSAIKQMANwIAIAVBIGoiMSAJKQMANwIAIAVBGGoiMiAHKQMANwIAIAVBEGoiMyASKQMANwIAIAUgBSkDqAE3AgggFEHZn8EAQQIQgwEgBS0AqAFBAUYNAiANIAspAwAiUTcBACAQIAQpAwAiUjcBACAPIAcpAwAiVTcBACAOIAkpAwAiUzcBACATIAgpAwAiVjcBACAXIFI3AQAgGCBRNwEAIAUgBSkDsAEiVDcBQCAFQZgBaiINIFE3AwAgBUGQAWoiEyBSNwMAIAVBiAFqIhAgVjcDACAFQYABaiIPIFM3AwAgBUH4AGoiDiBVNwMAIAUgVDcDcCAFQdQBaiIgIA0pAwA3AgAgBUHMAWoiHiATKQMANwIAIAVBxAFqIiogECkDADcCACAFQbwBaiIrIA8pAwA3AgAgBUG0AWoiKCAOKQMANwIAIAUgBSkDcDcCrAEgGkEANgIAIBpBBjYCOCAaIAUpAgQ3AgQgGkEMaiAFQQxqKQIANwIAIBpBFGogBUEUaikCADcCACAaQRxqIAVBHGopAgA3AgAgGkEkaiAFQSRqKQIANwIAIBpBLGogBUEsaikCADcCACAaQTRqIAVBNGooAgA2AgAgGiAFKQKoATcCPCAaQcQAaiASKQIANwIAIBpBzABqIAcpAgA3AgAgGkHUAGogCSkCADcCACAaQdwAaiAIKQIANwIAIBpB5ABqIAQpAgA3AgAgGkHsAGogCygCADYCAEHRzsUALQAAGkHwAEEIENYEIhlFDVEgFEHbn8EAQcAAEIMBIAUtAKgBQQFGDQMgFiALKQMAIlE3AQAgHCAEKQMAIlI3AQAgHSAHKQMAIlU3AQAgGyAJKQMAIlM3AQAgFSAIKQMAIlY3AQAgFyBSNwEAIBggUTcBACAFIAUpA7ABIlQ3AUAgBCBRNwMAIAggUjcDACAJIFY3AwAgByBTNwMAIBIgVTcDACAFIFQ3A6gBIDAgBCkDADcCACAtIAgpAwA3AgAgMSAJKQMANwIAIDIgBykDADcCACAzIBIpAwA3AgAgBSAFKQOoATcCCCAUQZugwQBBwAAQgwEgBS0AqAFBAUYNBCAWIAspAwAiUTcBACAcIAQpAwAiUjcBACAdIAcpAwAiVTcBACAbIAkpAwAiUzcBACAVIAgpAwAiVjcBACAXIFI3AQAgGCBRNwEAIAUgBSkDsAEiVDcBQCANIFE3AwAgEyBSNwMAIBAgVjcDACAPIFM3AwAgDiBVNwMAIAUgVDcDcCAgIA0pAwA3AgAgHiATKQMANwIAICogECkDADcCACArIA8pAwA3AgAgKCAOKQMANwIAIAUgBSkDcDcCrAEgGUEBNgIAIBlBBzYCOCAZIAUpAgQ3AgQgGUEMaiAFQQxqKQIANwIAIBlBFGogBUEUaikCADcCACAZQRxqIAVBHGopAgA3AgAgGUEkaiAFQSRqKQIANwIAIBlBLGogBUEsaikCADcCACAZQTRqIAVBNGooAgA2AgAgGSAFKQKoATcCPCAZQcQAaiASKQIANwIAIBlBzABqIAcpAgA3AgAgGUHUAGogCSkCADcCACAZQdwAaiAIKQIANwIAIBlB5ABqIAQpAgA3AgAgGUHsAGogCygCADYCAEHRzsUALQAAGkHwAEEIENYEIiFFDVEgFEHboMEAQcAAEIMBIAUtAKgBQQFGDQUgFiALKQMAIlE3AQAgHCAEKQMAIlI3AQAgHSAHKQMAIlU3AQAgGyAJKQMAIlM3AQAgFSAIKQMAIlY3AQAgFyBSNwEAIBggUTcBACAFIAUpA7ABIlQ3AUAgBCBRNwMAIAggUjcDACAJIFY3AwAgByBTNwMAIBIgVTcDACAFIFQ3A6gBIDAgBCkDADcCACAtIAgpAwA3AgAgMSAJKQMANwIAIDIgBykDADcCACAzIBIpAwA3AgAgBSAFKQOoATcCCCAUQZuhwQBBPxCDASAFLQCoAUEBRg0GIBYgCykDACJRNwEAIBwgBCkDACJSNwEAIB0gBykDACJVNwEAIBsgCSkDACJTNwEAIBUgCCkDACJWNwEAIBcgUjcBACAYIFE3AQAgBSAFKQOwASJUNwFAIA0gUTcDACATIFI3AwAgECBWNwMAIA8gUzcDACAOIFU3AwAgBSBUNwNwICAgDSkDADcCACAeIBMpAwA3AgAgKiAQKQMANwIAICsgDykDADcCACAoIA4pAwA3AgAgBSAFKQNwNwKsASAhQQI2AgAgIUEINgI4ICEgBSkCBDcCBCAhQQxqIAVBDGopAgA3AgAgIUEUaiAFQRRqKQIANwIAICFBHGogBUEcaikCADcCACAhQSRqIAVBJGopAgA3AgAgIUEsaiAFQSxqKQIANwIAICFBNGogBUE0aigCADYCACAhIAUpAqgBNwI8ICFBxABqIBIpAgA3AgAgIUHMAGogBykCADcCACAhQdQAaiAJKQIANwIAICFB3ABqIAgpAgA3AgAgIUHkAGogBCkCADcCACAhQewAaiALKAIANgIAQdHOxQAtAAAaQfAAQQgQ1gQiIkUNUSAUQdqhwQBBwAAQgwEgBS0AqAFBAUYNByAWIAspAwAiUTcBACAcIAQpAwAiUjcBACAdIAcpAwAiVTcBACAbIAkpAwAiUzcBACAVIAgpAwAiVjcBACAXIFI3AQAgGCBRNwEAIAUgBSkDsAEiVDcBQCAEIFE3AwAgCCBSNwMAIAkgVjcDACAHIFM3AwAgEiBVNwMAIAUgVDcDqAEgMCAEKQMANwIAIC0gCCkDADcCACAxIAkpAwA3AgAgMiAHKQMANwIAIDMgEikDADcCACAFIAUpA6gBNwIIIBRBmqLBAEHAABCDASAFLQCoAUEBRg0IIBYgCykDACJRNwEAIBwgBCkDACJSNwEAIB0gBykDACJVNwEAIBsgCSkDACJTNwEAIBUgCCkDACJWNwEAIBcgUjcBACAYIFE3AQAgBSAFKQOwASJUNwFAIA0gUTcDACATIFI3AwAgECBWNwMAIA8gUzcDACAOIFU3AwAgBSBUNwNwICAgDSkDADcCACAeIBMpAwA3AgAgKiAQKQMANwIAICsgDykDADcCACAoIA4pAwA3AgAgBSAFKQNwNwKsASAiQQM2AgAgIkEJNgI4ICIgBSkCBDcCBCAiQQxqIAVBDGopAgA3AgAgIkEUaiAFQRRqKQIANwIAICJBHGogBUEcaikCADcCACAiQSRqIAVBJGopAgA3AgAgIkEsaiAFQSxqKQIANwIAICJBNGogBUE0aigCADYCACAiIAUpAqgBNwI8ICJBxABqIBIpAgA3AgAgIkHMAGogBykCADcCACAiQdQAaiAJKQIANwIAICJB3ABqIAgpAgA3AgAgIkHkAGogBCkCADcCACAiQewAaiALKAIANgIAQdHOxQAtAAAaQfAAQQgQ1gQiI0UNUSAUQdqiwQBBwAAQgwEgBS0AqAFBAUYNCSAWIAspAwAiUTcBACAcIAQpAwAiUjcBACAdIAcpAwAiVTcBACAbIAkpAwAiUzcBACAVIAgpAwAiVjcBACAXIFI3AQAgGCBRNwEAIAUgBSkDsAEiVDcBQCAEIFE3AwAgCCBSNwMAIAkgVjcDACAHIFM3AwAgEiBVNwMAIAUgVDcDqAEgMCAEKQMANwIAIC0gCCkDADcCACAxIAkpAwA3AgAgMiAHKQMANwIAIDMgEikDADcCACAFIAUpA6gBNwIIIBRBmqPBAEE/EIMBIAUtAKgBQQFGDQogFiALKQMAIlE3AQAgHCAEKQMAIlI3AQAgHSAHKQMAIlU3AQAgGyAJKQMAIlM3AQAgFSAIKQMAIlY3AQAgFyBSNwEAIBggUTcBACAFIAUpA7ABIlQ3AUAgDSBRNwMAIBMgUjcDACAQIFY3AwAgDyBTNwMAIA4gVTcDACAFIFQ3A3AgICANKQMANwIAIB4gEykDADcCACAqIBApAwA3AgAgKyAPKQMANwIAICggDikDADcCACAFIAUpA3A3AqwBICNBBDYCACAjQQo2AjggIyAFKQIENwIEICNBDGogBUEMaikCADcCACAjQRRqIAVBFGopAgA3AgAgI0EcaiAFQRxqKQIANwIAICNBJGogBUEkaikCADcCACAjQSxqIAVBLGopAgA3AgAgI0E0aiAFQTRqKAIANgIAICMgBSkCqAE3AjwgI0HEAGogEikCADcCACAjQcwAaiAHKQIANwIAICNB1ABqIAkpAgA3AgAgI0HcAGogCCkCADcCACAjQeQAaiAEKQIANwIAICNB7ABqIAsoAgA2AgBB0c7FAC0AABpB8ABBCBDWBCIkRQ1RIBRB2aPBAEHAABCDASAFLQCoAUEBRg0LIBYgCykDACJRNwEAIBwgBCkDACJSNwEAIB0gBykDACJVNwEAIBsgCSkDACJTNwEAIBUgCCkDACJWNwEAIBcgUjcBACAYIFE3AQAgBSAFKQOwASJUNwFAIAQgUTcDACAIIFI3AwAgCSBWNwMAIAcgUzcDACASIFU3AwAgBSBUNwOoASAwIAQpAwA3AgAgLSAIKQMANwIAIDEgCSkDADcCACAyIAcpAwA3AgAgMyASKQMANwIAIAUgBSkDqAE3AgggFEGZpMEAQcAAEIMBIAUtAKgBQQFGDQwgFiALKQMAIlE3AQAgHCAEKQMAIlI3AQAgHSAHKQMAIlU3AQAgGyAJKQMAIlM3AQAgFSAIKQMAIlY3AQAgFyBSNwEAIBggUTcBACAFIAUpA7ABIlQ3AUAgDSBRNwMAIBMgUjcDACAQIFY3AwAgDyBTNwMAIA4gVTcDACAFIFQ3A3AgICANKQMANwIAIB4gEykDADcCACAqIBApAwA3AgAgKyAPKQMANwIAICggDikDADcCACAFIAUpA3A3AqwBICRBBTYCACAkQQs2AjggJCAFKQIENwIEICRBDGogBUEMaikCADcCACAkQRRqIAVBFGopAgA3AgAgJEEcaiAFQRxqKQIANwIAICRBJGogBUEkaikCADcCACAkQSxqIAVBLGopAgA3AgAgJEE0aiAFQTRqKAIANgIAICQgBSkCqAE3AjwgJEHEAGogEikCADcCACAkQcwAaiAHKQIANwIAICRB1ABqIAkpAgA3AgAgJEHcAGogCCkCADcCACAkQeQAaiAEKQIANwIAICRB7ABqIAsoAgA2AgBB0c7FAC0AABpBOEEIENYEIi5FDVIgFEHZpMEAQcAAEIMBIAUtAKgBQQFGDQ0gFiALKQMAIlE3AQAgHCAEKQMAIlI3AQAgHSAHKQMAIlU3AQAgGyAJKQMAIlM3AQAgFSAIKQMAIlY3AQAgFyBSNwEAIBggUTcBACAFIAUpA7ABIlQ3AUAgDSBRNwMAIBMgUjcDACAQIFY3AwAgDyBTNwMAIA4gVTcDACAFIFQ3A3AgICANKQMANwIAIB4gEykDADcCACAqIBApAwA3AgAgKyAPKQMANwIAICggDikDADcCACAFIAUpA3A3AqwBIC5BBjYCACAuIAUpAqgBNwIEIC5BDGogEikCADcCACAuQRRqIAcpAgA3AgAgLkEcaiAJKQIANwIAIC5BJGogCCkCADcCACAuQSxqIAQpAgA3AgAgLkE0aiALKAIANgIAQdHOxQAtAAAaQfAAQQgQ1gQiJUUNUSAUQZmlwQBBwAAQgwEgBS0AqAFBAUYNDiAWIAspAwAiUTcBACAcIAQpAwAiUjcBACAdIAcpAwAiVTcBACAbIAkpAwAiUzcBACAVIAgpAwAiVjcBACAXIFI3AQAgGCBRNwEAIAUgBSkDsAEiVDcBQCAEIFE3AwAgCCBSNwMAIAkgVjcDACAHIFM3AwAgEiBVNwMAIAUgVDcDqAEgMCAEKQMANwIAIC0gCCkDADcCACAxIAkpAwA3AgAgMiAHKQMANwIAIDMgEikDADcCACAFIAUpA6gBNwIIIBRB2aXBAEHAABCDASAFLQCoAUEBRg0PIBYgCykDACJRNwEAIBwgBCkDACJSNwEAIB0gBykDACJVNwEAIBsgCSkDACJTNwEAIBUgCCkDACJWNwEAIBcgUjcBACAYIFE3AQAgBSAFKQOwASJUNwFAIA0gUTcDACATIFI3AwAgECBWNwMAIA8gUzcDACAOIFU3AwAgBSBUNwNwICAgDSkDADcCACAeIBMpAwA3AgAgKiAQKQMANwIAICsgDykDADcCACAoIA4pAwA3AgAgBSAFKQNwNwKsASAlQQE2AgAgJUEHNgI4ICUgBSkCBDcCBCAlQQxqIAVBDGopAgA3AgAgJUEUaiAFQRRqKQIANwIAICVBHGogBUEcaikCADcCACAlQSRqIAVBJGopAgA3AgAgJUEsaiAFQSxqKQIANwIAICVBNGogBUE0aigCADYCACAlIAUpAqgBNwI8ICVBxABqIBIpAgA3AgAgJUHMAGogBykCADcCACAlQdQAaiAJKQIANwIAICVB3ABqIAgpAgA3AgAgJUHkAGogBCkCADcCACAlQewAaiALKAIANgIAQdHOxQAtAAAaQfAAQQgQ1gQiJkUNUSAUQZmmwQBBwAAQgwEgBS0AqAFBAUYNECAWIAspAwAiUTcBACAcIAQpAwAiUjcBACAdIAcpAwAiVTcBACAbIAkpAwAiUzcBACAVIAgpAwAiVjcBACAXIFI3AQAgGCBRNwEAIAUgBSkDsAEiVDcBQCAEIFE3AwAgCCBSNwMAIAkgVjcDACAHIFM3AwAgEiBVNwMAIAUgVDcDqAEgMCAEKQMANwIAIC0gCCkDADcCACAxIAkpAwA3AgAgMiAHKQMANwIAIDMgEikDADcCACAFIAUpA6gBNwIIIBRB2abBAEE/EIMBIAUtAKgBQQFGDREgFiALKQMAIlE3AQAgHCAEKQMAIlI3AQAgHSAHKQMAIlU3AQAgGyAJKQMAIlM3AQAgFSAIKQMAIlY3AQAgFyBSNwEAIBggUTcBACAFIAUpA7ABIlQ3AUAgDSBRNwMAIBMgUjcDACAQIFY3AwAgDyBTNwMAIA4gVTcDACAFIFQ3A3AgICANKQMANwIAIB4gEykDADcCACAqIBApAwA3AgAgKyAPKQMANwIAICggDikDADcCACAFIAUpA3A3AqwBICZBAjYCACAmQQg2AjggJiAFKQIENwIEICZBDGogBUEMaikCADcCACAmQRRqIAVBFGopAgA3AgAgJkEcaiAFQRxqKQIANwIAICZBJGogBUEkaikCADcCACAmQSxqIAVBLGopAgA3AgAgJkE0aiAFQTRqKAIANgIAICYgBSkCqAE3AjwgJkHEAGogEikCADcCACAmQcwAaiAHKQIANwIAICZB1ABqIAkpAgA3AgAgJkHcAGogCCkCADcCACAmQeQAaiAEKQIANwIAICZB7ABqIAsoAgA2AgBB0c7FAC0AABpB8ABBCBDWBCInRQ1RIBRBmKfBAEE/EIMBIAUtAKgBQQFGDRIgFiALKQMAIlE3AQAgHCAEKQMAIlI3AQAgHSAHKQMAIlU3AQAgGyAJKQMAIlM3AQAgFSAIKQMAIlY3AQAgFyBSNwEAIBggUTcBACAFIAUpA7ABIlQ3AUAgBCBRNwMAIAggUjcDACAJIFY3AwAgByBTNwMAIBIgVTcDACAFIFQ3A6gBIDAgBCkDADcCACAtIAgpAwA3AgAgMSAJKQMANwIAIDIgBykDADcCACAzIBIpAwA3AgAgBSAFKQOoATcCCCAUQdenwQBBPxCDASAFLQCoAUEBRg0TIBYgCykDACJRNwEAIBwgBCkDACJSNwEAIB0gBykDACJVNwEAIBsgCSkDACJTNwEAIBUgCCkDACJWNwEAIBcgUjcBACAYIFE3AQAgBSAFKQOwASJUNwFAIA0gUTcDACATIFI3AwAgECBWNwMAIA8gUzcDACAOIFU3AwAgBSBUNwNwICAgDSkDADcCACAeIBMpAwA3AgAgKiAQKQMANwIAICsgDykDADcCACAoIA4pAwA3AgAgBSAFKQNwNwKsASAnQQM2AgAgJ0EJNgI4ICcgBSkCBDcCBCAnQQxqIAVBDGopAgA3AgAgJ0EUaiAFQRRqKQIANwIAICdBHGogBUEcaikCADcCACAnQSRqIAVBJGopAgA3AgAgJ0EsaiAFQSxqKQIANwIAICdBNGogBUE0aigCADYCACAnIAUpAqgBNwI8ICdBxABqIBIpAgA3AgAgJ0HMAGogBykCADcCACAnQdQAaiAJKQIANwIAICdB3ABqIAgpAgA3AgAgJ0HkAGogBCkCADcCACAnQewAaiALKAIANgIAQdHOxQAtAAAaQfAAQQgQ1gQiKUUNUSAUQZaowQBBwAAQgwEgBS0AqAFBAUYNFCAWIAspAwAiUTcBACAcIAQpAwAiUjcBACAdIAcpAwAiVTcBACAbIAkpAwAiUzcBACAVIAgpAwAiVjcBACAXIFI3AQAgGCBRNwEAIAUgBSkDsAEiVDcBQCAEIFE3AwAgCCBSNwMAIAkgVjcDACAHIFM3AwAgEiBVNwMAIAUgVDcDqAEgMCAEKQMANwIAIC0gCCkDADcCACAxIAkpAwA3AgAgMiAHKQMANwIAIDMgEikDADcCACAFIAUpA6gBNwIIIBRB1qjBAEE/EIMBIAUtAKgBQQFGDRUgFiALKQMAIlE3AQAgHCAEKQMAIlI3AQAgHSAHKQMAIlU3AQAgGyAJKQMAIlM3AQAgFSAIKQMAIlY3AQAgFyBSNwEAIBggUTcBACAFIAUpA7ABIlQ3AUAgDSBRNwMAIBMgUjcDACAQIFY3AwAgDyBTNwMAIA4gVTcDACAFIFQ3A3AgICANKQMANwIAIB4gEykDADcCACAqIBApAwA3AgAgKyAPKQMANwIAICggDikDADcCACAFIAUpA3A3AqwBIClBBDYCACApQQo2AjggKSAFKQIENwIEIClBDGogBUEMaikCADcCACApQRRqIAVBFGopAgA3AgAgKUEcaiAFQRxqKQIANwIAIClBJGogBUEkaikCADcCACApQSxqIAVBLGopAgA3AgAgKUE0aiAFQTRqKAIANgIAICkgBSkCqAE3AjwgKUHEAGogEikCADcCACApQcwAaiAHKQIANwIAIClB1ABqIAkpAgA3AgAgKUHcAGogCCkCADcCACApQeQAaiAEKQIANwIAIClB7ABqIAsoAgA2AgBB0c7FAC0AABpB8ABBCBDWBCIsRQ1RIBRBlanBAEHAABCDASAFLQCoAUEBRg0WIBYgCykDACJRNwEAIBwgBCkDACJSNwEAIB0gBykDACJVNwEAIBsgCSkDACJTNwEAIBUgCCkDACJWNwEAIBcgUjcBACAYIFE3AQAgBSAFKQOwASJUNwFAIAQgUTcDACAIIFI3AwAgCSBWNwMAIAcgUzcDACASIFU3AwAgBSBUNwOoASAwIAQpAwA3AgAgLSAIKQMANwIAIDEgCSkDADcCACAyIAcpAwA3AgAgMyASKQMANwIAIAUgBSkDqAE3AgggFEHVqcEAQcAAEIMBIAUtAKgBQQFGDRcgFiALKQMAIlE3AQAgHCAEKQMAIlI3AQAgHSAHKQMAIlU3AQAgGyAJKQMAIlM3AQAgFSAIKQMAIlY3AQAgFyBSNwEAIBggUTcBACAFIAUpA7ABIlQ3AUAgDSBRNwMAIBMgUjcDACAQIFY3AwAgDyBTNwMAIA4gVTcDACAFIFQ3A3AgICANKQMANwIAIB4gEykDADcCACAqIBApAwA3AgAgKyAPKQMANwIAICggDikDADcCACAFIAUpA3A3AqwBICxBBTYCACAsQQs2AjggLCAFKQIENwIEICxBDGogBUEMaikCADcCACAsQRRqIAVBFGopAgA3AgAgLEEcaiAFQRxqKQIANwIAICxBJGogBUEkaikCADcCACAsQSxqIAVBLGopAgA3AgAgLEE0aiAFQTRqKAIANgIAICwgBSkCqAE3AjwgLEHEAGogEikCADcCACAsQcwAaiAHKQIANwIAICxB1ABqIAkpAgA3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A0AjAEGQA2siCCQAIAhBADYCDCAIQoCAgICAATcCBCAIQQRqIglBjMbCABCcAyAIKAIEIAgoAggiByABKQPAATcDACAHQQhqIAFByAFqKQMANwMAIAdBEGogAUHQAWopAwA3AwAgB0EYaiABQdgBaikDADcDACAHQSBqIAFB4AFqKQMANwMAIAdBKGogAUHoAWopAwA3AwAgCEEBNgIMQQFGBEAgCUGcxsIAEJwDIAgoAgghBwsgByABQfABaiIJKQMANwMwIAdB2ABqIAlBKGopAwA3AwAgB0HQAGogCUEgaikDADcDACAHQcgAaiAJQRhqKQMANwMAIAdBQGsgCUEQaikDADcDACAHQThqIAlBCGopAwA3AwAgCEECNgIMIAhB0AFqIQkjAEHwAmsiByQAIAdB4ABqIAFBCGopAwA3AwAgB0HoAGogAUEQaikDADcDACAHQfAAaiABQRhqKQMANwMAIAdB+ABqIAFBIGopAwA3AwAgB0GAAWogAUEoaikDADcDACAHQZABaiABQThqKQMANwMAIAdBmAFqIAFBQGspAwA3AwAgB0GgAWogAUHIAGopAwA3AwAgB0GoAWogAUHQAGopAwA3AwAgB0GwAWogAUHYAGopAwA3AwAgByABKQMANwNYIAcgASkDMDcDiAEgB0GYAmoiNCAHQdgAahD3AyAHKAKcAiELIAcoApgCIRECQAJAAkAgBygCoAIiD0ECRgRAIAsoAgQhDyALKAIAIRIgNCALQQhqQdgA/AoAACARBEAgCyARQTBsEN8ECyAHQdAAaiAHQbgCaikDADcDACAHQcgAaiAHQbACaikDADcDACAHQUBrIAdBqAJqKQMANwMAIAdBOGogB0GgAmopAwA3AwAgB0EIaiAHQcgCaikDADcDACAHQRBqIAdB0AJqKQMANwMAIAdBGGogB0HYAmopAwA3AwAgB0EgaiAHQeACaikDADcDACAHQShqIAdB6AJqKQMANwMAIAcgBykDmAI3AzAgByAHKQPAAjcDACAHQcABaiABQeAAaiILQQhqKQMANwMAIAdByAFqIAtBEGopAwA3AwAgB0HQAWogC0EYaikDADcDACAHQdgBaiALQSBqKQMANwMAIAdB4AFqIAtBKGopAwA3AwAgB0HwAWogAUGYAWopAwA3AwAgB0H4AWogAUGgAWopAwA3AwAg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CyABKQMwIhMgAikDMCILUgRAIBMhCgwBCyARIQ0gASkDOCIKIRIgEyAKIAIpAzgiC1ENARoLIAogC1YNBSABKQMoIREgAikDKCENIAEpAzAhEyABKQM4IQogAikDOCESIAIpAzALIgwgE30iECAKIBJWrSIPfSELIA0gEX0iFSAMIBNUIA8gEFZyrSIMfSETIA0gEVQgDCAVVnIhBCAUIA59IQ8gEiAKfSEKDAcLIANBsAlqEEkgB0UEQCADQcgJaiEEIAMpA7gJIRUgAykDsAkhGCADKQPACQwGCyADKALgC0EBcQ0EQez2wQAQ6AQAC0GA9sEAQTNB3PbBABD+AwALIAAgBzoAQCAAIAIpAyA3AyAgACACKQMANwMAIABBOGogAkE4aikDADcDACAAQTBqIAJBMGopAwA3AwAgAEEoaiACQShqKQMANwMAIABBCGogAkEIaikDADcDACAAQRBqIAJBEGopAwA3AwAgAEEYaiACQRhqKQMANwMADAYLIAAgBzoAQCAAIAEpAyA3AyAgACABKQMANwMAIABBOGogAUE4aikDADcDACAAQTBqIAFBMGopAwA3AwAgAEEoaiABQShqKQMANwMAIABBCGogAUEIaikDADcDACAAQRBqIAFBEGopAwA3AwAgAEEYaiABQRhqKQMANwMADAULIAEpAzAiCiACKQMwIhFUIAogEX0iCiABKQM4IhEgAikDOCIMVK0iC1RyrSINIAEpAygiEiACKQMoIhB9Ig9Cf4V8IhUgCkJ/hSALfCIKIBEgDH0iEUJtVq0iDFStIgt9IRMgCyAVViEEIAogDH0hCyAQIBJWIA0gD1ZyrSAUIA59fEL///////////8AfCEPQm0gEX0hCgwCCyADQYAMaiEEIAMpA/ALIRUgAykD6AshGCADKQP4CwshEiAEKQMAIRkgA0HADmpCADcDACADQbgOakIANwMAIANCADcDsA4gA0LyADcDyA4gA0GwCGogASkDECIUQgAgASkDGCIRQgAQyQMgA0GQCGogASkDCCITQgAgEUIAEMkDIANBsAdqIAEpAwAiCkIAIBFCABDJAyADQYAIaiATQgAgFEIAEMkDIANBwAdqIApCACAUQgAQyQMgA0HQB2ogCkIAIBNCABDJAyADQfAIaiARQgAgEUIAEMkDIANBoAhqIBRCACAUQgAQyQMgA0HwB2ogE0IAIBNCABDJAyADQeAHaiAKQgAgCkIAEMkDIANB4AhqIAMpA/AIIhdCm5Svw/K1qN6Gf34iCkIAQm1CABDJAyADQdAIaiAKQgBCf0IAEMkDIANBwAhqIApCAEL///////////8AQgAQyQMgAykD2AcgAykDyAcgAykDuAcgAykDmAggAykDuAgiDCADKQOQCHwiCiAMVK18IgsgAykDsAd8IgwgC1StfCINIAMpA8AHfCILIA1UrXwgCyADKQOICCAMIAwgAykDgAh8IgxWrXx8Ig0gC1StfCILIAMpA9AHfCIOIAtUrXwiC0I/iCADKQPoByADKQPgByIPIAtCAYYgDkI/iIR8IhAgD1StfCAQIAMpA/gHIAMpA6gIIAMpA6AIIg8gCkIBhiADKQOwCCIWQj+IhHwiCyAPVK18IAsgAykD+AgiDyAWQgGGfCIWIA9UrXwiGiALVK18IgsgDEIBhiAKQj+IhHwiGyALVK0iCyADKQPwB3wiCiALVK18IAogDUIBhiAMQj+IhHwiCyAKVK18IgogDkIBhiANQj+IhHwiDyAKVK18Ig4gEFStfHwhCgJ/AkAgAykDyAggAykD2AgiDSANIAMpA+gIIAMpA+AIIgwgF0J9g3wgDFStfCIQIAMpA9AIIhd8IgwgEFStfCAMIAwgFnwiDFatfCIQIBd8Ig0gEFStfCANIBp8IhAgDVStfCIXIAMpA8AIfCINIBdUrXwgDSAbfCIXIA1UrXwiDVANACALIA18IgsgDVQiBEUNACAErSINIA98Ig8gDVoNACANIA9WrSINIA58Ig4gDVoNACANIA5WrSINIAp8IgogDVQMAQtBAAshBCADQaAHaiAMQpuUr8Pytajehn9+Ig1CAEJtQgAQyQMgA0GQB2ogDUIAQn9CABDJAyADQYAHaiANQgBC////////////AEIAEMkDAkAgAykDiAcgAykDmAciDSANIAMpA6gHIAwgAykDoAciDHwgDFStfCIWIAMpA5AHIhp8IgwgFlStfCAMIBB8Ig0gDFStfCIQIBp8IgwgEFStfCAMIBd8IhAgDFStfCIXIAMpA4AHfCIMIBdUrXwgCyAMfCIXIAxUrXwiDFANACAMIA98Ig8gDFoNACAMIA9WrSIMIA58Ig4gDFoNACAMIA5WrSIMIAp8IgogDFQhBgsgA0HwBmogDUKblK/D8rWo3oZ/fiIMQgBCbUIAEMkDIANB4AZqIAxCAEJ/QgAQyQMgA0HQBmogDEIAQv///////////wBCABDJAyADKQPYBiADKQPoBiILIAsgAykD+AYgAykD8AYiDCANfCAMVK18Ig0gAykD4AYiFnwiDCANVK18IAwgDCAQfCIMVq18Ig0gFnwiCyANVK18IAsgF3wiDSALVK18IhAgAykD0AZ8IgsgEFStfCALIA98IhAgC1StfCILUEUEQCALIA58Ig4gC1QiBa0iCyAKfCIPIAogBRshCiAFIAsgD1ZxIQULIANBwAZqIAxCm5Svw/K1qN6Gf34iC0IAQm1CABDJAyADQbAGaiALQgBCf0IAEMkDIANBoAZqIAtCAEL///////////8AQgAQyQMgAykDqAYgAykDuAYiCyALIAMpA8gGIAwgAykDwAYiDHwgDFStfCIPIAMpA7AGIhd8IgwgD1StfCAMIA18Ig8gDFStfCILIBd8IgwgC1StfCAMIBB8Ig0gDFStfCILIAMpA6AGfCIMIAtUrXwgDCAOfCILIAxUrXwiDCAKfCIOIAogDEIAUiIIGyEKAkACQCAEIAZyIAVyIAwgDlYiBK0gDCAIG0IAUnIgBCAIcSAKQgBTcnJFBEBC////////////ACEQIApC////////////AFIgC0J/UnIgDUJ/UnINAkJ/IQ5CfyEMIA9CbVQNAgwBCyAKIRAgCyEOIA0hDAsgDEIBfCIKIA9CbVStIgt9IQ0gDkIBfCIXIAxCf1IgCiALVHKtIgp9IQsgECAOQn9SIAogF1ZyrX1C////////////AH0hCiAPQhN8IQ8LIAMgDzcDiA8gAyANNwOADyADIAs3A/gOIAMgCjcD8A4gA0GQDmogA0GwDmogA0HwDmoQfCADKQOQDiIPIBh8IgwgAykDmA4iCiAVfCILIApUIAsgAykDoA4iCiASfCINIApUIA0gDSADKQOoDiIOIBl8IgogDlStfCINVnKtfCIQIAtUcq18IQ4CQAJAAkAgDCAPVCAMIA5Wcg0AQv///////////wAhCyAOIgxC////////////AFEEQEJ/IQtC////////////ACEMIBBCf1INAiANQn9SBEAgDSESDAQLQm0hCyAKIQwgCkJtUQ0BCyALIAxYDQAgDiEMDAELIA1CAXwiDCAKQm1UrSILfSESIBBCAXwiDyANQn9SIAsgDFZyrSIMfSELIA4gEEJ/UiAMIA9Wcq19Qv///////////wB9IQwgCkITfCEKDAELIBAhCyANIRILIAMgCjcDiA4gAyASNwOADiADIAs3A/gNIAMgDDcD8A0gA0GAD2pCADcDACADQfgOakIANwMAIANCADcD8A4gA0LMADcDiA8gA0HQDmoiBCADQfAOaiAJEHwgA0GICWogA0HwDWogBBBcIAMoAtwNIgQEQCADKALgDSAEQQJ0EN8ECwJAIAMoApQLIgRFDQAgBCAEQQxsQRNqQXhxIgZqQQlqIgRFDQAgAygCkAsgBmsgBBDfBAsgAygCwAsiBEGAgICAeEYgBEVyDQEgAygCxAsgBEECdBDfBAwBCyADIAo3A4gPIAMgCzcDgA8gAyATNwP4DiADIA8gBK19NwPwDiABKQMAIgohESACKQMAIhIhDiADAn4CQAJ+AkAgCiASUg0AIAEpAwgiEyACKQMIIg5SBEAgEyERDAELIAEpAxAiFCACKQMQIg5SBEAgFCERDAELIBMhDSABKQMYIhEhDCAUIBEgAikDGCIOUQ0BGgsgDiARVA0BIAEpAwghEyACKQMIIQ0gASkDECEUIAEpAxghESACKQMYIQwgAikDEAsiCyAUfSIQIAwgEVStIg99IQ4gDSATfSIVIAsgFFQgDyAQVnKtIhB9IQsgDSATVCAQIBVWciEEIBIgCn0hCiAMIBF9DAELIAEpAxAiFCACKQMQIhFUIBQgEX0iDCABKQMYIhEgAikDGCILVK0iDVRyrSIQIAEpAwgiEyACKQMIIg99IhVCf4V8Ig4gDEJ/hSANfCIMIBEgC30iDUJtVq0iGFStIhl9IQsgDiAZVCEEIAwgGH0hDiAPIBNWIBAgFVZyrSASIAp9fEL///////////8AfCEKQm0gDX0LNwPICSADIA43A8AJIAMgCzcDuAkgAyAKIAStfTcDsAkgA0GICWogA0HwDmogA0GwCWoQXAsgAygCiAkEQCADIAMpA5gJNwO4CSADIAMpA5AJNwOwCUGM98EAQSsgA0GwCWpB/PbBAEG498EAEMoDAAsgA0GwBWogAykDqAkiFUIAIAMpA6AJIhhCABDJAyADQaAFaiAVQgAgAykDmAkiGUIAEMkDIANBkAVqIBVCACADKQOQCSIXQgAQyQMgA0HgBWogGEIAIBlCABDJAyADQdAFaiAYQgAgF0IAEMkDIANBgAZqIBlCACAXQgAQyQMgA0GABWogFUIAIBVCABDJAyADQcAFaiAYQgAgGEIAEMkDIANB8AVqIBlCACAZQgAQyQMgA0GQBmogF0IAIBdCABDJAyADQfAEaiADKQOABSIPQpuUr8Pytajehn9+IgpCAEJtQgAQyQMgA0HgBGogCkIAQn9CABDJAyADQdAEaiAKQgBC////////////AEIAEMkDIAMpA4gGIAMpA9gFIAMpA5gFIAMpA6gFIAMpA7gFIgwgAykDoAV8IgogDFStfCILIAMpA5AFfCIMIAtUrXwiDSADKQPQBXwiCyANVK18IAsgCyADKQPoBSAMIAwgAykD4AV8IgxWrXx8IgtWrXwiDiADKQOABnwiDSAOVK18Ig5CP4ggAykDmAYgAykDkAYiEiAOQgGGIA1CP4iEfCIOIBJUrXwgDiADKQP4BSADKQPIBSADKQPABSIQIApCAYYgAykDsAUiFkI/iIR8IhIgEFStfCASIAMpA4gFIhAgFkIBhnwiFiAQVK18IhogElStfCISIAxCAYYgCkI/iIR8IhsgElStIhIgAykD8AV8IgogElStfCAKIAtCAYYgDEI/iIR8IhAgClStfCIKIA1CAYYgC0I/iIR8IhIgClStfCIMIA5UrXx8IQ1BACEFAn8CQCADKQPYBCADKQPoBCILIAsgAykD+AQgDyADKQPwBCIKfCAKVK18Ig4gAykD4AQiD3wiCiAOVK18IAogCiAWfCIKVq18Ig4gD3wiCyAOVK18IAsgGnwiDiALVK18Ig8gAykD0AR8IgsgD1StfCALIBt8Ig8gC1StfCILUA0AIAsgEHwiECALVCIERQ0AIAStIgsgEnwiEiALWg0AIAsgElatIgsgDHwiDCALWg0AIAsgDFatIgsgDXwiDSALVAwBC0EACyEGIANBwARqIApCm5Svw/K1qN6Gf34iC0IAQm1CABDJAyADQbAEaiALQgBCf0IAEMkDIANBoARqIAtCAEL///////////8AQgAQyQMCQCADKQOoBCADKQO4BCILIAsgAykDyAQgCiADKQPABCIKfCAKVK18IhYgAykDsAQiGnwiCiAWVK18IAogDnwiCyAKVK18Ig4gGnwiCiAOVK18IAogD3wiDiAKVK18Ig8gAykDoAR8IgogD1StfCAKIBB8IhAgClStfCIKUA0AIAogEnwiEiAKWg0AIAogElatIgogDHwiDCAKWg0AIAogDFatIgogDXwiDSAKVCEFCyADQZAEaiALQpuUr8Pytajehn9+IgpCAEJtQgAQyQMgA0GABGogCkIAQn9CABDJAyADQfADaiAKQgBC////////////AEIAEMkDQQAhBCADKQP4AyADKQOIBCIPIA8gAykDmAQgAykDkAQiCiALfCAKVK18IgsgAykDgAQiFnwiCiALVK18IAogCiAOfCIKVq18Ig4gFnwiCyAOVK18IAsgEHwiDiALVK18IhAgAykD8AN8IgsgEFStfCALIBJ8IhAgC1StfCILUEUEQCALIAx8IgwgC1QiBK0iCyANfCISIA0gBBshDSAEIAsgElZxIQQLIANB4ANqIApCm5Svw/K1qN6Gf34iC0IAQm1CABDJAyADQdADaiALQgBCf0IAEMkDIANBwANqIAtCAEL///////////8AQgAQyQMgAykDyAMgAykD2AMiCyALIAMpA+gDIAogAykD4AMiCnwgClStfCISIAMpA9ADIg98IgogElStfCAKIA58IhIgClStfCILIA98IgogC1StfCAKIAogEHwiClatfCIOIAMpA8ADfCILIA5UrXwgCyAMfCIQIAtUrXwiDCANfCILIA0gDEIAUiIIGyENAkACQCAFIAZyIARyIAsgDFQiBK0gDCAIG0IAUnIgBCAIcSANQgBTcnJFBEBC////////////ACELIA1C////////////AFIgEEJ/UnIgCkJ/UnINAkJ/IQxCfyEOIBJCbVQNAgwBCyANIQsgECEMIAohDgsgDkIBfCINIBJCbVStIhB9IQogDEIBfCIPIA5Cf1IgDSAQVHKtIg19IRAgCyAMQn9SIA0gD1ZyrX1C////////////AH0hDSASQhN8IRILIAEpAwAiDyEOIAMCfgJAAkAgDyANIgtSDQAgEyIOIBAiC1INACAKIQsgCiAUIg5SDQAgESIOIBIiC1ENAQsgCyAOWg0AIAogFFYgFCAKfSIKIBEgElStIgxUcq0iCyATIBB9IhZCf4V8Ig4gCkJ/hSAMfCIKIBEgEn0iEUJtVq0iDFStIhJ9IRQgDiASVCEEIAogDH0hDiAQIBNWIAsgFlZyrSANIA99fEL///////////8AfCETQm0gEX0MAQsgCiAUfSIMIBEgElatIgt9IQ4gECATfSIWIAogFFQgCyAMVnKtIgp9IRQgECATVCAKIBZWciEEIA0gD30hEyASIBF9CzcDyAkgAyAONwPACSADIBQ3A7gJIAMgEyAErX03A7AJIANBiAlqIANBsAlqIAIQyAIgASkDGCENIAEpAxAhEyABKQMIIQwgAykDiAkiEiERIANB8AJqAn4CQAJ+AkAgEiAPIgpSDQAgDCIKIAMpA5AJIhFSDQAgEyIKIAMpA5gJIhFSDQAgCiELIAwgDSIKIhQgAykDoAkiEVENARoLIAMpA6AJIRQgCiARVA0BIAMpA5gJIQsgAykDkAkLIQ4gEyALfSIKIA0gFFStIhB9IREgDCAOfSIWIAogEFQgCyATVnKtIgp9IRMgDCAOVCAKIBZWciECIA8gEn0hDiANIBR9DAELIAMpA5gJIgogE1QgCiATfSIKIA0gFFatIhFUcq0iCyADKQOQCSIOIAx9IhBCf4V8IhYgCkJ/hSARfCIKIBQgDX0iDUJtVq0iEVStIhR9IRMgFCAWViECIAogEX0hESAMIA5WIAsgEFZyrSAPIBJ9fEL///////////8AfCEOQm0gDX0LIg1CACAVQgAQyQMgA0GwAmogDUIAIBhCABDJAyADQaACaiANQgAgGUIAEMkDIANBkAJqIA1CACAXQgAQyQMgA0HgAmogAykD8AIiDEKblK/D8rWo3oZ/fiIKQgBCbUIAEMkDIANB0AJqIApCAEJ/QgAQyQMgA0HAAmogCkIAQv///////////wBCABDJAyADQYACaiARQgAgFUIAEMkDIANBwAFqIBFCACAYQgAQyQMgA0GwAWogEUIAIBlCABDJAyADQaABaiARQgAgF0IAEMkDIANB8AFqIAMpA9ACIgogAykD+AIiFCADKQOwAnwiEnwiESADKQPoAiAMIAMpA+ACIgt8IAtUrXx8IgwgAykDgAJ8IgtCm5Svw/K1qN6Gf34iDUIAQm1CABDJAyADQeABaiANQgBCf0IAEMkDIANB0AFqIA1CAEL///////////8AQgAQyQMgA0GQAWogE0IAIBVCABDJAyADQdAAaiATQgAgGEIAEMkDIANBEGogE0IAIBlCABDJAyADIBNCACAXQgAQyQMgA0GAAWogAykDiAIgCyAMVK18Ig8gAykDwAF8Ig0gCiADKQO4AiASIBRUrXwiECADKQOgAnwiE3wiFCAMIBFUrSADKQPYAiIWIAogEVatfHx8Ihp8IhEgAykD4AEiG3wiDCADKQP4ASADKQPwASIKIAt8IApUrXx8IgsgAykDkAF8IhJCm5Svw/K1qN6Gf34iCkIAQm1CABDJAyADQfAAaiAKQgBCf0IAEMkDIANB4ABqIApCAEL///////////8AQgAQyQMgA0GwA2ogDiACrX0iCkIAIBVCABDJAyADQaADaiAKQgAgGEIAEMkDIANBkANqIApCACAZQgAQyQMgA0GAA2ogCkIAIBdCABDJAyADQUBrIAMpA5gBIAsgElatfCIYIAMpA1B8IgogGyADKQOoAiAQIBNWrXwiGSADKQOQAnwiDiADKQPAAnwiECAUIBpWrSAWIBMgFFatfHx8IhMgAykDsAF8IhQgDSARVq0gAykDyAEgDSAPVK18fHwiDXwiDyALIAxUrSADKQPoASIXIAwgEVStfHx8IhZ8IhEgAykDcCIafCIMIAMpA4gBIAMpA4ABIgsgEnwgC1StfHwiCyADKQOwA3wiEkKblK/D8rWo3oZ/fiIVQgBCbUIAEMkDIANBMGogFUIAQn9CABDJAyADQSBqIBVCAEL///////////8AQgAQyQMCQAJAIAMpAyggAykDaCADKQPYASAQIBNWrSADKQPIAiAOIBBWrXx8IhUgAykDmAIgDiAZVK18fCIOIAMpA6ABfCIQIA0gFFStIAMpA7gBIBMgFFatfHx8IhMgAykD0AF8IhQgE1StfCAUIA8gFlatIBcgDSAPVq18fHwiDSAUVK18Ig8gECATVq0gAykDqAEgDiAQVq18fCIQIA4gFVStfCIVfCITIAMpAwB8Ig4gAykDGCANIA0gAykDEHwiDVatfCANIAogEVatIAMpA1ggCiAYVK18fHwiCiANVK18fCINIAMpA2B8IhQgDVStfCAUIAMpA3giGCAKIAogGnwiClatfCAKIAsgDFStIBggDCARVK18fHwiGCAKVK18fCIKIBRUrXwiFCANIA5UrSADKQMIIA4gE1StfHwiGSAPIBNWrSAQIBVWrXx8IhB8IhEgAykDgAN8Ig0gAykDmAMgCiAKIAMpA5ADfCIKVq18IAogCiADKQOoAyADKQO4AyALIBJWrXwiCyADKQOgA3wiDCALVK18IAwgDCAYfCIMVq18fCIKVq18fCITIAMpAyB8IgsgE1StfCALIAsgAykDOCIPIAogAykDMCIVfCIOIApUrXwgDiAPIAwgFXwiCiAMVK18IAogCiADKQNIIAMpA0AiDCASfCAMVK18fCIKVq18fCIMIA5UrXx8IgtWrXwiDiANIBNWrSADKQOIAyANIBFUrXx8Ig0gESAUVK0gECAZVK18fCIRfCIPIA5UIA0gEVZyIA9CAFNyRQRAIAsgDINCf1IgCkJtVHIgD0L///////////8AUnINAQsgDEIBfCINIApCbVStIhN9IREgC0IBfCIUIAxCf1IgDSATVHKtIgx9IQ4gDyALQn9SIAwgFFZyrX1C////////////AH0hDyAKQhN8IQoMAQsgDCERIAshDgsgAyAKNwPICSADIBE3A8AJIAMgDjcDuAkgAyAPNwOwCSAAQSBqIANBsAlqIAFBIGoQyAIgAEEYaiADQaAJaikDADcDACAAQRBqIANBmAlqKQMANwMAIABBCGogA0GQCWopAwA3AwAgACADKQOICTcDACAAIAc6AEALIANBkA9qJAAL30sCBX8XfiMAQZARayICJAAgAkHID2oiBEHc4MAAEK4CAkACQAJAAkAgASAEQSAQ8QMEQCAEQZzhwAAQrgIgASACQcgPakEgEPEDRQ0BIAJBATYCzA8gAkH048AANgLIDyACQgE3AtQPIAIgAa1CgICAgPABhDcDiA4gAiACQYgOajYC0A8gAEEIaiAEENICIABCAjcDAAwECyACQcgPakHg58AAQd8AEKYCQSghAyACKQPIDyEQIAIpA9APIRIgAikD2A8hFCACKQPgDyEVIAIpA+gPIRYgAikD8A8hFwNAIAJBwAJqIANBqJ/AAGopAwAiB0IAIBdCABDJAyACQdACaiAHQgAgFkIAEMkDIAJB4AJqIAdCACAVQgAQyQMgAkHwAmogB0IAIBRCABDJAyACQYADaiAHQgAgEkIAEMkDIAJBkANqIAdCACAQQgAQyQMgAkGwAmogAikDwAIiEyAPfCIJQgBCAEL9//P/z///+Yl/EMkDIAJBoAJqIAIpA7gCIgdCAEKr1f7///+//7l/QgAQyQMgAkGQAmogB0IAQv//z4rr///VHkIAEMkD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QCANIQcgCCERIAohDCALIRJCms3/y6O9xIAaIQ4MBAsgCkK/pZScz/DSu+QAVg0CQtfZrprk9umNywAhEiAKQr+llJzP8NK75ABSBEAgDSEHIAghESAKIQxCms3/y6O9xIAaIQ4MBAsgCEKk7MO1j9S0mOcAVg0CQr+llJzP8NK75AAhDCAIQqTsw7WP1LSY5wBSBEAgDSEHIAghEUKazf/Lo73EgBohDgwECyANQv//z4rr///VHlYNAkKk7MO1j9S0mOcAIREgDUL//8+K6///1R5RDQEgDSEHQprN/8ujvcSAGiEODAMLIA0hByAIIREgCiEMIAshEgwCC0L//8+K6///1R4hByAPQqvV/v///7//uX9aDQBCms3/y6O9xIAaIQ4MAQsgDUL//8+K6///1R59IgkgD0Kr1f7///+//7l/VK0iDH0hByAIQqTsw7WP1LSY5wB9IhMgDUL//8+K6///1R5UIAkgDFRyrSIJfSERIApCv6WUnM/w0rvkAH0iDSAIQqTsw7WP1LSY5wBUIAkgE1ZyrSIIfSEMIAtC19mumuT26Y3LAH0iCSAKQr+llJzP8NK75ABUIAggDVZyrSIIfSESIA4gC0LX2a6a5PbpjcsAVCAIIAlWcq19QprN/8ujvcSAGn0hDiAPQtWqgYCAgMCAxgB8IQ8LIAIgDzcDwAwgAiAHNwO4DCACIBE3A7AMIAIgDDcDqAwgAiASNwOgDCACIA43A5gMIAJByA9qIAJB6AtqIAJBmAxqQQAQMSACLQCoEEECRgRAIAJBkA5qIAJB0A9qKAIANgIAIAIgAikDyA83A4gOQYSdwABBKyACQYgOakHYq8AAQfTpwAAQygMACyACQYgOaiIFIAJByA9qIgRB6AD8CgAAIARBnunAABCuAkEAIQRB0c7FAC0AABpBFEEBENYEIgMEQCADQRBqQe7pwAAoAAA2AAAgA0EIakHm6cAAKQAANwAAIANB3unAACkAADcAACACQYALaiAFQegA/AoAACACQaAKaiABQRhqKQAANwMAIAJBmApqIAFBEGopAAA3AwAgAkGQCmogAUEIaikAADcDACACQfAJaiACQdAPaikAADcDACACQfgJaiACQdgPaikAADcDACACQYAKaiACQeAPaikAADcDACACIAEpAAA3A4gKIAIgAikAyA83A+gJQR4hAUGKseH4BSEFQgAhEkEUIQYMAQtBAUEUQYSkwAAQyAQACyAAIBI3AwAgAEEIaiACQYALakHoAPwKAAAgAEHwAGogAkGoCmpB2AD8CgAAIAAgBDoAnAIgACAFNgKYAiAAIAE2ApQCIAAgBjYCkAIgACADNgKMAiAAIAY2AogCIABB4AFqIAJBoApqKQMANwMAIABB2AFqIAJBmApqKQMANwMAIABB0AFqIAJBkApqKQMANwMAIAAgAikDiAo3A8gBIAAgAikD6Ak3A+gBIABB8AFqIAJB8AlqKQMANwMAIABB+AFqIAJB+AlqKQMANwMAIABBgAJqIAJBgApqKQMANwMACyACQZARaiQAC5RGAgd/EX4jAEHQEGsiAyQAAkACQAJAAn8CQAJAAkACQCABLQBAIgcgAi0AQEYEQCABQejRwQBBIBDxA0UEQCABQSBqQejRwQBBIBDxA0UNAgsgAkHo0cEAQSAQ8QNFBEAgAkEgakHo0cEAQSAQ8QNFDQMLAkAgASACQSAQ8QNFBEAgAUEgaiIJIAJBIGpBIBDxA0UNASAAQgA3AwAgACAHOgBAIABBOGpCADcDACAAQTBqQgA3AwAgAEEoakIANwMAIABBIGpCADcDACAAQRhqQgA3AwAgAEEQakIANwMAIABBCGpCADcDAAwKCyABKQMgIg8hDSACKQMgIg4hDAJ+AkAgDiAPUg0AIAEpAygiECACKQMoIgxSBEAgECENDAELIAEpAzAiCiACKQMwIgxSBEAgCiENDAELIBAhEiABKQM4Ig0hCyAKIA0gAikDOCIMUQ0BGgsgDCANVA0FIAEpAyghECACKQMoIRIgASkDMCEKIAEpAzghDSACKQM4IQsgAikDMAsiESAKfSIVIAsgDVStIhZ9IQwgEiAQfSIXIBUgFlQgCiARVnKtIhF9IQogESAXViAQIBJWciEEIA4gD30hDiALIA19IQ0MBwsgA0HwCmoQOiAHRQRAIAMpA4ALIRUgAykD+AohFiADKQPwCiEXIANBiAtqDAYLIAMoAqANQQFxDQRB7PbBABDoBAALQYD2wQBBM0Hc9sEAEP4DAAsgACAHOgBAIAAgAikDIDcDICAAIAIpAwA3AwAgAEE4aiACQThqKQMANwMAIABBMGogAkEwaikDADcDACAAQShqIAJBKGopAwA3AwAgAEEIaiACQQhqKQMANwMAIABBEGogAkEQaikDADcDACAAQRhqIAJBGGopAwA3AwAMBgsgACAHOgBAIAAgASkDIDcDICAAIAEpAwA3AwAgAEE4aiABQThqKQMANwMAIABBMGogAUEwaikDADcDACAAQShqIAFBKGopAwA3AwAgAEEIaiABQQhqKQMANwMAIABBEGogAUEQaikDADcDACAAQRhqIAFBGGopAwA3AwAMBQtC3bCFjOi2kai4fyABKQMoIhAgAikDKCILfSIRIAEpAzAiCiACKQMwIgxUIAogDH0iCiABKQM4IgwgAikDOCISVK0iDVRyrSIVfSIWfSIXIAogDX0iCkKR4eXNh4n6mShWQpHh5c2HifqZKCAKfSINIAwgEn0iEkKBgICAv7L98MMAVq0iDFRyrSIYfSEKIBcgGFQgFkLdsIWM6LaRqLh/VnIhBCANIAx9IQwgESAVVCALIBBWcq0gDiAPfXxCqcDGia7Ok7IwfCEOQoGAgIC/sv3wwwAgEn0hDQwCCyADKQO4DSEVIAMpA7ANIRYgAykDqA0hFyADQcANagspAwAhGCADQvH////OiqfhBTcDiBAgA0L9zonxjfjY+qR/NwOAECADQoqlr8vmyfqlMzcD+A8gA0KOu97wzOjZjyo3A/APIANB4AlqIAEpAxAiEUIAIAEpAxgiEEIAEMkDIANBwAlqIAEpAwgiEkIAIBBCABDJAyADQeAIaiABKQMAIgpCACAQQgAQyQMgA0GwCWogEkIAIBFCABDJAyADQfAIaiAKQgAgEUIAEMkDIANBgAlqIApCACASQgAQyQMgA0GwCmogEEIAIBBCABDJAyADQdAJaiARQgAgEUIAEMkDIANBoAlqIBJCACASQgAQyQMgA0GQCWogCkIAIApCABDJAyADQaAKaiADKQOwCiITQv////++sv3wQn4iCkIAQoGAgIC/sv3wwwBCABDJAyADQZAKaiAKQgBCkeHlzYeJ+pkoQgAQyQMgA0GACmogCkIAQt2whYzotpGouH9CABDJAyADQfAJaiAKQgBCqcDGia7Ok7IwQgAQyQMgAykDiAkgAykD+AggAykD6AggAykDyAkgAykD6AkiCyADKQPACXwiCiALVK18IgwgAykD4Ah8IgsgDFStfCINIAMpA/AIfCIMIA1UrXwgDCAMIAMpA7gJIAsgCyADKQOwCXwiC1atfHwiDFatfCIPIAMpA4AJfCINIA9UrXwiD0I/iCADKQOYCSADKQOQCSIOIA9CAYYgDUI/iIR8Ig8gDlStfCAPIA8gAykDqAkgAykD2AkgAykD0AkiFCAKQgGGIAMpA+AJIhlCP4iEfCIOIBRUrXwgDiADKQO4CiIUIBlCAYZ8IhkgFFStfCIUIA5UrXwiDiALQgGGIApCP4iEfCIaIA5UrSIOIAMpA6AJfCIKIA5UrXwgCiAMQgGGIAtCP4iEfCILIApUrXwiCiANQgGGIAxCP4iEfCIMIApUrXwiD1atfHwhDQJ/AkAgAykD+AkgAykDiAogAykDmAogAykDqAogAykDoAoiCiATQn2DfCAKVK18Ig4gAykDkAp8IgogDlStfCAKIBl8Ig4gClStfCITIAMpA4AKfCIKIBNUrXwgCiAUfCITIApUrXwiFCADKQPwCXwiCiAUVK18IAogGnwiFCAKVK18IgpQDQAgCiALfCILIApUIgRFDQAgBK0iCiAMfCIMIApaDQAgCiAMVq0iCiAPfCIPIApaDQAgCiAPVq0iCiANfCINIApUDAELQQALIQQgA0HQCGogDkL/////vrL98EJ+IgpCAEKBgICAv7L98MMAQgAQyQMgA0HACGogCkIAQpHh5c2HifqZKEIAEMkDIANBsAhqIApCAELdsIWM6LaRqLh/QgAQyQMgA0GgCGogCkIAQqnAxomuzpOyMEIAEMkDAkAgAykDqAggAykDuAggAykDyAggAykD2AggAykD0AgiCiAOfCAKVK18Ig4gAykDwAh8IgogDlStfCAKIBN8Ig4gClStfCITIAMpA7AIfCIKIBNUrXwgCiAUfCITIApUrXwiFCADKQOgCHwiCiAUVK18IAogC3wiFCAKVK18IgpQDQAgCiAMfCIMIApaDQAgCiAMVq0iCiAPfCIPIApaDQAgCiAPVq0iCiANfCINIApUIQYLIANBkAhqIA5C/////76y/fBCfiIKQgBCgYCAgL+y/fDDAEIAEMkDIANBgAhqIApCAEKR4eXNh4n6mShCABDJAyADQfAHaiAKQgBC3bCFjOi2kai4f0IAEMkDIANB4AdqIApCAEKpwMaJrs6TsjBCABDJAyADKQPoByADKQP4ByADKQOICCADKQOYCCADKQOQCCIKIA58IApUrXwiCyADKQOACHwiCiALVK18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fCIUIAtUrXwiC1ANACALIA58Ig4gC1QiBEUNACAErSILIAx8IgwgC1oNACALIAxWrSILIA98Ig8gC1oNACALIA9WrSILIAp8IgogC1QMAQtBAAshBiADQbAFaiANQonHmaSu8IHph39+IgtCAELH+vPD7YKjkDxCABDJAyADQaAFaiALQgBCjZXHw5bS2sCXf0IAEMkDIANBkAVqIAtCAELdsIWM6LaRqLh/QgAQyQMgA0GABWogC0IAQqnAxomuzpOyMEIAEMkDAkAgAykDiAUgAykDmAUgAykDqAUgAykDuAUgAykDsAUiCyANfCALVK18Ig0gAykDoAV8IgsgDVStfCALIBN8Ig0gC1StfCITIAMpA5AFfCILIBNUrXwgCyAUfCITIAtUrXwiFCADKQOABXwiCyAUVK18IAsgDnwiDiALVK18IgtQDQAgCyAMfCIMIAtaDQAgCyAMVq0iCyAPfCIPIAtaDQAgCyAPVq0iCyAKfCIKIAtUIQULIANB8ARqIA1CiceZpK7wgemHf34iC0IAQsf688PtgqOQPEIAEMkDIANB4ARqIAtCAEKNlcfDltLawJd/QgAQyQMgA0HQBGogC0IAQt2whYzotpGouH9CABDJAyADQcAEaiALQgBCqcDGia7Ok7IwQgAQyQNBACEEIAMpA8gEIAMpA9gEIAMpA+gEIAMpA/gEIAMpA/AEIgsgDXwgC1StfCINIAMpA+AEfCILIA1UrXwgCyATfCINIAtUrXwiEyADKQPQBHwiCyATVK18IAsgDnwiDiALVK18IhMgAykDwAR8IgsgE1StfCALIAx8IhMgC1StfCILUEUEQCALIA98Ig8gC1QiBK0iCyAKfCIMIAogBBshCiAEIAsgDFZxIQQLIANBsARqIA1CiceZpK7wgemHf34iC0IAQsf688PtgqOQPEIAEMkDIANBoARqIAtCAEKNlcfDltLawJd/QgAQyQMgA0GQBGogC0IAQt2whYzotpGouH9CABDJAyADQYAEaiALQgBCqcDGia7Ok7IwQgAQyQMgAykDiAQgAykDmAQgAykDqAQgAykDuAQgAykDsAQiCyANfCALVK18IgwgAykDoAR8IgsgDFStfCALIAsgDnwiC1atfCINIAMpA5AEfCIMIA1UrXwgDCATfCINIAxUrXwiDiADKQOABHwiDCAOVK18IAwgD3wiDiAMVK18IgwgCnwiDyAKIAxCAFIiCBshCgJAAkACQAJAIAUgBnIgBHIgDCAPViIErSAMIAgbQgBSciAEIAhxIApCqcDGia7Ok7IwVnJyDQAgCkKpwMaJrs6TsjBSDQEgDkLdsIWM6LaRqLh/Vg0AIA5C3bCFjOi2kai4f1IEQCANIQwgDiEPQqnAxomuzpOyMCEKDAQLQt2whYzotpGouH8hDiANQo2Vx8OW0trAl39WDQAgDUKNlcfDltLawJd/UiALQsb688PtgqOQPFhyDQILIA1C8+q4vOmtpb/oAHwiDyALQsf688PtgqOQPFStIhN9IQwgDkKjz/rzl8nu18cAfCIUIA1CjZXHw5bS2sCXf1QgDyATVHKtIg19IQ8gCiAOQt2whYzotpGouH9UIA0gFFZyrX1CqcDGia7Ok7IwfSEKIAtCx/rzw+2Co5A8fSELDAILIA0hDCAOIQ8MAQsgDSEMQt2whYzotpGouH8hD0KpwMaJrs6TsjAhCgsgASkDACITIQ4gCiENAn4CQAJAIAogE1INACASIg4gDyINUg0AIAwhDSAMIBEiDlINACALIQ0gCyAQIg5RDQELIA0gDloNAELdsIWM6LaRqLh/IBIgD30iDSAMIBFWIBEgDH0iDCALIBBWrSIRVHKtIhR9Ig59IhkgDCARfSIMQo2Vx8OW0trAl39WQo2Vx8OW0trAl38gDH0iDCAQIAt9IhBCx/rzw+2Co5A8Vq0iC1RyrSIafSERIBkgGlQgDkLdsIWM6LaRqLh/VnIhBCAMIAt9IQ5Cx/rzw+2Co5A8IBB9IRAgDSAUVCAPIBJWcq0gCiATfXxCqcDGia7Ok7IwfAwBCyAMIBF9Ig0gCyAQVK0iFH0hDiAPIBJ9IhkgDSAUVCAMIBFUcq0iDH0hESAPIBJUIAwgGVZyIQQgCyAQfSEQIAogE30LIQogAyAQNwOICyADIA43A4ALIAMgETcD+AogAyAKIAStfTcD8AogA0GwEGoiBCADQfAKaiIFIAIQwgIgA0GIC2ogAUEYaikDADcDACADQYALaiABQRBqKQMANwMAIANB+ApqIAFBCGopAwA3AwAgAyABKQMANwPwCiADQcgKaiAFIAQQwgIgA0GwAmogAykD4AoiCkIAIBVCABDJAyADQaACaiAKQgAgFkIAEMkDIANBkAJqIApCACAXQgAQyQMgA0GAAmogCkIAIBhCABDJAyADQfABaiADKQOwAiILQonHmaSu8IHph39+IgpCAELH+vPD7YKjkDxCABDJAyADQeABaiAKQgBCjZXHw5bS2sCXf0IAEMkDIANB0AFqIApCAELdsIWM6LaRqLh/QgAQyQMgA0HAAWogCkIAQqnAxomuzpOyMEIAEMkDIANB8AJqIAMpA9gKIgpCACAVQgAQyQMgA0HgAmogCkIAIBZCABDJAyADQdACaiAKQgAgF0IAEMkDIANBwAJqIApCACAYQgAQyQMgA0GwAWogAykD4AEiDyADKQO4AiISIAMpA6ACfCINfCIQIAMpA/gBIAsgAykD8AEiCnwgClStfHwiCyADKQPwAnwiDEKJx5mkrvCB6Yd/fiIKQgBCx/rzw+2Co5A8QgAQyQMgA0GgAWogCkIAQo2Vx8OW0trAl39CABDJAyADQZABaiAKQgBC3bCFjOi2kai4f0IAEMkDIANBgAFqIApCAEKpwMaJrs6TsjBCABDJAyADQbADaiADKQPQCiIKQgAgFUIAEMkDIANBoANqIApCACAWQgAQyQMgA0GQA2ogCkIAIBdCABDJAyADQYADaiAKQgAgGEIAEMkDIANB8ABqIAMpA/gCIAsgDFatfCITIAMpA+ACfCIRIAMpA6gCIA0gElStfCIUIAMpA5ACfCISIAMpA9ABfCINIAsgEFStIAMpA+gBIA8gEFatfHx8Ihl8IhAgAykDoAF8IgsgAykDuAEgAykDsAEiCiAMfCAKVK18fCIMIAMpA7ADfCIPQonHmaSu8IHph39+IgpCAELH+vPD7YKjkDxCABDJAyADQeAAaiAKQgBCjZXHw5bS2sCXf0IAEMkDIANB0ABqIApCAELdsIWM6LaRqLh/QgAQyQMgA0FAayAKQgBCqcDGia7Ok7IwQgAQyQMgA0HwA2ogAykDyAoiCkIAIBVCABDJAyADQeADaiAKQgAgFkIAEMkDIANB0ANqIApCACAXQgAQyQMgA0HAA2ogCkIAIBhCABDJAyADQTBqIAMpA7gDIAwgD1atfCIYIAMpA6ADfCIOIAMpA5gCIBIgFFStfCIUIAMpA4ACfCIVIAMpA8ABfCIWIA0gGVatIAMpA9gBIA0gElStfHx8IhIgAykD0AJ8Ig0gECARVK0gAykD6AIgESATVK18fHwiESADKQOQAXwiFyALIAxWrSADKQOoASALIBBUrXx8fCITfCIQIAMpA2B8IgsgAykDeCADKQNwIgogD3wgClStfHwiDCADKQPwA3wiD0KJx5mkrvCB6Yd/fiIKQgBCx/rzw+2Co5A8QgAQyQMgA0EgaiAKQgBCjZXHw5bS2sCXf0IAEMkDIANBEGogCkIAQt2whYzotpGouH9CABDJAyADIApCAEKpwMaJrs6TsjBCABDJAwJAAkACQAJAIAMpAwggAykDSCADKQOIASASIBZUrSADKQPIASAVIBZWrXx8IAMpA4gCIBQgFVatfHwiFSADKQPAAnwiCiANIBFWrSADKQPYAiANIBJUrXx8fCISIAMpA4ABfCINIBJUrXwgDSATIBdUrSADKQOYASARIBdWrXx8fCIRIA1UrXwgCiASVq0gAykDyAIgCiAVVK18fHwiFSADKQOAA3wiCiADKQOYAyARIBEgAykDkAN8IhFWrXwgESARIA4gEFatIAMpA6gDIA4gGFStfHx8IhFWrXx8IhIgAykDQHwiDSASVK18IA0gAykDWCARIBEgAykDUHwiEVatfCARIAsgDFatIAMpA2ggCyAQVK18fHwiCyARVK18fCIQIA1UrXwgCiASVq0gAykDiAMgCiAVVK18fHwiEiADKQPAA3wiESADKQPYAyAQIAMpA9ADfCIKIBBUrXwgCiAKIAMpA+gDIAMpA/gDIAwgD1atfCIMIAMpA+ADfCIQIAxUrXwgECALIBB8IhBWrXx8IgpWrXx8IgwgAykDAHwiCyAMVK18IAsgCyADKQMYIAogCiADKQMQfCIKVq18IAogCiADKQMoIBAgECADKQMgfCIQVq18IBAgAykDOCADKQMwIg0gD3wgDVStfHwiDSAQVK18fCIKVq18fCILVq18IAwgEVStIAMpA8gDIBEgElStfHx8Ig5CqcDGia7Ok7IwVg0AIA5CqcDGia7Ok7IwUg0BIAtC3bCFjOi2kai4f1YNACALQt2whYzotpGouH9SBEAgCiEQIAshDEKpwMaJrs6TsjAhDgwECyAKQo2Vx8OW0trAl39WDQBC3bCFjOi2kai4fyEMIApCjZXHw5bS2sCXf1IgDULH+vPD7YKjkDxUcg0CCyAKQvPquLzpraW/6AB8IgwgDULH+vPD7YKjkDxUrSIRfSEQIAtCo8/685fJ7tfHAHwiEiAKQo2Vx8OW0trAl39UIAwgEVRyrSIKfSEMIA4gC0LdsIWM6LaRqLh/VCAKIBJWcq19QqnAxomuzpOyMH0hDiANQsf688PtgqOQPH0hDQwCCyAKIRAgCyEMDAELIAohEEKpwMaJrs6TsjAhDgsgAyANNwOICyADIBA3A4ALIAMgDDcD+AogAyAONwPwCiAAQSBqIANB8ApqIAFBIGoQwgIgAEEYaiADQcgQaikDADcDACAAQRBqIANBwBBqKQMANwMAIABBCGogA0G4EGopAwA3AwAgACADKQOwEDcDACAAIAc6AEALIANB0BBqJAALgPYDAkx/EH4jAEGgB2siCSQAAkACQAJAAkACQAJAAkAgAkEBSwRAIAIgA0kNASAJQeACahAhIAktAJgHIUogCSgCjAciCARAIAkoApAHIAhBAnQQ3wQLAkAgCSgCxAQiCEUNACAIIAhBDGxBE2pBeHEiB2pBCWoiCEUNACAJKALABCAHayAIEN8ECyAJKALwBCIIQYCAgIB4RiAIRXJFBEAgCSgC9AQgCEECdBDfBAsCQCAELQDAAUECRwRAIAlB4AJqIARBgAFqQQEgBEEBEEIgCUEQaiAJQegCaikCADcDACAJIAkpAuACNwMIDAELIAlBgICAgHg2AggLIAlBADYCQCAJQoCAgICAATcCOCAJQQA2AjAgCUKAgICAgAE3AiggAkHIAWwhFSAJQfgBaiE5IAlBgANqIScgCUHoAGohDgNAIAlB4ABqIgogASAMaiIiQZgBaikDADcDACAJQdgAaiIHICJBkAFqKQMANwMAIAlB0ABqIgggIkGIAWopAwA3AwAgDiAiQaABaikDADcDACAOQQhqICJBqAFqKQMANwMAIA5BEGogIkGwAWopAwA3AwAgDkEYaiAiQbgBaikDADcDACAJICJBgAFqKQMANwNIICJBwAFqLQAAIQQgCSgCQCILIAkoAjhGBEAgCUE4akGIjsEAEJoDCyAJKAI8IAtByABsaiINIAkpA0g3AwAgDSAEOgBAIA1BCGogCCkDADcDACANQRBqIAcpAwA3AwAgDUEYaiAKKQMANwMAIA1BIGogDikDADcDACANQShqIAlB8ABqKQMANwMAIA1BMGogCUH4AGopAwA3AwAgDUE4aiAJQYABaikDADcDACAJIAtBAWo2AkAgJyAiQSBqKQMANwMAICdBCGoiDSAiQShqKQMANwMAICdBEGoiCyAiQTBqKQMANwMAICdBGGoiCiAiQThqKQMANwMAIAlBwAFqICJBCGopAwA3AwAgCUHIAWogIkEQaikDADcDACAJQdABaiAiQRhqKQMANwMAIAlB2AFqICcpAwA3AwAgCUHgAWogCUGIA2oiBykDADcDACAJQegBaiAJQZADaiIIKQMANwMAIAlB8AFqIAlBmANqIgQpAwA3AwAgCSAiKQMANwO4ASAnICJB4ABqKQMANwMAIA0gIkHoAGopAwA3AwAgCyAiQfAAaikDADcDACAKICJB+ABqKQMANwMAIDkgIkFAaykDADcDACA5QQhqICJByABqKQMANwMAIDlBEGogIkHQAGopAwA3AwAgOUEYaiAiQdgAaikDADcDACA5QSBqICcpAwA3AwAgOUEoaiAHKQMANwMAIDlBMGogCCkDADcDACA5QThqIAQpAwA3AwAgCSgCMCIEIAkoAihGBEAgCUEoakGYjsEAEKQDCyAJKAIsIjMgBEEHdGogCUG4AWpBgAH8CgAAIAkgBEEBaiIENgIwIBUgDEHIAWoiDEcNAAsgCUHgAmohPiAJKAI8IQcgCSgCQCE/IAlBCGohRSMAQbAYayIFJAAgBSA/NgIQIAUgBDYCDAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAQgP0YEQCAFQbATaiIIIAcgPxBwIAUoAsQTITogBSgCwBMhOSAFKAK8EyFOIAUoArgTITsgBSgCtBMhJyAFKAKwEyFPIAVBEGoQISAFQQA2AuAEIAVCgICAgMAANwLYBCAFQQA2AuwEIAVCgICAgMAANwLkBCA/QQFNDQEgBUHgCGoiBCAHID8gMyA/EEIgCCAEEPcBIAVBoBhqIAUoArQTIgggBSgCuBMQGCAFKAKwEyIEBEAgCCAEQQV0EN8ECwJ/IEUoAgAiUEGAgICAeEcEQCAFQbATaiBFEPcBIAVB8ARqIAUoArQTIgggBSgCuBMQGCAFKAKwEyIEBEAgCCAEQQV0EN8ECyAFKAKkGCEHIAUoAvQEIS8gBSgC+AQhCCAFKAKoGCEEIAVBDDYClBggBSAENgLwDiAEQQxHDQQgBSAINgLwDiAIQQxHDQVB0c7FAC0AABpBgANBCBDWBCIIRQ0JIAggBykDADcDACAIQRhqIAdBGGopAwA3AwAgCEEQaiAHQRBqKQMANwMAIAhBCGoiBCAHQQhqKQMANwMAIAhBOGogB0E4aikDADcDACAIQTBqIAdBMGopAwA3AwAgCEEoaiAHQShqKQMANwMAIAggBykDIDcDICAIIAcpA0A3A0AgCEHIAGogB0HIAGopAwA3AwAgCEHQAGogB0HQAGopAwA3AwAgCEHYAGogB0HYAGopAwA3AwAgCCAHKQNgNwNgIAhB6ABqIAdB6ABqKQMANwMAIAhB8ABqIAdB8ABqKQMANwMAIAhB+ABqIAdB+ABqKQMANwMAIAggBykDgAE3A4ABIAhBiAFqIAdBiAFqKQMANwMAIAhBkAFqIAdBkAFqKQMANwMAIAhBmAFqIAdBmAFqKQMANwMAIAggBykDoAE3A6ABIAhBqAFqIAdBqAFqKQMANwMAIAhBsAFqIAdBsAFqKQMANwMAIAhBuAFqIAdBuAFqKQMANwMAIAggBykDwAE3A8ABIAhByAFqIAdByAFqKQMANwMAIAhB2AFqIAdB2AFqKQMANwMAIAhB0AFqIAdB0AFqKQMANwMAIAggBykD4AE3A+ABIAhB6AFqIAdB6AFqKQMANwMAIAhB8AFqIAdB8AFqKQMANwMAIAhB+AFqIAdB+AFqKQMANwMAIAggBykDgAI3A4ACIAhBiAJqIAdBiAJqKQMANwMAIAhBkAJqIAdBkAJqKQMANwMAIAhBmAJqIAdBmAJqKQMANwMAIAggBykDoAI3A6ACIAhBqAJqIAdBqAJqKQMANwMAIAhBsAJqIAdBsAJqKQMANwMAIAhBuAJqIAdBuAJqKQMANwMAIAhB2AJqIAdB2AJqKQMANwMAIAhB0AJqIAdB0AJqKQMANwMAIAhByAJqIAdByAJqKQMANwMAIAggBykDwAI3A8ACIAggBykD4AI3A+ACIAhB6AJqIAdB6AJqKQMANwMAIAhB+AJqIAdB+AJqKQMANwMAIAhB8AJqIAdB8AJqKQMANwMAIAgpAwAhUSAFQbATaiIeIARB+AL8CgAAIAhBgAMQ3wQgBUGYD2ogBUHQE2opAwA3AwAgBUGgD2ogBUHYE2oiLSkDADcDACAFQagPaiAFQeATaiIoKQMANwMAIAVB+AhqIksgBUHwE2opAwA3AwAgBUGACWoiNCAFQfgTaiIxKQMANwMAIAVBiAlqIjUgBUGAFGoiMikDADcDACAFIAUpA8gTNwOQDyAFIAUpA+gTNwPwCCAFQZAJaiI3IAUpA4gUNwMAIAVBmAlqIjggBUGQFGoiDykDADcDACAFQaAJaiI8IAVBmBRqIh8pAwA3AwAgBUGoCWoiPSAFQaAUaiIWKQMANwMAIAVBiAxqIioiCCAFQcAUaiIgKQMANwMAIAVBgAxqIkYgBUG4FGoiJCkDADcDACAFQfgLaiJHIAVBsBRqKQMANwMAIAUgBSkDqBQ3A/ALIAVBqAxqIisiBCAFQeAUaiINKQMANwMAIAVBoAxqIkggBUHYFGoiDCkDADcDACAFQZgMaiJJIAVB0BRqIgspAwA3AwAgBUGQDGoiBiAFKQPIFDcDACAFQYgPaiAFQcATaiIKKQMANwMAIAVBgA9qIAVBuBNqKQMANwMAIAUgBSkDsBM3A/gOIAVB6A9qID0pAwA3AwAgBUHgD2ogPCkDADcDACAFQdgPaiA4KQMANwMAIAVB0A9qIDcpAwA3AwAgBUHID2ogNSkDADcDACAFQcAPaiA0KQMANwMAIAVBuA9qIEspAwA3AwAgBSAFKQPwCDcDsA8gBUGoEGogBCkDADcDACAFQaAQaiBIKQMANwMAIAVBmBBqIEkpAwA3AwAgBUGQEGogBikDADcDACAFQYgQaiAIKQMANwMAIAVBgBBqIEYpAwA3AwAgBUH4D2ogRykDADcDACAFIAUpA/ALNwPwDyAFQegSaiIdIAVBoBVqKQMANwMAIAVB4BJqIkwgBUGYFWopAwA3AwAgBUHYEmoiLCAFQZAVaikDADcDACAFQdASaiIhIAUpA4gVNwMAIAVB+BJqIjAgBUGwFWopAwA3AwAgBUGAE2oiNiAFQbgVaikDADcDACAFQYgTaiJAIAVBwBVqKQMANwMAIAUgBSkDqBU3A/ASIAVBkBNqIkEgBSkDyBU3AwAgBUGYE2oiQiAFQdAVaikDADcDACAFQaATaiJDIAVB2BVqKQMANwMAIAVBqBNqIkQgBUHgFWopAwA3AwAgNSAFQYAWaikDADcDACA0IAVB+BVqKQMANwMAIEsgBUHwFWopAwA3AwAgBSAFKQPoFTcD8AggPSAFQaAWaikDADcDACA8IAVBmBZqKQMANwMAIDggBUGQFmopAwA3AwAgNyAFKQOIFjcDACAFQcgSaiITIAVBgBVqKQMANwMAIAVBwBJqIhcgBUH4FGopAwA3AwAgBUG4EmoiFCAFQfAUaiIRKQMANwMAIAUgBSkD6BQ3A7ASIAQgHSkDADcDACBIIEwpAwA3AwAgSSAsKQMANwMAIAYgISkDADcDACAIIBMpAwA3AwAgRiAXKQMANwMAIEcgFCkDADcDACAFIAUpA7ASNwPwCyAFQegMaiIQIEQpAwA3AwAgBUHgDGoiJSBDKQMANwMAIAVB2AxqIikgQikDADcDACAFQdAMaiIHIEEpAwA3AwAgBUHIDGoiIiBAKQMANwMAIAVBwAxqIiMgNikDADcDACAFQbgMaiIbIDApAwA3AwAgBSAFKQPwEjcDsAwgBUGoDWoiDiA9KQMANwMAIAVBoA1qIhwgPCkDADcDACAFQZgNaiIZIDgpAwA3AwAgBUGQDWoiCCA3KQMANwMAIAVBiA1qIhUgNSkDADcDACAFQYANaiImIDQpAwA3AwAgBUH4DGoiGCBLKQMANwMAIAUgBSkD8Ag3A/AMIAUgUTcD8A4gBUGwEGogBUHwC2oiGkHAAfwKAABB0c7FAC0AABpBgANBCBDWBCIuRQ0JIC4gLykDADcDACAuQRhqIC9BGGopAwA3AwAgLkEQaiAvQRBqKQMANwMAIC5BCGoiBCAvQQhqKQMANwMAIC5BOGogL0E4aikDADcDACAuQTBqIC9BMGopAwA3AwAgLkEoaiAvQShqKQMANwMAIC4gLykDIDcDICAuIC8pA0A3A0AgLkHIAGogL0HIAGopAwA3AwAgLkHQAGogL0HQAGopAwA3AwAgLkHYAGogL0HYAGopAwA3AwAgLiAvKQNgNwNgIC5B6ABqIC9B6ABqKQMANwMAIC5B8ABqIC9B8ABqKQMANwMAIC5B+ABqIC9B+ABqKQMANwMAIC4gLykDgAE3A4ABIC5BiAFqIC9BiAFqKQMANwMAIC5BkAFqIC9BkAFqKQMANwMAIC5BmAFqIC9BmAFqKQMANwMAIC4gLykDoAE3A6ABIC5BqAFqIC9BqAFqKQMANwMAIC5BsAFqIC9BsAFqKQMANwMAIC5BuAFqIC9BuAFqKQMANwMAIC4gLykDwAE3A8ABIC5ByAFqIC9ByAFqKQMANwMAIC5B2AFqIC9B2AFqKQMANwMAIC5B0AFqIC9B0AFqKQMANwMAIC4gLykD4AE3A+ABIC5B6AFqIC9B6AFqKQMANwMAIC5B8AFqIC9B8AFqKQMANwMAIC5B+AFqIC9B+AFqKQMANwMAIC4gLykDgAI3A4ACIC5BiAJqIC9BiAJqKQMANwMAIC5BkAJqIC9BkAJqKQMANwMAIC5BmAJqIC9BmAJqKQMANwMAIC4gLykDoAI3A6ACIC5BqAJqIC9BqAJqKQMANwMAIC5BsAJqIC9BsAJqKQMANwMAIC5BuAJqIC9BuAJqKQMANwMAIC5B2AJqIC9B2AJqKQMANwMAIC5B0AJqIC9B0AJqKQMANwMAIC5ByAJqIC9ByAJqKQMANwMAIC4gLykDwAI3A8ACIC4gLykD4AI3A+ACIC5B6AJqIC9B6AJqKQMANwMAIC5B+AJqIC9B+AJqKQMANwMAIC5B8AJqIC9B8AJqKQMANwMAIC4pAwAhUSAaIARB+AL8CgAAIC5BgAMQ3wQgLSAGKQMANwMAICggSSkDADcDACAFQegTaiBIKQMANwMAIDAgBUGwDGopAwA3AwAgNiAbKQMANwMAIEAgIykDADcDACAFIAUpA4gMNwPQEyAFIAUpA6gMNwPwEiBBIAUpA8gMNwMAIEIgBykDADcDACBDICkpAwA3AwAgRCAlKQMANwMAIDUgJikDADcDACA0IBgpAwA3AwAgSyAFQfAMaikDADcDACAFIAUpA+gMNwPwCCA9IBwpAwA3AwAgPCAZKQMANwMAIDggCCkDADcDACA3IAUpA4gNNwMAIAVByBNqIEYpAwA3AwAgCiBHKQMANwMAIAUgBSkD8As3A7gTIAVBqBRqIEQpAwA3AwAgFiBDKQMANwMAIB8gQikDADcDACAPIEEpAwA3AwAgBUGIFGogQCkDADcDACAyIDYpAwA3AwAgMSAwKQMANwMAIAUgBSkD8BI3A/ATIAVB6BRqID0pAwA3AwAgDSA8KQMANwMAIAwgOCkDADcDACALIDcpAwA3AwAgBUHIFGogNSkDADcDACAgIDQpAwA3AwAgJCBLKQMANwMAIAUgBSkD8Ag3A7AUIAVBqBJqIg0gBUHgDWopAwA3AwAgBUGgEmoiDCAFQdgNaikDADcDACAFQZgSaiILIAVB0A1qKQMANwMAIAVBkBJqIgogBSkDyA03AwAgFCAFQfANaikDADcDACAXIAVB+A1qKQMANwMAIBMgBUGADmopAwA3AwAgBSAFKQPoDTcDsBIgISAFKQOIDjcDACAsIAVBkA5qKQMANwMAIEwgBUGYDmopAwA3AwAgHSAFQaAOaikDADcDACBAIAVBwA5qKQMANwMAIDYgBUG4DmopAwA3AwAgMCAFQbAOaikDADcDACAFIAUpA6gONwPwEiBEIAVB4A5qKQMANwMAIEMgBUHYDmopAwA3AwAgQiAFQdAOaikDADcDACBBIAUpA8gONwMAIAVBiBJqIgcgBUHADWopAwA3AwAgBUGAEmoiCCAFQbgNaikDADcDACAFQfgRaiIEIAVBsA1qKQMANwMAIAUgBSkDqA03A/ARID0gDSkDADcDACA8IAwpAwA3AwAgOCALKQMANwMAIDcgCikDADcDACA1IAcpAwA3AwAgNCAIKQMANwMAIEsgBCkDADcDACAFIAUpA/ARNwPwCCAFQegJaiAdKQMANwMAIAVB4AlqIEwpAwA3AwAgBUHYCWogLCkDADcDACAFQdAJaiAhKQMANwMAIAVByAlqIBMpAwA3AwAgBUHACWogFykDADcDACAFQbgJaiAUKQMANwMAIAUgBSkDsBI3A7AJIAVBqApqIEQpAwA3AwAgBUGgCmogQykDADcDACAFQZgKaiBCKQMANwMAIAVBkApqIEEpAwA3AwAgBUGICmogQCkDADcDACAFQYAKaiA2KQMANwMAIAVB+AlqIDApAwA3AwAgBSAFKQPwEjcD8AkgBSBRNwOwEyARIAVB8AhqIgRBwAH8CgAAIAQgBUHwDmogHhD2ASAaIAQQ6AFB0c7FAC0AABpBgANBCBDWBCIMRQ0JIAwgBSkD8As3AwAgDCAFKQOQDDcDICAMIAUpA7AMNwNAIAxBGGogKikDADcDACAMQRBqIEYpAwA3AwAgDEEIaiBHKQMANwMAIAxBKGogSSkDADcDACAMQTBqIEgpAwA3AwAgDEE4aiArKQMANwMAIAxByABqIBspAwA3AwAgDEHQAGogIykDADcDACAMQdgAaiAiKQMANwMAIAxB+ABqIBApAwA3AwAgDEHwAGogJSkDADcDACAMQegAaiApKQMANwMAIAwgBSkD0Aw3A2AgDCAFKQPwDDcDgAEgDEGIAWogGCkDADcDACAMQZABaiAmKQMANwMAIAxBmAFqIBUpAwA3AwAgDCAFKQOQDTcDoAEgDEGoAWogGSkDADcDACAMQbABaiAcKQMANwMAIAxBuAFqIA4pAwA3AwAgDEHYAWogBUHIDWopAwA3AwAgDEHQAWogBUHADWopAwA3AwAgDEHIAWogBUG4DWopAwA3AwAgDCAFKQOwDTcDwAEgDEH4AWogBUHoDWopAwA3AwAgDEHwAWogBUHgDWopAwA3AwAgDEHoAWogBUHYDWopAwA3AwAgDCAFKQPQDTcD4AEgDEGYAmogBUGIDmopAwA3AwAgDEGQAmogBUGADmopAwA3AwAgDEGIAmogBUH4DWopAwA3AwAgDCAFKQPwDTcDgAIgDEG4AmogBUGoDmopAwA3AwAgDEGwAmogBUGgDmopAwA3AwAgDEGoAmogBUGYDmopAwA3AwAgDCAFKQOQDjcDoAIgDEHYAmogBUHIDmopAwA3AwAgDEHQAmogBUHADmopAwA3AwAgDEHIAmogBUG4DmopAwA3AwAgDCAFKQOwDjcDwAIgDEH4AmogBUHoDmopAwA3AwAgDEHwAmogBUHgDmopAwA3AwAgDEHoAmogBUHYDmopAwA3AwAgDCAFKQPQDjcD4AIgBSgCoBgiBARAIAUoAqQYIARBBXQQ3wQLQQwhDiAFQQw2AqgYIAUgDDYCpBggBUEMNgKgGCAFKALwBCIEBEAgBSgC9AQgBEEFdBDfBAtBkAEMAQsgBSgCpBghDCAFKAKoGCIORQ0FIA5BDGwLIQhB0c7FAC0AABogCEEEENYEIgRFDQUgDCEIIAQhByAOIQsDQCAFQbATaiAIENoCIAdBCGogBUG4E2ooAgA2AgAgByAFKQKwEzcCACAHQQxqIQcgCEEgaiEIIAtBAWsiCw0ACwwGCyAFQQA2ArATIAVBEGogBUEMaiAFQbATakGwl8AAEJcEAAtBgJDAAEEeQaCQwAAQ/gMACyAFQQA2ArATIAVB8A5qIAVBlBhqIAVBsBNqQdCKwAAQlwQACyAFQQA2ArATIAVB8A5qIAVBlBhqIAVBsBNqQeCKwAAQlwQAC0EAIQ5BBCEEDAELQQQgCEGUjcAAEMgEAAsgBUGwE2oQISAFLQDoFyEKIAUoAtwXIggEQCAFKALgFyAIQQJ0EN8ECwJAIAUoApQVIghFDQAgCCAIQQxsQRNqQXhxIgdqQQlqIghFDQAgBSgCkBUgB2sgCBDfBAsgBSgCwBUiCEGAgICAeEYgCEVyRQRAIAUoAsQVIAhBAnQQ3wQLAkAgDkEMRwRAIAQhCCAOIQsMAQsgBCgCDCEOIAQoAgghCCAEKAIEIQsgBCgCACENIAVBsBNqIgcgBEEQakGAAfwKAAAgBEGQARDfBCANQYCAgIB4Rg0AIAUgDjYC/A4gBSAINgL4DiAFIAs2AvQOIAUgDTYC8A4gBUGAD2ogB0GAAfwKAAAgByAKIAVB8A5qIggQbyAFQfALaiIEIAdBkAH8CgAAIAggBUHAFGpBkAH8CgAAQdHOxQAtAAAaAkACQAJAQYADQQgQ1gQiEQRAIAcgBBD3AiARQRhqIAVByBNqIg0pAwA3AwAgEUEQaiAFQcATaiILKQMANwMAIBFBCGogBUG4E2oiCikDADcDACARIAUpA7ATNwMAIAcgBUH8C2oQ9wIgEUE4aiANKQMANwMAIBFBMGogCykDADcDACARQShqIAopAwA3AwAgESAFKQOwEzcDICAHIAVBiAxqEPcCIBFB2ABqIA0pAwA3AwAgEUHQAGogCykDADcDACARQcgAaiAKKQMANwMAIBEgBSkDsBM3A0AgByAFQZQMahD3AiARQfgAaiANKQMANwMAIBFB8ABqIAspAwA3AwAgEUHoAGogCikDADcDACARIAUpA7ATNwNgIAcgBUGgDGoQ9wIgEUGYAWogDSkDADcDACARQZABaiALKQMANwMAIBFBiAFqIAopAwA3AwAgESAFKQOwEzcDgAEgByAFQawMahD3AiARQbgBaiANKQMANwMAIBFBsAFqIAspAwA3AwAgEUGoAWogCikDADcDACARIAUpA7ATNwOgASAHIAVBuAxqEPcCIBFB2AFqIA0pAwA3AwAgEUHQAWogCykDADcDACARQcgBaiAKKQMANwMAIBEgBSkDsBM3A8ABIAcgBUHEDGoQ9wIgEUH4AWogDSkDADcDACARQfABaiALKQMANwMAIBFB6AFqIAopAwA3AwAgESAFKQOwEzcD4AEgByAFQdAMahD3AiARQZgCaiANKQMANwMAIBFBkAJqIAspAwA3AwAgEUGIAmogCikDADcDACARIAUpA7ATNwOAAiAHIAVB3AxqEPcCIBFBuAJqIA0pAwA3AwAgEUGwAmogCykDADcDACARQagCaiAKKQMANwMAIBEgBSkDsBM3A6ACIAcgBUHoDGoQ9wIgEUHYAmogDSkDADcDACARQdACaiALKQMANwMAIBFByAJqIAopAwA3AwAgESAFKQOwEzcDwAIgByAFQfQMahD3AiARQfgCaiANKQMANwMAIBFB8AJqIAspAwA3AwAgEUHoAmogCikDADcDACARIAUpA7ATNwPgAkHRzsUALQAAGkGAA0EIENYEIhBFDQEgByAIEPcCIBBBGGogDSkDADcDACAQQRBqIAspAwA3AwAgEEEIaiAKKQMANwMAIBAgBSkDsBM3AwAgByAFQfwOahD3AiAQQThqIA0pAwA3AwAgEEEwaiALKQMANwMAIBBBKGogCikDADcDACAQIAUpA7ATNwMgIAcgBUGID2oQ9wIgEEHYAGogDSkDADcDACAQQdAAaiALKQMANwMAIBBByABqIAopAwA3AwAgECAFKQOwEzcDQCAHIAVBlA9qEPcCIBBB+ABqIA0pAwA3AwAgEEHwAGogCykDADcDACAQQegAaiAKKQMANwMAIBAgBSkDsBM3A2AgByAFQaAPahD3AiAQQZgBaiANKQMANwMAIBBBkAFqIAspAwA3AwAgEEGIAWogCikDADcDACAQIAUpA7ATNwOAASAHIAVBrA9qEPcCIBBBuAFqIA0pAwA3AwAgEEGwAWogCykDADcDACAQQagBaiAKKQMANwMAIBAgBSkDsBM3A6ABIAcgBUG4D2oQ9wIgEEHYAWogDSkDADcDACAQQdABaiALKQMANwMAIBBByAFqIAopAwA3AwAgECAFKQOwEzcDwAEgByAFQcQPahD3AiAQQfgBaiANKQMANwMAIBBB8AFqIAspAwA3AwAgEEHoAWogCikDADcDACAQIAUpA7ATNwPgASAHIAVB0A9qEPcCIBBBmAJqIA0pAwA3AwAgEEGQAmogCykDADcDACAQQYgCaiAKKQMANwMAIBAgBSkDsBM3A4ACIAcgBUHcD2oQ9wIgEEG4AmogDSkDADcDACAQQbACaiALKQMANwMAIBBBqAJqIAopAwA3AwAgECAFKQOwEzcDoAIgByAFQegPahD3AiAQQdgCaiANKQMANwMAIBBB0AJqIAspAwA3AwAgEEHIAmogCikDADcDACAQIAUpA7ATNwPAAiAHIAVB9A9qEPcCIBBB+AJqIA0pAwA3AwAgEEHwAmogCykDADcDACAQQegCaiAKKQMANwMAIBAgBSkDsBM3A+ACIAgQ/AIg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ACAoQThqIBhBGGopAwA3AwAgGEHwAWokAAwCCwsgGCAHNgLAASAYICc2ArwBIBggDzYCuAFBgIvAAEErIBhBuAFqQfCKwABBpI3AABDKAwALIBJByABqIBJByAFqKQMANwMAIBJBQGsgEkHAAWopAwA3AwAgEkE4aiASQbgBaikDADcDACASQTBqIgsgEkGwAWopAwA3AwAgEkEoaiASQagBaikDADcDACASQSBqIBJBoAFqKQMANwMAIBJBGGogEkGYAWopAwA3AwAgEiASKQOQATcDECASQYgBaiASQYgCaikDADcDACASQYABaiASQYACaikDADcDACASQfgAaiASQfgBaikDADcDACASQfAAaiASQfABaikDADcDACASQegAaiASQegBaikDADcDACASQeAAaiASQeABaikDADcDACASQdgAaiASQdgBaikDADcDACASIBIpA9ABNwNQIBIoAgwiFSASKAIEIgxGBEAgEkEEakGsxsIAEKIDIBIoAgQhDAsgEigCCCINIBVBBXRqIgcgEikDEDcDACAHQQhqIBJBGGopAwA3AwAgB0EQaiASQSBqKQMANwMAIAdBGGogEkEoaikDADcDACASIBVBAWoiBzYCDCAHIAxGBEAgEkEEakG8xsIAEKIDIBIoAgghDSASKAIEIQwLIA0gB0EFdGoiByALKQMANwMAIAdBGGogC0EYaikDADcDACAHQRBqIAtBEGopAwA3AwAgB0EIaiALQQhqKQMANwMAIBIgFUECaiIHNgIMIAcgDEYEQCASQQRqQczGwgAQogMgEigCCCENIBIoAgQhDAsgEkHYAGopAwAhUyASQeAAaikDACFSIBJB6ABqKQMAIVEgDSAHQQV0aiIHIBIpA1A3AwAgB0EYaiBRNwMAIAdBEGogUjcDACAHQQhqIFM3AwAgEiAVQQNqIgc2AgwgByAMRgRAIBJBBGpB3MbCABCiAyASKAIIIQ0LIBJBgAFqKQMAIVMgEkGIAWopAwAhUiASQfgAaikDACFRIA0gB0EFdGoiByASKQNwNwMAIAdBCGogUTcDACAHQRhqIFI3AwAgB0EQaiBTNwMAIAlB4AJqIgcgEikCBDcCACAHQQhqIBVBBGo2AgAgEkGQAmokACAJQbgBaiAJKALkAiILIAkoAugCQQAQJSAJKALgAiIHBEAgCyAHQQV0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KQMwIhEgAikDMCIMUgRAIBEhCwwBCyARIQ0gASkDOCILIRIgDyALIAIpAzgiDFENARoLIAsgDFYNBSABKQMoIQ8gASkDMCERIAIpAzAhDSABKQM4IQsgAikDOCESIAIpAygLIQogDSARfSIQIAsgElatIhh9IQwgCiAPfSIZIBAgGFQgDSARVHKtIg19IREgCiAPVCANIBlWciEEIA4gE30hECASIAt9IQsMBwsgA0HwB2oQVSAHRQRAIANBiAhqIQQgAykD+AchGCADKQPwByEZIAMpA4AIDAYLIAMoAqAKQQFxDQRB7PbBABDoBAALQYD2wQBBM0Hc9sEAEP4DAAsgACAHOgBAIAAgAikDIDcDICAAIAIpAwA3AwAgAEE4aiACQThqKQMANwMAIABBMGogAkEwaikDADcDACAAQShqIAJBKGopAwA3AwAgAEEIaiACQQhqKQMANwMAIABBEGogAkEQaikDADcDACAAQRhqIAJBGGopAwA3AwAMBgsgACAHOgBAIAAgASkDIDcDICAAIAEpAwA3AwAgAEE4aiABQThqKQMANwMAIABBMGogAUEwaikDADcDACAAQShqIAFBKGopAwA3AwAgAEEIaiABQQhqKQMANwMAIABBEGogAUEQaikDADcDACAAQRhqIAFBGGopAwA3AwAMBQsgASkDMCIKIAIpAzAiD1QgCiAPfSIKIAEpAzgiDyACKQM4IhFUrSILVHKtIg0gASkDKCISIAIpAygiEH0iGEJ/hXwiDCAKQn+FIAt8IgogDyARfSIPQq/4//9vVq0iC1StIhl9IREgDCAZVCEEIAogC30hDCAQIBJWIA0gGFZyrSAOIBNCf4V8fCEQQq/4//9vIA99IQsMAgsgA0HACmohBCADKQOwCiEYIAMpA6gKIRkgAykDuAoLIRIgBCkDACEWIANBgA1qQgA3AwAgA0H4DGpCADcDACADQgA3A/AMIANC85aAgDA3A4gNIANBgAdqIAEpAxAiE0IAIAEpAxgiD0IAEMkDIANB4AZqIAEpAwgiEUIAIA9CABDJAyADQYAGaiABKQMAIgpCACAPQgAQyQMgA0HQBmogEUIAIBNCABDJAyADQZAGaiAKQgAgE0IAEMkDIANBoAZqIApCACARQgAQyQMgA0GwB2ogD0IAIA9CABDJAyADQfAGaiATQgAgE0IAEMkD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lrSLAkIAEMkDIAFBsA9qIAVCAEKlibn6l5a0iwJCABDJAyABQfAPaiAGQgBCpYm5+peWtIsCQgAQyQMgAUGwDGogASkDqA4gECAWVK18IhMgASkD4A58IgQgASkDiA8gCCAKVq18IgggASkDwA98IgUgASkDwAx8IgYgEiAaVq0gASkDmA0gCiASVq18fHwiDSABKQOQD3wiCiAJIA9UrSABKQPYDiAMIA9WrXx8fCIPIAEpA7ANfCISIAcgFlatIAEpA8gNIAcgCVStfHx8Igx8IgkgASkD8Ax8IgcgASkDiA0gASkDgA0iAyAQfCADVK18fCIWIAEpA7AOfCIQQv////++sv3wQn4iA0IAQoGAgIC/sv3wwwBCABDJAyABQaAMaiADQgBCkeHlzYeJ+pkoQgAQyQMgAUGQDGogA0IAQt2whYzotpGouH9CABDJAyABQYAMaiADQgBCqcDGia7Ok7IwQgAQyQMCQAJAAkAgASkDiAwgASkD6A8gASkD2A8gASkDyA8gBSAIVK18IgggASkD0A98IgMgCFStfCADIAMgBiANVq0gASkDyAwgBSAGVq18fHwiA1atfCADIAMgCiAPVq0gASkDmA8gCiANVK18fHwiA1atfCIGIAEpA+APfCIFIAZUrXwgBSAFIAEpA6gNIAMgAyABKQOgDXwiA1atfCADIAMgDCASVK0gASkDuA0gDyASVq18fHwiA1atfHwiBVatfCAFIAEpA6gPIAMgAyABKQOgD3wiA1atfCADIAMgBCAJVq0gASkD6A4gBCATVK18fHwiA1atfHwiBCAFVK18Ig8gASkD8A98IgUgASkD2AwgBCAEIAEpA9AMfCIEVq18IAQgASkD6AwgAyADIAEpA+AMfCIDVq18IAMgByAWVq0gASkD+AwgByAJVK18fHwiDSADVK18fCIDIARUrXx8IgYgASkDuA8gAyADIAEpA7APfCIDVq18IAMgAyABKQP4DiABKQO4DiAQIBZUrXwiCSABKQPwDnwiBCAJVK18IAQgBCANfCIEVq18fCIDVq18fCINIAEpA4AMfCIJIA1UrXwgCSABKQOYDCADIAMgASkDkAx8IgNWrXwgAyADIAEpA6gMIAQgBCABKQOgDHwiBFatfCAEIAEpA7gMIAEpA7AMIgcgEHwgB1StfHwiGiAEVK18fCIDVq18fCIEIAlUrXwgBiANVq0gBSAGVq0gASkD+A8gBSAPVK18fHx8IhJCqcDGia7Ok7IwVg0AAkAgEkKpwMaJrs6TsjBRBEAgBELdsIWM6LaRqLh/Vg0CIARC3bCFjOi2kai4f1ENAUKpwMaJrs6TsjAhEgsgBCEWIAMhDQwDCyADQpHh5c2HifqZKFYNAELdsIWM6LaRqLh/IRYgA0KR4eXNh4n6mShSIBpCgYCAgL+y/fDDAFRyDQELIANCkeHlzYeJ+pkofSIFIBpCgYCAgL+y/fDDAFStIgZ9IQ0gBEKjz/rzl8nu18cAfCIJIANCkeHlzYeJ+pkoVCAFIAZUcq0iA30hFiASIARC3bCFjOi2kai4f1QgAyAJVnKtfUKpwMaJrs6TsjB9IRIgGkKBgICAv7L98MMAfSEaDAELQqnAxomuzpOyMCESIAMhDQsgAUGIEGpB3YHCAEHCABC3AiABQYAKaiABKQOgECIDQgBCp9uF8drIudwbQgAQyQMgAUHACmogASkDmBAiBEIAQqfbhfHayLncG0IAEMkDIAFBgAtqIAEpA5AQIgVCAEKn24Xx2si53BtCABDJAyABQcALaiABKQOIECIGQgBCp9uF8drIudwbQgAQyQMgAUHwCWogASkDgAoiD0L/////vrL98EJ+IglCAEKBgICAv7L98MMAQgAQyQMgAUHgCWogCUIAQpHh5c2HifqZKEIAEMkDIAFBkAlqIAlCAELdsIWM6LaRqLh/QgAQyQMgAUHACGogCUIAQqnAxomuzpOyMEIAEMkDIAFBkApqIANCAELjs/GantaO/9MAQgAQyQMgAUHQCmogBEIAQuOz8Zqe1o7/0wBCABDJAyABQZALaiAFQgBC47Pxmp7Wjv/TAEIAEMkDIAFB0AtqIAZCAELjs/GantaO/9MAQgAQyQMgAUHQCWogASkD4AkiEyABKQOICiIMIAEpA8AKfCIIfCIHIAEpA/gJIA8gASkD8AkiCXwgCVStfHwiDyABKQOQCnwiCkL/////vrL98EJ+IglCAEKBgICAv7L98MMAQgAQyQMgAUHACWogCUIAQpHh5c2HifqZKEIAEMkDIAFBsAlqIAlCAELdsIWM6LaRqLh/QgAQyQMgAUGgCWogCUIAQqnAxomuzpOyMEIAEMkDIAFBoApqIANCAEKFge6d1efgpIx/QgAQyQMgAUHgCmogBEIAQoWB7p3V5+CkjH9CABDJAyABQaALaiAFQgBChYHundXn4KSMf0IAEMkDIAFB4AtqIAZCAEKFge6d1efgpIx/QgAQyQMgAUGACWogASkDmAogCiAPVK18IhQgASkD0Ap8IhAgASkDyAogCCAMVK18IgsgASkDgAt8IgwgASkDkAl8IgggByAPVq0gASkD6AkgByATVK18fHwiDnwiByABKQPACXwiDyABKQPYCSABKQPQCSIJIAp8IAlUrXx8IgogASkDoAp8IhNC/////76y/fBCfiIJQgBCgYCAgL+y/fDDAEIAEMkDIAFB8AhqIAlCAEKR4eXNh4n6mShCABDJAyABQeAIaiAJQgBC3bCFjOi2kai4f0IAEMkDIAFB0AhqIAlCAEKpwMaJrs6TsjBCABDJAyABQbAKaiADQgBCpYm5+peWtIsCQgAQyQMgAUHwCmogBEIAQqWJufqXlrSLAkIAEMkDIAFBsAtqIAVCAEKlibn6l5a0iwJCABDJAyABQfALaiAGQgBCpYm5+peWtIsCQgAQyQMgAUGwCGogASkDqAogCiATVq18IhEgASkD4Ap8IgQgASkDiAsgCyAMVq18IgsgASkDwAt8IgUgASkDwAh8IgYgCCAOVq0gASkDmAkgCCAMVK18fHwiCSABKQOQC3wiDCAHIBBUrSABKQPYCiAQIBRUrXx8fCIQIAEpA7AJfCIIIAogD1StIAEpA8gJIAcgD1atfHx8IhR8IgcgASkD8Ah8Ig8gASkDiAkgASkDgAkiAyATfCADVK18fCIKIAEpA7AKfCITQv////++sv3wQn4iA0IAQoGAgIC/sv3wwwBCABDJAyABQaAIaiADQgBCkeHlzYeJ+pkoQgAQyQMgAUGQCGogA0IAQt2whYzotpGouH9CABDJAyABQYAIaiADQgBCqcDGia7Ok7IwQgAQyQMCQAJAAkAgASkDiAggASkD6AsgASkD2AsgASkDyAsgBSALVK18IgsgASkD0At8IgMgC1StfCADIAMgBiAJVq0gASkDyAggBSAGVq18fHwiA1atfCADIAMgDCAQVq0gASkDmAsgCSAMVq18fHwiA1atfCIGIAEpA+ALfCIFIAZUrXwgBSAFIAEpA6gJIAMgAyABKQOgCXwiA1atfCADIAMgCCAUVq0gASkDuAkgCCAQVK18fHwiA1at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Wg0AIAsgDlatIgsgD3wiDyALWg0AIAsgD1atIgsgDXwiDSALVAwBC0EACyEKIANBwARqIBZCAEKBgICAcEIAEMkDAkAgAykDyAQgFkIghiILIBJ8IhQgC1StIBZCIIh8IgsgEXwiESALVK0iCyADKQPABHwiEiALVK18IAwgEnwiDCASVK18IgtQDQAgCyAOfCIOIAtaDQAgCyAOVq0iCyAPfCIPIAtaDQAgCyAPVq0iCyANfCINIAtUIQgLIANBsARqIBRCAEKBgICAcEIAEMkDIAMpA7gEIBRCIIYiCyARfCISIAtUrSAUQiCIfCILIAx8IhEgC1StIgsgAykDsAR8IgwgC1StfCAMIA58Ig4gDFStfCILUEUEQCALIA98Ig8gC1QiBK0iDCANfCILIA0gBBshDSAEIAsgDFRxIQYLIANBoARqIBJCAEKBgICAcEIAEMkDIAMpA6gEIBJCIIYiCyARfCIXIAtUrSASQiCIfCIMIA58IgsgDFStIgwgAykDoAR8Ig4gDFStfCAOIA4gD3wiDlatfCIPIA18IgwgDSAPQgBSIgkbIQ0CQAJAAkAgCCAKciAGciAMIA9UIgStIA8gCRtCAFJyIAQgCXEgDUKBgICAcFZycg0AIA1CgYCAgHBSDQJCACEPIA5CAFINAEL/////DyEMIAtC/////w9WBEAgCyEMDAILIAtC/////w9SIBdCf1JyDQIMAQsgDiEPIAshDAsgDEL/////D30iESAXQn9SrSIOfSELIA8gDEL/////D1QgDiARVnKtIgx9IQ4gDSAMIA9WrX1C/////w98IQ0gF0IBfCEXCyADIBc3A4gMIAMgCzcDgAwgAyAONwP4CyADIA03A/ALIANBkAtqIANBsAtqIANB8AtqEJEBAkACQCADKQOQCyIMIBx8IhEgAykDmAsiCyAbfCIPIAtUIA8gDyADKQOgCyILIB18Ig0gC1QgDSADKQOoCyILIBl8IhcgC1StfCIOIA1Ucq18Ig9Wcq18Ig0gEVQgDCARVnINAEKBgICAcCELAkAgDSIMQoGAgIBwUg0AIA9CAFINAUL/////DyELIA4iDEL/////D1INACAXQn9RDQFCACEMQoGAgIBwIQ0MAgsgCyAMWA0AIA8hDCAOIQsMAQsgDkL/////D30iESAXQn9SrSIMfSELIA8gDkL/////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IgAEQCADKAKUAiAAQQJ0EN8ECyANDQEMBAsgACADKQPgAjcCZCAAQewAaiAGKAIANgIAIAMoAoADIgYEQCADKAKEAyAGQQJ0EN8ECyADQZgDaiADQcgBaikCADcDACADQZADaiADQcABaikCADcDACADQYgDaiADQbgBaikCADcDACADQagDaiADQbgCaikDADcDACADQbADaiADQcACaikDADcDACADQbgDaiADQcgCaikDADcDACADIAMpArABNwOAAyADIAMpA7ACNwOgAyADQcgDaiADQdgCaikCADcDACADIAMpAtACNwPAAyAAIANBgANqQdAA/AoAACAAIAs2AmAgACAlNwJYIAAgATYCVCAAIAU2AlAgAygCoAIiAARAIAMoAqQCIABBAnQQ3wQLIAMoApACIgAEQCADKAKUAiAAQQJ0EN8ECyANRQ0CIAMoAvABIgAEQCADKAL0ASAAQQJ0EN8ECyADKAKAAiIARQ0CIAMoAoQCIABBAnQQ3wQMAgsgAygC8AEiAARAIAMoAvQBIABBAnQQ3wQLIAMoAoACIgBFDQIgAygChAIgAEECdBDfBAwCC0EBQcIAQdTYwgAQyAQACwJAIARFDQAgAygC0AEiAARAIAMoAtQBIABBAnQQ3wQLIAMoAuABIgBFDQAgAygC5AEgAEECdBDfBAsgAygCkAEiAARAIAggAEECdBDfBAsgAygCgAEiAARAIAMoAoQBIABBAnQQ3wQLIAIEQCAOIAJBAnQQ3wQLIAMoAmAiAARAIAMoAmQgAEECdBDfBAsgEQRAIAkgEUECdBDfBAsgAygCQCIARQ0CIAMoAkQgAEECdBDfBAwCCwJAIARFDQAgAygC0AEiAARAIAMoAtQBIABBAnQQ3wQLIAMoAuABIgBFDQAgAygC5AEgAEECdBDfBAsgAygCsAEiAARAIAMoArQBIABBAnQQ3wQLIAMoAsABIgAEQCADKALEASAAQQJ0EN8ECyADKAKQASIABEAgCCAAQQJ0EN8ECyADKAKAASIABEAgAygChAEgAEECdBDfBAsgAgRAIA4gAkECdBDfBAsgAygCYCIARQ0AIAMoAmQgAEECdBDfBAsgEQRAIAkgEUECdBDfBAsgAygCQCIARQ0AIAMoAkQgAEECdBDfBAsgAygCACIABEAgAygCBCAAQQJ0EN8ECyAVBEAgFCAVQQJ0EN8ECyAXBEAgFiAXQQJ0EN8ECyAeBEAgHSAeQQJ0EN8ECyAYBEAgEiAYQQJ0EN8ECyAcBEAgGyAcQQJ0EN8ECyAaBEAgGSAaQQJ0EN8ECyADQeADaiQADwsgByABQfiBwAAQyAQAC7M4AgZ/F34jAEGQBmsiAiQAIAJBsAVqIAEQLyACQeAFaiABQTBqIgcQL0Kazf/Lo73EgBohCyACKQO4BSIIIAIpA+gFfCIKIAhUIAogAikDwAUiCCACKQPwBXwiDiAIVCAOIAIpA8gFIgggAikD+AV8Ig0gCFQgDSANIAIpA9AFIgkgAikDgAZ8IgggCVQgCCAIIAIpA9gFIg8gAikDiAZ8IgkgD1StfCIIVnKtfCINVnKtfCIMIA5Ucq18IhAgClRyrSACKQPgBSACKQOwBXx8Ig4hCgJAAkACQCAOQprN/8ujvcSAGlINAELX2a6a5PbpjcsAIQsgECIKQtfZrprk9umNywBSDQBCv6WUnM/w0rvkACELIAwiCkK/pZScz/DSu+QAUg0AQqTsw7WP1LSY5wAhCyANIgpCpOzDtY/UtJjnAFINAEL//8+K6///1R4hCyAIIgpC///Piuv//9UeUg0AQqvV/v///7//uX8hCyAJIgpCq9X+////v/+5f1ENAQsgCiALWg0AIBAhCiAMIQsgDSEPIAghEgwBCyAIQv//z4rr///VHn0iCiAJQqvV/v///7//uX9UrSILfSESIA1CpOzDtY/UtJjnAH0iEyAIQv//z4rr///VHlQgCiALVHKtIgh9IQ8gDEK/pZScz/DSu+QAfSIKIA1CpOzDtY/UtJjnAFQgCCATVnKtIgh9IQsgEELX2a6a5PbpjcsAfSINIAxCv6WUnM/w0rvkAFQgCCAKVnKtIgh9IQogDiAQQtfZrprk9umNywBUIAggDVZyrX1Cms3/y6O9xIAafSEOIAlC1aqBgICAwIDGAHwhCQsgAiAJNwP4AyACIBI3A/ADIAIgDzcD6AMgAiALNwPgAyACIAo3A9gDIAIgDjcD0AMCQAJAIAJB0ANqQYCgxQBBMBDxAwRAIAJBwARqQgA3AwAgAkG4BGpCADcDACACQbAEakIANwMAIAJBqARqQgA3AwAgAkIANwOgBCACQgE3A8gEQSghAyACQfgEaiACQfgDaikDADcDACACQfAEaiACQfADaikDADcDACACQegEaiACQegDaikDADcDACACQeAEaiACQeADaikDADcDACACQdgEaiACQdgDaikDADcDACACIAIpA9ADNwPQBCACQagFakHYoMUAKQMANwMAIAJBoAVqQdCgxQApAwA3AwAgAkGYBWpByKDFACkDADcDACACQZAFakHAoMUAKQMANwMAIAJBiAVqQbigxQApAwA3AwAgAkGwoMUAKQMANwOABSACQdgFakGIocUAKQMANwMAIAJB0AVqQYChxQApAwA3AwAgAkHIBWpB+KDFACkDADcDACACQcAFaiIFQfCgxQApAwA3AwAgAkG4BWpB6KDFACkDADcDACACQeCgxQApAwA3A7AFIAJBiAZqQgA3AwAgAkGABmpCADcDACACQfgFakIANwMAIAJB8AVqIgZCADcDACACQegFakIANwMAIAJCADcD4AUgAkHQBGogAkGgBGpBMBDxA0UEQEKqx6uW2fyjzBEhFUKtquao29DPvJp/IRAMAgsgAkGABWogAkGgBGpBMBDxA0UEQCAGIQVCACEQDAILQqvV/v///7//uX8hDgNAIAItAPgEQQFxRQRAA0AgAkHQBGoQvwIgAikD2AUiCEIBg1BFBEAgAikD0AUhCSACIAhC1aqBgICAwIDGAH0iDTcD2AUgAiAJQv//z4rr///VHnwiCiAIIA1WrXwiDTcD0AUgAiACKQPIBSILQqTsw7WP1LSY5wB8IgggCSAKViAKIA1Wcq18Igo3A8gFIAIgAikDwAUiDUK/pZScz/DSu+QAfCIJIAggC1QgCCAKVnKtfCIKNwPABSACIAIpA7gFIgtC19mumuT26Y3LAHwiCCAJIA1UIAkgClZyrXwiCTcDuAUgAiACKQOwBSAIIAtUIAggCVZyrXxCms3/y6O9xIAafDcDsAULIAJBsAVqEL8CIAItAPgEQQFxRQ0ACyACKQOoBSEOCyAOp0EBcUUEQANAIAJBgAVqEL8CIAIpA4gGIghCAYNQRQRAIAIpA4AGIQkgAiAIQtWqgYCAgMCAxgB9Ig03A4gGIAIgCUL//8+K6///1R58IgogCCANVq18Ig03A4AGIAIgAikD+AUiC0Kk7MO1j9S0mOcAfCIIIAkgClYgCiANVnKtfCIKNwP4BSACIAIpA/AFIg1Cv6WUnM/w0rvkAHwiCSAIIAtUIAggClZy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ms3/y6O9xIAafSETIAlC1aqBgICAwIDGAHwhCQsgACAJNwNgIAAgETcDWCAAIBA3A1AgACANNwNIIAAgDjcDQCAAIBM3AzggACASNwMwIAAgFDcDKCAAIBg3AyAgACAXNwMYIAAgFjcDECAAIA83AwggAEIANwMACyACQZAGaiQAC9cuAgJ/G34jAEGwCmsiASQAIAFBiApqQbj8wQBBwAAQtwIgAUGACGogASkDoAoiBkIAQgNCABDJAyABQcAIaiABKQOYCiIPQgBCA0IAEMkDIAFBgAlqIAEpA5AKIgpCAEIDQgAQyQMgAUHACWogASkDiAoiBUIAQgNCABDJAyABQdAHaiABKQOACCIEQgBCgYCAgHBCABDJAyABQZAIaiAGQgBC/////79/QgAQyQMgAUHQCGogD0IAQv////+/f0IAEMkDIAFBkAlqIApCAEL/////v39CABDJAyABQdAJaiAFQgBC/////79/QgAQyQMgAUHgB2ogBEIghiIOIAEpA4gIIgkgASkDwAh8Igd8IhIgASkDkAh8IgNCAEKBgICAcEIAEMkDIAFBoAhqIAZCAEJ+QgAQyQMgAUHgCGogD0IAQn5CABDJAyABQaAJaiAKQgBCfkIAEMkDIAFB4AlqIAVCAEJ+QgAQyQMgAUHwB2ogA0IghiITIA4gElatIARCIIh8IhEgASkDyAggByAJVK18IgcgASkDgAl8Igt8Ig4gASkD0Ah8IgkgASkDmAggAyASVK18fCIIfCISIAEpA6AIfCIEQgBCgYCAgHBCABDJAyABQbAIaiAGQgBC/f///88AQgAQyQMgAUHwCGogD0IAQv3////PAEIAEMkDIAFBsAlqIApCAEL9////zwBCABDJAyABQfAJaiAFQgBC/f///88AQgAQyQMgAUHAB2ogBEIghiIZIBIgE1StIANCIIh8IhMgASkDiAkgByALVq18IgsgASkDwAl8Ig8gASkD0Ad8IgogDiARVK18IgUgASkDkAl8IgMgCCAJVK0gASkD2AggCSAOVK18fHwiEXwiDiABKQPgCHwiCSABKQOoCCAEIBJUrXx8Igh8IhIgASkDsAh8IgZCAEKBgICAcEIAEMkDAkACQAJAAkAgASkD+AkgASkD6AkgASkD6AcgDiATVK0iEyABKQPgB3wiByATVK18IAcgASkDyAkgCyAPVq18IgsgASkD0Al8IhMgBSAKVK0gASkD2AcgCiAPVK18fHwiDyADIBFWrSABKQOYCSADIAVUrXx8fCIKfCIDIAdUrXwiByAKIA9UrSAPIBNUrSABKQPYCSALIBNWrXx8fHwiDyABKQPgCXwiCiAPVK18IAogASkDqAkgCCAJVK0gASkD6AggCSAOVK18fCIOIAEpA6AJfCIFIA5UrXwgBSADIAV8IgVWrXx8IgMgClStfCIOIAcgD1atfCIPIAEpA/gHIAUgEiAZVK0gBEIgiHx8IgQgBVStIgUgASkD8Ad8IgogBVStfCADIAp8IgkgClStfHwiCiABKQPwCXwiBSAKVK18IAUgBSABKQO4CSABKQP4CCABKQO4CCAGIBJUrXwiEiABKQPwCHwiAyASVK18IAMgBHwiBCADVK18IhIgASkDsAl8IgMgElStfCADIAMgCXwiA1atfHwiBVatfCISIA4gD1atIAogD1StfHwiDyASVK0gDyABKQPIByADIAZCIIYiCiAEfCIZIApUrSAGQiCIfHwiBiADVK0iAyABKQPAB3wiCiADVK18IAogBSAKfCIKVq18fCITIA9UrXxCAFIgE0KBgICAcFZyDQAgE0KBgICAcFINASAGQv////8PVg0AQgAhEiAKQgBSDQAgGUJ/UiAGQv////8PUnINAgsgBkL/////D30iBSAZQn9SrSIDfSEPIAogBkL/////D1QgAyAFVnKtIgZ9IRIgEyAGIApWrX1C/////w98IRMgGUIBfCEZDAILIAohEiAGIQ8MAQtCgYCAgHAhEyAGIQ8LIAFBiApqQfj8wQBBwAAQtwIgAUHABWogASkDoAoiBkIAQgNCABDJAyABQYAGaiABKQOYCiIKQgBCA0IAEMkDIAFBwAZqIAEpA5AKIgVCAEIDQgAQyQMgAUGAB2ogASkDiAoiA0IAQgNCABDJAyABQZAFaiABKQPABSIOQgBCgYCAgHBCABDJAyABQdAFaiAGQgBC/////79/QgAQyQMgAUGQBmogCkIAQv////+/f0IAEMkDIAFB0AZqIAVCAEL/////v39CABDJAyABQZAHaiADQgBC/////79/QgAQyQMgAUGgBWogDkIghiIHIAEpA8gFIhEgASkDgAZ8Igt8IgkgASkD0AV8IgRCAEKBgICAcEIAEMkDIAFB4AVqIAZCAEJ+QgAQyQMgAUGgBmogCkIAQn5CABDJAyABQeAGaiAFQgBCfkIAEMkDIAFBoAdqIANCAEJ+QgAQyQMgAUGwBWogBEIghiIIIAcgCVatIA5CIIh8IhggASkDiAYgCyARVK18IgsgASkDwAZ8IhB8IgcgASkDkAZ8IhEgASkD2AUgBCAJVK18fCIMfCIJIAEpA+AFfCIOQgBCgYCAgHBCABDJAyABQfAFaiAGQgBC/f///88AQgAQyQMgAUGwBmogCkIAQv3////PAEIAEMkDIAFB8AZqIAVCAEL9////zwBCABDJAyABQbAHaiADQgBC/f///88AQgAQyQMgAUGABWogDkIghiINIAggCVatIARCIIh8IgggASkDyAYgCyAQVq18IhAgASkDgAd8IgogASkDkAV8IgUgByAYVK18IgMgASkD0AZ8IgQgDCARVK0gASkDmAYgByARVq18fHwiGHwiByABKQOgBnwiESABKQPoBSAJIA5WrXx8Igx8IgkgASkD8AV8IgZCAEKBgICAcEIAEMkDAkACQAJAAkAgASkDuAcgASkDqAcgASkDqAUgByAIVK0iCCABKQOgBXwiCyAIVK18IAsgASkDiAcgCiAQVK18IhAgASkDkAd8IgggAyAFVK0gASkDmAUgBSAKVK18fHwiCiAEIBhWrSABKQPYBiADIARWrXx8fCIFfCIEIAtUrXwiCyAFIApUrSAIIApWrSABKQOYByAIIBBUrXx8fHwiCiABKQOgB3wiBSAKVK18IAUgASkD6AYgDCARVK0gASkDqAYgByARVq18fCIHIAEpA+AGfCIDIAdUrXwgAyADIAR8IgNWrXx8IgQgBVStfCIHIAogC1StfCIKIAEpA7gFIAMgCSANVK0gDkIgiHx8Ig4gA1StIgMgASkDsAV8IgUgA1StfCAEIAV8IhEgBVStfHwiBSABKQOwB3wiAyAFVK18IAMgAyABKQP4BiABKQO4BiABKQP4BSAGIAlUrXwiCSABKQOwBnwiBCAJVK18IAQgDnwiDiAEVK18IgkgASkD8AZ8IgQgCVStfCAEIAQgEXwiBFatfHwiA1atfCIJIAcgClatIAUgClStfHwiCiAJVK0gCiABKQOIBSAEIAZCIIYiBSAOfCIYIAVUrSAGQiCIfHwiBiAEVK0iBCABKQOABXwiBSAEVK18IAUgAyAFfCIFVq18fCIRIApUrXxCAFIgEUKBgICAcFZyDQAgEUKBgICAcFINASAGQv////8PVg0AQgAhDiAFQgBSDQAgGEJ/UiAGQv////8PUnINAgsgBkL/////D30iAyAYQn9SrSIEfSEKIAUgBkL/////D1QgAyAEVHKtIgZ9IQ4gESAFIAZUrX1C/////w98IREgGEIBfCEYDAILIAUhDiAGIQoMAQtCgYCAgHAhESAGIQoLIAFBiApqQbj9wQBBwAAQtwIgAUGAA2ogASkDoAoiBkIAQgNCABDJAyABQcADaiABKQOYCiIFQgBCA0IAEMkDIAFBgARqIAEpA5AKIgNCAEIDQgAQyQMgAUHABGogASkDiAoiBEIAQgNCABDJAyABQdACaiABKQOAAyIHQgBCgYCAgHBCABDJAyABQZADaiAGQgBC/////79/QgAQyQMgAUHQA2ogBUIAQv////+/f0IAEMkDIAFBkARqIANCAEL/////v39CABDJAyABQdAEaiAEQgBC/////79/QgAQyQMgAUHgAmogB0IghiIIIAEpA4gDIhAgASkDwAN8Igx8IgsgASkDkAN8IglCAEKBgICAcEIAEMkDIAFBoANqIAZCAEJ+QgAQyQMgAUHgA2ogBUIAQn5CABDJAyABQaAEaiADQgBCfkIAEMkDIAFB4ARqIARCAEJ+QgAQyQMgAUHwAmogCUIghiINIAggC1atIAdCIIh8IhQgASkDyAMgDCAQVK18IgwgASkDgAR8IhV8IgggASkD0AN8IhAgASkDmAMgCSALVK18fCIWfCILIAEpA6ADfCIHQgBCgYCAgHBCABDJAyABQbADaiAGQgBC/f///88AQgAQyQMgAUHwA2ogBUIAQv3////PAEIAEMkDIAFBsARqIANCAEL9////zwBCABDJAyABQfAEaiAEQgBC/f///88AQgAQyQMgAUHAAmogB0IghiIXIAsgDVStIAlCIIh8Ig0gASkDiAQgDCAVVq18IhUgASkDwAR8IgUgASkD0AJ8IgMgCCAUVK18IgQgASkDkAR8IgkgECAWVq0gASkD2AMgCCAQVq18fHwiFHwiCCABKQPgA3wiECABKQOoAyAHIAtUrXx8IhZ8IgsgASkDsAN8IgZCAEKBgICAcEIAEMkDAkACQAJAAkAgASkD+AQgASkD6AQgASkD6AIgCCANVK0iDSABKQPgAnwiDCANVK18IAwgASkDyAQgBSAVVK18IhUgASkD0AR8Ig0gAyAEVq0gASkD2AIgAyAFVK18fHwiBSAJIBRWrSABKQOYBCAEIAlWrXx8fCIDfCIJIAxUrXwiDCADIAVUrSAFIA1UrSABKQPYBCANIBVUrXx8fHwiBSABKQPgBHwiAyAFVK18IAMgASkDqAQgECAWVq0gASkD6AMgCCAQVq18fCIIIAEpA6AEfCIEIAhUrXwgBCAEIAl8IgRWrXx8IgkgA1StfCIIIAUgDFStfCIFIAEpA/gCIAQgCyAXVK0gB0IgiHx8IgcgBFStIgQgASkD8AJ8IgMgBFStfCADIAl8IhAgA1StfHwiAyABKQPwBHwiBCADVK18IAQgBCABKQO4BCABKQP4AyABKQO4AyAGIAtUrXwiCyABKQPwA3wiCSALVK18IAcgCXwiByAJVK18IgsgASkDsAR8IgkgC1StfCAJIAkgEHwiCVatfHwiBFatfCILIAUgCFStIAMgBVStfHwiBSALVK0gBSABKQPIAiAJIAZCIIYiAyAHfCIQIANUrSAGQiCIfHwiBiAJVK0iCSABKQPAAnwiAyAJVK18IAMgAyAEfCIDVq18fCILIAVUrXxCAFIgC0KBgICAcFZyDQAgC0KBgICAcFINASAGQv////8PVg0AQgAhCSADQgBSDQAgEEJ/UiAGQv////8PUnINAgsgBkL/////D30iBCAQQn9SrSIJfSEFIAMgBkL/////D1QgBCAJVHKtIgZ9IQkgCyADIAZUrX1C/////w98IQsgEEIBfCEQDAILIAMhCSAGIQUMAQtCgYCAgHAhCyAGIQULIAFBiApqQfj9wQBBwAAQtwIgAUFAayABKQOgCiIGQgBCA0IAEMkDIAFBgAFqIAEpA5gKIgNCAEIDQgAQyQMgAUHAAWogASkDkAoiBEIAQgNCABDJAyABQYACaiABKQOICiIHQgBCA0IAEMkDIAFBEGogASkDQCIMQgBCgYCAgHBCABDJAyABQdAAaiAGQgBC/////79/QgAQyQMgAUGQAWogA0IAQv////+/f0IAEMkDIAFB0AFqIARCAEL/////v39CABDJAyABQZACaiAHQgBC/////79/QgAQyQMgAUEgaiAMQiCGIhQgASkDSCIVIAEpA4ABfCIWfCINIAEpA1B8IghCAEKBgICAcEIAEMkDIAFB4ABqIAZCAEJ+QgAQyQMgAUGgAWogA0IAQn5CABDJAyABQeABaiAEQgBCfkIAEMkDIAFBoAJqIAdCAEJ+QgAQyQMgAUEwaiAIQiCGIhcgDSAUVK0gDEIgiHwiGyABKQOIASAVIBZWrXwiFiABKQPAAXwiGnwiFCABKQOQAXwiFSABKQNYIAggDVStfHwiHHwiDSABKQNgfCIMQgBCgYCAgHBCABDJAyABQfAAaiAGQgBC/f///88AQgAQyQMgAUGwAWogA0IAQv3////PAEIAEMkDIAFB8AFqIARCAEL9////zwBCABDJAyABQbACaiAHQgBC/f///88AQgAQyQMgASAMQiCGIh0gDSAXVK0gCEIgiHwiFyABKQPIASAWIBpWrXwiGiABKQOAAnwiAyABKQMQfCIEIBQgG1StfCIHIAEpA9ABfCIIIBUgHFatIAEpA5gBIBQgFVatfHx8Iht8IhQgASkDoAF8IhUgASkDaCAMIA1UrXx8Ihx8Ig0gASkDcHwiBkIAQoGAgIBwQgAQyQMCQAJAAkACQCABKQO4AiABKQOoAiABKQMoIBQgF1StIhcgASkDIHwiFiAXVK18IBYgASkDiAIgAyAaVK18IhogASkDkAJ8IhcgBCAHVq0gASkDGCADIARWrXx8fCIDIAggG1atIAEpA9gBIAcgCFatfHx8IgR8IgggFlStfCIWIAMgBFatIAMgF1StIAEpA5gCIBcgGlStfHx8fCIDIAEpA6ACfCIEIANUrXwgBCABKQPoASAVIBxWrSABKQOoASAUIBVWrXx8IhQgASkD4AF8IgcgFFStfCAHIAcgCHwiB1atfHwiCCAEVK18IhQgAyAWVK18IgMgASkDOCAHIA0gHVStIAxCIIh8fCIMIAdUrSIHIAEpAzB8IgQgB1StfCAEIAh8IhUgBFStfHwiBCABKQOwAnwiByAEVK18IAcgByABKQP4ASABKQO4ASABKQN4IAYgDVStfCINIAEpA7ABfCIIIA1UrXwgCCAMfCIMIAhUrXwiDSABKQPwAXwiCCANVK18IAggCCAVfCIIVq18fCIHVq18Ig0gAyAUVK0gAyAEVq18fCIDIA1UrSADIAEpAwggCCAGQiCGIgQgDHwiDCAEVK0gBkIgiHx8IgYgCFStIgggASkDAHwiBCAIVK18IAQgBCAHfCIEVq18fCIIIANUrXxCAFIgCEKBgICAcFZyDQAgCEKBgICAcFINASAGQv////8PVg0AQgAhByAEQgBSDQAgDEJ/UiAGQv////8PUnINAgsgBkL/////D30iByAMQn9SrSINfSEDIAQgBkL/////D1QgByANVHKtIgZ9IQcgCCAEIAZUrX1C/////w98IQggDEIBfCEMDAILIAYhAyAEIQcMAQsgBiEDQoGAgIBwIQgLIAFBiApqQbj+wQBBwABBEBDxAQJAIAEoAogKQYCAgIB4RwRAIAAgASkCiAo3AqwEIABBtARqIAFBkApqKAIANgIAEMcEIgJFDQEgAEEDOgC4BCAAIBg3AzggACAKNwMwIAAgDjcDKCAAIBE3AyAgACAZNwMYIAAgDzcDECAAIBI3AwggACATNwMAIABBgLHCACkDADcD4AEgAEHoAWpBiLHCACkDADcDACAAIAIpAwg3A/gBIAAgAikDACIGNwPwASACIAZCAXw3AwAgAEH4AGpCADcDACAAQfAAakIANwMAIABB6ABqQgA3AwAgAEHgAGpCADcDACAAQdgAakIANwMAIABB0ABqQgA3AwAgAEHIAGpCADcDACAAQgA3A0AgACALNwOAASAAIAk3A4gBIAAgBTcDkAEgACAQNwOYASAAIAg3A6ABIAAgBzcDqAEgACADNwOwASAAIAw3A7gBIABCADcDmAMgAEIANwPgAyAAQQE2AqgEIABCADcDiAIgAEIANwOAAiAAQvn////fADcDwAEgAEJ/NwPIASAAQoCAgICgfzcD0AEgAEIGNwPYASAAQgE3A6gCIABCADcDsAIgAEIANwOgAiAAQYCAgIB4NgKQAiABQbAKaiQADwsgASABLQCMCjoArwpBjPfBAEErIAFBrwpqQeT7wQBB+P7BABDKAwALEPADAAuMNAIefgJ/IwBBoAVrIiEkACABKQMAIRogASkDCCEIIAEpAxAhCyABKQMYIQwgASkDICEOIAEpAyghD0EoISIDQCAhQZAEaiACICJqKQMAIgVCACAPQgAQyQMgIUGgBGogBUIAIA5CABDJAyAhQbAEaiAFQgAgDEIAEMkDICFBwARqIAVCACALQgAQyQMgIUHQBGogBUIAIAhCABDJAyAhQeAEaiAFQgAgGkIAEMkDICFBgARqICEpA5AEIg0gFHwi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Qu7/////////d0Lv/////////3cgAiADVhsgCnwhCgtCkYCAgICAgIAIIQQgFCAUIBR8IgVWIAUgDSANfCIDIA1UIAMgAyAIIAh8IgIgCFStfCIIVnKtfCIGIAVUcq0gB0IBhoQiByEDAkACQCAHQpGAgICAgICACFEEQCACQgFRDQEgAiEDQgEhBCAGIAiEQgBSDQELIAMgBFoNACAGIQMgCCEEIAIhBQwBCyACQgF9IQUgCCACUK0iAn0hBCAGIAIgCFatIgJ9IQNC7v////////93Qu//////////dyACIAZWGyAHfCEHC0KRgICAgICAgAghBiADIAt8Ig0gC1QgDSANIAQgDHwiAyAMVCADIAUgCXwiAiAJVK18IgggA1RyrXwiA1ZyrSAHIAp8fCIHIQQCQAJAIAdCkYCAgICAgIAIUQRAIAMgCIRCAFINAUIBIQYgAiIEQgFRDQELIAQgBloNACADIQYgCCEEIAIhBQwBCyACQgF9IQUgCCACUK0iAn0hBCADIAIgCFatIgJ9IQZC7v////////93Qu//////////dyACIANWGyAHfCEHCyAAIAU3AxggACAENwMQIAAgBjcDCCAAIAc3AwBCkYCAgICAgIAIIQYgEiASfCIEIBJUIAQgEyATfCIDIBNUIAMgDyAPfCICIA9UrXwiCCADVHKtfCIDIARUcq0gDkIBhoQiByEEAkACQCAHQpGAgICAgICACFEEQCACQgFRDQEgAiEEQgEhBiADIAiEQgBSDQELIAQgBloNACADIQQgCCEGIAIhBQwBCyACQgF9IQUgCCACUK0iAn0hBiADIAIgCFatIgJ9IQRC7v////////93Qu//////////dyACIANWGyAHfCEHCyAAAn4CQAJAIAoiAiAHIgNSDQAgCyICIAQiA1INACAGIgMgDCICUg0AIAkiAiAFIgNRDQELIAIgA1oNACAGIAxUIAUgCVStIgMgBiAMfSICVnKtIg8gBCALfSINfSIOIAIgA1IgAyACfSIIIAUgCX0iBUIBVq0iA1RyrSICfSEGIA0gD1IgAiAOVnIhASAIIAN9IQMgBCALVCANIA9Ucq0gCiAHfXxCkYCAgICAgIAIfCEHQgEgBX0MAQsgDCAGfSIOIAUgCVatIgJ9IQMgCyAEfSIIIAIgDlYgBiAMVnKtIgJ9IQYgAiAIViAEIAtWciEBIAogB30hByAJIAV9CzcDOCAAIAM3AzAgACAGNwMoIAAgByABrX03AyBCkYCAgICAgIAIIQUgFSAVfCIDIBVUIAMgFiAWfCICIBZUIAIgAiARIBF8IgQgEVStfCIIVnKtfCIGIANUcq0gEEIBhoQiByECAkACQCAHQpGAgICAgICACFEEQCAEQgFRDQEgBCECQgEhBSAGIAiEQgBSDQELIAIgBVoNACAGIQUgCCECIAQhAwwBCyAEQgF9IQMgCCAEUK0iBH0hAiAGIAQgCFatIgR9IQVC7v////////93Qu//////////dyAEIAZWGyAHfCEHC0KRgICAgICAgAghBiAFIAUgFXwiBVYgBSACIBZ8IgQgAlQgBCADIBF8IgIgA1StfCIIIARUcq18IgMgBVRyrSAHIBB8fCIHIQQCQAJAIAdCkYCAgICAgIAIUQRAQgEhBiACQgFRIANCAFJyDQEgAiEEIAhCAFINAQsgBCAGWg0AIAMhBCAIIQYgAiEFDAELIAJCAX0hBSAIIAJQrSICfSEGIAMgAiAIVq0iAn0hBELu/////////3dC7/////////93IAIgA1YbIAd8IQcLAkACQCAKIgIgByIDUg0AIAsiAiAEIgNSDQAgBiIDIAwiAlINACAJIgIgBSIDUQ0BCyACIANaDQAgBiAMVCAFIAlUrSIDIAYgDH0iAlZyrSINIAQgC30iDn0iCCACIANSIAMgAn0iBiAFIAl9IgVCAVatIgNUcq0iAn0hDCANIA5SIAIgCFZyIQEgBiADfSEDIAQgC1QgDSAOVnKtIAogB318QpGAgICAgICACHwhCkIBIAV9DAELIAwgBn0iDiAFIAlWrSICfSEDIAsgBH0iCCACIA5WIAYgDFZyrSICfSEMIAIgCFYgBCALVnIhASAKIAd9IQogCSAFfQs3A1ggACADNwNQIAAgDDcDSCAAIAogAa19NwNAIBdBoARqJAAL0ycCCX8PfiMAQaAMayIDJAAgA0HgBWogAUEYaikDADcDACADQdgFaiABQRBqKQMANwMAIANB0AVqIAFBCGopAwA3AwAgA0HwBWogAkEIaikDADcDACADQfgFaiACQRBqKQMANwMAIANBgAZqIAJBGGopAwA3AwAgA0EAOgCIBiADIAEpAwA3A8gFIAMgAikDADcD6AUgA0HoBWohBwJAAkACQAJAIANByAVqQejRwQBBIBDxA0UEQCAHQejRwQBBIBDxA0UNAQsgA0GwBmoiAhBJIANB0AZqIQQgA0GQDGogAkEYaikDADcDACADQYgMaiACQRBqKQMANwMAIANBgAxqIAJBCGopAwA3AwAgAyACKQMANwP4CyADQdAEaiADKQP4BSINQgAgAykDgAYiDEIAEMkDIANBwARqIAMpA/AFIg5CACAMQgAQyQMgA0GwBGogAykD6AUiD0IAIAxCABDJAyADQYAFaiAOQgAgDUIAEMkDIANB8ARqIA9CACANQgAQyQMgA0GgBWogD0IAIA5CABDJAyADQaAEaiAMQgAgDEIAEMkDIANB4ARqIA1CACANQgAQyQMgA0GQBWogDkIAIA5CABDJAyADQbAFaiAPQgAgD0IAEMkDIANBkARqIAMpA6AEIhNCm5Svw/K1qN6Gf34iDUIAQm1CABDJAyADQYAEaiANQgBCf0IAEMkDIANB8ANqIA1CAEL///////////8AQgAQyQMgAykDqAUgAykD+AQgAykDuAQgAykDyAQgAykD2AQiDCADKQPABHwiDSAMVK18Ig4gAykDsAR8IgwgDlStfCIPIAMpA/AEfCIOIA9UrXwgDiAOIAMpA4gFIAwgDCADKQOABXwiD1atfHwiDFatfCIRIAMpA6AFfCIOIBFUrXwiEUI/iCADKQO4BSADKQOwBSIQIBFCAYYgDkI/iIR8IhEgEFStfCARIAMpA5gFIAMpA+gEIAMpA+AEIhIgDUIBhiADKQPQBCIVQj+IhHwiECASVK18IBAgAykDqAQiEiAVQgGGfCIVIBJUrXwiFyAQVK18IhAgD0IBhiANQj+IhHwiGCAQVK0iDSADKQOQBXwiECANVK18IBAgECAMQgGGIA9CP4iEfCINVq18Ig8gDkIBhiAMQj+IhHwiEiAPVK18IhAgEVStfHwhEQJ/AkAgAykD+AMgAykDiAQiDiAOIAMpA5gEIAMpA5AEIgwgE0J9g3wgDFStfCIPIAMpA4AEIhN8IgwgD1StfCAMIAwgFXwiDlatfCIPIBN8IgwgD1StfCAMIBd8Ig8gDFStfCITIAMpA/ADfCIMIBNUrXwgDCAYfCITIAxUrXwiDFANACAMIA18Ig0gDFQiAkUNACACrSIMIBJ8IhIgDFoNACAMIBJWrSIMIBB8IhAgDFoNACAMIBBWrSIMIBF8IhEgDFQMAQtBAAshBiAEKQMAIRUgBCkDCCEXIAQpAxAhGCAEKQMYIRkgA0HgA2ogDkKblK/D8rWo3oZ/fiIMQgBCbUIAEMkDIANB0ANqIAxCAEJ/QgAQyQMgA0HAA2ogDEIAQv///////////wBCABDJAwJAIAMpA8gDIAMpA9gDIhQgFCADKQPoAyAOIAMpA+ADIgx8IAxUrXwiDiADKQPQAyIWfCIMIA5UrXwgDCAMIA98Ig5WrXwiDyAWfCIMIA9UrXwgDCATfCIPIAxUrXwiEyADKQPAA3wiDCATVK18IAwgDCANfCITVq18Ig1QDQAgDSASfCISIA1aDQAgDSASVq0iDSAQfCIQIA1aDQAgDSAQVq0iDSARfCIRIA1UIQULIANBsANqIA5Cm5Svw/K1qN6Gf34iDUIAQm1CABDJAyADQaADaiANQgBCf0IAEMkDIANBkANqIA1CAEL///////////8AQgAQyQNBACECIAMpA5gDIAMpA6gDIgwgDCADKQO4AyADKQOwAyINIA58IA1UrXwiDiADKQOgAyIUfCINIA5UrXwgDSANIA98IgxWrXwiDiAUfCINIA5UrXwgDSATfCIOIA1UrXwiDyADKQOQA3wiDSAPVK18IA0gEnwiDyANVK18Ig1QRQRAIA0gEHwiECANVCICrSINIBF8IhIgESACGyERIAIgDSASVnEhAgsgA0GAA2ogDEKblK/D8rWo3oZ/fiINQgBCbUIAEMkDIANB8AJqIA1CAEJ/QgAQyQMgA0HgAmogDUIAQv///////////wBCABDJAyADKQPoAiADKQP4AiISIBIgAykDiAMgDCADKQOAAyINfCANVK18IgwgAykD8AIiE3wiDSAMVK18IA0gDnwiEiANVK18IgwgE3wiDSAMVK18IA0gD3wiDiANVK18Ig0gAykD4AJ8IgwgDVStfCAMIAwgEHwiDVatfCIMIBF8Ig8gESAMQgBSIgQbIRECQAJAIAUgBnIgAnIgDCAPViICrSAMIAQbQgBSciACIARxIBFCAFNyckUEQEL///////////8AIQ8gEUL///////////8AUiANQn9SciAOQn9Scg0CQn8hEEJ/IQwgEkJtVA0CDAELIBEhDyANIRAgDiEMCyAMQgF8Ig0gEkJtVK0iEX0hDiAQQgF8IhMgDEJ/UiANIBFUcq0iDH0hDSAPIBBCf1IgDCATVnKtfUL///////////8AfSERIBJCE3whEgsgAyASNwOQCyADIA43A4gLIAMgDTcDgAsgAyARNwP4CiADQfABaiADKQPYBSINQgAgAykD4AUiDEIAEMkDIANB4AFqIAMpA9AFIg5CACAMQgAQyQMgA0HQAWogAykDyAUiD0IAIAxCABDJAyADQaACaiAOQgAgDUIAEMkDIANBkAJqIA9CACANQgAQyQMgA0HAAmogD0IAIA5CABDJAyADQcABaiAMQgAgDEIAEMkDIANBgAJqIA1CACANQgAQyQMgA0GwAmogDkIAIA5CABDJAyADQdACaiAPQgAgD0IAEMkDIANBsAFqIAMpA8ABIhNCm5Svw/K1qN6Gf34iDUIAQm1CABDJAyADQaABaiANQgBCf0IAEMkDIANBkAFqIA1CAEL///////////8AQgAQyQMgAykDyAIgAykDmAIgAykD2AEgAykD6AEgAykD+AEiDCADKQPgAXwiDSAMVK18Ig4gAykD0AF8IgwgDlStfCIPIAMpA5ACfCIOIA9UrXwgDiAOIAMpA6gCIAwgDCADKQOgAnwiD1atfHwiDFatfCIRIAMpA8ACfCIOIBFUrXwiEUI/iCADKQPYAiADKQPQAiIQIBFCAYYgDkI/iIR8IhEgEFStfCARIAMpA7gCIAMpA4gCIAMpA4ACIhIgDUIBhiADKQPwASIUQj+IhHwiECASVK18IBAgAykDyAEiEiAUQgGGfCIUIBJUrXwiFiAQVK18IhAgD0IBhiANQj+IhHwiGiAQVK0iDSADKQOwAnwiECANVK18IBAgECAMQgGGIA9CP4iEfCINVq18Ig8gDkIBhiAMQj+IhHwiEiAPVK18IhAgEVStfHwhEUEAIQUCfwJAIAMpA5gBIAMpA6gBIg4gDiADKQO4ASADKQOwASIMIBNCfYN8IAxUrXwiDyADKQOgASITfCIMIA9UrXwgDCAMIBR8Ig5WrXwiDyATfCIMIA9UrXwgDCAWfCIPIAxUrXwiEyADKQOQAXwiDCATVK18IAwgGnwiEyAMVK18IgxQDQAgDCANfCINIAxUIgJFDQAgAq0iDCASfCISIAxaDQAgDCASVq0iDCAQfCIQIAxaDQAgDCAQVq0iDCARfCIRIAxUDAELQQALIQYgA0GAAWogDkKblK/D8rWo3oZ/fiIMQgBCbUIAEMkDIANB8ABqIAxCAEJ/QgAQyQMgA0HgAGogDEIAQv///////////wBCABDJAwJAIAMpA2ggAykDeCIUIBQgAykDiAEgDiADKQOAASIMfCAMVK18Ig4gAykDcCIWfCIMIA5UrXwgDCAMIA98Ig5WrXwiDyAWfCIMIA9UrXwgDCATfCIPIAxUrXwiEyADKQNgfCIMIBNUrXwgDCAMIA18IhNWrXwiDVANACANIBJ8IhIgDVoNACANIBJWrSINIBB8IhAgDVoNACANIBBWrSINIBF8IhEgDVQhBQsgA0HQAGogDkKblK/D8rWo3oZ/fiINQgBCbUIAEMkDIANBQGsgDUIAQn9CABDJAyADQTBqIA1CAEL///////////8AQgAQyQNBACECIAMpAzggAykDSCIMIAwgAykDWCADKQNQIg0gDnwgDVStfCIOIAMpA0AiFHwiDSAOVK18IA0gDSAPfCIMVq18Ig4gFHwiDSAOVK18IA0gE3wiDiANVK18Ig8gAykDMHwiDSAPVK18IA0gEnwiDyANVK18Ig1QRQRAIA0gEHwiECANVCICrSINIBF8IhIgESACGyERIAIgDSASVnEhAgsgA0EgaiAMQpuUr8Pytajehn9+Ig1CAEJtQgAQyQMgA0EQaiANQgBCf0IAEMkDIAMgDUIAQv///////////wBCABDJAyADKQMIIAMpAxgiEiASIAMpAyggDCADKQMgIg18IA1UrXwiDCADKQMQIhN8Ig0gDFStfCANIA58IhIgDVStfCIMIBN8Ig0gDFStfCANIA98Ig4gDVStfCINIAMpAwB8IgwgDVStfCAMIAwgEHwiDVatfCIMIBF8Ig8gESAMQgBSIgQbIRECQAJAIAUgBnIgAnIgDCAPViICrSAMIAQbQgBSciACIARxIBFCAFNyckUEQEL///////////8AIQ8gEUL///////////8AUiANQn9SciAOQn9Scg0CQn8hEEJ/IQwgEkJtVA0CDAELIBEhDyANIRAgDiEMCyAMQgF8Ig0gEkJtVK0iEX0hDiAQQgF8IhMgDEJ/UiANIBFUcq0iDH0hDSAPIBBCf1IgDCATVnKtfUL///////////8AfSERIBJCE3whEgsgAyASNwPQCyADIA43A8gLIAMgDTcDwAsgAyARNwO4CyADQfALaiICIAFBGGoiBCkDADcDACADQegLaiIFIAFBEGoiBikDADcDACADQeALaiIIIAFBCGoiCSkDADcDACADIAEpAwA3A9gLIANBmAtqIANBuAtqIgogA0HYC2oiCxB8IAIgBCkDADcDACAFIAYpAwA3AwAgCCAJKQMANwMAIAMgASkDADcD2AsgCiADQfgLaiALEHwgAykDmAsiECADKQO4C3wiDSADKQOgCyIMIAMpA8ALfCIOIAxUIA4gAykDqAsiDCADKQPIC3wiDyAMVCAPIA8gAykDsAsiDCADKQPQC3wiESAMVK18IgxWcq18IhIgDlRyrXwhDwJAAkACQCANIBBUIA0gD1ZyDQBC////////////ACEQIA8iDUL///////////8AUQRAQn8hEEL///////////8AIQ0gEkJ/Ug0CIAxCf1IEQCAMIQ4MBAtCbSEQIBEiDUJtUQ0BCyANIBBaDQAgDyENDAELIAxCAXwiDSARQm1UrSIQfSEOIBJCAXwiEyAMQn9SIA0gEFRyrSINfSEQIA8gEkJ/UiANIBNWcq19Qv///////////wB9IQ0gEUITfCERDAELIBIhECAMIQ4LIA0gFXwiDCAQIBd8Ig8gEFQgDyAOIA4gGHwiEFYgECAQIBEgGXwiEiARVK18Ig5Wcq18IhAgD1RyrXwhEQJAAkACQCAMIA1UIAwgEVZyDQBC////////////ACENIBEiDEL///////////8AUQRAQn8hDUL///////////8AIQwgEEJ/Ug0CIA5Cf1IEQCAOIQ8MBAtCbSENIBIiDEJtUQ0BCyAMIA1aDQAgESEMDAELIA5CAXwiDSASQm1UrSIMfSEPIBBCAXwiEyAOQn9SIAwgDVZyrSIMfSENIBEgEEJ/UiAMIBNWcq19Qv///////////wB9IQwgEkITfCESDAELIBAhDSAOIQ8LIAMgEjcD8AsgAyAPNwPoCyADIA03A+ALIAMgDDcD2AsgA0H4CmogA0HYC2pBIBDxAyADKALcCiIBBEAgAygC4AogAUECdBDfBAsCQCADKAKUCCIBRQ0AIAEgAUEMbEETakF4cSIEakEJaiIBRQ0AIAMoApAIIARrIAEQ3wQLIAMoAsAIIgFBgICAgHhGIAFFckUEQCADKALECCABQQJ0EN8ECw0BCyAAIANByAVqQcgA/AoAAAwBCyADQfgLaiIBIANByAVqENgBIANBADYC4AsgA0KAgICAEDcC2AsgA0Gw18EANgK0BiADQqCAgIAONwK4BiADIANB2AtqIgI2ArAGIAEgA0GwBmoiARDTAg0BIANBmAZqIANB4AtqKAIANgIAIAMgAykC2As3A5AGIAEgBxDYASADQQA2AoALIANCgICAgBA3AvgKIANBsNfBADYCvAsgA0KggICADjcCwAsgAyADQfgKajYCuAsgASADQbgLahDTAg0BIANBqAZqIANBgAtqKAIANgIAIAMgAykC+Ao3A6AGIANBAzYC3AsgA0Ho9cEANgLYCyADQgI3AuQLIAMgA0GgBmqtQoCAgIDAB4Q3A6ALIAMgA0GQBmqtQoCAgIDAB4Q3A5gLIAMgA0GYC2o2AuALIAAgAhDSAiADKAKgBiIBBEAgAygCpAYgARDfBAsgAygCkAYiAQRAIAMoApQGIAEQ3wQLIABBAjoAQAsgA0GgDGokAA8LQdjXwQBBNyADQZ8MakHI18EAQdzYwQAQygMAC4UmAhR+Bn8jAEGgBGsiFSQAIABBABBEIABBAxBEIABBBhBEIABBCRBEIAApA0AhCSAAKQNIIQsgACkDUCEHIAApA1ghDUGgayEXA0AgCyAXQZDxwQBqKQMAfCIKIAtUIAogByAHIBdBmPHBAGopAwB8IgJWIAIgDSAXQaDxwQBqKQMAfCIBIA1UrXwiAyACVHKtfCICIApUcq0gF0GI8cEAaikDACAJfHwiDSEKQpGAgICAgICACCEJAkACQCANQpGAgICAgICACFEEQEIBIQkgAUIBUQ0BIAEhCiACIAOEQgBSDQELIAkgClgNACABIQkgAyELIAIhCgwBCyABQgF9IQkgAyABUK0iAX0hCyACIAEgA1atIgF9IQogDULu/////////3dC7/////////93IAEgAlYbfCENCyAVQfADaiALQgAgCUIAEMkDIBVB0ANqIApCACAJQgAQyQMgFUGgA2ogDUIAIAlCABDJAyAVQcADaiAKQgAgC0IAEMkDIBVBkANqIA1CACALQgAQyQMgFUGAA2ogDUIAIApCABDJAyAVQZAEaiAJQgAgCUIAEMkDIBVB4ANqIAtCACALQgAQyQMgFUGwA2ogCkIAIApCABDJAyAVQfACaiAN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IA1C7v////////93Qu//////////dyABIAJUG3whDQtCkYCAgICAgIAIIQEgECAQfCIEIBBUIAQgDiAOfCIDIA5UIAMgCCAIfCICIAhUrXwiDiADVHKtfCIIIARUcq0gBUIBhoQiBSEDAkACQCAFQpGAgICAgICACFEEQEIBIQEgAkIBUQ0BIAIhAyAIIA6EQgBSDQELIAEgA1gNACAIIQMgDiEBIAIhBAwBCyACQgF9IQQgDiACUK0iAn0hASAIIAIgDlatIgJ9IQMgBULu/////////3dC7/////////93IAIgCFYbfCEFC0KRgICAgICAgAghAiADIAl8IhAgCVQgECAQIAEgC3wiASALVCABIAQgCnwiAyAKVK18Ig4gAVRyrXwiCFZyrSAFIA18fCIFIQECQAJAIAVCkYCAgICAgIAIUQRAIAggDoRCAFINAUIBIQIgAyIBQgFRDQELIAEgAloNACAIIQIgDiEBIAMhBAwBCyADQgF9IQQgDiADUK0iAn0hASAIIAIgDlatIgN9IQIgBULu/////////3dC7/////////93IAMgCFYbfCEFCyAAIAQ3AxggACABNwMQIAAgAjcDCCAAIAU3AwBCkYCAgICAgIAIIQIgEyATfCIDIBNUIAMgAyAUIBR8IgEgFFQgASASIBJ8Ig4gElStfCIEIAFUcq18IgNWcq0gEUIBhoQiBSEBAn4CQCAFQpGAgICAgICACFEEQEIBIQIgDkIBUQ0BIA4hASADIASEQgBSDQELIAEgAloNACADIQEgBCEIIA4MAQsgBCAOUK0iAX0hCCADIAEgBFatIgJ9IQEgBULu/////////3dC7/////////93IAIgA1YbfCEFIA5CAX0LIQQgAAJ+AkACQCANIgIgBSIDUg0AIAEhAyABIAkiAlINACALIgIgCCIDUg0AIAoiAiAEIgNRDQELIAIgA1oNACAIIAtUIAQgClStIgMgCCALfSICVnKtIhIgASAJfSIQfSIRIAIgA1IgAyACfSIOIAQgCn0iCEIBVq0iBFRyrSICfSEDIBAgElIgAiARVnIhFiAOIAR9IQIgASAJVCAQIBJUcq0gDSAFfXxCkYCAgICAgIAIfCEFQgEgCH0MAQsgCyAIfSIRIAQgClatIgN9IQIgCSABfSIOIAMgEVYgCCALVnKtIgh9IQMgCCAOViABIAlWciEWIA0gBX0hBSAKIAR9CzcDOCAAIAI3AzAgACADNwMoIAAgBSAWrX03AyBCkYCAgICAgIAIIQggByAHfCIEIAdUIAQgBCAMIAx8IgIgDFQgAiAGIAZ8IgEgBlStfCIOIAJUcq18IgNWcq0gD0IBhoQiBSEEAkACQCAFQpGAgICAgICACFEEQEIBIQggAUIBUSADQgBScg0BIAEhBCAOQgBSDQELIAQgCFoNACADIQggDiEEIAEhAgwBCyABQgF9IQIgDiABUK0iAX0hBCADIAEgDlatIgF9IQggBULu/////////3dC7/////////93IAEgA1YbfCEFC0KRgICAgICAgAghAyAIIAcgCHwiDlYgDiAEIAx8IgcgBFQgByAHIAIgBnwiASACVK18IgdWcq18IgIgDlRyrSAFIA98fCIFIQYCQAJAIAVCkYCAgICAgIAIUQRAIAIgB4RCAFINAUIBIQMgASIGQgFRDQELIAMgBlgNACACIQYgByEMIAEhDwwBCyABQgF9IQ8gByABUK0iAX0hDCACIAEgB1atIgF9IQYgBULu/////////3dC7/////////93IAEgAlYbfCEFCwJ+AkACQCANIgEgBSIHUg0AIAkiASAGIgdSDQAgCyIBIAwiB1INACAKIgEgDyIHUQ0BCyABIAdaDQAgCyAMViAKIA9WrSICIAwgC30iAVZyrSIIIAYgCX0iDH0iBCABIAJSIAIgAX0iByAPIAp9IgNCAVatIgJUcq0iAX0hCyAIIAxSIAEgBFZyIRYgByACfSEHIAYgCVQgCCAMVnKtIA0gBX18QpGAgICAgICACHwhCUIBIAN9DAELIAsgDH0iAyAKIA9UrSIBfSEHIAkgBn0iAiALIAxUIAEgA1ZyrSIBfSELIAYgCVYgASACVnIhFiANIAV9IQkgCiAPfQshDSAJIBatfSEJIBdBIGoiFw0ACyAAIAc3A1AgACANNwNYIAAgCzcDSCAAIAk3A0AgAEHfABBEIABB4gAQRCAAQeUAEEQgAEHoABBEIBVBoARqJAAL/SwCAX8UfiMAQcAKayICJAAgAkGwCmogASkDGCILQgAgC0IAEMkDIAJB4AlqIAEpAxAiDUIAIAtCABDJAyACQYAJaiABKQMIIhFCACALQgAQyQMgAkGQCGogASkDACISQgAgC0IAEMkD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mAcgASkDkAciAyAMfCADVK18fCIMQpuUr8Pytajehn9+IgNCAEJtQgAQyQMgAUHgBmogA0IAQn9CABDJAyABQdAGaiADQgBC////////////AEIAEMkDIAFBoAZqIAEpA+AGIgogCyABKQPoByAHIA9WrXwiByABKQPwB3wiCCABKQOwBnwiBiAEIBBUrSAFIA8gEFatfHx8Ig98IhAgCSAMVq0gASkDiAciBSAJIAtUrXx8fCIEfCIJIAEpA/gGIAEpA/AGIgMgDHwgA1StfHwiDEKblK/D8rWo3oZ/fiIDQgBCbUIAEMkDIAFBkAZqIANCAEJ/QgAQyQMgAUGABmogA0IAQv///////////wBCABDJAwJAAkAgASkDiAYgASkD2AYgASkDyAYgASkDwAYiAyABKQP4ByAHIAhWrXx8IgcgA1StfCAHIAYgD1atIAEpA7gGIAYgCFStfHx8IgMgB1StfCADIAQgEFStIAUgDyAQVq18fHwiBCADVK18IgMgASkD0AZ8IgUgA1StfCAFIAUgASkD6AYiAyAEIAQgCnwiBFatfCAEIAQgCSAMVq0gAyAJIApUrXx8fCIEVq18fCIFVq18IgMgASkDgAZ8IgkgA1StfCAJIAEpA5gGIgMgBSAFIAEpA5AGIgd8IgVWrXwgBSADIAQgB3wiBCAHVK18IAQgASkDqAYgASkDoAYiAyAMfCADVK18fCISIARUrXx8IgQgBVStfHwiAyAJVK18IhZCAFkEQCAWQv///////////wBSIBJCbVRyIAMgBINCf1JyDQELIARCAXwiCSASQm1UrSIHfSEPIANCAXwiBSAEQn9SIAcgCVZyrSIEfSEQIBYgA0J/UiAEIAVWcq19Qv///////////wB9IRYgEkITfCESDAELIAMhECAEIQ8LIAFBiAhqQcr/wQBBwgAQtwIgAUHABWogASkDoAhCAEKkC0IAEMkDIAFB0AVqIAEpA5gIQgBCpAtCABDJAyABQeAFaiABKQOQCEIAQqQLQgAQyQMgAUHwBWogASkDiAhCAEKkC0IAEMkDIAFBsAVqIAEpA8AFIgdCm5Svw/K1qN6Gf34iA0IAQm1CABDJAyABQaAFaiADQgBCf0IAEMkDIAFBsARqIANCAEL///////////8AQgAQyQMgAUGQBWogASkDoAUiCiABKQPIBSIFIAEpA9AFfCIEfCIJIAEpA7gFIAEpA7AFIgMgB0J8g3wgA1StfHwiDEKblK/D8rWo3oZ/fiIDQgBCbUIAEMkDIAFBgAVqIANCAEJ/QgAQyQMgAUHABGogA0IAQv///////////wBCABDJAyABQfAEaiABKQOABSIOIAogASkD2AUgBCAFVK18IgcgASkD4AV8Igh8IgYgCSAMVq0gASkDqAUiBSAJIApUrXx8fCIEfCIJIAEpA5gFIAEpA5AFIgMgDHwgA1StfHwiDEKblK/D8rWo3oZ/fiIDQgBCbUIAEMkDIAFB4ARqIANCAEJ/QgAQyQMgAUHQBGogA0IAQv///////////wBCABDJAyABQaAEaiABKQPgBCINIA4gASkD6AUgByAIVq18IgcgASkD8AV8IgsgASkDsAR8IgogBCAGVK0gBSAGIAhUrXx8fCIIfCIGIAkgDFatIAEpA4gFIgUgCSAOVK18fHwiBHwiCSABKQP4BCABKQPwBCIDIAx8IANUrXx8IgxCm5Svw/K1qN6Gf34iA0IAQm1CABDJAyABQZAEaiADQgBCf0IAEMkDIAFBgARqIANCAEL///////////8AQgAQyQMCQAJAIAEpA4gEIAEpA9gEIAEpA8gEIAEpA8AEIgMgASkD+AUgByALVq18fCIHIANUrXwgByAIIApUrSABKQO4BCAKIAtUrXx8fCIDIAdUrXwgAyAEIAZUrSAFIAYgCFStfHx8IgQgA1StfCIDIAEpA9AEfCIFIANUrXwgBSAFIAEpA+gEIgMgBCAEIA18IgRWrXwgBCAEIAkgDFatIAMgCSANVK18fHwiBFatfHwiBVatfCIDIAEpA4AEfCIJIANUrXwgCSABKQOYBCIDIAUgBSABKQOQBCIHfCIFVq18IAUgAyAEIAd8IgQgB1StfCAEIAEpA6gEIAEpA6AEIgMgDHwgA1StfHwiEyAEVK18fCIEIAVUrXx8IgMgCVStfCIXQgBZBEAgF0L///////////8AUiATQm1UciADIASDQn9Scg0BCyAEQgF8IgkgE0JtVK0iB30hDCADQgF8IgUgBEJ/UiAHIAlWcq0iBH0hCSAXIANCf1IgBCAFVnKtfUL///////////8AfSEXIBNCE3whEwwBCyADIQkgBCEMCyABQYgIakGMgMIAQcAAELcCIAFBwANqIAEpA6AIQgBCpAtCABDJAyABQdADaiABKQOYCEIAQqQLQgAQyQMgAUHgA2ogASkDkAhCAEKkC0IAEMkDIAFB8ANqIAEpA4gIQgBCpAtCABDJAyABQbADaiABKQPAAyIHQpuUr8Pytajehn9+IgNCAEJtQgAQyQMgAUGgA2ogA0IAQn9CABDJAyABQbACaiADQgBC////////////AEIAEMkDIAFBkANqIAEpA6ADIg0gASkDyAMiBSABKQPQA3wiBHwiBiABKQO4AyABKQOwAyIDIAdCfIN8IANUrXx8IghCm5Svw/K1qN6Gf34iA0IAQm1CABDJAyABQYADaiADQgBCf0IAEMkDIAFBwAJqIANCAEL///////////8AQgAQyQMgAUHwAmogASkDgAMiFCANIAEpA9gDIAQgBVStfCIHIAEpA+ADfCILfCIKIAYgCFatIAEpA6gDIgUgBiANVK18fHwiBHwiBiABKQOYAyABKQOQAyIDIAh8IANUrXx8IghCm5Svw/K1qN6Gf34iA0IAQm1CABDJAyABQeACaiADQgBCf0IAEMkDIAFB0AJqIANCAEL///////////8AQgAQyQMgAUGgAmogASkD4AIiESAUIAEpA+gDIAcgC1atfCIHIAEpA/ADfCIOIAEpA7ACfCINIAQgClStIAUgCiALVK18fHwiC3wiCiAGIAhWrSABKQOIAyIFIAYgFFStfHx8IgR8IgYgASkD+AIgASkD8AIiAyAIfCADVK18fCIIQpuUr8Pytajehn9+IgNCAEJtQgAQyQMgAUGQAmogA0IAQn9CABDJAyABQYACaiADQgBC////////////AEIAEMkDAkACQCABKQOIAiABKQPYAiABKQPIAiABKQPAAiIDIAEpA/gDIAcgDlatfHwiByADVK18IAcgCyANVK0gASkDuAIgDSAOVK18fHwiAyAHVK18IAMgBCAKVK0gBSAKIAtUrXx8fCIEIANUrXwiAyABKQPQAnwiBSADVK18IAUgBSABKQPoAiIDIAQgBCARfCIEVq18IAQgBCAGIAhWrSADIAYgEVStfHx8IgRWrXx8IgVWrXwiAyABKQOAAnwiBiADVK18IAYgASkDmAIiAyAFIAUgASkDkAIiB3wiBVatfCAFIAMgBCAHfCIEIAdUrXwgBCABKQOoAiABKQOgAiIDIAh8IANUrXx8IhUgBFStfHwiBCAFVK18fCIDIAZUrXwiGEIAWQRAIBhC////////////AFIgFUJtVHIgAyAEg0J/UnINAQsgBEIBfCIIIBVCbVStIgV9IQcgA0IBfCIGIARCf1IgBSAIVnKtIgR9IQUgGCADQn9SIAQgBlZyrX1C////////////AH0hGCAVQhN8IRUMAQsgAyEFIAQhBwsgAUGICGpBzIDCAEHAABC3AiABQcABaiABKQOgCEIAQqQLQgAQyQMgAUHQAWogASkDmAhCAEKkC0IAEMkDIAFB4AFqIAEpA5AIQgBCpAtCABDJAyABQfABaiABKQOICEIAQqQLQgAQyQMgAUGwAWogASkDwAEiCEKblK/D8rWo3oZ/fiIDQgBCbUIAEMkDIAFBoAFqIANCAEJ/QgAQyQMgAUEwaiADQgBC////////////AEIAEMkDIAFBkAFqIAEpA6ABIhEgASkDyAEiBiABKQPQAXwiBHwiCiABKQO4ASABKQOwASIDIAhCfIN8IANUrXx8IgtCm5Svw/K1qN6Gf34iA0IAQm1CABDJAyABQYABaiADQgBCf0IAEMkDIAFBQGsgA0IAQv///////////wBCABDJAyABQfAAaiABKQOAASIZIBEgASkD2AEgBCAGVK18IgggASkD4AF8Ig58Ig0gCiALVq0gASkDqAEiBiAKIBFUrXx8fCIEfCIKIAEpA5gBIAEpA5ABIgMgC3wgA1StfHwiC0KblK/D8rWo3oZ/fiIDQgBCbUIAEMkDIAFB4ABqIANCAEJ/QgAQyQMgAUHQAGogA0IAQv///////////wBCABDJAyABQSBqIAEpA2AiGiAZIAEpA+gBIAggDlatfCIIIAEpA/ABfCIUIAEpAzB8IhEgBCANVK0gBiANIA5UrXx8fCIOfCINIAogC1atIAEpA4gBIgYgCiAZVK18fHwiBHwiCiABKQN4IAEpA3AiAyALfCADVK18fCILQpuUr8Pytajehn9+IgNCAEJtQgAQyQMgAUEQaiADQgBCf0IAEMkDIAEgA0IAQv///////////wBCABDJAwJAAkAgASkDCCABKQNYIAEpA0ggASkDQCIDIAEpA/gBIAggFFatfHwiCCADVK18IAggDiARVK0gASkDOCARIBRUrXx8fCIDIAhUrXwgAyAEIA1UrSAGIA0gDlStfHx8IgQgA1StfCIDIAEpA1B8IgYgA1StfCAGIAYgASkDaCIDIAQgBCAafCIEVq18IAQgBCAKIAtWrSADIAogGlStfHx8IgRWrXx8IgZWrXwiAyABKQMAfCIKIANUrXwgCiABKQMYIgMgBiAGIAEpAxAiCHwiBlatfCAGIAMgBCAIfCIEIAhUrXwgBCABKQMoIAEpAyAiAyALfCADVK18fCIOIARUrXx8IgMgBlStfHwiBiAKVK18Ig1CAFkEQCANQv///////////wBSIA5CbVRyIAMgBoNCf1JyDQELIANCAXwiCyAOQm1UrSIIfSEEIAZCAXwiCiADQn9SIAggC1ZyrSIIfSEDIA0gBkJ/UiAIIApWcq19Qv///////////wB9IQ0gDkITfCEODAELIAMhBCAGIQMLIAFBiAhqQYyBwgBBwABBEBDxAQJAIAEoAogIQYCAgIB4RwRAIAAgASkCiAg3AqwEIABBtARqIAFBkAhqKAIANgIAEMcEIgJFDQEgAEEEOgC4BCAAIBM3AzggACAMNwMwIAAgCTcDKCAAIBc3AyAgACASNwMYIAAgDzcDECAAIBA3AwggACAWNwMAIABBgLHCACkDADcD4AEgAEHoAWpBiLHCACkDADcDACAAIAIpAwg3A/gBIAAgAikDACIJNwPwASACIAlCAXw3AwAgAEH4AGpCADcDACAAQfAAakIANwMAIABB6ABqQgA3AwAgAEHgAGpCADcDACAAQdgAakIANwMAIABB0ABqQgA3AwAgAEHIAGpCADcDACAAQgA3A0AgACAYNwOAASAAIAU3A4gBIAAgBzcDkAEgACAVNwOYASAAIA03A6ABIAAgAzcDqAEgACAENwOwASAAIA43A7gBIABCADcDmAMgAEIANwPgAyAAQQg2AqgEIABCADcDiAIgAEIANwOAAiAAQgA3A8ABIABByAFqQgA3AwAgAEHQAWpCADcDACAAQgE3A6gCIABC5AE3A9gBIABCADcDsAIgAEIANwOgAiAAQYCAgIB4NgKQAiABQbAIaiQADwsgASABLQCMCDoArwhBjPfBAEErIAFBrwhqQeT7wQBBzIHCABDKAwALEPADAAuBIgEEfyAAKAIEIQIgACgCCCIDBEAgAiEBA0AgASgCACIEBEAgAUEEaigCACAEQQJ0EN8ECyABQQxqIQEgA0EBayID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AkHAA2oiISkDACI3NwMAIAJBOGoiBCACQbgDaiIiKQMAIjg3AwAgAkEwaiIWIAJBsANqIiMpAwAiOTcDACACQShqIhcgAkGoA2oiJCkDACI6NwMAIAJBIGoiGSACQaADaiIlKQMAIjs3AwAgAkHYDWoiEyACQZADaiImKQMANwMAIAJB4A1qIhQgAkGYA2oiJykDADcDACACQegNaiIFIDs3AwAgAkHwDWoiBiA6NwMAIAJB+A1qIgcgOTcDACACQYAOaiIIIDg3AwAgAkGIDmoiCSA3NwMAIAIgAikDiAMiNzcDCCACIDc3A9ANIAJBwAZqIgogCSkDADcDACACQbgGaiILIAgpAwA3AwAgAkGwBmoiDCAHKQMANwMAIAJBqAZqIg0gBikDADcDACACQaAGaiIOIAUpAwA3AwAgAkGYBmoiDyAUKQMANwMAIAJBkAZqIhAgEykDADcDACACIAIpA9ANNwOIBiACQcAJaiAKKQMANwMAIAJBuAlqIAspAwA3AwAgAkGwCWogDCkDADcDACACQagJaiANKQMANwMAIAJBoAlqIA4pAwA3AwAgAkGYCWogDykDADcDACACQZAJaiAQKQMANwMAIAIgAikDiAY3A4gJIBEgEhC9AyADICEpAwAiNzcDACAEICIpAwAiODcDACAWICMpAwAiOTcDACAXICQpAwAiOjcDACAZICUpAwAiOzcDACATICYpAwA3AwAgFCAnKQMANwMAIAUgOzcDACAGIDo3AwAgByA5NwMAIAggODcDACAJIDc3AwAgAiACKQOIAyI3NwMIIAIgNzcD0A0gCiAJKQMANwMAIAsgCCkDADcDACAMIAcpAwA3AwAgDSAGKQMANwMAIA4gBSkDADcDACAPIBQpAwA3AwAgECATKQMANwMAIAIgAikD0A03A4gGIAJBgApqIAopAwA3AwAgAkH4CWogCykDADcDACACQfAJaiAMKQMANwMAIAJB6AlqIA0pAwA3AwAgAkHgCWogDikDADcDACACQdgJaiAPKQMANwMAIAJB0AlqIBApAwA3AwAgAiACKQOIBjcDyAkgESASEL0DIAMgISkDACI3NwMAIAQgIikDACI4NwMAIBYgIykDACI5NwMAIBcgJCkDACI6NwMAIBkgJSkDACI7NwMAIBMgJikDADcDACAUICcpAwA3AwAgBSA7NwMAIAYgOjcDACAHIDk3AwAgCCA4NwMAIAkgNzcDACACIAIpA4gDIjc3AwggAiA3NwPQDSAKIAkpAwA3AwAgCyAIKQMANwMAIAwgBykDADcDACANIAYpAwA3AwAgDiAFKQMANwMAIA8gFCkDADcDACAQIBMpAwA3AwAgAiACKQPQDTcDiAYgAkHACmogCikDADcDACACQbgKaiALKQMANwMAIAJBsApqIAwpAwA3AwAgAkGoCmogDSkDADcDACACQaAKaiAOKQMANwMAIAJBmApqIA8pAwA3AwAgAkGQCmogECkDADcDACACIAIpA4gGNwOICkEARQRAIAJBiAZqIAJBiAlqQcAB/AoAAAsgAiABQYADajYClAwgAiAVNgKQDCACQdANaiIbIAJBkAxqIigQvQMgAkHIDWoiASAJKQMAIjc3AwAgAkHADWoiFSAIKQMAIjg3AwAgAkG4DWoiESAHKQMAIjk3AwAgAkGwDWoiEiAGKQMAIjo3AwAgAkGoDWoiGCAFKQMAIjs3AwAgAkHYDGoiKSATKQMANwMAIAJB4AxqIiogFCkDADcDACACQegMaiIcIDs3AwAgAkHwDGoiHSA6NwMAIAJB+AxqIh4gOTcDACACQYANaiIfIDg3AwAgAkGIDWoiICA3NwMAIAIgAikD0A0iNzcDkA0gAiA3NwPQDCADICApAwA3AwAgBCAfKQMANwMAIBYgHikDADcDACAXIB0pAwA3AwAgGSAcKQMANwMAIAJBGGoiKyAqKQMANwMAIAJBEGoiGiApKQMANwMAIAIgAikD0Aw3AwggISADKQMANwMAICIgBCkDADcDACAjIBYpAwA3AwAgJCAXKQMANwMAICUgGSkDADcDACAnICspAwA3AwAgJiAaKQMANwMAIAIgAikDCDcDiAMgGyAoEL0DIAEgCSkDACI3NwMAIBUgCCkDACI4NwMAIBEgBykDACI5NwMAIBIgBikDACI6NwMAIBggBSkDACI7NwMAICkgEykDADcDACAqIBQpAwA3AwAgHCA7NwMAIB0gOjcDACAeIDk3AwAgHyA4NwMAICAgNzcDACACIAIpA9ANIjc3A5ANIAIgNzcD0AwgAyAgKQMANwMAIAQgHykDADcDACAWIB4pAwA3AwAgFyAdKQMANwMAIBkgHCkDADcDACArICopAwA3AwAgGiApKQMANwMAIAIgAikD0Aw3AwggAkGABGoiLSADKQMANwMAIAJB+ANqIi4gBCkDADcDACACQfADaiIvIBYpAwA3AwAgAkHoA2oiMCAXKQMANwMAIAJB4ANqIjEgGSkDADcDACACQdgDaiIyICspAwA3AwAgAkHQA2oiMyAaKQMANwMAIAIgAikDCDcDyAMgGyAoEL0DIAEgCSkDACI3NwMAIBUgCCkDACI4NwMAIBEgBykDACI5NwMAIBIgBikDACI6NwMAIBggBSkDACI7NwMAICkgEykDADcDACAqIBQpAwA3AwAgHCA7NwMAIB0gOjcDACAeIDk3AwAgHyA4NwMAICAgNzcDACACIAIpA9ANIjc3A5ANIAIgNzcD0AwgAyAgKQMANwMAIAQgHykDADcDACAWIB4pAwA3AwAgFyAdKQMANwMAIBkgHCkDADcDACArICopAwA3AwAgGiApKQMANwMAIAIgAikD0Aw3AwggAkHABGoiKSADKQMANwMAIAJBuARqIiogBCkDADcDACACQbAEaiI0IBYpAwA3AwAgAkGoBGoiNSAXKQMANwMAIAJBoARqIjYgGSkDADcDACACQZgEaiIZICspAwA3AwAgAkGQBGoiKyAaKQMANwMAIAIgAikDCDcDiAQgLEUEQCACQYgJaiACQYgDakHAAfwKAAALIAJByAdqIRcgLEUEQCAXIAJBiAlqQcAB/AoAAAtBACIWRQRAIAJBCGogAkGIBmpBgAP8CgAACyACIAJByAFqIho2AtQMIAIgAkEIajYC0AwgAkGIA2oiGyACQdAMaiIoEL0DIAkgISkDACI3NwMAIAggIikDACI4NwMAIAcgIykDACI5NwMAIAYgJCkDACI6NwMAIAUgJSkDACI7NwMAIAJBmA1qIgMgJikDADcDACACQaANaiIEICcpAwA3AwAgGCA7NwMAIBIgOjcDACARIDk3AwAgFSA4NwMAIAEgNzcDACACIAIpA4gDIjc3A9ANIAIgNzcDkA0gCiABKQMANwMAIAsgFSkDADcDACAMIBEpAwA3AwAgDSASKQMANwMAIA4gGCkDADcDACAPIAQpAwA3AwAgECADKQMANwMAIAIgAikDkA03A4gGIAJBgAtqIAopAwA3AwAgAkH4CmogCykDADcDACACQfAKaiAMKQMANwMAIAJB6ApqIA0pAwA3AwAgAkHgCmogDikDADcDACACQdgKaiAPKQMANwMAIAJB0ApqIBApAwA3AwAgAiACKQOIBjcDyAogGyAoEL0DIAkgISkDACI3NwMAIAggIikDACI4NwMAIAcgIykDACI5NwMAIAYgJCkDACI6NwMAIAUgJSkDACI7NwMAIAMgJikDADcDACAEICcpAwA3AwAgGCA7NwMAIBIgOjcDACARIDk3AwAgFSA4NwMAIAEgNzcDACACIAIpA4gDIjc3A9ANIAIgNzcDkA0gCiABKQMANwMAIAsgFSkDADcDACAMIBEpAwA3AwAgDSASKQMANwMAIA4gGCkDADcDACAPIAQpAwA3AwAgECADKQMANwMAIAIgAikDkA03A4gGIAJBwAtqIAopAwA3AwAgAkG4C2ogCykDADcDACACQbALaiAMKQMANwMAIAJBqAtqIA0pAwA3AwAgAkGgC2ogDikDADcDACACQZgLaiAPKQMANwMAIAJBkAtqIBApAwA3AwAgAiACKQOIBjcDiAsgGyAoEL0DIAkgISkDACI3NwMAIAggIikDACI4NwMAIAcgIykDACI5NwMAIAYgJCkDACI6NwMAIAUgJSkDACI7NwMAIAMgJikDADcDACAEICcpAwA3AwAgGCA7NwMAIBIgOjcDACARIDk3AwAgFSA4NwMAIAEgNzcDACACIAIpA4gDIjc3A9ANIAIgNzcDkA0gCiABKQMANwMAIAsgFSkDADcDACAMIBEpAwA3AwAgDSASKQMANwMAIA4gGCkDADcDACAPIAQpAwA3AwAgECADKQMANwMAIAIgAikDkA03A4gGIAJBgAxqIAopAwA3AwAgAkH4C2ogCykDADcDACACQfALaiAMKQMANwMAIAJB6AtqIA0pAwA3AwAgAkHgC2ogDikDADcDACACQdgLaiAPKQMANwMAIAJB0AtqIBApAwA3AwAgAiACKQOIBjcDyAsgLEUEQCACQYgGaiACQcgKakHAAfwKAAALIAIgAkGIA2oiKDYCjAwgAiAaNgKIDCACQZANaiIaIAJBiAxqIhsQvQMgICABKQMAIjc3AwAgHyAVKQMAIjg3AwAgHiARKQMAIjk3AwAgHSASKQMAIjo3AwAgHCAYKQMAIjs3AwAgAkGYDGoiCiADKQMANwMAIAJBoAxqIgsgBCkDADcDACACQagMaiIMIDs3AwAgAkGwDGoiDSA6NwMAIAJBuAxqIg4gOTcDACACQcAMaiIPIDg3AwAgAkHIDGoiECA3NwMAIAIgAikDkA0iNzcD0AwgAiA3NwOQDCAJIBApAwA3AwAgCCAPKQMANwMAIAcgDikDADcDACAGIA0pAwA3AwAgBSAMKQMANwMAIBQgCykDADcDACATIAopAwA3AwAgAiACKQOQDDcD0A0gISAJKQMANwMAICIgCCkDADcDACAjIAcpAwA3AwAgJCAGKQMANwMAICUgBSkDADcDACAnIBQpAwA3AwAgJiATKQMANwMAIAIgAikD0A03A4gDIBogGxC9AyAgIAEpAwAiNzcDACAfIBUpAwAiODcDACAeIBEpAwAiOTcDACAdIBIpAwAiOjcDACAcIBgpAwAiOzcDACAKIAMpAwA3AwAgCyAEKQMANwMAIAwgOzcDACANIDo3AwAgDiA5NwMAIA8gODcDACAQIDc3AwAgAiACKQOQDSI3NwPQDCACIDc3A5AMIAkgECkDADcDACAIIA8pAwA3AwAgByAOKQMANwMAIAYgDSkDADcDACAFIAwpAwA3AwAgFCALKQMANwMAIBMgCikDADcDACACIAIpA5AMNwPQDSAtIAkpAwA3AwAgLiAIKQMANwMAIC8gBykDADcDACAwIAYpAwA3AwAgMSAFKQMANwMAIDIgFCkDADcDACAzIBMpAwA3AwAgAiACKQPQDTcDyAMgGiAbEL0DICAgASkDACI3NwMAIB8gFSkDACI4NwMAIB4gESkDACI5NwMAIB0gEikDACI6NwMAIBwgGCkDACI7NwMAIAogAykDADcDACALIAQpAwA3AwAgDCA7NwMAIA0gOjcDACAOIDk3AwAgDyA4NwMAIBAgNzcDACACIAIpA5ANIjc3A9AMIAIgNzcDkAwgCSAQKQMANwMAIAggDykDADcDACAHIA4pAwA3AwAgBiANKQMANwMAIAUgDCkDADcDACAUIAspAwA3AwAgEyAKKQMANwMAIAIgAikDkAw3A9ANICkgCSkDADcDACAqIAgpAwA3AwAgNCAHKQMANwMAIDUgBikDADcDACA2IAUpAwA3AwAgGSAUKQMANwMAICsgEykDADcDACACIAIpA9ANNwOIBCAsRQRAIAJByApqIChBwAH8CgAACyAsRQRAIBcgAkHICmpBwAH8CgAACyAWRQRAIAJBiANqIAJB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0ABqIjwpAwA3AwAgJCAKQdgAaiI9KQMANwMAICUgCykDADcDACAmIAwpAwA3AwAgJyAZKQMANwMAICggGikDADcDACAJIApBQGsiPikDADcDqAYgKSAqEL4CIAlB+AFqIB4gKRA4IA4gCUGgAWopAwA3AwAgFiAJQZgBaikDADcDACAVIAlBkAFqKQMANwMAIAkgCSkDiAE3A9gEIAsgMCkDADcDACANIDEpAwA3AwAgECAyKQMANwMAIBQgMykDADcDACAbIDQpAwA3AwAgIyA1KQMANwMAICQgNikDADcDACAlIAspAwA3AwAgJiAMKQMANwMAICcgGSkDADcDACAoIBopAwA3AwAgCSAKKQMANwOoBiAJQbgCaiAeICoQWSAJIEE3A/AEIAkgRDcD6AQgCSBCNwPgBCAJIEM3A9gEIAsgNykDADcDACANIDgpAwA3AwAgECA5KQMANwMAIBQgOikDADcDACAbIDspAwA3AwAgIyA8KQMANwMAICQgPSkDADcDACAlIAspAwA3AwAgJiAMKQMANwMAICcgGSkDADcDACAoIBopAwA3AwAgCSA+KQMANwOoBiAJQfgCaiAeICoQWSACIB1GDQggESAJKQP4ATcDACAvIAlB8AFqKQMANwMAIC4gCUHoAWopAwA3AwAgLSAJQeABaikDADcDACAYIAlB2AFqKQMANwMAIA4gCUHQAWopAwA3AwAgFiAJQcgBaikDADcDACAVIAlBwAFqKQMANwMAIBFBCGogCUGAAmopAwA3AwAgEUEQaiAJQYgCaikDADcDACARQRhqIAlBkAJqKQMANwMAIBFBIGogCUGYAmopAwA3AwAgEUEoaiAJQaACaikDADcDACARQTBqIAlBqAJqKQMANwMAIBFBOGogCUGwAmopAwA3AwAgCSAJKQO4ATcD2AQgBiAdRg0JIAggHUYNCyAJQagIaiIUIAEgH2oiCkFAayINIBEQ3AEgCUGwCWoiFSAKIB4Q3AEgCUHoCGoiFiAUIBUQkQMgCSkD+AghPyAJKQPwCCFAIAkoAugIQQFGDQogEyAXKQMANwMAIBNBKGogF0EoaikDADcDACATQSBqIBdBIGopAwA3AwAgE0EYaiAXQRhqKQMANwMAIBNBEGogF0EQaikDADcDACATQQhqIBdBCGopAwA3AwAgCUHwBWoiECA/NwMAIAkgQDcD6AUgFSAJQegFaiIYIBgQOCAWIAogHhCgAiAUIBUgFhDcASAWIAogFBDcASAVIBggFhA4ICsgFSANENwBIBsgCUGwCGoiFCkDADcDACAjIBIpAwA3AwAgJCAJQcAIaiIbKQMANwMAICUgHCkDADcDACAmIAlB0AhqKQMANwMAICcgCUHYCGopAwA3AwAgKCAJQeAIaikDADcDACAJQbAHaiAQKQMANwMAIAlBuAdqIBMpAwA3AwAgCUHAB2ogCUGABmopAwA3AwAgCSAJKQOoCDcDqAYgCSAJKQPoBTcDqAcgIkEYaiAgQRhqKQMANwMAICJBEGogIEEQaikDADcDACAiQQhqICBBCGopAwA3AwAgIiAgKQMANwMAIBYgGCAKEDggFSAWIA0Q3AEgLCAJQagHaiAVIAUgBxAZQQAiCkUEQCApICpBgAH8CgAACyAKRQRAIAlBqAZqIAlByANqQYAB/AoAAAsgCUHAA2oiDSAsQQhqKQIANwMAIAkgLCkCADcDuAMgCSgCtAEiCiAJKAKsAUYEQCAJQawBakG0wMIAEKMDCyAJKAKwASAKQQR0aiIQIAkpA7gDNwIAIBBBCGogDSkDADcCACAJIApBAWo2ArQBIBogCUHwAmopAwA3AwAgGSAJQegCaikDADcDACAMIAlB4AJqKQMANwMAIAsgCUHYAmopAwA3AwAgCUHgA2ogCUHQAmopAwA3AwAgCUHYA2ogCUHIAmopAwA3AwAgCUHQA2ogCUHAAmopAwA3AwAgCSAJKQO4AjcDyAMgDyAJKQP4AjcDACAPQQhqIAlBgANqKQMANwMAIA9BEGogCUGIA2opAwA3AwAgD0EYaiAJQZADaikDADcDACAPQSBqIAlBmANqKQMANwMAIA9BKGogCUGgA2opAwA3AwAgD0EwaiAJQagDaikDADcDACAPQThqIAlBsANqKQMANwMAIAlBsAlqIhAgKyAPENwBIAlB6AhqIgogCUGoBmoiDCAJQcgDahDcASAJQdgEaiINIBAgChCRAyAJKQPoBCE/IAkpA+AEIUAgCSgC2ARBAUYNDCASIA4pAwA3AwAgEkEIaiAOQQhqKQMANwMAIBJBKGogDkEoaikDADcDACASQSBqIA5BIGopAwA3AwAgEkEYaiAOQRhqKQMANwMAIBJBEGogDkEQaikDADcDACAUID83AwAgCUHwB2ogPzcDACAJQfgHaiASKQMANwMAIAlBgAhqIBspAwA3AwAgISAcKQMANwMAICFBCGogHEEIaikDADcDACAhQRBqIBxBEGopAwA3AwAgIUEYaiAcQRhqKQMANwMAIAkgQDcDqAggCSBANwPoByANIAlBqAhqIAwQOCAKIA0gKxDcASAJQdgFaiAJQegHaiAKIAUgBxAZIAkoArQBIgogCSgCrAFGBEAgCUGsAWpBxMDCABCjAwsgCSgCsAEgCkEEdGoiDCAJKQLYBTcCACAMQQhqIAlB4AVqKQIANwIAIAkgCkEBajYCtAEgH0GAAWohHyAFQSBqIQUgB0EgaiEHIAQgHUEBaiIdRw0ACwsgACAJKQKsATcCACAAQQhqIAlBtAFqKAIANgIAIAlB8AlqJAAPCyAJIAktAMkDOgDIA0GgscIAQSsgCUHIA2pB1MDCAEG0wcIAEMoDAAsgCSAJLQDJAzoAyANBoLHCAEErIAlByANqQdTAwgBBpMHCABDKAwALIAkgCS0AyQM6AMgDQaCxwgBBKyAJQcgDakHUwMIAQZTBwgAQygMACyAJIAktAMkDOgDIA0GgscIAQSsgCUHIA2pB1MDCAEGEwcIAEMoDAAsgCSAJLQDJAzoAyANBoLHCAEErIAlByANqQdTAwgBB9MDCABDKAwALIAkgCS0AyQM6AMgDQaCxwgBBKyAJQcgDakHUwMIAQeTAwgAQygMACyACIAJBhMDCABDZAwALIAYgBkGUwMIAENkDAAsgCSA/NwPwCCAJIEA3A+gIQdT+wABBKyAJQegIakGwhcEAQdCFwQAQygMACyAIIAhBpMDCABDZAwALIAkgPzcD4AQgCSBANwPYBEHU/sAAQSsgCUHYBGpBsIXBAEHQhcEAEMoDAAvbYAI0fwd+IwBB8AJrIgYkACAGQfAAaiABIAMQPCAGQZgCaiIDIAZB/ABqKAIANgIAIAYgBikCdDcDkAICQAJAAkACQAJAAkACQAJAIAYoAnAiCUGAgICAeEYEQCAAIAYpA5ACNwIEIABBgICAgHg2AgAgAEEMaiADKAIANgIADAELIAZBEGoiByAGQYABakHgAPwKAAAgBkEMaiAGQZgCaigCACILNgIAIAYgBikDkAIiODcCBCAGIAk2AgAgBigCCCIKQQJ0IQlBACEDAkACQAJAAkACQAJAAkAgCkH/////A0sgCUH8////B0tyDQACfyAJRQRAQQQhCEEADAELQdHOxQAtAAAaQQQhAyAJQQQQ1gQiCEUNASAKCyEDIAkEQCAIIDinIAn8CgAACyAGIAo2AugBIAYgCDYC5AEgBiADNgLgASAGKAIYIgpBAnQhA0EAIQkgCkH/////A0sgA0H8////B0tyDQEgBigCFCEMIAYtABwhEwJ/IANFBEBBBCEIQQAMAQtB0c7FAC0AABpBBCEJIANBBBDWBCIIRQ0CIAoLIQkgAwRAIAggDCAD/AoAAAsgBiAKNgL4ASAGIAg2AvQBIAYgCTYC8AEgBiATOgD8ASAGIAs6AOwBAkACfwJAAkACQAJAAkACQAJAAkAgAS0ADCINQQFrDgIFAAELIAEoAggiC0UNBCABKAIEIQkgC0EBayIDQf7///8DcQ0FIANB/////wNxIhNBAWoiDEEDcSEKQgAhOCAJIQMgE0EDTwRAIAxB/P///wdxIQgDQCA4QoABfCE4IANBEGohAyAIQQRrIggNAAsLIAoEQCAKIQgDQCADNQIAIDiGIDl8ITkgOEIgfCE4IANBBGohAyAIQQFrIggNAAsLIDlCgICAgBBUDQRCACE4IAkhAyATQQNPBEAgDEH8////B3EhCANAIDhCgAF8ITggA0EQaiEDIAhBBGsiCA0ACwsgDEEDcQ0BDAILIAEoAgQhCSABKAIIIgsEQCALQQFrIgNB/v///wNxDQUgA0H/////A3EiCkEBaiIMQQNxIQhCACE4IAkhAyAKQQNPBEAgDEH8////B3EhCgNAIDhCgAF8ITggA0EQaiEDIApBBGsiCg0ACwsgCARAA0AgAzUCACA4hiA5fCE5IDhCIHwhOCADQQRqIQMgCEEBayIIDQALCyA5QgBTDQULQgAgOX0hOQwCC0IAITkDQCADNQIAIDiGIDl8ITkgOEIgfCE4IANBBGohAyAKQQFrIgoNAAsLIDlCAFMNAgsgOUKAgICACHxCgICAgBBaDQEgAigCCCIIQQJ0IQFBACEKIAhB/////wNLIAFB/P///wdLcg0IIAIoAgQhDCACLQAMIQMgAQ0CQQQhEkEADAMLIAIoAggiC0ECdCEIQQAhCSALQf////8DSyAIQfz///8HS3INBiACKAIEIQwgAi0ADCEDAn8gCEUEQEEEIQpBAAwBC0HRzsUALQAAGkEEIQkgCEEEENYEIgpFDQcgCwshCSAIBEAgCiAMIAj8CgAACyAGIAM6AHwgBiALNgJ4IAYgCjYCdCAGIAk2AnAgBkHgAmogBkHwAGogOacQnQIgASgCCCELIAEoAgQhCQwDCyAGQfAAaiACIAEQoQEgBigCdCETIAYoAnAhASAGKQJ8IjhCIIinIQogOKchCAJAIAItAAwiA0EBRwRAIANBASAGKAKEASISGyEMDAELIAFBBE8EQCATIAFBAnQQ3wRBBCETQQAhAQtBASEMIAhBBEkNACAKIAhBAnQQ3wRBACEIQQQhCgsgBiAMOgDsAiAGIBI2AugCIAYgCjYC5AIgBiAINgLgAiABRQ0CIBMgAUECdBDfBAwCC0HRzsUALQAAGkEEIQogAUEEENYEIhJFDQUgCAshCiABBEAgEiAMIAH8CgAACyAGIAM6AHwgBiAINgJ4IAYgEjYCdCAGIAo2AnAgBkHgAmogBkHwAGpBACA5pyIBayABIDlCAFMbEJ0CC0EAIQogC0H/////A0sgC0ECdCIBQfz///8HS3INBAJ/IAFFBEBBBCEIQQAMAQtB0c7FAC0AABpBBCEKIAFBBBDWBCIIRQ0FIAsLIQogAQRAIAggCSAB/AoAAAsgBiANOgB8IAYgCzYCeCAGIAg2AnQgBiAKNgJwIAZBkAJqIAZB8ABqQQEQ0wEgBi0A7AIiASAGLQCcAkcNBSABQQFHBEAgBigC6AIiASAGKAKYAkcNBiAGKALkAiAGKAKUAiABQQJ0EPEDDQYLIAYoApACIgEEQCAGKAKUAiABQQJ0EN8ECyAGKALgAiIBBEAgBigC5AIgAUECdBDfBAsgBkH4AGpBuMzCACgCADYCACAGQbDMwgApAgA3A3AgBkHwAGpBpM3CABClAyAGKAJ0QQE2AgAgBkGIAmpBATYCACAGIAYpA3A3A4ACQQIhAwwGCyADIAlB+IHAABDIBAALIAkgA0H4gcAAEMgEAAsgCSAIQfiBwAAQyAQACyAKIAFB+IHAABDIBAALIAogAUH4gcAAEMgEAAsgBigCkAIiAQRAIAYoApQCIAFBAnQQ3wQLIAYoAuACIgEEQCAGKALkAiABQQJ0EN8ECyACKAIIIglBAnQhAUEAIQggCUH/////A0sgAUH8////B0tyDQIgAigCBCEKAn8gAUUEQEEEIQJBAAwBC0HRzsUALQAAGkEEIQggAUEEENYEIgJFDQMgCQshCCABBEAgAiAKIAH8CgAACyAGIAk2AogCIAYgAjYChAIgBiAINgKAAgsgBiADOgCMAiAGQbACaiAGQYACaiIBIAZB0ABqEJcCIAZB8ABqIgIgASAGQeAAahCXAiAGQQIgBi0AfGs6AHwgBkHIAmogBkH4AGoiASkCADcDACAGIAYpAnA3A8ACQQAhCyABQbjMwgAoAgA2AgAgBkGwzMIAKQIANwNwIAJBpM3CABClAyAGKAJ0QQE2AgAgBiAGKAJ0Igo2ApACIAYoAkgiCUECdCEBIAlB/////wNLIAFB/P///wdLcg0CIAYoAnAhAiAGKAJEIQwgBi0ATCETAn8gAUUEQEEEIQhBAAwBC0HRzsUALQAAGkEEIQsgAUEEENYEIghFDQMgCQshAyABBEAgCCAMIAH8CgAACyAGIAg2AnBBASEBIAZB8ABqIRIgAyELAkAgE0ECRw0AAkACQCAJDgICAAELIAgoAgAgCigCAE8NAAwBCyAGQZACaiESIAIhCyAIIQogAyECIAkhAQsgCwRAIBIoAgAgC0ECdBDfBAsgAQR+IAGtQgaGIAogAUECdGpBBGsoAgBnQQF0rX1CQH1CgP////8BgwVCAAshOCACBEAgCiACQQJ0EN8ECyAGQbACaiIDIDgQvAIgBkHAAmoiCSA4ELwCIAZBkAJqIgIgAyAGEJcCIAZB8ABqIgEgCSAGQSBqEJcCIAZB0AJqIgggAiABEK4BIAIgAyAHEJcCIAEgCSAGQTBqEJcCIAZB4AJqIAIgARCuASABIAZBgAJqIAgQkgEgBi0AfCEIIAYoAnghAyAGKAJ0ISsgBigCcCEnIAYoAugCIQkgBigC5AIhLCAGKALgAiEoIAYtAOwCIQwgBigC0AIiAQRAIAYoAtQCIAFBAnQQ3wQLIAYoAsACIgEEQCAGKALEAiABQQJ0EN8ECyAGKAKwAiIBBEAgBigCtAIgAUECdBDfBAtBACELIANB/////wNLIANBAnQiAUH8////B0tyDQMCfyABRQRAQQQhCkEADAELQdHOxQAtAAAaQQQhCyABQQQQ1gQiCkUNBCADCyESIAEEQCAKICsgAfwKAAALQQAhASAJQf////8DSyAJQQJ0IgJB/P///wdLcg0EAn8gAkUEQEEEIQtBAAwBC0HRzsUALQAAGkEEIQEgAkEEENYEIgtFDQUgCQshASACBEAgCyAsIAL8CgAACyAGIAk2AqgCIAYgCzYCpAIgBiABNgKgAiAGIAw6AKwCIAZBAiAIazoAnAIgBiADNgKYAiAGIAo2ApQCIAYgEjYCkAIgBkHwAGohHiMAQZAEayIEJAAgBCAGQZACaiICNgIMIAQgBkHgAWoiATYCCCABKAIIIgNBAnQhEQJAAkAgA0H/////A0sgEUH8////B0tyDQAgASgCBCEJIAEtAAwhCAJ/IBFFBEBBBCEVQQAMAQtB0c7FAC0AABpBBCEUIBFBBBDWBCIVRQ0BIAMLIQogEQRAIBUgCSAR/AoAAAsgBCADNgIYIAQgFTYCFCAEIAo2AhAgASgCGCIDQQJ0IRFBACEUIANB/////wNLIBFB/P///wdLcg0AIAEoAhQhCSABLQAcIQoCfyARRQRAQQQhFUEADAELQdHOxQAtAAAaQQQhFCARQQQQ1gQiFUUNASADCyELIBEEQCAVIAkgEfwKAAALIAQgAzYCKCAEIBU2AiQgBCALNgIgIAQgCjoALCAEIAg6ABwgAigCCCIDQQJ0IRFBACEUIANB/////wNLIBFB/P///wdLcg0AIAIoAgQhCSACLQAMIQgCfyARRQRAQQQhFUEADAELQdHOxQAtAAAaQQQhFCARQQQQ1gQiFUUNASADCyEKIBEEQCAVIAkgEfwKAAALIAQgAzYCOCAEIBU2AjQgBCAKNgIwIAIoAhgiCUECdCEDQQAhFAJAAkACQAJAAkACQAJAAkAgCUH/////A0sgA0H8////B0tyDQAgAigCFCEKIAItABwhAgJ/IANFBEBBBCELQQAMAQtB0c7FAC0AABpBBCEUIANBBBDWBCILRQ0BIAkLIQwgAwRAIAsgCiAD/AoAAAsgBCAJNgJIIAQgCzYCRCAEIAw2AkAgBCACOgBMIAQgCDoAPEHRzsUALQAAGkEEQQQQ1gQiIEUNASAgQQE2AgBB0c7FAC0AABogBEHgAGpBqMzCACkCACI4NwMAIARB8ABqIDg3AwAgBEGgzMIAKQIAIjg3A1ggBCA4NwNoQQRBBBDWBCICRQ0CIAJBATYCACAEQZABakGozMIAKQIANwIAIARBAjoAhAEgBEEBNgKAASAEIAI2AnwgBEEBNgJ4IARBoMzCACkCADcCiAEgBEHAAWoiAiABEOUCIARBwAJqIgMgAUEQaiIJEOUCIARBgARqIgggAiADEJoBIARBgANqIgIgASAJEJcCIARBnAFqIAggAhCUASAEKALAAiIBBEAgBCgCxAIgAUECdBDfBAsgBCgCwAEiAQRAIAQoAsQBIAFBAnQQ3wQLIAQtAKgBRQ0EIARBQGshMSAEQegAaiEtIARBiAFqIS4gBEGsAWogBEGcAWoQqAMgBEGgnAE2ArwBIARB5QBqITIgBEHNAmohMyAEQaADaiEpIARBsAJqITQgBEHQAmohNSAEQZADaiEhIARBkAJqITYgBEHQAWohG0KAgICAECE8QQQhIkEAIRRCgICAgBAhOUEEISNCgICAgBAhOEEEISRBACERQQIhCEEBIQpBASEcQQAhFQNAIARBwAFqIgEgBEEwaiICEOUCIARBwAJqIgMgMRDlAiAEQYAEaiIJIAEgAxCaASAEQYADaiIBIAIgMRCXAiAEQfADaiAJIAEQlAEgBCgCwAIiAQRAIAQoAsQCIAFBAnQQ3wQLIAQoAsABIgEEQCAEKALEASABQQJ0EN8ECwJAAn8CQAJAIAQtAPwDIgEgBC0AuAEiAkYEQCABQQFrDgIEAgELIAEgAkogASACSGsMAgsgBCgCtAEiASAEKAL4AyICRgRAIAQoArABQQRrIQMgBCgC9ANBBGshCSABQQJ0IQwCQANAIAxFDQEgCSAMaiECIAMgDGogDEEEayEMKAIAIgEgAigCACICRg0ACyABIAJLIAEgAklrDAMLQX9BACAMGwwCCyABIAJLIAEgAklrDAELIAQoAvgDIgEgBCgCtAEiAkYEQCAEKAL0A0EEayEDIAQoArABQQRrIQkgAUECdCEMAkADQCAMRQ0BIAkgDGohAiADIAxqIAxBBGshDCgCACIBIAIoAgAiAkYNAAsgASACSyABIAJJawwCC0F/QQAgDBsMAQsgASACSyABIAJJawtBAE4NACAEKALwAyIBRQ0FIAQoAvQDIAFBAnQQ3wQMBQsgBCgC8AMiAQRAIAQoAvQDIAFBAnQQ3wQLAkAgFUGhnAFHBEAgBC0APEEBRgRAIAQtAExBAUYNBwsgBEGAA2ohFyAEQRBqISVBACEZQQAhA0IAITpCACE7QQAhCUEAIQtBACEMQQAhEkEAIRNCACE9QgAhPiMAQbADayIFJAACQAJAAkACQCAEQTBqIhgtAAxBAUYgGC0AHCINQQFGcUUEQCAFQcABaiIBIBgQ5QIgBUHgAWoiAiAYQRBqIhoQ5QIgBUGQAWoiByABIAIQmgEgBUGAAmoiASAYIBoQlwIgBSAHIAEQlAEgBSgC4AEiAQRAIAUoAuQBIAFBAnQQ3wQLIAUoAsABIgEEQCAFKALEASABQQJ0EN8ECyAFQeABaiAYIBoQkgEgGCgCGCICQQJ0IQFBACEHAn8gAkH/////A0sgAUH8////B0tyDQQgGCgCFCEPAn8gAUUEQEEEIQ5BAAwBC0HRzsUALQAAGkEEIQcgAUEEENYEIg5FDQUgAgshByABBEAgDiAPIAH8CgAACyAFQYgCaiAFQegBaikCADcDACAFIAI2ApgCIAUgDjYClAIgBSAHNgKQAiAFQQIgDWs6AJwCIAUgBSkC4AE3A4ACIAVBwAFqIgIgJSAFQYACaiIPEJcCIAVB4AFqIgEgJUEQaiIqIAVBkAJqIg0QlwIgBUEQaiACIAEQlAEgAiAlIA0QlwIgASAqIA8QlwIgBUGQAWoiDyACIAEQrgEgASAqIA0QlwIgBUEgaiICIA8gARCUASAFKAKAAiIBBEAgBSgChAIgAUECdBDfBAsgBwRAIA4gB0ECdBDfBAsgBUEwaiAFQRBqIAUQhAEgBUFAayACIAUQhAEgBSgCOCIQQQJ0IQECQAJAIBBB/////wNLIAFB/P///wdLcg0AIAUoAjQhDyAFLQA8IR0CfyABRQRAQQQhB0EADAELQdHOxQAtAAAaQQQhGSABQQQQ1gQiB0UNASAQCyEZIAEEQCAHIA8gAfwKAAALIAUoAkgiFkECdCEBQQAhAgJAIBZB/////wNLIAFB/P///wdLcg0AIAUoAkQhDSAFLQBMIR8CfyABRQRAQQQhDkEADAELQdHOxQAtAAAaQQQhAiABQQQQ1gQiDkUNASAWCyECIAEEQCAOIA0gAfwKAAALIAUgHzoAbCAFIBY2AmggBSAONgJkIAUgAjYCYCAFIB06AFwgBSAQNgJYIAUgBzYCVCAFIBk2AlAgBUHgAWoiAiAFQdAAaiIOIBgQlwIgBUGAAmoiASAFQeAAaiIHIBoQlwIgBUHwAGoiECACIAEQlAEgAiAOIBoQlwIgASAHIBgQlwIgBUHAAWoiDiACIAEQrgEgASAHIBoQlwIgBUGAAWoiAiAOIAEQlAEgBUGQAWogJSAQEJIBIAVBoAFqIh8gKiACEJIBIAVBkAJqIS8gBUHwAWohNyAFQdABaiEdAkACQANAIAVBwAFqIgEgBUGQAWoiAhDlAiAFQeABaiIHIB8Q5QIgBUGgA2oiDiABIAcQmgEgBUGAAmoiASACIB8QlwIgBUGQA2ogDiABEJQBIAUoAuABIgEEQCAFKALkASABQQJ0EN8ECyAFKALAASIBBEAgBSgCxAEgAUECdBDfBAsCQAJ/AkACQCAFLQCcAyIBIAUtAAwiAkYEQCABQQFrDgIEAgELIAEgAkogASACSGsMAgsgBSgCCCIBIAUoApgDIgJGBEAgBSgCBEEEayEOIAUoApQDQQRrIRAgAUECdCEHAkADQCAHRQ0BIAcgEGohAiAHIA5qIAdBBGshBygCACIBIAIoAgAiAkYNAAsgASACSyABIAJJawwDC0F/QQAgBxsMAgsgASACSyABIAJJawwBCyAFKAKYAyIBIAUoAggiAkYEQCAFKAKUA0EEayEOIAUoAgRBBGshECABQQJ0IQcCQANAIAdFDQEgByAQaiECIAcgDmogB0EEayEHKAIAIgEgAigCACICRg0ACyABIAJLIAEgAklrDAILQX9BACAHGwwBCyABIAJLIAEgAklrC0EATg0AIAUoApADIgEEQCAFKAKUAyABQQJ0EN8ECyAXIAUpAlA3AgAgF0EgaiAFKQKQATcCACAXQQhqIAVB2ABqKQIANwIAIBdBEGogBUHgAGopAgA3AgAgF0EYaiAFQegAaikCADcCACAXQShqIAVBmAFqKQIANwIAIBdBMGogBUGgAWopAgA3AgAgF0E4aiAFQagBaikCADcCACAFKAJwIgEEQCAFKAJ0IAFBAnQQ3wQLIAUoAoABIgEEQCAFKAKEASABQQJ0EN8ECyAFKAJAIgEEQCANIAFBAnQQ3wQLIAUoAjAiAQRAIA8gAUECdBDfBAsgBSgCECIBBEAgBSgCFCABQQJ0EN8ECyAFKAIgIgEEQCAFKAIkIAFBAnQQ3wQLIAUoAgAiAUUNCSAFKAIEIAFBAnQQ3wQMCQsgBSgCkAMiAQRAIAUoApQDIAFBAnQQ3wQLIAVBwAFqIgEgBUGQAWoiAhDlAiAFQeABaiIHIB8Q5QIgBUGgA2oiDSABIAcQmgEgBUGAAmoiASACIB8QlwIgBUGwAWogDSABEJQBIAUoAuABIgEEQCAFKALkASABQQJ0EN8ECyAFKALAASIBBEAgBSgCxAEgAUECdBDfBAtBgICAgHghAkGAgICAeCEBQQAhGQNAIAUoAjgiDkECdCEHIA5B/////wNLIAdB/P///wdLcg0GIBlBxNvCAGooAgAhDyAFKAI0IRAgBS0APCEWAn8gB0UEQEEEIQ1BAAwBC0HRzsUALQAAGkEEIAdBBBDWBCINRQ0IGiAOCyEwIAcEQCANIBAgB/wKAAALIAUgFjoAjAIgBSAONgKIAiAFIA02AoQCIAUgMDYCgAICQCAPQQBIBEAgBUGgA2ogBUGAAmpBACAPaxDTAQwBCyAFQaADaiAFQYACaiAPEL0BCyAFKAJIIg9BAnQhDkEAIQcCQAJAAkAgD0H/////A0sgDkH8////B0tyDQAgGUHI28IAaigCACEQIAUoAkQhFiAFLQBMITACfyAORQRAQQQhDUEADAELQdHOxQAtAAAaQQQhByAOQQQQ1gQiDUUNASAPCyEHIA4EQCANIBYgDvwKAAALIAUgMDoAjAIgBSAPNgKIAiAFIA02AoQCIAUgBzYCgAICQCAQQQBIBEAgBUHgAWogBUGAAmpBACAQaxDTAQwBCyAFQeABaiAFQYACaiAQEL0BCyAdIAUpAuABNwIAIAVByAFqIAVBqANqKQIANwMAIB1BCGogBUHoAWopAgA3AgAgBSAFKQKgAzcDwAEgBUGgA2oiDSAFQcABaiIOIBgQlwIgBUGAAmoiByAdIBoQlwIgBUHgAWoiDyANIAcQlAEgDSAOIBoQlwIgByAdIBgQlwIgBUGQA2oiDiANIAcQrgEgByAdIBoQlwIgNyAOIAcQlAEgByAlIA8QkgEgLyAqIDcQkgEgBUGAA2oiDyAHEOUCIA4gLxDlAiAFQfACaiIQIA8gDhCaASANIAcgLxCXAiAFQaACaiAQIA0QlAEgBSgCkAMiBwRAIAUoApQDIAdBAnQQ3wQLIAUoAoADIgcEQCAFKAKEAyAHQQJ0EN8ECwJAIAUtAKwCIgcgBS0AvAEiDUYEQAJAAkACQCAHQQFrDgIGAQALIAUoArgBIgcgBSgCqAIiDUYEQCAFKAK0AUEEayENIAUoAqQCQQRrIQ4gB0ECdCEHA0AgB0UNAyAHIA5qIQ8gByANaiAHQQRrIQcoAgAiECAPKAIAIg9GDQALIA8gEE0NBgwECyAHIA1PDQUMAwsgBSgCqAIiByAFKAK4ASINRgRAIAUoAqQCQQRrIQ0gBSgCtAFBBGshDiAHQQJ0IQcCQANAIAdFDQEgByAOaiEPIAcgDWogB0EEayEHKAIAIhAgDygCACIPRg0ACyAPIBBNDQYMBAsgB0UNBQwDCyAHIA1PDQQMAgsgBw0BDAMLIAcgDU8NAgsgBSkD2AEhOiAFKALUASAFKALQASENIAUpA8gBITsgBSgCxAEhDiAFKALAASEPAkAgAUGAgICAeEYNACABBEAgAyABQQJ0EN8ECyAJRQ0AIAsgCUECdBDfBAsgBSkCmAIhPSAFKAKUAiEQIAUoApACIRYgBSkCiAIhPiAFKAKEAiAFKAKAAiEDAkAgAkGAgICAeEYNACACBEAgEiACQQJ0EN8ECyAMRQ0AIBMgDEECdBDfBAsgBSgCsAEiAgRAIAUoArQBIAJBAnQQ3wQLIAVBuAFqIAVBqAJqKQIANwMAIAUgBSkCoAI3A7ABIAUoAuABIgIEQCAFKALkASACQQJ0EN8ECyAFKALwASICBEAgBSgC9AEgAkECdBDfBAshEiADIQIhCyANIQkgDiEDIA8hASAWIQwgECETDAILIAcgDkH4gcAAEMgEAAsgBSgCoAIiBwRAIAUoAqQCIAdBAnQQ3wQLIAUoAoACIgcEQCAFKAKEAiAHQQJ0EN8ECyAFKAKQAiIHBEAgBSgClAIgB0ECdBDfBAsgBSgC4AEiBwRAIAUoAuQBIAdBAnQQ3wQLIAUoAvABIgcEQCAFKAL0ASAHQQJ0EN8ECyAFKALAASIHBEAgBSgCxAEgB0ECdBDfBAsgBSgC0AEiB0UNACAFKALUASAHQQJ0EN8ECyAZQQhqIhlBMEcNAAsgAUGAgICAeEYNASAFKAJQIgcEQCAFKAJUIAdBAnQQ3wQLIAUoAmAiBwRAIAUoAmQgB0ECdBDfBAsgBSALNgJkIAUgCTYCYCAFIAM2AlQgBSABNgJQIAUgOjcCaCAFIDs3AlggAkGAgICAeEcEQCAFKAKQASIBBEAgBSgClAEgAUECdBDfBAsgBSgCoAEiAQRAIAUoAqQBIAFBAnQQ3wQLIAUgPTcCqAEgBSATNgKkASAFIAw2AqABIAUgPjcCmAEgBSASNgKUASAFIAI2ApABIDunIgJBAnQhAUEAIQcgAkH/////A0sgAUH8////B0tyDQsCfyABRQRAQQQhD0EADAELQdHOxQAtAAAaQQQhByABQQQQ1gQiD0UNDCACCyEHIAEEQCAPIAMgAfwKAAALIAUoAjAiAQRAIAUoAjQgAUECdBDfBAsgBSA7QiCIPAA8IAUgAjYCOCAFIA82AjQgBSAHNgIwIDqnIgJBAnQhAUEAIQcgAkH/////A0sgAUH8////B0tyDQMCfyABRQRAQQQhDUEADAELQdHOxQAtAAAaQQQhByABQQQQ1gQiDUUNBCACCyEHIAEEQCANIAsgAfwKAAALIAUoAkAiAQRAIAUoAkQgAUECdBDfBAsgBSA6QiCIPABMIAUgAjYCSCAFIA02AkQgBSAHNgJAIAUoArABIgFFDQEgBSgCtAEgAUECdBDfBAwBCwtByNzCABDoBAALQfTbwgBBG0G43MIAEOgDAAsMBwsMHAsgGSABQfiBwAAQyAQAC0EACyAHQfiBwAAQyAQAC0HRzsUALQAAGkEiQQEQ1gQiAUUNASAXQSI2AgwgFyABNgIIIBdCgICAgKgENwIAIAFBIGpB+NzCAC8AADsAACABQRhqQfDcwgApAAA3AAAgAUEQakHo3MIAKQAANwAAIAFBCGpB4NzCACkAADcAACABQdjcwgApAAA3AAALIAVBsANqJAAMAgtBAUEiQdTYwgAQyAQACyAHIAFB+IHAABDIBAALIAQoAoADQYCAgIB4Rw0BIAQoAoQDIgFFDQYgBCgCiAMgARDfBAwGCyAEQQM2AsQCIARB5N3CADYCwAIgBEIDNwLMAiAEIARBDGqtQoCAgIDAC4Q3A5ADIAQgBEEIaq1CgICAgMALhDcDiAMgBCAEQbwBaq1CgICAgNALhDcDgAMgBCAEQYADajYCyAIgHkEEaiAEQcACahDSAiAeQYCAgIB4NgIAIAQoAqwBIgFFDQcgBCgCsAEgAUECdBDfBAwHCyAEQdgBaiAEQZgDaikCADcDACAbICEpAgA3AwAgBEHIAWogBEGIA2opAgA3AwAgBEHoAWoiAyApQQhqKQIANwMAIARB8AFqIgkgKUEQaikCADcDACAEQfgBaiILIClBGGopAgA3AwAgBCAEKQKAAzcDwAEgBCApKQIANwPgASAEIAg6AMwCIAQgCjYCyAIgBCAgNgLEAiAEIBw2AsACIDMgBC8AVDsAACAzQQJqIARB1gBqIgwtAAA6AAAgBCA4NwLYAiAEICQ2AtQCIAQgETYC0AIgBEHwA2oiAiAEQcABaiIIIARB2ABqIgoQlwIgBEGABGoiASAbIC0QlwIgBEGAA2oiEiACIAEQlAEgAiAIIC0QlwIgASAbIAoQlwIgBEHgA2oiCCACIAEQrgEgASAbIC0QlwIgISAIIAEQlAEgBEGAAmogBEHAAmogEhCSASA2IDUgIRCSASAEKAKAAyIBBEAgBCgChAMgAUECdBDfBAsgBCgCkAMiAQRAIAQoApQDIAFBAnQQ3wQLIAQoAsACIgEEQCAEKALEAiABQQJ0EN8ECyAEKALQAiIBBEAgBCgC1AIgAUECdBDfBAsgBCA8NwLYAiAEICI2AtQCIAQgFDYC0AIgBCA5NwLIAiAEICM2AsQCIAQgJjYCwAIgBEHwA2oiAiAEQcABaiIIIARB+ABqIgoQlwIgBEGABGoiASAbIC4QlwIgBEGAA2oiEiACIAEQlAEgAiAIIC4QlwIgASAbIAoQlwIgBEHgA2oiCCACIAEQrgEgASAbIC4QlwIgISAIIAEQlAEgBEGgAmogBEHAAmogEhCSASA0IDUgIRCSASAEKAKAAyIBBEAgBCgChAMgAUECdBDfBAsgBCgCkAMiAQRAIAQoApQDIAFBAnQQ3wQLIAQoAsACIgEEQCAEKALEAiABQQJ0EN8ECyAEKALQAiIBBEAgBCgC1AIgAUECdBDfBAsgBEHoAmoiASAEQThqIgIpAgA3AwAgBEHwAmoiCCAEQUBrIgopAgA3AwAgBEH4AmoiEiAEQcgAaiITKQIANwMAIAQgBCkCMDcD4AIgBCgCECIHBEAgBCgCFCAHQQJ0EN8ECyAEKAIgIgcEQCAEKAIkIAdBAnQQ3wQLIARBKGogEikDADcDACAEQSBqIAgpAwA3AwAgBEEYaiABKQMANwMAIAIgAykDADcDACAKIAkpAwA3AwAgEyALKQMANwMAIAQgBCkD4AI3AxAgBCAEKQPgATcDMCAEQeAAaiIBKAIAIQogBCgCWCEcIAQoAlwhICAELQBkIQggDCAyQQJqLQAAOgAAIARB6ABqIgIoAgAhESAyLwAAIQMgBCgCbCEkIAIgNikCADcDACAEQfAAaiICKQMAITggAiAEQZgCaikCADcDACABIARBiAJqKQIANwMAIAQgAzsBVCAEIAQpAoACNwNYIARBgAFqIgEpAwAhOSAEQYgBaiICKAIAIRQgBEGQAWoiAykDACE8IAQoAnwhIyAEKAJ4ISYgBCgCjAEhIiADIARBuAJqKQIANwMAIAIgNCkCADcDACABIARBqAJqKQIANwMAIAQgBCkCoAI3A3ggBCgCwAEiAQRAIAQoAsQBIAFBAnQQ3wQLIAQoAtABIgEEQCAEKALUASABQQJ0EN8ECyAVQQFqIRUMAAsACyAUIANB+IHAABDIBAALQQRBBBD/BAALQQRBBBD/BAALIARBmANqIARByABqKQMANwMAIARBkANqIARBQGspAwA3AwAgBEGIA2ogBEE4aikDADcDACAEQagDaiAEQYABaikDADcDACAEQbADaiAEQYgBaikDADcDACAEQbgDaiAEQZABaikDADcDACAEQcgDaiAEQeAAaikDADcDACAEQdADaiAEQegAaikDADcDACAEQdgDaiAEQfAAaikDADcDACAEIAQpAzA3A4ADIAQgBCkDeDcDoAMgBCAEKQNYNwPAAyAeIARBgANqQeAA/AoAACAEKAKsASIBBEAgBCgCsAEgAUECdBDfBAsgBCgCnAEiAQRAIAQoAqABIAFBAnQQ3wQLICYEQCAjICZBAnQQ3wQLIBQEQCAiIBRBAnQQ3wQLIBwEQCAgIBxBAnQQ3wQLIBFFDQIgJCARQQJ0EN8EDAILQQAhFEHRzsUALQAAGkEBIRxBJEEBENYEIgFFDQIgHkEkNgIMIB4gATYCCCAeQoCAgIDIBDcCACABQSBqQZzewgAoAAA2AAAgAUEYakGU3sIAKQAANwAAIAFBEGpBjN7CACkAADcAACABQQhqQYTewgApAAA3AAAgAUH83cIAKQAANwAAQQQhIkEEISNBBCEkQQAhEQsgBCgCnAEiAQRAIAQoAqABIAFBAnQQ3wQLIAQoAngiAQRAIAQoAnwgAUECdBDfBAsgBCgCiAEiAQRAIAQoAowBIAFBAnQQ3wQLIAQoAlgiAQRAIAQoAlwgAUECdBDfBAsgBCgCaCIBBEAgBCgCbCABQQJ0EN8ECyAmBEAgIyAmQQJ0EN8ECyAUBEAgIiAUQQJ0EN8ECyAcBEAgICAcQQJ0EN8ECyARBEAgJCARQQJ0EN8ECyAEKAIwIgEEQCAEKAI0IAFBAnQQ3wQLIAQoAkAiAUUNACAEKAJEIAFBAnQQ3wQLIAQoAhAiAQRAIAQoAhQgAUECdBDfBAsgBCgCICIBBEAgBCgCJCABQQJ0EN8ECyAEQZAEaiQADAILQQFBJEHU2MIAEMgEAAsgFCARQfiBwAAQyAQACyAGLQB8IRIgBigCeCECIAYoAnQhDAJAIAYoAnAiE0GAgICAeEYEQCAGQeICaiAGQf8Aai0AACIBOgAAIAYgBi8AfSIDOwHgAiAAIBI6AAwgACACNgIIIAAgDDYCBCAAIAM7AA0gAEEPaiABOgAAIABBgICAgHg2AgAgBigCkAIiAARAIAYoApQCIABBAnQQ3wQLIAYoAqACIgAEQCAGKAKkAiAAQQJ0EN8ECyAnBEAgKyAnQQJ0EN8ECyAoBEAgLCAoQQJ0EN8ECyAGKAKAAiIABEAgBigChAIgAEECdBDfBAsgBigC4AEiAARAIAYoAuQBIABBAnQQ3wQLIAYoAvABIgBFDQEgBigC9AEgAEECdBDfBAwBCyAGKALEASEDIAYoAsABIQEgBi0ArAEhBCAGKAKoASEIIAYoAqQBIQcgBigCoAEhDSAGLQCcASEFIAYoApgBIQogBigClAEhDiAGKAKQASEPIAYtAIwBIREgBigCiAEhCyAGKAKEASEQIAYoAoABIRYgBigCsAEiCQRAIAYoArQBIAlBAnQQ3wQLIAEEQCADIAFBAnQQ3wQLQQAhAyACQf////8DSyACQQJ0IglB/P///wdLcg0GAn8gCUUEQEEEIQFBAAwBC0HRzsUALQAAGkEEIQMgCUEEENYEIgFFDQcgAgshAyAJBEAgASAMIAn8CgAACyAAIAI2AgggACABNgIEIAAgAzYCAEEAIQEgC0H/////A0sgC0ECdCICQfz///8HS3INBwJ/IAJFBEBBBCEDQQAMAQtB0c7FAC0AABpBBCEBIAJBBBDWBCIDRQ0IIAsLIQEgAgRAIAMgECAC/AoAAAsgACALNgIYIAAgAzYCFCAAIAE2AhBBACECIApB/////wNLIApBAnQiAUH8////B0tyDQgCfyABRQRAQQQhA0EADAELQdHOxQAtAAAaQQQhAiABQQQQ1gQiA0UNCSAKCyECIAEEQCADIA4gAfwKAAALIAAgCjYCKCAAIAM2AiQgACACNgIgQQAhAiAIQf////8DSyAIQQJ0IgFB/P///wdLcg0IAn8gAUUEQEEEIQNBAAwBC0HRzsUALQAAGkEEIQIgAUEEENYEIgNFDQkgCAshAiABBEAgAyAHIAH8CgAACyAAIAg2AjggACADNgI0IAAgAjYCMCAAIAQ6ADwgACAFOgAsIAAgEToAHCAAIBI6AAwgDwRAIA4gD0ECdBDfBAsgDQRAIAcgDUECdBDfBAsgEwRAIAwgE0ECdBDfBAsgFgRAIBAgFkECdBDfBAsgBigCkAIiAARAIAYoApQCIABBAnQQ3wQLIAYoAqACIgAEQCAGKAKkAiAAQQJ0EN8ECyAnBEAgKyAnQQJ0EN8ECyAoBEAgLCAoQQJ0EN8ECyAGKAKAAiIABEAgBigChAIgAEECdBDfBAsgBigC4AEiAARAIAYoAuQBIABBAnQQ3wQLIAYoAvABIgBFDQAgBigC9AEgAEECdBDfBAsgBhCmAwsgBkHwAmokAA8LIAggAUH4gcAAEMgEAAsgCyABQfiBwAAQyAQACyALIAFB+IHAABDIBAALIAEgAkH4gcAAEMgEAAsgAyAJQfiBwAAQyAQACyABIAJB+IHAABDIBAALIAIgAUH4gcAAEMgEAAuUJAIOfwN+IwBBkARrIgUkAAJAAkACQAJAIAMoAggiBkUEQEHRzsUALQAAGgwBCyAGrUIFhiADKAIEIAZBAnRqQQRrKAIAZ619QoAQVg0AQdHOxQAtAAAaAkACQCADKAIIDgICAAELIAMoAgQoAgBBAkkNAQsCQAJAAkAgASgCCCIGIAMoAggiB0YEQCAGQQJ0IQYgASgCBEEEayEKIAMoAgRBBGshCANAIAZFDQIgBiAIaiEMIAYgCmogBkEEayEGKAIAIgkgDCgCACIMRg0ACyAJIAxJDQMMAgsgBiAHTw0BDAILIAYNAQtB0c7FAC0AABpBI0EBENYEIgQEQCAAQSM2AgwgACAENgIIIABCgYCAgLAENwIAIARBH2pBwLPEACgAADYAACAEQRhqQbmzxAApAAA3AAAgBEEQakGxs8QAKQAANwAAIARBCGpBqbPEACkAADcAACAEQaGzxAApAAA3AAAMAwtBAUEjQayqxAAQyAQACwJAAkACQCAHIAIoAggiBkYEQCAHQQJ0IQYgAigCBEEEayEHIAMoAgRBBGshCgNAIAZFDQIgBiAKaiEIIAYgB2ogBkEEayEGKAIAIgwgCCgCACIIRg0ACyAIIAxNDQMMAgsgBiAHSQ0BDAILIAZFDQELQQAhBiAFQfgAakGMocQAKAIANgIAIAVBhKHEACkCADcDcCAFQfAAaiIHQeiixAAQpQMgBSgCdEGBgAQ2AgAgBUEIakEBNgIAIAUgBSkDcDcDACAHIAEgBSADEOMEIAUoAnQhByAFKAJ4IgogAigCCEYEQCAHIAIoAgQgCkECdBDxA0UhBgsgBSgCcCIKBEAgByAKQQJ0EN8ECyAGRQRAQdHOxQAtAAAaQTtBARDWBCIEBEAgAEE7NgIMIAAgBDYCCCAAQTs2AgQgBEE3akHzssQAKAAANgAAIARBMGpB7LLEACkAADcAACAEQShqQeSyxAApAAA3AAAgBEEgakHcssQAKQAANwAAIARBGGpB1LLEACkAADcAACAEQRBqQcyyxAApAAA3AAAgBEEIakHEssQAKQAANwAAIARBvLLEACkAADcAACAAQQE2AgAgBSgCACIARQ0EIAUoAgQgAEECdBDfBAwEC0EBQTtBrKrEABDIBAALIAEoAggiBkECdCEHQQAhCAJAAkACQAJAAkACQCAGQf////8DSyAHQfz///8HS3INACABKAIEIQkCfyAHRQRAQQQhCkEADAELQdHOxQAtAAAaQQQhCCAHQQQQ1gQiCkUNASAGCyEMIAcEQCAKIAkgB/wKAAALQdHOxQAtAAAaQZgDQQQQ1gQiB0UNASAFQQA2AhggBSAHNgIUIAVBETYCEEEQIQsDQAJAAkACQAJAIAYOAgABAgsgBUGIBGpBjKHEACgCADYCACAFQYShxAApAgA3A4AEDAILIAooAgAhB0HRzsUALQAAGkEEQQQQ1gQiBkUNBSAFQfgAaiIIQQE2AgAgBiAKKAIANgIAIAUgBjYCdCAFQQE2AnAgBUHwAGogBxCzAiAFQYgEaiAIKAIANgIAIAUgBSkCcDcDgAQMAQsgBUGABGogCiAGIAogBhDtAgsgBUHwAGogBUGABGogAxChASAFQTBqIg4gBUH4AGooAgA2AgAgBSAFKQJwNwMoIAUoAnwiBgRAIAUoAoABIAZBAnQQ3wQLIAVBHGogBUGABGogAxCKAiAFKAIkIgdBAnQhBkEAIQggB0H/////A0sgBkH8////B0tyDQQgBSgCICENAn8gBkUEQEEEIQlBAAwBC0HRzsUALQAAGkEEIQggBkEEENYEIglFDQUgBwshDyAGBEAgCSANIAb8CgAACyAFKAIYIgggBSgCEEYEQCAFQRBqQayyxAAQmQMLIAUoAhQgCEEYbGoiBiAFKQMoNwIAIAYgBzYCFCAGIAk2AhAgBiAPNgIMIAZBCGogDigCADYCACAFIAhBAWo2AhggDARAIAogDEECdBDfBAsgBSgCJCEGIAUoAiAhCiAFKAIcIQwgBSgCgAQiBwRAIAUoAoQEIAdBAnQQ3wQLIAtBAWsiCw0ACwJAAkAgBgRAIAEoAggiBw0BCyAFQUBrQYyhxAAoAgA2AgAgBUGEocQAKQIANwM4DAELIAEoAgQhCCAHQQFGBEAgCCgCACEGIAVB8ABqIgcgBUEcahC+AyAHIAYQswIgBUFAayAFQfgAaigCADYCACAFIAUpAnA3AzgMAQsgBkEBRgRAIAooAgAhBiAFQfAAaiIHIAEQvgMgByAGELMCIAVBQGsgBUH4AGooAgA2AgAgBSAFKQJwNwM4DAELIAVBOGogCiAGIAggBxDtAgsgBUHwAGogBUE4aiADEKEBIAVB0ABqIAVB+ABqKAIANgIAIAUgBSkCcDcDSCAFKAJ8IgYEQCAFKAKAASAGQQJ0EN8ECyAFQdQAaiAFQThqIAMQigIgBSgCGCIGIAUoAhBGBEAgBUEQakGMssQAEJkDCyAFKAIUIAZBGGxqIgcgBSkDSDcCACAHQQhqIAVB0ABqKQMANwIAIAdBEGogBUHYAGopAwA3AgAgBSAGQQFqNgIYIAVBADYCbCAFQoCAgIDAADcCZCAEDQQMBQsgCCAHQfiBwAAQyAQAC0EEQZgDQfyxxAAQyAQAC0EEQQRB+IHAABDIBAALIAggBkH4gcAAEMgEAAsgBUGABGohCEEAIQYjAEGgA2siBCQAIAQgAxCOAkHRzsUALQAAGgJAQaACQQQQ1gQiCwRAQeD2wAAoAgAhDSAEQZgDaiEOQdj2wAApAgAhFQNAIAQgBkEEdGoiBykDCCETIAcpAwAhFCAOIA02AgAgBCAVNwOQAyATIBSEUEUEQEEBIQdBACEJA0AgBCgCkAMgB0EBa0YEQCAEQZADakHc98AAEKUDCyAEKAKUAyAJaiAUPgIAIBRC/////w9WIBNCAFIgE1AgE0IghiAUQiCIhCEUIAlBBGohCSATQiCIIRMgBCAHNgKYAyAHQQFqIQcbDQALCyAEQYgDaiAOKAIAIgc2AgAgBCAEKQOQAyITNwOAAyALIAZBDGxqIglBCGogBzYCACAJIBM3AgAgBkEBaiIGQRhHDQALIAhBGDYCCCAIIAs2AgQgCEEYNgIAIARBoANqJAAMAQtBBEGgAkHsscQAEMgEAAsgBSAFKAKABDYCeCAFIAUoAoQEIgQ2AnAgBSAENgJ0IAUgBCAFKAKIBEEMbGo2AnwgBUHkAGogBUHwAGoQxwMLIAVB8ABqIAEQjgJB0c7FAC0AABoCQEGgAkEEENYEIggEQEEAIQRB4PbAACgCACELIAVBiARqIQlB2PbAACkCACEVA0AgBUHwAGogBEEEdGoiBikDCCETIAYpAwAhFCAJIAs2AgAgBSAVNwOABCATIBSEUEUEQEEBIQZBACEHA0AgBSgCgAQgBkEBa0YEQCAFQYAEakHc98AAEKUDCyAFKAKEBCAHaiAUPgIAIBRC/////w9WIBNCAFIgE1AgE0IghiAUQiCIhCEUIAdBBGohByATQiCIIRMgBSAGNgKIBCAGQQFqIQYbDQALCyAFQfgDaiAJKAIAIgY2AgAgBSAFKQOABCITNwPwAyAIIARBDGxqIgdBCGogBjYCACAHIBM3AgAgBEEBaiIEQRhHDQALIAUoAmQgBSgCbCIGa0EXTQRAIAVB5ABqIAZBGEEEQQwQiAMgBSgCbCEGCyAFKAJoIAZBDGxqIAhBoAL8CgAAIAUgBkEYajYCbCAIQaACEN8EIAVB8ABqIAIQjgJBACEEQdHOxQAtAAAaQaACQQQQ1gQiCEUNBkHg9sAAKAIAIQsgBUGIBGohCUHY9sAAKQIAIRUDQCAFQfAAaiAEQQR0aiIGKQMIIRMgBikDACEUIAkgCzYCACAFIBU3A4AEIBMgFIRQRQRAQQEhBkEAIQcDQCAFKAKABCAGQQFrRgRAIAVBgARqQdz3wAAQpQMLIAUoAoQEIAdqIBQ+AgAgFEL/////D1YgE0IAUiATUCATQiCGIBRCIIiEIRQgB0EEaiEHIBNCIIghEyAFIAY2AogEIAZBAWohBhsNAAsLIAVB+ANqIAkoAgAiBjYCACAFIAUpA4AEIhM3A/ADIAggBEEMbGoiB0EIaiAGNgIAIAcgEzcCACAEQQFqIgRBGEcNAAsgBSgCZCAFKAJsIgZrQRdNBEAgBUHkAGogBkEYQQRBDBCIAyAFKAJsIQYLIAUoAmggBkEMbGogCEGgAvwKAAAgBSAGQRhqNgJsIAhBoAIQ3wQgBSgCGCIEBEAgBSgCFCIIIARBGGxqIQ4gBUGIBGohCQNAIAVB8ABqIAgQjgJB0c7FAC0AABpBoAJBBBDWBCILRQ0IIAhBDGohDSAIQRhqIQhBACEEA0AgBUHwAGogBEEEdGoiBikDCCETIAYpAwAhFCAJQeD2wAAoAgAiDzYCACAFQdj2wAApAgAiFTcDgAQgEyAUhFBFBEBBASEGQQAhBwNAIAUoAoAEIAZBAWtGBEAgBUGABGpB3PfAABClAwsgBSgChAQgB2ogFD4CACAUQv////8PViATQgBSIBNQIBNCIIYgFEIgiIQhFCAHQQRqIQcgE0IgiCETIAUgBjYCiAQgBkEBaiEGGw0ACwsgBUH4A2oiECAJKAIAIgY2AgAgBSAFKQOABCITNwPwAyALIARBDGxqIgdBCGogBjYCACAHIBM3AgAgBEEBaiIEQRhHDQALIAUoAmQgBSgCbCIGa0EXTQRAIAVB5ABqIAZBGEEEQQwQiAMgBSgCbCEGCyAFKAJoIAZBDGxqIAtBoAL8CgAAIAUgBkEYajYCbCALQaACEN8EIAVB8ABqIA0QjgJB0c7FAC0AABpBoAJBBBDWBCILRQ0DQQAhBANAIAVB8ABqIARBBHRqIgYpAwghEyAGKQMAIRQgCSAPNgIAIAUgFTcDgAQgEyAUhFBFBEBBASEGQQAhBwNAIAUoAoAEIAZBAWtGBEAgBUGABGpB3PfAABClAwsgBSgChAQgB2ogFD4CACAUQv////8PViATQgBSIBNQIBNCIIYgFEIgiIQhFCAHQQRqIQcgE0IgiCETIAUgBjYCiAQgBkEBaiEGGw0ACwsgECAJKAIAIgY2AgAgBSAFKQOABCITNwPwAyALIARBDGxqIgdBCGogBjYCACAHIBM3AgAgBEEBaiIEQRhHDQALIAUoAmQgBSgCbCIGa0EXTQRAIAVB5ABqIAZBGEEEQQwQiAMgBSgCbCEGCyAFKAJoIAZBDGxqIAtBoAL8CgAAIAUgBkEYajYCbCALQaACEN8EIAggDkcNAAsLIAAgBSkCZDcCBCAAQQA2AgAgAEEMaiAFQewAaigCADYCACAFKAI4IgAEQCAFKAI8IABBAnQQ3wQLIAUoAhgiBwRAIAUoAhQhBgNAIAYoAgAiAARAIAZBBGooAgAgAEECdBDfBAsgBkEMaigCACIABEAgBkEQaigCACAAQQJ0EN8ECyAGQRhqIQYgB0EBayIHDQALCyAFKAIQIgAEQCAFKAIUIABBGGwQ3wQLIAwEQCAKIAxBAnQQ3wQLIAUoAgAiAEUNBCAFKAIEIABBAnQQ3wQMBAsMBQsMBAtB0c7FAC0AABpBKkEBENYEIgQEQCAAQSo2AgwgACAENgIIIABCgYCAgKAFNwIAIARBKGpBn7PEAC8AADsAACAEQSBqQZezxAApAAA3AAAgBEEYakGPs8QAKQAANwAAIARBEGpBh7PEACkAADcAACAEQQhqQf+yxAApAAA3AAAgBEH3ssQAKQAANwAADAILQQFBKkGsqsQAEMgEAAtB0c7FAC0AABpBN0EBENYEIgRFDQEgAEE3NgIMIAAgBDYCCCAAQoGAgIDwBjcCACAEQS9qQfOzxAApAAA3AAAgBEEoakHss8QAKQAANwAAIARBIGpB5LPEACkAADcAACAEQRhqQdyzxAApAAA3AAAgBEEQakHUs8QAKQAANwAAIARBCGpBzLPEACkAADcAACAEQcSzxAApAAA3AAALIAMoAgAiAARAIAMoAgQgAEECdBDfBAsgAigCACIABEAgAigCBCAAQQJ0EN8ECyABKAIAIgAEQCABKAIEIABBAnQQ3wQLIAVBkARqJAAPC0EBQTdBrKrEABDIBAALQQRBoAJB7LHEABDIBAAL0R4BDn8jAEHwHmsiAyQAIANBgBhqIgRBAEHgAPwLAAJAAkACQAJAAkACQAJAIAJBwAFqIgUgBEEwEPEDRQRAIAJB8AFqIANBsBhqQTAQ8QNFDQELIANBgBhqIgZBAEHgAPwLACABQcABaiIEIAZBMBDxA0UEQCABQfABaiADQbAYakEwEPEDRQ0CCyADIAJB4ABqIAQQPyADQeAAaiABQeAAaiIGIAUQPyADQcABaiIHIAIgBBA/IANBoAJqIgIgASAFED8gByACQTAQ8QNFBEAgA0HwAWogA0HQAmpBMBDxA0UNAwtBACIBRQRAIANBgBhqIANB4AD8CgAACyADQeAPaiADQYAYaiICIANB4ABqEI0BIAFFBEAgAiADQcABakHgAPwKAAALIANBwBBqIgIgA0GAGGoiBiADQaACaiIJEI0BIANBoBFqIgggBCAFED8gA0GAEmoiCiADQeAPaiIEIAQQPyADQeASaiIFIAIgAhA/IANBwBNqIgsgAiAFED8gA0GgFGoiByAFIAkQPyAGIAogCBA/IANBqBpqIgUgBiALEI0BIAYgByAHENUBIANBgBVqIgcgBSAGEI0BIAUgAiAHED8gAUUEQCADQcAWaiAEQeAA/AoAAAsgAUUEQCADQYAYaiADQYAVakHgAPwKAAALIANBoBdqIgIgA0GgFGogA0GAGGoiBBCNASADQeAVaiADQcAWaiACED8gAUUEQCAEIANB4ABqQeAA/AoAAAsgA0GgF2oiAiADQcATaiADQYAYaiIEED8gA0GIG2ogA0HgFWogAhCNASABRQRAIAQgA0GgEWpB4AD8CgAACyADQegbaiADQcATaiADQYAYaiIBED8gASADQagaahCvAiADKAKAGEUNA0GQjcUAQSsgA0HvHmpBgI3FAEHAksUAEMoDAAsgA0HwHGogAUEoaikDADcDACADQegcaiABQSBqKQMANwMAIANB4BxqIAFBGGopAwA3AwAgA0HYHGogAUEQaikDADcDACADQdAcaiABQQhqKQMANwMAIANBgB1qIAFBOGopAwA3AwAgA0GIHWogAUFAaykDADcDACADQZAdaiABQcgAaikDADcDACADQZgdaiABQdAAaikDADcDACADQaAdaiABQdgAaikDADcDACADIAEpAwA3A8gcIAMgASkDMDcD+BxBACICRQRAIANBgANqIANByBxqQeAA/AoAAAsgA0GoGGoiBCABQYgBaikDADcDACADQaAYaiIGIAFBgAFqKQMANwMAIANBmBhqIgUgAUH4AGopAwA3AwAgA0GQGGoiByABQfAAaikDADcDACADQYgYaiIJIAFB6ABqKQMANwMAIANBuBhqIgggAUGYAWopAwA3AwAgA0HAGGoiCiABQaABaikDADcDACADQcgYaiILIAFBqAFqKQMANwMAIANB0BhqIgwgAUGwAWopAwA3AwAgA0HYGGoiDSABQbgBaikDADcDACADIAEpA2A3A4AYIAMgASkDkAE3A7AYIAJFBEAgA0HIHGogA0GAGGpB4AD8CgAACyACRQRAIANB4ANqIANByBxqQeAA/AoAAAsgBCABQegBaikDADcDACAGIAFB4AFqKQMANwMAIAUgAUHYAWopAwA3AwAgByABQdABaikDADcDACAJIAFByAFqKQMANwMAIAggAUH4AWopAwA3AwAgCiABQYACaikDADcDACALIAFBiAJqKQMANwMAIAwgAUGQAmopAwA3AwAgDSABQZgCaikDADcDACADIAEpA8ABNwOAGCADIAEpA/ABNwOwGCACRQRAIANByBxqIANBgBhqQeAA/AoAAAsgAkUEQCADQcAEaiADQcgcakHgAPwKAAALIAAgA0GAA2pBoAL8CgAADAQLIANB0B1qIAJBKGopAwA3AwAgA0HIHWogAkEgaikDADcDACADQcAdaiACQRhqKQMANwMAIANBuB1qIAJBEGopAwA3AwAgA0GwHWogAkEIaikDADcDACADQeAdaiACQThqKQMANwMAIANB6B1qIAJBQGspAwA3AwAgA0HwHWogAkHIAGopAwA3AwAgA0H4HWogAkHQAGopAwA3AwAgA0GAHmogAkHYAGopAwA3AwAgAyACKQMANwOoHSADIAIpAzA3A9gdQQAiAUUEQCADQaAFaiADQagdakHgAPwKAAALIANBqBhqIgQgAkGIAWopAwA3AwAgA0GgGGoiBiACQYABaikDADcDACADQZgYaiIHIAJB+ABqKQMANwMAIANBkBhqIgkgAkHwAGopAwA3AwAgA0GIGGoiCCACQegAaikDADcDACADQbgYaiIKIAJBmAFqKQMANwMAIANBwBhqIgsgAkGgAWopAwA3AwAgA0HIGGoiDCACQagBaikDADcDACADQdAYaiINIAJBsAFqKQMANwMAIANB2BhqIg4gAkG4AWopAwA3AwAgAyACKQNgNwOAGCADIAIpA5ABNwOwGCABRQRAIANBqB1qIANBgBhqQeAA/AoAAAsgAUUEQCADQYAGaiADQagdakHgAPwKAAALIAQgBUEoaikDADcDACAGIAVBIGopAwA3AwAgByAFQRhqKQMANwMAIAkgBUEQaikDADcDACAIIAVBCGopAwA3AwAgCiACQfgBaikDADcDACALIAJBgAJqKQMANwMAIAwgAkGIAmopAwA3AwAgDSACQZACaikDADcDACAOIAJBmAJqKQMANwMAIAMgBSkDADcDgBggAyACKQPwATcDsBggAUUEQCADQagdaiADQYAYakHgAPwKAAALIAFFBEAgA0HgBmogA0GoHWpB4AD8CgAACyAAIANBoAVqQaAC/AoAAAwDCwJAIAMgA0HgAGpBMBDxAw0AIANBMGogA0GQAWpBMBDxAw0AIANBgBhqIgJBAEHgAPwLACAGIAJBMBDxAw0CIAFBkAFqIANBsBhqQTAQ8QMNAgtBACIBRQRAIANBqBpqQQBB4AD8CwALIANB2BdqQgA3AwAgA0HgF2pCADcDACADQegXakIANwMAIANB8BdqQgA3AwAgA0H4F2pCADcDACADQcgXakGgkcUAKQMANwMAIANBwBdqQZiRxQApAwA3AwAgA0G4F2pBkJHFACkDADcDACADQbAXakGIkcUAKQMANwMAIANBqBdqQYCRxQApAwA3AwAgA0IANwPQFyADQfiQxQApAwA3A6AXIAFFBEAgA0HoG2pBAEHgAPwLAAsgAUUEQCADQYgbaiADQaAXakHgAPwKAAALIANBgBhqIANBqBpqEK8CIAMoAoAYQQFGDQMgACADQYgYakGgAvwKAAAMAgsgACADQYgYakGgAvwKAAAMAQsgA0GAGGoiAkEAQeAA/AsAAkACQCAEIAJBMBDxA0UEQCABQfABaiICIANBsBhqQTAQ8QNFDQELIANBwAdqIgIgASABED8gA0GAGGoiBSACIAIQ1QEgA0GgCGogBSACENUBQQAiAkUEQCAFQQBB4AD8CwALIANBqBpqIgkgA0GAGGoiBSAEED8gBSAJIAQQPyADQYAJaiIHIAUgA0GgCGoQ1QEgA0HgCWoiCyAHIAcQPyADQcAKaiIHIAYgBBA/IANBoAtqIgQgByAHED8gA0GADGoiCCAHIAQQPyADQeAMaiIKIAggCBDVASADQcANaiIIIAogChDVASADQaAOaiAIIAgQ1QEgBSABIAYQPyADQYAPaiIBIAUgBxA/IANB4A9qIgggASABENUBIANBwBBqIgEgCCAIENUBIANBoBFqIgggASABENUBIANBgBJqIgEgCyAIEI0BIANB4BJqIAEgBxA/IAkgBiAGED8gAkUEQCAFIARB4AD8CgAACyADQcATaiIBIANBqBpqIgUgA0GAGGoQPyADQaAUaiIEIAEgARDVASADQYAVaiIBIAQgBBDVASADQeAVaiABIAEQ1QEgBSADQeASaiIBIAEQ1QEgAkUEQCADQcAWaiADQYAJakHgAPwKAAALIAJFBEAgA0GAGGogA0HAEGpB4AD8CgAACyADQaAXaiIEIANBgBhqIgEgA0GAEmoQjQEgASADQcAWaiAEED8gA0GIG2ogASADQeAVahCNASACRQRAIANB6BtqIANBoA5qQeAA/AoAAAsgA0GAGGogA0GoGmoQrwIgAygCgBhFDQFBkI3FAEErIANB7x5qQYCNxQBBoJLFABDKAwALIANBsB5qIAFBKGopAwA3AwAgA0GoHmogAUEgaikDADcDACADQaAeaiABQRhqKQMANwMAIANBmB5qIAFBEGopAwA3AwAgA0GQHmogAUEIaikDADcDACADQcAeaiABQThqKQMANwMAIANByB5qIAFBQGspAwA3AwAgA0HQHmogAUHIAGopAwA3AwAgA0HYHmogAUHQAGopAwA3AwAgA0HgHmogAUHYAGopAwA3AwAgAyABKQMANwOIHiADIAEpAzA3A7geQQAiBUUEQCADQYAYaiADQYgeakHgAPwKAAALIANB0BpqIgcgBkEoaikDADcDACADQcgaaiIJIAZBIGopAwA3AwAgA0HAGmoiCCAGQRhqKQMANwMAIANBuBpqIgogBkEQaikDADcDACADQbAaaiILIAZBCGopAwA3AwAgA0HgGmoiDCABQZgBaikDADcDACADQegaaiINIAFBoAFqKQMANwMAIANB8BpqIg4gAUGoAWopAwA3AwAgA0H4GmoiDyABQbABaikDADcDACADQYAbaiIQIAFBuAFqKQMANwMAIAMgBikDADcDqBogAyABKQOQATcD2BogBUUEQCADQYgeaiADQagaakHgAPwKAAALIAVFBEAgA0HgGGogA0GIHmpB4AD8CgAACyAHIARBKGopAwA3AwAgCSAEQSBqKQMANwMAIAggBEEYaikDADcDACAKIARBEGopAwA3AwAgCyAEQQhqKQMANwMAIAwgAkEIaikDADcDACANIAJBEGopAwA3AwAgDiACQRhqKQMANwMAIA8gAkEgaikDADcDACAQIAJBKGopAwA3AwAgAyAEKQMANwOoGiADIAIpAwA3A9gaIAVFBEAgA0GIHmogA0GoGmpB4AD8CgAACyAFRQRAIANBwBlqIANBiB5qQeAA/AoAAAsgACADQYAYakGgAvwKAAAMAQsgACADQYgYakGgAvwKAAALIANB8B5qJAAPC0GQjcUAQSsgA0HvHmpBgI3FAEGwksUAEMoDAAvqIQIPfxx+IwBBsAJrIgMkACADQQA2AgggA0KAgICAgAE3AgAgA0EANgIUIANCgICAgIABNwIMAkACQAJAIAJFDQAgAUEwaiIEQdizwgBBMBDxA0UNAiABIAJB6ABsaiEIIANBQGshBSADQZACaiEJIANByABqIQZBkLPCACkDACEiQYizwgApAwAhI0GAs8IAKQMAISRB+LLCACkDACElQfCywgApAwAhJkHossIAKQMAISdBsLTCACkDACEoQai0wgApAwAhKUGgtMIAKQMAISpBmLTCACkDACErQZC0wgApAwAhLEGItMIAKQMAIS0DQCADQZABakIANwMAIANBiAFqQgA3AwAgA0GAAWpCADcDACADQfgAakIANwMAIANCADcDcCADQgE3A5gBIANByAFqIARBKGopAwA3AwAgA0HAAWogBEEgaikDADcDACADQbgBaiAEQRhqKQMANwMAIANBsAFqIARBEGopAwA3AwAgA0GoAWogBEEIaikDADcDACADIAQpAwA3A6ABIANB+AFqICI3AwAgA0HwAWogIzcDACADQegBaiAkNwMAIANB4AFqICU3AwAgA0HYAWogJjcDACADICc3A9ABIANBqAJqIgogKDcDACADQaACaiILICk3AwAgA0GYAmoiDCAqNwMAIANBkAJqIg0gKzcDACADQYgCaiIOICw3AwAgAyAtNwOAAiADQeAAakIANwMAIANB2ABqQgA3AwAgA0HQAGpCADcDACADQcgAakIANwMAIAVCADcDACADQgA3AzggA0EwaiIPAn8CQCADQaABaiADQfAAakEwEPEDRQRAQq2q5qjb0M+8mn8hEkKqx6uW2fyjzBEhHwwBCyADQdABaiADQfAAakEwEPEDRQRAQgAhH0IAIRIgBgwCC0Kr1f7///+//7l/IRcDQCADLQDIAUEBcUUEQANAIANBoAFqEL8CIAMpA6gCIhJCAYNQRQRAIAMpA6ACIRMgAyASQtWqgYCAgMCAxgB9IhQ3A6gCIAMgE0L//8+K6///1R58IhUgEiAUVq18IhQ3A6ACIAMgAykDmAIiFkKk7MO1j9S0mOcAfCISIBQgFVQgEyAVVnKtfCIVNwOYAiADIAMpA5ACIhRCv6WUnM/w0rvkAHwiEyASIBZUIBIgFVZyrXwiFTcD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AwA3AwAgA0GIGGoiCSABQegAaikDADcDACADQbgYaiIIIAFBmAFqKQMANwMAIANBwBhqIgogAUGgAWopAwA3AwAgA0HIGGoiCyABQagBaikDADcDACADQdAYaiIMIAFBsAFqKQMANwMAIANB2BhqIg0gAUG4AWopAwA3AwAgAyABKQNgNwOAGCADIAEpA5ABNwOwGCACRQRAIANByBxqIANBgBhqQeAA/AoAAAsgAkUEQCADQeADaiADQcgcakHgAPwKAAALIAQgAUHoAWopAwA3AwAgByABQeABaikDADcDACAFIAFB2AFqKQMANwMAIAYgAUHQAWopAwA3AwAgCSABQcgBaikDADcDACAIIAFB+AFqKQMANwMAIAogAUGAAmopAwA3AwAgCyABQYgCaikDADcDACAMIAFBkAJqKQMANwMAIA0gAUGYAmopAwA3AwAgAyABKQPAATcDgBggAyABKQPwATcDsBggAkUEQCADQcgcaiADQYAYakHgAPwKAAALIAJFBEAgA0HABGogA0HIHGpB4AD8CgAACyAAIANBgANqQaAC/AoAAAwDCyADQdAdaiACQShqKQMANwMAIANByB1qIAJBIGopAwA3AwAgA0HAHWogAkEYaikDADcDACADQbgdaiACQRBqKQMANwMAIANBsB1qIAJBCGopAwA3AwAgA0HgHWogAkE4aikDADcDACADQegdaiACQUBrKQMANwMAIANB8B1qIAJByABqKQMANwMAIANB+B1qIAJB0ABqKQMANwMAIANBgB5qIAJB2ABqKQMANwMAIAMgAikDADcDqB0gAyACKQMwNwPYHUEAIgFFBEAgA0GgBWogA0GoHWpB4AD8CgAACyADQagYaiIEIAJBiAFqKQMANwMAIANBoBhqIgcgAkGAAWopAwA3AwAgA0GYGGoiBiACQfgAaikDADcDACADQZAYaiIJIAJB8ABqKQMANwMAIANBiBhqIgggAkHoAGopAwA3AwAgA0G4GGoiCiACQZgBaikDADcDACADQcAYaiILIAJBoAFqKQMANwMAIANByBhqIgwgAkGoAWopAwA3AwAgA0HQGGoiDSACQbABaikDADcDACADQdgYaiIOIAJBuAFqKQMANwMAIAMgAikDYDcDgBggAyACKQOQATcDsBggAUUEQCADQagdaiADQYAYakHgAPwKAAALIAFFBEAgA0GABmogA0GoHWpB4AD8CgAACyAEIAVBKGopAwA3AwAgByAFQSBqKQMANwMAIAYgBUEYaikDADcDACAJIAVBEGopAwA3AwAgCCAFQQhqKQMANwMAIAogAkH4AWopAwA3AwAgCyACQYACaikDADcDACAMIAJBiAJqKQMANwMAIA0gAkGQAmopAwA3AwAgDiACQZgCaikDADcDACADIAUpAwA3A4AYIAMgAikD8AE3A7AYIAFFBEAgA0GoHWogA0GAGGpB4AD8CgAACyABRQRAIANB4AZqIANBqB1qQeAA/AoAAAsgACADQaAFakGgAvwKAAAMAgsgACADQYgYakGgAvwKAAAMAQsCQCADIANB4ABqEKYEBEAgA0GAGGoiAkEAQeAA/AsAIAcgAhCmBEUNAQtBACIBRQRAIANBqBpqQQBB4AD8CwALIANB2BdqQgA3AwAgA0HgF2pCADcDACADQegXakIANwMAIANB8BdqQgA3AwAgA0H4F2pCADcDACADQcgXakHgtMIAKQMANwMAIANBwBdqQdi0wgApAwA3AwAgA0G4F2pB0LTCACkDADcDACADQbAXakHItMIAKQMANwMAIANBqBdqQcC0wgApAwA3AwAgA0IANwPQFyADQbi0wgApAwA3A6AXIAFFBEAgA0HoG2pBAEHgAPwLAAsgAUUEQCADQYgbaiADQaAXakHgAPwKAAALIANBgBhqIANBqBpqEJkCIAMoAoAYQQFGDQIgACADQYgYakGgAvwKAAAMAQsgA0GAGGoiBUEAQeAA/AsAAkAgBCAFEKYERQRAIANBwAdqIgIgASABED8gBSACIAIQ1QEgA0GgCGogBSACENUBQQAiAkUEQCAFQQBB4AD8CwALIANBqBpqIgkgA0GAGGoiBSAEED8gBSAJIAQQPyADQYAJaiIGIAUgA0GgCGoQ1QEgA0HgCWoiCyAGIAYQPyADQcAKaiIGIAcgBBA/IANBoAtqIgQgBiAGED8gA0GADGoiCCAGIAQQPyADQeAMaiIKIAggCBDVASADQcANaiIIIAogChDVASADQaAOaiAIIAgQ1QEgBSABIAcQPyADQYAPaiIBIAUgBhA/IANB4A9qIgggASABENUBIANBwBBqIgEgCCAIENUBIANBoBFqIgggASABENUBIANBgBJqIgEgCyAIEI0BIANB4BJqIAEgBhA/IAkgByAHED8gAkUEQCAFIARB4AD8CgAACyADQcATaiIBIANBqBpqIgcgA0GAGGoQPyADQaAUaiIEIAEgARDVASADQYAVaiIBIAQgBBDVASADQeAVaiABIAEQ1QEgByADQeASaiIBIAEQ1QEgAkUEQCADQcAWaiADQYAJakHgAPwKAAALIAJFBEAgA0GAGGogA0HAEGpB4AD8CgAACyADQaAXaiIEIANBgBhqIgEgA0GAEmoQjQEgASADQcAWaiAEED8gA0GIG2ogASADQeAVahCNASACRQRAIANB6BtqIANBoA5qQeAA/AoAAAsgA0GAGGogA0GoGmoQmQIgAygCgBhFDQFBoLHCAEErIANB7x5qQZCxwgBBiLXCABDKAwALIANBsB5qIAFBKGopAwA3AwAgA0GoHmogAUEgaikDADcDACADQaAeaiABQRhqKQMANwMAIANBmB5qIAFBEGopAwA3AwAgA0GQHmogAUEIaikDADcDACADQcAeaiABQThqKQMANwMAIANByB5qIAFBQGspAwA3AwAgA0HQHmogAUHIAGopAwA3AwAgA0HYHmogAUHQAGopAwA3AwAgA0HgHmogAUHYAGopAwA3AwAgAyABKQMANwOIHiADIAEpAzA3A7geQQAiAkUEQCADQYAYaiADQYgeakHgAPwKAAALIANB0BpqIgUgB0EoaikDADcDACADQcgaaiIGIAdBIGopAwA3AwAgA0HAGmoiCSAHQRhqKQMANwMAIANBuBpqIgggB0EQaikDADcDACADQbAaaiIKIAdBCGopAwA3AwAgA0HgGmoiCyABQZgBaikDADcDACADQegaaiIMIAFBoAFqKQMANwMAIANB8BpqIg0gAUGoAWopAwA3AwAgA0H4GmoiDiABQbABaikDADcDACADQYAbaiIPIAFBuAFqKQMANwMAIAMgBykDADcDqBogAyABKQOQATcD2BogAkUEQCADQYgeaiADQagaakHgAPwKAAALIAJFBEAgA0HgGGogA0GIHmpB4AD8CgAACyAFIARBKGopAwA3AwAgBiAEQSBqKQMANwMAIAkgBEEYaikDADcDACAIIARBEGopAwA3AwAgCiAEQQhqKQMANwMAIAsgAUH4AWopAwA3AwAgDCABQYACaikDADcDACANIAFBiAJqKQMANwMAIA4gAUGQAmop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QCAAIBQ3AzggACANNwMwIAAgDzcDKCAAIBY3AyAgAEHIAGpCADcDACAAQdAAakIANwMAIABB2ABqQgA3AwAgAEHgAGpCADcDACAAQegAakIANwMAIABB8ABqQgA3AwAgAEH4AGpCADcDACAAQgA3A+ADIABCADcDmAMgACAKNwO4ASAAIAg3A7ABIAAgBjcDqAEgACAONwOgASAAIBM3A5gBIAAgCTcDkAEgACALNwOIASAAIBA3A4ABIABBATYCqAQgAEIANwOAAiAAQgA3A4gCIABCADcDwAEgAEHIAWpCADcDACAAQdABakIANwMAIABC85aAgDA3A9gBIAAgBzcD8AEgACAMNwP4ASAAQgE3A6gCIABBtARqIAUoAgA2AgAgACABKQPABDcCrAQgAEGAscIAKQMANwPgASAAQegBakGIscIAKQMANwMAIABBAkEBIAQbOgCcAiAAQgA3A6ACIAAgAzoAlAIgAEIANwOwAiAAIAQ2ApgCIAAgAjYCkAIgAUHwBGokAA8LIAEgAS0A1AQ6AMAEQYz3wQBBKyABQcAEakHk+8EAQaj8wQAQygMACxDwAwALIAEgAzoA0ARBjPfBAEErIAFB0ARqQeT7wQBBmPzBABDKAwAL5SECE38BfiMAQZABayIDJAAgAyACNgIAIANBBjYCBBDjASEEAkACQCACQfylwABBBhDxAwRAQQEhAiADQQE2AmggA0HErMAANgJkIANCATcCcCADIAOtQoCAgICgAoQ3AwggAyADQQhqNgJsIABBBGogA0HkAGoQ0gIMAQsCQAJAAkACQAJAAkACQAJAAkACQCAEQYABakEDdiAEQQdxQQBHaiIGQYCAAkkEQEHRzsUALQAAGkErQQEQ1gQiAkUNASACQSdqIgVBl67AACgAADYAACACQSBqIghBkK7AACkAADcAACACQRhqIgdBiK7AACkAADcAACACQRBqIglBgK7AACkAADcAACACQQhqIgpB+K3AACkAADcAACACQfCtwAApAAA3AAAgA0ErNgIcIAMgAjYCGCADQoCAgICwBTcCECADQoCAgIAQNwIIIAMgBjYCICADQQA2AjAgA0KAgICAEDcCKCAGQQR2IAZBD3FBAEdqIg5BgAJPDQJB0c7FAC0AABpBASENQStBARDWBCIERQ0DIAQgAikAADcAACAEQSdqIAUoAAA2AAAgBEEgaiAIKQAANwAAIARBGGogBykAADcAACAEQRBqIAkpAAA3AAAgBEEIaiAKKQAANwAAIANBKzYCbCADIAQ2AmggA0ErNgJkIANB5ABqQfiuwAAQtgMgAygCaCIIQSs6ACsgAygCZCEPIAYEQEHRzsUALQAAGiAGQQEQ1wQiDUUNBQsCfyAGRQRAQQEhBEEAIQJBAAwBCyADQQhqQQAgBkEBQQEQiAMgAygCDCEEIAMoAhAhAiADKAIICyAGRSIQRQRAIAIgBGogDSAG/AoAAAsgAyACIAZqIgI2AhAgAmtBH00EQCADQQhqIAJBIEEBQQEQiAMgAygCDCEEIAMoAhAhAgsgAiAEaiIFIAEpAAA3AAAgBUEYaiABQRhqKQAANwAAIAVBEGogAUEQaikAADcAACAFQQhqIAFBCGopAAA3AAAgAyACQSBqIgI2AhBB0c7FAC0AABpBAkEBENYEIgFFDQUgASAGQQF0IglBCHQgCUGA/gNxQQh2cjsAACADQQI2AjwgAyABNgI4IANBAjYCNCADQTRqIgVBgLDAABC2AyADKAI4QQA6AAJBAyEBIANBAzYCPCADKAI0QS9rQVRPBEAgBUEDQSxBAUEBEIgDIAMoAjwhAQsgAygCOCIHIAFqIgUgCCkAADcAACAFQQhqIAhBCGopAAA3AAAgBUEQaiAIQRBqKQAANwAAIAVBGGogCEEYaikAADcAACAFQSBqIAhBIGopAAA3AAAgBUEoaiAIQShqKAAANgAAIAMgAUEsaiIBNgI8IAMoAgggAmsgAUkEQCADQQhqIAIgAUEBQQEQiAMgAygCDCEEIAMoAhAhAgsgAQRAIAIgBGogByAB/AoAAAsgAyABIAJqIgI2AhAgA0HkAGogBCACEOEBQQAhAUHRzsUALQAAGkEgQQEQ1gQiBUUNDCAFIAMpAGQ3AAAgBUEYaiADQfwAaikAADcAACAFQRBqIANB9ABqKQAANwAAIAVBCGogA0HsAGopAAA3AAAgAkEASA0GIAIEQEHRzsUALQAAGkEBIQEgAkEBENYEIgRFDQcgAyACNgJIIAMgBDYCRCAEIAIQ3wQLIANBADYCSCADQoCAgIAQNwJAIANBQGsiBEEAQSBBAUEBEIgDIAMoAkgiAiADKAJEaiIBIAUpAAA3AAAgAUEYaiAFQRhqKQAANwAAIAFBEGogBUEQaikAADcAACABQQhqIAVBCGopAAA3AAAgAyACQSBqIgE2AkhB0c7FAC0AABpBAUEBENYEIgJFDQcgAkEBOgAAIANBATYCVCADIAI2AlAgA0EBNgJMIANBzABqQQFBLEEBQQEQiAMgAygCUCIHIAMoAlQiCmoiAiAIKQAANwAAIAJBCGogCEEIaikAADcAACACQRBqIAhBEGopAAA3AAAgAkEYaiAIQRhqKQAANwAAIAJBIGogCEEgaikAADcAACACQShqIAhBKGooAAA2AAAgAyAKQSxqIgI2AlQgAygCQCABayACSQRAIAQgASACQQFBARCIAyADKAJIIQELIAMoAkQhBCACBEAgASAEaiAHIAL8CgAACyADIAEgAmoiATYCSCADQeQAaiAEIAEQ4QFB0c7FAC0AABpBIEEBENYEIgJFDQwgAiADKQBkNwAAIAJBGGoiByADQfwAaikAADcAACACQRBqIgogA0H0AGopAAA3AAAgAkEIaiILIANB7ABqKQAANwAAIAMoAiggAygCMCIEa0EfTQRAIANBKGogBEEgQQFBARCIAyADKAIwIQQLIAMoAiwiDCAEaiIBIAIpAAA3AAAgAUEIaiALKQAANwAAIAFBEGogCikAADcAACABQRhqIAcpAAA3AAAgAyAEQSBqIgc2AjAgDkECSQRAIAIhBAwLCyADKAIQIhFBAEgNCEECIQsDQEHRzsUALQAAGkEgQQEQ1gQiAUUNCiABIAItAAAgBS0AAHM6AAAgASACLQABIAUtAAFzOgABIAEgAi0AAiAFLQACczoAAiABIAItAAMgBS0AA3M6AAMgASACLQAEIAUtAARzOgAEIAEgAi0ABSAFLQAFczoABSABIAItAAYgBS0ABnM6AAYgASACLQAHIAUtAAdzOgAHIAEgAi0ACCAFLQAIczoACCABIAItAAkgBS0ACXM6AAkgASACLQAKIAUtAApzOgAKIAEgAi0ACyAFLQALczoACyABIAItAAwgBS0ADHM6AAwgASACLQANIAUtAA1zOgANIAEgAi0ADiAFLQAOczoADiABIAItAA8gBS0AD3M6AA8gASACLQAQIAUtABBzOgAQIAEgAi0AESAFLQARczoAESABIAItABIgBS0AEnM6ABIgASACLQATIAUtABNzOgATIAEgAi0AFCAFLQAUczoAFCABIAItABUgBS0AFXM6ABUgASACLQAWIAUtABZzOgAWIAEgAi0AFyAFLQAXczoAFyABIAItABggBS0AGHM6ABggASACLQAZIAUtABlzOgAZIAEgAi0AGiAFLQAaczoAGiABIAItABsgBS0AG3M6ABsgASACLQAcIAUtABxzOgAcIAEgAi0AHSAFLQAdczoAHSABIAItAB4gBS0AHnM6AB4gASACLQAfIAUtAB9zOgAfIBEEQEHRzsUALQAAGgsgA0EANgJgIANCgICAgBA3AlggA0HYAGpBAEEgQQFBARCIAyADKAJcIgogAygCYCIHaiIEIAEpAAA3AAAgBEEYaiABQRhqKQAANwAAIARBEGogAUEQaikAADcAACAEQQhqIAFBCGopAAA3AAAgAyAHQSBqIgc2AmBB0c7FAC0AABpBAUEBENYEIgRFBEBBAUEBEP8EAAsgBCALOgAAIANBATYCjAEgAyAENgKIASADQQE2AoQBIANBhAFqQQFBLEEBQQEQiAMgAygCiAEiEiADKAKMASIMaiIEIAgpAAA3AAAgBEEIaiAIQQhqKQAANwAAIARBEGogCEEQaikAADcAACAEQRhqIAhBGGopAAA3AAAgBEEgaiAIQSBqKQAANwAAIARBKGogCEEoaigAADYAACADIAxBLGoiBDYCjAEgAygCWCAHayAESQRAIANB2ABqIAcgBEEBQQEQiAMgAygCXCEKIAMoAmAhBwsgBARAIAcgCmogEiAE/AoAAAsgAyAEIAdqIgQ2AmAgA0HkAGogCiAEEOEBQdHOxQAtAAAaQSBBARDWBCIERQ0NIAQgAykAZDcAACAEQRhqIhMgA0H8AGopAAA3AAAgBEEQaiIUIANB9ABqKQAANwAAIARBCGoiFSADQewAaikAADcAACACQSAQ3wQgAygCKCADKAIwIgdrQR9NBEAgA0EoaiAHQSBBAUEBEIgDIAMoAjAhBwsgAygCLCIMIAdqIgIgBCkAADcAACACQQhqIBUpAAA3AAAgAkEQaiAUKQAANwAAIAJBGGogEykAADcAACADIAdBIGoiBzYCMCADKAKEASICBEAgEiACEN8ECyADKAJYIgIEQCAKIAIQ3wQLIAFBIBDfBCAEIQIgDiALQQFqIgtPDQALDAoLIANBADYCdCADQQE2AmggA0HYrcAANgJkIANCBDcCbCADQeQAakHgrcAAEKgEAAtBAUErQYSkwAAQyAQACyADQQA2AnQgA0EBNgJoIANB2K/AADYCZCADQgQ3AmwgA0HkAGpB4K/AABCoBAALQQFBK0H4gcAAEMgEAAtBASAGQfCvwAAQyAQAC0EBQQJBhKTAABDIBAALIAEgAkH4gcAAEMgEAAtBAUEBEP8EAAtB0c7FAC0AABpBACARQfiBwAAQyAQAC0EBQSBBpK3AABDIBAALAkAgByAJTwRAIAZFBEBBASEBDAILQdHOxQAtAAAaIAlBARDWBCIBDQFBASAJQYSkwAAQyAQACyAJIAdBkLDAABDlBAALIAkEQCABIAwgCfwKAAALIARBIBDfBCADKAJMIgIEQCADKAJQIAIQ3wQLIAMoAkAiAgRAIAMoAkQgAhDfBAsgBUEgEN8EIAMoAjQiAgRAIAMoAjggAhDfBAsgBgRAIA0gBhDfBAsgDwRAIAggDxDfBAsgAygCKCICBEAgDCACEN8ECyADQQA2AmwgA0KAgICAwAA3AmQCQAJAIAYEQEHRzsUALQAAGiAGQQEQ1gQiAkUNASAQRQRAIAIgASAG/AoAAAsgA0HkAGpByK7AABCfAyADKAJoIgQgBjYCACAEIAY2AgggBCACNgIEQdHOxQAtAAAaIANBATYCbCAGQQEQ1gQiAkUNASAQRQRAIAIgASAGaiAG/AoAAAsgAygCbCIEIAMoAmRGBEAgA0HkAGpByK7AABCfAwsgAygCaCAEQQxsaiIFIAY2AgggBSACNgIEIAUgBjYCACADKAJoIQYgAygCZCEHIAEgCRDfBCADKAIIIgEEQCADKAIMIAEQ3wQLIAMoAhQiAQRAIAMoAhggARDfBAsgBEEBaiIBrUIwfiIWpyEFQQAhBCAWQiCIpyAFQfj///8HS3INAkEAIQJBCCEIIAUEQEHRzsUALQAAGkEIIQQgBUEIENYEIghFDQMgASEECyADQYwBaiIKQQA2AgAgAyAINgKIASADIAQ2AoQBIAMgBiABQQxsajYCcCADIAc2AmwgAyAGNgJoIAMgBjYCZCADIAg2AhAgA0EANgIMIAMgCjYCCCADQQhqIQgjAEEwayIFJAACQCADQeQAaiIHKAIEIgEgBygCDCIMRgRAIAgoAgQhCQwBCyAIKAIIIAgoAgQiCUEwbGohBgNAIAcgAUEMaiIENgIEIAEoAgAhDSAFIAFBBGooAgAiCyABQQhqKAIAEI4BIA0EQCALIA0Q3wQLIAYgBSkDADcDACAIIAlBAWoiCTYCBCAGQShqIAVBKGopAwA3AwAgBkEgaiAFQSBqKQMANwMAIAZBGGogBUEYaikDADcDACAGQRBqIAVBEGopAwA3AwAgBkEIaiAFQQhqKQMANwMAIAZBMGohBiAEIgEgDEcNAAsLIAgoAgAgCTYCACAHKAIIIgEEQCAHKAIAIAFBDGwQ3wQLIAVBMGokACAAQQRqIgFBCGogCigCADYCACABIAMpAoQBNwIADAMLQZuuwABBG0G4rsAAEP4DAAtBASAGQYSkwAAQyAQACyAEIAVB4IDAABDIBAALIAAgAjYCACADQZABaiQADwtBAUEgQYSkwAAQyAQAC/AiAgd/GX4jAEHgIWsiAiQAIAJByBlqIAFBCGopAwA3AwAgAkHQGWogAUEQaikDADcDACACQdgZaiABQRhqKQMANwMAIAJB4BlqIAFBIGopAwA3AwAgAkHoGWogAUEoaikDADcDACACQfgZaiABQThqKQMANwMAIAJBgBpqIAFBQGspAwA3AwAgAkGIGmogAUHIAGopAwA3AwAgAkGQGmogAUHQAGopAwA3AwAgAkGYGmogAUHYAGopAwA3AwAgAiABKQMANwPAGSACIAEpAzA3A/AZIAJByBpqIAFBqANqKQMANwMAIAJBwBpqIAFBoANqKQMANwMAIAJBuBpqIAFBmANqKQMANwMAIAJBsBpqIAFBkANqKQMANwMAIAJBqBpqIAFBiANqKQMANwMAIAJB+BpqIAFB2ANqKQMANwMAIAJB8BpqIAFB0ANqKQMANwMAIAJB6BpqIAFByANqKQMANwMAIAJB4BpqIAFBwANqKQMANwMAIAJB2BpqIAFBuANqKQMANwMAIAIgASkDgAM3A6AaIAIgASkDsAM3A9AaIAJBwAFqIgQgAkHAGWpB4AD8CgAAIAJBoAJqIAJBoBpqQeAA/AoAACACQcAHaiIFIARBwAH8CgAAIAIgBRCsAyACQYgbaiABQagCaikDADcDACACQZAbaiABQbACaikDADcDACACQZgbaiABQbgCaikDADcDACACQaAbaiABQcACaikDADcDACACQagbaiABQcgCaikDADcDACACQbgbaiABQdgCaikDADcDACACQcAbaiABQeACaikDADcDACACQcgbaiABQegCaikDADcDACACQdAbaiABQfACaikDADcDACACQdgbaiABQfgCaikDADcDACACIAEpA6ACNwOAGyACIAEpA9ACNwOwGyACQYgcaiABQegBaikDADcDACACQYAcaiABQeABaikDADcDACACQfgbaiABQdgBaikDADcDACACQfAbaiABQdABaikDADcDACACQegbaiABQcgBaikDADcDACACQbgcaiABQZgCaikDADcDACACQbAcaiABQZACaikDADcDACACQagcaiABQYgCaikDADcDACACQaAcaiABQYACaikDADcDACACQZgcaiABQfgBaikDADcDACACIAEpA8ABNwPgGyACIAEpA/ABNwOQHCACQcAEaiIEIAJBgBtqQeAA/AoAACACQaAFaiACQeAbakHgAPwKAAAgBSAEQcAB/AoAACACQYADaiIIIAUQrAMgAkHIHGogAUHoAGopAwA3AwAgAkHQHGogAUHwAGopAwA3AwAgAkHYHGogAUH4AGopAwA3AwAgAkHgHGogAUGAAWopAwA3AwAgAkHoHGogAUGIAWopAwA3AwAgAkH4HGogAUGYAWopAwA3AwAgAkGAHWogAUGgAWopAwA3AwAgAkGIHWogAUGoAWopAwA3AwAgAkGQHWogAUGwAWopAwA3AwAgAkGYHWogAUG4AWopAwA3AwAgAiABKQNgNwPAHCACIAEpA5ABNwPwHCACQcgdaiABQYgEaikDADcDACACQcAdaiABQYAEaikDADcDACACQbgdaiABQfgDaikDADcDACACQbAdaiABQfADaikDADcDACACQagdaiABQegDaikDADcDACACQfgdaiABQbgEaikDADcDACACQfAdaiABQbAEaikDADcDACACQegdaiABQagEaikDADcDACACQeAdaiABQaAEaikDADcDACACQdgdaiABQZgEaikDADcDACACIAEpA+ADNwOgHSACIAEpA5AENwPQHSACQYAJaiIEIAJBwBxqQeAA/AoAACACQeAJaiACQaAdakHgAPwKAAAgBSAEQcAB/AoAACACQYAGaiAFIgQQrAMgAkHACmoiBiIDIAIgARCNASAEIAMgAxDVASADIARB4AD8CgAAIAJBiB5qIAJBCGopAwA3AwAgAkGQHmogAkEQaikDADcDACACQZgeaiACQRhqKQMANwMAIAJBoB5qIAJBIGopAwA3AwAgAkGoHmogAkEoaikDADcDACACQbgeaiACQThqKQMANwMAIAJBwB5qIAJBQGspAwA3AwAgAkHIHmogAkHIAGopAwA3AwAgAkHQHmogAkHQAGopAwA3AwAgAkHYHmogAkHYAGopAwA3AwAgAiACKQMANwOAHiACIAIpAzA3A7AeIAJB4A9qIgcgAkGAHmpB4AD8CgAAIAQiAyAHIAYiBBDVASAEIANB4AD8CgAAIAJBoAtqIgYiAyAIIAFB4ABqEI0BIAUiBCADIAMQ1QEgAyAEQeAA/AoAACACQegeaiACQYgDaikDADcDACACQfAeaiACQZADaikDADcDACACQfgeaiACQZgDaikDADcDACACQYAfaiACQaADaikDADcDACACQYgfaiACQagDaikDADcDACACQZgfaiACQbgDaikDADcDACACQaAfaiACQcADaikDADcDACACQagfaiACQcgDaikDADcDACACQbAfaiACQdADaikDADcDACACQbgfaiACQdgDaikDADcDACACIAIpA4ADNwPgHiACIAIpA7ADNwOQHyAHIAJB4B5qQeAA/AoAACAEIgMgByAGIgQQ1QEgBCADQeAA/AoAACACQYAMaiIGIgMgAkHgAGogAUGAA2oQ1QEgBSIEIAMgAxDVASADIARB4AD8CgAAIAJByB9qIAJB6ABqKQMANwMAIAJB0B9qIAJB8ABqKQMANwMAIAJB2B9qIAJB+ABqKQMANwMAIAJB4B9qIAJBgAFqKQMANwMAIAJB6B9qIAJBiAFqKQMANwMAIAJB+B9qIAJBmAFqKQMANwMAIAJBgCBqIAJBoAFqKQMANwMAIAJBiCBqIAJBqAFqKQMANwMAIAJBkCBqIAJBsAFqKQMANwMAIAJBmCBqIAJBuAFqKQMANwMAIAIgAikDYDcDwB8gAiACKQOQATcD8B8gByACQcAfakHgAPwKAAAgBCIDIAcgBiIEENUBIAQgA0HgAPwKAAAgAkHgDGoiBiIDIAJB4ANqIAFB4ANqENUBIAUiBCADIAMQ1QEgAyAEQeAA/AoAACACQaggaiACQegDaikDADcDACACQbAgaiACQfADaikDADcDACACQbggaiACQfgDaikDADcDACACQcAgaiACQYAEaikDADcDACACQcggaiACQYgEaikDADcDACACQdggaiACQZgEaikDADcDACACQeAgaiACQaAEaikDADcDACACQeggaiACQagEaikDADcDACACQfAgaiACQbAEaikDADcDACACQfggaiACQbgEaikDADcDACACIAIpA+ADNwOgICACIAIpA5AENwPQICAHIAJBoCBqQeAA/AoAACAEIgMgByAGIgQQ1QEgBCADQeAA/AoAACACQcANaiEEIAJB4AZqIgMpAzAiGCEMIAMpAwAiGSEJAn4CQAJ+AkAgGCAZUg0AIAMpAzgiDSADKQMIIglSBEAgDSEMDAELIAMpA0AiDiADKQMQIglSBEAgDiEMDAELIAMpA0giCyADKQMYIglSBEAgCyEMDAELIAMpA1AiECADKQMgIglSBEAgECEMDAELIA0hDyAOIREgCyESIAMpA1giDCETIBAgDCADKQMoIglRDQEaCyAJIAxUDQEgAykDOCENIAMpAwghDyADKQNAIQ4gAykDECERIAMpA0ghCyADKQMYIRIgAykDUCEQIAMpA1ghDCADKQMoIRMgAykDIAsiCiAQfSIJIAwgE1atIhp9IRQgEiALfSIVIAogEFQgCSAaVHKtIgl9IRogESAOfSIWIAkgFVYgCyASVnKtIgl9IRUgDyANfSIXIAkgFlYgDiARVnKtIgl9IRYgCSAXViANIA9WciEDIBkgGH0hFyATIAx9DAELQqTsw7WP1LSY5wAgAykDSCILIAMpAxgiEn0iDSADKQNQIhAgAykDICIKVCAQIAp9Ig4gAykDWCIMIAMpAygiE1StIg9Ucq0iCX0iFH0iFSAOIA99Ig5C///Piuv//9UeVkL//8+K6///1R4gDn0iFyAMIBN9IhtCq9X+////v/+5f1atIhxUcq0iD30hGkK/pZScz/DSu+QAIAMpA0AiDiADKQMQIhF9IhYgCyASVCAJIA1Wcq0iCX0iHX0iHiAPIBVWIBRCpOzDtY/UtJjnAFZyrSIUfSEVQtfZrprk9umNywAgAykDOCINIAMpAwgiD30iHyAOIBFUIAkgFlZyrSIJfSIgfSIhIBQgHlYgHUK/pZScz/DSu+QAVnKtIhR9IRYgFCAhViAgQtfZrprk9umNywBWciEDIBcgHH0hFCANIA9UIAkgH1ZyrSAZIBh9fEKazf/Lo73EgBp8IRdCq9X+////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A0giByAFIAMpA0AiBHwiCCAFVK18IAggByAEIA98IgUgD1StfCAFIAMpA1ggAykDUCIEIBN8IARUrXx8IhEgBVStfHwiBCAIVK18fCIHIAZUrXwiCCAMIBBUrSADKQMIIAsgEFatfHwiBSALIA1UrSAJIA5UrXx8Igl8IgogCFQgBSAJVnIgCkIAU3INAAJAIApC////////////AFEEQEJ/IQYgB0J/UgRAIAQhCCAHIQZC////////////ACEKDAQLIARCf1ENASAEIQhC////////////ACEKDAMLIAQhCCAHIQYMAgtCfyEIIBFCbVoNAEL///////////8AIQoMAQsgBEIBfCIOIBFCbVStIgV9IQggB0IBfCIJIARCf1IgBSAOVnKtIgR9IQYgCiAHQn9SIAQgCVZyrX1C////////////AH0hCiARQhN8IRELIAAgETcDICAAIAg3AxggACAKNwMIQgAhCkEQCyAAaiAGNwMAIAAgCjcDACADQaAEaiQAC/scAgF/FH4jAEGABmsiAiQAIAJB4AVqIAEpAwAgASkDCBDNAiACQYAFaiABKQMQIAEpAxgQzQIgAkGgBWogASkDICABKQMoEM0CIAJBwAVqIAEpAzAgASkDOBDNAiACQYADaiACKQOYBSIDQgBCgICAgICAEUIAEMkDIAJBkANqIANCAEKAgICAgHxCABDJAyACQaADaiADQgBCf0IAEMkDIAJBsANqIANCAEL///////+gAkIAEMkDIAJB0AJqQgAgAikDgAMiBH1CAEKRgICAgICAgAhCABDJAyACQcADaiACKQOQBSIDQgBCgICAgICAEUIAEMkDIAJB0ANqIANCAEKAgICAgHxCABDJAyACQeADaiADQgBCf0IAEMkDIAJB8ANqIANCAEL///////+gAkIAEMkDIAJB4AJqQgAgBEKAgICAgIB/gyIDIAR9IANUrSIFIAIpA4gDIgggAikDkAN8Igd8IgQgAikDwAN8Igl9QgBCkYCAgICAgIAIQgAQyQMgAkGABGogAikDiAUiA0IAQoCAgICAgBFCABDJAyACQZAEaiADQgBCgICAgIB8QgAQyQMgAkGgBGogA0IAQn9CABDJAyACQbAEaiADQgBC////////oAJCABDJAyACQfACakIAIAlCAFKtIg0gBCAFVK0iCiACKQOYAyAHIAhUrXwiByACKQOgA3wiBnwiBSACKQPQA3wiCCACKQPIAyAEIAlWrXx8Igx8IgQgAikDgAR8Igl9QgBCkYCAgICAgIAIQgAQyQMgAkHABGogAikDgAUiA0IAQoCAgICAgBFCABDJAyACQdAEaiADQgBCgICAgIB8QgAQyQMgAkHgBGogA0IAQn9CABDJAyACQfAEaiADQgBC////////oAJCABDJAyACQcACakIAIAIpA4gEIAQgCVatfCIQIAIpA5AEfCIDIAIpA6gDIAYgB1StfCIOIAIpA7ADfCIHIAIpA9ACfCIGIAUgClStfCIKIAIpA+ADfCILIAggDFatIAIpA9gDIAUgCFatfHx8IgUgBCANVK18Igx8IgQgCUIAUq18IgkgAikDwAR8Igh9QgBCkYCAgICAgIAIQgAQyQMCQAJAIAIpA8gCIAIpA9gEIAIpA8gEIAggCVStfCIPIAIpA9AEfCINIA9UrXwgDSADIARWrSACKQOYBCADIBBUrXx8Ig8gAikDoAR8IgMgBSAMVq0iESACKQPgAnwiDCACKQO4AyAHIA5UrXwiDiACKQPwA3wiECAGIApWrSACKQPYAiAGIAdUrXx8fCIHIAUgC1StIAIpA+gDIAogC1atfHx8Igp8Igt8IgUgBCAJVq18IgZ8IgQgDVStfCINIAIpA+AEfCIJIAUgBlatIhIgAikD8AJ8IgYgByAKVq0gByAQVK0gAikD+AMgDiAQVq18fHwiECACKQOwBHwiByALIAxUrSACKQPoAiAMIBFUrXx8fCIKIAMgBVatIAIpA6gEIAMgD1StfHx8Igt8Igx8IgMgBCAEIAhCAFKtfCIEVq18IgggA1StIg4gAikDwAJ8IgUgDlStfCAFIAogC1atIAcgClatIAIpA7gEIAcgEFStfHx8IgsgAikD8AR8IgogBiAMVq0gAikD+AIgBiASVK18fHwiBiADIAlUrSACKQPoBCAJIA1UrXx8fCIDfCIHIAVUrXwgAyAGVK0gBiAKVK0gAikD+AQgCiALVK18fHx8IgZCkYCAgICAgIAIVg0AIAZCkYCAgICAgIAIUQRAIAQgCIQgB4RQRQ0BQgAhCUKRgICAgICAgAghBkIAIQVCACEDDAILIAchCSAIIQUgBCEDDAELIARCAX0hAyAIIARQrSIEfSEFIAcgBCAIVq0iBH0hCSAGIAQgB1atfUKRgICAgICAgAh9IQYLQpGAgICAgICACCEEIAIpA+gFIgggCXwiCSAIVCAJIAUgAikD8AUiBXwiCCAFVCAIIAggAyACKQP4BSIDfCIFIANUrXwiCFZyrXwiByAJVHKtIAIpA+AFIAZ8fCIGIQMCQAJAIAZCkYCAgICAgIAIUQRAIAcgCIRCAFINAUIBIQQgBSIDQgFRDQELIAMgBFoNACAHIQQgCCEDIAUhCQwBCyAFQgF9IQkgCCAFUK0iBH0hAyAHIAQgCFatIgV9IQRC7v////////93Qu//////////dyAFIAdWGyAGfCEGC0KRgICAgICAgAghCiAEIAQgACkDKHwiBFYgBCADIAMgACkDMHwiA1YgAyAJIAApAzh8IgUgCVStfCIIIANUcq18IgcgBFRyrSAAKQMgIAZ8fCIGIQQCQAJAIAZCkYCAgICAgIAIUQRAIAcgCIRCAFINAUIBIQogBSIEQgFRDQELIAQgCloNACAHIQQgCCEDIAUhCQwBCyAFQgF9IQkgCCAFUK0iBH0hAyAHIAQgCFatIgV9IQRC7v////////93Qu//////////dyAFIAdWGyAGfCEGCyAAIAk3AzggACADNwMwIAAgBDcDKCAAIAY3AyAgAkHwAGogAikD2AUiA0IAQoCAgICAgBFCABDJAyACQeAAaiADQgBCgICAgIB8QgAQyQMgAkHQAGogA0IAQn9CABDJAyACQUBrIANCAEL///////+gAkIAEMkDIAJBMGpCACACKQNwIgR9QgBCkYCAgICAgIAIQgAQyQMgAkGwAWogAikD0AUiA0IAQoCAgICAgBFCABDJAyACQaABaiADQgBCgICAgIB8QgAQyQMgAkGQAWogA0IAQn9CABDJAyACQYABaiADQgBC////////oAJCABDJAyACQSBqQgAgBEKAgICAgIB/gyIDIAR9IANUrSIFIAIpA3giCCACKQNgfCIHfCIEIAIpA7ABfCIJfUIAQpGAgICAgICACEIAEMkDIAJB8AFqIAIpA8gFIgNCAEKAgICAgIARQgAQyQMgAkHgAWogA0IAQoCAgICAfEIAEMkDIAJB0AFqIANCAEJ/QgAQyQMgAkHAAWogA0IAQv///////6ACQgAQyQMgAkEQakIAIAlCAFKtIg0gBCAFVK0iCiACKQNo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IgogEkLH+vPD7YKjkDxUrSIIfSEGIAlCo8/685fJ7tfHAHwiCyAHQo2Vx8OW0trAl39UIAggClZyrSIHfSEIIAwgCULdsIWM6LaRqLh/VCAHIAtWcq19QqnAxomuzpOyMH0hDCASQsf688PtgqOQPH0hEgsgAiASNwPgBSACIAY3A9gFIAIgCDcD0AUgAiAMNwPIBSACQueo9ca8p8KHuH83A+AGIAJC5fHh0cWMhqqnfzcD2AYgAkKqmdmK5dzjo65/NwPQBiACQvK19tfrgqDtIzcDyAYgAkHoBGogAkHIBWoiAyACQcgGaiIEEH4gAkHQBGogAkGQBWopAwA3AwAgAkHYBGogAkGYBWopAwA3AwAgAkHgBGogAkGgBWopAwA3AwAgAiACKQOIBTcDyAQgAyABIAEQoAIgBCACQcgEaiADEJEDIAIpA9gGIQcgAikD0AYhBiACKALIBkEBRg0BIAAgAikD4AY3AxAgAEE4aiACQYgHaikDADcDACAAQTBqIAJBgAdqKQMANwMAIABBKGogAkH4BmopAwA3AwAgAEEgaiACQfAGaikDADcDACAAQRhqIAJB6AZqKQMANwMAIAAgBzcDCCAAIAY3AwAgAkGQB2okAA8LIAIgBDYC0AYgAiADNgLMBiACIAU2AsgGQYCLwABBKyACQcgGakHwisAAQaSNwAAQygMACyACIAc3A9AGIAIgBjcDyAZB1P7AAEErIAJByAZqQbCFwQBBwIXBABDKAwALjhgCDn8BfiMAQeAKayIDJAAgA0E4aiABQThqKQMANwMAIANBMGogAUEwaikDADcDACADQShqIAFBKGopAwA3AwAgA0EgaiABQSBqKQMANwMAIANBGGogAUEYaikDADcDACADQRBqIAFBEGopAwA3AwAgA0EIaiABQQhqKQMANwMAIANByABqIAJBCGopAwA3AwAgA0HQAGogAkEQaikDADcDACADQdgAaiACQRhqKQMANwMAIANB4ABqIAJBIGopAwA3AwAgA0HoAGogAkEoaikDADcDACADQfAAaiACQTBqKQMANwMAIANB+ABqIAJBOGopAwA3AwAgAyABKQMANwMAIAMgAikDADcDQCADQegBakIANwMAIANB4AFqQgA3AwAgA0HYAWpCADcDACADQdABakIANwMAIANByAFqQgA3AwAgA0HAAWpCADcDACADQbgBakIANwMAIANCADcDsAEgA0FAayEBAkACQAJAAkACQAJAIAMgA0GwAWoiAhCnBARAIAEgAhCnBA0BCyADQegBakIANwMAIANB4AFqQgA3AwAgA0HYAWpCADcDACADQdABakIANwMAIANByAFqQgA3AwAgA0HAAWpCADcDACADQbgBakIANwMAIANCADcDsAEgAyADQbABaiICEKcEBEAgASACEKcEDQELIANBsAFqECEgA0GQBmogA0HIAWopAwA3AwAgA0GIBmogA0HAAWopAwA3AwAgA0GABmogAykDuAE3AwAgA0GgBmogA0H4AWopAwA3AwAgA0GoBmogA0GAAmopAwA3AwAgA0GwBmogA0GIAmopAwA3AwAgA0HABmogA0GYAmopAwA3AwAgA0HIBmogA0GgAmopAwA3AwAgA0HQBmogA0GoAmopAwA3AwAgAyADKQOwATcD+AUgAyADKQPwATcDmAYgAyADKQOQAjcDuAYgA0HYBmoiCyABEEsgA0GgCWoiBiADQQhqIgIpAwA3AwAgA0GoCWoiCCADQRBqIgQpAwA3AwAgA0GwCWoiDCADQRhqIgUpAwA3AwAgA0G4CWoiDSADKQMgNwMAIANBwAlqIg4gA0EoaiIHKQMANwMAIANByAlqIg8gA0EwaiIJKQMANwMAIANB0AlqIhAgA0E4aiIKKQMANwMAIAMgAykDADcDmAkgA0GgCGogBikDADcDACADQagIaiAIKQMANwMAIANBsAhqIAwpAwA3AwAgA0G4CGogDSkDADcDACADQcAIaiAOKQMANwMAIANByAhqIA8pAwA3AwAgA0HQCGogECkDADcDACADIAMpA5gJNwOYCCADQdgIaiIGIANBmAhqEEsgA0HwCWogBSkDADcDACADQegJaiAEKQMANwMAIANB4AlqIAIpAwA3AwAgA0GACmogBykDADcDACADQYgKaiAJKQMANwMAIANBkApqIAopAwA3AwAgAyADKQMANwPYCSADIAMpAyA3A/gJIANB2AdqIgggBiADQdgJahA4IANBoApqIAIpAwA3AwAgA0GoCmogBCkDADcDACADQbAKaiAFKQMANwMAIANBwApqIAcpAwA3AwAgA0HICmogCSkDADcDACADQdAKaiAKKQMANwMAIAMgAykDADcDmAogAyADKQMgNwO4CiAGIANB+AVqIANBmApqEFkgA0GYB2oiAiAIIAYQoAIgBiACIANBmAZqEKACIAsgBhCnBCADKALcBSICBEAgAygC4AUgAkECdBDfBAsCQCADKAKUAyICRQ0AIAIgAkEMbEETakF4cSIFakEJaiICRQ0AIAMoApADIAVrIAIQ3wQLIAMoAsADIgJBgICAgHhGIAJFckUEQCADKALEAyACQQJ0EN8ECw0AIANB6AFqIANBOGopAwA3AwAgA0HgAWogA0EwaikDADcDACADQdgBaiADQShqKQMANwMAIANB0AFqIANBIGopAwA3AwAgA0HIAWogA0EYaikDADcDACADQcABaiADQRBqKQMANwMAIANBuAFqIANBCGopAwA3AwAgAyADKQMANwOwASADQZgKaiADQbABahCvAyADKAKcCiECIAMoApgKIQQgAygCoAoiBUECRw0BIANBoApqIAJBEGopAwA3AwAgA0GoCmogAkEYaikDADcDACADQbAKaiACQSBqKQMANwMAIANBuApqIAJBKGopAwA3AwAgA0HACmogAkEwaikDADcDACADQcgKaiACQThqKQMANwMAIAMgAikDCDcDmAogAigCBCEFIAIoAgAhByAEBEAgAiAEQQV0EN8ECyADQegJaiADQaAKaikDADcDACADQfAJaiADQagKaikDADcDACADQYAKaiADQbgKaikDADcDACADQYgKaiADQcAKaikDADcDACADQZAKaiADQcgKaikDADcDACADIAU2AtwJIAMgBzYC2AkgAyADKQOYCjcD4AkgAyADKQOwCjcD+AkgA0HoAWogAUE4aikDADcDACADQeABaiABQTBqKQMANwMAIANB2AFqIAFBKGopAwA3AwAgA0HQAWogAUEgaikDADcDACADQcgBaiABQRhqKQMANwMAIANBwAFqIAFBEGopAwA3AwAgA0G4AWogAUEIaikDADcDACADIAEpAwA3A7ABIANBmApqIANBsAFqEK8DIAMoApwKIQEgAygCmAohAiADKAKgCiIEQQJHDQIgA0GgCWogAUEQaikDADcDACADQagJaiABQRhqKQMANwMAIANBsAlqIAFBIGopAwA3AwAgA0G4CWogAUEoaikDADcDACADQcAJaiABQTBqKQMANwMAIANByAlqIAFBOGopAwA3AwAgAyABKQMINwOYCSABKAIEIQQgASgCACEFIAIEQCABIAJBBXQQ3wQLIANBqApqIANBoAlqIgEpAwA3AwAgA0GwCmogA0GoCWopAwA3AwAgA0HACmogA0G4CWopAwA3AwAgA0HICmogA0HACWopAwA3AwAgA0HQCmogA0HICWopAwA3AwAgAyAENgKcCiADIAU2ApgKIAMgAykDmAk3A6AKIAMgAykDsAk3A7gKIANBmAhqIgIgA0HYCWoQzQEgA0EANgKgCSADQoCAgIAQNwKYCSADQdD/wAA2ArQBIANCoICAgA43ArgBIAMgA0GYCWoiBDYCsAEgAiADQbABaiICENMCDQUgA0GIAWogASgCADYCACADIAMpApgJNwOAASADQdgIaiIFIANB+AlqEM0BIANBADYCoAkgA0KAgICAEDcCmAkgA0HQ/8AANgK0ASADQqCAgIAONwK4ASADIAQ2ArABIAUgAhDTAg0FIANBmAFqIAEoAgA2AgAgAyADKQKYCTcDkAEgBCADQZgKahDNASADQQA2AuAHIANCgICAgBA3AtgHIANB0P/AADYCtAEgA0KggICADjcCuAEgAyADQdgHaiIBNgKwASAEIAIQ0wINBSADQagBaiADQeAHaigCADYCACADIAMpAtgHNwOgASACIANBuApqEM0BIANBADYCoAYgA0KAgICAEDcCmAYgA0HQ/8AANgLcBiADQqCAgIAONwLgBiADIANBmAZqNgLYBiACIANB2AZqENMCDQUgA0GABmogA0GgBmooAgA2AgAgAyADKQKYBjcD+AUgA0EFNgKcByADQeyDwQA2ApgHIANCBDcCpAcgA0KAgICAwAQiESADQfgFaq2ENwPwByADIBEgA0GgAWqthDcD6AcgAyARIANBkAFqrYQ3A+AHIAMgESADQYABaq2ENwPYByADIAE2AqAHIABBBGogA0GYB2oQ0gIgAygC+AUiAQRAIAMoAvwFIAEQ3wQLIAMoAqABIgEEQCADKAKkASABEN8ECyADKAKQASIBBEAgAygClAEgARDfBAsgAygCgAEiAQRAIAMoAoQBIAEQ3wQLIABBATYCAAwDCyAAQQhqIANBgAH8CgAAIABBADYCAAwCCyADIAU2AqAKIAMgAjYCnAogAyAENgKYCgwCCyADIAQ2AqAKIAMgATYCnAogAyACNgKYCgwBCyADQeAKaiQA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yAFqIgwgGykDACIvNwMAIAJBiAhqIhkgLzcDACACQZAIaiIaIDA3AwAgAkGYCGoiFCAxNwMAIAIgAikDwAciLzcDwAEgAkGgCGoiDSAGKQMANwMAIAJBqAhqIg4gBykDADcDACACQbAIaiIPIAgpAwA3AwAgAkG4CGoiECAJKQMANwMAIAIgLzcDgAggAkHAAWoiBCACQYAIaiIREEsgECACQfgBaiIVKQMANwMAIA8gAkHwAWoiFikDADcDACAOIAJB6AFqIhcpAwA3AwAgDSACQeABaiIYKQMANwMAIBQgCikDADcDACAaIAspAwA3AwAgGSAMKQMANwMAIAIgAikDwAE3A4AIIAQgAkHAB2oiISAREDggCSAVKQMAIjM3AwAgCCAWKQMAIjI3AwAgByAXKQMAIjE3AwAgBiAYKQMAIjA3AwAgBSAKKQMAIi83AwAgAkHIA2oiEiAMKQMANwMAIAJB0ANqIhMgCykDADcDACACQdgDaiIdIC83AwAgAkHgA2oiHiAwNwMAIAJB6ANqIiAgMTcDACACQfADaiIiIDI3AwAgAkH4A2oiIyAzNwMAIAIgAikDwAEiLzcDwAcgAiAvNwPAAyAbIAFByABqKQMANwMAIBwgAUHQAGopAwA3AwAgBSABQdgAaikDADcDACAGIAEpA2A3AwAgByABQegAaikDADcDACAIIAFB8ABqKQMANwMAIAkgAUH4AGopAwA3AwAgAiABKQNANwPAByAKIAUpAwAiMTcDACALIBwpAwAiMDcDACAMIBspAwAiLzcDACAZIC83AwAgGiAwNwMAIBQgMTcDACACIAIpA8AHIi83A8ABIA0gBikDADcDACAOIAcpAwA3AwAgDyAIKQMANwMAIBAgCSkDADcDACACIC83A4AIIAQgERBLIBAgFSkDADcDACAPIBYpAwA3AwAgDiAXKQMANwMAIA0gGCkDADcDACAUIAopAwA3AwAgGiALKQMANwMAIBkgDCkDADcDACACIAIpA8ABNwOACCAEICEgERA4IAkgFSkDACIzNwMAIAggFikDACIyNwMAIAcgFykDACIxNwMAIAYgGCkDACIwNwMAIAUgCikDACIvNwMAIAJBiARqIiQgDCkDADcDACACQZAEaiIlIAspAwA3AwAgAkGYBGoiJiAvNwMAIAJBoARqIisgMDcDACACQagEaiInIDE3AwAgAkGwBGoiKCAyNwMAIAJBuARqIikgMzcDACACIAIpA8ABIi83A8AHIAIgLzcDgAQgBBD0AyARIAJBgARqIh8gBBA4IAJBgANqIgMgAkHAA2oiKiAREKACIBsgAUGIAWopAwA3AwAgHCABQZABaikDADcDACAFIAFBmAFqKQMANwMAIAYgASkDoAE3AwAgByABQagBaikDADcDACAIIAFBsAFqKQMANwMAIAkgAUG4AWopAwA3AwAgAiABKQOAATcDwAcgCiAFKQMAIjE3AwAgCyAcKQMAIjA3AwAgDCAbKQMAIi83AwAgGSAvNwMAIBogMDcDACAUIDE3AwAgAiACKQPAByIvNwPAASANIAYpAwA3AwAgDiAHKQMANwMAIA8gCCkDADcDACAQIAkpAwA3AwAgAiAvNwOACCAEIBEQSyAQIBUpAwA3AwAgDyAWKQMANwMAIA4gFykDADcDACANIBgpAwA3AwAgFCAKKQMANwMAIBogCykDADcDACAZIAwpAwA3AwAgAiACKQPAATcDgAggBCAhIBEQOCAJIBUpAwAiMzcDACAIIBYpAwAiMjcDACAHIBcpAwAiMTcDACAGIBgpAwAiMDcDACAFIAopAwAiLzcDACASIAwpAwA3AwAgEyALKQMANwMAIB0gLzcDACAeIDA3AwAgICAxNwMAICIgMjcDACAjIDM3AwAgAiACKQPAASIvNwPAByACIC83A8ADIB8Q9AMgGSAkKQMANwMAIBogJSkDADcDACAUICYpAwA3AwAgDSACKQOgBDcDACAOICcpAwA3AwAgDyAoKQMANwMAIBAgKSkDADcDACACIAIpA4AENwOACCAEIBEQSyAQIBUpAwAiMjcDACAPIBYpAwAiMTcDACAOIBcpAwAiMDcDACANIBgpAwAiLzcDACAbIAwpAwA3AwAgHCALKQMANwMAIAUgCikDADcDACAGIC83AwAgByAwNwMAIAggMTcDACAJIDI3AwAgAiACKQPAASIvNwOACCACIC83A8AHIAQgKiAhEDggKiADIAQQoAIgBCACIAEQOCARIAQgAUFAayIdEDggISARIAFBgAFqIh4QOCAEEPQDIBEgISAEEDggAkFAayIDICogERDcASAEIAMQLiACKQPQASEwIAIpA8gBIS8gAAJ+IAIoAsABQQFGBEAgACAwNwMQIAAgLzcDCEIBDAELIAJBuAFqIAJBgAJqIgMpAwA3AwAgAkGwAWogFSkDADcDACACQagBaiAWKQMANwMAIAJBoAFqIBcpAwA3AwAgAkGYAWogGCkDADcDACACIAIpA9gBNwOQASACIDA3A4gBIAIgLzcDgAEgGSAsKQMANwMAIBogLSkDADcDACAUIC4pAwA3AwAgDSABQSBqIh8pAwA3AwAgDiAfQQhqKQMANwMAIA8gH0EQaikDADcDACAQIB9BGGopAwA3AwAgAiABKQMANwOACCACQcABaiISIAJBgAhqIhMQSyAQIBUpAwAiMzcDACAPIBYpAwAiMjcDACAOIBcpAwAiMTcDACANIBgpAwAiMDcDACAUIAopAwAiLzcDACAkIAwpAwA3AwAgJSALKQMANwMAICYgLzcDACArIDA3AwAgJyAxNwMAICggMjcDACApIDM3AwAgAiACKQPAASIvNwOACCACIC83A4AEIBMgHSAeEDggEhD0AyACQcAHaiIgIBMgEhA4IBIgAkGABGoiIiAgENwBIAJBgANqIBIgAkGAAWoiHxA4IBIgARDwAiAiIBIgHRA4IBkgHkEIaikDADcDACAaIB5BEGopAwA3AwAgFCAeQRhqKQMANwMAIA0gAUGgAWoiIykDADcDACAOICNBCGopAwA3AwAgDyAjQRBqKQMANwMAIBAgI0EYaikDADcDACACIB4pAwA3A4AIIBIgExBLIBAgFSkDACIzNwMAIA8gFikDACIyNwMAIA4gFykDACIxNwMAIA0gGCkDACIwNwMAIBQgCikDACIvNwMAIBsgDCkDADcDACAcIAspAwA3AwAgBSAvNwMAIAYgMDcDACAHIDE3AwAgCCAyNwMAIAkgMzcDACACIAIpA8ABIi83A4AIIAIgLzcDwAcgEhD0AyATICAgEhA4ICAgIiATEKACIAMgICAfEDggEyABEPACIAJBwANqIgMgEyAeEDggGyAdQQhqKQMANwMAIBwgHUEQaikDADcDACAFIB1BGGopAwA3AwAgBiABQeAAaiIBKQMANwMAIAcgAUEIaikDADcDACAIIAFBEGopAwA3AwAgCSABQRhqKQMANwMAIAIgHSkDADcDwAcgEyAgEEsgCSAQKQMAIjM3AwAgCCAPKQMAIjI3AwAgByAOKQMAIjE3AwAgBiANKQMAIjA3AwAg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IAggFCkDADcDACAMIBUpAwA3AwAgDSAWKQMANwMAIA4gFykDADcDACAPIBgpAwA3AwAgECAZKQMANwMAIAIgAikDgAY3A6ACIAIgAikDsAY3A9ACIANFBEAgAkHgBmogAkGgAmpB4AD8CgAACyACQaACaiIKIAJB4AZqIgsQXiADRQRAIAsgCkHgAPwKAAALIAJBoAJqIgogAkGABmoiCyACQeAGahA/IANFBEAgCyAKQeAA/AoAAAsgA0UEQCACQaAFaiACQYAGakHgAPwKAAALIAJBoAJqIgoQdSACQeAGaiILIAJBoAVqIAoQPyACQcABaiACQcAEaiALENUBIAUgAUHoAWopAwA3AwAgBiABQeABaikDADcDACAEIAFB2AFqKQMANwMAIAcgAUHQAWopAwA3AwAgCCABQcgBaikDADcDACAMIAFB+AFqKQMANwMAIA0gAUGAAmopAwA3AwAgDiABQYgCaikDADcDACAPIAFBkAJqKQMANwMAIBAgAUGYAmopAwA3AwAgAiABKQPAATcDoAIgAiABKQPwATcD0AIgA0UEQCACQYAGaiAKQeAA/AoAAAsgBSARKQMANwMAIAYgEykDADcDACAEIAkpAwA3AwAgByASKQMANwMAIAggFCkDADcDACAMIBUpAwA3AwAgDSAWKQMANwMAIA4gFykDADcDACAPIBgpAwA3AwAgECAZKQMANwMAIAIgAikDgAY3A6ACIAIgAikDsAY3A9ACIANFBEAgAkHgBmogAkGgAmpB4AD8CgAACyACQaACaiIJIAJB4AZqIhEQXiADRQRAIBEgCUHgAPwKAAALIAJBoAJqIgkgAkGABmoiESACQeAGahA/IANFBEAgESAJQeAA/AoAAAsgA0UEQCACQcAEaiACQYAGakHgAPwKAAALIAJBoAVqEHUgBSACQcgFaikDADcDACAGIAJBwAVqKQMANwMAIAQgAkG4BWopAwA3AwAgByACQbAFaikDADcDACAIIAJBqAVqKQMANwMAIAwgAkHYBWopAwA3AwAgDSACQeAFaikDADcDACAOIAJB6AVqKQMANwMAIA8gAkHwBWopAwA3AwAgECACQfgFaikDADcDACACIAIpA6AFNwOgAiACIAIpA9AFNwPQAiADRQRAIAJB4AZqIAJBoAJqQeAA/AoAAAsgAkGgAmoiBSACQeAGaiIGEF4gA0UEQCAGIAVB4AD8CgAACyADRQRAIAJBoAJqIAJB4AZqQeAA/AoAAAsgAkHgBmoiAyACQcAEaiIHIAJBoAJqIgQQPyAHIAJBwAFqIAMQ1QEgBCACIAEQPyADIAQgAUHgAGoiBRA/IAJBgAZqIgggAyABQcABaiIGED8gBBB1IAMgCCAEED8gAkHgAGoiCCAHIAMQjQEgBCAIED0gAikDsAIhGiACKQOoAiEbIAACfiACKAKgAkEBRgRAIAAgGjcDECAAIBs3AwhCAQwBCyACQdABaiACQbgCaiIEQdAA/AoAACACIBo3A8gBIAIgGzcDwAEgAkHIAmoiByABQShqKQMANwMAIAJBwAJqIgggAUEgaikDADcDACAEIAFBGGopAwA3AwAgAkGwAmoiDCABQRBqKQMANwMAIAJBqAJqIg0gAUEIaikDADcDACACQdgCaiIOIAFBMGoiA0EIaikDADcDACACQeACaiIPIANBEGopAwA3AwAgAkHoAmoiECADQRhqKQMANwMAIAJB8AJqIhEgA0EgaikDADcDACACQfgCaiITIANBKGopAwA3AwAgAiABKQMANwOgAiACIAMpAwA3A9ACQQAiA0UEQCACQeAGaiACQaACakHgAPwKAAALIAJBoAJqIgkgAkHgBmoiEhBeIANFBEAgEiAJQeAA/AoAAAsgA0UEQCACQaAFaiACQeAGakHgAPwKAAALIAJB4AZqIhIgBSAGED8gAkGgAmoiCRB1IAJBgAZqIhQgEiAJED8gCSACQaAFaiIVIBQQjQEgAkHABGogCSACQcABahA/IAkgARC0AiAVIAkgBRA/IAcgBkEoaikDADcDACAIIAZBIGopAwA3AwAgBCAGQRhqKQMANwMAIAwgBkEQaikDADcDACANIAZBCGopAwA3AwAgDiABQfABaiIEQQhqKQMANwMAIA8gBEEQaikDADcDACAQIARBGGopAwA3AwAgESAEQSBqKQMANwMAIBMgBEEoaikDADcDACACIAYpAwA3A6ACIAIgBCkDADcD0AIgA0UEQCASIAlB4AD8CgAACyACQaACaiIEIAJB4AZqIgcQXiADRQRAIAcgBEHgAPwKAAALIANFBEAgAkGABmogAkHgBmpB4AD8CgAACyACQaACaiIIEHUgAkHgBmoiBCACQYAGaiIHIAgQPyAHIAJBoAVqIgggBBDVASACQYADaiAHIAJBwAFqED8gBCABELQCIAggBCAGED8gAkGIB2ogBUEoaikDADcDACACQYAHaiAFQSBqKQMANwMAIAJB+AZqIAVBGGopAwA3AwAgAkHwBmogBUEQaikDADcDACACQegGaiAFQQhqKQMANwMAIAJBmAdqIAFBkAFqIgFBCGopAwA3AwAgAkGgB2ogAUEQaikDADcDACACQagHaiABQRhqKQMANwMAIAJBsAdqIAFBIGopAwA3AwAgAkG4B2ogAUEoaikDADcDACACIAUpAwA3A+AGIAIgASkDADcDkAcgA0UEQCAHIARB4AD8CgAACyACQeAGaiIBIAJBgAZqIgUQXiADRQRAIAUgAUHgAPwKAAALIANFBEAgAkHgBmogAkGABmpB4AD8CgAACyACQYAGaiIBIAJBoAVqIAJB4AZqENUBIAJB4ANqIAEgAkHAAWoQPyADRQRAIAJBoAJqIAJBwARqQeAA/AoAAAsgAEEIaiACQaACakGgAvwKAABCAAs3AwAgAkHAB2okAAveGgIVfxB+IwBBgARrIgMkAAJAAkACQCABKAIMIgRBf0cEQCACKAIMIgVBf0cNAQtB0c7FAC0AABpBIEEIENYEIgVFDQEgBUIANwMAIAVBGGpCADcDACAFQRBqQgA3AwAgBUEIakIANwMAQX8hCkEBIQ1BASEIDAILIAQgBWoiCkEBaiIIQQV0IQQCQCAIQf///z9LIARB+P///wdLcg0AAn8gBEUEQEEIIQVBAAwBC0HRzsUALQAAGkEIIQYgBEEIENYEIgVFDQEgCAshDQJAAkACQAJAIAhBAk8EQCAKQQdxIQYgCkEBa0EHTw0BIAUhBAwCCyAFIQQgCA0CDAMLIApBeHEhByAFIQQDQCAEQgA3AwAgBEEYakIANwMAIARBEGpCADcDACAEQQhqQgA3AwAgBEEgakIANwMAIARBKGpCADcDACAEQTBqQgA3AwAgBEE4akIANwMAIARBQGtCADcDACAEQcgAakIANwMAIARB0ABqQgA3AwAgBEHYAGpCADcDACAEQeAAakIANwMAIARB6ABqQgA3AwAgBEHwAGpCADcDACAEQfgAakIANwMAIARBmAFqQgA3AwAgBEGQAWpCADcDACAEQYgBakIANwMAIARBgAFqQgA3AwAgBEG4AWpCADcD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AyAMNwMAIAIgEjcDwAQgAkG4BGogCCkDADcDACACQbAEaiAHKQMANwMAIAJBqARqIAYpAwA3AwAgAkGgBGogBSkDADcDACACQZgEaiAJKQMANwMAIAJBkARqIAQpAwA3AwAgAkGIBGogAykDADcDACACIAIpA8AENwOABCACIAJBgANqQcAB/AoAAANAIAJBgANqIgkiASACIAIQ6wEgAiABQcAB/AoAACAQQgKDIBBCAYghEFANAAsgAkHgBmoiASACKQMgIgo3AwAgAkGgA2ogCjcDACACQcgGaiIDIAJBCGopAwAiCjcDACACQdAGaiIEIAJBEGopAwAiCzcDACACQegGaiIFIAJBKGopAwAiDDcDACACQfAGaiIGIAJBMGopAwAiDTcDACACQfgGaiIHIAJBOGopAwAiDjcDACACQdgGaiIIIAJBGGopAwAiDzcDACACQYgDaiAKNwMAIAJBkANqIAs3AwAgAkGYA2ogDzcDACACQagDaiAMNwMAIAJBsANqIA03AwAgAkG4A2ogDjcDACACIAIpAwAiCjcDwAYgAiAKNwOAAyADIAJByABqKQMANwMAIAQgAkHQAGopAwA3AwAgCCACQdgAaikDADcDACABIAIpA2A3AwAgBSACQegAaikDADcDACAGIAJB8ABqKQMANwMAIAcgAkH4AGopAwA3AwAgAiACKQNANwPABiACQfgDaiAHKQMANwMAIAJB8ANqIAYpAwA3AwAgAkHoA2ogBSkDADcDACACQeADaiABKQMANwMAIAJB2ANqIAgpAwA3AwAgAkHQA2ogBCkDADcDACACQcgDaiADKQMANwMAIAIgAikDwAY3A8ADIAJB2AFqIAJBmAFqKQMAIgo3AwAgAkHQAWogAkGQAWopAwAiCzcDACACQcgBaiACQYgBaikDACIMNwMAIAIgAikDgAEiDTcDwAEgAkHgAWogAikDoAEiDjcDACACQegBaiACQagBaikDACIPNwMAIAJB8AFqIAJBsAFqKQMAIhE3AwAgAkH4AWogAkG4AWopAwAiEjcDACAHIBI3AwAgBiARNwMAIAUgDzcDACABIA43AwAgCCAKNwMAIAQgCzcDACADIAw3AwAgAiANNwPABiACQbgEaiAHKQMANwMAIAJBsARqIAYpAwA3AwAgAkGoBGogBSkDADcDACACQaAEaiAB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EyAPKQMANwMAIBAgDikDADcDACAUIA0pAwA3AwAgFSAEKQMANwMAIBcgDCkDADcDACAYIAMpAwA3AwAgGSACKQMANwMAIAEgASkDkA43A4gGIAFBgA1qIBMpAwA3AwAgAUH4DGogECkDADcDACABQfAMaiAUKQMANwMAIAFB6AxqIBUpAwA3AwAgAUHgDGogFykDADcDACABQdgMaiAYKQMANwMAIAFB0AxqIBkpAwA3AwAgASABKQOIBjcDyAwgESASEL0DIBogBSkDACIlNwMAIBsgBikDACImNwMAIBwgBykDACInNwMAIB0gCCkDACIoNwMAIB4gCSkDACIpNwMAIAIgCikDADcDACADIAspAwA3AwAgDCApNwMAIAQgKDcDACANICc3AwAgDiAmNwMAIA8gJTcDACABIAEpA4gDIiU3AwggASAlNwOQDiATIA8pAwA3AwAgECAOKQMANwMAIBQgDSkDADcDACAVIAQpAwA3AwAgFyAMKQMANwMAIBggAykDADcDACAZIAIpAwA3AwAgASABKQOQDjcDiAYgAUHADWogEykDADcDACABQbgNaiAQKQMANwMAIAFBsA1qIBQpAwA3AwAgAUGoDWogFSkDADcDACABQaANaiAXKQMANwMAIAFBmA1qIBgpAwA3AwAgAUGQDWogGSkDADcDACABIAEpA4gGNwOIDUEARQRAIAFBiAlqIAFBiAxqQcAB/AoAAAsgASAAQYADajYCzA0gASAWNgLIDSABQQhqIiEgAUHIDWoiIhC9AyAPIBopAwAiJTcDACAOIBspAwAiJjcDACANIBwpAwAiJzcDACAEIB0pAwAiKDcDACAMIB4pAwAiKTcDACABQdgNaiIAIAFBEGoiIykDADcDACABQeANaiICIAFBGGoiJCkDADcDACABQegNaiIDICk3AwAgAUHwDWoiFiAoNwMAIAFB+A1qIhEgJzcDACABQYAOaiISICY3AwAgAUGIDmoiHyAlNwMAIAEgASkDCCIlNwOQDiABICU3A9ANIAUgHykDADcDACAGIBIpAwA3AwAgByARKQMANwMAIAggFikDADcDACAJIAMpAwA3AwAgCyACKQMANwMAIAogACkDADcDACABIAEpA9ANNwOIAyATIAUpAwA3AwAgECAGKQMANwMAIBQgBykDADcDACAVIAgpAwA3AwAgFyAJKQMANwMAIBggCykDADcDACAZIAopAwA3AwAgASABKQOIAzcDiAYgISAiEL0DIA8gGikDACIlNwMAIA4gGykDACImNwMAIA0gHCkDACInNwMAIAQgHSkDACIoNwMAIAwgHikDACIpNwMAIAAgIykDADcDACACICQpAwA3AwAgAyApNwMAIBYgKDcDACARICc3AwAgEiAmNwMAIB8gJTcDACABIAEpAwgiJTcDkA4gASAlNwPQDSAFIB8pAwA3AwAgBiASKQMANwMAIAcgESkDADcDACAIIBYpAwA3AwAgCSADKQMANwMAIAsgAikDADcDACAKIAApAwA3AwAgASABKQPQDTcDiAMgAUGAB2ogBSkDADcDACABQfgGaiAGKQMANwMAIAFB8AZqIAcpAwA3AwAgAUHoBmogCCkDADcDACABQeAGaiAJKQMANwMAIAFB2AZqIAspAwA3AwAgAUHQBmogCikDADcDACABIAEpA4gDNwPIBiAhICIQvQMgDyAaKQMAIiU3AwAgDiAbKQMAIiY3AwAgDSAcKQMAIic3AwAgBCAdKQMAIig3AwAgDCAeKQMAIik3AwAgACAjKQMANwMAIAIgJCkDADcDACADICk3AwAgFiAoNwMAIBEgJzcDACASICY3AwAgHyAlNwMAIAEgASkDCCIlNwOQDiABICU3A9ANIAUgHykDADcDACAGIBIpAwA3AwAgByARKQMANwMAIAggFikDADcDACAJIAMpAwA3AwAgCyACKQMANwMAIAogACkDADcDACABIAEpA9ANNwOIAyABQcAHaiAFKQMANwMAIAFBuAdqIAYpAwA3AwAgAUGwB2ogBykDADcDACABQagHaiAIKQMANwMAIAFBoAdqIAkpAwA3AwAgAUGYB2ogCykDADcDACABQZAHaiAKKQMANwMAIAEgASkDiAM3A4gHICBFBEAgAUGIDGogAUGIBmpBwAH8CgAACyAgRQRAIAFByApqIAFBiAxqQcAB/AoAAAsgAUEIaiABQYgJakGAA/wKAAAgAUHIB2ohBSABQcgGaiEGIAFByAVqIQcgAUHIAmohCCABQYgFaiEJIAFBiAJqIQogAUGIBGohCyABQYgBaiEMIAFByANqIQ0gAUHIAGohDiABQcgEaiEPIAFByAFqIRNBgLXCACkDACElQfi0wgApAwAhJkHwtMIA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QTBsIQEgBSEGAkACQAJAA0AgAUUNASAGQQFrIQYgAUEwayIBIANqQfjDwgBBMBDxA0UNAAsgBkEBaiIBIAUgASAFSRshBQwBC0HRzsUALQAAGkEwQQgQ1gQiAUUNASABQgA3AwAgAUEoakIANwMAIAFBIGpCADcDACABQRhqQgA3AwAgAUEQakIANwMAIAFBCGpCADcDAEF/IQZBASEFIAcEQCADIAdBMGwQ3wQLIAEhA0EBIQcLIAAgBjYCDCAAIAU2AgggACADNgIEIAAgBzYCACAEQbADaiQADwtBCEEwEP8EAAtB9J7BAEE0QaifwQAQ/gMAC9AUAg1/AX4jAEGwD2siAyQAQQBFBEAgAyABQeAA/AoAAAsgA0HgAGohASAERQRAIAEgAkHgAPwKAAALIARFBEAgA0HwAWpBAEHgAPwLAAsCQAJAAkACQAJAAkAgAyADQfABaiICEKYEBEAgASACEKYEDQELIANB8AFqIgJBAEHgAPwLACADIAIQpgQEQCABIAIQpgQNAQsgA0HwAWoQJiADQcAIaiADQbgCaikDADcDACADQbgIaiADQbACaikDADcDACADQbAIaiADQagCaikDADcDACADQagIaiADQaACaikDADcDACADQaAIaiADQZgCaikDADcDACADQdAIaiADQfgCaikDADcDACADQdgIaiADQYADaikDADcDACADQeAIaiADQYgDaikDADcDACADQegIaiADQZADaikDADcDACADQfAIaiADQZgDaikDADcDACADIAMpA5ACNwOYCCADIAMpA/ACNwPICCADQaAJaiADQcgDaikDADcDACADQZgJaiADQcADaikDADcDACADQZAJaiADQbgDaikDADcDACADQYgJaiADQbADaikDADcDACADQYAJaiADQagDaikDADcDACADIAMpA6ADNwP4CCADQagJaiIPIAEQXiADQZANaiADQQhqIgIpAwA3AwAgA0GYDWogA0EQaiIEKQMANwMAIANBoA1qIANBGGoiBSkDADcDACADQagNaiADQSBqIgcpAwA3AwAgA0GwDWogA0EoaiIJKQMANwMAIANBwA1qIANBOGoiCikDADcDACADQcgNaiADQUBrIgspAwA3AwAgA0HQDWogA0HIAGoiDCkDADcDACADQdgNaiADQdAAaiINKQMANwMAIANB4A1qIANB2ABqIg4pAwA3AwAgAyADKQMANwOIDSADIAMpAzA3A7gNIANByAtqIgggA0GIDWpB4AD8CgAAIANBqAxqIgYgCBBeIANBkA5qIAkpAwA3AwAgA0GIDmogBykDADcDACADQYAOaiAFKQMANwMAIANB+A1qIAQpAwA3AwAgA0HwDWogAikDADcDACADQaAOaiAKKQMANwMAIANBqA5qIAspAwA3AwAgA0GwDmogDCkDADcDACADQbgOaiANKQMANwMAIANBwA5qIA4pAwA3AwAgAyADKQMANwPoDSADIAMpAzA3A5gOIANB6ApqIgggBiADQegNahA/IANB0A5qIAIpAwA3AwAgA0HYDmogBCkDADcDACADQeAOaiAFKQMANwMAIANB6A5qIAcpAwA3AwAgA0HwDmogCSkDADcDACADQYAPaiAKKQMANwMAIANBiA9qIAspAwA3AwAgA0GQD2ogDCkDADcDACADQZgPaiANKQMANwMAIANBoA9qIA4pAwA3AwAgAyADKQMANwPIDiADIAMpAzA3A/gOIAYgA0GYCGogA0HIDmoQdyADQYgKaiICIAggBhDVASAGIAIgA0HICGoQ1QEgDyAGEKYEIAMoAvwHIgIEQCADKAKACCACQQJ0EN8ECwJAIAMoAvQBIgJFDQAgAiACQQxsQRNqQXhxIgVqQQlqIgJFDQAgAygC8AEgBWsgAhDfBAsgAygC8AQiAkGAgICAeEYgAkVyRQRAIAMoAvQEIAJBAnQQ3wQLDQAgA0HwAWoiAiADQeAA/AoAACADQcgOaiIGIAIQ9wMgAygCzA4hAiADKALIDiEEIAMoAtAOIgVBAkcNASACKAIEIQUgAigCACEHIAYgAkEIakHYAPwKAAAgBARAIAIgBEEwbBDfBAsgA0H4DWogA0HQDmopAwA3AwAgA0GADmogA0HYDmopAwA3AwAgA0GIDmogA0HgDmopAwA3AwAgA0GQDmogA0HoDmopAwA3AwAgA0GgDmogA0H4DmopAwA3AwAgA0GoDmogA0GAD2opAwA3AwAgA0GwDmogA0GID2opAwA3AwAgA0G4DmogA0GQD2opAwA3AwAgA0HADmogA0GYD2opAwA3AwAgAyAFNgLsDSADIAc2AugNIAMgAykDyA43A/ANIAMgAykD8A43A5gOIANB8AFqIgIgAUHgAPwKAAAgA0HIDmogAhD3AyADKALMDiEBIAMoAsgOIQIgAygC0A4iBEECRw0CIAEoAgQhBCABKAIAIQUgA0GIDWogAUEIakHYAPwKAAAgAgRAIAEgAkEwbBDfBAsgA0HYDmogA0GQDWoiASkDADcDACADQeAOaiADQZgNaikDADcDACADQegOaiADQaANaikDADcDACADQfAOaiADQagNaikDADcDACADQYAPaiADQbgNaikDADcDACADQYgPaiADQcANaikDADcDACADQZAPaiADQcgNaikDADcDACADQZgPaiADQdANaikDADcDACADQaAPaiADQdgNaikDADcDACADIAQ2AswOIAMgBTYCyA4gAyADKQOIDTcD0A4gAyADKQOwDTcD+A4gA0HIC2oiAiADQegNahCmASADQQA2ApANIANCgICAgBA3AogNIANB0P/AADYC9AEgA0KggICADjcC+AEgAyADQYgNaiIENgLwASACIANB8AFqIgIQxQINBSADQcgBaiABKAIANgIAIAMgAykCiA03A8ABIANBqAxqIgUgA0GYDmoQpgEgA0EANgKQDSADQoCAgIAQNwKIDSADQdD/wAA2AvQBIANCoICAgA43AvgBIAMgBDYC8AEgBSACEMUCDQUgA0HYAWogASgCADYCACADIAMpAogNNwPQASAEIANByA5qEKYBIANBADYC8AogA0KAgICAEDcC6AogA0HQ/8AANgL0ASADQqCAgIAONwL4ASADIANB6ApqIgE2AvABIAQgAhDFAg0FIANB6AFqIANB8ApqKAIANgIAIAMgAykC6Ao3A+ABIAIgA0H4DmoQpgEgA0EANgLQCCADQoCAgIAQNwLICCADQdD/wAA2AqwJIANCoICAgA43ArAJIAMgA0HICGo2AqgJIAIgA0GoCWoQxQINBSADQaAIaiADQdAIaigCADYCACADIAMpAsgINwOYCCADQQU2AowKIANB7IPBADYCiAogA0IENwKUCiADQoCAgIDABCIQIANBmAhqrYQ3A4ALIAMgECADQeABaq2ENwP4CiADIBAgA0HQAWqthDcD8AogAyAQIANBwAFqrYQ3A+gKIAMgATYCkAogAEEEaiADQYgKahDSAiADKAKYCCIBBEAgAygCnAggARDfBAsgAygC4AEiAQRAIAMoAuQBIAEQ3wQLIAMoAtABIgEEQCADKALUASABEN8ECyADKALAASIBBEAgAygCxAEgARDfBAsgAEEBNgIADAMLIABBCGogA0HAAfwKAAAgAEEANgIADAILIAMgBTYC0A4gAyACNgLMDiADIAQ2AsgODAILIAMgBDYC0A4gAyABNgLMDiADIAI2AsgODAELIANBsA9qJAAPC0GAi8AAQSsgA0HIDmpBrIvAAEGkjcAAEMoDAAtB+P/AAEE3IANBrw9qQej/wABB/IDBABDKAwALrxkCAX8bfiMAQYAGayIBJAAgAUHwBWpCA0IAQsau0OHB5sfvdEIAEMkDIAFB4AVqIAEpA/AFQn6DIgdCAEIAQv3/8//P///5iX8QyQMgAUHQBWogASkD6AUiAkIAQqvV/v///7//uX9CABDJAyABQcAFaiACQgBC///Piuv//9UeQgAQyQMgAUGwBWogAkIAQqTsw7WP1LSY5wBCABDJAyABQaAFaiACQgBCv6WUnM/w0rvkAEIAEMkDIAFBkAVqIAJCAELX2a6a5PbpjcsAQgAQyQMgAUGABWogAkIAQprN/8ujvcSAGkIAEMkDIAFB8ARqQgNCAELxicTO4NS5uwpCABDJAyABQeAEaiABKQPwBCIEIAEpA8AFIgUgASkD+AV8IgYgASkD2AUgASkD0AUiAiAHfCACVK18fCIDfCIHQgBCAEL9//P/z///+Yl/EMkDIAFB0ARqIAEpA+gEIgJCAEKr1f7///+//7l/QgAQyQMgAUHABGogAkIAQv//z4rr///VHkIAEMkDIAFBsARqIAJCAEKk7MO1j9S0mOcAQgAQyQMgAUGgBGogAkIAQr+llJzP8NK75ABCABDJAyABQZAEaiACQgBC19mumuT26Y3LAEIAEMkDIAFBgARqIAJCAEKazf/Lo73EgBpCABDJAyABQfADakIDQgBC1e3W5MTt0fKNf0IAEMkDIAFB4ANqIAEpA/ADIgggASkDwAQiCSABKQP4BCAEIAdWrXwiBCABKQOwBSIKIAMgBlStIAEpA8gFIAUgBlatfHx8IgV8IgN8IgYgASkD2AQgASkD0AQiAiAHfCACVK18fCILfCIHQgBCAEL9//P/z///+Yl/EMkDIAFB0ANqIAEpA+gDIgJCAEKr1f7///+//7l/QgAQyQMgAUHAA2ogAkIAQv//z4rr///VHkIAEMkDIAFBsANqIAJCAEKk7MO1j9S0mOcAQgAQyQMgAUGgA2ogAkIAQr+llJzP8NK75ABCABDJAyABQZADaiACQgBC19mumuT26Y3LAEIAEMkDIAFBgANqIAJCAEKazf/Lo73EgBpCABDJAyABQfACakIDQgBCwIf2nJmV4vXnAEIAEMkDIAFB4AJqIAEpA/ACIgwgASkDwAMiDSABKQP4AyAHIAhUrXwiCCADIARUrSIDIAEpA6AFIg4gASkDuAUgBSAKVK18fCIKfCIEIAEpA7AEfCIFIAYgC1atIAEpA8gEIAYgCVStfHx8Igl8Igt8IgYgASkD2AMgASkD0AMiAiAHfCACVK18fCIPfCIHQgBCAEL9//P/z///+Yl/EMkDIAFB0AJqIAEpA+gCIgJCAEKr1f7///+//7l/QgAQyQMgAUHAAmogAkIAQv//z4rr///VHkIAEMkDIAFBsAJqIAJCAEKk7MO1j9S0mOcAQgAQyQMgAUGgAmogAkIAQr+llJzP8NK75ABCABDJAyABQZACaiACQgBC19mumuT26Y3LAEIAEMkDIAFBgAJqIAJCAEKazf/Lo73EgBpCABDJAyABQfABakIDQgBCrarmqNvQz7yaf0IAEMkDIAFB4AFqIAEpA/ABIhAgASkDwAIiESABKQP4AiAHIAxUrXwiDCAIIAtWrSILIAMgBFatIhIgASkDkAUiEyABKQOoBSAKIA5UrXx8Igp8IgMgASkDoAR8IgggBSAJVq0gASkDuAQgBCAFVq18fHwiDnwiBCABKQOwA3wiBSAGIA9WrSABKQPIAyAGIA1UrXx8fCINfCIJfCIGIAEpA9gCIAEpA9ACIgIgB3wgAlStfHwiD3wiB0IAQgBC/f/z/8////mJfxDJAyABQdABaiABKQPoASICQgBCq9X+////v/+5f0IAEMkDIAFBwAFqIAJCAEL//8+K6///1R5CABDJAyABQbABaiACQgBCpOzDtY/UtJjnAEIAEMkDIAFBoAFqIAJCAEK/pZScz/DSu+QAQgAQyQMgAUGQAWogAkIAQtfZrprk9umNywBCABDJAyABQYABaiACQgBCms3/y6O9xIAaQgAQyQMgAUHwAGpCA0IAQqrHq5bZ/KPMEUIAEMkDIAFB4ABqIAEpA3AiFCABKQPAASIVIAEpA/gBIAcgEFStfCIQIAkgDFStIgwgBCALVK0iCyADIBJUrSISIAEpA4AFIhYgASkDmAUgCiATVK18fCITfCIJIAEpA5AEfCIKIAggDlatIAEpA6gEIAMgCFatfHx8Ig58IgMgASkDoAN8IgggBSANVq0gASkDuAMgBCAFVq18fHwiDXwiBCABKQOwAnwiBSAGIA9WrSABKQPIAiAGIBFUrXx8fCIPfCIRfCIGIAEpA9gBIAEpA9ABIgIgB3wgAlStfHwiF3wiB0IAQgBC/f/z/8////mJfxDJAyABQdAAaiABKQNoIgJCAEKr1f7///+//7l/QgAQyQMgAUFAayACQgBC///Piuv//9UeQgAQyQMgAUEwaiACQgBCpOzDtY/UtJjnAEIAEMkDIAFBIGogAkIAQr+llJzP8NK75ABCABDJAyABQRBqIAJCAELX2a6a5PbpjcsAQgAQyQMgASACQgBCms3/y6O9xIAaQgAQyQMCQCABKQMIIAEpAwAiGCABKQOIASABKQOAASIZIAEpA4gCIAEpA4ACIhogASkDiAMgASkDgAMiGyABKQOIBCABKQOABCIcIAkgElStIAEpA4gFIBMgFlStfHx8IgIgHFStfCACIAIgCiAOVq0gASkDmAQgCSAKVq18fHwiCVatfCAJIAMgC1StIgl8IgIgCVStfHwiCSAbVK18IAkgCSABKQOYAyACIAIgASkDkAN8IgpWrXwgCiAKIAggDVatIAEpA6gDIAMgCFatfHx8IgJWrXx8IgNWrXwgAyAEIAxUrSIIIAJ8IgIgCFStIgh8IgMgCFStfHwiCCAaVK18IAggASkDmAIgAyADIAEpA5ACfCIJVq18IAkgCSABKQOoAiACIAIgASkDoAJ8IgNWrXwgAyADIAUgD1atIAEpA7gCIAQgBVatfHx8IgJWrXx8IgRWrXx8IgUgCFStfCAFIAQgECARVq0iAyACfCICIANUrSIDfCIEIANUrSIDfCIFIANUrXx8IgMgGVStfCADIAEpA5gBIAUgBSABKQOQAXwiCFatfCAIIAEpA6gBIAQgBCABKQOgAXwiBVatfCAFIAUgASkDuAEgAiACIAEpA7ABfCIEVq18IAQgBCAGIBdWrSABKQPIASAGIBVUrXx8fCICVq18fCIGVq18fCIEIAhUrXx8IgUgA1StfCAFIAQgBiACIAEpA3ggByAUVK18IgN8IgkgA1StIgN8IgIgA1StIgN8IgYgA1StIgN8IgQgA1StfHwiAyAYVK18IAMgASkDGCAEIAQgASkDEHwiBFatfCAEIAEpAyggBiAGIAEpAyB8IghWrXwgCCAIIAEpAzggAiACIAEpAzB8IgZWrXwgBiAGIAEpA0ggCSABKQNAIgV8IgIgBVStfCACIAEpA1ggByABKQNQIgV8IAVUrXx8IgUgAlStfHwiBlatfHwiAlatfHwiByAEVK18fCIEIANUrXwiA0Kazf/Lo73EgBpSDQACQAJAIARC19mumuT26Y3LAFYNAEKazf/Lo73EgBohAyAEQtfZrprk9umNywBSDQIgB0K/pZScz/DSu+QAVg0AIAdCv6WUnM/w0rvkAFIEQELX2a6a5PbpjcsAIQQMAwsgAkKk7MO1j9S0mOcAVg0AIAJCpOzDtY/UtJjnAFINASAGQv//z4rr///VHlYNACAGQv//z4rr///VHlIEQEKk7MO1j9S0mOcAIQIMAgsgBUKr1f7///+//7l/Wg0AQv//z4rr///VHiEGQqTsw7WP1LSY5wAhAgwBC0J/QgAgBELX2a6a5PbpjcsAfSIEIAdCv6WUnM/w0rvkAFQgB0K/pZScz/DSu+QAfSIHIAJCpOzDtY/UtJjnAFQgAkKk7MO1j9S0mOcAfSICIAZC///Piuv//9UeVCAGQv//z4rr///VHn0iBiAFQqvV/v///7//uX9UrSIIVHKtIglUcq0iClRyrSILVBshAyAGIAh9IQYgAiAJfSECIAcgCn0hByAEIAt9IQQgBULVqoGAgIDAgMYAfCEFDAELQr+llJzP8NK75AAhB0LX2a6a5PbpjcsAIQQLIABCADcDMCAAIAU3AyggACAGNwMgIAAgAjcDGCAAIAc3AxAgACAENwMIIAAgAzcDACAAQThqQgA3AwAgAEFAa0IANwMAIABByABqQgA3AwAgAEHQAGpCADcDACAAQdgAakIANwMAIAFBgAZqJAALwBgCEn8QfiMAQdABayIEJAACQAJAAkAgASgCDCIDQX9HBEAgAigCDCIFQX9HDQELQdHOxQAtAAAaQTBBCBDWBCIFRQ0BIAVCADcDACAFQShqQgA3AwAgBUEgakIANwMAIAVBGGpCADcDACAFQRBqQgA3AwAgBUEIakIANwMAQX8hCkEBIQxBASEJDAILIAMgBWoiCkEBaiIJrUIwfiIVpyEDAkAgFUIgiKcgA0H4////B0tyDQACfyADRQRAQQghBUEADAELQdHOxQAtAAAaQQghBiADQQgQ1gQiBUUNASAJCyEMAkACQAJAAkAgCUECTwRAIApBB3EhBiAKQQFrQQdPDQEgBSEDDAILIAUhAyAJDQIMAwsgCkF4cSEIIAUhAwNAIANCADcDACADQShqQgA3AwAgA0EgakIANwMAIANBGGpCADcDACADQRBqQgA3AwAgA0EIakIANwMAIANBMGpCADcDACADQThqQgA3AwAgA0FAa0IANwMAIANByABqQgA3AwAgA0HQAGpCADcDACADQdgAakIANwMAIANB4ABqQgA3AwAgA0HoAGpCADcDACADQfAAakIANwMAIANB+ABqQgA3AwAgA0GAAWpCADcDACADQYgBakIANwMAIANBuAFqQgA3AwAgA0GwAWpCADcDACADQagBakIANwMAIANBoAFqQgA3AwAgA0GYAWpCADcDACADQZABakIANwMAIANBwAFqQgA3AwAgA0HIAWpCADcDACADQdABakIANwMAIANB2AFqQgA3AwAgA0HgAWpCADcDACADQegBakIANwMAIANB8AFqQgA3AwAgA0H4AWpCADcDACADQYACakIANwMAIANBiAJqQgA3AwAgA0GQAmpCADcDACADQZgCakIANwMAIANByAJqQgA3AwAgA0HAAmpCADcDACADQbgCakIANwMAIANBsAJqQgA3AwAgA0GoAmpCADcDACADQaACakIANwMAIANB+AJqQgA3AwAgA0HwAmpCADcDACADQegCakIANwMAIANB4AJqQgA3AwAgA0HYAmpCADcDACADQdACakIANwMAIANBgANqIQMgCEEIayIIDQALCyAGRQ0AA0AgA0IANwMAIANBKGpCADcDACADQSBqQgA3AwAgA0EYakIANwMAIANBEGpCADcDACADQQhqQgA3AwAgA0EwaiEDIAZBAWsiBg0ACwsgA0IANwMAIANBKGpCADcDACADQSBqQgA3AwAgA0EYakIANwMAIANBEGpCADcDACADQQhqQgA3AwALIAEoAggiB0UNAiACKAIIIgZFDQIgASgCBCIIIAdBMGxqIRAgAigCBCINQTBBACAGG2ohESANIAZBMGxqIRIgCEEwaiEDIAdBAWtB/////wBxIRMgBkEBa0H/////AHEh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AwAgB0GoBWogB0HoBmopAwA3AwAgB0GwBWogAikDADcDACAHQbgFaiAHQfgGaikDADcDACAHQcAFaiAHQYAHaikDADcDACAHQcgFaiAHQYgHaikDADcDACAHIAcpA5AGNwPQBCAHIAcpA9AGNwOQBSAHQYgGaiAHQcgHaikDADcDACAHQYAGaiAHQcAHaikDADcDACAHQfgFaiAHQbgHaikDADcDACAHQfAFaiADKQMANwMAIAdB6AVqIAdBqAdqKQMANwMAIAdB4AVqIAdBoAdqKQMANwMAIAdB2AVqIAdBmAdqKQMANwMAIAcgBykDkAc3A9AFIAdBkAlqIAdB8ABqEPcCIAdBsAlqIgEgB0GAAWoQ9wIgB0HQCWogB0GQAWoQ9wIgB0HwCWoiAiAHQaABahD3AiAHQZAKaiAHQbABahD3AiAHQbAKaiIDIAdBwAFqEPcCIAdBiAhqIAdByAlqKQMANwMAIAdBgAhqIAdBwAlqKQMANwMAIAdB+AdqIAdBuAlqKQMANwMAIAdB8AdqIAEpAwA3AwAgB0HoB2ogB0GoCWopAwA3AwAgB0HgB2ogB0GgCWopAwA3AwAgB0HYB2ogB0GYCWopAwA3AwAgB0GYCGogB0HYCWopAwA3AwAgB0GgCGogB0HgCWopAwA3AwAgB0GoCGogB0HoCWopAwA3AwAgB0GwCGogAikDADcDACAHQbgIaiAHQfgJaikDADcDACAHQcAIaiAHQYAKaikDADcDACAHQcgIaiAHQYgKaikDADcDACAHIAcpA5AJNwPQByAHIAcpA9AJNwOQCCAHQYgJaiAHQcgKaikDADcDACAHQYAJaiAHQcAKaikDADcDACAHQfgIaiAHQbgKaikDADcDACAHQfAIaiADKQMANwMAIAdB6AhqIAdBqApqKQMANwMAIAdB4AhqIAdBoApqKQMANwMAIAdB2AhqIAdBmApqKQMANwMAIAcgBykDkAo3A9AIIAdB0AFqIhYgB0HQBGpBwAH8CgAAIAdBkANqIAdB0AdqQcAB/AoAACAHQZAnaiF6IwBB0C5rIgYkACAGQYgqakG0jcAAQcAAELcCIAZBgAdqIAYpA6AqIowBQgBCifWrnLWLv5ZzQgAQyQMgBkHAB2ogBikDmCoijgFCAEKJ9auctYu/lnNCABDJAyAGQYAIaiAGKQOQKiKNAUIA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NwOIKiAGQcgtaiAXKQMANwMAIAZBwC1qIBgpAwA3AwAgBkG4LWogGykDADcDACAGQbAtaiAcKQMANwMAIAZBqC1qIB0pAwA3AwAgBkGgLWogHykDADcDACAGQZgtaiAgKQMANwMAIAYgBikDiCo3A5AtIBkgHhC9AyAkIAEpAwAijAE3AwAgJyACKQMAIo4BNwMAICggAykDACKNATcDACApIAQpAwAikAE3AwAgIiAFKQMANwMAICMgESkDADcDACAlIAgpAwA3AwAgDyCQATcDACAUII0BNwMAIAsgjgE3AwAgCSCMATcDACAGIAYpA4gnIowBNwOIJCAGIIwBNwOIISAXIAkpAwA3AwAgGCALKQMANwMAIBsgFCkDADcDACAcIA8pAwA3AwAgHSAlKQMANwMAIB8gIykDADcDACAgICIpAwA3AwAgBiAGKQOIITcDiCogBkGILmogFykDADcDACAGQYAuaiAYKQMANwMAIAZB+C1qIBspAwA3AwAgBkHwLWogHCkDADcDACAGQegtaiAdKQMANwMAIAZB4C1qIB8pAwA3AwAgBkHYLWogICkDADcDACAGIAYpA4gqNwPQLSAZIB4QvQMgJCABKQMAIowBNwMAICcgAikDACKOATcDACAoIAMpAwAijQE3AwAgKSAEKQMAIpABNwMAICIgBSkDADcDACAjIBEpAwA3AwAgJSAIKQMANwMAIA8gkAE3AwAgFCCNATcDACALII4BNwMAIAkgjAE3AwAgBiAGKQOIJyKMATcDiCQgBiCMATcDiCEgFyAJKQMANwMAIBggCykDADcDACAbIBQpAwA3AwAgHCAPKQMANwMAIB0gJSkDADcDACAfICMpAwA3AwAgICAiKQMANwMAIAYgBikDiCE3A4gqIAZByC5qIBcpAwA3AwAgBkHALmogGCkDADcDACAGQbguaiAbKQMANwMAIAZBsC5qIBwpAwA3AwAgBkGoLmogHSkDADcDACAGQaAuaiAfKQMANwMAIAZBmC5qICApAwA3AwAgBiAGKQOIKjcDkC4gBkGIGGoiNCAGQZAtaiIvQcAB/AoAACAGIBZBgANqNgKMGyAGICE2AogbIAZBiCRqInsiLSAGQYgbaiIwEL0DIAkgJCkDACKMATcDACALICcpAwAijgE3AwAgFCAoKQMAIo0BNwMAIA8gKSkDACKQATcDACAGQZAeaiIWIAZBkCRqIjEpAwA3AwAgBkGYHmoiGSAGQZgkaiIyKQMANwMAIAZBoB5qIh4gBkGgJGoiMykDADcDACAGQageaiIhIJABNwMAIAZBsB5qIiYgjQE3AwAgBkG4HmoiKiCOATcDACAGQcAeaiIsIIwBNwMAIAYgBikDiCQijAE3A4ghIAYgjAE3A4geIAEgLCkDADcDACACICopAwA3AwAgAyAmKQMANwMAIAQgISkDADcDACAIIB4pAwA3AwAgESAZKQMANwMAIAUgFikDADcDACAGIAYpA4geNwOIJyAXIAEpAwA3AwAgGCACKQMANwMAIBsgAykDADcDACAcIAQpAwA3AwAgHSAIKQMANwMAIB8gESkDADcDACAgIAUpAwA3AwAgBiAGKQOIJzcDiCogLSAwEL0DIAkgJCkDACKMATcDACALICcpAwAijgE3AwAgFCAoKQMAIo0BNwMAIA8gKSkDACKQATcDACAWIDEpAwA3AwAgGSAyKQMANwMAIB4gMykDADcDACAhIJABNwMAICYgjQE3AwAgKiCOATcDACAsIIwBNwMAIAYgBikDiCQijAE3A4ghIAYgjAE3A4geIAEgLCkDADcDACACICopAwA3AwAgAyAmKQMANwMAIAQgISkDADcDACAIIB4pAwA3AwAgESAZKQMANwMAIAUgFikDADcDACAGIAYpA4geNwOIJyAGQYAraiABKQMANwMAIAZB+CpqIAIpAwA3AwAgBkHwKmogAykDADcDACAGQegqaiAEKQMANwMAIAZB4CpqIAgpAwA3AwAgBkHYKmogESkDADcDACAGQdAqaiAFKQMANwMAIAYgBikDiCc3A8gqIC0gMBC9AyAJICQpAwAijAE3AwAgCyAnKQMAIo4BNwMAIBQgKCkDACKNATcDACAPICkpAwAikAE3AwAgFiAxKQMANwMAIBkgMikDADcDACAeIDMpAwA3AwAgISCQATcDACAmII0BNwMAICogjgE3AwAgLCCMATcDACAGIAYpA4gkIowBNwOIISAGIIwBNwOIHiABICwpAwA3AwAgAiAqKQMANwMAIAMgJikDADcDACAEICEpAwA3AwAgCCAeKQMANwMAIBEgGSkDADcDACAFIBYpAwA3AwAgBiAGKQOIHjcDiCcgBkHAK2ogASkDADcDACAGQbgraiACKQMANwMAIAZBsCtqIAMpAwA3AwAgBkGoK2ogBCkDADcDACAGQaAraiAIKQMANwMAIAZBmCtqIBEpAwA3AwAgBkGQK2ogBSkDADcDACAGIAYpA4gnNwOIKyAvIAZBiCpqInxBwAH8CgAAIAZByBlqIC9BwAH8CgAAIAZBiAxqIn0gNEGAA/wKAAAgCEGAtcIAKQMAIowBNwMAIBFB+LTCACkDACKOATcDACAFQfC0wgApAwAijQE3AwAgBEIANwMAIANCADcDACACQgA3AwAgAUIANwMAIAZB6LTCACkDACKQATcDiCcgBkHIKmoiJEEAQYAB/AsAIBcgASkDADcDACAYIAIpAwA3AwAgGyADKQMANwMAIBwgBCkDADcDACAdIAgpAwA3AwAgHyARKQMANwMAICAgBSkDADcDACAGIAYpA4gnNwOIKiAGQcgraiIBQQBBwAH8CwAgBkGID2ogfCICQYAD/AoAACB7IgMgfRAeICUgjAE3AwAgIyCOATcDACAiII0BNwMAIA9CADcDACAUQgA3AwAgC0IANwMAIAlCADcDACAGIJABNwOIISAkQQBBgAH8CwAgFyAJKQMANwMAIBggCykDADcDACAbIBQpAwA3AwAgHCAPKQMANwMAIB0gJSkDADcDACAfICMpAwA3AwAgICAiKQMANwMAIAYgBikDiCE3A4gqIAFBAEHAAfwLACAKIgEgAkGAA/wKAAACQAJAIAMgARCnBEUNACAGQcgkaiAGQcgnahCnBEUNACAGQYglaiAGQYgoahCnBEUNACAGQcglaiAGQcgoahCnBEUNACAGQYgmaiAGQYgpahCnBEUNACAGQcgmaiAGQcgpahCnBA0BCyAGQYgqaiIBIAZBiAxqIgIgBkGICWoiAxD2ASACIAFBgAP8CgAAIAEgBkGID2oiBCADEPYBIAQgAUGAA/wKAAAgBkGIJGoiAyACEB4gBkGgIWoiAkGAtcIAKQMANwMAIAZBmCFqIgRB+LTCACkDADcDACAGQZAhaiIFQfC0wgApAwA3AwAgBkGoIWoiEUIANwMAIAZBsCFqIghCADcDACAGQbghaiIPQgA3AwAgBkHAIWoiFEIANwMAIAZB6LTCACkDADcDiCEgBkHIKmpBAEGAAfwLACAGQcAqaiAUKQMANwMAIAZBuCpqIA8pAwA3AwAgBkGwKmogCCkDADcDACAGQagqaiARKQMANwMAIAZBoCpqIAIpAwA3AwAgBkGYKmogBCkDADcDACAGQZAqaiAFKQMANwMAIAYgBikDiCE3A4gqIAZByCtqQQBBwAH8CwAgBkGIJ2oiAiABQYAD/AoAAAJAIAMgAhCnBEUNACAGQcgkaiAGQcgnahCnBEUNACAGQYglaiAGQYgoahCnBEUNACAGQcglaiAGQcgoahCnBEUNACAGQYgmaiAGQYgpahCnBEUNACAGQcgmaiAGQcgpahCnBA0BCyAGQYgqaiIBIAZBiAxqIgIgBkGICWoiAxD2ASACIAFBgAP8CgAAIAEgBkGID2oiAiADEPYBIAIgAUGAA/wKAAALIwBBwP4IayICJAAgAiAGQYgMaiKJASIeNgKA6wggAiAeQcABaiIqNgKE6wggAkGA9AhqIgoiISACQYDrCGoieyImEL0DIAJBuPEIaiIlIAJBuPQIaiIBKQMAIowBNwMAIAJBsPEIaiIkIAJBsPQIaiIDKQMAIo4BNwMAIAJBqPEIaiInIAJBqPQIaiIEKQMAIo0BNwMAIAJBoPEIaiIoIAJBoPQIaiIFKQMAIpABNwMAIAJBmPEIaiIpIAJBmPQIaiIRKQMAIo8BNwMAIAJBiO4IaiIWIAJBiPQIaiIIKQMANwMAIAJBkO4IaiIZIAJBkPQIaiIPKQMANwMAIAJBmO4IaiIUII8BNwMAIAJBoO4IaiILIJABNwMAIAJBqO4IaiIJII0BNwMAIAJBsO4IaiIXII4BNwMAIAJBuO4IaiIYIIwBNwMAIAIgAikDgPQIIowBNwOA8QggAiCMATcDgO4IIAJBuPcIaiIbIBgpAwA3AwAgAkGw9whqIhwgFykDADcDACACQaj3CGoiHSAJKQMANwMAIAJBoPcIaiIfIAspAwA3AwAgAkGY9whqIiAgFCkDADcDACACQZD3CGoiIiAZKQMANwMAIAJBiPcIaiIjIBYpAwA3AwAgAiACKQOA7gg3A4D3CCACQbj9CGogGykDADcDACACQbD9CGogHCkDADcDACACQaj9CGogHSkDADcDACACQaD9CGogHykDADcDACACQZj9CGogICkDADcDACACQZD9CGogIikDADcDACACQYj9CGogIykDADcDACACIAIpA4D3CDcDgP0IICEgJhC9AyAlIAEpAwAijAE3AwAgJCADKQMAIo4BNwMAICcgBCkDACKNATcDACAoIAUpAwAikAE3AwAgKSARKQMAIo8BNwMAIBYgCCkDADcDACAZIA8pAwA3AwAgFCCPATcDACALIJABNwMAIAkgjQE3AwAgFyCOATcDACAYIIwBNwMAIAIgAikDgPQIIowBNwOA8QggAiCMATcDgO4IIBsgGCkDADcDACAcIBcpAwA3AwAgHSAJKQMANwMAIB8gCykDADcDACAgIBQpAwA3AwAgIiAZKQMANwMAICMgFikDADcDACACIAIpA4DuCDcDgPcIIAJB+P0IaiAbKQMANwMAIAJB8P0IaiAcKQMANwMAIAJB6P0IaiAdKQMANwMAIAJB4P0IaiAfKQMANwMAIAJB2P0IaiAgKQMANwMAIAJB0P0IaiAiKQMANwMAIAJByP0IaiAjKQMANwMAIAIgAikDgPcINwPA/QggISAmEL0DICUgASkDACKMATcDACAkIAMpAwAijgE3AwAgJyAEKQMAIo0BNwMAICggBSkDACKQATcDACApIBEpAwAijwE3AwAgFiAIKQMANwMAIBkgDykDADcDACAUII8BNwMAIAsgkAE3AwAgCSCNATcDACAXII4BNwMAIBggjAE3AwAgAiACKQOA9AgijAE3A4DxCCACIIwBNwOA7gggGyAYKQMANwMAIBwgFykDADcDACAdIAkpAwA3AwAgHyALKQMANwMAICAgFCkDADcDACAiIBkpAwA3AwAgIyAWKQMANwMAIAIgAikDgO4INwOA9wggAkG4/ghqIBspAwA3AwAgAkGw/ghqIBwpAwA3AwAgAkGo/ghqIB0pAwA3AwAgAkGg/ghqIB8pAwA3AwAgAkGY/ghqICApAwA3AwAgAkGQ/ghqICIpAwA3AwAgAkGI/ghqICMpAwA3AwAgAiACKQOA9wg3A4D+CCACQYD6CGoiMyACQYD9CGoiL0HAAfwKAAAgAiAeQYADajYChOgIIAIgKjYCgOgIIAJBgPEIaiJ8Ii0gAkGA6AhqIn0iMBC9AyAYICUpAwAijAE3AwAgFyAkKQMAIo4BNwMAIAkgJykDACKNATcDACALICgpAwAikAE3AwAgFCApKQMAIo8BNwMAIAJBiOsIaiIWIAJBiPEIaiIxKQMANwMAIAJBkOsIaiIZIAJBkPEIaiIyKQMANwMAIAJBmOsIaiIeII8BNwMAIAJBoOsIaiIhIJABNwMAIAJBqOsIaiImII0BNwMAIAJBsOsIaiIqII4BNwMAIAJBuOsIaiIsIIwBNwMAIAIgAikDgPEIIowBNwOA7gggAiCMATcDgOsIIAEgLCkDADcDACADICopAwA3AwAgBCAmKQMANwMAIAUgISkDADcDACARIB4pAwA3AwAgDyAZKQMANwMAIAggFikDADcDACACIAIpA4DrCDcDgPQIIBsgASkDADcDACAcIAMpAwA3AwAgHSAEKQMANwMAIB8gBSkDADcDACAgIBEpAwA3AwAgIiAPKQMANwMAICMgCCkDADcDACACIAIpA4D0CDcDgPcIIC0gMBC9AyAYICUpAwAijAE3AwAgFyAkKQMAIo4BNwMAIAkgJykDACKNATcDACALICgpAwAikAE3AwAgFCApKQMAIo8BNwMAIBYgMSkDADcDACAZIDIpAwA3AwAgHiCPATcDACAhIJABNwMAICYgjQE3AwAgKiCOATcDACAsIIwBNwMAIAIgAikDgPEIIowBNwOA7gggAiCMATcDgOsIIAEgLCkDADcDACADICopAwA3AwAgBCAmKQMANwMAIAUgISkDADcDACARIB4pAwA3AwAgDyAZKQMANwMAIAggFikDADcDACACIAIpA4DrCDcDgPQIIAJB+PcIaiABKQMANwMAIAJB8PcIaiADKQMANwMAIAJB6PcIaiAEKQMANwMAIAJB4PcIaiAFKQMANwMAIAJB2PcIaiARKQMANwMAIAJB0PcIaiAPKQMANwMAIAJByPcIaiAIKQMANwMAIAIgAikDgPQINwPA9wggLSAwEL0DIBggJSkDACKMATcDACAXICQpAwAijgE3AwAgCSAnKQMAIo0BNwMAIAsgKCkDACKQATcDACAUICkpAwAijwE3AwAgFiAxKQMANwMAIBkgMikDADcDACAeII8BNwMAICEgkAE3AwAgJiCNATcDACAqII4BNwMAICwgjAE3AwAgAiACKQOA8QgijAE3A4DuCCACIIwBNwOA6wggASAsKQMANwMAIAMgKikDADcDACAEICYpAwA3AwAgBSAhKQMANwMAIBEgHikDADcDACAPIBkpAwA3AwAgCCAWKQMANwMAIAIgAikDgOsINwOA9AggAkG4+AhqIAEpAwA3AwAgAkGw+AhqIAMpAwA3AwAgAkGo+AhqIAQp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jZXHw5bS2sCXf1ZyrSIOfSEWQsf688PtgqOQPCALfSETQqnAxomuzpOyMCADKQOwASAOIBFWIBBC3bCFjOi2kai4f1ZyrXx9DAELIAMpA8gBIRMgAykDwAEhFCADKQO4ASEWIAMpA7ABCyEVIAMoAhQiBCADKAIMRgRAIANBDGpBlLrCABCiAwsgAygCECAEQQV0aiICIBM3AxggAiAUNwMQIAIgFjcDCCACIBU3AwAgAyAEQQFqNgIUIAFByABqIgIgCEYNASABQegAaiEEIAIhASAEQbizwgBBIBDxAw0ACwwCCyAAIAMpAgA3AgAgACADKQIMNwIMIABBCGogA0EIaigCADYCACAAQRRqIANBFGooAgA2AgAgA0HQAWokAA8LIAMgAykDODcDuAEgAyADKQMwNwOwAUGgscIAQSsgA0GwAWpBpLrCAEG0usIAEMoDAAsgAyANNwMwIANCAjcDKEGgscIAQSsgA0EoakGkusIAQcS6wgAQygMAC/sLAg5/An5CAiEQIwBBgAlrIgIkACACQegGaiABQQhqKQMANwMAIAJB8AZqIAFBEGopAwA3AwAgAkH4BmogAUEYaikDADcDACACQYAHaiABQSBqKQMANwMAIAJBiAdqIAFBKGopAwA3AwAgAkGYB2ogAUE4aikDADcDACACQaAHaiABQUBrKQMANwMAIAJBqAdqIAFByABqKQMANwMAIAJBsAdqIAFB0ABqKQMANwMAIAJBuAdqIAFB2ABqKQMANwMAIAIgASkDADcD4AYgAiABKQMwNwOQByACQcAEaiIFIAJB4AZqIgNB4AD8CgAAIAJByAJqIgQgAUGIAWopAwA3AwAgAkHAAmoiBiABQYABaikDADcDACACQbgCaiIHIAFB+ABqKQMANwMAIAJBsAJqIgggAUHwAGopAwA3AwAgAkGoAmoiCSABQegAaikDADcDACACQdgCaiIKIAFBmAFqKQMANwMAIAJB4AJqIgsgAUGgAWopAwA3AwAgAkHoAmoiDCABQagBaikDADcDACACQfACaiINIAFBsAFqKQMANwMAIAJB+AJqIg4gAUG4AWopAwA3AwAgAiABKQNgNwOgAiACIAEpA5ABNwPQAiADIAJBoAJqIg9B4AD8CgAAIAJBoAVqIANB4AD8CgAAIAQgAUHoAWopAwA3AwAgBiABQeABaikDADcDACAHIAFB2AFqKQMANwMAIAggAUHQAWopAwA3AwAgCSABQcgBaikDADcDACAKIAFB+AFqKQMANwMAIAsgAUGAAmopAwA3AwAgDCABQYgCaikDADcDACANIAFBkAJqKQMANwMAIA4gAUGYAmopAwA3AwAgAiABKQPAATcDoAIgAiABKQPwATcD0AIgAyAPQeAA/AoAACACQYAGaiADQeAA/AoAACACIAVBoAL8CgAAA0AgAkHABGoiASACIAIQuQIgAiABQaAC/AoAACAQQgKDIBBCAYghEFANAAsgAkGoCGogAkEIaikDADcDACACQbAIaiACQRBqKQMANwMAIAJBuAhqIAJBGGopAwA3AwAgAkHACGogAkEgaikDADcDACACQcgIaiACQShqKQMANwMAIAJB2AhqIAJBOGopAwA3AwAgAkHgCGogAkFAaykDADcDACACQegIaiACQcgAaikDADcDACACQfAIaiACQdAAaikDADcDACACQfgIaiACQdgAaikDADcDACACIAIpAwA3A6AIIAIgAikDMDcD0AggASACQaAIakHgAPwKAAAgAkHIAmoiASACQYgBaikDADcDACACQcACaiIEIAJBgAFqKQMANwMAIAJBuAJqIgYgAkH4AGopAwA3AwAgAkGwAmoiByACQfAAaikDADcDACACQagCaiIIIAJB6ABqKQMANwMAIAJB2AJqIgkgAkGYAWopAwA3AwAgAkHgAmoiCiACQaABaikDADcDACACQegCaiILIAJBqAFqKQMANwMAIAJB8AJqIgwgAkGwAWopAwA3AwAgAkH4AmoiDSACQbgBaikDADcDACACIAIpA2A3A6ACIAIgAikDkAE3A9ACIAJBoAhqIgMgAkGgAmoiBUHgAPwKAAAgAkGgBWogA0HgAPwKAAAgASACQegBaikDADcDACAEIAJB4AFqKQMANwMAIAYgAkHYAWopAwA3AwAgByACQdABaikDADcDACAIIAJByAFqKQMANwMAIAkgAkH4AWopAwA3AwAgCiACQYACaikDADcDACALIAJBiAJqKQMANwMAIAwgAkGQAmopAwA3AwAgDSACQZgCaikDADcDACACIAIpA8ABNwOgAiACIAIpA/ABNwPQAiADIAVB4AD8CgAAIAJBgAZqIANB4AD8CgAAIAUgAkHABGpBoAL8CgAAIBBCAVIEQANAIAJBwARqIgQgAkGgAmoiASABELkCIAEgBEGgAvwKAAAgEEICg1BFBEAgAkHABGoiASACIAJBoAJqELkCIAIgAUGgAvwKAAALIBBCBFQgEEIBiCEQRQ0ACwsgACACQaAC/AoAACACQYAJaiQAC+IZAwp/CX4CfCMAQfAAayICJAAgASgCBCEFQQQhCSABKAIIIgMhBAJAAkACQAJAAkACQAJAAkAgAw4CBQABCyAFKAIAQQFGDQMgBUEEaiEEDAELIAUgA0ECdCIJaiEEIANBAWtB/v///wNxDQELA0AgBTUCACANhiAPfCEPIA1CIHwhDSAFQQRqIgUgBEcNAAsCfgJAAkACQAJAAkAgD0IEWgRAIA+6n/wHIg5QDQEgDiAPIA6AIA58QgGIIhBUDQIgECEMDAMLIA9CAFKtIQ4MAwtBgIzFABCaBAALA0AgECAPIBCAIBB8QgGIIgxUIBAhDiAMIRANAAsLIAwgDloNAANAIAwiDlANAiAOIA8gDIAgDHxCAYgiDFYNAAsLIA4MAQtBgIzFABCaBAALIQ1BACEJIAJB4ABqIgNBtLzEACgCADYCACACQay8xAApAgA3A1ggDVBFBEBBASEFA0AgAigCWCAFQQFrRgRAIAJB2ABqQaC9xAAQpQMLIAIoAlwgCWogDT4CACAJQQRqIQkgAiAFNgJgIAVBAWohBSANQoCAgIAQVCANQiCIIQ1FDQALCyAAIAIpA1g3AgAgAEEIaiADKAIANgIADAMLIAOtQgWGIARBBGsoAgBnrSIMfSIUQgGIIRAgBUEEayEDQgAgDH0hEgNAIBJCAX1CH4MiDEIBfCITQsAAIA99Ig4gDiATVhshESADIAlqIQYgD0LAAFIEQCANIBGGIAY1AgAgEyARfYiEIQ0LIAwgDloEQCANIAY1AgAgESATfYZCAFKthCENCyASIBF9IRIgDyARfCEPIAlBBGsiCQ0AC0QAAAAAAAAAQCEVRAAAAAAAAABARAAAAAAAAPA/IBQgDXl8QkB8IgynIgZBH3UiAyAGcyADayIIQQFxGyEWIAhBAk8EQANAIBYgFSAVoiIVoiAWIAhBAnEbIRYgCEEDSyAIQQF2IQgNAAsLRAAAAAAAAPA/IBajIBYgBkEASBshFQJAAkACQAJAIAxCgAhYBEAgFSANuqIiFb1C////////////AINC//////////f/AFgNAQsgAiABNgJcIAJBgICAgHg2AlggAkHIAGoiBiACQdgAakF/IBRC/gd9IgxCBYinIAxCgICAgIAEWhsgDKciA0EecRDsASACQThqIAYQciACKAJAIQggAigCPCEKAkACQCACKAI4IgZBgICAgHhHBEAgCA0BIAJBADYCECACIAo2AgwgAiAGNgIIDAILIAooAggNACACQQhqIAoQwAMMAQsgDEKAgICAgAhaDQQgAiAINgJgIAIgCjYCXCACIAY2AlggAkEIaiACQdgAaiAMQgaIpyADQQF2QR9xEM8BCyACKAJIIgNFDQEgAigCTCADQQJ0EN8EDAELIAJB2ABqIQojAEEgayIEJAACQCAVnyIVvUL///////////8Ag0KAgICAgICA+P8AWgRAIApBgICAgHg2AgAMAQsCfwJAIBWdIhVEAAAAAAAAAABiBEAgFb0iDEIAUwRAIApBgICAgHg2AgAMBAsgDEI0iKdB/w9xIgZBswhrIQggBEEYakG0vMQAKAIANgIAIARBrLzEACkCADcDECAMQv////////8Hg0KAgICAgICACIQgDEIBhkL+////////D4MgBhsiDFAEQEEEIQNBAAwDCwNAIAQoAhAgC0YEQCAEQRBqQaC9xAAQpQMLIAQoAhQgB2ogDD4CACAEIAtBAWoiCzYCGCAHQQRqIQcgDEKAgICAEFQgDEIgiCEMRQ0ACwwBCyAKQQhqQbS8xAAoAgA2AgAgCkGsvMQAKQIANwIADAILIAQoAhQhAyAEKAIQCyEHAkACQAJAIAhBAEogCEEASGtB/wFxDgICAQALIAQgCzYCGCAEIAM2AhQgBCAHNgIQAkACQCAHQYCAgIB4RwRAIAsNASAEQQhqIARBGGooAgA2AgAgBCAEKQIQNwMADAILIAMoAggNACAEIAMQwAMMAQsgBCAEQRBqQbMIIAZrIgNBBXYgA0EfcRDsAQsgBCgCACEHIAQoAgQhAyAEKAIIIQsMAQsCQAJAIAdBgICAgHhHBEAgCw0BIARBADYCCCAEIAM2AgQgBCAHNgIADAILIAMoAggNACAEIAMQwAMMAQsgBCALNgIYIAQgAzYCFCAEIAc2AhAgBCAEQRBqIAhBBXYgCEEfcRDPAQsgBCgCCCELIAQoAgQhAyAEKAIAIQcLIAogCzYCCCAK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IhQgHCAiVq0gAikDmAMgGyAcVq18fHwiESACKQPgAnwiGyAWIB9UrSACKQPYAiAfICFUrXx8fCIfIAIpA5ACfCIcIBUgF1atIAIpA6gCIBUgFlStfHx8IiF8IhYgAikDoAF8IhUgAikDuAEgAikDsAEiECAafCAQVK18fCIXIAIpA0B8IhpC/////76y/fBCfiIQQgBCgYCAgL+y/fDDAEIAEMkDIAJBIGogEEIAQpHh5c2HifqZKEIAEMkDIAJBEGogEEIAQt2whYzotpGouH9CABDJAyACIBBCAEKpwMaJrs6TsjBCABDJAwJAAkAgAikDCCACKQOIASACKQOIAiARIBRUrSACKQOIAyATIBRWrXx8IAIpA/gDIBMgIFStfHwiICACKQPwAnwiECAbIB9WrSACKQPoAiARIBtWrXx8fCITIAIpA4ACfCIUIBNUrXwgFCAUIBwgIVatIAIpA5gCIBwgH1StfHx8IhRWrXwgECATVq0gAikD+AIgECAgVK18fHwiESACKQPwAXwiECACKQPoASAUIAIpA+ABfCITIBRUrXwgEyASIBZWrSACKQPYASASICNUrXx8fCISIBNUrXx8IhMgAikDgAF8IhQgE1StfCAUIAIpA5gBIBIgEiACKQOQAXwiElatfCASIBUgF1atIAIpA6gBIBUgFlStfHx8IhYgElStfHwiEiAUVK18IBAgE1atIAIpA/gBIBAgEVStfHx8IhUgAikDcHwiFCACKQNoIBIgAikDYHwiECASVK18IBAgECACKQNYIAIpA0ggFyAaVq18IhMgAikDUHwiEiATVK18IBIgEiAWfCISVq18fCIQVq18fCIRIAIpAwB8IhMgEVStfCATIBMgAikDGCAQIBAgAikDEHwiEFatfCAQIBAgAikDKCASIBIgAikDIHwiElatfCASIAIpAzggAikDMCIWIBp8IBZUrXx8IhYgElStfHwiEFatfHwiE1atfCARIBRUrSACKQN4IBQgFVStfHx8IhFCqcDGia7Ok7IwVg0AAkAgEUKpwMaJrs6TsjBRBEAgE0LdsIWM6LaRqLh/Vg0CIBNC3bCFjOi2kai4f1ENAUKpwMaJrs6TsjAhEQsgEyEUIBAhEgwCCyAQQpHh5c2HifqZKFYNAELdsIWM6LaRqLh/IRQgEEKR4eXNh4n6mShSBEBCqcDGia7Ok7IwIREgECESDAILQpHh5c2HifqZKCESIBZCgYCAgL+y/fDDAFoNAEKpwMaJrs6TsjAhEQwBCyAQQpHh5c2HifqZKH0iFCAWQoGAgIC/sv3wwwBUrSIVfSESIBNCo8/685fJ7tfHAHwiFyAQQpHh5c2HifqZKFQgFCAVVHKtIhB9IRQgESATQt2whYzotpGouH9UIBAgF1ZyrX1CqcDGia7Ok7IwfSERIBZCgYCAgL+y/fDDAH0hFgtCqcDGia7Ok7IwIRUgFCAZfCIQIBlUIBAgEiAefCITIB5UIBMgFiAYfCISIBhUrXwiGCATVHKtfCITIBBUcq0gESAdfHwiHSEQAkAgHUKpwMaJrs6TsjBSDQBC3bCFjOi2kai4fyEVIBMiEELdsIWM6LaRqLh/Ug0AQpHh5c2HifqZKCEVIBgiEEKR4eXNh4n6mShSDQBCgYCAgL+y/fDDACEVIBIiEEKBgICAv7L98MMAUQ0CCyAQIBVaDQEgEyEZIBghHiASDAILIAQgBUH0+cAAENkDAAsgGEKR4eXNh4n6mSh9IhAgEkKBgICAv7L98MMAVK0iGX0hHiATQqPP+vOXye7XxwB8IhQgGEKR4eXNh4n6mShUIBAgGVRyrSIQfSEZIB0gE0LdsIWM6LaRqLh/VCAQIBRWcq19QqnAxomuzpOyMH0hHSASQoGAgIC/sv3wwwB9CyEYIABBIGohACABQQxqIQEgCyAHQQFqIgdHDQALIAkgA0EFdGoiACAYNwMYIAAgHjcDECAAIBk3AwggACAdNwMAIANBAWohAyAOIgQgCEcNAQwDCwsgBiAGQeT5wAAQ2QMACyAIIARrIgBBBXQiAQRAIAkgA0EFdGpBACAB/AsACyAAIANqIQMLIAM2AgAgAkGABGokAAvCEgIjfwR+IwBBkAxrIgMkACADIAE2AtAKIAMgAUHAAWoiFDYC1AogA0EIaiIHIANB0ApqIggQvQMgA0GIDGoiHCADQUBrIgkpAwAiJjcDACADQYAMaiIdIANBOGoiCikDACInNwMAIANB+AtqIh4gA0EwaiILKQMAIig3AwAgA0HwC2oiHyADQShqIgwpAwAiKTcDACADQZgLaiIEIANBEGoiDSkDADcDACADQaALaiIFIANBGGoiDikDADcDACADQagLaiIGIANBIGoiDykDADcDACADQbALaiIQICk3AwAgA0G4C2oiESAoNwMAIANBwAtqIhIgJzcDACADQcgLaiITICY3AwAgAyADKQMIIiY3A9ALIAMgJjcDkAsgA0HAA2oiFSATKQMANwMAIANBuANqIhYgEikDADcDACADQbADaiIXIBEpAwA3AwAgA0GoA2oiGCAQKQMANwMAIANBoANqIhkgBikDADcDACADQZgDaiIaIAUpAwA3AwAgA0GQA2oiGyAEKQMANwMAIAMgAykDkAs3A4gDIANBwAlqIBUpAwA3AwAgA0G4CWogFikDADcDACADQbAJaiAXKQMANwMAIANBqAlqIBgpAwA3AwAgA0GgCWogGSkDADcDACADQZgJaiAaKQMANwMAIANBkAlqIBspAwA3AwAgAyADKQOIAzcDiAkgByAIEL0DIBwgCSkDACImNwMAIB0gCikDACInNwMAIB4gCykDACIoNwMAIB8gDCkDACIpNwMAIAQgDSkDADcDACAFIA4pAwA3AwAgBiAPKQMANwMAIBAgKTcDACARICg3AwAgEiAnNwMAIBMgJjcDACADIAMpAwgiJjcD0AsgAyAmNwOQCyAVIBMpAwA3AwAgFiASKQMANwMAIBcgESkDADcDACAYIBApAwA3AwAgGSAGKQMANwMAIBogBSkDADcDACAbIAQpAwA3AwAgAyADKQOQCzcDiAMgA0GACmogFSkDADcDACADQfgJaiAWKQMANwMAIANB8AlqIBcpAwA3AwAgA0HoCWogGCkDADcDACADQeAJaiAZKQMANwMAIANB2AlqIBopAwA3AwAgA0HQCWogGykDADcDACADIAMpA4gDNwPICSAHIAgQvQMgHCAJKQMAIiY3AwAgHSAKKQMAIic3AwAgHiALKQMAIig3AwAgHyAMKQMAIik3AwAgBCANKQMANwMAIAUgDikDADcDACAGIA8pAwA3AwAgECApNwMAIBEgKDcDACASICc3AwAgEyAmNwMAIAMgAykDCCImNwPQCyADICY3A5ALIBUgEykDADcDACAWIBIpAwA3AwAgFyARKQMANwMAIBggECkDADcDACAZIAYpAwA3AwAgGiAFKQMANwMAIBsgBCkDADcDACADIAMpA5ALNwOIAyADQcAKaiAVKQMANwMAIANBuApqIBYpAwA3AwAgA0GwCmogFykDADcDACADQagKaiAYKQMANwMAIANBoApqIBkpAwA3AwAgA0GYCmogGikDADcDACADQZAKaiAbKQMANwMAIAMgAykDiAM3A4gKQQBFBEAgA0GIBmogA0GICWpBwAH8CgAACyADIAFBgANqNgLMCiADIBQ2AsgKIANB0AtqIiEgA0HICmoiIhC9AyATIBwpAwAiJjcDACASIB0pAwAiJzcDACARIB4pAwAiKDcDACAQIB8pAwAiKTcDACADQdgKaiIBIANB2AtqIiMpAwA3AwAgA0HgCmoiBCADQeALaiIkKQMANwMAIANB6ApqIgUgA0HoC2oiJSkDADcDACADQfAKaiIGICk3AwAgA0H4CmoiFCAoNwMAIANBgAtqIgcgJzcDACADQYgLaiIIICY3AwAgAyADKQPQCyImNwOQCyADICY3A9AKIAkgCCkDADcDACAKIAcpAwA3AwAgCyAUKQMANwMAIAwgBikDADcDACAPIAUpAwA3AwAgDiAEKQMANwMAIA0gASkDADcDACADIAMpA9AKNwMIIBUgCSkDADcDACAWIAopAwA3AwAgFyALKQMANwMAIBggDCkDADcDACAZIA8pAwA3AwAgGiAOKQMANwMAIBsgDSkDADcDACADIAMpAwg3A4gDICEgIhC9AyATIBwpAwAiJjcDACASIB0pAwAiJzcDACARIB4pAwAiKDcDACAQIB8pAwAiKTcDACABICMpAwA3AwAgBCAkKQMANwMAIAUgJSkDADcDACAGICk3AwAgFCAoNwMAIAcgJzcDACAIICY3AwAgAyADKQPQCyImNwOQCyADICY3A9AKIAkgCCkDADcDACAKIAcpAwA3AwAgCyAUKQMANwMAIAwgBikDADcDACAPIAUpAwA3AwAgDiAEKQMANwMAIA0gASkDADcDACADIAMpA9AKNwMIIANBgARqIAkpAwA3AwAgA0H4A2ogCikDADcDACADQfADaiALKQMANwMAIANB6ANqIAwpAwA3AwAgA0HgA2ogDykDADcDACADQdgDaiAOKQMANwMAIANB0ANqIA0pAwA3AwAgAyADKQMINwPIAyAhICIQvQMgEyAcKQMAIiY3AwAgEiAdKQMAIic3AwAgESAeKQMAIig3AwAgECAfKQMAIik3AwAgASAjKQMANwMAIAQgJCkDADcDACAFICUpAwA3AwAgBiApNwMAIBQgKDcDACAHICc3AwAgCCAmNwMAIAMgAykD0AsiJjcDkAsgAyAmNwPQCiAJIAgpAwA3AwAgCiAHKQMANwMAIAsgFCkDADcDACAMIAYpAwA3AwAgDyAFKQMANwMAIA4gBCkDADcDACANIAEpAwA3AwAgAyADKQPQCjcDCCADQcAEaiAJKQMANwMAIANBuARqIAopAwA3AwAgA0GwBGogCykDADcDACADQagEaiAMKQMANwMAIANBoARqIA8pAwA3AwAgA0GYBGogDikDADcDACADQZAEaiANKQMANwMAIAMgAykDCDcDiAQgIEUEQCADQYgJaiADQYgDakHAAfwKAAALICBFBEAgA0HIB2ogA0GICWpBwAH8CgAACyADQQhqIANBiAZqQYAD/AoAACACBEADQCADQYgDaiIBIANBCGoiBBCqASAEIAFBgAP8CgAAIAJBAWsiAg0ACwsgACADQQhqQYAD/AoAACADQZAMaiQAC/sVAgJ/GH4jAEHQA2siASQAIAFBoANqQcChxQBBARCnAkEoIQIgASkDoAMhFyABKQOoAyEYIAEpA7ADIRAgASkDuAMhESABKQPAAyESIAEpA8gDIQ8DQCABQcACaiACQeCgxQBqKQMAIgNCACAPQgAQyQMgAUHQAmogA0IAIBJCABDJAyABQeACaiADQgAgEUIAEMkDIAFB8AJqIANCACAQQgAQyQMgAUGAA2ogA0IAIBhCABDJAyABQZADaiADQgAgF0IAEMkDIAFBsAJqIAEpA8ACIgkgDnwiE0IAQgBC/f/z/8////mJfxDJAyABQaACaiABKQO4AiIDQgBCq9X+////v/+5f0IAEMkDIAFBkAJqIANCAEL//8+K6///1R5CABDJAyABQYACaiADQgBCpOzDtY/UtJjnAEIAEMkDIAFB8AFqIANCAEK/pZScz/DSu+QAQgAQyQMgAUHgAWogA0IAQtfZrprk9umNywBCABDJAyABQdABaiADQgBCms3/y6O9xIAaQgAQyQMgASkD2AEgASkDkAMiDCALfCIUIAEpA4gDIAEpA4ADIgMgB3wiByADVK18IAcgASkD+AIgASkD8AIiAyAGfCIGIANUrXwgBiABKQPoAiABKQPgAiIDIAV8IgUgA1StfCAFIAEpA9gCIAQgASkD0AIiBHwiAyAEVK18IAMgASkDyAIgCSATVq18fCIEIANUrXx8IhUgBVSt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/f/z/8////mJf34iB0IAQqvV/v///7//uX9CABDJAyADQUBrIAdCAEL//8+K6///1R5CABDJAyADQTBqIAdCAEKk7MO1j9S0mOcAQgAQyQMgA0EgaiAHQgBCv6WUnM/w0rvkAEIAEMkDIANBEGogB0IAQtfZrprk9umNywBCABDJAyADIAdCAEKazf/Lo73EgBpCABDJAyADKQMIIAMpA7ABIhggC3wiByADKQOoASADKQOgASILIAh8IgggC1StfCAIIAMpA5gBIAMpA5ABIgsgBnwiBiALVK18IAYgAykDiAEgAykDgAEiCyAFfCIFIAtUrXwgBSADKQN4IAMpA3AiCyAEfCIEIAtUrXwgBCADKQNoIA0gFFStfHwiFCAEVK18fCIEIAVUrXx8IgUgBlStfHwiBiAIVK18fCILIAMpAwB8IgggC1StfCAIIAggAykDGCAGIAYgAykDEHwiBlatfCAGIAYgAykDKCAFIAUgAykDIHwiBVatfCAFIAUgAykDOCAEIAQgAykDMHwiBFatfCAEIAQgAykDSCADKQNAIhkgFHwiFCAZVK18IBQgAykDWCANIAMpA1AiDXwgDVStfHwiDSAUVK18fCIEVq18fCIFVq18fCIGVq18fCIIVq18IAcgC1atIAMpA7gBIAcgGFStfHx8IQsgAUEIayIBQShHDQALAkACQCALQprN/8ujvcSAGlYNACALQprN/8ujvcSAGlIEQCAEIQcgBSEOIAYhDyAIIREMAgsgCELX2a6a5PbpjcsAVg0AAkAgCELX2a6a5PbpjcsAUgRAIAQhByAFIQ4gBiEPIAghEQwBCyAGQr+llJzP8NK75ABWDQFC19mumuT26Y3LACERIAZCv6WUnM/w0rvkAFIEQCAEIQcgBSEOIAYhDwwBCyAFQqTsw7WP1LSY5wBWDQFCv6WUnM/w0rvkACEPIAVCpOzDtY/UtJjnAFIEQCAEIQcgBSEODAELIARC///Piuv//9UeVg0BQqTsw7WP1LSY5wAhDiAEQv//z4rr///VHlIEQCAEIQcMAQtC///Piuv//9UeIQcgDUKq1f7///+//7l/Vg0BC0Kazf/Lo73EgBohCwwBCyAEQv//z4rr///VHn0iDiANQqvV/v///7//uX9UrSIPfSEHIAVCpOzDtY/UtJjnAH0iESAEQv//z4rr///VHlQg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////////////AEIAEMkDIANBgAJqIAIpAxAiBEIAIAVCABDJAyADQbACaiAEQgAgCEIAEMkDIANB4AJqIARCACAHQgAQyQMgA0GQA2ogBEIAIAZCABDJAyADQZABaiADKQOgASIJIAMpA8gBIg0gAykD0AF8Igx8IgsgAykDuAEgCiADKQOwASIEfCAEVK18fCIKIAMpA4ACfCIPQpuUr8Pytajehn9+IgRCAEJtQgAQyQMgA0GAAWogBEIAQn9CABDJAyADQUBrIARCAEL///////////8AQgAQyQMgA0GQAmogAikDCCIEQgAgBUIAEMkDIANBwAJqIARCACAIQgAQyQMgA0HwAmogBEIAIAdCABDJAyADQaADaiAEQgAgBkIAEMkDIANB8ABqIAMpA4gCIAogD1atfCIQIAMpA7ACfCIOIAkgAykD2AEgDCANVK18IhEgAykD4AF8Ig18IgwgCiALVK0gAykDqAEiEiAJIAtWrXx8fCITfCIJIAMpA4ABIhR8IgsgAykDmAEgAykDkAEiBCAPfCAEVK18fCIKIAMpA5ACfCIPQpuUr8Pytajehn9+IgRCAEJtQgAQyQMgA0HgAGogBEIAQn9CABDJAyADQdAAaiAEQgBC////////////AEIAEMkDIANBoAJqIAIpAwAiBEIAIAVCABDJAyADQdACaiAEQgAgCEIAEMkDIANBgANqIARCACAHQgAQyQMgA0GwA2ogBEIAIAZCABDJAyADQSBqIAMpA5gCIAogD1atfCIVIAMpA8ACfCIFIBQgAykD6AEgDSARVK18IhEgAykD8AF8IgQgAykDMHwiCCAMIBNWrSASIAwgDVStfHx8IgcgAykD4AJ8IgYgCSAOVK0gAykDuAIgDiAQVK18fHwiDnwiDSAKIAtUrSADKQOIASIQIAkgC1atfHx8IhJ8IgkgAykDYCITfCILIAMpA3ggAykDcCIKIA98IApUrXx8IgogAykDoAJ8Ig9Cm5Svw/K1qN6Gf34iDEIAQm1CABDJAyADQRBqIAxCAEJ/QgAQyQMgAyAMQgBC////////////AEIAEMkDAkACQCADKQMIIAMpA1ggAykDSCAHIAhUrSADKQM4IAQgCFatfHwiDCADKQP4ASAEIBFUrXx8IgQgAykDkAN8IgggBiAOVq0gAykD6AIgBiAHVK18fHwiByADKQNAfCIGIAdUrXwgBiAGIA0gElatIBAgDSAOVK18fHwiBlatfCIOIAcgCFStIAMpA5gDIAQgCFatfHwiDSAEIAxUrXwiDHwiBCADKQOgA3wiCCADKQP4AiAGIAMpA/ACfCIHIAZUrXwgByAFIAlWrSADKQPIAiAFIBVUrXx8fCIFIAdUrXx8IgcgAykDUHwiBiAHVK18IAYgAykDaCIQIAUgBSATfCIFVq18IAUgCiALVK0gECAJIAtWrXx8fCIJIAVUrXx8IgUgBlStfCIQIAcgCFStIAMpA6gDIAQgCFatfHwiESAEIA5UrSAMIA1UrXx8Ig58IgQgAykDsAN8IgcgAykDiAMgBSAFIAMpA4ADfCIFVq18IAUgBSADKQPYAiADKQOoAiAKIA9WrXwiBiADKQPQAnwiCCAGVK18IAggCCAJfCIIVq18fCIFVq18fCIGIAMpAwB8IgsgBlStfCALIAMpAxgiCSAFIAUgAykDECIKfCIFVq18IAUgBSAJIAggCCAKfCIIVq18IAggAykDKCADKQMgIgkgD3wgCVStfHwiCSAIVK18fCIFVq18fCIIIAtUrXwiCyAGIAdUrSADKQO4AyAEIAdWrXx8IgcgBCAQVK0gDiARVK18fCIEfCIGIAtUIAQgB1RyIAZCAFNyDQACQCAGQv///////////wBRBEBCfyEHIAhCf1IEQCAFIQQgCCEHQv///////////wAhBgwECyAFQn9RDQEgBSEEQv///////////wAhBgwDCyAFIQQgCCEHDAILQn8hBCAJQm1aDQBC////////////ACEGDAELIAVCAXwiByAJQm1UrSILfSEEIAhCAXwiCiAFQn9SIAcgC1RyrSIFfSEHIAYgCEJ/UiAFIApWcq19Qv///////////wB9IQYgCUITfCEJCyAAIAk3AxggACAENwMQIAAgBzcDCCAAIAY3AwAgA0HAA2okAAuFEAIBfxB+IwBBgARrIgMkACADQYACaiABKQMYIgVCACACKQMYIgRCABDJAyADQZACaiABKQMQIgZCACAEQgAQyQMgA0GgAmogASkDCCIHQgAgBEIAEMkDIANBsAJqIAEpAwAiCEIAIARCABDJAyADQfABaiADKQOAAiIKQv////++sv3wQn4iBEIAQoGAgIC/sv3wwwBCABDJAyADQeABaiAEQgBCkeHlzYeJ+pkoQgAQyQMgA0GQAWogBEIAQt2whYzotpGouH9CABDJAyADQUBrIARCAEKpwMaJrs6TsjBCABDJAyADQcACaiACKQMQIgRCACAFQgAQyQMgA0HwAmogBEIAIAZCABDJAyADQaADaiAEQgAgB0IAEMkDIANB0ANqIARCACAIQgAQyQMgA0HQAWogAykD4AEiDCADKQOIAiINIAMpA5ACfCIOfCIJIAMpA/gBIAogAykD8AEiBHwgBFStfHwiCiADKQPAAnwiC0L/////vrL98EJ+IgRCAEKBgICAv7L98MMAQgAQyQMgA0HAAWogBEIAQpHh5c2HifqZKEIAEMkDIANBsAFqIARCAELdsIWM6LaRqLh/QgAQyQMgA0GgAWogBEIAQqnAxomuzpOyMEIAEMkDIANB0AJqIAIpAwgiBEIAIAVCABDJAyADQYADaiAEQgAgBkIAEMkDIANBsANqIARCACAHQgAQyQMgA0HgA2ogBEIAIAhCABDJAyADQYABaiADKQPIAiAKIAtWrXwiESADKQPwAnwiDyADKQOYAiANIA5WrXwiECADKQOgAnwiDSADKQOQAXwiDiAJIApWrSADKQPoASAJIAxUrXx8fCISfCIJIAMpA8ABfCIKIAMpA9gBIAMpA9ABIgQgC3wgBFStfHwiCyADKQPQAnwiDEL/////vrL98EJ+IgRCAEKBgICAv7L98MMAQgAQyQMgA0HwAGogBEIAQpHh5c2HifqZKEIAEMkDIANB4ABqIARCAELdsIWM6LaRqLh/QgAQyQMgA0HQAGogBEIAQqnAxomuzpOyMEIAEMkDIANB4AJqIAIpAwAiBEIAIAVCABDJAyADQZADaiAEQgAgBkIAEMkDIANBwANqIARCACAHQgAQyQMgA0HwA2ogBEIAIAhCABDJAyADQTBqIAMpA9gCIAsgDFatfCITIAMpA4ADfCIEIAMpA6gCIA0gEFStfCIQIAMpA7ACfCIGIAMpA0B8IgcgDiASVq0gAykDmAEgDSAOVq18fHwiCCADKQOgA3wiDSAJIA9UrSADKQP4AiAPIBFUrXx8fCIPIAMpA7ABfCIOIAogC1atIAMpA8gBIAkgClatfHx8IhF8IgkgAykDcHwiCiADKQOIASADKQOAASIFIAx8IAVUrXx8IgsgAykD4AJ8IgxC/////76y/fBCfiIFQgBCgYCAgL+y/fDDAEIAEMkDIANBIGogBUIAQpHh5c2HifqZKEIAEMkDIANBEGogBUIAQt2whYzotpGouH9CABDJAyADIAVCAEKpwMaJrs6TsjBCABDJAwJAAkAgAykDCCADKQNYIAMpA6gBIAcgCFatIAMpA0ggBiAHVq18fCADKQO4AiAGIBBUrXx8IhAgAykD0AN8IgUgDSAPVq0gAykDqAMgCCANVq18fHwiBiADKQOgAXwiByAGVK18IAcgByAOIBFWrSADKQO4ASAOIA9UrXx8fCIHVq18IAUgBlatIAMpA9gDIAUgEFStfHx8IgggAykD4AN8IgUgAykDuAMgByADKQOwA3wiBiAHVK18IAYgBCAJVq0gAykDiAMgBCATVK18fHwiBCAGVK18fCIGIAMpA1B8IgcgBlStfCAHIAMpA2ggBCAEIAMpA2B8IgRWrXwgBCAKIAtWrSADKQN4IAkgClatfHx8IgkgBFStfHwiBCAHVK18IAUgBlatIAMpA+gDIAUgCFStfHx8IgogAykD8AN8IgcgAykDyAMgBCADKQPAA3wiBSAEVK18IAUgBSADKQOYAyADKQPoAiALIAxWrXwiBiADKQOQA3wiBCAGVK18IAQgBCAJfCIEVq18fCIFVq18fCIIIAMpAwB8IgYgCFStfCAGIAYgAykDGCAFIAUgAykDEHwiBVatfCAFIAUgAykDKCAEIAQgAykDIHwiBFatfCAEIAMpAzggAykDMCIJIAx8IAlUrXx8IgkgBFStfHwiBVatfHwiBlatfCAHIAhWrSADKQP4AyAHIApUrXx8fCIIQqnAxomuzpOyMFYNAAJAIAhCqcDGia7Ok7IwUQRAIAZC3bCFjOi2kai4f1YNAiAGQt2whYzotpGouH9SBEAgBSEEIAYhB0KpwMaJrs6TsjAhCAwECyAFQpHh5c2HifqZKFYNAkLdsIWM6LaRqLh/IQcgBUKR4eXNh4n6mShRDQEgBSEEQqnAxomuzpOyMCEIDAMLIAUhBCAGIQcMAgtCkeHlzYeJ+pkoIQQgCUKBgICAv7L98MMAWg0AQqnAxomuzpOyMCEIDAELIAVCkeHlzYeJ+pkofSIHIAlCgYCAgL+y/fDDAFStIgp9IQQgBkKjz/rzl8nu18cAfCILIAVCkeHlzYeJ+pkoVCAHIApUcq0iBX0hByAIIAZC3bCFjOi2kai4f1QgBSALVnKtfUKpwMaJrs6TsjB9IQggCUKBgICAv7L98MMAfSEJCyAAIAk3AxggACAENwMQIAAgBzcDCCAAIAg3AwAgA0GABGokAAuLEAIBfxB+IwBBgARrIgMkACADQYACaiABKQMYIgVCACACKQMYIgRCABDJAyADQZACaiABKQMQIgZCACAEQgAQyQMgA0GgAmogASkDCCIHQgAgBEIAEMkDIANBsAJqIAEpAwAiCEIAIARCABDJAyADQfABaiADKQOAAiIKQonHmaSu8IHph39+IgRCAELH+vPD7YKjkDxCABDJAyADQeABaiAEQgBCjZXHw5bS2sCXf0IAEMkDIANBkAFqIARCAELdsIWM6LaRqLh/QgAQyQMgA0FAayAEQgBCqcDGia7Ok7IwQgAQyQMgA0HAAmogAikDECIEQgAgBUIAEMkDIANB8AJqIARCACAGQgAQyQMgA0GgA2ogBEIAIAdCABDJAyADQdADaiAEQgAgCEIAEMkDIANB0AFqIAMpA+ABIgwgAykDiAIiDSADKQOQAnwiDnwiCSADKQP4ASAKIAMpA/ABIgR8IARUrXx8IgogAykDwAJ8IgtCiceZpK7wgemHf34iBEIAQsf688PtgqOQPEIAEMkDIANBwAFqIARCAEKNlcfDltLawJd/QgAQyQMgA0GwAWogBEIAQt2whYzotpGouH9CABDJAyADQaABaiAEQgBCqcDGia7Ok7IwQgAQyQMgA0HQAmogAikDCCIEQgAgBUIAEMkDIANBgANqIARCACAGQgAQyQMgA0GwA2ogBEIAIAdCABDJAyADQeADaiAEQgAgCEIAEMkDIANBgAFqIAMpA8gCIAogC1atfCIRIAMpA/ACfCIPIAMpA5gCIA0gDlatfCIQIAMpA6ACfCINIAMpA5ABfCIOIAkgClatIAMpA+gBIAkgDFStfHx8IhJ8IgkgAykDwAF8IgogAykD2AEgAykD0AEiBCALfCAEVK18fCILIAMpA9ACfCIMQonHmaSu8IHph39+IgRCAELH+vPD7YKjkDxCABDJAyADQfAAaiAEQgBCjZXHw5bS2sCXf0IAEMkDIANB4ABqIARCAELdsIWM6LaRqLh/QgAQyQMgA0HQAGogBEIAQqnAxomuzpOyMEIAEMkDIANB4AJqIAIpAwAiBEIAIAVCABDJAyADQZADaiAEQgAgBkIAEMkDIANBwANqIARCACAHQgAQyQMgA0HwA2ogBEIAIAhCABDJAyADQTBqIAMpA9gCIAsgDFatfCITIAMpA4ADfCIEIAMpA6gCIA0gEFStfCIQIAMpA7ACfCIGIAMpA0B8IgcgDiASVq0gAykDmAEgDSAOVq18fHwiCCADKQOgA3wiDSAJIA9UrSADKQP4AiAPIBFUrXx8fCIPIAMpA7ABfCIOIAogC1atIAMpA8gBIAkgClatfHx8IhF8IgkgAykDcHwiCiADKQOIASADKQOAASIFIAx8IAVUrXx8IgsgAykD4AJ8IgxCiceZpK7wgemHf34iBUIAQsf688PtgqOQPEIAEMkDIANBIGogBUIAQo2Vx8OW0trAl39CABDJAyADQRBqIAVCAELdsIWM6LaRqLh/QgAQyQMgAyAFQgBCqcDGia7Ok7IwQgAQyQMCQAJAIAMpAwggAykDWCADKQOoASAHIAhWrSADKQNIIAYgB1atfHwgAykDuAIgBiAQVK18fCIQIAMpA9ADfCIFIA0gD1atIAMpA6gDIAggDVatfHx8IgYgAykDoAF8IgcgBlStfCAHIAcgDiARVq0gAykDuAEgDiAPVK18fHwiB1atfCAFIAZWrSADKQPYAyAFIBBUrXx8fCIIIAMpA+ADfCIFIAMpA7gDIAcgAykDsAN8IgYgB1StfCAGIAQgCVatIAMpA4gDIAQgE1StfHx8IgQgBlStfHwiBiADKQNQfCIHIAZUrXwgByADKQNoIAQgBCADKQNgfCIEVq18IAQgCiALVq0gAykDeCAJIApWrXx8fCIJIARUrXx8IgQgB1StfCAFIAZWrSADKQPoAyAFIAhUrXx8fCIKIAMpA/ADfCIHIAMpA8gDIAQgAykDwAN8IgUgBFStfCAFIAUgAykDmAMgAykD6AIgCyAMVq18IgYgAykDkAN8IgQgBlStfCAEIAQgCXwiBFatfHwiBVatfHwiCCADKQMAfCIGIAhUrXwgBiAGIAMpAxggBSAFIAMpAxB8IgVWrXwgBSAFIAMpAyggBCAEIAMpAyB8IgRWrXwgBCADKQM4IAMpAzAiCSAMfCAJVK18fCIJIARUrXx8IgVWrXx8IgZWrXwgByAIVq0gAykD+AMgByAKVK18fHwiCEKpwMaJrs6TsjBWDQACQCAIQqnAxomuzpOyMFEEQCAGQt2whYzotpGouH9WDQIgBkLdsIWM6LaRqLh/UgRAIAUhBCAGIQdCqcDGia7Ok7IwIQgMBAsgBUKNlcfDltLawJd/Vg0CQt2whYzotpGouH8hByAFQo2Vx8OW0trAl39RDQEgBSEEQqnAxomuzpOyMCEIDAMLIAUhBCAGIQcMAgtCjZXHw5bS2sCXfyEEIAlCx/rzw+2Co5A8Wg0AQqnAxomuzpOyMCEIDAELIAVC8+q4vOmtpb/oAHwiByAJQsf688PtgqOQPFStIgp9IQQgBkKjz/rzl8nu18cAfCILIAVCjZXHw5bS2sCXf1QgByAKVHKtIgV9IQcgCCAGQt2whYzotpGouH9UIAUgC1ZyrX1CqcDGia7Ok7IwfSEIIAlCx/rzw+2Co5A8fSEJCyAAIAk3AxggACAENwMQIAAgBzcDCCAAIAg3AwAgA0GABGokAAvIDQEMfyMAQUBqIgQkAAJAAkACQAJAAkACfwJAAkACQAJAAkACQCACRQRAIARBEGpBkJLCACgCADYCACAEQYiSwgApAgA3AwgMAQsgAkEASA0BQdHOxQAtAAAaQQEhAyACQQEQ1gQiB0UNASACBEAgByABIAL8CgAACwJAIAJBAUYNACACIAdqIQVBACEBIAJBAXYiBkEBRwRAIAJBAWshAyAGQf7///8DcSEJA0AgAyAHaiIGLQAAIQggBiABIAdqIgYtAAA6AAAgBiAIOgAAIAUgAUF+c2oiCC0AACEKIAggBkEBaiIGLQAAOgAAIAYgCjoAACADQQJrIQMgCSABQQJqIgFHDQALCyACIgNBAnFFDQAgASAHaiIGLQAAIQkgBiAFIAFBf3NqIgEtAAA6AAAgASAJOgAACyAEQQhqIAcgA0EIEM8CIAcgAhDfBAsgBEE4akGQksIAKAIANgIAIARBiJLCACkCADcDMCAEQTBqQYyTwgAQpQMgBCgCNEEBNgIAIAQoAjQhAQJAAkAgBCgCMCICQYCAgIB4Rw0AIAEoAggNACAEQQA2AiAgBEKAgICAwAA3AhgMAQsgBEEBNgI4IAQgATYCNCAEIAI2AjAgBEEYaiAEQTBqQQRBABDPAQsgBEE4aiIBIARBIGooAgA2AgAgBCAEKQIYNwMwIARBMGpBARDDAiAEKAI0IQkgBCgCMCENAn8CQCAEKAIQIgcgASgCACICSwRAIAJBAnQhASACRQ0BQdHOxQAtAAAaIAFBBBDWBCIFRQ0EIAEEQCAFIAkgAfwKAAALIAJBA3EhBkEAIQEgBCgCDCELIAJBBE8EQCACQQJ0QXBxIQ5BACEDA0AgAyAFaiIIIAgoAgAgAyALaiIKKAIAcTYCACAIQQRqIgwgDCgCACAKQQRqKAIAcTYCACAIQQhqIgwgDCgCACAKQQhqKAIAcTYCACAIQQxqIgggCCgCACAKQQxqKAIAcTYCACABQQRqIQEgDiADQRBqIgNHDQALCyAGBEAgBSABQQJ0IgNqIQEgAyALaiEDA0AgASABKAIAIAMoAgBxNgIAIAFBBGohASADQQRqIQMgBkEBayIGDQALCyAFIAJBAnQiAWpBBGsoAgAEQCAFIQMgAiEBDAsLIAIhAwNAIAFFBEBBACEBDAkLIANBAWshAyABQQRrIgEgBWooAgBFDQALIANBAWoiASACIAEgAkkbIQEMBwsgB0ECdCEBIAQoAgwhAiAHBEBB0c7FAC0AABogAUEEENYEIgVFDQUgAQRAIAUgAiAB/AoAAAsgB0EDcSEGQQAhASAHQQRPBEAgB0ECdEFwcSEKQQAhAwNAIAMgBWoiAiACKAIAIAMgCWoiCCgCAHE2AgAgAkEEaiILIAsoAgAgCEEEaigCAHE2AgAgAkEIaiILIAsoAgAgCEEIaigCAHE2AgAgAkEMaiICIAIoAgAgCEEMaigCAHE2AgAgAUEEaiEBIAogA0EQaiIDRw0ACwsgBgRAIAUgAUECdCICaiEBIAIgCWohAwNAIAEgASgCACADKAIAcTYCACABQQRqIQEgA0EEaiEDIAZBAWsiBg0ACwsgBSAHQQJ0IgFqQQRrKAIABEAgBSEDIAcMAwsgByEDA0AgAUUEQEEAIQEMCAsgA0EBayEDIAFBBGsiASAFaigCAEUNAAsgA0EBaiIBIAcgASAHSRshAQwGC0EEIQMgAQRAQQQgAiAB/AoAAAtBACEBQQAhAgwKC0EEIQMgAQRAQQQgCSAB/AoAAAtBAAshASAEQYCAgIB4NgIwIAQgBEEIajYCNCABIQIMCQsgAyACQaSbwgAQyAQAC0EEIAFB+IHAABDIBAALQQQgAUH4gcAAEMgEAAsgB0ECdiABTQRAIAchAiAFIQMMBAsgB0ECdCEGIAFFBEAgBSAGEN8EQQQMAgsgASECIAUgBkEEIAFBAnQiBRDOBCIDDQNBBCAFQZSSwgAQyAQACyACQQJ2IAFNBEAgBSEDDAMLIAJBAnQhBiABDQEgBSAGEN8EQQQLIQNBACECQQAhAQwBCyABIQIgBSAGQQQgAUECdCIFEM4EIgMNAEEEIAVBlJLCABDIBAALIARBgICAgHg2AjAgBCAEQQhqNgI0IAcNAQsgBEEANgIsIARCgICAgMAANwIkDAELIARBJGogBEEwakEEQQAQ7AELIAAgATYCCCAAIAM2AgQgACACNgIAIAAgBCkCJDcCDCAAQRRqIARBLGooAgA2AgAgDQRAIAkgDUECdBDfBAsgBCgCCCIABEAgBCgCDCAAQQJ0EN8ECyAEQUBrJAAL7AwCAX8UfiMAQYADayIDJAAgA0GAAWogASkDGCIEQgAgAikDGCIFQgAQyQMgA0GQAWogASkDECIJQgAgBUIAEMkDIANBoAFqIAEpAwgiB0IAIAVCABDJAyADQbABaiABKQMAIghCACAFQgAQyQMgA0HwAGogAykDgAEiBkKx6pSR3aOCnFh+IgVCAEKv+P//b0IAEMkDIANB4ABqIAVCAEJ/QgAQyQMgA0HAAWogAikDECIFQgAgBEIAEMkDIANB8AFqIAVCACAJQgAQyQMgA0GgAmogBUIAIAdCABDJAyADQdACaiAFQgAgCEIAEMkDIANB0ABqIAMpA2AiBSADKQOIASINIAMpA5ABfCIOfCIKIAMpA3ggBiADKQNwIgt8IAtUrXx8IgsgAykDwAF8IgxCseqUkd2jgpxYfiIGQgBCr/j//29CABDJAyADQUBrIAZCAEJ/QgAQyQMgA0HQAWogAikDCCIGQgAgBEIAEMkDIANBgAJqIAZCACAJQgAQyQMgA0GwAmogBkIAIAdCABDJAyADQeACaiAGQgAgCEIAEMkDIANBMGogAykDyAEgCyAMVq18IhEgAykD8AF8Ig8gBSADKQOYASANIA5WrXwiEyADKQOgAXwiDXwiDiAKIAtWrSADKQNoIgsgBSAKVq18fHwiFHwiCiADKQNAIhV8IhAgAykDWCADKQNQIgYgDHwgBlStfHwiDCADKQPQAXwiEkKx6pSR3aOCnFh+IgZCAEKv+P//b0IAEMkDIANBIGogBkIAQn9CABDJAyADQeABaiACKQMAIgZCACAEQgAQyQMgA0GQAmogBkIAIAlCABDJAyADQcACaiAGQgAgB0IAEMkDIANB8AJqIAZCACAIQgAQyQMgA0EQaiADKQPYASAMIBJWrXwiFiADKQOAAnwiBCAVIAUgAykDqAEgDSATVK18IhcgAykDsAF8Igl8IgUgDiAUVq0gCyANIA5WrXx8fCIHIAMpA6ACfCIIIAogD1StIAMpA/gBIA8gEVStfHx8IgZ8Ig8gDCAQVK0gAykDSCIMIAogEFatfHx8IhR8IgogAykDICINfCIOIAMpAzggAykDMCIQIBJ8IBBUrXx8IhAgAykD4AF8IhJCseqUkd2jgpxYfiIRQgBCr/j//29CABDJAyADIBFCAEJ/QgAQyQMCQAJAIAMpAwgiESADKQMoIhMgDSAMIBUgBSAHVq0gCyAFIAlUrXx8IgsgAykDuAEgCSAXVK18fCIFIAMpA9ACfCIJIAYgCFStIAMpA6gCIAcgCFatfHx8Igd8IgggB1StfCAIIAggDyAUVq0gDCAGIA9WrXx8fCIIVq18IgYgByAJVK0gAykD2AIgBSAJVq18fCIMIAUgC1StfCILfCIFIAMpA+ACfCIJIAMpA7gCIAggAykDsAJ8IgcgCFStfCAHIAQgClatIAMpA4gCIAQgFlStfHx8IgQgB1StfHwiB3wiCCAHVK18IAggEyAEIAQgDXwiBFatfCAEIA4gEFatIBMgCiAOVq18fHwiCiAEVK18fCIEIAhUrXwiDyAHIAlUrSADKQPoAiAFIAlWrXx8Ig0gBSAGVK0gCyAMVK18fCILfCIFIAMpA/ACfCIHIAMpA8gCIAQgBCADKQPAAnwiBFatfCAEIAQgAykDmAIgAykD6AEgECASVq18IgggAykDkAJ8IgkgCFStfCAJIAkgCnwiCVatfHwiBFatfHwiCCADKQMAIgZ8IgogCFStfCAKIBEgBCAEIAZ8IgRWrXwgBCAEIBEgCSAGIAl8IglWrXwgCSADKQMYIAMpAxAiBiASfCAGVK18fCIGIAlUrXx8IgRWrXx8IgkgClStfCIKIAcgCFatIAMpA/gCIAUgB1atfHwiByAFIA9UrSALIA1UrXx8IgV8IgggClQgBSAHVHINACAIQn9SBEAgBCEFIAkhBwwCCyAJQn9SBEAgBCEFIAkhB0J/IQgMAgtCfyEHIARCf1IEQCAEIQVCfyEIDAILQn8hBSAGQq/4//9vWg0AQn8hCAwBCyAEQgF8IgcgBkKv+P//b1StIgp9IQUgCUIBfCILIARCf1IgByAKVHKtIgR9IQcgCCAJQn9SIAQgC1ZyrX1CAXwhCCAGQtGHgIAQfCEGCyAAIAY3AxggACAFNwMQIAAgBzcDCCAAIAg3AwAgA0GAA2okAAufGQIIfxJ+IwBBsAFrIgMkACADQeAAakIANwMAIANB2ABqQgA3AwAgA0IANwNQIANCATcDaCADQThqIgVCfzcDACADQTBqIgdCfzcDACADQn83AyggA0Ku+P//bzcDQCADQZABaiADQShqQf8BELICIANB+ABqIgZCADcDACADQYABaiIJQgA3AwAgA0IANwNwIAMgAykDqAFCAYM3A4gBAkAgA0HwAGogA0HQAGpBIBDxA0UEQEGAAiEEDAELQYACIQQDQCAFQn83AwAgB0J/NwMAIANCfzcDKCADQq74//9vNwNAIANBkAFqIANBKGogBEECaxCyAiAGQgA3AwAgCUIANwMAIANCADcDcCADIAMpA6gBQgGDNwOIASAEQQFrIQQgA0HwAGogA0HQAGpBIBDxAw0ACwtBACEFAkACQAJAAkACQAJAIAIgBEEDdiAEQQdxQQBHaiIETQRAAkAgBCACayIERQRAQQEhBQwBC0HRzsUALQAAGiAEQQEQ1wQiBUUNBAsgAyAENgKYASADIAU2ApQBIAMgBDYCkAEgAgRAIANBkAFqIAQgAkEBQQEQiAMgAygCmAEhBCADKAKUASEFCyACBEAgBCAFaiABIAL8CgAACyMAQcABayIBJAAgA0EoaiIHAn8gAiAEakEfTQRAIAdBADoAAUEBDAELIAFBoAFqIAUpABgiC0I4hiALQoD+A4NCKIaEIAtCgID8B4NCGIYgC0KAgID4D4NCCIaEhCALQgiIQoCAgPgPgyALQhiIQoCA/AeDhCALQiiIQoD+A4MgC0I4iISEhCIQQgBCoaG6gKD0AUIAEMkDIAFBsAFqIAUpABAiC0I4hiALQoD+A4NCKIaEIAtCgID8B4NCGIYgC0KAgID4D4NCCIaEhCALQgiIQoCAgPgPgyALQhiIQoCA/AeDhCALQiiIQoD+A4MgC0I4iISEhCIOQgBCoaG6gKD0AUIAEMkDIAFB0ABqIAUpAAgiC0I4hiALQoD+A4NCKIaEIAtCgID8B4NCGIYgC0KAgID4D4NCCIaEhCALQgiIQoCAgPgPgyALQhiIQoCA/AeDhCALQiiIQoD+A4MgC0I4iISEhCIVQgBCoaG6gKD0AUIAEMkDIAFBIGogBSkAACILQjiGIAtCgP4Dg0IohoQgC0KAgPwHg0IYhiALQoCAgPgPg0IIhoSEIAtCCIhCgICA+A+DIAtCGIhCgID8B4OEIAtCKIhCgP4DgyALQjiIhISEIhlCAEKhobqAoPQBQgAQyQMgAUGQAWogASkDoAEiDEKx6pSR3aOCnFh+IgtCAEKv+P//b0IAEMkDIAFBgAFqIAtCAEJ/QgAQyQMgAUHwAGogECABKQOAASILIAEpA6gBIg8gASkDsAF8IhF8Ig0gASkDmAEgDCABKQOQASISfCASVK18fCIMfCIQQrHqlJHdo4KcWH4iEkIAQq/4//9vQgAQyQMgAUHgAGogEkIAQn9CABDJAyABQUBrIAwgEFatIhYgDnwiDiALIAEpA7gBIA8gEVatfCIUIAEpA1B8Ig98IhEgDCANVK0gASkDiAEiDCALIA1WrXx8fCIXfCISIAEpA2AiGHwiEyABKQN4IAEpA3AiDSAQfCANVK18fCIQQrHqlJHdo4KcWH4iDUIAQq/4//9vQgAQyQMgAUEwaiANQgBCf0IAEMkDIAFBEGogASkDMCINIBggFSALIAEpA1ggDyAUVK18IhogASkDIHwiFHwiCyARIBdWrSAMIA8gEVatfHx8Ig98IhEgDiAWVK0gDiASVq18fCIOfCIVIBAgE1StIAEpA2giFiASIBNWrXx8fCIbfCISIAEpA0ggECABKQNAIhN8IBNUrXx8IhBCseqUkd2jgpxYfiITQgBCr/j//29CABDJAyABIBNCAEJ/QgAQyQMCQAJAAkAgASkDCCITIAEpAzgiFyANIBkgCyAPVq0gDCALIBRUrXx8IhwgASkDKCAUIBpUrXx8Igt8IgwgC1StIAwgDCAPIBFWrSAOIBFUrXx8Ig9WrXwiFCALIBxUrXwiCyAWIA8gDyAYfCIMVq18IAwgDCAVIBtWrSAWIA4gFVatfHx8Ig5WrXx8Igx8Ig8gDFStfCAPIBcgDiANIA58IhFWrXwgESAQIBJUrSAXIA0gElatfHx8IhIgEVStfHwiDSAPVK18IhggCyAUVK0gCyAMVq18fCIOIAEpAwAiC3wiESAOVK18IBEgESATIA0gCyANfCIMVq18IAwgEyALIAsgEnwiDVatfCANIAEpAxggECABKQMQIgt8IAtUrXx8Ig8gDVStfHwiCyAMVK18fCIMVq18Ig0gDiAYVK18Ig4gDVQNACAOQn9SDQEgDEJ/UgRAQn8hDgwCC0J/IRAgC0J/UgRAQn8hDiALIQ0MAwsgD0Kv+P//b1oNAEJ/IQ5CfyENDAILIAtCAXwiECAPQq/4//9vVK0iEX0hDSAMQgF8IhIgC0J/UiAQIBFUcq0iC30hECAOIAxCf1IgCyASVnKtfUIBfCEOIA9C0YeAgBB8IQ8MAQsgDCEQIAshDQsgByAPNwMgIAcgDTcDGCAHIBA3AxAgByAONwMIQQALOgAAIAFBwAFqJAAgAy0AKEUNASADIAMtACk6AHBB5NjCAEErIANB8ABqQaTawgBBtNrCABDKAwALIAJBAEgNA0HRzsUALQAAGkEBIQUgAkEBENYEIgdFDQMgAgRAIAcgASAC/AoAAAsgA0EMaiAHAn9BASACQQFGDQAaIAIgB2ohAUEAIQQgAkEBdiIGQQFHBEAgAkEBayEFIAZB/v///wNxIQkDQCAFIAdqIgYtAAAhCCAGIAQgB2oiBi0AADoAACAGIAg6AAAgASAEQX5zaiIILQAAIQogCCAGQQFqIgYtAAA6AAAgBiAKOgAAIAVBAmshBSAJIARBAmoiBEcNAAsLIAIgAkECcUUNABogBCAHaiIFLQAAIQYgBSABIARBf3NqIgEtAAA6AAAgASAGOgAAIAILQQgQzwIgByACEN8EAkBB2NPBAEHo0cEAQSAQ8QMEQCADQThqQn83AwAgA0EwakJ/NwMAIANCfzcDKCADQt7w//9fNwNADAELIANBQGtB8NPBACkDADcDACADQThqQejTwQApAwA3AwAgA0EwakHg08EAKQMANwMAIANB2NPBACkDADcDKAsgA0GQAWoiAiADQShqIgEQ9QEgA0EANgJ4IANCgICAgBA3AnAgA0Hc08IANgIsIANCoICAgA43AjAgAyADQfAAajYCKCACIAEQ0wINBCADKAJwIQIgASADKAJ0IgcgAygCeBCVAyADKAIwIgVFBEAgAygCKEUEQCABQcjQwgAQpQMLIAMoAixBADYCACADQQE2AjBBASEFCyADKAIsIgEgASgCAEEBaiIENgIAAkAgBA0AIAVBAUcEQCAFQQJ0QQRrIQUgAUEEaiEEA0AgBCAEKAIAQQFqIgE2AgAgAQ0CIARBBGohBCAFQQRrIgUNAAsLIAMoAjAiASADKAIoRgRAIANBKGpB2NDCABClAwsgAygCLCABQQJ0akEBNgIAIAMgAUEBajYCMAsgA0EgaiADQTBqKAIANgIAIAMgAykCKDcDGCACBEAgByACEN8ECyADQShqIANBDGogA0EYahDvAQJAAkAgAygCMEUEQEHRzsUALQAAGkEBIQRBAUEBENYEIgFFDQggAUEAOgAAIAAgAUEBEIEBDAELIANBkAFqIANBKGpBCBCwAiADKAKUASEBAkAgAygCmAEiAkECSQ0AIAEgAmohB0EAIQQgAkEBdiIGQQFHBEAgAkEBayEFIAZB/v///wdxIQkDQCABIAVqIgYtAAAhCCAGIAEgBGoiBi0AADoAACAGIAg6AAAgByAEQX5zaiIILQAAIQogCCAGQQFqIgYtAAA6AAAgBiAKOgAAIAVBAmshBSAJIARBAmoiBEcNAAsLIAJBAnFFDQAgASAEaiIFLQAAIQYgBSAHIARBf3NqIgUtAAA6AAAgBSAGOgAACyADKAKQASEEIAAgASACEIEBIARFDQELIAEgBBDfBAsgAygCKCIARQ0BIAMoAiwgAEECdBDfBAwBCyAAIAMpAzA3AwAgAEEYaiADQcgAaikDADcDACAAQRBqIANBQGspAwA3AwAgAEEIaiADQThqKQMANwMAIAMoApABIgBFDQAgBSAAEN8ECyADQbABaiQADwtBASAEQZTawgAQyAQACyAFIAJB1NjCABDIBAALQYTUwgBBNyADQdAAakH008IAQYjVwgAQygMAC0EBQQEQ/wQAC8gMAgZ+DX8jAEEgayIOJABBAUECIAAoAgwbIgogACgCCCIISwRAIA5BGGogACAKIABBEGoQogEgACgCCCEICyAAKQMYIgIgASgCACINrSIDhULzytHLp4zZsvAAhSIEQhCJIAQgACkDECIFQuHklfPW7Nm87ACFfCIEhSIGIAJC7d6R85bM3LfkAIUiAiAFQvXKzYPXrNu38wCFfCIFQiCJfCIHIANCgICAgICAgIAEhIUgAkINiSAFhSICIAR8IgMgAkIRiYUiAnwiBCACQg2JhSICIAZCFYkgB4UiBSADQiCJQv8BhXwiA3wiBiACQhGJhSICQg2JIAIgAyAFQhCJhSIDIARCIIl8IgR8IgKFIgVCEYkgBSADQhWJIASFIgMgBkIgiXwiBHwiBYUiBkINiSAGIANCEIkgBIUiAyACQiCJfCICfIUiBEIRiSADQhWJIAKFIgJCEIkgAiAFQiCJfCIChUIViYUgAiAEfCICQiCIhSAChSECIAEoAhQhECABKAIQIREgASgCDCEPIAEoAgghEiABKAIEIRMgCEUEQCAOQRBqIABBASAAQRBqEKIBCyAAKAIEIgwgAqdxIQggAkIZiCIEQv8Ag0KBgoSIkKDAgAF+IQUgACgCACEJQQAhAQJAAkADQCAIIAlqKQAAIgMgBYUiAkJ/hSACQoGChIiQoMCAAX2DQoCBgoSIkKDAgH+DIgJQRQRAA0AgDSAJIAJ6p0EDdiAIaiAMcUF0bGoiCkEMaygCAEYNAyACQgF9IAKDIgJQRQ0ACwsgA0KAgYKEiJCgwIB/gyECQQEhCiABQQFHBEAgAnqnQQN2IAhqIAxxIQsgAkIAUiEKCyACIANCAYaDUARAIAggFEEIaiIUaiAMcSEIIAohAQwBCwsgCSALaiwAACIIQQBOBEAgCSAJKQMAQoCBgoSIkKDAgH+DeqdBA3YiC2otAAAhCAsgCSALaiAEp0H/AHEiAToAACAJIAtBCGsgDHFqQQhqIAE6AAAgACAAKAIIIAhBAXFrNgIIIAAgACgCDEEBajYCDCAJIAtBdGxqIgFBDGsgDTYCACABQQhrIBM2AgAgAUEEayASNgIADAELIApBBGsgEjYCACAKQQhrIBM2AgALIAApAxgiAiAPrSIDhULzytHLp4zZsvAAhSIEQhCJIAQgACkDECIFQuHklfPW7Nm87ACFfCIEhSIGIAJC7d6R85bM3LfkAIUiAiAFQvXKzYPXrNu38wCFfCIFQiCJfCIHIANCgICAgICAgIAEhIUgAkINiSAFhSICIAR8IgMgAkIRiYUiAnwiBCACQg2JhSICIAZCFYkgB4UiBSADQiCJQv8BhXwiA3wiBiACQhGJhSICQg2JIAIgAyAFQhCJhSIDIARCIIl8IgR8IgKFIgVCEYkgBSADQhWJIASFIgMgBkIgiXwiBHwiBYUiBkINiSAGIANCEIkgBIUiAyACQiCJfCICfIUiBEIRiSADQhWJIAKFIgJCEIkgAiAFQiCJfCIChUIViYUgAiAEfCICQiCIhSAChSECIAAoAghFBEAgDkEIaiAAQQEgAEEQahCiAQsgACgCBCIMIAKncSEIIAJCGYgiBEL/AINCgYKEiJCgwIABfiEFIAAoAgAhCUEAIQ1BACEBAkADQAJAIAggCWopAAAiAyAFhSICQn+FIAJCgYKEiJCgwIABfYNCgIGChIiQoMCAf4MiAlBFBEADQCAPIAkgAnqnQQN2IAhqIAxxQXRsaiIKQQxrKAIARg0CIAJCAX0gAoMiAlBFDQALCyADQoCBgoSIkKDAgH+DIQJBASEKIAFBAUcEQCACeqdBA3YgCGogDHEhCyACQgBSIQoLIAIgA0IBhoNQBEAgCCANQQhqIg1qIAxxIQggCiEBDAIFIAkgC2osAAAiCEEATgRAIAkgCSkDAEKAgYKEiJCgwIB/g3qnQQN2IgtqLQAAIQgLIAkgC2ogBKdB/wBxIgE6AAAgCSALQQhrIAxxakEIaiABOgAAIAAgACgCCCAIQQFxazYCCCAAIAAoAgxBAWo2AgwgCSALQXRsaiIAQQxrIA82AgAgAEEIayARNgIAIABBBGsgEDYCAAwDCwALCyAKQQRrIBA2AgAgCkEIayARNgIACyAOQSBqJAALuw4CBX8RfiMAQZACayIDJABBAyEEIAACfwJAAkACQAJAAkACQAJAAkACQCACQQNPBEACfyABLAAAIgRBAE4EQCAEQf8BcSEEIAFBAWoMAQsgAS0AAUE/cSEGIARBH3EhBSAEQV9NBEAgBUEGdCAGciEEIAFBAmoMAQsgAS0AAkE/cSAGQQZ0ciEGIARBcEkEQCAGIAVBDHRyIQQgAUEDagwBCyAFQRJ0QYCA8ABxIAEtAANBP3EgBkEGdHJyIQQgAUEEagshBSAEQTBHDQEgBSABIAJqRg0FAn8gBSwAACIEQQBOBEAgBEH/AXEMAQsgBS0AAUE/cSEHIARBH3EhBiAGQQZ0IAdyIARBX00NABogBS0AAkE/cSAHQQZ0ciEHIAcgBkEMdHIgBEFwSQ0AGiAGQRJ0QYCA8ABxIAUtAANBP3EgB0EGdHJyC0H4AEcNASABLAACQb9/SgRAIAJBAmshAiABQQJqIQEMAgsgASACQQIgAkHw1sEAENIEAAsgAkUNAQtBACEEAkADQAJAIAEgBGotAAAiBUEwa0H/AXFBCkkNACAFQcEAaw4mAAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAAAAAACCyACIARBAWoiBEcNAAtBAiEEIAJB4ABLDQEgA0HgAWogASACEKYCIAMpA4gCIRIgAykDgAIhEyADKQP4ASEUIAMpA/ABIRUgAykD6AEhFiADKQPgASEXQSghBANAIANB8ABqIARBqNTBAGopAwAiCUIAIBJCABDJAyADQYABaiAJQgAgE0IAEMkDIANBkAFqIAlCACAUQgAQyQMgA0GgAWogCUIAIBVCABDJAyADQbABaiAJQgAgFkIAEMkDIANBwAFqIAlCACAXQgAQyQMgA0HgAGogAykDcCIRIA98Ig5CAEIAQv3/8//P///5iX8QyQMgA0HQAGogAykDaCIJQgBCq9X+////v/+5f0IAEMkDIANBQGsgCUIAQv//z4rr///VHkIAEMkDIANBMGogCUIAQqTsw7WP1LSY5wBCABDJAyADQSBqIAlCAEK/pZScz/DSu+QAQgAQyQMgA0EQaiAJQgBC19mumuT26Y3LAEIAEMkDIAMgCUIAQprN/8ujvcSAGkIAEMkDIAMpAwggAykDwAEiGCAIfCIJIAMpA7gBIAMpA7ABIgggDXwiDSAIVK18IA0gAykDqAEgAykDoAEiCCAMfCIMIAhUrXwgDCADKQOYASADKQOQASIIIAt8IgsgCFStfCALIAMpA4gBIAMpA4ABIgggCnwiCiAIVK18IAogAykDeCAOIBFUrXx8IgggClStfHwiCiALVK18fCILIAxUrXx8IgwgDVStfHwiESADKQMAfCINIBFUrXwgDSANIAMpAxggDCAMIAMpAxB8IgxWrXwgDCAMIAMpAyggCyALIAMpAyB8IgtWrXwgCyALIAMpAzggCiAKIAMpAzB8IgpWrXwgCiAKIAMpA0ggAykDQCIPIAh8IgggD1StfCAIIAMpA1ggDiADKQNQIg58IA5UrXx8Ig8gCFStfHwiClatfHwiC1atfHwiDFatfHwiDVatfCIOIBAgCSARVq0gAykDyAEgCSAYVK18fCIQfCIJfCIIIA5UrSAJIBBUrXwhECAEQQhrIgRBeEcNAAsgEEIAUiAIQprN/8ujvcSAGlZyDQMgCEKazf/Lo73EgBpRBEAgDULX2a6a5PbpjcsAVg0EIA1C19mumuT26Y3LAFENA0Kazf/Lo73EgBohCAsgDSEJDAYLQQAhBAsgACAEOgABQQEMBwsgDEK/pZScz/DSu+QAVg0AQtfZrprk9umNywAhCSAMQr+llJzP8NK75ABSBEBCms3/y6O9xIAaIQgMBAsgC0Kk7MO1j9S0mOcAVg0AQr+llJzP8NK75AAhDiALQqTsw7WP1LSY5wBSBEBCms3/y6O9xIAaIQgMBQsgCkL//8+K6///1R5WDQBCpOzDtY/UtJjnACERIApC///Piuv//9UeUiAPQqrV/v///7//uX9Ycg0CCyAKQv//z4rr///VHn0iCSAPQqvV/v///7//uX9UrSIOfSEQIAtCpOzDtY/UtJjnAH0iEiAKQv//z4rr///VHlQgCSAOVHKtIgp9IREgDEK/pZScz/DSu+QAfSIJIAtCpOzDtY/UtJjnAFQgCiASVnKtIgp9IQ4gDULX2a6a5PbpjcsAfSILIAxCv6WUnM/w0rvkAFQgCSAKVHKtIgp9IQkgCCANQtfZrprk9umNywBUIAogC1ZyrX1Cms3/y6O9xIAafSEIIA9C1aqBgICAwIDGAHwhDwwEC0Hg1sEAEOgEAAtCms3/y6O9xIAaIQggCiEQDAILIAwhDgsgCyERIAohEAsgACAPNwMwIAAgEDcDKCAAIBE3AyAgACAONwMYIAAgCTcDECAAIAg3AwhBAAs6AAAgA0GQAmokAAvEDAIJfwF+IwBB0ABrIgMkAAJAAkAgAi0ADCIJRQRAIANBOGogAhDYAyADKAI4RQ0BIAMpA0BQIQQLIANBgICAgHg2AjggAyACNgI8AkAgAigCCEUEQCADQQA2AiAgA0KAgICAwAA3AhgMAQsgA0EYaiADQThqQQBBARDsAQsCfyAERQRAIAMoAiAhBCADKAIYIQUgAygCHAwBCyADQUBrIANBIGooAgAiBDYCACADIAMpAhg3AzggBEUEQCADKAI4RQRAIANBOGpByNDCABClAwsgAygCPEEANgIAIANBATYCQEEBIQQLIAMoAjwiBSAFKAIAQQFqIgY2AgACQCAGDQAgBEEBRwRAIARBAnRBBGshBiAFQQRqIQQDQCAEIAQoAgBBAWoiBTYCACAFDQIgBEEEaiEEIAZBBGsiBg0ACwsgAygCQCIGIAMoAjhGBEAgA0E4akHY0MIAEKUDCyADKAI8IAZBAnRqQQE2AgAgAyAGQQFqNgJACyADKAJAIQQgAygCOCEFIAMoAjwLIQZBASEHAkAgCUEBRwRAIAlBASAEGyEHDAELQQAhBCAFQQRJDQAgBiAFQQJ0EN8EQQAhBUEEIQYLIAMgBzoAFCADIAQ2AhAgAyAGNgIMIAMgBTYCCAJAIAEtAAwEQCADQRhqIgQgASADQQhqEJoBIANBOGogBCACEKEBIAMpAkQiDEIgiKchByADKAI8IQYgAygCOCECIAynIQQCQCADLQAkIgFBAUcEQCABQQEgAygCQCIBGyEFDAELIAJBBE8EQCAGIAJBAnQQ3wRBBCEGQQAhAgtBASEFQQAhASAEQQRJDQAgByAEQQJ0EN8EQQAhBEEEIQcLIAAgATYCCCAAIAY2AgQgACACNgIAIAAgBUECIAVrIAkbOgAMIAQEQCAHIARBAnQQ3wQLIAMoAhgiAEUNASADKAIcIABBAnQQ3wQMAQsgASgCCCIGQQJ0IQRBACEFIAZB/////wNLIARB/P///wdLcg0CIAEoAgQhCAJ/IARFBEBBBCEHQQAMAQtB0c7FAC0AABpBBCEFIARBBBDWBCIHRQ0DIAYLIQEgBARAIAcgCCAE/AoAAAsCQAJAAkACQCADLQAUDgIBAAILQQIhBSADQQI6ACQgAyAGNgIgIAMgBzYCHCADIAE2AhgMAgsCQAJAAkACfyADKAIQIgUgBkYEQCAHQQRrIQogAygCDEEEayELA0AgBEUNAyAEIAtqIQggBCAKaiAEQQRrIQQoAgAiBSAIKAIAIghGDQALIAUgCEsgBSAISWsMAQsgBSAGSSAFIAZLawtB/wFxDgIAAgELIANBIGpBqMzCACkCADcDACADQaDMwgApAgA3AxhBASEFIAFFDQMgByABQQJ0EN8EDAMLIAMgBjYCQCADIAc2AjwgAyABNgI4IANBLGogA0EIaiADQThqEJ4BIANBIGogA0E0aigCACIBNgIAIAMgAykCLDcDGCADIAFFIgU6ACQMAgsgAyAGNgJAIAMgBzYCPCADIAE2AjggA0EsaiADQThqIANBCGoQhwIgA0EgaiADQTRqKAIAIgE2AgAgAyADKQIsNwMYIANBAkEBIAEbIgU6ACQMAQsgAyAGNgJAIAMgBzYCPCADIAE2AjggA0EsaiADQThqIANBCGoQygEgAygCNEUEQCADQSBqIANBNGooAgA2AgBBASEFIANBAToAJCADIAMpAiw3AxgMAQsgA0EgaiADQTRqKAIANgIAQQIhBSADQQI6ACQgAyADKQIsNwMYCyADQThqIANBGGogAhChASADKQJEIgxCIIinIQcgAygCPCEGIAMoAjghAiAMpyEEAkAgBUEBRwRAIAVBASADKAJAIgEbIQUMAQsgAkEETwRAIAYgAkECdBDfBEEEIQZBACECC0EBIQVBACEBIARBBEkNACAHIARBAnQQ3wRBACEEQQQhBwsgBARAIAcgBEECdBDfBAsgAygCGCIEBEAgAygCHCAEQQJ0EN8ECyAAIAE2AgggACAGNgIEIAAgAjYCACAAQQIgBWsgBSAJGzoADAsgAygCCCIABEAgAygCDCAAQQJ0EN8ECyADQdAAaiQADwtBtM3CAEEcQbTOwgAQ6AMACyAFIARB+IHAABDIBAAL3QsCDX8BfiMAQaAEayICJABB0c7FAC0AABoCQAJAAkACQEHAAUEIENYEIgMEQCADIAFBwAH8CgAAIAMpAwAhDyACQcABaiIBIANBCGpBuAH8CgAAIANBwAEQ3wQgAkEQaiACQcgBaikDADcDACACQRhqIAJB0AFqKQMANwMAIAJBIGogAkHYAWopAwA3AwAgAkEoaiACQeABaikDADcDACACQTBqIAJB6AFqKQMANwMAIAJBOGogAkHwAWopAwA3AwAgAkHIAGogAkGAAmopAwA3AwAgAkHQAGogAkGIAmopAwA3AwAgAkHYAGogAkGQAmopAwA3AwAgAkHgAGogAkGYAmopAwA3AwAgAkHoAGogAkGgAmopAwA3AwAgAkHwAGogAkGoAmopAwA3AwAgAkH4AGogAkGwAmopAwA3AwAgAiAPNwMAIAIgAikDwAE3AwggAiACKQP4ATcDQCACQbgBaiACQfACaikDADcDACACQbABaiACQegCaikDADcDACACQagBaiACQeACaikDADcDACACQaABaiACQdgCaikDADcDACACQZgBaiACQdACaikDADcDACACQZABaiACQcgCaikDADcDACACQYgBaiACQcACaikDADcDACACIAIpA7gCNwOAASABIAIQrwMgAigCxAEhASACKALAASEDIAIoAsgBIgRBAkcNASACQYADaiABQRBqKQMANwMAIAJBiANqIAFBGGopAwA3AwAgAkGQA2ogAUEgaikDADcDACACQZgDaiABQShqKQMANwMAIAJBoANqIAFBMGopAwA3AwAgAkGoA2ogAUE4aikDADcDACACIAEpAwg3A/gCIAEoAgQhBCABKAIAIQcgAwRAIAEgA0EFdBDfBAsgAkHAAWogAkFAaxCvAyACKALEASEBIAIoAsABIQMgAigCyAEiBUECRw0CIAJBuANqIAFBEGopAwA3AwAgAkHAA2ogAUEYaikDADcDACACQcgDaiABQSBqKQMANwMAIAJB0ANqIAFBKGopAwA3AwAgAkHYA2ogAUEwaikDADcDACACQeADaiABQThqKQMANwMAIAIgASkDCDcDsAMgASgCBCEFIAEoAgAhCCADBEAgASADQQV0EN8ECyACQcABaiACQYABahCvAyACKALEASEBIAIoAsABIQMgAigCyAEiBkECRw0DIAJB8ANqIgYgAUEQaikDADcDACACQfgDaiIJIAFBGGopAwA3AwAgAkGABGogAUEgaikDADcDACACQYgEaiIKIAFBKGopAwA3AwAgAkGQBGoiCyABQTBqKQMANwMAIAJBmARqIgwgAUE4aikDADcDACACIAEpAwg3A+gDIAEoAgQhDSABKAIAIQ4gAwRAIAEgA0EFdBDfBAsgACACKQPoAzcDiAEgACACKQOABDcDoAEgACANNgKEASAAIA42AoABIAAgBDYCBCAAIAc2AgAgAEGYAWogCSkDADcDACAAQZABaiAGKQMANwMAIABBqAFqIAopAwA3AwAgAEGwAWogCykDADcDACAAQbgBaiAMKQMANwMAIAAgBTYCRCAAIAg2AkAgAEEYaiACQYgDaikDADcDACAAQRBqIAJBgANqKQMANwMAIAAgAikD+AI3AwggAEE4aiACQagDaikDADcDACAAQTBqIAJBoANqKQMANwMAIABBKGogAkGYA2opAwA3AwAgACACKQOQAzcDICAAIAIpA7ADNwNIIABB0ABqIAJBuANqKQMANwMAIABB2ABqIAJBwANqKQMANwMAIABB+ABqIAJB4ANqKQMANwMAIABB8ABqIAJB2ANqKQMANwMAIABB6ABqIAJB0ANqKQMANwMAIAAgAikDyAM3A2AgAkGgBGokAA8LQQhBwAFB8LXCABDIBAALIAIgBDYCyAEMAgsgAiAFNgLIAQwBCyACIAY2AsgBCyACIAE2AsQBIAIgAzYCwAFBgIvAAEErIAJBwAFqQfCKwABBpI3AABDKAwALhB4CCH8PfiMAQbABayIDJAAgA0HgAGpCADcDACADQdgAakIANwMAIANCADcDUCADQgE3A2ggA0E4akIANwMAIANBQGtCADcDACADQgA3AzAgA0KRgICAgICAgAg3AyggA0GQAWogA0EoakH/ARCyAiADQfgAaiIHQgA3AwAgA0GAAWoiBkIANwMAIANCADcDcCADIAMpA6gBQgGDNwOIAQJAIANB8ABqIANB0ABqQSAQ8QNFBEBBgAIhBAwBCyADQTBqIQVBgAIhBANAIAVCADcDACAFQQhqQgA3AwAgBUEQakIANwMAIANCkYCAgICAgIAINwMoIANBkAFqIANBKGogBEECaxCyAiAHQgA3AwAgBkIANwMAIANCADcDcCADIAMpA6gBQgGDNwOIASAEQQFrIQQgA0HwAGogA0HQAGpBIBDxAw0ACwtBACEFAkACQAJAAkACQAJAIAIgBEEDdiAEQQdxQQBHaiIETQRAAkAgBCACayIERQRAQQEhBQwBC0HRzsUALQAAGiAEQQEQ1wQiBUUNBAsgAyAENgKYASADIAU2ApQBIAMgBDYCkAEgAgRAIANBkAFqIAQgAkEBQQEQiAMgAygCmAEhBCADKAKUASEFCyACBEAgBCAFaiABIAL8CgAACyMAQcACayIBJAAgA0EoaiIHAn8gAiAEakEfTQRAIAdBADoAAUEBDAELIAFB8AFqIAUpABgiC0I4hiALQoD+A4NCKIaEIAtCgID8B4NCGIYgC0KAgID4D4NCCIaEhCALQgiIQoCAgPgPgyALQhiIQoCA/AeDhCALQiiIQoD+A4MgC0I4iISEhCINQgBCgYiA8Leuf0IAEMkDIAFBsAJqIAUpABAiC0I4hiALQoD+A4NCKIaEIAtCgID8B4NCGIYgC0KAgID4D4NCCIaEhCALQgiIQoCAgPgPgyALQhiIQoCA/AeDhCALQiiIQoD+A4MgC0I4iISEhCIOQgBCgYiA8Leuf0IAEMkDIAFBkAFqIAUpAAgiC0I4hiALQoD+A4NCKIaEIAtCgID8B4NCGIYgC0KAgID4D4NCCIaEhCALQgiIQoCAgPgPgyALQhiIQoCA/AeDhCALQiiIQoD+A4MgC0I4iISEhCIQQgBCgYiA8Leuf0IAEMkDIAFBQGsgBSkAACILQjiGIAtCgP4Dg0IohoQgC0KAgPwHg0IYhiALQoCAgPgPg0IIhoSEIAtCCIhCgICA+A+DIAtCGIhCgID8B4OEIAtCKIhCgP4DgyALQjiIhISEIgtCAEKBiIDwt65/QgAQyQMgAUHgAWpCACABKQPwASIMfUIAQpGAgICAgICACEIAEMkDIAFB0AFqIA1CAEL//7+YE0IAEMkDIAFBoAJqIA5CAEL//7+YE0IAEMkDIAFB8ABqIBBCAEL//7+YE0IAEMkDIAFBIGogC0IAQv//v5gTQgAQyQMgAUHAAWpCACAMQgBSrSIRIAEpA/gBIhMgASkDsAJ8IhJ8IgwgASkD0AF8Ig99QgBCkYCAgICAgIAIQgAQyQMgAUGwAWogDUIAQoCAvntCABDJAyABQZACaiAOQgBCgIC+e0IAEMkDIAFB4ABqIBBCAEKAgL57QgAQyQMgAUEQaiALQgBCgIC+e0IAEMkDIAFBgAFqQgAgD0IAUq0iFCAMIBFUrSIXIAEpA7gCIBIgE1StfCISIAEpA5ABfCIVfCIRIAEpA6ACfCITIAEpA9gBIAwgD1atfHwiGHwiDCABKQOwAXwiD31CAEKRgICAgICAgAhCABDJAyABQaABaiANQgBCkJCC8LWV9f8HQgAQyQMgAUGAAmogDkIAQpCQgvC1lfX/B0IAEMkDIAFB0ABqIBBCAEKQkILwtZX1/wdCABDJAyABIAtCAEKQkILwtZX1/wdCABDJAyABQTBqQgAgASkDuAEgDCAPVq18IhYgASkDkAJ8IgsgASkDmAEgEiAVVq18IhUgASkDQHwiDSABKQPgAXwiDiARIBdUrXwiECABKQNwfCISIBMgGFatIAEpA6gCIBEgE1atfHx8IhEgDCAUVK18IhR8IgwgD0IAUq18Ig8gASkDoAF8IhN9QgBCkYCAgICAgIAIQgAQyQMCQAJAIAEpAwggASkDiAEgCyAMVq0gASkDmAIgCyAWVK18fCIXIAEpA2B8IgsgESAUVq0iGCABKQPAAXwiFCAOIBBWrSABKQPoASANIA5WrXx8IhYgASkDSCANIBVUrXx8Ig0gASkDIHwiDiARIBJUrSABKQN4IBAgElatfHx8IhF8IhJ8IhAgDCAPVq18IhUgEFStIhkgASkDgAF8IgwgGVStfCAMIAwgASkDECANIBZUrYQiFiAOIBFWrSABKQMoIA0gDlatfHx8Ig0gEiAUVK0gASkDyAEgFCAYVK18fHwiDiALIBBWrSABKQNoIAsgF1StfHx8Igt8IhFWrXwiEiALIA5UrSANIA5WrSABKQMYIA0gFlStfHx8fCILIAEpAwB8Ig0gC1StfCANIAEpA1ggASkDiAIgASkDqAEgDyATVq18IhAgASkDgAJ8Ig4gEFStfCAOIA4gFXwiEFatfCIMIAEpA1B8Ig4gDFStfCAOIA4gEXwiDFatfHwiDiANVK18IAsgElStfCABKQM4IAwgECATQgBSrXwiCyAQVK18Ig0gDFStIgwgASkDMHwiECAMVK18IBAgDiAQfCIOVq18fCIRQpGAgICAgICACFYNACARQpGAgICAgICACFIEQCAOIRAgDSEMIAshDwwCCyALIA2EIA6EUEUNAEIAIRBCkYCAgICAgIAIIRFCACEMQgAhDwwBCyALQgF9IQ8gDSALUK0iC30hDCAOIAsgDVatIgt9IRAgESALIA5WrX1CkYCAgICAgIAIfSERCyAHIA83AyAgByAMNwMYIAcgEDcDECAHIBE3AwhBAAs6AAAgAUHAAmokACADLQAoRQ0BIAMgAy0AKToAcEHk2MIAQSsgA0HwAGpBpNrCAEG02sIAEMoDAAsgAkEASA0DQdHOxQAtAAAaQQEhBSACQQEQ1gQiB0UNAyACBEAgByABIAL8CgAACyADQQxqIAcCf0EBIAJBAUYNABogAiAHaiEBQQAhBCACQQF2IgZBAUcEQCACQQFrIQUgBkH+////A3EhCQNAIAUgB2oiBi0AACEIIAYgBCAHaiIGLQAAOgAAIAYgCDoAACABIARBfnNqIggtAAAhCiAIIAZBAWoiBi0AADoAACAGIAo6AAAgBUECayEFIAkgBEECaiIERw0ACwsgAiACQQJxRQ0AGiAEIAdqIgUtAAAhBiAFIAEgBEF/c2oiAS0AADoAACABIAY6AAAgAgtBCBDPAiAHIAIQ3wQjAEEwayIBJABCkYCAgICAgIAIIRAgAUEgakIAQn9B+NLBAEHo0cEAQSAQ8QMiBRsiC0J/hSIMQgBCkYCAgICAgIAIQgAQyQMgAUEQakIAIAwgC0IBfCINfCANVK0iDCANUK0iDyALfCIRfCINfUIAQpGAgICAgICACEIAEMkDIAFCACANQgBSrSITIAwgDVatIgwgDyARVq0iDSALfCIPfCIRfCILfUIAQpGAgICAgICACEIAEMkDIANBKGoiAgJ+IAEpAwggASkDGCABKQMoIA0gD1atQpCAgICAgICACEIAIAUbhCIPIAEpAyB8Ig0gD1StfCANIAwgEVatfCIMIA1UrXwiDyABKQMQfCINIA9UrXwgDSAMIAsgE1StIgx8Ig8gDFStfCIMIA1UrXwiESABKQMAfCINIBFUrXwgDSANIAwgC0IAUq0iCyAPfCIPIAtUrSIMfCILIAxUrXwiDVatfCIMQpGAgICAgICACFIEQCAMIRAgDSEOIAshDCAPDAELQgAhDEIAIAsgD4QgDYRQDQAaQn9CACANIAsgD1CtIg5UrSIRVBshECALIA59IQwgDSARfSEOIA9CAX0LNwMYIAIgDDcDECACIA43AwggAiAQNwMAIAFBMGokACADQQA2AnggA0KAgICAEDcCcCADQdzTwgA2ApQBIANCoICAgA43ApgBIAMgA0HwAGo2ApABIAIgA0GQAWoiARDTAg0EIAMoAnAhAiABIAMoAnQiByADKAJ4EJUDIAMoApgBIgVFBEAgAygCkAFFBEAgAUHI0MIAEKUDCyADKAKUAUEANgIAIANBATYCmAFBASEFCyADKAKUASIBIAEoAgBBAWoiBDYCAAJAIAQNACAFQQFHBEAgBUECdEEEayEFIAFBBGohBANAIAQgBCgCAEEBaiIBNgIAIAENAiAEQQRqIQQgBUEEayIFDQALCyADKAKYASIBIAMoApABRgRAIANBkAFqQdjQwgAQpQMLIAMoApQBIAFBAnRqQQE2AgAgAyABQQFqNgKYAQsgA0EgaiADQZgBaigCADYCACADIAMpApABNwMYIAIEQCAHIAIQ3wQLIANBKGogA0EMaiADQRhqEO8BAkACQCADKAIwRQRAQdHOxQAtAAAaQQEhBEEBQQEQ1gQiAUUNCCABQQA6AAAgACABQQEQhgEMAQsgA0GQAWogA0EoakEIELACIAMoApQBIQECQCADKAKYASICQQJJDQAgASACaiEHQQAhBCACQQF2IgZBAUcEQCACQQFrIQUgBkH+////B3EhCQNAIAEgBWoiBi0AACEIIAYgASAEaiIGLQAAOgAAIAYgCDoAACAHIARBfnNqIggtAAAhCiAIIAZBAWoiBi0AADoAACAGIAo6AAAgBUECayEFIAkgBEECaiIERw0ACwsgAkECcUUNACABIARqIgUtAAAhBiAFIAcgBEF/c2oiBS0AADoAACAFIAY6AAALIAMoApABIQQgACABIAIQhgEgBEUNAQsgASAEEN8ECyADKAIoIgBFDQEgAygCLCAAQQJ0EN8EDAELIAAgAykDMDcDACAAQRhqIANByABqKQMANwMAIABBEGogA0FAaykDADcDACAAQQhqIANBOGopAwA3AwAgAygCkAEiAEUNACAFIAAQ3wQLIANBsAFqJAAPC0EBIARBlNrCABDIBAALIAUgAkHU2MIAEMgEAAtBhNTCAEE3IANB0ABqQfTTwgBBiNXCABDKAwALQQFBARD/BAAL0BgCCH8MfiMAQbABayIDJAAgA0HgAGpCADcDACADQdgAakIANwMAIANCADcDUCADQgE3A2ggA0EwaiEHQYACIQUDQCAHQn83AwAgB0EIakJ/NwMAIANC////////////ADcDKCADQmw3A0AgA0GQAWogA0EoaiAFQQFrIgYQsgIgA0H4AGpCADcDACADQYABakIANwMAIANCADcDcCADIAMpA6gBQgGDNwOIASADQfAAaiADQdAAakEgEPEDBEAgBiEFDAELC0EAIQYCQAJAAkACQAJAAkAgAiAFQQN2IAVBB3FBAEdqIgVNBEACQCAFIAJrIgVFBEBBASEGDAELQdHOxQAtAAAaIAVBARDXBCIGRQ0ECyADIAU2ApgBIAMgBjYClAEgAyAFNgKQASACBEAgA0GQAWogBSACQQFBARCIAyADKAKYASEFIAMoApQBIQYLIAIEQCAFIAZqIAEgAvwKAAALIAYhASMAQYACayIEJAAgA0EoaiIHAn8gAiAFakEfTQRAIAdBADoAAUEBDAELIARB4AFqIAEpABgiC0I4hiALQoD+A4NCKIaEIAtCgID8B4NCGIYgC0KAgID4D4NCCIaEhCALQgiIQoCAgPgPgyALQhiIQoCA/AeDhCALQiiIQoD+A4MgC0I4iISEhEIAQqQLQgAQyQMgBEHwAWogASkAECILQjiGIAtCgP4Dg0IohoQgC0KAgPwHg0IYhiALQoCAgPgPg0IIhoSEIAtCCIhCgICA+A+DIAtCGIhCgID8B4OEIAtCKIhCgP4DgyALQjiIhISEQgBCpAtCABDJAyAEQfAAaiABKQAIIgtCOIYgC0KA/gODQiiGhCALQoCA/AeDQhiGIAtCgICA+A+DQgiGhIQgC0IIiEKAgID4D4MgC0IYiEKAgPwHg4QgC0IoiEKA/gODIAtCOIiEhIRCAEKkC0IAEMkDIARBMGogASkAACILQjiGIAtCgP4Dg0IohoQgC0KAgPwHg0IYhiALQoCAgPgPg0IIhoSEIAtCCIhCgICA+A+DIAtCGIhCgID8B4OEIAtCKIhCgP4DgyALQjiIhISEQgBCpAtCABDJAyAEQdABaiAEKQPgASINQpuUr8Pytajehn9+IgtCAEJtQgAQyQMgBEHAAWogC0IAQn9CABDJAyAEQYABaiALQgBC////////////AEIAEMkDIARBsAFqIAQpA8ABIhMgBCkD6AEiDiAEKQPwAXwiDHwiECAEKQPYASAEKQPQASILIA1CfIN8IAtUrXx8Ig9Cm5Svw/K1qN6Gf34iC0IAQm1CABDJAyAEQaABaiALQgBCf0IAEMkDIARBkAFqIAtCAEL///////////8AQgAQyQMgBEHgAGogBCkDoAEiFCATIAQpA/gBIAwgDlStfCINIAQpA3B8IhF8IhIgDyAQVK0gBCkDyAEiDiAQIBNUrXx8fCIMfCIQIAQpA7gBIAQpA7ABIgsgD3wgC1StfHwiD0KblK/D8rWo3oZ/fiILQgBCbUIAEMkDIARB0ABqIAtCAEJ/QgAQyQMgBEFAayALQgBC////////////AEIAEMkDIARBIGogBCkDUCIVIBQgBCkDeCANIBFWrXwiDSAEKQMwfCIWIAQpA4ABfCITIAwgElStIA4gESASVq18fHwiEXwiEiAPIBBUrSAEKQOoASIOIBAgFFStfHx8Igx8IhAgBCkDaCAPIAQpA2AiC3wgC1StfHwiD0KblK/D8rWo3oZ/fiILQgBCbUIAEMkDIARBEGogC0IAQn9CABDJAyAEIAtCAEL///////////8AQgAQyQMCQAJAIAQpAwggBCkDSCAEKQOYASAEKQOQASILIAQpAzggDSAWVq18fCINIAtUrXwgDSANIBEgE1StIAQpA4gBIBMgFlStfHx8IgtWrXwgCyALIAwgElStIA4gESASVq18fHwiDVatfCILIAQpA0B8Ig4gC1StfCAOIAQpA1giCyANIA0gFXwiDFatfCAMIAwgDyAQVK0gCyAQIBVUrXx8fCIMVq18fCISIA5UrXwiCyAEKQMAfCIQIAtUrXwgECAQIAQpAxgiCyASIBIgBCkDECINfCIOVq18IA4gDiALIA0gDCANfCIMVq18IAwgBCkDKCAPIAQpAyAiC3wgC1StfHwiDyAMVK18fCIMVq18fCINVq18IhFCAFMNAAJAAkAgEUL///////////8AVA0AQn8hDiANQn9SBEBC////////////ACERDAELIAxCf1ENAUL///////////8AIREgDCELDAMLIA0hDiAMIQsMAgsgD0JtWg0AQv///////////wAhEUJ/IQsMAQsgDEIBfCISIA9CbVStIg59IQsgDUIBfCIQIAxCf1IgDiASVnKtIgx9IQ4gESANQn9SIAwgEFZyrX1C////////////AH0hESAPQhN8IQ8LIAcgDzcDICAHIAs3AxggByAONwMQIAcgETcDCEEACzoAACAEQYACaiQAIAMtAChFDQEgAyADLQApOgBwQeTYwgBBKyADQfAAakGk2sIAQbTawgAQygMACyACQQBIDQNB0c7FAC0AABpBASEGIAJBARDWBCIIRQ0DIAIEQCAIIAEgAvwKAAALIANBDGogCAJ/QQEgAkEBRg0AGiACIAhqIQlBACEFIAJBAXYiAUEBRwRAIAJBAWshBiABQf7///8DcSEEA0AgBiAIaiIHLQAAIQEgByAFIAhqIgotAAA6AAAgCiABOgAAIAkgBUF+c2oiAS0AACEHIAEgCkEBaiIBLQAAOgAAIAEgBzoAACAGQQJrIQYgBCAFQQJqIgVHDQALCyACIAJBAnFFDQAaIAUgCGoiAS0AACEGIAEgCSAFQX9zaiIBLQAAOgAAIAEgBjoAACACC0EIEM8CIAggAhDfBAJAQZjTwQBB6NHBAEEgEPEDBEAgA0E4akJ/NwMAIANCfzcDMCADQv///////////wA3AyggA0JHNwNADAELIANBQGtBsNPBACkDADcDACADQThqQajTwQApAwA3AwAgA0EwakGg08EAKQMANwMAIANBmNPBACkDADcDKAsgA0GQAWoiASADQShqIgUQ2AEgA0EANgJ4IANCgICAgBA3AnAgA0Hc08IANgIsIANCoICAgA43AjAgAyADQfAAajYCKCABIAUQ0wINBCADKAJwIQcgBSADKAJ0IgIgAygC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ByAQNwMIQQALOgAAIARBwAJqJAAgAy0AKEUNASADIAMtACk6AHBB5NjCAEErIANB8ABqQaTawgBBtNrCABDKAwALIAJBAEgNA0HRzsUALQAAGkEBIQYgAkEBENYEIghFDQMgAgRAIAggASAC/AoAAAsgA0EMaiAIAn9BASACQQFGDQAaIAIgCGohCUEAIQUgAkEBdiIBQQFHBEAgAkEBayEGIAFB/v///wNxIQQDQCAGIAhqIgctAAAhASAHIAUgCGoiCi0AADoAACAKIAE6AAAgCSAFQX5zaiIBLQAAIQcgASAKQQFqIgEtAAA6AAAgASAHOgAAIAZBAmshBiAEIAVBAmoiBUcNAAsLIAIgAkECcUUNABogBSAIaiIBLQAAIQYgASAJIAVBf3NqIgEtAAA6AAAgASAGOgAAIAILQQgQzwIgCCACEN8EAkBBuNLBAEHo0cEAQSAQ8QMEQCADQn43A0AgA0L/////HzcDOCADQgA3AzAgA0KCgICAYDcDKAwBCyADQUBrQdDSwQApAwA3AwAgA0E4akHI0sEAKQMANwMAIANBMGpBwNLBACkDADcDACADQbjSwQApAwA3AygLIANBkAFqIgEgA0EoaiICEKMCIANBADYCeCADQoCAgIAQNwJwIANB3NPCADYCLCADQqCAgIAONwIwIAMgA0HwAGo2AiggASACENMCDQQgAygCcCEEIAIgAygCdCIHIAMoAngQlQMgAygCMCIGRQRAIAMoAihFBEAgAkHI0MIAEKUDCyADKAIsQQA2AgAgA0EBNgIwQQEhBgsgAygCLCICIAIoAgBBAWoiATYCAAJAIAENACAGQQFHBEAgBkECdEEEayEBIAJBBGohBQNAIAUgBSgCAEEBaiICNgIAIAINAiAFQQRqIQUgAUEEayIBDQALCyADKAIwIgEgAygCKEYEQCADQShqQdjQwgAQpQMLIAMoAiwgAUECdGpBATYCACADIAFBAWo2AjALIANBIGogA0EwaigCADYCACADIAMpAig3AxggBARAIAcgBBDfBAsgA0EoaiADQQxqIANBGGoQ7wECQAJAIAMoAjBFBEBB0c7FAC0AABpBASEFQQFBARDWBCIBRQ0IIAFBADoAACAAIAFBARCJAQwBCyADQZABaiADQShqQQgQsAIgAygClAEhAQJAIAMoApgBIghBAkkNACAB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IgVBA0YNACACQfgBaiIDIAJBuAJqKQMANwMAIAJB8AFqIgYgAkGwAmopAwA3AwAgAkHoAWoiBCACQagCaikDADcDACACQeABaiIJIAJBoAJqKQMANwMAIAJB2AFqIgogAkGYAmopAwA3AwAgAkHQAWoiByACQZACaikDADcDACACQcgBaiIIIAJBiAJqKQMANwMAIAIgAikDgAI3A8ABIAIgAigAwQI2AnggAiACQcQCaigAADYAeyAFQQJGDQAgAkHYAGogAykDADcDACACQdAAaiAGKQMANwMAIAJByABqIAQpAwA3AwAgAkFAayAJKQMANwMAIAJBOGogCikDADcDACACQTBqIAcpAwA3AwAgAkEoaiAIKQMANwMAIAIgAikDwAE3AyAgAiACKAJ4NgIYIAIgAigAezYAGwJAIAEoAgwoAgBBgICAgHhHDQAgASgCBEUNACABKAIIRQ0DC0HRzsUALQAAGkGgAkEIENYEIgNFDQMgAyACKQMgNwMAIAMgBToAQCADIAIoAhg2AEEgA0HEAGogAigAGzYAACADQThqIAJB2ABqKQMANwMAIANBMGogAkHQAGopAwA3AwAgA0EoaiACQcgAaikDADcDACADQSBqIAJBQGspAwA3AwAgA0EYaiACQThqKQMANwMAIANBEGogAkEwaikDADcDACADQQhqIAJBKGopAwA3AwAgAkEBNgIUIAIgAzYCECACQQQ2AgwgAkHoAGogAUEIaikCADcDACACIAEpAgA3A2AgAkGAAmogAkHgAGogAigCbBD8AQJAIAItAMACIgFBA0YNAEGJASEGIAJBwQJqIglBA2ohCkEBIQUDQCACQfgBaiIEIAJBuAJqKQMANwMAIAJB8AFqIgcgAkGwAmopAwA3AwAgAkHoAWoiCCACQagCaikDADcDACACQeABaiILIAJBoAJqKQMANwMAIAJB2AFqIgwgAkGYAmopAwA3AwAgAkHQAWoiDSACQZACaikDADcDACACQcgBaiIOIAJBiAJqKQMANwMAIAIgAikDgAI3A8ABIAIgCSgAADYCuAEgAiAKKAAANgC7ASABQf8BcUECRg0BIAJBsAFqIg8gBCkDADcDACACQagBaiIEIAcpAwA3AwAgAkGgAWoiByAIKQMANwMAIAJBmAFqIgggCykDADcDACACQZABaiILIAwpAwA3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AEEIaiADQSBqKAIANgIADAwLIABBCGpBgMTEACkCADcCACAAQfjDxAApAgA3AgAMCwtBACEFIARB/////wNLIARBAnQiBkH8////B0tyDQUgASgCBCEHAn8gBkUEQEEEIQFBAAwBC0HRzsUALQAAGkEEIQUgBkEEENYEIgFFDQYgBAshBSAGBEAgASAHIAb8CgAACyADIAQ2AiwgAyABNgIoIAMgBTYCJCADQRhqIANBJGogAhCHAkEBIQcgCEEBRg0BIAhBASADKAIgGyEHDAILQQAhBSAGQf////8DSyAGQQJ0IgRB/P///wdLcg0FIAIoAgQhBwJ/IARFBEBBBCECQQAMAQtB0c7FAC0AABpBBCEFIARBBBDWBCICRQ0GIAYLIQUgBARAIAIgByAE/AoAAAtBAiAIayEHIAMgBjYCLCADIAI2AiggAyAFNgIkIANBGGogA0EkaiABEIcCAkAgCEEBcUUEQCAHQQEgAygCIBshBwwBCyADQQA2AiAgAygCGEEESQ0AIANBCGogA0EYakEAENMDIAMoAggiAUGBgICAeEcNBwsgACADKQIYNwIAIAAgBzoADCAAQQhqIANBIGooAgA2AgAMCQsgA0EANgIgIAMoAhhBBEkNACADQRBqIANBGGpBABDTAyADKAIQIgFBgYCAgHhHDQYLIAAgAykCGDcCACAAIAc6AAwgAEEIaiADQSBqKAIANgIADAcLQQQgAkGkg8UAEMgEAAtBBCAEQaSDxQAQyAQACyAFIAZBpIPFABDIBAALIAUgBEGkg8UAEMgEAAsgASADKAIMQbTJxAAQyAQACyABIAMoAhRBtMnEABDIBAALIAIoAggiBUECdCEEQQAhAQJAIAVB/////wNLIARB/P///wdLcg0AIAIoAgQhBwJ/IARFBEBBBCECQQAMAQtB0c7FAC0AABpBBCEBIARBBBDWBCICRQ0BIAULIQEgBARAIAIgByAE/AoAAAsgAEECIAZrOgAMIAAgBTYCCCAAIAI2AgQgACABNgIADAELIAEgBEGkg8UAEMgEAAsgA0EwaiQAC+YKAgd/An4jAEHQAGsiAyQAAkAgAi0ADCIFQQFGBEAgACABKQIANwIAIABBCGogAUEIaikCADcCACACKAIAIgBFDQEgAigCBCAAQQJ0EN8EDAELAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0ADCIGQQFrDgILAQALIAVFDQEMAgsgBUUNAQsCfyABKAIIIgQgAigCCCIFRgRAIARBAnQhBCABKAIEQQRrIQggAigCBEEEayEJAkADQCAERQ0BIAQgCWohByAEIAhqIARBBGshBCgCACIFIAcoAgAiB0YNAAsgBSAHSyAFIAdJawwCC0F/QQAgBBsMAQsgBCAFSyAEIAVJawtB/wFxDgIBAgMLIANBKGogAUEIaiIIKAIANgIAIAMgASkCACIKNwMgIANBOGogAkEIaiIJKAIANgIAIAMgAikCACILNwMwAn8gCqciBCALpyIFSQRAIANByABqIAkoAgA2AgAgAyACKQIANwNAIANBFGogA0FAayADQSBqEMoBIANBJGoMAQsgA0HIAGogCCgCADYCACADIAEpAgA3A0AgA0EUaiADQUBrIANBMGoQygEgBSEEIANBNGoLIQcgBARAIAcoAgAgBEECdBDfBAsCQCAGQQFHBEAgAygCHA0BIABBAToADCAAIAMpAhQ3AgAgAEEIaiADQRxqKAIANgIADAsLIANBADYCHCADKAIUIgFBBE8EQCADKAIYIAFBAnQQ3wQgA0KAgICAwAA3AhQLIABBAToADCAAIAMpAhQ3AgAgAEEIaiADQRxqKAIANgIADAoLIAAgBjoADCAAIAMpAhQ3AgAgAEEIaiADQRxqKAIANgIADAkLIABBCGpBqMzCACkCADcCACAAQaDMwgApAgA3AgAgAigCACIARQ0HIAIoAgQgAEECdBDfBAwHCyADQThqIAFBCGooAgA2AgAgAyABKQIANwMwIANByABqIAJBCGooAgA2AgAgAyACKQIANwNAIANBIGogA0EwaiADQUBrEIcCIAMoAkAiAQRAIAMoAkQgAUECdBDfBAtBASEEIAZBAUYNASAGQQEgAygCKBshBAwCCyADQThqIAJBCGooAgA2AgAgAyACKQIANwMwIANByABqIAFBCGooAgA2AgAgAyABKQIANwNAIANBIGogA0EwaiADQUBrEIcCIAMoAkAiAQRAIAMoAkQgAUECdBDfBAtBAiAGayEEAkAgBkEBcUUEQCAEQQEgAygCKBshBAwBCyADQQA2AiggAygCIEEESQ0AIAMgA0EgakEAENMDIAMoAgAiAUGBgICAeEcNAwsgACADKQIgNwIAIAAgBDoADCAAQQhqIANBKGooAgA2AgAMBgsgA0EANgIoIAMoAiBBBEkNACADQQhqIANBIGpBABDTAyADKAIIIgFBgYCAgHhHDQILIAAgAykCIDcCACAAIAQ6AAwgAEEIaiADQShqKAIANgIADAQLIAEgAygCBEHQz8IAEMgEAAsgASADKAIMQdDPwgAQyAQACyACQQ1qIQQCQAJAAkAgBUEBaw4CAAECCyAAQQE6AAwgACACKQIANwIAIAAgBC8AADsADSAAQQhqIAJBCGooAgA2AgAgAEEPaiAEQQJqLQAAOgAADAILIABBADoADCAAIAIpAgA3AgAgACAELwAAOwANIABBCGogAkEIaigCADYCACAAQQ9qIARBAmotAAA6AAAMAQsgAEECOgAMIAAgAikCADcCACAAIAQvAAA7AA0gAEEIaiACQQhqKAIANgIAIABBD2ogBEECai0AADoAAAsgASgCACIARQ0AIAEoAgQgAEECdBDfBAsgA0HQAGokAAuRCwIBfw9+IwBB8AJrIgMkACADQcgCaiABIAIQsQJBASECAkAgAy0AyAJBAUYEQCAAIAMtAMkCOgABDAELIANBQGsgAykD6AIiBUIAQoGIgPC3rn9CABDJAyADQYABaiADKQPgAiIIQgBCgYiA8Leuf0IAEMkDIANBwAFqIAMpA9gCIgRCAEKBiIDwt65/QgAQyQMgA0GAAmogAykD0AIiBkIAQoGIgPC3rn9CABDJAyADQRBqQgAgAykDQCIHfUIAQpGAgICAgICACEIAEMkDIANB0ABqIAVCAEL//7+YE0IAEMkDIANBkAFqIAhCAEL//7+YE0IAEMkDIANB0AFqIARCAEL//7+YE0IAEMkDIANBkAJqIAZCAEL//7+YE0IAEMkDIANBIGpCACAHQgBSrSIJIAMpA0giDCADKQOAAXwiC3wiByADKQNQfCIKfUIAQpGAgICAgICACEIAEMkDIANB4ABqIAVCAEKAgL57QgAQyQMgA0GgAWogCEIAQoCAvntCABDJAyADQeABaiAEQgBCgIC+e0IAEMkDIANBoAJqIAZCAEKAgL57QgAQyQMgA0EwakIAIApCAFKtIg0gByAJVK0iECADKQOIASALIAxUrXwiCyADKQPAAXwiDnwiCSADKQOQAXwiDCADKQNYIAcgClatfHwiEXwiByADKQNgfCIKfUIAQpGAgICAgICACEIAEMkDIANB8ABqIAVCAEKQkILwtZX1/wdCABDJAyADQbABaiAIQgBCkJCC8LWV9f8HQgAQyQMgA0HwAWogBEIAQpCQgvC1lfX/B0IAEMkDIANBsAJqIAZCAEKQkILwtZX1/wdCABDJAyADQgAgAykDaCAHIApWrXwiDyADKQOgAXwiBSADKQPIASALIA5WrXwiDiADKQOAAnwiCCADKQMQfCIEIAkgEFStfCIGIAMpA9ABfCILIAwgEVatIAMpA5gBIAkgDFatfHx8IgkgByANVK18Ig18IgcgCkIAUq18IgogAykDcHwiDH1CAEKRgICAgICAgAhCABDJAwJAAkAgAykDuAIgAykDOCAFIAdWrSADKQOoASAFIA9UrXx8IhAgAykD4AF8IgUgCSANVq0iESADKQMgfCINIAQgBlatIAMpAxggBCAIVK18fCIPIAMpA4gCIAggDlStfHwiCCADKQOQAnwiBCAJIAtUrSADKQPYASAGIAtWrXx8fCIJfCILfCIGIAcgClatfCIOIAZUrSISIAMpAzB8IgcgElStfCAHIAcgAykDoAIgCCAPVK2EIg8gBCAJVq0gAykDmAIgBCAIVK18fHwiCCALIA1UrSADKQMoIA0gEVStfHx8IgQgBSAGVq0gAykD6AEgBSAQVK18fHwiBXwiB1atfCIJIAQgBVatIAQgCFStIAMpA6gCIAggD1StfHx8fCIFIAMpA7ACfCIIIAVUrXwgCCADKQP4ASADKQO4ASADKQN4IAogDFatfCIGIAMpA7ABfCIEIAZUrXwgBCAEIA58IgRWrXwiCiADKQPwAXwiBiAKVK18IAYgBiAHfCIGVq18fCIHIAhUrXwgBSAJVK18IAMpAwggBiAEIAxCAFKtfCIFIARUrXwiCCAGVK0iBiADKQMAfCIEIAZUrXwgBCAEIAd8IgRWrXx8IglCkYCAgICAgIAIVg0AIAlCkYCAgICAgIAIUgRAIAQhBiAIIQcgBSEKDAILIAUgCIQgBIRQRQ0AQgAhBkKRgICAgICAgAghCUIAIQdCACEKDAELIAVCAX0hCiAIIAVQrSIFfSEHIAQgBSAIVq0iBX0hBiAJIAQgBVStfUKRgICAgICAgAh9IQkLIAAgCjcDICAAIAc3AxggACAGNwMQIAAgCTcDCEEAIQILIAAgAjoAACADQfACaiQAC7EMAgN/EH4jAEGwAmsiAyQAAkAgASgCDCIEQX9GBEAgAEIANwMAIABBKGpCADcDACAAQSBqQgA3AwAgAEEYakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAMAQsgASgCCCIFIARNBEAgBCAFQdzHwgAQ2QMACyABKAIEIgUgBEEwbGoiASkDKCEMIAEpAyAhDiABKQMYIQ8gASkDECERIAEpAwghEiABKQMAIRMgBARAA0BBKCEBQgAhCUIAIQtCACEKQgAhCEIAIQZCACENA0AgA0HwAGogASACaikDACIHQgAgDEIAEMkDIANBgAFqIAdCACAOQgAQyQMgA0GQAWogB0IAIA9CABDJAyADQaABaiAHQgAgEUIAEMkDIANBsAFqIAdCACASQgAQyQMgA0HAAWogB0IAIBNCABDJAyADQeAAaiADKQNwIhAgDXwiDUIAQgBC/f/z/8////mJfxDJAyADQdAAaiADKQNoIgdCAEKr1f7///+//7l/QgAQyQMgA0FAayAHQgBC///Piuv//9UeQgAQyQMgA0EwaiAHQgBCpOzDtY/UtJjnAEIAEMkDIANBIGogB0IAQr+llJzP8NK75ABCABDJAyADQRBqIAdCAELX2a6a5PbpjcsAQgAQyQMgAyAHQgBCms3/y6O9xIAaQgAQyQMgAykDCCADKQPAASIUIAl8IgcgAykDuAEgAykDsAEiCSALfCILIAlUrXwgCyADKQOoASADKQOgASIJIAp8IgogCVStfCAKIAMpA5gBIAMpA5ABIgkgCHwiCCAJVK18IAggAykDiAEgAykDgAEiCSAGfCIGIAlUrXwgBiADKQN4IA0gEFStfHwiECAGVK18fCIGIAhUrXx8IgggClStfHwiCiALVK18fCIJIAMpAwB8IgsgCVStfCALIAsgAykDGCAKIAogAykDEHwiClatfCAKIAogAykDKCAIIAggAykDIHwiCFatfCAIIAggAykDOCAGIAYgAykDMHwiBlatfCAGIAYgAykDSCADKQNAIhUgEHwiECAVVK18IBAgAykDWCANIAMpA1AiDXwgDVStfHwiDSAQVK18fCIGVq18fCIIVq18fCIKVq18fCILVq18IAcgCVatIAMpA8gBIAcgFFStfHx8IQkgAUEIayIBQXhHDQALAkACQCAJQprN/8ujvcSAGlYNACAJQprN/8ujvcSAGlIEQCAGIQcgCCEMIAohDiALIQ8MAgsgC0LX2a6a5PbpjcsAVg0AAkAgC0LX2a6a5PbpjcsAUgRAIAYhByAIIQwgCiEOIAshDwwBCyAKQr+llJzP8NK75ABWDQFC19mumuT26Y3LACEPIApCv6WUnM/w0rvkAFIEQCAGIQcgCCEMIAohDgwBCyAIQqTsw7WP1LSY5wBWDQFCv6WUnM/w0rvkACEOIAhCpOzDtY/UtJjnAFIEQCAGIQcgCCEMDAELIAZC///Piuv//9UeVg0BQqTsw7WP1LSY5wAhDCAGQv//z4rr///VHlIEQCAGIQcMAQtC///Piuv//9UeIQcgDUKq1f7///+//7l/Vg0BC0Kazf/Lo73EgBohCQwBCyAGQv//z4rr///VHn0iDCANQqvV/v///7//uX9UrSIOfSEHIAhCpOzDtY/UtJjnAH0iDyAGQv//z4rr///VHlQgDCAOVHKtIgZ9IQwgCkK/pZScz/DSu+QAfSIRIAhCpOzDtY/UtJjnAFQgBiAPVnKtIgZ9IQ4gC0LX2a6a5PbpjcsAfSIIIApCv6WUnM/w0rvkAFQgBiARVnKtIgZ9IQ8gCSALQtfZrprk9umNywBUIAYgCFZyrX1Cms3/y6O9xIAafSEJIA1C1aqBgICAwIDGAHwhDQsgAyANNwOoAiADIAc3A6ACIAMgDDcDmAIgAyAONwOQAiADIA83A4gCIAMgCTcDgAIgA0HQAWogA0GAAmogBSAEQQFrIgRBMGxqEL0CIAMpA9ABIRMgAykD2AEhEiADKQPgASERIAMpA+gBIQ8gAykD8AEhDiADKQP4ASEMIAQNAAsLIAAgDDcDKCAAIA43AyAgACAPNwMYIAAgETcDECAAIBI3AwggACATNwMACyADQbACaiQAC6wKAgd/An4jAEHQAGsiAyQAAkAgAi0ADCIFQQFGBEAgACABKQIANwIAIABBCGogAUEIaikCADcCACACKAIAIgBFDQEgAigCBCAAQQJ0EN8EDAELAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0ADCIGQQFrDgILAQALIAVFDQEMAgsgBUUNAQsCfyABKAIIIgQgAigCCCIFRgRAIARBAnQhBCABKAIEQQRrIQggAigCBEEEayEJAkADQCAERQ0BIAQgCWohByAEIAhqIARBBGshBCgCACIFIAcoAgAiB0YNAAsgBSAHSyAFIAdJawwCC0F/QQAgBBsMAQsgBCAFSyAEIAVJawtB/wFxDgIBAgMLIANBKGogAUEIaiIIKAIANgIAIAMgASkCACIKNwMgIANBOGogAkEIaiIJKAIANgIAIAMgAikCACILNwMwAn8gCqciBCALpyIFSQRAIANByABqIAkoAgA2AgAgAyACKQIANwNAIANBFGogA0FAayADQSBqEMoBIANBJGoMAQsgA0HIAGogCCgCADYCACADIAEpAgA3A0AgA0EUaiADQUBrIANBMGoQygEgBSEEIANBNGoLIQcgBARAIAcoAgAgBEECdBDfBAsCQCAGQQFHBEAgAygCHA0BIABBAToADCAAIAMpAhQ3AgAgAEEIaiADQRxqKAIANgIADAsLIANBADYCHCADKAIUIgFBBE8EQCADKAIYIAFBAnQQ3wQgA0KAgICAwAA3AhQLIABBAToADCAAIAMpAhQ3AgAgAEEIaiADQRxqKAIANgIADAoLIAAgBjoADCAAIAMpAhQ3AgAgAEEIaiADQRxqKAIANgIADAkLIABBCGpBgMTEACkCADcCACAAQfjDxAApAgA3AgAgAigCACIARQ0HIAIoAgQgAEECdBDfBAwHCyADQcgAaiABQQhqKAIANgIAIAMgASkCADcDQCADQTBqIANBQGsgAhCHAiACKAIAIgEEQCACKAIEIAFBAnQQ3wQLQQEhBCAGQQFGDQEgBkEBIAMoAjgbIQQMAgsgA0HIAGogAkEIaigCADYCACADIAIpAgA3A0AgA0EwaiADQUBrIAEQhwIgASgCACICBEAgASgCBCACQQJ0EN8EC0ECIAZrIQQCQCAGQQFxRQRAIARBASADKAI4GyEEDAELIANBADYCOCADKAIwQQRJDQAgAyADQTBqQQAQ0wMgAygCACIBQYGAgIB4Rw0DCyAAIAMpAjA3AgAgACAEOgAMIABBCGogA0E4aigCADYCAAwGCyADQQA2AjggAygCMEEESQ0AIANBCGogA0EwakEAENMDIAMoAggiAUGBgICAeEcNAgsgACADKQIwNwIAIAAgBDoADCAAQQhqIANBOGooAgA2AgAMBAsgASADKAIEQbTJxAAQyAQACyABIAMoAgxBtMnEABDIBAALIAJBDWohBAJAAkACQCAFQQFrDgIAAQILIABBAToADCAAIAIpAgA3AgAgACAELwAAOwANIABBCGogAkEIaigCADYCACAAQQ9qIARBAmotAAA6AAAMAgsgAEEAOgAMIAAgAikCADcCACAAIAQvAAA7AA0gAEEIaiACQQhqKAIANgIAIABBD2ogBEECai0AADoAAAwBCyAAQQI6AAwgACACKQIANwIAIAAgBC8AADsADSAAQQhqIAJBCGooAgA2AgAgAEEPaiAEQQJqLQAAOgAACyABKAIAIgBFDQAgASgCBCAAQQJ0EN8ECyADQdAAaiQAC68KAQp/IwBBkAVrIgMkAAJAIAEoAgQiBARAIAEgBCABKAIIIgYgBCAEIAZLGyIFazYCBCABIAEoAgAiBCAFQQV0ajYCAAJAAkACQAJAAkAgBgRAIANBqANqIARBGGopAwA3AwAgA0GgA2ogBEEQaikDADcDACADQZgDaiAEQQhqKQMANwMAIAMgBCkDADcDkAMgBUEBRg0BIANB6ANqIARBOGopAwA3AwAgA0HgA2ogBEEwaikDADcDACADQdgDaiIGIARBKGopAwA3AwAgAyAEKQMgNwPQAyADIANBkANqIANB0ANqEEMCQAJAAkAgAy0AQCIBQQJGBEAgBiADQQhqKAIANgIAIAMgAykDADcD0AMMAQsgA0HAAmoiBiADQThqKQMANwMAIANBuAJqIgcgA0EwaikDADcDACADQbACaiIIIANBKGopAwA3AwAgA0GoAmoiCSADQSBqKQMANwMAIANBoAJqIgogA0EYaikDADcDACADQZgCaiILIANBEGopAwA3AwAgA0GQAmoiDCADQQhqKQMANwMAIAMgAykDADcDiAIgAyADKABBNgLAASADIANBxABqKAAANgDDASADQdABaiAMKQMANwMAIANB2AFqIAspAwA3AwAgA0HgAWogCikDADcDACADQegBaiAJKQMANwMAIANB8AFqIAgpAwA3AwAgA0H4AWogBykDADcDACADQYACaiAGKQMANwMAIAMgAykDiAI3A8gBIAVBA0kNBSAFQQNGDQYgA0HIA2ogBEH4AGopAwA3AwAgA0HAA2ogBEHwAGopAwA3AwAgA0G4A2ogBEHoAGopAwA3AwAgA0GYA2ogBEHIAGopAwA3AwAgA0GgA2ogBEHQAGopAwA3AwAgA0GoA2ogBEHYAGopAwA3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IABB5PTEACkCACILNwIAIAAgCzcCDCAAQRRqIAQ2AgAgAigCACIABEAgAigCBCAAQQJ0EN8ECyABKAIAIgBFDQIgASgCBCAAQQJ0EN8EDAILAkACQAJAAkACQCAFQQFGBEAgAigCBCIEKAAAQQFHDQEgACABKQIANwIAIABB5PTEACkCADcCDCAAQRRqQez0xAAoAgA2AgAgAEEIaiABQQhqKAIANgIAIAIoAgAiAEUNByAEIABBAnQQ3wQMBwsCfyAFIAlGBEAgBUECdCEEIAEoAgRBBGshCCACKAIEQQRrIQoDQCAERQ0FIAQgCmohByAEIAhqIARBBGshBCgCACIGIAcoAgAiB0YNAAsgBiAHSyAGIAdJawwBCyAFIAlJIAUgCUtrC0H/AXEOAgIEAQsgA0EoaiABIAQoAgAQggIgA0EQaiIFIANBMGooAgA2AgAgAyADKQIoNwMIIAMoAjQhASACQQA2AggCQCABRQ0AIAIoAgAEfyAEBSACQZjzxAAQpQMgAigCBAtBADYCACACQQE2AgggAigCBCIEIAEgBCgCACIBaiIENgIAIAEgBE0NACACKAIIIgEgAigCAEYEQCACQajzxAAQpQMLIAIoAgQgAUECdGpBATYCACACIAFBAWo2AggLIAAgAykDCDcCACAAIAIpAgA3AgwgAEEUaiACQQhqKAIANgIAIABBCGogBSgCADYCAAwFCyAAIAEpAgA3AgwgAEEUaiABQQhqKAIANgIADAELIAFBADYCCCABKAIARQRAIAFB0PXEABClAwsgASgCBEEBNgIAIABBCGpBATYCACABQQhqQQE2AgAgACABKQIANwIAIABBDGohAAsgAEEIakHs9MQAKAIANgIAIABB5PTEACkCADcCACACKAIAIgBFDQIgAigCBCAAQQJ0EN8EDAILIAIoAgQiBiAFQQJ0akEEaygCACIEZyIHRQRAIANBMGogAUEIaigCADYCACADIAEpAgA3AyggACADQShqIAYgBRB7IAIoAgAiAEUNAiAGIABBAnQQ3wQMAgsgASgCBCEIAkACQCABKAIAIgFBgICAgHhHDQAgCCgCCA0AIANB0ABqIAgQwAMMAQsgAyAJNgIwIAMgCDYCLCADIAE2AiggA0HQAGogA0EoaiAERSAHQQAgBBsQzwELAkACQCACKAIAIgFBgICAgHhHDQAgBigCCA0AIANBxABqIAYQwAMMAQsgAyAFNgIwIAMgBjYCLCADIAE2AiggA0HEAGogA0EoaiAERSAHQQAgBBsQzwELIANBKGogA0HQAGogAygCSCIBIAMoAkwQeyADQSBqIANBMGooAgA2AgAgAyADKQIoNwMYIANB2ABqIANBPGooAgA2AgAgAyADKQI0NwNQIAMoAkQiAgRAIAEgAkECdBDfBAsCQAJAIAMoAlBBgICAgHhHBEAgAygCWA0BIANBMGogA0HYAGooAgA2AgAgAyADKQNQNwMoDAILIAMoAlQiASgCCA0AIANBKGogARDAAwwBCyADQShqIANB0ABqIARFIAdBACAEGxDsAQsgACADKQMYNwIAIAAgAykDKDcCDCAAQQhqIANBIGooAgA2AgAgAEEUaiADQTBqKAIANgIADAELIANBADYCOCADQQE2AiwgA0HU88QANgIoIANCBDcCMCADQShqQdT0xAAQqAQACyADQeAAaiQAC7wKAQd/IwBBMGsiAyQAIAEtAAwhBQJAAkAgAi0ADCIEQQFGBEAgASgCCCIGQQJ0IQQCQCAGQf////8DSyAEQfz///8HS3INACABKAIEIQgCfyAERQRAQQQhAUEADAELQdHOxQAtAAAaQQQhByAEQQQQ1gQiAUUNASAGCyEHIAQEQCABIAggBPwKAAALIAAgBToADCAAIAY2AgggACABNgIEIAAgBzYCAAwCCyAHIARB+IHAABDIBAALAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBUEBaw4CDAEACyAERQ0BDAILIARFDQELAn8gASgCCCIEIAIoAggiBkYEQCAEQQJ0IQQgASgCBEEEayEIIAIoAgRBBGshCQJAA0AgBEUNASAEIAlqIQcgBCAIaiAEQQRrIQQoAgAiBiAHKAIAIgdGDQALIAYgB0sgBiAHSWsMAgtBf0EAIAQbDAELIAQgBksgBCAGSWsLQf8BcQ4CAgYBCyADQShqIAJBCGooAgA2AgAgAyACKQIANwMgIANBFGogA0EgaiABEMoBIAMoAhxFBEAgAEEBOgAMIAAgAykCFDcCACAAQQhqIANBHGooAgA2AgAMCwsgACAFOgAMIAAgAykCFDcCACAAQQhqIANBHGooAgA2AgAMCgtBAiEEIAVBAWsOAgMBAgsgAEEIakGozMIAKQIANwIAIABBoMzCACkCADcCAAwHC0EAIQQLIANBKGogAkEIaigCADYCACADIAIpAgA3AyAgA0EUaiADQSBqIAEQhwIgBEEBIAMoAhwbIQQMAwsgA0EoaiACQQhqKAIANgIAIAMgAikCADcDICADQRRqIgIgA0EgaiABEIcCQQAhASADQQA2AhwgAiACKAIAIAIoAggiBWtBAEkEfyACIAVBAEEEQQQQiAMgAigCCAUgBQs2AgggAygCHCIFRQ0BIAMoAhgiASAFQQJ0IgRqQQRrKAIABEAgBSEBDAILIAFBBGshASAFQf////8DcSECAkADQCAERQRAQQAhBAwCCyACQQFrIQIgASAEaiAEQQRrIQQoAgBFDQALIAUiASACQQFqIgRJDQILIAMgBDYCHCAEIQEMAQsgA0EoaiACQQhqKAIANgIAIAMgAikCADcDICADQRRqIAEgA0EgahCeAUEBIQQCQAJAIAVBAUcEQCAFQQEgAygCHBshBAwBCyADQQA2AhwgAygCFEEESQ0AIANBCGogA0EUakEAENMDIAMoAggiAUGBgICAeEcNAQsgACADKQIUNwIAIAAgBDoADCAAQQhqIANBHGooAgA2AgAMBQsgASADKAIMQdDPwgAQyAQAC0EBIQQgASADKAIUQQJ2Tw0AIAMgA0EUaiABENMDIAMoAgAiAUGBgICAeEYNACABIAMoAgRB0M/CABDIBAALIAAgAykCFDcCACAAIAQ6AAwgAEEIaiADQRxqKAIANgIADAILIAJBDWohAQJAAkACQCAEQQFrDgIBAgALIABBAjoADCAAIAIpAgA3AgAgACABLwAAOwANIABBCGogAkEIaigCADYCACAAQQ9qIAFBAmotAAA6AAAMAwsgAEEBOgAMIAAgAikCADcCACAAIAEvAAA7AA0gAEEIaiACQQhqKAIANgIAIABBD2ogAUECai0AADoAAAwCCyAAQQA6AAwgACACKQIANwIAIAAgAS8AADsADSAAQQhqIAJBCGooAgA2AgAgAEEPaiABQQJqLQAAOgAADAELIAIoAgAiAEUNACACKAIEIABBAnQQ3wQLIANBMGokAAukCQERfyMAQSBrIgkkACACKAIEIQcgASgCBCEGAkACQAJAAkAgASgCCCIIIAIoAggiBE0EQAJAIAgEQCAIQQFxAkAgCEEBRgRADAELIAhB/v///wFxIQ4gByEBIAYhAwNAIAEgAygCACIPIAEoAgAiEGsiESAFazYCACABQQRqIgsgA0EEaigCACIMIAsoAgAiC2siEiAPIBBJIAUgEUtyIgVrNgIAIAsgDEsgBSASS3IhBSABQQhqIQEgA0EIaiEDIA4gCkECaiIKRw0ACwsEfyAHIApBAnQiAWoiAyABIAZqKAIAIgEgAygCACIDayIGIAVrNgIAIAEgA0kgBSAGS3IFIAULQQFxDQELIAQgCE0NAiAIQQJ0IQEgBEECdCEDA0AgASAHaigCAA0BIAFBBGoiASADRw0ACwwCCyAJQQA2AhggCUEBNgIMIAlBxIrFADYCCCAJQgQ3AhAgCUEIakHcisUAEKgEAAsgBiAEQQJ0aiENAkACQCAEBEAgBEEBcSEOIARBAUcNAQwCC0EAIQEgAigCACAISQRAIAJBACAIEIkDIAIoAgQhByACKAIIIQELIAhBAnQiAwRAIAcgAUECdGogDSAD/AoAAAsgAiABIAhqIgQ2AgggAigCACEFDAMLIARB/v///wFxIQ8gByEBIAYhAwNAIAEgAygCACIQIAEoAgAiEWsiCyAFazYCACABQQRqIgwgA0EEaigCACISIAwoAgAiDGsiEyAQIBFJIAUgC0tyIgVrNgIAIAwgEksgBSATS3IhBSABQQhqIQEgA0EIaiEDIA8gCkECaiIKRw0ACwsgDgRAIAcgCkECdCIBaiIDIAEgBmooAgAiASADKAIAIgNrIgYgBWs2AgAgASADSSAFIAZLciEFCyAIIARrIgFBAnQhBiAEIQMgAigCACAEayABSQRAIAIgBCABEIkDIAIoAgQhByACKAIIIQMLIAYEQCAHIANBAnRqIA0gBvwKAAALIAIgASADaiIGNgIIAkAgBUEBcUUNACAEIAZNBEACQCAEIAZGDQAgByAEQQJ0aiIBIAEoAgAiBUEBazYCACAFDQIgASAEIAZHIgVBAnRqIQEgAyAIakECdCAFQQJ0ayAEQQN0ayEDA0AgA0UNASABIAEoAgAiBEEBazYCACADQQRrIQMgAUEEaiEBIARFDQALDAILIAlBADYCGCAJQQE2AgwgCUHEisUANgIIIAlCBDcCECAJQQhqQcyKxQAQqAQACyAEIAZBnL7EABDkBAALIAYhBAsgAigCACEFIARFDQELIAcgBEECdCIBakEEaygCAA0BIARB/////wNxIQMDQCABRQ0BIANBAWshAyABQQRrIgEgB2ooAgBFDQALIANBAWoiASAEIAEgBEkbIQQMAQtBACEECwJAAkAgBUECdiAETQRAIAchAyAFIQEMAQtBACEBIAVFBEAgByEDDAELIAVBAnQhAiAERQRAQQQhAyAHIAIQ3wQMAQsgByACQQQgBCIBQQJ0IgIQzgQiA0UNAQsgACAENgIIIAAgAzYCBCAAIAE2AgAgCUEgaiQADwtBBCACQYzBxAAQyAQAC+MLAgF/EX4jAEHgAmsiAiQAIAJBoAJqQgA3AwAgAkGYAmpCADcDACACQZACakIANwMAIAJBiAJqQgA3AwAgAkIANwOAAiACQgE3A6gCIAEpAwAhDSABKQMIIQ4gASkDECEPIAEpAxghECABKQMgIREgASkDKCESQSghAQNAIAJB8ABqIAJBgAJqIAFqKQMAIgVCACASQgAQyQMgAkGAAWogBUIAIBFCABDJAyACQZABaiAFQgAgEEIAEMkDIAJBoAFqIAVCACAPQgAQyQMgAkGwAWogBUIAIA5CABDJAyACQcABaiAFQgAgDUIAEMkDIAJB4ABqIAIpA3AiCyAMfCIKQgBCAEL9//P/z///+Yl/EMkDIAJB0ABqIAIpA2giBUIAQqvV/v///7//uX9CABDJAyACQUBrIAVCAEL//8+K6///1R5CABDJAyACQTBqIAVCAEKk7MO1j9S0mOcAQgAQyQMgAkEgaiAFQgBCv6WUnM/w0rvkAEIAEMkDIAJBEGogBUIAQtfZrprk9umNywBCABDJAyACIAVCAEKazf/Lo73EgBpCABDJAyACKQMIIAIpA8ABIhMgBHwiBSACKQO4ASACKQOwASIEIAh8IgggBFStfCAIIAIpA6gBIAIpA6ABIgQgB3wiByAEVK18IAcgAikDmAEgAikDkAEiBCAGfCIGIARUrXwgBiACKQOIASACKQOAASIEIAN8IgMgBFStfCADIAIpA3ggCiALVK18fCIEIANUrXx8IgMgBlStfHwiBiAHVK18fCIHIAhUrXx8IgsgAikDAHwiCCALVK18IAggCCACKQMYIAcgByACKQMQfCIHVq18IAcgByACKQMoIAYgBiACKQMgfCIGVq18IAYgBiACKQM4IAMgAyACKQMwfCIDVq18IAMgAyACKQNIIAIpA0AiDCAEfCIEIAxUrXwgBCACKQNYIAogAikDUCIKfCAKVK18fCIMIARUrXx8IgNWrXx8IgZWrXx8IgdWrXx8IghWrXwiCiAFIAtWrSACKQPIASAFIBNUrXx8IgUgCXwiCXwiBCAKVK0gBSAJVq18IQkgAUEIayIBQXhHDQALAkACQCAJQgBSIARCms3/y6O9xIAaVnINAAJAIARCms3/y6O9xIAaUQRAIAhC19mumuT26Y3LAFYNAiAIQtfZrprk9umNywBSBEAgAyEFIAYhCSAHIQogCCELQprN/8ujvcSAGiEEDAQLIAdCv6WUnM/w0rvkAFYNAkLX2a6a5PbpjcsAIQsgB0K/pZScz/DSu+QAUgRAIAMhBSAGIQkgByEKQprN/8ujvcSAGiEEDAQLIAZCpOzDtY/UtJjnAFYNAkK/pZScz/DSu+QAIQogBkKk7MO1j9S0mOcAUgRAIAMhBSAGIQlCms3/y6O9xIAaIQQMBAsgA0L//8+K6///1R5WDQJCpOzDtY/UtJjnACEJIANC///Piuv//9UeUQ0BIAMhBUKazf/Lo73EgBohBAwDCyADIQUgBiEJIAchCiAIIQsMAgtC///Piuv//9UeIQUgDEKr1f7///+//7l/Wg0AQprN/8ujvcSAGiEEDAELIANC///Piuv//9UefSIJIAxCq9X+////v/+5f1StIgp9IQUgBkKk7MO1j9S0mOcAfSILIANC///Piuv//9UeVCAJIApUcq0iA30hCSAHQr+llJzP8NK75AB9Ig0gBkKk7MO1j9S0mOcAVCADIAtWcq0iA30hCiAIQtfZrprk9umNywB9IgYgB0K/pZScz/DSu+QAVCADIA1Wcq0iA30hCyAEIAhC19mumuT26Y3LAFQgAyAGVnKtfUKazf/Lo73EgBp9IQQgDELVqoGAgIDAgMYAfCEMCyACIAw3A/gBIAIgBTcD8AEgAiAJNwPoASACIAo3A+ABIAIgCzcD2AEgAiAENwPQASACIAJBgAJqNgLcAiACQQA2AsQCIAJBADYCsAIgAiACQdABajYC2AIgACACQbACahCtAiACQeACaiQAC4kKAiB/AX4jAEHABGsiAiQAQdHOxQAtAAAaQcAEQQgQ1gQiAwRAIAMgAUHABPwKAAAgAykDACEiIANBwAQQ3wQgAiAiNwMAIAJBCGogAUEIakGYAvwKAAAgAkGgAmoiBCACEKQBIABBKGogAkHIAmoiAykDADcDACAAQSBqIAJBwAJqIgUpAwA3AwAgAEEYaiACQbgCaiIGKQMANwMAIABBEGogAkGwAmoiBykDADcDACAAQQhqIAJBqAJqIggpAwA3AwAgACACKQOgAjcDACAAIAIpA9ACNwMwIABBOGogAkHYAmoiCSkDADcDACAAQUBrIAJB4AJqIgopAwA3AwAgAEHIAGogAkHoAmoiCykDADcDACAAQdAAaiACQfACaiIMKQMANwMAIABB2ABqIAJB+AJqIg0pAwA3AwAgAEGIAWogAkGoA2oiDikDADcDACAAQYABaiACQaADaiIPKQMANwMAIABB+ABqIAJBmANqIhApAwA3AwAgAEHwAGogAkGQA2oiESkDADcDACAAQegAaiACQYgDaiISKQMANwMAIAAgAikDgAM3A2AgAEG4AWogAkHYA2oiEykDADcDACAAQbABaiACQdADaiIUKQMANwMAIABBqAFqIAJByANqIhUpAwA3AwAgAEGgAWogAkHAA2oiFikDADcDACAAQZgBaiACQbgDaiIXKQMANwMAIAAgAikDsAM3A5ABIABB6AFqIAJBiARqIhgpAwA3AwAgAEHgAWogAkGABGoiGSkDADcDACAAQdgBaiACQfgDaiIaKQMANwMAIABB0AFqIAJB8ANqIhspAwA3AwAgAEHIAWogAkHoA2oiHCkDADcDACAAIAIpA+ADNwPAASAAQZgCaiACQbgEaiIdKQMANwMAIABBkAJqIAJBsARqIh4pAwA3AwAgAEGIAmogAkGoBGoiHykDADcDACAAQYACaiACQaAEaiIgKQMANwMAIABB+AFqIAJBmARqIiEpAwA3AwAgACACKQOQBDcD8AEgBCABQaACahCkASAAQcgCaiADKQMANwMAIABBwAJqIAUpAwA3AwAgAEG4AmogBikDADcDACAAQbACaiAHKQMANwMAIABBqAJqIAgpAwA3AwAgACACKQOgAjcDoAIgACACKQPQAjcD0AIgAEHYAmogCSkDADcDACAAQeACaiAKKQMANwMAIABB6AJqIAspAwA3AwAgAEHwAmogDCkDADcDACAAQfgCaiANKQMANwMAIABBqANqIA4pAwA3AwAgAEGgA2ogDykDADcDACAAQZgDaiAQKQMANwMAIABBkANqIBEpAwA3AwAgAEGIA2ogEikDADcDACAAIAIpA4ADNwOAAyAAQdgDaiATKQMANwMAIABB0ANqIBQpAwA3AwAgAEHIA2ogFSkDADcDACAAQcADaiAWKQMANwMAIABBuANqIBcpAwA3AwAgACACKQOwAzcDsAMgAEGIBGogGCkDADcDACAAQYAEaiAZKQMANwMAIABB+ANqIBopAwA3AwAgAEHwA2ogGykDADcDACAAQegDaiAcKQMANwMAIAAgAikD4AM3A+ADIABBuARqIB0pAwA3AwAgAEGwBGogHikDADcDACAAQagEaiAfKQMANwMAIABBoARqICApAwA3AwAgAEGYBGogISkDADcDACAAIAIpA5AENwOQBCACQcAEaiQADwtBCEHABEHwtcIAEMgEAAuICgIJfwF+IwBB4ABrIgMkAAJAAkACQAJAAkAgAigCCCIGBEAgASgCCCIFRQRAIABBCGpB7PTEACgCACIBNgIAIABB5PTEACkCACIMNwIAIAAgDDcCDCAAQRRqIAE2AgAMBQsgAigCBCEHAkACQAJAIAZBAUcEQAJ/IAUgBkYEQCAGQQJ0IQQgB0EEayEKIAEoAgRBBGshCwNAIARFDQUgBCAKaiEJIAQgC2ogBEEEayEEKAIAIgggCSgCACIJRg0ACyAIIAlLIAggCUlrDAELIAUgBksgBSAGSWsLQf8BcQ4CAgMBCyAHKAAAQQFGDQZB0c7FAC0AABogASgCBCEEIAVBAnQiAUEEENYEIgJFDQggAQRAIAIgBCAB/AoAAAsgAyAFNgJYIAMgAjYCVCADIAU2AlAgA0EoaiIEIANB0ABqIAcoAgAQggIgA0EQaiIFIANBMGoiASgCADYCACADIAMpAig3AwggAygCNCECIAFB7PTEACgCADYCACADQeT0xAApAgA3AyggAgRAIARB6PbEABClAyADKAIsIAI2AgAgA0EBNgIwCyAAIAMpAyg3AgwgAEEUaiABKAIANgIAIABBCGogBSgCADYCACAAIAMpAwg3AgAMBwtB0c7FAC0AABogASgCBCEEIAVBAnQiAUEEENYEIgJFDQcgAQRAIAIgBCAB/AoAAAsgACAFNgIUIAAgAjYCECAAIAU2AgwgAEHk9MQAKQIANwIAIABBCGpB7PTEACgCADYCAAwGC0HRzsUALQAAGkEE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AikDkAY3A/ABIABB6AFqIAJBiAZqKQMANwMAIABB4AFqIAJBgAZqKQMANwMAIABB2AFqIAJB+AVqKQMANwMAIABB0AFqIAJB8AVqKQMANwMAIABB+AFqIAJBmAZqKQMANwMAIABBgAJqIAJBoAZqKQMANwMAIABBiAJqIAJBqAZqKQMANwMAIABBkAJqIAJBsAZqKQMANwMAIABBmAJqIAJBuAZqKQMANwMAIAAgBjYCxAEgACAJNgLAASAAIAc2AgAgACAENgIEIAAgAikDuAQ3AwggAEEQaiACQcAEaikDADcDACAAQRhqIAJByARqKQMANwMAIABBIGogAkHQBGopAwA3AwAgAEEoaiACQdgEaikDADcDACAAQdgAaiACQYgFaikDADcDACAAQdAAaiACQYAFaikDADcDACAAQcgAaiACQfgEaikDADcDACAAQUBrIAJB8ARqKQMANwMAIABBOGogAkHoBGopAwA3AwAgACACKQPgBDcDMCAAIAU2AmQgACAINgJgIABBiAFqIAJBsAVqKQMANwMAIABBgAFqIAJBqAVqKQMANwMAIABB+ABqIAJBoAVqKQMANwMAIABB8ABqIAJBmAVqKQMANwMAIAAgAikDkAU3A2ggAEG4AWogAkHgBWopAwA3AwAgAEGwAWogAkHYBWopAwA3AwAgAEGoAWogAkHQBWopAwA3AwAgAEGgAWogAkHIBWopAwA3AwAgAEGYAWogAkHABWopAwA3AwAgACACKQO4BTcDkAEgAkHABmokAA8LQQhBoAJB8LXCABDIBAALIAIgBDYCqAIMAgsgAiAFNgKoAgwBCyACIAY2AqgCCyACIAE2AqQCIAIgAzYCoAJBgIvAAEErIAJBoAJqQayLwABBpI3AABDKAwALmgkCB34PfyMAQTBrIgskACALIAM2AiggASgCDCEQIAsgC0EoajYCLAJAAkACQAJ/AkAgECACIBBqIgNNBEAgASgCBCIRIBFBAWpBA3ZBB2wgEUEISRsiAkEBdiADSQRAIAJBAWoiAiADIAIgA0sbIgJBCEkNAiACQf////8BTQRAQX8gAkEDdEEHbkEBa2d2IgJB/v///wBLDQUgAkEBagwECxD1AyALKAIkIQMgCygCICECDAYLIAEgC0EsakE5QRAQxAFBgYCAgHghAgwFCxD1AyALKAIMIQMgCygC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GlZyDQAgBUKazf/Lo73EgBpSDQEgCELX2a6a5PbpjcsAVg0AIAhC19mumuT26Y3LAFIEQCADIQogBiEEIAchCSAIIQtCms3/y6O9xIAaIQUMBAsgB0K/pZScz/DSu+QAVg0AQtfZrprk9umNywAhCyAHQr+llJzP8NK75ABSBEAgAyEKIAYhBCAHIQlCms3/y6O9xIAaIQUMBAsgBkKk7MO1j9S0mOcAVg0AQr+llJzP8NK75AAhCSAGQqTsw7WP1LSY5wBSBEAgAyEKIAYhBEKazf/Lo73EgBohBQwECyADQv//z4rr///VHlYNAEKk7MO1j9S0mOcAIQQgA0L//8+K6///1R5SIAxCqtX+////v/+5f1hyDQILIANC///Piuv//9UefSIEIAxCq9X+////v/+5f1StIgl9IQogBkKk7MO1j9S0mOcAfSILIANC///Piuv//9UeVCAEIAlUcq0iA30hBCAHQr+llJzP8NK75AB9Ig0gBkKk7MO1j9S0mOcAVCADIAtWcq0iA30hCSAIQtfZrprk9umNywB9IgYgB0K/pZScz/DSu+QAVCADIA1Wcq0iA30hCyAFIAhC19mumuT26Y3LAFQgAyAGVnKtfUKazf/Lo73EgBp9IQUgDELVqoGAgIDAgMYAfCEMDAILIAMhCiAGIQQgByEJIAghCwwBCyADIQpCms3/y6O9xIAaIQULIAAgDDcDKCAAIAo3AyAgACAENwMYIAAgCTcDECAAIAs3AwggACAFNwMAIAJBgAJqJAAL+w0CC38KfiMAQdACayIDJAACQAJAAkACQAJAAkACQCABQYjSwQBBMBDxA0UEQCABQTBqIgRBiNLBAEEwEPEDRQ0BCwJAAkAgAi0ADCIJQQFHBEAgAS0AYCEEIANBCGpBAEHgAPwLACADIAQ6AGggA0HIAWogAUHYAGopAwA3AwAgA0HAAWogAUHQAGopAwA3AwAgA0G4AWogAUHIAGopAwA3AwAgA0GwAWogAUFAaykDADcDACADQagBaiABQThqKQMANwMAIANB+ABqIAFBCGopAwA3AwAgA0GAAWogAUEQaikDADcDACADQYgBaiABQRhqKQMANwMAIANBkAFqIAFBIGopAwA3AwAgA0GYAWogAUEoaikDADcDACADIAEpAzA3A6ABIAMgASkDADcDcCADIAQ6ANABIAIoAgQhCiACKAIAIQtBBCEFIAkOAwECAQILIAEtAGAhASAAQQBB4AD8CwAgACABOgBgDAMLIAIoAggiB0ECdCEBIAdB/////wNLIAFB/P///wdLcg0DIAEEf0HRzsUALQAAGkEEIQYgAUEEENYEIgVFDQQgBwVBAAshBiABRQ0AIAUgCiAB/AoAAAsgB0UNBUHg98EAKAIAIQ0gA0HgAWohBEHY98EAKQIAIRMDQCAEIA02AgAgAyATNwPYASADQdgBakHM+MEAEKUDIAMoAtwBQQE2AgAgAygC3AEhCCADKALYASEMAn8gB0EBRwRAQdHOxQAtAAAaQQRBBBDWBCIBRQ0GIAEgCCgCACICNgIAIAIgBSgCAHEMAQtB0c7FAC0AABpBBEEEENYEIgFFDQYgASAFKAIAIgI2AgAgAiAIKAIAcQshAiABIAI2AgAgDARAIAggDEECdBDfBAsgAUEEEN8EIAIEQCADQdgBaiICIANBCGoiASADQfAAahAnIAEgAkHoAPwKAAALIANB2AFqIgEgA0HwAGoiAiACECcgAiABQegA/AoAACADIAc2AuABIAMgBTYC3AEgAyAGNgLYAQJAAkAgBkGAgICAeEcNACAFKAIIDQAgA0EANgLMAiADQoCAgIDAADcCxAIMAQsgA0HEAmogA0HYAWpBAEEBEOwBCyADKALEAiEGIAMoAsgCIQUgAygCzAIiBw0ACwwFCyAAIAQpAwA3AzAgACABKQMANwMAIABB2ABqIARBKGopAwA3AwAgAEHQAGogBEEgaikDADcDACAAQcgAaiAEQRhqKQMANwMAIABBQGsgBEEQaikDADcDACAAQThqIARBCGopAwA3AwAgAEEIaiABQQhqKQMANwMAIABBEGogAUEQaikDADcDACAAQRhqIAFBGGopAwA3AwAgAEEgaiABQSBqKQMANwMAIABBKGogAUEoaikDADcDACAAIAEtAGA6AGALIAIoAgAiAEUNBCACKAIEIABBAnQQ3wQMBAsgBiABQfiBwAAQyAQAC0EEQQRB+IHAABDIBAALQQRBBEH4gcAAEMgEAAsgCUUEQCADQdgBaiECAkACQCADQQhqIgFBiNLBAEEwEPEDRQRAIAFBMGoiBEGI0sEAQTAQ8QNFDQELIAEpA1ghFCABKQNQIRAgASkDSCERIAEpA0AhEiABKQM4IRYgASkDMCEXAkAgAUEwakGI0sEAQTAQ8QNFBEAgFiEOIBIhDyARIRUgECETDAELQv//z4rr///VHiAQfSIPIBRCq9X+////v/+5f1atIhV9IRNCpOzDtY/UtJjnACARfSIOIA8gFVQgEEL//8+K6///1R5Wcq0iD30hFUK/pZScz/DSu+QAIBJ9IhAgDiAPVCARQqTsw7WP1LSY5wBWcq0iDn0hD0LX2a6a5PbpjcsAIBZ9IhEgDiAQViASQr+llJzP8NK75ABWcq0iEn0hDkKazf/Lo73EgBogESASVCAWQtfZrprk9umNywBWcq0gF3x9IRdCq9X+////v/+5fyAUfSEUCyACIBQ3A1ggAiATNwNQIAIgFTcDSCACIA83A0AgAiAONwM4IAIgFzcDMCACIAEpAwA3AwAMAQsgAiAEKQMANwMwIAIgASkDADcDACACQdgAaiAEQShqKQMANwMAIAJB0ABqIARBIGopAwA3AwAgAkHIAGogBEEYaikDADcDACACQUBrIARBEGopAwA3AwAgAkE4aiAEQQhqKQMANwMACyACQQhqIAFBCGopAwA3AwAgAkEQaiABQRBqKQMANwMAIAJBGGogAUEYaikDADcDACACQSBqIAFBIGopAwA3AwAgAkEoaiABQShqKQMANwMAIAIgAS0AYDoAYCABIAJB6AD8CgAACyAAIANBCGpB6AD8CgAAIAYEQCAFIAZBAnQQ3wQLIAtFDQAgCiALQQJ0EN8ECyADQdACaiQAC6kJAgt/AX4jAEHwAWsiAyQAAkACQAJAAkACQAJAAkAgAUHo0cEAQSAQ8QNFBEAgAUEgaiIEQejRwQBBIBDxA0UNAQsCQAJAIAItAAwiCEEBRwRAIANBEGpCADcDACADQRhqQgA3AwAgA0EgakIANwMAIANBKGpCADcDACADQTBqQgA3AwAgA0E4akIANwMAIANBQGtCADcDACADQgA3AwggAyABLQBAIgQ6AEggA0GIAWogAUE4aikDADcDACADQYABaiABQTBqKQMANwMAIANB+ABqIAFBKGopAwA3AwAgA0HYAGogAUEIaikDADcDACADQeAAaiABQRBqKQMANwMAIANB6ABqIAFBGGopAwA3AwAgAyAEOgCQASADIAEpAyA3A3AgAyABKQMANwNQIAIoAgQhCSACKAIAIQpBBCEFQQAhBCAI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KyAFQYgJakGkusIAQfS6wgAQygMAC6AIAg9/BH4jAEGACWsiAiQAIAIgASABQcABaiIDEOsBIAJBwAFqIgUgASADEKACIAJBgAJqIAFBQGsiBiABQYACahCgAiACQcACaiABQYABaiIHIAFBwAJqEKACIAJBiAZqQgA3AwAgAkGQBmpCADcDACACQZgGakIANwMAIAJBoAZqQgA3AwAgAkGoBmpCADcDACACQbAGakIANwMAIAJBuAZqQgA3AwAgAkHYBGoiCEHAg8AAKQMAIhE3AwAgAkHQBGoiCUG4g8AAKQMAIhI3AwAgAkHIBGoiCkGwg8AAKQMAIhM3AwAgAkHgBGoiC0IANwMAIAJB6ARqIgxCADcDACACQfAEaiINQgA3AwAgAkH4BGoiDkIANwMAIAJCADcDgAYgAkGog8AAKQMAIhQ3A8AEIAJB+AZqIA4pAwA3AwAgAkHwBmogDSkDADcDACACQegGaiAMKQMANwMAIAJB4AZqIAspAwA3AwAgAkHYBmogCCkDADcDACACQdAGaiAJKQMANwMAIAJByAZqIAopAwA3AwAgAiACKQPABDcDwAYgAkG4B2pCADcDACACQbAHakIANwMAIAJBqAdqQgA3AwAgAkGgB2pCADcDACACQZgHakIANwMAIAJBkAdqQgA3AwAgAkGIB2pCADcDACACQgA3A4AHIAJBwARqIgQgAkGABmogAxDrASACQYADaiIPIAEgBBCgAiACQcADaiIBIAYgAkGABWoiAxCgAiACQYAEaiIGIAcgAkHABWoiBxCgAiAEIAUgDxDrASAPIAQgAhDcASABIAMgAkFAayIFENwBIAYgByACQYABaiIQENwBIAJByAdqQgA3AwAgAkHQB2pCADcDACACQdgHakIANwMAIAJB4AdqQgA3AwAgAkHoB2pCADcDACACQfAHakIANwMAIAJB+AdqQgA3AwAgCCARNwMAIAkgEjcDACAKIBM3AwAgC0IANwMAIAxCADcDACANQgA3AwAgDkIANwMAIAJCADcDwAcgAiAUNwPABCACQbgIaiAOKQMANwMAIAJBsAhqIA0pAwA3AwAgAkGoCGogDCkDADcDACACQaAIaiALKQMANwMAIAJBmAhqIAgpAwA3AwAgAkGQCGogCSkDADcDACACQYgIaiAKKQMANwMAIAIgAikDwAQ3A4AI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aiAEQbgBaikDADcDACADQaAFaiAEQbABaikDADcDACADQZgFaiAEQagBaikDADcDACADQZAFaiAEQaABaikDADcDACADQYgFaiAEQZgBaikDADcDACADQdgEaiAEQegAaikDADcDACADQeAEaiAEQfAAaikDADcDACADQegEaiAEQfgAaikDADcDACADQfAEaiAEQYABaikDADcDACADQfgEaiAEQYgBaikDADcDACADIAQpA5ABNwOABSADIAQpA2A3A9AEIAVBBE0NByAFQQVGDQggA0GIBmogBEGYAmopAwA3AwAgA0GABmogBEGQAmopAwA3AwAgA0H4BWogBEGIAmopAwA3AwAgA0HwBWogBEGAAmopAwA3AwAgA0HoBWogBEH4AWopAwA3AwAgA0G4BWoiBSAEQcgBaikDADcDACADQcAFaiAEQdABaikDADcDACADQcgFaiAEQdgBaikDADcDACADQdAFaiAEQeABaikDADcDACADQdgFaiAEQegBaikDADcDACADIAQpA/ABNwPgBSADIAQpA8ABNwOwBSADIANB0ARqIANBsAVqEGwgAygCAEUNASAFIANBDGooAgA2AgAgAyADKQIENwOwBQsgAigCACIBQYCAgIB4RiABRXJFBEAgAigCBCABEN8ECyACIAMpA7AFNwIAIAJBCGogA0G4BWooAgA2AgBBAiEBDAELIANBjANqIQIgAiADQQhqQcAB/AoAACADQbAFaiIEIAJBwAH8CgAAIANB8AZqIANBqAJqQeAA/AoAACADIAMoAKMCNgCLAyADIAMoAqACNgKIAyADIARBoAL8CgAACyAAIANBoAL8CgAAIAAgAToAoAIgACADKAKIAzYAoQIgAEGkAmogAygAiwM2AAAMBwtBAEEAQcD6wAAQ2QMAC0EBQQFB0PrAABDZAwALQQJBAkHg+sAAENkDAAtBA0EDQfD6wAAQ2QMAC0EEQQRBgPvAABDZAwALQQVBBUGQ+8AAENkDAAsgAEEDOgCgAgsgA0HQB2okAAvtBwIJfwh+IwBBEGsiByQAAkACQAJAIAEoAghFBEBB0c7FAC0AABpBASECQQFBARDWBCIGRQ0CIAZBADoAACAHQQE2AgQMAQsgB0EEaiABQQgQsAIgBygCCCEGIAcoAgwiAkECSQ0AIAIgBmohBEEAIQEgAkEBdiIF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IAMpAiA3AgAgACAEOgAMIABBCGogA0EoaigCADYCAAwECyADQQA2AhwgAygCFCIBQQRPBEAgAygCGCABQQJ0EN8EIANCgICAgMAANwIUCyAAQQE6AAwgACADKQIUNwIAIABBCGogA0EcaigCADYCAAwDCyAAIAg6AAwgACADKQIUNwIAIABBCGogA0EcaigCADYCAAwCCyABKAIAIgBFDQEgASgCBCAAQQJ0EN8EDAELIAEgAygCDEHQz8IAEMgEAAsgA0HQAGokAAvnCAEPfyMAQcACayICJAAgAkE4akIANwMAIAJBMGpCADcDACACQShqQgA3AwAgAkEgakIANwMAIAJBGGpCADcDACACQRBqQgA3AwAgAkEIakIANwMAIAJCADcDAAJAAkAgASACEKcEBEAgAUFAayIDIAIQpwQNAQsgAkHgAGoiAyABKQMgNwMAIAJB2ABqIgQgAUEYaikDADcDACACQdAAaiIFIAFBEGopAwA3AwAgAkHIAGoiBiABQQhqKQMANwMAIAJB6ABqIgcgAUEoaikDADcDACACQfAAaiIIIAFBMGopAwA3AwAgAkH4AGoiCSABQThqKQMANwMAIAIgASkDADcDQCACQZgBaiIKIAFB2ABqKQMANwMAIAJBkAFqIgsgAUHQAGopAwA3AwAgAkGIAWoiDCABQcgAaikDADcDACACIAEpA0A3A4ABIAJBuAFqIg0gAUH4AGopAwA3AwAgAkGwAWoiDiABQfAAaikDADcDACACQagBaiIPIAFB6ABqKQMANwMAIAJBoAFqIhAgASkDYDcDACACQQhqIAwpAwA3AwAgAkEQaiALKQMANwMAIAJBGGogCikDADcDACACQSBqIBApAwA3AwAgAkEoaiAPKQMANwMAIAJBMGogDikDADcDACACQThqIA0pAwA3AwAgAiACKQOAATcDACAAQUBrIAIQ8AIgAEE4aiAJKQMANwMAIABBMGogCCkDADcDACAAQShqIAcpAwA3AwAgAEEgaiADKQMANwMAIABBGGogBCkDADcDACAAQRBqIAUpAwA3AwAgAEEIaiAGKQMANwMAIAAgAikDQDcDAAwBCyACQeABaiIEIAEpAyA3AwAgAkHYAWoiBSABQRhqKQMANwMAIAJB0AFqIgYgAUEQaikDADcDACACQcgBaiIHIAFBCGopAwA3AwAgAkHoAWoiCCABQShqKQMANwMAIAJB8AFqIgkgAUEwaikDADcDACACQfgBaiIKIAFBOGopAwA3AwAgAkGIAmoiCyADQQhqKQMANwMAIAJBkAJqIgwgA0EQaikDADcDACACQZgCaiINIANBGGopAwA3AwAgAiABKQMANwPAASACIAMpAwA3A4ACIAJBuAJqIgMgAUH4AGopAwA3AwAgAkGwAmoiDiABQfAAaikDADcDACACQagCaiIPIAFB6ABqKQMANwMAIAJBoAJqIhAgASkDYDcDACAAQThqIAopAwA3AwAgAEEwaiAJKQMANwMAIABBKGogCCkDADcDACAAQSBqIAQpAwA3AwAgAEEYaiAFKQMANwMAIABBEGogBikDADcDACAAQQhqIAcpAwA3AwAgACACKQPAATcDACAAQfgAaiADKQMANwMAIABB8ABqIA4pAwA3AwAgAEHoAGogDykDADcDACAAQeAAaiAQKQMANwMAIABB2ABqIA0pAwA3AwAgAEHQAGogDCkDADcDACAAQcgAaiALKQMANwMAIAAgAikDgAI3A0ALIAJBwAJqJAAL/QgCAX8MfiMAQbACayICJAAgAkGIAmogAUHAABCxAkEBIQECQCACLQCIAkEBRgRAIAAgAi0AiQI6AAEMAQsgAkHAAWogAikDqAJCAEKkC0IAEMkDIAJB0AFqIAIpA6ACQgBCpAtCABDJAyACQeABaiACKQOYAkIAQqQLQgAQyQMgAkHwAWogAikDkAJCAEKkC0IAEMkDIAJBsAFqIAIpA8ABIgdCm5Svw/K1qN6Gf34iBEIAQm1CABDJAyACQaABaiAEQgBCf0IAEMkDIAJBMGogBEIAQv///////////wBCABDJAyACQZABaiACKQOgASIEIAIpA8gBIgYgAikD0AF8IgV8IgggAikDuAEgAikDsAEiAyAHQnyDfCADVK18fCIHQpuUr8Pytajehn9+IgNCAEJtQgAQyQMgAkGAAWogA0IAQn9CABDJAyACQUBrIANCAEL///////////8AQgAQyQMgAkHwAGogAikDgAEiAyAEIAIpA9gBIAUgBlStfCIJIAIpA+ABfCIGfCIFIAcgCFStIAIpA6gBIgsgBCAIVq18fHwiDHwiBCACKQOYASACKQOQASIIIAd8IAhUrXx8IghCm5Svw/K1qN6Gf34iB0IAQm1CABDJAyACQeAAaiAHQgBCf0IAEMkDIAJB0ABqIAdCAEL///////////8AQgAQyQMgAkEgaiACKQNgIgcgAyACKQPoASAGIAlUrXwiDSACKQPwAXwiCSACKQMwfCIKIAUgDFatIAsgBSAGVK18fHwiBnwiBSAEIAhWrSACKQOIASILIAMgBFatfHx8Igx8IgQgAikDeCAIIAIpA3AiA3wgA1StfHwiCEKblK/D8rWo3oZ/fiIDQgBCbUIAEMkDIAJBEGogA0IAQn9CABDJAyACIANCAEL///////////8AQgAQyQMCQAJAIAIpAwggAikDWCACKQNIIAIpA0AiDiACKQP4ASAJIA1UrXx8IgMgDlStfCADIAMgBiAKVK0gAikDOCAJIApWrXx8fCIJVq18IAkgCSAFIAxWrSALIAUgBlStfHx8IgNWrXwiBSACKQNQfCIGIAVUrXwgBiACKQNoIgkgAyADIAd8IgVWrXwgBSAEIAhWrSAJIAQgB1StfHx8IgkgBVStfHwiBCAGVK18IgMgAikDAHwiByADVK18IAcgAikDGCIGIAQgBCACKQMQIgN8IgVWrXwgBSAFIAYgAyADIAl8IgRWrXwgBCACKQMoIAggAikDICIDfCADVK18fCIGIARUrXx8IgRWrXx8IgggB1StfCIFQgBZBEAgBUL///////////8AUiAGQm1UciAEIAiDQn9Scg0BCyAEQgF8IgMgBkJtVK0iCX0hByAIQgF8IgogBEJ/UiADIAlUcq0iBH0hAyAFIAhCf1IgBCAKVnKtfUL///////////8AfSEFIAZCE3whBgwBCyAIIQMgBCEHCyAAIAY3AyAgACAHNwMYIAAgAzcDECAAIAU3AwhBACEBCyAAIAE6AAAgAkGwAmokAAvkCAEHfyMAQTBrIgMkAAJAIAItAAwiB0EBRgRAIAAgASkCADcCACAAQQhqIAFBCGopAgA3AgAMAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAMIgZBAWsOAgoBAAsgB0UNAQwCCyAHRQ0BCwJ/IAEoAggiBCACKAIIIgVGBEAgBEECdCEEIAEoAgRBBGshCCACKAIEQQRrIQkCQANAIARFDQEgBCAJaiEHIAQgCGogBEEEayEEKAIAIgUgBygCACIHRg0ACyAFIAdLIAUgB0lrDAILQX9BACAEGwwBCyAEIAVLIAQgBUlrC0H/AXEOAgMCAQsgA0EoaiABQQhqKAIANgIAIAMgASkCADcDICADQRRqIANBIGogAhDKASADKAIcRQRAIABBAToADCAAIAMpAhQ3AgAgAEEIaiADQRxqKAIANgIADAoLIAAgBjoADCAAIAMpAhQ3AgAgAEEIaiADQRxqKAIANgIADAkLQQIhBAJAAkACQCAGQQFrDgICAAELQQAhBAsgA0EoaiABQQhqKAIANgIAIAMgASkCADcDICADQRRqIAIgA0EgahCeASAEQQEgAygCHBshBAwFCyADQShqIAFBCGooAgA2AgAgAyABKQIANwMgIANBFGoiASACIANBIGoQngFBACECIANBADYCHCABEOUDIAMoAhwiBkUNAyADKAIYIgEgBkECdCIEakEEaygCAARAIAYhAgwECyABQQRrIQIgBkH/////A3EhAQJAA0AgBEUEQEEAIQQMAgsgAUEBayEBIAIgBGogBEEEayEEKAIARQ0ACyAGIgIgAUEBaiIESQ0ECyADIAQ2AhwgBCECDAMLIANBKGogAUEIaigCADYCACADIAEpAgA3AyAgA0EUaiADQSBqIAIQhwJBASEEAkAgBkEBRwRAIAZBASADKAIcGyEEDAELIANBADYCHCADKAIUQQRJDQAgA0EIaiADQRRqQQAQ0wMgAygCCCIBQYGAgIB4Rw0CCyAAIAMpAhQ3AgAgACAEOgAMIABBCGogA0EcaigCADYCAAwHCyAAQQhqQYDExAApAgA3AgAgAEH4w8QAKQIANwIADAQLIAEgAygCDEG0ycQAEMgEAAtBASEEIAIgAygCFEECdk8NACADIANBFGogAhDTAyADKAIAIgFBgYCAgHhGDQAgASADKAIEQbTJxAAQyAQACyAAIAMpAhQ3AgAgACAEOgAMIABBCGogA0EcaigCADYCAAwDCyACKAIIIgRBAnQhBUEAIQYgBEH/////A0sgBUH8////B0tyDQEgAigCBCEIAn8gBUUEQEEEIQJBAAwBC0HRzsUALQAAGkEEIQYgBUEEENYEIgJFDQIgBAshBiAFBEAgAiAIIAX8CgAACyAAQQIgB2s6AAwgACAENgIIIAAgAjYCBCAAIAY2AgALIAEoAgAiAEUNASABKAIEIABBAnQQ3wQMAQsgBiAFQaSDxQAQyAQACyADQTBqJAALnwoCAX8QfiMAQdABayIDJAAgASkDACEOIAEpAwghDyABKQMQIRAgASkDGCERIAEpAyAhEiABKQMoIRNBKCEBA0AgA0HwAGogASACaikDACIFQgAgE0IAEMkDIANBgAFqIAVCACASQgAQyQMgA0GQAWogBUIAIBFCABDJAyADQaABaiAFQgAgEEIAEMkDIANBsAFqIAVCACAPQgAQyQMgA0HAAWogBUIAIA5CABDJAyADQeAAaiADKQNwIgkgDXwiCkIAQgBC/f/z/8////mJfxDJAyADQdAAaiADKQNoIgVCAEKr1f7///+//7l/QgAQyQMgA0FAayAFQgBC///Piuv//9UeQgAQyQMgA0EwaiAFQgBCpOzDtY/UtJjnAEIAEMkDIANBIGogBUIAQr+llJzP8NK75ABCABDJAyADQRBqIAVCAELX2a6a5PbpjcsAQgAQyQMgAyAFQgBCms3/y6O9xIAaQgAQyQMgAykDCCAMIAMpA8ABIgx8IgUgAykDuAEgByADKQOwASIHfCILIAdUrXwgCyADKQOoASADKQOgASIHIAh8IgggB1StfCAIIAMpA5gBIAMpA5ABIgcgBnwiBiAHVK18IAYgAykDiAEgAykDgAEiByAEfCIEIAdUrXwgBCADKQN4IAkgClatfHwiCSAEVK18fCIEIAZUrXx8IgYgCFStfHwiCCALVK18fCILIAMpAwB8IgcgC1StfCAHIAcgAykDGCAIIAggAykDEHwiCFatfCAIIAggAykDKCAGIAYgAykDIHwiBlatfCAGIAYgAykDOCAEIAQgAykDMHwiBFatfCAEIAQgAykDSCADKQNAIg0gCXwiCSANVK18IAkgAykDWCAKIAMpA1AiCnwgClStfHwiDSAJVK18fCIEVq18fCIGVq18fCIIVq18fCIHVq18IAUgC1atIAMpA8gBIAUgDFStfHx8IQwgAUEIayIBQXhHDQALAkACQCAMQprN/8ujvcSAGlYNACAMQprN/8ujvcSAGlIEQCAEIQUgBiEKIAghCyAHIQkMAgsgB0LX2a6a5PbpjcsAVg0AAkAgB0LX2a6a5PbpjcsAUgRAIAQhBSAGIQogCCELIAchCQwBCyAIQr+llJzP8NK75ABWDQFC19mumuT26Y3LACEJIAhCv6WUnM/w0rvkAFIEQCAEIQUgBiEK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ADYCACAAIAFBAWo2AghBACEDIAJBGGoiBUGQksIAKAIANgIAIAJBiJLCACkCADcDECAJIAuEUEUEQEEBIQEDQCACKAIQIAFBAWtGBEAgAkEQakGck8IAEKUDCyACKAIUIANqIAk+AgAgCUL/////D1YgC0IAUiALUCALQiCGIAlCIIiEIQkgA0EEaiEDIAtCIIghCyACIAE2AhggAUEBaiEBGw0ACwsgBCAFKAIANgIAIAIgAikDEDcDACAAKAIIIgEgACgCAEYEQCAAQeirwgAQnwMLIAAoAgQgAUEMbGoiBCACKQMANwIAIARBCGogAkEIaigCADYCACAAIAFBAWo2AgggAkEgaiQADwtB1NrCAEEtQYTbwgAQ/gMAC4wKAgF/EH4jAEHAAWsiAyQAIAEpAwAhDiABKQMIIQ8gASkDECEQIAEpAxghESABKQMgIRIgASkDKCETQSghAQNAIANB4ABqIAEgAmopAwAiBUIAIBNCABDJAyADQfAAaiAFQgAgEkIAEMkDIANBgAFqIAVCACARQgAQyQMgA0GQAWogBUIAIBBCABDJAyADQaABaiAFQgAgD0IAEMkDIANBsAFqIAVCACAOQgAQyQMgA0HQAGogAykDYCIJIA18IgpC/f/z/8////mJf34iBUIAQqvV/v///7//uX9CABDJAyADQUBrIAVCAEL//8+K6///1R5CABDJAyADQTBqIAVCAEKk7MO1j9S0mOcAQgAQyQMgA0EgaiAFQgBCv6WUnM/w0rvkAEIAEMkDIANBEGogBUIAQtfZrprk9umNywBCABDJAyADIAVCAEKazf/Lo73EgBpCABDJAyADKQMIIAwgAykDsAEiDHwiBSADKQOoASAHIAMpA6ABIgd8IgsgB1StfCALIAMpA5gBIAMpA5ABIgcgCHwiCCAHVK18IAggAykDiAEgAykDgAEiByAGfCIGIAdUrXwgBiADKQN4IAMpA3AiByAEfCIEIAdUrXwgBCADKQNoIAkgClatfHwiCSAEVK18fCIEIAZUrXx8IgYgCFStfHwiCCALVK18fCILIAMpAwB8IgcgC1StfCAHIAcgAykDGCAIIAggAykDEHwiCFatfCAIIAggAykDKCAGIAYgAykDIHwiBlatfCAGIAYgAykDOCAEIAQgAykDMHwiBFatfCAEIAQgAykDSCADKQNAIg0gCXwiCSANVK18IAkgAykDWCAKIAMpA1AiCnwgClStfHwiDSAJVK18fCIEVq18fCIGVq18fCIIVq18fCIHVq18IAUgC1atIAMpA7gBIAUgDFStfHx8IQwgAUEIayIBQXhHDQALAkACQCAMQprN/8ujvcSAGlYNACAMQprN/8ujvcSAGlIEQCAEIQUgBiEKIAghCyAHIQkMAgsgB0LX2a6a5PbpjcsAVg0AAkAgB0LX2a6a5PbpjcsAUgRAIAQhBSAGIQogCCELIAchCQwBCyAIQr+llJzP8NK75ABWDQFC19mumuT26Y3LACEJIAhCv6WUnM/w0rvkAFIEQCAEIQUgBiEKIAghCwwBCyAGQqTsw7WP1LSY5wBWDQFCv6WUnM/w0rvkACELIAZCpOzDtY/UtJjnAFIEQCAEIQUgBiEKDAELIARC///Piuv//9UeVg0BQqTsw7WP1LSY5wAhCiAEQv//z4rr///VHlIEQCAEIQUMAQtC///Piuv//9UeIQUgDUKq1f7///+//7l/Vg0BC0Kazf/Lo73EgBohDAwBCyAEQv//z4rr///VHn0iCiANQqvV/v///7//uX9UrSILfSEFIAZCpOzDtY/UtJjnAH0iCSAEQv//z4rr///VHlQgCiALVHKtIgR9IQogCEK/pZScz/DSu+QAfSIOIAZCpOzDtY/UtJjnAFQgBCAJVnKtIgR9IQsgB0LX2a6a5PbpjcsAfSIGIAhCv6WUnM/w0rvkAFQgBCAOVnKtIgR9IQkgDCAHQtfZrprk9umNywBUIAQgBlZyrX1Cms3/y6O9xIAafSEMIA1C1aqBgICAwIDGAHwhDQsgACANNwMoIAAgBTcDICAAIAo3AxggACALNwMQIAAgCTcDCCAAIAw3AwAgA0HAAWokAAvoBgIKfwJ+IwBBkAZrIgQkACAEQQhqIgcgARBhIARB4ARqIARBIGopAwA3AwAgBEHYBGogBEEYaikDADcDACAEQdAEaiAEQRBqKQMANwMAIARB8ARqIARBMGopAwA3AwAgBEH4BGogBEE4aikDADcDACAEQYAFaiAEQUBrKQMANwMAIAQgBCkDCDcDyAQgBCAEKQMoNwPoBCAEQcgFaiIFIAcgARA4IARByABqIg0gBSABQUBrIggQ3AEgBEGIA2oiBiAHIAcQOCAFIAEgARCgAiAEQYgBaiILIAYgBRDcASAEQcgCaiIKIAggCBCgAiAGIAEgCxDcASAFIAogBhCRAyAEKQPYBSEOIAQpA9AFIQ8gBCgCyAVBAUcEQCAEQcACaiAEQYgGaikDADcDACAEQbgCaiAEQYAGaikDADcDACAEQbACaiAEQfgFaikDADcDACAEQagCaiAEQfAFaikDADcDACAEQaACaiAEQegFaikDADcDACAEIAQpA+AFNwOYAiAEIA43A5ACIAQgDzcDiAIgBEHIAWoiCSAEQYgCaiIMIAcQ3AEgBEGQBWogBEHQAWopAwA3AwAgBEGYBWogBEHYAWopAwA3AwAgBEGgBWogBEHgAWopAwA3AwAgBEGwBWogBEHwAWopAwA3AwAgBEG4BWogBEH4AWopAwA3AwAgBEHABWogBEGAAmopAwA3AwAgBCAEKQPIATcDiAUgBCAEKQPoATcDqAUgBSAJIAEQOCAMIAUgCBDcASAGIAkgCRA4IAUgASALEKACIAogBiAFENwBIAUgASAKENwBIAYgCSAFEDggBEGIBGogBiAIENwBIARB0ANqIARB0AJqKQMANwMAIARB2ANqIARB2AJqKQMANwMAIARB4ANqIARB4AJqKQMANwMAIARB6ANqIARB6AJqKQMANwMAIARB8ANqIARB8AJqKQMANwMAIARB+ANqIARB+AJqKQMANwMAIARBgARqIARBgANqKQMANwMAIAQgBCkDyAI3A8gDIAAgBEHIBGogDSACIAMQGSAAQZABaiAEQYgFaiAMIAIgAxAZIABBEGogBEHIA2pBgAH8CgAAIARBkAZqJAAPCyAEIA43A9AFIAQgDzcDyAVBoLHCAEErIARByAVqQaS6wgBBhLvCABDKAwAL7wgBCn8jAEEgayIDJAACQAJAAkACQAJ/AkACQAJAAkACfwJAAkACQAJ/AkACQAJAAkAgAS0ADEEBaw4CAQIACyADQRhqQbjMwgAoAgA2AgAgA0GwzMIAKQIANwMQIAINAkEEDAMLIAINAyAAQQhqQajMwgApAgA3AgAgAEGgzMIAKQIANwIADAwLIANBGGogAUEIaigCADYCACADIAEpAgA3AxACQCACRQ0AIAMoAhgiBEUEQCADKAIQRQRAIANBEGpByNDCABClAwsgAygCFEEANgIAIANBATYCGEEBIQQLIAMoAhQiASACIAEoAgAiAmoiBTYC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aiABQQhqKQIANwIAIAIoAgAiAEUNASACKAIEIABBAnQQ3wQMAQsCQAJAAkACQAJAAkACQAJAAkAgAS0ADCIIQQFrDgIAAgELIAAgAikCADcCACAAQQhqIAJBCGopAgA3AgAMBgsgB0UNAQwCCyAHRQ0BCyADQShqIAFBCGoiBigCADYCACADIAEpAgAiCzcDICADQThqIAJBCGoiCSgCADYCACADIAIpAgAiDDcDMAJ/IAunIgQgDKciB0kEQCADQcgAaiAJKAIANgIAIAMgAikCADcDQCADQRRqIANBQGsgA0EgahDKASADQSRqDAELIANByABqIAYoAgA2AgAgAyABKQIANwNAIANBFGogA0FAayADQTBqEMoBIAchBCADQTRqCyEFIAQEQCAFKAIAIARBAnQQ3wQLIAhBAUYNASADKAIcDQIgAEEBOgAMIAAgAykCFDcCACAAQQhqIANBHGooAgA2AgAMBQsCQAJAAkACfyABKAIIIgQgAigCCCIFRgRAIARBAnQhBCABKAIEQQRrIQkgAigCBEEEayEKAkADQCAERQ0BIAQgCmohBiAEIAlqIARBBGshBCgCACIFIAYoAgAiBkYNAAsgBSAGSyAFIAZJawwCC0F/QQAgBBsMAQsgBCAFSyAEIAVJawtB/wFxDgIBAgALIANByABqIAJBCGooAgA2AgAgAyACKQIANwNAIANBMGogA0FAayABEIcCIAEoAgAiAgRAIAEoAgQgAkECdBDfBAsgACADKQIwNwIAIABBCGogA0E4aigCACIBNgIAIAAgB0EBIAEbOgAMDAYLIABBCGpBgMTEACkCADcCACAAQfjDxAApAgA3AgAgAigCACIARQ0DIAIoAgQgAEECdBDfBAwDCyADQcgAaiABQQhqKAIANgIAIAMgASkCADcDQCADQTBqIANBQGsgAhCHAiACKAIAIgEEQCACKAIEIAFBAnQQ3wQLQQEhBAJAIAhBAUcEQCAIQQEgAygCOBshBAwBCyADQQA2AjggAygCMEEESQ0AIANBCGogA0EwakEAENMDIAMoAggiAUGBgICAeEcNBAsgACADKQIwNwIAIAAgBDoADCAAQQhqIANBOGooAgA2AgAMBAsgA0EANgIcIAMoAhQiAUEETwRAIAMoAhggAUECdBDfBCADQoCAgIDAADcCFAsgAEEBOgAMIAAgAykCFDcCACAAQQhqIANBHGooAgA2AgAMAwsgACAIOgAMIAAgAykCFDcCACAAQQhqIANBHGooAgA2AgAMAgsgASgCACIARQ0BIAEoAgQgAEECdBDfBAwBCyABIAMoAgxBtMnEABDIBAALIANB0ABqJAALvQgCC38FfiMAQeAAayIFJAAgBUEYaiABEOYBIAUpAiAhFCAFKAIcIQ8gBSgCGCELIAVBEGogBUEwaikCADcDACAFIAUpAig3AwggBUE4aiAFQQhqEPcBAkACQCACKAIAIgdBgICAgHhGDQAgAigCBCEJIAIoAgghAiAFKAI8IQogBSAFKAJAIgE2AlwgBSACNgJYIAEgAkcNASAFQQA2AiAgBUKAgICAgAE3AhggAQRAQQAhAgNAQgAhEUIAIRBCACESQgAhEyACIAlqLQAABEAgCCAKaiIGKQMAIREgBkEYaikDACETIAZBEGopAwAhEiAGQQhqKQMAIRALIAUoAhggAkYEQCAFQRhqQcS3wgAQogMLIAUoAhwgCGoiBiARNwMAIAZBGGogEzcDACAGQRBqIBI3AwAgBkEIaiAQNwMAIAUgAkEBaiICNgIgIAhBIGohCCABIAJHDQALCyAFQdAAaiIBIAVBIGooAgA2AgAgBSAFKQIYNwNIIAUoAjgiAgRAIAogAkEFdBDfBAsgBUFAayABKAIANgIAIAUgBSkDSDcDOCAHRQ0AIAkgBxDfBAsgBSgCQCIGQQV0IQIgBSgCPCEIIAUoAjghCSAGIQECQAJAAkACQANAIAJFDQEgAUEBayEBIAJBIGsiAiAIakHYw8IAQSAQ8QNFDQALIAFBAWoiAiAGIAIgBkkbIQYMAQtB0c7FAC0AABpBIEEIENYEIgJFDQEgAkIANwMAIAJBGGpCADcDACACQRBqQgA3AwAgAkEIakIANwMAQX8hAUEBIQYgCQRAIAggCUEFdBDfBAsgAiEIQQEhCQsgAwRAIAMoAggiAiADKAIARgRAIANB9LfCABCjAwsgAygCBCACQQR0aiIHIBQ3AgggByAPNgIEIAcgCzYCACADIAJBAWo2AggLIAQEQEEAIQIgBkH///8/SyAGQQV0IgpB+P///wdLcg0CAkAgCkUEQEEIIQwMAQtB0c7FAC0AABpBCCECIApBCBDWBCIMRQ0DIAZFDQBBACECIAYhBwNAIAIgCkYNASACIAxqIg0gAiAIaiIOKQMANwMAIA1BGGogDkEYaikDADcDACANQRBqIA5BEGopAwA3AwAgDUEIaiAOQQhqKQMANwMAIAJBIGohAiAHQQFrIgcNAAsLIAQoAggiByAEKAIARgRAIARBhLjCABCjAwsgBCgCBCAHQQR0aiICIAE2AgwgAiAGNgIIIAIgDDYCBCACIAY2AgAgBCAHQQFqNgIICyAAIAE2AgwgACAGNgIIIAAgCDYCBCAAIAk2AgAgBSgCCCIABEAgBSgCDCAAQQV0EN8ECyADIAtFckUEQCAPIAtBBXQQ3wQLIAVB4ABqJAAPC0EIQSAQ/wQACyACIApB6IHAABDIBAALIAVBADYCGCAFQdgAaiAFQdwAaiAFQRhqQbS3wgAQlwQAC44IAgd/An4jAEEgayIHJAACQAJAAkACfwJAAkACQAJAAkACQAJAAkAgAi0ADEEBaw4CBQABCyACKAIIIgNFDQQgA0EBayIDQf7///8DcQ0FIANB/////wNxIglBAWoiCEEDcSEFIAIoAgQiBiEEIAlBA08EQCAIQfz///8HcSEDA0AgCkKAAXwhCiAEQRBqIQQgA0EEayIDDQALCyAFBEAgBSEDA0AgBDUCACAKhiALfCELIApCIHwhCiAEQQRqIQQgA0EBayIDDQALCyALQoCAgIAQVA0EQgAhCiAJQQNPBEAgCEH8////B3EhBANAIApCgAF8IQogBkEQaiEGIARBBGsiBA0ACwsgCEEDcQ0BDAILIAIoAggiAwRAIANBAWsiA0H+////A3ENBSACKAIEIQQgA0H/////A3EiA0EBaiIFQQNxIQYgA0EDTwRAIAVB/P///wdxIQMDQCAKQoABfCEKIARBEGohBCADQQRrIgMNAAsLIAYEQANAIAQ1AgAgCoYgC3whCyAKQiB8IQogBEEEaiEEIAZBAWsiBg0ACwsgC0IAUw0FC0IAIAt9IQsMAgtCACELA0AgBjUCACAKhiALfCELIApCIHwhCiAGQQRqIQYgBUEBayIFDQALCyALQgBTDQILIAtCgICAgAh8QoCAgIAQWg0BIAEoAggiA0ECdCEEQQAhBSADQf////8DSyAEQfz///8HS3INBiABKAIEIQYgAS0ADCEBIAQNAkEEIQJBAAwDCyABKAIIIgJBAnQhBUEAIQMgAkH/////A0sgBUH8////B0tyDQQgASgCBCEEIAEtAAwhBgJ/IAVFBEBBBCEBQQAMAQtB0c7FAC0AABpBBCEDIAVBBBDWBCIBRQ0FIAILIQMgBQRAIAEgBCAF/AoAAAsgByAGOgAUIAcgAjYCECAHIAE2AgwgByADNgIIIAAgB0EIaiALpxCcAgwDCyAHQQhqIAEgAhChASAHKAIYIQIgBygCFCEGIAcoAgwhAyAHKAIIIQQCQCABLQAMIgFBAUcEQCABQQEgBygCHCIBGyEFDAELIARBBE8EQCADIARBAnQQ3wRBACEEQQQhAwtBASEFQQAhASAGQQRJDQAgAiAGQQJ0EN8EQQAhBkEEIQILIAAgBToADCAAIAE2AgggACACNgIEIAAgBjYCACAERQ0CIAMgBEECdBDfBAwCC0HRzsUALQAAGkEEIQUgBEEEENYEIgJFDQMgAwshBSAEBEAgAiAGIAT8CgAACyAHIAE6ABQgByADNgIQIAcgAjYCDCAHIAU2AgggACAHQQhqQQAgC6ciAGsgACALQgBTGxCcAgsgB0EgaiQADwsgAyAFQfiBwAAQyAQACyAFIARB+IHAABDIBAAL5gcCBX8BfiMAQdAAayICJAAgAkEMaiABEIUCAkACQCACKAIMQYCAgIB4RwRAIAEoAgAEQCABKAIMIAEoAgRrQQxuIQULQQMgASgCEAR/IAEoAhwgASgCFGtBDG4FQQALIAVqIgMgA0EDTRtBAWoiBa1CDH4iB6chAyAHQiCIpyADQfz///8HS3INAgJAIANFBEBBBCEEQQAhBQwBC0HRzsUALQAAGkEEIQYgA0EEENYEIgRFDQMLIAQgAikCDDcCACAEQQhqIAJBFGooAgA2AgAgAkEBNgIIIAIgBDYCBCACIAU2AgAgAkE4aiABQSBqKQIANwMAIAJBMGogAUEYaikCADcDACACQShqIAFBEGopAgA3AwAgAkEgaiABQQhqKQIANwMAIAIgASkCADcDGCACQcQAaiACQRhqEIUCIAIoAkRBgICAgHhHBEBBDCEFQQEhAwNAIAIoAgAgA0YEQCACIAMgAigCGAR/IAIoAiQgAigCHGtBDG5BAWoFQQELIAIoAigEfyACKAI0IAIoAixrQQxuBUEAC2pBBEEMEIgDIAIoAgQhBAsgBCAFaiIBIAIpAkQ3AgAgAUEIaiACQcwAaigCADYCACACIANBAWoiAzYCCCAFQQxqIQUgAkHEAGogAkEYahCFAiACKAJEQYCAgIB4Rw0ACwsCQCACKAIYIgFFDQAgAigCJCIEIAIoAhwiA2tBDG4hBSADIARHBEADQCADKAIAIgQEQCADQQRqKAIAIARBAnQQ3wQLIANBDGohAyAFQQFrIgUNAAsLIAIoAiAiA0UNACABIANBDGwQ3wQLAkAgAigCKCIBRQ0AIAIoAjQiBCACKAIsIgNrQQxuIQUgAyAERwRAA0AgAygCACIEBEAgA0EEaigCACAEQQJ0EN8ECyADQQxqIQMgBUEBayIFDQALCyACKAIwIgNFDQAgASADQQxsEN8ECyAAIAIpAgA3AgAgAEEIaiACQQhqKAIANgIADAELIABBADYCCCAAQoCAgIDAADcCAAJAIAEoAgAiAEUNACABKAIMIgQgASgCBCIDa0EMbiEFIAMgBEcEQANAIAMoAgAiBARAIANBBGooAgAgBEECdBDfBAsgA0EMaiEDIAVBAWsiBQ0ACwsgASgCCCIDRQ0AIAAgA0EMbBDfBAsgASgCECIARQ0AIAEoAhwiBCABKAIUIgNrQQxuIQUgAyAERwRAA0AgAygCACIEBEAgA0EEaigCACAEQQJ0EN8ECyADQQxqIQMgBUEBayIFDQALCyABKAIYIgFFDQAgACABQQxsEN8ECyACQdAAaiQADwsgBiADQaStwAAQyAQAC50IAhJ/AX4gACgCACEFAkAgACgCBEEBaiIMQQN2IAxBB3FBAEdqIgpFDQAgCkEBRwRAIApB/v///wNxIQ0DQCAEIAVqIgcgBykDACIWQn+FQgeIQoGChIiQoMCAAYMgFkL//v379+/fv/8AhHw3AwAgB0EIaiIHIAcpAwAiFkJ/hUIHiEKBgoSIkKDAgAGDIBZC//79+/fv37//AIR8NwMAIARBEGohBCANQQJrIg0NAAsLIApBAXFFDQAgBCAFaiIEIAQpAwAiFkJ/hUIHiEKBgoSIkKDAgAGDIBZC//79+/fv37//AIR8NwMACyAAAn8CQCAMQQhPBEAgBSAMaiAFKQAANwAADAELIAwEQCAFQQhqIAUgDPwKAAALIAwNAEEADAELQQQgA2shDUEAIANrIQ8gA0EccSESIANBA3EhEUEBIQVBACEKA0AgCiELIAUhCgJAIAsgACgCACIEai0AAEGAAUcNACAEIA1qIRMgBCAPaiEUIAQgAyALQX9zbGohFQNAIAEgACALIAIREAAhFiAAKAIEIgggFqciDnEiBSEEIAAoAgAiByAFaikAAEKAgYKEiJCgwIB/gyIWUARAQQghBgNAIAQgBmohBCAGQQhqIQYgByAEIAhxIgRqKQAAQoCBgoSIkKDAgH+DIhZQDQALCyAHIBZ6p0EDdiAEaiAIcSIEaiwAAEEATgRAIAcpAwBCgIGChIiQoMCAf4N6p0EDdiEECwJAIAQgBWsgCyAFa3MgCHFBCE8EQCAEIAdqIgUtAAAgBSAOQRl2IgU6AAAgACgCACAEQQhrIAhxakEIaiAFOgAAIAcgAyAEQX9zbGohDkH/AUcEQCAOQQRqIQRBACEIIBMhBwNAIAggFGoiBS0AACEJIAUgCCAOaiIGLQAAOgAAIAYgCToAACAFQQFqIgktAAAhECAJIAZBAWoiCS0AADoAACAJIBA6AAAgBUECaiIJLQAAIRAgCSAGQQJqIgktAAA6AAAgCSAQOgAAIAVBA2oiBS0AACEJIAUgBkEDaiIFLQAAOgAAIAUgCToAACAHIgVBBGohByAEIgZBBGohBCASIAhBBGoiCEcNAAsMAgsgACgCBCEEIAAoAgAgC2pB/wE6AAAgACgCACAEIAtBCGtxakEIakH/AToAACADRQ0DIA4gFSAD/AoAAAwDCyAHIAtqIA5BGXYiBDoAACAAKAIAIAggC0EIa3FqQQhqIAQ6AAAMAgsgEUUNACARIQgDQCAFLQAAIQQgBSAGLQAAOgAAIAYgBDoAACAFQQFqIQUgBkEBaiEGIAhBAWsiCA0ACwwACwALIA0gA2shDSAPIANrIQ8gCiAKIAxJIgRqIQUgBA0ACyAAKAIEIgEgAUEBakEDdkEHbCABQQhJGwsgACgCDGs2AggL1gcBAX8gACgCACIBBEAgACgCBCABQQJ0EN8ECyAAKAIMIgEEQCAAKAIQIAFBAnQQ3wQLIAAoAhgiAQRAIAAoAhwgAUECdBDfBAsgACgCJCIBBEAgACgCKCABQQJ0EN8ECyAAKAIwIgEEQCAAKAI0IAFBAnQQ3wQLIAAoAjwiAQRAIAAoAkAgAUECdBDfBAsgACgCSCIBBEAgACgCTCABQQJ0EN8ECyAAKAJUIgEEQCAAKAJYIAFBAnQQ3wQLIAAoAmAiAQRAIAAoAmQgAUECdBDfBAsgACgCbCIBBEAgACgCcCABQQJ0EN8ECyAAKAJ4IgEEQCAAKAJ8IAFBAnQQ3wQLIAAoAoQBIgEEQCAAKAKIASABQQJ0EN8ECyAAKAKQASIBBEAgACgClAEgAUECdBDfBAsgACgCnAEiAQRAIAAoAqABIAFBAnQQ3wQLIAAoAqgBIgEEQCAAKAKsASABQQJ0EN8ECyAAKAK0ASIBBEAgACgCuAEgAUECdBDfBAsgACgCwAEiAQRAIAAoAsQBIAFBAnQQ3wQLIAAoAswBIgEEQCAAKALQASABQQJ0EN8ECyAAKALYASIBBEAgACgC3AEgAUECdBDfBAsgACgC5AEiAQRAIAAoAugBIAFBAnQQ3wQLIAAoAvABIgEEQCAAKAL0ASABQQJ0EN8ECyAAKAL8ASIBBEAgACgCgAIgAUECdBDfBAsgACgCiAIiAQRAIAAoAowCIAFBAnQQ3wQLIAAoApQCIgEEQCAAKAKYAiABQQJ0EN8ECyAAKAKgAiIBBEAgACgCpAIgAUECdBDfBAsgACgCrAIiAQRAIAAoArACIAFBAnQQ3wQLIAAoArgCIgEEQCAAKAK8AiABQQJ0EN8ECyAAKALEAiIBBEAgACgCyAIgAUECdBDfBAsgACgC0AIiAQRAIAAoAtQCIAFBAnQQ3wQLIAAoAtwCIgEEQCAAKALgAiABQQJ0EN8ECyAAKALoAiIBBEAgACgC7AIgAUECdBDfBAsgACgC9AIiAQRAIAAoAvgCIAFBAnQQ3wQLIAAoAoADIgEEQCAAKAKEAyABQQJ0EN8ECyAAKAKMAyIBBEAgACgCkAMgAUECdBDfBAsgACgCmAMiAQRAIAAoApwDIAFBAnQQ3wQLIAAoAqQDIgEEQCAAKAKoAyABQQJ0EN8ECyAAKAKwAyIBBEAgACgCtAMgAUECdBDfBAsgACgCvAMiAQRAIAAoAsADIAFBAnQQ3wQLIAAoAsgDIgEEQCAAKALMAyABQQJ0EN8ECyAAKALUAyIBBEAgACgC2AMgAUECdBDfBAsLrggBCX9BDCEGIwBBEGsiBCQAAkAgASgCCCICQQxNBEACQCACRQRAQQghBQwBCyABKAIEIQlB0c7FAC0AABogAkEwbCIKIgFBCBDWBCIFRQ0CIAIhAQNAIAcgCkYNASAFIAdqIgMgByAJaiIIKQMANwMAIANBKGogCEEoaikDADcDACADQSBqIAhBIGopAwA3AwAgA0EYaiAIQRhqKQMANwMAIANBEGogCEEQaikDADcDACADQQhqIAhBCGopAwA3AwAgB0EwaiEHIAFBAWsiAQ0ACwsgBCACNgIMIAQgBTYCCCAEIAI2AgQgAkEMSQRAIARBBGogAkEMIAJrIgNBCEEwEIgDIAQoAgggBCgCDCIFQTBsaiEBIANBAk8EQCACQX9zQQxqIgJBB3EhBiADQQJrQQdPBEAgAkF4cSEHA0AgAUIANwMAIAFBKGpCADcDACABQSBqQgA3AwAgAUEYakIANwMAIAFBEGpCADcDACABQQhqQgA3AwAgAUEwakIANwMAIAFBOGpCADcDACABQUBrQgA3AwAgAUHIAGpCADcDACABQdAAakIANwMAIAFB2ABqQgA3AwAgAUHgAGpCADcDACABQegAakIANwMAIAFB8ABqQgA3AwAgAUH4AGpCADcDACABQYABakIANwMAIAFBiAFqQgA3AwAgAUG4AWpCADcDACABQbABakIANwMAIAFBqAFqQgA3AwAgAUGgAWpCADcDACABQZgBakIANwMAIAFBkAFqQgA3AwAgAUHAAWpCADcDACABQcgBakIANwMAIAFB0AFqQgA3AwAgAUHYAWpCADcDACABQeABakIANwMAIAFB6AFqQgA3AwAgAUHwAWpCADcDACABQfgBakIANwMAIAFBgAJqQgA3AwAgAUGIAmpCADcDACABQZACakIANwMAIAFBmAJqQgA3AwAgAUHIAmpCADcDACABQcACakIANwMAIAFBuAJqQgA3AwAgAUGwAmpCADcDACABQagCakIANwMAIAFBoAJqQgA3AwAgAUH4AmpCADcDACABQfACakIANwMAIAFB6AJqQgA3AwAgAUHgAmpCADcDACABQdgCakIANwMAIAFB0AJqQgA3AwAgAUGAA2ohASAHQQhrIgcNAAsLIAYEQANAIAFCADcDACABQShqQgA3AwAgAUEgakIANwMAIAFBGGpCADcDACABQRBqQgA3AwAgAUEIakIANwMAIAFBMGohASAGQQFrIgYNAAsLIAMgBWpBAWshBQsgAUIANwMAIAFBKGpCADcDACABQSBqQgA3AwAgAUEYakIANwMAIAFBEGpCADcDACABQQhqQgA3AwAgBUEBaiEGCyAAIAQpAgQ3AgAgAEEIaiAGNgIAIARBEGokAA8LQezGwgBBN0HMx8IAEP4DAAtBCCABQeiBwAAQyAQAC6kGAgp/An4jAEGQCWsiBCQAIARBCGoiByABEGUgBEGQB2ogBEEwaikDADcDACAEQYgHaiAEQShqKQMANwMAIARBgAdqIARBIGopAwA3AwAgBEH4BmogBEEYaikDADcDACAEQfAGaiAEQRBqKQMANwMAIARBoAdqIARBQGspAwA3AwAgBEGoB2ogBEHIAGopAwA3AwAgBEGwB2ogBEHQAGopAwA3AwAgBEG4B2ogBEHYAGopAwA3AwAgBEHAB2ogBEHgAGopAwA3AwAgBCAEKQMINwPoBiAEIAQpAzg3A5gHIARBqAhqIgUgByABED8gBEHoAGoiDSAFIAFB4ABqIggQjQEgBEHIBGoiBiAHIAcQPyAFIAEgARDVASAEQcgBaiILIAYgBRCNASAEQegDaiIJIAggCBDVASAGIAEgCxCNASAFIAkgBhDBAyAEKQO4CCEOIAQpA7AIIQ8gBCgCqAhBAUcEQCAEQZgDaiAEQcAIakHQAPwKAAAgBCAONwOQAyAEIA83A4gDIARBqAJqIgogBEGIA2oiDCAHEI0BIARB0AdqIARBsAJqKQMANwMAIARB2AdqIARBuAJqKQMANwMAIARB4AdqIARBwAJqKQMANwMAIARB6AdqIARByAJqKQMANwMAIARB8AdqIARB0AJqKQMANwMAIARBgAhqIARB4AJqKQMANwMAIARBiAhqIARB6AJqKQMANwMAIARBkAhqIARB8AJqKQMANwMAIARBmAhqIARB+AJqKQMANwMAIARBoAhqIARBgANqKQMANwMAIAQgBCkDqAI3A8gHIAQgBCkD2AI3A/gHIAUgCiABED8gDCAFIAgQjQEgBiAKIAoQPyAFIAEgCxDVASAJIAYgBRCNASAFIAEgCRCNASAGIAogBRA/IARBiAZqIAYgCBCNASAEQagFaiIBIAlB4AD8CgAAIAAgBEHoBmogDSACIAMQICAAQdABaiAEQcgHaiAMIAIgAxAgIABBEGogAUHAAfwKAAAgBEGQCWokAA8LIAQgDjcDsAggBCAPNwOoCEGgscIAQSsgBEGoCGpBpLrCAEGEu8IAEMoDAAu6BwECfyMAQeADayICJAAgAkEAQeAA/AsAAkACQCABIAIQpgQEQCABQeAAaiIDIAIQpgQNAQsgAkGIAWogAUEoaikDADcDACACQYABaiABQSBqKQMANwMAIAJB+ABqIAFBGGopAwA3AwAgAkHwAGogAUEQaikDADcDACACQegAaiABQQhqKQMANwMAIAJBmAFqIAFBOGopAwA3AwAgAkGgAWogAUFAaykDADcDACACQagBaiABQcgAaikDADcDACACQbABaiABQdAAaikDADcDACACQbgBaiABQdgAaikDADcDACACIAEpAwA3A2AgAiABKQMwNwOQASACQegBaiABQYgBaikDADcDACACQeABaiABQYABaikDADcDACACQdgBaiABQfgAaikDADcDACACQdABaiABQfAAaikDADcDACACQcgBaiABQegAaikDADcDACACQZgCaiABQbgBaikDADcDACACQZACaiABQbABaikDADcDACACQYgCaiABQagBaikDADcDACACQYACaiABQaABaikDADcDACACQfgBaiABQZgBaikDADcDACACIAEpA2A3A8ABIAIgASkDkAE3A/ABQQAiAUUEQCACIAJBwAFqQeAA/AoAAAsgAEHgAGogAhC0AiABDQEgACACQeAAakHgAPwKAAAMAQsgAkHIAmogAUEoaikDADcDACACQcACaiABQSBqKQMANwMAIAJBuAJqIAFBGGopAwA3AwAgAkGwAmogAUEQaikDADcDACACQagCaiABQQhqKQMANwMAIAJB2AJqIAFBOGopAwA3AwAgAkHgAmogAUFAaykDADcDACACQegCaiABQcgAaikDADcDACACQfACaiABQdAAaikDADcDACACQfgCaiABQdgAaikDADcDACACIAEpAwA3A6ACIAIgASkDMDcD0AIgAkGoA2ogA0EoaikDADcDACACQaADaiADQSBqKQMANwMAIAJBmANqIANBGGopAwA3AwAgAkGQA2ogA0EQaikDADcDACACQYgDaiADQQhqKQMANwMAIAJB2ANqIAFBuAFqKQMANwMAIAJB0ANqIAFBsAFqKQMANwMAIAJByANqIAFBqAFqKQMANwMAIAJBwANqIAFBoAFqKQMANwMAIAJBuANqIAFBmAFqKQMANwMAIAIgAykDADcDgAMgAiABKQOQATcDsANBACIBRQRAIAAgAkGgAmpB4AD8CgAACyABDQAgAEHgAGogAkGAA2pB4AD8CgAACyACQeADaiQAC6EIAgF/Cn4jAEGQAmsiAiQAIAJBsAFqIAEpAxgiBUKblK/D8rWo3oZ/fiIEQgBCbUIAEMkDIAJBoAFqIARCAEJ/QgAQyQMgAkGQAWogBEIAQv///////////wBCABDJAyACQYABaiACKQOgASIEIAEpAxB8IgcgAikDuAEgBSACKQOwASIDfCADVK18fCIFQpuUr8Pytajehn9+IgNCAEJtQgAQyQMgAkHwAGogA0IAQn9CABDJAyACIANCAEL///////////8AQgAQyQMgAkHgAGogAikDcCIDIAQgASkDCHwiBiAFIAdUrSACKQOoASIKIAQgB1atfHx8Igt8IgcgAikDiAEgBSACKQOAASIFfCAFVK18fCIFQpuUr8Pytajehn9+IghCAEJtQgAQyQMgAkHQAGogCEIAQn9CABDJAyACQRBqIAhCAEL///////////8AQgAQyQMgAkFAayACKQNQIgggAyACKQOQASIMIAEpAwB8IgkgBiALVq0gCiAEIAZWrXx8fCIEfCIGIAUgB1StIAIpA3giCiADIAdWrXx8fCILfCIHIAIpA2ggBSACKQNgIgV8IAVUrXx8IgVCm5Svw/K1qN6Gf34iA0IAQm1CABDJAyACQTBqIANCAEJ/QgAQyQMgAkEgaiADQgBC////////////AEIAEMkDAkACQCACKQMoIAIpAxggAikDCCAEIAlUrSACKQOYASAJIAxUrXx8IgkgAikDAHwiAyAJVK18IAMgBiALVq0gCiAEIAZWrXx8fCIEIANUrXwiBiACKQMQfCIDIAZUrXwgAyACKQNYIgYgBCAEIAh8IgRWrXwgBCAFIAdUrSAGIAcgCFStfHx8IgYgBFStfHwiBCADVK18IgMgAikDIHwiByADVK18IAcgAikDOCIIIAQgBCACKQMwIgN8IgRWrXwgBCAEIAggAyADIAZ8IgNWrXwgAyACKQNIIAUgAikDQCIFfCAFVK18fCIIIANUrXx8IgRWrXx8IgUgB1StfCIGQgBTDQACQCAGQv///////////wBaBEBCfyEDIAVCf1IEQCAEIQcgBSEDQv///////////wAhBgwECyAEQn9RDQEgBCEHQv///////////wAhBgwDCyAEIQcgBSEDDAILQn8hByAIQm1aDQBC////////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BEEBaw0EDAELIANBKGoiBSABQShqKQMANwMAIANBIGoiBiABQSBqKQMANwMAIANBGGoiByABQRhqKQMANwMAIANBEGoiCCABQRBqKQMANwMAIANBCGoiCSABQQhqKQMANwMAIANBOGoiCiABQThqKQMANwMAIANBQGsiCyABQUBrKQMANwMAIANByABqIgwgAUHIAGopAwA3AwAgA0HQAGoiDSABQdAAaikDADcDACADQdgAaiIOIAFB2ABqKQMANwMAIAMgASkDADcDACADIAEpAzA3AzAgBEEBcUUNAQwCCyADQYgBaiABQShqKQMANwMAIANBgAFqIAFBIGopAwA3AwAgA0H4AGogAUEYaikDADcDACADQfAAaiABQRBqKQMANwMAIANB6ABqIAFBCGopAwA3AwAgA0GYAWogAUE4aikDADcDACADQaABaiABQUBrKQMANwMAIANBqAFqIAFByABqKQMANwMAIANBsAFqIAFB0ABqKQMANwMAIANBuAFqIAFB2ABqKQMANwMAIAMgASkDADcDYCADIAEpAzA3A5ABIAAgA0HgAGpB4AD8CgAADAMLA0AgA0HgAGoiASADEF4gAyABQeAA/AoAACACQgKDIAJCAYghAlANAAsLIANB6AFqIAUpAwA3AwAgA0HgAWogBikDADcDACADQdgBaiAHKQMANwMAIANB0AFqIAgpAwA3AwAgA0HIAWogCSkDADcDACADQfgBaiAKKQMANwMAIANBgAJqIAspAwA3AwAgA0GIAmogDCkDADcDACADQZACaiANKQMANwMAIANBmAJqIA4pAwA3AwAgAyADKQMANwPAASADIAMpAzA3A/ABIAJCAVIEQANAIANB4ABqIgQgA0HAAWoiBRBeQQAiAUUEQCAFIARB4AD8CgAACwJAIAJCAoNQDQAgA0HgAGoiBCADIANBwAFqED8gAQ0AIAMgBEHgAPwKAAALIAJCBFQgAkIBiCECRQ0ACwsgACADQeAA/AoAAAwBCyAAQgA3AzAgAEEoakG4ocUAKQMANwMAIABBIGpBsKHFACkDADcDACAAQRhqQaihxQApAwA3AwAgAEEQakGgocUAKQMANwMAIABBCGpBmKHFACkDADcDACAAQZChxQApAwA3AwAgAEE4akIANwMAIABBQGtCADcDACAAQcgAakIANwMAIABB0ABq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QRBqEPkCIAMoAgxFDQEgBSADQQxqKAIANgIAIAMgAykCBDcDEEEAIQEMAgsgA0EYaiIFIAFBCGooAgA2AgAgAyABKQIANwMQIANBEGogAhDDAiADKAIUIQIgAygCECEGIAUoAgAiAQRAIABBAjoADCAAIAE2AgggACACNgIEIAAgBjYCAAwDCyAAQQhqQajMwgApAgA3AgAgAEGgzMIAKQIANwIAIAZFDQIgAiAGQQJ0EN8EDAILIAVBqMzCACgCADYCACADQaDMwgApAgA3AxBBASEBIAMoAgQiAkUNACADKAIIIAJBAnQQ3wQLIAAgAykDEDcCACAAQQA7AA0gACABOgAMIABBD2pBADoAACAAQQhqIANBGGooAgA2AgALIAhFDQEgByAIQQJ0EN8EDAELIAEoAgAiAEUNACABKAIEIABBAnQQ3wQLIANBIGokAAufBwIHfwh+IwBB0ABrIgIkACABKQM4IQwgASkDMCENIAEpAyghCSABKQMgIQ4gASkDGCEKIAEpAxAhDyABKQMIIQsgASkDACEQIAJByABqIgRB4PbAACgCADYCACACQdj2wAApAgA3A0AgCyAQhFBFBEBBASEBA0AgAigCQCABQQFrRgRAIAJBQGtB3PfAABClAwsgAigCRCADaiAQPgIAIBBC/////w9WIAtCAFIgC1AgC0IghiAQQiCIhCEQIANBBGohAyALQiCIIQsgAiABNgJIIAFBAWohARsNAAsLIAJBOGogBCgCACIBNgIAIAJBCGogATYCACACIAIpA0AiCzcDMCACIAs3AwBBACEDIARB4PbAACgCADYCACACQdj2wAApAgA3A0AgCiAPhFBFBEBBASEBA0AgAigCQCABQQFrRgRAIAJBQGtB3PfAABClAwsgAigCRCADaiAPPgIAIA9C/////w9WIApCAFIgClAgCkIghiAPQiCIhCEPIANBBGohAyAKQiCIIQogAiABNgJIIAFBAWohARsNAAsLIAJBOGoiBSACQcgAaiIEKAIAIgE2AgAgAkEUaiABNgIAIAIgAikDQCIKNwMwIAIgCjcCDEEAIQMgBEHg9sAAKAIANgIAIAJB2PbAACkCADcDQCAJIA6EUEUEQEEBIQEDQCACKAJAIAFBAWtGBEAgAkFAa0Hc98AAEKUDCyACKAJEIANqIA4+AgAgDkL/////D1Yg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AyAEIAEpAwh8IgYgBSAHVK0gAikDqAEiCiAEIAdWrXx8fCILfCIHIAIpA4gBIAUgAikDgAEiBXwgBVStfHwiBUKblK/D8rWo3oZ/fiIIQgBCbUIAEMkDIAJB0ABqIAhCAEJ/QgAQyQMgAkEQaiAIQgBC////////////AEIAEMkDIAJBQGsgAikDUCIIIAMgAikDkAEiDCABKQMAfCIJIAYgC1atIAogBCAGVq18fHwiBHwiBiAFIAdUrSACKQN4IgogAyAHVq18fHwiC3wiByACKQNoIAUgAikDYCIFfCAFVK18fCIFQpuUr8Pytajehn9+IgNCAEJtQgAQyQMgAkEwaiADQgBCf0IAEMkDIAJBIGogA0IAQv///////////wBCABDJAwJAAkAgAikDKCACKQMYIAIpAwggBCAJVK0gAikDmAEgCSAMVK18fCIJIAIpAwB8IgMgCVStfCADIAYgC1atIAogBCAGVq18fHwiBCADVK18IgYgAikDEHwiAyAGVK18IAMgAikDWCIGIAQgBCAIfCIEVq18IAQgBSAHVK0gBiAHIAhUrXx8fCIGIARUrXx8IgQgA1StfCIDIAIpAyB8IgcgA1StfCAHIAcgAikDOCIIIAQgBCACKQMwIgN8IgRWrXwgBCAEIAggAyADIAZ8IgNWrXwgAyACKQNIIAUgAikDQCIFfCAFVK18fCIGIANUrXx8IgRWrXx8IgdWrXwiCEIAWQRAIAhC////////////AFIgBkJtVHIgBCAHg0J/UnINAQsgBEIBfCIDIAZCbVStIgl9IQUgB0IBfCIKIARCf1IgAyAJVHKtIgR9IQMgCCAHQn9SIAQgClZyrX1C////////////AH0hCCAGQhN8IQYMAQsgByEDIAQhBQsgACAGNwMYIAAgBTcDECAAIAM3AwggACAINwMAIAJBwAFqJAAL4AsCCn4NfyMAQaABayINJAACQCABKAIMIhVBf0YEQCAAIAIpAgA3AgAgAEEIaiACQQhqKQIANwIAIAEoAgAiAEUNASABKAIEIABBMGwQ3wQMAQsgAigCDCIWQX9HBEAgASACIBUgFkgiDxsiEigCACEYIBIoAgQhFCACIAEgDxsiASgCACEXIAEoAgQhDyABKAIIIQ4CQAJAAkAgEigCCCIBBEAgAUEwbCEZIA1BBGohECANQfAAaiERQX8hEiAPIQIgFCEBA0AgESABKQIANwIAIBFBKGogAUEoaikCADcCACARQSBqIAFBIGopAgA3AgAgEUEYaiABQRhqKQIANwIAIBFBEGogAUEQaikCADcCACARQQhqIAFBCGopAgA3AgAgDUEIaiANQfQAaikCADcDACANQRBqIA1B/ABqKQIANwMAIA1BGGogDUGEAWopAgA3AwAgDUEgaiANQYwBaikCADcDACANQShqIA1BlAFqKQIANwMAIA1BMGogDUGcAWooAgA2AgAgDSANKQJsNwMAIA1BQGsgEEEIaikCADcDACANQcgAaiAQQRBqKQIANwMAIA1B0ABqIBBBGGopAgA3AwAgDUHYAGogEEEgaikCADcDACANQeAAaiAQQShqKQIANwMAIA0gECkCADcDOCAOIBJBAWoiEkYNAkKazf/Lo73EgBohBCANQThqIhMpAwgiAyACKQMIfCIGIANUIAYgEykDECIDIAIpAxB8IgogA1QgCiATKQMYIgMgAikDGHwiBSADVCAFIBMpAyAiAyACKQMgfCIHIANUIAcgEykDKCIDIAIpAyh8IgsgA1StfCIIIAdUcq18IgkgBVRyrXwiBSAKVHKtfCIHIAZUcq0gAikDACATKQMAfHwiDCEDAkACQAJAIAxCms3/y6O9xIAaUg0AQtfZrprk9umNywAhBCAHIgNC19mumuT26Y3LAFINAEK/pZScz/DSu+QAIQQgBSIDQr+llJzP8NK75ABSDQBCpOzDtY/UtJjnACEEIAkiA0Kk7MO1j9S0mOcAUg0AQv//z4rr///VHiEEIAgiA0L//8+K6///1R5SDQBCq9X+////v/+5fyEEIAsiA0Kr1f7///+//7l/UQ0BCyADIARaDQAgByEDIAUhBCAJIQYgCCEKDAELIAhC///Piuv//9UefSIGIAtCq9X+////v/+5f1StIgN9IQogCUKk7MO1j9S0mOcAfSIEIAhC///Piuv//9UeVCADIAZWcq0iA30hBiAFQr+llJzP8NK75AB9IgggCUKk7MO1j9S0mOcAVCADIARWcq0iA30hBCAHQtfZrprk9umNywB9IgkgBUK/pZScz/DSu+QAVCADIAhWcq0iBX0hAyAMIAdC19mumuT26Y3LAFQgBSAJVnKtfUKazf/Lo73EgBp9IQwgC0LVqoGAgIDAgMYAfCEL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EgshGQJAAkACQAJAIBJBAk8EQCAUQQdxIQQgDyAKa0F4TQ0BIAkhAQwCCyAJIQEgEg0CDAMLIBRBeHEhByAJIQEDQCABQgA3AwAgAUEoakIANwMAIAFBIGpCADcDACABQRhqQgA3AwAgAUEQakIANwMAIAFBCGpCADcDACABQTBqQgA3AwAgAUE4akIANwMAIAFBQGtCADcDACABQcgAakIANwMAIAFB0ABqQgA3AwAgAUHYAGpCADcDACABQeAAakIANwMAIAFB6ABqQgA3AwAgAUHwAGpCADcDACABQfgAakIANwMAIAFBgAFqQgA3AwAgAUGIAWpCADcDACABQbgBakIANwMAIAFBsAFqQgA3AwAgAUGoAWpCADcDACABQaABakIANwMAIAFBmAFqQgA3AwAgAUGQAWpCADcDACABQcABakIANwMAIAFByAFqQgA3AwAgAUHQAWpCADcDACABQdgBakIANwMAIAFB4AFqQgA3AwAgAUHoAWpCADcDACABQfABakIANwMAIAFB+AFqQgA3AwAgAUGAAmpCADcDACABQYgCakIANwMAIAFBkAJqQgA3AwAgAUGYAmpCADcDACABQcgCakIANwMAIAFBwAJqQgA3AwAgAUG4AmpCADcDACABQbACakIANwMAIAFBqAJqQgA3AwAgAUGgAmpCADcDACABQfgCakIANwMAIAFB8AJqQgA3AwAgAUHoAmpCADcDACABQeACakIANwMAIAFB2AJqQgA3AwAgAUHQAmpCADcDACABQYADaiEBIAdBCGsiBw0ACwsgBEUNAANAIAFCADcDACABQShqQgA3AwAgAUEgakIANwMAIAFBGGpCADcDACABQRBqQgA3AwAgAUEIakIANwMAIAFBMGohASAEQQFrIgQNAAsLIAFCADcDACABQShqQgA3AwAgAUEgakIANwMAIAFBGGpCADcDACABQRBqQgA3AwAgAUEIakIANwMACyAMKAIIIgEgD0sEQCADQZgCaiIEIAwoAgQgD0EwbGoiAUEIaikDADcDACADQaACaiIFIAFBEGopAwA3AwAgA0GoAmoiByABQRhqKQMANwMAIANBsAJqIgIgAUEgaikDADcDACADQbgCaiIGIAFBKGopAwA3AwAgAyABKQMANwOQAiABQfjDwgBBMBDxA0UNBCADQZADakIANwMAIANBiANqQgA3AwAgA0GAA2pCADcDACADQfgCakIANwMAIANCADcD8AIgA0IBNwOYAyADQcgDaiAGKQMANwMAIANBwANqIAIpAwA3AwAgA0G4A2ogBykDADcDACADQbADaiAFKQMANwMAIANBqANqIAQpAwA3AwAgAyADKQOQAjcDoAMgA0H4A2pBsMPCACkDADcDACADQfADakGow8IAKQMANwMAIANB6ANqQaDDwgApAwA3AwAgA0HgA2pBmMPCACkDADcDACADQdgDakGQw8IAKQMANwMAIANBiMPCACkDADcD0AMgA0GoBGpB0MTCACkDADcDACADQaAEakHIxMIAKQMANwMAIANBmARqQcDEwgApAwA3AwAgA0GQBGoiBEG4xMIAKQMANwMAIANBiARqQbDEwgApAwA3AwAgA0GoxMIAKQMANwOABCADQdgEakIANwMAIANB0ARqQgA3AwAgA0HIBGpCADcDACADQcAEaiIBQgA3AwAgA0G4BGpCADcDACADQgA3A7AEIANBoANqIANB8AJqQTAQ8QNFBEBCrarmqNvQz7yafyEfQqrHq5bZ/KPMESEqDAcLIANB0ANqIANB8AJqQTAQ8QNFBEAgASEEQgAhHwwHC0Kr1f7///+//7l/ISADQCADLQDIA0EBcUUEQANAIANBoANqEL8CIAMpA6gEIh9CAYNQRQRAIAMpA6AEIR4gAyAfQtWqgYCAgMCAxgB9IiI3A6gEIAMgHkL//8+K6///1R58IiAgHyAiVq18IiI3A6AEIAMgAykDmAQiIUKk7MO1j9S0mOcAfCIfIB4gIFYgICAiVnKtfCIgNwOYBCADIAMpA5AEIiJCv6WUnM/w0rvkAHwiHiAfICFUIB8gIFZyrXwiIDcDkAQgAyADKQOIBCIhQtfZrprk9umNywB8Ih8gHiAiVCAeICBWcq18Ih43A4gEIAMgAykDgAQgHiAfVCAfICFUcq18QprN/8ujvcSAGnw3A4AECyADQYAEahC/AiADLQDIA0EBcUUNAAsgAykD+AMhIAsgIKdBAXFFBEADQCADQdADahC/AiADKQPYBCIfQgGDUEUEQCADKQPQBCEeIAMgH0LVqoGAgIDAgMYAfSIiNwPYBCADIB5C///Piuv//9UefCIgIB8gIlatfCIiNwPQBCADIAMpA8gEIiFCpOzDtY/UtJjnAHwiHyAeICBWICAgIlZyrXwiIDcDyAQgAyADKQPABCIiQr+llJzP8NK75AB8Ih4gHyAhVCAfICBWcq18IiA3A8AEIAMgAykDuAQiIULX2a6a5PbpjcsAfCIfIB4gIlQgHiAgVnKtfCIeNwO4BCADIAMpA7AEIB4gH1QgHyAhVHKtfEKazf/Lo73EgBp8NwOwBAsgA0GwBGoQvwIgAykD+AMiIEIBg1ANAAsLIAMpA6gDIR4CQAJAIAMCfgJAAkACQAJ+IAMpA9ADIisgAykDoAMiLFIEQCADKQPgAyEiIAMpA9gDISQgKyEfICwhJyADKQOwAwwBCyADKQPgAyEiIAMpA7ADISUgHiADKQPYAyIkUgRAICQhHyAeIScgJQwBCyAiICVSBEAgHiEkICIhHyAlIScgJQwBCyADKQPoAyIfIAMpA7gDIidSBEAgHiEkICUiIgwBCyADKQPwAyIjIAMpA8ADIidSBEAgHiEkICMhHyAlIiIMAQsgICADKQPIAyInUQ0BIB4hJCAgIR8gJSIiCyEoIB8gJ1YgAykDsAQhJyADKQOABCEqIAMpA/ADISMgAykD6AMhHyADKQPIAyEhIAMpA8ADISYgAykDuAMhKUUEQCAiISUMAgsgAyAgICF9Ii03A/gDIAMgIyAmfSIlICAgIVStIiB9NwPwAyADIB8gKX0iISAjICZUICAgJVZyrSIgfTcD6AMgAyAiICh9IiMgHyApVCAgICFWcq0iH303A+ADIAMgJCAefSIgICIgKFQgHyAjVnKtIh99NwPYAyADICsgLH0gHiAkViAfICBWcq19NwPQAyADKQO4BCEkAkACQCAnICpSBEAgAykDkAQhHiADKQOIBCEfIAMpA8AEISEgJyEgICohIgwBCyADKQOQBCEeIAMpA8AEISEgAykDiAQiHyAkUgRAICQhICAfISIMAQsgHiAhUgRAICQhHyAhISAgHiEiDAELIAMpA8gEIiMgAykDmAQiIlIEQCAhIR4gJCEfICMhIAwBCyADKQPQBCIoIAMpA6AEIiJSBEAgISEeICQhHyAoISAMAQsgISEeICQhHyADKQPYBCIgISYgKCEpICMhJSAgIAMpA6gEIiJRDQELICAgIlQgAykDqAQhICADKQOgBCEoIAMpA5gEISMgAykD2AQhJiADKQPQBCEpIAMpA8gEISUNAwsgAyAmICB9NwPYBCADICkgKH0iIiAgICZWrSIgfTcD0AQgAyAlICN9IiYgKCApViAgICJWcq0iIH03A8gEIAMgISAefSIiICAgJlYgIyAlVnKtIiB9NwPABCADICQgH30iIyAgICJWIB4gIVZyrSIgfSIeNwO4BCAnICp9ICAgI1YgHyAkVnKtfQwDCyADKQOwBCEnIAMpA4AEISogHiEkICAhISAjISYgHyEpICUhKAsgAyAhICB9NwPIAyADICYgI30iIiAgICFWrSIhfTcDwAMgAyApIB99Ii0gISAiViAjICZWcq0iIn03A7gDIAMgKCAlfSIhICIgLVYgHyApVnKtIh99NwOwAyADIB4gJH0iIiAfICFWICUgKFZyrSIffTcDqAMgAyAsICt9IB4gJFQgHyAiVnKtfTcDoAMgAykDiAQhJAJAAkAgJyAqUgRAIAMpA8AEISMgAykDuAQhHiADKQOQBCEmICohHyAnISsMAQsgAykDwAQhIyADKQOQBCEmIAMpA7gEIh4gJFIEQCAkIR8gHiErDAELICMgJlIEQCAkIR4gJiEfICMhKwwBCyADKQOYBCIoIAMpA8gEIitSBEAgJiEjICQhHiAoIR8MAQsgAykDoAQiISADKQPQBCIrUgRAICYhIyAkIR4gISEfDAELICYhIyAkIR4gAykDqAQiHyEpICEhJSAoISIgHyADKQPYBCIrUQ0BCyAfICtUIAMpA9gEIR8gAykD0AQhISADKQPIBCEoIAMpA6gEISkgAykDoAQhJSADKQOYBCEiDQMLIAMgKSAffTcDqAQgAyAlICF9IisgHyApVq0iH303A6AEIAMgIiAofSIpIB8gK1YgISAlVnKtIh99NwOYBCADICYgI30iISAiIChUIB8gKVZyrSIffTcDkAQgAyAkIB59IiIgHyAhViAjICZWcq0iIX0iHzcDiAQgAyAqICd9ICEgIlYgHiAkVnKtfSIqNwOABAwDCyADQqvV/v///7//uX8gIH0iIiAmfCImNwPYBCADIClC///Piuv//9UeICh9IisgIEKr1f7///+//7l/Vq0iLH0iLnwiICAiICZWrXwiJjcD0AQgAyAlQqTsw7WP1LSY5wAgI30iKSArICxUIChC///Piuv//9UeVnKtIih9Iit8IiIgICAuVCAgICZWcq18IiU3A8gEIAMgIUK/pZScz/DSu+QAIB59IiYgKCApViAjQqTsw7WP1LSY5wBWcq0iI30iKHwiICAiICtUICIgJVZyrXwiITcDwAQgAyAkQtfZrprk9umNywAgH30iJSAjICZWIB5Cv6WUnM/w0rvkAFZyrSIjfSImfCIiICAgKFQgICAhVnKtfCIeNwO4BCAeICJUICIgJlRyrSAnICp9ICMgJVYgH0LX2a6a5PbpjcsAVnKtfXxCms3/y6O9xIAafAsiJzcDsAQgLSEgDAELIANCq9X+////v/+5fyAffSIrICl8Iik3A6gEIAMgJUL//8+K6///1R4gIX0iLCAfQqvV/v///7//uX9WrSItfSIufCIfICkgK1StfCIlNwOgBCADICJCpOzDtY/UtJjnACAofSIrICwgLVQgIUL//8+K6///1R5Wcq0iIX0iKXwiIiAfIC5UIB8gJVZyrXwiJTcDmAQgAyAmQr+llJzP8NK75AAgI30iLCAhICtWIChCpOzDtY/UtJjnAFZyrSIhfSIofCIfICIgKVQgIiAlVnKtfCIlNwOQBCADICRC19mumuT26Y3LACAefSImICEgLFYgI0K/pZScz/DSu+QAVnKtIiF9IiN8IiIgHyAoVCAfICVWcq18Ih83A4gEIAMgHyAiVCAiICNUcq0gKiAnfSAhICZWIB5C19mumuT26Y3LAFZyrX18QprN/8ujvcSAGnwiKjcDgAQLIANBoANqIANB8AJqIgVBMBDxA0UNByADQdADaiAFQTAQ8QMNAAsgASEEICchKiAeIR8MBgsgDyABQezHwgAQ2QMACyAEIAFB0MjCABDIBAALIAEgCUHogcAAEMgEAAsgA0EANgLABCADQQE2ArQEIANBuMjCADYCsAQgA0IENwK4BCADQbAEakHAyMIAEKgEAAsgA0ICNwOwBEGQycIAQSsgA0GwBGpBgMnCAEG8ycIAEMoDAAtB0c7FAC0AABpBMEEIENYEIgEEQCABQgA3AwAgDkKBgICAcDcCCCAOIAE2AgQgDkEBNgIAIAFBKGpCADcDACABQSBqQgA3AwAgAUEYakIANwMAIAFBEGpCADcDACABQQhqQgA3AwAgDiARKQIANwIQIA5BGGogEUEIaikCADcCACAERQ0CIAsgCRDfBAwCCwwFCyADQegCaiAEQRhqKQMAIh43AwAgA0HgAmogBEEQaikDACIgNwMAIANB2AJqIARBCGopAwAiIjcDACADQfgBaiAiNwMAIANBgAJqICA3AwAgA0GIAmogHjcDACADIAQpAwAiHjcD0AIgAyAfNwPoASADICo3A+ABIAMgHjcD8AEgD0F/cyEaAkADQAJAAkACQAJAAkACQAJAIAMoAtgBIgEgCksEQCAKIA9rIQIgAygC1AEgCkEwbGoiASkDACEoIAEpAwghKyABKQMQISkgASkDGCEsIAEpAyAhLSABKQMoIS5CACEfQSghAUIAISFCACEkQgAhHkIAISpCACEnA0AgA0HwAGogA0HgAWogAWopAwAiIEIAIC5CABDJAyADQYABaiAgQgAgLUIAEMkDIANBkAFqICBCACAsQgAQyQMgA0GgAWogIEIAIClCABDJAyADQbABaiAgQgAgK0IAEMkDIANBwAFqICBCACAoQgAQyQMgA0HgAGogAykDcCIlIB98IiBCAEIAQv3/8//P///5iX8QyQMgA0HQAGogAykDaCIfQgBCq9X+////v/+5f0IAEMkDIANBQGsgH0IAQv//z4rr///VHkIAEMkDIANBMGogH0IAQqTsw7WP1LSY5wBCABDJAyADQSBqIB9CAEK/pZScz/DSu+QAQgAQyQMgA0EQaiAfQgBC19mumuT26Y3LAEIAEMkDIAMgH0IAQprN/8ujvcSAGkIAEMkDIAMpAwggJyADKQPAASIvfCIiIAMpA7gBIAMpA7ABIiMgKnwiHyAjVK18IB8gHyADKQOoASADKQOgASIjIB58Ih4gI1StfCAeIB4gAykDmAEgJCADKQOQASIkfCIjICRUrXwgIyADKQOIASADKQOAASIkICF8IiEgJFStfCAhICEgAykDeCAgICVUrXx8IiRWrXx8IiEgI1StfHwiI1atfHwiHlatfHwiJSADKQMAfCImICVUrXwgJiADKQMYIB4gHiADKQMQfCInVq18ICcgJyADKQMoICMgIyADKQMgfCIeVq18IB4gHiADKQM4ICEgISADKQMwfCIjVq18ICMgIyADKQNIICQgAykDQCIffCIhIB9UrXwgISAhIAMpA1ggICADKQNQIh98IB9UrXx8Ih9WrXx8IiFWrXx8IiRWrXx8Ih5WrXx8IiogJlStfCAiICVWrSADKQPIASAiIC9UrXx8fCEnIAFBCGsiAUF4Rw0ACyAnQprN/8ujvcSAGlYNBiAnQprN/8ujvcSAGlENAQwCCyAKIAFB4MjCABDZAwALICpC19mumuT26Y3LAFYNBCAqQtfZrprk9umNywBSBEBCms3/y6O9xIAaIScMAQsgHkK/pZScz/DSu+QAVg0EQtfZrprk9umNywAhICAeQr+llJzP8NK75ABSBEBCms3/y6O9xIAaIScMAgsgJEKk7MO1j9S0mOcAVg0EQr+llJzP8NK75AAhIyAkQqTsw7WP1LSY5wBSBEBCms3/y6O9xIAaIScMAwsgIUL//8+K6///1R5WDQRCpOzDtY/UtJjnACEoICFC///Piuv//9UeUQ0DQprN/8ujvcSAGiEnICEhJgwFCyAqISALIB4hIwsgJCEoICEhJgwCC0L//8+K6///1R4hJiAfQqrV/v///7//uX9WDQBCms3/y6O9xIAaIScMAQsgIUL//8+K6///1R59IiAgH0Kr1f7///+//7l/VK0iIn0hJiAkQqTsw7WP1LSY5wB9IiMgIUL//8+K6///1R5UICAgIlRyrSIgfSEoIB5Cv6WUnM/w0rvkAH0iIiAkQqTsw7WP1LSY5wBUICAgI1ZyrSIgfSEjICpC19mumuT26Y3LAH0iISAeQr+llJzP8NK75ABUICAgIlZyrSIefSEgICcgKkLX2a6a5PbpjcsAVCAeICFWcq19QprN/8ujvcSAGn0hJyAfQtWqgYCAgMCAxgB8IR8LIAMgHzcD2AQgAyAmNwPQBCADICg3A8gEIAMgIzcDwAQgAyAgNwO4BCADICc3A7AEAkACQAJAAkACQAJAIAIgEkkEQCADQbgEaikDACEfIANBwARqKQMAIR4gA0HIBGopAwAhICADQdAEaikDACEiIANB2ARqKQMAISEgCSACQTBsaiIBIAMpA7AENwMAIAFBKGogITcDACABQSBqICI3AwAgAUEYaiAgNwMAIAFBEGogHjcDACABQQhqIB83AwAgA0GABGohByMAQTBrIgUkACAFIANBsARqIgE2AggCQAJAAkAgAUH4w8IAQTAQ8QMEQCAMKAIMIg1Bf0cEQCAMKAIIIgZBMGwhASAMKAIEIQtBCCEEIAYEQEHRzsUALQAAGiABQQgQ1gQiBEUNBAsgBUEUaiIQQQA2AgAgBSAENgIQIAUgBjYCDCAFIAEgC2o2AhwgBSALNgIYIAUgBUEIajYCICAFIAQ2AiwgBUEANgIoIAUgEDYCJCMAQdABayIBJAAgBUEkaiIEKAIEIQYgBCgCACAFQRhqIgsoAgAiEyALKAIEIhZHBEAgBCgCCCEbIAsoAgghHCAWIBNrQTBuIRZBACELA0AgEyALQTBsaiIEKQMAIScgBCkDCCEoIAQpAxAhKiAEKQMYISsgBCkDICEsIAQpAyghLSAcKAIAIR1BKCEEQgAhKUIAISRCACEhQgAhIEIAIR5CACEmA0AgAUHwAGogBCAdaikDACIfQgAgLUIAEMkDIAFBgAFqIB9CACAsQgAQyQMgAUGQAWogH0IAICtCABDJAyABQaABaiAfQgAgKkIAEMkDIAFBsAFqIB9CACAoQgAQyQMgAUHAAWogH0IAICdCABDJAyABQeAAaiABKQNwIiUgJnwiIkIAQgBC/f/z/8////mJfxDJAyABQdAAaiABKQNoIh9CAEKr1f7///+//7l/QgAQyQMgAUFAayAfQgBC///Piuv//9UeQgAQyQMgAUEwaiAfQgBCpOzDtY/UtJjnAEIAEMkDIAFBIGogH0IAQr+llJzP8NK75ABCABDJAyABQRBqIB9CAELX2a6a5PbpjcsAQgAQyQMgASAfQgBCms3/y6O9xIAaQgAQyQMgASkDCCApIAEpA8ABIi58Ih8gASkDuAEgJCABKQOwASImfCIjICZUrXwgIyABKQOoASABKQOgASIkICF8IiEgJFStfCAhIAEpA5gBIAEpA5ABIiQgIHwiICAkVK18ICAgASkDiAEgASkDgAEiJCAefCIeICRUrXwgHiABKQN4ICIgJVStfHwiJiAeVK18fCIeICBUrXx8IiAgIVStfHwiISAjVK18fCIjIAEpAwB8IiUgI1StfCAlICUgASkDGCAhICEgASkDEHwiJFatfCAkICQgASkDKCAgICAgASkDIHwiIVatfCAhICEgASkDOCAeIB4gASkDMHwiIFatfCAgICAgASkDSCAmIAEpA0AiKXwiHiApVK18IB4gASkDWCAiIAEpA1AiJnwgJlStfHwiJiAeVK18fCIeVq18fCIgVq18fCIhVq18fCIkVq18IB8gI1atIAEpA8gBIB8gLlStfHx8ISkgBEEIayIEQXhHDQALAkACQCApQprN/8ujvcSAGlYNACApQprN/8ujvcSAGlIEQCAeIR8gICEiICEhIyAkISUMAgsgJELX2a6a5PbpjcsAVg0AAkAgJELX2a6a5PbpjcsAUgRAIB4hHyAgISIgISEjICQhJQwBCyAhQr+llJzP8NK75ABWDQFC19mumuT26Y3LACElICFCv6WUnM/w0rvkAFIEQCAeIR8gICEiICEhIwwBCyAgQqTsw7WP1LSY5wBWDQFCv6WUnM/w0rvkACEjICBCpOzDtY/UtJjnAFIEQCAeIR8gICEiDAELIB5C///Piuv//9UeVg0BQqTsw7WP1LSY5wAhIiAeQv//z4rr///VHlIEQCAeIR8MAQtC///Piuv//9UeIR8gJkKq1f7///+//7l/Vg0BC0Kazf/Lo73EgBohKQwBCyAeQv//z4rr///VHn0iIiAmQqvV/v///7//uX9UrSIjfSEfICBCpOzDtY/UtJjnAH0iJSAeQv//z4rr///VHlQgIiAjVHKtIh59ISIgIUK/pZScz/DSu+QAfSInICBCpOzDtY/UtJjnAFQgHiAlVnKtIh59ISMgJELX2a6a5PbpjcsAfSIgICFCv6WUnM/w0rvkAFQgHiAnVnKtIh59ISUgKSAkQtfZrprk9umNywBUIB4gIFZyrX1Cms3/y6O9xIAafSEpICZC1aqBgICAwIDGAHwhJgsgGyAGQTBsaiIEICY3AyggBCAfNwMgIAQgIjcDGCAEICM3AxAgBCAlNwMIIAQgKTcDACAGQQFqIQYgC0EBaiILIBZHDQALCyAGNgIAIAFB0AFqJAAgB0EIaiAQKAIANgIAIAcgBSkCDDcCAAwCCwtB0c7FAC0AABpBMEEIENYEIgFFDRAgAUIANwMAIAdBATYCCCAHIAE2AgQgB0EBNgIAIAFBKGpCADcDACABQSBqQgA3AwAgAUEYakIANwMAIAFBEGpCADcDACABQQhqQgA3AwBBfyENCyAHIA02AgwgBUEwaiQADAELQQggAUG0ysIAEMgEAAsgAygCjAQiE0F/RgRAQdHOxQAtAAAaQTBBCBDWBCIBRQ0OIAFCADcDACABQShqQgA3AwAgAUEgakIANwMAIAFBGGpCADcDACABQRBqQgA3AwAgAUEIakIANwMAIANCgYCAgHA3A8gCIAMgATYCxAIgA0EBNgLAAgwGCyACrUIwfiIfpyEBQQAhBCAfQiCIpyABQfj///8HS3INAQJ/IAFFBEBBCCEFQQAMAQtB0c7FAC0AABpBCCEEIAFBCBDWBCIFRQ0CIAILIRAgAkECSQ0CIAogGmoiB0EHcSEEIAUhASAKIA9rQQJrQQdPBEAgB0F4cSEKA0AgAUIANwMAIAFBKGpCADcDACABQSBqQgA3AwAgAUEYakIANwMAIAFBEGpCADcDACABQQhqQgA3AwAgAUEwakIANwMAIAFBOGpCADcDACABQUBrQgA3AwAgAUHIAGpCADcDACABQdAAakIANwMAIAFB2ABqQgA3AwAgAUHgAGpCADcDACABQegAakIANwMAIAFB8ABqQgA3AwAgAUH4AGpCADcDACABQYABakIANwMAIAFBiAFqQgA3AwAgAUG4AWpCADcDACABQbABakIANwMAIAFBqAFqQgA3AwAgAUGgAWpCADcDACABQZgBakIANwMAIAFBkAFqQgA3AwAgAUHAAWpCADcDACABQcgBakIANwMAIAFB0AFqQgA3AwAgAUHYAWpCADcDACABQeABakIANwMAIAFB6AFqQgA3AwAgAUHwAWpCADcDACABQfgBakIANwMAIAFBgAJqQgA3AwAgAUGIAmpCADcDACABQZACakIANwMAIAFBmAJqQgA3AwAgAUHIAmpCADcDACABQcACakIANwMAIAFBuAJqQgA3AwAgAUGwAmpCADcDACABQagCakIANwMAIAFBoAJqQgA3AwAgAUH4AmpCADcDACABQfACakIANwMAIAFB6AJqQgA3AwAgAUHgAmpCADcDACABQdgCakIANwMAIAFB0AJqQgA3AwAgAUGAA2ohASAKQQhrIgoNAAsLIARFDQMDQCABQgA3AwAgAUEoakIANwMAIAFBIGpCADcDACABQRhqQgA3AwAgAUEQakIANwMAIAFBCGpCADcDACABQTBqIQEgBEEBayIEDQALDAMLIAIgEkHwyMIAENkDAAsgBCABQczJwgAQyAQACyAFIQEgAkUNAQsgAUIANwMAIAFBKGpCADcDACABQSBqQgA3AwAgAUEYakIANwMAIAFBEGpCADcDACABQQhqQgA3AwALIAMgAjYC2AMgAyAFNgLUAyADIBA2AtADIAMoAogEIgatQjB+Ih+nIQRBACEBIB9CIIinIARB+P///wdLcg0BAkAgBEUEQEEIIQsMAQsgAygChAQhFUHRzsUALQAAGkEIIQEgBEEIENYEIgtF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QgAhCkIAIQlCACELQgAhCEEAIRkjAEGABWsiGCQAAkACQAJAAkACQAJAIBwiICgCDCInQX9HBEAgKCgCCCIaQQV0IRwCQCAaQf///z9LIBxB+P///wdLcg0AICgoAgwhHiAoKAIEISwCQCAcRQRAQQghIQwBC0HRzsUALQAAGkEIIQEgHEEIENYEIiFFDQEgGkUNAEEAIQEgGiEbA0AgASAcRg0BIAEgIWoiHyABICxqIiYpAwA3AwAgH0EYaiAmQRhqKQMANwMAIB9BEGogJkEQaikDADcDACAfQQhqICZBCGopAwA3AwAgAUEgaiEBIBtBAWsiGw0ACwsgGCAaNgKIBCAYICE2AoQEIBggGjYCgAQgGCAeNgKMBCAeICdIDQUgHiAnayIrQQFqIiZBBXQhAQJAICZB////P0sgAUH4////B0tyDQACfyABRQRAQQghG0EADAELQdHOxQAtAAAaQQghGSABQQgQ1gQiG0UNASAmCyEwAkACQAJAAkAgJkECTwRAICtBB3EhGSAnIB5rQXhNDQEgGyEBDAILIBshASAmDQIMAwsgK0F4cSEcIBshAQNAIAFCADcDACABQRhqQgA3AwAgAUEQakIANwMAIAFBCGpCADcDACABQSBqQgA3AwAgAUEoakIANwMAIAFBMGpCADcDACABQThqQgA3AwAgAUFAa0IANwMAIAFByABqQgA3AwAgAUHQAGpCADcDACABQdgAakIANwMAIAFB4ABqQgA3AwAgAUHoAGpCADcDACABQfAAakIANwMAIAFB+ABqQgA3AwAgAUGYAWpCADcDACABQZABakIANwMAIAFBiAFqQgA3AwAgAUGAAWpCADcDACABQbgBakIANwMAIAFBsAFqQgA3AwAgAUGoAWpCADcDACABQaABakIANwMAIAFBwAFqQgA3AwAgAUHIAWpCADcDACABQdABakIANwMAIAFB2AFqQgA3AwAgAUHgAWpCADcDACABQegBakIANwMAIAFB8AFqQgA3AwAgAUH4AWpCADcDACABQYACaiEBIBxBCGsiHA0ACwsgGUUNAANAIAFCADcDACABQRhqQgA3AwAgAUEQakIANwMAIAFBCGpCADcDACABQSBqIQEgGUEBayIZDQALCyABQgA3AwAgAUEYakIANwMAIAFBEGpCADcDACABQQhqQgA3AwALICAoAggiASAnSwRAICAoAgQgJ0EFdGoiAUHYw8IAQSAQ8QNFDQYgGEGwBGpCADcDACAYQagEaiIxQgA3AwAgGEIANwOgBCAYQgE3A7gEIBhB2ARqIAFBGGopAwA3AwAgGEHQBGogAUEQaikDADcDACAYQcgEaiIyIAFBCGopAwA3AwAgGCABKQMANwPABCAYQfgEaiIzQdDDwgApAwA3AwAgGEHwBGoiNEHIw8IAKQMANwMAIBhB6ARqIjVBwMPCACkDADcDACAYQbjDwgApAwA3A+AEAkAgGEHABGogGEGgBGpBIBDxA0UEQEKf6uDVnO6n7AYhE0KJ9auctYu/lnMhDUL7g5SinaLG87V/IQ5C9v+F0vDfx9XHACEQDAELQp/q4NWc7qfsBiETQvb/hdLw38fVxwAhEEL7g5SinaLG87V/IQ5CifWrnLWLv5ZzIQ0gGCkD2AQhBCAYKQPABCEPIBgpA8gEIQIgGCkD0AQhDELH+vPD7YKjkDwhA0KpwMaJrs6TsjAhFULdsIWM6LaRqLh/IQVCjZXHw5bS2sCXfyESA0AgGEHgBGogGEGgBGpBIBDxA0UEQCAJIRAgCiEOIAghDSALIRMMAgsgBKdBAXFFBEADQCAMQj+GIARCAYiEIQQCQCANQgGDUARAIBAhBiAOIQcgDSERDAELIBMgECAQQqPP+vOXye7XxwB9IhRWIBQgFCAOQvPquLzpraW/6AB9IgYgDlQgBiAGIA1Cx/rzw+2Co5A8fCIRIA1UrXwiB1ZyrXwiBlZyrXxCqcDGia7Ok7IwfCETCyAPQj+GIAJCP4YgDEIBiIQhDCAPQgGIIQ8gE0I/hiAGQgGIhCEQIAZCP4YgB0IBiIQhDiAHQj+GIBFCAYiEIQ0gE0IBiCETIAJCAYiEIQIgBEIBg1ANAAsgGCAMNwPQBCAYIAQ3A9gEIBggAjcDyAQgGCAPNwPABAsgA6dBAXFFBEADQCASQj+GIANCAYiEIQMCQCAIQgGDUARAIAkhBiAKIQcgCCERDAELIAsgCSAJQqPP+vOXye7XxwB9IhRWIBQgFCAKQvPquLzpraW/6AB9IgYgClQgBiAGIAhCx/rzw+2Co5A8fCIRIAhUrXwiB1ZyrXwiBlZyrXxCqcDGia7Ok7IwfCELCyAVQj+GIAVCP4YgEkIBiIQhEiAVQgGIIRUgC0I/hiAGQgGIhCEJIAZCP4YgB0IBiIQhCiAHQj+GIBFCAYiEIQggC0IBiCELIAVCAYiEIQUgA0IBg1ANAAsgGCASNwPwBCAYIAM3A/gEIBggBTcD6AQgGCAVNwPgBAsCQAJAAkACQAJAIA8iByAVIgZSDQAgAiEHIAIgBSIGUg0AIAwiByASIgZSDQAgBCIHIAMiBlENAQsgBiAHWA0AIBggAyAEfSIGNwP4BCAYIBIgDH0iESADIARUrSIDfSIHNwPwBCAYIAUgAn0iFCADIBFWIAwgElZyrSIDfSIRNwPoBCAYIBUgD30gAiAFViADIBRWcq19IhU3A+AEAkACQCATIgUgCyIDUg0AIBAiBSAJIgNSDQAgDiIFIAoiA1INACAIIgMgDSIFUQ0BCyADIAVUDQILIAsgE30gCSAQfSIUIAogDn0iFiAIIA1UrSIXVCAKIA5Ucq0iClQgCSAQVHKtfSELIAggDX0hCCAHIRIgESEFIAYhAyAUIAp9IQkgFiAXfSEKDAMLIBggBCADfSIGNwPYBCAYIAwgEn0iESADIARWrSIEfSIHNwPQBCAYIAIgBX0iFCAMIBJUIAQgEVZyrSIEfSIRNwPIBCAYIA8gFX0gAiAFVCAEIBRWcq19Ig83A8AEAkACQCATIgQgCyICUg0AIBAiBCAJIgJSDQAgDiIEIAoiAlINACAIIgIgDSIEUQ0BCyACIARWDQILIBMgC30gECAJfSIUIA4gCn0iFiAIIA1WrSIXVCAKIA5Wcq0iDlQgCSAQVnKtfSETIA0gCH0hDSAHIQwgESECIAYhBCAUIA59IRAgFiAXfSEODAILIAtC3bCFjOi2kai4fyAQfSIDQo2Vx8OW0trAl38gDn0iBSANQsf688PtgqOQPFatIgtUIA5CjZXHw5bS2sCXf1ZyrSISVCAQQt2whYzotpGouH9Wcq0gE3x9IAkgAyASfSISfCIDIBJUIAMgAyAFIAt9IgkgCnwiBSAJVCAFQsf688PtgqOQPCANfSIJIAh8IgggCVStfCIKIAVUcq18IglWcq18QqnAxomuzpOyMHwhCyAHIRIgESEFIAYhAwwBCyATIAt9Qt2whYzotpGouH8gCX0iAkKNlcfDltLawJd/IAp9IgQgCELH+vPD7YKjkDxWrSITVCAKQo2Vx8OW0trAl39Wcq0iDFQgCULdsIWM6LaRqLh/VnKtfSAQIAIgDH0iDHwiAiAMVCACIAIgDiAEIBN9IhB8IgQgEFQgBELH+vPD7YKjkDwgCH0iDiANfCINIA5UrXwiDiAEVHKtfCIQVnKtfEKpwMaJrs6TsjB8IRMgByEMIBEhAiAGIQQLIBhBwARqIBhBoARqQSAQ8QMNAAsLICdBf3MhNgNAAkACQCAYKAKIBCIBIB5LBEAgGEHAA2ogGCgChAQgHkEFdGoiASkDGCIDQgAgDUIAEMkDIBhBwAJqIAEpAxAiAkIAIA1CABDJAyAYQcABaiABKQMIIgRCACANQgAQyQMgGEFAayABKQMAIgVCACANQgAQyQMgGEGwA2ogGCkDwAMiCEKJx5mkrvCB6Yd/fiIGQgBCx/rzw+2Co5A8QgAQyQMgGEGgA2ogBkIAQo2Vx8OW0trAl39CABDJAyAYQZADaiAGQgBC3bCFjOi2kai4f0IAEMkDIBhBgANqIAZCAEKpwMaJrs6TsjBCABDJAyAYQdADaiADQgAgDkIAEMkDIBhB0AJqIAJCACAOQgAQyQMgGEHQAWogBEIAIA5CABDJAyAYQdAAaiAFQgAgDkIAEMkDIBhBsAJqIBgpA6ADIgwgGCkDyAMiCyAYKQPAAnwiD3wiByAYKQO4AyAIIBgpA7ADIgZ8IAZUrXx8IgggGCkD0AN8IglCiceZpK7wgemHf34iBkIAQsf688PtgqOQPEIAEMkDIBhBoAJqIAZCAEKNlcfDltLawJd/QgAQyQMgGEGQAmogBkIAQt2whYzotpGouH9CABDJAyAYQYACaiAGQgBCqcDGia7Ok7IwQgAQyQMgGEHgA2ogA0IAIBBCABDJAyAYQeACaiACQgAgEEIAEMkDIBhB4AFqIARCACAQQgAQyQMgGEHgAGogBUIAIBBCABDJAyAYQbABaiAYKQPYAyAIIAlWrXwiEiAYKQPQAnwiCiAYKQPIAiALIA9WrXwiESAYKQPAAXwiCyAYKQOQA3wiDyAHIAhWrSAYKQOoAyAHIAxUrXx8fCIVfCIHIBgpA6ACfCIIIBgpA7gCIAkgGCkDsAIiBnwgBlStfHwiCSAYKQPgA3wiDEKJx5mkrvCB6Yd/fiIGQgBCx/rzw+2Co5A8QgAQyQMgGEGgAWogBkIAQo2Vx8OW0trAl39CABDJAyAYQZABaiAGQgBC3bCFjOi2kai4f0IAEMkDIBhBgAFqIAZCAEKpwMaJrs6TsjBCABDJAyAYQfADaiADQgAgE0IAEMkDIBhB8AJqIAJCACATQgAQyQMgGEHwAWogBEIAIBNCABDJAyAYQfAAaiAFQgAgE0IAEMkDIBhBMGogGCkD6AMgCSAMVq18IhQgGCkD4AJ8IgIgGCkDyAEgCyARVK18IhEgGCkDQHwiBCAYKQOAA3wiBSAPIBVWrSAYKQOYAyALIA9WrXx8fCIGIBgpA9ABfCILIAcgClStIBgpA9gCIAogElStfHx8IgogGCkDkAJ8Ig8gCCAJVq0gGCkDqAIgByAIVq18fHwiEnwiByAYKQOgAXwiCCAYKQO4ASAMIBgpA7ABIgN8IANUrXx8IgkgGCkD8AN8IgxCiceZpK7wgemHf34iA0IAQsf688PtgqOQPEIAEMkDIBhBIGogA0IAQo2Vx8OW0trAl39CABDJAyAYQRBqIANCAELdsIWM6LaRqLh/QgAQyQMgGCADQgBCqcDGia7Ok7IwQgAQyQMCQCAYKQMIIBgpA4gBIBgpA4gCIAUgBlatIBgpA4gDIAQgBVatfHwgGCkDSCAEIBFUrXx8IhEgGCkDUHwiAyAKIAtUrSAYKQPYASAGIAtWrXx8fCIEIBgpA4ACfCIFIARUrXwgBSAFIA8gElatIBgpA5gCIAogD1atfHx8IgZWrXwgAyAEVq0gGCkDWCADIBFUrXx8fCIKIBgpA2B8IgMgGCkD6AEgBiAGIBgpA+ABfCIEVq18IAQgBCACIAdWrSAYKQPoAiACIBRUrXx8fCICVq18fCIEIBgpA4ABfCIFIARUrXwgBSAYKQOYASACIAIgGCkDkAF8IgZWrXwgBiAGIAggCVatIBgpA6gBIAcgCFatfHx8IgdWrXx8IgIgBVStfCADIARWrSAYKQNoIAMgClStfHx8IgggGCkDcHwiAyAYKQP4ASACIAIgGCkD8AF8IgRWrXwgBCAEIBgpA/gCIBgpA/gDIAkgDFatfCIFIBgpA/ACfCICIAVUrXwgAiACIAd8IgVWrXx8IgJWrXx8IgYgGCkDAHwiBCAGVK18IAQgBCAYKQMYIAIgAiAYKQMQfCIHVq18IAcgByAYKQMoIAUgBSAYKQMgfCICVq18IAIgGCkDOCAYKQMwIgUgDHwgBVStfHwiCyACVK18fCICVq18fCIEVq18IAMgBlatIBgpA3ggAyAIVK18fHwiCEKpwMaJrs6TsjBWDQAgCEKpwMaJrs6TsjBSDQIgBELdsIWM6LaRqLh/Vg0AIARC3bCFjOi2kai4f1IEQEKpwMaJrs6TsjAhCAwDCyACQo2Vx8OW0trAl39WDQBC3bCFjOi2kai4fyEDIAJCjZXHw5bS2sCXf1IEQEKpwMaJrs6TsjAhCCACIQ8MBAtCjZXHw5bS2sCXfyEPIAtCx/rzw+2Co5A8Wg0AQqnAxomuzpOyMCEIDAMLIAJC8+q4vOmtpb/oAHwiAyALQsf688PtgqOQPFStIgV9IQ8gBEKjz/rzl8nu18cAfCIGIAJCjZXHw5bS2sCXf1QgAyAFVHKtIgJ9IQMgCCAEQt2whYzotpGouH9UIAIgBlZyrX1CqcDGia7Ok7IwfSEIIAtCx/rzw+2Co5A8fSELDAILIB4gAUHgyMIAENkDAAsgBCEDIAIhDwsgGCALNwP4BCAYIA83A/AEIBggAzcD6AQgGCAINwPgBAJAAkACQAJAAkAgJiAeICdrIh9LBEAgNSkDACEDIDQpAwAhAiAzKQMAIQQgGyAfQQV0IiVqIgEgGCkD4AQ3AwAgAUEYaiAENwMAIAFBEGogAjcDACABQQhqIAM3AwAgGEHABGohIiMAQTBrIhkkACAZIBhB4ARqIgE2AggCQAJAAkAgAUHYw8IAQSAQ8QMEQCAgKAIMIipBf0cEQCAgKAIIIhxBBXQhASAgKAIEISFBCCEaIBwEQEHRzsUALQAAGiABQQgQ1gQiGkUNBAsgGUEUaiItQQA2AgAgGSAaNgIQIBkgHDYCDCAZIAEgIWo2AhwgGSAhNgIYIBkgGUEIajYCICAZIBo2AiwgGUEANgIoIBkgLTYCJCMAQYAEayIBJAAgGUEkaiIaKAIEISEgGigCACAZQRhqIhwoAgAiLiAcKAIEIiNHBEAgHCgCCCE4IBooAgggIUEFdGohOSAhICMgLmtBBXYiHGohIUEAIRoDQCABQcADaiAaIC5qIiNBGGopAwAiA0IAIDgoAgAiKSkDGCICQgAQyQMgAUHQA2ogI0EQaikDACIEQgAgAkIAEMkDIAFB4ANqICNBCGopAwAiBUIAIAJCABDJAyABQfADaiAjKQMAIgZCACACQgAQyQMgAUGwA2ogASkDwAMiCEKJx5mkrvCB6Yd/fiICQgBCx/rzw+2Co5A8QgAQyQMgAUGgA2ogAkIAQo2Vx8OW0trAl39CABDJAyABQZADaiACQgBC3bCFjOi2kai4f0IAEMkDIAFBgANqIAJCAEKpwMaJrs6TsjBCABDJAyABQcACaiApKQMQIgJCACADQgAQyQMgAUHQAmogAkIAIARCABDJAyABQeACaiACQgAgBUIAEMkDIAFB8AJqIAJCACAGQgAQyQMgAUGwAmogASkDoAMiDCABKQPIAyILIAEpA9ADfCIPfCIHIAEpA7gDIAggASkDsAMiAnwgAlStfHwiCCABKQPAAnwiCUKJx5mkrvCB6Yd/fiICQgBCx/rzw+2Co5A8QgAQyQMgAUGgAmogAkIAQo2Vx8OW0trAl39CABDJAyABQZACaiACQgBC3bCFjOi2kai4f0IAEMkDIAFBgAJqIAJCAEKpwMaJrs6TsjBCABDJAyABQcABaiApKQMIIgJCACADQgAQyQMgAUHQAWogAkIAIARCABDJAyABQeABaiACQgAgBUIAEMkDIAFB8AFqIAJCACAGQgAQyQMgAUGwAWogASkDyAIgCCAJVq18IhIgASkD0AJ8IgogASkD2AMgCyAPVq18IhEgASkD4AN8IgsgASkDkAN8Ig8gByAIVq0gASkDqAMgByAMVK18fHwiFXwiByABKQOgAnwiCCABKQO4AiAJIAEpA7ACIgJ8IAJUrXx8IgkgASkDwAF8IgxCiceZpK7wgemHf34iAkIAQsf688PtgqOQPEIAEMkDIAFBoAFqIAJCAEKNlcfDltLawJd/QgAQyQMgAUGQAWogAkIAQt2whYzotpGouH9CABDJAyABQYABaiACQgBCqcDGia7Ok7IwQgAQyQMgAUFAayApKQMAIgJCACADQgAQyQMgAUHQAGogAkIAIARCABDJAyABQeAAaiACQgAgBUIAEMkDIAFB8ABqIAJCACAGQgAQyQMgAUEwaiABKQPIASAJIAxWrXwiFCABKQPQAXwiAiABKQPoAyALIBFUrXwiESABKQPwA3wiBCABKQOAA3wiBSAPIBVWrSABKQOYAyALIA9WrXx8fCIGIAEpA+ACfCILIAcgClStIAEpA9gCIAogElStfHx8IgogASkDkAJ8Ig8gCCAJVq0gASkDqAIgByAIVq18fHwiEnwiByABKQOgAXwiCCABKQO4ASAMIAEpA7ABIgN8IANUrXx8IgkgASkDQHwiDEKJx5mkrvCB6Yd/fiIDQgBCx/rzw+2Co5A8QgAQyQMgAUEgaiADQgBCjZXHw5bS2sCXf0IAEMkDIAFBEGogA0IAQt2whYzotpGouH9CABDJAyABIANCAEKpwMaJrs6TsjBCABDJAwJAAkAgASkDCCABKQOIASABKQOIAiAFIAZWrSABKQOIAyAEIAVWrXx8IAEpA/gDIAQgEVStfHwiESABKQPwAnwiAyAKIAtUrSABKQPoAiAGIAtWrXx8fCIEIAEpA4ACfCIFIARUrXwgBSAFIA8gElatIAEpA5gCIAogD1atfHx8IgZWrXwgAyAEVq0gASkD+AIgAyARVK18fHwiCiABKQPwAXwiAyABKQPoASAGIAYgASkD4AF8IgRWrXwgBCACIAdWrSABKQPYASACIBRUrXx8fCICIARUrXx8IgQgASkDgAF8IgUgBFStfCAFIAEpA5gBIAIgAiABKQOQAXwiBlatfCAGIAYgCCAJVq0gASkDqAEgByAIVq18fHwiB1atfHwiAiAFVK18IAMgBFatIAEpA/gBIAMgClStfHx8IgggASkDcHwiAyABKQNoIAIgAiABKQNgfCICVq18IAIgAiABKQNYIAEpA0ggCSAMVq18IgUgASkDUHwiBCAFVK18IAQgBCAHfCIFVq18fCIEVq18fCICIAEpAwB8IgYgAlStfCAGIAYgASkDGCAEIAQgASkDEHwiB1atfCAHIAcgASkDKCAFIAUgASkDIHwiBFatfCAEIAEpAzggASkDMCIFIAx8IAVUrXx8IgogBFStfHwiBFatfHwiBVatfCACIANUrSABKQN4IAMgCFStfHx8IglCqcDGia7Ok7IwVg0AAkAgCUKpwMaJrs6TsjBRBEAgBULdsIWM6LaRqLh/Vg0CIAVC3bCFjOi2kai4f1IEQCAEIQMgBSECQqnAxomuzpOyMCEJDAQLIARCjZXHw5bS2sCXf1YNAkLdsIWM6LaRqLh/IQIgBEKNlcfDltLawJd/UQ0BIAQhA0KpwMaJrs6TsjAhCQwDCyAEIQMgBSECDAILQo2Vx8OW0trAl38hAyAKQsf688PtgqOQPFoNAEKpwMaJrs6TsjAhCQwBCyAEQvPquLzpraW/6AB8IgIgCkLH+vPD7YKjkDxUrSIGfSEDIAVCo8/685fJ7tfHAHwiByAEQo2Vx8OW0trAl39UIAIgBlRyrSIEfSECIAkgBULdsIWM6LaRqLh/VCAEIAdWcq19QqnAxomuzpOyMH0hCSAKQsf688PtgqOQPH0hCgsgGiA5aiIjIAk3AwAgI0EYaiAKNwMAICNBEGogAzcDACAjQQhqIAI3AwAgGkEgaiEaIBxBAWsiHA0ACwsgITYCACABQYAEaiQAICJBCGogLSgCADYCACAiIBkpAgw3AgAMAgsLQdHOxQAtAAAaQSBBCBDWBCIBRQ0WIAFCADcDACAiQQE2AgggIiABNgIEICJBATYCACABQRhqQgA3AwAgAUEQakIANwMAIAFBCGpCADcDAEF/ISoLICIgKjYCDCAZQTBqJAAMAQtBCCABQbTKwgAQyAQACyAYKALMBCIpQX9GBEBB0c7FAC0AABpBIEEIENYEIgFFDRQgAUIANwMAIAFBGGpCADcDACABQRBqQgA3AwAgAUEIakIANwMAIBhCgYCAgHA3A5gEIBggATYClAQgGEEBNgKQBAwFCyAlQfj///8HSwRAQQAhAQwMCwJ/ICVFBEBBCCEaQQAMAQtB0c7FAC0AABpBCCEBICVBCBDWBCIaRQ0MIB8LISMgH0ECSQ0BIB4gNmoiHEEHcSEZIBohASAeICdrQQJrQQdPBEAgHEF4cSEeA0AgAUIANwMAIAFBGGpCADcDACABQRBqQgA3AwAgAUEIakIANwMAIAFBIGpCADcDACABQShqQgA3AwAgAUEwakIANwMAIAFBOGpCADcDACABQUBrQgA3AwAgAUHIAGpCADcDACABQdAAakIANwMAIAFB2ABqQgA3AwAgAUHgAGpCADcDACABQegAakIANwMAIAFB8ABqQgA3AwAgAUH4AGpCADcDACABQZgBakIANwMAIAFBkAFqQgA3AwAgAUGIAWpCADcDACABQYABakIANwMAIAFBuAFqQgA3AwAgAUGwAWpCADcDACABQagBakIANwMAIAFBoAFqQgA3AwAgAUHAAWpCADcDACABQcgBakIANwMAIAFB0AFqQgA3AwAgAUHYAWpCADcDACABQeABakIANwMAIAFB6AFqQgA3AwAgAUHwAWpCADcDACABQfgBakIANwMAIAFBgAJqIQEgHkEIayIeDQALCyAZRQ0CA0AgAUIANwMAIAFBGGpCADcDACABQRBqQgA3AwAgAUEI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AnQQ3wQLIAJBMGokAAvxBgIUfwF+IwBBgANrIgIkAEHRzsUALQAAGkGAA0EIENYEIgMEQCADIAFBgAP8CgAAIAMpAwAhFiADQYADEN8EIAIgFjcDACACQQhqIAFBCGpBuAH8CgAAIAJBwAFqIgQgAhCFASAAQRhqIAJB2AFqIgMpAwA3AwAgAEEQaiACQdABaiIFKQMANwMAIABBCGogAkHIAWoiBikDADcDACAAIAIpA8ABNwMAIAAgAikD4AE3AyAgAEEoaiACQegBaiIHKQMANwMAIABBMGogAkHwAWoiCCkDADcDACAAQThqIAJB+AFqIgkpAwA3AwAgACACKQOAAjcDQCAAQcgAaiACQYgCaiIKKQMANwMAIABB0ABqIAJBkAJqIgspAwA3AwAgAEHYAGogAkGYAmoiDCkDADcDACAAQfgAaiACQbgCaiINKQMANwMAIABB8ABqIAJBsAJqIg4pAwA3AwAgAEHoAGogAkGoAmoiDykDADcDACAAIAIpA6ACNwNgIABBmAFqIAJB2AJqIhApAwA3AwAgAEGQAWogAkHQAmoiESkDADcDACAAQYgBaiACQcgCaiISKQMANwMAIAAgAikDwAI3A4ABIABBuAFqIAJB+AJqIhMpAwA3AwAgAEGwAWogAkHwAmoiFCkDADcDACAAQagBaiACQegCaiIVKQMANwMAIAAgAikD4AI3A6ABIAQgAUHAAWoQhQEgAEHYAWogAykDADcDACAAQdABaiAFKQMANwMAIABByAFqIAYpAwA3AwAgACACKQPAATcDwAEgACACKQPgATcD4AEgAEHoAWogBykDADcDACAAQfABaiAIKQMANwMAIABB+AFqIAkpAwA3AwAgACACKQOAAjcDgAIgAEGIAmogCikDADcDACAAQZACaiALKQMANwMAIABBmAJqIAwpAwA3AwAgAEG4AmogDSkDADcDACAAQbACaiAOKQMANwMAIABBqAJqIA8pAwA3AwAgACACKQOgAjcDoAIgAEHYAmogECkDADcDACAAQdACaiARKQMANwMAIABByAJqIBIpAwA3AwAgACACKQPAAjcDwAIgAEH4AmogEykDADcDACAAQfACaiAUKQMANwMAIABB6AJqIBUpAwA3AwAgACACKQPgAjcD4AIgAkGAA2okAA8LQQhBgANB8LXCABDIBAALuAYC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ASAIEKACIAQgAiAJEKACIAYgBSAEEDggBCAGIAMQ3AEgBiAEIAcQ3AEgBBD0AyAFIAQgDBA4IABBQGsgBiAFEKACIAUgASAKEKACIAQgAiALEKACIAYgBSAEEDggA0G4A2oiASADQThqKQMANwMAIANBsANqIgIgA0EwaikDADcDACADQagDaiIIIANBKGopAwA3AwAgA0GgA2oiCSADQSBqKQMANwMAIANBmANqIgogA0EYaikDADcDACADQZADaiILIANBEGopAwA3AwAgA0GIA2oiByADQQhqKQMANwMAIAMgAykDADcDgAMgBSAGIAQQ3AEgASADQfgAaikDADcDACACIANB8ABqKQMANwMAIAggA0HoAGopAwA3AwAgCSADQeAAaikDADcDACAKIANB2ABqKQMANwMAIAsgA0HQAGopAwA3AwAgByADQcgAaikDADcDACADIAMpA0A3A4ADIAYgBSAEEKACIAEgA0G4AWopAwA3AwAgAiADQbABaikDADcDACAIIANBqAFqKQMANwMAIAkgA0GgAWopAwA3AwAgCiADQZgBaikDADcDACALIANBkAFqKQMANwMAIAcgA0GIAWopAwA3AwAgAyADKQOAATcDgAMgAEGAAWogBiAEENwBIANBwANqJAALqAYBB38CQAJAAkACQAJAAkAgAAJ+AkACQCABKAIAIglBgICAgHhHBEAgASgCCCIEIAJNDQIgBCACayEFIAEoAgQhBiACRQ0BIAVBAnQiAUUNASAGIAYgAkECdGogAfwKAAAMAQsgAiABKAIEIgQoAggiAU8EQCABQQJ0IQIgBCgCBCEEAkAgAUUEQEEEIQMMAQtB0c7FAC0AABogAkEEENYEIgNFDQYLIAIEQCADIAQgAvwKAAALIAGtIAOtQiCGhAwDC0HRzsUALQAAGiAEKAIEIQQgASACayIFQQJ0IgFBBBDWBCIGRQ0FIAEEQCAGIAQgAkECdGogAfwKAAALIAUhCQsgA0H/AXFFDQYgBQ0CQQAhBAwHCyABKQIACzcCACAAQQA2AggPCyADQR9xIQJBACEEQQAgA2tBH3EhByAGIAVBAnRqIQEgBUEBa0H/////A3EiCkEBaiIIQQNxIQMgCkEDSQ0CIAhB/P///wdxIQoDQCABQQRrIgggBCAIKAIAIgQgAnZyNgIAIAFBCGsiCCAEIAd0IAgoAgAiBCACdnI2AgAgAUEMayIIIAQgB3QgCCgCACIEIAJ2cjYCACABQRBrIgEgBCAHdCABKAIAIgQgAnZyNgIAIAQgB3QhBCAKQQRrIgoNAAsMAgtBBCACQaSDxQAQyAQAC0EEIAFBpIPFABDIBAALIANFDQAgAUEEayEBA0AgASAEIAEoAgAiBCACdnI2AgAgAUEEayEBIAQgB3QhBCADQQFrIgMNAAsLQQAhBCAFRQ0AIAYgBUECdCIBakEEaygCAARAIAUhBAwBCyAGQQRrIQMgBUH/////A3EhAgNAIAFFDQEgAkEBayECIAEgA2ogAUEEayEBKAIARQ0ACyACQQFqIgEgBSABIAVJGyEECwJAAkAgCUECdiAETQRAIAYhAiAJIQEMAQtBACEBIAlFBEAgBiECDAELIAlBAnQhAyAERQRAQQQhAiAGIAMQ3wQMAQsgBiADQQQgBCIBQQJ0IgMQzgQiAkUNAQsgACACNgIEIAAgATYCACAAIAQ2AggPC0EEIANBiIbFABDIBAALsQYCB38DfiMAQUBqIgQkAAJAAkACQAJ/AkACQCACKAIIIgNFDQACQCADQQFrIgNB/v///wNxRQRAIANB/////wNxIgZBAWoiB0EDcSEFIAIoAgQiCCEDIAZBA08EQCAHQfz///8HcSEGA0AgCkKAAXwhCiADQRBqIQMgBkEEayIGDQALCyAFBEADQCADNQIAIAqGIAt8IQsgCkIgfCEKIANBBGohAyAFQQFrIgUNAAsLIAtCgICAgBBUDQELIARBEGogAUEIaigCADYCACAEIAEpAgA3AwggBEEgaiACQQhqKAIANgIAIAQgAikCADcDGCAEQShqIARBCGogBEEYahCcASAAQQhqIARBPGooAgA2AgAgACAEKQI0NwIAIAQoAigiAEUNBiAEKAIsIABBAnQQ3wQMBgsgC1ANACABKAIIIQMgASgCBCEGAkACQCALQoCABFoEQCADRQ0CIANB/////wNqIQcgA0ECdCEFIANB/////wNxQQFHDQEgBSAGagwFCyADRQ0BIAunIQcgBkEEayEJIANBAnQhA0EAIQUDQCAFQRB0IAMgCWooAgAiBUEQdnIgB3BBEHQgBUH//wNxciAHcCEFIANBBGsiAw0ACwwFCyAFIAZqQQhrIQMgB0H/////A3FBAWpB/v///wdxIQVCACEKA0AgAzUCACADQQRqNQIAIApCIIaEIAuCQiCGhCALgiEKIANBCGshAyAFQQJrIgUNAAsMAgsgBEEwakHcmsAAKAIANgIAIARB1JrAACkCADcDKAwECyAEQQA2AjggBEEBNgIsIARBhJzAADYCKCAEQgQ3AjAgBEEoakH0nMAAEKgEAAsgCkIghiEMIANBCGoLIQMgB0EBcQR+IAoFIAwgA0EEazUCAIQgC4ILpyEFCyAEQTBqQdyawAAoAgA2AgAgBEHUmsAAKQIANwMoIAVFDQAgBEEoakHIm8AAEKUDIAQoAiwgBTYCACAEQQE2AjALIAAgBCkDKDcCACAAQQhqIARBMGooAgA2AgAgAigCACIABEAgCCAAQQJ0EN8ECyABKAIAIgBFDQAgBiAAQQJ0EN8ECyAEQUBrJAALsQYCB38DfiMAQUBqIgQkAAJAAkACQAJ/AkACQCACKAIIIgNFDQACQCADQQFrIgNB/v///wNxRQRAIANB/////wNxIgZBAWoiB0EDcSEFIAIoAgQiCCEDIAZBA08EQCAHQfz///8HcSEGA0AgCkKAAXwhCiADQRBqIQMgBkEEayIGDQALCyAFBEADQCADNQIAIAqGIAt8IQsgCkIgfCEKIANBBGohAyAFQQFrIgUNAAsLIAtCgICAgBBUDQELIARBEGogAUEIaigCADYCACAEIAEpAgA3AwggBEEgaiACQQhqKAIANgIAIAQgAikCADcDGCAEQShqIARBCGogBEEYahCcASAAQQhqIARBPGooAgA2AgAgACAEKQI0NwIAIAQoAigiAEUNBiAEKAIsIABBAnQQ3wQMBgsgC1ANACABKAIIIQMgASgCBCEGAkACQCALQoCABFoEQCADRQ0CIANB/////wNqIQcgA0ECdCEFIANB/////wNxQQFHDQEgBSAGagwFCyADRQ0BIAunIQcgBkEEayEJIANBAnQhA0EAIQUDQCAFQRB0IAMgCWooAgAiBUEQdnIgB3BBEHQgBUH//wNxciAHcCEFIANBBGsiAw0ACwwFCyAFIAZqQQhrIQMgB0H/////A3FBAWpB/v///wdxIQVCACEKA0AgAzUCACADQQRqNQIAIApCIIaEIAuCQiCGhCALgiEKIANBCGshAyAFQQJrIgUNAAsMAgsgBEEwakGQksIAKAIANgIAIARB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ADcDACAAQRBqIAYpAwA3AwAgAEEIaiADKQMANwMAIAAgAikDEDcDACAEBEAgCCAEEN8ECyABKAIAIgAEQCAJIAAQ3wQLIAJB8AFqJAAPC0EBQQJBrIPBABDIBAALQdT+wABBKyACQegAakHo/8AAQYiSwQAQygMAC7oGAQh/IwBBMGsiAyQAIAEtAAwhCAJAAkAgAi0ADCIGQQFGBEAgASgCCCIGQQJ0IQUCQCAGQf////8DSyAFQfz///8HS3INACABKAIEIQcCfyAFRQRAQQQhAUEADAELQdHOxQAtAAAaQQQhBCAFQQQQ1gQiAUUNASAGCyEEIAUEQCABIAcgBfwKAAALIAAgCDoADCAAIAY2AgggACABNgIEIAAgBDYCAAwCCyAEIAVB+IHAABDIBAALAkACQAJAAkACQAJAIAhBAWsOAgECAAsgBg0CDAMLIAAgAikCADcCACAAQQhqIAJBCGopAgA3AgAMBQsgBg0BCwJAAkACQAJ/IAEoAggiBCACKAIIIgVGBEAgBEECdCEEIAEoAgRBBGshCSACKAIEQQRrIQoCQANAIARFDQEgBCAKaiEHIAQgCWogBEEEayEEKAIAIgUgBygCACIHRg0ACyAFIAdLIAUgB0lrDAILQX9BACAEGwwBCyAEIAVLIAQgBUlrC0H/AXEOAgACAQsgAEEIakGozMIAKQIANwIAIABBoMzCACkCADcCAAwECyADQShqIAJBCGooAgA2AgAgAyACKQIANwMgIANBCGogA0EgaiABEIcCIAAgAykCCDcCACAAQQhqIANBEGooAgAiATYCACAAIAZBASABGzoADAwECyADQShqIAJBCGooAgA2AgAgAyACKQIANwMgIANBFGogASADQSBqEJ4BQQEhBAJAIAhBAUcEQCAIQQEgAygCHBshBAwBCyADQQA2AhwgAygCFEEESQ0AIAMgA0EUakEAENMDIAMoAgAiAUGBgICAeEcNAgsgACADKQIUNwIAIAAgBDoADCAAQQhqIANBHGooAgA2AgAMAwsgA0EoaiACQQhqKAIANgIAIAMgAikCADcDICADQRRqIANBIGogARDKASADKAIcRQRAIABBAToADCAAIAMpAhQ3AgAgAEEIaiADQRxqKAIANgIADAMLIAAgCDoADCAAIAMpAhQ3AgAgAEEIaiADQRxqKAIANgIADAILIAEgAygCBEHQz8IAEMgEAAsgAigCACIARQ0AIAIoAgQgAEECdBDfBAsgA0EwaiQAC/4FAg1+AX8jAEGAAWsiDyQAIA9B8ABqIAEpAxgiA0Kx6pSR3aOCnFh+IgJCAEKv+P//b0IAEMkDIA9B4ABqIAJCAEJ/QgAQyQMgD0HQAGogDykDYCICIAEpAxB8IgQgDykDeCADIA8pA3AiBXwgBVStfHwiBUKx6pSR3aOCnFh+IgNCAEKv+P//b0IAEMkDIA9BQGsgA0IAQn9CABDJAyAPQTBqIA8pA0AiAyACIAEpAwh8IgYgBCAFVq0gDykDaCIHIAIgBFatfHx8Igl8IgggDykDWCAPKQNQIgQgBXwgBFStfHwiBUKx6pSR3aOCnFh+IgRCAEKv+P//b0IAEMkDIA9BIGogBEIAQn9CABDJAyAPQRBqIA8pAyAiBCADIAIgASkDAHwiCyAGIAlWrSAHIAIgBlatfHx8IgZ8IgkgBSAIVK0gDykDSCIMIAMgCFatfHx8Ig58IgggDykDOCAFIA8pAzAiBXwgBVStfHwiBUKx6pSR3aOCnFh+IgpCAEKv+P//b0IAEMkDIA8gCkIAQn9CABDJAyAPKQMIIgogDykDKCINIAQgDCADIAYgC1StIAcgAiALVq18fCIHfCICIAdUrXwgAiACIAkgDlatIAwgBiAJVq18fHwiAlatfCIGfCIDIAZUrXwgAyADIA0gAiACIAR8IgJWrXwgAiAFIAhUrSANIAQgCFatfHx8IgQgAlStfHwiA1atfCIHIA8pAwAiAnwiBiAHVK18IAYgCiADIAIgA3wiA1atfCADIAogAiACIAR8IgJWrXwgAiAPKQMYIA8pAxAiBCAFfCAEVK18fCIFIAJUrXx8IgQgA1StfHwiAiAGVK18IQYCQCAFQq/4//9vVARAIAIhAwwBCyACIASDIAaDQn9SBEAgAiEDDAELIAJCAXwiBiAEQn9SrSIHfSEDQgAgAkJ/UiAGIAdUcq19IQYgBEIBfCEEIAVC0YeAgBB8IQULIAAgBTcDGCAAIAQ3AxAgACADNwMIIAAgBjcDACAPQYABaiQAC4sGAQh/IwBBgAlrIgMkACADQZgGaiIFQcCDwAApAwA3AwAgA0GQBmoiBkG4g8AAKQMANwMAIANBiAZqIgdBsIPAACkDADcDACADQaAGakIANwMAIANBqAZqIghCADcDACADQbAGaiIEQgA3AwAgA0G4BmoiCUIANwMAIANByAdqQgA3AwAgA0HQB2pCADcDACADQdgHakIANwMAIANB4AdqQgA3AwAgA0HoB2pCADcDACADQfAHakIANwMAIANB+AdqQgA3AwAgA0IANwPAByADQaiDwAApAwA3A4AGIANBoAhqQgA3AwAgA0H4CGpCADcDACADQfAIakIANwMAIANB6AhqQgA3AwAgA0HgCGpCADcDACADQdgIakIANwMAIANB0AhqQgA3AwAgA0HICGpCADcDACADQbgIaiAJKQMANwMAIANBsAhqIAQpAwA3AwAgA0GoCGogCCkDADcDACADQZgIaiAFKQMANwMAIANBkAhqIAYpAwA3AwAgA0GICGogBykDADcDACADQgA3A8AIIAMgAykDgAY3A4AIIAMgASACEOsBIANBwAFqIgkgAUHAAWoiBSACQcABaiIIEOsBIANBwARqIgogASAFEKACIANBgAVqIgYgAUFAayABQYACahCgAiADQcAFaiIHIAFBgAFqIAFBwAJqEKACIANBgAZqIgQgAiAIEKACIANBwAZqIgEgAkFAayACQYACahCgAiADQYAHaiIFIAJBgAFqIAJBwAJqEKACIANBgANqIAogBBDrASAEIAkgA0HAB2oQ6wEgACADIAQQoAIgAEFAayADQUBrIAEQoAIgAEGAAWogA0GAAWogBRCgAkEAIgJFBEAgBCADQcAB/AoAAAsgA0HABGogA0GAA2ogA0GABmoiBBDcASAGIANBwANqIAEQ3AEgByADQYAEaiAFENwBIAJFBEAgBCADQcABakHAAfwKAAALIABBwAFqIANBwARqIANBgAZqENwBIABBgAJqIAYgARDcASAAQcACaiAHIAUQ3AEgA0GACWokAAuyBgEIf0EMIQYjAEEQayIEJAACQCABKAIIIgJBDE0EQAJAIAJFBEBBCCEFDAELIAEoAgQhCUEAIQFB0c7FAC0AABogAkEFdCIIIgNBCBDWBCIFRQ0CA0AgASAIRg0BIAEgBWoiAyABIAlqIgcpAwA3AwAgA0EYaiAHQRhqKQMANwMAIANBEGogB0EQaikDADcDACADQQhqIAdBCGopAwA3AwAgCCABQSBqIgFHDQALCyAEIAI2AgwgBCAFNgIIIAQgAjYCBCACQQxJBEAgBEEEaiACQQwgAmsiA0EIQSAQiAMgBCgCCCAEKAIMIgVBBXRqIQEgA0ECTwRAIAJBf3NBDGoiAkEHcSEGIANBAmtBB08EQCACQXhxIQIDQCABQgA3AwAgAUEYakIANwMAIAFBEGpCADcDACABQQhqQgA3AwAgAUEgakIANwMAIAFBKGpCADcDACABQTBqQgA3AwAgAUE4akIANwMAIAFBQGtCADcDACABQcgAakIANwMAIAFB0ABqQgA3AwAgAUHYAGpCADcDACABQeAAakIANwMAIAFB6ABqQgA3AwAgAUHwAGpCADcDACABQfgAakIANwMAIAFBmAFqQgA3AwAgAUGQAWpCADcDACABQYgBakIANwMAIAFBgAFqQgA3AwAgAUG4AWpCADcDACABQbABakIANwMAIAFBqAFqQgA3AwAgAUGgAWpCADcDACABQcABakIANwMAIAFByAFqQgA3AwAgAUHQAWpCADcDACABQdgBakIANwMAIAFB4AFqQgA3AwAgAUHoAWpCADcDACABQfABakIANwMAIAFB+AFqQgA3AwAgAUGAAmohASACQQhrIgINAAsLIAYEQANAIAFCADcDACABQRhqQgA3AwAgAUEQakIANwMAIAFBCGpCADcDACABQSBqIQEgBkEBayIGDQALCyADIAVqQQFrIQULIAFCADcDACABQRhqQgA3AwAgAUEQakIANwMAIAFBCGpCADcDACAFQQFqIQYLIAAgBCkCBDcCACAAQQhqIAY2AgAgBEEQaiQADwtB7MbCAEE3QczHwgAQ/gMAC0EIIANB6IHAABDIBAALvAYCCX8BfgJAAkACQAJAAkACQCABKAIAIgcEQAJAIAEoAgQiAyABKAIMIgRGBEAgAyECDAELIAEgA0EMaiICNgIEIAMoAgAiBUGAgICAeEcNAgsgBCACa0EMbiEDIAIgBEcEQANAIAIoAgAiBQRAIAJBBGooAgAgBUECdBDfBAsgAkEMaiECIANBAWsiAw0ACwsgASgCCCICBEAgByACQQxsEN8ECyABQQA2AgALIAEoAiAiAkUNAgJAIAEoAigiA0UEQCACIAEoAiRHDQEMBAsgAUEANgIoIAMgASgCJCIFIAJrQRhuTw0CIAIgA0EYbGohAgsgASACQRhqNgIgQQAhBUHRzsUALQAAGkEYQQQQ1gQiA0UNAyACKAIIIgdBAnQhBCAHQf////8DSyAEQfz///8HS3INBCACKAIEIQgCfyAERQRAQQQhCUEADAELQdHOxQAtAAAaQQQhBSAEQQQQ1gQiCUUNBSAHCyEFIAQEQCAJIAggBPwKAAALIAIoAhQiCEECdCEGQQAhBCAIQf////8DSyAGQfz///8HS3INBSACKAIQIQoCfyAGRQRAQQQhAkEADAELQdHOxQAtAAAaQQQhBCAGQQQQ1gQiAkUNBiAICyEEIAYEQCACIAogBvwKAAALIAMgCDYCFCADIAI2AhAgAyAENgIMIAMgBzYCCCADIAk2AgQgAyAFNgIAIAEgA0EYajYCDCABQQI2AgggASADNgIAIAEgA0EMajYCBAsgACAFNgIAIAAgAykCBDcCBA8LIAEgBTYCIAsCQAJAAkAgASgCECIEBEAgASgCFCIDIAEoAhwiBUcNASADIQIMAgsgAEGAgICAeDYCAA8LIAEgA0EMaiICNgIUIAMpAgQhCyADKAIAIgNBgICAgHhHDQELIAUgAmtBDG4hAyACIAVHBEADQCACKAIAIgUEQCACQQRqKAIAIAVBAnQQ3wQLIAJBDGohAiADQQFrIgMNAAsLIAEoAhgiAgRAIAQgAkEMbBDfBAsgAUEANgIQQYCAgIB4IQMLIAAgCzcCBCAAIAM2AgAPC0EEQRgQ/wQACyAFIARB+IHAABDIBAALIAQgBkH4gcAAEMgEAAvQBQIIfwJ+IwBBwAprIgIkACACQYAGaiIIIAEQaCACQYgJakIANwMAIAJBkAlqQgA3AwAgAkGYCWpCADcDACACQaAJakIANwMAIAJBqAlqQgA3AwAgAkGwCWpCADcDACACQbgJakIANwMAIAJBmANqIgRBwIPAACkDADcDACACQZADaiIFQbiDwAApAwA3AwAgAkGIA2oiA0Gwg8AAKQMANwMAIAJBoANqQgA3AwAgAkGoA2oiBkIANwMAIAJBsANqIgdCADcDACACQbgDaiIJQgA3AwAgAkIANwOACSACQaiDwAApAwA3A4ADIAJB4AlqQgA3AwAgAkGICmpCADcDACACQZAKakIANwMAIAJBmApqQgA3AwAgAkGgCmpCADcDACACQagKakIANwMAIAJBsApqQgA3AwAgAkG4CmpCADcDACACQfgJaiAJKQMANwMAIAJB8AlqIAcpAwA3AwAgAkHoCWogBikDADcDACACQdgJaiAEKQMANwMAIAJB0AlqIAUpAwA3AwAgAkHICWogAykDADcDACACQgA3A4AKIAIgAikDgAM3A8AJIAJBgANqIgMgAUHAAWoiBRBoIAJBwAdqIgYgAkGACWogAxDrASACQcABaiIHIAggBhDcASACQYACaiACQcAGaiACQYAIahDcASACQcACaiACQYAHaiACQcAIahDcASADIAcQYyACKQOQAyEKIAIpA4gDIQsgAAJ+IAIoAoADQQFGBEAgACAKNwMQIAAgCzcDCEIBDAELIAJBEGogBEGwAfwKAAAgAiAKNwMIIAIgCzcDACACQYADaiIEIAEgAhDrASACQYAGaiIDIAUQ8AIgAkHABmogAUGAAmoQ8AIgAkGAB2ogAUHAAmoQ8AIgAkHAB2oiASACQcAB/AoAACACQcAEaiADIAEQ6wEgAEEIaiAEQYAD/AoAAEIACzcDACACQcAKaiQAC4AGAgN/AX4jAEHAA2siAiQAIAJB2AJqQgA3AwAgAkHQAmpCADcDACACQcgCakIANwMAIAJBwAJqQgA3AwAgAkG4AmpCADcDACACQegCakGAkcUAKQMANwMAIAJB8AJqQYiRxQApAwA3AwAgAkH4AmpBkJHFACkDADcDACACQYADakGYkcUAKQMANwMAIAJBiANqQaCRxQApAwA3AwAgAkIANwOwAiACQfiQxQApAwA3A+ACIAJBuANqQgA3AwAgAkGwA2pCADcDACACQagDakIANwMAIAJBoANqQgA3AwAgAkGYA2pCADcDACACQgA3A5ADIAJBmAFqIAJBsAJqEPICIAIoApgBQQFHBEAgAkGgAWohA0EARQRAIAJBCGogA0GQAfwKAAALIAJBwAFqIAFBKGopAwA3AwAgAkG4AWogAUEgaikDADcDACACQbABaiABQRhqKQMANwMAIAJBqAFqIAFBEGopAwA3AwAgAyABQQhqKQMANwMAIAJB0AFqIAFBOGopAwA3AwAgAkHYAWogAUFAaykDADcDACACQeABaiABQcgAaikDADcDACACQegBaiABQdAAaikDADcDACACQfABaiABQdgAaikDADcDACACIAEpAwA3A5gBIAIgASkDMDcDyAEgAkGgAmogAUGIAWopAwA3AwAgAkGYAmogAUGAAWopAwA3AwAgAkGQAmogAUH4AGopAwA3AwAgAkGIAmogAUHwAGopAwA3AwAgAkGAAmogAUHoAGopAwA3AwAgAiABKQNgNwP4ASAERQRAIAJBsAJqIAJBmAFqQZAB/AoAAAtCgICEgICAwIBSIQUDQCAFQgGDUEUEQCACQZgBaiIBIAJBCGoiAyACQbACahAVIAMgAUGQAfwKAAALIAJBmAFqIgMgAkGwAmoiASABEBUgASADQZAB/AoAACAFQgJUIAVCAYghBUUNAAsgACACQQhqQZAB/AoAACACQcADaiQADwtBkI3FAEErIAJBsAJqQYCNxQBBsJLFABDKAwAL1gYBA38gAEHQAWohBQJAAkACQEGIASAALQDYAiIDayIEIAJNBEAgA0UNASAEBEAgAyAFaiABIAT8CgAACyAAIAApAwAgACkD0AGFNwMAIAAgACkDCCAAKQPYAYU3AwggACAAKQMQIAApA+ABhTcDECAAIAApAxggACkD6AGFNwMYIAAgACkDICAAKQPwAYU3AyAgACAAKQMoIAApA/gBhTcDKCAAIAApAzAgACkDgAKFNwMwIAAgACkDOCAAKQOIAoU3AzggACAAKQNAIAApA5AChTcDQCAAIAApA0ggACkDmAKFNwNIIAAgACkDUCAAKQOgAoU3A1AgACAAKQNYIAApA6gChTcDWCAAIAApA2AgACkDsAKFNwNgIAAgACkDaCAAKQO4AoU3A2ggACAAKQNwIAApA8AChTcDcCAAIAApA3ggACkDyAKFNwN4IAAgACkDgAEgACkD0AKFNwOAASAAIAAoAsgBEIIFIAIgBGshAiABIARqIQEMAQsgAgRAIAMgBWogASAC/AoAAAsgAiADaiEDDAELIAEgAkGIAW5BiAFsIgNqIQQgAiADayEDIAJBiAFPBEADQCAAIAApAwAgASkAAIU3AwAgACAAKQMIIAFBCGopAACFNwMIIAAgACkDECABQRBqKQAAhTcDECAAIAApAxggAUEYaikAAIU3AxggACAAKQMgIAFBIGopAACFNwMgIAAgACkDKCABQShqKQAAhTcDKCAAIAApAzAgAUEwaikAAIU3AzAgACAAKQM4IAFBOGopAACFNwM4IAAgACkDQCABQUBrKQAAhTcDQCAAIAApA0ggAUHIAGopAACFNwNIIAAgACkDUCABQdAAaikAAIU3A1AgACAAKQNYIAFB2ABqKQAAhTcDWCAAIAApA2AgAUHgAGopAACFNwNgIAAgACkDaCABQegAaikAAIU3A2ggACAAKQNwIAFB8ABqKQAAhTcDcCAAIAApA3ggAUH4AGopAACFNwN4IAAgACkDgAEgAUGAAWopAACFNwOAASAAIAAoAsgBEIIFIAFBiAFqIgEgBEcNAAsLIANBiQFPDQEgA0UNACAFIAQgA/wKAAAgACADOgDYAg8LIAAgAzoA2AIPCyADQYgBQaiVwgAQ5QQAC7MFAQd/IwBB0AFrIgMkAAJAAkACQCABKAIEIgUEQCABKAIIIgZFDQIgA0GJAWohByABKAIAIQQDQCABIAUgBiAFIAUgBksbIghrIgU2AgQgASAEIAhBBXRqIgk2AgAgA0GoAWogBEEYaikDADcDACADQaABaiAEQRBqKQMANwMAIANBmAFqIARBCGopAwA3AwAgAyAEKQMANwOQASAIQQFGDQQgA0HIAWogBEE4aikDADcDACADQcABaiAEQTBqKQMANwMAIANBuAFqIARBKGopAwA3AwAgAyAEKQMgNwOwASADQcgAaiADQZABaiADQbABahBDAkACQCADLQCIASIEQQJGBEAgAigCACIBQYCAgIB4RiABRXJFBEAgAigCBCABEN8ECyACIAMpA0g3AgAgAkEIaiADQdAAaigCADYCAAwBCyADQRBqIANB0ABqKQMANwMAIANBGGogA0HYAGopAwA3AwAgA0EgaiADQeAAaikDADcDACADQShqIANB6ABqKQMANwMAIANBMGogA0HwAGopAwA3AwAgA0E4aiADQfgAaikDADcDACADQUBrIANBgAFqKQMANwMAIAMgAykDSDcDCCADIAcoAAA2AgAgAyAHQQNqKAAANgADIARBA0YNAQsgACADKQMINwMAIAAgAygCADYAQSAAQcQAaiADKAADNgAAIABBOGogA0FAaykDADcDACAAQTBqIANBOGopAwA3AwAgAEEoaiADQTBqKQMANwMAIABBIGogA0EoaikDADcDACAAQRhqIANBIGopAwA3AwAgAEEQaiADQRhqKQMANwMAIABBCGogA0EQaikDADcDAAwDCyAJIQQgBQ0ACwtBAyEECyAAIAQ6AEAgA0HQAWokAA8LQQBBAEGg+sAAENkDAAtBAUEBQbD6wAAQ2QMAC7MFAQd/IwBB0AFrIgMkAAJAAkACQCABKAIEIgUEQCABKAIIIgZFDQIgA0GJAWohByABKAIAIQQDQCABIAUgBiAFIAUgBksbIghrIgU2AgQgASAEIAhBBXRqIgk2AgAgA0GoAWogBEEYaikDADcDACADQaABaiAEQRBqKQMANwMAIANBmAFqIARBCGopAwA3AwAgAyAEKQMANwOQASAIQQFGDQQgA0HIAWogBEE4aikDADcDACADQcABaiAEQTBqKQMANwMAIANBuAFqIARBKGopAwA3AwAgAyAEKQMgNwOwASADQcgAaiADQZABaiADQbABahBFAkACQCADLQCIASIEQQJGBEAgAigCACIBQYCAgIB4RiABRXJFBEAgAigCBCABEN8ECyACIAMpA0g3AgAgAkEIaiADQdAAaigCADYCAAwBCyADQRBqIANB0ABqKQMANwMAIANBGGogA0HYAGopAwA3AwAgA0EgaiADQeAAaikDADcDACADQShqIANB6ABqKQMANwMAIANBMGogA0HwAGopAwA3AwAgA0E4aiADQfgAaikDADcDACADQUBrIANBgAFqKQMANwMAIAMgAykDSDcDCCADIAcoAAA2AgAgAyAHQQNqKAAANgADIARBA0YNAQsgACADKQMINwMAIAAgAygCADYAQSAAQcQAaiADKAADNgAAIABBOGogA0FAaykDADcDACAAQTBqIANBOGopAwA3AwAgAEEoaiADQTBqKQMANwMAIABBIGogA0EoaikDADcDACAAQRhqIANBIGopAwA3AwAgAEEQaiADQRhqKQMANwMAIABBCGogA0EQaikDADcDAAwDCyAJIQQgBQ0ACwtBAyEECyAAIAQ6AEAgA0HQAWokAA8LQQBBAEGg+sAAENkDAAtBAUEBQbD6wAAQ2QMAC5QmAhF/D34jAEHQAWsiBCQAAkACQAJAIAEoAgQiCQRAIAEoAggiDEUNAiAEQYkBaiENIAEoAgAhAwNAIAEgCSAMIAkgCSAMSxsiBWsiCTYCBCABIAMgBUEFdGoiDzYCACAEQagBaiADQRhqKQMANwMAIARBoAFqIANBEGopAwA3AwAgBEGYAWogA0EIaikDADcDACAEIAMpAwA3A5ABIAVBAUYNBCAEQcgBaiADQThqKQMANwMAIARBwAFqIANBMGopAwA3AwAgBEG4AWogA0EoaikDADcDACAE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fCIWVq18IhQgGHwiGSAYIBRCAFIiCBshGAJAAkACQCAHIApyIAZyIBQgGVYiB60gFCAIG0IAUnIgByAIcSAYQoGAgIBwVnJyDQAgGEKBgICAcFINAkIAIRkgFkIAUg0AQv////8PIRQgFUL/////D1YEQCAVIRQMAgsgFUL/////D1IgF0J/UnINAgwBCyAWIRkgFSEUCyAUQv////8PfSIWIBdCf1KtIhp9IRUgGSAUQv////8PVCAWIBpUcq0iFH0hFiAYIBQgGVatfUL/////D3whGCAXQgF8IRcLIAMgFzcD0AkgAyAVNwPICSADIBY3A8AJIAMgGDcDuAkgA0HwCWoiByAFQRhqIgYpAwA3AwAgA0HoCWoiCCAFQRBqIgopAwA3AwAgA0HgCWoiECAFQQhqIhEpAwA3AwAgAyAFKQMANwPYCSADQZgJaiADQbgJaiISIANB2AlqIhMQkQEgByAGKQMANwMAIAggCikDADcDACAQIBEpAwA3AwAgAyAFKQMANwPYCSASIANB+AlqIBMQkQECQAJAIAMpA5gJIhogAykDuAl8IhUgAykDoAkiFCADKQPACXwiFiAUVCAWIBYgAykDqAkiFCADKQPICXwiGCAUVCAYIBggAykDsAkiFCADKQPQCXwiFyAUVK18IhRWcq18IhlWcq18IhggFVQgFSAaVHINAEKBgICAcCEWAkAgGCIVQoGAgIBwUg0AIBlCAFINAUL/////DyEWIBQiFUL/////D1INACAXQn9RDQFCACEVQoGAgIBwIRgMAgsgFSAWWg0AIBkhFSAUIRYMAQsgFEL/////D30iFSAXQn9SrSIafSEWIBkgFEL/////D1QgFSAaVHKtIhR9IRUgGEL+////D0L/////DyAUIBlWG3whGCAXQgF8IRcLAkACQCAYIBx8IhogFSAVIB58IhVWIBUgFiAffCIUIBZUIBQgFCAXICF8IhkgF1StfCIUVnKtfCIWIBVUcq18IhcgGlQgGCAaVnINAEKBgICAcCEYAkAgFyIVQoGAgIBwUg0AIBZCAFINAUL/////DyEYIBQiFUL/////D1INACAZQn9RDQFCACEVQoGAgIBwIRcMAgsgFSAYWg0AIBYhFSAUIRgMAQsgFEL/////D30iFSAZQn9SrSIafSEYIBYgFEL/////D1QgFSAaVHKtIhR9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CGogBUHQAGooAgA2AgAMAQsgBUEQaiAFQdAAaikDADcDACAFQRhqIAVB2ABqKQMANwMAIAVBIGogBUHgAGopAwA3AwAgBUEoaiAFQegAaikDADcDACAFQTBqIAVB8ABqKQMANwMAIAVBOGogBUH4AGopAwA3AwAgBUFAayAFQYABaikDADcDACAFIAUpA0g3AwggBSANKAAANgIAIAUgDUEDaigAADYAAyAEQQNGDQELIAAgBSkDCDcDACAAIAUoAgA2AEEgAEHEAGogBSgAAzYAACAAQThqIAVBQGspAwA3AwAgAEEwaiAFQThqKQMANwMAIABBKGogBUEwaikDADcDACAAQSBqIAVBKGopAwA3AwAgAEEYaiAFQSBqKQMANwMAIABBEGogBUEYaikDADcDACAAQQhqIAVBEGopAwA3AwAMAwsgDyEEIAoNAAsLQQMhBAsgACAEOgBAIAVB0AFqJAAPC0EAQQBBoPrAABDZAwALQQFBAUGw+sAAENkDAAv8KQIRfw9+IwBB0AFrIgQkAAJAAkACQCABKAIEIgkEQCABKAIIIgxFDQIgBEGJAWohDSABKAIAIQMDQCABIAkgDCAJIAkgDEsbIgVrIgk2AgQgASADIAVBBXRqIg82AgAgBEGoAWogA0EYaikDADcDACAEQaABaiADQRBqKQMANwMAIARBmAFqIANBCGopAwA3AwAgBCADKQMANwOQASAFQQFGDQQgBEHIAWogA0E4aikDADcDACAEQcABaiADQTBqKQMANwMAIARBuAFqIANBKGopAwA3AwAgBCADKQMgNwOwASAEQcgAaiELQQAhByMAQaALayIDJAAgA0HgBGogBEGQAWoiBUEYaikDADcDACADQdgEaiAFQRBqKQMANwMAIANB0ARqIAVBCGopAwA3AwAgA0HwBGogBEGwAWoiBkEIaikDADcDACADQfgEaiAGQRBqKQMANwMAIANBgAVqIAZBGGopAwA3AwAgA0EAOgCIBSADIAUpAwA3A8gEIAMgBikDADcD6AQgA0HoBGohDgJAAkACQAJAAkAgA0HIBGpB6NHBAEEgEPEDRQRAIA5B6NHBAEEgEPEDRQ0BCyADQbAFaiIGEFUgA0HQBWohCCADQZALaiAGQRhqKQMANwMAIANBiAtqIAZBEGopAwA3AwAgA0GAC2ogBkEIaikDADcD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AGopAwA3AwAgBEEYaiAEQdgAaikDADcDACAEQSBqIARB4ABqKQMANwMAIARBKGogBEHoAGopAwA3AwAgBEEwaiAEQfAAaikDADcDACAEQThqIARB+ABqKQMANwMAIARBQGsgBEGAAWopAwA3AwAgBCAEKQNINwMIIAQgDSgAADYCACAEIA1BA2ooAAA2AAMgA0EDRg0BCyAAIAQpAwg3AwAgACAEKAIANgBBIABBxABqIAQoAAM2AAAgAEE4aiAEQUBrKQMANwMAIABBMGogBEE4aikDADcDACAAQShqIARBMGopAwA3AwAgAEEgaiAEQShqKQMANwMAIABBGGogBEEgaikDADcDACAAQRBqIARBGGopAwA3AwAgAEEIaiAEQRBqKQMANwMADAMLIA8hAyAJDQALC0EDIQMLIAAgAzoAQCAEQdABaiQADwtBAEEAQaD6wAAQ2QMAC0EBQQFBsPrAABDZAwALjgYBAX8jAEGgBmsiAiQAAkACQAJAAkACQAJAAkAgAUH/AXFBAWsOBQECAwQFAAsgAhAhIABBCGogAkG0BGooAgA2AgAgACACKQKsBDcCAAJAIAIoAuQBIgBFDQAgACAAQQxsQRNqQXhxIgFqQQlqIgBFDQAgAigC4AEgAWsgABDfBAsgAigCkAIiAEGAgICAeEYgAEVyDQUgAigClAIgAEECdBDfBAwFCyACECYgAEEIaiACQZQGaigCADYCACAAIAIpAowGNwIAAkAgAigCBCIARQ0AIAAgAEEMbEETakF4cSIBakEJaiIARQ0AIAIoAgAgAWsgABDfBAsgAigCgAMiAEGAgICAeEYgAEVyDQQgAigChAMgAEECdBDfBAwECyACEFUgAEEIaiACQbQEaigCADYCACAAIAIpAqwENwIAAkAgAigC5AEiAEUNACAAIABBDGxBE2pBeHEiAWpBCWoiAEUNACACKALgASABayAAEN8ECyACKAKQAiIAQYCAgIB4RiAARXINAyACKAKUAiAAQQJ0EN8EDAMLIAIQPiAAQQhqIAJBtARqKAIANgIAIAAgAikCrAQ3AgACQCACKALkASIARQ0AIAAgAEEMbEETakF4cSIBakEJaiIARQ0AIAIoAuABIAFrIAAQ3wQLIAIoApACIgBBgICAgHhGIABFcg0CIAIoApQCIABBAnQQ3wQMAgsgAhBJIABB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ATYCCCAAQoGAgICwBTcCACABQSdqQa+MwQAoAAA2AAAgAUEgakGojMEAKQAANwAAIAFBGGpBoIzBACkAADcAACABQRBqQZiMwQApAAA3AAAgAUEIakGQjMEAKQAANwAAIAFBiIzBACkAADcAAAwFCwJAAkAgA0EMTwRAIAYOBwIBAQEBAQIBC0HRzsUALQAAGkEnQQEQ1gQiAUUNAyAAQSc2AgwgACABNgIIIABCgYCAgPAENwIAIAFBH2pBw43BACkAADcAACABQRhqQbyNwQApAAA3AAAgAUEQakG0jcEAKQAANwAAIAFBCGpBrI3BACkAADcAACABQaSNwQApAAA3AAAMBgtB0c7FAC0AABpBKEEBENYEIgFFDQMgAEEoNgIMIAAgATYCCCAAQoGAgICABTcCACABQSBqQZyNwQApAAA3AAAgAUEYakGUjcEAKQAANwAAIAFBEGpBjI3BACkAADcAACABQQhqQYSNwQApAAA3AAAgAUH8jMEAKQAANwAADAULAkAgBCAKTQRAIA4gATYCDCABQQVNDQEgDkEBNgIUIA5ByJrBADYCECAOQgE3AhwgDiAOQQxqrUKAgICA4AGENwMoIA4gDkEoajYCGCAOIA5BEGoQ0gIgDi0ABCEBIA4oAgAiCkGAgICAeEYNASAAIA4oAAU2AAkgAEEMaiAOQQhqKAAANgAAIAAgAToACCAAIAo2AgQgAEEBNgIADAYLQdHOxQAtAAAaQThBARDWBCIBRQ0EIABBODYCDCAAIAE2AgggAEKBgICAgAc3AgAgAUEwakH0jMEAKQAANwAAIAFBKGpB7IzBACkAADcAACABQSBqQeSMwQApAAA3AAAgAUEYakHcjMEAKQAANwAAIAFBEGpB1IzBACkAADcAACABQQhqQcyMwQApAAA3AAAgAUHEjMEAKQAANwAADAULAkACQAJAIAFB/wFxDgIBAgALIABBBGohAUHRzsUALQAAGkERQQEQ1gQiAkUEQEEBQRFBrIPBABDIBAALIAFBETYCCCABIAI2AgQgAUERNgIAIAJBEGpBw4zBAC0AADoAACACQQhqQbuMwQApAAA3AAAgAkGzjMEAKQAANwAAIABBATYCAAwGCyAAIQ1BACEKIwBB0AVrIgckAAJAAkACQCADQf///z9LIANBBXQiFEH4////B0tyDQBB0c7FAC0A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QYCAgP95cUGwgICAAnI2AghBASEGIAAoAgAiByAAKAIEIgogCyACIAMQjgQNA0EAIQEgCSAIa0H//wNxIQIDQCABQf//A3EgAk8NAiABQQFqIQEgB0EwIAooAhARAgBFDQALDAMLQQEhBiAAIAcgCyACIAMQjgQNAiAAIAQgBSAHKAIMEQMADQJBACEBIAkgCGtB//8DcSECA0AgAUH//wNxIgMgAkkhBiACIANNDQMgAUEBaiEBIAAgCiAHKAIQEQIARQ0ACwwCCyAHIAQgBSAKKAIMEQMADQEgACANNwIIQQAPC0EBIQYgACgCACIBIAAoAgQiACALIAIgAxCOBA0AIAEgBCAFIAAoAgwRAwAhBgsgBgvNBQIFfwN+IwBBIGsiBCQAAkACQAJAAn8CQAJAIAIoAggiA0UNAAJAIANBAWsiBUH+////A3FFBEAgAigCBCEDIAVB/////wNxIgZBAWoiB0EDcSEFIAZBA08EQCAHQfz///8HcSEGA0AgCEKAAXwhCCADQRBqIQMgBkEEayIGDQALCyAFBEADQCADNQIAIAiGIAl8IQkgCEIgfCEIIANBBGohAyAFQQFrIgUNAAsLIAlCgICAgBBUDQELIARBCGogASACEKEBIABBCGogBEEcaigCADYCACAAIAQpAhQ3AgAgBCgCCCIARQ0GIAQoAgwgAEECdBDfBAwGCyAJUA0AIAEoAgghAiABKAIEIQECQAJAIAlCgIAEWgRAIAJFDQIgAkH/////A2ohBiACQQJ0IQMgAkH/////A3FBAUcNASABIANqDAULIAJFDQEgCachBiABQQRrIQEgAkECdCEDQQAhBQNAIAVBEHQgASADaigCACICQRB2ciAGcEEQdCACQf//A3FyIAZwIQUgA0EEayIDDQALDAULIAEgA2pBCGshAyAGQf////8DcUEBakH+////B3EhBUIAIQgDQCADNQIAIANBBGo1AgAgCEIghoQgCYJCIIaEIAmCIQggA0EIayEDIAVBAmsiBQ0ACwwCCyAEQRBqQYyhxAAoAgA2AgAgBEGEocQAKQIANwMIDAQLIARBADYCGCAEQQE2AgwgBEGUo8QANgIIIARCBDcCECAEQQhqQYSkxAAQqAQACyAIQiCGIQogA0EIagshAyAGQQFxBH4gCAUgCiADQQRrNQIAhCAJggunIQULIARBEGpBjKHEACgCADYCACAEQYShxAApAgA3AwggBUUNACAEQQhqQeiixAAQpQMgBCgCDCAFNgIAIARBATYCEAsgACAEKQMINwIAIABBCGogBEEQaigCADYCAAsgBEEgaiQAC80FAgV/A34jAEEgayIEJAACQAJAAkACfwJAAkAgAigCCCIDRQ0AAkAgA0EBayIFQf7///8DcUUEQCACKAIEIQMgBUH/////A3EiBkEBaiIHQQNxIQUgBkEDTwRAIAdB/P///wdxIQYDQCAIQoABfCEIIANBEGohAyAGQQRrIgYNAAsLIAUEQANAIAM1AgAgCIYgCXwhCSAIQiB8IQggA0EEaiEDIAVBAWsiBQ0ACwsgCUKAgICAEFQNAQsgBEEIaiABIAIQoQEgAEEIaiAEQRxqKAIANgIAIAAgBCkCFDcCACAEKAIIIgBFDQYgBCgCDCAAQQJ0EN8EDAYLIAlQDQAgASgCCCECIAEoAgQhAQJAAkAgCUKAgARaBEAgAkUNAiACQf////8DaiEGIAJBAnQhAyACQf////8DcUEBRw0BIAEgA2oMBQsgAkUNASAJpyEGIAFBBGshASACQQJ0IQNBACEFA0AgBUEQdCABIANqKAIAIgJBEHZyIAZwQRB0IAJB//8DcXIgBnAhBSADQQRrIgMNAAsMBQsgASADakEIayEDIAZB/////wNxQQFqQf7///8HcSEFQgAhCANAIAM1AgAgA0EEajUCACAIQiCGhCAJgkIghoQgCYIhCCADQQhrIQMgBUECayIFDQALDAILIARBEGpBiPrEACgCADYCACAEQYD6xAApAgA3AwgMBAsgBEEANgIYIARBATYCDCAEQYD5xAA2AgggBEIENwIQIARBCGpB8PnEABCoBAALIAhCIIYhCiADQQhqCyEDIAZBAXEEfiAIBSAKIANBBGs1AgCEIAmCC6chBQsgBEEQakGI+sQAKAIANgIAIARBgPrEACkCADcDCCAFRQ0AIARBCGpB9PrEABClAyAEKAIMIAU2AgAgBEEBNgIQCyAAIAQpAwg3AgAgAEEIaiAEQRBqKAIANgIACyAEQSBqJAALzQUCBX8DfiMAQSBrIgQkAAJAAkACQAJ/AkACQCACKAIIIgNFDQACQCADQQFrIgVB/v///wNxRQRAIAIoAgQhAyAFQf////8DcSIGQQFqIgdBA3EhBSAGQQNPBEAgB0H8////B3EhBgNAIAhCgAF8IQggA0EQaiEDIAZBBGsiBg0ACwsgBQRAA0AgAzUCACAIhiAJfCEJIAhCIHwhCCADQQRqIQMgBUEBayIFDQALCyAJQoCAgIAQVA0BCyAEQQhqIAEgAhChASAAQQhqIARBHGooAgA2AgAgACAEKQIUNwIAIAQoAggiAEUNBiAEKAIMIABBAnQQ3wQMBgsgCVANACABKAIIIQIgASgCBCEBAkACQCAJQoCABFoEQCACRQ0CIAJB/////wNqIQYgAkECdCEDIAJB/////wNxQQFHDQEgASADagwFCyACRQ0BIAmnIQYgAUEEayEBIAJBAnQhA0EAIQUDQCAFQRB0IAEgA2ooAgAiAkEQdnIgBnBBEHQgAkH//wNxciAGcCEFIANBBGsiAw0ACwwFCyABIANqQQhrIQMgBkH/////A3FBAWpB/v///wdxIQVCACEIA0AgAzUCACADQQRqNQIAIAhCIIaEIAmCQiCGhCAJgiEIIANBCGshAyAFQQJrIgUNAAsMAgsgBEEQakG4gMUAKAIANgIAIARBsIDFACkCADcDCAwECyAEQQA2AhggBEEBNgIMIARBsP/EADYCCCAEQgQ3AhAgBEEIakGggMUAEKgEAAsgCEIghiEKIANBCGoLIQMgBkEBcQR+IAgFIAogA0EEazUCAIQgCYILpyEFCyAEQRBqQbiAxQAoAgA2AgAgBEGwgMUAKQIANwMIIAVFDQAgBEEIakGkgcUAEKUDIAQoAgwgBTYCACAEQQE2AhALIAAgBCkDCDcCACAAQQhqIARBEGooAgA2AgALIARBIGokAAvdBQIRfwZ+IwBBwA1rIgIkACACIAEgAUGgAmoiBRC5AiACQaACaiABIAUQ1QEgAkGAA2ogAUHgAGoiByABQYADahDVASACQeADaiABQcABaiIIIAFB4ANqENUBIAJBiAdqIglB8IPAACkDACITNwMAIAJBgAdqIgpB6IPAACkDACIUNwMAIAJB+AZqIgtB4IPAACkDACIVNwMAIAJB8AZqIgxB2IPAACkDACIWNwMAIAJB6AZqIg1B0IPAACkDACIXNwMAIAJBmAdqIg5CADcDACACQaAHaiIPQgA3AwAgAkGoB2oiEEIANwMAIAJBsAdqIhFCADcDACACQbgHaiISQgA3AwAgAkHIg8AAKQMAIhg3A+AGIAJCADcDkAdBAEUEQCACQYAJakEAQeAA/AsACyADRQRAIAJB4AlqIAJB4AZqQeAA/AoAAAsgA0UEQCACQcAKakEAQeAA/AsACyACQeAGaiIEIAJBgAlqIAUQuQIgAkHABGoiBiABIAQQ1QEgAkGgBWoiASAHIAJBwAdqIgUQ1QEgAkGABmoiByAIIAJBoAhqIggQ1QEgBCACQaACaiAGELkCIAYgBCACEI0BIAEgBSACQeAAaiIEEI0BIAcgCCACQcABaiIGEI0BIAkgEzcDACAKIBQ3AwAgCyAVNwMAIAwgFjcDACANIBc3AwAgDkIANwMAIA9CADcDACAQQgA3AwAgEUIANwMAIBJCADcDACACIBg3A+AGIAJCADcDkAcgA0UEQCACQaALakEAQeAA/AsACyADRQRAIAJBgAxqIAJB4AZqQeAA/AoAAAsgA0UEQCACQeAMakEAQeAA/AsACyACQeAGaiIDIAJBoAtqIAIQuQIgACACQcAEaiADEI0BIABB4ABqIAEgBRCNASAAQcABaiAHIAgQjQEgAEGgAmogAiACENUBIABBgANqIAQgBBDVASAAQeADaiAGIAYQ1QEgAkHADWokAAuLBQIJfwJ+IwBBkANrIgUkAAJAAkACQCABKAIIRQRAQdHOxQAtAAAaQQEhBEEBQQEQ1gQiBkUNAiAGQQA6AAAgBUEBNgIEDAELIAVBBGogAUEIELACIAUoAgghBiAFKAIMIgRBAkkNACAEIAZqIQlBACEBIARBAXYiAkEBRwRAIARBAWshByACQf7///8HcSEIA0AgBiAHaiIDLQAAIQIgAyABIAZqIgotAAA6AAAgCiACOgAAIAkgAUF+c2oiAi0AACEDIAIgCkEBaiICLQAAOgAAIAIgAzoAACAHQQJrIQcgCCABQQJqIgFHDQALCyAEQQJxBEAgASAGaiIDLQAAIQIgAyAJIAFBf3NqIgEtAAA6AAAgASACOgAACyAEQaECTw0CC0EAIQEgBUEQakEAQYAD/AsAQRghCANAIAEhA0IAIQtCACEMAkAgBCICIAJBDGsiAUEAIAEgAk0bIgRGDQAgBCAGaiEBQQwgAiACQQxPGyICQQNxIQcCQCACQQFrQQNJBEAMAQsgAkEMcSECA0AgC0IgiEKAgPz/D4MgDEIghoQgC0IQhiILQjCIhCEMIAFBA2oxAAAgAUEBajEAACALIAExAABCCIaEhEIQhiABQQJqMQAAQgiGhIQhCyABQQRqIQEgAkEEayICDQALCyAHRQ0AA0AgDEIIhiALQjiIhCEMIAExAAAgC0IIhoQhCyABQQFqIQEgB0EBayIHDQALCyADQRBqIQEgAyAFQRBqIgNqIgIgCzcDACACIAw3AwggCEEBayIIDQALIAAgA0GAA/wKAAAgBSgCBCIABEAgBiAAEN8ECyAFQZADaiQADwtBAUEBEP8EAAtB1NrCAEEtQYTbwgAQ/gMAC9UFAQd/IwBB0ANrIgIkACACQeACaiIDIAEgASgCDBCpAgJAAkACQAJAAkAgAi0AwAMiBEEDRg0AIAJBgAJqIgUgA0HgAPwKAAAgAiACQcQDaigAADYAmwEgAiACKADBAzYCmAEgBEECRg0AIAJBIGogBUHgAPwKAAAgAiACKACbATYAGyACIAIoApgBNgIYAkAgASgCDCgCAEGAgICAeEcNACABKAIERQ0AIAEoAghFDQMLQdHOxQAtAAAaQaADQQgQ1gQiA0UNAyADIAJBIGpB4AD8CgAAIAMgBDoAYCADIAIoAhg2AGEgA0HkAGogAigAGzYAACACQQE2AhQgAiADNgIQIAJBBDYCDCACQYgBaiABQQhqKQIANwMAIAIgASkCADcDgAEgAkHgAmogAkGAAWogAigCjAEQqQICQCACLQDAAyIFQQNGDQBByQEhBiACQcEDaiIHQQNqIQhBASEBA0AgAkGAAmoiBCACQeACakHgAPwKAAAgAiAIKAAANgD7ASACIAcoAAA2AvgBIAVBAkYNASACQZgBaiAEQeAA/AoAACACIAIoAPsBNgCTASACIAIoAvgBNgKQASACKAIMIAFGBEACQCACKAKMASgCAEGAgICAeEcNACACKAKEAUUNACACKAKIAUUNCAsgAkEMaiABQQFBCEHoABCIAyACKAIQIQMLIAMgBmoiBEHhAGsgAkGYAWpB4AD8CgAAIARBAWsgBToAACAEIAIoApABNgAAIARBA2ogAigAkwE2AAAgAiABQQFqIgE2AhQgAkHgAmogAkGAAWogAigCjAEQqQIgBkHoAGohBiACLQDAAyIFQQNHDQALCyAAQQhqIAJBFGooAgA2AgAgACACKQIMNwIADAELIABBADYCCCAAQoCAgICAATcCAAsgAkHQA2okAA8LQbSbwgAQmgQAC0EIQaADQZCWwgAQyAQAC0G0m8IAEJoEAAvXBQEHfyMAQdAGayICJAAgAkGABWoiAyABIAEoAgwQmAECQAJAAkACQAJAIAItAMAGIgRBA0YNACACQcADaiIFIANBwAH8CgAAIAIgAkHEBmooAAA2APsBIAIgAigAwQY2AvgBIARBAkYNACACQSBqIAVBwAH8CgAAIAIgAigA+wE2ABsgAiACKAL4ATYCGAJAIAEoAgwoAgBBgICAgHhHDQAgASgCBEUNACABKAIIRQ0DC0HRzsUALQAAGkGgBkEIENYEIgNFDQMgAyACQSBqQcAB/AoAACADIAQ6AMABIAMgAigCGDYAwQEgA0HEAWogAigAGzYAACACQQE2AhQgAiADNgIQIAJBBDYCDCACQegBaiABQQhqKQIANwMAIAIgASkCADcD4AEgAkGABWogAkHgAWogAigC7AEQmAECQCACLQDABiIFQQNGDQBBiQMhBiACQcEGaiIHQQNqIQhBASEBA0AgAkHAA2oiBCACQYAFakHAAfwKAAAgAiAIKAAANgC7AyACIAcoAAA2ArgDIAVBAkYNASACQfgBaiAEQcAB/AoAACACIAIoALsDNgDzASACIAIoArgDNgLwASACKAIMIAFGBEACQCACKALsASgCAEGAgICAeEcNACACKALkAUUNACACKALoAUUNCAsgAkEMaiABQQFBCEHIARCIAyACKAIQIQMLIAMgBmoiBEHBAWsgAkH4AWpBwAH8CgAAIARBAWsgBToAACAEIAIoAvABNgAAIARBA2ogAigA8wE2AAAgAiABQQFqIgE2AhQgAkGABWogAkHgAWogAigC7AEQmAEgBkHIAWohBiACLQDABiIFQQNHDQALCyAAQQhqIAJBFGooAgA2AgAgACACKQIMNwIADAELIABBADYCCCAAQoCAgICAATcCAAsgAkHQBmokAA8LQbSbwgAQmgQAC0EIQaAGQZCWwgAQyAQAC0G0m8IAEJoEAAvXBQEHfyMAQdAJayICJAAgAkGgB2oiAyABIAEoAgwQrAECQAJAAkACQAJAIAItAMAJIgRBA0YNACACQYAFaiIFIANBoAL8CgAAIAIgAkHECWooAAA2ANsCIAIgAigAwQk2AtgCIARBAkYNACACQSBqIAVBoAL8CgAA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aiACKAIANgIAIAMgAykCFDcDCAwBCyADQQhqIAggBSAHIAQQ7QILAkAgCUUEQCAGQQEgAygCEBshBgwBCyADQQA2AhAgAygCCCIBQQRJDQAgAygCDCABQQJ0EN8EIANCgICAgMAANwMICyAAIAMpAwg3AgAgACAGOgAMIABBCGogA0EQaigCADYCACADQSBqJAAPCyABIARB+IHAABDIBAALIAEgAkH4gcAAEMgEAAv7BAEGfyMAQSBrIgUkAAJ/IAEoAgAiAwRAIAEoAgQhAiABKAIMIQZBAAwBC0EBCyEEA0ACQAJAAkAgBEUEQCACIAZHDQEgASgCCCIEBEAgAyAEQQV0EN8ECyABQQA2AgBBASEEDAQLAkAgASgCICIERQ0AIAEoAiQiAiABKAIoTw0AIAEgAkEBajYCJAJAAkAgBCgCCCIGIAJLBEBBACEGAkAgBCgCBCACQQxsaiIHKAIIIgRB////P0sNACAEQQV0IgJB+P///wdLDQBBCCEDIAJFDQMgBygCBCEHQdHOxQAtAAAaQQghBiACQQgQ1gQiAw0CIAIhAwsgBiADQfiBwAAQyAQACyACIAZByILAABDZAwALIAJFDQAgAyAHIAL8CgAACyABIAQ2AgggASADNgIEIAEgAzYCACABIAMgBEEFdGoiBjYCDCADIQIMAgsgAAJ+AkAgASgCECICBEAgASgCFCIDIAEoAhxGDQEgASADQSBqNgIUIAVBCGogA0EIaikDADcDACAFQRBqIANBEGopAwA3AwAgBUEYaiADQRhqKQMANwMAIAUgAykDADcDAEIBDAILIABCADcDAAwECyABKAIYIgMEQCACIANBBXQQ3wQLIAFBADYCEEIACzcDACAAIAUpAwA3AwggAEEQaiAFQQhqKQMANwMAIABBGGogBUEQaikDADcDACAAQSBqIAVBGGopAwA3AwAMAgsgASACQSBqNgIEIAAgAikDADcDCCAAQRBqIAJBCGopAwA3AwAgAEEYaiACQRBqKQMANwMAIABBIGogAkEYaikDADcDACAAQgE3AwAMAQtBACEEDAELCyAFQSBqJAALrAQCB38BfiMAQeAGayICJAAgAkGABmoiA0EAQeAA/AsAAkACQCABQcABaiIEIAMQpgRFBEAgAyABQeAAahBeIAJBgANqIAMgBBA/IAJB4ANqIAEQXkEARQRAIAJBoAVqQQBB4AD8CwALIAJBgAZqIgMgBBBeIAJBwARqIgUgAkGgBWoiBiADED8gAyACQeADaiIHIAUQ1QEgByADIAEQPyAGEO4DIAMgBBBeIAUgBiADED8gAyAFIAQQPyAGIAcgAxDVASAFIAJBgANqIAYQjQEgCEUEQCADQQBB4AD8CwALIAJBwARqIAJBgAZqEKYEDQELIAJBgAZqIgNBAEHgAPwLAEIBIQkgASADEKYERQ0BIANBAEHgAPwLACAEIAMQpgRFDQFBACIBRQRAIAJBAEHgAPwLAAsgAkHYAmpCADcDACACQeACakIANwMAIAJB6AJqQgA3AwAgAkHwAmpCADcDACACQfgCakIANwMAIAJByAJqQeC0wgApAwA3AwAgAkHAAmpB2LTCACkDADcDACACQbgCakHQtMIAKQMANwMAIAJBsAJqQci0wgApAwA3AwAgAkGoAmpBwLTCACkDADcDACACQgA3A9ACIAJBuLTCACkDADcDoAIgAUUEQCACQcABakEAQeAA/AsACyABRQRAIAJB4ABqIAJBoAJqQeAA/AoAAAsgAiEBCyAAQQhqIAFBoAL8CgAAQgAhCQsgACAJNwMAIAJB4AZqJAALxgQBC38jAEEQayIGJAAgAC0ADCEKAkACQAJAAkAgACgCCEUEQEHRzsUALQAAGkEBIQJBAUEBENYEIgMNAUEBQQEQ/wQACyAGQQRqIABBChBAIAYoAgghAyAGKAIMIgUEQCADIQAgBUEDcSICBEADQCAAIAAtAAAiB0EwciAHQdcAaiAHQQpJGzoAACAAQQFqIQAgAkEBayICDQALCyADIAVqIQcgBUEETwRAA0AgACAALQAAIgJBMHIgAkHXAGogAkEKSRs6AAAgAEEBaiICIAItAAAiAkEwciACQdcAaiACQQpJGzoAACAAQQJqIgIgAi0AACICQTByIAJB1wBqIAJBCkkbOgAAIABBA2oiAiACLQAAIgJBMHIgAkHXAGogAkEKSRs6AAAgAEEEaiIAIAdHDQALCyAGKAIEIQIgBUEBRg0CQQAhACAFQQF2IgRBAUcEQCAFQQFrIQggBEH+////B3EhCwNAIAMgCGoiBC0AACEJIAQgACADaiIELQAAOgAAIAQgCToAACAHIABBfnNqIgktAAAhDCAJIARBAWoiBC0AADoAACAEIAw6AAAgCEECayEIIAsgAEECaiIARw0ACwsgBUECcUUNAiAAIANqIggtAAAhBCAIIAcgAEF/c2oiAC0AADoAACAAIAQ6AAAMAgsgBigCBCECDAELIANBMDoAACABIApBAEdBAUEAIANBARCJAiEADAELIAEgCkEAR0EBQQAgAyAFEIkCIQAgAkUNAQsgAyACEN8ECyAGQRBqJAAgAAvkBAEIfyMAQcANayIDJAAgA0GoCWpB8IPAACkDADcDACADQaAJakHog8AAKQMANwMAIANBmAlqQeCDwAApAwA3AwAgA0GQCWpB2IPAACkDADcDACADQYgJakHQg8AAKQMANwMAIANBuAlqQgA3AwAgA0HACWpCADcDACADQcgJakIANwMAIANB0AlqQgA3AwAgA0HYCWpCADcDACADQgA3A7AJIANByIPAACkDADcDgAlBAEUEQCADQaALakEAQeAA/AsACyAERQRAIANBgAxqIANBgAlqQeAA/AoAAAsgBEUEQCADQeAMakEAQeAA/AsACyADIAEgAhC5AiADQaACaiIIIAFBoAJqIgQgAkGgAmoiCRC5AiADQeAGaiIKIAEgBBDVASADQcAHaiIGIAFB4ABqIAFBgANqENUBIANBoAhqIgcgAUHAAWogAUHgA2oQ1QEgA0GACWoiBSACIAkQ1QEgA0HgCWoiASACQeAAaiACQYADahDVASADQcAKaiIEIAJBwAFqIAJB4ANqENUBIANBwARqIAogBRC5AiAFIAggA0GgC2oQuQIgACADIAUQ1QEgAEHgAGogA0HgAGogARDVASAAQcABaiADQcABaiAEENUBQQAiAkUEQCAFIANBoAL8CgAACyADQeAGaiADQcAEaiADQYAJaiIFEI0BIAYgA0GgBWogARCNASAHIANBgAZqIAQQjQEgAkUEQCAFIANBoAJqQaAC/AoAAAsgAEGgAmogA0HgBmogA0GACWoQjQEgAEGAA2ogBiABEI0BIABB4ANqIAcgBBCNASADQcANaiQAC8MEAgd/A34jAEEgayIFJAACfwJAAn8CQAJ/AkAgAgRAIAEoAgghBCABKAIEIQggAS0ADCEJAkACQCACQYCABE8EQCAERQ0CIARB/////wNqIQcgBEECdCEGIAKtIQsgBEH/////A3FBAUcNASAGIAhqDAULIARFDQEgCEEEayEHIARBAnQhAwNAIAZBEHQgAyAHaigCACIEQRB2ciACcEEQdCAEQf//A3FyIAJwIQYgA0EEayIDDQALDAULIAYgCGpBCGshAyAHQf////8DcUEBakH+////B3EhAgNAIAM1AgAgA0EEajUCACAKQiCGhCALgkIghoQgC4IhCiADQQhrIQMgAkECayICDQALDAILQQQMBAsgBUEANgIYIAVBATYCDCAFQYScwAA2AgggBUIENwIQIAVBCGpB9JzAABCoBAALIApCIIYhDCADQQhqCyEDIAdBAXEEfiAKBSAMIANBBGs1AgCEIAuCC6chBgtBACEDIAVBEGpB3JrAACgCADYCACAFQdSawAApAgA3AwggBg0BQQQLIQRBASEHQQAMAQsgBUEIakHIm8AAEKUDIAUoAgwgBjYCAEEBIQMgBSgCDCEEIAkhByAFKAIICyECIAEoAgAiAQRAIAggAUECdBDfBAtBASEGAkAgCUEBRwRAIAQhASAHIQYMAQtBBCEBQQAhAyACQQRJBEAgBCEBDAELIAQgAkECdBDfBEEAIQILIAAgBjoADCAAIAM2AgggACABNgIEIAAgAjYCACAFQSBqJAALwwQCB38DfiMAQSBrIgUkAAJ/AkACfwJAAn8CQCACBEAgASgCCCEEIAEoAgQhCCABLQAMIQkCQAJAIAJBgIAETwRAIARFDQIgBEH/////A2ohByAEQQJ0IQYgAq0hCyAEQf////8DcUEBRw0BIAYgCGoMBQsgBEUNASAIQQRrIQcgBEECdCEDA0AgBkEQdCADIAdqKAIAIgRBEHZyIAJwQRB0IARB//8DcXIgAnAhBiADQQRrIgMNAAsMBQsgBiAIakEIayEDIAdB/////wNxQQFqQf7///8HcSECA0AgAzUCACADQQRqNQIAIApCIIaEIAuCQiCGhCALgiEKIANBCGshAyACQQJrIgINAAsMAgtBBAwECyAFQQA2AhggBUEBNgIMIAVBhNHCADYCCCAFQgQ3AhAgBUEIakH00cIAEKgEAAsgCkIghiEMIANBCGoLIQMgB0EBcQR+IAoFIAwgA0EEazUCAIQgC4ILpyEGC0EAIQMgBUEQakG4zMIAKAIANgIAIAVBsMzCACkCADcDCCAGDQFBBAshBEEBIQdBAAwBCyAFQQhqQaTNwgAQpQMgBSgCDCAGNgIAQQEhAyAFKAIMIQQgCSEHIAUoAggLIQIgASgCACIBBEAgCCABQQJ0EN8EC0EBIQYCQCAJQQFHBEAgBCEBIAchBgwBC0EEIQFBACEDIAJBBEkEQCAEIQEMAQsgBCACQQJ0EN8EQQAhAgsgACAGOgAMIAAgAzYCCCAAIAE2AgQgACACNgIAIAVBIGokAAvkBAEIfyMAQcANayIDJAAgA0GoCWpB0JzFACkDADcDACADQaAJakHInMUAKQMANwMAIANBmAlqQcCcxQApAwA3AwAgA0GQCWpBuJzFACkDADcDACADQYgJakGwnMUAKQMANwMAIANBuAlqQgA3AwAgA0HACWpCADcDACADQcgJakIANwMAIANB0AlqQgA3AwAgA0HYCWpCADcDACADQgA3A7AJIANBqJzFACkDADcDgAlBAEUEQCADQaALakEAQeAA/AsACyAERQRAIANBgAxqIANBgAlqQeAA/AoAAAsgBEUEQCADQeAMakEAQeAA/AsACyADIAEgAhC5AiADQaACaiIIIAFBoAJqIgQgAkGgAmoiCRC5AiADQeAGaiIKIAEgBBDVASADQcAHaiIGIAFB4ABqIAFBgANqENUBIANBoAhqIgcgAUHAAWogAUHgA2oQ1QEgA0GACWoiBSACIAkQ1QEgA0HgCWoiASACQeAAaiACQYADahDVASADQcAKaiIEIAJBwAFqIAJB4ANqENUBIANBwARqIAogBRC5AiAFIAggA0GgC2oQuQIgACADIAUQ1QEgAEHgAGogA0HgAGogARDVASAAQcABaiADQcABaiAEENUBQQAiAkUEQCAFIANBoAL8CgAACyADQeAGaiADQcAEaiADQYAJaiIFEI0BIAYgA0GgBWogARCNASAHIANBgAZqIAQQjQEgAkUEQCAFIANBoAJqQaAC/AoAAAsgAEGgAmogA0HgBmogA0GACWoQjQEgAEGAA2ogBiABEI0BIABB4ANqIAcgBBCNASADQcANaiQAC74EAQp/IwBBEGsiBiQAAkACQAJAAkAgACgCACIAKAIIRQRAQdHOxQAtAAAaQQEhAkEBQQEQ1gQiAw0BQQFBARD/BAALIAZBBGogAEEKEEAgBigCCCEDIAYoAgwiBQRAIAMhACAFQQNxIgIEQANAIAAgAC0AACIHQTByIAdB1wBqIAdBCkkbOgAAIABBAWohACACQQFrIgINAAsLIAMgBWohByAFQQRPBEADQCAAIAAtAAAiAkEwciACQdcAaiACQQpJGzoAACAAQQFqIgIgAi0AACICQTByIAJB1wBqIAJBCkkbOgAAIABBAmoiAiACLQAAIgJBMHIgAkHXAGogAkEKSRs6AAAgAEEDaiICIAItAAAiAkEwciACQdcAaiACQQpJGzoAACAAQQRqIgAgB0cNAAsLIAYoAgQhAiAFQQFGDQJBACEAIAVBAXYiBEEBRwRAIAVBAWshCCAEQf7///8HcSEKA0AgAyAIaiIELQAAIQkgBCAAIANqIgQtAAA6AAAgBCAJOgAAIAcgAEF+c2oiCS0AACELIAkgBEEBaiIELQAAOgAAIAQgCzoAACAIQQJrIQggCiAAQQJqIgBHDQALCyAFQQJxRQ0CIAAgA2oiCC0AACEEIAggByAAQX9zaiIALQAAOgAAIAAgBDoAAAwCCyAGKAIEIQIMAQsgA0EwOgAAIAFBAUEBQQAgA0EBEIkCIQAMAQsgAUEBQQFBACADIAUQiQIhACACRQ0BCyADIAIQ3wQLIAZBEGokACAAC5gGAQx+QqnAxomuzpOyMCEGIAEpAwgiAyACKQMIfCIJIANUIAkgASkDECIDIAIpAxB8IgQgA1QgBCABKQMYIgMgAikDGHwiCiADVK18IgUgBFRyrXwiBCAJVHKtIAIpAwAgASkDAHx8IgshAwJAAkACQCALQqnAxomuzpOyMFINAELdsIWM6LaRqLh/IQYgBCEDIARC3bCFjOi2kai4f1INAEKNlcfDltLawJd/IQYgBSIDQo2Vx8OW0trAl39SDQBCx/rzw+2Co5A8IQYgCiIDQsf688PtgqOQPFENAQsgAyAGWg0AIAQhBiAFIQkMAQsgBULz6ri86a2lv+gAfCIGIApCx/rzw+2Co5A8VK0iA30hCSAEQqPP+vOXye7XxwB8IgggBUKNlcfDltLawJd/VCADIAZWcq0iA30hBiALIARC3bCFjOi2kai4f1QgAyAIVnKtfUKpwMaJrs6TsjB9IQsgCkLH+vPD7YKjkDx9IQoLQqnAxomuzpOyMCEHIAEpAygiAyACKQMofCIMIANUIAwgASkDMCIDIAIpAzB8IgQgA1QgBCABKQM4IgMgAikDOHwiCCADVK18IgUgBFRyrXwiBCAMVHKtIAIpAyAgASkDIHx8Ig0hAwJAAkACQCANQqnAxomuzpOyMFINAELdsIWM6LaRqLh/IQcgBCEDIARC3bCFjOi2kai4f1INAEKNlcfDltLawJd/IQcgBSIDQo2Vx8OW0trAl39SDQBCx/rzw+2Co5A8IQcgCCIDQsf688PtgqOQPFENAQsgAyAHWg0AIAQhByAFIQMMAQsgBULz6ri86a2lv+gAfCIOIAhCx/rzw+2Co5A8VK0iB30hAyAEQqPP+vOXye7XxwB8IgwgBUKNlcfDltLawJd/VCAHIA5Wcq0iBX0hByANIARC3bCFjOi2kai4f1QgBSAMVnKtfUKpwMaJrs6TsjB9IQ0gCELH+vPD7YKjkDx9IQgLIAAgCDcDOCAAIAM3AzAgACAHNwMoIAAgDTcDICAAIAo3AxggACAJNwMQIAAgBjcDCCAAIAs3AwALnwQBBn8jAEHgAWsiAiQAIAJB+ABqIgMgARAqAkACQAJAIAIoAnhBAUYEQCACQTBqIAJBqAFqKQMANwMAIAJBKGogAkGgAWopAwA3AwAgAkEgaiACQZgBaikDADcDACACQRhqIAJBkAFqKQMANwMAIAJBEGogAkGIAWopAwA3AwAgAiACKQOAATcDCCACQeAAaiACQdgBaikDADcDACACQdgAaiACQdABaikDADcDACACQdAAaiACQcgBaikDADcDACACQcgAaiACQcABaikDADcDACACQUBrIAJBuAFqKQMANwMAIAIgAikDsAE3AzggAkHsAGogAkEIahDYAiADIAJBOGoQ2AIgAigCdCIBIAIoAoABIgRHDQEgAigCcEEEayEEIAFBAnQhASACKAJ8QQRrIQcDQCACQThqIQMgAUUNBCABIAdqIQUgASAEaiABQQRrIQEoAgAiBiAFKAIAIgVGDQALIAUgBkkNAgwDC0HorsAAEOgEAAsgAkE4aiEDIAEgBE0NAQsgAkEIaiEDCyACKAJ4IgEEQCACKAJ8IAFBAnQQ3wQLIAIoAmwiAQRAIAIoAnAgAUECdBDfBAsgACADKQMANwMAIABBKGogA0EoaikDADcDACAAQSBqIANBIGopAwA3AwAgAEEYaiADQRhqKQMANwMAIABBEGogA0EQaikDADcDACAAQQhqIANBCGopAwA3AwAgAkHgAWokAAu5BAEKfyMAQRBrIgYkAAJAAkACQAJAIAAoAghFBEBB0c7FAC0AABpBASECQQFBARDWBCIDDQFBAUEBEP8EAAsgBkEEaiAAQQoQQCAGKAIIIQMgBigCDCIFBEAgAyEAIAVBA3EiAgRAA0AgACAALQAAIgdBMHIgB0HXAGogB0EKSRs6AAAgAEEBaiEAIAJBAWsiAg0ACwsgAyAFaiEHIAVBBE8EQANAIAAgAC0AACICQTByIAJB1wBqIAJBCkkbOgAAIABBAWoiAiACLQAAIgJBMHIgAkHXAGogAkEKSRs6AAAgAEECaiICIAItAAAiAkEwciACQdcAaiACQQpJGzoAACAAQQNqIgIgAi0AACICQTByIAJB1wBqIAJBCkkbOgAAIABBBGoiACAHRw0ACwsgBigCBCECIAVBAUYNAkEAIQAgBUEBdiIEQQFHBEAgBUEBayEIIARB/v///wdxIQoDQCADIAhqIgQtAAAhCSAEIAAgA2oiBC0AADoAACAEIAk6AAAgByAAQX5zaiIJLQAAIQsgCSAEQQFqIgQtAAA6AAAgBCALOgAAIAhBAmshCCAKIABBAmoiAEcNAAsLIAVBAnFFDQIgACADaiIILQAAIQQgCCAHIABBf3NqIgAtAAA6AAAgACAEOgAADAILIAYoAgQhAgwBCyADQTA6AAAgAUEBQQFBACADQQEQiQIhAAwBCyABQQFBAUEAIAMgBRCJAiEAIAJFDQELIAMgAhDfBAsgBkEQaiQAIAALtAQCCH4BfyMAQdAAayIKJAAgCkEwaiABKQMYIgNCAEL/////D0IAEMkDIApBQGsgA0IAQoGAgIBwQgAQyQMgCiADIAEpAxAiAnwiBCAKKQMwfCIDQgBCgYCAgHBCABDJAyAKQRBqIANCIIYiBSADIARUrSAKKQM4IAIgBFatfHwiBiABKQMIfCIHfCIEQgBCgYCAgHBCABDJAyAKQSBqIARCIIYiCCAEIAVUrSADQiCIfCIFIAopA0AiCSABKQMAfCICIAYgB1atfCIGfCIHfCIDQgBCgYCAgHBCABDJAwJAIAopAyggCikDGCAKKQMIIAIgBlatIAopA0ggAiAJVK18fCIGIAopAwB8IgIgBlStfCACIAUgB1atfCIFIAJUrXwiBiAKKQMQfCICIAZUrXwgAiACIAMgCFStIARCIIh8IgQgBXwiBSAEVK18IgJWrXwiBiAKKQMgfCIEIAZUrXwgBCACIANCIIYiAiAFfCIFIAJUrSADQiCIfCIDfCICIANUrXwiAyAEVK18IgZCgYCAgHBSBEAgAyEEDAELAkAgAkL/////D1YNAEIAIQQgA0IAUg0AQoGAgIBwIQYgBUJ/UiACQv////8PUnINAQtCf0IAIAMgAkL/////D1QgAkL/////D30iBCAFQn9SrSICVHKtIgdUGyEGIAQgAn0hAiADIAd9IQQgBUIBfCEFCyAAIAU3AxggACACNwMQIAAgBDcDCCAAIAY3AwAgCkHQAGokAAuDBAEGfyMAQdABayIEJAACQCABKAIAIgIgASgCBCIGRwRAIARBiQFqIQUDQCABIAJBGGoiBzYCACAEQZABaiIIIAIQ9wIgBEGwAWoiCSACQQxqEPcCIARByABqIAggCRBDAkACQCAELQCIASICQQJGBEAgAygCACIBQYCAgIB4RiABRXJFBEAgAygCBCABEN8ECyADIAQpA0g3AgAgA0EIaiAEQdAAaigCADYCAAwBCyAEQRBqIARB0ABqKQMANwMAIARBGGogBEHYAGopAwA3AwAgBEEgaiAEQeAAaikDADcDACAEQShqIARB6ABqKQMANwMAIARBMGogBEHwAGopAwA3AwAgBEE4aiAEQfgAaikDADcDACAEQUBrIARBgAFqKQMANwMAIAQgBCkDSDcDCCAEIAUoAAA2AgAgBCAFQQNqKAAANgADIAJBA0YNAQsgACAEKQMINwMAIAAgBCgCADYAQSAAQcQAaiAEKAADNgAAIABBOGogBEFAaykDADcDACAAQTBqIARBOGopAwA3AwAgAEEoaiAEQTBqKQMANwMAIABBIGogBEEoaikDADcDACAAQRhqIARBIGopAwA3AwAgAEEQaiAEQRhqKQMANwMAIABBCGogBEEQaikDADcDAAwDCyAHIgIgBkcNAAsLQQMhAgsgACACOgBAIARB0AFqJAALqAQBBH8jAEGAAWsiBCQAAkACQAJAIAEoAggiAkGAgIAQcUUEQCACQYCAgCBxDQFBASECIAAoAgBBASABEN4CRQ0CDAMLIAAoAgAhAgNAIAMgBGpB/wBqIAJBD3EiBUEwciAFQdcAaiAFQQpJGzoAACADQQFrIQMgAkEQSSACQQR2IQJFDQALQQEhAiABQQFB+7fFAEECIAMgBGpBgAFqQQAgA2sQiQJFDQEMAgsgACgCACECA0AgAyAE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NgIgIAYgBTYCHCAGIAM2AhggASgCLCIDQQJ0IQRBACEFIANB/////wNLIARB/P///wdLcg0BIAEoAighAgJ/IARFBEBBBCEBQQAMAQtB0c7FAC0AABpBBCEFIARBBBDWBCIBRQ0CIAMLIQUgBARAIAEgAiAE/AoAAAsgBiADNgIsIAYgATYCKCAGIAU2AiQgAEEENgIIIAAgBjYCBCAAQQQ2AgAPC0EEQTAQ/wQACyAFIARB+IHAABDIBAALIAMgAkH4gcAAEMgEAAuhBAEHfyMAQbACayIDJAACQAJAAkAgASgCBCIFBEAgASgCCCIGRQ0CIANByQFqIQcgASgCACEEA0AgASAFIAYgBSAFIAZLGyIIayIFNgIEIAEgBCAIQTBsaiIJNgIAIANB+AFqIARBKGopAwA3AwAgA0HwAWogBEEgaikDADcDACADQegBaiAEQRhqKQMANwMAIANB4AFqIARBEGopAwA3AwAgA0HYAWogBEEIaikDADcDACADIAQpAwA3A9ABIAhBAUYNBCADQagCaiAEQdgAaikDADcDACADQaACaiAEQdAAaikDADcDACADQZgCaiAEQcgAaikDADcDACADQZACaiAEQUBrKQMANwMAIANBiAJqIARBOGopAwA3AwAgAyAEKQMwNwOAAiADQegAaiADQdABaiADQYACakEAEDECQAJAIAMtAMgBIgRBAkYEQCACKAIAIgFBgICAgHhGIAFFckUEQCACKAIEIAEQ3wQLIAIgAykDaDcCACACQQhqIANB8ABqKAIANgIADAELIAMgBygAADYCACADIAdBA2ooAAA2AAMgA0EIaiADQegAakHgAPwKAAAgBEEDRg0BCyAAIANBCGpB4AD8CgAAIABB5ABqIAMoAAM2AAAgACADKAIANgBhDAMLIAkhBCAFDQALC0EDIQQLIAAgBDoAYCADQbACaiQADwtBAEEAQaD6wAAQ2QMAC0EBQQFBsPrAABDZAwALxAQCBX8BfiMAQSBrIgIkACABLQAMIgVFBEACQCABKAIIIgQEQCABKAIEIQMgBEECdCEEA0AgAygCAA0CIAdCIHwhByADQQRqIQMgBEEEayIEDQALC0GUiMUAQRxBlInFABDoAwALIAcgAygCAGithFAhAwsCQAJAIAEoAgBBgICAgHhHBEAgASgCCA0BIAJBCGogAUEI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BDYCDCACIAY2AggMAgsgBCgCCA0AIAJBADYCECACQoCAgIDAADcCCAwBCyACIAM2AhwgAiAENgIYIAIgBjYCFCACQQhqIAJBFGpBACABaBDPAQsgACACKQIINwIAIABBCGogAkEQaigCADYCAAsgAkEgaiQAC7UFAQ9+An4gAUGAoMUAQTAQ8QMEQEL//8+K6///1R4gASkDICIKfSIFIAEpAygiC0Kr1f7///+//7l/Vq0iBn0hDkKk7MO1j9S0mOcAIAEpAxgiA30iByAFIAZUIApC///Piuv//9UeVnKtIgV9IQpCv6WUnM/w0rvkACABKQMQIgZ9IgggBSAHViADQqTsw7WP1LSY5wBWcq0iA30hBULX2a6a5PbpjcsAIAEpAwgiB30iAiADIAhWIAZCv6WUnM/w0rvkAFZyrSIDfSEGQqvV/v///7//uX8gC30hC0Kazf/Lo73EgBogASkDACACIANUIAdC19mumuT26Y3LAFZyrXx9DAELIAEpAyghCyABKQMgIQ4gASkDGCEKIAEpAxAhBSABKQMIIQYgASkDAAshAwJ+IAFBMGpBgKDFAEEwEPEDBEBC///Piuv//9UeIAEpA1AiCH0iAiABKQNYIgxCq9X+////v/+5f1atIgl9IQdCpOzDtY/UtJjnACABKQNIIgR9Ig0gAiAJVCAIQv//z4rr///VHlZyrSICfSEIQr+llJzP8NK75AAgASkDQCIJfSIPIAIgDVYgBEKk7MO1j9S0mOcAVnKtIgR9IQJC19mumuT26Y3LACABKQM4Ig19IhAgBCAPViAJQr+llJzP8NK75ABWcq0iBH0hCUKr1f7///+//7l/IAx9IQxCms3/y6O9xIAaIAEpAzAgBCAQViANQtfZrprk9umNywBWcq18fQwBCyABKQNYIQwgASkDUCEHIAEpA0ghCCABKQNAIQIgASkDOCEJIAEpAzALIQQgACAMNwNYIAAgBzcDUCAAIAg3A0ggACACNwNAIAAgCTcDOCAAIAQ3AzAgACALNwMoIAAgDjcDICAAIAo3AxggACAFNwMQIAAgBjcDCCAAIAM3AwALowMBBH8jAEHAA2siBCQAIAQgARBhIARBgAJqIgUgBCAEEDggBEHAAmoiBiABIAEQoAIgBEFAayIHIAUgBhDcASAGIAEgBxDcASAFIAQgBhA4IARBwAFqIAUgAUFAayIHENwBIARBiAFqIARByABqKQMANwMAIARBkAFqIARB0ABqKQMANwMAIARBmAFqIARB2ABqKQMANwMAIARBoAFqIARB4ABqKQMANwMAIARBqAFqIARB6ABqKQMANwMAIARBsAFqIARB8ABqKQMANwMAIARBuAFqIARB+ABqKQMANwMAIARBiANqIARBCGopAwA3AwAgBEGQA2ogBEEQaikDADcDACAEQZgDaiAEQRhqKQMANwMAIAQgBCkDQDcDgAEgBCAEKQMANwOAAyAEQbgDaiAEQThqKQMANwMAIARBsANqIARBMGopAwA3AwAgBEGoA2ogBEEoaikDADcDACAEIAQpAyA3A6ADIAYgBCABEDggBSAGIAcQ3AEgAEGAAWogBEGAA2ogBSACIAMQGSAAIARBgAFqQYAB/AoAACAEQcADaiQAC+0DAQl/IwBBEGsiAyQAAkACQAJAIAEoAghFBEBB0c7FAC0AABpBASEBQQFBARDWBCICRQ0DIAJBADoAACADQQE2AgwgAyACNgIIIANBATYCBAwBCyADQQRqIAFBCBCwAiADKAIMIgFBAkkNACADKAIIIgUgAWohCCABQQF2IgRBAUcEQCABQQFrIQYgBEH+////B3EhCQNAIAUgBmoiBC0AACEHIAQgAiAFaiIELQAAOgAAIAQgBzoAACAIIAJBfnNqIgctAAAhCiAHIARBAWoiBC0AADoAACAEIAo6AAAgBkECayEGIAkgAkECaiICRw0ACwsgAUECcQRAIAIgBWoiBi0AACEEIAYgCCACQX9zaiICLQAAOgAAIAIgBDoAAAsgAUEfSw0BCwNAIAMoAgQgAUYEQCADQQRqQbCewgAQtgMLIAMoAgghAiABBEAgAkEBaiACIAH8CgAACyACQQA6AAAgAyABQQFqIgI2AgwgAUEfSSACIQENAAsgAygCCCEFCyAAKAIAIAAoAggiAmsgAUkEQCAAIAIgAUEBQQEQiAMgACgCCCECCyABBEAgACgCBCACaiAFIAH8CgAACyAAIAEgAmo2AgggAygCBCIABEAgAygCCCAAEN8ECyADQRBqJAAPC0EBQQEQ/wQAC9MDAgZ/An4jAEFAaiIDJAAgA0EgakIANwMAIANBGGpCADcDACADQRBqQgA3AwAgA0IANwMIAkACQCACQQJLBEAgAS0AAEEw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FXwiEyAOVK18IhQgAikDkBZ8Ig4gFFStfCAOIAsgDnwiFFatfCILUA0AIAsgEnwiEiALWg0AIAsgElatIgsgEXwiESALWg0AIAsgEVatIgsgD3wiDyALVCEHCyACQYAWaiAMQv3/8//P///5iX9+IgtCAEKr1f7///+//7l/QgAQyQMgAkHwFWogC0IAQv//z4rr///VHkIAEMkDIAJB4BVqIAtCAEKk7MO1j9S0mOcAQgAQyQMgAkHQFWogC0IAQr+llJzP8NK75ABCABDJAyACQcAVaiALQgBC19mumuT26Y3LAEIAEMkDIAJBsBVqIAtCAEKazf/Lo73EgBpCABDJAyACKQO4FSACKQPIFSACKQPYFSACKQPoFSACKQP4FSACKQOIFiACKQOAFiILIAx8IAtUrXwiDiACKQPwFXwiCyAOVK18IAsgDXwiDiALVK18IgwgAikD4BV8IgsgDFStfCALIBB8IgwgC1StfCINIAIpA9AVfCILIA1UrXwgCyATfCINIAtUrXwiECACKQPAFXwiCyAQVK18IAsgFHwiECALVK18IhMgAikDsBV8IgsgE1StfCALIBJ8IhMgC1StfCILUEUEQCALIBF8IhEgC1QiA60iCyAPfCISIA8gAxshDyADIAsgElZxIQMLIAJBoBVqIA5C/f/z/8////mJf34iC0IAQqvV/v///7//uX9CABDJAyACQZAVaiALQgBC///Piuv//9UeQgAQyQMgAkGAFWogC0IAQqTsw7WP1LSY5wBCABDJAyACQfAUaiALQgBCv6WUnM/w0rvkAEIAEMkDIAJB4BRqIAtCAELX2a6a5PbpjcsAQgAQyQMgAkHQFGogC0IAQprN/8ujvcSAGkIAEMkDIAIpA9gUIAIpA+gUIAIpA/gUIAIpA4gVIAIpA5gVIAIpA6gVIAIpA6AVIgsgDnwgC1StfCIOIAIpA5AVfCILIA5UrXwgCyAMfCISIAtUrXwiCyACKQOAFXwiDiALVK18IA4gDSAOfCILVq18Ig4gAikD8BR8IgwgDlStfCAMIAwgEHwiDlatfCINIAIpA+AUfCIMIA1UrXwgDCATfCINIAxUrXwiECACKQPQFHwiDCAQVK18IAwgEXwiESAMVK18IgwgD3wiEyAPIAxCAFIiBhshEAJAAkAgBSAJciAKciAHciADciAMIBNWIgOt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DiACKQPwDiILIAx8IAtUrXwiDiACKQPgDnwiCyAOVK18IAsgDXwiDiALVK18IgwgAikD0A58IgsgDFStfCALIBB8IgwgC1StfCINIAIpA8AOfCILIA1UrXwgCyATfCINIAtUrXwiECACKQOwDnwiCyAQVK18IAsgFHwiECALVK18IhMgAikDoA58IgsgE1StfCALIBJ8IhMgC1StfCILUEUEQCALIBF8IhEgC1QiA60iCyAPfCISIA8gAxshDyADIAsgElZxIQMLIAJBkA5qIA5C/f/z/8////mJf34iC0IAQqvV/v///7//uX9CABDJAyACQYAOaiALQgBC///Piuv//9UeQgAQyQMgAkHwDWogC0IAQqTsw7WP1LSY5wBCABDJAyACQeANaiALQgBCv6WUnM/w0rvkAEIAEMkDIAJB0A1qIAtCAELX2a6a5PbpjcsAQgAQyQMgAkHADWogC0IAQprN/8ujvcSAGkIAEMkDIAIpA8gNIAIpA9gNIAIpA+gNIAIpA/gNIAIpA4gOIAIpA5gOIAIpA5AOIgsgDnwgC1StfCIOIAIpA4AOfCILIA5UrXwgCyAMfCISIAtUrXwiCyACKQPwDXwiDiALVK18IA4gDSAOfCILVq18Ig4gAikD4A18IgwgDlStfCAMIAwgEHwiDlatfCINIAIpA9ANfCIMIA1UrXwgDCATfCINIAxUrXwiECACKQPADXwiDCAQVK18IAwgEXwiESAMVK18IgwgD3wiEyAPIAxCAFIiBhshEAJAAkAgBSAJciAKciAHciADciAMIBNWIgOtIAwgBhtCAFJyIAMgBnEgEEKazf/Lo73EgBpWcnINAAJAIBBCms3/y6O9xIAaUg0AIBFC19mumuT26Y3LAFYNASARQtfZrprk9umNywBSDQAgDUK/pZScz/DSu+QAVg0BIA1Cv6WUnM/w0rvkAFINACAOQqTsw7WP1LSY5wBWDQEgDkKk7MO1j9S0mOcAUg0AIAtC///Piuv//9UeVg0BIAtC///Piuv//9UeUg0AIBJCqtX+////v/+5f1YNAQsgCyEPIA4hCyANIQwgESEODAELIAtC///Piuv//9UefSIMIBJCq9X+////v/+5f1StIhN9IQ8gDkKk7MO1j9S0mOcAfSIUIAtC///Piuv//9UeVCAMIBNUcq0iDH0hCyANQr+llJzP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rXwiECACKQPgAXwiDiAQVK18IA4gFHwiECAOVK18IhMgAikD0AF8Ig4gE1StfCAOIBV8IhMgDlStfCIUIAIpA8ABfCIOIBRUrXwgDiALIA58IhRWrXwiC1ANACALIBJ8IhIgC1oNACALIBJWrSILIBF8IhEgC1oNACALIBFWrSILIA98Ig8gC1QhAwsgAkGwAWogDEL9//P/z///+Yl/fiILQgBCq9X+////v/+5f0IAEMkDIAJBoAFqIAtCAEL//8+K6///1R5CABDJAyACQZABaiALQgBCpOzDtY/UtJjnAEIAEMkDIAJBgAFqIAtCAEK/pZScz/DSu+QAQgAQyQMgAkHwAGogC0IAQtfZrprk9umNywBCABDJAyACQeAAaiALQgBCms3/y6O9xIAaQgAQyQNBACEFIAIpA2ggAikDeCACKQOIASACKQOYASACKQOoASACKQO4ASACKQOwASILIAx8IAtUrXwiDiACKQOgAXwiCyAOVK18IAsgDXwiDiALVK18IgwgAikDkAF8IgsgDFStfCALIBB8IgwgC1StfCINIAIpA4ABfCILIA1UrXwgCyATfCINIAtUrXwiECACKQNwfCILIBBUrXwgCyAUfCIQIAtUrXwiEyACKQNgfCILIBNUrXwgCyASfCITIAtUrXwiC1BFBEAgCyARfCIRIAtUIgWtIgsgD3wiEiAPIAUbIQ8gBSALIBJWcSEFCyACQdAAaiAOQv3/8//P///5iX9+IgtCAEKr1f7///+//7l/QgAQyQMgAkFAayALQgBC///Piuv//9UeQgAQyQMgAkEwaiALQgBCpOzDtY/UtJjnAEIAEMkDIAJBIGogC0IAQr+llJzP8NK75ABCABDJAyACQRBqIAtCAELX2a6a5PbpjcsAQgAQyQMgAiALQgBCms3/y6O9xIAaQgAQyQMgAikDCCACKQMYIAIpAyggAikDOCACKQNIIAIpA1ggAikDUCILIA58IAtUrXwiDiACKQNAfCILIA5UrXwgCyAMfCISIAtUrXwiCyACKQMwfCIOIAtUrXwgDiANIA58IgtWrXwiDiACKQMgfCIMIA5UrXwgDCAMIBB8Ig5WrXwiDSACKQMQfCIMIA1UrXwgDCATfCINIAxUrXwiECACKQMAfCIMIBBUrXwgDCARfCIRIAxUrXwiDCAPfCITIA8gDEIAUiIG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DAELIAYhBANAIAVBCGogAkEIaigCADYCACAFIAIpAgA3AwAgBCAFELsDNgIAIARBBGohBCACQQxqIgIgA0cNAAsLIAFChICAgMAANwIAIAFCgICAgMAANwIIIAMgAmtBDG4hASACIANHBEADQCACKAIAIgMEQCACQQRqKAIAIANBAnQQ3wQLIAJBDGohAiABQQFrIgENAAsLIAAgBjYCBCAAIAdBA2w2AgAgACAEIAZrQQJ2NgIIIAVBEGokAAvfAQEBfyABIAEoAgAiAUHgAGo2AgAjAEHgAGsiAkEoaiABQShqKQMANwMAIAJBIGogAUEgaikDADcDACACQRhqIAFBGGopAwA3AwAgAkEQaiABQRBqKQMANwMAIAJBCGogAUEIaikDADcDACACQThqIAFBOGopAwA3AwAgAkFAayABQUBrKQMANwMAIAJByABqIAFByABqKQMANwMAIAJB0ABqIAFB0ABqKQMANwMAIAJB2ABqIAFB2ABqKQMANwMAIAIgASkDADcDACACIAEpAzA3AzAgACACQeAA/AoAAAvBAQEBfyMAQZABayIDJAAgA0HIAGogAhAuIAACfiADKAJIQQFGBEAgAEIANwMIQgEMAQsgA0EgaiADQegAaikDADcDACADQShqIANB8ABqKQMANwMAIANBMGogA0H4AGopAwA3AwAgA0E4aiADQYABaikDADcDACADQUBrIANBiAFqKQMANwMAIAMgAykDYDcDGCADIAMpA1g3AxAgAyADKQNQNwMIIABBCGogASADQQhqEDhCAAs3AwAgA0GQAWokAAvVAQEHfwJAIAEEQCABQQJ0IQQDQAJAIAAoAgAiAkGEAUkNACAC0G8mARCDAyIBKAIMIQcgASgCECEDIAFCADcCDCABKAIIIQUgASgCBCEGIAFCBDcCBCABKAIAIQggAUEANgIAIAIgA0kNAyACIANrIgIgBU8NAyAGIAJBAnRqIAc2AgAgASADNgIQIAEgAjYCDCABIAU2AgggASgCBCABIAY2AgQgASgCACECIAEgCDYCACACRQ0AIAJBAnQQ3wQLIABBBGohACAEQQRrIgQNAAsLDwsAC84BAQJ/IwBBEGsiAiQAIAAoAgAhACACQQRqIgMgARCqBCACIAA2AgwgAyACQQxqQeiVwQAQjgMgAiAAQQhqNgIMIAJBBGogAkEM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BAsL2wsCD38IfiMAQTBrIgMkACADQYCAgIB4NgIMIAMgAjYCKCADIAE2AiQgAyADQQxqNgIsIANBGGohDyMAQdACayIBJAAgAUGAAmoiCiADQSRqIgQgAUHPAmoiBSAEKAIIEKQCAkACQAJAAkAgAS0AwAIiBkEDRg0AIAFB+AFqIgIgAUG4AmopAwA3AwAgAUHwAWoiCyABQbACaikDADcDACABQegBaiIMIAFBqAJqKQMANwMAIAFB4AFqIgcgAUGgAmopAwA3AwAgAUHYAWoiCCABQZgCaikDADcDACABQdABaiIJIAFBkAJqKQMANwMAIAFByAFqIg0gAUGIAmopAwA3AwAgASABKQOAAjcDwAEgASABKADBAjYCeCABIAFBxAJqKAAANgB7IAZBAkYNACABQdgAaiIOIAIpAwA3AwAgAUHQAGoiECALKQMANwMAIAFByABqIgsgDCkDADcDACABQUBrIgwgBykDADcDACABQThqIgcgCCkDADcDACABQTBqIgggCSkDADcDACABQShqIgkgDSkDADcDACABIAEpA8ABNwMgIAEgASgCeDYCGCABIAEoAHs2ABtB0c7FAC0AABpBoAJBCBDWBCICRQ0CIAIgASkDIDcDACACIAY6AEAgAiABKAIYNgBBIAJBxABqIAEoABs2AAAgAkE4aiAOKQMANwMAIAJBMGogECkDADcDACACQShqIAspAwA3AwAgAkEgaiAMKQMANwMAIAJBGGogBykDADcDACACQRBqIAgpAwA3AwAgAkEIaiAJKQMANwMAIAFBATYCFCABIAI2AhAgAUEENgIMIAFB6ABqIARBCGooAgAiBjYCACABIAQpAgA3A2AgCiABQeAAaiAFIAYQpAICQCABLQDAAiIEQQNGDQBBiQEhCiABQcECaiILQQNqIQxBASEGA0AgAUH4AWoiBSABQbgCaikDADcDACABQfABaiIHIAFBsAJqKQMANwMAIAFB6AFqIgggAUGoAmopAwA3AwAgAUHgAWoiCSABQaACaikDADcDACABQdgBaiINIAFBmAJqKQMANwMAIAFB0AFqIg4gAUGQAmopAwA3AwAgAUHIAWoiECABQYgCaikDADcDACABIAEpA4ACNwPAASABIAsoAAA2ArgBIAEgDCgAADYAuwEgBEECRg0BIAFBsAFqIhEgBSkDADcD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DiIAIAJBBGpqIAItAA8gAGsgBCgCDBEDAEUNAEEBDAELIANBJyABEQIACyACQRBqJAALiAEAIAEgASgCACIBQUBrNgIAIAAgASkDADcDACAAQQhqIAFBCGopAwA3AwAgAEEQaiABQRBqKQMANwMAIABBGGogAUEYaikDADcDACAAQSBqIAEpAyA3AwAgAEEoaiABQShqKQMANwMAIABBMGogAUEwaikDADcDACAAQThqIAFBOGopAwA3AwALjwEBBH8gASgCCCIEQQJ0IQICQCAEQf////8DSyACQfz///8HS3INACABKAIEIQUCfyACRQRAQQQhAUEADAELQdHOxQAtAAAaQQQhAyACQQQQ1gQiAUUNASAECyEDIAIEQCABIAUgAvwKAAALIAAgBDYCCCAAIAE2AgQgACADNgIADwsgAyACQfiBwAAQyAQAC3cBBH8gACgCBCEDIAAoAggiBARAIAMhAQNAIAEoAgAiAgRAIAFBBGooAgAgAkECdBDfBAsgAUEMaigCACICBEAgAUEQaigCACACQQJ0EN8ECyABQRhqIQEgBEEBayIEDQALCyAAKAIAIgAEQCADIABBGGwQ3wQLC48BAQR/IAEoAggiBEECdCECAkAgBEH/////A0sgAkH8////B0tyDQAgASgCBCEFAn8gAkUEQEEEIQFBAAwBC0HRzsUALQAAGkEEIQMgAkEEENYEIgFFDQEgBAshAyACBEAgASAFIAL8CgAACyAAIAQ2AgggACABNgIEIAAgAzYCAA8LIAMgAkGkg8UAEMgEAAt+AgF/An4jAEHQAWsiAyQAIANB6ABqIAIQPSAAAn4gAygCaEEBRgRAIABCADcDCEIBDAELIAMpA3AhBCADKQN4IQUgA0EYaiADQYABakHQAPwKAAAgAyAFNwMQIAMgBDcDCCAAQQhqIAEgA0EIahA/QgALNwMAIANB0AFqJAALeAEDfyMAQYABayIDJAAgAC0AACEEQQAhAANAIAAgA2pB/wBqIARBD3EiAkEwciACQTdqIAJBCkkbOgAAIABBAWshACAEIgJBBHYhBCACQQ9LDQALIAFBAUH7t8UAQQIgACADakGAAWpBACAAaxCJAiADQYABaiQAC3oCAX4CfyMAQYABayIEJAAgACkDACECQQAhAANAIAAgBGpB/wBqIAKnQQ9xIgNBMHIgA0HX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CGoiEiALQfAFaikDADcDACALQbgIaiIOIAtB6AVqKQMANwMAIAsgCykD4AU3A7AIIAtBqAhqIhAgC0HYBWopAwA3AwAgC0GgCGoiESALQdAFaikDADcDACALIAspA8gFNwOYCCALQZAIaiITIAtBwAVqKQMANwMAIAtBiAhqIhQgC0G4BWopAwA3AwAgCyALKQOwBTcDgAggC0H4B2oiGSALQagFaikDADcDACALQfAHaiIXIAtBoAVqKQMANwMAIAsgCykDmAU3A+gHIAtB4AdqIhogC0GQBWopAwA3AwAgC0HYB2oiICALQYgFaikDADcDACALIAspA4AFNwPQByALQcgHaiIdIAtB+ARqKQMANwMAIAtBwAdqIicgC0HwBGopAwA3AwAgCyALKQPoBDcDuAcgC0GwB2oiHyALQeAEaikDADcDACALQagHaiIkIAtB2ARqKQMANwMAIAsgCykD0AQ3A6AHIAtBmAdqIiEgC0HIBGopAwA3AwAgC0GQB2oiKyALQcAEaikDADcDACALIAspA7gENwOIByALQYAHaiIiIAtBsARqKQMANwMAIAtB+AZqIiwgC0GoBGopAwA3AwAgCyALKQOgBDcD8AYgC0HoBmoiGyALQZgEaikDADcDACALQeAGaiItIAtBkARqKQMANwMAIAsgCykDiAQ3A9gGIAtB0AZqIiUgC0GABGopAwA3AwAgC0HIBmoiLiALQfgDaikDADcDACALIAspA/ADNwPABiAJIAspA9gDNwLoAiAJQfACaiALQeADaikDADcCACAJQfgCaiALQegDaikDADcCACAJIAspA8ADNwKAAyAJQYgDaiALQcgDaikDADcCACAJQZADaiALQdADaikDADcCACAJQagDaiALQbgDaikDADcCACAJQaADaiALQbADaikDADcCACAJIAspA6gDNwKYAyAJQcADaiALQaADaikDADcCACAJQbgDaiALQZgDaikDADcCACAJIAspA5ADNwKwAyAJQdgDaiALQYgDaikDADcCACAJQdADaiALQYADaikDADcCACAJIAspA/gCNwLIAyAJQfADaiALQfACaikDADcCACAJQegDaiALQegCaikDADcCACAJIAspA+ACNwLgAyAJQYgEaiALQdgCaikDADcCACAJQYAEaiALQdACaikDADcCACAJIAspA8gCNwL4AyAJQaAEaiALQcACaikDADcCACAJQZgEaiALQbgCaikDADcCACAJIAspA7ACNwKQBCAJQbgEaiALQagCaikDADcCACAJQbAEaiALQaACaikDADcCACAJIAspA5gCNwKoBCAJQdAEaiALQZACaikDADcCACAJQcgEaiALQYgCaikDADcCACAJIAspA4ACNwLABCAJQegEaiALQfgBaikDADcCACAJQeAEaiALQfABaikDADcCACAJIAspA+gBNwLYBCAJQYAFaiALQeABaikDADcCACAJQfgEaiALQdgBaikDADcCACAJIAspA9ABNwLwBCAJQZgFaiALQcgBaikDADcCACAJQZAFaiALQcABaikDADcCACAJIAspA7gBNwKIBSAJIMoBNwIQIAkgBzYCDCAJIAo2AgggCSAMNgIEIAkgDzYCACALKAJ8IQogCygCgAEhByALKAKEASEMIAkgCykCTDcCoAUgCUGoBWogC0HUAGooAgA2AgAgCSALKQPACzcCGCAJQSBqIAgpAwA3AgAgCUEoaiAFKQMANwIAIAlBQGsgDSkDADcCACAJQThqIAMpAwA3AgAgCSALKQPgCDcCMCAJQdgAaiAEKQMANwIAIAlB0ABqIAYpAwA3AgAgCSALKQPICDcCSCAJQfAAaiASKQMANwIAIAlB6ABqIA4pAwA3AgAgCSALKQOwCDcCYCAJQYgBaiAQKQMANwIAIAlBgAFqIBEpAwA3AgAgCSALKQOYCDcCeCAJQaABaiATKQMANwIAIAlBmAFqIBQpAwA3AgAgCSALKQOACDcCkAEgCUG4AWogGSkDADcCACAJQbABaiAXKQMANwIAIAkgCykD6Ac3AqgBIAlB0AFqIBopAwA3AgAgCUHIAWogICkDADcCACAJIAspA9AHNwLAASAJQegBaiAdKQMANwIAIAlB4AFqICcpAwA3AgAgCSALKQO4BzcC2AEgCUGAAmogHykDADcCACAJQfgBaiAkKQMANwIAIAkgCykDoAc3AvABIAlBmAJqICEpAwA3AgAgCUGQAmogKykDADcCACAJIAspA4gHNwKIAiAJQbACaiAiKQMANwIAIAlBqAJqICwpAwA3AgAgCSALKQPwBjcCoAIgCUHIAmogGykDADcCACAJQcACaiAtKQMANwIAIAkgCykD2AY3ArgCIAlB4AJqICUp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NwMAIA5BgARqIAdB8ABqKQIANwMAIA5B4ANqIAdBgAFqKQIANwMAIA5B6ANqIAdBiAFqKQIANwMAIA4gBykCSDcDiAQgDiAHKQJgNwPwAyAOIAcpAng3A9gDIA5B0ANqIAdBoAFqKQIANwMAIA5ByANqIAdBmAFqKQIANwMAIA5BuANqIAdBuAFqKQIANwMAIA5BsANqIAdBsAFqKQIANwMAIA5BoANqIAdB0AFqKQIANwMAIA5BmANqIAdByAFqKQIANwMAIA4gBykCkAE3A8ADIA4gBykCqAE3A6gDIA4gBykCwAE3A5ADIAwEQCAHIAxBGGwQ3wQLIClBgICAgHhHDQEgFiEMIBghBwsgDiAgNgLMQSAOIAc2AshBIA4gDDYCxEFBypnCAEErIA5BxMEAakHUnMIAQYCkwgAQygMACyAOQeABaiAOQcgdaikDADcDACAOQdgBaiAOQcAdaikDADcDACAOQfABaiAOQfg4aikDADcDACAOQfgBaiAOQYA5aikDADcDACAOQYgCaiAOQZAEaikDADcDACAOQZACaiAOQZgEaikDADcDACAOIA4pA7gdNwPQASAOIA4pA/A4NwPoASAOIA4pA4gENwOAAiAOQagCaiAOQYAEaikDADcDACAOQaACaiAOQfgDaikDADcDACAOQbgCaiAOQeADaikDADcDACAOQcACaiAOQegDaikDADcDACAOQdACaiAOQcgDaikDADcDACAOQdgCaiAOQdADaikDADcDACAOIA4pA/ADNwOYAiAOIA4pA9gDNwOwAiAOIA4pA8ADNwPIAiAOQfACaiAOQbgDaikDADcDACAOQegCaiAOQbADaikDADcDACAOQYgDaiAOQaADaikDADcDACAOQYADaiAOQZgDaikDADcDACAOIA4pA6gDNwPgAiAOIA4pA5ADNwP4AgJAAkACQAJAAkACQAJAIBRBI08EQCATKAKgAyIfQQJ0IQVBACEMAkAgH0H/////A0sgBUH8////B0tyDQAgEygCnAMhBwJ/IAVFBEBBBCEkQQAMAQtB0c7FAC0AABpBBCEMIAVBBBDWBCIkRQ0BIB8LIUIgBQRAICQgByAF/AoAAAtBIyEHIA5BIzYCECAOQQA2ArADIA5CgICAgMAANwKoAyAKRQ0HIAohBUEAIQwDQCAHIAxqIglBCWohByAJQXZL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IMoBNwIEIBJBATYCAAwICyAKIAYpAwA3AwAgByAQKQMANwMAIAggESkDADcDACAMIBMpAwA3AwAgCSAUKQMANwMAIA0gGSkDADcDACAFIAMpAwA3AwAgBCAEKQOwJzcD2EwgBCAEKADxJzYCsEUgBCAXKAAANgCzRSAEQcDFAGogBSkDADcDACAEQcjFAGogDSkDADcDACAEQdDFAGogCSkDADcDACAEQdjFAGogDCkDADcDACAEQeDFAGogCCkDADcDACAEQejFAGogBykDADcDACAEQfDFAGogCikDADcDACAEIAQpA9hMNwO4RSAEQbAnaiAVQYADahCGBCAELQDwJyJOQQJGBEAgBEHgzABqIARBuCdqKAIAIgU2AgAgBCAEKQOwJyLKATcD2EwgEkEMaiAFNgIAIBIgygE3AgQgEkEBNgIADAgLIARBkM0AaiIKIARB6CdqIgYpAwA3AwAgBEGIzQBqIgcgBEHgJ2oiECkDADcDACAEQYDNAGoiCCAEQdgnaiIRKQMANwMAIARB+MwAaiIMIARB0CdqIhMpAwA3AwAgBEHwzABqIgkgBEHIJ2oiFCkDADcDACAEQejMAGoiDSAEQcAnaiIZKQMANwMAIARB4MwAaiIFIARBuCdqIgMpAwA3AwAgBCAEKQOwJzcD2EwgBCAEKADxJzYC+EUgBCAEQfQnaiIXKAAANgD7RSAEQYjGAGogBSkDADcDACAEQZDGAGogDSkDADcDACAEQZjGAGogCSkDADcDACAEQaDGAGogDCkDADcDACAEQajGAGogCCkDADcDACAEQbDGAGogBykDADcDACAEQbjGAGogCikDADcDACAEIAQpA9hMNwOARiAEQbAnaiAVQZgDahCGBCAELQDwJyJPQQJGBEAgBSADKAIAIgU2AgAgBCAEKQOwJyLKATcD2EwgEkEMaiAFNgIAIBIgygE3AgQgEkEBNgIADAgLIAogBikDADcDACAHIBApAwA3AwAgCCARKQMANwMAIAwgEykDADcDACAJIBQpAwA3AwAgDSAZKQMANwMAIAUgAykDADcDACAEIAQpA7AnNwPYTCAEIAQoAPEnNgLARiAEIBcoAAA2AMNGIARB0MYAaiAFKQMANwMAIARB2MYAaiANKQMANwMAIARB4MYAaiAJKQMANwMAIARB6MYAaiAMKQMANwMAIARB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rXwi2wEgBikDsC98IssBIAYpA5gvINQBINoBVK18ItoBIAYpA4AufCLMASAGKQPgMHwizwEg1QEg2QFWrSAGKQP4MCDUASDVAVatfHx8Is0BIAYpA7AufCLOASDSASDTAVStIAYpA8gvINMBINgBVK18fHwi0wEgBikD4C98ItQBINABINEBVK0gBikD+C8g0QEg0gFUrXx8fCLYAXwi0gEgBikD4C58ItEBIAYpA/guIAYpA/AuIsoBINcBfCDKAVStfHwi0AEgBikDsDB8ItUBQgBCAEL/////vrL98EIQyQMgBkHgLWogBikD+C0iygFCAEKBgICAv7L98MMAQgAQyQMgBkHQLWogygFCAEKR4eXNh4n6mShCABDJAyAGQcAtaiDKAUIAQt2whYzotpGouH9CABDJAyAGQbAtaiDKAUIAQqnAxomuzpOyMEIAEMkDAkACQAJAIAYpA7gtIAYpA8guIAYpA9gvIM0BIM8BVK0gBikD6DAgzAEgzwFWrXx8IAYpA4guIMwBINoBVK18fCLXASAGKQOgLXwiygEgzgEg0wFWrSAGKQO4LiDNASDOAVatfHx8IswBIAYpA9AvfCLPASDMAVStfCDPASDPASDUASDYAVatIAYpA+gvINMBINQBVq18fHwizQFWrXwgygEgzAFWrSAGKQOoLSDKASDXAVStfHx8Is4BIAYpA5AtfCLKASAGKQOoLiDNASAGKQOgLnwizAEgzQFUrXwgzAEgywEg0gFWrSAGKQO4LyDLASDbAVStfHx8IssBIMwBVK18fCLMASAGKQPALnwizwEgzAFUrXwgzwEgBikD2C4gywEgywEgBikD0C58Is0BVq18IM0BIM0BINABINEBVK0gBikD6C4g0QEg0gFUrXx8fCLSAVatfHwiywEgzwFUrXwgygEgzAFWrSAGKQOYLSDKASDOAVStfHx8ItEBIAYpA4AtfCLPASAGKQOYLiDLASDLASAGKQOQLnwiygFWrXwgygEgygEgBikDqC8gBikDuDAg0AEg1QFWrXwizAEgBikDoC98IssBIMwBVK18IMsBIMsBINIBfCLMAVatfHwiywFWrXx8Is0BIAYpA7AtfCLOASDNAVStfCDOASAGKQPILSDLASDLASAGKQPALXwi0gFWrXwg0gEg0gEgBikD2C0gzAEgzAEgBikD0C18IsoB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rXwi2AEgBikD0Ct8ItABIAYpA7gsIM4BINMBVK18ItoBIAYpA/AsfCLTASAGKQPgKnwi1AEg0gEg1wFWrSAGKQP4KiDOASDSAVatfHx8Is4BIAYpA6AsfCLSASDLASDNAVStIAYpA+grIM0BINUBVK18fHwizQEgBikDkCp8ItUBIMwBIM8BVq0gBikDqCogywEgzAFWrXx8fCLXAXwiywEgBikDwCl8IswBIAYpA9gpIAYpA9ApIsoBINEBfCDKAVStfHwizwEgBikDkCl8ItEBQgBCAEL/////vrL98EIQyQMgBkHwKGogBikDiCkiygFCAEKBgICAv7L98MMAQgAQyQMgBkHgKGogygFCAEKR4eXNh4n6mShCABDJAyAGQdAoaiDKAUIAQt2whYzotpGouH9CABDJAyAGQcAoaiDKAUIAQqnAxomuzpOyMEIAEMkDAkAgBikDyCggBikDqCkgBikDiCogzgEg1AFUrSAGKQPoKiDTASDUAVatfHwgBikD+Cwg0wEg2gFUrXx8ItMBIAYpA+AsfCLKASDNASDSAVStIAYpA6gsIM4BINIBVq18fHwizgEgBikDgCp8ItIBIM4BVK18INIBINUBINcBVq0gBikDmCogzQEg1QFWrXx8fCLNASDSAVStfCDKASDOAVatIAYpA+gsIMoBINMBVK18fHwi0wEgBikD0Cx8IsoBIAYpA5gsIM0BIM0BIAYpA5AsfCLOAVatfCDOASDOASDLASDQAVStIAYpA9grINABINgBVK18fHwizQFWrXx8Is4BIAYpA6ApfCLSASDOAVStfCDSASAGKQO4KSDNASDNASAGKQOwKXwi0AFWrXwg0AEg0AEgzAEgzwFWrSAGKQPIKSDLASDMAVatfHx8Is0BVq18fCLLASDSAVStfCDKASDOAVatIAYpA9gsIMoBINMBVK18fHwi0AEgBikDwCx8IswBIAYpA4gsIMsBIAYpA4AsfCLKASDLAVStfCDKASDKASAGKQPIKyAGKQOYKSDPASDRAVatfCLPASAGKQPAK3wiywEgzwFUrXwgywEgywEgzQF8Is8BVq18fCLLAVatfHwizQEgBikDwCh8Is4BIM0BVK18IM4BIAYpA9goIMsBIMsBIAYpA9AofCLSAVatfCDSASDSASAGKQPoKCDPASDPASAGKQPgKHwiygFWrXwg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ACAGIMoBIMsBfSLSATcDiEAgBiDUASDTAX0i3AEgygEgywFUrSLKAX0i1wE3A4BAIAYgzQEgzAF9IuABIMoBINwBViDTASDUAVZyrSLKAX0i3AE3A/g/IAYg0QEg2QF9IMoBIOABViDMASDNAVZyrX0i0QE3A/A/AkACQCDaASLNASDYASLKAVINACDVASLNASDWASLKAVINACDQASLNASDbASLKAVINACDOASHNASDPASLKASDOAVENAQsgygEgzQFUDQILINgBINoBfSDWASDVAX0i4AEg2wEg0AF9IvABIM4BIM8BVq0i+AFUINABINsBVnKtIu0BVCDVASDWAVZyrX0h2AEgzwEgzgF9Ic8BINcBIdQBINwBIc0BINIBIcoBIPABIPgBfSHbASDgASDtAX0h1gEMAwsgBiDLASDKAX0i0gE3A+g/IAYg0wEg1AF9ItwBIMoBIMsBVq0iywF9ItcBNwPgPyAGIMwBIM0BfSLgASDTASDUAVQgywEg3AFWcq0iywF9ItwBNwPYPyAGINkBINEBfSDMASDNAVQgywEg4AFWcq19ItkBNwPQPwJAAkAg2gEiywEg2AEizAFSDQAg1QEiywEg1gEizAFSDQAg0AEiywEg2wEizAFSDQAgzgEiywEgzwEizAFRDQELIMsBIMwBVA0CCyDaASDYAX0g1QEg1gFUINUBINYBfSLVASDQASDbAVQg0AEg2wF9ItABIM4BIM8BVK0i4AFUcq0i8AFUcq19IdoBIM4BIM8BfSHOASDXASHTASDcASHMASDSASHLASDQASDgAX0h0AEg1QEg8AF9IdUBDAILINgBQt2whYzotpGouH8g1QF9IsoBQpHh5c2HifqZKCDQAX0izQEgzgFCgYCAgL+y/fDDAFatItQBVCDQAUKR4eXNh4n6mShWcq0i2AFUINUBQt2whYzotpGouH9Wcq0g2gF8fSDKASDYAX0i2AEg1gF8IsoBINgBVCDKASDNASDUAX0i1AEg2wF8Is0BINQBVCDNAUKBgICAv7L98MMAIM4BfSLUASDPAXwizwEg1AFUrXwi2wEgzQFUcq18ItYBIMoBVHKtfEKpwMaJrs6TsjB8IdgBINcBIdQBINwBIc0BINIBIcoBDAELINoBINgBfULdsIWM6LaRqLh/INYBfSLLAUKR4eXNh4n6mSgg2wF9IswB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ye7XxwB8ItQBIMoBQpHh5c2HifqZKFQg0AEg0wFUcq0iygF9IeMBIOQBIMwBQt2whYzotpGouH9UIMoBINQBVnKtfUKpwMaJrs6TsjB9IeQBINsBQoGAgIC/sv3wwwB9IdsBCwJ+AkACQCDoASLYASDvASLKAVINACDdASLYASDlASLKAVINACDeASLYASDnASLKAVINACDhASLYASDuASLKAVENAQsgygEg2AFaDQBC3bCFjOi2kai4fyDdASDlAX0iygEg3gEg5wFUIN4BIOcBfSLMASDhASDuAVStItABVHKtItcBfSLUAX0i2AEgzAEg0AF9IswBQpHh5c2HifqZKFZCkeHlzYeJ+pkoIMwBfSLMASDhASDuAX0i0AFCgYCAgL+y/fDDAFatItYBVHKtItoBfSHTASDYASDaAVQg1AFC3bCFjOi2kai4f1ZyIQogzAEg1gF9IdQBIN0BIOUBVCDKASDXAVRyrSDvASDoAX18QqnAxomuzpOyMHwh6AFCgYCAgL+y/fDDACDQAX0MAQsg5wEg3gF9IsoBIOEBIO4BVq0izAF9IdQBIOUBIN0BfSLQASDKASDMAVQg3gEg5wFWcq0iygF9IdMBIMoBINABViDdASDlAVZyIQog7wEg6AF9IegBIO4BIOEBfQsh5QEgECkDWCHaASAQKQNQId4BIBApA0gh2AEgECkDOCHMASAQKQMwIdABIBApAygh1wEgECkDICLWASHKAQJ+AkACQCDWASDgASLcAVINACDYASLcASDXASLKAVINACDeASLcASDQASLKAVINACDaASLcASDMASLKAVENAQsgygEg3AFaDQBC3bCFjOi2kai4fyDYASDXAX0i3QEg0AEg3gFWIN4BINABfSLKASDMASDaAVatItABVHKtIuEBfSLiAX0i5wEgygEg0AF9IsoBQpHh5c2HifqZKFZCkeHlzYeJ+pkoIMoBfSLKASDaASDMAX0izAFCgYCAgL+y/fDDAFatItABVHKtIu4BfSHcASDnASDuAVQg4gFC3bCFjOi2kai4f1ZyIQcgygEg0AF9IcoBIN0BIOEBVCDXASDYAVZyrSDWASDgAX18QqnAxomuzpOyMHwh4QFCgYCAgL+y/fDDACDMAX0MAQsg0AEg3gF9ItwBIMwBINoBVK0i3QF9IcoBINcBINgBfSLhASDcASDd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gL+y/fDDACDWAX0MAQsgygEgzQF9IswBINYBINkBVK0i4QF9IdABINwBINcBfSLoASDMASDhAVQgygEgzQFUcq0iygF9Ic0BIMoBIOgBViDXASDcAVZyIQog3QEgywF9IeIBINYBINkBfQsiygFCACDlAUIAEMkDIAZBwAxqIMoBQgAg1AFCABDJAyAGQaAMaiDKAUIAINMBQgAQyQMgBkGADGogygFCACDRAUIAEMkDIAZBoA1qIAYpA7ANIswBQgBCAEL/////vrL98EIQyQMgBkGQDWogBikDqA0iygFCAEKBgICAv7L98MMAQgAQyQMgBkGADWogygFCAEKR4eXNh4n6mShCABDJAyAGQfAMaiDKAUIAQt2whYzotpGouH9CABDJAyAGQeAMaiDKAUIAQqnAxomuzpOyMEIAEMkDIAZB4AtqINABQgAg5QFCABDJAyAGQYALaiDQAUIAINQBQgAQyQMgBkHwCmog0AFCACDTAUIAEMkDIAZB4ApqINABQgAg0QFCABDJAyAGQdALaiAGKQOADSLZASAGKQO4DSLXASAGKQPADHwi1gF8IssBIAYpA5gNIMwBIAYpA5ANIsoBfCDKAVStfHwizAEgBikD4At8ItABQgBCAEL/////vrL98EIQyQMgBkHAC2ogBikD2AsiygFCAEKBgICAv7L98MMAQgAQyQMgBkGwC2ogygFCAEKR4eXNh4n6mShCABDJAyAGQaALaiDKAUIAQt2whYzotpGouH9CABDJAyAGQZALaiDKAUIAQqnAxomuzpOyMEIAEMkDIAZB0ApqIM0BQgAg5QFCABDJAyAGQfAJaiDNAUIAINQBQgAQyQMgBkGQCWogzQFCACDTAUIAEMkDIAZBgAlqIM0BQgAg0QFCABDJAyAGQcAKaiAGKQPoCyDMASDQAVatfCLcASAGKQOAC3wizQEgBikDyAwg1gEg1wFUrXwi3QEgBikDoAx8ItcBIAYpA/AMfCLWASDLASDMAVatIAYpA4gNIMsBINkBVK18fHwi4QF8IssBIAYpA7ALfCLMASAGKQPICyAGKQPACyLKASDQAXwgygFUrXx8ItABIAYpA9AKfCLZAUIAQgBC/////76y/fBCEMkDIAZBsApqIAYpA8gKIsoBQgBCgYCAgL+y/fDDAEIAEMkDIAZBoApqIMoBQgBCkeHlzYeJ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KQPQAnwi0wF8Is0BIAYpA6gCIM4BIAYpA6ACIssBfCDLAVStfHwizgEgBikDgAN8ItIBQgBCAEL/////vrL98EIQyQMgBkHwAWogBikDiAIiywFCAEKBgICAv7L98MMAQgAQyQMgBkHgAWogywFCAEKR4eXNh4n6mShCABDJAyAGQdABaiDLAUIAQt2whYzotpGouH9CABDJAyAGQcABaiDLAUIAQqnAxomuzpOyMEIAEMkDIAZBwANqIBApA2giywFCACDfAUIAEMkDIAZB0ANqIMsBQgAg6wFCABDJAyAGQeADaiDLAUIAIOwBQgAQyQMgBkHwA2ogywFCACDqAUIAEMkDIAZBoAFqIAYpA4gDIM4BINIBVq18ItYBIAYpA5ADfCLRASAGKQPYAiDQASDTAVatfCLXASAGKQPgAnwi0AEgBikDsAF8ItMBIM0BIM4BVq0gBikDmAIgzQEg1AFUrXx8fCLZAXwizQEgBikD4AF8Is4BIAYpA/gBIAYpA/ABIssBINIBfCDLAVStfHwi0gEgBikDwAN8ItQBQgBCAEL/////vrL98EIQyQMgBkGQAWogBikDqAEiywFCAEKBgICAv7L98MMAQgAQyQMgBkGAAWogywFCAEKR4eXNh4n6mShCABDJAyAGQfAAaiDLAUIAQt2whYzotpGouH9CABDJAyAGQeAAaiDLAUIAQqnAxomuzpOyMEIAEMkDIAZBgARqIBApA2AiywFCACDfAUIAEMkDIAZBkARqIMsBQgAg6wFCABDJAyAGQaAEaiDLAUIAIOwBQgAQyQMgBkGwBGogywFCACDqAUIAEMkDIAZBQGsgBikDyAMg0gEg1AFWrXwi2wEgBikD0AN8ItUBIAYpA+gCINABINcBVK18ItwBIAYpA/ACfCLXASAGKQNQfCLYASDTASDZAVatIAYpA7gBINABINMBVq18fHwi0AEgBikDoAN8ItMBIM0BINEBVK0gBikDmAMg0QEg1gFUrXx8fCLRASAGKQPQAXwi1gEgzgEg0gFWrSAGKQPoASDNASDOAVatfHx8ItkBfCLNASAGKQOAAXwizgEgBikDmAEgBikDkAEiywEg1AF8IMsBVK18fCLSASAGKQOABHwi1AFCAEIAQv////++sv3wQhDJAyAGQTBqIAYpA0giywFCAEKBgICAv7L98MMAQgAQyQMg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IMsBQgAg0QFCABDJAyADQfCBAWogzgFCACDRAUIAEMkDIANBgIQBaiADKQOQhAFCfYMizQFCAEIAQv////++sv3wQhDJAyADQfCDAWogAykDiIQBIsoBQgBCgYCAgL+y/fDDAEIAEMkDIANB4IMBaiDKAUIAQpHh5c2HifqZKEIAEMkDIANB0IMBaiDKAUIAQt2whYzotpGouH9CABDJAyADQcCDAWogygFCAEKpwMaJrs6TsjBCABDJAyADQcCEAWogzwFCACDPAUIAEMkDIANBsIQBaiDLAUIAIM8BQgAQyQMgA0GghAFqIM4BQgAgzwFCABDJAyADQaCDAWogAykD4IMBItABIAMpA5iEASLSASADKQOwgwEiygF8ItEBfCLMASADKQP4gwEgzQEgAykD8IMBIs8BfCDPAVStfHwizwEgygF8Is0BQgBCAEL/////vrL98EIQyQMgA0GQgwFqIAMpA6iDASLKAUIAQoGAgIC/sv3wwwBCABDJAyADQYCDAWogygFCAEKR4eXNh4n6mShCABDJAyADQfCCAWogygFCAELdsIWM6LaRqLh/QgAQyQMgA0HgggFqIMoBQgBCqcDGia7Ok7IwQgAQyQMgA0HghAFqIMsBQgAgywFCABDJAyADQdCEAWogzgFCACDLAUIAEMkDIANBwIIBaiADKQO4gwEiygEgzQEgzwFUrXwi1QEgAykDwIQBfCLLASDKASDRASDSAVStfCLTASADKQPQggEiygF8ItIBIAMpA9CDAXwi0QEgzAEgzwFWrSADKQPogwEgzAEg0AFUrXx8fCLXAXwizAEgAykDgIMBfCLPASADKQOYgwEgzQEgAykDkIMBItABfCDQAVStfHwizQEgygF8ItABQgBCAEL/////vrL98EIQyQMgA0GwggFqIAMpA8iCASLKAUIAQoGAgIC/sv3wwwBCABDJAyADQaCCAWogygFCAEKR4eXNh4n6mShCABDJAyADQZCCAWogygFCAELdsIWM6LaRqLh/QgAQyQMgA0GAggFqIMoBQgBCqcDGia7Ok7IwQgAQyQMgA0HwhAFqIM4BQgAgzgFCABDJAyADQeCBAWogAykD2IIBIsoBIM0BINABVq18ItgBIAMpA7CEASLWAXwizgEg1gEgygEg0gEg0wFUrXwi2gEgAykD8IEBIsoBfCLTASADKQPAgwF8ItQBINEBINcBVq0gAykD2IMBINEBINIBVK18fHwi0gF8ItEBIMsBIMwBVq0gAykDyIQBIMsBINUBVK18fHwiywEgAykD8IIBfCLVASDNASDPAVStIAMpA4iDASDMASDPAVatfHx8ItcBfCLMASADKQOgggF8Is8BIAMpA7iCASADKQOwggEizQEg0AF8IM0BVK18fCLNASDKAXwi0AFCAEIAQv////++sv3wQhDJAyADQdCBAWogAykD6IEBIsoBQgBCgYCAgL+y/fDDAEIAEMkDIANBwIEBaiDKAUIAQpHh5c2HifqZKEIAEMkDIANBsIEBaiDKAUIAQt2whYzotpGouH9CABDJAyADQaCBAWogygFCAEKpwMaJrs6TsjBCABDJAwJAAkAgAykDqIEBIAMpA4iCASADKQPoggEg0gEg1AFUrSADKQPIgwEg0wEg1AFWrXx8IAMpA/iBASLUASDTASDaAVStfHwi0wEgAykDoIQBItYBfCLKASDLASDRAVStIAMpA7iEASLaASDRASDSAVStfHx8ItIBIAMpA+CCAXwi0QEg0gFUrXwg0QEg1QEg1wFWrSADKQP4ggEgywEg1QFWrXx8fCLLASDRAVStfCDKASDSAVatIAMpA6iEASLVASDKASDTAVStfHx8ItMBIAMpA9CEASLXAXwiygEgAykD6IQBIMsBIMsBIAMpA+CEAXwi0gFWrXwg0gEg0gEgzAEgzgFUrSDaASDOASDYAVStfHx8IssBVq18fCLOASADKQOAggF8ItIBIM4BVK18INIBINIBIAMpA5iCASDLASDLASADKQOQggF8ItEBVq18INEBIM0BIM8BVK0gAykDqIIBIMwBIM8BVq18fHwizAEg0QFUrXx8IssBVq18IMoBIM4BVq0gAykD2IQBIs4BIMoBINMBVK18fHwi0wEgAykD8IQBfCLPASDOASDLASDLASDXAXwiygFWrXwgygEgygEg1QEg1AEgzQEg0AFWrXwizQEg1gF8IssBIM0BVK18IMsBIMsBIMwBfCLMAVatfHwiywFWrXx8Is0BIAMpA6CBAXwizgEgzQFUrXwgzgEgzgEgAykDuIEBIMsBIMsBIAMpA7CBAXwi0gFWrXwg0gEg0gEgAykDyIEBIMwBIMwBIAMpA8CBAXwiygFWrXwgygEgAykD2IEBIAMpA9CB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ASADQYikAWoiW0IANwMAIANBgKQBaiJcQgA3AwAgA0H4owFqIl1CADcDACADQgA3A/CjASADQeijAWoiXkIANwMAIANB4KMBaiJfQgA3AwAgA0HYowFqImBCADcDACADQgA3A9CjASADQcijAWoiYUIANwMAIANBwKMBaiJiQgA3AwAgA0G4owFqImNCADcDACADQgA3A7CjASADQaijAWoiZEIANwMAIANBoKMBaiJlQgA3AwAgA0GYowFqImZCADcDACADQgA3A5CjASADQYijAWoiZ0IANwMAIANBgKMBaiJoQgA3AwAgA0H4ogFqImlCADcDACADQgA3A/CiASADQeiiAWoiakIANwMAIANB4KIBaiJrQgA3AwAgA0HYogFqImxCADcDACADQgA3A9CiASADQciiAWoibUIANwMAIANBwKIBaiJuQgA3AwAgA0G4ogFqIm9CADcDACADQgA3A7CiASADQaiiAWoicEIANwMAIANBoKIBaiJxQgA3AwAgA0GYogFqInJCADcDACADQgA3A5CiASADQYiiAWoic0IANwMAIANBgKIBaiJ0QgA3AwAgA0H4oQFqInVCADcDACADQgA3A/ChASADQeihAWoidkIANwMAIANB4KEBaiJ3QgA3AwAgA0HYoQFqInhCADcDACADQgA3A9ChASADQcihAWoieUIANwMAIANBwKEBaiJ6QgA3AwAgA0G4oQFqIntCADcDACADQgA3A7ChASADQaihAWoifEIANwMAIANBoKEBaiJ9QgA3AwAgA0GYoQFqIn5CADcDACADQgA3A5ChASADQYihAWoif0IANwMAIANBgKEBaiKAAUIANwMAIANB+KABaiKBAUIANwMAIANCADcD8KABIANB6KABaiKCAUIANwMAIANB4KABaiKDAUIANwMAIANB2KABaiKEAUIANwMAIANCADcD0KABIANByKABaiKFAUIANwMAIANBwKABaiKGAUIANwMAIANBuKABaiKHAUIANwMAIANCADcDsKABIANBqKABaiKIAUIANwMAIANBoKABaiKJAUIANwMAIANBmKABaiKKAUIANwMAIANCADcDkKABIANBiKABaiKLAUIANwMAIANBgKABaiKMAUIANwMAIANB+J8BaiKNAUIANwMAIANCADcD8J8BIANB6J8BaiKOAUIANwMAIANB4J8BaiKPAUIANwMAIANB2J8BaiKQAUIANwMAIANCADcD0J8BIANByJ8BaiKRAUIANwMAIANBwJ8BaiKSAUIANwMAIANBuJ8BaiKTAUIANwMAIANCADcDsJ8BIANBqJ8BaiKUAUIANwMAIANBoJ8BaiKVAUIANwMAIANBmJ8BaiKWAUIANwMAIANCADcDkJ8BIANBiJ8BaiKXAUIANwMAIANBgJ8BaiKYAUIANwMAIANB+J4BaiKZAUIANwMAIANCADcD8J4BIANB6J4BaiKaAUIANwMAIANB4J4BaiKbAUIANwMAIANB2J4BaiKcAUIANwMAIANCADcD0J4BIANByJ4BaiKdAUIANwMAIANBwJ4BaiKeAUIANwMAIANBuJ4BaiKfAUIANwMAIANCADcDsJ4BIANBqJ4BaiKgAUIANwMAIANBoJ4BaiKhAUIANwMAIANBmJ4BaiKiAUIANwMAIANCADcDkJ4BIANBiJ4BaiKjAUIANwMAIANBgJ4BaiKkAUIANwMAIANB+J0BaiKlAUIANwMAIANCADcD8J0BIANB6J0BaiKmAUIANwMAIANB4J0BaiKnAUIANwMAIANB2J0BaiKoAUIANwMAIANCADcD0J0BIANByJ0BaiKpAUIANwMAIANBwJ0BaiKqAUIANwMAIANBuJ0BaiKrAUIANwMAIANCADcDsJ0BIANBqJ0BaiKsAUIANwMAIANBoJ0BaiKtAUIANwMAIANBmJ0BaiKuAUIANwMAIANCADcDkJ0BIANBiJ0BaiKvAUIANwMAIANBgJ0BaiKwAUIANwMAIANB+JwBaiKxAUIANwMAIANCADcD8JwBIANB6JwBaiKyAUIANwMAIANB4JwBaiKzAUIANwMAIANB2JwBaiK0AUIANwMAIANCADcD0JwBIANByJwBaiK1AUIANwMAIANBwJwBaiK2AUIANwMAIANBuJwBaiK3AUIANwMAIANCADcDsJwBIANBqJwBaiK4AUIANwMAIANBoJwBaiK5AUIANwMAIANBmJwBaiK6AUIANwMAIANCADcDkJwBIANBiJwBaiK7AUIANwMAIANBgJwBaiK8AUIANwMAIANB+JsBaiK9AUIANwMAIANCADcD8JsBIANB6JsBaiK+AUIANwMAIANB4JsBaiK/AUIANwMAIANB2JsBaiLAAUIANwMAIANCADcD0JsBIANByJsBaiLBAUIANwMAIANBwJsBaiLCAUIANwMAIANBuJsBaiLDAUIANwMAIANCADcDsJsBIANBqJsBaiLEAUIANwMAIANBoJsBaiLFAUIANwMAIANBmJsBaiLGAUIANwMAIANCADcDkJsBIANBiJsBaiLHAUIANwMAIANBgJsBaiLIAUIANwMAIANB+JoBaiLJAUIANwMAIANCADcD8JoBIANCATcDgIUBIANBoIUBakIANwMAIEZCADcDACBHQgA3AwAgA0IANwOIhQEgA0IBNwOohQEgA0HIhQFqQgA3AwAgA0HAhQFqQgA3AwAgA0G4hQFqQgA3AwAgA0IANwOwhQEgA0IBNwPQhQEgA0HwhQFqQgA3AwAgA0HohQFqQgA3AwAgA0HghQFqQgA3AwAgA0IANwPYhQEgA0IBNwP4hQEgA0GYhgFqQgA3AwAgA0GQhgFqQgA3AwAgA0GIhgFqQgA3AwAgA0IANwOAhgEgA0IBNwOghgEgA0HAhgFqQgA3AwAgA0G4hgFqQgA3AwAgA0GwhgFqQgA3AwAgA0IANwOohgEgA0IBNwPIhgEgA0HohgFqQgA3AwAgA0HghgFqQgA3AwAgA0HYhgFqQgA3AwAgA0IANwPQhgEgA0IBNwPwhgEgA0GQhwFqQgA3AwAgA0GIhwFqQgA3AwAgA0GAhwFqQgA3AwAgA0IANwP4hgEgA0IBNwOYhwEgA0G4hwFqQgA3AwAgA0GwhwFqQgA3AwAgA0GohwFqQgA3AwAgA0IANwOghwEgA0IBNwPAhwEgA0HghwFqQgA3AwAgA0HYhwFqQgA3AwAgA0HQhwFqQgA3AwAgA0IANwPIhwEgA0IBNwPohwEgA0GIiAFqQgA3AwAgA0GAiAFqQgA3AwAgA0H4hwFqQgA3AwAgA0IANwPwhwEgA0IBNwOQiAEgA0GwiAFqQgA3AwAgA0GoiAFqQgA3AwAgA0GgiAFqQgA3AwAgA0IANwOYiAEgA0IBNwO4iAEgA0HYiAFqQgA3AwAgA0HQiAFqQgA3AwAgA0HIiAFqQgA3AwAgA0IANwPAiAEgA0IBNwPgiAEgA0GAiQFqQgA3AwAgA0H4iAFqQgA3AwAgA0HwiAFqQgA3AwAgA0IANwPoiAEgA0IBNwOIiQEgA0GoiQFqQgA3AwAgA0GgiQFqQgA3AwAgA0GYiQFqQgA3AwAgA0IANwOQiQEgA0IBNwOwiQEgA0HQiQFqQgA3AwAgA0HIiQFqQgA3AwAgA0HAiQFqQgA3AwAgA0IANwO4iQEgA0IBNwPYiQEgA0H4iQFqQgA3AwAgA0HwiQFqQgA3AwAgA0HoiQFqQgA3AwAgA0IANwPgiQEgA0IBNwOAigEgA0GgigFqQgA3AwAgA0GYigFqQgA3AwAgA0GQigFqQgA3AwAgA0IANwOIigEgA0IBNwOoigEgA0HIigFqQgA3AwAgA0HAigFqQgA3AwAgA0G4igFqQgA3AwAgA0IANwOwigEgA0IBNwPQigEgA0HwigFqQgA3AwAgA0HoigFqQgA3AwAgA0HgigFqQgA3AwAgA0IANwPYigEgA0IBNwP4igEgA0GYiwFqQgA3AwAgA0GQiwFqQgA3AwAgA0GIiwFqQgA3AwAgA0IANwOAiwEgA0IBNwOgiwEgA0HAiwFqQgA3AwAgA0G4iwFqQgA3AwAgA0GwiwFqQgA3AwAgA0IANwOoiwEgA0IBNwPIiwEgA0HoiwFqQgA3AwAgA0HgiwFqQgA3AwAgA0HYiwFqQgA3AwAgA0IANwPQiwEgA0IBNwPwiwEgA0GQjAFqQgA3AwAgA0GIjAFqQgA3AwAgA0GAjAFqQgA3AwAgA0IANwP4iwEgA0IBNwOYjAEgA0G4jAFqQgA3AwAgA0GwjAFqQgA3AwAgA0GojAFqQgA3AwAgA0IANwOgjAEgA0IBNwPAjAEgA0HgjAFqQgA3AwAgA0HYjAFqQgA3AwAgA0HQjAFqQgA3AwAgA0IANwPIjAEgA0IBNwPojAEgA0GIjQFqQgA3AwAgA0GAjQFqQgA3AwAgA0H4jAFqQgA3AwAgA0IANwPwjAEgA0IBNwOQjQEgA0GwjQFqQgA3AwAgA0GojQFqQgA3AwAgA0GgjQFqQgA3AwAgA0IANwOYjQEgA0IBNwO4jQEgA0HYjQFqQgA3AwAgA0HQjQFqQgA3AwAgA0HIjQFqQgA3AwAgA0IANwPAjQEgA0IBNwPgjQEgA0GAjgFqQgA3AwAgA0H4jQFqQgA3AwAgA0HwjQFqQgA3AwAgA0IANwPojQEgA0IBNwOIjgEgA0GojgFqQgA3AwAgA0GgjgFqQgA3AwAgA0GYjgFqQgA3AwAgA0IANwOQjgEgA0IBNwOwjgEgA0HQjgFqICMpAwA3AwAgA0HIjgFqIDMpAwA3AwAgA0HAjgFqIDUpAwA3AwAgAyADKQOwpQE3A7iOASADQgE3A9iOASADQfiOAWogSCkDADcDACADQfCOAWogBSkDADcDACADQeiOAWogHCkDADcDACADIAMpA7CkATcD4I4BIANCATcDgI8BIANBoI8BaiAwKQMANwMAIANBmI8BaiA0KQMANwMAIANBkI8BaiA2KQMANwMAIAMgAykD4MEBNwOIjwEgA0IBNwOojwEgA0HIjwFqIFspAwA3AwAgA0HAjwFqIFwpAwA3AwAgA0G4jwFqIF0pAwA3AwAgAyADKQPwowE3A7CPASADQgE3A9CPASADQfCPAWogXikDADcDACADQeiPAWogXykDADcDACADQeCPAWogYCkDADcDACADIAMpA9CjATcD2I8BIANCATcD+I8BIANBmJABaiBhKQMANwMAIANBkJABaiBiKQMANwMAIANBiJABaiBjKQMANwMAIAMgAykDsKMBNwOAkAEgA0IBNwOgkAEgA0HAkAFqIGQpAwA3AwAgA0G4kAFqIGUpAwA3AwAgA0GwkAFqIGYpAwA3AwAgAyADKQOQowE3A6iQASADQgE3A8iQASADQeiQAWogZykDADcDACADQeCQAWogaCkDADcDACADQdiQAWogaSkDADcDACADIAMpA/CiATcD0JABIANCATcD8JABIANBkJEBaiBqKQMANwMAIANBiJEBaiBrKQMANwMAIANBgJEBaiBsKQMANwMAIAMgAykD0KIBNwP4kAEgA0IBNwOYkQEgA0G4kQFqIG0pAwA3AwAgA0GwkQFqIG4pAwA3AwAgA0GokQFqIG8pAwA3AwAgAyADKQOwogE3A6CRASADQgE3A8CRASADQeCRAWogcCkDADcDACADQdiRAWogcSkDADcDACADQdCRAWogcikDADcDACADIAMpA5CiATcDyJEBIANCATcD6JEBIANBiJIBaiBzKQMANwMAIANBgJIBaiB0KQMANwMAIANB+JEBaiB1KQMANwMAIAMgAykD8KEBNwPwkQEgA0IBNwOQkgEgA0GwkgFqIHYpAwA3AwAgA0GokgFqIHcpAwA3AwAgA0GgkgFqIHgpAwA3AwAgAyADKQPQoQE3A5iSASADQgE3A7iSASADQdiSAWogeSkDADcDACADQdCSAWogeikDADcDACADQciSAWogeykDADcDACADIAMpA7ChATcDwJIBIANCATcD4JIBIANBgJMBaiB8KQMANwMAIANB+JIBaiB9KQMANwMAIANB8JIBaiB+KQMANwMAIAMgAykDkKEBNwPokgEgA0IBNwOIkwEgA0GokwFqIH8pAwA3AwAgA0GgkwFqIIABKQMANwMAIANBmJMBaiCBASkDADcDACADIAMpA/CgATcDkJMBIANCATcDsJMBIANB0JMBaiCCASkDADcDACADQciTAWoggwEpAwA3AwAgA0HAkwFqIIQBKQMANwMAIAMgAykD0KABNwO4kwEgA0IBNwPYkwEgA0H4kwFqIIUBKQMANwMAIANB8JMBaiCGASkDADcDACADQeiTAWoghwEpAwA3AwAgAyADKQOwoAE3A+CTASADQgE3A4CUASADQaCUAWogiAEpAwA3AwAgA0GYlAFqIIkBKQMANwMAIANBkJQBaiCKASkDADcDACADIAMpA5CgATcDiJQBIANCATcDqJQBIANByJQBaiCLASkDADcDACADQcCUAWogjAEpAwA3AwAgA0G4lAFqII0BKQMANwMAIAMgAykD8J8BNwOwlAEgA0IBNwPQlAEgA0HwlAFqII4BKQMANwMAIANB6JQBaiCPASkDADcDACADQeCUAWogkAEpAwA3AwAgAyADKQPQnwE3A9iUASADQgE3A/iUASADQZiVAWogkQEpAwA3AwAgA0GQlQFqIJIBKQMANwMAIANBiJUBaiCTASkDADcDACADIAMpA7CfATcDgJUBIANCATcDoJUBIANBwJUBaiCUASkDADcDACADQbiVAWoglQEpAwA3AwAgA0GwlQFqIJYBKQMANwMAIAMgAykDkJ8BNwOolQEgA0IBNwPIlQEgA0HolQFqIJcBKQMANwMAIANB4JUBaiCYASkDADcDACADQdiVAWogmQEpAwA3AwAgAyADKQPwngE3A9CVASADQgE3A/CVASADQZCWAWogmgEpAwA3AwAgA0GIlgFqIJsBKQMANwMAIANBgJYBaiCcASkDADcDACADIAMpA9CeATcD+JUBIANCATcDmJYBIANBuJYBaiCdASkDADcDACADQbCWAWogngEpAwA3AwAgA0GolgFqIJ8BKQMANwMAIAMgAykDsJ4BNwOglgEgA0IBNwPAlgEgA0HglgFqIKABKQMANwMAIANB2JYBaiChASkDADcDACADQdCWAWogogEpAwA3AwAgAyADKQOQngE3A8iWASADQgE3A+iWASADQYiXAWogowEpAwA3AwAgA0GAlwFqIKQBKQMANwMAIANB+JYBaiClASkDADcDACADIAMpA/CdATcD8JYBIANCATcDkJcBIANBsJcBaiCmASkDADcDACADQaiXAWogpwEpAwA3AwAgA0GglwFqIKgBKQMANwMAIAMgAykD0J0BNwOYlwEgA0IBNwO4lwEgA0HYlwFqIKkBKQMANwMAIANB0JcBaiCqASkDADcDACADQciXAWogqwEpAwA3AwAgAyADKQOwnQE3A8CXASADQgE3A+CXASADQYCYAWogrAEpAwA3AwAgA0H4lwFqIK0BKQMANwMAIANB8JcBaiCuASkDADcDACADIAMpA5CdATcD6JcBIANCATcDiJgBIANBqJgBaiCvASkDADcDACADQaCYAWogsAEpAwA3AwAgA0GYmAFqILEBKQMANwMAIAMgAykD8JwBNwOQmAEgA0IBNwOwmAEgA0HQmAFqILIBKQMANwMAIANByJgBaiCzASkDADcDACADQcCYAWogtAEpAwA3AwAgAyADKQPQnAE3A7iYASADQgE3A9iYASADQfiYAWogtQEpAwA3AwAgA0HwmAFqILYBKQMANwMAIANB6JgBaiC3ASkDADcDACADIAMpA7CcATcD4JgBIANCATcDgJkBIANBoJkBaiC4ASkDADcDACADQZiZAWoguQEpAwA3AwAgA0GQmQFqILoBKQMANwMAIAMgAykDkJwBNwOImQEgA0IBNwOomQEgA0HImQFqILsBKQMANwMAIANBwJkBaiC8ASkDADcDACADQbiZAWogvQEpAwA3AwAgAyADKQPwmwE3A7CZASADQgE3A9CZASADQfCZAWogvgEpAwA3AwAgA0HomQFqIL8BKQMANwMAIANB4JkBaiDAASkDADcDACADIAMpA9CbATcD2JkBIANCATcD+JkBIANBmJoBaiDBASkDADcDACADQZCaAWogwgEpAwA3AwAgA0GImgFqIMMBKQMANwMAIAMgAykDsJsBNwOAmgEgA0IBNwOgmgEgA0HAmgFqIMQBKQMANwMAIANBuJoBaiDFASkDADcDACADQbCaAWogxgEpAwA3AwAgAyADKQOQmwE3A6iaASADQgE3A8iaASADQeiaAWogxwEpAwA3AwAgA0HgmgFqIMgBKQMANwMAIANB2JoBaiDJASkDADcDACADIAMpA/CaATcD0JoBIANBkIEBaiAHKQMYIvQBQgAg6AFCABDJAyADQbCAAWogBykDECL1AUIAIOgBQgAQyQMgA0GggAFqIAcpAwgi9gFCACDoAUIAEMkDIANBkIABaiAHKQMAIvcBQgAg6AFCABDJAyADQYCBAWogAykDkIEBIswBQgBCAEL/////vrL98EIQyQMgA0HwgAFqIAMpA4iBASLKAUIAQoGAgIC/sv3wwwBCABDJAyADQeCAAWogygFCAEKR4eXNh4n6mShCABDJAyADQdCAAWogygFCAELdsIWM6LaRqLh/QgAQyQMgA0HAgAFqIMoBQgBCqcDGia7Ok7IwQgAQyQMgA0GAgAFqIPQBQgAg5gFCABDJAyADQaD/AGog9QFCACDmAUIAEMkDIANBkP8AaiD2AUIAIOYBQgAQyQMgA0GA/wBqIPcBQgAg5gFCABDJAyADQfD/AGogAykD4IABItEBIAMpA5iBASLOASADKQOwgAF8ItIBfCLLASADKQP4gAEgzAEgAykD8IABIsoBfCDKAVStfHwizAEgAykDgIABfCLPAUIAQgBC/////76y/fBCEMkDIANB4P8AaiADKQP4fyLKAUIAQoGAgIC/sv3wwwBCABDJAyADQdD/AGogygFCAEKR4eXNh4n6mShCABDJAyADQcD/AGogygFCAELdsIWM6LaRqLh/QgAQyQMgA0Gw/wBqIMoBQgBCqcDGia7Ok7IwQgAQyQMgA0Hw/gBqIPQBQgAg4QFCABDJAyADQZD+AGog9QFCACDhAUIAEMkDIANBgP4AaiD2AUIAIOEBQgAQyQMgA0Hw/QBqIPcBQgAg4QFCABDJAyADQeD+AGogAykDiIABIMwBIM8BVq18ItUBIAMpA6B/fCLNASADKQO4gAEgzgEg0gFWrXwi0wEgAykDoIABfCLOASADKQPQgAF8ItIBIMsBIMwBVq0gAykD6IABIMsBINEBVK18fHwi1wF8IssBIAMpA9B/fCLMASADKQPofyDPASADKQPgfyLKAXwgygFUrXx8Is8BIAMpA/B+fCLRAUIAQgBC/////76y/fBCEMkDIANB0P4AaiADKQPofiLKAUIAQoGAgIC/sv3wwwBCABDJAyADQcD+AGogygFCAEKR4eXNh4n6mShCABDJAyADQbD+AGogygFCAELdsIWM6LaRqLh/QgAQyQMgA0Gg/gBqIMoBQgBCqcDGia7Ok7IwQgAQyQMgA0Hg/QBqIPQBQgAg6gFCABDJAyADQYD9AGog9QFCACDqAUIAEMkDIANB8PwAaiD2AUIAIOoBQgAQyQMgA0Hg/ABqIPcBQgAg6gFCABDJAyADQdD9AGogAykD+H4gzwEg0QFWrXwi2AEgAykDkH58ItABIAMpA6iAASDOASDTAVStfCLWASADKQOQgAF8ItMBIAMpA8CAAXwi1AEg0gEg1wFWrSADKQPYgAEgzgEg0gFWrXx8fCLOASADKQOQf3wi0gEgywEgzQFUrSADKQOofyDNASDVAVStfHx8Is0BIAMpA8B/fCLVASDMASDPAVatIAMpA9h/IMsBIMwBVq18fHwi1wF8IssBIAMpA8B+fCLMASADKQPYfiDRASADKQPQfiLKAXwgygFUrXx8Is8BIAMpA+B9fCLRAUIAQgBC/////76y/fBCEMkDIANBwP0AaiADKQPYfSLKAUIAQoGAgIC/sv3wwwBCABDJAyADQbD9AGogygFCAEKR4eXNh4n6mShCABDJAyADQaD9AGogygFCAELdsIWM6LaRqLh/QgAQyQMgA0GQ/QBqIMoBQgBCqcDGia7Ok7IwQgAQyQMCQAJAIAMpA5h9IAMpA6h+IAMpA7h/IM4BINQBVK0gAykDyIABINMBINQBVq18fCADKQOYgAEg0wEg1gFUrXx8ItMBIAMpA4B/fCLKASDNASDSAVStIAMpA5h/IM4BINIBVq18fHwizgEgAykDsH98ItIBIM4BVK18INIBINUBINcBVq0gAykDyH8gzQEg1QFWrXx8fCLNASDSAVStfCDKASDOAVatIAMpA4h/IMoBINMBVK18fHwi0wEgAykD8H18IsoBIAMpA4h+IM0BIM0BIAMpA4B+fCLOAVatfCDOASDOASDLASDQAVStIAMpA5h+INABINgBVK18fHwizQFWrXx8Is4BIAMpA6B+fCLSASDOAVStfCDSASDSASADKQO4fiDNASDNASADKQOwfnwi0AFWrXwg0AEgzAEgzwFWrSADKQPIfiDLASDMAVatfHx8Is0BINABVK18fCLLAVatfCDKASDOAVatIAMpA/h9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AykDmHwg0AEg0gFUrXx8fCLSASADKQOQenwi0AEgzAEgzgFUrSADKQOoeiDOASDXAVStfHx8Is4BIAMpA8B6fCLVASDNASDPAVStIAMpA9h6IMwBIM8BVq18fHwi1wF8IswBIAMpA8B5fCLPASADKQPYeSDTASADKQPQeSLKAXwgygFUrXx8Is0BIAMpA/B7fCLTAUIAQgBC/////76y/fBCEMkDIANB8PgAaiADKQOIeSLKAUIAQoGAgIC/sv3wwwBCABDJAyADQeD4AGogygFCAEKR4eXNh4n6mShCABDJAyADQdD4AGogygFCAELdsIWM6LaRqLh/QgAQyQMgA0HA+ABqIMoBQgBCqcDGia7Ok7IwQgAQyQMCQAJAIAMpA8h4IAMpA6h5IAMpA7h6INIBINQBVK0gAykDiHwg0QEg1AFWrXx8IAMpA6h7INEBINoBVK18fCLUASADKQOAenwiygEgzgEg0AFUrSADKQOYeiDQASDSAVStfHx8ItIBIAMpA7B6fCLRASDSAVStfCDRASDVASDXAVatIAMpA8h6IM4BINUBVq18fHwizgEg0QFUrXwgygEg0gFWrSADKQOIeiDKASDUAVStfHx8ItABIAMpA6B4fCLKASADKQO4eCDOASDOASADKQOweHwi0gFWrXwg0gEg0gEgywEgzAFWrSADKQOYeSDLASDWAVStfHx8IssBVq18fCLOASADKQOgeXwi0gEgzgFUrXwg0gEgAykDuHkgywEgywEgAykDsHl8ItEBVq18INEBINEBIM0BIM8BVK0gAykDyHkgzAEgzwFWrXx8fCLPAVatfHwiywEg0gFUrXwgygEgzgFWrSADKQOoeCDKASDQAVStfHx8ItEBIAMpA5B7fCLMASADKQO4eyDLASADKQOwe3wiygEgywFUrXwgygEgygEgAykD2HsgAykD+HsgzQEg0wFWrXwizQEgAykD0Ht8IssBIM0BVK18IMsBIMsBIM8BfCLPAVatfHwiywFWrXx8Is0BIAMpA8B4fCLOASDNAVStfCDOASADKQPYeCDLASDLASADKQPQeHwi0gFWrXwg0gEg0gEgAykD6HggzwEgzwEgAykD4Hh8IsoBVq18IMoBIAMpA/h4IAMpA/B4IssBINMBfCDLAVStfHwi1QEgygFUrXx8IsoBVq18fCLLASDOAVStfCDM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AyADQdD0AGogAykD+HUg1gEg6QFWrXwi+wEgAykDkHV8IvEBIAMpA6h3INsBIPIBVK18IvwBIAMpA5B3fCLyASADKQPAd3wi8wEg3AEg+gFWrSADKQPYdyDbASDcAVatfHx8ItsBIAMpA5B2fCLcASDTASDZAVStIAMpA6h2INkBIPkBVK18fHwi2QEgAykDwHZ8IvkBINQBINYBVq0gAykD2HYg0wEg1AFWrXx8fCL6AXwi0wEgAykDwHV8ItQBIAMpA9h1IOkBIAMpA9B1ItABfCDQAVStfHwi1gEgAykD4HR8IukBQgBCAEL/////vrL98EIQyQMgA0HA9ABqIAMpA9h0ItABQgBCgYCAgL+y/fDDAEIAEMkDIANBsPQAaiDQAUIAQpHh5c2HifqZKEIAEMkDIANBoPQAaiDQAUIAQt2whYzotpGouH9CABDJAyADQZD0AGog0AFCAEKpwMaJrs6TsjBCABDJAwJAAkAgAykDmHQgAykDqHUgAykDuHYg2wEg8wFUrSADKQPIdyDyASDzAVatfHwgAykDmHcg8gEg/AFUrXx8IvIBIAMpA4B2fCLQASDZASDcAVStIAMpA5h2INsBINwBVq18fHwi2wEgAykDsHZ8ItwBINsBVK18INwBIPkBIPoBVq0gAykDyHYg2QEg+QFWrXx8fCLZASDcAVStfCDQASDbAVatIAMpA4h2INABIPIBVK18fHwi8gEgAykD8HR8ItABIAMpA4h1INkBINkBIAMpA4B1fCLbAVatfCDbASDbASDTASDxAVStIAMpA5h1IPEBIPsBVK18fHwi2QFWrXx8ItsBIAMpA6B1fCLcASDbAVStfCDcASDcASADKQO4dSDZASDZASADKQOwdXwi8QFWrXwg8QEg8QEg1AEg1gFWrSADKQPIdSDTASDUAVatfHx8ItQBVq18fCLTAVatfCDQASDbAVatIAMpA/h0INABIPIBVK18fHwi8QEgAykD4HN8ItkBIAMpA/hzINMBIAMpA/BzfCLQASDTAVStfCDQASDQASADKQOIdCADKQPodCDWASDpAVatfCLWASADKQOAdHwi0wEg1gFUrXwg0wEg0wEg1AF8ItQBVq18fCLTAVatfHwi1gEgAykDkHR8ItsBINYBVK18INsBIAMpA6h0INMBINMBIAMpA6B0fCLcAVatfCDcASDc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gL+y/fDDAEIAEMkDIANB8O8AaiDQAUIAQpHh5c2HifqZKEIAEMkDIANB4O8AaiDQAUIAQt2whYzotpGouH9CABDJAyADQdDvAGog0AFCAEKpwMaJrs6TsjBCABDJAwJAAkAgAykD2G8gAykDyHAgAykDqHEg1gEg2QFWrSADKQOIciDUASDWAVatfHwgAykDqHAg1AEg+wFUrXx8IvsBIAMpA8BvfCLQASDxASDyAVStIAMpA8hzINkBIPIBVq18fHwi1AEgAykDoHF8ItYBINQBVK18INYBINYBIPMBIPoBVq0gAykDuHEg8QEg8wFWrXx8fCLZAVatfCDQASDUAVatIAMpA8hvINABIPsBVK18fHwi8QEgAykDsG98ItABIAMpA7hzINkBINkBIAMpA7BzfCLUAVatfCDUASDUASDTASDbAVatIAMpA/hyINMBIP0BVK18fHwi0wFWrXx8ItQBIAMpA8BwfCLWASDUAVStfCDWASDWASADKQPYcCDTASDTASADKQPQcHwi2QFWrXwg2QEg2QEg3AEg6QFWrSADKQPocCDbASDcAVatfHx8ItsBVq18fCLTAVatfCDQASDUAVatIAMpA7hvINABIPEBVK18fHwi8QEgAykDoG98ItYBIAMpA6hzINMBIAMpA6BzfCLQASDTAVStfCDQASDQASADKQPociADKQO4cCDpASD5AVatfCLUASADKQPgcnwi0wEg1AFUrXwg0wEg0wEg2wF8ItQBVq18fCLTAVatfHwi2QEgAykD0G98ItsBINkBVK18INsBIAMpA+hvINMBINMBIAMpA+BvfCLcAVatfCDcASDcASADKQP4byDUASDUASADKQPwb3wi0AFWrXwg0AEg0AEgAykDiHAgAykDgHAi0wEg+QF8INMBVK18fCLUAVatfHwi0AFWrXx8ItMBINsBVK18INYBINkBVq0gAykDqG8g1gEg8QFUrXx8fCLWAUKpwMaJrs6TsjBWDQACQCDWAUKpwMaJrs6TsjBRBEAg0wFC3bCFjOi2kai4f1YNAiDTAULdsIWM6LaRqLh/UQ0BQqnAxomuzpOyMCHWAQsg0wEh2QEg0AEh3AEMAgsg0AFCkeHlzYeJ+pkoVg0AQt2whYzotpGouH8h2QEg0AFCkeHlzYeJ+pkoUgRAQqnAxomuzpOyMCHWASDQASHcAQwCC0KR4eXNh4n6mSgh3AEg1AFCgYCAgL+y/fDDAFoNAEKpwMaJrs6TsjAh1gEMAQsg0AFCkeHlzYeJ+pkofSLZASDUAUKBgICAv7L98MMAVK0i2wF9IdwBINMBQqPP+vOXye7XxwB8IukBINABQpHh5c2HifqZKFQg2QEg2wFUcq0i0AF9IdkBINYBINMBQt2whYzotpGouH9UINABIOkBVnKtfUKpwMaJrs6TsjB9IdYBINQBQoGAgIC/sv3wwwB9IdQBC0KpwMaJrs6TsjAh2wEg0gEg2QF8ItIBINkBVCDSASDMASDcAXwizAEg3AFUIMwBIMoBINQBfCLKASDUAVStfCLQASDMAVRyrXwi0wEg0gFUcq0gzQEg1gF8fCLNASHSAQJAAkACQCDNAUKpwMaJrs6TsjBSDQBC3bCFjOi2kai4fyHbASDTASLSAULdsIWM6LaRqLh/Ug0AQpHh5c2HifqZKCHbASDQASLSAUKR4eXNh4n6mShSDQBCgYCAgL+y/fDDACHbASDKASHSASDKAUKBgICAv7L98MMAUQ0BCyDSASDbAVoNACDTASHSASDQASHMAQwBCyDQAUKR4eXNh4n6mSh9ItIBIMoBQoGAgIC/sv3wwwBUrSLUAX0hzAEg0wFCo8/685fJ7tfHAHwi1gEg0AFCkeHlzYeJ+pkoVCDSASDUAVRyrSLQAX0h0gEgzQEg0wFC3bCFjOi2kai4f1Qg0AEg1gFWcq19QqnAxomuzpOyMH0hzQEgygFCgYCAgL+y/fDDAH0hygELIANB0O0AaiDRAUIAIO0BQgAQyQMgA0GQ7gBqINEBQgAg5wFCABDJAyADQdDuAGog0QFCACDYAUIAEMkDIANBkO8AaiDRAUIAINcBQgAQyQMgA0HA7QBqIAMpA9BtItABQgBCAEL/////vrL98EIQyQMgA0Gw7QBqIAMpA8htItEBQgBCgYCAgL+y/fDDAEIAEMkDIANBoO0AaiDRAUIAQpHh5c2HifqZKEIAEMkDIANBkO0AaiDRAUIAQt2whYzotpGouH9CABDJAyADQYDtAGog0QFCAEKpwMaJrs6TsjBCABDJAyADQfDsAGogywFCACDtAUIAEMkDIANBgO4AaiDLAUIAIOcBQgAQyQMgA0HA7gBqIMsBQgAg2AFCABDJAyADQYDvAGogywFCACDXAUIAEMkDIANB4OwAaiADKQOgbSLZASADKQPYbSLUASADKQOQbnwi1gF8ItEBIAMpA7htINABIAMpA7BtIssBfCDLAVStfHwi0AEgAykD8Gx8ItMBQgBCAEL/////vrL98EIQyQMgA0HQ7ABqIAMpA+hsIssBQgBCgYCAgL+y/fDDAEIAEMkDIANBwOwAaiDLAUIAQpHh5c2HifqZKEIAEMkDIANBsOwAaiDLAUIAQt2whYzotpGouH9CABDJAyADQaDsAGogywFCAEKpwMaJrs6TsjBCABDJAyADQZDsAGogzwFCACDtAUIAEMkDIANB8O0AaiDPAUIAIOcBQgAQyQMgA0Gw7gBqIM8BQgAg2AFCABDJAyADQfDuAGogzwFCACDXAUIAEMkDIANBgOwAaiADKQP4bCDQASDTAVatfCLpASADKQOAbnwizwEgAykDmG4g1AEg1gFWrXwi2wEgAykD0G58ItQBIAMpA5BtfCLWASDQASDRAVStIAMpA6htINEBINkBVK18fHwi8QF8ItEBIAMpA8BsfCLQASADKQPYbCDTASADKQPQbCLLAXwgywFUrXx8ItMBIAMpA5BsfCLZAUIAQgBC/////76y/fBCEMkDIANB8OsAaiADKQOIbCLLAUIAQoGAgIC/sv3wwwBCABDJAyADQeDrAGogywFCAEKR4eXNh4n6mShCABDJAyADQdDrAGogywFCAELdsIWM6LaRqLh/QgAQyQMgA0HA6wBqIMsBQgBCqcDGia7Ok7IwQgAQyQMgA0Gw6wBqIM4BQgAg7QFCABDJAyADQeDtAGogzgFCACDnAUIAEMkDIANBoO4AaiDOAUIAINgBQgAQyQMgA0Hg7gBqIM4BQgAg1wFCABDJAyADQaDrAGogAykDmGwg0wEg2QFWrXwi8gEgAykD8G18Is4BIAMpA9huINQBINsBVK18IvMBIAMpA5BvfCLbASADKQOAbXwi3AEg1gEg8QFWrSADKQOYbSDUASDWAVatfHx8ItQBIAMpA8BufCLWASDPASDRAVatIAMpA4huIM8BIOkBVK18fHwizwEgAykDsGx8IukBINABINMBVq0gAykDyGwg0AEg0QFUrXx8fCLxAXwi0QEgAykD4Gt8ItABIAMpA/hrINkBIAMpA/BrIssBfCDLAVStfHwi0wEgAykDsGt8ItkBQgBCAEL/////vrL98EIQyQMgA0GQ6wBqIAMpA6hrIssBQgBCgYCAgL+y/fDDAEIAEMkDIANBgOsAaiDLAUIAQpHh5c2HifqZKEIAEMkDIANB8OoAaiDLAUIAQt2whYzotpGouH9CABDJAyADQeDqAGogywFCAEKpwMaJrs6TsjBCABDJAwJAAkAgAykD6GogAykDyGsgAykDqGwg1AEg3AFUrSADKQOIbSDbASDcAVatfHwgAykDmG8g2wEg8wFUrXx8ItsBIAMpA4BvfCLLASDPASDWAVStIAMpA8huINQBINYBVq18fHwi1AEgAykDoGx8ItYBINQBVK18INYBIOkBIPEBVq0gAykDuGwgzwEg6QFWrXx8fCLPASDWAVStfCDLASDUAVatIAMpA4hvIMsBINsBVK18fHwi2wEgAykD8G58IssBIAMpA7huIM8BIM8BIAMpA7BufCLUAVatfCDUASDUASDOASDRAVatIAMpA/htIM4BIPIBVK18fHwizwFWrXx8Is4BIAMpA8BrfCLUASDOAVStfCDUASDUASADKQPYayDPASDPASADKQPQa3wi1gFWrXwg1gEg0AEg0wFWrSADKQPoayDQASDRAVStfHx8ItEBINYBVK18fCLPAVatfCDLASDOAVatIAMpA/huIMsBINsBVK18fHwi1gEgAykD4G58IssBIAMpA6huIM8BIM8BIAMpA6BufCLOAVatfCDOASDOASADKQPobSADKQO4ayDTASDZAVatfCLQASADKQPgbXwizwEg0AFUrXwgzwEgzwEg0QF8ItEBVq18fCLPAVatfHwizgEgAykD4Gp8ItQBIM4BVK18INQBINQBIAMpA/hqIM8BIM8BIAMpA/BqfCLTAVatfCDTASDTASADKQOIayDRASDRASADKQOAa3wizwFWrXwgzwEgzwEgAykDmGsgAykDkGsi0QEg2QF8INEBVK18fCLRAVatfHwi0AFWrXx8ItMBVq18IMsBIM4BVq0gAykD6G4gywEg1gFUrXx8fCLOAUKpwMaJrs6TsjBWDQACQCDOAUKpwMaJrs6TsjBRBEAg0wFC3bCFjOi2kai4f1YNAiDTAULdsIWM6LaRqLh/UgRAINABIcsBINMBIc8BQqnAxomuzpOyMCHOAQwECyDQAUKR4eXNh4n6mShWDQJC3bCFjOi2kai4fyHPASDQAUKR4eXNh4n6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AELdsIWM6LaRqLh/QgAQyQMgA0Gg3QBqIMsBQgBCqcDGia7Ok7IwQgAQyQMCQCADKQOoXSADKQOIXiADKQPoXiDUASDcAVStIAMpA8hfINsBINwBVq18fCADKQPYYSDbASDlAVStfHwi2wEgAykDwGF8IssBIM8BINYBVK0gAykDiGEg1AEg1gFWrXx8fCLUASADKQPgXnwi1gEg1AFUrXwg1gEg3QEg3wFWrSADKQP4XiDPASDdAVatfHx8Is8BINYBVK18IMsBINQBVq0gAykDyGEgywEg2wFUrXx8fCLbASADKQOwYXwiywEgAykD+GAgzwEgzwEgAykD8GB8ItQBVq18INQBINQBIM4BINEBVq0gAykDuGAgzgEg5AFUrXx8fCLPAVatfHwizgEgAykDgF58ItQBIM4BVK18INQBINQBIAMpA5heIM8BIM8BIAMpA5BefCLWAVatfCDWASDQASDTAVatIAMpA6heINABINEBVK18fHwi0QEg1gFUrXx8Is8BVq18IMsBIM4BVq0gAykDuGEgywEg2wFUrXx8fCLWASADKQOgYXwiywEgAykD6GAgzwEgzwEgAykD4GB8Is4BVq18IM4BIM4BIAMpA6hgIAMpA/hdINMBINkBVq18ItABIAMpA6BgfCLPASDQAVStfCDPASDPASDRAXwi0QFWrXx8Is8BVq18fCLOASADKQOgXXwi1AEgzgFUrXwg1AEg1AEgAykDuF0gzwEgzwEgAykDsF18ItMBVq18INMBINMBIAMpA8hdINEBINEBIAMpA8BdfCLPAVatfCDPASDPASADKQPYXSADKQPQXSLRASDZAXwg0QFUrXx8ItEBVq18fCLQAVatfHwi0wFWrXwgywEgzgFWrSADKQOoYSDLASDWAVStfHx8Is4BQqnAxomuzpOyMFYNACDOAUKpwMaJrs6TsjBSBEAg0AEhywEg0wEhzwEMAgsg0wFC3bCFjOi2kai4f1YNACDTAULdsIWM6LaRqLh/UgRAINABIcsBINMBIc8BQqnAxomuzpOyMCHOAQwCCyDQAUKR4eXNh4n6mShWDQBC3bCFjOi2kai4fyHPASDQAUKR4eXNh4n6mShSBEAg0AEhywFCqcDGia7Ok7IwIc4BDAILQpHh5c2HifqZKCHLASDRAUKBgICAv7L98MMAWg0AQqnAxomuzpOyMCHOAQwBCyDQAUKR4eXNh4n6mSh9Is8BINEBQoGAgIC/sv3wwwBUrSLUAX0hywEg0wFCo8/685fJ7tfHAHwi1gEg0AFCkeHlzYeJ+pkoVCDPASDUAVRyrSLQAX0hzwEgzgEg0wFC3bCFjOi2kai4f1Qg0AEg1gFWcq19QqnAxomuzpOyMH0hzgEg0QFCgYCAgL+y/fDDAH0h0QELIAxBAWohBSAKQSBqIQogB0EoaiEHIAxBBUkNAAsMAQsgBkGBgICAeDYCACAGQgI3AwgMAwtB0c7FAC0AABoCQAJAAkACQAJAQYAHQQgQ1gQiDARAIAxBAEGAB/wLACAIQQFrIRcgCCEHA0AgByIFQQFrIQcCfwJAAkACfgJAIBcgGUkEQCAFQR1PDQMgFCAHQQV0Ig1qIQpCr76f0Jn4nYUOIdEBIA0gRWoiBSkDACLWASHOASDWAUKvvp/QmfidhQ5SDQFCrozlw/ftqLfmACHRASAFKQMIIs4BQq6M5cP37ai35gBSDQFCqZqD+9nSnf42IdEBIAUpAxAizgFCqZqD+9nSnf42Ug0BQvv////Eg43LrH8h0QEgBSkDGCLOAUL7////xIONy6x/Ug0BQqmag/vZ0p3+NiHOAUKujOXD9+2ot+YADAILIAcgGUGor8IAENkDAAsgzgEg0QFWIAUpAxgh0QENAiAFKQMQIc4BIAUpAwgLIcsBQqmag/vZ0p3+NiDOAX0izwEg0QFC+////8SDjcusf1atItABfSHYAUKujOXD9+2ot+YAIMsBfSLUASDPASDQAVQgzgFCqZqD+9nSnf42VnKtIs8BfSHTAUKvvp/QmfidhQ4g1gF9IdwBQvv////Eg43LrH8g0QF9IdcBIM8BINQBViDLAUKujOXD9+2ot+YAVnIMAgsgB0EcQbivwgAQ2QMAC0LdsIWM6LaRqLh/IAUpAwgiywFCrozlw/ftqLfmAH0izwEgBSkDECLOAUKpmoP72dKd/jZUIM4BQqmag/vZ0p3+Nn0izgEg0QFC+////8SDjcusf1StItABVHKtItQBfSLVAX0i2QEgzgEg0AF9Is4BQpHh5c2HifqZKFZCkeHlzYeJ+pkoIM4BfSLOASDRAUKDgICA/Mn1ww98Qv7////AzYKPvH9UrSLQAVRyrSLbAX0h0wEgzgEg0AF9IdgBIMsBQq6M5cP37ai35gBUIM8BINQBVHKtINYBfULY/uXZx8axtz58IdwBQvz///+Dtoq8cCDRAX0h1wEg2QEg2wFUINUBQt2whYzotpGouH9WcgshHCADQZDdAGogCikDGCLOAUIAINcBQgAQyQMgA0Gg3ABqIAopAxAi0QFCACDXAUIAEMkDIANBgNwAaiAKKQMIItABQgAg1wFCABDJAyADQeDbAGogCikDACLVAUIAINcBQgAQyQMgA0GA3QBqIAMpA5BdItQBQgBCAEL/////vrL98EIQyQMgA0Hw3ABqIAMpA4hdIssBQgBCgYCAgL+y/fDDAEIAEMkDIANB4NwAaiDLAUIAQpHh5c2HifqZKEIAEMkDIANB0NwAaiDLAUIAQt2whYzotpGouH9CABDJAyADQcDcAGogywFCAEKpwMaJrs6TsjBCABDJAyADQcDbAGogzgFCACDYAUIAEMkDIANB4NoAaiDRAUIAINgBQgAQyQMgA0HQ2gBqINABQgAg2AFCABDJAyADQcDaAGog1QFCACDYAUIAEMkDIANBsNsAaiADKQPgXCLbASADKQOYXSLYASADKQOgXHwi2QF8Is8BIAMpA/hcINQBIAMpA/BcIssBfCDLAVStfHwi1AEgAykDwFt8ItcBQgBCAEL/////vrL98EIQyQMgA0Gg2wBqIAMpA7hbIssBQgBCgYCAgL+y/fDDAEIAEMkDIANBkNsAaiDLAUIAQpHh5c2HifqZKEIAEMkDIANBgNsAaiDLAUIAQt2whYzotpGouH9CABDJAyADQfDaAGogywFCAEKpwMaJrs6TsjBCABDJAyADQbDaAGogzgFCACDTAUIAEMkDIANB0NkAaiDRAUIAINMBQgAQyQMgA0Hw2ABqINABQgAg0wFCABDJAyADQeDYAGog1QFCACDTAUIAEMkDIANBoNoAaiADKQPIWyDUASDXAVatfCLkASADKQPgWnwi0wEgAykDqFwg2AEg2QFWrXwi3QEgAykDgFx8ItgBIAMpA9BcfCLZASDPASDUAVatIAMpA+hcIM8BINsBVK18fHwi5QF8Is8BIAMpA5BbfCLUASADKQOoWyDXASADKQOgWyLLAXwgywFUrXx8ItcBIAMpA7BafCLbAUIAQgBC/////76y/fBCEMkDIANBkNoAaiADKQOoWiLLAUIAQoGAgIC/sv3wwwBCABDJAyAD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AVatIAMpA9hWINkBINsBVq18fHwi2QEgAykDsFd8ItsBIM8BINABVK0gAykDyFcg0AEg5AFUrXx8fCLQASADKQPwVXwi5AEgzgEg0QFWrSADKQOIViDOASDPAVStfHx8IuUBfCLPASADKQOgVXwizgEgAykDuFUg3AEgAykDsFUiywF8IMsBVK18fCLRASADKQPQWHwi3AFCAEIAQv////++sv3wQhDJAyADQdDUAGogAykD6FQiywFCAEKBgICAv7L98MMAQgAQyQMgA0HA1ABqIMsBQgBCkeHlzYeJ+pkoQgAQyQMgA0Gw1ABqIMsBQgBC3bCFjOi2kai4f0IAEMkDIANBoNQAaiDLAUIAQqnAxomuzpOyMEIAEMkDAkACQCADKQOoVCADKQPoVyADKQOoVyADKQP4VCDdASDnAVStfCLnASADKQOgV3wiywEg5wFUrXwgywEgywEg2QEg3wFUrSADKQPIViDdASDfAVatfHx8It0BVq18IN0BIN0BINABINsBVK0gAykDuFcg2QEg2wFWrXx8fCLLAVatfCLbASADKQPgV3wi2QEg2wFUrXwg2QEg2QEgAykD6FUgywEgywEgAykD4FV8ItsBVq18INsBINsBIOQBIOUBVq0gAykD+FUg0AEg5AFWrXx8fCLLAVatfHwi0AFWrXwg0AEg0AEgAykD+FcgywEgywEgAykD8Fd8ItkBVq18INkBIM8BINUBVK0gAykDiFgg1QEg6wFUrXx8fCLLASDZAVStfHwi1QFWrXwi3QEgAykDoFh8ItkBIAMpA4hVINUBINUBIAMpA4BVfCLQAVatfCDQASDQASADKQOYVSDLASDLASADKQOQVXwi1QFWrXwg1QEg1QEgzgEg0QFWrSADKQOoVSDOASDPAVStfHx8ItsBVq18fCLLAVatfHwizwEgAykDuFggywEgywEgAykDsFh8Is4BVq18IM4BIM4BIAMpA8hYIAMpA9hYINEBINwBVq18ItEBIAMpA8BYfCLLASDRAVStfCDLASDLASDbAXwi0QFWrXx8IssBVq18fCLOASADKQOgVHwi2wEgzgFUrXwg2wEg2wEgAykDuFQgywEgywEgAykDsFR8ItUBVq18INUBINUBIAMpA8hUINEBINEBIAMpA8BUfCLLAVatfCDLASDLASADKQPYVCADKQPQVCLRASDc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ASADKQOoTyDZASADKQOgTyLNAXwgzQFUrXx8ItkBIAMpA4BOfCLcAUIAQgBC/////76y/fBCEMkDIANB4M0AaiADKQP4TSLNAUIAQoGAgIC/sv3wwwBCABDJAyADQdDNAGogzQFCAEKR4eXNh4n6mShCABDJAyADQcDNAGogzQFCAELdsIWM6LaRqLh/QgAQyQMgA0GwzQBqIM0BQgBCqcDGia7Ok7IwQgAQyQMgA0HwzABqIMwBQgAgzwFCABDJAyADQZDMAGog0gFCACDPAUIAEMkDIANBsMsAaiDQAUIAIM8BQgAQyQMgA0GgywBqINUBQgAgzwFCABDJAyADQeDMAGogAykDiE4g2QEg3AFWrXwi6wEgAykDoE18Is0BIAMpA9hOIN0BIN8BVq18IucBIAMpA7BOfCLdASADKQOAT3wi3wEgzgEg2QFWrSADKQOYTyDOASDlAVStfHx8IuwBfCLOASADKQPQTXwi2QEgAykD6E0g3AEgAykD4E0izwF8IM8BVK18fCLcASADKQPwTHwi5QFCAEIAQv////++sv3wQhDJAyADQdDMAGogAykD6EwizwFCAEKBgICAv7L98MMAQgAQyQMgA0HAzABqIM8BQgBCkeHlzYeJ+pkoQgAQyQMgA0GwzABqIM8BQgBC3bCFjOi2kai4f0IAEMkDIANBoMwAaiDPAUIAQqnAxomuzpOyMEIAEMkDIANB0M8AaiDMAUIAIOQBIBytfSLMAUIAEMkDIANB4M4AaiDSAUIAIMwBQgAQyQMgA0HAzgBqINABQgAgzAFCABDJAyADQaDOAGog1QFCACDMAUIAEMkDIANBgMwAaiADKQP4TCDcASDlAVatfCLtASADKQOQTHwizwEgAykDuE4g3QEg5wFUrXwi5wEgAykDkE58ItIBIAMpA/BOfCLQASDfASDsAVatIAMpA4hPIN0BIN8BVq18fHwi1QEgAykDkE18It0BIM0BIM4BVq0gAykDqE0gzQEg6wFUrXx8fCLNASADKQPATXwi3wEg2QEg3AFWrSADKQPYTSDOASDZAVatfHx8IusBfCLOASADKQPATHwi2QEgAykD2Ewg5QEgAykD0EwizAF8IMwBVK18fCLcASADKQPQT3wi5AFCAEIAQv////++sv3wQhDJAyADQfDLAGogAykDiEwizAFCAEKBgICAv7L98MMAQgAQyQMgA0HgywBqIMwBQgBCkeHlzYeJ+pkoQgAQyQMgA0HQywBqIMwBQgBC3bCFjOi2kai4f0IAEMkDIANBwMsAaiDMAUIAQqnAxomuzpOyMEIAEMkDAkACQCADKQPISyADKQOoTCADKQO4TSDQASDVAVatIAMpA/hOINABINIBVK18fCADKQOYTiDSASDnAVStfHwi5QEgAykDgE18IswBIM0BIN0BVK0gAykDmE0g1QEg3QFWrXx8fCLSASADKQOwTXwi0AEg0gFUrXwg0AEg3wEg6wFWrSADKQPITSDNASDfAVatfHx8Is0BINABVK18IMwBINIBVq0gAykDiE0gzAEg5QFUrXx8fCLVASADKQOgS3wizAEgAykDuEsgzQEgzQEgAykDsEt8ItIBVq18INIBINIBIM4BIM8BVK0gAykDmEwgzwEg7QFUrXx8fCLPAVatfHwizQEgAykDoEx8ItIBIM0BVK18INIBIAMpA7hMIM8BIM8BIAMpA7BMfCLQAVatfCDQASDQASDZASDcAVatIAMpA8hMIM4BINkBVq18fHwizgFWrXx8Is8BINIBVK18IMwBIM0BVq0gAykDqEsgzAEg1QFUrXx8fCLZASADKQOgTnwizQEgAykDyE4gzwEgAykDwE58IswBIM8BVK18IMwBIMwBIAMpA+hOIAMpA9hPINwBIOQBVq18ItIBIAMpA+BOfCLPASDSAVStfCDPASDOASDPAXwizgFWrXx8Is8BVq18fCLSASADKQPAS3wi1QEg0gFUrXwg1QEg1QEgAykD2EsgzwEgzwEgAykD0Et8ItABVq18INABINABIAMpA+hLIM4BIM4BIAMpA+BLfCLMAVatfCDMASDMASADKQP4SyADKQPwSyLPASDkAXwgzwFUrXx8Is8BVq18fCLMAVatfHwi0AFWrXwgzQEg0gFWrSADKQOoTiDNASDZAVStfHx8Is4BQqnAxomuzpOyMFYNAAJAIM4BQqnAxomuzpOyMFEEQCDQAULdsIWM6LaRqLh/Vg0CINABQt2whYzotpGouH9RDQFCqcDGia7Ok7IwIc4BCyDQASHNASDMASHSAQwCCyDMAUKR4eXNh4n6mShWDQBC3bCFjOi2kai4fyHNASDMAUKR4eXNh4n6mShSBEBCqcDGia7Ok7IwIc4BIMwBIdIBDAILQpHh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AykDqEkgzQEg1QFUrXx8fCLNASADKQPASXwi1QEgzAEgzwFWrSADKQPYSSDLASDMAVatfHx8ItcBfCLLASADKQPASHwizAEgAykD2Egg0AEgAykD0EgiygF8IMoBVK18fCLPASADKQPgR3wi0AFCAEIAQv////++sv3wQhDJAyADQcDHAGogAykD2EciygFCAEKBgICAv7L98MMAQgAQyQMgA0GwxwBqIMoBQgBCkeHlzYeJ+pkoQgAQyQMgA0GgxwBqIMoBQgBC3bCFjOi2kai4f0IAEMkDIANBkMcAaiDKAUIAQqnAxomuzpOyMEIAEMkDAkACQCADKQOYRyADKQOoSCADKQO4SSDOASDUAVStIAMpA8hKINMBINQBVq18fCADKQOYSiDTASDWAVStfHwi0wEgAykDgEl8IsoBIM0BINIBVK0gAykDmEkgzgEg0gFWrXx8fCLOASADKQOwSXwi0gEgzgFUrXwg0gEg1QEg1wFWrSADKQPISSDNASDVAVatfHx8Is0BINIBVK18IMoBIM4BVq0gAykDiEkgygEg0wFUrXx8fCLTASADKQPwR3wiygEgAykDiEggzQEgzQEgAykDgEh8Is4BVq18IM4BIM4BIMsBINEBVK0gAykDmEgg0QEg2AFUrXx8fCLNAVatfHwizgEgAykDoEh8ItIBIM4BVK18INIBINIBIAMpA7hIIM0BIM0BIAMpA7BIfCLRAVatfCDRASDMASDPAVatIAMpA8hIIMsBIMwBVq18fHwizQEg0QFUrXx8IssBVq18IMoBIM4BVq0gAykD+EcgygEg0wFUrXx8fCLRASADKQPgRnwizAEgAykD+EYgywEgAykD8EZ8IsoBIMsBVK18IMoBIMoBIAMpA4hHIAMpA+hHIM8BINABVq18Is8BIAMpA4BHfCLLASDPAVStfCDLASDLASDNAXwizwFWrXx8IssBVq18fCLNASADKQOQR3wizgEgzQFUrXwgzgEgzgEgAykDqEcgywEgywEgAykDoEd8ItIBVq18INIBINIBIAMpA7hHIM8BIM8BIAMpA7BHfCLLAVatfCDLASDLASADKQPIRyADKQPARyLKASDQAXwgygFUrXx8IsoBVq18fCLLAVatfHwizwFWrXwgzAEgzQFWrSADKQPoRiDMASDRAVStfHx8Is0BQqnAxomuzpOyMFYN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INgBVK18fCLYASADKQPARHwiygEg0AEg0wFUrSADKQPYRCDNASDTAVatfHx8IswBIAMpA/BEfCLPASDMAVStfCDPASDPASDUASDXAVatIAMpA4hFINABINQBVq18fHwizQFWrXwgygEgzAFWrSADKQPIRCDKASDYAVStfHx8ItABIAMpA7BDfCLKASADKQPIQyDNASDNASADKQPAQ3wizAFWrXwgzAEgzAEgywEgzgFWrSADKQPYQyDLASDaAVStfHx8IssBVq18fCLMASADKQPgQ3wizwEgzAFUrXwgzwEgAykD+EMgywEgywEgAykD8EN8Is0BVq18IM0BIM0BINEBINIBVK0gAykDiEQgzgEg0gFWrXx8fCLOAVatfHwiywEgzwFUrXwgygEgzAFWrSADKQO4QyDKASDQAVStfHx8ItABIAMpA6BCfCLMASADKQO4QiDLASADKQOwQnwiygEgywFUrXwgygEgygEgAykDyEIgAykDqEMg0QEg1QFWrXwizwEgAykDwEJ8IssBIM8BVK18IMsBIMsBIM4BfCLPAVatfHwiywFWrXx8Is4BIAMpA9BCfCLSASDOAVStfCDSASADKQPoQiDLASDLASADKQPgQnwi0QFWrXwg0QEg0QEgAykD+EIgzwEgzwEgAykD8EJ8IsoBVq18IMoBIMoBIAMpA4hDIAMpA4BDIssBINUBfCDLAVStfHwizQFWrXx8IsoBVq18fCLLASDSAVStfCDMASDOAVatIAMpA6hCIMwBINABVK18fHwi0gFCqcDGia7Ok7IwVg0DINIBQqnAxomuzpOyMFENAgwEC0EIQYAHQciswgAQyAQACyAGINoBNwMQIAZCAjcDCCAGQYGAgIB4NgIAIAxBgAcQ3wQMBgsgywFC3bCFjOi2kai4f1YNACDLAULdsIWM6LaRqLh/UgRAQqnAxomuzpOyMCHSAQwCCyDKAUKR4eXNh4n6mShWDQBC3bCFjOi2kai4fyHaASDKAUKR4eXNh4n6mShSBEBCqcDGia7Ok7IwIdIBIMoBIdYBDAMLQpHh5c2HifqZKCHWASDNAUKBgICAv7L98MMAWg0AQqnAxomuzpOyMCHSAQwCCyDKAUKR4eXNh4n6mSh9IswBIM0BQoGAgIC/sv3wwwBUrSLPAX0h1gEgywFCo8/685fJ7tfHAHwizgEgygFCkeHlzYeJ+pkoVCDMASDPAVRyrSLKAX0h2gEg0gEgywFC3bCFjOi2kai4f1QgygEgzgFWcq19QqnAxomuzpOyMH0h0gEgzQFCgYCAgL+y/fDDAH0hzQEMAQsgywEh2gEgygEh1gELIANB4MEAaiATKQMYIsoBQgAg9AFCABDJAyADQdDAAGogEykDECLLAUIAIPQBQgAQyQMgA0HAP2ogEykDCCLMAUIAIPQBQgAQyQMgA0GwPmogEykDACLPAUIAIPQBQgAQyQMgA0HQwQBqIAMpA+BBItABQgBCAEL/////vrL98EIQyQMgA0HAwQBqIAMpA9hBIs4BQgBCgYCAgL+y/fDDAEIAEMkDIANBsMEAaiDOAUIAQpHh5c2HifqZKEIAEMkDIANBoMEAaiDOAUIAQt2whYzotpGouH9CABDJAyADQZDBAGogzgFCAEKpwMaJrs6TsjBCABDJAyADQfDBAGogygFCACD1AUIAEMkDIANB4MAAaiDLAUIAIPUBQgAQyQMgA0HQP2ogzAFCACD1AUIAEMkDIANBwD5qIM8BQgAg9QFCABDJAyADQcDAAGogAykDsEEi2AEgAykD6EEi1QEgAykD0EB8ItcBfCLRASADKQPIQSDQASADKQPAQSLOAXwgzgFUrXx8ItABIAMpA/BBfCLTAUIAQgBC/////76y/fBCEMkDIANBsMAAaiADKQPIQCLOAUIAQoGAgIC/sv3wwwBCABDJAyADQaDAAGogzgFCAEKR4eXNh4n6mShCABDJAyADQZDAAGogzgFCAELdsIWM6LaRqLh/QgAQyQMgA0GAQGsgzgFCAEKpwMaJrs6TsjBCABDJAyADQYDCAGogygFCACD2AUIAEMkDIANB8MAAaiDLAUIAIPYBQgAQyQMgA0HgP2ogzAFCACD2AUIAEMkDIANB0D5qIM8BQgAg9gFCABDJAyADQbA/aiADKQP4QSDQASDTAVatfCLZASADKQPgQHwi1AEgAykD2EAg1QEg1wFWrXwi2wEgAykDwD98ItUBIAMpA6BBfCLXASDQASDRAVStIAMpA7hBINEBINgBVK18fHwi3AF8ItEBIAMpA6BAfCLQASADKQO4QCDTASADKQOwQCLOAXwgzgFUrXx8ItMBIAMpA4BCfCLYAUIAQgBC/////76y/fBCEMkDIANBoD9qIAMpA7g/Is4BQgBCgYCAgL+y/fDDAEIAEMkDIANBkD9qIM4BQgBCkeHlzYeJ+pkoQgAQyQMgA0GAP2ogzgFCAELdsIWM6LaRqLh/QgAQyQMgA0HwPmogzgFCAEKpwMaJrs6TsjBCABDJAyADQZDCAGogygFCACD3AUIAEMkDIANBgMEAaiDLAUIAIPcBQgAQyQMgA0HwP2ogzAFCACD3AUIAEMkDIANB4D5qIM8BQgAg9wFCABDJAyADQaA+aiADKQOIQiDTASDYAVatfCLeASADKQPwQHwiywEgAykDyD8g1QEg2wFUrXwi2wEgAykDsD58IswBIAMpA5BBfCLPASDXASDcAVatIAMpA6hBINUBINcBVq18fHwizgEgAykD0D98ItUBINEBINQBVK0gAykD6EAg1AEg2QFUrXx8fCLUASADKQOQQHwi1wEg0AEg0wFWrSADKQOoQCDQASDRAVStfHx8ItkBfCLRASADKQOQP3wi0AEgAykDqD8g2AEgAykDoD8iygF8IMoBVK18fCLTASADKQOQQnwi2AFCAEIAQv////++sv3wQhDJAyADQZA+aiADKQOoPiLKAUIAQoGAgIC/sv3wwwBCABDJAyADQYA+aiDKAUIAQpHh5c2HifqZKEIAEMkDIANB8D1qIMoBQgBC3bCFjOi2kai4f0IAEMkDIANB4D1qIMoBQgBCqcDGia7Ok7IwQgAQyQMCQAJAIAMpA+g9IAMpA/g+IAMpA4hAIM4BIM8BVK0gAykDmEEgzAEgzwFWrXx8IAMpA7g+IMwBINsBVK18fCLbASADKQPAPnwiygEg1AEg1QFUrSADKQPYPyDOASDVAVatfHx8IswBIAMpA4BAfCLPASDMAVStfCDPASDPASDXASDZAVatIAMpA5hAINQBINcBVq18fHwizgFWrXwgygEgzAFWrSADKQPIPiDKASDbAVStfHx8ItQBIAMpA9A+fCLKASADKQPoPyDOASDOASADKQPgP3wizAFWrXwgzAEgzAEgywEg0QFWrSADKQP4QCDLASDeAVStfHx8IssBVq18fCLMASADKQPwPnwizwEgzAFUrXwgzwEgAykDiD8gywEgywEgAykDgD98Is4BVq18IM4BIM4BINABINMBVq0gAykDmD8g0AEg0QFUrXx8fCLRAVatfHwiywEgzwFUrXwgygEgzAFWrSADKQPYPiDK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fCLTASADKQPQPHwi2AFCAEIAQv////++sv3wQhDJAyADQYA6aiADKQOYOiLKAUIAQoGAgIC/sv3wwwBCABDJAyADQfA5aiDKAUIAQpHh5c2HifqZKEIAEMkDIANB4DlqIMoBQgBC3bCFjOi2kai4f0IAEMkDIANB0DlqIMoBQgBCqcDGia7Ok7IwQgAQyQMCQAJAIAMpA9g5IAMpA+g6IAMpA/g7IM4BINEBVq0gAykDiD0gzgEgzwFUrXx8IAMpA6g6IM8BIOABVK18fCLZASADKQPAOXwiygEg1AEg1QFUrSADKQPYOiDRASDVAVatfHx8Is8BIAMpA/A7fCLOASDPAVStfCDOASDOASDXASDbAVatIAMpA4g8INQBINcBVq18fHwi0QFWrXwgygEgzwFWrSADKQPIOSDKASDZAVStfHx8ItQBIAMpA7A5fCLKASADKQPIOiDRASDRASADKQPAOnwizwFWrXwgzwEgzwEgywEgzAFWrSADKQPYOyDLASDeAVStfHx8IssBVq18fCLPASADKQPgOnwizgEgzwFUrXwgzgEgzgEgAykD+DogywEgywEgAykD8Dp8ItEBVq18INEBINEBINABINMBVq0gAykDiDsgzAEg0AFWrXx8fCLQAVatfHwiywFWrXwgygEgzwFWrSADKQO4OSDKASDUAVStfHx8ItQBIAMpA6A5fCLKASADKQO4OiDLASDLASADKQOwOnwizAFWrXwgzAEgzAEgAykDyDsgAykD2Dwg0wEg2AFWrXwizwEgAykDwDt8IssBIM8BVK18IMsBIMsBINABfCLPAVatfHwiywFWrXx8Is4BIAMpA9A5fCLQASDOAVStfCDQASDQASADKQPoOSDLASDLASADKQPgOXwizAFWrXwgzAEgzAEgAykD+DkgzwEgzwEgAykD8Dl8IssBVq18IMsBIMsBIAMpA4g6IAMpA4A6Is8BINgBfCDPAVStfHwi0QFWrXx8IssBVq18fCLMAVatfCDKASDOAVatIAMpA6g5IMoBINQBVK18fHwizgFCqcDGia7Ok7IwVg0AAkAgzgFCqcDGia7Ok7IwUQRAIMwBQt2whYzotpGouH9WDQIgzAFC3bCFjOi2kai4f1ENAUKpwMaJrs6TsjAhzgELIMwBIc8BIMsBIcoBDAILIMsBQpHh5c2HifqZKFYNAELd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wMaJrs6TsjB8Ic4BCyDYAUI/hiDQAUI/hiDXAUIBiIQh1wEg2AFCAYgh2AEgzgFCP4Yg1AFCAYiEIdoBINQBQj+GIMsBQgGIhCHWASDLAUI/hiDVAUIBiIQhywEgzgFCAYghzgEg0AFCAYiEIdABIMoBQgGDUA0ACyADINcBNwPApQEgAyDKATcDyKUBIAMg0AE3A7ilASADINgBNwOwpQELINIBIdUBAkACQAJAAkACQCDSASDYASLUAVINACDMASHVASDQASLUASDMAVINACDXASLUASDTASLVAVINACDKASHUASDNASHVASDKASDNAVENAQsg1AEg1QFYDQAgAyDKASDNAX0i1AE3A8ilASADINcBINMBfSLeASDKASDNAVStIsoBfSLVATcDwKUBIAMg0AEgzAF9It0BIMoBIN4BViDTASDXAVZyrSLKAX0i3gE3A7ilASADINgBINIBfSDKASDdAVYgzAEg0AFWcq19ItgBNwOwpQECQAJAIM4BIsoBINEBItABUg0AINoBIsoBINsBItABUg0AINYBIsoBINkBItABUg0AIM8BIdABIM8BIMsBIsoBUQ0BCyDKASDQAVQNAgsgzgEg0QF9INoBINsBVCDaASDbAX0i2gEg1gEg2QFUINYBINkBfSLWASDLASDPAVStIt0BVHKtIv4BVHKtfSHOASDLASDPAX0hywEg1QEh1wEg3gEh0AEg1AEhygEg1gEg3QF9IdYBINoBIP4BfSHaAQwDCyADIM0BIMoBfSLUATcDyKQBIAMg0wEg1wF9It4BIMoBIM0BVq0izQF9ItUBNwPApAEgAyDMASDQAX0i3QEg0wEg1wFUIM0BIN4BVnKtIs0BfSLeATcDuKQBIAMg0gEg2AF9IMwBINABVCDNASDdAVZyrX0i0gE3A7CkAQJAAkAgzgEizAEg0QEizQFSDQAg2gEizAEg2wEizQFSDQAg1gEizAEg2QEizQFSDQAgywEizAEgzwEizQFRDQELIMwBIM0BVg0CCyDRASDOAX0g2wEg2gF9It0BINkBINYBfSL+ASDLASDPAVatIoECVCDWASDZAVZyrSLZAVQg2gEg2wFWcq19IdEBIM8BIMsBfSHPASDVASHTASDeASHMASDUASHNASDdASDZAX0h2wEg/gEggQJ9IdkBDAILIM4BQt2whYzotpGouH8g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AVRyrXwi2gFWcq18QqnAxomuzpOyMHwhywELINcBQj+GINMBQj+GINUBQgGIhCHVASDXAUIBiCHXASDLAUI/hiDaAUIBiIQh3QEg2gFCP4YgygFCAYiEId4BIMoBQj+GINYBQgGIhCHKASDLAUIBiCHLASDTAUIBiIQh0wEgzAFCAYNQDQALIAMg1QE3A8ClASADIMwBNwPIpQEgAyDTATcDuKUBIAMg1wE3A7ClAQsCQAJAAkACQAJAINgBItYBINcBItoBUg0AINABItYBINMBItoBUg0AINQBIdYBINUBItoBINQBUg0AINIBIdYBINIBIMwBItoBUQ0BCyDWASDaAVoNACADIMwBINIBfSLWATcDyKUBIAMg1QEg1AF9IuMBIMwBINIBVK0izAF9ItoBNwPApQEgAyDTASDQAX0i6QEgzAEg4wFWINQBINUBVnKtIswBfSLjATcDuKUBIAMg1wEg2AF9IMwBIOkBViDQASDTAVZyrX0i1wE3A7ClASDOASHTAQJAAkAgywEizAEgzgFSDQAg3AEi0wEg3QEizAFSDQAg4AEi0wEg3gEizAFSDQAgygEhzAEgygEgzQEi0wFRDQELIMwBINMBVA0CCyDLASDOAX0g3QEg3AF9IukBIN4BIOABfSL6ASDKASDNAVStIvwBVCDeASDgAVRyrSL9AVQg3AEg3QFWcq19IcsBIMoBIM0BfSHKASDaASHVASDjASHTASDWASHMASD6ASD8AX0h3gEg6QEg/QF9Id0BDAMLIAMg0gEgzAF9ItYBNwPIpAEgAyDUASDVAX0i4wEgzAEg0gFWrSLSAX0i2gE3A8CkASADINABINMBfSLpASDUASDVAVQg0gEg4wFWcq0i0gF9IuMBNwO4pAEgAyDYASDXAX0g0AEg0wFUINIBIOkBVnKtfSLYATcDsKQBIM4BIdIBIMsBIdABAkACQCDLASDOAVINACDcASLSASDdASLQAVINACDgASLSASDeASLQAVINACDNASHSASDKASHQASDKASDNAVENAQsg0AEg0gFWDQILIM4BIMsBfSDcASDdAVQg3AEg3QF9ItwBIOABIN4BfSLpASDKASDNAVatIvoBVCDeASDgAVZyrSLgAVRyrX0hzgEgzQEgygF9Ic0BINoBIdQBIOMBIdABINYBIdIBINwBIOABfSHcASDpASD6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MSADKQPIMiADKQPYMyDQASDXAVStIAMpA+g0INUBINcBVq18fCADKQO4NCDVASDZAVStfHwi1QEgAykDoDN8IsoBINIBINMBVK0gAykDuDMg0AEg0wFWrXx8fCLQASADKQPQM3wi0wEg0AFUrXwg0wEg1gEg2AFUrSADKQPoMyDSASDYAVatfHx8ItIBINMBVK18IMoBINABVq0gAykDqDMgygEg1QFUrXx8fCLVASADKQOQMnwiygEgAykDqDIg0gEg0gEgAykDoDJ8ItABVq18INABINABIMsBINEBVK0gAykDuDIg0QEg2gFUrXx8fCLSAVatfHwi0QEgAykDwDJ8ItABINEBVK18INABINABIAMpA9gyINIBINIBIAMpA9AyfCLTAVatfCDTASDTASDMASDPAVatIAMpA+gyIMsBIMwBVq18fHwizAFWrXx8IssBVq18IMoBINEBVq0gAykDmDIgygEg1QFUrXx8fCLTASADKQOAMXwi0gEgAykDmDEgywEgAykDkDF8IsoBIMsBVK18IMoBIMoBIAMpA6gxIAMpA4gyIM8BINQBVq18Is8BIAMpA6AxfCLLASDPAVStfCDLASDLASDMAXwizAFWrXx8IssBVq18fCLPASADKQOwMXwi0QEgzwFUrXwg0QEg0QEgAykDyDEgywEgywEgAykDwDF8ItABVq18INABINABIAMpA9gxIMwBIMwBIAMpA9AxfCLKAVatfCDKASADKQPoMSADKQPgMSLLASDUAXwgywFUrXx8IssBIMoBVK18fCLKAVatfHwizAFWrXwgzwEg0gFUrSADKQOIMSDSASDTAVStfHx8Is8BQqnAxomuzpOyMFYNAAJAIM8BQqnAxomuzpOyMFEEQCDMAULdsIWM6LaRqLh/Vg0CIMwBQt2whYzotpGouH9SBEAgygEh2AEgzAEh0AFCqcDGia7Ok7IwIc8BDAQLIMoBQpHh5c2HifqZKFYNAkLdsIWM6LaRqLh/IdABIMoBQpHh5c2HifqZKFENASDKASHYAUKpwMaJrs6TsjAhzwEMAwsgygEh2AEgzAEh0AEMAgtCkeHlzYeJ+pkoIdgBIMsBQoGAgIC/sv3wwwBaDQBCqcDGia7Ok7IwIc8BDAELIMoBQpHh5c2HifqZKH0i0gEgywFCgYCAgL+y/fDDAFStItEBfSHYASDMAUKjz/rzl8nu18cAfCLTASDKAUKR4eXNh4n6mShUINEBINIBVnKtIsoBfSHQASDPASDMAULdsIWM6LaRqLh/VCDKASDTAVZyrX1CqcDGia7Ok7IwfSHPASDLAUKBgICAv7L98MMAfSHLAQsgA0GwL2og6AFCACD0AUIAEMkDIANB0C5qIN8BQgAg9AFCABDJAyADQfAtaiDlAUIAIPQBQgAQyQMgA0GQLWog4QFCACD0AUIAEMkDIANBoC9qIAMpA7AvItIBQgBCAEL/////vrL98EIQyQMgA0GQL2ogAykDqC8iygFCAEKBgICAv7L98MMAQgAQyQMgA0GAL2ogygFCAEKR4eXNh4n6mShCABDJAyADQfAuaiDKAUIAQt2whYzotpGouH9CABDJAyADQeAuaiDKAUIAQqnAxomuzpOyMEIAEMkDIANB8C9qIOgBQgAg9QFCABDJAyADQeAvaiDfAUIAIPUBQgAQyQMgA0HQL2og5QFCACD1AUIAEMkDIANBwC9qIOEBQgAg9QFCABDJAyADQcAuaiADKQOALyLXASADKQO4LyLUASADKQPQLnwi1QF8IswBIAMpA5gvINIBIAMpA5AvIsoBfCDKAVStfHwi0gEgAykD8C98ItEBQgBCAEL/////vrL98EIQyQMgA0GwLmogAykDyC4iygFCAEKBgICAv7L98MMAQgAQyQMgA0GgLmogygFCAEKR4eXNh4n6mShCABDJAyADQZAuaiDKAUIAQt2whYzotpGouH9CABDJAyADQYAuaiDKAUIAQqnAxomuzpOyMEIAEMkDIANBsDBqIOgBQgAg9gFCABDJAyADQaAwaiDfAUIAIPYBQgAQyQMgA0GQMGog5QFCACD2AUIAEMkDIANBgDBqIOEBQgAg9gFCABDJAyADQeAtaiADKQP4LyDRASDSAVStfCLeASADKQPgL3wi0wEgAykD2C4g1AEg1QFWrXwi2gEgAykD8C18ItQBIAMpA/AufCLVASDMASDSAVatIAMpA4gvIMwBINcBVK18fHwi3QF8IswBIAMpA6AufCLSASADKQO4LiDRASADKQOwLiLKAXwgygFUrXx8ItEBIAMpA7AwfCLXAUIAQgBC/////76y/fBCEMkDIANB0C1qIAMpA+gtIsoBQgBCgYCAgL+y/fDDAEIAEMkDIANBwC1qIMoBQgBCkeHlzYeJ+pkoQgAQyQMgA0GwLWogygFCAELdsIWM6LaRqLh/QgAQyQMgA0GgLWogygFCAEKpwMaJrs6TsjBCABDJAyADQfAwaiDoAUIAIPcBQgAQyQMgA0HgMGog3wFCACD3AUIAEMkDIANB0DBqIOUBQgAg9wFCABDJAyADQcAwaiDhAUIAIPcBQgAQyQMgA0GALWogAykDuDAg0QEg1wFWrXwi4wEgAykDoDB8ItYBIAMpA/gtINQBINoBVK18IukBIAMpA5AtfCLaASADKQPgLnwi2QEg1QEg3QFWrSADKQP4LiDUASDVAVatfHx8ItQBIAMpA9AvfCLVASDMASDTAVStIAMpA+gvINMBIN4BVK18fHwi0wEgAykDkC58It4BINEBINIBVK0gAykDqC4gzAEg0gFWrXx8fCLdAXwizAEgAykDwC18ItIBIAMpA9gtINcBIAMpA9AtIsoBfCDKAVStfHwi0QEgAykD8DB8ItcBQgBCAEL/////vrL98EIQyQMgA0HwLGogAykDiC0iygFCAEKBgICAv7L98MMAQgAQyQMgA0HgLGogygFCAEKR4eXNh4n6mShCABDJAyADQdAsaiDKAUIAQt2whYzotpGouH9CABDJAyADQcAsaiDKAUIAQqnAxomuzpOyMEIAEMkDAkACQCADKQPILCADKQOoLSADKQOILiDUASDZAVStIAMpA+guINkBINoBVK18fCADKQOYLSDaASDpAVStfHwi2gEgAykDwC98IsoBINMBINUBVK0gAykD2C8g1AEg1QFWrXx8fCLUASADKQOALnwi1QEg1AFUrXwg1QEg3QEg3gFUrSADKQOYLiDTASDeAVatfHx8ItMBINUBVK18IMoBINQBVq0gAykDyC8gygEg2gFUrXx8fCLaASADKQOAMHwiygEgAykDmDAg0wEg0wEgAykDkDB8ItQBVq18INQBINQBIMwBINYBVK0gAykDqDAg1gEg4wFUrXx8fCLTAVatfHwi1AEgAykDoC18ItUBINQBVK18INUBINUBIAMpA7gtINMBINMBIAMpA7AtfCLWAVatfCDWASDRASDSAVStIAMpA8gtIMwBINIBVq18fHwi0wEg1gFUrXx8IswBVq18IMoBINQBVq0gAykDiDAgygEg2gFUrXx8fCLWASADKQPAMHwiygEgAykD2DAgzAEg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A0HgKGogAykD+CgiygFCAEKBgICAv7L98MMAQgAQyQMgA0HQKGogygFCAEKR4eXNh4n6mShCABDJAyADQcAoaiDKAUIAQt2whYzotpGouH9CABDJAyADQbAoaiDKAUIAQqnAxomuzpOyMEIAEMkDAkACQCADKQO4KCADKQPIKSADKQPYKiDOASDSAVatIAMpA+grIM0BIM4BVq18fCADKQO4KyDNASDgAVStfHwi2QEgAykDoCp8IsoBINEBINcBVq0gAykDuCog0QEg0gFUrXx8fCLNASADKQPQKnwizgEgzQFUrXwgzgEgzgEg1gEg3gFWrSADKQPoKiDWASDXAVStfHx8ItIBVq18IMoBIM0BVq0gAykDqCogygEg2QFUrXx8fCLRASADKQOQKXwiygEgAykDqCkg0gEg0gEgAykDoCl8Is0BVq18IM0BIM0BIMwBINMBVq0gAykDuCkgzAEg4wFUrXx8fCLMAVatfHwizQEgAykDwCl8Is4BIM0BVK18IM4BIAMpA9gpIMwBIMwBIAMpA9ApfCLSAVatfCDSASDSASDUASDVAVatIAMpA+gpINMBINQBVq18fHwi0wFWrXx8IswBIM4BVK18IMoBIM0BVq0gAykDmCkgygEg0QFUrXx8fCLUASADKQOAKHwiygEgAykDmCggzAEgzAEgAykDkCh8Is0BVq18IM0BIM0BIAMpA6goIAMpA4gpINUBINoBVq18Is4BIAMpA6AofCLMASDOAVStfCDMASDMASDTAXwizgFWrXx8IswBVq18fCLNASADKQOwKHwi0wEgzQFUrXwg0wEg0wEgAykDyCggzAEgzAEgAykDwCh8ItIBVq18INIBINIBIAMpA9goIM4BIM4BIAMpA9AofCLMAVatfCDMASADKQPoKCADKQPgKCLOASDaAXwgzgFUrXx8ItEBIMwBVK18fCLMAVatfHwi0gFWrXwgygEgzQFWrSADKQOIKCDKASDUAVStfHx8Is4BQqnAxomuzpOyMFYNAAJAIM4BQqnAxomuzpOyMFEEQCDSAULdsIWM6LaRqLh/Vg0CINIBQt2whYzotpGouH9SBEAgzAEhzQEg0gEhygFCqcDGia7Ok7IwIc4BDAQLIMwBQpHh5c2HifqZKFYNAkLdsIWM6LaRqLh/IcoBIMwBQpHh5c2HifqZKFENASDMASHN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BSkDACLMAUIAINEBQgAQyQMgA0HgJWogzAFCACDNAUIAEMkDIANB0CRqIMwBQgAgygFCABDJAyADQcAjaiDMAUIAIM4BQgAQyQMgA0GwJGogAykDiCcg1AEg2gFWrXwi3QEgAykD8CV8IswBIAMpA9glINcBIN4BVK18It4BIAMpA8AkfCLNASADKQOgJ3wizgEg1gEg4AFWrSADKQO4JyDWASDXAVStfHx8ItEBIAMpA/AkfCLXASDSASDVAVStIAMpA4gmINUBINkBVK18fHwi1QEgAykDoCZ8ItYBINMBINQBVq0gAykDuCYg0gEg0wFWrXx8fCLZAXwi0gEgAykDoCV8ItMBIAMpA7glIAMpA7AlIsoBINoBfCDKAVStfHwi1AEgAykD8CZ8ItoBQgBCAEL/////vrL98EIQyQMgA0GgJGogAykDuCQiygFCAEKBgICAv7L98MMAQgAQyQMgA0GQJGogygFCAEKR4eXNh4n6mShCABDJAyADQYAkaiDKAUIAQt2whYzotpGouH9CABDJAyADQfAjaiDKAUIAQqnAxomuzpOyMEIAEMkDIAMpA/gjIAMpA4glIAMpA5gmIM4BINEBVq0gAykDqCcgzQEgzgFWrXx8IAMpA8gkIM0BIN4BVK18fCLeASADKQPgI3wiygEg1QEg1wFUrSADKQP4JCDRASDXAVatfHx8Is0BIAMpA5AmfCLOASDNAVStfCDOASDOASDWASDZAVatIAMpA6gmINUBINYBVq18fHwi0QFWrXwgygEgzQFWrSADKQPoIyDKASDeAVStfHx8ItUBIAMpA9AjfCLKASADKQPoJCDRASDRASADKQPgJHwizQFWrXwgzQEgzQEgzAEg0gFWrSADKQP4JSDMASDdAVStfHx8IswBVq18fCLNASADKQOAJXwizgEgzQFUrXwgzgEgAykDmCUgzAEgzAEgAykDkCV8ItEBVq18INEBINEBINMBINQBVq0gAykDqCUg0gEg0wFWrXx8fCLSAVatfHwizAEgzgFUrXwgygEgzQFWrSADKQPYIyDKASDVAVStfHx8ItUBIAMpA8AjfCLNASADKQPYJCDMASADKQPQJHwiygEgzAFUrXwgygEgygEgAykD6CUgAykD+CYg1AEg2gFWrXwizgEgAykD4CV8IswBIM4BVK18IMwBIMwBINIBfCLO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h4n6mShCABDJAyADQcAfaiDKAUIAQt2whYzotpGouH9CABDJAyADQbAfaiDKAUIAQqnAxomuzpOyMEIAEMkDAkACQCADKQO4HyADKQPIICADKQPYISDQASDUAVatIAMpA+giIM8BINABVq18fCADKQOIICDPASDeAVStfHwi3gEgAykDoB98IsoBINMBINUBVK0gAykDuCAg1AEg1QFWrXx8fCLPASADKQPQIXwi0AEgzwFUrXwg0AEg0AEg2AEg2QFWrSADKQPoISDTASDYAVatfHx8ItMBVq18IMoBIM8BVq0gAykDqB8gygEg3gFUrXx8fCLUASADKQOQH3wiygEgAykDqCAg0wEg0wEgAykDoCB8Is8BVq18IM8BIM8BIMsBIMwBVq0gAykDuCEgywEg3QFUrXx8fCLLAVatfHwizwEgAykDwCB8ItABIM8BVK18INABIAMpA9ggIMsBIMsBIAMpA9AgfCLTAVatfCDTASDTASDRASDSAVStIAMpA+ggIMwBINIBVq18fHwi0gFWrXx8IssBINABVK18IMoBIM8BVq0gAykDmB8gygEg1AFUrXx8fCLUASADKQOAH3wiygEgAykDmCAgywEgywEgAykDkCB8IswBVq18IMwBIMwBIAMpA6ghIAMpA7giINEBINcBVq18Is8BIAMpA6AhfCLLASDPAVStfCDLASDLASDSAXwizwFWrXx8IssBVq18fCLSASADKQOwH3wi0AEg0gFUrXwg0AEg0AEgAykDyB8gywEgywEgAykDwB98ItMBVq18INMBINMBIAMpA9gfIM8BIM8BIAMpA9AffCLLAVatfCDLASDLASADKQPoHyADKQPgHyLMASDXAXwgzAFUrXx8ItEBVq18fCLMAVatfHwizwFWrXwgygEg0gFWrSADKQOIHyDKASDUAVStfHx8IssBQqnAxomuzpOyMFYNAAJAIMsBQqnAxomuzpOyMFEEQCDPAULdsIWM6LaRqLh/Vg0CIM8BQt2whYzotpGouH9RDQFCqcDGia7Ok7IwIcsBCyDPASHKASDMASHSAQwCCyDMAUKR4eXNh4n6mShWDQBC3bCFjOi2kai4fyHKASDMAUKR4eXNh4n6mShSBEBCqcDGia7Ok7IwIcsBIMwBIdIBDAILQpHh5c2HifqZKCHSASDRAUKBgICAv7L98MMAWg0A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QgBCpYm5+peWtIsCQgAQyQMgA0HwFmogAykD6Bgg0QEg1QFWrXwi2gEgAykDoBl8IssBIAMpA8gZINMBINgBVK18ItgBIAMpA4AafCLMASADKQOAF3wizwEg1AEg1gFWrSADKQPYFyDTASDUAVatfHx8Is0BIAMpA9AZfCLTASDOASDQAVStIAMpA5gZINABINcBVK18fHwi0AEgAykD8Bd8ItQBINEBINIBVK0gAykDiBggzgEg0gFWrXx8fCLXAXwizgEgAykDsBd8ItIBIAMpA8gXINUBIAMpA8AXIsoBfCDKAVStfHwi0QEgAykD8Bh8ItUBQv////++sv3wQn4iygFCAEKBgICAv7L98MMAQgAQyQMgA0HgFmogygFCAEKR4eXNh4n6mShCABDJAyADQdAWaiDKAUIAQt2whYzotpGouH9CABDJAyADQcAWaiDKAUIAQqnAxomuzpOyMEIAEMkDIAMpA8gWIAMpA6gaIAMpA5gaIAMpA4gaIMwBINgBVK18ItgBIAMpA5AafCLKASDYAVStfCDKASDKASDNASDPAVStIAMpA4gXIMwBIM8BVq18fHwizAFWrXwgzAEgzAEg0AEg0wFUrSADKQPYGSDNASDTAVatfHx8IsoBVq18Is8BIAMpA6AafCLMASDPAVStfCDMASDMASADKQPoFyDKASDKASADKQPgF3wizwFWrXwgzwEgzwEg1AEg1wFWrSADKQP4FyDQASDUAVatfHx8IsoBVq18fCLPAVatfCDPASDPASADKQPoGSDKASDKASADKQPgGXwizAFWrXwgzAEgywEgzgFWrSADKQOoGSDLASDaAVStfHx8IsoBIMwBVK18fCLLAVatfCLQASADKQOwGnwizAEgAykDmBcgywEgywEgAykDkBd8Is8BVq18IM8BIM8BIAMpA6gXIMoBIMoBIAMpA6AXfCLLAVatfCDLASDRASDSAVStIAMpA7gXIM4BINIBVq18fHwizgEgywFUrXx8IsoBVq18fCLNASADKQP4GSDKASDKASADKQPwGXwiywFWrXwgywEgywEgAykDuBkgAykD+Bgg0QEg1QFWrXwizwEgAykDsBl8IsoBIM8BVK18IMoBIMoBIM4BfCLPAVatfHwiygFWrXx8Is4BIAMpA8AWfCLSASDOAVStfCDSASDSASADKQPYFiDKASDKASADKQPQFnwiywFWrXwgywEgywEgAykD6BYgzwEgzwEgAykD4BZ8IsoBVq18IMoBIMoBIAMpA/gWIAMpA/AWIs8BINUBfCDPAVStfHwizwFWrXx8IsoBVq18fCLLAVatfCDNASDOAVatIMwBIM0BVq0gAykDuBogzAEg0AFUrXx8fHwizQFCqcDGia7Ok7IwVg0FIM0BQqnAxomuzpOyMFENBCDKASHSASDLASHMAQwGCyAGINsBNwMQDAELIAYg3AE3AxALIAZCAjcDCCAGQYGAgIB4NgIAIAxBgAcQ3wQMBgsgDSAZQYivwgAQ2QMACyDLAULdsIWM6LaRqLh/Vg0AIMsBQt2whYzotpGouH9SBEAgygEh0gEgywEhzAFCqcDGia7Ok7IwIc0BDAILIMoBQpHh5c2HifqZKFYNAELdsIWM6LaRqLh/IcwBIMoBQpHh5c2HifqZKFIEQCDKASHSAUKpwMaJrs6TsjAhzQEMAgtCkeHlzYeJ+pkoIdIBIM8BQoGAgIC/sv3wwwBaDQBCqcDGia7Ok7IwIc0BDAELIMoBQpHh5c2HifqZKH0izAEgzwFCgYCAgL+y/fDDAFStIs4BfSHSASDLAUKjz/rzl8nu18cAfCLRASDKAUKR4eXNh4n6mShUIMwBIM4BVHKtIsoBfSHMASDNASDLAULdsIWM6LaRqLh/VCDKASDRAVZyrX1CqcDGia7Ok7IwfSHNASDPAUKBgICAv7L98MMAfSHPAQsgA0L7////xIONy6x/NwP4wQEgA0KpmoP72dKd/jY3A/DBASADQq6M5cP37ai35gA3A+jBASADQq++n9CZ+J2FDjcD4MEBAn4CQAJAIBApAwAiygEg+AFSBEAgECkDCCHRASAQKQMQIc4BIMoBIdgBIPgBIdABDAELIBApAxAhzgEg7gEgECkDCCLRAVIEQCDRASHYASDuASHQAQwBCyDuASHRASDOASHYASDvASLQASDOAVINACDQASHOASDwASLQASLLASAQKQMYItgBUQ0BCyAQKQMYIcsBINABINgBWg0AQt2whYzotpGouH8g0QEg7gF9ItMBIM4BIO8BVCDOASDvAX0i0AEgywEg8AFUrSLUAVRyrSLVAX0i1wF9ItYBINABINQBfSLQAUKR4eXNh4n6mShWQpHh5c2HifqZKCDQAX0i0AEgywEg8AF9ItQBQoGAgIC/sv3wwwBWrSLaAVRyrSLZAX0h2AEg1gEg2QFUINcBQt2whYzotpGouH9WciEKINABINoBfSHQAUKBgICAv7L98MMAINQBfSHXASDRASDuAVQg0wEg1QFUcq0g+AEgygF9fEKpwMaJrs6TsjB8DAELIO8BIM4BfSLTASDLASDwAVatItQBfSHQASDuASDRAX0i1QEg0wEg1AFUIM4BIO8BVnKtItMBfSHYASDTASDVAVYg0QEg7gFWciEKIPABIMsBfSHXASD4ASDKAX0LIdMBIAMg1wE3A8ikASADINABNwPApAEgAyDYATcDuKQBIAMg0wEgCq19NwOwpAEgA0GwpQFqIANB4MEBaiADQbCkAWoQWgJAIAMoArClAUEBRwRAIANBqKQBaiADQdClAWopAwA3AwAgA0GgpAFqIANByKUBaikDADcDACADQZikAWogA0HApQFqKQMANwMAIAMgAykDuKUBNwOQpAEgA0L7////xIONy6x/NwP4wQEgA0KpmoP72dKd/jY3A/DBASADQq6M5cP37ai35gA3A+jBASADQq++n9CZ+J2FDjcD4MEBIANBsBZqIMsBQgAgzwFCABDJAyADQdAVaiDLAUIAINIBQgAQyQMgA0HAFWogywFCACDMAUIAEMkDIANBsBVqIMsBQgAgzQFCABDJAyADQaAWaiADKQOwFiLQAUIAQgBC/////76y/fBCEMkDIANBkBZqIAMpA6gWIssBQgBCgYCAgL+y/fDDAEIAEMkDIANBgBZqIMsBQgBCkeHlzYeJ+pkoQgAQyQMgA0HwFWogywFCAELdsIWM6LaRqLh/QgAQyQMgA0HgFWogywFCAEKpwMaJrs6TsjBCABDJAyADQaAVaiDOAUIAIM8BQgAQyQMgA0HAFGogzgFCACDSAUIAEMkDIANBsBRqIM4BQgAgzAFCABDJAyADQaAUaiDOAUIAIM0BQgAQyQMgA0GQFWogAykDgBYi1wEgAykDuBYi1AEgAykD0BV8ItUBfCLOASADKQOYFiDQASADKQOQFiLLAXwgywFUrXx8ItABIAMpA6AVfCLTAUIAQgBC/////76y/fBCEMkDIANBgBVqIAMpA5gVIssBQgBCgYCAgL+y/fDDAEIAEMkDIANB8BRqIMsBQgBCkeHlzYeJ+pkoQgAQyQMgA0HgFGogywFC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IAMpA4AQfCLNASADKQOYESDQASDSAVStfCLUASADKQOAEXwi0gEgAykDsBF8ItABIMsBIMwBVq0gAykDyBEgywEg0wFUrXx8fCLXAXwiywEgAykDsBB8IswBIAMpA8gQIM8BIAMpA8AQIsoBfCDKAVStfHwizwEgAykD0A98ItMBQgBCAEL/////vrL98EIQyQMgA0GwD2ogAykDyA8iygFCAEKBgICAv7L98MMAQgAQyQMgA0GgD2ogygFCAEKR4eXNh4n6mShCABDJAyADQZAPaiDKAUIAQt2whYzotpGouH9CABDJAyADQYAPaiDKAUIAQqnAxomuzpOyMEIAEMkDIANBwA5qIOcBQgAg4QFCABDJAyADQeANaiDRAUIAIOEBQgAQyQMgA0HQDWogzgFCACDhAUIAEMkDIANBwA1qIO0BQgAg4QFCABDJAyADQbAOaiADKQPYDyDPASDTAVatfCLYASADKQPwDnwizgEgAykDiBEg0gEg1AFUrXwi1gEgAykD8BB8ItEBIAMpA6ARfCLUASDQASDXAVatIAMpA7gRINABINIBVK18fHwi0gEgAykD8A98ItABIMsBIM0BVK0gAykDiBAgzQEg1QFUrXx8fCLNASADKQOgEHwi1QEgzAEgzwFWrSADKQO4ECDLASDMAVatfHx8ItcBfCLLASADKQOgD3wizAEgAykDuA8g0wEgAykDsA8iygF8IMoBVK18fCLPASADKQPADnwi0wFCAEIAQv////++sv3wQhDJAyADQaAOaiADKQO4DiLKAUIAQoGAgIC/sv3wwwBCABDJAyADQZAOaiDKAUIAQpHh5c2HifqZKEIAEMkDIANBgA5qIMoBQgBC3bCFjOi2kai4f0IAEMkDIANB8A1qIMoBQgBCqcDGia7Ok7IwQgAQyQMCQAJAIAMpA/gNIAMpA4gPIAMpA5gQINIBINQBVK0gAykDqBEg0QEg1AFWrXx8IAMpA/gQINEBINYBVK18fCLUASADKQPgD3wiygEgzQEg0AFUrSADKQP4DyDQASDSAVStfHx8ItIBIAMpA5AQfCLRASDSAVStfCDRASDVASDXAVatIAMpA6gQIM0BINUBVq18fHwizQEg0QFUrXwgygEg0gFWrSADKQPoDyDKASDUAVStfHx8ItABIAMpA9AOfCLKASADKQPoDiDNASDNASAD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CWog0QFCACDPAUIAEMkDIANB8AlqIAMpA5gLINUBINoBVq18It4BIAMpA7AKfCLNASADKQPIDCDYASDbAVStfCLbASADKQOwDHwizgEgAykD4Ax8ItEBINYBINwBVq0gAykD+Awg1gEg2AFUrXx8fCLQASADKQOwC3wi2AEg0wEg1wFUrSADKQPICyDXASDZAVStfHx8ItcBIAMpA+ALfCLWASDUASDVAVatIAMpA/gLINMBINQBVq18fHwi2QF8ItMBIAMpA+AKfCLUASADKQP4CiDaASADKQPwCiLKAXwgygFUrXx8ItUBIAMpA4AKfCLaAUIAQgBC/////76y/fBCEMkDIANB4AlqIAMpA/gJIsoBQgBCgYCAgL+y/fDDAEIAEMkDIANB0AlqIMoBQgBCkeHlzYeJ+pkoQgAQyQMgA0HACWogygFCAELdsIWM6LaRqLh/QgAQyQMgA0GwCWogygFCAEKpwMaJrs6TsjBCABDJAwJAAkAgAykDuAkgAykDyAogAykD2Asg0AEg0QFUrSADKQPoDCDOASDRAVatfHwgAykDuAwgzgEg2wFUrXx8ItsBIAMpA6ALfCLKASDXASDYAVStIAMpA7gLINABINgBVq18fHwizgEgAykD0At8ItEBIM4BVK18INEBINEBINYBINkBVq0gAykD6Asg1gEg1wFUrXx8fCLQAVatfCDKASDOAVatIAMpA6gLIMoBINsBVK18fHwi1wEgAykDkAp8IsoBIAMpA6gKINABINABIAMpA6AKfCLOAVatfCDOASDOASDNASDTAVatIAMpA7gKIM0BIN4BVK18fHwizQFWrXx8Is4BIAMpA8AKfCLRASDOAVStfCDRASDRASADKQPYCiDNASDNASADKQPQCnwi0AFWrXwg0AEg0AEg1AEg1QFWrSADKQPoCiDTASDUAVatfHx8ItMBVq18fCLNAVatfCDKASDOAVatIAMpA5gKIMoBINcBVK18fHwi1wEgAykDgAl8IsoBIAMpA5gJIM0BIM0BIAMpA5AJfCLOAVatfCDOASDOASADKQOoCSADKQOICiDVASDaAVatfCLRASADKQOgCXwizQEg0QFUrXwgzQEgzQEg0wF8ItEBVq18fCLNAVatfHwizgEgAykDsAl8ItQBIM4BVK18INQBINQBIAMpA8gJIM0BIM0BIAMpA8AJ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ASDYAVStfCLcASADKQPwCHwi2AEgAykD4AZ8ItYBINUBINkBVq0gAykD+AYg1AEg1QFWrXx8fCLUASADKQOgCHwi1QEgzAEg0gFWrSADKQPoByDMASDaAVStfHx8IswBIAMpA5AGfCLaASDQASDTAVatIAMpA6gGINABINIBVK18fHwi2QF8ItIBIAMpA8AFfCLQASADKQPYBSDXASADKQPQBSLLAXwgywFUrXx8ItMBIAMpA5AFfCLXAUIAQgBC/////76y/fBCEMkDIANB8ARqIAMpA4gFIssBQgBCgYCAgL+y/fDDAEIAEMkDIANB4ARqIMsBQgBCkeHlzYeJ+pkoQgAQyQMgA0HQBGogywFCAELdsIWM6LaRqLh/QgAQyQMgA0HABGogywFCAEKpwMaJrs6TsjBCABDJAwJAIAMpA8gEIAMpA6gFIAMpA4gGINQBINYBVK0gAykD6AYg1gEg2AFUrXx8IAMpA/gIINgBINwBVK18fCLYASADKQPgCHwiywEgzAEg1QFUrSADKQOoCCDUASDVAVatfHx8ItQBIAMpA4AGfCLVASDUAVStfCDVASDZASDaAVStIAMpA5gGIMwBINoBVq18fHwizAEg1QFUrXwgywEg1AFWrSADKQPoCCDLASDYAVStfHx8ItgBIAMpA9AIfCLLASADKQOYCCDMASDMASADKQOQCHwi1AFWrXwg1AEg1AEgzwEg0gFWrSADKQPYByDPASDbAVStfHx8IswBVq18fCLPASADKQOgBXwi1AEgzwFUrXwg1AEgAykDuAUgzAEgzAEgAykDsAV8ItUBVq18INUBINUBINABINMBVq0gAykDyAUg0AEg0gFUrXx8fCLSAVatfHwizAEg1AFUrXwgywEgzwFWrSADKQPYCCDLASDYAVStfHx8ItgBIAMpA8AIfCLPASADKQOICCDMASADKQOACHwiywEgzAFUrXwgywEgywEgAykDyAcgAykDmAUg0wEg1wFWrXwi0AEgAykDwAd8IswBINABVK18IMwBIMwBINIBfCLSAVatfHwizAFWrXx8ItQBIAMpA8AEfCLVASDUAVStfCDVASDVASADKQPYBCDMASDMASADKQPQBHwi0wFWrXwg0wEg0wEgAykD6AQg0gEg0gEgAykD4AR8IswBVq18IMwBIMwBIAMpA/gEIAMpA/AEIssBINcBfCDLAVStfHwiywFWrXx8ItABVq18fCLTAVatfCDPASDUAVatIAMpA8gIIM8BINgBVK18fHwizwFCqcDGia7Ok7IwVg0AIM8BQqnAxomuzpOyMFIEQCDQASHSASDTASHMAQwCCyDTAULdsIWM6LaRqLh/Vg0AINMBQt2whYzotpGouH9SBEAg0AEh0gEg0wEhzAFCqcDGia7Ok7IwIc8BDAILINABQpHh5c2HifqZKFYNAELdsIWM6LaRqLh/IcwBINABQpHh5c2HifqZKFIEQCDQASHSAUKpwMaJrs6TsjAhzwEMAgtCkeHlzYeJ+pkoIdIBIMsBQoGAgIC/sv3wwwBaDQBCqcDGia7Ok7IwIc8BDAELINABQpHh5c2HifqZKH0izAEgywFCgYCAgL+y/fDDAFStItQBfSHSASDTAUKjz/rzl8nu18cAfCLVASDQAUKR4eXNh4n6mShUIMwBINQBVHKtItABfSHMASDPASDTAULdsIWM6LaRqLh/VCDQASDVAVZyrX1CqcDGia7Ok7IwfSHPASDLAUKBgICAv7L98MMAfSHLAQsgA0GwBGogCiBaaiIFQfgAaikDACLQAUIAINEBQgAQyQMgA0GgA2og0AFCACDKAUIAEMkDIANBkAJqINABQgAgzQFCABDJAyADQYABaiDQAUIAIM4BQgAQyQMgA0GgBGogAykDsAQi1AFCAEIAQv////++sv3wQhDJAyADQZAEaiADKQOoBCLQAUIAQoGAgIC/sv3wwwBCABDJAyADQYAEaiDQAUIAQpHh5c2HifqZKEIAEMkDIANB8ANqINABQgBC3bCFjOi2kai4f0IAEMkDIANB4ANqINABQgBCqcDGia7Ok7IwQgAQyQMgA0HQA2ogBUHwAGopAwAi0AFCACDRAUIAEMkDIANBwAJqINABQgAgygFCABDJAyADQbABaiDQAUIAIM0BQgAQyQMgA0EgaiDQAUIAIM4BQgAQyQMgA0GQA2ogAykDgAQi2gEgAykDuAQi2AEgAykDoAN8ItYBfCLTASADKQOYBCDUASADKQOQBCLQAXwg0AFUrXx8ItQBIAMpA9ADfCLVAUIAQgBC/////76y/fBCEMkDIANBgANqIAMpA5gDItABQgBCgYCAgL+y/fDDAEIAEMkDIANB8AJqINABQgBCkeHlzYeJ+pkoQgAQyQMgA0HgAmog0AFCAELdsIWM6LaRqLh/QgAQyQMgA0HQAmog0AFCAEKpwMaJrs6TsjBCABDJAyADQcADaiAFQegAaikDACLQAUIAINEBQgAQyQMgA0GwAmog0AFCACDKAUIAEMkDIANBoAFqINABQgAgzQFCABDJAyADQRBqINABQgAgzgFCABDJAyADQYACaiADKQPYAyDUASDVAVatfCLZASADKQPAAnwi1wEgAykDqAMg1gEg2AFUrXwi2wEgAykDkAJ8ItgBIAMpA/ADfCLWASDTASDUAVatIAMpA4gEINMBINoBVK18fHwi3AF8ItMBIAMpA/ACfCLUASADKQOIAyDVASADKQOAAyLQAXwg0AFUrXx8ItUBIAMpA8ADfCLaAUIAQgBC/////76y/fBCEMkDIANB8AFqIAMpA4gCItABQgBCgYCAgL+y/fDDAEIAEMkDIANB4AFqINABQgBCkeHlzYeJ+pkoQgAQyQMgA0HQAWog0AFCAELdsIWM6LaRqLh/QgAQyQMgA0HAAWog0AFCAEKpwMaJrs6TsjBCABDJAyADQbADaiAFQeAAaikDACLQAUIAINEBQgAQyQMgA0GgAmog0AFCACDKAUIAEMkDIANBkAFqINABQgAgzQFCABDJAyADINABQgAgzgFCABDJAyADQfAAaiADKQPIAyDVASDaAVatfCLeASADKQOwAnwizQEgAykDmAIg2AEg2wFUrXwi2wEgAykDgAF8Is4BIAMpA+ADfCLRASDWASDcAVatIAMpA/gDINYBINgBVK18fHwi0AEgAykDsAF8ItgBINMBINcBVK0gAykDyAIg1wEg2QFUrXx8fCLXASADKQPgAnwi1gEg1AEg1QFWrSADKQP4AiDTASDUAVatfHx8ItkBfCLTASADKQPgAXwi1AEgAykD+AEgAykD8AEiygEg2gF8IMoBVK18fCLVASADKQOwA3wi2gFCAEIAQv////++sv3wQhDJAyADQeAAaiADKQN4IsoBQgBCgYCAgL+y/fDDAEIAEMkDIANB0ABqIMoBQgBCkeHlzYeJ+pkoQgAQyQMgA0FAayDKAUIAQt2whYzotpGouH9CABDJAyADQTBqIMoBQgBCqcDGia7Ok7IwQgAQyQMCQAJAAkAgAykDOCADKQPIASADKQPYAiDQASDRAVStIAMpA+gDIM4BINEBVq18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IAdByAJqIARByD9qKQMANwMAIAdBwAJqIARBwD9qKQMANwMAIAdBuAJqIARBuD9qKQMANwMAIAdBsAJqIARBsD9qKQMANwMAIAdBqAJqIARBqD9qKQMANwMAIAcgBCkDoD83A6ACIAcgPzoA4AIgB0HkAmogBCgAmz82AAAgByAEKAKYPzYA4QIgB0GgA2ogBEGgwABqKQMANwMAIAdBmANqIARBmMAAaikDADcDACAHQZADaiAEQZDAAGopAwA3AwAgB0GIA2ogBEGIwABqKQMANwMAIAdBgANqIARBgEBrKQMANwMAIAdB+AJqIARB+D9qKQMANwMAIAdB8AJqIARB8D9qKQMANwMAIAcgBCkD6D83A+gCIAcgQDoAqAMgB0GsA2ogBCgA4z82AAAgByAEKALgPzYAqQMgB0HoA2ogBEHowABqKQMANwMAIAdB4ANqIARB4MAAaikDADcDACAHQdgDaiAEQdjAAGopAwA3AwAgB0HQA2ogBEHQwABqKQMANwMAIAdByANqIARByMAAaikDADcDACAHQcADaiAEQcDAAGopAwA3AwAgB0G4A2ogBEG4wABqKQMANwMAIAcgBCkDsEA3A7ADIAcgQToA8AMgB0H0A2ogBCgAq0A2AAAgByAEKAKoQDYA8QMgB0GwBGogBEGwwQBqKQMANwMAIAdBqARqIARBqMEAaikDADcDACAHQaAEaiAEQaDBAGopAwA3AwAgB0GYBGogBEGYwQBqKQMANwMAIAdBkARqIARBkMEAaikDADcDACAHQYgEaiAEQYjBAGopAwA3AwAgB0GABGogBEGAwQBqKQMANwMAIAcgBCkD+EA3A/gDIAcgQjoAuAQgB0G8BGogBCgA80A2AAAgByAEKALwQDYAuQQgB0H4BGogBEH4wQBqKQMANwMAIAdB8ARqIARB8MEAaikDADcDACAHQegEaiAEQejBAGopAwA3AwAgB0HgBGogBEHgwQBqKQMANwMAIAdB2ARqIARB2MEAaikDADcDACAHQdAEaiAEQdDBAGopAwA3AwAgB0HIBGogBEHIwQBqKQMANwMAIAcgBCkDwEE3A8AEIAcgQzoAgAUgB0GEBWogBCgAu0E2AAAgByAEKAK4QTYAgQUgB0HABWogBEHAwgBqKQMANwMAIAdBuAVqIARBuMIAaikDADcDACAHQbAFaiAEQbDCAGopAwA3AwAgB0GoBWogBEGowgBqKQMANwMAIAdBoAVqIARBoMIAaikDADcDACAHQZgFaiAEQZjCAGopAwA3AwAgB0GQBWogBEGQwgBqKQMANwMAIAcgBCkDiEI3A4gFIAcgRDoAyAUgB0HMBWogBCgAg0I2AAAgByAEKAKAQjYAyQUgB0GIBmogBEGIwwBqKQMANwMAIAdBgAZqIARBgMMAaikDADcDACAHQfgFaiAEQfjCAGopAwA3AwAgB0HwBWogBEHwwgBqKQMANwMAIAdB6AVqIARB6MIAaikDADcDACAHQeAFaiAEQeDCAGopAwA3AwAgB0HYBWogBEHYwgBqKQMANwMAIAcgBCkD0EI3A9AFIAcgOjoAkAYgB0GUBmogBCgAy0I2AAAgByAEKALIQjYAkQYgB0HQBmogBEHQwwBqKQMANwMAIAdByAZqIARByMMAaikDADcDACAHQcAGaiAEQcDDAGopAwA3AwAgB0G4BmogBEG4wwBqKQMANwMAIAdBsAZqIARBsMMAaikDADcDACAHQagGaiAEQajDAGopAwA3AwAgB0GgBmogBEGgwwBqKQMANwMAIAcgBCkDmEM3A5gGIAcgSToA2AYgB0HcBmogBCgAk0M2AAAgByAEKAKQQzYA2QYgB0GYB2ogBEGYxABqKQMANwMAIAdBkAdqIARBkMQAaikDADcDACAHQYgHaiAEQYjEAGopAwA3AwAgB0GAB2ogBEGAxABqKQMANwMAIAdB+AZqIARB+MMAaikDADcDACAHQfAGaiAEQfDDAGopAwA3AwAgB0HoBmogBEHowwBqKQMANwMAIAcgBCkD4EM3A+AGIAcgSjoAoAcgB0GkB2ogBCgA20M2AAAgByAEKALYQzYAoQcgB0HgB2ogBEHgxABqKQMANwMAIAdB2AdqIARB2MQAaikDADcDACAHQdAHaiAEQdDEAGopAwA3AwAgB0HIB2ogBEHIxABqKQMANwMAIAdBwAdqIARBwMQAaikDADcDACAHQbgHaiAEQbjEAGopAwA3AwAgB0GwB2ogBEGwxABqKQMANwMAIAcgBCkDqEQ3A6gHIAcgSzoA6AcgB0HsB2ogBCgAo0Q2AAAgByAEKAKgRDYA6QcgB0GoCGogBEGoxQBqKQMANwMAIAdBoAhqIARBoMUAaikDADcDACAHQZgIaiAEQZjFAGopAwA3AwAgB0GQCGogBEGQxQBqKQMANwMAIAdBiAhqIARBiMUAaikDADcDACAHQYAIaiAEQYDFAGopAwA3AwAgB0H4B2ogBEH4xABqKQMANwMAIAcgBCkD8EQ3A/AHIAcgTDoAsAggB0G0CGogBCgA60Q2AAAgByAEKALoRDYAsQggB0HwCGogBEHwxQBqKQMANwMAIAdB6AhqIARB6MUAaikDADcDACAHQeAIaiAEQeDFAGopAwA3AwAgB0HYCGogBEHYxQBqKQMANwMAIAdB0AhqIARB0MUAaikDADcDACAHQcgIaiAEQcjFAGopAwA3AwAgB0HACGogBEHAxQBqKQMANwMAIAcgBCkDuEU3A7gIIAcgTToA+AggB0H8CGogBCgAs0U2AAAgByAEKAKwRTYA+QggB0G4CWogBEG4xgBqKQMANwMAIAdBsAlqIARBsMYAaikDADcDACAHQagJaiAEQajGAGopAwA3AwAgB0GgCWogBEGgxgBqKQMANwMAIAdBmAlqIARBmMYAaikDADcDACAHQZAJaiAEQZDGAGopAwA3AwAgB0GICWogBEGIxgBqKQMANwMAIAcgBCkDgEY3A4AJIAcgTjoAwAkgB0HECWogBCgA+0U2AAAgByAEKAL4RTYAwQkgB0GACmogBEGAxwBqKQMANwMAIAdB+AlqIARB+MYAaikDADcDACAHQfAJaiAEQfDGAGopAwA3AwAgB0HoCWogBEHoxgBqKQMANwMAIAdB4AlqIARB4MYAaikDADcDACAHQdgJaiAEQdjGAGopAwA3AwAgB0HQCWogBEHQxgBqKQMANwMAIAcgBCkDyEY3A8gJIAcgTzoAiAogB0GMCmogBCgAw0Y2AAAgByAEKALARjYAiQogB0HICmogBEHIxwBqKQMANwMAIAdBwApqIARBwMcAaikDADcDACAHQbgKaiAEQbjHAGopAwA3AwAgB0GwCmogBEGwxwBqKQMANwMAIAdBqApqIARBqMcAaikDADcDACAHQaAKaiAEQaDHAGopAwA3AwAgB0GYCmogBEGYxwBqKQMANwMAIAcgBCkDkEc3A5AKIAcgUDoA0AogB0HUCmogBCgAi0c2AAAgByAEKAKIRzYA0QogB0GQC2ogBEGQyABqKQMANwMAIAdBiAtqIARBiMgAaikDADcDACAHQYALaiAE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BS0AACIEQeABcSIHQSBGIAdB4ABGckUgB0HgAUdxRQRAQdHOxQAtAAAaQRBBARDWBCIERQ0BIBJBEDYCECASIAQ2AgwgEkEQNgIIIBJCAjcDACAEQQhqQfThwAApAAA3AAAgBEHs4cAAKQAANwAADAkLQdHOxQAtAAAaQTBBARDWBCIaRQ0CIBogBUEw/AoAACAaIBotAABBH3E6AAAgBMAiBEHAAHEEQEEAIQoCQANAIApBMEYNASAKIBpqIApBAWohCi0AAEUNAAtB0c7FAC0AABpBJkEBENYEIgRFDQMgEkEmNgIQIBIgBDYCDCASQSY2AgggEkICNwMAIARBHmpBmuLAACkAADcAACAEQRhqQZTiwAApAAA3AAAgBEEQakGM4sAAKQAANwAAIARBCGpBhOLAACkAADcAACAEQfzhwAApAAA3AAAMCQsgA0GgA2oiBEEAQeEA/AsAIBJCADcDACASQQhqIARBwAH8CgAADAgLIARBAE4NBiADQcAKaiAaQTAQjgFBKCEKIAMpA8AKISogAykDyAohLSADKQPQCiEpIAMpA9gKISMgAykD4AohJCADKQPoCiElA0AgA0HAAmogA0HACmogCmopAwAiIEIAICVCABDJAyADQdACaiAgQgAgJEIAEMkDIANB4AJqICBCACAjQgAQyQMgA0HwAmogIEIAIClCABDJAyADQYADaiAgQgAgLUIAEMkDIANBkANqICBCACAqQgAQyQMgA0GwAmogKCADKQPAAiImfCIrQgBCAEL9//P/z///+Yl/EMkDIANBoAJqIAMpA7gCIiBCAEKr1f7///+//7l/QgAQyQMgA0GQAmogIEIAQv//z4rr///VHkIAEMkDIANBgAJqICBCAEKk7MO1j9S0mOcAQgAQyQMgA0HwAWogIEIAQr+llJzP8NK75ABCABDJAyADQeABaiAgQgBC19mumuT26Y3LAEIAEMkDIANB0AFqICBCAEKazf/Lo73EgBpCABDJAyADKQPYASAiIAMpA5ADIid8IiwgAykDiAMgAykDgAMiICAhfCIhICBUrXwgISADKQP4AiAdIAMpA/ACIh18IiAgHVStfCAgICAgAykD6AIgAykD4AIiHSAefCIeIB1UrXwgHiAeIAMpA9gCIAMpA9ACIh0gH3wiHyAdVK18IB8gHyADKQPIAiAmICtWrXx8Ih9WrXx8IihWrXx8Ih5WrXx8Ih0gIVStfHwiIiADKQPQAXwiISAiVK18ICEgISADKQPoASAdIB0gAykD4AF8IiZWrXwgJiAmIAMpA/gBIB4gHiADKQPwAXwiIFatfCAgIAMpA4gCICggKCADKQOAAnwiHlatfCAeIAMpA5gCIB8gAykDkAIiHXwiHyAdVK18IB8gAykDqAIgKyADKQOgAiIdfCAdVK18fCIoIB9UrXx8Ih8gHlStfHwiHiAgVK18fCIdVq18fCIhVq18ICIgLFStIAMpA5gDICcgLFatfHx8ISIgCkEIayIKQXhHDQALICJCms3/y6O9xIAaWA0DDAQLQQFBEEGEpMAAEMgEAAtBAUEmQYSkwAAQyAQAC0EBQTBBhKTAABDIBAALICJCms3/y6O9xIAaUgRAIB8hICAeIScgHSEmICEhJQwCCyAhQtfZrprk9umNywBWDQAgIULX2a6a5PbpjcsAUgRAIB8hICAeIScgHSEmICEhJUKazf/Lo73EgBohIgwCCyAdQr+llJzP8NK75ABWDQBC19mumuT26Y3LACElIB1Cv6WUnM/w0rvkAFIEQCAfISAgHiEnIB0hJkKazf/Lo73EgBohIgwCCyAeQqTsw7WP1LSY5wBWDQBCv6WUnM/w0rvkACEmIB5CpOzDtY/UtJjnAFIEQCAfISAgHiEnQprN/8ujvcSAGiEiDAILIB9C///Piuv//9UeVg0AQqTsw7WP1LSY5wAhJyAfQv//z4rr///VHlIEQCAfISBCms3/y6O9xIAaISIMAgtC///Piuv//9UeISAgKEKq1f7///+//7l/Vg0AQprN/8ujvcSAGiEiDAELIB9C///Piuv//9UefSIlIChCq9X+////v/+5f1StIid9ISAgHkKk7MO1j9S0mOcAfSImIB9C///Piuv//9UeVCAlICdUcq0iH30hJyAdQr+llJzP8NK75AB9IiUgHkKk7MO1j9S0mOcAVCAfICZWcq0iHn0hJiAhQtfZrprk9umNywB9Ih8gHUK/pZScz/DSu+QAVCAeICVWcq0iHX0hJSAiICFC19mumuT26Y3LAFQgHSAfVnKtfUKazf/Lo73EgBp9ISIgKELVqoGAgIDAgMYAfCEoC0EoIQpCACEdQgAhHkIAISNCACEpQgAhJEIAISEDQCADQfAAaiADQcAKaiAKaikDACIfQgAgKEIAEMkDIANBgAFqIB9CACAgQgAQyQMgA0GQAWogH0IAICdCABDJAyADQaABaiAfQgAgJkIAEMkDIANBsAFqIB9CACAlQgAQyQMgA0HAAWogH0IAICJCABDJAyADQeAAaiADKQNwIh8gIXwiLkIAQgBC/f/z/8////mJfxDJAyADQdAAaiADKQNoIiFCAEKr1f7///+//7l/QgAQyQMgA0FAayAhQgBC///Piuv//9UeQgAQyQMgA0EwaiAhQgBCpOzDtY/UtJjnAEIAEMkDIANBIGogIUIAQr+llJzP8NK75ABCABDJAyADQRBqICFCAELX2a6a5PbpjcsAQgAQyQMgAyAhQgBCms3/y6O9xIAaQgAQyQMgAykDCCADKQPAASItIB18Ii8gAykDuAEgAykDsAEiHSAefCIqIB1UrXwgKiAqIAMpA6gBICMgAykDoAEiHXwiISAdVK18ICEgISADKQOYASApIAMpA5ABIh18IiMgHVStfCAjICMgAykDiAEgAykDgAEiHSAkfCIeIB1UrXwgHiAeIAMpA3ggHyAuVq18fCIfVq18fCIkVq18fCIeVq18fCIdVq18fCIrIAMpAwB8IiwgK1StfCAsICwgAykDGCAdIB0gAykDEHwiKlatfCAqIAMpAyggHiAeIAMpAyB8IiNWrXwgIyADKQM4ICQgJCADKQMwfCIeVq18IB4gAykDSCAfIAMpA0AiHXwiHyAdVK18IB8gAykDWCAuIAMpA1AiHXwgHVStfHwiISAfVK18fCIkIB5UrXx8IikgI1StfHwiIyAqVK18fCIeVq18ICsgL1StIAMpA8gBIC0gL1atfHx8IR0gCkEIayIKQXhHDQALAkACQCAdQprN/8ujvcSAGlYNAAJAAkACQAJAIB1Cms3/y6O9xIAaUg0AIB5C19mumuT26Y3LAFYNBCAeQtfZrprk9umNywBSBEBCms3/y6O9xIAaIR0MAQsgI0K/pZScz/DSu+QAVg0EQtfZrprk9umNywAhJSAjQr+llJzP8NK75ABSBEBCms3/y6O9xIAaIR0MAgsgKUKk7MO1j9S0mOcAVg0EQr+llJzP8NK75AAhIiApQqTsw7WP1LSY5wBSBEBCms3/y6O9xIAaIR0MAwsgJEL//8+K6///1R5WDQRCpOzDtY/UtJjnACEfICRC///Piuv//9UeUQ0DQprN/8ujvcSAGiEdICQhKAwFCyAeISULICMhIgsgKSEfICQhKAwCC0L//8+K6///1R4hKCAhQqrV/v///7//uX9WDQBCms3/y6O9xIAaIR0MAQsgJEL//8+K6///1R59IiAgIUKr1f7///+//7l/VK0iH30hKCApQqTsw7WP1LSY5wB9IicgJEL//8+K6///1R5UIB8gIFZyrSIgfSEfICNCv6WUnM/w0rvkAH0iJiApQqTsw7WP1LSY5wBUICAgJ1ZyrSIgfSEiIB5C19mumuT26Y3LAH0iJyAjQr+llJzP8NK75ABUICAgJlZyrSIgfSElIB0gHkLX2a6a5PbpjcsAVCAgICdWcq19QprN/8ujvcSAGn0hHSAhQtWqgYCAgMCAxgB8ISELQprN/8ujvcSAGiEkIB0gJULRqZ2ExJijm/EAfSIjICVUICMgIkKptpfKkaigls4AfSIlICJUICUgJSAfQv+Aqtimr/rHxwB8Ih4gH1QgHiAeIChCioDQ4a+GgObTAHwiHyAoVCAfIB8gIUKNgMz///+/7NUAfSIiICFUrXwiJlZyrXwiJ1ZyrXwiIFZyrXwiHyAjVHKtfEL+vI/sk6qR6wl8IiUhHQJAAkACQCAlQprN/8ujvcSAGlINAELX2a6a5PbpjcsAISQgHyIdQtfZrprk9umNywBSDQBCv6WUnM/w0rvkACEkICAiHUK/pZScz/DSu+QAUg0AQqTsw7WP1LSY5wAhJCAnIh1CpOzDtY/UtJjnAFINAEL//8+K6///1R4hJCAmIh1C///Piuv//9UeUg0AQqvV/v///7//uX8hJCAiIh1Cq9X+////v/+5f1ENAQsgHSAkWg0AIB8hHSAgIR4gJyEjICYhJAwBCyAmQv//z4rr///VHn0iIyAiQqvV/v///7//uX9UrSIdfSEkICdCpOzDtY/UtJjnAH0iHiAmQv//z4rr///VHlQgHSAjVnKtIh19ISMgIEK/pZScz/DSu+QAfSImICdCpOzDtY/UtJjnAFQgHSAeVnKtIh19IR4gH0LX2a6a5PbpjcsAfSInICBCv6WUnM/w0rvkAFQgHSAmVnKtIiB9IR0gJSAfQtfZrprk9umNywBUICAgJ1ZyrX1Cms3/y6O9xIAafSElICJC1aqBgICAwIDGAHwhIgsgAyAiNwOoCSADICQ3A6AJIAMgIzcDmAkgAyAeNwOQCSADIB03A4gJIAMgJTcDgAkCQCAEQSBxBEAgA0HwCmogA0GACWoQoQIMAQsgA0G4B2oiAiADQYAJahAqAn8CQCADKAK4B0EBRgRAIANBmAZqIhggA0HoB2opAwA3AwAgA0GQBmoiDSADQeAHaiIJKQMANwMAIANBiAZqIhEgA0HYB2oiEykDADcDACADQYAGaiIXIANB0AdqIgopAwA3AwAgA0H4BWoiDiADQcgHaiIPKQMANwMAIANBqAZqIhAgA0H4B2opAwA3AwAgA0GwBmoiDCADQYAIaikDADcDACADQbgGaiIHIANBiAhqKQMANwMAIANBwAZqIgUgA0GQCGopAwA3AwAgA0HIBmoiBCADQZgIaikDADcDACADIAMpA8AHNwPwBSADIAMpA/AHNwOgBiADQYgKaiAYKQMANwMAIANBgApqIA0pAwA3AwAgA0H4CWogESkDADcDACADQfAJaiAXKQMANwMAIANB6AlqIA4pAwA3AwAgAyADKQPwBTcD4AkgCSAEKQMANwMAIBMgBSkDADcDACAKIAcpAwA3AwAgDyAMKQMANwMAIANBwAdqIBApAwA3AwAgAyADKQOgBjcDuAcgA0GkC2ogA0HgCWoQ2AIgA0GwC2ogAhDYAiADKAKsCyIFIAMoArgLIgRGBEAgAygCqAtBBGshECADKAK0C0EEayEMIAVBAnQhCgJAA0AgCkUNASAKIAxqIQcgCiAQaiAKQQRrIQooAgAiBSAHKAIAIgRGDQALIAQgBUsNAyADQbgHagwECyAKDQIgA0G4B2oMAwsgBCAFSw0BIANBuAdqDAILQdiuwAAQ6AQACyADQeAJagshBSADKAKwCyIEBEAgAygCtAsgBEECdBDfBAsgAygCpAsiBARAIAMoAqgLIARBAnQQ3wQLIANB+ApqIAVBCGopAwA3AwAgA0GAC2ogBUEQaikDADcDACADQYgLaiAFQRhqKQMANwMAIANBkAtqIAVBIGopAwA3AwAgA0GYC2ogBUEoaikDADcDACADIAUpAwA3A/AKCyADQYgKaiADQegKaikDADcDACADQYAKaiADQeAKaikDADcDACADQfgJaiADQdgKaikDADcDACADQfAJaiADQdAKaikDADcDACADQegJaiADQcgKaikDADcDACADIAMpA8AK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AA0CIAJB2ANqIBFBMGopAwA3AwAgAkHQA2ogEUEoaikDADcDACACQcgDaiARQSBqKQMANwMAIAJBwANqIBFBGGopAwA3AwAgAkG4A2ogEUEQaikDADcDACACQegDaiARQUBrKQMANwMAIAJB8ANqIBFByABqKQMANwMAIAJB+ANqIBFB0ABqKQMANwMAIAJBgARqIBFB2ABqKQMANwMAIAJBiARqIBFB4ABqKQMANwMAIAIgESkDCDcDsAMgAiARKQM4NwPgAyACIBEtAGg6AJAEIAJBgA9qIAJBqAJqQfylwAAQViACKAKMDyENIAIoAogPIQUgAigChA8hCAJAIAIoAoAPQQFGDQAgDUECRw0CIAUoAgQhByAFKAIAIQQgDCAFQQhqQdgA/AoAACAIBEAgBSAIQTBsEN8ECyACQagOaiACQaAEaiIOQdgA/AoAACACQdgNaiACQbAOaikDADcDACACQeANaiACQbgOaikDADcDACACQegNaiACQcAOaikDADcDACACQfANaiACQcgOaikDADcDACACQYAOaiACQdgOaikDADcDACACQYgOaiACQeAOaikDADcDACACQZAOaiACQegOaikDADcDACACQZgOaiACQfAOaikDADcDACACQaAOaiACQfgOaikDADcDACACIAc2AswNIAIgBDYCyA0gAiACKQOoDjcD0A0gAiACKQPQDjcD+A0gDiACQcgNahAWIAJB2ARqIAJB+A1qEBYgAigCqAQhDSACKAKkBCEFIAIoAqAEIQggAkGYC2oiDyACQawEakHdAPwKAAAgAkGcBGoiDCACQY4Fai8BADsBACACIAIoAYoFNgKYBCACLQCJBSIHQQJGDQAgAkH8CGogD0HdAPwKAABBBCEEIAJB3glqIAwvAQA7AQAgAiACKAKYBDYB2gkgAiAHOgDZCSACIA02AvgIIAIgBTYC9AggAiAINgLwCEEAIQ0gAkEANgKgCyACQoCAgIDAADcCmAsgDiACQfAIahDVAiACKAKoBCIOQQxsIQUgAigCpAQhDCACKAKgBCEHIA4EQCAPQQAgDkEEQQwQiAMgAigCoAshDSACKAKcCyEECyAFBEAgBCANQQxsaiAMIAX8CgAACyACIA0gDmoiBTYCoAsgBwRAIAwgB0EMbBDfBAsgAkGgBGogAkGoCWoQ1QIgAigCqAQi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J0F/c2oiAC0AADoAACAAICY6AAALICRBEUkNACAsQQE2AqwCICxB3IjBADYCqAIgLEIBNwK0AiAsICQ2AogGICwgLEGIBmqtQoCAgIDgAYQ3A+gHICwgLEHoB2o2ArACIEFBBGogLEGoAmoQ0gIgQUEBNgIAICwoAigiAEUNASAuIAAQ3wQMAQsgLEEgakIANwMAICxCADcDGCAkBEAgLCAka0EoaiAuICT8CgAACyAsKAIoIgAEQCAuIAAQ3wQLICxB6AdqIgBBnOHAABCuAiAsQagCaiAAEDQgLEGQBmoiACAsQbgCaigCADYCACAsICwpA7ACNwOIBiAsKQOoAiICQgJRBEAgQSAsKQOIBjcCBCBBQQE2AgAgQUEMaiAAKAIANgIADAELICxBNGogLEG8AmpB9AH8CgAAICxBMGoiACAsQZAGaigCADYCACAsICwpA4gGNwMoIAKnQQFxRQ0BICwoArQEIWkgLCgCsAQhZyAsQZAKaiAsQdAAaikDADcDACAsQYgKaiAsQcgAaikDADcDACAsQYAKaiAsQUBrKQMANwMAICxB+AlqICxBOGopAwA3AwAgLEHwCWogACkDADcDACAsQaAKaiAsQeAAaikDADcDACAsQagKaiAsQegAaikDADcDACAsQbAKaiAsQfAAaikDADcDACAsQbgKaiAsQfgAaikDADcDACAsQcAKaiAsQYABaikDADcDACAsICwpAyg3A+gJICwgLCkDWDcDmAogLEHwCmogLEGwAWopAwA3AwAgLEHoCmogLEGoAWopAwA3AwAgLEHgCmogLEGgAWopAwA3AwAgLEHYCmogLEGYAWopAwA3AwAgLEHQCmogLEGQAWopAwA3AwAgLEGAC2ogLEHAAWopAwA3AwAgLEGIC2ogLEHIAWopAwA3AwAgLEGQC2ogLEHQAWopAwA3AwAgLEGYC2ogLEHYAWopAwA3AwAgLEGgC2ogLEHgAWopAwA3AwAgLCAsKQOIATcDyAogLCAsKQO4ATcD+AogLEHIBGoiACAsQegJakHgAPwKAAAgLEGoBWogLEHICmpB4AD8CgAAICxBqAJqIUUgLEEIaiFDICxBGGohaCMAQbAsayIhJAAgIUGAJGpCADcDACAhQfgjakIANwMAICFB8CNqQgA3AwAgIUHoI2pCADcDACAhQeAjakIANwMAICFB2CNqQgA3AwAgIUGwI2pBqKPAACkDADcDACAhQbgjakGwo8AAKQMANwMAICFBCDoAiCQgIUGoI2oiKEGgo8AAKQMANwMAICFCADcD0CMgIUIANwPAIyAhQZijwAApAwA3A6AjICEgZa0iAkI4hiACQoD+A4NCKIaEIAJCgID8B4NCGIYgAkKAgID4D4NCCIaEhDcDyCMgIUGgLGpCADcDACAhQZgsakIANwMAICFBkCxqQgA3AwAgIUIANwOILCAhQYgsaiEvIwBBQGoiMiQAICFByCNqIiQtAEAiJSAkaiIqQYABOgAAICWtIgRCO4YgIUGgI2oiJykDICIDQgmGIgIgBEIDhoQiBEKA/gODQiiGhCAEQoCA/AeDQhiGIARCgICA+A+DQgiGhIQgA0IBhkKAgID4D4MgA0IPiEKAgPwHg4QgA0IfiEKA/gODIAJCOIiEhIQhAgJAAkAgJUE/RwRAICVBP3MiJgRAICpBAWpBACAm/AsACyAlQThzQQdLDQELICcgJEEBEC0gMkEwakIANwMAIDJBKGpCADcDACAyQSBqQgA3AwAgMkEYakIANwMAIDJBEGpCADcDACAyQQhqQgA3AwAgMkIANwMAIDIgAjcDOCAnIDJBARAtDAELICQgAjcAOCAnICRBARAtCyAkQQA6AEAgLyAnKAIcIiZBGHQgJkGA/gNxQQh0ciAmQQh2QYD+A3EgJkEYdnJyNgAcIC8gJygCGCImQRh0ICZBgP4DcUEIdHIgJkEIdkGA/gNxICZBGHZycjYAGCAvICcoAhQiJkEYdCAmQYD+A3FBCHRyICZBCHZBgP4DcSAmQRh2cnI2ABQgLyAnKAIQIiZBGHQgJkGA/gNxQQh0ciAmQQh2QYD+A3EgJkEYdnJyNgAQIC8gJygCDCImQRh0ICZBgP4DcUEIdHIgJkEIdkGA/gNxICZBGHZycjYADCAvICcoAggiJkEYdCAmQYD+A3FBCHRyICZBCHZBgP4DcSAmQRh2cnI2AAggLyAnKAIEIiZBGHQgJkGA/gNxQQh0ciAmQQh2QYD+A3EgJkEYdnJyNgAEIC8gJygCACImQRh0ICZBgP4DcUEIdHIgJkEIdkGA/gNxICZBGHZycjYAACAyQUBrJAAgJyAvQdCJwQAQHQJAAkACQAJAAkACQAJAICEtAIAkQQJGBEAgIUHgG2ogKCgCACIANgIAICEgISkDoCMiAjcD2BsgRUEMaiAANgIAIEUgAjcCBCBFQQE2AgAMAQsgIUHYG2oiJiAhQaAjaiIlQeAA/AoAACAhQQhqICZB4AD8CgAAICFB+CBqICFB4ABqKQMANwMAICFB8CBqICFB2ABqKQMANwMAICFB6CBqICFB0ABqKQMANwMAICFB4CBqICFByABqKQMANwMAICFB2CBqICFBQGspAwA3AwAgISAhKQM4NwPQICAhQaggaiAhQRBqKQMANwMAICFBsCBqICFBGGopAwA3AwAgIUG4IGogIUEgaikDADcDACAhQcAgaiAhQShqKQMANwMAICFByCBqICFBMGopAwA3AwAgISAhKQMINwOgICAhQaghakHI/8AAKQMANwMAICFBoCFqQcD/wAApAwA3AwAgIUGYIWpBuP/AACkDADcDACAhQZAhakGw/8AAKQMANwMAICFBiCFqQaj/wAApAwA3AwAgIUGg/8AAKQMANwOAISMAQcABayIxJAACQAJAICFBoCBqIi9B4ABqIjJB2LPCAEEwEPEDBEBBACEwQQAhJCMAQdAdayIgJAAgIEGQGWogL0EwaiImKQMgIgdCACAmKQMoIgZCABDJAyAgQaAZaiAmKQMYIgVCACAGQgAQyQMgIEGwGWogJikDECIDQgAgBkIAEMkDICBBwBlqICYpAwgiBEIAIAZCABDJAyAgQdAZaiAmKQMAIgJCACAGQgAQyQMgIEHwGWogBUIAIAdCABDJAyAgQYAaaiADQgAgB0IAEMkDICBBkBpqIARCACAHQgAQyQMgIEGgGmogAkIAIAdCABDJAyAgQcAaaiADQgAgBUIAEMkDICBB0BpqIARCACAFQgAQyQMgIEHgGmogAkIAIAVCABDJAyAgQYAbaiAEQgAgA0IAEMkDICBBkBtqIAJCACADQgAQyQMgIEGwG2ogAkIAIARCABDJAyAgQeAZaiAGQgAgBkIAEMkDICBBsBpqIAdCACAHQgAQyQMgIEHwGmogBUIAIAVCABDJAyAgQaAbaiADQgAgA0IAEMkDICBBwBtqIARCACAEQgAQyQMgIEHQG2ogAkIAIAJCABDJAyAgQYAZaiAgKQPgGSIPQv3/8//P///5iX9+IgJCAEKr1f7///+//7l/QgAQyQMgIEHwGGogAkIAQv//z4rr///VHkIAEMkD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v/+5f0IAEMkDICBBwA9qIAVCAEL//8+K6///1R5CABDJAyAgQbAPaiAFQgBCpOzDtY/UtJjnAEIAEMkDICBBoA9qIAVCAEK/pZScz/DSu+QAQgAQyQMgIEGQD2ogBUIAQtfZrprk9umNywBCABDJAyAgQYAPaiAFQgBCms3/y6O9xIAaQgAQyQMCQCAgKQOIDyAgKQOYDyAgKQOoDyAgKQO4DyAgKQPIDyAgKQPYDyAgKQPQDyIFIA58IAVUrXwiBSAgKQPAD3wiDiAFVK18IA4gCiAOfCIMVq18IgUgICkDsA98IgogBVStfCAJIAp8IgkgClStfCIFICApA6APfCIKIAVUrXwgByAKfCIHIApUrXwiBSAgKQOQD3wiCiAFVK18IAYgCnwiBiAKVK18IgUgICkDgA98IgogBVStfCAKIAMgCnwiBVatfCIDUA0AIAMgC3wiCyADWg0AIAMgC1atIgMgAnwiAiADWg0AIAIgA1StIgMgBHwiBCADVCEwCyAgQfAOaiAMQv3/8//P///5iX9+IgNCAEKr1f7///+//7l/QgAQyQMgIEHgDmogA0IAQv//z4rr///VHkIAEMkDICBB0A5qIANCAEKk7MO1j9S0mOcAQgAQyQMgIEHADmogA0IAQr+llJzP8NK75ABCABDJAyAgQbAOaiADQgBC19mumuT26Y3LAEIAEMkDICBBoA5qIANCAEKazf/Lo73EgBpCABDJA0EAISsgICkDqA4gICkDuA4gICkDyA4gICkD2A4gICkD6A4gICkD+A4gICkD8A4iAyAMfCADVK18IgMgICkD4A58IgogA1StfCAJIAp8IgwgClStfCIDICApA9AOfCIJIANUrXwgByAJfCIKIAlUrXwiAyAgKQPADnwiByADVK18IAYgB3wiCSAHVK18IgMgICkDsA58IgYgA1StfCAGIAUgBnwiBlatfCIDICApA6AOfCIFIANUrXwgBSALfCIHIAVUrXwiA1BFBEAgAiADfCICIANUIiatIgUgBHwiAyAEICYbIQQgJiADIAVUcSErCyAgQZAOaiAMQv3/8//P///5iX9+IgNCAEKr1f7///+//7l/QgAQyQMgIEGADmogA0IAQv//z4rr///VHkIAEMkDICBB8A1qIANCAEKk7MO1j9S0mOcAQgAQyQMgIEHgDWogA0IAQr+llJzP8NK75ABCABDJAyAgQdANaiADQgBC19mumuT26Y3LAEIAEMkDICBBwA1qIANCAEKazf/Lo73EgBpCABDJAyAgKQPIDSAgKQPYDSAgKQPoDSAgKQP4DSAgKQOIDiAgKQOYDiAgKQOQDiIDIAx8IANUrXwiAyAgKQOADnwiBSADVK18IAUgCnwiCyAFVK18IgMgICkD8A18IgUgA1StfCAFIAUgCXwiBVatfCIDICApA+ANfCIJIANUrXwgBiAJfCIGIAlUrXwiAyAgKQPQDXwiCSADVK18IAcgCXwiByAJVK18IgMgICkDwA18IgkgA1StfCACIAl8IgIgCVStfCIKIAR8IgMgBCAKQgBSIigbIQkCQAJAAkAgAyAKVCImrSAKICgbUEUEQCACIQQMAQsgKyAkICpyICdyIDBycgRAIAIhBAwBCyAmIChxBEAgAiEEDAELIAlCms3/y6O9xIAaVgRAIAIhBAwBCyAJQprN/8ujvcSAGlINASACQtfZrprk9umNywBWBEAgAiEEDAELIAJC19mumuT26Y3LAFINAULX2a6a5PbpjcsAIQQgB0K/pZScz/DSu+QAVg0AIAdCv6WUnM/w0rvkAFINASAGQqTsw7WP1LSY5wBWDQAgBkKk7MO1j9S0mOcAUg0BIAVC///Piuv//9UeVg0AIAVC///Piuv//9UeUiALQqrV/v///7//uX9Ycg0BCyAFQv//z4rr///VHn0iDCALQqvV/v///7//uX9UrSICfSEDIAZCpOzDtY/UtJjnAH0iCiAFQv//z4rr///VHlQgAiAMVnKtIgJ9IQUgB0K/pZScz/DSu+QAfSIMIAZCpOzDtY/UtJjnAFQgAiAKVnKtIgJ9IQYgBELX2a6a5PbpjcsAfSIKIAdCv6WUnM/w0rvkAFQgAiAMVnKtIgd9IQIgCSAEQtfZrprk9umNywBUIAcgClZyrX1Cms3/y6O9xIAafSEJIAtC1aqBgICAwIDGAHwhCwwBCyAFIQMgBiEFIAchBgsgICALNwO4HCAgIAM3A7AcICAgBTcDqBwgICAGNwOgHCAgIAI3A5gcICAgCTcDkBwgIEHwHGoiJkIANwMAICZBKGpCADcDACAmQSBqQgA3AwAgJkEYakIANwMAICZBEGpCADcDACAmQQhqQgA3AwAgIEGwDGogMikDICIHQgAgMikDKCIGQgAQyQMgIEGADGogMikDGCIFQgAgBkIAEMkDICBBwAtqIDIpAxAiA0IAIAZCABDJAyAgQfAKaiAyKQMIIgRCACAGQgAQyQMgIEGQCmogMikDACICQgAgBkIAEMkDICBBkAxqIAVCACAHQgAQyQMgIEHQC2ogA0IAIAdCABDJAyAgQYALaiAEQgAgB0IAEMkDICBBoApqIAJCACAHQgAQyQMgIEHgC2ogA0IAIAVCABDJAyAgQZALaiAEQgAgBUIAEMkDICBBsApqIAJCACAFQgAQyQMgIEGgC2ogBEIAIANCABDJAyAgQcAKaiACQgAgA0IAEMkDICBB0ApqIAJCACAEQgAQyQMgIEGwDWogBkIAIAZCABDJAyAgQcAMaiAHQgAgB0IAEMkDICBBoAxqIAVCACAFQgAQyQMgIEHwC2ogA0IAIANCABDJAyAgQbALaiAEQgAgBEIAEMkDICBB4ApqIAJCACACQgAQyQMgIEGgDWogICkDsA0iH0L9//P/z///+Yl/fiICQgBCq9X+////v/+5f0IAEMkDICBBkA1qIAJCAEL//8+K6///1R5CABDJAyAgQYANaiACQgBCpOzDtY/UtJjnAEIAEMkDICBB8AxqIAJCAEK/pZScz/DSu+QAQgAQyQMgIEHgDGogAkIAQtfZrprk9umNywBCABDJAyAgQdAMaiACQgBCms3/y6O9xIAaQgAQyQMgICkD2AogICkDyAogICkDqAsgICkDmAsgICkD6AsgICkD2AsgICkDmAwgICkDiAwgICkDuAwiAiAgKQOADHwiDCACVK18IgIgICkDwAt8IgQgICkDkAx8IgogBFStfCIDICApA8gLIAIgBFatfCIEICApA/AKfCICfCIFIANUrXwgBSAFICApA9ALfCITVq18IgMgICkD+AogAiAEVK18IgUgICkDkAp8IgJ8IgcgICkDgAt8IgYgICkD4At8IgkgBlStfCIEIAYgB1StICApA4gLIAMgB1atfHwiAyAgKQOYCiACIAVUrXx8IgYgICkDoAp8IgJ8IgUgBFStfCAFIAUgICkDkAt8IhhWrXwiBCACIAZUrSAgKQOoCiADIAZWrXx8fCIFICApA7AKfCIDICApA6ALfCIZIANUrXwiAiADIAVUrSAgKQO4CiAEIAVWrXx8fCIEIAJUrXwgBCAEICApA8AKfCIXVq18IgIgICkD0Ap8IgsgAlStfCICQj+IICApA+gKIhYgICkD4AoiGiACQgGGIAtCP4iEfCIVIBpUrXwgFSAgKQO4CyIQICApA7ALIhsgF0IBhiAZQj+IhHwiByAbVK18IAcgICkD+AsiEiAgKQPwCyIcIBhCAYYgCUI/iIR8IgUgHFStfCAFIAUgICkDqAwiESAgKQOgDCIdIBNCAYYgCkI/iIR8IgMgHVStfCADIAMgICkDyAwiDyAgKQPADCIeIAxCAYYgICkDsAwiAkI/iIR8IgQgHlStfCAEIAQgICkDuA0iFCACQgGGfCINIBRUrXwiDlatfCICIApCAYYgDEI/iIR8IgwgAlStfCIKVq18IgIgCUIBhiATQj+IhHwiCSACVK18IgZWrXwiAiAZQgGGIBhCP4iEfCIFIAJUrXwiAyAHVK18IgIgC0IBhiAXQj+IhHwiCyACVK18IgIgFVStfHwhBEEAISQCfwJAICApA9gMICApA+gMICApA/gMICApA4gNICApA5gNICApA6gNICApA6ANIgcgH0J9g3wgB1StfCIHICApA5ANfCIVIAdUrXwgFSANIBV8IhVWrXwiByAgKQOADXwiDSAHVK18IA0gDnwiDiANVK18IgcgICkD8Ax8Ig0gB1StfCAMIA18IgwgDVStfCIHICApA+AMfCINIAdUrXwgCiANfCIKIA1UrXwiByAgKQPQDHwiDSAHVK18IAkgDXwiCSANVK18IgdQDQAgBiAHfCIGIAdUIiZFDQAgJq0iByAFfCIFIAdaDQAgBSAHVK0iByADfCIDIAdaDQAgAyAHVK0iByALfCILIAdaDQAgByALVq0iByACfCICIAdaDQAgAiAHVK0iByAEfCIEIAdUDAELQQALISogIEGACmogFUL9//P/z///+Yl/fiIHQgBCq9X+////v/+5f0IAEMkDICBB8AlqIAdCAEL//8+K6///1R5CABDJAyAgQeAJaiAHQgBCpOzDtY/UtJjnAEIAEMkDICBB0AlqIAdCAEK/pZScz/DSu+QAQgAQyQMgIEHACWogB0IAQtfZrprk9umNywBCABDJAyAgQbAJaiAHQgBCms3/y6O9xIAaQgAQyQMCQCAgKQO4CSAgKQPICSAgKQPYCSAgKQPoCSAgKQP4CSAgKQOICiAgKQOACiIHIBV8IAdUrXwiByAgKQPwCXwiFSAHVK18IBUgDiAVfCINVq18IgcgICkD4Al8Ig4gB1StfCAMIA58IgwgDlStfCIHICApA9AJfCIOIAdUrXwgCiAOfCIKIA5UrXwiByAgKQPACXwiDiAHVK18IAkgDnwiCSAOVK18IgcgICkDsAl8Ig4gB1StfCAOIAYgDnwiB1atfCIGUA0AIAUgBnwiBSAGWg0AIAUgBlStIgYgA3wiAyAGWg0AIAMgBlStIgYgC3wiCyAGWg0AIAYgC1atIgYgAnwiAiAGWg0AIAIgBlStIgYgBHwiBCAGVCEkCyAgQaAJaiANQv3/8//P///5iX9+IgZCAEKr1f7///+//7l/QgAQyQMgIEGQCWogBkIAQv//z4rr///VHkIAEMkDICBBgAlqIAZCAEKk7MO1j9S0mOcAQgAQyQMgIEHwCGogBkIAQr+llJzP8NK75ABCABDJAyAgQeAIaiAGQgBC19mumuT26Y3LAEIAEMkDICBB0AhqIAZCAEKazf/Lo73EgBpCABDJA0EAITACf0EAICApA9gIICApA+gIICApA/gIICApA4gJICApA5gJICApA6gJICApA6AJIgYgDXwgBlStfCIGICApA5AJfCINIAZUrXwgDSAMIA18Ig5WrXwiBiAgKQOACXwiDCAGVK18IAogDHwiCiAMVK18IgYgICkD8Ah8IgwgBlStfCAJIAx8IgkgDFStfCIGICApA+AIfCIMIAZUrXwgByAMfCIHIAxUrXwiBiAgKQPQCHwiDCAGVK18IAwgBSAMfCIGVq18IgVQDQAaQQAgBSADIAV8IgNYDQAaQQAgAyAFVK0iBSALfCILIAVaDQAaQQAgBSALVq0iBSACfCICIAVaDQAaIAIgBVStIgUgBHwiBCAFVAshJyAgQcAIaiAOQv3/8//P///5iX9+IgVCAEKr1f7///+//7l/QgAQyQMgIEGwCGogBUIAQv//z4rr///VHkIAEMkDICBBoAhqIAVCAEKk7MO1j9S0mOcAQgAQyQMgIEGQCGogBUIAQr+llJzP8NK75ABCABDJAyAgQYAIaiAFQgBC19mumuT26Y3LAEIAEMkDICBB8AdqIAVCAEKazf/Lo73EgBpCABDJAwJAICApA/gHICApA4gIICApA5gIICApA6gIICApA7gIICApA8gIICApA8AIIgUgDnwgBVStfCIFICApA7AIfCIOIAVUrXwgDiAKIA58IgxWrXwiBSAgKQOgCHwiCiAFVK18IAkgCnwiCSAKVK18IgUgICkDkAh8IgogBVStfCAHIAp8IgcgClStfCIFICApA4AIfCIKIAVUrXwgBiAKfCIGIApUrXwiBSAgKQPwB3wiCiAFVK18IAogAyAKfCIFVq18IgNQDQAgAyALfCILIANaDQAgAyALVq0iAyACfCICIANaDQAgAiADVK0iAyAEfCIEIANUITALICBB4AdqIAxC/f/z/8////mJf34iA0IAQqvV/v///7//uX9CABDJAyAgQdAHaiADQgBC///Piuv//9UeQgAQyQMgIEHAB2ogA0IAQqTsw7WP1LSY5wBCABDJAyAgQbAHaiADQgBCv6WUnM/w0rvkAEIAEMkDICBBoAdqIANCAELX2a6a5PbpjcsAQgAQyQMgIEGQB2ogA0IAQprN/8ujvcSAGkIAEMkDQQAhKyAgKQOYByAgKQOoByAgKQO4ByAgKQPIByAgKQPYByAgKQPoByAgKQPgByIDIAx8IANUrXwiAyAgKQPQB3wiCiADVK18IAkgCnwiDCAKVK18IgMgICkDwAd8IgkgA1StfCAHIAl8IgogCVStfCIDICApA7AHfCIHIANUrXwgBiAHfCIJIAdUrXwiAyAgKQOgB3wiBiADVK18IAYgBSAGfCIGVq18IgMgICkDkAd8IgUgA1StfCAFIAt8IgcgBVStfCIDUEUEQCACIAN8IgIgA1QiJq0iBSAEfCIDIAQgJhshBCAmIAMgBVRxISsLICBBgAdqIAxC/f/z/8////mJf34iA0IAQqvV/v///7//uX9CABDJAyAgQfAGaiADQgBC///Piuv//9UeQgAQyQMgIEHgBmogA0IAQqTsw7WP1LSY5wBCABDJAyAgQdAGaiADQgBCv6WUnM/w0rvkAEIAEMkDICBBwAZqIANCAELX2a6a5PbpjcsAQgAQyQMgIEGwBmogA0IAQprN/8ujvcSAGkIAEMkDICApA7gGICApA8gGICApA9gGICApA+gGICApA/gGICApA4gHICApA4AHIgMgDHwgA1StfCIDICApA/AGfCIFIANUrXwgBSAKfCILIAVUrXwiAyAgKQPgBnwiBSADVK18IAUgBSAJfCIFVq18IgMgICkD0AZ8IgkgA1StfCAGIAl8IgYgCVStfCIDICApA8AGfCIJIANUrXwgByAJfCIHIAlUrXwiAyAgKQOwBnwiCSADVK18IAIgCXwiAiAJVK18IgogBHwiAyAEIApCAFIiKBshCQJAAkACQCADIApUIiatIAogKBtQRQRAIAIhBAwBCyArICQgKnIgJ3IgMHJyBEAgAiEEDAELICYgKHEEQCACIQQMAQsgCUKazf/Lo73EgBpWBEAgAiEEDAELIAlCms3/y6O9xIAaUg0BIAJC19mumuT26Y3LAFYEQCACIQQMAQsgAkLX2a6a5PbpjcsAUg0BQtfZrprk9umNywAhBCAHQr+llJzP8NK75ABWDQAgB0K/pZScz/DSu+QAUg0BIAZCpOzDtY/UtJjnAFYNACAGQqTsw7WP1LSY5wBSDQEgBUL//8+K6///1R5WDQAgBUL//8+K6///1R5SIAtCqtX+////v/+5f1hyDQELIAVC///Piuv//9UefSIMIAtCq9X+////v/+5f1StIgJ9IQMgBkKk7MO1j9S0mOcAfSIKIAVC///Piuv//9UeVCACIAxWcq0iAn0hBSAHQr+llJzP8NK75AB9IgwgBkKk7MO1j9S0mOcAVCACIApWcq0iAn0hBiAEQtfZrprk9umNywB9IgogB0K/pZScz/DSu+QAVCACIAxWcq0iB30hAiAJIARC19mumuT26Y3LAFQgByAKVnKtfUKazf/Lo73EgBp9IQkgC0LVqoGAgIDAgMYAfCELDAELIAUhAyAGIQUgByEGCyAgIAs3A8gdICAgAzcDwB0gICAFNwO4HSAgIAY3A7AdICAgAjcDqB0gICAJNwOgHSAgQcAcaiInICBB8BxqIiggIEGgHWoiKhCyASAqICBBkBxqIiYgJxC9AiAmICogLxCyASAoQvP/s4CAgMCTqn83AyggKEKKgNDhr4aA5tMANwMgIChC/4Cq2Kav+sfHADcDGCAoQtfJ6LXu19/psX83AxAgKEKv1uL7u+fc5I5/NwMIIChC/ryP7JOqkesJNwMAICBBoAZqIDIpAyAiB0IAIDIpAygiBkIAEMkDICBBgAZqIDIpAxgiBUIAIAZCABDJAyAgQdAFaiAyKQMQIgNCACAGQgAQyQMgIEGQBWogMikDCCIEQgAgBkIAEMkDICBBwARqIDIpAwAiAkIAIAZCABDJAyAgQZAGaiAFQgAgB0IAEMkDICBB4AVqIANCACAHQgAQyQMgIEGgBWogBEIAIAdCABDJAyAgQdAEaiACQgAgB0IAEMkDICBB8AVqIANCACAFQgAQyQMgIEGwBWogBEIAIAVCABDJAyAgQeAEaiACQgAgBUIAEMkDICBBwAVqIARCACADQgAQyQMgIEHwBGogAkIAIANCABDJAyAgQYAFaiACQgAgBEIAEMkDICBBsARqIB9C/f/z/8////mJf34iAkIAQqvV/v///7//uX9CABDJAyAgQaAEaiACQgBC///Piuv//9UeQgAQyQMgIEGQBGogAkIAQqTsw7WP1LSY5wBCABDJAyAgQYAEaiACQgBCv6WUnM/w0rvkAEIAEMkDICBB8ANqIAJCAELX2a6a5PbpjcsAQgAQyQMgIEHgA2ogAkIAQprN/8ujvcSAGkIAEMkDICApA4gFICApA/gEICApA8gFICApA7gFICApA/gFICApA+gFICApA5gGICApA4gGICApA6gGIgIgICkDgAZ8IgwgAlStfCICICApA9AFfCIEICApA5AGfCIKIARUrXwiAyAgKQPYBSACIARWrXwiBCAgKQOQBXwiAnwiBSADVK18IAUgBSAgKQPgBXwiE1atfCIDICApA5gFIAIgBFStfCIFICApA8AEfCICfCIHICApA6AFfCIGICApA/AFfCIJIAZUrXwiBCAGIAdUrSAgKQOoBSADIAdWrXx8IgMgICkDyAQgAiAFVK18fCIGICApA9AEfCICfCIFIARUrXwgBSAFICApA7AFfCIYVq18IgQgAiAGVK0gICkD2AQgAyAGVq18fHwiBSAgKQPgBHwiAyAgKQPABXwiGSADVK18IgIgAyAFVK0gICkD6AQgBCAFVq18fHwiBCACVK18IAQgBCAgKQPwBHwiF1atfCICICApA4AFfCILIAJUrXwiAkI/iCAWIBogGiACQgGGIAtCP4iEfCIVVq18IBUgECAbIBsgF0IBhiAZQj+IhHwiB1atfCAHIBIgHCAYQgGGIAlCP4iEfCIFIBxUrXwgBSAFIBEgHSATQgGGIApCP4iEfCIDIB1UrXwgAyADIA8gHiAMQgGGICApA6AGIgJCP4iEfCIEIB5UrXwgBCAEIBQgAkIBhnwiDSAUVK18Ig5WrXwiAiAKQgGGIAxCP4iEfCIMIAJUrXwiClatfCICIAlCAYYgE0I/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IEGAAWogA0IAQr+llJzP8NK75ABCABDJAyAgQfAAaiADQgBC19mumuT26Y3LAEIAEMkDICBB4ABqIANCAEKazf/Lo73EgBpCABDJA0EAISQgICkDaCAgKQN4ICApA4gBICApA5gBICApA6gBICApA7gBICApA7ABIgMgDHwgA1StfCIDICApA6ABfCIKIANUrXwgCSAKfCIMIApUrXwiAyAgKQOQAXwiCSADVK18IAcgCXwiCiAJVK18IgMgICkDgAF8IgcgA1StfCAGIAd8IgkgB1StfCIDICApA3B8IgYgA1StfCAGIAUgBnwiBlatfCIDICApA2B8IgUgA1StfCAFIAt8IgcgBVStfCIDUEUEQCACIAN8IgIgA1QiJq0iBSAEfCIDIAQgJhshBCAmIAMgBVRxISQLICBB0ABqIAxC/f/z/8////mJf34iA0IAQqvV/v///7//uX9CABDJAyAgQUBrIANCAEL//8+K6///1R5CABDJAyAgQTBqIANCAEKk7MO1j9S0mOcAQgAQyQMgIEEgaiADQgBCv6WUnM/w0rvkAEIAEMkDICBBEGogA0IAQtfZrprk9umNywBCABDJAyAgIANCAEKazf/Lo73EgBpCABDJAyAgKQMIICApAxggICkDKCAgKQM4ICApA0ggICkDWCAgKQNQIgMgDHwgA1StfCIDICApA0B8IgUgA1StfCAFIAp8IgsgBVStfCIDICApAzB8IgUgA1StfCAFIAUgCXwiBVatfCIDICApAyB8IgkgA1StfCAGIAl8IgYgCVStfCIDICApAxB8IgkgA1StfCAHIAl8IgcgCVStfCIDICApAwB8IgkgA1StfCACIAl8IgIgCVStfCIKIAR8IgMgBCAKQgBSIigbIQkCQAJAAkAgAyAKVCImrSAKICgbUEUEQCACIQQMAQsgKiAwciAnciArciAkcgRAIAIhBAwBCyAmIChxBEAgAiEEDAELIAlCms3/y6O9xIAaVgRAIAIhBAwBCyAJQprN/8ujvcSAGlINASACQtfZrprk9umNywBWBEAgAiEEDAELIAJC19mumuT26Y3LAFINAULX2a6a5PbpjcsAIQQgB0K/pZScz/DSu+QAVg0AIAdCv6WUnM/w0rvkAFINASAGQqTsw7WP1LSY5wBWDQAgBkKk7MO1j9S0mOcAUg0BIAVC///Piuv/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ADcDACAtQcgLaiAtQcACaikDADcDACAtQdALaiAtQcgCaikDADcDACAtIC0pA6ACNwOoCyAtQeALaiAtQdgCaikDADcDACAtQegLaiAtQeACaikDADcDACAtQfALaiAtQegCaikDADcDACAtQfgLaiAtQfACaikDADcDACAtQYAMaiAtQfgCaikDADcDACAtIC0pA9ACNwPYCyAtQegJaiAtQYADahC0AiAtQegEaiAtQYgEaikDADcDACAtQeAEaiAtQYAEaikDADcDACAtQdgEaiAtQfgDaikDADcDACAtQdAEaiAtQfADaikDADcDACAtQcgEaiAtQegDaikDADcDACAtQfgEaiAtQZgEaikDADcDACAtQYAFaiAtQaAEaikDADcDACAtQYgFaiAtQagEaikDADcDACAtQZAFaiAtQbAEaikDADcDACAtQZgFaiAtQbgEaikDADcDACAtIC0pA+ADNwPABCAtIC0pA5AENwPwBCAlIC1BqAtqQeAA/AoAACAtQcgKaiAAQeAA/AoAACAmICUQrwIgLSgC4AZBAUYNAiAlIC1B6AZqQaAC/AoAACMAQcABayIkJAAgJCAtICVBwAFqIiYQPyAkQeAAaiIoIC1BwAFqIgAgJRA/An9BACAkIChBMBDxAw0AGkEAICRBMGogJEGQAWpBMBDxAw0AGiAkIC1B4ABqICYQPyAoICVB4ABqIAAQP0EAICQgKEEwEPEDDQAaICRBMGogJEGQAWpBMBDxA0ULICRBwAFqJAAgLUHwDGokAAwDC0GQjcUAQSsgLUHvDGpBgI3FAEHokMUAEMoDAAtBkI3FAEErIC1B7wxqQYCNxQBBsJLFABDKAwALQZCNxQBBKyAtQe8MakGAjcUAQdCSxQAQygMAC0UNAQJAIDVB4ABqQcCNxQBBMBDxA0UNACAqQbAMaiIAQQBB4AD8CwAgOUHAAWogAEEwEPEDRQRAIDlB8AFqIEdBMBDxA0UNAQsgKkHABGohVUIAIQJCACEOIwBB4ARrIiQkAAJAAkAgNUHgAGoiAEGoo8UAQTAQ8QMEQCAkQcADakIANwMAICRBuANqQgA3AwAgJEGwA2pCADcDACAkQagDakIANwMAICRCADcDoAMgJEIBNwPIA0EoISUgJEH4A2ogAEEoaikDADcDACAkQfADaiAAQSBqKQMANwMAICRB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C0L//8+K6///1R4hBiAUQqrV/v///7//uX9WDQELQprN/8ujvcSAGiENDAELIAJC///Piuv//9UefSILIBRCq9X+////v/+5f1StIgV9IQYgBEKk7MO1j9S0mOcAfSIHIAJC///Piuv//9UeVCAFIAtWcq0iAn0hCyADQr+llJzP8NK75AB9IgUgBEKk7MO1j9S0mOcAVCACIAdWcq0iAn0hCiAIQtfZrprk9umNywB9IgQgA0K/pZScz/DSu+QAVCACIAVWcq0iAn0hDiANIAhC19mumuT26Y3LAFQgAiAEVnKtfUKazf/Lo73EgBp9IQ0gFELVqoGAgIDAgMYAfCEUCwJ+IDlBkJTFAEEwEPEDBEBC///Piuv//9UeICMpA8AhIgd9IgggIykDyCEiD0Kr1f7///+//7l/Vq0iAn0hBUKk7MO1j9S0mOcAICMpA7ghIgN9IgQgAiAIViAHQv//z4rr///VHlZyrSICfSEHQr+llJzP8NK75AAgIykDsCEiDH0iCCACIARWIANCpOzDtY/UtJjnAFZyrSICfSEJQtfZrprk9umNywAgIykDqCEiA30iBCACIAhWIAxCv6WUnM/w0rvkAFZyrSICfSEMQqvV/v///7//uX8gD30hGEKazf/Lo73EgBogIykDoCEgAiAEViADQtfZrprk9umNywBWcq18fQwBCyAjKQOILCEYICMpA4AsIQUgIykD+CshByAjKQPwKyEJICMpA+grIQwgIykD4CsLIRJCACETQdgAIStCACECQgAhBEIAIQNCACEIQgAhDwNAICNBsAdqICsgVWopAwAiEUIAIBhCABDJAyAjQcAHaiARQgAgBUIAEMkDICNB0AdqIBFCACAHQgAQyQMgI0HgB2ogEUIAIAlCABDJAyAjQfAHaiARQgAgDEIAEMkDICNBgAhqIBFCACASQgAQyQMgI0GgB2ogIykDsAciESATfCIZQgBCAEL9//P/z///+Yl/EMkDICNBkAdqICMpA6gHIhBCAEKr1f7///+//7l/QgAQyQMgI0GAB2ogEEIAQv//z4rr///VHkIAEMkDICNB8AZqIBBCAEKk7MO1j9S0mOcAQgAQyQMgI0HgBmogEEIAQr+llJzP8NK75ABCABDJAyAjQdAGaiAQQgBC19mumuT26Y3LAEIAEMkDICNBwAZqIBBCAEKazf/L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IF4gAEHgAPwKAAAgI0G4K2ogI0GYHWopAwA3AwAgI0HAK2ogI0GgHWopAwA3AwAgI0HIK2ogI0GoHWopAwA3AwAgI0HQK2ogI0GwHWopAwA3AwAgI0HYK2ogI0G4HWopAwA3AwAgIiBkKQMANwMAICJBCGogZEEIaikDADcDACAiQRBqIGRBEGopAwA3AwAgIkEYaiBkQRhqKQMANwMAICJBIGogZEEgaikDADcDACAiQShqIGRBKGopAwA3AwAgIyAjKQOQHTcDsCsgLiAjQbArakHgAPwKAAAgKSAuELQCICAgKSA8ED8gI0G4GWogI0G4HGopAwA3AwAgI0HAGWogI0HAHGopAwA3AwAgI0HIGWogI0HIHGopAwA3AwAgI0HQGWogI0HQHGopAwA3AwAgI0HYGWogI0HYHGopAwA3AwAgPSBgKQMANwMAID1BCGogYEEIaikDADcDACA9QRBqIGBBEGopAwA3AwAgPUEYaiBgQRhqKQMANwMAID1BIGogYEEgaikDADcDACA9QShqIGBBKGopAwA3AwAgIyAjKQOwHDcDsBkgLiAvQeAA/AoAACApIC4gOBA/ICNBkCNqICAgKRDVAQJ+IDFBkJTFAEEwEPEDBEBC///Piuv//9UeICMpA9AcIgh9IgUgIykD2BwiCkKr1f7///+//7l/Vq0iAn0hBkKk7MO1j9S0mOcAICMpA8gcIgN9IgQgAiAFViAIQv//z4rr///VHlZyrSICfSEFQr+llJzP8NK75AAgIykDwBwiC30iCCACIARWIANCpOzDtY/UtJjnAFZyrSICfSEHQtfZrprk9umNywAgIykDuBwiA30iBCACIAhWIAtCv6WUnM/w0rvkAFZyrSICfSEJQqvV/v///7//uX8gCn0hC0Kazf/Lo73EgBogIykDsBwgAiAEViADQtfZrprk9umNywBWcq18fQwBCyAjKQP4KiELICMpA/AqIQYgIykD6CohBSAjKQPgKiEHICMpA9gqIQkgIykD0CoLIQ5CACEUQSghK0IAIQJCACEEQgAhA0IAIQhCACENA0AgI0HgBWogKyBVaikDACIKQgAgC0IAEMkDICNB8AVqIApCACAGQgAQyQMgI0GABmogCkIAIAVCABDJAyAjQZAGaiAKQgAgB0IAEMkDICNBoAZqIApCACAJQgAQyQMgI0GwBmog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AwA3AwAgI0GALWoiJiBYQRBqKQMANwMAICNB+CxqIgAgWEEIaikDADcDACAjICMpA7AQNwOgLSAjIFgpAwA3A/AsICsgI0HwLGoiKUHgAPwKAAAgI0HQFWogK0HgAPwKAAAgICAjQZgRaikDADcDACAwICNBoBFqKQMANwMAIDEgI0GoEWopAwA3AwAgMiAjQbARaikDADcDACAvICNBuBFqKQMANwMAICQgWUEoaikDADcDACAlIFlBIGopAwA3AwAgKCBZQRhqKQMANwMAICYgWUEQaikDADcDACAAIFlBCGopAwA3AwAgIyAjKQOQETcDoC0gIyBZKQMANwPwLCArIClB4AD8CgAAICNBsBZqICtB4AD8CgAAICNBkC9qIFMQtAIgI0HwL2ogTxC0AiAjQdAwaiBNELQCICkgLkGgAvwKAAAgQiApQcAE/AoAACAjQbAxaiQAIFYgQiAqEJ4CICogVkHABPwKAAALICdBCGoiJyBGRw0ACyBdQQhqIS0jAEGwO2siIiQAICJBkBJqICpBCGopAwA3AwAgIkGYEmogKkEQaikDADcDACAiQaASaiAqQRhqKQMANwMAICJBqBJqICpBIGopAwA3AwAgIkGwEmogKkEoaikDADcDACAiQcASaiAqQThqKQMANwMAICJByBJqICpBQGspAwA3AwAgIkHQEmogKkHIAGopAwA3AwAgIkHYEmogKkHQAGopAwA3AwAgIkHgEmogKkHYAGopAwA3AwAgIiAqKQMANwOIEiAiICopAzA3A7gSICJB0B9qIiAgIkGIEmoiLkHgAPwKAAAgIkGwG2oiMCAqQYgBaikDADcDACAiQagbaiIxICpBgAFqKQMANwMAICJBoBtqIjIgKkH4AGopAwA3AwAgIkGYG2oiLyAqQfAAaikDADcDACAiQZAbaiIkICpB6ABqKQMANwMAICJBwBtqIiUgKkGYAWopAwA3AwAgIkHIG2oiKCAqQaABaikDADcDACAiQdAbaiInICpBqAFqKQMANwMAICJB2BtqIiYgKkGwAWopAwA3AwAgIkHgG2oiACAqQbgBaikDADcDACAiICopA2A3A4gbICIgKikDkAE3A7gbIC4gIkGIG2oiKUHgAPwKAAAgIkGwIGogLkHgAPwKAAAgMCAqQegBaikDADcDACAxICpB4AFqKQMANwMAIDIgKkHYAWopAwA3AwAgLyAqQdABaikDADcDACAkICpByAFqKQMANwMAICUgKkH4AWopAwA3AwAgKCAqQYACaikDADcDACAnICpBiAJqKQMANwMAICYgKkGQAmopAwA3AwAgACAqQZgCaikDADcDACAiICopA8ABNwOIGyAiICopA/ABNwO4GyAuIClB4AD8CgAAICJBkCFqIC5B4AD8CgAAICJBqB1qICpBoAJqIiUQtAIgIkGIHmogKkGAA2oQtAIgIkHoHmogKkHgA2oQtAIgKSAgQaAC/AoAACAiQcgWaiIoIClBwAT8CgAAIwBB4A9rIjQkACA0QYAJaiInICoQcSA0QegEakHQnMUAKQMANwMAIDRB4ARqQcicxQApAwA3AwAgNEHYBGpBwJzFACkDADcDACA0QdAEakG4nMUAKQMANwMAIDRByARqQbCcxQApAwA3AwAgNEH4BGpCADcDACA0QYAFakIANwMAIDRBiAVqQgA3AwAgNEGQBWpCADcDACA0QZgFakIANwMAIDRBqJzFACkDADcDwAQgNEIANwPwBCA0QcANaiImQQBB4AD8CwAgNEGgDmogNEHABGoiMEHgAPwKAAAgNEGAD2pBAEHgAPwLACAwICUQcSA0QaALaiIAICYgMBC5AiA0QaACaiIuICcgABCNASA0QYADaiA0QeAJaiA0QYAMahCNASA0QeADaiA0QcAKaiA0QeAMahCNASMAQcAHayI2JAAgNhBtIDZBoAVqIiYgLkIDEM4BIDZB4AZqIjIgLkHgAGoiL0IDEM4BIDZBoAJqIjEQdSA2QYAGaiInIDIgMRA/IDZBwARqIgAgJiAnENUBIDIgLkHAAWoiJEIDEM4BICYQdSAxICZCAhDOASAnIDIgMRA/IDZBwAFqIiYgACAnENUBIDEgNiAuED8gMiAxIC8QPyAnIDIgJBA/IDEQdSAyICcgMRA/IDZB4ABqIgAgJiAyEI0BIDEgABA9IDYpA7ACIQQgNikDqAIhAiAwAn4gNigCoAJBAUYEQCAwIAQ3AxAgMCACNwMIQgEMAQsgNkHQAWogNkG4AmpB0AD8CgAAIDYgBDcDyAEgNiACNwPAASA2QaAFaiIxIC5CAhDOASA2QeAGaiIrIC8gJBA/IDZBoAJqIicQdSA2QYAGaiIyICsgJxA/ICsgMSAyEI0BICcgKyA2QcABaiImED8gKyAuELQCIDZBwARqIgAgKyAvED8gMiAkQgIQzgEgKxB1IDEgMiArED8gKyAAIDEQ1QEgNkGAA2ogKyAmED8gKyAuELQCIDIgKyAkED8gKyAvQgIQzgEgMSAyICsQ1QEgNkHgA2ogMSAmED8gMEEIaiAnQaAC/AoAAEIACzcDACA2QcAHaiQAIDQpA9AEIQQgNCkDyAQhAiApAn4gNCgCwARBAUYEQCApIAQ3AxAgKSACNwMIQgEMAQsgNEEQaiA0QdgEakGQAvwKAAAgNCAENwMIIDQgAjcDACA0QcAEaiInICogNBC5AiA0QYAJaiImICUQtAIgNEHgCWogKkGAA2oQtAIgNEHACmogKkHgA2oQtAIgNEGgC2oiACA0QaAC/AoAACA0QeAGaiAmIAAQuQIgKUEIaiAnQcAE/AoAAEIACzcDACA0QeAPaiQAICIpA5gbIQQgIikDkBshAgJAICIoAogbQQFHBEAgIkHgH2ogIkGgG2oiMUGwBPwKAAAgIiAENwPYHyAiIAI3A9AfICJBCGoiJyAoICAQngIgIkHQDWogIkEQaikDADcDACAiQdgNaiAiQRhqKQMANwMAICJB4A1qICJBIGopAwA3AwAgIkHoDWogIkEoaikDADcDACAiQfANaiAiQTBqKQMANwMAICIgIikDCDcDyA0gIkGADmogIkFAaykDADcDACAiQYgOaiAiQcgAaikDADcDACAiQZAOaiAiQdAAaikDADcDACAiQZgOaiAiQdgAaikDADcDACAiQaAOaiAiQeAAaikDADcDACAiICIpAzg3A/gNICJBsBtqIjJBoJrFACkDADcDACAiQagbaiIvQZiaxQApAwA3AwAgMUGQmsUAKQMANwMAICJBmBtqIiRBiJrFACkDADcDACAiQZAbaiIlQYCaxQApAwA3AwAgIkH4mcUAKQMANwOIGyAiQegSaiApICJB6ABqEHcgMkHQmsUAKQMANwMAIC9ByJrFACkDADcDACAxQcCaxQApAwA3AwAgJEG4msUAKQMANwMAICVBsJrFACkDADcDACAiQaiaxQApAwA3A4gbICJByBNqICkgIkHIAWoQdyAiQYgSaiImICJByA1qQeAA/AoAACAyQYCbxQApAwA3AwAgL0H4msUAKQMANwMAIDFB8JrFACkDADcDACAkQeiaxQApAwA3AwAgJUHgmsUAKQMANwMAICJB2JrFACkDADcDiBsgIkHIFmoiACAiQYgbaiIoICJBqAJqEHcgMkGwm8UAKQMANwMAIC9BqJvFACkDADcDACAxQaCbxQApAwA3AwAgJEGYm8UAKQMANwMAICVBkJvFACkDADcDACAiQYibxQApAwA3A4gbICJBqBdqICggIkGIA2oQdyAyQeCbxQApAwA3AwAgL0HYm8UAKQMANwMAIDFB0JvFACkDADcDACAkQcibxQApAwA3AwAgJUHAm8UAKQMANwMAICJBuJvFACkDADcDiBsgIkGIGGogKCAiQegDahB3ICggJkGgAvwKAAAgIkGoHWogAEGgAvwKAAAgIkHQH2oiJiAoQcAE/AoAACAiQcgEaiIAICYgJxCeAiAiQYgJaiAAEFcgMkHwocUAKQMANwMAIC9B6KHFACkDADcDACAxQeChxQApAwA3AwAgJEHYocUAKQMANwMAICVB0KHFACkDADcDACAiQcAbakIANwMAICJByBtqQgA3AwAgIkHQG2pCADcDACAiQdgbakIANwMAICJB4BtqQgA3AwAgIkHIocUAKQMANwOIGyAiQgA3A7gbICJBsCBqQQBBwAH8CwAgJiAoQeAA/AoAACAiQfAhakEAQaAC/AsAQUAhAANAICJBiBtqIicgIkHQH2oiJhBXICYgJ0HABPwKAAAgAEGsk8UAai0AAEEBRgRAICcgJiAiQcgEahCeAiAmICdBwAT8CgAACyAAQQFqIgANAAsgIkHIFmoiTCAiQdAfaiJIIgBBwAT8CgAAICJBkBJqICJB0BZqIispAwA3AwAgIkGYEmogIkHYFmoiKSkDADcDACAiQaASaiAiQeAWaiIuKQMANwMAICJBqBJqICJB6BZqIiApAwA3AwAgIkGwEmogIkHwFmoiMCkDADcDACAiQcASaiAiQYAXaiIxKQMANwMAICJByBJqICJBiBdqIjIpAwA3AwAgIkHQEmogIkGQF2oiLykDADcDACAiQdgSaiAiQZgXaiIkKQMANwMAICJB4BJqICJBoBdqIiUpAwA3AwAgIiAiKQPIFjcDiBIgIiAiKQP4FjcDuBIgACAiQYgSaiI8QeAA/AoAACAiQbAbaiJOICJB0BdqKQMANwMAICJBqBtqIlAgIkHIF2opAwA3AwAgIkGgG2oiPiAiQcAXaikDADcDACAiQZgbaiJAICJBuBdqKQMANwMAICJBkBtqIjcgIkGwF2opAwA3AwAgIkHAG2oiRiAiQeAXaikDADcDACAiQcgbaiJHICJB6BdqKQMANwMAICJB0BtqIjMgIkHwF2opAwA3AwAgIkHYG2oiNSAiQfgXaikDADcDACAiQeAbaiI5ICJBgBhqKQMANwMAICIgIikDqBc3A4gbICIgIikD2Bc3A7gbIDwgIkGIG2oiQkHgAPwKAAAgIkGwIGoiNCA8QeAA/AoAACBOICJBsBhqKQMANwMAIFAgIkGoGGopAwA3AwAgPiAiQaAYaikDADcDACBAICJBmBhqKQMANwMAIDcgIkGQGGopAwA3AwAgRiAiQcAYaikDADcDACBHICJByBhqKQMANwMAIDMgIkHQGGopAwA3AwAgNSAiQdgYaikDADcDACA5ICJB4BhqKQMANwMAICIgIikDiBg3A4gbICIgIikDuBg3A7gbIDwgQkHgAPwKAAAgIkGQIWoiKCA8QeAA/AoAACAiQagdaiInICJB6BhqELQCICJBiB5qIiYgIkHIGWoQtAIgIkHoHmoiACAiQagaahC0AiBCIEhBoAL8CgAAICJByA1qIjYgQkHABPwKAAAgKyAiQdAEaikDADcDACApICJB2ARqKQMANwMAIC4gIkHgBGopAwA3AwAgICAiQegEaikDADcDACAwICJB8ARqKQMANwMAICIgIikDyAQ3A8gWIDEgIkGABWopAwA3AwAgMiAiQYgFaikDADcDACAvICJBkAVqKQMANwMAICQgIkGYBWopAwA3AwAgJSAiQaAFaikDADcDACAiICIpA/gENwP4FiBIIExB4AD8CgAAIE4gIkHQBWopAwA3AwAgUCAiQcgFaikDADcDACA+ICJBwAVqKQMANwMAIEAgIkG4BWopAwA3AwAgNyAiQbAFaikDADcDACBGICJB4AVqKQMANwMAIEcgIkHoBWopAwA3AwAgMyAiQfAFaikDADcDACA1ICJB+AVqKQMANwMAIDkgIkGABmopAwA3AwAgIiAiKQOoBTcDiBsgIiAiKQPYBTcDuBsgTCBCQeAA/AoAACA0IExB4AD8CgAAIE4gIkGwBmopAwA3AwAgUCAiQagGaikDADcDACA+ICJBoAZqKQMANwMAIEAgIkGYBmopAwA3AwAgNyAiQZAGaikDADcDACBGICJBwAZqKQMANwMAIEcgIkHIBmopAwA3AwAgMyAiQdAGaikDADcDACA1ICJB2AZqKQMANwMAIDkgIkHgBmopAwA3AwAgIiAiKQOIBjcDiBsgIiAiKQO4BjcDuBsgTCBCQeAA/AoAACAoIExB4AD8CgAAICcgIkHoBmoQtAIgJiAiQcgHahC0AiAAICJBqAhqELQCIEIgSEGgAvwKAAAgPCBCQcAE/AoAACBIIDxBwAT8CgAAIEIgSCA2EJ4CIDYgQkHABPwKAAAgTkHwocUAKQMANwMAIFBB6KHFACkDADcDACA+QeChxQApAwA3AwAgQEHYocUAKQMANwMAIDdB0KHFACkDADcDACBGQgA3AwAgR0IANwMAIDNCADcDACA1QgA3AwAgOUIANwMAICJByKHFACkDADcDiBsgIkIANwO4GyA0QQBBwAH8CwAgSCBCQeAA/AoAACAiQfAhakEAQaAC/AsAQUAhAANAICJBiBtqIicgIkHQH2oiJhBXICYgJ0HABPwKAAAgAEGsk8UAai0AAEEBRgRAICcgJiAiQcgNahCeAiAmICdBwAT8CgAACyAAQQFqIgANAAsgIkHIFmoiPiAiQdAfaiJAIiBBwAT8CgAAICJB2DFqICJB0BZqIjApAwA3AwAgIkHgMWogIkHYFmoiMSkDADcDACAiQegxaiAiQeAWaiIyKQMANwMAICJB8DFqICJB6BZqIi8pAwA3AwAgIkH4MWogIkHwFmoiJCkDADcDACAiQYgyaiAiQYAXaiIlKQMANwMAICJBkDJqICJBiBdqIigpAwA3AwAgIkGYMmogIkGQF2oiJykDADcDACAiQaAyaiAiQZgXaiImKQMANwMAICJBqDJqICJBoBdqIgApAwA3AwAgIiAiKQPIFjcD0DEgIiAiKQP4FjcDgDIgICAiQdAxaiIgQeAA/AoAACAiQbAbaiI3ICJB0BdqKQMANwMAICJBqBtqIkYgIkHIF2opAwA3AwAgIkGgG2oiRyAiQcAXaikDADcDACAiQZgbaiIzICJBuBdqKQMANwMAICJBkBtqIjUgIkGwF2opAwA3AwAgIkHAG2oiOSAiQeAXaikDADcDACAiQcgbaiI0ICJB6BdqKQMANwMAICJB0BtqIjYgIkHwF2opAwA3AwAgIkHYG2oiKyAiQfgXaikDADcDACAiQeAbaiIpICJBgBhqKQMANwMAICIgIikDqBc3A4gbICIgIikD2Bc3A7gbICAgIkGIG2oiPEHgAPwKAAAgIkGwIGoiLiAgQeAA/AoAACA3ICJBsBhqKQMANwMAIEYgIkGoGGopAwA3AwAgRyAiQaAYaikDADcDACAzICJBmBhqKQMANwMAIDUgIkGQGGopAwA3AwAgOSAiQcAYaikDADcDACA0ICJByBhqKQMANwMAIDYgIkHQGGopAwA3AwAgKyAiQdgYaikDADcDACApICJB4BhqKQMANwMAICIgIikDiBg3A4gbICIgIikDuBg3A7gbICAgPEHgAPwKAAAgIkGQIWogIEHgAPwKAAAgIkGoHWogIkHoGGoQtAIgIkGIHmogIkHIGWoQtAIgIkHoHmogIkGoGmoQtAIgPCBAQaAC/AoAACAiQYgSaiIgIDxBwAT8CgAAIDAgIkHQDWopAwA3AwAgMSAiQdgNaikDADcDACAyICJB4A1qKQMANwMAIC8gIkHoDWopAwA3AwAgJCAiQfANaikDADcDACAlICJBgA5qKQMANwMAICggIkGIDmopAwA3AwAgJyAiQZAOaikDADcDACAmICJBmA5qKQMANwMAIAAgIkGgDmopAwA3AwAgIiAiKQPIDTcDyBYgIiAiKQP4DTcD+BYgPCA+QeAA/AoAACAiQfgfaiIwICJB0A5qKQMANwMAICJB8B9qIjEgIkHIDmopAwA3AwAgIkHoH2oiMiAiQcAOaikDADcDACAiQeAfaiIvICJBuA5qKQMANwMAICJB2B9qIiQgIkGwDmopAwA3AwAgIkGIIGoiJSAiQeAOaikDADcDACAiQZAgaiIoICJB6A5qKQMANwMAICJBmCBqIicgIkHwDmopAwA3AwAgIkGgIGoiJiAiQfgOaikDADcDACAiQaggaiIAICJBgA9qKQMANwMAICIgIikDqA43A9AfICIgIikD2A43A4AgID4gQEHgAPwKAAAgIkHoG2ogPkHgAPwKAAAgMCAiQbAPaikDADcDACAxICJBqA9qKQMANwMAIDIgIkGgD2opAwA3AwAgLyAiQZgPaikDADcDACAkICJBkA9qKQMANwMAICUgIkHAD2opAwA3AwAgKCAiQcgPaikDADcDACAnICJB0A9qKQMANwMAICYgIkHYD2opAwA3AwAgACAiQeAPaikDADcDACAiICIpA4gPNwPQHyAiICIpA7gPNwOAICA+IEBB4AD8CgAAICJByBxqID5B4AD8CgAAICJBsCZqICJB6A9qIkwQtAIgIkGQJ2ogIkHIEGoiThC0AiAiQfAnaiAiQagRaiJQELQCICJBkCRqIgAgPEGgAvwKAAAgIkHIDWoiJiAAQcAE/AoAACA8ICAgJhCeAiAmIDxBwAT8CgAAIDdB8KHFACkDADcDACBGQeihxQApAwA3AwAgR0HgocUAKQMANwMAIDNB2KHFACkDADcDACA1QdChxQApAwA3AwAgOUIANwMAIDRCADcDACA2QgA3AwAgK0IANwMAIClCADcDACAiQcihxQApAwA3A4gbICJCADcDuBsgLkEAQcAB/AsAIEAgPEHgAPwKAAAgIkHwIWpBAEGgAvwLAEFAIQADQCAiQYgbaiInICJB0B9qIiYQVyAmICdBwAT8CgAAIABBrJPFAGotAABBAUYEQCAnICYgIkHIDWoQngIgJiAnQcAE/AoAAAsgAEEBaiIADQALICJBiBtqIj4gIkHQH2oiQEHABPwKAAAgIkHYMWogIkGQG2oiNykDADcDACAiQeAxaiAiQZgbaiJGKQMANwMAICJB6DFqICJBoBtqIkcpAwA3AwAgIkHwMWogIkGoG2oiMykDADcDACAiQfgxaiAiQbAbaiI1KQMANwMAICJBiDJqICJBwBtqIjkpAwA3AwAgIkGQMmogIkHIG2oiNCkDADcDACAiQZgyaiAiQdAbaiI2KQMANwMAICJBoDJqICJB2BtqIispAwA3AwAgIkGoMmogIkHgG2oiKSkDADcDACAiICIpA4gbNwPQMSAiICIpA7gbNwOAMiBAICJB0DFqIjxB4AD8CgAAICJB8BZqIi4gIkGQHGopAwA3AwAgIkHoFmoiICAiQYgcaikDADcDACAiQeAWaiIwICJBgBxqKQMANwMAICJB2BZqIjEgIkH4G2opAwA3AwAgIkHQFmoiMiAiQfAbaikDADcDACAiQYAXaiIvICJBoBxqKQMANwMAICJBiBdqIiQgIkGoHGopAwA3AwAgIkGQF2oiJSAiQbAcaikDADcDACAiQZgXaiIoICJBuBxqKQMANwMAICJBoBdqIicgIkHAHGopAwA3AwAgIiAiKQPoGzcDyBYgIiAiKQOYHDcD+BYgPCAiQcgWaiIAQeAA/AoAACAiQbAgaiImIDxB4AD8CgAAIC4gIkHwHGopAwA3AwAgICAiQegcaikDADcDACAwICJB4BxqKQMANwMAIDEgIkHYHGopAwA3AwAgMiAiQdAcaikDADcDACAvICJBgB1qKQMANwMAICQgIkGIHWopAwA3AwAgJSAiQZAdaikDADcDACAoICJBmB1qKQMANwMAICcgIkGgHWopAwA3AwAgIiAiKQPIHDcDyBYgIiAiKQP4HDcD+BYgPCAAQeAA/AoAACAiQZAhaiA8QeAA/AoAACAiQfAqaiAiQagdahC0AiAiQdAraiAiQYgeahC0AiAiQbAsaiAiQegeahC0AiAiQdAoaiIAIEBBoAL8CgAAICJBiBJqIABBwAT8CgAAIwBBwAprIigkAAJ+ICJByA1qIiVBMGpBoIzFAEEwEPEDBEBC///Piuv//9UeICUpA1AiBn0iAyAlKQNYIglCq9X+////v/+5f1atIgR9IQJCpOzDtY/UtJjnACAlKQNIIgd9IgUgAyAEVCAGQv//z4rr///VHlZyrSIDfSEEQr+llJzP8NK75AAgJSkDQCIIfSIGIAMgBVYgB0Kk7MO1j9S0mOcAVnKtIgV9IQNC19mumuT26Y3LACAlKQM4Igt9IgcgBSAGViAIQr+llJzP8NK75ABWcq0iCH0hBUKr1f7///+//7l/IAl9IQZCms3/y6O9xIAaICUpAzAgByAIVCALQtfZrprk9umNywBWcq18fQwBCyAlKQNYIQYgJSkDUCECICUpA0ghBCAlKQNAIQMgJSkDOCEFICUpAzALIQggJUHgAGohACAoQShqICVBKGopAwA3AwAgKEEgaiAlQSBqKQMANwMAIChBGGogJUEYaikDADcDACAoQRBqICVBEGopAwA3AwAgKEEIaiAlQQhqKQMANwMAICggBjcDWCAoIAI3A1AgKCAENwNIICggAzcDQCAoIAU3AzggKCAINwMwICggJSkDADcDAAJ+ICVBkAFqQaCMxQBBMBDxAwRAQv//z4rr///VHiAlKQOwASIGfSIDICUpA7gBIglCq9X+////v/+5f1atIgR9IQJCpOzDtY/UtJjnACAlKQOoASIHfSIFIAMgBFQgBkL//8+K6///1R5Wcq0iA30hBEK/pZScz/DSu+QAICUpA6ABIgh9IgYgAyAFViAHQqTsw7WP1LSY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/AoAACAAQayTxQBqLQAAQQFGBEAgJyAmICJByA1qEJ4CICYgJ0HABPwKAAALIABBAWoiAA0ACyAiQcgWaiAiQdAfaiIuQcAE/AoAACAiQdgxaiAiQdAWaikDADcDACAiQeAxaiAiQdgWaikDADcDACAiQegxaiAiQeAWaikDADcDACAiQfAxaiAiQegWaikDADcDACAiQfgxaiAiQfAWaikDADcDACAiQYgyaiAiQYAXaikDADcDACAiQZAyaiAiQYgXaikDADcDACAiQZgyaiAiQZAXaikDADcDACAiQaAyaiAiQZgXaikDADcDACAiQagyaiAiQaAXaikDADcDACAiICIpA8gWNwPQMSAiICIpA/gWNwOAMiAuICJB0DFqIitB4AD8CgAAICJBsBtqIiAgIkHQF2opAwA3AwAgIkGoG2oiMCAiQcgXaikDADcDACAiQaAbaiIxICJBwBdqKQMANwMAICJBmBtqIjIgIkG4F2opAwA3AwAgIkGQG2oiLyAiQbAXaikDADcDACAiQcAbaiIkICJB4BdqKQMANwMAICJByBtqIiUgIkHoF2opAwA3AwAgIkHQG2oiKCAiQfAXaikDADcDACAiQdgbaiInICJB+BdqKQMANwMAICJB4BtqIiYgIkGAGGopAwA3AwAgIiAiKQOoFzcDiBsgIiAiKQPYFzcDuBsgKyAiQYgbaiIpQeAA/AoAACAiQbAgaiIAICtB4AD8CgAAICAgIkGwGGopAwA3AwAgMCAiQagYaikDADcDACAxICJBoBhqKQMANwMAIDIgIkGYGGopAwA3AwAgLyAiQZAYaikDADcDACAkICJBwBhqKQMANwMAICUgIkHIGGopAwA3AwAgKCAiQdAYaikDADcDACAnICJB2BhqKQMANwMAICYgIkHgGGopAwA3AwAgIiAiKQOIGDcDiBsgIiAiKQO4GDcDuBsgKyApQeAA/AoAACAiQZAhaiArQeAA/AoAACAiQagdaiAiQegYahC0AiAiQYgeaiAiQcgZahC0AiAiQegeaiAiQagaahC0AiApIC5BoAL8CgAAICJBiAlqIClBwAT8CgAAICBB8KHFACkDADcDACAwQeihxQApAwA3AwAgMUHgocUAKQMANwMAIDJB2KHFACkDADcDACAvQdChxQApAwA3AwAgJEIANwMAICVCADcDACAoQgA3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FyE2ICEtAJ8XISsgIS0AnhchKSAhLQCdFyEuICEtAJwXISAgIS0AmxchMCAhLQCaFyExICEtAJkXITIgIS0AmBchLyAhLQCXFyEkICEtAJYXISUgIS0AlRchKCAhLQCUFyEqICEtAJMXIScgIS0AkhchJiAhLQCRFyEAICEgIS0AkBdBAXY6APcbICEgADoA9hsgISAmOgD1GyAhICc6APQbICEgKjoA8xsgISAoOgDyGyAhICU6APEbICEgJDoA8BsgISAvOgDvGyAhIDI6AO4bICEgMToA7RsgISAwOgDsGyAhICA6AOsbICEgLjoA6hsgISApOgDpGyAhICs6AOgbICEgNjoA5xsgISA0OgDmGyAhIDk6AOUbICEgNToA5BsgISAzOgDjGyAhIEc6AOIbICEgRjoA4RsgISA3OgDgGyAhIC06AN8bICEgQDoA3hsgISA+OgDdGyAhIFA6ANwbICEgTjoA2xsgISBMOgDaGyAhIDw6ANkbICEgSDoA2BsgIUGgIGogIUHYG2pBIEEIEM8CAkACQAJ/AkACQCAhKAL4FCIARQ0AAkAgAEEBayIAQf7///8DcUUEQCAhKAL0FCEnIABB/////wNxIiZBAWoiAEEDcSErQgAhAiAmQQNPBEAgAEH8////B3EhAANAIAJCgAF8IQIgJ0EQaiEnIABBBGsiAA0ACwsgKwRAQgAhCANAICc1AgAgAoYgCHwhCCACQiB8IQIgJ0EEaiEnICtBAWsiKw0ACwsgCEKAgICAEFQNAQsgIUGoBWogIUGgIGogIUHwFGoQoQEgISgCvAUhACAhKAK4BSEqICEoArQFIScgISgCqAUiJkUNBSAhKAKsBSAmQQJ0EN8EDAULIAhQDQAgISgCqCAhKCAhKAKkICEnAkACQCAIQoCABFoEQCAoRQ0CIChB/////wNqISYgKEECdCEAIChB/////wNxQQFHDQFCACEEIAAgJ2oMBQsgKEUNASAIpyEqICdBBGshJiAoQQJ0ISdBACErA0AgK0EQdCAmICdqKAIAIgBBEHZyICpwQRB0IABB//8DcXIgKnAhKyAnQQRrIicNAAsMBQsgACAnakEIayEnICZB/////wNxQQFqQf7///8HcSErQgAhAgNAICc1AgAgJ0EEajUCACACQiCGhCAIgkIghoQgCIIhAiAnQQhrIScgK0EC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AwA3AwAgIUGwHGogIUHICmopAwA3AwAgISAhKQPwCTcD2BsgISAhKQOgCjcDiBwgIUHII2ogKEEoaikDADcDACAhQcAjaiAoQSBqKQMANwMAICFBuCNqIChBGGopAwA3AwAgIUGwI2ogKEEQaikDADcDACAhQagjaiAoQQhqKQMANwMAICFB+CNqICFBqAtqKQMANwMAICFB8CNqICFBoAtqKQMANwMAICFB6CNqICFBmAtqKQMANwMAICFB4CNqICFBkAtqKQMANwMAICFB2CNqICFBiAtqKQMANwMAICEgKCkDADcDoCMgISAhKQOACzcD0CMgIUHYKWogIUHYG2pB4AD8CgAAICFBuCpqICFBoCNqQeAA/AoAAAwDCyAhQdgbakEAQeAA/AsAICFByCNqQgA3AwAgIUHAI2pCADcDACAhQbgjakIANwMAICFBsCNqQgA3AwAgIUGoI2pCADcDACAhQdgjaiAhQZAcaikDADcDACAhQeAjaiAhQZgcaikDADcDACAhQegjaiAhQaAcaikDADcDACAhQfAjaiAhQagcaikDADcDACAhQfgjaiAhQbAcaikDADcDACAhQgA3A6AjICEgISkDiBw3A9AjICFBuCpqQQBB4AD8CwAgIUHYKWogIUGgI2pB4AD8CgAADAILICFBkBdqICFBqCNqQaAC/AoAACAhQaAjaiElIwBBIGsiJCQAAkACQCAhQcgpaiIAKAIIRQRAQdHOxQAtAAAaQQFBARDWBCIADQEMEwsgJEEIaiAAQRAQQAJAICQoAhAiKEUNACAkKAIMIiYhACAoQQNxIikEQANAIAAgAC0AACInQTByICdB1wBqICdBCkkbOgAAIABBAWohACApQQFrIikNAAsLIChBBEkNACAmIChqIScDQCAAIAAtAAAiJkEwciAmQdcAaiAmQQpJGzoAACAAQQFqIiYgJi0AACImQTByICZB1wBqICZBCkkbOgAAIABBAmoiJiAmLQAAIiZBMHIgJkHXAGogJkEKSRs6AAAgAEEDaiImICYtAAAiJkEwciAmQdcAaiAmQQpJGzoAACAAQQRqIgAgJ0cNAAsLICUgJCkCCDcCACAlQQhqICRBEGooAgA2AgAMAQsgJUEBNgIIICUgADYCBCAlQQE2AgAgAEEwOgAACyAkQSBqJAAgISgCpCMhMgJAICEoAqgj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hcEAQdSGwQAQygMACyAhQagFakEAQeAA/AsAICFByCNqQgA3AwAgIUHAI2pCADcDACAhQbgjakIANwMAICFBsCNqQgA3AwAgIUGoI2pCADcDACAhQdgjaiAhQeAFaikDADcDACAhQeAjaiAhQegFaikDADcDACAhQegjaiAhQfAFaikDADcDACAhQfAjaiAhQfgFaikDADcDACAhQfgjaiAhQYAGaikDADcDACAhQgA3A6AjICEgISkD2AU3A9AjICFBuCpqQQBB4AD8CwAgIUHYKWogIUGgI2pB4AD8CgAADAELICFB2ClqICFBqCNqQcAB/AoAAAsgISgCyCkiAARAICEoAswpIABBAnQQ3wQLICpFDQIgOSAqQQJ0EN8EDAILIAAgKkH4gcAAEMgEAAsgKkUNACA5ICpBAnQQ3wQLICFB0A5qITIgIUHoAGohJSMAQaAhayIgJAACQCAhQcAOaiInKAIIIiZFBEAgIEGADmpB4LTCACkDADcDACAgQfgNakHYtMIAKQMANwMAICBB8A1qQdC0wgApAwA3AwAgIEHoDWpByLTCACkDADcDACAgQeANakHAtMIAKQMANwMAICBBkA5qQgA3AwAgIEGYDmpCADcDACAgQaAOakIANwMAICBBqA5qQgA3AwAgIEGwDmpCADcDACAgQgA3A4gOICBBuLTCACkDADcD2A0gMkHgAGpBAEHAAfwLACAyICBB2A1qQeAA/AoAACAyQaACakEAQaAC/AsADAELICcoAgQhACAgQeANakGQksIAKAIANgIAICBBiJLCACkCADcD2A0gIEHYDWpBjJPCABClAyAgKALcDUEBNgIAICAoAtwNISogICgC2A0hKAJAICZBAUcNACAAKAAAICooAABHDQAgKARAICogKEECdBDfBAsgICAlNgLAICAgICVBoAJqIiY2AsQgICBBmAlqIiQiACAgQcAgaiIoEJADICBByARqIjEgAEHgAPwKAAAgIEEIaiIvIDFB4AD8CgAAICBB2A1qIiogL0HgAPwKAAAgIEGgHmoiJyAqQeAA/AoAACAkICgQkAMgMSAkQeAA/AoAACAvIDFB4AD8CgAAICogL0HgAPwKAAAgIEGAH2ogKkHgAPwKAAAgJCAoEJADIDEgJEHgAPwKAAAgLyAxQeAA/AoAACAqIC9B4AD8CgAAICBB4B9qICpB4AD8CgAAICBB2BZqIgAgJ0GgAvwKAAAgICAlQcAEajYCxB0gICAmNgLAHSAxICBBwB1qIiYQkAMgLyAxQeAA/AoAACAoIC9B4AD8CgAAICQgKEHgAPwKAAAgKiAkQeAA/AoAACAxICYQkAMgLyAxQeAA/AoAACAoIC9B4AD8CgAAICQgKEHgAPwKAAAgIEG4DmogJEHgAPwKAAAgMSAmEJADIC8gMUHgAPwKAAAgKCAvQeAA/AoAACAkIChB4AD8CgAAICBBmA9qICRB4AD8CgAAICcgKkGgAvwKAAAgIEH4GGogJ0GgAvwKAAAgMiAAQcAE/AoAAAwBCyAoBEAgKiAoQQJ0EN8ECyAgQYAOakHgtMIAKQMANwMAICBB+A1qQdi0wgApAwA3AwAgIEHwDWpB0LTCACkDADcDACAgQegNakHItMIAKQMANwMAICBB4A1qQcC0wgApAwA3AwAgIEGQDmpCADcDACAgQZgOakIANwMAICBBoA5qQgA3AwAgIEGoDmpCADcDACAgQbAOakIANwMAICBBuLTCACkDADcD2A0gIEIANwOIDiAgQegAakEAQcAB/AsAICBBCGogIEHYDWoiJEHgAPwKAAAgIEGoAmpBAEGgAvwLACAgICU2AsAdICAgJUGgAmoiJjYCxB0gIEGYCWoiMSAgQcAdaiIoEJADICBByARqIjAgMUHgAPwKAAAgIEHAIGoiLyAwQeAA/AoAACAkIC9B4AD8CgAAICBBmBtqIiogJEHgAPwKAAAgMSAoEJADIDAgMUHgAPwKAAAgLyAwQeAA/AoAACAkIC9B4AD8CgAAICBB+BtqICRB4AD8CgAAIDEgKBCQAyAwIDFB4AD8CgAAIC8gMEHgAPwKAAAgJCAvQeAA/AoAACAgQdgcaiAkQeAA/AoAACAgQZgSaiIAICpBoAL8CgAAICAgJUHABGo2ArwdICAgJjYCuB0gMCAgQbgdaiImEJADIC8gMEHgAPwKAAAgKCAvQeAA/AoAACAxIChB4AD8CgAAICQgMUHgAPwKAAAgMCAmEJADIC8gMEHgAPwKAAAgKCAvQeAA/AoAACAxIChB4AD8CgAAICBBuA5qIDFB4AD8CgAAIDAgJhCQAyAvIDBB4AD8CgAAICggL0HgAPwKAAAgMSAoQeAA/AoAACAgQZgPaiAxQeAA/AoAACAqICRBoAL8CgAAICBBuBRqICpBoAL8CgAAIDAgAEHABPwKAAAgIEGMCWogJ0EIELACICAoApAJISYCQCAgKAKUCSIrQQJJDQAgJiAraiEvQQAhACArQQF2IidBAUcEQCArQQFrISogJ0H+////B3EhJQNAICYgKmoiKC0AACEnICggACAmaiIkLQAAOgAAICQgJzoAACAvIABBfnNqIictAAAhKCAnICRBAWoiJy0AADoAACAnICg6AAAgKkECayEqICUgAEECaiIARw0ACwsgK0ECcUUNACAAICZqIiotAAAhJyAqIC8gAEF/c2oiAC0AADoAACAAICc6AAALICAoAowJIScgKwRAICYhAANAIAAsAAAhJCAgQdgNaiIlICBBCGoiKBCNAiAgQZgJaiIqICVBwAT8CgAAICggKkHABPwKAAAgJEEASARAICUgKCAgQcgEahCbAiAqICVBwAT8CgAAICggKkHABPwKAAALICBB2A1qIiUgIEEIaiIoEI0CICBBmAlqIiogJUHABPwKAAAgKCAqQcAE/AoAACAkQcAAcQRAICUgKCAgQcgEahCbAiAqICVBwAT8CgAAICggKkHABPwKAAALICBB2A1qIiUgIEEIaiIoEI0CICBBmAlqIiogJUHABPwKAAAgKCAqQcAE/AoAACAkQSBxBEAgJSAoICBByARqEJsCICogJUHABPwKAAAgKCAqQcAE/AoAAAsgIEHYDWoiJSAgQQhqIigQjQIgIEGYCWoiKiAlQcAE/AoAACAoICpBwAT8CgAAICRBEHEEQCAlICggIEHIBGoQmwIgKiAlQcAE/AoAACAoICpBwAT8CgAACyAgQdgNaiIlICBBCGoiKBCNAiAgQZgJaiIqICVBwAT8CgAAICggKkHABPwKAAAgJEEIcQRAICUgKCAgQcgEahCbAiAqICVBwAT8CgAAICggKkHABPwKAAALICBB2A1qIiUgIEEIaiIoEI0CICBBmAlqIiogJUHABPwKAAAgKCAqQcAE/AoAACAkQQRxBEAgJSAoICBByARqEJsCICogJUHABPwKAAAgKCAqQcAE/AoAAAsgIEHYDWoiJSAgQQhqIigQjQIgIEGYCWoiKiAlQcAE/AoAACAoICpBwAT8CgAAICRBAnEEQCAlICggIEHIBGoQmwIgKiAlQcAE/AoAACAoICpBwAT8CgAACyAgQdgNaiIlICBBCGoiKBCNAiAgQZgJaiIqICVBwAT8CgAAICggKkHABPwKAAAgJEEBcQRAICUgKCAgQcgEahCbAiAqICVBwAT8CgAAICggKkHABPwKAAALIABBAWohACArQQFrIisNAAsLICcEQCAmICcQ3wQLIDIgIEEIakHABPwKAAALICBBoCFqJABBACEnICFBADYCsAUgIUKAgICAEDcCqAUgIUHYG2oiJiAyELUDICEoAtwcIQAgISAhKALYGzYC3BwgISAANgLYGyAhKQLcGyECICEgISkC4Bw3AtwbICEgAjcC4BwgISkC5BshAiAhICEpAtAcNwLkGyAhIAI3AtAcICEoAtgcIQAgISAhKALsGzYC2BwgISAANgLsGyAhKALEHCEAICEgISgC8Bs2AsQcICEgADYC8BsgISgCyBwhACAhICEoAvQbNgLIHCAhIAA2AvQbICEoAswcIQAgISAhKAL4GzYCzBwgISAANgL4GyAhKAK4HCEAICEgISgC/Bs2ArgcICEgADYC/BsgISgCvBwhACAhICEoAoAcNgK8HCAhIAA2AoAcICEoAsAcIQAgISAhKAKEHDYCwBwgISAANgKEHCAhKAKsHCEAICEgISgCiBw2AqwcICEgADYCiBwgISgCsBwhACAhICEoAowcNgKwHCAhIAA2AowcICEoArQcIQAgISAhKAKQHDYCtBwgISAANgKQHCAhKAKgHCEAICEgISgClBw2AqAcICEgADYClBwgISgCpBwhACAhICEoApgcNgKkHCAhIAA2ApgcICEoAqgcIQAgISAhKAKcHDYCqBwgISAANgKcHCAhQaAjaiAmQZAB/AoAACAhQoCAgIDAATcCsCQgIUGwI2ohOUELISkgIUGYE2ohLiAhQagTaiEgICFBsBNqITAgIUG4E2ohMQNAAkAgJ0EBaiEAAkAgIUGgI2ogJ0EMbGoiJygCACImQYCAgIB4RwRAIC5CADcDACAhQaATaiIkQgA3AwAgIEIANwMAIDBCADcDACAxQgA3AwAgIUIANwOQEyAhICcpAgQiAjcC9AkgISAmNgLwCSACQv////8PWARAQdHOxQAtAAAaQQFBARDWBCI9RQ0SID1BADoAAEEBISogIUEBNgKQFwwCCyAhQZAXaiAhQfAJakEIELACICEoApQXIT0gISgCmBciKkECSQ0BICogPWohMkEAIScgKkEBdiImQQFHBEAgKkEBayErICZB/v///wdxISUDQCArID1qIigtAAAhJiAoICcgPWoiLy0AADoAACAvICY6AAAgMiAnQX5zaiImLQAAISggJiAvQQFqIiYtAAA6AAAgJiAoOgAAICtBAmshKyAlICdBAmoiJ0cNAAsLICpBAnEEQCAnID1qIiYtAAAhKCAmIDIgJ0F/c2oiJi0AADoAACAmICg6AAALICpBMUkNAUH0isEAQRtBkIvBABD+AwALICEgADYCsCQgAEEMRg0BA0AgOUEEaygCACIABEAgOSgCACAAQQJ0EN8ECyA5QQxqITkgKUEBayIpDQALDAELICoEQCAhICprQcATaiA9ICr8CgAACyAhKAKoBSAhKAKwBSIra0EvTQRAICFBqAVqICtBMEEBQQEQiAMgISgCsAUhKwsgISgCrAUgK2oiJiAhKQOQEzcAACAmQQhqIC4pAwA3AAAgJkEQaiAkKQMANwAAICZBGGogICkDADcAACAmQSBqIDApAwA3AAAgJkEoaiAxKQMANwAAICEgK0EwajYCsAUgISgCkBciJgRAID0gJhDfBAsgISgC8AkiJgRAICEoAvQJICZBAnQQ3wQLIDlBDGohOSApQQFrISkgACInQQxHDQELCyAhKAKoBSElICEoAqwFISggISgCsAUhJCAhQQA2AuAbICFCgICAgBA3AtgbICFB2BtqIipBAEEGQQFBARCIAyAhKALcGyIAICEoAuAbIidqIiZB3InBACgAADYAACAmQQRqQeCJwQAvAAA7AAAgISAnQQZqIis2AuAbICEoAtgbICtrICRJBEAgKiArICRBAUEBEIgDICEoAuAbISsgISgC3BshAAsgJARAIAAgK2ogKCAk/AoAAAsgJQRAICggJRDfBAsgIUGgI2ogACAkICtqEN0BQdHOxQAtAAAaQRBBARDWBCImRQ0BICYgISkAoCM3AAAgJkEIaiAhQagjaikAADcAACAhICEvAKAjOwHEEyAhICFBoiNqLQAAOgDGEyAmKAADIS8gJigAByEkICYoAAshJSAmLQAPISggJkEQEN8EICEoAtgbIiYEQCAAICYQ3wQLQRAgISgC3BMiJiAhKALYEyIxayIwIDBBEE8bIQBBASEqICYgMUcEQEHRzsUALQAAGiAAQQEQ1gQiKkUNAwsgIUG6I2ogIS0AxhM6AAAgIUGoI2ogIUHQE2opAwA3AwAgISAhKQPIEzcDoCMgISAhLwHEEzsBuCNBACEnICFBADYC2CMgIUIANwPQIyAhICg6AMcjICEgJTYAwyMgISAkNgC/IyAhIC82ALsjICFCgICAgIACNwPIIyAhIDE2ArAjICEgJjYCtCMgJiAxRg0FICFBoCNqIDFqIS8gMEEBRwRAIABBHnEhJANAICcgKmoiJSAhQaAjaiAnaiIoQRhqLQAAICcgL2oiJi0AAHM6AAAgJUEBaiAoQRlqLQAAICZBAWotAABzOgAAICQgJ0ECaiInRw0ACwsgAEEBcQRAICcgKmogIUG4I2ogJ2otAAAgJyAvai0AAHM6AAALIAAhJyAwQQ9NDQUgIUHCE2ogKkECai0AADoAACAhICovAAA7AcATICooAAMhMiAqKAAHIS8gKigACyEkICotAA8hJSAqQRAQ3wQgIUEANgLgGyAhQoCAgIAQNwLYGyAhQdgbaiIoQQBBBkEBQQEQiAMgISgC3BsiKiAhKALgGyImaiIAQcyKwQAoAAA2AAAgAEEEakHQisEALwAAOwAAICEgJkEGaiInNgLgGyAhKALYGyAnayAwSQRAICggJyAwQQFBARCIAyAhKALcGyEqICEoAuAbIScLIDAEQCAnICpqICFByBNqIDFqIDD8CgAACyAhQaAjaiAqICcgMGoQ3QFB0c7FAC0AABpBEEEBENYEIgBFDQMgACAhKQCgIyICNwAAIABBCGogIUGoI2opAAA3AAAgAC0AASEoIAAtAAIhJiAAKAADISAgACgAByEwIAAoAAshMSAALQAPIScgAEEQEN8EICEoAtgbIgAEQCAqIAAQ3wQLQdHOxQAtAAAaQRBBARDWBCIqRQ0EICogKCBdczoAASAqIAKnIEJzOgAAICogMCBWczoAByAqICAgXHM6AAMgKiBNIDBBGHZzOgAKICogTyAwQRB2czoACSAqIFMgMEEIdnM6AAggKiBXICBBGHZzOgAGICogWiAgQRB2czoABSAqIFsgIEEIdnM6AAQgKiAxIEtzOgALICogPyAxQRh2czoADiAqIEkgMUEQdnM6AA0gKiBKIDFBCHZzOgAMICpBAmogJiBocyIAOgAAIEVB2gFqIAA6AAAgRSAqLwAAOwDYASAqKQADIQIgKigACyEmICpBEBDfBCAhQaAjaiIAICFB2ClqQcAB/AoAACAhQeIkaiAhQcITai0AADoAACAhICEvAcATOwHgJCBFQQhqIABBwwH8CgAAIEUgIiAnczoA5wEgRSAmNgDjASBFIAI3ANsBIEUgJToA1wEgRSAkNgDTASBFIC82AM8BIEUgMjYAywEgRUEANgIAICEoAsAOIgBFDQAgISgCxA4gAEECdBDfBAsgIUGwLGokAAwFC0EBQRBBrIPBABDIBAALQQEgAEG8isEAEMgEAAtBAUEQQayDwQAQyAQAC0EBQRBBvIrBABDIBAALICEgJzYCqCMgISAqNgKkIyAhIAA2AqAjQdT+wABBKyAhQaAjakHUisEAQeSKwQAQygMACyAsKAKoAgRAICxB8AdqICxBtAJqKAIAIgA2AgAgLCAsKQKsAiICNwPoByBBQQxqIAA2AgAgQSACNwIEIEFBATYCACBnRQ0BIGkgZxDfBAwBCyAsQewHaiIAICxBsAJqQeAB/AoAACAsQYgGaiIgIABB4AH8CgAAICxBzAlqITIjAEHQBGsiKSQAIClBuAJqICBBCGopAwA3AwAgKUHAAmogIEEQaikDADcDACApQcgCaiAgQRhqKQMANwMAIClB0AJqICBBIGopAwA3AwAgKUHYAmogIEEoaikDADcDACApQegCaiAgQThqKQMANwMAIClB8AJqICBBQGspAwA3AwAgKUH4AmogIEHIAGopAwA3AwAgKUGAA2ogIEHQAGopAwA3AwAgKUGIA2ogIEHYAGopAwA3AwAgKSAgKQMANwOwAiApICApAzA3A+ACIClB6ABqIiogKUGwAmoQ9wMgKSgCbCEuICkoAmghJwJAICkoAnAiMEECRgRAAkAgLigCBCEmIC4oAgAhACAqIC5BCGpB2AD8CgAAICcEQCAuICdBMGwQ3wQLIClBGGogKUHwAGopAwA3AwAgKUEgaiApQfgAaikDADcDACApQShqIClBgAFqKQMANwMAIClBMGogKUGIAWopAwA3AwAgKUFAayApQZgBaikDADcDACApQcgAaiApQaABaikDADcDACApQdAAaiApQagBaikDADcDACApQdgAaiApQbABaikDADcDACApQeAAaiApQbgBaikDADcDACApICY2AgwgKSAANgIIICkgKSkDaDcDECApICkpA5ABNwM4IClBmANqICBB4ABqIgBBCGopAwA3AwAgKUGgA2ogAEEQaikDADcDACApQagDaiAAQRhqKQMANwMAIClBsANqIABBIGopAwA3AwAgKUG4A2ogAEEoaikDADcDACApQcgDaiAgQZgBaikDADcDACApQdADaiAgQaABaikDADcDACApQdgDaiAgQagBaikDADcDACApQeADaiAgQbABaikDADcDACApQegDaiAgQbgBaikDADcDACApIAApAwA3A5ADICkgICkDkAE3A8ADIClB6ABqIClBkANqEPcDICkoAmwhLiApKAJoIScgKSgCcCIwQQJHDQAgLigCBCEmIC4oAgAhACApQfADaiAuQQhqQdgA/AoAACAnBEAgLiAnQTBsEN8ECyApQfgAaiApQfgDaikDADcDACApQYABaiApQYAEaikDADcDACApQYgBaiApQYgEaikDADcDACApQZABaiApQZAEaikDADcDACApQaABaiApQaAEaikDADcDACApQagBaiApQagEaikDADcDACApQbABaiApQbAEaikDADcDACApQbgBaiApQbgEaikDADcDACApQcABaiApQcAEaikDADcDACApICY2AmwgKSAANgJoICkgKSkD8AM3A3AgKSApKQOYBDcDmAEgKUEANgLUASApQoCAgIDAADcCzAEgKUHwA2oiMSApQQhqEN8BIClB+AFqIi8gMRDUASApQcwBaiIkQQBBBEEEQQwQiAMgKSgCzAEhMCApKALQASIuICkoAtQBIidBDGxqIgAgKSkC+AE3AgAgAEEIaiApQYACaiIlKQIANwIAIABBEGogKUGIAmoiKCkCADcCACAAQRhqIClBkAJqIiopAgA3AgAgAEEgaiApQZgCaiImKQIANwIAIABBKGogKUGgAmoiACkCADcCACApICdBBGoiJzYC1AEgMSApQThqEN8BIC8gMRDUASAwICdrQQNNBEAgJCAnQQRBBEEMEIgDICkoAswBITAgKSgC0AEhLiApKALUASEnCyAuICdBDGxqIiQgKSkC+AE3AgAgJEEoaiAAKQIANwIAICRBIGogJikCADcCACAkQRhqICopAgA3AgAgJEEQaiAoKQIANwIAICRBCGogJSkCADcCACApICdBBGoiJzYC1AEgKUHwA2oiACApQegAahDfASApQfgBaiAAENQBIDAgJ2tBA00EQCApQcwBaiAnQQRBBEEMEIgDICkoAswBITAgKSgC0AEhLiApKALUASEnCyAuICdBDGxqIgAgKSkC+AE3AgAgAEEoaiApQaACaiIlKQIANwIAIABBIGogKUGYAmoiKCkCADcCACAAQRhqIClBkAJqIiopAgA3AgAgAEEQaiApQYgCaiImKQIANwIAIABBCGogKUGAAmoiJCkCADcCACApICdBBGoiJzYC1AEgKUHwA2oiACApQZgBahDfASApQfgBaiAAENQBIDAgJ2tBA00EQCApQcwBaiAnQQRBBEEMEIgDICkoAtABIS4gKSgC1AEhJwsgLiAnQQxsaiIAICkpAvgBNwIAIABBKGogJSkCADcCACAAQSBqICgpAgA3AgAgAEEYaiAqKQIANwIAIABBEGogJikCADcCACAAQQhqICQpAgA3AgAgKSAnQQRqIic2AtQBIClB+ANqICBBwAFqIgBBCGopAgA3AwAgKUKAgICAgAI3A4AEICkgACkCADcD8ANBACEuQaz8wAAoAgAhKkGk/MAAKQIAIQIDQCApQfADaiAuai0AACEAICQgKjYCACApIAI3A/gBIAAEQCApQfgBakGY/cAAEKUDICkoAvwBIAA2AgAgKUEBNgKAAiApKALUASEnCyApQeABaiImICQoAgA2AgAgKSApKQP4ATcD2AEgKSgCzAEgJ0YEQCApQcwBakHAicEAEJ8DCyApKALQASAnQQxsaiIAICkpA9gBNwIAIABBCGogJigCADYCACApICdBAWoiJzYC1AEgLkEBaiIuQRBHDQALIClB+ANqICBB2AFqKQIANwMAIClCgICAgIACNwOABCApICApAtABNwPwA0EAIS5BrPzAACgCACEqQaT8wAApAgAhAgNAIClB8ANqIC5qLQAAISYgKUGAAmoiACAqNgIAICkgAjcD+AEgJgRAIClB+AFqQZj9wAAQpQMgKSgC/AEgJjYCACApQQE2AoACICkoAtQBIScLIClB8AFqIiYgACgCADYCACApICkpA/gBNwPoASApKALMASAnRgRAIClBzAFqQbCJwQAQnwMLICkoAtABICdBDGxqIgAgKSkD6AE3AgAgAEEIaiAmKAIANgIAICkgJ0EBaiInNgLUASAuQQFqIi5BEEcNAAsgMiApKQLMATcCACAyQQhqIClB1AFqKAIA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IhJ8IhEgCyAPVq0gAikD2BsiFiALIA1UrXx8fCILIAIpA7gbIAwgD1StfHwiF3wiDyACKQOoGyAMIAIpA6AbIg18IA1UrXx8IgwgAikD8Bp8Ig1Cm5Svw/K1qN6Gf34iFEIAQm1CABDJAyACQdAaaiAUQgBCf0IAEMkDIAJBwBpqIBRCAEL///////////8AQgAQyQMCQAJAIAIpA8gaIAIpA4gbIAIpA8gbIAIpA8AbIhkgAikDiBwgECATVq18fCIUIBlUrXwgFCAUIBIgFVStfCIQVq18IBAgCyARVK0gFiARIBJUrXx8fCISIBBUrXwiFCACKQOAG3wiESAUVK18IBEgESASIAsgF1atfCILIBJUrXwiElatfCASIBIgAikDmBsiFCALIAsgDnwiEVatfCARIBEgDCAPVK0gFCAOIA9WrXx8fCILVq18fCIPVq18IhIgAikDwBp8Ig4gElStfCAOIA8gDyALIAsgAikD+BogDCANVq18fCISVq18IgtWrXwiDyAOVK18IA8gAikD2BoiESALIAsgAikD0BoiDHwiDlatfCAOIA4gESAMIBJ8IgsgDFStfCALIAIpA+gaIAIpA+AaIgwgDXwgDFStfHwiESALVK18fCILVq18fCIMIA9UrXwiEkIAWQRAIBJC////////////AFIgEUJtVHIgCyAMg0J/UnINAQsgC0IBfCIPIBFCbVStIg59IRYgDEIBfCINIAtCf1IgDiAPVnKtIgt9IQ8gEiAMQn9SIAsgDVZyrX1C////////////AH0hEiARQhN8IREMAQsgDCEPIAshFgsgAkGwGmogBSkDGCIUQgBCyANCABDJAyACQaAaaiACKQOwGiIOQpuUr8Pytajehn9+IgtCAEJtQgAQyQMgAkGQGmogC0IAQn9CABDJAyACQYAaaiALQgBC////////////AEIAEMkDIAJB8BlqIAUpAxAiGUIAQsgDQgAQyQMgAkHgGWogAikDkBoiCyACKQO4GnwiDCACKQOoGiACKQOgGiINIA5CeIN8IA1UrXx8Ig4gAikD8Bl8Ig1Cm5Svw/K1qN6Gf34iEEIAQm1CABDJAyACQdAZaiAQQgBCf0IAEMkDIAJBwBlqIBBCAEL///////////8AQgAQyQMgAkGwGWogBSkDCCIYQgBCyANCABDJAyACQaAZaiAC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IAIpA7AXIhZ8Ig1WrXwgDSANIBQgFiACKQOIGCARIBJUrXwiEnwiCyASVK18IAsgCyATfCISVq18fCILVq18fCINVq18IhQgDyAQVK0gDCAPVK18fCIMIAIpA8gVIA0gAikDwBV8Ig4gDVStfCAOIA4gAikD2BUiDSALIAsgAikD0BUiEHwiD1atfCAPIA0gECASfCILIBJUrXwgCyACKQPoFSACKQPgFSINIBF8IA1UrXx8IhAgC1StfHwiCyAPVK18fCIPVq18fCIRQgBTIAwgFFStIAwgEVatfCIMQgBSIAxQG0UEQCALIA+DQn9SIBBCbVRyIBFC////////////AFJyDQELIAtCAXwiDiAQQm1UrSINfSEMIA9CAXwiFCALQn9SIA0gDlZyrSILfSESIBEgD0J/UiALIBRWcq19Qv///////////wB9IREgEEITfCEQDAELIA8hEiALIQwLAn4CQAJAIBEiCyAoIg9SDQAgEiILICAiD1INACAMIgsgJiIPUg0AICQiDyAQIgtRDQELIAsgD1oNACAmIAx9IgsgECAkVq0iD1QgDCAmVnKtIgwgICASfSIOQn+FfCINIA8gC0J/hXwiCyAkIBB9IhRCbVatIhBUrSITfSEPIA0gE1QhBiALIBB9IQsgDCAOViASICBWcq0gESAofXxC////////////AHwhF0JtIBR9DAELIAwgJn0iDyAQICRUrSIOfSELIBIgIH0iDSAMICZUIA4gD1ZyrSIMfSEPIBIgIFQgDCANVnIhBiARICh9IRcgECAkfQshEiACQbAVaiAdQgBCvgFCABDJAyACQaAVaiACKQOwFSINQpuUr8Pytajehn9+IgxCAEJtQgAQyQMgAkGQFWogDEIAQn9CABDJAyACQYAVaiAMQgBC////////////AEIAEMkDIAJB8BRqICFCAEK+AUIAEMkDIAJB4BRqIAIpA5AVIgwgAikDuBV8Ig4gAikDqBUgAikDoBUiESANQn6DfCARVK18fCINIAIpA/AUfCIRQpuUr8Pytajehn9+IhRCAEJtQgAQyQMgAkHQFGogFEIAQn9CABDJAyACQcAUaiAUQgBC////////////AEIAEMkDIAJBsBRqIB9CAEK+AUIAEMkDIAJBoBRqIAIpA9AUIhQgAikD+BQgDSARVq18IhAgDCANIA5UrSACKQOYFSITIAwgDlatfHwiFnwiGXwiGHwiDCACKQPoFCACKQPgFCIOIBF8IA5UrXx8Ig4gAikDsBR8Ig1Cm5Svw/K1qN6Gf34iEUIAQm1CABDJAyACQZAUaiARQgBCf0IAEMkDIAJBgBRqIBFCAEL///////////8AQgAQyQMgAkHwE2ogJ0IAQr4BQgAQyQMgAkHgE2ogAikDkBQiESAUIBAgGFatIhggEyAWIBlWrXwiGSACKQOAFXwiG3wiEHwiEyAMIA5WrSACKQPYFCIaIAwgFFStfHx8IgwgAikDuBQgDSAOVK18fCIcfCIOIAIpA6gUIA0gAikDoBQiFHwgFFStfHwiDSACKQPwE3wiFEKblK/D8rWo3oZ/fiIWQgBCbUIAEMkDIAJB0BNqIBZCAEJ/QgAQyQMgAkHAE2ogFkIAQv///////////wBCABDJAyAXIAatfSEWAkACQCACKQPIEyACKQOIFCACKQPIFCACKQPAFCIeIAIpA4gVIBkgG1atfHwiFyAeVK18IBcgFyAQIBhUrXwiGVatfCAZIAwgE1StIBogECATVq18fHwiECAZVK18IhcgAikDgBR8IhMgF1StfCATIBMgECAMIBxWrXwiDCAQVK18IhBWrXwgECAQIAIpA5gUIhcgDCAMIBF8IhNWrXwgEyATIA0gDlStIBcgDiARVK18fHwiDFatfHwiDlatfCIQIAIpA8ATfCIRIBBUrXwgESAOIA4gDCAMIAIpA/gTIA0gFFatfHwiE1atfCIMVq18Ig4gEVStfCAOIAIpA9gTIhEgDCAMIAIpA9ATIg18IhBWrXwgECAQIBEgDSATfCIMIA1UrXwgDCACKQPoEyACKQPgEyINIBR8IA1UrXx8IhEgDFStfHwiDFatfHwiDSAOVK18IhBCAFkEQCAQQv///////////wBSIBFCbVRyIAwgDYNCf1JyDQELIAxCAXwiFCARQm1UrSITfSEOIA1CAXwiFyAMQn9SIBMgFFZyrSIMfSEZIBAgDUJ/UiAMIBdWcq19Qv///////////wB9IRAgEUITfCERDAELIA0hGSAMIQ4LIBAgFnwiDCAPIBl8Ig0gD1QgDSANIAsgCyAOfCIOViAOIA4gESASfCIRIBJUrXwiD1ZyrXwiDlZyrXwhDQJAAkAgDCAWVCAMIA1Wcg0AQv///////////wAhDCANIgtC////////////AFEEQEJ/IQxC////////////ACELIA5Cf1IEQCAPIRQgDiEMDAMLIA9Cf1IEQCAPIRQMAwtCbSEMIBEiC0JtUQ0BCyALIAxaDQAgDyEUIA4hDCANIQsMAQsgD0IBfCILIBFCbVStIgx9IRQgDkIBfCISIA9Cf1IgCyAMVHKtIgt9IQwgDSAOQn9SIAsgElZyrX1C////////////AH0hCyARQhN8IRELIAIgETcDmB0gAiAUNwOQHSACIAw3A4gdIAIgCzcDgB0CQAJAIAJBgB1qQejRwQBBIBDxAwRAIBUgBa19ISogAkGwHWpCADcDACACQagdakIANwMAIAJCADcDoB0gAkIBNwO4HSACQdgdaiACQZgdaikDADcDACACQdAdaiACQZAdaikDADcDACACQcgdaiACQYgdaikDADcDACACIAIpA4AdNwPAHSACQfgdakHg0cEAKQMANwMAIAJB8B1qQdjRwQApAwA3AwAgAkHoHWpB0NHBACkDADcDACACQcjRwQApAwA3A+AdAkAgAkHAHWogAkGgHWpBIBDxA0UEQEKkCyESQgAhFkIAIRFCACETDAELQqQLIRIgAikD2B0hDyACKQPAHSEUIAIpA9AdIRcgAikDyB0hDkIAIQxCACEaQgAhHEIAIRBCACETQgAhFkIAIRFCbSELQv///////////wAhGUJ/IQ1CfyEVA0AgAkHgHWogAkGgHWpBIBDxA0UEQCAcIRYgECERIBohEyAMIRIMAgsgD6dBAXFFBEADQCAXQj+GIA9CAYiEIQ8CfiASp0EBcUUEQCATQj+GIBJCAYiEIRIgFkI/hiATQgGIhCETIBFCP4YgFkIBiIQMAQsgFkIBfSIbIBNCAFIgE0IBfSITIBIgEkITfSIeVq18IhIgE1RyrXwiGEI/hiASQgGIhCETIBJCP4YgHkIBiIQhEiARIBZCAFIgGCAbVHKtfEL///////////8AfCIRQj+GIBhCAYiECyEWIBRCP4YgDkI/hiAXQgGIhCEXIBRCAYghFCARQgGIIREgDkIBiIQhDiAPQgGDUA0ACyACIA43A8gdIAIgFzcD0B0LIAIgFDcDwB0gAiAPNwPYHSALp0EBcUUEQANAIBVCP4YgC0IBiIQhCwJ+IAxCAYNQRQRAIBxCAX0iGyAa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QgI3A+AdQYz3wQBBKyACQeAdakH89sEAQZiRwgAQygMACyAPISUgCyEeCyACQfAPaiAjQgAgJEIAEMkDIAJBsA9qICNCACAmQgAQyQMgAkGgD2ogI0IAICBCABDJAyACQZAPaiAjQgAgKEIAEMkDIAJB4A9qIAIpA/APIgxCm5Svw/K1qN6Gf34iC0IAQm1CABDJAyACQdAPaiALQgBCf0IAEMkDIAJBwA9qIAtCAEL///////////8AQgAQyQMgAkGAD2ogHkIAICRCABDJAyACQcAOaiAeQgAgJkIAEMkDIAJBsA5qIB5CACAgQgAQyQMgAkGgDmogHkIAIChCABDJAyACQfAOaiACKQPQDyILIAIpA/gPIhIgAikDsA98IhF8Ig8gAikD6A8gDCACKQPgDyIOfCAOVK18fCIMIAIpA4APfCIOQpuUr8Pytajehn9+Ig1CAEJtQgAQyQMgAkHgDmogDUIAQn9CABDJAyACQdAOaiANQgBC////////////AEIAEMkDIAJBkA5qICVCACAkQgAQyQMgAkHQDWogJUIAICZCABDJAyACQcANaiAlQgAgIEIAEMkDIAJBsA1qICVCACAoQgAQyQMgAkGADmogAikDiA8gDCAOVq18IhMgAikDwA58Ig0gCyACKQO4DyARIBJUrXwiECACKQOgD3wiEnwiESAMIA9UrSACKQPYDyIWIAsgD1atfHx8Ihd8IgsgAikD4A4iGXwiDyACKQP4DiACKQPwDiIMIA58IAxUrXx8IgwgAikDkA58Ig5Cm5Svw/K1qN6Gf34iFEIAQm1CABDJAyACQfANaiAUQgBCf0IAEMkDIAJB4A1qIBRCAEL///////////8AQgAQyQMgAkGgDWogIkIAICRCABDJAyACQeAMaiAiQgAgJkIAEMkDIAJB0AxqICJCACAgQgAQyQMgAkHADGogIkIAIChCABDJAyACQZANaiACKQOYDiAMIA5WrXwiGCACKQPQDXwiFCAZIAIpA6gPIBAgElatfCIbIAIpA5APfCIQIAIpA8APfCIVIBEgF1atIBYgESASVK18fHwiEiACKQOwDnwiESALIA1UrSACKQPIDiANIBNUrXx8fCINfCITIAwgD1StIAIpA+gOIhcgCyAPVq18fHwiGXwiCyACKQPwDSIafCIPIAIpA4gOIAIpA4AOIgwgDnwgDFStfHwiDCACKQOgDXwiDkKblK/D8rWo3oZ/fiIWQgBCbUIAEMkDIAJBgA1qIBZCAEJ/QgAQyQMgAkHwDGogFkIAQv///////////wBCABDJAwJAAkAgAikD+AwgAikD6A0gAikD2A4gEiAVVK0gAikDyA8gECAVVq18fCIWIAIpA5gPIBAgG1StfHwiECACKQOgDnwiFSANIBFUrSACKQO4DiARIBJUrXx8fCISIAIpA9AOfCIRIBJUrXwgESATIBlWrSAXIA0gE1atfHx8Ig0gEVStfCITIBIgFVStIAIpA6gOIBAgFVatfHwiFyAQIBZUrXwiFnwiEiACKQOwDXwiESACKQPIDSANIA0gAikDwA18IhBWrXwgECAQIAsgFFStIAIpA9gNIBQgGFStfHx8Ig1WrXx8IhQgAikD4A18IhAgFFStfCAQIAIpA/gNIhkgDSANIBp8IhVWrXwgFSAVIAwgD1StIBkgCyAPVq18fHwiGVatfHwiCyAQVK18IhggESAUVq0gAikDuA0gESASVK18fCIbIBIgE1StIBYgF1StfHwiE3wiDSACKQPADHwiEiACKQPYDCALIAsgAikD0Ax8Ig9WrXwgDyAPIAIpA+gMIAIpA6gNIAwgDlatfCIMIAIpA+AMfCILIAxUrXwgCyALIBl8IgxWrXx8IgtWrXx8IhQgAikD8Ax8IhAgFFStfCAQIBAgAikDiA0iDyALIAsgAikDgA0iEXwiFVatfCAVIBUgDyAMIAwgEXwiC1atfCALIAIpA5gNIA4gAikDkA0iD3wgD1StfHwiESALVK18fCIPVq18fCIMVq18IgsgEiAUVq0gAikDyAwgDSASVq18fCIOIA0gGFStIBMgG1StfHwiDXwiECALVCANIA5UciAQQgBTckUEQCAMIA+DQn9SIBFCbVRyIBBC////////////AFJyDQELIA9CAXwiCyARQm1UrSIOfSEUIAxCAXwiDSAPQn9SIAsgDlRyrSIPfSELIBAgDEJ/UiANIA9Ucq19Qv///////////wB9IRAgEUITfCERDAELIAwhCyAPIRQLIBAgKHwiDyALICB8IgwgIFQgDCAUICZ8Ig4gJlQgDiAOIBEgJHwiEiAkVK18IgtWcq18Ig4gDFRyrXwhDQJAAkAgDyAoVCANIA9Ucg0AQv///////////wAhECANIgxC////////////AFEEQEJ/IQxC////////////ACEPIA5Cf1IEQCALIRQgDiEMDAMLIAtCf1IEQCALIRQMAwtCbSEQIBIiDEJtUQ0BCyAMIBBaDQAgCyEUIA4hDCANIQ8MAQsgC0IBfCIPIBJCbVStIgx9IRQgDkIBfCIRIAtCf1IgDCAPVnKtIgt9IQwgDSAOQn9SIAsgEVZyrX1C////////////AH0hDyASQhN8IRILIAJB8ApqICNCACAdQgAQyQMgAkGwC2ogI0IAICFCABDJAyACQfALaiAjQgAgH0IAEMkDIAJBsAxqICNCACAnQgAQyQMgAkHgCmogAikD8AoiDUKblK/D8rWo3oZ/fiILQgBCbUIAEMkDIAJB0ApqIAtCAEJ/QgAQyQMgAkHACmogC0IAQv///////////wBCABDJAyACQbAKaiAeQgAgHUIAEMkDIAJBoAtqIB5CACAhQgAQyQMgAkHgC2ogHkIAIB9CABDJAyACQaAMaiAeQgAgJ0IAEMkDIAJBoApqIAIpA9AKIgsgAikD+AoiFSACKQOwC3wiE3wiDiACKQPoCiANIAIpA+AKIhF8IBFUrXx8Ig0gAikDsAp8IhFCm5Svw/K1qN6Gf34iEEIAQm1CABDJAyACQZAKaiAQQgBCf0IAEMkDIAJBgApqIBBCAEL///////////8AQgAQyQMgAkHwCWogJUIAIB1CABDJAyACQZALaiAlQgAgIUIAEMkDIAJB0AtqICVCACAfQgAQyQMgAkGQDGogJUIAICdCABDJAyACQeAJaiACKQO4CiANIBFWrXwiGCACKQOgC3wiECALIAIpA7gLIBMgFVStfCIXIAIpA/ALfCIVfCITIA0gDlStIAIpA9gKIhsgCyAOVq18fHwiGnwiCyACKQOQCiIcfCIOIAIpA6gKIAIpA6AKIg0gEXwgDVStfHwiDSACKQPwCXwiEUKblK/D8rWo3oZ/fiIWQgBCbUIAEMkDIAJB0AlqIBZCAEJ/QgAQyQMgAkHACWogFkIAQv///////////wBCABDJAyACQbAJaiAiQgAgHUIAEMkDIAJBgAtqICJCACAhQgAQyQMgAkHAC2ogIkIAIB9CABDJAyACQYAMaiAiQgAgJ0IAEMkDIAJBoAlqIAIpA/gJIA0gEVatfCIkIAIpA5ALfCIWIBwgAikD+AsgFSAXVK18IiYgAikDsAx8IhcgAikDwAp8IhkgEyAaVq0gGyATIBVUrXx8fCIVIAIpA+ALfCITIAsgEFStIAIpA6gLIBAgGFStfHx8IhB8IhggDSAOVK0gAikDmAoiGiALIA5WrXx8fCIcfCILIAIpA9AJIiB8Ig4gAikD6AkgAikD4AkiDSARfCANVK18fCINIAIpA7AJfCIRQpuUr8Pytajehn9+IhtCAEJtQgAQyQMgAkGQCWogG0IAQn9CABDJAyACQYAJaiAbQgBC////////////AEIAEMkDAkACQCACKQOICSACKQPICSACKQOICiAVIBlUrSACKQPICiAXIBlWrXx8IhsgAikDuAwgFyAmVK18fCIXIAIpA6AMfCIZIBAgE1StIAIpA+gLIBMgFVStfHx8IhUgAikDgAp8IhMgFVStfCATIBggHFatIBogECAYVq18fHwiECATVK18IhggFSAZVK0gAikDqAwgFyAZVq18fCIaIBcgG1StfCIbfCIVIAIpA5AMfCITIAIpA9gLIBAgECACKQPQC3wiF1atfCAXIBcgCyAWVK0gAikDmAsgFiAkVK18fHwiEFatfHwiFiACKQPACXwiFyAWVK18IBcgAikD2AkiHCAQIBAgIHwiGVatfCAZIBkgDSAOVK0gHCALIA5WrXx8fCIQVq18fCILIBdUrXwiHCATIBZWrSACKQOYDCATIBVUrXx8IiQgFSAYVK0gGiAbVq18fCIYfCIVIAIpA4AMfCITIAIpA8gLIAsgCyACKQPAC3wiDlatfCAOIA4gAikDiAsgAikDuAkgDSARVq18Ig0gAikDgAt8IgsgDVStfCALIAsgEHwiDVatfHwiC1atfHwiFiACKQOACXwiFyAWVK18IBcgFyACKQOYCSIOIAsgCyACKQOQCSIQfCIZVq18IBkgGSAOIA0gDSAQfCILVq18IAsgAikDqAkgESACKQOgCSIOfCAOVK18fCIQIAtUrXx8Ig5WrXx8Ig1WrXwiCyATIBZWrSACKQOIDCATIBVUrXx8IhMgFSAcVK0gGCAkVK18fCIVfCIRIAtUIBMgFVZyIBFCAFNyRQRAIA0gDoNCf1IgEEJtVHIgEUL///////////8AUnINAQsgDkIBfCILIBBCbVStIhV9IRkgDUIBfCITIA5Cf1IgCyAVVHKtIg59IQsgESANQn9SIA4gE1ZyrX1C////////////AH0hESAQQhN8IRAMAQsgDSELIA4hGQsCfgJAAkAgESIOIA8iDVINACALIQ4gCyAMIg1SDQAgFCINIBkiDlINACASIg0gECIOUQ0BCyANIA5aDQAgGSAUfSIOIBAgElStIg1UIBQgGVZyrSIVIAsgDH0iE0J/hXwiFiANIA5Cf4V8Ig4gECASfSINQm1WrSISVK0iEH0hFCAQIBZWIQYgDiASfSEOIAsgDFQgEyAVVHKtIA8gEX18Qv///////////wB8IQxCbSANfQwBCyAUIBl9Ig0gECASVq0iFX0hDiAMIAt9IhMgFCAZVCANIBVUcq0iDX0hFCANIBNWIAsgDFZyIQYgDyARfSEMIBIgEH0LIQsgDCAGrX0iDyEMAn4CQAJAIA8gJyISUg0AIBQiDCAfIhJSDQAgDiIMICEiElINACALIgwgHSISUQ0BCyAMIBJaDQAgISAOfSIMIAsgHVatIg1UIA4gIVZyrSIOIB8gFH0iEkJ/hXwiESAMQn+FIA18IgwgHSALfSILQm1WrSINVK0iEH0hISAQIBFWIQUgDCANfSEkQm0gC30hJiAOIBJWIBQgH1ZyrSAPICd9fEL///////////8AfAwBCyAOICF9IgwgCyAdVK0iDX0hJCAUIB99IhIgDiAhVCAMIA1Ucq0iDH0hISAUIB9UIAwgElZyIQUgCyAdfSEmIA8gJ30LIRogAkHwCGogBykDGEIAQpgBQgAQyQMgAkHgCGogAikD8AgiDEKblK/D8rWo3oZ/fiILQgBCbUIAEMkDIAJB0AhqIAtCAEJ/QgAQyQMgAkHACGogC0IAQv///////////wBCABDJAyACQbAIaiAHKQMQQgBCmAFCABDJAyACQaAIaiACKQPQCCILIAIpA/gIfCIPIAIpA+gIIAIpA+AIIg4gDEJ4g3wgDlStfHwiDCACKQOwCHwiDkKblK/D8rWo3oZ/fiINQgBCbUIAEMkDIAJBkAhqIA1CAEJ/QgAQyQMgAkGACGogDUIAQv///////////wBCABDJAyACQfAHaiAHKQMIQgBCmAFCABDJAyACQeAHaiACKQOQCCINIAIpA7gIIAwgDlatfCISIAsgDCAPVK0gAikD2AgiESALIA9WrXx8IhR8IhB8IhV8IgsgAikDqAggAikDoAgiDyAOfCAPVK18fCIPIAIpA/AHfCIMQpuUr8Pytajehn9+Ig5CAEJtQgAQyQMgAkHQB2ogDkIAQn9CABDJAyACQcAHaiAOQgBC////////////AEIAEMkDIAJBsAdqIAcpAwBCAEKYAUIAEMkDIAJBoAdqIAIpA9AHIg4gDSASIBVWrSIVIBEgECAUVK18IhAgAikDwAh8IhN8IhJ8IhEgCyAPVq0gAikDmAgiFiALIA1UrXx8fCILIAIpA/gHIAwgD1StfHwiF3wiDyACKQPoByAMIAIpA+AHIg18IA1UrXx8IgwgAikDsAd8Ig1Cm5Svw/K1qN6Gf34iFEIAQm1CABDJAyACQZAHaiAUQgBCf0IAEMkDIAJBgAdqIBRCAEL///////////8AQgAQyQMCQAJAAn4CQAJAIAIpA4gHIAIpA8gHIAIpA4gIIAIpA4AIIhkgAikDyAggECATVq18fCIUIBlUrXwgFCAUIBIgFVStfCIQVq18IBAgCyARVK0gFiARIBJUrXx8fCISIBBUrXwiFCACKQPAB3wiESAUVK18IBEgESASIAsgF1atfCILIBJUrXwiElatfCASIBIgAikD2AciFCALIAsgDnwiEVatfCARIBEgDCAPVK0gFCAOIA9WrXx8fCILVq18fCIPVq18IhIgAikDgAd8Ig4gElStfCAOIA8gDyALIAsgAikDuAcgDCANVq18fCISVq18IgtWrXwiDyAOVK18IA8gDyACKQOYByIRIAsgCyACKQOQByIMfCIOVq18IA4gESAMIBJ8IgsgDFStfCALIAIpA6gHIAIpA6AHIgwgDXwgDFStfHwiDCALVK18fCIRIA5UrXx8IhJWrXwiEEIAUyIHRQRAIBEgEoMhDyAQQv///////////wBSIAxCbVRyDQEgDCEOIBEhDSASIRQgECEZIA9Cf1INAgsgEUIBfCIWIAxCbVStIgt9IQ0gEkIBfCIXIBFCf1IgCyAWVnKtIgt9IRQgEEL///////////8AfSIVIBJCf1IgCyAXVnKtfSEZIAxCE3wiDiAHDQIaIBEgEoMhDwwBCyAMIQ4gESENIBIhFCAQIRkLIBBC////////////AFIgDEJtVHIgD0J/UnINASASQgF8IRcgEUIBfCEWQgAhFSAMQhN8CyEPIBcgEUJ/UiAWIAxCbVStIgxUcq0iEX0hCyAVIBJCf1IgESAXVnKtfSEQIBYgDH0hEQwBCyASIQsgDCEPCyACQfAGaiAPQgAgI0IAEMkDIAJBgAZqIBFCACAjQgAQyQMgAkGQBWogC0IAICNCABDJAyACQaAEaiAQQgAgI0IAEMkDIAJB4AZqIAIpA/AGIhVCm5Svw/K1qN6Gf34iDEIAQm1CABDJAyACQdAGaiAMQgBCf0IAEMkDIAJBwAZqIAxCAEL///////////8AQgAQyQMgAkGwBmogD0IAIB5CABDJAyACQcAFaiARQgAgHkIAEMkDIAJB0ARqIAtCACAeQgAQyQMgAkHgA2ogEEIAIB5CABDJAyACQfAFaiACKQPQBiIMIAIpA/gGIhcgAikDgAZ8Ihh8IhIgAikD6AYgFSACKQPgBiITfCATVK18fCIVIAIpA7AGfCITQpuUr8Pytajehn9+IhZCAEJtQgAQyQMgAkHgBWogFkIAQn9CABDJAyACQdAFaiAWQgBC////////////AEIAEMkDIAJBoAZqIA9CACAlQgAQyQMgAkGwBWogEUIAICVCABDJAyACQcAEaiALQgAgJUIAEMkDIAJB0ANqIBBCACAlQgAQyQMgAkGABWogAikDuAYgEyAVVK18IhwgAikDwAV8IhYgDCACKQOIBiAXIBhWrXwiHSACKQOQBXwiF3wiGCASIBVWrSACKQPYBiIfIAwgElatfHx8IiB8IgwgAikD4AUiJ3wiEiACKQP4BSACKQPwBSIVIBN8IBVUrXx8IhUgAikDoAZ8IhNCm5Svw/K1qN6Gf34iG0IAQm1CABDJAyACQfAEaiAbQgBCf0IAEMkDIAJB4ARqIBtCAEL///////////8AQgAQyQMgAkGQBmogD0IAICJCABDJAyACQaAFaiARQgAgIkIAEMkDIAJBsARqIAtCACAiQgAQyQMgAkHAA2ogEEIAICJCABDJAyACQZAEaiACKQOoBiATIBVUrXwiKCACKQOwBXwiCyAnIAIpA5gFIBcgHVStfCIdIAIpA6AEfCIPIAIpA8AGfCIRIBggIFatIB8gFyAYVq18fHwiECACKQPQBHwiFyAMIBZUrSACKQPIBSAWIBxUrXx8fCIWfCIYIBIgFVatIAIpA+gFIhwgDCASVq18fHwiH3wiDCACKQPwBCIgfCISIAIpA4gFIAIpA4AFIhUgE3wgFVStfHwiFSACKQOQBnwiE0KblK/D8rWo3oZ/fiIbQgBCbUIAEMkDIAJBgARqIBtCAEJ/QgAQyQMgAkHwA2ogG0IAQv///////////wBCABDJAwJAAkAgAikD+AMgAikD6AQgAikD2AUgECARVK0gAikDyAYgDyARVq18fCIbIAIpA6gEIA8gHVStfHwiDyACKQPgA3wiESAWIBdUrSACKQPYBCAQIBdWrXx8fCIQIAIpA9AFfCIXIBBUrXwgFyAXIBggH1atIBwgFiAYVq18fHwiFlatfCIYIBAgEVStIAIpA+gDIA8gEVatfHwiHCAPIBtUrXwiG3wiDyACKQPQA3wiESACKQPIBCAWIAIpA8AEfCIQIBZUrXwgECALIAxWrSACKQO4BSALIChUrXx8fCILIBBUrXx8IhAgAikD4AR8IhYgEFStfCAWIAIpA/gEIh0gCyALICB8IhdWrXwgFyAXIBIgFVatIB0gDCASVq18fHwiHVatfHwiCyAWVK18IhcgECARVK0gAikD2AMgDyARVq18fCIfIA8gGFStIBsgHFStfHwiGHwiDCACKQPAA3wiEiACKQO4BCALIAsgAikDsAR8Ig9WrXwgDyAPIAIpA6gFIAIpA5gGIBMgFVStfCIRIAIpA6AFfCILIBFUrXwgCyALIB18IhFWrXx8IgtWrXx8IhUgAikD8AN8IhYgFVStfCAWIBYgAikDiAQiECALIAsgAikDgAQiG3wiD1atfCAPIA8gECARIBEgG3wiC1atfCALIAIpA5gEIAIpA5AEIhEgE3wgEVStfHwiECALVK18fCILVq18fCIPVq18IhMgEiAVVq0gAikDyAMgDCASVq18fCISIAwgF1StIBggH1StfHwiDHwiESATVCAMIBJUciARQgBTckUEQCALIA+DQn9SIBBCbVRyIBFC////////////AFJyDQELIAtCAXwiEiAQQm1UrSIVfSEMIA9CAXwiEyALQn9SIBIgFVRyrSILfSESIBEgD0J/UiALIBNWcq19Qv///////////wB9IREgEEITfCEQDAELIA8hEiALIQwLAn8CQAJAIBEiDyAZIgtSDQAgEiIPIBQiC1INACAMIQ8gDSILIAxSDQAgECIPIA4iC1ENAQsgCyAPWg0AIAwgDX0iCyAOIBBWrSIPVCAMIA1Ucq0iDSASIBR9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rSIdVK19IBYgDyAdfSIdfCIPIB1UIA8gDyAOIBF9IhEgE3wiDiARVCAOQm0gDH0iESASfCISIBFUrXwiEyAOVHKtfCIWVnKtfEL///////////8AfCERIBchDiAbIRcgGCEPCyACQcAdaiACQaAdakEgEPEDDQALCyACQbADaiASQgAgJkIAEMkDIAJB8AJqIBJCACAkQgAQyQMgAkHgAmogEkIAICFCABDJAyACQdACaiASQgAgH0IAEMkDIAJBoANqIAIpA7ADIgxCm5Svw/K1qN6Gf34iC0IAQm1CABDJAyACQZADaiALQgBCf0IAEMkDIAJBgANqIAtCAEL///////////8AQgAQyQMgAkHAAmogE0IAICZCABDJAyACQYACaiATQgAgJEIAEMkDIAJB8AFqIBNCACAhQgAQyQMgAkHgAWogE0IAIB9CABDJAyACQbACaiACKQOQAyILIAIpA7gDIhIgAikD8AJ8IhR8Ig8gAikDqAMgDCACKQOgAyIOfCAOVK18fCIMIAIpA8ACfCIOQpuUr8Pytajehn9+Ig1CAEJtQgAQyQMgAkGgAmogDUIAQn9CABDJAyACQZACaiANQgBC////////////AEIAEMkDIAJB0AFqIBZCACAmQgAQyQMgAkGQAWogFkIAICRCABDJAyACQYABaiAWQgAgIUIAEMkDIAJB8ABqIBZCACAfQgAQyQMgAkHAAWogAikDyAIgDCAOVq18IhMgAikDgAJ8Ig0gCyACKQP4AiASIBRWrXwiFSACKQPgAnwiEnwiFCAMIA9UrSACKQOYAyIWIAsgD1atfHx8Ihd8IgsgAikDoAIiGXwiDyACKQO4AiACKQOwAiIMIA58IAxUrXx8IgwgAikD0AF8Ig5Cm5Svw/K1qN6Gf34iEEIAQm1CABDJAyACQbABaiAQQgBCf0IAEMkDIAJBoAFqIBBCAEL///////////8AQgAQyQMgAkHgAGogEUIAICZCABDJAyACQSBqIBFCACAkQgAQyQMgAkEQaiARQgAgIUIAEMkDIAIgEUIAIB9CABDJAyACQdAAaiACKQPYASAMIA5WrXwiGCACKQOQAXwiESAZIAIpA+gCIBIgFVStfCIbIAIpA9ACfCIQIAIpA4ADfCIVIBQgF1atIBYgEiAUVq18fHwiEiACKQPwAXwiFCALIA1UrSACKQOIAiANIBNUrXx8fCINfCITIAwgD1StIAIpA6gCIhcgCyAPVq18fHwiGXwiCyACKQOwASIafCIPIAIpA8gBIAIpA8ABIgwgDnwgDFStfHwiDCACKQNgfCIOQpuUr8Pytajehn9+IhZCAEJtQgAQyQMgAkFAayAWQgBCf0IAEMkDIAJBMGogFkIAQv///////////wBCABDJAyACKQM4IAIpA6gBIAIpA5gCIBIgFVStIAIpA4gDIBAgFVatfHwiFiACKQPYAiAQIBtUrXx8IhAgAikD4AF8IhUgDSAUVK0gAikD+AEgEiAUVq18fHwiEiACKQOQAnwiFCASVK18IBQgEyAZVq0gFyANIBNWrXx8fCINIBRUrXwiEyASIBVUrSACKQPoASAQIBVWrXx8IhcgECAWVK18IhZ8IhIgAikDcHwiFCACKQOIASANIA0gAikDgAF8IhBWrXwgECAQIAsgEVStIAIpA5gBIBEgGFStfHx8Ig1WrXx8IhEgAikDoAF8IhAgEVStfCAQIAIpA7gBIhkgDSANIBp8IhVWrXwgFSAVIAwgD1StIBkgCyAPVq18fHwiGVatfHwiCyAQVK18IhUgESAUVK0gAikDeCASIBRWrXx8IhggEiATVK0gFiAXVK18fCITfCIPIAIpAwB8Ig0gAikDGCALIAsgAikDEHwiElatfCASIBIgAikDKCACKQNoIAwgDlatfCIMIAIpAyB8IgsgDFStfCALIAsgGXwiDFatfHwiC1atfHwiEiACKQMwfCIUIBJUrXwgFCACKQNIIhEgCyALIAIpA0AiFnwiEFatfCAQIBAgESAMIAwgFnwiC1atfCALIAIpA1ggDiACKQNQIgx8IAxUrXx8IhEgC1StfHwiDFatfHwiDiAUVK18IgsgDSASVq0gAikDCCANIA9UrXx8Ig0gDyAVVK0gEyAYVK18fCIPfCIQIAtUIA0gD1ZyIBBCAFNyRQRAIAwgDoNCf1IgEUJtVHIgEEL///////////8AUnINAgsgDEIBfCIPIBFCbVStIg19IQsgDkIBfCISIAxCf1IgDSAPVnKtIgx9IQ8gECAOQn9SIAwgElZyrX1C////////////AH0hECARQhN8IREMAgsgAkICNwPgHUGM98EAQSsgAkHgHWpB/PbBAEGIkcIAEMoDAAsgDiEPIAwhCwsgBCAj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MjM1OS9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvYWRhcHRlcnMvc3RlcF9ieS5ycwBBqJ/AAAtFquPKkuWPmBEtlRm1hT55msCDnZOpiOtn1baVTGxH5Y3xBNEJpuZ2CkYXNBw0H9/0EwAAAAwAAAAEAAAAFAAAABUAAAAWAEH4n8AAC6kGAQAAABcAAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAAA3EBAASwAAANEKAAAOAAAARXJyb3IvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvaW5fcGxhY2VfY29sbGVjdC5ycwAAmRAQAFkAAAD7AAAAAQAAADcQEABLAAAAfQUAABsAAABjAAAAAAAAAAQAAAAEAAAAGAAAAFBhcnNlQmlnSW50RXJyb3JraW5kAAAAAAQAAAAEAAAAGQAAAFBhcnNlSW50RXJyb3JEaXZpc2lvbkJ5WmVybwAAAAAABAAAAAQAAAADAAAAUm9vdE9mVW5pdHlFcnJvckludlplcm9FcnJvcgAAAABn5glqha5nu3Lzbjw69U+lf1IOUYxoBZur2YMfGc3gWy9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAAC4ERAASgAAAL4BAAAdAAAAAAAAAAQAAAAEAAAAGgAAAEZpZWxkRWxlbWVudHZhbHVldG9vbHMvZ2FyYWdhX3JzL3NyYy9jYWxsZGF0YS9kcmFuZF9jYWxsZGF0YS5yc0ludmFsaWQgcm91bmQgbnVtYmVyOiAAAABjEhAAFgAAAEludmFsaWQgc2lnbmF0dXJlIGFycmF5IGxlbmd0aDoghBIQACAAAABJbnZhbGlkIHJhbmRvbW5lc3MgYXJyYXkgbGVuZ3RoOiAAAACsEhAAIQAAAEludmFsaWQgZGF0YSBhcnJheSBsZW5ndGg6IADYEhAAGwAAAHNoYTI1NgAANRIQAC4AAABCAAAALQAAADUSEAAuAAAASAAAAD4AQciowAALoU8CAAAAAAAAADUSEAAuAAAAVgAAAA8AAABhc3NlcnRpb24gZmFpbGVkOiBjYWxsX2RhdGEubGVuKCkgPT0gMSArIHNpemUAAAA1EhAALgAAAFsAAAAFAAAAUG9pbnQgIGlzIG5vdCBhbiBpc28gcG9pbnQAAKAUEAAGAAAAphQQABQAAAA1EhAALgAAAHYAAAAFAAAANRIQAC4AAAB3AAAABQAAADUSEAAuAAAAhAAAAAUAAAAbAAAADAAAAAQAAAAHAAAANRIQAC4AAAByAAAACgAAADUSEAAuAAAAjwAAAC4AAABhc3NlcnRpb24gZmFpbGVkOiBkaXYzICE9IEZpZWxkRWxlbWVudDo6ZnJvbSgwKQA1EhAALgAAAKMAAAAFAAAAYXNzZXJ0aW9uIGZhaWxlZDogJnkxICogJnkxID09ICZ6ICogJmd4MTUSEAAuAAAAsAAAAAkAAABhc3NlcnRpb24gZmFpbGVkOiAmeTEgKiAmeTEgPT0gZ3gxAAA1EhAALgAAAKwAAAAJAAAAEwAAAAwAAAAEAAAAHAAAADUSEAAuAAAAvAAAACwAAAAAAAAAEAAAAAgAAAAdAAAANRIQAC4AAAC3AAAAJAAAADUSEAAuAAAAqAAAACIAAABVbnN1cHBvcnRlZCBoYXNoIGZ1bmN0aW9uOiAAKBYQABsAAAAvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzTBYQAFgAAADBBwAACQAAAExlbmd0aCBzaG91bGQgYmUgc21hbGxlciB0aGFuIDJeMTYAALQWEAAiAAAANRIQAC4AAADVAAAABQAAAEJMU19TSUdfQkxTMTIzODFHMV9YTUQ6U0hBLTI1Nl9TU1dVX1JPX05VTF9hc3NlcnRpb24gZmFpbGVkOiBzdGVwICE9IDAAABgPEABZAAAAIwAAAAkAAAA1EhAALgAAAN0AAAAQAAAANRIQAC4AAAABAQAAKQAAADUSEAAuAAAADgEAACkAAAA1EhAALgAAAFEBAAATAAAAVGhlIHJhdGlvIG9mIGRlc2lyZWQgb3V0cHV0IHRvIHRoZSBvdXRwdXQgc2l6ZSBvZiBoYXNoIGZ1bmN0aW9uIGlzIHRvbyBsYXJnZSEAAACIFxAATQAAADUSEAAuAAAAWQEAAAkAAAA1EhAALgAAAF8BAAAVAAAANRIQAC4AAABlAQAAGwAAADUSEAAuAAAAggEAABYAAAA1EhAALgAAAIsBAAAFAAAANRIQAC4AAACPAQAALQAAADExQTA1RjJCMUU4MzMzNDBCODA5MTAxREQ5OTgxNTg1NkIzMDNFODhBMkQ3MDA1RkYyNjI3QjU2Q0RCNEUyQzg1NjEwQzJENUYyRTYyRDZFQUVBQzE2NjI3MzQ2NDlCNzE3Mjk0RUQzRTk0M0FCMkYwNTg4QkFCMjIxNDdBODFDN0MxN0U3NUIyRjZBODQxN0Y1NjVFMzNDNzBEMUU4NkI0ODM4RjJBNkYzMThDMzU2RTgzNEVFRjFCM0NCODNCQkQ1NDAwNURCOTc2NzhFQzFEMTA0OEM1RDEwQTlBMUJDRTAzMjQ3MzI5NTk4M0U1Njg3OEU1MDFFQzY4RTI1Qzk1OEMzRTNEMkEwOTcyOUZFMDE3OUY5REFDOUVEQ0IwMTc3OEU3MTY2RkNDNkRCNzRFMDYwOUQzMDdFNTU0MTJEN0Y1RTQ2NTZBOERCRjI1RjFCMzMyODlGMUIzMzA4MzUzMzZFMjVDRTMxMDcxOTNDNUIzODg2NDFEOUI2ODYxRTk5NzI2QTMxOTlGNDQzNjY0MkI0QjNFNDExOEU1NDk5REI5OTVBMTI1N0ZCM0YwODZFRUI2NTk4MkZBQzE4OTg1QTI4NkYzMDFFNzdDNDUxMTU0Q0U5QUM4ODk1RDkxNjMwQzMyNTBENzMxM0ZGMDFEMTIwMUJGN0E3NEFCNURCM0NCMTdERDk1Mjc5OUI5RUQzQUI5MDk3RTY4RjkwQTA4NzBEMkRDQUU3M0QxOUNEMTNDMUM2NkY2NTI5ODNENkVENjU1M0ZFNDREMjk2QTM3MjZDMzhBRTY1MkJGQjExNTg2MjY0RjBGOENFMTkwMDhFMjE4RjlDODZCMkE4REEyNTEyOEMxMDUyRUNBREREN0YyMjVBMTM5RUQ4NDE3QjgxRTc3MDFBQkRCRTJFODc0Mzg4NEQxMTE3RTUzMzU2REU1QUIyNzVCNERCMUE2ODJDNjJFRjBGMjc1MzMzOUI3QzhGOEM4RjQ3NUFGOUNDQjU2MThFM0YwQzg4RTgwRDNDRjFGOUE3OEZDNDdCOTBCMzM1NjNCRTk5MERDNDNCNzU2Q0U3OUY1NTc0QTJDNTk2QzkyOEM1RDFERTRGQTI5NUYyOTZCNzRFOTU2RDcxOTg2QTg0OTdFMzE3MTY5QjFGOEUxQkNGQTdDNDJFMEMzNzUxNUQxMzhGMjJERDJFQ0I4MDNBMEM1Qzk5Njc2MzE0QkFGNEJCMUI3RkEzMTkwQjJFREMwMzI3Nzk3RjI0MTA2N0JFMzkwQzlFMTAzMjFEQTA3OUNFMDdFMjcyRDhFQzA5RDI1NjVCMERGQTdEQ0NEREU2Nzg3Rjk2RDUwQUYzNjAwM0IxNDg2NkY2OUI3NzFGOEMyODVERUNDQTY3REYzRjE2MDVGQjdCNkUwOEMyNDhFMjYwRTcwQkQxRTk2MjM4MUVERUUzRDMxRDc5RDdFMjJDODM3QkMyM0MwQkYxQkMyNEM2QjY4QzI0QjFCODBCNjREMzkxRkE5QzhCQTJFOEJBMkQyMjk4Q0E4RDU0OENGRjE5QUUxOEIyRTYyRjRCRDNGQTZGMDFENUVGNEJBMzVCNDhCQTlDOTU4ODYxN0ZDOEFDNjJCNTU4RDY4MUJFMzQzREY4OTkzQ0Y5RkE0MEQyMUIxQzEyNTYxQTVERUI1NTlDNDM0OEI0NzExMjk4RTUzNjM2NzA0MUU4Q0EwQ0YwODAwQzAxMjZDMjU4OEM0OEJGNTcxM0RBQTg4NDZDQjAyNkU5RTVDODI3NkVDODJCM0JGRkIyOTYyRkU1N0EzMjI1RTgxMzdFNjI5QkZGMjk5MUY2Rjg5NDE2RjVBNzE4Q0QxRkNBNjRFMDBCMTFBQ0VBQ0Q2QTNEMDk2N0M5NEZFRENGQ0MyMzlCQTVDQjgzRTE5MzQyNTU4MUE1OEFFMkZFQzgzQUFGRUY3QzQwRUI1NDVCMDgyNDNGMTZCMTY1NTE1NENDQThBQkMyOEQ2RkQwNDk3NkQ1MjQzRUVDRjVDNDEzMERFODkzOERDNjJDRDgxM0E4RTE2MjAyMjkxNEE4MEE2RjFENUY0M0U3QTA3REZGREZDNzU5QTEyMDYyQkI4RDZCNDRFODMzQjMwNkRBOUJEMjlCQTgxRjM1NzgxRDUzOUQzOTVCMzUzMkEyMUVFNzM1NUY4RTRFNjY3Qjk1NTM5MEY3RjA1MDZDNkU5Mzk1NzM1RTlDRTlDQUQ0RDBBNDNCQ0VGMjRCODk4MkY3NDAwRDI0QkM0MjI4RjExQzAyREY5QTI5RjYzMDRBNTc3MkNBQUNGMTY5MzYxOTBGM0UwQzYzRTA1OTY3MjE1NzBGNTc5OUFGNTNBMTg5NEUyRTA3MzA2MkFFREU5Q0VBNzNCMzUzOEYwREUwNkNFQzI1NzQ0OTZFRTg0QTNBMTRBN0FDMkE5RDY0QThCMjMwQjNGNUIwNzRDRjAxOTk2RTdGNjNDMjFCQ0E2OEE4MTk5NkUxQ0RGOTgyMkM1ODBGQTVCOTQ4OUQxMUUyRDMxMUY3RDk5QkJEQ0M1QTVFQTEwRUNGNkFEQTU0RjgyNUU5MjBCM0RBRkM3QTNDQ0UwN0Y4RDFENzE2MTM2NkI3NDEwMERBNjdGMzk4ODM1MDM4MjY2OTJBQkJBNDM3MDQ3NzZFQzNBNzlBMUQ2NDE5NUZDMTNBQjlFOTJBRDQ0NzZENkUzRUIzQTU2NjgwRjY4MkI0RUU5NkY3RDAzNzc2REY1MzM5NzhGMzFDMTU5MzE3NEU0QjRCNzg2NTAwMkQ2Mzg0RDE2OEVDREQwQTE5MGQ5N2M4MWJhMjRlZTAyNTlkMWYwOTQ5ODBkY2ZhMTFhZDEzOGU0OGE4Njk1MjJiNTJhZjZjOTU2NTQzZDNjZDBjN2FlZTliM2JhM2MyYmU5ODQ1NzE5NzA3YmIzMzEzNDk5NmExMDRlZTU4MTFkNTEwMzZkNzc2ZmI0NjgzMTIyM2U5NmMyNTRmMzgzZDBmOTA2MzQzZWI2N2FkMzRkNmM1NjcxMTk2MmZhOGJmZTA5N2U3NWEyZTQxYzY5NmNjNzg2YmFhOTY2ZTY2ZjRhMzg0Yzg2YTNiNDk5NDI1NTJlMmQ2NThhMzFjZTJjMzQ0YmU0YjkxNDAwZGE3ZDI2ZDUyMTYyOGIwMDUyM2I4ZGZlMjQwYzcyZGUxZjYxZjg2Mzc2ZTg5ODFjMjE3ODk4NzUxYWQ4NzQ2NzU3ZDQyYWE3YjkwZWViNzkxYzA5ZTRhM2VjMDMyNTFjZjlkZTQwNWFiYTllYzYxZGVjYTYzNTVjNzdiMGU1ZjRjYjhjYzAzZmRlZmUwZmYxMzVjYWY0ZmUyYTIxNTI5YzQxOTU1MzZmYmUzY2U1MGI4Nzk4MzNmZDIyMTM1MWFkYzJlZTdmOGRjMDk5MDQwYTg0MWI2ZGFlY2YyZThmZWRiMTY2MDNmY2E0MDYzNGI2YTIyMTFlMTFkYjhmMGE2YTA3NGE3ZDBkNGFmYWRiN2JkNzY1MDVjM2QzYWQ1NTQ0ZTIwM2Y2MzI2Yzk1YTgwNzI5OWIyM2FiMTM2MzNhNWYwNGFiMGI5YmNmYWMxYmJjYjJjOTc3ZDAyNzc5NmIzY2U3NWJiOGNhMmJlMTg0Y2I1MjMxNDEzYzRkNjM0ZjM3NDdhODdhYzI0NjBmNDE1ZWM5NjFmODg1NWZlOWQ2ZjI5ODdjOGQ1MzMzYWI4NmZkZTk5MjZiZDJjYTZjNjc0MTcwYTA1YmZlM2JkZDgxZmZkMDM4ZGE2YzI2Yzg0MjY0MmY2NDU1MGZlZGZlOTM1YTE1ZTRjYTMxODcwZmIyOTlmYzQwMThiZDk2Njg0YmU4OGM5ZTIyMWU0ZGExYmI4ZjNhYmQxNjY3OWRjMjZjMWU4YjZlNmExZjIwY2FiZTY5ZDY1MjAxYzc4NjA3YTM2MDM3MGU1NzdiZGJhNTg3ZTFiYmE3YTExODZiZGI1MjIzYWJkZTdhZGExNGEyM2M0MmEwY2E3OTE1YWY2ZmUwNjk4NWU3ZWQxZTRkNDNiOWIzZjcwNTVkZDRlYmE2ZjJiYWZhYWViY2E3MzFjMzAxOTcxM2U0NzkzN2NkMWJlMGRmZDBiOGYxZDQzZmI5M2NkMmZjYmNiNmNhZjQ5M2ZkMTE4M2U0MTYzODllNjEwMzFiZjNhNWNjZTNmYmFmY2U4MTM3MTFhZDAxMWMxMzIxOGI0NmE5MDhmMzZmNmRlYjkxOGMxNDNmZWQyZWRjYzUyMzU1OWI4YWFmMGMyNDYyZTZiZmU3ZjkxMWY2NDMyNDlkOWNkZjQxYjQ0ZDYwNmNlMDdjOGE0ZDAwNzRkOGViMTgyY2FjMTAxYjkzOTlkMTU1MDk2MDA0ZjUzZjQ0N2FhN2IxMmEzNDI2YjA4ZWMwMjcxMGU4MDdiNDYzM2YwNmM4NTFjMTkxOTIxMWYyMGQ0YzA0ZjAwYjk3MWVmODI0NWEzOTRhZDFlY2E5YjcyZmMwMGFlN2JlMzE1ZGM3NTdiM2IwODBkNGMxNTgwMTNlNjYzMmQzYzQwNjU5Y2M2Y2Y5MGFkMWMyMzJhNjQ0MmQ5ZDNmNWRiOTgwMTMzNWMxMjk2NDVlNDRjZjExMDJhMTU5Zjc0OGM0YTNmYzVlNjczZDgxZDdlODY1NjhkOWFiMGY1ZDM5NmE3Y2U0NmJhMTA0OWI2NTc5YWZiNzg2NmIxZTcxNTQ3NTIyNGIxNWU2YmU0ZTk5MGYwM2NlNGVhNTBiM2I0MmRmMmViNWNiMTgxZDhmODQ5NjVhMzk1N2FkZDRmYTk1YWYwMWIyYjY2NTAyN2VmZWMwMWM3NzA0YjQ1NmJlNjljOGI2MDQxNjExMmM0YzNhOWM5OGIyNTIxODExNDBmYWQwZWFlOTYwMWE2ZGU1Nzg5ODBiZTZlZWMzMjMyYjViZTcyZTdhMDdmMzY4OGVmNjBjMjA2ZDAxNDc5MjUzYjAzNjYzYzExOTYyZDc1YzIzODEyMDFlMWEwY2JkNmM0M2MzNDhiODg1Yzg0ZmY3MzFjNGQ1OWNhNGExMDM1NmY0NTNlMDFmNzhhNDI2MDc2MzUyOWUzNTMyZjYxMDJjMmU0OWEwM2Q1OGRmMzMwNjY0MGRhMjc2ZmFhYWU3ZDZlOGViMTU3NzhjNDg1NTU1MWFlN2YzMTBjMzVhNWRkMjc5Y2QyZWNhNjc1N2NkNjM2Zjk2Zjg5MWUyNTM4YjUzZGJmNjdmMjE2YjdkMjg4Nzk4ZTUzOTVmMjBkMjNiZjg5ZWRiNGQxZDExNWM1ZGJkZGJjZDMwZTEyM2RhNDg5ZTcyNmFmNDE3MjczNjRmMmMyODI5N2FkYThkMjZkOTg0NDVmNTQxNmJlMGUwNzk1NDVmNDNlNGIwMGNjOTEyZjgyMjhkZGNjNmQxOWM5ZjBmNjliYmIwNTQyZWRhMGZjOWRlYzkxNmEyMGIxNWRjMGZkMmVkZWRkYTM5MTQyMzExYTUwMDFkOGQ5ZTUyOTcxODZkYjJkOWZiMjY2ZWFhYzc4MzE4MmI3MDE1MmM2NTU1MGQ4ODFjNWVjZDg3YjZmMGY1YTY0NDlmMzhkYjlkZmE5Y2NlMjAyYzY0NzdmYWFmOWI3YWMxNjYwMDdjMDhhOTlkYjJmYzNiYTg3MzRhY2U5ODI0YjVlZWNmZGZhOGQwY2Y4ZWY1ZGQzNjViYzQwMGEwMDUxZDVmYTljMDFhNThiMWZiOTNkMWExMzk5MTI2YTc3NWMxNmEzZWYwOGJlM2VhN2VhMDNiY2RkZmFiYmE2ZmY2ZWU1YTQzNzVlZmExZjRmZDdmZWIzNGZkMjA2MzU3MTMyYjkyMGY1YjAwODAxZGVlNDYwZWU0MTVhMTU4MTJlZDkxODY2YzhlZDMzNmM2MTIzMWExYmU1NGZkMWQ3NGNjNGY5ZmIwY2U0YzZhZjU5MjBhYmM1NzUwYzRiZjM5YjQ4NTJjZmUyZjdiYjkyNDg4MzZiMjMzZDlkNTU1MzVkNGExNjdhNTVjZGE3MGE2ZTFjZWE4MjA1OTdkOTRhODQ5MDMyMTZmNzYzZTEzZDg3YmI1MzA4NTkyZTdlYTdkNGZiYzczODVlYTNkNTI5YjM1ZTM0NmVmNDhiYjg5MTNmNTU0ZDJmMjU5ZWVhNDA1YmQ0OGYwMTBhMDFhZDI5MTFkOWM2ZGQwMzliYjYxYTYyOTBlNTkxYjM2ZTYzNmE1Yzg3MWE1YzI5ZjRmODMwNjA0MDBmOGI0OWNiYThmNmFhOGFjY2JiNjc0ODFkMDMzZmY1ODUyYzFlNDhjNTBjNDc3Zjk0ZmY4YWVmY2U0MmQyOGMwZjlhODhjZWE3OTEzNTE2Zjk2ODk4NmY3ZWJiZWE5Njg0YjUyOWUyNTYxMDkyYWQ2Yjk1MTRjNzY3ZmUzYzM2MTMxNDRiNDVmMTQ5NjU0MzM0NmQ5OGFkZjAyMjY3ZDVjZWVmOWEwMGQ5Yjg2OTMwMDA3NjNlM2I5MGFjMTFlOTliMTM4NTczMzQ1Y2MyNjYwNDAwZWIyZTRmM2I2MjhiZGQwZDUzY2Q3NmYyYmY1NjViOTRlNzI5MjdjMWNiNzQ4ZGYyNzk0MjQ4MGU0MjA1MTdiZDg3MTRjYzgwZDFmYWRjMTMyNmVkMDZmN2UwZmExZDgxNmRkYzAzZTZiMjQyNTVlMGQ3ODE5YzE3MWM0MGY2NWUyNzNiODUzMzI0ZWZjZDYzNTZjYWEyMDVjYTJmNTcwZjEzNDk3ODA0NDE1NDczYTFkNjM0YjhmAAAAAAAAAAEAAAABAAAAHgAAADUSEAAuAAAA4QEAADoAAAA1EhAALgAAAOABAACYAAAANRIQAC4AAADfAQAAmAAAADUSEAAuAAAA3gEAAJgAAAA1EhAALgAAAN0BAACYAAAANRIQAC4AAADcAQAAmAAAADUSEAAuAAAA2wEAAJkAAAA1EhAALgAAANoBAACZAAAANRIQAC4AAADZAQAAmQAAADUSEAAuAAAA2AEAAJkAAAA1EhAALgAAANcBAACYAAAANRIQAC4AAADWAQAAmAAAADUSEAAuAAAA1QEAAJkAAAA1EhAALgAAANQBAACYAAAANRIQAC4AAADTAQAAmQAAADUSEAAuAAAA0gEAAJkAAAA1EhAALgAAAM0BAACZAAAANRIQAC4AAADMAQAAmAAAADUSEAAuAAAAywEAAJgAAAA1EhAALgAAAMoBAACYAAAANRIQAC4AAADJAQAAmQAAADUSEAAuAAAAyAEAAJkAAAA1EhAALgAAAMcBAACYAAAANRIQAC4AAADGAQAAmAAAADUSEAAuAAAAxQEAAJgAAAA1EhAALgAAAMQBAACYAAAANRIQAC4AAADDAQAAmQAAADUSEAAuAAAAwgEAAJgAAAA1EhAALgAAAMEBAACYAAAANRIQAC4AAADAAQAAlwAAADUSEAAuAAAAvwEAAJkAAAA1EhAALgAAAL4BAACYAAAANRIQAC4AAAC3AQAAOgAAADUSEAAuAAAAtgEAAJgAAAA1EhAALgAAALUBAACYAAAANRIQAC4AAAC0AQAAmQAAADUSEAAuAAAAswEAAJgAAAA1EhAALgAAALIBAACYAAAANRIQAC4AAACxAQAAmQAAADUSEAAuAAAAsAEAAJgAAAA1EhAALgAAAK8BAACYAAAANRIQAC4AAACuAQAAmQAAADUSEAAuAAAArQEAAJgAAAA1EhAALgAAAKgBAACYAAAANRIQAC4AAACnAQAAmQAAADUSEAAuAAAApgEAAJkAAAA1EhAALgAAAKUBAACYAAAANRIQAC4AAACkAQAAmQAAADUSEAAuAAAAowEAAJgAAAA1EhAALgAAAKIBAACZAAAANRIQAC4AAAChAQAAmAAAADUSEAAuAAAAoAEAAJkAAAA1EhAALgAAAJ8BAACYAAAANRIQAC4AAACeAQAAmQAAADUSEAAuAAAAnQEAAJkAAABub3QgaW1wbGVtZW50ZWQ6IElzb2dlbnkgZm9yIGN1cnZlICBpcyBub3QgaW1wbGVtZW50ZWQAAIQvEAAjAAAApy8QABMAAAA1EhAALgAAAOcBAAAVAAAANRIQAC4AAAD0AQAAEwAAADUSEAAuAAAA9gEAABMAAAA1EhAALgAAAAwCAAAKAAAANRIQAC4AAAAUAgAALgAAADUSEAAuAAAAJgIAAAUAAAA1EhAALgAAADICAAAJAAAANRIQAC4AAAAuAgAACQAAADUSEAAuAAAAKgIAACIAAAA4OTkwZTdhOWFhZWQyZmZlZDczZGJkNzA5MjEyM2Q2ZjI4OTkzMDU0MGQ3NjUxMzM2MjI1ZGMxNzJlNTFiMmNlNTJkYjliYTcwZTBjYzBmNmVhZjc4MDNkZDA3NDQ3YTFmNTQ3NzczNWZkM2Y2NjE3OTJiYTk0NjAwYzg0ZTk3MTUSEAAuAAAAcAIAABIAAABJbnZhbGlkIGVuY29kaW5nSW52YWxpZCBlbmNvZGluZyBmb3IgcG9pbnQgYXQgaW5maW5pdHlJbnZhbGlkIGxlbmd0aCBmb3IgdW5jb21wcmVzc2VkIHBvaW50OiAAAAAiMRAAJwAAAG5vdCBpbXBsZW1lbnRlZDogRGVjb2Rpbmcgb2YgY29tcHJlc3NlZCBHMiBwb2ludHMgbm90IHlldCBzdXBwb3J0ZWQAVDEQAEMAAAA1EhAALgAAAKoCAAANAAAASW52YWxpZCBsZW5ndGggZm9yIGNvbXByZXNzZWQgcG9pbnQ6IAAAALAxEAAlAAAAVW5rbm93biBjaGFpbiBoYXNoOiDgMRAAFAAAAGQxZmVjNzU4YzkyMWNjMjJiMGUxN2U2M2FhZjRiY2I1ZWQ2NjMwNGRlOWNmODA5YmQyNzRjYTczYmFiNGFmNWE2ZTljNzZhNGJjMDllNzZlYWU4OTkxZWY1ZWNlNDVhM2NmMGYyODk2YWRlZTdlYjhiNWYwMWZjYWQzOTEyMjEyYzQzN2UwMDczZTkxMWZiOTAwMjJkM2U3NjAxODNjOGM0YjQ1MGI2YTBhNmMzYWM2YTU3NzZhMmQxMDY0NTFlNWRiMmI2YmZiYjAxYzg2Nzc0OWNhZGZmY2E4OGIzNmMyNGYzMDEyYmEwOWZjNGQzMDIyYzVjMzdkY2UwZjk3N2QzYWRiNWQxODNjNzQ3N2M0NDJiMWYwNDUxNTI3MzFhNzE0ZjJlZGI3NDExOWEyZjJiMGQ1YTdjNzViYTkwMmQxNjM3MDBhNjFiYzIyNGVkZWRkOGU2M2FlZjdiZTFhYWY4ZTkzZDdhOTcxOGIwNDdjY2RkYjNlYjVkNjhiZjQ3N2Q1Yzg5ZjIxYTE3Yzg2M2E3ZjkzN2M2YTZkMTU4NTk0MTRkMmJlMDljZDQ0OGQ0Mjc5YWYzMzFjNWQzZWJscy11bmNoYWluZWQtZzEtcmZjOTM4MDUSEAAuAAAA3wIAAEQAAAA2OGYwMDVlYjhlNmU0Y2EwYTQ3YzhhNzdjZWFhNTMwOWE0Nzk3OGE3YzcxYmM1Y2NlOTYzNjZiNWQ3YTU2OTkzN2M1MjllZWRhNjZjNzI5Mzc4NGE5NDAyODAxYWYzMTI2ZmE1ZWVmMTQzYWFhMTdjNTNiM2MxNTBkOTZhMTgwNTFiNzE4NTMxYWY1NzY4MDNjZmI5YWNmMjliODc3NGE4MTg0ZTYzYzYyZGE4MWRkZjRkNzZmYjBhNjU4OTVjMTc2ZjkzNDk4ZWFjOWNhMzM3MTUwYjQ2ZDIxZGQ1ODY3M2VhNGUzNTgxMTg1Zjg2OTY3MmU1OWZhNGNiMzkwYXBlZGVyc2VuLWJscy1jaGFpbmVkAAA1EhAALgAAAMoCAABLAAAANRIQAC4AAAD5AgAAKwAAAAAAAAABAAAAAQAAAB8AAAA1EhAALgAAAPkCAABFAAAAdG9vbHMvZ2FyYWdhX3JzL3NyYy9jYWxsZGF0YS9mdWxsX3Byb29mX3dpdGhfaGludHMvZ3JvdGgxNi5ycwAAADQ1EAA9AAAAUgAAABAAAAA0NRAAPQAAAFUAAAAQAAAANDUQAD0AAABdAAAALwAAAAAAAABTUDEgcHVibGljIGlucHV0cyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIgYnl0ZXOoNRAAMAAAADQ1EAA9AAAAZAAAAA0AAAA0NRAAPQAAAGwAAAAQAAAANDUQAD0AAABxAAAAIgAAADQ1EAA9AAAAcgAAACIAAAA0NRAAPQAAAHMAAAAiAAAANDUQAD0AAAB0AAAAIgAAADQ1EAA9AAAAdgAAABQAAAA0NRAAPQAAAHwAAAAQAAAAQ2Fubm90IGhhdmUgYm90aCBSSVNDMCBhbmQgU1AxIG1vZGVzIGVuYWJsZWRgNhAALAAAADQ1EAA9AAAAeQAAAA0AAAA0NRAAPQAAAFwBAAAWAAAANDUQAD0AAABeAQAAFgAAADQ1EAA9AAAAYgEAACQAAAA0NRAAPQAAAGMBAAAkAAAANDUQAD0AAABrAQAADgAAADQ1EAA9AAAAcQEAAA0AAABVbnN1cHBvcnRlZCBjdXJ2ZSBJRCBmb3IgdmtfeAAAAAQ3EAAdAAAANDUQAD0AAAB+AQAADgAAADQ1EAA9AAAAkQEAAB0AAAA0NRAAPQAAAJYBAAAiAAAANDUQAD0AAACOAQAAVgAAAEZhaWxlZCB0byBjb252ZXJ0IEpzVmFsdWUgdG8gc3RyaW5ndG9vbHMvZ2FyYWdhX3JzL3NyYy93YXNtX2JpbmRpbmdzLnJzAI83EAAkAAAA/AAAAAwAAABGYWlsZWQgdG8gY29udmVydCBzdHJpbmcgdG8gQmlnVWludEZhaWxlZCB0byBwYXJzZSBHMVBvaW50QmlnVWludHh5RmFpbGVkIHRvIHBhcnNlIEcyUG9pbnRCaWdVaW50eCBpcyBub3QgYW4gYXJyYXl5IGlzIG5vdCBhbiBhcnJheXB1YmxpY19pbnB1dHMgaXMgbm90IGFuIGFycmF5jzcQACQAAABpAQAAEAAAAGljIGlzIG5vdCBhbiBhcnJheQAAAAAAADAAAAAIAAAAIAAAAAAAAAAEAAAABAAAACEAAABHMVBvaW50aXNvX3BvaW50Qk4yNTRCTFMxMl8zODFTRUNQMjU2SzFTRUNQMjU2UjFYMjU1MTlHUlVNUEtJTgAArw4QAGkAAAAkAQAADgAAAEZhaWxlZCB0byBjb252ZXJ0IHZhbHVlIHRvIHU4bWVzc2FnZSBtdXN0IGJlIGEgVWludDhBcnJheQAAACIAAAAEAAAABAAAACMAAACPNxAAJAAAAIUBAAA7AAAAjzcQACQAAACCAQAAOwAAAI83EAAkAAAAnQEAAEEAAACPNxAAJAAAAJoBAABBAAAAcHJvb2ZfanMgaXMgbm90IGFuIG9iamVjdGFicHVibGljSW5wdXRzaW1hZ2VJZEpvdXJuYWxSaXNjMGltYWdlSWRKb3VybmFsUmlzYzAgaXMgbm90IGFuIG9iamVjdGltYWdlSWRpbWFnZUlkIGlzIG5vdCBhIFVpbnQ4QXJyYXlqb3VybmFsam91cm5hbCBpcyBub3QgYSBVaW50OEFycmF5dmtleVB1YmxpY1ZhbHVlc1NwMXZrZXlQdWJsaWNWYWx1ZXNTcDEgaXMgbm90IGFuIG9iamVjdHZrZXl2a2V5IGlzIG5vdCBhIFVpbnQ4QXJyYXlwdWJsaWNWYWx1ZXNwdWJsaWNWYWx1ZXMgaXMgbm90IGEgVWludDhBcnJheXZrX2pzIGlzIG5vdCBhbiBvYmplY3RhbHBoYWJldGFnYW1tYWRlbHRhaWNjdXJ2ZV9pZF9qcyBpcyBub3QgYSBudW1iZXJGYWlsZWQgdG8gcGFyc2UgeSBpbnB1dCBhcyBoZXhGYWlsZWQgdG8gcGFyc2UgeCBpbnB1dCBhcyBoZXgABQAAAAkAAAAJAAAACQAAAAYAAAAIAAAAuDgQAL04EADGOBAAzzgQANg4EADeOBAAAAAAAAQAAAAAAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbnVtLWJpZ2ludC0wLjQuNi9zcmMvYmlndWludC9jb252ZXJ0LnJzAABkOxAAZgAAAPABAAAWAAAAZDsQAGYAAAD/AQAAFgBBwPjAAAulBy9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvY29yZS9zcmMvaXRlci90cmFpdHMvaXRlcmF0b3IucnNAPBAAWAAAAMEHAAAJAAAAdG9vbHMvZ2FyYWdhX3JzL3NyYy9jcnlwdG8vcG9zZWlkb25fYm4yNTQucnOoPBAALAAAAGYAAAAbAAAAqDwQACwAAABwAAAAQgAAAKg8EAAsAAAAcAAAAEsAAAB0b29scy9nYXJhZ2FfcnMvc3JjL2lvLnJzAAAABD0QABkAAAAZAAAAIwAAAAQ9EAAZAAAAGQAAADUAAAAEPRAAGQAAACcAAAAjAAAABD0QABkAAAAnAAAANQAAAAQ9EAAZAAAAKQAAABIAAAAEPRAAGQAAACkAAAAkAAAABD0QABkAAAAqAAAAEgAAAAQ9EAAZAAAAKgAAACQAAAB0b29scy9nYXJhZ2FfcnMvc3JjL3BhaXJpbmcvbXVsdGlfcGFpcmluZ19jaGVjay5ycwAAoD0QADIAAAB7AQAAIQAAAKA9EAAyAAAAfQEAACYAAACgPRAAMgAAAKYBAAAYAAAAoD0QADIAAACnAQAAGQAAAKA9EAAyAAAAqQEAAB4AAAAAAAAABAAAAAAAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L2NvbnZlcnQucnMAADA+EABmAAAA8AEAABYAAAAwPhAAZgAAAP8BAAAWAAAAYXR0ZW1wdCB0byBkaXZpZGUgYnkgemVybwAAALg+EAAZAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbnVtLWJpZ2ludC0wLjQuNi9zcmMvYmlndWludC9kaXZpc2lvbi5ycwDcPhAAZwAAAHAAAAAJAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQAv3weawXcKDixGeXhvo25mPQvH9SjreAqdDY/FjUNd05PkgPrDXvYVbexWopcaB1xFV1JwU1jOd7pYx1NXmEhfAgAMxAsA9Ov9/wIAAAAJdigAAAAMAAAABAAAACkAAAAqAAAAFgBB8P/AAAvxBgEAAAArAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseS9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAL0AQAEsAAADRCgAADgAAAEVycm9yAAAAL0AQAEsAAAB9BQAAGwAAAFBvaW50Tm90SW5TdWJncm91cERpdmlzaW9uQnlaZXJvSW52YWxpZEhleFN0cmluZ0ludmFsaWREZWNTdHJpbmdIZXhTdHJpbmdJc1Rvb0JpZ0VtcHR5U3RyaW5nAAAAAAQAAAAEAAAAAwAAAFJvb3RPZlVuaXR5RXJyb3JJbnZaZXJvRXJyb3IAAAAAZ+YJaoWuZ7ty8248OvVPpX9SDlGMaAWbq9mDHxnN4FsvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAAUEEQAEoAAACoAQAAHwAAAFBBEABKAAAAvgEAAB0AAABJbnZhbGlkUG9pbnRQb2ludCAoKCwgKSwgKCkpIGlzIG5vdCBvbiB0aGUgY3VydmXIQRAACAAAANBBEAACAAAA0kEQAAQAAADQQRAAAgAAANZBEAAWAAAARzIgZ2VuZXJhdG9yIGNvb3JkaW5hdGVzIG5vdCBkZWZpbmVkIGZvciB0aGlzIGN1cnZldG9vbHMvZ2FyYWdhX3JzL3NyYy9hbGdlYnJhL2cycG9pbnQucnMAAABHQhAAJgAAAFcAAAAOAAAAR0IQACYAAABaAAAADgAAACgAAAAMAAAABAAAACQAAABHQhAAJgAAAFsAAAAwAAAAAAAAABAAAAAIAAAALAAAAEdCEAAmAAAAZAAAAB8AAABHQhAAJgAAAGgAAAApAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbnVtLWJpZ2ludC0wLjQuNi9zcmMvYmlndWludC5ycwAA4EIQAF4AAAAsAAAAHQAAAAAAAABHQhAAJgAAALsAAAAcAEHshsEAC4UOAQAAACUAAABHQhAAJgAAALQAAABJAAAAdG9vbHMvZ2FyYWdhX3JzL3NyYy9jYWxsZGF0YS9kcmFuZF90bG9ja19jYWxsZGF0YS5yc0ludmFsaWQgcm91bmQgbnVtYmVyOiAAALhDEAAWAAAAhEMQADQAAAAvAAAAMgAAAIRDEAA0AAAANAAAAA8AAABhc3NlcnRpb24gZmFpbGVkOiBjYWxsX2RhdGEubGVuKCkgPT0gMSArIHNpemUAAACEQxAANAAAADYAAAAFAAAASW52YWxpZCByYW5kb21uZXNzIGFycmF5IGxlbmd0aDogAAAAOEQQACEAAABJbnZhbGlkIG1lc3NhZ2UgYXJyYXkgbGVuZ3RoOiAAAGREEAAeAAAASW52YWxpZCBkYXRhIGFycmF5IGxlbmd0aDogAIxEEAAbAAAAhEMQADQAAABNAAAAFwAAAIRDEAA0AAAASgAAABcAAABzaGEyNTZJQkUtSDNJQkUtSDIvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAADiRBAAWAAAAMEHAAAJAAAASUJFLUg0AAAoAAAADAAAAAQAAAAtAAAAhEMQADQAAACPAAAAGgAAAGFzc2VydGlvbiBmYWlsZWQ6IGxlbiA8PSA0OACEQxAANAAAAHoAAAANAAAA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AAB5AAAAQwAAAJhMEAAsAAAAiQAAABUAAACYTBAALAAAAIkAAAAsAAAAmEwQACwAAACJAAAAEAAAAEludmFsaWQgY3VydmUgSUQ6IAAANE0QABIAAABubyBlbnRyeSBmb3VuZCBmb3Iga2V5dG9vbHMvZ2FyYWdhX3JzL3NyYy9kZWZpbml0aW9ucy5yc2ZNEAAiAAAAowAAADsAAAAweDMwNjQ0RTcyRTEzMUEwMjlCODUwNDVCNjgxODE1ODVEOTc4MTZBOTE2ODcxQ0E4RDNDMjA4QzE2RDg3Q0ZENDcweDFBMDExMUVBMzk3RkU2OUE0QjFCQTdCNjQzNEJBQ0Q3NjQ3NzRCODRGMzg1MTJCRjY3MzBEMkEwRjZCMEY2MjQxRUFCRkZGRUIxNTNGRkZGQjlGRUZGRkZGRkZGQUFBQjB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkMyRjB4RkZGRkZGRkYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjB4N0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRDB4MzA2NDRFNzJFMTMxQTAyOUI4NTA0NUI2ODE4MTU4NUQyODMzRTg0ODc5Qjk3MDkxNDNFMUY1OTNGMDAwMDAwMXRvb2xzL2dhcmFnYV9ycy9zcmMvZnJvYmVuaXVzLnJzRE8QACAAAAAPAAAAOQAAAGFzc2VydGlvbiBmYWlsZWQ6IHguY29lZmZpY2llbnRzLmxlbigpIDw9IGV4dF9kZWdyZWVETxAAIAAAABAAAAAFAAAARE8QACAAAAAXAAAADgAAAERPEAAgAAAAFQAAACwAAAAxMTIxZDhjOGRhZWYzZWVlMWU4MWIyNTIyZWM1ZWIyOGRlZDY4OTVlMWNkZmRlNmE0M2Y1ZGFhOTcxZjNmYTY1OTU1MjE3ZTQwMGRjOTM1MWU3NzRlMzRlMmFjMDZlYWQ0MDAwZDE0ZDFlMjQyYjI5YzU2N2U5YzM4NWNlNDgwYTcxYTI0MmI3MTkwNjJmNjczN2I4NDgxZDIyYzY5MzRjZTg0NGQ3MmYyNTBmZDI4ZDEwMmMwZDE0N2IyZjRkNTIxYTczNTk4MDkwOTRiZDVjOGUxYjljMjJkODEyNDZmZmMyZTc5NGUxNzY0M2FjMTk4NDg0YjhkOTA5NGFhODI1MzYyMTQzNmQ0OGZjYjUwY2M2MGRkNGVmMWU2OWEwYzFmMGRkMjk0OWZhNmRmN2I0NGNiYjI1OWVmN2NiNThkNWVkMTg4NTdhNThmM2I1YmIzMDM4YTQzMTFhODY5MTlkOWM3YzZjMTVmODhhNGY0ZjA4MzEzNjRjZjM1Zjc4Zjc3MTJjODRiYmFkMjdjMzY3MTU2MmI3YWRlZmQ0NDAzOGFiM2MwYmJhZDk2ZmMwMDhlN2Q2OTk4YzgyZjdmYzA0OGJjMzNiMWM3MGU0ZmQxMWI2ZDFlYWI2ZmNkMThiOTlhZDRhZmQwOTZhODY5N2UwYzljMzZkOGNhMzMzOWE3YjUxYjAwNzI5NGE1NWFjY2NlMTNmZTA4YmVhNzMzMDVmZjZiZGFjNzdjNTM3MWM1NDZkNDI4NzgwYTZlM2RjZmE4MjE1ZDQyZTdhYzdiZDE3Y2VmZTg4ZGQ4ZTY5NjViM2FkYWU5MmM5NzRmNTAxZmU4MTE0OTNkNzI1NDNhMzk3NzMwNjQ0ZTcyZTEzMWEwMjliODUwNDViNjgxODE1ODVkOTc4MTZhOTE2ODcxY2E4ZDNjMjA4YzE2ZDg3Y2ZkNDYyNDY5OTZmM2I0ZmFlN2U2YTYzMjdjZmUxMjE1MGI4ZTc0Nzk5Mjc3OGVlZWM3ZTVjYTVjZjA1ZjgwZjM2MmFjMTJkN2MwYzNlZDQyYmU0MTlkMmIyMmNhMjJjZWNhNzAyZWViODhjMzZhOGIyNjRkZGU3NWY0Zjc5OGQ2YTNmMjE2YzllNTUwNjFlYmFlMjA0YmE0Y2M4YmQ3NWEwNzk0MzJhZTJhMWQwYjdjOWRjZTE2NjVkNTFjNjQwZmNiYTJjMzhkY2UyN2UzYjJjYWUzM2NlNzM4YTE4NGM4OWQ5NGEwZTc4NDA2YjQ4Zjk4YTdiNGY0NDYzZTNhN2RiYTA3YzAzY2JjYWM0MTA0OWEwNzA0YjVhN2VjNzk2ZjJiMjE4MDdkYzk4ZmEyNWJkMjgyZDM3ZjYzMjYyM2IwZTNmMjBlMTI5ZTQ3YzkzNjNhYTdiNTY5ODE3ZTA5NjZjYmE1ODIwOTZmYTdhMTY0MDgwZmFlZDFmMGQyNDI3NWEyYzE0NWVkYmU3ZmQ4YWVlOWYzYTgwYjAzYjBiMWM5MjM2ODVkMmVhMWJkZWM3NjNjMTNiNDcxMWNkMmI4MTI2M2RmOTJjNWI5NmUzOTE0NTU5ODk3YzZhZDQxMWZiMjViNzVhZmI3ZjhiMWMxYTU2NTg2ZmY5M2UwODBmOGJjMTJhY2YyY2E3NmZkMDY3NWEyN2ZiMjQ2Yzc3MjlmN2RiMDgwY2I5OTY3OGUyYWMwMjRjNmI4ZWU2ZTBjMmM0YjE1NjNkYmRlM2JkNmQzNWJhNDUyM2NmN2RhNGU1MjVlMmJhNmEzMTUxNTAwMDU0NjY3ZjgxNDBjNmEzZjJkOWYzMDY0NGU3MmUxMzFhMDI5NWU2ZGQ5ZTdlMGFjY2NiMGMyOGYwNjlmYmI5NjZlM2RlNGJkNDRlNTYwN2NmZDQ5MzA2NDRlNzJlMTMxYTAyOTVlNmRkOWU3ZTBhY2NjYjBjMjhmMDY5ZmJiOTY2ZTNkZTRiZDQ0ZTU2MDdjZmQ0ODU5ZTI2YmNlYTBkNDhiYWNkNGYyNjNmMWFjZGI1YzRmNTc2MzQ3MzE3N2ZmZmZmZTU5ZTI2YmNlYTBkNDhiYWNkNGYyNjNmMWFjZGI1YzRmNTc2MzQ3MzE3N2ZmZmZmZjEzZDBjMzY5NjE1ZjdiYjBiMmJkZmE4ZmVmODVmYTA3MTIyYmRlOGQ2N2RmYzhmYWJkMzU4MWFkODQwZGRkNzYxOGEwZjQyMTlmNGZkZmY2ZmMyYmY1MzFlYjMzMWEwNTNhMzU3NDRjYWMyODVhZjU2ODVkM2Y5MGVhY2Y3YTY2YzNhNWU5YzQ2MmE2NTQ3NzljM2UwNTBjOWNhMmE0Mjg5MDhhODEyNjRlMmI1YTViZjIyZjY3NjU0ODgzYWU2MmNlMDJhYTVmOWJmOGNkNjViZGQyMDU1YzI1NWNmOWQ5ZTA4YzFkOTM0NTU4MmNjOTJmZDk3M2M3NGJkNzdmNDE3ZGVkNDE5ZWQ3YmU0Zjk3ZmFjMTQ5YmZhZWZiYWMxMWIxNTU0OThkZTIyN2I4NTBhZWEzZjIzNzkwNDA1ZDYxYmZlN2IyMTRjMDI5NDI0MmZiODFhOGRjY2Q4YTliNDQ0MWQ2NGYzNDE1MGE3OTc1M2ZiMGNkMzFjYzk5Y2MwNjk3YjljNTIzZTAzOTBlZDE1ZGEwZWM5N2E5YjgzNDY1MTMyOTdiOWVmYWYwZjBmMWEyMjhmMGQ1NjYyZmJkN2EwZTA1MmYyYjFjNDQzYjUxODZkNmFjNGM3MjNiODVkM2Y3OGEzMTgyZDJkYjBjNDEzOTAxYzMyYjBjNmZlMWI3NmEzN2ZiYTg1ZjNjZDVkYzc5ODI0YTM3OTI1OTczNTZjODkyYzM5YzBkMDZiMjIwNTAwOTMzOTQ1MjY3ZmFiZjhiNjBiZTc3ZDczMDZjYmVlZTMzNTc2MTM5ZDdmMDNhNWUzOTdkNDM5ZWM3Njk0YWEyYmY0YzBjMTAxMWM5MzhiMDk3ZmQyMjQ3OTA1OTI0YjI2OTFmYjVlNTY4NTU1OGMwNDAwOTIwMTkyN2VlYjBhNjk1NDZmMWZkMTRmMWRlNDFiM2QxNzY2ZmE5ZjMwZTZkZWMyNjA5NGYwZmRmMzFiZjk4ZmYyNjMxMzgwY2FiMmJhYWE1ODZkZTI0MjllZmQ2OWIwNzNhZTIzZThjNjU2NWI3YjcyZTFiMGU3OGMyN2YwMzhmMTRlNzdjZmQ5NWEwODNmNGMyNjEyOGE0MTFiNjM0ZjA5YjhmYjE0YjkwMGU5NTA3ZTkzMjc2MDBlY2M3ZDhjZjZlYmFiOTRkMGNiM2IyNTk0YzY0MjNkNWU5OTllMTkxMGExMmZlYjBmNmVmMGNkMjFkMDRhNDRhOWUwODczN2Y5NmU1NWZlM2VkOWQ3MzBjMjM5ZjE0NjVkMzUxOTUyZjBjMDU4ODk4MmIyOGI0YThhZWE5NTM2NDA1OWUyNzIxMjJmNWU4MjU3ZjQzYmJiMzYwODcxNmRiMzY2YTU5YjFkZDBiOWZiMWIyMjgyYTQ4NjMzZDNlMmRkYWVhMjAwMjgwMjExZjI1MDQxMzg0MjgyNDk5MjhjMzZlMWZlZTdmZGJlNjAzMzdkODRiYmNiYTM0YTUzYTQxZjFlZTUwNDQ5Y2RjNzgwY2ZiZmFhNWNjMzY0OQAAAAAAAQAAAAEAAAA4AAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQBETxAAIAAAAKYAAAB1AAAARE8QACAAAAClAAAAdAAAAERPEAAgAAAAogAAAHUAAABETxAAIAAAAKEAAAB0AAAARE8QACAAAACeAAAAdAAAAERPEAAgAAAAnQAAAHQAAABETxAAIAAAAJoAAAB0AAAARE8QACAAAACZAAAAcwAAAERPEAAgAAAAlgAAAHQAAABETxAAIAAAAJUAAAByAAAARE8QACAAAACSAAAAdAAAAERPEAAgAAAAjwAAAHUAAABETxAAIAAAAI4AAABzAAAARE8QACAAAACLAAAAdAAAAERPEAAgAAAAigAAAHQAAABETxAAIAAAAIcAAAB0AAAARE8QACAAAACGAAAAcwAAAERPEAAgAAAAgwAAAHQAAABETxAAIAAAAIIAAABzAAAARE8QACAAAAB/AAAAdAAAAERPEAAgAAAAfgAAAHQAAABETxAAIAAAAHsAAAA2AAAARE8QACAAAAB6AAAANQAAAERPEAAgAAAAdQAAAGUAAABETxAAIAAAAHIAAABlAAAARE8QACAAAABvAAAAdAAAAERPEAAgAAAAbAAAAHQAAABETxAAIAAAAGkAAAB0AAAARE8QACAAAABmAAAANQAAAERPEAAgAAAAYwAAAGQAAABETxAAIAAAAGAAAABkAAAARE8QACAAAABdAAAAdAAAAERPEAAgAAAAWgAAAHQAAABETxAAIAAAAFcAAAB0AAAARE8QACAAAABUAAAANQAAAERPEAAgAAAATwAAAHUAAABETxAAIAAAAE4AAAB0AAAARE8QACAAAABLAAAAdAAAAERPEAAgAAAASgAAAHQAAABETxAAIAAAAEcAAABzAAAARE8QACAAAABGAAAAcwAAAERPEAAgAAAAQwAAAHMAAABETxAAIAAAAEIAAAB0AAAARE8QACAAAAA/AAAAdAAAAERPEAAgAAAAPgAAAHQAAABETxAAIAAAADsAAAB0AAAARE8QACAAAAA4AAAAdQAAAERPEAAgAAAANwAAAHQAAABETxAAIAAAADQAAAB0AAAARE8QACAAAAAzAAAAdAAAAERPEAAgAAAAMAAAAHQAAABETxAAIAAAAC8AAAB0AAAARE8QACAAAAAsAAAAcwAAAERPEAAgAAAAKwAAAHQAAABETxAAIAAAACgAAAB0AAAARE8QACAAAAAnAAAAdAAAAERPEAAgAAAAJAAAADYAAABETxAAIAAAACMAAAA1AAAAMjE4MDg5NTkzY2JmNjI2MzUzOTQ3ZDViMWZkMGM2ZDY2YmIzNGJjNzU4NWY1YWJkZjhmMTdiNTBlMTJjNDdkNjVjZTUxNGE3YzE2N2IwMjdiNjAwZmViZGIyNDQ3MTRjNTVmMTk2NzJmZGY3NmNlNTFiYTY5YzYwNzZhMGY3N2VhZGRiM2E5M2JlNmY4OTY4OGRlMTdkODEzNjIwYTAwMDIyZTAxZmZmZmZmZmVmZmZmZDVlMWMwODZmZmU4MDE2ZDA2M2M2ZGFkN2EyZmZmYzkwNzJiYjU3ODVhNjg2YmNlZmVlZGMyZTAxMjQ4MzhiZGNjZjMyNWVlNWQ4MGJlOTkwMjEwOWY3ZGJjNzk4MTIxYTAxMTFlYTM5N2ZlNjk5ZWMwMjQwODY2M2Q0ZGU4NWFhMGQ4NTdkODk3NTlhZDQ4OTdkMjk2NTBmYjg1ZjliNDA5NDI3ZWI0ZjQ5ZmZmZDhiZmQwMDAwMDAwMGFhYWQxYTAxMTFlYTM5N2ZlNjk5OGNlOGQ5NTY4NDVlMTAzM2VmYTNiZjc2MWY2NjIyZTlhYmM5ODAyOTI4YmZjOTEyNjI3YzRmZDdlZDNmZmZmYjVkZmIwMDAwMDAwMWFhYWZiNjU5ZmIyMDI3NGJmYjFiZThmZjRkNjkxNjNjMDhiZTczMDJjNDgxODE3MWZkZDE3ZDViZTliMWQzODBhY2Q4Yzc0N2NkYzRhZmYwZTY1MzYzMWY1ZDMwMDBmMDIyYzFhMDExMWVhMzk3ZmU2OWE0YjFiYTdiNjQzNGJhY2Q3NjQ3NzRiODRmMzg1MTJiZjY3MzBkMmEwZjZiMGY2MjQxZWFiZmZmZWIxNTNmZmZmYjlmZWZmZmZmZmZmYWFhYWZjM2UyYjM2YzRlMDMyODhlOWU5MDIyMzFmOWZiODU0YTE0Nzg3YjZjN2IzNmZlYzBjOGVjOTcxZjYzYzVmMjgyZDVhYzE0ZDZjN2VjMjJjZjc4YTEyNmRkYzRhZjMxZjg3YzU2NmQ4OWMwNjUxMWQzZDIwNDQ2M2YzZjcwYTk0MjhmMGY2ZDhmNjZkZmQ4MTkxZDkyZTNlYzc4YmU1MDVhYjU4MjlhZDhmZDg0NTllZjE0MjRkYmI4OTVlNjFhMDExMWVhMzk3ZmU2OTllYzAyNDA4NjYzZDRkZTg1YWEwZDg1N2Q4OTc1OWFkNDg5N2QyOTY1MGZiODVmOWI0MDk0MjdlYjRmNDlmZmZkOGJmZDAwMDAwMDAwYWFhYzZhZjBlMDQzN2ZmNDAwYjY4MzFlMzZkNmJkMTdmZmU0ODM5NWRhYmMyZDM0MzVlNzdmNzZlMTcwMDkyNDFjNWVlNjc5OTJmNzJlYzA1ZjRjODEwODRmYmVkZTNjYzA5NWYxOTY3MmZkZjc2Y2U1MWJhNjljNjA3NmEwZjc3ZWFkZGIzYTkzYmU2Zjg5Njg4ZGUxN2Q4MTM2MjBhMDAwMjJlMDFmZmZmZmZmZWZmZmUxNDRlNDIxMTM4NDU4NmMxNmJkM2FkNGFmYTk5Y2M5MTcwZGYzNTYwZTc3OTgyZDBkYjQ1ZjM1MzY4MTRmMGJkNTg3MWMxOTA4YmQ0NzhjZDFlZTYwNTE2N2ZmODI5OTVlOWI3MjM4MzcwYjI2ZTg4YzhiYjJkZmIxZTdlYzRiN2Q0NzFmM2NkYjZkZjJlMjRmNWIxNDA1ZDk3OGViNTY5MjM3ODMyMjY2NTRmMTlhODNjZDBhMmNmZmYwYTg3ZgAARE8QACAAAADWAAAAlAAAAERPEAAgAAAA1QAAAJQAAABETxAAIAAAANIAAACFAAAARE8QACAAAADPAAAAkwAAAERPEAAgAAAAzAAAAJQAAABETxAAIAAAAMsAAACUAAAARE8QACAAAADIAAAAkwAAAERPEAAgAAAAxwAAAJIAAABETxAAIAAAAMQAAACUAAAARE8QACAAAADBAAAAlAAAAERPEAAgAAAAwAAAAJMAAABETxAAIAAAAL0AAACVAAAARE8QACAAAAC8AAAAlAAAAERPEAAgAAAAuQAAAJMAAABETxAAIAAAALYAAACEAAAARE8QACAAAACzAAAAlAAAAERPEAAgAAAAsgAAAJQAAABETxAAIAAAAK8AAAA1AAAARE8QACAAAACuAAAANQAAAG5vdCBpbXBsZW1lbnRlZABETxAAIAAAANoAAAAKAAAAQ3VydmUgSUQgIG5vdCBzdXBwb3J0ZWQAuGQQAAkAAADBZBAADgAAAHRvb2xzL2dhcmFnYV9ycy9zcmMvcGFpcmluZy9maW5hbF9leHBfd2l0bmVzcy9tb2QucnPgZBAANAAAAJEAAAAFAAAAdG9vbHMvZ2FyYWdhX3JzL3NyYy9wb3NlaWRvbl90cmFuc2NyaXB0LnJzAAAkZRAAKgAAAFQAAAANAAAAJGUQACoAAABXAAAAIQAAACRlEAAqAAAAZAAAAD4AAAAkZRAAKgAAAGEAAAA2AAAAJGUQACoA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aXNvX3BvaW50ID09IG90aGVyLmlzb19wb2ludHRvb2xzL2dhcmFnYV9ycy9zcmMvYWxnZWJyYS9nMXBvaW50LnJzAAAAM3sQACYAAAAwAAAACQAAADN7EAAmAAAAQwAAADoAAAAAAAAAEAAAAAgAAABDAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQAzexAAJgAAAE4AAAAKAAAAAAAAAAQAAAAAAAAAAQAAAAAAAAAEAAAAAAAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvY29udmVydC5ycwAA5HsQAGYAAADwAQAAFgAAADN7EAAmAAAAlgAAADYAAAA/AAAADAAAAAQAAAA8AAAAM3sQACYAAACqAAAANwAAAGFzc2VydGlvbiBmYWlsZWQ6ICFwb2ludHMuaXNfZW1wdHkoKTN7EAAmAAAArgAAAAkAAAAzexAAJgAAAK8AAAAJAAAAM3sQACYAAACyAAAANwAAADc3OUJFNjY3RUY5RENCQkFDNTVBMDYyOTVDRTg3MEIwNzAyOUJGQ0RCMkRDRTI4RDk1OUYyODE1QjE2RjgxNzk4NDgzQURBNzcyNkEzQzQ2NTVEQTRGQkZDMEUxMTA4QThGRDE3QjQ0OEE2ODU1NDE5OUM0N0QwOEZGQjEwRDRCOEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDE1MzYzQUQ0Q0MwNUMzMEUwQTUyNjFDMDI4ODEyNjQ1QTEyMkUyMkVBMjA4MTY2NzhERjAyOTY3QzFCMjNCRDcyAAAAAAAAAAEAAAABAAAARAAAAHRvb2xzL2dhcmFnYV9ycy9zcmMvZGVmaW5pdGlvbnMucnMAAPR9EAAiAAAA2AAAABIAAAD0fRAAIgAAAMwAAAAOAAAAZmZmZmZmZmYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzVhYzYzNWQ4YWEzYTkzZTdiM2ViYmQ1NTc2OTg4NmJjNjUxZDA2YjBjYzUzYjBmNjNiY2UzYzNlMjdkMjYwNGI2QjE3RDFGMkUxMkM0MjQ3RjhCQ0U2RTU2M0E0NDBGMjc3MDM3RDgxMkRFQjMzQTBGNEExMzk0NUQ4OThDMjk2NEZFMzQyRTJGRTFBN0Y5QjhFRTdFQjRBN0MwRjlFMTYyQkNFMzM1NzZCMzE1RUNFQ0JCNjQwNjgzN0JGNTFGNUZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQkNFNkZBQURBNzE3OUU4NEYzQjlDQUMyRkM2MzI1NTH0fRAAIgAAAPcAAAAOAAAAMHg1ZDRlYWNkM2E1YjliZWU2MzE5N2UxMGQ2MTdiM2RkNjZiYjhiNjVkMGNhNTJhZjdhYzcxZTE4ZWY4YmMxNzJkMHgxZDExYjI5YmNmZDBiM2UwNTUwZGRiMDYxMDU3ODBkNWY1NDgzMTk3NmI5ZmJjMzI5MDA0ZWJjMWYzNjRiMmE0MmE3OGRkMGZkMDJjMDMzOWYwMGI4ZjAyZjFjMjA2MThhOWMxM2ZkZjBkNjE3YzlhY2E1NWM4OWIwMjVhZWYzNTI5YzY0NGE1YzcxZGEyMmViZTQ4M2JhNTYzNzk4MzIzY2Y2ZmQwNjE4MDcxMzE2NTliNzgzMGYzZjYyYzFkMTQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0REVGOURFQTJGNzlDRDY1ODEyNjMxQTVDRjVEM0VE9H0QACIAAAAcAQAADgAAADAweDMwNjQ0ZTcyZTEzMWEwMjliODUwNDViNjgxODE1ODVkMjgzM2U4NDg3OWI5NzA5MTQzZTFmNTkzZWZmZmZmZjAweDEweDJDRjEzNUU3NTA2QTQ1RDYzMkQyNzBENDVGMTE4MTI5NDgzM0ZDNDhEODIzRjI3MkMzMDY0NEU3MkUxMzFBMDI5Qjg1MDQ1QjY4MTgxNTg1RDk3ODE2QTkxNjg3MUNBOEQzQzIwOEMxNkQ4N0NGRDQ3AAAA9H0QACIAAAA9AQAADgAAADJCMTQ5RDQwQ0VCOEFBQUU4MUJFMTg5OTFCRTA2QUMzQjVCNEM1RTU1OURCRUZBMzMyNjdFNkRDMjRBMTM4RTUwMDk3MTNCMDNBRjBGRUQ0Q0QyQ0FGQURFRUQ4RkRGNEE3NEZBMDg0RTUyRDE4NTJFNEEyQkQwNjg1QzMxNUQyMTIxODAwREVFRjEyMUYxRTc2NDI2QTAwNjY1RTVDNDQ3OTY3NDMyMkQ0Rjc1RURBREQ0NkRFQkQ1Q0Q5OTJGNkVEMTk4RTkzOTM5MjBENDgzQTcyNjBCRkI3MzFGQjVEMjVGMUFBNDkzMzM1QTlFNzEyOTdFNDg1QjdBRUYzMTJDMjEyQzg1RUE1REI4QzZERUI0QUFCNzE4MDhEQ0I0MDhGRTNEMUU3NjkwQzQzRDM3QjRDRTZDQzAxNjZGQTdEQUEwOTA2ODlEMDU4NUZGMDc1RUM5RTk5QUQ2OTBDMzM5NUJDNEIzMTMzNzBCMzhFRjM1NUFDREFEQ0QxMjI5NzVCMzA2NDRFNzJFMTMxQTAyOUI4NTA0NUI2ODE4MTU4NUQyODMzRTg0ODc5Qjk3MDkxNDNFMUY1OTNGMDAwMDAwMVIAAO4AAAFSAAAAAADuAAAAAAABAAAA//8A/wAAAP8AAAABAAD/AP8AAAABAP8AAAAA/wAAAQD/AAABAAAAAAD/AAABAQAA/wAAAP8A/wAAAAEA/wABQjNDNEQ3OUQ0MUE5MTc1ODVCRkM0MTA4OEQ4REFBQTc4QjE3RUE2NkI5OUM5MERE9H0QACIAAAB8AQAAFgAAAPR9EAAiAAAAbAEAAA4AAAA0MTdGMUQzQTczMTk3RDc5NDI2OTU2MzhDNEZBOUFDMEZDMzY4OEM0Rjk3NzRCOTA1QTE0RTNBM0YxNzFCQUM1ODZDNTVFODNGRjk3QTFBRUZGQjNBRjAwQURCMjJDNkJCMDhCM0Y0ODFFM0FBQTBGMUEwOUUzMEVENzQxRDhBRTRGQ0Y1RTA5NUQ1RDAwQUY2MDBEQjE4Q0IyQzA0QjNFREQwM0NDNzQ0QTI4ODhBRTQwQ0FBMjMyOTQ2QzVFN0UxMjRBQTJCMkYwOEYwQTkxMjYwODA1MjcyREM1MTA1MUM2RTQ3QUQ0RkE0MDNCMDJCNDUxMEI2NDdBRTNEMTc3MEJBQzAzMjZBODA1QkJFRkQ0ODA1NkM4QzEyMUJEQjgxM0UwMkI2MDUyNzE5RjYwN0RBQ0QzQTA4ODI3NEY2NTU5NkJEMEQwOTkyMEI2MUFCNURBNjFCQkRDN0Y1MDQ5MzM0Q0YxMTIxMzk0NUQ1N0U1QUM3RDA1NUQwNDJCN0VDRTVENTI3NzI3RDZFMTE4Q0M5Q0RDNkRBMkUzNTFBQURGRDlCQUE4Q0JERDNBNzZENDI5QTY5NTE2MEQxMkM5MjNBQzlDQzNCQUNBMjg5RTE5MzU0ODYwOEI4MjgwMTYwNkM0QTAyRUE3MzRDQzMyQUNEMkIwMkJDMjhCOTlDQjNFMjg3RTg1QTc2M0FGMjY3NDkyQUI1NzJFOTlBQjNGMzcwRDI3NUNFQzFEQTFBQUE5MDc1RkYwNUY3OUJFNzNFREE3NTMyOTlEN0Q0ODMzMzlEODA4MDlBMUQ4MDU1M0JEQTQwMkZGRkU1QkZFRkZGRkZGRkYwMDAwMDAwMQIAAP4AAAECAAAAAAD+AAAAAAABAEGyjcIACwEBAEHSjcIAC+4IAQAAAAAAAAAAAQAAAQABAUFDNDVBNDAxMDAwMUE0MDIwMDAwMDAwMEZGRkZGRkZGMTQ0Njk4QTNCOEU5NDMzRDY5M0EwMkM5NkQ0OTgyQjBFQTk4NTM4M0VFNjZBOEQ4RTg5ODFBRUZEODgxQUM5ODkzNkY4REEwRTBGOTdGNUNGNDI4MDgyRDU4NEMxRDEyRTI5MDhEMTE2ODgwMzAwMThCMTJFODc1M0VFRTNCMjAxNkMxRjBGMjRGNDA3MEEwQjlDMTRGQ0VGMzVFRjU1QTIzMjE1QTMxNkNFQUE1RDFDQzQ4RTk4RTE3MkJFMEIAAAD0fRAAIgAAAKgBAABQAAAA9H0QACIAAACZAQAADgAAADB4N0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQzB4NTIwMzZDRUUyQjZGRkU3MzhDQzc0MDc5Nzc3OUU4OTgwMDcwMEE0RDQxNDFEOEFCNzVFQjREQ0ExMzU5NzhBM/R9EAAiAAAA4QEAABIAAAD0fRAAIgAAANwBAAASAAAA9H0QACIAAAABAgAAEgAAAPR9EAAiAAAA/AEAABIAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50LnJzAAAAAAAABAAAAAAAAACoiBAAXgAAAGMDAAAXAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbnVtLWJpZ2ludC0wLjQuNi9zcmMvYmlndWludC9jb252ZXJ0LnJzAAAkiRAAZgAAAPABAAAWAAAAJIkQAGYAAAD/AQAAFgAAAGF0dGVtcHQgdG8gZGl2aWRlIGJ5IHplcm8AAACsiRAAGQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvZGl2aXNpb24ucnMA0IkQAGcAAABwAAAACQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2Jsb2NrLWJ1ZmZlci0wLjEwLjQvc3JjL2xpYi5ycwAAAEiKEABdAAAArgAAABQAAAAvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzuIoQAFgAAADBBwAACQAAACmgMeFyTmQwXViBgbZFULiRcLl5SOgzKAEAAPCT9eFDAEHglsIAC3UvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L3N0ZC9zcmMvdGhyZWFkL2xvY2FsLnJzAGCLEABPAAAAFQEAABkAAABGAAAADAAAAAQAAABHAAAASAAAABYAQeCXwgALwBEBAAAASQAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2FsbG9jL3NyYy9zdHJpbmcucnMAAB+MEABLAAAA0QoAAA4AAAAvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL2l0ZXIucnNjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlRXJyb3IAAB+MEABLAAAAfQUAABsAAABEaXZpc2lvbkJ5WmVybwAAAAAAAAQAAAAEAAAAAwAAAFJvb3RPZlVuaXR5RXJyb3JJbnZaZXJvRXJyb3IvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAASI0QAEoAAACoAQAAHwAAAEiNEABKAAAAvgEAAB0AAAB8jBAATgAAAPQFAAAVAAAAMzA2NDRlNzJlMTMxYTAyOWI4NTA0NWI2ODE4MTU4NWQyODMzZTg0ODc5Yjk3MDkxNDNlMWY1OTNmMDAwMDAwMXRvb2xzL2dhcmFnYV9ycy9zcmMvY2FsbGRhdGEvZnVsbF9wcm9vZl93aXRoX2hpbnRzL3prX2hvbmsucnMAAAAEjhAAPQAAAHMAAAAKAAAASgAAAAwAAAAEAAAASwAAAASOEAA9AAAAogAAAB8AAAAEjhAAPQAAAJ0AAAAUAAAASW52YWxpZCBwdWJsaWMgaW5wdXRzIHNpemU6IISOEAAcAAAASW52YWxpZCBsb2cgY2lyY3VpdCBzaXplOiAAAKiOEAAaAAAASW52YWxpZCBwdWJsaWMgaW5wdXRzIG9mZnNldDogAADMjhAAHgAAAEludmFsaWQgaW5wdXQgbGVuZ3RoOiAgKGV4cGVjdGVkICkAAPSOEAAWAAAACo8QAAsAAAAVjxAAAQAAAASOEAA9AAAA3QAAABMAAAAEjhAAPQAAAAkBAAAKAAAABI4QAD0AAAAOAQAAEwAAAEludmFsaWQgcHVibGljIGlucHV0IGJ5dGVzIGxlbmd0aDogAGCPEAAjAAAABI4QAD0AAABMAQAASwAAAASOEAA9AAAATAEAABsAAAAEjhAAPQAAAD8BAAA8AAAABI4QAD0AAAA/AQAAFAAAAEludmFsaWQgcHJvb2YgYnl0ZXMgbGVuZ3RoOiDMjxAAHAAAAAqPEAALAAAAFY8QAAEAAAAEjhAAPQAAAGQBAAANAAAABI4QAD0AAAB6AQAAHwAAAASOEAA9AAAAlAEAAA0AAAAEjhAAPQAAAJoBAAAmAAAABI4QAD0AAACqAQAAKQAAAASOEAA9AAAAwAEAAC4AAAAEjhAAPQAAAMoBAAATAAAABI4QAD0AAADXAQAACQAAAASOEAA9AAAA1AEAADsAAAAEjhAAPQAAANEBAAAXAAAABI4QAD0AAADQAQAAFAAAAEwAAAAMAAAABAAAAAoAAAAEjhAAPQAAANEBAAA2AAAABI4QAD0AAADKAQAAPAAAAASOEAA9AAAAxgEAAC0AAAAEjhAAPQAAAMMBAAAiAAAABI4QAD0AAAC8AQAAKgAAAASOEAA9AAAAtgEAAB8AAAAEjhAAPQAAALEBAAAXAAAABI4QAD0AAACwAQAAHwAAAASOEAA9AAAAsQEAADYAAAAEjhAAPQAAAKYBAAAfAAAABI4QAD0AAAChAQAAFwAAAASOEAA9AAAAoAEAABQAAAAEjhAAPQAAAKEBAAA2AAAABI4QAD0AAACXAQAADgAAAE0AAAAMAAAABAAAAE4AAAAEjhAAPQAAAI8BAABHAAAABI4QAD0AAACMAQAAIgAAAASOEAA9AAAAhAEAABcAAAAEjhAAPQAAAIMBAAAiAAAABI4QAD0AAACHAQAAFgAAAASOEAA9AAAAeAEAAB8AAAAEjhAAPQAAAHMBAAAXAAAABI4QAD0AAAByAQAAFAAAAASOEAA9AAAAcwEAADYAAAAEjhAAPQAAAGcBAAAOAAAASW52YWxpZCBwcm9vZiBsZW5ndGg6IAAAUJIQABYAAAAKjxAACwAAABWPEAABAAAAUHVibGljIGlucHV0cyBsZW5ndGggbWlzbWF0Y2g6IHByb29mICwgdmsgAACAkhAAJQAAAKWSEAAFAAAARmllbGQgZXJyb3I6IAAAALySEAANAAAAQ29uc2lzdGVuY3kgY2hlY2sgZmFpbGVkBI4QAD0AAAC5AgAAFQAAAASOEAA9AAAA/wIAACgAAAAEjhAAPQAAAAQDAAAiAAAABI4QAD0AAAA2AwAADAAAAASOEAA9AAAANwMAAAwAAAAEjhAAPQAAADgDAAAMAAAABI4QAD0AAAA5AwAADAAAAAAAAADw/f//////B//////////////////////h/////////zAxMThDNEQ1QjgzN0JDQzJCQzg5QjVCMzk4QjU5NzRFOUY1OTQ0MDczQjMyMDc4QjdFMjMxRkVDOTM4ODgzQjApoDHhck5kMF1YgYG2RVC4jcpxaJFqgZdH/XzYFowgPDI2MEUwMUIyNTFGNkYxQzdFN0ZGNEU1ODA3OTFERUU4RUE1MUQ4N0EzNThFMDM4QjRFRkUzMEZBQzA5MzgzQzEyMkZFQkRBM0MwQzA2MzJBNTY0NzVCNDIxNEU1NjE1RTExRTZERDNGOTZFNkNFQTI4NTRBODdENERBQ0M1RTU1MDRGQzYzNjlGNzExMEZFM0QyNTE1NkMxQkI5QTcyODU5Q0YyQTA0NjQxRjk5QkE0RUU0MTNDODBEQTZBNUZFNABB4KrCAAujBgIAAAAAAAAABI4QAD0AAABsAwAADwAAAASOEAA9AAAAbQMAAA8AAAAEjhAAPQAAAG4DAAAPAAAATwAAAAwAAAAEAAAAUAAAAASOEAA9AAAAiwIAAA4AAAAEjhAAPQAAAGMCAAAKAAAABI4QAD0AAABcAgAACgAAAASOEAA9AAAATQIAAAoAAAAEjhAAPQAAAMQCAAAbAAAABI4QAD0AAADYAwAAHgAAAASOEAA9AAAAvgMAABwAAAAEjhAAPQAAACkEAABUAAAAL98HmsF3Cg4uRnl4b6NuZinNYJ+Vdvw2+///Txw0lqwEjhAAPQAAAFUEAAAaAAAAMDdCMEM1NjFBNjE0ODQwNEYwODYyMDRBOUYzNkZGQjA2MTc5NDI1NDY3NTBGMjMwQzg5MzYxOTE3NEE1N0E3NgSOEAA9AAAAlAQAAC4AAAAEjhAAPQAAAJQEAAAFAAAABI4QAD0AAACVBAAAMgAAAASOEAA9AAAAlQQAAEgAAAAEjhAAPQAAAJUEAAAFAAAABI4QAD0AAACWBAAAMgAAAASOEAA9AAAAlgQAAAUAAAAEjhAAPQAAAJgEAAAFAAAABI4QAD0AAACZBAAABQAAAFEAAAAMAAAABAAAAFIAAAAEjhAAPQAAAKAEAAAKAAAABI4QAD0AAACNBAAAGgAAAAAAAAAQAAAACAAAAEUAAAAEjhAAPQAAAIYEAAAKAAAABI4QAD0AAACDBAAAWgAAAASOEAA9AAAAbwQAAFAAAAAEjhAAPQAAAHYEAAA7AAAABI4QAD0AAABYBAAAQwAAAASOEAA9AAAAWQQAABYAAAAEjhAAPQAAAEsEAAApAAAABI4QAD0AAAAjBAAAFAAAAASOEAA9AAAAsQQAAAkAAAAyMDRiZDMyNzc0MjJmYWQzNjQ3NTFhZDkzOGUyYjVlNmE1NGNmOGM2ODcxMjg0OGE2OTJjNTUzZDAzMjlmNWQ2BI4QAD0AAADFBAAAHAAAAASOEAA9AAAAuwQAACQAAAAEjhAAPQAAAO4EAAAOAAAABI4QAD0AAADuBAAAJwAAAP//////////eJgQAEGYscIAC6ACAQAAAFMAAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlL3Vzci9sb2NhbC9jYXJnby9naXQvY2hlY2tvdXRzL2xhbWJkYXdvcmtzLWVkZTk2MzM2NzFkMTFhMTUvYmU0YTMyOS9tYXRoL3NyYy9lbGxpcHRpY19jdXJ2ZS9zaG9ydF93ZWllcnN0cmFzcy9wb2ludC5ycwAAAMuYEAB2AAAA9AAAACkAAADLmBAAdgAAAMIAAAAKAAAAAAAAAJrmfznqEQEa16xLQ7anG0u/EoXzhEt3ZCT2sPag0jBn//9Tsf7/qx6rqv/////+uSmgMeFyTmQwXViBgbZFULiNynFokWqBl0f9fNgWjCA8AEGItMIAC9APquPKkuWPmBEtlRm1hT55msCDnZOpiOtn1baVTGxH5Y3xBNEJpuZ2CkYXNBw0H9/0k+SA+sNe9hVt7FailxoHXEVXUnBTWM53uljHU1eYSF8CAAzECwD06/3/AgAAAAl2L98HmsF3Cg4sRnl4b6NuZj0Lx/Uo63gKnQ2PxY1DXdPLmBAAdgAAAHAAAAAPAAAAL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9jb3JlL3NyYy9pdGVyL3RyYWl0cy9pdGVyYXRvci5yc5iaEABYAAAAwQcAAAkAAABJbnZhbGlkSGV4U3RyaW5nSW52YWxpZERlY1N0cmluZ0hleFN0cmluZ0lzVG9vQmlnRW1wdHlTdHJpbmdEaXZpc2lvbkJ5WmVybwAAAAAAAAQAAAAEAAAAAwAAAFJvb3RPZlVuaXR5RXJyb3JJbnZaZXJvRXJyb3JJbnZhbGlkUG9pbnR0b29scy9nYXJhZ2FfcnMvc3JjL3BhaXJpbmcvbXVsdGlfbWlsbGVyX2xvb3AucnOEmxAAMAAAABIAAAAFAAAAhJsQADAAAAAVAAAAEAAAAISbEAAwAAAAJAAAAAUAAACEmxAAMAAAACgAAAAUAAAAhJsQADAAAAA+AAAADQAAAISbEAAwAAAAQQAAAA0AAACEmxAAMAAAAFYAAAAFAAAAhJsQADAAAABYAAAADQAAAISbEAAwAAAAWwAAAA0AAACEmxAAMAAAAGMAAAANAAAAhJsQADAAAABkAAAADwAAAISbEAAwAAAAZQAAAA0AAACEmxAAMAAAAGYAAAAPAAAAhJsQADAAAABnAAAADQAAAISbEAAwAAAAaAAAAA8AAACEmxAAMAAAAGkAAAANAAAAhJsQADAAAABqAAAADwAAAISbEAAwAAAAawAAAA0AAACEmxAAMAAAAGwAAAAPAAAAhJsQADAAAABtAAAADQAAAISbEAAwAAAAbgAAAA8AAACEmxAAMAAAAHgAAAAPAAAAhJsQADAAAAB5AAAAFgAAAAAAAAAQAAAACAAAAFQAAACEmxAAMAAAAHkAAAAzAAAAhJsQADAAAAB4AAAAIgAAAG5vdCBpbXBsZW1lbnRlZACEmxAAMAAAAKkAAAAOAAAAhJsQADAAAAD2AAAAJgAAAISbEAAwAAAADgEAADAAAACEmxAAMAAAACYBAAArAAAAhJsQADAAAAAmAQAANgAAAISbEAAwAAAAJwEAABMAAACEmxAAMAAAACgBAAAUAAAAhJsQADAAAAA7AQAALwAAAISbEAAwAAAAOwEAADoAAACEmxAAMAAAADwBAAATAAAAhJsQADAAAAA9AQAAEwAAAISbEAAwAAAAPgEAABQAAACEmxAAMAAAAFIBAAA3AAAAhJsQADAAAABSAQAARQAAAISbEAAwAAAAUgEAAFAAAACEmxAAMAAAAFMBAAATAAAAhJsQADAAAABUAQAAEwAAAISbEAAwAAAAVQEAABQAAAAyZmIzNDc5ODRmNzkxMWY3NGMwYmVjM2NmNTU5YjE0M2I3OGNjMzEwYzJjMzMzMGM5OWUzOTU1NzE3NmY1NTNkMTZjOWU1NTA2MWViYWUyMDRiYTRjYzhiZDc1YTA3OTQzMmFlMmExZDBiN2M5ZGNlMTY2NWQ1MWM2NDBmY2JhMjYzY2YzMDU0ODlhZjVkY2RjNWVjNjk4YjZlMmY5YjlkYmFhZTBlZGE5Yzk1OTk4ZGM1NDAxNDY3MWEwMTM1YTdjMDNjYmNhYzQxMDQ5YTA3MDRiNWE3ZWM3OTZmMmIyMTgwN2RjOThmYTI1YmQyODJkMzdmNjMyNjIzYjBlMzMwNjQ0ZTcyZTEzMWEwMjk1ZTZkZDllN2UwYWNjY2IwYzI4ZjA2OWZiYjk2NmUzZGU0YmQ0NGU1NjA3Y2ZkNDgzMDY0NGU3MmUxMzFhMDI5Yjg1MDQ1YjY4MTgxNTg1ZDk3ODE2YTkxNjg3MWNhOGQzYzIwOGMxNmQ4N2NmZDQ2AACEmxAAMAAAAIkBAAAOAAAAhJsQADAAAACLAQAADgAAAISbEAAwAAAAjAEAAA4AAACEmxAAMAAAAI4BAAAPAAAAhJsQADAAAACVAQAADwAAAAAAAAABAAAAAQAAAFUAAACEmxAAMAAAAIEBAAAGAAAAhJsQADAAAAB9AQAABgAAAISbEAAwAAAAeAEAAAoAAACEmxAAMAAAAHQBAAAKAAAAhJsQADAAAABuAQAACgAAAISbEAAwAAAAagEAAAoAAACEmxAAMAAAAJ8BAAAFAAAAhJsQADAAAAC4AQAAEwAAAISbEAAwAAAAvgEAAAgAAACEmxAAMAAAANwBAAATAAAAhJsQADAAAADiAQAADgAAAISbEAAwAAAAxwEAAAwAAACEmxAAMAAAAM8BAAAaAAAAhJsQADAAAADMAQAAGwAAAISbEAAwAAAA1AEAAA0AAACEmxAAMAAAAMMBAAAJAAAAEAAAABAAAAARAAAACwAAAACbEAAQmxAAIJsQADGbEAAAAAAAmuZ/OeoRARrXrEtDtqcbS78ShfOES3dkJPaw9qDSMGf//1Ox/v+rHquq//////65KaAx4XJOZDBdWIGBtkVQuI3KcWiRaoGXR/182BaMIDwAQajEwgALyQ+q48qS5Y+YES2VGbWFPnmawIOdk6mI62fVtpVMbEfljfEE0Qmm5nYKRhc0HDQf3/Qv3weawXcKDixGeXhvo25mPQvH9SjreAqdDY/FjUNd05PkgPrDXvYVbexWopcaB1xFV1JwU1jOd7pYx1NXmEhfAgAMxAsA9Ov9/wIAAAAJdkRpdmlzaW9uQnlaZXJvAAAAAAAABAAAAAQAAAADAAAAUm9vdE9mVW5pdHlFcnJvckludlplcm9FcnJvcnRvb2xzL2dhcmFnYV9ycy9zcmMvYWxnZWJyYS9nMWcycGFpci5ycwDkohAAJwAAABsAAAASAAAA5KIQACcAAAAcAAAAEgAAAOSiEAAnAAAAHgAAABIAAADkohAAJwAAAB8AAAASAAAA5KIQACcAAAAgAAAAEgAAAOSiEAAnAAAAIQAAABIAAABhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmNvZWZmaWNpZW50cy5sZW4oKSA8PSBleHRfZGVncmVldG9vbHMvZ2FyYWdhX3JzL3NyYy9hbGdlYnJhL3BvbHlub21pYWwucnOjoxAAKQAAAA0AAAAJAAAAo6MQACkAAABWAAAAKwAAAKOjEAApAAAAYQAAABoAAACjoxAAKQAAAHgAAAAhAAAAo6MQACkAAAB8AAAAHgAAAERpdmlzaW9uIGJ5IHplcm8gcG9seW5vbWlhbAAcpBAAGwAAAKOjEAApAAAAigAAAA0AAACjoxAAKQAAAJIAAAAjAAAAo6MQACkAAACYAAAANgAAAKOjEAApAAAAmQAAABwAAAAAAAAAEAAAAAgAAABWAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQCjoxAAKQAAAJMAAABGAAAAo6MQACkAAACuAAAAIgAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvY29yZS9zcmMvaXRlci90cmFpdHMvaXRlcmF0b3IucnPcpBAAWAAAAMEHAAAJAAAAo6MQACkAAABfAQAAKAAAAKOjEAApAAAAWgEAABMAAACjoxAAKQAAAKUBAAAhAAAAAAAAAAQAAAAEAAAAVwAAAFBvbHlub21pYWxjb2VmZmljaWVudHNkZWdyZWVYAAAADAAAAAQAAAAFAAAAWQAAAAwAAAAEAAAABwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQucnMAAAAAAAAEAAAAAAAAAAEAAAAAAAAABAAAAAAAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L2NvbnZlcnQucnMAADymEABmAAAA8AEAABYAAABuZWdhdGl2ZSB2YWx1ZXMgYXJlIG5vbi16ZXJvL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbnVtLWJpZ2ludC0wLjQuNi9zcmMvYmlnaW50L3NoaWZ0LnJzANCmEABjAAAAZgAAACgAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L3N1YnRyYWN0aW9uLnJzAABEpxAAagAAAK4AAAAcAAAAwKUQAF4AAAA6AgAAFwAAAMClEABeAAAAYwMAABcAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L2FkZGl0aW9uLnJzAOCnEABnAAAAiQAAABsAAADgpxAAZwAAAI4AAAAbAAAAYXR0ZW1wdCB0byBkaXZpZGUgYnkgemVybwAAAGioEAAZAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbnVtLWJpZ2ludC0wLjQuNi9zcmMvYmlndWludC9kaXZpc2lvbi5ycwCMqBAAZwAAAHAAAAAJAAAAT25jZSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkAAAEqRAAKgAAAG9uZS10aW1lIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5OKkQADgAAAAvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L3N0ZC9zcmMvc3luYy9wb2lzb24vb25jZS5ycwB4qRAAUwAAAJsAAAAyAAAAXwAAAAwAAAAEAAAAYAAAAGEAAAAWAEH808IAC8kHAQAAAGIAAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAAA7qhAASwAAANEKAAAOAAAARXJyb3IAAAA7qhAASwAAAH0FAAAbAAAARW1wdHlJbnZhbGlkRGlnaXRQb3NPdmVyZmxvd05lZ092ZXJmbG93WmVyb2ludGVybmFsIGVycm9yOiBlbnRlcmVkIHVucmVhY2hhYmxlIGNvZGUvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWdpbnQucnMDqxAAXQAAAHEBAAAcAAAAA6sQAF0AAACDAQAAHAAAAG91dCBvZiByYW5nZSBjb252ZXJzaW9uIHJlZ2FyZGluZyBiaWcgaW50ZWdlciBhdHRlbXB0ZWRGcm9tQkVCeXRlc0Vycm9yRnJvbUxFQnl0ZXNFcnJvckludmFsaWRWYWx1ZVBvaW50Tm90SW5TdWJncm91cFZhbHVlTm90Q29tcHJlc3NlZC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAAAAB6wQAEoAAAC+AQAAHQAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAI+sEABYAAAAwQcAAAkAAAB0b29scy9nYXJhZ2FfcnMvc3JjL2lvLnJzAAAA+KwQABkAAABNAAAAHAAAAAAAAAABAAAAAQAAAGMAAAD4rBAAGQAAAE8AAAAwAAAA+KwQABkAAACQAAAADwAAAGFzc2VydGlvbiBmYWlsZWQ6IGJ5dGVzLmxlbigpIDw9IE4gKiBTSVpFIC8gOAAAAPisEAAZAAAAwQAAAAUAAAAweGludmFsaWQgaGV4IHN0cmluZzogAACWrRAAFAAAAPisEAAZAAAA0gAAAD4AAAABAEHQ28IAC8DKAQEAAAD/////AQAAAP////8AAAAAAAAAAP////8BAAAA/////0V1Y2xpZGVhbiBwcm9wZXJ0eSB2aW9sYXRlZHRvb2xzL2dhcmFnYV9ycy9zcmMvaGludHMvZWlzZW5zdGVpbi5ycwAAD64QACcAAAB8AAAAGAAAAA+uEAAnAAAAfQAAABgAAABkaXZpc2lvbiBieSB6ZXJvIEVpc2Vuc3RlaW5JbnRlZ2VyAAABAAAAAAAAACrPiQABAAAAAAAAAISuEAADAAAALc+JIC0gICsgAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAASGFsZkdDRCBleGNlZWRlZCAgaXRlcmF0aW9ucyBmb3IgYT0sIGI9ALyuEAARAAAAza4QABIAAADfrhAABAAAAE5vcm0gb2YgaW5wdXQgJ2EnIGNhbm5vdCBiZSBuZWdhdGl2ZUxhdHRpY2UgZGV0ZXJtaW5hbnQgaXMgemVyby4gSW5wdXQgcGFyYW1ldGVycyBtaWdodCBiZSB1bnN1aXRhYmxlLkRpdmlzaW9uIGJ5IHplcm8gaW4gRXVjbGlkZWFuIGFsZ29yaXRobSBmaW5hbCBzdGVwLiBDaGVjayBpbnB1dHMgciBhbmQgbGFtLkRpdmlzaW9uIGJ5IHplcm8gaW4gRXVjbGlkZWFuIGFsZ29yaXRobS4gQ2hlY2sgaW5wdXRzIHIgYW5kIGxhbS5EaXZpc2lvbiBieSB6ZXJvIGluIHJvdW5kaW5nLnRvb2xzL2dhcmFnYV9ycy9zcmMvaGludHMvZmFrZV9nbHYucnNDdXJ2ZSAgZG9lcyBub3QgaGF2ZSBhIGtub3duIGVuZG9tb3JwaGlzbSBlaWdlbnZhbHVlIG9yIGlzIG5vdCBzdXBwb3J0ZWQgaGVyZS4AAAAvsBAABgAAADWwEABIAAAAIGhhcyBhbiBlbmRvbW9ycGhpc20sIHVzZSBnZXRfZ2x2X2Zha2VfZ2x2X2hpbnQgaW5zdGVhZAAvsBAABgAAAJCwEAA3AAAAQXNzZXJ0aW9uIGZhaWxlZDogKHMxICsgc2NhbGFyICogczIpICUgY3VydmUubiAhPSAwQXNzZXJ0aW9uIGZhaWxlZDogIShzMSA+IDAgYW5kIHMyICE9IDApAAAKsBAAJQAAAGwBAAAmAAAAMHhlZTlhNTkyYmE5YTk1MThkMDU5ODZkNjU2ZjQwYzIxMTRjNDk5M2MxMWJiMjk5MzhkMjFkNDczMDRjZDhlNmUweGYxNDQ1MjM1ZjIxNDhjNTk4NjU4NzE2OWZjMWJjZDg4N2IwOGQ0ZDAwODY4ZGY1Njk2ZmZmNDA5NTZlODY0MHg4ZGZmMzQ4N2U4YWM5OWUxZjI5YTA1OGQwZmE4MGI5MzBjNzI4NzMwYjdhYjM2Y2U4NzlmMzg5MGVjZjczZjUweDg0ZDUyMGU0ZTViYjQ2OWUxZjkwNzVjYjdjNDkwZWZhNTk1NjVlZWRhZTJkMDBjYThlZjg4Y2VlYTJiMDE5NzB4MmQxNWQ5ODJkOTk1NzdmYTMzZGE1NjcyMjQxNmZkNzM0YjNlNjY3YTJmOWYxNWQ4ZWIzZTc2N2FlMGZkODExZTB4ZWQyNTM4ODQ0YWJhMTYxY2YxNTc4YTQzY2YwMzY0ZTkxNjAxZjY1MzZhNTk5NmQwZWZiZTY1NjMyYzQxYjZkMHgyNjAwYzI3ZDg3OWZiY2ExODZlNzM5ZTYzNjNjNzFjZjgwNGM4NzdkODI5YjczNWRjYzNlM2FmMDI5NTVlNjBhMHgyOGY4YmQ0NGE1ODNjYmFhNDc1YmQxNTM5NjQzMGU3Y2NiOTlhNTUxNzQ0MGRmZDk3MDA1ODU1ODI4MmJmMmM1MHg5Y2Q3ZDRjMzgwZGM1NDg4NzgxYWFkMDEyZTdlYWVmMWVkMzE0ZDdmNjk3YTU1NzJkMDMwYzU1ZGYxNTMyMjEweDExYmI2ZWUxMjkxYWFiYjIwNjEyMGVjYWFjZTQ2MGQyNGI2NzEzZmViZTgyMjM0OTUxZTJiZWU3ZDBmODU1ZjUweDJkNzRlOGZhMDYzN2Q5ODUzMzEwZjNjMGUzZmFlMWQwNmYxNzE1ODBmNWI4ZmQwNTM0OWNhZGVlY2ZjZWIyMzAweDI3MzVlNGVjOWQzOWJkZmZhYzliZWYzMWJhY2JhMzM4YjFhMDk1NTlhNTExYTE4YmU0YjRkMzE2ZWQ4ODkwMzMweGYwM2MxZTllMDg5NWRiMWE1ZGE2MzEyZmFhNzhlOTcxMTA2YzMzZjgyNmUwOGRjZjYxN2UyNDIxMzEzMmRmZDB4MTcwOTRjZDI5N2JmODI3Y2FmOTI5MjAyMDViNzE5YzE4NzQxMDkwYjhmNzc3ODExODQ4YTdlOWVhZDY3NzhjNDB4ZGI4ZjQxOWMyMWY5MjQ2MWZjMmIzMjE5NDY1Nzk4MzQ4ZGY5MGQ0MTc4MDQyYzgxYmE3ZDRiNGQ1NTllMmI4MHgyNDM0NDM2MTNmNjRmZmE0MTc0MjdlZDU5MzNmY2ZiYzY2ODA5ZGI2MGI5Y2ExNzI0YTIyNzA5Y2VjZWVlY2UyMHgyMmFmNDlmYmZkNWQ3ZTlmY2QyNTZjMjVjMDdkM2RkOGVjYmJhZTZkZWVjZDAzYWEwNGJiMTkxZmFkYTc1NDExMHgxNGZiZDM3ZmE4YWQ2ZTRlMGM3OGEyMGQ5M2M3MjMwYzQ2NzdmNzk3YjQzMjczMjNmN2Y3YzA5N2MxOTQyMGUwMHgxNWE5Mjk4YmJiODgyNTM0ZDRiMmM5ZmJjNmU0ZWY0MTg5NDIwYzRlYjNmM2UxZWEyMmZhYTdlMThiNWFlNjI1MHgyZjdkZTc1ZjIzZGRhYWE1MjIxMzIzZWJjZWIyZjJhYzgzZWVmOTJlODU0ZTc1NDM0YzJmMWQ5MDU2MjIzMmJjMHgzNmE0NDMyYTg2ODI4M2I3OGEzMTVlODRjNGFlNWFlY2EyMTZmMmZmOWU5YjJlNjIzNTg0Zjc0NzljZDVjMjcweDIxODBkNzc4NmE4Y2Y4MTBlMjc3MjE4YWIxNGExMWU1ZTM5ZjNjOTYyZjExZTg2MGFlMWM1NjgyYzc5N2RlNWMweGEyNjhlZjg3MDczNmVlYmQwY2I1NWJlNjQwZDczZWUzNzc4OTkwNDg0Y2MwM2NlNTM1NzIzNzdlZWZmZjhlNDB4MWVlZmVmZTExYzBiZTQ2NjRmMjk5OTAzMWYxNTk5NDgyOWU5ODJlOGM5MGUwOTA2OWRmOWJhZTE2ODA5YTViMjB4MjdlODdmMDMzYmQxZTBhODljYTU5NmU4Y2I3N2ZlM2E0YjhmYjkzZDlhMTEyOTk0NjU3MWEzYzNjZjI0NGM1MjB4MTQ5OGEzZTY1OTlmZTI0MzMyMWY1N2Q2YzU0MzU4ODk5NzljNGY5ZDJhM2UxODRkMjE0NTE4MDkxNzhlZTM5MHgyN2MwYTQxZjRjYjlmZTY3ZTlkZDRkN2NlMzM3MDdmNzRkNWQ2YmNjMjM1YmVmMTA4ZGVhMWJiZWJkZTUwN2FhMHgxZjc1MjMwOTA4YjE0MWI0NjYzNzIzOGIxMjBmYzc3MGY0ZjRhZTgyNWQ1MDA0YzE2YTdjOTFmZTFkYWUyODBmMHgyNWY5OWE5MTk4ZTkyMzE2N2JiYTgzMWIxNWZmZmQyZDdiOTdiM2EwODk4MDhkNGViMWYwYTA4NWJlZTIxNjU2MHgxMDFiYzMxOGU5ZWE1OTIwZDBmNmFjZGMyYmI1MjY1OTNkM2Q1NmVjOGVkMTRjNjc2MjI5NzQyMjhiYTkwMGM2MHgxYTE3NTYwNzA2N2Q1MTczOTdjMTMzNGVjYjAxOTc1NGViYzBjODUyYTNjZjA5MWVjMWNjYzQzMjA3YTgzYzc2MHhmMDJmMGU2ZDI1ZjllYTNkZWIyNDVmM2U4YzM4MWVlNmIyZWIzODBiYTRhZjVjMWM0ZDg5NzcwMTU1ZGYzN2IweDE1MWQ3NTdhY2M4MjM3YWYwOGQ4YTY2NzcyMDNlYzk2OTI1NjVkZTQ1NmFlNzg5ZmYzNThiMzE2M2IzOTNiYzkweDI1NmNkOTU3N2NlYTE0MzA0OWUwYTFmZTAwNjhkZDIwMDg0OTgwZWU1Yjc1Nzg5MGE3OWQxM2EzYTYyNGZhZDQweDUxM2FiYWZmNjE5NWVhNDg4MzNiMTNkYTUwZTA4ODQ0NzY2ODJjM2ZiZGQxOTU0OTdiOGFlODZlMTkzN2M2MTB4MWQ5NTcwZGM3MGEyMDVmMzZmNjEwMjUxZWU2ZTJlODAzOTI0NmU4NGU0YWM0NDgzODZkMTlkYmFjNGU0YTY1NTB4MThmMWE1MTk0NzU1YjhjNWQ1ZDdmMWJmOGFhYTZmNTZlZmZiMDEyZGQ3ODRjZjVlMDQ0ZWVjNTBiMjlmYzlkNDB4MjY2YjUzYjYxNWVmNzNhYzg2NjUxMmMwOTFlNGE0ZjJmYTRiYjBhZjk2NmVmNDIwZDg4MTYzMjM4ZWViYmNhODB4MmQ2MzIzNGM5MjA3NDM4YWE0MmI4ZGUyNzY0NGMwMjI2ODMwNGRmZWI4Yzg5YTFhM2Y0ZmQ2ZTgzNDRhZTBmNzB4MmFiMzBmYmU1MWVlNDliYzdiM2FkZGUyMTlhNmYwYjVmYmI5NzYyMDVlZjhkZjdlMDAyMWRhZWU2ZjU1YzY5MzB4MWFlZTZkNGIzZWJlOTM2NmRjYjljY2U0ODk2OWQ0ZGYxZGM0MmFiY2Q1MjhiMjcwMDY4ZDkyMDdmYTZhNDVjOTB4MTg5MWFlYWI3MWUzNGI4OTVhNzk0NTJlNTg2NGFlMWQxMWY1NzY0NmM2MGJiMzRhYTIxMWQxMjNmNjA5NTIxOTB4MjQ0OTJiNWY5NWMwYjA4NzY0MzdlOTRiNDEwMWM2OTExOGUxNmIyNjU3NzcxYmQzYTdjYWFiMDFjODE4YWE0YjB4MTc1MjE2MWIzMzUwZjdlMWIzYjJjODY2M2EwZDY0Mjk2NDYyODIxM2Q2NmMxMGFiMmZkZGY3MWJjZmRlNjhmMHhhYjY3NjkzNTcyMmUyZjY3Y2ZiODQ5MzhlNjE0YzZjMmY0NDViOGQxNDhkZTU0MzY4Y2ZiOGY5MGEwMGYzYTcweGIwZjcyNDcyYjlhMmY1ZjQ1YmM3MzAxMTdlZDlhZTU2ODNmYzJlNmUyMjdlM2Q0ZmUwZGExZjdhYTM0ODE4OTB4MTZhYTZmOTI3M2FjZDU2MzFjMjAxZDFhNTJmYzRmOGFjYWYyYjIxNTJjM2FlNmRmMTNhNzhhNTEzZWRjZDM2OTB4MmY2MGI5ODdlNjM2MTRlYjEzYzMyNGMxZDg3MTZlYjBiZjYyZDliMTU1ZDIzMjgxYTQ1YzA4ZDUyNDM1Y2Q2MDB4MThkMjRhZTAxZGRlOTJmZDc2MDZiYjc4ODQ1NTRlOWRmMWNiODliMDQyZjUwOGZkOWRiNzZiN2NjMWIyMTIxMjB4NGZjM2JmNzZmZTMxZTJmOGQ3NzYzNzMxMzBkZjc5ZDE4YzMxODVmZGYxNTkzOTYwNzE1ZDQ3MjRjZmZhNTg2MHhkMThmNmI1M2ZjNjk1NDZjZmRkNjcwYjQxNzMyYmRmNmRlZTllMDZiMjEyNjBjNmI1ZDI2MjcwNDY4ZGJmODIweGJhNDIzMWE5MThmMTNhY2VjMTFmYmFmYTE3YzUyMjNmMWY3MGI0Y2RiMDQ1MDM2ZmE1ZDcwNDViZDEwZTI0MHg3YjQ1OGIyZTAwY2Q3YzYxMDA5ODUzMDE2NjNlN2VjMzNjODI2ZGEwNjM1ZmYxZWJlZGQwZGQ4NjEyMGI0YzgweDFjMzVjMmQ5NmRiOTBmNGY2MDU4ZTc2ZjE1YTBjODI4NmJiYTI0ZTJlZDQwYjE2Y2VjMzllOWZkN2JhYTU3OTkweDFkMTJiZWEzZDhjMzJhNWQ3NjY1NjhmMDNkZDFlY2RiMGE0ZjU4OWFiYmVmOTY5NDVlMGRkZTY4OGUyOTIwNTAweGQ5NTNlMjAwMjIwMDMyNzA1MjVmOWE3MzUyNmU5ODg5Yzk5NWJiNjJmZGVhOTQzMTNkYjQwNWE2MTMwMDI4NjB4MjlmMDUzZWMzODg3OTVkNzg2YTQwYmVjNGM4NzUwNDdmMDZmZjBiNjEwYjQwNDBhNzYwZTMzNTA2ZDI2NzFlMTB4NDE4OGUzMzczNWY0NmIxNGE0OTUyYTk4NDYzYmMxMmUyNjRkNWY0NDZlMGMzZjY0Yjk2NzljYWFhZTQ0ZmMyMHgxNDllYzI4ODQ2ZDRmNDM4YTg0ZjFkMDUyOTQzMWJiOWU5OTZhNDA4YjdlOTdlYjNiZjE3MzVjZGJlOTZmNjhmMHhkZTIwZmFlMGFmNTE4OGJjYTI0YjVmNjM2MzBiYWQ0N2FlYWZkOThlNjUxOTIyZDE0OGNjZTFjNWZkZGRlZTgweDEyZDY1MGU4Zjc5MGIxMjUzZWE5NDM1MGU3MjJhZDJmN2Q4MzZjMjM0Yjg2NjBlZGY0NDlmYmE2OTg0YzY3MDkweDIyYWI1M2FhMzlmMzRhZDMwZWE5NjcxN2JhNzQ0NmFhZmRhZGJjMWE4YWJlMjhkNzgzNDBkZmM0YmFiYjhmNmMweDI2NTAzZThkNDg0OWJkZjU0NTBkYWJlYTc5MDdiYzNkZTBkZTEwOTg3MWRkNzc2OTA0YTEyOWRiOTE0OTE2NmMweDFkNWU3YTBlMjk2NWRmZmEwMGY1NDU0ZjUwMDNjNWM4ZWMzNGIyM2Q4OTdlN2ZjNGM4MDY0MDM1YjBkMzM4NTAweGVlM2Q4ZGFhMDk4YmVlMDEyZDk2YjdlYzQ4NDQ4YzZiYzlhNmFlZmE1NDQ2MTViOWNiM2M3YmJkMDcxMDRjYjB4MWJmMjgyMDgyYTA0OTc5OTU1ZDMwNzU0Y2Q0ZDkwNTZmYTllZjdhNzE3NTcwM2Q5MWRjMjMyYjVmOThlYWQwMDB4N2FlMTM0NGFiZmM2YzJjZTNlOTUxYmMzMTZiZWU0OTk3MTY0NWYxNmI2OTM3MzNhMDI3MjE3M2VlOWFkNDYxMHgyMTdlM2EyNDc4MjdjMzc2ZWMyMWIxMzFkNTExZDdkYmRjOThhMzZiN2E0N2Q5N2E1YzhlODk3NjJlZTgwNDg4MHgyMTVmZmU1ODRiMGViMDY3YTAwM2Q0MzhlMmZiZTI4YmFiZTFlNTBlZmMyODk0MTE3NTA5YjYxNmFkZGMzMGVlMHgxZTc3MGZjOGVjYmZkYzg2OTJkY2VkYzU5N2M0Y2EwZmJlYzE5Yjg0ZTMzZGE1NzQxMmE5MmQxZDNjZTNlYzIwMHgyZjYyNDNjZGE5MTliZjRjOWYxZTNhOGE2ZDY2YTA1NzQyOTE0ZmMxOTMzOGIzYzBlNTBlODI4ZjY5ZmY2ZDFmMHgyNDZlZmRkYzMxMTdlY2QzOTU5NWQwMDQ2ZjQ0YWIzMDNhMTk1ZDBlOWNjODkzNDVkM2MwM2ZmODdhMTFiNjkzMHg1M2U4ZDliM2VhNWI4ZWQ0ZmUwMDZmMTM5Y2JjNGUwMTY4YjFjODlhOTE4ZGZiZTYwMmJjNjJjZWM2YWRmMTB4MWI4OTRhMmY0NWNiOTY2NDdkOTEwZjZhNzEwZDM4YjdlYjRmMjYxYmVlZmZmMTM1YWVjMDRjMWFiZTU5NDI3YjB4YWViMTU1NGUyNjY2OTNkODIxMjY1MjQ3OTEwN2Q1ZmRjMDc3YWJmODg2NTFmNWE0MjU1M2Q1NGVjMjQyY2MwMHgxNmE3MzVmNmY3MjA5ZDI0ZTY4ODg2ODBkMTc4MWM3ZjA0YmE3ZDcxYmQ0YjdkMGUxMWZhZjlkYThkOWNhMjhlMHg0ODdiOGI3ZmFiNWZjOGZkN2MxM2I0ZGYwNTQzY2QyNjBlNGJjYmI2MTViMTkzNzRmZjU0OWRjZjA3M2Q0MWIweDFlNzViOWQyYzIwMDYzMDcxMjRiZWEyNmIwNzcyNDkzY2ZiNWQ1MTIwNjhjM2FkNjc3ZmRmNTFjOTIzODg3OTMweDUxMjBlM2QwZTI4MDAzYzI1M2I0NmQ1ZmY3N2QyNzJhZTQ2ZmExZTIzOWQxYzZjOTYxZGNiMDJkYTNiMzg4ZjB4ZGE1ZmViNTM0NTc2NDkyYjgyMmU4NzYzMjQwMTE5YWMwOTAwYTA1M2IxNzE4MjNmODkwZjVmZDU1ZDc4MzcyMHgyZTIxMWIzOWEwMjMwMzFhMjJhY2MxYTFmNWYzYmI2ZDhjMjY2NmE2Mzc5ZDlkMmM0MGNjOGY3OGI3YmQ5YWJlAAAARLEQAEEAAACFsRAAQAAAAMWxEABBAAAABrIQAEEAAABHshAAQgAAAImyEABBAAAAyrIQAEIAAAAMsxAAQgAAAE6zEABBAAAAj7MQAEIAAADRsxAAQgAAABO0EABCAAAAVbQQAEEAAACWtBAAQgAAANi0EABBAAAAGbUQAEIAAABbtRAAQgAAAJ21EABCAAAA37UQAEIAAAAhthAAQgAAAGO2EABBAAAApLYQAEIAAADmthAAQQAAACe3EABCAAAAabcQAEIAAACrtxAAQQAAAOy3EABCAAAALrgQAEIAAABwuBAAQgAAALK4EABCAAAA9LgQAEIAAAA2uRAAQQAAAHe5EABCAAAAubkQAEIAAAD7uRAAQQAAADy6EABCAAAAfroQAEIAAADAuhAAQgAAAAK7EABCAAAARLsQAEIAAACGuxAAQgAAAMi7EABCAAAACrwQAEIAAABMvBAAQQAAAI28EABBAAAAzrwQAEEAAAAPvRAAQgAAAFG9EABCAAAAk70QAEIAAADVvRAAQQAAABa+EABBAAAAV74QAEAAAACXvhAAQQAAANi+EABCAAAAGr8QAEIAAABcvxAAQQAAAJ2/EABCAAAA378QAEEAAAAgwBAAQgAAAGLAEABBAAAAo8AQAEIAAADlwBAAQgAAACfBEABCAAAAacEQAEIAAACrwRAAQQAAAOzBEABCAAAALsIQAEEAAABvwhAAQgAAALHCEABCAAAA88IQAEIAAAA1wxAAQgAAAHfDEABCAAAAucMQAEAAAAD5wxAAQgAAADvEEABBAAAAfMQQAEIAAAC+xBAAQQAAAP/EEABCAAAAQcUQAEEAAACCxRAAQQAAAMPFEABCAAAAMHgxMDliN2Y0MTFiYTBlNGM5YjJiNzBjYWY1YzM2YTdiMTk0YmU3YzExYWQyNDM3OGJmZWRiNjg1OTJiYTgxMThiMHgyOTY5ZjI3ZWVkMzFhNDgwYjljMzZjNzY0Mzc5ZGJjYTJjYzhmZGQxNDE1YzNkZGVkNjI5NDBiY2RlMGJkNzcxMHgxNDMwMjFlYzY4NmEzZjMzMGQ1ZjllNjU0NjM4MDY1Y2U2Y2Q3OWUyOGM1YjM3NTMzMjYyNDRlZTY1YTFiMWE3MHgxNmVkNDFlMTNiYjljMGM2NmFlMTE5NDI0ZmRkYmNiYzkzMTRkYzlmZGJkZWVhNTVkNmM2NDU0M2RjNDkwM2UwMHgyZTI0MTlmOWVjMDJlYzM5NGM5ODcxYzgzMjk2M2RjMWI4OWQ3NDNjOGM3Yjk2NDAyOWIyMzExNjg3YjFmZTIzMHgxNzZjYzAyOTY5NWFkMDI1ODJhNzBlZmYwOGE2ZmQ5OWQwNTdlMTJlNThlN2Q3YjZiMTZjZGZhYmM4ZWUyOTExMHgyYjkwYmJhMDBmY2EwNTg5ZjYxN2U3ZGNiZmU4MmUwZGY3MDZhYjY0MGNlYjI0N2I3OTFhOTNiNzRlMzY3MzZkMHgxMDEwNzFmMDAzMjM3OWI2OTczMTU4NzY2OTBmMDUzZDE0OGQ0ZTEwOWY1ZmIwNjVjOGFhY2M1NWEwZjg5YmZhMHgxOWEzZmMwYTU2NzAyYmY0MTdiYTdmZWUzODAyNTkzZmE2NDQ0NzAzMDcwNDNmNzc3MzI3OWNkNzFkMjVkNWUwAACQyBAAQgAAANLIEABCAAAAFMkQAEIAAABWyRAAQgAAAJjJEABCAAAA2skQAEIAAAAcyhAAQgAAAF7KEABCAAAAoMoQAEIAAAAweDFlNmYyMGExMWQxZTMxZTQzZjgzZGNlZGRkYjlhMDIzNjIwM2Y1ZjI0YWU3MmM5MjVhOGE3OWE2NjgzMWY1MWQweDFiZDhjNTI4NDcyZTU3YmRjNzIyYTE0MWY4Nzg1Njk0NDg0ZjQyNjcyNTQwM2FlMjQwODRlMzAyN2U3ODI0NjcweDJkNTFiYTgyYzgwNzNjNmQ2YmFjZjFhZDVlNTY2NTViNzE0MzYyNWIwYTllOWMzMTkwNTI3YTFhNWYwNTA3OWEweDFiMDdkNmQ1MWU2ZjdlOTdlMGFiMTBmYzJlNTFlYTgzY2UwNjExZjk0MGZmMDczMWI1ZjkyN2ZlOGQ2YTc3YzkweDExZTEyYTQwZDI2MmFlODhlODM3NmY2MmQxOWVkZjQzMDkzY2RlZjFjY2YzNGQ5ODVhM2U1M2YwYmM1NzY1YTAweDIyMWMxNzBlNGQwMmEyNDc5YzZmM2U0N2I1ZmY1NTc4MTU3NGY5ODBkODkwMzgzMDhhM2VmMzdjY2U4NDYzYmSQyBAAQgAAACzLEABCAAAAbssQAEIAAABWyRAAQgAAALDLEABCAAAA8ssQAEIAAAAcyhAAQgAAADTMEABCAAAAdswQAEIAAAAweDNmMDgxNWFiNDYzZjFiNzZlZTI1YTliODc2OGIzMjMxYTg5NzUyZjQyN2Y0ZjA2M2FiNzE4ZTcwNzU3NmIzMTB4MTU2NDhiZjQ2ZjYwZDgyOTU0YzdlMzMwMjliMzYxNzM1NzAxMmEzZDNiMWQzNGM4ZTAwODg1OWYxZGJmYjMxNzB4MTI3ZTAwYzIyNTNkZTA3ODE4Y2E3ZjJlYWZkZDc1NjRkMDVlYTg1MGNmNjFmMWRhYTBjZmVmYmY3ZmJmYmE4NTB4NjYzNjVhZmQxOGE0MWVmOTM4MmZjMGIxZDI2NWNiNGQzY2U0NzBhOGNiYmI4NzhmN2Q0ODA1MTYzMDc0N2JkMHgyMTlkMTRmODIzNTEzMTQwZGM2OWE5NmY3ZmU3ZTA4NmY0ZmEyNGM4NGU1N2RjZjJiMDk5NzE1YzQ0MDRhYWU3MHgzYTMwYmZiYmYyY2I4NmQ0YTZhNjNhODA1MGQ5MWY5ZjE0ZjRkMzM2OTZkMzdlYmFlZmE5YWMyMzAyMTMyZDUweDIxMjFiYmNkZWFhMzNhMzViMDI3MGZiN2Q1YzlmOTRlZGFkNWE4NGQ3NGIwNmUzMzg1MTA0YjBiNDE5MzViY2MweDE5NmI1NDRmYmViMGE3OTJjZmJiODJjMjg5ZTU3OWI3Y2Q1NTgwYzJlMzM4YTM4OWQwNTNlZjhiM2QxMGU3MGUweDI4MDljM2ExNTQ3YzBjZWU4OWMxZGIyNzBlZjQ3OWMyNjk3M2VjNzNlZGI0YmQ0ZTdkOTA3ZWEwMjAyZjU2MGYweDExYzM0NDQ2YjA4M2VmOTJjYTE1NzU4NWEwMmI4YjM0MmE0YzY3MTc1YjMxZjRiNWQ0MGQ0ZTk2ZGZjNWM4ZjEweDI1M2VhMGIzM2E4YmYzYjIzNjdjMDMwZTMyODljYmUwZjYyNDJhZDc3MDlkOTBiODZkOWQ4MDI2ZTJlMzk5MjUweDMwNDY3ZGMxOTMwZjZhZmU5MGM4OWQ0MDA3YWQyOWZjNGY1YTE5YzAwNmQxMDMwNDM4YzE2ZGY4NTYzN2JkNWYweDJmOWQ0YjU1NDk1ZjdlMzc3ZTIwZTZmNWEzYTg4YWY3YWE2YTUzNjQ1OGIzOGJiZTEzYzhlYmZiYmJhNTRmNDQweDFkOWU5ZDVjNzM2ZTMxNTFmMTFkMzZkNDk5ZTdlMDkzZDhlZTIzNTNiZTE4YWFkNTRjZmQwM2ZmMGZlYWM0YjgweDEyNGI2MTdiNDNlNTk4ZjllYmY2MjJmNzgyM2EzZGU3ZDFiZmVkYjg3ZTA5N2MzMTVmMzQzZGUzMDFlNTQ4NDEweDE5OGU3Y2ZjNjZhZTQ1Nzc0MDU1Y2YwNzNiZWRjOTQ1YTVmOWM1YjE5Y2FlMDhkNzg5Y2M1NzQ4ZmZlMTk5YjIweDJlYWMyNWIzNDk4ZGZhZGZmZDEyNGFiM2FhZDU3Nzg5ZWI5NDViYTU3NDQzMDk5YzViYjZjMjdlZDk3N2ZlMjQweDFlZTAyYzE3NWNkZmUxODcxYjM3ODMwNWMxYmI5YzkwNGU4YWYxZDQ0NTRlZDM1NTBiM2M2YWI1ZjRmOTAxMjYweDYxNmY4YzM0YzYwNzI2NmIyOWVhOGY5ZDJkZmE0N2ZmNmZiYjFkOTc0NWM0ODYwOWZhOTgzMDFkMGY2NzlkNTB4MTgxZDY4YjBhMTg4NTA0OTU4YjlmMTljYmJkYjk3MmE4NTNlNTFlZDM4NWU0ODgzYTQzYTQyODMyODAzMzcwYjB4MmQ1Mzk3Y2U4NjM0NjRhMjVkNmI3ZjViMDE1ZDU3OTE4MWQxY2UyZjI0Y2JhYmY2MDU5ZTkzMjdmNWJhNzAwNDB4MTViZjgxNzQ5MWI5NGQ3MWU4OTEyOTQwY2MwYjgwMjc3NzEzZTdkMzJkYTJiNjU5MTcyNGQ4ZGJkNGJjMjYxODB4MmE3Y2JkMTE0NjBiMTc3YWI3NmZlYWIyOGI2OTQ4NWFjOGNjNjg3NzQwYmM5MTA5OTRhMzgyN2QyOWMwODcxNDB4ZjdjZDVmZmE0NjYxNzMwYWI1NmU0NDdmYWU1Y2MxNzYzY2I0NjJkYTgwYTg1NjE0YzIzN2IyOTBkZTlkNTAyMHhlMDc2NjAwNGI0YzQxNzZlYjEzMjczNTA4ZWI2NTc1Zjc2ODEzN2Q4NmQzMDViZTY0NGNlMDQ1MzEwMDgxMDAweDYyNWZhNzE0NTgxMzQ4MWY2ZDE0OGJlNmI5YzhiYjdiNTRlZTNjMWFmYWMwMDEwNGUxZjc2MzAwMGI5OTI0YzB4N2M1NDcyNTA4YjQ1OTkxNmVlMGY1NDYxYWFkMmUwYjE5Y2Q5YzdiMTg0ZjUxNWI2NTEzNjMxOGNlMmM2YTUweDU2NzM3NTQ3MGQxODliNjkzYWM3N2FiM2ZiNzU1NzIzMWQ1MzA3Mzk1MWQ0M2M1NDY4NTg3OWNiN2E4OWZjYjB4MWQwNDA2YmNiZWM4M2Y4ZDUxNjVmNTZjMDYzZTQyMTA4YWQyMWY1MWVhNGJmYzcxNjAxMTc0YmE1YzdiOGJjYzB4YzAyYjE4ZWVmMjIzMzJkMjgwYThhYTFmODY0MDVmMzM3NWYwNjM0MmY4Njk2ZWU3YzczYjQ2YzYzMjcyY2I3MHgxN2MxZmMxNzRjZDlhNmViZWFhN2FkZDJmODAxYTY2NDgyMzUwOWFkNGZkMWIxNWFhZDA1M2E1NWFkNmRhNGNmMHg1Zjg0M2MyMzAyNGViMWRhYjdlYmJjODY3MDlhMDIxYWFhNmNhZjQzM2Y3ZWQyNThhMDg2MzhlOTU4NGIzMmQweDIyZGYyNDIwNjk3Y2EyOGI1Y2M1MWM1MzE2NWUwMDI3MjdiNDVjY2Q5MGE1NWM4NzU4OWY3OTJmMGFkOGNiMzcweDJmMTQzODMwM2E3YjQ5ZDQ3MzQwMGFhZWRmMGY0ODAwOWZkM2FmODA0Yjc2YmU4NjQxNzU4OGVmYzRkNzMwMmEweDIzMjNkNWZjZjJkYTg5NjVjNmIyYjdiNGZiZjlhMjRiYmFhN2Y0ZGNjZDM1ZDVjYTYxNTVjNTQ2MzA5M2IyM2IweDI2Yzg1YjlkZmJiZTQ4ZmU4M2I3NTNhNWU3MzM2YjlmNDBmN2I5NjFlOWM1NGY5NGUzNzcwMDA3M2Q0ZDI2ZTB4MzE1MTEwMDAyNTFlYzg2ZmViMzhiNWFiNGUzMzVmMDcwYjI3MWRmNGMyMDk3OTUyOGU0MWQ2NTM4NGMzMThmMHgxOGU1ODgzMjRhOWJiYWFjYjQyZmE2OWU1ZDkwYTBjMGUyN2NkMTZiOTQxZTM0YTYwZmY1ZGY5YTI2YzAzYWYxMHgyNjQyYjVkOGUxNmI5NTNiMDcwNjM1Nzc1YzhkM2M5NDk4MzU3ZDZhZDliZWYyZTdkOTlmMDNjMTBlYTFmOTVmMHgyMWZjMzEzYmExMWM2MGU4ZTg0ZmY2MGRiOTA2YTBmMDMxMTg5YjBiNDgzMzVjNDIyMWY5MDlhZWY4MzZjMTMzMHgyZDM1NjJlM2Q0YjQyYmM2ODkwYjY5OGNjNmFiODlmNzMxMTI5OGJjYmFjNmU0ZTlmMmY0ZDkzZDA2ZGFlMTUxMHhhNzRlZjU0MWQzNjBlODQyZTNlMGI2ZmY3ZTVjN2M3NzkzNGE1ZjY3NjE2ZjAxYzE4OWQ4ODZkZmQyZTA4MDgweDE0MDU2NGI1M2UwYTgxMmFjMzk4M2Q2ZTNiNDMzYWZhNDNmNDM0MDg3ZDllNzU0OTY3YzJjOWIxYjAyY2FmOGEweDE0NzA5ZTMyZDk4YWU0Y2QxOGI0MDAxODFlNzFhYjk3NTljNDM2YzhlODNmYTY5OTNhZGI2ZjJkYjZiYmE5ZDAweDczNGIyMzY2YzU5ZTM5NDQyM2YxNzllMTI2NmRkMzkyMzcyZGI0ZjJkYmE2NTFmNGE2MTlhNGI1MmJkYzAxMDB4MTFmYjJkNzA1Yzk0YjA4ZDVhZDNlM2M1ZmI2NjI5YWJlOTYzZWQ5MjkxMzY0MmM3ZDAyZDdlNzEwODhmZDJkNDB4MjdkMDNhYmY1YzFmMjkwZTVkNzE1ZWJhMTkzNzEwNTBlZjZlYjdmNzhmZDg0YmU4MzRlNGNjMzYxODA1OTQ4NDB4MTNlZDllOWU2YjQ1MmRmMjdmYjMzNTNjZmMyY2Q2M2ViZTgxN2YyMTJhMzljNmE4YmI5YjQ0MWFjMTM5NTg2MTB4MTMxOWM1MWNmMzdhYWExMDI0NmNkYWFhMDRhMTJlODg3OTVkZTQ0NTI2MDQyNjNhN2M1Yjc5YWI5OWNiZDIzYzB4YmNhMjU1ODhkMTg3YjdmOWRhZDgzOWYyYzhjYjUyNmE0Y2Y0NDRlZWJiZDBlNzE1YjZjZWEwMTlhYzNmMjB4MWQ4MzdlYTAzNDFjNTk2NDE4MTIyNjg3NGI5MjNjZDAxYTA2OWI0OTNmMDJmN2EzYzAxYmUyM2NmNTFkNTkzZjB4MWI0MWNlOWVkMzYzNGNiZDQyYzQyN2NlNGM1YzgzNzc0MTQ5ZTJhNmRiZDI1ZjI0MDEyMDkwZGI3ZGU0ZTdmOTB4NjcxZjBlM2I2NzRhZTdjZGRjNzkwZWNjNGU5NDZmNGJjYTc0Yjk4Yjc4YTEyN2M3YjU2YmQ2NjczZjFjZTFmMHgxOWZjMDczNzk3YTM5YjI3MmU0MGNkMzA2MTVmNTVmZWZlYjY4MmMxYWMxNDE0MzA3MWQwNDQ5YTU0MjZlNGUweDE3YmVlNDdkMjYyYTQ5N2ZkMWY3YzVjNmQ1YTdjNzBmYTQyMDk0ODBiZjVkOTczMTFjNTA5NjYxOWU5ZmQxMzB4MjA3M2NmZjkyZDMxNDFiNDgwNzYzNTM5Y2ZmMjk3OGE0Yzc5NDQ3MjFjYzkzN2JhMDBjYzg1MjcyNzQ0NzFlMzB4M2JkN2IzZTJjMTg4NTg3N2Y0MzE4MmE1NWE5MWQ0OGY5YzU4ZDE1MmU3MzBmZTJjN2FhNDZiMWZhNjYzYmFhMHgyMjZlYmM5YTUzOGI1YmJhZmYxMjhlZGZiOWJiZjVmYTBjZWIxMDA3MTlhMTRjOGRmZWQ5ZmZiYmJhZDliNmI3MHhkMzk1ZjBiMDhiOWZlZGUwMzczYTA2ZTE1NTJjMGU2MzRhNDk1NzJhZjFkODMwZGM2ZTM5NGU4YTVkM2IyMWEweDI4MjQyNDM5YjUyNDU0MGEzMGQ0OWI2OGUxOWUzMWJhNTI4NGJkM2JjZjFlMGYyZjQxZjc3ZDUzMzFmOTlmZmEweDM3MGQ2ZmExOWVhYWMxNDJkMmRlMDM0ODAxYWI4NWUwYjQ1N2UxMjllOTFmOTI5NzU0YjQ4YzYxNTRkNGRmNjB4OWExNmY1NzNiMzI4MGYzOTA3NjJhYmYyNjk1NzllYWEzNzkzOWJjMGM3NTNmZWIwYTJiMmUwYmNiZGUxNjU5MHgyMjI4ZTM2MGZiNWIxNjJiNDk2YWM0NDNmOTgxMjdlZTNjMDAyMWE2OTBiNzFiMjY4ZDk5OTgxMzY4MjMxZDk3MHg3ZTQyYzJjYTYzM2QyYzQ5ZmFiZjgzOTkxNDc2ZDIwOTQzMWUzNGQ4MDMyYjZhMWI5NzY3NWYzYzU2N2Y5NDQweDJjZTEyZDcyNjk2NjM3NzBjM2NhYjg1YTYyMTVhMzJlZWQzNWZkYTFkOGU5ZDc1M2E1MGZlOTYwOTc3MjRhOWYweDNkNzQyNzcwNGM2MWUyMDA5ZWViOWIxYjQ1YTAxMjUwODRiYzRkYWY3MDk3M2E3YmEwYjIyMzE4MTViMTVkZTB4MTBmOGFiZjA3NjQxODU4NjFjMTI2N2ZjZjRiNGIzM2NhMDk2ZmI0ZGRjNDYyNjczMmQ4NjkyMWU1NTNlNjljNjB4MTdjY2FmNmYyNmY3MjY3YTAyNWQ3Y2I0NTZlM2FlYjI1MWExYTYyMGFhZjY1NjhhNWM5NTY0NGM3YzU5MTRjYzB4NjNiYjMwNmI5NjMxMDA1MTM4NWMzY2UwMGNhODIwYWQwZTM2NTFhNmU1NTc1NGQ1OWRlNmRmMjhjZWE0ZDUxMHgxZjc2MWVlNTU1M2M1ZTg2ZjJjMzA0YTE4MDk1YWI3NDAzMjQyZTBiNjVlNjA4YmM5MjBjZjk5M2E0MTY5OTc0MHhkYzVmMDBiYmZkN2MxZDlhMjNjMGU2NjY4NTliYTY1NjRiY2RlODc2MWI0NTcxN2NkNmJkZmMwOWRlNGU4ZjIweDZkZTUxMTUyMGUyNzdiN2RmMDdjMzUzNjM4MWMxM2ViNDRjZjc5MGEyMzBhYmMzOTEwODk3NjBiZmM0MGVmMjB4MmExMzQzNDhjODY2MGVmY2Y5ZWY1NDg2M2U3MDUyOGExZmQ0NDgxYjUwYTFmZTIxZjI0YThjMDZlMTBjY2EwMzB4YWViNTAyM2JiYjlhNjRjNGJkODAwODllOTllZGY4ZWQ1ZjZmMWZmYjYzYTdkYmJhMWIzMzUyMGJjZmNlMzdiMHgxNDFhNmQwODEwMzY2YWUyMjVlY2I1ZjBiZmRjOTk5NTQwNmM1OTYwYWIyNjE1NTgzNmZjNTFmYjdjYjkzM2QxMHg5ZDJlYTA1ZWY1NGRhZGJiZTc3NmY0MDRkY2E2NjI2Y2MwYjI1Mzk5OTBiYzBiOGJmZTg3NDk3ZjFlMmM1YjcweDFlNTZkMjQ0YThlNDFiZTVkMTA0ZDVmOGVmNzA4OTFkMjJkNGE1NDMyNDQxYmZlOGZmMWExNmU5MTcxOWNkZGUweDFkNGYwMjBjNTdjNGYxNGFlYzkwOGIyZjk5YjVjNGZkNWUwOTQ0N2ZhODVjMmZkNjhiYTRkNWM1ZjUwYzdiNDkweDc2MzkxMWEzYTkyYTRmMGUwOWY0ZTE0Y2QwMzM5OGQ4ZDgyYTFlMDlkYjgwZmIwZWUxZTgzMzc2NGMxOGZkMzB4MTI4NTcyNzViZTJmZTZiOWJhMmVjNjhmOTA2MTY0M2YxZmM1ZDlhMmM1ZTQ3ZTU1Njg0MzY2ZTU0YjMwMjk0NjB4MmVkMTFjY2QyZTJlMjM3NjY1NWZmZTlhOTZjNGI4MWFkYzBhNjAzNTNjNWQ4M2Q0ZDBlYmY1MGQxYmJmODdjMDB4M2UzMWRlODk1OGU4MjY0NWIzMjBkNWUzZTk2NmVmNDcyNmQ1YjFjMmNmYmI0YWNkMjg4YTIxNTQzYzZkNTk0MHgxMWU4ODBkZmVmZGJkMDg4NThhZTg5MDA0NjUzM2Q1OGRhMjhhNjA4ZDdlOTA1MzY2ZWMyY2E0YTM2ZTcxOTYzMHgxODM1YjI3NWRlYWVkMmQwMDcwNGE5YzNjYzIxYWI3YTQ0YTM0NjYyOTc4ZDUzYzE5MGRjMjVlOTY5YTUwN2IyMHg2OGI3NTMxNWUyNWVkNGFjZTVhNGE5NDgwZTFkODJjZTVkNDRmNzZmMTMyNDI0MDQxOWYzNzJmZjhkM2MzZjUweDFiN2VmN2QwNGFlYzczZDYyYjA1MmQyYWQxMmI5MmE0MjY4ZmNjZDc5NWM4MzlkNjk4YWQzYjIyODIzMjc0ZDEweDI4YzBjODQ4MDIyYTkwNjA2ZjYxOTNmZjU1MDFiNTcyMTZiNjcwNzI3ZjRiOGVmY2MyNDBkMzBiYmFhOWYwM2YweDEzYmRhNDkyOTZjYmNjNTE2ODZhN2JmYjFjMzlmM2YyNTQzNzA5ODVhMTY2NjBlZmQ2ZTVkODJkNGYwNjhlMWIweDJlNzk4N2VhODIwNDM4OWQxMWViMTBiMzQyNjVlMzc4YTk0NTcyOWY4NmMzZTBlMmZkMzg0OTBkM2E1OTQxNDEweDgyNmQ0YTIzMjRhZDNhYTRiMmI0NWMxMGExOTBmZWRlZjcwMmFlZmZkYTMyMjZjZTU0MTVmZmZkMDM5MzVjODB4MmRiZWVlODVlYWVhYTlmYTM2NzVlZjU0MWM5ZGY3YmI5NjRhODU0MzVjM2I1OTY4NWY5M2I0MzQwMzZkZWQweDIyN2VlN2E5NDVlZGFlZTY5MTk0MThlY2IzMjc5YjExZTZmYTQ0ZjVmNWM1YWJmYjk2NmE0YmU1OTljYjg2YzcweDFkMGE2ZDFhOTUxOTg3NzgwNWFjOTBkNjk2ZmFmMmE1ZmZhZGMyMzk4NmRlOGM2OThkNTQxNDcxYzcyNDQyMjAweDIyMDhhYWJhNTA4YWU4MTZkYTRmMzMzYjc4NTRmYmJjZDEwZWVhMWRiMjg0ZWMzZTlmNGRlMDJiMjVmNmU5ZDQweDI4YTU4OTAxMDM1YjJjOTllMzZhN2QyOWI1ODdhMjE1YzllNTkyNjhlMmY4ZTAxYTE3NTcyMDk3MWNjZjA0ZWMweDExMmY2ZDhkNDJiMGEwZDEyM2EwNzg2NWNhMTM3NmRmMzE3YTJhMTRmZmMwMTkxMjI2ZjM4YThhZGZkNjIzODB4OGM2ZWIxOWMwMTZkMTgzMzE3NGRkYTE4MmQyNjZkNWM3MjdmOTdmYjRkMDFmMWRhZjkwNmI2ZDNjNmUyMzA4MHgxMzU5ZDJkNmM4YjVhMTE2ZDBiMzhiOTVmOWM2NDJkZjc1YjFiZTlhNDhjODY5OGVjZmVhOTEwM2Y3M2YxODc5MHgxMGM1MDUyZWM2N2FiOWI2YTQ2N2MxY2MxODc4ZDkxYWFhMDdhYWNmNzcyNWY4YTVlZDQyYjY5OWM0YWYzY2E3MHg1ODNjNGQyOTJkNTRmM2NkYjcwODgwM2U2MzM4ZmM2YWZkYjE4OGQ1ZDRlOWYwNjAxOTM4MjM2ODRjOTZjNzUweDJkOTRhMWM1NWJlMzgyMTUxYTQwNTRjNWI5NjMyMmU3YmNkMWZlMmIzZTA3NmUxNmVlMmMxOGJmYzA2ZjU3YjQweDE1ZTM0MDJmZGRlODc3MGZiOTk3MzY5NTc5YzFiMTcwM2VmNzdjNjcxOTI3ZWFkODBkYmM2NGRkMjIxMWMzZWMweDE4NWJlOTg3ODQ4MTdmMjJmN2IyMWU2Yjg2N2Q1YTcxYjUwMDBiZWY4YmI5MDJlYjMwMjY3N2UyMGE3MjdiZTMweDE4ZGI0MzIxYzcyMWMwMzY2NmVkODkyN2M4OTg5MGFhOGFhZDFiMDBjMDU0NTQ3YjVjYTE0Y2Q5NGRlNDY3YjYweDJhODUyYjYyNDdmNWQ2MWYwYzM5MGIzZjNkNzk5MTg4NTI4ODQ5YmNkMmNkMGFmZjRlYjIxMzRhMDM5YjUxMjYweDI1MTBhZWVkNTFiN2Y1MDZlNjVmYjlhMThlZTAxMjRhYTUyNzZmNmRlMWNkNzcxYjE2NTkzMDIwNGRhNThmMjIweGYyMDc0YTMyZWI4MjYwZmI1YmQzYTIzNmYwM2E0N2I0N2I3ZmI1NGRjYWQxZDc5NzdkNjQ4NjUxM2JhYjVmMjB4MmY0YzY5Mjk3ODY2YmQ0NWE4MjcwZTE5OTQxOTI2Y2VjMzUzMWM5ZTEyYzRjMmM4NDk3MTQwNGJmYTA0NDA5MDB4MTU0NjY4NzI3ZDJkYmFkZjA1ZDA4M2E2NTA5M2MwZDBlOTJkZjVmZDVmM2ZkNzVlOWI3OTJjNTYyYTM3NDczZjB4MWU2ZmZjNWQ2YTFmZjVkYzRmZDc3ZmM1YWI1YzhjNGU4ZDNlMmUzNzViY2QxMTk0YTkxZTViMGY3YjEzY2FkZjB4MmNmMWExZDdjNDQzMDkxMDlkNzVhY2JjOTM5NWNiODM5OGM4YjJkNDI4NTM4NTcxZmFmYTM4OWRhMjk5OTBjNjB4MTQwZmIzOWE4OWYyNmY2ZDg3Y2Y3NmNkNWNlOGRhNDdhYTVkOGEwMjNlMjRjZjAxNmVjZjY0Y2Y3OTNjOTg4MDB4MTI4OWQxM2Q1OGExN2I1YmYwNzEyYjIwMWZiM2NkZGZjZTJjMTZkYWMxNTk5OTBiODI5OGE5M2E4NTg5ZjllODB4ZjQ1Y2Y5NzRkMmM5ZWRiNTc4MWU4ZDNkMjA3YWRjODM3MGNmNTZiYzUyMTg3NDk2MTA5MjBmZTk4YjJkYjJlMHgxMTkwOWM4MWExNjUxODA0NmI3OWVkZmQyNGY1YWJjYzU4NWE4MWQxYjMzMzU2OGI4Njg3YTFjOWVjZWI0NGQ0MHgyOTkwYjIzYzgxODgyZjc3MDlmM2I4OTFhMGUzZGE0ZDY5MTc2NzJmMmQ1YTEwNDFmZDdiYmQ2NzkyMzMwZDE2MHg2MDk1NTFiMTQ3MTZjYTNjZDU1NjBlMDgyMWU3Mjg1ZTBhMDgzZWE5YTE2ZGMxMDJlY2Y0NjFlNGFlZjcyNzcweGM4YzFhYmRmYWI5OWQwM2ZkOTNkY2VkMjQ2NzM1NGI2MTc1ZGUxNzU1ZjRmOTNkYzA4ODBlYWEwOGQwM2Y3NzB4MTM4YmQwOThjNDkyM2I5ZmJkMDJmMzNmOGJlYzZjNzMwZGIzZmVkMjk4ZWMwOWY3OGE3YTU1ZDA4ZjJlMGIxMDB4MmU2MWU0YmMwMjE2MzAxMTQ2NzNmMGY3NzE2MWFlNTVkY2QwYjQ1Y2UwN2Q5YWUzZjIxYmI1YTMxOTBmMTRjMDB4MTI0ODYwOTEzZTNkZjhmNjVhOWM0MDYwY2UzMjk3YzYyNmFiZDFjMjI0MDFjOTA1ZGRiNDA4MjYwZDhlOTEwMHgxMzgwN2Y4OWMzOTRhMTMzZWMxMDQ4MDRkOTU1Y2JlMTI1ZjI0YzU3MDFkOTgyODZjNmFjOGI3ZWQwNTJlYzgweDJlODhkMWE2OTM4ZjA3ODgxMzJhYTllZWFlYzA4ZDJmNTlhYTQ0NDA1MGM4ZjRjNGU4NTU3OGFiYjBmYzJmZTUweDFmM2QyNGYxN2NmYzYwNTBhMGNiZjY0ZTFmMTc4N2UyMjU3YmUzYzNiYTYwN2MyZThmY2MxZjI2YWJmMzEwNDB4MWZlMWNiMGUyYWUxNjlmODNiOWQ0ZjEzM2Q0MWZiNWIzZmU2Yzc2YTgyYTkxNmJmZDliNjJmODJmMGY4ZDBiZjB4ZWY3OTM1MTIyOTQwOWNkMzUzMzI5MjIxMjI5ODI3ZTE5OTQ2ZjNkOGQxYzQ4YmY1ZTMzNzdmOTE3NzA3MWYzMHgxOGZiMmU0NmZjMWI5MGZlMWM0ODkzZWY3N2E5ZDExMTUwNzU1MTg4MzEyNzg2MGU4OTA4ODYwODM3M2JlZGE5MHg3N2FmZTI1NzlmNDJlYzE0YzMyZWYwNzYxZTIzYTNjYzBhZDYyNjNhNjhjNWNiNjE5MTZiZDU3MTIwZDE4NjgweDc5NzY5MDkyZGFhNWE3NTI2NDJjMDRjY2Y4YTZlYTU0ZTJhYzk4MzZmZGQ2NWQyNDhiMTg2ZjE0OTBiN2I5OTB4MWQ4YmYyMjljMTk5NjhmMDI1NGViNmUwOWM1YzhiZmQ2N2ViOTczNDYwNmI2NzZiNjYzYzc2Y2Y3NmJhYjRhNTB4MmEzM2I3ZDg1NWU3ZmU1NWY5MzU1NmU0OWU0YjM3NzM3NjY0ZjE0MjM2ZjE3MjU2NDI4ZjI5ZjZlYzFiZGRhZDB4MjViMDMzMWQ3ZTJiMTVhZjRlYzE2MWM4NmU4NGJhNmFiMjA1NjA3N2U3YWE3NTM2MzQwZGMzMTg3Y2NjYThiMjB4NzYyMDk4ZjVmZTI2NTk4Y2NiZjQ1ZTQ4MTAyMTFiMGZmY2Y4Y2NiYjkyYzE2ZTJmNGYxM2YyMjM0MjQ3NGUyMHhlMjM0ZDcyMGQ3MGIyODg2ZDBkYTRjMDA3YjFiZGE0MjM2MmUxNDQxODVjNzA3MTZkZWNlMmI2MTcyYzI1MTQweDFkODJiZWRjY2QyYmM4YTA2ZTM3NDJlNzIwYjdmZWMyZWE3MjE4MmYxMWMwYzYwZDEzNWM4MTExNTJhYTRiNjAweDQ4MDA2NGQ0YjNlYjBhZGE1ZTlhM2U3ZDA1OTMwYjdjMzM5N2ZkNmI5NGQ0ODEzMTRiZDFjNjkwYTE3Yzk3OTB4MTBhODkyNzYzYjNjY2E5ZWY3NTkzZmJiMTE0MGVkYzhjOGU0NTgwNTY4NTYwY2Y0MTg2N2Y3NDY0ZmIwYzExYTB4YjVlYzY0NTQ4ZWE4NDFhYzkyMWY5YjI1NTM2ODA3ODU5NzhiMzE1NjY3YWU0NzE0ZGRlNGNkN2Y0ZGU4YjkxMHgxMDU1NGFjYTRlMzQ4ZTU5NDk3NjFiZDcxMzFkZmFlYmQ3ODAxMGVkZDAzMGUxYTljZTNjNjVjOWRiOTMxZDQ2MHgxNWJlNjZmMzhkODZiMDk5OGI5MzY1NTQ2MmIxZjQ3NWI5YmU5ZGUzMDZlMTUwZDRhYzY0OGZhYjNkYjBjZmY2MHgxNzZhZDM2MDBmZDM0OTExODJkMTgyOTU3ZmZhZDAxYmY2YzI2ZTlkNGFiMGMyM2NhYWYzMDhlNDI3ZDNkYmU4MHgyYjZmMzU1YjNkYmY2NWYwOTMzNTAwMWQ3MDVhYzEyNWUzYmViMjBmNGZjMTFiZDNjZTgyYjVjZjBhZjJlNmYyMHgxYzg1YzA2YTZkNWQ0MGQ4MWQ3Yzg5ZWRlZmIzMmQxYTg0NDhjNTEyODhmYTI5NmI2ZGU5ZmY3ODhjNzc0NTEweDIwZTFlODc2YzQ3NDZhMGNiZDlhNTFkNzZiMmUyNWY4MjM2MWMzODllNDNmN2QxZjUxYTcwYWFhYzI0NjBkNzkweDIwZTQ2MjE5ZjY4NDE4NmQyYTAyNGI2MzdiYzM1YTI5ZWUzYjA4Y2U3Mzc3MDEzOTJkOTg3ZGRhOTIxN2ZhMDgweDJlYTcyNzlkYjlmMmFhMGY2NTRlOTg3OTA3Mjc3YzI0NDgwNzY2MzY3YThiZDkwZTI4YmUwZjJlZDYwOTEzNjcweDEzNmJlMmE3ZjE4OTI0YzkzNjIwOTZkNDcyYmM3NWNhMDk2OWRjMDc3YzkxNzFiMTY0MWJlOTUwOTE3ODBmNzQweDFjYTIwMzM1MDFiYWEzZjczMDY3YzQzMDBmYjBmNTExMTllZDU3MzZmYmM4ZjFmNmM5MjRiYWYwZGY1YTBlOWUweGE4MmYxOTljMjUwNTI3N2VjYWE3NWU0OTVmMzRlMzUyNTgyNGY3YTRhOWQ5ZmExZGE4MTA4MzJiNDhhNTBjNzB4ZWNmMTA0ODUzMDdiNGJhZTkyZmVmYjBkN2Y3NzgyYTlmMzdhMjcyMmU3ZWQ5ZWI3OTI1YTJkZWE1ODBiN2Q1MHg3YjY0MjEzOGRmZDZhNmRkMTJhYTIyZjA4YTgyOTZkNjg2MTVjODQ3OGYxM2FmMTZhZWJiYmIzMzlhMzkzNmIweDFkOWRkYTQzYTI1NTkzZmZkMjI1NmQzNDkyMWZiODZlZDcwZTc2MGJhNzZkNjFlOWNiYzNiNmRkMGYxYTIxNTAweDJmMWFmMjI4NTIwYzhiNzUxZGM5MTEzNmM5MWM2YmNjZDUzNjdlYjA4MjEzZDM5Mjk1OGNlMmZkM2Q3ZDJmY2UweDFmZWNmZTgzM2FkNTQwNDU1YzZkNmMxYWIzZGU0YWJhZTYxYWRhNjI1YTFhMmI2YjE4NTUxYTQ1YTZjZGUxMjMweDE4ZmM4ZTYwOGM3MzViMmIzYjBkNzU4MzQ2MDIyNzU3NTY1N2ZmOGE3N2FiZTYzN2JkZDNhZDI4ZTRhMjNjODgweDI4Zjc0MGJjMTE4MmU5NzA2ZWJmMDNjYjNmNTNhYmE4YTQzY2UwYjYxODc4M2E1NTg2Mzg4YTc1NDdmYWE4MTUweDQ3OTk4Y2MwYWY1YTI2Yjk0YWQzMDFlNGI5OThkMjllOTYwYTQ4NTFjZmQxMzgyMmJlZDM1YjcxNDY5NjZhNDB4MWI1ZjE1MjViMzFkYjkxMWRkYTQzZTQxNWUxYjlhM2E5NzI1YzdiNTJlODgwZWUxMzBhMTRhNjkyYjc3N2I3MDB4Mjc1YTgzZmE1ZDE5YjQ1MzVmNjVlOTY1YTkwZWFjOWJmNzcwYWU5YmQxZDdiMWFmOTQ1ZmE1N2VkNWM4ZGU2ZTB4MmU4Nzg5MjU3ZWQyY2JjY2NiNDMwNTY4ZTQ5YmM5ZGMyYTU2MzM1OTgwOGM5ODk3Y2UzZTQwYTZmNmEyN2FhODB4OTI3ZjQ2Y2ZlODBmZWVmZWIyNzIxYTRjMDllOWQxN2Y2MGMzNDUwMGRjZDZlNDFlMjkyNWEzOWM4ZTJjN2MxMHgxZjg2OGFlMDQ4MzJhNWRiYzM3NjE5YmZlNmFiNmE5N2ZkOGZiMmNmYmMxZWNmOWUwZTQ4NGJiZmU3Njk4MTAxMHg5ZDdhMTFlMjdkMmY1MzEwOWI3M2Y3NDViMmRlZmVkNjVkOTRiYTgwZjMwOGZiMTljZTZkNTZjOWI0NWVmZjQweDI4MmQ4NTdjZmU4ZGEzYjUxMDRlMWMyODIzZmI3YzViOWE3YjI1OTI0ZmRhNTk5NWIwYzM1MWFhMmI4NzlkZmYweDIwYmE4YTlmY2VjODE1YjEzZjM0OWZmODMwYWU2NjNiMjc1NzZlMTM1YzA3NDRmNjk4N2ZiMGY2ZmY0OWMyMTcweDExYjZhZmM5MWUzMmYxY2E0NTg5ZmJhMTJlNjU3ZDIyNmQ1N2I0NzFkZGQyYWIxYjY2YThhZTRkY2JmYjEzNmUweDJlNjY2NDAyYWM5Y2M1ODgzMTZlMzM1YzdkOTNkYjM0NDc4OGVlYzJjNzJkZGYzZjkwODE0MTczNmNlYmMzYmUweDE3NTIyZTBlOWU2NGY3OTVhMjAyYTExMGUyODNmYWFkNzA1N2FlYzVjOWVkOWExYTc0OTIwZjI3OTRmMTg1OTUweDJkMmVkMTdmN2ExZjNlZTllMjBiNDcwY2FkNGNjNzMxOWU2YWRiNDBlMmZmMjRiNzg3OGNiOTg3OGVkYmQzYjkweDFhODFlZmIxOWQ3ZTFlZGFhOTZmYTI3NmU4OWU4NWQwOGY3NWU1NGE4MTM2ZjRkNzNjOTM3ZGExNmM3YmY5ZjQweDI3ZmY1N2MxY2E4NDdlNTcyMTBhN2I0NGU1MmU1NjMwZjI5OWM1ZjQ1MWM3YTBkNTE1YTE2YmIzYmQzM2UyMzcweDFjMWE4ZTIyMjMwYWJjZDEzYzViZTk2MDMxYmZhMTY3ODQwZDExN2IzYzZhNWEwYTExYmUyNmE3ZjVmYjFhOTQweDJhMWMzZjE1ZDQ5MjdjODQzNjI3YTljZDUzM2U0MjUwZDgxZTc3NzRkMmMzMmI1OWQ1ODM2ZjljMTlhNTY1NzB4MmRkYmI3MjM5ZWI5MDRkODFjNTI0OTliMzdjYjRiZTFhZjAzNzNhMTBhYzExMmUxODVhY2IyMTk4OTkzNTdlNDB4ZGZmMTk4MzkzMDg1YTc1NGUwZDZmYWVjNTRiZTgxZDhlZGY4YmMyNWVkYWRhYjQ4YTg2ZmFkNmRhMGFmYjYwMHgxMGQ1MGMyNDczMTQ2YmJjNzYyNzVmY2M1ODlkMDM4ZGVjOGRiMjg3Mjg3ODlmMjhiNmQ1ZjUwNGJkMTY0NWNhMHg2MWU4MzI4ZmI1NTkzZjkyYTUzZGZkNDBlMTAyMmU2MjMxYmE0NTk0ODUwNjI4MjUzNmIwOGI0NDc2YzE1MzgweDFiNTg5MjQzODQ3MTk4ZGVkOTBiNjQ0YmVlMzFhYzU4MDY3ZGViZjNmMDdkM2M1MWNmYTVhMGRkOWY2ZDk3ODQweDRiMDBjMGRhMWY4NTFlNTk4NjNiMDUzYmQ0YzYwODcxOTBmMGJkY2NlZDk5ZDVjZTZmNjdhNDIwYTNiZDFmNzB4MjM5OTQxYTQ2YzJiOTNkOTEyNmE3MDE2MzAwOWE3YWMyN2Y4YThkNDJlMzUwMThiM2JlYzhjZGNiNWRkZmQ2NzB4MjA0ZjI2Y2E3OTkzYjAzYWMyYzM1Mzc3Y2IwYTM3MTJiZmM5YmMzZWMwYmZlY2I0ZTg3ZWY2ODE0YWNmMmVhMjB4ODVhZmY5YzdmZGFkYmEwMzlkODMyZDhiZTE2NWExZTU3NDdjZjczMDhkNTE1ZTM0OGVmMTE3ZTkyNmQ3MjFjMHgyNDkwNDJhOGRjMTExZjI3YzRhZTlkYjA0NGMwYjBiM2YxMGU1N2QwNWUwOTMxNThlZmQzNzVkZjAwZWEyMDY4MHg2ZTc5OWJjZGYyYjRhNzQ1NDI4NTRmMzAyOTgwM2UyZjg0NTUwNjY1MjAzMzI3YjNlMDgyNTk3NzQxM2U5NmIweDFjYjNjYWVkNGJmZmI2YWNhOWY0ZDJjMDAyOTIxYmMzZmZmZWQzMzNjYWUxMjA4NWM2MTI0OTYxODNiODc5OTYweGI0N2U5NzU1ZmFlNDgwMTI4YTEyOGJmZDRmYWE2YTNkZDZlYTAzY2FiNTY2ODg5ZGNkOTllODRkMzEwZDUxYzB4YzdlNGNlYTM2NWMyMDYxOTIwYTBjOWZkMmMzNjBhNjUwNjI5M2JjMDI0ZmQxY2EzZjBiYjczMGRhODg2YTRmMHgyMWRhMWY3MDFiYWM3N2JjYmJhYTMwZDk2NGQ2ZjZmNjNkYmUxYjIwZDlkNjk4OGM4ZGNkN2JhNDE4NzIxNWRmMHg5YWU2MTJlOGJhMWNhMTM3MDkwNWZiNjc4OTlkMTBkYjg2YjQ3YmQxOTk2NWI2ZWRkMWE5NDg2ZTNjNmNjNTUweDI2MmUxZTBiNTZjYWM0N2ZjMTUwZjI4NDQ5MTE5MGU2YWFiNzU0NDViMGM5OTM3M2ZlMWY3YTBlM2I5NWNmM2QweDIzNGJmNGE3ZGNlNzU4N2MyYzg3YzI5M2UzYmI3YzllMmE3YmZhNWYyOWZkNGRkZWFhNWQzZjY3NDkxZDM0YmQweDJmNmNiYWM2OTRjODg2YjAyZDBhNTI3Y2FjNzQ0ZmI2NThkMjY5MGUyMTNkNzQzMmVlZTY3ZjZjYjY5ZjcwYzIweDIyYWNjYjE4YjdjNDliNGI3YmI4YzlmZGY3OGI3YWRlZDUyYWExODQyZmZmODE4ZDlhMzMwMDg3NmRlYzNhZDkweDgxZTJmMDY1MmY4OThjNmQ2NTlmMjJkMmM3N2JlMzAyZWFiZDkxODJhMGIzZDNjYmY2MjNhMWRmN2Y4ZjJmYzB4MTJjMGEyNWU3MGQwMDZlY2NlYTNhZGE3NWQ2NjliOGM1MzRiOTYyODkwZjNmZmMwMTZiMzE4NmFkNjc1YjkzNTB4MTBlZjljMjM4NDgxMjhjYzJmZDZmYzg2OWRmMjRkN2FiNTZlZmQzNDllZGQ1NmY0OWY4ZDRmMjM4MWRmMzI1OTB4MjE2MWNkMjgwNzcyODE5ZGQ0YTgxMjYyYjcxZGYxYmNjMmMxZDQxYjk0OTFlMDYyMGJkYTM0Nzk2MmIyNDBmMDB4MmNlYmIwYWU1MTA4MzE4ZWI0MDY1OTAwNDFiNTI0ODI5MjUzMzM2NGY3OTliYzQxYjdmNGZkZDEyY2I4ZDM4YTB4MmIyMDkyZjg2YjU5NzlhN2ZlNGY3YzIyZDk1NjFmM2JmMjg1MjI4M2E2NTY4ODBmYjc1OWUwODcwOWEwYTYyZjB4MTU2NmIzNDAyZDc3NGI4YzA4MTQ2MTg4NDI1YTQ0MjQ1MGNmYzkwMGNmNjQzZTczODJiMmQ4NTA3YTA2NWZlZDB4MTFhMzE2YWEzMTYwN2YyNjhmYjRjNTZkNmM1N2JhMDE2MjdjMzYzNWZjY2Y4ZDNkMWExNjNlNjAxZDFhMDE3MzB4ZGU3ZWUwNjljOTM0MjU2Yjc4MjY0OGI1NjBlNTk1NDA4YTVlODQzNDY0NDYwOTE1MmUzNTNkOWMyODc0ZTQ0MHgyZDM2ZjQwMjkyNDU3MDRjYzg0ZGYwMjk3NzA4YzVlNTg0NWMzNmFlNzA2YzcyZTY3MTI4Yjg5NDllYWIxYWYweDFiOGNjMzI2YjVlZTE2MGY1MzE5OGMyMTdmYjM0ZTg5OWJkZTQ2Y2Q4MmRhYmRjMjg0ZDc5NTFkNTQ2Zjg1ODB4Mjc2MjVkYTBmNzNlYTA3MTEwNjg5ZmIyMTg3YjcxNjk0Y2JmOTIwM2ZkNGRkZjhhOTZlY2U4NTQwNzU1MGViYjB4MWNkODMzOGEzZTViMWFkN2NkYzBkYTU4MWE2OTUwZjZkZWEzNDljM2VkZGEwNmNiOTliYTAyNWI5NGU0NzkwZDB4NWVhMDJkNjViMjA5ZjZkYTc2Mzg1NmM5NGI2NDM4Yzc4YThhZWQ4ZDNlNjdlODc3YTEwYTg0MDcyNzQxYTU2MHg5ZjdjYjY4ZDRlMzg4Zjg1MzY2Y2ZjZjI4NGE4OTVkOGI2MjUwY2VkNjI3ZTgxMDgxNzc0M2NlMDMzMzBhNTUweDE4YzYyMzBkZGMwZjg5NjgyN2IwNDNmNWU1OGRiZDFhZWMxMzk5NWEyMDJlNGViY2RmZWI5NjllOWQ1YzEyMTIweDczYTYxMTRiOTk3Mjg1ZTFhOTFjMGEwZmRjY2RhYTg0NTJlNGYwN2JmZDJlMWExMDU3ODIzMjA5NmRiNmRjZDB4MmU3ODc0NjM0MGIyYTZkMjIyYzZhMWZjMDgzOGFkZjVmZTAxM2YzOWIxNjYwY2U3YTNlNzc0MmIyZjM3YmU3ZjB4N2FhMjdlNzE1MGJhZGRkMDYzMDNhZDhlNWU0YmY0MjQ5YjdlYTg0NjU1M2RlZjI4ZTY3NTI1OWQzZTVjODUxMHhiNjZmZGVjMjEwZWE0ZWFiZjYyM2QyNzEyY2Y0ZDlmYTkwMjczY2NiNDY0M2Y2ODBjYmM5ODM0NTcxNWVhZDgweDJmYjZhMjlkOWYzOTRhNTg5YjYzM2I4YTRkNmJlNTFjOWMwNjAxY2UwYjE0MGJlNjQxYWNlYTQxYzQ5YWE1ZTMweDI5MDI1Y2M2NmZkMDQxYzRmYzg0NWU5YzFjMmNkMTI4ODU2OWZiMjQzZDA0OWJkNjc1YTY5ZGM4ODliMmNlMmEweDE1MDk2M2YwYWNhOWJjYmU0MTI2MjE0YWI5YzYyN2E2ZjdlZDczMWNmYTY5NTE2OGI4NWQ1MzRiMTdiZTNmNDgweGVkNTk3ODAzMDIyNTc2NjNmNzJjMWJmYzY2NTZlYjdiNWJjYTJlNDdiZWMwZDU3OThhMDhhMzJhNjFhOGE2NTB4N2UxOWNiOGE4OTMzNjliM2QzMGFlMTg4Yzc2N2YzOTFjMTE4ODhhMzAwMGRlYmZjOGQzMGMwNjE0M2NjMDg0MHg2MDBjN2QyYjY5NDYzNDVlNWYxZWVlYWZiNWViOGVjMmI2ZWNmZTUyOGQyYzA1MmNkODYwYWZiNGEzYWEyNzIweDU5NjA4M2I2Yzk3MmJjMTMwMjJhMWYzM2Q2NTIzYjQ3NzNmMmNkMGE0ODBlMTllYTAxMjUxMTlmMDM4NTcwNTB4MjEwYjVjMzZmMjdhMDdkOTdmOThiOWQ4NjYzZDg1ZGIyZTY0NTEzMDk5YThlMWVmNmRiMjEwNDM2MzFlMjRjNDB4MTNiYjI3NjRiZjE0NzVjZmM3YmI5ZjNk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AOOrEAD1qxAABQAAAAkAAAAJAAAACQAAAAYAAAAIAAAA1A8RANkPEQDiDxEA6w8RAPQPEQD6DxEAAAAAAAQAAAAAAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbnVtLWJpZ2ludC0wLjQuNi9zcmMvYmlndWludC5ycwAAkBARAF4AAAAsAAAAHQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvY29udmVydC5ycwAAABERAGYAAADwAQAAFgAAAGF0dGVtcHQgdG8gZGl2aWRlIGJ5IHplcm8AAAB4EREAGQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvZGl2aXNpb24ucnMAnBERAGcAAABwAAAACQAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUAmuZ/OeoRARrXrEtDtqcbS78ShfOES3dkJPaw9qDSMGf//1Ox/v+rHquq//////65/////////3//////////////////////7f////////8poDHhck5kMF1YgYG2RVC4jcpxaJFqgZdH/XzYFowgPCmgMeFyTmQwXViBgbZFULiRcLl5SOgzKAEAAPCT9eFD////////////////////////////////L/z///7///8BAAAA/////wAAAAAAAAAA/////wAAAAD//////////wBB4KbEAAuJK6rjypLlj5gRLZUZtYU+eZrAg52TqYjrZ9W2lUxsR+WN8QTRCabmdgpGFzQcNB/f9AAAAAAQAAAACAAAAGQAAAAvdXNyL2xvY2FsL2NhcmdvL2dpdC9jaGVja291dHMvbGFtYmRhd29ya3MtZWRlOTYzMzY3MWQxMWExNS9iZTRhMzI5L21hdGgvc3JjL2VsbGlwdGljX2N1cnZlL3BvaW50LnJzoBMRAGQAAAA0AAAAHQAAAAAAAACT5ID6w172FW3sVqKXGgdcRVdScFNYzne6WMdTV5hIXwIADMQLAPTr/f8CAAAACXZJbnZhbGlkSGV4U3RyaW5nSW52YWxpZERlY1N0cmluZ0hleFN0cmluZ0lzVG9vQmlnRW1wdHlTdHJpbmdEaXZpc2lvbkJ5WmVybwAAAAAAAAQAAAAEAAAAAwAAAFJvb3RPZlVuaXR5RXJyb3JJbnZaZXJvRXJyb3Jn5glqha5nu3Lzbjw69U+lf1IOUYxoBZur2YMfGc3gWy9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAADgFBEASgAAAL4BAAAdAAAARmllbGRFbGVtZW50dmFsdWUAAAAAAAAABAAAAAQAAABlAAAAAAAAAAQAAAAEAAAAGgAAAHRvb2xzL2dhcmFnYV9ycy9zcmMvYWxnZWJyYS9yYXRpb25hbF9mdW5jdGlvbi5yc3AVEQAwAAAAHwAAAFcAAAB0b29scy9nYXJhZ2FfcnMvc3JjL2NhbGxkYXRhL3NpZ25hdHVyZXMucnMAALAVEQAqAAAAjwAAAAgAAACwFREAKgAAAOQAAAAIAAAAAAAAAAjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FuwFREAKgAAAPAAAAAaAAAAsBURACoAAAD4AAAAGgAAAGYAAAAMAAAABAAAAGcAAABJbnZhbGlkIHBvaW50IFIAsBURACoAAABCAQAASwAAAEludmFsaWQgcG9pbnQgUACwFREAKgAAAEABAABLAAAAsBURACoAAADmAAAADAAAAEludmFsaWQgcyB2YWx1ZUludmFsaWQgUHkgdmFsdWVJbnZhbGlkIFJ5IHZhbHVlNTIwMzZDRUUyQjZGRkU3MzhDQzc0MDc5Nzc3OUU4OTgwMDcwMEE0RDQxNDFEOEFCNzVFQjREQ0ExMzU5NzhBMzJiODMyNDgwNGZjMWRmMGIyYjRkMDA5OTNkZmJkN2E3MmY0MzE4MDZhZDJmZTQ3OGM0ZWUxYjI3NGEwZWEwYjBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUAAAAAAAABAAAAAQAAAGgAAACwFREAKgAAABYBAAAOAAAAsBURACoAAAATAQAACgAAALAVEQAqAAAADwEAAAoAAACwFREAKgAAAAsBAAAKAAAAsBURACoAAABpAQAADQAAADAxMA0GCWCGSAFlAwQCAQUABCAAsBURACoAAAB4AQAACAAAALAVEQAqAAAAhAEAAAwAAACwFREAKgAAAIIBAAAMAAAAsBURACoAAACGAQAACAAAALAVEQAqAAAAgQEAADMAAACwFREAKgAAAHwBAAAwAAAAsBURACoAAAB9AQAADAAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvY29yZS9zcmMvaXRlci90cmFpdHMvaXRlcmF0b3IucnOUGBEAWAAAAMEHAAAJAAAAsBURACoAAADYAQAAMgAAALAVEQAqAAAA5QEAAA8AAACwFREAKgAAAOoBAAAMAAAAsBURACoAAADeAQAAEwAAAHNpZ25hdHVyZV42NTUzNyBtb2QgbW9kdWx1cyBkb2VzIG5vdCBlcXVhbCBleHBlY3RlZF9tZXNzYWdlZXhwZWN0ZWRfbWVzc2FnZSBtdXN0IGJlIGxlc3MgdGhhbiBtb2R1bHVzc2lnbmF0dXJlIG11c3QgYmUgbGVzcyB0aGFuIG1vZHVsdXNtb2R1bHVzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGZpdHRpbmcgaW4gMjA0OCBiaXRzABAAAAAQAAAAEQAAAAsAAABIFBEAWBQRAGgUEQB5FBEAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzABwaEQBXAAAA+xgAAAEAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEwMC9zcmMvY29udmVydC9zbGljZXMucnMAAACEGhEAaQAAACQBAAAOAAAAY2xvc3VyZSBpbnZva2VkIHJlY3Vyc2l2ZWx5IG9yIGFmdGVyIGJlaW5nIGRyb3BwZWRMYXp5IGluc3RhbmNlIGhhcyBwcmV2aW91c2x5IGJlZW4gcG9pc29uZWQyGxEAKgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL29uY2VfY2VsbC0xLjIxLjMvc3JjL2xpYi5ycwAAZBsRAFoAAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AADQGxEADgAAAGQbEQBaAAAAegIAAA0AAABKc1ZhbHVlKCkAAAD4GxEACAAAAAAcEQABAAAAAAAAAAEAAAAAAAAAgoAAAAAAAACKgAAAAAAAgACAAIAAAACAi4AAAAAAAAABAACAAAAAAIGAAIAAAACACYAAAAAAAICKAAAAAAAAAIgAAAAAAAAACYAAgAAAAAAKAACAAAAAAIuAAIAAAAAAiwAAAAAAAICJgAAAAAAAgAOAAAAAAACAAoAAAAAAAICAAAAAAAAAgAqAAAAAAAAACgAAgAAAAICBgACAAAAAgICAAAAAAACAAQAAgAAAAAAIgACAAAAAgC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2tlY2Nhay0wLjEuNi9zcmMvbGliLnJzQSByb3VuZF9jb3VudCBncmVhdGVyIHRoYW4gS0VDQ0FLX0ZfUk9VTkRfQ09VTlQgaXMgbm90IHN1cHBvcnRlZCEA2BwRAFYAAADuAAAACQAAAG1pZCA+IGxlbgAAAIAdEQAJAAAAL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbnVtLWJpZ2ludC0wLjQuNi9zcmMvYmlndWludC9hZGRpdGlvbi5ycwCUHREAZwAAADsAAAAaAAAAlB0RAGcAAABvAAAAFwAAAJQdEQBnAAAAagAAACIAAAAAAAAABAAAAAAAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L2NvbnZlcnQucnMAADgeEQBmAAAA8AEAABYAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L3N1YnRyYWN0aW9uLnJzAACwHhEAagAAAIcAAAAlAAAAVGhlIHJhZGl4IG11c3QgYmUgd2l0aGluIDIuLi4zNgAsHxEAHwAAADgeEQBmAAAA3gAAAAkAAAA4HhEAZgAAAPAAAAAVAAAAOB4RAGYAAAD6AAAAEwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQucnMAAIQfEQBeAAAALAAAAB0AAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L3NoaWZ0LnJzY2FwYWNpdHkgb3ZlcmZsb3cAAAD0HxEAZAAAABQAAAAsAAAAhB8RAF4AAADEAQAALQAAAIQfEQBeAAAAYwMAABcAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWdpbnQucnNzcXVhcmUgcm9vdCBpcyBpbWFnaW5hcnkAAAD5IBEAGAAAAJwgEQBdAAAACQIAAAkAAAAvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAALCERAEoAAAC+AQAAHQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQucnMAAIghEQBeAAAALAAAAB0AAAAAAAAABAAAAAAAAAABAAAAbWlkID4gbGVuAAAACCIRAAkAAAAvdXNyL2xvY2Fs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L3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50L2NvbnZlcnQucnMAAAA7EQBmAAAA8AEAABYAAADcOREAZwAAAO4AAAAfAAAA3DkRAGcAAAAVAQAADgAAANw5EQBnAAAAFgEAAA4AAADcOREAZwAAABoBAAAPAAAA3DkRAGcAAABRAQAADAAAANw5EQBnAAAAIAEAACEAAADcOREAZwAAACEBAAAYAAAA3DkRAGcAAABCAQAAPAAAAHA6EQBeAAAAYwMAABcAAAAvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAACDwRAEoAAAC+AQAAHQAAAGF0dGVtcHQgdG8gZGl2aWRlIGJ5IHplcm8AAABkPBEAGQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvZGl2aXNpb24ucnMAiDwRAGcAAABwAAAACQAAAAAAAAAEAAAAAAAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvY29udmVydC5ycwAADD0RAGYAAADwAQAAFgAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvbW9udHkucnMgAAAAAQAAAAAAAADoPREAAQAAAOg9EQABAAAA6D0RAAEAAACEPREAZAAAADMAAAAFAAAAhD0RAGQAAABPAAAAGAAAAG1pZCA+IGxlbgAAACw+EQAJAAAAhD0RAGQAAABSAAAAKgAAAIQ9EQBkAAAAQQAAACkAAACEPREAZAAAAEYAAAAPAAAAhD0RAGQAAACKAAAAEwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQucnMAAIQ9EQBkAAAApgAAABYAAACEPREAZAAAAKcAAAAMAAAAhD0RAGQAAACoAAAADAAAAIQ9EQBkAAAArwAAABcAAACEPREAZAAAAMEAAAAYAAAAhD0RAGQAAACqAAAAIwAAAIQ9EQBkAAAAqwAAABAAAABhc3NlcnRpb24gZmFpbGVkOiBtLmRhdGFbMF0gJiAxID09IDGEPREAZAAAAIoAAAAFAAAAgD4RAF4AAABjAwAAFwAAAGF0dGVtcHQgdG8gZGl2aWRlIGJ5IHplcm8AAACUPxEAGQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvZGl2aXNpb24ucnMAuD8RAGcAAABwAAAACQAAAAAAAAAEAAAAAAAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvY29udmVydC5ycwAAPEARAGYAAADwAQAAFgAAAGF0dGVtcHQgdG8gY2FsY3VsYXRlIHdpdGggemVybyBtb2R1bHVzIQC0QBEAJwAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvcG93ZXIucnPkQBEAZAAAAIcAAAAFAAAAL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAAFhBEQBKAAAAvgEAAB0AAAAvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL2l0ZXIucnMAALRBEQBOAAAA9AUAABUAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWd1aW50LnJzL3Vzci9sb2NhbC9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbnVtLWJpZ2ludC0wLjQuNi9zcmMvYmlndWludC9zaGlmdC5ycwAAckIRAGQAAAAeAAAAHAAAAHJCEQBkAAAALgAAABIAAAByQhEAZAAAACgAAAAZAAAAFEIRAF4AAABjAwAAFwAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzGEMRAFAAAAAuAgAAEQAAAAAAAAAEAAAABAAAAHgAAABtaWQgPiBsZW4AAACIQxEACQAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvYWRkaXRpb24ucnMAnEMRAGcAAAA7AAAAGgAAAG5lZ2F0aXZlIHZhbHVlcyBhcmUgbm9uLXplcm8vdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9udW0tYmlnaW50LTAuNC42L3NyYy9iaWdpbnQvc2hpZnQucnMAMEQRAGMAAABmAAAAKAAAAC91c3IvbG9jYWwvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL251bS1iaWdpbnQtMC40LjYvc3JjL2JpZ3VpbnQvc3VidHJhY3Rpb24ucnNDYW5ub3Qgc3VidHJhY3QgYiBmcm9tIGEgYmVjYXVzZSBiIGlzIGxhcmdlciB0aGFuIGEuAAAORREANAAAAKREEQBqAAAARQAAAAUAAACkRBEAagAAAGUAAAAFAAAAYXNzZXJ0aW9uIGZhaWxlZDogYV9oaS5pc19lbXB0eSgpAAAApEQRAGoAAABiAAAA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aC9zcmMvZWxsaXB0aWNfY3VydmUvcG9pbnQucnMAM1ERAGQAAAA0AAAAHQBB2KPFAAvwAZPkgPrDXvYVbexWopcaB1xFV1JwU1jOd7pYx1NXmEhfAgAMxAsA9Ov9/wIAAAAJdprmfznqEQEa16xLQ7anG0u/EoXzhEt3ZCT2sPag0jBn//9Tsf7/qx6rqv/////+uarjypLlj5gRLZUZtYU+eZrAg52TqYjrZ9W2lUxsR+WN8QTRCabmdgpGFzQcNB/f9ERpdmlzaW9uQnlaZXJvAAAAAAAABAAAAAQAAAB7AAAAUm9vdE9mVW5pdHlFcnJvckludlplcm9FcnJvcgAAAAApoDHhck5kMF1YgYG2RVC4jcpxaJFqgZdH/XzYFowgPABB6KXFAAuhBy/fB5rBdwoOLEZ5eG+jbmY9C8f1KOt4Cp0Nj8WNQ13TL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAAhTEQBLAAAAfQUAABsAAAAvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5yc2RTEQBQAAAALgIAABEAAAB/AAAADAAAAAQAAACAAAAAgQAAAIIAAAAvcnVzdC9kZXBzL2RsbWFsbG9jLTAuMi43L3NyYy9kbG1hbGxvYy5yc2Fzc2VydGlvbiBmYWlsZWQ6IHBzaXplID49IHNpemUgKyBtaW5fb3ZlcmhlYWQA3FMRACkAAACoBAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHBzaXplIDw9IHNpemUgKyBtYXhfb3ZlcmhlYWQAANxTEQApAAAArgQAAA0AAABBY2Nlc3NFcnJvcmNhbm5vdCBhY2Nlc3MgYSBUaHJlYWQgTG9jYWwgU3RvcmFnZSB2YWx1ZSBkdXJpbmcgb3IgYWZ0ZXIgZGVzdHJ1Y3Rpb246IACPVBEASAAAAG1lbW9yeSBhbGxvY2F0aW9uIG9mICBieXRlcyBmYWlsZWQAAOBUEQAVAAAA9VQRAA0AAABsaWJyYXJ5L3N0ZC9zcmMvYWxsb2MucnMUVREAGAAAAGQBAAAJAAAAfwAA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H0ZHTk9YWlxefn+1xdTV3PDx9XJzj3R1liYuL6evt7/Hz9ffmgBAl5gwjx/Oz9LUzv9OT1pbBwgPECcv7u9ubzc9P0JFkJFTZ3XIydDR2Nnn/v8AIF8igt8EgkQIGwQGEYGsDoCrBR8IgRwDGQgBBC8ENAQHAwEHBgcRClAPEgdVBwMEHAoJAwgDBwMCAwMDDAQFAwsGAQ4VBU4HGwdXBwIGFwxQBEMDLQMBBBEGDww6BB0lXyBtBGolgMgFgrADGgaC/QNZBxYJGAkUDBQMagYKBhoGWQcrBUYKLAQMBAEDMQssBBoGCwOArAYKBi8xgPQIPAMPAz4FOAgrBYL/ERgILxEtAyEPIQ+AjASCmhYLFYiUBS8FOwcCDhgJgL4idAyA1hqBEAWA4QnyngM3CYFcFIC4CIDdFTsDCgY4CEYIDAZ0Cx4DWgRZCYCDGBwKFglMBICKBqukDBcEMaEEgdomBwwFBYCmEIH1BwEgKgZMBICNBIC+AxsDDw1saWJyYXJ5L2NvcmUvc3JjL3VuaWNvZGUvdW5pY29kZV9kYXRhLnJzAAAACWURACgAAABNAAAAKAAAAAllEQAoAAAAWQAAABYAAABhdHRlbXB0IHRvIGRpdmlkZSBieSB6ZXJvAAAAVGURABkAAABhdHRlbXB0IHRvIGNhbGN1bGF0ZSB0aGUgcmVtYWluZGVyIHdpdGggYSBkaXZpc29yIG9mIHplcm8AAAB4ZREAOQAAAHJhbmdlIHN0YXJ0IGluZGV4ICBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aCC8ZREAEgAAAM5lEQAiAAAAcmFuZ2UgZW5kIGluZGV4IABmEQAQAAAAzmURACIAAABzbGljZSBpbmRleCBzdGFydHMgYXQgIGJ1dCBlbmRzIGF0IAAgZhEAFgAAADZmEQANAAAAAAMAAIMEIACRBWAAXROgABIXIB8MIGAf7ywgKyowoCtvpmAsAqjgLB774C0A/iA2nv9gNv0B4TYBCiE3JA3hN6sOYTkvGOE5MBzhSvMe4U5ANKFSHmHhU/BqYVRPb+FUnbxhVQDPYVZl0aFWANohVwDgoViu4iFa7OThW9DoYVwgAO5c8AF/XShbEQAqWxEALFsRAAIAAAACAAAABwBBjM7FAAsBdgB8CXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS44Ny4wICgxNzA2N2U5YWMgMjAyNS0wNS0wOSkGd2FscnVzBjAuMjMuMwx3YXNtLWJpbmRnZW4TMC4yLjEwMCAoMjQwNWVjMmI0KQBrD3RhcmdldF9mZWF0dXJlcwYrD211dGFibGUtZ2xvYmFscysTbm9udHJhcHBpbmctZnB0b2ludCsLYnVsay1tZW1vcnkrCHNpZ24tZXh0Kw9yZWZlcmVuY2UtdHlwZXMrCm11bHRpdmFsdWU=';"
  },
  {
    "path": "tools/npm/garaga_ts/tests/starknet/drandCalldata.test.ts",
    "content": "import * as garaga from \"../../src/node/index\";\n\ndescribe('Drand Getting calldata', () => {\n\n    const roundNumbers = [1, 2, 3, 'latest'];\n\n    test.each(roundNumbers)(\"should get Drand calldata for round %s\", async (roundNumber) => {\n\n        await garaga.init();\n\n        console.log(\"roundNumber\", roundNumber);\n\n        const drandCalldata = await garaga.fetchAndGetDrandCallData(roundNumber as number | 'latest');\n\n        console.log(\"drandCalldata\", drandCalldata);\n\n    });\n\n});\n"
  },
  {
    "path": "tools/npm/garaga_ts/tests/starknet/drandTlockCalldata.test.ts",
    "content": "import * as garaga from \"../../src/node/index\";\n\ndescribe('Drand Tlock Encrypting and Getting calldata', () => {\n\n    const roundNumbers = [1, 2, 3];\n\n    test.each(roundNumbers)(\"should encrypt message and get Drand tlock calldata for round %s\", async (roundNumber) => {\n\n        await garaga.init();\n\n        const text = 'Hello, world!';\n        const message = new Uint8Array(16);\n        message.set(new TextEncoder().encode(text));\n\n        const randomness = new Uint8Array(16);\n        randomness.set(new TextEncoder().encode('fixed_randomness'));\n\n        console.log(\"roundNumber\", roundNumber);\n        console.log(\"message\", message);\n\n        const drandCalldata = garaga.encryptToDrandRoundAndGetCallData(roundNumber as number, message, randomness);\n\n        console.log(\"drandCalldata\", drandCalldata);\n\n        expect(drandCalldata).toBeDefined();\n        expect(drandCalldata.length).toBeGreaterThan(0);\n    });\n\n});\n"
  },
  {
    "path": "tools/npm/garaga_ts/tests/starknet/groth16Calldata.test.ts",
    "content": "import { Groth16Proof, parseGroth16ProofFromJson, parseGroth16VerifyingKeyFromJson } from \"../../src/node/starknet/groth16ContractGenerator/parsingUtils\";\nimport * as garaga from \"../../src/node/index\";\n\n\nconst PATH = '../../../hydra/garaga/starknet/groth16_contract_generator/examples';\n\ndescribe('Groth16 Getting calldata', () => {\n\n  const proofAndVkWithPublicInputs = [\n    [`${PATH}/proof_bn254.json`, `${PATH}/vk_bn254.json`, null],\n    [`${PATH}/proof_bls.json`, `${PATH}/vk_bls.json`, null],\n\n    [`${PATH}/gnark_proof_bn254.json`, `${PATH}/gnark_vk_bn254.json`, `${PATH}/gnark_public_bn254.json`],\n    [`${PATH}/snarkjs_proof_bn254.json`, `${PATH}/snarkjs_vk_bn254.json`, `${PATH}/snarkjs_public_bn254.json`],\n\n    [`${PATH}/proof_risc0.json`, `${PATH}/vk_risc0.json`, null],\n    [`${PATH}/proof_sp1.json`, `${PATH}/vk_sp1.json`, null],\n\n  ]\n\n  test.each(proofAndVkWithPublicInputs)(\"should  get groth16 calldata from proof %s, vk %s and pub inputs %s\", async (proofPath, vkPath, pubInputsPath) => {\n\n    await garaga.init();\n\n    const vk = parseGroth16VerifyingKeyFromJson(vkPath as string);\n\n    let proof: Groth16Proof;\n    if (pubInputsPath == null) {\n      proof = parseGroth16ProofFromJson(proofPath as string);\n    } else {\n      proof = parseGroth16ProofFromJson(proofPath as string, pubInputsPath);\n    }\n\n    const curveId: garaga.CurveId = proof.a.curveId;\n\n    console.log(\"proof\", proof);\n\n    console.log(\"vk\", vk);\n    console.log(\"curveId\", curveId);\n    const groth16Calldata = garaga.getGroth16CallData(proof, vk, curveId);\n\n    console.log(\"groth16Calldata\", groth16Calldata);\n\n  });\n\n});\n"
  },
  {
    "path": "tools/npm/garaga_ts/tests/starknet/groth16VkProofParsing.test.ts",
    "content": "import { parseGroth16ProofFromJson, parseGroth16VerifyingKeyFromJson } from \"../../src/node/starknet/groth16ContractGenerator/parsingUtils\";\n\nconst PATH = '../../../hydra/garaga/starknet/groth16_contract_generator/examples';\n\ndescribe('Groth16 Parsing Tests', () => {\n  const vkPaths = [\n    `${PATH}/snarkjs_vk_bn254.json`,\n    `${PATH}/snarkjs_vk_bls12381.json`,\n    `${PATH}/vk_bn254.json`,\n    `${PATH}/vk_bls.json`,\n    `${PATH}/gnark_vk_bn254.json`,\n    `${PATH}/vk_risc0.json`,\n    `${PATH}/vk_sp1.json`,\n  ];\n\n  test.each(vkPaths)('should parse vk from %s', (vkPath) => {\n    const vk = parseGroth16VerifyingKeyFromJson(vkPath);\n    console.log(vk);\n  });\n\n\n\n  const proofPaths = [\n    `${PATH}/proof_bn254.json`,\n    `${PATH}/proof_bls.json`,\n    `${PATH}/proof_risc0.json`,\n    `${PATH}/proof_sp1.json`,\n  ];\n\n  test.each(proofPaths)('should parse proof from %s', (proofPath) => {\n    const proof = parseGroth16ProofFromJson(proofPath);\n    console.log(proof);\n  });\n\n  const proofWithPublicInput = [\n    [`${PATH}/snarkjs_proof_bn254.json`, `${PATH}/snarkjs_public_bn254.json`],\n    [`${PATH}/snarkjs_proof_bls12381.json`, `${PATH}/snarkjs_public_bls12381.json`],\n    [`${PATH}/gnark_proof_bn254.json`, `${PATH}/gnark_public_bn254.json`],\n  ];\n\n  test.each(proofWithPublicInput)(\n    'should parse proof with public inputs from %s and %s',\n    (proofPath, pubInputsPath) => {\n      const proof = parseGroth16ProofFromJson(proofPath, pubInputsPath);\n      console.log(proof);\n    }\n  );\n});\n"
  },
  {
    "path": "tools/npm/garaga_ts/tests/starknet/poseidonHash.test.ts",
    "content": "import * as garaga from \"../../src/node/index\";\n\ndescribe('Poseidon Hash Tests', () => {\n    test(\"should compute Poseidon hash for BN254\", async () => {\n        await garaga.init();\n\n        // Test vectors from the Rust implementation\n        const x = 1n;\n        const y = 2n;\n\n        const hash = garaga.poseidonHashBN254(x, y);\n\n        // Expected hash value from Rust test\n        const expectedHash = BigInt(\"0x115cc0f5e7d690413df64c6b9662e9cf2a3617f2743245519e19607a4417189a\");\n\n        expect(hash).toBe(expectedHash);\n    });\n\n    test(\"should compute different hashes for different inputs\", async () => {\n        await garaga.init();\n\n        const hash1 = garaga.poseidonHashBN254(1n, 2n);\n        const hash2 = garaga.poseidonHashBN254(2n, 1n);\n\n        expect(hash1).not.toBe(hash2);\n    });\n\n    test(\"should handle large numbers\", async () => {\n        await garaga.init();\n\n        const x = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n        const y = BigInt(\"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\");\n\n        const hash = garaga.poseidonHashBN254(x, y);\n\n        expect(typeof hash).toBe('bigint');\n        expect(hash.toString(16).length).toBeLessThanOrEqual(64); // Should be within field size\n    });\n\n    test(\"should handle invalid inputs gracefully\", async () => {\n        await garaga.init();\n\n        expect(() => {\n            // Try to hash an invalid number\n            garaga.poseidonHashBN254(-1n, 1n);\n        }).toThrow();\n    });\n});\n"
  },
  {
    "path": "tools/npm/garaga_ts/tests/starknet/signaturesCalldata.test.ts",
    "content": "import * as garaga from \"../../src/node/index\";\nimport { CurveId } from \"../../src/node/definitions\";\n\ndescribe('Signatures Getting calldata', () => {\n\n  test(\"should get calldata from Schnorr signature\", async () => {\n\n    await garaga.init();\n\n    const rx = 2035568083744286872562076170424183686789303771874924387134332885848716527973n;\n    const s = 16951964772773949134099030503529813788531799557122970289125566478359203530341n;\n    const e = 12379944220159143227935478555737246072763864785692867509458453554537054077909n;\n    const px = 1460015317007179873453105936321786126342173668635633375793615328879270166120n;\n    const py = 11788876621134198315085358602693659440838178818373737092676489706543309378340n;\n    const curveId = CurveId.BN254;\n\n    const schnorrCalldata = garaga.schnorrCalldataBuilder(rx, s, e, px, py, true, curveId);\n\n    console.log(\"schnorrCalldata\", schnorrCalldata);\n\n  });\n\n  test(\"should get calldata from ECDSA signature\", async () => {\n\n    await garaga.init();\n\n    const r = 17830031845148496611971159596372798561444562703217806657239186935632770088766n;\n    const s = 15775553683756501243755332794094542682114105716241054629352056498655356866971n;\n    const v = 0;\n    const px = 11329275913325725487970330398927775211322605183390088341941803765401909426169n;\n    const py = 8682249405907851087539181920418463468320177419465741864050204044014651446009n;\n    const z = 7590902656267229106356493910512635750747848737569325419577764035270226305644n;\n    const curveId = CurveId.BN254;\n\n    const ecdsaCalldata = garaga.ecdsaCalldataBuilder(r, s, v, px, py, z, true, curveId);\n\n    console.log(\"ecdsaCalldata\", ecdsaCalldata);\n\n  });\n\n});\n"
  },
  {
    "path": "tools/npm/garaga_ts/tests/starknet/zkHonkCalldata.test.ts",
    "content": "import { HonkFlavor } from \"../../src/node/starknet/honkContractGenerator/parsingUtils\";\nimport * as fs from 'fs';\nimport * as garaga from \"../../src/node/index\";\n\nconst PATH = '../../../hydra/garaga/starknet/honk_contract_generator/examples';\n\ndescribe('ZK Honk Getting calldata', () => {\n\n  const proofAndVkWithFlavors = [\n    [`${PATH}/proof_ultra_keccak_zk.bin`, `${PATH}/public_inputs_ultra_keccak.bin`, `${PATH}/vk_ultra_keccak.bin`, HonkFlavor.KECCAK],\n    // [`${PATH}/proof_ultra_starknet_zk.bin`, `${PATH}/public_inputs_ultra_keccak.bin`, `${PATH}/vk_ultra_keccak.bin`, HonkFlavor.STARKNET],\n  ]\n\n  test.each(proofAndVkWithFlavors)(\"should  get zk honk calldata from proof %s, public inputs %s, vk %s and pub inputs %s\", async (proofPath, publicInputsPath, vkPath, flavor) => {\n\n    await garaga.init();\n\n    const vkBytes = new Uint8Array(fs.readFileSync(vkPath as string));\n\n    const publicInputsBytes = new Uint8Array(fs.readFileSync(publicInputsPath as string));\n\n    const proofBytes = new Uint8Array(fs.readFileSync(proofPath as string));\n\n    console.log(\"proof\", proofBytes);\n    console.log(\"publicInputs\", publicInputsBytes);\n    console.log(\"vk\", vkBytes);\n    console.log(\"flavor\", flavor);\n\n    const honkCalldata = garaga.getZKHonkCallData(proofBytes, publicInputsBytes, vkBytes);\n\n    console.log(\"honkCalldata\", honkCalldata);\n\n  });\n\n});\n"
  },
  {
    "path": "tools/npm/integration-test-suite/.gitignore",
    "content": "/node_modules/\n/*.tgz\n.turbo\npackage-lock.json\n.output.txt\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/nodejs-ts-cjs-tsc/.gitignore",
    "content": "/node_modules/\n/dist/\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/nodejs-ts-cjs-tsc/output.txt",
    "content": "Output of msm_calldata_builder: [\n  \"1n\",\n  \"1n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"2n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"1n\",\n  \"10n\",\n  \"0n\",\n  \"0n\",\n  \"75759116906411131289250842036n\",\n  \"1443316740970346987535705368n\",\n  \"708088064087366360n\",\n  \"0n\",\n  \"31894839170900604627010243180n\",\n  \"26562388390640533846098233871n\",\n  \"1678682860455561629n\",\n  \"0n\",\n  \"340282366920938463463374607431768211466n\",\n  \"0n\",\n  \"1n\",\n  \"0n\"\n]\nOutput of get_groth16_calldata: [\n  \"1935n\",\n  \"561151868347580495583090954n\",\n  \"76095163897123765080010407949n\",\n  \"3078964875882710626n\",\n  \"0n\",\n  \"68760071548346057889257256130n\",\n  \"33987009017980255890281589641n\",\n  \"10169520226989098n\",\n  \"0n\",\n  \"27526525353537266686222475850n\",\n  \"14475456397330869216192753448n\",\n  \"2537199318039088506n\",\n  \"0n\",\n  \"21536768652854740401912377472n\",\n  \"61033740543581523820282161323n\",\n  \"2466548432040548587n\",\n  \"0n\",\n  \"49356715888972701601325049347n\",\n  \"69887821523610458575318250963n\",\n  \"1742488265497548861n\",\n  \"0n\",\n  \"68106177540828336088045306219n\",\n  \"961134836681944563222599448n\",\n  \"1065964868903753173n\",\n  \"0n\",\n  \"1800806384039658546158952406n\",\n  \"44097612892395787951554989634n\",\n  \"2954998394940821894n\",\n  \"0n\",\n  \"57407696252580182379957914390n\",\n  \"68043785987214905719851221030n\",\n  \"1575697798130653691n\",\n  \"0n\",\n  \"1n\",\n  \"64622861075918021861446670503650833524n\",\n  \"40000715384012656934033607729992139113n\",\n  \"65343516826393976703500119419n\",\n  \"64215924997604874724268545467n\",\n  \"988361220710881918n\",\n  \"30419768492628197858619568261n\",\n  \"27248300164153194572764431995n\",\n  \"2977039154666701832n\",\n  \"65685384868591218376868464427n\",\n  \"70847639348750339988496276918n\",\n  \"477777041053646529n\",\n  \"29991939756641252358878134746n\",\n  \"39295947558852310211017126572n\",\n  \"2815628384676858047n\",\n  \"41723516601424502403187247204n\",\n  \"17017221925427596342628818049n\",\n  \"440483370607139100n\",\n  \"10413180469465695361837522183n\",\n  \"19423959337400646488247227266n\",\n  \"1196856567711091031n\",\n  \"14918739433528640782272739139n\",\n  \"2386255189434407583576372032n\",\n  \"2110030772171629820n\",\n  \"66403863065153192042460667734n\",\n  \"26490228722781507311620127895n\",\n  \"1376925612093868452n\",\n  \"16095686441528704658448370761n\",\n  \"51022389018232154188872438326n\",\n  \"1610491282614910455n\",\n  \"37997039872158612927722452114n\",\n  \"76461913933066610895201145075n\",\n  \"951074374291802403n\",\n  \"71303405408633411813876113602n\",\n  \"65378028046199379258519780162n\",\n  \"2796976393851271662n\",\n  \"66043194162972766020432949924n\",\n  \"72668519642029141849369643840n\",\n  \"1767421250104456939n\",\n  \"34724757470958269778491338738n\",\n  \"67907574914053181941994051296n\",\n  \"1074861315591297211n\",\n  \"57811416502141401297494384261n\",\n  \"66717953782642686044297384228n\",\n  \"619071555217927229n\",\n  \"11747815192199388258706152779n\",\n  \"39655522309044272057593243434n\",\n  \"2667518659266923661n\",\n  \"74545987263802105943401974456n\",\n  \"25100780504941704736052597181n\",\n  \"1614091262172996678n\",\n  \"61496830641585942728225636367n\",\n  \"47520662928915336127912320093n\",\n  \"1483128622047069223n\",\n  \"60688370891239308805053347678n\",\n  \"6154252422157238786881911133n\",\n  \"1595810747040934713n\",\n  \"4083087877564984515505707949n\",\n  \"8098795933662806280871012387n\",\n  \"392529588828430050n\",\n  \"14388273410011291023320103380n\",\n  \"59643003630595652724715495246n\",\n  \"2978244255961784640n\",\n  \"73005708620970672578538518429n\",\n  \"64274822400727474231693975117n\",\n  \"824761225328685267n\",\n  \"58979395441344004425345087397n\",\n  \"50034285490796369376342018474n\",\n  \"1071577406066675668n\",\n  \"37552244383550540565443579029n\",\n  \"66651519402295869947385119697n\",\n  \"1816081760201573675n\",\n  \"48020280081371249748563352979n\",\n  \"19387797072717949389382225132n\",\n  \"1075380445499260082n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"35717919122505863182793101258n\",\n  \"38321232967395819819318928199n\",\n  \"33653293845735846n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"60126610212574038899502857656n\",\n  \"7521540037295293717633716927n\",\n  \"2853604986499631260n\",\n  \"34n\",\n  \"21051189327279847889561754607n\",\n  \"15679397574132606210591767826n\",\n  \"2165541175263187167n\",\n  \"11461504713279098434997837844n\",\n  \"29843864593792422920685859506n\",\n  \"1460931496621397613n\",\n  \"31444402670555100638844582863n\",\n  \"41564870089383627374040254466n\",\n  \"3317275169749288672n\",\n  \"72559701040108110454251376272n\",\n  \"22887416934578586124987839996n\",\n  \"233686850646424299n\",\n  \"51667851121405518271474152545n\",\n  \"8297160697759020633045233343n\",\n  \"2193876459774314419n\",\n  \"50048470992987075597478354517n\",\n  \"7622325433377464914372402739n\",\n  \"2354852892440837544n\",\n  \"51371930649223862037533589505n\",\n  \"79037515700470610379424985426n\",\n  \"3103776711054728122n\",\n  \"62017664743365054011497714498n\",\n  \"18400895627048394641412939651n\",\n  \"1348549913115407530n\",\n  \"68135824164391051249850625519n\",\n  \"66467776056179325801077769907n\",\n  \"21934170737946721n\",\n  \"43733194692565917370190335652n\",\n  \"20871497235942649279957719973n\",\n  \"668366294714005293n\",\n  \"69461224576101086641240237729n\",\n  \"66163212446743341874016516713n\",\n  \"2187872754580648643n\",\n  \"17220145241406859216639481755n\",\n  \"16637691490800642336304328427n\",\n  \"699908274655976347n\",\n  \"63497807423928467541336180608n\",\n  \"5826616601935275548523889948n\",\n  \"1995878641893268059n\",\n  \"45351336804917798268705814434n\",\n  \"32809386436253774870015191481n\",\n  \"2479634507910679085n\",\n  \"29902151727900563245652302915n\",\n  \"70978449320724687288838934154n\",\n  \"2324927884830925807n\",\n  \"70956000718854853515484101425n\",\n  \"18794223695576985859644098754n\",\n  \"851712710373510834n\",\n  \"10098225054790962506843798879n\",\n  \"23663666343921865703011477995n\",\n  \"2539135702270490911n\",\n  \"13745949463631524266514217644n\",\n  \"70097334773007528061348260208n\",\n  \"1449740726324507950n\",\n  \"77747255839650031066990598333n\",\n  \"33186206179829484467075523327n\",\n  \"3072781249488320507n\",\n  \"73980383885811324159893986758n\",\n  \"1765445723258696625718806089n\",\n  \"2271055079390534326n\",\n  \"65413433113844994807777190576n\",\n  \"48033870016967321544035758027n\",\n  \"486427727733872709n\",\n  \"26974899297726311987406093631n\",\n  \"5590641036960446176988521755n\",\n  \"827510576486023036n\",\n  \"29009837304935242599458620885n\",\n  \"20410410399336048506493809410n\",\n  \"1954580703151327584n\",\n  \"64135814011222089868428198367n\",\n  \"56261294792918650387740643327n\",\n  \"1226348411176360117n\",\n  \"71834179960057214052393522783n\",\n  \"46252419010406289556729694820n\",\n  \"1393685374555389118n\",\n  \"71368042768790547323904986882n\",\n  \"66161706759499128280107017373n\",\n  \"2031846388120562115n\",\n  \"21220965229609488481377288540n\",\n  \"63634474338013450603335409627n\",\n  \"821621475859559449n\",\n  \"18432973800914453913616171088n\",\n  \"8237366564750917100218776918n\",\n  \"3448970319177548904n\",\n  \"51266071561401723888120442902n\",\n  \"33637427514172279767467204013n\",\n  \"3304964589143840434n\",\n  \"38819453582756888614388081676n\",\n  \"38995523514738195349996597496n\",\n  \"2323381859757397191n\",\n  \"60884424754479179074928199128n\",\n  \"3834764671648885586861880739n\",\n  \"864611594127789300n\",\n  \"9851774469429652901432809299n\",\n  \"37101389540039872112071709899n\",\n  \"2559626381308197564n\",\n  \"406646090122284731360238690n\",\n  \"44652954714826373590985929530n\",\n  \"683398595921263332n\",\n  \"20271182213679030346920227775n\",\n  \"37600328594433178897257972399n\",\n  \"432396126057182521n\",\n  \"4187404064813213379278146332n\",\n  \"44537571235199588707429377798n\",\n  \"3148695479824963911n\",\n  \"25801656964836714839982503508n\",\n  \"51572074862943493111482365520n\",\n  \"1230107506438930488n\",\n  \"51625253538057090130489675612n\",\n  \"11815326077763625426679125713n\",\n  \"521507079758837629n\",\n  \"9648925458348520397354094791n\",\n  \"31712274845777377436963587786n\",\n  \"1997027570431487029n\",\n  \"67411860089204789431616372347n\",\n  \"66528411456550554620624110152n\",\n  \"186478859944874837n\",\n  \"61267275259145597446660035124n\",\n  \"8554664316600082912178209665n\",\n  \"2375445434845419873n\",\n  \"1589782365755830876261985911n\",\n  \"14834270454057237025174127570n\",\n  \"963005115183332390n\",\n  \"23249702285165109375700438720n\",\n  \"20760791667651963569657008881n\",\n  \"2149068190029611973n\",\n  \"74674158355316816901821060837n\",\n  \"13278131002009659818927519878n\",\n  \"992778641153509292n\",\n  \"8743794935416188942200722720n\",\n  \"51445266496970909016857135378n\",\n  \"438732749332832318n\",\n  \"64511635865187456937539832569n\",\n  \"68455428209776466334096458368n\",\n  \"1196547129512189429n\",\n  \"16652864649326843859619189651n\",\n  \"47031229552259361752165531n\",\n  \"1977848333533964373n\",\n  \"32230433718106499209616712783n\",\n  \"50152042404552913889735459326n\",\n  \"2647553318887157906n\",\n  \"15558003702184603194095500825n\",\n  \"75789384763919593972512743955n\",\n  \"3199452366147221980n\",\n  \"23639206276595496029173201731n\",\n  \"49198122874004051169498469698n\",\n  \"3017499313473475023n\",\n  \"14633623354742611699704494011n\",\n  \"13838793228838994907197164815n\",\n  \"1865567661799564691n\",\n  \"63554437295278917743885851002n\",\n  \"43774994641723817700539915508n\",\n  \"2096263880799998644n\",\n  \"39241367224191359271532780985n\",\n  \"11996031360599781980224407856n\",\n  \"669587303349757211n\",\n  \"70309465524306380398946854940n\",\n  \"69691793870844727391235380992n\",\n  \"1097884931999290463n\",\n  \"4880550284873697839328338960n\",\n  \"8683184578595981266384193421n\",\n  \"1704353262400573542n\",\n  \"43209925421984317108056960491n\",\n  \"71838424302727061831479195619n\",\n  \"1719485935656079288n\",\n  \"20281500369447070817728689103n\",\n  \"7827101470501627130702651299n\",\n  \"1802787150264131673n\",\n  \"46990609747636025825158033861n\",\n  \"44506561326339289883265865893n\",\n  \"168363193009253293n\",\n  \"72644600526598920979602995563n\",\n  \"23734595505295435652505772841n\",\n  \"3066825941193215846n\",\n  \"35922864395887621958431954121n\",\n  \"36164080296393340386782836739n\",\n  \"2806406594668460083n\",\n  \"9559608083309233656821926408n\",\n  \"21435397197883361901646100159n\",\n  \"1173438743001539534n\",\n  \"45502332725513884072895701183n\",\n  \"21110593816020485943815437920n\",\n  \"2156839344197406156n\",\n  \"14935455230205682855615996549n\",\n  \"3176509029633635649806564693n\",\n  \"2744065159326778800n\",\n  \"50144289937074876149408247339n\",\n  \"73476828119785067069284584679n\",\n  \"1137921320963525519n\",\n  \"7764782370318985672713086089n\",\n  \"35186333034809438599544173388n\",\n  \"2599319187054853443n\",\n  \"71090896326220687050059751719n\",\n  \"7138127862158940765217036726n\",\n  \"2525413991973636711n\",\n  \"74465662641034900763924596241n\",\n  \"64800563131735459820423413678n\",\n  \"467645211882593334n\",\n  \"35429207184442884958891366618n\",\n  \"32026071525343635101462583825n\",\n  \"732661589473603894n\",\n  \"53979236240639306101606255299n\",\n  \"42289323195165961060464784974n\",\n  \"2572678142594168339n\",\n  \"34781401150182625703506517963n\",\n  \"27502296245160796607775189158n\",\n  \"204754437845996963n\",\n  \"60295830689532650505249825677n\",\n  \"25033548320502415354132760311n\",\n  \"26918649856759092n\",\n  \"53883044729840223319972205798n\",\n  \"71229970233113264180243241621n\",\n  \"1096143763692361182n\",\n  \"23670625124894730163037915585n\",\n  \"66188859433247255337619139871n\",\n  \"2789875774976133848n\",\n  \"76287870172839315742103539908n\",\n  \"76696206429019592649532825371n\",\n  \"1140810575629679716n\",\n  \"65695197715200264171919419792n\",\n  \"64578697338608806055715988010n\",\n  \"1315508308085028070n\",\n  \"78097114957711978300958275236n\",\n  \"73435222529435448525954708815n\",\n  \"1357585460514972583n\",\n  \"7357385422266450818170168488n\",\n  \"41750638133784298446701227299n\",\n  \"2309087687582896396n\",\n  \"59893979186320257893680148671n\",\n  \"70073254756682993544223051173n\",\n  \"3379633857316028827n\",\n  \"63037751789054738563399308545n\",\n  \"22112638657428976200628648553n\",\n  \"1119955028522904661n\",\n  \"17789959924300679578888409433n\",\n  \"32036177498553475203925266628n\",\n  \"3282049411090141820n\",\n  \"28853440708133119682221591754n\",\n  \"53037088663773523321481680370n\",\n  \"33889236786700338n\",\n  \"47866115906431522995214087729n\",\n  \"65896044771509521496549322945n\",\n  \"1356170216477027582n\",\n  \"72025359186703704066599325205n\",\n  \"14290937382512145681745832413n\",\n  \"235291859370816977n\",\n  \"16739080450814900672563464076n\",\n  \"27155915888194232201712953259n\",\n  \"2201285100786606817n\",\n  \"79046757705903490925593572396n\",\n  \"41590525534061554138727710174n\",\n  \"1563993153777110442n\",\n  \"58644351226953768961970699175n\",\n  \"71513413355714071072616721058n\",\n  \"771468756865502494n\",\n  \"56315873417343912546874324750n\",\n  \"66995041844358703653717763298n\",\n  \"1564628505321775490n\",\n  \"68742094005504029111318961475n\",\n  \"43257881480227388188853022203n\",\n  \"2827885137176633354n\",\n  \"60013377537965180515452389042n\",\n  \"22615548017942376680894051034n\",\n  \"2778940717048846996n\",\n  \"30216926479141873412912870389n\",\n  \"67097866317972012436735650659n\",\n  \"1001082522948099952n\",\n  \"31879429787569811794175043050n\",\n  \"57916743777618192263856200515n\",\n  \"1477201521425100888n\",\n  \"63117110331861368443138300600n\",\n  \"24455052765578778318741183737n\",\n  \"3145320365602131181n\",\n  \"27504400622945393457424964663n\",\n  \"18149654277116955082138788671n\",\n  \"709865641588578406n\",\n  \"51203413602847718278618462447n\",\n  \"32871208476003646471375256821n\",\n  \"1972541565241208115n\",\n  \"79118404692942875097520377767n\",\n  \"48815069625306356145460113214n\",\n  \"2800168047740476387n\",\n  \"27090046108651136752525050251n\",\n  \"17050737426763583806790779471n\",\n  \"1273566324033923836n\",\n  \"49543917066569282928794484300n\",\n  \"10290628042158833070532221066n\",\n  \"3469066870558011680n\",\n  \"42005113796531220880503084548n\",\n  \"60064195130891515794312310901n\",\n  \"3245851193684195107n\",\n  \"37533982385009798315342336648n\",\n  \"10267823027838019609009260399n\",\n  \"2025345482262498605n\",\n  \"34864622598934340124988581388n\",\n  \"48347073555555495737374318810n\",\n  \"2673244105079290838n\",\n  \"75957016907360510463610401727n\",\n  \"23977086141109407077488719105n\",\n  \"732491745580907274n\",\n  \"64604276948999648627686221332n\",\n  \"3868070793275280858296301394n\",\n  \"1873653426250118454n\",\n  \"15570553586934053483564418077n\",\n  \"13639547122371116255200424101n\",\n  \"3229806347752382046n\",\n  \"69627176750917937037127756524n\",\n  \"77527130421629244161614984692n\",\n  \"2205592855904802747n\",\n  \"42359401661274759693285654733n\",\n  \"15319487818905735149374624862n\",\n  \"3299209455827802664n\",\n  \"913752139298990313523799637n\",\n  \"70257873178701883303322833580n\",\n  \"3363278906733915791n\",\n  \"3719386124896722977369262005n\",\n  \"53915264239484240561994801723n\",\n  \"1014563467864375643n\",\n  \"56643381820560944379080271087n\",\n  \"5451127454093963182673395845n\",\n  \"1647155594727927302n\",\n  \"74031948470913728924354306654n\",\n  \"67046184840603355661228918718n\",\n  \"730434808359892479n\",\n  \"58832815659134274668136294794n\",\n  \"44220894708044864609266466973n\",\n  \"428689828657455715n\",\n  \"26619728344740812354339350673n\",\n  \"55972705855091654840275771393n\",\n  \"597472825198654088n\",\n  \"1452568843776109298902292527n\",\n  \"48082065429135088437634332196n\",\n  \"1047157723497573338n\",\n  \"28285154322504134404521941699n\",\n  \"56070279326493931276099147353n\",\n  \"1647252454052220783n\",\n  \"65027676769817342180184568252n\",\n  \"12685362344487350979600199772n\",\n  \"1402500493179000567n\",\n  \"12668630001282077875777731433n\",\n  \"55553251572483079593258301341n\",\n  \"2382205981458202111n\",\n  \"50473524893888759380289559496n\",\n  \"52220217290909756763540198313n\",\n  \"2029638412495399688n\",\n  \"7502774623130712545083224028n\",\n  \"73425515727643581896824036686n\",\n  \"2771702310825972693n\",\n  \"4639820922586718498241340517n\",\n  \"46582679696898380484679332702n\",\n  \"2620580077787400940n\",\n  \"51782105270520932573551959292n\",\n  \"74517889523497564960562458357n\",\n  \"79055126752843995n\",\n  \"10925640711936519280913334701n\",\n  \"11947058347966705959371810733n\",\n  \"43716694970268491n\",\n  \"35453676805113974113471109604n\",\n  \"12015889727201641553493717139n\",\n  \"3275286259969106630n\",\n  \"70932279409438704808566723573n\",\n  \"47041530965489511382629531879n\",\n  \"1256401409005218192n\",\n  \"46895749660336733332848035754n\",\n  \"40261009687444665011442182710n\",\n  \"1306436215925446460n\",\n  \"3904962902077066763622365736n\",\n  \"36103992387013546339910627073n\",\n  \"1329335481346702678n\",\n  \"57853677844329075763360620729n\",\n  \"61001619991056325367390311148n\",\n  \"1235032555631976826n\",\n  \"58692146235938833274542664790n\",\n  \"14589363842493324627243766856n\",\n  \"578262325105051129n\",\n  \"37980379958779218087580100271n\",\n  \"57690546822788520479506631792n\",\n  \"3164185857728705638n\",\n  \"45598806448478931852264970697n\",\n  \"29033375842093843451718686864n\",\n  \"2812217528418815016n\",\n  \"9663261157782365056384592697n\",\n  \"44620211458433011608252253672n\",\n  \"2505651240889113840n\",\n  \"48502340833312690180905327065n\",\n  \"9352266604910376416980234379n\",\n  \"3341395763378874957n\",\n  \"35507650777754495555508745994n\",\n  \"64550352482963692428938364344n\",\n  \"1749731610964724298n\",\n  \"72801722493214401326730125326n\",\n  \"55956888553336351398608259633n\",\n  \"896001678647446033n\",\n  \"30516385505393014949750902877n\",\n  \"47315718952109319710441627150n\",\n  \"1388483706936013349n\",\n  \"32381991427814516368016795653n\",\n  \"59696292811917044385937202833n\",\n  \"618914335291991958n\",\n  \"40375787626773409929606022175n\",\n  \"64734613933900308276892757597n\",\n  \"2556069305521992095n\",\n  \"58654528682801174800851099376n\",\n  \"11593522535604870003716248394n\",\n  \"2125230714317219300n\",\n  \"8061995955571015171488513388n\",\n  \"47983447012081651413970228934n\",\n  \"855542739847145422n\",\n  \"59096469339608638609245068515n\",\n  \"7673808125695463322887566290n\",\n  \"1385253448294382073n\",\n  \"25340909062918393540888464015n\",\n  \"9795256553635962173776771050n\",\n  \"3012016973098277348n\",\n  \"33467611330524938973631050712n\",\n  \"7543431037219165063475505539n\",\n  \"448151223182465539n\",\n  \"22750106248651778926545160954n\",\n  \"25740569688692303261800730858n\",\n  \"1075240126364963450n\",\n  \"56338203997489686691769068850n\",\n  \"62119360873725897456686490753n\",\n  \"1222146081347045140n\",\n  \"27338323756657113133884361560n\",\n  \"21141429927442113006964516579n\",\n  \"462132336382397961n\",\n  \"4987343640321990641559943818n\",\n  \"58829032105334349895296634715n\",\n  \"3177465831253470688n\",\n  \"69096263705896112247403554129n\",\n  \"29492604434954899550510960365n\",\n  \"304239915265350366n\",\n  \"66375851691134826136210085333n\",\n  \"44757375154942980538763091305n\",\n  \"1112855489475878924n\",\n  \"70069037784938962740775503666n\",\n  \"12717652252841341839220495543n\",\n  \"2918096944668928835n\",\n  \"18321962109897171704378960368n\",\n  \"61813672462196073792006627549n\",\n  \"2734946711892636188n\",\n  \"64219561440442257822526755189n\",\n  \"8503031322535266331858567242n\",\n  \"3223902208326320319n\",\n  \"63116174136664698830215774786n\",\n  \"2759322304337380924973025029n\",\n  \"810068357014304774n\",\n  \"15698684552711747426349376896n\",\n  \"65762055793295617462571353752n\",\n  \"518270689795187122n\",\n  \"58150828468103287645001826637n\",\n  \"77452960139151639571846482697n\",\n  \"519559051146038460n\",\n  \"72625801975239649642036163890n\",\n  \"39078044248618521225250269350n\",\n  \"2190524057325078928n\",\n  \"27770888055874136986828633484n\",\n  \"41773083279140557423975570256n\",\n  \"2854828164966176931n\",\n  \"627836434493841003902237785n\",\n  \"77928664588771202997039373627n\",\n  \"330865869276931200n\",\n  \"52935592469577214913105764520n\",\n  \"20197659873511917804524429378n\",\n  \"2125370194946441846n\",\n  \"3460074836406938711660958301n\",\n  \"52820564261229479633548811299n\",\n  \"2919129481241566745n\",\n  \"6675772908450017734753351305n\",\n  \"65258735248680451317985314824n\",\n  \"2950671717077079181n\",\n  \"6822322071311459654365919975n\",\n  \"48497518547901827883287152419n\",\n  \"3243229764836791767n\",\n  \"72937532385990220357716354648n\",\n  \"19074513737405788027838151006n\",\n  \"1297437039234841476n\",\n  \"75502921753638151385835217223n\",\n  \"15306268504859852745422227938n\",\n  \"3143438951510181753n\",\n  \"3947335170074803838440311819n\",\n  \"62699530989773040321915910090n\",\n  \"3215975868729087991n\",\n  \"45236352461588188769215285451n\",\n  \"41706782526887442329166221445n\",\n  \"3168773580470738009n\",\n  \"75285535419605148224367004655n\",\n  \"20481966054007305592119557920n\",\n  \"1679995277184070400n\",\n  \"45190873120635261257451746066n\",\n  \"47696678647110719375889237738n\",\n  \"2068610507691385147n\",\n  \"9915927934978371252308896949n\",\n  \"31159305954355174048281405375n\",\n  \"1704598723840881213n\",\n  \"67338469563962359211325034773n\",\n  \"41738724864530875640824663606n\",\n  \"2293929193371443079n\",\n  \"34807312716413150046069343319n\",\n  \"70801066094208025212394559646n\",\n  \"2518515824100660756n\",\n  \"76811947889156401932764711781n\",\n  \"43817729339652461426643528955n\",\n  \"2039489180470709457n\",\n  \"38477432026452102589204844897n\",\n  \"27527167249603525516926315406n\",\n  \"1191468099071291308n\",\n  \"38041851156661687253492123536n\",\n  \"54288163040365572080441140556n\",\n  \"911480122138689106n\",\n  \"4974069079367885339264267782n\",\n  \"28880616750574662115261710630n\",\n  \"2834730446537796035n\",\n  \"55466841778289154595312506036n\",\n  \"47524577058256910308968549882n\",\n  \"351449977223840700n\",\n  \"62311990134227217524354071274n\",\n  \"75586193885025429015569590193n\",\n  \"545412183548073756n\",\n  \"79201290258654825630711427638n\",\n  \"77524373992410852423354047680n\",\n  \"552010389188782621n\",\n  \"13584773290145166716045719634n\",\n  \"57089761411485171751249424952n\",\n  \"1694608384682621747n\",\n  \"29538886750825184946212760314n\",\n  \"63894150012954354476012028271n\",\n  \"381542434687157486n\",\n  \"18078760560177937565267140464n\",\n  \"74003801426748288272147648907n\",\n  \"42337564080893923n\",\n  \"76689566315090503029029632865n\",\n  \"77474971819185712518886624915n\",\n  \"372114354534855369n\",\n  \"3011898200892081576513307862n\",\n  \"13966070005688554503624007786n\",\n  \"470413759528293312n\",\n  \"39357561183949775040925825237n\",\n  \"70682164693568724918268906963n\",\n  \"1376182782398783885n\",\n  \"41538213381429219620578361408n\",\n  \"42254768852299863792709628627n\",\n  \"3431309948863311296n\",\n  \"29234390314689913487082552719n\",\n  \"17916853178952663417328241903n\",\n  \"669291203853282419n\",\n  \"33249562629014821971547667642n\",\n  \"26222791431277453980835687680n\",\n  \"98534970627714358n\",\n  \"25021648199838864664290068537n\",\n  \"20665859250814395210947344246n\",\n  \"662389299694120248n\",\n  \"72307113898419621240789872204n\",\n  \"46323053668872253004980165076n\",\n  \"1041999687571616075n\",\n  \"8985042666921921648283132643n\",\n  \"74513886773734802806022422301n\",\n  \"2603455779145809119n\",\n  \"15411135359682619522278947280n\",\n  \"27784420314858949438220006926n\",\n  \"450671277926568052n\",\n  \"2831173742809690598851605179n\",\n  \"28386483802658122108161613621n\",\n  \"1424370976519373932n\",\n  \"31198231619878444700423211860n\",\n  \"42295311569311653123964908500n\",\n  \"2935759999014605210n\",\n  \"32001363507887263736668102660n\",\n  \"46912833713119636774180995741n\",\n  \"2092237369418424823n\",\n  \"78656477190391127646333527543n\",\n  \"41056006364555863740114989146n\",\n  \"2171263570612200061n\",\n  \"21422129487009930658303224502n\",\n  \"46206308103083011878154386775n\",\n  \"1874554378158482533n\",\n  \"36641496950703925635911572554n\",\n  \"48432166499307362117455688176n\",\n  \"362387825758837904n\",\n  \"27092632894596570716463916204n\",\n  \"20108561967338242154648349930n\",\n  \"1880193076762165445n\",\n  \"9593372273263129574197363679n\",\n  \"48018078028931030587694756618n\",\n  \"542974594247287387n\",\n  \"14814551631877080383283532261n\",\n  \"33496168748765220079451008919n\",\n  \"2250598863496646490n\",\n  \"44869586855816636221572912809n\",\n  \"41783360501362407212785286614n\",\n  \"2362538758680925884n\",\n  \"47048981182078605465642165702n\",\n  \"60518795030556750835816928982n\",\n  \"505511636936241905n\",\n  \"58024262056741504028876642662n\",\n  \"50138980925793649225004896980n\",\n  \"2579777888438614723n\",\n  \"6523114729709277602770738046n\",\n  \"28358393151053570058817793343n\",\n  \"3081381986289034984n\",\n  \"15900191280315068679181663660n\",\n  \"48577168032374944428952731072n\",\n  \"830974214184407623n\",\n  \"10274561196236136318135959057n\",\n  \"26148664358554534185218032007n\",\n  \"201377610767670386n\",\n  \"11368406426935765376362633788n\",\n  \"4122436782704069458424072833n\",\n  \"2934079973878820714n\",\n  \"66892750247258968804173976659n\",\n  \"76380379537218876441475920731n\",\n  \"3380019238411335234n\",\n  \"50717224916942478279258173891n\",\n  \"44470393688322556765105136550n\",\n  \"1813355330674964836n\",\n  \"8515532742277261388949469229n\",\n  \"33221912074775270762895168327n\",\n  \"2646766706385940242n\",\n  \"11140136119772415355412357379n\",\n  \"44150773111766484868566388647n\",\n  \"3191354614138223649n\",\n  \"30708778779429297397760149496n\",\n  \"67837687252340085721524474101n\",\n  \"3301367800510383551n\",\n  \"10954599956402707572521260184n\",\n  \"21030000566064580489911242942n\",\n  \"1828905939385555740n\",\n  \"26254579696623038244113820321n\",\n  \"76089322519690535032690356215n\",\n  \"868757520992376209n\",\n  \"77540171332511416804096348278n\",\n  \"10474304059709005130776549459n\",\n  \"1665346113039180866n\",\n  \"77071906535707552468440337167n\",\n  \"76416817616469856915552001970n\",\n  \"2619908781683664602n\",\n  \"40713576015254467501617369989n\",\n  \"69174809057973808586596761660n\",\n  \"364462143474967775n\",\n  \"3388865641890523266901884229n\",\n  \"46510386965164679950611269041n\",\n  \"2868959718371388528n\",\n  \"38291153048032659818161082470n\",\n  \"57992998428591158266306092260n\",\n  \"2140250223970187383n\",\n  \"74674643030181299821451279762n\",\n  \"61603307939095484817637012597n\",\n  \"1805808601029218696n\",\n  \"37221838450591689221386319329n\",\n  \"68301391492878568825616976727n\",\n  \"2237000809794684762n\",\n  \"11407285364976644693945059208n\",\n  \"25348058182926100240298110509n\",\n  \"3114508241594272017n\",\n  \"75356748694855659604450932050n\",\n  \"73487079967561788811810515931n\",\n  \"1490776583857675442n\",\n  \"54218989991798315687885361450n\",\n  \"20703329376060767478344708910n\",\n  \"2199487792587152210n\",\n  \"75111061944546058209924381826n\",\n  \"59244444067541601191271416829n\",\n  \"1581429188013860604n\",\n  \"52660822561915117683975147831n\",\n  \"47783082248718407900747485302n\",\n  \"1369252091872015433n\",\n  \"36417458042350421490821725117n\",\n  \"31829247002542379610343848353n\",\n  \"455784377300586483n\",\n  \"16833465703461845689857266397n\",\n  \"71194569481351283884295739145n\",\n  \"3189866189053900612n\",\n  \"65858387085894768841721032786n\",\n  \"42191857983305827191840357582n\",\n  \"666015291493419098n\",\n  \"27916318777227697186981470587n\",\n  \"32438460617546390776125662122n\",\n  \"3438854808891043135n\",\n  \"41197663088738641800559183911n\",\n  \"55140791537758229983041465056n\",\n  \"1162917064515090408n\",\n  \"59276808448795540978821008029n\",\n  \"55346073844723874343240998585n\",\n  \"2138546228419844587n\",\n  \"29861692804477614266603259375n\",\n  \"46434932953097909216915612814n\",\n  \"2786750119186865986n\",\n  \"2914382294411148824195592597n\",\n  \"47257202751523172671381039762n\",\n  \"108099711483611500n\",\n  \"42513194204119630092428609239n\",\n  \"7009779828784113435151735800n\",\n  \"1568976973765903017n\",\n  \"74506942497632859791810397801n\",\n  \"75159716442684547730197176733n\",\n  \"214522106108977303n\",\n  \"307807623661151452830127704n\",\n  \"69355418870826927485148435899n\",\n  \"1716229337114513433n\",\n  \"57800790680731912804700220994n\",\n  \"33865695886637783077735975519n\",\n  \"1521543041885052952n\",\n  \"61900084065708307372472439490n\",\n  \"9670136848396954396035168772n\",\n  \"705486756697563485n\",\n  \"65695693080875904861430309269n\",\n  \"42258749277647240519914054375n\",\n  \"1610937183743514752n\",\n  \"45949364456230722028956610312n\",\n  \"71318597512050155765983898976n\",\n  \"1419180020927833749n\",\n  \"16722582418318977044812304850n\",\n  \"64520646005354913944304541442n\",\n  \"1349757657977694032n\",\n  \"23453477023590312415905476662n\",\n  \"20988708348761074914346191082n\",\n  \"2734679321361253617n\",\n  \"3531335181910221180679210683n\",\n  \"77069908679139173478778593856n\",\n  \"3209489805214655859n\",\n  \"15423046625290420432194363954n\",\n  \"66544315732344216335597482829n\",\n  \"3417056483929987132n\",\n  \"23412416307661786237706973063n\",\n  \"52684903097691240819445939916n\",\n  \"3087013127443362602n\",\n  \"59516131369415164617233433764n\",\n  \"22552284363447521404574779744n\",\n  \"440598570727652332n\",\n  \"10078101871820643773664346515n\",\n  \"53180025648864462561753056892n\",\n  \"1238481677425258091n\",\n  \"66978851386839209947975732205n\",\n  \"76469976691658858609518100317n\",\n  \"2669015410315668427n\",\n  \"10462115063986428235746660388n\",\n  \"20612418707380044137824607138n\",\n  \"913149152876393845n\",\n  \"12896643578852573199148249630n\",\n  \"65916513826164228515537693476n\",\n  \"1689818392090951394n\",\n  \"48812924094784749209418690439n\",\n  \"21075229147504768099245857693n\",\n  \"2023634641390620097n\",\n  \"46841988916092209879920999223n\",\n  \"16626325630569367486087793088n\",\n  \"2520424161966279659n\",\n  \"66590657955425334169984583445n\",\n  \"43137455439307899619378709852n\",\n  \"119691013666955759n\",\n  \"59528138117541221723219264069n\",\n  \"6039238025418276887251147184n\",\n  \"1423016249189720303n\",\n  \"74476981597135756778074726485n\",\n  \"57871369440317946035711890073n\",\n  \"1799738956519083373n\",\n  \"61169922085945703273845146359n\",\n  \"58536191609701145724674103544n\",\n  \"678581665969651580n\",\n  \"29756753901276156089801861773n\",\n  \"37715386191992628222582900313n\",\n  \"1839293100231634062n\",\n  \"8545730587160341404066690935n\",\n  \"73310320371102040457790413928n\",\n  \"2943087579162219865n\",\n  \"3592679410576312851945554995n\",\n  \"63768122222562308688415150519n\",\n  \"2852416365710961566n\",\n  \"65734466853903663026216615808n\",\n  \"75611388663630224651662180524n\",\n  \"3082245111526479768n\",\n  \"42542028447397082553823280434n\",\n  \"15266201170439359558184400250n\",\n  \"2959319188559780389n\",\n  \"62084872176674708014188872797n\",\n  \"49471685826369556510350964812n\",\n  \"3044342635568692521n\",\n  \"52766810402300947123818998320n\",\n  \"57464266928926410524441305379n\",\n  \"2678492530248725715n\",\n  \"63759940946573266111589745544n\",\n  \"1239422070074535035165804970n\",\n  \"3011362073292317527n\",\n  \"5312425357216197805891517417n\",\n  \"8604490350019536611169668726n\",\n  \"1278264119461231226n\",\n  \"23413740732153092734953046582n\",\n  \"2351234330786062681522357509n\",\n  \"3063446156461791539n\",\n  \"31192263866697541487222909336n\",\n  \"53213425910476786883061415945n\",\n  \"3388535254355309510n\",\n  \"76222049202953784940228041093n\",\n  \"8232814450668299001215927167n\",\n  \"1010418058221874517n\",\n  \"30375045069912390061370886372n\",\n  \"76858962311200653420966476141n\",\n  \"2531834595530804919n\",\n  \"72838406196796824316965387556n\",\n  \"16107338032535514271932130242n\",\n  \"826038058455425888n\",\n  \"74047817357615679402104886971n\",\n  \"66250974048331219261305648117n\",\n  \"515372630941459652n\",\n  \"49140383045734318581810247391n\",\n  \"38552127106329617678305826510n\",\n  \"1791730195926210707n\",\n  \"20447547859709794457924179129n\",\n  \"52480964595913357482998508931n\",\n  \"419726983098458687n\",\n  \"20434453705733747059793719688n\",\n  \"22732218969594988459804019164n\",\n  \"721740589738128975n\",\n  \"63178390467425871623450374916n\",\n  \"58781628951232066578669558088n\",\n  \"1366096141210552719n\",\n  \"30310055907701667442250131224n\",\n  \"77693499391068805405178198648n\",\n  \"2419127900721456602n\",\n  \"72238281634987295743046110639n\",\n  \"2759706666093555363424148875n\",\n  \"2871042634310332424n\",\n  \"58186331935313172107712023092n\",\n  \"73009408672165436946758189888n\",\n  \"1138172672402058824n\",\n  \"45794206921224716587506811973n\",\n  \"50074044364882080121299615241n\",\n  \"201200847748951804n\",\n  \"41753381957343686084038148154n\",\n  \"16651255916405576823960096368n\",\n  \"744771251876887027n\",\n  \"6397253273640502791149864078n\",\n  \"67730045189242272443620838555n\",\n  \"2723512022810421168n\",\n  \"20403399159094844095476748628n\",\n  \"46114852246774129546878110205n\",\n  \"2163837250026966482n\",\n  \"63507059223060953171650485733n\",\n  \"27872394523028449929373211791n\",\n  \"1266384674015277092n\",\n  \"31341532803878701385180273244n\",\n  \"56274201404580685976997533743n\",\n  \"431470279371342601n\",\n  \"27146401285505116697408502780n\",\n  \"10909809704395711896795601995n\",\n  \"823727347575104764n\",\n  \"78157451508256479551851793287n\",\n  \"7934224114897115965586132150n\",\n  \"2561622534344592225n\",\n  \"52031374290403822978799313483n\",\n  \"75680335637831520600351100052n\",\n  \"2240257882085839580n\",\n  \"35818819658139744996071875447n\",\n  \"62532608351434239965548606901n\",\n  \"2997209098633992908n\",\n  \"35801460645260708494826382933n\",\n  \"6962199370752725968726753829n\",\n  \"471191881884558376n\",\n  \"51494347593311565178389849721n\",\n  \"27959136057874496572927068138n\",\n  \"2054885609386822401n\",\n  \"1903400454085938493722464234n\",\n  \"58252527737465224754126905441n\",\n  \"871049256780466220n\",\n  \"62266126172301828292957015888n\",\n  \"29942402306346798464030870789n\",\n  \"2439682690873113741n\",\n  \"58828716449315637847726991566n\",\n  \"33586884830050665361484057496n\",\n  \"1850240284198082738n\",\n  \"57256720773892932068692318575n\",\n  \"43906884659388043006991040937n\",\n  \"2567264210368699586n\",\n  \"37303325532466691611774319975n\",\n  \"1023775330119159065320215646n\",\n  \"2970467943548704391n\",\n  \"6719369853840095911284134964n\",\n  \"52698184868933442534169228704n\",\n  \"1590449702912303791n\",\n  \"9163234315649800019839577781n\",\n  \"5096786077915756093838027866n\",\n  \"2604014912333559946n\",\n  \"22626562141910724736547894073n\",\n  \"1221514787490597839172086118n\",\n  \"2021859363658276538n\",\n  \"29343228808229785648243946635n\",\n  \"17107161597392558070179986947n\",\n  \"2142074198041769333n\",\n  \"8295437982000203433981112803n\",\n  \"32281278698888589789154221048n\",\n  \"2261976931796110908n\",\n  \"19003064635652370381400548000n\",\n  \"5388386401569756312458644562n\",\n  \"3154333183807592746n\",\n  \"57635002029571841636737463711n\",\n  \"56991897992879623406006006725n\",\n  \"2842694143682003853n\",\n  \"73379904593405458046663259580n\",\n  \"839437272553377608023038726n\",\n  \"3093165198442302924n\",\n  \"33419448607193509624332386145n\",\n  \"16740311080067952025303937955n\",\n  \"666860562806181637n\",\n  \"8797571923563716660075774195n\",\n  \"75022438860744435659585766685n\",\n  \"1558560135470851650n\",\n  \"19713896344694960627284542368n\",\n  \"78388507052884523368130573724n\",\n  \"411547793569600371n\",\n  \"52610184319591489722152436723n\",\n  \"58886726417514761894083084350n\",\n  \"779286101129650524n\",\n  \"30697463792187334469128124748n\",\n  \"76836636996796091386778801556n\",\n  \"868461342532092659n\",\n  \"69910862714025895807766899173n\",\n  \"51405542117679167872600082463n\",\n  \"349470313771420560n\",\n  \"71284241241602654693194940143n\",\n  \"7305568034139166589777830792n\",\n  \"2498747200591008033n\",\n  \"67960797371315801691053786599n\",\n  \"25825479627169106615506743060n\",\n  \"454178144016317938n\",\n  \"35798135180239958015829265626n\",\n  \"23385623537498663178814541991n\",\n  \"1668508428339305051n\",\n  \"15450665342638866022354076708n\",\n  \"1590106122468359708599592949n\",\n  \"209939085635224246n\",\n  \"45146454297276439294547281947n\",\n  \"71363197518122470395685282523n\",\n  \"209021609080779353n\",\n  \"37805135405124328919729060254n\",\n  \"46916624974206570529290830921n\",\n  \"848835529094356500n\",\n  \"52127928532313726409293511873n\",\n  \"74341195298303002847160668677n\",\n  \"2836594795507658600n\",\n  \"21372610848069974970714546381n\",\n  \"47095482837411596424060733004n\",\n  \"2644188767312235257n\",\n  \"42696308717032907609441318200n\",\n  \"71478263091865254540527492446n\",\n  \"580612364877252066n\",\n  \"24227503011457277739411398472n\",\n  \"46210588161299166961443583909n\",\n  \"2104513243231016467n\",\n  \"38286987706753654842254500763n\",\n  \"52819390378718994903041839288n\",\n  \"2559971158277261662n\",\n  \"10804049422689166087510960068n\",\n  \"78494177681671393465658693075n\",\n  \"14482037543685577n\",\n  \"45316386224024264714051962520n\",\n  \"8077236619578691823690243326n\",\n  \"3134255926280338435n\",\n  \"58234835865881258067775424985n\",\n  \"32582539715376623121568222400n\",\n  \"895535831771370236n\",\n  \"70554522419104669983576590653n\",\n  \"40229753450332894247180991320n\",\n  \"3235640053820685715n\",\n  \"20050852574591066448348962700n\",\n  \"63154847355271958325521981335n\",\n  \"467978477141038832n\",\n  \"23115494614834363321936638302n\",\n  \"54275477858894789534235120579n\",\n  \"1729059077109549892n\",\n  \"2643222253937861530223901503n\",\n  \"4343013099917093534712467976n\",\n  \"2093250350291324334n\",\n  \"26606380640809280595919467519n\",\n  \"24158225122809122341718478436n\",\n  \"384623299034698779n\",\n  \"74889164947469453919523854509n\",\n  \"57684567535195905731154589750n\",\n  \"1155881533367487150n\",\n  \"40449699793338258794390721810n\",\n  \"45563605053974069206983967932n\",\n  \"1493349482130193926n\",\n  \"53198779688378832727006250273n\",\n  \"23250105681044235044335219173n\",\n  \"1649629209531042678n\",\n  \"31842301972458791163037611310n\",\n  \"54103172956148923849538705604n\",\n  \"1853082006782289707n\",\n  \"73283134292642541157328722326n\",\n  \"60011977393637178105550407258n\",\n  \"2931499730502310317n\",\n  \"30363774768400601902892824896n\",\n  \"69784527858977659878014965306n\",\n  \"2699700013359551525n\",\n  \"30143876784681103984444940141n\",\n  \"20508010382725323248422071352n\",\n  \"1472036335205806581n\",\n  \"72685268086241841913630448820n\",\n  \"13484287640917155024759235656n\",\n  \"421919482836501604n\",\n  \"58336665028159633068676496150n\",\n  \"37899530871095451514688032059n\",\n  \"830925861824953119n\",\n  \"25034909887778048695729760495n\",\n  \"6186382813048747659882138994n\",\n  \"928295656744287075n\",\n  \"23742999482526473077193706109n\",\n  \"38681524762823880972818454723n\",\n  \"1037267958137901699n\",\n  \"75848820697595803231237834330n\",\n  \"4098133930661194465828731453n\",\n  \"2484592940588499869n\",\n  \"45229057029317220478111498771n\",\n  \"55686910073377115986537207556n\",\n  \"2974592459022975650n\",\n  \"9058824958434584730691471305n\",\n  \"3489502058924586487278999515n\",\n  \"1985538445731248079n\",\n  \"14034347138268021040571737620n\",\n  \"22094509985004128313979725457n\",\n  \"1321434542301391881n\",\n  \"17216019289274156022312124782n\",\n  \"65908201923726532456265422977n\",\n  \"387610774042169114n\",\n  \"29699496552150641100894659868n\",\n  \"43552700176683532671663646633n\",\n  \"305525895851406027n\",\n  \"62068283835877161864738460092n\",\n  \"66163022436031594737849199513n\",\n  \"1671489056967612477n\",\n  \"5806077789744302022830084009n\",\n  \"22126371298319875265318066168n\",\n  \"2973075530852635513n\",\n  \"43508686549770752780288409207n\",\n  \"39960107195405145189624452517n\",\n  \"3021227579398645734n\",\n  \"75958919635020929694389722957n\",\n  \"14913897636015670404185010029n\",\n  \"2882183092458315590n\",\n  \"24239404766805006701421172975n\",\n  \"69450551382041986033230454197n\",\n  \"629979785699424851n\",\n  \"47715312965767193925496266564n\",\n  \"51328287208106789864582031889n\",\n  \"1994694450268216917n\",\n  \"12878968128402785600925987432n\",\n  \"8892728961399753099629106451n\",\n  \"2189564568474803348n\",\n  \"17841277261874434955985363634n\",\n  \"23255802008382153152915838079n\",\n  \"1299631183736247307n\",\n  \"70369295004394220674262548695n\",\n  \"41703500013750845131767430551n\",\n  \"2515279718642012557n\",\n  \"29363803518729226252949864837n\",\n  \"11941978972714945652777612780n\",\n  \"1864444849178365249n\",\n  \"19838910496936353855554382505n\",\n  \"63526654617675483693289584781n\",\n  \"1386561621225388054n\",\n  \"37964054821976413036136417123n\",\n  \"14531042297004730862055294756n\",\n  \"1592174811323575228n\",\n  \"17025415710900400219439375060n\",\n  \"362574756192905655380951625n\",\n  \"186982663000383695n\",\n  \"75302946272320992428390907104n\",\n  \"76356571252613340602107695667n\",\n  \"1005406788214614232n\",\n  \"58429545482092547095478867066n\",\n  \"8783598735519438107774246954n\",\n  \"3449009450489856852n\",\n  \"52421244757199560525245430831n\",\n  \"36745113142356116864221402917n\",\n  \"2011028989323540641n\",\n  \"52389389340233786555192956059n\",\n  \"48540948198567585375080843793n\",\n  \"2511738896308209966n\",\n  \"62948973448903767233283645427n\",\n  \"78581731009485419534613750974n\",\n  \"2631249803991736511n\",\n  \"15700178914629731044995270252n\",\n  \"21825209006850516132399941848n\",\n  \"469426094359884098n\",\n  \"45109950384963150442992909517n\",\n  \"34709270486045260410251674804n\",\n  \"3227700636384978310n\",\n  \"59508455528169337110518969046n\",\n  \"7626842288771897454076798332n\",\n  \"2837142952242233831n\",\n  \"78154898100541067453790359715n\",\n  \"28712940925290532622010374032n\",\n  \"2005548120880216529n\",\n  \"19676819626842762742496321363n\",\n  \"21494888704510312646126358022n\",\n  \"1917432403713999314n\",\n  \"35348767509581898437000853095n\",\n  \"54404372638473474714277538548n\",\n  \"1418295384476104455n\",\n  \"2087534038039694873601959364n\",\n  \"55492416744530703076122435501n\",\n  \"3415979290873032604n\",\n  \"77874081666239317555289078970n\",\n  \"64693269821438151662321973074n\",\n  \"468500022203866114n\",\n  \"52183552801284363909457374676n\",\n  \"26386627404911694711966206173n\",\n  \"849932193222808822n\",\n  \"60880246718709527470179169635n\",\n  \"73275749658065911543659109078n\",\n  \"2835936826164075331n\",\n  \"47034978948350796174151388655n\",\n  \"71774550150782116132727222082n\",\n  \"2957236831646338670n\",\n  \"63121833886036603562738575495n\",\n  \"23473953357667857038757232396n\",\n  \"709268300106945760n\",\n  \"67565011137450891785645904255n\",\n  \"24476510070022540670394808047n\",\n  \"2197500443692989620n\",\n  \"59529365216756814354926446285n\",\n  \"62380286296544401614193824725n\",\n  \"1797665767653557658n\",\n  \"65352576236492901270647039868n\",\n  \"54007112892683927216806385747n\",\n  \"1796075374294915397n\",\n  \"17840563634584466359434584144n\",\n  \"46203718678613515530978507404n\",\n  \"702053810505193011n\",\n  \"6133701316708198581434709723n\",\n  \"61802938904865726983656435299n\",\n  \"3001276128418418514n\",\n  \"11649452974115692944272358953n\",\n  \"18473964874994391830987882986n\",\n  \"2086271034138195481n\",\n  \"27934361651981769617523547350n\",\n  \"75412934231387879572695859186n\",\n  \"461672875728163553n\",\n  \"2659961698397651286244898268n\",\n  \"38244585026297070186059616261n\",\n  \"3371488902807027695n\",\n  \"16205200667874612181106188684n\",\n  \"6520317333544879950114099734n\",\n  \"2490923463723046056n\",\n  \"66034343348095027053141749239n\",\n  \"13522171761978136875076440765n\",\n  \"211626548808403729n\",\n  \"52060409492746050106971031742n\",\n  \"3493375676170587510122635686n\",\n  \"3394236868158496257n\",\n  \"47140116537527183288446191137n\",\n  \"26402419994251877186703235784n\",\n  \"2932509761218506683n\",\n  \"41718577718458247425998327137n\",\n  \"72444125720253366875907105723n\",\n  \"2370720516004120360n\",\n  \"63763546849180341189837833587n\",\n  \"56383249669741657007269755446n\",\n  \"2772609748811855948n\",\n  \"30673155381064993958540435457n\",\n  \"58923421149810821122915571284n\",\n  \"2826147464537959677n\",\n  \"2437524155719427333248486827n\",\n  \"13523745438577697843652059309n\",\n  \"2255306498837633258n\",\n  \"66617913651732723895666550762n\",\n  \"800383901932656375981050324n\",\n  \"2369057816442019000n\",\n  \"53894023794388536556779913700n\",\n  \"43633381247568199322500578225n\",\n  \"1622058361920748072n\",\n  \"31610597297695602711187104065n\",\n  \"75047413064993937787913175675n\",\n  \"2532518357458277794n\",\n  \"66943196821272189971919216455n\",\n  \"63057632269388325855862697967n\",\n  \"252919094746701796n\",\n  \"36093617934864267028615495215n\",\n  \"2458297172936844284200172721n\",\n  \"2861973034148611365n\",\n  \"35639326827089764975324431609n\",\n  \"42790455257345625520833632516n\",\n  \"2416491183110698117n\",\n  \"25453911219236829571892475695n\",\n  \"7792114184406477060828720050n\",\n  \"3256395018257219594n\",\n  \"44446878573785568457717214835n\",\n  \"31316823799089969829944488381n\",\n  \"3348254446631709920n\",\n  \"12075675278480009463346998871n\",\n  \"33336621394122897171138216323n\",\n  \"1761645290764169692n\",\n  \"38936491179522097211601163974n\",\n  \"40756936871275705147530952481n\",\n  \"2239620312855528769n\",\n  \"66166234417862875439766591001n\",\n  \"45961753617942718644070346235n\",\n  \"2545432639028408432n\",\n  \"27071931775260190706961952445n\",\n  \"16791652622063002274074642172n\",\n  \"1351810600008793720n\",\n  \"8734604468994364132650578395n\",\n  \"2915643774972349972943503710n\",\n  \"546123555763251031n\",\n  \"40883390215425903758829895197n\",\n  \"46075188532687982090196339471n\",\n  \"2037883374560027081n\",\n  \"1788529744899075811496881871n\",\n  \"22977601030754581206369105722n\",\n  \"2052641684479223112n\",\n  \"52403270166627919005596848880n\",\n  \"2330881363722503207702297453n\",\n  \"1950506519094245230n\",\n  \"26974012086112717010353138814n\",\n  \"69257122863702421096680142186n\",\n  \"731421312124744837n\",\n  \"31069884618093040515903738825n\",\n  \"64922032296511662760139295040n\",\n  \"2654253976131730717n\",\n  \"12166944124292618925625599356n\",\n  \"59407826445782768214824917874n\",\n  \"354147487414166550n\",\n  \"74336686733791433900827528675n\",\n  \"12704634481538804742936579229n\",\n  \"2082676564717138885n\",\n  \"190n\",\n  \"58146038485323707171566360552n\",\n  \"79083051845830931429793398812n\",\n  \"1253760413372422709n\",\n  \"75585805608841426332286895315n\",\n  \"17454071065969374047751520578n\",\n  \"1856801283221000835n\",\n  \"56347371123082155623989904211n\",\n  \"52625756897582785946932954415n\",\n  \"1103484556810393055n\",\n  \"27404185422829405492475499818n\",\n  \"1419552461670775323662566720n\",\n  \"3431535685290297040n\",\n  \"10240761959601706862708901917n\",\n  \"71665724585200281475617327049n\",\n  \"3232798557396947874n\",\n  \"32919536142170844080265894843n\",\n  \"27634787910238436631971547080n\",\n  \"689759514785002741n\",\n  \"15431349741815244232301206308n\",\n  \"53845586976664022319541168221n\",\n  \"1583044030122302208n\",\n  \"47825067986735618489429772434n\",\n  \"36933954632637013701382915058n\",\n  \"2061889715878943774n\",\n  \"8977310916259261225384223331n\",\n  \"4538091340276567216050541897n\",\n  \"2974949937804520552n\",\n  \"32068898197860866225864499204n\",\n  \"11944297794698583544272156441n\",\n  \"1942470514051769102n\",\n  \"16232887649510996786606289763n\",\n  \"15259493580801814760566477085n\",\n  \"522617557584553779n\",\n  \"24242596953798418019519661501n\",\n  \"34675681500323328218631423377n\",\n  \"2626688210475495912n\",\n  \"78740174483351451096333088791n\",\n  \"64943981386376195937910130384n\",\n  \"3002553261633376435n\",\n  \"71321212497283823630152857278n\",\n  \"57107096638064759035770959417n\",\n  \"1525415424337039994n\",\n  \"33592124231316161392746859369n\",\n  \"66360389043497290172485164153n\",\n  \"169262401730913852n\",\n  \"67472003684398719335655699957n\",\n  \"16789521379035350190464748508n\",\n  \"2131762421966585515n\",\n  \"66631783199370161347508379926n\",\n  \"48925352076915955304942304087n\",\n  \"264237490291976243n\",\n  \"24342296347779296789258245457n\",\n  \"43293722801550027940585947288n\",\n  \"2184523999681911728n\",\n  \"9355802069694208050316076397n\",\n  \"35552089219631962733889470030n\",\n  \"3012875015446218241n\",\n  \"19749370490527515528697426175n\",\n  \"8078386931861545908004277048n\",\n  \"484548262348581637n\",\n  \"9197680845227051035593920301n\",\n  \"76678845496561933550816162785n\",\n  \"1006587369936993775n\",\n  \"16264558547638181301681301031n\",\n  \"77659436542602450682090346042n\",\n  \"2549030864566782064n\",\n  \"23992787444587661702047865121n\",\n  \"15283574111017964877795482274n\",\n  \"1010500590098381861n\",\n  \"36081283464794391834173091918n\",\n  \"74713339703559068643167768213n\",\n  \"87864425149724657n\",\n  \"15509755852767806607741504203n\",\n  \"49741860533707809781906740346n\",\n  \"2053665582944552662n\",\n  \"21800540003051693165872352300n\",\n  \"55295746887291089518396498874n\",\n  \"2979094345114374943n\",\n  \"11846584694067264521987247663n\",\n  \"49031890130314527277927146925n\",\n  \"3053072831928300240n\",\n  \"49870471347364999860446391462n\",\n  \"60351156120295649092916522340n\",\n  \"57434309920295622n\",\n  \"51905526990545292008889846168n\",\n  \"35741421582248014414699395252n\",\n  \"1021827240168947429n\",\n  \"16350288651927207676427341432n\",\n  \"48548588913627635520822500823n\",\n  \"2556960523655499318n\",\n  \"39061623507343320271115115845n\",\n  \"38947970321306063422821592330n\",\n  \"2525216560431056230n\",\n  \"65177147304893778229440396619n\",\n  \"70545257645069117487807391489n\",\n  \"1600567512488781231n\",\n  \"33331224951106722420313772928n\",\n  \"38583179480229318101782748287n\",\n  \"1817415503412264076n\",\n  \"43931562095456763346512920739n\",\n  \"45993143967557989986350621262n\",\n  \"1013785943641285390n\",\n  \"46300841465540867353476664678n\",\n  \"67952189225824325494911009881n\",\n  \"1883806626142505323n\",\n  \"74763953209711116608083413573n\",\n  \"73395076121267231351266442748n\",\n  \"875683814313975814n\",\n  \"23960570645093608799064342076n\",\n  \"36737884069061207609010160029n\",\n  \"2740282725978910539n\",\n  \"2348460868169339519816282219n\",\n  \"59294276502368234372728690209n\",\n  \"2234404830781012457n\",\n  \"29326696920519891523554164108n\",\n  \"46303855242526653100651128095n\",\n  \"1172546639486712237n\",\n  \"7729537530476375227332351839n\",\n  \"8564566731713324385055420531n\",\n  \"1479853701561506444n\",\n  \"22273291075577128615277532352n\",\n  \"73656828782504352218789556241n\",\n  \"2308987335794616316n\",\n  \"14359470620000928077518163171n\",\n  \"71961130737820208932903249274n\",\n  \"950707570385670728n\",\n  \"70317507071845790171587549310n\",\n  \"45654920344570326674633769038n\",\n  \"2650168593880186613n\",\n  \"45738429799101288017972815601n\",\n  \"43778890431815013310034329810n\",\n  \"312650173805915283n\",\n  \"59759032808483205201660512612n\",\n  \"49166445941564648520976910103n\",\n  \"575816160851551719n\",\n  \"41099033744600704768583815842n\",\n  \"67643677451426846496806534446n\",\n  \"2744110069990264553n\",\n  \"5427077521225540080527062818n\",\n  \"27591683040195514365023584328n\",\n  \"1814257385547611969n\",\n  \"43890769480671665778349573612n\",\n  \"25702107374475025393868297533n\",\n  \"2665391419850264467n\",\n  \"49173530067968024446609831742n\",\n  \"69233652337477869916623889471n\",\n  \"2973651385942905178n\",\n  \"39451576607205851507235401000n\",\n  \"65326357252788810888449550413n\",\n  \"2328241568819620138n\",\n  \"7187030532193362998811241838n\",\n  \"11158043907775193412625503465n\",\n  \"1887168135327759363n\",\n  \"72093988836508782933530929396n\",\n  \"59408618785876068844273516201n\",\n  \"1998979553140732738n\",\n  \"20436888483045692091969328934n\",\n  \"37236965238760796085670708990n\",\n  \"2982240668332065019n\",\n  \"45766566944201297703965941735n\",\n  \"33134417182815170607111134530n\",\n  \"2256938019969749699n\",\n  \"61095014957849456939456497149n\",\n  \"5166234805292214141604288719n\",\n  \"2223380807107784804n\",\n  \"4407612794594263685713471991n\",\n  \"27938927008707740784778705409n\",\n  \"889822472376617854n\",\n  \"10586000171735376465147370484n\",\n  \"11688046614136879282493614768n\",\n  \"1673899149118569188n\",\n  \"48568524626716983467820586640n\",\n  \"54066530547892129113282820943n\",\n  \"1257544179877250249n\",\n  \"70430239680893778037863498084n\",\n  \"67050853132645903854946409019n\",\n  \"2548118935751794404n\",\n  \"41828468840963319821789084190n\",\n  \"14275492751268414444663806553n\",\n  \"1784444490366165065n\",\n  \"61852018693496828660952117185n\",\n  \"48406002847831614907905133809n\",\n  \"49483591444929780n\",\n  \"54427537761720246076956183538n\",\n  \"41736602958902949490055768838n\",\n  \"1954646608479060360n\",\n  \"60934769075649772007484314209n\",\n  \"4723248530441409773201893998n\",\n  \"3259834508477438622n\",\n  \"16778379388406768302608844589n\",\n  \"14091941761246911672273283575n\",\n  \"1362843677097285540n\",\n  \"20990186444040307549583297890n\",\n  \"39850655248017325132808795637n\",\n  \"3159948251218994501n\",\n  \"22841250904644903266547583091n\",\n  \"35884470460139378173998471965n\",\n  \"144997960402386643n\",\n  \"73988342422211773824311060048n\",\n  \"25430193174058044426248161017n\",\n  \"1511499341976026028n\",\n  \"41856665278828717622897473021n\",\n  \"52430814625940772563313528979n\",\n  \"1518969462082050494n\",\n  \"42785280606159799076021378453n\",\n  \"75641406683588400312731571380n\",\n  \"354558010400584999n\",\n  \"25777665187274443426345962355n\",\n  \"52569759362487685340322204483n\",\n  \"2660707269990640271n\",\n  \"39456006642189286944561721406n\",\n  \"64095592448568371575360918624n\",\n  \"1623622008203944130n\",\n  \"42823981658558488340963830755n\",\n  \"70857240021552825619139550212n\",\n  \"3338694247115466605n\",\n  \"33528981497758066103123618956n\",\n  \"52174717566293432033940167575n\",\n  \"3285250213548536505n\",\n  \"49559726527714678923168862226n\",\n  \"35376383273863973001561075247n\",\n  \"1762388272055172875n\",\n  \"4963094059256542135804830802n\",\n  \"15251461935798611072932258838n\",\n  \"3043255521973128258n\",\n  \"23415022784844915519999589288n\",\n  \"59120161904093027011464662035n\",\n  \"2353807276882257604n\",\n  \"35355887041205290611693611623n\",\n  \"31669150297307261835976265040n\",\n  \"872891098273185795n\",\n  \"69193046798683036289275806803n\",\n  \"42818302823254546309613088130n\",\n  \"3225904969635087159n\",\n  \"22611614040816481524272701347n\",\n  \"40802292074751246948780577207n\",\n  \"351005661799852441n\",\n  \"50079803252014276007292589026n\",\n  \"37577116329374038939872244704n\",\n  \"745466466224739689n\",\n  \"57943789902740370489195854856n\",\n  \"59877164372411435705733535421n\",\n  \"1440407261307873910n\",\n  \"74147961838302268113193936081n\",\n  \"29475004529393168298384526566n\",\n  \"780455262674149785n\",\n  \"51306862863296749150663360555n\",\n  \"68603117787295236727112632820n\",\n  \"2702997921905430000n\",\n  \"64092864258708121960742058121n\",\n  \"27968741860257802705491575837n\",\n  \"3395033579182877453n\",\n  \"60896409955387219924723371046n\",\n  \"72447564289478669262616529078n\",\n  \"3397060291617780594n\",\n  \"74466337456436624238136742413n\",\n  \"67930138912822600973471222439n\",\n  \"631712168137915134n\",\n  \"34699941264140402915854806555n\",\n  \"31625108777123266428395503959n\",\n  \"662594291726250121n\",\n  \"10374418997762067141299032182n\",\n  \"74831531166323756923345310781n\",\n  \"2614948808475244069n\",\n  \"45617012767756761370444767987n\",\n  \"44141298692376594039790971629n\",\n  \"1159181502462992545n\",\n  \"47704071339495071156056567054n\",\n  \"46834594498992945383289148503n\",\n  \"924797511068572088n\",\n  \"23233351571238696045632767797n\",\n  \"14376771187481317319928510593n\",\n  \"3161389881302592208n\",\n  \"68221328884209068946490350230n\",\n  \"69520921081111912732122080295n\",\n  \"540294970059028553n\",\n  \"49382519270729084009739959234n\",\n  \"54272649767268320797552878520n\",\n  \"1762246401423958252n\",\n  \"65695480183764337135892820912n\",\n  \"15357314953562507969519535878n\",\n  \"2415017092301124519n\",\n  \"12568989548408666155318764896n\",\n  \"10255298595269749256814759758n\",\n  \"488040996573952383n\",\n  \"61804111086379855885098583520n\",\n  \"11271058357408383599116781502n\",\n  \"1329740533130250248n\",\n  \"8039933903881517002403963857n\",\n  \"7118558163468937314455208936n\",\n  \"536489202082349116n\",\n  \"57213159007120933607123362054n\",\n  \"38389263848304750695624289842n\",\n  \"103890218507147410n\",\n  \"44837586220950001446991442272n\",\n  \"51003826059731215073098356499n\",\n  \"1055564410899460745n\",\n  \"36382905285088913012495727205n\",\n  \"23789430840439822229827015138n\",\n  \"2409250954595470494n\",\n  \"77553161939176686247041732803n\",\n  \"32075777538535189410338696221n\",\n  \"308581509063990399n\",\n  \"75123827789249657112621112140n\",\n  \"63466606458376146979489895003n\",\n  \"1559915864837385203n\",\n  \"65374245818638483805981829412n\",\n  \"59413598642796928072211645702n\",\n  \"773792966334851501n\",\n  \"10975404188605698335218119359n\",\n  \"5937731821461360820250261750n\",\n  \"2424406683527655198n\",\n  \"58048034440511231692734658223n\",\n  \"38541497666142538814655959889n\",\n  \"97237747168756283n\",\n  \"32114431512100683707696744321n\",\n  \"43084884381938054868610618438n\",\n  \"53036606161489394n\",\n  \"49303822531142933183499847955n\",\n  \"70757204501375068333736255366n\",\n  \"1090664900942087596n\",\n  \"68973060792876598659428050587n\",\n  \"21709941437174734607102143168n\",\n  \"54515769952578230n\",\n  \"40278884731265681742344272236n\",\n  \"34941403842240889411044059527n\",\n  \"1414736029232632973n\",\n  \"60344648712825684665541778621n\",\n  \"10769790997010708809402622618n\",\n  \"2270992661657155596n\",\n  \"42362387786284445354439187653n\",\n  \"58156800386628045782945926146n\",\n  \"2818686942230697090n\",\n  \"31419723024915919870538049034n\",\n  \"18005463704599391839628874083n\",\n  \"212688156617827815n\",\n  \"35911328625822934725057123638n\",\n  \"17761454535191485025880626131n\",\n  \"1761977155017563514n\",\n  \"49665582664754517847870128980n\",\n  \"39319816430240621753318268462n\",\n  \"1491136817343252047n\",\n  \"22260823695114013941955374538n\",\n  \"17055513051235397699203988336n\",\n  \"1922191265581876891n\",\n  \"14555432039935861975982534425n\",\n  \"48152237244885228239450679938n\",\n  \"621157026389301132n\",\n  \"23051036183574002962556684690n\",\n  \"15971796984547909136099208821n\",\n  \"2205567601778656458n\",\n  \"26382181900386119773631359523n\",\n  \"77486525780604152291567730894n\",\n  \"3344785235831598130n\",\n  \"40994902602684141065596542528n\",\n  \"58124151025072872977666932193n\",\n  \"1866769646811958428n\",\n  \"13188769330477055787925877048n\",\n  \"72682189451050217677569494954n\",\n  \"1454880931779552660n\",\n  \"33634144479293043106522767128n\",\n  \"63196693658172041397923530081n\",\n  \"1719120090000942363n\",\n  \"11106335219605429034116541445n\",\n  \"59150880447111322507257453443n\",\n  \"1982729467772378638n\",\n  \"24990080775267144618286017329n\",\n  \"4933890943319210884773036028n\",\n  \"3238771988114708503n\",\n  \"72949239866424524529472552202n\",\n  \"28511064168198009294661488723n\",\n  \"2962023653742267897n\",\n  \"58656766073983020247853921869n\",\n  \"47635718491612423608063190516n\",\n  \"3000234376036375986n\",\n  \"24238047790212470654844439662n\",\n  \"23154937283069080880032452049n\",\n  \"2013625456869347404n\",\n  \"14825246893209210042587190789n\",\n  \"52825936212514509264761514892n\",\n  \"993721473581556871n\",\n  \"8713904335226753185274037022n\",\n  \"58909703948513917292703719505n\",\n  \"3356613834808478835n\",\n  \"47783414808532480730935012208n\",\n  \"71833517958023857391706253943n\",\n  \"2135080825574499771n\",\n  \"884520208662549368825880483n\",\n  \"66815068005909338250309574561n\",\n  \"140309291176602342n\",\n  \"5569450875351413209302619112n\",\n  \"29224003387999671040246207661n\",\n  \"1610924941533931901n\",\n  \"51360380732923628237942915208n\",\n  \"49075415090226283505119870909n\",\n  \"824496444682252362n\",\n  \"26136012194887577513976704588n\",\n  \"25203540858598899941257080851n\",\n  \"1411280372175925570n\",\n  \"68280069972262928193338796048n\",\n  \"26491256896653383849815404924n\",\n  \"2469762357772618827n\",\n  \"73734748267187905353062326737n\",\n  \"68913774706780990255684794379n\",\n  \"53485910764302128n\",\n  \"77777156063573625138168997381n\",\n  \"64557037666602761347172706735n\",\n  \"1996255398685960466n\",\n  \"28464530722569754157139260154n\",\n  \"22979110781613272893921919353n\",\n  \"1105566566131594780n\",\n  \"28039439084355019144555806027n\",\n  \"16299329550217317018880117262n\",\n  \"2401400792301565600n\",\n  \"62631950163514864539620020206n\",\n  \"64031511810008173001111779669n\",\n  \"135723323566704095n\",\n  \"56130238209974371238192421387n\",\n  \"71300385211683773671558874832n\",\n  \"2820109121346955706n\",\n  \"1266050722527037359608467989n\",\n  \"23369565459382988863634254407n\",\n  \"2609151292716742371n\",\n  \"46069724971530567254818701644n\",\n  \"50647992693491661816900039583n\",\n  \"3003365004111477246n\",\n  \"14833086786816707962865094508n\",\n  \"37929390713358467376261350799n\",\n  \"3113860565507891619n\",\n  \"14007914765299785142256461365n\",\n  \"75894388353326085571138234483n\",\n  \"1683683923201420873n\",\n  \"63454168155478046454844432701n\",\n  \"13184396719317261321865011420n\",\n  \"3455798177318665792n\",\n  \"15242605704632094686138955952n\",\n  \"19838168147461161870148387345n\",\n  \"2010616752800746021n\",\n  \"30692509923364661764582557691n\",\n  \"62096107423559910046379351905n\",\n  \"1346903255621101256n\",\n  \"34464243166874822079393179146n\",\n  \"63846438778551544175642767034n\",\n  \"1138380012879476837n\",\n  \"74737710169640323515477410562n\",\n  \"6284356348145608854716748036n\",\n  \"180980529294338977n\",\n  \"38461808257846861933076217288n\",\n  \"75020453906990644280477544720n\",\n  \"307346157687553567n\",\n  \"42941917981619284749284256464n\",\n  \"29124361387770891246090195521n\",\n  \"2258523094183111792n\",\n  \"31043177647483836512207577733n\",\n  \"76846872956655992019312504229n\",\n  \"2737531135418987922n\",\n  \"436136989124112448213257527n\",\n  \"37270775937015261263489085940n\",\n  \"1691548620283188254n\",\n  \"34350139485051631072038425243n\",\n  \"47842925193965716748069619330n\",\n  \"3012190802049531932n\",\n  \"8161319477063961893865419497n\",\n  \"39887640444908598647019011892n\",\n  \"326805514938122984n\",\n  \"45251026371225474798165551670n\",\n  \"78712165100775809310221458014n\",\n  \"1747908356221952635n\",\n  \"74097152003535814545675921337n\",\n  \"48494072556502793463457269862n\",\n  \"538895690676303310n\",\n  \"54295451611850750079844956272n\",\n  \"26534574033318342223582372449n\",\n  \"3044215930961181551n\",\n  \"75837108057982626126393125222n\",\n  \"52432746192616266658163099498n\",\n  \"3397076867009838686n\",\n  \"54465116802539051194037403225n\",\n  \"19480966575390018045669641671n\",\n  \"1874912131754984363n\",\n  \"62538117008905102096704754568n\",\n  \"49778263788224308775212049920n\",\n  \"635641138655366122n\",\n  \"1000125186700770733728208856n\",\n  \"72272342271481440271970417215n\",\n  \"126669907718514487n\",\n  \"32850606983744341262159941170n\",\n  \"34502523802539415215826357899n\",\n  \"335651800228572498n\",\n  \"74891229697299665485048117886n\",\n  \"7923057032410301273894282773n\",\n  \"2078488636177744832n\",\n  \"65834931437626611160851671144n\",\n  \"47253521926346692275217471181n\",\n  \"1450467026022714805n\",\n  \"79218551078854046456367160410n\",\n  \"70762120870550042138883949317n\",\n  \"2886881633871743501n\",\n  \"34749927009400659485527823456n\",\n  \"74230186035227802214714540722n\",\n  \"91514308691397285n\",\n  \"23895248556901354081433241434n\",\n  \"16615401776547671346915841714n\",\n  \"3136707560354543978n\",\n  \"21834987311199156124647763244n\",\n  \"70345068331037455105782146634n\",\n  \"3216348569578182800n\",\n  \"14552026033494402774981149080n\",\n  \"46810169065384954077118190274n\",\n  \"1911480149318741295n\",\n  \"30149592931357591699950156644n\",\n  \"14166482924045038689605819053n\",\n  \"2327000634007357378n\",\n  \"38247650175016523126038806200n\",\n  \"57691234003597921786155373117n\",\n  \"859973345968241198n\",\n  \"71714837789763600565992214961n\",\n  \"73412375228179646879012079459n\",\n  \"1974246974270865632n\",\n  \"52446930245349056255719340345n\",\n  \"970285520444299081223312008n\",\n  \"1628797543941019300n\",\n  \"50919498183802806944452291286n\",\n  \"37490783833480294299979274400n\",\n  \"2991807516764641990n\",\n  \"32377691154331801475818794360n\",\n  \"39750977600721907402675106371n\",\n  \"2263832844069227231n\",\n  \"17627606237803241511589218465n\",\n  \"3828538907962341287451709925n\",\n  \"1651077712155795619n\",\n  \"65746494371320988039239195368n\",\n  \"40429923959132850189737190904n\",\n  \"1761591307449813117n\",\n  \"62030904653045818611809336637n\",\n  \"31416196507873606617755041492n\",\n  \"1626933121429044990n\",\n  \"56278396859095728868031718464n\",\n  \"40673401721781629455927974763n\",\n  \"816921835574909421n\",\n  \"41466998290124345097221160853n\",\n  \"77602619970761915549134486486n\",\n  \"2270380655319303423n\",\n  \"37278580144182814004827303266n\",\n  \"22631466550317400025567159166n\",\n  \"1256554869446519681n\",\n  \"44512857141401466618198683938n\",\n  \"75645231533450873900978589761n\",\n  \"2839895442152180859n\",\n  \"31711543132209616307103122831n\",\n  \"78955556053482715721582593706n\",\n  \"626995298916699271n\",\n  \"50496746606014163961365206592n\",\n  \"62746915431247250243776212132n\",\n  \"2682171950447987392n\",\n  \"8649064541355918845604157106n\",\n  \"3642459701627177804195047993n\",\n  \"304942239933523054n\",\n  \"52349349447437650280979204973n\",\n  \"38235331305898406894352347179n\",\n  \"574973155769907953n\",\n  \"35486247734767358887659775332n\",\n  \"63676560163395574209410974039n\",\n  \"1346859065344137509n\",\n  \"42626666034641293807810059734n\",\n  \"78692725054674081196434522843n\",\n  \"2899402626497036759n\",\n  \"4466386979191688634974299793n\",\n  \"73590084746022202502283403859n\",\n  \"859759454707498102n\",\n  \"49530047850904057997975767021157383838285524079350821991880424926644689941n\",\n  \"12n\",\n  \"73833755054290735615493473493n\",\n  \"59827914949558952876927624612n\",\n  \"1842769298355464193n\",\n  \"0n\",\n  \"31709724516548461033720090826n\",\n  \"30157355094312078251107514164n\",\n  \"2598882554441689462n\",\n  \"0n\",\n  \"340282366920938463467229529119593204504n\",\n  \"2783209552014905048n\",\n  \"340282366920938463475639663367112901035n\",\n  \"340282366920938463466510485605024151680n\"\n]\nOutput of encryptToDrandRoundAndGetCallData: 50 elements\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/nodejs-ts-cjs-tsc/src/examples.ts",
    "content": "import * as garaga from 'garaga';\n\nexport const proofBn254: {\n    a: {\n        x: bigint;\n        y: bigint;\n        curveId: number;\n    };\n    b: {\n        x: [bigint, bigint];\n        y: [bigint, bigint];\n        curveId: number;\n    };\n    c: {\n        x: bigint;\n        y: bigint;\n        curveId: number;\n    };\n    publicInputs: bigint[];\n  } = {\n    a: {\n      x: 19326975765597999023026309242851464618295625967876195641207265702903971944714n,\n      y: 63835113064883221423828958902442994957834669122245713027012799265225733314n,\n      curveId: garaga.CurveId.BN254\n    },\n    b: {\n      x: [\n        15926258242285065430281020483827261910589109953358642697562602626998569607754n,\n        15482775443177023962384497625528997151098293635727021527127534892096530509952n\n      ],\n      y: [\n        10937776115245591292644949547008094885240742374542777857501160790374675834371n,\n        6691169928456984700056024515478772626466687376966760922939239504103847739755n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    c: {\n      x: 18548825552947889373136407684636046437705490810597995577018381312170231914454n,\n      y: 9890815383090898074006770716054740281870916546141552254207684185588486179606n,\n      curveId: garaga.CurveId.BN254\n    },\n    publicInputs: [\n      BigInt('0x1e17db88c1d2e83e49f692cce4bb8169309de90afb2b141156243106aa34b474')\n    ]\n  }\n\n\nexport const vkBn254: {\n    alpha: {\n        x: bigint;\n        y: bigint;\n        curveId: number;\n    };\n    beta: {\n        x: [bigint, bigint];\n        y: [bigint, bigint];\n        curveId: number;\n    };\n    gamma: {\n        x: [bigint, bigint];\n        y: [bigint, bigint];\n        curveId: number;\n    };\n    delta: {\n        x: [bigint, bigint];\n        y: [bigint, bigint];\n        curveId: number;\n    };\n    ic: {\n        x: bigint;\n        y: bigint;\n        curveId: number;\n    }[];\n  } = {\n    alpha: {\n      x: 6763126530687886999315782887200758703366235230289874831627658839515656330867n,\n      y: 12297948670392550312636836114470404429657568989657927437959695771502446445179n,\n      curveId: garaga.CurveId.BN254\n    },\n    beta: {\n      x: [\n        15362786867599176251482538547160991918100063526460909721657878971551583339657n,\n        3804423004921008809819632629079723167970572551072432396497601916259815496626n\n      ],\n      y: [\n        21885719103633717693283841528133243510750001708857084897139570082577218850374n,\n        2076817281717432063622727433912740683541778328445173073030513609350245776784n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    gamma: {\n      x: [\n        1505558511994093266228972967760414664043255115544025409518939393775943607863n,\n        21131173266568468249589649137903719095480044620502529067534622738225157042304n\n      ],\n      y: [\n        4008759115482693545406793535591568078300615151288108694080317738431649117177n,\n        18835856718271757625037377080288624550370480296914695806777038708085497610013n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    delta: {\n      x: [\n        1497911744463986566314308077983046202449361313910668647770797503379177516252n,\n        10829154948357654897792444316512827659620136273388886760324770466776134105520n\n      ],\n      y: [\n        10850392992008761830625471778404650447428083833210258292805429019728339148884n,\n        12593805385728178657844996215584371401133999503150901444097670307277076679963n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    ic: [\n      {\n        x: 8279781786940010385190155571855963988492685408361021424114669994156938727612n,\n        y: 14410809027374663415870055712464930833085570569392210261413081131467855918386n,\n        curveId: garaga.CurveId.BN254\n      },\n      {\n        x: 10075286447651977124250383403562829564641026794366918560412684031493085120161n,\n        y: 13393494704849149158598989372790154670517815409968589728896053397011959461594n,\n        curveId: garaga.CurveId.BN254\n      }\n    ]\n  }\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/nodejs-ts-cjs-tsc/src/index.ts",
    "content": "import * as garaga from 'garaga';\nimport { proofBn254, vkBn254 } from './examples';\n\n\n\nasync function main(): Promise<void> {\n  await garaga.init();\n  const result = garaga.msmCalldataBuilder([[1n, 2n]], [10n], garaga.CurveId.BN254);\n  const json = JSON.stringify(result, (key, value) => typeof value === 'bigint' ? value + 'n' : value, 2);\n  const message = 'Output of msm_calldata_builder: ' + json;\n  console.log(message);\n\n\n  const groth16Calldata = garaga.getGroth16CallData(proofBn254, vkBn254,garaga.CurveId.BN254);\n\n  const jsonCalldata = JSON.stringify(groth16Calldata, (key, value) => typeof value === 'bigint' ? value + 'n' : value, 2);\n\n  const messageCalldata = 'Output of get_groth16_calldata: ' + jsonCalldata;\n\n  console.log(messageCalldata);\n\n  // Tlock encrypt\n  const message2 = new Uint8Array(16);\n  message2.set(new TextEncoder().encode('Hello, world!'));\n  const randomness = new Uint8Array(16);\n  randomness.set(new TextEncoder().encode('fixed_random_val'));\n  const tlockCalldata = garaga.encryptToDrandRoundAndGetCallData(1, message2, randomness);\n  console.log('Output of encryptToDrandRoundAndGetCallData:', tlockCalldata.length, 'elements');\n}\n\nmain()\n  .catch(console.error);\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/nodejs-ts-esm-tsc/.gitignore",
    "content": "/node_modules/\n/dist/\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/nodejs-ts-esm-tsc/output.txt",
    "content": "Output of msm_calldata_builder: [\n  \"1n\",\n  \"1n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"2n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"1n\",\n  \"10n\",\n  \"0n\",\n  \"0n\",\n  \"75759116906411131289250842036n\",\n  \"1443316740970346987535705368n\",\n  \"708088064087366360n\",\n  \"0n\",\n  \"31894839170900604627010243180n\",\n  \"26562388390640533846098233871n\",\n  \"1678682860455561629n\",\n  \"0n\",\n  \"340282366920938463463374607431768211466n\",\n  \"0n\",\n  \"1n\",\n  \"0n\"\n]\nOutput of get_groth16_calldata: [\n  \"1935n\",\n  \"561151868347580495583090954n\",\n  \"76095163897123765080010407949n\",\n  \"3078964875882710626n\",\n  \"0n\",\n  \"68760071548346057889257256130n\",\n  \"33987009017980255890281589641n\",\n  \"10169520226989098n\",\n  \"0n\",\n  \"27526525353537266686222475850n\",\n  \"14475456397330869216192753448n\",\n  \"2537199318039088506n\",\n  \"0n\",\n  \"21536768652854740401912377472n\",\n  \"61033740543581523820282161323n\",\n  \"2466548432040548587n\",\n  \"0n\",\n  \"49356715888972701601325049347n\",\n  \"69887821523610458575318250963n\",\n  \"1742488265497548861n\",\n  \"0n\",\n  \"68106177540828336088045306219n\",\n  \"961134836681944563222599448n\",\n  \"1065964868903753173n\",\n  \"0n\",\n  \"1800806384039658546158952406n\",\n  \"44097612892395787951554989634n\",\n  \"2954998394940821894n\",\n  \"0n\",\n  \"57407696252580182379957914390n\",\n  \"68043785987214905719851221030n\",\n  \"1575697798130653691n\",\n  \"0n\",\n  \"1n\",\n  \"64622861075918021861446670503650833524n\",\n  \"40000715384012656934033607729992139113n\",\n  \"65343516826393976703500119419n\",\n  \"64215924997604874724268545467n\",\n  \"988361220710881918n\",\n  \"30419768492628197858619568261n\",\n  \"27248300164153194572764431995n\",\n  \"2977039154666701832n\",\n  \"65685384868591218376868464427n\",\n  \"70847639348750339988496276918n\",\n  \"477777041053646529n\",\n  \"29991939756641252358878134746n\",\n  \"39295947558852310211017126572n\",\n  \"2815628384676858047n\",\n  \"41723516601424502403187247204n\",\n  \"17017221925427596342628818049n\",\n  \"440483370607139100n\",\n  \"10413180469465695361837522183n\",\n  \"19423959337400646488247227266n\",\n  \"1196856567711091031n\",\n  \"14918739433528640782272739139n\",\n  \"2386255189434407583576372032n\",\n  \"2110030772171629820n\",\n  \"66403863065153192042460667734n\",\n  \"26490228722781507311620127895n\",\n  \"1376925612093868452n\",\n  \"16095686441528704658448370761n\",\n  \"51022389018232154188872438326n\",\n  \"1610491282614910455n\",\n  \"37997039872158612927722452114n\",\n  \"76461913933066610895201145075n\",\n  \"951074374291802403n\",\n  \"71303405408633411813876113602n\",\n  \"65378028046199379258519780162n\",\n  \"2796976393851271662n\",\n  \"66043194162972766020432949924n\",\n  \"72668519642029141849369643840n\",\n  \"1767421250104456939n\",\n  \"34724757470958269778491338738n\",\n  \"67907574914053181941994051296n\",\n  \"1074861315591297211n\",\n  \"57811416502141401297494384261n\",\n  \"66717953782642686044297384228n\",\n  \"619071555217927229n\",\n  \"11747815192199388258706152779n\",\n  \"39655522309044272057593243434n\",\n  \"2667518659266923661n\",\n  \"74545987263802105943401974456n\",\n  \"25100780504941704736052597181n\",\n  \"1614091262172996678n\",\n  \"61496830641585942728225636367n\",\n  \"47520662928915336127912320093n\",\n  \"1483128622047069223n\",\n  \"60688370891239308805053347678n\",\n  \"6154252422157238786881911133n\",\n  \"1595810747040934713n\",\n  \"4083087877564984515505707949n\",\n  \"8098795933662806280871012387n\",\n  \"392529588828430050n\",\n  \"14388273410011291023320103380n\",\n  \"59643003630595652724715495246n\",\n  \"2978244255961784640n\",\n  \"73005708620970672578538518429n\",\n  \"64274822400727474231693975117n\",\n  \"824761225328685267n\",\n  \"58979395441344004425345087397n\",\n  \"50034285490796369376342018474n\",\n  \"1071577406066675668n\",\n  \"37552244383550540565443579029n\",\n  \"66651519402295869947385119697n\",\n  \"1816081760201573675n\",\n  \"48020280081371249748563352979n\",\n  \"19387797072717949389382225132n\",\n  \"1075380445499260082n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"35717919122505863182793101258n\",\n  \"38321232967395819819318928199n\",\n  \"33653293845735846n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"60126610212574038899502857656n\",\n  \"7521540037295293717633716927n\",\n  \"2853604986499631260n\",\n  \"34n\",\n  \"21051189327279847889561754607n\",\n  \"15679397574132606210591767826n\",\n  \"2165541175263187167n\",\n  \"11461504713279098434997837844n\",\n  \"29843864593792422920685859506n\",\n  \"1460931496621397613n\",\n  \"31444402670555100638844582863n\",\n  \"41564870089383627374040254466n\",\n  \"3317275169749288672n\",\n  \"72559701040108110454251376272n\",\n  \"22887416934578586124987839996n\",\n  \"233686850646424299n\",\n  \"51667851121405518271474152545n\",\n  \"8297160697759020633045233343n\",\n  \"2193876459774314419n\",\n  \"50048470992987075597478354517n\",\n  \"7622325433377464914372402739n\",\n  \"2354852892440837544n\",\n  \"51371930649223862037533589505n\",\n  \"79037515700470610379424985426n\",\n  \"3103776711054728122n\",\n  \"62017664743365054011497714498n\",\n  \"18400895627048394641412939651n\",\n  \"1348549913115407530n\",\n  \"68135824164391051249850625519n\",\n  \"66467776056179325801077769907n\",\n  \"21934170737946721n\",\n  \"43733194692565917370190335652n\",\n  \"20871497235942649279957719973n\",\n  \"668366294714005293n\",\n  \"69461224576101086641240237729n\",\n  \"66163212446743341874016516713n\",\n  \"2187872754580648643n\",\n  \"17220145241406859216639481755n\",\n  \"16637691490800642336304328427n\",\n  \"699908274655976347n\",\n  \"63497807423928467541336180608n\",\n  \"5826616601935275548523889948n\",\n  \"1995878641893268059n\",\n  \"45351336804917798268705814434n\",\n  \"32809386436253774870015191481n\",\n  \"2479634507910679085n\",\n  \"29902151727900563245652302915n\",\n  \"70978449320724687288838934154n\",\n  \"2324927884830925807n\",\n  \"70956000718854853515484101425n\",\n  \"18794223695576985859644098754n\",\n  \"851712710373510834n\",\n  \"10098225054790962506843798879n\",\n  \"23663666343921865703011477995n\",\n  \"2539135702270490911n\",\n  \"13745949463631524266514217644n\",\n  \"70097334773007528061348260208n\",\n  \"1449740726324507950n\",\n  \"77747255839650031066990598333n\",\n  \"33186206179829484467075523327n\",\n  \"3072781249488320507n\",\n  \"73980383885811324159893986758n\",\n  \"1765445723258696625718806089n\",\n  \"2271055079390534326n\",\n  \"65413433113844994807777190576n\",\n  \"48033870016967321544035758027n\",\n  \"486427727733872709n\",\n  \"26974899297726311987406093631n\",\n  \"5590641036960446176988521755n\",\n  \"827510576486023036n\",\n  \"29009837304935242599458620885n\",\n  \"20410410399336048506493809410n\",\n  \"1954580703151327584n\",\n  \"64135814011222089868428198367n\",\n  \"56261294792918650387740643327n\",\n  \"1226348411176360117n\",\n  \"71834179960057214052393522783n\",\n  \"46252419010406289556729694820n\",\n  \"1393685374555389118n\",\n  \"71368042768790547323904986882n\",\n  \"66161706759499128280107017373n\",\n  \"2031846388120562115n\",\n  \"21220965229609488481377288540n\",\n  \"63634474338013450603335409627n\",\n  \"821621475859559449n\",\n  \"18432973800914453913616171088n\",\n  \"8237366564750917100218776918n\",\n  \"3448970319177548904n\",\n  \"51266071561401723888120442902n\",\n  \"33637427514172279767467204013n\",\n  \"3304964589143840434n\",\n  \"38819453582756888614388081676n\",\n  \"38995523514738195349996597496n\",\n  \"2323381859757397191n\",\n  \"60884424754479179074928199128n\",\n  \"3834764671648885586861880739n\",\n  \"864611594127789300n\",\n  \"9851774469429652901432809299n\",\n  \"37101389540039872112071709899n\",\n  \"2559626381308197564n\",\n  \"406646090122284731360238690n\",\n  \"44652954714826373590985929530n\",\n  \"683398595921263332n\",\n  \"20271182213679030346920227775n\",\n  \"37600328594433178897257972399n\",\n  \"432396126057182521n\",\n  \"4187404064813213379278146332n\",\n  \"44537571235199588707429377798n\",\n  \"3148695479824963911n\",\n  \"25801656964836714839982503508n\",\n  \"51572074862943493111482365520n\",\n  \"1230107506438930488n\",\n  \"51625253538057090130489675612n\",\n  \"11815326077763625426679125713n\",\n  \"521507079758837629n\",\n  \"9648925458348520397354094791n\",\n  \"31712274845777377436963587786n\",\n  \"1997027570431487029n\",\n  \"67411860089204789431616372347n\",\n  \"66528411456550554620624110152n\",\n  \"186478859944874837n\",\n  \"61267275259145597446660035124n\",\n  \"8554664316600082912178209665n\",\n  \"2375445434845419873n\",\n  \"1589782365755830876261985911n\",\n  \"14834270454057237025174127570n\",\n  \"963005115183332390n\",\n  \"23249702285165109375700438720n\",\n  \"20760791667651963569657008881n\",\n  \"2149068190029611973n\",\n  \"74674158355316816901821060837n\",\n  \"13278131002009659818927519878n\",\n  \"992778641153509292n\",\n  \"8743794935416188942200722720n\",\n  \"51445266496970909016857135378n\",\n  \"438732749332832318n\",\n  \"64511635865187456937539832569n\",\n  \"68455428209776466334096458368n\",\n  \"1196547129512189429n\",\n  \"16652864649326843859619189651n\",\n  \"47031229552259361752165531n\",\n  \"1977848333533964373n\",\n  \"32230433718106499209616712783n\",\n  \"50152042404552913889735459326n\",\n  \"2647553318887157906n\",\n  \"15558003702184603194095500825n\",\n  \"75789384763919593972512743955n\",\n  \"3199452366147221980n\",\n  \"23639206276595496029173201731n\",\n  \"49198122874004051169498469698n\",\n  \"3017499313473475023n\",\n  \"14633623354742611699704494011n\",\n  \"13838793228838994907197164815n\",\n  \"1865567661799564691n\",\n  \"63554437295278917743885851002n\",\n  \"43774994641723817700539915508n\",\n  \"2096263880799998644n\",\n  \"39241367224191359271532780985n\",\n  \"11996031360599781980224407856n\",\n  \"669587303349757211n\",\n  \"70309465524306380398946854940n\",\n  \"69691793870844727391235380992n\",\n  \"1097884931999290463n\",\n  \"4880550284873697839328338960n\",\n  \"8683184578595981266384193421n\",\n  \"1704353262400573542n\",\n  \"43209925421984317108056960491n\",\n  \"71838424302727061831479195619n\",\n  \"1719485935656079288n\",\n  \"20281500369447070817728689103n\",\n  \"7827101470501627130702651299n\",\n  \"1802787150264131673n\",\n  \"46990609747636025825158033861n\",\n  \"44506561326339289883265865893n\",\n  \"168363193009253293n\",\n  \"72644600526598920979602995563n\",\n  \"23734595505295435652505772841n\",\n  \"3066825941193215846n\",\n  \"35922864395887621958431954121n\",\n  \"36164080296393340386782836739n\",\n  \"2806406594668460083n\",\n  \"9559608083309233656821926408n\",\n  \"21435397197883361901646100159n\",\n  \"1173438743001539534n\",\n  \"45502332725513884072895701183n\",\n  \"21110593816020485943815437920n\",\n  \"2156839344197406156n\",\n  \"14935455230205682855615996549n\",\n  \"3176509029633635649806564693n\",\n  \"2744065159326778800n\",\n  \"50144289937074876149408247339n\",\n  \"73476828119785067069284584679n\",\n  \"1137921320963525519n\",\n  \"7764782370318985672713086089n\",\n  \"35186333034809438599544173388n\",\n  \"2599319187054853443n\",\n  \"71090896326220687050059751719n\",\n  \"7138127862158940765217036726n\",\n  \"2525413991973636711n\",\n  \"74465662641034900763924596241n\",\n  \"64800563131735459820423413678n\",\n  \"467645211882593334n\",\n  \"35429207184442884958891366618n\",\n  \"32026071525343635101462583825n\",\n  \"732661589473603894n\",\n  \"53979236240639306101606255299n\",\n  \"42289323195165961060464784974n\",\n  \"2572678142594168339n\",\n  \"34781401150182625703506517963n\",\n  \"27502296245160796607775189158n\",\n  \"204754437845996963n\",\n  \"60295830689532650505249825677n\",\n  \"25033548320502415354132760311n\",\n  \"26918649856759092n\",\n  \"53883044729840223319972205798n\",\n  \"71229970233113264180243241621n\",\n  \"1096143763692361182n\",\n  \"23670625124894730163037915585n\",\n  \"66188859433247255337619139871n\",\n  \"2789875774976133848n\",\n  \"76287870172839315742103539908n\",\n  \"76696206429019592649532825371n\",\n  \"1140810575629679716n\",\n  \"65695197715200264171919419792n\",\n  \"64578697338608806055715988010n\",\n  \"1315508308085028070n\",\n  \"78097114957711978300958275236n\",\n  \"73435222529435448525954708815n\",\n  \"1357585460514972583n\",\n  \"7357385422266450818170168488n\",\n  \"41750638133784298446701227299n\",\n  \"2309087687582896396n\",\n  \"59893979186320257893680148671n\",\n  \"70073254756682993544223051173n\",\n  \"3379633857316028827n\",\n  \"63037751789054738563399308545n\",\n  \"22112638657428976200628648553n\",\n  \"1119955028522904661n\",\n  \"17789959924300679578888409433n\",\n  \"32036177498553475203925266628n\",\n  \"3282049411090141820n\",\n  \"28853440708133119682221591754n\",\n  \"53037088663773523321481680370n\",\n  \"33889236786700338n\",\n  \"47866115906431522995214087729n\",\n  \"65896044771509521496549322945n\",\n  \"1356170216477027582n\",\n  \"72025359186703704066599325205n\",\n  \"14290937382512145681745832413n\",\n  \"235291859370816977n\",\n  \"16739080450814900672563464076n\",\n  \"27155915888194232201712953259n\",\n  \"2201285100786606817n\",\n  \"79046757705903490925593572396n\",\n  \"41590525534061554138727710174n\",\n  \"1563993153777110442n\",\n  \"58644351226953768961970699175n\",\n  \"71513413355714071072616721058n\",\n  \"771468756865502494n\",\n  \"56315873417343912546874324750n\",\n  \"66995041844358703653717763298n\",\n  \"1564628505321775490n\",\n  \"68742094005504029111318961475n\",\n  \"43257881480227388188853022203n\",\n  \"2827885137176633354n\",\n  \"60013377537965180515452389042n\",\n  \"22615548017942376680894051034n\",\n  \"2778940717048846996n\",\n  \"30216926479141873412912870389n\",\n  \"67097866317972012436735650659n\",\n  \"1001082522948099952n\",\n  \"31879429787569811794175043050n\",\n  \"57916743777618192263856200515n\",\n  \"1477201521425100888n\",\n  \"63117110331861368443138300600n\",\n  \"24455052765578778318741183737n\",\n  \"3145320365602131181n\",\n  \"27504400622945393457424964663n\",\n  \"18149654277116955082138788671n\",\n  \"709865641588578406n\",\n  \"51203413602847718278618462447n\",\n  \"32871208476003646471375256821n\",\n  \"1972541565241208115n\",\n  \"79118404692942875097520377767n\",\n  \"48815069625306356145460113214n\",\n  \"2800168047740476387n\",\n  \"27090046108651136752525050251n\",\n  \"17050737426763583806790779471n\",\n  \"1273566324033923836n\",\n  \"49543917066569282928794484300n\",\n  \"10290628042158833070532221066n\",\n  \"3469066870558011680n\",\n  \"42005113796531220880503084548n\",\n  \"60064195130891515794312310901n\",\n  \"3245851193684195107n\",\n  \"37533982385009798315342336648n\",\n  \"10267823027838019609009260399n\",\n  \"2025345482262498605n\",\n  \"34864622598934340124988581388n\",\n  \"48347073555555495737374318810n\",\n  \"2673244105079290838n\",\n  \"75957016907360510463610401727n\",\n  \"23977086141109407077488719105n\",\n  \"732491745580907274n\",\n  \"64604276948999648627686221332n\",\n  \"3868070793275280858296301394n\",\n  \"1873653426250118454n\",\n  \"15570553586934053483564418077n\",\n  \"13639547122371116255200424101n\",\n  \"3229806347752382046n\",\n  \"69627176750917937037127756524n\",\n  \"77527130421629244161614984692n\",\n  \"2205592855904802747n\",\n  \"42359401661274759693285654733n\",\n  \"15319487818905735149374624862n\",\n  \"3299209455827802664n\",\n  \"913752139298990313523799637n\",\n  \"70257873178701883303322833580n\",\n  \"3363278906733915791n\",\n  \"3719386124896722977369262005n\",\n  \"53915264239484240561994801723n\",\n  \"1014563467864375643n\",\n  \"56643381820560944379080271087n\",\n  \"5451127454093963182673395845n\",\n  \"1647155594727927302n\",\n  \"74031948470913728924354306654n\",\n  \"67046184840603355661228918718n\",\n  \"730434808359892479n\",\n  \"58832815659134274668136294794n\",\n  \"44220894708044864609266466973n\",\n  \"428689828657455715n\",\n  \"26619728344740812354339350673n\",\n  \"55972705855091654840275771393n\",\n  \"597472825198654088n\",\n  \"1452568843776109298902292527n\",\n  \"48082065429135088437634332196n\",\n  \"1047157723497573338n\",\n  \"28285154322504134404521941699n\",\n  \"56070279326493931276099147353n\",\n  \"1647252454052220783n\",\n  \"65027676769817342180184568252n\",\n  \"12685362344487350979600199772n\",\n  \"1402500493179000567n\",\n  \"12668630001282077875777731433n\",\n  \"55553251572483079593258301341n\",\n  \"2382205981458202111n\",\n  \"50473524893888759380289559496n\",\n  \"52220217290909756763540198313n\",\n  \"2029638412495399688n\",\n  \"7502774623130712545083224028n\",\n  \"73425515727643581896824036686n\",\n  \"2771702310825972693n\",\n  \"4639820922586718498241340517n\",\n  \"46582679696898380484679332702n\",\n  \"2620580077787400940n\",\n  \"51782105270520932573551959292n\",\n  \"74517889523497564960562458357n\",\n  \"79055126752843995n\",\n  \"10925640711936519280913334701n\",\n  \"11947058347966705959371810733n\",\n  \"43716694970268491n\",\n  \"35453676805113974113471109604n\",\n  \"12015889727201641553493717139n\",\n  \"3275286259969106630n\",\n  \"70932279409438704808566723573n\",\n  \"47041530965489511382629531879n\",\n  \"1256401409005218192n\",\n  \"46895749660336733332848035754n\",\n  \"40261009687444665011442182710n\",\n  \"1306436215925446460n\",\n  \"3904962902077066763622365736n\",\n  \"36103992387013546339910627073n\",\n  \"1329335481346702678n\",\n  \"57853677844329075763360620729n\",\n  \"61001619991056325367390311148n\",\n  \"1235032555631976826n\",\n  \"58692146235938833274542664790n\",\n  \"14589363842493324627243766856n\",\n  \"578262325105051129n\",\n  \"37980379958779218087580100271n\",\n  \"57690546822788520479506631792n\",\n  \"3164185857728705638n\",\n  \"45598806448478931852264970697n\",\n  \"29033375842093843451718686864n\",\n  \"2812217528418815016n\",\n  \"9663261157782365056384592697n\",\n  \"44620211458433011608252253672n\",\n  \"2505651240889113840n\",\n  \"48502340833312690180905327065n\",\n  \"9352266604910376416980234379n\",\n  \"3341395763378874957n\",\n  \"35507650777754495555508745994n\",\n  \"64550352482963692428938364344n\",\n  \"1749731610964724298n\",\n  \"72801722493214401326730125326n\",\n  \"55956888553336351398608259633n\",\n  \"896001678647446033n\",\n  \"30516385505393014949750902877n\",\n  \"47315718952109319710441627150n\",\n  \"1388483706936013349n\",\n  \"32381991427814516368016795653n\",\n  \"59696292811917044385937202833n\",\n  \"618914335291991958n\",\n  \"40375787626773409929606022175n\",\n  \"64734613933900308276892757597n\",\n  \"2556069305521992095n\",\n  \"58654528682801174800851099376n\",\n  \"11593522535604870003716248394n\",\n  \"2125230714317219300n\",\n  \"8061995955571015171488513388n\",\n  \"47983447012081651413970228934n\",\n  \"855542739847145422n\",\n  \"59096469339608638609245068515n\",\n  \"7673808125695463322887566290n\",\n  \"1385253448294382073n\",\n  \"25340909062918393540888464015n\",\n  \"9795256553635962173776771050n\",\n  \"3012016973098277348n\",\n  \"33467611330524938973631050712n\",\n  \"7543431037219165063475505539n\",\n  \"448151223182465539n\",\n  \"22750106248651778926545160954n\",\n  \"25740569688692303261800730858n\",\n  \"1075240126364963450n\",\n  \"56338203997489686691769068850n\",\n  \"62119360873725897456686490753n\",\n  \"1222146081347045140n\",\n  \"27338323756657113133884361560n\",\n  \"21141429927442113006964516579n\",\n  \"462132336382397961n\",\n  \"4987343640321990641559943818n\",\n  \"58829032105334349895296634715n\",\n  \"3177465831253470688n\",\n  \"69096263705896112247403554129n\",\n  \"29492604434954899550510960365n\",\n  \"304239915265350366n\",\n  \"66375851691134826136210085333n\",\n  \"44757375154942980538763091305n\",\n  \"1112855489475878924n\",\n  \"70069037784938962740775503666n\",\n  \"12717652252841341839220495543n\",\n  \"2918096944668928835n\",\n  \"18321962109897171704378960368n\",\n  \"61813672462196073792006627549n\",\n  \"2734946711892636188n\",\n  \"64219561440442257822526755189n\",\n  \"8503031322535266331858567242n\",\n  \"3223902208326320319n\",\n  \"63116174136664698830215774786n\",\n  \"2759322304337380924973025029n\",\n  \"810068357014304774n\",\n  \"15698684552711747426349376896n\",\n  \"65762055793295617462571353752n\",\n  \"518270689795187122n\",\n  \"58150828468103287645001826637n\",\n  \"77452960139151639571846482697n\",\n  \"519559051146038460n\",\n  \"72625801975239649642036163890n\",\n  \"39078044248618521225250269350n\",\n  \"2190524057325078928n\",\n  \"27770888055874136986828633484n\",\n  \"41773083279140557423975570256n\",\n  \"2854828164966176931n\",\n  \"627836434493841003902237785n\",\n  \"77928664588771202997039373627n\",\n  \"330865869276931200n\",\n  \"52935592469577214913105764520n\",\n  \"20197659873511917804524429378n\",\n  \"2125370194946441846n\",\n  \"3460074836406938711660958301n\",\n  \"52820564261229479633548811299n\",\n  \"2919129481241566745n\",\n  \"6675772908450017734753351305n\",\n  \"65258735248680451317985314824n\",\n  \"2950671717077079181n\",\n  \"6822322071311459654365919975n\",\n  \"48497518547901827883287152419n\",\n  \"3243229764836791767n\",\n  \"72937532385990220357716354648n\",\n  \"19074513737405788027838151006n\",\n  \"1297437039234841476n\",\n  \"75502921753638151385835217223n\",\n  \"15306268504859852745422227938n\",\n  \"3143438951510181753n\",\n  \"3947335170074803838440311819n\",\n  \"62699530989773040321915910090n\",\n  \"3215975868729087991n\",\n  \"45236352461588188769215285451n\",\n  \"41706782526887442329166221445n\",\n  \"3168773580470738009n\",\n  \"75285535419605148224367004655n\",\n  \"20481966054007305592119557920n\",\n  \"1679995277184070400n\",\n  \"45190873120635261257451746066n\",\n  \"47696678647110719375889237738n\",\n  \"2068610507691385147n\",\n  \"9915927934978371252308896949n\",\n  \"31159305954355174048281405375n\",\n  \"1704598723840881213n\",\n  \"67338469563962359211325034773n\",\n  \"41738724864530875640824663606n\",\n  \"2293929193371443079n\",\n  \"34807312716413150046069343319n\",\n  \"70801066094208025212394559646n\",\n  \"2518515824100660756n\",\n  \"76811947889156401932764711781n\",\n  \"43817729339652461426643528955n\",\n  \"2039489180470709457n\",\n  \"38477432026452102589204844897n\",\n  \"27527167249603525516926315406n\",\n  \"1191468099071291308n\",\n  \"38041851156661687253492123536n\",\n  \"54288163040365572080441140556n\",\n  \"911480122138689106n\",\n  \"4974069079367885339264267782n\",\n  \"28880616750574662115261710630n\",\n  \"2834730446537796035n\",\n  \"55466841778289154595312506036n\",\n  \"47524577058256910308968549882n\",\n  \"351449977223840700n\",\n  \"62311990134227217524354071274n\",\n  \"75586193885025429015569590193n\",\n  \"545412183548073756n\",\n  \"79201290258654825630711427638n\",\n  \"77524373992410852423354047680n\",\n  \"552010389188782621n\",\n  \"13584773290145166716045719634n\",\n  \"57089761411485171751249424952n\",\n  \"1694608384682621747n\",\n  \"29538886750825184946212760314n\",\n  \"63894150012954354476012028271n\",\n  \"381542434687157486n\",\n  \"18078760560177937565267140464n\",\n  \"74003801426748288272147648907n\",\n  \"42337564080893923n\",\n  \"76689566315090503029029632865n\",\n  \"77474971819185712518886624915n\",\n  \"372114354534855369n\",\n  \"3011898200892081576513307862n\",\n  \"13966070005688554503624007786n\",\n  \"470413759528293312n\",\n  \"39357561183949775040925825237n\",\n  \"70682164693568724918268906963n\",\n  \"1376182782398783885n\",\n  \"41538213381429219620578361408n\",\n  \"42254768852299863792709628627n\",\n  \"3431309948863311296n\",\n  \"29234390314689913487082552719n\",\n  \"17916853178952663417328241903n\",\n  \"669291203853282419n\",\n  \"33249562629014821971547667642n\",\n  \"26222791431277453980835687680n\",\n  \"98534970627714358n\",\n  \"25021648199838864664290068537n\",\n  \"20665859250814395210947344246n\",\n  \"662389299694120248n\",\n  \"72307113898419621240789872204n\",\n  \"46323053668872253004980165076n\",\n  \"1041999687571616075n\",\n  \"8985042666921921648283132643n\",\n  \"74513886773734802806022422301n\",\n  \"2603455779145809119n\",\n  \"15411135359682619522278947280n\",\n  \"27784420314858949438220006926n\",\n  \"450671277926568052n\",\n  \"2831173742809690598851605179n\",\n  \"28386483802658122108161613621n\",\n  \"1424370976519373932n\",\n  \"31198231619878444700423211860n\",\n  \"42295311569311653123964908500n\",\n  \"2935759999014605210n\",\n  \"32001363507887263736668102660n\",\n  \"46912833713119636774180995741n\",\n  \"2092237369418424823n\",\n  \"78656477190391127646333527543n\",\n  \"41056006364555863740114989146n\",\n  \"2171263570612200061n\",\n  \"21422129487009930658303224502n\",\n  \"46206308103083011878154386775n\",\n  \"1874554378158482533n\",\n  \"36641496950703925635911572554n\",\n  \"48432166499307362117455688176n\",\n  \"362387825758837904n\",\n  \"27092632894596570716463916204n\",\n  \"20108561967338242154648349930n\",\n  \"1880193076762165445n\",\n  \"9593372273263129574197363679n\",\n  \"48018078028931030587694756618n\",\n  \"542974594247287387n\",\n  \"14814551631877080383283532261n\",\n  \"33496168748765220079451008919n\",\n  \"2250598863496646490n\",\n  \"44869586855816636221572912809n\",\n  \"41783360501362407212785286614n\",\n  \"2362538758680925884n\",\n  \"47048981182078605465642165702n\",\n  \"60518795030556750835816928982n\",\n  \"505511636936241905n\",\n  \"58024262056741504028876642662n\",\n  \"50138980925793649225004896980n\",\n  \"2579777888438614723n\",\n  \"6523114729709277602770738046n\",\n  \"28358393151053570058817793343n\",\n  \"3081381986289034984n\",\n  \"15900191280315068679181663660n\",\n  \"48577168032374944428952731072n\",\n  \"830974214184407623n\",\n  \"10274561196236136318135959057n\",\n  \"26148664358554534185218032007n\",\n  \"201377610767670386n\",\n  \"11368406426935765376362633788n\",\n  \"4122436782704069458424072833n\",\n  \"2934079973878820714n\",\n  \"66892750247258968804173976659n\",\n  \"76380379537218876441475920731n\",\n  \"3380019238411335234n\",\n  \"50717224916942478279258173891n\",\n  \"44470393688322556765105136550n\",\n  \"1813355330674964836n\",\n  \"8515532742277261388949469229n\",\n  \"33221912074775270762895168327n\",\n  \"2646766706385940242n\",\n  \"11140136119772415355412357379n\",\n  \"44150773111766484868566388647n\",\n  \"3191354614138223649n\",\n  \"30708778779429297397760149496n\",\n  \"67837687252340085721524474101n\",\n  \"3301367800510383551n\",\n  \"10954599956402707572521260184n\",\n  \"21030000566064580489911242942n\",\n  \"1828905939385555740n\",\n  \"26254579696623038244113820321n\",\n  \"76089322519690535032690356215n\",\n  \"868757520992376209n\",\n  \"77540171332511416804096348278n\",\n  \"10474304059709005130776549459n\",\n  \"1665346113039180866n\",\n  \"77071906535707552468440337167n\",\n  \"76416817616469856915552001970n\",\n  \"2619908781683664602n\",\n  \"40713576015254467501617369989n\",\n  \"69174809057973808586596761660n\",\n  \"364462143474967775n\",\n  \"3388865641890523266901884229n\",\n  \"46510386965164679950611269041n\",\n  \"2868959718371388528n\",\n  \"38291153048032659818161082470n\",\n  \"57992998428591158266306092260n\",\n  \"2140250223970187383n\",\n  \"74674643030181299821451279762n\",\n  \"61603307939095484817637012597n\",\n  \"1805808601029218696n\",\n  \"37221838450591689221386319329n\",\n  \"68301391492878568825616976727n\",\n  \"2237000809794684762n\",\n  \"11407285364976644693945059208n\",\n  \"25348058182926100240298110509n\",\n  \"3114508241594272017n\",\n  \"75356748694855659604450932050n\",\n  \"73487079967561788811810515931n\",\n  \"1490776583857675442n\",\n  \"54218989991798315687885361450n\",\n  \"20703329376060767478344708910n\",\n  \"2199487792587152210n\",\n  \"75111061944546058209924381826n\",\n  \"59244444067541601191271416829n\",\n  \"1581429188013860604n\",\n  \"52660822561915117683975147831n\",\n  \"47783082248718407900747485302n\",\n  \"1369252091872015433n\",\n  \"36417458042350421490821725117n\",\n  \"31829247002542379610343848353n\",\n  \"455784377300586483n\",\n  \"16833465703461845689857266397n\",\n  \"71194569481351283884295739145n\",\n  \"3189866189053900612n\",\n  \"65858387085894768841721032786n\",\n  \"42191857983305827191840357582n\",\n  \"666015291493419098n\",\n  \"27916318777227697186981470587n\",\n  \"32438460617546390776125662122n\",\n  \"3438854808891043135n\",\n  \"41197663088738641800559183911n\",\n  \"55140791537758229983041465056n\",\n  \"1162917064515090408n\",\n  \"59276808448795540978821008029n\",\n  \"55346073844723874343240998585n\",\n  \"2138546228419844587n\",\n  \"29861692804477614266603259375n\",\n  \"46434932953097909216915612814n\",\n  \"2786750119186865986n\",\n  \"2914382294411148824195592597n\",\n  \"47257202751523172671381039762n\",\n  \"108099711483611500n\",\n  \"42513194204119630092428609239n\",\n  \"7009779828784113435151735800n\",\n  \"1568976973765903017n\",\n  \"74506942497632859791810397801n\",\n  \"75159716442684547730197176733n\",\n  \"214522106108977303n\",\n  \"307807623661151452830127704n\",\n  \"69355418870826927485148435899n\",\n  \"1716229337114513433n\",\n  \"57800790680731912804700220994n\",\n  \"33865695886637783077735975519n\",\n  \"1521543041885052952n\",\n  \"61900084065708307372472439490n\",\n  \"9670136848396954396035168772n\",\n  \"705486756697563485n\",\n  \"65695693080875904861430309269n\",\n  \"42258749277647240519914054375n\",\n  \"1610937183743514752n\",\n  \"45949364456230722028956610312n\",\n  \"71318597512050155765983898976n\",\n  \"1419180020927833749n\",\n  \"16722582418318977044812304850n\",\n  \"64520646005354913944304541442n\",\n  \"1349757657977694032n\",\n  \"23453477023590312415905476662n\",\n  \"20988708348761074914346191082n\",\n  \"2734679321361253617n\",\n  \"3531335181910221180679210683n\",\n  \"77069908679139173478778593856n\",\n  \"3209489805214655859n\",\n  \"15423046625290420432194363954n\",\n  \"66544315732344216335597482829n\",\n  \"3417056483929987132n\",\n  \"23412416307661786237706973063n\",\n  \"52684903097691240819445939916n\",\n  \"3087013127443362602n\",\n  \"59516131369415164617233433764n\",\n  \"22552284363447521404574779744n\",\n  \"440598570727652332n\",\n  \"10078101871820643773664346515n\",\n  \"53180025648864462561753056892n\",\n  \"1238481677425258091n\",\n  \"66978851386839209947975732205n\",\n  \"76469976691658858609518100317n\",\n  \"2669015410315668427n\",\n  \"10462115063986428235746660388n\",\n  \"20612418707380044137824607138n\",\n  \"913149152876393845n\",\n  \"12896643578852573199148249630n\",\n  \"65916513826164228515537693476n\",\n  \"1689818392090951394n\",\n  \"48812924094784749209418690439n\",\n  \"21075229147504768099245857693n\",\n  \"2023634641390620097n\",\n  \"46841988916092209879920999223n\",\n  \"16626325630569367486087793088n\",\n  \"2520424161966279659n\",\n  \"66590657955425334169984583445n\",\n  \"43137455439307899619378709852n\",\n  \"119691013666955759n\",\n  \"59528138117541221723219264069n\",\n  \"6039238025418276887251147184n\",\n  \"1423016249189720303n\",\n  \"74476981597135756778074726485n\",\n  \"57871369440317946035711890073n\",\n  \"1799738956519083373n\",\n  \"61169922085945703273845146359n\",\n  \"58536191609701145724674103544n\",\n  \"678581665969651580n\",\n  \"29756753901276156089801861773n\",\n  \"37715386191992628222582900313n\",\n  \"1839293100231634062n\",\n  \"8545730587160341404066690935n\",\n  \"73310320371102040457790413928n\",\n  \"2943087579162219865n\",\n  \"3592679410576312851945554995n\",\n  \"63768122222562308688415150519n\",\n  \"2852416365710961566n\",\n  \"65734466853903663026216615808n\",\n  \"75611388663630224651662180524n\",\n  \"3082245111526479768n\",\n  \"42542028447397082553823280434n\",\n  \"15266201170439359558184400250n\",\n  \"2959319188559780389n\",\n  \"62084872176674708014188872797n\",\n  \"49471685826369556510350964812n\",\n  \"3044342635568692521n\",\n  \"52766810402300947123818998320n\",\n  \"57464266928926410524441305379n\",\n  \"2678492530248725715n\",\n  \"63759940946573266111589745544n\",\n  \"1239422070074535035165804970n\",\n  \"3011362073292317527n\",\n  \"5312425357216197805891517417n\",\n  \"8604490350019536611169668726n\",\n  \"1278264119461231226n\",\n  \"23413740732153092734953046582n\",\n  \"2351234330786062681522357509n\",\n  \"3063446156461791539n\",\n  \"31192263866697541487222909336n\",\n  \"53213425910476786883061415945n\",\n  \"3388535254355309510n\",\n  \"76222049202953784940228041093n\",\n  \"8232814450668299001215927167n\",\n  \"1010418058221874517n\",\n  \"30375045069912390061370886372n\",\n  \"76858962311200653420966476141n\",\n  \"2531834595530804919n\",\n  \"72838406196796824316965387556n\",\n  \"16107338032535514271932130242n\",\n  \"826038058455425888n\",\n  \"74047817357615679402104886971n\",\n  \"66250974048331219261305648117n\",\n  \"515372630941459652n\",\n  \"49140383045734318581810247391n\",\n  \"38552127106329617678305826510n\",\n  \"1791730195926210707n\",\n  \"20447547859709794457924179129n\",\n  \"52480964595913357482998508931n\",\n  \"419726983098458687n\",\n  \"20434453705733747059793719688n\",\n  \"22732218969594988459804019164n\",\n  \"721740589738128975n\",\n  \"63178390467425871623450374916n\",\n  \"58781628951232066578669558088n\",\n  \"1366096141210552719n\",\n  \"30310055907701667442250131224n\",\n  \"77693499391068805405178198648n\",\n  \"2419127900721456602n\",\n  \"72238281634987295743046110639n\",\n  \"2759706666093555363424148875n\",\n  \"2871042634310332424n\",\n  \"58186331935313172107712023092n\",\n  \"73009408672165436946758189888n\",\n  \"1138172672402058824n\",\n  \"45794206921224716587506811973n\",\n  \"50074044364882080121299615241n\",\n  \"201200847748951804n\",\n  \"41753381957343686084038148154n\",\n  \"16651255916405576823960096368n\",\n  \"744771251876887027n\",\n  \"6397253273640502791149864078n\",\n  \"67730045189242272443620838555n\",\n  \"2723512022810421168n\",\n  \"20403399159094844095476748628n\",\n  \"46114852246774129546878110205n\",\n  \"2163837250026966482n\",\n  \"63507059223060953171650485733n\",\n  \"27872394523028449929373211791n\",\n  \"1266384674015277092n\",\n  \"31341532803878701385180273244n\",\n  \"56274201404580685976997533743n\",\n  \"431470279371342601n\",\n  \"27146401285505116697408502780n\",\n  \"10909809704395711896795601995n\",\n  \"823727347575104764n\",\n  \"78157451508256479551851793287n\",\n  \"7934224114897115965586132150n\",\n  \"2561622534344592225n\",\n  \"52031374290403822978799313483n\",\n  \"75680335637831520600351100052n\",\n  \"2240257882085839580n\",\n  \"35818819658139744996071875447n\",\n  \"62532608351434239965548606901n\",\n  \"2997209098633992908n\",\n  \"35801460645260708494826382933n\",\n  \"6962199370752725968726753829n\",\n  \"471191881884558376n\",\n  \"51494347593311565178389849721n\",\n  \"27959136057874496572927068138n\",\n  \"2054885609386822401n\",\n  \"1903400454085938493722464234n\",\n  \"58252527737465224754126905441n\",\n  \"871049256780466220n\",\n  \"62266126172301828292957015888n\",\n  \"29942402306346798464030870789n\",\n  \"2439682690873113741n\",\n  \"58828716449315637847726991566n\",\n  \"33586884830050665361484057496n\",\n  \"1850240284198082738n\",\n  \"57256720773892932068692318575n\",\n  \"43906884659388043006991040937n\",\n  \"2567264210368699586n\",\n  \"37303325532466691611774319975n\",\n  \"1023775330119159065320215646n\",\n  \"2970467943548704391n\",\n  \"6719369853840095911284134964n\",\n  \"52698184868933442534169228704n\",\n  \"1590449702912303791n\",\n  \"9163234315649800019839577781n\",\n  \"5096786077915756093838027866n\",\n  \"2604014912333559946n\",\n  \"22626562141910724736547894073n\",\n  \"1221514787490597839172086118n\",\n  \"2021859363658276538n\",\n  \"29343228808229785648243946635n\",\n  \"17107161597392558070179986947n\",\n  \"2142074198041769333n\",\n  \"8295437982000203433981112803n\",\n  \"32281278698888589789154221048n\",\n  \"2261976931796110908n\",\n  \"19003064635652370381400548000n\",\n  \"5388386401569756312458644562n\",\n  \"3154333183807592746n\",\n  \"57635002029571841636737463711n\",\n  \"56991897992879623406006006725n\",\n  \"2842694143682003853n\",\n  \"73379904593405458046663259580n\",\n  \"839437272553377608023038726n\",\n  \"3093165198442302924n\",\n  \"33419448607193509624332386145n\",\n  \"16740311080067952025303937955n\",\n  \"666860562806181637n\",\n  \"8797571923563716660075774195n\",\n  \"75022438860744435659585766685n\",\n  \"1558560135470851650n\",\n  \"19713896344694960627284542368n\",\n  \"78388507052884523368130573724n\",\n  \"411547793569600371n\",\n  \"52610184319591489722152436723n\",\n  \"58886726417514761894083084350n\",\n  \"779286101129650524n\",\n  \"30697463792187334469128124748n\",\n  \"76836636996796091386778801556n\",\n  \"868461342532092659n\",\n  \"69910862714025895807766899173n\",\n  \"51405542117679167872600082463n\",\n  \"349470313771420560n\",\n  \"71284241241602654693194940143n\",\n  \"7305568034139166589777830792n\",\n  \"2498747200591008033n\",\n  \"67960797371315801691053786599n\",\n  \"25825479627169106615506743060n\",\n  \"454178144016317938n\",\n  \"35798135180239958015829265626n\",\n  \"23385623537498663178814541991n\",\n  \"1668508428339305051n\",\n  \"15450665342638866022354076708n\",\n  \"1590106122468359708599592949n\",\n  \"209939085635224246n\",\n  \"45146454297276439294547281947n\",\n  \"71363197518122470395685282523n\",\n  \"209021609080779353n\",\n  \"37805135405124328919729060254n\",\n  \"46916624974206570529290830921n\",\n  \"848835529094356500n\",\n  \"52127928532313726409293511873n\",\n  \"74341195298303002847160668677n\",\n  \"2836594795507658600n\",\n  \"21372610848069974970714546381n\",\n  \"47095482837411596424060733004n\",\n  \"2644188767312235257n\",\n  \"42696308717032907609441318200n\",\n  \"71478263091865254540527492446n\",\n  \"580612364877252066n\",\n  \"24227503011457277739411398472n\",\n  \"46210588161299166961443583909n\",\n  \"2104513243231016467n\",\n  \"38286987706753654842254500763n\",\n  \"52819390378718994903041839288n\",\n  \"2559971158277261662n\",\n  \"10804049422689166087510960068n\",\n  \"78494177681671393465658693075n\",\n  \"14482037543685577n\",\n  \"45316386224024264714051962520n\",\n  \"8077236619578691823690243326n\",\n  \"3134255926280338435n\",\n  \"58234835865881258067775424985n\",\n  \"32582539715376623121568222400n\",\n  \"895535831771370236n\",\n  \"70554522419104669983576590653n\",\n  \"40229753450332894247180991320n\",\n  \"3235640053820685715n\",\n  \"20050852574591066448348962700n\",\n  \"63154847355271958325521981335n\",\n  \"467978477141038832n\",\n  \"23115494614834363321936638302n\",\n  \"54275477858894789534235120579n\",\n  \"1729059077109549892n\",\n  \"2643222253937861530223901503n\",\n  \"4343013099917093534712467976n\",\n  \"2093250350291324334n\",\n  \"26606380640809280595919467519n\",\n  \"24158225122809122341718478436n\",\n  \"384623299034698779n\",\n  \"74889164947469453919523854509n\",\n  \"57684567535195905731154589750n\",\n  \"1155881533367487150n\",\n  \"40449699793338258794390721810n\",\n  \"45563605053974069206983967932n\",\n  \"1493349482130193926n\",\n  \"53198779688378832727006250273n\",\n  \"23250105681044235044335219173n\",\n  \"1649629209531042678n\",\n  \"31842301972458791163037611310n\",\n  \"54103172956148923849538705604n\",\n  \"1853082006782289707n\",\n  \"73283134292642541157328722326n\",\n  \"60011977393637178105550407258n\",\n  \"2931499730502310317n\",\n  \"30363774768400601902892824896n\",\n  \"69784527858977659878014965306n\",\n  \"2699700013359551525n\",\n  \"30143876784681103984444940141n\",\n  \"20508010382725323248422071352n\",\n  \"1472036335205806581n\",\n  \"72685268086241841913630448820n\",\n  \"13484287640917155024759235656n\",\n  \"421919482836501604n\",\n  \"58336665028159633068676496150n\",\n  \"37899530871095451514688032059n\",\n  \"830925861824953119n\",\n  \"25034909887778048695729760495n\",\n  \"6186382813048747659882138994n\",\n  \"928295656744287075n\",\n  \"23742999482526473077193706109n\",\n  \"38681524762823880972818454723n\",\n  \"1037267958137901699n\",\n  \"75848820697595803231237834330n\",\n  \"4098133930661194465828731453n\",\n  \"2484592940588499869n\",\n  \"45229057029317220478111498771n\",\n  \"55686910073377115986537207556n\",\n  \"2974592459022975650n\",\n  \"9058824958434584730691471305n\",\n  \"3489502058924586487278999515n\",\n  \"1985538445731248079n\",\n  \"14034347138268021040571737620n\",\n  \"22094509985004128313979725457n\",\n  \"1321434542301391881n\",\n  \"17216019289274156022312124782n\",\n  \"65908201923726532456265422977n\",\n  \"387610774042169114n\",\n  \"29699496552150641100894659868n\",\n  \"43552700176683532671663646633n\",\n  \"305525895851406027n\",\n  \"62068283835877161864738460092n\",\n  \"66163022436031594737849199513n\",\n  \"1671489056967612477n\",\n  \"5806077789744302022830084009n\",\n  \"22126371298319875265318066168n\",\n  \"2973075530852635513n\",\n  \"43508686549770752780288409207n\",\n  \"39960107195405145189624452517n\",\n  \"3021227579398645734n\",\n  \"75958919635020929694389722957n\",\n  \"14913897636015670404185010029n\",\n  \"2882183092458315590n\",\n  \"24239404766805006701421172975n\",\n  \"69450551382041986033230454197n\",\n  \"629979785699424851n\",\n  \"47715312965767193925496266564n\",\n  \"51328287208106789864582031889n\",\n  \"1994694450268216917n\",\n  \"12878968128402785600925987432n\",\n  \"8892728961399753099629106451n\",\n  \"2189564568474803348n\",\n  \"17841277261874434955985363634n\",\n  \"23255802008382153152915838079n\",\n  \"1299631183736247307n\",\n  \"70369295004394220674262548695n\",\n  \"41703500013750845131767430551n\",\n  \"2515279718642012557n\",\n  \"29363803518729226252949864837n\",\n  \"11941978972714945652777612780n\",\n  \"1864444849178365249n\",\n  \"19838910496936353855554382505n\",\n  \"63526654617675483693289584781n\",\n  \"1386561621225388054n\",\n  \"37964054821976413036136417123n\",\n  \"14531042297004730862055294756n\",\n  \"1592174811323575228n\",\n  \"17025415710900400219439375060n\",\n  \"362574756192905655380951625n\",\n  \"186982663000383695n\",\n  \"75302946272320992428390907104n\",\n  \"76356571252613340602107695667n\",\n  \"1005406788214614232n\",\n  \"58429545482092547095478867066n\",\n  \"8783598735519438107774246954n\",\n  \"3449009450489856852n\",\n  \"52421244757199560525245430831n\",\n  \"36745113142356116864221402917n\",\n  \"2011028989323540641n\",\n  \"52389389340233786555192956059n\",\n  \"48540948198567585375080843793n\",\n  \"2511738896308209966n\",\n  \"62948973448903767233283645427n\",\n  \"78581731009485419534613750974n\",\n  \"2631249803991736511n\",\n  \"15700178914629731044995270252n\",\n  \"21825209006850516132399941848n\",\n  \"469426094359884098n\",\n  \"45109950384963150442992909517n\",\n  \"34709270486045260410251674804n\",\n  \"3227700636384978310n\",\n  \"59508455528169337110518969046n\",\n  \"7626842288771897454076798332n\",\n  \"2837142952242233831n\",\n  \"78154898100541067453790359715n\",\n  \"28712940925290532622010374032n\",\n  \"2005548120880216529n\",\n  \"19676819626842762742496321363n\",\n  \"21494888704510312646126358022n\",\n  \"1917432403713999314n\",\n  \"35348767509581898437000853095n\",\n  \"54404372638473474714277538548n\",\n  \"1418295384476104455n\",\n  \"2087534038039694873601959364n\",\n  \"55492416744530703076122435501n\",\n  \"3415979290873032604n\",\n  \"77874081666239317555289078970n\",\n  \"64693269821438151662321973074n\",\n  \"468500022203866114n\",\n  \"52183552801284363909457374676n\",\n  \"26386627404911694711966206173n\",\n  \"849932193222808822n\",\n  \"60880246718709527470179169635n\",\n  \"73275749658065911543659109078n\",\n  \"2835936826164075331n\",\n  \"47034978948350796174151388655n\",\n  \"71774550150782116132727222082n\",\n  \"2957236831646338670n\",\n  \"63121833886036603562738575495n\",\n  \"23473953357667857038757232396n\",\n  \"709268300106945760n\",\n  \"67565011137450891785645904255n\",\n  \"24476510070022540670394808047n\",\n  \"2197500443692989620n\",\n  \"59529365216756814354926446285n\",\n  \"62380286296544401614193824725n\",\n  \"1797665767653557658n\",\n  \"65352576236492901270647039868n\",\n  \"54007112892683927216806385747n\",\n  \"1796075374294915397n\",\n  \"17840563634584466359434584144n\",\n  \"46203718678613515530978507404n\",\n  \"702053810505193011n\",\n  \"6133701316708198581434709723n\",\n  \"61802938904865726983656435299n\",\n  \"3001276128418418514n\",\n  \"11649452974115692944272358953n\",\n  \"18473964874994391830987882986n\",\n  \"2086271034138195481n\",\n  \"27934361651981769617523547350n\",\n  \"75412934231387879572695859186n\",\n  \"461672875728163553n\",\n  \"2659961698397651286244898268n\",\n  \"38244585026297070186059616261n\",\n  \"3371488902807027695n\",\n  \"16205200667874612181106188684n\",\n  \"6520317333544879950114099734n\",\n  \"2490923463723046056n\",\n  \"66034343348095027053141749239n\",\n  \"13522171761978136875076440765n\",\n  \"211626548808403729n\",\n  \"52060409492746050106971031742n\",\n  \"3493375676170587510122635686n\",\n  \"3394236868158496257n\",\n  \"47140116537527183288446191137n\",\n  \"26402419994251877186703235784n\",\n  \"2932509761218506683n\",\n  \"41718577718458247425998327137n\",\n  \"72444125720253366875907105723n\",\n  \"2370720516004120360n\",\n  \"63763546849180341189837833587n\",\n  \"56383249669741657007269755446n\",\n  \"2772609748811855948n\",\n  \"30673155381064993958540435457n\",\n  \"58923421149810821122915571284n\",\n  \"2826147464537959677n\",\n  \"2437524155719427333248486827n\",\n  \"13523745438577697843652059309n\",\n  \"2255306498837633258n\",\n  \"66617913651732723895666550762n\",\n  \"800383901932656375981050324n\",\n  \"2369057816442019000n\",\n  \"53894023794388536556779913700n\",\n  \"43633381247568199322500578225n\",\n  \"1622058361920748072n\",\n  \"31610597297695602711187104065n\",\n  \"75047413064993937787913175675n\",\n  \"2532518357458277794n\",\n  \"66943196821272189971919216455n\",\n  \"63057632269388325855862697967n\",\n  \"252919094746701796n\",\n  \"36093617934864267028615495215n\",\n  \"2458297172936844284200172721n\",\n  \"2861973034148611365n\",\n  \"35639326827089764975324431609n\",\n  \"42790455257345625520833632516n\",\n  \"2416491183110698117n\",\n  \"25453911219236829571892475695n\",\n  \"7792114184406477060828720050n\",\n  \"3256395018257219594n\",\n  \"44446878573785568457717214835n\",\n  \"31316823799089969829944488381n\",\n  \"3348254446631709920n\",\n  \"12075675278480009463346998871n\",\n  \"33336621394122897171138216323n\",\n  \"1761645290764169692n\",\n  \"38936491179522097211601163974n\",\n  \"40756936871275705147530952481n\",\n  \"2239620312855528769n\",\n  \"66166234417862875439766591001n\",\n  \"45961753617942718644070346235n\",\n  \"2545432639028408432n\",\n  \"27071931775260190706961952445n\",\n  \"16791652622063002274074642172n\",\n  \"1351810600008793720n\",\n  \"8734604468994364132650578395n\",\n  \"2915643774972349972943503710n\",\n  \"546123555763251031n\",\n  \"40883390215425903758829895197n\",\n  \"46075188532687982090196339471n\",\n  \"2037883374560027081n\",\n  \"1788529744899075811496881871n\",\n  \"22977601030754581206369105722n\",\n  \"2052641684479223112n\",\n  \"52403270166627919005596848880n\",\n  \"2330881363722503207702297453n\",\n  \"1950506519094245230n\",\n  \"26974012086112717010353138814n\",\n  \"69257122863702421096680142186n\",\n  \"731421312124744837n\",\n  \"31069884618093040515903738825n\",\n  \"64922032296511662760139295040n\",\n  \"2654253976131730717n\",\n  \"12166944124292618925625599356n\",\n  \"59407826445782768214824917874n\",\n  \"354147487414166550n\",\n  \"74336686733791433900827528675n\",\n  \"12704634481538804742936579229n\",\n  \"2082676564717138885n\",\n  \"190n\",\n  \"58146038485323707171566360552n\",\n  \"79083051845830931429793398812n\",\n  \"1253760413372422709n\",\n  \"75585805608841426332286895315n\",\n  \"17454071065969374047751520578n\",\n  \"1856801283221000835n\",\n  \"56347371123082155623989904211n\",\n  \"52625756897582785946932954415n\",\n  \"1103484556810393055n\",\n  \"27404185422829405492475499818n\",\n  \"1419552461670775323662566720n\",\n  \"3431535685290297040n\",\n  \"10240761959601706862708901917n\",\n  \"71665724585200281475617327049n\",\n  \"3232798557396947874n\",\n  \"32919536142170844080265894843n\",\n  \"27634787910238436631971547080n\",\n  \"689759514785002741n\",\n  \"15431349741815244232301206308n\",\n  \"53845586976664022319541168221n\",\n  \"1583044030122302208n\",\n  \"47825067986735618489429772434n\",\n  \"36933954632637013701382915058n\",\n  \"2061889715878943774n\",\n  \"8977310916259261225384223331n\",\n  \"4538091340276567216050541897n\",\n  \"2974949937804520552n\",\n  \"32068898197860866225864499204n\",\n  \"11944297794698583544272156441n\",\n  \"1942470514051769102n\",\n  \"16232887649510996786606289763n\",\n  \"15259493580801814760566477085n\",\n  \"522617557584553779n\",\n  \"24242596953798418019519661501n\",\n  \"34675681500323328218631423377n\",\n  \"2626688210475495912n\",\n  \"78740174483351451096333088791n\",\n  \"64943981386376195937910130384n\",\n  \"3002553261633376435n\",\n  \"71321212497283823630152857278n\",\n  \"57107096638064759035770959417n\",\n  \"1525415424337039994n\",\n  \"33592124231316161392746859369n\",\n  \"66360389043497290172485164153n\",\n  \"169262401730913852n\",\n  \"67472003684398719335655699957n\",\n  \"16789521379035350190464748508n\",\n  \"2131762421966585515n\",\n  \"66631783199370161347508379926n\",\n  \"48925352076915955304942304087n\",\n  \"264237490291976243n\",\n  \"24342296347779296789258245457n\",\n  \"43293722801550027940585947288n\",\n  \"2184523999681911728n\",\n  \"9355802069694208050316076397n\",\n  \"35552089219631962733889470030n\",\n  \"3012875015446218241n\",\n  \"19749370490527515528697426175n\",\n  \"8078386931861545908004277048n\",\n  \"484548262348581637n\",\n  \"9197680845227051035593920301n\",\n  \"76678845496561933550816162785n\",\n  \"1006587369936993775n\",\n  \"16264558547638181301681301031n\",\n  \"77659436542602450682090346042n\",\n  \"2549030864566782064n\",\n  \"23992787444587661702047865121n\",\n  \"15283574111017964877795482274n\",\n  \"1010500590098381861n\",\n  \"36081283464794391834173091918n\",\n  \"74713339703559068643167768213n\",\n  \"87864425149724657n\",\n  \"15509755852767806607741504203n\",\n  \"49741860533707809781906740346n\",\n  \"2053665582944552662n\",\n  \"21800540003051693165872352300n\",\n  \"55295746887291089518396498874n\",\n  \"2979094345114374943n\",\n  \"11846584694067264521987247663n\",\n  \"49031890130314527277927146925n\",\n  \"3053072831928300240n\",\n  \"49870471347364999860446391462n\",\n  \"60351156120295649092916522340n\",\n  \"57434309920295622n\",\n  \"51905526990545292008889846168n\",\n  \"35741421582248014414699395252n\",\n  \"1021827240168947429n\",\n  \"16350288651927207676427341432n\",\n  \"48548588913627635520822500823n\",\n  \"2556960523655499318n\",\n  \"39061623507343320271115115845n\",\n  \"38947970321306063422821592330n\",\n  \"2525216560431056230n\",\n  \"65177147304893778229440396619n\",\n  \"70545257645069117487807391489n\",\n  \"1600567512488781231n\",\n  \"33331224951106722420313772928n\",\n  \"38583179480229318101782748287n\",\n  \"1817415503412264076n\",\n  \"43931562095456763346512920739n\",\n  \"45993143967557989986350621262n\",\n  \"1013785943641285390n\",\n  \"46300841465540867353476664678n\",\n  \"67952189225824325494911009881n\",\n  \"1883806626142505323n\",\n  \"74763953209711116608083413573n\",\n  \"73395076121267231351266442748n\",\n  \"875683814313975814n\",\n  \"23960570645093608799064342076n\",\n  \"36737884069061207609010160029n\",\n  \"2740282725978910539n\",\n  \"2348460868169339519816282219n\",\n  \"59294276502368234372728690209n\",\n  \"2234404830781012457n\",\n  \"29326696920519891523554164108n\",\n  \"46303855242526653100651128095n\",\n  \"1172546639486712237n\",\n  \"7729537530476375227332351839n\",\n  \"8564566731713324385055420531n\",\n  \"1479853701561506444n\",\n  \"22273291075577128615277532352n\",\n  \"73656828782504352218789556241n\",\n  \"2308987335794616316n\",\n  \"14359470620000928077518163171n\",\n  \"71961130737820208932903249274n\",\n  \"950707570385670728n\",\n  \"70317507071845790171587549310n\",\n  \"45654920344570326674633769038n\",\n  \"2650168593880186613n\",\n  \"45738429799101288017972815601n\",\n  \"43778890431815013310034329810n\",\n  \"312650173805915283n\",\n  \"59759032808483205201660512612n\",\n  \"49166445941564648520976910103n\",\n  \"575816160851551719n\",\n  \"41099033744600704768583815842n\",\n  \"67643677451426846496806534446n\",\n  \"2744110069990264553n\",\n  \"5427077521225540080527062818n\",\n  \"27591683040195514365023584328n\",\n  \"1814257385547611969n\",\n  \"43890769480671665778349573612n\",\n  \"25702107374475025393868297533n\",\n  \"2665391419850264467n\",\n  \"49173530067968024446609831742n\",\n  \"69233652337477869916623889471n\",\n  \"2973651385942905178n\",\n  \"39451576607205851507235401000n\",\n  \"65326357252788810888449550413n\",\n  \"2328241568819620138n\",\n  \"7187030532193362998811241838n\",\n  \"11158043907775193412625503465n\",\n  \"1887168135327759363n\",\n  \"72093988836508782933530929396n\",\n  \"59408618785876068844273516201n\",\n  \"1998979553140732738n\",\n  \"20436888483045692091969328934n\",\n  \"37236965238760796085670708990n\",\n  \"2982240668332065019n\",\n  \"45766566944201297703965941735n\",\n  \"33134417182815170607111134530n\",\n  \"2256938019969749699n\",\n  \"61095014957849456939456497149n\",\n  \"5166234805292214141604288719n\",\n  \"2223380807107784804n\",\n  \"4407612794594263685713471991n\",\n  \"27938927008707740784778705409n\",\n  \"889822472376617854n\",\n  \"10586000171735376465147370484n\",\n  \"11688046614136879282493614768n\",\n  \"1673899149118569188n\",\n  \"48568524626716983467820586640n\",\n  \"54066530547892129113282820943n\",\n  \"1257544179877250249n\",\n  \"70430239680893778037863498084n\",\n  \"67050853132645903854946409019n\",\n  \"2548118935751794404n\",\n  \"41828468840963319821789084190n\",\n  \"14275492751268414444663806553n\",\n  \"1784444490366165065n\",\n  \"61852018693496828660952117185n\",\n  \"48406002847831614907905133809n\",\n  \"49483591444929780n\",\n  \"54427537761720246076956183538n\",\n  \"41736602958902949490055768838n\",\n  \"1954646608479060360n\",\n  \"60934769075649772007484314209n\",\n  \"4723248530441409773201893998n\",\n  \"3259834508477438622n\",\n  \"16778379388406768302608844589n\",\n  \"14091941761246911672273283575n\",\n  \"1362843677097285540n\",\n  \"20990186444040307549583297890n\",\n  \"39850655248017325132808795637n\",\n  \"3159948251218994501n\",\n  \"22841250904644903266547583091n\",\n  \"35884470460139378173998471965n\",\n  \"144997960402386643n\",\n  \"73988342422211773824311060048n\",\n  \"25430193174058044426248161017n\",\n  \"1511499341976026028n\",\n  \"41856665278828717622897473021n\",\n  \"52430814625940772563313528979n\",\n  \"1518969462082050494n\",\n  \"42785280606159799076021378453n\",\n  \"75641406683588400312731571380n\",\n  \"354558010400584999n\",\n  \"25777665187274443426345962355n\",\n  \"52569759362487685340322204483n\",\n  \"2660707269990640271n\",\n  \"39456006642189286944561721406n\",\n  \"64095592448568371575360918624n\",\n  \"1623622008203944130n\",\n  \"42823981658558488340963830755n\",\n  \"70857240021552825619139550212n\",\n  \"3338694247115466605n\",\n  \"33528981497758066103123618956n\",\n  \"52174717566293432033940167575n\",\n  \"3285250213548536505n\",\n  \"49559726527714678923168862226n\",\n  \"35376383273863973001561075247n\",\n  \"1762388272055172875n\",\n  \"4963094059256542135804830802n\",\n  \"15251461935798611072932258838n\",\n  \"3043255521973128258n\",\n  \"23415022784844915519999589288n\",\n  \"59120161904093027011464662035n\",\n  \"2353807276882257604n\",\n  \"35355887041205290611693611623n\",\n  \"31669150297307261835976265040n\",\n  \"872891098273185795n\",\n  \"69193046798683036289275806803n\",\n  \"42818302823254546309613088130n\",\n  \"3225904969635087159n\",\n  \"22611614040816481524272701347n\",\n  \"40802292074751246948780577207n\",\n  \"351005661799852441n\",\n  \"50079803252014276007292589026n\",\n  \"37577116329374038939872244704n\",\n  \"745466466224739689n\",\n  \"57943789902740370489195854856n\",\n  \"59877164372411435705733535421n\",\n  \"1440407261307873910n\",\n  \"74147961838302268113193936081n\",\n  \"29475004529393168298384526566n\",\n  \"780455262674149785n\",\n  \"51306862863296749150663360555n\",\n  \"68603117787295236727112632820n\",\n  \"2702997921905430000n\",\n  \"64092864258708121960742058121n\",\n  \"27968741860257802705491575837n\",\n  \"3395033579182877453n\",\n  \"60896409955387219924723371046n\",\n  \"72447564289478669262616529078n\",\n  \"3397060291617780594n\",\n  \"74466337456436624238136742413n\",\n  \"67930138912822600973471222439n\",\n  \"631712168137915134n\",\n  \"34699941264140402915854806555n\",\n  \"31625108777123266428395503959n\",\n  \"662594291726250121n\",\n  \"10374418997762067141299032182n\",\n  \"74831531166323756923345310781n\",\n  \"2614948808475244069n\",\n  \"45617012767756761370444767987n\",\n  \"44141298692376594039790971629n\",\n  \"1159181502462992545n\",\n  \"47704071339495071156056567054n\",\n  \"46834594498992945383289148503n\",\n  \"924797511068572088n\",\n  \"23233351571238696045632767797n\",\n  \"14376771187481317319928510593n\",\n  \"3161389881302592208n\",\n  \"68221328884209068946490350230n\",\n  \"69520921081111912732122080295n\",\n  \"540294970059028553n\",\n  \"49382519270729084009739959234n\",\n  \"54272649767268320797552878520n\",\n  \"1762246401423958252n\",\n  \"65695480183764337135892820912n\",\n  \"15357314953562507969519535878n\",\n  \"2415017092301124519n\",\n  \"12568989548408666155318764896n\",\n  \"10255298595269749256814759758n\",\n  \"488040996573952383n\",\n  \"61804111086379855885098583520n\",\n  \"11271058357408383599116781502n\",\n  \"1329740533130250248n\",\n  \"8039933903881517002403963857n\",\n  \"7118558163468937314455208936n\",\n  \"536489202082349116n\",\n  \"57213159007120933607123362054n\",\n  \"38389263848304750695624289842n\",\n  \"103890218507147410n\",\n  \"44837586220950001446991442272n\",\n  \"51003826059731215073098356499n\",\n  \"1055564410899460745n\",\n  \"36382905285088913012495727205n\",\n  \"23789430840439822229827015138n\",\n  \"2409250954595470494n\",\n  \"77553161939176686247041732803n\",\n  \"32075777538535189410338696221n\",\n  \"308581509063990399n\",\n  \"75123827789249657112621112140n\",\n  \"63466606458376146979489895003n\",\n  \"1559915864837385203n\",\n  \"65374245818638483805981829412n\",\n  \"59413598642796928072211645702n\",\n  \"773792966334851501n\",\n  \"10975404188605698335218119359n\",\n  \"5937731821461360820250261750n\",\n  \"2424406683527655198n\",\n  \"58048034440511231692734658223n\",\n  \"38541497666142538814655959889n\",\n  \"97237747168756283n\",\n  \"32114431512100683707696744321n\",\n  \"43084884381938054868610618438n\",\n  \"53036606161489394n\",\n  \"49303822531142933183499847955n\",\n  \"70757204501375068333736255366n\",\n  \"1090664900942087596n\",\n  \"68973060792876598659428050587n\",\n  \"21709941437174734607102143168n\",\n  \"54515769952578230n\",\n  \"40278884731265681742344272236n\",\n  \"34941403842240889411044059527n\",\n  \"1414736029232632973n\",\n  \"60344648712825684665541778621n\",\n  \"10769790997010708809402622618n\",\n  \"2270992661657155596n\",\n  \"42362387786284445354439187653n\",\n  \"58156800386628045782945926146n\",\n  \"2818686942230697090n\",\n  \"31419723024915919870538049034n\",\n  \"18005463704599391839628874083n\",\n  \"212688156617827815n\",\n  \"35911328625822934725057123638n\",\n  \"17761454535191485025880626131n\",\n  \"1761977155017563514n\",\n  \"49665582664754517847870128980n\",\n  \"39319816430240621753318268462n\",\n  \"1491136817343252047n\",\n  \"22260823695114013941955374538n\",\n  \"17055513051235397699203988336n\",\n  \"1922191265581876891n\",\n  \"14555432039935861975982534425n\",\n  \"48152237244885228239450679938n\",\n  \"621157026389301132n\",\n  \"23051036183574002962556684690n\",\n  \"15971796984547909136099208821n\",\n  \"2205567601778656458n\",\n  \"26382181900386119773631359523n\",\n  \"77486525780604152291567730894n\",\n  \"3344785235831598130n\",\n  \"40994902602684141065596542528n\",\n  \"58124151025072872977666932193n\",\n  \"1866769646811958428n\",\n  \"13188769330477055787925877048n\",\n  \"72682189451050217677569494954n\",\n  \"1454880931779552660n\",\n  \"33634144479293043106522767128n\",\n  \"63196693658172041397923530081n\",\n  \"1719120090000942363n\",\n  \"11106335219605429034116541445n\",\n  \"59150880447111322507257453443n\",\n  \"1982729467772378638n\",\n  \"24990080775267144618286017329n\",\n  \"4933890943319210884773036028n\",\n  \"3238771988114708503n\",\n  \"72949239866424524529472552202n\",\n  \"28511064168198009294661488723n\",\n  \"2962023653742267897n\",\n  \"58656766073983020247853921869n\",\n  \"47635718491612423608063190516n\",\n  \"3000234376036375986n\",\n  \"24238047790212470654844439662n\",\n  \"23154937283069080880032452049n\",\n  \"2013625456869347404n\",\n  \"14825246893209210042587190789n\",\n  \"52825936212514509264761514892n\",\n  \"993721473581556871n\",\n  \"8713904335226753185274037022n\",\n  \"58909703948513917292703719505n\",\n  \"3356613834808478835n\",\n  \"47783414808532480730935012208n\",\n  \"71833517958023857391706253943n\",\n  \"2135080825574499771n\",\n  \"884520208662549368825880483n\",\n  \"66815068005909338250309574561n\",\n  \"140309291176602342n\",\n  \"5569450875351413209302619112n\",\n  \"29224003387999671040246207661n\",\n  \"1610924941533931901n\",\n  \"51360380732923628237942915208n\",\n  \"49075415090226283505119870909n\",\n  \"824496444682252362n\",\n  \"26136012194887577513976704588n\",\n  \"25203540858598899941257080851n\",\n  \"1411280372175925570n\",\n  \"68280069972262928193338796048n\",\n  \"26491256896653383849815404924n\",\n  \"2469762357772618827n\",\n  \"73734748267187905353062326737n\",\n  \"68913774706780990255684794379n\",\n  \"53485910764302128n\",\n  \"77777156063573625138168997381n\",\n  \"64557037666602761347172706735n\",\n  \"1996255398685960466n\",\n  \"28464530722569754157139260154n\",\n  \"22979110781613272893921919353n\",\n  \"1105566566131594780n\",\n  \"28039439084355019144555806027n\",\n  \"16299329550217317018880117262n\",\n  \"2401400792301565600n\",\n  \"62631950163514864539620020206n\",\n  \"64031511810008173001111779669n\",\n  \"135723323566704095n\",\n  \"56130238209974371238192421387n\",\n  \"71300385211683773671558874832n\",\n  \"2820109121346955706n\",\n  \"1266050722527037359608467989n\",\n  \"23369565459382988863634254407n\",\n  \"2609151292716742371n\",\n  \"46069724971530567254818701644n\",\n  \"50647992693491661816900039583n\",\n  \"3003365004111477246n\",\n  \"14833086786816707962865094508n\",\n  \"37929390713358467376261350799n\",\n  \"3113860565507891619n\",\n  \"14007914765299785142256461365n\",\n  \"75894388353326085571138234483n\",\n  \"1683683923201420873n\",\n  \"63454168155478046454844432701n\",\n  \"13184396719317261321865011420n\",\n  \"3455798177318665792n\",\n  \"15242605704632094686138955952n\",\n  \"19838168147461161870148387345n\",\n  \"2010616752800746021n\",\n  \"30692509923364661764582557691n\",\n  \"62096107423559910046379351905n\",\n  \"1346903255621101256n\",\n  \"34464243166874822079393179146n\",\n  \"63846438778551544175642767034n\",\n  \"1138380012879476837n\",\n  \"74737710169640323515477410562n\",\n  \"6284356348145608854716748036n\",\n  \"180980529294338977n\",\n  \"38461808257846861933076217288n\",\n  \"75020453906990644280477544720n\",\n  \"307346157687553567n\",\n  \"42941917981619284749284256464n\",\n  \"29124361387770891246090195521n\",\n  \"2258523094183111792n\",\n  \"31043177647483836512207577733n\",\n  \"76846872956655992019312504229n\",\n  \"2737531135418987922n\",\n  \"436136989124112448213257527n\",\n  \"37270775937015261263489085940n\",\n  \"1691548620283188254n\",\n  \"34350139485051631072038425243n\",\n  \"47842925193965716748069619330n\",\n  \"3012190802049531932n\",\n  \"8161319477063961893865419497n\",\n  \"39887640444908598647019011892n\",\n  \"326805514938122984n\",\n  \"45251026371225474798165551670n\",\n  \"78712165100775809310221458014n\",\n  \"1747908356221952635n\",\n  \"74097152003535814545675921337n\",\n  \"48494072556502793463457269862n\",\n  \"538895690676303310n\",\n  \"54295451611850750079844956272n\",\n  \"26534574033318342223582372449n\",\n  \"3044215930961181551n\",\n  \"75837108057982626126393125222n\",\n  \"52432746192616266658163099498n\",\n  \"3397076867009838686n\",\n  \"54465116802539051194037403225n\",\n  \"19480966575390018045669641671n\",\n  \"1874912131754984363n\",\n  \"62538117008905102096704754568n\",\n  \"49778263788224308775212049920n\",\n  \"635641138655366122n\",\n  \"1000125186700770733728208856n\",\n  \"72272342271481440271970417215n\",\n  \"126669907718514487n\",\n  \"32850606983744341262159941170n\",\n  \"34502523802539415215826357899n\",\n  \"335651800228572498n\",\n  \"74891229697299665485048117886n\",\n  \"7923057032410301273894282773n\",\n  \"2078488636177744832n\",\n  \"65834931437626611160851671144n\",\n  \"47253521926346692275217471181n\",\n  \"1450467026022714805n\",\n  \"79218551078854046456367160410n\",\n  \"70762120870550042138883949317n\",\n  \"2886881633871743501n\",\n  \"34749927009400659485527823456n\",\n  \"74230186035227802214714540722n\",\n  \"91514308691397285n\",\n  \"23895248556901354081433241434n\",\n  \"16615401776547671346915841714n\",\n  \"3136707560354543978n\",\n  \"21834987311199156124647763244n\",\n  \"70345068331037455105782146634n\",\n  \"3216348569578182800n\",\n  \"14552026033494402774981149080n\",\n  \"46810169065384954077118190274n\",\n  \"1911480149318741295n\",\n  \"30149592931357591699950156644n\",\n  \"14166482924045038689605819053n\",\n  \"2327000634007357378n\",\n  \"38247650175016523126038806200n\",\n  \"57691234003597921786155373117n\",\n  \"859973345968241198n\",\n  \"71714837789763600565992214961n\",\n  \"73412375228179646879012079459n\",\n  \"1974246974270865632n\",\n  \"52446930245349056255719340345n\",\n  \"970285520444299081223312008n\",\n  \"1628797543941019300n\",\n  \"50919498183802806944452291286n\",\n  \"37490783833480294299979274400n\",\n  \"2991807516764641990n\",\n  \"32377691154331801475818794360n\",\n  \"39750977600721907402675106371n\",\n  \"2263832844069227231n\",\n  \"17627606237803241511589218465n\",\n  \"3828538907962341287451709925n\",\n  \"1651077712155795619n\",\n  \"65746494371320988039239195368n\",\n  \"40429923959132850189737190904n\",\n  \"1761591307449813117n\",\n  \"62030904653045818611809336637n\",\n  \"31416196507873606617755041492n\",\n  \"1626933121429044990n\",\n  \"56278396859095728868031718464n\",\n  \"40673401721781629455927974763n\",\n  \"816921835574909421n\",\n  \"41466998290124345097221160853n\",\n  \"77602619970761915549134486486n\",\n  \"2270380655319303423n\",\n  \"37278580144182814004827303266n\",\n  \"22631466550317400025567159166n\",\n  \"1256554869446519681n\",\n  \"44512857141401466618198683938n\",\n  \"75645231533450873900978589761n\",\n  \"2839895442152180859n\",\n  \"31711543132209616307103122831n\",\n  \"78955556053482715721582593706n\",\n  \"626995298916699271n\",\n  \"50496746606014163961365206592n\",\n  \"62746915431247250243776212132n\",\n  \"2682171950447987392n\",\n  \"8649064541355918845604157106n\",\n  \"3642459701627177804195047993n\",\n  \"304942239933523054n\",\n  \"52349349447437650280979204973n\",\n  \"38235331305898406894352347179n\",\n  \"574973155769907953n\",\n  \"35486247734767358887659775332n\",\n  \"63676560163395574209410974039n\",\n  \"1346859065344137509n\",\n  \"42626666034641293807810059734n\",\n  \"78692725054674081196434522843n\",\n  \"2899402626497036759n\",\n  \"4466386979191688634974299793n\",\n  \"73590084746022202502283403859n\",\n  \"859759454707498102n\",\n  \"49530047850904057997975767021157383838285524079350821991880424926644689941n\",\n  \"12n\",\n  \"73833755054290735615493473493n\",\n  \"59827914949558952876927624612n\",\n  \"1842769298355464193n\",\n  \"0n\",\n  \"31709724516548461033720090826n\",\n  \"30157355094312078251107514164n\",\n  \"2598882554441689462n\",\n  \"0n\",\n  \"340282366920938463467229529119593204504n\",\n  \"2783209552014905048n\",\n  \"340282366920938463475639663367112901035n\",\n  \"340282366920938463466510485605024151680n\"\n]\nOutput of encryptToDrandRoundAndGetCallData: 50 elements\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/nodejs-ts-esm-tsc/src/examples.ts",
    "content": "import * as garaga from 'garaga';\n\nexport const proofBn254: {\n    a: {\n        x: bigint;\n        y: bigint;\n        curveId: number;\n    };\n    b: {\n        x: [bigint, bigint];\n        y: [bigint, bigint];\n        curveId: number;\n    };\n    c: {\n        x: bigint;\n        y: bigint;\n        curveId: number;\n    };\n    publicInputs: bigint[];\n  } = {\n    a: {\n      x: 19326975765597999023026309242851464618295625967876195641207265702903971944714n,\n      y: 63835113064883221423828958902442994957834669122245713027012799265225733314n,\n      curveId: garaga.CurveId.BN254\n    },\n    b: {\n      x: [\n        15926258242285065430281020483827261910589109953358642697562602626998569607754n,\n        15482775443177023962384497625528997151098293635727021527127534892096530509952n\n      ],\n      y: [\n        10937776115245591292644949547008094885240742374542777857501160790374675834371n,\n        6691169928456984700056024515478772626466687376966760922939239504103847739755n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    c: {\n      x: 18548825552947889373136407684636046437705490810597995577018381312170231914454n,\n      y: 9890815383090898074006770716054740281870916546141552254207684185588486179606n,\n      curveId: garaga.CurveId.BN254\n    },\n    publicInputs: [\n      BigInt('0x1e17db88c1d2e83e49f692cce4bb8169309de90afb2b141156243106aa34b474')\n    ]\n  }\n\n\nexport const vkBn254: {\n    alpha: {\n        x: bigint;\n        y: bigint;\n        curveId: number;\n    };\n    beta: {\n        x: [bigint, bigint];\n        y: [bigint, bigint];\n        curveId: number;\n    };\n    gamma: {\n        x: [bigint, bigint];\n        y: [bigint, bigint];\n        curveId: number;\n    };\n    delta: {\n        x: [bigint, bigint];\n        y: [bigint, bigint];\n        curveId: number;\n    };\n    ic: {\n        x: bigint;\n        y: bigint;\n        curveId: number;\n    }[];\n  } = {\n    alpha: {\n      x: 6763126530687886999315782887200758703366235230289874831627658839515656330867n,\n      y: 12297948670392550312636836114470404429657568989657927437959695771502446445179n,\n      curveId: garaga.CurveId.BN254\n    },\n    beta: {\n      x: [\n        15362786867599176251482538547160991918100063526460909721657878971551583339657n,\n        3804423004921008809819632629079723167970572551072432396497601916259815496626n\n      ],\n      y: [\n        21885719103633717693283841528133243510750001708857084897139570082577218850374n,\n        2076817281717432063622727433912740683541778328445173073030513609350245776784n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    gamma: {\n      x: [\n        1505558511994093266228972967760414664043255115544025409518939393775943607863n,\n        21131173266568468249589649137903719095480044620502529067534622738225157042304n\n      ],\n      y: [\n        4008759115482693545406793535591568078300615151288108694080317738431649117177n,\n        18835856718271757625037377080288624550370480296914695806777038708085497610013n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    delta: {\n      x: [\n        1497911744463986566314308077983046202449361313910668647770797503379177516252n,\n        10829154948357654897792444316512827659620136273388886760324770466776134105520n\n      ],\n      y: [\n        10850392992008761830625471778404650447428083833210258292805429019728339148884n,\n        12593805385728178657844996215584371401133999503150901444097670307277076679963n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    ic: [\n      {\n        x: 8279781786940010385190155571855963988492685408361021424114669994156938727612n,\n        y: 14410809027374663415870055712464930833085570569392210261413081131467855918386n,\n        curveId: garaga.CurveId.BN254\n      },\n      {\n        x: 10075286447651977124250383403562829564641026794366918560412684031493085120161n,\n        y: 13393494704849149158598989372790154670517815409968589728896053397011959461594n,\n        curveId: garaga.CurveId.BN254\n      }\n    ]\n  }\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/nodejs-ts-esm-tsc/src/index.ts",
    "content": "import * as garaga from 'garaga';\nimport { proofBn254, vkBn254 } from './examples.js';\n\nasync function main(): Promise<void> {\n  await garaga.init();\n  const result = garaga.msmCalldataBuilder([[1n, 2n]], [10n], garaga.CurveId.BN254);\n  const json = JSON.stringify(result, (key, value) => typeof value === 'bigint' ? value + 'n' : value, 2);\n  const message = 'Output of msm_calldata_builder: ' + json;\n  console.log(message);\n\n  const groth16Calldata = garaga.getGroth16CallData(proofBn254, vkBn254,garaga.CurveId.BN254);\n\n  const jsonCalldata = JSON.stringify(groth16Calldata, (key, value) => typeof value === 'bigint' ? value + 'n' : value, 2);\n\n  const messageCalldata = 'Output of get_groth16_calldata: ' + jsonCalldata;\n\n  console.log(messageCalldata);\n\n  // Tlock encrypt\n  const message2 = new Uint8Array(16);\n  message2.set(new TextEncoder().encode('Hello, world!'));\n  const randomness = new Uint8Array(16);\n  randomness.set(new TextEncoder().encode('fixed_random_val'));\n  const tlockCalldata = garaga.encryptToDrandRoundAndGetCallData(1, message2, randomness);\n  console.log('Output of encryptToDrandRoundAndGetCallData:', tlockCalldata.length, 'elements');\n}\n\nmain()\n  .catch(console.error);\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-react/.gitignore",
    "content": "/node_modules/\n/.next/\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-react/next.config.mjs",
    "content": "/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nexport default nextConfig;\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-react/output.txt",
    "content": "Output of msm_calldata_builder: [\n  \"1n\",\n  \"1n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"2n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"1n\",\n  \"10n\",\n  \"0n\",\n  \"0n\",\n  \"75759116906411131289250842036n\",\n  \"1443316740970346987535705368n\",\n  \"708088064087366360n\",\n  \"0n\",\n  \"31894839170900604627010243180n\",\n  \"26562388390640533846098233871n\",\n  \"1678682860455561629n\",\n  \"0n\",\n  \"340282366920938463463374607431768211466n\",\n  \"0n\",\n  \"1n\",\n  \"0n\"\n]\nOutput of get_groth16_calldata: [\n  \"1935n\",\n  \"561151868347580495583090954n\",\n  \"76095163897123765080010407949n\",\n  \"3078964875882710626n\",\n  \"0n\",\n  \"68760071548346057889257256130n\",\n  \"33987009017980255890281589641n\",\n  \"10169520226989098n\",\n  \"0n\",\n  \"27526525353537266686222475850n\",\n  \"14475456397330869216192753448n\",\n  \"2537199318039088506n\",\n  \"0n\",\n  \"21536768652854740401912377472n\",\n  \"61033740543581523820282161323n\",\n  \"2466548432040548587n\",\n  \"0n\",\n  \"49356715888972701601325049347n\",\n  \"69887821523610458575318250963n\",\n  \"1742488265497548861n\",\n  \"0n\",\n  \"68106177540828336088045306219n\",\n  \"961134836681944563222599448n\",\n  \"1065964868903753173n\",\n  \"0n\",\n  \"1800806384039658546158952406n\",\n  \"44097612892395787951554989634n\",\n  \"2954998394940821894n\",\n  \"0n\",\n  \"57407696252580182379957914390n\",\n  \"68043785987214905719851221030n\",\n  \"1575697798130653691n\",\n  \"0n\",\n  \"1n\",\n  \"64622861075918021861446670503650833524n\",\n  \"40000715384012656934033607729992139113n\",\n  \"65343516826393976703500119419n\",\n  \"64215924997604874724268545467n\",\n  \"988361220710881918n\",\n  \"30419768492628197858619568261n\",\n  \"27248300164153194572764431995n\",\n  \"2977039154666701832n\",\n  \"65685384868591218376868464427n\",\n  \"70847639348750339988496276918n\",\n  \"477777041053646529n\",\n  \"29991939756641252358878134746n\",\n  \"39295947558852310211017126572n\",\n  \"2815628384676858047n\",\n  \"41723516601424502403187247204n\",\n  \"17017221925427596342628818049n\",\n  \"440483370607139100n\",\n  \"10413180469465695361837522183n\",\n  \"19423959337400646488247227266n\",\n  \"1196856567711091031n\",\n  \"14918739433528640782272739139n\",\n  \"2386255189434407583576372032n\",\n  \"2110030772171629820n\",\n  \"66403863065153192042460667734n\",\n  \"26490228722781507311620127895n\",\n  \"1376925612093868452n\",\n  \"16095686441528704658448370761n\",\n  \"51022389018232154188872438326n\",\n  \"1610491282614910455n\",\n  \"37997039872158612927722452114n\",\n  \"76461913933066610895201145075n\",\n  \"951074374291802403n\",\n  \"71303405408633411813876113602n\",\n  \"65378028046199379258519780162n\",\n  \"2796976393851271662n\",\n  \"66043194162972766020432949924n\",\n  \"72668519642029141849369643840n\",\n  \"1767421250104456939n\",\n  \"34724757470958269778491338738n\",\n  \"67907574914053181941994051296n\",\n  \"1074861315591297211n\",\n  \"57811416502141401297494384261n\",\n  \"66717953782642686044297384228n\",\n  \"619071555217927229n\",\n  \"11747815192199388258706152779n\",\n  \"39655522309044272057593243434n\",\n  \"2667518659266923661n\",\n  \"74545987263802105943401974456n\",\n  \"25100780504941704736052597181n\",\n  \"1614091262172996678n\",\n  \"61496830641585942728225636367n\",\n  \"47520662928915336127912320093n\",\n  \"1483128622047069223n\",\n  \"60688370891239308805053347678n\",\n  \"6154252422157238786881911133n\",\n  \"1595810747040934713n\",\n  \"4083087877564984515505707949n\",\n  \"8098795933662806280871012387n\",\n  \"392529588828430050n\",\n  \"14388273410011291023320103380n\",\n  \"59643003630595652724715495246n\",\n  \"2978244255961784640n\",\n  \"73005708620970672578538518429n\",\n  \"64274822400727474231693975117n\",\n  \"824761225328685267n\",\n  \"58979395441344004425345087397n\",\n  \"50034285490796369376342018474n\",\n  \"1071577406066675668n\",\n  \"37552244383550540565443579029n\",\n  \"66651519402295869947385119697n\",\n  \"1816081760201573675n\",\n  \"48020280081371249748563352979n\",\n  \"19387797072717949389382225132n\",\n  \"1075380445499260082n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"35717919122505863182793101258n\",\n  \"38321232967395819819318928199n\",\n  \"33653293845735846n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"60126610212574038899502857656n\",\n  \"7521540037295293717633716927n\",\n  \"2853604986499631260n\",\n  \"34n\",\n  \"21051189327279847889561754607n\",\n  \"15679397574132606210591767826n\",\n  \"2165541175263187167n\",\n  \"11461504713279098434997837844n\",\n  \"29843864593792422920685859506n\",\n  \"1460931496621397613n\",\n  \"31444402670555100638844582863n\",\n  \"41564870089383627374040254466n\",\n  \"3317275169749288672n\",\n  \"72559701040108110454251376272n\",\n  \"22887416934578586124987839996n\",\n  \"233686850646424299n\",\n  \"51667851121405518271474152545n\",\n  \"8297160697759020633045233343n\",\n  \"2193876459774314419n\",\n  \"50048470992987075597478354517n\",\n  \"7622325433377464914372402739n\",\n  \"2354852892440837544n\",\n  \"51371930649223862037533589505n\",\n  \"79037515700470610379424985426n\",\n  \"3103776711054728122n\",\n  \"62017664743365054011497714498n\",\n  \"18400895627048394641412939651n\",\n  \"1348549913115407530n\",\n  \"68135824164391051249850625519n\",\n  \"66467776056179325801077769907n\",\n  \"21934170737946721n\",\n  \"43733194692565917370190335652n\",\n  \"20871497235942649279957719973n\",\n  \"668366294714005293n\",\n  \"69461224576101086641240237729n\",\n  \"66163212446743341874016516713n\",\n  \"2187872754580648643n\",\n  \"17220145241406859216639481755n\",\n  \"16637691490800642336304328427n\",\n  \"699908274655976347n\",\n  \"63497807423928467541336180608n\",\n  \"5826616601935275548523889948n\",\n  \"1995878641893268059n\",\n  \"45351336804917798268705814434n\",\n  \"32809386436253774870015191481n\",\n  \"2479634507910679085n\",\n  \"29902151727900563245652302915n\",\n  \"70978449320724687288838934154n\",\n  \"2324927884830925807n\",\n  \"70956000718854853515484101425n\",\n  \"18794223695576985859644098754n\",\n  \"851712710373510834n\",\n  \"10098225054790962506843798879n\",\n  \"23663666343921865703011477995n\",\n  \"2539135702270490911n\",\n  \"13745949463631524266514217644n\",\n  \"70097334773007528061348260208n\",\n  \"1449740726324507950n\",\n  \"77747255839650031066990598333n\",\n  \"33186206179829484467075523327n\",\n  \"3072781249488320507n\",\n  \"73980383885811324159893986758n\",\n  \"1765445723258696625718806089n\",\n  \"2271055079390534326n\",\n  \"65413433113844994807777190576n\",\n  \"48033870016967321544035758027n\",\n  \"486427727733872709n\",\n  \"26974899297726311987406093631n\",\n  \"5590641036960446176988521755n\",\n  \"827510576486023036n\",\n  \"29009837304935242599458620885n\",\n  \"20410410399336048506493809410n\",\n  \"1954580703151327584n\",\n  \"64135814011222089868428198367n\",\n  \"56261294792918650387740643327n\",\n  \"1226348411176360117n\",\n  \"71834179960057214052393522783n\",\n  \"46252419010406289556729694820n\",\n  \"1393685374555389118n\",\n  \"71368042768790547323904986882n\",\n  \"66161706759499128280107017373n\",\n  \"2031846388120562115n\",\n  \"21220965229609488481377288540n\",\n  \"63634474338013450603335409627n\",\n  \"821621475859559449n\",\n  \"18432973800914453913616171088n\",\n  \"8237366564750917100218776918n\",\n  \"3448970319177548904n\",\n  \"51266071561401723888120442902n\",\n  \"33637427514172279767467204013n\",\n  \"3304964589143840434n\",\n  \"38819453582756888614388081676n\",\n  \"38995523514738195349996597496n\",\n  \"2323381859757397191n\",\n  \"60884424754479179074928199128n\",\n  \"3834764671648885586861880739n\",\n  \"864611594127789300n\",\n  \"9851774469429652901432809299n\",\n  \"37101389540039872112071709899n\",\n  \"2559626381308197564n\",\n  \"406646090122284731360238690n\",\n  \"44652954714826373590985929530n\",\n  \"683398595921263332n\",\n  \"20271182213679030346920227775n\",\n  \"37600328594433178897257972399n\",\n  \"432396126057182521n\",\n  \"4187404064813213379278146332n\",\n  \"44537571235199588707429377798n\",\n  \"3148695479824963911n\",\n  \"25801656964836714839982503508n\",\n  \"51572074862943493111482365520n\",\n  \"1230107506438930488n\",\n  \"51625253538057090130489675612n\",\n  \"11815326077763625426679125713n\",\n  \"521507079758837629n\",\n  \"9648925458348520397354094791n\",\n  \"31712274845777377436963587786n\",\n  \"1997027570431487029n\",\n  \"67411860089204789431616372347n\",\n  \"66528411456550554620624110152n\",\n  \"186478859944874837n\",\n  \"61267275259145597446660035124n\",\n  \"8554664316600082912178209665n\",\n  \"2375445434845419873n\",\n  \"1589782365755830876261985911n\",\n  \"14834270454057237025174127570n\",\n  \"963005115183332390n\",\n  \"23249702285165109375700438720n\",\n  \"20760791667651963569657008881n\",\n  \"2149068190029611973n\",\n  \"74674158355316816901821060837n\",\n  \"13278131002009659818927519878n\",\n  \"992778641153509292n\",\n  \"8743794935416188942200722720n\",\n  \"51445266496970909016857135378n\",\n  \"438732749332832318n\",\n  \"64511635865187456937539832569n\",\n  \"68455428209776466334096458368n\",\n  \"1196547129512189429n\",\n  \"16652864649326843859619189651n\",\n  \"47031229552259361752165531n\",\n  \"1977848333533964373n\",\n  \"32230433718106499209616712783n\",\n  \"50152042404552913889735459326n\",\n  \"2647553318887157906n\",\n  \"15558003702184603194095500825n\",\n  \"75789384763919593972512743955n\",\n  \"3199452366147221980n\",\n  \"23639206276595496029173201731n\",\n  \"49198122874004051169498469698n\",\n  \"3017499313473475023n\",\n  \"14633623354742611699704494011n\",\n  \"13838793228838994907197164815n\",\n  \"1865567661799564691n\",\n  \"63554437295278917743885851002n\",\n  \"43774994641723817700539915508n\",\n  \"2096263880799998644n\",\n  \"39241367224191359271532780985n\",\n  \"11996031360599781980224407856n\",\n  \"669587303349757211n\",\n  \"70309465524306380398946854940n\",\n  \"69691793870844727391235380992n\",\n  \"1097884931999290463n\",\n  \"4880550284873697839328338960n\",\n  \"8683184578595981266384193421n\",\n  \"1704353262400573542n\",\n  \"43209925421984317108056960491n\",\n  \"71838424302727061831479195619n\",\n  \"1719485935656079288n\",\n  \"20281500369447070817728689103n\",\n  \"7827101470501627130702651299n\",\n  \"1802787150264131673n\",\n  \"46990609747636025825158033861n\",\n  \"44506561326339289883265865893n\",\n  \"168363193009253293n\",\n  \"72644600526598920979602995563n\",\n  \"23734595505295435652505772841n\",\n  \"3066825941193215846n\",\n  \"35922864395887621958431954121n\",\n  \"36164080296393340386782836739n\",\n  \"2806406594668460083n\",\n  \"9559608083309233656821926408n\",\n  \"21435397197883361901646100159n\",\n  \"1173438743001539534n\",\n  \"45502332725513884072895701183n\",\n  \"21110593816020485943815437920n\",\n  \"2156839344197406156n\",\n  \"14935455230205682855615996549n\",\n  \"3176509029633635649806564693n\",\n  \"2744065159326778800n\",\n  \"50144289937074876149408247339n\",\n  \"73476828119785067069284584679n\",\n  \"1137921320963525519n\",\n  \"7764782370318985672713086089n\",\n  \"35186333034809438599544173388n\",\n  \"2599319187054853443n\",\n  \"71090896326220687050059751719n\",\n  \"7138127862158940765217036726n\",\n  \"2525413991973636711n\",\n  \"74465662641034900763924596241n\",\n  \"64800563131735459820423413678n\",\n  \"467645211882593334n\",\n  \"35429207184442884958891366618n\",\n  \"32026071525343635101462583825n\",\n  \"732661589473603894n\",\n  \"53979236240639306101606255299n\",\n  \"42289323195165961060464784974n\",\n  \"2572678142594168339n\",\n  \"34781401150182625703506517963n\",\n  \"27502296245160796607775189158n\",\n  \"204754437845996963n\",\n  \"60295830689532650505249825677n\",\n  \"25033548320502415354132760311n\",\n  \"26918649856759092n\",\n  \"53883044729840223319972205798n\",\n  \"71229970233113264180243241621n\",\n  \"1096143763692361182n\",\n  \"23670625124894730163037915585n\",\n  \"66188859433247255337619139871n\",\n  \"2789875774976133848n\",\n  \"76287870172839315742103539908n\",\n  \"76696206429019592649532825371n\",\n  \"1140810575629679716n\",\n  \"65695197715200264171919419792n\",\n  \"64578697338608806055715988010n\",\n  \"1315508308085028070n\",\n  \"78097114957711978300958275236n\",\n  \"73435222529435448525954708815n\",\n  \"1357585460514972583n\",\n  \"7357385422266450818170168488n\",\n  \"41750638133784298446701227299n\",\n  \"2309087687582896396n\",\n  \"59893979186320257893680148671n\",\n  \"70073254756682993544223051173n\",\n  \"3379633857316028827n\",\n  \"63037751789054738563399308545n\",\n  \"22112638657428976200628648553n\",\n  \"1119955028522904661n\",\n  \"17789959924300679578888409433n\",\n  \"32036177498553475203925266628n\",\n  \"3282049411090141820n\",\n  \"28853440708133119682221591754n\",\n  \"53037088663773523321481680370n\",\n  \"33889236786700338n\",\n  \"47866115906431522995214087729n\",\n  \"65896044771509521496549322945n\",\n  \"1356170216477027582n\",\n  \"72025359186703704066599325205n\",\n  \"14290937382512145681745832413n\",\n  \"235291859370816977n\",\n  \"16739080450814900672563464076n\",\n  \"27155915888194232201712953259n\",\n  \"2201285100786606817n\",\n  \"79046757705903490925593572396n\",\n  \"41590525534061554138727710174n\",\n  \"1563993153777110442n\",\n  \"58644351226953768961970699175n\",\n  \"71513413355714071072616721058n\",\n  \"771468756865502494n\",\n  \"56315873417343912546874324750n\",\n  \"66995041844358703653717763298n\",\n  \"1564628505321775490n\",\n  \"68742094005504029111318961475n\",\n  \"43257881480227388188853022203n\",\n  \"2827885137176633354n\",\n  \"60013377537965180515452389042n\",\n  \"22615548017942376680894051034n\",\n  \"2778940717048846996n\",\n  \"30216926479141873412912870389n\",\n  \"67097866317972012436735650659n\",\n  \"1001082522948099952n\",\n  \"31879429787569811794175043050n\",\n  \"57916743777618192263856200515n\",\n  \"1477201521425100888n\",\n  \"63117110331861368443138300600n\",\n  \"24455052765578778318741183737n\",\n  \"3145320365602131181n\",\n  \"27504400622945393457424964663n\",\n  \"18149654277116955082138788671n\",\n  \"709865641588578406n\",\n  \"51203413602847718278618462447n\",\n  \"32871208476003646471375256821n\",\n  \"1972541565241208115n\",\n  \"79118404692942875097520377767n\",\n  \"48815069625306356145460113214n\",\n  \"2800168047740476387n\",\n  \"27090046108651136752525050251n\",\n  \"17050737426763583806790779471n\",\n  \"1273566324033923836n\",\n  \"49543917066569282928794484300n\",\n  \"10290628042158833070532221066n\",\n  \"3469066870558011680n\",\n  \"42005113796531220880503084548n\",\n  \"60064195130891515794312310901n\",\n  \"3245851193684195107n\",\n  \"37533982385009798315342336648n\",\n  \"10267823027838019609009260399n\",\n  \"2025345482262498605n\",\n  \"34864622598934340124988581388n\",\n  \"48347073555555495737374318810n\",\n  \"2673244105079290838n\",\n  \"75957016907360510463610401727n\",\n  \"23977086141109407077488719105n\",\n  \"732491745580907274n\",\n  \"64604276948999648627686221332n\",\n  \"3868070793275280858296301394n\",\n  \"1873653426250118454n\",\n  \"15570553586934053483564418077n\",\n  \"13639547122371116255200424101n\",\n  \"3229806347752382046n\",\n  \"69627176750917937037127756524n\",\n  \"77527130421629244161614984692n\",\n  \"2205592855904802747n\",\n  \"42359401661274759693285654733n\",\n  \"15319487818905735149374624862n\",\n  \"3299209455827802664n\",\n  \"913752139298990313523799637n\",\n  \"70257873178701883303322833580n\",\n  \"3363278906733915791n\",\n  \"3719386124896722977369262005n\",\n  \"53915264239484240561994801723n\",\n  \"1014563467864375643n\",\n  \"56643381820560944379080271087n\",\n  \"5451127454093963182673395845n\",\n  \"1647155594727927302n\",\n  \"74031948470913728924354306654n\",\n  \"67046184840603355661228918718n\",\n  \"730434808359892479n\",\n  \"58832815659134274668136294794n\",\n  \"44220894708044864609266466973n\",\n  \"428689828657455715n\",\n  \"26619728344740812354339350673n\",\n  \"55972705855091654840275771393n\",\n  \"597472825198654088n\",\n  \"1452568843776109298902292527n\",\n  \"48082065429135088437634332196n\",\n  \"1047157723497573338n\",\n  \"28285154322504134404521941699n\",\n  \"56070279326493931276099147353n\",\n  \"1647252454052220783n\",\n  \"65027676769817342180184568252n\",\n  \"12685362344487350979600199772n\",\n  \"1402500493179000567n\",\n  \"12668630001282077875777731433n\",\n  \"55553251572483079593258301341n\",\n  \"2382205981458202111n\",\n  \"50473524893888759380289559496n\",\n  \"52220217290909756763540198313n\",\n  \"2029638412495399688n\",\n  \"7502774623130712545083224028n\",\n  \"73425515727643581896824036686n\",\n  \"2771702310825972693n\",\n  \"4639820922586718498241340517n\",\n  \"46582679696898380484679332702n\",\n  \"2620580077787400940n\",\n  \"51782105270520932573551959292n\",\n  \"74517889523497564960562458357n\",\n  \"79055126752843995n\",\n  \"10925640711936519280913334701n\",\n  \"11947058347966705959371810733n\",\n  \"43716694970268491n\",\n  \"35453676805113974113471109604n\",\n  \"12015889727201641553493717139n\",\n  \"3275286259969106630n\",\n  \"70932279409438704808566723573n\",\n  \"47041530965489511382629531879n\",\n  \"1256401409005218192n\",\n  \"46895749660336733332848035754n\",\n  \"40261009687444665011442182710n\",\n  \"1306436215925446460n\",\n  \"3904962902077066763622365736n\",\n  \"36103992387013546339910627073n\",\n  \"1329335481346702678n\",\n  \"57853677844329075763360620729n\",\n  \"61001619991056325367390311148n\",\n  \"1235032555631976826n\",\n  \"58692146235938833274542664790n\",\n  \"14589363842493324627243766856n\",\n  \"578262325105051129n\",\n  \"37980379958779218087580100271n\",\n  \"57690546822788520479506631792n\",\n  \"3164185857728705638n\",\n  \"45598806448478931852264970697n\",\n  \"29033375842093843451718686864n\",\n  \"2812217528418815016n\",\n  \"9663261157782365056384592697n\",\n  \"44620211458433011608252253672n\",\n  \"2505651240889113840n\",\n  \"48502340833312690180905327065n\",\n  \"9352266604910376416980234379n\",\n  \"3341395763378874957n\",\n  \"35507650777754495555508745994n\",\n  \"64550352482963692428938364344n\",\n  \"1749731610964724298n\",\n  \"72801722493214401326730125326n\",\n  \"55956888553336351398608259633n\",\n  \"896001678647446033n\",\n  \"30516385505393014949750902877n\",\n  \"47315718952109319710441627150n\",\n  \"1388483706936013349n\",\n  \"32381991427814516368016795653n\",\n  \"59696292811917044385937202833n\",\n  \"618914335291991958n\",\n  \"40375787626773409929606022175n\",\n  \"64734613933900308276892757597n\",\n  \"2556069305521992095n\",\n  \"58654528682801174800851099376n\",\n  \"11593522535604870003716248394n\",\n  \"2125230714317219300n\",\n  \"8061995955571015171488513388n\",\n  \"47983447012081651413970228934n\",\n  \"855542739847145422n\",\n  \"59096469339608638609245068515n\",\n  \"7673808125695463322887566290n\",\n  \"1385253448294382073n\",\n  \"25340909062918393540888464015n\",\n  \"9795256553635962173776771050n\",\n  \"3012016973098277348n\",\n  \"33467611330524938973631050712n\",\n  \"7543431037219165063475505539n\",\n  \"448151223182465539n\",\n  \"22750106248651778926545160954n\",\n  \"25740569688692303261800730858n\",\n  \"1075240126364963450n\",\n  \"56338203997489686691769068850n\",\n  \"62119360873725897456686490753n\",\n  \"1222146081347045140n\",\n  \"27338323756657113133884361560n\",\n  \"21141429927442113006964516579n\",\n  \"462132336382397961n\",\n  \"4987343640321990641559943818n\",\n  \"58829032105334349895296634715n\",\n  \"3177465831253470688n\",\n  \"69096263705896112247403554129n\",\n  \"29492604434954899550510960365n\",\n  \"304239915265350366n\",\n  \"66375851691134826136210085333n\",\n  \"44757375154942980538763091305n\",\n  \"1112855489475878924n\",\n  \"70069037784938962740775503666n\",\n  \"12717652252841341839220495543n\",\n  \"2918096944668928835n\",\n  \"18321962109897171704378960368n\",\n  \"61813672462196073792006627549n\",\n  \"2734946711892636188n\",\n  \"64219561440442257822526755189n\",\n  \"8503031322535266331858567242n\",\n  \"3223902208326320319n\",\n  \"63116174136664698830215774786n\",\n  \"2759322304337380924973025029n\",\n  \"810068357014304774n\",\n  \"15698684552711747426349376896n\",\n  \"65762055793295617462571353752n\",\n  \"518270689795187122n\",\n  \"58150828468103287645001826637n\",\n  \"77452960139151639571846482697n\",\n  \"519559051146038460n\",\n  \"72625801975239649642036163890n\",\n  \"39078044248618521225250269350n\",\n  \"2190524057325078928n\",\n  \"27770888055874136986828633484n\",\n  \"41773083279140557423975570256n\",\n  \"2854828164966176931n\",\n  \"627836434493841003902237785n\",\n  \"77928664588771202997039373627n\",\n  \"330865869276931200n\",\n  \"52935592469577214913105764520n\",\n  \"20197659873511917804524429378n\",\n  \"2125370194946441846n\",\n  \"3460074836406938711660958301n\",\n  \"52820564261229479633548811299n\",\n  \"2919129481241566745n\",\n  \"6675772908450017734753351305n\",\n  \"65258735248680451317985314824n\",\n  \"2950671717077079181n\",\n  \"6822322071311459654365919975n\",\n  \"48497518547901827883287152419n\",\n  \"3243229764836791767n\",\n  \"72937532385990220357716354648n\",\n  \"19074513737405788027838151006n\",\n  \"1297437039234841476n\",\n  \"75502921753638151385835217223n\",\n  \"15306268504859852745422227938n\",\n  \"3143438951510181753n\",\n  \"3947335170074803838440311819n\",\n  \"62699530989773040321915910090n\",\n  \"3215975868729087991n\",\n  \"45236352461588188769215285451n\",\n  \"41706782526887442329166221445n\",\n  \"3168773580470738009n\",\n  \"75285535419605148224367004655n\",\n  \"20481966054007305592119557920n\",\n  \"1679995277184070400n\",\n  \"45190873120635261257451746066n\",\n  \"47696678647110719375889237738n\",\n  \"2068610507691385147n\",\n  \"9915927934978371252308896949n\",\n  \"31159305954355174048281405375n\",\n  \"1704598723840881213n\",\n  \"67338469563962359211325034773n\",\n  \"41738724864530875640824663606n\",\n  \"2293929193371443079n\",\n  \"34807312716413150046069343319n\",\n  \"70801066094208025212394559646n\",\n  \"2518515824100660756n\",\n  \"76811947889156401932764711781n\",\n  \"43817729339652461426643528955n\",\n  \"2039489180470709457n\",\n  \"38477432026452102589204844897n\",\n  \"27527167249603525516926315406n\",\n  \"1191468099071291308n\",\n  \"38041851156661687253492123536n\",\n  \"54288163040365572080441140556n\",\n  \"911480122138689106n\",\n  \"4974069079367885339264267782n\",\n  \"28880616750574662115261710630n\",\n  \"2834730446537796035n\",\n  \"55466841778289154595312506036n\",\n  \"47524577058256910308968549882n\",\n  \"351449977223840700n\",\n  \"62311990134227217524354071274n\",\n  \"75586193885025429015569590193n\",\n  \"545412183548073756n\",\n  \"79201290258654825630711427638n\",\n  \"77524373992410852423354047680n\",\n  \"552010389188782621n\",\n  \"13584773290145166716045719634n\",\n  \"57089761411485171751249424952n\",\n  \"1694608384682621747n\",\n  \"29538886750825184946212760314n\",\n  \"63894150012954354476012028271n\",\n  \"381542434687157486n\",\n  \"18078760560177937565267140464n\",\n  \"74003801426748288272147648907n\",\n  \"42337564080893923n\",\n  \"76689566315090503029029632865n\",\n  \"77474971819185712518886624915n\",\n  \"372114354534855369n\",\n  \"3011898200892081576513307862n\",\n  \"13966070005688554503624007786n\",\n  \"470413759528293312n\",\n  \"39357561183949775040925825237n\",\n  \"70682164693568724918268906963n\",\n  \"1376182782398783885n\",\n  \"41538213381429219620578361408n\",\n  \"42254768852299863792709628627n\",\n  \"3431309948863311296n\",\n  \"29234390314689913487082552719n\",\n  \"17916853178952663417328241903n\",\n  \"669291203853282419n\",\n  \"33249562629014821971547667642n\",\n  \"26222791431277453980835687680n\",\n  \"98534970627714358n\",\n  \"25021648199838864664290068537n\",\n  \"20665859250814395210947344246n\",\n  \"662389299694120248n\",\n  \"72307113898419621240789872204n\",\n  \"46323053668872253004980165076n\",\n  \"1041999687571616075n\",\n  \"8985042666921921648283132643n\",\n  \"74513886773734802806022422301n\",\n  \"2603455779145809119n\",\n  \"15411135359682619522278947280n\",\n  \"27784420314858949438220006926n\",\n  \"450671277926568052n\",\n  \"2831173742809690598851605179n\",\n  \"28386483802658122108161613621n\",\n  \"1424370976519373932n\",\n  \"31198231619878444700423211860n\",\n  \"42295311569311653123964908500n\",\n  \"2935759999014605210n\",\n  \"32001363507887263736668102660n\",\n  \"46912833713119636774180995741n\",\n  \"2092237369418424823n\",\n  \"78656477190391127646333527543n\",\n  \"41056006364555863740114989146n\",\n  \"2171263570612200061n\",\n  \"21422129487009930658303224502n\",\n  \"46206308103083011878154386775n\",\n  \"1874554378158482533n\",\n  \"36641496950703925635911572554n\",\n  \"48432166499307362117455688176n\",\n  \"362387825758837904n\",\n  \"27092632894596570716463916204n\",\n  \"20108561967338242154648349930n\",\n  \"1880193076762165445n\",\n  \"9593372273263129574197363679n\",\n  \"48018078028931030587694756618n\",\n  \"542974594247287387n\",\n  \"14814551631877080383283532261n\",\n  \"33496168748765220079451008919n\",\n  \"2250598863496646490n\",\n  \"44869586855816636221572912809n\",\n  \"41783360501362407212785286614n\",\n  \"2362538758680925884n\",\n  \"47048981182078605465642165702n\",\n  \"60518795030556750835816928982n\",\n  \"505511636936241905n\",\n  \"58024262056741504028876642662n\",\n  \"50138980925793649225004896980n\",\n  \"2579777888438614723n\",\n  \"6523114729709277602770738046n\",\n  \"28358393151053570058817793343n\",\n  \"3081381986289034984n\",\n  \"15900191280315068679181663660n\",\n  \"48577168032374944428952731072n\",\n  \"830974214184407623n\",\n  \"10274561196236136318135959057n\",\n  \"26148664358554534185218032007n\",\n  \"201377610767670386n\",\n  \"11368406426935765376362633788n\",\n  \"4122436782704069458424072833n\",\n  \"2934079973878820714n\",\n  \"66892750247258968804173976659n\",\n  \"76380379537218876441475920731n\",\n  \"3380019238411335234n\",\n  \"50717224916942478279258173891n\",\n  \"44470393688322556765105136550n\",\n  \"1813355330674964836n\",\n  \"8515532742277261388949469229n\",\n  \"33221912074775270762895168327n\",\n  \"2646766706385940242n\",\n  \"11140136119772415355412357379n\",\n  \"44150773111766484868566388647n\",\n  \"3191354614138223649n\",\n  \"30708778779429297397760149496n\",\n  \"67837687252340085721524474101n\",\n  \"3301367800510383551n\",\n  \"10954599956402707572521260184n\",\n  \"21030000566064580489911242942n\",\n  \"1828905939385555740n\",\n  \"26254579696623038244113820321n\",\n  \"76089322519690535032690356215n\",\n  \"868757520992376209n\",\n  \"77540171332511416804096348278n\",\n  \"10474304059709005130776549459n\",\n  \"1665346113039180866n\",\n  \"77071906535707552468440337167n\",\n  \"76416817616469856915552001970n\",\n  \"2619908781683664602n\",\n  \"40713576015254467501617369989n\",\n  \"69174809057973808586596761660n\",\n  \"364462143474967775n\",\n  \"3388865641890523266901884229n\",\n  \"46510386965164679950611269041n\",\n  \"2868959718371388528n\",\n  \"38291153048032659818161082470n\",\n  \"57992998428591158266306092260n\",\n  \"2140250223970187383n\",\n  \"74674643030181299821451279762n\",\n  \"61603307939095484817637012597n\",\n  \"1805808601029218696n\",\n  \"37221838450591689221386319329n\",\n  \"68301391492878568825616976727n\",\n  \"2237000809794684762n\",\n  \"11407285364976644693945059208n\",\n  \"25348058182926100240298110509n\",\n  \"3114508241594272017n\",\n  \"75356748694855659604450932050n\",\n  \"73487079967561788811810515931n\",\n  \"1490776583857675442n\",\n  \"54218989991798315687885361450n\",\n  \"20703329376060767478344708910n\",\n  \"2199487792587152210n\",\n  \"75111061944546058209924381826n\",\n  \"59244444067541601191271416829n\",\n  \"1581429188013860604n\",\n  \"52660822561915117683975147831n\",\n  \"47783082248718407900747485302n\",\n  \"1369252091872015433n\",\n  \"36417458042350421490821725117n\",\n  \"31829247002542379610343848353n\",\n  \"455784377300586483n\",\n  \"16833465703461845689857266397n\",\n  \"71194569481351283884295739145n\",\n  \"3189866189053900612n\",\n  \"65858387085894768841721032786n\",\n  \"42191857983305827191840357582n\",\n  \"666015291493419098n\",\n  \"27916318777227697186981470587n\",\n  \"32438460617546390776125662122n\",\n  \"3438854808891043135n\",\n  \"41197663088738641800559183911n\",\n  \"55140791537758229983041465056n\",\n  \"1162917064515090408n\",\n  \"59276808448795540978821008029n\",\n  \"55346073844723874343240998585n\",\n  \"2138546228419844587n\",\n  \"29861692804477614266603259375n\",\n  \"46434932953097909216915612814n\",\n  \"2786750119186865986n\",\n  \"2914382294411148824195592597n\",\n  \"47257202751523172671381039762n\",\n  \"108099711483611500n\",\n  \"42513194204119630092428609239n\",\n  \"7009779828784113435151735800n\",\n  \"1568976973765903017n\",\n  \"74506942497632859791810397801n\",\n  \"75159716442684547730197176733n\",\n  \"214522106108977303n\",\n  \"307807623661151452830127704n\",\n  \"69355418870826927485148435899n\",\n  \"1716229337114513433n\",\n  \"57800790680731912804700220994n\",\n  \"33865695886637783077735975519n\",\n  \"1521543041885052952n\",\n  \"61900084065708307372472439490n\",\n  \"9670136848396954396035168772n\",\n  \"705486756697563485n\",\n  \"65695693080875904861430309269n\",\n  \"42258749277647240519914054375n\",\n  \"1610937183743514752n\",\n  \"45949364456230722028956610312n\",\n  \"71318597512050155765983898976n\",\n  \"1419180020927833749n\",\n  \"16722582418318977044812304850n\",\n  \"64520646005354913944304541442n\",\n  \"1349757657977694032n\",\n  \"23453477023590312415905476662n\",\n  \"20988708348761074914346191082n\",\n  \"2734679321361253617n\",\n  \"3531335181910221180679210683n\",\n  \"77069908679139173478778593856n\",\n  \"3209489805214655859n\",\n  \"15423046625290420432194363954n\",\n  \"66544315732344216335597482829n\",\n  \"3417056483929987132n\",\n  \"23412416307661786237706973063n\",\n  \"52684903097691240819445939916n\",\n  \"3087013127443362602n\",\n  \"59516131369415164617233433764n\",\n  \"22552284363447521404574779744n\",\n  \"440598570727652332n\",\n  \"10078101871820643773664346515n\",\n  \"53180025648864462561753056892n\",\n  \"1238481677425258091n\",\n  \"66978851386839209947975732205n\",\n  \"76469976691658858609518100317n\",\n  \"2669015410315668427n\",\n  \"10462115063986428235746660388n\",\n  \"20612418707380044137824607138n\",\n  \"913149152876393845n\",\n  \"12896643578852573199148249630n\",\n  \"65916513826164228515537693476n\",\n  \"1689818392090951394n\",\n  \"48812924094784749209418690439n\",\n  \"21075229147504768099245857693n\",\n  \"2023634641390620097n\",\n  \"46841988916092209879920999223n\",\n  \"16626325630569367486087793088n\",\n  \"2520424161966279659n\",\n  \"66590657955425334169984583445n\",\n  \"43137455439307899619378709852n\",\n  \"119691013666955759n\",\n  \"59528138117541221723219264069n\",\n  \"6039238025418276887251147184n\",\n  \"1423016249189720303n\",\n  \"74476981597135756778074726485n\",\n  \"57871369440317946035711890073n\",\n  \"1799738956519083373n\",\n  \"61169922085945703273845146359n\",\n  \"58536191609701145724674103544n\",\n  \"678581665969651580n\",\n  \"29756753901276156089801861773n\",\n  \"37715386191992628222582900313n\",\n  \"1839293100231634062n\",\n  \"8545730587160341404066690935n\",\n  \"73310320371102040457790413928n\",\n  \"2943087579162219865n\",\n  \"3592679410576312851945554995n\",\n  \"63768122222562308688415150519n\",\n  \"2852416365710961566n\",\n  \"65734466853903663026216615808n\",\n  \"75611388663630224651662180524n\",\n  \"3082245111526479768n\",\n  \"42542028447397082553823280434n\",\n  \"15266201170439359558184400250n\",\n  \"2959319188559780389n\",\n  \"62084872176674708014188872797n\",\n  \"49471685826369556510350964812n\",\n  \"3044342635568692521n\",\n  \"52766810402300947123818998320n\",\n  \"57464266928926410524441305379n\",\n  \"2678492530248725715n\",\n  \"63759940946573266111589745544n\",\n  \"1239422070074535035165804970n\",\n  \"3011362073292317527n\",\n  \"5312425357216197805891517417n\",\n  \"8604490350019536611169668726n\",\n  \"1278264119461231226n\",\n  \"23413740732153092734953046582n\",\n  \"2351234330786062681522357509n\",\n  \"3063446156461791539n\",\n  \"31192263866697541487222909336n\",\n  \"53213425910476786883061415945n\",\n  \"3388535254355309510n\",\n  \"76222049202953784940228041093n\",\n  \"8232814450668299001215927167n\",\n  \"1010418058221874517n\",\n  \"30375045069912390061370886372n\",\n  \"76858962311200653420966476141n\",\n  \"2531834595530804919n\",\n  \"72838406196796824316965387556n\",\n  \"16107338032535514271932130242n\",\n  \"826038058455425888n\",\n  \"74047817357615679402104886971n\",\n  \"66250974048331219261305648117n\",\n  \"515372630941459652n\",\n  \"49140383045734318581810247391n\",\n  \"38552127106329617678305826510n\",\n  \"1791730195926210707n\",\n  \"20447547859709794457924179129n\",\n  \"52480964595913357482998508931n\",\n  \"419726983098458687n\",\n  \"20434453705733747059793719688n\",\n  \"22732218969594988459804019164n\",\n  \"721740589738128975n\",\n  \"63178390467425871623450374916n\",\n  \"58781628951232066578669558088n\",\n  \"1366096141210552719n\",\n  \"30310055907701667442250131224n\",\n  \"77693499391068805405178198648n\",\n  \"2419127900721456602n\",\n  \"72238281634987295743046110639n\",\n  \"2759706666093555363424148875n\",\n  \"2871042634310332424n\",\n  \"58186331935313172107712023092n\",\n  \"73009408672165436946758189888n\",\n  \"1138172672402058824n\",\n  \"45794206921224716587506811973n\",\n  \"50074044364882080121299615241n\",\n  \"201200847748951804n\",\n  \"41753381957343686084038148154n\",\n  \"16651255916405576823960096368n\",\n  \"744771251876887027n\",\n  \"6397253273640502791149864078n\",\n  \"67730045189242272443620838555n\",\n  \"2723512022810421168n\",\n  \"20403399159094844095476748628n\",\n  \"46114852246774129546878110205n\",\n  \"2163837250026966482n\",\n  \"63507059223060953171650485733n\",\n  \"27872394523028449929373211791n\",\n  \"1266384674015277092n\",\n  \"31341532803878701385180273244n\",\n  \"56274201404580685976997533743n\",\n  \"431470279371342601n\",\n  \"27146401285505116697408502780n\",\n  \"10909809704395711896795601995n\",\n  \"823727347575104764n\",\n  \"78157451508256479551851793287n\",\n  \"7934224114897115965586132150n\",\n  \"2561622534344592225n\",\n  \"52031374290403822978799313483n\",\n  \"75680335637831520600351100052n\",\n  \"2240257882085839580n\",\n  \"35818819658139744996071875447n\",\n  \"62532608351434239965548606901n\",\n  \"2997209098633992908n\",\n  \"35801460645260708494826382933n\",\n  \"6962199370752725968726753829n\",\n  \"471191881884558376n\",\n  \"51494347593311565178389849721n\",\n  \"27959136057874496572927068138n\",\n  \"2054885609386822401n\",\n  \"1903400454085938493722464234n\",\n  \"58252527737465224754126905441n\",\n  \"871049256780466220n\",\n  \"62266126172301828292957015888n\",\n  \"29942402306346798464030870789n\",\n  \"2439682690873113741n\",\n  \"58828716449315637847726991566n\",\n  \"33586884830050665361484057496n\",\n  \"1850240284198082738n\",\n  \"57256720773892932068692318575n\",\n  \"43906884659388043006991040937n\",\n  \"2567264210368699586n\",\n  \"37303325532466691611774319975n\",\n  \"1023775330119159065320215646n\",\n  \"2970467943548704391n\",\n  \"6719369853840095911284134964n\",\n  \"52698184868933442534169228704n\",\n  \"1590449702912303791n\",\n  \"9163234315649800019839577781n\",\n  \"5096786077915756093838027866n\",\n  \"2604014912333559946n\",\n  \"22626562141910724736547894073n\",\n  \"1221514787490597839172086118n\",\n  \"2021859363658276538n\",\n  \"29343228808229785648243946635n\",\n  \"17107161597392558070179986947n\",\n  \"2142074198041769333n\",\n  \"8295437982000203433981112803n\",\n  \"32281278698888589789154221048n\",\n  \"2261976931796110908n\",\n  \"19003064635652370381400548000n\",\n  \"5388386401569756312458644562n\",\n  \"3154333183807592746n\",\n  \"57635002029571841636737463711n\",\n  \"56991897992879623406006006725n\",\n  \"2842694143682003853n\",\n  \"73379904593405458046663259580n\",\n  \"839437272553377608023038726n\",\n  \"3093165198442302924n\",\n  \"33419448607193509624332386145n\",\n  \"16740311080067952025303937955n\",\n  \"666860562806181637n\",\n  \"8797571923563716660075774195n\",\n  \"75022438860744435659585766685n\",\n  \"1558560135470851650n\",\n  \"19713896344694960627284542368n\",\n  \"78388507052884523368130573724n\",\n  \"411547793569600371n\",\n  \"52610184319591489722152436723n\",\n  \"58886726417514761894083084350n\",\n  \"779286101129650524n\",\n  \"30697463792187334469128124748n\",\n  \"76836636996796091386778801556n\",\n  \"868461342532092659n\",\n  \"69910862714025895807766899173n\",\n  \"51405542117679167872600082463n\",\n  \"349470313771420560n\",\n  \"71284241241602654693194940143n\",\n  \"7305568034139166589777830792n\",\n  \"2498747200591008033n\",\n  \"67960797371315801691053786599n\",\n  \"25825479627169106615506743060n\",\n  \"454178144016317938n\",\n  \"35798135180239958015829265626n\",\n  \"23385623537498663178814541991n\",\n  \"1668508428339305051n\",\n  \"15450665342638866022354076708n\",\n  \"1590106122468359708599592949n\",\n  \"209939085635224246n\",\n  \"45146454297276439294547281947n\",\n  \"71363197518122470395685282523n\",\n  \"209021609080779353n\",\n  \"37805135405124328919729060254n\",\n  \"46916624974206570529290830921n\",\n  \"848835529094356500n\",\n  \"52127928532313726409293511873n\",\n  \"74341195298303002847160668677n\",\n  \"2836594795507658600n\",\n  \"21372610848069974970714546381n\",\n  \"47095482837411596424060733004n\",\n  \"2644188767312235257n\",\n  \"42696308717032907609441318200n\",\n  \"71478263091865254540527492446n\",\n  \"580612364877252066n\",\n  \"24227503011457277739411398472n\",\n  \"46210588161299166961443583909n\",\n  \"2104513243231016467n\",\n  \"38286987706753654842254500763n\",\n  \"52819390378718994903041839288n\",\n  \"2559971158277261662n\",\n  \"10804049422689166087510960068n\",\n  \"78494177681671393465658693075n\",\n  \"14482037543685577n\",\n  \"45316386224024264714051962520n\",\n  \"8077236619578691823690243326n\",\n  \"3134255926280338435n\",\n  \"58234835865881258067775424985n\",\n  \"32582539715376623121568222400n\",\n  \"895535831771370236n\",\n  \"70554522419104669983576590653n\",\n  \"40229753450332894247180991320n\",\n  \"3235640053820685715n\",\n  \"20050852574591066448348962700n\",\n  \"63154847355271958325521981335n\",\n  \"467978477141038832n\",\n  \"23115494614834363321936638302n\",\n  \"54275477858894789534235120579n\",\n  \"1729059077109549892n\",\n  \"2643222253937861530223901503n\",\n  \"4343013099917093534712467976n\",\n  \"2093250350291324334n\",\n  \"26606380640809280595919467519n\",\n  \"24158225122809122341718478436n\",\n  \"384623299034698779n\",\n  \"74889164947469453919523854509n\",\n  \"57684567535195905731154589750n\",\n  \"1155881533367487150n\",\n  \"40449699793338258794390721810n\",\n  \"45563605053974069206983967932n\",\n  \"1493349482130193926n\",\n  \"53198779688378832727006250273n\",\n  \"23250105681044235044335219173n\",\n  \"1649629209531042678n\",\n  \"31842301972458791163037611310n\",\n  \"54103172956148923849538705604n\",\n  \"1853082006782289707n\",\n  \"73283134292642541157328722326n\",\n  \"60011977393637178105550407258n\",\n  \"2931499730502310317n\",\n  \"30363774768400601902892824896n\",\n  \"69784527858977659878014965306n\",\n  \"2699700013359551525n\",\n  \"30143876784681103984444940141n\",\n  \"20508010382725323248422071352n\",\n  \"1472036335205806581n\",\n  \"72685268086241841913630448820n\",\n  \"13484287640917155024759235656n\",\n  \"421919482836501604n\",\n  \"58336665028159633068676496150n\",\n  \"37899530871095451514688032059n\",\n  \"830925861824953119n\",\n  \"25034909887778048695729760495n\",\n  \"6186382813048747659882138994n\",\n  \"928295656744287075n\",\n  \"23742999482526473077193706109n\",\n  \"38681524762823880972818454723n\",\n  \"1037267958137901699n\",\n  \"75848820697595803231237834330n\",\n  \"4098133930661194465828731453n\",\n  \"2484592940588499869n\",\n  \"45229057029317220478111498771n\",\n  \"55686910073377115986537207556n\",\n  \"2974592459022975650n\",\n  \"9058824958434584730691471305n\",\n  \"3489502058924586487278999515n\",\n  \"1985538445731248079n\",\n  \"14034347138268021040571737620n\",\n  \"22094509985004128313979725457n\",\n  \"1321434542301391881n\",\n  \"17216019289274156022312124782n\",\n  \"65908201923726532456265422977n\",\n  \"387610774042169114n\",\n  \"29699496552150641100894659868n\",\n  \"43552700176683532671663646633n\",\n  \"305525895851406027n\",\n  \"62068283835877161864738460092n\",\n  \"66163022436031594737849199513n\",\n  \"1671489056967612477n\",\n  \"5806077789744302022830084009n\",\n  \"22126371298319875265318066168n\",\n  \"2973075530852635513n\",\n  \"43508686549770752780288409207n\",\n  \"39960107195405145189624452517n\",\n  \"3021227579398645734n\",\n  \"75958919635020929694389722957n\",\n  \"14913897636015670404185010029n\",\n  \"2882183092458315590n\",\n  \"24239404766805006701421172975n\",\n  \"69450551382041986033230454197n\",\n  \"629979785699424851n\",\n  \"47715312965767193925496266564n\",\n  \"51328287208106789864582031889n\",\n  \"1994694450268216917n\",\n  \"12878968128402785600925987432n\",\n  \"8892728961399753099629106451n\",\n  \"2189564568474803348n\",\n  \"17841277261874434955985363634n\",\n  \"23255802008382153152915838079n\",\n  \"1299631183736247307n\",\n  \"70369295004394220674262548695n\",\n  \"41703500013750845131767430551n\",\n  \"2515279718642012557n\",\n  \"29363803518729226252949864837n\",\n  \"11941978972714945652777612780n\",\n  \"1864444849178365249n\",\n  \"19838910496936353855554382505n\",\n  \"63526654617675483693289584781n\",\n  \"1386561621225388054n\",\n  \"37964054821976413036136417123n\",\n  \"14531042297004730862055294756n\",\n  \"1592174811323575228n\",\n  \"17025415710900400219439375060n\",\n  \"362574756192905655380951625n\",\n  \"186982663000383695n\",\n  \"75302946272320992428390907104n\",\n  \"76356571252613340602107695667n\",\n  \"1005406788214614232n\",\n  \"58429545482092547095478867066n\",\n  \"8783598735519438107774246954n\",\n  \"3449009450489856852n\",\n  \"52421244757199560525245430831n\",\n  \"36745113142356116864221402917n\",\n  \"2011028989323540641n\",\n  \"52389389340233786555192956059n\",\n  \"48540948198567585375080843793n\",\n  \"2511738896308209966n\",\n  \"62948973448903767233283645427n\",\n  \"78581731009485419534613750974n\",\n  \"2631249803991736511n\",\n  \"15700178914629731044995270252n\",\n  \"21825209006850516132399941848n\",\n  \"469426094359884098n\",\n  \"45109950384963150442992909517n\",\n  \"34709270486045260410251674804n\",\n  \"3227700636384978310n\",\n  \"59508455528169337110518969046n\",\n  \"7626842288771897454076798332n\",\n  \"2837142952242233831n\",\n  \"78154898100541067453790359715n\",\n  \"28712940925290532622010374032n\",\n  \"2005548120880216529n\",\n  \"19676819626842762742496321363n\",\n  \"21494888704510312646126358022n\",\n  \"1917432403713999314n\",\n  \"35348767509581898437000853095n\",\n  \"54404372638473474714277538548n\",\n  \"1418295384476104455n\",\n  \"2087534038039694873601959364n\",\n  \"55492416744530703076122435501n\",\n  \"3415979290873032604n\",\n  \"77874081666239317555289078970n\",\n  \"64693269821438151662321973074n\",\n  \"468500022203866114n\",\n  \"52183552801284363909457374676n\",\n  \"26386627404911694711966206173n\",\n  \"849932193222808822n\",\n  \"60880246718709527470179169635n\",\n  \"73275749658065911543659109078n\",\n  \"2835936826164075331n\",\n  \"47034978948350796174151388655n\",\n  \"71774550150782116132727222082n\",\n  \"2957236831646338670n\",\n  \"63121833886036603562738575495n\",\n  \"23473953357667857038757232396n\",\n  \"709268300106945760n\",\n  \"67565011137450891785645904255n\",\n  \"24476510070022540670394808047n\",\n  \"2197500443692989620n\",\n  \"59529365216756814354926446285n\",\n  \"62380286296544401614193824725n\",\n  \"1797665767653557658n\",\n  \"65352576236492901270647039868n\",\n  \"54007112892683927216806385747n\",\n  \"1796075374294915397n\",\n  \"17840563634584466359434584144n\",\n  \"46203718678613515530978507404n\",\n  \"702053810505193011n\",\n  \"6133701316708198581434709723n\",\n  \"61802938904865726983656435299n\",\n  \"3001276128418418514n\",\n  \"11649452974115692944272358953n\",\n  \"18473964874994391830987882986n\",\n  \"2086271034138195481n\",\n  \"27934361651981769617523547350n\",\n  \"75412934231387879572695859186n\",\n  \"461672875728163553n\",\n  \"2659961698397651286244898268n\",\n  \"38244585026297070186059616261n\",\n  \"3371488902807027695n\",\n  \"16205200667874612181106188684n\",\n  \"6520317333544879950114099734n\",\n  \"2490923463723046056n\",\n  \"66034343348095027053141749239n\",\n  \"13522171761978136875076440765n\",\n  \"211626548808403729n\",\n  \"52060409492746050106971031742n\",\n  \"3493375676170587510122635686n\",\n  \"3394236868158496257n\",\n  \"47140116537527183288446191137n\",\n  \"26402419994251877186703235784n\",\n  \"2932509761218506683n\",\n  \"41718577718458247425998327137n\",\n  \"72444125720253366875907105723n\",\n  \"2370720516004120360n\",\n  \"63763546849180341189837833587n\",\n  \"56383249669741657007269755446n\",\n  \"2772609748811855948n\",\n  \"30673155381064993958540435457n\",\n  \"58923421149810821122915571284n\",\n  \"2826147464537959677n\",\n  \"2437524155719427333248486827n\",\n  \"13523745438577697843652059309n\",\n  \"2255306498837633258n\",\n  \"66617913651732723895666550762n\",\n  \"800383901932656375981050324n\",\n  \"2369057816442019000n\",\n  \"53894023794388536556779913700n\",\n  \"43633381247568199322500578225n\",\n  \"1622058361920748072n\",\n  \"31610597297695602711187104065n\",\n  \"75047413064993937787913175675n\",\n  \"2532518357458277794n\",\n  \"66943196821272189971919216455n\",\n  \"63057632269388325855862697967n\",\n  \"252919094746701796n\",\n  \"36093617934864267028615495215n\",\n  \"2458297172936844284200172721n\",\n  \"2861973034148611365n\",\n  \"35639326827089764975324431609n\",\n  \"42790455257345625520833632516n\",\n  \"2416491183110698117n\",\n  \"25453911219236829571892475695n\",\n  \"7792114184406477060828720050n\",\n  \"3256395018257219594n\",\n  \"44446878573785568457717214835n\",\n  \"31316823799089969829944488381n\",\n  \"3348254446631709920n\",\n  \"12075675278480009463346998871n\",\n  \"33336621394122897171138216323n\",\n  \"1761645290764169692n\",\n  \"38936491179522097211601163974n\",\n  \"40756936871275705147530952481n\",\n  \"2239620312855528769n\",\n  \"66166234417862875439766591001n\",\n  \"45961753617942718644070346235n\",\n  \"2545432639028408432n\",\n  \"27071931775260190706961952445n\",\n  \"16791652622063002274074642172n\",\n  \"1351810600008793720n\",\n  \"8734604468994364132650578395n\",\n  \"2915643774972349972943503710n\",\n  \"546123555763251031n\",\n  \"40883390215425903758829895197n\",\n  \"46075188532687982090196339471n\",\n  \"2037883374560027081n\",\n  \"1788529744899075811496881871n\",\n  \"22977601030754581206369105722n\",\n  \"2052641684479223112n\",\n  \"52403270166627919005596848880n\",\n  \"2330881363722503207702297453n\",\n  \"1950506519094245230n\",\n  \"26974012086112717010353138814n\",\n  \"69257122863702421096680142186n\",\n  \"731421312124744837n\",\n  \"31069884618093040515903738825n\",\n  \"64922032296511662760139295040n\",\n  \"2654253976131730717n\",\n  \"12166944124292618925625599356n\",\n  \"59407826445782768214824917874n\",\n  \"354147487414166550n\",\n  \"74336686733791433900827528675n\",\n  \"12704634481538804742936579229n\",\n  \"2082676564717138885n\",\n  \"190n\",\n  \"58146038485323707171566360552n\",\n  \"79083051845830931429793398812n\",\n  \"1253760413372422709n\",\n  \"75585805608841426332286895315n\",\n  \"17454071065969374047751520578n\",\n  \"1856801283221000835n\",\n  \"56347371123082155623989904211n\",\n  \"52625756897582785946932954415n\",\n  \"1103484556810393055n\",\n  \"27404185422829405492475499818n\",\n  \"1419552461670775323662566720n\",\n  \"3431535685290297040n\",\n  \"10240761959601706862708901917n\",\n  \"71665724585200281475617327049n\",\n  \"3232798557396947874n\",\n  \"32919536142170844080265894843n\",\n  \"27634787910238436631971547080n\",\n  \"689759514785002741n\",\n  \"15431349741815244232301206308n\",\n  \"53845586976664022319541168221n\",\n  \"1583044030122302208n\",\n  \"47825067986735618489429772434n\",\n  \"36933954632637013701382915058n\",\n  \"2061889715878943774n\",\n  \"8977310916259261225384223331n\",\n  \"4538091340276567216050541897n\",\n  \"2974949937804520552n\",\n  \"32068898197860866225864499204n\",\n  \"11944297794698583544272156441n\",\n  \"1942470514051769102n\",\n  \"16232887649510996786606289763n\",\n  \"15259493580801814760566477085n\",\n  \"522617557584553779n\",\n  \"24242596953798418019519661501n\",\n  \"34675681500323328218631423377n\",\n  \"2626688210475495912n\",\n  \"78740174483351451096333088791n\",\n  \"64943981386376195937910130384n\",\n  \"3002553261633376435n\",\n  \"71321212497283823630152857278n\",\n  \"57107096638064759035770959417n\",\n  \"1525415424337039994n\",\n  \"33592124231316161392746859369n\",\n  \"66360389043497290172485164153n\",\n  \"169262401730913852n\",\n  \"67472003684398719335655699957n\",\n  \"16789521379035350190464748508n\",\n  \"2131762421966585515n\",\n  \"66631783199370161347508379926n\",\n  \"48925352076915955304942304087n\",\n  \"264237490291976243n\",\n  \"24342296347779296789258245457n\",\n  \"43293722801550027940585947288n\",\n  \"2184523999681911728n\",\n  \"9355802069694208050316076397n\",\n  \"35552089219631962733889470030n\",\n  \"3012875015446218241n\",\n  \"19749370490527515528697426175n\",\n  \"8078386931861545908004277048n\",\n  \"484548262348581637n\",\n  \"9197680845227051035593920301n\",\n  \"76678845496561933550816162785n\",\n  \"1006587369936993775n\",\n  \"16264558547638181301681301031n\",\n  \"77659436542602450682090346042n\",\n  \"2549030864566782064n\",\n  \"23992787444587661702047865121n\",\n  \"15283574111017964877795482274n\",\n  \"1010500590098381861n\",\n  \"36081283464794391834173091918n\",\n  \"74713339703559068643167768213n\",\n  \"87864425149724657n\",\n  \"15509755852767806607741504203n\",\n  \"49741860533707809781906740346n\",\n  \"2053665582944552662n\",\n  \"21800540003051693165872352300n\",\n  \"55295746887291089518396498874n\",\n  \"2979094345114374943n\",\n  \"11846584694067264521987247663n\",\n  \"49031890130314527277927146925n\",\n  \"3053072831928300240n\",\n  \"49870471347364999860446391462n\",\n  \"60351156120295649092916522340n\",\n  \"57434309920295622n\",\n  \"51905526990545292008889846168n\",\n  \"35741421582248014414699395252n\",\n  \"1021827240168947429n\",\n  \"16350288651927207676427341432n\",\n  \"48548588913627635520822500823n\",\n  \"2556960523655499318n\",\n  \"39061623507343320271115115845n\",\n  \"38947970321306063422821592330n\",\n  \"2525216560431056230n\",\n  \"65177147304893778229440396619n\",\n  \"70545257645069117487807391489n\",\n  \"1600567512488781231n\",\n  \"33331224951106722420313772928n\",\n  \"38583179480229318101782748287n\",\n  \"1817415503412264076n\",\n  \"43931562095456763346512920739n\",\n  \"45993143967557989986350621262n\",\n  \"1013785943641285390n\",\n  \"46300841465540867353476664678n\",\n  \"67952189225824325494911009881n\",\n  \"1883806626142505323n\",\n  \"74763953209711116608083413573n\",\n  \"73395076121267231351266442748n\",\n  \"875683814313975814n\",\n  \"23960570645093608799064342076n\",\n  \"36737884069061207609010160029n\",\n  \"2740282725978910539n\",\n  \"2348460868169339519816282219n\",\n  \"59294276502368234372728690209n\",\n  \"2234404830781012457n\",\n  \"29326696920519891523554164108n\",\n  \"46303855242526653100651128095n\",\n  \"1172546639486712237n\",\n  \"7729537530476375227332351839n\",\n  \"8564566731713324385055420531n\",\n  \"1479853701561506444n\",\n  \"22273291075577128615277532352n\",\n  \"73656828782504352218789556241n\",\n  \"2308987335794616316n\",\n  \"14359470620000928077518163171n\",\n  \"71961130737820208932903249274n\",\n  \"950707570385670728n\",\n  \"70317507071845790171587549310n\",\n  \"45654920344570326674633769038n\",\n  \"2650168593880186613n\",\n  \"45738429799101288017972815601n\",\n  \"43778890431815013310034329810n\",\n  \"312650173805915283n\",\n  \"59759032808483205201660512612n\",\n  \"49166445941564648520976910103n\",\n  \"575816160851551719n\",\n  \"41099033744600704768583815842n\",\n  \"67643677451426846496806534446n\",\n  \"2744110069990264553n\",\n  \"5427077521225540080527062818n\",\n  \"27591683040195514365023584328n\",\n  \"1814257385547611969n\",\n  \"43890769480671665778349573612n\",\n  \"25702107374475025393868297533n\",\n  \"2665391419850264467n\",\n  \"49173530067968024446609831742n\",\n  \"69233652337477869916623889471n\",\n  \"2973651385942905178n\",\n  \"39451576607205851507235401000n\",\n  \"65326357252788810888449550413n\",\n  \"2328241568819620138n\",\n  \"7187030532193362998811241838n\",\n  \"11158043907775193412625503465n\",\n  \"1887168135327759363n\",\n  \"72093988836508782933530929396n\",\n  \"59408618785876068844273516201n\",\n  \"1998979553140732738n\",\n  \"20436888483045692091969328934n\",\n  \"37236965238760796085670708990n\",\n  \"2982240668332065019n\",\n  \"45766566944201297703965941735n\",\n  \"33134417182815170607111134530n\",\n  \"2256938019969749699n\",\n  \"61095014957849456939456497149n\",\n  \"5166234805292214141604288719n\",\n  \"2223380807107784804n\",\n  \"4407612794594263685713471991n\",\n  \"27938927008707740784778705409n\",\n  \"889822472376617854n\",\n  \"10586000171735376465147370484n\",\n  \"11688046614136879282493614768n\",\n  \"1673899149118569188n\",\n  \"48568524626716983467820586640n\",\n  \"54066530547892129113282820943n\",\n  \"1257544179877250249n\",\n  \"70430239680893778037863498084n\",\n  \"67050853132645903854946409019n\",\n  \"2548118935751794404n\",\n  \"41828468840963319821789084190n\",\n  \"14275492751268414444663806553n\",\n  \"1784444490366165065n\",\n  \"61852018693496828660952117185n\",\n  \"48406002847831614907905133809n\",\n  \"49483591444929780n\",\n  \"54427537761720246076956183538n\",\n  \"41736602958902949490055768838n\",\n  \"1954646608479060360n\",\n  \"60934769075649772007484314209n\",\n  \"4723248530441409773201893998n\",\n  \"3259834508477438622n\",\n  \"16778379388406768302608844589n\",\n  \"14091941761246911672273283575n\",\n  \"1362843677097285540n\",\n  \"20990186444040307549583297890n\",\n  \"39850655248017325132808795637n\",\n  \"3159948251218994501n\",\n  \"22841250904644903266547583091n\",\n  \"35884470460139378173998471965n\",\n  \"144997960402386643n\",\n  \"73988342422211773824311060048n\",\n  \"25430193174058044426248161017n\",\n  \"1511499341976026028n\",\n  \"41856665278828717622897473021n\",\n  \"52430814625940772563313528979n\",\n  \"1518969462082050494n\",\n  \"42785280606159799076021378453n\",\n  \"75641406683588400312731571380n\",\n  \"354558010400584999n\",\n  \"25777665187274443426345962355n\",\n  \"52569759362487685340322204483n\",\n  \"2660707269990640271n\",\n  \"39456006642189286944561721406n\",\n  \"64095592448568371575360918624n\",\n  \"1623622008203944130n\",\n  \"42823981658558488340963830755n\",\n  \"70857240021552825619139550212n\",\n  \"3338694247115466605n\",\n  \"33528981497758066103123618956n\",\n  \"52174717566293432033940167575n\",\n  \"3285250213548536505n\",\n  \"49559726527714678923168862226n\",\n  \"35376383273863973001561075247n\",\n  \"1762388272055172875n\",\n  \"4963094059256542135804830802n\",\n  \"15251461935798611072932258838n\",\n  \"3043255521973128258n\",\n  \"23415022784844915519999589288n\",\n  \"59120161904093027011464662035n\",\n  \"2353807276882257604n\",\n  \"35355887041205290611693611623n\",\n  \"31669150297307261835976265040n\",\n  \"872891098273185795n\",\n  \"69193046798683036289275806803n\",\n  \"42818302823254546309613088130n\",\n  \"3225904969635087159n\",\n  \"22611614040816481524272701347n\",\n  \"40802292074751246948780577207n\",\n  \"351005661799852441n\",\n  \"50079803252014276007292589026n\",\n  \"37577116329374038939872244704n\",\n  \"745466466224739689n\",\n  \"57943789902740370489195854856n\",\n  \"59877164372411435705733535421n\",\n  \"1440407261307873910n\",\n  \"74147961838302268113193936081n\",\n  \"29475004529393168298384526566n\",\n  \"780455262674149785n\",\n  \"51306862863296749150663360555n\",\n  \"68603117787295236727112632820n\",\n  \"2702997921905430000n\",\n  \"64092864258708121960742058121n\",\n  \"27968741860257802705491575837n\",\n  \"3395033579182877453n\",\n  \"60896409955387219924723371046n\",\n  \"72447564289478669262616529078n\",\n  \"3397060291617780594n\",\n  \"74466337456436624238136742413n\",\n  \"67930138912822600973471222439n\",\n  \"631712168137915134n\",\n  \"34699941264140402915854806555n\",\n  \"31625108777123266428395503959n\",\n  \"662594291726250121n\",\n  \"10374418997762067141299032182n\",\n  \"74831531166323756923345310781n\",\n  \"2614948808475244069n\",\n  \"45617012767756761370444767987n\",\n  \"44141298692376594039790971629n\",\n  \"1159181502462992545n\",\n  \"47704071339495071156056567054n\",\n  \"46834594498992945383289148503n\",\n  \"924797511068572088n\",\n  \"23233351571238696045632767797n\",\n  \"14376771187481317319928510593n\",\n  \"3161389881302592208n\",\n  \"68221328884209068946490350230n\",\n  \"69520921081111912732122080295n\",\n  \"540294970059028553n\",\n  \"49382519270729084009739959234n\",\n  \"54272649767268320797552878520n\",\n  \"1762246401423958252n\",\n  \"65695480183764337135892820912n\",\n  \"15357314953562507969519535878n\",\n  \"2415017092301124519n\",\n  \"12568989548408666155318764896n\",\n  \"10255298595269749256814759758n\",\n  \"488040996573952383n\",\n  \"61804111086379855885098583520n\",\n  \"11271058357408383599116781502n\",\n  \"1329740533130250248n\",\n  \"8039933903881517002403963857n\",\n  \"7118558163468937314455208936n\",\n  \"536489202082349116n\",\n  \"57213159007120933607123362054n\",\n  \"38389263848304750695624289842n\",\n  \"103890218507147410n\",\n  \"44837586220950001446991442272n\",\n  \"51003826059731215073098356499n\",\n  \"1055564410899460745n\",\n  \"36382905285088913012495727205n\",\n  \"23789430840439822229827015138n\",\n  \"2409250954595470494n\",\n  \"77553161939176686247041732803n\",\n  \"32075777538535189410338696221n\",\n  \"308581509063990399n\",\n  \"75123827789249657112621112140n\",\n  \"63466606458376146979489895003n\",\n  \"1559915864837385203n\",\n  \"65374245818638483805981829412n\",\n  \"59413598642796928072211645702n\",\n  \"773792966334851501n\",\n  \"10975404188605698335218119359n\",\n  \"5937731821461360820250261750n\",\n  \"2424406683527655198n\",\n  \"58048034440511231692734658223n\",\n  \"38541497666142538814655959889n\",\n  \"97237747168756283n\",\n  \"32114431512100683707696744321n\",\n  \"43084884381938054868610618438n\",\n  \"53036606161489394n\",\n  \"49303822531142933183499847955n\",\n  \"70757204501375068333736255366n\",\n  \"1090664900942087596n\",\n  \"68973060792876598659428050587n\",\n  \"21709941437174734607102143168n\",\n  \"54515769952578230n\",\n  \"40278884731265681742344272236n\",\n  \"34941403842240889411044059527n\",\n  \"1414736029232632973n\",\n  \"60344648712825684665541778621n\",\n  \"10769790997010708809402622618n\",\n  \"2270992661657155596n\",\n  \"42362387786284445354439187653n\",\n  \"58156800386628045782945926146n\",\n  \"2818686942230697090n\",\n  \"31419723024915919870538049034n\",\n  \"18005463704599391839628874083n\",\n  \"212688156617827815n\",\n  \"35911328625822934725057123638n\",\n  \"17761454535191485025880626131n\",\n  \"1761977155017563514n\",\n  \"49665582664754517847870128980n\",\n  \"39319816430240621753318268462n\",\n  \"1491136817343252047n\",\n  \"22260823695114013941955374538n\",\n  \"17055513051235397699203988336n\",\n  \"1922191265581876891n\",\n  \"14555432039935861975982534425n\",\n  \"48152237244885228239450679938n\",\n  \"621157026389301132n\",\n  \"23051036183574002962556684690n\",\n  \"15971796984547909136099208821n\",\n  \"2205567601778656458n\",\n  \"26382181900386119773631359523n\",\n  \"77486525780604152291567730894n\",\n  \"3344785235831598130n\",\n  \"40994902602684141065596542528n\",\n  \"58124151025072872977666932193n\",\n  \"1866769646811958428n\",\n  \"13188769330477055787925877048n\",\n  \"72682189451050217677569494954n\",\n  \"1454880931779552660n\",\n  \"33634144479293043106522767128n\",\n  \"63196693658172041397923530081n\",\n  \"1719120090000942363n\",\n  \"11106335219605429034116541445n\",\n  \"59150880447111322507257453443n\",\n  \"1982729467772378638n\",\n  \"24990080775267144618286017329n\",\n  \"4933890943319210884773036028n\",\n  \"3238771988114708503n\",\n  \"72949239866424524529472552202n\",\n  \"28511064168198009294661488723n\",\n  \"2962023653742267897n\",\n  \"58656766073983020247853921869n\",\n  \"47635718491612423608063190516n\",\n  \"3000234376036375986n\",\n  \"24238047790212470654844439662n\",\n  \"23154937283069080880032452049n\",\n  \"2013625456869347404n\",\n  \"14825246893209210042587190789n\",\n  \"52825936212514509264761514892n\",\n  \"993721473581556871n\",\n  \"8713904335226753185274037022n\",\n  \"58909703948513917292703719505n\",\n  \"3356613834808478835n\",\n  \"47783414808532480730935012208n\",\n  \"71833517958023857391706253943n\",\n  \"2135080825574499771n\",\n  \"884520208662549368825880483n\",\n  \"66815068005909338250309574561n\",\n  \"140309291176602342n\",\n  \"5569450875351413209302619112n\",\n  \"29224003387999671040246207661n\",\n  \"1610924941533931901n\",\n  \"51360380732923628237942915208n\",\n  \"49075415090226283505119870909n\",\n  \"824496444682252362n\",\n  \"26136012194887577513976704588n\",\n  \"25203540858598899941257080851n\",\n  \"1411280372175925570n\",\n  \"68280069972262928193338796048n\",\n  \"26491256896653383849815404924n\",\n  \"2469762357772618827n\",\n  \"73734748267187905353062326737n\",\n  \"68913774706780990255684794379n\",\n  \"53485910764302128n\",\n  \"77777156063573625138168997381n\",\n  \"64557037666602761347172706735n\",\n  \"1996255398685960466n\",\n  \"28464530722569754157139260154n\",\n  \"22979110781613272893921919353n\",\n  \"1105566566131594780n\",\n  \"28039439084355019144555806027n\",\n  \"16299329550217317018880117262n\",\n  \"2401400792301565600n\",\n  \"62631950163514864539620020206n\",\n  \"64031511810008173001111779669n\",\n  \"135723323566704095n\",\n  \"56130238209974371238192421387n\",\n  \"71300385211683773671558874832n\",\n  \"2820109121346955706n\",\n  \"1266050722527037359608467989n\",\n  \"23369565459382988863634254407n\",\n  \"2609151292716742371n\",\n  \"46069724971530567254818701644n\",\n  \"50647992693491661816900039583n\",\n  \"3003365004111477246n\",\n  \"14833086786816707962865094508n\",\n  \"37929390713358467376261350799n\",\n  \"3113860565507891619n\",\n  \"14007914765299785142256461365n\",\n  \"75894388353326085571138234483n\",\n  \"1683683923201420873n\",\n  \"63454168155478046454844432701n\",\n  \"13184396719317261321865011420n\",\n  \"3455798177318665792n\",\n  \"15242605704632094686138955952n\",\n  \"19838168147461161870148387345n\",\n  \"2010616752800746021n\",\n  \"30692509923364661764582557691n\",\n  \"62096107423559910046379351905n\",\n  \"1346903255621101256n\",\n  \"34464243166874822079393179146n\",\n  \"63846438778551544175642767034n\",\n  \"1138380012879476837n\",\n  \"74737710169640323515477410562n\",\n  \"6284356348145608854716748036n\",\n  \"180980529294338977n\",\n  \"38461808257846861933076217288n\",\n  \"75020453906990644280477544720n\",\n  \"307346157687553567n\",\n  \"42941917981619284749284256464n\",\n  \"29124361387770891246090195521n\",\n  \"2258523094183111792n\",\n  \"31043177647483836512207577733n\",\n  \"76846872956655992019312504229n\",\n  \"2737531135418987922n\",\n  \"436136989124112448213257527n\",\n  \"37270775937015261263489085940n\",\n  \"1691548620283188254n\",\n  \"34350139485051631072038425243n\",\n  \"47842925193965716748069619330n\",\n  \"3012190802049531932n\",\n  \"8161319477063961893865419497n\",\n  \"39887640444908598647019011892n\",\n  \"326805514938122984n\",\n  \"45251026371225474798165551670n\",\n  \"78712165100775809310221458014n\",\n  \"1747908356221952635n\",\n  \"74097152003535814545675921337n\",\n  \"48494072556502793463457269862n\",\n  \"538895690676303310n\",\n  \"54295451611850750079844956272n\",\n  \"26534574033318342223582372449n\",\n  \"3044215930961181551n\",\n  \"75837108057982626126393125222n\",\n  \"52432746192616266658163099498n\",\n  \"3397076867009838686n\",\n  \"54465116802539051194037403225n\",\n  \"19480966575390018045669641671n\",\n  \"1874912131754984363n\",\n  \"62538117008905102096704754568n\",\n  \"49778263788224308775212049920n\",\n  \"635641138655366122n\",\n  \"1000125186700770733728208856n\",\n  \"72272342271481440271970417215n\",\n  \"126669907718514487n\",\n  \"32850606983744341262159941170n\",\n  \"34502523802539415215826357899n\",\n  \"335651800228572498n\",\n  \"74891229697299665485048117886n\",\n  \"7923057032410301273894282773n\",\n  \"2078488636177744832n\",\n  \"65834931437626611160851671144n\",\n  \"47253521926346692275217471181n\",\n  \"1450467026022714805n\",\n  \"79218551078854046456367160410n\",\n  \"70762120870550042138883949317n\",\n  \"2886881633871743501n\",\n  \"34749927009400659485527823456n\",\n  \"74230186035227802214714540722n\",\n  \"91514308691397285n\",\n  \"23895248556901354081433241434n\",\n  \"16615401776547671346915841714n\",\n  \"3136707560354543978n\",\n  \"21834987311199156124647763244n\",\n  \"70345068331037455105782146634n\",\n  \"3216348569578182800n\",\n  \"14552026033494402774981149080n\",\n  \"46810169065384954077118190274n\",\n  \"1911480149318741295n\",\n  \"30149592931357591699950156644n\",\n  \"14166482924045038689605819053n\",\n  \"2327000634007357378n\",\n  \"38247650175016523126038806200n\",\n  \"57691234003597921786155373117n\",\n  \"859973345968241198n\",\n  \"71714837789763600565992214961n\",\n  \"73412375228179646879012079459n\",\n  \"1974246974270865632n\",\n  \"52446930245349056255719340345n\",\n  \"970285520444299081223312008n\",\n  \"1628797543941019300n\",\n  \"50919498183802806944452291286n\",\n  \"37490783833480294299979274400n\",\n  \"2991807516764641990n\",\n  \"32377691154331801475818794360n\",\n  \"39750977600721907402675106371n\",\n  \"2263832844069227231n\",\n  \"17627606237803241511589218465n\",\n  \"3828538907962341287451709925n\",\n  \"1651077712155795619n\",\n  \"65746494371320988039239195368n\",\n  \"40429923959132850189737190904n\",\n  \"1761591307449813117n\",\n  \"62030904653045818611809336637n\",\n  \"31416196507873606617755041492n\",\n  \"1626933121429044990n\",\n  \"56278396859095728868031718464n\",\n  \"40673401721781629455927974763n\",\n  \"816921835574909421n\",\n  \"41466998290124345097221160853n\",\n  \"77602619970761915549134486486n\",\n  \"2270380655319303423n\",\n  \"37278580144182814004827303266n\",\n  \"22631466550317400025567159166n\",\n  \"1256554869446519681n\",\n  \"44512857141401466618198683938n\",\n  \"75645231533450873900978589761n\",\n  \"2839895442152180859n\",\n  \"31711543132209616307103122831n\",\n  \"78955556053482715721582593706n\",\n  \"626995298916699271n\",\n  \"50496746606014163961365206592n\",\n  \"62746915431247250243776212132n\",\n  \"2682171950447987392n\",\n  \"8649064541355918845604157106n\",\n  \"3642459701627177804195047993n\",\n  \"304942239933523054n\",\n  \"52349349447437650280979204973n\",\n  \"38235331305898406894352347179n\",\n  \"574973155769907953n\",\n  \"35486247734767358887659775332n\",\n  \"63676560163395574209410974039n\",\n  \"1346859065344137509n\",\n  \"42626666034641293807810059734n\",\n  \"78692725054674081196434522843n\",\n  \"2899402626497036759n\",\n  \"4466386979191688634974299793n\",\n  \"73590084746022202502283403859n\",\n  \"859759454707498102n\",\n  \"49530047850904057997975767021157383838285524079350821991880424926644689941n\",\n  \"12n\",\n  \"73833755054290735615493473493n\",\n  \"59827914949558952876927624612n\",\n  \"1842769298355464193n\",\n  \"0n\",\n  \"31709724516548461033720090826n\",\n  \"30157355094312078251107514164n\",\n  \"2598882554441689462n\",\n  \"0n\",\n  \"340282366920938463467229529119593204504n\",\n  \"2783209552014905048n\",\n  \"340282366920938463475639663367112901035n\",\n  \"340282366920938463466510485605024151680n\"\n]\nOutput of encryptToDrandRoundAndGetCallData: 50 elements\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-react/scrape.cjs",
    "content": "const puppeteer = require('puppeteer');\n\nasync function loadWebContent(url) {\n  const browser = await puppeteer.launch({ args: ['--no-sandbox'] });\n  const page = await browser.newPage();\n  await page.goto(url);\n  await page.waitForSelector('body pre', { visible: true, timeout: 90000 });\n  const content = await page.evaluate(() => document.querySelector('body pre').innerHTML);\n  await browser.close();\n  return content;\n}\n\nasync function scrape() {\n  const content = await loadWebContent('http://localhost:8080');\n  console.log(content);\n}\n\nscrape()\n  .then(() => process.exit(0))\n  .catch((e) => process.exit((console.error(e), 1)));\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-react/src/app/examples.js",
    "content": "import * as garaga from 'garaga';\n\nexport const proofBn254 = {\n    a: {\n      x: 19326975765597999023026309242851464618295625967876195641207265702903971944714n,\n      y: 63835113064883221423828958902442994957834669122245713027012799265225733314n,\n      curveId: garaga.CurveId.BN254\n    },\n    b: {\n      x: [\n        15926258242285065430281020483827261910589109953358642697562602626998569607754n,\n        15482775443177023962384497625528997151098293635727021527127534892096530509952n\n      ],\n      y: [\n        10937776115245591292644949547008094885240742374542777857501160790374675834371n,\n        6691169928456984700056024515478772626466687376966760922939239504103847739755n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    c: {\n      x: 18548825552947889373136407684636046437705490810597995577018381312170231914454n,\n      y: 9890815383090898074006770716054740281870916546141552254207684185588486179606n,\n      curveId: garaga.CurveId.BN254\n    },\n    publicInputs: [\n      BigInt('0x1e17db88c1d2e83e49f692cce4bb8169309de90afb2b141156243106aa34b474')\n    ]\n  }\n\n\nexport const vkBn254 = {\n    alpha: {\n      x: 6763126530687886999315782887200758703366235230289874831627658839515656330867n,\n      y: 12297948670392550312636836114470404429657568989657927437959695771502446445179n,\n      curveId: garaga.CurveId.BN254\n    },\n    beta: {\n      x: [\n        15362786867599176251482538547160991918100063526460909721657878971551583339657n,\n        3804423004921008809819632629079723167970572551072432396497601916259815496626n\n      ],\n      y: [\n        21885719103633717693283841528133243510750001708857084897139570082577218850374n,\n        2076817281717432063622727433912740683541778328445173073030513609350245776784n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    gamma: {\n      x: [\n        1505558511994093266228972967760414664043255115544025409518939393775943607863n,\n        21131173266568468249589649137903719095480044620502529067534622738225157042304n\n      ],\n      y: [\n        4008759115482693545406793535591568078300615151288108694080317738431649117177n,\n        18835856718271757625037377080288624550370480296914695806777038708085497610013n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    delta: {\n      x: [\n        1497911744463986566314308077983046202449361313910668647770797503379177516252n,\n        10829154948357654897792444316512827659620136273388886760324770466776134105520n\n      ],\n      y: [\n        10850392992008761830625471778404650447428083833210258292805429019728339148884n,\n        12593805385728178657844996215584371401133999503150901444097670307277076679963n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    ic: [\n      {\n        x: 8279781786940010385190155571855963988492685408361021424114669994156938727612n,\n        y: 14410809027374663415870055712464930833085570569392210261413081131467855918386n,\n        curveId: garaga.CurveId.BN254\n      },\n      {\n        x: 10075286447651977124250383403562829564641026794366918560412684031493085120161n,\n        y: 13393494704849149158598989372790154670517815409968589728896053397011959461594n,\n        curveId: garaga.CurveId.BN254\n      }\n    ]\n  }\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-react/src/app/layout.js",
    "content": "export const metadata = {\n  title: \"Create Next App\",\n  description: \"Generated by create next app\",\n};\n\nexport default function RootLayout({ children }) {\n  return (\n    <html lang=\"en\">\n      <body>\n        {children}\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-react/src/app/page.js",
    "content": "'use client';\n\nimport { useState, useEffect } from 'react';\nimport * as garaga from 'garaga';\nimport { proofBn254, vkBn254 } from './examples';\n\nexport default function Home() {\n  const [loading, setLoading] = useState(true);\n  const [data, setData] = useState(null);\n  const [error, setError] = useState(null);\n\n  useEffect(async () => {\n    try {\n      await garaga.init();\n      const result = garaga.msmCalldataBuilder([[1n, 2n]], [10n], garaga.CurveId.BN254);\n      const json = JSON.stringify(result, (key, value) => typeof value === 'bigint' ? value + 'n' : value, 2);\n      const message = 'Output of msm_calldata_builder: ' + json;\n      let tmpData = message;\n\n      const groth16Calldata = garaga.getGroth16CallData(proofBn254, vkBn254,garaga.CurveId.BN254);\n\n      const jsonCalldata = JSON.stringify(groth16Calldata, (key, value) => typeof value === 'bigint' ? value + 'n' : value, 2);\n\n      const messageCalldata = 'Output of get_groth16_calldata: ' + jsonCalldata;\n\n      // Tlock encrypt\n      const message2 = new Uint8Array(16);\n      message2.set(new TextEncoder().encode('Hello, world!'));\n      const randomness = new Uint8Array(16);\n      randomness.set(new TextEncoder().encode('fixed_random_val'));\n      const tlockCalldata = garaga.encryptToDrandRoundAndGetCallData(1, message2, randomness);\n      const messageTlock = 'Output of encryptToDrandRoundAndGetCallData: ' + tlockCalldata.length + ' elements';\n\n      setData(tmpData + \"\\n\" + messageCalldata + \"\\n\" + messageTlock);\n\n    } catch (e) {\n      setError(String(e));\n    } finally {\n      setLoading(false);\n    }\n  }, []);\n\n  if (loading) {\n    return <div>Loading...</div>;\n  }\n\n  if (error) {\n    return <div>Error: {error}</div>;\n  }\n\n  return (\n    <pre>\n      {data}\n    </pre>\n  );\n}\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-webpack/.gitignore",
    "content": "/node_modules/\n/dist/\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-webpack/output.txt",
    "content": "Output of msm_calldata_builder: [\n  \"1n\",\n  \"1n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"2n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"1n\",\n  \"10n\",\n  \"0n\",\n  \"0n\",\n  \"75759116906411131289250842036n\",\n  \"1443316740970346987535705368n\",\n  \"708088064087366360n\",\n  \"0n\",\n  \"31894839170900604627010243180n\",\n  \"26562388390640533846098233871n\",\n  \"1678682860455561629n\",\n  \"0n\",\n  \"340282366920938463463374607431768211466n\",\n  \"0n\",\n  \"1n\",\n  \"0n\"\n]\nOutput of get_groth16_calldata: [\n  \"1935n\",\n  \"561151868347580495583090954n\",\n  \"76095163897123765080010407949n\",\n  \"3078964875882710626n\",\n  \"0n\",\n  \"68760071548346057889257256130n\",\n  \"33987009017980255890281589641n\",\n  \"10169520226989098n\",\n  \"0n\",\n  \"27526525353537266686222475850n\",\n  \"14475456397330869216192753448n\",\n  \"2537199318039088506n\",\n  \"0n\",\n  \"21536768652854740401912377472n\",\n  \"61033740543581523820282161323n\",\n  \"2466548432040548587n\",\n  \"0n\",\n  \"49356715888972701601325049347n\",\n  \"69887821523610458575318250963n\",\n  \"1742488265497548861n\",\n  \"0n\",\n  \"68106177540828336088045306219n\",\n  \"961134836681944563222599448n\",\n  \"1065964868903753173n\",\n  \"0n\",\n  \"1800806384039658546158952406n\",\n  \"44097612892395787951554989634n\",\n  \"2954998394940821894n\",\n  \"0n\",\n  \"57407696252580182379957914390n\",\n  \"68043785987214905719851221030n\",\n  \"1575697798130653691n\",\n  \"0n\",\n  \"1n\",\n  \"64622861075918021861446670503650833524n\",\n  \"40000715384012656934033607729992139113n\",\n  \"65343516826393976703500119419n\",\n  \"64215924997604874724268545467n\",\n  \"988361220710881918n\",\n  \"30419768492628197858619568261n\",\n  \"27248300164153194572764431995n\",\n  \"2977039154666701832n\",\n  \"65685384868591218376868464427n\",\n  \"70847639348750339988496276918n\",\n  \"477777041053646529n\",\n  \"29991939756641252358878134746n\",\n  \"39295947558852310211017126572n\",\n  \"2815628384676858047n\",\n  \"41723516601424502403187247204n\",\n  \"17017221925427596342628818049n\",\n  \"440483370607139100n\",\n  \"10413180469465695361837522183n\",\n  \"19423959337400646488247227266n\",\n  \"1196856567711091031n\",\n  \"14918739433528640782272739139n\",\n  \"2386255189434407583576372032n\",\n  \"2110030772171629820n\",\n  \"66403863065153192042460667734n\",\n  \"26490228722781507311620127895n\",\n  \"1376925612093868452n\",\n  \"16095686441528704658448370761n\",\n  \"51022389018232154188872438326n\",\n  \"1610491282614910455n\",\n  \"37997039872158612927722452114n\",\n  \"76461913933066610895201145075n\",\n  \"951074374291802403n\",\n  \"71303405408633411813876113602n\",\n  \"65378028046199379258519780162n\",\n  \"2796976393851271662n\",\n  \"66043194162972766020432949924n\",\n  \"72668519642029141849369643840n\",\n  \"1767421250104456939n\",\n  \"34724757470958269778491338738n\",\n  \"67907574914053181941994051296n\",\n  \"1074861315591297211n\",\n  \"57811416502141401297494384261n\",\n  \"66717953782642686044297384228n\",\n  \"619071555217927229n\",\n  \"11747815192199388258706152779n\",\n  \"39655522309044272057593243434n\",\n  \"2667518659266923661n\",\n  \"74545987263802105943401974456n\",\n  \"25100780504941704736052597181n\",\n  \"1614091262172996678n\",\n  \"61496830641585942728225636367n\",\n  \"47520662928915336127912320093n\",\n  \"1483128622047069223n\",\n  \"60688370891239308805053347678n\",\n  \"6154252422157238786881911133n\",\n  \"1595810747040934713n\",\n  \"4083087877564984515505707949n\",\n  \"8098795933662806280871012387n\",\n  \"392529588828430050n\",\n  \"14388273410011291023320103380n\",\n  \"59643003630595652724715495246n\",\n  \"2978244255961784640n\",\n  \"73005708620970672578538518429n\",\n  \"64274822400727474231693975117n\",\n  \"824761225328685267n\",\n  \"58979395441344004425345087397n\",\n  \"50034285490796369376342018474n\",\n  \"1071577406066675668n\",\n  \"37552244383550540565443579029n\",\n  \"66651519402295869947385119697n\",\n  \"1816081760201573675n\",\n  \"48020280081371249748563352979n\",\n  \"19387797072717949389382225132n\",\n  \"1075380445499260082n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"35717919122505863182793101258n\",\n  \"38321232967395819819318928199n\",\n  \"33653293845735846n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"0n\",\n  \"60126610212574038899502857656n\",\n  \"7521540037295293717633716927n\",\n  \"2853604986499631260n\",\n  \"34n\",\n  \"21051189327279847889561754607n\",\n  \"15679397574132606210591767826n\",\n  \"2165541175263187167n\",\n  \"11461504713279098434997837844n\",\n  \"29843864593792422920685859506n\",\n  \"1460931496621397613n\",\n  \"31444402670555100638844582863n\",\n  \"41564870089383627374040254466n\",\n  \"3317275169749288672n\",\n  \"72559701040108110454251376272n\",\n  \"22887416934578586124987839996n\",\n  \"233686850646424299n\",\n  \"51667851121405518271474152545n\",\n  \"8297160697759020633045233343n\",\n  \"2193876459774314419n\",\n  \"50048470992987075597478354517n\",\n  \"7622325433377464914372402739n\",\n  \"2354852892440837544n\",\n  \"51371930649223862037533589505n\",\n  \"79037515700470610379424985426n\",\n  \"3103776711054728122n\",\n  \"62017664743365054011497714498n\",\n  \"18400895627048394641412939651n\",\n  \"1348549913115407530n\",\n  \"68135824164391051249850625519n\",\n  \"66467776056179325801077769907n\",\n  \"21934170737946721n\",\n  \"43733194692565917370190335652n\",\n  \"20871497235942649279957719973n\",\n  \"668366294714005293n\",\n  \"69461224576101086641240237729n\",\n  \"66163212446743341874016516713n\",\n  \"2187872754580648643n\",\n  \"17220145241406859216639481755n\",\n  \"16637691490800642336304328427n\",\n  \"699908274655976347n\",\n  \"63497807423928467541336180608n\",\n  \"5826616601935275548523889948n\",\n  \"1995878641893268059n\",\n  \"45351336804917798268705814434n\",\n  \"32809386436253774870015191481n\",\n  \"2479634507910679085n\",\n  \"29902151727900563245652302915n\",\n  \"70978449320724687288838934154n\",\n  \"2324927884830925807n\",\n  \"70956000718854853515484101425n\",\n  \"18794223695576985859644098754n\",\n  \"851712710373510834n\",\n  \"10098225054790962506843798879n\",\n  \"23663666343921865703011477995n\",\n  \"2539135702270490911n\",\n  \"13745949463631524266514217644n\",\n  \"70097334773007528061348260208n\",\n  \"1449740726324507950n\",\n  \"77747255839650031066990598333n\",\n  \"33186206179829484467075523327n\",\n  \"3072781249488320507n\",\n  \"73980383885811324159893986758n\",\n  \"1765445723258696625718806089n\",\n  \"2271055079390534326n\",\n  \"65413433113844994807777190576n\",\n  \"48033870016967321544035758027n\",\n  \"486427727733872709n\",\n  \"26974899297726311987406093631n\",\n  \"5590641036960446176988521755n\",\n  \"827510576486023036n\",\n  \"29009837304935242599458620885n\",\n  \"20410410399336048506493809410n\",\n  \"1954580703151327584n\",\n  \"64135814011222089868428198367n\",\n  \"56261294792918650387740643327n\",\n  \"1226348411176360117n\",\n  \"71834179960057214052393522783n\",\n  \"46252419010406289556729694820n\",\n  \"1393685374555389118n\",\n  \"71368042768790547323904986882n\",\n  \"66161706759499128280107017373n\",\n  \"2031846388120562115n\",\n  \"21220965229609488481377288540n\",\n  \"63634474338013450603335409627n\",\n  \"821621475859559449n\",\n  \"18432973800914453913616171088n\",\n  \"8237366564750917100218776918n\",\n  \"3448970319177548904n\",\n  \"51266071561401723888120442902n\",\n  \"33637427514172279767467204013n\",\n  \"3304964589143840434n\",\n  \"38819453582756888614388081676n\",\n  \"38995523514738195349996597496n\",\n  \"2323381859757397191n\",\n  \"60884424754479179074928199128n\",\n  \"3834764671648885586861880739n\",\n  \"864611594127789300n\",\n  \"9851774469429652901432809299n\",\n  \"37101389540039872112071709899n\",\n  \"2559626381308197564n\",\n  \"406646090122284731360238690n\",\n  \"44652954714826373590985929530n\",\n  \"683398595921263332n\",\n  \"20271182213679030346920227775n\",\n  \"37600328594433178897257972399n\",\n  \"432396126057182521n\",\n  \"4187404064813213379278146332n\",\n  \"44537571235199588707429377798n\",\n  \"3148695479824963911n\",\n  \"25801656964836714839982503508n\",\n  \"51572074862943493111482365520n\",\n  \"1230107506438930488n\",\n  \"51625253538057090130489675612n\",\n  \"11815326077763625426679125713n\",\n  \"521507079758837629n\",\n  \"9648925458348520397354094791n\",\n  \"31712274845777377436963587786n\",\n  \"1997027570431487029n\",\n  \"67411860089204789431616372347n\",\n  \"66528411456550554620624110152n\",\n  \"186478859944874837n\",\n  \"61267275259145597446660035124n\",\n  \"8554664316600082912178209665n\",\n  \"2375445434845419873n\",\n  \"1589782365755830876261985911n\",\n  \"14834270454057237025174127570n\",\n  \"963005115183332390n\",\n  \"23249702285165109375700438720n\",\n  \"20760791667651963569657008881n\",\n  \"2149068190029611973n\",\n  \"74674158355316816901821060837n\",\n  \"13278131002009659818927519878n\",\n  \"992778641153509292n\",\n  \"8743794935416188942200722720n\",\n  \"51445266496970909016857135378n\",\n  \"438732749332832318n\",\n  \"64511635865187456937539832569n\",\n  \"68455428209776466334096458368n\",\n  \"1196547129512189429n\",\n  \"16652864649326843859619189651n\",\n  \"47031229552259361752165531n\",\n  \"1977848333533964373n\",\n  \"32230433718106499209616712783n\",\n  \"50152042404552913889735459326n\",\n  \"2647553318887157906n\",\n  \"15558003702184603194095500825n\",\n  \"75789384763919593972512743955n\",\n  \"3199452366147221980n\",\n  \"23639206276595496029173201731n\",\n  \"49198122874004051169498469698n\",\n  \"3017499313473475023n\",\n  \"14633623354742611699704494011n\",\n  \"13838793228838994907197164815n\",\n  \"1865567661799564691n\",\n  \"63554437295278917743885851002n\",\n  \"43774994641723817700539915508n\",\n  \"2096263880799998644n\",\n  \"39241367224191359271532780985n\",\n  \"11996031360599781980224407856n\",\n  \"669587303349757211n\",\n  \"70309465524306380398946854940n\",\n  \"69691793870844727391235380992n\",\n  \"1097884931999290463n\",\n  \"4880550284873697839328338960n\",\n  \"8683184578595981266384193421n\",\n  \"1704353262400573542n\",\n  \"43209925421984317108056960491n\",\n  \"71838424302727061831479195619n\",\n  \"1719485935656079288n\",\n  \"20281500369447070817728689103n\",\n  \"7827101470501627130702651299n\",\n  \"1802787150264131673n\",\n  \"46990609747636025825158033861n\",\n  \"44506561326339289883265865893n\",\n  \"168363193009253293n\",\n  \"72644600526598920979602995563n\",\n  \"23734595505295435652505772841n\",\n  \"3066825941193215846n\",\n  \"35922864395887621958431954121n\",\n  \"36164080296393340386782836739n\",\n  \"2806406594668460083n\",\n  \"9559608083309233656821926408n\",\n  \"21435397197883361901646100159n\",\n  \"1173438743001539534n\",\n  \"45502332725513884072895701183n\",\n  \"21110593816020485943815437920n\",\n  \"2156839344197406156n\",\n  \"14935455230205682855615996549n\",\n  \"3176509029633635649806564693n\",\n  \"2744065159326778800n\",\n  \"50144289937074876149408247339n\",\n  \"73476828119785067069284584679n\",\n  \"1137921320963525519n\",\n  \"7764782370318985672713086089n\",\n  \"35186333034809438599544173388n\",\n  \"2599319187054853443n\",\n  \"71090896326220687050059751719n\",\n  \"7138127862158940765217036726n\",\n  \"2525413991973636711n\",\n  \"74465662641034900763924596241n\",\n  \"64800563131735459820423413678n\",\n  \"467645211882593334n\",\n  \"35429207184442884958891366618n\",\n  \"32026071525343635101462583825n\",\n  \"732661589473603894n\",\n  \"53979236240639306101606255299n\",\n  \"42289323195165961060464784974n\",\n  \"2572678142594168339n\",\n  \"34781401150182625703506517963n\",\n  \"27502296245160796607775189158n\",\n  \"204754437845996963n\",\n  \"60295830689532650505249825677n\",\n  \"25033548320502415354132760311n\",\n  \"26918649856759092n\",\n  \"53883044729840223319972205798n\",\n  \"71229970233113264180243241621n\",\n  \"1096143763692361182n\",\n  \"23670625124894730163037915585n\",\n  \"66188859433247255337619139871n\",\n  \"2789875774976133848n\",\n  \"76287870172839315742103539908n\",\n  \"76696206429019592649532825371n\",\n  \"1140810575629679716n\",\n  \"65695197715200264171919419792n\",\n  \"64578697338608806055715988010n\",\n  \"1315508308085028070n\",\n  \"78097114957711978300958275236n\",\n  \"73435222529435448525954708815n\",\n  \"1357585460514972583n\",\n  \"7357385422266450818170168488n\",\n  \"41750638133784298446701227299n\",\n  \"2309087687582896396n\",\n  \"59893979186320257893680148671n\",\n  \"70073254756682993544223051173n\",\n  \"3379633857316028827n\",\n  \"63037751789054738563399308545n\",\n  \"22112638657428976200628648553n\",\n  \"1119955028522904661n\",\n  \"17789959924300679578888409433n\",\n  \"32036177498553475203925266628n\",\n  \"3282049411090141820n\",\n  \"28853440708133119682221591754n\",\n  \"53037088663773523321481680370n\",\n  \"33889236786700338n\",\n  \"47866115906431522995214087729n\",\n  \"65896044771509521496549322945n\",\n  \"1356170216477027582n\",\n  \"72025359186703704066599325205n\",\n  \"14290937382512145681745832413n\",\n  \"235291859370816977n\",\n  \"16739080450814900672563464076n\",\n  \"27155915888194232201712953259n\",\n  \"2201285100786606817n\",\n  \"79046757705903490925593572396n\",\n  \"41590525534061554138727710174n\",\n  \"1563993153777110442n\",\n  \"58644351226953768961970699175n\",\n  \"71513413355714071072616721058n\",\n  \"771468756865502494n\",\n  \"56315873417343912546874324750n\",\n  \"66995041844358703653717763298n\",\n  \"1564628505321775490n\",\n  \"68742094005504029111318961475n\",\n  \"43257881480227388188853022203n\",\n  \"2827885137176633354n\",\n  \"60013377537965180515452389042n\",\n  \"22615548017942376680894051034n\",\n  \"2778940717048846996n\",\n  \"30216926479141873412912870389n\",\n  \"67097866317972012436735650659n\",\n  \"1001082522948099952n\",\n  \"31879429787569811794175043050n\",\n  \"57916743777618192263856200515n\",\n  \"1477201521425100888n\",\n  \"63117110331861368443138300600n\",\n  \"24455052765578778318741183737n\",\n  \"3145320365602131181n\",\n  \"27504400622945393457424964663n\",\n  \"18149654277116955082138788671n\",\n  \"709865641588578406n\",\n  \"51203413602847718278618462447n\",\n  \"32871208476003646471375256821n\",\n  \"1972541565241208115n\",\n  \"79118404692942875097520377767n\",\n  \"48815069625306356145460113214n\",\n  \"2800168047740476387n\",\n  \"27090046108651136752525050251n\",\n  \"17050737426763583806790779471n\",\n  \"1273566324033923836n\",\n  \"49543917066569282928794484300n\",\n  \"10290628042158833070532221066n\",\n  \"3469066870558011680n\",\n  \"42005113796531220880503084548n\",\n  \"60064195130891515794312310901n\",\n  \"3245851193684195107n\",\n  \"37533982385009798315342336648n\",\n  \"10267823027838019609009260399n\",\n  \"2025345482262498605n\",\n  \"34864622598934340124988581388n\",\n  \"48347073555555495737374318810n\",\n  \"2673244105079290838n\",\n  \"75957016907360510463610401727n\",\n  \"23977086141109407077488719105n\",\n  \"732491745580907274n\",\n  \"64604276948999648627686221332n\",\n  \"3868070793275280858296301394n\",\n  \"1873653426250118454n\",\n  \"15570553586934053483564418077n\",\n  \"13639547122371116255200424101n\",\n  \"3229806347752382046n\",\n  \"69627176750917937037127756524n\",\n  \"77527130421629244161614984692n\",\n  \"2205592855904802747n\",\n  \"42359401661274759693285654733n\",\n  \"15319487818905735149374624862n\",\n  \"3299209455827802664n\",\n  \"913752139298990313523799637n\",\n  \"70257873178701883303322833580n\",\n  \"3363278906733915791n\",\n  \"3719386124896722977369262005n\",\n  \"53915264239484240561994801723n\",\n  \"1014563467864375643n\",\n  \"56643381820560944379080271087n\",\n  \"5451127454093963182673395845n\",\n  \"1647155594727927302n\",\n  \"74031948470913728924354306654n\",\n  \"67046184840603355661228918718n\",\n  \"730434808359892479n\",\n  \"58832815659134274668136294794n\",\n  \"44220894708044864609266466973n\",\n  \"428689828657455715n\",\n  \"26619728344740812354339350673n\",\n  \"55972705855091654840275771393n\",\n  \"597472825198654088n\",\n  \"1452568843776109298902292527n\",\n  \"48082065429135088437634332196n\",\n  \"1047157723497573338n\",\n  \"28285154322504134404521941699n\",\n  \"56070279326493931276099147353n\",\n  \"1647252454052220783n\",\n  \"65027676769817342180184568252n\",\n  \"12685362344487350979600199772n\",\n  \"1402500493179000567n\",\n  \"12668630001282077875777731433n\",\n  \"55553251572483079593258301341n\",\n  \"2382205981458202111n\",\n  \"50473524893888759380289559496n\",\n  \"52220217290909756763540198313n\",\n  \"2029638412495399688n\",\n  \"7502774623130712545083224028n\",\n  \"73425515727643581896824036686n\",\n  \"2771702310825972693n\",\n  \"4639820922586718498241340517n\",\n  \"46582679696898380484679332702n\",\n  \"2620580077787400940n\",\n  \"51782105270520932573551959292n\",\n  \"74517889523497564960562458357n\",\n  \"79055126752843995n\",\n  \"10925640711936519280913334701n\",\n  \"11947058347966705959371810733n\",\n  \"43716694970268491n\",\n  \"35453676805113974113471109604n\",\n  \"12015889727201641553493717139n\",\n  \"3275286259969106630n\",\n  \"70932279409438704808566723573n\",\n  \"47041530965489511382629531879n\",\n  \"1256401409005218192n\",\n  \"46895749660336733332848035754n\",\n  \"40261009687444665011442182710n\",\n  \"1306436215925446460n\",\n  \"3904962902077066763622365736n\",\n  \"36103992387013546339910627073n\",\n  \"1329335481346702678n\",\n  \"57853677844329075763360620729n\",\n  \"61001619991056325367390311148n\",\n  \"1235032555631976826n\",\n  \"58692146235938833274542664790n\",\n  \"14589363842493324627243766856n\",\n  \"578262325105051129n\",\n  \"37980379958779218087580100271n\",\n  \"57690546822788520479506631792n\",\n  \"3164185857728705638n\",\n  \"45598806448478931852264970697n\",\n  \"29033375842093843451718686864n\",\n  \"2812217528418815016n\",\n  \"9663261157782365056384592697n\",\n  \"44620211458433011608252253672n\",\n  \"2505651240889113840n\",\n  \"48502340833312690180905327065n\",\n  \"9352266604910376416980234379n\",\n  \"3341395763378874957n\",\n  \"35507650777754495555508745994n\",\n  \"64550352482963692428938364344n\",\n  \"1749731610964724298n\",\n  \"72801722493214401326730125326n\",\n  \"55956888553336351398608259633n\",\n  \"896001678647446033n\",\n  \"30516385505393014949750902877n\",\n  \"47315718952109319710441627150n\",\n  \"1388483706936013349n\",\n  \"32381991427814516368016795653n\",\n  \"59696292811917044385937202833n\",\n  \"618914335291991958n\",\n  \"40375787626773409929606022175n\",\n  \"64734613933900308276892757597n\",\n  \"2556069305521992095n\",\n  \"58654528682801174800851099376n\",\n  \"11593522535604870003716248394n\",\n  \"2125230714317219300n\",\n  \"8061995955571015171488513388n\",\n  \"47983447012081651413970228934n\",\n  \"855542739847145422n\",\n  \"59096469339608638609245068515n\",\n  \"7673808125695463322887566290n\",\n  \"1385253448294382073n\",\n  \"25340909062918393540888464015n\",\n  \"9795256553635962173776771050n\",\n  \"3012016973098277348n\",\n  \"33467611330524938973631050712n\",\n  \"7543431037219165063475505539n\",\n  \"448151223182465539n\",\n  \"22750106248651778926545160954n\",\n  \"25740569688692303261800730858n\",\n  \"1075240126364963450n\",\n  \"56338203997489686691769068850n\",\n  \"62119360873725897456686490753n\",\n  \"1222146081347045140n\",\n  \"27338323756657113133884361560n\",\n  \"21141429927442113006964516579n\",\n  \"462132336382397961n\",\n  \"4987343640321990641559943818n\",\n  \"58829032105334349895296634715n\",\n  \"3177465831253470688n\",\n  \"69096263705896112247403554129n\",\n  \"29492604434954899550510960365n\",\n  \"304239915265350366n\",\n  \"66375851691134826136210085333n\",\n  \"44757375154942980538763091305n\",\n  \"1112855489475878924n\",\n  \"70069037784938962740775503666n\",\n  \"12717652252841341839220495543n\",\n  \"2918096944668928835n\",\n  \"18321962109897171704378960368n\",\n  \"61813672462196073792006627549n\",\n  \"2734946711892636188n\",\n  \"64219561440442257822526755189n\",\n  \"8503031322535266331858567242n\",\n  \"3223902208326320319n\",\n  \"63116174136664698830215774786n\",\n  \"2759322304337380924973025029n\",\n  \"810068357014304774n\",\n  \"15698684552711747426349376896n\",\n  \"65762055793295617462571353752n\",\n  \"518270689795187122n\",\n  \"58150828468103287645001826637n\",\n  \"77452960139151639571846482697n\",\n  \"519559051146038460n\",\n  \"72625801975239649642036163890n\",\n  \"39078044248618521225250269350n\",\n  \"2190524057325078928n\",\n  \"27770888055874136986828633484n\",\n  \"41773083279140557423975570256n\",\n  \"2854828164966176931n\",\n  \"627836434493841003902237785n\",\n  \"77928664588771202997039373627n\",\n  \"330865869276931200n\",\n  \"52935592469577214913105764520n\",\n  \"20197659873511917804524429378n\",\n  \"2125370194946441846n\",\n  \"3460074836406938711660958301n\",\n  \"52820564261229479633548811299n\",\n  \"2919129481241566745n\",\n  \"6675772908450017734753351305n\",\n  \"65258735248680451317985314824n\",\n  \"2950671717077079181n\",\n  \"6822322071311459654365919975n\",\n  \"48497518547901827883287152419n\",\n  \"3243229764836791767n\",\n  \"72937532385990220357716354648n\",\n  \"19074513737405788027838151006n\",\n  \"1297437039234841476n\",\n  \"75502921753638151385835217223n\",\n  \"15306268504859852745422227938n\",\n  \"3143438951510181753n\",\n  \"3947335170074803838440311819n\",\n  \"62699530989773040321915910090n\",\n  \"3215975868729087991n\",\n  \"45236352461588188769215285451n\",\n  \"41706782526887442329166221445n\",\n  \"3168773580470738009n\",\n  \"75285535419605148224367004655n\",\n  \"20481966054007305592119557920n\",\n  \"1679995277184070400n\",\n  \"45190873120635261257451746066n\",\n  \"47696678647110719375889237738n\",\n  \"2068610507691385147n\",\n  \"9915927934978371252308896949n\",\n  \"31159305954355174048281405375n\",\n  \"1704598723840881213n\",\n  \"67338469563962359211325034773n\",\n  \"41738724864530875640824663606n\",\n  \"2293929193371443079n\",\n  \"34807312716413150046069343319n\",\n  \"70801066094208025212394559646n\",\n  \"2518515824100660756n\",\n  \"76811947889156401932764711781n\",\n  \"43817729339652461426643528955n\",\n  \"2039489180470709457n\",\n  \"38477432026452102589204844897n\",\n  \"27527167249603525516926315406n\",\n  \"1191468099071291308n\",\n  \"38041851156661687253492123536n\",\n  \"54288163040365572080441140556n\",\n  \"911480122138689106n\",\n  \"4974069079367885339264267782n\",\n  \"28880616750574662115261710630n\",\n  \"2834730446537796035n\",\n  \"55466841778289154595312506036n\",\n  \"47524577058256910308968549882n\",\n  \"351449977223840700n\",\n  \"62311990134227217524354071274n\",\n  \"75586193885025429015569590193n\",\n  \"545412183548073756n\",\n  \"79201290258654825630711427638n\",\n  \"77524373992410852423354047680n\",\n  \"552010389188782621n\",\n  \"13584773290145166716045719634n\",\n  \"57089761411485171751249424952n\",\n  \"1694608384682621747n\",\n  \"29538886750825184946212760314n\",\n  \"63894150012954354476012028271n\",\n  \"381542434687157486n\",\n  \"18078760560177937565267140464n\",\n  \"74003801426748288272147648907n\",\n  \"42337564080893923n\",\n  \"76689566315090503029029632865n\",\n  \"77474971819185712518886624915n\",\n  \"372114354534855369n\",\n  \"3011898200892081576513307862n\",\n  \"13966070005688554503624007786n\",\n  \"470413759528293312n\",\n  \"39357561183949775040925825237n\",\n  \"70682164693568724918268906963n\",\n  \"1376182782398783885n\",\n  \"41538213381429219620578361408n\",\n  \"42254768852299863792709628627n\",\n  \"3431309948863311296n\",\n  \"29234390314689913487082552719n\",\n  \"17916853178952663417328241903n\",\n  \"669291203853282419n\",\n  \"33249562629014821971547667642n\",\n  \"26222791431277453980835687680n\",\n  \"98534970627714358n\",\n  \"25021648199838864664290068537n\",\n  \"20665859250814395210947344246n\",\n  \"662389299694120248n\",\n  \"72307113898419621240789872204n\",\n  \"46323053668872253004980165076n\",\n  \"1041999687571616075n\",\n  \"8985042666921921648283132643n\",\n  \"74513886773734802806022422301n\",\n  \"2603455779145809119n\",\n  \"15411135359682619522278947280n\",\n  \"27784420314858949438220006926n\",\n  \"450671277926568052n\",\n  \"2831173742809690598851605179n\",\n  \"28386483802658122108161613621n\",\n  \"1424370976519373932n\",\n  \"31198231619878444700423211860n\",\n  \"42295311569311653123964908500n\",\n  \"2935759999014605210n\",\n  \"32001363507887263736668102660n\",\n  \"46912833713119636774180995741n\",\n  \"2092237369418424823n\",\n  \"78656477190391127646333527543n\",\n  \"41056006364555863740114989146n\",\n  \"2171263570612200061n\",\n  \"21422129487009930658303224502n\",\n  \"46206308103083011878154386775n\",\n  \"1874554378158482533n\",\n  \"36641496950703925635911572554n\",\n  \"48432166499307362117455688176n\",\n  \"362387825758837904n\",\n  \"27092632894596570716463916204n\",\n  \"20108561967338242154648349930n\",\n  \"1880193076762165445n\",\n  \"9593372273263129574197363679n\",\n  \"48018078028931030587694756618n\",\n  \"542974594247287387n\",\n  \"14814551631877080383283532261n\",\n  \"33496168748765220079451008919n\",\n  \"2250598863496646490n\",\n  \"44869586855816636221572912809n\",\n  \"41783360501362407212785286614n\",\n  \"2362538758680925884n\",\n  \"47048981182078605465642165702n\",\n  \"60518795030556750835816928982n\",\n  \"505511636936241905n\",\n  \"58024262056741504028876642662n\",\n  \"50138980925793649225004896980n\",\n  \"2579777888438614723n\",\n  \"6523114729709277602770738046n\",\n  \"28358393151053570058817793343n\",\n  \"3081381986289034984n\",\n  \"15900191280315068679181663660n\",\n  \"48577168032374944428952731072n\",\n  \"830974214184407623n\",\n  \"10274561196236136318135959057n\",\n  \"26148664358554534185218032007n\",\n  \"201377610767670386n\",\n  \"11368406426935765376362633788n\",\n  \"4122436782704069458424072833n\",\n  \"2934079973878820714n\",\n  \"66892750247258968804173976659n\",\n  \"76380379537218876441475920731n\",\n  \"3380019238411335234n\",\n  \"50717224916942478279258173891n\",\n  \"44470393688322556765105136550n\",\n  \"1813355330674964836n\",\n  \"8515532742277261388949469229n\",\n  \"33221912074775270762895168327n\",\n  \"2646766706385940242n\",\n  \"11140136119772415355412357379n\",\n  \"44150773111766484868566388647n\",\n  \"3191354614138223649n\",\n  \"30708778779429297397760149496n\",\n  \"67837687252340085721524474101n\",\n  \"3301367800510383551n\",\n  \"10954599956402707572521260184n\",\n  \"21030000566064580489911242942n\",\n  \"1828905939385555740n\",\n  \"26254579696623038244113820321n\",\n  \"76089322519690535032690356215n\",\n  \"868757520992376209n\",\n  \"77540171332511416804096348278n\",\n  \"10474304059709005130776549459n\",\n  \"1665346113039180866n\",\n  \"77071906535707552468440337167n\",\n  \"76416817616469856915552001970n\",\n  \"2619908781683664602n\",\n  \"40713576015254467501617369989n\",\n  \"69174809057973808586596761660n\",\n  \"364462143474967775n\",\n  \"3388865641890523266901884229n\",\n  \"46510386965164679950611269041n\",\n  \"2868959718371388528n\",\n  \"38291153048032659818161082470n\",\n  \"57992998428591158266306092260n\",\n  \"2140250223970187383n\",\n  \"74674643030181299821451279762n\",\n  \"61603307939095484817637012597n\",\n  \"1805808601029218696n\",\n  \"37221838450591689221386319329n\",\n  \"68301391492878568825616976727n\",\n  \"2237000809794684762n\",\n  \"11407285364976644693945059208n\",\n  \"25348058182926100240298110509n\",\n  \"3114508241594272017n\",\n  \"75356748694855659604450932050n\",\n  \"73487079967561788811810515931n\",\n  \"1490776583857675442n\",\n  \"54218989991798315687885361450n\",\n  \"20703329376060767478344708910n\",\n  \"2199487792587152210n\",\n  \"75111061944546058209924381826n\",\n  \"59244444067541601191271416829n\",\n  \"1581429188013860604n\",\n  \"52660822561915117683975147831n\",\n  \"47783082248718407900747485302n\",\n  \"1369252091872015433n\",\n  \"36417458042350421490821725117n\",\n  \"31829247002542379610343848353n\",\n  \"455784377300586483n\",\n  \"16833465703461845689857266397n\",\n  \"71194569481351283884295739145n\",\n  \"3189866189053900612n\",\n  \"65858387085894768841721032786n\",\n  \"42191857983305827191840357582n\",\n  \"666015291493419098n\",\n  \"27916318777227697186981470587n\",\n  \"32438460617546390776125662122n\",\n  \"3438854808891043135n\",\n  \"41197663088738641800559183911n\",\n  \"55140791537758229983041465056n\",\n  \"1162917064515090408n\",\n  \"59276808448795540978821008029n\",\n  \"55346073844723874343240998585n\",\n  \"2138546228419844587n\",\n  \"29861692804477614266603259375n\",\n  \"46434932953097909216915612814n\",\n  \"2786750119186865986n\",\n  \"2914382294411148824195592597n\",\n  \"47257202751523172671381039762n\",\n  \"108099711483611500n\",\n  \"42513194204119630092428609239n\",\n  \"7009779828784113435151735800n\",\n  \"1568976973765903017n\",\n  \"74506942497632859791810397801n\",\n  \"75159716442684547730197176733n\",\n  \"214522106108977303n\",\n  \"307807623661151452830127704n\",\n  \"69355418870826927485148435899n\",\n  \"1716229337114513433n\",\n  \"57800790680731912804700220994n\",\n  \"33865695886637783077735975519n\",\n  \"1521543041885052952n\",\n  \"61900084065708307372472439490n\",\n  \"9670136848396954396035168772n\",\n  \"705486756697563485n\",\n  \"65695693080875904861430309269n\",\n  \"42258749277647240519914054375n\",\n  \"1610937183743514752n\",\n  \"45949364456230722028956610312n\",\n  \"71318597512050155765983898976n\",\n  \"1419180020927833749n\",\n  \"16722582418318977044812304850n\",\n  \"64520646005354913944304541442n\",\n  \"1349757657977694032n\",\n  \"23453477023590312415905476662n\",\n  \"20988708348761074914346191082n\",\n  \"2734679321361253617n\",\n  \"3531335181910221180679210683n\",\n  \"77069908679139173478778593856n\",\n  \"3209489805214655859n\",\n  \"15423046625290420432194363954n\",\n  \"66544315732344216335597482829n\",\n  \"3417056483929987132n\",\n  \"23412416307661786237706973063n\",\n  \"52684903097691240819445939916n\",\n  \"3087013127443362602n\",\n  \"59516131369415164617233433764n\",\n  \"22552284363447521404574779744n\",\n  \"440598570727652332n\",\n  \"10078101871820643773664346515n\",\n  \"53180025648864462561753056892n\",\n  \"1238481677425258091n\",\n  \"66978851386839209947975732205n\",\n  \"76469976691658858609518100317n\",\n  \"2669015410315668427n\",\n  \"10462115063986428235746660388n\",\n  \"20612418707380044137824607138n\",\n  \"913149152876393845n\",\n  \"12896643578852573199148249630n\",\n  \"65916513826164228515537693476n\",\n  \"1689818392090951394n\",\n  \"48812924094784749209418690439n\",\n  \"21075229147504768099245857693n\",\n  \"2023634641390620097n\",\n  \"46841988916092209879920999223n\",\n  \"16626325630569367486087793088n\",\n  \"2520424161966279659n\",\n  \"66590657955425334169984583445n\",\n  \"43137455439307899619378709852n\",\n  \"119691013666955759n\",\n  \"59528138117541221723219264069n\",\n  \"6039238025418276887251147184n\",\n  \"1423016249189720303n\",\n  \"74476981597135756778074726485n\",\n  \"57871369440317946035711890073n\",\n  \"1799738956519083373n\",\n  \"61169922085945703273845146359n\",\n  \"58536191609701145724674103544n\",\n  \"678581665969651580n\",\n  \"29756753901276156089801861773n\",\n  \"37715386191992628222582900313n\",\n  \"1839293100231634062n\",\n  \"8545730587160341404066690935n\",\n  \"73310320371102040457790413928n\",\n  \"2943087579162219865n\",\n  \"3592679410576312851945554995n\",\n  \"63768122222562308688415150519n\",\n  \"2852416365710961566n\",\n  \"65734466853903663026216615808n\",\n  \"75611388663630224651662180524n\",\n  \"3082245111526479768n\",\n  \"42542028447397082553823280434n\",\n  \"15266201170439359558184400250n\",\n  \"2959319188559780389n\",\n  \"62084872176674708014188872797n\",\n  \"49471685826369556510350964812n\",\n  \"3044342635568692521n\",\n  \"52766810402300947123818998320n\",\n  \"57464266928926410524441305379n\",\n  \"2678492530248725715n\",\n  \"63759940946573266111589745544n\",\n  \"1239422070074535035165804970n\",\n  \"3011362073292317527n\",\n  \"5312425357216197805891517417n\",\n  \"8604490350019536611169668726n\",\n  \"1278264119461231226n\",\n  \"23413740732153092734953046582n\",\n  \"2351234330786062681522357509n\",\n  \"3063446156461791539n\",\n  \"31192263866697541487222909336n\",\n  \"53213425910476786883061415945n\",\n  \"3388535254355309510n\",\n  \"76222049202953784940228041093n\",\n  \"8232814450668299001215927167n\",\n  \"1010418058221874517n\",\n  \"30375045069912390061370886372n\",\n  \"76858962311200653420966476141n\",\n  \"2531834595530804919n\",\n  \"72838406196796824316965387556n\",\n  \"16107338032535514271932130242n\",\n  \"826038058455425888n\",\n  \"74047817357615679402104886971n\",\n  \"66250974048331219261305648117n\",\n  \"515372630941459652n\",\n  \"49140383045734318581810247391n\",\n  \"38552127106329617678305826510n\",\n  \"1791730195926210707n\",\n  \"20447547859709794457924179129n\",\n  \"52480964595913357482998508931n\",\n  \"419726983098458687n\",\n  \"20434453705733747059793719688n\",\n  \"22732218969594988459804019164n\",\n  \"721740589738128975n\",\n  \"63178390467425871623450374916n\",\n  \"58781628951232066578669558088n\",\n  \"1366096141210552719n\",\n  \"30310055907701667442250131224n\",\n  \"77693499391068805405178198648n\",\n  \"2419127900721456602n\",\n  \"72238281634987295743046110639n\",\n  \"2759706666093555363424148875n\",\n  \"2871042634310332424n\",\n  \"58186331935313172107712023092n\",\n  \"73009408672165436946758189888n\",\n  \"1138172672402058824n\",\n  \"45794206921224716587506811973n\",\n  \"50074044364882080121299615241n\",\n  \"201200847748951804n\",\n  \"41753381957343686084038148154n\",\n  \"16651255916405576823960096368n\",\n  \"744771251876887027n\",\n  \"6397253273640502791149864078n\",\n  \"67730045189242272443620838555n\",\n  \"2723512022810421168n\",\n  \"20403399159094844095476748628n\",\n  \"46114852246774129546878110205n\",\n  \"2163837250026966482n\",\n  \"63507059223060953171650485733n\",\n  \"27872394523028449929373211791n\",\n  \"1266384674015277092n\",\n  \"31341532803878701385180273244n\",\n  \"56274201404580685976997533743n\",\n  \"431470279371342601n\",\n  \"27146401285505116697408502780n\",\n  \"10909809704395711896795601995n\",\n  \"823727347575104764n\",\n  \"78157451508256479551851793287n\",\n  \"7934224114897115965586132150n\",\n  \"2561622534344592225n\",\n  \"52031374290403822978799313483n\",\n  \"75680335637831520600351100052n\",\n  \"2240257882085839580n\",\n  \"35818819658139744996071875447n\",\n  \"62532608351434239965548606901n\",\n  \"2997209098633992908n\",\n  \"35801460645260708494826382933n\",\n  \"6962199370752725968726753829n\",\n  \"471191881884558376n\",\n  \"51494347593311565178389849721n\",\n  \"27959136057874496572927068138n\",\n  \"2054885609386822401n\",\n  \"1903400454085938493722464234n\",\n  \"58252527737465224754126905441n\",\n  \"871049256780466220n\",\n  \"62266126172301828292957015888n\",\n  \"29942402306346798464030870789n\",\n  \"2439682690873113741n\",\n  \"58828716449315637847726991566n\",\n  \"33586884830050665361484057496n\",\n  \"1850240284198082738n\",\n  \"57256720773892932068692318575n\",\n  \"43906884659388043006991040937n\",\n  \"2567264210368699586n\",\n  \"37303325532466691611774319975n\",\n  \"1023775330119159065320215646n\",\n  \"2970467943548704391n\",\n  \"6719369853840095911284134964n\",\n  \"52698184868933442534169228704n\",\n  \"1590449702912303791n\",\n  \"9163234315649800019839577781n\",\n  \"5096786077915756093838027866n\",\n  \"2604014912333559946n\",\n  \"22626562141910724736547894073n\",\n  \"1221514787490597839172086118n\",\n  \"2021859363658276538n\",\n  \"29343228808229785648243946635n\",\n  \"17107161597392558070179986947n\",\n  \"2142074198041769333n\",\n  \"8295437982000203433981112803n\",\n  \"32281278698888589789154221048n\",\n  \"2261976931796110908n\",\n  \"19003064635652370381400548000n\",\n  \"5388386401569756312458644562n\",\n  \"3154333183807592746n\",\n  \"57635002029571841636737463711n\",\n  \"56991897992879623406006006725n\",\n  \"2842694143682003853n\",\n  \"73379904593405458046663259580n\",\n  \"839437272553377608023038726n\",\n  \"3093165198442302924n\",\n  \"33419448607193509624332386145n\",\n  \"16740311080067952025303937955n\",\n  \"666860562806181637n\",\n  \"8797571923563716660075774195n\",\n  \"75022438860744435659585766685n\",\n  \"1558560135470851650n\",\n  \"19713896344694960627284542368n\",\n  \"78388507052884523368130573724n\",\n  \"411547793569600371n\",\n  \"52610184319591489722152436723n\",\n  \"58886726417514761894083084350n\",\n  \"779286101129650524n\",\n  \"30697463792187334469128124748n\",\n  \"76836636996796091386778801556n\",\n  \"868461342532092659n\",\n  \"69910862714025895807766899173n\",\n  \"51405542117679167872600082463n\",\n  \"349470313771420560n\",\n  \"71284241241602654693194940143n\",\n  \"7305568034139166589777830792n\",\n  \"2498747200591008033n\",\n  \"67960797371315801691053786599n\",\n  \"25825479627169106615506743060n\",\n  \"454178144016317938n\",\n  \"35798135180239958015829265626n\",\n  \"23385623537498663178814541991n\",\n  \"1668508428339305051n\",\n  \"15450665342638866022354076708n\",\n  \"1590106122468359708599592949n\",\n  \"209939085635224246n\",\n  \"45146454297276439294547281947n\",\n  \"71363197518122470395685282523n\",\n  \"209021609080779353n\",\n  \"37805135405124328919729060254n\",\n  \"46916624974206570529290830921n\",\n  \"848835529094356500n\",\n  \"52127928532313726409293511873n\",\n  \"74341195298303002847160668677n\",\n  \"2836594795507658600n\",\n  \"21372610848069974970714546381n\",\n  \"47095482837411596424060733004n\",\n  \"2644188767312235257n\",\n  \"42696308717032907609441318200n\",\n  \"71478263091865254540527492446n\",\n  \"580612364877252066n\",\n  \"24227503011457277739411398472n\",\n  \"46210588161299166961443583909n\",\n  \"2104513243231016467n\",\n  \"38286987706753654842254500763n\",\n  \"52819390378718994903041839288n\",\n  \"2559971158277261662n\",\n  \"10804049422689166087510960068n\",\n  \"78494177681671393465658693075n\",\n  \"14482037543685577n\",\n  \"45316386224024264714051962520n\",\n  \"8077236619578691823690243326n\",\n  \"3134255926280338435n\",\n  \"58234835865881258067775424985n\",\n  \"32582539715376623121568222400n\",\n  \"895535831771370236n\",\n  \"70554522419104669983576590653n\",\n  \"40229753450332894247180991320n\",\n  \"3235640053820685715n\",\n  \"20050852574591066448348962700n\",\n  \"63154847355271958325521981335n\",\n  \"467978477141038832n\",\n  \"23115494614834363321936638302n\",\n  \"54275477858894789534235120579n\",\n  \"1729059077109549892n\",\n  \"2643222253937861530223901503n\",\n  \"4343013099917093534712467976n\",\n  \"2093250350291324334n\",\n  \"26606380640809280595919467519n\",\n  \"24158225122809122341718478436n\",\n  \"384623299034698779n\",\n  \"74889164947469453919523854509n\",\n  \"57684567535195905731154589750n\",\n  \"1155881533367487150n\",\n  \"40449699793338258794390721810n\",\n  \"45563605053974069206983967932n\",\n  \"1493349482130193926n\",\n  \"53198779688378832727006250273n\",\n  \"23250105681044235044335219173n\",\n  \"1649629209531042678n\",\n  \"31842301972458791163037611310n\",\n  \"54103172956148923849538705604n\",\n  \"1853082006782289707n\",\n  \"73283134292642541157328722326n\",\n  \"60011977393637178105550407258n\",\n  \"2931499730502310317n\",\n  \"30363774768400601902892824896n\",\n  \"69784527858977659878014965306n\",\n  \"2699700013359551525n\",\n  \"30143876784681103984444940141n\",\n  \"20508010382725323248422071352n\",\n  \"1472036335205806581n\",\n  \"72685268086241841913630448820n\",\n  \"13484287640917155024759235656n\",\n  \"421919482836501604n\",\n  \"58336665028159633068676496150n\",\n  \"37899530871095451514688032059n\",\n  \"830925861824953119n\",\n  \"25034909887778048695729760495n\",\n  \"6186382813048747659882138994n\",\n  \"928295656744287075n\",\n  \"23742999482526473077193706109n\",\n  \"38681524762823880972818454723n\",\n  \"1037267958137901699n\",\n  \"75848820697595803231237834330n\",\n  \"4098133930661194465828731453n\",\n  \"2484592940588499869n\",\n  \"45229057029317220478111498771n\",\n  \"55686910073377115986537207556n\",\n  \"2974592459022975650n\",\n  \"9058824958434584730691471305n\",\n  \"3489502058924586487278999515n\",\n  \"1985538445731248079n\",\n  \"14034347138268021040571737620n\",\n  \"22094509985004128313979725457n\",\n  \"1321434542301391881n\",\n  \"17216019289274156022312124782n\",\n  \"65908201923726532456265422977n\",\n  \"387610774042169114n\",\n  \"29699496552150641100894659868n\",\n  \"43552700176683532671663646633n\",\n  \"305525895851406027n\",\n  \"62068283835877161864738460092n\",\n  \"66163022436031594737849199513n\",\n  \"1671489056967612477n\",\n  \"5806077789744302022830084009n\",\n  \"22126371298319875265318066168n\",\n  \"2973075530852635513n\",\n  \"43508686549770752780288409207n\",\n  \"39960107195405145189624452517n\",\n  \"3021227579398645734n\",\n  \"75958919635020929694389722957n\",\n  \"14913897636015670404185010029n\",\n  \"2882183092458315590n\",\n  \"24239404766805006701421172975n\",\n  \"69450551382041986033230454197n\",\n  \"629979785699424851n\",\n  \"47715312965767193925496266564n\",\n  \"51328287208106789864582031889n\",\n  \"1994694450268216917n\",\n  \"12878968128402785600925987432n\",\n  \"8892728961399753099629106451n\",\n  \"2189564568474803348n\",\n  \"17841277261874434955985363634n\",\n  \"23255802008382153152915838079n\",\n  \"1299631183736247307n\",\n  \"70369295004394220674262548695n\",\n  \"41703500013750845131767430551n\",\n  \"2515279718642012557n\",\n  \"29363803518729226252949864837n\",\n  \"11941978972714945652777612780n\",\n  \"1864444849178365249n\",\n  \"19838910496936353855554382505n\",\n  \"63526654617675483693289584781n\",\n  \"1386561621225388054n\",\n  \"37964054821976413036136417123n\",\n  \"14531042297004730862055294756n\",\n  \"1592174811323575228n\",\n  \"17025415710900400219439375060n\",\n  \"362574756192905655380951625n\",\n  \"186982663000383695n\",\n  \"75302946272320992428390907104n\",\n  \"76356571252613340602107695667n\",\n  \"1005406788214614232n\",\n  \"58429545482092547095478867066n\",\n  \"8783598735519438107774246954n\",\n  \"3449009450489856852n\",\n  \"52421244757199560525245430831n\",\n  \"36745113142356116864221402917n\",\n  \"2011028989323540641n\",\n  \"52389389340233786555192956059n\",\n  \"48540948198567585375080843793n\",\n  \"2511738896308209966n\",\n  \"62948973448903767233283645427n\",\n  \"78581731009485419534613750974n\",\n  \"2631249803991736511n\",\n  \"15700178914629731044995270252n\",\n  \"21825209006850516132399941848n\",\n  \"469426094359884098n\",\n  \"45109950384963150442992909517n\",\n  \"34709270486045260410251674804n\",\n  \"3227700636384978310n\",\n  \"59508455528169337110518969046n\",\n  \"7626842288771897454076798332n\",\n  \"2837142952242233831n\",\n  \"78154898100541067453790359715n\",\n  \"28712940925290532622010374032n\",\n  \"2005548120880216529n\",\n  \"19676819626842762742496321363n\",\n  \"21494888704510312646126358022n\",\n  \"1917432403713999314n\",\n  \"35348767509581898437000853095n\",\n  \"54404372638473474714277538548n\",\n  \"1418295384476104455n\",\n  \"2087534038039694873601959364n\",\n  \"55492416744530703076122435501n\",\n  \"3415979290873032604n\",\n  \"77874081666239317555289078970n\",\n  \"64693269821438151662321973074n\",\n  \"468500022203866114n\",\n  \"52183552801284363909457374676n\",\n  \"26386627404911694711966206173n\",\n  \"849932193222808822n\",\n  \"60880246718709527470179169635n\",\n  \"73275749658065911543659109078n\",\n  \"2835936826164075331n\",\n  \"47034978948350796174151388655n\",\n  \"71774550150782116132727222082n\",\n  \"2957236831646338670n\",\n  \"63121833886036603562738575495n\",\n  \"23473953357667857038757232396n\",\n  \"709268300106945760n\",\n  \"67565011137450891785645904255n\",\n  \"24476510070022540670394808047n\",\n  \"2197500443692989620n\",\n  \"59529365216756814354926446285n\",\n  \"62380286296544401614193824725n\",\n  \"1797665767653557658n\",\n  \"65352576236492901270647039868n\",\n  \"54007112892683927216806385747n\",\n  \"1796075374294915397n\",\n  \"17840563634584466359434584144n\",\n  \"46203718678613515530978507404n\",\n  \"702053810505193011n\",\n  \"6133701316708198581434709723n\",\n  \"61802938904865726983656435299n\",\n  \"3001276128418418514n\",\n  \"11649452974115692944272358953n\",\n  \"18473964874994391830987882986n\",\n  \"2086271034138195481n\",\n  \"27934361651981769617523547350n\",\n  \"75412934231387879572695859186n\",\n  \"461672875728163553n\",\n  \"2659961698397651286244898268n\",\n  \"38244585026297070186059616261n\",\n  \"3371488902807027695n\",\n  \"16205200667874612181106188684n\",\n  \"6520317333544879950114099734n\",\n  \"2490923463723046056n\",\n  \"66034343348095027053141749239n\",\n  \"13522171761978136875076440765n\",\n  \"211626548808403729n\",\n  \"52060409492746050106971031742n\",\n  \"3493375676170587510122635686n\",\n  \"3394236868158496257n\",\n  \"47140116537527183288446191137n\",\n  \"26402419994251877186703235784n\",\n  \"2932509761218506683n\",\n  \"41718577718458247425998327137n\",\n  \"72444125720253366875907105723n\",\n  \"2370720516004120360n\",\n  \"63763546849180341189837833587n\",\n  \"56383249669741657007269755446n\",\n  \"2772609748811855948n\",\n  \"30673155381064993958540435457n\",\n  \"58923421149810821122915571284n\",\n  \"2826147464537959677n\",\n  \"2437524155719427333248486827n\",\n  \"13523745438577697843652059309n\",\n  \"2255306498837633258n\",\n  \"66617913651732723895666550762n\",\n  \"800383901932656375981050324n\",\n  \"2369057816442019000n\",\n  \"53894023794388536556779913700n\",\n  \"43633381247568199322500578225n\",\n  \"1622058361920748072n\",\n  \"31610597297695602711187104065n\",\n  \"75047413064993937787913175675n\",\n  \"2532518357458277794n\",\n  \"66943196821272189971919216455n\",\n  \"63057632269388325855862697967n\",\n  \"252919094746701796n\",\n  \"36093617934864267028615495215n\",\n  \"2458297172936844284200172721n\",\n  \"2861973034148611365n\",\n  \"35639326827089764975324431609n\",\n  \"42790455257345625520833632516n\",\n  \"2416491183110698117n\",\n  \"25453911219236829571892475695n\",\n  \"7792114184406477060828720050n\",\n  \"3256395018257219594n\",\n  \"44446878573785568457717214835n\",\n  \"31316823799089969829944488381n\",\n  \"3348254446631709920n\",\n  \"12075675278480009463346998871n\",\n  \"33336621394122897171138216323n\",\n  \"1761645290764169692n\",\n  \"38936491179522097211601163974n\",\n  \"40756936871275705147530952481n\",\n  \"2239620312855528769n\",\n  \"66166234417862875439766591001n\",\n  \"45961753617942718644070346235n\",\n  \"2545432639028408432n\",\n  \"27071931775260190706961952445n\",\n  \"16791652622063002274074642172n\",\n  \"1351810600008793720n\",\n  \"8734604468994364132650578395n\",\n  \"2915643774972349972943503710n\",\n  \"546123555763251031n\",\n  \"40883390215425903758829895197n\",\n  \"46075188532687982090196339471n\",\n  \"2037883374560027081n\",\n  \"1788529744899075811496881871n\",\n  \"22977601030754581206369105722n\",\n  \"2052641684479223112n\",\n  \"52403270166627919005596848880n\",\n  \"2330881363722503207702297453n\",\n  \"1950506519094245230n\",\n  \"26974012086112717010353138814n\",\n  \"69257122863702421096680142186n\",\n  \"731421312124744837n\",\n  \"31069884618093040515903738825n\",\n  \"64922032296511662760139295040n\",\n  \"2654253976131730717n\",\n  \"12166944124292618925625599356n\",\n  \"59407826445782768214824917874n\",\n  \"354147487414166550n\",\n  \"74336686733791433900827528675n\",\n  \"12704634481538804742936579229n\",\n  \"2082676564717138885n\",\n  \"190n\",\n  \"58146038485323707171566360552n\",\n  \"79083051845830931429793398812n\",\n  \"1253760413372422709n\",\n  \"75585805608841426332286895315n\",\n  \"17454071065969374047751520578n\",\n  \"1856801283221000835n\",\n  \"56347371123082155623989904211n\",\n  \"52625756897582785946932954415n\",\n  \"1103484556810393055n\",\n  \"27404185422829405492475499818n\",\n  \"1419552461670775323662566720n\",\n  \"3431535685290297040n\",\n  \"10240761959601706862708901917n\",\n  \"71665724585200281475617327049n\",\n  \"3232798557396947874n\",\n  \"32919536142170844080265894843n\",\n  \"27634787910238436631971547080n\",\n  \"689759514785002741n\",\n  \"15431349741815244232301206308n\",\n  \"53845586976664022319541168221n\",\n  \"1583044030122302208n\",\n  \"47825067986735618489429772434n\",\n  \"36933954632637013701382915058n\",\n  \"2061889715878943774n\",\n  \"8977310916259261225384223331n\",\n  \"4538091340276567216050541897n\",\n  \"2974949937804520552n\",\n  \"32068898197860866225864499204n\",\n  \"11944297794698583544272156441n\",\n  \"1942470514051769102n\",\n  \"16232887649510996786606289763n\",\n  \"15259493580801814760566477085n\",\n  \"522617557584553779n\",\n  \"24242596953798418019519661501n\",\n  \"34675681500323328218631423377n\",\n  \"2626688210475495912n\",\n  \"78740174483351451096333088791n\",\n  \"64943981386376195937910130384n\",\n  \"3002553261633376435n\",\n  \"71321212497283823630152857278n\",\n  \"57107096638064759035770959417n\",\n  \"1525415424337039994n\",\n  \"33592124231316161392746859369n\",\n  \"66360389043497290172485164153n\",\n  \"169262401730913852n\",\n  \"67472003684398719335655699957n\",\n  \"16789521379035350190464748508n\",\n  \"2131762421966585515n\",\n  \"66631783199370161347508379926n\",\n  \"48925352076915955304942304087n\",\n  \"264237490291976243n\",\n  \"24342296347779296789258245457n\",\n  \"43293722801550027940585947288n\",\n  \"2184523999681911728n\",\n  \"9355802069694208050316076397n\",\n  \"35552089219631962733889470030n\",\n  \"3012875015446218241n\",\n  \"19749370490527515528697426175n\",\n  \"8078386931861545908004277048n\",\n  \"484548262348581637n\",\n  \"9197680845227051035593920301n\",\n  \"76678845496561933550816162785n\",\n  \"1006587369936993775n\",\n  \"16264558547638181301681301031n\",\n  \"77659436542602450682090346042n\",\n  \"2549030864566782064n\",\n  \"23992787444587661702047865121n\",\n  \"15283574111017964877795482274n\",\n  \"1010500590098381861n\",\n  \"36081283464794391834173091918n\",\n  \"74713339703559068643167768213n\",\n  \"87864425149724657n\",\n  \"15509755852767806607741504203n\",\n  \"49741860533707809781906740346n\",\n  \"2053665582944552662n\",\n  \"21800540003051693165872352300n\",\n  \"55295746887291089518396498874n\",\n  \"2979094345114374943n\",\n  \"11846584694067264521987247663n\",\n  \"49031890130314527277927146925n\",\n  \"3053072831928300240n\",\n  \"49870471347364999860446391462n\",\n  \"60351156120295649092916522340n\",\n  \"57434309920295622n\",\n  \"51905526990545292008889846168n\",\n  \"35741421582248014414699395252n\",\n  \"1021827240168947429n\",\n  \"16350288651927207676427341432n\",\n  \"48548588913627635520822500823n\",\n  \"2556960523655499318n\",\n  \"39061623507343320271115115845n\",\n  \"38947970321306063422821592330n\",\n  \"2525216560431056230n\",\n  \"65177147304893778229440396619n\",\n  \"70545257645069117487807391489n\",\n  \"1600567512488781231n\",\n  \"33331224951106722420313772928n\",\n  \"38583179480229318101782748287n\",\n  \"1817415503412264076n\",\n  \"43931562095456763346512920739n\",\n  \"45993143967557989986350621262n\",\n  \"1013785943641285390n\",\n  \"46300841465540867353476664678n\",\n  \"67952189225824325494911009881n\",\n  \"1883806626142505323n\",\n  \"74763953209711116608083413573n\",\n  \"73395076121267231351266442748n\",\n  \"875683814313975814n\",\n  \"23960570645093608799064342076n\",\n  \"36737884069061207609010160029n\",\n  \"2740282725978910539n\",\n  \"2348460868169339519816282219n\",\n  \"59294276502368234372728690209n\",\n  \"2234404830781012457n\",\n  \"29326696920519891523554164108n\",\n  \"46303855242526653100651128095n\",\n  \"1172546639486712237n\",\n  \"7729537530476375227332351839n\",\n  \"8564566731713324385055420531n\",\n  \"1479853701561506444n\",\n  \"22273291075577128615277532352n\",\n  \"73656828782504352218789556241n\",\n  \"2308987335794616316n\",\n  \"14359470620000928077518163171n\",\n  \"71961130737820208932903249274n\",\n  \"950707570385670728n\",\n  \"70317507071845790171587549310n\",\n  \"45654920344570326674633769038n\",\n  \"2650168593880186613n\",\n  \"45738429799101288017972815601n\",\n  \"43778890431815013310034329810n\",\n  \"312650173805915283n\",\n  \"59759032808483205201660512612n\",\n  \"49166445941564648520976910103n\",\n  \"575816160851551719n\",\n  \"41099033744600704768583815842n\",\n  \"67643677451426846496806534446n\",\n  \"2744110069990264553n\",\n  \"5427077521225540080527062818n\",\n  \"27591683040195514365023584328n\",\n  \"1814257385547611969n\",\n  \"43890769480671665778349573612n\",\n  \"25702107374475025393868297533n\",\n  \"2665391419850264467n\",\n  \"49173530067968024446609831742n\",\n  \"69233652337477869916623889471n\",\n  \"2973651385942905178n\",\n  \"39451576607205851507235401000n\",\n  \"65326357252788810888449550413n\",\n  \"2328241568819620138n\",\n  \"7187030532193362998811241838n\",\n  \"11158043907775193412625503465n\",\n  \"1887168135327759363n\",\n  \"72093988836508782933530929396n\",\n  \"59408618785876068844273516201n\",\n  \"1998979553140732738n\",\n  \"20436888483045692091969328934n\",\n  \"37236965238760796085670708990n\",\n  \"2982240668332065019n\",\n  \"45766566944201297703965941735n\",\n  \"33134417182815170607111134530n\",\n  \"2256938019969749699n\",\n  \"61095014957849456939456497149n\",\n  \"5166234805292214141604288719n\",\n  \"2223380807107784804n\",\n  \"4407612794594263685713471991n\",\n  \"27938927008707740784778705409n\",\n  \"889822472376617854n\",\n  \"10586000171735376465147370484n\",\n  \"11688046614136879282493614768n\",\n  \"1673899149118569188n\",\n  \"48568524626716983467820586640n\",\n  \"54066530547892129113282820943n\",\n  \"1257544179877250249n\",\n  \"70430239680893778037863498084n\",\n  \"67050853132645903854946409019n\",\n  \"2548118935751794404n\",\n  \"41828468840963319821789084190n\",\n  \"14275492751268414444663806553n\",\n  \"1784444490366165065n\",\n  \"61852018693496828660952117185n\",\n  \"48406002847831614907905133809n\",\n  \"49483591444929780n\",\n  \"54427537761720246076956183538n\",\n  \"41736602958902949490055768838n\",\n  \"1954646608479060360n\",\n  \"60934769075649772007484314209n\",\n  \"4723248530441409773201893998n\",\n  \"3259834508477438622n\",\n  \"16778379388406768302608844589n\",\n  \"14091941761246911672273283575n\",\n  \"1362843677097285540n\",\n  \"20990186444040307549583297890n\",\n  \"39850655248017325132808795637n\",\n  \"3159948251218994501n\",\n  \"22841250904644903266547583091n\",\n  \"35884470460139378173998471965n\",\n  \"144997960402386643n\",\n  \"73988342422211773824311060048n\",\n  \"25430193174058044426248161017n\",\n  \"1511499341976026028n\",\n  \"41856665278828717622897473021n\",\n  \"52430814625940772563313528979n\",\n  \"1518969462082050494n\",\n  \"42785280606159799076021378453n\",\n  \"75641406683588400312731571380n\",\n  \"354558010400584999n\",\n  \"25777665187274443426345962355n\",\n  \"52569759362487685340322204483n\",\n  \"2660707269990640271n\",\n  \"39456006642189286944561721406n\",\n  \"64095592448568371575360918624n\",\n  \"1623622008203944130n\",\n  \"42823981658558488340963830755n\",\n  \"70857240021552825619139550212n\",\n  \"3338694247115466605n\",\n  \"33528981497758066103123618956n\",\n  \"52174717566293432033940167575n\",\n  \"3285250213548536505n\",\n  \"49559726527714678923168862226n\",\n  \"35376383273863973001561075247n\",\n  \"1762388272055172875n\",\n  \"4963094059256542135804830802n\",\n  \"15251461935798611072932258838n\",\n  \"3043255521973128258n\",\n  \"23415022784844915519999589288n\",\n  \"59120161904093027011464662035n\",\n  \"2353807276882257604n\",\n  \"35355887041205290611693611623n\",\n  \"31669150297307261835976265040n\",\n  \"872891098273185795n\",\n  \"69193046798683036289275806803n\",\n  \"42818302823254546309613088130n\",\n  \"3225904969635087159n\",\n  \"22611614040816481524272701347n\",\n  \"40802292074751246948780577207n\",\n  \"351005661799852441n\",\n  \"50079803252014276007292589026n\",\n  \"37577116329374038939872244704n\",\n  \"745466466224739689n\",\n  \"57943789902740370489195854856n\",\n  \"59877164372411435705733535421n\",\n  \"1440407261307873910n\",\n  \"74147961838302268113193936081n\",\n  \"29475004529393168298384526566n\",\n  \"780455262674149785n\",\n  \"51306862863296749150663360555n\",\n  \"68603117787295236727112632820n\",\n  \"2702997921905430000n\",\n  \"64092864258708121960742058121n\",\n  \"27968741860257802705491575837n\",\n  \"3395033579182877453n\",\n  \"60896409955387219924723371046n\",\n  \"72447564289478669262616529078n\",\n  \"3397060291617780594n\",\n  \"74466337456436624238136742413n\",\n  \"67930138912822600973471222439n\",\n  \"631712168137915134n\",\n  \"34699941264140402915854806555n\",\n  \"31625108777123266428395503959n\",\n  \"662594291726250121n\",\n  \"10374418997762067141299032182n\",\n  \"74831531166323756923345310781n\",\n  \"2614948808475244069n\",\n  \"45617012767756761370444767987n\",\n  \"44141298692376594039790971629n\",\n  \"1159181502462992545n\",\n  \"47704071339495071156056567054n\",\n  \"46834594498992945383289148503n\",\n  \"924797511068572088n\",\n  \"23233351571238696045632767797n\",\n  \"14376771187481317319928510593n\",\n  \"3161389881302592208n\",\n  \"68221328884209068946490350230n\",\n  \"69520921081111912732122080295n\",\n  \"540294970059028553n\",\n  \"49382519270729084009739959234n\",\n  \"54272649767268320797552878520n\",\n  \"1762246401423958252n\",\n  \"65695480183764337135892820912n\",\n  \"15357314953562507969519535878n\",\n  \"2415017092301124519n\",\n  \"12568989548408666155318764896n\",\n  \"10255298595269749256814759758n\",\n  \"488040996573952383n\",\n  \"61804111086379855885098583520n\",\n  \"11271058357408383599116781502n\",\n  \"1329740533130250248n\",\n  \"8039933903881517002403963857n\",\n  \"7118558163468937314455208936n\",\n  \"536489202082349116n\",\n  \"57213159007120933607123362054n\",\n  \"38389263848304750695624289842n\",\n  \"103890218507147410n\",\n  \"44837586220950001446991442272n\",\n  \"51003826059731215073098356499n\",\n  \"1055564410899460745n\",\n  \"36382905285088913012495727205n\",\n  \"23789430840439822229827015138n\",\n  \"2409250954595470494n\",\n  \"77553161939176686247041732803n\",\n  \"32075777538535189410338696221n\",\n  \"308581509063990399n\",\n  \"75123827789249657112621112140n\",\n  \"63466606458376146979489895003n\",\n  \"1559915864837385203n\",\n  \"65374245818638483805981829412n\",\n  \"59413598642796928072211645702n\",\n  \"773792966334851501n\",\n  \"10975404188605698335218119359n\",\n  \"5937731821461360820250261750n\",\n  \"2424406683527655198n\",\n  \"58048034440511231692734658223n\",\n  \"38541497666142538814655959889n\",\n  \"97237747168756283n\",\n  \"32114431512100683707696744321n\",\n  \"43084884381938054868610618438n\",\n  \"53036606161489394n\",\n  \"49303822531142933183499847955n\",\n  \"70757204501375068333736255366n\",\n  \"1090664900942087596n\",\n  \"68973060792876598659428050587n\",\n  \"21709941437174734607102143168n\",\n  \"54515769952578230n\",\n  \"40278884731265681742344272236n\",\n  \"34941403842240889411044059527n\",\n  \"1414736029232632973n\",\n  \"60344648712825684665541778621n\",\n  \"10769790997010708809402622618n\",\n  \"2270992661657155596n\",\n  \"42362387786284445354439187653n\",\n  \"58156800386628045782945926146n\",\n  \"2818686942230697090n\",\n  \"31419723024915919870538049034n\",\n  \"18005463704599391839628874083n\",\n  \"212688156617827815n\",\n  \"35911328625822934725057123638n\",\n  \"17761454535191485025880626131n\",\n  \"1761977155017563514n\",\n  \"49665582664754517847870128980n\",\n  \"39319816430240621753318268462n\",\n  \"1491136817343252047n\",\n  \"22260823695114013941955374538n\",\n  \"17055513051235397699203988336n\",\n  \"1922191265581876891n\",\n  \"14555432039935861975982534425n\",\n  \"48152237244885228239450679938n\",\n  \"621157026389301132n\",\n  \"23051036183574002962556684690n\",\n  \"15971796984547909136099208821n\",\n  \"2205567601778656458n\",\n  \"26382181900386119773631359523n\",\n  \"77486525780604152291567730894n\",\n  \"3344785235831598130n\",\n  \"40994902602684141065596542528n\",\n  \"58124151025072872977666932193n\",\n  \"1866769646811958428n\",\n  \"13188769330477055787925877048n\",\n  \"72682189451050217677569494954n\",\n  \"1454880931779552660n\",\n  \"33634144479293043106522767128n\",\n  \"63196693658172041397923530081n\",\n  \"1719120090000942363n\",\n  \"11106335219605429034116541445n\",\n  \"59150880447111322507257453443n\",\n  \"1982729467772378638n\",\n  \"24990080775267144618286017329n\",\n  \"4933890943319210884773036028n\",\n  \"3238771988114708503n\",\n  \"72949239866424524529472552202n\",\n  \"28511064168198009294661488723n\",\n  \"2962023653742267897n\",\n  \"58656766073983020247853921869n\",\n  \"47635718491612423608063190516n\",\n  \"3000234376036375986n\",\n  \"24238047790212470654844439662n\",\n  \"23154937283069080880032452049n\",\n  \"2013625456869347404n\",\n  \"14825246893209210042587190789n\",\n  \"52825936212514509264761514892n\",\n  \"993721473581556871n\",\n  \"8713904335226753185274037022n\",\n  \"58909703948513917292703719505n\",\n  \"3356613834808478835n\",\n  \"47783414808532480730935012208n\",\n  \"71833517958023857391706253943n\",\n  \"2135080825574499771n\",\n  \"884520208662549368825880483n\",\n  \"66815068005909338250309574561n\",\n  \"140309291176602342n\",\n  \"5569450875351413209302619112n\",\n  \"29224003387999671040246207661n\",\n  \"1610924941533931901n\",\n  \"51360380732923628237942915208n\",\n  \"49075415090226283505119870909n\",\n  \"824496444682252362n\",\n  \"26136012194887577513976704588n\",\n  \"25203540858598899941257080851n\",\n  \"1411280372175925570n\",\n  \"68280069972262928193338796048n\",\n  \"26491256896653383849815404924n\",\n  \"2469762357772618827n\",\n  \"73734748267187905353062326737n\",\n  \"68913774706780990255684794379n\",\n  \"53485910764302128n\",\n  \"77777156063573625138168997381n\",\n  \"64557037666602761347172706735n\",\n  \"1996255398685960466n\",\n  \"28464530722569754157139260154n\",\n  \"22979110781613272893921919353n\",\n  \"1105566566131594780n\",\n  \"28039439084355019144555806027n\",\n  \"16299329550217317018880117262n\",\n  \"2401400792301565600n\",\n  \"62631950163514864539620020206n\",\n  \"64031511810008173001111779669n\",\n  \"135723323566704095n\",\n  \"56130238209974371238192421387n\",\n  \"71300385211683773671558874832n\",\n  \"2820109121346955706n\",\n  \"1266050722527037359608467989n\",\n  \"23369565459382988863634254407n\",\n  \"2609151292716742371n\",\n  \"46069724971530567254818701644n\",\n  \"50647992693491661816900039583n\",\n  \"3003365004111477246n\",\n  \"14833086786816707962865094508n\",\n  \"37929390713358467376261350799n\",\n  \"3113860565507891619n\",\n  \"14007914765299785142256461365n\",\n  \"75894388353326085571138234483n\",\n  \"1683683923201420873n\",\n  \"63454168155478046454844432701n\",\n  \"13184396719317261321865011420n\",\n  \"3455798177318665792n\",\n  \"15242605704632094686138955952n\",\n  \"19838168147461161870148387345n\",\n  \"2010616752800746021n\",\n  \"30692509923364661764582557691n\",\n  \"62096107423559910046379351905n\",\n  \"1346903255621101256n\",\n  \"34464243166874822079393179146n\",\n  \"63846438778551544175642767034n\",\n  \"1138380012879476837n\",\n  \"74737710169640323515477410562n\",\n  \"6284356348145608854716748036n\",\n  \"180980529294338977n\",\n  \"38461808257846861933076217288n\",\n  \"75020453906990644280477544720n\",\n  \"307346157687553567n\",\n  \"42941917981619284749284256464n\",\n  \"29124361387770891246090195521n\",\n  \"2258523094183111792n\",\n  \"31043177647483836512207577733n\",\n  \"76846872956655992019312504229n\",\n  \"2737531135418987922n\",\n  \"436136989124112448213257527n\",\n  \"37270775937015261263489085940n\",\n  \"1691548620283188254n\",\n  \"34350139485051631072038425243n\",\n  \"47842925193965716748069619330n\",\n  \"3012190802049531932n\",\n  \"8161319477063961893865419497n\",\n  \"39887640444908598647019011892n\",\n  \"326805514938122984n\",\n  \"45251026371225474798165551670n\",\n  \"78712165100775809310221458014n\",\n  \"1747908356221952635n\",\n  \"74097152003535814545675921337n\",\n  \"48494072556502793463457269862n\",\n  \"538895690676303310n\",\n  \"54295451611850750079844956272n\",\n  \"26534574033318342223582372449n\",\n  \"3044215930961181551n\",\n  \"75837108057982626126393125222n\",\n  \"52432746192616266658163099498n\",\n  \"3397076867009838686n\",\n  \"54465116802539051194037403225n\",\n  \"19480966575390018045669641671n\",\n  \"1874912131754984363n\",\n  \"62538117008905102096704754568n\",\n  \"49778263788224308775212049920n\",\n  \"635641138655366122n\",\n  \"1000125186700770733728208856n\",\n  \"72272342271481440271970417215n\",\n  \"126669907718514487n\",\n  \"32850606983744341262159941170n\",\n  \"34502523802539415215826357899n\",\n  \"335651800228572498n\",\n  \"74891229697299665485048117886n\",\n  \"7923057032410301273894282773n\",\n  \"2078488636177744832n\",\n  \"65834931437626611160851671144n\",\n  \"47253521926346692275217471181n\",\n  \"1450467026022714805n\",\n  \"79218551078854046456367160410n\",\n  \"70762120870550042138883949317n\",\n  \"2886881633871743501n\",\n  \"34749927009400659485527823456n\",\n  \"74230186035227802214714540722n\",\n  \"91514308691397285n\",\n  \"23895248556901354081433241434n\",\n  \"16615401776547671346915841714n\",\n  \"3136707560354543978n\",\n  \"21834987311199156124647763244n\",\n  \"70345068331037455105782146634n\",\n  \"3216348569578182800n\",\n  \"14552026033494402774981149080n\",\n  \"46810169065384954077118190274n\",\n  \"1911480149318741295n\",\n  \"30149592931357591699950156644n\",\n  \"14166482924045038689605819053n\",\n  \"2327000634007357378n\",\n  \"38247650175016523126038806200n\",\n  \"57691234003597921786155373117n\",\n  \"859973345968241198n\",\n  \"71714837789763600565992214961n\",\n  \"73412375228179646879012079459n\",\n  \"1974246974270865632n\",\n  \"52446930245349056255719340345n\",\n  \"970285520444299081223312008n\",\n  \"1628797543941019300n\",\n  \"50919498183802806944452291286n\",\n  \"37490783833480294299979274400n\",\n  \"2991807516764641990n\",\n  \"32377691154331801475818794360n\",\n  \"39750977600721907402675106371n\",\n  \"2263832844069227231n\",\n  \"17627606237803241511589218465n\",\n  \"3828538907962341287451709925n\",\n  \"1651077712155795619n\",\n  \"65746494371320988039239195368n\",\n  \"40429923959132850189737190904n\",\n  \"1761591307449813117n\",\n  \"62030904653045818611809336637n\",\n  \"31416196507873606617755041492n\",\n  \"1626933121429044990n\",\n  \"56278396859095728868031718464n\",\n  \"40673401721781629455927974763n\",\n  \"816921835574909421n\",\n  \"41466998290124345097221160853n\",\n  \"77602619970761915549134486486n\",\n  \"2270380655319303423n\",\n  \"37278580144182814004827303266n\",\n  \"22631466550317400025567159166n\",\n  \"1256554869446519681n\",\n  \"44512857141401466618198683938n\",\n  \"75645231533450873900978589761n\",\n  \"2839895442152180859n\",\n  \"31711543132209616307103122831n\",\n  \"78955556053482715721582593706n\",\n  \"626995298916699271n\",\n  \"50496746606014163961365206592n\",\n  \"62746915431247250243776212132n\",\n  \"2682171950447987392n\",\n  \"8649064541355918845604157106n\",\n  \"3642459701627177804195047993n\",\n  \"304942239933523054n\",\n  \"52349349447437650280979204973n\",\n  \"38235331305898406894352347179n\",\n  \"574973155769907953n\",\n  \"35486247734767358887659775332n\",\n  \"63676560163395574209410974039n\",\n  \"1346859065344137509n\",\n  \"42626666034641293807810059734n\",\n  \"78692725054674081196434522843n\",\n  \"2899402626497036759n\",\n  \"4466386979191688634974299793n\",\n  \"73590084746022202502283403859n\",\n  \"859759454707498102n\",\n  \"49530047850904057997975767021157383838285524079350821991880424926644689941n\",\n  \"12n\",\n  \"73833755054290735615493473493n\",\n  \"59827914949558952876927624612n\",\n  \"1842769298355464193n\",\n  \"0n\",\n  \"31709724516548461033720090826n\",\n  \"30157355094312078251107514164n\",\n  \"2598882554441689462n\",\n  \"0n\",\n  \"340282366920938463467229529119593204504n\",\n  \"2783209552014905048n\",\n  \"340282366920938463475639663367112901035n\",\n  \"340282366920938463466510485605024151680n\"\n]\nOutput of encryptToDrandRoundAndGetCallData: 50 elements\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-webpack/scrape.cjs",
    "content": "const puppeteer = require('puppeteer');\n\nasync function loadWebContent(url) {\n  const browser = await puppeteer.launch({ args: ['--no-sandbox'] });\n  const page = await browser.newPage();\n  await page.goto(url);\n  await page.waitForSelector('body pre', { visible: true, timeout: 90000 });\n  const content = await page.evaluate(() => document.querySelector('body pre').innerHTML);\n  await browser.close();\n  return content;\n}\n\nasync function scrape() {\n  const content = await loadWebContent('http://localhost:8080');\n  console.log(content);\n}\n\nscrape()\n  .then(() => process.exit(0))\n  .catch((e) => process.exit((console.error(e), 1)));\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-webpack/src/bootstrap.js",
    "content": "// A dependency graph that contains any wasm must all be imported\n// asynchronously. This `bootstrap.js` file does the single async import, so\n// that no one else needs to worry about it again.\nimport('./index.js')\n  .catch((e) => console.error('Error importing \"index.js\":', e));\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-webpack/src/examples.js",
    "content": "import * as garaga from 'garaga';\n\nexport const proofBn254 = {\n    a: {\n      x: 19326975765597999023026309242851464618295625967876195641207265702903971944714n,\n      y: 63835113064883221423828958902442994957834669122245713027012799265225733314n,\n      curveId: garaga.CurveId.BN254\n    },\n    b: {\n      x: [\n        15926258242285065430281020483827261910589109953358642697562602626998569607754n,\n        15482775443177023962384497625528997151098293635727021527127534892096530509952n\n      ],\n      y: [\n        10937776115245591292644949547008094885240742374542777857501160790374675834371n,\n        6691169928456984700056024515478772626466687376966760922939239504103847739755n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    c: {\n      x: 18548825552947889373136407684636046437705490810597995577018381312170231914454n,\n      y: 9890815383090898074006770716054740281870916546141552254207684185588486179606n,\n      curveId: garaga.CurveId.BN254\n    },\n    publicInputs: [\n      BigInt('0x1e17db88c1d2e83e49f692cce4bb8169309de90afb2b141156243106aa34b474')\n    ]\n  }\n\n\nexport const vkBn254 = {\n    alpha: {\n      x: 6763126530687886999315782887200758703366235230289874831627658839515656330867n,\n      y: 12297948670392550312636836114470404429657568989657927437959695771502446445179n,\n      curveId: garaga.CurveId.BN254\n    },\n    beta: {\n      x: [\n        15362786867599176251482538547160991918100063526460909721657878971551583339657n,\n        3804423004921008809819632629079723167970572551072432396497601916259815496626n\n      ],\n      y: [\n        21885719103633717693283841528133243510750001708857084897139570082577218850374n,\n        2076817281717432063622727433912740683541778328445173073030513609350245776784n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    gamma: {\n      x: [\n        1505558511994093266228972967760414664043255115544025409518939393775943607863n,\n        21131173266568468249589649137903719095480044620502529067534622738225157042304n\n      ],\n      y: [\n        4008759115482693545406793535591568078300615151288108694080317738431649117177n,\n        18835856718271757625037377080288624550370480296914695806777038708085497610013n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    delta: {\n      x: [\n        1497911744463986566314308077983046202449361313910668647770797503379177516252n,\n        10829154948357654897792444316512827659620136273388886760324770466776134105520n\n      ],\n      y: [\n        10850392992008761830625471778404650447428083833210258292805429019728339148884n,\n        12593805385728178657844996215584371401133999503150901444097670307277076679963n\n      ],\n      curveId: garaga.CurveId.BN254\n    },\n    ic: [\n      {\n        x: 8279781786940010385190155571855963988492685408361021424114669994156938727612n,\n        y: 14410809027374663415870055712464930833085570569392210261413081131467855918386n,\n        curveId: garaga.CurveId.BN254\n      },\n      {\n        x: 10075286447651977124250383403562829564641026794366918560412684031493085120161n,\n        y: 13393494704849149158598989372790154670517815409968589728896053397011959461594n,\n        curveId: garaga.CurveId.BN254\n      }\n    ]\n  }\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-webpack/src/index.js",
    "content": "import * as garaga from 'garaga';\nimport { proofBn254, vkBn254 } from './examples';\n\nasync function main() {\n  await garaga.init();\n  const result = garaga.msmCalldataBuilder([[1n, 2n]], [10n], garaga.CurveId.BN254);\n  const json = JSON.stringify(result, (key, value) => typeof value === 'bigint' ? value + 'n' : value, 2);\n  const message = 'Output of msm_calldata_builder: ' + json;\n  const element = document.createElement('pre');\n  element.textContent = message;\n\n  const groth16Calldata = garaga.getGroth16CallData(proofBn254, vkBn254,garaga.CurveId.BN254);\n\n  const jsonCalldata = JSON.stringify(groth16Calldata, (key, value) => typeof value === 'bigint' ? value + 'n' : value, 2);\n\n  const messageCalldata = 'Output of get_groth16_calldata: ' + jsonCalldata;\n\n  element.textContent += \"\\n\" + messageCalldata;\n\n  // Tlock encrypt\n  const message2 = new Uint8Array(16);\n  message2.set(new TextEncoder().encode('Hello, world!'));\n  const randomness = new Uint8Array(16);\n  randomness.set(new TextEncoder().encode('fixed_random_val'));\n  const tlockCalldata = garaga.encryptToDrandRoundAndGetCallData(1, message2, randomness);\n  element.textContent += \"\\n\" + 'Output of encryptToDrandRoundAndGetCallData: ' + tlockCalldata.length + ' elements';\n\n  document.body.appendChild(element);\n}\n\nmain()\n  .catch(console.error);\n"
  },
  {
    "path": "tools/npm/integration-test-suite/packages/web-js-esm-webpack/webpack.config.js",
    "content": "const path = require('path');\nconst CopyPlugin = require('copy-webpack-plugin');\n\nmodule.exports = {\n  entry: './src/bootstrap.js',\n  output: {\n    path: path.resolve(__dirname, 'dist'),\n    filename: 'bootstrap.js',\n  },\n  mode: 'production',\n  resolve: {\n    fallback: {\n      \"crypto\": require.resolve(\"crypto-browserify\"),\n      \"stream\": require.resolve(\"stream-browserify\"),\n      \"vm\": require.resolve(\"vm-browserify\"),\n      \"fs\": false\n    }\n  },\n  performance: {\n    maxAssetSize: 4 * 1024 * 1024, // 4MB to avoid warning\n  },\n  plugins: [\n    new CopyPlugin({ patterns: ['./public/index.html'] }),\n  ],\n};\n"
  },
  {
    "path": "tools/process_manager.py",
    "content": "import os\nimport signal\nimport subprocess\nimport threading\nfrom contextlib import contextmanager\nfrom typing import List\n\n\nclass ProcessManager:\n    \"\"\"Smart process manager with interrupt handling and cleanup.\"\"\"\n\n    def __init__(self):\n        self.processes: List[subprocess.Popen] = []\n        self.shutdown_event = threading.Event()\n        self.original_signal_handler = None\n        self.main_process_group = None\n        self.is_main_thread = threading.current_thread() is threading.main_thread()\n\n    def __enter__(self):\n        # Store the main process group (don't change it)\n        self.main_process_group = os.getpgrp()\n\n        # Only install signal handler in main thread\n        if self.is_main_thread:\n            try:\n                self.original_signal_handler = signal.signal(\n                    signal.SIGINT, self._signal_handler\n                )\n            except ValueError:\n                # Signal operations not supported in this context, continue without signal handling\n                self.is_main_thread = False\n\n        return self\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        self.cleanup()\n\n    def _signal_handler(self, signum, frame):\n        \"\"\"Enhanced signal handler that kills all processes.\"\"\"\n        from rich.console import Console\n\n        console = Console()\n        console.print(\n            \"\\n🛑 [bold red]Interrupt received - terminating all processes[/bold red]\"\n        )\n\n        self.shutdown_event.set()\n        self.cleanup()\n\n        # Re-raise KeyboardInterrupt to properly exit\n        raise KeyboardInterrupt(\"Process terminated by user\")\n\n    def cleanup(self):\n        \"\"\"Kill all tracked processes (but not the main process group).\"\"\"\n        # Kill individual tracked processes more aggressively\n        for proc in self.processes:\n            try:\n                if proc.poll() is None:  # Still running\n                    proc.terminate()\n                    try:\n                        proc.wait(timeout=0.5)  # Reduced timeout\n                    except subprocess.TimeoutExpired:\n                        proc.kill()\n                        try:\n                            proc.wait(timeout=0.5)  # Reduced timeout for kill\n                        except subprocess.TimeoutExpired:\n                            pass  # Process is stuck, move on\n            except Exception:\n                try:\n                    proc.kill()\n                except Exception:\n                    pass\n\n        # Clear the process list\n        self.processes.clear()\n\n        # Restore original handler only if we set it up in main thread\n        if self.is_main_thread and self.original_signal_handler:\n            try:\n                signal.signal(signal.SIGINT, self.original_signal_handler)\n            except ValueError:\n                # Signal operations not supported, ignore\n                pass\n\n    def run_subprocess(\n        self,\n        cmd: List[str],\n        timeout: int = 900,\n        check: bool = False,\n        capture_output: bool = False,\n        text: bool = False,\n        **kwargs,\n    ) -> subprocess.CompletedProcess:\n        \"\"\"Run subprocess with timeout and interrupt handling.\"\"\"\n        if self.shutdown_event.is_set():\n            raise KeyboardInterrupt(\"Shutdown requested\")\n\n        # Handle capture_output parameter (convert to stdout/stderr settings)\n        if capture_output:\n            if \"stdout\" in kwargs or \"stderr\" in kwargs:\n                raise ValueError(\n                    \"capture_output cannot be used with stdout or stderr arguments\"\n                )\n            kwargs[\"stdout\"] = subprocess.PIPE\n            kwargs[\"stderr\"] = subprocess.PIPE\n\n        # Handle text parameter\n        if text:\n            kwargs[\"text\"] = True\n\n        # Only set up process groups on Unix-like systems and when not already specified\n        import sys\n\n        if sys.platform != \"win32\" and \"preexec_fn\" not in kwargs:\n            try:\n                kwargs[\"start_new_session\"] = True\n            except Exception:\n                # If start_new_session fails, don't use it\n                pass\n\n        proc = subprocess.Popen(cmd, **kwargs)\n        self.processes.append(proc)\n\n        try:\n            stdout, stderr = proc.communicate(timeout=timeout)\n            completed_process = subprocess.CompletedProcess(\n                cmd, proc.returncode, stdout, stderr\n            )\n\n            # Handle 'check' parameter like subprocess.run\n            if check and proc.returncode != 0:\n                raise subprocess.CalledProcessError(\n                    proc.returncode, cmd, stdout, stderr\n                )\n\n            return completed_process\n        except subprocess.TimeoutExpired:\n            proc.kill()\n            proc.wait()  # Clean up zombie\n            raise\n        except KeyboardInterrupt:\n            proc.kill()\n            proc.wait()  # Clean up zombie\n            raise\n        finally:\n            # Remove from tracking list when done\n            if proc in self.processes:\n                self.processes.remove(proc)\n\n\n@contextmanager\ndef managed_subprocess():\n    \"\"\"Context manager for subprocess calls with interrupt handling.\"\"\"\n    with ProcessManager() as pm:\n\n        def run_cmd(cmd, **kwargs):\n            return pm.run_subprocess(cmd, **kwargs)\n\n        yield run_cmd, pm\n"
  },
  {
    "path": "tools/profile_tests.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nGaraga Test Profiling Tool\n\nThis script automates the process of running snforge tests with trace data collection,\ngenerating individual profile data using cairo-profiler, creating performance\nvisualizations using pprof, and organizing the results.\n\nUsage:\n    python tools/profile_tests.py [test_name_filter]\n    python tools/profile_tests.py --all\n\nExamples:\n    python tools/profile_tests.py msm_BN254_1P    # Run specific test\n    python tools/profile_tests.py --all           # Run all tests\n    python tools/profile_tests.py                 # Run all tests (same as --all)\n\"\"\"\n\nimport argparse\nimport json\nimport os\nimport re\nimport subprocess\nimport sys\nfrom abc import ABC, abstractmethod\nfrom collections import defaultdict\nfrom concurrent.futures import ThreadPoolExecutor\nfrom dataclasses import dataclass, field\nfrom datetime import datetime\nfrom functools import wraps\nfrom pathlib import Path\nfrom typing import Dict, List, Optional, Tuple\n\nimport pandas as pd\nfrom rich.align import Align\nfrom rich.console import Console\nfrom rich.panel import Panel\nfrom rich.progress import (\n    BarColumn,\n    Progress,\n    SpinnerColumn,\n    TaskProgressColumn,\n    TextColumn,\n    TimeElapsedColumn,\n    TimeRemainingColumn,\n)\nfrom rich.text import Text\nfrom tabulate import tabulate\n\nfrom tools.process_manager import ProcessManager, managed_subprocess\n\n# Global state\nconsole = Console()\n\n\n# Configuration & Constants\n@dataclass\nclass Config:\n    \"\"\"Consolidated configuration for the profiling tool.\"\"\"\n\n    contracts: List[str] = field(\n        default_factory=lambda: [\n            \"autogenerated/groth16_example_bn254\",\n            \"autogenerated/groth16_example_bls12_381\",\n            \"autogenerated/risc0_verifier_bn254\",\n            \"autogenerated/sp1_verifier_bn254\",\n            \"autogenerated/noir_ultra_keccak_honk_example\",\n            \"autogenerated/noir_ultra_keccak_zk_honk_example\",\n            \"autogenerated/noir_ultra_starknet_honk_example\",\n            \"autogenerated/noir_ultra_starknet_zk_honk_example\",\n        ]\n    )\n\n    excluded_profile_samples: set = field(\n        default_factory=lambda: {\"memory holes\", \"casm size\", \"calls\"}\n    )\n\n    sierra_gas_weights: Dict[str, int] = field(\n        default_factory=lambda: {\n            \"steps\": 100,\n            \"range_check\": 70,\n            \"range_check96\": 56,\n            \"keccak\": 136189,\n            \"pedersen\": 4050,\n            \"bitwise\": 583,\n            \"ecop\": 4085,\n            \"poseidon\": 491,\n            \"add_mod\": 230,\n            \"mul_mod\": 604,\n        }\n    )\n\n\n@dataclass\nclass Paths:\n    \"\"\"Path management with validation.\"\"\"\n\n    workspace_root: Path\n\n    def __post_init__(self):\n        self.src_dir = self.workspace_root / \"src\"\n        self.trace_dir = self.src_dir / \"snfoundry_trace\"\n        self.docs_benchmarks = self.workspace_root / \"docs\" / \"benchmarks\"\n        self.readme = self.workspace_root / \"README.md\"\n\n    def ensure_dirs(self):\n        \"\"\"Ensure necessary directories exist.\"\"\"\n        self.docs_benchmarks.mkdir(parents=True, exist_ok=True)\n\n\n# Logging & UI\nclass Logger:\n    \"\"\"Centralized logging with decorators and context management.\"\"\"\n\n    STYLES = {\n        \"info\": (\"ℹ️\", \"[dim]{message}[/dim]\"),\n        \"success\": (\"✅\", \"[green]{message}[/green]\"),\n        \"warning\": (\"⚠️\", \"[yellow]{message}[/yellow]\"),\n        \"error\": (\"❌\", \"[bold red]{message}[/bold red]\"),\n        \"debug\": (\"🔍\", \"[dim cyan]{message}[/dim cyan]\"),\n    }\n\n    @staticmethod\n    def log(message: str, level: str = \"info\", emoji: str = None):\n        \"\"\"Consolidated logging function.\"\"\"\n        if level == \"debug\" and not console.is_terminal:\n            return\n\n        emoji_char, style_template = Logger.STYLES.get(level, Logger.STYLES[\"info\"])\n        if emoji:\n            emoji_char = emoji\n\n        formatted_message = style_template.format(message=message)\n        console.print(f\"{emoji_char} {formatted_message}\")\n\n    @staticmethod\n    def header(title: str):\n        \"\"\"Print formatted header.\"\"\"\n        console.print(\n            Panel(\n                Align.center(Text(title, style=\"bold cyan\")),\n                border_style=\"cyan\",\n                padding=(0, 1),\n                width=80,\n            )\n        )\n\n    @staticmethod\n    def exit_panel(message: str, status: str, border_style: str = \"green\"):\n        \"\"\"Show standardized exit panel.\"\"\"\n        console.print(\n            Panel(\n                Align.center(message),\n                border_style=border_style,\n                title=f\"[{border_style}]{status}[/{border_style}]\",\n            )\n        )\n\n\ndef handle_errors(func):\n    \"\"\"Decorator for centralized error handling - only for non-critical functions.\"\"\"\n\n    @wraps(func)\n    def wrapper(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except Exception as e:\n            Logger.log(f\"Error in {func.__name__}: {e}\", level=\"error\")\n            return False\n\n    return wrapper\n\n\ndef fail_on_error(func):\n    \"\"\"Decorator that prints errors and exits immediately.\"\"\"\n\n    @wraps(func)\n    def wrapper(*args, **kwargs):\n        try:\n            return func(*args, **kwargs)\n        except Exception as e:\n            import traceback\n\n            Logger.log(f\"FATAL ERROR in {func.__name__}: {e}\", level=\"error\")\n            Logger.log(f\"Full traceback:\\n{traceback.format_exc()}\", level=\"error\")\n            Logger.exit_panel(f\"💥 Fatal error in {func.__name__}: {e}\", \"Error\", \"red\")\n            sys.exit(1)\n\n    return wrapper\n\n\ndef log_step(description: str):\n    \"\"\"Decorator for logging method execution steps.\"\"\"\n\n    def decorator(func):\n        @wraps(func)\n        def wrapper(*args, **kwargs):\n            Logger.log(f\"Starting: {description}\", level=\"info\")\n            result = func(*args, **kwargs)\n            Logger.log(f\"Completed: {description}\", level=\"success\")\n            return result\n\n        return wrapper\n\n    return decorator\n\n\nclass UIBuilder:\n    \"\"\"Builder for console UI elements.\"\"\"\n\n    @staticmethod\n    def progress(advanced: bool = False) -> Progress:\n        \"\"\"Create progress bar.\"\"\"\n        base_elements = [\n            SpinnerColumn(),\n            TextColumn(\"[progress.description]{task.description}\"),\n        ]\n        if advanced:\n            return Progress(\n                *base_elements,\n                BarColumn(bar_width=40, style=\"cyan\", complete_style=\"green\"),\n                \"[progress.percentage]{task.percentage:>3.0f}%\",\n                \"•\",\n                TextColumn(\"({task.completed}/{task.total} files)\"),\n                \"•\",\n                TimeElapsedColumn(),\n                \"•\",\n                TimeRemainingColumn(),\n                console=console,\n                transient=False,\n            )\n        return Progress(\n            *base_elements,\n            BarColumn(bar_width=30, style=\"cyan\", complete_style=\"green\"),\n            TaskProgressColumn(),\n            \"•\",\n            TimeElapsedColumn(),\n            \"•\",\n            TimeRemainingColumn(),\n            console=console,\n            transient=False,\n        )\n\n\n# Enhanced TestResourceInfo\n@dataclass\nclass TestResourceInfo:\n    \"\"\"Container for test resource information with enhanced methods.\"\"\"\n\n    test_name_hierarchical: str\n    test_name_simple: str\n    steps: int\n    builtins: dict = field(default_factory=dict)\n    image_path: str = \"\"\n    category: str = \"garaga\"\n    sierra_gas: int = field(init=False)\n\n    def __post_init__(self):\n        self.sierra_gas = self._calculate_sierra_gas()\n        if self.category == \"garaga\" and \"::\" in self.test_name_hierarchical:\n            if not self.test_name_hierarchical.startswith(\"garaga::\"):\n                self.category = \"contracts\"\n\n    @classmethod\n    def from_trace_file(\n        cls,\n        test_name: str,\n        trace_path: Path,\n        profile_path: Path,\n        resources: dict,\n        image_path: str = \"\",\n    ):\n        \"\"\"Create instance from trace file data.\"\"\"\n        steps = resources.get(\"steps\", 0)\n        builtins = {k: v for k, v in resources.items() if k != \"steps\"}\n        test_name_simple = test_name.split(\"::\")[-1]\n\n        return cls(\n            test_name_hierarchical=test_name,\n            test_name_simple=test_name_simple,\n            steps=steps,\n            builtins=builtins,\n            image_path=image_path,\n            category=\"contracts\" if not test_name.startswith(\"garaga::\") else \"garaga\",\n        )\n\n    @staticmethod\n    def predict_trace_path(test_name: str, base_dir: Path) -> Path:\n        \"\"\"Predict trace file path from hierarchical test name.\"\"\"\n        return base_dir / f\"{test_name.replace('::', '_')}.json\"\n\n    @staticmethod\n    def extract_hierarchy_parts(test_name: str) -> List[str]:\n        \"\"\"Extract module hierarchy parts.\"\"\"\n        parts = test_name.split(\"::\")\n        if parts and parts[-1].startswith(\"test_\"):\n            parts = parts[:-1]\n        if parts and parts[0] == \"garaga\":\n            parts = parts[1:]\n        return parts if parts else [\"tests\"]\n\n    def _calculate_sierra_gas(self) -> int:\n        \"\"\"Calculate Sierra gas using weight table.\"\"\"\n        config = Config()\n        total = self.steps * config.sierra_gas_weights[\"steps\"]\n        for builtin, count in self.builtins.items():\n            if builtin in config.sierra_gas_weights:\n                total += count * config.sierra_gas_weights[builtin]\n        return total\n\n    def to_benchmark_row(self) -> dict:\n        \"\"\"Convert to benchmark row format.\"\"\"\n        result = {\n            \"test_name_hierarchical\": self.test_name_hierarchical,\n            \"test_name\": self.test_name_simple,\n            \"steps\": self.steps,\n            \"sierra_gas\": self.sierra_gas,\n            \"image_path\": self.image_path,\n            \"category\": self.category,\n        }\n\n        # Add builtin columns\n        config = Config()\n        for builtin in config.sierra_gas_weights.keys():\n            if builtin != \"steps\":\n                result[builtin] = self.builtins.get(builtin, 0)\n\n        return result\n\n\n# Data Processing\nclass JsonManager:\n    \"\"\"Utility class for JSON operations with context management.\"\"\"\n\n    @staticmethod\n    @handle_errors\n    def read(file_path: Path, default=None):\n        \"\"\"Read JSON file with error handling.\"\"\"\n        if not file_path.exists():\n            return default if default is not None else {}\n        with open(file_path, \"r\") as f:\n            return json.load(f)\n\n    @staticmethod\n    @handle_errors\n    def write(file_path: Path, data, indent: int = 2) -> bool:\n        \"\"\"Write JSON file with error handling.\"\"\"\n        with open(file_path, \"w\") as f:\n            json.dump(data, f, indent=indent)\n        return True\n\n\nclass TraceProcessor:\n    \"\"\"Strategy for processing trace files.\"\"\"\n\n    def __init__(self, config: Config):\n        self.config = config\n        self.sample_mapping = {\n            \"steps\": \"steps\",\n            \"range check builtin\": \"range_check\",\n            \"range check96 builtin\": \"range_check96\",\n            \"keccak builtin\": \"keccak\",\n            \"pedersen builtin\": \"pedersen\",\n            \"bitwise builtin\": \"bitwise\",\n            \"ecop builtin\": \"ecop\",\n            \"poseidon builtin\": \"poseidon\",\n            \"add mod builtin\": \"add_mod\",\n            \"mul mod builtin\": \"mul_mod\",\n        }\n\n    def process(\n        self, test_name: str, trace_path: Path\n    ) -> Tuple[bool, str, str, Optional[TestResourceInfo]]:\n        \"\"\"Process a single trace file.\"\"\"\n        try:\n            with managed_subprocess() as (run_cmd, pm):\n                profile_file = self._generate_profile(trace_path, run_cmd)\n                if not profile_file or not profile_file.exists():\n                    Logger.log(\n                        f\"Profile file not generated for {test_name}: {trace_path}\",\n                        level=\"warning\",\n                    )\n                    return False, test_name, \"\", None\n\n                resources = self._extract_resources(profile_file, run_cmd)\n                test_name_simple = test_name.split(\"::\")[-1]\n                docs_image_path = (\n                    Paths(Path.cwd()).docs_benchmarks / f\"{test_name_simple}.png\"\n                )\n                image_success = self._generate_image(\n                    profile_file, docs_image_path, run_cmd\n                )\n\n                test_info = TestResourceInfo.from_trace_file(\n                    test_name,\n                    trace_path,\n                    profile_file,\n                    resources,\n                    f\"docs/benchmarks/{test_name_simple}.png\",\n                )\n\n                return image_success, test_name, test_info.image_path, test_info\n        except Exception as e:\n            import traceback\n\n            # Re-raise with more context including full traceback\n            full_tb = traceback.format_exc()\n            raise Exception(\n                f\"Failed to process {test_name}:\\nTrace path: {trace_path}\\nError: {str(e)}\\nTraceback:\\n{full_tb}\"\n            ) from e\n\n    def _generate_profile(self, trace_file: Path, run_cmd) -> Optional[Path]:\n        \"\"\"Generate profile from trace file.\"\"\"\n        profile_file = trace_file.parent / f\"{trace_file.stem}.pb.gz\"\n        cmd = [\n            \"cairo-profiler\",\n            \"build-profile\",\n            str(trace_file),\n            \"--output-path\",\n            str(profile_file),\n        ]\n        result = run_cmd(\n            cmd,\n            check=False,  # Don't raise, we'll handle the error ourselves\n            capture_output=True,\n            text=True,\n        )\n        if result.returncode != 0:\n            error_msg = f\"cairo-profiler build-profile failed:\\nCommand: {' '.join(cmd)}\\nReturn code: {result.returncode}\"\n            if result.stdout:\n                error_msg += f\"\\nSTDOUT:\\n{result.stdout}\"\n            if result.stderr:\n                error_msg += f\"\\nSTDERR:\\n{result.stderr}\"\n            raise Exception(error_msg)\n        return profile_file\n\n    def _extract_resources(self, profile_file: Path, run_cmd) -> dict:\n        \"\"\"Extract resources from profile file.\"\"\"\n        cmd = [\"cairo-profiler\", \"view\", str(profile_file), \"--list-samples\"]\n        result = run_cmd(\n            cmd,\n            check=False,  # Don't raise, we'll handle the error ourselves\n            capture_output=True,\n            text=True,\n        )\n        if result.returncode != 0:\n            error_msg = f\"cairo-profiler view --list-samples failed:\\nCommand: {' '.join(cmd)}\\nReturn code: {result.returncode}\"\n            if result.stdout:\n                error_msg += f\"\\nSTDOUT:\\n{result.stdout}\"\n            if result.stderr:\n                error_msg += f\"\\nSTDERR:\\n{result.stderr}\"\n            raise Exception(error_msg)\n\n        samples = [\n            line.strip()\n            for line in result.stdout.strip().split(\"\\n\")\n            if line.strip() and line.strip() not in self.config.excluded_profile_samples\n        ]\n\n        resources = {}\n        for sample in samples:\n            try:\n                sample_result = run_cmd(\n                    [\"cairo-profiler\", \"view\", str(profile_file), \"--sample\", sample],\n                    check=True,\n                    capture_output=True,\n                    text=True,\n                )\n\n                # Updated regex to handle the new cairo-profiler output format\n                # Example: \"Showing nodes accounting for 11582 steps, 94.63% of 12239 steps total\"\n                pattern = rf\"(\\d+) {re.escape(sample)} total\"\n                match = re.search(pattern, sample_result.stdout, re.IGNORECASE)\n                if match:\n                    count = int(match.group(1))\n                    normalized = self.sample_mapping.get(sample.lower().strip())\n                    if normalized:\n                        resources[normalized] = count\n            except subprocess.CalledProcessError as e:\n                # Log individual sample errors but continue\n                Logger.log(f\"Failed to extract sample '{sample}': {e}\", level=\"warning\")\n                continue\n\n        return resources\n\n    def _generate_image(self, profile_file: Path, output_path: Path, run_cmd) -> bool:\n        \"\"\"Generate PNG image using pprof.\"\"\"\n        cmd = [\n            \"go\",\n            \"tool\",\n            \"pprof\",\n            \"-png\",\n            \"-sample_index=steps\",\n            \"-output\",\n            str(output_path),\n            str(profile_file),\n        ]\n        result = run_cmd(\n            cmd,\n            check=False,  # Don't raise, we'll handle the error ourselves\n            capture_output=True,\n            text=True,\n        )\n        if result.returncode != 0:\n            error_msg = f\"pprof failed:\\nCommand: {' '.join(cmd)}\\nReturn code: {result.returncode}\"\n            if result.stdout:\n                error_msg += f\"\\nSTDOUT:\\n{result.stdout}\"\n            if result.stderr:\n                error_msg += f\"\\nSTDERR:\\n{result.stderr}\"\n            raise Exception(error_msg)\n        return True\n\n\n# Command Pattern Implementation\nclass Command(ABC):\n    \"\"\"Abstract base class for commands.\"\"\"\n\n    @abstractmethod\n    def execute(self) -> bool:\n        \"\"\"Execute the command.\"\"\"\n\n    @abstractmethod\n    def can_execute(self) -> bool:\n        \"\"\"Check if command can be executed.\"\"\"\n\n\nclass CheckDependenciesCommand(Command):\n    \"\"\"Command to check tool dependencies.\"\"\"\n\n    def __init__(self, config: Config):\n        self.config = config\n        self.tools = [\n            (\"snforge\", \"Starknet Foundry\", [\"snforge\", \"--version\"]),\n            (\"cairo-profiler\", \"cairo-profiler\", [\"cairo-profiler\", \"--version\"]),\n            (\"go\", \"Go to use pprof\", [\"go\", \"version\"]),\n        ]\n\n    @log_step(\"Checking Dependencies\")\n    @handle_errors\n    def execute(self) -> bool:\n        Logger.header(\"🔍 Checking Dependencies\")\n        with managed_subprocess() as (run_cmd, pm):\n            for tool, desc, cmd in self.tools:\n                try:\n                    result = run_cmd(cmd, check=True, capture_output=True, text=True)\n                    Logger.log(f\"{tool}: {result.stdout.strip()}\", level=\"success\")\n                except subprocess.CalledProcessError:\n                    Logger.log(\n                        f\"{tool} not found. Please install {desc}.\", level=\"error\"\n                    )\n                    return False\n\n        Logger.log(\"All dependencies satisfied!\", level=\"success\")\n        return True\n\n    def can_execute(self) -> bool:\n        return True\n\n\nclass RunTestsCommand(Command):\n    \"\"\"Command to run tests with trace collection.\"\"\"\n\n    def __init__(self, paths: Paths, test_filter: Optional[str] = None):\n        self.paths = paths\n        self.test_filter = test_filter\n        self.passed_tests = []\n\n    @log_step(\"Running Tests & Collecting Traces\")\n    @handle_errors\n    def execute(self) -> bool:\n        Logger.header(\"🧪 Running Tests & Collecting Traces\")\n\n        original_cwd = os.getcwd()\n        cmd = [\"snforge\", \"test\"]\n        if self.test_filter:\n            cmd.append(self.test_filter)\n        cmd.append(\"--save-trace-data\")\n\n        test_dirs = [self.paths.src_dir] + self._get_contract_paths()\n        success_count = 0\n\n        with managed_subprocess() as (run_cmd, pm):\n            with UIBuilder.progress() as progress:\n                # Create a single task outside the loop\n                base_desc = (\n                    f\"Running tests matching: {self.test_filter}\"\n                    if self.test_filter\n                    else \"Running all tests\"\n                )\n                task = progress.add_task(base_desc, total=len(test_dirs))\n\n                for i, test_dir in enumerate(test_dirs):\n                    # Update the description for the current directory\n                    current_desc = f\"{base_desc} from {test_dir.relative_to(self.paths.workspace_root)}\"\n                    progress.update(task, description=current_desc)\n\n                    if not test_dir.exists() or not (test_dir / \"Scarb.toml\").exists():\n                        Logger.log(\n                            f\"Skipping {test_dir}: directory or Scarb.toml not found\",\n                            level=\"debug\",\n                        )\n                        continue\n                    os.chdir(test_dir)\n                    Logger.log(\n                        f\"Running command: {' '.join(cmd)} in {test_dir}\", level=\"debug\"\n                    )\n                    result = run_cmd(cmd, capture_output=True, text=True)\n\n                    if result.returncode == 0:\n                        success_count += 1\n                        passed = re.findall(\n                            r\"\\[PASS\\]\\s+([^\\s]+)\\s+\\(l1_gas:\", result.stdout\n                        )\n                        self.passed_tests.extend(passed)\n                        Logger.log(\n                            f\"Found {len(passed)} passed tests in {test_dir.name}\",\n                            level=\"debug\",\n                        )\n                    else:\n                        error_details = []\n                        error_details.append(f\"Directory: {test_dir}\")\n                        error_details.append(f\"Command: {' '.join(cmd)}\")\n                        error_details.append(f\"Return code: {result.returncode}\")\n                        if result.stdout:\n                            error_details.append(f\"STDOUT:\\n{result.stdout}\")\n                        if result.stderr:\n                            error_details.append(f\"STDERR:\\n{result.stderr}\")\n                        full_error = \"\\n\".join(error_details)\n                        raise Exception(f\"Failed to run tests:\\n{full_error}\")\n                    # Advance the progress by 1 for each directory processed\n                    progress.advance(task, 1)\n\n        os.chdir(original_cwd)\n\n        if success_count > 0:\n            Logger.log(f\"Found {len(self.passed_tests)} passed tests\", level=\"success\")\n            return True\n        else:\n            Logger.log(\"No tests executed successfully\", level=\"error\")\n            return False\n\n    def can_execute(self) -> bool:\n        return self.paths.src_dir.exists()\n\n    def _get_contract_paths(self) -> List[Path]:\n        \"\"\"Get contract paths from config.\"\"\"\n        config = Config()\n        return [\n            self.paths.workspace_root / \"src\" / \"contracts\" / contract\n            for contract in config.contracts\n        ]\n\n\nclass ProcessTracesCommand(Command):\n    \"\"\"Command to process trace files and generate profiles.\"\"\"\n\n    def __init__(self, paths: Paths, passed_tests: List[str], parallel_jobs: int = 4):\n        self.paths = paths\n        self.passed_tests = passed_tests\n        self.parallel_jobs = parallel_jobs\n        self.test_resources = []\n\n    @log_step(\"Processing Traces & Extracting Resources\")\n    def execute(self) -> bool:\n        if not self.passed_tests:\n            Logger.log(\"No passed tests to process\", level=\"warning\")\n            return False\n\n        Logger.header(\n            f\"🚀 Processing {len(self.passed_tests)} tests with {self.parallel_jobs} parallel jobs\"\n        )\n\n        trace_files = self._find_trace_files()\n        if not trace_files:\n            Logger.log(\"No trace files found\", level=\"warning\")\n            return False\n\n        processor = TraceProcessor(Config())\n\n        try:\n            with (\n                ProcessManager() as pm,\n                ThreadPoolExecutor(max_workers=self.parallel_jobs) as executor,\n            ):\n                futures = {\n                    executor.submit(processor.process, test_name, trace_path): test_name\n                    for test_name, trace_path, _ in trace_files\n                }\n\n                success_count = self._process_futures_interruptible(futures, pm)\n\n            if self.test_resources:\n                self._update_summary()\n\n            Logger.log(\n                f\"Successfully processed {success_count}/{len(trace_files)} tests\",\n                level=\"success\",\n            )\n            return success_count > 0\n\n        except KeyboardInterrupt:\n            Logger.log(\"Processing interrupted by user\", level=\"warning\")\n            raise\n\n    def can_execute(self) -> bool:\n        return len(self.passed_tests) > 0\n\n    def _find_trace_files(self) -> List[Tuple[str, Path, Path]]:\n        \"\"\"Find trace files for passed tests.\"\"\"\n        found = []\n        trace_dirs = self._get_trace_directories()\n\n        for test_name in self.passed_tests:\n            for trace_dir in trace_dirs:\n                if not trace_dir.exists():\n                    continue\n                predicted_path = TestResourceInfo.predict_trace_path(\n                    test_name, trace_dir\n                )\n                if predicted_path.exists():\n                    found.append((test_name, predicted_path, trace_dir.parent))\n                    break\n\n        return found\n\n    def _get_trace_directories(self) -> List[Path]:\n        \"\"\"Get all potential trace directories.\"\"\"\n        dirs = [self.paths.trace_dir]\n        config = Config()\n        for contract in config.contracts:\n            dirs.append(\n                self.paths.workspace_root\n                / \"src\"\n                / \"contracts\"\n                / contract\n                / \"snfoundry_trace\"\n            )\n        return dirs\n\n    def _process_futures_interruptible(self, futures, pm) -> int:\n        \"\"\"Process completed futures with progress tracking and interruptibility.\"\"\"\n        success_count = 0\n\n        with UIBuilder.progress(True) as progress:\n            task = progress.add_task(\"Processing tests\", total=len(futures))\n\n            try:\n                for future in futures:\n                    if pm.shutdown_event.is_set():\n                        future.cancel()\n                        continue\n\n                    try:\n                        success, test_name, _, test_info = future.result(\n                            timeout=60 * 20\n                        )  # Increased timeout\n                        if success and test_info:\n                            self.test_resources.append(test_info)\n                            console.print(f\"✨ [green]{test_name}[/green]\")\n                            success_count += 1\n                        else:\n                            console.print(\n                                f\"💥 [red]{test_name}[/red]: Processing failed\"\n                            )\n                    except Exception as e:\n                        test_name = futures[future]\n                        error_msg = str(e)\n                        console.print(f\"💥 [red]{test_name}[/red]: {error_msg}\")\n\n                        # Print full error details and exit\n                        import traceback\n\n                        Logger.log(\n                            f\"FATAL ERROR processing {test_name}: {error_msg}\",\n                            level=\"error\",\n                        )\n                        Logger.log(\n                            f\"Full traceback:\\n{traceback.format_exc()}\", level=\"error\"\n                        )\n                        Logger.exit_panel(\n                            f\"💥 Fatal error processing {test_name}: {error_msg}\",\n                            \"Error\",\n                            \"red\",\n                        )\n                        sys.exit(1)\n\n                    progress.advance(task, 1)\n\n            except KeyboardInterrupt:\n                # Cancel all remaining futures immediately\n                for future in futures:\n                    future.cancel()\n                # Re-raise to propagate the interrupt\n                raise\n\n        return success_count\n\n    def _update_summary(self):\n        \"\"\"Update global summary JSON.\"\"\"\n        summary_file = self.paths.docs_benchmarks / \"test_summary.json\"\n        summary_data = JsonManager.read(summary_file, {})\n\n        timestamp_iso = datetime.now().isoformat()\n        for test_info in self.test_resources:\n            summary_data[test_info.test_name_simple] = {\n                \"last_updated\": timestamp_iso,\n                \"latest_metrics\": test_info.to_benchmark_row(),\n            }\n\n        if JsonManager.write(summary_file, summary_data):\n            Logger.log(\"Performance data saved\", level=\"success\")\n\n\nclass GenerateBenchmarksCommand(Command):\n    \"\"\"Command to generate Cairo benchmarks.\"\"\"\n\n    def __init__(self, paths: Paths):\n        self.paths = paths\n\n    @log_step(\"Generating Cairo Benchmarks\")\n    def execute(self) -> bool:\n        Logger.log(\"Generating Cairo benchmarks...\", level=\"info\")\n\n        summary_file = self.paths.docs_benchmarks / \"test_summary.json\"\n        test_data = JsonManager.read(summary_file, {})\n\n        if not test_data:\n            Logger.log(\"No test data available\", level=\"warning\")\n            return False\n\n        success = self._update_readme(test_data)\n        if success:\n            Logger.log(\n                f\"Generated benchmarks for {len(test_data)} tests\", level=\"success\"\n            )\n\n        return success\n\n    def can_execute(self) -> bool:\n        return self.paths.readme.exists()\n\n    @handle_errors\n    def _update_readme(self, test_data: dict) -> bool:\n        \"\"\"Update README with benchmarks.\"\"\"\n        with open(self.paths.readme, \"r\", encoding=\"utf-8\") as f:\n            content = f.read()\n\n        start_idx, end_idx = self._find_benchmarks_section(content)\n        lines = content.split(\"\\n\")\n\n        new_content = self._generate_benchmarks_content(test_data)\n        new_lines = new_content.rstrip().split(\"\\n\")\n\n        if start_idx is not None:\n            if end_idx < len(lines) and lines[end_idx - 1].strip() == \"\":\n                updated_lines = lines[:start_idx] + new_lines + lines[end_idx:]\n            else:\n                updated_lines = lines[:start_idx] + new_lines + [\"\"] + lines[end_idx:]\n        else:\n            support_idx = next(\n                (\n                    i\n                    for i, line in enumerate(lines)\n                    if \"Support & How to Contribute\" in line\n                ),\n                None,\n            )\n            if support_idx:\n                updated_lines = (\n                    lines[:support_idx] + new_lines + [\"\"] + lines[support_idx:]\n                )\n            else:\n                updated_lines = lines + [\"\"] + new_lines\n\n        with open(self.paths.readme, \"w\", encoding=\"utf-8\") as f:\n            f.write(\"\\n\".join(updated_lines))\n\n        Logger.log(\"Updated README.md with benchmarks\", level=\"success\")\n        return True\n\n    def _find_benchmarks_section(\n        self, content: str\n    ) -> Tuple[Optional[int], Optional[int]]:\n        \"\"\"Find Cairo Benchmarks section.\"\"\"\n        lines = content.split(\"\\n\")\n        start_idx = end_idx = None\n\n        for i, line in enumerate(lines):\n            if line.strip() == \"## Cairo Benchmarks\":\n                start_idx = i\n            elif (\n                start_idx is not None\n                and line.startswith(\"## \")\n                and line.strip() != \"## Cairo Benchmarks\"\n            ):\n                end_idx = i\n                break\n\n        if start_idx is not None and end_idx is None:\n            end_idx = len(lines)\n\n        return start_idx, end_idx\n\n    def _generate_benchmarks_content(self, test_data: dict) -> str:\n        \"\"\"Generate complete benchmarks content.\"\"\"\n        if not test_data:\n            return \"## Cairo Benchmarks\\n\\n*No benchmark data available.*\\n\\n\"\n\n        report_builder = ReportBuilder(test_data)\n        content = report_builder.build()\n\n        return f\"\"\"## Cairo Benchmarks\n\n📊 **Click on any section below to expand and view detailed benchmark tables with test performance metrics.**\n\n**Note:** Click on the test name to view the profiling image. Resources shown in the table for contracts include extra costs due to the foundry logic.\nCheck the profile file for more details.\n\n{content.rstrip()}\n\n---\n🔄 **To regenerate these benchmarks:** Run `make profile-test` from the project root.\n\n\"\"\"\n\n\n# Report Generation with Builder Pattern\nclass ReportBuilder:\n    \"\"\"Builder for generating benchmark reports with fluent interface.\"\"\"\n\n    def __init__(self, test_data: dict):\n        self.test_data = test_data\n        self.grouped_data = None\n\n    def build(self) -> str:\n        \"\"\"Build the final report.\"\"\"\n        if not self.grouped_data:\n            self._group_by_module()\n        return self._generate_nested_hierarchy(self.grouped_data)\n\n    def _group_by_module(self):\n        \"\"\"Group tests by module hierarchy.\"\"\"\n        main_grouped = {\n            \"garaga\": defaultdict(lambda: defaultdict(list)),\n            \"contracts\": defaultdict(lambda: defaultdict(list)),\n        }\n\n        for test_name, test_info in self.test_data.items():\n            latest_metrics = test_info.get(\"latest_metrics\", {})\n            if not latest_metrics:\n                continue\n\n            hierarchical_name = latest_metrics.get(\"test_name_hierarchical\", \"\")\n            category = latest_metrics.get(\"category\", \"garaga\")\n            hierarchy_parts = TestResourceInfo.extract_hierarchy_parts(\n                hierarchical_name\n            )\n\n            current = main_grouped[category]\n            for module in hierarchy_parts[:-1]:\n                if module not in current:\n                    current[module] = defaultdict(list)\n                current = current[module]\n\n            final_module = hierarchy_parts[-1] if hierarchy_parts else \"tests\"\n            if not isinstance(current[final_module], list):\n                current[final_module] = []\n            current[final_module].append(latest_metrics)\n\n        self.grouped_data = {k: dict(v) for k, v in main_grouped.items() if v}\n\n    def _generate_nested_hierarchy(\n        self, grouped_data: dict, current_path: List[str] = None\n    ) -> str:\n        \"\"\"Generate nested collapsible hierarchy.\"\"\"\n        if current_path is None:\n            current_path = []\n\n        content = \"\"\n        # Sort sections alphabetically by module name\n        for module_name, module_data in sorted(grouped_data.items()):\n            if isinstance(module_data, list):\n                df = self._create_dataframe(module_data)\n                table_content = self._generate_table(df)\n                content += self._collapsible_section(\n                    module_name, table_content, False, len(current_path)\n                )\n            elif isinstance(module_data, dict):\n                merged_name, current_data = self._merge_single_children(\n                    module_name, module_data\n                )\n\n                if isinstance(current_data, list):\n                    df = self._create_dataframe(current_data)\n                    table_content = self._generate_table(df)\n                    content += self._collapsible_section(\n                        merged_name, table_content, False, len(current_path)\n                    )\n                else:\n                    inner_content = self._generate_nested_hierarchy(\n                        current_data, current_path + [module_name]\n                    )\n                    is_open = len(current_path) > 0\n                    content += self._collapsible_section(\n                        merged_name, inner_content, is_open, len(current_path)\n                    )\n\n        return content\n\n    def _merge_single_children(self, name: str, data: dict) -> Tuple[str, any]:\n        \"\"\"Merge chains of single children.\"\"\"\n        merged_name = name\n        current_data = data\n\n        while len(current_data) == 1:\n            child_name = list(current_data.keys())[0]\n            child_data = list(current_data.values())[0]\n\n            if isinstance(child_data, list):\n                merged_name += \"::\" + child_name\n                return merged_name, child_data\n            elif isinstance(child_data, dict):\n                merged_name += \"::\" + child_name\n                current_data = child_data\n            else:\n                break\n\n        return merged_name, current_data\n\n    def _create_dataframe(self, tests: List[dict]) -> pd.DataFrame:\n        \"\"\"Create DataFrame from test data.\"\"\"\n        if not tests:\n            return pd.DataFrame()\n\n        columns = [\n            \"test_name\",\n            \"steps\",\n            \"range_check\",\n            \"range_check96\",\n            \"bitwise\",\n            \"poseidon\",\n            \"add_mod\",\n            \"mul_mod\",\n            \"keccak\",\n            \"pedersen\",\n            \"ecop\",\n            \"syscalls_count\",\n            \"sierra_gas\",\n            \"image_path\",\n        ]\n\n        df = pd.DataFrame(tests)\n        available_columns = [col for col in columns if col in df.columns]\n        df = df[available_columns]\n\n        # Remove zero columns except essentials\n        essential = [\"test_name\", \"steps\", \"sierra_gas\", \"image_path\"]\n        for col in df.columns:\n            if col not in essential and (df[col] == 0).all():\n                df = df.drop(columns=[col])\n\n        if \"sierra_gas\" in df.columns:\n            df = df.sort_values(\"sierra_gas\", ascending=False)\n\n        return df\n\n    def _generate_table(self, df: pd.DataFrame) -> str:\n        \"\"\"Generate markdown table.\"\"\"\n        if df.empty:\n            return \"*No tests found.*\\n\"\n\n        df = df.copy()\n\n        if \"test_name\" in df.columns:\n            df[\"test_name\"] = df.apply(\n                lambda row: f\"[{row['test_name']}]({row.get('image_path', 'docs/benchmarks/' + row['test_name'] + '.png')})\",\n                axis=1,\n            )\n\n        # Format numbers\n        numeric_cols = [\n            \"steps\",\n            \"range_check\",\n            \"range_check96\",\n            \"bitwise\",\n            \"poseidon\",\n            \"add_mod\",\n            \"mul_mod\",\n            \"keccak\",\n            \"pedersen\",\n            \"ecop\",\n            \"syscalls_count\",\n            \"sierra_gas\",\n        ]\n        for col in numeric_cols:\n            if col in df.columns:\n                df[col] = df[col].apply(lambda x: f\"{x:,}\" if pd.notna(x) else \"0\")\n\n        # Rename columns\n        column_mapping = {\n            \"test_name\": \"Test Name\",\n            \"steps\": \"Steps\",\n            \"range_check\": \"Range Check\",\n            \"range_check96\": \"Range Check 96\",\n            \"bitwise\": \"Bitwise\",\n            \"poseidon\": \"Poseidon\",\n            \"add_mod\": \"Add Mod\",\n            \"mul_mod\": \"Mul Mod\",\n            \"keccak\": \"Keccak\",\n            \"pedersen\": \"Pedersen\",\n            \"ecop\": \"ECOP\",\n            \"syscalls_count\": \"Syscalls\",\n            \"sierra_gas\": \"Sierra Gas\",\n        }\n\n        display_df = df.drop(columns=[\"image_path\"], errors=\"ignore\")\n        df_display = display_df.rename(columns=column_mapping)\n\n        return (\n            tabulate(df_display, headers=\"keys\", tablefmt=\"github\", showindex=False)\n            + \"\\n\"\n        )\n\n    def _collapsible_section(\n        self, title: str, content: str, is_open: bool, indent_level: int\n    ) -> str:\n        \"\"\"Generate collapsible section.\"\"\"\n        open_attr = \" open\" if is_open else \"\"\n\n        if indent_level > 0:\n            base_indent = \"│   \" * (indent_level - 1)\n            branch = \"└── \"\n            title = f\"{base_indent}{branch}{title}\"\n\n        return f\"\"\"<details{open_attr}>\n<summary><strong>{title}</strong></summary>\n\n{content}\n</details>\n\n\"\"\"\n\n\n# Workflow Executor\nclass WorkflowExecutor:\n    \"\"\"Executes command chains with automatic rollback.\"\"\"\n\n    def __init__(self, config: Config, paths: Paths):\n        self.config = config\n        self.paths = paths\n        self.executed_commands = []\n\n    def execute_workflow(\n        self,\n        test_filter: Optional[str] = None,\n        parallel_jobs: int = 2,\n        generate_benchmarks: bool = False,\n    ) -> bool:\n        \"\"\"Execute the complete workflow.\"\"\"\n        try:\n            self.paths.ensure_dirs()\n\n            commands = [\n                CheckDependenciesCommand(self.config),\n                RunTestsCommand(self.paths, test_filter),\n            ]\n\n            for cmd in commands:\n                if not cmd.can_execute():\n                    raise Exception(f\"Cannot execute {cmd.__class__.__name__}\")\n\n                if not cmd.execute():\n                    raise Exception(f\"Command {cmd.__class__.__name__} failed\")\n\n                self.executed_commands.append(cmd)\n\n            # Get passed tests from RunTestsCommand\n            run_tests_cmd = next(\n                cmd\n                for cmd in self.executed_commands\n                if isinstance(cmd, RunTestsCommand)\n            )\n\n            # Process traces\n            process_cmd = ProcessTracesCommand(\n                self.paths, run_tests_cmd.passed_tests, parallel_jobs\n            )\n            if not process_cmd.can_execute():\n                raise Exception(\"Cannot execute ProcessTracesCommand\")\n\n            if not process_cmd.execute():\n                raise Exception(\"ProcessTracesCommand failed\")\n\n            self.executed_commands.append(process_cmd)\n\n            # Generate benchmarks if requested\n            if generate_benchmarks:\n                benchmark_cmd = GenerateBenchmarksCommand(self.paths)\n                if benchmark_cmd.can_execute():\n                    if not benchmark_cmd.execute():\n                        raise Exception(\"GenerateBenchmarksCommand failed\")\n\n            Logger.header(\"🎯 Workflow Complete\")\n            Logger.log(\"Profiling workflow completed successfully!\", level=\"success\")\n\n            return True\n\n        except KeyboardInterrupt:\n            # Re-raise KeyboardInterrupt to be handled by main()\n            raise\n        except Exception as e:\n            import traceback\n\n            Logger.log(f\"FATAL ERROR in execute_workflow: {e}\", level=\"error\")\n            Logger.log(f\"Full traceback:\\n{traceback.format_exc()}\", level=\"error\")\n            Logger.exit_panel(\n                f\"💥 Fatal error in execute_workflow: {e}\", \"Error\", \"red\"\n            )\n            sys.exit(1)\n\n\n# Simplified Main Function & CLI\n@dataclass\nclass CLIConfig:\n    \"\"\"CLI configuration.\"\"\"\n\n    test_filter: Optional[str] = None\n    workspace: Optional[str] = None\n    parallel_jobs: int = 2\n    generate_benchmarks: bool = False\n    benchmarks_only: bool = False\n\n\ndef main():\n    \"\"\"Simplified main entry point.\"\"\"\n    Logger.header(\"🐺 Garaga Test Profiler\")\n\n    # Parse arguments\n    parser = argparse.ArgumentParser(description=\"Run snforge tests with profiling\")\n    parser.add_argument(\"test_filter\", nargs=\"?\", help=\"Test name filter\")\n    parser.add_argument(\"--all\", action=\"store_true\", help=\"Run all tests\")\n    parser.add_argument(\"--workspace\", help=\"Workspace root path\")\n    parser.add_argument(\"--parallel-jobs\", type=int, default=2, help=\"Parallel jobs\")\n    parser.add_argument(\n        \"--generate-benchmarks\", action=\"store_true\", help=\"Generate benchmarks\"\n    )\n    parser.add_argument(\n        \"--benchmarks-only\", action=\"store_true\", help=\"Only generate benchmarks\"\n    )\n\n    args = parser.parse_args()\n\n    # Create CLI config\n    cli_config = CLIConfig(\n        test_filter=None if args.all else args.test_filter,\n        workspace=args.workspace,\n        parallel_jobs=max(1, min(8, args.parallel_jobs)),\n        generate_benchmarks=args.generate_benchmarks,\n        benchmarks_only=args.benchmarks_only,\n    )\n\n    # Setup paths and config\n    workspace_root = Path(cli_config.workspace or os.getcwd())\n    paths = Paths(workspace_root)\n    config = Config()\n\n    # Handle benchmarks-only mode\n    if cli_config.benchmarks_only:\n        Logger.log(\"Running in benchmarks-only mode\", level=\"info\")\n        cmd = GenerateBenchmarksCommand(paths)\n        success = cmd.execute() if cmd.can_execute() else False\n\n        if success:\n            Logger.exit_panel(\n                \"📊 Cairo benchmarks generated successfully!\", \"Success\", \"green\"\n            )\n            sys.exit(0)\n        else:\n            Logger.exit_panel(\"💥 Failed to generate Cairo benchmarks!\", \"Error\", \"red\")\n            sys.exit(1)\n\n    # Log configuration\n    if cli_config.test_filter:\n        Logger.log(f\"Running tests matching: {cli_config.test_filter}\", level=\"info\")\n    else:\n        Logger.log(\"Running all tests\", level=\"info\")\n    Logger.log(f\"Using {cli_config.parallel_jobs} parallel jobs\", level=\"info\")\n\n    # Execute workflow\n    executor = WorkflowExecutor(config, paths)\n    try:\n        success = executor.execute_workflow(\n            cli_config.test_filter,\n            cli_config.parallel_jobs,\n            cli_config.generate_benchmarks,\n        )\n    except KeyboardInterrupt:\n        Logger.exit_panel(\n            \"👋 Process interrupted by user\\nPartial results may be available\",\n            \"Interrupted\",\n            \"yellow\",\n        )\n        sys.exit(130)\n\n    # Handle results\n    if success:\n        Logger.exit_panel(\n            \"🎉 All operations completed successfully!\", \"Success\", \"green\"\n        )\n        sys.exit(0)\n    else:\n        Logger.exit_panel(\"💥 Workflow failed!\", \"Error\", \"red\")\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  }
]